From f4d4d29368ccacb807f93e2033cd4a643a3ddade Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期一, 30 三月 2026 10:20:28 +0800
Subject: [PATCH] yys 1.修改bug

---
 src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java |   96 ++++++++++++++++++++++++++---------------------
 1 files changed, 53 insertions(+), 43 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 f8408e2..9c55cbb 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -90,6 +90,25 @@
         return productionProductMainMapper.listPageProductionProductMainDto(page, productionProductMainDto);
     }
 
+    public BigDecimal getRatio(List<ProductWorkOrder> productWorkOrderList,BigDecimal quantity){
+        // 鑾峰彇瀹屾垚鏁伴噺
+        BigDecimal completeQuantity = productWorkOrderList
+                .stream()
+                .map(ProductWorkOrder::getCompleteQuantity)
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+        // 鑾峰彇鎵�鏈夋暟閲�
+        BigDecimal totalQuantity = productWorkOrderList
+                .stream()
+                .map(ProductWorkOrder::getPlanQuantity)
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+        completeQuantity = completeQuantity.add(quantity); // 鍔犱笂鎶ュ伐鏁伴噺
+        if (completeQuantity.compareTo(BigDecimal.ZERO) <= 0) {
+            return BigDecimal.ZERO;
+        }
+        // 璁$畻姣斾緥
+        return completeQuantity.divide(totalQuantity, 2, RoundingMode.HALF_UP);
+    }
+
     @Override
     public Boolean addProductMain(ProductionProductMainDto dto) {
         SysUser user = userMapper.selectUserById(dto.getUserId());
@@ -102,27 +121,11 @@
         // 鑾峰彇璁㈠崟鐨勫伐鍗�
         List<ProductWorkOrder> productWorkOrderList = productWorkOrderMapper.selectList(Wrappers.<ProductWorkOrder>lambdaQuery()
                 .eq(ProductWorkOrder::getProductOrderId, productProcessRouteItem.getProductOrderId()));
-        // 鑾峰彇瀹屾垚鏁伴噺
-        BigDecimal completeQuantity = productWorkOrderList
-                .stream()
-                .filter(item -> item.getStatus() == 3)
-                .map(ProductWorkOrder::getCompleteQuantity)
-                .reduce(BigDecimal.ZERO, BigDecimal::add);
-        // 鑾峰彇鎵�鏈夋暟閲�
-        BigDecimal totalQuantity = productWorkOrderList
-                .stream()
-                .map(ProductWorkOrder::getPlanQuantity)
-                .reduce(BigDecimal.ZERO, BigDecimal::add);
-        // 鑾峰彇鏈畬鎴愭暟閲�
-        BigDecimal unCompleteQuantity = totalQuantity.subtract(completeQuantity);
-        if (unCompleteQuantity.compareTo(BigDecimal.ZERO) <= 0) {
-            throw new ServiceException("璇ュ伐鍗曞凡鍏ㄩ儴瀹屾垚");
-        }
-        // 璁$畻姣斾緥
-        BigDecimal ratio = unCompleteQuantity.divide(totalQuantity, 2, RoundingMode.HALF_UP);
         if(CollectionUtils.isEmpty(productWorkOrderList)){
             productWorkOrderList = new ArrayList<>();
         }
+        BigDecimal ratio = getRatio(productWorkOrderList,dto.getQuantity().subtract(dto.getScrapQty() == null ? BigDecimal.ZERO : dto.getScrapQty()));
+
         //褰撳墠鍏蜂綋宸ュ簭
         ProductProcess productProcess = productProcessMapper.selectById(productProcessRouteItem.getProcessId());
         //宸ヨ壓璺嚎涓綋鍓嶅伐搴忓搴旂殑浜у嚭瑙勬牸鍨嬪彿
@@ -255,16 +258,17 @@
             }
             // 閫氳繃姣斾緥璁$畻瀹屾垚鏁伴噺
             productOrder.setCompleteQuantity(productOrder.getQuantity().multiply(ratio));
-            if (productWorkOrderList.size() == productProcessRouteItems.size() - 1) {
-                //濡傛灉鏄渶鍚庝竴閬撳伐搴忔姤宸ヤ箣鍚庣敓浜ц鍗曞畬鎴愭暟閲�+
+            //濡傛灉鏄渶鍚庝竴閬撳伐搴忔姤宸ヤ箣鍚庣敓浜ц鍗曞畬鎴愭暟閲�+
+            if (productOrder.getCompleteQuantity().compareTo(productOrder.getQuantity()) == 0) {
                 productOrder.setCompleteQuantity(productOrder.getQuantity());
-                if (productOrder.getCompleteQuantity().compareTo(productOrder.getQuantity()) == 0) {
-                    productOrder.setEndTime(LocalDateTime.now());//缁撴潫鏃堕棿
-                    productOrder.setStatus("宸插畬鎴�");
-                    // 鐢熶骇瀹屾垚鍏ュ簱
-                    stockUtils.addStock(productProcessRouteItem.getProductModelId(), productOrder.getCompleteQuantity(), StockInQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_IN.getCode(), productionProductMain.getId());
-                }
+                productOrder.setEndTime(LocalDateTime.now());//缁撴潫鏃堕棿
+                productOrder.setStatus("宸插畬鎴�");
+                // 鐢熶骇瀹屾垚鍏ュ簱
+                stockUtils.addStock(productProcessRouteItem.getProductModelId(), productOrder.getCompleteQuantity(), StockInQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_IN.getCode(), productionProductMain.getId());
             }
+//            if (productWorkOrderList.stream().filter(item -> item.getStatus() == 3).count() == productProcessRouteItems.size() - 1) {
+//
+//            }
             productOrderMapper.updateById(productOrder);
             /*娣诲姞鐢熶骇鏍哥畻*/
             SalesLedgerProductionAccounting salesLedgerProductionAccounting = SalesLedgerProductionAccounting.builder()
@@ -317,26 +321,32 @@
         }
 
         //鍒ゆ柇鏄惁鏄渶鍚庝竴閬撳伐搴�
-        List<ProductProcessRouteItem> productProcessRouteItems = productProcessRouteItemMapper.selectList(Wrappers.<ProductProcessRouteItem>lambdaQuery().eq(ProductProcessRouteItem::getProductRouteId, productProcessRouteItem.getProductRouteId()));
-        if (productProcessRouteItem.getDragSort() != null && productProcessRouteItems != null && productProcessRouteItem.getDragSort() == productProcessRouteItems.size()) {
-            ProductOrder productOrder = productOrderMapper.selectById(productWorkOrder.getProductOrderId());
-            if (productOrder != null) {
-                BigDecimal orderCompleteQty = productOrder.getCompleteQuantity() == null ? BigDecimal.ZERO : productOrder.getCompleteQuantity();
-                BigDecimal totalQty = productionProductOutput.getQuantity() != null ? productionProductOutput.getQuantity() : BigDecimal.ZERO;
-                BigDecimal scrapQty = productionProductOutput.getScrapQty() != null ? productionProductOutput.getScrapQty() : BigDecimal.ZERO;
+//        List<ProductProcessRouteItem> productProcessRouteItems = productProcessRouteItemMapper.selectList(Wrappers.<ProductProcessRouteItem>lambdaQuery().eq(ProductProcessRouteItem::getProductRouteId, productProcessRouteItem.getProductRouteId()));
+//        if (productProcessRouteItem.getDragSort() != null && productProcessRouteItems != null && productProcessRouteItem.getDragSort() == productProcessRouteItems.size()) {
+//
+//        }
+        ProductOrder productOrder = productOrderMapper.selectById(productWorkOrder.getProductOrderId());
+        if (productOrder != null) {
+            BigDecimal orderCompleteQty = productOrder.getCompleteQuantity() == null ? BigDecimal.ZERO : productOrder.getCompleteQuantity();
+            BigDecimal totalQty = productionProductOutput.getQuantity() != null ? productionProductOutput.getQuantity() : BigDecimal.ZERO;
+            BigDecimal scrapQty = productionProductOutput.getScrapQty() != null ? productionProductOutput.getScrapQty() : BigDecimal.ZERO;
 
-                BigDecimal actualQualifiedQty = totalQty.subtract(scrapQty);
+            BigDecimal actualQualifiedQty = totalQty.subtract(scrapQty);
 
-                BigDecimal newCompleteQty = orderCompleteQty.subtract(actualQualifiedQty);
-
-                productOrder.setCompleteQuantity(newCompleteQty.compareTo(BigDecimal.ZERO) < 0 ? BigDecimal.ZERO : newCompleteQty);
-
-                productOrder.setEndTime(null);
-                productOrder.setStatus("鐢熶骇涓�");
-                productOrderMapper.updateById(productOrder);
-            } else {
-                throw new ServiceException("鍏宠仈鐨勭敓浜ц鍗曚笉瀛樺湪");
+            BigDecimal newCompleteQty = orderCompleteQty.subtract(actualQualifiedQty);
+            List<ProductWorkOrder> productWorkOrderList = productWorkOrderMapper.selectList(Wrappers.<ProductWorkOrder>lambdaQuery()
+                    .eq(ProductWorkOrder::getProductOrderId, productProcessRouteItem.getProductOrderId()));
+            if(CollectionUtils.isEmpty(productWorkOrderList)){
+                productWorkOrderList = new ArrayList<>();
             }
+            BigDecimal ratio = getRatio(productWorkOrderList,BigDecimal.ZERO);
+            productOrder.setCompleteQuantity(productOrder.getQuantity().multiply(ratio));
+
+            productOrder.setEndTime(null);
+            productOrder.setStatus("鐢熶骇涓�");
+            productOrderMapper.updateById(productOrder);
+        } else {
+            throw new ServiceException("鍏宠仈鐨勭敓浜ц鍗曚笉瀛樺湪");
         }
         //鍒犻櫎璐ㄦ
         qualityInspectMapper.selectList(

--
Gitblit v1.9.3