/// <summary> /// 根據課程資訊建立每日課表 /// </summary> /// <param name="circleKey"></param> /// <param name="classWeekType"></param> /// <returns></returns> public bool CreateByCircleKey(string circleKey, int?classWeekType = 0) { var learningcircleService = new LearningCircleService(); var learningcircleInfo = learningcircleService.GetDetailByOuterKey(circleKey); if (learningcircleInfo == null) { return(false); } var dateTimeTools = new Utility.DateTimeTools(); var datas = dateTimeTools.Getdata(learningcircleInfo.StartDate.Value.ToLocalTime(), learningcircleInfo.EndDate.Value.ToLocalTime(), circleKey, classWeekType); if (datas != null && datas.FirstOrDefault() != null) { var db = _uow.DbContext; db.TimeTable.AddRange(datas); db.SaveChanges(); } return(true); }
/// <summary> /// 修改開始結束日期資訊 /// </summary> /// <param name="startDate"></param> /// <param name="endDate"></param> /// <param name="circleKey"></param> /// <returns></returns> public bool UpdateByCircleKey(DateTime startDate, DateTime endDate, string circleKey) { var learningcircleService = new LearningCircleService(); var learningcircleInfo = learningcircleService.GetDetailByOuterKey(circleKey); if (learningcircleInfo == null) { return(false); } var dateTimeTools = new Utility.DateTimeTools(); var datas = dateTimeTools.Getdata(learningcircleInfo.StartDate.Value.ToLocalTime(), learningcircleInfo.EndDate.Value.ToLocalTime(), circleKey); // var removeDatas = datas.Where(t => t.StartDate.Value < startDate || t.EndDate.Value > endDate).ToList(); var db = _uow.DbContext; var dbData = db.TimeTable.Where(t => t.Course_No == circleKey).ToList(); //取得DB目前所有上課時間地點資訊 var allData = dbData.Union(datas); //聯集需求的日期 var deleteDatas = allData.Except(datas); //找出不是需求的日期 -與DB資料的差集 //找出不是需求的日期 var removeDatas = db.TimeTable.Where(t => t.Course_No == circleKey && (t.StartDate.Value <startDate || t.EndDate.Value> endDate)).ToList(); removeDatas = removeDatas.Union(deleteDatas).ToList(); //聯集需要刪除的資料 //刪除更新設定區間外的日期 db.TimeTable.RemoveRange(removeDatas); //取得最初的開始日期 var firstTimeTable = datas.OrderBy(t => t.StartDate).FirstOrDefault(); //取得最後的結束日期 var lastTimeTable = datas.OrderByDescending(t => t.EndDate).FirstOrDefault(); var weekTableService = new WeekTableService(); var weekTableInfo = weekTableService.GetByCirclekey(circleKey); var weekOfDays = weekTableInfo.WeekTable.Select(t => t.StartTime.ToLocalTime().DayOfWeek.ToString()).OrderBy(t => t); //新增DB所沒有的startDate日期區塊 if (firstTimeTable.StartDate.HasValue && (firstTimeTable.StartDate.Value >= startDate)) { var insertStartDates = new List <TimeTable>(); var diffStartDay = (firstTimeTable.StartDate.Value - startDate).Days + 1; for (var firstDay = 1; firstDay < diffStartDay; firstDay++) { var lastEntity = new TimeTable() { ClassRoom = firstTimeTable.ClassRoom, ClassTime = firstTimeTable.ClassTime, Course_No = firstTimeTable.Course_No, Course_Id = firstTimeTable.Course_Id, EndDate = firstTimeTable.EndDate, StartDate = firstTimeTable.StartDate }; var lastStartDate = lastEntity.StartDate.Value.AddDays(-(firstDay)); var lastEndDate = lastEntity.EndDate.Value.AddDays(-(firstDay)); if (weekOfDays.FirstOrDefault(t => t == lastStartDate.DayOfWeek.ToString()) != null) { lastEntity.StartDate = lastStartDate; lastEntity.EndDate = lastEndDate; db.TimeTable.Add(lastEntity); } } } //新增DB所沒有的endDate日期 區塊 if (lastTimeTable.EndDate.HasValue && (lastTimeTable.EndDate.Value >= endDate)) { var insertStartDates = new List <TimeTable>(); var diffEndDay = (endDate - lastTimeTable.EndDate.Value).Days + 1; for (var endDay = 1; endDay <= diffEndDay; endDay++) { var nextEntity = new TimeTable() { ClassRoom = lastTimeTable.ClassRoom, ClassTime = lastTimeTable.ClassTime, Course_No = lastTimeTable.Course_No, Course_Id = lastTimeTable.Course_Id, EndDate = lastTimeTable.EndDate, StartDate = lastTimeTable.StartDate };; var nextStartDate = nextEntity.StartDate.Value.AddDays(endDay); var nextEndDate = nextEntity.EndDate.Value.AddDays(endDay); if (weekOfDays.FirstOrDefault(t => t == nextStartDate.DayOfWeek.ToString()) != null) { nextEntity.StartDate = nextStartDate; nextEntity.EndDate = nextEndDate; db.TimeTable.Add(nextEntity); } } } //補上新加入的weeks資料 foreach (var data in datas) { var checkData = dbData.FirstOrDefault(t => t.StartDate.Value.Date == data.StartDate.Value.Date); if (checkData != null) { continue; } db.TimeTable.Add(data); } db.SaveChanges(); return(true); }