From 06c312e584b99df613728d5ea8b32df4e156f3cc Mon Sep 17 00:00:00 2001
From: liu <2021943741@qq.com>
Date: 星期一, 07 九月 2026 17:40:09 +0800
Subject: [PATCH] feat(mes): 采购退货关联采购订单后自动带入物料并锁定选料
---
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnvendor/MesWmReturnVendorServiceImpl.java | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 55 insertions(+), 4 deletions(-)
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnvendor/MesWmReturnVendorServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnvendor/MesWmReturnVendorServiceImpl.java
index ae6d530..18296c8 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnvendor/MesWmReturnVendorServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnvendor/MesWmReturnVendorServiceImpl.java
@@ -2,6 +2,7 @@
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjUtil;
+import cn.iocoder.yudao.framework.common.exception.ServiceException;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
@@ -69,20 +70,36 @@
MesWmReturnVendorDO returnVendor = BeanUtils.toBean(createReqVO, MesWmReturnVendorDO.class);
returnVendor.setStatus(MesWmReturnVendorStatusEnum.PREPARE.getStatus());
returnVendorMapper.insert(returnVendor);
+
+ // 2.1. 鍏宠仈浜嗛噰璐鍗曪細鑷姩鎶婅鍗曠墿鏂欏甫鍏ラ��璐ц锛堟棤鍙��鐗╂枡鏃堕潤榛橈紝涓嶅奖鍝嶅崟鎹垱寤猴級
+ if (returnVendor.getPurchaseOrderId() != null) {
+ autoImportLinesFromLinkedOrder(returnVendor.getId(), false);
+ }
return returnVendor.getId();
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateReturnVendor(MesWmReturnVendorSaveReqVO updateReqVO) {
- // 1. 鏍¢獙鏁版嵁
- validateReturnVendorSaveData(updateReqVO);
+ // 1. 鏍¢獙鏁版嵁锛堝惈瀛樺湪 + 鑽夌鐘舵�侊級
+ MesWmReturnVendorDO oldReturnVendor = validateReturnVendorSaveData(updateReqVO);
// 1.1. 鑻ラ噰璐鍗曞彿涓虹┖浣嗗叧鑱斾簡閲囪喘璁㈠崟锛屽垯浠� ERP 閲囪喘璁㈠崟琛ラ綈璁㈠崟鍙�
fillPurchaseOrderCode(updateReqVO);
+
+ Long oldPurchaseOrderId = oldReturnVendor != null ? oldReturnVendor.getPurchaseOrderId() : null;
+ Long newPurchaseOrderId = updateReqVO.getPurchaseOrderId();
+ boolean purchaseOrderChanged = !ObjUtil.equal(oldPurchaseOrderId, newPurchaseOrderId);
// 2. 鏇存柊涓昏〃
MesWmReturnVendorDO updateObj = BeanUtils.toBean(updateReqVO, MesWmReturnVendorDO.class);
returnVendorMapper.updateById(updateObj);
+
+ // 3. 鍏宠仈浜嗛噰璐鍗曪細鑷姩鍚屾鐗╂枡琛岋紝淇濊瘉琛岀墿鏂欎笌璇ラ噰璐鍗曚竴鑷�
+ // 3.1 鏇存崲浜嗛噰璐鍗� 鈫� 鍏堟竻绌烘棫璁㈠崟甯﹀叆鐨勮锛屽啀鎸夋柊璁㈠崟閲嶆柊甯﹀叆
+ // 3.2 閲囪喘璁㈠崟鏈彉浣嗗綋鍓嶆棤琛� 鈫� 鍏滃簳鑷姩甯﹀叆锛堝巻鍙叉暟鎹垨甯︽枡琚腑鏂殑鍦烘櫙锛�
+ if (newPurchaseOrderId != null) {
+ autoImportLinesFromLinkedOrder(updateReqVO.getId(), purchaseOrderChanged);
+ }
}
/**
@@ -239,16 +256,50 @@
/**
* 鏍¢獙閫�璐у崟鍒涘缓/淇敼鐨勫叕鍏辨暟鎹�
+ *
+ * @return 淇敼鏃惰繑鍥炴棫鍗曟嵁锛堢敤浜庢瘮杈冮噰璐鍗曟槸鍚﹀彉鏇达級锛涘垱寤烘椂杩斿洖 null
*/
- private void validateReturnVendorSaveData(MesWmReturnVendorSaveReqVO reqVO) {
+ private MesWmReturnVendorDO validateReturnVendorSaveData(MesWmReturnVendorSaveReqVO reqVO) {
// 鏍¢獙瀛樺湪 + 鑽夌鐘舵�侊紙浠呬慨鏀规椂锛�
+ MesWmReturnVendorDO oldReturnVendor = null;
if (reqVO.getId() != null) {
- validateReturnVendorExistsAndPrepare(reqVO.getId());
+ oldReturnVendor = validateReturnVendorExistsAndPrepare(reqVO.getId());
}
// 鏍¢獙渚涘簲鍟嗗瓨鍦�
srmSupplierApi.getSupplier(reqVO.getVendorId());
// 鏍¢獙缂栫爜鍞竴
validateCodeUnique(reqVO.getId(), reqVO.getCode());
+ return oldReturnVendor;
+ }
+
+ /**
+ * 鎶婂叧鑱旈噰璐鍗曠殑鐗╂枡鑷姩甯﹀叆閫�璐у崟琛岋紙浠呰崏绋跨姸鎬佷笖宸插叧鑱旈噰璐鍗曟椂鐢熸晥锛夈��
+ *
+ * @param id 閫�璐у崟缂栧彿
+ * @param clearFirst 鏄惁鍏堟竻绌哄凡鏈夎鍐嶅甫鍏ワ紱鏇存崲閲囪喘璁㈠崟鏃朵紶 true
+ */
+ private void autoImportLinesFromLinkedOrder(Long id, boolean clearFirst) {
+ MesWmReturnVendorDO returnVendor = returnVendorMapper.selectById(id);
+ if (returnVendor == null || returnVendor.getPurchaseOrderId() == null) {
+ return;
+ }
+ List<MesWmReturnVendorLineDO> existingLines =
+ returnVendorLineService.getReturnVendorLineListByReturnId(id);
+ if (clearFirst) {
+ if (CollUtil.isNotEmpty(existingLines)) {
+ // 绾ц仈鍒犻櫎鏃ф槑缁嗕笌琛�
+ returnVendorDetailService.deleteReturnVendorDetailByReturnId(id);
+ returnVendorLineService.deleteReturnVendorLineByReturnId(id);
+ }
+ } else if (CollUtil.isNotEmpty(existingLines)) {
+ // 宸叉湁琛屼笖鏈洿鎹㈤噰璐鍗曪細涓嶉噸澶嶅甫鍏ワ紝閬垮厤瑕嗙洊鐢ㄦ埛宸茶皟鏁寸殑鏁伴噺
+ return;
+ }
+ try {
+ importPurchaseOrderItems(id);
+ } catch (ServiceException ignore) {
+ // 閲囪喘璁㈠崟鏃犳槑缁� / 鏃犲彲閫�鐗╂枡绛変笟鍔″紓甯革細鍗曟嵁涓讳綋浠嶆甯镐繚瀛橈紝鍙湪鐗╂枡鍖哄彟琛屽鐞�
+ }
}
/**
--
Gitblit v1.9.3