From 05ab6e3f69a5e73624b2573db043f5923e8f7d8b Mon Sep 17 00:00:00 2001
From: xiaoyi <908147524@qq.com>
Date: 星期四, 05 十一月 2026 14:17:19 +0800
Subject: [PATCH] fix 修复bug

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/task/MesProTaskServiceImpl.java |   29 ++++++++++++++++++++++++-----
 1 files changed, 24 insertions(+), 5 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 087ce58..a518bc7 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
@@ -36,6 +36,7 @@
 import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderProcessDO;
 import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderProcessService;
 import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderParamRecordService;
+import cn.iocoder.yudao.module.mes.util.MesOutputItemUtils;
 import jakarta.annotation.Resource;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
@@ -74,6 +75,9 @@
 @Service
 @Validated
 public class MesProTaskServiceImpl implements MesProTaskService {
+
+    @Resource
+    private cn.iocoder.yudao.module.mes.service.pro.feedback.MesProFeedbackEquipmentService equipmentService;
 
     @Resource
     private cn.iocoder.yudao.module.mes.service.pro.task.schedule.MesProScheduleGuardService scheduleGuard;
@@ -148,8 +152,9 @@
             MesProRouteProcessDO routeProcess = routeProcessService
                     .getRouteProcessByRouteIdAndProcessId(createReqVO.getRouteId(), createReqVO.getProcessId());
             if (routeProcess != null && routeProcess.getOutputItemId() != null) {
-                itemId = Long.valueOf(routeProcess.getOutputItemId().split(",")[0].trim());
-            } else {
+                itemId = MesOutputItemUtils.firstItemId(routeProcess.getOutputItemId());
+            }
+            if (itemId == null) {
                 itemId = workOrder.getProductId();
             }
         }
@@ -424,7 +429,9 @@
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void finishTaskByOrderId(Long workOrderId) {
+        equipmentService.lock();
         // 1. 璇诲彇宸ュ崟涓嬫墍鏈変换鍔★紝杩囨护鎺夊凡瀹屾垚/宸插彇娑堢殑
         List<MesProTaskDO> tasks = taskMapper.selectListByWorkOrderId(workOrderId);
         LocalDateTime now = LocalDateTime.now();
@@ -436,10 +443,13 @@
         if (CollUtil.isNotEmpty(updateList)) {
             taskMapper.updateBatch(updateList);
         }
+        equipmentService.afterTaskStateChanged(tasks);
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void cancelTaskByOrderId(Long workOrderId) {
+        equipmentService.lock();
         // 1. 璇诲彇宸ュ崟涓嬫墍鏈変换鍔★紝杩囨护鎺夊凡瀹屾垚/宸插彇娑堢殑
         List<MesProTaskDO> tasks = taskMapper.selectListByWorkOrderId(workOrderId);
         LocalDateTime now = LocalDateTime.now();
@@ -451,6 +461,7 @@
         if (CollUtil.isNotEmpty(updateList)) {
             taskMapper.updateBatch(updateList);
         }
+        equipmentService.afterTaskStateChanged(tasks);
     }
 
     @Override
@@ -554,7 +565,8 @@
         List<Long> taskIds = new java.util.ArrayList<>();
         for (MesProRouteProcessDO rp : routeProcesses) {
             cn.iocoder.yudao.module.mes.dal.dataobject.pro.process.MesProProcessDO proc = procMap.get(rp.getProcessId());
-            Long itemId = rp.getOutputItemId() != null ? Long.valueOf(rp.getOutputItemId().split(",")[0].trim()) : workOrder.getProductId();
+            Long outputItemId = rp.getOutputItemId() != null ? MesOutputItemUtils.firstItemId(rp.getOutputItemId()) : null;
+        Long itemId = outputItemId != null ? outputItemId : workOrder.getProductId();
             cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO item = itemService.validateItemExists(itemId);
             MesProTaskDO task = new MesProTaskDO()
                     .setWorkOrderId(workOrder.getId())
@@ -582,10 +594,12 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void pauseTask(MesProTaskPauseReqVO pauseReqVO) {
+        equipmentService.lock();
         // 1. 鏍¢獙浠诲姟瀛樺湪
         MesProTaskDO task = validateTaskExists(pauseReqVO.getId());
         // 2. 鏍¢獙鐘舵�佹槸鍚﹀厑璁稿仠宸ワ紙濡傚繀椤绘槸 鐢熶骇涓� 鎴� 閮ㄥ垎瀹屾垚锛�
-        if (!ObjectUtils.equalsAny(task.getStatus(), MesProTaskStatusEnum.PREPARE.getStatus())) {
+        if (!ObjectUtils.equalsAny(task.getStatus(), MesProTaskStatusEnum.PREPARE.getStatus(),
+                MesProTaskStatusEnum.PRODUCING.getStatus(), MesProTaskStatusEnum.PARTIAL_FINISHED.getStatus())) {
             throw exception(PRO_TASK_CANNOT_PAUSE);
         }
         
@@ -602,11 +616,13 @@
                 .setPauseTime(LocalDateTime.now())
                 .setPauseUserId(SecurityFrameworkUtils.getLoginUserId());
         taskPauseRecordMapper.insert(pauseRecord);
+        equipmentService.afterTaskStateChanged(List.of(task));
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void resumeTask(MesProTaskResumeReqVO resumeReqVO) {
+        equipmentService.lock();
         // 1. 鏍¢獙浠诲姟瀛樺湪
         MesProTaskDO task = validateTaskExists(resumeReqVO.getId());
         // 2. 鏍¢獙鐘舵�佸繀椤绘槸宸插仠宸�
@@ -615,8 +631,11 @@
         }
 
         // 3. 鎭㈠浠诲姟鐘舵��
-        Integer resumeStatus = MesProTaskStatusEnum.PREPARE.getStatus();
+        Integer resumeStatus = task.getProducedQuantity() != null && task.getProducedQuantity().signum() > 0
+                ? MesProTaskStatusEnum.PARTIAL_FINISHED.getStatus() : MesProTaskStatusEnum.PREPARE.getStatus();
         taskMapper.updateById(new MesProTaskDO().setId(task.getId()).setStatus(resumeStatus));
+        equipmentService.validateResume(task);
+        equipmentService.afterTaskStateChanged(List.of(task));
 
         // 4. 鏇存柊鏈�鏂扮殑涓�鏉″仠宸ヨ褰�
         MesProTaskPauseRecordDO pauseRecord = taskPauseRecordMapper.selectLastUnresumedByTaskId(task.getId());

--
Gitblit v1.9.3