TaskApi.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. <?php
  2. namespace App\Http\Api;
  3. use App\Models\Task;
  4. use App\Models\TaskRelation;
  5. use Illuminate\Support\Facades\Log;
  6. use Illuminate\Support\Facades\App;
  7. use App\Tools\RedisClusters;
  8. class TaskApi{
  9. public static function getById($id){
  10. if(!$id){
  11. return null;
  12. };
  13. $task = Task::where('id',$id)->first();
  14. if($task){
  15. return [
  16. 'id'=>$id,
  17. 'title'=>$task->title,
  18. 'description'=>$task->description,
  19. ];
  20. }else{
  21. return null;
  22. }
  23. }
  24. public static function getListByIds($ids){
  25. if(!$ids){
  26. return null;
  27. };
  28. $tasks = Task::whereIn('id',$ids)->get();
  29. $output = array();
  30. foreach ($ids as $key => $id) {
  31. foreach ($tasks as $task) {
  32. if($task->id === $id){
  33. $output[] = [
  34. 'id'=>$id,
  35. 'title'=>$task->title,
  36. 'description'=>$task->description,
  37. ];
  38. continue;
  39. };
  40. }
  41. }
  42. return $output;
  43. }
  44. public static function setRelationTasks($taskId,$relationTasksId,$editor_id,$relation='pre'){
  45. if($relation==='pre'){
  46. $where = 'next_task_id';
  47. $task1 = 'task_id';
  48. $task2 = 'next_task_id';
  49. }else{
  50. $where = 'task_id';
  51. $task1 = 'next_task_id';
  52. $task2 = 'task_id';
  53. }
  54. $delete = TaskRelation::where($where,$taskId)
  55. ->delete();
  56. foreach ($relationTasksId as $key => $id) {
  57. $data[] = [
  58. 'id' => Str::uuid(),
  59. $task1 => $id,
  60. $task2 => $taskId,
  61. 'editor_id' => $editor_id,
  62. ];
  63. }
  64. if(isset($data)){
  65. TaskRelation::insert($data);
  66. }
  67. TaskApi::removeTaskRelationRedisKey($taskId,$relation);
  68. }
  69. public static function getRelationTasks($taskId,$relation='pre'){
  70. $key = TaskApi::taskRelationRedisKey($taskId,$relation);
  71. RedisClusters::remember($key,3*24*3600,function() use($taskId,$relation){
  72. if($relation==='pre'){
  73. $where = 'next_task_id';
  74. $select = 'task_id';
  75. }else{
  76. $where = 'task_id';
  77. $select = 'next_task_id';
  78. }
  79. $tasks = TaskRelation::where($where,$taskId)
  80. ->select($select)->get();
  81. $tasksId = [];
  82. foreach ($tasks as $key => $task) {
  83. $tasksId[] = $task[$select];
  84. }
  85. return TaskApi::getListByIds($tasksId);
  86. });
  87. }
  88. public static function getNextTasks($taskId){
  89. return TaskApi::getRelationTasks($taskId,'next');
  90. }
  91. public static function getPreTasks($taskId){
  92. return TaskApi::getRelationTasks($taskId,'pre');
  93. }
  94. public static function removeTaskRelationRedisKey($taskId,$relation='pre'){
  95. $key = TaskApi::taskRelationRedisKey($taskId,$relation);
  96. RedisClusters::forget($key);
  97. }
  98. public static function taskRelationRedisKey($taskId,$relation='pre'){
  99. return "task/relation/{$relation}/{$taskId}";
  100. }
  101. }