Quellcode durchsuchen

添加TaskRelation表支持

visuddhinanda vor 1 Jahr
Ursprung
Commit
5202231a6d

+ 61 - 0
api-v8/app/Http/Api/TaskApi.php

@@ -2,8 +2,10 @@
 namespace App\Http\Api;
 
 use App\Models\Task;
+use App\Models\TaskRelation;
 use Illuminate\Support\Facades\Log;
 use Illuminate\Support\Facades\App;
+use App\Tools\RedisClusters;
 
 class TaskApi{
     public static function getById($id){
@@ -42,4 +44,63 @@ class TaskApi{
         }
         return $output;
     }
+
+    public static function setRelationTasks($taskId,$relationTasksId,$editor_id,$relation='pre'){
+        if($relation==='pre'){
+            $where = 'next_task_id';
+            $task1 = 'task_id';
+            $task2 = 'next_task_id';
+        }else{
+            $where = 'task_id';
+            $task1 = 'next_task_id';
+            $task2 = 'task_id';
+        }
+        $delete = TaskRelation::where($where,$taskId)
+                        ->delete();
+        foreach ($relationTasksId as $key => $id) {
+            $data[] = [
+                'id' => Str::uuid(),
+                $task1 => $id,
+                $task2 => $taskId,
+                'editor_id' => $editor_id,
+            ];
+        }
+        if(isset($data)){
+            TaskRelation::insert($data);
+        }
+        TaskApi::removeTaskRelationRedisKey($taskId,$relation);
+    }
+    public static function getRelationTasks($taskId,$relation='pre'){
+        $key = TaskApi::taskRelationRedisKey($taskId,$relation);
+        RedisClusters::remember($key,3*24*3600,function() use($taskId,$relation){
+            if($relation==='pre'){
+                $where = 'next_task_id';
+                $select = 'task_id';
+            }else{
+                $where = 'task_id';
+                $select = 'next_task_id';
+            }
+            $tasks = TaskRelation::where($where,$taskId)
+                        ->select($select)->get();
+            $tasksId = [];
+            foreach ($tasks as $key => $task) {
+                $tasksId[] = $task[$select];
+            }
+            return TaskApi::getListByIds($tasksId);
+		});
+    }
+
+    public static function getNextTasks($taskId){
+        return TaskApi::getRelationTasks($taskId,'next');
+    }
+    public static function getPreTasks($taskId){
+        return TaskApi::getRelationTasks($taskId,'pre');
+    }
+    public static function removeTaskRelationRedisKey($taskId,$relation='pre'){
+        $key = TaskApi::taskRelationRedisKey($taskId,$relation);
+        RedisClusters::forget($key);
+    }
+    public static function taskRelationRedisKey($taskId,$relation='pre'){
+        return "task/relation/{$relation}/{$taskId}";
+    }
 }

+ 8 - 2
api-v8/app/Http/Controllers/TaskController.php

@@ -211,7 +211,6 @@ class TaskController extends Controller
                 ];
             }
             TaskAssignee::insert($assigneesData);
-            //$task->assignees_id = json_encode($request->get('assignees_id'),JSON_UNESCAPED_UNICODE);
         }
         if($request->has('roles')){
             $task->roles = json_encode($request->get('roles'),JSON_UNESCAPED_UNICODE);
@@ -226,10 +225,17 @@ class TaskController extends Controller
             $task->project_id = $request->get('project_id');
         }
         if($request->has('pre_task_id')){
-            $task->pre_task_id = $request->get('pre_task_id');
+            TaskRelation::setRelationTasks($task->id,
+                explode(',',$request->get('pre_task_id')),
+                $user['user_uid'],
+                'pre');
         }
         if($request->has('next_task_id')){
             $task->next_task_id = $request->get('next_task_id');
+            TaskRelation::setRelationTasks($task->id,
+                explode(',',$request->get('next_task_id')),
+                $user['user_uid'],
+                'next');
         }
         if($request->has('is_milestone')){
             $task->is_milestone = $request->get('is_milestone');

+ 2 - 4
api-v8/app/Http/Resources/TaskResource.php

@@ -67,10 +67,8 @@ class TaskResource extends JsonResource
             'executor_id' => $this->executor_id,
             'executor_relation_task_id' => $this->executor_relation_task_id,
             'executor_relation_task' => TaskApi::getById($this->executor_relation_task_id),
-            'pre_task_id' => $this->pre_task_id,
-            'pre_task' => TaskApi::getById($this->pre_task_id),
-            'next_task_id' => $this->next_task_id,
-            'next_task' => TaskApi::getById($this->next_task_id),
+            'pre_task' => TaskApi::getPreTasks($this->id),
+            'next_task' => TaskApi::getNextTasks($this->id),
             'is_milestone' => $this->is_milestone,
             'project_id' => $this->project_id,
             'project' => ProjectApi::getById($this->project_id),