From 4a82ac1bfb3e3cd04d6dd6c07aaee6c0d70df13e Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期四, 12 三月 2026 09:59:32 +0800
Subject: [PATCH] 主生产计划:产品信息改为关联查询

---
 src/main/java/com/ruoyi/productionPlan/mapper/ProductionPlanMapper.java            |    2 +
 src/main/java/com/ruoyi/productionPlan/pojo/ProductionPlan.java                    |   22 -----------
 src/main/java/com/ruoyi/productionPlan/service/impl/ProductionPlanServiceImpl.java |   20 +++------
 src/main/java/com/ruoyi/productionPlan/dto/ProductionPlanDto.java                  |   26 +++++++++++++
 src/main/resources/mapper/productionPlan/ProductionPlanMapper.xml                  |   31 +++++++++++++--
 5 files changed, 61 insertions(+), 40 deletions(-)

diff --git a/src/main/java/com/ruoyi/productionPlan/dto/ProductionPlanDto.java b/src/main/java/com/ruoyi/productionPlan/dto/ProductionPlanDto.java
index 69e2556..f44bfd3 100644
--- a/src/main/java/com/ruoyi/productionPlan/dto/ProductionPlanDto.java
+++ b/src/main/java/com/ruoyi/productionPlan/dto/ProductionPlanDto.java
@@ -1,6 +1,7 @@
 package com.ruoyi.productionPlan.dto;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
 import com.ruoyi.productionPlan.pojo.ProductionPlan;
 
 import io.swagger.annotations.ApiModelProperty;
@@ -13,6 +14,31 @@
 
 @Data
 public class ProductionPlanDto extends ProductionPlan {
+    /**
+     * 鐗╂枡缂栫爜
+     */
+    @ApiModelProperty("鐗╂枡缂栫爜")
+    @Excel(name = "鐗╂枡缂栫爜")
+    private String materialCode;
+
+    /**
+     * 浜у搧鍚嶇О
+     */
+    @ApiModelProperty("浜у搧鍚嶇О")
+    @Excel(name = "浜у搧鍚嶇О")
+    private String productName;
+
+    /**
+     * 浜у搧瑙勬牸
+     */
+    @ApiModelProperty("浜у搧瑙勬牸")
+    @Excel(name = "浜у搧瑙勬牸")
+    private String specification;
+
+    @ApiModelProperty("浜у搧鍗曚綅")
+    @Excel(name = "浜у搧鍗曚綅")
+    private String baseUnit;
+
     @ApiModelProperty(value = "鐢熶骇璁″垝id闆嗗悎")
     private List<Long> ids;
 
diff --git a/src/main/java/com/ruoyi/productionPlan/mapper/ProductionPlanMapper.java b/src/main/java/com/ruoyi/productionPlan/mapper/ProductionPlanMapper.java
index d6a7577..042ef22 100644
--- a/src/main/java/com/ruoyi/productionPlan/mapper/ProductionPlanMapper.java
+++ b/src/main/java/com/ruoyi/productionPlan/mapper/ProductionPlanMapper.java
@@ -24,4 +24,6 @@
 
     List<ProductionPlanSummaryDto> selectSummaryByProductType(ProductionPlanSummaryDto query);
 
+    List<ProductionPlanDto> selectWithMaterialByIds(@Param("ids") List<Long> ids);
+
 }
diff --git a/src/main/java/com/ruoyi/productionPlan/pojo/ProductionPlan.java b/src/main/java/com/ruoyi/productionPlan/pojo/ProductionPlan.java
index 8ecf1e8..fc9b30f 100644
--- a/src/main/java/com/ruoyi/productionPlan/pojo/ProductionPlan.java
+++ b/src/main/java/com/ruoyi/productionPlan/pojo/ProductionPlan.java
@@ -59,32 +59,10 @@
     private String customerName;
 
     /**
-     * 鐗╂枡缂栫爜
-     */
-    @ApiModelProperty("鐗╂枡缂栫爜")
-    @Excel(name = "鐗╂枡缂栫爜")
-    private String materialCode;
-
-
-    /**
      * 鍏宠仈鐗╂枡淇℃伅琛↖D
      */
     @ApiModelProperty("鍏宠仈鐗╂枡淇℃伅琛↖D")
     private Integer productMaterialId;
-
-    /**
-     * 浜у搧鍚嶇О
-     */
-    @ApiModelProperty("浜у搧鍚嶇О")
-    @Excel(name = "浜у搧鍚嶇О")
-    private String productName;
-
-    /**
-     * 浜у搧瑙勬牸
-     */
-    @ApiModelProperty("浜у搧瑙勬牸")
-    @Excel(name = "浜у搧瑙勬牸")
-    private String productSpec;
 
     /**
      * 闀�
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 6025b24..1fa88f9 100644
--- a/src/main/java/com/ruoyi/productionPlan/service/impl/ProductionPlanServiceImpl.java
+++ b/src/main/java/com/ruoyi/productionPlan/service/impl/ProductionPlanServiceImpl.java
@@ -111,8 +111,7 @@
         }
 
         //  鏌ヨ涓荤敓浜ц鍒�
-        List<ProductionPlan> plans = productionPlanMapper.selectBatchIds(productionPlanDto.getIds());
-        plans.sort(Comparator.comparingLong(ProductionPlan::getId));
+        List<ProductionPlanDto> plans = productionPlanMapper.selectWithMaterialByIds(productionPlanDto.getIds());
 
         //  鏍¢獙鏄惁瀛樺湪涓嶅悓鐨勪骇鍝佸悕绉�
         String firstProductName = plans.get(0).getProductName();
@@ -121,11 +120,10 @@
         }
 
         // 鏍¢獙鏄惁瀛樺湪涓嶅悓鐨勪骇鍝佽鏍�
-        String firstProductSpec = plans.get(0).getProductSpec();
-        if (plans.stream().anyMatch(p -> !p.getProductSpec().equals(firstProductSpec))) {
+        String firstProductSpec = plans.get(0).getSpecification();
+        if (plans.stream().anyMatch(p -> !p.getSpecification().equals(firstProductSpec))) {
             throw new BaseException("鍚堝苟澶辫触锛屽瓨鍦ㄤ笉鍚岀殑浜у搧瑙勬牸");
         }
-
 
         // 鍙犲姞鍓╀綑鏂规暟
         BigDecimal totalRemainingVolume = plans.stream()
@@ -386,8 +384,6 @@
                 plan.setCustomerName(formData.getString("textField_lbkozohg"));
 
                 String materialCode = row.getString("textField_l9xo62q5");
-                plan.setMaterialCode(materialCode);
-
                 // 鏍规嵁鐗╂枡缂栫爜鏌ヨ鐗╂枡淇℃伅琛紝鍏宠仈鐗╂枡ID
                 if (StringUtils.isNotEmpty(materialCode)) {
                     LambdaQueryWrapper<ProductMaterial> queryWrapper = new LambdaQueryWrapper<>();
@@ -398,8 +394,6 @@
                     }
                 }
 
-                plan.setProductName(row.getString("textField_l9xo62q7"));
-                plan.setProductSpec(row.getString("textField_l9xo62q8"));
                 plan.setLength(row.getInteger("numberField_lb7lgatg_value"));
                 plan.setWidth(row.getInteger("numberField_lb7lgath_value"));
                 plan.setHeight(row.getInteger("numberField_lb7lgati_value"));
@@ -473,19 +467,19 @@
         //  Map (formInstanceId + materialCode)
         Map<String, ProductionPlan> existMap = new HashMap<>();
         for (ProductionPlan p : existList) {
-            String key = p.getFormInstanceId() + "_" + p.getMaterialCode();
+            String key = p.getFormInstanceId() + "_" + p.getProductMaterialId();
             existMap.put(key, p);
         }
 
         //  閬嶅巻鍚屾鏁版嵁
         for (ProductionPlan plan : list) {
-            String key = plan.getFormInstanceId() + "_" + plan.getMaterialCode();
+            String key = plan.getFormInstanceId() + "_" + plan.getProductMaterialId();
             ProductionPlan exist = existMap.get(key);
             if (exist == null) {
                 // 鏂板
                 this.save(plan);
                 affected++;
-                log.info("鏂板鏁版嵁 formInstanceId={}, materialCode={}", plan.getFormInstanceId(), plan.getMaterialCode());
+                log.info("鏂板鏁版嵁 formInstanceId={}, materialCode={}", plan.getFormInstanceId(), plan.getProductMaterialId());
             } else {
                 // 鍒ゆ柇鏄惁闇�瑕佹洿鏂�
                 if (exist.getFormModifiedTime() == null || !exist.getFormModifiedTime().equals(plan.getFormModifiedTime())) {
@@ -493,7 +487,7 @@
                     plan.setCreateTime(exist.getCreateTime());
                     this.updateById(plan);
                     affected++;
-                    log.info("鏇存柊鏁版嵁 formInstanceId={}, materialCode={}", plan.getFormInstanceId(), plan.getMaterialCode());
+                    log.info("鏇存柊鏁版嵁 formInstanceId={}, materialCode={}", plan.getFormInstanceId(), plan.getProductMaterialId());
                 }
             }
         }
diff --git a/src/main/resources/mapper/productionPlan/ProductionPlanMapper.xml b/src/main/resources/mapper/productionPlan/ProductionPlanMapper.xml
index 43df1a5..88ec8fb 100644
--- a/src/main/resources/mapper/productionPlan/ProductionPlanMapper.xml
+++ b/src/main/resources/mapper/productionPlan/ProductionPlanMapper.xml
@@ -40,20 +40,26 @@
 
 
     <select id="listPage" resultType="com.ruoyi.productionPlan.dto.ProductionPlanDto">
-        SELECT *
+        SELECT
+        pp.*,
+        pm.product_name,
+        pm.specification,
+        pm.material_code,
+        pm.base_unit
         FROM production_plan pp
+        left join product_material pm on pp.product_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 pp.product_name LIKE CONCAT('%',#{c.productName},'%')
+            AND pm.product_name LIKE CONCAT('%',#{c.productName},'%')
         </if>
-        <if test="c.productSpec != null and c.productSpec != '' ">
-            AND pp.product_spec LIKE CONCAT('%',#{c.productSpec},'%')
+        <if test="c.specification != null and c.specification != '' ">
+            AND pm.specification LIKE CONCAT('%',#{c.specification},'%')
         </if>
         <if test="c.materialCode != null and c.materialCode != '' ">
-            AND pp.material_code LIKE CONCAT('%',#{c.materialCode},'%')
+            AND pm.material_code LIKE CONCAT('%',#{c.materialCode},'%')
         </if>
         <if test="c.startDate != null">
             AND pp.start_date &gt;= DATE_FORMAT(#{c.startDate},'%Y-%m-%d')
@@ -92,4 +98,19 @@
         height
     </select>
 
+    <select id="selectWithMaterialByIds" resultType="com.ruoyi.productionPlan.dto.ProductionPlanDto">
+        SELECT
+        pp.*,
+        pm.product_name,
+        pm.specification,
+        pm.material_code,
+        pm.base_unit
+        FROM production_plan pp
+        LEFT JOIN product_material pm ON pp.product_material_id = pm.id
+        WHERE pp.id IN
+        <foreach collection="ids" item="id" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+        ORDER BY pp.id ASC
+    </select>
 </mapper>
\ No newline at end of file

--
Gitblit v1.9.3