From ea7c1df32b0c8830173ba01a647706a5ded10ce8 Mon Sep 17 00:00:00 2001
From: maven <2163098428@qq.com>
Date: 星期三, 21 一月 2026 18:00:57 +0800
Subject: [PATCH] yys 1.调整生产管控流程

---
 src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java |  154 +++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 112 insertions(+), 42 deletions(-)

diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
index 67d8bba..5d6553a 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -5,6 +5,7 @@
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -15,8 +16,13 @@
 import com.ruoyi.basic.pojo.ProductModel;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.bean.BeanUtils;
+import com.ruoyi.procurementrecord.dto.Details;
+import com.ruoyi.procurementrecord.dto.ProcurementAddDto;
+import com.ruoyi.procurementrecord.mapper.ProcurementRecordMapper;
 import com.ruoyi.procurementrecord.mapper.ProcurementRecordOutMapper;
 import com.ruoyi.procurementrecord.pojo.ProcurementRecordOut;
+import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage;
+import com.ruoyi.procurementrecord.service.ProcurementRecordService;
 import com.ruoyi.procurementrecord.utils.StockUtils;
 import com.ruoyi.production.controller.ProductWorkOrderController;
 import com.ruoyi.production.dto.ProductStructureDto;
@@ -28,6 +34,8 @@
 import com.ruoyi.project.system.mapper.SysUserMapper;
 import com.ruoyi.quality.mapper.*;
 import com.ruoyi.quality.pojo.*;
+import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
+import com.ruoyi.sales.pojo.SalesLedgerProduct;
 import io.swagger.models.auth.In;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
@@ -40,9 +48,11 @@
 import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 @Service
 @AllArgsConstructor
@@ -50,6 +60,7 @@
 public class ProductionProductMainServiceImpl extends ServiceImpl<ProductionProductMainMapper, ProductionProductMain> implements ProductionProductMainService {
 
     private final ProcurementRecordOutMapper procurementRecordOutMapper;
+    private ProcurementRecordMapper procurementRecordMapper;
     private ProductionProductMainMapper productionProductMainMapper;
 
     private ProductWorkOrderController productWorkOrderController;
@@ -62,6 +73,11 @@
     private ProductionProductOutputMapper productionProductOutputMapper;
 
     private ProcessRouteItemMapper processRouteItemMapper;
+
+    private SalesLedgerProductMapper salesLedgerProductMapper;
+
+
+    private ProcurementRecordService procurementRecordService;
 
     private ProductModelMapper productModelMapper;
 
@@ -155,6 +171,7 @@
         for (ProductStructureDto productStructureDto : productStructureDtos) {
             ProductModel productModel1 = productModelMapper.selectById(productStructureDto.getProductModelId());
             Product product = productMapper.selectById(productModel1.getProductId());
+            // 鏌ヨ浜у搧搴撳瓨
             BigDecimal stockQuantity = stockUtils.getStockQuantity(productModel1.getId()).get("stockQuantity");
             if (!(stockQuantity.compareTo(BigDecimal.ZERO) > 0)) {
                 throw new RuntimeException(product.getProductName()+"浜у搧鐨�"+productModel1.getModel() + "鐨勮鏍煎簱瀛樹负0");
@@ -162,6 +179,11 @@
             if (stockQuantity.compareTo(productStructureDto.getUnitQuantity().multiply(dto.getQuantity())) < 0) {
                 throw new RuntimeException(product.getProductName()+"浜у搧鐨�"+productModel1.getModel() + "鐨勮鏍煎簱瀛樹笉瓒�");
             }
+            // 鏌ヨ閲囪喘浜у搧
+            List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(new LambdaQueryWrapper<SalesLedgerProduct>()
+                    .eq(SalesLedgerProduct::getProductModelId, productStructureDto.getProductModelId())
+                    .eq(SalesLedgerProduct::getType, 2));
+
             ProductionProductInput productionProductInput = new ProductionProductInput();
             productionProductInput.setProductModelId(productStructureDto.getProductModelId());
             productionProductInput.setQuantity(productStructureDto.getUnitQuantity().multiply(dto.getQuantity()));
@@ -172,16 +194,49 @@
             LocalDate now = LocalDate.now();
             ProcurementRecordOut procurementRecordOut1 = procurementRecordOutMapper.selectCode(dateFormat.format(now));
             Long aLong = procurementRecordOut1 == null ? 1L : Long.valueOf(procurementRecordOut1.getCode().split("LS" + dateFormat.format(now))[1]);
-            ProcurementRecordOut.ProcurementRecordOutBuilder procurementRecordOut = ProcurementRecordOut.builder()
-                    .procurementRecordStorageId(0)
-                    .code("LS" + dateFormat.format(now) + String.format("%03d", aLong + 1))
-                    .salesLedgerProductId(productionProductMain.getId())//鍏宠仈鎶ュ伐浜у嚭
-                    .inboundBatches(aLong.equals(0L) ? "绗�1鎵规" : "绗�" + (aLong + 1) + "鎵规")
-                    .inboundNum(productionProductInput.getQuantity())
-                    .type(4)
-                    .createBy(user.getNickName())
-                    .productModelId(productModel1.getId());
-            procurementRecordOutMapper.insert(procurementRecordOut.build());
+            // 鏌ヨ閲囪喘鍏ュ簱璁板綍
+            List<ProcurementRecordStorage> procurementRecordStorages = procurementRecordMapper.selectList(new LambdaQueryWrapper<ProcurementRecordStorage>()
+                    .in(ProcurementRecordStorage::getSalesLedgerProductId, salesLedgerProducts.stream()
+                            .map(SalesLedgerProduct::getId)
+                            .collect(Collectors.toList()))
+                    .orderByDesc(ProcurementRecordStorage::getInboundNum));
+            if(CollectionUtils.isNotEmpty(procurementRecordStorages)) {
+                // 鐢熶骇鎵i櫎閲囪喘搴撳瓨鍘熸枡
+                BigDecimal quantity = productionProductInput.getQuantity();
+                int i = 0;
+                while (quantity.compareTo(BigDecimal.ZERO) > 0){
+                    ProcurementRecordOut.ProcurementRecordOutBuilder procurementRecordOut = ProcurementRecordOut.builder()
+                            .procurementRecordStorageId(procurementRecordStorages.get(i).getId())
+                            .code("LS" + dateFormat.format(now) + String.format("%03d", aLong + 1))
+                            .salesLedgerProductId(productionProductMain.getId())//鍏宠仈鎶ュ伐浜у嚭
+                            .inboundBatches(aLong.equals(0L) ? "绗�1鎵规" : "绗�" + (aLong + 1) + "鎵规")
+                            .type(1)
+                            .createBy(user.getNickName())
+                            .productModelId(productModel1.getId());
+
+                    if(quantity.compareTo(procurementRecordStorages.get(i).getInboundNum()) >= 0){
+                        // 涓嬫枡鏁伴噺澶т簬绛変簬閲囪喘鍏ュ簱鏁伴噺锛屽垯鍑哄簱鏁伴噺涓洪噰璐叆搴撴暟閲忥紝骞剁户缁嚭搴撲笅涓�鏉¤褰�
+                        procurementRecordOut.inboundNum(procurementRecordStorages.get(i).getInboundNum());
+                        quantity = quantity.subtract(procurementRecordStorages.get(i).getInboundNum());
+                    }else{
+                        procurementRecordOut.inboundNum(quantity);
+                        quantity = BigDecimal.ZERO;
+                    }
+                    procurementRecordOutMapper.insert(procurementRecordOut.build());
+                    i++;
+                }
+            }else{
+                ProcurementRecordOut.ProcurementRecordOutBuilder procurementRecordOut = ProcurementRecordOut.builder()
+                        .procurementRecordStorageId(0)
+                        .code("LS" + dateFormat.format(now) + String.format("%03d", aLong + 1))
+                        .salesLedgerProductId(productionProductMain.getId())//鍏宠仈鎶ュ伐浜у嚭
+                        .inboundBatches(aLong.equals(0L) ? "绗�1鎵规" : "绗�" + (aLong + 1) + "鎵规")
+                        .inboundNum(productionProductInput.getQuantity())
+                        .type(4)
+                        .createBy(user.getNickName())
+                        .productModelId(productModel1.getId());
+                procurementRecordOutMapper.insert(procurementRecordOut.build());
+            }
         }
         /*鏂板鎶ュ伐浜у嚭琛�*/
         ProductionProductOutput productionProductOutput = new ProductionProductOutput();
@@ -191,38 +246,53 @@
         productionProductOutputMapper.insert(productionProductOutput);
         //瀵瑰簲鐨勮繃绋嬫鎴栬�呭嚭鍘傛
         List<ProductProcessRouteItem> productProcessRouteItems = productProcessRouteItemMapper.selectList(Wrappers.<ProductProcessRouteItem>lambdaQuery().eq(ProductProcessRouteItem::getProductRouteId, productProcessRouteItem.getProductRouteId()));
-        int inspectType = 1;
-        if (productProcessRouteItem.getDragSort()==productProcessRouteItems.size()){
-            //鏈�鍚庝竴閬撳伐搴忕敓鎴愬嚭鍘傛
-            inspectType = 2;
-        }
-        Product product = productMapper.selectById(productModel.getProductId());
-        QualityInspect qualityInspect = new QualityInspect();
-        qualityInspect.setProductId(product.getId());
-        qualityInspect.setProductName(product.getProductName());
-        qualityInspect.setModel(productModel.getModel());
-        qualityInspect.setUnit(productModel.getUnit());
-        qualityInspect.setQuantity(dto.getQuantity());
-        qualityInspect.setProcess(productProcess.getName());
-        qualityInspect.setInspectState(0);
-        qualityInspect.setInspectType(inspectType);
-        qualityInspect.setProductMainId(productionProductMain.getId());
-        qualityInspect.setProductModelId(productModel.getId());
-        qualityInspectMapper.insert(qualityInspect);
-        List<QualityTestStandardBinding> qualityTestStandardBindings = qualityTestStandardBindingMapper.selectList(
-                new LambdaQueryWrapper<QualityTestStandardBinding>()
-                        .eq(QualityTestStandardBinding::getProductId, product.getId()));
-        if (qualityTestStandardBindings.size()>0){
-            qualityTestStandardParamMapper.selectList(Wrappers.<QualityTestStandardParam>lambdaQuery()
-                    .eq(QualityTestStandardParam::getTestStandardId,qualityTestStandardBindings.get(0).getTestStandardId()))
-                    .forEach(qualityTestStandardParam -> {
-                QualityInspectParam param = new QualityInspectParam();
-                BeanUtils.copyProperties(qualityTestStandardParam, param);
-                param.setId(null);
-                param.setInspectId(qualityInspect.getId());
-                qualityInspectParamMapper.insert(param);
-            });
-        }
+//        if (productProcessRouteItem.getDragSort()==productProcessRouteItems.size()){
+//            //鏈�鍚庝竴閬撳伐搴忕敓鎴愬嚭鍘傛
+//            Product product = productMapper.selectById(productModel.getProductId());
+//            QualityInspect qualityInspect = new QualityInspect();
+//            qualityInspect.setProductId(product.getId());
+//            qualityInspect.setProductName(product.getProductName());
+//            qualityInspect.setModel(productModel.getModel());
+//            qualityInspect.setUnit(productModel.getUnit());
+//            qualityInspect.setQuantity(dto.getQuantity());
+//            qualityInspect.setProcess(productProcess.getName());
+//            qualityInspect.setInspectState(0);
+//            qualityInspect.setInspectType(2);  // 鍘绘帀鑷姩杩涘叆杩囩▼妫�楠岄�昏緫
+//            qualityInspect.setProductMainId(productionProductMain.getId());
+//            qualityInspect.setProductModelId(productModel.getId());
+//            qualityInspectMapper.insert(qualityInspect);
+//            List<QualityTestStandardBinding> qualityTestStandardBindings = qualityTestStandardBindingMapper.selectList(
+//                    new LambdaQueryWrapper<QualityTestStandardBinding>()
+//                            .eq(QualityTestStandardBinding::getProductId, product.getId()));
+//            if (qualityTestStandardBindings.size()>0){
+//                qualityTestStandardParamMapper.selectList(Wrappers.<QualityTestStandardParam>lambdaQuery()
+//                                .eq(QualityTestStandardParam::getTestStandardId,qualityTestStandardBindings.get(0).getTestStandardId()))
+//                        .forEach(qualityTestStandardParam -> {
+//                            QualityInspectParam param = new QualityInspectParam();
+//                            BeanUtils.copyProperties(qualityTestStandardParam, param);
+//                            param.setId(null);
+//                            param.setInspectId(qualityInspect.getId());
+//                            qualityInspectParamMapper.insert(param);
+//                        });
+//            }
+//        }
+
+        ProcurementAddDto procurementRecordOutAdd = new ProcurementAddDto();
+        procurementRecordOutAdd.setType(2);
+        procurementRecordOutAdd.setTypeName("鐢熶骇鍑哄巶妫�楠屽悎鏍煎叆搴�");
+        procurementRecordOutAdd.setNickName(SecurityUtils.getLoginUser().getNickName());
+        List<Details> details = new ArrayList<>();
+        Details details1 = new Details();
+        details1.setInboundQuantity(dto.getQuantity());
+//        details1.setId(Math.toIntExact(salesLedgerProduct.getId()));
+//        details1.setUnitPrice(salesLedgerProduct.getTaxInclusiveUnitPrice());
+//        details1.setTotalPrice(salesLedgerProduct.getTaxInclusiveTotalPrice());
+//        details1.setProductModelId(salesLedgerProduct.getProductModelId());
+        details.add(details1);
+        procurementRecordOutAdd.setDetails(details);
+//        procurementRecordOutAdd.setQualityInspectId(qualityInspect.getId());
+        procurementRecordService.add(procurementRecordOutAdd);
+
         /*鏇存柊宸ュ崟鍜岀敓浜ц鍗�*/
         ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectById(dto.getWorkOrderId());
         productWorkOrder.setCompleteQuantity(productWorkOrder.getCompleteQuantity().add(dto.getQuantity()));

--
Gitblit v1.9.3