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 |   81 ++++++++++++++++++++++++++++++++++++++++
 1 files changed, 80 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 10faf64..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());
@@ -119,6 +192,12 @@
             return "鏈煡";
         }
         switch (bizType) {
+            case MesBizTypeConstants.QC_SEED_QUALITY:
+                return "绉嶅瓙璐ㄦ";
+            case MesBizTypeConstants.WM_ITEM_RECEIPT_CANCEL:
+                return "閲囪喘鍏ュ簱鍙栨秷";
+            case MesBizTypeConstants.WM_STOCK_TAKING:
+                return "鐩樼偣璋冩暣";
             case MesBizTypeConstants.WM_STOCK_ADJUST_IN:
                 return "鑷畾涔夊叆搴�";
             case MesBizTypeConstants.WM_STOCK_ADJUST_OUT:
@@ -158,4 +237,4 @@
         }
     }
 
-}
\ No newline at end of file
+}

--
Gitblit v1.9.3