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