From f4c9d1b0bbc0d9666180c7f77fb466bd45e10a48 Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期五, 16 一月 2026 17:44:22 +0800
Subject: [PATCH] 1.开票台账 2.来漂台账 未开票数量和金额优化

---
 src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java |   54 +++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 47 insertions(+), 7 deletions(-)

diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
index 2154217..1dadd18 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -12,18 +12,22 @@
 import com.ruoyi.account.pojo.AccountIncome;
 import com.ruoyi.account.service.AccountIncomeService;
 import com.ruoyi.basic.mapper.CustomerMapper;
+import com.ruoyi.basic.mapper.ProductModelMapper;
 import com.ruoyi.basic.pojo.Customer;
+import com.ruoyi.basic.pojo.ProductModel;
 import com.ruoyi.common.enums.FileNameType;
 import com.ruoyi.common.exception.base.BaseException;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.other.mapper.TempFileMapper;
 import com.ruoyi.other.pojo.TempFile;
+import com.ruoyi.production.dto.ProductStructureDto;
 import com.ruoyi.production.mapper.*;
 import com.ruoyi.production.pojo.*;
 import com.ruoyi.project.system.domain.SysDept;
 import com.ruoyi.project.system.mapper.SysDeptMapper;
 import com.ruoyi.quality.mapper.QualityInspectMapper;
+import com.ruoyi.quality.pojo.QualityInspect;
 import com.ruoyi.sales.dto.MonthlyAmountDto;
 import com.ruoyi.sales.dto.SalesLedgerDto;
 import com.ruoyi.sales.mapper.*;
@@ -95,6 +99,7 @@
     private final ProductOrderMapper productOrderMapper;
 
     private final ProcessRouteMapper processRouteMapper;
+    private final ProductProcessRouteMapper productProcessRouteMapper;
 
     private final ProcessRouteItemMapper processRouteItemMapper;
 
@@ -121,6 +126,10 @@
     private static final long LOCK_EXPIRE_TIME = 30;  // 閿佽嚜鍔ㄨ繃鏈熸椂闂达紙绉掞級
 
     private final RedisTemplate<String, String> redisTemplate;
+    @Autowired
+    private ProductModelMapper productModelMapper;
+    @Autowired
+    private ProductStructureMapper productStructureMapper;
 
     @Override
     public List<SalesLedger> selectSalesLedgerList(SalesLedgerDto salesLedgerDto) {
@@ -399,7 +408,7 @@
             // 鎵归噺鏌ヨprocessRouteItems
             List<ProductProcessRouteItem> allRouteItems = productProcessRouteItemMapper.selectList(
                     new LambdaQueryWrapper<ProductProcessRouteItem>()
-                            .in(ProductProcessRouteItem::getRouteId, orderIds)
+                            .in(ProductProcessRouteItem::getProductOrderId, orderIds)
             );
 
             if (!CollectionUtils.isEmpty(allRouteItems)) {
@@ -431,6 +440,16 @@
                     if (!CollectionUtils.isEmpty(productMainIds)) {
                         productionProductOutputMapper.deleteByProductMainIds(productMainIds);
                         productionProductInputMapper.deleteByProductMainIds(productMainIds);
+                        List<QualityInspect> qualityInspects = qualityInspectMapper.selectList(
+                                new LambdaQueryWrapper<QualityInspect>()
+                                        .in(QualityInspect::getProductMainId, productMainIds)
+                        );
+                        qualityInspects.forEach(qualityInspect -> {
+                            //inspectState=1 宸叉彁浜� 涓嶈兘鍒犻櫎
+                            if(qualityInspect.getInspectState() == 1){
+                                throw new RuntimeException("宸叉彁浜ょ殑妫�楠屽崟涓嶈兘鍒犻櫎");
+                            }
+                        });
                         qualityInspectMapper.deleteByProductMainIds(productMainIds);
                     }
 
@@ -444,7 +463,11 @@
             }
             // 鎵归噺鍒犻櫎processRouteItem
             productProcessRouteItemMapper.delete(new LambdaQueryWrapper<ProductProcessRouteItem>()
-                    .in(ProductProcessRouteItem::getRouteId, orderIds));
+                    .in(ProductProcessRouteItem::getProductOrderId, orderIds));
+
+            // 鎵归噺鍒犻櫎productProcessRoute
+            productProcessRouteMapper.delete(new LambdaQueryWrapper<ProductProcessRoute>()
+                    .in(ProductProcessRoute::getProductOrderId, orderIds));
 
             // 鎵归噺鍒犻櫎productOrder
             productOrderMapper.delete(new LambdaQueryWrapper<ProductOrder>()
@@ -675,20 +698,31 @@
                 productOrder.setSalesLedgerId(salesLedgerProduct.getSalesLedgerId());
                 productOrder.setProductModelId(salesLedgerProduct.getId());
                 productOrder.setNpsNo("SC" + String.format("%08d", salesLedgerProduct.getId()));
+                productOrder.setQuantity(salesLedgerProduct.getQuantity());//闇�姹傛暟閲�
+                productOrder.setCompleteQuantity(BigDecimal.ZERO);//瀹屾垚鏁伴噺
                 productOrderMapper.insert(productOrder);
 
                 ProcessRoute processRoute = processRouteMapper.selectOne(new QueryWrapper<ProcessRoute>().lambda().eq(ProcessRoute::getProductModelId, salesLedgerProduct.getProductModelId()));
+                List<ProductStructureDto> productStructureDtos = productStructureMapper.listBybomId(processRoute.getBomId());
                 if (processRoute != null) {
+                    //鏂板鐢熶骇璁㈠崟宸ヨ壓璺嚎涓昏〃
+                    ProductProcessRoute productProcessRoute = new ProductProcessRoute();
+                    productProcessRoute.setProductModelId(processRoute.getProductModelId());
+                    productProcessRoute.setProcessRouteCode(processRoute.getProcessRouteCode());
+                    productProcessRoute.setProductOrderId(productOrder.getId());
+                    productProcessRoute.setBomId(processRoute.getBomId());
+                    productProcessRouteMapper.insert(productProcessRoute);
+                    //鏂板鐢熶骇璁㈠崟宸ヨ壓璺嚎瀛愯〃
                     List<ProcessRouteItem> processRouteItems = processRouteItemMapper.selectList(new QueryWrapper<ProcessRouteItem>().lambda().eq(ProcessRouteItem::getRouteId, processRoute.getId()));
                     // 鐢熸垚褰撳墠鏃ユ湡鐨勫墠缂�锛氬勾鏈堟棩
                     String datePrefix = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
-                    int dragSort = 1;
                     for (ProcessRouteItem processRouteItem : processRouteItems) {
                         ProductProcessRouteItem productProcessRouteItem = new ProductProcessRouteItem();
                         productProcessRouteItem.setProductModelId(processRouteItem.getProductModelId());
                         productProcessRouteItem.setProcessId(processRouteItem.getProcessId());
-                        productProcessRouteItem.setRouteId(productOrder.getId());
-                        productProcessRouteItem.setDragSort(dragSort);
+                        productProcessRouteItem.setProductOrderId(productOrder.getId());
+                        productProcessRouteItem.setProductRouteId(productProcessRoute.getId());
+                        productProcessRouteItem.setDragSort(processRouteItem.getDragSort());
                         int insert = productProcessRouteItemMapper.insert(productProcessRouteItem);
                         if (insert > 0) {
                             // 鏌ヨ浠婃棩宸插瓨鍦ㄧ殑鏈�澶у伐鍗曞彿
@@ -714,14 +748,20 @@
                             // 鐢熸垚瀹屾暣鐨勫伐鍗曞彿
                             String workOrderNoStr = String.format("%s%03d", datePrefix, sequenceNumber);
                             ProductWorkOrder productWorkOrder = new ProductWorkOrder();
+                            productStructureDtos.stream().forEach(productStructureDto -> {
+                                if (productStructureDto.getProductModelId().equals(productProcessRouteItem.getProductModelId())){
+                                    productWorkOrder.setPlanQuantity(productWorkOrder.getPlanQuantity());
+                                }
+                            });
+                            if (Objects.equals(productProcessRouteItem.getProductModelId(), salesLedgerProduct.getProductModelId())) {
+                                productWorkOrder.setPlanQuantity(salesLedgerProduct.getQuantity());
+                            }
                             productWorkOrder.setProductProcessRouteItemId(productProcessRouteItem.getId());
                             productWorkOrder.setProductOrderId(productOrder.getId());
-                            productWorkOrder.setPlanQuantity(salesLedgerProduct.getQuantity());
                             productWorkOrder.setWorkOrderNo(workOrderNoStr);
                             productWorkOrder.setStatus(1);
                             productWorkOrderMapper.insert(productWorkOrder);
                         }
-                        dragSort++;
                     }
                     productOrder.setRouteId(processRoute.getId());
                     productOrderMapper.updateById(productOrder);

--
Gitblit v1.9.3