From e0cfecb2b11b3d6ac91394e71c689a30356ead28 Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期三, 20 五月 2026 09:29:28 +0800
Subject: [PATCH] fix:1.生产按照特定工序更改 2.库存按照型号,工序类别,电压进行筛选 3.销售页面展示电压,类别 4.生产入库按照电压入库

---
 src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java |  291 +++++++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 196 insertions(+), 95 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 7a24e0e..c2a22d4 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -30,6 +30,7 @@
 import com.ruoyi.quality.mapper.*;
 import com.ruoyi.quality.pojo.*;
 import com.ruoyi.quality.service.IQualityInspectService;
+import com.ruoyi.stock.support.FinishedProductStockDimensionResolver;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -47,6 +48,10 @@
 @AllArgsConstructor
 @Transactional(rollbackFor = Exception.class)
 public class ProductionProductMainServiceImpl extends ServiceImpl<ProductionProductMainMapper, ProductionProductMain> implements ProductionProductMainService {
+
+    private static final String PROCESS_VOLTAGE_SORT = "鐢靛帇鍒嗛��";
+    private static final String PROCESS_OPTICAL_INSPECTION = "鍏夋澶栬";
+    private static final String PROCESS_PACKAGING = "鍖呰";
 
     private IQualityInspectService qualityInspectService;
     private ProductionProductMainMapper productionProductMainMapper;
@@ -86,6 +91,11 @@
 
     private StockUtils stockUtils;
 
+    /**
+     * 瑙f瀽鐢熶骇鎶ュ伐瀵瑰簲鐨勬垚鍝佸叆搴撶淮搴︺��
+     */
+    private FinishedProductStockDimensionResolver finishedProductStockDimensionResolver;
+
     private ISysNoticeService sysNoticeService;
 
     @Override
@@ -93,6 +103,9 @@
         return productionProductMainMapper.listPageProductionProductMainDto(page, productionProductMainDto);
     }
 
+    /**
+     * 鏂板鎶ュ伐锛屽苟鏍规嵁褰撳墠宸ュ簭澶勭悊璐ㄦ鍜屽叆搴撻�昏緫銆�
+     */
     @Override
     public Boolean addProductMain(ProductionProductMainDto dto) {
         SysUser user = userMapper.selectUserById(dto.getUserId());
@@ -100,9 +113,8 @@
         //褰撳墠宸ヨ壓璺嚎瀵瑰簲鐨勫伐搴忚鎯�
         ProductProcessRouteItem productProcessRouteItem = productProcessRouteItemMapper.selectById(dto.getProductProcessRouteItemId());
         if (productProcessRouteItem == null) {
-            throw new RuntimeException("宸ヨ壓璺嚎椤逛笉瀛樺湪");
+            throw new RuntimeException("宸ヨ壓璺嚎宸ュ簭椤逛笉瀛樺湪");
         }
-        // 鏄惁鑳芥姤宸ワ細 1. 绗竴涓伐搴忚兘鎶ュ伐 2. 涓婁竴涓伐搴忓凡鎶ュ伐 3. 涔嬪墠鐨勫伐搴忔湭琚殧绂�
         //妫�鏌ヤ笂涓�涓伐搴忔槸鍚﹀凡鎶ュ伐
         Integer currentDragSort = productProcessRouteItem.getDragSort();
         if (currentDragSort != null && currentDragSort > 1) {
@@ -111,7 +123,7 @@
                     currentDragSort
             );
             if (!isPreviousReported) {
-                throw new RuntimeException("涓婁竴涓伐搴忓皻鏈姤宸ワ紝涓嶈兘杩涜褰撳墠宸ュ簭鎶ュ伐");
+                throw new RuntimeException("涓婁竴閬撳伐搴忓皻鏈姤宸ワ紝褰撳墠宸ュ簭涓嶈兘鎶ュ伐");
             }
 
             // 鏌ヨ鎵�鏈変箣鍓嶇殑宸ュ簭锛堟帓搴忓彿灏忎簬褰撳墠宸ュ簭锛�
@@ -133,7 +145,7 @@
                 // 妫�鏌ヤ箣鍓嶇殑宸ュ簭鏄惁鏈夎闅旂鐨勪笉鍚堟牸璁板綍
                 List<QualityUnqualified> unqualifiedList = qualityUnqualifiedMapper.selectUnqualifiedByProcessNames(previousProcessNames);
                 if (CollectionUtils.isNotEmpty(unqualifiedList)) {
-                    throw new RuntimeException("涔嬪墠鐨勫伐搴忓凡琚殧绂伙紝涓嶈兘杩涜褰撳墠宸ュ簭鎶ュ伐");
+                    throw new RuntimeException("鍓嶅簭宸ュ簭瀛樺湪闅旂璁板綍锛屽綋鍓嶅伐搴忎笉鑳芥姤宸�");
                 }
             }
         }
@@ -219,13 +231,11 @@
 
             // 鏍稿績璁$畻
             BigDecimal needQty = childQty.divide(parentQty, 6, RoundingMode.HALF_UP).multiply(dto.getQuantity());
-
-
             productionProductInput.setQuantity(needQty);
-
             productionProductInput.setProductMainId(productionProductMain.getId());
             productionProductInputMapper.insert(productionProductInput);
-            stockUtils.substractStock(productStructureDto.getProductModelId(), productionProductInput.getQuantity(), StockOutQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_OUT.getCode(), productionProductMain.getId(), null);
+            stockUtils.substractStock(productStructureDto.getProductModelId(), productionProductInput.getQuantity(),
+                    StockOutQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_OUT.getCode(), productionProductMain.getId(), null);
         }
         /*鏂板鎶ュ伐浜у嚭琛�*/
         ProductionProductOutput productionProductOutput = new ProductionProductOutput();
@@ -241,16 +251,27 @@
 
         //鍚堟牸鏁伴噺=鎶ュ伐鏁伴噺-鎶ュ簾鏁伴噺
         BigDecimal productQty = productionProductOutput.getQuantity().subtract(productionProductOutput.getScrapQty());
-        List<ProductProcessRouteItem> productProcessRouteItems = productProcessRouteItemMapper.selectList(Wrappers.<ProductProcessRouteItem>lambdaQuery().eq(ProductProcessRouteItem::getProductRouteId, productProcessRouteItem.getProductRouteId()));
-        //鍙湁鍚堟牸鏁伴噺>0鎵嶈兘澧炲姞鐩稿簲鏁版嵁
+        List<ProductProcessRouteItem> productProcessRouteItems = productProcessRouteItemMapper.selectList(
+                Wrappers.<ProductProcessRouteItem>lambdaQuery()
+                        .eq(ProductProcessRouteItem::getProductRouteId, productProcessRouteItem.getProductRouteId())
+        );
+        boolean isRouteLastProcess = productProcessRouteItem.getDragSort() == productProcessRouteItems.size();
+        ReportStockRule reportStockRule = resolveReportStockRule(productProcessRouteItem, productProcess, productProcessRouteItems);
+
+        String processCategory = null;
+        String voltage = null;
+        if (productQty.compareTo(BigDecimal.ZERO) > 0 && reportStockRule.isFinishedGoodsStockIn()) {
+            processCategory = finishedProductStockDimensionResolver.resolveProcessCategory(productionProductMain.getId());
+            voltage = finishedProductStockDimensionResolver.resolveVoltage(productionProductMain.getId());
+        }
+
         if (productQty.compareTo(BigDecimal.ZERO) > 0) {
             /*鏂板璐ㄦ*/
             if (productProcessRouteItem.getIsQuality()) {
                 //瀵瑰簲鐨勮繃绋嬫鎴栬�呭嚭鍘傛
                 int inspectType = 1;
-                String process = productProcess.getName();//宸ュ簭
-                if (productProcessRouteItem.getDragSort() == productProcessRouteItems.size()) {
-                    //鏈�鍚庝竴閬撳伐搴忕敓鎴愬嚭鍘傛
+                String process = productProcess.getName();
+                if (reportStockRule.isFinishedGoodsStockIn()) {
                     inspectType = 2;
                     process = null;
                 }
@@ -260,11 +281,11 @@
                 qualityInspect.setProductName(product.getProductName());
                 qualityInspect.setModel(productModel.getModel());
                 qualityInspect.setUnit(productModel.getUnit());
-                qualityInspect.setQuantity(productQty);
+                qualityInspect.setQuantity(productionProductOutput.getQuantity());
                 qualityInspect.setProcess(process);
                 qualityInspect.setInspectState(0);
                 qualityInspect.setInspectType(inspectType);
-                qualityInspect.setDefectiveQuantity(BigDecimal.ZERO);
+                qualityInspect.setDefectiveQuantity(productionProductOutput.getScrapQty());
                 qualityInspect.setProductMainId(productionProductMain.getId());
                 qualityInspect.setProductModelId(productModel.getId());
                 qualityInspectMapper.insert(qualityInspect);
@@ -272,8 +293,10 @@
                 if (qualityTestStandard.size() > 0) {
                     qualityInspect.setTestStandardId(qualityTestStandard.get(0).getId());
                     qualityInspectMapper.updateById(qualityInspect);
-                    qualityTestStandardParamMapper.selectList(Wrappers.<QualityTestStandardParam>lambdaQuery()
-                                    .eq(QualityTestStandardParam::getTestStandardId, qualityTestStandard.get(0).getId()))//榛樿鑾峰彇鏈�鏂扮殑
+                    qualityTestStandardParamMapper.selectList(
+                                    Wrappers.<QualityTestStandardParam>lambdaQuery()
+                                            .eq(QualityTestStandardParam::getTestStandardId, qualityTestStandard.get(0).getId())
+                            )
                             .forEach(qualityTestStandardParam -> {
                                 QualityInspectParam param = new QualityInspectParam();
                                 BeanUtils.copyProperties(qualityTestStandardParam, param);
@@ -282,43 +305,47 @@
                                 qualityInspectParamMapper.insert(param);
                             });
                 }
-            }else {
-                //鐩存帴鍏ュ簱
-                //鏈�鍚庝竴閬撳伐搴忎负鎴愬搧
-                if (productProcessRouteItem.getDragSort() == productProcessRouteItems.size()) {
-                    //鎴愬搧瀹℃牳
-                    stockUtils.addStock(productProcessRouteItem.getProductModelId(), productQty, StockInQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_IN.getCode(), productionProductMain.getId());
-                }else {
-                    //鍗婃垚鍝佷笉瀹℃牳
-                    stockUtils.addStockNoReview(productProcessRouteItem.getProductModelId(), productQty, StockInQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_IN.getCode(), productionProductMain.getId());
+            } else {
+                if (reportStockRule.shouldCreateStockIn()) {
+                    if (reportStockRule.isFinishedGoodsStockIn()) {
+                        stockUtils.addStock(productProcessRouteItem.getProductModelId(), productQty,
+                                StockInQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_IN.getCode(), productionProductMain.getId(),
+                                processCategory, voltage);
+                    } else {
+                        stockUtils.addStockNoReview(productProcessRouteItem.getProductModelId(), productQty,
+                                StockInQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_IN.getCode(), productionProductMain.getId());
+                    }
+                }
+                if (productionProductOutput.getScrapQty().compareTo(BigDecimal.ZERO) > 0) {
+                    stockUtils.addUnStockNoReview(productProcessRouteItem.getProductModelId(), productionProductOutput.getScrapQty(),
+                            StockInUnQualifiedRecordTypeEnum.QUALITYINSPECT_UNSTOCK_IN.getCode(), productionProductMain.getId());
                 }
             }
-            /*鏇存柊宸ュ崟鍜岀敓浜ц鍗�*/
+
             productWorkOrder.setCompleteQuantity(productWorkOrder.getCompleteQuantity().add(productQty));
             if (ObjectUtils.isNull(productWorkOrder.getActualStartTime())) {
-                productWorkOrder.setActualStartTime(LocalDate.now());//瀹為檯寮�濮嬫椂闂�
+                productWorkOrder.setActualStartTime(LocalDate.now());
             }
             if (productWorkOrder.getCompleteQuantity().compareTo(productWorkOrder.getPlanQuantity()) == 0) {
-                productWorkOrder.setActualEndTime(LocalDate.now());//瀹為檯缁撴潫鏃堕棿
+                productWorkOrder.setActualEndTime(LocalDate.now());
             }
             productWorkOrderMapper.updateById(productWorkOrder);
-            //鐢熶骇璁㈠崟
+
             if (ObjectUtils.isNull(productOrder.getStartTime())) {
-                productOrder.setStartTime(LocalDateTime.now());//寮�濮嬫椂闂�
+                productOrder.setStartTime(LocalDateTime.now());
             }
-            if (productProcessRouteItem.getDragSort() == productProcessRouteItems.size()) {
-                //濡傛灉鏄渶鍚庝竴閬撳伐搴忔姤宸ヤ箣鍚庣敓浜ц鍗曞畬鎴愭暟閲�+
+            if (isRouteLastProcess) {
                 productOrder.setCompleteQuantity(productOrder.getCompleteQuantity().add(productQty));
                 if (productOrder.getCompleteQuantity().compareTo(productOrder.getQuantity()) == 0) {
-                    productOrder.setEndTime(LocalDateTime.now());//缁撴潫鏃堕棿
+                    productOrder.setEndTime(LocalDateTime.now());
                 }
             }
             productOrderMapper.updateById(productOrder);
-            /*娣诲姞鐢熶骇鏍哥畻*/
+
             SalesLedgerProductionAccounting salesLedgerProductionAccounting = SalesLedgerProductionAccounting.builder()
                     .productMainId(productionProductMain.getId())
-                    .schedulingUserId(user.getUserId())
-                    .schedulingUserName(user.getNickName())
+                    .schedulingUserId(userId)
+                    .schedulingUserName(userName)
                     .finishedNum(productQty)
                     .workHours(productProcess.getSalaryQuota())
                     .process(productProcess.getName())
@@ -327,40 +354,122 @@
                     .build();
             salesLedgerProductionAccountingMapper.insert(salesLedgerProductionAccounting);
         }
-        //濡傛灉鎶ュ簾鏁伴噺>0,闇�瑕佽繘鍏ユ姤搴熺殑搴撳瓨
-        if (ObjectUtils.isNotEmpty(dto.getScrapQty())) {
-            if (dto.getScrapQty().compareTo(BigDecimal.ZERO) > 0) {
-                if (productProcessRouteItem.getDragSort() == productProcessRouteItems.size()){
-                    stockUtils.addUnStock(productModel.getId(), dto.getScrapQty(), StockInUnQualifiedRecordTypeEnum.PRODUCTION_SCRAP.getCode(), productionProductMain.getId());
-                }else {
-                    stockUtils.addUnStockNoReview(productModel.getId(), dto.getScrapQty(), StockInUnQualifiedRecordTypeEnum.PRODUCTION_SCRAP.getCode(), productionProductMain.getId());
-                }
-            }
-        }
         return true;
+    }
+
+    /**
+     * 鍒ゆ柇褰撳墠鎶ュ伐鏄惁闇�瑕佸叆搴擄紝浠ュ強鏄惁鎸夋垚鍝佸叆搴撳鐞嗐��
+     */
+    private ReportStockRule resolveReportStockRule(ProductProcessRouteItem currentRouteItem,
+                                                   ProductProcess currentProcess,
+                                                   List<ProductProcessRouteItem> routeItems) {
+        boolean isRouteLastProcess = currentRouteItem.getDragSort() != null
+                && CollectionUtils.isNotEmpty(routeItems)
+                && currentRouteItem.getDragSort().equals(routeItems.size());
+        String currentProcessName = normalizeProcessName(currentProcess == null ? null : currentProcess.getName());
+        if (PROCESS_VOLTAGE_SORT.equals(currentProcessName)) {
+            return new ReportStockRule(false, false);
+        }
+
+        Map<Long, String> processNameMap = loadRouteProcessNameMap(routeItems);
+        boolean hasVoltageSort = containsProcess(routeItems, processNameMap, PROCESS_VOLTAGE_SORT);
+        boolean hasOpticalInspection = containsProcess(routeItems, processNameMap, PROCESS_OPTICAL_INSPECTION);
+        boolean hasPackaging = containsProcess(routeItems, processNameMap, PROCESS_PACKAGING);
+
+        if (hasPackaging && PROCESS_PACKAGING.equals(currentProcessName)) {
+            return new ReportStockRule(true, true);
+        }
+        if (hasPackaging && PROCESS_OPTICAL_INSPECTION.equals(currentProcessName)) {
+            return new ReportStockRule(false, false);
+        }
+        if (!hasPackaging && hasVoltageSort && hasOpticalInspection && PROCESS_OPTICAL_INSPECTION.equals(currentProcessName)) {
+            return new ReportStockRule(true, true);
+        }
+        return new ReportStockRule(true, isRouteLastProcess);
+    }
+
+    /**
+     * 鎵归噺鍔犺浇宸ヨ壓璺嚎涓殑宸ュ簭鍚嶇О銆�
+     */
+    private Map<Long, String> loadRouteProcessNameMap(List<ProductProcessRouteItem> routeItems) {
+        if (CollectionUtils.isEmpty(routeItems)) {
+            return Collections.emptyMap();
+        }
+        Set<Long> processIds = routeItems.stream()
+                .map(ProductProcessRouteItem::getProcessId)
+                .filter(Objects::nonNull)
+                .collect(Collectors.toSet());
+        if (processIds.isEmpty()) {
+            return Collections.emptyMap();
+        }
+        return productProcessMapper.selectBatchIds(processIds).stream()
+                .collect(Collectors.toMap(ProductProcess::getId, process -> normalizeProcessName(process.getName())));
+    }
+
+    /**
+     * 鍒ゆ柇宸ヨ壓璺嚎涓槸鍚﹀寘鍚寚瀹氬伐搴忋��
+     */
+    private boolean containsProcess(List<ProductProcessRouteItem> routeItems, Map<Long, String> processNameMap, String processName) {
+        return routeItems.stream()
+                .map(ProductProcessRouteItem::getProcessId)
+                .map(processNameMap::get)
+                .anyMatch(processName::equals);
+    }
+
+    /**
+     * 缁熶竴宸ュ簭鍚嶇О鏍煎紡锛岄伩鍏嶈鍒欏尮閰嶆椂鍙楃┖鐧藉瓧绗﹀奖鍝嶃��
+     */
+    private String normalizeProcessName(String processName) {
+        return processName == null ? "" : processName.trim();
+    }
+
+    /**
+     * 鍗曟鎶ュ伐瀵瑰簲鐨勫叆搴撹鍒欍��
+     */
+    private static final class ReportStockRule {
+        private final boolean createStockIn;
+        private final boolean finishedGoodsStockIn;
+
+        private ReportStockRule(boolean createStockIn, boolean finishedGoodsStockIn) {
+            this.createStockIn = createStockIn;
+            this.finishedGoodsStockIn = finishedGoodsStockIn;
+        }
+
+        private boolean shouldCreateStockIn() {
+            return createStockIn;
+        }
+
+        private boolean isFinishedGoodsStockIn() {
+            return finishedGoodsStockIn;
+        }
     }
 
     @Override
     public Boolean removeProductMain(Long id) {
-        //鍒ゆ柇璇ユ潯鎶ュ伐鏄惁涓嶅悎鏍煎鐞�,濡傛灉涓嶅悎鏍煎鐞嗕簡锛屽垯涓嶅厑璁稿垹闄�
-        List<QualityInspect> qualityInspects = qualityInspectMapper.selectList(Wrappers.<QualityInspect>lambdaQuery().eq(QualityInspect::getProductMainId, id));
-        if (qualityInspects.size() > 0){
-            List<QualityUnqualified> qualityUnqualifieds = qualityUnqualifiedMapper.selectList(Wrappers.<QualityUnqualified>lambdaQuery()
-                    .in(QualityUnqualified::getInspectId, qualityInspects.stream().map(QualityInspect::getId).collect(Collectors.toList())));
-            if (qualityUnqualifieds.size() > 0 && qualityUnqualifieds.get(0).getInspectState()==1) {
-                throw new ServiceException("璇ユ潯鎶ュ伐宸茬粡涓嶅悎鏍煎鐞嗕簡锛屼笉鍏佽鍒犻櫎");
+        List<QualityInspect> qualityInspects = qualityInspectMapper.selectList(
+                Wrappers.<QualityInspect>lambdaQuery().eq(QualityInspect::getProductMainId, id)
+        );
+        if (qualityInspects.size() > 0) {
+            List<QualityUnqualified> qualityUnqualifieds = qualityUnqualifiedMapper.selectList(
+                    Wrappers.<QualityUnqualified>lambdaQuery()
+                            .in(QualityUnqualified::getInspectId, qualityInspects.stream().map(QualityInspect::getId).collect(Collectors.toList()))
+            );
+            if (qualityUnqualifieds.size() > 0 && qualityUnqualifieds.get(0).getInspectState() == 1) {
+                throw new ServiceException("璇ユ姤宸ュ凡瀹屾垚涓嶅悎鏍煎鐞嗭紝涓嶈兘鍒犻櫎");
             }
         }
+
         ProductionProductMain productionProductMain = productionProductMainMapper.selectById(id);
-        //璇ユ姤宸ュ搴旂殑宸ヨ壓璺嚎璇︽儏
         ProductProcessRouteItem productProcessRouteItem = productProcessRouteItemMapper.selectById(productionProductMain.getProductProcessRouteItemId());
-        ProductionProductOutput productionProductOutput = productionProductOutputMapper.selectList(Wrappers.<ProductionProductOutput>lambdaQuery().eq(ProductionProductOutput::getProductMainId, productionProductMain.getId())).get(0);
-        /*鍒犻櫎鏍哥畻*/
+        ProductionProductOutput productionProductOutput = productionProductOutputMapper.selectList(
+                Wrappers.<ProductionProductOutput>lambdaQuery().eq(ProductionProductOutput::getProductMainId, productionProductMain.getId())
+        ).get(0);
+
         salesLedgerProductionAccountingMapper.delete(
                 new LambdaQueryWrapper<SalesLedgerProductionAccounting>()
                         .eq(SalesLedgerProductionAccounting::getProductMainId, productionProductMain.getId())
         );
-        /*鏇存柊宸ュ崟鍜岀敓浜ц鍗�*/
+
         ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectById(productionProductMain.getWorkOrderId());
         if (productWorkOrder != null && productionProductOutput != null) {
             BigDecimal outputQty = productionProductOutput.getQuantity() == null ? BigDecimal.ZERO : productionProductOutput.getQuantity();
@@ -368,16 +477,19 @@
             BigDecimal completeQty = productWorkOrder.getCompleteQuantity() == null ? BigDecimal.ZERO : productWorkOrder.getCompleteQuantity();
 
             BigDecimal validQuantity = outputQty.subtract(scrapQty);
-
             productWorkOrder.setCompleteQuantity(completeQty.subtract(validQuantity));
             productWorkOrder.setActualEndTime(null);
             productWorkOrderMapper.updateById(productWorkOrder);
         } else {
             throw new ServiceException("鎿嶄綔澶辫触锛氬伐鍗曚俊鎭垨浜у嚭璁板綍涓嶅瓨鍦�");
         }
-        //鍒ゆ柇鏄惁鏄渶鍚庝竴閬撳伐搴�
-        List<ProductProcessRouteItem> productProcessRouteItems = productProcessRouteItemMapper.selectList(Wrappers.<ProductProcessRouteItem>lambdaQuery().eq(ProductProcessRouteItem::getProductRouteId, productProcessRouteItem.getProductRouteId()));
-        if (productProcessRouteItem.getDragSort() != null && productProcessRouteItems != null && productProcessRouteItem.getDragSort() == productProcessRouteItems.size()) {
+
+        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();
@@ -392,31 +504,30 @@
                 throw new ServiceException("鍏宠仈鐨勭敓浜ц鍗曚笉瀛樺湪");
             }
         }
-        //鍒犻櫎璐ㄦ
+
         qualityInspectMapper.selectList(
                 new LambdaQueryWrapper<QualityInspect>()
                         .eq(QualityInspect::getProductMainId, productionProductMain.getId())
         ).forEach(q -> {
             qualityInspectParamMapper.delete(
                     new LambdaQueryWrapper<QualityInspectParam>()
-                            .eq(QualityInspectParam::getInspectId, q.getId()));
+                            .eq(QualityInspectParam::getInspectId, q.getId())
+            );
             qualityInspectMapper.deleteById(q.getId());
-                stockUtils.deleteStockInRecord(q.getId(), StockInQualifiedRecordTypeEnum.QUALITYINSPECT_STOCK_IN.getCode());
+            stockUtils.deleteStockInRecord(q.getId(), StockInQualifiedRecordTypeEnum.QUALITYINSPECT_STOCK_IN.getCode());
         });
 
-        // 鍒犻櫎浜у嚭璁板綍
-        productionProductOutputMapper.delete(new LambdaQueryWrapper<ProductionProductOutput>()
-                .eq(ProductionProductOutput::getProductMainId, productionProductMain.getId()));
-        //鍒犻櫎鎶曞叆璁板綍
-        productionProductInputMapper.delete(new LambdaQueryWrapper<ProductionProductInput>()
-                .eq(ProductionProductInput::getProductMainId, productionProductMain.getId()));
-        //鍒犻櫎鎶ュ簾鐨勫叆搴撹褰�
+        productionProductOutputMapper.delete(
+                new LambdaQueryWrapper<ProductionProductOutput>()
+                        .eq(ProductionProductOutput::getProductMainId, productionProductMain.getId())
+        );
+        productionProductInputMapper.delete(
+                new LambdaQueryWrapper<ProductionProductInput>()
+                        .eq(ProductionProductInput::getProductMainId, productionProductMain.getId())
+        );
         stockUtils.deleteStockInRecord(productionProductMain.getId(), StockInUnQualifiedRecordTypeEnum.PRODUCTION_SCRAP.getCode());
-        //鍒犻櫎涓嶉渶瑕佽川妫�鐨勫悎鏍煎叆搴�
         stockUtils.deleteStockInRecord(productionProductMain.getId(), StockInQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_IN.getCode());
-        //鍒犻櫎鎶曞叆瀵瑰簲鐨勫嚭搴撹褰�
         stockUtils.deleteStockOutRecord(productionProductMain.getId(), StockOutQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_OUT.getCode());
-        // 鍒犻櫎涓昏〃
         productionProductMainMapper.deleteById(productionProductMain.getId());
         return true;
     }
@@ -429,49 +540,39 @@
     @Override
     public List<ProductionProductMainDto> getByProductWorkOrderId(Long productWorkOrderId) {
         List<ProductionProductMainDto> productionProductMainDtos = productionProductMainMapper.getByProductWorkOrderId(productWorkOrderId);
-        
         if (productionProductMainDtos == null || productionProductMainDtos.isEmpty()) {
             return productionProductMainDtos;
         }
-        
-        // 鏀堕泦鎵�鏈変骇鍝佷富璁板綍ID
+
         List<Long> productMainIds = productionProductMainDtos.stream()
                 .map(ProductionProductMainDto::getId)
                 .collect(Collectors.toList());
-        
-        // 鎵归噺鏌ヨ鎵�鏈夌浉鍏崇殑璐ㄦ璁板綍
+
         List<QualityInspect> qualityInspects = qualityInspectMapper.selectList(
                 Wrappers.<QualityInspect>lambdaQuery()
                         .in(QualityInspect::getProductMainId, productMainIds)
         );
-        
+
         if (!qualityInspects.isEmpty()) {
-            // 鏀堕泦鎵�鏈夎川妫�璁板綍ID
             List<Long> inspectIds = qualityInspects.stream()
                     .map(QualityInspect::getId)
                     .collect(Collectors.toList());
-            
-            // 鎵归噺鏌ヨ鎵�鏈夌浉鍏崇殑涓嶅悎鏍煎鐞嗚褰�
+
             List<QualityUnqualified> qualityUnqualifieds = qualityUnqualifiedMapper.selectList(
                     Wrappers.<QualityUnqualified>lambdaQuery()
                             .in(QualityUnqualified::getInspectId, inspectIds)
             );
-            
-            // 鏋勫缓璐ㄦID鍒颁笉鍚堟牸澶勭悊璁板綍鐨勬槧灏�
+
             Map<Long, QualityUnqualified> inspectIdToUnqualifiedMap = qualityUnqualifieds.stream()
                     .collect(Collectors.toMap(QualityUnqualified::getInspectId, q -> q, (q1, q2) -> q1));
-            
-            // 鏋勫缓浜у搧涓籌D鍒拌川妫�璁板綍鐨勬槧灏�
+
             Map<Long, QualityInspect> productMainIdToInspectMap = qualityInspects.stream()
                     .collect(Collectors.toMap(QualityInspect::getProductMainId, q -> q, (q1, q2) -> q1));
-            
-            // 鍏宠仈澶勭悊缁撴灉鍒颁骇鍝佷富璁板綍
+
             productionProductMainDtos.forEach(p -> {
                 QualityInspect qualityInspect = productMainIdToInspectMap.get(p.getId());
                 if (qualityInspect != null) {
-                    // 涓嶈壇鏁伴噺
-                    p.setDefectiveQuantity( qualityInspect.getDefectiveQuantity());
-                    // 鍚堟牸鏁伴噺 = 鎶ュ伐鏁伴噺-鎶ュ簾鏁伴噺-涓嶈壇鏁伴噺
+                    p.setDefectiveQuantity(qualityInspect.getDefectiveQuantity());
                     p.setQualifiedQty(p.getQuantity().subtract(p.getScrapQty()).subtract(p.getDefectiveQuantity()));
                     QualityUnqualified qualityUnqualified = inspectIdToUnqualifiedMap.get(qualityInspect.getId());
                     if (qualityUnqualified != null) {
@@ -480,7 +581,7 @@
                 }
             });
         }
-        
+
         return productionProductMainDtos;
     }
-}
\ No newline at end of file
+}

--
Gitblit v1.9.3