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 * @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))); $use = $data['use_data']; //验证时间是否合法 $appointments = []; foreach ($use as $u) { if (!Arr::has($u, ['week', 'week_index', 'time_id', 'room_id'])) { return $this->error('参数非法'); } $time = Arr::only($u, ['week', 'week_index', 'time_id', 'room_id']); $is_exists = LessonSchedule::query()->where($time)->where('term_id', self::$TERM_ID)->where('status', ModelStatusEnum::OK)->exists(); if ($is_exists) { return $this->error('该时间段不能预约'); } $time['day'] = LessonSchedule::byTimeGetDate(self::$TERM_ID, $time['week'], $time['week_index']); $time['room_name'] = Room::query()->where('id', $time['room_id'])->value('name'); $time['time_name'] = Time::query()->where('id', $time['time_id'])->value('name'); $appointments[] = $time; } $data['term_id'] = self::$TERM_ID; $data['use_data'] = $appointments; $data['enclosure'] = []; $data['status'] = OpenAppointmentStatusEnum::WAIT_UPLOAD; $data['admin_id'] = login_admin_id(); $model = $this->repository->create($data); return Response::success($model); } /** * 上传附件 * @param Request $request * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource * @throws \Illuminate\Validation\ValidationException */ public function uploadPrint(Request $request) { $this->validate($request, [ 'id' => 'required|integer', 'enclosure' => 'required', ]); $id = $request->get('id'); $model = OpenAppointment::query()->find($id); if (!$model) { return $this->error('找不到该申请记录'); } if ($model->status != OpenAppointmentStatusEnum::WAIT_UPLOAD) { return $this->error('状态不对'); } $model->enclosure = $request->get('enclosure'); $model->status = OpenAppointmentStatusEnum::WAIT; $model->save(); 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)); $data = $request->only(array_keys($this->validator->getRules(ValidatorInterface::RULE_CREATE))); //验证时间是否合法 $use = $data['use_data']; $appointments = []; foreach ($use as $u) { if (!Arr::has($u, ['week', 'week_index', 'time_id', 'room_id'])) { return $this->error('参数非法'); } $time = Arr::only($u, ['week', 'week_index', 'time_id', 'room_id']); $is_exists = LessonSchedule::query()->where($time)->where('term_id', self::$TERM_ID)->where('status', ModelStatusEnum::OK)->exists(); if ($is_exists) { return $this->error('该时间段不能预约'); } $time['day'] = LessonSchedule::byTimeGetDate(self::$TERM_ID, $time['week'], $time['week_index']); $time['room_name'] = Room::query()->where('id', $time['room_id'])->value('name'); $time['time_name'] = Time::query()->where('id', $time['time_id'])->value('name'); $appointments[] = $time; } $data['use_data'] = $appointments; $data['status'] = OpenAppointmentStatusEnum::WAIT; if (empty($data['enclosure'])) { $data['status'] = OpenAppointmentStatusEnum::WAIT_UPLOAD; } try { $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) { $is = OpenAppointment::query()->where('id', $id)->where('status', OpenAppointmentStatusEnum::COMPLETE)->exists(); if ($is) { 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) { $this->validate($request, [ 'ids' => 'required|array', ]); $ids = $request->get('ids'); $is = OpenAppointment::query()->whereIn('id', $ids)->where('status', OpenAppointmentStatusEnum::COMPLETE)->exists(); if ($is) { return $this->error('该申请已经审核完成,暂不能删除'); } try { $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 * @throws \Illuminate\Validation\ValidationException */ public function check(Request $request) { $this->validate($request, [ 'id' => 'required|integer', 'check_status' => 'required|integer', 'check_result' => 'nullable|sometimes', ]); $id = $request->get('id'); $check_status = $request->get('check_status'); $check_result = $request->get('check_result'); $record = OpenAppointment::query()->find($id); if (!$record) { return $this->error('找不到该记录'); } $admin = login_admin(); $role_index = 0; if ($this->iscan([PermissionEnum::controller_openAppointment_check_YX, PermissionEnum::controller_openAppointment_check_SYZX], true)) { $this->validate($request, ['type' => 'required|in:1,2,3']); $type = $request->get('type'); $role_index = $type; } else { $role_index = $admin->can(PermissionEnum::controller_openAppointment_check_SYZX) ? 2 : 0; $role_index += $admin->can(PermissionEnum::controller_openAppointment_check_YX) ? 1 : 0; } $re = (new OpenAppointmentService())->check(self::$TERM_ID, $record, $check_status, $check_result, $role_index); if ($re) { return $this->error($re); } return Response::success([]); } /** * 批量检查 * @param Request $request * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource * @throws \Illuminate\Validation\ValidationException */ public function approveCheck(Request $request) { $this->validate($request, [ 'ids' => 'required|array', 'check_status' => 'required|integer', 'check_result' => 'nullable|sometimes', ]); $ids = $request->get('ids'); $check_status = $request->get('check_status'); $check_result = $request->get('check_result'); $records = OpenAppointment::query()->whereIn('id', $ids)->whereIn('status', [OpenAppointmentStatusEnum::WAIT, OpenAppointmentStatusEnum::SYZX_OK])->get(); if (count($records) != count($ids)) { return $this->error('修改记录中存在不满足条件的'); } //需要检查权限 1:院系审核权限 2:实验室审核权限 3:两者全部权限 $admin = login_admin(); $role_index = 0; if ($this->iscan([PermissionEnum::controller_openAppointment_check_YX, PermissionEnum::controller_openAppointment_check_SYZX])) { $this->validate($request, ['type' => 'required|in:1,2,3']); $type = $request->get('type'); $role_index = $type; } else { $role_index = $admin->can(PermissionEnum::controller_openAppointment_check_SYZX) ? 2 : 0; $role_index += $admin->can(PermissionEnum::controller_openAppointment_check_YX) ? 1 : 0; } foreach ($records as $record) { $re = (new OpenAppointmentService())->check(self::$TERM_ID, $record, $check_status, $check_result, $role_index, true); if ($re) { return $this->error($re); } } DB::beginTransaction(); foreach ($records as $record) { $re = (new OpenAppointmentService())->check(self::$TERM_ID, $record, $check_status, $check_result, $role_index); if ($re) { DB::rollBack(); return $this->error($re); } } DB::commit(); return Response::success([]); } /** * 审核进度 * @param Request $request * @return */ public function checkProgress(Request $request) { $this->validate($request, [ 'id' => 'required|integer', ]); $id = $request->get('id'); $yx = OpenAppointmentLog::query()->where('status', ModelStatusEnum::OK)->where('open_appointment_id', $id)->where('type', ScheduleApproveLog::TYPE_YX)->with(['check_admin'])->select(['id', 'check_admin_id', 'check_time', 'check_status', 'check_result'])->orderByDesc('id')->first(); $syzx = OpenAppointmentLog::query()->where('status', ModelStatusEnum::OK)->where('open_appointment_id', $id)->where('type', ScheduleApproveLog::TYPE_SYZX)->with(['check_admin'])->select(['id', 'check_admin_id', 'check_time', 'check_status', 'check_result'])->orderByDesc('id')->first(); return Response::success(compact('yx', 'syzx')); } /** * 暂停 * @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', ]); $status = OpenAppointmentStatusEnum::CLOSE; $model = OpenAppointment::query()->where('id', $request->get('id'))->first(); if (in_array($model->sattus, [OpenAppointmentStatusEnum::COMPLETE, OpenAppointmentStatusEnum::OPERATION_ERROR])) { return $this->error('该状态不能关闭申请'); } $model->status = $status; $re = $model->save(); if ($re) { return Response::success([]); } return $this->error('操作失败'); } /** * 下载申请表 * @param Request $request * @return \Illuminate\Http\JsonResponse|void * @throws \Illuminate\Validation\ValidationException */ public function downPrint(Request $request) { $this->validate($request, [ 'id' => 'required|integer', ]); $id = $request->get('id'); $model = OpenAppointment::query()->find($id); if (!$model) { return $this->error('找不到该申请记录'); } $type = $model->template; $path = base_path("public/template/lab/template_p_{$type}.docx"); $is = file_exists($path); if (!$is) { return $this->error('模板文件找不到'); } try { $template = new TemplateProcessor($path); // $phpWord = new PhpWord(); // $template = $phpWord->loadTemplate($path); //初始化模板 // $template = $phpWord->loadTemplate($path); //初始化模板 $template->setValue('department', $model->department); $template->setValue('name', $model->applicant_name); $template->setValue('mobile', $model->applicant_mobile); $template->setValue('nums', $model->use_people_nums); $template->setValue('use_reason', $model->use_reason); $template->setValue('use_need', $model->use_need); if (is_array($model->use_data)) { $labs = array_unique(array_column($model->use_data, 'room_name')); $template->setValue('use_labs', arr2str($labs)); $template->setValue('lab_nums', count($labs)); $table = new Table(['borderSize' => 5, 'width' => 5500, 'unit' => TblWidth::AUTO, 'alignMent' => 'center']); foreach ($model->use_data as $r => $time) { if ($r == 0) { $table->addRow(); $table->addCell(3000)->addText('实验室'); $table->addCell(1500)->addText('日期'); $table->addCell(1000)->addText('节次'); } $table->addRow(); $table->addCell(3000)->addText($time['room_name']); $table->addCell(1500)->addText($time['day']); $table->addCell(1000)->addText($time['time_name']); } $template->setComplexBlock('use_times', $table); } $filename = date('Y-m-d') . '.docx'; header('Content-Type: application/vnd.ms-word'); header('Content-Disposition: attachment;filename=' . $filename); header('Cache-Control: max-age=0'); $template->saveAs('php://output');//直接下载 } catch (\Exception $exception) { dd($exception); } } }