From 75112674e8f2f5914815d63f03a1c222cf194c17 Mon Sep 17 00:00:00 2001 From: zyh Date: Sat, 30 Aug 2025 23:26:24 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E7=AB=AF=E9=93=BE=E6=8E=A5=E7=8A=B6=E6=80=81=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E9=80=BB=E8=BE=91=EF=BC=8C=E5=A2=9E=E5=8A=A0=E8=AF=A6=E7=BB=86?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E8=AE=B0=E5=BD=95=E5=92=8C=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/link/LinkStatusService.java | 57 ++++++++++++++++++- 1 file changed, 55 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/gameplatform/server/service/link/LinkStatusService.java b/src/main/java/com/gameplatform/server/service/link/LinkStatusService.java index d6b9047..4616864 100644 --- a/src/main/java/com/gameplatform/server/service/link/LinkStatusService.java +++ b/src/main/java/com/gameplatform/server/service/link/LinkStatusService.java @@ -437,8 +437,61 @@ public class LinkStatusService { * 用户端获取链接状态(支持linkId或codeNo参数,带自动刷新逻辑) */ public Mono 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) {