From 92d8d06d8ae38c407715a5e9389691b446413e0a Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期五, 27 三月 2026 10:06:09 +0800
Subject: [PATCH] yys 1.生产逻辑修改

---
 src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java |  111 ++++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 89 insertions(+), 22 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 6d46f7c..fe78782 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
@@ -3,11 +3,15 @@
 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.ArrayUtils;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.enums.FileNameType;
 import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum;
 import com.ruoyi.common.enums.StockInUnQualifiedRecordTypeEnum;
+import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.procurementrecord.utils.StockUtils;
 import com.ruoyi.production.dto.ProductOrderDto;
 import com.ruoyi.production.dto.ProductStructureDto;
@@ -16,14 +20,20 @@
 import com.ruoyi.production.service.ProductOrderService;
 import com.ruoyi.quality.mapper.QualityInspectMapper;
 import com.ruoyi.quality.pojo.QualityInspect;
+import com.ruoyi.sales.service.impl.CommonFileServiceImpl;
 import com.ruoyi.stock.dto.StockInventoryDto;
 import com.ruoyi.stock.service.impl.StockInventoryServiceImpl;
+import org.jetbrains.annotations.NotNull;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
+import java.io.File;
+import java.io.IOException;
 import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
+import java.util.Arrays;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -38,6 +48,9 @@
 
     @Autowired
     private ProductProcessRouteMapper productProcessRouteMapper;
+
+    @Autowired
+    private ProductStructureRecordMapper productStructureRecordMapper;
 
     @Autowired
     private ProcessRouteItemMapper processRouteItemMapper;
@@ -69,6 +82,9 @@
     @Autowired
     private StockInventoryServiceImpl stockInventoryService;
 
+    @Autowired
+    private CommonFileServiceImpl commonFileService;
+
     @Override
     public IPage<ProductOrderDto> pageProductOrder(Page page, ProductOrderDto productOrder) {
         IPage<ProductOrderDto> productOrderDtoIPage = productOrderMapper.pageProductOrder(page, productOrder);
@@ -82,6 +98,9 @@
             if(stockInventoryDtoIPage.getTotal() > 0){
                 productOrderDto.setInventoryQuantity(stockInventoryDtoIPage.getRecords().get(0).getQualitity());
             }
+            // 闄勪欢
+            productOrderDto.setSalesLedgerFiles(commonFileService.getFileListByBusinessId(productOrderDto.getId()
+            , FileNameType.PRODUCT_ORDER.getValue()));
         });
         return productOrderDtoIPage;
     }
@@ -96,46 +115,58 @@
         productProcessRoute.setProductOrderId(productOrder.getId());
         productProcessRoute.setBomId(processRoute.getBomId());
         productProcessRouteMapper.insert(productProcessRoute);
+        // 缁戝畾鐢熶骇bom娓呭崟
+        List<ProductStructureRecord> productStructureDtos = productOrder.getProductStructureRecords();
+        productStructureDtos.forEach(item ->{
+            item.setProductOrderId(productOrder.getId());
+            productStructureRecordMapper.insert(item);
+        });
         //鏂板鐢熶骇璁㈠崟涓嬬殑宸ヨ壓璺嚎瀛愯〃
-        List<ProcessRouteItem> processRouteItems = processRouteItemMapper.selectList(new QueryWrapper<ProcessRouteItem>().lambda().eq(ProcessRouteItem::getRouteId, processRoute.getId()));
+        List<ProductProcessRouteItem> processRouteItems = productOrder.getProcessRouteItems();
         // 鐢熸垚褰撳墠鏃ユ湡鐨勫墠缂�锛氬勾鏈堟棩
         String datePrefix = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
-        for (ProcessRouteItem processRouteItem : processRouteItems) {
-            ProductProcessRouteItem productProcessRouteItem = new ProductProcessRouteItem();
-            productProcessRouteItem.setProductModelId(processRouteItem.getProductModelId());
-            productProcessRouteItem.setProcessId(processRouteItem.getProcessId());
+        for (ProductProcessRouteItem productProcessRouteItem : processRouteItems) {
+            productProcessRouteItem.setProductModelId(productOrder.getProductModelId());
             productProcessRouteItem.setProductOrderId(productOrder.getId());
             productProcessRouteItem.setProductRouteId(productProcessRoute.getId());
-            productProcessRouteItem.setDragSort(processRouteItem.getDragSort());
             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 = "GD" + String.format("%s%03d", datePrefix, sequenceNumber);
+                String workOrderNoStr = getWorkOrderNoStr(lastWorkOrder, datePrefix); // 宸ュ崟鍙�
                 ProductWorkOrder productWorkOrder = new ProductWorkOrder();
                 productWorkOrder.setProductProcessRouteItemId(productProcessRouteItem.getId());
                 productWorkOrder.setProductOrderId(productOrder.getId());
                 ProductOrder order = productOrderMapper.selectById(productOrder.getId());
                 productWorkOrder.setPlanQuantity(order.getQuantity());
                 productWorkOrder.setWorkOrderNo(workOrderNoStr);
+                productWorkOrder.setPlanStartTime(productProcessRouteItem.getPlanStartTime());
+                productWorkOrder.setPlanEndTime(productProcessRouteItem.getPlanEndTime());
                 productWorkOrder.setStatus(1);
+                productWorkOrder.setUserPower(productProcessRouteItem.getUserPower());
                 productWorkOrderMapper.insert(productWorkOrder);
             }
         }
         return productOrderMapper.updateById(productOrder);
+    }
+
+    @NotNull
+    private static String getWorkOrderNoStr(ProductWorkOrder lastWorkOrder, String datePrefix) {
+        int sequenceNumber = 1; // 榛樿搴忓彿
+        if (lastWorkOrder != null && lastWorkOrder.getWorkOrderNo() != null) {
+            String lastNo = lastWorkOrder.getWorkOrderNo();
+            if (lastNo.startsWith(datePrefix)) {
+                String seqStr = lastNo.substring(datePrefix.length());
+                try {
+                    sequenceNumber = Integer.parseInt(seqStr) + 1;
+                } catch (NumberFormatException e) {
+                    sequenceNumber = 1;
+                }
+            }
+        }
+        // 鐢熸垚瀹屾暣鐨勫伐鍗曞彿
+        String workOrderNoStr = "GD" + String.format("%s%03d", datePrefix, sequenceNumber);
+        return workOrderNoStr;
     }
 
     @Override
@@ -149,20 +180,24 @@
     }
 
     @Override
-    public Boolean addProductOrder(ProductOrder productOrder) {
+    public Boolean addProductOrder(ProductOrder productOrder) throws IOException {
         String string = generateNextOrderNo(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")));
         productOrder.setNpsNo(string);
         productOrder.setCompleteQuantity(BigDecimal.ZERO);
+        productOrder.setStatus("寰呯敓浜�");
         this.save(productOrder);
         if (ObjectUtils.isNotEmpty(productOrder.getRouteId())) {
             this.bindingRoute(productOrder);
+        }
+        if(CollectionUtils.isNotEmpty(productOrder.getTempFileIds())){
+            commonFileService.migrateTempFilesToFormal(productOrder.getId(), productOrder.getTempFileIds());
         }
         return true;
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Boolean delete(Long[] ids) {
-
         //鎵归噺鏌ヨproductOrder
         List<ProductOrder> productOrders = productOrderMapper.selectList(
                 new LambdaQueryWrapper<ProductOrder>()
@@ -247,10 +282,42 @@
             // 鎵归噺鍒犻櫎productOrder
             productOrderMapper.delete(new LambdaQueryWrapper<ProductOrder>()
                     .in(ProductOrder::getId, ids));
+            // 鍒犻櫎闄勪欢
+            commonFileService.deleteByBusinessIds(Arrays.asList(ids), FileNameType.PRODUCT_ORDER.getValue());
+            // 鍒犻櫎鐢熶骇璁㈠崟-鐗╂枡娓呭崟
+            productStructureRecordMapper.delete(new LambdaQueryWrapper<ProductStructureRecord>()
+                    .in(ProductStructureRecord::getProductOrderId, ids));
         }
+
         return true;
     }
 
+    @Override
+    public Object startOrPause(ProductOrderDto item) {
+        ProductOrder productOrder = productOrderMapper.selectById(item.getId());
+        if(productOrder == null){
+            throw new ServiceException("鐢熶骇璁㈠崟涓嶅瓨鍦�");
+        }
+        int i;
+        if(item.getOperation().equals(1)){
+            i = 2;
+        } else {
+            i = 1;
+        }
+        productOrder.setStatus(item.getOperation() == 1 ? "鐢熶骇涓�" : "寰呯敓浜�");
+        productOrderMapper.updateById(productOrder);
+        List<ProductWorkOrder> productWorkOrders = productWorkOrderMapper.selectList(new LambdaQueryWrapper<ProductWorkOrder>()
+                .eq(ProductWorkOrder::getProductOrderId, productOrder.getId()));
+        if(CollectionUtils.isNotEmpty(productWorkOrders)){
+
+            productWorkOrders.forEach(productWorkOrder -> {
+                productWorkOrder.setStatus(i);
+                productWorkOrderMapper.updateById(productWorkOrder);
+            });
+        }
+        return "鎿嶄綔鎴愬姛";
+    }
+
     //鑾峰彇褰撳墠鐢熶骇璁㈠崟鍙�
     public String getMaxOrderNoByDate(String datePrefix) {
         QueryWrapper<ProductOrder> queryWrapper = new QueryWrapper<>();

--
Gitblit v1.9.3