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/ProductOrderServiceImpl.java |   65 +++++++++++++++++++++++++++++---
 1 files changed, 59 insertions(+), 6 deletions(-)

diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
index 8a1099c..1708441 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
@@ -7,8 +7,7 @@
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum;
-import com.ruoyi.common.enums.StockInUnQualifiedRecordTypeEnum;
+import com.ruoyi.common.utils.bean.BeanUtils;
 import com.ruoyi.procurementrecord.utils.StockUtils;
 import com.ruoyi.production.dto.ProductOrderDto;
 import com.ruoyi.production.dto.ProductStructureDto;
@@ -16,7 +15,8 @@
 import com.ruoyi.production.pojo.*;
 import com.ruoyi.production.service.ProductOrderService;
 import com.ruoyi.quality.mapper.QualityInspectMapper;
-import com.ruoyi.quality.pojo.QualityInspect;
+import com.ruoyi.stock.mapper.StockInventoryMapper;
+import com.ruoyi.stock.pojo.StockInventory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -24,6 +24,8 @@
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
 import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
 @Service
@@ -65,6 +67,9 @@
     @Autowired
     private StockUtils stockUtils;
 
+    @Autowired
+    private StockInventoryMapper stockInventoryMapper;
+
     @Override
     public IPage<ProductOrderDto> pageProductOrder(Page page, ProductOrderDto productOrder) {
         return productOrderMapper.pageProductOrder(page, productOrder);
@@ -91,6 +96,7 @@
             productProcessRouteItem.setProductOrderId(productOrder.getId());
             productProcessRouteItem.setProductRouteId(productProcessRoute.getId());
             productProcessRouteItem.setDragSort(processRouteItem.getDragSort());
+            productProcessRouteItem.setIsQuality(processRouteItem.getIsQuality());
             int insert = productProcessRouteItemMapper.insert(productProcessRouteItem);
             if (insert > 0) {
                 // 鏌ヨ浠婃棩宸插瓨鍦ㄧ殑鏈�澶у伐鍗曞彿
@@ -111,6 +117,8 @@
                 String workOrderNoStr = "GD" + String.format("%s%03d", datePrefix, sequenceNumber);
                 ProductWorkOrder productWorkOrder = new ProductWorkOrder();
                 productWorkOrder.setProductProcessRouteItemId(productProcessRouteItem.getId());
+                productWorkOrder.setPriority(productOrder.getPriority());
+                productWorkOrder.setBatchNo(productOrder.getBatchNo());
                 productWorkOrder.setProductOrderId(productOrder.getId());
                 ProductOrder order = productOrderMapper.selectById(productOrder.getId());
                 productWorkOrder.setPlanQuantity(order.getQuantity());
@@ -133,10 +141,33 @@
     }
 
     @Override
-    public Boolean addProductOrder(ProductOrder productOrder) {
+    public Boolean addProductOrder(ProductOrderDto productOrderDto) {
         String string = generateNextOrderNo(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")));
+        ProductOrder productOrder = new ProductOrder();
+        BeanUtils.copyProperties(productOrderDto, productOrder);
         productOrder.setNpsNo(string);
         productOrder.setCompleteQuantity(BigDecimal.ZERO);
+        List<StockInventory> stockInventoryList = stockInventoryMapper.selectList(null);
+        if (productOrder.getBatchNo() == null || productOrder.getBatchNo().isEmpty()) {
+            String batchNo;
+            // 鑾峰彇褰撳墠鏈堜唤锛堜袱浣嶏級
+            LocalDate now = LocalDate.now();
+            String monthFlag = now.format(DateTimeFormatter.ofPattern("MM"));
+
+            // 鑾峰彇褰撳墠鏈堜唤鐨勬渶澶ф祦姘村彿
+            int maxSeq = getCurrentMonthMaxSeq(productOrderDto.getMaterialCode(),
+                    productOrderDto.getProductModelName(), monthFlag, stockInventoryList);
+
+            // 鏂版祦姘村彿 = 鏈�澶ф祦姘村彿 + 1
+            int newSeq = maxSeq + 1;
+            String seqStr = String.format("%03d", newSeq);
+
+            // 缁勮batchNo
+            batchNo = productOrderDto.getMaterialCode() + productOrderDto.getProductModelName() + "P" + monthFlag + seqStr;
+            productOrder.setBatchNo(batchNo);
+        } else {
+            productOrder.setBatchNo(productOrder.getBatchNo());
+        }
         this.save(productOrder);
         if (ObjectUtils.isNotEmpty(productOrder.getRouteId())) {
             this.bindingRoute(productOrder);
@@ -144,16 +175,38 @@
         return true;
     }
 
+    /**
+     * 鏌ヨ褰撳墠鏈堜唤宸插瓨鍦ㄧ殑鏈�澶ф祦姘村彿
+     */
+    private static int getCurrentMonthMaxSeq(String materialCode, String model, String monthFlag, List<StockInventory> existingList) {
+        int maxSeq = 0;
+        String prefix = materialCode + model + "P" + monthFlag;
+        // 姝e垯鍖归厤锛氬墠缂� + 3浣嶆暟瀛�
+        Pattern pattern = Pattern.compile(Pattern.quote(prefix) + "(\\d{3})");
+        for (StockInventory item : existingList) {
+            String batchNo = item.getBatchNo();
+            if (batchNo == null) continue;
+            Matcher matcher = pattern.matcher(batchNo);
+            if (matcher.find()) {
+                int seq = Integer.parseInt(matcher.group(1));
+                if (seq > maxSeq) {
+                    maxSeq = seq;
+                }
+            }
+        }
+        return maxSeq;
+    }
+
     @Override
     public Boolean delete(Long[] ids) {
         //濡傛灉宸茬粡寮�濮嬬敓浜�,涓嶈兘鍒犻櫎
         //鏌ヨ鐢熶骇璁㈠崟涓嬬殑宸ュ崟
         List<ProductWorkOrder> productWorkOrders = productWorkOrderMapper.selectList(Wrappers.<ProductWorkOrder>lambdaQuery().in(ProductWorkOrder::getProductOrderId, ids));
-        if (productWorkOrders.size()>0){
+        if (productWorkOrders.size() > 0) {
             //鍒ゆ柇鏄惁鏈夋姤宸ユ暟鎹�
             List<ProductionProductMain> productionProductMains = productionProductMainMapper.selectList(Wrappers.<ProductionProductMain>lambdaQuery()
                     .in(ProductionProductMain::getWorkOrderId, productWorkOrders.stream().map(ProductWorkOrder::getId).collect(Collectors.toList())));
-            if (productionProductMains.size()>0){
+            if (productionProductMains.size() > 0) {
                 throw new RuntimeException("鐢熶骇璁㈠崟宸茬粡寮�濮嬬敓浜�,涓嶈兘鍒犻櫎");
             }
             //鍒犻櫎宸ュ崟

--
Gitblit v1.9.3