Parcourir la source

feat(business): 添加赛事分配功能

- 新增赛事分配相关的数据结构和接口
- 实现赛事分配情况查询和保存功能
- 添加相应的数据库操作和 Mapper XML
fugui001 il y a 6 mois
Parent
commit
083f1f071f

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

@@ -6,6 +6,8 @@ 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.vo.TournamentBlindStructuresListVo;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.validation.annotation.Validated;
 import org.dromara.common.idempotent.annotation.RepeatSubmit;
@@ -102,4 +104,28 @@ public class TournamentsController extends BaseController {
                           @PathVariable Long[] ids) {
         return toAjax(tournamentsService.deleteWithValidByIds(List.of(ids), true));
     }
+
+    /**
+     * 查询赛事分配情况列表
+     * @param bo
+     * @param pageQuery
+     * @return
+     */
+    @SaCheckPermission("business:tournaments:selectTournamentBlindStructuresList")
+    @GetMapping("/selectTournamentBlindStructuresList")
+    public TableDataInfo<TournamentBlindStructuresListVo> selectTournamentBlindStructuresList(TournamentBlindStructuresBo bo, PageQuery pageQuery) {
+        return tournamentsService.selectTournamentBlindStructuresList(bo, pageQuery);
+    }
+
+    /**
+     * 分配盲注
+     * @param dto
+     * @return
+     */
+    @PostMapping("/assignTournamentBlindStructures")
+    public R<Void> assignTournamentBlindStructures(@RequestBody TournamentBlindStructuresBo dto) {
+        tournamentsService.saveOrUpdateTournamentBlindStructure(dto.getTournamentId(), dto.getBlindStructureIds());
+        return R.ok("分配成功");
+    }
+
 }

+ 35 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/business/domain/TournamentBlindStructure.java

@@ -0,0 +1,35 @@
+package org.dromara.business.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import java.io.Serial;
+
+/**
+ * 【绑定情况】对象 tournament_blind_structures
+ *
+ * @author Lion Li
+ * @date 2025-06-11
+ */
+@Data
+@TableName("tournament_blind_structures")
+public class TournamentBlindStructure{
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 赛事ID
+     */
+    @TableId(value = "id")
+    private Long tournamentId;
+
+    /**
+     * 盲注ID
+     */
+    private Long blindStructureId;
+
+
+
+
+}

+ 37 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/business/domain/bo/TournamentBlindStructuresBo.java

@@ -0,0 +1,37 @@
+package org.dromara.business.domain.bo;
+
+import io.github.linpeilie.annotations.AutoMapper;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.dromara.business.domain.Tournaments;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+
+import java.util.List;
+
+
+/**
+ * 【请填写功能名称】业务对象 tournaments
+ *
+ * @author Lion Li
+ * @date 2025-06-11
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = Tournaments.class, reverseConvertGenerate = false)
+public class TournamentBlindStructuresBo extends BaseEntity {
+
+    /**
+     *赛事ID
+     */
+    @NotNull(message = "赛事ID不能为空", groups = { EditGroup.class })
+    private Long tournamentId;
+
+
+    /**
+     * 盲注结构ID[]
+     */
+    private List<Long> blindStructureIds;
+
+}

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

@@ -0,0 +1,64 @@
+package org.dromara.business.domain.vo;
+
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import org.dromara.business.domain.Tournaments;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+/**
+ * 【绑定的赛事相关】
+ *
+ * @author Lion Li
+ * @date 2025-06-11
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = Tournaments.class)
+public class TournamentBlindStructuresListVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 绑定的盲注结构ID
+     */
+    @ExcelProperty(value = "绑定的盲注结构ID")
+    private Long blindStructuresId;
+
+    /**
+     * 绑定的盲注结构名
+     */
+    @ExcelProperty(value = "绑定的盲注结构名")
+    private String blindStructuresName;
+
+    /**
+     * 绑定的赛事描述
+     */
+    @ExcelProperty(value = "绑定的盲注结构描述")
+    private String blindDescription;
+
+    /**
+     * 赛事名称
+     */
+    @ExcelProperty(value = "赛事名称")
+    private String tournamentsName;
+
+    /**
+     * 是否绑定 1 绑定 0未绑定
+     */
+    @ExcelProperty(value = "是否绑定 1 绑定 0未绑定")
+    private Long allocationStatus;
+
+
+
+
+
+}

+ 13 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/business/mapper/TournamentsMapper.java

@@ -5,6 +5,9 @@ import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.Param;
+import org.dromara.business.domain.BlindStructures;
+import org.dromara.business.domain.bo.TournamentBlindStructuresBo;
+import org.dromara.business.domain.vo.TournamentBlindStructuresListVo;
 import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
 import org.dromara.business.domain.Tournaments;
 import org.dromara.business.domain.vo.TournamentsVo;
@@ -40,5 +43,15 @@ public interface TournamentsMapper extends BaseMapperPlus<Tournaments, Tournamen
     @InterceptorIgnore(tenantLine = "true")
     List<TournamentsVo> selectTournamentsVoList(@Param("ew") Wrapper<Tournaments> wrapper);
 
+    @InterceptorIgnore(tenantLine = "true")
+    Page<TournamentBlindStructuresListVo> selectTournamentBlindStructuresList(@Param("page") Page<BlindStructures> page, @Param("query") TournamentBlindStructuresBo query);
+
+    @InterceptorIgnore(tenantLine = "true")
+    void deleteByBlindTournamentId(@Param("tournamentId") Long tournamentId);
+
+    @InterceptorIgnore(tenantLine = "true")
+    void batchInsertTournamentBlindStructures(@Param("tournamentId") Long tournamentId,
+                                              @Param("blindStructureIds") List<Long> blindStructureIds);
+
 }
 

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

@@ -1,5 +1,7 @@
 package org.dromara.business.service;
 
+import org.dromara.business.domain.bo.TournamentBlindStructuresBo;
+import org.dromara.business.domain.vo.TournamentBlindStructuresListVo;
 import org.dromara.business.domain.vo.TournamentsVo;
 import org.dromara.business.domain.bo.TournamentsBo;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
@@ -65,4 +67,21 @@ public interface ITournamentsService {
      * @return 是否删除成功
      */
     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+
+
+    /**
+     * 查询赛事分配情况
+     * @param bo
+     * @param pageQuery
+     * @return
+     */
+    TableDataInfo<TournamentBlindStructuresListVo> selectTournamentBlindStructuresList(TournamentBlindStructuresBo bo, PageQuery pageQuery);
+
+    /**
+     * 保存和修改赛事分配
+     * @param tournamentId
+     * @param blindStructureIds
+     */
+    void saveOrUpdateTournamentBlindStructure(Long tournamentId, List<Long> blindStructureIds);
+
 }

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

@@ -1,5 +1,9 @@
 package org.dromara.business.service.impl;
 
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import org.dromara.business.domain.TournamentBlindStructure;
+import org.dromara.business.domain.bo.TournamentBlindStructuresBo;
+import org.dromara.business.domain.vo.TournamentBlindStructuresListVo;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
@@ -16,6 +20,7 @@ import org.dromara.business.domain.Tournaments;
 import org.dromara.business.mapper.TournamentsMapper;
 import org.dromara.business.service.ITournamentsService;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.Collection;
@@ -139,4 +144,22 @@ public class TournamentsServiceImpl implements ITournamentsService {
         }
         return baseMapper.deleteTournamentByIds(ids) > 0;
     }
+
+    @Override
+    public TableDataInfo<TournamentBlindStructuresListVo> selectTournamentBlindStructuresList(TournamentBlindStructuresBo bo, PageQuery pageQuery) {
+        Page<TournamentBlindStructuresListVo> result = baseMapper.selectTournamentBlindStructuresList(pageQuery.build(), bo);
+        return TableDataInfo.build(result);
+    }
+
+
+
+    public void saveOrUpdateTournamentBlindStructure(Long tournamentId, List<Long> blindStructureIds) {
+        // 先删除原有数据
+        baseMapper.deleteByBlindTournamentId(tournamentId);
+        // 插入新数据
+        if (CollectionUtils.isNotEmpty(blindStructureIds)) {
+            baseMapper.batchInsertTournamentBlindStructures(tournamentId,blindStructureIds);
+        }
+    }
+
 }

+ 34 - 0
ruoyi-modules/ruoyi-system/src/main/resources/mapper/business/TournamentsMapper.xml

@@ -75,4 +75,38 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </where>
     </delete>
 
+
+    <select id="selectTournamentBlindStructuresList" resultType="org.dromara.business.domain.vo.TournamentBlindStructuresListVo">
+        SELECT
+            a.id AS blindStructuresId,
+            a.NAME AS blindStructuresName,
+            a.description AS blindDescription,
+            c.NAME AS tournamentsName,
+            ( CASE b.tournament_id WHEN b.tournament_id IS NOT NULL THEN 1 ELSE 0 END ) AS allocationStatus
+        FROM
+            blind_structures a
+                LEFT JOIN tournament_blind_structures b ON a.id = b.blind_structure_id
+                <if test="query.tournamentId != null and query.tournamentId != 0">
+                    AND b.tournament_id = #{query.tournamentId}
+                </if>
+                LEFT JOIN tournaments c ON b.tournament_id = c.id
+    </select>
+
+
+
+    <delete id="deleteByBlindTournamentId">
+        DELETE FROM tournament_blind_structures WHERE tournament_id = #{tournamentId}
+    </delete>
+
+
+    <insert id="batchInsertTournamentBlindStructures">
+        INSERT INTO tournament_blind_structures (tournament_id, blind_structure_id)
+        VALUES
+        <foreach collection="blindStructureIds" item="id" separator=",">
+            (#{tournamentId}, #{id})
+        </foreach>
+        ON DUPLICATE KEY UPDATE
+        tournament_id = tournament_id
+    </insert>
+
 </mapper>