فهرست منبع

批次,场次定时任务和时间校验

wangliang 2 سال پیش
والد
کامیت
f01e759ede

+ 5 - 3
themis-business/src/main/java/com/qmth/themis/business/service/impl/TEExamActivityServiceImpl.java

@@ -7,6 +7,7 @@ import com.qmth.themis.business.cache.bean.ExamActivityCacheBean;
 import com.qmth.themis.business.cache.bean.ExamCacheBean;
 import com.qmth.themis.business.cache.bean.ExamCacheBean;
 import com.qmth.themis.business.cache.bean.ExamCourseCacheBean;
 import com.qmth.themis.business.cache.bean.ExamCourseCacheBean;
 import com.qmth.themis.business.cache.bean.ExamStudentCacheBean;
 import com.qmth.themis.business.cache.bean.ExamStudentCacheBean;
+import com.qmth.themis.business.constant.SpringContextHolder;
 import com.qmth.themis.business.constant.SystemConstant;
 import com.qmth.themis.business.constant.SystemConstant;
 import com.qmth.themis.business.dao.TEExamActivityMapper;
 import com.qmth.themis.business.dao.TEExamActivityMapper;
 import com.qmth.themis.business.dto.MqDto;
 import com.qmth.themis.business.dto.MqDto;
@@ -332,6 +333,7 @@ public class TEExamActivityServiceImpl extends ServiceImpl<TEExamActivityMapper,
         }
         }
         Long examId = null;
         Long examId = null;
         AtomicReference<Integer> size = new AtomicReference<>(0);
         AtomicReference<Integer> size = new AtomicReference<>(0);
+        TEExamActivityService teExamActivityService = SpringContextHolder.getBean(TEExamActivityService.class);
         try {
         try {
             TBUser tbUser = (TBUser) ServletUtil.getRequestAccount();
             TBUser tbUser = (TBUser) ServletUtil.getRequestAccount();
             examId = teExamActivityList.get(0).getExamId();
             examId = teExamActivityList.get(0).getExamId();
@@ -362,7 +364,7 @@ public class TEExamActivityServiceImpl extends ServiceImpl<TEExamActivityMapper,
                     if (count == 0) {
                     if (count == 0) {
                         teAudioList.add(new TEAudio(tbUser.getOrgId(), s.getId(), SystemConstant.AFTER_AUDIO_ATTACHMENT_Id, AudioTypeEnum.AFTER.getTitle(), AudioTypeEnum.AFTER, AudioDefaultEnum.SYS, tbUser.getId(), SystemConstant.AFTER_AUDIO_SECOND));//考试结束前语音
                         teAudioList.add(new TEAudio(tbUser.getOrgId(), s.getId(), SystemConstant.AFTER_AUDIO_ATTACHMENT_Id, AudioTypeEnum.AFTER.getTitle(), AudioTypeEnum.AFTER, AudioDefaultEnum.SYS, tbUser.getId(), SystemConstant.AFTER_AUDIO_SECOND));//考试结束前语音
                     }
                     }
-                    TEExamActivity teExamActivityDb = this.getById(s.getId());
+                    TEExamActivity teExamActivityDb = teExamActivityService.getById(s.getId());
                     if (Objects.nonNull(teExamActivityDb)) {
                     if (Objects.nonNull(teExamActivityDb)) {
                         s.setCode(teExamActivityDb.getCode());
                         s.setCode(teExamActivityDb.getCode());
                         if (!s.equals(teExamActivityDb)) {//不一样则日志记录
                         if (!s.equals(teExamActivityDb)) {//不一样则日志记录
@@ -406,13 +408,13 @@ public class TEExamActivityServiceImpl extends ServiceImpl<TEExamActivityMapper,
                     teAudioList.add(new TEAudio(tbUser.getOrgId(), s.getId(), SystemConstant.AFTER_AUDIO_ATTACHMENT_Id, AudioTypeEnum.AFTER.getTitle(), AudioTypeEnum.AFTER, AudioDefaultEnum.SYS, tbUser.getId(), SystemConstant.AFTER_AUDIO_SECOND));//考试结束前语音
                     teAudioList.add(new TEAudio(tbUser.getOrgId(), s.getId(), SystemConstant.AFTER_AUDIO_ATTACHMENT_Id, AudioTypeEnum.AFTER.getTitle(), AudioTypeEnum.AFTER, AudioDefaultEnum.SYS, tbUser.getId(), SystemConstant.AFTER_AUDIO_SECOND));//考试结束前语音
                 }
                 }
             });
             });
-            this.saveOrUpdateBatch(teExamActivityList);
+            teExamActivityService.saveOrUpdateBatch(teExamActivityList);
             if (!CollectionUtils.isEmpty(teAudioList)) {
             if (!CollectionUtils.isEmpty(teAudioList)) {
                 teAudioService.saveOrUpdateBatch(teAudioList);
                 teAudioService.saveOrUpdateBatch(teAudioList);
             }
             }
 
 
             for (TEExamActivity ac : teExamActivityList) {
             for (TEExamActivity ac : teExamActivityList) {
-                this.updateExamActivityCacheBean(ac.getId());
+                teExamActivityService.updateExamActivityCacheBean(ac.getId());
             }
             }
             if (size.get() > 0 && (Objects.nonNull(teExam.getForceFinish()) && teExam.getForceFinish().intValue() == 1)) {
             if (size.get() > 0 && (Objects.nonNull(teExam.getForceFinish()) && teExam.getForceFinish().intValue() == 1)) {
                 //新增quartz任务,发送mq消息start
                 //新增quartz任务,发送mq消息start

+ 40 - 35
themis-task/src/main/java/com/qmth/themis/task/quartz/MqActivityJob.java

@@ -12,6 +12,7 @@ import org.quartz.JobExecutionContext;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
 import org.springframework.scheduling.quartz.QuartzJobBean;
 import org.springframework.scheduling.quartz.QuartzJobBean;
+import org.springframework.util.CollectionUtils;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
 import java.util.List;
 import java.util.List;
@@ -72,44 +73,48 @@ public class MqActivityJob extends QuartzJobBean {
                     List<TOeExamRecord> examRecordList = tOeExamRecordService.list(tOeExamRecordQueryWrapper);
                     List<TOeExamRecord> examRecordList = tOeExamRecordService.list(tOeExamRecordQueryWrapper);
                     Integer forceFinish = exam.getForceFinish();
                     Integer forceFinish = exam.getForceFinish();
                     if (Objects.nonNull(forceFinish) && forceFinish.intValue() == 1) {//强制收卷
                     if (Objects.nonNull(forceFinish) && forceFinish.intValue() == 1) {//强制收卷
-                        examRecordList.forEach(s -> {
-                            ExamRecordStatusEnum examRecordStatusEnum = s.getStatus();
-                            //获取该考试批次下所有未交卷的考生的考试记录
-                            if (Objects.nonNull(examRecordStatusEnum)
-                                    && !Objects.equals(ExamRecordStatusEnum.FINISHED, examRecordStatusEnum)
-                                    && !Objects.equals(ExamRecordStatusEnum.PERSISTED, examRecordStatusEnum)) {
-                                Integer durationSeconds = s.getDurationSeconds();
-                                Long examStudentId = s.getExamStudentId();
-                                ExamStudentCacheBean examStudentCacheBean = teExamStudentService.getExamStudentCacheBean(examStudentId);
-                                //候考阶段且没有进入考试则不交卷
-                                if (examRecordStatusEnum == ExamRecordStatusEnum.FIRST_PREPARE && Objects.isNull(s.getFirstStartTime())) {
-                                    commonService.deleteExamStudentCache(s.getId(), examStudentCacheBean.getStudentId());
-                                    commonService.DismissRoomByStrRoomId(s.getId());
-                                } else {//交卷
-                                    teExamService.finish(examStudentCacheBean.getStudentId(), s.getId(), FinishTypeEnum.AUTO.name(), durationSeconds);
+                        if (!CollectionUtils.isEmpty(examRecordList)) {
+                            examRecordList.forEach(s -> {
+                                ExamRecordStatusEnum examRecordStatusEnum = s.getStatus();
+                                //获取该考试批次下所有未交卷的考生的考试记录
+                                if (Objects.nonNull(examRecordStatusEnum)
+                                        && !Objects.equals(ExamRecordStatusEnum.FINISHED, examRecordStatusEnum)
+                                        && !Objects.equals(ExamRecordStatusEnum.PERSISTED, examRecordStatusEnum)) {
+                                    Integer durationSeconds = s.getDurationSeconds();
+                                    Long examStudentId = s.getExamStudentId();
+                                    ExamStudentCacheBean examStudentCacheBean = teExamStudentService.getExamStudentCacheBean(examStudentId);
+                                    //候考阶段且没有进入考试则不交卷
+                                    if (examRecordStatusEnum == ExamRecordStatusEnum.FIRST_PREPARE && Objects.isNull(s.getFirstStartTime())) {
+                                        commonService.deleteExamStudentCache(s.getId(), examStudentCacheBean.getStudentId());
+                                        commonService.DismissRoomByStrRoomId(s.getId());
+                                    } else {//交卷
+                                        teExamService.finish(examStudentCacheBean.getStudentId(), s.getId(), FinishTypeEnum.AUTO.name(), durationSeconds);
+                                    }
                                 }
                                 }
-                            }
-                        });
+                            });
+                        }
                     } else {
                     } else {
-                        examRecordList.forEach(s -> {
-                            ExamRecordStatusEnum examRecordStatusEnum = s.getStatus();
-                            //获取该考试批次下所有未交卷的考生的考试记录
-                            if (Objects.nonNull(examRecordStatusEnum)
-                                    && !Objects.equals(ExamRecordStatusEnum.FINISHED, examRecordStatusEnum)
-                                    && !Objects.equals(ExamRecordStatusEnum.PERSISTED, examRecordStatusEnum)
-                                    && !Objects.equals(ExamRecordStatusEnum.ANSWERING, examRecordStatusEnum)) {
-                                Integer durationSeconds = s.getDurationSeconds();
-                                Long examStudentId = s.getExamStudentId();
-                                ExamStudentCacheBean examStudentCacheBean = teExamStudentService.getExamStudentCacheBean(examStudentId);
-                                //候考阶段且没有进入考试则不交卷
-                                if (examRecordStatusEnum == ExamRecordStatusEnum.FIRST_PREPARE && Objects.isNull(s.getFirstStartTime())) {
-                                    commonService.deleteExamStudentCache(s.getId(), examStudentCacheBean.getStudentId());
-                                    commonService.DismissRoomByStrRoomId(s.getId());
-                                } else {//交卷
-                                    teExamService.finish(examStudentCacheBean.getStudentId(), s.getId(), FinishTypeEnum.AUTO.name(), durationSeconds);
+                        if (!CollectionUtils.isEmpty(examRecordList)) {
+                            examRecordList.forEach(s -> {
+                                ExamRecordStatusEnum examRecordStatusEnum = s.getStatus();
+                                //获取该考试批次下所有未交卷的考生的考试记录
+                                if (Objects.nonNull(examRecordStatusEnum)
+                                        && !Objects.equals(ExamRecordStatusEnum.FINISHED, examRecordStatusEnum)
+                                        && !Objects.equals(ExamRecordStatusEnum.PERSISTED, examRecordStatusEnum)
+                                        && !Objects.equals(ExamRecordStatusEnum.ANSWERING, examRecordStatusEnum)) {
+                                    Integer durationSeconds = s.getDurationSeconds();
+                                    Long examStudentId = s.getExamStudentId();
+                                    ExamStudentCacheBean examStudentCacheBean = teExamStudentService.getExamStudentCacheBean(examStudentId);
+                                    //候考阶段且没有进入考试则不交卷
+                                    if (examRecordStatusEnum == ExamRecordStatusEnum.FIRST_PREPARE && Objects.isNull(s.getFirstStartTime())) {
+                                        commonService.deleteExamStudentCache(s.getId(), examStudentCacheBean.getStudentId());
+                                        commonService.DismissRoomByStrRoomId(s.getId());
+                                    } else {//交卷
+                                        teExamService.finish(examStudentCacheBean.getStudentId(), s.getId(), FinishTypeEnum.AUTO.name(), durationSeconds);
+                                    }
                                 }
                                 }
-                            }
-                        });
+                            });
+                        }
                     }
                     }
                 }
                 }
                 exam.setScanTime(finishTime);
                 exam.setScanTime(finishTime);

+ 3 - 2
themis-task/src/main/java/com/qmth/themis/task/quartz/service/impl/QuartzLogicServiceImpl.java

@@ -15,6 +15,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
 import java.util.List;
 import java.util.List;
@@ -64,7 +65,7 @@ public class QuartzLogicServiceImpl implements QuartzLogicService {
             tOeExamRecordQueryWrapper.lambda().eq(TOeExamRecord::getExamActivityId, examActivityCacheBean.getId());
             tOeExamRecordQueryWrapper.lambda().eq(TOeExamRecord::getExamActivityId, examActivityCacheBean.getId());
             List<TOeExamRecord> examRecordList = tOeExamRecordService.list(tOeExamRecordQueryWrapper);
             List<TOeExamRecord> examRecordList = tOeExamRecordService.list(tOeExamRecordQueryWrapper);
             if (Objects.nonNull(forceFinish) && forceFinish.intValue() == 1) {//强制收卷
             if (Objects.nonNull(forceFinish) && forceFinish.intValue() == 1) {//强制收卷
-                if (Objects.nonNull(examRecordList) && examRecordList.size() > 0) {
+                if (!CollectionUtils.isEmpty(examRecordList)) {
                     examRecordList.forEach(s -> {
                     examRecordList.forEach(s -> {
                         ExamRecordStatusEnum examRecordStatusEnum = s.getStatus();
                         ExamRecordStatusEnum examRecordStatusEnum = s.getStatus();
                         //获取该考试批次下所有未交卷的考生的考试记录
                         //获取该考试批次下所有未交卷的考生的考试记录
@@ -88,7 +89,7 @@ public class QuartzLogicServiceImpl implements QuartzLogicService {
                     });
                     });
                 }
                 }
             } else {
             } else {
-                if (Objects.nonNull(examRecordList) && examRecordList.size() > 0) {
+                if (!CollectionUtils.isEmpty(examRecordList)) {
                     examRecordList.forEach(s -> {
                     examRecordList.forEach(s -> {
                         ExamRecordStatusEnum examRecordStatusEnum = s.getStatus();
                         ExamRecordStatusEnum examRecordStatusEnum = s.getStatus();
                         //获取该考试批次下所有未交卷的考生的考试记录
                         //获取该考试批次下所有未交卷的考生的考试记录