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); } /** * 添加 * @param Request $request * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource|void * @throws \Illuminate\Validation\ValidationException * Author: Mead */ public function store(Request $request) { $this->validate($request, $this->validator->getRules(ValidatorInterface::RULE_CREATE)); try { $data = $request->only(array_keys($this->validator->getRules(ValidatorInterface::RULE_CREATE))); $data['admin_id'] = login_admin_id(); // $data['term_id'] = self::$TERM_ID; $data['status'] = ImportStatusEnum::IMPORT_WAIT; $model = $this->repository->create($data); $this->dispatch(new ImportLessonSchedulesJob($model['id'])); 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 retryImport(Request $request) { $this->validate($request, [ 'id' => 'required' ]); $id = $request->get('id'); $this->dispatch(new ImportLessonSchedulesJob($id)); return Response::success([]); } /** * 详情 * @param $id * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource * Author: Mead */ public function show($id) { $data = $this->repository->find($id); return Response::success($data); } /** * 更新 * @param Request $request * @param $id * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource * @throws \Illuminate\Validation\ValidationException * Author: Mead */ public function update(Request $request, $id) { $this->validate($request, $this->validator->getRules(ValidatorInterface::RULE_UPDATE)); try { $data = $request->only(array_keys($this->validator->getRules(ValidatorInterface::RULE_CREATE))); $data['teacher_admin_id'] = Admin::byTypeIdGetId($data['teacher_id'], Teacher::class); $model = $this->repository->update($data, $id); return Response::success($model); } catch (\Exception $e) { $this->error($e); } } /** * 删除 * @param $id * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource * Author: Mead */ public function destroy($id) { $re = ImportRecord::query()->where('id', $id)->where('status', ImportStatusEnum::MERGE_OK)->exists(); if ($re) { return $this->error('暂不能删除记录'); } 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 * Author: Mead */ public function delete(Request $request) { try { $this->validate($request, [ 'ids' => 'required|array', ]); $ids = $request->get('ids'); $this->repository->whereIn('id', $ids)->delete(); 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 * Author: Mead */ public function selectOptions(Request $request) { $data = $this->repository->skipPresenter()->all(['name', 'no', 'id']); return Response::success($data); } /** * 修改导入状态 * @param Request $request * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource * @throws \Illuminate\Validation\ValidationException */ public function changeStatus(Request $request) { $this->validate($request, [ 'id' => 'required|integer', // 'status' => 'required|integer', ]); $id = $request->get('id'); $importRecordModel = ImportRecord::query()->find($id); if (!$importRecordModel) { return $this->error('找不到该记录'); } if (!in_array($importRecordModel->status, [ImportStatusEnum::MERGE_ERROR, ImportStatusEnum::IMPORT_OK, ImportStatusEnum::CHECK_DATA])) { return $this->error('记录状态不对'); } //合并主库 $is_clash = Schedule::query()->where('import_record_id', $id)->where('status', ModelStatusEnum::OK)->where('is_clash', 1)->exists(); if ($is_clash) { return $this->error('请先处理排班冲突'); } $re = Schedule::checkIsClash($id); if ($re) { return $this->error('请先处理排班冲突'); } $this->dispatch(new MergeLessonSchedulesJob($importRecordModel->id)); return Response::success([]); } /** * 冲突统计 * @param Request $request * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource * @throws \Illuminate\Validation\ValidationException */ public function statistical(Request $request) { $this->validate($request, [ 'id' => 'required|integer', ]); $id = $request->get('id'); $statistical = Schedule::query()->where('import_record_id', $id)->where('is_clash', 1)->select(DB::raw('count(*) as nums,room_id'))->with('room')->groupBy('room_id')->get(); $record_statistical = [ 'nums' => Schedule::query()->where('import_record_id', $id)->where('is_clash', 0)->where('status', ModelStatusEnum::OK)->count(), 'teach_lesson_nums' => Schedule::query()->where('import_record_id', $id)->where('is_clash', 0)->where('status', ModelStatusEnum::OK)->distinct('lesson_teacher_id')->count(), 'teacher_nums' => Schedule::query()->where('import_record_id', $id)->where('is_clash', 0)->where('status', ModelStatusEnum::OK)->distinct('teacher_id')->count(), 'room_nums' => Schedule::query()->where('import_record_id', $id)->where('is_clash', 0)->where('status', ModelStatusEnum::OK)->distinct('room_id')->count(), ]; return Response::success(compact('statistical', 'record_statistical')); } /** * 检查是否冲突 * @param Request $request * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource * @throws \Illuminate\Validation\ValidationException */ public function checkIsClash(Request $request) { $this->validate($request, [ 'id' => 'required|integer', ]); $id = $request->get('id'); $schedules = Schedule::query()->where('status', ModelStatusEnum::OK)->where('import_record_id', $id)->get(); foreach ($schedules as $schedule) { $where = [ 'term_id' => $schedule['term_id'], 'week' => $schedule['week'], 'time_id' => $schedule['time_id'], 'week_index' => $schedule['week_index'], 'room_id' => $schedule['room_id'], ]; $is_clash = 0; if (\App\Repositories\Models\School\LessonSchedule::query()->where($where)->exists()) { $is_clash = 1; } $where['import_record_id'] = $id; if (LessonSchedule::query()->where('import_record_id', $id)->where('id', '<>', $schedule['id'])->where($where)->exists()) { $is_clash = 1; LessonSchedule::query()->where($where)->update(['is_clash' => 1]); } $schedule->is_clash = $is_clash; $schedule->save(); } return Response::success([]); } }