Forráskód Böngészése

feat(app): 添加体验版赛事功能模块

- 新增体验版赛事大厅信息VO类ExperienceGameEventVo
- 新增体验版授权登录参数BO类ExperienceLoginBo
- 创建体验版控制器ExperienceVersionController提供登录和赛事查询接口
- 添加体验版登录接口支持微信小程序授权登录
- 实现赛事大厅搜索接口支持按名称和地点模糊匹配
- 添加赛事列表查询接口返回所有赛事信息
- 更新GameEventMapper添加小程序体验端赛事查询方法
- 配置GameEventConfigMapper添加Mapper注解支持依赖注入
zhou 3 napja
szülő
commit
a9129dd1a2

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

@@ -0,0 +1,89 @@
+package org.dromara.system.controller.app;
+
+import cn.dev33.satoken.annotation.SaIgnore;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.RequiredArgsConstructor;
+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.app.ExperienceGameEventVo;
+import org.dromara.system.domain.vo.app.UserEventInfoVo;
+import org.dromara.system.domain.vo.app.UserLoginVo;
+import org.dromara.system.mapper.GameEventConfigMapper;
+import org.dromara.system.mapper.GameEventMapper;
+import org.dromara.system.service.ISysOssService;
+import org.dromara.system.service.app.IUserEventService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.*;
+
+/**
+ * 双奥云赛体验版相关接口
+ *
+ * @author system
+ */
+@SaIgnore
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/app/experience")
+public class ExperienceVersionController {
+
+    private final GameEventMapper gameEventMapper;
+    private final GameEventConfigMapper gameEventConfigMapper;
+    private final ISysOssService sysOssService;
+    private final IUserEventService userEventService;
+
+    /**
+     * 1、登录接口(微信小程序授权登录)
+     */
+    @GetMapping("/login")
+    public R<UserEventInfoVo> login(@RequestParam("code") String code) {
+        if (StringUtils.isBlank(code)) {
+            return R.fail("微信授权登录凭证(code)不能为空");
+        }
+        try {
+            UserLoginVo loginVo = new UserLoginVo();
+            loginVo.setCode(code);
+            UserEventInfoVo result = TenantHelper.ignore(() -> userEventService.login(loginVo));
+            return R.ok(result);
+        } catch (Exception e) {
+            return R.fail("微信登录失败:" + e.getMessage());
+        }
+    }
+
+    /**
+     * 2、赛事大厅查询接口(根据传入的字符串模糊匹配赛事名称和举办地点)
+     */
+    @GetMapping("/search")
+    public R<List<ExperienceGameEventVo>> search(@RequestParam(value = "keyword", required = false) String keyword) {
+        if (StringUtils.isBlank(keyword)){
+            return R.fail("关键词不能为空");
+        }
+        LambdaQueryWrapper<GameEvent> queryWrapper = Wrappers.lambdaQuery(GameEvent.class)
+            .and(wrapper -> wrapper.like(GameEvent::getEventName, keyword.trim())
+                    .or()
+                    .like(GameEvent::getLocation, keyword.trim()));
+        return R.ok(TenantHelper.ignore(() -> gameEventMapper.selectInfoWithConfig(queryWrapper)));
+    }
+
+    /**
+     * 3、赛事列表查询接口(查询所有赛事列表)
+     */
+    @GetMapping("/list")
+    public R<List<ExperienceGameEventVo>> list() {
+        return R.ok(TenantHelper.ignore(() -> gameEventMapper.selectInfoWithConfig(null)));
+    }
+
+    /**
+     * 4、赛事详情页---赛事成绩排行榜查询接口
+     */
+
+    /**
+     * 5、赛事菜单查询接口
+     */
+
+}

+ 24 - 0
ruoyi-modules/ruoyi-game-event/src/main/java/org/dromara/system/domain/bo/ExperienceLoginBo.java

@@ -0,0 +1,24 @@
+package org.dromara.system.domain.bo;
+
+import jakarta.validation.constraints.NotBlank;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 体验版授权登录参数Bo
+ *
+ * @author system
+ */
+@Data
+public class ExperienceLoginBo implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 微信小程序登录凭证
+     */
+    @NotBlank(message = "微信登录凭证不能为空")
+    private String code;
+}

+ 52 - 0
ruoyi-modules/ruoyi-game-event/src/main/java/org/dromara/system/domain/vo/app/ExperienceGameEventVo.java

@@ -0,0 +1,52 @@
+package org.dromara.system.domain.vo.app;
+
+import lombok.Data;
+import org.dromara.common.translation.annotation.Translation;
+import org.dromara.common.translation.constant.TransConstant;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 体验版赛事大厅信息VO
+ *
+ * @author system
+ */
+@Data
+public class ExperienceGameEventVo implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 赛事ID
+     */
+    private Long eventId;
+
+    /**
+     * 赛事名称
+     */
+    private String eventName;
+
+    /**
+     * 开始时间
+     */
+    private Date startTime;
+
+    /**
+     * 结束时间
+     */
+    private Date endTime;
+
+    /**
+     * 举办地点
+     */
+    private String location;
+
+    /**
+     * 赛事大厅展示图片值
+     */
+    private String hallImage;
+    @Translation(type = TransConstant.OSS_ID_TO_URL, mapper = "hallImage")
+    private String hallImageUrl;
+}

+ 2 - 2
ruoyi-modules/ruoyi-game-event/src/main/java/org/dromara/system/mapper/GameEventConfigMapper.java

@@ -2,13 +2,12 @@ package org.dromara.system.mapper;
 
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.ibatis.annotations.Mapper;
 import org.dromara.common.mybatis.annotation.DataColumn;
 import org.dromara.common.mybatis.annotation.DataPermission;
 import org.dromara.system.domain.GameEventConfig;
-import org.dromara.system.domain.GameReferee;
 import org.dromara.system.domain.vo.GameEventConfigVo;
 import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
-import org.dromara.system.domain.vo.GameRefereeVo;
 
 import java.util.List;
 
@@ -18,6 +17,7 @@ import java.util.List;
  * @author zlt
  * @date 2025-07-30
  */
+@Mapper
 public interface GameEventConfigMapper extends BaseMapperPlus<GameEventConfig, GameEventConfigVo> {
     /**
      * 分页查询队伍列表,并进行数据权限控制

+ 53 - 34
ruoyi-modules/ruoyi-game-event/src/main/java/org/dromara/system/mapper/GameEventMapper.java

@@ -3,6 +3,7 @@ package org.dromara.system.mapper;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 import org.dromara.common.mybatis.annotation.DataColumn;
 import org.dromara.common.mybatis.annotation.DataPermission;
@@ -10,6 +11,7 @@ import org.dromara.system.domain.GameAppEvent;
 import org.dromara.system.domain.GameEvent;
 import org.dromara.system.domain.vo.GameEventVo;
 import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+import org.dromara.system.domain.vo.app.ExperienceGameEventVo;
 
 import java.util.List;
 
@@ -22,42 +24,59 @@ import java.util.List;
 @Mapper
 public interface GameEventMapper extends BaseMapperPlus<GameEvent, GameEventVo> {
 
-   /**
-    * 分页查询赛事列表,并进行数据权限控制
-    *
-    * @param page         分页参数
-    * @param queryWrapper 查询条件
-    * @return 分页的赛事信息
-    */
-   @DataPermission({
-       @DataColumn(key = "deptName", value = "create_dept"),
-       @DataColumn(key = "userName", value = "create_by")
-   })
-   default Page<GameEventVo> selectPageEventList(Page<GameEvent> page, Wrapper<GameEvent> queryWrapper) {
-       return this.selectVoPage(page, queryWrapper);
-   }
+    /**
+     * 分页查询赛事列表,并进行数据权限控制
+     *
+     * @param page         分页参数
+     * @param queryWrapper 查询条件
+     * @return 分页的赛事信息
+     */
+    @DataPermission({
+            @DataColumn(key = "deptName", value = "create_dept"),
+            @DataColumn(key = "userName", value = "create_by")
+    })
+    default Page<GameEventVo> selectPageEventList(Page<GameEvent> page, Wrapper<GameEvent> queryWrapper) {
+        return this.selectVoPage(page, queryWrapper);
+    }
 
-   /**
-    * 查询赛事列表,并进行数据权限控制
-    *
-    * @param queryWrapper 查询条件
-    * @return 赛事信息集合
-    */
-   @DataPermission({
-       @DataColumn(key = "deptName", value = "create_dept"),
-       @DataColumn(key = "userName", value = "create_by")
-   })
-   default List<GameEventVo> selectEventList(Wrapper<GameEvent> queryWrapper) {
-       return this.selectVoList(queryWrapper);
-   }
+    /**
+     * 查询赛事列表,并进行数据权限控制
+     *
+     * @param queryWrapper 查询条件
+     * @return 赛事信息集合
+     */
+    @DataPermission({
+            @DataColumn(key = "deptName", value = "create_dept"),
+            @DataColumn(key = "userName", value = "create_by")
+    })
+    default List<GameEventVo> selectEventList(Wrapper<GameEvent> queryWrapper) {
+        return this.selectVoList(queryWrapper);
+    }
 
-   /**
-    * 手持端获取该裁判负责的赛事列表
+    /**
+     * 手持端获取该裁判负责的赛事列表
      */
-   @Select("SELECT e.event_id as id,e.event_code as bianhao,e.event_name as name,e.create_time,ec.config_value as ServerUrl " +
-       "FROM game_event e " +
-       "left join game_event_config ec on ec.event_id = e.event_id " +
-       "WHERE e.event_id in (select event_id from game_referee where referee_id = #{refereeId}) and e.del_flag = '0' " +
-       "and ec.config_key = 'upload_path' ")
+    @Select("SELECT e.event_id as id,e.event_code as bianhao,e.event_name as name,e.create_time,ec.config_value as ServerUrl "
+            +
+            "FROM game_event e " +
+            "left join game_event_config ec on ec.event_id = e.event_id " +
+            "WHERE e.event_id in (select event_id from game_referee where referee_id = #{refereeId}) and e.del_flag = '0' "
+            +
+            "and ec.config_key = 'upload_path' ")
     List<GameAppEvent> selectRefereeEventList(Long refereeId);
+
+    /**
+     * 小程序体验端获取赛事列表,并关联查询配置项
+     */
+    @Select("<script>" +
+            "SELECT e.event_id, e.location, e.event_name, e.start_time, e.end_time, ec.config_value as hallImage " +
+            "from game_event e " +
+            "left join game_event_config ec on e.event_id = ec.event_id and ec.config_key = 'hall_image' " +
+            "where e.del_flag = '0' and e.status = '0' " +
+            "<if test=\"ew != null and ew.sqlSegment != null and ew.sqlSegment != ''\">" +
+            "  and ${ew.sqlSegment} " +
+            "</if>" +
+            "order by e.start_time desc " +
+            "</script>")
+    List<ExperienceGameEventVo> selectInfoWithConfig(@Param("ew") Wrapper<GameEvent> queryWrapper);
 }