|
|
@@ -7,7 +7,7 @@ use Illuminate\Support\Facades\Log;
|
|
|
|
|
|
/**
|
|
|
* URS达人等级上级更新服务
|
|
|
- *
|
|
|
+ *
|
|
|
* 专门处理DelayQueue延时队列的回调更新逻辑
|
|
|
* 当用户达人等级发生变化时,通过DelayQueue异步更新其上级用户的达人等级
|
|
|
*/
|
|
|
@@ -15,10 +15,10 @@ class UrsTalentUpstreamUpdateService
|
|
|
{
|
|
|
/**
|
|
|
* DelayQueue回调方法:更新达人等级
|
|
|
- *
|
|
|
+ *
|
|
|
* 此方法被DelayQueue模块调用,用于延时更新上级用户的达人等级
|
|
|
* 由于URS达人等级更新操作是幂等的,无需额外的防重复检查
|
|
|
- *
|
|
|
+ *
|
|
|
* @param array $runParam 运行参数
|
|
|
* @return bool 更新结果
|
|
|
*/
|
|
|
@@ -29,8 +29,8 @@ class UrsTalentUpstreamUpdateService
|
|
|
$referrerId = $runParam['referrer_id'] ?? null;
|
|
|
$originalUserId = $runParam['original_user_id'] ?? null;
|
|
|
$level = $runParam['level'] ?? null;
|
|
|
- $triggerTime = $runParam['trigger_time'] ?? null;
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
// 参数验证
|
|
|
if (!$referrerId || !$originalUserId || !$level) {
|
|
|
Log::error('DelayQueue回调参数不完整', [
|
|
|
@@ -38,20 +38,18 @@ class UrsTalentUpstreamUpdateService
|
|
|
]);
|
|
|
return false;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
Log::info('DelayQueue开始更新上级达人等级', [
|
|
|
'referrer_id' => $referrerId,
|
|
|
'original_user_id' => $originalUserId,
|
|
|
- 'level' => $level,
|
|
|
- 'trigger_time' => $triggerTime,
|
|
|
- 'delay_duration' => $triggerTime ? (time() - $triggerTime) : null
|
|
|
+ 'level' => $level
|
|
|
]);
|
|
|
-
|
|
|
+
|
|
|
// 执行达人等级更新(无需防重复检查,因为操作是幂等的)
|
|
|
$startTime = microtime(true);
|
|
|
$result = UrsTalentService::updateTalentLevel($referrerId);
|
|
|
$endTime = microtime(true);
|
|
|
-
|
|
|
+
|
|
|
Log::info('DelayQueue更新上级达人等级成功', [
|
|
|
'referrer_id' => $referrerId,
|
|
|
'original_user_id' => $originalUserId,
|
|
|
@@ -61,9 +59,9 @@ class UrsTalentUpstreamUpdateService
|
|
|
'promotion_count' => $result->promotionCount,
|
|
|
'execution_time_ms' => round(($endTime - $startTime) * 1000, 2)
|
|
|
]);
|
|
|
-
|
|
|
+
|
|
|
return true;
|
|
|
-
|
|
|
+
|
|
|
} catch (\Exception $e) {
|
|
|
Log::error('DelayQueue更新上级达人等级失败', [
|
|
|
'referrer_id' => $referrerId ?? null,
|
|
|
@@ -72,22 +70,22 @@ class UrsTalentUpstreamUpdateService
|
|
|
'error' => $e->getMessage(),
|
|
|
'trace' => $e->getTraceAsString()
|
|
|
]);
|
|
|
-
|
|
|
+
|
|
|
// 返回false,让DelayQueue知道任务失败
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 批量更新多个用户的达人等级
|
|
|
- *
|
|
|
+ *
|
|
|
* @param array $userIds 用户ID数组
|
|
|
* @return array 更新结果
|
|
|
*/
|
|
|
public static function batchUpdateTalentLevels(array $userIds): array
|
|
|
{
|
|
|
$results = [];
|
|
|
-
|
|
|
+
|
|
|
foreach ($userIds as $userId) {
|
|
|
try {
|
|
|
$result = UrsTalentService::updateTalentLevel($userId);
|
|
|
@@ -104,13 +102,13 @@ class UrsTalentUpstreamUpdateService
|
|
|
];
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
Log::info('批量更新达人等级完成', [
|
|
|
'total_users' => count($userIds),
|
|
|
'success_count' => count(array_filter($results, fn($r) => $r['success'])),
|
|
|
'failed_count' => count(array_filter($results, fn($r) => !$r['success']))
|
|
|
]);
|
|
|
-
|
|
|
+
|
|
|
return $results;
|
|
|
}
|
|
|
}
|