|
|
@@ -66,32 +66,30 @@ public class StatisticsServiceImpl implements StatisticsService {
|
|
|
orderWrapper.eq(Order::getShopId, queryDTO.getShopId());
|
|
|
}
|
|
|
|
|
|
+ // 只选需要的列,避免 SELECT * 全量加载
|
|
|
+ orderWrapper.select(Order::getTotalAmount, Order::getUserId);
|
|
|
List<Order> orders = orderMapper.selectList(orderWrapper);
|
|
|
-
|
|
|
+
|
|
|
BigDecimal totalSales = orders.stream()
|
|
|
.map(o -> o.getTotalAmount() != null ? o.getTotalAmount() : BigDecimal.ZERO)
|
|
|
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
overview.setTotalSales(totalSales.setScale(2, RoundingMode.HALF_UP));
|
|
|
-
|
|
|
overview.setTotalOrders(orders.size());
|
|
|
-
|
|
|
+
|
|
|
Set<Long> userIds = orders.stream()
|
|
|
- .map(Order::getUserId)
|
|
|
- .filter(Objects::nonNull)
|
|
|
- .collect(Collectors.toSet());
|
|
|
+ .map(Order::getUserId).filter(Objects::nonNull).collect(Collectors.toSet());
|
|
|
overview.setTotalUsers(userIds.size());
|
|
|
-
|
|
|
+
|
|
|
long totalDevices = deviceMapper.selectCount(null);
|
|
|
long onlineDevices = deviceMapper.selectCount(
|
|
|
- new LambdaQueryWrapper<Device>().eq(Device::getStatus, DeviceConstants.STATUS_ONLINE)
|
|
|
- );
|
|
|
+ new LambdaQueryWrapper<Device>().eq(Device::getStatus, DeviceConstants.STATUS_ONLINE));
|
|
|
overview.setTotalDevices((int) totalDevices);
|
|
|
overview.setOnlineDevices((int) onlineDevices);
|
|
|
-
|
|
|
+
|
|
|
long totalShops = shopMapper.selectCount(null);
|
|
|
overview.setTotalShops((int) totalShops);
|
|
|
-
|
|
|
- BigDecimal avgOrderAmount = orders.size() > 0
|
|
|
+
|
|
|
+ BigDecimal avgOrderAmount = orders.size() > 0
|
|
|
? totalSales.divide(BigDecimal.valueOf(orders.size()), 2, RoundingMode.HALF_UP)
|
|
|
: BigDecimal.ZERO;
|
|
|
overview.setAvgOrderAmount(avgOrderAmount);
|
|
|
@@ -128,12 +126,15 @@ public class StatisticsServiceImpl implements StatisticsService {
|
|
|
wrapper.eq(OrderItem::getShopId, queryDTO.getShopId());
|
|
|
}
|
|
|
|
|
|
+ // 只选需要的列
|
|
|
+ wrapper.select(OrderItem::getProductType, OrderItem::getQuantity, OrderItem::getTotalAmount,
|
|
|
+ OrderItem::getCostPrice, OrderItem::getOrderId);
|
|
|
List<OrderItem> items = orderItemMapper.selectList(wrapper);
|
|
|
-
|
|
|
+
|
|
|
Map<String, List<OrderItem>> categoryMap = items.stream()
|
|
|
.filter(item -> item.getProductType() != null)
|
|
|
.collect(Collectors.groupingBy(OrderItem::getProductType));
|
|
|
-
|
|
|
+
|
|
|
BigDecimal totalSales = items.stream()
|
|
|
.map(i -> i.getTotalAmount() != null ? i.getTotalAmount() : BigDecimal.ZERO)
|
|
|
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
@@ -202,8 +203,9 @@ public class StatisticsServiceImpl implements StatisticsService {
|
|
|
wrapper.eq(OrderItem::getProductType, queryDTO.getCategory());
|
|
|
}
|
|
|
|
|
|
+ wrapper.select(OrderItem::getProductType, OrderItem::getTotalAmount, OrderItem::getPayTime);
|
|
|
List<OrderItem> items = orderItemMapper.selectList(wrapper);
|
|
|
-
|
|
|
+
|
|
|
Map<String, Map<String, BigDecimal>> categoryDateAmount = new HashMap<>();
|
|
|
for (OrderItem item : items) {
|
|
|
String date = item.getPayTime().toLocalDate().toString();
|
|
|
@@ -563,6 +565,7 @@ public class StatisticsServiceImpl implements StatisticsService {
|
|
|
.ge(Order::getPayTime, startDate.atStartOfDay())
|
|
|
.le(Order::getPayTime, endDate.atTime(LocalTime.MAX));
|
|
|
|
|
|
+ wrapper.select(Order::getTotalAmount, Order::getUserId, Order::getPayTime, Order::getShopId, Order::getDeviceId);
|
|
|
List<Order> orders = orderMapper.selectList(wrapper);
|
|
|
|
|
|
Map<String, BigDecimal> dateAmount = orders.stream()
|
|
|
@@ -771,6 +774,7 @@ public class StatisticsServiceImpl implements StatisticsService {
|
|
|
.ge(Order::getPayTime, startDate.atStartOfDay())
|
|
|
.le(Order::getPayTime, endDate.atTime(LocalTime.MAX));
|
|
|
|
|
|
+ wrapper.select(Order::getTotalAmount, Order::getUserId, Order::getPayTime, Order::getShopId, Order::getDeviceId);
|
|
|
List<Order> orders = orderMapper.selectList(wrapper);
|
|
|
|
|
|
Map<String, BigDecimal> dateAmount = orders.stream()
|