From 28941ede414263f0705115f769b6be92fa8fc392 Mon Sep 17 00:00:00 2001 From: Leo <98382335+gaoziman@users.noreply.github.com> Date: Wed, 24 Sep 2025 22:19:59 +0800 Subject: [PATCH] =?UTF-8?q?fix(dashboard):=20=E4=BC=98=E5=8C=96=E6=B4=BB?= =?UTF-8?q?=E8=B7=83=E7=94=A8=E6=88=B7=E7=BB=9F=E8=AE=A1=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修改活跃用户数统计方式,解决groupBy无法正确统计不重复用户数的问题 - 改为先查询符合条件的登录记录,再使用Stream API统计不重复用户名 - 提高统计准确性,确保活跃用户数据的正确性 - 添加详细的中文注释说明统计逻辑 --- .../service/dashboard/DashboardServiceImpl.java | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) 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(