浏览代码

feat(game): 添加运动员参赛证二维码功能

- 新增 AthleteQRCodeVo 视图对象用于二维码基础信息展示
- 移除 RankingBoardVO 的无效导入和相关注释代码
- 重构 generateQRCodeData 方法,使用 JSON 格式替代 URL 参数格式
- 简化二维码数据生成逻辑,提高代码可读性和维护性
- 移除调试日志,优化性能表现
zhou 23 小时之前
父节点
当前提交
b22c5536d3

+ 0 - 5
ruoyi-modules/ruoyi-game-event/src/main/java/org/dromara/system/controller/app/ExperienceVersionController.java

@@ -8,7 +8,6 @@ import org.dromara.common.core.domain.R;
 import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.tenant.helper.TenantHelper;
 import org.dromara.system.domain.GameEvent;
-import org.dromara.system.domain.vo.RankingBoardVO;
 import org.dromara.system.domain.vo.app.*;
 import org.dromara.system.domain.bo.ExperienceEnrollSubmitBo;
 import org.dromara.system.mapper.*;
@@ -103,10 +102,6 @@ public class ExperienceVersionController {
         return R.ok(TenantHelper.ignore(() -> userEventService.getExperienceMyRecord(phone.trim())));
     }
 
-    /**
-     * 6、赛事详情页---赛事成绩排行榜查询接口
-     */
-
     /**
      * 7、赛事菜单查询接口
      */

+ 36 - 0
ruoyi-modules/ruoyi-game-event/src/main/java/org/dromara/system/domain/vo/AthleteQRCodeVo.java

@@ -0,0 +1,36 @@
+package org.dromara.system.domain.vo;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 运动员参赛证二维码基础信息视图对象
+ *
+ * @author zlt
+ * @date 2026-06-17
+ */
+@Data
+public class AthleteQRCodeVo implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /** 运动员ID */
+    private Long id;
+
+    /** 队伍ID */
+    private Long teamId;
+
+    /** 队员号码 */
+    private String num;
+
+    /** 队员姓名 */
+    private String name;
+
+    /** 队伍名称 */
+    private String duiwu;
+
+    /** 参赛序号 / 道次 */
+    private Long xuhao;
+}

+ 13 - 49
ruoyi-modules/ruoyi-game-event/src/main/java/org/dromara/system/service/impl/GameEventServiceImpl.java

@@ -1384,56 +1384,20 @@ public class GameEventServiceImpl implements IGameEventService {
      */
     private String generateQRCodeData(GameAthleteVo athlete) {
         try {
-            // 添加调试日志
-            log.debug("生成二维码数据 - 运动员: {}, projectValue: {}, projectList: {}",
-                athlete.getName(), athlete.getProjectValue(), athlete.getProjectList());
-
-            // 处理参加项目
-            StringJoiner joiner = new StringJoiner("、"); // 指定分隔符
-            if (athlete.getProjectList() != null && !athlete.getProjectList().isEmpty()) {
-                Map<Long, String> projectMap = gameEventProjectService.queryNameByEventIdAndProjectIds(athlete.getEventId(), athlete.getProjectList());
-                log.debug("项目映射结果: {}", projectMap);
-
-                // 添加额外的null检查
-                if (projectMap == null) {
-                    log.warn("项目映射结果为空,返回空字符串,逻辑上不可能为空,如果有空项目,应该在运动员表中删除");
-                    projectMap = new HashMap<>();
-                }
-
-                for (Long projectId : athlete.getProjectList()) {
-                    String projectName = projectMap.getOrDefault(projectId, "未知项目");
-                    joiner.add(projectName);
-                }
-            }
-            String xiangmu = joiner.toString();
-
-            // 获取运动员姓名并进行URL编码
-            String encodedName = java.net.URLEncoder.encode(athlete.getName(), "UTF-8");
-
-            // 获取赛事ID(从athlete对象中获取)
-            Long shId = athlete.getEventId();
-
-            // 获取赛事名称和队伍名称
-            String shName = athlete.getEventName();
-            String dwName = athlete.getTeamName() != null ? athlete.getTeamName() : "未知队伍";
-
-            // 生成符合要求格式的URL查询参数字符串
-            String qrData = String.format(
-                "id=%s&name=%s&gender=%s&shId=%d&shName=%s&dwName=%s&xiangmu=%s",
-                athlete.getAthleteCode(), // 队员号码(唯一ID)
-                encodedName, // 队员姓名(URL编码)
-                athlete.getGender(), // 性别
-                shId, // 赛事ID
-                shName, // 赛事名称
-                dwName, // 队伍名称
-                xiangmu // 参与项目
-            );
-
-            return qrData;
+            // 构造包含基础信息的运动员二维码数据对象
+            AthleteQRCodeVo vo = new AthleteQRCodeVo();
+            vo.setId(athlete.getAthleteId());
+            vo.setTeamId(athlete.getTeamId());
+            vo.setName(athlete.getName());
+            vo.setDuiwu(athlete.getTeamName());
+            vo.setXuhao(athlete.getTrackIndex());
+            vo.setNum(athlete.getAthleteCode());
+
+            // 直接返回对象序列化后的 JSON 字符串
+            return JsonUtils.toJsonString(vo);
         } catch (Exception e) {
-            // 如果编码失败,返回基本信息
-            log.error("生成二维码数据失败(编码失败): {}", e.getMessage(), e);
-            return String.format("id=%s&name=%s", athlete.getAthleteCode(), athlete.getName());
+            log.error("生成二维码数据失败: {}", e.getMessage(), e);
+            return "";
         }
     }