<?php /** * 项目逻辑类 * * @author qifan * @date 2020-12-16 */ namespace app\work\logic; use app\work\traits\WorkAuthTrait; use think\Db; class WorkLogic { use WorkAuthTrait; public function index($param) { # 排序 $orderField = 'w.work_id'; $orderSort = 'asc'; if (!empty($param['sort_type']) && $param['sort_type'] == 1) { $orderField = 'w.work_id'; $orderSort = 'asc'; } if (!empty($param['sort_type']) && $param['sort_type'] == 2) { $orderField = 'w.work_id'; $orderSort = 'desc'; } if (!empty($param['sort_type']) && $param['sort_type'] == 3) { $orderField = 'w.update_time'; $orderSort = 'desc'; } if (!empty($param['sort_type']) && $param['sort_type'] == 4) { $orderField = 'o.order'; $orderSort = 'asc'; } # 搜索 $searchWhere = ''; $dateWhere = []; $userWhere = []; $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'] : ''; unset($param['search']); unset($param['type']); unset($param['start_time']); unset($param['end_time']); unset($param['owner_user_id']); switch ($type) { case 1 : # 今天 $dateWhere['w.update_time'][] = ['egt', strtotime(date('Y-m-d 00:00:00'))]; $dateWhere['w.update_time'][] = ['elt', strtotime(date('Y-m-d 23:59:59'))]; break; case 2 : # 上周 $dateWhere['w.update_time'][] = ['egt', strtotime('last week monday')]; $dateWhere['w.update_time'][] = ['elt', strtotime(date('Y-m-d 23:59:59', strtotime('last week sunday')))]; break; case 3 : # 上月 $dateWhere['w.update_time'][] = ['egt', strtotime(date('Y-m-01 00:00:00', strtotime('last month')))]; $dateWhere['w.update_time'][] = ['elt', strtotime(date('Y-m-d 23:59:59', strtotime('Last day of last month')))]; break; case 4 : # 去年 $dateWhere['w.update_time'][] = ['egt', strtotime(date('Y-01-01 00:00:00', strtotime('last year')))]; $dateWhere['w.update_time'][] = ['elt', strtotime(date('Y-12-31 23:59:59', strtotime('last year')))]; } # 时间区间 if (!empty($startTime)) $dateWhere['w.update_time'] = ['egt', strtotime($startTime . '00:00:00')]; if (!empty($endTime)) $dateWhere['w.update_time'] = ['elt', strtotime($endTime . '23:59:59')]; # 搜索内容 if ($search) $searchWhere = '(w.name like "%' . $search . '%") OR (w.description like "%' . $search . '%")'; # 成员 if (!empty($ownerUserId)) { $userIds = Db::name('work_user')->whereIn('user_id', $ownerUserId)->column('work_id'); $userWhere['w.work_id'] = ['in', $userIds]; } $userModel = new \app\admin\model\User(); $perUserIds = $userModel->getUserByPer('work', 'work', 'index'); $authUser = array_unique(array_merge([$param['user_id']], $perUserIds)); if ($param['sort_type'] == 4 && db('work_order')->where('user_id', $param['user_id'])->count() > 0) { # 选择了按手动拖动排序,并且手动排过序。 $data = Db::name('work')->alias('w') ->field('w.*') ->join('__WORK_ORDER__ o', 'o.work_id = w.work_id', 'left') ->where(function ($query) { $query->where('status', 1); $query->where('ishidden', 0); }) ->where(function ($query) use ($param, $authUser) { $query->whereOr(['create_user_id' => ['in', $authUser]]); $query->whereOr('is_open', 1); $query->whereOr(function ($query) use ($param) { $query->where('is_open', 0); $query->where('owner_user_id', 'like', '%' . $param['user_id'] . '%'); }); }) ->where('o.user_id', $param['user_id']) ->where($searchWhere) ->where($dateWhere) ->where($userWhere) ->order($orderField, $orderSort)->select(); } else { # 未手动排过序,如果选择了手动排序选项 if ($param['sort_type'] == 4) { $orderField = 'w.work_id'; $orderSort = 'asc'; } $data = Db::name('work')->alias('w') ->field('w.*') ->where(function ($query) { $query->where('status', 1); $query->where('ishidden', 0); }) ->where(function ($query) use ($param, $authUser) { $query->whereOr(['create_user_id' => ['in', $authUser]]); $query->whereOr('is_open', 1); $query->whereOr(function ($query) use ($param) { $query->where('is_open', 0); $query->where('owner_user_id', 'like', '%' . $param['user_id'] . '%'); }); }) ->where($searchWhere) ->where($dateWhere) ->where($userWhere) ->order($orderField, $orderSort)->select(); } foreach ($data as $key => $value) { $data[$key]['authList']['project'] = $this->getRuleList($value['work_id'], $param['user_id'], $value['group_id']); } return $data; } /** * 手动设置项目顺序 * * @param $workIds 项目ID数组 * @param $userId 当前用户ID * @author fanqi * @date 2021-03-11 * @return bool */ public function setWorkOrder($workIds, $userId) { $data = []; foreach ($workIds AS $key => $value) { $data[] = [ 'work_id' => $value, 'user_id' => $userId, 'order' => $key + 1 ]; } if (!empty($data)) { if (db('work_order')->where('user_id', $userId)->delete() === false) return false; if (db('work_order')->insertAll($data) === false) return false; } return true; } }