فهرست منبع

站点数据统计

skyline 1 سال پیش
والد
کامیت
d8bcff4bbd

+ 66 - 12
car-wash-admin/src/main/java/com/kym/admin/jobs/StatJob.java

@@ -1,14 +1,15 @@
 package com.kym.admin.jobs;
 
+import cn.hutool.core.date.DateUtil;
 import com.kym.entity.DailyStat;
-import com.kym.service.DailyStatService;
-import com.kym.service.UserService;
-import com.kym.service.WashOrderService;
+import com.kym.entity.MonthStat;
+import com.kym.service.*;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
 import java.time.LocalDate;
+import java.time.LocalDateTime;
 import java.util.ArrayList;
 
 /**
@@ -24,10 +25,16 @@ public class StatJob {
 
     private final DailyStatService dailyStatService;
 
-    public StatJob(UserService userService, WashOrderService washOrderService, DailyStatService dailyStatService) {
+    private final MonthStatService monthStatService;
+
+    private final SplitRecordService splitRecordService;
+
+    public StatJob(UserService userService, WashOrderService washOrderService, DailyStatService dailyStatService, MonthStatService monthStatService, SplitRecordService splitRecordService) {
         this.userService = userService;
         this.washOrderService = washOrderService;
         this.dailyStatService = dailyStatService;
+        this.monthStatService = monthStatService;
+        this.splitRecordService = splitRecordService;
     }
 
     /**
@@ -36,25 +43,72 @@ public class StatJob {
      */
     @Scheduled(cron = "0 30 0 * * ?")
     public void generateDailyStat() {
+        log.info("执行站点日统计定时任务-开始");
         LocalDate yesterday = LocalDate.now().minusDays(1);
 
-        // todo 总收入,跨店收入,跨店支出等(从分账表来)
-        var amountMap = washOrderService.sumMonthAmount(yesterday);
-        var registerMap = userService.countByDailyRegister(yesterday);
-        var ordersCount = washOrderService.countOrdersCountByDate(yesterday);
+        // 各站点总订单金额,注册会员人数,订单数量
+        var amountMap = washOrderService.sumAmountByDate(yesterday);
+        var registerMap = userService.countDailyRegister(yesterday);
+        var ordersCountMap = washOrderService.countDailyOrders(yesterday);
 
-        var statList = new ArrayList<DailyStat>();
+        // 各站点总收入
+        var incomeMap = splitRecordService.sumDailyIncome(yesterday);
+        // 各站点跨店收入
+        var crossIncomeMap = splitRecordService.sumDailyIncome(yesterday, Boolean.TRUE);
+        // 各站点跨店支出
+        var expendMap = splitRecordService.sumDailyExpend(yesterday);
 
+        var statList = new ArrayList<DailyStat>();
         amountMap.forEach((k, v) -> {
             DailyStat stat = new DailyStat();
-            stat.setStatDate(yesterday);
+            stat.setStatDate(DateUtil.format(LocalDateTime.now().minusDays(1), "yyyy-MM-dd"));
+            stat.setStationId(k);
+            stat.setConsumption(v);
+            stat.setRegistrations(registerMap.getOrDefault(k, 0));
+            stat.setOrdersCount(ordersCountMap.getOrDefault(k, 0));
+            stat.setTotalIncome(incomeMap.getOrDefault(k, 0));
+            stat.setCrossIncome(crossIncomeMap.getOrDefault(k, 0));
+            stat.setCrossExpend(expendMap.getOrDefault(k, 0));
+            statList.add(stat);
+        });
+        dailyStatService.replaceBatch(statList);
+        log.info("执行站点日统计定时任务-结束");
+    }
+
+
+    /**
+     * 月统计,每月5日天下午15:00启动,统计上月数据
+     */
+    @Scheduled(cron = "0 0 15 5 * ?")
+    private void generateMonthStat() {
+        log.info("执行站点月统计定时任务-开始");
+        var statMonth = LocalDate.now().minusMonths(1);
+        var amountMap = washOrderService.sumMonthAmount(statMonth);
+        var registerMap = userService.countMonthRegister(statMonth);
+        var ordersCountMap = washOrderService.countMonthOrders(statMonth);
+
+        // 各站点总收入
+        var incomeMap = splitRecordService.sumMonthIncome(statMonth);
+        // 各站点跨店收入
+        var crossIncomeMap = splitRecordService.sumMonthIncome(statMonth, Boolean.TRUE);
+        // 各站点跨店支出
+        var expendMap = splitRecordService.sumMonthExpend(statMonth);
+
+        var statList = new ArrayList<MonthStat>();
+        amountMap.forEach((k, v) -> {
+            MonthStat stat = new MonthStat();
+            stat.setStatMonth(DateUtil.format(LocalDateTime.now().minusMonths(1), "yyyy-MM"));
             stat.setStationId(k);
             stat.setConsumption(v);
             stat.setRegistrations(registerMap.getOrDefault(k, 0));
-            stat.setOrdersCount(ordersCount.getOrDefault(k, 0));
+            stat.setOrdersCount(ordersCountMap.getOrDefault(k, 0));
+            stat.setTotalIncome(incomeMap.getOrDefault(k, 0));
+            stat.setCrossIncome(crossIncomeMap.getOrDefault(k, 0));
+            stat.setCrossExpend(expendMap.getOrDefault(k, 0));
             statList.add(stat);
         });
-        dailyStatService.saveBatch(statList);
+        monthStatService.replaceBatch(statList);
+        log.info("执行站点月统计定时任务-结束");
     }
 
 }

+ 1 - 1
car-wash-entity/src/main/java/com/kym/entity/DailyStat.java

@@ -24,7 +24,7 @@ public class DailyStat extends BaseEntity {
     /**
      * 统计日期
      */
-    private LocalDate statDate;
+    private String statDate;
 
     /**
      * 站点id

+ 63 - 0
car-wash-entity/src/main/java/com/kym/entity/MonthStat.java

@@ -0,0 +1,63 @@
+package com.kym.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.kym.entity.BaseEntity;
+import java.io.Serializable;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 日统计表
+ * </p>
+ *
+ * @author skyline
+ * @since 2025-04-03
+ */
+@Getter
+@Setter
+@TableName("t_month_stat")
+public class MonthStat extends BaseEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 统计年月2025-01
+     */
+    private String statMonth;
+
+    /**
+     * 站点ID
+     */
+    private String stationId;
+
+    /**
+     * 总收入(分)
+     */
+    private Integer totalIncome;
+
+    /**
+     * 跨店收入(分)
+     */
+    private Integer crossIncome;
+
+    /**
+     * 跨店支出(分)
+     */
+    private Integer crossExpend;
+
+    /**
+     * 本店消费金额(分)
+     */
+    private Integer consumption;
+
+    /**
+     * 注册用户数量
+     */
+    private Integer registrations;
+
+    /**
+     * 订单数量
+     */
+    private Integer ordersCount;
+}

+ 16 - 0
car-wash-mapper/src/main/java/com/kym/mapper/MonthStatMapper.java

@@ -0,0 +1,16 @@
+package com.kym.mapper;
+
+import com.kym.entity.MonthStat;
+import com.kym.mapper.mybatisplus.MyBaseMapper;
+
+/**
+ * <p>
+ * 日统计表 Mapper 接口
+ * </p>
+ *
+ * @author skyline
+ * @since 2025-04-03
+ */
+public interface MonthStatMapper extends MyBaseMapper<MonthStat> {
+
+}

+ 22 - 0
car-wash-mapper/src/main/resources/mappers/MonthStatMapper.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.kym.mapper.MonthStatMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.kym.entity.MonthStat">
+        <result column="stat_month" property="statMonth" />
+        <result column="station_id" property="stationId" />
+        <result column="total_income" property="totalIncome" />
+        <result column="cross_income" property="crossIncome" />
+        <result column="cross_expend" property="crossExpend" />
+        <result column="consumption" property="consumption" />
+        <result column="registrations" property="registrations" />
+        <result column="orders_count" property="ordersCount" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        stat_month, station_id, total_income, cross_income, cross_expend, consumption, registrations, orders_count
+    </sql>
+
+</mapper>

+ 18 - 0
car-wash-miniapp/src/main/java/com/kym/admin/controller/MonthStatController.java

@@ -0,0 +1,18 @@
+package com.kym.controller;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 日统计表 前端控制器
+ * </p>
+ *
+ * @author skyline
+ * @since 2025-04-03
+ */
+@RestController
+@RequestMapping("/month-stat")
+public class MonthStatController {
+
+}

+ 16 - 0
car-wash-service/src/main/java/com/kym/service/MonthStatService.java

@@ -0,0 +1,16 @@
+package com.kym.service;
+
+import com.kym.entity.MonthStat;
+import com.kym.service.mybatisplus.MyBaseService;
+
+/**
+ * <p>
+ * 日统计表 服务类
+ * </p>
+ *
+ * @author skyline
+ * @since 2025-04-03
+ */
+public interface MonthStatService extends MyBaseService<MonthStat> {
+
+}

+ 11 - 0
car-wash-service/src/main/java/com/kym/service/SplitRecordService.java

@@ -6,6 +6,9 @@ import com.kym.entity.queryParams.SplitRecordQueryParams;
 import com.kym.entity.vo.SplitRecordVo;
 import com.kym.service.mybatisplus.MyBaseService;
 
+import java.time.LocalDate;
+import java.util.Map;
+
 /**
  * <p>
  * 平台分账记录表 服务类
@@ -16,4 +19,12 @@ import com.kym.service.mybatisplus.MyBaseService;
  */
 public interface SplitRecordService extends MyBaseService<SplitRecord> {
     PageBean<SplitRecordVo> listSplitRecords(SplitRecordQueryParams params);
+
+    Map<String, Integer> sumDailyIncome(LocalDate yesterday, Boolean... isCross);
+
+    Map<String, Integer> sumMonthIncome(LocalDate statDay, Boolean... isCross);
+
+    Map<String, Integer> sumDailyExpend(LocalDate statDay, Boolean... isCross);
+
+    Map<String, Integer> sumMonthExpend(LocalDate statDay, Boolean... isCross);
 }

+ 0 - 4
car-wash-service/src/main/java/com/kym/service/StatService.java

@@ -15,13 +15,9 @@ public interface StatService {
     // 实时指标
     Map<String, Integer> getTodayConsumption();
 
-    Map<String, Integer> getTodayRegistrations();
-
     // 缓存指标(5分钟刷新)
     Map<String, Integer> getMonthConsumption();
 
-    Integer getMonthRegistrations();
-
     // 历史指标(每日预计算)
     Integer getTotalConsumption();
 

+ 2 - 2
car-wash-service/src/main/java/com/kym/service/UserService.java

@@ -32,7 +32,7 @@ public interface UserService extends MPJBaseService<User> {
 
     PageBean<CustomUserVo> listCustomUser(CommonQueryParam params);
 
-    Map<String, Integer> countByDailyRegister(LocalDate statDay, String... stationId);
+    Map<String, Integer> countDailyRegister(LocalDate statDay, String... stationId);
 
-    Integer countMonthRegister(LocalDate statDay);
+    Map<String, Integer> countMonthRegister(LocalDate statDay);
 }

+ 2 - 2
car-wash-service/src/main/java/com/kym/service/WashOrderService.java

@@ -40,9 +40,9 @@ public interface WashOrderService extends MyBaseService<WashOrder> {
 
     Map<String, Integer> sumMonthAmount(LocalDate statDay);
 
-    Map<String, Integer> countOrdersCountByDate(LocalDate statDay);
+    Map<String, Integer> countDailyOrders(LocalDate statDay);
 
-    Map<String, Integer> countMonthOrdersCount(LocalDate statDay);
+    Map<String, Integer> countMonthOrders(LocalDate statDay);
 
     WashOrder getOrderInProgressByUserId(long userId);
 

+ 20 - 0
car-wash-service/src/main/java/com/kym/service/impl/MonthStatServiceImpl.java

@@ -0,0 +1,20 @@
+package com.kym.service.impl;
+
+import com.kym.entity.MonthStat;
+import com.kym.mapper.MonthStatMapper;
+import com.kym.service.MonthStatService;
+import com.kym.service.mybatisplus.MyBaseServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 日统计表 服务实现类
+ * </p>
+ *
+ * @author skyline
+ * @since 2025-04-03
+ */
+@Service
+public class MonthStatServiceImpl extends MyBaseServiceImpl<MonthStatMapper, MonthStat> implements MonthStatService {
+
+}

+ 107 - 0
car-wash-service/src/main/java/com/kym/service/impl/SplitRecordServiceImpl.java

@@ -1,6 +1,7 @@
 package com.kym.service.impl;
 
 import cn.dev33.satoken.stp.StpUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.github.pagehelper.PageHelper;
 import com.kym.common.utils.CommUtil;
 import com.kym.entity.SplitRecord;
@@ -14,6 +15,14 @@ import com.kym.service.mybatisplus.MyBaseServiceImpl;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.temporal.TemporalAdjusters;
+import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
 /**
  * <p>
  * 平台分账记录表 服务实现类
@@ -52,4 +61,102 @@ public class SplitRecordServiceImpl extends MyBaseServiceImpl<SplitRecordMapper,
         }).toList();
         return new PageBean<>(voList);
     }
+
+    /**
+     * 站点日收入
+     *
+     * @param statDay 统计日期
+     * @return 站点ID到金额的映射
+     */
+    @Override
+    public Map<String, Integer> sumDailyIncome(LocalDate statDay, Boolean... isCross) {
+        return sumStat(Boolean.TRUE, statDay, SplitRecord::getToStationId, isCross);
+    }
+
+    /**
+     * 站点日支出
+     *
+     * @param statDay 统计日期
+     * @return 站点ID到金额的映射
+     */
+    @Override
+    public Map<String, Integer> sumDailyExpend(LocalDate statDay, Boolean... isCross) {
+        return sumStat(Boolean.TRUE, statDay, SplitRecord::getFromStationId, isCross);
+    }
+
+    /**
+     * 站点月收入
+     *
+     * @param statDay 统计日期
+     * @return 站点ID到金额的映射
+     */
+    @Override
+    public Map<String, Integer> sumMonthIncome(LocalDate statDay, Boolean... isCross) {
+        return sumStat(Boolean.FALSE, statDay, SplitRecord::getToStationId, isCross);
+    }
+
+    /**
+     * 站点月支出
+     *
+     * @param statDay 统计日期
+     * @return 站点ID到金额的映射
+     */
+    @Override
+    public Map<String, Integer> sumMonthExpend(LocalDate statDay, Boolean... isCross) {
+        return sumStat(Boolean.FALSE, statDay, SplitRecord::getFromStationId, isCross);
+    }
+
+    /**
+     * 公共统计方法
+     *
+     * @param statDay    统计日期
+     * @param classifier 分组依据函数
+     * @return 统计结果映射
+     */
+    public Map<String, Integer> sumStat(Boolean isDaily, LocalDate statDay, Function<SplitRecord, String> classifier, Boolean... isCross) {
+        LocalDateTime startTime = isDaily ? getStartOfDay(statDay) : getStartOfMonth(statDay);
+        LocalDateTime endTime = isDaily ? getEndOfDay(statDay) : getEndOfMonth(statDay);
+        LambdaQueryWrapper<SplitRecord> wrapper = new LambdaQueryWrapper<>();
+        wrapper.ge(SplitRecord::getCreateTime, startTime);
+        wrapper.lt(SplitRecord::getCreateTime, endTime);
+        if (isCross.length > 0 && isCross[0]) {
+            wrapper.apply("from_station_id != to_station_id");
+        }
+        return list(wrapper)
+                .stream()
+                .collect(Collectors.toMap(
+                        classifier,
+                        SplitRecord::getAmount,
+                        Integer::sum
+                ));
+    }
+
+    /**
+     * 获取日期起始时间
+     */
+    private LocalDateTime getStartOfDay(LocalDate date) {
+        return date.atStartOfDay();
+    }
+
+    /**
+     * 获取日期结束时间
+     */
+    private LocalDateTime getEndOfDay(LocalDate date) {
+        return date.atTime(LocalTime.MAX);
+    }
+
+    /**
+     * 获取月份起始时间
+     */
+    private LocalDateTime getStartOfMonth(LocalDate date) {
+        return date.with(TemporalAdjusters.firstDayOfMonth()).atStartOfDay();
+    }
+
+    /**
+     * 获取月份结束时间
+     */
+    private LocalDateTime getEndOfMonth(LocalDate date) {
+        return date.with(TemporalAdjusters.lastDayOfMonth()).atTime(LocalTime.MAX);
+    }
+
 }

+ 1 - 11
car-wash-service/src/main/java/com/kym/service/impl/StatServiceImpl.java

@@ -44,21 +44,11 @@ public class StatServiceImpl implements StatService {
         return washOrderService.sumAmountByDate(LocalDate.now());
     }
 
-    @Override
-    public Map<String, Integer> getTodayRegistrations() {
-        return userService.countByDailyRegister(LocalDate.now());
-    }
-
     @Override
     public Map<String, Integer> getMonthConsumption() {
         return washOrderService.sumMonthAmount(LocalDate.now());
     }
 
-    @Override
-    public Integer getMonthRegistrations() {
-        return userService.countMonthRegister(LocalDate.now());
-    }
-
     @Override
     public Integer getTotalConsumption() {
         return null;
@@ -130,7 +120,7 @@ public class StatServiceImpl implements StatService {
     @Override
     public DashboardVo dashboard(String stationId) {
         // 站点今日注册人数
-        var todayRegistrations = userService.countByDailyRegister(LocalDate.now(), stationId);
+        var todayRegistrations = userService.countDailyRegister(LocalDate.now(), stationId);
 
         // 站点分账-入账数据
         var todayIncome = (Integer) splitRecordService.lambdaQuery()

+ 9 - 9
car-wash-service/src/main/java/com/kym/service/impl/UserServiceImpl.java

@@ -260,7 +260,7 @@ public class UserServiceImpl extends MPJBaseServiceImpl<UserMapper, User> implem
         }
         List<Long> userIds = lambdaQuery()
                 .eq(CommUtil.isNotEmptyAndNull(params.getMobilePhone()), User::getMobilePhone, params.getMobilePhone())
-                .eq(CommUtil.isNotEmptyAndNull(params.getStationId()),User::getStationId, params.getStationId())
+                .eq(CommUtil.isNotEmptyAndNull(params.getStationId()), User::getStationId, params.getStationId())
                 .eq(CommUtil.isNotEmptyAndNull(params.getStatus()), User::getStatus, params.getStatus())
                 .list().stream().map(User::getId)
                 .toList();
@@ -301,11 +301,11 @@ public class UserServiceImpl extends MPJBaseServiceImpl<UserMapper, User> implem
      * @return
      */
     @Override
-    public Map<String, Integer> countByDailyRegister(LocalDate statDay, String... stationId) {
+    public Map<String, Integer> countDailyRegister(LocalDate statDay, String... stationId) {
         LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
         wrapper.ge(User::getCreateTime, LocalDateTime.of(statDay, LocalTime.MIN));
-        wrapper.gt(User::getCreateTime, LocalDateTime.of(statDay, LocalTime.MAX));
-        if(CommUtil.isNotEmptyAndNull(stationId)){
+        wrapper.lt(User::getCreateTime, LocalDateTime.of(statDay, LocalTime.MAX));
+        if (stationId.length > 0) {
             wrapper.in(User::getStationId, Arrays.asList(stationId));
         }
         // 按照站点分组统计订单数量
@@ -319,13 +319,13 @@ public class UserServiceImpl extends MPJBaseServiceImpl<UserMapper, User> implem
      * @return
      */
     @Override
-    public Integer countMonthRegister(LocalDate statDay) {
-        var startTime = statDay.with(TemporalAdjusters.firstDayOfMonth()).with(LocalTime.MIN);
-        var endTime = statDay.with(TemporalAdjusters.lastDayOfMonth()).with(LocalTime.MAX);
+    public Map<String, Integer> countMonthRegister(LocalDate statDay) {
+        var startTime = statDay.with(TemporalAdjusters.firstDayOfMonth()).atTime(LocalTime.MIN);
+        var endTime = statDay.with(TemporalAdjusters.lastDayOfMonth()).atTime(LocalTime.MAX);
         LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
         wrapper.ge(User::getCreateTime, startTime);
-        wrapper.gt(User::getCreateTime, endTime);
-        return (int) count(wrapper);
+        wrapper.lt(User::getCreateTime, endTime);
+        return list(wrapper).stream().collect(Collectors.groupingBy(User::getStationId, Collectors.summingInt(o -> 1)));
     }
 
 

+ 16 - 15
car-wash-service/src/main/java/com/kym/service/impl/WashOrderServiceImpl.java

@@ -159,13 +159,13 @@ public class WashOrderServiceImpl extends MyBaseServiceImpl<WashOrderMapper, Was
                 .eq(WashOrder::getUserId, StpUtil.getLoginIdAsLong())
                 .orderByDesc(WashOrder::getId)
                 .list();
-        PageInfo<WashOrder> pages =new PageInfo<>(res);
+        PageInfo<WashOrder> pages = new PageInfo<>(res);
         var voList = pages.getList().stream().map(order -> {
             var vo = new WashOrderVo();
             BeanUtils.copyProperties(order, vo);
             return vo;
         }).toList();
-        PageBean<WashOrderVo> bean= new PageBean<>(voList);
+        PageBean<WashOrderVo> bean = new PageBean<>(voList);
         bean.setPages(pages.getPages());
         bean.setPageNum(pages.getPageNum());
         bean.setPageSize(pages.getPageSize());
@@ -201,7 +201,7 @@ public class WashOrderServiceImpl extends MyBaseServiceImpl<WashOrderMapper, Was
     }
 
     /**
-     * 统计指定日期消费金额
+     * 统计指定日期各站点消费金额
      *
      * @param statDay
      * @return
@@ -209,7 +209,7 @@ public class WashOrderServiceImpl extends MyBaseServiceImpl<WashOrderMapper, Was
     @Override
     public Map<String, Integer> sumAmountByDate(LocalDate statDay) {
         LambdaQueryWrapper<WashOrder> wrapper = new LambdaQueryWrapper<>();
-        wrapper.select(WashOrder::getAmount);
+        wrapper.select(WashOrder::getAmount, WashOrder::getStationId);
         wrapper.ge(WashOrder::getStartTime, LocalDateTime.of(statDay, LocalTime.MIN));
         wrapper.gt(WashOrder::getStartTime, LocalDateTime.of(statDay, LocalTime.MAX));
         var list = list(wrapper);
@@ -218,19 +218,19 @@ public class WashOrderServiceImpl extends MyBaseServiceImpl<WashOrderMapper, Was
     }
 
     /**
-     * 统计指定日期当月总消费金额
+     * 统计指定日期当月各站点总消费金额
      *
      * @param statDay
      * @return
      */
     @Override
     public Map<String, Integer> sumMonthAmount(LocalDate statDay) {
-        var startTime = statDay.with(TemporalAdjusters.firstDayOfMonth()).with(LocalTime.MIN);
-        var endTime = statDay.with(TemporalAdjusters.lastDayOfMonth()).with(LocalTime.MAX);
+        var startTime = statDay.with(TemporalAdjusters.firstDayOfMonth()).atTime(LocalTime.MIN);
+        var endTime = statDay.with(TemporalAdjusters.lastDayOfMonth()).atTime(LocalTime.MAX);
         LambdaQueryWrapper<WashOrder> wrapper = new LambdaQueryWrapper<>();
-        wrapper.select(WashOrder::getAmount);
+        wrapper.select(WashOrder::getAmount, WashOrder::getStationId);
         wrapper.ge(WashOrder::getStartTime, startTime);
-        wrapper.gt(WashOrder::getStartTime, endTime);
+        wrapper.lt(WashOrder::getStartTime, endTime);
         var list = list(wrapper);
         // 按照站点分组统计金额
         return list.stream().collect(Collectors.groupingBy(WashOrder::getStationId, Collectors.summingInt(WashOrder::getAmount)));
@@ -243,10 +243,10 @@ public class WashOrderServiceImpl extends MyBaseServiceImpl<WashOrderMapper, Was
      * @return
      */
     @Override
-    public Map<String, Integer> countOrdersCountByDate(LocalDate statDay) {
+    public Map<String, Integer> countDailyOrders(LocalDate statDay) {
         LambdaQueryWrapper<WashOrder> wrapper = new LambdaQueryWrapper<>();
         wrapper.ge(WashOrder::getStartTime, LocalDateTime.of(statDay, LocalTime.MIN));
-        wrapper.gt(WashOrder::getStartTime, LocalDateTime.of(statDay, LocalTime.MAX));
+        wrapper.lt(WashOrder::getStartTime, LocalDateTime.of(statDay, LocalTime.MAX));
         // 按照站点分组统计订单数量
         return list(wrapper).stream().collect(Collectors.groupingBy(WashOrder::getStationId, Collectors.summingInt(o -> 1)));
     }
@@ -258,12 +258,13 @@ public class WashOrderServiceImpl extends MyBaseServiceImpl<WashOrderMapper, Was
      * @return
      */
     @Override
-    public Map<String, Integer> countMonthOrdersCount(LocalDate statDay) {
-        var startTime = statDay.with(TemporalAdjusters.firstDayOfMonth()).with(LocalTime.MIN);
-        var endTime = statDay.with(TemporalAdjusters.lastDayOfMonth()).with(LocalTime.MAX);
+    public Map<String, Integer> countMonthOrders(LocalDate statDay) {
+        var startTime = statDay.with(TemporalAdjusters.firstDayOfMonth()).atTime(LocalTime.MIN);
+        var endTime = statDay.with(TemporalAdjusters.lastDayOfMonth()).atTime(LocalTime.MAX);
         LambdaQueryWrapper<WashOrder> wrapper = new LambdaQueryWrapper<>();
+        wrapper.select(WashOrder::getStationId);
         wrapper.ge(WashOrder::getStartTime, startTime);
-        wrapper.gt(WashOrder::getStartTime, endTime);
+        wrapper.lt(WashOrder::getStartTime, endTime);
         // 按照站点分组统计订单数量
         return list(wrapper).stream().collect(Collectors.groupingBy(WashOrder::getStationId, Collectors.summingInt(o -> 1)));
     }