From 1536165d57b3c8450cbd53f45c61c36f66cc177c Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期四, 12 三月 2026 16:52:38 +0800
Subject: [PATCH] fix: 生产计划的产品规格与物料编码数据为空

---
 src/main/java/com/ruoyi/productionPlan/pojo/ProductionPlan.java                    |   23 +++++++++++
 src/main/java/com/ruoyi/productionPlan/service/impl/ProductionPlanServiceImpl.java |   44 +++++++++++++++++++---
 src/main/java/com/ruoyi/production/service/impl/ProductMaterialServiceImpl.java    |   14 ++----
 src/main/resources/mapper/productionPlan/ProductionPlanMapper.xml                  |   34 ++++++++---------
 4 files changed, 81 insertions(+), 34 deletions(-)

diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductMaterialServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductMaterialServiceImpl.java
index 76a52d3..bd32f1f 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductMaterialServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductMaterialServiceImpl.java
@@ -350,17 +350,13 @@
         for (ProductMaterialConfig materialConfig : materialConfigList) {
             LambdaQueryWrapper<ProductMaterial> wrapper = new LambdaQueryWrapper<>();
             wrapper.eq(ProductMaterial::getMaterialTypeId, materialConfig.getId())
-                    .select(ProductMaterial::getId, ProductMaterial::getMaterialName)
                     .like(materialName != null && !materialName.isEmpty(), ProductMaterial::getMaterialName, materialName);
             List<ProductMaterial> productMaterialList = list(wrapper);
-
-            if (productMaterialList != null && !productMaterialList.isEmpty()) {
-                ProductMaterialGroupDto dto = new ProductMaterialGroupDto();
-                dto.setConfigId(materialConfig.getId());
-                dto.setConfigName(materialConfig.getConfigName());
-                dto.setMaterialList(productMaterialList);
-                productMaterialMap.add(dto);
-            }
+            ProductMaterialGroupDto dto = new ProductMaterialGroupDto();
+            dto.setConfigId(materialConfig.getId());
+            dto.setConfigName(materialConfig.getConfigName());
+            dto.setMaterialList(productMaterialList);
+            productMaterialMap.add(dto);
         }
         return productMaterialMap;
     }
diff --git a/src/main/java/com/ruoyi/productionPlan/pojo/ProductionPlan.java b/src/main/java/com/ruoyi/productionPlan/pojo/ProductionPlan.java
index fc9b30f..30e5f17 100644
--- a/src/main/java/com/ruoyi/productionPlan/pojo/ProductionPlan.java
+++ b/src/main/java/com/ruoyi/productionPlan/pojo/ProductionPlan.java
@@ -59,10 +59,31 @@
     private String customerName;
 
     /**
+     * 鐗╂枡缂栫爜
+     */
+    @ApiModelProperty("鐗╂枡缂栫爜")
+    @Excel(name = "鐗╂枡缂栫爜")
+    private String materialCode;
+
+    /**
+     * 浜у搧鍚嶇О
+     */
+    @ApiModelProperty("浜у搧鍚嶇О")
+    @Excel(name = "浜у搧鍚嶇О")
+    private String productName;
+
+    /**
+     * 浜у搧瑙勬牸
+     */
+    @ApiModelProperty("浜у搧瑙勬牸")
+    @Excel(name = "浜у搧瑙勬牸")
+    private String productSpec;
+
+    /**
      * 鍏宠仈鐗╂枡淇℃伅琛↖D
      */
     @ApiModelProperty("鍏宠仈鐗╂枡淇℃伅琛↖D")
-    private Integer productMaterialId;
+    private Long productMaterialSkuId;
 
     /**
      * 闀�
diff --git a/src/main/java/com/ruoyi/productionPlan/service/impl/ProductionPlanServiceImpl.java b/src/main/java/com/ruoyi/productionPlan/service/impl/ProductionPlanServiceImpl.java
index de8cfe4..86d6439 100644
--- a/src/main/java/com/ruoyi/productionPlan/service/impl/ProductionPlanServiceImpl.java
+++ b/src/main/java/com/ruoyi/productionPlan/service/impl/ProductionPlanServiceImpl.java
@@ -15,8 +15,10 @@
 import com.ruoyi.common.utils.http.HttpUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.framework.config.AliDingConfig;
+import com.ruoyi.production.pojo.ProductMaterial;
 import com.ruoyi.production.pojo.ProductMaterialSku;
 import com.ruoyi.production.pojo.ProductOrder;
+import com.ruoyi.production.service.ProductMaterialService;
 import com.ruoyi.production.service.ProductMaterialSkuService;
 import com.ruoyi.production.service.ProductOrderService;
 import com.ruoyi.productionPlan.dto.ProductionPlanDto;
@@ -73,6 +75,9 @@
 
     @Autowired
     private ProductMaterialSkuService productMaterialSkuService;
+
+    @Autowired
+    private ProductMaterialService productMaterialService;
 
     /**
      * 鍚屾閿侊紝纭繚鎵嬪姩鍜屽畾鏃朵换鍔′笉鍚屾椂鎵ц
@@ -384,13 +389,23 @@
                 plan.setCustomerName(formData.getString("textField_lbkozohg"));
 
                 String materialCode = row.getString("textField_l9xo62q5");
+                plan.setMaterialCode(materialCode);
                 // 鏍规嵁鐗╂枡缂栫爜鏌ヨ鐗╂枡淇℃伅琛紝鍏宠仈鐗╂枡ID
                 if (StringUtils.isNotEmpty(materialCode)) {
                     LambdaQueryWrapper<ProductMaterialSku> skuQueryWrapper = new LambdaQueryWrapper<>();
                     skuQueryWrapper.eq(ProductMaterialSku::getMaterialCode, materialCode);
                     ProductMaterialSku sku = productMaterialSkuService.getOne(skuQueryWrapper);
-                    if (sku != null && sku.getMaterialId() != null) {
-                        plan.setProductMaterialId(sku.getMaterialId().intValue());
+                    if (sku != null) {
+                        plan.setProductMaterialSkuId(sku.getId());
+                        if (sku.getMaterialId() != null) {
+                            // 璁剧疆浜у搧鍚嶇О
+                            ProductMaterial material = productMaterialService.getById(sku.getMaterialId());
+                            if (material != null) {
+                                plan.setProductName(material.getMaterialName());
+                            }
+                        }
+                        // 璁剧疆瑙勬牸鍨嬪彿
+                        plan.setProductSpec(sku.getSpecification());
                     }
                 }
 
@@ -467,19 +482,19 @@
         //  Map (formInstanceId + materialCode)
         Map<String, ProductionPlan> existMap = new HashMap<>();
         for (ProductionPlan p : existList) {
-            String key = p.getFormInstanceId() + "_" + p.getProductMaterialId();
+            String key = p.getFormInstanceId() + "_" + p.getProductMaterialSkuId();
             existMap.put(key, p);
         }
 
         //  閬嶅巻鍚屾鏁版嵁
         for (ProductionPlan plan : list) {
-            String key = plan.getFormInstanceId() + "_" + plan.getProductMaterialId();
+            String key = plan.getFormInstanceId() + "_" + plan.getProductMaterialSkuId();
             ProductionPlan exist = existMap.get(key);
             if (exist == null) {
                 // 鏂板
                 this.save(plan);
                 affected++;
-                log.info("鏂板鏁版嵁 formInstanceId={}, materialCode={}", plan.getFormInstanceId(), plan.getProductMaterialId());
+                log.info("鏂板鏁版嵁 formInstanceId={}, materialCode={}", plan.getFormInstanceId(), plan.getProductMaterialSkuId());
             } else {
                 // 鍒ゆ柇鏄惁闇�瑕佹洿鏂�
                 if (exist.getFormModifiedTime() == null || !exist.getFormModifiedTime().equals(plan.getFormModifiedTime())) {
@@ -487,7 +502,7 @@
                     plan.setCreateTime(exist.getCreateTime());
                     this.updateById(plan);
                     affected++;
-                    log.info("鏇存柊鏁版嵁 formInstanceId={}, materialCode={}", plan.getFormInstanceId(), plan.getProductMaterialId());
+                    log.info("鏇存柊鏁版嵁 formInstanceId={}, materialCode={}", plan.getFormInstanceId(), plan.getProductMaterialSkuId());
                 }
             }
         }
@@ -541,6 +556,23 @@
             entity.setDataSourceType(2);
             entity.setDataSyncType(1);
 
+            // 鏍规嵁鐗╂枡缂栫爜濉厖鍏宠仈ID
+            if (StringUtils.isNotEmpty(dto.getMaterialCode())) {
+                LambdaQueryWrapper<ProductMaterialSku> skuQueryWrapper = new LambdaQueryWrapper<>();
+                skuQueryWrapper.eq(ProductMaterialSku::getMaterialCode, dto.getMaterialCode());
+                ProductMaterialSku sku = productMaterialSkuService.getOne(skuQueryWrapper);
+                if (sku != null) {
+                    entity.setProductMaterialSkuId(sku.getId());
+                    if (sku.getMaterialId() != null) {
+                        ProductMaterial material = productMaterialService.getById(sku.getMaterialId());
+                        if (material != null) {
+                            entity.setProductName(material.getMaterialName());
+                        }
+                    }
+                    entity.setProductSpec(sku.getSpecification());
+                }
+            }
+
             entityList.add(entity);
         }
         this.saveBatch(entityList);
diff --git a/src/main/resources/mapper/productionPlan/ProductionPlanMapper.xml b/src/main/resources/mapper/productionPlan/ProductionPlanMapper.xml
index 88ec8fb..204a386 100644
--- a/src/main/resources/mapper/productionPlan/ProductionPlanMapper.xml
+++ b/src/main/resources/mapper/productionPlan/ProductionPlanMapper.xml
@@ -11,10 +11,7 @@
         <result property="serialNo" column="serial_no"/>
         <result property="applyNo" column="apply_no"/>
         <result property="customerName" column="customer_name"/>
-        <result property="materialCode" column="material_code"/>
-        <result property="productMaterialId" column="product_material_id"/>
-        <result property="productName" column="product_name"/>
-        <result property="productSpec" column="product_spec"/>
+        <result property="productMaterialSkuId" column="product_material_sku_id"/>
         <result property="length" column="length"/>
         <result property="width" column="width"/>
         <result property="height" column="height"/>
@@ -38,28 +35,28 @@
         <result property="totalCount" column="total_count"/>
     </resultMap>
 
-
     <select id="listPage" resultType="com.ruoyi.productionPlan.dto.ProductionPlanDto">
         SELECT
         pp.*,
-        pm.product_name,
-        pm.specification,
-        pm.material_code,
+        pms.material_code AS materialCode,
+        pms.specification AS specification,
+        pm.material_name AS productName,
         pm.base_unit
         FROM production_plan pp
-        left join product_material pm on pp.product_material_id = pm.id
+        left join product_material_sku pms on pp.product_material_sku_id = pms.id
+        left join product_material pm on pms.material_id = pm.id
         WHERE 1 = 1
         <if test="c.customerName != null and c.customerName != '' ">
             AND pp.customer_name LIKE CONCAT('%',#{c.customerName},'%')
         </if>
         <if test="c.productName != null and c.productName != '' ">
-            AND pm.product_name LIKE CONCAT('%',#{c.productName},'%')
-        </if>
-        <if test="c.specification != null and c.specification != '' ">
-            AND pm.specification LIKE CONCAT('%',#{c.specification},'%')
+            AND pm.material_name LIKE CONCAT('%',#{c.productName},'%')
         </if>
         <if test="c.materialCode != null and c.materialCode != '' ">
-            AND pm.material_code LIKE CONCAT('%',#{c.materialCode},'%')
+            AND pms.material_code LIKE CONCAT('%',#{c.materialCode},'%')
+        </if>
+        <if test="c.specification != null and c.specification != '' ">
+            AND pms.specification LIKE CONCAT('%',#{c.specification},'%')
         </if>
         <if test="c.startDate != null">
             AND pp.start_date &gt;= DATE_FORMAT(#{c.startDate},'%Y-%m-%d')
@@ -101,12 +98,13 @@
     <select id="selectWithMaterialByIds" resultType="com.ruoyi.productionPlan.dto.ProductionPlanDto">
         SELECT
         pp.*,
-        pm.product_name,
-        pm.specification,
-        pm.material_code,
+        pms.material_code AS materialCode,
+        pms.specification AS specification,
+        pm.material_name AS productName,
         pm.base_unit
         FROM production_plan pp
-        LEFT JOIN product_material pm ON pp.product_material_id = pm.id
+        LEFT JOIN product_material_sku pms ON pp.product_material_sku_id = pms.id
+        LEFT JOIN product_material pm ON pms.material_id = pm.id
         WHERE pp.id IN
         <foreach collection="ids" item="id" open="(" separator="," close=")">
             #{id}

--
Gitblit v1.9.3