Beispiel #1
0
        /// <summary>
        /// 通过课程列表获取签到详情
        /// </summary>
        /// <param name="courses">课程列表</param>
        /// <param name="schollTime"></param>
        /// <param name="_user"></param>
        /// <returns></returns>
        private AttendanceDetails[] GetAttendanceDetailsForCourses(List <Course> courses, SchollTime schollTime, Sys_User _user = null)
        {
            List <AttendanceDetails> attendanceDetails = new List <AttendanceDetails>();

            foreach (var course in courses)
            {
                Sys_User user = null;
                if (_user == null)
                {
                    user = UserService.GetEntity(u => u.F_RealName == course.TeacherName).FirstOrDefault();
                }
                else
                {
                    user = _user;
                }
                // 通过今天日期和课程ID来确定考勤ID
                string attendanceID = $"{schollTime.CurrentTime:yyyyMMdd}.{course.Id}";
                // 查询该老师今天是否有发起签到记录
                var attends = GetEntity(a => a.F_TNum == user.F_Account && a.F_ID == attendanceID);
                if (attends.Count() == 0) //该教师今天有课程,但并没有发起签到
                {
                    continue;
                }
                else //该教师今天有课程,并发起了签到
                {
                    //获取该发起的签到的签到详情
                    var attendDetails = AttendanceDetailsService.GetEntity(u => attends.Any(att => att.F_ID == u.Z_A_F_ID)).ToArray();

                    var attendanceDetailsArr = AutoMapperConfig.Map <AttendanceDetails[]>(attendDetails);
                    attends.ToList().ForEach(att =>
                    {
                        foreach (var item in attendanceDetailsArr)
                        {
                            if (item.AttendanceID == att.F_ID)
                            {
                                item.ClassName   = att.F_ClassNo;
                                item.ClassRoomNo = att.F_ClassRoomNo;
                                item.CourseNo    = att.F_CourseNo;
                                item.TeacherNo   = user.F_Account;
                                item.Teacher     = user.F_RealName;
                                item.CourseName  = course.CourseName;
                                item.Section     = course.CourseTimeType;
                            }
                        }
                    });
                    attendanceDetails.AddRange(attendanceDetailsArr);
                }
            }
            return(attendanceDetails?.OrderBy(u => u.Section).ToArray());
        }
Beispiel #2
0
        /// <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);
        }