From 3fffef8da8b40bea43ec6d0f58b6b614875def68 Mon Sep 17 00:00:00 2001
From: yuan <123@>
Date: 星期一, 22 六月 2026 17:10:18 +0800
Subject: [PATCH] feat: 指标统计增加销售数量
---
src/main/java/com/ruoyi/sales/service/impl/MetricStatisticsServiceImpl.java | 67 ++++++++++++++++++++++++++-------
1 files changed, 53 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 1ff7fa1..2ceec4e 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,57 @@
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()) + "%");
+ BigDecimal productQuantityTotal = CollectionUtils.isEmpty(products) ? BigDecimal.ZERO :
+ products.stream()
+ .map(SalesLedgerProduct::getQuantity)
+ .filter(Objects::nonNull)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+ map.put("productQuantityTotal", productQuantityTotal);
+
+ 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);
}
@@ -88,6 +123,7 @@
List<String> dateList = new ArrayList<>();
List<BigDecimal> orderCountList = new ArrayList<>();
List<BigDecimal> salesAmountList = new ArrayList<>();
+ List<BigDecimal> productQuantityList = new ArrayList<>();
List<BigDecimal> shippingRateList = new ArrayList<>();
Calendar tempCalendar = Calendar.getInstance();
@@ -108,10 +144,12 @@
if (dto != null) {
orderCountList.add(new BigDecimal(dto.getOrderCount()));
salesAmountList.add(dto.getSalesAmount() != null ? dto.getSalesAmount() : BigDecimal.ZERO);
+ productQuantityList.add(dto.getProductQuantity() != null ? dto.getProductQuantity() : BigDecimal.ZERO);
shippingRateList.add(new BigDecimal(String.valueOf(dto.getShipRate())));
} else {
orderCountList.add(BigDecimal.ZERO);
salesAmountList.add(BigDecimal.ZERO);
+ productQuantityList.add(BigDecimal.ZERO);
shippingRateList.add(BigDecimal.ZERO);
}
@@ -122,6 +160,7 @@
map.put("dateList", dateList);
map.put("orderCountList", orderCountList);
map.put("salesAmountList", salesAmountList);
+ map.put("productQuantityList", productQuantityList);
map.put("shippingRateList", shippingRateList);
return AjaxResult.success(map);
}
--
Gitblit v1.9.3