private void WriteDuplicateCourse(decimal school_year, string semester, List<CourseSection> CourseSections) { List<KeyValuePair<CourseSection, CourseSection>> ChongTongCourseSections = new List<KeyValuePair<CourseSection, CourseSection>>(); List<int> CourseIDs = new List<int>(); CourseSections.ForEach((x) => { if (!CourseIDs.Contains(x.CourseID)) { List<CourseSection> SameSubjectSections = CourseSections.Where(y => (y.SubjectID == x.SubjectID && y.CourseID != x.CourseID)).GroupBy(y => y.CourseID).Select(y => y.First()).ToList(); SameSubjectSections.ForEach((y) => { ChongTongCourseSections.Add(new KeyValuePair<CourseSection, CourseSection>(x, y)); }); CourseIDs.Add(x.CourseID); } }); List<UDT.ConflictCourse> conflict_courses = new List<UDT.ConflictCourse>(); ChongTongCourseSections.ForEach((x) => { UDT.ConflictCourse conflict_course = new UDT.ConflictCourse(); conflict_course.SchoolYear = x.Key.SchoolYear; conflict_course.Semester = x.Key.Semester; conflict_course.CourseID_A = x.Key.CourseID; conflict_course.CourseID_B = x.Value.CourseID; conflict_course.CourseName_A = x.Key.CourseName; conflict_course.CourseName_B = x.Value.CourseName; conflict_course.ConflictDate = string.Empty; conflict_course.ConflictWeek = string.Empty; conflict_course.ConflictTime = string.Empty; conflict_course.IsSameSubject = true; conflict_courses.Add(conflict_course); }); conflict_courses.SaveAll(); }
private void WriteChongTongCourse(decimal school_year, string semester, List<CourseSection> CourseSections) { if (CourseSections.Count == 0) return; string[] Day = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" }; List<UDT.ConflictCourse> conflict_courses = new List<UDT.ConflictCourse>(); Dictionary<int, Dictionary<string, List<CourseSection>>> dicCourseSections = new Dictionary<int, Dictionary<string, List<CourseSection>>>(); Dictionary<int, CourseSection> dicCourseIDs = new Dictionary<int, CourseSection>(); CourseSections.ForEach((x) => { if (!dicCourseIDs.ContainsKey(x.CourseID)) dicCourseIDs.Add(x.CourseID, x); }); CourseSections.ForEach((x) => { if (!dicCourseSections.ContainsKey(x.CourseID)) dicCourseSections.Add(x.CourseID, new Dictionary<string,List<CourseSection>>()); if (!dicCourseSections[x.CourseID].ContainsKey(x.BeginTime.ToShortDateString())) dicCourseSections[x.CourseID].Add(x.BeginTime.ToShortDateString(), new List<CourseSection>()); dicCourseSections[x.CourseID][x.BeginTime.ToShortDateString()].Add(x); }); foreach (int CourseID in dicCourseSections.Keys) { foreach (string date in dicCourseSections[CourseID].Keys) { CourseSection A = dicCourseIDs[CourseID]; Dictionary<int, List<CourseSection>> dicBs = new Dictionary<int, List<CourseSection>>(); foreach (CourseSection x in dicCourseSections[CourseID][date]) { List<CourseSection> ChongTongCourseSections = CourseSections.Where(y => (y.SubjectID != x.SubjectID && y.CourseID != x.CourseID && x.BeginTime.ToShortDateString() == y.BeginTime.ToShortDateString())).Where(y => ((x.BeginTime <= y.BeginTime && x.EndTime >= y.EndTime) || (x.BeginTime >= y.BeginTime && x.BeginTime <= y.EndTime) || (x.EndTime >= y.BeginTime && x.EndTime <= y.EndTime))).ToList(); foreach (CourseSection cs in ChongTongCourseSections) { if (!dicBs.ContainsKey(cs.CourseID)) dicBs.Add(cs.CourseID, new List<CourseSection>()); dicBs[cs.CourseID].Add(cs); } } foreach (int course_id in dicBs.Keys) { UDT.ConflictCourse conflict_course = new UDT.ConflictCourse(); CourseSection B = dicBs[course_id].ElementAt(0); DateTime begin_time = DateTime.MaxValue; DateTime end_time = DateTime.MinValue; if (dicBs[course_id].Min(y => y.BeginTime) < begin_time) begin_time = dicBs[course_id].Min(y => y.BeginTime); if (dicBs[course_id].Max(y => y.EndTime) > end_time) end_time = dicBs[course_id].Max(y => y.EndTime); //if (A.CourseID != 649) // continue; conflict_course.SchoolYear = A.SchoolYear; conflict_course.Semester = A.Semester; conflict_course.CourseID_A = A.CourseID; conflict_course.CourseName_A = A.CourseName; conflict_course.CourseID_B = B.CourseID; conflict_course.CourseName_B = B.CourseName; conflict_course.ConflictDate = date; conflict_course.ConflictWeek = Day[Convert.ToInt16(DateTime.Parse(date).DayOfWeek)]; conflict_course.IsSameSubject = false; conflict_course.ConflictTime = begin_time.ToString("HH:mm") + "~" + end_time.ToString("HH:mm"); conflict_courses.Add(conflict_course); } } } conflict_courses.SaveAll(); }