feat: 添加AOP支持和更新链接控制器逻辑
主要修改: 1. 在pom.xml中新增spring-boot-starter-aop依赖,支持面向切面编程。 2. 在LinkController中移除DeviceCodeMappingService的依赖,更新二维码获取逻辑,使用linkStatusService获取设备ID。 3. 在SelectRegionResponse中新增mecmachineId字段,便于调试和维护。 4. 在SecurityConfig中允许二维码HEAD请求公开访问。 技术细节: - 通过引入AOP支持,提升了代码的可维护性和扩展性,同时优化了链接控制器的逻辑,确保设备ID的获取更加灵活。
This commit is contained in:
@@ -15,7 +15,6 @@ 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;
|
||||
import com.gameplatform.server.service.device.DeviceCodeMappingService;
|
||||
import com.gameplatform.server.service.external.ScriptClient;
|
||||
import io.jsonwebtoken.Claims;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
@@ -41,18 +40,15 @@ public class LinkController {
|
||||
private final LinkGenerationService linkGenerationService;
|
||||
private final LinkStatusService linkStatusService;
|
||||
private final LinkListService linkListService;
|
||||
private final DeviceCodeMappingService deviceCodeMappingService;
|
||||
private final ScriptClient scriptClient;
|
||||
|
||||
public LinkController(LinkGenerationService linkGenerationService,
|
||||
LinkStatusService linkStatusService,
|
||||
LinkListService linkListService,
|
||||
DeviceCodeMappingService deviceCodeMappingService,
|
||||
ScriptClient scriptClient) {
|
||||
this.linkGenerationService = linkGenerationService;
|
||||
this.linkStatusService = linkStatusService;
|
||||
this.linkListService = linkListService;
|
||||
this.deviceCodeMappingService = deviceCodeMappingService;
|
||||
this.scriptClient = scriptClient;
|
||||
}
|
||||
|
||||
@@ -182,35 +178,6 @@ public class LinkController {
|
||||
});
|
||||
}
|
||||
|
||||
// @GetMapping("/{codeNo}/status")
|
||||
// @Operation(summary = "获取链接状态", description = "根据链接编号获取链接的详细状态信息,包括过期时间、奖励点数、当前状态等")
|
||||
// public Mono<LinkStatusResponse> getLinkStatus(@PathVariable("codeNo") String codeNo) {
|
||||
// log.info("=== 开始查询链接状态 ===");
|
||||
// log.info("链接编号: {}", codeNo);
|
||||
//
|
||||
// return linkStatusService.getLinkStatus(codeNo)
|
||||
// .doOnSuccess(response -> {
|
||||
// log.info("链接状态查询成功: codeNo={}, status={}, isExpired={}",
|
||||
// codeNo, response.getStatus(), response.getIsExpired());
|
||||
// })
|
||||
// .doOnError(error -> {
|
||||
// log.error("链接状态查询失败: codeNo={}, error={}", codeNo, error.getMessage(), error);
|
||||
// });
|
||||
// }
|
||||
//
|
||||
// @GetMapping("/{codeNo}/exists")
|
||||
// @Operation(summary = "检查链接是否存在", description = "检查指定链接编号是否存在")
|
||||
// public Mono<Boolean> isLinkExists(@PathVariable("codeNo") String codeNo) {
|
||||
// log.debug("检查链接是否存在: codeNo={}", codeNo);
|
||||
// return linkStatusService.isLinkExists(codeNo);
|
||||
// }
|
||||
//
|
||||
// @GetMapping("/{codeNo}/valid")
|
||||
// @Operation(summary = "检查链接是否有效", description = "检查指定链接是否有效(未过期且状态正常)")
|
||||
// public Mono<Boolean> isLinkValid(@PathVariable("codeNo") String codeNo) {
|
||||
// log.debug("检查链接是否有效: codeNo={}", codeNo);
|
||||
// return linkStatusService.isLinkValid(codeNo);
|
||||
// }
|
||||
@DeleteMapping("/{codeNo}")
|
||||
@Operation(summary = "删除链接", description = "删除指定的链接,用户只能删除自己创建的链接")
|
||||
public Mono<Boolean> deleteLink(@PathVariable("codeNo") String codeNo, Authentication authentication) {
|
||||
@@ -464,31 +431,31 @@ public Mono<Boolean> deleteLink(@PathVariable("codeNo") String codeNo, Authentic
|
||||
* 代理二维码获取接口
|
||||
* 通过代理code获取真实设备的二维码,避免暴露设备编号
|
||||
*/
|
||||
@GetMapping("/qr/{proxyCode}")
|
||||
@GetMapping("/qr/{code}")
|
||||
@Operation(summary = "获取二维码", description = "通过代理code获取设备二维码,用于扫码上号")
|
||||
public Mono<ResponseEntity<byte[]>> getProxyQrCode(@PathVariable("proxyCode") String proxyCode) {
|
||||
public Mono<ResponseEntity<byte[]>> getProxyQrCode(@PathVariable("code") String code) {
|
||||
log.info("=== 获取代理二维码 ===");
|
||||
log.info("代理code: {}", proxyCode);
|
||||
log.info("代理code: {}", code);
|
||||
|
||||
// 验证代理code是否有效
|
||||
if (!deviceCodeMappingService.isValidProxyCode(proxyCode)) {
|
||||
log.warn("无效的代理code: {}", proxyCode);
|
||||
return Mono.just(ResponseEntity.notFound().build());
|
||||
}
|
||||
// // 验证代理code是否有效
|
||||
// if (!deviceCodeMappingService.isValidProxyCode(proxyCode)) {
|
||||
// log.warn("无效的代理code: {}", proxyCode);
|
||||
// return Mono.just(ResponseEntity.notFound().build());
|
||||
// }
|
||||
|
||||
// 获取真实设备编号
|
||||
String deviceId = deviceCodeMappingService.getDeviceId(proxyCode);
|
||||
if (deviceId == null) {
|
||||
log.warn("代理code对应的设备不存在: {}", proxyCode);
|
||||
String meachainId = linkStatusService.getMechainIdByCode(code);
|
||||
if (meachainId == null) {
|
||||
log.warn("代理code对应的设备不存在: {}", code);
|
||||
return Mono.just(ResponseEntity.notFound().build());
|
||||
}
|
||||
|
||||
log.info("代理code {} 对应设备: {}", proxyCode, deviceId);
|
||||
log.info("代理code {} 对应设备: {}", code, meachainId);
|
||||
|
||||
// 获取真实设备的二维码
|
||||
return scriptClient.getDeviceQrCode(deviceId)
|
||||
return scriptClient.getDeviceQrCode(meachainId)
|
||||
.map(qrData -> {
|
||||
log.info("获取设备 {} 二维码成功,大小: {} 字节", deviceId, qrData.length);
|
||||
log.info("获取设备 {} 二维码成功,大小: {} 字节", meachainId, qrData.length);
|
||||
|
||||
// 设置响应头
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
@@ -502,14 +469,14 @@ public Mono<Boolean> deleteLink(@PathVariable("codeNo") String codeNo, Authentic
|
||||
.body(qrData);
|
||||
})
|
||||
.onErrorResume(error -> {
|
||||
log.error("获取设备 {} 二维码失败: {}", deviceId, error.getMessage(), error);
|
||||
log.error("获取设备 {} 二维码失败: {}", meachainId, error.getMessage(), error);
|
||||
|
||||
// 如果是404错误,返回404;其他错误返回500
|
||||
if (error instanceof WebClientResponseException.NotFound) {
|
||||
log.warn("设备 {} 的二维码文件不存在,返回404", deviceId);
|
||||
log.warn("设备 {} 的二维码文件不存在,返回404", meachainId);
|
||||
return Mono.just(ResponseEntity.status(HttpStatus.NOT_FOUND).build());
|
||||
} else {
|
||||
log.error("获取设备 {} 二维码时发生系统错误", deviceId);
|
||||
log.error("获取设备 {} 二维码时发生系统错误", meachainId);
|
||||
return Mono.just(ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build());
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user