From 69dc6b16ef04bdfbfa65f77c169c0847dc7e65c2 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期三, 06 五月 2026 16:26:43 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_New_pro' into dev_New_pro

---
 src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java |  164 ++++++++++++++++++++++++------------------------------
 1 files changed, 72 insertions(+), 92 deletions(-)

diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
index 56cfbb0..37e06bb 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -6,20 +6,14 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.common.enums.StockInUnQualifiedRecordTypeEnum;
-import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum;
 import com.ruoyi.framework.web.domain.R;
 import com.ruoyi.procurementrecord.utils.StockUtils;
 import com.ruoyi.production.mapper.*;
-import com.ruoyi.production.pojo.ProductionAccount;
-import com.ruoyi.production.pojo.ProductionOperationTask;
-import com.ruoyi.production.pojo.ProductionOrder;
-import com.ruoyi.production.pojo.ProductionProductMain;
+import com.ruoyi.production.pojo.ProductionPlan;
 import com.ruoyi.production.service.ProductionOrderService;
 import com.ruoyi.purchase.mapper.PurchaseLedgerMapper;
 import com.ruoyi.purchase.pojo.PurchaseLedger;
 import com.ruoyi.quality.mapper.QualityInspectMapper;
-import com.ruoyi.quality.pojo.QualityInspect;
 import com.ruoyi.sales.dto.InvoiceRegistrationProductDto;
 import com.ruoyi.sales.dto.SalesLedgerProductDto;
 import com.ruoyi.sales.mapper.InvoiceRegistrationProductMapper;
@@ -36,7 +30,7 @@
 import com.ruoyi.technology.mapper.TechnologyBomStructureMapper;
 import com.ruoyi.technology.mapper.TechnologyRoutingMapper;
 import com.ruoyi.technology.pojo.TechnologyRouting;
-import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
@@ -61,27 +55,44 @@
  * @date 2025-05-08
  */
 @Service
-@RequiredArgsConstructor
 public class SalesLedgerProductServiceImpl extends ServiceImpl<SalesLedgerProductMapper, SalesLedgerProduct> implements ISalesLedgerProductService {
 
-    private final SalesLedgerProductMapper salesLedgerProductMapper;
-    private final ProductionAccountMapper productionAccountMapper;
-    private final SalesLedgerMapper salesLedgerMapper;
-    private final PurchaseLedgerMapper purchaseLedgerMapper;
-    private final ProductionOrderMapper productionOrderMapper;
-    private final ProductionOperationTaskMapper productionOperationTaskMapper;
-    private final ProductionOrderService productionOrderService;
-    private final TechnologyRoutingMapper technologyRoutingMapper;
-    private final TechnologyBomStructureMapper technologyBomStructureMapper;
-    private final InvoiceRegistrationProductMapper invoiceRegistrationProductMapper;
-    private final ProductionProductMainMapper productionProductMainMapper;
-    private final ProductionProductOutputMapper productionProductOutputMapper;
-    private final ProductionProductInputMapper productionProductInputMapper;
-    private final QualityInspectMapper qualityInspectMapper;
-    private final ShippingInfoMapper shippingInfoMapper;
-    private final ShippingInfoServiceImpl shippingInfoService;
-    private final StockUtils stockUtils;
-    private final StockInventoryMapper stockInventoryMapper;
+    @Autowired
+    private SalesLedgerProductMapper salesLedgerProductMapper;
+    @Autowired
+    private ProductionAccountMapper productionAccountMapper;
+    @Autowired
+    private SalesLedgerMapper salesLedgerMapper;
+    @Autowired
+    private PurchaseLedgerMapper purchaseLedgerMapper;
+    @Autowired
+    private ProductionPlanMapper productionPlanMapper;
+    @Autowired
+    private ProductionOperationTaskMapper productionOperationTaskMapper;
+    @Autowired
+    private ProductionOrderService productionOrderService;
+    @Autowired
+    private TechnologyRoutingMapper technologyRoutingMapper;
+    @Autowired
+    private TechnologyBomStructureMapper technologyBomStructureMapper;
+    @Autowired
+    private InvoiceRegistrationProductMapper invoiceRegistrationProductMapper;
+    @Autowired
+    private ProductionProductMainMapper productionProductMainMapper;
+    @Autowired
+    private ProductionProductOutputMapper productionProductOutputMapper;
+    @Autowired
+    private ProductionProductInputMapper productionProductInputMapper;
+    @Autowired
+    private QualityInspectMapper qualityInspectMapper;
+    @Autowired
+    private ShippingInfoMapper shippingInfoMapper;
+    @Autowired
+    private ShippingInfoServiceImpl shippingInfoService;
+    @Autowired
+    private StockUtils stockUtils;
+    @Autowired
+    private StockInventoryMapper stockInventoryMapper;
 
     @Override
     public SalesLedgerProduct selectSalesLedgerProductById(Long id) {
@@ -104,7 +115,6 @@
                 if(shippingInfo != null){
                     item.setShippingDate(shippingInfo.getShippingDate());
                     item.setShippingCarNumber(shippingInfo.getShippingCarNumber());
-                    item.setShippingStatus(shippingInfo.getStatus());
                     item.setExpressCompany(shippingInfo.getExpressCompany());
                     item.setExpressNumber(shippingInfo.getExpressNumber());
                 }
@@ -217,7 +227,6 @@
             result = salesLedgerProductMapper.updateById(salesLedgerProduct);
             /*鍒犻櫎瀵瑰簲鐨勭敓浜ф暟鎹苟閲嶆柊鏂板*/
             deleteProductionData(Arrays.asList(salesLedgerProduct.getId()));
-            // 鍒犻櫎鐢熶骇鏍哥畻鏁版嵁
 
             addProductionData(salesLedgerProduct);
         }
@@ -256,70 +265,41 @@
      * 鏂板鐢熶骇鏁版嵁
      */
     public void addProductionData(SalesLedgerProduct salesLedgerProduct) {
-        ProductionOrder productionOrder = new ProductionOrder();
-        productionOrder.setSalesLedgerId(salesLedgerProduct.getSalesLedgerId());
-        productionOrder.setProductModelId(salesLedgerProduct.getProductModelId());
-        productionOrder.setSaleLedgerProductId(salesLedgerProduct.getId().intValue());
-        productionOrder.setNpsNo(generateNextOrderNo(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"))));
-        productionOrder.setQuantity(salesLedgerProduct.getQuantity());
-        productionOrder.setCompleteQuantity(BigDecimal.ZERO);
+        //鍏堝垽鏂浜у搧鏄惁闇�瑕佺敓浜�
+        if (!salesLedgerProduct.getIsProduction()) {
+            return;
+        }
+        SalesLedger salesLedger = salesLedgerMapper.selectById(salesLedgerProduct.getSalesLedgerId());
+        ProductionPlan productionPlan = new ProductionPlan();
+        productionPlan.setSalesLedgerId(salesLedgerProduct.getSalesLedgerId());
+        productionPlan.setSalesLedgerProductId(salesLedgerProduct.getId());
+        productionPlan.setMpsNo(generateNextPlanNo(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"))));
+        productionPlan.setProductModelId(salesLedgerProduct.getProductModelId());
+        productionPlan.setQtyRequired(salesLedgerProduct.getQuantity());
+        productionPlan.setSource("閿�鍞�");
+        productionPlan.setStatus(0);
+        productionPlan.setRequiredDate(salesLedger.getDeliveryDate());//闇�姹傛棩鏈�=浜よ揣鏃ユ湡
+        productionPlan.setPromisedDeliveryDate(salesLedger.getDeliveryDate());//鎵胯鏃ユ湡=浜よ揣鏃ユ湡
+        productionPlanMapper.insert(productionPlan);
 
-        TechnologyRouting routing = technologyRoutingMapper.selectOne(
-                new QueryWrapper<TechnologyRouting>().lambda()
-                        .eq(TechnologyRouting::getProductModelId, salesLedgerProduct.getProductModelId())
-                        .orderByDesc(TechnologyRouting::getCreateTime)
-                        .last("LIMIT 1"));
-        if (routing != null) {
-            productionOrder.setTechnologyRoutingId(routing.getId());
-        }
-        productionOrderMapper.insert(productionOrder);
-        if (productionOrder.getTechnologyRoutingId() != null) {
-            productionOrderService.syncProductionOrderSnapshot(productionOrder.getId());
-        }
     }
 
     /**
-     * 鍒犻櫎鐢熶骇鏁版嵁
+     * 鍒犻櫎鐢熶骇璁″垝
      */
     public void deleteProductionData(List<Long> productIds) {
-        List<ProductionOrder> productionOrders = productionOrderMapper.selectList(
-                new LambdaQueryWrapper<ProductionOrder>()
-                        .in(ProductionOrder::getSaleLedgerProductId, productIds.stream().map(Long::intValue).collect(Collectors.toList())));
-        if (org.springframework.util.CollectionUtils.isEmpty(productionOrders)) {
+        List<ProductionPlan> productionPlans = productionPlanMapper.selectList(
+                new LambdaQueryWrapper<ProductionPlan>()
+                        .in(ProductionPlan::getSalesLedgerProductId, productIds.stream().map(Long::intValue).collect(Collectors.toList())));
+        if (CollectionUtils.isEmpty(productionPlans)) {
             return;
         }
-        List<Long> orderIds = productionOrders.stream().map(ProductionOrder::getId).collect(Collectors.toList());
-        List<Long> taskIds = productionOperationTaskMapper.selectList(
-                        new LambdaQueryWrapper<ProductionOperationTask>()
-                                .in(ProductionOperationTask::getProductionOrderId, orderIds))
-                .stream().map(ProductionOperationTask::getId).collect(Collectors.toList());
-        if (!taskIds.isEmpty()) {
-            List<ProductionProductMain> productMains = productionProductMainMapper.selectList(
-                    new LambdaQueryWrapper<ProductionProductMain>()
-                            .in(ProductionProductMain::getProductionOperationTaskId, taskIds));
-            List<Long> productMainIds = productMains.stream().map(ProductionProductMain::getId).collect(Collectors.toList());
-            if (!productMainIds.isEmpty()) {
-                List<QualityInspect> qualityInspects = qualityInspectMapper.selectList(
-                        new LambdaQueryWrapper<QualityInspect>().in(QualityInspect::getProductMainId, productMainIds));
-                qualityInspects.forEach(qualityInspect -> {
-                    if (qualityInspect.getInspectState() == 1) {
-                        throw new RuntimeException("宸叉彁浜ょ殑妫�楠屽崟涓嶈兘鍒犻櫎");
-                    }
-                });
-                productionProductOutputMapper.deleteByProductMainIds(productMainIds);
-                productionProductInputMapper.deleteByProductMainIds(productMainIds);
-                qualityInspectMapper.deleteByProductMainIds(productMainIds);
-                productionAccountMapper.delete(new LambdaQueryWrapper<ProductionAccount>()
-                        .in(ProductionAccount::getProductionProductMainId, productMainIds));
-                for (Long productMainId : productMainIds) {
-                    stockUtils.deleteStockOutRecord(productMainId, StockOutQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_OUT.getCode());
-                    stockUtils.deleteStockInRecord(productMainId, StockInUnQualifiedRecordTypeEnum.PRODUCTION_SCRAP.getCode());
-                }
-            }
-            productionProductMainMapper.delete(new LambdaQueryWrapper<ProductionProductMain>()
-                    .in(ProductionProductMain::getProductionOperationTaskId, taskIds));
+        //濡傛灉鐢熶骇璁″垝宸蹭笅鍙戝垯涓嶈兘鍒犻櫎
+        if (productionPlans.stream().anyMatch(productionPlan -> productionPlan.getStatus() != 0)) {
+            throw new RuntimeException("鐢熶骇璁″垝宸蹭笅鍙戯紝涓嶈兘鍒犻櫎璇ラ攢鍞骇鍝�");
         }
-        productionOrderService.removeProductionOrder(orderIds);
+        List<Long> ids = productionPlans.stream().map(ProductionPlan::getId).collect(Collectors.toList());
+        productionPlanMapper.deleteByIds(ids);
     }
 
     @Override
@@ -432,21 +412,21 @@
         return R.ok();
     }
 
-    private String generateNextOrderNo(String datePrefix) {
-        QueryWrapper<ProductionOrder> queryWrapper = new QueryWrapper<>();
-        queryWrapper.likeRight("nps_no", "SC" + datePrefix);
-        queryWrapper.orderByDesc("nps_no");
+    private String generateNextPlanNo(String datePrefix) {
+        QueryWrapper<ProductionPlan> queryWrapper = new QueryWrapper<>();
+        queryWrapper.likeRight("mps_no", "JH" + datePrefix);
+        queryWrapper.orderByDesc("mps_no");
         queryWrapper.last("LIMIT 1");
-        ProductionOrder latestOrder = productionOrderMapper.selectOne(queryWrapper);
+        ProductionPlan latestPlan = productionPlanMapper.selectOne(queryWrapper);
         int sequence = 1;
-        if (latestOrder != null && latestOrder.getNpsNo() != null && !latestOrder.getNpsNo().isEmpty()) {
-            String sequenceStr = latestOrder.getNpsNo().substring(("SC" + datePrefix).length());
+        if (latestPlan != null && latestPlan.getMpsNo() != null && !latestPlan.getMpsNo().isEmpty()) {
+            String sequenceStr = latestPlan.getMpsNo().substring(("JH" + datePrefix).length());
             try {
                 sequence = Integer.parseInt(sequenceStr) + 1;
             } catch (NumberFormatException e) {
                 sequence = 1;
             }
         }
-        return "SC" + datePrefix + String.format("%04d", sequence);
+        return "JH" + datePrefix + String.format("%04d", sequence);
     }
 }

--
Gitblit v1.9.3