From 14c80fbd16a51a355138345ecf69df9ca37746bf Mon Sep 17 00:00:00 2001
From: xiaoyi <908147524@qq.com>
Date: 星期五, 06 十一月 2026 09:18:32 +0800
Subject: [PATCH] 完善售后退货联动和订单作废保护
---
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/salesnotice/MesWmSalesNoticeServiceImpl.java | 30 +++++++++++++++++++++++-------
1 files changed, 23 insertions(+), 7 deletions(-)
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/salesnotice/MesWmSalesNoticeServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/salesnotice/MesWmSalesNoticeServiceImpl.java
index 0c03975..1314265 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/salesnotice/MesWmSalesNoticeServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/salesnotice/MesWmSalesNoticeServiceImpl.java
@@ -66,7 +66,9 @@
private MesWmSalesNoticeLineMapper salesNoticeLineMapper;
@Override
+ @Transactional(rollbackFor = Exception.class)
public Long createSalesNotice(MesWmSalesNoticeSaveReqVO createReqVO) {
+ lockReferencedSaleOrder(createReqVO, null);
// 鏍¢獙鏁版嵁
validateSalesNoticeSave(createReqVO);
@@ -78,9 +80,11 @@
}
@Override
+ @Transactional(rollbackFor = Exception.class)
public void updateSalesNotice(MesWmSalesNoticeSaveReqVO updateReqVO) {
// 鏍¢獙瀛樺湪 + 鑽夌鐘舵��
- validateSalesNoticeExistsAndDraft(updateReqVO.getId());
+ MesWmSalesNoticeDO existing = validateSalesNoticeExistsAndDraft(updateReqVO.getId());
+ lockReferencedSaleOrder(updateReqVO, existing);
// 鏍¢獙鏁版嵁
validateSalesNoticeSave(updateReqVO);
@@ -170,6 +174,21 @@
}
}
+ /** 涓庤鍗曚綔搴熶娇鐢ㄥ悓涓�璁㈠崟琛岄攣锛涙敮鎸佸巻鍙茶姹備粎浼犺鍗曞彿銆� */
+ private void lockReferencedSaleOrder(MesWmSalesNoticeSaveReqVO request, MesWmSalesNoticeDO existing) {
+ Long orderId = request.getSaleOrderId();
+ String orderNo = request.getSaleOrderCode();
+ if (orderId == null && (orderNo == null || orderNo.isBlank()) && existing != null) {
+ orderId = existing.getSaleOrderId();
+ orderNo = existing.getSaleOrderCode();
+ }
+ if (orderId == null && (orderNo == null || orderNo.isBlank())) return;
+ ErpSaleOrderRespDTO order = saleOrderApi.lockSaleOrderForNotice(orderId, orderNo).getCheckedData();
+ if (order == null) throw exception(WM_SALES_NOTICE_SALE_ORDER_NOT_EXISTS);
+ request.setSaleOrderId(order.getId());
+ request.setSaleOrderCode(order.getNo());
+ }
+
private void validateNoticeCodeUnique(Long id, String code) {
MesWmSalesNoticeDO notice = salesNoticeMapper.selectByCode(code);
if (notice == null) {
@@ -183,16 +202,13 @@
@Override
@Transactional(rollbackFor = Exception.class)
public Long generateSalesNoticeFromSaleOrder(Long saleOrderId) {
+ // 鍏堥攣瀹氳鍗曪紝鍐嶆鏌ラ�氱煡锛涗笌璁㈠崟浣滃簾涓茶鎵ц銆�
+ ErpSaleOrderRespDTO saleOrder = saleOrderApi.lockSaleOrderForNotice(saleOrderId, null).getCheckedData();
+ if (saleOrder == null) throw exception(WM_SALES_NOTICE_SALE_ORDER_NOT_EXISTS);
// 1. 鏍¢獙鏄惁宸茬敓鎴愯繃鍙戣揣閫氱煡鍗曪紙闃叉閲嶅鐢熸垚锛�
MesWmSalesNoticeDO existNotice = salesNoticeMapper.selectBySaleOrderId(saleOrderId);
if (existNotice != null) {
throw exception(WM_SALES_NOTICE_ALREADY_EXISTS);
- }
-
- // 2. 鑾峰彇閿�鍞鍗曚俊鎭�
- ErpSaleOrderRespDTO saleOrder = saleOrderApi.getSaleOrder(saleOrderId).getCheckedData();
- if (saleOrder == null) {
- throw exception(WM_SALES_NOTICE_SALE_ORDER_NOT_EXISTS);
}
// 3. 鑾峰彇閿�鍞鍗曟槑缁�
--
Gitblit v1.9.3