From d6ffbf2958eefb57fb36acc12709fe42f7bce556 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期五, 09 十月 2026 14:51:13 +0800
Subject: [PATCH] fix: HRM 删除员工级联删除关联系统用户;MES 首页统计 summary 兼容设备状态为空
---
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnvendor/MesWmReturnVendorLineServiceImpl.java | 115 ++++++++++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 109 insertions(+), 6 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 6b70f92..27e61ea 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
@@ -1,24 +1,38 @@
package cn.iocoder.yudao.module.mes.service.wm.returnvendor;
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjUtil;
+import cn.hutool.core.util.StrUtil;
+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;
+import cn.iocoder.yudao.module.erp.api.purchase.ErpPurchaseOrderApi;
+import cn.iocoder.yudao.module.erp.api.purchase.dto.ErpPurchaseOrderItemRespDTO;
+import cn.iocoder.yudao.module.erp.api.purchase.dto.ErpPurchaseOrderRespDTO;
import cn.iocoder.yudao.module.mes.controller.admin.wm.returnvendor.vo.line.MesWmReturnVendorLinePageReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.wm.returnvendor.vo.line.MesWmReturnVendorLineSaveReqVO;
+import cn.iocoder.yudao.module.mes.dal.dataobject.mdm.MesMdmItemDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnvendor.MesWmReturnVendorLineDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnvendor.MesWmReturnVendorDO;
import cn.iocoder.yudao.module.mes.dal.mysql.wm.returnvendor.MesWmReturnVendorLineMapper;
-import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService;
+import cn.iocoder.yudao.module.mes.service.mdm.MesMdmItemService;
import cn.iocoder.yudao.module.mes.service.wm.batch.MesWmBatchService;
+import cn.iocoder.yudao.module.mes.service.wm.unitconvert.MesWmItemUnitConvertService;
import jakarta.annotation.Resource;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
+import java.math.BigDecimal;
import java.util.List;
+import java.util.Set;
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_LINE_QUANTITY_REQUIRED;
/**
* MES 渚涘簲鍟嗛��璐у崟琛� Service 瀹炵幇绫�
@@ -37,14 +51,22 @@
@Lazy
private MesWmReturnVendorDetailService returnVendorDetailService;
@Resource
- private MesMdItemService itemService;
+ private MesMdmItemService mdmItemService;
@Resource
private MesWmBatchService batchService;
+ @Resource
+ private ErpPurchaseOrderApi purchaseOrderApi;
+ @Resource
+ private MesWmItemUnitConvertService itemUnitConvertService;
@Override
public Long createReturnVendorLine(MesWmReturnVendorLineSaveReqVO createReqVO) {
// 鏍¢獙鏁版嵁
- validateReturnVendorLineSaveData(createReqVO);
+ MesWmReturnVendorDO returnVendor = validateReturnVendorLineSaveData(createReqVO);
+ // 閫�璐у崟鑻ュ凡鍏宠仈閲囪喘璁㈠崟锛岀墿鏂欏繀椤诲睘浜庤閲囪喘璁㈠崟锛岀姝㈣法璁㈠崟闅忔剰閫夋枡
+ validateReturnVendorItemInPurchaseOrder(returnVendor, createReqVO.getItemId(), null);
+ // 鍙屽崟浣嶆崲绠楋細鎸夊綍鍏ュ崟浣嶆崲绠椾负鐗╂枡涓诲崟浣嶆暟閲�
+ fillPrimaryQuantity(createReqVO);
// 鎻掑叆
MesWmReturnVendorLineDO line = BeanUtils.toBean(createReqVO, MesWmReturnVendorLineDO.class);
@@ -59,7 +81,11 @@
// 鍥哄畾鐖跺崟 ID锛岄槻姝㈤�氳繃鎺ュ彛绡℃敼
updateReqVO.setReturnId(oldLine.getReturnId());
// 鏍¢獙鏁版嵁
- validateReturnVendorLineSaveData(updateReqVO);
+ MesWmReturnVendorDO returnVendor = validateReturnVendorLineSaveData(updateReqVO);
+ // 鍏宠仈閲囪喘璁㈠崟鏃讹紝涓嶅厑璁告妸琛岀墿鏂欐敼鎴愯鍗曞鐨勭墿鏂欙紱浠呮敼鏁伴噺绛夋搷浣滀笉鍙楀奖鍝�
+ validateReturnVendorItemInPurchaseOrder(returnVendor, updateReqVO.getItemId(), oldLine.getItemId());
+ // 鍙屽崟浣嶆崲绠楋細鎸夊綍鍏ュ崟浣嶆崲绠椾负鐗╂枡涓诲崟浣嶆暟閲�
+ fillPrimaryQuantity(updateReqVO);
// 鏇存柊
MesWmReturnVendorLineDO updateObj = BeanUtils.toBean(updateReqVO, MesWmReturnVendorLineDO.class);
@@ -109,15 +135,92 @@
return line;
}
- private void validateReturnVendorLineSaveData(MesWmReturnVendorLineSaveReqVO reqVO) {
+ private MesWmReturnVendorDO validateReturnVendorLineSaveData(MesWmReturnVendorLineSaveReqVO reqVO) {
// 鏍¢獙鐖舵暟鎹瓨鍦ㄤ笖涓鸿崏绋跨姸鎬�
MesWmReturnVendorDO returnVendor = returnVendorService.validateReturnVendorExistsAndPrepare(reqVO.getReturnId());
// 鏍¢獙鐗╂枡瀛樺湪
- itemService.validateItemExistsAndEnable(reqVO.getItemId());
+ mdmItemService.validateItemExistsAndEnable(reqVO.getItemId());
// 鏍¢獙鎵规瀛樺湪涓斿睘浜庡綋鍓嶇墿鏂欏拰渚涘簲鍟�
if (reqVO.getBatchId() != null) {
batchService.validateBatchExists(reqVO.getBatchId(), reqVO.getItemId(), null, returnVendor.getVendorId());
}
+ return returnVendor;
+ }
+
+ /**
+ * 鍙屽崟浣嶆崲绠楋細閫夋嫨浜嗗綍鍏ュ崟浣嶆椂锛屾寜銆屽綍鍏ユ暟閲� 脳 鎹㈢畻姣旂巼銆嶅緱鍒扮墿鏂欎富鍗曚綅鍙e緞鐨勯��璐ф暟閲�
+ *
+ * 鏈寜杈呭崟浣嶅綍鍏ユ椂蹇呴』鐩存帴濉啓閫�璐ф暟閲�
+ */
+ private void fillPrimaryQuantity(MesWmReturnVendorLineSaveReqVO reqVO) {
+ if (reqVO.getEnterUnitMeasureId() != null) {
+ BigDecimal primaryQuantity = itemUnitConvertService.convertToPrimaryUnit(
+ reqVO.getItemId(), reqVO.getItemModelId(),
+ reqVO.getEnterUnitMeasureId(), reqVO.getEnterQuantity());
+ if (primaryQuantity != null) {
+ reqVO.setQuantity(primaryQuantity);
+ }
+ }
+ if (reqVO.getQuantity() == null) {
+ throw exception(WM_RETURN_VENDOR_LINE_QUANTITY_REQUIRED);
+ }
+ }
+
+ /**
+ * 鏍¢獙閫�璐ц鐗╂枡灞炰簬鎵�鍏宠仈閲囪喘璁㈠崟锛堥��璐у崟宸插叧鑱旈噰璐鍗曟椂锛夈��
+ *
+ * 閲囪喘閫�璐х殑鐗╂枡搴斿彇鑷叧鑱旈噰璐鍗曪紝姝ゅ涓哄悗绔厹搴曪紝闃叉閫氳繃鎺ュ彛璺ㄨ鍗曢殢鎰忛�夋枡銆�
+ * 鐗╂枡涓庡甫鍏ラ�昏緫淇濇寔涓�鑷达細浠ラ噰璐鍗曟槑缁嗙殑浜у搧 ID 浣滀负鐗╂枡闆嗗悎銆�
+ *
+ * @param oldItemId 淇敼鍓嶇墿鏂� ID锛涗负绌鸿〃绀烘柊澧炪�傜墿鏂欐湭鍙樺寲鏃讹紙浠呮敼鏁伴噺绛夛級涓嶉噸澶嶆牎楠�
+ */
+ private void validateReturnVendorItemInPurchaseOrder(MesWmReturnVendorDO returnVendor, Long itemId, Long oldItemId) {
+ Long purchaseOrderId = returnVendor.getPurchaseOrderId();
+ if (purchaseOrderId == null) {
+ return;
+ }
+ // 缂栬緫琛屾椂鐗╂枡鏈彉锛堝彧鏀规暟閲�/鎵规绛夛級锛屾棤闇�鏍¢獙
+ if (ObjUtil.equal(itemId, oldItemId)) {
+ return;
+ }
+ List<ErpPurchaseOrderItemRespDTO> poItems = purchaseOrderApi
+ .getPurchaseOrderItemList(purchaseOrderId).getCheckedData();
+ if (CollUtil.isEmpty(poItems)) {
+ // 璁㈠崟鏃犳槑缁嗘椂鐢�"甯﹀叆鐗╂枡"娴佺▼缁熶竴缁欏嚭鎻愮ず锛屾澶勪笉鎷︽埅
+ return;
+ }
+ Set<Long> poProductIds = CollectionUtils.convertSet(poItems, ErpPurchaseOrderItemRespDTO::getProductId);
+ if (poProductIds.contains(itemId)) {
+ return;
+ }
+ throw new ServiceException(WM_RETURN_VENDOR_ITEM_NOT_IN_PURCHASE_ORDER.getCode(),
+ String.format("閫�璐у崟[%s]宸插叧鑱旈噰璐鍗昜%s]锛岄��璐х墿鏂�%s涓嶅湪璇ラ噰璐鍗曟槑缁嗕腑銆�"
+ + "閫�璐у彧鑳介拡瀵硅閲囪喘璁㈠崟鐨勭墿鏂欙紝璇烽�夋嫨璁㈠崟鍐呯殑鐗╂枡骞朵粎璋冩暣閫�璐ф暟閲忥紱"
+ + "濡傞渶閫�鍥炶鍗曞鐗╂枡锛岃鍏堣В闄ゅ綋鍓嶉噰璐鍗曞叧鑱斻��",
+ returnVendor.getCode(), resolvePurchaseOrderNo(purchaseOrderId), resolveItemDesc(itemId)));
+ }
+
+ /**
+ * 瑙f瀽閲囪喘璁㈠崟鍙凤紝瑙f瀽澶辫触鏃跺洖閫�涓哄彲璇� ID
+ */
+ private String resolvePurchaseOrderNo(Long purchaseOrderId) {
+ ErpPurchaseOrderRespDTO purchaseOrder = purchaseOrderApi.getPurchaseOrder(purchaseOrderId).getCheckedData();
+ if (purchaseOrder != null && StrUtil.isNotBlank(purchaseOrder.getNo())) {
+ return purchaseOrder.getNo();
+ }
+ return "ID=" + purchaseOrderId;
+ }
+
+ /**
+ * 瑙f瀽鐗╂枡鍙鎻忚堪锛堢紪鐮�+鍚嶇О锛夛紝瑙f瀽澶辫触鏃跺洖閫�涓哄彲璇� ID
+ */
+ private String resolveItemDesc(Long itemId) {
+ MesMdmItemDO item = mdmItemService.getItem(itemId);
+ if (item == null) {
+ return "ID=" + itemId;
+ }
+ String name = StrUtil.nullToDefault(item.getName(), "");
+ return (StrUtil.isNotBlank(item.getCode()) ? "[" + item.getCode() + "]" : "[ID=" + itemId + "]") + name;
}
}
--
Gitblit v1.9.3