From 60acc8dd204aea9a435ae44205bae7b97feda4b3 Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期二, 16 六月 2026 14:37:49 +0800
Subject: [PATCH] fix: 客户往来及明细查询修改

---
 src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java |   49 +++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 47 insertions(+), 2 deletions(-)

diff --git a/src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java b/src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java
index 827e3a2..293566a 100644
--- a/src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java
+++ b/src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java
@@ -34,6 +34,7 @@
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.math.BigDecimal;
 import java.time.ZoneId;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -383,12 +384,56 @@
 
     @Override
     public IPage<CustomerTransactionsVo> customewTransactions(Page page, String customerName) {
-        return customerMapper.customewTransactions(page, customerName);
+        IPage<CustomerTransactionsVo> p = customerMapper.customewTransactions(page, customerName);
+        List<CustomerTransactionsVo> records = p.getRecords();
+        if (!CollectionUtils.isEmpty(records)) {
+            List<Long> customerIds = records.stream().map(CustomerTransactionsVo::getCustomerId).collect(Collectors.toList());
+            List<Map<String, Object>> shippedAmountList = customerMapper.getShippedAmountByCustomerIds(customerIds);
+            Map<Long, BigDecimal> shippedAmountMap = new HashMap<>();
+            for (Map<String, Object> map : shippedAmountList) {
+                if (map.get("outboundAmount") != null) {
+                    shippedAmountMap.put(((Number) map.get("customerId")).longValue(), new BigDecimal(String.valueOf(map.get("outboundAmount"))));
+                }
+            }
+            for (CustomerTransactionsVo vo : records) {
+                BigDecimal outboundAmount = shippedAmountMap.getOrDefault(vo.getCustomerId(), BigDecimal.ZERO);
+                vo.setShippedAmount(outboundAmount);
+                BigDecimal contractAmounts = vo.getContractAmounts() == null ? BigDecimal.ZERO : vo.getContractAmounts();
+                BigDecimal unshippedAmount = contractAmounts.subtract(outboundAmount);
+                if (unshippedAmount.compareTo(BigDecimal.ZERO) < 0) {
+                    unshippedAmount = BigDecimal.ZERO;
+                }
+                vo.setUnshippedAmount(unshippedAmount);
+            }
+        }
+        return p;
     }
 
     @Override
     public IPage<CustomerTransactionsDetailsVo> customewTransactionsDetails(Page page, Long customerId) {
-        return customerMapper.customewTransactionsDetails(page, customerId);
+        IPage<CustomerTransactionsDetailsVo> p = customerMapper.customewTransactionsDetails(page, customerId);
+        List<CustomerTransactionsDetailsVo> records = p.getRecords();
+        if (!CollectionUtils.isEmpty(records)) {
+            List<Long> salesLedgerIds = records.stream().map(CustomerTransactionsDetailsVo::getSalesLedgerId).collect(Collectors.toList());
+            List<Map<String, Object>> shippedAmountList = customerMapper.getShippedAmountBySalesLedgerIds(salesLedgerIds);
+            Map<Long, BigDecimal> shippedAmountMap = new HashMap<>();
+            for (Map<String, Object> map : shippedAmountList) {
+                if (map.get("outboundAmount") != null) {
+                    shippedAmountMap.put(((Number) map.get("salesLedgerId")).longValue(), new BigDecimal(String.valueOf(map.get("outboundAmount"))));
+                }
+            }
+            for (CustomerTransactionsDetailsVo vo : records) {
+                BigDecimal outboundAmount = shippedAmountMap.getOrDefault(vo.getSalesLedgerId(), BigDecimal.ZERO);
+                vo.setShippedAmount(outboundAmount);
+                BigDecimal contractAmount = vo.getContractAmount() == null ? BigDecimal.ZERO : vo.getContractAmount();
+                BigDecimal unshippedAmount = contractAmount.subtract(outboundAmount);
+                if (unshippedAmount.compareTo(BigDecimal.ZERO) < 0) {
+                    unshippedAmount = BigDecimal.ZERO;
+                }
+                vo.setUnshippedAmount(unshippedAmount);
+            }
+        }
+        return p;
     }
 
     /**

--
Gitblit v1.9.3