From 1ba0dbfde5634c8bf2ec20891d6b226b996f6b59 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期三, 02 九月 2026 14:24:38 +0800
Subject: [PATCH] refactor(mes): 优化MES生产扫码入库功能支持多类型扫码

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/salesnotice/MesWmSalesNoticeServiceImpl.java |   85 ++++++++----------------------------------
 1 files changed, 16 insertions(+), 69 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 d7124e9..115bebf 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
@@ -17,11 +17,7 @@
 import cn.iocoder.yudao.module.mes.enums.wm.MesWmOutStatusEnum;
 import cn.iocoder.yudao.module.mes.enums.wm.MesWmProductSalesStatusEnum;
 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 cn.iocoder.yudao.module.erp.api.sale.enums.ErpSaleOrderOutStatusEnum;
+import cn.iocoder.yudao.module.crm.api.customer.CrmCustomerApi;
 import jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -51,10 +47,8 @@
     @Resource
     private MesWmSalesNoticeLineService salesNoticeLineService;
     @Resource
-    private MesMdClientService clientService;
+    private CrmCustomerApi customerApi;
 
-    @Resource
-    private ErpSaleOrderApi saleOrderApi;
     @Resource
     private MesMdAutoCodeRecordService autoCodeRecordService;
 
@@ -103,19 +97,29 @@
 
     @Override
     public MesWmSalesNoticeDO getSalesNotice(Long id) {
-        return salesNoticeMapper.selectById(id);
+        MesWmSalesNoticeDO notice = salesNoticeMapper.selectById(id);
+        // 鏍¢獙瀹㈡埛鏉冮檺
+        if (notice != null && notice.getClientId() != null) {
+            List<Long> permittedIds = customerApi.getPermittedCustomerIds();
+            if (permittedIds != null && !permittedIds.contains(notice.getClientId())) {
+                return null; // 鏃犳潈闄愬垯杩斿洖 null
+            }
+        }
+        return notice;
     }
 
     @Override
     public PageResult<MesWmSalesNoticeDO> getSalesNoticePage(MesWmSalesNoticePageReqVO pageReqVO) {
-        return salesNoticeMapper.selectPage(pageReqVO);
+        // 鑾峰彇鐢ㄦ埛鏈夋潈闄愮殑瀹㈡埛 ID 鍒楄〃
+        List<Long> permittedClientIds = customerApi.getPermittedCustomerIds();
+        return salesNoticeMapper.selectPage(pageReqVO, permittedClientIds);
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void submitSalesNotice(Long id) {
         // 1.1 鏍¢獙瀛樺湪 + 鑽夌鐘舵��
-        MesWmSalesNoticeDO notice = validateSalesNoticeExistsAndDraft(id);
+        validateSalesNoticeExistsAndDraft(id);
         // 1.2 妫�鏌ユ槸鍚︽湁琛岄」鐩�
         List<MesWmSalesNoticeLineDO> lines = salesNoticeLineService.getSalesNoticeLineListByNoticeId(id);
         if (CollUtil.isEmpty(lines)) {
@@ -125,12 +129,6 @@
         // 2. 鏇存柊鐘舵�侊細鑽夌 鈫� 寰呭嚭搴�
         salesNoticeMapper.updateById(new MesWmSalesNoticeDO()
                 .setId(id).setStatus(APPROVED.getStatus()));
-
-        // 3. 鍥炲啓 ERP 閿�鍞鍗曞嚭搴撶姸鎬佷负"宸查鐣�"
-        if (notice.getSaleOrderId() != null) {
-            saleOrderApi.updateOrderOutStatusTo(notice.getSaleOrderId(),
-                    ErpSaleOrderOutStatusEnum.RESERVED.getStatus());
-        }
     }
 
     @Override
@@ -166,7 +164,7 @@
         validateNoticeCodeUnique(saveReqVO.getId(), saveReqVO.getCode());
         // 鏍¢獙瀹㈡埛瀛樺湪
         if (saveReqVO.getClientId() != null) {
-            clientService.validateClientExistsAndEnable(saveReqVO.getClientId());
+            customerApi.validateCustomer(saveReqVO.getClientId());
         }
     }
 
@@ -178,54 +176,6 @@
         if (ObjUtil.notEqual(id, notice.getId())) {
             throw exception(WM_SALES_NOTICE_CODE_DUPLICATE);
         }
-    }
-
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public Long generateSalesNoticeFromSaleOrder(Long saleOrderId) {
-        // 1. 鏍¢獙鏄惁宸茬敓鎴愯繃鍙戣揣閫氱煡鍗曪紙闃叉閲嶅鐢熸垚锛�
-        MesWmSalesNoticeDO existNotice = salesNoticeMapper.selectBySaleOrderId(saleOrderId);
-        if (existNotice != null) {
-            throw exception(WM_SALES_NOTICE_ALREADY_EXISTS);
-        }
-
-        // 2. 鑾峰彇閿�鍞鍗曚俊鎭�
-        ErpSaleOrderRespDTO saleOrder = saleOrderApi.getSaleOrder(saleOrderId).getCheckedData();
-        if (saleOrder == null) {
-            throw exception(WM_SALES_NOTICE_SALE_ORDER_NOT_EXISTS);
-        }
-
-        // 3. 鑾峰彇閿�鍞鍗曟槑缁�
-        List<ErpSaleOrderItemRespDTO> saleOrderItems = saleOrderApi.getSaleOrderItemList(saleOrderId).getCheckedData();
-        if (CollUtil.isEmpty(saleOrderItems)) {
-            throw exception(WM_SALES_NOTICE_SALE_ORDER_ITEM_EMPTY);
-        }
-
-        // 4. 鐢熸垚鍙戣揣閫氱煡鍗曠紪鐮�
-        String code = autoCodeRecordService.generateAutoCode("SALESNOTICE_CODE", null);
-
-        // 5. 鍒涘缓鍙戣揣閫氱煡鍗曚富琛�
-        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);
-
-        // 6. 閬嶅巻鏄庣粏鍒涘缓鍙戣揣閫氱煡鍗曡
-        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
@@ -340,8 +290,6 @@
         productSales.setCode(code);
         productSales.setName("鍙戣揣閫氱煡鍗昜" + notice.getCode() + "]鍑哄簱");
         productSales.setClientId(notice.getClientId());
-        productSales.setSaleOrderId(notice.getSaleOrderId());
-        productSales.setSalesOrderCode(notice.getSaleOrderCode());
         productSales.setNoticeId(noticeId);
         productSales.setSalesDate(notice.getSalesDate());
         // 鏀惰揣淇℃伅浠庡彂璐ч�氱煡鍗曞甫鍏�
@@ -355,7 +303,6 @@
         for (MesWmSalesNoticeLineDO noticeLine : noticeLines) {
             MesWmProductSalesLineDO salesLine = new MesWmProductSalesLineDO();
             salesLine.setSalesId(productSales.getId());
-            salesLine.setSaleOrderItemId(noticeLine.getSaleOrderItemId());
             salesLine.setNoticeLineId(noticeLine.getId());
             salesLine.setItemId(noticeLine.getItemId());
             salesLine.setQuantity(noticeLine.getQuantity());

--
Gitblit v1.9.3