From 1ab2b329a40decba8ff7eefbeb158ff259aceb6d Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期二, 14 七月 2026 15:23:34 +0800
Subject: [PATCH] 追溯+分类接口

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/arrivalnotice/MesWmArrivalNoticeServiceImpl.java |   60 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 57 insertions(+), 3 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..29db064 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,6 +13,8 @@
 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 jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -46,6 +48,9 @@
     @Resource
     private ErpPurchaseOrderApi purchaseOrderApi;
 
+    @Resource
+    private MesMdmItemService mdmItemService;
+
     @Override
     public Long createArrivalNotice(MesWmArrivalNoticeSaveReqVO createReqVO) {
         // 鏍¢獙鏁版嵁
@@ -75,14 +80,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());
         }
     }
 
@@ -256,4 +259,55 @@
         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(false); // 榛樿涓嶉渶瑕佹楠岋紝鐢ㄦ埛鍙慨鏀�
+            arrivalNoticeLineService.createArrivalNoticeLineFromPurchaseOrderItem(line);
+        }
+
+        return notice.getId();
+    }
+
+    /**
+     * 鐢熸垚鍒拌揣閫氱煡鍗曠紪鐮�
+     */
+    private String generateArrivalNoticeCode() {
+        // TODO: 浣跨敤缂栫爜瑙勫垯鏈嶅姟鐢熸垚缂栫爜
+        return "AN" + System.currentTimeMillis();
+    }
+
 }

--
Gitblit v1.9.3