Compare commits

...

2 Commits

Author SHA1 Message Date
Leo
28941ede41 fix(dashboard): 优化活跃用户统计逻辑
- 修改活跃用户数统计方式,解决groupBy无法正确统计不重复用户数的问题
- 改为先查询符合条件的登录记录,再使用Stream API统计不重复用户名
- 提高统计准确性,确保活跃用户数据的正确性
- 添加详细的中文注释说明统计逻辑
2025-09-24 22:19:59 +08:00
Leo
d9fb89adad docs: 新增禁止自动编译的开发规范
- 在开发强制要求章节新增第6条规则
- 禁止Claude在完成代码修改后自动执行编译操作
- 避免不必要的编译开销和环境冲突
- 编译操作应由开发者根据实际需要手动执行
2025-09-24 22:19:39 +08:00
2 changed files with 15 additions and 8 deletions

View File

@ -260,4 +260,8 @@ mvn test -pl coder-common-thin-web
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
``` ```
- **验证方法**: 添加依赖后重新编译和启动应用程序确保所有Controller接口能正常访问 - **验证方法**: 添加依赖后重新编译和启动应用程序确保所有Controller接口能正常访问
6. **禁止自动编译**: Claude在完成新功能代码或修改代码后严禁自动执行任何编译操作如mvn compile、mvn package等
- **禁止行为**: 严禁在代码修改完成后自动运行编译命令
- **原因说明**: 编译操作应由开发者根据实际需要手动执行,避免不必要的编译开销和潜在的环境冲突
- **允许行为**: 仅在用户明确要求时才执行编译操作

View File

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