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/quality/service/impl/QualityUnqualifiedServiceImpl.java |   48 ++++++++++++++++++++----------------------------
 1 files changed, 20 insertions(+), 28 deletions(-)

diff --git a/src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java b/src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java
index 932a204..a716575 100644
--- a/src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java
+++ b/src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java
@@ -1,6 +1,7 @@
 package com.ruoyi.quality.service.impl;
 
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
@@ -19,6 +20,8 @@
 import com.ruoyi.production.mapper.ProductionProductMainMapper;
 import com.ruoyi.production.pojo.*;
 import com.ruoyi.production.service.ProductOrderService;
+import com.ruoyi.production.service.ProductProcessService;
+import com.ruoyi.production.service.ProductWorkOrderService;
 import com.ruoyi.quality.mapper.QualityUnqualifiedMapper;
 import com.ruoyi.quality.pojo.QualityInspect;
 import com.ruoyi.quality.pojo.QualityUnqualified;
@@ -33,12 +36,15 @@
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 @AllArgsConstructor
 @Service
 public class QualityUnqualifiedServiceImpl extends ServiceImpl<QualityUnqualifiedMapper, QualityUnqualified> implements IQualityUnqualifiedService {
 
     private final StockUtils stockUtils;
+    private final ProductWorkOrderService productWorkOrderService;
     private QualityUnqualifiedMapper qualityUnqualifiedMapper;
     private IQualityInspectService qualityInspectService;
     private ProductOrderService productOrderService;
@@ -47,6 +53,7 @@
     private ProductProcessRouteItemMapper productProcessRouteItemMapper;
     private ProductWorkOrderMapper productWorkOrderMapper;
     private StockUninventoryService stockUninventoryService;
+    private final ProductProcessService productProcessService;
 
     @Override
     public IPage<QualityUnqualified> qualityUnqualifiedListPage(Page page, QualityUnqualified qualityUnqualified) {
@@ -89,8 +96,12 @@
                         productProcessRouteMapper.insert(newProcessRoute);
                         //鏂板鐢熶骇璁㈠崟涓嬬殑宸ヨ壓璺嚎瀛愯〃
                         List<ProductProcessRouteItem> processRouteItems = productProcessRouteItemMapper.selectList(new QueryWrapper<ProductProcessRouteItem>().lambda().eq(ProductProcessRouteItem::getProductRouteId, productProcessRoute.getId()));
-                        // 鐢熸垚褰撳墠鏃ユ湡鐨勫墠缂�锛氬勾鏈堟棩
-                        String datePrefix = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
+
+                        Map<Long, ProductProcess> productProcessMap = productProcessService
+                                .list(new LambdaQueryWrapper<ProductProcess>().in(ProductProcess::getId, processRouteItems.stream().map(ProductProcessRouteItem::getProcessId).collect(Collectors.toList())))
+                                .stream()
+                                .collect(Collectors.toMap(ProductProcess::getId, productProcess -> productProcess));
+
                         for (ProductProcessRouteItem processRouteItem : processRouteItems) {
                             ProductProcessRouteItem productProcessRouteItem = new ProductProcessRouteItem();
                             BeanUtils.copyProperties(processRouteItem, productProcessRouteItem);
@@ -98,27 +109,11 @@
                             productProcessRouteItem.setProductRouteId(newProcessRoute.getId());
                             int insert = productProcessRouteItemMapper.insert(productProcessRouteItem);
                             if (insert > 0) {
-                                // 鏌ヨ浠婃棩宸插瓨鍦ㄧ殑鏈�澶у伐鍗曞彿
-                                ProductWorkOrder lastWorkOrder = productWorkOrderMapper.selectMax(datePrefix);
-                                int sequenceNumber = 1; // 榛樿搴忓彿
-                                if (lastWorkOrder != null && lastWorkOrder.getWorkOrderNo() != null) {
-                                    String lastNo = lastWorkOrder.getWorkOrderNo().toString();
-                                    if (lastNo.startsWith(datePrefix)) {
-                                        String seqStr = lastNo.substring(datePrefix.length());
-                                        try {
-                                            sequenceNumber = Integer.parseInt(seqStr) + 1;
-                                        } catch (NumberFormatException e) {
-                                            sequenceNumber = 1;
-                                        }
-                                    }
-                                }
-                                // 鐢熸垚瀹屾暣鐨勫伐鍗曞彿
-                                String workOrderNoStr = "FG" + String.format("%s%03d", datePrefix, sequenceNumber);
                                 ProductWorkOrder productWorkOrder = new ProductWorkOrder();
                                 productWorkOrder.setProductProcessRouteItemId(productProcessRouteItem.getId());
                                 productWorkOrder.setProductOrderId(order.getId());
                                 productWorkOrder.setPlanQuantity(order.getQuantity());
-                                productWorkOrder.setWorkOrderNo(workOrderNoStr);
+                                productWorkOrder.setWorkOrderNo("FG"+productWorkOrderService.generateProductWorkOrder(null, productProcessMap.getOrDefault(productProcessRouteItem.getProcessId(), new ProductProcess()).getName(), productOrder.getNpsNo()));
                                 productWorkOrder.setStatus(1);
                                 productWorkOrderMapper.insert(productWorkOrder);
                             }
@@ -127,29 +122,26 @@
                     break;
                 case "鎶ュ簾":
                     //璋冪敤涓嶅悎鏍煎簱瀛樻帴鍙� 鍏ヤ笉鍚堟牸搴�
-                    stockUtils.addUnStock(qualityInspect.getProductModelId(), unqualified.getQuantity(), StockInUnQualifiedRecordTypeEnum.DEFECTIVE_SCRAP.getCode(), unqualified.getId());
+                    stockUtils.addUnStock(qualityInspect.getProductModelId(), unqualified.getQuantity(), StockInUnQualifiedRecordTypeEnum.DEFECTIVE_SCRAP.getCode(), unqualified.getId(), "-", "-", "-");
                     break;
                 case "璁╂鏀捐":
                     //璋冪敤鎻愪氦鍚堟牸鐨勬帴鍙�
-                    stockUtils.addStock(qualityInspect.getProductModelId(), unqualified.getQuantity(), StockInQualifiedRecordTypeEnum.DEFECTIVE_PASS.getCode(), unqualified.getId());
-                    qualityInspect.setCheckResult("鍚堟牸");
-                    qualityInspectService.submit(qualityInspect);
+                    stockUtils.addStock(qualityInspect.getProductModelId(), unqualified.getQuantity(), StockInQualifiedRecordTypeEnum.DEFECTIVE_PASS.getCode(), unqualified.getId(), "-", "-", "-");
                     break;
                 default:
                     break;
             }
         } else {
+            //鏌ヨ瀵瑰簲鐨勮鏍煎瀷鍙穒d
+            Long modelId = qualityUnqualifiedMapper.getModelId(qualityUnqualified.getProductName(), qualityUnqualified.getModel());
             switch (qualityUnqualified.getDealResult()) {
-                case "杩斾慨":
-                case "杩斿伐":
-                    // TODO
                 case "鎶ュ簾":
                     //璋冪敤涓嶅悎鏍煎簱瀛樻帴鍙� 鍏ヤ笉鍚堟牸搴�
-                    stockUtils.addUnStock(Long.valueOf(unqualified.getModel()), unqualified.getQuantity(), StockInUnQualifiedRecordTypeEnum.DEFECTIVE_SCRAP.getCode(), unqualified.getId());
+                    stockUtils.addUnStock(modelId, unqualified.getQuantity(), StockInUnQualifiedRecordTypeEnum.DEFECTIVE_SCRAP.getCode(), unqualified.getId(), "-", "-", "-");
                     break;
                 case "璁╂鏀捐":
                     //璋冪敤鎻愪氦鍚堟牸鐨勬帴鍙�
-                    stockUtils.addStock(qualityInspect.getProductModelId(), unqualified.getQuantity(), StockInQualifiedRecordTypeEnum.DEFECTIVE_PASS.getCode(), unqualified.getId());
+                    stockUtils.addStock(modelId, unqualified.getQuantity(), StockInQualifiedRecordTypeEnum.DEFECTIVE_PASS.getCode(), unqualified.getId(), "-", "-", "-");
                     break;
                 default:
                     break;

--
Gitblit v1.9.3