From 06ac6cc6f4693a8abc585e69139131fe19274fd1 Mon Sep 17 00:00:00 2001
From: liu <2021943741@qq.com>
Date: 星期四, 27 八月 2026 14:30:26 +0800
Subject: [PATCH] feat(erp): 销售订单审批接入协同办公(BPM)

---
 yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/listener/ErpSaleOrderStatusListener.java |  128 +++---------------------------------------
 1 files changed, 11 insertions(+), 117 deletions(-)

diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/listener/ErpSaleOrderStatusListener.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/listener/ErpSaleOrderStatusListener.java
index f068d75..6174d5a 100644
--- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/listener/ErpSaleOrderStatusListener.java
+++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/listener/ErpSaleOrderStatusListener.java
@@ -1,36 +1,22 @@
 package cn.iocoder.yudao.module.erp.service.sale.listener;
 
-import cn.hutool.core.collection.CollUtil;
 import cn.iocoder.yudao.module.bpm.api.event.BpmProcessInstanceStatusEvent;
-import cn.iocoder.yudao.module.bpm.enums.task.BpmTaskStatusEnum;
-import cn.iocoder.yudao.module.erp.dal.dataobject.sale.ErpSaleOrderDO;
-import cn.iocoder.yudao.module.erp.dal.dataobject.sale.ErpSaleOrderItemDO;
-import cn.iocoder.yudao.module.erp.dal.mysql.sale.ErpSaleOrderItemMapper;
-import cn.iocoder.yudao.module.erp.dal.mysql.sale.ErpSaleOrderMapper;
-import cn.iocoder.yudao.module.erp.enums.ErpAuditStatus;
-import cn.iocoder.yudao.module.mdm.api.item.MdmItemApi;
-import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO;
-import cn.iocoder.yudao.module.mes.api.mps.MesProMpsApi;
-import cn.iocoder.yudao.module.mes.api.mps.dto.MesProMpsCreateReqDTO;
+import cn.iocoder.yudao.module.bpm.api.event.BpmProcessInstanceStatusEventListener;
+import cn.iocoder.yudao.module.erp.service.sale.ErpSaleOrderService;
 import jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 
-import java.math.BigDecimal;
-import java.time.LocalDateTime;
-import java.time.format.DateTimeFormatter;
-import java.util.List;
-
 /**
  * 閿�鍞鍗曞鎵圭姸鎬佺洃鍚櫒
  *
- * 鐩戝惉 BPM 娴佺▼瀹炰緥鐘舵�佸彉鏇翠簨浠讹紝瀹℃牳閫氳繃鏃惰嚜鍔ㄥ垱寤� MPS
+ * 鐩戝惉 BPM 娴佺▼瀹炰緥鐘舵�佸彉鏇翠簨浠讹紝鏇存柊閿�鍞鍗曠殑瀹℃壒鐘舵�侊紙鍗忓悓鍔炲叕瀹℃壒鍚庡洖鍐欙級
  *
- * @author 鑺嬮亾婧愮爜
+ * @author 瓒呯骇绠$悊鍛�
  */
 @Component
 @Slf4j
-public class ErpSaleOrderStatusListener extends cn.iocoder.yudao.module.bpm.api.event.BpmProcessInstanceStatusEventListener {
+public class ErpSaleOrderStatusListener extends BpmProcessInstanceStatusEventListener {
 
     /**
      * 閿�鍞鍗曞鎵规祦绋嬪畾涔� Key
@@ -38,13 +24,7 @@
     private static final String PROCESS_DEFINITION_KEY = "sale_order_approve";
 
     @Resource
-    private ErpSaleOrderMapper saleOrderMapper;
-    @Resource
-    private ErpSaleOrderItemMapper saleOrderItemMapper;
-    @Resource
-    private MesProMpsApi mpsApi;
-    @Resource
-    private MdmItemApi mdmItemApi;
+    private ErpSaleOrderService saleOrderService;
 
     @Override
     protected String getProcessDefinitionKey() {
@@ -61,100 +41,14 @@
             return;
         }
 
-        log.info("[onEvent] 鏀跺埌 BPM 瀹℃壒浜嬩欢锛宱rderId={}, status={}", orderId, event.getStatus());
-
-        // 鍙湁瀹℃壒閫氳繃鎵嶅垱寤� MPS
-        if (!BpmTaskStatusEnum.APPROVE.getStatus().equals(event.getStatus())) {
-            return;
-        }
+        log.info("[onEvent] 鏀跺埌BPM瀹℃壒浜嬩欢锛宱rderId={}, status={}", orderId, event.getStatus());
 
         try {
-            // 1. 鑾峰彇閿�鍞鍗�
-            ErpSaleOrderDO saleOrder = saleOrderMapper.selectById(orderId);
-            if (saleOrder == null) {
-                log.warn("[onEvent] 閿�鍞鍗曚笉瀛樺湪锛宱rderId={}", orderId);
-                return;
-            }
-
-            // 2. 鑾峰彇閿�鍞鍗曟槑缁�
-            List<ErpSaleOrderItemDO> items = saleOrderItemMapper.selectListByOrderId(orderId);
-            if (CollUtil.isEmpty(items)) {
-                log.info("[onEvent] 閿�鍞鍗�({}) 娌℃湁鏄庣粏锛屾棤闇�鍒涘缓 MPS", orderId);
-                return;
-            }
-
-            // 3. 鏇存柊璁㈠崟鐘舵�佷负宸插鏍�
-            saleOrderMapper.updateById(new ErpSaleOrderDO()
-                    .setId(orderId)
-                    .setStatus(ErpAuditStatus.APPROVE.getStatus()));
-
-            // 4. 閬嶅巻鏄庣粏锛屼负闇�瑕佺敓浜х殑鏄庣粏鍒涘缓 MPS
-            int mpsCount = 0;
-            for (ErpSaleOrderItemDO item : items) {
-                if (item.getNeedProduction() == null || item.getNeedProduction() != 1) {
-                    continue;
-                }
-                try {
-                    Long mpsId = createMpsForSaleOrderItem(saleOrder, item);
-                    if (mpsId != null) {
-                        mpsCount++;
-                        // 鏇存柊閿�鍞鍗曟槑缁嗙殑 MPS 鍏宠仈
-                        saleOrderItemMapper.updateById(new ErpSaleOrderItemDO()
-                                .setId(item.getId())
-                                .setMpsId(mpsId));
-                    }
-                } catch (Exception e) {
-                    log.error("[onEvent] 鍒涘缓 MPS 澶辫触锛宻aleOrderItemId={}", item.getId(), e);
-                }
-            }
-
-            log.info("[onEvent] 閿�鍞鍗�({}) 瀹℃壒瀹屾垚锛屽垱寤� MPS {} 鏉�", orderId, mpsCount);
+            saleOrderService.updateSaleOrderAuditStatus(orderId, event.getStatus());
+            log.info("[onEvent] 閿�鍞鍗�({}) 瀹℃壒鐘舵�佹洿鏂板畬鎴�", orderId);
         } catch (Exception e) {
-            log.error("[onEvent] 澶勭悊閿�鍞鍗曞鎵逛簨浠跺け璐ワ紝orderId={}", orderId, e);
+            log.error("[onEvent] 鏇存柊閿�鍞鍗曞鎵圭姸鎬佸け璐ワ紝orderId={}", orderId, e);
         }
     }
 
-    /**
-     * 涓洪攢鍞鍗曟槑缁嗗垱寤� MPS
-     *
-     * 娉ㄦ剰锛氶攢鍞鍗曟槑缁嗙殑 productId 鏄� MDM 鐗╂枡 ID锛岄渶瑕佹槧灏勫埌 MES 浜у搧
-     */
-    private Long createMpsForSaleOrderItem(ErpSaleOrderDO saleOrder, ErpSaleOrderItemDO item) {
-        // 鑾峰彇 MDM 鐗╂枡淇℃伅锛堢敤浜庤幏鍙栦骇鍝佸悕绉帮級
-        String productName = null;
-        try {
-            MdmItemRespDTO mdmItem = mdmItemApi.getItem(item.getProductId()).getCheckedData();
-            if (mdmItem != null) {
-                productName = mdmItem.getName();
-            }
-        } catch (Exception e) {
-            log.warn("[createMpsForSaleOrderItem] 鑾峰彇 MDM 鐗╂枡淇℃伅澶辫触锛宲roductId={}", item.getProductId(), e);
-        }
-
-        MesProMpsCreateReqDTO createReqDTO = new MesProMpsCreateReqDTO();
-        createReqDTO.setSaleOrderId(saleOrder.getId());
-        createReqDTO.setSaleOrderNo(saleOrder.getNo());
-        createReqDTO.setSaleOrderItemId(item.getId());
-        createReqDTO.setMdmItemId(item.getProductId()); // 閿�鍞鍗曟槑缁嗙殑 productId 鏄� MDM 鐗╂枡 ID
-        createReqDTO.setProductName(productName); // 浜у搧鍚嶇О鐢ㄤ簬閿欒鎻愮ず
-        createReqDTO.setQuantity(item.getCount());
-        createReqDTO.setClientId(saleOrder.getCustomerId());
-        createReqDTO.setRequestDate(formatRequestDate(saleOrder.getOrderTime()));
-        createReqDTO.setRemark("鑷姩鐢熸垚锛屾潵鑷攢鍞鍗曪細" + saleOrder.getNo());
-
-        Long mpsId = mpsApi.createMps(createReqDTO);
-        log.info("[createMpsForSaleOrderItem] MPS 鍒涘缓鎴愬姛锛宮psId={}, saleOrderItemId={}", mpsId, item.getId());
-        return mpsId;
-    }
-
-    /**
-     * 鏍煎紡鍖栭渶姹傛棩鏈�
-     */
-    private String formatRequestDate(LocalDateTime dateTime) {
-        if (dateTime == null) {
-            return null;
-        }
-        return dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
-    }
-
-}
\ No newline at end of file
+}

--
Gitblit v1.9.3