作者 赵彬吉

update

... ... @@ -38,22 +38,55 @@ class TaskController extends BaseController
}
if(!empty($this->param['dep_id'])){
$manage_ids = Manage::where('dept_id', $this->param['dep_id'])->pluck('id')->toArray();
$map[] = ['id', 'in', TaskOwner::whereIn('manage_id',$manage_ids)->pluck('task_id')->toArray()];
$map[] = ['gto.manage_id', 'in', $manage_ids];
}
if(!empty($this->param['created_manage_id']) && !empty($this->param['type'])){
if(!empty($this->param['manage_id']) && !empty($this->param['type'])){
if($this->param['type'] == 1){
$map[] = ['created_manage_id', $this->param['created_manage_id']];
$map[] = ['created_manage_id', $this->param['manage_id']];
}else{
$map[] = ['id', 'in', TaskOwner::where('manage_id', $this->param['owner_manage_id'])->pluck('task_id')->toArray()];
$map[] = ['gto.manage_id', $this->param['manage_id']];
}
}
$sort = ['id' => 'desc'];
$data = $logic->getUserlist($map, $sort, ['id', 'project_id', 'workload', 'priority', 'content', 'attachment', 'status', 'end_at', 'created_manage_id']);
return $this->success($data);
}
public function items(Request $request, TaskLogic $logic)
{
$request->validate([
'own_manage_id'=>'required'
],[
'own_manage_id.required' => '所属人ID不能为空'
]);
$map[] = ['id', 'in', TaskOwner::where('manage_id', $this->param['own_manage_id'])->pluck('id')->toArray()];
if(!empty($this->param['search']) && !empty($this->param['search_type'])){
if($this->param['search_type'] == 'project'){
$map[] = ['project_id', 'in', Project::where('title', 'like', "%{$this->param['search']}%")->pluck('id')->toarray()];
}else{
$map[] = [$this->param['search_type'], 'like', "%{$this->param['search']}%"];
}
}
if(!empty($this->param['dep_id'])){
$manage_ids = Manage::where('dept_id', $this->param['dep_id'])->pluck('id')->toArray();
$map[] = ['id', 'in', TaskOwner::whereIn('manage_id',$manage_ids)->pluck('task_id')->toArray()];
}
if(!empty($this->param['manage_id']) && !empty($this->param['type'])){
if($this->param['type'] == 1){
$map[] = ['created_manage_id', $this->param['manage_id']];
}else{
$map[] = ['id', 'in', TaskOwner::where('manage_id', $this->param['manage_id'])->pluck('task_id')->toArray()];
}
}
$sort = ['id' => 'desc'];
$data = $logic->getList($map, $sort, ['id', 'project_id', 'workload', 'priority', 'content', 'attachment', 'status', 'end_at', 'created_manage_id']);
return $this->success($data);
}
public function info(Request $request, TaskLogic $logic){
$request->validate([
'id'=>'required'
... ...
... ... @@ -6,9 +6,11 @@ namespace App\Http\Logic\Aside\Task;
use App\Helper\Arr;
use App\Http\Logic\Aside\BaseLogic;
use App\Http\Logic\Aside\LoginLogic;
use App\Http\Logic\Aside\Manage\ManageLogic;
use App\Models\Task\Task;
use App\Models\Task\TaskOwner;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
/**
* Class TaskLogic
... ... @@ -25,6 +27,39 @@ class TaskLogic extends BaseLogic
$this->model = new Task();
}
public function getUserlist(array $map = [], array $sort = ['id' => 'desc'], array $columns = ['*'], int $limit = 20){
$where = array_map(function ($v) {
if(!Str::startsWith($v[0], 'gto.')) {
$v[0] = 'gl_task.' . $v[0];
}
return $v;
}, $map);
$data = $this->formatQuery($where)->leftJoin('gl_task_owner as gto', 'gl_task.id', '=', 'gto.task_id')
->select('gto.manage_id', DB::raw('COUNT(*) as count'))
->groupBy('gto.manage_id')
->paginate($limit)->toArray();
$list = [];
$map = array_map(function ($v) {
if(!Str::startsWith($v[0], 'gto.')) {
return $v;
}
return [];
}, $map);
$map = array_filter($map);
foreach ($data['list'] as $v){
$map[] = ['id', 'in', TaskOwner::where('manage_id', $v['manage_id'])->pluck('task_id')->toArray()];
$list[] = [
"manage_id" => $v['manage_id'],
"manage_id_text" => ManageLogic::getCacheName($v['manage_id']),
"count" => $v['count'],
"task_list" => $this->getList($map, $sort, $columns)['list'] ?? []
];
}
return $this->success($list);
}
public function getInfo($id)
{
parent::setWith(['owner', 'follow']); //删除缓存要添加带with的cache_key
... ...
... ... @@ -27,11 +27,17 @@ class Task extends Base
}
public function getProjectIdTextAttribute(){
if($this->project_id === null){
return '';
}
$project = ProjectLogic::instance()->getCacheInfo($this->project_id);
return $project['title'] ?? '';
}
public function getStatusTextAttribute(){
if($this->status === null){
return '';
}
return self::statusMap()[$this->status] ?? '';
}
... ... @@ -44,6 +50,9 @@ class Task extends Base
}
public function getTimeoutAttribute(){
if($this->end_at === null){
return 0;
}
if($this->status != self::STATUS_DOWN && strtotime($this->end_at) < time()){
return floor((time() - strtotime($this->end_at)) / 60);
}
... ...
... ... @@ -142,6 +142,7 @@ Route::middleware(['aloginauth'])->group(function () {
//工单管理
Route::prefix('task')->group(function () {
Route::get('/', [Aside\Task\TaskController::class, 'list'])->name('admin.task');
Route::get('/items', [Aside\Task\TaskController::class, 'items'])->name('admin.task_items');
Route::get('/info', [Aside\Task\TaskController::class, 'info'])->name('admin.task_info');
Route::post('/save', [Aside\Task\TaskController::class, 'save'])->name('admin.task_save');
Route::post('/status', [Aside\Task\TaskController::class, 'status'])->name('admin.task_status');
... ...