From 3146efae1e775cb53b11983181450e6fd9bac929 Mon Sep 17 00:00:00 2001 From: Dai Date: Sun, 20 Oct 2024 22:50:43 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E6=A3=80=E6=9F=A5=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E6=98=AF=E5=90=A6=E6=9C=89=E9=87=8D=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/common/service/SubjectHomeworkService.php | 1 + app/functions.php | 38 +++++++++++++++ .../TeacherScheduleTimeController.php | 47 +++++++++++++------ 3 files changed, 71 insertions(+), 15 deletions(-) diff --git a/app/common/service/SubjectHomeworkService.php b/app/common/service/SubjectHomeworkService.php index 8f8ed2b..315e92c 100644 --- a/app/common/service/SubjectHomeworkService.php +++ b/app/common/service/SubjectHomeworkService.php @@ -122,6 +122,7 @@ class SubjectHomeworkService try { $data = $request->get(); $subject_homework = SubjectHomework::where(['teacher_schedule_time_id' => $data['teacher_schedule_time_id']]) + ->where(['homework_file_is_publish' => 1]) ->with(['teacher', 'subject']) ->findOrEmpty(); diff --git a/app/functions.php b/app/functions.php index eb1af79..1eb86a0 100644 --- a/app/functions.php +++ b/app/functions.php @@ -81,3 +81,41 @@ if (!function_exists('get_dates_in_month')) { return $dates; } } + +if(!function_exists('is_time_cross')){ + /** + * PHP计算多个时间段是否有交集(边界重叠不算) + * @param ...$timePeriods + * @return bool|mixed + */ + function is_time_cross(array $timePeriods) { + + $timePeriods = array_values($timePeriods); + // 将时间字符串转换为时间戳 + $timePeriods = array_map(function ($period) { + extract($period); + + return [ + 'begin' => strtotime($beginTime), + 'end' => strtotime($endTime) + ]; + }, $timePeriods); + + // 递归函数来检查时间段是否有交集 + $checkCross = function ($index, $timePeriods) use (&$checkCross) { + if ($index === count($timePeriods) - 1) { + return true; // 最后一个时间段,没有交集 + } + + for ($i = $index + 1; $i < count($timePeriods); $i++) { + if ($timePeriods[$index]['end'] > $timePeriods[$i]['begin'] && $timePeriods[$i]['end'] > $timePeriods[$index]['begin']) { + return false; // 有交集 + } + } + + return $checkCross($index + 1, $timePeriods); // 递归检查下一个时间段 + }; + + return $checkCross(0, $timePeriods); // 从第一个时间段开始检查 + } +} diff --git a/plugin/admin/app/controller/TeacherScheduleTimeController.php b/plugin/admin/app/controller/TeacherScheduleTimeController.php index 5df7bdf..1f375e7 100644 --- a/plugin/admin/app/controller/TeacherScheduleTimeController.php +++ b/plugin/admin/app/controller/TeacherScheduleTimeController.php @@ -139,10 +139,10 @@ class TeacherScheduleTimeController extends Crud $student_schedule->delete(); } - if(!$subject_homework->isEmpty()){ + if (!$subject_homework->isEmpty()) { $subject_homework->delete(); //删除学生家庭作业 - StudentHomework::where(['teacher_schedule_time_id'=>$ids])->select()->delete(); + StudentHomework::where(['teacher_schedule_time_id' => $ids])->select()->delete(); } return $this->json(0); @@ -175,16 +175,31 @@ class TeacherScheduleTimeController extends Crud } } + //检测时间是否有相交的 + $cross_data_time = []; + foreach ($data['schedule_time'] as $index => $item) { + $time_period = explode(' - ', $item); + $cross_data_time[$index] = [ + 'beginTime' => $data['date'] . ' ' . $time_period[0], + 'endTime' => $data['date'] . ' ' . $time_period[1], + ]; + } + + if (!is_time_cross($cross_data_time)) { + throw new Exception('请确认时间是否有重叠'); + } + + if (isset($data['teacher_schedule_id'])) { $teacher_schedule_id = array_filter($data['teacher_schedule_id']); if ($teacher_schedule_id) { //查找在空闲时间中却不在已存在提交的排课时间的已被删除的排课时间 $removed_teacher_schedule_time = \app\common\model\TeacherScheduleTime::where(['free_time_id' => $free_time->id])->whereNotIn('id', $teacher_schedule_id)->select(); - if(!$removed_teacher_schedule_time->isEmpty()){ + if (!$removed_teacher_schedule_time->isEmpty()) { //删除对用的学生排课时间 $removed_teacher_schedule_time_ids = array_column($removed_teacher_schedule_time->toArray(), 'id'); - StudentSchedule::where(['teacher_schedule_time_id'=>$removed_teacher_schedule_time_ids])->select()->delete(); + StudentSchedule::where(['teacher_schedule_time_id' => $removed_teacher_schedule_time_ids])->select()->delete(); //删除教师被删除的排课时间 $removed_teacher_schedule_time->delete(); } @@ -208,7 +223,7 @@ class TeacherScheduleTimeController extends Crud $m = round($diff->i / 60, 2); $hour = round($h + $m, 2); $time = trim($time_period[0]) . ' - ' . trim($time_period[1]); - + if (isset($data['teacher_schedule_id']) && $data['teacher_schedule_id'][$index]) { $teacher_schedule_time = \app\common\model\TeacherScheduleTime::where(['id' => $data['teacher_schedule_id'][$index]])->findOrEmpty(); $teacher_schedule_time->save([ @@ -222,6 +237,7 @@ class TeacherScheduleTimeController extends Crud 'en_start_time' => $en_start_time, 'en_end_time' => $en_end_time, 'month' => $free_time->month, + 'subject_id' => $data['subject_id'][$index], 'free_time_id' => $free_time->id, ]); } else { @@ -236,6 +252,7 @@ class TeacherScheduleTimeController extends Crud 'en_start_time' => $en_start_time, 'en_end_time' => $en_end_time, 'month' => $free_time->month, + 'subject_id' => $data['subject_id'][$index], 'free_time_id' => $free_time->id, ]); } @@ -243,9 +260,9 @@ class TeacherScheduleTimeController extends Crud //更新学生排课 $student_schedule = StudentSchedule::where(['teacher_schedule_time_id' => $teacher_schedule_time->id])->findOrEmpty(); $student_name = ''; - if($data['student_id'][$index]){ + if ($data['student_id'][$index]) { $student = Student::where(['id' => $data['student_id'][$index]])->findOrEmpty(); - if(!$student->isEmpty()){ + if (!$student->isEmpty()) { $student_name = $student->student_name; } } @@ -309,15 +326,15 @@ class TeacherScheduleTimeController extends Crud if ($request->method() === 'POST') { if ($request->post('is_publish')) { //发布检测是否排课和安排学生 - $teacher_schedule_time = \app\common\model\TeacherScheduleTime::where(['id'=> $request->post('id')])->findOrEmpty(); - if(empty($teacher_schedule_time->subject_id)){ + $teacher_schedule_time = \app\common\model\TeacherScheduleTime::where(['id' => $request->post('id')])->findOrEmpty(); + if (empty($teacher_schedule_time->subject_id)) { return json([ 'code' => ResponseCode::WEB_API_FAIL, 'msg' => '请先选择课程再发布' ]); } $student_schedule = StudentSchedule::where(['teacher_schedule_time_id' => $teacher_schedule_time->id])->select(); - if($student_schedule->isEmpty()){ + if ($student_schedule->isEmpty()) { return json([ 'code' => ResponseCode::WEB_API_FAIL, 'msg' => '请先安排学生后再发布' @@ -452,7 +469,7 @@ class TeacherScheduleTimeController extends Crud if (isset($data['is_publish'])) { $teacher_schedule_time->is_publish = $data['is_publish']; - if(empty($teacher_schedule_time->subject_id)){ + if (empty($teacher_schedule_time->subject_id)) { return json([ 'code' => ResponseCode::WEB_API_FAIL, 'msg' => '请先选择课程再发布' @@ -460,7 +477,7 @@ class TeacherScheduleTimeController extends Crud } $student_schedule = StudentSchedule::where(['teacher_schedule_time_id' => $teacher_schedule_time->id])->select(); - if($student_schedule->isEmpty()){ + if ($student_schedule->isEmpty()) { return json([ 'code' => ResponseCode::WEB_API_FAIL, 'msg' => '请先安排学生后再发布' @@ -499,7 +516,7 @@ class TeacherScheduleTimeController extends Crud //获取所有老师 $teacher = Teacher::order('id asc')->field('id,teacher_name,account')->select()->toArray(); - return view('teacher-schedule-time/export_schedule_index', [ 'teacher' => $teacher]); + return view('teacher-schedule-time/export_schedule_index', ['teacher' => $teacher]); } @@ -515,7 +532,7 @@ class TeacherScheduleTimeController extends Crud ->leftJoin('teacher t', 'ts.teacher_id = t.id') ->leftJoin('student_schedule ss', 'ts.id = ss.teacher_schedule_time_id and t.id = ss.teacher_id'); - if($request->get('teacher_id')){ + if ($request->get('teacher_id')) { $summary->where('ts.teacher_id', $request->get('teacher_id')); } // ->where(['ts.is_publish' => 1]) @@ -591,7 +608,7 @@ class TeacherScheduleTimeController extends Crud ss.student_name ') ->group('ts.id'); - if($request->get('teacher_id')){ + if ($request->get('teacher_id')) { $query->where('ts.teacher_id', $request->get('teacher_id')); } $summary = $query->select()->toArray();