From 8e4456bfa6dc84a1c37c13ee515fa9d6347cc480 Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期四, 23 四月 2026 16:27:45 +0800
Subject: [PATCH] fix:1.生产计划 2.生产订单

---
 src/main/java/com/ruoyi/production/bean/dto/ProductionOrderDto.java             |    2 
 src/main/java/com/ruoyi/production/bean/dto/ProductionPlanDto.java              |    7 +
 src/main/java/com/ruoyi/production/service/impl/ProductionPlanServiceImpl.java  |   94 ++++++++++++-
 src/main/java/com/ruoyi/production/pojo/ProductionPlan.java                     |   10 -
 src/main/java/com/ruoyi/production/mapper/ProductionPlanMapper.java             |    3 
 src/main/java/com/ruoyi/production/pojo/ProductionOrder.java                    |    2 
 src/main/java/com/ruoyi/production/service/impl/ProductionOrderServiceImpl.java |   52 +------
 src/main/resources/mapper/production/ProductionOrderMapper.xml                  |  113 ++++++++++++++++
 src/main/resources/mapper/production/ProductionPlanMapper.xml                   |   57 ++-----
 src/main/java/com/ruoyi/production/bean/vo/ProductionOrderVo.java               |    8 +
 src/main/java/com/ruoyi/production/bean/vo/ProductionPlanVo.java                |   16 ++
 11 files changed, 262 insertions(+), 102 deletions(-)

diff --git a/src/main/java/com/ruoyi/production/bean/dto/ProductionOrderDto.java b/src/main/java/com/ruoyi/production/bean/dto/ProductionOrderDto.java
index c171f2e..9921344 100644
--- a/src/main/java/com/ruoyi/production/bean/dto/ProductionOrderDto.java
+++ b/src/main/java/com/ruoyi/production/bean/dto/ProductionOrderDto.java
@@ -1,10 +1,12 @@
 package com.ruoyi.production.bean.dto;
 
 import com.ruoyi.production.pojo.ProductionOrder;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
 @EqualsAndHashCode(callSuper = true)
 @Data
+@Schema(name = "ProductionOrderDto", description = "鐢熶骇璁㈠崟鏌ヨ瀵硅薄")
 public class ProductionOrderDto extends ProductionOrder {
 }
diff --git a/src/main/java/com/ruoyi/production/bean/dto/ProductionPlanDto.java b/src/main/java/com/ruoyi/production/bean/dto/ProductionPlanDto.java
index b7adae6..3f6ef76 100644
--- a/src/main/java/com/ruoyi/production/bean/dto/ProductionPlanDto.java
+++ b/src/main/java/com/ruoyi/production/bean/dto/ProductionPlanDto.java
@@ -31,6 +31,13 @@
     private String productName;
 
     /**
+     * 瀹㈡埛鍚嶇О
+     */
+    @Schema(description = "瀹㈡埛鍚嶇О")
+    @Excel(name = "瀹㈡埛鍚嶇О")
+    private String customerName;
+
+    /**
      * 浜у搧瑙勬牸
      */
     @Schema(description = "浜у搧瑙勬牸")
diff --git a/src/main/java/com/ruoyi/production/bean/vo/ProductionOrderVo.java b/src/main/java/com/ruoyi/production/bean/vo/ProductionOrderVo.java
index 05ca96d..81e6c3e 100644
--- a/src/main/java/com/ruoyi/production/bean/vo/ProductionOrderVo.java
+++ b/src/main/java/com/ruoyi/production/bean/vo/ProductionOrderVo.java
@@ -2,21 +2,29 @@
 
 import com.ruoyi.basic.dto.StorageBlobVO;
 import com.ruoyi.production.pojo.ProductionOrder;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
 import java.util.List;
 
 @Data
+@Schema(name = "ProductionOrderVo", description = "鐢熶骇璁㈠崟杩斿洖瀵硅薄")
 public class ProductionOrderVo extends ProductionOrder {
+    @Schema(description = "閿�鍞悎鍚屽彿")
     private String salesContractNo;
 
+    @Schema(description = "瀹㈡埛鍚嶇О")
     private String customerName;
 
+    @Schema(description = "浜у搧鍚嶇О")
     private String productName;
 
+    @Schema(description = "瑙勬牸鍨嬪彿")
     private String model;
 
+    @Schema(description = "宸ヨ壓璺嚎缂栫爜")
     private String processRouteCode;
 
+    @Schema(description = "浜у搧鍥剧墖")
     private List<StorageBlobVO> productImages;
 }
diff --git a/src/main/java/com/ruoyi/production/bean/vo/ProductionPlanVo.java b/src/main/java/com/ruoyi/production/bean/vo/ProductionPlanVo.java
index 54326de..4c0dbe3 100644
--- a/src/main/java/com/ruoyi/production/bean/vo/ProductionPlanVo.java
+++ b/src/main/java/com/ruoyi/production/bean/vo/ProductionPlanVo.java
@@ -1,10 +1,26 @@
 package com.ruoyi.production.bean.vo;
 
 import com.ruoyi.production.pojo.ProductionPlan;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
 @EqualsAndHashCode(callSuper = true)
 @Data
+@Schema(name = "ProductionPlanVo", description = "鐢熶骇璁″垝杩斿洖瀵硅薄")
 public class ProductionPlanVo extends ProductionPlan {
+    @Schema(description = "鐗╂枡缂栫爜")
+    private String materialCode;
+
+    @Schema(description = "浜у搧鍚嶇О")
+    private String productName;
+
+    @Schema(description = "瑙勬牸鍨嬪彿")
+    private String model;
+
+    @Schema(description = "鍗曚綅")
+    private String unit;
+
+    @Schema(description = "鍏宠仈浜у搧鐗╂枡ID")
+    private Long productMaterialId;
 }
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductionPlanMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductionPlanMapper.java
index 892c633..9810b6e 100644
--- a/src/main/java/com/ruoyi/production/mapper/ProductionPlanMapper.java
+++ b/src/main/java/com/ruoyi/production/mapper/ProductionPlanMapper.java
@@ -4,6 +4,7 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.production.bean.dto.ProductionPlanDto;
+import com.ruoyi.production.bean.vo.ProductionPlanVo;
 import com.ruoyi.production.pojo.ProductionPlan;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -21,7 +22,7 @@
 @Mapper
 public interface ProductionPlanMapper extends BaseMapper<ProductionPlan> {
 
-    IPage<ProductionPlanDto> listPage(Page page, @Param("c") ProductionPlanDto productionPlanDto);
+    IPage<ProductionPlanVo> listPage(Page<ProductionPlanDto> page, @Param("c") ProductionPlanDto productionPlanDto);
 
     List<ProductionPlanDto> selectWithMaterialByIds(@Param("ids") List<Long> ids);
 
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductionOrder.java b/src/main/java/com/ruoyi/production/pojo/ProductionOrder.java
index cb801b5..145fad6 100644
--- a/src/main/java/com/ruoyi/production/pojo/ProductionOrder.java
+++ b/src/main/java/com/ruoyi/production/pojo/ProductionOrder.java
@@ -75,7 +75,7 @@
     @TableField(fill = FieldFill.INSERT)
     private Long deptId;
 
-    @Schema(description = "璁″垝瀹屾垚鏃堕棿銆傞�夊~锛涙寜鐢熶骇璁″垝鐢熸垚璁㈠崟鏃讹紝绯荤粺浼氫紭鍏堣嚜鍔ㄥ甫鍑轰氦鏈熴��")
+    @Schema(description = "璁″垝瀹屾垚鏃堕棿")
     @JsonFormat(pattern = "yyyy-MM-dd")
     @DateTimeFormat(pattern = "yyyy-MM-dd")
     private LocalDate planCompleteTime;
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductionPlan.java b/src/main/java/com/ruoyi/production/pojo/ProductionPlan.java
index 868367c..eb0ef6d 100644
--- a/src/main/java/com/ruoyi/production/pojo/ProductionPlan.java
+++ b/src/main/java/com/ruoyi/production/pojo/ProductionPlan.java
@@ -1,13 +1,13 @@
 package com.ruoyi.production.pojo;
 
 import com.baomidou.mybatisplus.annotation.*;
-import com.ruoyi.framework.aspectj.lang.annotation.Excel;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Getter;
 import lombok.Setter;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 
 /**
@@ -34,7 +34,7 @@
     private String mpsNo;
 
     @Schema(description = "闇�姹傛棩鏈�")
-    private LocalDateTime requiredDate;
+    private LocalDate requiredDate;
 
     @Schema(description = "澶囨敞")
     private String remark;
@@ -61,10 +61,6 @@
     @Schema(description = "闇�姹傛暟閲�")
     private BigDecimal qtyRequired;
 
-    @Schema(description = "鐘舵��")
-    @TableLogic
-    private String state;
-
     @Schema(description = "鏄惁涓嬪彂鍒堕�犺鍗�")
     private Boolean issued;
 
@@ -75,7 +71,7 @@
     private String isAudit;
 
     @Schema(description = "鎵胯鏃ユ湡")
-    private LocalDateTime promisedDeliveryDate;
+    private LocalDate promisedDeliveryDate;
 
     @Schema(description = "鐢宠鍗曠紪鍙�")
     private String applyNo;
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionOrderServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionOrderServiceImpl.java
index e48509e..c6d90cf 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionOrderServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionOrderServiceImpl.java
@@ -15,60 +15,24 @@
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.production.bean.dto.ProductionOrderDto;
 import com.ruoyi.production.bean.vo.ProductionOrderVo;
-import com.ruoyi.production.mapper.ProductionBomStructureMapper;
-import com.ruoyi.production.mapper.ProductionOperationTaskMapper;
-import com.ruoyi.production.mapper.ProductionOrderBomMapper;
-import com.ruoyi.production.mapper.ProductionOrderMapper;
-import com.ruoyi.production.mapper.ProductionOrderPickMapper;
-import com.ruoyi.production.mapper.ProductionOrderPickRecordMapper;
-import com.ruoyi.production.mapper.ProductionOrderRoutingMapper;
-import com.ruoyi.production.mapper.ProductionOrderRoutingOperationMapper;
-import com.ruoyi.production.mapper.ProductionOrderRoutingOperationParamMapper;
-import com.ruoyi.production.mapper.ProductionPlanMapper;
-import com.ruoyi.production.mapper.ProductionProductMainMapper;
-import com.ruoyi.production.pojo.ProductionOrderPick;
-import com.ruoyi.production.pojo.ProductionOrderPickRecord;
-import com.ruoyi.production.pojo.ProductionBomStructure;
-import com.ruoyi.production.pojo.ProductionOperationTask;
-import com.ruoyi.production.pojo.ProductionOrder;
-import com.ruoyi.production.pojo.ProductionOrderBom;
-import com.ruoyi.production.pojo.ProductionOrderRouting;
-import com.ruoyi.production.pojo.ProductionOrderRoutingOperation;
-import com.ruoyi.production.pojo.ProductionOrderRoutingOperationParam;
-import com.ruoyi.production.pojo.ProductionPlan;
-import com.ruoyi.production.pojo.ProductionProductMain;
 import com.ruoyi.production.enums.ProductOrderStatusEnum;
+import com.ruoyi.production.mapper.*;
+import com.ruoyi.production.pojo.*;
+import com.ruoyi.production.service.ProductionOrderService;
 import com.ruoyi.sales.mapper.SalesLedgerMapper;
 import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
 import com.ruoyi.sales.pojo.SalesLedger;
 import com.ruoyi.sales.pojo.SalesLedgerProduct;
-import com.ruoyi.production.service.ProductionOrderService;
-import com.ruoyi.technology.mapper.TechnologyBomMapper;
-import com.ruoyi.technology.mapper.TechnologyBomStructureMapper;
-import com.ruoyi.technology.mapper.TechnologyRoutingMapper;
-import com.ruoyi.technology.mapper.TechnologyRoutingOperationMapper;
-import com.ruoyi.technology.mapper.TechnologyRoutingOperationParamMapper;
-import com.ruoyi.technology.pojo.TechnologyBom;
-import com.ruoyi.technology.pojo.TechnologyBomStructure;
-import com.ruoyi.technology.pojo.TechnologyRouting;
-import com.ruoyi.technology.pojo.TechnologyRoutingOperation;
-import com.ruoyi.technology.pojo.TechnologyRoutingOperationParam;
+import com.ruoyi.technology.mapper.*;
+import com.ruoyi.technology.pojo.*;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.time.LocalDate;
-import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Set;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @Service
@@ -591,10 +555,10 @@
             return null;
         }
         if (productionPlan.getPromisedDeliveryDate() != null) {
-            return productionPlan.getPromisedDeliveryDate().toLocalDate();
+            return productionPlan.getPromisedDeliveryDate();
         }
         if (productionPlan.getRequiredDate() != null) {
-            return productionPlan.getRequiredDate().toLocalDate();
+            return productionPlan.getRequiredDate();
         }
         return null;
     }
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionPlanServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionPlanServiceImpl.java
index 2f9d675..f9e4008 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionPlanServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionPlanServiceImpl.java
@@ -13,7 +13,6 @@
 import com.ruoyi.production.bean.dto.ProductionPlanDto;
 import com.ruoyi.production.bean.dto.ProductionPlanImportDto;
 import com.ruoyi.production.bean.vo.ProductionPlanVo;
-import com.ruoyi.production.enums.ProductOrderStatusEnum;
 import com.ruoyi.production.mapper.ProductionOrderMapper;
 import com.ruoyi.production.mapper.ProductionPlanMapper;
 import com.ruoyi.production.pojo.ProductionOrder;
@@ -42,14 +41,7 @@
 
     @Override
     public IPage<ProductionPlanVo> listPage(Page<ProductionPlanDto> page, ProductionPlanDto productionPlanDto) {
-
-        IPage<ProductionPlanVo> planVoIPage = productionPlanMapper.listPage(page, productionPlanDto)
-                .convert(dto -> {
-                    ProductionPlanVo vo = new ProductionPlanVo();
-                    BeanUtils.copyProperties(dto, vo);
-                    return vo;
-                });
-        return planVoIPage;
+        return productionPlanMapper.listPage(page, productionPlanDto);
     }
 
     /**
@@ -85,7 +77,89 @@
         ProductionOrder productionOrder = new ProductionOrder();
         productionOrder.setQuantity(productionPlanDto.getTotalAssignedQuantity());
         productionOrder.setPlanCompleteTime(productionPlanDto.getPlanCompleteTime());
-        productionOrder.setStatus(ProductOrderStatusEnum.WAIT.getCode());
+//        // 鍙犲姞鍓╀綑鏂规暟
+//        BigDecimal totalRemainingVolume = plans.stream()
+//                .map(ProductionPlan::getRemainingVolume)
+//                .filter(Objects::nonNull)
+//                .reduce(BigDecimal.ZERO, BigDecimal::add);
+//        // 鍒ゆ柇涓嬪彂鏁伴噺鏄惁澶т簬绛変簬鍓╀綑鏂规暟
+//        if (productionPlanDto.getTotalAssignedQuantity().compareTo(totalRemainingVolume) > 0) {
+//            throw new BaseException("鎿嶄綔澶辫触锛屼笅鍙戞暟閲忎笉鑳藉ぇ浜庡墿浣欐柟鏁�");
+//        }
+//
+//        // 鍒涘缓鐢熶骇璁㈠崟
+//        ProductOrder productOrder = new ProductOrder();
+//        productOrder.setQuantity(productionPlanDto.getTotalAssignedQuantity());
+//        productOrder.setPlanCompleteTime(productionPlanDto.getPlanCompleteTime());
+//        productOrder.setStatus(ProductOrderStatusEnum.WAIT.getCode());
+//        productOrder.setStrength(productionPlanDto.getStrength());
+//        productOrder.setProductMaterialSkuId(plans.get(0).getProductMaterialSkuId());
+//
+//        Long orderId = productOrderService.insertProductOrder(productOrder);
+//
+//        //  褰撲笅鍙戠殑浜у搧涓虹爩鍧楁垨鏉挎潗锛屽氨鎷夊彇BOM瀛愰泦涓庡伐鑹鸿矾绾垮瓙闆嗘暟鎹瓨鍏ュ埌闄勮〃涓�
+//        if ("鐮屽潡".equals(productionPlanDto.getProductName())) {
+//            productOrder.setRouteId(productionOrderAppendixService.populateBlocks(orderId, productionPlanDto));
+//        }
+//        if ("鏉挎潗".equals(productionPlanDto.getProductName())) {
+//            productOrder.setRouteId(productionOrderAppendixService.populatePlates(orderId, productionPlanDto));
+//        }
+//        //  鏇存柊缁戝畾鐨勫伐鑹鸿矾绾�
+//        productOrderService.updateById(productOrder);
+//
+//        // 鏍规嵁涓嬪彂鏁伴噺锛屼粠绗竴涓敓浜ц鍒掑紑濮嬪垎閰嶆柟鏁�
+//        BigDecimal assignedVolume = BigDecimal.ZERO;
+//        for (ProductionPlan plan : plans) {
+//            BigDecimal volume = plan.getVolume();
+//            if (volume == null) {
+//                continue;
+//            }
+//            // 璁$畻鍓╀綑鏂规暟
+//            BigDecimal remainingVolume = plan.getRemainingVolume();
+//            if (remainingVolume.compareTo(BigDecimal.ZERO) <= 0) {
+//                continue;
+//            }
+//
+//            ProductOrderPlan productOrderPlan = new ProductOrderPlan();
+//            productOrderPlan.setProductOrderId(productOrder.getId());
+//            productOrderPlan.setProductionPlanId(plan.getId());
+//
+//            if (assignedVolume.add(remainingVolume).compareTo(productionPlanDto.getTotalAssignedQuantity()) >= 0) {
+//                // 鏈�鍚庝竴涓鍒掞紝鍒嗛厤鍓╀綑鏂规暟
+//                BigDecimal lastRemainingVolume = productionPlanDto.getTotalAssignedQuantity().subtract(assignedVolume);
+//                BigDecimal assignedQuantity = Optional.ofNullable(plan.getAssignedQuantity()).orElse(BigDecimal.ZERO).add(lastRemainingVolume);
+//                plan.setAssignedQuantity(assignedQuantity);
+//                plan.setStatus(assignedQuantity.compareTo(plan.getVolume()) >= 0 ? 2 : 1);
+//                productOrderPlan.setAssignedQuantity(lastRemainingVolume);
+//                productionPlanMapper.updateById(plan);
+//                productOrderPlanMapper.insert(productOrderPlan);
+//                break;
+//            }
+//
+//            // 鍒嗛厤褰撳墠璁″垝鏂规暟
+//            BigDecimal assignedQuantity = Optional.ofNullable(plan.getAssignedQuantity()).orElse(BigDecimal.ZERO).add(remainingVolume);
+//            plan.setAssignedQuantity(assignedQuantity);
+//            plan.setStatus(assignedQuantity.compareTo(plan.getVolume()) >= 0 ? 2 : 1);
+//            productOrderPlan.setAssignedQuantity(remainingVolume);
+//            // 鏇存柊鐢熶骇璁″垝
+//            productionPlanMapper.updateById(plan);
+//            // 鍒涘缓鍏宠仈鍏崇郴
+//            productOrderPlanMapper.insert(productOrderPlan);
+//            assignedVolume = assignedVolume.add(remainingVolume);
+//        }
+//
+//        for (ProductionPlan plan : plans) {
+//            BigDecimal assignedQuantity = Optional.ofNullable(plan.getAssignedQuantity()).orElse(BigDecimal.ZERO);
+//            BigDecimal volume = Optional.ofNullable(plan.getVolume()).orElse(BigDecimal.ZERO);
+//            if (assignedQuantity.compareTo(BigDecimal.ZERO) <= 0) {
+//                plan.setStatus(0);
+//            } else if (assignedQuantity.compareTo(volume) >= 0) {
+//                plan.setStatus(2);
+//            } else {
+//                plan.setStatus(1);
+//            }
+//            productionPlanMapper.updateById(plan);
+//        }
         return true;
     }
 
diff --git a/src/main/resources/mapper/production/ProductionOrderMapper.xml b/src/main/resources/mapper/production/ProductionOrderMapper.xml
index 3c26d4e..b2f895d 100644
--- a/src/main/resources/mapper/production/ProductionOrderMapper.xml
+++ b/src/main/resources/mapper/production/ProductionOrderMapper.xml
@@ -19,8 +19,121 @@
         <result column="sale_ledger_product_id" property="saleLedgerProductId" />
         <result column="create_user" property="createUser" />
         <result column="dept_id" property="deptId" />
+        <result column="plan_complete_time" property="planCompleteTime" />
+        <result column="status" property="status" />
     </resultMap>
 
+    <resultMap id="ProductionOrderVoResultMap" type="com.ruoyi.production.bean.vo.ProductionOrderVo" extends="BaseResultMap">
+        <result column="salesContractNo" property="salesContractNo" />
+        <result column="customerName" property="customerName" />
+        <result column="productName" property="productName" />
+        <result column="model" property="model" />
+        <result column="processRouteCode" property="processRouteCode" />
+    </resultMap>
+
+    <sql id="ProductionOrderVoColumns">
+        po.id,
+        po.sales_ledger_id,
+        po.production_plan_ids,
+        po.product_model_id,
+        po.nps_no,
+        po.create_time,
+        po.update_time,
+        po.technology_routing_id,
+        po.quantity,
+        po.complete_quantity,
+        po.start_time,
+        po.end_time,
+        po.sale_ledger_product_id,
+        po.create_user,
+        po.dept_id,
+        po.plan_complete_time,
+        po.status,
+        sl.sales_contract_no as salesContractNo,
+        sl.customer_name as customerName,
+        p.product_name as productName,
+        pm.model as model,
+        tr.process_route_code as processRouteCode
+    </sql>
+
+    <sql id="ProductionOrderVoFrom">
+        from production_order po
+                 left join sales_ledger sl on po.sales_ledger_id = sl.id
+                 left join product_model pm on po.product_model_id = pm.id
+                 left join product p on pm.product_id = p.id
+                 left join technology_routing tr on po.technology_routing_id = tr.id
+    </sql>
+
+    <sql id="ProductionOrderWhere">
+        <where>
+            <if test="c != null">
+                <if test="c.id != null">
+                    and po.id = #{c.id}
+                </if>
+                <if test="c.salesLedgerId != null">
+                    and po.sales_ledger_id = #{c.salesLedgerId}
+                </if>
+                <if test="c.productModelId != null">
+                    and po.product_model_id = #{c.productModelId}
+                </if>
+                <if test="c.technologyRoutingId != null">
+                    and po.technology_routing_id = #{c.technologyRoutingId}
+                </if>
+                <if test="c.saleLedgerProductId != null">
+                    and po.sale_ledger_product_id = #{c.saleLedgerProductId}
+                </if>
+                <if test="c.status != null">
+                    and po.status = #{c.status}
+                </if>
+                <if test="c.createUser != null">
+                    and po.create_user = #{c.createUser}
+                </if>
+                <if test="c.deptId != null">
+                    and po.dept_id = #{c.deptId}
+                </if>
+                <if test="c.npsNo != null and c.npsNo != ''">
+                    and po.nps_no like concat('%', #{c.npsNo}, '%')
+                </if>
+                <if test="c.productionPlanIds != null and c.productionPlanIds != ''">
+                    and po.production_plan_ids like concat('%', #{c.productionPlanIds}, '%')
+                </if>
+                <if test="c.planCompleteTime != null">
+                    and po.plan_complete_time = #{c.planCompleteTime}
+                </if>
+                <if test="c.startTime != null">
+                    and po.start_time &gt;= #{c.startTime}
+                </if>
+                <if test="c.endTime != null">
+                    and po.end_time &lt;= #{c.endTime}
+                </if>
+            </if>
+        </where>
+    </sql>
+
+    <select id="pageProductionOrder" resultMap="ProductionOrderVoResultMap">
+        select
+        <include refid="ProductionOrderVoColumns" />
+        <include refid="ProductionOrderVoFrom" />
+        <include refid="ProductionOrderWhere" />
+        order by po.id desc
+    </select>
+
+    <select id="listProductionOrder" resultMap="ProductionOrderVoResultMap">
+        select
+        <include refid="ProductionOrderVoColumns" />
+        <include refid="ProductionOrderVoFrom" />
+        <include refid="ProductionOrderWhere" />
+        order by po.id desc
+    </select>
+
+    <select id="getProductionOrderInfo" resultMap="ProductionOrderVoResultMap">
+        select
+        <include refid="ProductionOrderVoColumns" />
+        <include refid="ProductionOrderVoFrom" />
+        where po.id = #{id}
+        limit 1
+    </select>
+
     <select id="selectProgressOrders" resultType="com.ruoyi.home.dto.ProductionProgressOrderDto">
         select po.nps_no,
                sl.sales_contract_no,
diff --git a/src/main/resources/mapper/production/ProductionPlanMapper.xml b/src/main/resources/mapper/production/ProductionPlanMapper.xml
index fee9fcc..a7ad8f7 100644
--- a/src/main/resources/mapper/production/ProductionPlanMapper.xml
+++ b/src/main/resources/mapper/production/ProductionPlanMapper.xml
@@ -14,49 +14,25 @@
         <result column="update_user" property="updateUser"/>
         <result column="product_model_id" property="productModelId"/>
         <result column="qty_required" property="qtyRequired"/>
-        <result column="state" property="state"/>
         <result column="issued" property="issued"/>
         <result column="source" property="source"/>
         <result column="is_audit" property="isAudit"/>
         <result column="promised_delivery_date" property="promisedDeliveryDate"/>
     </resultMap>
 
-    <select id="listPage" resultType="com.ruoyi.production.bean.dto.ProductionPlanDto">
+    <select id="listPage" resultType="com.ruoyi.production.bean.vo.ProductionPlanVo">
         SELECT
         pp.*,
         pms.material_code AS materialCode,
-        pms.model,
+        pmdl.model,
         pms.product_id AS productMaterialId,
-        pm.product_name AS productName,
-        pm.unit
+        p.product_name AS productName,
+        pmdl.unit
         FROM production_plan pp
         left join product_material_sku pms on pp.product_material_sku_id = pms.id
-        left join product_material pm on pms.product_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.materialCode != null and c.materialCode != '' ">
-            AND pms.material_code LIKE CONCAT('%',#{c.materialCode},'%')
-        </if>
-        <if test="c.model != null and c.model != '' ">
-            AND pms.model LIKE CONCAT('%',#{c.model},'%')
-        </if>
-        <if test="c.status != null">
-            AND pp.status =#{c.status}
-        </if>
-        <if test="c.applyNo != null and c.applyNo != '' ">
-            AND pp.apply_no LIKE CONCAT('%',#{c.applyNo},'%')
-        </if>
-        <if test="c.startDate != null">
-            AND pp.start_date &gt;= DATE_FORMAT(#{c.startDate},'%Y-%m-%d')
-        </if>
-        <if test="c.endDate != null">
-            AND pp.end_date &lt;= DATE_FORMAT(#{c.endDate},'%Y-%m-%d')
-        </if>
+        left join product_model pmdl on pp.product_model_id = pmdl.id
+        left join product p on pmdl.product_id = p.id
+
         ORDER BY COALESCE(pp.form_modified_time, pp.id) DESC
     </select>
 
@@ -64,12 +40,14 @@
         SELECT
         pp.*,
         pms.material_code AS materialCode,
-        pms.model,
-        pm.product_name AS productName,
-        pm.unit
+        pmdl.model,
+        p.product_name AS productName,
+        pmdl.unit,
+        pms.product_id AS productMaterialId
         FROM production_plan pp
         LEFT JOIN product_material_sku pms ON pp.product_material_sku_id = pms.id
-        LEFT JOIN product_material pm ON pms.product_id = pm.id
+        LEFT JOIN product_model pmdl ON pp.product_model_id = pmdl.id
+        LEFT JOIN product p ON pmdl.product_id = p.id
         WHERE pp.id IN
         <foreach collection="ids" item="id" open="(" separator="," close=")">
             #{id}
@@ -80,13 +58,14 @@
         SELECT
         pp.*,
         pms.material_code AS materialCode,
-        pms.model,
+        pmdl.model,
         pms.product_id AS productMaterialId,
-        pm.product_name AS productName,
-        pm.unit
+        p.product_name AS productName,
+        pmdl.unit
         FROM production_plan pp
         left join product_material_sku pms on pp.product_material_sku_id = pms.id
-        left join product_material pm on pms.product_id = pm.id
+        left join product_model pmdl on pp.product_model_id = pmdl.id
+        left join product p on pmdl.product_id = p.id
         WHERE pp.id = #{productionPlanId}
     </select>
 </mapper>

--
Gitblit v1.9.3