Commit d12c9ff3 by Jony.L

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

parent 08c76da3
......@@ -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.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.HomeIndexTopBarRespVO;
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.member.service.user.MemberUserService;
......@@ -25,7 +26,7 @@ import static com.luhu.computility.framework.common.pojo.CommonResult.success;
* @Date : 2025/9/10 16:30
* @VERSION v1.0
*/
@Tag(name = "管理后台 - 后台管理首页E-chart统计")
@Tag(name = "管理后台 - 后台管理首页统计")
@RestController
@RequestMapping("/index/count")
@Validated
......@@ -56,5 +57,11 @@ public class HomeIndexController {
public CommonResult<List<HomeIndexApiCallsRespVO>> getApiCallsData(String 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;
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.HomeIndexTopBarRespVO;
import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexUsersCountRespVO;
import java.util.List;
......@@ -19,4 +20,6 @@ public interface HomeIndexService {
List<HomeIndexOrdersCountRespVO> getOrdersData(String dateType);
List<HomeIndexApiCallsRespVO> getApiCallsData(String dateType);
HomeIndexTopBarRespVO getTopBarData();
}
......@@ -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.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.HomeIndexTopBarRespVO;
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.dal.dataobject.user.MemberUserDO;
......@@ -146,67 +147,104 @@ public class HomeIndexServiceImpl implements HomeIndexService {
public List<HomeIndexApiCallsRespVO> getApiCallsData(String dateType) {
ApiCallLogPageReqVO queryVO = new ApiCallLogPageReqVO();
// 统一查询截至"统计截止日"的所有API调用日志(日/月统计共用)
LocalDate today = LocalDate.now();
LocalDateTime endTime = null; // 统计截止时间(所有调用时间<=该时间)
List<LocalDate> timeNodes = new ArrayList<>(); // 统计节点(7个:7天或7个月的结束日)
LocalDateTime endTime = null;
List<LocalDate> timeNodes = new ArrayList<>();
if ("d".equals(dateType) || ObjectUtil.isEmpty(dateType)) {
// 日统计:近7天(截止到昨天,避免今天未结束的数据不准
// 日统计:近7天(截止到昨天)
LocalDate yesterday = today.minusDays(1);
LocalDate startDate = yesterday.minusDays(6);
endTime = yesterday.atTime(23, 59, 59, 999_999_999);
// 生成7个日期节点(每天)
for (int i = 0; i < 7; i++) {
timeNodes.add(startDate.plusDays(i));
}
} else if ("m".equals(dateType)) {
// 月统计:近7个月(截止到上月末,避免当月未结束的数据不准
YearMonth lastMonth = YearMonth.from(today.minusMonths(1)); // 上月
// 月统计:近7个月(截止到上月末)
YearMonth lastMonth = YearMonth.from(today.minusMonths(1));
endTime = lastMonth.atEndOfMonth().atTime(23, 59, 59, 999_999_999);
// 生成7个月份节点(每个月的最后一天)
for (int i = 6; i >= 0; i--) { // 从6个月前到上月
for (int i = 6; i >= 0; i--) {
YearMonth currentMonth = lastMonth.minusMonths(i);
timeNodes.add(currentMonth.atEndOfMonth()); // 当月最后一天(如2025-09-30)
timeNodes.add(currentMonth.atEndOfMonth());
}
} else {
throw new ServiceException("未传入正确的统计时间类型!");
}
// 查询截止到endTime的所有API调用日志(日/月统计共用此数据)
LocalDateTime[] allTimePeriod = {LocalDate.of(1970, 1, 1).atStartOfDay(), endTime};
queryVO.setCreateTime(allTimePeriod);
List<ApiCallLogDO> apiCallLogList = apiCallLogService.getApiCallLogList(queryVO);
// 按统计节点计算API调用次数(每个节点对应的调用量
// 按统计节点计算API调用次数(核心修改:非累计
Map<LocalDate, Long> callsMap = new HashMap<>();
for (LocalDate node : timeNodes) {
// 统计逻辑:
// - 日统计:调用时间的日期 == 当前节点日期
// - 月统计:调用时间的日期 <= 当前节点(当月最后一天)
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();
callsMap.put(node, count);
}
// 构建结果列表(格式化日期显示)
// 构建结果列表
List<HomeIndexApiCallsRespVO> resultList = new ArrayList<>();
for (LocalDate node : timeNodes) {
HomeIndexApiCallsRespVO respVO = new HomeIndexApiCallsRespVO();
// 日统计显示"yyyy-MM-dd",月统计显示"yyyy-MM"
respVO.setCountDate("d".equals(dateType)
respVO.setCountDate("d".equals(dateType) || ObjectUtil.isEmpty(dateType)
? node.toString()
: node.format(DateTimeFormatter.ofPattern("yyyy-MM")));
respVO.setCallsCount(callsMap.get(node).intValue());
resultList.add(respVO);
}
// 按时间升序排序(从最早到最近)
resultList.sort(Comparator.comparing(HomeIndexApiCallsRespVO::getCountDate));
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
public List<HomeIndexOrdersCountRespVO> getOrdersData(String dateType) {
// 统一查询截至"统计截止日"的所有订单(日/月统计共用)
......@@ -237,7 +275,7 @@ public class HomeIndexServiceImpl implements HomeIndexService {
throw new ServiceException("未传入正确的统计时间类型!");
}
// 2. 查询截止到endTime的所有订单(日/月统计共用)
// 查询截止到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