新增系统配置表及默认配置,更新链接生成请求DTO以支持链接数量参数,重构链接生成服务逻辑,添加链接状态查询和有效性检查接口,优化日志记录。
This commit is contained in:
@@ -0,0 +1,120 @@
|
||||
package com.gameplatform.server.controller.admin;
|
||||
|
||||
import com.gameplatform.server.model.dto.common.PageResult;
|
||||
import com.gameplatform.server.model.entity.admin.SystemConfig;
|
||||
import com.gameplatform.server.model.dto.admin.SystemConfigRequest;
|
||||
import com.gameplatform.server.model.dto.admin.SystemConfigResponse;
|
||||
import com.gameplatform.server.model.dto.admin.SystemConfigConverter;
|
||||
import com.gameplatform.server.service.admin.SystemConfigService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/api/admin/config")
|
||||
@Tag(name = "系统配置管理", description = "系统配置的增删改查接口")
|
||||
public class SystemConfigController {
|
||||
|
||||
@Autowired
|
||||
private SystemConfigService systemConfigService;
|
||||
|
||||
@GetMapping("/list")
|
||||
@Operation(summary = "获取配置列表", description = "分页获取所有系统配置")
|
||||
public ResponseEntity<PageResult<SystemConfigResponse>> getConfigList(
|
||||
@RequestParam(defaultValue = "1") int page,
|
||||
@RequestParam(defaultValue = "20") int size) {
|
||||
|
||||
int offset = (page - 1) * size;
|
||||
List<SystemConfig> configs = systemConfigService.getAllConfigs(size, offset);
|
||||
long total = systemConfigService.getConfigCount();
|
||||
|
||||
List<SystemConfigResponse> responses = configs.stream()
|
||||
.map(SystemConfigConverter::toResponse)
|
||||
.toList();
|
||||
|
||||
PageResult<SystemConfigResponse> result = new PageResult<>();
|
||||
result.setItems(responses);
|
||||
result.setTotal(total);
|
||||
result.setPage(page);
|
||||
result.setSize(size);
|
||||
|
||||
return ResponseEntity.ok(result);
|
||||
}
|
||||
|
||||
@GetMapping("/key/{configKey}")
|
||||
@Operation(summary = "根据键获取配置", description = "根据配置键获取配置信息")
|
||||
public ResponseEntity<SystemConfigResponse> getConfigByKey(@PathVariable String configKey) {
|
||||
SystemConfig config = systemConfigService.getConfigByKey(configKey);
|
||||
if (config == null) {
|
||||
return ResponseEntity.notFound().build();
|
||||
}
|
||||
return ResponseEntity.ok(SystemConfigConverter.toResponse(config));
|
||||
}
|
||||
|
||||
@GetMapping("/type/{configType}")
|
||||
@Operation(summary = "根据类型获取配置", description = "根据配置类型获取配置列表")
|
||||
public ResponseEntity<List<SystemConfigResponse>> getConfigsByType(@PathVariable String configType) {
|
||||
List<SystemConfig> configs = systemConfigService.getConfigsByType(configType);
|
||||
List<SystemConfigResponse> responses = configs.stream()
|
||||
.map(SystemConfigConverter::toResponse)
|
||||
.toList();
|
||||
return ResponseEntity.ok(responses);
|
||||
}
|
||||
|
||||
@PostMapping
|
||||
@Operation(summary = "创建配置", description = "创建新的系统配置")
|
||||
public ResponseEntity<Boolean> createConfig(@RequestBody SystemConfigRequest request) {
|
||||
SystemConfig systemConfig = SystemConfigConverter.toEntity(request);
|
||||
boolean success = systemConfigService.createConfig(systemConfig);
|
||||
return ResponseEntity.ok(success);
|
||||
}
|
||||
|
||||
@PutMapping("/{id}")
|
||||
@Operation(summary = "更新配置", description = "更新指定ID的系统配置")
|
||||
public ResponseEntity<Boolean> updateConfig(@PathVariable Long id, @RequestBody SystemConfigRequest request) {
|
||||
SystemConfig systemConfig = SystemConfigConverter.toEntity(request);
|
||||
systemConfig.setId(id);
|
||||
boolean success = systemConfigService.updateConfig(systemConfig);
|
||||
return ResponseEntity.ok(success);
|
||||
}
|
||||
|
||||
@DeleteMapping("/{id}")
|
||||
@Operation(summary = "删除配置", description = "删除指定ID的系统配置")
|
||||
public ResponseEntity<Boolean> deleteConfig(@PathVariable Long id) {
|
||||
boolean success = systemConfigService.deleteConfig(id);
|
||||
return ResponseEntity.ok(success);
|
||||
}
|
||||
|
||||
@DeleteMapping("/key/{configKey}")
|
||||
@Operation(summary = "根据键删除配置", description = "根据配置键删除系统配置")
|
||||
public ResponseEntity<Boolean> deleteConfigByKey(@PathVariable String configKey) {
|
||||
boolean success = systemConfigService.deleteConfigByKey(configKey);
|
||||
return ResponseEntity.ok(success);
|
||||
}
|
||||
|
||||
@GetMapping("/link/defaults")
|
||||
@Operation(summary = "获取链接默认配置", description = "获取链接生成相关的默认配置")
|
||||
public ResponseEntity<Object> getLinkDefaults() {
|
||||
return ResponseEntity.ok(new Object() {
|
||||
public final Integer defaultQuantity = systemConfigService.getDefaultQuantity();
|
||||
public final Integer refreshInterval = systemConfigService.getRefreshInterval();
|
||||
public final Integer qrExpireTime = systemConfigService.getQrExpireTime();
|
||||
public final Integer maxTimesPerBatch = systemConfigService.getMaxTimesPerBatch();
|
||||
public final Integer minQuantity = systemConfigService.getMinQuantity();
|
||||
public final Integer maxQuantity = systemConfigService.getMaxQuantity();
|
||||
});
|
||||
}
|
||||
|
||||
@GetMapping("/script/config")
|
||||
@Operation(summary = "获取脚本配置", description = "获取脚本服务器相关配置")
|
||||
public ResponseEntity<Object> getScriptConfig() {
|
||||
return ResponseEntity.ok(new Object() {
|
||||
public final String serverUrl = systemConfigService.getScriptServerUrl();
|
||||
public final String qrPathTemplate = systemConfigService.getQrPathTemplate();
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,9 @@ package com.gameplatform.server.controller.link;
|
||||
|
||||
import com.gameplatform.server.model.dto.link.LinkGenerateRequest;
|
||||
import com.gameplatform.server.model.dto.link.LinkGenerateResponse;
|
||||
import com.gameplatform.server.model.dto.link.LinkStatusResponse;
|
||||
import com.gameplatform.server.service.link.LinkGenerationService;
|
||||
import com.gameplatform.server.service.link.LinkStatusService;
|
||||
import io.jsonwebtoken.Claims;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
@@ -24,9 +26,11 @@ public class LinkController {
|
||||
private static final Logger log = LoggerFactory.getLogger(LinkController.class);
|
||||
|
||||
private final LinkGenerationService linkGenerationService;
|
||||
private final LinkStatusService linkStatusService;
|
||||
|
||||
public LinkController(LinkGenerationService linkGenerationService) {
|
||||
public LinkController(LinkGenerationService linkGenerationService, LinkStatusService linkStatusService) {
|
||||
this.linkGenerationService = linkGenerationService;
|
||||
this.linkStatusService = linkStatusService;
|
||||
}
|
||||
|
||||
@PostMapping("/generate")
|
||||
@@ -35,8 +39,8 @@ public class LinkController {
|
||||
public Mono<LinkGenerateResponse> generateLinks(@Valid @RequestBody LinkGenerateRequest request,
|
||||
Authentication authentication) {
|
||||
log.info("=== 开始处理链接生成请求 ===");
|
||||
log.info("请求参数: times={}, perTimeQuantity={}",
|
||||
request.getTimes(), request.getPerTimeQuantity());
|
||||
log.info("请求参数: times={}, linkCount={}",
|
||||
request.getTimes(), request.getLinkCount());
|
||||
|
||||
log.info("=== 开始检查认证信息 ===");
|
||||
log.info("Authentication: {}", authentication);
|
||||
@@ -92,11 +96,11 @@ public class LinkController {
|
||||
log.info("=== 用户认证信息完整,开始处理业务逻辑 ===");
|
||||
log.info("操作者信息: operatorId={}, operatorType={}, username={}",
|
||||
operatorId, operatorType, username);
|
||||
log.info("业务参数: times={}, perTimeQuantity={}",
|
||||
request.getTimes(), request.getPerTimeQuantity());
|
||||
log.info("业务参数: times={}, linkCount={}",
|
||||
request.getTimes(), request.getLinkCount());
|
||||
|
||||
return linkGenerationService.generateLinks(operatorId, operatorType,
|
||||
request.getTimes(), request.getPerTimeQuantity())
|
||||
request.getTimes(), request.getLinkCount())
|
||||
.map(result -> {
|
||||
log.info("链接生成成功,batchId: {}, 扣除积分: {}, 过期时间: {}",
|
||||
result.getBatchId(), result.getNeedPoints(), result.getExpireAt());
|
||||
@@ -111,6 +115,36 @@ public class LinkController {
|
||||
log.error("链接生成失败: {}", error.getMessage(), error);
|
||||
});
|
||||
}
|
||||
|
||||
@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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user