From 810b00c05fb7c9c6099cd8d011718e0ca59162bb Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期一, 05 一月 2026 13:50:37 +0800
Subject: [PATCH] feat(production): 生产报工

---
 src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java |   85 ++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 80 insertions(+), 5 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 b34d193..3d51cb0 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -1,25 +1,36 @@
 package com.ruoyi.sales.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.production.mapper.ProcessRouteItemMapper;
+import com.ruoyi.production.mapper.ProcessRouteMapper;
+import com.ruoyi.production.mapper.ProductOrderMapper;
+import com.ruoyi.production.mapper.ProductProcessRouteItemMapper;
+import com.ruoyi.production.pojo.ProcessRoute;
+import com.ruoyi.production.pojo.ProcessRouteItem;
+import com.ruoyi.production.pojo.ProductOrder;
+import com.ruoyi.production.pojo.ProductProcessRouteItem;
 import com.ruoyi.purchase.mapper.PurchaseLedgerMapper;
 import com.ruoyi.purchase.pojo.PurchaseLedger;
+import com.ruoyi.sales.dto.InvoiceRegistrationProductDto;
+import com.ruoyi.sales.mapper.InvoiceRegistrationProductMapper;
 import com.ruoyi.sales.mapper.SalesLedgerMapper;
 import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
+import com.ruoyi.sales.pojo.InvoiceRegistrationProduct;
 import com.ruoyi.sales.pojo.SalesLedger;
 import com.ruoyi.sales.pojo.SalesLedgerProduct;
 import com.ruoyi.sales.service.ISalesLedgerProductService;
 import lombok.AllArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 
 import java.lang.reflect.Field;
 import java.math.BigDecimal;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Objects;
-import java.util.Set;
+import java.util.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -39,6 +50,15 @@
 
     private PurchaseLedgerMapper purchaseLedgerMapper;
 
+    private ProductOrderMapper productOrderMapper;
+
+    private ProcessRouteItemMapper processRouteItemMapper;
+    private ProductProcessRouteItemMapper productProcessRouteItemMapper;
+    @Autowired
+    private InvoiceRegistrationProductMapper invoiceRegistrationProductMapper;
+    @Autowired
+    private ProcessRouteMapper processRouteMapper;
+
     @Override
     public SalesLedgerProduct selectSalesLedgerProductById(Long id) {
         return salesLedgerProductMapper.selectById(id);
@@ -49,7 +69,29 @@
         LambdaQueryWrapper<SalesLedgerProduct> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(SalesLedgerProduct::getSalesLedgerId, salesLedgerProduct.getSalesLedgerId())
                 .eq(SalesLedgerProduct::getType, salesLedgerProduct.getType());
-        return salesLedgerProductMapper.selectList(queryWrapper);
+        List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(queryWrapper);
+        if (!CollectionUtils.isEmpty(salesLedgerProducts)) {
+            InvoiceRegistrationProductDto invoiceRegistrationProductDto = new InvoiceRegistrationProductDto();
+            invoiceRegistrationProductDto.setSalesLedgerId(salesLedgerProduct.getSalesLedgerId().intValue());
+            List<InvoiceRegistrationProductDto> invoiceRegistrationProductDtoList = invoiceRegistrationProductMapper.invoiceRegistrationProductList(invoiceRegistrationProductDto);
+            // 缁熻寮�绁ㄧ櫥璁颁骇鍝佺殑宸插紑绁ㄦ暟/宸插紑绁ㄩ噾棰�
+            if (!CollectionUtils.isEmpty(invoiceRegistrationProductDtoList)) {
+                for (SalesLedgerProduct ledgerProduct : salesLedgerProducts) {
+                    BigDecimal invoiceNum = BigDecimal.ZERO;
+                    BigDecimal invoiceAmount = BigDecimal.ZERO;
+                    for (InvoiceRegistrationProductDto registrationProductDto : invoiceRegistrationProductDtoList) {
+                        if (ledgerProduct.getId().intValue() == registrationProductDto.getSalesLedgerProductId()) {
+                            invoiceNum = invoiceNum.add(registrationProductDto.getInvoiceNum());
+                            invoiceAmount = invoiceAmount.add(registrationProductDto.getInvoiceAmount());
+                        }
+                    }
+                    ledgerProduct.setInvoiceNum(invoiceNum);
+                    ledgerProduct.setInvoiceAmount(invoiceAmount);
+                }
+            }
+
+        }
+        return salesLedgerProducts;
     }
 
     @Override
@@ -73,6 +115,14 @@
 
         // 2. 鎵ц鍒犻櫎鎿嶄綔
         int result = salesLedgerProductMapper.deleteBatchIds(Arrays.asList(ids));
+        //鍒犻櫎瀵瑰簲鐨勭敓浜ц鍗�
+        for (Long id : ids) {
+            ProductOrder productOrder = productOrderMapper.selectOne(new LambdaQueryWrapper<ProductOrder>().eq(ProductOrder::getProductModelId, id));
+            if (productOrder != null) {
+                productProcessRouteItemMapper.delete(new LambdaQueryWrapper<ProductProcessRouteItem>().eq(ProductProcessRouteItem::getRouteId, productOrder.getId()));
+                productOrderMapper.delete(new LambdaQueryWrapper<ProductOrder>().eq(ProductOrder::getProductModelId, id));
+            }
+        }
 
         // 3. 瀵规瘡涓富琛↖D杩涜閲戦鏇存柊
         for (Long salesLedgerId : mainIds) {
@@ -95,11 +145,36 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public int addOrUpdateSalesLedgerProduct(SalesLedgerProduct salesLedgerProduct) {
+        //鏈紑绁ㄦ暟閲�+閲戦
+        salesLedgerProduct.setNoInvoiceNum(salesLedgerProduct.getQuantity());
+        salesLedgerProduct.setNoInvoiceAmount(salesLedgerProduct.getTaxInclusiveTotalPrice());
         int result;
         Long salesLedgerId = salesLedgerProduct.getSalesLedgerId();
         if (salesLedgerProduct.getId() == null) {
             result = salesLedgerProductMapper.insert(salesLedgerProduct);
+            ProductOrder productOrder = new ProductOrder();
+            productOrder.setSalesLedgerId(salesLedgerProduct.getSalesLedgerId());
+            productOrder.setProductModelId(salesLedgerProduct.getId());
+            productOrder.setNpsNo("SC" + String.format("%08d", salesLedgerProduct.getId()));
+            productOrderMapper.insert(productOrder);
+
+            ProcessRoute processRoute = processRouteMapper.selectOne(new QueryWrapper<ProcessRoute>().lambda().eq(ProcessRoute::getProductModelId, salesLedgerProduct.getProductModelId()));
+            if (processRoute != null) {
+                List<ProcessRouteItem> processRouteItems = processRouteItemMapper.selectList(new QueryWrapper<ProcessRouteItem>().lambda().eq(ProcessRouteItem::getRouteId, processRoute.getId()));
+                for (ProcessRouteItem processRouteItem : processRouteItems) {
+                    ProductProcessRouteItem productProcessRouteItem = new ProductProcessRouteItem();
+                    productProcessRouteItem.setProductModelId(productOrder.getProductModelId());
+                    productProcessRouteItem.setProcessId(processRouteItem.getProcessId());
+                    productProcessRouteItem.setRouteId(productOrder.getId());
+                    productProcessRouteItemMapper.insert(productProcessRouteItem);
+                }
+                productOrder.setRouteId(processRoute.getId());
+                productOrderMapper.updateById(productOrder);
+            }
+
+
         } else {
+            salesLedgerProduct.setFutureTickets(salesLedgerProduct.getQuantity());
             result = salesLedgerProductMapper.updateById(salesLedgerProduct);
         }
 

--
Gitblit v1.9.3