From 4bcd26a4975d6722bff65690e7a8331cd0afd520 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期二, 31 三月 2026 17:46:19 +0800
Subject: [PATCH] yys 1.销售,采购台账产品反着来 2.产品图纸带到生产订单来

---
 src/main/resources/mapper/production/ProductWorkOrderMapper.xml                        |   34 ++++++++
 src/main/java/com/ruoyi/production/pojo/ProductionProductInput.java                    |    3 
 src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java           |   64 ++++++++++++++++
 src/main/java/com/ruoyi/production/dto/ProductOrderDto.java                            |    5 +
 src/main/java/com/ruoyi/production/pojo/ProductWorkOrder.java                          |    9 ++
 src/main/java/com/ruoyi/basic/service/IProductService.java                             |    1 
 src/main/java/com/ruoyi/production/service/impl/ProductBomServiceImpl.java             |   10 +-
 src/main/java/com/ruoyi/production/controller/ProductionProductInputController.java    |   21 ++++-
 src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java                |    3 
 src/main/java/com/ruoyi/production/service/impl/ProductionProductInputServiceImpl.java |   38 +++++++++
 src/main/java/com/ruoyi/production/mapper/ProductWorkOrderMapper.java                  |    2 
 src/main/java/com/ruoyi/basic/service/impl/ProductServiceImpl.java                     |    6 +
 src/main/java/com/ruoyi/production/service/ProductionProductInputService.java          |    4 +
 src/main/java/com/ruoyi/basic/pojo/ProductModel.java                                   |    5 +
 src/main/java/com/ruoyi/common/enums/StockInQualifiedRecordTypeEnum.java               |    3 
 15 files changed, 195 insertions(+), 13 deletions(-)

diff --git a/src/main/java/com/ruoyi/basic/pojo/ProductModel.java b/src/main/java/com/ruoyi/basic/pojo/ProductModel.java
index 8b88d82..6b41fab 100644
--- a/src/main/java/com/ruoyi/basic/pojo/ProductModel.java
+++ b/src/main/java/com/ruoyi/basic/pojo/ProductModel.java
@@ -2,11 +2,13 @@
 
 import com.baomidou.mybatisplus.annotation.*;
 import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import com.ruoyi.sales.pojo.CommonFile;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
+import java.util.List;
 
 @Data
 @TableName("product_model")
@@ -14,6 +16,9 @@
 
     private static final long serialVersionUID = 1L;
 
+    @TableField(exist = false)
+    private List<CommonFile> SalesLedgerFiles;
+
     /**
      * 搴忓彿
      */
diff --git a/src/main/java/com/ruoyi/basic/service/IProductService.java b/src/main/java/com/ruoyi/basic/service/IProductService.java
index 5662946..864581b 100644
--- a/src/main/java/com/ruoyi/basic/service/IProductService.java
+++ b/src/main/java/com/ruoyi/basic/service/IProductService.java
@@ -23,4 +23,5 @@
     IPage<ProductModel> listPageProductModel(Page<ProductModel> page, ProductModel productModel);
 
     AjaxResult listPage(Page page, ProductAndModelDto productDto);
+
 }
diff --git a/src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java b/src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java
index 9c17885..066d886 100644
--- a/src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java
+++ b/src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java
@@ -12,6 +12,7 @@
 import com.ruoyi.basic.pojo.ProductModel;
 import com.ruoyi.basic.service.IProductModelService;
 import com.ruoyi.common.enums.FileNameType;
+import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.OrderUtils;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.bean.BeanUtils;
@@ -199,7 +200,7 @@
         // 鏌ヨ鎵�鏈夊伐鑹鸿矾绾�
         List<ProductProcess> productRoutes = productProcessMapper.selectList(new QueryWrapper<ProductProcess>());
         if(CollectionUtils.isEmpty(productRoutes)){
-            throw new RuntimeException("璇峰厛鍒涘缓浜у搧宸ヨ壓璺嚎");
+            throw new ServiceException("璇峰厛鍒涘缓浜у搧宸ヨ壓璺嚎");
         }
         for (ProductModelExcelCopyDto dto : dtoList) {
             // 鏌ヨ鏉′欢锛氬瀷鍙�+鍥剧焊缂栧彿锛堟洿绮惧噯锛岀鍚堝垎缁勯�昏緫锛�
diff --git a/src/main/java/com/ruoyi/basic/service/impl/ProductServiceImpl.java b/src/main/java/com/ruoyi/basic/service/impl/ProductServiceImpl.java
index 2a2b9eb..ddf9ae9 100644
--- a/src/main/java/com/ruoyi/basic/service/impl/ProductServiceImpl.java
+++ b/src/main/java/com/ruoyi/basic/service/impl/ProductServiceImpl.java
@@ -64,7 +64,11 @@
 
     @Override
     public IPage<ProductModel> listPageProductModel(Page<ProductModel> page, ProductModel productModel) {
-        return productModelMapper.listPageProductModel(page, productModel);
+        IPage<ProductModel> productModelIPage = productModelMapper.listPageProductModel(page, productModel);
+        productModelIPage.getRecords().forEach(item -> {
+            item.setSalesLedgerFiles(commonFileService.getFileListByBusinessId(item.getId(), FileNameType.PRODUCT_MODEL.getValue()));
+        });
+        return productModelIPage;
     }
 
     @Override
diff --git a/src/main/java/com/ruoyi/common/enums/StockInQualifiedRecordTypeEnum.java b/src/main/java/com/ruoyi/common/enums/StockInQualifiedRecordTypeEnum.java
index df0d011..3895ecb 100644
--- a/src/main/java/com/ruoyi/common/enums/StockInQualifiedRecordTypeEnum.java
+++ b/src/main/java/com/ruoyi/common/enums/StockInQualifiedRecordTypeEnum.java
@@ -12,7 +12,8 @@
     PURCHASE_STOCK_IN("7", "閲囪喘-鍏ュ簱"),
     QUALITYINSPECT_STOCK_IN("6", "璐ㄦ-鍚堟牸鍏ュ簱"),
     DEFECTIVE_PASS("11", "涓嶅悎鏍�-璁╂鏀捐"),
-    RETURN_HE_IN("14", "閿�鍞��璐�-鍚堟牸鍏ュ簱");
+    RETURN_HE_IN("14", "閿�鍞��璐�-鍚堟牸鍏ュ簱"),
+    RETURN_MATERIAL_IN("15", "閫�鏂�-鍏ュ簱");
 
 
     private final String code;
diff --git a/src/main/java/com/ruoyi/production/controller/ProductionProductInputController.java b/src/main/java/com/ruoyi/production/controller/ProductionProductInputController.java
index b4bf7dc..c531cd0 100644
--- a/src/main/java/com/ruoyi/production/controller/ProductionProductInputController.java
+++ b/src/main/java/com/ruoyi/production/controller/ProductionProductInputController.java
@@ -3,14 +3,17 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.framework.web.domain.R;
 import com.ruoyi.production.dto.ProductionProductInputDto;
+import com.ruoyi.production.pojo.ProductionProductInput;
 import com.ruoyi.production.service.ProductionProductInputService;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.*;
 
-@RequestMapping("productionProductInput")
+import java.util.List;
+
+@RequestMapping("/productionProductInput")
 @RestController
 @Api(value = "鐢熶骇鎶曞叆")
 public class ProductionProductInputController {
@@ -18,8 +21,16 @@
     @Autowired
     private ProductionProductInputService productionProductInputService;
 
-    @GetMapping("listPage")
+    @GetMapping("/listPage")
     public R page(Page<ProductionProductInputDto> page, ProductionProductInputDto productionProductInputDto) {
         return R.ok(productionProductInputService.listPageProductionProductInputDto(page, productionProductInputDto));
     }
+
+
+    @ApiOperation(value = "閫�鏂�")
+    @PostMapping("/returnMaterial")
+    @Transactional(rollbackFor = Exception.class)
+    public R returnMaterial(@RequestBody List<ProductionProductInput> productionProductInput) {
+        return R.ok(productionProductInputService.returnMaterial(productionProductInput));
+    }
 }
diff --git a/src/main/java/com/ruoyi/production/dto/ProductOrderDto.java b/src/main/java/com/ruoyi/production/dto/ProductOrderDto.java
index 92eef03..288965f 100644
--- a/src/main/java/com/ruoyi/production/dto/ProductOrderDto.java
+++ b/src/main/java/com/ruoyi/production/dto/ProductOrderDto.java
@@ -5,12 +5,14 @@
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ruoyi.framework.aspectj.lang.annotation.Excel;
 import com.ruoyi.production.pojo.ProductOrder;
+import com.ruoyi.production.pojo.ProductWorkOrder;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
 
 import java.math.BigDecimal;
 import java.time.LocalDate;
+import java.util.List;
 
 @Data
 @ExcelIgnoreUnannotated
@@ -68,4 +70,7 @@
 
     @ApiModelProperty(value = "鎿嶄綔 1-寮�濮� 2-鏆傚仠")
     private Integer operation;
+
+    @ApiModelProperty(value = "鐢熶骇浠诲姟")
+    private List<ProductWorkOrderDto> productWorkOrders;
 }
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductWorkOrderMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductWorkOrderMapper.java
index d637f7d..aab5433 100644
--- a/src/main/java/com/ruoyi/production/mapper/ProductWorkOrderMapper.java
+++ b/src/main/java/com/ruoyi/production/mapper/ProductWorkOrderMapper.java
@@ -17,6 +17,8 @@
 
     IPage<ProductWorkOrderDto> pageProductWorkOrder(Page<ProductWorkOrderDto> page, @Param("c") ProductWorkOrderDto productWorkOrder);
 
+    List<ProductWorkOrderDto> getProductWorkOrderList(@Param("c") ProductWorkOrderDto productWorkOrder);
+
     ProductWorkOrderDto getProductWorkOrderFlowCard(@Param("id") Long id);
 
     List<ProductWorkOrderDto> selectWorkOrderStartStats(@Param("startDate") String startDate, @Param("endDate") String endDate);
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductWorkOrder.java b/src/main/java/com/ruoyi/production/pojo/ProductWorkOrder.java
index c666bfe..60ddf05 100644
--- a/src/main/java/com/ruoyi/production/pojo/ProductWorkOrder.java
+++ b/src/main/java/com/ruoyi/production/pojo/ProductWorkOrder.java
@@ -11,6 +11,7 @@
 import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.util.List;
 
 /**
  * 浜у搧宸ュ崟瀹炰綋绫�
@@ -20,8 +21,16 @@
 @TableName("product_work_order")
 public class ProductWorkOrder implements Serializable {
 
+
+
     private static final long serialVersionUID = 1L;
 
+
+
+    @TableField(exist = false)
+    @ApiModelProperty(value = "棰滆壊 1-鐏拌壊 2-榛勮壊 3-缁胯壊 4-绾㈣壊")
+    private Integer color;
+
     /**
      * 涓婚敭id
      */
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductionProductInput.java b/src/main/java/com/ruoyi/production/pojo/ProductionProductInput.java
index b40f8d6..3f15e1c 100644
--- a/src/main/java/com/ruoyi/production/pojo/ProductionProductInput.java
+++ b/src/main/java/com/ruoyi/production/pojo/ProductionProductInput.java
@@ -26,6 +26,9 @@
     @ApiModelProperty(value = "鏁伴噺")
     private BigDecimal quantity;
 
+    @ApiModelProperty(value = "閫�鏂欐暟閲�")
+    private BigDecimal returnQuantity;
+
     @ApiModelProperty(value = "鍒涘缓鏃堕棿")
     @TableField(fill = FieldFill.INSERT)
     private LocalDateTime createTime;
diff --git a/src/main/java/com/ruoyi/production/service/ProductionProductInputService.java b/src/main/java/com/ruoyi/production/service/ProductionProductInputService.java
index 1af1772..934026b 100644
--- a/src/main/java/com/ruoyi/production/service/ProductionProductInputService.java
+++ b/src/main/java/com/ruoyi/production/service/ProductionProductInputService.java
@@ -6,6 +6,10 @@
 import com.ruoyi.production.dto.ProductionProductInputDto;
 import com.ruoyi.production.pojo.ProductionProductInput;
 
+import java.util.List;
+
 public interface ProductionProductInputService extends IService<ProductionProductInput> {
     IPage<ProductionProductInputDto> listPageProductionProductInputDto(Page page, ProductionProductInputDto productionProductInputDto);
+
+    Object returnMaterial(List<ProductionProductInput> productionProductInput);
 }
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductBomServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductBomServiceImpl.java
index 982b0c2..ea3dc41 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductBomServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductBomServiceImpl.java
@@ -269,14 +269,14 @@
     }
 
     private ProductModel findModel(String name, String spec) {
-        Product product = productService.getOne(new LambdaQueryWrapper<Product>()
-                .eq(Product::getProductName, name).last("limit 1"));
-        if (product == null) throw new ServiceException("浜у搧鏈淮鎶わ細" + name);
+//        Product product = productService.getOne(new LambdaQueryWrapper<Product>()
+//                .eq(Product::getProductName, name).last("limit 1"));
+//        if (product == null) throw new ServiceException("浜у搧鏈淮鎶わ細" + name);
 
         ProductModel model = productModelService.getOne(new LambdaQueryWrapper<ProductModel>()
-                .eq(ProductModel::getProductId, product.getId())
+//                .eq(ProductModel::getProductId, product.getId())
                 .eq(ProductModel::getModel, spec).last("limit 1"));
-        if (model == null) throw new ServiceException("瑙勬牸鏈淮鎶わ細" + name + "[" + spec + "]");
+        if (model == null) throw new ServiceException("鍥剧焊缂栧彿鏈淮鎶わ細" + name + "[" + spec + "]");
         return model;
     }
 
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
index 5cd4bbd..dbd0f5c 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
@@ -15,6 +15,7 @@
 import com.ruoyi.procurementrecord.utils.StockUtils;
 import com.ruoyi.production.dto.ProductOrderDto;
 import com.ruoyi.production.dto.ProductStructureDto;
+import com.ruoyi.production.dto.ProductWorkOrderDto;
 import com.ruoyi.production.mapper.*;
 import com.ruoyi.production.pojo.*;
 import com.ruoyi.production.service.ProductOrderService;
@@ -102,10 +103,73 @@
             // 闄勪欢
             productOrderDto.setSalesLedgerFiles(commonFileService.getFileListByBusinessId(productOrderDto.getId()
             , FileNameType.PRODUCT_ORDER.getValue()));
+            // 鑾峰彇瀵瑰簲宸ュ崟璁板綍
+            ProductWorkOrderDto productWorkOrder = new ProductWorkOrderDto();
+            productWorkOrder.setProductOrderId(productOrderDto.getId());
+            List<ProductWorkOrderDto> productWorkOrders = productWorkOrderMapper.getProductWorkOrderList(productWorkOrder);
+            if(CollectionUtils.isNotEmpty(productWorkOrders)){
+                productOrderDto.setProductWorkOrders(calculateColor(productWorkOrders));
+            }
+
         });
         return productOrderDtoIPage;
     }
 
+    /**
+     * 鑷姩璁$畻棰滆壊锛堟牳蹇冩柟娉曪級
+     * @param productWorkOrders
+     */
+    public List<ProductWorkOrderDto> calculateColor(List<ProductWorkOrderDto> productWorkOrders) {
+        List<ProductWorkOrderDto> result = new java.util.ArrayList<>();
+        for (int i = 0; i < productWorkOrders.size(); i++) {
+            ProductWorkOrderDto current = productWorkOrders.get(i);
+            // 鍒ゆ柇鏄惁瀛樺湪涓嬩竴閬撳伐鍗� + 涓嬩竴閬撳伐鍗曟槸鍚︽湁瀹屾垚鏁伴噺
+            boolean nextOrderHasComplete = false;  // 榛勮壊
+            boolean nextOrderHasScrap = false; // 绾㈣壊
+            // 濡傛灉涓嶆槸鏈�鍚庝竴鏉★紝灏卞彇涓嬩竴鏉″垽鏂�
+            for (int j = i + 1; j < productWorkOrders.size(); j++) {
+                if (i < productWorkOrders.size() - 1) {
+                    ProductWorkOrderDto next = productWorkOrders.get(j);
+                    BigDecimal nextComplete = next.getCompleteQuantity() == null ? BigDecimal.ZERO : next.getCompleteQuantity();
+                    BigDecimal nextScrap = next.getPlanQuantity() == null ? BigDecimal.ZERO : next.getPlanQuantity();
+                    // 涓嬩竴閬撳伐鍗曞畬鎴愭暟閲� > 0
+                    nextOrderHasComplete = nextComplete.compareTo(BigDecimal.ZERO) > 0;
+
+                    nextOrderHasScrap = nextComplete.compareTo(nextScrap) == 0;
+                    break;
+                }
+            }
+            // =============== 鏍稿績锛氳绠楅鑹插苟璧嬪�� ===============
+            BigDecimal planQty = current.getPlanQuantity() == null ? BigDecimal.ZERO : current.getPlanQuantity();
+            BigDecimal completeQty = current.getCompleteQuantity() == null ? BigDecimal.ZERO : current.getCompleteQuantity();
+
+            // 1. 褰撳墠宸ュ簭瀹屾垚鏁伴噺绛変簬0 涓� 涓嬩竴閬撳伐搴忓凡瀹屾垚 鈫� 绾㈣壊(4)
+            if (completeQty.compareTo(BigDecimal.ZERO) == 0
+                    && nextOrderHasScrap) {
+                current.setColor(4);
+            }
+            // 2. 闇�姹傛暟閲� > 瀹屾垚鏁伴噺锛堟湭瀹屾垚锛� 涓� 涓嬩竴閬撳伐搴忓畬鎴愭暟閲� > 0 鈫� 榛勮壊(2)
+            else if (planQty.compareTo(completeQty) > 0
+                    && nextOrderHasComplete) {
+                current.setColor(2);
+            }
+            // 3. 瀹屾垚鏁伴噺=0 鈫� 鐏拌壊(1)
+            else if (completeQty.compareTo(BigDecimal.ZERO) == 0) {
+                current.setColor(1);
+            }
+            // 4. 瀹屾垚鏁伴噺=闇�姹傛暟閲� 鈫� 缁胯壊(3)
+            else if (completeQty.compareTo(planQty) == 0) {
+                current.setColor(3);
+            }
+            // 鍏朵粬鎯呭喌榛樿鐏拌壊锛堝彲閫夛級
+            else {
+                current.setColor(1);
+            }
+            result.add(current);
+        }
+        return result;
+    }
+
     @Override
     public int bindingRoute(ProductOrder productOrder) {
         //鏂板鐢熶骇璁㈠崟涓嬬殑宸ヨ壓璺嚎涓昏〃
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionProductInputServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionProductInputServiceImpl.java
index 49765c0..931f343 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionProductInputServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionProductInputServiceImpl.java
@@ -1,15 +1,24 @@
 package com.ruoyi.production.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum;
+import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum;
+import com.ruoyi.procurementrecord.utils.StockUtils;
 import com.ruoyi.production.dto.ProductionProductInputDto;
+import com.ruoyi.production.mapper.ProductStructureRecordMapper;
 import com.ruoyi.production.mapper.ProductionProductInputMapper;
+import com.ruoyi.production.pojo.ProductStructureRecord;
 import com.ruoyi.production.pojo.ProductionProductInput;
 import com.ruoyi.production.service.ProductionProductInputService;
 import lombok.AllArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.List;
 
 @Service
 @AllArgsConstructor
@@ -17,8 +26,37 @@
     @Autowired
     private ProductionProductInputMapper productionProductInputMapper;
 
+    @Autowired
+    private StockUtils stockUtils;
+
+    @Autowired
+    private ProductStructureRecordMapper productStructureRecordMapper;
+
     @Override
     public IPage<ProductionProductInputDto> listPageProductionProductInputDto(Page page, ProductionProductInputDto productionProductInputDto) {
         return productionProductInputMapper.listPageProductionProductInputDto(page, productionProductInputDto);
     }
+
+    @Override
+    public Object returnMaterial(List<ProductionProductInput> productionProductInput) {
+        if(CollectionUtils.isEmpty(productionProductInput)){
+            return "璇烽�夋嫨瑕侀��鏂欑殑鏁版嵁";
+        }
+        for (ProductionProductInput input : productionProductInput) {
+            ProductionProductInput productionProductInput1 = productionProductInputMapper.selectById(input.getId());
+            BigDecimal qty = input.getReturnQuantity() == null ? BigDecimal.ZERO : input.getReturnQuantity();
+            BigDecimal qty1 = productionProductInput1.getReturnQuantity() == null ? BigDecimal.ZERO : productionProductInput1.getReturnQuantity();
+            productionProductInput1.setReturnQuantity(qty.add(qty1));
+            productionProductInputMapper.updateById(productionProductInput1);
+            // 閫�鏂欏叆搴�
+            stockUtils.addStock(input.getProductModelId(), input.getReturnQuantity(), StockInQualifiedRecordTypeEnum.RETURN_MATERIAL_IN.getCode(), input.getId());
+            // 澧炲姞鐗╂枡娓呭崟
+            ProductStructureRecord productStructureRecord = productStructureRecordMapper.selectById(input.getProductStructureRecordId());
+            if(productStructureRecord != null){
+                productStructureRecord.setCompletedQuantity(productStructureRecord.getCompletedQuantity().subtract(qty));
+                productStructureRecordMapper.updateById(productStructureRecord);
+            }
+        }
+        return "閫�鏂欐垚鍔�";
+    }
 }
diff --git a/src/main/resources/mapper/production/ProductWorkOrderMapper.xml b/src/main/resources/mapper/production/ProductWorkOrderMapper.xml
index 39c429a..48aa75b 100644
--- a/src/main/resources/mapper/production/ProductWorkOrderMapper.xml
+++ b/src/main/resources/mapper/production/ProductWorkOrderMapper.xml
@@ -97,4 +97,38 @@
         limit 1
         ;
     </select>
+    <select id="getProductWorkOrderList" resultType="com.ruoyi.production.dto.ProductWorkOrderDto"
+            parameterType="com.ruoyi.production.dto.ProductWorkOrderDto">
+        SELECT
+        pwo.*,
+        pp.NAME as processName,
+        pm.model,
+        pm.unit,
+        p.product_name AS productName,
+        pm.drawing_number,
+        po.nps_no AS productOrderNpsNo,
+        ROUND(pwo.complete_quantity / pwo.plan_quantity * 100, 2) AS completionStatus,
+        CASE
+        WHEN pwo.work_order_no LIKE 'FG%' THEN '杩斿伐杩斾慨'
+        ELSE '姝e父'
+        END AS work_order_type
+        FROM
+        product_work_order pwo
+        LEFT JOIN product_process_route_item ppri ON ppri.id = pwo.product_process_route_item_id
+        LEFT JOIN product_order po ON po.id = pwo.product_order_id
+        LEFT JOIN product_process pp ON pp.id = ppri.process_id
+        LEFT JOIN product_model pm ON pm.id = ppri.product_model_id
+        LEFT JOIN product p ON p.id = pm.product_id
+        <where>
+            <if test="c.workOrderNo != null and c.workOrderNo != ''">
+                and pwo.work_order_no like concat('%',#{c.workOrderNo},'%')
+            </if>
+            <if test="c.planStartTime != null and c.planEndTime != null">
+                and DATE(pwo.create_time) between #{c.planStartTime} and #{c.planEndTime}
+            </if>
+            <if test="c.productOrderId != null and c.productOrderId != ''">
+                and pwo.product_order_id = #{c.productOrderId}
+            </if>
+        </where>
+    </select>
 </mapper>

--
Gitblit v1.9.3