| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 |
- <?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;
- }
- }
|