From 663120b055dfdced4a67ce1d4160ae8ca19b4190 Mon Sep 17 00:00:00 2001
From: chenhj <1263187585@qq.com>
Date: 星期四, 12 三月 2026 18:04:21 +0800
Subject: [PATCH] 修改工单所需数量

---
 src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java    |   40 +++++++++++++++++--
 src/main/resources/mapper/production/ProductOrderMapper.xml                      |    3 +
 src/main/java/com/ruoyi/production/pojo/ProductStructure.java                    |    4 ++
 src/main/resources/mapper/production/ProductStructureMapper.xml                  |    1 
 src/main/java/com/ruoyi/production/service/impl/ProductStructureServiceImpl.java |   16 -------
 5 files changed, 43 insertions(+), 21 deletions(-)

diff --git a/src/main/java/com/ruoyi/production/pojo/ProductStructure.java b/src/main/java/com/ruoyi/production/pojo/ProductStructure.java
index de0d605..155037d 100644
--- a/src/main/java/com/ruoyi/production/pojo/ProductStructure.java
+++ b/src/main/java/com/ruoyi/production/pojo/ProductStructure.java
@@ -53,4 +53,8 @@
     private Long bomId;
 
 
+    /**
+     * 鏉愭枡绫诲瀷锛�0涓绘枡锛� 1杈呮枡锛�
+     */
+    private String materialType;
 }
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductStructureServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductStructureServiceImpl.java
index 310a723..e4ef9d9 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductStructureServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductStructureServiceImpl.java
@@ -1,26 +1,16 @@
 package com.ruoyi.production.service.impl;
 
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.basic.dto.ProductModelDto;
-import com.ruoyi.basic.dto.ProductTreeDto;
-import com.ruoyi.basic.mapper.ProductMapper;
-import com.ruoyi.basic.mapper.ProductModelMapper;
-import com.ruoyi.basic.pojo.Product;
-import com.ruoyi.basic.pojo.ProductModel;
 import com.ruoyi.production.dto.ProductStructureDto;
-import com.ruoyi.production.mapper.ProductBomMapper;
 import com.ruoyi.production.mapper.ProductStructureMapper;
 import com.ruoyi.production.pojo.ProductStructure;
 import com.ruoyi.production.service.ProductStructureService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
 import java.util.List;
 
 @Service
@@ -30,8 +20,6 @@
 
     @Autowired
     private  ProductStructureMapper productStructureMapper;
-
-
 
     @Override
     public Boolean addProductStructureDto(ProductStructureDto productStructureDto) {
@@ -44,8 +32,6 @@
 
     @Override
     public List<ProductStructureDto> listBybomId(Long bomId) {
-        List<ProductStructureDto> tree = productStructureMapper.listBybomId(bomId);
-        return tree;
-
+        return productStructureMapper.listBybomId(bomId);
     }
 }
diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
index 9139554..08f431c 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -5,11 +5,10 @@
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.utils.OrderUtils;
 import com.ruoyi.common.utils.SecurityUtils;
-import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.production.dto.ProductStructureDto;
 import com.ruoyi.production.mapper.*;
 import com.ruoyi.production.pojo.*;
 import com.ruoyi.purchase.mapper.PurchaseLedgerMapper;
@@ -21,14 +20,13 @@
 import com.ruoyi.sales.mapper.InvoiceRegistrationProductMapper;
 import com.ruoyi.sales.mapper.SalesLedgerMapper;
 import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
-import com.ruoyi.sales.pojo.InvoiceRegistrationProduct;
 import com.ruoyi.sales.pojo.SalesLedger;
 import com.ruoyi.sales.pojo.SalesLedgerProduct;
 import com.ruoyi.sales.service.ISalesLedgerProductService;
 import lombok.AllArgsConstructor;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.Assert;
 import org.springframework.util.CollectionUtils;
 
 import java.lang.reflect.Field;
@@ -73,6 +71,8 @@
     private ProductionProductOutputMapper productionProductOutputMapper;
     private ProductionProductInputMapper productionProductInputMapper;
     private QualityInspectMapper qualityInspectMapper;
+    private ProductBomMapper productBomMapper;
+    private ProductStructureMapper productStructureMapper;
 
     @Override
     public SalesLedgerProduct selectSalesLedgerProductById(Long id) {
@@ -286,6 +286,13 @@
                 .orderByDesc(ProcessRoute::getCreateTime));
         if (processRoutes.size()>0){
             ProcessRoute processRoute = processRoutes.get(0);
+            // 鑾峰彇浜у搧bom淇℃伅
+            List<ProductStructureDto> productStructureDtos = productStructureMapper.listBybomId(processRoute.getBomId());
+            if (salesLedgerProduct.getQuantity() == null) {
+                throw new RuntimeException("鏈�缁堢敓浜ф暟閲忎笉瀛樺湪");
+            }
+            Map<Long, BigDecimal> quantities = countWorkOrderNum(productStructureDtos, salesLedgerProduct.getQuantity());
+
             //鏂板鐢熶骇璁㈠崟宸ヨ壓璺嚎涓昏〃
             ProductProcessRoute productProcessRoute = new ProductProcessRoute();
             productProcessRoute.setProductModelId(processRoute.getProductModelId());
@@ -331,7 +338,7 @@
                     ProductWorkOrder productWorkOrder = new ProductWorkOrder();
                     productWorkOrder.setProductProcessRouteItemId(productProcessRouteItem.getId());
                     productWorkOrder.setProductOrderId(productOrder.getId());
-                    productWorkOrder.setPlanQuantity(salesLedgerProduct.getQuantity());
+                    productWorkOrder.setPlanQuantity(quantities.get(processRouteItem.getProcessId()));
                     productWorkOrder.setWorkOrderNo(workOrderNoStr);
                     productWorkOrder.setStatus(1);
 
@@ -345,6 +352,29 @@
     }
 
     /**
+     * 璁$畻宸ュ崟鏁伴噺
+     * productStructures bom淇℃伅
+     * quantity 闇�姹傛暟閲�
+     */
+    public Map<Long, BigDecimal> countWorkOrderNum(List<ProductStructureDto> productStructures, BigDecimal quantity) {
+        BigDecimal originalQuantity = quantity;
+        Map<Long, BigDecimal> resultMap = new HashMap<>();
+        resultMap.put(productStructures.get(productStructures.size() - 1).getProcessId(), quantity);
+        for (int i = productStructures.size() - 2; i >= 0; i--) {
+            ProductStructureDto productStructureDto = productStructures.get(i);
+            Assert.notNull(productStructureDto.getUnitQuantity(), "鍗曚綅浜у嚭鎵�闇�鏁伴噺涓嶅瓨鍦�");
+            if (productStructureDto.getMaterialType().equals("0")) {
+                quantity = quantity.multiply(productStructureDto.getUnitQuantity());
+                resultMap.put(productStructureDto.getProcessId(), quantity);
+            } else {
+                resultMap.put(productStructureDto.getProcessId(), originalQuantity.multiply(productStructureDto.getUnitQuantity()));
+            }
+
+        }
+        return resultMap;
+    }
+
+    /**
      * 鍒犻櫎鐢熶骇鏁版嵁
      */
     public void deleteProductionData(List<Long> productIds) {
diff --git a/src/main/resources/mapper/production/ProductOrderMapper.xml b/src/main/resources/mapper/production/ProductOrderMapper.xml
index 4c2b1f8..77f440e 100644
--- a/src/main/resources/mapper/production/ProductOrderMapper.xml
+++ b/src/main/resources/mapper/production/ProductOrderMapper.xml
@@ -70,7 +70,8 @@
                p.product_name,
                pp.name as  process_name,
                pm.product_id,
-               pm.model
+               pm.model,
+               ps.material_type
         from
             product_structure ps
                 left join product_model pm on ps.product_model_id = pm.id
diff --git a/src/main/resources/mapper/production/ProductStructureMapper.xml b/src/main/resources/mapper/production/ProductStructureMapper.xml
index e4a0795..1dd30cd 100644
--- a/src/main/resources/mapper/production/ProductStructureMapper.xml
+++ b/src/main/resources/mapper/production/ProductStructureMapper.xml
@@ -10,6 +10,7 @@
         <result property="demandedQuantity" column="demanded_quantity"/>
         <result property="unit" column="unit"/>
         <result property="tenantId" column="tenant_id"/>
+        <result property="materialType" column="material_type"/>
     </resultMap>
     <select id="listBybomId" resultType="com.ruoyi.production.dto.ProductStructureDto">
         select ps.*,

--
Gitblit v1.9.3