wangliang 1 rok temu
rodzic
commit
1d49ae709b

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

@@ -225,7 +225,7 @@ public class TEExamController {
             }
             List<TEExamActivity> teExamActivityList = teExamActivityService.list(new QueryWrapper<TEExamActivity>().lambda().eq(TEExamActivity::getExamId, teExam.getId()).eq(TEExamActivity::getEnable, 1));
             for (TEExamActivity t : teExamActivityList) {
-                if (Objects.nonNull(t.getEnable()) && t.getEnable().intValue() == 1 && t.getFinishTime().longValue() > System.currentTimeMillis()) {
+                if (Objects.nonNull(t.getEnable()) && t.getEnable().intValue() == 1 && (Objects.nonNull(t.getFinishTime()) && t.getFinishTime().longValue() > System.currentTimeMillis())) {
                     themisCacheService.updateTodayExamListCache(t.getExamId().toString(), t.getId());
                 } else {
                     themisCacheService.removeTodayExamListCache(t.getExamId().toString(), t.getId());

+ 4 - 0
themis-admin/src/main/java/com/qmth/themis/admin/api/TEExamStudentController.java

@@ -99,6 +99,9 @@ public class TEExamStudentController {
     @Resource
     TSyncExamStudentScoreService tSyncExamStudentScoreService;
 
+    @Resource
+    ThemisCacheService themisCacheService;
+
     @ApiOperation(value = "考试明细查询接口")
     @RequestMapping(value = "/exam_record_detail/query", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "考生信息", response = ExamRecordDetailBean.class)})
@@ -317,6 +320,7 @@ public class TEExamStudentController {
         });
         for (TEExamStudent es : teExamStudentList) {
             teExamStudentService.updateExamStudentCacheBean(es.getId());
+            themisCacheService.updateTodayExamListCache(es.getExamId().toString(), es.getExamActivityId());
         }
         return ResultUtil.ok(true);
     }

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

@@ -1,51 +0,0 @@
-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;
-    }
-}

+ 11 - 13
themis-business/src/main/java/com/qmth/themis/business/bean/admin/ExamListBean.java

@@ -5,7 +5,6 @@ import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.io.Serializable;
-import java.util.Set;
 
 /**
  * @Description: 考试列表集合
@@ -21,32 +20,31 @@ public class ExamListBean implements Serializable {
     private Long examActivityId;
 
     @ApiModelProperty(name = "考场编码集合")
-    @JsonSerialize(using = ToStringSerializer.class)
-    private Set<String> roomCodeSet;
+    private String roomCode;
 
     public ExamListBean() {
 
     }
 
-    public ExamListBean(Long examActivityId, Set<String> roomCodeSet) {
+    public ExamListBean(Long examActivityId, String roomCode) {
         this.examActivityId = examActivityId;
-        this.roomCodeSet = roomCodeSet;
+        this.roomCode = roomCode;
     }
 
-    public Long getExamActivityId() {
-        return examActivityId;
+    public String getRoomCode() {
+        return roomCode;
     }
 
-    public void setExamActivityId(Long examActivityId) {
-        this.examActivityId = examActivityId;
+    public void setRoomCode(String roomCode) {
+        this.roomCode = roomCode;
     }
 
-    public Set<String> getRoomCodeSet() {
-        return roomCodeSet;
+    public Long getExamActivityId() {
+        return examActivityId;
     }
 
-    public void setRoomCodeSet(Set<String> roomCodeSet) {
-        this.roomCodeSet = roomCodeSet;
+    public void setExamActivityId(Long examActivityId) {
+        this.examActivityId = examActivityId;
     }
 }
 

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

@@ -210,8 +210,6 @@ public class SystemConstant {
     public static final Integer BEFORE_AUDIO_SECOND = 60;
     public static final Integer AFTER_AUDIO_SECOND = 900;
     public static final long FINISH_DELAY_TIME = 1000 * 60 * 5;
-    public static final String EXAM_ACTIVITY_ID = "examActivityId";
-    public static final String ROOM_CODE_SET = "roomCodeSet";
     //    public static final String AUTH_INFO_CACHE = "auth:info:cache";
     public static final String EXAM_AUDIO_CACHE = "exam:audio:cache";
     public static final String ATTACHMENT_CACHE = "attachment:cache";

+ 2 - 1
themis-business/src/main/java/com/qmth/themis/business/service/ThemisCacheService.java

@@ -1,5 +1,6 @@
 package com.qmth.themis.business.service;
 
+import com.qmth.themis.business.bean.admin.ExamListBean;
 import com.qmth.themis.business.dto.AuthDto;
 import com.qmth.themis.business.dto.cache.TEStudentCacheDto;
 import com.qmth.themis.business.entity.*;
@@ -372,7 +373,7 @@ public interface ThemisCacheService {
      * @param examId
      * @return
      */
-    public Map<String, List<String>> getTodayExamListCache(String examId);
+    public List<ExamListBean> getTodayExamListCache(String examId);
 
     /**
      * 更新当天考试缓存

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

@@ -413,13 +413,14 @@ public class TEExamActivityServiceImpl extends ServiceImpl<TEExamActivityMapper,
             teExamActivityService.saveOrUpdateBatch(teExamActivityList);
 
             for (TEExamActivity ac : teExamActivityList) {
-                if (Objects.nonNull(ac.getEnable()) && ac.getEnable().intValue() == 1 && ac.getFinishTime().longValue() > System.currentTimeMillis()) {
+                teExamActivityService.updateExamActivityCacheBean(ac.getId());
+                ExamActivityCacheBean examActivityCacheBean = this.getExamActivityCacheBean(ac.getId());
+                if (Objects.nonNull(examActivityCacheBean.getEnable()) && examActivityCacheBean.getEnable().intValue() == 1 && Objects.nonNull(examActivityCacheBean.getFinishTime()) && examActivityCacheBean.getFinishTime().longValue() > System.currentTimeMillis()) {
                     themisCacheService.updateTodayExamListCache(ac.getExamId().toString(), ac.getId());
                 } else {
                     themisCacheService.removeTodayExamListCache(ac.getExamId().toString(), ac.getId());
                 }
                 themisCacheService.updateOrgExamListCache(teExam.getOrgId().toString(), ac.getExamId().toString(), ac.getId());
-                teExamActivityService.updateExamActivityCacheBean(ac.getId());
             }
 
             if (!CollectionUtils.isEmpty(teAudioList)) {

+ 1 - 17
themis-business/src/main/java/com/qmth/themis/business/service/impl/TEExamSummaryServiceImpl.java

@@ -56,10 +56,6 @@ public class TEExamSummaryServiceImpl extends ServiceImpl<TEExamSummaryMapper, T
                 TEExamSummary teExamSummary = this.baseMapper.examSummary(examId, examActivityId, s);
                 this.examSummaryCommon(examId, examActivityId, s, teExamSummary);
             }
-        } else {
-            //根据考试批次、场次统计信息
-            TEExamSummary teExamSummary = this.baseMapper.examSummary(examId, examActivityId, null);
-            this.examSummaryCommon(examId, examActivityId, null, teExamSummary);
         }
     }
 
@@ -79,19 +75,7 @@ public class TEExamSummaryServiceImpl extends ServiceImpl<TEExamSummaryMapper, T
             ExamCacheBean examCacheBean = teExamService.getExamCacheBean(examId);
             ExamActivityCacheBean ac = teExamActivityService.getExamActivityCacheBean(examActivityId);
             //换算开始时间和结束时间
-            Long startTime = null, endTime = null;
-            if (ExamModeEnum.ANYTIME.equals(examCacheBean.getMode())) {
-                startTime = ac.getStartTime() - (ac.getPrepareSeconds() * 1000);
-                endTime = ac.getFinishTime();
-                endTime = endTime + (1000 * 60 * 5);//额外加5分钟,有可能后台交卷未完成
-            } else {
-                startTime = ac.getStartTime() - (ac.getPrepareSeconds() * 1000);
-                Integer openingSecondsTemp = ac.getOpeningSeconds();
-                openingSecondsTemp = Objects.nonNull(openingSecondsTemp) && openingSecondsTemp.intValue() == 0 ? SystemConstant.DEFAULT_OPENING_SECONDS : openingSecondsTemp;
-                endTime = ac.getStartTime() + (openingSecondsTemp * 1000);
-                endTime = endTime + (1000 * 60 * 5);//额外加5分钟,有可能后台交卷未完成
-            }
-
+            Long startTime = ac.getStartTime() - (ac.getPrepareSeconds() * 1000), endTime = ac.getFinishTime() + SystemConstant.FINISH_DELAY_TIME;
             //当考试场次开始时间已过且未结束考试,当前侯考数设为0,缺考数设为侯考数
             long timestamp = System.currentTimeMillis();
             if (teExamSummary.getPrepareCount().intValue() > 0) {//侯考

+ 24 - 49
themis-business/src/main/java/com/qmth/themis/business/service/impl/ThemisCacheServiceImpl.java

@@ -1,6 +1,5 @@
 package com.qmth.themis.business.service.impl;
 
-import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.qmth.themis.business.bean.admin.ExamListBean;
 import com.qmth.themis.business.cache.bean.ExamCacheBean;
@@ -11,11 +10,11 @@ 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.JacksonUtil;
 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;
+import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.cache.CacheManager;
@@ -623,7 +622,7 @@ public class ThemisCacheServiceImpl implements ThemisCacheService {
             List<TEExamActivity> teExamActivityList = teExamActivityService.list(new QueryWrapper<TEExamActivity>().lambda().ge(TEExamActivity::getStartTime, startTime).le(TEExamActivity::getStartTime, endTime).eq(TEExamActivity::getEnable, 1));
             //统计当天00:00:00~23:59:59可以进行的考试批次、场次、考场编码信息
             if (!CollectionUtils.isEmpty(teExamActivityList)) {
-                LinkedMultiValueMap<Long, String> examActivityMap = new LinkedMultiValueMap<>();
+                LinkedMultiValueMap<Long, ExamListBean> examActivityMap = new LinkedMultiValueMap<>();
                 Map<Long, Set<Long>> examActivityIdMap = new HashMap<>();//考试批次id,场次id集合
                 Map<Long, Set<String>> roomCodeMap = new HashMap<>();//考试场次id,考场编码集合
                 for (TEExamActivity t : teExamActivityList) {
@@ -645,7 +644,8 @@ public class ThemisCacheServiceImpl implements ThemisCacheService {
                 }
                 examActivityIdMap.forEach((k, v) -> {
                     for (Long l : v) {
-                        examActivityMap.add(k, JacksonUtil.parseJson(new ExamListBean(l, roomCodeMap.get(l))));
+                        String s = StringUtils.join(roomCodeMap.get(l)).replaceAll("\\[", "").replaceAll("\\]", "");
+                        examActivityMap.add(k, new ExamListBean(l, s));
                     }
                 });
                 examActivityMap.forEach((k, v) -> {
@@ -717,11 +717,7 @@ public class ThemisCacheServiceImpl implements ThemisCacheService {
     @Override
     public Set<Long> getOrgExamListCache(String orgId, String examId) {
         Map<String, Set<Long>> map = redisUtil.getHashEntries(SystemConstant.ORG_EXAM_LIST_MAP_CACHE + orgId);
-        if (!CollectionUtils.isEmpty(map)) {
-            return map.get(examId);
-        } else {
-            return null;
-        }
+        return !CollectionUtils.isEmpty(map) ? map.get(examId) : null;
     }
 
     /**
@@ -798,14 +794,9 @@ public class ThemisCacheServiceImpl implements ThemisCacheService {
      * @return
      */
     @Override
-    public Map<String, List<String>> getTodayExamListCache(String examId) {
-        Map<String, List<String>> examActityIdMap = null;
-        Map<String, List<String>> map = redisUtil.getHashEntries(SystemConstant.TODAY_EXAM_LIST_MAP_CACHE);
-        if (!CollectionUtils.isEmpty(map) && Objects.nonNull(map.get(examId))) {
-            examActityIdMap = new HashMap<>();
-            examActityIdMap.put(examId, map.get(examId));
-        }
-        return examActityIdMap;
+    public List<ExamListBean> getTodayExamListCache(String examId) {
+        Map<String, List<ExamListBean>> map = redisUtil.getHashEntries(SystemConstant.TODAY_EXAM_LIST_MAP_CACHE);
+        return !CollectionUtils.isEmpty(map) ? map.get(examId) : null;
     }
 
     /**
@@ -820,19 +811,9 @@ public class ThemisCacheServiceImpl implements ThemisCacheService {
         if (!CollectionUtils.isEmpty(teExamStudentList)) {
             Set<String> roomCodeSet = teExamStudentList.stream().map(s -> s.getRoomCode()).collect(Collectors.toSet());
             this.removeTodayExamListCache(examId, examActivityId);
-            Map<String, List<String>> map = this.getTodayExamListCache(examId);
-            if (!CollectionUtils.isEmpty(map)) {
-                CopyOnWriteArrayList<String> copyOnWriteArrayList = new CopyOnWriteArrayList(map.values());
-                copyOnWriteArrayList.add(JacksonUtil.parseJson(new ExamListBean(examActivityId, roomCodeSet)));
-                redisUtil.set(SystemConstant.TODAY_EXAM_LIST_MAP_CACHE, examId, new LinkedList<>(copyOnWriteArrayList));
-            } else {
-                CopyOnWriteArrayList<String> copyOnWriteArrayList = new CopyOnWriteArrayList();
-                copyOnWriteArrayList.add(JacksonUtil.parseJson(new ExamListBean(examActivityId, roomCodeSet)));
-                redisUtil.set(SystemConstant.TODAY_EXAM_LIST_MAP_CACHE, examId, new LinkedList<>(copyOnWriteArrayList));
-            }
-        } else {
-            CopyOnWriteArrayList<String> copyOnWriteArrayList = new CopyOnWriteArrayList();
-            copyOnWriteArrayList.add(JacksonUtil.parseJson(new ExamListBean(examActivityId, null)));
+            List<ExamListBean> examListBeanList = this.getTodayExamListCache(examId);
+            CopyOnWriteArrayList<ExamListBean> copyOnWriteArrayList = !CollectionUtils.isEmpty(examListBeanList) ? new CopyOnWriteArrayList(examListBeanList) : new CopyOnWriteArrayList();
+            copyOnWriteArrayList.add(new ExamListBean(examActivityId, StringUtils.join(roomCodeSet).replaceAll("\\[", "").replaceAll("\\]", "")));
             redisUtil.set(SystemConstant.TODAY_EXAM_LIST_MAP_CACHE, examId, new LinkedList<>(copyOnWriteArrayList));
         }
     }
@@ -855,26 +836,20 @@ public class ThemisCacheServiceImpl implements ThemisCacheService {
      */
     @Override
     public void removeTodayExamListCache(String examId, Long examActivityId) {
-        Map<String, List<String>> map = this.getTodayExamListCache(examId);
-        if (!CollectionUtils.isEmpty(map)) {
-            map.forEach((k, v) -> {
-                if (!CollectionUtils.isEmpty(v)) {
-                    CopyOnWriteArrayList<String> copyOnWriteArrayList = new CopyOnWriteArrayList(v);
-                    for (String s : copyOnWriteArrayList) {
-                        JSONObject jsonObject = JSONObject.parseObject(s);
-                        Long examActivityIdJs = jsonObject.getLong(SystemConstant.EXAM_ACTIVITY_ID);
-                        if (examActivityIdJs.longValue() == examActivityId.longValue()) {
-                            copyOnWriteArrayList.remove(s);
-                            break;
-                        }
-                    }
-                    if (!CollectionUtils.isEmpty(copyOnWriteArrayList)) {
-                        redisUtil.set(SystemConstant.TODAY_EXAM_LIST_MAP_CACHE, k, new LinkedList<>(copyOnWriteArrayList));
-                    } else {
-                        this.removeTodayExamListCache(examId);
-                    }
+        List<ExamListBean> examListBeanList = this.getTodayExamListCache(examId);
+        if (!CollectionUtils.isEmpty(examListBeanList)) {
+            CopyOnWriteArrayList<ExamListBean> copyOnWriteArrayList = new CopyOnWriteArrayList(examListBeanList);
+            for (ExamListBean e : copyOnWriteArrayList) {
+                if (e.getExamActivityId().longValue() == examActivityId.longValue()) {
+                    copyOnWriteArrayList.remove(e);
+                    break;
                 }
-            });
+            }
+            if (!CollectionUtils.isEmpty(copyOnWriteArrayList)) {
+                redisUtil.set(SystemConstant.TODAY_EXAM_LIST_MAP_CACHE, examId, new LinkedList<>(copyOnWriteArrayList));
+            } else {
+                this.removeTodayExamListCache(examId);
+            }
         }
     }
 

+ 13 - 0
themis-business/src/main/java/com/qmth/themis/business/templete/impl/TaskExamStudentImportTemplete.java

@@ -3,11 +3,14 @@ package com.qmth.themis.business.templete.impl;
 import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.google.common.collect.Lists;
+import com.google.common.reflect.TypeToken;
 import com.qmth.themis.business.constant.SystemConstant;
 import com.qmth.themis.business.dto.ExamStudentImportDto;
 import com.qmth.themis.business.entity.TEExamActivity;
 import com.qmth.themis.business.enums.ExamModeEnum;
 import com.qmth.themis.business.enums.TaskStatusEnum;
+import com.qmth.themis.business.service.TEExamActivityService;
+import com.qmth.themis.business.service.ThemisCacheService;
 import com.qmth.themis.business.templete.TaskImportCommon;
 import com.qmth.themis.business.templete.TaskImportTemplete;
 import com.qmth.themis.business.templete.service.TempleteLogicService;
@@ -17,6 +20,7 @@ import com.qmth.themis.business.util.ExcelUtil;
 import com.qmth.themis.business.util.JacksonUtil;
 import com.qmth.themis.common.contanst.Constants;
 import com.qmth.themis.common.exception.BusinessException;
+import com.qmth.themis.common.util.GsonUtil;
 import com.qmth.themis.common.util.Result;
 import com.qmth.themis.common.util.ResultUtil;
 import org.slf4j.Logger;
@@ -45,6 +49,9 @@ public class TaskExamStudentImportTemplete implements TaskImportTemplete {
     @Resource
     TempleteLogicService templeteLogicService;
 
+    @Resource
+    ThemisCacheService themisCacheService;
+
     /**
      * 考生导入模版
      *
@@ -62,6 +69,7 @@ public class TaskExamStudentImportTemplete implements TaskImportTemplete {
         taskImportCommon.setTxtList(new ArrayList());
         taskImportCommon.getTxtList().add(DateUtil.format(new Date(), Constants.DEFAULT_DATE_PATTERN) + "->开始准备处理导入的考生数据");
         Map<String, Object> finalMap = map;
+        Long examId = (Long) map.get(SystemConstant.EXAM_ID);
         Map<String, TEExamActivity> teExamActivityMap = (Map<String, TEExamActivity>) map.get("teExamActivityMap");
         try {
             List<LinkedMultiValueMap<Integer, Object>> finalList = ExcelUtil.excelReader(inputStream, Lists.newArrayList(ExamStudentImportDto.class), new ExcelCallback() {
@@ -127,6 +135,11 @@ public class TaskExamStudentImportTemplete implements TaskImportTemplete {
                 long start = System.currentTimeMillis();
 
                 map = templeteLogicService.execImportExamStudentLogic(finalList, map);
+                List<TEExamActivity> teExamActivityList = GsonUtil.fromJson(GsonUtil.toJson(teExamActivityMap.values()), new TypeToken<List<TEExamActivity>>() {
+                }.getType());
+                for (TEExamActivity t : teExamActivityList) {
+                    themisCacheService.updateTodayExamListCache(String.valueOf(examId), t.getId());
+                }
                 long end = System.currentTimeMillis();
                 log.info("导入考生数据结束,============耗时============:{}秒", (end - start) / 1000);
             }

+ 20 - 41
themis-task/src/main/java/com/qmth/themis/task/quartz/ExamSummaryJob.java

@@ -1,11 +1,11 @@
 package com.qmth.themis.task.quartz;
 
-import com.alibaba.fastjson.JSONObject;
+import cn.hutool.core.date.DateUtil;
+import com.qmth.themis.business.bean.admin.ExamListBean;
 import com.qmth.themis.business.cache.bean.ExamActivityCacheBean;
 import com.qmth.themis.business.cache.bean.ExamCacheBean;
 import com.qmth.themis.business.constant.SystemConstant;
 import com.qmth.themis.business.entity.TBOrg;
-import com.qmth.themis.business.enums.ExamModeEnum;
 import com.qmth.themis.business.service.*;
 import com.qmth.themis.business.util.RedisUtil;
 import org.quartz.JobExecutionContext;
@@ -55,11 +55,11 @@ public class ExamSummaryJob extends QuartzJobBean {
     @Override
     protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
         log.info("ExamSummaryJob进来了,context:{}", context);
-        Map<String, List<String>> examListMap = redisUtil.getHashEntries(SystemConstant.TODAY_EXAM_LIST_MAP_CACHE);
+        Map<String, List<ExamListBean>> examListMap = redisUtil.getHashEntries(SystemConstant.TODAY_EXAM_LIST_MAP_CACHE);
         //获取当天考试列表
         if (!CollectionUtils.isEmpty(examListMap)) {
             LinkedMultiValueMap<Long, Long> orgExamIdMap = new LinkedMultiValueMap<>();
-            for (Map.Entry<String, List<String>> entry : examListMap.entrySet()) {
+            for (Map.Entry<String, List<ExamListBean>> entry : examListMap.entrySet()) {
                 Long examId = Long.parseLong(entry.getKey());
                 ExamCacheBean examCacheBean = teExamService.getExamCacheBean(examId);
                 //不在考试时间范围内或者禁用,则删除当前考试批次id,更新缓存
@@ -70,44 +70,23 @@ public class ExamSummaryJob extends QuartzJobBean {
                 TBOrg tbOrg = themisCacheService.addOrgCache(examCacheBean.getOrgId());
                 orgExamIdMap.add(tbOrg.getId(), examId);
 
-                Map<String, List<String>> map = themisCacheService.getTodayExamListCache(entry.getKey());
-                if (!CollectionUtils.isEmpty(map)) {
-                    map.forEach((k, v) -> {
-                        if (!CollectionUtils.isEmpty(v)) {
-                            for (String s : v) {
-                                JSONObject jsonObject = JSONObject.parseObject(s);
-                                Long examActivityId = jsonObject.getLong(SystemConstant.EXAM_ACTIVITY_ID);
-                                String roomCodeStr = jsonObject.getString(SystemConstant.ROOM_CODE_SET);
-                                roomCodeStr = roomCodeStr.replaceAll("\\[", "").replaceAll("\\]", "");
-                                String[] strs = roomCodeStr.split(", ");
-                                Set<String> roomCodeSet = new HashSet<>(Arrays.asList(strs));
-                                //换算开始时间和结束时间
-                                Long startTime = null, endTime = null;
-                                ExamActivityCacheBean ac = teExamActivityService.getExamActivityCacheBean(examActivityId);
-                                if (ExamModeEnum.ANYTIME.equals(examCacheBean.getMode())) {
-                                    startTime = ac.getStartTime() - (ac.getPrepareSeconds() * 1000);
-                                    endTime = ac.getFinishTime();
-                                    endTime = endTime + SystemConstant.FINISH_DELAY_TIME;//额外加5分钟,有可能后台交卷未完成
-                                } else {
-                                    startTime = ac.getStartTime() - (ac.getPrepareSeconds() * 1000);
-                                    Integer openingSecondsTemp = ac.getOpeningSeconds();
-                                    openingSecondsTemp = Objects.nonNull(openingSecondsTemp) && openingSecondsTemp.intValue() == 0 ? SystemConstant.DEFAULT_OPENING_SECONDS : openingSecondsTemp;
-                                    endTime = ac.getStartTime() + (openingSecondsTemp * 1000);
-                                    endTime = endTime + SystemConstant.FINISH_DELAY_TIME;//额外加5分钟,有可能后台交卷未完成
-                                }
-                                long timestamp = System.currentTimeMillis();
-                                //当考试场次开始时间和场次结束时间在范围内,则统计,否则删除考试批次缓存列表,考试批次统计缓存信息
-                                if (ac.getEnable().intValue() == 1 && startTime <= timestamp && endTime >= timestamp) {
-                                    teExamSummaryService.examSummary(examId, examActivityId, roomCodeSet);
-                                    teRegionSummaryService.regionSummary();
-                                } else {
-                                    themisCacheService.removeTodayExamListCache(entry.getKey(), examActivityId);
-                                }
-                            }
-                        } else {
-                            themisCacheService.removeTodayExamListCache(entry.getKey());
+                List<ExamListBean> examListBeanList = themisCacheService.getTodayExamListCache(entry.getKey());
+                if (!CollectionUtils.isEmpty(examListBeanList)) {
+                    for (ExamListBean e : examListBeanList) {
+                        Set<String> roomCodeSet = new HashSet<>(Arrays.asList(e.getRoomCode().split(", ")));
+                        //换算开始时间和结束时间
+                        ExamActivityCacheBean ac = teExamActivityService.getExamActivityCacheBean(e.getExamActivityId());
+                        Long startTime = ac.getStartTime() - (ac.getPrepareSeconds() * 1000), endTime = ac.getFinishTime() + SystemConstant.FINISH_DELAY_TIME;
+                        log.info("examId:{},examActivityId:{},startTime:{},end:{}", examId, e.getExamActivityId(), DateUtil.format(new Date(startTime), "yyyy-MM-dd HH:mm:ss"), DateUtil.format(new Date(endTime), "yyyy-MM-dd HH:mm:ss"));
+                        long timestamp = System.currentTimeMillis();
+                        //当考试场次开始时间和场次结束时间在范围内,则统计,否则删除考试批次缓存列表,考试批次统计缓存信息
+                        if (ac.getEnable().intValue() == 1 && startTime <= timestamp && endTime >= timestamp) {
+                            teExamSummaryService.examSummary(examId, e.getExamActivityId(), roomCodeSet);
+                            teRegionSummaryService.regionSummary();
                         }
-                    });
+                    }
+                } else {
+                    themisCacheService.removeTodayExamListCache(entry.getKey());
                 }
             }
             //统计机构信息

+ 10 - 16
themis-task/src/main/java/com/qmth/themis/task/quartz/MqActivityJob.java

@@ -1,7 +1,7 @@
 package com.qmth.themis.task.quartz;
 
-import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.qmth.themis.business.bean.admin.ExamListBean;
 import com.qmth.themis.business.cache.bean.ExamActivityCacheBean;
 import com.qmth.themis.business.cache.bean.ExamCacheBean;
 import com.qmth.themis.business.cache.bean.ExamStudentCacheBean;
@@ -65,29 +65,23 @@ public class MqActivityJob extends QuartzJobBean {
         log.info("mq_activity_job进来了,context:{}", context);
         themisCacheService.setTodayExamCache();
         //每天凌晨清理考试缓存数据
-        Map<String, List<String>> examListMap = redisUtil.getHashEntries(SystemConstant.TODAY_EXAM_LIST_MAP_CACHE);
+        Map<String, List<ExamListBean>> examListMap = redisUtil.getHashEntries(SystemConstant.TODAY_EXAM_LIST_MAP_CACHE);
         if (!CollectionUtils.isEmpty(examListMap)) {
-            for (Map.Entry<String, List<String>> entry : examListMap.entrySet()) {
+            for (Map.Entry<String, List<ExamListBean>> entry : examListMap.entrySet()) {
                 Long examId = Long.parseLong(entry.getKey());
                 ExamCacheBean examCacheBean = teExamService.getExamCacheBean(examId);
                 if (examCacheBean.getEnable().intValue() == 0 || examCacheBean.getEndTime().longValue() <= System.currentTimeMillis()) {
                     themisCacheService.removeTodayExamListCache(entry.getKey());
                     continue;
                 }
-                Map<String, List<String>> map = themisCacheService.getTodayExamListCache(entry.getKey());
-                if (!CollectionUtils.isEmpty(map)) {
-                    map.forEach((k, v) -> {
-                        if (!CollectionUtils.isEmpty(v)) {
-                            for (String s : v) {
-                                JSONObject jsonObject = JSONObject.parseObject(s);
-                                Long examActivityId = jsonObject.getLong(SystemConstant.EXAM_ACTIVITY_ID);
-                                ExamActivityCacheBean examActivityCacheBean = teExamActivityService.getExamActivityCacheBean(examActivityId);
-                                if (examActivityCacheBean.getEnable().intValue() == 0 || examActivityCacheBean.getFinishTime().longValue() <= System.currentTimeMillis()) {
-                                    themisCacheService.removeTodayExamListCache(entry.getKey(), examActivityId);
-                                }
-                            }
+                List<ExamListBean> examListBeanList = themisCacheService.getTodayExamListCache(entry.getKey());
+                if (!CollectionUtils.isEmpty(examListBeanList)) {
+                    for (ExamListBean e : examListBeanList) {
+                        ExamActivityCacheBean examActivityCacheBean = teExamActivityService.getExamActivityCacheBean(e.getExamActivityId());
+                        if (examActivityCacheBean.getEnable().intValue() == 0 || examActivityCacheBean.getFinishTime().longValue() <= System.currentTimeMillis()) {
+                            themisCacheService.removeTodayExamListCache(entry.getKey(), e.getExamActivityId());
                         }
-                    });
+                    }
                 } else {
                     themisCacheService.removeTodayExamListCache(entry.getKey());
                 }