Jelajahi Sumber

获取今日考试批次、场次、考场编码

wangliang 1 tahun lalu
induk
melakukan
4c50a5dd0b

+ 29 - 27
themis-admin/src/main/java/com/qmth/themis/admin/api/TEExamController.java

@@ -474,37 +474,39 @@ public class TEExamController {
         if (Objects.nonNull(tbExamInvigilateUserList) && tbExamInvigilateUserList.size() > 0) {
             roomCodeSet = tbExamInvigilateUserList.stream().map(s -> s.getRoomCode()).collect(Collectors.toSet());
         }
-        if (authDto.getRoleCodes().toString().contains(RoleEnum.INVIGILATE.name()) && (Objects.isNull(roomCodeSet)
-                || roomCodeSet.size() == 0)) {
+        if (authDto.getRoleCodes().toString().contains(RoleEnum.INVIGILATE.name()) && CollectionUtils.isEmpty(roomCodeSet)) {
             throw new BusinessException("当前监考老师未设置任何监考考场");
         }
-        AtomicReference<ExamPropCountDto> examPropCountDto = new AtomicReference(new ExamPropCountDto(examId, 0, 0, 0, 0, 0, new BigDecimal(0)));
-        if (Objects.nonNull(roomCodeSet) && roomCodeSet.size() > 0) {
-            //根据roomCode获取当前老师所要监考的全部应考学生数
-            List<CountStopBean> countStopBeanList = tOeExamRecordService.findByStopInfo(examId, roomCodeSet, examActivityId);
-            if (Objects.nonNull(countStopBeanList) && countStopBeanList.size() > 0) {
-//                examPropCountDto.get().setClientWebsocketStatusCount(countStopBeanList.get(0).getOffCount());
-//                examPropCountDto.get().setMonitorStatusSourceCount(countStopBeanList.get(0).getStopCount());
-                examPropCountDto.get().setAllCount(countStopBeanList.get(0).getAllCount());
-            }
-            List<Integer> list = tOeExamRecordService.findByOnlineInfo(examId, roomCodeSet, examActivityId);
-            if (Objects.nonNull(list) && list.size() > 0) {
-                examPropCountDto.get().setPrepareCount(list.get(0));
-                examPropCountDto.get().setExamCount(list.get(1));
-                examPropCountDto.get().setAlreadyComplete(list.get(2));
-//                examPropCountDto.get().setNotComplete(list.get(3) + list.get(4));
-                examPropCountDto.get().setNotComplete(examPropCountDto.get().getAllCount().intValue() - examPropCountDto.get().getAlreadyComplete().intValue());
-            }
-            if (Objects.nonNull(examPropCountDto.get().getAllCount()) && examPropCountDto.get().getAllCount().intValue() > 0) {
-                BigDecimal completionRate = new BigDecimal(examPropCountDto.get().getAlreadyComplete())
-                        .divide(new BigDecimal(examPropCountDto.get().getAllCount()), 2, BigDecimal.ROUND_HALF_UP)
-                        .setScale(2, BigDecimal.ROUND_HALF_UP);
-                examPropCountDto.get().setCompletionRate(completionRate);
-            }
-        }
+
+
+//        AtomicReference<ExamPropCountDto> examPropCountDto = new AtomicReference(new ExamPropCountDto(examId, 0, 0, 0, 0, 0, new BigDecimal(0)));
+//        if (Objects.nonNull(roomCodeSet) && roomCodeSet.size() > 0) {
+//            //根据roomCode获取当前老师所要监考的全部应考学生数
+//            List<CountStopBean> countStopBeanList = tOeExamRecordService.findByStopInfo(examId, roomCodeSet, examActivityId);
+//            if (Objects.nonNull(countStopBeanList) && countStopBeanList.size() > 0) {
+////                examPropCountDto.get().setClientWebsocketStatusCount(countStopBeanList.get(0).getOffCount());
+////                examPropCountDto.get().setMonitorStatusSourceCount(countStopBeanList.get(0).getStopCount());
+//                examPropCountDto.get().setAllCount(countStopBeanList.get(0).getAllCount());
+//            }
+//            List<Integer> list = tOeExamRecordService.findByOnlineInfo(examId, roomCodeSet, examActivityId);
+//            if (Objects.nonNull(list) && list.size() > 0) {
+//                examPropCountDto.get().setPrepareCount(list.get(0));
+//                examPropCountDto.get().setExamCount(list.get(1));
+//                examPropCountDto.get().setAlreadyComplete(list.get(2));
+////                examPropCountDto.get().setNotComplete(list.get(3) + list.get(4));
+//                examPropCountDto.get().setNotComplete(examPropCountDto.get().getAllCount().intValue() - examPropCountDto.get().getAlreadyComplete().intValue());
+//            }
+//            if (Objects.nonNull(examPropCountDto.get().getAllCount()) && examPropCountDto.get().getAllCount().intValue() > 0) {
+//                BigDecimal completionRate = new BigDecimal(examPropCountDto.get().getAlreadyComplete())
+//                        .divide(new BigDecimal(examPropCountDto.get().getAllCount()), 2, BigDecimal.ROUND_HALF_UP)
+//                        .setScale(2, BigDecimal.ROUND_HALF_UP);
+//                examPropCountDto.get().setCompletionRate(completionRate);
+//            }
+//        }
 //        long end = System.currentTimeMillis();
 //        log.info("============prop/count耗时============:{}秒", (end - start) / 1000);
-        return ResultUtil.ok(examPropCountDto);
+//        return ResultUtil.ok(examPropCountDto);
+        return ResultUtil.ok(null);
     }
 
     @ApiOperation(value = "考试重新算分")

+ 51 - 0
themis-business/src/main/java/com/qmth/themis/business/bean/admin/ExamActivityTodayBean.java

@@ -0,0 +1,51 @@
+package com.qmth.themis.business.bean.admin;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * @Description: 当天考试集合
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2023/10/27
+ */
+public class ExamActivityTodayBean implements Serializable {
+
+    @ApiModelProperty(name = "场次id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long examActivityId;
+
+    @ApiModelProperty(name = "考场编码集合")
+    private Set<String> roomCodeList;
+
+    public ExamActivityTodayBean() {
+
+    }
+
+    public ExamActivityTodayBean(Long examActivityId, Set<String> roomCodeList) {
+        this.examActivityId = examActivityId;
+        this.roomCodeList = roomCodeList;
+    }
+
+    public Long getExamActivityId() {
+        return examActivityId;
+    }
+
+    public void setExamActivityId(Long examActivityId) {
+        this.examActivityId = examActivityId;
+    }
+
+    public Set<String> getRoomCodeList() {
+        return roomCodeList;
+    }
+
+    public void setRoomCodeList(Set<String> roomCodeList) {
+        this.roomCodeList = roomCodeList;
+    }
+}

+ 2 - 36
themis-business/src/main/java/com/qmth/themis/business/constant/SystemConstant.java

@@ -214,6 +214,8 @@ public class SystemConstant {
     public static final String BLACK_LIST_CACHE = "blacklist:cache";
     public static final String SYS_NOTIFY_CACHE = "sys:notify:cache";
     public static final String PROBLEM_CACHE = "problem:cache";
+    public static final String TODAY_EXAM_MAP_CACHE = "today:exam:map:cache:";
+    public static final String TODAY_EXAM_ID_LIST_CACHE = "today:exam:id:list:cache";
 
     public volatile static Searcher SEARCHER = null;
     public static final String ONLINE_WARN_INTERVAL = "online.warn.interval";
@@ -228,79 +230,43 @@ public class SystemConstant {
     public static final String WEBSOCKET_MOBILE_PREFIX = "/ws/mobile";
     public static final String LOGIN_LIMIT = "login limit";
 
-
     public static final String OBJECTIVE_SCORE_PUSH = "objectiveScorePush";
     public static final String EXAM_STUDENT_BREACH_PUSH = "examStudentBreachPush";
     public static final String EXAM_ID = "examId";
-
     public static final String EXAM_CODE = "examCode";
-
     public static final String ORG_ID = "orgId";
-
     public static final String REMARK = "remark";
-
     public static final String USER_ID = "userId";
-
     public static final String CREATE_ID = "createId";
-
     public static final String EXAM_RECORD_ID = "examRecordId";
-
     public static final String EXAM_STUDENT_ID = "examStudentId";
-
     public static final String COURSE_CODE = "courseCode";
-
     public static final String COURSE_NAME = "courseName";
-
     public static final String ROOM_CODE = "roomCode";
-
     public static final String ACTIVITY_ID = "activityId";
-
     public static final String CREATE_TIME = "createTime";
-
     public static final String UPDATE_TIME = "updateTime";
-
     public static final String WEB_SOCKET_OE_SERVER = "webSocketOeServer";
-
     public static final String WEBSOCKET_CLOSE = "服务器端关闭";
-
     public static final String LOG_ERROR = "请求出错:{}";
-
     public static final String EXTEND_COLUMN = "extendColumn";
-
     public static final String REMOVE_WEBSOCKET = "removeWebsocket";
-
     public static final String IMPORT_INIT = "准备开始处理导入数据";
-
     public static final String EXPORT_INIT = "准备开始处理导出数据";
-
     public static final String SCORE_PUSH_INIT = "准备同步云阅卷成绩数据";
-
     public static final String DATA_PUSH_INIT = "准备推送云阅卷数据";
-
     public static final String RECORD_ID = "recordId";
-
     public static final String STUDENT_ID = "studentId";
-
     public static final String MESSAGE = "message";
-
     public static final String ADMIN = "ADMIN";
-
     public static final String BREACH_STATUS = "breachStatus";
-
     public static final String STUDENT = "student:";
-
     public static final String SESSION = "session:";
-
     public static final String ORG = "org:cache:";
-
     public static final String LINK = "LINK";
-
     public static final String SYSADMIN = "系统管理员";
-
     public static final String ALL_PATH = "/**";
-
     public static final String ADMIN_ALL_PATH = "/api/admin/**";
-
 //    public static final String THIRD_ALL_PATH = "/api/open/**";
 
     public static final String SCORE_PUSH_PATH = "/api/open/score/sync";

+ 59 - 0
themis-business/src/main/java/com/qmth/themis/business/service/ThemisCacheService.java

@@ -5,6 +5,8 @@ import com.qmth.themis.business.dto.cache.TEStudentCacheDto;
 import com.qmth.themis.business.entity.*;
 
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 /**
  * @Description: 缓存 服务类
@@ -303,4 +305,61 @@ public interface ThemisCacheService {
      * 删除问题缓存
      */
     public void removeProblemCache();
+
+    /**
+     * 设置当天考试缓存
+     */
+    public void setTodayExamCache();
+
+    /**
+     * 获取当天考试缓存
+     *
+     * @param examId
+     * @return
+     */
+    public Map getTodayExamCache(String examId);
+
+    /**
+     * 更新当天考试缓存
+     *
+     * @param examId
+     * @param examActivityId
+     */
+    public void updateTodayExamCache(String examId, String examActivityId);
+
+    /**
+     * 删除当天考试缓存
+     *
+     * @return
+     */
+    public void removeTodayExamCache(String examId);
+
+    /**
+     * 删除当天考试缓存
+     *
+     * @return
+     */
+    public void removeTodayExamCache(String examId, String examActivityId);
+
+    /**
+     * 获取当天考试列表缓存
+     *
+     * @return
+     */
+    public Set<Long> getTodayExamListCache();
+
+    /**
+     * 更新当天考试列表缓存
+     *
+     * @param examId
+     * @return
+     */
+    public void updateTodayExamListCache(Long examId);
+
+    /**
+     * 删除当天考试列表缓存
+     *
+     * @return
+     */
+    public void removeTodayExamListCache(Long examId);
 }

+ 126 - 0
themis-business/src/main/java/com/qmth/themis/business/service/impl/ThemisCacheServiceImpl.java

@@ -1,6 +1,7 @@
 package com.qmth.themis.business.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.qmth.themis.business.bean.admin.ExamActivityTodayBean;
 import com.qmth.themis.business.constant.SpringContextHolder;
 import com.qmth.themis.business.constant.SystemConstant;
 import com.qmth.themis.business.dto.AuthDto;
@@ -8,6 +9,7 @@ import com.qmth.themis.business.dto.cache.TEStudentCacheDto;
 import com.qmth.themis.business.entity.*;
 import com.qmth.themis.business.enums.RoleEnum;
 import com.qmth.themis.business.service.*;
+import com.qmth.themis.business.util.RedisUtil;
 import com.qmth.themis.common.enums.ExceptionResultEnum;
 import com.qmth.themis.common.exception.BusinessException;
 import com.qmth.themis.common.util.GsonUtil;
@@ -18,8 +20,11 @@ import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.cache.annotation.CachePut;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.LinkedMultiValueMap;
 
 import javax.annotation.Resource;
+import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -73,6 +78,15 @@ public class ThemisCacheServiceImpl implements ThemisCacheService {
     @Resource
     TBProblemService tbProblemService;
 
+    @Resource
+    RedisUtil redisUtil;
+
+    @Resource
+    TEExamActivityService teExamActivityService;
+
+    @Resource
+    TEExamStudentService teExamStudentService;
+
     /**
      * 添加机构缓存
      *
@@ -576,4 +590,116 @@ public class ThemisCacheServiceImpl implements ThemisCacheService {
     public void removeProblemCache() {
 
     }
+
+    /**
+     * 设置当天考试缓存
+     */
+    @Override
+    public void setTodayExamCache() {
+        try {
+            Date now = new Date();
+            SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
+            String today = sdf1.format(now);
+            SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            Long startTime = sdf2.parse(today + " 00:00:00").getTime();
+            Long endTime = sdf2.parse(today + " 23:59:59").getTime();
+            List<TEExamActivity> teExamActivityList = teExamActivityService.list(new QueryWrapper<TEExamActivity>().lambda().ge(TEExamActivity::getStartTime, startTime).le(TEExamActivity::getStartTime, endTime));
+            if (!CollectionUtils.isEmpty(teExamActivityList)) {
+                LinkedMultiValueMap<Long, ExamActivityTodayBean> examActivityMap = new LinkedMultiValueMap<>();
+                for (TEExamActivity t : teExamActivityList) {
+                    List<TEExamStudent> teExamStudentList = teExamStudentService.list(new QueryWrapper<TEExamStudent>().lambda().eq(TEExamStudent::getExamId, t.getExamId()).eq(TEExamStudent::getExamActivityId, t.getId()));
+                    if (!CollectionUtils.isEmpty(teExamStudentList)) {
+                        Set<String> roomCodeSet = teExamStudentList.stream().map(s -> s.getRoomCode()).collect(Collectors.toSet());
+                        examActivityMap.add(t.getExamId(), new ExamActivityTodayBean(t.getId(), roomCodeSet));
+                    }
+                }
+                examActivityMap.forEach((k, v) -> {
+                    for (ExamActivityTodayBean e : v) {
+                        redisUtil.set(SystemConstant.TODAY_EXAM_MAP_CACHE + k, e.getExamActivityId().toString(), e.getRoomCodeList());
+                        redisUtil.addSet(SystemConstant.TODAY_EXAM_ID_LIST_CACHE, k);
+                    }
+                });
+            }
+        } catch (Exception e) {
+            log.error(SystemConstant.LOG_ERROR, e);
+        }
+    }
+
+    /**
+     * 获取当天考试缓存
+     *
+     * @param examId
+     * @return
+     */
+    @Override
+    public Map<String, Set<String>> getTodayExamCache(String examId) {
+        return redisUtil.getHashEntries(SystemConstant.TODAY_EXAM_MAP_CACHE + examId);
+    }
+
+    /**
+     * 更新当天考试缓存
+     *
+     * @param examId
+     * @return
+     */
+    @Override
+    public void updateTodayExamCache(String examId, String examActivityId) {
+        List<TEExamStudent> teExamStudentList = teExamStudentService.list(new QueryWrapper<TEExamStudent>().lambda().eq(TEExamStudent::getExamId, Long.parseLong(examId)).eq(TEExamStudent::getExamActivityId, Long.parseLong(examActivityId)));
+        if (!CollectionUtils.isEmpty(teExamStudentList)) {
+            Set<String> roomCodeSet = teExamStudentList.stream().map(s -> s.getRoomCode()).collect(Collectors.toSet());
+            this.removeTodayExamCache(examId, examActivityId);
+            redisUtil.set(SystemConstant.TODAY_EXAM_MAP_CACHE + examId, examActivityId, roomCodeSet);
+        }
+    }
+
+    /**
+     * 删除当天考试缓存
+     *
+     * @param examId
+     */
+    @Override
+    public void removeTodayExamCache(String examId) {
+        redisUtil.delete(SystemConstant.TODAY_EXAM_MAP_CACHE + examId);
+    }
+
+    /**
+     * 删除当天考试缓存
+     *
+     * @param examId
+     * @param examActivityId
+     */
+    @Override
+    public void removeTodayExamCache(String examId, String examActivityId) {
+        redisUtil.delete(SystemConstant.TODAY_EXAM_MAP_CACHE + examId, examActivityId);
+    }
+
+    /**
+     * 获取当天考试列表缓存
+     *
+     * @return
+     */
+    @Override
+    public Set<Long> getTodayExamListCache() {
+        return redisUtil.getSet(SystemConstant.TODAY_EXAM_ID_LIST_CACHE);
+    }
+
+    /**
+     * 更新当天考试列表缓存
+     *
+     * @param examId
+     */
+    @Override
+    public void updateTodayExamListCache(Long examId) {
+        redisUtil.addSet(SystemConstant.TODAY_EXAM_ID_LIST_CACHE, examId);
+    }
+
+    /**
+     * 删除当天考试列表缓存
+     *
+     * @param examId
+     */
+    @Override
+    public void removeTodayExamListCache(Long examId) {
+        redisUtil.removeSet(SystemConstant.TODAY_EXAM_ID_LIST_CACHE, examId);
+    }
 }

+ 59 - 0
themis-business/src/main/java/com/qmth/themis/business/util/RedisUtil.java

@@ -9,6 +9,7 @@ import org.springframework.stereotype.Component;
 import javax.annotation.Resource;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
 
@@ -199,6 +200,64 @@ public class RedisUtil {
         redisTemplate.opsForValue().set(key, o);
     }
 
+    /**
+     * 设置缓存
+     *
+     * @param key
+     * @param o
+     */
+    public void addSet(String key, Object o) {
+        redisTemplate.opsForSet().add(key, o);
+    }
+
+    /**
+     * 获取缓存
+     *
+     * @param key
+     */
+    public Set getSet(String key) {
+        return redisTemplate.opsForSet().members(key);
+    }
+
+    /**
+     * 删除缓存
+     *
+     * @param key
+     */
+    public void removeSet(String key, Object o) {
+        redisTemplate.opsForSet().remove(key, o);
+    }
+
+    /**
+     * 设置list缓存
+     *
+     * @param key
+     * @param o
+     */
+    public void setList(String key, Object o) {
+        redisTemplate.opsForList().leftPush(key, o);
+    }
+
+    /**
+     * 查找list缓存
+     *
+     * @param key
+     */
+    public void rangeList(String key) {
+        redisTemplate.opsForList().range(key, 0, -1);
+    }
+
+    /**
+     * 删除list缓存
+     *
+     * @param key
+     * @param o
+     */
+    public void removeList(String key, Object o) {
+        redisTemplate.opsForList().remove(key, 0, o);
+    }
+
+
     /**
      * 设置缓存
      *

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

@@ -25,7 +25,11 @@ public enum QuartzTaskEnum {
 
     OBJECTIVE_ANSWER_CACHE_LOAD_JOB_NAME("客观题缓存加载"),
 
-    OBJECTIVE_ANSWER_CACHE_LOAD_JOB_GROUP_NAME("客观题缓存加载");
+    OBJECTIVE_ANSWER_CACHE_LOAD_JOB_GROUP_NAME("客观题缓存加载"),
+
+    EXAM_SUMMARY_JOB_NAME("考试统计"),
+
+    EXAM_SUMMARY_JOB_GROUP_NAME("考试统计 group");
 
 //    REPAIR_JOB_NAME("repair_job"),
 

+ 47 - 0
themis-task/src/main/java/com/qmth/themis/task/quartz/ExamSummaryJob.java

@@ -0,0 +1,47 @@
+package com.qmth.themis.task.quartz;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.qmth.themis.business.bean.admin.ExamActivityTodayBean;
+import com.qmth.themis.business.constant.SystemConstant;
+import com.qmth.themis.business.entity.TEExamActivity;
+import com.qmth.themis.business.entity.TEExamStudent;
+import com.qmth.themis.business.service.TEExamActivityService;
+import com.qmth.themis.business.service.TEExamStudentService;
+import com.qmth.themis.business.service.ThemisCacheService;
+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 org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.LinkedMultiValueMap;
+
+import javax.annotation.Resource;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * @Description: 考试统计
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2023/10/27
+ */
+@Component
+public class ExamSummaryJob extends QuartzJobBean {
+    private final static Logger log = LoggerFactory.getLogger(ExamSummaryJob.class);
+
+//    @Resource
+//    ThemisCacheService themisCacheService;
+
+    @Override
+    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
+        log.info("ExamSummaryJob进来了,context:{}", context);
+//        themisCacheService.setTodayExamCache();
+    }
+}

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

@@ -60,6 +60,7 @@ public class MqActivityJob extends QuartzJobBean {
     @Override
     protected void executeInternal(JobExecutionContext context) {
         log.info("mq_activity_job进来了,context:{}", context);
+        themisCacheService.setTodayExamCache();
         Long finishTime = System.currentTimeMillis();
         QueryWrapper<TEExam> teExamQueryWrapper = new QueryWrapper<>();
         teExamQueryWrapper.lambda().eq(TEExam::getEnable, 1)

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

@@ -4,12 +4,14 @@ import com.qmth.themis.business.constant.SpringContextHolder;
 import com.qmth.themis.business.constant.SystemConstant;
 import com.qmth.themis.business.enums.MqGroupEnum;
 import com.qmth.themis.business.enums.MqTagEnum;
+import com.qmth.themis.business.service.ThemisCacheService;
 import com.qmth.themis.business.util.MqUtil;
 import com.qmth.themis.mq.listener.RocketMessageConsumer;
 import com.qmth.themis.mq.templete.impl.*;
 import com.qmth.themis.task.config.DictionaryConfig;
 import com.qmth.themis.task.enums.QuartzTaskEnum;
 import com.qmth.themis.task.listener.QuartzOrderlyImpl;
+import com.qmth.themis.task.quartz.ExamSummaryJob;
 import com.qmth.themis.task.quartz.MqActivityJob;
 import com.qmth.themis.task.quartz.MqJob;
 import com.qmth.themis.task.quartz.ObjectiveAnswerCacheLoadJob;
@@ -52,11 +54,16 @@ public class StartRunning implements CommandLineRunner {
     @Value("${spring.application.name}")
     String applicationName;
 
+    @Resource
+    ThemisCacheService themisCacheService;
+
     @SuppressWarnings({"unchecked", "rawtypes"})
     @Override
     public void run(String... args) throws Exception {
         log.info("服务器启动时执行 start");
         log.info("增加mqjob start");
+        themisCacheService.setTodayExamCache();
+
         Map mqMap = new HashMap();
         mqMap.put(SystemConstant.NAME, MqJob.class.getName());
         quartzService.deleteJob(QuartzTaskEnum.MQ_JOB_NAME.name(), QuartzTaskEnum.MQ_JOB_GROUP_NAME.name());
@@ -77,6 +84,13 @@ public class StartRunning implements CommandLineRunner {
         quartzService.addJob(ObjectiveAnswerCacheLoadJob.class, QuartzTaskEnum.OBJECTIVE_ANSWER_CACHE_LOAD_JOB_NAME.name(), QuartzTaskEnum.OBJECTIVE_ANSWER_CACHE_LOAD_JOB_GROUP_NAME.name(), "0 0 1 * * ?", objectiveAnswerCacheMap);
         log.info("增加客观题答案缓存加载job end");
 
+        log.info("增加考试信息统计job start");
+        Map examSummaryMap = new HashMap();
+        examSummaryMap.put(SystemConstant.NAME, ExamSummaryJob.class.getName());
+        quartzService.deleteJob(QuartzTaskEnum.EXAM_SUMMARY_JOB_NAME.name(), QuartzTaskEnum.EXAM_SUMMARY_JOB_GROUP_NAME.name());
+        quartzService.addJob(ExamSummaryJob.class, QuartzTaskEnum.EXAM_SUMMARY_JOB_NAME.name(), QuartzTaskEnum.EXAM_SUMMARY_JOB_GROUP_NAME.name(), "0 0/1 * * * ?", examSummaryMap);
+        log.info("增加考试信息统计job end");
+
 //        log.info("增加修复job start");
 //        Map repairMap = new HashMap();
 //        repairMap.put(SystemConstant.NAME, RepairJob.class.getName());