Pārlūkot izejas kodu

feat(physical): 添加裁判职务选择列表功能并优化关联服务

- 在IPhysicalJudgePositionService中添加selectJudgePositionSelList方法
- 在PhysicalJudgePositionController中添加selectJudgePositionSelList接口
- 在PhysicalJudgePositionMapper中添加selectJudgePositionSelList查询方法
- 在PhysicalJudgePositionMapper.xml中添加对应的SQL查询语句
- 修改PhysicalJudgePositionRelationBo移除AddGroup校验并添加新字段
- 在PhysicalJudgePositionRelationMapper上添加@DS("mysql2")注解
- 优化PhysicalJudgePositionRelationServiceImpl查询详情时关联查询职务和裁判信息
- 修改insertByBo方法支持批量插入裁判职务关联记录
- 更新updateByBo方法支持工作年限更新
- 在PhysicalJudgePositionRelationVo中添加裁判姓名和职务名称字段
- 实现selectJudgePositionSelList方法返回职务选择列表
fugui001 1 mēnesi atpakaļ
vecāks
revīzija
4da8eea612

+ 8 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/physical/controller/PhysicalJudgePositionController.java

@@ -8,6 +8,7 @@ import jakarta.validation.constraints.*;
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import org.dromara.physical.domain.bo.PhysicalJudgePositionBo;
 import org.dromara.physical.domain.vo.PhysicalJudgePositionVo;
+import org.dromara.physical.domain.vo.PhysicalStoreVo;
 import org.dromara.physical.service.IPhysicalJudgePositionService;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.validation.annotation.Validated;
@@ -102,4 +103,11 @@ public class PhysicalJudgePositionController extends BaseController {
                           @PathVariable Long[] ids) {
         return toAjax(physicalJudgePositionService.deleteWithValidByIds(List.of(ids), true));
     }
+
+
+    @GetMapping("/selectJudgePositionSelList")
+    public R<List<PhysicalJudgePositionVo>> selectJudgePositionSelList() {
+        return R.ok(physicalJudgePositionService.selectJudgePositionSelList());
+    }
+
 }

+ 8 - 2
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/physical/domain/bo/PhysicalJudgePositionRelationBo.java

@@ -1,7 +1,6 @@
 package org.dromara.physical.domain.bo;
 
 import org.dromara.common.mybatis.core.domain.BaseEntity;
-import org.dromara.common.core.validate.AddGroup;
 import org.dromara.common.core.validate.EditGroup;
 import io.github.linpeilie.annotations.AutoMapper;
 import lombok.Data;
@@ -9,6 +8,8 @@ import lombok.EqualsAndHashCode;
 import jakarta.validation.constraints.*;
 import org.dromara.physical.domain.PhysicalJudgePositionRelation;
 
+import java.util.List;
+
 /**
  * 裁判职务关联(支持待配置状态)业务对象 physical_judge_position_relation
  *
@@ -29,7 +30,7 @@ public class PhysicalJudgePositionRelationBo extends BaseEntity {
     /**
      * 裁判ID
      */
-    @NotNull(message = "裁判ID不能为空", groups = { AddGroup.class, EditGroup.class })
+    //@NotNull(message = "裁判ID不能为空", groups = { AddGroup.class, EditGroup.class })
     private Long judgeId;
 
     /**
@@ -38,4 +39,9 @@ public class PhysicalJudgePositionRelationBo extends BaseEntity {
     private Long positionId;
 
 
+    List<Long> judgeIdList;
+
+    private Long workYears;
+
+
 }

+ 7 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/physical/domain/vo/PhysicalJudgePositionRelationVo.java

@@ -39,6 +39,13 @@ public class PhysicalJudgePositionRelationVo implements Serializable {
     @ExcelProperty(value = "裁判ID")
     private Long judgeId;
 
+    private String judgeName;
+
+    /**
+     * 裁判职务名称
+     */
+    private String positionName;
+
     /**
      * 职务ID,可为空(表示暂未分配)
      */

+ 2 - 3
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/physical/mapper/PhysicalJudgePositionMapper.java

@@ -6,10 +6,8 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.Param;
 import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
-import org.dromara.physical.domain.PhysicalJudge;
 import org.dromara.physical.domain.PhysicalJudgePosition;
 import org.dromara.physical.domain.vo.PhysicalJudgePositionVo;
-import org.dromara.physical.domain.vo.PhysicalJudgeVo;
 
 import java.util.Collection;
 import java.util.List;
@@ -41,6 +39,7 @@ public interface PhysicalJudgePositionMapper extends BaseMapperPlus<PhysicalJudg
     @InterceptorIgnore(tenantLine = "true")
     List<PhysicalJudgePositionVo> selectJudgePositionList(@Param("ew") Wrapper<PhysicalJudgePosition> wrapper);
 
-
+    @InterceptorIgnore(tenantLine = "true")
+    List<PhysicalJudgePositionVo> selectJudgePositionSelList();
 
 }

+ 3 - 1
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/physical/mapper/PhysicalJudgePositionRelationMapper.java

@@ -1,5 +1,6 @@
 package org.dromara.physical.mapper;
 
+import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -17,6 +18,7 @@ import java.util.List;
  * @author Lion Li
  * @date 2025-12-25
  */
+@DS("mysql2")
 public interface PhysicalJudgePositionRelationMapper extends BaseMapperPlus<PhysicalJudgePositionRelation, PhysicalJudgePositionRelationVo> {
 
     @InterceptorIgnore(tenantLine = "true")
@@ -51,5 +53,5 @@ public interface PhysicalJudgePositionRelationMapper extends BaseMapperPlus<Phys
      */
     @InterceptorIgnore(tenantLine = "true")
     List<PhysicalJudgePositionRelationVo> selectUseIngByJudge();
- 
+
 }

+ 4 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/physical/service/IPhysicalJudgePositionService.java

@@ -65,4 +65,8 @@ public interface IPhysicalJudgePositionService {
      * @return 是否删除成功
      */
     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+
+
+    List<PhysicalJudgePositionVo> selectJudgePositionSelList();
+
 }

+ 80 - 8
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/physical/service/impl/PhysicalJudgePositionRelationServiceImpl.java

@@ -8,16 +8,23 @@ 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.physical.domain.PhysicalJudge;
 import org.dromara.physical.domain.PhysicalJudgePositionRelation;
 import org.dromara.physical.domain.bo.PhysicalJudgePositionRelationBo;
 import org.dromara.physical.domain.vo.PhysicalJudgePositionRelationVo;
+import org.dromara.physical.domain.vo.PhysicalJudgePositionVo;
+import org.dromara.physical.domain.vo.PhysicalJudgeVo;
+import org.dromara.physical.mapper.PhysicalJudgeMapper;
+import org.dromara.physical.mapper.PhysicalJudgePositionMapper;
 import org.dromara.physical.mapper.PhysicalJudgePositionRelationMapper;
 import org.dromara.physical.service.IPhysicalJudgePositionRelationService;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 import java.util.Map;
 import java.util.Collection;
+import java.util.stream.Collectors;
 
 /**
  * 裁判职务关联(支持待配置状态)Service业务层处理
@@ -32,6 +39,10 @@ public class PhysicalJudgePositionRelationServiceImpl implements IPhysicalJudgeP
 
     private final PhysicalJudgePositionRelationMapper baseMapper;
 
+    private final PhysicalJudgePositionMapper physicalJudgePositionMapper;
+
+    private final PhysicalJudgeMapper physicalJudgeMapper;
+
     /**
      * 查询裁判职务关联(支持待配置状态)
      *
@@ -40,7 +51,25 @@ public class PhysicalJudgePositionRelationServiceImpl implements IPhysicalJudgeP
      */
     @Override
     public PhysicalJudgePositionRelationVo queryById(Long id){
-        return baseMapper.selectJudgePositionRelationById(id);
+        PhysicalJudgePositionRelationVo physicalJudgePositionRelationVo = baseMapper.selectJudgePositionRelationById(id);
+        if(physicalJudgePositionRelationVo!=null){
+            Long positionId = physicalJudgePositionRelationVo.getPositionId();
+            Long judgeId = physicalJudgePositionRelationVo.getJudgeId();
+            PhysicalJudgePositionVo physicalJudgePositionVo = physicalJudgePositionMapper.selectJudgePositionById(positionId);
+            if(physicalJudgePositionVo!=null){
+                physicalJudgePositionRelationVo.setPositionName(physicalJudgePositionVo.getName());
+            }
+            PhysicalJudgeVo physicalJudgeVo = physicalJudgeMapper.selectPhysicalJudgeById(judgeId);
+            if(physicalJudgeVo!=null){
+                physicalJudgePositionRelationVo.setJudgeName(physicalJudgeVo.getName());
+                physicalJudgePositionRelationVo.setName(physicalJudgeVo.getName());
+                physicalJudgePositionRelationVo.setPeopleIconUrl(physicalJudgeVo.getPeopleIconUrl());
+                physicalJudgePositionRelationVo.setJudgeNumber(physicalJudgeVo.getJudgeNumber());
+                physicalJudgePositionRelationVo.setWorkYears(physicalJudgeVo.getWorkYears());
+                physicalJudgePositionRelationVo.setJudgeId(physicalJudgeVo.getId());
+            }
+        }
+        return physicalJudgePositionRelationVo;
     }
 
     /**
@@ -54,6 +83,24 @@ public class PhysicalJudgePositionRelationServiceImpl implements IPhysicalJudgeP
     public TableDataInfo<PhysicalJudgePositionRelationVo> queryPageList(PhysicalJudgePositionRelationBo bo, PageQuery pageQuery) {
         LambdaQueryWrapper<PhysicalJudgePositionRelation> lqw = buildQueryWrapper(bo);
         Page<PhysicalJudgePositionRelationVo> result = baseMapper.selectJudgePositionRelationPage(pageQuery.build(), lqw);
+        List<PhysicalJudgePositionRelationVo> relationVoList = result.getRecords();
+        for (PhysicalJudgePositionRelationVo physicalJudgePositionRelationVo : relationVoList) {
+            Long positionId = physicalJudgePositionRelationVo.getPositionId();
+            Long judgeId = physicalJudgePositionRelationVo.getJudgeId();
+            PhysicalJudgePositionVo physicalJudgePositionVo = physicalJudgePositionMapper.selectJudgePositionById(positionId);
+            if(physicalJudgePositionVo!=null){
+                physicalJudgePositionRelationVo.setPositionName(physicalJudgePositionVo.getName());
+            }
+            PhysicalJudgeVo physicalJudgeVo = physicalJudgeMapper.selectPhysicalJudgeById(judgeId);
+            if(physicalJudgeVo!=null){
+                physicalJudgePositionRelationVo.setJudgeName(physicalJudgeVo.getName());
+                physicalJudgePositionRelationVo.setName(physicalJudgeVo.getName());
+                physicalJudgePositionRelationVo.setPeopleIconUrl(physicalJudgeVo.getPeopleIconUrl());
+                physicalJudgePositionRelationVo.setJudgeNumber(physicalJudgeVo.getJudgeNumber());
+                physicalJudgePositionRelationVo.setWorkYears(physicalJudgeVo.getWorkYears());
+                physicalJudgePositionRelationVo.setJudgeId(physicalJudgeVo.getId());
+            }
+        }
         return TableDataInfo.build(result);
     }
 
@@ -85,16 +132,34 @@ public class PhysicalJudgePositionRelationServiceImpl implements IPhysicalJudgeP
      * @return 是否新增成功
      */
     @Override
+    //@Transactional(rollbackFor = Exception.class)
     public Boolean insertByBo(PhysicalJudgePositionRelationBo bo) {
-        PhysicalJudgePositionRelation add = MapstructUtils.convert(bo, PhysicalJudgePositionRelation.class);
-        validEntityBeforeSave(add);
-        boolean flag = baseMapper.insertJudgePositionRelation(add) > 0;
-        if (flag) {
-            bo.setId(add.getId());
+        PhysicalJudgePositionRelation baseEntity = MapstructUtils.convert(bo, PhysicalJudgePositionRelation.class);
+        validEntityBeforeSave(baseEntity);
+
+        List<Long> judgeIdList = bo.getJudgeIdList();
+        if (judgeIdList == null || judgeIdList.isEmpty()) {
+            log.warn("裁判ID列表为空,无法新增裁判职务关联");
+            return false;
         }
-        return flag;
+
+        boolean allSuccess = true;
+        for (Long judgeId : judgeIdList) {
+            PhysicalJudgePositionRelation add = MapstructUtils.convert(bo, PhysicalJudgePositionRelation.class);
+            add.setJudgeId(judgeId);
+            validEntityBeforeSave(add);
+
+            boolean flag = baseMapper.insertJudgePositionRelation(add) > 0;
+            if (!flag) {
+                log.error("新增裁判职务关联失败,裁判ID: {}", judgeId);
+                allSuccess = false;
+            }
+        }
+
+        return allSuccess;
     }
 
+
     /**
      * 修改裁判职务关联(支持待配置状态)
      *
@@ -105,7 +170,14 @@ public class PhysicalJudgePositionRelationServiceImpl implements IPhysicalJudgeP
     public Boolean updateByBo(PhysicalJudgePositionRelationBo bo) {
         PhysicalJudgePositionRelation update = MapstructUtils.convert(bo, PhysicalJudgePositionRelation.class);
         validEntityBeforeSave(update);
-        return baseMapper.updateJudgePositionRelationById(update) > 0;
+        Long workYears = bo.getWorkYears();
+        int updated = baseMapper.updateJudgePositionRelationById(update);
+        PhysicalJudge update1 = new PhysicalJudge();
+        update1.setWorkYears(workYears);
+        update1.setId(bo.getJudgeId());
+        physicalJudgeMapper.updatePhysicalJudgeById(update1);
+
+        return updated > 0;
     }
 
     /**

+ 6 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/physical/service/impl/PhysicalJudgePositionServiceImpl.java

@@ -130,4 +130,10 @@ public class PhysicalJudgePositionServiceImpl implements IPhysicalJudgePositionS
         }
         return baseMapper.deleteJudgePosition(ids) > 0;
     }
+
+    @Override
+    public List<PhysicalJudgePositionVo> selectJudgePositionSelList() {
+        return baseMapper.selectJudgePositionSelList();
+    }
+
 }

+ 10 - 1
ruoyi-modules/ruoyi-system/src/main/resources/mapper/physical/PhysicalJudgePositionMapper.xml

@@ -79,5 +79,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </where>
     </delete>
 
-
+    <select id="selectJudgePositionSelList" resultType="org.dromara.physical.domain.vo.PhysicalJudgePositionVo">
+        SELECT
+            id,
+            name,
+            priority,
+            status,
+            create_time,
+            update_time
+        FROM physical_judge_position
+    </select>
 </mapper>