Просмотр исходного кода

feat(game): 添加纯排名计算功能支持

- 新增isOnlyRecalculate判断逻辑,支持不带具体录入对象的纯排名计算请求
- 优化成绩处理流程,区分普通成绩录入和纯排名计算场景
- 保持原有成绩录入功能完整性,确保正常业务流程不受影响
- 重构代码结构提高可读性和维护性
zhou 2 недель назад
Родитель
Сommit
069aaa86e3

+ 25 - 23
ruoyi-modules/ruoyi-game-event/src/main/java/org/dromara/system/service/impl/GameScoreServiceImpl.java

@@ -562,40 +562,42 @@ public class GameScoreServiceImpl implements IGameScoreService {
         GameEventProjectVo project = gameEventProjectService.queryById(bo.getProjectId());
         if (project == null) return false;
 
-        // 自动分析汇总成绩和失误
-        if (bo.getDetails() != null && !bo.getDetails().isEmpty()) {
-            calculateAndSetAggregatePerformance(bo, project);
-        }
+        // 判断是否是“纯排名计算”请求(不带具体的录入对象)
+        boolean isOnlyRecalculate = bo.getAthleteId() == null && bo.getTeamId() == null && (bo.getScoreId() == null || bo.getScoreId() == 0);
 
-        Boolean result = false;
+        Boolean result = true;
 
-        if (ProjectClassification.TEAM.getValue().equals(project.getClassification())) {
-            // 团体项目:为队伍中的所有运动员创建或更新成绩记录
-            // log.info("处理团体项目成绩更新");
-            result = handleTeamScoreUpdate(bo);
-        } else {
-            // 个人项目:直接更新或插入
-            // log.info("处理个人项目成绩更新,scoreId: {}", bo.getScoreId());
-            if (bo.getScoreId() != null && bo.getScoreId() > 0) {
-                result = updateByBo(bo);
-                // log.info("更新现有成绩记录,结果: {}", result);
+        if (!isOnlyRecalculate) {
+            // 自动分析汇总成绩和失误
+            if (bo.getDetails() != null && !bo.getDetails().isEmpty()) {
+                calculateAndSetAggregatePerformance(bo, project);
+            }
+
+            if (ProjectClassification.TEAM.getValue().equals(project.getClassification())) {
+                // 团体项目:为队伍中的所有运动员创建或更新成绩记录
+                result = handleTeamScoreUpdate(bo);
             } else {
-                result = insertByBo(bo);
-                // log.info("插入新成绩记录,结果: {}", result);
+                // 个人项目:直接更新或插入
+                if (bo.getScoreId() != null && bo.getScoreId() > 0) {
+                    result = updateByBo(bo);
+                } else {
+                    result = insertByBo(bo);
+                }
             }
-        }
 
-        if (result) {
-            // 个人项目:如果传了明细,则保存 (团体项目已在 handleTeamScoreUpdate 中处理过)
-            if ("0".equals(project.getClassification()) && bo.getDetails() != null && !bo.getDetails().isEmpty()) {
-                saveScoreDetails(bo.getScoreId(), bo.getProjectId(), bo.getAthleteId(), null, bo.getDetails());
+            if (result) {
+                // 个人项目:如果传了明细,则保存 (团体项目已在 handleTeamScoreUpdate 中处理过)
+                if ("0".equals(project.getClassification()) && bo.getDetails() != null && !bo.getDetails().isEmpty()) {
+                    saveScoreDetails(bo.getScoreId(), bo.getProjectId(), bo.getAthleteId(), null, bo.getDetails());
+                }
             }
+        }
 
+        if (result) {
             // 重新计算排名和积分
             recalculateRankingsAndPoints(bo.getEventId(), bo.getProjectId());
         }
 
-        // log.info("成绩更新处理完成,结果: {}", result);
         return result;
     }