|
|
@@ -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}";
|
|
|
+ }
|
|
|
}
|