visuddhinanda 1 год назад
Родитель
Сommit
73cf41efb1
1 измененных файлов с 52 добавлено и 3 удалено
  1. 52 3
      api-v8/app/Http/Controllers/TaskStatusController.php

+ 52 - 3
api-v8/app/Http/Controllers/TaskStatusController.php

@@ -71,6 +71,8 @@ class TaskStatusController extends Controller
         }
         $doneTask = [];
         $publishTask = [];
+        $restartTask = [];
+        $runningTask = [];
         switch ($request->get('status')) {
             case 'publish':
                 $publishTask[] = $id;
@@ -90,8 +92,10 @@ class TaskStatusController extends Controller
             case 'running':
                 $task->started_at = now();
                 $task->executor_id = $user['user_uid'];
+                $runningTask[] = $task->id;
                 break;
             case 'done':
+                $doneTask[] = $task->id;
                 $task->finished_at = now();
                 $preTask = [$task->id];
                 //开启父任务
@@ -115,23 +119,51 @@ class TaskStatusController extends Controller
                 }
                 //开启后置任务
                 $nextTasks = TaskRelation::whereIn('task_id', $preTask)
+                    ->where('status', 'pending')
                     ->select('next_task_id')->get();
                 foreach ($nextTasks as $key => $value) {
                     $publishTask[] = $value->next_task_id;
                 }
                 //开启后置任务的子任务
                 $nextTasksChildren = Task::whereIn('parent_id', $publishTask)
+                    ->where('status', 'pending')
                     ->select('id')->get();
                 foreach ($nextTasksChildren as $child) {
                     $publishTask[] = $child->id;
                 }
                 Task::whereIn('id', $publishTask)
-                    ->where('status', 'pending')
                     ->update([
                         'status' => 'published',
                         'editor_id' => $user['user_uid'],
                         'updated_at' => now()
                     ]);
+
+                $nextTasks = TaskRelation::whereIn('task_id', $preTask)
+                    ->where('status', 'requested_restart')
+                    ->select('next_task_id')->get();
+                foreach ($nextTasks as $key => $value) {
+                    $runningTask[] = $value->next_task_id;
+                }
+                Task::whereIn('id', $runningTask)
+                    ->update([
+                        'status' => 'running',
+                        'editor_id' => $user['user_uid'],
+                        'updated_at' => now()
+                    ]);
+                break;
+            case 'requested_restart':
+                //从新开启前置任务
+                $preTasks = TaskRelation::where('next_task_id', $task->id)
+                    ->select('task_id')->get();
+                foreach ($preTasks as $key => $value) {
+                    $restartTask[] = $value->task_id;
+                }
+                Task::whereIn('id', $restartTask)
+                    ->update([
+                        'status' => 'restarted',
+                        'editor_id' => $user['user_uid'],
+                        'updated_at' => now()
+                    ]);
                 break;
         }
         $task->status = $request->get('status');
@@ -148,12 +180,29 @@ class TaskStatusController extends Controller
             from: $user['user_uid'],
             message: "任务状态变为 已经发布",
         );
-        Log::debug('watch message', ['done' => $doneSend, 'published' => $pubSend]);
+
+        $restartSend = WatchApi::change(
+            resId: $restartTask,
+            from: $user['user_uid'],
+            message: "任务状态变为 已经重启",
+        );
+        $runningSend = WatchApi::change(
+            resId: $runningTask,
+            from: $user['user_uid'],
+            message: "任务状态变为 运行中",
+        );
+
+        Log::debug('watch message', [
+            'done' => $doneSend,
+            'published' => $pubSend,
+            'restarted' => $restartSend,
+            'running' => $runningSend,
+        ]);
 
         $task->editor_id = $user['user_uid'];
         $task->save();
 
-        $result = Task::whereIn('id', array_merge($doneTask, $publishTask))
+        $result = Task::whereIn('id', array_merge($doneTask, $publishTask, $restartTask, $runningTask))
             ->get();
         return $this->ok(
             [