private IList <Sys.Models.TeachingSchedule> BuildClass(bool isClass, DateTime startDate, string CurriculumTime, Models.RequestModel.TeachingScheduleRequest teachingschedule) { IList <Sys.Models.TeachingSchedule> entityList = new List <Sys.Models.TeachingSchedule>(); if (!isClass) { return(entityList); } string[] curriculumAMTimeArr = CurriculumTime.Split('-'); //上课开始时间 DateTime classStartTime = Convert.ToDateTime("2008-08-08 " + curriculumAMTimeArr[0]); //上课结束时间 DateTime classOverTime = Convert.ToDateTime("2008-08-08 " + curriculumAMTimeArr[1]); //检查是否有重复课程 IEnumerable <dynamic> coachTeachingSches = Services.CoachService.GetCoachTeachingScheByDay(teachingschedule.CoachID.Value, startDate.ToString("yyyy-MM-dd"), startDate.AddDays(1).ToString("yyyy-MM-dd")); bool classIsContain = true; while (classIsContain) { //单节课下课时间 DateTime singleClassOverTime = classStartTime.AddMinutes(teachingschedule.ClassLength); Sys.Models.TeachingSchedule info = new Sys.Models.TeachingSchedule() { AddTime = DateTime.Now, CurriculumDate = startDate, CurriculumBeginTime = classStartTime.ToString("HH:mm"), CurriculumEndTime = singleClassOverTime.ToString("HH:mm"), Info = teachingschedule.Info, CampusID = teachingschedule.CampusID, CoachID = teachingschedule.CoachID, CoachPrice = teachingschedule.CoachPrice, PKType = teachingschedule.PKType, Price = teachingschedule.Price, State = 0, Title = teachingschedule.Title, VenueID = teachingschedule.VenueID, PurchasePrice = teachingschedule.PurchasePrice }; //设置下一节课上课时间 if (singleClassOverTime >= classOverTime) { singleClassOverTime = classOverTime; info.CurriculumEndTime = classOverTime.ToString("HH:mm"); classIsContain = false; } //上课开始时间必须小于下课时间 if (classStartTime < singleClassOverTime) { IsContainClass(coachTeachingSches, classStartTime, singleClassOverTime, info); entityList.Add(info); classStartTime = classStartTime.AddMinutes(teachingschedule.ClassLength).AddMinutes(teachingschedule.RestLength); } } return(entityList); }
public IHttpActionResult Create(Models.RequestModel.TeachingScheduleRequest teachingschedule) { logs.Info(Newtonsoft.Json.JsonConvert.SerializeObject(teachingschedule)); if (!ModelState.IsValid) { return(Ok(Comm.ResponseModel.ResponseModelBase.GetRes(ValidationMsg))); } try { //上课周期 string[] curriculumDateArr = teachingschedule.CurriculumDateStr .Split("to".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); DateTime startDate = Convert.ToDateTime(curriculumDateArr[0]); DateTime endDate = Convert.ToDateTime(curriculumDateArr[1]); List <Sys.Models.TeachingSchedule> entityList = new List <Sys.Models.TeachingSchedule>(); bool isContain = true; while (isContain) { try { //上午上课 entityList.AddRange(BuildClass(teachingschedule.TimepickerAMCheckd, startDate, teachingschedule.CurriculumAMTime, teachingschedule)); //下午上课 entityList.AddRange(BuildClass(teachingschedule.TimepickerPMCheckd, startDate, teachingschedule.CurriculumPMTime, teachingschedule)); } catch (Exception ex) { logs.Error("排课失败", ex); return(Ok(Comm.ResponseModel.ResponseModelBase.GetRes(ex.Message))); } startDate = startDate.AddDays(1); if (startDate > endDate) { isContain = false; } } bool isOk = false; var campusInfo = DapperHelper.Instance.Get <Campus>(teachingschedule.CampusID); System.Data.IDbConnection connection = Comm.Helper.DapperHelper.Instance; using (connection) { connection.Open(); System.Data.IDbTransaction transaction = connection.BeginTransaction(); try { TeachingScheduleMaster tcm = TConvertHelper.Mapper <TeachingScheduleMaster, TeachingScheduleRequest>(teachingschedule); tcm.AddTime = DateTime.Now; tcm.CurriculumBeginDate = Convert.ToDateTime(curriculumDateArr[0]); tcm.CurriculumEndDate = Convert.ToDateTime(curriculumDateArr[1]); tcm.TotalClassHour = entityList.Count; tcm.Latitude = campusInfo.Latitude; tcm.Longitude = campusInfo.Longitude; connection.Insert <TeachingScheduleMaster>(tcm, transaction); connection.Insert <Sys.Models.TeachingSchedule>(entityList, transaction); transaction.Commit(); isOk = true; } catch (Exception ex) { logs.Error("排课失败", ex); transaction.Rollback(); return(BadRequest()); } } return(isOk ? Ok(Comm.ResponseModel.ResponseModelBase.Success()) : Ok(Comm.ResponseModel.ResponseModelBase.SysError())); } catch (Exception ex) { logs.Error("排课失败", ex); return(BadRequest()); } }