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