From 5421b8af862890dcf187c2ad5ece55423959ba85 Mon Sep 17 00:00:00 2001
From: liu <2021943741@qq.com>
Date: 星期五, 23 十月 2026 19:27:14 +0800
Subject: [PATCH] feat(bpm): 全部业务审批流改回 BPM,审批统一进入协同办公

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskServiceImpl.java |   55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 55 insertions(+), 0 deletions(-)

diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskServiceImpl.java
index acb2bff..b99eb0f 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskServiceImpl.java
@@ -5,6 +5,9 @@
 import cn.hutool.core.util.StrUtil;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi;
+import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO;
+import cn.iocoder.yudao.module.bpm.enums.task.BpmTaskStatusEnum;
 import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.MesWmStockTakingTaskPageReqVO;
 import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.MesWmStockTakingTaskSaveReqVO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskDO;
@@ -62,8 +65,16 @@
      */
     private static final String STOCK_TAKING_RESULT_APPROVE_BIZ_TYPE = "stock_taking_result_approve";
 
+    /**
+     * 鐩樼偣缁撴灉瀹℃壒鐨� BPM 娴佺▼瀹氫箟 Key
+     */
+    private static final String STOCK_TAKING_RESULT_APPROVE_PROCESS_KEY = "stock_taking_result_approve";
+
     @Resource
     private MesWmStockTakingTaskMapper stockTakingTaskMapper;
+
+    @Resource
+    private BpmProcessInstanceApi bpmProcessInstanceApi;
 
     @Resource
     private MesWmMaterialStockService materialStockService;
@@ -219,6 +230,50 @@
 
         // 2. 璁板綍鎻愪氦鏃堕棿骞舵竻绌轰笂涓�杞鏍哥粨鏋滐紙浠诲姟淇濇寔鐩樼偣涓紝绛夊緟瀹℃牳锛�
         stockTakingTaskMapper.markResultApprovalSubmitted(id);
+        // 3. 鍒涘缓 BPM 娴佺▼瀹炰緥锛宐usinessKey 涓虹洏鐐逛换鍔$紪鍙凤紙瀹℃壒缁撴灉鍥炲啓鐨勫氨鏄浠诲姟锛�
+        bpmProcessInstanceApi.createProcessInstance(getLoginUserId(),
+                new BpmProcessInstanceCreateReqDTO()
+                        .setProcessDefinitionKey(STOCK_TAKING_RESULT_APPROVE_PROCESS_KEY)
+                        .setBusinessKey(String.valueOf(id)));
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void updateStockTakingResultAuditStatus(Long id, Integer bpmStatus, String reason) {
+        // 1. 鏍¢獙浠诲姟瀛樺湪
+        MesWmStockTakingTaskDO task = stockTakingTaskMapper.selectById(id);
+        if (task == null) {
+            log.warn("[updateStockTakingResultAuditStatus] 鐩樼偣浠诲姟({}) 涓嶅瓨鍦紝蹇界暐 BPM 缁撴灉({})", id, bpmStatus);
+            return;
+        }
+        // 2. 浠呭鐞嗐�岀洏鐐逛腑 + 缁撴灉瀹℃壒寰呭鏍搞�嶇殑浠诲姟锛岄伩鍏嶉噸澶� / 杩囨湡浜嬩欢瑕嗙洊浜哄伐瀹℃牳缁撴灉
+        if (!MesWmStockTakingTaskStatusEnum.APPROVING.getStatus().equals(task.getStatus())
+                || !isResultApprovalPending(task)) {
+            log.warn("[updateStockTakingResultAuditStatus] 鐩樼偣浠诲姟({}) 涓嶅浜庣粨鏋滃鎵逛腑锛屽拷鐣� BPM 缁撴灉({})", id, bpmStatus);
+            return;
+        }
+        if (BpmTaskStatusEnum.APPROVE.getStatus().equals(bpmStatus)) {
+            // 3.1 瀹℃壒閫氳繃锛氱疆涓哄凡瀹屾垚锛屽啀瑙e喕搴撳瓨骞舵牳閿�鐩樼偣宸紓锛堜笌 auditStockTakingResult 淇濇寔涓�鑷达級
+            if (stockTakingTaskMapper.updateAuditStatusByBpm(id,
+                    MesWmStockTakingTaskStatusEnum.FINISHED.getStatus(), reason) != 1) {
+                log.warn("[updateStockTakingResultAuditStatus] 鐩樼偣浠诲姟({}) 鐘舵�佸洖鍐欏け璐ワ紝蹇界暐 BPM 缁撴灉({})", id, bpmStatus);
+                return;
+            }
+            if (Boolean.TRUE.equals(task.getFrozen())) {
+                updateMaterialStockFrozen(stockTakingTaskLineService.getStockTakingTaskLineListByTaskId(id), false);
+            }
+            doProcessStockTakingDifference(task);
+            return;
+        }
+        if (BpmTaskStatusEnum.REJECT.getStatus().equals(bpmStatus)
+                || BpmTaskStatusEnum.CANCEL.getStatus().equals(bpmStatus)) {
+            // 3.2 瀹℃壒涓嶉�氳繃 / 娴佺▼鎾ら攢锛氫换鍔′繚鎸佺洏鐐逛腑锛屾竻绌烘彁浜ゆ爣璁颁互渚块噸鏂版彁浜ょ粨鏋滃鎵�
+            if (stockTakingTaskMapper.resetResultApprovalByBpm(id, reason) != 1) {
+                log.warn("[updateStockTakingResultAuditStatus] 鐩樼偣浠诲姟({}) 鐘舵�佸洖鍐欏け璐ワ紝蹇界暐 BPM 缁撴灉({})", id, bpmStatus);
+            }
+            return;
+        }
+        log.warn("[updateStockTakingResultAuditStatus] 蹇界暐涓嶆敮鎸佺殑 BPM 鐘舵��({})锛宼askId={}", bpmStatus, id);
     }
 
     @Override

--
Gitblit v1.9.3