From ffe7921a138331185186fd100846fe50dcaf841c Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期四, 16 七月 2026 10:08:02 +0800
Subject: [PATCH] 1.采购管理-采购申请恢复
---
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/arrivalnotice/MesWmArrivalNoticeServiceImpl.java | 88 +++++++++++++++++++++++++++++++++++++++++--
1 files changed, 83 insertions(+), 5 deletions(-)
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/arrivalnotice/MesWmArrivalNoticeServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/arrivalnotice/MesWmArrivalNoticeServiceImpl.java
index 32ea507..2f5f920 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/arrivalnotice/MesWmArrivalNoticeServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/arrivalnotice/MesWmArrivalNoticeServiceImpl.java
@@ -13,8 +13,12 @@
import cn.iocoder.yudao.module.mes.enums.wm.MesWmArrivalNoticeStatusEnum;
import cn.iocoder.yudao.module.erp.api.purchase.ErpPurchaseOrderApi;
import cn.iocoder.yudao.module.erp.api.purchase.dto.ErpPurchaseOrderRespDTO;
+import cn.iocoder.yudao.module.erp.api.purchase.dto.ErpPurchaseOrderItemRespDTO;
+import cn.iocoder.yudao.module.mes.service.mdm.MesMdmItemService;
+import cn.iocoder.yudao.module.mes.service.qc.iqc.MesQcIqcService;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
@@ -46,6 +50,13 @@
@Resource
private ErpPurchaseOrderApi purchaseOrderApi;
+ @Resource
+ private MesMdmItemService mdmItemService;
+
+ @Resource
+ @Lazy
+ private MesQcIqcService iqcService;
+
@Override
public Long createArrivalNotice(MesWmArrivalNoticeSaveReqVO createReqVO) {
// 鏍¢獙鏁版嵁
@@ -75,14 +86,12 @@
validateCodeUnique(reqVO.getId(), reqVO.getCode());
// 鏍¢獙渚涘簲鍟嗗瓨鍦ㄤ笖鍚敤
vendorService.validateVendorExistsAndEnable(reqVO.getVendorId());
- // 鏍¢獙閲囪喘璁㈠崟瀛樺湪锛屽苟鑷姩濉厖閲囪喘璁㈠崟鍙�
+ // 鏍¢獙閲囪喘璁㈠崟瀛樺湪
if (reqVO.getPurchaseOrderId() != null) {
ErpPurchaseOrderRespDTO purchaseOrder = purchaseOrderApi.getPurchaseOrder(reqVO.getPurchaseOrderId()).getCheckedData();
if (purchaseOrder == null) {
throw exception(WM_PURCHASE_ORDER_NOT_EXISTS);
}
- // 鑷姩濉厖閲囪喘璁㈠崟鍙�
- reqVO.setPurchaseOrderCode(purchaseOrder.getNo());
}
}
@@ -112,7 +121,7 @@
@Transactional(rollbackFor = Exception.class)
public void submitArrivalNotice(Long id) {
// 1.1 鏍¢獙瀛樺湪 + 鑽夌鐘舵��
- validateArrivalNoticeExistsAndDraft(id);
+ MesWmArrivalNoticeDO notice = validateArrivalNoticeExistsAndDraft(id);
// 1.2 妫�鏌ユ槸鍚︽湁琛岄」鐩�
List<MesWmArrivalNoticeLineDO> lines = arrivalNoticeLineService.getArrivalNoticeLineListByNoticeId(id);
if (CollUtil.isEmpty(lines)) {
@@ -123,9 +132,26 @@
boolean needCheck = CollectionUtils.anyMatch(lines,
line -> Boolean.TRUE.equals(line.getIqcCheckFlag()));
if (needCheck) {
- // 闇�瑕佹楠岋紝杩涘叆寰呰川妫�
+ // 2.1 闇�瑕佹楠岋紝杩涘叆寰呰川妫�
arrivalNoticeMapper.updateById(new MesWmArrivalNoticeDO()
.setId(id).setStatus(MesWmArrivalNoticeStatusEnum.PENDING_QC.getStatus()));
+ // 2.2 涓洪渶瑕佽川妫�鐨勮鑷姩鍒涘缓 IQC 妫�楠屽崟
+ for (MesWmArrivalNoticeLineDO line : lines) {
+ if (Boolean.TRUE.equals(line.getIqcCheckFlag()) && line.getIqcId() == null) {
+ try {
+ Long iqcId = iqcService.createIqcFromArrivalNotice(
+ id, line, notice.getCode(), notice.getVendorId());
+ // 鏇存柊琛屼笂鐨� iqcId
+ arrivalNoticeLineService.updateArrivalNoticeLineIqcId(line.getId(), iqcId);
+ log.info("[submitArrivalNotice][鍒拌揣閫氱煡鍗�({}) 琛�({}) 鑷姩鍒涘缓 IQC 妫�楠屽崟({})]",
+ id, line.getId(), iqcId);
+ } catch (Exception e) {
+ log.warn("[submitArrivalNotice][鍒拌揣閫氱煡鍗�({}) 琛�({}) 鍒涘缓 IQC 澶辫触: {}]",
+ id, line.getId(), e.getMessage());
+ // 缁х画澶勭悊鍏朵粬琛岋紝涓嶄腑鏂祦绋�
+ }
+ }
+ }
return;
}
// 涓嶉渶瑕佹楠岋紝鐩存帴杩涘叆寰呭叆搴�
@@ -256,4 +282,56 @@
return arrivalNoticeMapper.selectCountByVendorId(vendorId);
}
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public Long generateArrivalNoticeFromPurchaseOrder(Long purchaseOrderId) {
+ // 1. 鑾峰彇閲囪喘璁㈠崟
+ ErpPurchaseOrderRespDTO purchaseOrder = purchaseOrderApi.getPurchaseOrder(purchaseOrderId).getCheckedData();
+ if (purchaseOrder == null) {
+ throw exception(WM_PURCHASE_ORDER_NOT_EXISTS);
+ }
+
+ // 2. 鑾峰彇閲囪喘璁㈠崟鏄庣粏
+ List<ErpPurchaseOrderItemRespDTO> items = purchaseOrderApi.getPurchaseOrderItemList(purchaseOrderId).getCheckedData();
+ if (CollUtil.isEmpty(items)) {
+ throw exception(WM_PURCHASE_ORDER_NO_ITEM);
+ }
+
+ // 3. 鐢熸垚鍒拌揣閫氱煡鍗曠紪鐮侊紙浣跨敤缂栫爜瑙勫垯鏈嶅姟锛�
+ String code = generateArrivalNoticeCode();
+
+ // 4. 鍒涘缓鍒拌揣閫氱煡鍗曚富琛�
+ MesWmArrivalNoticeDO notice = new MesWmArrivalNoticeDO();
+ notice.setCode(code);
+ notice.setName(purchaseOrder.getNo() + "鍒拌揣閫氱煡");
+ notice.setPurchaseOrderId(purchaseOrderId);
+ notice.setPurchaseOrderCode(purchaseOrder.getNo());
+ notice.setVendorId(purchaseOrder.getSupplierId());
+ notice.setStatus(MesWmArrivalNoticeStatusEnum.PREPARE.getStatus());
+ arrivalNoticeMapper.insert(notice);
+
+ // 5. 閬嶅巻鏄庣粏鍒涘缓鍒拌揣閫氱煡鍗曡
+ for (ErpPurchaseOrderItemRespDTO item : items) {
+ MesWmArrivalNoticeLineDO line = new MesWmArrivalNoticeLineDO();
+ line.setNoticeId(notice.getId());
+ line.setPurchaseOrderItemId(item.getId());
+ // 娉ㄦ剰锛氳繖閲岄渶瑕佹牴鎹� ERP 浜у搧 ID 鏄犲皠鍒� MES 鐗╂枡 ID
+ // 瀹為檯椤圭洰涓渶瑕侀�氳繃鏄犲皠鏈嶅姟澶勭悊锛岃繖閲屾殏鏃剁暀绌鸿鐢ㄦ埛鎵嬪姩閫夋嫨
+ line.setArrivalQuantity(item.getCount() != null ? item.getCount().subtract(item.getInCount() != null ? item.getInCount() : BigDecimal.ZERO) : BigDecimal.ZERO);
+ // 浠庨噰璐鍗曟槑缁嗗甫鍏ヨ川妫�鏍囪瘑
+ line.setIqcCheckFlag(Boolean.TRUE.equals(item.getQcCheckFlag()));
+ arrivalNoticeLineService.createArrivalNoticeLineFromPurchaseOrderItem(line);
+ }
+
+ return notice.getId();
+ }
+
+ /**
+ * 鐢熸垚鍒拌揣閫氱煡鍗曠紪鐮�
+ */
+ private String generateArrivalNoticeCode() {
+ // TODO: 浣跨敤缂栫爜瑙勫垯鏈嶅姟鐢熸垚缂栫爜
+ return "AN" + System.currentTimeMillis();
+ }
+
}
--
Gitblit v1.9.3