request->isGet()) { $this->error('请求错误'); } $params = $this->request->param(); if (empty($params['month']) || empty($params['startDay']) || empty($params['endDay'])) { $this->error('参数错误'); } $month = trim($params['month']); $runningTask = Db::name('queue_tasks') ->where('task_type', 'glu_salary_calculation') ->where('task_data', 'like', '%"month":"' . $month . '"%') ->where('status', 'in', ['pending', 'processing']) ->find(); if ($runningTask) { $this->success('该月份的糊盒工资计算任务正在执行中,请稍后查看结果', null, [ 'task_id' => $runningTask['id'], 'month' => $month, 'status' => $runningTask['status'], ]); } $taskData = [ 'month' => $month, 'startDay' => $params['startDay'], 'endDay' => $params['endDay'], 'sys_id' => $params['sys_id'] ?? '', 'request_time' => date('Y-m-d H:i:s'), ]; $taskId = Db::name('queue_tasks')->insertGetId([ 'task_type' => 'glu_salary_calculation', 'task_data' => json_encode($taskData, JSON_UNESCAPED_UNICODE), 'status' => 'pending', 'queue_name' => 'salary_calculation', 'create_time' => date('Y-m-d H:i:s'), ]); $taskData['task_id'] = $taskId; $jobId = Queue::push('app\job\GluSalaryCalculationJob', $taskData, 'salary_calculation'); if ($jobId) { Db::name('queue_tasks') ->where('id', $taskId) ->update([ 'job_id' => $jobId, 'update_time' => date('Y-m-d H:i:s'), ]); $this->success('糊盒工资计算任务已提交到队列,请稍后查看结果', null, [ 'task_id' => $taskId, 'job_id' => $jobId, 'month' => $month, 'queue_name' => 'salary_calculation', ]); } Db::name('queue_tasks') ->where('id', $taskId) ->update([ 'status' => 'failed', 'error' => '任务提交到队列失败', 'update_time' => date('Y-m-d H:i:s'), ]); $this->error('糊盒工资计算任务提交失败'); } /** * 查询糊盒工资计算任务状态 */ public function status() { if (!$this->request->isGet()) { $this->error('请求错误'); } $params = $this->request->param(); if (empty($params['month'])) { $this->error('参数错误'); } $month = trim($params['month']); $task = Db::name('queue_tasks') ->where('task_type', 'glu_salary_calculation') ->where('task_data', 'like', '%"month":"' . $month . '"%') ->order('id desc') ->find(); if (empty($task)) { $this->error('未找到任务记录'); } $task['task_data'] = json_decode($task['task_data'], true); if (!empty($task['result'])) { $task['result'] = json_decode($task['result'], true); } $this->success('成功', $task); } }