fix 检查时间是否有重复

This commit is contained in:
Dai 2024-10-20 22:50:43 +08:00
parent 7ae3eaeb26
commit 3146efae1e
3 changed files with 71 additions and 15 deletions

View File

@ -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();

View File

@ -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); // 从第一个时间段开始检查
}
}

View File

@ -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();