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 : BaseNoLoginApi { 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 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 }).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(results); } /// /// 全院课程表【按班级分组】 /// /// /// 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 semesterAndYear = Common.GetSemesterAndYear(startDate); var strAcademicYear = semesterAndYear.AcademicYearLong; var strSemester = semesterAndYear.Semester; if (param.StartDate.IsEmpty() && param.EndDate.IsEmpty()) { // 校历 var entity = schoolCalendarIbll.GetSchoolCalendarEntityByNo(semesterAndYear.AcademicYearShort, semesterAndYear.Semester); var StartTime = entity.StartTime.Value; startDate = Common.CalculateFirstDateOfWeek(StartTime.AddDays(3)).ToString("yyyy-MM-dd");//StartTime.AddDays(((curWeek - 1) * 14)).ToString("yyyy-MM-dd"); if (Convert.ToDateTime(startDate) < StartTime) { startDate = StartTime.ToString("yyyy-MM-dd"); } endDate = Common.CalculateFirstDateOfWeek(StartTime).AddDays(12).ToString("yyyy-MM-dd"); param.StartDate = startDate; param.EndDate = endDate; } var Data = arrangeLessonTermIBLL.GetTimeTableInEducation("", "", "", "", ""); if (param.Description == "学生") { var Stulist = stuInfoBasicIBLL.GetAllList().Where(x => x.StuNo == param.Account).FirstOrDefault(); if (Stulist != null) { Data = arrangeLessonTermIBLL.GetTimeTableInEducation(param.StartDate, param.EndDate, param.ClassNo, "", ""); } } 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, ""); } } 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 = semesterAndYear.AcademicYearShort, semester = strSemester, 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 = startDate, endDate = 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; } } 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; } } }