|
|
@@ -1,6 +1,7 @@
|
|
|
package com.haha.service.impl;
|
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.haha.common.constant.DeviceConstants;
|
|
|
import com.haha.common.constant.OrderConstants;
|
|
|
import com.haha.common.enums.CommonStatus;
|
|
|
@@ -49,8 +50,8 @@ public class DashboardServiceImpl implements DashboardService {
|
|
|
@Autowired
|
|
|
private ShopService shopService;
|
|
|
|
|
|
- /** 执行 COUNT + SUM 聚合查询,返回一行两列 */
|
|
|
- private Map<String, Object> aggOrders(LambdaQueryWrapper<Order> wrapper) {
|
|
|
+ /** 执行 COUNT + SUM 聚合查询,返回一行两列。需用 QueryWrapper 支持原始 SQL */
|
|
|
+ private Map<String, Object> aggOrders(QueryWrapper<Order> wrapper) {
|
|
|
wrapper.select("IFNULL(COUNT(*), 0) as cnt", "IFNULL(SUM(total_amount), 0) as sum");
|
|
|
List<Map<String, Object>> list = orderService.getBaseMapper().selectMaps(wrapper);
|
|
|
return list != null && !list.isEmpty() ? list.get(0) : Map.of("cnt", 0L, "sum", BigDecimal.ZERO);
|
|
|
@@ -66,9 +67,9 @@ public class DashboardServiceImpl implements DashboardService {
|
|
|
LocalDateTime yesterdayEnd = LocalDateTime.now().minusDays(1);
|
|
|
|
|
|
// 今日 — SQL COUNT + SUM,1 行返回
|
|
|
- Map<String, Object> todayStats = aggOrders(new LambdaQueryWrapper<Order>()
|
|
|
- .eq(Order::getPayStatus, OrderConstants.PAY_STATUS_PAID)
|
|
|
- .ge(Order::getPayTime, todayStart).le(Order::getPayTime, todayEnd));
|
|
|
+ Map<String, Object> todayStats = aggOrders(new QueryWrapper<Order>()
|
|
|
+ .eq("pay_status", OrderConstants.PAY_STATUS_PAID)
|
|
|
+ .ge("pay_time", todayStart).le("pay_time", todayEnd));
|
|
|
BigDecimal todaySales = (BigDecimal) todayStats.get("sum");
|
|
|
int todayOrderCount = ((Number) todayStats.get("cnt")).intValue();
|
|
|
|
|
|
@@ -79,9 +80,9 @@ public class DashboardServiceImpl implements DashboardService {
|
|
|
: "0.00");
|
|
|
|
|
|
// 昨日
|
|
|
- Map<String, Object> yesterdayStats = aggOrders(new LambdaQueryWrapper<Order>()
|
|
|
- .eq(Order::getPayStatus, OrderConstants.PAY_STATUS_PAID)
|
|
|
- .ge(Order::getPayTime, yesterdayStart).le(Order::getPayTime, yesterdayEnd));
|
|
|
+ Map<String, Object> yesterdayStats = aggOrders(new QueryWrapper<Order>()
|
|
|
+ .eq("pay_status", OrderConstants.PAY_STATUS_PAID)
|
|
|
+ .ge("pay_time", yesterdayStart).le("pay_time", yesterdayEnd));
|
|
|
BigDecimal yesterdaySales = (BigDecimal) yesterdayStats.get("sum");
|
|
|
int yesterdayOrderCount = ((Number) yesterdayStats.get("cnt")).intValue();
|
|
|
BigDecimal yesterdayAvgPrice = yesterdayOrderCount > 0
|
|
|
@@ -117,8 +118,8 @@ public class DashboardServiceImpl implements DashboardService {
|
|
|
.eq(Order::getPayStatus, OrderConstants.PAY_STATUS_PAID).count();
|
|
|
result.put("totalOrders", totalOrders);
|
|
|
// 总收入 — SQL SUM,1 行返回(不再加载所有历史订单)
|
|
|
- Map<String, Object> allPaidStats = aggOrders(new LambdaQueryWrapper<Order>()
|
|
|
- .eq(Order::getPayStatus, OrderConstants.PAY_STATUS_PAID));
|
|
|
+ Map<String, Object> allPaidStats = aggOrders(new QueryWrapper<Order>()
|
|
|
+ .eq("pay_status", OrderConstants.PAY_STATUS_PAID));
|
|
|
result.put("totalRevenue", ((BigDecimal) allPaidStats.get("sum")).setScale(2, RoundingMode.HALF_UP).toString());
|
|
|
result.put("todayRevenue", todaySales.setScale(2, RoundingMode.HALF_UP).toString());
|
|
|
result.put("totalDevices", totalDevices);
|
|
|
@@ -130,9 +131,9 @@ public class DashboardServiceImpl implements DashboardService {
|
|
|
result.put("activeShops", activeShops);
|
|
|
|
|
|
LocalDateTime monthStart = LocalDateTime.of(LocalDate.now().withDayOfMonth(1), LocalTime.MIN);
|
|
|
- Map<String, Object> monthStats = aggOrders(new LambdaQueryWrapper<Order>()
|
|
|
- .eq(Order::getPayStatus, OrderConstants.PAY_STATUS_PAID)
|
|
|
- .ge(Order::getPayTime, monthStart).le(Order::getPayTime, LocalDateTime.now()));
|
|
|
+ Map<String, Object> monthStats = aggOrders(new QueryWrapper<Order>()
|
|
|
+ .eq("pay_status", OrderConstants.PAY_STATUS_PAID)
|
|
|
+ .ge("pay_time", monthStart).le("pay_time", LocalDateTime.now()));
|
|
|
result.put("monthSales", ((BigDecimal) monthStats.get("sum")).setScale(2, RoundingMode.HALF_UP).toString());
|
|
|
result.put("monthOrders", ((Number) monthStats.get("cnt")).intValue());
|
|
|
|