From 91393b7a57844fe08cb07c241b3cc3f40bd782a9 Mon Sep 17 00:00:00 2001 From: Leo <98382335+gaoziman@users.noreply.github.com> Date: Tue, 23 Sep 2025 23:46:52 +0800 Subject: [PATCH] =?UTF-8?q?feat(dashboard):=20=E6=96=B0=E5=A2=9E=E4=BB=AA?= =?UTF-8?q?=E8=A1=A8=E7=9B=98=E6=8E=A7=E5=88=B6=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增DashboardController控制器类 - 实现仪表盘数据统计接口 - 支持用户统计、登录统计、存储统计等功能 - 配置dashboard权限验证 --- .../dashboard/DashboardController.java | 173 ++++++++++++++++++ 1 file changed, 173 insertions(+) create mode 100644 coder-common-thin-modules/coder-common-thin-system/src/main/java/org/leocoder/thin/system/controller/dashboard/DashboardController.java diff --git a/coder-common-thin-modules/coder-common-thin-system/src/main/java/org/leocoder/thin/system/controller/dashboard/DashboardController.java b/coder-common-thin-modules/coder-common-thin-system/src/main/java/org/leocoder/thin/system/controller/dashboard/DashboardController.java new file mode 100644 index 0000000..aff99b6 --- /dev/null +++ b/coder-common-thin-modules/coder-common-thin-system/src/main/java/org/leocoder/thin/system/controller/dashboard/DashboardController.java @@ -0,0 +1,173 @@ +package org.leocoder.thin.system.controller.dashboard; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.ObjectUtils; +import org.leocoder.thin.common.exception.coder.YUtil; +import org.leocoder.thin.domain.model.vo.system.DashboardStatisticsVo; +import org.leocoder.thin.domain.model.vo.system.LoginTrendVo; +import org.leocoder.thin.system.service.dashboard.DashboardService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +/** + * 仪表盘统计控制器 + * + * @author Leocoder + */ +@Tag(name = "仪表盘管理", description = "仪表盘统计数据接口") +@Slf4j +@Validated +@RestController +@RequestMapping("/coder/dashboard") +@RequiredArgsConstructor +public class DashboardController { + + private final DashboardService dashboardService; + + /** + * @description 获取仪表盘统计数据 + * @author Leocoder + */ + @Operation( + summary = "获取仪表盘统计数据", + description = "获取用户、登录、存储、活跃度等核心统计数据" + ) + @GetMapping("/getStatistics") + @SaCheckPermission("dashboard:view") + public DashboardStatisticsVo getStatistics() { + DashboardStatisticsVo statistics = dashboardService.getStatistics(); + YUtil.isTrue(ObjectUtils.isEmpty(statistics), "获取仪表盘统计数据失败"); + return statistics; + } + + /** + * @description 获取登录趋势数据 + * @author Leocoder + */ + @Operation( + summary = "获取登录趋势数据", + description = "获取最近N天的登录趋势图表数据" + ) + @GetMapping("/getLoginTrend") + @SaCheckPermission("dashboard:view") + public LoginTrendVo getLoginTrend( + @Parameter(description = "查询天数", example = "7") @RequestParam( + defaultValue = "7" + ) Integer days + ) { + LoginTrendVo loginTrend = dashboardService.getLoginTrend(days); + YUtil.isTrue(ObjectUtils.isEmpty(loginTrend), "获取登录趋势数据失败"); + return loginTrend; + } + + /** + * @description 获取完整仪表盘数据 + * @author Leocoder + */ + @Operation( + summary = "获取完整仪表盘数据", + description = "一次性获取所有仪表盘数据,减少前端请求次数" + ) + @GetMapping("/getAllData") + @SaCheckPermission("dashboard:view") + public DashboardStatisticsVo getAllData( + @Parameter( + description = "是否包含趋势数据", + example = "true" + ) @RequestParam(defaultValue = "true") Boolean includeTrend, + @Parameter(description = "趋势数据天数", example = "7") @RequestParam( + defaultValue = "7" + ) Integer trendDays + ) { + DashboardStatisticsVo allData = dashboardService.getAllData( + includeTrend, + trendDays + ); + YUtil.isTrue(ObjectUtils.isEmpty(allData), "获取完整仪表盘数据失败"); + return allData; + } + + /** + * @description 获取用户统计数据 + * @author Leocoder + */ + @Operation( + summary = "获取用户统计数据", + description = "获取用户相关的统计信息" + ) + @GetMapping("/getUserStats") + @SaCheckPermission("dashboard:view") + public DashboardStatisticsVo.UserStatsVo getUserStats() { + DashboardStatisticsVo.UserStatsVo userStats = + dashboardService.getUserStats(); + YUtil.isTrue(ObjectUtils.isEmpty(userStats), "获取用户统计数据失败"); + return userStats; + } + + /** + * @description 获取登录统计数据 + * @author Leocoder + */ + @Operation( + summary = "获取登录统计数据", + description = "获取登录相关的统计信息" + ) + @GetMapping("/getLoginStats") + @SaCheckPermission("dashboard:view") + public DashboardStatisticsVo.LoginStatsVo getLoginStats( + @Parameter( + description = "是否包含趋势数据", + example = "false" + ) @RequestParam(defaultValue = "false") Boolean includeTrend, + @Parameter(description = "趋势数据天数", example = "7") @RequestParam( + defaultValue = "7" + ) Integer trendDays + ) { + DashboardStatisticsVo.LoginStatsVo loginStats = + dashboardService.getLoginStats(includeTrend, trendDays); + YUtil.isTrue(ObjectUtils.isEmpty(loginStats), "获取登录统计数据失败"); + return loginStats; + } + + /** + * @description 获取存储统计数据 + * @author Leocoder + */ + @Operation( + summary = "获取存储统计数据", + description = "获取存储相关的统计信息" + ) + @GetMapping("/getStorageStats") + @SaCheckPermission("dashboard:view") + public DashboardStatisticsVo.StorageStatsVo getStorageStats() { + DashboardStatisticsVo.StorageStatsVo storageStats = + dashboardService.getStorageStats(); + YUtil.isTrue(ObjectUtils.isEmpty(storageStats), "获取存储统计数据失败"); + return storageStats; + } + + /** + * @description 获取今日活跃统计数据 + * @author Leocoder + */ + @Operation( + summary = "获取今日活跃统计数据", + description = "获取今日活跃相关的统计信息" + ) + @GetMapping("/getDailyActivityStats") + @SaCheckPermission("dashboard:view") + public DashboardStatisticsVo.DailyActivityStatsVo getDailyActivityStats() { + DashboardStatisticsVo.DailyActivityStatsVo activityStats = + dashboardService.getDailyActivityStats(); + YUtil.isTrue( + ObjectUtils.isEmpty(activityStats), + "获取今日活跃统计数据失败" + ); + return activityStats; + } +}