瀏覽代碼

Merge remote-tracking branch 'origin/dev' into dev

wangliang 4 年之前
父節點
當前提交
a6b0d3b25e

+ 100 - 20
themis-business/src/main/java/com/qmth/themis/business/service/impl/TEExamServiceImpl.java

@@ -1,40 +1,82 @@
 package com.qmth.themis.business.service.impl;
 
+import java.io.IOException;
+import java.io.InputStream;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.UUID;
+
+import javax.annotation.Resource;
+
+import org.apache.commons.codec.digest.DigestUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+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.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.qmth.themis.business.bean.exam.*;
+import com.qmth.themis.business.bean.exam.AnswerSubmitBean;
+import com.qmth.themis.business.bean.exam.AudioLeftPlayCountSubmitBean;
+import com.qmth.themis.business.bean.exam.ExamFileUploadBean;
+import com.qmth.themis.business.bean.exam.ExamFinishBean;
+import com.qmth.themis.business.bean.exam.ExamPrepareBean;
+import com.qmth.themis.business.bean.exam.ExamResultBean;
+import com.qmth.themis.business.bean.exam.ExamResumeBean;
+import com.qmth.themis.business.bean.exam.ExamStartBean;
+import com.qmth.themis.business.bean.exam.StudentPaperStructBean;
 import com.qmth.themis.business.cache.ExamActivityRecordCacheUtil;
 import com.qmth.themis.business.cache.ExamRecordCacheUtil;
 import com.qmth.themis.business.cache.RedisKeyHelper;
-import com.qmth.themis.business.cache.bean.*;
+import com.qmth.themis.business.cache.bean.ExamActivityCacheBean;
+import com.qmth.themis.business.cache.bean.ExamCacheBean;
+import com.qmth.themis.business.cache.bean.ExamCourseCacheBean;
+import com.qmth.themis.business.cache.bean.ExamPaperCacheBean;
+import com.qmth.themis.business.cache.bean.ExamStudentAnswerCacheBean;
+import com.qmth.themis.business.cache.bean.ExamStudentCacheBean;
+import com.qmth.themis.business.cache.bean.ExamStudentPaperStructCacheBean;
 import com.qmth.themis.business.config.SystemConfig;
 import com.qmth.themis.business.dao.TEExamMapper;
+import com.qmth.themis.business.dto.MqDto;
 import com.qmth.themis.business.dto.cache.TEStudentCacheDto;
 import com.qmth.themis.business.dto.response.TEExamActivityDto;
 import com.qmth.themis.business.dto.response.TEExamDto;
 import com.qmth.themis.business.dto.response.TEExamQueryDto;
 import com.qmth.themis.business.entity.TEExam;
 import com.qmth.themis.business.entity.TOeExamRecord;
-import com.qmth.themis.business.enums.*;
-import com.qmth.themis.business.service.*;
+import com.qmth.themis.business.enums.EntryAuthenticationPolicyEnum;
+import com.qmth.themis.business.enums.ExamRecordStatusEnum;
+import com.qmth.themis.business.enums.FinishExamResultEnum;
+import com.qmth.themis.business.enums.FinishTypeEnum;
+import com.qmth.themis.business.enums.HardwareTestEnum;
+import com.qmth.themis.business.enums.InvigilateVerifyEnum;
+import com.qmth.themis.business.enums.MonitorVideoSourceEnum;
+import com.qmth.themis.business.enums.MqEnum;
+import com.qmth.themis.business.enums.MqTagEnum;
+import com.qmth.themis.business.enums.MqTopicEnum;
+import com.qmth.themis.business.enums.ReviewResultEnum;
+import com.qmth.themis.business.service.MqDtoService;
+import com.qmth.themis.business.service.TEExamActivityService;
+import com.qmth.themis.business.service.TEExamCourseService;
+import com.qmth.themis.business.service.TEExamPaperService;
+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.util.OssUtil;
 import com.qmth.themis.business.util.RedisUtil;
 import com.qmth.themis.common.exception.BusinessException;
-import org.apache.commons.codec.digest.DigestUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.BeanUtils;
-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.transaction.annotation.Transactional;
-import org.springframework.web.multipart.MultipartFile;
-
-import javax.annotation.Resource;
-import java.io.IOException;
-import java.io.InputStream;
-import java.text.SimpleDateFormat;
-import java.util.*;
 
 /**
  * @Description: 考试批次 服务实现类
@@ -72,6 +114,9 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
 
     @Resource
     SystemConfig systemConfig;
+    
+    @Resource
+    MqDtoService mqDtoService;
 
     /**
      * 查询考试批次
@@ -418,8 +463,21 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
         ExamRecordCacheUtil.setObjectiveScore(recordId, null);
         AnswerSubmitBean ret = new AnswerSubmitBean();
         ret.setVersion(version);
+        // 发消息计算客观分
+        calculateObjectiveScore(recordId, mainNumber, subNumber, subIndex);
         return ret;
     }
+    private void calculateObjectiveScore(Long recordId, Integer mainNumber, Integer subNumber, Integer subIndex) {
+        Map<String, Object> transMap = new HashMap<String, Object>();
+        transMap.put("recordId", recordId);
+        transMap.put("mainNumber", mainNumber);
+        transMap.put("subNumber", subNumber);
+        transMap.put("subIndex", subIndex);
+        // mq发送消息start
+        MqDto mqDto = new MqDto(MqTopicEnum.themisTopic.getCode(), MqTagEnum.calculateObjectiveScore.name(), transMap,
+                MqEnum.EXAM, recordId.toString(), recordId.toString());
+        mqDtoService.assembleSendOneWayMsg(mqDto);
+    }
 
     /**
      * 更新音频剩余播放次数
@@ -658,9 +716,31 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
         TEStudentCacheDto teStudentCacheDto = (TEStudentCacheDto) redisUtil.getStudent(es.getStudentId());
         teStudentCacheDto.setUnFinishedRecordId(null);
         redisUtil.setStudent(teStudentCacheDto.getId(), teStudentCacheDto);
+        checkToPersisted(recordId);
         return ret;
     }
-
+    /**
+     * 检查条件并发送持久化消息
+     *
+     * @param recordId
+     */
+    private void checkToPersisted(Long recordId) {
+        ExamRecordStatusEnum status = ExamRecordCacheUtil.getStatus(recordId);
+        if (!ExamRecordStatusEnum.FINISHED.equals(status)) {
+            return;
+        }
+        Double score = ExamRecordCacheUtil.getObjectiveScore(recordId);
+        if (score == null) {
+            return;
+        }
+
+        Map<String, Object> transMap = new HashMap<String, Object>();
+        transMap.put("recordId", recordId);
+        // mq发送消息start
+        MqDto mqDto = new MqDto(MqTopicEnum.themisTopic.getCode(), MqTagEnum.examRecordPersisted.name(), transMap,
+                MqEnum.EXAM, recordId.toString(), recordId.toString());
+        mqDtoService.assembleSendOneWayMsg(mqDto);
+    }
     @Cacheable(value = "exam", key = "#examId", unless = "#result == null")
     @Override
     public ExamCacheBean getExamCacheBean(Long examId) {

+ 3 - 48
themis-exam/src/main/java/com/qmth/themis/exam/api/TEExamController.java

@@ -7,8 +7,6 @@ import java.util.Objects;
 
 import javax.annotation.Resource;
 
-import com.qmth.themis.business.annotation.ApiJsonObject;
-import com.qmth.themis.business.annotation.ApiJsonProperty;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
@@ -17,6 +15,8 @@ import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.qmth.themis.business.annotation.ApiJsonObject;
+import com.qmth.themis.business.annotation.ApiJsonProperty;
 import com.qmth.themis.business.bean.exam.AnswerSubmitBean;
 import com.qmth.themis.business.bean.exam.AnswerSubmitParamBean;
 import com.qmth.themis.business.bean.exam.AudioLeftPlayCountSubmitParamBean;
@@ -26,14 +26,11 @@ import com.qmth.themis.business.bean.exam.PrepareParamBean;
 import com.qmth.themis.business.bean.exam.ResultParamBean;
 import com.qmth.themis.business.bean.exam.ResumeParamBean;
 import com.qmth.themis.business.bean.exam.StudentPaperStructParamBean;
-import com.qmth.themis.business.cache.ExamRecordCacheUtil;
 import com.qmth.themis.business.constant.SystemConstant;
 import com.qmth.themis.business.dto.cache.TEStudentCacheDto;
 import com.qmth.themis.business.dto.response.TEExamDto;
 import com.qmth.themis.business.dto.response.TEExamResultDto;
 import com.qmth.themis.business.entity.TEExam;
-import com.qmth.themis.business.enums.ExamRecordStatusEnum;
-import com.qmth.themis.business.enums.MqEnum;
 import com.qmth.themis.business.service.TEExamService;
 import com.qmth.themis.business.util.RedisUtil;
 import com.qmth.themis.business.util.ServletUtil;
@@ -41,10 +38,6 @@ import com.qmth.themis.common.enums.ExceptionResultEnum;
 import com.qmth.themis.common.exception.BusinessException;
 import com.qmth.themis.common.util.Result;
 import com.qmth.themis.common.util.ResultUtil;
-import com.qmth.themis.business.dto.MqDto;
-import com.qmth.themis.business.enums.MqTagEnum;
-import com.qmth.themis.business.enums.MqTopicEnum;
-import com.qmth.themis.business.service.MqDtoService;
 
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -61,8 +54,6 @@ public class TEExamController {
     TEExamService teExamService;
     @Resource
     RedisUtil redisUtil;
-    @Resource
-    MqDtoService mqDtoService;
 
     @ApiOperation(value = "验证考试口令接口")
     @RequestMapping(value = "/short_code", method = RequestMethod.POST)
@@ -186,9 +177,6 @@ public class TEExamController {
         AnswerSubmitBean ret = teExamService.answerSubmit(teStudent.getId(), param.getRecordId(), param.getMainNumber(),
                 param.getSubNumber(), param.getSubIndex(), param.getAnswer(), param.getVersion(),
                 param.getDurationSeconds());
-        // 发消息计算客观分
-        calculateObjectiveScore(param.getRecordId(), param.getMainNumber(), param.getSubNumber(),
-                param.getSubIndex());
         return ResultUtil.ok(ret);
     }
 
@@ -279,24 +267,13 @@ public class TEExamController {
                 throw new BusinessException("总用时秒数不能为空");
             }
             Result re = ResultUtil.ok(teExamService.finish(teStudent.getId(), param.getRecordId(), param.getType(), param.getDurationSeconds()));
-            checkToPersisted(param.getRecordId());
             return re;
         } finally {
             redisUtil.releaseLock(lockKey);
         }
     }
 
-    private void calculateObjectiveScore(Long recordId, Integer mainNumber, Integer subNumber, Integer subIndex) {
-        Map<String, Object> transMap = new HashMap<String, Object>();
-        transMap.put("recordId", recordId);
-        transMap.put("mainNumber", mainNumber);
-        transMap.put("subNumber", subNumber);
-        transMap.put("subIndex", subIndex);
-        // mq发送消息start
-        MqDto mqDto = new MqDto(MqTopicEnum.themisTopic.getCode(), MqTagEnum.calculateObjectiveScore.name(), transMap,
-                MqEnum.EXAM, null, null);
-        mqDtoService.assembleSendOneWayMsg(mqDto);
-    }
+
 
     @ApiOperation(value = "查询交卷结果")
     @RequestMapping(value = "/result", method = RequestMethod.POST)
@@ -308,26 +285,4 @@ public class TEExamController {
         return ResultUtil.ok(teExamService.result(param.getRecordId()));
     }
 
-    /**
-     * 检查条件并发送持久化消息
-     *
-     * @param recordId
-     */
-    private void checkToPersisted(Long recordId) {
-        ExamRecordStatusEnum status = ExamRecordCacheUtil.getStatus(recordId);
-        if (!ExamRecordStatusEnum.FINISHED.equals(status)) {
-            return;
-        }
-        Double score = ExamRecordCacheUtil.getObjectiveScore(recordId);
-        if (score == null) {
-            return;
-        }
-
-        Map<String, Object> transMap = new HashMap<String, Object>();
-        transMap.put("recordId", recordId);
-        // mq发送消息start
-        MqDto mqDto = new MqDto(MqTopicEnum.themisTopic.getCode(), MqTagEnum.examRecordPersisted.name(), transMap,
-                MqEnum.EXAM, null, null);
-        mqDtoService.assembleSendOneWayMsg(mqDto);
-    }
 }

+ 1 - 1
themis-exam/src/main/java/com/qmth/themis/exam/api/TEFaceController.java

@@ -88,7 +88,7 @@ public class TEFaceController {
         transMap.put("time", param.getTime());
         transMap.put("exception", param.getException());
         //mq发送消息start
-        MqDto mqDto = new MqDto(MqTopicEnum.themisTopic.getCode(), MqTagEnum.faceVerifySave.name(), transMap, MqEnum.EXAM, null, null);
+        MqDto mqDto = new MqDto(MqTopicEnum.themisTopic.getCode(), MqTagEnum.faceVerifySave.name(), transMap, MqEnum.EXAM, param.getRecordId().toString(), param.getRecordId().toString());
         mqDtoService.assembleSendOneWayMsg(mqDto);
 		return ResultUtil.ok(ret);
 	}

+ 1 - 1
themis-exam/src/main/java/com/qmth/themis/exam/api/TELivenessController.java

@@ -87,7 +87,7 @@ public class TELivenessController {
 		transMap.put("exception", param.getException());
 		// mq发送消息start
 		MqDto mqDto = new MqDto(MqTopicEnum.themisTopic.getCode(), MqTagEnum.livenessVerifySave.name(), transMap,
-				MqEnum.EXAM, null, null);
+				MqEnum.EXAM, param.getRecordId().toString(), param.getRecordId().toString());
 		mqDtoService.assembleSendOneWayMsg(mqDto);
 		return ResultUtil.ok(ret);
 	}