Ver código fonte

Merge branch 'dev_v1.1.1' into release_v1.1.1
merge

wangliang 3 anos atrás
pai
commit
a7bdc206a5

+ 2 - 2
themis-business/src/main/java/com/qmth/themis/business/dto/response/TEExamActivityDto.java

@@ -181,7 +181,7 @@ public class TEExamActivityDto implements Serializable {
             monitorRecord = ExamRecordCacheUtil.getMonitorRecord(recordId);
         } else {
             startTime = examActivityCacheBean.getStartTime();
-            endTime = ec.getEndTime();
+            endTime = examActivityCacheBean.getFinishTime();
             openingSeconds = examActivityCacheBean.getOpeningSeconds();
             minDurationSeconds = ec.getMinDurationSeconds();
             maxDurationSeconds = examActivityCacheBean.getMaxDurationSeconds();
@@ -221,7 +221,7 @@ public class TEExamActivityDto implements Serializable {
         if (Objects.equals(ec.getMode(), ExamModeEnum.ANYTIME) || (Objects.equals(ec.getMode(), ExamModeEnum.TOGETHER) && forceFinish == 0)) {
             this.maxFinishTime = null;
         } else {
-            this.maxFinishTime = Objects.nonNull(endTime) ? endTime : ec.getEndTime();
+            this.maxFinishTime = Objects.nonNull(endTime) ? endTime : examActivityCacheBean.getFinishTime();
         }
         this.cameraPhotoUpload = cameraPhotoUpload;
         this.entryAuthenticationPolicy = entryAuthenticationPolicy;

+ 1 - 1
themis-business/src/main/java/com/qmth/themis/business/dto/response/TEExamActivityWaitDto.java

@@ -167,7 +167,7 @@ public class TEExamActivityWaitDto implements Serializable {
         if (Objects.equals(ec.getMode(), ExamModeEnum.ANYTIME) || (Objects.equals(ec.getMode(), ExamModeEnum.TOGETHER) && forceFinish == 0)) {
             this.maxFinishTime = null;
         } else {
-            this.maxFinishTime = Objects.nonNull(endTime) ? endTime : ec.getEndTime();
+            this.maxFinishTime = Objects.nonNull(endTime) ? endTime : examActivityCacheBean.getFinishTime();
         }
 //        this.cameraPhotoUpload = ec.getCameraPhotoUpload();
 //        this.entryAuthenticationPolicy = ec.getEntryAuthenticationPolicy().name();

+ 1 - 7
themis-business/src/main/java/com/qmth/themis/business/templete/impl/TaskExamPaperImportTemplete.java

@@ -577,16 +577,10 @@ public class TaskExamPaperImportTemplete implements TaskImportTemplete {
             if (courseDir.isDirectory()) {
                 String courseCode = courseDir.getName();
                 TEExamCourse course = teExamCourseService.findByExamIdAndCourseCode(examId, courseCode);
-                if (course == null) {
+                if (course == null || !Objects.equals(course.getCourseCode(), courseCode)) {
                     addResult(result, "科目编码不存在 " + courseCode);
                     hasErr = true;
                     continue;
-                } else {
-                    if (!Objects.equals(course.getCourseCode(), courseCode)) {
-                        addResult(result, "科目编码不存在 " + courseCode);
-                        hasErr = true;
-                        continue;
-                    }
                 }
                 File[] childs = courseDir.listFiles();
                 if (childs == null || childs.length == 0) {

+ 17 - 17
themis-exam/src/main/java/com/qmth/themis/exam/config/ExamConstant.java

@@ -37,34 +37,34 @@ public class ExamConstant {
     public static void sendExamStopMsg(Long recordId, boolean clientStop, boolean mobileStop) throws NoSuchAlgorithmException {
         MqUtil mqUtil = SpringContextHolder.getBean(MqUtil.class);
         MqDtoService mqDtoService = SpringContextHolder.getBean(MqDtoService.class);
-        TEExamStudentService teExamStudentService = SpringContextHolder.getBean(TEExamStudentService.class);
-        TOeExamRecordService tOeExamRecordService = SpringContextHolder.getBean(TOeExamRecordService.class);
+//        TEExamStudentService teExamStudentService = SpringContextHolder.getBean(TEExamStudentService.class);
+//        TOeExamRecordService tOeExamRecordService = SpringContextHolder.getBean(TOeExamRecordService.class);
         Map<String, Object> mapParameter = new HashMap<>();
         mapParameter.put(SystemConstant.RECORD_ID, recordId);
-        mapParameter.put(SystemConstant.REMOVE_WEBSOCKET, true);
+//        mapParameter.put(SystemConstant.REMOVE_WEBSOCKET, true);
         //客户端考试结束
         if (clientStop) {
             MqDto mqDto = new MqDto(mqUtil.getMqGroupDomain().getTopic(), MqTagEnum.OE_WEBSOCKET_EXAM_STOP.name(), recordId, MqTagEnum.OE_WEBSOCKET_EXAM_STOP, String.valueOf(recordId), mapParameter, String.valueOf(recordId));
             mqDtoService.assembleSendOneOrderMsg(mqDto);
-        } else {//结束推流状态
-            SystemConstant.clientMonitorStatusStop(recordId);
-            TOeExamRecordService toeExamRecordService = SpringContextHolder.getBean(TOeExamRecordService.class);
-            toeExamRecordService.sendExamRecordDataSaveMq(recordId, System.currentTimeMillis());
         }
+//        else {//结束推流状态
+////            SystemConstant.clientMonitorStatusStop(recordId);
+//            TOeExamRecordService toeExamRecordService = SpringContextHolder.getBean(TOeExamRecordService.class);
+//            toeExamRecordService.sendExamRecordDataSaveMq(recordId, System.currentTimeMillis());
+//        }
         //移动端考试结束
         if (mobileStop) {
-            Long examStudentId = ExamRecordCacheUtil.getExamStudentId(recordId);
-            if (Objects.isNull(examStudentId)) {
-                TOeExamRecord tOeExamRecord = tOeExamRecordService.getById(recordId);
-                Optional.ofNullable(tOeExamRecord).orElseThrow(() -> new BusinessException(ExceptionResultEnum.NOT_FOUND_EXAM_RECORD));
-                examStudentId = tOeExamRecord.getExamStudentId();
-            }
-            ExamStudentCacheBean examStudentCacheBean = teExamStudentService.getExamStudentCacheBean(examStudentId);
-            Optional.ofNullable(examStudentCacheBean).orElseThrow(() -> new BusinessException("考生数据为空"));
-
+//            Long examStudentId = ExamRecordCacheUtil.getExamStudentId(recordId);
+//            if (Objects.isNull(examStudentId)) {
+//                TOeExamRecord tOeExamRecord = tOeExamRecordService.getById(recordId);
+//                Optional.ofNullable(tOeExamRecord).orElseThrow(() -> new BusinessException(ExceptionResultEnum.NOT_FOUND_EXAM_RECORD));
+//                examStudentId = tOeExamRecord.getExamStudentId();
+//            }
+//            ExamStudentCacheBean examStudentCacheBean = teExamStudentService.getExamStudentCacheBean(examStudentId);
+//            Optional.ofNullable(examStudentCacheBean).orElseThrow(() -> new BusinessException("考生数据为空"));
             MqDto mqDto = new MqDto(mqUtil.getMqGroupDomain().getTopic(), MqTagEnum.EXAM_STOP.name(), recordId, MqTagEnum.EXAM_STOP, String.valueOf(recordId), mapParameter, String.valueOf(recordId));
             mqDtoService.assembleSendOneOrderMsg(mqDto);
-            SystemConstant.mobileMonitorStatusStop(examStudentCacheBean.getStudentId(), recordId, false);
+//            SystemConstant.mobileMonitorStatusStop(examStudentCacheBean.getStudentId(), recordId, false);
         }
     }
 

+ 19 - 27
themis-exam/src/main/java/com/qmth/themis/exam/listener/service/impl/MqOeLogicServiceImpl.java

@@ -70,7 +70,6 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
         Gson gson = new Gson();
         ConcurrentHashMap<String, WebSocketOeServer> webSocketMap = WebSocketOeServer.getWebSocketMap();
         String tag = mqDto.getTag();
-//        AtomicBoolean match = new AtomicBoolean(false);
         if (Objects.equals(MqTagEnum.OE_MONITOR_FINISH.name(), tag)) {//强制离线交卷
             Set examRecordId = JacksonUtil.readJson(String.valueOf(mqDto.getBody()), Set.class);
             examRecordId.forEach(s -> {
@@ -87,7 +86,6 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
                             && !Objects.equals(ExamRecordStatusEnum.FINISHED, examRecordStatusEnum))
                             && Objects.nonNull(webSocketOeServer.getRecordId())
                             && webSocketOeServer.getRecordId().longValue() == recordId.longValue()) {
-//                        match.set(true);
                         Map map = new HashMap<>();
                         map.put("form", mqDto.getObjName());
                         map.put(SystemConstant.RECORD_ID, recordId);
@@ -114,7 +112,6 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
                             && !Objects.equals(ExamRecordStatusEnum.FINISHED, examRecordStatusEnum))
                             && Objects.nonNull(webSocketOeServer.getRecordId())
                             && webSocketOeServer.getRecordId().longValue() == recordId.longValue()) {
-//                        match.set(true);
                         Map map = new HashMap<>();
                         map.put(SystemConstant.RECORD_ID, recordId);
                         map.put(SystemConstant.BREACH_STATUS, FinishTypeEnum.valueOf(String.valueOf(mqDto.getProperties().get("type"))).getCode());
@@ -139,7 +136,6 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
                         && !Objects.equals(ExamRecordStatusEnum.FINISHED, examRecordStatusEnum))
                         && Objects.nonNull(webSocketOeServer.getRecordId())
                         && webSocketOeServer.getRecordId().longValue() == recordId.longValue()) {
-//                    match.set(true);
                     Map<String, Object> prop = mqDto.getProperties();
                     Map map = new HashMap<>();
                     map.put(SystemConstant.RECORD_ID, recordId);
@@ -169,7 +165,6 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
                         && !Objects.equals(ExamRecordStatusEnum.FINISHED, examRecordStatusEnum))
                         && Objects.nonNull(webSocketOeServer.getRecordId())
                         && webSocketOeServer.getRecordId().longValue() == recordId.longValue()) {
-//                    match.set(true);
                     Map map = new HashMap<>();
                     map.put(SystemConstant.RECORD_ID, recordId);
                     WebsocketDto websocketDto = new WebsocketDto(WebsocketTypeEnum.INVIGILATE_LIVENESS_VERIFY.name(), map);
@@ -193,7 +188,6 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
                 if (Objects.nonNull(examRecordStatusEnum)
                         && Objects.nonNull(webSocketOeServer.getRecordId())
                         && webSocketOeServer.getRecordId().longValue() == recordId.longValue()) {
-//                    match.set(true);
                     WebsocketDto websocketDto = null;
                     switch (tag.toUpperCase()) {
                         case "OE_WEBSOCKET_MOBILE_ANSWER_READY":
@@ -231,26 +225,26 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
                                     && Objects.nonNull(monitorStatusBean.getTimestamp())
                                     && mqDto.getTimestamp().longValue() >= monitorStatusBean.getTimestamp().longValue()) {
                                 websocketDto = new WebsocketDto(WebsocketTypeEnum.MOBILE_MONITOR_STOP.name(), prop);
-                                ConcurrentHashMap<String, WebSocketMobileServer> webSocketMobileMap = WebSocketMobileServer.getWebSocketMap();
-
-                                String mobileWebsocketId = null;
-//                                WebsocketStatusEnum websocketStatusEnum = null;
-                                if (source == MonitorVideoSourceEnum.MOBILE_FIRST) {
-                                    mobileWebsocketId = ExamRecordCacheUtil.getMobileFirstWebsocketId(recordId);
-//                                    websocketStatusEnum = ExamRecordCacheUtil.getMobileFirstWebsocketStatus(recordId);
-                                } else if (source == MonitorVideoSourceEnum.MOBILE_SECOND) {
-                                    mobileWebsocketId = ExamRecordCacheUtil.getMobileSecondWebsocketId(recordId);
-//                                    websocketStatusEnum = ExamRecordCacheUtil.getMobileSecondWebsocketStatus(recordId);
-                                }
-//                                if (Objects.nonNull(websocketStatusEnum) && websocketStatusEnum == WebsocketStatusEnum.ON_LINE) {
-                                WebSocketMobileServer webSocketMobileServer = webSocketMobileMap.get(mobileWebsocketId + "-" + source.name());
-                                Long examStudentId = ExamRecordCacheUtil.getExamStudentId(recordId);
-                                ExamStudentCacheBean examStudentCacheBean = teExamStudentService.getExamStudentCacheBean(examStudentId);
-                                Optional.ofNullable(examStudentCacheBean).orElseThrow(() -> new BusinessException("考生数据为空"));
-
-                                SystemConstant.mobileMonitorStatusStop(examStudentCacheBean.getStudentId(), recordId, true);
-                                WebSocketMobileServer.close(webSocketMobileServer);
+//                                ConcurrentHashMap<String, WebSocketMobileServer> webSocketMobileMap = WebSocketMobileServer.getWebSocketMap();
+//
+//                                String mobileWebsocketId = null;
+////                                WebsocketStatusEnum websocketStatusEnum = null;
+//                                if (source == MonitorVideoSourceEnum.MOBILE_FIRST) {
+//                                    mobileWebsocketId = ExamRecordCacheUtil.getMobileFirstWebsocketId(recordId);
+////                                    websocketStatusEnum = ExamRecordCacheUtil.getMobileFirstWebsocketStatus(recordId);
+//                                } else if (source == MonitorVideoSourceEnum.MOBILE_SECOND) {
+//                                    mobileWebsocketId = ExamRecordCacheUtil.getMobileSecondWebsocketId(recordId);
+////                                    websocketStatusEnum = ExamRecordCacheUtil.getMobileSecondWebsocketStatus(recordId);
 //                                }
+////                                if (Objects.nonNull(websocketStatusEnum) && websocketStatusEnum == WebsocketStatusEnum.ON_LINE) {
+//                                WebSocketMobileServer webSocketMobileServer = webSocketMobileMap.get(mobileWebsocketId + "-" + source.name());
+//                                Long examStudentId = ExamRecordCacheUtil.getExamStudentId(recordId);
+//                                ExamStudentCacheBean examStudentCacheBean = teExamStudentService.getExamStudentCacheBean(examStudentId);
+//                                Optional.ofNullable(examStudentCacheBean).orElseThrow(() -> new BusinessException("考生数据为空"));
+//
+//                                SystemConstant.mobileMonitorStatusStop(examStudentCacheBean.getStudentId(), recordId, true);
+//                                WebSocketMobileServer.close(webSocketMobileServer);
+////                                }
                             }
                             break;
                         case "OE_WEBSOCKET_MOBILE_MONITOR_STATUS":
@@ -274,13 +268,11 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
                 }
             }
         }
-//        if (match.get()) {
         mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);
         TMRocketMessage tmRocketMessage = gson.fromJson(gson.toJson(mqDto), TMRocketMessage.class);
         tmRocketMessage.setBody(JacksonUtil.parseJson(tmRocketMessage.getBody()));
         tmRocketMessageService.saveOrUpdate(tmRocketMessage);
         redisUtil.delete(key, mqDto.getId());
-//        }
     }
 
     /**

+ 18 - 0
themis-exam/src/main/java/com/qmth/themis/exam/websocket/WebSocketMobileServer.java

@@ -8,6 +8,7 @@ import com.qmth.themis.business.constant.SystemConstant;
 import com.qmth.themis.business.dto.MqDto;
 import com.qmth.themis.business.dto.WebsocketDto;
 import com.qmth.themis.business.entity.TBSession;
+import com.qmth.themis.business.entity.TOeExamRecord;
 import com.qmth.themis.business.enums.*;
 import com.qmth.themis.business.service.MqDtoService;
 import com.qmth.themis.business.service.TOeExamRecordService;
@@ -141,10 +142,27 @@ public class WebSocketMobileServer implements Concurrently {
                 log.info("onMessage:{}", jsonObject.toJSONString());
                 if (Objects.nonNull(jsonObject)) {
                     WebSocketMobileMessageTemplete webSocketMobileMessageTemplete = SpringContextHolder.getBean(WebSocketMobileMessageTemplete.class);
+                    TOeExamRecordService tOeExamRecordService = SpringContextHolder.getBean(TOeExamRecordService.class);
+                    MqUtil mqUtil = SpringContextHolder.getBean(MqUtil.class);
+                    MqDtoService mqDtoService = SpringContextHolder.getBean(MqDtoService.class);
+
                     Gson gson = new Gson();
                     WebsocketDto websocketDto = gson.fromJson(gson.toJson(jsonObject), WebsocketDto.class);
                     jsonObject.getJSONObject("body").put("recordId", this.recordId);
                     websocketDto.setBody(jsonObject.getJSONObject("body"));
+                    //2022.04.13 补发exam_stop消息
+                    ExamRecordStatusEnum statusEnum = ExamRecordCacheUtil.getStatus(this.recordId);
+                    if (Objects.isNull(statusEnum)) {
+                        TOeExamRecord tOeExamRecord = tOeExamRecordService.getById(this.recordId);
+                        statusEnum = tOeExamRecord.getStatus();
+                    }
+                    if (Objects.nonNull(statusEnum) && (statusEnum == ExamRecordStatusEnum.FINISHED ||
+                            statusEnum == ExamRecordStatusEnum.PERSISTED)) {
+                        Map<String, Object> properties = new HashMap<>();
+                        properties.put(SystemConstant.REMOVE_WEBSOCKET, true);
+                        MqDto mobileMqDto = new MqDto(mqUtil.getMqGroupDomain().getTopic(), MqTagEnum.EXAM_STOP.name(), recordId, MqTagEnum.EXAM_STOP, String.valueOf(recordId), properties, String.valueOf(recordId));
+                        mqDtoService.assembleSendOneOrderMsg(mobileMqDto);
+                    }
                     Method method = webSocketMobileMessageTemplete.getClass().getDeclaredMethod(WebsocketTypeEnum.valueOf(websocketDto.getType()).getDesc(), String.class, Long.class);
                     WebsocketDto result = (WebsocketDto) method.invoke(webSocketMobileMessageTemplete, String.valueOf(websocketDto.getBody()), websocketDto.getTime());
                     this.sendMessage(result);

+ 14 - 23
themis-mq/src/main/java/com/qmth/themis/mq/service/impl/MqLogicServiceImpl.java

@@ -4,7 +4,6 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
-import com.google.common.collect.Sets;
 import com.google.gson.Gson;
 import com.qmth.themis.business.cache.ExamRecordCacheUtil;
 import com.qmth.themis.business.cache.RedisKeyHelper;
@@ -13,7 +12,6 @@ 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.dto.WarningDto;
-import com.qmth.themis.business.dto.cache.TEStudentCacheDto;
 import com.qmth.themis.business.entity.*;
 import com.qmth.themis.business.enums.*;
 import com.qmth.themis.business.service.*;
@@ -23,7 +21,6 @@ import com.qmth.themis.business.templete.impl.*;
 import com.qmth.themis.business.util.*;
 import com.qmth.themis.common.contanst.Constants;
 import com.qmth.themis.common.enums.ExceptionResultEnum;
-import com.qmth.themis.common.enums.Source;
 import com.qmth.themis.common.exception.BusinessException;
 import com.qmth.themis.common.util.SimpleBeanUtil;
 import com.qmth.themis.mq.service.MqLogicService;
@@ -120,9 +117,6 @@ public class MqLogicServiceImpl implements MqLogicService {
     @Resource
     MqUtil mqUtil;
 
-    @Resource
-    CacheService cacheService;
-
     @Resource
     TencentYunUtil tencentYunUtil;
 
@@ -132,9 +126,6 @@ public class MqLogicServiceImpl implements MqLogicService {
     @Resource
     MonitorUtil monitorUtil;
 
-    @Resource
-    OssUtil ossUtil;
-
     @Resource
     TOeExamRecordService tOeExamRecordService;
 
@@ -287,7 +278,6 @@ public class MqLogicServiceImpl implements MqLogicService {
     @Transactional
     public void execMqWebsocketUnNormalLogic(MqDto mqDto, String key) throws NoSuchAlgorithmException {
         Gson gson = new Gson();
-        mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);//表示成功处理
         Map<String, Object> tranMap = mqDto.getProperties();
         Long recordId = Long.parseLong(String.valueOf(tranMap.get("recordId")));
         ExamRecordStatusEnum status = ExamRecordCacheUtil.getStatus(recordId);
@@ -309,16 +299,17 @@ public class MqLogicServiceImpl implements MqLogicService {
             //2022/03/28加入更新移动端第一、第二机位推流状态
             examRecordService.sendExamRecordDataSaveMq(recordId, System.currentTimeMillis());
 
-            Map<String, Object> properties = new HashMap<>();
-            properties.put(SystemConstant.REMOVE_WEBSOCKET, true);
+//            Map<String, Object> properties = new HashMap<>();
+//            properties.put(SystemConstant.REMOVE_WEBSOCKET, true);
             //发送移动端监考退出考试mq消息 start
-            MqDto mqDtoExamStop = new MqDto(mqUtil.getMqGroupDomain().getTopic(), MqTagEnum.EXAM_STOP.name(), recordId,
-                    MqTagEnum.EXAM_STOP, String.valueOf(recordId), properties, String.valueOf(recordId));
-            mqDtoService.assembleSendOneOrderMsg(mqDtoExamStop);
+//            MqDto mqDtoExamStop = new MqDto(mqUtil.getMqGroupDomain().getTopic(), MqTagEnum.EXAM_STOP.name(), recordId,
+//                    MqTagEnum.EXAM_STOP, String.valueOf(recordId), String.valueOf(recordId));
+//            mqDtoService.assembleSendOneOrderMsg(mqDtoExamStop);
 
-            SystemConstant.mobileMonitorStatusStop(examStudentCacheBean.getStudentId(), recordId, true);
+//            SystemConstant.mobileMonitorStatusStop(examStudentCacheBean.getStudentId(), recordId, true);
             //发送移动端监考退出考试mq消息 end
         }
+        mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);//表示成功处理
         TMRocketMessage tmRocketMessage = gson.fromJson(gson.toJson(mqDto), TMRocketMessage.class);
         tmRocketMessage.setBody(JacksonUtil.parseJson(tmRocketMessage.getBody()));
         tmRocketMessageService.saveOrUpdate(tmRocketMessage);
@@ -973,16 +964,16 @@ public class MqLogicServiceImpl implements MqLogicService {
         SystemConstant.clientMonitorStatusStop(recordId);
         examRecordService.sendExamRecordDataSaveMq(recordId, System.currentTimeMillis());
 
-        Map<String, Object> properties = new HashMap<>();
-        properties.put(SystemConstant.REMOVE_WEBSOCKET, true);
+//        Map<String, Object> properties = new HashMap<>();
+//        properties.put(SystemConstant.REMOVE_WEBSOCKET, true);
         //发送移动端监考退出考试mq消息 start
-        MqDto mqDtoExamStop = new MqDto(mqUtil.getMqGroupDomain().getTopic(), MqTagEnum.EXAM_STOP.name(), recordId,
-                MqTagEnum.EXAM_STOP, String.valueOf(recordId), properties, String.valueOf(recordId));
-        mqDtoService.assembleSendOneOrderMsg(mqDtoExamStop);
+//        MqDto mqDtoExamStop = new MqDto(mqUtil.getMqGroupDomain().getTopic(), MqTagEnum.EXAM_STOP.name(), recordId,
+//                MqTagEnum.EXAM_STOP, String.valueOf(recordId), String.valueOf(recordId));
+//        mqDtoService.assembleSendOneOrderMsg(mqDtoExamStop);
         //发送移动端监考退出考试mq消息 end
 
         //更新移动端第一机位推流状态为stop
-        SystemConstant.mobileMonitorStatusStop(examStudentCacheBean.getStudentId(), recordId, true);
+//        SystemConstant.mobileMonitorStatusStop(examStudentCacheBean.getStudentId(), recordId, true);
 
         Gson gson = new Gson();
         mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);
@@ -1002,7 +993,6 @@ public class MqLogicServiceImpl implements MqLogicService {
     @Transactional
     public void execMqExamBreakDelayLogic(MqDto mqDto, String key) {
         Gson gson = new Gson();
-        mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);//表示成功处理
         Map<String, Object> tranMap = mqDto.getProperties();
         Long recordId = Long.parseLong(String.valueOf(tranMap.get("recordId")));
         ExamRecordStatusEnum statusEnum = ExamRecordCacheUtil.getStatus(recordId);
@@ -1012,6 +1002,7 @@ public class MqLogicServiceImpl implements MqLogicService {
                 .equals(statusEnum, ExamRecordStatusEnum.RESUME_PREPARE)) {
             examRecordService.examBreakLogic(recordId, false);
         }
+        mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);//表示成功处理
         TMRocketMessage tmRocketMessage = gson.fromJson(gson.toJson(mqDto), TMRocketMessage.class);
         tmRocketMessage.setBody(JacksonUtil.parseJson(tmRocketMessage.getBody()));
         tmRocketMessageService.saveOrUpdate(tmRocketMessage);

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

@@ -76,7 +76,6 @@ public class MqTaskLogicServiceImpl implements MqTaskLogicService {
         Object o = JacksonUtil.parseJson(tranMap.get("exam"));
         String tag = mqDto.getTag();
         TEExam teExam = JSONObject.toJavaObject(JSONObject.parseObject(String.valueOf(o)), TEExam.class);
-        mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);
         if (Objects.equals(tag, MqTagEnum.EXAM_ACTIVITY.name())) {
             JSONArray jsonArray = (JSONArray) JSONArray.parse(String.valueOf(mqDto.getBody()));
             for (int i = 0; i < jsonArray.size(); i++) {
@@ -99,6 +98,7 @@ public class MqTaskLogicServiceImpl implements MqTaskLogicService {
                 this.setCron(ExamRecordCacheUtil.getExamFinalFinishTime(recordId), examStudentCacheBean.getId() + "-" + recordId, ExamStudentJob.class, QuartzTaskEnum.EXAM_STUDENT_JOB_GROUP_NAME);
             }
         }
+        mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);
         TMRocketMessage tmRocketMessage = gson.fromJson(gson.toJson(mqDto), TMRocketMessage.class);
         tmRocketMessage.setBody(JacksonUtil.parseJson(tmRocketMessage.getBody()));
         tmRocketMessageService.saveOrUpdate(tmRocketMessage);