repository = $repository; $this->validator = $validator; } /** * 列表 * @param Request $request * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource * Author: Mead */ public function index(Request $request) { $lists = $this->repository->paginate($request->get('per_page', self::PAGE_NUM)); return Response::success($lists); } /** * 选项 * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource */ public function selectOptions() { $lists = $this->repository->skipPresenter()->select(['id', 'teacher_admin_id', 'grade_id', 'lesson_id'])->with(['teacher', 'lesson', 'grade'])->where('status', ModelStatusEnum::OK)->get(); return Response::success($lists); } /** * 添加课程 * @param Request $request * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource * @throws \Illuminate\Validation\ValidationException */ public function store(Request $request) { $this->validate($request, $this->validator->getRules(ValidatorInterface::RULE_CREATE)); $data = $request->only(array_keys($this->validator->getRules(ValidatorInterface::RULE_CREATE))); $this->isCan(PermissionEnum::controller_teachLesson_add); //验证是否为管理员 $admin = login_admin(); //验证是否有选择任课老师的权限 $this->validate($request, ['teacher_admin_id' => 'required|integer|gte:1']); $data['teacher_id'] = Admin::query()->where('id', $data['teacher_admin_id'])->where('type', Teacher::class)->value('type_id') ?? 0; $lesson = false; switch ($data['type']) { case 1: //新申请 $this->validate($request, [ 'lesson.name' => 'required', // 'lesson.type' => 'required|in:1,2', 'lesson.category_id' => 'required|integer', 'lesson.lesson_hour' => 'required|integer', 'lesson.credit' => 'required|integer', 'lesson.body' => 'sometimes', 'teacher_id' => 'required|integer', ]); $lessonData = $request->get('lesson'); $lesson = Lesson::query()->create([ 'name' => $lessonData['name'], // 'type' => $lessonData['type'], 'category_id' => $lessonData['category_id'], 'lesson_hour' => $lessonData['lesson_hour'], 'credit' => $lessonData['credit'], 'term_id' => self::$TERM_ID, 'status' => ModelStatusEnum::PAUSE, 'admin_id' => login_admin_id(), 'body' => $lessonData['body'], ]); break; case 2: $this->validate($request, [ 'lesson_id' => 'required|integer', ]); //复用 $lesson = Lesson::query()->where('id', $request->get('lesson_id'))->where('status', ModelStatusEnum::OK)->first(); if (!$lesson) { return $this->error('找不到该课'); } break; } $data['lesson_id'] = $lesson->id; $where = Arr::only($data, ['lesson_id', 'teacher_id', 'term_id']); if (LessonTeacher::query()->where($where)->where('status', ModelStatusEnum::OK)->exists()) { return $this->error('请勿重复添加'); } // $data['lesson_type'] = $lesson->type; $data['admin_id'] = $admin['id']; $data['term_id'] = self::$TERM_ID; $data['status'] = ModelStatusEnum::OK; $model = LessonTeacher::query()->create($data); return Response::success($model); } /** * 修改 * @param Request $request * @param $id * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource * @throws \Illuminate\Validation\ValidationException */ public function update(Request $request, $id) { $this->validate($request, $this->validator->getRules(ValidatorInterface::RULE_UPDATE)); $data = $request->only(array_keys($this->validator->getRules(ValidatorInterface::RULE_UPDATE))); $this->isCan(PermissionEnum::controller_teachLesson_add); $model = LessonTeacher::query()->where('id', $id)->first(); if (!$model) { return $this->error('找不该课程'); } //验证是否为管理员 $admin = login_admin(); //验证是否有选择任课老师的权限 $this->validate($request, ['teacher_admin_id' => 'required|integer']); // $data['teacher_admin_id'] = Teacher::byIdGetUserId($data['teacher_id']); $data['teacher_id'] = Admin::query()->where('id', $data['teacher_admin_id'])->where('type', Teacher::class)->value('type_id') ?? 0; $lesson = false; switch ($model->type) { case 1: //新申请 $this->validate($request, [ 'lesson.id' => 'required', 'lesson.name' => 'required', // 'lesson.type' => 'required|in:1,2', 'lesson.category_id' => 'required|integer', 'lesson.lesson_hour' => 'required|integer', 'lesson.credit' => 'required|integer', 'lesson.body' => 'sometimes', ]); $lessonData = $request->get('lesson'); $lesson = Lesson::query()->where('id', $model->lesson_id)->where('status', ModelStatusEnum::PAUSE)->first(); if (!$lesson) { return $this->error('找不到该课程'); } $lesson->fill([ 'name' => $lessonData['name'], 'type' => $lessonData['type'], 'category_id' => $lessonData['category_id'], 'lesson_hour' => $lessonData['lesson_hour'], 'credit' => $lessonData['credit'], 'term_id' => self::$TERM_ID, 'status' => ModelStatusEnum::PAUSE, 'admin_id' => login_admin_id(), 'body' => $lessonData['body'], ]); $lesson->save(); break; case 2: $this->validate($request, [ 'lesson_id' => 'required|integer', ]); //复用 $lesson = Lesson::query()->where('id', $request->get('lesson_id'))->where('status', ModelStatusEnum::OK)->first(); if (!$lesson) { return $this->error('找不到该课'); } break; } $model->grade_id = $data['grade_id']; $model->teacher_admin_id = $data['teacher_admin_id']; $model->teacher_id = $data['teacher_id']; $model->student_nums = $data['student_nums']; $model->save(); return Response::success($model); } /** * 暂停 * @param Request $request * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource * @throws \Illuminate\Validation\ValidationException */ public function pause(Request $request) { $this->isCan(PermissionEnum::controller_teachLesson_del); $this->validate($request, [ 'id' => 'required|integer', 'type' => 'sometimes|nullable|integer', ]); $status = ModelStatusEnum::PAUSE; if ($request->get('type')) { $status = ModelStatusEnum::OK; } $re = LessonTeacher::query()->where('id', $request->get('id'))->update(['status' => $status]); if ($re) { return Response::success([]); } return $this->error('操作失败'); } /** * 删除 * @param $id * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource * Author: Mead */ public function destroy($id) { $this->isCan(PermissionEnum::controller_teachLesson_del); 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); } } }