Просмотр исходного кода

fix: aggOrders 改用 QueryWrapper 支持原始 SQL 聚合字符串

- LambdaQueryWrapper.select() 不接受 String,必须用 QueryWrapper
- eq/ge/le 改用字符串列名 pay_status/pay_time

Co-Authored-By: Claude <noreply@anthropic.com>
skyline 1 день назад
Родитель
Сommit
b7f133a553

+ 14 - 13
haha-service/src/main/java/com/haha/service/impl/DashboardServiceImpl.java

@@ -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());