From 04dce61c02c10832665cdaf1aabf5b7e9b31da47 Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期三, 21 一月 2026 16:17:19 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_New' into dev_New

---
 src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java |   90 ++++++++++++++++++++++++--------------------
 1 files changed, 49 insertions(+), 41 deletions(-)

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 e805784..8fdf4f9 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -8,6 +8,9 @@
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.framework.web.domain.R;
+import com.ruoyi.procurementrecord.utils.StockUtils;
+import com.ruoyi.production.dto.ProductStructureDto;
 import com.ruoyi.production.mapper.*;
 import com.ruoyi.production.pojo.*;
 import com.ruoyi.purchase.mapper.PurchaseLedgerMapper;
@@ -31,6 +34,7 @@
 
 import java.lang.reflect.Field;
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
@@ -71,6 +75,13 @@
     private ProductionProductInputMapper productionProductInputMapper;
     private QualityInspectMapper qualityInspectMapper;
 
+    private StockUtils stockUtils;
+
+
+
+    @Autowired
+    private ProductStructureMapper productStructureMapper;
+
     @Override
     public SalesLedgerProduct selectSalesLedgerProductById(Long id) {
         return salesLedgerProductMapper.selectById(id);
@@ -98,10 +109,10 @@
                         if(ledgerProduct.getId().intValue() == registrationProductDto.getSalesLedgerProductId()){
                             invoiceNum =  invoiceNum.add(registrationProductDto.getInvoiceNum());
                             invoiceAmount = invoiceAmount.add(registrationProductDto.getInvoiceAmount());
-                            noInvoiceNum = ledgerProduct.getQuantity().subtract(invoiceNum);
-                            noInvoiceAmount = ledgerProduct.getTaxInclusiveTotalPrice().subtract(invoiceAmount);
                         }
                     }
+                    noInvoiceNum = ledgerProduct.getQuantity().subtract(invoiceNum);
+                    noInvoiceAmount = ledgerProduct.getTaxInclusiveTotalPrice().subtract(invoiceAmount);
                     ledgerProduct.setInvoiceNum(invoiceNum);
                     ledgerProduct.setInvoiceAmount(invoiceAmount);
                     ledgerProduct.setNoInvoiceNum(noInvoiceNum);
@@ -135,45 +146,7 @@
         // 2. 鎵ц鍒犻櫎鎿嶄綔
         int result = salesLedgerProductMapper.deleteBatchIds(Arrays.asList(ids));
         //鍒犻櫎瀵瑰簲鐨勭敓浜ц鍗�
-        //鎵归噺鏌ヨproductOrder
-        List<ProductOrder> productOrders = productOrderMapper.selectList(
-                new LambdaQueryWrapper<ProductOrder>()
-                        .in(ProductOrder::getProductModelId, ids)
-        );
-
-        if (!CollectionUtils.isEmpty(productOrders)) {
-            List<Long> orderIds = productOrders.stream()
-                    .map(ProductOrder::getId)
-                    .collect(Collectors.toList());
-
-            // 鎵归噺鏌ヨprocessRouteItems
-            List<ProductProcessRouteItem> allRouteItems = productProcessRouteItemMapper.selectList(
-                    new LambdaQueryWrapper<ProductProcessRouteItem>()
-                            .in(ProductProcessRouteItem::getProductOrderId, orderIds)
-            );
-
-            if (!CollectionUtils.isEmpty(allRouteItems)) {
-                List<Long> routeItemIds = allRouteItems.stream()
-                        .map(ProductProcessRouteItem::getId)
-                        .collect(Collectors.toList());
-
-                // 鎵归噺鍒犻櫎workOrder
-                productWorkOrderMapper.delete(new LambdaQueryWrapper<ProductWorkOrder>()
-                                .in(ProductWorkOrder::getProductProcessRouteItemId, routeItemIds));
-            }
-
-            // 鎵归噺鍒犻櫎productProcessRouteItem
-            productProcessRouteItemMapper.delete(new LambdaQueryWrapper<ProductProcessRouteItem>()
-                            .in(ProductProcessRouteItem::getProductOrderId, orderIds));
-
-            // 鎵归噺鍒犻櫎productProcessRoute
-            productProcessRouteMapper.delete(new LambdaQueryWrapper<ProductProcessRoute>()
-                    .in(ProductProcessRoute::getProductOrderId, orderIds));
-
-            // 鎵归噺鍒犻櫎productOrder
-            productOrderMapper.delete(new LambdaQueryWrapper<ProductOrder>()
-                    .in(ProductOrder::getProductModelId, ids));
-        }
+        deleteProductionData(Arrays.asList(ids));
 
         // 3. 瀵规瘡涓富琛↖D杩涜閲戦鏇存柊
         for (Long salesLedgerId : mainIds) {
@@ -291,6 +264,7 @@
                 productProcessRouteItem.setProcessId(processRouteItem.getProcessId());
                 productProcessRouteItem.setProductOrderId(productOrder.getId());
                 productProcessRouteItem.setProductRouteId(productProcessRoute.getId());
+                productProcessRouteItem.setDragSort(processRouteItem.getDragSort());
                 int insert = productProcessRouteItemMapper.insert(productProcessRouteItem);
                 if (insert > 0) {
                     // 鏌ヨ浠婃棩宸插瓨鍦ㄧ殑鏈�澶у伐鍗曞彿
@@ -477,4 +451,38 @@
             throw new RuntimeException("鍔ㄦ�佹洿鏂颁富琛ㄩ噾棰濆け璐�", e);
         }
     }
+    @Override
+    public R judgmentInventory(SalesLedgerProduct salesLedgerProduct) {
+        //鑾峰彇浜у搧鏈�鏂扮殑宸ヨ壓璺嚎
+        ProcessRoute processRoute = processRouteMapper.selectOne(new QueryWrapper<ProcessRoute>().lambda().eq(ProcessRoute::getProductModelId, salesLedgerProduct.getProductModelId()).orderByDesc(ProcessRoute::getCreateTime).last("LIMIT 1"));
+        if (processRoute == null) {
+            return R.fail("璇峰厛璁剧疆宸ヨ壓璺嚎");
+        }
+        List<ProductStructureDto> productStructureDtos = productStructureMapper.listBybomId(processRoute.getBomId());
+        if (productStructureDtos.isEmpty()) {
+            return R.fail("璇峰厛璁剧疆浜у搧缁撴瀯");
+        }
+        int count = 0;
+        StringBuilder stringBuffer = new StringBuilder();
+        for (ProductStructureDto productStructureDto : productStructureDtos) {
+            BigDecimal stockQuantity = stockUtils.getStockQuantity(productStructureDto.getProductModelId()).get("stockQuantity");
+            //鎵�闇�鏁伴噺
+            BigDecimal multiply = salesLedgerProduct.getQuantity().multiply(productStructureDto.getUnitQuantity());
+            BigDecimal subtract =stockQuantity.subtract(multiply).divide(BigDecimal.ONE, 2, RoundingMode.CEILING);
+            if (subtract.compareTo(BigDecimal.ZERO) <= 0) {
+                count++;
+                stringBuffer.append(productStructureDto.getProductName())
+                        .append("-")
+                        .append(productStructureDto.getModel())
+                        .append("搴撳瓨涓嶈冻锛屽皯")
+                        .append(subtract)
+                        .append(System.lineSeparator());
+            }
+        }
+        if (count>0) {
+            return R.fail(stringBuffer.toString());
+        }else {
+            return R.ok();
+        }
+    }
 }

--
Gitblit v1.9.3