From b069101e1bf347ceab11e33d73b2fbb7f37d4686 Mon Sep 17 00:00:00 2001
From: zss <zss@example.com>
Date: 星期六, 25 四月 2026 17:15:53 +0800
Subject: [PATCH] feat(production): 生产订单的工艺路线和参数的增删改逻辑

---
 src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java |   36 ++++++++++++++++++++++++++++++------
 1 files changed, 30 insertions(+), 6 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 92fd9f2..044998a 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -19,6 +19,7 @@
 import com.ruoyi.procurementrecord.utils.StockUtils;
 import com.ruoyi.production.bean.dto.ProductStructureDto;
 import com.ruoyi.production.bean.dto.ProductionProductMainDto;
+import com.ruoyi.production.enums.ProductOrderStatusEnum;
 import com.ruoyi.production.mapper.*;
 import com.ruoyi.production.pojo.*;
 import com.ruoyi.production.service.ProductionProductMainService;
@@ -107,6 +108,7 @@
     }
 
     private Boolean addProductMainByProductionTask(ProductionProductMainDto dto) {
+        // 鎶ュ伐浠ヨ鍗曞伐搴忓揩鐓т负鍑嗭紝閬垮厤宸ヨ壓涓绘暟鎹彉鏇村悗褰卞搷鍘嗗彶宸ュ崟鎵ц銆�
         SysUser user = userMapper.selectUserById(dto.getUserId());
         ProductionOperationTask productionOperationTask = productionOperationTaskMapper.selectById(dto.getProductionOperationTaskId());
         if (productionOperationTask == null) {
@@ -134,7 +136,6 @@
         productionProductMain.setUserId(dto.getUserId());
         productionProductMain.setUserName(dto.getUserName());
         productionProductMain.setProductionOperationTaskId(productionOperationTask.getId());
-        productionProductMain.setWorkOrderId(productionOperationTask.getId());
         productionProductMain.setStatus(0);
         productionProductMainMapper.insert(productionProductMain);
 
@@ -144,6 +145,7 @@
         productStructureDto.setUnitQuantity(BigDecimal.ONE);
         productStructureDtos.add(productStructureDto);
         for (ProductStructureDto item : productStructureDtos) {
+            // 褰撳墠瀹炵幇鎸夊伐搴忔垚鍝佺洿鎺ヤ綔涓烘姇鍏ワ紝鍚庣画鑻ユ帴鍏ラ鏂欒褰曞彲鍦ㄨ繖閲屾浛鎹㈡潵婧愩��
             ProductionProductInput productionProductInput = new ProductionProductInput();
             productionProductInput.setProductionProductMainId(productionProductMain.getId());
             productionProductInput.setProductMainId(productionProductMain.getId());
@@ -166,11 +168,12 @@
 
         List<ProductionOrderRoutingOperation> routingOperationList = productionOrderRoutingOperationMapper.selectList(
                 Wrappers.<ProductionOrderRoutingOperation>lambdaQuery()
-                        .eq(ProductionOrderRoutingOperation::getTechnologyRoutingId, routingOperation.getTechnologyRoutingId())
+                        .eq(ProductionOrderRoutingOperation::getOrderRoutingId, routingOperation.getOrderRoutingId())
                         .eq(ProductionOrderRoutingOperation::getProductionOrderId, routingOperation.getProductionOrderId()));
         boolean isLastOperation = routingOperation.getDragSort() != null && routingOperation.getDragSort().equals(routingOperationList.size());
         if (productQty.compareTo(BigDecimal.ZERO) > 0) {
             if (Boolean.TRUE.equals(routingOperation.getIsQuality())) {
+                // 璐ㄦ宸ュ簭鍏堢敓鎴愭楠屽崟锛岄潪璐ㄦ宸ュ簭鐩存帴鍏ュ悎鏍煎搧搴撳瓨銆�
                 int inspectType = isLastOperation ? 2 : 1;
                 String process = isLastOperation ? null : technologyOperation == null ? null : technologyOperation.getName();
                 Product product = productMapper.selectById(productModel.getProductId());
@@ -209,20 +212,26 @@
             if (ObjectUtils.isNull(productionOperationTask.getActualStartTime())) {
                 productionOperationTask.setActualStartTime(LocalDate.now());
             }
+            // 鎶ュ伐椹卞姩宸ュ崟鐘舵�佹祦杞細鏈変骇鍑哄嵆杩涜涓紝杈惧埌璁″垝閲忓嵆瀹屽伐銆�
+            productionOperationTask.setStatus(3);
             if (productionOperationTask.getPlanQuantity() != null
                     && productionOperationTask.getCompleteQuantity().compareTo(productionOperationTask.getPlanQuantity()) >= 0) {
                 productionOperationTask.setActualEndTime(LocalDate.now());
+                productionOperationTask.setStatus(4);
             }
             productionOperationTaskMapper.updateById(productionOperationTask);
 
             if (ObjectUtils.isNull(productionOrder.getStartTime())) {
                 productionOrder.setStartTime(LocalDateTime.now());
             }
+            // 璁㈠崟鐘舵�佺敱鏈�鍚庝竴閬撳伐搴忕殑鍚堟牸浜у嚭鎺ㄥ姩锛岄伩鍏嶄腑闂村伐搴忔彁鍓嶅畬宸ャ��
+            productionOrder.setStatus(ProductOrderStatusEnum.RUNNING.getCode());
             if (isLastOperation) {
                 productionOrder.setCompleteQuantity(defaultDecimal(productionOrder.getCompleteQuantity()).add(productQty));
                 if (productionOrder.getQuantity() != null
                         && productionOrder.getCompleteQuantity().compareTo(productionOrder.getQuantity()) >= 0) {
                     productionOrder.setEndTime(LocalDateTime.now());
+                    productionOrder.setStatus(ProductOrderStatusEnum.FINISHED.getCode());
                 }
             }
             productionOrderMapper.updateById(productionOrder);
@@ -235,8 +244,8 @@
             }
             ProductionAccount productionAccount = new ProductionAccount();
             productionAccount.setProductionProductMainId(productionProductMain.getId());
-            productionAccount.setSalesLedgerId(productionOrder.getSalesLedgerId());
-            productionAccount.setSalesLedgerProductId(productionOrder.getSaleLedgerProductId() == null ? null : productionOrder.getSaleLedgerProductId().longValue());
+//            productionAccount.setSalesLedgerId(productionOrder.getSalesLedgerId());
+//            productionAccount.setSalesLedgerProductId(productionOrder.getSalesLedgerProductId() == null ? null : productionOrder.getSalesLedgerProductId().longValue());
             productionAccount.setSchedulingUserId(user == null ? null : user.getUserId());
             productionAccount.setSchedulingUserName(user == null ? dto.getUserName() : user.getNickName());
             productionAccount.setFinishedNum(productQty);
@@ -253,6 +262,7 @@
     }
 
     private Boolean removeProductMainByProductionTask(ProductionProductMain productionProductMain) {
+        // 鍒犻櫎鎶ュ伐闇�瑕佸悓姝ュ洖婊氳川妫�銆佸簱瀛樸�佸伐鏃舵牳绠楀拰璁㈠崟/宸ュ崟杩涘害銆�
         List<QualityInspect> qualityInspects = qualityInspectMapper.selectList(
                 Wrappers.<QualityInspect>lambdaQuery().eq(QualityInspect::getProductMainId, productionProductMain.getId()));
         if (qualityInspects.size() > 0) {
@@ -275,22 +285,36 @@
             BigDecimal validQuantity = defaultDecimal(productionProductOutput.getQuantity()).subtract(defaultDecimal(productionProductOutput.getScrapQty()));
             productionOperationTask.setCompleteQuantity(defaultDecimal(productionOperationTask.getCompleteQuantity()).subtract(validQuantity));
             productionOperationTask.setActualEndTime(null);
+            if (defaultDecimal(productionOperationTask.getCompleteQuantity()).compareTo(BigDecimal.ZERO) <= 0) {
+                productionOperationTask.setCompleteQuantity(BigDecimal.ZERO);
+                productionOperationTask.setActualStartTime(null);
+                productionOperationTask.setStatus(2);
+            } else {
+                productionOperationTask.setStatus(3);
+            }
             productionOperationTaskMapper.updateById(productionOperationTask);
 
             ProductionOrder productionOrder = productionOrderMapper.selectById(productionOperationTask.getProductionOrderId());
             ProductionOrderRoutingOperation routingOperation = productionOrderRoutingOperationMapper.selectById(productionOperationTask.getTechnologyRoutingOperationId());
             if (productionOrder != null && routingOperation != null) {
+                // 鍙湁鏈�鍚庝竴閬撳伐搴忕殑鎶ュ伐鎵嶄細褰卞搷鐢熶骇璁㈠崟瀹屽伐鏁伴噺銆�
                 List<ProductionOrderRoutingOperation> routingOperationList = productionOrderRoutingOperationMapper.selectList(
                         Wrappers.<ProductionOrderRoutingOperation>lambdaQuery()
-                                .eq(ProductionOrderRoutingOperation::getTechnologyRoutingId, routingOperation.getTechnologyRoutingId())
+                                .eq(ProductionOrderRoutingOperation::getOrderRoutingId, routingOperation.getOrderRoutingId())
                                 .eq(ProductionOrderRoutingOperation::getProductionOrderId, routingOperation.getProductionOrderId()));
                 boolean isLastOperation = routingOperation.getDragSort() != null && routingOperation.getDragSort().equals(routingOperationList.size());
                 if (isLastOperation) {
                     BigDecimal newCompleteQty = defaultDecimal(productionOrder.getCompleteQuantity()).subtract(validQuantity);
                     productionOrder.setCompleteQuantity(newCompleteQty.compareTo(BigDecimal.ZERO) < 0 ? BigDecimal.ZERO : newCompleteQty);
                     productionOrder.setEndTime(null);
-                    productionOrderMapper.updateById(productionOrder);
                 }
+                if (defaultDecimal(productionOrder.getCompleteQuantity()).compareTo(BigDecimal.ZERO) <= 0) {
+                    productionOrder.setStartTime(null);
+                    productionOrder.setStatus(ProductOrderStatusEnum.WAIT.getCode());
+                } else {
+                    productionOrder.setStatus(ProductOrderStatusEnum.RUNNING.getCode());
+                }
+                productionOrderMapper.updateById(productionOrder);
             }
         }
 

--
Gitblit v1.9.3