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

feat(game-event): 添加赛事大屏网址配置功能

- 在application-prod.yml中新增file.upload.path配置项
- 在application-prod.yml中新增game-event.large-screen-url配置项
- 在GameEventServiceImpl中注入IGameEventConfigService和largeScreenUrlPrefix
- 在插入赛事时自动生成赛事大屏网址配置
- 实现saveLargeScreenUrlConfig方法用于创建大屏网址配置
- 在ToClientServiceImpl中增加项目类型字典映射功能
- 将项目类型值转换为对应的标签显示
zhou 23 часов назад
Родитель
Сommit
f4cd2cdc15

+ 6 - 0
ruoyi-admin/src/main/resources/application-prod.yml

@@ -273,6 +273,12 @@ justauth:
       client-secret: 1f7d08**********5b7**********29e
       redirect-uri: ${justauth.address}/social-callback?source=gitea
 
+# 生成的参赛证线上的本地存储位置
 file:
   upload:
     path: /www/wwwroot/game_event/files
+
+# 赛事大屏路由前缀
+game-event:
+  large-screen-url: https://meet3.sportsrobo.club/
+

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

@@ -92,6 +92,11 @@ public class GameEventServiceImpl implements IGameEventService {
     private FileUploadConfig fileUploadConfig;
     @Resource
     private ISysOssService sysOssService;
+    @Resource
+    private IGameEventConfigService gameEventConfigService;
+
+    @Value("${game-event.large-screen-url:http://localhost:5173/}")
+    private String largeScreenUrlPrefix;
 
     /**
      * 更新赛事小程序码
@@ -233,16 +238,49 @@ public class GameEventServiceImpl implements IGameEventService {
     @Override
     public Long insertByBo(GameEventBo bo) {
         GameEvent add = MapstructUtils.convert(bo, GameEvent.class);
+        if (add == null) {
+            return null;
+        }
         validEntityBeforeSave(add);
         boolean flag = baseMapper.insert(add) > 0;
         if (flag) {
             // 生成微信小程序二维码并设置到赛事链接
             generateEventQrCode(add);
+            // 自动生成赛事大屏网址配置
+            saveLargeScreenUrlConfig(add.getEventId());
             return add.getEventId();
         }
         return null;
     }
 
+    /**
+     * 自动生成并保存赛事大屏网址配置项
+     * @param eventId 赛事ID
+     */
+    private void saveLargeScreenUrlConfig(Long eventId) {
+        try {
+            GameEventConfigBo configBo = new GameEventConfigBo();
+            configBo.setEventId(eventId);
+            configBo.setConfigType("API");
+            configBo.setConfigKey("large_screen_url");
+            configBo.setConfigDesc("赛事大屏网页地址");
+
+            // 规范化前缀,确保以 / 结尾
+            String prefix = largeScreenUrlPrefix;
+            if (prefix != null && !prefix.endsWith("/")) {
+                prefix += "/";
+            }
+            configBo.setConfigValue(prefix + "?tournament_id=" + eventId);
+            configBo.setIsEnabled("0");
+            configBo.setStatus("0");
+
+            gameEventConfigService.insertByBo(configBo);
+            log.info("成功为赛事[{}]生成默认大屏网页地址配置", eventId);
+        } catch (Exception e) {
+            log.error("生成默认大屏网页地址配置失败: {}", e.getMessage(), e);
+        }
+    }
+
     // 微信相关常量
     private static final String ACCESS_TOKEN_KEY = "wechat:access_token";
     @Value("${wechat.miniapp.access-token-expires:}")

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

@@ -249,6 +249,11 @@ public class ToClientServiceImpl implements IToClientService {
         if (projectIds.isEmpty()){
             return new ArrayList<>();
         }
+        List<SysDictDataVo> dictDataVos = dictService.selectDictDataByType("game_project_type");
+        HashMap<String, String> typeMaps = new HashMap<>();
+        if (!dictDataVos.isEmpty()){
+            dictDataVos.forEach(d -> typeMaps.put(d.getDictValue(), d.getDictLabel()));
+        }
         List<GameEventProject> res = projectMapper.selectList(Wrappers.lambdaQuery(GameEventProject.class)
             .eq(GameEventProject::getEventId, eventId)
                 .in(GameEventProject::getProjectId, projectIds)
@@ -261,7 +266,7 @@ public class ToClientServiceImpl implements IToClientService {
             appProject.setId(p.getEventId());
             appProject.setState(p.getStatus());
             appProject.setSex(p.getGender());
-            appProject.setType(p.getProjectType());
+            appProject.setType(typeMaps.get(p.getProjectType()));
             appProject.setPmnum(p.getRoundType());
             appProject.setPaiMing(p.getOrderType());
             appProject.setChengJiNum(p.getScoreCount());