From 8c65f898ed6e5b0c7a94c792c4562f6ec831dccd Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期六, 07 十一月 2026 08:50:53 +0800
Subject: [PATCH] feat: 完善质检、生产、销售、财务与人事模块并接入审批流程
---
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnvendor/MesWmReturnVendorLineServiceImpl.java | 38 ++++++++++++++++++++++++++++++++++++++
1 files changed, 38 insertions(+), 0 deletions(-)
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnvendor/MesWmReturnVendorLineServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnvendor/MesWmReturnVendorLineServiceImpl.java
index 39a10d4..0f16cb2 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnvendor/MesWmReturnVendorLineServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnvendor/MesWmReturnVendorLineServiceImpl.java
@@ -26,10 +26,13 @@
import java.util.List;
import java.util.Set;
+import java.math.BigDecimal;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_RETURN_VENDOR_ITEM_NOT_IN_PURCHASE_ORDER;
import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_RETURN_VENDOR_LINE_NOT_EXISTS;
+import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_RETURN_VENDOR_QUANTITY_EXCEED;
+import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_RETURN_VENDOR_PURCHASE_ITEM_AMBIGUOUS;
/**
* MES 渚涘簲鍟嗛��璐у崟琛� Service 瀹炵幇绫�
@@ -60,6 +63,7 @@
MesWmReturnVendorDO returnVendor = validateReturnVendorLineSaveData(createReqVO);
// 閫�璐у崟鑻ュ凡鍏宠仈閲囪喘璁㈠崟锛岀墿鏂欏繀椤诲睘浜庤閲囪喘璁㈠崟锛岀姝㈣法璁㈠崟闅忔剰閫夋枡
validateReturnVendorItemInPurchaseOrder(returnVendor, createReqVO.getItemId(), null);
+ validateReturnQuantity(returnVendor, null, createReqVO.getItemId(), createReqVO.getQuantity());
// 鎻掑叆
MesWmReturnVendorLineDO line = BeanUtils.toBean(createReqVO, MesWmReturnVendorLineDO.class);
@@ -77,6 +81,7 @@
MesWmReturnVendorDO returnVendor = validateReturnVendorLineSaveData(updateReqVO);
// 鍏宠仈閲囪喘璁㈠崟鏃讹紝涓嶅厑璁告妸琛岀墿鏂欐敼鎴愯鍗曞鐨勭墿鏂欙紱浠呮敼鏁伴噺绛夋搷浣滀笉鍙楀奖鍝�
validateReturnVendorItemInPurchaseOrder(returnVendor, updateReqVO.getItemId(), oldLine.getItemId());
+ validateReturnQuantity(returnVendor, oldLine.getId(), updateReqVO.getItemId(), updateReqVO.getQuantity());
// 鏇存柊
MesWmReturnVendorLineDO updateObj = BeanUtils.toBean(updateReqVO, MesWmReturnVendorLineDO.class);
@@ -172,6 +177,39 @@
returnVendor.getCode(), resolvePurchaseOrderNo(purchaseOrderId), resolveItemDesc(itemId)));
}
+ private void validateReturnQuantity(MesWmReturnVendorDO returnVendor, Long lineId, Long itemId, BigDecimal quantity) {
+ if (returnVendor.getPurchaseOrderId() == null) {
+ return;
+ }
+ List<ErpPurchaseOrderItemRespDTO> orderItems = purchaseOrderApi
+ .getPurchaseOrderItemList(returnVendor.getPurchaseOrderId()).getCheckedData();
+ List<ErpPurchaseOrderItemRespDTO> matching = (CollUtil.isEmpty(orderItems) ? List.<ErpPurchaseOrderItemRespDTO>of() : orderItems).stream()
+ .filter(item -> ObjUtil.equal(item.getProductId(), itemId)).toList();
+ if (matching.size() > 1) {
+ throw exception(WM_RETURN_VENDOR_PURCHASE_ITEM_AMBIGUOUS, itemId);
+ }
+ if (matching.isEmpty()) {
+ throw exception(WM_RETURN_VENDOR_ITEM_NOT_IN_PURCHASE_ORDER);
+ }
+ ErpPurchaseOrderItemRespDTO item = matching.get(0);
+ BigDecimal available = (item.getInCount() == null ? BigDecimal.ZERO : item.getInCount())
+ .subtract(item.getReturnCount() == null ? BigDecimal.ZERO : item.getReturnCount());
+ BigDecimal totalQuantity = quantity;
+ for (MesWmReturnVendorLineDO existing : returnVendorLineServiceList(returnVendor.getId())) {
+ if (!ObjUtil.equal(existing.getId(), lineId) && ObjUtil.equal(existing.getItemId(), itemId)
+ && existing.getQuantity() != null) {
+ totalQuantity = totalQuantity.add(existing.getQuantity());
+ }
+ }
+ if (totalQuantity.compareTo(available) > 0) {
+ throw exception(WM_RETURN_VENDOR_QUANTITY_EXCEED, itemId, totalQuantity, available);
+ }
+ }
+
+ private List<MesWmReturnVendorLineDO> returnVendorLineServiceList(Long returnId) {
+ return returnVendorLineMapper.selectListByReturnId(returnId);
+ }
+
/**
* 瑙f瀽閲囪喘璁㈠崟鍙凤紝瑙f瀽澶辫触鏃跺洖閫�涓哄彲璇� ID
*/
--
Gitblit v1.9.3