where('course_date', date('Y-m-d'))->select(); $results = []; foreach ($autoSchedules as $schedule) { // 构造课程日期(基于给定的月份和年份) $courseDate = $this->getCourseDate($schedule->course_date, $month, $year); // 检查该月份是否有相同的课程安排 $exists = $this->checkCourseExists($schedule, $courseDate); if (!$exists) { // 如果不存在,则插入新的课程安排 $newSchedule = $this->createNewSchedule($schedule, $courseDate); $results[] = [ 'status' => 'inserted', 'schedule' => $newSchedule ]; } else { $results[] = [ 'status' => 'exists', 'schedule' => $schedule ]; } } return $results; } /** * 根据原始课程日期和目标月份、年份计算新的课程日期 * @param string $originalDate 原始课程日期(格式:Y-m-d) * @param int $targetMonth 目标月份 * @param int $targetYear 目标年份 * @return string 新的课程日期 */ protected function getCourseDate($originalDate, $targetMonth, $targetYear) { $date = \DateTime::createFromFormat('Y-m-d', $originalDate); $date->setDate($targetYear, $targetMonth, $date->format('d')); return $date->format('Y-m-d'); } /** * 检查指定月份是否有相同的课程安排 * @param CourseSchedule $schedule 原始课程安排 * @param string $courseDate 课程日期 * @return bool 是否存在 */ protected function checkCourseExists(CourseSchedule $schedule, $courseDate) { $exists = CourseSchedule::where(function ($query) use ($schedule, $courseDate) { $query->where('campus_id', $schedule->campus_id) ->where('venue_id', $schedule->venue_id) ->where('course_date', $courseDate) ->where('time_slot', $schedule->time_slot) ->where('course_id', $schedule->course_id); })->count(); return $exists > 0; } /** * 创建新的课程安排 * @param CourseSchedule $schedule 原始课程安排 * @param string $courseDate 课程日期 * @return CourseSchedule 新创建的课程安排 */ protected function createNewSchedule(CourseSchedule $schedule, $courseDate) { $newSchedule = new CourseSchedule(); $newSchedule->campus_id = $schedule->campus_id; $newSchedule->venue_id = $schedule->venue_id; $newSchedule->course_date = $courseDate; $newSchedule->time_slot = $schedule->time_slot; $newSchedule->course_id = $schedule->course_id; $newSchedule->auto_schedule = 1; // 复制其他需要的字段... $newSchedule->save(); return $newSchedule; } }