From 63e42368cb8ea4821b8c45478a367f1bd051a59b Mon Sep 17 00:00:00 2001 From: zyh Date: Sat, 30 Aug 2025 00:46:43 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=A7=BB=E9=99=A4NEW=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E9=93=BE=E6=8E=A5=E7=9A=84=E8=BF=87=E6=9C=9F=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=EF=BC=8C=E8=B0=83=E6=95=B4=E8=BF=87=E6=9C=9F?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/link/LinkGenerationService.java | 12 ++++++------ .../server/service/link/LinkListService.java | 15 ++++++++++----- .../server/service/link/LinkStatusService.java | 9 +++++++-- 3 files changed, 23 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/gameplatform/server/service/link/LinkGenerationService.java b/src/main/java/com/gameplatform/server/service/link/LinkGenerationService.java index 47909e0..93b0fb8 100644 --- a/src/main/java/com/gameplatform/server/service/link/LinkGenerationService.java +++ b/src/main/java/com/gameplatform/server/service/link/LinkGenerationService.java @@ -72,11 +72,11 @@ public class LinkGenerationService { // 从配置表获取每次副本的奖励点数 int perTimeQuantity = systemConfigService.getDefaultQuantity(); long needPoints = (long) times; // 只扣times,不乘以perTimeQuantity - int expireHours = systemConfigService.getConfigValueAsInt("link.expire-hours", 2); + // 移除expireHours配置,因为NEW状态不设置过期时间 if (log.isDebugEnabled()) { - log.debug("generateLinks operatorId={} operatorType={} times={} linkCount={} perTimeQuantity={} needPoints={} expireHours={}", - operatorId, operatorType, times, linkCount, perTimeQuantity, needPoints, expireHours); + log.debug("generateLinks operatorId={} operatorType={} times={} linkCount={} perTimeQuantity={} needPoints={}", + operatorId, operatorType, times, linkCount, perTimeQuantity, needPoints); } if (!isAdminOperator) { @@ -94,7 +94,7 @@ public class LinkGenerationService { batch.setOperatorId(operatorId); linkBatchMapper.insert(batch); - LocalDateTime expireAt = LocalDateTime.now().plusHours(expireHours); + // NEW状态的链接不设置过期时间,只有激活使用时才设置过期时间 List tasks = new ArrayList<>(); for (int i = 0; i < linkCount; i++) { // 生成linkCount个链接 LinkTask t = new LinkTask(); @@ -102,7 +102,7 @@ public class LinkGenerationService { t.setAgentId(operator.getId()); t.setCodeNo(generateCodeNo()); t.setTokenHash(DigestUtils.sha256Hex(generateToken())); - t.setExpireAt(expireAt); + t.setExpireAt(null); // NEW状态不设置过期时间 t.setStatus("NEW"); linkTaskMapper.insert(t); tasks.add(t); @@ -133,7 +133,7 @@ public class LinkGenerationService { GenerateResult result = new GenerateResult(); result.setBatchId(batch.getId()); result.setNeedPoints(needPoints); - result.setExpireAt(expireAt); + result.setExpireAt(null); // NEW状态无过期时间 result.setCodeNos(tasks.stream().map(LinkTask::getCodeNo).toList()); return result; } diff --git a/src/main/java/com/gameplatform/server/service/link/LinkListService.java b/src/main/java/com/gameplatform/server/service/link/LinkListService.java index 230a31c..f83df47 100644 --- a/src/main/java/com/gameplatform/server/service/link/LinkListService.java +++ b/src/main/java/com/gameplatform/server/service/link/LinkListService.java @@ -155,17 +155,22 @@ public class LinkListService { item.setUpdatedAt(task.getUpdatedAt()); // 计算是否过期和剩余时间 + // expire_at字段只在状态为EXPIRED时才有值,表示过期时间戳 LocalDateTime now = LocalDateTime.now(); - boolean isExpired = task.getExpireAt().isBefore(now); - item.setIsExpired(isExpired); + boolean isExpired = "EXPIRED".equals(task.getStatus()); + long remainingSeconds = 0L; + // 根据不同状态计算剩余时间 if (isExpired) { - item.setRemainingSeconds(0L); + remainingSeconds = 0L; } else { - long remainingSeconds = ChronoUnit.SECONDS.between(now, task.getExpireAt()); - item.setRemainingSeconds(Math.max(0, remainingSeconds)); + // 非过期状态显示为永不过期 + remainingSeconds = Long.MAX_VALUE; } + item.setIsExpired(isExpired); + item.setRemainingSeconds(remainingSeconds); + // 从批次信息中获取任务详情 if (batch != null) { item.setQuantity(batch.getQuantity()); 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 1c88d93..a873322 100644 --- a/src/main/java/com/gameplatform/server/service/link/LinkStatusService.java +++ b/src/main/java/com/gameplatform/server/service/link/LinkStatusService.java @@ -464,8 +464,10 @@ public class LinkStatusService { // 2. 检查链接任务是否过期 if (linkTask.getExpireAt() != null && linkTask.getExpireAt().isBefore(LocalDateTime.now())) { log.warn("链接任务已过期: expireAt={}", linkTask.getExpireAt()); + LocalDateTime now = LocalDateTime.now(); linkTask.setStatus("EXPIRED"); - linkTask.setUpdatedAt(LocalDateTime.now()); + linkTask.setExpireAt(now); // 设置过期时间戳 + linkTask.setUpdatedAt(now); linkTaskMapper.update(linkTask); UserLinkStatusResponse response = new UserLinkStatusResponse(); @@ -479,8 +481,10 @@ public class LinkStatusService { if (linkTask.getQrCreatedAt() != null && linkTask.getQrCreatedAt().isBefore(LocalDateTime.now().minusMinutes(10))) { log.warn("选择设备已超过10分钟未登录,链接过期: qrCreatedAt={}", linkTask.getQrCreatedAt()); + LocalDateTime now = LocalDateTime.now(); linkTask.setStatus("EXPIRED"); - linkTask.setUpdatedAt(LocalDateTime.now()); + linkTask.setExpireAt(now); // 设置过期时间戳 + linkTask.setUpdatedAt(now); linkTaskMapper.update(linkTask); UserLinkStatusResponse response = new UserLinkStatusResponse(); @@ -633,6 +637,7 @@ public class LinkStatusService { // 将链接状态设置为过期 linkTask.setStatus("EXPIRED"); + linkTask.setExpireAt(now); // 设置过期时间戳 linkTask.setUpdatedAt(now); linkTaskMapper.updateById(linkTask); log.info("链接状态已更新为EXPIRED: linkTaskId={}, 更新时间={}", linkTask.getId(), now);