/// <summary> /// 学生的课程 /// </summary> /// <param name="StuNo">学生编号</param> /// <returns></returns> public List <Course> GetStudentCourse(string StuNo) { List <Course> courseList = new List <Course>(); try { //得到该学生的信息 Z_Student student = StudentService.GetEntity(u => u.F_StuNo == StuNo).FirstOrDefault(); //得到该学生所在的班级 Z_Class cClass = ClassService.GetEntity(c => c.F_Id == student.Z_C_F_Id).FirstOrDefault(); //查询到该学生所在的年级 Z_Grade grade = GradeService.GetEntity(g => g.F_ID == cClass.Z_G_F_ID).FirstOrDefault(); //得到该学生所在的专业 Z_Profession profession = ProfessionService.GetEntity(u => u.F_ID == cClass.Z_P_F_ID).FirstOrDefault(); //得到当前是第几周 SchollTime schollTime = GetSchollTime(); //查询到该专业的所有课程 IQueryable <Z_Course> courses = GetEntity(u => u.F_Major == profession.F_ProName).Where(u => u.F_Grade == grade.F_GradeName).Where(u => u.F_Class.Contains(cClass.F_ClassName)).Where(u => u.F_SchoolYear.Contains(schollTime.SearchYear)).Where(u => u.F_Term == schollTime.Term.ToString()); var cl = courses.OrderBy(u => u.F_Week).ThenBy(u => u.F_CourseTimeType).ToList(); cl.ForEach(u => u.F_CourseTimeType = u.F_CourseTimeType.Substring(0, u.F_CourseTimeType.Length - 1)); courseList = AutoMapperConfig.MapList(cl, courseList); ComputedTimeLength(courseList); } catch (Exception e) { throw e; } return(courseList); }
/// <summary> /// 学生签到 /// </summary> /// <param name="StuNo">学号</param> /// <param name="CourseNo">课程编号</param> /// <param name="CheckStatus">签到状态</param> /// <returns></returns> public AttendanceResult CheckIn(string AttendanceId, string StuNo, string CourseNo, string CheckStatus = null) { AttendanceResult Result = new AttendanceResult(); try { SchollTime schollTime = CourseService.GetSchollTime(); DateTime currentTime = schollTime.CurrentTime; Z_Student student = StudentService.GetEntity(u => u.F_StuNo == StuNo).FirstOrDefault(); Z_Class cClass = ClassService.GetEntity(u => u.F_Id == student.Z_C_F_Id).FirstOrDefault(); //学生今日的课程 var courses = CourseService.GetStudentCourse(StuNo); courses = CourseService.SelectCourseInTheCurrentWeek(courses, schollTime); var course = courses.FirstOrDefault(u => u.Week == schollTime.Week && u.EnCode == CourseNo); if (course == null) //学生今日没有该课 { Result.ResultCode = ResultCode.Error; Result.Message = "今日没该课程,签到失败"; } else { var attendance = GetEntity(u => u.F_ID == AttendanceId).FirstOrDefault(); if (attendance == null) { Result.ResultCode = ResultCode.Error; Result.Message = "签到失败,该教师未发起签到"; return(Result); } if (course.EnCode != attendance.F_CourseNo) { Result.ResultCode = ResultCode.Error; Result.Message = "签到失败,与发起ID不匹配"; return(Result); } //获取该课程的节次时间 List <Z_SectionTime> list = CourseService.GetSectionTime(); Z_SectionTime sectionTime = list.FirstOrDefault(t => t.F_CourseTimeType.Contains(course.CourseTimeType)); DateTime sectionDateTime = DateTime.Parse(sectionTime?.F_Time); //判断该学生是否已经签到过 var attend = AttendanceDetailsService .GetEntity(a => a.Z_A_F_ID == AttendanceId).FirstOrDefault(u => u.F_StuNo == StuNo); if (attend != null && "未进行签到" != attend.F_Result) //已经签到过,不能再进行签到 { if (!string.IsNullOrEmpty(CheckStatus)) //教师给学生进行改变签到状态 { attend.F_Result = CheckStatus; AttendanceDetailsService.UpdateEntityInfo(attend); Result.ResultCode = ResultCode.Ok; Result.Message = "修改签到信息成功"; return(Result); } Result.ResultCode = ResultCode.Error; Result.Message = "签到失败,该节课已经签到"; return(Result); } //上课前10分钟可以发起签到 TimeSpan time = sectionDateTime - currentTime; //attendanceDetails.F_ID = Guid.NewGuid().ToString(); //attendanceDetails.Z_A_F_ID = AttendanceId; //attendanceDetails.F_StuName = student?.F_StuName; //attendanceDetails.F_StuNo = StuNo; attend.F_AttenTime = currentTime; //attendanceDetails.F_ClassNo = cClass?.F_ClassNo; Result.Message = "签到成功"; Result.RoomNo = course.RoomNo; Result.ResultCode = ResultCode.Ok; if (time.Minutes >= 0) //上课前 { attend.F_Result = "正常签到"; } else if (time.Minutes < 0) //迟到 { attend.F_Result = time.Minutes < -120 ? "旷课" : "迟到"; } AttendanceDetailsService.UpdateEntityInfo(attend); } } catch (Exception ex) { Result.ResultCode = ResultCode.Error; Result.Error = ex; } return(Result); }