wangliang преди 4 години
родител
ревизия
9c31790a90

+ 6 - 7
themis-backend/src/main/java/com/qmth/themis/backend/api/TEExamActivityController.java

@@ -3,7 +3,6 @@ package com.qmth.themis.backend.api;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qmth.themis.business.base.BasePage;
-import com.qmth.themis.business.constant.SystemConstant;
 import com.qmth.themis.business.dto.MqDto;
 import com.qmth.themis.business.dto.response.TEExamActivityQueryDto;
 import com.qmth.themis.business.entity.TBUser;
@@ -81,15 +80,15 @@ public class TEExamActivityController {
             examId = teExamActivityList.get(0).getExamId();
             teExamActivityService.saveOrUpdateBatch(teExamActivityList);
             TEExam teExam = teExamService.getById(teExamActivityList.get(0).getExamId());
-            //新增quartz任务,发送mq消息start
-            Map<String, Object> prop = new HashMap<>();
-            prop.put("oper", "insert");
-            prop.put("exam", teExam);
-            if (Objects.nonNull(teExamActivityList.get(0)) && teExamActivityList.get(0).getEnable() == 1) {
+            if (Objects.nonNull(teExam.getForceFinish()) && teExam.getForceFinish().intValue() == 1) {
+                //新增quartz任务,发送mq消息start
+                Map<String, Object> prop = new HashMap<>();
+                prop.put("oper", "insert");
+                prop.put("exam", teExam);
                 MqDto mqDto = new MqDto(MqTopicEnum.THEMIS_TOPIC.getCode(), MqTagEnum.EXAM_ACTIVITY.name(), JacksonUtil.parseJson(teExamActivityList), MqTagEnum.EXAM_ACTIVITY, String.valueOf(teExam.getId()), prop, tbUser.getName());
                 mqDtoService.assembleSendOneWayMsg(mqDto);
+                //新增quartz任务,发送mq消息end
             }
-            //新增quartz任务,发送mq消息end
             teExamActivityList.forEach(s -> {
                 teExamActivityService.updateExamActivityCacheBean(s.getId());
             });

+ 14 - 13
themis-backend/src/main/java/com/qmth/themis/backend/api/TEExamController.java

@@ -8,7 +8,6 @@ import com.qmth.themis.business.annotation.ApiJsonProperty;
 import com.qmth.themis.business.base.BasePage;
 import com.qmth.themis.business.cache.ExamRecordCacheUtil;
 import com.qmth.themis.business.cache.RedisKeyHelper;
-import com.qmth.themis.business.cache.bean.ExamActivityCacheBean;
 import com.qmth.themis.business.constant.SystemConstant;
 import com.qmth.themis.business.dto.AuthDto;
 import com.qmth.themis.business.dto.ExamPropCountDto;
@@ -148,13 +147,15 @@ public class TEExamController {
                         s.setUpdateId(tbUser.getId());
                     });
                     teExamActivityService.saveOrUpdateBatch(teExamActivityList);
-                    //新增quartz任务,发送mq消息start
-                    Map<String, Object> prop = new HashMap<>();
-                    prop.put("oper", "insert");
-                    prop.put("exam", teExam);
-                    MqDto mqDto = new MqDto(MqTopicEnum.THEMIS_TOPIC.getCode(), MqTagEnum.EXAM_ACTIVITY.name(), JacksonUtil.parseJson(teExamActivityList), MqTagEnum.EXAM_ACTIVITY, String.valueOf(teExam.getId()), prop, tbUser.getName());
-                    mqDtoService.assembleSendOneWayMsg(mqDto);
-                    //新增quartz任务,发送mq消息end
+                    if (Objects.nonNull(teExam.getForceFinish()) && teExam.getForceFinish().intValue() == 1) {
+                        //新增quartz任务,发送mq消息start
+                        Map<String, Object> prop = new HashMap<>();
+                        prop.put("oper", "insert");
+                        prop.put("exam", teExam);
+                        MqDto mqDto = new MqDto(MqTopicEnum.THEMIS_TOPIC.getCode(), MqTagEnum.EXAM_ACTIVITY.name(), JacksonUtil.parseJson(teExamActivityList), MqTagEnum.EXAM_ACTIVITY, String.valueOf(teExam.getId()), prop, tbUser.getName());
+                        mqDtoService.assembleSendOneWayMsg(mqDto);
+                        //新增quartz任务,发送mq消息end
+                    }
                     teExamActivityList.forEach(s -> {
                         teExamActivityService.updateExamActivityCacheBean(s.getId());
                     });
@@ -165,11 +166,11 @@ public class TEExamController {
                     teExamActivity.setEnable(1);
                     teExamActivityService.saveOrUpdate(teExamActivity);
 
-                    //新增quartz任务,发送mq消息start
-                    Map<String, Object> prop = new HashMap<>();
-                    prop.put("oper", "insert");
-                    prop.put("exam", teExam);
-                    if (Objects.nonNull(teExamActivity) && teExamActivity.getEnable() == 1) {
+                    if (Objects.nonNull(teExam.getForceFinish()) && teExam.getForceFinish().intValue() == 1 && Objects.nonNull(teExamActivity) && teExamActivity.getEnable().intValue() == 1) {
+                        //新增quartz任务,发送mq消息start
+                        Map<String, Object> prop = new HashMap<>();
+                        prop.put("oper", "insert");
+                        prop.put("exam", teExam);
                         MqDto mqDto = new MqDto(MqTopicEnum.THEMIS_TOPIC.getCode(), MqTagEnum.EXAM_ACTIVITY.name(), JacksonUtil.parseJson(Arrays.asList(teExamActivity)), MqTagEnum.EXAM_ACTIVITY, String.valueOf(teExam.getId()), prop, tbUser.getName());
                         mqDtoService.assembleSendOneWayMsg(mqDto);
                     }

+ 6 - 18
themis-task/src/main/java/com/qmth/themis/task/listener/service/impl/MqTaskLogicServiceImpl.java

@@ -4,15 +4,14 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.google.gson.Gson;
-import com.qmth.themis.business.constant.SpringContextHolder;
 import com.qmth.themis.business.constant.SystemConstant;
+import com.qmth.themis.business.dto.MqDto;
 import com.qmth.themis.business.entity.TEExam;
 import com.qmth.themis.business.entity.TEExamActivity;
 import com.qmth.themis.business.entity.TMRocketMessage;
 import com.qmth.themis.business.service.TMRocketMessageService;
 import com.qmth.themis.business.util.JacksonUtil;
 import com.qmth.themis.business.util.RedisUtil;
-import com.qmth.themis.business.dto.MqDto;
 import com.qmth.themis.task.enums.QuartzTaskEnum;
 import com.qmth.themis.task.listener.service.MqTaskLogicService;
 import com.qmth.themis.task.quartz.ExamActivityJob;
@@ -79,23 +78,12 @@ public class MqTaskLogicServiceImpl implements MqTaskLogicService {
             if (Objects.equals("delete", oper)) {
                 quartzService.deleteJob(teExamActivity.getCode(), QuartzTaskEnum.EXAM_ACTIVITY_JOB_GROUP_NAME.name());
             } else {
-//                Integer forceFinish = teExam.getForceFinish();
-                Date startTime = teExamActivity.getStartTime();
-                Date finishTime = teExamActivity.getFinishTime();
-//                if (Objects.nonNull(forceFinish) && forceFinish.intValue() == 1) {//强制收卷
-                    Integer activityMaxDurationSeconds = Objects.nonNull(teExamActivity.getMaxDurationSeconds()) ? teExamActivity.getMaxDurationSeconds() : null;
-                    Integer maxDurationSeconds = Objects.nonNull(teExam.getMaxDurationSeconds()) ? teExam.getMaxDurationSeconds() : null;
-                    Integer finalMaxDurationSeconds = Objects.nonNull(activityMaxDurationSeconds) ? activityMaxDurationSeconds : maxDurationSeconds;
+                if (Objects.nonNull(teExam.getEnable()) && teExam.getEnable().intValue() == 1 && Objects.nonNull(teExamActivity.getEnable()) && teExamActivity.getEnable().intValue() == 1) {
+                    Date finishTime = teExamActivity.getFinishTime();
                     Calendar calendar = Calendar.getInstance();
-                    if (Objects.nonNull(finalMaxDurationSeconds)) {
-                        calendar.setTime(startTime);
-                        calendar.add(Calendar.SECOND, (activityMaxDurationSeconds.intValue() + 30));
-//                        calendar.add(Calendar.SECOND, (activityMaxDurationSeconds.intValue()));
-                    } else {
-                        calendar.setTime(finishTime);
-                    }
+                    calendar.setTime(finishTime);
+                    calendar.add(Calendar.SECOND, 30);
                     if (calendar.getTime().getTime() > System.currentTimeMillis()) {
-//                        calendar.setTime(new Date());
                         int year = calendar.get(Calendar.YEAR);//获取年份
                         int month = calendar.get(Calendar.MONTH) + 1;//获取月份
                         int day = calendar.get(Calendar.DATE);//获取日
@@ -111,7 +99,7 @@ public class MqTaskLogicServiceImpl implements MqTaskLogicService {
                         quartzService.deleteJob(activityCode, QuartzTaskEnum.EXAM_ACTIVITY_JOB_GROUP_NAME.name());
                         quartzService.addJob(ExamActivityJob.class, activityCode, QuartzTaskEnum.EXAM_ACTIVITY_JOB_GROUP_NAME.name(), cron, mapJob);
                     }
-//                }
+                }
             }
         }
         TMRocketMessage tmRocketMessage = gson.fromJson(gson.toJson(mqDto), TMRocketMessage.class);

+ 13 - 49
themis-task/src/main/java/com/qmth/themis/task/quartz/service/impl/QuartzLogicServiceImpl.java

@@ -6,14 +6,11 @@ import com.qmth.themis.business.cache.RedisKeyHelper;
 import com.qmth.themis.business.cache.bean.ExamCacheBean;
 import com.qmth.themis.business.cache.bean.ExamStudentCacheBean;
 import com.qmth.themis.business.entity.TEExamActivity;
-import com.qmth.themis.business.entity.TOeExamRecord;
 import com.qmth.themis.business.enums.ExamRecordStatusEnum;
 import com.qmth.themis.business.enums.FinishTypeEnum;
 import com.qmth.themis.business.service.TEExamActivityService;
 import com.qmth.themis.business.service.TEExamService;
 import com.qmth.themis.business.service.TEExamStudentService;
-import com.qmth.themis.business.service.TOeExamRecordService;
-import com.qmth.themis.business.threadPool.MyThreadPool;
 import com.qmth.themis.business.util.RedisUtil;
 import com.qmth.themis.task.quartz.service.QuartzLogicService;
 import org.slf4j.Logger;
@@ -48,9 +45,6 @@ public class QuartzLogicServiceImpl implements QuartzLogicService {
     @Resource
     TEExamStudentService teExamStudentService;
 
-    @Resource
-    TOeExamRecordService tOeExamRecordService;
-
     /**
      * 考试场次quartz逻辑
      *
@@ -66,50 +60,20 @@ public class QuartzLogicServiceImpl implements QuartzLogicService {
         TEExamActivity teExamActivity = teExamActivityService.getOne(teExamActivityQueryWrapper);
         ExamCacheBean examCacheBean = teExamService.getExamCacheBean(teExamActivity.getExamId());
         if (Objects.nonNull(examCacheBean) && examCacheBean.getEnable() == 1 && Objects.nonNull(teExamActivity) && teExamActivity.getEnable() == 1) {
-            Integer forceFinish = examCacheBean.getForceFinish();
-            if (Objects.nonNull(forceFinish) && forceFinish.intValue() == 1) {//强制收卷
-                Map<String, Object> objectMap = redisUtil.getHashEntries(RedisKeyHelper.examActivityRecordCacheKey(teExamActivity.getId()));
-                if (Objects.nonNull(objectMap) && objectMap.size() > 0) {
-                    objectMap.forEach((k, v) -> {
-                        ExamRecordStatusEnum examRecordStatusEnum = (ExamRecordStatusEnum) v;
-                        //获取该考试批次下所有未交卷的考生的考试记录
-                        if (Objects.nonNull(examRecordStatusEnum) && !Objects.equals(ExamRecordStatusEnum.FINISHED, examRecordStatusEnum)) {
-                            Long recordId = Long.parseLong(k);
-                            Integer durationSeconds = ExamRecordCacheUtil.getDurationSeconds(recordId);
-                            Long examStudentId = ExamRecordCacheUtil.getExamStudentId(recordId);
-                            ExamStudentCacheBean examStudentCacheBean = teExamStudentService.getExamStudentCacheBean(examStudentId);
-                            //交卷
-                            teExamService.finish(examStudentCacheBean.getStudentId(), Long.parseLong(k), FinishTypeEnum.AUTO.name(), durationSeconds);
-                        }
-                    });
-                }
-            } else {
-                Map<String, Object> objectMap = redisUtil.getHashEntries(RedisKeyHelper.examActivityRecordCacheKey(teExamActivity.getId()));
-                if (Objects.nonNull(objectMap) && objectMap.size() > 0) {
-                    objectMap.forEach((k, v) -> {
-                        ExamRecordStatusEnum examRecordStatusEnum = (ExamRecordStatusEnum) v;
-                        //获取该考试批次下所有未交卷的考生的考试记录
-                        if (Objects.nonNull(examRecordStatusEnum) && (!Objects.equals(ExamRecordStatusEnum.FINISHED, examRecordStatusEnum) && !Objects.equals(ExamRecordStatusEnum.ANSWERING, examRecordStatusEnum))) {
-                            Long recordId = Long.parseLong(k);
-                            Integer durationSeconds = ExamRecordCacheUtil.getDurationSeconds(recordId);
-                            Long examStudentId = ExamRecordCacheUtil.getExamStudentId(recordId);
-                            ExamStudentCacheBean examStudentCacheBean = teExamStudentService.getExamStudentCacheBean(examStudentId);
-                            //交卷
-                            teExamService.finish(examStudentCacheBean.getStudentId(), Long.parseLong(k), FinishTypeEnum.AUTO.name(), durationSeconds);
-                        }
-                    });
-                }
-                TOeExamRecord tOeExamRecord = tOeExamRecordService.findOneByExamId(teExamActivity.getId(), ExamRecordStatusEnum.ANSWERING);
-                if (Objects.nonNull(tOeExamRecord)) {
-                    try {
-                        Thread.sleep(1000 * 60 * 15);//等15分钟再次检查
-                    } catch (InterruptedException e) {
-                        e.printStackTrace();
+            Map<String, Object> objectMap = redisUtil.getHashEntries(RedisKeyHelper.examActivityRecordCacheKey(teExamActivity.getId()));
+            if (Objects.nonNull(objectMap) && objectMap.size() > 0) {
+                objectMap.forEach((k, v) -> {
+                    ExamRecordStatusEnum examRecordStatusEnum = (ExamRecordStatusEnum) v;
+                    //获取该考试批次下所有未交卷的考生的考试记录
+                    if (Objects.nonNull(examRecordStatusEnum) && !Objects.equals(ExamRecordStatusEnum.FINISHED, examRecordStatusEnum)) {
+                        Long recordId = Long.parseLong(k);
+                        Integer durationSeconds = ExamRecordCacheUtil.getDurationSeconds(recordId);
+                        Long examStudentId = ExamRecordCacheUtil.getExamStudentId(recordId);
+                        ExamStudentCacheBean examStudentCacheBean = teExamStudentService.getExamStudentCacheBean(examStudentId);
+                        //交卷
+                        teExamService.finish(examStudentCacheBean.getStudentId(), Long.parseLong(k), FinishTypeEnum.AUTO.name(), durationSeconds);
                     }
-                    execExamActivityJobLogic(key);
-                } else {
-                    return;
-                }
+                });
             }
         }
     }