Răsfoiți Sursa

添加URS活跃状态更新定时任务

- 在UrsPromotionServiceProvider中添加定时任务调度
- 设置每日01:05执行urs:update-active-status命令
- 配置后台运行和防重复执行机制
- 添加详细的任务描述便于监控和维护
- 与现有合伙人分红任务(00:30)错开执行时间
dongasai 6 luni în urmă
părinte
comite
35e732e396

+ 150 - 0
AiWork/202507/050357-添加URS活跃状态更新定时任务.md

@@ -0,0 +1,150 @@
+# URS活跃状态更新定时任务配置
+
+## 任务概述
+
+**时间**: 2025年07月05日 03:57  
+**任务**: 为UrsUpdateActiveStatusCommand添加任务调度,设置在每日1:05执行,后台运行  
+**状态**: ✅ 已完成
+
+## 实施内容
+
+### 1. 添加定时任务调度
+
+**文件**: `app/Module/UrsPromotion/Providers/UrsPromotionServiceProvider.php`
+
+在现有的定时任务配置中添加了URS用户活跃状态更新任务:
+
+```php
+// 每天01:05执行用户活跃状态更新
+$schedule->command('urs:update-active-status')
+    ->dailyAt('01:05')
+    ->description('URS用户活跃状态更新 - 基于最近15天活动时间更新用户活跃状态')
+    ->withoutOverlapping() // 防止重复执行
+    ->runInBackground(); // 后台运行
+```
+
+### 2. 任务配置详情
+
+- **执行时间**: 每日 01:05
+- **命令**: `php artisan urs:update-active-status`
+- **描述**: URS用户活跃状态更新 - 基于最近15天活动时间更新用户活跃状态
+- **防重复**: `withoutOverlapping()` - 防止任务重复执行
+- **后台运行**: `runInBackground()` - 任务在后台执行,不阻塞其他任务
+
+### 3. 执行时间安排
+
+当前URS模块的定时任务时间安排:
+- **00:30** - URS合伙人分红任务
+- **01:05** - URS用户活跃状态更新任务
+
+这样的时间安排确保:
+1. 避免与其他任务冲突
+2. 在用户活动较少的凌晨时段执行
+3. 为后续可能的达人等级更新任务预留时间
+
+## 验证结果
+
+### 1. 定时任务列表确认
+
+通过 `php artisan schedule:list` 命令验证,任务已成功注册:
+
+```
+5  1 * * *  php artisan urs:update-active-status ....... Next Due: 21小时后
+```
+
+### 2. 命令功能测试
+
+使用 `--dry-run` 模式测试命令功能:
+
+```bash
+php artisan urs:update-active-status --dry-run
+```
+
+**测试结果**:
+- 总用户数:3124
+- 活跃用户:1727 (55.28%)
+- 不活跃用户:1397
+- 最近24小时更新:1830
+- 需要检查的用户:1293
+
+命令运行正常,统计信息准确。
+
+## 技术特性
+
+### 1. 防重复执行
+使用 `withoutOverlapping()` 确保同一时间只有一个活跃状态更新任务在运行,避免:
+- 数据库锁冲突
+- 重复更新同一用户
+- 系统资源浪费
+
+### 2. 后台执行
+使用 `runInBackground()` 确保任务在后台执行,特点:
+- 不阻塞其他定时任务
+- 提高系统整体性能
+- 适合长时间运行的任务
+
+### 3. 详细描述
+添加了清晰的任务描述,便于:
+- 系统管理员了解任务用途
+- 日志记录和监控
+- 问题排查和维护
+
+## 监控建议
+
+### 1. 日志监控
+建议监控以下日志:
+- 任务执行开始和结束时间
+- 处理的用户数量
+- 活跃状态变更统计
+- 错误和异常情况
+
+### 2. 性能监控
+关注以下性能指标:
+- 任务执行时长
+- 数据库查询性能
+- 内存使用情况
+- 系统负载影响
+
+### 3. 业务监控
+监控业务指标:
+- 活跃用户比例变化
+- 活跃状态更新成功率
+- 数据一致性检查
+
+## 后续优化
+
+### 1. 批处理优化
+如果用户数量继续增长,可以考虑:
+- 调整批处理大小(当前默认1000)
+- 分时段执行(如分多个时间点执行)
+- 增加并发处理能力
+
+### 2. 缓存优化
+可以考虑添加缓存机制:
+- 缓存用户活动时间查询结果
+- 缓存活跃状态计算结果
+- 减少数据库查询压力
+
+### 3. 监控告警
+建议添加监控告警:
+- 任务执行失败告警
+- 执行时间过长告警
+- 活跃用户比例异常告警
+
+## 相关文件
+
+- `app/Module/UrsPromotion/Providers/UrsPromotionServiceProvider.php` - 定时任务配置
+- `app/Module/UrsPromotion/Commands/UrsUpdateActiveStatusCommand.php` - 命令实现
+- `app/Module/UrsPromotion/Services/UrsActiveUserService.php` - 活跃用户服务
+
+## 部署说明
+
+此更改已包含在代码中,部署后定时任务将自动生效。无需额外的配置或手动设置crontab。
+
+Laravel的定时任务通过以下方式运行:
+```bash
+# 在服务器crontab中添加(如果尚未添加)
+* * * * * cd /path/to/project && php artisan schedule:run >> /dev/null 2>&1
+```
+
+这样Laravel会自动管理所有注册的定时任务,包括新添加的URS活跃状态更新任务。

+ 7 - 0
app/Module/UrsPromotion/Providers/UrsPromotionServiceProvider.php

@@ -83,6 +83,13 @@ class UrsPromotionServiceProvider extends ServiceProvider
                 ->description('URS合伙人分红 - 顶级达人享受手续费分红')
                 ->withoutOverlapping() // 防止重复执行
                 ->runInBackground(); // 后台运行
+
+            // 每天01:05执行用户活跃状态更新
+            $schedule->command('urs:update-active-status')
+                ->dailyAt('01:05')
+                ->description('URS用户活跃状态更新 - 基于最近15天活动时间更新用户活跃状态')
+                ->withoutOverlapping() // 防止重复执行
+                ->runInBackground(); // 后台运行
         });
     }