From 111270df037596a04df97f787ca8b9199dd99866 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期一, 20 七月 2026 17:28:31 +0800
Subject: [PATCH] feat(crm): 增加商机客户团队权限校验功能

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/task/MesProTaskServiceImpl.java |   39 +++++++++++++++++++++++++++++++++++----
 1 files changed, 35 insertions(+), 4 deletions(-)

diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/task/MesProTaskServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/task/MesProTaskServiceImpl.java
index 4052b07..64b2076 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/task/MesProTaskServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/task/MesProTaskServiceImpl.java
@@ -10,6 +10,7 @@
 import cn.iocoder.yudao.module.mes.dal.dataobject.pro.task.MesProTaskDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderDO;
 import cn.iocoder.yudao.module.mes.dal.mysql.pro.task.MesProTaskMapper;
+import cn.iocoder.yudao.module.mes.dal.mysql.pro.feedback.MesProFeedbackMapper;
 import cn.iocoder.yudao.module.mes.enums.md.autocode.MesMdAutoCodeRuleCodeEnum;
 import cn.iocoder.yudao.module.mes.enums.pro.MesProTaskStatusEnum;
 import cn.iocoder.yudao.module.mes.service.md.autocode.MesMdAutoCodeRecordService;
@@ -17,6 +18,8 @@
 import cn.iocoder.yudao.module.mes.service.md.unitmeasure.MesMdUnitMeasureService;
 import cn.iocoder.yudao.module.mes.service.md.workstation.MesMdWorkstationService;
 import cn.iocoder.yudao.module.mes.service.pro.process.MesProProcessService;
+import cn.iocoder.yudao.module.mes.dal.dataobject.pro.route.MesProRouteProcessDO;
+import cn.iocoder.yudao.module.mes.service.pro.route.MesProRouteProcessService;
 import cn.iocoder.yudao.module.mes.service.pro.route.MesProRouteService;
 import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderService;
 import jakarta.annotation.Resource;
@@ -33,6 +36,7 @@
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
 import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.PRO_TASK_ALREADY_FINISHED;
+import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.PRO_TASK_HAS_FEEDBACK;
 import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.PRO_TASK_NOT_EXISTS;
 
 /**
@@ -48,6 +52,9 @@
     private MesProTaskMapper taskMapper;
 
     @Resource
+    private MesProFeedbackMapper feedbackMapper;
+
+    @Resource
     @Lazy
     private MesProWorkOrderService workOrderService;
     @Resource
@@ -61,6 +68,9 @@
     @Resource
     private MesProRouteService routeService;
     @Resource
+    @Lazy
+    private MesProRouteProcessService routeProcessService;
+    @Resource
     private MesMdAutoCodeRecordService autoCodeRecordService;
 
     @Override
@@ -70,10 +80,23 @@
         workstationService.validateWorkstationExists(createReqVO.getWorkstationId());
         routeService.validateRouteExists(createReqVO.getRouteId());
         processService.validateProcessExistsAndEnable(createReqVO.getProcessId());
-        MesMdItemDO item = itemService.validateItemExists(createReqVO.getItemId());
 
-        // 2.1 鏋勫缓浠诲姟 DO锛氳嚜鍔ㄥ~鍏呭鎴蜂俊鎭�
+        // 2. 鑷姩纭畾 itemId锛氫紭鍏堝墠绔紶鍏� 鈫� 宸ヨ壓璺嚎宸ュ簭鐨勪骇鍑轰骇鍝� 鈫� 宸ュ崟鎴愬搧
+        Long itemId = createReqVO.getItemId();
+        if (itemId == null) {
+            MesProRouteProcessDO routeProcess = routeProcessService
+                    .getRouteProcessByRouteIdAndProcessId(createReqVO.getRouteId(), createReqVO.getProcessId());
+            if (routeProcess != null && routeProcess.getOutputItemId() != null) {
+                itemId = routeProcess.getOutputItemId();
+            } else {
+                itemId = workOrder.getProductId();
+            }
+        }
+        MesMdItemDO item = itemService.validateItemExists(itemId);
+
+        // 3.1 鏋勫缓浠诲姟 DO锛氳嚜鍔ㄥ~鍏呭鎴蜂俊鎭�
         MesProTaskDO task = BeanUtils.toBean(createReqVO, MesProTaskDO.class)
+                .setItemId(itemId) // 纭繚浣跨敤璁$畻鍚庣殑 itemId
                 .setName(buildTaskName(item, createReqVO.getQuantity()))
                 .setCode(autoCodeRecordService.generateAutoCode(MesMdAutoCodeRuleCodeEnum.PRO_TASK_CODE.getCode()))
                 .setStatus(MesProTaskStatusEnum.PREPARE.getStatus());
@@ -134,8 +157,11 @@
     public void deleteTask(Long id) {
         // 1. 鏍¢獙瀛樺湪涓旈潪缁堟��
         validateTaskNotFinished(id);
-
-        // 2. 鍒犻櫎
+        // 2. 鏍¢獙浠诲姟涓嬫棤鎶ュ伐璁板綍锛岄伩鍏嶅垹闄ゅ悗鎶ュ伐杩芥函鏂摼
+        if (feedbackMapper.selectCountByTaskId(id) > 0) {
+            throw exception(PRO_TASK_HAS_FEEDBACK);
+        }
+        // 3. 鍒犻櫎
         taskMapper.deleteById(id);
     }
 
@@ -150,6 +176,11 @@
     }
 
     @Override
+    public PageResult<MesProTaskDO> getPendingFeedbackPage(MesProTaskPageReqVO pageReqVO) {
+        return taskMapper.selectPendingFeedbackPage(pageReqVO);
+    }
+
+    @Override
     public List<MesProTaskDO> getTaskListByWorkOrderIds(Collection<Long> workOrderIds) {
         if (CollUtil.isEmpty(workOrderIds)) {
             return Collections.emptyList();

--
Gitblit v1.9.3