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-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchasePlanServiceImpl.java |   43 +++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 43 insertions(+), 0 deletions(-)

diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchasePlanServiceImpl.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchasePlanServiceImpl.java
index d5d1a06..48889a0 100644
--- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchasePlanServiceImpl.java
+++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchasePlanServiceImpl.java
@@ -5,6 +5,8 @@
 import cn.iocoder.yudao.framework.common.exception.ServiceException;
 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.erp.controller.admin.purchase.vo.plan.ErpPurchasePlanImportExcelVO;
 import cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.plan.ErpPurchasePlanImportReqVO;
@@ -66,6 +68,11 @@
     private static final String PURCHASE_PLAN_APPROVE_BIZ_TYPE = "purchase_plan_approve";
 
     /**
+     * 閲囪喘璁″垝瀹℃壒鐨� BPM 娴佺▼瀹氫箟 Key
+     */
+    private static final String PURCHASE_PLAN_PROCESS_KEY = "purchase_plan_approve";
+
+    /**
      * 闇�姹傛潵婧愶細搴撳瓨棰勮
      */
     public static final Integer DEMAND_SOURCE_STOCK_ALERT = 1;
@@ -89,6 +96,9 @@
 
     @Resource
     private ApprovalConfigApi approvalConfigApi;
+
+    @Resource
+    private BpmProcessInstanceApi bpmProcessInstanceApi;
 
     @Resource
     private AdminUserApi adminUserApi;
@@ -219,6 +229,11 @@
         if (purchasePlanMapper.submitAndResetAuditInfo(id, ErpPurchasePlanStatusEnum.PROCESS.getStatus()) != 1) {
             throw exception(PURCHASE_PLAN_SUBMIT_FAIL_NOT_ALLOWED);
         }
+        // 5. 鍒涘缓 BPM 娴佺▼瀹炰緥锛屼娇瀹℃壒鍑虹幇鍦ㄣ�屽崗鍚屽姙鍏� - 鎴戠殑娴佺▼銆�
+        bpmProcessInstanceApi.createProcessInstance(getLoginUserId(),
+                new BpmProcessInstanceCreateReqDTO()
+                        .setProcessDefinitionKey(PURCHASE_PLAN_PROCESS_KEY)
+                        .setBusinessKey(String.valueOf(id)));
     }
 
     @Override
@@ -308,6 +323,34 @@
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void updatePurchasePlanAuditStatus(Long id, Integer bpmStatus, String reason) {
+        // 1. BPM 瀹℃壒缁撴灉鏄犲皠涓洪噰璐鍒掔姸鎬侊細閫氳繃=20 / 涓嶉�氳繃=30 / 鍙栨秷=40
+        Integer newStatus = convertBpmResultToStatus(bpmStatus);
+        if (newStatus == null) {
+            return;
+        }
+        // 2. 浠呭綋浠嶅浜庛�屽鎵逛腑銆嶆椂鍥炲啓锛岄伩鍏嶉噸澶嶈鐩�
+        if (purchasePlanMapper.updateAuditStatusByBpm(id, newStatus, reason) != 1) {
+            log.warn("[updatePurchasePlanAuditStatus] 閲囪喘璁″垝({}) 涓嶅浜庡鎵逛腑鐘舵�侊紝蹇界暐 BPM 缁撴灉({})", id, bpmStatus);
+            return;
+        }
+        // 3. 瀹℃壒閫氳繃涓旀湭鐢熸垚鐢宠锛岃嚜鍔ㄧ敓鎴愰噰璐敵璇�
+        if (ErpPurchasePlanStatusEnum.APPROVE.getStatus().equals(newStatus)) {
+            ErpPurchasePlanDO plan = purchasePlanMapper.selectById(id);
+            if (plan != null && !Boolean.TRUE.equals(plan.getGeneratedFlag())) {
+                try {
+                    List<Long> requestIds = doGeneratePurchaseRequests(plan);
+                    log.info("[updatePurchasePlanAuditStatus] 閲囪喘璁″垝({}) 鑷姩鐢熸垚閲囪喘鐢宠({})", id, requestIds);
+                } catch (Exception e) {
+                    log.error("[updatePurchasePlanAuditStatus] 閲囪喘璁″垝({}) 鑷姩鐢熸垚閲囪喘鐢宠澶辫触", id, e);
+                    // 涓嶆姏鍑哄紓甯革紝閬垮厤褰卞搷鐘舵�佹洿鏂�
+                }
+            }
+        }
+    }
+
+    @Override
     public List<ErpPurchasePlanRespVO.Item> getStockAlertSuggestItems() {
         // 1. 鑾峰彇鍚敤鐨勭墿鏂欏熀纭�鏁版嵁锛堝寘鍚粯璁や粨搴撱�佸畨鍏�/鏈�浣�/鏈�楂樺簱瀛橈級
         List<MdmItemRespDTO> items = mdmItemApi.getItemListByStatus(0).getCheckedData();

--
Gitblit v1.9.3