diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/EducationalAdministration/Exam_ExamPlanRoom/Exam_ExamPlanRoomService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/EducationalAdministration/Exam_ExamPlanRoom/Exam_ExamPlanRoomService.cs index 9832e5dc9..7dec2cc0d 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/EducationalAdministration/Exam_ExamPlanRoom/Exam_ExamPlanRoomService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/EducationalAdministration/Exam_ExamPlanRoom/Exam_ExamPlanRoomService.cs @@ -439,7 +439,7 @@ where l.EPLId='{EPLId}'"; from Exam_ExamPlanRoom a join Exam_ExamPlanLesson b on a.EPLId = b.EPLId where b.EPId = '{EPId}'"); - + db.BeginTrans(); //老师时间管理 var examTeacherTime = db.FindList(); @@ -454,9 +454,15 @@ where l.EPLId='{EPLId}'"; foreach (var epLesson in examLessonList) { List empnos = new List(); + var LessonNo = epLesson.LessonNo; + if (LessonNo.Contains("(")) + { + LessonNo = LessonNo.Split('(')[0]; + } + //查询课程信息 var lessoninfo = db.FindList($@"select top 1 t.LessonTypeName,l.* from lessoninfo l - join [dbo].[CdLessonType] t on l.LessonTypeId = t.LTId where l.LessonNo='{epLesson.LessonNo}' ").FirstOrDefault(); + join [dbo].[CdLessonType] t on l.LessonTypeId = t.LTId where l.LessonNo='{LessonNo}' ").FirstOrDefault(); if (lessoninfo != null && !lessoninfo.LessonTypeName.Contains("公共") && !lessoninfo.LessonTypeName.Contains("公开")) { //如果是专业课,监考老师不能添加这门课的代课老师 diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/EducationalAdministration/Exam_InvigilateTeacher/Exam_InvigilateTeacherService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/EducationalAdministration/Exam_InvigilateTeacher/Exam_InvigilateTeacherService.cs index a1b2a8942..d379edd94 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/EducationalAdministration/Exam_InvigilateTeacher/Exam_InvigilateTeacherService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/EducationalAdministration/Exam_InvigilateTeacher/Exam_InvigilateTeacherService.cs @@ -62,28 +62,87 @@ namespace Learun.Application.TwoDevelopment.EducationalAdministration } if (!queryParam["EPLId"].IsEmpty()) { - //排考安排课程表Id - var ELEntity = this.BaseRepository("CollegeMIS").FindList($@"select * from Exam_ExamPlan where EPId=( -select EPId from Exam_ExamPlanLesson where EPLId='{queryParam["EPLId"].ToString()}')").FirstOrDefault(); + //考试课程数据 + var EPLEntity = this.BaseRepository("CollegeMIS").FindEntity(queryParam["EPLId"].ToString()); + //排考安排课程表 获取学年学期 + var ELEntity = this.BaseRepository("CollegeMIS").FindEntity(EPLEntity.EPId); if (ELEntity != null) { strSql.Append($" AND t.AcademicYearNo = '{ELEntity.AcademicYearNo}' "); strSql.Append($" AND t.Semester = '{ELEntity.Semester}' "); } - - var empSql = $@"SELECT DISTINCT EPLId, STUFF( (SELECT ',' + empno FROM Exam_ExamPlanRoom WHERE EPLId = T.EPLId FOR XML PATH('') ), 1, 1, '') AS empno FROM Exam_ExamPlanRoom AS T - where EPLId ='{queryParam["EPLId"].ToString()}'"; + //同一考试课程下考场的监考老师不重复 + var empSql = "SELECT DISTINCT EPLId, STUFF( (SELECT ',' + empno FROM Exam_ExamPlanRoom WHERE 1=1 "; if (!queryParam["EPRId"].IsEmpty()) { - empSql += $" and EPRId<>'{queryParam["EPRId"].ToString()}'"; + empSql += $" and EPRId<>'{queryParam["EPRId"].ToString()}'"; } + empSql += $@" and EPLId = T.EPLId FOR XML PATH('') ), 1, 1, '') AS empno FROM Exam_ExamPlanRoom AS T + where EPLId ='{queryParam["EPLId"].ToString()}'"; var obj = this.BaseRepository("CollegeMIS").FindList(empSql).Select(x => x.EmpNo).Distinct().ToList(); if (obj != null && obj.Count > 0) { var empNo = string.Join("','", obj[0].ToString().Split(',').Distinct()); strSql.Append($" AND t.EmpNo not in ('{empNo}')"); } + + //筛选掉考试时间冲突的老师和专业课的代课老师 + List empnos = new List(); + var LessonNo = EPLEntity.LessonNo; + if (LessonNo.Contains("(")) + { + LessonNo = LessonNo.Split('(')[0]; + } + //查询课程信息 + var lessoninfo = this.BaseRepository("CollegeMIS").FindList($@"select top 1 t.LessonTypeName,l.* from lessoninfo l + join [dbo].[CdLessonType] t on l.LessonTypeId = t.LTId where l.LessonNo='{LessonNo}' ").FirstOrDefault(); + if (lessoninfo != null && !lessoninfo.LessonTypeName.Contains("公共") && !lessoninfo.LessonTypeName.Contains("公开")) + { + //如果是专业课,监考老师不能添加这门课的代课老师 + var teachClass = this.BaseRepository("CollegeMIS").FindList( + $"select distinct EmpNo from TeachClass where AcademicYearNo='{ELEntity.AcademicYearNo}' and Semester='{ELEntity.Semester}' and lessonno='{LessonNo}'"); + var empno = teachClass.Select(x => x.EmpNo).ToList(); + empnos = empnos.Union(empno).ToList(); + } + + if (EPLEntity.ExamDate != null && EPLEntity.ExamTime.Contains("-")) + { + //当前考试课程考试时间 + var examtimeStart = Convert.ToDateTime(EPLEntity.ExamDate.Value.ToString("yyyy-MM-dd") + " " + (EPLEntity.ExamTime).Split('-')[0]); + var examtimeEnd = Convert.ToDateTime(EPLEntity.ExamDate.Value.ToString("yyyy-MM-dd") + " " + EPLEntity.ExamTime.Split('-')[1]); + + //查询这个时间段不能监考的老师 + var empnoTime = this.BaseRepository("CollegeMIS").FindList(x => + (examtimeStart >= x.ExamTimeStart && examtimeStart <= x.ExamTimeEnd) || (examtimeEnd >= x.ExamTimeStart && examtimeEnd <= x.ExamTimeEnd)).Select(x => x.EmpNo).ToList(); + foreach (var empno in empnoTime) + { + empnos = empnos.Union(empno.Split(',').ToList()).ToList(); + } + + //查询已安排的监考老师数据 + var examRoomByDateSql = $@"select a.EmpNo,b.ExamDate,b.ExamTime from [dbo].[Exam_ExamPlanRoom] a + join Exam_ExamPlanLesson b on a.EPLId = b.EPLId + where a.EmpNo is not null and b.ExamDate='{EPLEntity.ExamDate}' and a.EPLId<>'{queryParam["EPLId"].ToString()}'"; + var examRoomsByDateList = this.BaseRepository("CollegeMIS").FindList(examRoomByDateSql).ToList(); + foreach (var examRoom in examRoomsByDateList) + { + var examRoomTime1 = Convert.ToDateTime(examRoom.ExamDate.Value.ToString("yyyy-MM-dd") + " " + examRoom.ExamTime.Split('-')[0]); + var examRoomTime2 = Convert.ToDateTime(examRoom.ExamDate.Value.ToString("yyyy-MM-dd") + " " + examRoom.ExamTime.Split('-')[1]); + + //此处判断当前考场时间是否在考试课程排考时间的开始前30分钟到结束后30分钟 + if ((examRoomTime1 >= examtimeStart.AddMinutes(-30) && examRoomTime1 <= examtimeEnd.AddMinutes(30)) || (examRoomTime2 >= examtimeStart.AddMinutes(-30) && examRoomTime2 <= examtimeEnd.AddMinutes(30))) + { + empnos.Add(examRoom.EmpNo); + } + } + if (empnos.Count() > 0) + { + string nos = string.Join("','", empnos); + strSql.Append($" AND t.EmpNo not in ('{nos}')"); + } + } + } if (!queryParam["SqlParameter"].IsEmpty()) { @@ -111,7 +170,7 @@ select EPId from Exam_ExamPlanLesson where EPLId='{queryParam["EPLId"].ToString( /// /// public IEnumerable GetList(string AcademicYearNo, int? Semester) - { + { try { return this.BaseRepository("CollegeMIS").FindList(x => x.AcademicYearNo == AcademicYearNo && x.Semester == Semester);