Эх сурвалжийг харах

feat(business): 优化赛事管理功能

- 移除赛事图标上传相关代码
- 新增赛事报名条件、盲注信息和奖品分布的查询和处理逻辑- 重构 TournamentsDto 和 TournamentsVo 类,优化数据结构- 更新相关 mapper 和 XML 文件,调整数据库查询逻辑
fugui001 5 сар өмнө
parent
commit
084ec663b1
16 өөрчлөгдсөн 107 нэмэгдсэн , 54 устгасан
  1. 4 4
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/business/controller/TournamentsController.java
  2. 5 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/business/domain/Tournaments.java
  3. 1 1
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/business/domain/dto/ItemsPrizeDto.java
  4. 5 1
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/business/domain/dto/TournamentsDto.java
  5. 2 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/business/domain/vo/PrizeDistributionItemsVo.java
  6. 2 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/business/domain/vo/TournamentBlindStructuresVo.java
  7. 3 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/business/domain/vo/TournamentEntryConditionsVo.java
  8. 4 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/business/domain/vo/TournamentsVo.java
  9. 1 1
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/business/mapper/PrizeDistributionsMapper.java
  10. 2 2
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/business/service/ITournamentsService.java
  11. 58 30
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/business/service/impl/TournamentsServiceImpl.java
  12. 6 6
      ruoyi-modules/ruoyi-system/src/main/resources/mapper/business/PrizeDistributionItemsMapper.xml
  13. 1 1
      ruoyi-modules/ruoyi-system/src/main/resources/mapper/business/PrizeDistributionsMapper.xml
  14. 3 3
      ruoyi-modules/ruoyi-system/src/main/resources/mapper/business/TournamentBlindStructuresMapper.xml
  15. 3 3
      ruoyi-modules/ruoyi-system/src/main/resources/mapper/business/TournamentEntryConditionsMapper.xml
  16. 7 2
      ruoyi-modules/ruoyi-system/src/main/resources/mapper/business/TournamentsMapper.xml

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

@@ -86,8 +86,8 @@ public class TournamentsController extends BaseController {
     @Log(title = "【赛事管理-新增】", businessType = BusinessType.INSERT)
     @RepeatSubmit()
     @PostMapping()
-    public R<Void> add(  @Validated(AddGroup.class) @ModelAttribute TournamentsDto dto,  @RequestParam("competitionIcon") MultipartFile competitionIcon) {
-        return toAjax(tournamentsService.insertByBo(dto,competitionIcon));
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody  TournamentsDto dto) {
+        return toAjax(tournamentsService.insertByBo(dto));
     }
 
     /**
@@ -97,8 +97,8 @@ public class TournamentsController extends BaseController {
     @Log(title = "【赛事管理-修改】", businessType = BusinessType.UPDATE)
     @RepeatSubmit()
     @PutMapping()
-    public R<Void> edit(@Validated(EditGroup.class) @ModelAttribute TournamentsDto bo,  @RequestParam("competitionIcon") MultipartFile competitionIcon) {
-        return toAjax(tournamentsService.updateByBo(bo,competitionIcon));
+    public R<Void> edit(@Validated(AddGroup.class) @RequestBody  TournamentsDto bo) {
+        return toAjax(tournamentsService.updateByBo(bo));
     }
 
     /**

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

@@ -88,4 +88,9 @@ public class Tournaments extends BaseEntity {
      * 比赛图标
      */
     private String competitionIcon;
+
+    private Long updateUserId;
+
+    private Long createUserId;
+
 }

+ 1 - 1
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/business/domain/dto/ItemsPrizeDto.java

@@ -23,5 +23,5 @@ public class ItemsPrizeDto {
      */
     private Long quantity;
 
-
+    private String itemsName;
 }

+ 5 - 1
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/business/domain/dto/TournamentsDto.java

@@ -4,6 +4,8 @@ import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
 import lombok.Data;
 
+import java.util.List;
+
 @Data
 public class TournamentsDto {
 
@@ -37,7 +39,9 @@ public class TournamentsDto {
     @NotNull(message = "盲注表不能为空")
     private Long blindStructureId;
 
-    private String itemsPrizeList;
+    private List<ItemsPrizeDto> itemsPrizeList;
+
+    private String competitionIcon;
 
 
 }

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

@@ -50,5 +50,7 @@ public class PrizeDistributionItemsVo implements Serializable {
     @ExcelProperty(value = "数量")
     private Long quantity;
 
+    private String itemsName;
+
 
 }

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

@@ -38,4 +38,6 @@ public class TournamentBlindStructuresVo implements Serializable {
     private Long blindStructureId;
 
 
+    private String blindStructuresName;
+
 }

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

@@ -61,4 +61,7 @@ public class TournamentEntryConditionsVo implements Serializable {
     private Date updatedAt;
 
 
+    private String itemsName;
+
+
 }

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

@@ -115,4 +115,8 @@ public class TournamentsVo implements Serializable {
     private Long blindStructureId;
 
     private List<ItemsPrizeDto> itemsPrizeList;
+
+    private String itemsName;
+
+    private String blindStructuresName;
 }

+ 1 - 1
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/business/mapper/PrizeDistributionsMapper.java

@@ -24,7 +24,7 @@ public interface PrizeDistributionsMapper extends BaseMapperPlus<PrizeDistributi
     int updateById(PrizeDistributions prizeDistribution);
 
     @InterceptorIgnore(tenantLine = "true")
-    int deleteById(Integer id);
+    int deleteByIds(Long id);
 
     @InterceptorIgnore(tenantLine = "true")
     PrizeDistributionsVo selectById(Integer id);

+ 2 - 2
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/business/service/ITournamentsService.java

@@ -52,7 +52,7 @@ public interface ITournamentsService {
      * @param bo 【请填写功能名称】
      * @return 是否新增成功
      */
-    Boolean insertByBo(TournamentsDto bo,MultipartFile competitionIcon);
+    Boolean insertByBo(TournamentsDto bo);
 
     /**
      * 修改【请填写功能名称】
@@ -60,7 +60,7 @@ public interface ITournamentsService {
      * @param bo 【请填写功能名称】
      * @return 是否修改成功
      */
-    Boolean updateByBo(TournamentsDto bo, MultipartFile competitionIcon);
+    Boolean updateByBo(TournamentsDto bo);
 
     /**
      * 校验并批量删除【请填写功能名称】信息

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

@@ -20,6 +20,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.dromara.common.satoken.utils.LoginHelper;
 import org.dromara.system.domain.vo.SysOssVo;
 import org.dromara.system.service.ISysOssService;
 import org.springframework.beans.BeanUtils;
@@ -127,6 +128,53 @@ public class TournamentsServiceImpl implements ITournamentsService {
     public TableDataInfo<TournamentsVo> queryPageList(TournamentsBo bo, PageQuery pageQuery) {
         LambdaQueryWrapper<Tournaments> lqw = buildQueryWrapper(bo);
         Page<TournamentsVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        List<TournamentsVo> records = result.getRecords();
+        for (TournamentsVo record : records) {
+            Long tournamentId = record.getId();
+            //赛事报名条件
+            TournamentEntryConditionsVo tournamentEntryConditionsVo = tournamentEntryConditionsMapper.selectByTournamentInfo(tournamentId);
+            if(tournamentEntryConditionsVo!=null){
+                record.setItemsId(tournamentEntryConditionsVo.getItemId());
+                record.setItemsNum(tournamentEntryConditionsVo.getRequiredQuantity());
+                record.setItemsName(tournamentEntryConditionsVo.getItemsName());
+            }
+
+            //绑定的盲注信息
+            TournamentBlindStructuresVo tournamentBlindStructuresVo = tournamentBlindStructuresMapper.selectTournamentBlindStructureByTournamentId(tournamentId);
+            if(tournamentBlindStructuresVo!=null){
+                record.setBlindStructureId(tournamentBlindStructuresVo.getBlindStructureId());
+                record.setBlindStructuresName(tournamentBlindStructuresVo.getBlindStructuresName());
+            }
+
+            //排名
+            List<PrizeDistributionsVo> prizeDistributionsVos = prizeDistributionsMapper.selectByTournamentId(tournamentId);
+            if(prizeDistributionsVos!=null){
+                List<ItemsPrizeDto> itemsPrizeList=new ArrayList<>();
+
+                // 提取并按排名正序排序后,取出 id 列表
+                List<Long> ids = prizeDistributionsVos.stream()
+                    .sorted(Comparator.comparing(PrizeDistributionsVo::getPaiming))
+                    .map(PrizeDistributionsVo::getId)
+                    .collect(Collectors.toList());
+                int i=0;
+                for (Long id2 : ids) {
+                    i++;
+                    //奖品
+                    PrizeDistributionItemsVo prizeDistributionItemsVos = prizeDistributionItemsMapper.selectByPrizeDistributionId(id2);
+                    ItemsPrizeDto itemsPrizeBo = new ItemsPrizeDto();
+                    itemsPrizeBo.setRanking(Long.valueOf(i));
+                    itemsPrizeBo.setItemId(prizeDistributionItemsVos.getItemId());
+                    itemsPrizeBo.setQuantity(prizeDistributionItemsVos.getQuantity());
+                    itemsPrizeBo.setItemsName(prizeDistributionItemsVos.getItemsName());
+                    itemsPrizeList.add(itemsPrizeBo);
+                }
+                record.setItemsPrizeList(itemsPrizeList);
+            }
+
+
+        }
+
+
         return TableDataInfo.build(result);
     }
 
@@ -147,6 +195,7 @@ public class TournamentsServiceImpl implements ITournamentsService {
         LambdaQueryWrapper<Tournaments> lqw = Wrappers.lambdaQuery();
         lqw.orderByAsc(Tournaments::getId);
         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.eq(bo.getGameType() != null, Tournaments::getGameType, bo.getGameType());
         lqw.eq(bo.getStartingChips() != null, Tournaments::getStartingChips, bo.getStartingChips());
@@ -166,11 +215,8 @@ public class TournamentsServiceImpl implements ITournamentsService {
      * @return 是否新增成功
      */
     @Override
-    public Boolean insertByBo(TournamentsDto bo, MultipartFile competitionIcon) {
+    public Boolean insertByBo(TournamentsDto bo) {
         try {
-            // 初始化 ObjectMapper
-            ObjectMapper mapper = new ObjectMapper();
-
             // 转换 BO -> Entity
             Tournaments add = new Tournaments();
             BeanUtils.copyProperties(bo, add);
@@ -178,24 +224,16 @@ public class TournamentsServiceImpl implements ITournamentsService {
             validEntityBeforeSave(add);
 
             // 解析 itemsPrizeList JSON 字符串
-            List<ItemsPrizeDto> prizeList = parsePrizeList(bo.getItemsPrizeList(), mapper);
+            List<ItemsPrizeDto> prizeList = bo.getItemsPrizeList();
 
             if (CollectionUtils.isEmpty(prizeList)) {
                 log.error("奖励列表为空");
                 return false;
             }
-
+            Long userId = LoginHelper.getUserId();
+            add.setCreateUserId(userId);
             // 处理开始时间
             add.setStartTime(parseDateTime(bo.getStartTime()));
-
-            // 上传赛事图标
-            if (competitionIcon != null && !competitionIcon.isEmpty()) {
-                SysOssVo sysOssVo = this.uploadTournament(competitionIcon);
-                if (sysOssVo != null) {
-                    add.setCompetitionIcon(sysOssVo.getUrl());
-                }
-            }
-
             // 插入赛事主表
             boolean flag = baseMapper.insertTournament(add) > 0;
             if (!flag) {
@@ -263,10 +301,8 @@ public class TournamentsServiceImpl implements ITournamentsService {
      * @return 是否修改成功
      */
     @Override
-    public Boolean updateByBo(TournamentsDto bo, MultipartFile competitionIcon) {
+    public Boolean updateByBo(TournamentsDto bo) {
         try {
-            // 初始化 ObjectMapper
-            ObjectMapper mapper = new ObjectMapper();
 
             // 转换 BO -> Entity
             Tournaments update = new Tournaments();
@@ -274,24 +310,17 @@ public class TournamentsServiceImpl implements ITournamentsService {
 
             validEntityBeforeSave(update);
             // 解析 itemsPrizeList JSON 字符串
-            List<ItemsPrizeDto> prizeList = parsePrizeList(bo.getItemsPrizeList(), mapper);
+            List<ItemsPrizeDto> prizeList = bo.getItemsPrizeList();
 
             if (CollectionUtils.isEmpty(prizeList)) {
                 log.error("奖励列表为空");
                 return false;
             }
-
+            Long userId = LoginHelper.getUserId();
+            update.setUpdateUserId(userId);
             // 处理开始时间
             update.setStartTime(parseDateTime(bo.getStartTime()));
 
-            // 上传赛事图标
-            if (competitionIcon != null && !competitionIcon.isEmpty()) {
-                SysOssVo sysOssVo = this.uploadTournament(competitionIcon);
-                if (sysOssVo != null) {
-                    update.setCompetitionIcon(sysOssVo.getUrl());
-                }
-            }
-
             // 插入赛事主表
             boolean flag = baseMapper.updateTournamentsById(update) > 0;
             if (!flag) {
@@ -314,7 +343,7 @@ public class TournamentsServiceImpl implements ITournamentsService {
             List<PrizeDistributionsVo> prizeDistributionsVos = prizeDistributionsMapper.selectByTournamentId(tournamentId);
             if(prizeDistributionsVos.size()>0){
                 for (PrizeDistributionsVo prizeDistributionsVo : prizeDistributionsVos) {
-                    prizeDistributionsMapper.deleteById(prizeDistributionsVo.getId());
+                    prizeDistributionsMapper.deleteByIds(prizeDistributionsVo.getId());
                 }
             }
             //重新处理奖励分布
@@ -322,7 +351,6 @@ public class TournamentsServiceImpl implements ITournamentsService {
              return true;
         }catch (Exception e){
             log.error("赛事修改过程中发生异常", e);
-            e.printStackTrace();
             return false;
         }
     }

+ 6 - 6
ruoyi-modules/ruoyi-system/src/main/resources/mapper/business/PrizeDistributionItemsMapper.xml

@@ -54,15 +54,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
     <!-- 根据 prize_distribution_id 查询奖励道具列表 -->
     <select id="selectByPrizeDistributionId" resultType="org.dromara.business.domain.vo.PrizeDistributionItemsVo">
-        SELECT *
-        FROM prize_distribution_items
-        WHERE prize_distribution_id = #{prizeDistributionId}
+        SELECT a.id,a.prize_distribution_id,a.item_id,a.quantity,b.name itemsName
+        FROM prize_distribution_items a  left join items b on a.item_id=b.id
+        WHERE a.prize_distribution_id = #{prizeDistributionId}
     </select>
 
     <select id="selectByPrizeDistributionIdList" resultType="org.dromara.business.domain.vo.PrizeDistributionItemsVo">
-        SELECT *
-        FROM prize_distribution_items
-        WHERE prize_distribution_id IN
+        SELECT a.id,a.prize_distribution_id,a.item_id,a.quantity,b.name itemsName
+        FROM prize_distribution_items a  left join items b on a.item_id=b.id
+        WHERE  a.prize_distribution_id IN
         <foreach collection="prizeDistributionId" item="id" open="(" separator="," close=")">
             #{id}
         </foreach>

+ 1 - 1
ruoyi-modules/ruoyi-system/src/main/resources/mapper/business/PrizeDistributionsMapper.xml

@@ -34,7 +34,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </update>
 
     <!-- 删除记录,只在id有效时删除 -->
-    <delete id="deleteById">
+    <delete id="deleteByIds">
         DELETE FROM prize_distributions
         WHERE id = #{id}
           AND #{id} IS NOT NULL

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

@@ -18,9 +18,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
 
     <select id="selectTournamentBlindStructureByTournamentId" resultType="org.dromara.business.domain.vo.TournamentBlindStructuresVo">
-        SELECT *
-        FROM tournament_blind_structures
-        WHERE tournament_id = #{tournamentId}
+        SELECT  a.tournament_id,a.blind_structure_id,b.name as blindStructuresName
+        FROM tournament_blind_structures a left join blind_structures b on a.blind_structure_id=b.id
+        WHERE a.tournament_id = #{tournamentId}
     </select>
 
 </mapper>

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

@@ -58,9 +58,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </select>
 
     <select id="selectByTournamentInfo" resultType="org.dromara.business.domain.vo.TournamentEntryConditionsVo">
-        SELECT *
-        FROM tournament_entry_conditions
-        WHERE tournament_id = #{tournamentId}
+       SELECT  a.tournament_id,a.item_id,a.required_quantity,b.name itemsName
+        FROM tournament_entry_conditions a left join items b on a.item_id=b.id
+        WHERE a.tournament_id = #{tournamentId}
     </select>
 
 </mapper>

+ 7 - 2
ruoyi-modules/ruoyi-system/src/main/resources/mapper/business/TournamentsMapper.xml

@@ -31,7 +31,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="maxPlayers != null">max_players = #{maxPlayers},</if>
             <if test="status != null">status = #{status},</if>
             <if test="createdAt != null">created_at = #{createdAt},</if>
-            <if test="updatedAt != null">updated_at = #{updatedAt}</if>
+            <if test="updatedAt != null">updated_at = #{updatedAt},</if>
+            <if test="signTime != null">sign_time = #{signTime},</if>
+            <if test="competitionIcon != null">competition_icon = #{competitionIcon},</if>
+            <if test="updateUserId != null">update_user_id = #{updateUserId}</if>
          </set>
         WHERE id = #{id}
     </update>
@@ -50,6 +53,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="status != null">status,</if>
             <if test="signTime != null">sign_time,</if>
             <if test="competitionIcon != null">competition_icon,</if>
+            <if test="createUserId != null">create_user_id,</if>
         </trim>
         VALUES
         <trim prefix="(" suffix=")" suffixOverrides=",">
@@ -62,7 +66,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="maxPlayers != null">#{maxPlayers},</if>
             <if test="status != null">#{status}</if>
             <if test="signTime != null">#{signTime},</if>
-            <if test="competitionIcon != null">#{competitionIcon}</if>
+            <if test="competitionIcon != null">#{competitionIcon},</if>
+            <if test="createUserId != null">#{createUserId},</if>
         </trim>
     </insert>