From f088078e626e16b28d69cdbcbf514b30f1dcefe7 Mon Sep 17 00:00:00 2001
From: buhuazhen <hua100783@gmail.com>
Date: 星期三, 22 四月 2026 11:51:58 +0800
Subject: [PATCH] refactor(production): 优化生产订单及工单号生成逻辑

---
 src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java |   41 ++++++++++++++++++++++++-----------------
 1 files changed, 24 insertions(+), 17 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 36a02b7..18a0a5a 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -45,10 +45,7 @@
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @Service
@@ -151,6 +148,10 @@
         productionProductMain.setAuditUserId(dto.getAuditUserId());
         productionProductMain.setAuditUserName(dto.getAuditUserName());
         productionProductMain.setStatus(0);
+        productionProductMain.setStartTime(dto.getStartTime());
+        productionProductMain.setEndTime(dto.getEndTime());
+        productionProductMain.setDeviceId(productProcess.getDeviceId());
+        productionProductMain.setDeviceName(productProcess.getDeviceName());
         productionProductMainMapper.insert(productionProductMain);
         /*鏂板鎶ュ伐鎶曞叆琛�*/
         List<ProductStructureDto> productStructureDtos = productStructureMapper.listBybomAndProcess(productProcessRoute.getBomId(), productProcess.getId());
@@ -207,12 +208,7 @@
             }
             productOrderMapper.updateById(productOrder);
         }
-        //濡傛灉鎶ュ簾鏁伴噺>0,闇�瑕佽繘鍏ユ姤搴熺殑搴撳瓨
-        if (ObjectUtils.isNotEmpty(dto.getScrapQty())) {
-            if (dto.getScrapQty().compareTo(BigDecimal.ZERO) > 0) {
-                stockUtils.addUnStock(productModel.getId(), dto.getScrapQty(), StockInUnQualifiedRecordTypeEnum.PRODUCTION_SCRAP.getCode(), productionProductMain.getId());
-            }
-        }
+
         //nextAddProductMain(productionProductOutput) // 鐢变簬闇�瑕佸鏍革紝鎵�浠ラ渶瑕佹媶灏佷笅鏉�
         return true;
     }
@@ -223,7 +219,9 @@
         ProductionProductMain productionProductMain = productionProductMainMapper.selectById(productAuditVo.getId());
 
         // 褰撳墠瀹℃壒浜� 瑕佷笌褰撳墠鐧诲綍浜轰负鍚屼竴浜�
-        Assert.isTrue(SecurityUtils.getUserId().equals(productionProductMain.getAuditUserId()), "褰撳墠鐧诲綍鐢ㄦ埛涓嶆槸褰撳墠瀹℃壒浜�");
+        if(productionProductMain.getAuditUserId() != -1){
+            Assert.isTrue(SecurityUtils.getUserId().equals(productionProductMain.getAuditUserId()), "褰撳墠鐧诲綍鐢ㄦ埛涓嶆槸褰撳墠瀹℃壒浜�");
+        }
 
 
         // 鐘舵�佸繀椤讳负寰呭鏍哥姸鎬�
@@ -346,13 +344,11 @@
                 }
             }else {
                 //鐩存帴鍏ュ簱
-                stockUtils.addStock(productProcessRouteItem.getProductModelId(), productQty, StockInQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_IN.getCode(), productionProductMain.getId());
+                stockUtils.addStock(productProcessRouteItem.getProductModelId(), productQty, StockInQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_IN.getCode(), productionProductMain.getId(),"-","-","-");
             }
 
             /*娣诲姞鐢熶骇鏍哥畻        鍖哄垎宸ュ簭鏄浠惰繕鏄鏃�*/
-            BigDecimal workHours = (productProcess.getType() == 1)
-                    ? productProcess.getSalaryQuota().multiply(productQty)
-                    : productProcess.getSalaryQuota();
+            BigDecimal workHours = productProcess.getSalaryQuota();
 
             SalesLedgerProductionAccounting salesLedgerProductionAccounting = SalesLedgerProductionAccounting.builder()
                     .productMainId(productionProductMain.getId())
@@ -365,6 +361,13 @@
                     .tenantId(productionProductOutput.getTenantId())
                     .build();
             salesLedgerProductionAccountingMapper.insert(salesLedgerProductionAccounting);
+        }
+
+        //濡傛灉鎶ュ簾鏁伴噺>0,闇�瑕佽繘鍏ユ姤搴熺殑搴撳瓨
+        if (ObjectUtils.isNotEmpty(productionProductOutput.getScrapQty())) {
+            if (productionProductOutput.getScrapQty().compareTo(BigDecimal.ZERO) > 0) {
+                stockUtils.addUnStock(productModel.getId(), productionProductOutput.getScrapQty(), StockInUnQualifiedRecordTypeEnum.PRODUCTION_SCRAP.getCode(), productionProductMain.getId(),"-","-","-");
+            }
         }
     }
 
@@ -395,9 +398,13 @@
             BigDecimal scrapQty = productionProductOutput.getScrapQty() == null ? BigDecimal.ZERO : productionProductOutput.getScrapQty();
             BigDecimal completeQty = productWorkOrder.getCompleteQuantity() == null ? BigDecimal.ZERO : productWorkOrder.getCompleteQuantity();
 
-            BigDecimal validQuantity = outputQty.subtract(scrapQty);
+            // 蹇呴』涓哄鏍搁�氳繃鐨勬墠浼氬噺灏戞暟閲�
 
-            productWorkOrder.setCompleteQuantity(completeQty.subtract(validQuantity));
+
+            BigDecimal validQuantity = outputQty.subtract(scrapQty);
+            if(productionProductMain.getAuditStatus() != 2){
+                productWorkOrder.setCompleteQuantity(completeQty.subtract(validQuantity).max(BigDecimal.ZERO));
+            }
             productWorkOrder.setActualEndTime(null);
             productWorkOrderMapper.updateById(productWorkOrder);
         } else {

--
Gitblit v1.9.3