diff --git a/coder-common-thin-modules/coder-common-thin-system/src/main/java/org/leocoder/thin/system/service/dashboard/DashboardServiceImpl.java b/coder-common-thin-modules/coder-common-thin-system/src/main/java/org/leocoder/thin/system/service/dashboard/DashboardServiceImpl.java index 647b98c..2b84b4b 100644 --- a/coder-common-thin-modules/coder-common-thin-system/src/main/java/org/leocoder/thin/system/service/dashboard/DashboardServiceImpl.java +++ b/coder-common-thin-modules/coder-common-thin-system/src/main/java/org/leocoder/thin/system/service/dashboard/DashboardServiceImpl.java @@ -152,17 +152,20 @@ public class DashboardServiceImpl implements DashboardService { ); // 活跃用户数(最近30天有登录记录的用户) + // 使用原生SQL统计不重复的登录用户数 LambdaQueryWrapper activeWrapper = new LambdaQueryWrapper<>(); activeWrapper .apply("login_time >= DATE_SUB(NOW(), INTERVAL 30 DAY)") - .eq(SysLoginLog::getLoginStatus, "0") - .select(SysLoginLog::getLoginName) - .groupBy(SysLoginLog::getLoginName); - Long activeUsers = sysLoginLogMapper.selectCount(activeWrapper); - userStats.setActiveUsers( - activeUsers != null ? activeUsers.intValue() : 0 - ); + .eq(SysLoginLog::getLoginStatus, "0"); + + // 获取符合条件的登录记录,然后统计不重复的用户名 + List loginLogs = sysLoginLogMapper.selectList(activeWrapper); + long activeUsers = loginLogs.stream() + .map(SysLoginLog::getLoginName) + .distinct() + .count(); + userStats.setActiveUsers((int) activeUsers); // 当前在线用户数(通过Sa-Token获取) List onlineTokens = StpUtil.searchTokenValue(