Эх сурвалжийг харах

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

wangliang 2 жил өмнө
parent
commit
071848a036

+ 10 - 2
themis-admin/src/main/java/com/qmth/themis/admin/api/TEExamController.java

@@ -210,9 +210,17 @@ public class TEExamController {
                             teExam.getEndTime(), tbUser.getId());
                     teExamActivity.setCode(String.valueOf(redisUtil.getRedisActivityCodeSequence(teExam.getId())));
                     teExamActivity.setEnable(1);
-                    teExamActivityService.saveOrUpdate(teExamActivity);
-                    teExamActivityService.updateExamActivityCacheBean(teExamActivity.getId());
+                } else {
+                    teExamActivity.setPrepareSeconds(teExam.getPrepareSeconds());
+                    teExamActivity.setMaxDurationSeconds(teExam.getMaxDurationSeconds());
+                    teExamActivity.setOpeningSeconds((int) ((teExam.getEndTime() - teExam.getStartTime()) / 1000));
+                    teExamActivity.setStartTime(teExam.getStartTime());
+                    teExamActivity.setFinishTime(teExam.getEndTime());
+                    teExamActivity.setEnable(teExam.getEnable());
+                    teExamActivity.setUpdateId(tbUser.getId());
                 }
+                teExamActivityService.saveOrUpdate(teExamActivity);
+                teExamActivityService.updateExamActivityCacheBean(teExamActivity.getId());
             }
         } catch (Exception e) {
             log.error(SystemConstant.LOG_ERROR, e);

+ 2 - 1
themis-task/src/main/java/com/qmth/themis/task/listener/MyJobListener.java

@@ -6,6 +6,7 @@ import com.qmth.themis.business.constant.SystemConstant;
 import com.qmth.themis.business.entity.TSLog;
 import com.qmth.themis.business.enums.LogEnum;
 import com.qmth.themis.business.service.TSLogService;
+import com.qmth.themis.business.util.JacksonUtil;
 import com.qmth.themis.common.contanst.Constants;
 import com.qmth.themis.task.enums.QuartzTaskEnum;
 import org.quartz.JobExecutionContext;
@@ -50,7 +51,7 @@ public class MyJobListener implements JobListener {
             case MQ_ACTIVITY_JOB_GROUP_NAME:
                 try {
                     TSLogService tsLogService = SpringContextHolder.getBean(TSLogService.class);
-                    tsLogService.save(new TSLog(LogEnum.JOB, quartzTaskEnum.name(),
+                    tsLogService.save(new TSLog(LogEnum.JOB, JacksonUtil.parseJson(context.getTrigger().getJobKey()),
                             Objects.nonNull(context.getPreviousFireTime()) ? DateUtil.format(context.getPreviousFireTime(), Constants.DEFAULT_DATE_PATTERN) : null,
                             Objects.nonNull(context.getNextFireTime()) ? DateUtil.format(context.getNextFireTime(), Constants.DEFAULT_DATE_PATTERN) : null,
                             -1L));

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

@@ -9,7 +9,6 @@ import com.qmth.themis.business.enums.ExamRecordStatusEnum;
 import com.qmth.themis.business.enums.FinishTypeEnum;
 import com.qmth.themis.business.service.*;
 import org.quartz.JobExecutionContext;
-import org.quartz.Trigger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.scheduling.quartz.QuartzJobBean;
@@ -71,25 +70,47 @@ public class MqActivityJob extends QuartzJobBean {
                     QueryWrapper<TOeExamRecord> tOeExamRecordQueryWrapper = new QueryWrapper<>();
                     tOeExamRecordQueryWrapper.lambda().in(TOeExamRecord::getExamActivityId, examActivityIdSet);
                     List<TOeExamRecord> examRecordList = tOeExamRecordService.list(tOeExamRecordQueryWrapper);
-                    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);
+                    Integer forceFinish = exam.getForceFinish();
+                    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);
+                                }
                             }
-                        }
-                    });
+                        });
+                    } 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);
+                                }
+                            }
+                        });
+                    }
                 }
                 exam.setScanTime(finishTime);
             }