TaskLogic.php
2.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
<?php
namespace App\Http\Logic\Aside\Task;
use App\Helper\Arr;
use App\Http\Logic\Aside\BaseLogic;
use App\Http\Logic\Aside\LoginLogic;
use App\Models\Task\Task;
use App\Models\Task\TaskOwner;
use Illuminate\Support\Facades\DB;
/**
* Class TaskLogic
* @package App\Http\Logic\Aside\Task
* @author zbj
* @date 2023/4/27
*/
class TaskLogic extends BaseLogic
{
public function __construct()
{
parent::__construct();
$this->model = new Task();
}
public function getInfo($id)
{
parent::setWith(['owner', 'follow']); //删除缓存要添加带with的cache_key
return parent::getInfo($id);
}
public function save($param){
DB::beginTransaction();
try {
$res = parent::save($param);
$data['task_id'] = $res['id'];
//支持分配多人
$owner = Arr::splitFilterToArray($param['owner']);
foreach ($owner as $manage_id){
$data['manage_ids'][] = $manage_id;
}
(new TaskOwnerLogic)->save($data);
DB::commit();
}catch (\Exception $e){
DB::rollBack();
errorLog('工单保存失败', $param, $e);
$this->fail('保存失败');
}
return $this->success();
}
/**
* 修改状态
* @param $param
* @return array
* @throws \App\Exceptions\AsideGlobalException
* @throws \App\Exceptions\BsideGlobalException
* @author zbj
* @date 2023/4/27
*/
public function status($id, $status){
$task = $this::getInfo($id);
if(!$task){
$this->fail('任务不存在');
}
$manage_ids = Arr::pluck($task['owner'], 'manage_id', 'id');
if(!in_array(LoginLogic::manage('id'), $manage_ids)){
$this->fail('非本人任务,不能更新进程');
}
$task_data = [
'id' => $id,
'status' => $status,
];
//个人任务
$task_owner_id = array_search(LoginLogic::manage('id'), $manage_ids);
(new TaskOwnerLogic())->status($task_owner_id, $status);
//一个人开始,任务开始,所有人完成,任务才完成
$owner_status = TaskOwner::where('task_id', $id)->pluck('status')->toArray();
//所有都完成
if(array_sum($owner_status) == count($owner_status) * TaskOwner::STATUS_DOWN){
$task_data['status'] = Task::STATUS_DOWN;
$task_data['done_at'] = date('Y-m-d H:i:s');
}else{
$task_data['status'] = Task::STATUS_DONGING;
$task_data['doing_at'] = date('Y-m-d H:i:s');
}
parent::save($task_data);
return $this->success();
}
public function clearCache($id)
{
parent::clearCache($id);
parent::setWith(['owner', 'follow']);
parent::clearCache($id);
}
}