repository = $repository; $this->validator = $validator; } /** * 排班列表 * @param Request $request * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource */ public function index(Request $request) { $lists = $this->repository->paginate($request->get('per_page', self::PAGE_NUM)); return Response::success($lists); } /** * 排班列表 * @param Request $request * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource */ public function lists(Request $request) { $lists = $this->repository->all(); return Response::success($lists); } /** * 详情 * @param $id * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource */ public function show($id) { $data = $this->repository->find($id); return Response::success($data); } /** * 删除 * @param $id * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource * Author: Mead */ public function destroy($id) { try { $this->repository->skipPresenter()->delete($id); return Response::success(null, T('successfully delete.')); } catch (\Exception $exception) { return Response::fail(T('Delete failed.'), ResponseCodeEnum::SERVICE_UPDATE_DATA_ERROR); } } /** * 暂停 * @param Request $request * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource * @throws \Illuminate\Validation\ValidationException */ public function pause(Request $request) { $this->validate($request, [ 'id' => 'required|integer', ]); $re = Schedule::query()->where('id', $request->get('id'))->update(['status' => ModelStatusEnum::PAUSE]); if ($re) { return Response::success([]); } return $this->error('操作失败'); } /** * 实时课表 * @param Request $request * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource */ public function calendar(Request $request) { $this->validate($request, [ // 'term_id' => 'required|integer', 'id' => 'required|integer', 'week' => 'required|integer', 'room_id' => 'required|integer', ]); $term_id = self::$TERM_ID; $id = $request->get('id', false); $week = $request->get('week', 1); $room_id = $request->get('room_id', false); $teacher_id = $request->get('teacher_id', false); $lesson_id = $request->get('lesson_id', false); $importRecordModel = ImportRecord::query()->find($id); if (!$importRecordModel) { return $this->error('找不到该记录'); } $term = Term::byId($importRecordModel->term_id); $firstWeekDay = Carbon::parse($term->start_date)->addWeeks($week - 1)->toDateString(); $lessonModel = Schedule::query() ->where('import_record_id', $id) ->where('term_id', $term_id) ->when($room_id, function ($query) use ($room_id) { return $query->where('room_id', $room_id); }) ->with(['lesson', 'teacher', 'grade', 'room']) ->orderBy('week_index') ->where('week', $week); $mainLessonModel = \App\Repositories\Models\School\LessonSchedule::query() ->where('term_id', $term_id) ->when($room_id, function ($query) use ($room_id) { return $query->where('room_id', $room_id); }) ->with(['lesson', 'teacher', 'grade', 'room']) ->orderBy('week_index') ->where('week', $week); $times = Time::query()->where('status', ModelStatusEnum::OK)->orderBy('start_time')->select(['id', 'name'])->get(); $headers = []; $calendar = []; foreach ($times as $k => $time) { $lists = []; for ($i = 0; $i < 7; $i++) { if (!$k) { $date = Carbon::parse($firstWeekDay)->addDays($i); $headers[] = [ 'week' => LessonSchedule::toWeekIndex($date->dayOfWeek), 'day' => $date->toDateString(), ]; } $model = $lessonModel->clone(); $mainModel = $mainLessonModel->clone(); $lists[$i]['is_main_lesson'] = false; $lists[$i]['is_maintain'] = false; $lists[$i]['is_lesson'] = false; $mainLesson = $mainModel->where('status', LessonScheduleStatusEnum::OK)->where('week_index', $i)->where('time_id', $time['id'])->first(); // if ($mainLesson) { // $lists[$i]['is_main_lesson'] = true; // $lists[$i]['main_lesson'] = [ // 'teach_title' => $mainLesson->teach_title, // 'id' => $mainLesson->id, // 'lesson' => $mainLesson->lesson, // 'teacher' => $mainLesson->teacher, // 'grade' => $mainLesson->grade, // 'group_name' => $mainLesson->group_name, // 'is_clash' => $mainLesson->is_clash, // 'student_nums' => $mainLesson->student_nums, // 'type' => $mainLesson->type, // ]; // } else { // $is_maintain = Maintain::query()->where('term_id', $term_id)->where('status', ModelStatusEnum::OK)->where('week', $week)->where('week_index', $i)->where('room_id', $room_id)->where('time_id', $time['id'])->value('id'); // if ($is_maintain) $lists[$i]['is_maintain'] = $is_maintain; // } if ($mainLesson) { switch ($mainLesson->type) { case ScheduleTypeEnum::LESSON: $lists[$i]['is_main_lesson'] = true; // $lists[$i]['is_main_lesson'] = $mainLesson->migrate_id ? true : false; $lists[$i]['main_lesson'] = [ 'teach_title' => $mainLesson->teach_title, 'id' => $mainLesson->id, 'lesson' => $mainLesson->lesson, 'teacher' => $mainLesson->teacher, 'grade' => $mainLesson->grade, 'group_name' => $mainLesson->group_name, 'migrate_id' => $mainLesson->migrate_id, 'student_nums' => $mainLesson->student_nums, // 'is_stop_lesson' => $is_stop_lesson, 'type_id' => $mainLesson->type_id ]; break; case ScheduleTypeEnum::MAINTAIN: $lists[$i]['is_maintain'] = $mainLesson->type_id; break; case ScheduleTypeEnum::OPEN_APPOINTMENT: $lists[$i]['is_open_appointment'] = $mainLesson->type_id; $lists[$i]['open_appointment'] = OpenAppointment::query()->with(['admin'])->where('id', $mainLesson->type_id)->select(['id', 'department', 'applicant_name', 'applicant_mobile', 'admin_id', 'use_reason'])->first(); break; } } $lessons = $model->where('status', LessonScheduleStatusEnum::OK)->where('week_index', $i)->where('time_id', $time['id'])->get(); if ($lessons->isNotEmpty()) { $lists[$i]['is_lesson'] = true; foreach ($lessons as $lesson) { $lists[$i]['lesson'][] = [ 'teach_title' => $lesson->teach_title, 'id' => $lesson->id, 'lesson' => $lesson->lesson, 'teacher' => $lesson->teacher, 'grade' => $lesson->grade, 'group_name' => $lesson->group_name, 'is_clash' => $lesson->is_clash, 'student_nums' => $lesson->student_nums, ]; } } } $calendar[$k] = $lists; } return Response::success(compact('calendar', 'headers', 'week', 'times')); } /** * 实时课表 * @param Request $request * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource */ public function calendarSimple(Request $request) { $this->validate($request, [ 'id' => 'required|integer', 'week' => 'required|integer', 'room_id' => 'required|integer', ]); $term_id = self::$TERM_ID; $id = $request->get('id', false); $week = $request->get('week', 1); $room_id = $request->get('room_id', false); $importRecordModel = ImportRecord::query()->find($id); if (!$importRecordModel) { return $this->error('找不到该记录'); } $term = Term::byId($importRecordModel->term_id); $firstWeekDay = Carbon::parse($term->start_date)->addWeeks($week - 1)->toDateString(); $lessonModel = Schedule::query() ->where('import_record_id', $id) ->where('term_id', $term_id) ->when($room_id, function ($query) use ($room_id) { return $query->where('room_id', $room_id); }) // ->with(['lesson', 'teacher', 'grade', 'room']) ->orderBy('week_index') ->where('week', $week); $mainLessonModel = \App\Repositories\Models\School\LessonSchedule::query() ->where('term_id', $term_id) ->when($room_id, function ($query) use ($room_id) { return $query->where('room_id', $room_id); }) ->with(['lesson', 'teacher', 'grade', 'room']) ->orderBy('week_index') ->where('week', $week); $times = Time::query()->where('status', ModelStatusEnum::OK)->orderBy('start_time')->select(['id', 'name'])->get(); $headers = []; $calendar = []; for ($i = 0; $i < 7; $i++) { $date = Carbon::parse($firstWeekDay)->addDays($i); $week_index = LessonSchedule::toWeekIndex($date->dayOfWeek); $headers[] = [ 'week' => $week_index, 'day' => $date->toDateString(), ]; $lists = []; foreach ($times as $key => $time) { $model = $lessonModel->clone(); $mainModel = $mainLessonModel->clone(); $is_lesson = $model->where('status', LessonScheduleStatusEnum::OK)->where('week_index', $i)->where('time_id', $time['id'])->exists(); $is_main_lesson = $mainModel->where('status', LessonScheduleStatusEnum::OK)->where('week_index', $i)->where('time_id', $time['id'])->exists(); $lists[$key]['is_lesson'] = $is_lesson; $lists[$key]['is_main_lesson'] = $is_main_lesson; $lists[$key]['is_maintain_lesson'] = false; if (!$is_main_lesson) { $is_maintain = Maintain::query()->where('term_id', $term_id)->where('status', ModelStatusEnum::OK)->where('week', $week)->where('week_index', $i)->where('room_id', $room_id)->where('time_id', $time['id'])->exists(); $lists[$key]['is_maintain_lesson'] = $is_maintain; } } $calendar[] = [ 'day' => $date->toDateString(), 'week' => $week, 'week_index' => $week_index, 'lists' => $lists ]; } return Response::success(compact('calendar', 'headers', 'week', 'times')); } /** * 创建 * @param Request $request * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource|void * @throws \Illuminate\Validation\ValidationException * Author: Mead */ public function storeSchedule(Request $request) { $this->validate($request, [ 'import_record_id' => 'required|integer', 'lesson_teacher_id' => 'required|integer', 'room_id' => 'required|integer', 'time_id' => 'required|integer', 'day' => 'required|date', 'teach_title' => 'sometimes|nullable', // 'class_hour' => 'required|integer', 'group' => 'required|integer', 'student_nums' => 'required|integer', ]); $lesson_teacher_id = $request->get('lesson_teacher_id', false); $import_record_id = $request->get('import_record_id', false); $importRecordModel = ImportRecord::query()->find($import_record_id); if (!$importRecordModel) { return $this->error('找不到该记录'); } $lessonTeacher = null; if ($lesson_teacher_id) { $lessonTeacher = LessonTeacher::query()->find($lesson_teacher_id); if (!$lessonTeacher) { return $this->error('找不到任课记录'); } } else { $this->validate($request, [ 'lesson_teacher.lesson_id' => 'required|integer', 'lesson_teacher.teacher_admin_id' => 'required|integer', 'lesson_teacher.grade_id' => 'required|integer', ]); } $day = $request->get('day'); $time_id = $request->get('time_id'); $data = $request->only(['teach_title', 'group', 'student_nums', 'time_id', 'room_id', 'day']); $data['import_record_id'] = $importRecordModel->id; $week = Schedule::byDateGetWeek($importRecordModel->term_id, $day); $data['week'] = $week['week']; $data['week_index'] = $week['week_index']; $data['term_id'] = $importRecordModel->term_id; $data['teach_type'] = TeachTypeEnum::SJ; $data['class_hour'] = Time::byIdGetHour($time_id); //判断是否有课 $where = Arr::only($data, ['term_id', 'week', 'week_index', 'room_id', 'time_id']); $is_exist = Schedule::query()->where('import_record_id', $import_record_id)->where('status', LessonScheduleStatusEnum::OK)->where($where)->exists(); if ($is_exist) { return $this->error('该时间段已有课!'); } $is_t_exist = \App\Repositories\Models\School\LessonSchedule::query()->where($where)->where('status', ModelStatusEnum::OK)->exists(); if ($is_t_exist) { return $this->error('该时间段已有课程'); } $is_m_exist = Maintain::query()->where($where)->where('status', ModelStatusEnum::OK)->exists(); if ($is_m_exist) { return $this->error('该时间段暂不能用'); } if (!$lesson_teacher_id) { $d = $request->get('lesson_teacher'); $teacher_id = Admin::byIdGetTypeId($d['teacher_admin_id'], Teacher::class); $lessonTeacher = LessonTeacher::query()->firstOrCreate([ 'term_id' => $data['term_id'], 'grade_id' => $d['grade_id'], 'lesson_id' => $d['lesson_id'], 'teacher_admin_id' => $d['teacher_admin_id'], 'status' => ModelStatusEnum::OK, ], [ 'teacher_id' => $teacher_id, 'student_nums' => $data['student_nums'], 'import_record_id' => $data['import_record_id'], ]); } unset($data['lesson_teacher']); $data['lesson_teacher_id'] = $lessonTeacher->teacher_id; $data['teach_teacher_ids'] = [$lessonTeacher->teacher_id]; $data['teacher_admin_id'] = $lessonTeacher->teacher_admin_id; $data['teacher_id'] = $lessonTeacher->teacher_id; $data['grade_id'] = $lessonTeacher->grade_id; $data['lesson_id'] = $lessonTeacher->lesson_id; $data['admin_id'] = login_admin_id(); try { $model = Schedule::query()->create($data); return Response::success($model); } catch (\Exception $e) { return $this->error($e); } } /** * 更新 * @param Request $request * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource * @throws \Illuminate\Validation\ValidationException */ public function updateSchedule(Request $request) { $this->validate($request, [ 'id' => 'required|integer', 'room_id' => 'required|integer', // 'week' => 'sometimes|integer', // 'week_index' => 'sometimes|integer', 'time_id' => 'required|integer', 'day' => 'required|date', ]); $id = $request->get('id'); $room_id = $request->get('room_id'); // $week = $request->get('week'); $time_id = $request->get('time_id'); $day = $request->get('day'); $lessonScheduleModel = Schedule::query()->find($id); if (!$lessonScheduleModel) { return $this->error('找不到该记录'); } $weekData = \App\Repositories\Models\School\LessonSchedule::byDateGetWeek($lessonScheduleModel->term_id, $day); //判断是否有课 $migrate_where = ['week' => $weekData['week'], 'time_id' => $time_id, 'week_index' => $weekData['week_index'], 'room_id' => $room_id, 'time_id' => $time_id]; //查看当前调课是否存在课程 $is_t_exist = \App\Repositories\Models\School\LessonSchedule::query()->where($migrate_where)->where('status', ModelStatusEnum::OK)->exists(); if ($is_t_exist) { return $this->error('该时间段已有课程'); } $is_t_exist = Schedule::query()->where('import_record_id', $lessonScheduleModel->import_record_id)->where($migrate_where)->where('status', ModelStatusEnum::OK)->exists(); if ($is_t_exist) { return $this->error('该时间段已有课'); } $is_m_exist = Maintain::query()->where($migrate_where)->where('status', ModelStatusEnum::OK)->exists(); if ($is_m_exist) { return $this->error('该时间段暂不能用'); } $lessonScheduleModel->day = $day; $lessonScheduleModel->week = $weekData['week']; $lessonScheduleModel->week_index = $weekData['week_index']; $lessonScheduleModel->room_id = $room_id; $lessonScheduleModel->time_id = $time_id; $lessonScheduleModel->is_clash = 0; $lessonScheduleModel->save(); return Response::success([]); } /** * 删除 * @param Request $request * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource * @throws \Illuminate\Validation\ValidationException */ public function delSchedule(Request $request) { $this->validate($request, [ 'id' => 'required|integer', ]); $id = $request->get('id'); $lessonScheduleModel = Schedule::query()->find($id); if (!$lessonScheduleModel) { return $this->error('找不到该记录'); } $lessonScheduleModel->delete(); return Response::success([]); } }