Browse Source

Merge branch 'dev' into release
1

wangliang 4 years ago
parent
commit
e91b5300c9

+ 5 - 1
themis-task/src/main/java/com/qmth/themis/task/enums/QuartzTaskEnum.java

@@ -13,7 +13,11 @@ public enum QuartzTaskEnum {
 
 
     MQ_JOB_GROUP_NAME("mqjob group"),
     MQ_JOB_GROUP_NAME("mqjob group"),
 
 
-    EXAM_ACTIVITY_JOB_GROUP_NAME("考场一次性延时job group");
+    EXAM_ACTIVITY_JOB_GROUP_NAME("考场一次性延时job group"),
+
+    MQ_ACTIVITY_JOB_NAME("mq_activity_job"),
+
+    MQ_ACTIVITY_JOB_GROUP_NAME("mq_activity_job group"),;
 
 
     private QuartzTaskEnum(String code) {
     private QuartzTaskEnum(String code) {
         this.code = code;
         this.code = code;

+ 83 - 0
themis-task/src/main/java/com/qmth/themis/task/quartz/MqActivityJob.java

@@ -0,0 +1,83 @@
+package com.qmth.themis.task.quartz;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.qmth.themis.business.cache.ExamRecordCacheUtil;
+import com.qmth.themis.business.cache.RedisKeyHelper;
+import com.qmth.themis.business.cache.bean.ExamStudentCacheBean;
+import com.qmth.themis.business.entity.TEExam;
+import com.qmth.themis.business.entity.TEExamActivity;
+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.util.RedisUtil;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.scheduling.quartz.QuartzJobBean;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+/** 
+* @Description: 非强制交卷activity任务
+* @Param:  
+* @return:  
+* @Author: wangliang
+* @Date: 2020/9/22 
+*/ 
+public class MqActivityJob extends QuartzJobBean {
+    private final static Logger log = LoggerFactory.getLogger(MqActivityJob.class);
+
+    @Resource
+    TEExamService teExamService;
+
+    @Resource
+    TEExamActivityService teExamActivityService;
+
+    @Resource
+    RedisUtil redisUtil;
+
+    @Resource
+    TEExamStudentService teExamStudentService;
+
+    @Override
+    protected void executeInternal(JobExecutionContext context) {
+        log.info("mq_activity_job进来了,context:{}", context);
+        QueryWrapper<TEExam> teExamQueryWrapper = new QueryWrapper<>();
+        teExamQueryWrapper.lambda().eq(TEExam::getEnable, 1)
+                .eq(TEExam::getForceFinish, 0);
+        List<TEExam> teExamList = teExamService.list(teExamQueryWrapper);
+        if (Objects.nonNull(teExamList) && teExamList.size() > 0) {
+            for (TEExam exam : teExamList) {
+                QueryWrapper<TEExamActivity> teExamActivityQueryWrapper = new QueryWrapper<>();
+                teExamActivityQueryWrapper.lambda().eq(TEExamActivity::getEnable, 1)
+                        .eq(TEExamActivity::getExamId, exam.getId());
+                List<TEExamActivity> teExamActivityList = teExamActivityService.list(teExamActivityQueryWrapper);
+                if (Objects.nonNull(teExamActivityList) && teExamActivityList.size() > 0) {
+                    for (TEExamActivity teExamActivity : teExamActivityList) {
+                        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);
+                                }
+                            });
+                        }
+                    }
+                }
+            }
+        }
+    }
+}

+ 2 - 3
themis-task/src/main/java/com/qmth/themis/task/quartz/MqJob.java

@@ -1,11 +1,10 @@
 package com.qmth.themis.task.quartz;
 package com.qmth.themis.task.quartz;
 
 
 import com.qmth.themis.business.constant.SystemConstant;
 import com.qmth.themis.business.constant.SystemConstant;
-import com.qmth.themis.business.util.RedisUtil;
 import com.qmth.themis.business.dto.MqDto;
 import com.qmth.themis.business.dto.MqDto;
 import com.qmth.themis.business.service.ProducerServer;
 import com.qmth.themis.business.service.ProducerServer;
+import com.qmth.themis.business.util.RedisUtil;
 import org.quartz.JobExecutionContext;
 import org.quartz.JobExecutionContext;
-import org.quartz.JobExecutionException;
 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;
@@ -31,7 +30,7 @@ public class MqJob extends QuartzJobBean {
     ProducerServer producerServer;
     ProducerServer producerServer;
 
 
     @Override
     @Override
-    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
+    protected void executeInternal(JobExecutionContext context) {
         log.info("mq_job进来了,context:{}", context);
         log.info("mq_job进来了,context:{}", context);
         this.assembleJob(SystemConstant.MQ_TOPIC_BUFFER_LIST);
         this.assembleJob(SystemConstant.MQ_TOPIC_BUFFER_LIST);
         log.info("mq_delay_job进来了,context:{}", context);
         log.info("mq_delay_job进来了,context:{}", context);

+ 8 - 0
themis-task/src/main/java/com/qmth/themis/task/start/StartRunning.java

@@ -9,6 +9,7 @@ import com.qmth.themis.mq.listener.RocketMessageConsumer;
 import com.qmth.themis.mq.templete.impl.*;
 import com.qmth.themis.mq.templete.impl.*;
 import com.qmth.themis.task.enums.QuartzTaskEnum;
 import com.qmth.themis.task.enums.QuartzTaskEnum;
 import com.qmth.themis.task.listener.QuartzOrderlyImpl;
 import com.qmth.themis.task.listener.QuartzOrderlyImpl;
+import com.qmth.themis.task.quartz.MqActivityJob;
 import com.qmth.themis.task.quartz.MqJob;
 import com.qmth.themis.task.quartz.MqJob;
 import com.qmth.themis.task.service.QuartzService;
 import com.qmth.themis.task.service.QuartzService;
 import org.apache.rocketmq.common.protocol.heartbeat.MessageModel;
 import org.apache.rocketmq.common.protocol.heartbeat.MessageModel;
@@ -52,6 +53,13 @@ public class StartRunning implements CommandLineRunner {
         quartzService.addJob(MqJob.class, QuartzTaskEnum.MQ_JOB_NAME.name(), QuartzTaskEnum.MQ_JOB_GROUP_NAME.name(), "0 0/2 * * * ?", mqMap);
         quartzService.addJob(MqJob.class, QuartzTaskEnum.MQ_JOB_NAME.name(), QuartzTaskEnum.MQ_JOB_GROUP_NAME.name(), "0 0/2 * * * ?", mqMap);
         log.info("增加mqjob end");
         log.info("增加mqjob end");
 
 
+        log.info("增加mqActivityjob start");
+        Map mqActivityMap = new HashMap();
+        mqActivityMap.put("name", MqActivityJob.class.getName());
+        quartzService.deleteJob(QuartzTaskEnum.MQ_ACTIVITY_JOB_NAME.name(), QuartzTaskEnum.MQ_ACTIVITY_JOB_GROUP_NAME.name());
+        quartzService.addJob(MqActivityJob.class, QuartzTaskEnum.MQ_ACTIVITY_JOB_NAME.name(), QuartzTaskEnum.MQ_ACTIVITY_JOB_GROUP_NAME.name(), "0 0 0 * * ?", mqMap);
+        log.info("增加mqActivityjob end");
+
         /**
         /**
          * session
          * session
          */
          */