using Edu.Common.Enum; using Edu.Common.Enum.Course; using Edu.Model.Entity.Grade; using Edu.Model.ViewModel.Grade; using Edu.Model.ViewModel.Reserve; using System; using System.Collections.Generic; using System.Linq; using System.Text; using VT.FW.DB; namespace Edu.Repository.Grade { /// /// 班级上课计划仓储层 /// public class RB_Class_PlanRepository : BaseRepository { /// /// 获取班级上课计划列表 /// /// /// public List GetClassPlanListRepository(RB_Class_Plan_ViewModel query) { StringBuilder builder = new StringBuilder(); builder.AppendFormat(@" SELECT A.*,IFNULL(B.RoomName,'') AS RoomName,IFNULL(T.TeacherName,'') AS TeacherName,IFNULL(T.TeacherHead,'') AS UserIcon,IFNULL(C.ClassName,'') AS ClassName FROM RB_Class_Plan AS A LEFT JOIN rb_class_room AS B ON A.ClassRoomId=B.RoomId LEFT JOIN rb_teacher AS T ON A.TeacherId=T.TId LEFT JOIN rb_class AS C ON A.ClassId=C.ClassId WHERE 1=1 "); builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.Status), (int)DateStateEnum.Normal); if (query != null) { if (query.ClassId > 0) { builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.ClassId), query.ClassId); } if (query.ClassPlanId > 0) { builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.ClassPlanId), query.ClassPlanId); } if (query.Group_Id > 0) { builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.Group_Id), query.Group_Id); } if (query.School_Id > 0) { builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.School_Id), query.School_Id); } if (!string.IsNullOrEmpty(query.QClassPlanIds)) { builder.AppendFormat(" AND A.{0} IN({1}) ", nameof(RB_Class_Plan_ViewModel.ClassPlanId), query.QClassPlanIds); } if (!string.IsNullOrEmpty(query.QClassIds)) { builder.AppendFormat(" AND A.{0} IN({1}) ", nameof(RB_Class_Plan_ViewModel.ClassId), query.QClassIds); } if (!string.IsNullOrEmpty(query.QMonth)) { builder.AppendFormat(" AND DATE_FORMAT(A.{0},'%y/%m')= DATE_FORMAT('{1}-01','%y/%m') ", nameof(RB_Class_Plan_ViewModel.ClassDate), query.QMonth); } if (!string.IsNullOrEmpty(query.StartTime)) { builder.AppendFormat(" AND A.{0}>='{1}' ", nameof(RB_Class_Plan_ViewModel.ClassDate), query.StartTime); } if (!string.IsNullOrEmpty(query.EndTime)) { builder.AppendFormat(" AND A.{0}<='{1} 23:59:59' ", nameof(RB_Class_Plan_ViewModel.ClassDate), query.EndTime); } if (query.IsQRepeat == 1) { builder.AppendFormat(" AND IFNULL(A.{0},'')<>'' ", nameof(RB_Class_Plan_ViewModel.RepeatPlanIds)); } } return Get(builder.ToString()).ToList(); } /// /// 获取班级上课计划列表 /// /// /// public List GetClassPlanListExtRepository(RB_Class_Plan_ViewModel query) { StringBuilder builder = new StringBuilder(); builder.AppendFormat(@" SELECT A.*,IFNULL(B.RoomName,'') AS RoomName,IFNULL(T.TeacherName,'') AS TeacherName,IFNULL(T.TeacherHead,'') AS UserIcon ,Time.StartTime,time.EndTime,time.ClassTimeId ,TIMESTAMPDIFF(MINUTE, CONCAT('2020-12-16',' ',time.StartTime), CONCAT('2020-12-16',' ',time.EndTime)) AS ClassMinutes ,time.TimeHour,c.ClassName FROM RB_Class_Plan AS A LEFT JOIN rb_class_room AS B ON A.ClassRoomId=B.RoomId LEFT JOIN rb_teacher AS T ON A.TeacherId=T.TId LEFT JOIN rb_class_time AS time ON A.ClassPlanId=Time.ClassPlanId Left JOIN rb_class as c ON c.ClassId=A.ClassId WHERE 1=1 "); builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.Status), (int)DateStateEnum.Normal); if (query != null) { if (query.ClassId > 0) { builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.ClassId), query.ClassId); } if (query.ClassRoomId > 0) { builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.ClassRoomId), query.ClassRoomId); } if (query.ClassPlanId > 0) { builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.ClassPlanId), query.ClassPlanId); } if (query.Group_Id > 0) { builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.Group_Id), query.Group_Id); } if (query.TeacherId > 0) { builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.TeacherId), query.TeacherId); } //if (query.School_Id > 0) //{ // builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.School_Id), query.School_Id); //} if (query.ClassTimeId > 0) { builder.AppendFormat(" AND time.{0}={1} ", nameof(RB_Class_Plan_ViewModel.ClassTimeId), query.ClassTimeId); } if (!string.IsNullOrEmpty(query.QClassIds)) { builder.AppendFormat(" AND A.{0} IN({1}) ", nameof(RB_Class_Plan_ViewModel.ClassId), query.QClassIds); } if (!string.IsNullOrEmpty(query.QMonth)) { builder.AppendFormat(" AND DATE_FORMAT(A.{0},'%y/%m')= DATE_FORMAT('{1}-01','%y/%m') ", nameof(RB_Class_Plan_ViewModel.ClassDate), query.QMonth); } if (!string.IsNullOrEmpty(query.StartTime)) { builder.AppendFormat(" AND A.{0}>='{1}' ", nameof(RB_Class_Plan_ViewModel.ClassDate), query.StartTime); } if (!string.IsNullOrEmpty(query.EndTime)) { builder.AppendFormat(" AND A.{0}<='{1} 23:59:59' ", nameof(RB_Class_Plan_ViewModel.ClassDate), query.EndTime); } if (!string.IsNullOrEmpty(query.QClassDateStr)) { builder.AppendFormat(" AND DATE_FORMAT(A.{0},'%y/%m/%d')= DATE_FORMAT('{1}','%y/%m/%d') ", nameof(RB_Class_Plan_ViewModel.ClassDate), query.QClassDateStr); } } return Get(builder.ToString()).ToList(); } /// /// 获取上课计划 /// /// /// public List GetClassPlanList_V2(RB_Class_Plan_ViewModel query) { StringBuilder builder = new StringBuilder(); builder.AppendFormat(@" SELECT a.*,c.Teacher_Id,c.ClassName,c.ClassType,c.ClassHourMinute,T.TeacherName ,cou.CourseName FROM rb_class_plan as a LEFT JOIN rb_class c on a.ClassId = c.ClassId LEFT JOIN rb_teacher AS T ON a.TeacherId=T.TId LEFT JOIN rb_course as cou on cou.CourseId=c.CouseId where a.`Status`=0 and c.ClassStatus in(2,3) and c.`Status`=0"); if (query != null) { if (query.Group_Id > 0) { builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.Group_Id), query.Group_Id); } if (query.School_Id > 0) { builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.School_Id), query.School_Id); } if (query.ClassId > 0) { builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.ClassId), query.ClassId); } if (query.ClassRoomId > 0) { builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.ClassRoomId), query.ClassRoomId); } if (query.ClassPlanId > 0) { builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.ClassPlanId), query.ClassPlanId); } if (query.TeacherId > 0) { builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.TeacherId), query.TeacherId); } if (!string.IsNullOrEmpty(query.Q_TeacherIds)) { builder.AppendFormat(" AND A.{0} in({1}) ", nameof(RB_Class_Plan_ViewModel.TeacherId), query.Q_TeacherIds); } if (!string.IsNullOrEmpty(query.StartTime)) { builder.AppendFormat(" AND A.{0} >='{1}' ", nameof(RB_Class_Plan_ViewModel.ClassDate), query.StartTime); } if (!string.IsNullOrEmpty(query.EndTime)) { builder.AppendFormat(" AND A.{0} <='{1} 23:59:59' ", nameof(RB_Class_Plan_ViewModel.ClassDate), query.EndTime); } } return Get(builder.ToString()).ToList(); } /// /// 获取班级上课计划 /// /// /// /// /// /// public List GetClassPlanModelRepository(RB_Class_Plan_ViewModel query) { StringBuilder builder = new StringBuilder(); builder.AppendFormat(@" SELECT a.* FROM rb_class_plan as a WHERE a.`Status`=0 "); if (query != null) { if (query.Group_Id > 0) { builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.Group_Id), query.Group_Id); } if (query.ClassId > 0) { builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.ClassId), query.ClassId); } if (!string.IsNullOrEmpty(query.QClassDateStr)) { builder.AppendFormat(@" AND DATE_FORMAT(a.ClassDate,'%Y-%m-%d')=DATE_FORMAT('{0}','%Y-%m-%d') ", query.QClassDateStr); } else { builder.AppendFormat(@" AND DATE_FORMAT(a.ClassDate,'%Y-%m-%d')=DATE_FORMAT(NOW(),'%Y-%m-%d') "); } } builder.AppendFormat(@" ORDER BY ClassDate DESC "); return Get(builder.ToString()).ToList(); } /// /// 判断是否存在 /// /// /// public bool CheckExistsRepository(RB_Class_Plan_ViewModel model) { List list = new List() { new WhereHelper (nameof(RB_Class_Plan_ViewModel.ClassId),model.ClassId), new WhereHelper (nameof(RB_Class_Plan_ViewModel.ClassDate),model.ClassDate), }; return base.Exists(list); } /// /// 批量验证同一班级的上课计划 /// /// /// /// public List BatchCheckExistsRepository(int classId, string qClassDate) { StringBuilder builder = new StringBuilder(); builder.AppendFormat(@" SELECT A.* FROM rb_class_plan AS A WHERE A.`Status`=0 AND A.ClassId={0} AND A.ClassDate IN({1}) ", classId, qClassDate); return Get(builder.ToString()).ToList(); } /// /// 老师改变则修改后面的代课老师为新的教师编号 /// /// /// /// public bool UpdatePlanTeacherIdRepository(int TeacherId, int classId) { StringBuilder builder = new StringBuilder(); builder.AppendFormat(@" UPDATE rb_class_plan SET TeacherId={0} WHERE ClassId={1} AND ClassDate>'{2}' ", TeacherId, classId, DateTime.Now.ToString("yyyy-MM-dd")); return base.Execute(builder.ToString()) > 0; } /// /// 根据编号删除班级上课计划 /// /// /// public bool DeleteClassPlanRepository(string ClassPlanIds) { StringBuilder builder = new StringBuilder(); builder.AppendFormat(@" DELETE FROM RB_Class_Plan WHERE ClassPlanId IN({0}) ", ClassPlanIds); return base.Execute(builder.ToString()) > 0; } /// /// 获取班级最后一次上课日期 /// /// /// public List GetClassPlanMaxDataRepository(RB_Class_Plan_ViewModel query) { StringBuilder builder = new StringBuilder(); builder.AppendFormat(@" SELECT A.ClassId,MAX(A.ClassDate) AS ClassDate FROM rb_class_plan AS A WHERE 1=1 "); if (query != null) { if (query.Group_Id > 0) { builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.Group_Id), query.Group_Id); } if (query.ClassId > 0) { builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.ClassId), query.ClassId); } if (!string.IsNullOrEmpty(query.QClassIds)) { builder.AppendFormat(" AND A.{0} IN({1}) ", nameof(RB_Class_Plan_ViewModel.ClassId), query.QClassIds); } } return Get(builder.ToString()).ToList(); } /// /// 获取班级上课记录 /// /// /// /// /// /// public List GetClassPlanLogPageListRepository(int pageIndex, int pageSize, out long rowsCount, RB_Class_Plan_ViewModel query) { StringBuilder builder = new StringBuilder(); builder.AppendFormat(@" SELECT a.*,b.Teacher_Id,c.TeacherName FROM rb_class_plan as a LEFT JOIN rb_class as b on a.ClassId=b.ClassId LEFT JOIN rb_teacher as c on c.TId=a.TeacherId WHERE a.`Status`=0 and DATE_FORMAT(a.ClassDate,'%Y-%m-%d')<=DATE_FORMAT(NOW(),'%Y-%m-%d') "); if (query != null) { if (query.Group_Id > 0) { builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.Group_Id), query.Group_Id); } //if (query.School_Id > 0) //{ // builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.School_Id), query.School_Id); //} if (query.ClassId > 0) { builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.ClassId), query.ClassId); } if (query.TeacherId > 0) { builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.TeacherId), query.TeacherId); } if (query.Status >= 0) { builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.Status), (int)query.Status); } } builder.AppendFormat(@" order by ClassDate desc "); return GetPage(pageIndex, pageSize, out rowsCount, builder.ToString()).ToList(); } /// /// 获取班级累计上课时间(分钟) /// /// /// /// public int GetClassTotalMinute(int classId, int group_Id) { string sql = $@"SELECT SUM(t.minNum) AS minNum FROM( SELECT TIMESTAMPDIFF(MINUTE, CONCAT('2020-12-16',' ',t.StartTime), CONCAT('2020-12-16',' ',t.EndTime)) AS minNum FROM rb_class_plan p INNER JOIN rb_class_time t on p.ClassPlanId = t.ClassPlanId WHERE p.`Status`=0 AND p.Group_Id={group_Id} AND p.ClassId ={classId} )t; "; var obj = ExecuteScalar(sql); if (obj != null) { return Convert.ToInt32(obj); } else { return 0; } } /// /// 获取班级上课计划列表 /// /// /// public List GetTeacherPlanListRepository(RB_Class_Plan_ViewModel query) { StringBuilder builder = new StringBuilder(); builder.AppendFormat(@" SELECT * from (SELECT (SELECT COUNT(*) from rb_class_plan where `Status`=0 and DATE_FORMAT(ClassDate,'%Y-%m-%d') <=DATE_FORMAT(a.ClassDate,'%Y-%m-%d') and ClassId=a.ClassId) as Ranks, A.*,class.ClassName,lp.LessonPlanNum,lps.LessonPlanSummaryNum,IFNULL(B.RoomName,'') AS RoomName,IFNULL(T.TeacherName,'') AS TeacherName,IFNULL(T.TeacherHead,'') AS UserIcon FROM RB_Class_Plan AS A LEFT JOIN rb_class_room AS B ON A.ClassRoomId=B.RoomId LEFT JOIN rb_class as class on a.ClassId=class.ClassId LEFT JOIN rb_teacher AS T ON A.TeacherId=T.TId LEFT JOIN (SELECT ClassPlanId,COUNT(*) as LessonPlanNum from rb_class_lessonplan where `Status`=0 GROUP BY ClassPlanId)as lp on a.ClassPlanId=lp.ClassPlanId LEFT JOIN (SELECT ClassPlanId,COUNT(*) as LessonPlanSummaryNum from rb_class_lessonplan where `Status`=0 and ISNULL(Summary)=0 and LENGTH(trim(Summary))>0 GROUP BY ClassPlanId)as lps on a.ClassPlanId=lps.ClassPlanId WHERE 1=1 and class.ClassStatus in(1,2) and t.`Status`=0 and a.`Status`=0 and class.`Status`=0 ORDER BY a.ClassId,a.ClassDate) as a where 1=1 "); builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.Status), (int)DateStateEnum.Normal); if (query != null) { if (query.ClassId > 0) { builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.ClassId), query.ClassId); } if (query.ClassPlanId > 0) { builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.ClassPlanId), query.ClassPlanId); } if (query.Group_Id > 0) { builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.Group_Id), query.Group_Id); } if (query.School_Id > 0) { builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.School_Id), query.School_Id); } if (query.TeacherId > 0) { builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.TeacherId), query.TeacherId); } if (!string.IsNullOrEmpty(query.QClassIds)) { builder.AppendFormat(" AND A.{0} IN({1}) ", nameof(RB_Class_Plan_ViewModel.ClassId), query.QClassIds); } if (!string.IsNullOrEmpty(query.QMonth)) { builder.AppendFormat(" AND DATE_FORMAT(A.{0},'%y/%m')= DATE_FORMAT('{1}-01','%y/%m') ", nameof(RB_Class_Plan_ViewModel.ClassDate), query.QMonth); } if (!string.IsNullOrEmpty(query.StartTime)) { builder.AppendFormat(" AND DATE_FORMAT(A.{0},'%y-%m-%d')>=DATE_FORMAT('{1}','%y-%m-%d') ", nameof(RB_Class_Plan_ViewModel.ClassDate), query.StartTime); } if (!string.IsNullOrEmpty(query.EndTime)) { builder.AppendFormat(" AND DATE_FORMAT(A.{0},'%y-%m-%d')<=DATE_FORMAT('{1}','%y-%m-%d') ", nameof(RB_Class_Plan_ViewModel.ClassDate), query.EndTime); } } return Get(builder.ToString()).ToList(); } /// /// 获取学生上课计划列表 /// /// /// public List GetStudentPlanListRepository(RB_Class_Plan_ViewModel query) { StringBuilder builder = new StringBuilder(); builder.AppendFormat($@"SELECT a.*,c.ClassName,lp.LessonPlanNum,c.ClassHours,b.RoomName,IFNULL(T.TeacherHead,'') AS UserIcon,IFNULL(T.TeacherName,'') AS TeacherName FROM rb_class_plan as a LEFT JOIN rb_class as c on a.ClassId=c.ClassId LEFT JOIN rb_class_room as b on a.ClassRoomId=b.RoomId LEFT JOIN rb_teacher AS T ON c.Teacher_Id=T.TId LEFT JOIN rb_student_orderguest as sog on sog.ClassId=c.ClassId LEFT JOIN (SELECT ClassPlanId,COUNT(*) as LessonPlanNum from rb_class_lessonplan where `Status`=0 GROUP BY ClassPlanId)as lp on a.ClassPlanId=lp.ClassPlanId where sog.Account_Id={query.StuId} and c.ClassStatus in(1,2) and c.`Status`=0 and sog.`Status`=0 "); builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.Status), (int)DateStateEnum.Normal); if (query != null) { if (query.ClassId > 0) { builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.ClassId), query.ClassId); } if (query.ClassPlanId > 0) { builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.ClassPlanId), query.ClassPlanId); } if (query.Group_Id > 0) { builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.Group_Id), query.Group_Id); } if (query.School_Id > 0) { builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.School_Id), query.School_Id); } if (query.Teacher_Id > 0) { builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.Teacher_Id), query.Teacher_Id); } if (!string.IsNullOrEmpty(query.QClassIds)) { builder.AppendFormat(" AND A.{0} IN({1}) ", nameof(RB_Class_Plan_ViewModel.ClassId), query.QClassIds); } if (!string.IsNullOrEmpty(query.QMonth)) { builder.AppendFormat(" AND DATE_FORMAT(A.{0},'%y/%m')= DATE_FORMAT('{1}-01','%y/%m') ", nameof(RB_Class_Plan_ViewModel.ClassDate), query.QMonth); } if (!string.IsNullOrEmpty(query.StartTime)) { builder.AppendFormat(" AND DATE_FORMAT(A.{0},'%y-%m-%d')>=DATE_FORMAT('{1}','%y-%m-%d') ", nameof(RB_Class_Plan_ViewModel.ClassDate), query.StartTime); } if (!string.IsNullOrEmpty(query.EndTime)) { builder.AppendFormat(" AND DATE_FORMAT(A.{0},'%y-%m-%d')<=DATE_FORMAT('{1}','%y-%m-%d') ", nameof(RB_Class_Plan_ViewModel.ClassDate), query.EndTime); } } return Get(builder.ToString()).ToList(); } /// /// 老师上课计划统计 /// /// /// public List GetClassPlanStatisticalRepository(RB_Class_Plan_ViewModel query) { StringBuilder where = new StringBuilder(); where.AppendFormat(" AND B.ClassStatus IN(1,2,3) "); if (query != null) { if (query.Group_Id > 0) { where.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.Group_Id), query.Group_Id); } if (!string.IsNullOrEmpty(query.StartTime)) { where.AppendFormat(" AND DATE_FORMAT(A.{0},'%y-%m-%d')>=DATE_FORMAT('{1}','%y-%m-%d') ", nameof(RB_Class_Plan_ViewModel.ClassDate), query.StartTime); } if (!string.IsNullOrEmpty(query.EndTime)) { where.AppendFormat(" AND DATE_FORMAT(A.{0},'%y-%m-%d')<=DATE_FORMAT('{1}','%y-%m-%d') ", nameof(RB_Class_Plan_ViewModel.ClassDate), query.EndTime); } if (query.TeacherId > 0) { where.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.TeacherId), query.TeacherId); } if (query.ClassRoomId > 0) { where.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.ClassRoomId), query.ClassRoomId); } if (query.School_Id > -1) { where.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.School_Id), query.School_Id); } if (query.ClassId > 0) { where.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.ClassId), query.ClassId); } } StringBuilder builder = new StringBuilder(); builder.AppendFormat(@" SELECT A.ClassPlanId,A.ClassId,A.ClassDate,A.ClassRoomId,A.ClassName,A.CourseName,A.CourseId,A.Teacher_Id,A.TeacherName,A.UserIcon,A.RoomName ,SUM(A.minNum) AS ClassMinutes,MIN(A.StartTime) AS StartTime,MAX(A.EndTime) AS EndTime,A.CompleteProgress,a.TotalPlanNum, (SELECT COUNT(*) from rb_class_plan where `Status`=0 and DATE_FORMAT(ClassDate,'%Y-%m-%d') <=DATE_FORMAT(a.ClassDate,'%Y-%m-%d') and ClassId=a.ClassId) as Ranks FROM ( SELECT A.ClassPlanId, A.ClassId,A.ClassDate,A.ClassRoomId,B.ClassName,C.CourseName,c.CourseId,B.Teacher_Id,IFNULL(D.TeacherName,'') AS TeacherName,IFNULL(D.TeacherHead,'') AS UserIcon,E.RoomName ,TIMESTAMPDIFF(MINUTE, CONCAT('2020-12-16',' ',F.StartTime), CONCAT('2020-12-16',' ',F.EndTime)) AS minNum,F.StartTime,F.EndTime,B.CompleteProgress,plan.TotalPlanNum FROM rb_class_plan AS A INNER JOIN rb_class AS B ON A.ClassId=B.ClassId LEFT JOIN rb_course AS C ON B.CouseId=C.CourseId LEFT JOIN rb_teacher AS D ON A.TeacherId=D.TId LEFT JOIN rb_class_room AS E ON A.ClassRoomId=E.RoomId LEFT JOIN rb_class_time F on A.ClassPlanId = F.ClassPlanId LEFT JOIN ((SELECT ClassId,COUNT(*) as TotalPlanNum from rb_class_plan where `Status`=0 GROUP BY ClassId)) as plan on plan.ClassId=a.ClassId WHERE 1=1 AND A.`Status`=0 AND B.`Status`=0 {0} ) AS A GROUP BY A.ClassPlanId,A.ClassId ,A.ClassDate,A.ClassRoomId,A.CompleteProgress ", where.ToString()); return Get(builder.ToString()).ToList(); } /// /// 查询指定计划的上课课时 /// /// /// public double GetCurrentPlanStudyHoursRepository(int planId) { string sql = "select (select Count(0) from rb_class_plan b where b.ClassId=a.ClassId and b.ClassDate /// 获取班级上课记录 /// /// /// /// /// /// public List GetTeacherPlan(int pageIndex, int pageSize, out long rowsCount, RB_Class_Plan_ViewModel query) { StringBuilder where = new StringBuilder(); StringBuilder whereReserve = new StringBuilder(); where.AppendFormat(" AND B.ClassStatus IN(1,2) and b.`Status`=0 "); whereReserve.AppendFormat(" AND A.{0}={1} ", nameof(RB_Reserve_Class_Extend.Status), (int)DateStateEnum.Normal); string orderby = " a.ClassDate asc ,a.NewPlanDateTime asc"; if (query != null) { if (query.Group_Id > 0) { where.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.Group_Id), query.Group_Id); whereReserve.AppendFormat(" AND A.{0}={1} ", nameof(RB_Reserve_Class_Extend.Group_Id), query.Group_Id); } if (!string.IsNullOrEmpty(query.StartTime)) { where.AppendFormat(" AND DATE_FORMAT(A.{0},'%y-%m-%d')>=DATE_FORMAT('{1}','%y-%m-%d') ", nameof(RB_Class_Plan_ViewModel.ClassDate), query.StartTime); whereReserve.AppendFormat(" AND A.{0}>='{1}' ", nameof(RB_Reserve_Class_Extend.ClassDate), query.StartTime); } if (!string.IsNullOrEmpty(query.EndTime)) { where.AppendFormat(" AND DATE_FORMAT(A.{0},'%y-%m-%d')<=DATE_FORMAT('{1}','%y-%m-%d') ", nameof(RB_Class_Plan_ViewModel.ClassDate), query.EndTime); whereReserve.AppendFormat(" AND A.{0}<='{1} 23:59:59' ", nameof(RB_Reserve_Class_Extend.ClassDate), query.EndTime); } if (query.TeacherId > 0) { where.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.TeacherId), query.TeacherId); whereReserve.AppendFormat(" AND A.{0}={1} ", nameof(RB_Reserve_Class_Extend.TeacherId), query.TeacherId); } if (query.ClassRoomId > 0) { where.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.ClassRoomId), query.ClassRoomId); whereReserve.AppendFormat(" AND A.{0}={1} ", nameof(RB_Reserve_Class_Extend.ClassRoomId), query.ClassRoomId); } if (query.School_Id > -1) { where.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.School_Id), query.School_Id); whereReserve.AppendFormat(" AND A.{0}={1} ", nameof(RB_Reserve_Class_Extend.School_Id), query.School_Id); } if (query.ClassId > 0) { where.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.ClassId), query.ClassId); } if (query.OrderBy == 1) { orderby = " a.ClassDate desc ,a.NewPlanDateTime asc"; } } StringBuilder builder = new StringBuilder(); StringBuilder builderClass = new StringBuilder(); StringBuilder builderReserveClass = new StringBuilder(); builderReserveClass.AppendFormat(@"SELECT 2 as ClassType,A.ReserveClassId as ClassTimeId,a.ClassTime AS NewPlanDateTime ,a.ClassTime as StartTime,a.EndTime,0 as ClassPlanId,0 as ClassId,a.ClassDate,a.ClassRoomId,'试听课' as ClassName,a.ClassContent as CourseName, a.TeacherId as Teacher_Id,IFNULL(D.TeacherName,'') AS TeacherName,IFNULL(E.RoomName,'') AS RoomName, IFNULL(E.SeatNum,0) AS RoomNum,0 as TotalPlanNum FROM RB_Reserve_Class AS A LEFT JOIN rb_teacher AS D ON A.TeacherId=D.TId LEFT JOIN rb_class_room AS E ON A.ClassRoomId=E.RoomId WHERE 1=1 {0} ", whereReserve.ToString()); builderClass.AppendFormat(@" SELECT 1 as ClassType,F.ClassTimeId,CONCAT( DATE_FORMAT(A.ClassDate,'%Y-%m-%d') ,' ',f.StartTime,':00') AS NewPlanDateTime,F.StartTime,f.EndTime,A.ClassPlanId, A.ClassId,A.ClassDate,A.ClassRoomId,B.ClassName,C.CourseName, B.Teacher_Id,IFNULL(D.TeacherName,'') AS TeacherName,E.RoomName,IFNULL(E.SeatNum,0) AS RoomNum,plan.TotalPlanNum FROM rb_class_time as F INNER JOIN rb_class_plan AS A on F.ClassPlanId=a.ClassPlanId INNER JOIN rb_class AS B ON A.ClassId=B.ClassId LEFT JOIN rb_course AS C ON B.CouseId=C.CourseId LEFT JOIN rb_teacher AS D ON B.Teacher_Id=D.TId LEFT JOIN rb_class_room AS E ON A.ClassRoomId=E.RoomId LEFT JOIN ((SELECT ClassId,COUNT(*) as TotalPlanNum from rb_class_plan where `Status`=0 GROUP BY ClassId)) as plan on plan.ClassId=a.ClassId WHERE 1=1 AND A.`Status`=0 {0} ", where.ToString()); if (query.ClassType == 1) { builder.AppendFormat(@"SELECT A.ClassType,A.ClassTimeId,A.Teacher_Id,A.TeacherName,A.RoomName, a.RoomNum,A.StartTime,A.EndTime,A.ClassPlanId,A.ClassId,A.ClassDate,A.ClassRoomId,A.ClassName,A.CourseName,a.TotalPlanNum, (SELECT COUNT(*) from rb_class_plan where `Status`=0 and DATE_FORMAT(ClassDate,'%Y-%m-%d') <=DATE_FORMAT(a.ClassDate,'%Y-%m-%d') and ClassId=a.ClassId) as Ranks FROM ( {0} ) AS A GROUP BY a.ClassType,A.ClassTimeId,A.ClassPlanId,A.ClassId ,A.ClassDate,A.ClassRoomId ORDER BY {1}", builderClass.ToString(), orderby); } else if (query.ClassType == 2) { builder.AppendFormat(@"SELECT A.ClassType,A.ClassTimeId,A.Teacher_Id,A.TeacherName,A.RoomName, a.RoomNum,A.StartTime,A.EndTime,A.ClassPlanId,A.ClassId,A.ClassDate,A.ClassRoomId,A.ClassName,A.CourseName,a.TotalPlanNum, (SELECT COUNT(*) from rb_class_plan where `Status`=0 and DATE_FORMAT(ClassDate,'%Y-%m-%d') <=DATE_FORMAT(a.ClassDate,'%Y-%m-%d') and ClassId=a.ClassId) as Ranks FROM ( {0} ) AS A GROUP BY a.ClassType,A.ClassTimeId,A.ClassPlanId,A.ClassId ,A.ClassDate,A.ClassRoomId ORDER BY {1} ", builderReserveClass.ToString(), orderby); } else { builder.AppendFormat(@"SELECT A.ClassType,A.ClassTimeId,A.Teacher_Id,A.TeacherName,A.RoomName, a.RoomNum,A.StartTime,A.EndTime,A.ClassPlanId,A.ClassId,A.ClassDate,A.ClassRoomId,A.ClassName,A.CourseName,a.TotalPlanNum, (SELECT COUNT(*) from rb_class_plan where `Status`=0 and DATE_FORMAT(ClassDate,'%Y-%m-%d') <=DATE_FORMAT(a.ClassDate,'%Y-%m-%d') and ClassId=a.ClassId) as Ranks FROM ( {0} UNION all {1} ) AS A GROUP BY a.ClassType,A.ClassTimeId,A.ClassPlanId,A.ClassId ,A.ClassDate,A.ClassRoomId ORDER BY {2} ", builderClass.ToString(), builderReserveClass.ToString(), orderby); } return GetPage(pageIndex, pageSize, out rowsCount, builder.ToString()).ToList(); } #endregion #region 检查上课计划是否重复 /// /// 检查上课计划是否存在时间上的交集【HK2021-07-28新增】 /// /// /// /// public List CheckClassPlanRepository(int classId,List timeList) { StringBuilder builder = new StringBuilder(); builder.AppendFormat(@" SELECT A.* FROM ( SELECT A.*,B.ClassTimeId,CONCAT(DATE_FORMAT(A.ClassDate,'%Y-%m-%d'),' ',B.StartTime,':00') AS StartTime,CONCAT(DATE_FORMAT(A.ClassDate,'%Y-%m-%d'),' ',B.EndTime,':00') AS EndTime FROM rb_class_plan AS A INNER JOIN rb_class_time AS B ON A.ClassPlanId=B.ClassPlanId INNER JOIN rb_class AS C ON A.ClassId=C.ClassId WHERE A.`Status`=0 AND A.ClassDate>='{0}' AND C.ClassStatus IN(1,2) ) AS A WHERE 1=1 ", Common.ConvertHelper.FormatDate(DateTime.Now)); if (classId > 0) { builder.AppendFormat(" AND A.{0}<>{1} ", nameof(RB_Class_Plan_ViewModel.ClassId), classId); } if (timeList != null && timeList.Count > 0) { string tempStr = ""; int index = 0; foreach (var item in timeList) { if (index == 0) { tempStr += string.Format(" (NOT (A.StartTime > '{0}' OR A.EndTime < '{1}')) ", item.EndTime, item.StartTime); } else { tempStr += string.Format(" OR (NOT (A.StartTime > '{0}' OR A.EndTime < '{1}')) ", item.EndTime, item.StartTime); } index++; } if (!string.IsNullOrEmpty(tempStr)) { builder.AppendFormat(" AND ({0}) ", tempStr); } } return Get(builder.ToString()).ToList(); } /// /// 批量添加上课计划 /// /// /// public List BatchInsertClassPlanRepository(List planList) { List newPlanList = new List(); bool flag = true; if (planList != null && planList.Count > 0) { StringBuilder builder = new StringBuilder(); builder.AppendFormat(" INSERT INTO RB_Class_Plan(ClassId,ClassDate,Status,ClassRoomId,Group_Id,School_Id,TeacherId,BeiKeStatus,FanKuiStatus,ParentFanKuiStatus) "); builder.AppendFormat(" VALUES "); string tempStr = ""; foreach (var item in planList) { tempStr += $",({item.ClassId},'{Common.ConvertHelper.FormatDate(item.ClassDate)}',0,{item.ClassRoomId},{item.Group_Id},{item.School_Id},{item.TeacherId},0,0,0) "; } builder.Append(tempStr.TrimStart(',')); flag = base.Execute(builder.ToString()) > 0; if (flag) { newPlanList = GetClassPlanListRepository(new RB_Class_Plan_ViewModel() { ClassId = planList[0].ClassId, StartTime = Common.ConvertHelper.FormatDate(DateTime.Now) }); } } return newPlanList; } /// /// 批量更新上课计划冲突的计划编号 /// /// /// public bool BatchUpdateClassPlanRepository(List planList) { bool flag = true; if (planList != null && planList.Count > 0) { StringBuilder builder = new StringBuilder(); builder.AppendFormat(" INSERT INTO RB_Class_Plan(ClassPlanId,RepeatPlanIds) "); builder.AppendFormat(" VALUES "); string tempStr = ""; foreach (var item in planList) { tempStr += $",({item.ClassPlanId},'{item.RepeatPlanIds}') "; } builder.Append(tempStr.TrimStart(',')); builder.Append(" ON DUPLICATE KEY UPDATE RepeatPlanIds =VALUES(RepeatPlanIds) "); flag = base.Execute(builder.ToString()) > 0; } return flag; } /// /// 检查班级上课计划是否存在重复,有重复则更新冲突的编号 /// /// /// public void CheckClassPlanRepeatRepository(int ClassId, out bool result) { result = false; List timeItemList = new List(); var newPlanList = GetClassPlanListExtRepository(new RB_Class_Plan_ViewModel() { ClassId = ClassId, StartTime = Common.ConvertHelper.FormatDate(DateTime.Now) }); foreach (var item in newPlanList) { timeItemList.Add(new TimeItem() { StartTime = Common.ConvertHelper.FormatDate(item.ClassDate) + " " + item.StartTime + ":00", EndTime = Common.ConvertHelper.FormatDate(item.ClassDate) + " " + item.EndTime + ":00", }); } var repeatList = CheckClassPlanRepository(ClassId, timeItemList); var updatePlanList = new List(); foreach (var item in newPlanList) { var tempRepeatList = repeatList?.Where(qitem => qitem.ClassDate == item.ClassDate)?.ToList(); List ids = new List(); if (tempRepeatList != null && tempRepeatList.Count > 0) { if (item.TeacherId > 0) { var teacherList = tempRepeatList?.Where(qitem => qitem.TeacherId == item.TeacherId)?.ToList(); if (teacherList != null && teacherList.Count > 0) { var tempIds = Common.ConvertHelper.StringToList(string.Join(",", teacherList.GroupBy(qitem => qitem.ClassPlanId).Select(qitem => qitem.Key))); if (tempIds != null && tempIds.Count > 0) { ids.AddRange(tempIds); } } } if (item.ClassRoomId > 0) { var classroomList = tempRepeatList?.Where(qitem => qitem.ClassRoomId == item.ClassRoomId)?.ToList(); if (classroomList != null && classroomList.Count > 0) { var tempIds = Common.ConvertHelper.StringToList(string.Join(",", classroomList.GroupBy(qitem => qitem.ClassPlanId).Select(qitem => qitem.Key))); if (tempIds != null && tempIds.Count > 0) { ids.AddRange(tempIds); } } } } string RepeatPlanIds = ""; if (ids != null && ids.Count > 0) { RepeatPlanIds = string.Join(",", ids); if (!result) { result = true; } } updatePlanList.Add(new RB_Class_Plan_ViewModel() { ClassPlanId = item.ClassPlanId, RepeatPlanIds = RepeatPlanIds, }); } if (updatePlanList != null && updatePlanList.Count > 0) { BatchUpdateClassPlanRepository(updatePlanList); } } /// /// 批量修改教室或者老师 /// /// /// /// /// public bool UpdateClassPlanTeacherOrClassRoomIdRepository(int TeacherId, int ClassRoomId, string planIds) { StringBuilder builder = new StringBuilder(); builder.AppendFormat(" UPDATE rb_class_plan SET "); if (TeacherId > 0) { builder.AppendFormat(" TeacherId={0} ", TeacherId); } if (ClassRoomId > 0) { builder.AppendFormat(" ClassRoomId={0} ", ClassRoomId); } builder.AppendFormat(" WHERE ClassPlanId IN({0}) ", planIds); return base.Execute(builder.ToString()) > 0; } #endregion /// /// 生成上课计划列表 /// /// /// /// /// /// public List CreateClassPlanRepository(RB_Class_ViewModel model, List defaultPlanTimeList,decimal finishClassHours,int BasicMinutes,string defaultOpenTime="") { List classPlanList = new List(); if (model.ClassHours > 0 && defaultPlanTimeList != null && defaultPlanTimeList.Count > 0) { var srartDate = model.OpenTime; if (model.OpenTime < DateTime.Now) { srartDate = DateTime.Now; } if (!string.IsNullOrEmpty(defaultOpenTime)) { srartDate = Convert.ToDateTime(defaultOpenTime); } //按周排课和按月排课 if (model.ClassStyle == ClassStyleEnum.Week || model.ClassStyle == ClassStyleEnum.Month) { int i = 0; double totalHours = Convert.ToDouble(finishClassHours); while (model.ClassHours > totalHours) { var newDate = srartDate.AddDays(i); foreach (var item in model.WeekDayList) { var planModel = new RB_Class_Plan_ViewModel() { ClassId = model.ClassId, ClassPlanId = 0, ClassRoomId = model.ClassRoomId, Group_Id = model.Group_Id, School_Id = model.School_Id, PlanTimeList = new List(), TeacherId = model.Teacher_Id, ClassDate = newDate }; if (model.ClassStyle == ClassStyleEnum.Week) { switch (item) { case "1": if (newDate.DayOfWeek == DayOfWeek.Monday) { var timeList = defaultPlanTimeList.Where(qitem => qitem.DateList.Contains(item))?.FirstOrDefault()?.TimeList; if (timeList != null && timeList.Count > 0) { var dayHours = CalcDayClassHoursRepository(timeList, planModel.PlanTimeList, model, BasicMinutes); totalHours += dayHours; classPlanList.Add(planModel); } } break; case "2": if (newDate.DayOfWeek == DayOfWeek.Tuesday) { var timeList = defaultPlanTimeList.Where(qitem => qitem.DateList.Contains(item))?.FirstOrDefault()?.TimeList; if (timeList != null && timeList.Count > 0) { var dayHours = CalcDayClassHoursRepository(timeList, planModel.PlanTimeList, model, BasicMinutes); totalHours += dayHours; classPlanList.Add(planModel); } } break; case "3": if (newDate.DayOfWeek == DayOfWeek.Wednesday) { var timeList = defaultPlanTimeList.Where(qitem => qitem.DateList.Contains(item))?.FirstOrDefault()?.TimeList; if (timeList != null && timeList.Count > 0) { var dayHours = CalcDayClassHoursRepository(timeList, planModel.PlanTimeList, model, BasicMinutes); totalHours += dayHours; classPlanList.Add(planModel); } } break; case "4": if (newDate.DayOfWeek == DayOfWeek.Thursday) { var timeList = defaultPlanTimeList.Where(qitem => qitem.DateList.Contains(item))?.FirstOrDefault()?.TimeList; if (timeList != null && timeList.Count > 0) { var dayHours = CalcDayClassHoursRepository(timeList, planModel.PlanTimeList, model, BasicMinutes); totalHours += dayHours; classPlanList.Add(planModel); } } break; case "5": if (newDate.DayOfWeek == DayOfWeek.Friday) { var timeList = defaultPlanTimeList.Where(qitem => qitem.DateList.Contains(item))?.FirstOrDefault()?.TimeList; if (timeList != null && timeList.Count > 0) { var dayHours = CalcDayClassHoursRepository(timeList, planModel.PlanTimeList, model, BasicMinutes); totalHours += dayHours; classPlanList.Add(planModel); } } break; case "6": if (newDate.DayOfWeek == DayOfWeek.Saturday) { var timeList = defaultPlanTimeList.Where(qitem => qitem.DateList.Contains(item))?.FirstOrDefault()?.TimeList; if (timeList != null && timeList.Count > 0) { var dayHours = CalcDayClassHoursRepository(timeList, planModel.PlanTimeList, model, BasicMinutes); totalHours += dayHours; classPlanList.Add(planModel); } } break; case "7": if (newDate.DayOfWeek == DayOfWeek.Sunday) { var timeList = defaultPlanTimeList.Where(qitem => qitem.DateList.Contains(item))?.FirstOrDefault()?.TimeList; if (timeList != null && timeList.Count > 0) { var dayHours = CalcDayClassHoursRepository(timeList, planModel.PlanTimeList, model, BasicMinutes); totalHours += dayHours; classPlanList.Add(planModel); } } break; } } else if (model.ClassStyle == ClassStyleEnum.Month) { if (newDate.Day == Convert.ToInt32(item)) { var timeList = defaultPlanTimeList.Where(qitem => qitem.DateList.Contains(item))?.FirstOrDefault()?.TimeList; if (timeList != null && timeList.Count > 0) { var dayHours = CalcDayClassHoursRepository(timeList, planModel.PlanTimeList, model, BasicMinutes); totalHours += dayHours; classPlanList.Add(planModel); } } } } i++; } } //固定日期 else if (model.ClassStyle == ClassStyleEnum.FixedDate) { foreach (var item in model.WeekDayList) { var planModel = new RB_Class_Plan_ViewModel() { ClassId = model.ClassId, ClassPlanId = 0, ClassRoomId = model.ClassRoomId, Group_Id = model.Group_Id, School_Id = model.School_Id, PlanTimeList = new List(), TeacherId = model.Teacher_Id, ClassDate = Convert.ToDateTime(item) }; var timeList = defaultPlanTimeList.Where(qitem => qitem.DateList.Contains(item))?.FirstOrDefault()?.TimeList; if (timeList != null && timeList.Count > 0) { CalcDayClassHoursRepository(timeList, planModel.PlanTimeList, model, BasicMinutes); classPlanList.Add(planModel); } } } //约课 else { } } return classPlanList; } /// /// 计算每天课时 /// /// /// /// /// private double CalcDayClassHoursRepository(List timeList, List classTimeList, RB_Class_ViewModel model, int BasicMinutes) { double dayClassHours = 0; double dayMinutes = 0; foreach (var sItem in timeList) { var timeModel = new RB_Class_Time_ViewModel() { StartTime = sItem.StartTime, EndTime = sItem.EndTime, TimeHour = sItem.TimeHour, }; classTimeList.Add(timeModel); var startDate = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd") + " " + sItem.StartTime + ":00"); var endDate = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd") + " " + sItem.EndTime + ":00"); TimeSpan span = endDate.Subtract(startDate); if (span.TotalMinutes > 0) { dayMinutes += span.TotalMinutes; } } if (model.ClassHourMinute > 0) { dayClassHours = dayMinutes / model.ClassHourMinute; } else { dayClassHours = dayMinutes / BasicMinutes; } return dayClassHours; } /// /// 查询明日还有未备课的老师信息 /// /// public List GetNotPerparingTeachRepository() { var sql = @"select b.Id as AccountId,b.WorkUserId,c.TeacherName,Count(0) as ClassCount from rb_class_plan a left join rb_account b on a.TeacherId=b.AccountId and b.AccountType=2 left join rb_teacher c on a.TeacherId=c.Tid left join rb_class d on a.ClassId=d.ClassId where ClassDate=DATE_FORMAT(DATE_ADD(NOW(),INTERVAL 1 DAY),'%Y-%m-%d') and a.BeiKeStatus=0 and a.TeacherId>0 and d.ClassStatus=2 and d.`Status`=0 and a.`Status`=0 and b.WorkUserId is not null group by TeacherId"; return Get(sql,null).ToList(); } } }