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 $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 * @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'); $record = ScheduleApproveRecord::query()->find($id); $check_status = $request->get('check_status'); $check_result = $request->get('check_result'); if (!$record) { return $this->error('找不到该记录'); } //需要检查权限 1:院系审核权限 2:实验室审核权限 3:两者全部权限 $admin = login_admin(); $role_index = 0; if ($this->iscan([PermissionEnum::controller_schedule_check_YX, PermissionEnum::controller_schedule_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_schedule_check_SYZX) ? 2 : 0; $role_index += $admin->can(PermissionEnum::controller_schedule_check_YX) ? 1 : 0; } $re = (new ScheduleService())->check(self::$TERM_ID, $record, $check_status, $check_result, $role_index); if ($re) { return $this->error($re); } return Response::success([]); } /** * 审核进度 * @param Request $request * @return */ public function checkProgress(Request $request) { $this->validate($request, [ 'id' => 'required|integer', ]); $id = $request->get('id'); $yx = ScheduleApproveLog::query()->where('status', ModelStatusEnum::OK)->where('schedule_approve_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 = ScheduleApproveLog::query()->where('status', ModelStatusEnum::OK)->where('schedule_approve_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 $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', 'type' => 'sometimes|nullable|integer', ]); $status = ModelStatusEnum::PAUSE; if ($request->get('type')) { $status = ModelStatusEnum::OK; } $re = ScheduleApproveRecord::query()->where('id', $request->get('id'))->update(['status' => $status]); if ($re) { return Response::success([]); } return $this->error('操作失败'); } /** * 停调课申请记录导出 * @param Request $request * @return \Symfony\Component\HttpFoundation\BinaryFileResponse * @throws \Illuminate\Validation\ValidationException */ public function approveRecordExport(Request $request) { $this->validate($request, [ 'room_id' => 'sometimes|integer', 'status' => 'sometimes|integer', 'type' => 'sometimes|integer', ]); $this->isCan(PermissionEnum::controller_schedule_recordExport); $room_id = $request->get('room_id', false); $status = $request->get('status', false); $type = $request->get('type', false); $file_name = '停调补课记录_' . Str::random(8) . '.xlsx'; return Excel::download(new ApproveRecordExport(self::$TERM_ID, $room_id, $status, $type), $file_name); } /** * 批量审核 * @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 = ScheduleApproveRecord::query()->whereIn('id', $ids)->whereIn('status', [LessonScheduleApproveStatusEnum::WAIT, LessonScheduleApproveStatusEnum::YX_OK, LessonScheduleApproveStatusEnum::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_schedule_check_YX, PermissionEnum::controller_schedule_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_schedule_check_SYZX) ? 2 : 0; $role_index += $admin->can(PermissionEnum::controller_schedule_check_YX) ? 1 : 0; } foreach ($records as $record) { $re = (new ScheduleService())->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 ScheduleService())->check(self::$TERM_ID, $record, $check_status, $check_result, $role_index); if ($re) { DB::rollBack(); return $this->error($re); } } DB::commit(); return Response::success([]); } }