Commit d12c9ff3 by Jony.L

首页统计3.0 顶部导航栏统计 当天的新增用户、新增订单、新增订单金额

parent 08c76da3
...@@ -4,6 +4,7 @@ import com.luhu.computility.framework.common.pojo.CommonResult; ...@@ -4,6 +4,7 @@ import com.luhu.computility.framework.common.pojo.CommonResult;
import com.luhu.computility.module.apihub.service.apiorder.ApiOrderService; import com.luhu.computility.module.apihub.service.apiorder.ApiOrderService;
import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexApiCallsRespVO; import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexApiCallsRespVO;
import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexOrdersCountRespVO; import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexOrdersCountRespVO;
import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexTopBarRespVO;
import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexUsersCountRespVO; import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexUsersCountRespVO;
import com.luhu.computility.module.biz.service.home.HomeIndexService; import com.luhu.computility.module.biz.service.home.HomeIndexService;
import com.luhu.computility.module.member.service.user.MemberUserService; import com.luhu.computility.module.member.service.user.MemberUserService;
...@@ -25,7 +26,7 @@ import static com.luhu.computility.framework.common.pojo.CommonResult.success; ...@@ -25,7 +26,7 @@ import static com.luhu.computility.framework.common.pojo.CommonResult.success;
* @Date : 2025/9/10 16:30 * @Date : 2025/9/10 16:30
* @VERSION v1.0 * @VERSION v1.0
*/ */
@Tag(name = "管理后台 - 后台管理首页E-chart统计") @Tag(name = "管理后台 - 后台管理首页统计")
@RestController @RestController
@RequestMapping("/index/count") @RequestMapping("/index/count")
@Validated @Validated
...@@ -56,5 +57,11 @@ public class HomeIndexController { ...@@ -56,5 +57,11 @@ public class HomeIndexController {
public CommonResult<List<HomeIndexApiCallsRespVO>> getApiCallsData(String dateType){ public CommonResult<List<HomeIndexApiCallsRespVO>> getApiCallsData(String dateType){
return success(homeIndexService.getApiCallsData(dateType)); return success(homeIndexService.getApiCallsData(dateType));
} }
@GetMapping("/getTopBarData")
@Operation(summary = "获取首页顶部栏位数据")
public CommonResult<HomeIndexTopBarRespVO> getTopBarData(){
return success(homeIndexService.getTopBarData());
}
} }
package com.luhu.computility.module.biz.controller.admin.home.vo;
import lombok.Data;
/**
* @Author: jony
* @Date : 2025/9/12 08:56
* @VERSION v1.0
*/
@Data
public class HomeIndexTopBarRespVO {
/**
* 今日新增用户量
*/
private Integer newUsersCount;
/**
* 今日新增订单
*/
private Integer newOrdersCount;
/**
* 今日新增订单金额
*/
private Integer newOrdersAmount;
}
...@@ -2,6 +2,7 @@ package com.luhu.computility.module.biz.service.home; ...@@ -2,6 +2,7 @@ package com.luhu.computility.module.biz.service.home;
import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexApiCallsRespVO; import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexApiCallsRespVO;
import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexOrdersCountRespVO; import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexOrdersCountRespVO;
import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexTopBarRespVO;
import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexUsersCountRespVO; import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexUsersCountRespVO;
import java.util.List; import java.util.List;
...@@ -19,4 +20,6 @@ public interface HomeIndexService { ...@@ -19,4 +20,6 @@ public interface HomeIndexService {
List<HomeIndexOrdersCountRespVO> getOrdersData(String dateType); List<HomeIndexOrdersCountRespVO> getOrdersData(String dateType);
List<HomeIndexApiCallsRespVO> getApiCallsData(String dateType); List<HomeIndexApiCallsRespVO> getApiCallsData(String dateType);
HomeIndexTopBarRespVO getTopBarData();
} }
...@@ -12,6 +12,7 @@ import com.luhu.computility.module.apihub.service.apicalllog.ApiCallLogService; ...@@ -12,6 +12,7 @@ import com.luhu.computility.module.apihub.service.apicalllog.ApiCallLogService;
import com.luhu.computility.module.apihub.service.apiorder.ApiOrderService; import com.luhu.computility.module.apihub.service.apiorder.ApiOrderService;
import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexApiCallsRespVO; import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexApiCallsRespVO;
import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexOrdersCountRespVO; import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexOrdersCountRespVO;
import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexTopBarRespVO;
import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexUsersCountRespVO; import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexUsersCountRespVO;
import com.luhu.computility.module.member.controller.admin.user.vo.MemberUserPageReqVO; import com.luhu.computility.module.member.controller.admin.user.vo.MemberUserPageReqVO;
import com.luhu.computility.module.member.dal.dataobject.user.MemberUserDO; import com.luhu.computility.module.member.dal.dataobject.user.MemberUserDO;
...@@ -146,67 +147,104 @@ public class HomeIndexServiceImpl implements HomeIndexService { ...@@ -146,67 +147,104 @@ public class HomeIndexServiceImpl implements HomeIndexService {
public List<HomeIndexApiCallsRespVO> getApiCallsData(String dateType) { public List<HomeIndexApiCallsRespVO> getApiCallsData(String dateType) {
ApiCallLogPageReqVO queryVO = new ApiCallLogPageReqVO(); ApiCallLogPageReqVO queryVO = new ApiCallLogPageReqVO();
// 统一查询截至"统计截止日"的所有API调用日志(日/月统计共用)
LocalDate today = LocalDate.now(); LocalDate today = LocalDate.now();
LocalDateTime endTime = null; // 统计截止时间(所有调用时间<=该时间) LocalDateTime endTime = null;
List<LocalDate> timeNodes = new ArrayList<>(); // 统计节点(7个:7天或7个月的结束日) List<LocalDate> timeNodes = new ArrayList<>();
if ("d".equals(dateType) || ObjectUtil.isEmpty(dateType)) { if ("d".equals(dateType) || ObjectUtil.isEmpty(dateType)) {
// 日统计:近7天(截止到昨天,避免今天未结束的数据不准 // 日统计:近7天(截止到昨天)
LocalDate yesterday = today.minusDays(1); LocalDate yesterday = today.minusDays(1);
LocalDate startDate = yesterday.minusDays(6); LocalDate startDate = yesterday.minusDays(6);
endTime = yesterday.atTime(23, 59, 59, 999_999_999); endTime = yesterday.atTime(23, 59, 59, 999_999_999);
// 生成7个日期节点(每天)
for (int i = 0; i < 7; i++) { for (int i = 0; i < 7; i++) {
timeNodes.add(startDate.plusDays(i)); timeNodes.add(startDate.plusDays(i));
} }
} else if ("m".equals(dateType)) { } else if ("m".equals(dateType)) {
// 月统计:近7个月(截止到上月末,避免当月未结束的数据不准 // 月统计:近7个月(截止到上月末)
YearMonth lastMonth = YearMonth.from(today.minusMonths(1)); // 上月 YearMonth lastMonth = YearMonth.from(today.minusMonths(1));
endTime = lastMonth.atEndOfMonth().atTime(23, 59, 59, 999_999_999); endTime = lastMonth.atEndOfMonth().atTime(23, 59, 59, 999_999_999);
// 生成7个月份节点(每个月的最后一天) for (int i = 6; i >= 0; i--) {
for (int i = 6; i >= 0; i--) { // 从6个月前到上月
YearMonth currentMonth = lastMonth.minusMonths(i); YearMonth currentMonth = lastMonth.minusMonths(i);
timeNodes.add(currentMonth.atEndOfMonth()); // 当月最后一天(如2025-09-30) timeNodes.add(currentMonth.atEndOfMonth());
} }
} else { } else {
throw new ServiceException("未传入正确的统计时间类型!"); throw new ServiceException("未传入正确的统计时间类型!");
} }
// 查询截止到endTime的所有API调用日志(日/月统计共用此数据)
LocalDateTime[] allTimePeriod = {LocalDate.of(1970, 1, 1).atStartOfDay(), endTime}; LocalDateTime[] allTimePeriod = {LocalDate.of(1970, 1, 1).atStartOfDay(), endTime};
queryVO.setCreateTime(allTimePeriod); queryVO.setCreateTime(allTimePeriod);
List<ApiCallLogDO> apiCallLogList = apiCallLogService.getApiCallLogList(queryVO); List<ApiCallLogDO> apiCallLogList = apiCallLogService.getApiCallLogList(queryVO);
// 按统计节点计算API调用次数(每个节点对应的调用量 // 按统计节点计算API调用次数(核心修改:非累计
Map<LocalDate, Long> callsMap = new HashMap<>(); Map<LocalDate, Long> callsMap = new HashMap<>();
for (LocalDate node : timeNodes) { for (LocalDate node : timeNodes) {
// 统计逻辑:
// - 日统计:调用时间的日期 == 当前节点日期
// - 月统计:调用时间的日期 <= 当前节点(当月最后一天)
long count = apiCallLogList.stream() long count = apiCallLogList.stream()
.filter(log -> log.getCreateTime().toLocalDate().isBefore(node.plusDays(1))) .filter(log -> {
LocalDate logDate = log.getCreateTime().toLocalDate();
if ("d".equals(dateType) || ObjectUtil.isEmpty(dateType)) {
return logDate.isEqual(node);
} else {
return YearMonth.from(logDate).equals(YearMonth.from(node));
}
})
.count(); .count();
callsMap.put(node, count); callsMap.put(node, count);
} }
// 构建结果列表(格式化日期显示) // 构建结果列表
List<HomeIndexApiCallsRespVO> resultList = new ArrayList<>(); List<HomeIndexApiCallsRespVO> resultList = new ArrayList<>();
for (LocalDate node : timeNodes) { for (LocalDate node : timeNodes) {
HomeIndexApiCallsRespVO respVO = new HomeIndexApiCallsRespVO(); HomeIndexApiCallsRespVO respVO = new HomeIndexApiCallsRespVO();
// 日统计显示"yyyy-MM-dd",月统计显示"yyyy-MM" respVO.setCountDate("d".equals(dateType) || ObjectUtil.isEmpty(dateType)
respVO.setCountDate("d".equals(dateType)
? node.toString() ? node.toString()
: node.format(DateTimeFormatter.ofPattern("yyyy-MM"))); : node.format(DateTimeFormatter.ofPattern("yyyy-MM")));
respVO.setCallsCount(callsMap.get(node).intValue()); respVO.setCallsCount(callsMap.get(node).intValue());
resultList.add(respVO); resultList.add(respVO);
} }
// 按时间升序排序(从最早到最近)
resultList.sort(Comparator.comparing(HomeIndexApiCallsRespVO::getCountDate)); resultList.sort(Comparator.comparing(HomeIndexApiCallsRespVO::getCountDate));
return resultList; return resultList;
} }
@Override
public HomeIndexTopBarRespVO getTopBarData() {
LocalDate today = LocalDate.now();
LocalDateTime[] todayLocalDateTime = new LocalDateTime[2];
todayLocalDateTime[0] = today.atStartOfDay();
todayLocalDateTime[1] = today.atTime(23, 59, 59, 999_999_999);
MemberUserPageReqVO queryVO = new MemberUserPageReqVO();
MemberUserPageReqVO memberUserPageReqVO = queryVO.setCreateTime(todayLocalDateTime);
List<MemberUserDO> userList = memberUserService.getUserList(memberUserPageReqVO);
TradeOrderPageReqVO computeOrderQueryVO = new TradeOrderPageReqVO();
computeOrderQueryVO.setCreateTime(todayLocalDateTime);
computeOrderQueryVO.setStatus(TradeOrderStatusEnum.COMPLETED.getStatus());
List<TradeOrderDO> computeOrderList = tradeOrderQueryService.getOrderList(computeOrderQueryVO);
ApiOrderPageReqVO apiOrderPageReqVO = new ApiOrderPageReqVO();
apiOrderPageReqVO.setCreateTime(todayLocalDateTime);
apiOrderPageReqVO.setStatus(ApiOrderStatus.PAID.getValue());
List<ApiOrderDO> apiOrderList = apiOrderService.getOrderList(apiOrderPageReqVO);
HomeIndexTopBarRespVO homeIndexTopBarRespVO = new HomeIndexTopBarRespVO();
int newComputeOrdersAmount = computeOrderList.stream()
.mapToInt(TradeOrderDO::getPayPrice)
.sum();
int newApiOrdersAmount = apiOrderList.stream()
.mapToInt(ApiOrderDO::getCostPrice)
.sum();
homeIndexTopBarRespVO.setNewUsersCount(userList.size());
homeIndexTopBarRespVO.setNewOrdersCount(computeOrderList.size()+apiOrderList.size());
homeIndexTopBarRespVO.setNewOrdersAmount(newComputeOrdersAmount+newApiOrdersAmount);
return homeIndexTopBarRespVO;
}
@Override @Override
public List<HomeIndexOrdersCountRespVO> getOrdersData(String dateType) { public List<HomeIndexOrdersCountRespVO> getOrdersData(String dateType) {
// 统一查询截至"统计截止日"的所有订单(日/月统计共用) // 统一查询截至"统计截止日"的所有订单(日/月统计共用)
...@@ -237,7 +275,7 @@ public class HomeIndexServiceImpl implements HomeIndexService { ...@@ -237,7 +275,7 @@ public class HomeIndexServiceImpl implements HomeIndexService {
throw new ServiceException("未传入正确的统计时间类型!"); throw new ServiceException("未传入正确的统计时间类型!");
} }
// 2. 查询截止到endTime的所有订单(日/月统计共用) // 查询截止到endTime的所有订单(日/月统计共用)
LocalDateTime[] allTimePeriod = {LocalDate.of(1970, 1, 1).atStartOfDay(), endTime}; LocalDateTime[] allTimePeriod = {LocalDate.of(1970, 1, 1).atStartOfDay(), endTime};
// 算力订单(已完成) // 算力订单(已完成)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment