/// <summary> /// 建立傳統周課表 - 一筆傳統周課表 /// </summary> /// <returns></returns> public WeekTable CreateWeekData(string token, string circleKey, int classWeekType, string place, DateTime startDate, DateTime endDate) { var tokenService = new TokenService(); var tokenInfo = tokenService.GetTokenInfo(token).Result; if (tokenInfo == null) { return(null); } var learningCircleService = new LearningCircleService(); var learningCircleinfo = learningCircleService.GetDetailByOuterKey(circleKey); if (learningCircleinfo == null) { return(null); } var startHour = Convert.ToInt32(startDate.ToString("HH")); var endHour = Convert.ToInt32(endDate.ToString("HH")); var dayOfWeekService = new Utility.DayOfWeekTools(); var week = dayOfWeekService.ChangeToCht(startDate.DayOfWeek); //9點以前都是第一節,9點以後都(目前小時-7)節 startHour = startHour <= 9 ? 1 : startHour - 7; endHour = endHour <= 9 ? 1 : endHour - 7; var entity = new WeekTable() { ClassWeekType = classWeekType, CreateUtcDate = DateTime.UtcNow, Creator = tokenInfo.MemberId, EndPeriod = endHour, EndTime = endDate.ToUniversalTime(), LearningCircleId = learningCircleinfo.Id, Place = place, StartPeriod = startHour, StartTime = startDate.ToUniversalTime(), Week = week }; try { var db = _uow.DbContext; db.WeekTable.Add(entity); db.SaveChanges(); return(entity); } catch (Exception ex) { return(null); } }
/// <summary> /// 取得使用者所有上課時間地點 /// </summary> /// <param name="token"></param> /// <returns></returns> public IEnumerable <Infrastructure.ViewModel.CourseManage.GetMyCourseScheduleResponse> AppGetMyCourseRoomSchedule(string token) { var tokenService = new TokenService(); var memberService = new MemberService(); var checkToken = tokenService.GetTokenInfo(token).Result; if (checkToken == null) { return(null); } var memberInfo = memberService.UserIdToAccount(checkToken.MemberId); if (memberInfo == null) { return(null); } var db = _uow.DbContext; /* var sqlData = (from ttb in db.TimeTable * join lc in db.LearningCircle on ttb.Course_No equals lc.LearningOuterKey * join wt in db.WeekTable on lc.Id equals wt.LearningCircleId * join cm in db.CircleMemberRoleplay on lc.Id equals cm.CircleId * orderby ttb.StartDate * group ttb by new { ttb, lc.LearningOuterKey, lc.Name, wt.StartPeriod, wt.EndPeriod, wt.Place, cm.MemberId, wt.ClassWeekType, lc.Enable ,wt.Week} into g * where g.Key.MemberId == memberInfo.Id && g.Key.Enable == true * select new Infrastructure.ViewModel.CourseManage.GetMyCourseScheduleResponse * { * Id=g.Key.ttb.Id, * RoomID = null, * RoomName = g.Key.Place, * ClassID = g.Key.LearningOuterKey, * ClassName = g.Key.Name, * StartDate = g.Key.ttb.StartDate.Value, * EndDate = g.Key.ttb.EndDate.Value, * StartPeriod = g.Key.StartPeriod.Value, * EndPeriod = g.Key.EndPeriod.Value, * NameOfWeekDay = g.Key.Week, * ClassWeekType = (Infrastructure.ViewModel.CourseManage.GetMyCourseScheduleResponse.enumClassWeekType)g.Key.ClassWeekType * }).ToList();*/ var sqlData = (from wt in db.WeekTable join lc in db.LearningCircle on wt.LearningCircleId equals lc.Id join cmr in db.CircleMemberRoleplay on lc.Id equals cmr.CircleId group wt by new { wt, lc.LearningOuterKey, lc.Name, cmr.MemberId, lc.Enable, lc.Section, lc.StartDate, lc.EndDate } into g where g.Key.MemberId == memberInfo.Id && g.Key.Enable == true select new Infrastructure.ViewModel.CourseManage.GetMyCourseScheduleResponse { RoomID = null, RoomName = g.Key.wt.Place, ClassID = g.Key.LearningOuterKey.ToLower(), ClassName = g.Key.Name, StartDate = g.Key.wt.StartTime, EndDate = g.Key.wt.EndTime, StartPeriod = g.Key.wt.StartPeriod.Value, EndPeriod = g.Key.wt.EndPeriod.Value, NameOfWeekDay = g.Key.wt.Week, ClassWeekType = (Infrastructure.ViewModel.CourseManage.GetMyCourseScheduleResponse.enumClassWeekType)g.Key.wt.ClassWeekType }).ToList(); if (sqlData.Count() <= 0) { return(null); } var response = new List <Infrastructure.ViewModel.CourseManage.GetMyCourseScheduleResponse>(); var dayOfWeek = new Utility.DayOfWeekTools(); var dateTimeTools = new Utility.DateTimeTools(); //weekTable資料 foreach (var data in sqlData) { var timeDatas = dateTimeTools.GetIntervalDateList(data.StartDate, data.EndDate, 7); //塞TimeTable資料 foreach (var timeData in timeDatas) { var endDate = timeData.Start_date.Date; endDate = endDate.AddHours(timeData.End_date.ToLocalTime().Hour); endDate = endDate.AddMinutes(timeData.End_date.ToLocalTime().Minute); var responseData = new Infrastructure.ViewModel.CourseManage.GetMyCourseScheduleResponse() { ClassID = data.ClassID, ClassName = data.ClassName, ClassWeekType = data.ClassWeekType, EndDate = endDate, StartDate = timeData.Start_date.ToLocalTime(), StartPeriod = data.StartPeriod, EndPeriod = data.EndPeriod, RoomName = data.RoomName, WeekDay = dayOfWeek.ChangeToDayOfWeek(data.NameOfWeekDay).Value, NameOfWeekDay = data.NameOfWeekDay, StartPeriodTime = timeData.Start_date.ToLocalTime().ToString("yyyy-MM-ddTHH:mm:ss"), EndPeriodTime = endDate.ToString("yyyy-MM-ddTHH:mm:ss") }; response.Add(responseData); } /* data.EndDate = data.EndDate.ToLocalTime(); * data.StartDate = data.StartDate.ToLocalTime(); * if (data.StartDate.DayOfWeek == dayOfWeek.ChangeToDayOfWeek(data.NameOfWeekDay)) { * //data.ClassID = data.ClassID.ToLower(); * data.StartPeriodTime = data.StartDate.ToString("yyyy-MM-ddTHH:mm:ss"); * data.EndPeriodTime = data.EndDate.ToString("yyyy-MM-ddTHH:mm:ss"); * data.WeekDay = data.StartDate.DayOfWeek; * data.NameOfWeekDay = dayOfWeek.ChangeToCht(data.StartDate.DayOfWeek); * response.Add(data); * }*/ } return(response); }
/// <summary> /// 取得上課列表 /// </summary> /// <param name="circleKey"></param> /// <returns></returns> public IEnumerable <Infrastructure.ViewModel.CourseManage.GetMyCourseScheduleResponse> APPGetMyCourseSchedule(string token) { var tokenService = new TokenService(); var memberService = new MemberService(); var checkToken = tokenService.GetTokenInfo(token).Result; if (checkToken == null) { return(null); } var memberInfo = memberService.UserIdToAccount(checkToken.MemberId); if (memberInfo == null) { return(null); } var sectionService = new SectionService(); var sectionInfo = sectionService.GetOrgNowSeme(memberInfo.OrgId); if (sectionInfo == null) { return(null); } var nowSection = string.Format("{0}{1}", sectionInfo.FullName, sectionInfo.Serial); var db = _uow.DbContext; var sqlData = (from wt in db.WeekTable join lc in db.LearningCircle on wt.LearningCircleId equals lc.Id join cm in db.CircleMemberRoleplay on lc.Id equals cm.CircleId where cm.MemberId == memberInfo.Id && lc.Enable == true && lc.Section == nowSection orderby wt.StartTime select new Infrastructure.ViewModel.CourseManage.GetMyCourseScheduleResponse { RoomID = null, RoomName = wt.Place, ClassID = lc.LearningOuterKey, ClassName = lc.Name, StartDate = wt.StartTime, EndDate = wt.EndTime, StartPeriod = wt.StartPeriod.Value, EndPeriod = wt.EndPeriod.Value, ClassWeekType = (Infrastructure.ViewModel.CourseManage.GetMyCourseScheduleResponse.enumClassWeekType)wt.ClassWeekType }).ToList(); if (sqlData.Count() <= 0) { return(null); } var response = new List <Infrastructure.ViewModel.CourseManage.GetMyCourseScheduleResponse>(); var dayOfWeek = new Utility.DayOfWeekTools(); foreach (var data in sqlData) { data.EndDate = data.EndDate.ToLocalTime(); data.StartDate = data.StartDate.ToLocalTime(); data.StartPeriodTime = string.Format("{0:HH}:{0:mm}", data.StartDate); data.EndPeriodTime = string.Format("{0:HH}:{0:mm}", data.EndDate); data.WeekDay = data.StartDate.DayOfWeek; data.NameOfWeekDay = dayOfWeek.ChangeToCht(data.StartDate.DayOfWeek); response.Add(data); } return(response); }
/// <summary> /// 處理資料 /// </summary> /// <param name="requestData"></param> /// <returns></returns> public bool WeekTableDataProxy(WeekTablePostRequest requestData) { var tokenService = new TokenService(); var tokenInfo = tokenService.GetTokenInfo(requestData.Token).Result; if (tokenInfo == null) { return(false); } if (requestData.WeekTableData == null) { return(false); } var insertDatas = requestData.WeekTableData.WeekTable.Where(t => t.Id == 0); var learningCircleService = new LearningCircleService(); var learningCircleInfo = learningCircleService.GetDetailByOuterKey(requestData.CircleKey.ToLower()); if (learningCircleInfo == null) { return(false); } var startDateTime = requestData.WeekTableData.StartDate; var endDateTime = requestData.WeekTableData.EndDate; var dayOfWeekTools = new Utility.DayOfWeekTools(); var DateTimeTools = new Utility.DateTimeTools(); //處理新增資料 foreach (var insertData in insertDatas) { insertData.LearningCircleId = learningCircleInfo.Id; insertData.ClassWeekType = 0; insertData.Creator = tokenInfo.MemberId; insertData.CreateUtcDate = DateTime.UtcNow; var insertStartPeriod = DateTimeTools.DatetimeToSectionint(insertData.StartTime, true); var insertEndPeriod = DateTimeTools.DatetimeToSectionint(insertData.EndTime, false); insertData.StartPeriod = insertStartPeriod; insertData.EndPeriod = insertEndPeriod; /*判斷week字串與startTime的時與分,再組成對的時間*/ //取出時與分 var insertStartHour = insertData.StartTime.ToUniversalTime().Hour; var insertStartMinute = insertData.StartTime.ToUniversalTime().Minute; var insertEndHour = insertData.EndTime.ToUniversalTime().Hour; var insertEndMinute = insertData.EndTime.ToUniversalTime().Minute; var insertDayOfWeek = dayOfWeekTools.ChangeToDayOfWeek(insertData.Week); if (insertDayOfWeek == null) { return(false); } var startDayOfWeek = startDateTime.DayOfWeek; if (insertDayOfWeek.Value != startDayOfWeek) { var interval = (int)startDayOfWeek - (int)insertDayOfWeek.Value; if (interval > 0) { startDateTime = startDateTime.AddDays(interval); } else { startDateTime = startDateTime.AddDays(7 + interval); } } startDateTime = startDateTime.AddHours(insertStartHour); startDateTime = startDateTime.AddMinutes(insertStartMinute); endDateTime = endDateTime.AddHours(insertEndHour); endDateTime = endDateTime.AddMinutes(insertEndMinute); insertData.StartTime = startDateTime.ToUniversalTime(); insertData.EndTime = endDateTime.ToUniversalTime(); } try { var db = _uow.DbContext; var updateLearningCircleInfo = db.LearningCircle.FirstOrDefault(t => t.LearningOuterKey.ToLower() == requestData.CircleKey.ToLower()); if (updateLearningCircleInfo != null) { updateLearningCircleInfo.StartDate = requestData.WeekTableData.StartDate.ToUniversalTime(); updateLearningCircleInfo.EndDate = requestData.WeekTableData.EndDate.ToUniversalTime(); } db.WeekTable.AddRange(insertDatas); var dbData = GetByCirclekey(requestData.CircleKey.ToLower()); //聯集資料 var unionDataIds = requestData.WeekTableData.WeekTable.Select(t => t.Id).Union(dbData.WeekTable.Select(t => t.Id)); //找出欲刪除的資料 var deleteDataIds = unionDataIds.Except(requestData.WeekTableData.WeekTable.Select(t => t.Id)); foreach (var deleteDataId in deleteDataIds) { var deleteTimeTable = db.WeekTable.Find(deleteDataId); if (deleteTimeTable == null) { continue; } db.WeekTable.Remove(deleteTimeTable); } //處理編輯資料 var updateDatas = requestData.WeekTableData.WeekTable.Where(t => t.Id > 0).ToList(); startDateTime = requestData.WeekTableData.StartDate; endDateTime = requestData.WeekTableData.EndDate; foreach (var updateData in updateDatas) { var updateDataInfo = db.WeekTable.Find(updateData.Id); var updateStartPeriod = DateTimeTools.DatetimeToSectionint(updateData.StartTime, true); var updateEndPeriod = DateTimeTools.DatetimeToSectionint(updateData.EndTime, false); updateDataInfo.StartPeriod = updateStartPeriod; updateDataInfo.EndPeriod = updateEndPeriod; updateDataInfo.UpdateUtcDate = DateTime.UtcNow; updateDataInfo.Updater = tokenInfo.MemberId; /*判斷week字串與startTime的時與分,再組成對的時間*/ //取出時與分 var updateStartHour = updateData.StartTime.ToUniversalTime().Hour; var updateStartMinute = updateData.StartTime.ToUniversalTime().Minute; var updateEndHour = updateData.EndTime.ToUniversalTime().Hour; var updateEndMinute = updateData.EndTime.ToUniversalTime().Minute; var updateDayOfWeek = dayOfWeekTools.ChangeToDayOfWeek(updateData.Week); if (updateDayOfWeek == null) { return(false); } var startDayOfWeek = startDateTime.DayOfWeek; if (updateDayOfWeek.Value != startDayOfWeek) { var interval = (int)startDayOfWeek - (int)updateDayOfWeek.Value; if (interval > 0) { startDateTime = startDateTime.AddDays(interval); } else { startDateTime = startDateTime.AddDays(7 + interval); } } startDateTime = startDateTime.AddHours(updateStartHour); startDateTime = startDateTime.AddMinutes(updateStartMinute); endDateTime = endDateTime.AddHours(updateEndHour); endDateTime = endDateTime.AddMinutes(updateEndMinute); updateDataInfo.StartTime = updateData.StartTime.ToUniversalTime(); updateDataInfo.EndTime = updateData.EndTime.ToUniversalTime(); updateDataInfo.Week = updateData.Week; updateDataInfo.Place = updateData.Place; } db.SaveChanges(); return(true); } catch (Exception ex) { return(false); } }
/// <summary> /// 修改周課表 /// </summary> /// <param name="token"></param> /// <param name="circleKey"></param> /// <param name="place"></param> /// <param name="startDate"></param> /// <param name="endDate"></param> /// <param name="weeks"></param> /// <returns></returns> public bool UpdateWeekDatas(string token, string circleKey, string place, DateTime startDate, DateTime endDate, int classWeekType, List <int> weeks) { var tokenService = new TokenService(); var tokenInfo = tokenService.GetTokenInfo(token).Result; if (tokenInfo == null) { return(false); } var learningCircleService = new LearningCircleService(); var learningCircleinfo = learningCircleService.GetDetailByOuterKey(circleKey); if (learningCircleinfo == null) { return(false); } var startHour = Convert.ToInt32(startDate.ToString("HH")); var endHour = Convert.ToInt32(endDate.ToString("HH")); var dayOfWeekService = new Utility.DayOfWeekTools(); var startWeek = startDate.DayOfWeek; //9點以前都是第一節,9點以後都(目前小時-7)節 startHour = startHour <= 9 ? 1 : startHour - 7; endHour = endHour <= 9 ? 1 : endHour - 7; try { var db = _uow.DbContext; //排序 周日:0 ~周六:6 weeks = weeks.OrderBy(t => t).ToList(); //查看week是否有錯誤資料 var weekMax = weeks.Max(t => t); if (weekMax >= 7) { return(false); } //取得資料庫目前傳統課表 var sqlWeekTablesDatas = GetByLearningCircleId(learningCircleinfo.Id); //暫存作為刪除的資料 var tempWeekTableDatas = sqlWeekTablesDatas.ToList(); foreach (var week in weeks) { var weekInfo = (DayOfWeek)week; //踢出不要刪除的weekTable資訊 if (tempWeekTableDatas.Count() > 0) { var removeTempData = tempWeekTableDatas.FirstOrDefault(t => t.StartTime.ToLocalTime().DayOfWeek.ToString() == weekInfo.ToString()); if (removeTempData != null) { tempWeekTableDatas.Remove(removeTempData); } } //設定開始日期 var _startDate = startDate; var checkWeek = week - (int)startWeek; if (checkWeek < 0) { _startDate = startDate.AddDays(7 + checkWeek); } else if (checkWeek > 0) { _startDate = startDate.AddDays(checkWeek); } //找出並修改要保留的資料 var editDataInfo = sqlWeekTablesDatas.FirstOrDefault(t => t.StartTime.ToLocalTime().DayOfWeek.ToString() == weekInfo.ToString()); if (editDataInfo != null) { editDataInfo.Place = place; editDataInfo.StartTime = _startDate.ToUniversalTime(); editDataInfo.EndTime = endDate.ToUniversalTime(); editDataInfo.StartPeriod = startHour; editDataInfo.EndPeriod = endHour; editDataInfo.ClassWeekType = classWeekType; continue; } //資料庫無該資料,需要新增 var entity = new WeekTable() { ClassWeekType = classWeekType, CreateUtcDate = DateTime.UtcNow, Creator = tokenInfo.MemberId, EndPeriod = endHour, EndTime = endDate.ToUniversalTime(), LearningCircleId = learningCircleinfo.Id, Place = place, StartPeriod = startHour, StartTime = _startDate.ToUniversalTime(), Week = dayOfWeekService.ChangeToCht(weekInfo) }; db.WeekTable.Add(entity); } //刪除timeTable資訊 foreach (var deleteWeek in tempWeekTableDatas) { var timeTableInfo = db.TimeTable.Where(t => t.Course_No == circleKey).ToList(); var deleteTimeTableDatas = timeTableInfo.Where(t => t.StartDate.Value.DayOfWeek.ToString() == deleteWeek.StartTime.DayOfWeek.ToString()).ToList(); db.TimeTable.RemoveRange(deleteTimeTableDatas); } //刪除weektable資訊 db.WeekTable.RemoveRange(tempWeekTableDatas); db.SaveChanges(); return(true); } catch (Exception ex) { return(false); } }
/// <summary> /// 建立多筆傳統周課表 /// </summary> /// <param name="token"></param> /// <param name="circleKey"></param> /// <param name="classWeekType"></param> /// <param name="place"></param> /// <param name="startDate"></param> /// <param name="endDate"></param> /// <param name="weeks"></param> /// <returns></returns> public IEnumerable <WeekTable> CreateWeekDatas(string token, string circleKey, int classWeekType, string place, DateTime startDate, DateTime endDate, List <int> weeks) { var saveDatas = new List <WeekTable>(); if (weeks.Count <= 0) //只新增一筆 { var data = CreateWeekData(token, circleKey, classWeekType, place, startDate, endDate); if (data == null) { return(null); } saveDatas.Add(data); return(saveDatas); } var tokenService = new TokenService(); var tokenInfo = tokenService.GetTokenInfo(token).Result; if (tokenInfo == null) { return(null); } var learningCircleService = new LearningCircleService(); var learningCircleinfo = learningCircleService.GetDetailByOuterKey(circleKey); if (learningCircleinfo == null) { return(null); } var startHour = Convert.ToInt32(startDate.ToString("HH")); var endHour = Convert.ToInt32(endDate.ToString("HH")); var dayOfWeekService = new Utility.DayOfWeekTools(); var startWeek = startDate.DayOfWeek; //9點以前都是第一節,9點以後都(目前小時-7)節 startHour = startHour < 9 ? 1 : startHour - 7; endHour = endHour < 9 ? 1 : endHour - 7; try { var db = _uow.DbContext; weeks = weeks.OrderBy(t => t).ToList(); var weekMax = weeks.Max(t => t); if (weekMax >= 7) { return(null); } foreach (var week in weeks) { var weekInfo = (DayOfWeek)week; var _startDate = startDate; var checkWeek = week - (int)startWeek; if (checkWeek < 0) { _startDate = startDate.AddDays(7 + checkWeek); } else if (checkWeek > 0) { _startDate = startDate.AddDays(checkWeek); } var entity = new WeekTable() { ClassWeekType = classWeekType, CreateUtcDate = DateTime.UtcNow, Creator = tokenInfo.MemberId, EndPeriod = endHour, EndTime = endDate.ToUniversalTime(), LearningCircleId = learningCircleinfo.Id, Place = place, StartPeriod = startHour, StartTime = _startDate.ToUniversalTime(), Week = dayOfWeekService.ChangeToCht(weekInfo) }; saveDatas.Add(entity); } db.WeekTable.AddRange(saveDatas); db.SaveChanges(); return(saveDatas); } catch (Exception ex) { return(null); } }