feat: 添加用户端链接状态查询接口及自动刷新逻辑

主要修改:
1. 在LinkController中新增获取用户链接状态的接口,支持通过linkId或codeNo查询。
2. 在LinkStatusService中实现用户链接状态查询逻辑,包含自动刷新和二维码更新功能。
3. 更新LinkTask实体,添加needRefresh、refreshTime、qrCreatedAt和qrExpireAt字段以支持新功能。
4. 在ScriptClient中新增检查空闲设备、选区、刷新、检查上号状态等操作的实现。
5. 更新SecurityConfig,允许用户端获取链接状态接口公开访问。

技术细节:
- 新增UserLinkStatusResponse DTO以支持用户链接状态的返回格式。
- 通过脚本端接口实现链接状态的自动刷新和二维码信息更新。
This commit is contained in:
zyh
2025-08-26 18:07:44 +08:00
parent e9858bfec1
commit 3847250c2b
13 changed files with 1106 additions and 18 deletions

View File

@@ -7,6 +7,7 @@ import com.gameplatform.server.model.dto.link.LinkGenerateResponse;
import com.gameplatform.server.model.dto.link.LinkListRequest;
import com.gameplatform.server.model.dto.link.LinkListResponse;
import com.gameplatform.server.model.dto.link.LinkStatusResponse;
import com.gameplatform.server.model.dto.link.UserLinkStatusResponse;
import com.gameplatform.server.service.link.LinkGenerationService;
import com.gameplatform.server.service.link.LinkListService;
import com.gameplatform.server.service.link.LinkStatusService;
@@ -195,6 +196,37 @@ public class LinkController {
return linkStatusService.isLinkValid(codeNo);
}
@GetMapping("/status")
@Operation(summary = "用户端获取链接状态", description = "根据链接ID或链接编号获取链接状态包含自动刷新逻辑用于用户端页面")
public Mono<UserLinkStatusResponse> getUserLinkStatus(
@RequestParam(value = "linkId", required = false) Long linkId,
@RequestParam(value = "codeNo", required = false) String codeNo,
@RequestParam(value = "code", required = false) String code) {
log.info("=== 用户端获取链接状态 ===");
log.info("linkId: {}, codeNo: {}, code: {}", linkId, codeNo, code);
// 如果提供了code参数则将其作为codeNo使用
String actualCodeNo = codeNo;
if (actualCodeNo == null || actualCodeNo.trim().isEmpty()) {
actualCodeNo = code;
}
// 验证参数linkId和实际的codeNo至少提供一个
if (linkId == null && (actualCodeNo == null || actualCodeNo.trim().isEmpty())) {
log.error("参数错误linkId、codeNo或code至少提供一个");
return Mono.error(new IllegalArgumentException("参数错误linkId、codeNo或code至少提供一个"));
}
return linkStatusService.getUserLinkStatus(linkId, actualCodeNo)
.doOnSuccess(response -> {
log.info("用户端链接状态查询成功: status={}, view={}, needRefresh={}",
response.getStatus(), response.getView(), response.getNeedRefresh());
})
.doOnError(error -> {
log.error("用户端链接状态查询失败: {}", error.getMessage(), error);
});
}
@DeleteMapping("/{codeNo}")
@Operation(summary = "删除链接", description = "删除指定的链接,用户只能删除自己创建的链接")
public Mono<Boolean> deleteLink(@PathVariable("codeNo") String codeNo, Authentication authentication) {