From 3512270362c77fe45bc68ab7b6f28bd1bd2f8bfb Mon Sep 17 00:00:00 2001
From: chenrui <1187576398@qq.com>
Date: 星期一, 09 六月 2025 11:58:56 +0800
Subject: [PATCH] 分页修改

---
 src/main/java/com/ruoyi/purchase/service/impl/PaymentRegistrationServiceImpl.java |    3 
 src/main/java/com/ruoyi/sales/controller/ReceiptPaymentController.java            |    9 +-
 src/main/java/com/ruoyi/sales/dto/CustomerInteractionDto.java                     |   25 ++++++++
 src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java               |   12 +++
 src/main/java/com/ruoyi/sales/mapper/ReceiptPaymentMapper.java                    |    7 ++
 src/main/java/com/ruoyi/sales/service/ReceiptPaymentService.java                  |    8 ++
 src/main/resources/mapper/sales/ReceiptPaymentMapper.xml                          |   47 +++++++++++++++
 src/main/java/com/ruoyi/sales/service/impl/ReceiptPaymentServiceImpl.java         |   52 +++++++++++++++++
 8 files changed, 155 insertions(+), 8 deletions(-)

diff --git a/src/main/java/com/ruoyi/purchase/service/impl/PaymentRegistrationServiceImpl.java b/src/main/java/com/ruoyi/purchase/service/impl/PaymentRegistrationServiceImpl.java
index 3c58664..95a51ff 100644
--- a/src/main/java/com/ruoyi/purchase/service/impl/PaymentRegistrationServiceImpl.java
+++ b/src/main/java/com/ruoyi/purchase/service/impl/PaymentRegistrationServiceImpl.java
@@ -288,6 +288,8 @@
             detailPagination.put("pageSize", detailPageSize);
             detailPagination.put("pages", (int) Math.ceil((double) totalDetails / detailPageSize));
 
+            // 搴斾粯閲戦閫昏緫涓嶉噰鐢ㄥ悎鍚岄噾棰濇敼鎴�  鍙戠エ閲戦鍑忎粯娆鹃噾棰�
+            payableAmount = invoiceAmount.subtract(paymentAmount);
             res.put("invoiceAmount", invoiceAmount);
             res.put("payableAmount", payableAmount);
             res.put("paymentAmount", paymentAmount);
@@ -374,7 +376,6 @@
                                                                                 Collectors.toList()
                                                                         )
                                                                         );
-            BigDecimal amountDateTotal = BigDecimal.ZERO;
             for (LocalDate localDate : dateListMap.keySet()) {
                 BigDecimal currentPaymentAmount = BigDecimal.ZERO;
                 BigDecimal invoiceAmount = BigDecimal.ZERO;
diff --git a/src/main/java/com/ruoyi/sales/controller/ReceiptPaymentController.java b/src/main/java/com/ruoyi/sales/controller/ReceiptPaymentController.java
index 6669842..1630b0b 100644
--- a/src/main/java/com/ruoyi/sales/controller/ReceiptPaymentController.java
+++ b/src/main/java/com/ruoyi/sales/controller/ReceiptPaymentController.java
@@ -54,14 +54,13 @@
     }
 
     /**
-     * 鍥炴鐧昏鍒嗛〉鏌ヨ
-     * @param page
+     * 瀹㈡埛寰�鏉ヨ褰曟煡璇�
      * @param receiptPaymentDto
      * @return
      */
-    @GetMapping("/listPage")
-    public AjaxResult receiptPaymentListPage (Page page, ReceiptPaymentDto receiptPaymentDto) {
-        return AjaxResult.success(receiptPaymentService.receiptPaymentListPage(page,receiptPaymentDto));
+    @GetMapping("/customerInteractions")
+    public AjaxResult customerInteractions (ReceiptPaymentDto receiptPaymentDto) {
+        return AjaxResult.success(receiptPaymentService.customerInteractions(receiptPaymentDto));
     }
 
     /**
diff --git a/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java b/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
index 43db757..5ac4159 100644
--- a/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
+++ b/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
@@ -178,12 +178,20 @@
             return iPage;
         }
         for (SalesLedger salesLedger : iPage.getRecords()) {
+            boolean existFlag = false;
+            BigDecimal noInvoiceAmountTotal = BigDecimal.ZERO;
             for (InvoiceLedgerDto invoiceLedgerDto : invoiceLedgerDtoList) {
                 if (salesLedger.getId().intValue() == invoiceLedgerDto.getSalesLedgerId()) {
-                    BigDecimal noInvoiceAmountTotal = salesLedger.getContractAmount().subtract(invoiceLedgerDto.getInvoiceTotal());
-                    salesLedger.setNoInvoiceAmountTotal(noInvoiceAmountTotal);
+                    noInvoiceAmountTotal = salesLedger.getContractAmount().subtract(invoiceLedgerDto.getInvoiceTotal());
+                    existFlag = true;
+                    break;
                 }
             }
+            if(existFlag){
+                salesLedger.setNoInvoiceAmountTotal(noInvoiceAmountTotal);
+            }else {
+                salesLedger.setNoInvoiceAmountTotal(salesLedger.getContractAmount());
+            }
         }
         return iPage;
     }
diff --git a/src/main/java/com/ruoyi/sales/dto/CustomerInteractionDto.java b/src/main/java/com/ruoyi/sales/dto/CustomerInteractionDto.java
new file mode 100644
index 0000000..2ad0a24
--- /dev/null
+++ b/src/main/java/com/ruoyi/sales/dto/CustomerInteractionDto.java
@@ -0,0 +1,25 @@
+package com.ruoyi.sales.dto;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+
+@Data
+public class CustomerInteractionDto {
+
+    /** 寮�绁ㄩ噾棰� */
+    private BigDecimal invoiceAmount;
+
+    /** 鍥炴閲戦 */
+    private BigDecimal receiptAmount;
+
+    /** 搴旀敹閲戦 */
+    private BigDecimal unReceiptAmount;
+
+    /** 鍙戠敓鏃ユ湡 */
+    private LocalDate happenTime;
+
+    /** 绫诲瀷 1 鍙戠エ鐧昏  0 鍥炴鐧昏 */
+    private int type;
+}
diff --git a/src/main/java/com/ruoyi/sales/mapper/ReceiptPaymentMapper.java b/src/main/java/com/ruoyi/sales/mapper/ReceiptPaymentMapper.java
index 65a23ee..2adc300 100644
--- a/src/main/java/com/ruoyi/sales/mapper/ReceiptPaymentMapper.java
+++ b/src/main/java/com/ruoyi/sales/mapper/ReceiptPaymentMapper.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.sales.dto.CustomerInteractionDto;
 import com.ruoyi.sales.dto.InvoiceLedgerDto;
 import com.ruoyi.sales.dto.ReceiptPaymentDto;
 import com.ruoyi.sales.pojo.ReceiptPayment;
@@ -50,4 +51,10 @@
      */
     IPage<ReceiptPaymentDto> receiptPaymentHistoryListPage(Page page,@Param("params") ReceiptPaymentDto receiptPaymentDto);
 
+    /**
+     * 瀹㈡埛寰�鏉ヨ褰曟煡璇�
+     * @param receiptPaymentDto
+     * @return
+     */
+    List<CustomerInteractionDto> customerInteractions (ReceiptPaymentDto receiptPaymentDto);
 }
diff --git a/src/main/java/com/ruoyi/sales/service/ReceiptPaymentService.java b/src/main/java/com/ruoyi/sales/service/ReceiptPaymentService.java
index 18b4fa6..25ddc6f 100644
--- a/src/main/java/com/ruoyi/sales/service/ReceiptPaymentService.java
+++ b/src/main/java/com/ruoyi/sales/service/ReceiptPaymentService.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.sales.dto.CustomerInteractionDto;
 import com.ruoyi.sales.dto.InvoiceLedgerDto;
 import com.ruoyi.sales.dto.ReceiptPaymentDto;
 import com.ruoyi.sales.pojo.ReceiptPayment;
@@ -77,4 +78,11 @@
      * 鏌ヨ鍥炴璁板綍鍒嗛〉
      */
     IPage<ReceiptPaymentDto> receiptPaymentHistoryListPage(Page page, ReceiptPaymentDto receiptPaymentDto);
+
+    /**
+     * 瀹㈡埛寰�鏉ヨ褰曟煡璇�
+     * @param receiptPaymentDto
+     * @return
+     */
+    List<CustomerInteractionDto> customerInteractions (ReceiptPaymentDto receiptPaymentDto);
 }
diff --git a/src/main/java/com/ruoyi/sales/service/impl/ReceiptPaymentServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/ReceiptPaymentServiceImpl.java
index 1e84cec..3e4de3d 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/ReceiptPaymentServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/ReceiptPaymentServiceImpl.java
@@ -4,6 +4,8 @@
 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.purchase.dto.PaymentHistoryRecordVo;
+import com.ruoyi.sales.dto.CustomerInteractionDto;
 import com.ruoyi.sales.dto.InvoiceLedgerDto;
 import com.ruoyi.sales.dto.ReceiptPaymentDto;
 import com.ruoyi.sales.mapper.ReceiptPaymentMapper;
@@ -20,6 +22,7 @@
 import java.time.LocalDate;
 import java.time.YearMonth;
 import java.util.*;
+import java.util.stream.Collectors;
 
 @Service
 public class ReceiptPaymentServiceImpl extends ServiceImpl<ReceiptPaymentMapper,ReceiptPayment> implements ReceiptPaymentService {
@@ -190,4 +193,53 @@
     public IPage<ReceiptPaymentDto> receiptPaymentHistoryListPage(Page page, ReceiptPaymentDto receiptPaymentDto) {
         return receiptPaymentMapper.receiptPaymentHistoryListPage(page, receiptPaymentDto);
     }
+
+    /**
+     * 瀹㈡埛寰�鏉ヨ褰曟煡璇�
+     * @param receiptPaymentDto
+     * @return
+     */
+    @Override
+    public List<CustomerInteractionDto> customerInteractions(ReceiptPaymentDto receiptPaymentDto) {
+        ArrayList<CustomerInteractionDto> result = new ArrayList<>();
+        List<CustomerInteractionDto> customerInteractionDtos = receiptPaymentMapper.customerInteractions(receiptPaymentDto);
+        if(CollectionUtils.isEmpty(customerInteractionDtos)){
+            return result;
+        }
+        // 搴旀敹鎬婚噾棰濋噾棰濊绠�
+        BigDecimal amountTotal = BigDecimal.ZERO;
+        Map<LocalDate, List<CustomerInteractionDto>> dateListMap = customerInteractionDtos.stream().collect(
+                Collectors.groupingBy(
+                        CustomerInteractionDto::getHappenTime,
+                        LinkedHashMap::new,
+                        Collectors.toList()
+                )
+        );
+        for (LocalDate localDate : dateListMap.keySet()) {
+            BigDecimal currentReceiptAmount = BigDecimal.ZERO;
+            BigDecimal invoiceAmount = BigDecimal.ZERO;
+            BigDecimal currentDateTotal = BigDecimal.ZERO;
+            List<CustomerInteractionDto> customerInteractionDtoList = dateListMap.get(localDate);
+            // 璁$畻褰撳ぉ鏀舵鏁�
+            currentReceiptAmount = customerInteractionDtoList.stream()
+                    .filter(item ->item.getType() == 0)
+                    .map(CustomerInteractionDto::getReceiptAmount)
+                    .reduce(BigDecimal.ZERO,BigDecimal::add);
+            // 璁$畻褰撳ぉ寮�绁ㄦ暟
+            invoiceAmount = customerInteractionDtoList.stream()
+                    .filter(item ->item.getType() == 1)
+                    .map(CustomerInteractionDto::getInvoiceAmount)
+                    .reduce(BigDecimal.ZERO,BigDecimal::add);
+            // 璁$畻褰撴棩姹囨��
+            currentDateTotal = currentDateTotal.add(invoiceAmount).subtract(currentReceiptAmount);
+            CustomerInteractionDto customerInteractionDto = new CustomerInteractionDto();
+            customerInteractionDto.setHappenTime(localDate);
+            customerInteractionDto.setInvoiceAmount(invoiceAmount);
+            customerInteractionDto.setReceiptAmount(currentReceiptAmount);
+            amountTotal = amountTotal.add(currentDateTotal);
+            customerInteractionDto.setUnReceiptAmount(amountTotal);
+            result.add(customerInteractionDto);
+        }
+        return result;
+    }
 }
diff --git a/src/main/resources/mapper/sales/ReceiptPaymentMapper.xml b/src/main/resources/mapper/sales/ReceiptPaymentMapper.xml
index 2402490..4ca0202 100644
--- a/src/main/resources/mapper/sales/ReceiptPaymentMapper.xml
+++ b/src/main/resources/mapper/sales/ReceiptPaymentMapper.xml
@@ -188,4 +188,51 @@
         ORDER BY T1.receipt_payment_date DESC
     </select>
 
+    <select id="customerInteractions" resultType="com.ruoyi.sales.dto.CustomerInteractionDto">
+        SELECT
+            *
+        FROM
+            (
+                SELECT
+                    receipt_payment_amount AS receiptAmount,
+                    receipt_payment_date AS happenTime,
+                    0 AS type,
+                    0 AS invoiceAmount
+                FROM
+                    receipt_payment
+                WHERE
+                    invoice_ledger_id IN (
+                        SELECT
+                            id
+                        FROM
+                            invoice_ledger
+                        WHERE
+                            invoice_registration_product_id IN (
+                                SELECT
+                                    id
+                                FROM
+                                    invoice_registration_product
+                                WHERE
+                                    sales_ledger_id IN ( SELECT id FROM sales_ledger WHERE customer_id =  #{customerId} ))) UNION
+                SELECT
+                    0 AS receiptAmount,
+                    invoice_date AS happenTime,
+                    1 AS type,
+                    invoice_total AS invoiceAmount
+                FROM
+                    invoice_ledger
+                WHERE
+                    invoice_registration_product_id IN (
+                        SELECT
+                            id
+                        FROM
+                            invoice_registration_product
+                        WHERE
+                            sales_ledger_id IN ( SELECT id FROM sales_ledger WHERE customer_id = #{customerId} ))
+                  AND invoice_date IS NOT NULL
+            ) T1
+        ORDER BY
+            T1.happenTime ASC
+    </select>
+
 </mapper>
\ No newline at end of file

--
Gitblit v1.9.3