feat: 优化用户端链接状态查询逻辑,增加详细日志记录和异常处理
This commit is contained in:
@@ -437,8 +437,61 @@ public class LinkStatusService {
|
||||
* 用户端获取链接状态(支持linkId或codeNo参数,带自动刷新逻辑)
|
||||
*/
|
||||
public Mono<UserLinkStatusResponse> getUserLinkStatus(Long linkId, String codeNo) {
|
||||
return Mono.fromCallable(() -> doGetUserLinkStatus(linkId, codeNo))
|
||||
.subscribeOn(Schedulers.boundedElastic());
|
||||
return Mono.fromCallable(() -> {
|
||||
log.info("=== 开始处理用户端链接状态查询 ===");
|
||||
log.info("linkId: {}, codeNo: {}", linkId, codeNo);
|
||||
|
||||
try {
|
||||
// 1. 查询链接任务
|
||||
LinkTask linkTask = null;
|
||||
if (linkId != null) {
|
||||
linkTask = linkTaskMapper.findById(linkId);
|
||||
log.info("通过linkId查询链接任务: id={}", linkId);
|
||||
} else if (codeNo != null && !codeNo.trim().isEmpty()) {
|
||||
linkTask = linkTaskMapper.findByCodeNo(codeNo.trim());
|
||||
log.info("通过codeNo查询链接任务: codeNo={}", codeNo);
|
||||
}
|
||||
|
||||
if (linkTask == null) {
|
||||
log.error("链接任务不存在: linkId={}, codeNo={}", linkId, codeNo);
|
||||
throw new IllegalArgumentException("链接不存在");
|
||||
}
|
||||
|
||||
log.info("查询到链接任务: id={}, codeNo={}, status={}, needRefresh={}",
|
||||
linkTask.getId(), linkTask.getCodeNo(), linkTask.getStatus(), linkTask.getNeedRefresh());
|
||||
|
||||
return linkTask;
|
||||
} catch (Exception e) {
|
||||
log.error("=== 用户端链接状态查询失败 ===");
|
||||
log.error("错误详情: {}", e.getMessage(), e);
|
||||
throw e;
|
||||
}
|
||||
})
|
||||
.subscribeOn(Schedulers.boundedElastic())
|
||||
.flatMap(linkTask -> {
|
||||
// 如果是USING状态,先执行一次检测
|
||||
if ("USING".equals(linkTask.getStatus())) {
|
||||
log.info("链接状态为USING,立即执行一次登录状态检测");
|
||||
return checkAndHandleLoginStatus(linkTask)
|
||||
.doOnSuccess(pollResult -> {
|
||||
log.info("登录状态检测完成: success={}, status={}",
|
||||
pollResult.isSuccess(), pollResult.getStatus());
|
||||
})
|
||||
.doOnError(error -> {
|
||||
log.warn("登录状态检测失败: {}", error.getMessage());
|
||||
})
|
||||
.onErrorResume(error -> {
|
||||
// 检测失败不影响后续流程,继续返回状态
|
||||
log.warn("检测失败,继续返回当前状态");
|
||||
return Mono.empty();
|
||||
})
|
||||
.then(Mono.fromCallable(() -> doGetUserLinkStatus(linkId, codeNo)));
|
||||
} else {
|
||||
// 非USING状态,直接返回状态
|
||||
return Mono.fromCallable(() -> doGetUserLinkStatus(linkId, codeNo));
|
||||
}
|
||||
})
|
||||
.subscribeOn(Schedulers.boundedElastic());
|
||||
}
|
||||
|
||||
private UserLinkStatusResponse doGetUserLinkStatus(Long linkId, String codeNo) {
|
||||
|
||||
Reference in New Issue
Block a user