From 14de446d42a23f8823f56ef79214e0d0d634adaa Mon Sep 17 00:00:00 2001
From: zss <zss@example.com>
Date: 星期四, 22 一月 2026 16:57:55 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_New' into dev_New

---
 src/main/java/com/ruoyi/sales/service/impl/InvoiceRegistrationServiceImpl.java |  106 ++++++++++++++++++++++++++++++++++------------------
 1 files changed, 69 insertions(+), 37 deletions(-)

diff --git a/src/main/java/com/ruoyi/sales/service/impl/InvoiceRegistrationServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/InvoiceRegistrationServiceImpl.java
index 1d71938..d1ec847 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/InvoiceRegistrationServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/InvoiceRegistrationServiceImpl.java
@@ -54,53 +54,85 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void invoiceRegistrationSave(SalesLedgerDto salesLedgerDto) {
+        //  鏂板寮�绁ㄧ櫥璁颁富琛�
         InvoiceRegistration invoiceRegistration = new InvoiceRegistration();
         BeanUtils.copyProperties(salesLedgerDto, invoiceRegistration);
         invoiceRegistration.setId(null);
         invoiceRegistration.setCustomerId(salesLedgerDto.getCustomerId().intValue());
         invoiceRegistration.setSalesLedgerId(salesLedgerDto.getId().intValue());
         invoiceRegistrationMapper.insert(invoiceRegistration);
+
         List<SalesLedgerProduct> productData = salesLedgerDto.getProductData();
-        BigDecimal invoiceAmountTotal = BigDecimal.ZERO;
-        if(CollectionUtils.isNotEmpty(productData)){
-            for (SalesLedgerProduct productDatum : productData) {
-                // 濡傛灉寮�绁ㄦ暟涓�0 璺宠繃
-                BigDecimal currentInvoiceNum = productDatum.getCurrentInvoiceNum();
-                if(null == currentInvoiceNum || BigDecimal.ZERO.compareTo(currentInvoiceNum) == 0){
-                    continue;
-                }
-                invoiceAmountTotal = invoiceAmountTotal.add(currentInvoiceNum);
-                InvoiceRegistrationProduct invoiceRegistrationProduct = new InvoiceRegistrationProduct();
-                BeanUtils.copyProperties(productDatum, invoiceRegistrationProduct);
-                //鏇存柊宸插紑绁ㄥ墿浣欐湭寮�绁ㄦ暟
-                invoiceRegistrationProductMapper.update(
-                        null,
-                        new LambdaUpdateWrapper<InvoiceRegistrationProduct>()
-                                .eq(InvoiceRegistrationProduct::getSalesLedgerId, salesLedgerDto.getId())
-                                .set(InvoiceRegistrationProduct::getNoInvoiceAmount, productDatum.getNoInvoiceAmount())
-                );
-                invoiceRegistrationProduct.setId(null);
-                invoiceRegistrationProduct.setSalesLedgerId(salesLedgerDto.getId().intValue());
-                invoiceRegistrationProduct.setInvoiceRegistrationId(invoiceRegistration.getId());
-                invoiceRegistrationProduct.setInvoiceAmount(productDatum.getCurrentInvoiceAmount());
-                invoiceRegistrationProduct.setInvoiceNum(productDatum.getCurrentInvoiceNum());
-                invoiceRegistrationProduct.setSalesLedgerProductId(productDatum.getId().intValue());
+        if (CollectionUtils.isEmpty(productData)) {
+            return;
+        }
 
-                invoiceRegistrationProductMapper.insert(invoiceRegistrationProduct);
-                productDatum.setInvoiceNum(currentInvoiceNum);
-                productDatum.setInvoiceAmount(productDatum.getCurrentInvoiceAmount());
-                salesLedgerProductMapper.updateById(productDatum);
-                // 鏂板涓�鏉″紑绁ㄥ彴璐︽暟鎹�
-                InvoiceLedger invoiceLedger = new InvoiceLedger();
-                invoiceLedger.setInvoiceDate(salesLedgerDto.getIssueDate());
-                invoiceLedger.setInvoiceRegistrationProductId(invoiceRegistrationProduct.getId());
-                invoiceLedger.setInvoiceTotal(invoiceRegistrationProduct.getInvoiceAmount());
-                invoiceLedger.setInvoiceNo(salesLedgerDto.getInvoiceNo());
-                invoiceLedger.setCreateUser(SecurityUtils.getUserId().intValue());
-                invoiceLedger.setInvoicePerson(productDatum.getRegister());
+        for (SalesLedgerProduct productDatum : productData) {
+            //  鏈寮�绁ㄦ暟 / 閲戦
+            BigDecimal currentInvoiceNum = productDatum.getCurrentInvoiceNum();
+            BigDecimal currentInvoiceAmount = productDatum.getCurrentInvoiceAmount();
 
-                invoiceLedgerMapper.insert(invoiceLedger);
+            if (currentInvoiceNum == null || BigDecimal.ZERO.compareTo(currentInvoiceNum) == 0) {
+                continue;
             }
+
+            LambdaQueryWrapper<SalesLedgerProduct> salesLedgerProductLambdaQueryWrapper = new LambdaQueryWrapper<SalesLedgerProduct>()
+                    .eq(SalesLedgerProduct::getId, productDatum.getId())
+                    .eq(SalesLedgerProduct::getSalesLedgerId, productDatum.getSalesLedgerId());
+            SalesLedgerProduct dbProduct = salesLedgerProductMapper.selectOne(salesLedgerProductLambdaQueryWrapper);
+
+            if (dbProduct == null) {
+                throw new RuntimeException("閿�鍞彴璐︿骇鍝佷笉瀛樺湪锛孖D锛�" + productDatum.getId());
+            }
+
+            //  璁$畻绱寮�绁�
+            BigDecimal newInvoiceNum = dbProduct.getInvoiceNum().add(currentInvoiceNum);
+
+            BigDecimal newInvoiceAmount = dbProduct.getInvoiceAmount().add(currentInvoiceAmount);
+
+            //  璁$畻鏈紑绁�
+            BigDecimal newNoInvoiceNum = dbProduct.getQuantity().subtract(newInvoiceNum);
+
+            BigDecimal newNoInvoiceAmount = dbProduct.getTaxInclusiveTotalPrice().subtract(newInvoiceAmount);
+
+            if (newNoInvoiceNum.compareTo(BigDecimal.ZERO) < 0
+                    || newNoInvoiceAmount.compareTo(BigDecimal.ZERO) < 0) {
+                throw new RuntimeException("寮�绁ㄦ暟閲忔垨閲戦瓒呰繃鍚堝悓鎬婚噺");
+            }
+
+            //  鏇存柊 sales_ledger_product
+            salesLedgerProductMapper.update(
+                    null,
+                    new LambdaUpdateWrapper<SalesLedgerProduct>()
+                            .eq(SalesLedgerProduct::getId, dbProduct.getId())
+                            .set(SalesLedgerProduct::getInvoiceNum, newInvoiceNum)
+                            .set(SalesLedgerProduct::getInvoiceAmount, newInvoiceAmount)
+                            .set(SalesLedgerProduct::getNoInvoiceNum, newNoInvoiceNum)
+                            .set(SalesLedgerProduct::getNoInvoiceAmount, newNoInvoiceAmount)
+            );
+
+            InvoiceRegistrationProduct invoiceRegistrationProduct = new InvoiceRegistrationProduct();
+            BeanUtils.copyProperties(dbProduct, invoiceRegistrationProduct);
+
+            invoiceRegistrationProduct.setId(null);
+            invoiceRegistrationProduct.setSalesLedgerId(salesLedgerDto.getId().intValue());
+            invoiceRegistrationProduct.setInvoiceRegistrationId(invoiceRegistration.getId());
+            invoiceRegistrationProduct.setSalesLedgerProductId(dbProduct.getId().intValue());
+            invoiceRegistrationProduct.setInvoiceNum(currentInvoiceNum);
+            invoiceRegistrationProduct.setInvoiceAmount(currentInvoiceAmount);
+            invoiceRegistrationProduct.setNoInvoiceAmount(newNoInvoiceAmount);
+
+            invoiceRegistrationProductMapper.insert(invoiceRegistrationProduct);
+
+            InvoiceLedger invoiceLedger = new InvoiceLedger();
+            invoiceLedger.setInvoiceDate(salesLedgerDto.getIssueDate());
+            invoiceLedger.setInvoiceRegistrationProductId(invoiceRegistrationProduct.getId());
+            invoiceLedger.setInvoiceTotal(currentInvoiceAmount);
+            invoiceLedger.setInvoiceNo(salesLedgerDto.getInvoiceNo());
+            invoiceLedger.setCreateUser(SecurityUtils.getUserId().intValue());
+            invoiceLedger.setInvoicePerson(dbProduct.getRegister());
+
+            invoiceLedgerMapper.insert(invoiceLedger);
         }
     }
 

--
Gitblit v1.9.3