fix: 修复LinkTaskMapper中target_score列不存在的SQL错误
- 移除LinkTaskMapper.xml中所有对不存在的target_score列的引用 - 修复因SQL查询不存在列导致的BadSqlGrammarException - 添加TargetScoreResponse DTO用于目标点数响应 - 更新LinkController添加获取目标点数接口 - 优化UserLinkStatusResponse添加machineId字段 - 更新数据库schema文档 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -8,6 +8,7 @@ import com.gameplatform.server.model.dto.link.LinkStatusResponse;
|
||||
import com.gameplatform.server.model.dto.link.PollLoginResponse;
|
||||
import com.gameplatform.server.model.dto.link.SelectRegionResponse;
|
||||
import com.gameplatform.server.model.dto.link.UserLinkStatusResponse;
|
||||
import com.gameplatform.server.model.dto.link.TargetScoreResponse;
|
||||
import com.gameplatform.server.model.entity.agent.LinkBatch;
|
||||
import com.gameplatform.server.model.entity.agent.LinkTask;
|
||||
|
||||
@@ -521,7 +522,7 @@ public class LinkStatusService {
|
||||
// 如果状态是USING,返回NEW给用户端
|
||||
String statusToReturn = "USING".equals(linkTask.getStatus()) ? "NEW" : linkTask.getStatus();
|
||||
response.setStatus(statusToReturn);
|
||||
|
||||
response.setMachineId(linkTask.getMachineId());
|
||||
return response;
|
||||
}
|
||||
|
||||
@@ -900,4 +901,93 @@ public class LinkStatusService {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取目标点数
|
||||
* @param codeNo 链接编号
|
||||
* @return 目标点数响应
|
||||
*/
|
||||
public Mono<TargetScoreResponse> getTargetScore(String codeNo) {
|
||||
return Mono.fromCallable(() -> doGetTargetScore(codeNo))
|
||||
.subscribeOn(Schedulers.boundedElastic());
|
||||
}
|
||||
|
||||
private TargetScoreResponse doGetTargetScore(String codeNo) {
|
||||
log.info("=== 开始获取目标点数 ===");
|
||||
log.info("链接编号: {}", codeNo);
|
||||
|
||||
try {
|
||||
// 1. 验证参数
|
||||
if (codeNo == null || codeNo.trim().isEmpty()) {
|
||||
log.error("参数验证失败: codeNo不能为空");
|
||||
return TargetScoreResponse.error(codeNo, null, "链接编号不能为空");
|
||||
}
|
||||
|
||||
// 2. 查询链接任务,获取machineId
|
||||
LinkTask linkTask = linkTaskMapper.findByCodeNo(codeNo.trim());
|
||||
if (linkTask == null) {
|
||||
log.error("链接任务不存在: codeNo={}", codeNo);
|
||||
return TargetScoreResponse.error(codeNo, null, "链接不存在");
|
||||
}
|
||||
|
||||
String machineId = linkTask.getMachineId();
|
||||
if (machineId == null || machineId.trim().isEmpty()) {
|
||||
log.error("链接未关联设备: codeNo={}", codeNo);
|
||||
return TargetScoreResponse.error(codeNo, null, "链接未关联设备");
|
||||
}
|
||||
|
||||
log.info("查询到设备ID: codeNo={}, machineId={}", codeNo, machineId);
|
||||
|
||||
// 3. 调用脚本端获取目标分数
|
||||
log.info("调用脚本端获取目标分数: machineId={}", machineId);
|
||||
String targetScoreStr = scriptClient.getTargetScore(machineId).block();
|
||||
log.info("脚本端返回结果: machineId={}, result={}", machineId, targetScoreStr);
|
||||
|
||||
// 4. 解析返回结果
|
||||
if (targetScoreStr == null || targetScoreStr.trim().isEmpty()) {
|
||||
log.warn("脚本端返回空结果: machineId={}", machineId);
|
||||
return TargetScoreResponse.error(codeNo, machineId, "网络繁忙,稍后再试");
|
||||
}
|
||||
|
||||
String trimmedResult = targetScoreStr.trim();
|
||||
|
||||
// 检查是否为数字
|
||||
try {
|
||||
Integer targetScore = Integer.parseInt(trimmedResult);
|
||||
log.info("解析到数字目标分数: {}", targetScore);
|
||||
|
||||
// 5. 保存到数据库
|
||||
linkTask.setCompletedPoints(targetScore);
|
||||
linkTask.setUpdatedAt(LocalDateTime.now());
|
||||
int updateResult = linkTaskMapper.update(linkTask);
|
||||
|
||||
if (updateResult > 0) {
|
||||
log.info("目标分数保存成功: codeNo={}, machineId={}, targetScore={}",
|
||||
codeNo, machineId, targetScore);
|
||||
return TargetScoreResponse.success(codeNo, machineId, targetScore);
|
||||
} else {
|
||||
log.error("目标分数保存失败: codeNo={}, machineId={}, targetScore={}",
|
||||
codeNo, machineId, targetScore);
|
||||
return TargetScoreResponse.error(codeNo, machineId, "保存目标分数失败");
|
||||
}
|
||||
|
||||
} catch (NumberFormatException e) {
|
||||
// 不是数字,检查特殊状态
|
||||
log.info("脚本端返回非数字结果: {}", trimmedResult);
|
||||
|
||||
if ("空的".equals(trimmedResult) || "空闲".equals(trimmedResult) || "已运行".equals(trimmedResult)) {
|
||||
log.info("设备状态为: {}", trimmedResult);
|
||||
return TargetScoreResponse.error(codeNo, machineId, "网络繁忙,稍后再试");
|
||||
} else {
|
||||
log.warn("未知的返回结果: {}", trimmedResult);
|
||||
return TargetScoreResponse.error(codeNo, machineId, "网络繁忙,稍后再试");
|
||||
}
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("=== 获取目标点数失败 ===");
|
||||
log.error("错误详情: codeNo={}, error={}", codeNo, e.getMessage(), e);
|
||||
return TargetScoreResponse.error(codeNo, null, "系统异常,请稍后再试");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user