GluSalaryCalculation.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. <?php
  2. namespace app\api\controller;
  3. use app\common\controller\Api;
  4. use think\Db;
  5. use think\Queue;
  6. /**
  7. * 糊盒工资计算
  8. */
  9. class GluSalaryCalculation extends Api
  10. {
  11. protected $noNeedLogin = ['*'];
  12. protected $noNeedRight = ['*'];
  13. /**
  14. * 提交糊盒工资计算任务到队列
  15. */
  16. public function salaryCalculation()
  17. {
  18. if (!$this->request->isGet()) {
  19. $this->error('请求错误');
  20. }
  21. $params = $this->request->param();
  22. if (empty($params['month']) || empty($params['startDay']) || empty($params['endDay'])) {
  23. $this->error('参数错误');
  24. }
  25. $month = trim($params['month']);
  26. $runningTask = Db::name('queue_tasks')
  27. ->where('task_type', 'glu_salary_calculation')
  28. ->where('task_data', 'like', '%"month":"' . $month . '"%')
  29. ->where('status', 'in', ['pending', 'processing'])
  30. ->find();
  31. if ($runningTask) {
  32. $this->success('该月份的糊盒工资计算任务正在执行中,请稍后查看结果', null, [
  33. 'task_id' => $runningTask['id'],
  34. 'month' => $month,
  35. 'status' => $runningTask['status'],
  36. ]);
  37. }
  38. $taskData = [
  39. 'month' => $month,
  40. 'startDay' => $params['startDay'],
  41. 'endDay' => $params['endDay'],
  42. 'sys_id' => $params['sys_id'] ?? '',
  43. 'request_time' => date('Y-m-d H:i:s'),
  44. ];
  45. $taskId = Db::name('queue_tasks')->insertGetId([
  46. 'task_type' => 'glu_salary_calculation',
  47. 'task_data' => json_encode($taskData, JSON_UNESCAPED_UNICODE),
  48. 'status' => 'pending',
  49. 'queue_name' => 'salary_calculation',
  50. 'create_time' => date('Y-m-d H:i:s'),
  51. ]);
  52. $taskData['task_id'] = $taskId;
  53. $jobId = Queue::push('app\job\GluSalaryCalculationJob', $taskData, 'salary_calculation');
  54. if ($jobId) {
  55. Db::name('queue_tasks')
  56. ->where('id', $taskId)
  57. ->update([
  58. 'job_id' => $jobId,
  59. 'update_time' => date('Y-m-d H:i:s'),
  60. ]);
  61. $this->success('糊盒工资计算任务已提交到队列,请稍后查看结果', null, [
  62. 'task_id' => $taskId,
  63. 'job_id' => $jobId,
  64. 'month' => $month,
  65. 'queue_name' => 'salary_calculation',
  66. ]);
  67. }
  68. Db::name('queue_tasks')
  69. ->where('id', $taskId)
  70. ->update([
  71. 'status' => 'failed',
  72. 'error' => '任务提交到队列失败',
  73. 'update_time' => date('Y-m-d H:i:s'),
  74. ]);
  75. $this->error('糊盒工资计算任务提交失败');
  76. }
  77. /**
  78. * 查询糊盒工资计算任务状态
  79. */
  80. public function status()
  81. {
  82. if (!$this->request->isGet()) {
  83. $this->error('请求错误');
  84. }
  85. $params = $this->request->param();
  86. if (empty($params['month'])) {
  87. $this->error('参数错误');
  88. }
  89. $month = trim($params['month']);
  90. $task = Db::name('queue_tasks')
  91. ->where('task_type', 'glu_salary_calculation')
  92. ->where('task_data', 'like', '%"month":"' . $month . '"%')
  93. ->order('id desc')
  94. ->find();
  95. if (empty($task)) {
  96. $this->error('未找到任务记录');
  97. }
  98. $task['task_data'] = json_decode($task['task_data'], true);
  99. if (!empty($task['result'])) {
  100. $task['result'] = json_decode($task['result'], true);
  101. }
  102. $this->success('成功', $task);
  103. }
  104. }