TaskCenterController.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. <?php
  2. namespace App\Http\Controllers\TaskCenter;
  3. use App\Libs\ApiResponse;
  4. use App\Libs\Utils;
  5. use App\Services\TaskCenterService;
  6. use Illuminate\Http\Request;
  7. use Illuminate\Routing\Controller as BaseController;
  8. class TaskCenterController extends BaseController
  9. {
  10. use ApiResponse;
  11. protected $taskCenterService;
  12. public function __construct(TaskCenterService $taskCenterService)
  13. {
  14. $this->taskCenterService = $taskCenterService;
  15. }
  16. /**
  17. * 查询任务详情
  18. *
  19. * @param Request $request
  20. * @return mixed
  21. */
  22. public function detail(Request $request)
  23. {
  24. $taskId = (int)$request->input('task_id', 0);
  25. if ($taskId <= 0) {
  26. Utils::throwError('1002:task_id不能为空');
  27. }
  28. $task = $this->taskCenterService->getTaskDetail($taskId);
  29. if (!$task) {
  30. Utils::throwError('20003:任务不存在');
  31. }
  32. return $this->success([
  33. 'task_id' => $task->id,
  34. 'task_type' => $task->task_type,
  35. 'title' => $task->title,
  36. 'status' => $task->status,
  37. 'result' => $this->parseResult($task->result) ?? '',
  38. 'error_message' => $task->error_message ?? '',
  39. 'ref_task_id'=> $task->ref_task_id,
  40. 'created_at' => $task->created_at ? $task->created_at->format('Y-m-d H:i:s') : '',
  41. 'updated_at' => $task->updated_at ? $task->updated_at->format('Y-m-d H:i:s') : '',
  42. ]);
  43. }
  44. /**
  45. * 分页查询任务列表(默认每页20条,按创建时间倒序)
  46. *
  47. * @param Request $request
  48. * @return mixed
  49. */
  50. public function taskList(Request $request)
  51. {
  52. $params = $request->only(['task_id', 'status', 'task_type', 'page', 'page_size']);
  53. $tasks = $this->taskCenterService->getTaskList($params);
  54. $list = $tasks->map(function ($task) {
  55. return [
  56. 'task_id' => $task->id,
  57. 'task_type' => $task->task_type,
  58. 'title' => $task->title,
  59. 'status' => $task->status,
  60. 'result' => $this->parseResult($task->result),
  61. 'error_message' => $task->error_message,
  62. 'ref_task_id' => $task->ref_task_id,
  63. 'created_at' => $task->created_at ? $task->created_at->format('Y-m-d H:i:s') : '',
  64. 'updated_at' => $task->updated_at ? $task->updated_at->format('Y-m-d H:i:s') : '',
  65. ];
  66. });
  67. return $this->success([
  68. 'list' => $list,
  69. 'total' => $tasks->total(),
  70. 'per_page' => $tasks->perPage(),
  71. 'current_page' => $tasks->currentPage(),
  72. 'last_page' => $tasks->lastPage(),
  73. ]);
  74. }
  75. /**
  76. * 解析结果字段(JSON字符串转换为数组,保持兼容)
  77. *
  78. * @param mixed $result
  79. * @return mixed
  80. */
  81. private function parseResult($result)
  82. {
  83. if (is_string($result) && is_json($result)) {
  84. return json_decode($result, true);
  85. }
  86. return $result;
  87. }
  88. }