添加订单统计方法

This commit is contained in:
2025-08-11 07:54:06 +08:00
parent 00fbeedc56
commit aaf0eed197
6 changed files with 127 additions and 1 deletions

View File

@@ -1,6 +1,7 @@
package com.ycwl.basic.controller.pc;
import com.ycwl.basic.model.mobile.statistic.req.CommonQueryReq;
import com.ycwl.basic.model.pc.statistics.resp.OrderStatisticsResp;
import com.ycwl.basic.service.mobile.AppStatisticsService;
import com.ycwl.basic.service.pc.StatisticsService;
import com.ycwl.basic.utils.ApiResponse;
@@ -26,7 +27,7 @@ public class StatisticsController {
/**
* 智能获取扫码访问人数统计数据(自动选择粒度)
* @param query 查询参数(包含景区ID、开始时间、结束时间)
* @param query 查询参数(包含景区ID、开始时间、结束时间;如果scenicId为空则统计全部景区,否则统计指定景区
* @return 统计数据(超过7天返回日期级别,否则返回小时级别)
*/
@PostMapping("/scanCodeMemberChart")
@@ -43,4 +44,14 @@ public class StatisticsController {
public ApiResponse getStatisticsTwo(@RequestBody CommonQueryReq query) {
return appStatisticsService.twoStatistics(query);
}
/**
* 获取订单统计数据(包含订单数量和金额、推送订单数量、现场订单数量)
* @param query 查询参数(包含景区ID、开始时间、结束时间;如果scenicId为空则统计全部景区,否则统计指定景区)
* @return 统计数据(totalOrderCount: 总订单数量, totalOrderAmount: 总订单金额, pushOrderCount: 推送订单数量, sceneOrderCount: 现场订单数量)
*/
@PostMapping("/orderStatistics")
public ApiResponse<OrderStatisticsResp> getOrderStatistics(@RequestBody CommonQueryReq query) {
return ApiResponse.success(statisticsService.getOrderStatistics(query));
}
}

View File

@@ -106,4 +106,11 @@ public interface StatisticsMapper {
List<HashMap<String, String>> scanCodeMemberChartByHour(CommonQueryReq query);
List<HashMap<String, String>> scanCodeMemberChartByDate(CommonQueryReq query);
/**
* 统计订单数量和金额(包含推送订单和现场订单)
* @param query
* @return
*/
com.ycwl.basic.model.pc.statistics.resp.OrderStatisticsResp getOrderStatistics(CommonQueryReq query);
}

View File

@@ -0,0 +1,34 @@
package com.ycwl.basic.model.pc.statistics.resp;
import lombok.Data;
import java.math.BigDecimal;
/**
* 订单统计响应对象
* @Author:longbinbin
* @Date:2024/12/12
*/
@Data
public class OrderStatisticsResp {
/**
* 总订单数量(来自order表,status=1或2的已支付订单)
*/
private Integer totalOrderCount;
/**
* 总订单金额(单位:元,来自order表)
*/
private BigDecimal totalOrderAmount;
/**
* 推送订单数量(来自statistics表,type=3)
*/
private Integer pushOrderCount;
/**
* 现场订单数量(来自statistics表,type=4)
*/
private Integer sceneOrderCount;
}

View File

@@ -1,6 +1,7 @@
package com.ycwl.basic.service.pc;
import com.ycwl.basic.model.mobile.statistic.req.CommonQueryReq;
import com.ycwl.basic.model.pc.statistics.resp.OrderStatisticsResp;
import java.util.HashMap;
import java.util.List;
@@ -17,4 +18,11 @@ public interface StatisticsService {
* @return 统计数据(超过7天返回日期级别,否则返回小时级别)
*/
List<HashMap<String, String>> getScanCodeMemberChartAuto(CommonQueryReq query);
/**
* 获取订单统计数据(包含订单数量和金额、推送订单数量、现场订单数量)
* @param query 查询参数(包含景区ID、开始时间、结束时间;如果scenicId为空则统计全部景区,否则统计指定景区)
* @return 统计数据(totalOrderCount: 总订单数量, totalOrderAmount: 总订单金额, pushOrderCount: 推送订单数量, sceneOrderCount: 现场订单数量)
*/
OrderStatisticsResp getOrderStatistics(CommonQueryReq query);
}

View File

@@ -2,6 +2,7 @@ package com.ycwl.basic.service.pc.impl;
import com.ycwl.basic.mapper.StatisticsMapper;
import com.ycwl.basic.model.mobile.statistic.req.CommonQueryReq;
import com.ycwl.basic.model.pc.statistics.resp.OrderStatisticsResp;
import com.ycwl.basic.service.pc.StatisticsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -74,4 +75,30 @@ public class StatisticsServiceImpl implements StatisticsService {
return getScanCodeMemberChartByHour(query);
}
}
@Override
public OrderStatisticsResp getOrderStatistics(CommonQueryReq query) {
// 时间参数兜底与规范化
if (query.getStartTime() == null && query.getEndTime() == null) {
// 默认查询今天:00:00:00 - 23:59:59
LocalDateTime now = LocalDateTime.now();
LocalDateTime startOfDay = now.withHour(0).withMinute(0).withSecond(0).withNano(0);
LocalDateTime endOfDay = now.withHour(23).withMinute(59).withSecond(59).withNano(0);
query.setStartTime(Date.from(startOfDay.atZone(ZoneId.systemDefault()).toInstant()));
query.setEndTime(Date.from(endOfDay.atZone(ZoneId.systemDefault()).toInstant()));
} else {
if (query.getEndTime() != null) {
// 保证 endTime 为当天最后一秒
LocalDateTime endDateTime = query.getEndTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
LocalDateTime endOfDay = endDateTime.withHour(23).withMinute(59).withSecond(59).withNano(0);
query.setEndTime(Date.from(endOfDay.atZone(ZoneId.systemDefault()).toInstant()));
} else if (query.getStartTime() != null) {
// 仅传 startTime 时,将 endTime 置为 startTime 当天的 23:59:59
LocalDateTime startDateTime = query.getStartTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
LocalDateTime endOfStartDay = startDateTime.withHour(23).withMinute(59).withSecond(59).withNano(0);
query.setEndTime(Date.from(endOfStartDay.atZone(ZoneId.systemDefault()).toInstant()));
}
}
return statisticsMapper.getOrderStatistics(query);
}
}