From ce1ea9ac3806578719070a463ef7381a0d3c5148 Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期二, 12 五月 2026 17:45:00 +0800
Subject: [PATCH] 分派生产单到班组长,班组长:排产工单到班组成员

---
 src/main/java/com/ruoyi/production/service/impl/ProductionTeamUserRelServiceImpl.java   |   19 +++
 src/main/java/com/ruoyi/production/bean/dto/ProductionPlanDto.java                      |    2 
 src/main/java/com/ruoyi/production/controller/ProductionOperationTaskController.java    |    6 +
 src/main/resources/mapper/production/ProductionOrderMapper.xml                          |    4 
 src/main/java/com/ruoyi/production/bean/vo/ProductionOrderVo.java                       |    3 
 doc/20260511_create_table_production_team.sql                                           |    6 +
 src/main/java/com/ruoyi/production/service/impl/ProductionOperationTaskServiceImpl.java |   20 ++++
 src/main/resources/mapper/production/ProductionOperationTaskMapper.xml                  |    5 +
 src/main/java/com/ruoyi/production/service/ProductionTeamUserRelService.java            |   18 +++
 src/main/resources/mapper/production/ProductionTeamUserRelMapper.xml                    |   30 ++++++
 src/main/java/com/ruoyi/production/pojo/ProductionOperationTask.java                    |    3 
 src/main/java/com/ruoyi/production/bean/dto/ProductionOperationTaskDto.java             |    3 
 src/main/java/com/ruoyi/production/service/impl/ProductionPlanServiceImpl.java          |    1 
 src/main/java/com/ruoyi/production/controller/ProductionTeamUserRelController.java      |   29 +++++
 src/main/java/com/ruoyi/production/mapper/ProductionTeamUserRelMapper.java              |   16 +++
 src/main/java/com/ruoyi/production/service/ProductionOperationTaskService.java          |    7 +
 src/main/java/com/ruoyi/production/pojo/ProductionOrder.java                            |    3 
 src/main/java/com/ruoyi/production/service/impl/ProductionOrderPickServiceImpl.java     |   36 +++++++
 src/main/java/com/ruoyi/production/bean/vo/ProductionOperationTaskVo.java               |   12 ++
 src/main/java/com/ruoyi/production/controller/ProductionTeamController.java             |   10 -
 src/main/java/com/ruoyi/production/bean/vo/TeamLeaderVo.java                            |   13 ++
 21 files changed, 236 insertions(+), 10 deletions(-)

diff --git a/doc/20260511_create_table_production_team.sql b/doc/20260511_create_table_production_team.sql
index 9668d8e..7c705ee 100644
--- a/doc/20260511_create_table_production_team.sql
+++ b/doc/20260511_create_table_production_team.sql
@@ -26,3 +26,9 @@
     index              idx_sys_user_id (sys_user_id),
     unique idx_production_team_user (production_team_id, sys_user_id)
 );
+
+alter table production_order add column team_leader_user_id bigint not null default 0 comment '鐝粍闀縄D';
+alter table production_order add index idx_team_leader_user_id (team_leader_user_id);
+
+alter table production_operation_task
+    add team_user_id bigint default 0 not null comment '鐝粍鍥㈠憳鐢ㄦ埛id';
diff --git a/src/main/java/com/ruoyi/production/bean/dto/ProductionOperationTaskDto.java b/src/main/java/com/ruoyi/production/bean/dto/ProductionOperationTaskDto.java
index 965cbf3..b73b1e4 100644
--- a/src/main/java/com/ruoyi/production/bean/dto/ProductionOperationTaskDto.java
+++ b/src/main/java/com/ruoyi/production/bean/dto/ProductionOperationTaskDto.java
@@ -44,4 +44,7 @@
     @Schema(description = "缁撴潫鏃ユ湡")
     @DateTimeFormat(pattern = "yyyy-MM-dd")
     private LocalDate endDate;
+
+    @Schema(description = "鐝粍鎴愬憳鐢ㄦ埛ID")
+    private Long teamUserId;
 }
diff --git a/src/main/java/com/ruoyi/production/bean/dto/ProductionPlanDto.java b/src/main/java/com/ruoyi/production/bean/dto/ProductionPlanDto.java
index c4363a8..29bcdad 100644
--- a/src/main/java/com/ruoyi/production/bean/dto/ProductionPlanDto.java
+++ b/src/main/java/com/ruoyi/production/bean/dto/ProductionPlanDto.java
@@ -55,4 +55,6 @@
     @Schema(description = "閿�鍞悎鍚屽彿")
     private String salesContractNo;
 
+    @Schema(description = "鐝粍闀縄D")
+    private Long leaderId;
 }
diff --git a/src/main/java/com/ruoyi/production/bean/vo/ProductionOperationTaskVo.java b/src/main/java/com/ruoyi/production/bean/vo/ProductionOperationTaskVo.java
index 9929f19..34310c7 100644
--- a/src/main/java/com/ruoyi/production/bean/vo/ProductionOperationTaskVo.java
+++ b/src/main/java/com/ruoyi/production/bean/vo/ProductionOperationTaskVo.java
@@ -49,4 +49,16 @@
 
     @Schema(description = "绫诲瀷 鍖哄垎璁℃椂鍜岃浠�(0璁℃椂1璁′欢)")
     private Integer type;
+
+    @Schema(description = "鐝粍闀垮悕绉�")
+    private String leaderName;
+
+    @Schema(description = "鐝粍闀跨敤鎴稩D")
+    private Long leaderUserId;
+
+    @Schema(description = "鐝粍鍥㈠憳鐢ㄦ埛ID")
+    private Long teamUserId;
+
+    @Schema(description = "鐝粍鍥㈠憳鍚嶇О")
+    private String teamUserName;
 }
diff --git a/src/main/java/com/ruoyi/production/bean/vo/ProductionOrderVo.java b/src/main/java/com/ruoyi/production/bean/vo/ProductionOrderVo.java
index 01ef33a..0318f32 100644
--- a/src/main/java/com/ruoyi/production/bean/vo/ProductionOrderVo.java
+++ b/src/main/java/com/ruoyi/production/bean/vo/ProductionOrderVo.java
@@ -44,4 +44,7 @@
 
     @Schema(description = "鏄惁宸查��鏂�")
     private Boolean returned;
+
+    @Schema(description = "鐝粍闀挎樀绉�")
+    private String teamLeaderUserName;
 }
diff --git a/src/main/java/com/ruoyi/production/bean/vo/TeamLeaderVo.java b/src/main/java/com/ruoyi/production/bean/vo/TeamLeaderVo.java
new file mode 100644
index 0000000..52d8842
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/bean/vo/TeamLeaderVo.java
@@ -0,0 +1,13 @@
+package com.ruoyi.production.bean.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Data
+public class TeamLeaderVo extends ProductionTeamVo.MemberVo {
+    @Schema(description = "鐝粍ID")
+    private Long productionTeamId;
+
+    @Schema(description = "鐝粍鍚嶇О")
+    private String teamName;
+}
diff --git a/src/main/java/com/ruoyi/production/controller/ProductionOperationTaskController.java b/src/main/java/com/ruoyi/production/controller/ProductionOperationTaskController.java
index 56ed8c2..8d1ce0f 100644
--- a/src/main/java/com/ruoyi/production/controller/ProductionOperationTaskController.java
+++ b/src/main/java/com/ruoyi/production/controller/ProductionOperationTaskController.java
@@ -70,6 +70,12 @@
         return R.ok(productionOperationTaskService.assign(dto));
     }
 
+    @Operation(summary = "鎸囨淳鐝粍鎴愬憳")
+    @PostMapping("/assignTeamUser")
+    public R<Boolean> assignTeamUser(@RequestBody ProductionOperationTaskDto dto) {
+        return R.ok(productionOperationTaskService.assignTeamUser(dto));
+    }
+
     @PostMapping("/down")
     @Operation(summary = "宸ュ崟娴佽浆鍗′笅杞�")
     public void down(HttpServletResponse response, @RequestBody ProductionOperationTaskDto dto) {
diff --git a/src/main/java/com/ruoyi/production/controller/ProductionTeamController.java b/src/main/java/com/ruoyi/production/controller/ProductionTeamController.java
index 5fd8e95..fcb8756 100644
--- a/src/main/java/com/ruoyi/production/controller/ProductionTeamController.java
+++ b/src/main/java/com/ruoyi/production/controller/ProductionTeamController.java
@@ -8,6 +8,7 @@
 import com.ruoyi.production.service.ProductionTeamService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.AllArgsConstructor;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
@@ -17,15 +18,12 @@
  * 鐢熶骇鐝粍鎺у埗鍣�
  */
 @RestController
-@RequestMapping("/production_team")
+@RequestMapping("/productionTeam")
 @Tag(name = "鐢熶骇鐝粍绠$悊", description = "鐢熶骇鐝粍澧炲垹鏀规煡鎺ュ彛")
+@AllArgsConstructor
 public class ProductionTeamController {
 
-    private final ProductionTeamService productionTeamService;
-
-    public ProductionTeamController(ProductionTeamService productionTeamService) {
-        this.productionTeamService = productionTeamService;
-    }
+    private ProductionTeamService productionTeamService;
 
     /**
      * 鍒涘缓鐝粍
diff --git a/src/main/java/com/ruoyi/production/controller/ProductionTeamUserRelController.java b/src/main/java/com/ruoyi/production/controller/ProductionTeamUserRelController.java
index 67b4405..135f5b0 100644
--- a/src/main/java/com/ruoyi/production/controller/ProductionTeamUserRelController.java
+++ b/src/main/java/com/ruoyi/production/controller/ProductionTeamUserRelController.java
@@ -1,7 +1,18 @@
 package com.ruoyi.production.controller;
 
+import com.ruoyi.framework.web.domain.R;
+import com.ruoyi.production.bean.dto.ProductionTeamDto;
+import com.ruoyi.production.bean.vo.ProductionTeamVo;
+import com.ruoyi.production.bean.vo.TeamLeaderVo;
+import org.springframework.web.bind.annotation.RequestParam;
+import com.ruoyi.production.service.ProductionTeamUserRelService;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,6 +24,24 @@
  */
 @RestController
 @RequestMapping("/productionTeamUserRel")
+@AllArgsConstructor
 public class ProductionTeamUserRelController {
+    private ProductionTeamUserRelService productionTeamUserRelService;
+    /**
+     * 鏌ヨ鐝粍闀垮垪琛�
+     */
+    @GetMapping("/leaderList")
+    @Operation(summary = "鏌ヨ鐝粍闀垮垪琛�", description = "鏌ヨ鐢熶骇鐝粍鐝粍闀垮垪琛�")
+    public R<List<TeamLeaderVo>> getTeamLeaderList() {
+        return R.ok(productionTeamUserRelService.listAllLeaders());
+    }
 
+    /**
+     * 鏍规嵁鐝粍闀跨敤鎴稩D鏌ヨ鐝粍鎴愬憳鍒楄〃
+     */
+    @GetMapping("/memberListByLeader")
+    @Operation(summary = "鏍规嵁鐝粍闀挎煡璇㈢彮缁勬垚鍛�", description = "鏍规嵁鐝粍闀跨敤鎴稩D鏌ヨ鎵�灞炵彮缁勭殑鎴愬憳鍒楄〃")
+    public R<List<ProductionTeamVo.MemberVo>> getMemberListByLeader(@RequestParam Long leaderUserId) {
+        return R.ok(productionTeamUserRelService.listTeamMembersByLeader(leaderUserId));
+    }
 }
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductionTeamUserRelMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductionTeamUserRelMapper.java
index 1f5f193..090459f 100644
--- a/src/main/java/com/ruoyi/production/mapper/ProductionTeamUserRelMapper.java
+++ b/src/main/java/com/ruoyi/production/mapper/ProductionTeamUserRelMapper.java
@@ -1,8 +1,12 @@
 package com.ruoyi.production.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.production.bean.vo.ProductionTeamVo;
+import com.ruoyi.production.bean.vo.TeamLeaderVo;
 import com.ruoyi.production.pojo.ProductionTeamUserRel;
 import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
 
 /**
  * <p>
@@ -15,4 +19,16 @@
 @Mapper
 public interface ProductionTeamUserRelMapper extends BaseMapper<ProductionTeamUserRel> {
 
+    /**
+     * 鏌ヨ鎵�鏈夌彮缁勯暱淇℃伅锛堝寘鍚敤鎴峰悕绉板拰鐝粍鍚嶇О锛�
+     * @return 鐝粍闀夸俊鎭垪琛�
+     */
+    List<TeamLeaderVo> selectAllLeaders();
+
+    /**
+     * 鏍规嵁鐝粍闀跨敤鎴稩D鏌ヨ鐝粍鎴愬憳鍒楄〃
+     * @param leaderUserId 鐝粍闀跨敤鎴稩D
+     * @return 鐝粍鎴愬憳鍒楄〃
+     */
+    List<ProductionTeamVo.MemberVo> selectTeamMembersByLeader(Long leaderUserId);
 }
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductionOperationTask.java b/src/main/java/com/ruoyi/production/pojo/ProductionOperationTask.java
index 08399e9..6145863 100644
--- a/src/main/java/com/ruoyi/production/pojo/ProductionOperationTask.java
+++ b/src/main/java/com/ruoyi/production/pojo/ProductionOperationTask.java
@@ -76,4 +76,7 @@
 
     @Schema(description = "鏉冮檺鐢ㄦ埛ID鍒楄〃锛屾牸寮忥細[1,2,3]銆傛寚瀹氬涓敤鎴稩D鏃讹紝鐢ㄩ�楀彿鍒嗛殧銆�")
     private String userIds;
+
+    @Schema(description = "鐝粍鎴愬憳鐢ㄦ埛ID")
+    private Long teamUserId;
 }
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductionOrder.java b/src/main/java/com/ruoyi/production/pojo/ProductionOrder.java
index e52ee9d..ecc3a71 100644
--- a/src/main/java/com/ruoyi/production/pojo/ProductionOrder.java
+++ b/src/main/java/com/ruoyi/production/pojo/ProductionOrder.java
@@ -88,4 +88,7 @@
     @Schema(description = "鏄惁缁撴潫锛�")
     @TableField("is_end_order")
     private Boolean endOrder;
+
+    @Schema(description = "鐝粍闀縄D")
+    private Long teamLeaderUserId;
 }
diff --git a/src/main/java/com/ruoyi/production/service/ProductionOperationTaskService.java b/src/main/java/com/ruoyi/production/service/ProductionOperationTaskService.java
index 0945c6a..112a7a1 100644
--- a/src/main/java/com/ruoyi/production/service/ProductionOperationTaskService.java
+++ b/src/main/java/com/ruoyi/production/service/ProductionOperationTaskService.java
@@ -27,6 +27,13 @@
 
     boolean assign(ProductionOperationTaskDto dto);
 
+    /**
+     * 鎸囨淳鐝粍鎴愬憳
+     * @param dto 宸ュ崟DTO
+     * @return 鏄惁鎴愬姛
+     */
+    boolean assignTeamUser(ProductionOperationTaskDto dto);
+
     void down(HttpServletResponse response, ProductionOperationTaskDto dto);
 
     List<ProductionOperationTaskVo> getOperation(ProductionOperationTaskDto dto);
diff --git a/src/main/java/com/ruoyi/production/service/ProductionTeamUserRelService.java b/src/main/java/com/ruoyi/production/service/ProductionTeamUserRelService.java
index cb28716..27d1416 100644
--- a/src/main/java/com/ruoyi/production/service/ProductionTeamUserRelService.java
+++ b/src/main/java/com/ruoyi/production/service/ProductionTeamUserRelService.java
@@ -1,7 +1,11 @@
 package com.ruoyi.production.service;
 
-import com.ruoyi.production.pojo.ProductionTeamUserRel;
+import com.ruoyi.production.bean.vo.ProductionTeamVo;
+import com.ruoyi.production.bean.vo.TeamLeaderVo;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.production.pojo.ProductionTeamUserRel;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +17,16 @@
  */
 public interface ProductionTeamUserRelService extends IService<ProductionTeamUserRel> {
 
+    /**
+     * 鑾峰彇鎵�鏈夌彮缁勯暱闆嗗悎
+     * @return 鐝粍闀块泦鍚�
+     */
+    List<TeamLeaderVo> listAllLeaders();
+
+    /**
+     * 鏍规嵁鐝粍闀跨敤鎴稩D鑾峰彇鐝粍鎴愬憳鍒楄〃
+     * @param leaderUserId 鐝粍闀跨敤鎴稩D
+     * @return 鐝粍鎴愬憳鍒楄〃
+     */
+    List<ProductionTeamVo.MemberVo> listTeamMembersByLeader(Long leaderUserId);
 }
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionOperationTaskServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionOperationTaskServiceImpl.java
index 6e9457d..d374c50 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionOperationTaskServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionOperationTaskServiceImpl.java
@@ -126,6 +126,26 @@
         return true;
     }
 
+    @Override
+    public boolean assignTeamUser(ProductionOperationTaskDto dto) {
+        // 鎸囨淳鐝粍鎴愬憳
+        if (dto == null || dto.getId() == null) {
+            throw new ServiceException("宸ュ崟ID涓嶈兘涓虹┖");
+        }
+        if (dto.getTeamUserId() == null) {
+            throw new ServiceException("鐝粍鐢ㄦ埛ID涓嶈兘涓虹┖");
+        }
+
+        ProductionOperationTask update = new ProductionOperationTask();
+        update.setId(dto.getId());
+        update.setTeamUserId(dto.getTeamUserId());
+        int rows = baseMapper.updateById(update);
+        if (rows <= 0) {
+            throw new ServiceException("宸ュ崟涓嶅瓨鍦ㄦ垨宸插垹闄�");
+        }
+        return true;
+    }
+
     private LambdaQueryWrapper<ProductionOperationTask> buildQueryWrapper(ProductionOperationTaskDto dto) {
         // 鎸夋潯浠跺姩鎬佹瀯寤烘暟鎹簱鏌ヨ鏉′欢
         ProductionOperationTask query = dto == null ? new ProductionOperationTask() : dto;
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionOrderPickServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionOrderPickServiceImpl.java
index 554b95e..cadd817 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionOrderPickServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionOrderPickServiceImpl.java
@@ -7,6 +7,7 @@
 import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum;
 import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum;
 import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.production.bean.dto.ProductionOrderPickDto;
 import com.ruoyi.production.bean.vo.ProductionOrderPickVo;
@@ -61,6 +62,9 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean savePick(ProductionOrderPickDto dto) {
+        // 鏍¢獙褰撳墠鐢ㄦ埛蹇呴』涓鸿鍗曠彮缁勯暱
+        validateTeamLeader(dto);
+
         // 棰嗘枡鏂板鎬绘祦绋嬶細
         // 1) 瑙f瀽鍓嶇琛屾暟鎹苟閫愯鍚堝苟鍙傛暟锛�
         // 2) 鏍¢獙鍙傛暟涓庢壒娆★紱
@@ -1178,4 +1182,36 @@
         // 鏁伴噺鏍煎紡鍖栬緭鍑猴紙鍘婚櫎鏈熬鏃犳晥0锛夈��
         return defaultDecimal(value).stripTrailingZeros().toPlainString();
     }
+
+    /**
+     * 鏍¢獙褰撳墠鐢ㄦ埛蹇呴』涓鸿鍗曠彮缁勯暱
+     * @param dto 棰嗘枡DTO
+     */
+    private void validateTeamLeader(ProductionOrderPickDto dto) {
+        // 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛ID
+        Long currentUserId = SecurityUtils.getLoginUser().getUserId();
+
+        // 鑾峰彇鐢熶骇璁㈠崟ID
+        Long productionOrderId = resolveProductionOrderId(dto);
+        if (productionOrderId == null) {
+            throw new ServiceException("鐢熶骇璁㈠崟ID涓嶈兘涓虹┖");
+        }
+
+        // 鏌ヨ鐢熶骇璁㈠崟
+        ProductionOrder productionOrder = productionOrderMapper.selectById(productionOrderId);
+        if (productionOrder == null) {
+            throw new ServiceException("鐢熶骇璁㈠崟涓嶅瓨鍦�");
+        }
+
+        // 鑾峰彇璁㈠崟鐨勭彮缁勯暱ID
+        Long teamLeaderUserId = productionOrder.getTeamLeaderUserId();
+        if (teamLeaderUserId == null) {
+            throw new ServiceException("璇ヨ鍗曟湭璁剧疆鐝粍闀�");
+        }
+
+        // 鏍¢獙褰撳墠鐢ㄦ埛鏄惁涓虹彮缁勯暱
+        if (!Objects.equals(currentUserId, teamLeaderUserId)) {
+            throw new ServiceException("褰撳墠鐢ㄦ埛涓嶆槸璇ヨ鍗曠殑鐝粍闀匡紝鏃犳硶杩涜棰嗘枡鎿嶄綔");
+        }
+    }
 }
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionPlanServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionPlanServiceImpl.java
index b00266b..20e7eb7 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionPlanServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionPlanServiceImpl.java
@@ -151,6 +151,7 @@
         productionOrder.setProductModelId(firstPlan.getProductModelId());
         productionOrder.setQuantity(assignedQuantity);
         productionOrder.setPlanCompleteTime(productionPlanDto.getPlanCompleteTime());
+        productionOrder.setTeamLeaderUserId(productionPlanDto.getLeaderId());
         if (!productionOrderService.saveProductionOrder(productionOrder)) {
             throw new ServiceException("涓嬪彂澶辫触锛岀敓浜ц鍗曚繚瀛樺け璐�");
         }
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionTeamUserRelServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionTeamUserRelServiceImpl.java
index ff65c2c..2f1295e 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionTeamUserRelServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionTeamUserRelServiceImpl.java
@@ -1,11 +1,15 @@
 package com.ruoyi.production.service.impl;
 
-import com.ruoyi.production.pojo.ProductionTeamUserRel;
+import com.ruoyi.production.bean.vo.ProductionTeamVo;
+import com.ruoyi.production.bean.vo.TeamLeaderVo;
 import com.ruoyi.production.mapper.ProductionTeamUserRelMapper;
+import com.ruoyi.production.pojo.ProductionTeamUserRel;
 import com.ruoyi.production.service.ProductionTeamUserRelService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import lombok.RequiredArgsConstructor;
+import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
+
+import java.util.List;
 
 /**
  * <p>
@@ -15,8 +19,17 @@
  * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
  * @since 2026-05-11 11:15:05
  */
+@AllArgsConstructor
 @Service
-@RequiredArgsConstructor
 public class ProductionTeamUserRelServiceImpl extends ServiceImpl<ProductionTeamUserRelMapper, ProductionTeamUserRel> implements ProductionTeamUserRelService {
 
+    @Override
+    public List<TeamLeaderVo> listAllLeaders() {
+        return baseMapper.selectAllLeaders();
+    }
+
+    @Override
+    public List<ProductionTeamVo.MemberVo> listTeamMembersByLeader(Long leaderUserId) {
+        return baseMapper.selectTeamMembersByLeader(leaderUserId);
+    }
 }
diff --git a/src/main/resources/mapper/production/ProductionOperationTaskMapper.xml b/src/main/resources/mapper/production/ProductionOperationTaskMapper.xml
index 6db5455..0361192 100644
--- a/src/main/resources/mapper/production/ProductionOperationTaskMapper.xml
+++ b/src/main/resources/mapper/production/ProductionOperationTaskMapper.xml
@@ -25,6 +25,9 @@
         select pot.*,
                po.nps_no as npsNo,
                po.is_end_order as endOrder,
+               po.team_leader_user_id as leaderUserId,
+               u.nick_name as leaderName,
+               teamUser.nick_name as teamUserName,
                p.product_name as productName,
                pm.model as model,
                pm.unit as unit,
@@ -41,6 +44,8 @@
                  left join production_order_routing_operation poro on pot.production_order_routing_operation_id = poro.id
                  left join product_model pm on pm.id = ifnull(poro.product_model_id, po.product_model_id)
                  left join product p on pm.product_id = p.id
+                 left join sys_user u on po.team_leader_user_id = u.user_id
+                 left join sys_user teamUser on pot.team_user_id = teamUser.user_id
                  left join (
             select ppm.production_operation_task_id as taskId,
                    sum(ifnull(ppo.scrap_qty, 0)) as scrapQty
diff --git a/src/main/resources/mapper/production/ProductionOrderMapper.xml b/src/main/resources/mapper/production/ProductionOrderMapper.xml
index 1a304ef..c4ae186 100644
--- a/src/main/resources/mapper/production/ProductionOrderMapper.xml
+++ b/src/main/resources/mapper/production/ProductionOrderMapper.xml
@@ -28,6 +28,7 @@
         <result column="model" property="model" />
         <result column="processRouteCode" property="processRouteCode" />
         <result column="returned" property="returned" />
+        <result column="teamLeaderUserName" property="teamLeaderUserName" />
     </resultMap>
 
     <sql id="ProductionOrderVoColumns">
@@ -46,6 +47,8 @@
         po.dept_id,
         po.plan_complete_time,
         po.status,
+        po.team_leader_user_id,
+        sl_user.nick_name as teamLeaderUserName,
         po_sales.salesContractNo,
         po_sales.customerName,
         p.product_name as productName,
@@ -75,6 +78,7 @@
                  left join product p on pm.product_id = p.id
                  left join technology_routing tr on po.technology_routing_id = tr.id
                  left join technology_bom tb on tb.id = tr.bom_id
+                 left join sys_user sl_user on sl_user.user_id = po.team_leader_user_id
                  left join (
             select production_order_id as productionOrderId,
                    if(max(case when ifnull(is_returned, 0) = 1 then 1 else 0 end) = 1, true, false) as returned
diff --git a/src/main/resources/mapper/production/ProductionTeamUserRelMapper.xml b/src/main/resources/mapper/production/ProductionTeamUserRelMapper.xml
index deb74c8..cfa5063 100644
--- a/src/main/resources/mapper/production/ProductionTeamUserRelMapper.xml
+++ b/src/main/resources/mapper/production/ProductionTeamUserRelMapper.xml
@@ -13,4 +13,34 @@
         <result column="update_time" property="updateTime" />
     </resultMap>
 
+    <!-- 鏌ヨ鎵�鏈夌彮缁勯暱淇℃伅 -->
+    <select id="selectAllLeaders" resultType="com.ruoyi.production.bean.vo.TeamLeaderVo">
+        SELECT
+            rel.sys_user_id AS user_id,
+            u.nick_name,
+            rel.production_team_id,
+            t.team_name
+        FROM production_team_user_rel rel
+        LEFT JOIN sys_user u ON rel.sys_user_id = u.user_id
+        LEFT JOIN production_team t ON rel.production_team_id = t.id
+        WHERE rel.is_leader = 1
+        GROUP BY rel.sys_user_id, rel.production_team_id
+    </select>
+
+    <!-- 鏍规嵁鐝粍闀跨敤鎴稩D鏌ヨ鐝粍鎴愬憳鍒楄〃 -->
+    <select id="selectTeamMembersByLeader" resultType="com.ruoyi.production.bean.vo.ProductionTeamVo$MemberVo">
+        SELECT
+            rel.sys_user_id AS userId,
+            u.nick_name,
+            CASE WHEN rel.is_leader = 1 THEN TRUE ELSE FALSE END AS isLeader
+        FROM production_team_user_rel rel
+        LEFT JOIN sys_user u ON rel.sys_user_id = u.user_id
+        WHERE rel.production_team_id IN (
+            SELECT production_team_id
+            FROM production_team_user_rel
+            WHERE sys_user_id = #{leaderUserId} AND is_leader = 1
+        )
+          AND rel.is_leader = 0
+    </select>
+
 </mapper>

--
Gitblit v1.9.3