You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
146 lines
6.3 KiB
146 lines
6.3 KiB
<?php
|
|
/**
|
|
* 项目任务逻辑类
|
|
*
|
|
* @author qifna
|
|
* @date 2020-12-18
|
|
*/
|
|
|
|
namespace app\work\logic;
|
|
|
|
use think\Db;
|
|
|
|
class TaskLogic
|
|
{
|
|
public function getSearchData($param)
|
|
{
|
|
# 排序
|
|
$orderField = 'create_time';
|
|
$orderSort = 'desc';
|
|
if (!empty($param['sort_type']) && $param['sort_type'] == 1) { # 最近创建
|
|
$orderField = 'create_time';
|
|
$orderSort = 'desc';
|
|
}
|
|
if (!empty($param['sort_type']) && $param['sort_type'] == 2) { # 最近截止
|
|
$orderField = 'stop_time';
|
|
$orderSort = 'desc';
|
|
}
|
|
if (!empty($param['sort_type']) && $param['sort_type'] == 3) { # 最近更新
|
|
$orderField = 'update_time';
|
|
$orderSort = 'desc';
|
|
}
|
|
if (!empty($param['sort_type']) && $param['sort_type'] == 4) { # 最高优先级
|
|
$orderField = 'priority';
|
|
$orderSort = 'desc';
|
|
}
|
|
|
|
# 搜索
|
|
$searchWhere = '';
|
|
$dateWhere = [];
|
|
$userWhere = [];
|
|
$workWhere = [];
|
|
$labelWhere = '';
|
|
$ownerUserId = !empty($param['owner_user_id']) ? $param['owner_user_id'] : '';
|
|
$search = !empty($param['search']) ? $param['search'] : '';
|
|
$type = !empty($param['type']) ? $param['type'] : 0;
|
|
$startTime = !empty($param['start_time']) ? $param['start_time'] : '';
|
|
$endTime = !empty($param['end_time']) ? $param['end_time'] : '';
|
|
$workIds = !empty($param['work_id']) ? $param['work_id'] : '';
|
|
$labelIds = !empty($param['label_id']) ? $param['label_id'] : '';
|
|
unset($param['search']);
|
|
unset($param['type']);
|
|
unset($param['start_time']);
|
|
unset($param['end_time']);
|
|
unset($param['owner_user_id']);
|
|
|
|
switch ($type) {
|
|
case 1 :
|
|
# 今天
|
|
$dateWhere['update_time'][] = ['egt', strtotime(date('Y-m-d 00:00:00'))];
|
|
$dateWhere['update_time'][] = ['elt', strtotime(date('Y-m-d 23:59:59'))];
|
|
break;
|
|
case 2 :
|
|
# 上周
|
|
$dateWhere['update_time'][] = ['egt', strtotime('last week monday')];
|
|
$dateWhere['update_time'][] = ['elt', strtotime(date('Y-m-d 23:59:59', strtotime('last week sunday')))];
|
|
break;
|
|
case 3 :
|
|
# 上月
|
|
$dateWhere['update_time'][] = ['egt', strtotime(date('Y-m-01 00:00:00', strtotime('last month')))];
|
|
$dateWhere['update_time'][] = ['elt', strtotime(date('Y-m-d 23:59:59', strtotime('Last day of last month')))];
|
|
break;
|
|
case 4 :
|
|
# 去年
|
|
$dateWhere['update_time'][] = ['egt', strtotime(date('Y-01-01 00:00:00', strtotime('last year')))];
|
|
$dateWhere['update_time'][] = ['elt', strtotime(date('Y-12-31 23:59:59', strtotime('last year')))];
|
|
}
|
|
|
|
# 时间区间
|
|
if (!empty($startTime)) $dateWhere['update_time'] = ['egt', strtotime($startTime . '00:00:00')];
|
|
if (!empty($endTime)) $dateWhere['update_time'] = ['elt', strtotime($endTime . '23:59:59')];
|
|
|
|
# 搜索内容
|
|
if ($search) $searchWhere = '(name like "%' . $search . '%") OR (description like "%' . $search . '%")';
|
|
|
|
# 成员
|
|
if (!empty($ownerUserId)) {
|
|
$taskArray = [];
|
|
$userArray = explode(',', $ownerUserId);
|
|
foreach ($userArray AS $key => $value) {
|
|
$tmp = Db::name('task')->where('work_id', '<>', 0)->whereLike('owner_user_id', '%,' . $value . ',%')->column('task_id');
|
|
$taskArray = array_merge($tmp, $taskArray);
|
|
}
|
|
|
|
if (!empty($taskArray)) $userWhere['task_id'] = ['in', $taskArray];
|
|
}
|
|
|
|
# 项目
|
|
if (!empty($workIds)) $workWhere['work_id'] = ['in', $workIds];
|
|
|
|
# 标签
|
|
if (!empty($labelIds) && is_array($labelIds)) {
|
|
foreach ($labelIds AS $key => $value) {
|
|
$labelWhere .= '(lable_id like "%,'.$value.',%") OR ';
|
|
}
|
|
if (!empty($labelWhere)) $labelWhere = '(' . rtrim($labelWhere, 'OR ') . ')';
|
|
}
|
|
|
|
$data = Db::name('task')
|
|
->where('work_id', '<>', 0)
|
|
->where($searchWhere)
|
|
->where($dateWhere)
|
|
->where($userWhere)
|
|
->where($workWhere)
|
|
->where($labelWhere)
|
|
->order($orderField, $orderSort)
|
|
->select();
|
|
|
|
foreach ($data AS $key => $value) {
|
|
$data[$key]['filecount'] = Db::name('work_task_file')->where('task_id', $value['task_id'])->count();
|
|
$data[$key]['relationCount'] = $this->getRelationCount($value['task_id']);
|
|
$data[$key]['lableList'] = Db::name('work_task_lable')->field(['lable_id', 'name', 'color'])->whereIn('lable_id', trim($value['lable_id'], ','))->select();
|
|
$data[$key]['subdonecount'] = Db::name('task')->where(['pid' => $value['task_id'], 'status' => 5])->count();
|
|
$data[$key]['subcount'] = Db::name('task')->where(['pid' => $value['task_id'], 'status' => ['neq', 5]])->count();
|
|
$data[$key]['start_time'] = !empty($value['start_time']) ? date('Y-m-d', $value['start_time']) : null;
|
|
$data[$key]['stop_time'] = !empty($value['stop_time']) ? date('Y-m-d', $value['stop_time']) : null;
|
|
$data[$key]['create_time'] = !empty($value['create_time']) ? date('Y-m-d H:i:s', $value['create_time']) : null;
|
|
$data[$key]['update_time'] = !empty($value['update_time']) ? date('Y-m-d H:i:s', $value['update_time']) : null;
|
|
}
|
|
|
|
return $data;
|
|
}
|
|
|
|
private function getRelationCount($task_id)
|
|
{
|
|
$relationInfo = Db::name('TaskRelation')->where(['task_id' => $task_id])->find();
|
|
$count = 0;
|
|
if ($relationInfo) {
|
|
$count1 = count(stringToArray($relationInfo['customer_ids']));
|
|
$count2 = count(stringToArray($relationInfo['contacts_ids']));
|
|
$count3 = count(stringToArray($relationInfo['business_ids']));
|
|
$count4 = count(stringToArray($relationInfo['contract_ids']));
|
|
$count = $count1 + $count2 + $count3 + $count4;
|
|
}
|
|
return $count;
|
|
}
|
|
} |