作者 赵彬吉

update

... ... @@ -7,7 +7,9 @@ use App\Http\Logic\Aside\Task\TaskFollowLogic;
use App\Http\Logic\Aside\Task\TaskLogic;
use App\Http\Requests\Aside\Task\TaskFollowRequest;
use App\Http\Requests\Aside\Task\TaskRequest;
use App\Models\Task\Task;
use Illuminate\Support\Facades\Request;
use Illuminate\Validation\Rule;
/**
... ... @@ -57,12 +59,14 @@ class TaskController extends BaseController
*/
public function status(Request $request, TaskLogic $logic){
$request->validate([
'id'=>'required'
'id'=>'required',
'status' => ['required', Rule::in(array_keys(Task::statusMap()))]
],[
'id.required' => 'ID不能为空'
'id.required' => 'ID不能为空',
'status.required' => '请选择状态',
'status.in' => '状态值不正确',
]);
//todo 多人任务
$data = $logic->status($this->param);
$data = $logic->status($this->param['id'], $this->param['status']);
return $this->success($data);
}
... ... @@ -75,7 +79,6 @@ class TaskController extends BaseController
* @date 2023/4/27
*/
public function save_follow(TaskFollowRequest $request, TaskFollowLogic $logic){
//todo 任务是否分配给该用户
$data = $logic->save($this->param);
return $this->success($data);
}
... ...
... ... @@ -3,7 +3,9 @@
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\TaskFollow;
/**
... ... @@ -21,5 +23,17 @@ class TaskFollowLogic extends BaseLogic
$this->model = new TaskFollow();
}
public function save($param){
$task = $this::getInfo($param['task_id']);
if(!$task){
$this->fail('任务不存在');
}
$manage_ids = Arr::pluck($task['owner'], 'manage_id');
if(!in_array(LoginLogic::manage('id'), $manage_ids)){
$this->fail('非本人任务,不能添加跟进记录');
}
parent::save($param);
}
}
... ...
... ... @@ -5,6 +5,7 @@ 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;
... ... @@ -24,6 +25,12 @@ class TaskLogic extends BaseLogic
$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();
... ... @@ -56,13 +63,44 @@ class TaskLogic extends BaseLogic
* @author zbj
* @date 2023/4/27
*/
public function status($param){
$data = [
'id' => $param['id'],
'status' => $param['status'],
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,
];
parent::save($data);
//个人任务
$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);
}
}
... ...
... ... @@ -39,4 +39,23 @@ class TaskOwnerLogic extends BaseLogic
}
return $this->success();
}
public function status($id, $status){
$this->model = $this->getCacheInfo($id);
if(!$this->model){
$this->fail('数据不存在或者已经删除');
}
$data = [
'id' => $id,
'status' => $status
];
if($status == TaskOwner::STATUS_DONGING){
$data['doing_at'] = date('Y-m-d H:i:s');
}
if($status == TaskOwner::STATUS_DOWN){
$data['done_at'] = date('Y-m-d H:i:s');
}
parent::save($data);
return $this->success();
}
}
... ...
... ... @@ -31,4 +31,13 @@ class Task extends Base
return Upload::path2url($value);
}
public function owner(){
return $this->hasMany(TaskOwner::class,'task_id','id');
}
public function follow(){
return $this->hasMany(TaskFollow::class,'task_id','id');
}
}
... ...