Explorar o código

feat(game): 更新成绩表数据结构和查询逻辑

- 添加赛事编号、成绩类型、项目类型等新字段到ScoreSheetVo
- 修改数据库查询映射,调整字段对应关系和计时格式处理
- 优化参赛人数和完成人数统计查询逻辑,增加去重处理
- 集成字典数据服务,实现项目类型的标签转换显示
zhou hai 1 día
pai
achega
f916f3adce

+ 13 - 4
ruoyi-modules/ruoyi-game-event/src/main/java/org/dromara/system/domain/vo/ScoreSheetVo.java

@@ -16,15 +16,23 @@ public class ScoreSheetVo implements Serializable {
 
     /** 赛事名称 */
     private String name;
-    /** 计算规则 */
+    /** 赛事编号 */
+    private String bianhao;
+    /** 成绩类型--字典game_score_type
+     1-计时类;2-距离类;3-单次计数类;4-多次计数类;5-排名类;6-远度距离类;7-高度距离类  */
+    private String chengjiType;
+    /** 计算规则 0-升序(1...9);1-降序(9...1);2-失误次数A(1...9);
+     * 3-失误次数B(9...1);4-求和 ;5-最大值;6-最小值;7-平均值 */
     private String paiMing;
     /** 项目名称 */
     private String projectName;
-    /** 项目类型 */
+    /** 项目类型---参考字典game_project_type,一般不修改
+     (如1-径赛,2-田赛,3-趣味个人,4-趣味集体,5-体侧。6;领导男子,7-领导女子,8-赛前拔河,9-径赛集体) */
     private String type;
     /** 项目分类 (0个人 1团体) */
     private String classification;
-    /** 参赛性别 */
+    /** 参赛性别 -字典sys_group_sex
+     1-男;2-女;3-混合;4-其他 */
     private String sex;
     /** 参赛组别 */
     private String zu;
@@ -40,7 +48,8 @@ public class ScoreSheetVo implements Serializable {
     private String startTime;
     /** 裁判员 */
     private String caipan;
-    /** 计时格式 */
+    /** 计时格式 后台:1-00:00.00  0-00:00:00.000
+     *  手持端:1-00:00.00  2-00:00:00.000 */
     private String guize;
     /** 赛事提示 */
     private String info;

+ 6 - 0
ruoyi-modules/ruoyi-game-event/src/main/java/org/dromara/system/service/impl/app/ToClientServiceImpl.java

@@ -281,6 +281,12 @@ public class ToClientServiceImpl implements IToClientService {
         if (vo == null) {
             throw new RuntimeException("该赛事下不存在此项目");
         }
+        List<SysDictDataVo> dictDataVos = dictService.selectDictDataByType("game_project_type");
+        if (!dictDataVos.isEmpty()){
+            dictDataVos.stream()
+                .filter(d -> d.getDictValue().equals(vo.getType()))
+                .findFirst().map(SysDictDataVo::getDictLabel).ifPresent(vo::setType);
+        }
         // 2. 查询该项目下所有参赛人员和队伍信息 (包括已录入成绩和未录入的)
         List<ScoreSheetItemVo> items = baseMapper.selectScoreSheetItems(eventId, projectId);
 

+ 11 - 6
ruoyi-modules/ruoyi-game-event/src/main/resources/mapper/system/app/ToClientMapper.xml

@@ -6,7 +6,9 @@
     <select id="selectScoreSheetMetadata" resultType="org.dromara.system.domain.vo.ScoreSheetVo">
         SELECT
             e.event_name as name,
-            p.score_rule as paiMing,
+            e.event_code as bianhao,
+            p.score_rule as chengjiType,
+            p.order_type as paiMing,
             p.project_name as projectName,
             p.project_type as type,
             p.classification as classification,
@@ -20,18 +22,21 @@
                     AND (JSON_CONTAINS(p.referee_group, JSON_ARRAY(referee_id))
                              OR JSON_CONTAINS(p.referee_group, JSON_ARRAY(CAST(referee_id AS CHAR))))
             ) as caipan,
-            p.timing_format as guize,
+            (CASE WHEN p.timing_format IS NOT NULL THEN p.timing_format ELSE p.count_unit END) as guize,
             (SELECT config_value FROM game_event_config WHERE event_id = p.event_id
                                                           AND config_key = 'event_tip' AND del_flag = '0' LIMIT 1) as eventTip,
-            IFNULL((SELECT COUNT(*) FROM game_athlete a WHERE a.event_id = p.event_id AND a.del_flag = '0'
+            IFNULL((SELECT COUNT(DISTINCT a.athlete_id) FROM game_athlete a
+            WHERE a.event_id = p.event_id AND a.del_flag = '0'
                 AND (JSON_CONTAINS(a.project_value, JSON_ARRAY(p.project_id))
-                OR JSON_CONTAINS(a.project_value, JSON_ARRAY(CAST(p.project_id AS CHAR)))))
+                OR JSON_CONTAINS(a.project_value, JSON_ARRAY(CAST(p.project_id AS CHAR)))
+                    ))
                 , 0) as popnum,
-            IFNULL((SELECT COUNT(*)
+            IFNULL((SELECT COUNT(DISTINCT s.score_id)
                     FROM game_score s
                     JOIN game_athlete a ON s.athlete_id = a.athlete_id AND a.del_flag = '0'
                     WHERE s.project_id = p.project_id AND s.del_flag = '0'
-                    AND ((p.classification = '0' AND s.individual_performance > 0) OR (p.classification = '1' AND s.team_performance > 0))
+                    AND ((p.classification = '0' AND s.individual_performance IS NOT NULL AND s.individual_performance > 0)
+                    OR (p.classification = '1' AND s.team_performance IS NOT NULL AND s.team_performance > 0))
                     )
             , 0) as finishedParticipants
         FROM game_event_project p