dao->be(['task_id' => $taskId])) { $this->dao->save([ 'task_id' => $taskId, 'uid' => (int)$task['uid'], 'trigger_no' => $triggerNo, 'trigger_amount' => $task['base_amount'], 'brokerage_status' => 0, 'points_status' => 0, 'level_task_status' => 0, 'error_msg' => '', ]); } $status = [ 'points_status' => 1, 'level_task_status' => 1, 'brokerage_status' => 1, 'error_msg' => '', ]; try { /** @var UserServices $userServices */ $userServices = app()->make(UserServices::class); $uids = [(int)$task['uid']]; $user = $userServices->get((int)$task['uid'], ['uid', 'spread_uid', 'agent_level']); $spreadUid = $user ? (int)($user['spread_uid'] ?? 0) : 0; if ($spreadUid > 0) { $uids[] = $spreadUid; $spreadUser = $userServices->get($spreadUid, ['uid', 'spread_uid', 'agent_level']); $twoUid = $spreadUser ? (int)($spreadUser['spread_uid'] ?? 0) : 0; if ($twoUid > 0) { $uids[] = $twoUid; } } $preUpgradeLevels = []; foreach (array_unique($uids) as $uid) { if ($uid <= 0) continue; $row = $userServices->get((int)$uid, ['uid', 'agent_level']); $preUpgradeLevels[(int)$uid] = $row ? (int)($row['agent_level'] ?? 0) : 0; } /** @var AgentLevelServices $agentLevelServices */ $agentLevelServices = app()->make(AgentLevelServices::class); $agentLevelServices->checkUserLevelFinish((int)$task['uid'], array_keys($preUpgradeLevels)); } catch (\Throwable $e) { $status['level_task_status'] = 2; $status['error_msg'] = '等级任务触发失败:' . $e->getMessage(); Log::error('[SYJ] 等级任务触发失败 task=' . $taskId . ' ' . $e->getMessage()); } try { /** @var PointsRewardServices $pointsRewardServices */ $pointsRewardServices = app()->make(PointsRewardServices::class); $pointsRewardServices->reward((int)$task['uid'], $triggerNo, (int)$task['source_order_id'], $preUpgradeLevels ?? [], 1); } catch (\Throwable $e) { $status['points_status'] = 2; $status['error_msg'] = trim($status['error_msg'] . ' 积分触发失败:' . $e->getMessage()); Log::error('[SYJ] 积分触发失败 task=' . $taskId . ' ' . $e->getMessage()); } $this->dao->update(['task_id' => $taskId], $status + ['retry_count' => $this->dao->value(['task_id' => $taskId], 'retry_count')]); } public function retry(int $taskId): void { /** @var SyjPromoteTaskServices $taskServices */ $taskServices = app()->make(SyjPromoteTaskServices::class); $task = $taskServices->getTask($taskId); if (!$task) { return; } $row = $this->dao->getOne(['task_id' => $taskId]); if ($row) { $this->dao->update(['task_id' => $taskId], ['retry_count' => (int)$row['retry_count'] + 1]); } $this->triggerForTask($task); $taskServices->refreshRewardStatus($taskId); } }