public Response Delete(CoachBootcampCourse obj) { List <EntityBase> entites = new List <EntityBase>(); entites.Add(obj); return(DbContext.GetInstance().Execute(CommandHelper.CreateSave(entites))); }
/// <summary> /// 计算课程和学员教练相关的各种状态 /// </summary> public Response ComputeState(Response result, string CoachBootcampId, string CurrentUserId) { //学员如果没有报名(没有买集训课) if (!CoachHelper.Instance.IsJoinedCoachBootcamp(CoachBootcampId, CurrentUserId)) { foreach (var item in result.Entities) { CoachBootcampCourse obj = item as CoachBootcampCourse; obj.State = "NotBuy"; } } else //有买集训课, 计算其他状态 { foreach (var item in result.Entities) {//遍历每节课 CoachBootcampCourse obj = item as CoachBootcampCourse; if (CoachHelper.Instance.IsHaveCourse(CurrentUserId, obj.Id)) { //有课 obj.State = "HaveCourse"; } else //没有课, 判断其他状态 { if (IsAppointmentBootcampCourse(obj.Id, CurrentUserId)) { //预约成功 obj.State = "Joined"; } else { //未预约 obj.State = "NotJoin"; } } } //遍历每节课 } //有买集训课, 计算其他状态 return(result); }
/// <summary> /// 判断课程时间范围是否重合 /// </summary> /// <param name="obj"></param> /// <returns></returns> public bool IsRepeatPeriodInPrivateCoach(CoachBootcampCourse obj) { //此算法来源于 SO 的牛b算法, 当时本人写了几百行代码都没解决, SO 大神一句就搞定了, 膜拜 //http://stackoverflow.com/questions/13513932/algorithm-to-detect-overlapping-periods var sql = @" SELECT COUNT(*) FROM dbo.CoachBootcampCourse WHERE @BeginTime < EndTime AND BeginTime < @EndTime AND CoachBootcampId=@CoachBootcampId "; if (obj.RowState == RowState.Modified) { sql += " AND Id!=@Id "; //如果是修改操作, 把自己剔除掉判断 . 如果是添加操作, 所有记录参与判断 } var cmdVal = CommandHelper.CreateText <ClubUser>(FetchType.Scalar, sql); cmdVal.Params.Add("@BeginTime", obj.BeginTime); cmdVal.Params.Add("@EndTime", obj.EndTime); cmdVal.Params.Add("@CoachBootcampId", obj.CoachBootcampId); if (obj.RowState == RowState.Modified) { cmdVal.Params.Add("@Id", obj.Id); } var result = DbContext.GetInstance().Execute(cmdVal); if ((int)result.Tag == 1) { return(true); } else { return(false); } }
public Response Execute(User currentUser, string request) { var req = JsonConvert.DeserializeObject <Request <GetSystemManageRelatedFilter> >(request); var cmd = CommandHelper.CreateProcedure <CoachBootcampCourse>(text: "sp_GetCoachBootcampCourseList"); cmd.Params.Add(CommandHelper.CreateParam("@CoachBootcampId", req.Filter.CoachBootcampId)); cmd.Params.Add(CommandHelper.CreateParam("@CurrentUserId", req.Filter.CurrentUserId)); if (req.Filter.BootcampCourseBeginTime != DateTime.MinValue && req.Filter.BootcampCourseEndTime != DateTime.MinValue) { //前端传了用前端的时间 cmd.Params.Add(CommandHelper.CreateParam("@BeginTime", req.Filter.BootcampCourseBeginTime)); cmd.Params.Add(CommandHelper.CreateParam("@EndTime", req.Filter.BootcampCourseEndTime.AddDays(1).AddMinutes(-1))); } else //没传走以下逻辑 { //如果当前时间在 课程表时间范围内, 课程表列表从当前时间开始查询 SetBeginEndTime(cmd, req.Filter.CoachBootcampId); } cmd.CreateParamPager(req.Filter); var result = DbContext.GetInstance().Execute(cmd); result.SetRowCount(); result = ComputeState(result, req.Filter.CoachBootcampId, req.Filter.CurrentUserId); foreach (var item in result.Entities) { CoachBootcampCourse obj = item as CoachBootcampCourse; obj.AppointmentCount = GetAppointmentCount(obj.Id); } List <CoachBootcampSyllabus> listSyllabus = new List <CoachBootcampSyllabus>(); //先得到日期列表 var listCourse = result.Entities.ToList <EntityBase, CoachBootcampCourse>(); List <DateTime> listDate = listCourse .GroupBy(e => ((DateTime)e.BeginTime).Date) .Select(g => (DateTime)g.First().BeginTime) .ToList(); //再根据日期得到每个节点数据 List <CoachBootcampCourse> coachBootcampCourseList = new List <CoachBootcampCourse>(); foreach (var item in listDate) { var listCourseSecond = listCourse.Where(e => ((DateTime)e.BeginTime).ToShortDateString() == item.ToShortDateString() ); CoachBootcampSyllabus syllabus = new CoachBootcampSyllabus(); syllabus.Date = item; syllabus.DayOfWeek = Helper.GetDayOfWeekChinese(item.DayOfWeek.ToString()); foreach (var second in listCourseSecond) { //syllabus.CourseList.Add(second); coachBootcampCourseList.Add(second); } //listSyllabus.Add(syllabus); } result.Entities.Clear(); result.Entities.AddRange(coachBootcampCourseList); return(result); }