feat: 优化用户端链接状态查询逻辑,增加详细日志记录和异常处理

This commit is contained in:
zyh
2025-08-30 23:26:24 +08:00
parent 1ca34bde76
commit 75112674e8

View File

@@ -437,8 +437,61 @@ public class LinkStatusService {
* 用户端获取链接状态支持linkId或codeNo参数带自动刷新逻辑 * 用户端获取链接状态支持linkId或codeNo参数带自动刷新逻辑
*/ */
public Mono<UserLinkStatusResponse> getUserLinkStatus(Long linkId, String codeNo) { public Mono<UserLinkStatusResponse> getUserLinkStatus(Long linkId, String codeNo) {
return Mono.fromCallable(() -> doGetUserLinkStatus(linkId, codeNo)) return Mono.fromCallable(() -> {
.subscribeOn(Schedulers.boundedElastic()); 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) { private UserLinkStatusResponse doGetUserLinkStatus(Long linkId, String codeNo) {