作者 赵彬吉

update

@@ -7,7 +7,9 @@ use App\Http\Logic\Aside\Task\TaskFollowLogic; @@ -7,7 +7,9 @@ use App\Http\Logic\Aside\Task\TaskFollowLogic;
7 use App\Http\Logic\Aside\Task\TaskLogic; 7 use App\Http\Logic\Aside\Task\TaskLogic;
8 use App\Http\Requests\Aside\Task\TaskFollowRequest; 8 use App\Http\Requests\Aside\Task\TaskFollowRequest;
9 use App\Http\Requests\Aside\Task\TaskRequest; 9 use App\Http\Requests\Aside\Task\TaskRequest;
  10 +use App\Models\Task\Task;
10 use Illuminate\Support\Facades\Request; 11 use Illuminate\Support\Facades\Request;
  12 +use Illuminate\Validation\Rule;
11 13
12 14
13 /** 15 /**
@@ -57,12 +59,14 @@ class TaskController extends BaseController @@ -57,12 +59,14 @@ class TaskController extends BaseController
57 */ 59 */
58 public function status(Request $request, TaskLogic $logic){ 60 public function status(Request $request, TaskLogic $logic){
59 $request->validate([ 61 $request->validate([
60 - 'id'=>'required' 62 + 'id'=>'required',
  63 + 'status' => ['required', Rule::in(array_keys(Task::statusMap()))]
61 ],[ 64 ],[
62 - 'id.required' => 'ID不能为空' 65 + 'id.required' => 'ID不能为空',
  66 + 'status.required' => '请选择状态',
  67 + 'status.in' => '状态值不正确',
63 ]); 68 ]);
64 - //todo 多人任务  
65 - $data = $logic->status($this->param); 69 + $data = $logic->status($this->param['id'], $this->param['status']);
66 return $this->success($data); 70 return $this->success($data);
67 } 71 }
68 72
@@ -75,7 +79,6 @@ class TaskController extends BaseController @@ -75,7 +79,6 @@ class TaskController extends BaseController
75 * @date 2023/4/27 79 * @date 2023/4/27
76 */ 80 */
77 public function save_follow(TaskFollowRequest $request, TaskFollowLogic $logic){ 81 public function save_follow(TaskFollowRequest $request, TaskFollowLogic $logic){
78 - //todo 任务是否分配给该用户  
79 $data = $logic->save($this->param); 82 $data = $logic->save($this->param);
80 return $this->success($data); 83 return $this->success($data);
81 } 84 }
@@ -3,7 +3,9 @@ @@ -3,7 +3,9 @@
3 namespace App\Http\Logic\Aside\Task; 3 namespace App\Http\Logic\Aside\Task;
4 4
5 5
  6 +use App\Helper\Arr;
6 use App\Http\Logic\Aside\BaseLogic; 7 use App\Http\Logic\Aside\BaseLogic;
  8 +use App\Http\Logic\Aside\LoginLogic;
7 use App\Models\Task\TaskFollow; 9 use App\Models\Task\TaskFollow;
8 10
9 /** 11 /**
@@ -21,5 +23,17 @@ class TaskFollowLogic extends BaseLogic @@ -21,5 +23,17 @@ class TaskFollowLogic extends BaseLogic
21 $this->model = new TaskFollow(); 23 $this->model = new TaskFollow();
22 } 24 }
23 25
  26 + public function save($param){
  27 + $task = $this::getInfo($param['task_id']);
  28 + if(!$task){
  29 + $this->fail('任务不存在');
  30 + }
  31 + $manage_ids = Arr::pluck($task['owner'], 'manage_id');
  32 + if(!in_array(LoginLogic::manage('id'), $manage_ids)){
  33 + $this->fail('非本人任务,不能添加跟进记录');
  34 + }
  35 + parent::save($param);
  36 + }
  37 +
24 38
25 } 39 }
@@ -5,6 +5,7 @@ namespace App\Http\Logic\Aside\Task; @@ -5,6 +5,7 @@ namespace App\Http\Logic\Aside\Task;
5 5
6 use App\Helper\Arr; 6 use App\Helper\Arr;
7 use App\Http\Logic\Aside\BaseLogic; 7 use App\Http\Logic\Aside\BaseLogic;
  8 +use App\Http\Logic\Aside\LoginLogic;
8 use App\Models\Task\Task; 9 use App\Models\Task\Task;
9 use App\Models\Task\TaskOwner; 10 use App\Models\Task\TaskOwner;
10 use Illuminate\Support\Facades\DB; 11 use Illuminate\Support\Facades\DB;
@@ -24,6 +25,12 @@ class TaskLogic extends BaseLogic @@ -24,6 +25,12 @@ class TaskLogic extends BaseLogic
24 $this->model = new Task(); 25 $this->model = new Task();
25 } 26 }
26 27
  28 + public function getInfo($id)
  29 + {
  30 + parent::setWith(['owner', 'follow']); //删除缓存要添加带with的cache_key
  31 + return parent::getInfo($id);
  32 + }
  33 +
27 public function save($param){ 34 public function save($param){
28 35
29 DB::beginTransaction(); 36 DB::beginTransaction();
@@ -56,13 +63,44 @@ class TaskLogic extends BaseLogic @@ -56,13 +63,44 @@ class TaskLogic extends BaseLogic
56 * @author zbj 63 * @author zbj
57 * @date 2023/4/27 64 * @date 2023/4/27
58 */ 65 */
59 - public function status($param){  
60 - $data = [  
61 - 'id' => $param['id'],  
62 - 'status' => $param['status'], 66 + public function status($id, $status){
  67 + $task = $this::getInfo($id);
  68 + if(!$task){
  69 + $this->fail('任务不存在');
  70 + }
  71 + $manage_ids = Arr::pluck($task['owner'], 'manage_id', 'id');
  72 + if(!in_array(LoginLogic::manage('id'), $manage_ids)){
  73 + $this->fail('非本人任务,不能更新进程');
  74 + }
  75 + $task_data = [
  76 + 'id' => $id,
  77 + 'status' => $status,
63 ]; 78 ];
64 79
65 - parent::save($data); 80 + //个人任务
  81 + $task_owner_id = array_search(LoginLogic::manage('id'), $manage_ids);
  82 + (new TaskOwnerLogic())->status($task_owner_id, $status);
  83 +
  84 + //一个人开始,任务开始,所有人完成,任务才完成
  85 + $owner_status = TaskOwner::where('task_id', $id)->pluck('status')->toArray();
  86 + //所有都完成
  87 + if(array_sum($owner_status) == count($owner_status) * TaskOwner::STATUS_DOWN){
  88 + $task_data['status'] = Task::STATUS_DOWN;
  89 + $task_data['done_at'] = date('Y-m-d H:i:s');
  90 + }else{
  91 + $task_data['status'] = Task::STATUS_DONGING;
  92 + $task_data['doing_at'] = date('Y-m-d H:i:s');
  93 + }
  94 +
  95 + parent::save($task_data);
66 return $this->success(); 96 return $this->success();
67 } 97 }
  98 +
  99 + public function clearCache($id)
  100 + {
  101 + parent::clearCache($id);
  102 +
  103 + parent::setWith(['owner', 'follow']);
  104 + parent::clearCache($id);
  105 + }
68 } 106 }
@@ -39,4 +39,23 @@ class TaskOwnerLogic extends BaseLogic @@ -39,4 +39,23 @@ class TaskOwnerLogic extends BaseLogic
39 } 39 }
40 return $this->success(); 40 return $this->success();
41 } 41 }
  42 +
  43 + public function status($id, $status){
  44 + $this->model = $this->getCacheInfo($id);
  45 + if(!$this->model){
  46 + $this->fail('数据不存在或者已经删除');
  47 + }
  48 + $data = [
  49 + 'id' => $id,
  50 + 'status' => $status
  51 + ];
  52 + if($status == TaskOwner::STATUS_DONGING){
  53 + $data['doing_at'] = date('Y-m-d H:i:s');
  54 + }
  55 + if($status == TaskOwner::STATUS_DOWN){
  56 + $data['done_at'] = date('Y-m-d H:i:s');
  57 + }
  58 + parent::save($data);
  59 + return $this->success();
  60 + }
42 } 61 }
@@ -31,4 +31,13 @@ class Task extends Base @@ -31,4 +31,13 @@ class Task extends Base
31 return Upload::path2url($value); 31 return Upload::path2url($value);
32 } 32 }
33 33
  34 + public function owner(){
  35 + return $this->hasMany(TaskOwner::class,'task_id','id');
  36 +
  37 + }
  38 +
  39 + public function follow(){
  40 + return $this->hasMany(TaskFollow::class,'task_id','id');
  41 +
  42 + }
34 } 43 }