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/mps/MesProMpsServiceImpl.java |   37 +++++++++++++++++++++++++++++++++++++
 1 files changed, 37 insertions(+), 0 deletions(-)

diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/mps/MesProMpsServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/mps/MesProMpsServiceImpl.java
index 2ddacaf..a707cf5 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/mps/MesProMpsServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/mps/MesProMpsServiceImpl.java
@@ -365,6 +365,40 @@
         return mpsMapper.selectOne(MesProMpsDO::getWorkOrderId, workOrderId);
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean checkAndFinishMps(Long mpsId) {
+        if (mpsId == null) {
+            log.warn("[checkAndFinishMps] mpsId is null");
+            return false;
+        }
+        MesProMpsDO mps = mpsMapper.selectById(mpsId);
+        if (mps == null) {
+            log.warn("[checkAndFinishMps] MPS not found, mpsId={}", mpsId);
+            return false;
+        }
+        // 宸插畬鎴愭垨宸插彇娑堬紝鐩存帴杩斿洖 true
+        if (MesProMpsStatusEnum.FINISHED.getStatus().equals(mps.getStatus())
+                || MesProMpsStatusEnum.CANCELED.getStatus().equals(mps.getStatus())) {
+            log.info("[checkAndFinishMps] MPS {} already finished or canceled, status={}", mpsId, mps.getStatus());
+            return true;
+        }
+        // 妫�鏌ユ槸鍚︽弧瓒冲畬鎴愭潯浠�
+        boolean finished = isMpsFinished(mps);
+        log.info("[checkAndFinishMps] MPS {} check result: {}, quantity={}, produced={}, workOrderId={}",
+                mpsId, finished, mps.getQuantity(), mps.getQuantityProduced(), mps.getWorkOrderId());
+        if (finished) {
+            // 鑷姩瀹屾垚 MPS
+            mpsMapper.updateById(new MesProMpsDO()
+                    .setId(mpsId)
+                    .setStatus(MesProMpsStatusEnum.FINISHED.getStatus())
+                    .setFinishDate(LocalDateTime.now()));
+            log.info("[checkAndFinishMps] MPS {} auto finished", mpsId);
+            return true;
+        }
+        return false;
+    }
+
     /**
      * 鍒ゆ柇鍗曚釜 MPS 鏄惁瀹屾垚
      */
@@ -372,6 +406,8 @@
         // 1. 宸茬敓浜ф暟閲� >= 璁″垝鏁伴噺
         BigDecimal quantityProduced = ObjUtil.defaultIfNull(mps.getQuantityProduced(), BigDecimal.ZERO);
         if (quantityProduced.compareTo(mps.getQuantity()) < 0) {
+            log.debug("[isMpsFinished] MPS {} quantity not enough: produced={}, required={}",
+                    mps.getId(), quantityProduced, mps.getQuantity());
             return false;
         }
         // 2. 妫�鏌ュ伐鍗曚笅鎵�鏈夋姤宸ユ槸鍚﹀畬鎴愶紙纭繚璐ㄦ瀹屾垚锛�
@@ -380,6 +416,7 @@
                     new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<MesProFeedbackDO>()
                             .eq(MesProFeedbackDO::getWorkOrderId, mps.getWorkOrderId())
                             .ne(MesProFeedbackDO::getStatus, MesProFeedbackStatusEnum.FINISHED.getStatus()));
+            log.debug("[isMpsFinished] MPS {} unfinished feedback count: {}", mps.getId(), unfinishedCount);
             if (unfinishedCount > 0) {
                 return false;
             }

--
Gitblit v1.9.3