From ac4835a14674993985d3e57553aae8516a09afcc Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期一, 03 八月 2026 13:43:21 +0800
Subject: [PATCH] 销售订单规格型号单位不回显问题修改

---
 yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/sale/ErpSaleOrderController.java      |   43 ++++++++++++++++++++++++++++++++-----------
 yudao-module-mdm-api/src/main/java/cn/iocoder/yudao/module/mdm/api/unit/dto/MdmUnitMeasureRespDTO.java            |    0 
 yudao-module-mdm-api/src/main/java/cn/iocoder/yudao/module/mdm/api/unit/MdmUnitMeasureApi.java                    |   13 +++++++++++++
 yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/sale/vo/order/ErpSaleOrderRespVO.java |    3 +++
 4 files changed, 48 insertions(+), 11 deletions(-)

diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/sale/ErpSaleOrderController.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/sale/ErpSaleOrderController.java
index 3e2adf4..018261f 100644
--- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/sale/ErpSaleOrderController.java
+++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/sale/ErpSaleOrderController.java
@@ -19,6 +19,8 @@
 import cn.iocoder.yudao.module.erp.service.sale.ErpSaleOrderService;
 import cn.iocoder.yudao.module.mdm.api.item.MdmItemApi;
 import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO;
+import cn.iocoder.yudao.module.mdm.api.unit.MdmUnitMeasureApi;
+import cn.iocoder.yudao.module.mdm.api.unit.dto.MdmUnitMeasureRespDTO;
 import cn.iocoder.yudao.module.mes.api.mps.MesProMpsApi;
 import cn.iocoder.yudao.module.mes.api.productsales.MesWmProductSalesLineApi;
 import cn.iocoder.yudao.module.mes.api.salesnotice.MesWmSalesNoticeApi;
@@ -68,6 +70,8 @@
     private MesProMpsApi mpsApi;
     @Resource
     private StorageAttachmentApi storageAttachmentApi;
+    @Resource
+    private MdmUnitMeasureApi mdmUnitMeasureApi;
 
     @PostMapping("/create")
     @Operation(summary = "鍒涘缓閿�鍞鍗�")
@@ -143,19 +147,30 @@
         if (saleOrder == null) {
             return success(null);
         }
+        // 1. 鏌ヨ璁㈠崟椤�
         List<ErpSaleOrderItemDO> saleOrderItemList = saleOrderService.getSaleOrderItemListByOrderId(id);
+        // 2. 鎵归噺鏌ヨ鍏宠仈鏁版嵁
         Map<Long, MdmItemRespDTO> itemMap = mdmItemApi.getItemMap(
                 convertSet(saleOrderItemList, ErpSaleOrderItemDO::getProductId));
         Map<Long, String> batchCodeMap = productSalesLineApi.getBatchCodesBySaleOrderItemIds(
                 convertSet(saleOrderItemList, ErpSaleOrderItemDO::getId));
-        return success(BeanUtils.toBean(saleOrder, ErpSaleOrderRespVO.class, saleOrderVO ->
-                saleOrderVO.setItems(BeanUtils.toBean(saleOrderItemList, ErpSaleOrderRespVO.Item.class, item -> {
-                    // 搴撳瓨淇℃伅鏆備笉鏌ヨ锛堜粨鍌ㄧ墿娴佹ā鍧楋級
-                    item.setStockCount(BigDecimal.ZERO);
-                    item.setBatchCode(batchCodeMap.get(item.getId()));
-                    MapUtils.findAndThen(itemMap, item.getProductId(), mdmItem -> item.setProductName(mdmItem.getName())
-                            .setProductBarCode(mdmItem.getBarCode()));
-                })).setAttachmentList(storageAttachmentApi.listAttachments("erp_sale_order", id))));
+        Map<Long, MdmUnitMeasureRespDTO> unitMeasureMap = mdmUnitMeasureApi.getUnitMeasureMap(
+                convertSet(saleOrderItemList, ErpSaleOrderItemDO::getProductUnitId));
+        // 3. 杞崲璁㈠崟椤�
+        List<ErpSaleOrderRespVO.Item> itemVOList = BeanUtils.toBean(saleOrderItemList, ErpSaleOrderRespVO.Item.class, item -> {
+            item.setStockCount(BigDecimal.ZERO); // 搴撳瓨淇℃伅鏆備笉鏌ヨ锛堜粨鍌ㄧ墿娴佹ā鍧楋級
+            item.setBatchCode(batchCodeMap.get(item.getId()));
+            MapUtils.findAndThen(itemMap, item.getProductId(), mdmItem ->
+                    item.setProductName(mdmItem.getName()).setProductBarCode(mdmItem.getBarCode())
+                            .setProductSpecification(mdmItem.getSpecification()));
+            MapUtils.findAndThen(unitMeasureMap, item.getProductUnitId(), unit ->
+                    item.setProductUnitName(unit.getName()));
+        });
+        // 4. 缁勮鍝嶅簲
+        ErpSaleOrderRespVO saleOrderVO = BeanUtils.toBean(saleOrder, ErpSaleOrderRespVO.class);
+        saleOrderVO.setItems(itemVOList);
+        saleOrderVO.setAttachmentList(storageAttachmentApi.listAttachments("erp_sale_order", id));
+        return success(saleOrderVO);
     }
 
     @GetMapping("/page")
@@ -201,7 +216,10 @@
         // 1.6 鍑哄簱鎵瑰彿
         Map<Long, String> batchCodeMap = productSalesLineApi.getBatchCodesBySaleOrderItemIds(
                 convertSet(saleOrderItemList, ErpSaleOrderItemDO::getId));
-        // 1.7 妫�鏌ユ槸鍚﹀彲浠ョ敓鎴愬彂璐ч�氱煡鍗曪紙闇�瑕佺敓浜х殑鏄庣粏瀵瑰簲鐨� MPS 鏄惁宸插畬鎴愶級
+        // 1.7 璁¢噺鍗曚綅
+        Map<Long, MdmUnitMeasureRespDTO> unitMeasureMap = mdmUnitMeasureApi.getUnitMeasureMap(
+                convertSet(saleOrderItemList, ErpSaleOrderItemDO::getProductUnitId));
+        // 1.8 妫�鏌ユ槸鍚﹀彲浠ョ敓鎴愬彂璐ч�氱煡鍗曪紙闇�瑕佺敓浜х殑鏄庣粏瀵瑰簲鐨� MPS 鏄惁宸插畬鎴愶級
         // 绛涢�夊嚭闇�瑕佺敓浜х殑鏄庣粏ID
         List<Long> needProductionItemIds = saleOrderItemList.stream()
                 .filter(item -> item.getNeedProduction() != null && item.getNeedProduction() == 1)
@@ -240,8 +258,11 @@
             saleOrder.setItems(BeanUtils.toBean(saleOrderItemMap.get(saleOrder.getId()), ErpSaleOrderRespVO.Item.class,
                     item -> {
                         item.setBatchCode(batchCodeMap.get(item.getId()));
-                        MapUtils.findAndThen(itemMap, item.getProductId(), mdmItem -> item.setProductName(mdmItem.getName())
-                                .setProductBarCode(mdmItem.getBarCode()));
+                        MapUtils.findAndThen(itemMap, item.getProductId(), mdmItem ->
+                                item.setProductName(mdmItem.getName()).setProductBarCode(mdmItem.getBarCode())
+                                        .setProductSpecification(mdmItem.getSpecification()));
+                        MapUtils.findAndThen(unitMeasureMap, item.getProductUnitId(), unit ->
+                                item.setProductUnitName(unit.getName()));
                     }));
             saleOrder.setProductNames(CollUtil.join(saleOrder.getItems(), "锛�", ErpSaleOrderRespVO.Item::getProductName));
             MapUtils.findAndThen(customerMap, saleOrder.getCustomerId(), supplier -> saleOrder.setCustomerName(supplier.getName()));
diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/sale/vo/order/ErpSaleOrderRespVO.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/sale/vo/order/ErpSaleOrderRespVO.java
index 4070879..64926fa 100644
--- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/sale/vo/order/ErpSaleOrderRespVO.java
+++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/sale/vo/order/ErpSaleOrderRespVO.java
@@ -181,6 +181,9 @@
         @Schema(description = "搴撳瓨鏁伴噺", requiredMode = Schema.RequiredMode.REQUIRED, example = "100.00")
         private BigDecimal stockCount; // 璇ュ瓧娈典粎浠呭湪璇︽儏鍜岀紪杈戞椂浣跨敤
 
+        @Schema(description = "瑙勬牸鍨嬪彿", requiredMode = Schema.RequiredMode.REQUIRED, example = "-")
+        private String productSpecification;
+
     }
 
 }
\ No newline at end of file
diff --git a/yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/api/unit/MdmUnitMeasureApi.java b/yudao-module-mdm-api/src/main/java/cn/iocoder/yudao/module/mdm/api/unit/MdmUnitMeasureApi.java
similarity index 70%
rename from yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/api/unit/MdmUnitMeasureApi.java
rename to yudao-module-mdm-api/src/main/java/cn/iocoder/yudao/module/mdm/api/unit/MdmUnitMeasureApi.java
index ab82a8a..20b7634 100644
--- a/yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/api/unit/MdmUnitMeasureApi.java
+++ b/yudao-module-mdm-api/src/main/java/cn/iocoder/yudao/module/mdm/api/unit/MdmUnitMeasureApi.java
@@ -1,10 +1,12 @@
 package cn.iocoder.yudao.module.mdm.api.unit;
 
 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
 import cn.iocoder.yudao.module.mdm.api.unit.dto.MdmUnitMeasureRespDTO;
 
 import java.util.Collection;
 import java.util.List;
+import java.util.Map;
 
 /**
  * MDM 璁¢噺鍗曚綅 API 鎺ュ彛
@@ -32,6 +34,17 @@
     CommonResult<List<MdmUnitMeasureRespDTO>> getUnitMeasureList(Collection<Long> ids);
 
     /**
+     * 鑾峰彇璁¢噺鍗曚綅 Map
+     *
+     * @param ids 鍗曚綅缂栧彿鍒楄〃
+     * @return 璁¢噺鍗曚綅 Map
+     */
+    default Map<Long, MdmUnitMeasureRespDTO> getUnitMeasureMap(Collection<Long> ids) {
+        List<MdmUnitMeasureRespDTO> list = getUnitMeasureList(ids).getCheckedData();
+        return CollectionUtils.convertMap(list, MdmUnitMeasureRespDTO::getId);
+    }
+
+    /**
      * 鏍¢獙璁¢噺鍗曚綅瀛樺湪
      *
      * @param id 鍗曚綅缂栧彿
diff --git a/yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/api/unit/dto/MdmUnitMeasureRespDTO.java b/yudao-module-mdm-api/src/main/java/cn/iocoder/yudao/module/mdm/api/unit/dto/MdmUnitMeasureRespDTO.java
similarity index 100%
rename from yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/api/unit/dto/MdmUnitMeasureRespDTO.java
rename to yudao-module-mdm-api/src/main/java/cn/iocoder/yudao/module/mdm/api/unit/dto/MdmUnitMeasureRespDTO.java

--
Gitblit v1.9.3