11日1409-用户登录时间和活动时间记录功能.md 5.6 KB

用户登录时间和活动时间记录功能

任务时间: 2025年06月11日 14:09
完成时间: 2025年06月11日 14:20
任务类型: 功能开发

任务概述

实现用户登录时间和活动时间的记录功能,包括数据库结构修改、服务类创建、事件监听器实现等完整功能。

实现内容

1. 数据库结构修改

  • kku_user_infos 表中添加了两个新字段:
    • last_login_time: 最后登录时间
    • last_activity_time: 最后活动时间
  • 更新了对应的SQL生成文件

2. 核心服务类

创建文件: app/Module/User/Services/UserActivityService.php

主要功能:

  • 登录时间记录和更新
  • 活动时间记录和更新
  • 缓存机制优化(5分钟缓存,1分钟更新间隔)
  • 批量更新功能
  • 时间查询功能

核心方法:

updateLoginTime(int $userId, ?Carbon $loginTime = null): bool
updateActivityTime(int $userId, ?Carbon $activityTime = null, bool $forceUpdate = false): bool
getLastLoginTime(int $userId): ?Carbon
getLastActivityTime(int $userId): ?Carbon
batchUpdateActivityTime(array $userActivities): int

3. 事件监听器

创建文件: app/Module/User/Listeners/LoginSuccessListener.php

  • 监听 LoginSuccessEvent 事件
  • 在用户登录成功时自动记录登录时间
  • 同时更新活动时间

4. BaseHandler扩展

修改文件: app/Module/AppGame/Handler/BaseHandler.php

  • 添加 updateUserActivityTime() 方法
  • 供子类Handler调用来更新用户活动时间
  • 包含错误处理和日志记录

5. 模型更新

修改文件: app/Module/User/Models/UserInfo.php

  • 添加新字段的属性注释
  • 更新 $fillable 数组

6. 服务提供者配置

修改文件: app/Module/User/Providers/UserServiceProvider.php

  • 注册 LoginSuccessEvent 的监听器
  • 确保事件系统正常工作

修改文件: config/app.php

  • 添加 UserServiceProvider 到服务提供者列表

7. 中间件实现

创建文件: app/Module/User/Middleware/UpdateActivityTimeMiddleware.php

  • 可选的中间件方式更新活动时间
  • 在响应后异步处理,不影响性能

8. 测试Handler

创建文件: app/Module/AppGame/Handler/Test/ActivityTimeTestHandler.php

  • 用于测试活动时间更新功能
  • 演示如何在Handler中使用新功能

9. 完整文档

创建文件: app/Module/User/Docs/用户活动时间功能.md

  • 详细的功能说明文档
  • 使用方法和示例代码
  • 配置参数说明
  • 故障排除指南

技术特性

1. 性能优化

  • 缓存机制: 使用Redis缓存,避免频繁数据库写入
  • 智能更新: 1分钟内只更新一次,避免过度频繁的操作
  • 异步处理: 不影响主要业务逻辑的响应速度

2. 可扩展性

  • 事件驱动: 使用Laravel事件系统,松耦合设计
  • 服务层设计: 独立的服务类,便于复用和测试
  • 批量操作: 支持批量更新,适用于定时任务

3. 可靠性

  • 错误处理: 完善的异常处理机制
  • 日志记录: 详细的操作日志,便于调试和监控
  • 数据一致性: 事务处理确保数据完整性

使用示例

在Handler中使用

class YourHandler extends BaseHandler
{
    protected bool $need_login = true;
    
    public function handle(Message $data): Message
    {
        // 业务逻辑
        
        // 更新用户活动时间
        $this->updateUserActivityTime();
        
        return $response;
    }
}

直接使用服务类

// 更新活动时间
UserActivityService::updateActivityTime($userId);

// 获取最后登录时间
$lastLogin = UserActivityService::getLastLoginTime($userId);

数据库验证

执行SQL验证功能正常:

-- 查看表结构
DESCRIBE kku_user_infos;

-- 测试数据更新
UPDATE kku_user_infos SET last_login_time = NOW(), last_activity_time = NOW() WHERE user_id = 1;

-- 验证数据
SELECT user_id, last_login_time, last_activity_time FROM kku_user_infos WHERE user_id = 1;

配置参数

// 缓存过期时间(秒)
const CACHE_TTL = 300; // 5分钟

// 活动时间更新间隔(秒)
const ACTIVITY_UPDATE_INTERVAL = 60; // 1分钟

文件清单

新增文件

  1. app/Module/User/Services/UserActivityService.php - 核心服务类
  2. app/Module/User/Listeners/LoginSuccessListener.php - 事件监听器
  3. app/Module/User/Middleware/UpdateActivityTimeMiddleware.php - 中间件
  4. app/Module/AppGame/Handler/Test/ActivityTimeTestHandler.php - 测试Handler
  5. app/Module/User/Docs/用户活动时间功能.md - 功能文档

修改文件

  1. app/Module/User/Databases/GenerateSql/user_infos.sql - 数据库结构
  2. app/Module/User/Models/UserInfo.php - 模型更新
  3. app/Module/AppGame/Handler/BaseHandler.php - 基类扩展
  4. app/Module/User/Providers/UserServiceProvider.php - 服务提供者
  5. config/app.php - 应用配置
  6. app/Module/AppGame/Handler/Land/HarvestHandler.php - 示例应用

后续优化建议

  1. 监控面板: 可以创建用户活跃度监控面板
  2. 统计分析: 基于活动时间数据进行用户行为分析
  3. 自动清理: 定期清理过期的缓存数据
  4. 性能调优: 根据实际使用情况调整缓存参数

总结

本次任务成功实现了完整的用户登录时间和活动时间记录功能,包括:

  • ✅ 数据库结构完善
  • ✅ 核心服务类实现
  • ✅ 事件系统集成
  • ✅ 性能优化机制
  • ✅ 完整文档编写
  • ✅ 代码提交和推送

功能已经可以正常使用,为后续的用户活跃度分析和在线状态判断提供了基础支持。