wangliang 3 жил өмнө
parent
commit
62174bc4de
22 өөрчлөгдсөн 213 нэмэгдсэн , 312 устгасан
  1. 1 1
      themis-admin/src/main/java/com/qmth/themis/admin/api/TBUserController.java
  2. 9 22
      themis-admin/src/main/java/com/qmth/themis/admin/listener/service/impl/MqAdminLogicServiceImpl.java
  3. 10 0
      themis-business/src/main/java/com/qmth/themis/business/constant/SystemConstant.java
  4. 6 5
      themis-business/src/main/java/com/qmth/themis/business/dto/MqDto.java
  5. 11 0
      themis-business/src/main/java/com/qmth/themis/business/entity/TMRocketMessage.java
  6. 16 0
      themis-business/src/main/java/com/qmth/themis/business/service/TMRocketMessageService.java
  7. 4 0
      themis-business/src/main/java/com/qmth/themis/business/service/impl/MqDtoServiceImpl.java
  8. 4 4
      themis-business/src/main/java/com/qmth/themis/business/service/impl/TBAttachmentServiceImpl.java
  9. 2 6
      themis-business/src/main/java/com/qmth/themis/business/service/impl/TEExamServiceImpl.java
  10. 1 1
      themis-business/src/main/java/com/qmth/themis/business/service/impl/TEMobileServiceImpl.java
  11. 7 7
      themis-business/src/main/java/com/qmth/themis/business/service/impl/TEQrcodeServiceImpl.java
  12. 41 0
      themis-business/src/main/java/com/qmth/themis/business/service/impl/TMRocketMessageServiceImpl.java
  13. 2 6
      themis-business/src/main/java/com/qmth/themis/business/service/impl/TOeExamRecordServiceImpl.java
  14. 3 3
      themis-business/src/main/java/com/qmth/themis/business/templete/TaskExportCommon.java
  15. 1 1
      themis-business/src/main/java/com/qmth/themis/business/templete/TaskImportCommon.java
  16. 10 14
      themis-business/src/main/java/com/qmth/themis/business/templete/impl/TaskExamPaperImportTemplete.java
  17. 1 1
      themis-exam/src/main/java/com/qmth/themis/exam/api/TEStudentController.java
  18. 16 78
      themis-exam/src/main/java/com/qmth/themis/exam/listener/service/impl/MqOeLogicServiceImpl.java
  19. 39 122
      themis-mq/src/main/java/com/qmth/themis/mq/service/impl/MqLogicServiceImpl.java
  20. 6 20
      themis-task/src/main/java/com/qmth/themis/task/listener/service/impl/MqTaskLogicServiceImpl.java
  21. 21 19
      themis-task/src/main/java/com/qmth/themis/task/quartz/MqJob.java
  22. 2 2
      themis-task/src/main/java/com/qmth/themis/task/start/StartRunning.java

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

@@ -184,7 +184,7 @@ public class TBUserController {
         //添加用户鉴权缓存
         AuthDto authDto = cacheService.addAccountAuthCache(user.getId());
         //生成token
-        String token = String.valueOf(UUID.randomUUID()).replaceAll("-", "");
+        String token = SystemConstant.getUuid();
         cacheService.addAccountCache(user.getId());
         Source source = null;
         if (Platform.WIN == platform || Platform.MAC == platform) {

+ 9 - 22
themis-admin/src/main/java/com/qmth/themis/admin/listener/service/impl/MqAdminLogicServiceImpl.java

@@ -1,13 +1,8 @@
 package com.qmth.themis.admin.listener.service.impl;
 
-import com.google.gson.Gson;
 import com.qmth.themis.admin.listener.service.MqAdminLogicService;
-import com.qmth.themis.business.constant.SystemConstant;
-import com.qmth.themis.business.entity.TMRocketMessage;
-import com.qmth.themis.business.service.TMRocketMessageService;
-import com.qmth.themis.business.util.JacksonUtil;
-import com.qmth.themis.business.util.RedisUtil;
 import com.qmth.themis.business.dto.MqDto;
+import com.qmth.themis.business.service.TMRocketMessageService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
@@ -16,20 +11,17 @@ import org.springframework.transaction.annotation.Transactional;
 import javax.annotation.Resource;
 import java.lang.reflect.InvocationTargetException;
 
-/** 
-* @Description: mq 管理端执行逻辑 impl
-* @Param:  
-* @return:  
-* @Author: wangliang
-* @Date: 2020/8/3 
-*/ 
+/**
+ * @Description: mq 管理端执行逻辑 impl
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2020/8/3
+ */
 @Service
 public class MqAdminLogicServiceImpl implements MqAdminLogicService {
     private final static Logger log = LoggerFactory.getLogger(MqAdminLogicServiceImpl.class);
 
-    @Resource
-    RedisUtil redisUtil;
-
     @Resource
     TMRocketMessageService tmRocketMessageService;
 
@@ -37,12 +29,7 @@ public class MqAdminLogicServiceImpl implements MqAdminLogicService {
     @Transactional
     public void execMqMaxReconsumeTime(MqDto mqDto, String key) {
         //超过最大重试次数,保存到数据库,后续可以发短信通知系统管理人员
-        Gson gson = new Gson();
-        mqDto.setAck(SystemConstant.POSION_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());
+        tmRocketMessageService.saveMqMessageError(mqDto, key);
     }
 
     @Override

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

@@ -621,4 +621,14 @@ public class SystemConstant {
             }
         }
     }
+
+    /**
+     * 获取全局uuid
+     *
+     * @return
+     */
+    public static String getUuid() {
+        return String.valueOf(UUID.randomUUID()).replaceAll("-", "");
+    }
+
 }

+ 6 - 5
themis-business/src/main/java/com/qmth/themis/business/dto/MqDto.java

@@ -1,5 +1,6 @@
 package com.qmth.themis.business.dto;
 
+import com.qmth.themis.business.constant.SystemConstant;
 import com.qmth.themis.business.enums.MqTagEnum;
 
 import java.io.Serializable;
@@ -40,7 +41,7 @@ public class MqDto implements Serializable {
         this.type = MqTagEnum.valueOf(tag);
         this.objId = objId;
         this.timestamp = System.currentTimeMillis();
-        this.id = String.valueOf(UUID.randomUUID()).replaceAll("-", "");
+        this.id = SystemConstant.getUuid();
     }
 
     public MqDto(String topic, String tag, String objId) {
@@ -50,7 +51,7 @@ public class MqDto implements Serializable {
         this.type = MqTagEnum.valueOf(tag);
         this.objId = objId;
         this.timestamp = System.currentTimeMillis();
-        this.id = String.valueOf(UUID.randomUUID()).replaceAll("-", "");
+        this.id = SystemConstant.getUuid();
     }
 
     public MqDto(String topic, String tag, String objId, Long timestamp) {
@@ -60,7 +61,7 @@ public class MqDto implements Serializable {
         this.type = MqTagEnum.valueOf(tag);
         this.objId = objId;
         this.timestamp = timestamp;
-        this.id = String.valueOf(UUID.randomUUID()).replaceAll("-", "");
+        this.id = SystemConstant.getUuid();
     }
 
     public MqDto(String topic, String tag, Object body, MqTagEnum type, String objId, String objName) {
@@ -71,7 +72,7 @@ public class MqDto implements Serializable {
         this.objId = objId;
         this.objName = objName;
         this.timestamp = System.currentTimeMillis();
-        this.id = String.valueOf(UUID.randomUUID()).replaceAll("-", "");
+        this.id = SystemConstant.getUuid();
     }
 
     public MqDto(String topic, String tag, Object body, MqTagEnum type, String objId, Map<String, Object> properties, String objName) {
@@ -82,7 +83,7 @@ public class MqDto implements Serializable {
         this.objId = objId;
         this.objName = objName;
         this.timestamp = System.currentTimeMillis();
-        this.id = String.valueOf(UUID.randomUUID()).replaceAll("-", "");
+        this.id = SystemConstant.getUuid();
         this.properties = properties;
     }
 

+ 11 - 0
themis-business/src/main/java/com/qmth/themis/business/entity/TMRocketMessage.java

@@ -76,6 +76,17 @@ public class TMRocketMessage implements Serializable {
     @TableField(value = "timestamp")
     private Long timestamp;
 
+    @ApiModelProperty(value = "源消息id")
+    private String sourceId;
+
+    public String getSourceId() {
+        return sourceId;
+    }
+
+    public void setSourceId(String sourceId) {
+        this.sourceId = sourceId;
+    }
+
     public String getProp() {
         return prop;
     }

+ 16 - 0
themis-business/src/main/java/com/qmth/themis/business/service/TMRocketMessageService.java

@@ -1,6 +1,7 @@
 package com.qmth.themis.business.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.qmth.themis.business.dto.MqDto;
 import com.qmth.themis.business.entity.TMRocketMessage;
 
 /**
@@ -12,4 +13,19 @@ import com.qmth.themis.business.entity.TMRocketMessage;
  */
 public interface TMRocketMessageService extends IService<TMRocketMessage> {
 
+    /**
+     * 保存mq成功消息
+     *
+     * @param mqDto
+     * @param key
+     */
+    public void saveMqMessageSuccess(MqDto mqDto, String key);
+
+    /**
+     * 保存mq出错消息
+     *
+     * @param mqDto
+     * @param key
+     */
+    public void saveMqMessageError(MqDto mqDto, String key);
 }

+ 4 - 0
themis-business/src/main/java/com/qmth/themis/business/service/impl/MqDtoServiceImpl.java

@@ -4,6 +4,7 @@ import com.qmth.themis.business.constant.SystemConstant;
 import com.qmth.themis.business.dto.MqDto;
 import com.qmth.themis.business.service.MqDtoService;
 import com.qmth.themis.business.service.ProducerServer;
+import com.qmth.themis.business.service.TMRocketMessageService;
 import com.qmth.themis.business.util.RedisUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -33,6 +34,9 @@ public class MqDtoServiceImpl implements MqDtoService {
     @Resource
     RedisUtil redisUtil;
 
+    @Resource
+    TMRocketMessageService tmRocketMessageService;
+
     /**
      * 组装单向消息
      *

+ 4 - 4
themis-business/src/main/java/com/qmth/themis/business/service/impl/TBAttachmentServiceImpl.java

@@ -120,13 +120,13 @@ public class TBAttachmentServiceImpl extends ServiceImpl<TBAttachmentMapper, TBA
                     .add(String.format("%02d", nowTime.getMonthValue())).add(File.separator)
                     .add(String.format("%02d", nowTime.getDayOfMonth()));
             if (oss) {//上传至oss
-                stringJoiner.add(File.separator).add(String.valueOf(UUID.randomUUID()).replaceAll("-", ""))
+                stringJoiner.add(File.separator).add(SystemConstant.getUuid())
                         .add(tbAttachment.getType());
                 ossUtil.upload(ossUtil.isPublic(type), stringJoiner.toString(), file.getInputStream(),
                         BinaryUtil.toBase64String(HexUtils.decodeHex(md5)));
             } else {//上传至服务器
                 File finalFile = new File(
-                        stringJoiner.add(File.separator).add(String.valueOf(UUID.randomUUID()).replaceAll("-", ""))
+                        stringJoiner.add(File.separator).add(SystemConstant.getUuid())
                                 .add(tbAttachment.getType()).toString());
                 if (!finalFile.exists()) {
                     finalFile.getParentFile().mkdirs();
@@ -206,12 +206,12 @@ public class TBAttachmentServiceImpl extends ServiceImpl<TBAttachmentMapper, TBA
                     .add(String.format("%02d", nowTime.getMonthValue())).add(File.separator)
                     .add(String.format("%02d", nowTime.getDayOfMonth()));
             if (oss) {//上传至oss
-                stringJoiner.add(File.separator).add(String.valueOf(UUID.randomUUID()).replaceAll("-", ""))
+                stringJoiner.add(File.separator).add(SystemConstant.getUuid())
                         .add(tbAttachment.getType());
                 ossUtil.upload(ossUtil.isPublic(type), stringJoiner.toString(), file);
             } else {//上传至服务器
                 File finalFile = new File(
-                        stringJoiner.add(File.separator).add(String.valueOf(UUID.randomUUID()).replaceAll("-", ""))
+                        stringJoiner.add(File.separator).add(SystemConstant.getUuid())
                                 .add(tbAttachment.getType()).toString());
                 if (!finalFile.exists()) {
                     finalFile.getParentFile().mkdirs();

+ 2 - 6
themis-business/src/main/java/com/qmth/themis/business/service/impl/TEExamServiceImpl.java

@@ -837,7 +837,7 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
             throw new BusinessException(ExceptionResultEnum.NOT_FOUND_EXAM_STUDENT);
         }
 
-        String filePath = "upload" + File.separator + sdf.format(new Date()) + File.separator + uuid() + "." + suffix;
+        String filePath = "upload" + File.separator + sdf.format(new Date()) + File.separator + SystemConstant.getUuid() + "." + suffix;
         InputStream in = null;
         try {
             in = file.getInputStream();
@@ -859,10 +859,6 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
         }
     }
 
-    private String uuid() {
-        return UUID.randomUUID().toString().replaceAll("-", "");
-    }
-
     /**
      * 断点恢复
      */
@@ -1504,7 +1500,7 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
             task.setStatus(TaskStatusEnum.FINISH);
             task.setFinishTime(System.currentTimeMillis());
             JSONObject json = new JSONObject();
-            String reportFilePath = sdf.format(new Date()) + "/" + uuid() + SystemConstant.TXT_PREFIX;
+            String reportFilePath = sdf.format(new Date()) + "/" + SystemConstant.getUuid() + SystemConstant.TXT_PREFIX;
             json.put(SystemConstant.PATH, reportFilePath);
             json.put(SystemConstant.TYPE, SystemConstant.OSS);
             ossUtil.upload(false, reportFilePath, e.getMessage());

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

@@ -101,7 +101,7 @@ public class TEMobileServiceImpl implements TEMobileService {
         String deviceId = ServletUtil.getRequestDeviceId();
         AuthDto authDto = cacheService.addStudentAuthCache(es.getStudentId());
         // 生成token
-        String token = String.valueOf(UUID.randomUUID()).replaceAll("-", "");
+        String token = SystemConstant.getUuid();
         String sessionId = ret.getSessionId();
         ExpireTimeDTO expireBean = SystemConstant.getExpireTime(source, platform);
         TBSession tbSession = new TBSession(sessionId, String.valueOf(es.getStudentId()),

+ 7 - 7
themis-business/src/main/java/com/qmth/themis/business/service/impl/TEQrcodeServiceImpl.java

@@ -5,6 +5,7 @@ import com.qmth.themis.business.bean.exam.QrResponseBean;
 import com.qmth.themis.business.bean.exam.QrUploadParamBean;
 import com.qmth.themis.business.cache.MobileAuthCacheUtil;
 import com.qmth.themis.business.cache.RedisKeyHelper;
+import com.qmth.themis.business.constant.SystemConstant;
 import com.qmth.themis.business.enums.MobileModeEnum;
 import com.qmth.themis.business.enums.RoleEnum;
 import com.qmth.themis.business.service.TEQrcodeService;
@@ -17,7 +18,10 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.security.NoSuchAlgorithmException;
-import java.util.*;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.Objects;
+import java.util.Set;
 
 @Service
 public class TEQrcodeServiceImpl implements TEQrcodeService {
@@ -34,7 +38,7 @@ public class TEQrcodeServiceImpl implements TEQrcodeService {
     @Override
     public QrResponseBean mobileMonitor(QrMobileMonitorParamBean param) throws NoSuchAlgorithmException {
         String domain = wxappUtil.getWxappDomain().getUrl();
-        String code = uuid();
+        String code = SystemConstant.getUuid();
         MobileModeEnum mode = MobileModeEnum.MOBILE_MONITOR;
         Set<String> roleCodes = new HashSet<>();
         roleCodes.add(RoleEnum.STUDENT.name());
@@ -57,14 +61,10 @@ public class TEQrcodeServiceImpl implements TEQrcodeService {
         return ret;
     }
 
-    private String uuid() {
-        return UUID.randomUUID().toString().replaceAll("-", "");
-    }
-
     @Override
     public QrResponseBean upload(QrUploadParamBean param, MobileModeEnum mode) {
         String domain = wxappUtil.getWxappDomain().getUrl();
-        String code = uuid();
+        String code = SystemConstant.getUuid();
         MobileAuthCacheUtil.setMode(mode, code);
         MobileAuthCacheUtil.setCode(mode, code);
         MobileAuthCacheUtil.setRecordId(mode, code, param.getRecordId());

+ 41 - 0
themis-business/src/main/java/com/qmth/themis/business/service/impl/TMRocketMessageServiceImpl.java

@@ -1,11 +1,18 @@
 package com.qmth.themis.business.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.gson.Gson;
+import com.qmth.themis.business.constant.SystemConstant;
 import com.qmth.themis.business.dao.TMRocketMessageMapper;
+import com.qmth.themis.business.dto.MqDto;
 import com.qmth.themis.business.entity.TMRocketMessage;
 import com.qmth.themis.business.service.TMRocketMessageService;
+import com.qmth.themis.business.util.JacksonUtil;
+import com.qmth.themis.business.util.RedisUtil;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
+
 /**
  * @Description: rocketmq消息 服务实现类
  * @Param:
@@ -16,4 +23,38 @@ import org.springframework.stereotype.Service;
 @Service
 public class TMRocketMessageServiceImpl extends ServiceImpl<TMRocketMessageMapper, TMRocketMessage> implements TMRocketMessageService {
 
+    @Resource
+    RedisUtil redisUtil;
+
+    /**
+     * @param mqDto
+     * @param key
+     */
+    @Override
+    public void saveMqMessageSuccess(MqDto mqDto, String key) {
+        mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);
+        Gson gson = new Gson();
+        TMRocketMessage tmRocketMessage = gson.fromJson(gson.toJson(mqDto), TMRocketMessage.class);
+        tmRocketMessage.setBody(JacksonUtil.parseJson(tmRocketMessage.getBody()));
+        this.saveOrUpdate(tmRocketMessage);
+        redisUtil.delete(key, mqDto.getId());
+    }
+
+    /**
+     * 保存mq出错消息
+     *
+     * @param mqDto
+     * @param key
+     */
+    @Override
+    public void saveMqMessageError(MqDto mqDto, String key) {
+        mqDto.setAck(SystemConstant.POSION_ACK_TYPE);
+        Gson gson = new Gson();
+        TMRocketMessage tmRocketMessage = gson.fromJson(gson.toJson(mqDto), TMRocketMessage.class);
+        tmRocketMessage.setBody(JacksonUtil.parseJson(tmRocketMessage.getBody()));
+        tmRocketMessage.setSourceId(tmRocketMessage.getId());
+        tmRocketMessage.setId(SystemConstant.getUuid());
+        this.saveOrUpdate(tmRocketMessage);
+        redisUtil.delete(key, mqDto.getId());
+    }
 }

+ 2 - 6
themis-business/src/main/java/com/qmth/themis/business/service/impl/TOeExamRecordServiceImpl.java

@@ -408,11 +408,11 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
     @Override
     public void saveDataByCache(Long recordId) {
         String tempDir = SystemConstant.TEMP_FILES_DIR;
-        String dir = tempDir + "/" + uuid() + "/";
+        String dir = tempDir + "/" + SystemConstant.getUuid() + "/";
         File dfile = new File(dir);
         try {
             dfile.mkdirs();
-            String structFilePath = sdf.format(new Date()) + "/" + uuid() + ".json";
+            String structFilePath = sdf.format(new Date()) + "/" + SystemConstant.getUuid() + ".json";
             ExamStudentPaperStructCacheBean struct = (ExamStudentPaperStructCacheBean) redisUtil
                     .get(RedisKeyHelper.studentPaperStructKey(recordId));
 
@@ -482,10 +482,6 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
         }
     }
 
-    private String uuid() {
-        return UUID.randomUUID().toString().replaceAll("-", "");
-    }
-
     @Override
     public void saveFaceVerify(ExamTypeEnum type, Long recordId, Long entryAuthenticationId,
                                VerifyExceptionEnum entryAuthenticationResult) {

+ 3 - 3
themis-business/src/main/java/com/qmth/themis/business/templete/TaskExportCommon.java

@@ -93,7 +93,7 @@ public class TaskExportCommon {
     public File createExcel(String path) throws IOException {
         StringJoiner stringJoiner = new StringJoiner("");
         File file = new File(
-                stringJoiner.add(path).add(File.separator).add(String.valueOf(UUID.randomUUID()).replaceAll("-", ""))
+                stringJoiner.add(path).add(File.separator).add(SystemConstant.getUuid())
                         .add(SystemConstant.EXCEL_PREFIX).toString());
         if (!file.exists()) {
             file.getParentFile().mkdirs();
@@ -113,7 +113,7 @@ public class TaskExportCommon {
         StringJoiner stringJoiner = new StringJoiner("");
         boolean oss = (boolean) this.getOssEnv().get(SystemConstant.OSS);
         if (oss) {//上传至oss
-            stringJoiner.add(path).add(File.separator).add(String.valueOf(UUID.randomUUID()).replaceAll("-", ""))
+            stringJoiner.add(path).add(File.separator).add(SystemConstant.getUuid())
                     .add(SystemConstant.EXCEL_PREFIX).toString();
             this.ossUtil.upload(false, stringJoiner.toString(), inputStream, null);
         }
@@ -153,7 +153,7 @@ public class TaskExportCommon {
             JSONObject json = new JSONObject();
             StringJoiner stringJoiner = new StringJoiner("");
             if (Objects.equals(this.type, SystemConstant.OSS)) {//上传至oss
-                stringJoiner.add(path).add(File.separator).add(String.valueOf(UUID.randomUUID()).replaceAll("-", ""))
+                stringJoiner.add(path).add(File.separator).add(SystemConstant.getUuid())
                         .add(SystemConstant.TXT_PREFIX).toString();
                 this.ossUtil.upload(false, stringJoiner.toString(), inputStream, null);
             }

+ 1 - 1
themis-business/src/main/java/com/qmth/themis/business/templete/TaskImportCommon.java

@@ -146,7 +146,7 @@ public class TaskImportCommon {
             StringJoiner stringJoiner = new StringJoiner("");
             this.path = this.path.substring(0, this.path.lastIndexOf(File.separator) + 1);
             if (Objects.equals(this.type, SystemConstant.OSS)) {//上传至oss
-                stringJoiner.add(path).add(String.valueOf(UUID.randomUUID()).replaceAll("-", ""))
+                stringJoiner.add(path).add(SystemConstant.getUuid())
                         .add(SystemConstant.TXT_PREFIX).toString();
                 this.ossUtil.upload(false, stringJoiner.toString(), inputStream, null);
             }

+ 10 - 14
themis-business/src/main/java/com/qmth/themis/business/templete/impl/TaskExamPaperImportTemplete.java

@@ -118,7 +118,7 @@ public class TaskExamPaperImportTemplete implements TaskImportTemplete {
         }
         TEExam teExam = teExamService.cacheConvert(examCacheBean);
         String tempDir = SystemConstant.TEMP_FILES_DIR;
-        String dir = tempDir + "/" + uuid() + "/";
+        String dir = tempDir + "/" + SystemConstant.getUuid() + "/";
         File dfile = new File(dir);
 
         String lockKey = SystemConstant.REDIS_LOCK_PAPER_IMPORT_PREFIX + examId;
@@ -285,7 +285,7 @@ public class TaskExamPaperImportTemplete implements TaskImportTemplete {
                 structFile = paperFile;
             } else {
                 String structPath = paper.getStructPath();
-                structFile = new File(rootDir + uuid() + ".json");
+                structFile = new File(rootDir + SystemConstant.getUuid() + ".json");
                 ossUtil.download(false, structPath, structFile.getAbsolutePath());
             }
             disposeAnswer(rootDir, paper, answerFile, structFile, attachmentDir);
@@ -325,7 +325,7 @@ public class TaskExamPaperImportTemplete implements TaskImportTemplete {
                 }
             }
         }
-        String filePath = sdf.format(new Date()) + "/" + uuid() + ".json";
+        String filePath = sdf.format(new Date()) + "/" + SystemConstant.getUuid() + ".json";
         paper.setPaperViewPath(filePath);
         ossUtil.upload(false, filePath, structJson.toJSONString());
     }
@@ -388,16 +388,16 @@ public class TaskExamPaperImportTemplete implements TaskImportTemplete {
         if (paperFile == null) {
             return;
         }
-        File zip = new File(rootDir + uuid() + ".zip");
+        File zip = new File(rootDir + SystemConstant.getUuid() + ".zip");
         List<File> files = new ArrayList<File>();
         files.add(paperFile);
         if (attachmentDir != null) {
             files.add(attachmentDir);
         }
         FileUtil.doZip(zip, files);
-        File encryptZip = new File(rootDir + uuid() + ".zip");
+        File encryptZip = new File(rootDir + SystemConstant.getUuid() + ".zip");
         FileUtil.encryptFile(zip, encryptZip, paper.getDecryptSecret(), paper.getDecryptVector());
-        String filePath = sdf.format(new Date()) + "/" + uuid() + ".zip";
+        String filePath = sdf.format(new Date()) + "/" + SystemConstant.getUuid() + ".zip";
         paper.setPaperPath(filePath);
         paper.setPaperMd5(BinaryUtil.encodeMD5(FileUtil.fileConvertToByteArray(encryptZip)));
         ossUtil.upload(false, filePath, encryptZip);
@@ -449,7 +449,7 @@ public class TaskExamPaperImportTemplete implements TaskImportTemplete {
                 }
             }
         }
-        String filePath = sdf.format(new Date()) + "/" + uuid() + ".json";
+        String filePath = sdf.format(new Date()) + "/" + SystemConstant.getUuid() + ".json";
         paper.setStructPath(filePath);
         ByteArrayOutputStream out = null;
         try {
@@ -509,7 +509,7 @@ public class TaskExamPaperImportTemplete implements TaskImportTemplete {
                 }
             }
         }
-        String filePath = sdf.format(new Date()) + "/" + uuid() + ".json";
+        String filePath = sdf.format(new Date()) + "/" + SystemConstant.getUuid() + ".json";
         paper.setAnswerPath(filePath);
         ossUtil.upload(false, filePath, answerJson.toJSONString());
     }
@@ -550,14 +550,14 @@ public class TaskExamPaperImportTemplete implements TaskImportTemplete {
                 String suff = value.substring(11, value.indexOf(";"));
                 byte[] bytes = Base64.decodeBase64(value.substring(value.indexOf(",") + 1));
                 String filePath =
-                        "upload" + File.separator + sdf.format(new Date()) + File.separator + uuid() + "." + suff;
+                        "upload" + File.separator + sdf.format(new Date()) + File.separator + SystemConstant.getUuid() + "." + suff;
                 String md5 = BinaryUtil.toBase64String(BinaryUtil.calculateMd5(bytes));
                 ossUtil.upload(true, filePath, new ByteArrayInputStream(bytes), md5);
                 blockInfo.put("value", ossUtil.getAliYunOssPublicDomain().getPublicUrl() + "/" + filePath);
             } else {
                 String suff = value.substring(value.indexOf("."));
                 String filePath =
-                        "upload" + File.separator + sdf.format(new Date()) + File.separator + uuid() + "." + suff;
+                        "upload" + File.separator + sdf.format(new Date()) + File.separator + SystemConstant.getUuid() + "." + suff;
                 File audioFile = new File(attachmentDir.getAbsolutePath() + "/" + value);
                 ossUtil.upload(true, filePath, audioFile);
                 blockInfo.put("value", ossUtil.getAliYunOssPublicDomain().getPublicUrl() + "/" + filePath);
@@ -761,8 +761,4 @@ public class TaskExamPaperImportTemplete implements TaskImportTemplete {
             }
         }
     }
-
-    private String uuid() {
-        return UUID.randomUUID().toString().replaceAll("-", "");
-    }
 }

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

@@ -193,7 +193,7 @@ public class TEStudentController {
         //添加用户鉴权缓存
         AuthDto authDto = cacheService.addStudentAuthCache(teStudent.getId());
         //生成token
-        String token = String.valueOf(UUID.randomUUID()).replaceAll("-", "");
+        String token = SystemConstant.getUuid();
         cacheService.addStudentAccountCache(teStudent.getId());
         //判断会话来源
         Source source = null;

+ 16 - 78
themis-exam/src/main/java/com/qmth/themis/exam/listener/service/impl/MqOeLogicServiceImpl.java

@@ -1,18 +1,19 @@
 package com.qmth.themis.exam.listener.service.impl;
 
 import com.alibaba.fastjson.JSONArray;
-import com.google.gson.Gson;
 import com.qmth.themis.business.bean.status.MonitorStatusBean;
 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.dto.WebsocketDto;
-import com.qmth.themis.business.entity.*;
+import com.qmth.themis.business.entity.TEExamStudent;
+import com.qmth.themis.business.entity.TEExamStudentLog;
+import com.qmth.themis.business.entity.TIeExamInvigilateNotice;
+import com.qmth.themis.business.entity.TOeExamRecord;
 import com.qmth.themis.business.enums.*;
 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.exam.listener.service.MqOeLogicService;
@@ -40,9 +41,6 @@ import java.util.concurrent.ConcurrentHashMap;
 public class MqOeLogicServiceImpl implements MqOeLogicService {
     private final static Logger log = LoggerFactory.getLogger(MqOeLogicServiceImpl.class);
 
-    @Resource
-    RedisUtil redisUtil;
-
     @Resource
     TMRocketMessageService tmRocketMessageService;
 
@@ -63,7 +61,6 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
      *
      * @param s
      * @param webSocketMap
-     * @param gson
      * @param mqDto
      * @param key
      * @return
@@ -71,7 +68,6 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
     @Transactional
     protected Map<String, Object> oeMonitorFinishLogicPersisted(Object s,
                                                                 ConcurrentHashMap<String, WebSocketOeServer> webSocketMap,
-                                                                Gson gson,
                                                                 MqDto mqDto,
                                                                 String key) {
         Map<String, Object> map = null;
@@ -96,11 +92,7 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
                 TEExamStudentLog teExamStudentLog = new TEExamStudentLog(mqDto.getType().name(), mqDto.getType().getCode(), mqDto.getType().getCode(), examStudentCacheBean.getStudentId(), examStudentId, recordId, mqDto.getType().getCode());
                 teExamStudentLogService.save(teExamStudentLog);
 
-                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());
+                tmRocketMessageService.saveMqMessageSuccess(mqDto, key);
             }
         }
         return map;
@@ -111,7 +103,6 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
      *
      * @param s
      * @param webSocketMap
-     * @param gson
      * @param mqDto
      * @param key
      * @return
@@ -119,7 +110,6 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
     @Transactional
     protected Map<String, Object> oeWarningFinishLogicPersisted(Object s,
                                                                 ConcurrentHashMap<String, WebSocketOeServer> webSocketMap,
-                                                                Gson gson,
                                                                 MqDto mqDto,
                                                                 String key) {
         Map<String, Object> map = null;
@@ -141,11 +131,8 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
                 map.put(SystemConstant.BREACH_STATUS, FinishTypeEnum.valueOf(String.valueOf(mqDto.getProperties().get(SystemConstant.TYPE))).getCode());
                 TEExamStudentLog teExamStudentLog = new TEExamStudentLog(mqDto.getType().name(), mqDto.getType().getCode(), mqDto.getType().getCode(), examStudentCacheBean.getStudentId(), examStudentId, recordId, mqDto.getType().getCode());
                 teExamStudentLogService.save(teExamStudentLog);
-                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());
+
+                tmRocketMessageService.saveMqMessageSuccess(mqDto, key);
             }
         }
         return map;
@@ -155,14 +142,12 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
      * 点对点消息持久化逻辑
      *
      * @param webSocketMap
-     * @param gson
      * @param mqDto
      * @param key
      * @return
      */
     @Transactional
     protected Map<String, Object> oeImClusteringLogicPersisted(ConcurrentHashMap<String, WebSocketOeServer> webSocketMap,
-                                                               Gson gson,
                                                                MqDto mqDto,
                                                                String key) {
         Map<String, Object> map = null;
@@ -189,11 +174,7 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
                 TIeExamInvigilateNotice tIeExamInvigilateNotice = new TIeExamInvigilateNotice(examId, examActivityId, recordId, Long.parseLong(String.valueOf(prop.get("formUserId"))), examStudentId, MessageTypeEnum.valueOf(String.valueOf(prop.get(SystemConstant.TYPE)).toUpperCase()), String.valueOf(prop.get("content")));
                 tIeExamInvigilateNoticeService.saveOrUpdate(tIeExamInvigilateNotice);
 
-                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());
+                tmRocketMessageService.saveMqMessageSuccess(mqDto, key);
             }
         }
         return map;
@@ -203,13 +184,11 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
      * 监考强制活体验证持久化逻辑
      *
      * @param webSocketMap
-     * @param gson
      * @param mqDto
      * @param key
      * @return
      */
     protected Map<String, Object> oeLivenessVerifyLogicPersisted(ConcurrentHashMap<String, WebSocketOeServer> webSocketMap,
-                                                                 Gson gson,
                                                                  MqDto mqDto,
                                                                  String key) {
         Map<String, Object> map = null;
@@ -231,11 +210,7 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
                 TEExamStudentLog teExamStudentLog = new TEExamStudentLog(mqDto.getType().name(), mqDto.getType().getCode(), mqDto.getType().getCode(), examStudentCacheBean.getStudentId(), examStudentId, recordId, mqDto.getType().getCode());
                 teExamStudentLogService.save(teExamStudentLog);
 
-                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());
+                tmRocketMessageService.saveMqMessageSuccess(mqDto, key);
             }
         }
         return map;
@@ -249,58 +224,45 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
      */
     @Override
     public void execMqOeLogic(MqDto mqDto, String key) throws NoSuchAlgorithmException, IOException {
-        Gson gson = new Gson();
         ConcurrentHashMap<String, WebSocketOeServer> webSocketMap = WebSocketOeServer.getWebSocketMap();
         String tag = mqDto.getTag();
         if (Objects.equals(MqTagEnum.OE_MONITOR_FINISH.name(), tag)) {//强制离线交卷
             Set examRecordId = JacksonUtil.readJson(String.valueOf(mqDto.getBody()), Set.class);
             examRecordId.forEach(s -> {
-                Map<String, Object> map = oeMonitorFinishLogicPersisted(s, webSocketMap, gson, mqDto, key);
+                Map<String, Object> map = oeMonitorFinishLogicPersisted(s, webSocketMap, mqDto, key);
                 if (Objects.nonNull(map) && Objects.nonNull(map.get(SystemConstant.WEB_SOCKET_OE_SERVER))) {
                     WebSocketOeServer webSocketOeServer = (WebSocketOeServer) map.get(SystemConstant.WEB_SOCKET_OE_SERVER);
                     WebsocketDto websocketDto = new WebsocketDto(WebsocketTypeEnum.INVIGILATE_STOP_EXAM.name(), map);
                     webSocketOeServer.sendMessage(websocketDto);
-                } else {
-                    mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);
-                    redisUtil.delete(key, mqDto.getId());
                 }
             });
         } else if (Objects.equals(MqTagEnum.OE_WARNING_FINISH.name(), tag)) {//预警交卷
             Set examRecordId = JacksonUtil.readJson(String.valueOf(mqDto.getBody()), Set.class);
             examRecordId.forEach(s -> {
-                Map<String, Object> map = oeWarningFinishLogicPersisted(s, webSocketMap, gson, mqDto, key);
+                Map<String, Object> map = oeWarningFinishLogicPersisted(s, webSocketMap, mqDto, key);
                 if (Objects.nonNull(map) && Objects.nonNull(map.get(SystemConstant.WEB_SOCKET_OE_SERVER))) {
                     WebSocketOeServer webSocketOeServer = (WebSocketOeServer) map.get(SystemConstant.WEB_SOCKET_OE_SERVER);
                     WebsocketDto websocketDto = new WebsocketDto(WebsocketTypeEnum.BREACH_STOP_EXAM.name(), map);
                     webSocketOeServer.sendMessage(websocketDto);
-                } else {
-                    mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);
-                    redisUtil.delete(key, mqDto.getId());
                 }
             });
         } else if (Objects.equals(MqTagEnum.OE_IM_CLUSTERING.name(), tag)) {//点对点消息
-            Map<String, Object> map = oeImClusteringLogicPersisted(webSocketMap, gson, mqDto, key);
+            Map<String, Object> map = oeImClusteringLogicPersisted(webSocketMap, mqDto, key);
             if (Objects.nonNull(map) && Objects.nonNull(map.get(SystemConstant.WEB_SOCKET_OE_SERVER))) {
                 WebSocketOeServer webSocketOeServer = (WebSocketOeServer) map.get(SystemConstant.WEB_SOCKET_OE_SERVER);
                 WebsocketDto websocketDto = new WebsocketDto(WebsocketTypeEnum.INVIGILATE_NOTICE.name(), map);
                 webSocketOeServer.sendMessage(websocketDto);
-            } else {
-                mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);
-                redisUtil.delete(key, mqDto.getId());
             }
         } else if (Objects.equals(MqTagEnum.OE_IM_BROADCASTING.name(), tag)) {//广播消息
             JSONArray jsonArray = JSONArray.parseArray(String.valueOf(mqDto.getBody()));
             Set<String> examStudentIdentitySet = jsonArray.toJavaObject(Set.class);
             log.info("examStudentIdentitySet:{}", JacksonUtil.parseJson(examStudentIdentitySet));
         } else if (Objects.equals(MqTagEnum.OE_LIVENESS_VERIFY.name(), tag)) {//监考强制活体验证
-            Map<String, Object> map = oeLivenessVerifyLogicPersisted(webSocketMap, gson, mqDto, key);
+            Map<String, Object> map = oeLivenessVerifyLogicPersisted(webSocketMap, mqDto, key);
             if (Objects.nonNull(map) && Objects.nonNull(map.get(SystemConstant.WEB_SOCKET_OE_SERVER))) {
                 WebSocketOeServer webSocketOeServer = (WebSocketOeServer) map.get(SystemConstant.WEB_SOCKET_OE_SERVER);
                 WebsocketDto websocketDto = new WebsocketDto(WebsocketTypeEnum.INVIGILATE_LIVENESS_VERIFY.name(), map);
                 webSocketOeServer.sendMessage(websocketDto);
-            } else {
-                mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);
-                redisUtil.delete(key, mqDto.getId());
             }
         } else if (Objects.equals(MqTagEnum.OE_WEBSOCKET_MOBILE_ANSWER_READY.name(), tag)//移动端拍照/录音扫描完成
                 || Objects.equals(MqTagEnum.OE_WEBSOCKET_MOBILE_ANSWER_UPLOAD.name(), tag)//移动端拍照/录音上传成功
@@ -393,17 +355,10 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
                         default:
                             break;
                     }
-                    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());
+                    tmRocketMessageService.saveMqMessageSuccess(mqDto, key);
 
                     webSocketOeServer.sendMessage(websocketDto);
                 }
-            } else {
-                mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);
-                redisUtil.delete(key, mqDto.getId());
             }
         }
     }
@@ -416,7 +371,6 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
      */
     @Override
     public void execMqOeMobileLogic(MqDto mqDto, String key) throws NoSuchAlgorithmException, IOException {
-        Gson gson = new Gson();
         String tag = mqDto.getTag();
         ConcurrentHashMap<String, WebSocketMobileServer> webSocketMap = WebSocketMobileServer.getWebSocketMap();
         if (Objects.equals(MqTagEnum.EXAM_STOP.name(), tag)//考试退出
@@ -424,8 +378,6 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
             Long recordId = Long.parseLong(String.valueOf(mqDto.getBody()));
             ExamRecordStatusEnum examRecordStatusEnum = ExamRecordCacheUtil.getStatus(recordId);
             if (Objects.isNull(examRecordStatusEnum)) {
-                mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);
-                redisUtil.delete(key, mqDto.getId());
                 return;
             }
             Long examStudentId = ExamRecordCacheUtil.getExamStudentId(recordId);
@@ -472,17 +424,10 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
                         default:
                             break;
                     }
-                    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());
+                    tmRocketMessageService.saveMqMessageSuccess(mqDto, key);
 
                     webSocketFirstMobileServer.sendMessage(websocketDto);
                 }
-            } else {
-                mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);
-                redisUtil.delete(key, mqDto.getId());
             }
             String mobileSecondWebsocketId = ExamRecordCacheUtil.getMobileSecondWebsocketId(recordId);
             if (Objects.nonNull(mobileSecondWebsocketId) && Objects.nonNull(webSocketMap.get(mobileSecondWebsocketId + "-" + MonitorVideoSourceEnum.MOBILE_SECOND.name()))) {
@@ -514,17 +459,10 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
                         default:
                             break;
                     }
-                    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());
+                    tmRocketMessageService.saveMqMessageSuccess(mqDto, key);
 
                     webSocketSecondMobileServer.sendMessage(websocketDto);
                 }
-            } else {
-                mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);
-                redisUtil.delete(key, mqDto.getId());
             }
         }
     }

+ 39 - 122
themis-mq/src/main/java/com/qmth/themis/mq/service/impl/MqLogicServiceImpl.java

@@ -105,18 +105,12 @@ public class MqLogicServiceImpl implements MqLogicService {
     @Resource
     WarningService warningService;
 
-    @Resource
-    MqDtoService mqDtoService;
-
     @Resource
     TEConfigService teConfigService;
 
     @Resource
     UidUtil uidUtil;
 
-    @Resource
-    MqUtil mqUtil;
-
     @Resource
     TencentYunUtil tencentYunUtil;
 
@@ -139,12 +133,7 @@ public class MqLogicServiceImpl implements MqLogicService {
     @Transactional
     public void execMqMaxReconsumeTime(MqDto mqDto, String key) {
         //超过最大重试次数,保存到数据库,后续可以发短信通知系统管理人员
-        Gson gson = new Gson();
-        mqDto.setAck(SystemConstant.POSION_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());
+        tmRocketMessageService.saveMqMessageError(mqDto, key);
     }
 
     /**
@@ -156,7 +145,6 @@ public class MqLogicServiceImpl implements MqLogicService {
     @Override
     @Transactional
     public void execMqUserLogLogic(MqDto mqDto, String key) {
-        Gson gson = new Gson();
         String tag = mqDto.getTag();
         if (Objects.equals(MqTagEnum.USER.name(), tag)) {
             TEUserLog teUserLog = new TEUserLog(String.valueOf(mqDto.getBody()),
@@ -188,10 +176,7 @@ public class MqLogicServiceImpl implements MqLogicService {
             }
             teExamStudentLogService.save(teExamStudentLog);
         }
-        mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);
-        TMRocketMessage tmRocketMessage = gson.fromJson(gson.toJson(mqDto), TMRocketMessage.class);
-        tmRocketMessageService.saveOrUpdate(tmRocketMessage);
-        redisUtil.delete(key, mqDto.getId());
+        tmRocketMessageService.saveMqMessageSuccess(mqDto, key);
     }
 
     /**
@@ -203,14 +188,16 @@ public class MqLogicServiceImpl implements MqLogicService {
     @Override
     @Transactional
     public void execMqSessionLogic(MqDto mqDto, String key) {
-        Gson gson = new Gson();
         String sessionId = mqDto.getObjId();
         TBSession tbSession = (TBSession) redisUtil.getUserSession(sessionId);
-        if (Objects.nonNull(tbSession)) {
-            tbSessionService.saveOrUpdate(tbSession);
+        if (Objects.isNull(tbSession)) {
+            throw new BusinessException("缓存session为空");
         }
+//        tmRocketMessageService.saveMqMessageSuccess(mqDto, key);
         mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);
+        Gson gson = new Gson();
         TMRocketMessage tmRocketMessage = gson.fromJson(gson.toJson(mqDto), TMRocketMessage.class);
+        tmRocketMessage.setBody(JacksonUtil.parseJson(tmRocketMessage.getBody()));
         tmRocketMessageService.saveOrUpdate(tmRocketMessage);
         redisUtil.delete(key, mqDto.getId());
     }
@@ -223,7 +210,6 @@ public class MqLogicServiceImpl implements MqLogicService {
      */
     @Override
     public void execMqTaskLogic(MqDto mqDto, String key) {
-        Gson gson = new Gson();
         Map<String, Object> map = (Map<String, Object>) mqDto.getBody();
         String tag = mqDto.getTag();
 //        myThreadPool.arbitratePoolTaskExecutor.execute(() -> {
@@ -259,12 +245,7 @@ public class MqLogicServiceImpl implements MqLogicService {
             }
         }
 //        });
-        mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);
-        mqDto.setBody(JacksonUtil.parseJson(mqDto.getBody()));
-        TMRocketMessage tmRocketMessage = gson.fromJson(gson.toJson(mqDto), TMRocketMessage.class);
-        tmRocketMessage.setBody(JacksonUtil.parseJson(tmRocketMessage.getBody()));
-        tmRocketMessageService.saveOrUpdate(tmRocketMessage);
-        redisUtil.delete(key, mqDto.getId());
+        tmRocketMessageService.saveMqMessageSuccess(mqDto, key);
     }
 
     /**
@@ -276,7 +257,6 @@ public class MqLogicServiceImpl implements MqLogicService {
     @Override
     @Transactional
     public void execMqWebsocketUnNormalLogic(MqDto mqDto, String key) throws NoSuchAlgorithmException {
-        Gson gson = new Gson();
         Map<String, Object> tranMap = mqDto.getProperties();
         Long recordId = Long.parseLong(String.valueOf(tranMap.get(SystemConstant.RECORD_ID)));
         ExamRecordStatusEnum status = ExamRecordCacheUtil.getStatus(recordId);
@@ -308,11 +288,7 @@ public class MqLogicServiceImpl implements MqLogicService {
 //            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);
-        redisUtil.delete(key, mqDto.getId());
+        tmRocketMessageService.saveMqMessageSuccess(mqDto, key);
     }
 
     /**
@@ -325,7 +301,6 @@ public class MqLogicServiceImpl implements MqLogicService {
     @Override
     @Transactional
     public void execMqTencentVideoLogic(MqDto mqDto, String key) throws NoSuchAlgorithmException, IOException {
-        Gson gson = new Gson();
         Map<String, Object> tranMap = mqDto.getProperties();
         Long recordId = Long.parseLong(String.valueOf(tranMap.get(SystemConstant.RECORD_ID)));
         TOeExamRecord tOeExamRecord = tOeExamRecordService.getById(recordId);
@@ -381,11 +356,7 @@ public class MqLogicServiceImpl implements MqLogicService {
                 TMTencentVideoMessage tencentVideoMessage = new TMTencentVideoMessage(response.getRequestId(), JacksonUtil.parseJson(response));
                 tencentVideoMessageService.save(tencentVideoMessage);
 
-                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());
+                tmRocketMessageService.saveMqMessageSuccess(mqDto, key);
             }
         } else {
             mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);//表示成功处理
@@ -402,14 +373,9 @@ public class MqLogicServiceImpl implements MqLogicService {
 //    @Override
 //    @Transactional
 //    public void execMqCalculateObjectiveScoreLogic(MqDto mqDto, String key) {
-//        Gson gson = new Gson();
 //        Map<String, Object> param = (Map<String, Object>) mqDto.getBody();
 //        examRecordService.calculateObjectiveScore(param);
-//        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());
+//        tmRocketMessageService.saveMqMessageSuccess(mqDto, key);
 //    }
 
     /**
@@ -421,7 +387,6 @@ public class MqLogicServiceImpl implements MqLogicService {
     @Override
     @Transactional
     public void execMqFaceVerifySaveLogic(MqDto mqDto, String key) {
-        Gson gson = new Gson();
         Map<String, Object> param = (Map<String, Object>) mqDto.getBody();
         Long id = (Long) param.get(SystemConstant.ID);
         Long recordId = (Long) param.get(SystemConstant.RECORD_ID);
@@ -457,7 +422,7 @@ public class MqLogicServiceImpl implements MqLogicService {
                 if (Objects.nonNull(realness) && realness.intValue() == 0) {//真实性异常
                     String realnessErrorRandom = ExamRecordCacheUtil.getRealnessErrorRandom(recordId);
                     if (Objects.isNull(realnessErrorRandom)) {
-                        realnessErrorRandom = String.valueOf(UUID.randomUUID()).replaceAll("-", "");
+                        realnessErrorRandom = SystemConstant.getUuid();
                         ExamRecordCacheUtil.setRealnessErrorRandom(recordId, realnessErrorRandom);
                     }
                     ExamRecordCacheUtil
@@ -469,7 +434,7 @@ public class MqLogicServiceImpl implements MqLogicService {
                     Integer count = ExamRecordCacheUtil.getRealnessErrorNum(recordId).get();
                     if (count > teConfig.getRealnessCount()) {
                         ExamRecordCacheUtil.setRealnessErrorRandom(recordId,
-                                String.valueOf(UUID.randomUUID()).replaceAll("-", ""));
+                                SystemConstant.getUuid());
                         ExamRecordCacheUtil.setRealnessErrorNum(recordId, new AtomicInteger(0));
                         warningService.realnessError(warningDto);
                     }
@@ -482,7 +447,7 @@ public class MqLogicServiceImpl implements MqLogicService {
                     if (faceCount > 1) {//多张人脸
                         String multipleFaceRandom = ExamRecordCacheUtil.getMultipleFaceCountErrorRandom(recordId);
                         if (Objects.isNull(multipleFaceRandom)) {
-                            multipleFaceRandom = String.valueOf(UUID.randomUUID()).replaceAll("-", "");
+                            multipleFaceRandom = SystemConstant.getUuid();
                             ExamRecordCacheUtil.setMultipleFaceCountErrorRandom(recordId, multipleFaceRandom);
                         }
                         ExamRecordCacheUtil.setMultipleFaceCountErrorNum(recordId,
@@ -494,14 +459,14 @@ public class MqLogicServiceImpl implements MqLogicService {
                         Integer count = ExamRecordCacheUtil.getMultipleFaceCountErrorNum(recordId).get();
                         if (count > teConfig.getMultipleFaceCountError()) {
                             ExamRecordCacheUtil.setMultipleFaceCountErrorRandom(recordId,
-                                    String.valueOf(UUID.randomUUID()).replaceAll("-", ""));
+                                    SystemConstant.getUuid());
                             ExamRecordCacheUtil.setMultipleFaceCountErrorNum(recordId, new AtomicInteger(0));
                             warningService.faceCountError(warningDto);
                         }
                     } else if (faceCount <= 0) {
                         String noFaceRandom = ExamRecordCacheUtil.getNoFaceCountErrorRandom(recordId);
                         if (Objects.isNull(noFaceRandom)) {
-                            noFaceRandom = String.valueOf(UUID.randomUUID()).replaceAll("-", "");
+                            noFaceRandom = SystemConstant.getUuid();
                             ExamRecordCacheUtil.setNoFaceCountErrorRandom(recordId, noFaceRandom);
                         }
                         ExamRecordCacheUtil.setNoFaceCountErrorNum(recordId,
@@ -513,7 +478,7 @@ public class MqLogicServiceImpl implements MqLogicService {
                         Integer count = ExamRecordCacheUtil.getNoFaceCountErrorNum(recordId).get();
                         if (count > teConfig.getNoFaceCountError()) {
                             ExamRecordCacheUtil.setNoFaceCountErrorRandom(recordId,
-                                    String.valueOf(UUID.randomUUID()).replaceAll("-", ""));
+                                    SystemConstant.getUuid());
                             ExamRecordCacheUtil.setNoFaceCountErrorNum(recordId, new AtomicInteger(0));
                             warningService.faceCountError(warningDto);
                         }
@@ -521,7 +486,7 @@ public class MqLogicServiceImpl implements MqLogicService {
                 } else if (Objects.equals(VerifyExceptionEnum.FACE_COMPARE_ERROR, warningEnum)) {//人脸比对异常
                     String faceCompareErrorRandom = ExamRecordCacheUtil.getFaceCompareErrorRandom(recordId);
                     if (Objects.isNull(faceCompareErrorRandom)) {
-                        faceCompareErrorRandom = String.valueOf(UUID.randomUUID()).replaceAll("-", "");
+                        faceCompareErrorRandom = SystemConstant.getUuid();
                         ExamRecordCacheUtil.setFaceCompareErrorRandom(recordId, faceCompareErrorRandom);
                     }
                     ExamRecordCacheUtil
@@ -533,14 +498,14 @@ public class MqLogicServiceImpl implements MqLogicService {
                     Integer count = ExamRecordCacheUtil.getFaceCompareErrorNum(recordId).get();
                     if (count > teConfig.getTotalFaceCompareErrorCount()) {
                         ExamRecordCacheUtil.setFaceCompareErrorRandom(recordId,
-                                String.valueOf(UUID.randomUUID()).replaceAll("-", ""));
+                                SystemConstant.getUuid());
                         ExamRecordCacheUtil.setFaceCompareErrorNum(recordId, new AtomicInteger(0));
                         warningService.faceCompareError(warningDto);
                     }
                 } else if (Objects.equals(VerifyExceptionEnum.EYE_CLOSE_ERROR, warningEnum)) {//闭眼检测异常
                     String eyeCloseErrorRandom = ExamRecordCacheUtil.getEyeCloseErrorRandom(recordId);
                     if (Objects.isNull(eyeCloseErrorRandom)) {
-                        eyeCloseErrorRandom = String.valueOf(UUID.randomUUID()).replaceAll("-", "");
+                        eyeCloseErrorRandom = SystemConstant.getUuid();
                         ExamRecordCacheUtil.setEyeCloseErrorRandom(recordId, eyeCloseErrorRandom);
                     }
                     ExamRecordCacheUtil
@@ -552,7 +517,7 @@ public class MqLogicServiceImpl implements MqLogicService {
                     Integer count = ExamRecordCacheUtil.getEyeCloseErrorNum(recordId).get();
                     if (count > teConfig.getTotalEyeCloseErrorCount()) {
                         ExamRecordCacheUtil.setEyeCloseErrorRandom(recordId,
-                                String.valueOf(UUID.randomUUID()).replaceAll("-", ""));
+                                SystemConstant.getUuid());
                         ExamRecordCacheUtil.setEyeCloseErrorNum(recordId, new AtomicInteger(0));
                         warningService.eyeCloseError(warningDto);
                     }
@@ -562,11 +527,7 @@ public class MqLogicServiceImpl implements MqLogicService {
             faceVerifyHistoryService
                     .save(id, recordId, type, photoUrl, faceCount, similarity, realness, time, exception, null);
         }
-        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());
+        tmRocketMessageService.saveMqMessageSuccess(mqDto, key);
     }
 
     /**
@@ -578,7 +539,6 @@ public class MqLogicServiceImpl implements MqLogicService {
     @Override
     @Transactional
     public void execMqLivenessVerifySaveLogic(MqDto mqDto, String key) {
-        Gson gson = new Gson();
         Map<String, Object> param = (Map<String, Object>) mqDto.getBody();
         Long id = (Long) param.get(SystemConstant.ID);
         Long recordId = (Long) param.get(SystemConstant.RECORD_ID);
@@ -637,7 +597,7 @@ public class MqLogicServiceImpl implements MqLogicService {
                         if (faceCount > 1) {//多张人脸
                             String multipleFaceRandom = ExamRecordCacheUtil.getMultipleFaceCountErrorRandom(recordId);
                             if (Objects.isNull(multipleFaceRandom)) {
-                                multipleFaceRandom = String.valueOf(UUID.randomUUID()).replaceAll("-", "");
+                                multipleFaceRandom = SystemConstant.getUuid();
                                 ExamRecordCacheUtil.setMultipleFaceCountErrorRandom(recordId, multipleFaceRandom);
                             }
                             ExamRecordCacheUtil.setMultipleFaceCountErrorNum(recordId,
@@ -649,14 +609,14 @@ public class MqLogicServiceImpl implements MqLogicService {
                             Integer count = ExamRecordCacheUtil.getMultipleFaceCountErrorNum(recordId).get();
                             if (count > teConfig.getMultipleFaceCountError()) {
                                 ExamRecordCacheUtil.setMultipleFaceCountErrorRandom(recordId,
-                                        String.valueOf(UUID.randomUUID()).replaceAll("-", ""));
+                                        SystemConstant.getUuid());
                                 ExamRecordCacheUtil.setMultipleFaceCountErrorNum(recordId, new AtomicInteger(0));
                                 warningService.faceCountError(warningDto);
                             }
                         } else if (faceCount <= 0) {
                             String noFaceRandom = ExamRecordCacheUtil.getNoFaceCountErrorRandom(recordId);
                             if (Objects.isNull(noFaceRandom)) {
-                                noFaceRandom = String.valueOf(UUID.randomUUID()).replaceAll("-", "");
+                                noFaceRandom = SystemConstant.getUuid();
                                 ExamRecordCacheUtil.setNoFaceCountErrorRandom(recordId, noFaceRandom);
                             }
                             ExamRecordCacheUtil.setNoFaceCountErrorNum(recordId,
@@ -668,7 +628,7 @@ public class MqLogicServiceImpl implements MqLogicService {
                             Integer count = ExamRecordCacheUtil.getNoFaceCountErrorNum(recordId).get();
                             if (count > teConfig.getNoFaceCountError()) {
                                 ExamRecordCacheUtil.setNoFaceCountErrorRandom(recordId,
-                                        String.valueOf(UUID.randomUUID()).replaceAll("-", ""));
+                                        SystemConstant.getUuid());
                                 ExamRecordCacheUtil.setNoFaceCountErrorNum(recordId, new AtomicInteger(0));
                                 warningService.faceCountError(warningDto);
                             }
@@ -678,7 +638,7 @@ public class MqLogicServiceImpl implements MqLogicService {
                                 String.valueOf(jsonObject.get("photoUrl")));
                         String faceCompareErrorRandom = ExamRecordCacheUtil.getFaceCompareErrorRandom(recordId);
                         if (Objects.isNull(faceCompareErrorRandom)) {
-                            faceCompareErrorRandom = String.valueOf(UUID.randomUUID()).replaceAll("-", "");
+                            faceCompareErrorRandom = SystemConstant.getUuid();
                             ExamRecordCacheUtil.setFaceCompareErrorRandom(recordId, faceCompareErrorRandom);
                         }
                         ExamRecordCacheUtil.setFaceCompareErrorNum(recordId,
@@ -690,7 +650,7 @@ public class MqLogicServiceImpl implements MqLogicService {
                         Integer count = ExamRecordCacheUtil.getFaceCompareErrorNum(recordId).get();
                         if (count > teConfig.getTotalFaceCompareErrorCount()) {
                             ExamRecordCacheUtil.setFaceCompareErrorRandom(recordId,
-                                    String.valueOf(UUID.randomUUID()).replaceAll("-", ""));
+                                    SystemConstant.getUuid());
                             ExamRecordCacheUtil.setFaceCompareErrorNum(recordId, new AtomicInteger(0));
                             warningService.faceCompareError(warningDto);
                         }
@@ -701,11 +661,7 @@ public class MqLogicServiceImpl implements MqLogicService {
             livenessVerifyHistoryService
                     .save(id, recordId, type, actions, retry, startTime, finishTime, exception, null);
         }
-        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());
+        tmRocketMessageService.saveMqMessageSuccess(mqDto, key);
     }
 
     /**
@@ -717,15 +673,10 @@ public class MqLogicServiceImpl implements MqLogicService {
     @Override
     @Transactional
     public void execMqRecordPersistedLogic(MqDto mqDto, String key) {
-        Gson gson = new Gson();
         Map<String, Object> param = (Map<String, Object>) mqDto.getBody();
         Long recordId = (Long) param.get(SystemConstant.RECORD_ID);
         commonService.persisted(recordId);
-        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());
+        tmRocketMessageService.saveMqMessageSuccess(mqDto, key);
     }
 
     /**
@@ -737,27 +688,17 @@ public class MqLogicServiceImpl implements MqLogicService {
     @Override
     @Transactional
     public void execMqRecordBreakHistoryPersistedLogic(MqDto mqDto, String key) {
-        Gson gson = new Gson();
         Long breakId = Long.parseLong(mqDto.getObjId());
         tOeExamBreakHistoryService.examRecordBreakHistoryDataSave(breakId);
-        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());
+        tmRocketMessageService.saveMqMessageSuccess(mqDto, key);
     }
 
     @Override
     @Transactional
     public void execMqRecordUpdateLogic(MqDto mqDto, String key) {
-        Gson gson = new Gson();
         Long recordId = Long.parseLong(mqDto.getObjId());
         examRecordService.examRecordDataSave(recordId);
-        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());
+        tmRocketMessageService.saveMqMessageSuccess(mqDto, key);
     }
 
     /**
@@ -858,11 +799,7 @@ public class MqLogicServiceImpl implements MqLogicService {
                 teExamStudentLogService.update(teExamStudentLogUpdateWrapper);
             }
         }
-        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());
+        tmRocketMessageService.saveMqMessageSuccess(mqDto, key);
     }
 
     /**
@@ -873,16 +810,11 @@ public class MqLogicServiceImpl implements MqLogicService {
      */
     @Override
     public void execMqCalculateScoreLogic(MqDto mqDto, String key) {
-        Gson gson = new Gson();
         Map<String, Object> param = (Map<String, Object>) mqDto.getBody();
         Long examId = (Long) param.get(SystemConstant.EXAM_ID);
         Long taskId = (Long) param.get(SystemConstant.TASK_ID);
         teExamService.calculateScore(examId, taskId);
-        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());
+        tmRocketMessageService.saveMqMessageSuccess(mqDto, key);
     }
 
     /**
@@ -891,14 +823,9 @@ public class MqLogicServiceImpl implements MqLogicService {
     @Override
     @Transactional
     public void execMqExamStudentUpdateLogic(MqDto mqDto, String key) {
-        Gson gson = new Gson();
         Map<String, Object> param = (Map<String, Object>) mqDto.getBody();
         teExamStudentService.updateByMqMsg(param);
-        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());
+        tmRocketMessageService.saveMqMessageSuccess(mqDto, key);
     }
 
     /**
@@ -978,12 +905,7 @@ public class MqLogicServiceImpl implements MqLogicService {
         //更新移动端第一机位推流状态为stop
 //        SystemConstant.mobileMonitorStatusStop(examStudentCacheBean.getStudentId(), recordId, true);
 
-        Gson gson = new Gson();
-        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());
+        tmRocketMessageService.saveMqMessageSuccess(mqDto, key);
     }
 
     /**
@@ -995,7 +917,6 @@ public class MqLogicServiceImpl implements MqLogicService {
     @Override
     @Transactional
     public void execMqExamBreakDelayLogic(MqDto mqDto, String key) {
-        Gson gson = new Gson();
         Map<String, Object> tranMap = mqDto.getProperties();
         Long recordId = Long.parseLong(String.valueOf(tranMap.get(SystemConstant.RECORD_ID)));
         ExamRecordStatusEnum statusEnum = ExamRecordCacheUtil.getStatus(recordId);
@@ -1005,11 +926,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);
-        redisUtil.delete(key, mqDto.getId());
+        tmRocketMessageService.saveMqMessageSuccess(mqDto, key);
     }
 
     /**
@@ -1140,12 +1057,12 @@ public class MqLogicServiceImpl implements MqLogicService {
 //                    .add(String.format("%02d", nowTime.getMonthValue())).add(File.separator)
 //                    .add(String.format("%02d", nowTime.getDayOfMonth()));
 //            if (oss) {//上传至oss
-//                stringJoiner.add(File.separator).add(String.valueOf(UUID.randomUUID()).replaceAll("-", "")).add(fileType);
+//                stringJoiner.add(File.separator).add(SystemConstant.getUuid()).add(fileType);
 //                ossUtil.upload(ossUtil.isPublic(type), stringJoiner.toString(), inputStream, md5);
 //                jsonObject.put("qrCodeUrl", aliYunOssPublicDomain.getPublicUrl() + File.separator + stringJoiner.toString());
 //            } else {//上传至服务器
 //                File finalFile = new File(
-//                        stringJoiner.add(File.separator).add(String.valueOf(UUID.randomUUID()).replaceAll("-", ""))
+//                        stringJoiner.add(File.separator).add(SystemConstant.getUuid())
 //                                .add(fileType).toString());
 //                if (!finalFile.exists()) {
 //                    finalFile.getParentFile().mkdirs();

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

@@ -3,19 +3,15 @@ package com.qmth.themis.task.listener.service.impl;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.google.gson.Gson;
 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.TEExam;
 import com.qmth.themis.business.entity.TEExamActivity;
-import com.qmth.themis.business.entity.TMRocketMessage;
 import com.qmth.themis.business.enums.MqTagEnum;
-import com.qmth.themis.business.service.TEExamService;
 import com.qmth.themis.business.service.TMRocketMessageService;
 import com.qmth.themis.business.util.JacksonUtil;
-import com.qmth.themis.business.util.RedisUtil;
 import com.qmth.themis.task.enums.QuartzTaskEnum;
 import com.qmth.themis.task.listener.service.MqTaskLogicService;
 import com.qmth.themis.task.quartz.ExamActivityJob;
@@ -27,7 +23,10 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
-import java.util.*;
+import java.util.Calendar;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
 
 /**
  * @Description: mq执行逻辑 impl
@@ -40,9 +39,6 @@ import java.util.*;
 public class MqTaskLogicServiceImpl implements MqTaskLogicService {
     private final static Logger log = LoggerFactory.getLogger(MqTaskLogicServiceImpl.class);
 
-    @Resource
-    RedisUtil redisUtil;
-
     @Resource
     TMRocketMessageService tmRocketMessageService;
 
@@ -59,18 +55,12 @@ public class MqTaskLogicServiceImpl implements MqTaskLogicService {
     @Transactional
     public void execMqMaxReconsumeTime(MqDto mqDto, String key) {
         //超过最大重试次数,保存到数据库,后续可以发短信通知系统管理人员
-        Gson gson = new Gson();
-        mqDto.setAck(SystemConstant.POSION_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());
+        tmRocketMessageService.saveMqMessageError(mqDto, key);
     }
 
     @Override
     @Transactional
     public void execMqQuartzLogic(MqDto mqDto, String key) {
-        Gson gson = new Gson();
         Map<String, Object> tranMap = mqDto.getProperties();
         String oper = String.valueOf(tranMap.get("oper"));
         Object o = JacksonUtil.parseJson(tranMap.get("exam"));
@@ -98,11 +88,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);
-        redisUtil.delete(key, mqDto.getId());
+        tmRocketMessageService.saveMqMessageSuccess(mqDto, key);
     }
 
     /**

+ 21 - 19
themis-task/src/main/java/com/qmth/themis/task/quartz/MqJob.java

@@ -1,12 +1,9 @@
 package com.qmth.themis.task.quartz;
 
-import com.google.gson.Gson;
 import com.qmth.themis.business.constant.SystemConstant;
 import com.qmth.themis.business.dto.MqDto;
-import com.qmth.themis.business.entity.TMRocketMessage;
 import com.qmth.themis.business.service.ProducerServer;
 import com.qmth.themis.business.service.TMRocketMessageService;
-import com.qmth.themis.business.util.JacksonUtil;
 import com.qmth.themis.business.util.RedisUtil;
 import org.quartz.JobExecutionContext;
 import org.slf4j.Logger;
@@ -58,7 +55,13 @@ public class MqJob extends QuartzJobBean {
             Map map = redisUtil.getHashEntries(redisKey);
             map.forEach((k, v) -> {
                 MqDto mqDto = (MqDto) v;
-                producerServer.sendOneWay(mqDto);
+                if (mqDto.getReconsume() >= SystemConstant.MAXRECONSUMETIMES) {
+                    tmRocketMessageService.saveMqMessageError(mqDto, redisKey);
+                } else {
+                    mqDto.setReconsume(mqDto.getReconsume() + 1);
+                    redisUtil.set(redisKey, mqDto.getId(), mqDto);
+                    producerServer.sendOneWay(mqDto);
+                }
             });
         }
     }
@@ -75,11 +78,16 @@ public class MqJob extends QuartzJobBean {
             Map map = redisUtil.getHashEntries(redisKey);
             map.forEach((k, v) -> {
                 MqDto mqDto = (MqDto) v;
-                Map<String, Object> prop = mqDto.getProperties();
-                Long mqExecTime = Long.parseLong(String.valueOf(prop.get("mqExecTime")));
-                //mq为延时消息,所以每分钟扫描时有可能mq消息还未执行,所以加上mq消息等级和当前时间对比,如超过mq的延时时间一分钟则执行
-                if (Objects.nonNull(mqExecTime) && (mqExecTime - System.currentTimeMillis()) / 1000 / 60 <= -1) {
-                    producerServer.asyncDelayMsg(mqDto);
+                if (mqDto.getReconsume() >= SystemConstant.MAXRECONSUMETIMES) {
+                    tmRocketMessageService.saveMqMessageError(mqDto, redisKey);
+                } else {
+                    mqDto.setReconsume(mqDto.getReconsume() + 1);
+                    Map<String, Object> prop = mqDto.getProperties();
+                    Long mqExecTime = Long.parseLong(String.valueOf(prop.get("mqExecTime")));
+                    //mq为延时消息,所以每分钟扫描时有可能mq消息还未执行,所以加上mq消息等级和当前时间对比,如超过mq的延时时间一分钟则执行
+                    if (Objects.nonNull(mqExecTime) && (mqExecTime - System.currentTimeMillis()) / 1000 / 60 <= -1) {
+                        producerServer.asyncDelayMsg(mqDto);
+                    }
                 }
             });
         }
@@ -97,18 +105,12 @@ public class MqJob extends QuartzJobBean {
             Map map = redisUtil.getHashEntries(redisKey);
             map.forEach((k, v) -> {
                 MqDto mqDto = (MqDto) v;
-                int reconsume = mqDto.getReconsume();
-                if (reconsume < SystemConstant.MAXRECONSUMETIMES) {
+                if (mqDto.getReconsume() >= SystemConstant.MAXRECONSUMETIMES) {
+                    tmRocketMessageService.saveMqMessageError(mqDto, redisKey);
+                } else {
                     mqDto.setReconsume(mqDto.getReconsume() + 1);
-                    redisUtil.set(SystemConstant.MQ_BROADCAST_TOPIC_BUFFER_LIST, mqDto.getId(), mqDto);
+                    redisUtil.set(redisKey, mqDto.getId(), mqDto);
                     producerServer.sendOneWay(mqDto);
-                } else {
-                    mqDto.setAck(SystemConstant.POSION_ACK_TYPE);
-                    Gson gson = new Gson();
-                    TMRocketMessage tmRocketMessage = gson.fromJson(gson.toJson(mqDto), TMRocketMessage.class);
-                    tmRocketMessage.setBody(JacksonUtil.parseJson(tmRocketMessage.getBody()));
-                    tmRocketMessageService.saveOrUpdate(tmRocketMessage);
-                    redisUtil.delete(SystemConstant.MQ_BROADCAST_TOPIC_BUFFER_LIST, mqDto.getId());
                 }
             });
         }

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

@@ -47,11 +47,11 @@ public class StartRunning implements CommandLineRunner {
     @Resource
     DictionaryConfig dictionaryConfig;
 
-    @SuppressWarnings({ "unchecked", "rawtypes" })
+    @SuppressWarnings({"unchecked", "rawtypes"})
     @Override
     public void run(String... args) throws Exception {
         log.info("服务器启动时执行 start");
-        log.info("增加mqjob start");
+//        log.info("增加mqjob start");
         Map mqMap = new HashMap();
         mqMap.put(SystemConstant.NAME, MqJob.class.getName());
         quartzService.deleteJob(QuartzTaskEnum.MQ_JOB_NAME.name(), QuartzTaskEnum.MQ_JOB_GROUP_NAME.name());