From a2891398ea8c4c066d46cb8f174556ebbd93c7f9 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期五, 27 三月 2026 17:52:01 +0800
Subject: [PATCH] yys 1.完善销售下单,生成生产订单

---
 src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java |   28 ++++++++++++++++++++++++----
 1 files changed, 24 insertions(+), 4 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 dfc035c..6be85eb 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -34,6 +34,7 @@
 import com.ruoyi.production.mapper.ProductionProductMainMapper;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
@@ -98,10 +99,27 @@
         if (productProcessRouteItem == null) {
             throw new RuntimeException("宸ヨ壓璺嚎椤逛笉瀛樺湪");
         }
-        // 鑾峰彇璁㈠崟鐨勫凡瀹屾垚宸ュ崟
+        // 鑾峰彇璁㈠崟鐨勫伐鍗�
         List<ProductWorkOrder> productWorkOrderList = productWorkOrderMapper.selectList(Wrappers.<ProductWorkOrder>lambdaQuery()
-                .eq(ProductWorkOrder::getProductOrderId, productProcessRouteItem.getProductOrderId())
-                .eq(ProductWorkOrder::getStatus, 3));
+                .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<>();
         }
@@ -235,9 +253,11 @@
                 productOrder.setStartTime(LocalDateTime.now());//寮�濮嬫椂闂�
                 productOrder.setStatus("鐢熶骇涓�");
             }
+            // 閫氳繃姣斾緥璁$畻瀹屾垚鏁伴噺
+            productOrder.setCompleteQuantity(productOrder.getQuantity().multiply(ratio));
             if (productWorkOrderList.size() == productProcessRouteItems.size() - 1) {
                 //濡傛灉鏄渶鍚庝竴閬撳伐搴忔姤宸ヤ箣鍚庣敓浜ц鍗曞畬鎴愭暟閲�+
-                productOrder.setCompleteQuantity(productOrder.getCompleteQuantity().add(productQty));
+                productOrder.setCompleteQuantity(productOrder.getQuantity());
                 if (productOrder.getCompleteQuantity().compareTo(productOrder.getQuantity()) == 0) {
                     productOrder.setEndTime(LocalDateTime.now());//缁撴潫鏃堕棿
                     productOrder.setStatus("宸插畬鎴�");

--
Gitblit v1.9.3