ScheduleController.php 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612
  1. <?php
  2. namespace App\Http\Controllers\Admin\School;
  3. use App\Contracts\Repositories\School\LessonScheduleRepository;
  4. use App\Exports\School\ScheduleExport;
  5. use App\Http\Controllers\Controller;
  6. use App\Repositories\Enums\ModelStatusEnum;
  7. use App\Repositories\Enums\PermissionEnum;
  8. use App\Repositories\Enums\ResponseCodeEnum;
  9. use App\Repositories\Enums\School\LessonScheduleApproveStatusEnum;
  10. use App\Repositories\Enums\School\LessonScheduleStatusEnum;
  11. use App\Repositories\Enums\School\ScheduleRecordSourceTypeEnum;
  12. use App\Repositories\Enums\School\ScheduleRecordTypeEnum;
  13. use App\Repositories\Enums\School\ScheduleTypeEnum;
  14. use App\Repositories\Enums\School\TeachTypeEnum;
  15. use App\Repositories\Models\Base\Admin;
  16. use App\Repositories\Models\Lab\Maintain;
  17. use App\Repositories\Models\Lab\OpenAppointment;
  18. use App\Repositories\Models\School\LessonSchedule;
  19. use App\Repositories\Models\School\LessonTeacher;
  20. use App\Repositories\Models\School\ScheduleApproveRecord;
  21. use App\Repositories\Models\School\Teacher;
  22. use App\Repositories\Models\School\Term;
  23. use App\Repositories\Models\School\Time;
  24. use App\Repositories\Presenters\School\LessonSchedulePresenter;
  25. use App\Repositories\Validators\School\LessonScheduleValidator;
  26. use Carbon\Carbon;
  27. use Illuminate\Http\Request;
  28. use Illuminate\Support\Arr;
  29. use Illuminate\Support\Str;
  30. use Jiannei\Response\Laravel\Support\Facades\Response;
  31. use Maatwebsite\Excel\Facades\Excel;
  32. use Prettus\Validator\Contracts\ValidatorInterface;
  33. /**
  34. * Class RoomsController.
  35. *
  36. * @package namespace App\Http\Controllers\School;
  37. */
  38. class ScheduleController extends Controller
  39. {
  40. /**
  41. * @var LessonScheduleRepository
  42. */
  43. protected $repository;
  44. /**
  45. * @var LessonScheduleValidator
  46. */
  47. protected $validator;
  48. /**
  49. * LessonsController constructor.
  50. *
  51. * @param LessonScheduleRepository $repository
  52. * @param LessonScheduleValidator $validator
  53. */
  54. public function __construct(LessonScheduleRepository $repository, LessonScheduleValidator $validator)
  55. {
  56. parent::__construct();
  57. $this->repository = $repository;
  58. $this->validator = $validator;
  59. }
  60. /**
  61. * 排班列表
  62. * @param Request $request
  63. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  64. */
  65. public function index(Request $request)
  66. {
  67. $this->isCan(PermissionEnum::controller_schedule_list);
  68. $lists = $this->repository->paginate($request->get('per_page', self::PAGE_NUM));
  69. return Response::success($lists);
  70. }
  71. /**
  72. * 排班列表
  73. * @param Request $request
  74. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  75. */
  76. public function lists(Request $request)
  77. {
  78. $this->isCan(PermissionEnum::controller_schedule_list);
  79. $lists = $this->repository->all();
  80. return Response::success($lists);
  81. }
  82. /**
  83. * 详情
  84. * @param $id
  85. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  86. */
  87. public function show($id)
  88. {
  89. $data = $this->repository->find($id);
  90. return Response::success($data);
  91. }
  92. /**
  93. * 删除
  94. * @param $id
  95. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  96. * Author: Mead
  97. */
  98. public function destroy($id)
  99. {
  100. $this->isCan(PermissionEnum::controller_schedule_del);
  101. try {
  102. $this->repository->skipPresenter()->delete($id);
  103. return Response::success(null, T('successfully delete.'));
  104. } catch (\Exception $exception) {
  105. return Response::fail(T('Delete failed.'), ResponseCodeEnum::SERVICE_UPDATE_DATA_ERROR);
  106. }
  107. }
  108. /**
  109. * 批量删除
  110. * @param Request $request
  111. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  112. * Author: Mead
  113. */
  114. public function delete(Request $request)
  115. {
  116. $this->isCan(PermissionEnum::controller_schedule_del);
  117. try {
  118. $this->validate($request, [
  119. 'ids' => 'required|array',
  120. ]);
  121. $ids = $request->get('ids');
  122. $this->repository->whereIn('id', $ids)->delete();
  123. return Response::success(null, T('successfully delete.'));
  124. } catch (\Exception $exception) {
  125. return Response::fail(T('Delete failed.'), ResponseCodeEnum::SERVICE_UPDATE_DATA_ERROR);
  126. }
  127. }
  128. /**
  129. * 创建
  130. * @param Request $request
  131. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource|void
  132. * @throws \Illuminate\Validation\ValidationException
  133. * Author: Mead
  134. */
  135. public function store(Request $request)
  136. {
  137. $this->isCan(PermissionEnum::controller_schedule_add);
  138. $this->validate($request, $this->validator->getRules(ValidatorInterface::RULE_CREATE));
  139. $data = $request->only(array_keys($this->validator->getRules(ValidatorInterface::RULE_CREATE)));
  140. $week = LessonSchedule::byDateGetWeek(self::$TERM_ID, $data['day']);
  141. $data['week'] = $week['week'];
  142. $data['week_index'] = $week['week_index'];
  143. $data['term_id'] = self::$TERM_ID;
  144. $data['teach_type'] = TeachTypeEnum::SJ;
  145. $data['class_hour'] = Time::byIdGetHour($data['time_id']);
  146. //判断是否有课
  147. $where = Arr::only($data, ['term_id', 'week', 'week_index', 'room_id', 'time_id']);
  148. $is_exist = LessonSchedule::query()->where('status', LessonScheduleStatusEnum::OK)->where($where)->exists();
  149. if ($is_exist) {
  150. return $this->error('该时间段已有课!');
  151. }
  152. $teacher_id = Admin::query()->where('id', $data['teacher_admin_id'])->where('type', Teacher::class)->value('type_id') ?? 0;
  153. $lessonTeacher = LessonTeacher::query()->firstOrCreate([
  154. 'term_id' => $data['term_id'],
  155. 'grade_id' => $data['grade_id'],
  156. 'lesson_id' => $data['lesson_id'],
  157. 'teacher_id' => $teacher_id,
  158. 'teacher_admin_id' => $data['teacher_admin_id'],
  159. 'status' => ModelStatusEnum::OK,
  160. ], [
  161. 'student_nums' => $data['student_nums'],
  162. ]);
  163. $data['lesson_teacher_id'] = $lessonTeacher->id;
  164. $data['admin_id'] = login_admin_id();
  165. try {
  166. $model = $this->repository->create($data);
  167. return Response::success($model);
  168. } catch (\Exception $e) {
  169. return $this->error($e);
  170. }
  171. }
  172. /**
  173. * 实时课表
  174. * @param Request $request
  175. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  176. */
  177. public function calendar(Request $request)
  178. {
  179. $this->isCan(PermissionEnum::controller_schedule_list);
  180. $this->validate($request, [
  181. // 'term_id' => 'required|integer',
  182. 'week' => 'required|integer',
  183. 'room_id' => 'required|integer',
  184. ]);
  185. $term_id = self::$TERM_ID;
  186. $week = $request->get('week', false);
  187. $room_id = $request->get('room_id', false);
  188. $teacher_id = $request->get('teacher_id', false);
  189. $lesson_id = $request->get('lesson_id', false);
  190. $teach_lesson_id = $request->get('teach_lesson_id', false);
  191. $term = Term::byId($term_id);
  192. //获取本周
  193. $day = '2022-05-01';
  194. if (!$week) {
  195. $week = ceil(Carbon::parse($day)->diffInDays(Carbon::parse($term->start_date)) / 7);
  196. if ($week < 1) {
  197. $week = 1;
  198. }
  199. }
  200. if (self::$TERM->weeks < $week) {
  201. $week = self::$TERM->weeks;
  202. }
  203. $firstWeekDay = Carbon::parse($term->start_date)->addWeeks($week - 1)->toDateString();
  204. $lessonModel = LessonSchedule::query()
  205. ->where('term_id', $term_id)
  206. ->when($room_id, function ($query) use ($room_id) {
  207. return $query->where('room_id', $room_id);
  208. })
  209. ->when($teach_lesson_id, function ($query) use ($teach_lesson_id) {
  210. return $query->where('lesson_teacher_id', $teach_lesson_id);
  211. })
  212. ->with(['lesson', 'teacher', 'grade', 'room'])
  213. ->orderBy('week_index')
  214. ->where('week', $week);
  215. $times = Time::query()->where('status', ModelStatusEnum::OK)->orderBy('start_time')->select(['id', 'name'])->get();
  216. $headers = [];
  217. $calendar = [];
  218. for ($i = 0; $i < 7; $i++) {
  219. $date = Carbon::parse($firstWeekDay)->addDays($i);
  220. $week_index = LessonSchedule::toWeekIndex($date->dayOfWeek);
  221. $headers[] = [
  222. 'week' => LessonSchedule::toWeekIndex($date->dayOfWeek),
  223. 'day' => $date->toDateString(),
  224. ];
  225. $lists = [];
  226. foreach ($times as $key => $time) {
  227. $model = $lessonModel->clone();
  228. $lesson = $model->where('status', LessonScheduleStatusEnum::OK)->where('week_index', $i)->where('time_id', $time['id'])->first();
  229. $tModel = $lessonModel->clone();
  230. $is_stop_lesson = $tModel->whereIn('status', [LessonScheduleStatusEnum::SJ, LessonScheduleStatusEnum::TK])->where('week_index', $i)->where('time_id', $time['id'])->exists();
  231. $lists[$key]['is_stop_lesson'] = $is_stop_lesson;
  232. $lists[$key]['is_lesson'] = false;
  233. $lists[$key]['is_migrate_lesson'] = false;
  234. $lists[$key]['is_maintain'] = false;
  235. $lists[$key]['is_open_appointment'] = false;
  236. if ($lesson) {
  237. switch ($lesson->type) {
  238. case ScheduleTypeEnum::LESSON:
  239. $lists[$key]['is_lesson'] = true;
  240. $lists[$key]['is_migrate_lesson'] = $lesson->migrate_id ? true : false;
  241. $lists[$key]['lesson'] = [
  242. 'teach_title' => $lesson->teach_title,
  243. 'id' => $lesson->id,
  244. 'lesson' => $lesson->lesson,
  245. 'teacher' => $lesson->teacher,
  246. 'grade' => $lesson->grade,
  247. 'group_name' => $lesson->group_name,
  248. 'migrate_id' => $lesson->migrate_id,
  249. 'student_nums' => $lesson->student_nums,
  250. 'is_stop_lesson' => $is_stop_lesson,
  251. 'type_id' => $lesson->type_id
  252. ];
  253. break;
  254. case ScheduleTypeEnum::MAINTAIN:
  255. $lists[$key]['is_maintain'] = $lesson->type_id;
  256. break;
  257. case ScheduleTypeEnum::OPEN_APPOINTMENT:
  258. $lists[$key]['is_open_appointment'] = $lesson->type_id;
  259. $lists[$key]['open_appointment'] = OpenAppointment::query()->with(['admin'])->where('id', $lesson->type_id)->select(['id', 'department', 'applicant_name', 'applicant_mobile', 'admin_id', 'use_reason'])->first();
  260. break;
  261. }
  262. }
  263. }
  264. $calendar[] = [
  265. 'day' => $date->toDateString(),
  266. 'week' => $week,
  267. 'week_index' => $week_index,
  268. 'lists' => $lists
  269. ];
  270. }
  271. return Response::success(compact('calendar', 'headers', 'week', 'times', 'day'));
  272. }
  273. /**
  274. * 实时课表
  275. * @param Request $request
  276. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  277. */
  278. public function calendarSimple(Request $request)
  279. {
  280. $this->isCan(PermissionEnum::controller_schedule_list);
  281. $this->validate($request, [
  282. 'week' => 'required|integer',
  283. 'room_id' => 'required|integer',
  284. ]);
  285. $term_id = self::$TERM_ID;
  286. $week = $request->get('week', false);
  287. $room_id = $request->get('room_id', false);
  288. $term = Term::byId($term_id);
  289. //获取本周
  290. $day = '2022-05-01';
  291. if (!$week) {
  292. $week = ceil(Carbon::parse($day)->diffInDays(Carbon::parse($term->start_date)) / 7);
  293. if ($week < 1) {
  294. $week = 1;
  295. }
  296. }
  297. if (self::$TERM->weeks < $week) {
  298. $week = self::$TERM->weeks;
  299. }
  300. $firstWeekDay = Carbon::parse($term->start_date)->addWeeks($week - 1)->toDateString();
  301. $lessonModel = LessonSchedule::query()
  302. ->where('term_id', $term_id)
  303. ->when($room_id, function ($query) use ($room_id) {
  304. return $query->where('room_id', $room_id);
  305. })
  306. // ->with(['lesson', 'teacher', 'grade', 'room'])
  307. ->orderBy('week_index')
  308. ->where('week', $week);
  309. $times = Time::query()->where('status', ModelStatusEnum::OK)->orderBy('start_time')->select(['id', 'name'])->get();
  310. $headers = [];
  311. $calendar = [];
  312. for ($i = 0; $i < 7; $i++) {
  313. $date = Carbon::parse($firstWeekDay)->addDays($i);
  314. $week_index = LessonSchedule::toWeekIndex($date->dayOfWeek);
  315. $headers[] = [
  316. 'week' => $week_index,
  317. 'day' => $date->toDateString(),
  318. ];
  319. $lists = [];
  320. foreach ($times as $key => $time) {
  321. $model = $lessonModel->clone();
  322. $is_lesson = $model->where('status', LessonScheduleStatusEnum::OK)->where('week_index', $i)->where('time_id', $time['id'])->exists();
  323. $lists[$key]['is_lesson'] = $is_lesson;
  324. // if (!$is_lesson) {
  325. // $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();
  326. // $lists[$key]['is_lesson'] = $is_maintain;
  327. // }
  328. }
  329. $calendar[] = [
  330. 'day' => $date->toDateString(),
  331. 'week' => $week,
  332. 'week_index' => $week_index,
  333. 'lists' => $lists
  334. ];
  335. }
  336. return Response::success(compact('calendar', 'headers', 'week', 'times', 'day'));
  337. }
  338. /**
  339. * 停课、调课
  340. * @param Request $request
  341. * @return \Illuminate\Http\JsonResponse|void
  342. */
  343. public function changeLesson(Request $request)
  344. {
  345. $this->isCan(PermissionEnum::controller_schedule_change);
  346. $this->validate($request, [
  347. 'id' => 'required|integer',
  348. 'type' => 'required|in:1,2,3',
  349. 'body' => 'sometimes|nullable',
  350. 'migrate_data' => 'sometimes|nullable|array',
  351. ]);
  352. $id = $request->get('id');
  353. $term_id = self::$TERM_ID;
  354. $type = $request->get('type');
  355. $migrate_data = $request->get('migrate_data');
  356. $body = $request->get('body');
  357. $source_type = ScheduleRecordSourceTypeEnum::ADMIN;
  358. $admin = login_admin();
  359. if (!$admin->hasAnyRole(['admin'])) {
  360. $source_type = ScheduleRecordSourceTypeEnum::TEACHER;
  361. }
  362. if (in_array($type, [ScheduleRecordTypeEnum::TK, ScheduleRecordTypeEnum::BK])) {
  363. //调课
  364. $this->validate($request, [
  365. 'migrate_data' => 'required|array',
  366. ]);
  367. if (!Arr::has($migrate_data, ['day', 'week', 'time_id', 'week_index', 'room_id', 'time_id'])) {
  368. return $this->error('参数有误');
  369. }
  370. $migrate_where = Arr::only($migrate_data, ['week', 'time_id', 'week_index', 'room_id', 'time_id']);
  371. //查看当前调课是否存在课程
  372. $is_t_exist = LessonSchedule::query()->where($migrate_where)->where('status', ModelStatusEnum::OK)->exists();
  373. if ($is_t_exist) {
  374. return $this->error('该时间段已有课程');
  375. }
  376. $is_m_exist = Maintain::query()->where($migrate_where)->where('status', ModelStatusEnum::OK)->exists();
  377. if ($is_m_exist) {
  378. return $this->error('该时间段暂不能用');
  379. }
  380. $migrate_data['time'] = Time::byIdGetBaseInfo($migrate_data['time_id']);
  381. }
  382. $lesson = LessonSchedule::query()->where('term_id', $term_id)->where('id', $id)->first();
  383. if (!$lesson) {
  384. return $this->error('找不该上课记录');
  385. }
  386. if ($type != ScheduleRecordTypeEnum::BK && $lesson->status !== LessonScheduleStatusEnum::OK) {
  387. return $this->error('该课程状态不对');
  388. }
  389. //判断是否有申请单
  390. $is_exist = ScheduleApproveRecord::query()
  391. ->whereIn('status', [LessonScheduleApproveStatusEnum::WAIT, LessonScheduleApproveStatusEnum::YX_OK, LessonScheduleApproveStatusEnum::YX_OK])
  392. ->where('lesson_schedule_id', $lesson->id)
  393. ->exists();
  394. if ($is_exist) {
  395. return $this->error('该排班已经有申请单,请勿重复申请');
  396. }
  397. ScheduleApproveRecord::query()->create([
  398. 'term_id' => $lesson->term_id,
  399. 'lesson_id' => $lesson->lesson_id,
  400. 'teacher_id' => 0,
  401. 'lesson_schedule_id' => $lesson->id,
  402. 'room_id' => $lesson->room_id,
  403. 'schedule_data' => [
  404. 'day' => $lesson->day,
  405. 'week' => $lesson->week,
  406. 'time' => $lesson->time,
  407. 'week_index' => $lesson->week_index,
  408. 'grade' => $lesson->grade,
  409. 'group_name' => $lesson->group_name,
  410. 'teach_title' => $lesson->teach_title,
  411. 'room' => $lesson->room,
  412. 'teacher' => $lesson->teacher,
  413. ],
  414. 'type' => $type,
  415. 'source_type' => $source_type,
  416. 'migrate_data' => $migrate_data,
  417. 'body' => $body,
  418. 'admin_id' => login_admin_id(),
  419. 'status' => LessonScheduleApproveStatusEnum::WAIT
  420. ]);
  421. return Response::success([]);
  422. }
  423. /**
  424. * 根据时间过去当前时间段的记录
  425. * @param Request $request
  426. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  427. * @throws \Illuminate\Validation\ValidationException
  428. */
  429. public function byTimeGetScheduleLogs(Request $request)
  430. {
  431. $this->isCan(PermissionEnum::controller_schedule_list);
  432. $this->validate($request, [
  433. 'week' => 'required|integer',
  434. 'week_index' => 'required|integer',
  435. 'time_id' => 'required|integer',
  436. 'room_id' => 'required|integer',
  437. ]);
  438. $where = $request->only(['week', 'week_index', 'time_id', 'room_id']);
  439. $where['term_id'] = self::$TERM_ID;
  440. $lists = LessonSchedule::query()->where('status', '<>', LessonScheduleStatusEnum::OK)->where($where)->orderByDesc('id')->get();
  441. $lists = (new LessonSchedulePresenter())->present($lists);
  442. return Response::success($lists);
  443. }
  444. /**
  445. * 暂停
  446. * @param Request $request
  447. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  448. * @throws \Illuminate\Validation\ValidationException
  449. */
  450. public function pause(Request $request)
  451. {
  452. $this->isCan(PermissionEnum::controller_schedule_del);
  453. $this->validate($request, [
  454. 'id' => 'required|integer',
  455. 'type' => 'sometimes|nullable|integer',
  456. ]);
  457. $status = ModelStatusEnum::PAUSE;
  458. if ($request->get('type')) {
  459. $status = ModelStatusEnum::OK;
  460. }
  461. $re = LessonSchedule::query()->where('id', $request->get('id'))->update(['status' => $status]);
  462. if ($re) {
  463. return Response::success([]);
  464. }
  465. return $this->error('操作失败');
  466. }
  467. /**
  468. * 导出排班
  469. * @param Request $request
  470. * @return
  471. * @throws \Illuminate\Validation\ValidationException
  472. */
  473. public function scheduleExport(Request $request)
  474. {
  475. $this->isCan(PermissionEnum::controller_schedule_export);
  476. $this->validate($request, [
  477. 'room_id' => 'sometimes|integer',
  478. ]);
  479. $room_id = $request->get('room_id', false);
  480. $file_name = '教学任务_' . Str::random(8) . '.xlsx';
  481. return Excel::download(new ScheduleExport(self::$TERM_ID, $room_id), $file_name);
  482. }
  483. /**
  484. * 批量停课
  485. * @param Request $request
  486. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  487. * @throws \Illuminate\Validation\ValidationException
  488. */
  489. public function batchStopLesson(Request $request)
  490. {
  491. $this->isCan(PermissionEnum::controller_schedule_batch_stop);
  492. $this->validate($request, [
  493. 'ids' => 'required|array',
  494. 'body' => 'sometimes|nullable',
  495. ]);
  496. $ids = $request->get('ids');
  497. $term_id = self::$TERM_ID;
  498. $type = ScheduleRecordTypeEnum::SK;
  499. $body = $request->get('body');
  500. $lessons = LessonSchedule::query()->where('term_id', $term_id)->where('status', LessonScheduleStatusEnum::OK)->whereIn('id', $ids)->get();
  501. if (count($lessons) !== count($ids)) {
  502. return $this->error('选中停课中有不满足条件的记录');
  503. }
  504. //判断是否有申请单
  505. $is_exist = ScheduleApproveRecord::query()
  506. // ->where('source_type', ScheduleRecordSourceTypeEnum::ADMIN)
  507. ->whereIn('status', [LessonScheduleApproveStatusEnum::WAIT, LessonScheduleApproveStatusEnum::YX_OK, LessonScheduleApproveStatusEnum::YX_OK])
  508. ->whereIn('lesson_schedule_id', $ids)
  509. ->exists();
  510. if ($is_exist) {
  511. return $this->error('该排班已经有申请单,请勿重复申请');
  512. }
  513. foreach ($lessons as $lesson) {
  514. ScheduleApproveRecord::query()->create([
  515. 'term_id' => $lesson->term_id,
  516. 'lesson_id' => $lesson->lesson_id,
  517. 'teacher_id' => 0,
  518. 'lesson_schedule_id' => $lesson->id,
  519. 'room_id' => $lesson->room_id,
  520. 'schedule_data' => [
  521. 'day' => $lesson->day,
  522. 'week' => $lesson->week,
  523. 'time' => $lesson->time,
  524. 'week_index' => $lesson->week_index,
  525. 'grade' => $lesson->grade,
  526. 'group_name' => $lesson->group_name,
  527. 'teach_title' => $lesson->teach_title,
  528. 'room' => $lesson->room,
  529. 'teacher' => $lesson->teacher,
  530. ],
  531. 'type' => $type,
  532. 'source_type' => ScheduleRecordSourceTypeEnum::ADMIN,
  533. 'body' => $body,
  534. 'admin_id' => login_admin_id(),
  535. 'status' => LessonScheduleApproveStatusEnum::WAIT
  536. ]);
  537. }
  538. return Response::success([]);
  539. }
  540. }