Sfoglia il codice sorgente

考试进度详情

xiatian 5 anni fa
parent
commit
602cb2dd64

+ 71 - 3
examcloud-core-oe-admin-service/src/main/java/cn/com/qmth/examcloud/core/oe/admin/service/impl/ExamStudentServiceImpl.java

@@ -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) {