From 87733eb3623593da247c051593d64b8ff9e1d3a4 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期五, 06 十一月 2026 19:00:39 +0800
Subject: [PATCH] feat(crm,mes): 扩展客户字段与重构批次号生成逻辑
---
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/transaction/MesWmTransactionController.java | 75 +++++++++++++++++++++++++++++++++++++
1 files changed, 74 insertions(+), 1 deletions(-)
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/transaction/MesWmTransactionController.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/transaction/MesWmTransactionController.java
index 4f90f4f..8f9469e 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/transaction/MesWmTransactionController.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/transaction/MesWmTransactionController.java
@@ -1,22 +1,35 @@
package cn.iocoder.yudao.module.mes.controller.admin.wm.transaction;
+import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.mes.controller.admin.wm.transaction.vo.MesWmTransactionPageReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.wm.transaction.vo.MesWmTransactionRespVO;
+import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO;
+import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemTypeDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.mdm.MesMdmItemDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.transaction.MesWmTransactionDO;
+import cn.iocoder.yudao.module.mes.dal.dataobject.pro.bagcode.MesProBagCodeDO;
+import cn.iocoder.yudao.module.mes.dal.dataobject.pro.pallet.MesProPalletDO;
+import cn.iocoder.yudao.module.mes.dal.dataobject.wm.productsales.MesWmProductSalesDetailDO;
+import cn.iocoder.yudao.module.mes.dal.mysql.md.item.MesMdItemMapper;
+import cn.iocoder.yudao.module.mes.dal.mysql.pro.bagcode.MesProBagCodeMapper;
+import cn.iocoder.yudao.module.mes.dal.mysql.pro.pallet.MesProPalletMapper;
+import cn.iocoder.yudao.module.mes.dal.mysql.wm.productsales.MesWmProductSalesDetailMapper;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseAreaDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseLocationDO;
import cn.iocoder.yudao.module.mes.enums.MesBizTypeConstants;
import cn.iocoder.yudao.module.mes.enums.wm.MesWmTransactionTypeEnum;
+import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemTypeService;
import cn.iocoder.yudao.module.mes.service.mdm.MesMdmItemService;
import cn.iocoder.yudao.module.mes.service.wm.transaction.MesWmTransactionService;
import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseAreaService;
import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseLocationService;
import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseService;
+import cn.iocoder.yudao.module.mdm.api.category.MdmItemCategoryApi;
+import cn.iocoder.yudao.module.mdm.api.category.dto.MdmItemCategoryRespDTO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
@@ -28,6 +41,7 @@
import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.stream.Collectors;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@@ -47,11 +61,18 @@
@Resource
private MesMdmItemService mdmItemService;
@Resource
+ private MdmItemCategoryApi mdmItemCategoryApi;
+ @Resource
private MesWmWarehouseService warehouseService;
@Resource
private MesWmWarehouseLocationService locationService;
@Resource
private MesWmWarehouseAreaService areaService;
+ @Resource private MesProBagCodeMapper bagCodeMapper;
+ @Resource private MesProPalletMapper palletMapper;
+ @Resource private MesWmProductSalesDetailMapper salesDetailMapper;
+ @Resource private MesMdItemMapper mesMdItemMapper;
+ @Resource private MesMdItemTypeService mesMdItemTypeService;
@GetMapping("/page")
@Operation(summary = "鑾峰彇搴撳瓨浜嬪姟娴佹按鍒嗛〉")
@@ -66,6 +87,19 @@
// 鍏宠仈鏌ヨ鐗╂枡淇℃伅
Map<Long, MesMdmItemDO> itemMap = mdmItemService.getItemMap(
convertSet(pageResult.getList(), MesWmTransactionDO::getItemId));
+ // 鍏宠仈鏌ヨ鐗╂枡绫诲埆淇℃伅
+ Map<Long, MdmItemCategoryRespDTO> itemCategoryMap = mdmItemCategoryApi.getItemCategoryList(
+ convertSet(itemMap.values(), MesMdmItemDO::getCategoryId)).getCheckedData().stream()
+ .collect(Collectors.toMap(MdmItemCategoryRespDTO::getId, c -> c));
+ // 鍏宠仈鏌ヨ MES 鐗╂枡锛堝搧绉嶅悓姝ョ敓鎴愶級锛屽搧绉嶆湭缁存姢瑙勬牸/鍒嗙被鏃跺洖閫�浣跨敤
+ Set<Long> mdmItemIds = convertSet(itemMap.values(), MesMdmItemDO::getId);
+ Map<Long, MesMdItemDO> mesItemMap = mdmItemIds.isEmpty() ? Map.of()
+ : mesMdItemMapper.selectList(MesMdItemDO::getMdmItemId, mdmItemIds).stream()
+ .collect(Collectors.toMap(MesMdItemDO::getMdmItemId, i -> i, (a, b) -> a));
+ Set<Long> mesItemTypeIds = convertSet(mesItemMap.values(), MesMdItemDO::getItemTypeId);
+ mesItemTypeIds.remove(null);
+ Map<Long, MesMdItemTypeDO> mesItemTypeMap = mesItemTypeIds.isEmpty() ? Map.of()
+ : mesMdItemTypeService.getItemTypeMap(mesItemTypeIds);
// 鍏宠仈鏌ヨ浠撳簱淇℃伅
Map<Long, MesWmWarehouseDO> warehouseMap = warehouseService.getWarehouseMap(
convertSet(pageResult.getList(), MesWmTransactionDO::getWarehouseId));
@@ -76,9 +110,34 @@
Map<Long, MesWmWarehouseAreaDO> areaMap = areaService.getWarehouseAreaMap(
convertSet(pageResult.getList(), MesWmTransactionDO::getAreaId));
+ var bagIds = convertSet(pageResult.getList(), MesWmTransactionDO::getBagCodeId);
+ bagIds.remove(null);
+ Map<Long, MesProBagCodeDO> bagMap = bagIds.isEmpty() ? Map.of() : bagCodeMapper.selectBatchIds(bagIds)
+ .stream().collect(Collectors.toMap(MesProBagCodeDO::getId, b -> b));
+ var salesIds = pageResult.getList().stream().filter(t -> Integer.valueOf(MesBizTypeConstants.WM_PRODUCT_SALES).equals(t.getBizType()))
+ .map(MesWmTransactionDO::getBizId).filter(java.util.Objects::nonNull).collect(Collectors.toSet());
+ var details = salesDetailMapper.selectBySalesIdsAndBagIds(salesIds, bagIds);
+ var palletIds = convertSet(details, MesWmProductSalesDetailDO::getPalletCodeId);
+ palletIds.remove(null);
+ Map<Long, MesProPalletDO> pallets = palletIds.isEmpty() ? Map.of() : palletMapper.selectBatchIds(palletIds)
+ .stream().collect(Collectors.toMap(MesProPalletDO::getId, p -> p));
+ Map<String, MesWmProductSalesDetailDO> detailMap = details.stream().collect(Collectors.toMap(
+ d -> d.getSalesId() + ":" + d.getBagCodeId() + ":" + d.getShipmentId(), d -> d, (a, b) -> a));
+
// 杞崲涓� VO
List<MesWmTransactionRespVO> voList = pageResult.getList().stream().map(transaction -> {
MesWmTransactionRespVO vo = BeanUtils.toBean(transaction, MesWmTransactionRespVO.class);
+ MesProBagCodeDO bag = transaction.getBagCodeId() == null ? null : bagMap.get(transaction.getBagCodeId());
+ if ((vo.getBagCode() == null || vo.getBagCode().isBlank()) && bag != null) vo.setBagCode(bag.getCode());
+ if (Integer.valueOf(MesBizTypeConstants.WM_PRODUCT_SALES).equals(transaction.getBizType())) {
+ MesWmProductSalesDetailDO detail = detailMap.get(transaction.getBizId() + ":" + transaction.getBagCodeId() + ":" + transaction.getShipmentId());
+ MesProPalletDO pallet = detail == null || detail.getPalletCodeId() == null ? null : pallets.get(detail.getPalletCodeId());
+ if (pallet != null) vo.setPalletCode(pallet.getCode());
+ }
+ // 璐ㄦ銆佺敓浜у叆搴撶瓑娴佹按娌℃湁閿�鍞槑缁嗭紝鎵樼洏鐮佸洖閫�鍙栬鐮佸綋鍓嶇粦瀹氱殑鎵樼洏
+ if (StrUtil.isBlank(vo.getPalletCode()) && bag != null) {
+ vo.setPalletCode(bag.getPalletCode());
+ }
// 浜嬪姟绫诲瀷鍚嶇О
MesWmTransactionTypeEnum typeEnum = MesWmTransactionTypeEnum.valueOf(transaction.getType());
vo.setTypeName(typeEnum != null ? typeEnum.getName() : "鏈煡");
@@ -87,8 +146,22 @@
// 鐗╂枡淇℃伅
MesMdmItemDO item = itemMap.get(transaction.getItemId());
if (item != null) {
+ MesMdItemDO mesItem = mesItemMap.get(item.getId());
vo.setItemCode(item.getCode());
vo.setItemName(item.getName());
+ // 瑙勬牸锛氬搧绉嶇鐞嗘湭缁存姢鏃讹紝鍥為��鍙� MES 鐗╂枡瑙勬牸鍨嬪彿
+ vo.setSpecification(StrUtil.blankToDefault(item.getSpecification(),
+ mesItem != null ? mesItem.getSpecification() : null));
+ // 绫诲埆锛氫紭鍏堝搧绉嶅垎绫伙紝鍏舵 MES 鐗╂枡鍒嗙被
+ MdmItemCategoryRespDTO category = itemCategoryMap.get(item.getCategoryId());
+ String itemTypeName = category != null ? category.getName() : null;
+ if (StrUtil.isBlank(itemTypeName) && mesItem != null && mesItem.getItemTypeId() != null) {
+ MesMdItemTypeDO itemType = mesItemTypeMap.get(mesItem.getItemTypeId());
+ if (itemType != null) {
+ itemTypeName = itemType.getName();
+ }
+ }
+ vo.setItemTypeName(itemTypeName);
}
// 浠撳簱淇℃伅
MesWmWarehouseDO warehouse = warehouseMap.get(transaction.getWarehouseId());
@@ -164,4 +237,4 @@
}
}
-}
\ No newline at end of file
+}
--
Gitblit v1.9.3