From b17d24985527421ee9df504af8eccf24cf1aa7f3 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期三, 16 九月 2026 10:20:01 +0800
Subject: [PATCH] refactor(invoice): 重构开票登记导出功能

---
 src/main/java/com/ruoyi/sales/service/impl/InvoiceRegistrationServiceImpl.java |   60 +++++++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 53 insertions(+), 7 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 a42850d..85451b8 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/InvoiceRegistrationServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/InvoiceRegistrationServiceImpl.java
@@ -5,15 +5,18 @@
 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.utils.SecurityUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.sales.dto.InvoiceLedgerDto;
 import com.ruoyi.sales.dto.InvoiceRegistrationDto;
 import com.ruoyi.sales.dto.InvoiceRegistrationProductDto;
 import com.ruoyi.sales.dto.SalesLedgerDto;
-import com.ruoyi.sales.excel.InvoiceRegisAndProductExcelDto;
+import com.ruoyi.sales.excel.InvoiceRegistrationExportVo;
 import com.ruoyi.sales.mapper.*;
 import com.ruoyi.sales.pojo.InvoiceLedger;
 import com.ruoyi.sales.pojo.InvoiceRegistration;
 import com.ruoyi.sales.pojo.InvoiceRegistrationProduct;
+import com.ruoyi.sales.pojo.SalesLedger;
 import com.ruoyi.sales.pojo.SalesLedgerProduct;
 import com.ruoyi.sales.service.InvoiceRegistrationService;
 import org.apache.commons.collections4.CollectionUtils;
@@ -25,7 +28,10 @@
 
 import javax.servlet.http.HttpServletResponse;
 import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 @Service
@@ -42,6 +48,9 @@
 
     @Autowired
     private InvoiceLedgerMapper invoiceLedgerMapper;
+
+    @Autowired
+    private SalesLedgerMapper salesLedgerMapper;
 
     /**
      * 寮�绁ㄧ櫥璁拌褰曟柊澧�
@@ -63,7 +72,7 @@
             for (SalesLedgerProduct productDatum : productData) {
                 // 濡傛灉寮�绁ㄦ暟涓�0 璺宠繃
                 BigDecimal currentInvoiceNum = productDatum.getCurrentInvoiceNum();
-                if(null != currentInvoiceNum && BigDecimal.ZERO.compareTo(currentInvoiceNum) == 0){
+                if(null == currentInvoiceNum || BigDecimal.ZERO.compareTo(currentInvoiceNum) == 0){
                     continue;
                 }
                 invoiceAmountTotal = invoiceAmountTotal.add(currentInvoiceNum);
@@ -75,12 +84,18 @@
                 invoiceRegistrationProduct.setInvoiceAmount(productDatum.getCurrentInvoiceAmount());
                 invoiceRegistrationProduct.setInvoiceNum(productDatum.getCurrentInvoiceNum());
                 invoiceRegistrationProduct.setSalesLedgerProductId(productDatum.getId().intValue());
+
                 invoiceRegistrationProductMapper.insert(invoiceRegistrationProduct);
                 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());
+
                 invoiceLedgerMapper.insert(invoiceLedger);
             }
         }
@@ -171,13 +186,44 @@
 
     /**
      * 寮�绁ㄧ櫥璁板鍑�
+     * 瀵煎嚭鍒楋細閿�鍞悎鍚屽彿銆佸鎴峰悎鍚屽彿銆佸鎴峰悕绉般�佸悎鍚岄噾棰濄�佸凡寮�绁ㄩ噾棰濄�佹湭寮�绁ㄩ噾棰�
+     * 宸插紑绁�/鏈紑绁ㄩ噾棰濆彛寰勪笌 /sales/ledger/listPage 椤甸潰涓�鑷�
      * @param response
-     * @param invoiceRegistrationDto
+     * @param salesLedgerDto
      */
     @Override
-    public void invoiceRegistrationExport(HttpServletResponse response, InvoiceRegistrationDto invoiceRegistrationDto) {
-        List<InvoiceRegisAndProductExcelDto> invoiceRegisAndProductExcelDtoList = invoiceRegistrationMapper.invoiceRegisAndProductExcelDtoList();
-        ExcelUtil<InvoiceRegisAndProductExcelDto> util = new ExcelUtil<InvoiceRegisAndProductExcelDto>(InvoiceRegisAndProductExcelDto.class);
-        util.exportExcel(response, invoiceRegisAndProductExcelDtoList, "寮�绁ㄧ櫥璁颁俊鎭�");
+    public void invoiceRegistrationExport(HttpServletResponse response, SalesLedgerDto salesLedgerDto) {
+        Page page = new Page();
+        page.setCurrent(-1);
+        page.setSize(-1);
+        IPage<SalesLedger> iPage = salesLedgerMapper.selectSalesLedgerListPage(page, salesLedgerDto);
+        List<SalesLedger> records = iPage.getRecords();
+
+        // 鎸夐攢鍞彴璐︽眹鎬诲凡寮�绁ㄩ噾棰�
+        Map<Integer, BigDecimal> invoicedMap = new HashMap<>();
+        List<Long> salesLedgerIds = records.stream().map(SalesLedger::getId).collect(Collectors.toList());
+        if (CollectionUtils.isNotEmpty(salesLedgerIds)) {
+            List<InvoiceLedgerDto> invoiceLedgerDtoList = invoiceLedgerMapper.invoicedTotal(salesLedgerIds);
+            for (InvoiceLedgerDto invoiceLedgerDto : invoiceLedgerDtoList) {
+                invoicedMap.put(invoiceLedgerDto.getSalesLedgerId(), invoiceLedgerDto.getInvoiceTotal());
+            }
+        }
+
+        List<InvoiceRegistrationExportVo> exportList = new ArrayList<>();
+        for (SalesLedger record : records) {
+            BigDecimal contractAmount = record.getContractAmount() == null ? BigDecimal.ZERO : record.getContractAmount();
+            BigDecimal invoiceTotal = invoicedMap.getOrDefault(record.getId().intValue(), BigDecimal.ZERO);
+            BigDecimal noInvoiceAmountTotal = contractAmount.subtract(invoiceTotal);
+            InvoiceRegistrationExportVo exportVo = new InvoiceRegistrationExportVo();
+            exportVo.setSalesContractNo(record.getSalesContractNo());
+            exportVo.setCustomerContractNo(record.getCustomerContractNo());
+            exportVo.setCustomerName(record.getCustomerName());
+            exportVo.setContractAmount(contractAmount);
+            exportVo.setInvoiceTotal(invoiceTotal);
+            exportVo.setNoInvoiceAmountTotal(noInvoiceAmountTotal);
+            exportList.add(exportVo);
+        }
+        ExcelUtil<InvoiceRegistrationExportVo> util = new ExcelUtil<InvoiceRegistrationExportVo>(InvoiceRegistrationExportVo.class);
+        util.exportExcel(response, exportList, "寮�绁ㄧ櫥璁颁俊鎭�");
     }
 }

--
Gitblit v1.9.3