using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Threading.Tasks; using System.Web; using Learun.Application.Organization; using Learun.Application.TwoDevelopment.EducationalAdministration; using Learun.Util; using Nancy; namespace Learun.Application.WebApi.Modules { public class TimeTable : BaseApi { public TimeTable() : base("/learun/adms/timetable") { Get["/list"] = GetList; Get["/StuList"] = GetStuInfo; Get["/StuLessonInfo"] = GetStuLessonInfo; Get["/timeTableData"] = GetTimeTableData; Get["/TenDay"] = GetTenDay; } private ArrangeLessonTermIBLL arrangeLessonTermIBLL = new ArrangeLessonTermBLL(); private ArrangeLessonTermOfElectiveIBLL arrangeLessonTermOfElectiveIBLL = new ArrangeLessonTermOfElectiveBLL(); private StuAttendanceLeaveIBLL stuAttendanceLeaveIBLL = new StuAttendanceLeaveBLL(); private StuAttendanceIBLL stuAttendanceIBLL = new StuAttendanceBLL(); private EmpInfoIBLL empInfoIbll = new EmpInfoBLL(); private StuInfoBasicIBLL stuInfoBasicIBLL = new StuInfoBasicBLL(); private SchoolCalendarIBLL schoolCalendarIbll = new SchoolCalendarBLL(); /// /// 课程表【教师功能、学生功能】 /// /// /// public Response GetList(dynamic _) { var param = this.GetReqData(); var timeTableList = new List(); //课程表 var data = arrangeLessonTermIBLL.GetTimeTable(userInfo.account, userInfo.Description, param.StartDate, param.EndDate); timeTableList.AddRange(data); //选修课课程表 var dataOfElective = arrangeLessonTermOfElectiveIBLL.GetTimeTable(userInfo.account, userInfo.Description, param.StartDate, param.EndDate); timeTableList.AddRange(dataOfElective); var leaveList = stuAttendanceLeaveIBLL.GetList(); foreach (var item in timeTableList) { item.LeaveType = leaveList.Any(c => c.LessonNo == item.LessonNo && c.StuNo == userInfo.account && c.LessonDate == item.LessonDate && c.LessonTime == item.LessonTime) ? "1" : "0"; item.IsCheck = leaveList.FirstOrDefault(c => c.LessonNo == item.LessonNo && c.StuNo == userInfo.account && c.LessonDate == item.LessonDate && c.LessonTime == item.LessonTime)?.IsCheck; } return Success(timeTableList); } /// /// 获取本堂课的学生出勤信息 /// /// /// public Response GetStuInfo(dynamic _) { var param = this.GetReqData(); var result = stuAttendanceIBLL.GetStuInfo(param.AcademicYear, param.Semester, param.LessonNo, param.EmpNo, param.ClassRoomNo, param.LessonTime, param.LessonDate, param.TeachClassNo); var date = Convert.ToDateTime(param.LessonDate).ToString("yyyy-MM-dd"); var time = NumberToChinese(param.LessonTime.Substring(1, 1)); if (result.Count > 0) { var shouldArrive = result.Count; var turnTo = result.Count(a => a.AttendOrNo == "是"); var classRoomName = param.ClassroomName; var className = result.FirstOrDefault().ClassName; var lessonName = result.FirstOrDefault().LessonName; return Success(new { result, date, time, shouldArrive, turnTo, classRoomName, className, lessonName }); } else { return Success(new { result, date, time }); } } public Response GetStuLessonInfo(dynamic _) { var param = this.GetReqData(); var startdate = DateTime.Today; var startDate = Common.CalculateFirstDateOfWeek(startdate).ToString("yyyy-MM-dd"); var endDate = Common.CalculateLastDateOfWeek(startdate).ToString("yyyy-MM-dd"); var lessonInfos = stuAttendanceIBLL.GetStuLessonInfo("", "", ""); var strAcademicYear = ""; var strSemester = ""; var AcademicYearShort = ""; // 获取学年,学期 if (!param.StartDate.IsEmpty() && !param.EndDate.IsEmpty()) { var NewsemesterAndYear = Common.GetSemesterAndYear(param.StartDate); strAcademicYear = NewsemesterAndYear.AcademicYearLong; strSemester = NewsemesterAndYear.Semester; AcademicYearShort = NewsemesterAndYear.AcademicYearShort; } else { var semesterAndYear = Common.GetSemesterAndYear(startDate); strAcademicYear = semesterAndYear.AcademicYearLong; strSemester = semesterAndYear.Semester; AcademicYearShort = semesterAndYear.AcademicYearShort; } if (param.StartDate.IsEmpty() && param.EndDate.IsEmpty()) { // 校历 var entity = schoolCalendarIbll.GetSchoolCalendarEntityByNo(AcademicYearShort, strSemester); var StartTime = entity.StartTime.Value; //获取第几周 var curWeek = WeekOfYear(startdate, entity.StartTime.Value, entity.EndTime.Value); ///获取当前周次开始时间 startDate = Common.CalculateFirstDateOfWeek(StartTime.AddDays(((curWeek - 1) * 14))).ToString("yyyy-MM-dd"); if (curWeek == 1 && Convert.ToDateTime(startDate) < StartTime)//判断第几周 { startDate = StartTime.ToString("yyyy-MM-dd"); } endDate = Common.CalculateFirstDateOfWeek(StartTime.AddDays(((curWeek - 1) * 14))).AddDays(13).ToString("yyyy-MM-dd"); param.StartDate = startDate; param.EndDate = endDate; } lessonInfos = stuAttendanceIBLL.GetStuLessonInfo(userInfo.account, param.StartDate, param.EndDate); var empNos = lessonInfos.Select(a => a.EmpNo).ToList(); var lessonTerms = arrangeLessonTermIBLL.GetListByEmpNo(empNos); var list = lessonInfos.Select(a => new { a.LessonName, LessonDate = Convert.ToDateTime(a.LessonDate).ToString("yyyy-MM-dd"), Teacher = lessonTerms.FirstOrDefault(b => b.EmpNo == a.EmpNo)?.EmpName, a.LessonTime, a.EmpNo, a.ClassRoomName, a.Sort, a.AttendOrNo }).ToList(); var weeks = list.GroupBy(a => a.LessonDate).ToList(); List results = new List(); foreach (var item in weeks) { var weekList = list.Where(a => a.LessonDate == item.Key).ToList(); var week = weekList[0].LessonTime.Substring(0, 1); var result = new { week, weekList }; results.Add(result); } return Success(new { results, schoolName = "课程表", semester = $"{strAcademicYear}学年度 第{strSemester}学期", startDate = param.StartDate, endDate = param.EndDate }); } /// /// 全院课程表【按班级分组】 /// /// /// private Response GetTimeTableData(dynamic _) { var param = this.GetReq(); TimeTableData result = new TimeTableData(); //开始时间 var startdate = string.IsNullOrEmpty(param.StartDate) ? DateTime.Today : Convert.ToDateTime(param.StartDate); var startDate = Common.CalculateFirstDateOfWeek(startdate).ToString("yyyy-MM-dd"); var endDate = Common.CalculateLastDateOfWeek(startdate).ToString("yyyy-MM-dd"); result.StartDate = startDate; result.EndDate = endDate; var semesterAndYear = Common.GetSemesterAndYear(startDate); result.AcademicYearNo = semesterAndYear.AcademicYearLong; result.Semester = semesterAndYear.Semester; //课程表数据 var timeTableList = new List(); //必修课课程表 var data = arrangeLessonTermIBLL.GetTimeTableInEducation(startDate, endDate, param.ClassNo, param.EmpNo, ""); timeTableList.AddRange(data); //选修课课程表 var dataOfElective = arrangeLessonTermOfElectiveIBLL.GetTimeTableInEducation(startDate, endDate, param.ClassNo, param.EmpNo, ""); timeTableList.AddRange(dataOfElective); var dataTemp = timeTableList.GroupBy(x => new { x.TeachClassNo, x.ClassName, x.LessonSortNo }).Select(x => new ClassDataList() { ClassNo = x.Key.TeachClassNo, ClassName = x.Key.ClassName, LessonSortNo = x.Key.LessonSortNo, TimeTableList = x.Select(y => new TwoDevelopment.EducationalAdministration.TimeTable() { AcademicYear = y.AcademicYear, Semester = y.Semester, DeptNo = y.DeptNo, MajorNo = y.MajorNo, F_SchoolId = y.F_SchoolId, LessonNo = y.LessonNo, LessonName = y.LessonName, LessonDate = y.LessonDate, LessonTime = y.LessonTime, EmpNo = y.EmpNo, EmpName = y.EmpName, TeachClassNo = y.TeachClassNo, ClassName = y.ClassName, ClassRoomNo = y.ClassRoomNo, ClassroomName = y.ClassroomName, LessonSortNo = y.LessonSortNo }).OrderBy(a => a.LessonTime.Substring(0, 1)).ThenBy(a => a.LessonTime.Substring(1)).ToList() }).OrderBy(x => x.LessonSortNo).ThenBy(x => x.ClassNo).ToList(); result.ClassDataList = dataTemp; return Success(result); } /// /// 课程表【教师功能、学生功能】 /// /// /// public Response GetTenDay(dynamic _) { var param = this.GetReqData(); var startdate = DateTime.Today; var startDate = Common.CalculateFirstDateOfWeek(startdate).ToString("yyyy-MM-dd"); var endDate = Common.CalculateLastDateOfWeek(startdate).ToString("yyyy-MM-dd"); // 获取学年,学期 var strAcademicYear = ""; var strSemester = ""; var AcademicYearShort = ""; if (!param.StartDate.IsEmpty()) { var NewsemesterAndYear = Common.GetSemesterAndYear(param.StartDate); strAcademicYear = NewsemesterAndYear.AcademicYearLong; strSemester = NewsemesterAndYear.Semester; AcademicYearShort = NewsemesterAndYear.AcademicYearShort; } else { var semesterAndYear = Common.GetSemesterAndYear(startDate); strAcademicYear = semesterAndYear.AcademicYearLong; strSemester = semesterAndYear.Semester; AcademicYearShort = semesterAndYear.AcademicYearShort; } if (param.StartDate.IsEmpty() && param.EndDate.IsEmpty()) { // 校历 var entity = schoolCalendarIbll.GetSchoolCalendarEntityByNo(AcademicYearShort, strSemester); var StartTime = entity.StartTime.Value; //获取第几周 var curWeek = WeekOfYear(startdate, entity.StartTime.Value, entity.EndTime.Value); ///获取当前周次开始时间 startDate = Common.CalculateFirstDateOfWeek(StartTime.AddDays(((curWeek - 1) * 14))).ToString("yyyy-MM-dd"); if (curWeek == 1 && Convert.ToDateTime(startDate) < StartTime)//判断第几周 { startDate = StartTime.ToString("yyyy-MM-dd"); } endDate = Common.CalculateFirstDateOfWeek(StartTime.AddDays(((curWeek - 1) * 14))).AddDays(13).ToString("yyyy-MM-dd"); param.StartDate = startDate; param.EndDate = endDate; } var Data = new List(); if (param.Description == "学生") { var Stulist = stuInfoBasicIBLL.GetAllList().Where(x => x.StuNo == param.Account).FirstOrDefault(); if (Stulist != null) { Data = arrangeLessonTermIBLL.GetTimeTableInEducation(param.StartDate, param.EndDate, Stulist.ClassNo, "", "").ToList(); } } else if (param.Description == "教师") { //教师 var empInfo = empInfoIbll.GetAllList().Where(x => x.EmpNo == param.Account).FirstOrDefault().EmpNo; if (empInfo != null) { Data = arrangeLessonTermIBLL.GetTimeTableInEducation(param.StartDate, param.EndDate, "", param.Account, "").ToList(); } } var formatData = from d in Data.AsEnumerable() let tt = d.LessonTime.Split('-')[0] group d by tt into g orderby g.Key select new { time = g.Key, list = from e in Data.AsEnumerable() let ee = e.LessonTime.Split('-')[0] where ee == g.Key select new { ALTId = e.ALTId, day = e.LessonTime.Split('-')[0], jc = e.LessonTime.Split('-')[1], curriculum = e.LessonSortNo == "2" ? e.LessonName + "[选修]" : e.LessonName, teacher = e?.EmpName, classRoom = string.IsNullOrEmpty(e.ClassroomName) ? "" : e.ClassroomName.Trim(), academicyear = e.AcademicYear, semester = e.Semester, lessonNo = e?.LessonNo, teachClassNo = e?.TeachClassNo, empno = e?.EmpNo, lessonTime = e.LessonTime, lessonDate = e.LessonDate.ToString("yyyy-MM-dd"), classRoomNo = string.IsNullOrEmpty(e.ClassRoomNo) ? "" : e.ClassRoomNo.Trim(), lessonSortNo = e.LessonSortNo, e?.OLPEId, className = string.IsNullOrEmpty(e.ClassName) ? "" : e.ClassName } } ; var result = new { schoolName = "课程表", semester = $"{strAcademicYear}学年度 第{strSemester}学期", startDate = param.StartDate, endDate = param.EndDate, weekList = formatData }; return Success(result); } /// /// 数字转中文 /// /// eg: 22 /// public string NumberToChinese(string number) { string res = string.Empty; switch (number) { case "1": res = "一"; break; case "2": res = "二"; break; case "3": res = "三"; break; case "4": res = "四"; break; case "5": res = "五"; break; case "6": res = "六"; break; case "7": res = "七"; break; case "8": res = "八"; break; case "9": res = "九"; break; default: res = "零"; break; } return res; } /// /// 换算周次 /// /// /// /// /// private static int WeekOfYear(DateTime curDay, DateTime startTime, DateTime endTime) { int firstdayofweek = Convert.ToInt32(startTime.DayOfWeek); var startDate = DateTime.Parse(Common.CalculateFirstDateOfWeek(startTime).ToString("yyyy-MM-dd")); int k = Convert.ToInt32(startTime.DayOfWeek);//得到开始时间的第一天是周几 int days = curDay.Subtract(startTime).Days; //int days = curDay.DayOfYear; int daysOutOneWeek = days - (14 - firstdayofweek); if (daysOutOneWeek <= 0) { return 1; } else { int weeks = daysOutOneWeek / 14; if (daysOutOneWeek % 14 != 0) weeks++; return weeks + 1; } } } public class TimeParameter { public string StartDate { get; set; } public string EndDate { get; set; } /// /// 班级编号 /// public string ClassNo { get; set; } /// /// 教师编号 /// public string EmpNo { get; set; } public string Description { get; set; } public string Account { get; set; } } public class TimeTableData { public string AcademicYearNo { get; set; } public string Semester { get; set; } public string StartDate { get; set; } public string EndDate { get; set; } public List ClassDataList { get; set; } } public class ClassDataList { public string ClassNo { get; set; } public string ClassName { get; set; } public string LessonSortNo { get; set; } public List TimeTableList { get; set; } } }