where('teacher_id', $params['teacher_id']); } // 学校筛选 if (!empty($params['school_id'])) { $query->where('school_id', $params['school_id']); } // 班级筛选 if (!empty($params['class_id'])) { $query->where('class_id', $params['class_id']); } // 年级筛选 if (!empty($params['grade_id'])) { $query->where('grade_id', $params['grade_id']); } // 班主任筛选 if (isset($params['headman'])) { $query->where('headman', $params['headman']); } // 包含关联信息 $query->with([ 'teacher:id,username,nickname', 'school:id,name,alias', 'schoolClass:id,name,code,campus_id,grade_id,number' ]); // 排序 $query->orderBy('school_id', 'asc') ->orderBy('grade_id', 'asc') ->orderBy('class_id', 'asc') ->orderBy('headman', 'desc'); return $query->paginate($params['page_size'] ?? 15); } /** * 获取老师的班级列表 */ public function getTeacherClasses(int $teacherId): array { return TeacherClass::where('teacher_id', $teacherId) ->with([ 'school:id,name,alias', 'schoolClass:id,name,code,campus_id,grade_id,number' ]) ->get() ->toArray(); } /** * 获取班级的老师列表 */ public function getClassTeachers(int $classId): array { return TeacherClass::where('class_id', $classId) ->with([ 'teacher:id,username,nickname', 'school:id,name,alias' ]) ->get() ->toArray(); } /** * 获取学校的老师列表 */ public function getSchoolTeachers(int $schoolId): array { return TeacherClass::where('school_id', $schoolId) ->with([ 'teacher:id,username,nickname', 'schoolClass:id,name,code,campus_id,grade_id,number' ]) ->get() ->toArray(); } /** * 获取班主任列表 */ public function getHeadmans(?int $schoolId = null, ?int $gradeId = null): array { $query = TeacherClass::headman(); if ($schoolId) { $query->where('school_id', $schoolId); } if ($gradeId) { $query->where('grade_id', $gradeId); } return $query->with([ 'teacher:id,username,nickname', 'school:id,name,alias', 'schoolClass:id,name,code,campus_id,grade_id,number' ])->get()->toArray(); } /** * 批量分配老师到班级 */ public function batchAssignTeachersToClass(array $teacherIds, int $classId, ?int $gradeId = null): array { $class = \App\Models\Schools\SchoolClass::findOrFail($classId); $results = []; foreach ($teacherIds as $teacherId) { // 检查是否已经存在关联 $exists = TeacherClass::where('teacher_id', $teacherId) ->where('class_id', $classId) ->exists(); if (!$exists) { $data = [ 'teacher_id' => $teacherId, 'school_id' => $class->school_id, 'grade_id' => $gradeId ?? $class->grade_id, 'class_id' => $classId, 'headman' => 0, ]; $result = $this->create($data); $results[] = $result; } } return $results; } /** * 批量移除老师班级关联 */ public function batchRemoveTeachersFromClass(array $teacherIds, int $classId): int { return TeacherClass::whereIn('teacher_id', $teacherIds) ->where('class_id', $classId) ->delete(); } /** * 设置班主任 */ public function setHeadman(int $teacherId, int $classId): bool { // 先清除该班级的所有班主任 TeacherClass::where('class_id', $classId)->update(['headman' => 0]); // 设置新的班主任 $teacherClass = TeacherClass::where('teacher_id', $teacherId) ->where('class_id', $classId) ->first(); if (!$teacherClass) { throw new \InvalidArgumentException('该老师不在此班级中'); } $teacherClass->headman = 1; return $teacherClass->save(); } /** * 取消班主任 */ public function removeHeadman(int $classId): bool { return TeacherClass::where('class_id', $classId) ->update(['headman' => 0]) > 0; } /** * 获取老师班级统计信息 */ public function getTeacherClassStats(int $teacherId): array { $classes = TeacherClass::where('teacher_id', $teacherId) ->with(['school:id,name', 'schoolClass:id,name']) ->get(); return [ 'total_classes' => $classes->count(), 'headman_classes' => $classes->where('headman', 1)->count(), 'schools' => $classes->pluck('school')->unique('id')->values()->toArray(), 'classes' => $classes->pluck('schoolClass')->toArray(), ]; } /** * 创建前的特殊处理 */ protected function beforeCreate(array &$data): void { // 设置默认值 $data['headman'] = $data['headman'] ?? 0; // 验证老师是否存在 if (!empty($data['teacher_id'])) { $teacher = \App\Models\User::find($data['teacher_id']); if (!$teacher) { throw new \InvalidArgumentException('指定的老师不存在'); } } // 验证学校是否存在 if (!empty($data['school_id'])) { $school = \App\Models\Schools\School::find($data['school_id']); if (!$school) { throw new \InvalidArgumentException('指定的学校不存在'); } } // 验证班级是否存在 if (!empty($data['class_id'])) { $class = \App\Models\Schools\SchoolClass::find($data['class_id']); if (!$class) { throw new \InvalidArgumentException('指定的班级不存在'); } // 验证班级是否属于指定学校 if (isset($data['school_id']) && $class->school_id !== $data['school_id']) { throw new \InvalidArgumentException('指定的班级不属于该学校'); } } // 检查是否已经存在关联 $exists = TeacherClass::where('teacher_id', $data['teacher_id']) ->where('class_id', $data['class_id']) ->exists(); if ($exists) { throw new \InvalidArgumentException('该老师已经在此班级中'); } } }