updateTaskStatus($taskId, 'processing', [ 'start_time' => date('Y-m-d H:i:s'), 'retry_count' => $job->attempts(), ]); $service = new GluSalaryCalculationService(); $result = $service->execute($data); if (!empty($result['success'])) { $job->delete(); $this->updateTaskStatus($taskId, 'success', [ 'end_time' => date('Y-m-d H:i:s'), 'result' => json_encode($result, JSON_UNESCAPED_UNICODE), ]); Log::info('糊盒工资计算任务执行成功', $result); return; } $message = $result['message'] ?? '糊盒工资计算失败'; $maxRetry = config('queue.queues.salary_calculation.retry') ?? 2; if ($job->attempts() >= $maxRetry) { $job->delete(); $this->updateTaskStatus($taskId, 'failed', [ 'end_time' => date('Y-m-d H:i:s'), 'error' => $message, 'retry_count' => $job->attempts(), ]); Log::error('糊盒工资计算任务失败', ['data' => $data, 'error' => $message]); return; } $job->release($this->getRetryDelay($job->attempts())); Log::warning('糊盒工资计算任务重试', ['attempts' => $job->attempts(), 'error' => $message]); } catch (\Exception $e) { Log::error('糊盒工资计算队列任务异常: ' . $e->getMessage()); $maxRetry = config('queue.queues.salary_calculation.retry') ?? 2; if ($job->attempts() >= $maxRetry) { $job->delete(); $this->updateTaskStatus($taskId, 'error', [ 'end_time' => date('Y-m-d H:i:s'), 'error' => $e->getMessage(), 'retry_count' => $job->attempts(), ]); return; } $job->release(60); } } protected function updateTaskStatus($taskId, $status, array $data = []) { if (empty($taskId)) { return; } Db::name('queue_tasks') ->where('id', $taskId) ->update(array_merge([ 'status' => $status, 'update_time' => date('Y-m-d H:i:s'), ], $data)); } protected function getRetryDelay($attempts) { $delays = [10, 30, 60]; return $delays[min($attempts - 1, count($delays) - 1)] ?? 60; } }