From fc1288355802c1b8e69fe08f544df675fb807572 Mon Sep 17 00:00:00 2001
From: liu <2021943741@qq.com>
Date: 星期六, 24 十月 2026 20:31:20 +0800
Subject: [PATCH] fix(erp): 修复销售订单审批未生成MPS
---
yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleOrderServiceImpl.java | 64 +++++++++++++-------------------
1 files changed, 26 insertions(+), 38 deletions(-)
diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleOrderServiceImpl.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleOrderServiceImpl.java
index 608d16a..a0f4ca6 100644
--- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleOrderServiceImpl.java
+++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleOrderServiceImpl.java
@@ -31,17 +31,14 @@
import cn.iocoder.yudao.module.mdm.api.unit.dto.MdmUnitMeasureRespDTO;
import cn.iocoder.yudao.module.mes.api.mps.MesProMpsApi;
import cn.iocoder.yudao.module.mes.api.mps.dto.MesProMpsCreateReqDTO;
+import cn.iocoder.yudao.module.mes.api.mps.dto.MesProMpsRespDTO;
import cn.iocoder.yudao.module.system.api.storage.StorageAttachmentApi;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
-import jakarta.annotation.PostConstruct;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
-import org.springframework.transaction.PlatformTransactionManager;
-import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.annotation.Transactional;
-import org.springframework.transaction.support.TransactionTemplate;
import org.springframework.validation.annotation.Validated;
import java.math.BigDecimal;
@@ -67,6 +64,8 @@
@Validated
@Slf4j
public class ErpSaleOrderServiceImpl implements ErpSaleOrderService {
+
+ private static final Integer MPS_STATUS_CANCELED = 3;
@Resource
private ErpSaleOrderMapper saleOrderMapper;
@@ -94,22 +93,6 @@
private ErpAccountMapper accountMapper;
@Resource
private MesProMpsApi mpsApi;
-
- @Resource
- private PlatformTransactionManager transactionManager;
-
- /**
- * MPS 鍒涘缓浣跨敤鐙珛浜嬪姟锛圧EQUIRES_NEW锛夛細
- * 瀹℃牳鏃惰嚜鍔ㄥ垱寤� MPS 灞炰簬灏藉姏鑰屼负鐨勮仈鍔紝澶辫触浠呰褰曟棩蹇楀苟鍥炴粴鑷韩锛�
- * 涓嶈兘姹℃煋閿�鍞鍗曞鏍镐簨鍔★紙鍚﹀垯鍐呭眰寮傚父浼氭妸澶栧眰浜嬪姟鏍囪涓� rollback-only锛屽鑷存暣涓鏍歌鍥炴粴锛�
- */
- private TransactionTemplate mpsTransactionTemplate;
-
- @PostConstruct
- public void initMpsTransactionTemplate() {
- mpsTransactionTemplate = new TransactionTemplate(transactionManager);
- mpsTransactionTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
- }
@Resource
private StorageAttachmentApi storageAttachmentApi;
@@ -237,31 +220,36 @@
return;
}
- int mpsCount = 0;
+ int createdCount = 0;
+ int reusedCount = 0;
for (ErpSaleOrderItemDO item : items) {
if (item.getNeedProduction() == null || item.getNeedProduction() != 1) {
continue;
}
- try {
- // 鐙珛浜嬪姟鍒涘缓 MPS锛氬け璐ュ彧鍥炴粴 MPS 鑷韩锛屼笉褰卞搷瀹℃牳浜嬪姟
- Long mpsId = mpsTransactionTemplate.execute(txStatus -> {
- Long newMpsId = createMpsForSaleOrderItem(saleOrder, item);
- if (newMpsId != null) {
- // 鏇存柊閿�鍞鍗曟槑缁嗙殑 MPS 鍏宠仈
- saleOrderItemMapper.updateById(new ErpSaleOrderItemDO()
- .setId(item.getId())
- .setMpsId(newMpsId));
- }
- return newMpsId;
- });
- if (mpsId != null) {
- mpsCount++;
+
+ // 鍚屼竴閿�鍞槑缁嗗彧淇濈暀涓�鏉℃湁鏁� MPS锛岄伩鍏嶅弽瀹℃牳鍚庡啀娆″鏍镐骇鐢熼噸澶嶈鍒�
+ MesProMpsRespDTO existingMps = mpsApi.getMpsBySaleOrderItemId(item.getId());
+ if (existingMps != null && ObjectUtil.notEqual(existingMps.getStatus(), MPS_STATUS_CANCELED)) {
+ if (ObjectUtil.notEqual(item.getMpsId(), existingMps.getId())) {
+ saleOrderItemMapper.updateById(new ErpSaleOrderItemDO()
+ .setId(item.getId())
+ .setMpsId(existingMps.getId()));
}
- } catch (Exception e) {
- log.error("[createMpsForSaleOrder] 鍒涘缓 MPS 澶辫触锛宻aleOrderItemId={}", item.getId(), e);
+ reusedCount++;
+ log.info("[createMpsForSaleOrder] 閿�鍞鍗曟槑缁�({}) 宸插瓨鍦ㄦ湁鏁� MPS({})锛岃烦杩囬噸澶嶅垱寤�",
+ item.getId(), existingMps.getId());
+ continue;
}
+
+ // 涓庨攢鍞鍗曞鏍稿叡鐢ㄤ簨鍔★紱浠讳竴鏄庣粏鍒涘缓澶辫触閮戒細鍥炴粴瀹℃牳鐘舵�佸拰鏈宸插垱寤虹殑 MPS
+ Long mpsId = createMpsForSaleOrderItem(saleOrder, item);
+ saleOrderItemMapper.updateById(new ErpSaleOrderItemDO()
+ .setId(item.getId())
+ .setMpsId(mpsId));
+ createdCount++;
}
- log.info("[createMpsForSaleOrder] 閿�鍞鍗�({}) 瀹℃牳瀹屾垚锛屽垱寤� MPS {} 鏉�", orderId, mpsCount);
+ log.info("[createMpsForSaleOrder] 閿�鍞鍗�({}) 瀹℃牳瀹屾垚锛屽垱寤� MPS {} 鏉★紝澶嶇敤 MPS {} 鏉�",
+ orderId, createdCount, reusedCount);
}
/**
--
Gitblit v1.9.3