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/resources/mapper/basic/CustomerMapper.xml | 70 ++++++++++++----------
src/main/java/com/ruoyi/basic/mapper/CustomerMapper.java | 55 ++----------------
src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java | 49 +++++++++++++++
3 files changed, 91 insertions(+), 83 deletions(-)
diff --git a/src/main/java/com/ruoyi/basic/mapper/CustomerMapper.java b/src/main/java/com/ruoyi/basic/mapper/CustomerMapper.java
index f871b91..d29ac3b 100644
--- a/src/main/java/com/ruoyi/basic/mapper/CustomerMapper.java
+++ b/src/main/java/com/ruoyi/basic/mapper/CustomerMapper.java
@@ -12,6 +12,7 @@
import org.apache.ibatis.annotations.Param;
import java.util.List;
+import java.util.Map;
/**
* 瀹㈡埛妗fMapper鎺ュ彛
@@ -20,55 +21,7 @@
* @date 2025-05-07
*/
@Mapper
-public interface CustomerMapper extends BaseMapper<Customer>
-{
- /**
- * 鏌ヨ瀹㈡埛妗f
- *
- * @param id 瀹㈡埛妗f涓婚敭
- * @return 瀹㈡埛妗f
- */
- Customer selectCustomerById(Long id);
-
- /**
- * 鏌ヨ瀹㈡埛妗f鍒楄〃
- *
- * @param customer 瀹㈡埛妗f
- * @return 瀹㈡埛妗f闆嗗悎
- */
- List<Customer> selectCustomerList(Customer customer);
-
- /**
- * 鏂板瀹㈡埛妗f
- *
- * @param customer 瀹㈡埛妗f
- * @return 缁撴灉
- */
- int insertCustomer(Customer customer);
-
- /**
- * 淇敼瀹㈡埛妗f
- *
- * @param customer 瀹㈡埛妗f
- * @return 缁撴灉
- */
- int updateCustomer(Customer customer);
-
- /**
- * 鍒犻櫎瀹㈡埛妗f
- *
- * @param id 瀹㈡埛妗f涓婚敭
- * @return 缁撴灉
- */
- int deleteCustomerById(Long id);
-
- /**
- * 鎵归噺鍒犻櫎瀹㈡埛妗f
- *
- * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎
- * @return 缁撴灉
- */
- int deleteCustomerByIds(Long[] ids);
+public interface CustomerMapper extends BaseMapper<Customer> {
IPage<CustomerVo> listPage(Page<CustomerDto> page, @Param("c") CustomerDto customer, @Param("loginUserId") Long loginUserId);
@@ -77,4 +30,8 @@
IPage<CustomerTransactionsVo> customewTransactions(Page page, @Param("customerName") String customerName);
IPage<CustomerTransactionsDetailsVo> customewTransactionsDetails(Page page, @Param("customerId") Long customerId);
+
+ List<Map<String, Object>> getShippedAmountByCustomerIds(@Param("customerIds") List<Long> customerIds);
+
+ List<Map<String, Object>> getShippedAmountBySalesLedgerIds(@Param("salesLedgerIds") List<Long> salesLedgerIds);
}
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;
}
/**
diff --git a/src/main/resources/mapper/basic/CustomerMapper.xml b/src/main/resources/mapper/basic/CustomerMapper.xml
index e9683da..46b7bf7 100644
--- a/src/main/resources/mapper/basic/CustomerMapper.xml
+++ b/src/main/resources/mapper/basic/CustomerMapper.xml
@@ -112,23 +112,8 @@
<select id="customewTransactions" resultType="com.ruoyi.sales.vo.CustomerTransactionsVo">
select T1.customer_id,
c.customer_name,
- T1.contractAmounts,
- IFNULL(T3.outboundAmount, 0) AS shippedAmount,
- GREATEST(T1.contractAmounts - IFNULL(T3.outboundAmount, 0), 0) AS unshippedAmount
+ T1.contractAmounts
from (select customer_id, sum(contract_amount) as contractAmounts from sales_ledger group by customer_id) T1
- left join (
- SELECT
- sl.customer_id,
- sum(sor.stock_out_num * slp.tax_inclusive_unit_price) as outboundAmount
- FROM stock_out_record sor
- LEFT join shipping_info s on sor.record_id = s.id
- LEFT JOIN sales_ledger sl ON s.sales_ledger_id = sl.id
- LEFT JOIN sales_ledger_product slp ON s.sales_ledger_product_id = slp.id
- WHERE sor.record_type='13'
- and sor.approval_status=1
- and slp.type = 1
- group by sl.customer_id
- ) T3 on T3.customer_id=T1.customer_id
left join customer c on T1.customer_id = c.id
<where>
<if test="customerName!=null and customerName!=''">
@@ -142,24 +127,45 @@
select sl.id salesLedgerId,
sl.sales_contract_no,
sl.execution_date,
- sl.contract_amount,
- IFNULL(T2.outboundAmount, 0) AS shippedAmount,
- GREATEST(sl.contract_amount - IFNULL(T2.outboundAmount, 0), 0) AS unshippedAmount
+ sl.contract_amount
from sales_ledger sl
- left join (
- SELECT
- sl.id,
- sum(sor.stock_out_num * slp.tax_inclusive_unit_price) as outboundAmount
- FROM stock_out_record sor
- left join shipping_info s on sor.record_id = s.id
- LEFT JOIN sales_ledger sl ON s.sales_ledger_id = sl.id
- LEFT JOIN sales_ledger_product slp ON s.sales_ledger_product_id = slp.id
- WHERE sor.record_type='13'
- and sor.approval_status=1
- and slp.type = 1
- group by sl.id
- )T2 on T2.id = sl.id
where sl.customer_id = #{customerId}
order by sl.execution_date
</select>
+
+ <select id="getShippedAmountByCustomerIds" resultType="java.util.Map">
+ SELECT
+ sl.customer_id as customerId,
+ sum(sor.stock_out_num * slp.tax_inclusive_unit_price) as outboundAmount
+ FROM stock_out_record sor
+ LEFT join shipping_info s on sor.record_id = s.id
+ LEFT JOIN sales_ledger sl ON s.sales_ledger_id = sl.id
+ LEFT JOIN sales_ledger_product slp ON s.sales_ledger_product_id = slp.id
+ WHERE sor.record_type='13'
+ and sor.approval_status=1
+ and slp.type = 1
+ and sl.customer_id IN
+ <foreach collection="customerIds" item="customerId" open="(" separator="," close=")">
+ #{customerId}
+ </foreach>
+ group by sl.customer_id
+ </select>
+
+ <select id="getShippedAmountBySalesLedgerIds" resultType="java.util.Map">
+ SELECT
+ sl.id as salesLedgerId,
+ sum(sor.stock_out_num * slp.tax_inclusive_unit_price) as outboundAmount
+ FROM stock_out_record sor
+ LEFT join shipping_info s on sor.record_id = s.id
+ LEFT JOIN sales_ledger sl ON s.sales_ledger_id = sl.id
+ LEFT JOIN sales_ledger_product slp ON s.sales_ledger_product_id = slp.id
+ WHERE sor.record_type='13'
+ and sor.approval_status=1
+ and slp.type = 1
+ and sl.id IN
+ <foreach collection="salesLedgerIds" item="id" open="(" separator="," close=")">
+ #{id}
+ </foreach>
+ group by sl.id
+ </select>
</mapper>
--
Gitblit v1.9.3