From b75da39a305c3271d5786265185ef7d47d859b23 Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期六, 20 六月 2026 16:47:25 +0800
Subject: [PATCH] fix: 发货率修改
---
src/main/java/com/ruoyi/sales/service/impl/MetricStatisticsServiceImpl.java | 56 ++++++++++++++++++++++++++++++++++++++++++--------------
1 files changed, 42 insertions(+), 14 deletions(-)
diff --git a/src/main/java/com/ruoyi/sales/service/impl/MetricStatisticsServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/MetricStatisticsServiceImpl.java
index 4cc96ac..942e089 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/MetricStatisticsServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/MetricStatisticsServiceImpl.java
@@ -34,22 +34,50 @@
public AjaxResult total() {
List<SalesLedger> salesLedgers = salesLedgerMapper.selectList(null);
- if(CollectionUtils.isEmpty(salesLedgers)) return AjaxResult.success(salesLedgers);
+ if (CollectionUtils.isEmpty(salesLedgers)) {
+ return AjaxResult.success(salesLedgers);
+ }
+
Map<String, Object> map = new HashMap<>();
- // 閿�鍞
- map.put("contractAmountTotal", salesLedgers.stream().map(SalesLedger::getContractAmount).reduce(BigDecimal.ZERO, BigDecimal::add));
- // 璁㈠崟鏁伴噺
- map.put("total", new BigDecimal(salesLedgers.size()));
- // 鍙戣揣鐜�
- List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(new LambdaQueryWrapper<SalesLedgerProduct>()
+ // 閿�鍞
+ BigDecimal contractAmountTotal = salesLedgers.stream()
+ .map(SalesLedger::getContractAmount)
+ .filter(Objects::nonNull)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+ map.put("contractAmountTotal", contractAmountTotal);
+
+ // 璁㈠崟鏁伴噺
+ int totalOrders = salesLedgers.size();
+ map.put("total", new BigDecimal(totalOrders));
+ map.put("shipRate", "0.00%");
+
+ // 鍙戣揣鐜�
+ List<SalesLedgerProduct> products = salesLedgerProductMapper.selectList(new LambdaQueryWrapper<SalesLedgerProduct>()
.eq(SalesLedgerProduct::getType, 1));
- map.put("shipRate", "0%");
- if(CollectionUtils.isEmpty(salesLedgerProducts)) return AjaxResult.success(map);
- // 鍙戣揣鏁伴噺
- long count = shippingInfoMapper.selectCount(new LambdaQueryWrapper<ShippingInfo>()
- .in(ShippingInfo::getSalesLedgerProductId, salesLedgerProducts.stream().map(SalesLedgerProduct::getId).collect(Collectors.toList()))
- .eq(ShippingInfo::getStatus,"瀹℃牳閫氳繃"));
- map.put("shipRate", String.format("%.2f", count * 100.0 / salesLedgerProducts.size()) + "%");
+ if (CollectionUtils.isEmpty(products)) {
+ return AjaxResult.success(map);
+ }
+
+ Map<Long, Long> productIdToLedgerIdMap = products.stream()
+ .filter(p -> p.getId() != null && p.getSalesLedgerId() != null)
+ .collect(Collectors.toMap(SalesLedgerProduct::getId, SalesLedgerProduct::getSalesLedgerId, (k1, k2) -> k1));
+
+ List<ShippingInfo> shippingInfos = shippingInfoMapper.selectList(new LambdaQueryWrapper<ShippingInfo>()
+ .eq(ShippingInfo::getStatus, "瀹℃牳閫氳繃"));
+
+ long shippedOrderCount = shippingInfos.stream()
+ .filter(info -> productIdToLedgerIdMap.containsKey(info.getSalesLedgerProductId()))
+ .map(info -> {
+ if (info.getSalesLedgerId() != null) {
+ return info.getSalesLedgerId();
+ }
+ return productIdToLedgerIdMap.get(info.getSalesLedgerProductId());
+ })
+ .filter(Objects::nonNull)
+ .distinct()
+ .count();
+
+ map.put("shipRate", String.format("%.2f", shippedOrderCount * 100.0 / totalOrders) + "%");
return AjaxResult.success(map);
}
--
Gitblit v1.9.3