where('userid', $params['userid']); } // 学校筛选 if (!empty($params['schoolid'])) { $query->where('schoolid', $params['schoolid']); } // 校区筛选 if (!empty($params['campusid'])) { $query->where('campusid', $params['campusid']); } // 包含关联信息 $query->with([ 'user:id,username,nickname', 'school:id,name,alias', 'campus:id,name,alias' ]); // 排序 $query->orderBy('schoolid', 'asc') ->orderBy('campusid', 'asc') ->orderBy('userid', 'asc'); return $query->paginate($params['page_size'] ?? 15); } /** * 获取用户的学校校区列表 */ public function getUserSchoolCampuses(int $userId): array { return SystemUserSchoolCampus::where('userid', $userId) ->with([ 'school:id,name,alias', 'campus:id,name,alias' ]) ->get() ->toArray(); } /** * 获取学校的用户列表 */ public function getSchoolUsers(int $schoolId): array { return SystemUserSchoolCampus::where('schoolid', $schoolId) ->with([ 'user:id,username,nickname', 'campus:id,name,alias' ]) ->get() ->toArray(); } /** * 获取校区的用户列表 */ public function getCampusUsers(int $campusId): array { return SystemUserSchoolCampus::where('campusid', $campusId) ->with([ 'user:id,username,nickname', 'school:id,name,alias' ]) ->get() ->toArray(); } /** * 批量分配用户到学校校区 */ public function batchAssignUsersToSchoolCampus(array $userIds, int $schoolId, ?int $campusId = null): array { $results = []; foreach ($userIds as $userId) { // 检查是否已经存在关联 $exists = SystemUserSchoolCampus::where('userid', $userId) ->where('schoolid', $schoolId) ->where('campusid', $campusId ?? 0) ->exists(); if (!$exists) { $data = [ 'userid' => $userId, 'schoolid' => $schoolId, 'campusid' => $campusId ?? 0, ]; $result = $this->create($data); $results[] = $result; } } return $results; } /** * 批量移除用户学校校区关联 */ public function batchRemoveUsersFromSchoolCampus(array $userIds, int $schoolId, ?int $campusId = null): int { $query = SystemUserSchoolCampus::whereIn('userid', $userIds) ->where('schoolid', $schoolId); if ($campusId !== null) { $query->where('campusid', $campusId); } return $query->delete(); } /** * 转移用户到新的学校校区 */ public function transferUserToSchoolCampus(int $userId, int $oldSchoolId, int $newSchoolId, ?int $oldCampusId = null, ?int $newCampusId = null): bool { // 删除旧的关联 $deleteQuery = SystemUserSchoolCampus::where('userid', $userId) ->where('schoolid', $oldSchoolId); if ($oldCampusId !== null) { $deleteQuery->where('campusid', $oldCampusId); } $deleteQuery->delete(); // 创建新的关联 $data = [ 'userid' => $userId, 'schoolid' => $newSchoolId, 'campusid' => $newCampusId ?? 0, ]; $this->create($data); return true; } /** * 获取用户管理的学校ID列表 */ public function getUserSchoolIds(int $userId): array { return SystemUserSchoolCampus::where('userid', $userId) ->pluck('schoolid') ->unique() ->toArray(); } /** * 获取用户管理的校区ID列表 */ public function getUserCampusIds(int $userId): array { return SystemUserSchoolCampus::where('userid', $userId) ->pluck('campusid') ->toArray(); } /** * 检查用户是否管理指定学校 */ public function checkUserManagesSchool(int $userId, int $schoolId): bool { return SystemUserSchoolCampus::where('userid', $userId) ->where('schoolid', $schoolId) ->exists(); } /** * 检查用户是否管理指定校区 */ public function checkUserManagesCampus(int $userId, int $campusId): bool { return SystemUserSchoolCampus::where('userid', $userId) ->where('campusid', $campusId) ->exists(); } /** * 获取用户校区统计信息 */ public function getUserSchoolCampusStats(int $userId): array { $relations = SystemUserSchoolCampus::where('userid', $userId) ->with(['school:id,name', 'campus:id,name']) ->get(); return [ 'total_schools' => $relations->pluck('school')->unique('id')->count(), 'total_campuses' => $relations->where('campusid', '>', 0)->count(), 'schools' => $relations->pluck('school')->unique('id')->values()->toArray(), 'campuses' => $relations->where('campusid', '>', 0)->pluck('campus')->toArray(), ]; } /** * 创建前的特殊处理 */ protected function beforeCreate(array &$data): void { // 设置默认值 $data['campusid'] = $data['campusid'] ?? 0; // 验证用户是否存在 if (!empty($data['userid'])) { $user = \App\Models\User::find($data['userid']); if (!$user) { throw new \InvalidArgumentException('指定的用户不存在'); } } // 验证学校是否存在 if (!empty($data['schoolid'])) { $school = \App\Models\Schools\School::find($data['schoolid']); if (!$school) { throw new \InvalidArgumentException('指定的学校不存在'); } } // 验证校区是否存在 if (!empty($data['campusid']) && $data['campusid'] > 0) { $campus = \App\Models\Schools\SchoolCampus::find($data['campusid']); if (!$campus) { throw new \InvalidArgumentException('指定的校区不存在'); } // 验证校区是否属于指定学校 if ($campus->school_id !== $data['schoolid']) { throw new \InvalidArgumentException('指定的校区不属于该学校'); } } // 检查是否已经存在关联 $exists = SystemUserSchoolCampus::where('userid', $data['userid']) ->where('schoolid', $data['schoolid']) ->where('campusid', $data['campusid']) ->exists(); if ($exists) { throw new \InvalidArgumentException('该用户已经关联了此学校和校区'); } } }