Преглед на файлове

feat(tournaments): 添加比赛结束时间并优化排序功能

- 在 Tournaments 模型中添加 endTime 字段,用于记录比赛结束时间- 在 TournamentsBo 中添加 endTime 字段和排序相关参数
- 更新 TournamentsController 中的编辑接口,使用 EditGroup 验证组
- 修改 TournamentsMapper.xml,增加 endTime 相关的 SQL语句
- 优化 TournamentsServiceImpl 中的查询和排序逻辑- 更新 TournamentsVo 中添加 endTime
fugui001 преди 5 месеца
родител
ревизия
1d7a9df305

+ 1 - 4
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/business/controller/TournamentsController.java

@@ -2,16 +2,13 @@ package org.dromara.business.controller;
 
 import java.util.List;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
 import lombok.RequiredArgsConstructor;
 import jakarta.servlet.http.HttpServletResponse;
 import jakarta.validation.constraints.*;
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import org.dromara.business.domain.bo.TournamentBlindStructuresBo;
-import org.dromara.business.domain.dto.ItemsPrizeDto;
 import org.dromara.business.domain.dto.TournamentsDto;
 import org.dromara.business.domain.vo.TournamentBlindStructuresListVo;
-import org.dromara.common.satoken.utils.LoginHelper;
 import org.dromara.system.domain.vo.SysOssVo;
 import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.*;
@@ -97,7 +94,7 @@ public class TournamentsController extends BaseController {
     @Log(title = "【赛事管理-修改】", businessType = BusinessType.UPDATE)
     @RepeatSubmit()
     @PutMapping()
-    public R<Void> edit(@Validated(AddGroup.class) @RequestBody  TournamentsDto bo) {
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody  TournamentsDto bo) {
         return toAjax(tournamentsService.updateByBo(bo));
     }
 

+ 8 - 1
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/business/domain/Tournaments.java

@@ -39,6 +39,13 @@ public class Tournaments extends BaseEntity {
      */
     private Date startTime;
 
+
+    /**
+     * 比赛结束时间
+     */
+    private Date endTime;
+
+
     /**
      * 游戏类型
      */
@@ -65,7 +72,7 @@ public class Tournaments extends BaseEntity {
     private Long maxPlayers;
 
     /**
-     * 赛事状态
+     *  赛事状态 0 未开始 1 进行中 2 同步发牌 3 普通暂停 4 完成
      */
     private Long status;
 

+ 10 - 1
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/business/domain/bo/TournamentsBo.java

@@ -39,7 +39,12 @@ public class TournamentsBo extends BaseEntity {
      * 比赛开始时间
      */
     @NotNull(message = "比赛开始时间不能为空", groups = { AddGroup.class, EditGroup.class })
-    private Date startTime;
+    private String startTime;
+
+    /**
+     * 比赛结束时间
+     */
+    private Date endTime;
 
     /**
      * 游戏类型
@@ -126,4 +131,8 @@ public class TournamentsBo extends BaseEntity {
     private List<ItemsPrizeBo> itemsPrizeList;
 
 
+    String sortBy;
+
+    Boolean isAsc;   // true = asc, false = desc
+
 }

+ 5 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/business/domain/vo/TournamentsVo.java

@@ -52,6 +52,11 @@ public class TournamentsVo implements Serializable {
     @ExcelProperty(value = "比赛开始时间")
     private Date startTime;
 
+    /**
+     * 比赛结束时间
+     */
+    private Date endTime;
+
     /**
      * 游戏类型
      */

+ 32 - 3
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/business/service/impl/TournamentsServiceImpl.java

@@ -2,6 +2,7 @@ package org.dromara.business.service.impl;
 
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 
+import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.dromara.business.domain.*;
 import org.dromara.business.domain.bo.ItemsPrizeBo;
@@ -190,13 +191,41 @@ public class TournamentsServiceImpl implements ITournamentsService {
         return baseMapper.selectTournamentsVoList(lqw);
     }
 
+
+
+    private static final Map<String, SFunction<Tournaments, ?>> ORDER_FIELD_MAP = new HashMap<>();
+
+    static {
+        ORDER_FIELD_MAP.put("startTime", Tournaments::getStartTime);
+        // 可以继续添加其他支持排序的字段
+    }
+
+
     private LambdaQueryWrapper<Tournaments> buildQueryWrapper(TournamentsBo bo) {
         Map<String, Object> params = bo.getParams();
         LambdaQueryWrapper<Tournaments> lqw = Wrappers.lambdaQuery();
-        lqw.orderByAsc(Tournaments::getId);
+
+        // 获取排序字段和方式
+        String sortBy = bo.getSortBy();
+        Boolean isAsc = bo.getIsAsc();
+
+        // 如果有排序字段,并且该字段支持排序
+        if (sortBy != null && ORDER_FIELD_MAP.containsKey(sortBy)) {
+            SFunction<Tournaments, ?> columnFunc = ORDER_FIELD_MAP.get(sortBy);
+            if (Boolean.TRUE.equals(isAsc)) {
+                lqw.orderBy(true, true, columnFunc); // 升序
+            } else {
+                lqw.orderBy(true, false, columnFunc); // 降序
+            }
+        } else {
+            // 默认排序(比如按开始时间降序)
+            lqw.orderByDesc(Tournaments::getStartTime);
+        }
+
+
         lqw.like(StringUtils.isNotBlank(bo.getName()), Tournaments::getName, bo.getName());
-        lqw.eq(bo.getId() != null, Tournaments::getId, bo.getId());
-        lqw.eq(bo.getStartTime() != null, Tournaments::getStartTime, bo.getStartTime());
+        lqw.like(bo.getId() != null, Tournaments::getId, bo.getId());
+        lqw.like(bo.getStartTime() != null, Tournaments::getStartTime, bo.getStartTime());
         lqw.eq(bo.getGameType() != null, Tournaments::getGameType, bo.getGameType());
         lqw.eq(bo.getStartingChips() != null, Tournaments::getStartingChips, bo.getStartingChips());
         lqw.eq(bo.getLevelDuration() != null, Tournaments::getLevelDuration, bo.getLevelDuration());

+ 5 - 3
ruoyi-modules/ruoyi-system/src/main/resources/mapper/business/TournamentsMapper.xml

@@ -10,20 +10,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
 
     <select id="selectTournamentsVoList" resultType="org.dromara.business.domain.vo.TournamentsVo">
-        SELECT id, name, start_time, game_type, starting_chips, level_duration, late_registration_level, max_players, status, created_at, updated_at,sign_time,competition_icon FROM tournaments  ${ew.customSqlSegment}
+        SELECT id, name, start_time, end_time,game_type, starting_chips, level_duration, late_registration_level, max_players, status, created_at, updated_at,sign_time,competition_icon FROM tournaments  ${ew.customSqlSegment}
     </select>
 
     <select id="selectVoByIdInfo" resultType="org.dromara.business.domain.vo.TournamentsVo">
-       SELECT id, name, start_time, game_type, starting_chips, level_duration, late_registration_level, max_players, status, created_at, updated_at,sign_time,competition_icon FROM tournaments WHERE id =  #{id}
+       SELECT id, name, start_time, end_time,game_type, starting_chips, level_duration, late_registration_level, max_players, status, created_at, updated_at,sign_time,competition_icon FROM tournaments WHERE id =  #{id}
     </select>
 
 
-
     <update id="updateTournamentsById">
         UPDATE tournaments
         <set>
             <if test="name != null">name = #{name},</if>
             <if test="startTime != null">start_time = #{startTime},</if>
+            <if test="endTime != null">end_time = #{endTime},</if>
             <if test="gameType != null">game_type = #{gameType},</if>
             <if test="startingChips != null">starting_chips = #{startingChips},</if>
             <if test="levelDuration != null">level_duration = #{levelDuration},</if>
@@ -54,6 +54,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="signTime != null">sign_time,</if>
             <if test="competitionIcon != null">competition_icon,</if>
             <if test="createUserId != null">create_user_id,</if>
+            <if test="endTime != null">end_time,</if>
         </trim>
         VALUES
         <trim prefix="(" suffix=")" suffixOverrides=",">
@@ -68,6 +69,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="signTime != null">#{signTime},</if>
             <if test="competitionIcon != null">#{competitionIcon},</if>
             <if test="createUserId != null">#{createUserId},</if>
+            <if test="endTime != null">#{endTime},</if>
         </trim>
     </insert>