From 8c14b50773a1e582b652c03f5a63bb2233d069b8 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期一, 13 七月 2026 08:55:20 +0800
Subject: [PATCH] 1.仓储物流-采购模块联动 2.仓储物流-销售模块联动 3.清理表数据

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/salesnotice/MesWmSalesNoticeServiceImpl.java |   60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 60 insertions(+), 0 deletions(-)

diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/salesnotice/MesWmSalesNoticeServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/salesnotice/MesWmSalesNoticeServiceImpl.java
index 30a2777..9301bb6 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/salesnotice/MesWmSalesNoticeServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/salesnotice/MesWmSalesNoticeServiceImpl.java
@@ -9,7 +9,11 @@
 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.salesnotice.MesWmSalesNoticeDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.salesnotice.MesWmSalesNoticeLineDO;
 import cn.iocoder.yudao.module.mes.dal.mysql.wm.salesnotice.MesWmSalesNoticeMapper;
+import cn.iocoder.yudao.module.mes.service.md.autocode.MesMdAutoCodeRecordService;
 import cn.iocoder.yudao.module.mes.service.md.client.MesMdClientService;
+import cn.iocoder.yudao.module.erp.api.sale.ErpSaleOrderApi;
+import cn.iocoder.yudao.module.erp.api.sale.dto.ErpSaleOrderItemRespDTO;
+import cn.iocoder.yudao.module.erp.api.sale.dto.ErpSaleOrderRespDTO;
 import jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -39,6 +43,11 @@
     private MesWmSalesNoticeLineService salesNoticeLineService;
     @Resource
     private MesMdClientService clientService;
+
+    @Resource
+    private ErpSaleOrderApi saleOrderApi;
+    @Resource
+    private MesMdAutoCodeRecordService autoCodeRecordService;
 
     @Override
     public Long createSalesNotice(MesWmSalesNoticeSaveReqVO createReqVO) {
@@ -149,4 +158,55 @@
         }
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Long generateSalesNoticeFromSaleOrder(Long saleOrderId) {
+        // 1. 鑾峰彇閿�鍞鍗曚俊鎭�
+        ErpSaleOrderRespDTO saleOrder = saleOrderApi.getSaleOrder(saleOrderId).getCheckedData();
+        if (saleOrder == null) {
+            throw exception(WM_SALES_NOTICE_SALE_ORDER_NOT_EXISTS);
+        }
+
+        // 2. 鑾峰彇閿�鍞鍗曟槑缁�
+        List<ErpSaleOrderItemRespDTO> saleOrderItems = saleOrderApi.getSaleOrderItemList(saleOrderId).getCheckedData();
+        if (CollUtil.isEmpty(saleOrderItems)) {
+            throw exception(WM_SALES_NOTICE_SALE_ORDER_ITEM_EMPTY);
+        }
+
+        // 3. 鐢熸垚鍙戣揣閫氱煡鍗曠紪鐮�
+        String code = autoCodeRecordService.generateAutoCode("SALESNOTICE_CODE", null);
+
+        // 4. 鍒涘缓鍙戣揣閫氱煡鍗曚富琛�
+        MesWmSalesNoticeDO notice = new MesWmSalesNoticeDO();
+        notice.setCode(code);
+        notice.setName("閿�鍞鍗昜" + saleOrder.getNo() + "]鍙戣揣閫氱煡");
+        notice.setClientId(saleOrder.getCustomerId());
+        notice.setSaleOrderId(saleOrderId);
+        notice.setSaleOrderCode(saleOrder.getNo());
+        notice.setSalesDate(java.time.LocalDateTime.now());
+        notice.setStatus(PREPARE.getStatus());
+        salesNoticeMapper.insert(notice);
+
+        // 5. 閬嶅巻鏄庣粏鍒涘缓鍙戣揣閫氱煡鍗曡
+        for (ErpSaleOrderItemRespDTO saleOrderItem : saleOrderItems) {
+            MesWmSalesNoticeLineDO line = new MesWmSalesNoticeLineDO();
+            line.setNoticeId(notice.getId());
+            line.setSaleOrderItemId(saleOrderItem.getId());
+            line.setItemId(saleOrderItem.getProductId());
+            line.setQuantity(saleOrderItem.getCount());
+            salesNoticeLineService.createSalesNoticeLine(line);
+        }
+
+        return notice.getId();
+    }
+
+    @Override
+    public void finishSalesNotice(Long id) {
+        // 鏍¢獙瀛樺湪
+        MesWmSalesNoticeDO notice = validateSalesNoticeExists(id);
+        // 鏇存柊鐘舵�佷负宸插畬鎴�
+        salesNoticeMapper.updateById(new MesWmSalesNoticeDO()
+                .setId(id).setStatus(FINISHED.getStatus()));
+    }
+
 }

--
Gitblit v1.9.3