任务时间:2025年06月07日 17:44
任务类型:功能优化
模块:Game模块 - 用户日志系统
优化用户日志清理逻辑,创建一个数据库表记录清理时间,进行逻辑清理,只返回该用户清理之后的日志给用户;真实的日志清理会影响日志的收集备份工作。
实现逻辑清理机制:
新增表:kku_user_log_clear_records
CREATE TABLE `kku_user_log_clear_records` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`user_id` int NOT NULL COMMENT '用户ID',
`cleared_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '清理时间',
`created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_user_id` (`user_id`),
KEY `idx_cleared_at` (`cleared_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户日志清理记录表';
新增文件:app/Module/Game/Models/UserLogClearRecord.php
修改文件:app/Module/Game/Logics/UserLogLogic.php
clearUserLogs() 方法:改为记录清理时间而非删除日志getUserLogs() 方法:添加清理时间过滤,只返回清理后的日志getUserLogStats() 方法:统计时考虑清理时间hasUserLogs() 和 getLatestUserLogs() 方法:同样考虑清理时间新增文件:app/Module/Game/AdminControllers/UserLogClearRecordController.php
新增文件:app/Module/Game/Repositories/UserLogClearRecordRepository.php
新增文件:app/Module/Game/Commands/TestUserLogClearCommand.php
=== 用户日志清理逻辑测试 ===
1. 查看用户 10001 当前可见的日志数量:
可见日志总数: 264
当前页日志数: 10
2. 查看用户的清理记录:
最后清理时间: 2025-06-07 16:47:58
3. 执行清理操作:
清理成功
4. 查看清理后的日志数量:
可见日志总数: 0
当前页日志数: 0
5. 查看新的清理记录:
最后清理时间: 2025-06-07 17:50:02
6. 验证数据库中的实际日志数量:
数据库中实际日志总数: 928
说明: 实际日志没有被删除,只是逻辑上被隐藏
app/Module/Game/Models/UserLogClearRecord.phpapp/Module/Game/AdminControllers/UserLogClearRecordController.phpapp/Module/Game/Repositories/UserLogClearRecordRepository.phpapp/Module/Game/Commands/TestUserLogClearCommand.phpapp/Module/Game/Databases/GenerateSql/user_log_clear_records.sqlapp/Module/Game/Logics/UserLogLogic.phpapp/Module/Game/Providers/GameServiceProvider.phpapp/Module/Game/Databases/README.md本次优化成功实现了用户日志的逻辑清理机制,在保证用户体验的同时,确保了数据的完整性和系统的稳定性。通过创建清理记录表和修改查询逻辑,避免了物理删除对日志收集备份工作的影响,是一个既实用又安全的解决方案。