|
|
@@ -0,0 +1,202 @@
|
|
|
+# 用户登录时间和活动时间记录功能
|
|
|
+
|
|
|
+**任务时间**: 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分钟更新间隔)
|
|
|
+- 批量更新功能
|
|
|
+- 时间查询功能
|
|
|
+
|
|
|
+**核心方法**:
|
|
|
+```php
|
|
|
+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中使用
|
|
|
+```php
|
|
|
+class YourHandler extends BaseHandler
|
|
|
+{
|
|
|
+ protected bool $need_login = true;
|
|
|
+
|
|
|
+ public function handle(Message $data): Message
|
|
|
+ {
|
|
|
+ // 业务逻辑
|
|
|
+
|
|
|
+ // 更新用户活动时间
|
|
|
+ $this->updateUserActivityTime();
|
|
|
+
|
|
|
+ return $response;
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+### 直接使用服务类
|
|
|
+```php
|
|
|
+// 更新活动时间
|
|
|
+UserActivityService::updateActivityTime($userId);
|
|
|
+
|
|
|
+// 获取最后登录时间
|
|
|
+$lastLogin = UserActivityService::getLastLoginTime($userId);
|
|
|
+```
|
|
|
+
|
|
|
+## 数据库验证
|
|
|
+
|
|
|
+执行SQL验证功能正常:
|
|
|
+```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;
|
|
|
+```
|
|
|
+
|
|
|
+## 配置参数
|
|
|
+
|
|
|
+```php
|
|
|
+// 缓存过期时间(秒)
|
|
|
+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. **性能调优**: 根据实际使用情况调整缓存参数
|
|
|
+
|
|
|
+## 总结
|
|
|
+
|
|
|
+本次任务成功实现了完整的用户登录时间和活动时间记录功能,包括:
|
|
|
+
|
|
|
+- ✅ 数据库结构完善
|
|
|
+- ✅ 核心服务类实现
|
|
|
+- ✅ 事件系统集成
|
|
|
+- ✅ 性能优化机制
|
|
|
+- ✅ 完整文档编写
|
|
|
+- ✅ 代码提交和推送
|
|
|
+
|
|
|
+功能已经可以正常使用,为后续的用户活跃度分析和在线状态判断提供了基础支持。
|