| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- <?php
- namespace app\api\controller;
- use app\common\controller\Api;
- use think\Db;
- use think\Queue;
- /**
- * 糊盒工资计算
- */
- class GluSalaryCalculation extends Api
- {
- protected $noNeedLogin = ['*'];
- protected $noNeedRight = ['*'];
- /**
- * 提交糊盒工资计算任务到队列
- */
- public function salaryCalculation()
- {
- if (!$this->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);
- }
- }
|