|
@@ -220,7 +220,14 @@ public class ExamStudentServiceImpl implements ExamStudentService {
|
|
|
|
|
|
|
|
|
StringBuffer sql = new StringBuffer();
|
|
|
- sql.append("select id,exam_student_id,exam_id,course_id,course_code,course_level,finished,student_id,student_code,student_name,identity_number"
|
|
|
+ sql.append("select id,exam_student_id,exam_id,course_id,course_code,course_level");
|
|
|
+ if ((ExamType.ONLINE.name().equals(examBean.getExamType()) || ExamType.ONLINE_HOMEWORK.name().equals(examBean.getExamType()))&&query.getFinished() == null) {
|
|
|
+ sql.append(",case when finished = 1 OR EXISTS ( SELECT 1 FROM ec_oes_exam_record_data t2 WHERE t2.exam_student_id = t1.exam_student_id ) then 1 else 0 end finished");
|
|
|
+ }else {
|
|
|
+ sql.append(",finished");
|
|
|
+ }
|
|
|
+
|
|
|
+ sql.append(",student_id,student_code,student_name,identity_number"
|
|
|
+ ",info_collector,root_org_id,org_id,paper_type,used_num,extra_num"
|
|
|
+ ",specialty_code,specialty_name,grade from ec_oe_exam_student t1 where 1=1 ");
|
|
|
sql.append(selectExamStudentConfitionSql(query, examBean.getExamType()));
|
|
@@ -240,6 +247,19 @@ public class ExamStudentServiceImpl implements ExamStudentService {
|
|
|
for (ExamStudentEntity examStudentEntity : examStudentList) {
|
|
|
ExamStudentInfo examStudentInfo = buildExamStudentInfo(examStudentEntity, cahcheMap, examBean.getExamType());
|
|
|
examStudentInfoList.add(examStudentInfo);
|
|
|
+ if (ExamType.ONLINE.name().equals(examBean.getExamType()) || ExamType.ONLINE_HOMEWORK.name().equals(examBean.getExamType())) {
|
|
|
+ if (query.getFinished() != null) {
|
|
|
+ if(query.getFinished().intValue()==1) {
|
|
|
+ examStudentInfo.setFinished(true);
|
|
|
+ examStudentInfo.setFinishedStatus(FinishStatus.已完成.name());
|
|
|
+ }
|
|
|
+ if(query.getFinished().intValue()==0) {
|
|
|
+ examStudentInfo.setFinished(false);
|
|
|
+ examStudentInfo.setFinishedStatus(FinishStatus.未完成.name());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ countUseExamTimes(examStudentInfo, examBean.getExamType());
|
|
|
+ }
|
|
|
}
|
|
|
cahcheMap.clear();
|
|
|
Pageable pageable = SpecUtils.buildPageable(query.getPageNo(), query.getPageSize());
|
|
@@ -262,7 +282,14 @@ public class ExamStudentServiceImpl implements ExamStudentService {
|
|
|
|
|
|
//查询条件
|
|
|
StringBuffer sql = new StringBuffer();
|
|
|
- sql.append("select id,exam_student_id,exam_id,course_id,course_code,course_level,finished,student_id,student_code,student_name,identity_number"
|
|
|
+ sql.append("select id,exam_student_id,exam_id,course_id,course_code,course_level");
|
|
|
+ if ((ExamType.ONLINE.name().equals(examBean.getExamType()) || ExamType.ONLINE_HOMEWORK.name().equals(examBean.getExamType()))&&query.getFinished() == null) {
|
|
|
+ sql.append(",case when finished = 1 OR EXISTS ( SELECT 1 FROM ec_oes_exam_record_data t2 WHERE t2.exam_student_id = t1.exam_student_id ) then 1 else 0 end finished");
|
|
|
+ }else {
|
|
|
+ sql.append(",finished");
|
|
|
+ }
|
|
|
+
|
|
|
+ sql.append(",student_id,student_code,student_name,identity_number"
|
|
|
+ ",info_collector,root_org_id,org_id,paper_type,used_num,extra_num"
|
|
|
+ ",specialty_code,specialty_name,grade from ec_oe_exam_student t1 where 1=1 ");
|
|
|
sql.append(selectExamStudentConfitionSql(query, examBean.getExamType()));
|
|
@@ -280,6 +307,19 @@ public class ExamStudentServiceImpl implements ExamStudentService {
|
|
|
for (ExamStudentEntity examStudentEntity : examStudentList) {
|
|
|
ExamStudentInfo examStudentInfo = buildExamStudentInfo(examStudentEntity, cahcheMap, examBean.getExamType());
|
|
|
examStudentInfoList.add(examStudentInfo);
|
|
|
+ if (ExamType.ONLINE.name().equals(examBean.getExamType()) || ExamType.ONLINE_HOMEWORK.name().equals(examBean.getExamType())) {
|
|
|
+ if (query.getFinished() != null) {
|
|
|
+ if(query.getFinished().intValue()==1) {
|
|
|
+ examStudentInfo.setFinished(true);
|
|
|
+ examStudentInfo.setFinishedStatus(FinishStatus.已完成.name());
|
|
|
+ }
|
|
|
+ if(query.getFinished().intValue()==0) {
|
|
|
+ examStudentInfo.setFinished(false);
|
|
|
+ examStudentInfo.setFinishedStatus(FinishStatus.未完成.name());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ countUseExamTimes(examStudentInfo, examBean.getExamType());
|
|
|
+ }
|
|
|
}
|
|
|
cahcheMap.clear();
|
|
|
return examStudentInfoList;
|
|
@@ -313,7 +353,13 @@ public class ExamStudentServiceImpl implements ExamStudentService {
|
|
|
}
|
|
|
if (query.getFinished() != null) {
|
|
|
if (ExamType.ONLINE.name().equals(examType) || ExamType.ONLINE_HOMEWORK.name().equals(examType)) {
|
|
|
- sql.append(" and finished = " + query.getFinished());
|
|
|
+// sql.append(" and finished = " + query.getFinished());
|
|
|
+ if(query.getFinished().intValue()==1) {
|
|
|
+ sql.append(" AND ( finished = 1 OR EXISTS ( SELECT 1 FROM ec_oes_exam_record_data t2 WHERE t2.exam_student_id = t1.exam_student_id ) )");
|
|
|
+ }
|
|
|
+ if(query.getFinished().intValue()==0) {
|
|
|
+ sql.append(" AND ( finished = 0 and NOT EXISTS ( SELECT 1 FROM ec_oes_exam_record_data t2 WHERE t2.exam_student_id = t1.exam_student_id ) )");
|
|
|
+ }
|
|
|
} else if (ExamType.OFFLINE.name().equals(examType)) {
|
|
|
//如果忽略是否上传答案时,只要是已抽题则认为已参加考试
|
|
|
if (query.getIgnoreUploadOfflineAnswer() != null && true == query.getIgnoreUploadOfflineAnswer()) {
|
|
@@ -835,6 +881,28 @@ public class ExamStudentServiceImpl implements ExamStudentService {
|
|
|
}
|
|
|
return ret;
|
|
|
}
|
|
|
+ private void countUseExamTimes(ExamStudentInfo examStudentInfo, String examType) {
|
|
|
+ if (!ExamType.ONLINE.name().equals(examType) && ExamType.ONLINE_HOMEWORK.name().equals(examType)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ //考生已考次数
|
|
|
+ int usedNum = (examStudentInfo.getUsedNum() == null ? 0 : examStudentInfo.getUsedNum());
|
|
|
+ //缓存中开考次数
|
|
|
+ int startCount = 0;
|
|
|
+ //缓存中考试完结次数
|
|
|
+ int endCount = 0;
|
|
|
+ String key = RedisKeyHelper.getBuilder().examBossKey(examStudentInfo.getExamStudentId());
|
|
|
+ ExamBoss eb = redisClient.get(key, ExamBoss.class);
|
|
|
+ if (eb != null) {
|
|
|
+ startCount = eb.getStartCount();
|
|
|
+ endCount = eb.getEndCount();
|
|
|
+ }
|
|
|
+ Integer ret = usedNum + startCount - endCount;
|
|
|
+ if (ret < 0) {
|
|
|
+ ret = 0;
|
|
|
+ }
|
|
|
+ examStudentInfo.setUsedNum(ret);
|
|
|
+ }
|
|
|
|
|
|
//获取考试的考生信息
|
|
|
private ExamStudentBean getRemoteExamStudent(Long rootOrgId, Long examStudentId) {
|