Jelajahi Sumber

去掉考试语音消息,改用移动端调接口

wangliang 2 tahun lalu
induk
melakukan
2552c722c0

+ 59 - 50
themis-admin/src/main/java/com/qmth/themis/admin/api/TEExamActivityController.java

@@ -1,25 +1,21 @@
 package com.qmth.themis.admin.api;
 
-import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 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.dto.MqDto;
-import com.qmth.themis.business.entity.*;
-import com.qmth.themis.business.enums.AudioTypeEnum;
+import com.qmth.themis.business.entity.TBAttachment;
+import com.qmth.themis.business.entity.TBUser;
+import com.qmth.themis.business.entity.TEAudio;
+import com.qmth.themis.business.entity.TEExamActivity;
 import com.qmth.themis.business.enums.ExamModeEnum;
 import com.qmth.themis.business.enums.MonitorVideoSourceEnum;
-import com.qmth.themis.business.enums.MqTagEnum;
 import com.qmth.themis.business.service.*;
 import com.qmth.themis.business.service.impl.TEExamActivityServiceImpl;
-import com.qmth.themis.business.util.JacksonUtil;
-import com.qmth.themis.business.util.MqUtil;
 import com.qmth.themis.business.util.OssUtil;
 import com.qmth.themis.business.util.ServletUtil;
-import com.qmth.themis.common.contanst.Constants;
 import com.qmth.themis.common.exception.BusinessException;
 import com.qmth.themis.common.util.Result;
 import com.qmth.themis.common.util.ResultUtil;
@@ -36,7 +32,9 @@ import javax.annotation.Resource;
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
 import java.io.File;
-import java.util.*;
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
 
 /**
  * @Description: 考试场次 前端控制器
@@ -70,11 +68,17 @@ public class TEExamActivityController {
     @Resource
     CacheService cacheService;
 
-    @Resource
-    private MqUtil mqUtil;
+//    @Resource
+//    private MqUtil mqUtil;
+//
+//    @Resource
+//    private MqDtoService mqDtoService;
+
+//    @Resource
+//    TBAttachmentService tbAttachmentService;
 
     @Resource
-    private MqDtoService mqDtoService;
+    TOeExamRecordService tOeExamRecordService;
 
     @ApiOperation(value = "考试场次修改/新增接口")
     @RequestMapping(value = "/save", method = RequestMethod.POST)
@@ -151,7 +155,7 @@ public class TEExamActivityController {
             teAudio.updateInfo(tbUser.getId());
         }
         teAudioService.saveOrUpdate(teAudio);
-        teAudioService.sendAudioMessage(teAudio);
+//        teAudioService.sendAudioMessage(teAudio);
         return ResultUtil.ok(true);
     }
 
@@ -164,9 +168,9 @@ public class TEExamActivityController {
         TBUser tbUser = (TBUser) ServletUtil.getRequestAccount();
         TEAudio teAudio = teAudioService.getById(audioId);
         Optional.ofNullable(teAudio).orElseThrow(() -> new BusinessException("语音信息不存在"));
+        ExamActivityCacheBean examActivityCacheBean = teExamActivityService.getExamActivityCacheBean(teAudio.getActivityId());
+        ExamCacheBean examCacheBean = teExamService.getExamCacheBean(examActivityCacheBean.getExamId());
         if (enable) {
-            ExamActivityCacheBean examActivityCacheBean = teExamActivityService.getExamActivityCacheBean(teAudio.getActivityId());
-            ExamCacheBean examCacheBean = teExamService.getExamCacheBean(examActivityCacheBean.getExamId());
             if (Objects.nonNull(examCacheBean) && examCacheBean.getMode() == ExamModeEnum.ANYTIME) {
                 throw new BusinessException("只有集中统一的考试才能使用语音播报");
             }
@@ -177,6 +181,11 @@ public class TEExamActivityController {
                     && !examCacheBean.getMonitorRecord().contains(MonitorVideoSourceEnum.MOBILE_SECOND.name()))) {
                 throw new BusinessException("考试未启用手机直播");
             }
+        } else {
+            Integer examCount = tOeExamRecordService.findByExamIdOrExamActivityIdCount(examCacheBean.getId(), teAudio.getActivityId());
+            if (Objects.nonNull(examCount) && examCount.intValue() > 0) {
+                throw new BusinessException("已有考试记录不能禁用");
+            }
         }
         teAudio.setEnable(enable);
         teAudio.updateInfo(tbUser.getId());
@@ -185,40 +194,40 @@ public class TEExamActivityController {
         return ResultUtil.ok(true);
     }
 
-    @ApiOperation(value = "考试场次语音测试接口")
-    @RequestMapping(value = "/audio/test", method = RequestMethod.POST)
-    @ApiResponses({@ApiResponse(code = 200, message = "常规信息", response = Result.class)})
-    public Result audioTest(@ApiParam(value = "考试场次语音id", required = true) @RequestParam Long audioId) {
-        TEAudio teAudio = teAudioService.getById(audioId);
-        Optional.ofNullable(teAudio).orElseThrow(() -> new BusinessException("语音信息不存在"));
-        ExamActivityCacheBean ac = teExamActivityService.getExamActivityCacheBean(teAudio.getActivityId());
-        ExamCacheBean examCacheBean = teExamService.getExamCacheBean(ac.getExamId());
-        TEExam teExam = teExamService.cacheConvert(examCacheBean);
-//        Long start = ac.getStartTime();
-//        Long end = ac.getStartTime() + (ac.getOpeningSeconds() * 1000);
-        long currentTime = System.currentTimeMillis();
-        Long execTime = null, realExecTime = null;
-        if (teAudio.getType() == AudioTypeEnum.BEFORE) {//开考前语音
-            realExecTime = currentTime + (60 * 1000);//当前时间往后一分钟
-        } else if (teAudio.getType() == AudioTypeEnum.AFTER) {//考试结束前语音
-            realExecTime = currentTime + (120 * 1000);//当前时间往后二分钟
-        }
-        execTime = realExecTime - SystemConstant.EXAM_AUDIO_BEFORE_TIME;
-        //新增quartz任务,发送mq消息start
-        Map<String, Object> prop = new HashMap<>();
-        prop.put(SystemConstant.OPER, SystemConstant.INSERT);
-        prop.put(SystemConstant.EXAM, teExam);
-        prop.put(SystemConstant.EXEC_TIME, execTime);
-        prop.put(SystemConstant.REAL_EXEC_TIME, realExecTime);
-        log.info(SystemConstant.EXEC_TIME + ":{}," + SystemConstant.REAL_EXEC_TIME + ":{}", DateUtil.format(new Date(execTime), Constants.DEFAULT_DATE_PATTERN), DateUtil.format(new Date(realExecTime), Constants.DEFAULT_DATE_PATTERN));
-//        if (execTime >= System.currentTimeMillis()) {
-        cacheService.updateExamAudioCache(teAudio.getId());
-        MqDto mqDto = new MqDto(mqUtil.getMqGroupDomain().getTopic(), MqTagEnum.EXAM_AUDIO.name(),
-                JacksonUtil.parseJson(teAudio), MqTagEnum.EXAM_AUDIO,
-                String.valueOf(teExam.getId()), prop, "test");
-        mqDtoService.assembleSendOneOrderMsg(mqDto);
+//    @ApiOperation(value = "考试场次语音测试接口")
+//    @RequestMapping(value = "/audio/test", method = RequestMethod.POST)
+//    @ApiResponses({@ApiResponse(code = 200, message = "常规信息", response = Result.class)})
+//    public Result audioTest(@ApiParam(value = "考试场次语音id", required = true) @RequestParam Long audioId) {
+//        TEAudio teAudio = teAudioService.getById(audioId);
+//        Optional.ofNullable(teAudio).orElseThrow(() -> new BusinessException("语音信息不存在"));
+//        ExamActivityCacheBean ac = teExamActivityService.getExamActivityCacheBean(teAudio.getActivityId());
+//        ExamCacheBean examCacheBean = teExamService.getExamCacheBean(ac.getExamId());
+//        TEExam teExam = teExamService.cacheConvert(examCacheBean);
+////        Long start = ac.getStartTime();
+////        Long end = ac.getStartTime() + (ac.getOpeningSeconds() * 1000);
+//        long currentTime = System.currentTimeMillis();
+//        Long execTime = null, realExecTime = null;
+//        if (teAudio.getType() == AudioTypeEnum.BEFORE) {//开考前语音
+//            realExecTime = currentTime + (60 * 1000);//当前时间往后一分钟
+//        } else if (teAudio.getType() == AudioTypeEnum.AFTER) {//考试结束前语音
+//            realExecTime = currentTime + (120 * 1000);//当前时间往后二分钟
 //        }
-        //新增quartz任务,发送mq消息end
-        return ResultUtil.ok(true);
-    }
+//        execTime = realExecTime - SystemConstant.EXAM_AUDIO_BEFORE_TIME;
+//        //新增quartz任务,发送mq消息start
+//        Map<String, Object> prop = new HashMap<>();
+//        prop.put(SystemConstant.OPER, SystemConstant.INSERT);
+//        prop.put(SystemConstant.EXAM, teExam);
+//        prop.put(SystemConstant.EXEC_TIME, execTime);
+//        prop.put(SystemConstant.REAL_EXEC_TIME, realExecTime);
+//        log.info(SystemConstant.EXEC_TIME + ":{}," + SystemConstant.REAL_EXEC_TIME + ":{}", DateUtil.format(new Date(execTime), Constants.DEFAULT_DATE_PATTERN), DateUtil.format(new Date(realExecTime), Constants.DEFAULT_DATE_PATTERN));
+////        if (execTime >= System.currentTimeMillis()) {
+//        cacheService.updateExamAudioCache(teAudio.getId());
+//        MqDto mqDto = new MqDto(mqUtil.getMqGroupDomain().getTopic(), MqTagEnum.EXAM_AUDIO.name(),
+//                JacksonUtil.parseJson(teAudio), MqTagEnum.EXAM_AUDIO,
+//                String.valueOf(teExam.getId()), prop, "test");
+//        mqDtoService.assembleSendOneOrderMsg(mqDto);
+////        }
+//        //新增quartz任务,发送mq消息end
+//        return ResultUtil.ok(true);
+//    }
 }

+ 1 - 1
themis-admin/src/main/resources/application-dev.properties

@@ -219,5 +219,5 @@ com.qmth.solar.access-key=8134f6aae0134770b8618913705d3667
 com.qmth.solar.access-secret=s1NENpvc8Jq5evcE0B7GfLmoQOvwmlCy
 
 #\u65E0\u9700\u9274\u6743\u7684url
-no.auth.urls=/webjars/**,/druid/**,/swagger-ui.html,/doc.html,/swagger-resources/**,/v2/api-docs,/webjars/springfox-swagger-ui/**,/api/admin/user/login/account,/api/admin/sys/org/queryByOrgCode,/file/**,/upload/**,/client/**,/base_photo/**,/frontend/**,/api/admin/client/save,/api/admin/client/upload,/api/admin/client/query,/api/admin/app/save,/api/admin/app/query,/api/notify/monitor/record/tencent,/api/notify/monitor/status/tencent,/api/admin/activity/audio/test
+no.auth.urls=/webjars/**,/druid/**,/swagger-ui.html,/doc.html,/swagger-resources/**,/v2/api-docs,/webjars/springfox-swagger-ui/**,/api/admin/user/login/account,/api/admin/sys/org/queryByOrgCode,/file/**,/upload/**,/client/**,/base_photo/**,/frontend/**,/api/admin/client/save,/api/admin/client/upload,/api/admin/client/query,/api/admin/app/save,/api/admin/app/query,/api/notify/monitor/record/tencent,/api/notify/monitor/status/tencent
 common.system.urls=/api/admin/sys/getMenu,/api/admin/user/logout,/api/admin/sys/env,/api/admin/sys/file/upload,/api/admin/sys/file/download,/api/admin/sys/org/query,/api/admin/sys/role/query,/api/admin/sys/examActivity/query,/api/admin/sys/exam/query,/api/admin/sys/examRoom/query,/api/admin/sys/exam/privilegeQuery,/api/admin/student/photo/upload,/api/admin/sys/getPlayUrls,/api/admin/sys/exam/finish/query,/api/admin/sys/get_tencent_video

+ 12 - 0
themis-business/src/main/java/com/qmth/themis/business/entity/TEAudio.java

@@ -70,6 +70,10 @@ public class TEAudio extends BaseEntity implements Serializable {
     @TableField(exist = false)
     private String attachmentName;
 
+    @ApiModelProperty(value = "附件md5")
+    @TableField(exist = false)
+    private String attachmentMd5;
+
     public TEAudio() {
 
     }
@@ -96,6 +100,14 @@ public class TEAudio extends BaseEntity implements Serializable {
         }
     }
 
+    public String getAttachmentMd5() {
+        return attachmentMd5;
+    }
+
+    public void setAttachmentMd5(String attachmentMd5) {
+        this.attachmentMd5 = attachmentMd5;
+    }
+
     public void insertInfo(Long userId) {
         setId(UidUtil.nextId());
         setCreateId(userId);

+ 3 - 3
themis-business/src/main/java/com/qmth/themis/business/enums/MqTagEnum.java

@@ -56,9 +56,9 @@ public enum MqTagEnum {
     OE_WEBSOCKET_MOBILE_MONITOR_STATUS("通知客户端移动端当前监控状态标签", "通知客户端移动端当前监控状态", "broadcast", 48),
     TENCENT_VIDEO("腾讯云视频回调标签", "腾讯云视频回调", "delay", 49),
     MARK_CLOUD_SCORE_PUSH("同步云阅卷成绩任务标签", "同步云阅卷成绩任务", "normal", 50),
-    ONLINE_LOG("考生上下线标签", "考生上下线", "normal", 51),
-    EXAM_AUDIO("考试语音任务标签", "考试语音任务", "normal", 52),
-    EXAM_AUDIO_MOBILE("考试语音移动端任务标签", "考试语音移动端任务", "normal", 53);
+    ONLINE_LOG("考生上下线标签", "考生上下线", "normal", 51);
+//    EXAM_AUDIO("考试语音任务标签", "考试语音任务", "normal", 52),
+//    EXAM_AUDIO_MOBILE("考试语音移动端任务标签", "考试语音移动端任务", "normal", 53);
 
     private MqTagEnum(String desc, String code, String type, int id) {
         this.desc = desc;

+ 6 - 6
themis-business/src/main/java/com/qmth/themis/business/service/TEAudioService.java

@@ -26,10 +26,10 @@ public interface TEAudioService extends IService<TEAudio> {
      */
     IPage<TEAudio> query(IPage<Map> iPage, @Param("activityId") Long activityId);
 
-    /**
-     * 发送语音mq消息
-     *
-     * @param teAudio
-     */
-    public void sendAudioMessage(TEAudio teAudio);
+//    /**
+//     * 发送语音mq消息
+//     *
+//     * @param teAudio
+//     */
+//    public void sendAudioMessage(TEAudio teAudio);
 }

+ 51 - 66
themis-business/src/main/java/com/qmth/themis/business/service/impl/TEAudioServiceImpl.java

@@ -1,30 +1,15 @@
 package com.qmth.themis.business.service.impl;
 
-import cn.hutool.core.date.DateUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-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.dao.TEAudioMapper;
-import com.qmth.themis.business.dto.MqDto;
-import com.qmth.themis.business.entity.TBUser;
 import com.qmth.themis.business.entity.TEAudio;
-import com.qmth.themis.business.entity.TEExam;
-import com.qmth.themis.business.enums.AudioTypeEnum;
-import com.qmth.themis.business.enums.MqTagEnum;
-import com.qmth.themis.business.service.*;
-import com.qmth.themis.business.util.JacksonUtil;
-import com.qmth.themis.business.util.MqUtil;
-import com.qmth.themis.business.util.ServletUtil;
-import com.qmth.themis.common.contanst.Constants;
+import com.qmth.themis.business.service.TEAudioService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
-import java.util.Date;
-import java.util.HashMap;
 import java.util.Map;
 
 /**
@@ -42,20 +27,20 @@ public class TEAudioServiceImpl extends ServiceImpl<TEAudioMapper, TEAudio> impl
     @Resource
     TEAudioMapper teAudioMapper;
 
-    @Resource
-    TEExamActivityService teExamActivityService;
-
-    @Resource
-    TEExamService teExamService;
-
-    @Resource
-    private MqUtil mqUtil;
-
-    @Resource
-    private MqDtoService mqDtoService;
-
-    @Resource
-    CacheService cacheService;
+//    @Resource
+//    TEExamActivityService teExamActivityService;
+//
+//    @Resource
+//    TEExamService teExamService;
+//
+//    @Resource
+//    private MqUtil mqUtil;
+//
+//    @Resource
+//    private MqDtoService mqDtoService;
+//
+//    @Resource
+//    CacheService cacheService;
 
     /**
      * 根据场次id查询音频信息
@@ -69,40 +54,40 @@ public class TEAudioServiceImpl extends ServiceImpl<TEAudioMapper, TEAudio> impl
         return teAudioMapper.query(iPage, activityId);
     }
 
-    /**
-     * 发送语音mq消息
-     *
-     * @param teAudio
-     */
-    @Override
-    public void sendAudioMessage(TEAudio teAudio) {
-        TBUser tbUser = (TBUser) ServletUtil.getRequestAccount();
-        ExamActivityCacheBean ac = teExamActivityService.getExamActivityCacheBean(teAudio.getActivityId());
-        ExamCacheBean examCacheBean = teExamService.getExamCacheBean(ac.getExamId());
-        TEExam teExam = teExamService.cacheConvert(examCacheBean);
-        Long start = ac.getStartTime();
-        Long end = ac.getStartTime() + (ac.getOpeningSeconds() * 1000);
-        Long execTime = null, realExecTime = null;
-        if (teAudio.getType() == AudioTypeEnum.BEFORE) {//开考前语音
-            realExecTime = start - (teAudio.getPlayTime() * 1000);
-        } else if (teAudio.getType() == AudioTypeEnum.AFTER) {//考试结束前语音
-            realExecTime = end - (teAudio.getPlayTime() * 1000);
-        }
-        execTime = realExecTime - SystemConstant.EXAM_AUDIO_BEFORE_TIME;
-        //新增quartz任务,发送mq消息start
-        Map<String, Object> prop = new HashMap<>();
-        prop.put(SystemConstant.OPER, SystemConstant.INSERT);
-        prop.put(SystemConstant.EXAM, teExam);
-        prop.put(SystemConstant.EXEC_TIME, execTime);
-        prop.put(SystemConstant.REAL_EXEC_TIME, realExecTime);
-        log.info(SystemConstant.EXEC_TIME + ":{}," + SystemConstant.REAL_EXEC_TIME + ":{}", DateUtil.format(new Date(execTime), Constants.DEFAULT_DATE_PATTERN), DateUtil.format(new Date(realExecTime), Constants.DEFAULT_DATE_PATTERN));
-        if (execTime >= System.currentTimeMillis()) {
-            cacheService.updateExamAudioCache(teAudio.getId());
-            MqDto mqDto = new MqDto(mqUtil.getMqGroupDomain().getTopic(), MqTagEnum.EXAM_AUDIO.name(),
-                    JacksonUtil.parseJson(teAudio), MqTagEnum.EXAM_AUDIO,
-                    String.valueOf(teExam.getId()), prop, tbUser.getName());
-            mqDtoService.assembleSendOneOrderMsg(mqDto);
-        }
-        //新增quartz任务,发送mq消息end
-    }
+//    /**
+//     * 发送语音mq消息
+//     *
+//     * @param teAudio
+//     */
+//    @Override
+//    public void sendAudioMessage(TEAudio teAudio) {
+//        TBUser tbUser = (TBUser) ServletUtil.getRequestAccount();
+//        ExamActivityCacheBean ac = teExamActivityService.getExamActivityCacheBean(teAudio.getActivityId());
+//        ExamCacheBean examCacheBean = teExamService.getExamCacheBean(ac.getExamId());
+//        TEExam teExam = teExamService.cacheConvert(examCacheBean);
+//        Long start = ac.getStartTime();
+//        Long end = ac.getStartTime() + (ac.getOpeningSeconds() * 1000);
+//        Long execTime = null, realExecTime = null;
+//        if (teAudio.getType() == AudioTypeEnum.BEFORE) {//开考前语音
+//            realExecTime = start - (teAudio.getPlayTime() * 1000);
+//        } else if (teAudio.getType() == AudioTypeEnum.AFTER) {//考试结束前语音
+//            realExecTime = end - (teAudio.getPlayTime() * 1000);
+//        }
+//        execTime = realExecTime - SystemConstant.EXAM_AUDIO_BEFORE_TIME;
+//        //新增quartz任务,发送mq消息start
+//        Map<String, Object> prop = new HashMap<>();
+//        prop.put(SystemConstant.OPER, SystemConstant.INSERT);
+//        prop.put(SystemConstant.EXAM, teExam);
+//        prop.put(SystemConstant.EXEC_TIME, execTime);
+//        prop.put(SystemConstant.REAL_EXEC_TIME, realExecTime);
+//        log.info(SystemConstant.EXEC_TIME + ":{}," + SystemConstant.REAL_EXEC_TIME + ":{}", DateUtil.format(new Date(execTime), Constants.DEFAULT_DATE_PATTERN), DateUtil.format(new Date(realExecTime), Constants.DEFAULT_DATE_PATTERN));
+//        if (execTime >= System.currentTimeMillis()) {
+//            cacheService.updateExamAudioCache(teAudio.getId());
+//            MqDto mqDto = new MqDto(mqUtil.getMqGroupDomain().getTopic(), MqTagEnum.EXAM_AUDIO.name(),
+//                    JacksonUtil.parseJson(teAudio), MqTagEnum.EXAM_AUDIO,
+//                    String.valueOf(teExam.getId()), prop, tbUser.getName());
+//            mqDtoService.assembleSendOneOrderMsg(mqDto);
+//        }
+//        //新增quartz任务,发送mq消息end
+//    }
 }

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

@@ -428,9 +428,9 @@ public class TEExamActivityServiceImpl extends ServiceImpl<TEExamActivityMapper,
 
             if (!CollectionUtils.isEmpty(teAudioList)) {
                 teAudioService.saveOrUpdateBatch(teAudioList);
-                for (TEAudio t : teAudioList) {
-                    teAudioService.sendAudioMessage(t);
-                }
+//                for (TEAudio t : teAudioList) {
+//                    teAudioService.sendAudioMessage(t);
+//                }
             }
             if (size.get() > 0 && (Objects.nonNull(teExam.getForceFinish()) && teExam.getForceFinish().intValue() == 1)) {
                 //新增quartz任务,发送mq消息start

+ 44 - 8
themis-exam/src/main/java/com/qmth/themis/exam/api/TEMobileController.java

@@ -1,5 +1,8 @@
 package com.qmth.themis.exam.api;
 
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qmth.themis.business.bean.exam.AnswerReadyParamBean;
 import com.qmth.themis.business.bean.exam.AnswerReadyResponseBean;
 import com.qmth.themis.business.bean.exam.MobileAnswerSubmitParamBean;
@@ -12,29 +15,27 @@ import com.qmth.themis.business.cache.bean.ExamStudentCacheBean;
 import com.qmth.themis.business.constant.SystemConstant;
 import com.qmth.themis.business.dto.MqDto;
 import com.qmth.themis.business.dto.cache.TEStudentCacheDto;
+import com.qmth.themis.business.entity.TBAttachment;
+import com.qmth.themis.business.entity.TEAudio;
 import com.qmth.themis.business.enums.ExamRecordStatusEnum;
 import com.qmth.themis.business.enums.MobileModeEnum;
 import com.qmth.themis.business.enums.MqTagEnum;
 import com.qmth.themis.business.service.*;
-import com.qmth.themis.business.util.MqUtil;
-import com.qmth.themis.business.util.QrCodeUtil;
-import com.qmth.themis.business.util.RedisUtil;
-import com.qmth.themis.business.util.ServletUtil;
+import com.qmth.themis.business.util.*;
 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 io.swagger.annotations.*;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
+import java.io.File;
 import java.security.NoSuchAlgorithmException;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
 
 @Api(tags = "移动端接口")
 @RestController
@@ -62,6 +63,15 @@ public class TEMobileController {
     @Resource
     QrCodeUtil qrCodeUtil;
 
+    @Resource
+    TEAudioService teAudioService;
+
+    @Resource
+    CacheService cacheService;
+
+    @Resource
+    OssUtil ossUtil;
+
     @ApiOperation(value = "获取登录详细信息")
     @RequestMapping(value = "/authorization", method = RequestMethod.POST)
     public Result authorization(@RequestBody MobileAuthorizationParamBean param) throws NoSuchAlgorithmException {
@@ -197,4 +207,30 @@ public class TEMobileController {
         }
         return ResultUtil.ok(Collections.singletonMap(SystemConstant.STATUS, examRecordStatusEnum));
     }
+
+    @ApiOperation(value = "查询考试语音信息")
+    @RequestMapping(value = "/exam/audio/query", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "试卷信息")})
+    public Result examAudioQuery(@ApiParam(value = "考试id", required = true) @RequestParam Long recordId) {
+        List<TEAudio> teAudioList = null;
+        ExamRecordStatusEnum examRecordStatusEnum = ExamRecordCacheUtil.getStatus(recordId);
+        if (Objects.nonNull(examRecordStatusEnum)) {
+            IPage<TEAudio> teAudioIPage = teAudioService.query(new Page<>(SystemConstant.PAGE_NUMBER_MIN, SystemConstant.SELECT_PAGE_SIZE_MAX), ExamRecordCacheUtil.getExamActivityId(recordId));
+            if (Objects.nonNull(teAudioIPage) && !CollectionUtils.isEmpty(teAudioIPage.getRecords())) {
+                for (TEAudio t : teAudioIPage.getRecords()) {
+                    if (Objects.nonNull(t.getAttachmentId())) {
+                        TBAttachment tbAttachment = cacheService.attachmentCache(t.getAttachmentId());
+                        if (Objects.nonNull(tbAttachment) && Objects.nonNull(tbAttachment.getRemark())) {
+                            JSONObject jsonObject = JSONObject.parseObject(tbAttachment.getRemark());
+                            t.setAttachmentPath(ossUtil.getAliYunOssPublicDomain().getPublicUrl() + File.separator + jsonObject.getString(SystemConstant.PATH));
+                        }
+                        t.setAttachmentName(tbAttachment.getName() + tbAttachment.getType());
+                        t.setAttachmentMd5(tbAttachment.getMd5());
+                    }
+                }
+                teAudioList = teAudioIPage.getRecords();
+            }
+        }
+        return ResultUtil.ok(teAudioList);
+    }
 }

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

@@ -387,9 +387,10 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
     public void execMqOeMobileLogic(MqDto mqDto, String key) throws NoSuchAlgorithmException, IOException {
         String tag = mqDto.getTag();
         if (Objects.equals(MqTagEnum.EXAM_STOP.name(), tag)//考试退出
-                || Objects.equals(MqTagEnum.EXAM_START.name(), tag)//考试开始
-                || Objects.equals(MqTagEnum.EXAM_AUDIO_MOBILE.name(), tag)) {//考试语音
-            examStartAndStopAndAudioLogic(mqDto, key);
+                || Objects.equals(MqTagEnum.EXAM_START.name(), tag)) {//考试开始
+//                || Objects.equals(MqTagEnum.EXAM_AUDIO_MOBILE.name(), tag)) {//考试语音
+//            examStartAndStopAndAudioLogic(mqDto, key);
+            examStartAndStopLogic(mqDto, key);
         }
     }
 
@@ -401,7 +402,7 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
      * @throws NoSuchAlgorithmException
      * @throws IOException
      */
-    public void examStartAndStopAndAudioLogic(MqDto mqDto, String key) throws NoSuchAlgorithmException, IOException {
+    public void examStartAndStopLogic(MqDto mqDto, String key) throws NoSuchAlgorithmException, IOException {
         ConcurrentHashMap<String, WebSocketMobileServer> webSocketMap = WebSocketMobileServer.getWebSocketMap();
         String tag = mqDto.getTag();
         Long recordId = Long.parseLong(String.valueOf(mqDto.getBody()));
@@ -456,13 +457,13 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
                             webSocketFirstMobileServer.sendMessage(websocketDto);
                         }
                         break;
-                    case "EXAM_AUDIO_MOBILE":
-                        if (!Objects.equals(ExamRecordStatusEnum.PERSISTED, examRecordStatusEnum)
-                                && !Objects.equals(ExamRecordStatusEnum.FINISHED, examRecordStatusEnum)) {
-                            websocketDto = new WebsocketDto(WebsocketTypeEnum.EXAM_AUDIO.name(), mqDto.getProperties());
-                            webSocketFirstMobileServer.sendMessage(websocketDto);
-                        }
-                        break;
+//                    case "EXAM_AUDIO_MOBILE":
+//                        if (!Objects.equals(ExamRecordStatusEnum.PERSISTED, examRecordStatusEnum)
+//                                && !Objects.equals(ExamRecordStatusEnum.FINISHED, examRecordStatusEnum)) {
+//                            websocketDto = new WebsocketDto(WebsocketTypeEnum.EXAM_AUDIO.name(), mqDto.getProperties());
+//                            webSocketFirstMobileServer.sendMessage(websocketDto);
+//                        }
+//                        break;
                     default:
                         break;
                 }
@@ -502,13 +503,13 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
                             webSocketSecondMobileServer.sendMessage(websocketDto);
                         }
                         break;
-                    case "EXAM_AUDIO_MOBILE":
-                        if (!Objects.equals(ExamRecordStatusEnum.PERSISTED, examRecordStatusEnum)
-                                && !Objects.equals(ExamRecordStatusEnum.FINISHED, examRecordStatusEnum)) {
-                            websocketDto = new WebsocketDto(WebsocketTypeEnum.EXAM_AUDIO.name(), mqDto.getProperties());
-                            webSocketSecondMobileServer.sendMessage(websocketDto);
-                        }
-                        break;
+//                    case "EXAM_AUDIO_MOBILE":
+//                        if (!Objects.equals(ExamRecordStatusEnum.PERSISTED, examRecordStatusEnum)
+//                                && !Objects.equals(ExamRecordStatusEnum.FINISHED, examRecordStatusEnum)) {
+//                            websocketDto = new WebsocketDto(WebsocketTypeEnum.EXAM_AUDIO.name(), mqDto.getProperties());
+//                            webSocketSecondMobileServer.sendMessage(websocketDto);
+//                        }
+//                        break;
                     default:
                         break;
                 }

+ 2 - 4
themis-exam/src/main/java/com/qmth/themis/exam/start/StartRunning.java

@@ -44,10 +44,8 @@ public class StartRunning implements CommandLineRunner {
          * websocket mq start
          */
         rocketMessageConsumer.setRocketMQConsumer(nameServer, dictionaryConfig.mqConfigDomain().getMap().get(MqGroupEnum.WEBSOCKET_OE_GROUP.name()), dictionaryConfig.mqConfigDomain().getTopic(), MqTagEnum.OE_IM_BROADCASTING.name() + "||" + MqTagEnum.OE_IM_CLUSTERING.name() + "||" + MqTagEnum.OE_LIVENESS_VERIFY.name() + "||" + MqTagEnum.OE_MONITOR_FINISH.name() + "||" + MqTagEnum.OE_WARNING_FINISH.name() + "||" + MqTagEnum.OE_WEBSOCKET_MOBILE_ANSWER_READY.name() + "||" + MqTagEnum.OE_WEBSOCKET_MOBILE_ANSWER_UPLOAD.name() + "||" + MqTagEnum.OE_WEBSOCKET_EXAM_STOP.name() + "||" + MqTagEnum.MONITOR_START.name() + "||" + MqTagEnum.MONITOR_STOP.name() + "||" + MqTagEnum.OE_WEBSOCKET_MOBILE_MONITOR_STATUS.name(), MessageModel.BROADCASTING, SpringContextHolder.getBean(WebSocketOeServer.class));
-        rocketMessageConsumer.setRocketMQConsumer(nameServer, dictionaryConfig.mqConfigDomain().getMap().get(MqGroupEnum.WEBSOCKET_OE_MOBILE_GROUP.name()), dictionaryConfig.mqConfigDomain().getTopic(), MqTagEnum.EXAM_STOP.name() + "||" + MqTagEnum.EXAM_START.name() + "||" + MqTagEnum.EXAM_AUDIO_MOBILE.name(), MessageModel.BROADCASTING, SpringContextHolder.getBean(WebSocketMobileServer.class));
-        //TODO 因单机广播模式出现消费者无法消费消息的问题,所以开发时改成CLUSTERING模式,正式环境要改成BROADCASTING模式
-//        rocketMessageConsumer.setRocketMQConsumer(nameServer, dictionaryConfig.mqConfigDomain().getMap().get(MqGroupEnum.WEBSOCKET_OE_GROUP.name()), dictionaryConfig.mqConfigDomain().getTopic(), MqTagEnum.OE_IM_BROADCASTING.name() + "||" + MqTagEnum.OE_IM_CLUSTERING.name() + "||" + MqTagEnum.OE_LIVENESS_VERIFY.name() + "||" + MqTagEnum.OE_MONITOR_FINISH.name() + "||" + MqTagEnum.OE_WARNING_FINISH.name() + "||" + MqTagEnum.OE_WEBSOCKET_MOBILE_ANSWER_READY.name() + "||" + MqTagEnum.OE_WEBSOCKET_MOBILE_ANSWER_UPLOAD.name() + "||" + MqTagEnum.OE_WEBSOCKET_EXAM_STOP.name() + "||" + MqTagEnum.MONITOR_START.name() + "||" + MqTagEnum.MONITOR_STOP.name() + "||" + MqTagEnum.OE_WEBSOCKET_MOBILE_MONITOR_STATUS.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(WebSocketOeServer.class));
-//        rocketMessageConsumer.setRocketMQConsumer(nameServer, dictionaryConfig.mqConfigDomain().getMap().get(MqGroupEnum.WEBSOCKET_OE_MOBILE_GROUP.name()), dictionaryConfig.mqConfigDomain().getTopic(), MqTagEnum.EXAM_STOP.name() + "||" + MqTagEnum.EXAM_START.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(WebSocketMobileServer.class));
+//        rocketMessageConsumer.setRocketMQConsumer(nameServer, dictionaryConfig.mqConfigDomain().getMap().get(MqGroupEnum.WEBSOCKET_OE_MOBILE_GROUP.name()), dictionaryConfig.mqConfigDomain().getTopic(), MqTagEnum.EXAM_STOP.name() + "||" + MqTagEnum.EXAM_START.name() + "||" + MqTagEnum.EXAM_AUDIO_MOBILE.name(), MessageModel.BROADCASTING, SpringContextHolder.getBean(WebSocketMobileServer.class));
+        rocketMessageConsumer.setRocketMQConsumer(nameServer, dictionaryConfig.mqConfigDomain().getMap().get(MqGroupEnum.WEBSOCKET_OE_MOBILE_GROUP.name()), dictionaryConfig.mqConfigDomain().getTopic(), MqTagEnum.EXAM_STOP.name() + "||" + MqTagEnum.EXAM_START.name(), MessageModel.BROADCASTING, SpringContextHolder.getBean(WebSocketMobileServer.class));
         SystemConstant.initTempFiles();
         log.info("服务器启动时执行 end");
     }

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

@@ -7,7 +7,6 @@ import com.qmth.themis.business.cache.ExamRecordCacheUtil;
 import com.qmth.themis.business.cache.bean.ExamStudentCacheBean;
 import com.qmth.themis.business.constant.SystemConstant;
 import com.qmth.themis.business.dto.MqDto;
-import com.qmth.themis.business.entity.TEAudio;
 import com.qmth.themis.business.entity.TEExam;
 import com.qmth.themis.business.entity.TEExamActivity;
 import com.qmth.themis.business.enums.MqTagEnum;
@@ -16,7 +15,6 @@ import com.qmth.themis.business.util.JacksonUtil;
 import com.qmth.themis.task.enums.QuartzTaskEnum;
 import com.qmth.themis.task.listener.service.MqTaskLogicService;
 import com.qmth.themis.task.quartz.ExamActivityJob;
-import com.qmth.themis.task.quartz.ExamAudioJob;
 import com.qmth.themis.task.quartz.ExamStudentJob;
 import com.qmth.themis.task.service.QuartzService;
 import org.slf4j.Logger;
@@ -89,18 +87,19 @@ public class MqTaskLogicServiceImpl implements MqTaskLogicService {
             } else {
                 this.setCron(ExamRecordCacheUtil.getExamFinalFinishTime(recordId), examStudentCacheBean.getId() + "-" + recordId, ExamStudentJob.class, QuartzTaskEnum.EXAM_STUDENT_JOB_GROUP_NAME);
             }
-        } else if (Objects.equals(tag, MqTagEnum.EXAM_AUDIO.name())) {//考试语音
-            JSONObject jsonObject = JSONObject.parseObject(String.valueOf(mqDto.getBody()));
-            TEAudio teAudio = JSONObject.toJavaObject(jsonObject, TEAudio.class);
-            Long examId = Long.parseLong(String.valueOf(mqDto.getObjId()));
-            if (Objects.equals(SystemConstant.DELETE, oper)) {
-                quartzService.deleteJob(teAudio.getId() + "-" + teAudio.getActivityId() + "-" + examId, QuartzTaskEnum.EXAM_AUDIO_JOB_GROUP_NAME.name());
-            } else {
-                Long execTime = (Long) tranMap.get(SystemConstant.EXEC_TIME);
-                Long realExecTime = (Long) tranMap.get(SystemConstant.REAL_EXEC_TIME);
-                this.setCron(execTime, teAudio.getId() + "-" + teAudio.getActivityId() + "-" + examId + "-" + realExecTime, ExamAudioJob.class, QuartzTaskEnum.EXAM_AUDIO_JOB_GROUP_NAME);
-            }
         }
+//        else if (Objects.equals(tag, MqTagEnum.EXAM_AUDIO.name())) {//考试语音
+//            JSONObject jsonObject = JSONObject.parseObject(String.valueOf(mqDto.getBody()));
+//            TEAudio teAudio = JSONObject.toJavaObject(jsonObject, TEAudio.class);
+//            Long examId = Long.parseLong(String.valueOf(mqDto.getObjId()));
+//            if (Objects.equals(SystemConstant.DELETE, oper)) {
+//                quartzService.deleteJob(teAudio.getId() + "-" + teAudio.getActivityId() + "-" + examId, QuartzTaskEnum.EXAM_AUDIO_JOB_GROUP_NAME.name());
+//            } else {
+//                Long execTime = (Long) tranMap.get(SystemConstant.EXEC_TIME);
+//                Long realExecTime = (Long) tranMap.get(SystemConstant.REAL_EXEC_TIME);
+//                this.setCron(execTime, teAudio.getId() + "-" + teAudio.getActivityId() + "-" + examId + "-" + realExecTime, ExamAudioJob.class, QuartzTaskEnum.EXAM_AUDIO_JOB_GROUP_NAME);
+//            }
+//        }
         tmRocketMessageService.saveMqMessageSuccess(mqDto, key);
     }
 

+ 44 - 44
themis-task/src/main/java/com/qmth/themis/task/quartz/ExamAudioJob.java

@@ -1,44 +1,44 @@
-package com.qmth.themis.task.quartz;
-
-import com.qmth.themis.task.quartz.service.QuartzLogicService;
-import org.quartz.JobDetail;
-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 javax.annotation.Resource;
-import java.util.Objects;
-
-/**
- * @Description: examAudio job,一次性延时任务
- * @Param:
- * @return:
- * @Author: wangliang
- * @Date: 2020/9/23
- */
-@Component
-public class ExamAudioJob extends QuartzJobBean {
-    private final static Logger log = LoggerFactory.getLogger(ExamAudioJob.class);
-
-    @Resource
-    QuartzLogicService quartzLogicService;
-
-    /**
-     * 考试语音一次性延时任务
-     *
-     * @param context
-     * @throws JobExecutionException
-     */
-    @Override
-    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
-        log.info("exam_audio_job进来了,context:{}", context);
-        JobDetail jobDetail = context.getJobDetail();
-        String key = String.valueOf(jobDetail.getKey());
-        if (Objects.nonNull(key)) {
-            quartzLogicService.execExamAudioJobLogic(key);
-        }
-    }
-}
+//package com.qmth.themis.task.quartz;
+//
+//import com.qmth.themis.task.quartz.service.QuartzLogicService;
+//import org.quartz.JobDetail;
+//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 javax.annotation.Resource;
+//import java.util.Objects;
+//
+///**
+// * @Description: examAudio job,一次性延时任务
+// * @Param:
+// * @return:
+// * @Author: wangliang
+// * @Date: 2020/9/23
+// */
+//@Component
+//public class ExamAudioJob extends QuartzJobBean {
+//    private final static Logger log = LoggerFactory.getLogger(ExamAudioJob.class);
+//
+//    @Resource
+//    QuartzLogicService quartzLogicService;
+//
+//    /**
+//     * 考试语音一次性延时任务
+//     *
+//     * @param context
+//     * @throws JobExecutionException
+//     */
+//    @Override
+//    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
+//        log.info("exam_audio_job进来了,context:{}", context);
+//        JobDetail jobDetail = context.getJobDetail();
+//        String key = String.valueOf(jobDetail.getKey());
+//        if (Objects.nonNull(key)) {
+//            quartzLogicService.execExamAudioJobLogic(key);
+//        }
+//    }
+//}

+ 6 - 6
themis-task/src/main/java/com/qmth/themis/task/quartz/service/QuartzLogicService.java

@@ -23,10 +23,10 @@ public interface QuartzLogicService {
      */
     public void execExamStudentJobLogic(String key);
 
-    /**
-     * 考试语音quartz逻辑
-     *
-     * @param key
-     */
-    public void execExamAudioJobLogic(String key);
+//    /**
+//     * 考试语音quartz逻辑
+//     *
+//     * @param key
+//     */
+//    public void execExamAudioJobLogic(String key);
 }

+ 45 - 45
themis-task/src/main/java/com/qmth/themis/task/quartz/service/impl/QuartzLogicServiceImpl.java

@@ -178,49 +178,49 @@ public class QuartzLogicServiceImpl implements QuartzLogicService {
         }
     }
 
-    /**
-     * 考试语音quartz逻辑
-     *
-     * @param key
-     */
-    @Override
-    public void execExamAudioJobLogic(String key) {
-        log.info("execExamAudioJobLogic key:{}", key);
-        String[] strings = key.split("\\.");
-        String[] exams = strings[1].split("-");
-        Long teAudioId = Long.parseLong(exams[0]);
-        Long examActivityId = Long.parseLong(exams[1]);
-        Long examId = Long.parseLong(exams[2]);
-        Long execTime = Long.parseLong(exams[3]);
-        if (Objects.nonNull(teAudioId)) {
-            List<TOeExamRecord> tOeExamRecordList = tOeExamRecordService.findExamRecordByExamIdAndExamActivityId(examId, examActivityId);
-            if (!CollectionUtils.isEmpty(tOeExamRecordList)) {
-                for (TOeExamRecord t : tOeExamRecordList) {
-                    ExamCacheBean examCacheBean = teExamService.getExamCacheBean(examId);
-                    ExamActivityCacheBean examActivityCacheBean = teExamActivityService.getExamActivityCacheBean(examActivityId);
-                    TEAudio teAudio = cacheService.examAudioCache(teAudioId);
-                    if (Objects.nonNull(examCacheBean) && Objects.nonNull(examActivityCacheBean) && Objects.nonNull(teAudio)
-                            && Objects.nonNull(examCacheBean.getForceFinish()) && examCacheBean.getForceFinish().intValue() == 1
-                            && Objects.nonNull(examCacheBean.getEnable()) && examCacheBean.getEnable() == 1
-                            && Objects.nonNull(examActivityCacheBean.getEnable()) && examActivityCacheBean.getEnable() == 1
-                            && Objects.nonNull(teAudio.getEnable()) && teAudio.getEnable()
-                            && Objects.nonNull(t.getMonitorRecord())
-                            && (t.getMonitorRecord().contains(MonitorVideoSourceEnum.MOBILE_FIRST.name())
-                            || t.getMonitorRecord().contains(MonitorVideoSourceEnum.MOBILE_SECOND.name()))) {
-                        Map<String, Object> mapParameter = new HashMap<>();
-                        mapParameter.put(SystemConstant.RECORD_ID, t.getId());
-                        mapParameter.put(SystemConstant.EXEC_TIME, execTime);
-                        TBAttachment tbAttachment = cacheService.attachmentCache(teAudio.getAttachmentId());
-                        if (Objects.nonNull(tbAttachment) && Objects.nonNull(tbAttachment.getRemark())) {
-                            JSONObject jsonObject = JSONObject.parseObject(tbAttachment.getRemark());
-                            mapParameter.put(SystemConstant.PATH, ossUtil.getAliYunOssPublicDomain().getPublicUrl() + File.separator + jsonObject.getString(SystemConstant.PATH));
-                            mapParameter.put(SystemConstant.NAME, tbAttachment.getName() + tbAttachment.getType());
-                        }
-                        MqDto mqDto = new MqDto(mqUtil.getMqGroupDomain().getTopic(), MqTagEnum.EXAM_AUDIO_MOBILE.name(), t.getId(), MqTagEnum.EXAM_AUDIO_MOBILE, exams[2], mapParameter, exams[2]);
-                        mqDtoService.assembleSendOneOrderMsg(mqDto);
-                    }
-                }
-            }
-        }
-    }
+//    /**
+//     * 考试语音quartz逻辑
+//     *
+//     * @param key
+//     */
+//    @Override
+//    public void execExamAudioJobLogic(String key) {
+//        log.info("execExamAudioJobLogic key:{}", key);
+//        String[] strings = key.split("\\.");
+//        String[] exams = strings[1].split("-");
+//        Long teAudioId = Long.parseLong(exams[0]);
+//        Long examActivityId = Long.parseLong(exams[1]);
+//        Long examId = Long.parseLong(exams[2]);
+//        Long execTime = Long.parseLong(exams[3]);
+//        if (Objects.nonNull(teAudioId)) {
+//            List<TOeExamRecord> tOeExamRecordList = tOeExamRecordService.findExamRecordByExamIdAndExamActivityId(examId, examActivityId);
+//            if (!CollectionUtils.isEmpty(tOeExamRecordList)) {
+//                for (TOeExamRecord t : tOeExamRecordList) {
+//                    ExamCacheBean examCacheBean = teExamService.getExamCacheBean(examId);
+//                    ExamActivityCacheBean examActivityCacheBean = teExamActivityService.getExamActivityCacheBean(examActivityId);
+//                    TEAudio teAudio = cacheService.examAudioCache(teAudioId);
+//                    if (Objects.nonNull(examCacheBean) && Objects.nonNull(examActivityCacheBean) && Objects.nonNull(teAudio)
+//                            && Objects.nonNull(examCacheBean.getForceFinish()) && examCacheBean.getForceFinish().intValue() == 1
+//                            && Objects.nonNull(examCacheBean.getEnable()) && examCacheBean.getEnable() == 1
+//                            && Objects.nonNull(examActivityCacheBean.getEnable()) && examActivityCacheBean.getEnable() == 1
+//                            && Objects.nonNull(teAudio.getEnable()) && teAudio.getEnable()
+//                            && Objects.nonNull(t.getMonitorRecord())
+//                            && (t.getMonitorRecord().contains(MonitorVideoSourceEnum.MOBILE_FIRST.name())
+//                            || t.getMonitorRecord().contains(MonitorVideoSourceEnum.MOBILE_SECOND.name()))) {
+//                        Map<String, Object> mapParameter = new HashMap<>();
+//                        mapParameter.put(SystemConstant.RECORD_ID, t.getId());
+//                        mapParameter.put(SystemConstant.EXEC_TIME, execTime);
+//                        TBAttachment tbAttachment = cacheService.attachmentCache(teAudio.getAttachmentId());
+//                        if (Objects.nonNull(tbAttachment) && Objects.nonNull(tbAttachment.getRemark())) {
+//                            JSONObject jsonObject = JSONObject.parseObject(tbAttachment.getRemark());
+//                            mapParameter.put(SystemConstant.PATH, ossUtil.getAliYunOssPublicDomain().getPublicUrl() + File.separator + jsonObject.getString(SystemConstant.PATH));
+//                            mapParameter.put(SystemConstant.NAME, tbAttachment.getName() + tbAttachment.getType());
+//                        }
+//                        MqDto mqDto = new MqDto(mqUtil.getMqGroupDomain().getTopic(), MqTagEnum.EXAM_AUDIO_MOBILE.name(), t.getId(), MqTagEnum.EXAM_AUDIO_MOBILE, exams[2], mapParameter, exams[2]);
+//                        mqDtoService.assembleSendOneOrderMsg(mqDto);
+//                    }
+//                }
+//            }
+//        }
+//    }
 }

+ 2 - 1
themis-task/src/main/java/com/qmth/themis/task/start/StartRunning.java

@@ -99,7 +99,8 @@ public class StartRunning implements CommandLineRunner {
         /**
          * quartz mq start
          */
-        rocketMessageConsumer.setRocketMQConsumer(nameServer, dictionaryConfig.mqConfigDomain().getMap().get(MqGroupEnum.QUARTZ_GROUP.name()), dictionaryConfig.mqConfigDomain().getTopic(), MqTagEnum.EXAM_ACTIVITY.name() + "||" + MqTagEnum.EXAM_STUDENT.name() + "||" + MqTagEnum.EXAM_AUDIO.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(QuartzOrderlyImpl.class));
+//        rocketMessageConsumer.setRocketMQConsumer(nameServer, dictionaryConfig.mqConfigDomain().getMap().get(MqGroupEnum.QUARTZ_GROUP.name()), dictionaryConfig.mqConfigDomain().getTopic(), MqTagEnum.EXAM_ACTIVITY.name() + "||" + MqTagEnum.EXAM_STUDENT.name() + "||" + MqTagEnum.EXAM_AUDIO.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(QuartzOrderlyImpl.class));
+        rocketMessageConsumer.setRocketMQConsumer(nameServer, dictionaryConfig.mqConfigDomain().getMap().get(MqGroupEnum.QUARTZ_GROUP.name()), dictionaryConfig.mqConfigDomain().getTopic(), MqTagEnum.EXAM_ACTIVITY.name() + "||" + MqTagEnum.EXAM_STUDENT.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(QuartzOrderlyImpl.class));
         //计算客观分
 //        rocketMessageConsumer.setRocketMQConsumer(nameServer, dictionaryConfig.mqConfigDomain().getMap().get(MqGroupEnum.CALCULATE_OBJECTIVE_SCORE_GROUP.name()), dictionaryConfig.mqConfigDomain().getTopic(), MqTagEnum.CALCULATE_OBJECTIVE_SCORE.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(CalculateObjectiveScoreConcurrentlyImpl.class));
         //重新算分