wangliang hace 4 años
padre
commit
b2097e9612
Se han modificado 30 ficheros con 171 adiciones y 376 borrados
  1. 2 2
      themis-backend/src/main/java/com/qmth/themis/backend/api/TBExamInvigilateUserController.java
  2. 3 3
      themis-backend/src/main/java/com/qmth/themis/backend/api/TBUserController.java
  3. 1 2
      themis-backend/src/main/java/com/qmth/themis/backend/api/TEExamActivityController.java
  4. 3 3
      themis-backend/src/main/java/com/qmth/themis/backend/api/TEExamController.java
  5. 1 1
      themis-backend/src/main/java/com/qmth/themis/backend/api/TEExamPaperController.java
  6. 1 1
      themis-backend/src/main/java/com/qmth/themis/backend/api/TEExamStudentController.java
  7. 7 4
      themis-backend/src/main/java/com/qmth/themis/backend/api/TIeInvigilateController.java
  8. 1 8
      themis-backend/src/main/java/com/qmth/themis/backend/interceptor/AuthInterceptor.java
  9. 8 32
      themis-backend/src/main/java/com/qmth/themis/backend/start/StartRunning.java
  10. 0 7
      themis-backend/src/main/java/com/qmth/themis/backend/websocket/WebSocketAdminServer.java
  11. 6 6
      themis-business/src/main/java/com/qmth/themis/business/dto/MqDto.java
  12. 4 4
      themis-business/src/main/java/com/qmth/themis/business/entity/TMRocketMessage.java
  13. 0 51
      themis-business/src/main/java/com/qmth/themis/business/enums/MqEnum.java
  14. 8 53
      themis-business/src/main/java/com/qmth/themis/business/enums/MqGroupEnum.java
  15. 54 26
      themis-business/src/main/java/com/qmth/themis/business/enums/MqTagEnum.java
  16. 5 19
      themis-business/src/main/java/com/qmth/themis/business/service/impl/MqDtoServiceImpl.java
  17. 2 3
      themis-business/src/main/java/com/qmth/themis/business/service/impl/TEExamServiceImpl.java
  18. 2 3
      themis-business/src/main/java/com/qmth/themis/business/service/impl/TOeExamRecordServiceImpl.java
  19. 1 4
      themis-business/src/main/java/com/qmth/themis/business/templete/TaskExportCommon.java
  20. 5 2
      themis-business/src/main/java/com/qmth/themis/business/templete/TaskImportCommon.java
  21. 1 2
      themis-exam/src/main/java/com/qmth/themis/exam/api/TEFaceController.java
  22. 1 2
      themis-exam/src/main/java/com/qmth/themis/exam/api/TELivenessController.java
  23. 4 4
      themis-exam/src/main/java/com/qmth/themis/exam/api/TEStudentController.java
  24. 1 10
      themis-exam/src/main/java/com/qmth/themis/exam/interceptor/AuthInterceptor.java
  25. 9 24
      themis-exam/src/main/java/com/qmth/themis/exam/listener/service/impl/MqOeLogicServiceImpl.java
  26. 14 36
      themis-exam/src/main/java/com/qmth/themis/exam/start/StartRunning.java
  27. 1 2
      themis-exam/src/main/java/com/qmth/themis/exam/websocket/WebSocketOeServer.java
  28. 11 11
      themis-mq/src/main/java/com/qmth/themis/mq/service/impl/MqLogicServiceImpl.java
  29. 0 17
      themis-task/src/main/java/com/qmth/themis/task/quartz/service/impl/QuartzLogicServiceImpl.java
  30. 15 34
      themis-task/src/main/java/com/qmth/themis/task/start/StartRunning.java

+ 2 - 2
themis-backend/src/main/java/com/qmth/themis/backend/api/TBExamInvigilateUserController.java

@@ -156,7 +156,7 @@ public class TBExamInvigilateUserController {
             transMap.put("orgId", tbUser.getOrgId());
             transMap.put("remark", tbAttachment.getRemark());
             //mq发送消息start
-            MqDto mqDto = new MqDto(MqTopicEnum.themisTopic.getCode(), MqTagEnum.roomCodeImport.name(), transMap, MqEnum.TASK_LOG, String.valueOf(tbTaskHistory.getId()), tbUser.getName());
+            MqDto mqDto = new MqDto(MqTopicEnum.themisTopic.getCode(), MqTagEnum.roomCodeImport.name(), transMap, MqTagEnum.roomCodeImport, String.valueOf(tbTaskHistory.getId()), tbUser.getName());
             mqDtoService.assembleSendOneWayMsg(mqDto);
             //mq发送消息end
         } catch (Exception e) {
@@ -193,7 +193,7 @@ public class TBExamInvigilateUserController {
                 transMap.put("createId", tbUser.getId());
                 transMap.put("orgId", tbUser.getOrgId());
                 //mq发送消息start
-                MqDto mqDto = new MqDto(MqTopicEnum.themisTopic.getCode(), MqTagEnum.roomCodeExport.name(), transMap, MqEnum.TASK_LOG, String.valueOf(tbTaskHistory.getId()), tbUser.getName());
+                MqDto mqDto = new MqDto(MqTopicEnum.themisTopic.getCode(), MqTagEnum.roomCodeExport.name(), transMap, MqTagEnum.roomCodeExport, String.valueOf(tbTaskHistory.getId()), tbUser.getName());
                 mqDtoService.assembleSendOneWayMsg(mqDto);
                 //mq发送消息end
             } else {

+ 3 - 3
themis-backend/src/main/java/com/qmth/themis/backend/api/TBUserController.java

@@ -185,8 +185,8 @@ public class TBUserController {
         TBSession tbSession = new TBSession(sessionId, String.valueOf(user.getId()), authDto.getRoleCodes().toString(), source, platform.name(), deviceId, ServletUtil.getRequest().getLocalAddr(), token, expire);
         redisUtil.setUserSession(sessionId, tbSession, redisExpire);
         //mq发送消息start
-        mqDtoService.assembleSendOneWayMsg(MqTopicEnum.themisTopic.getCode(), platform.name(), tbSession, MqEnum.SESSION.name(), tbSession.getId(), user.getLoginName());
-        mqDtoService.assembleSendOneWayMsg(MqTopicEnum.themisTopic.getCode(), authDto.getRoleCodes().toString().contains(RoleEnum.STUDENT.name()) ? MqTagEnum.student.name() : MqTagEnum.user.name(), SystemOperationEnum.LOGIN, MqEnum.USER_LOG.name(), user.getId(), user.getLoginName());
+        mqDtoService.assembleSendOneWayMsg(MqTopicEnum.themisTopic.getCode(), platform.name(), tbSession, platform.name(), tbSession.getId(), user.getLoginName());
+        mqDtoService.assembleSendOneWayMsg(MqTopicEnum.themisTopic.getCode(), authDto.getRoleCodes().toString().contains(RoleEnum.STUDENT.name()) ? MqTagEnum.student.name() : MqTagEnum.user.name(), SystemOperationEnum.LOGIN, MqTagEnum.user.name(), user.getId(), user.getLoginName());
         //mq发送消息end
         //测试
         String test = SignatureInfo.build(SignatureType.TOKEN, sessionId, token);
@@ -525,7 +525,7 @@ public class TBUserController {
             cacheService.removeAccountCache(tbUser.getId());
         }
         //mq发送消息start
-        mqDtoService.assembleSendOneWayMsg(MqTopicEnum.themisTopic.getCode(), authDto.getRoleCodes().toString().contains(RoleEnum.STUDENT.name()) ? MqTagEnum.student.name() : MqTagEnum.user.name(), SystemOperationEnum.LOGOUT, MqEnum.USER_LOG.name(), tbUser.getId(), tbUser.getLoginName());
+        mqDtoService.assembleSendOneWayMsg(MqTopicEnum.themisTopic.getCode(), authDto.getRoleCodes().toString().contains(RoleEnum.STUDENT.name()) ? MqTagEnum.student.name() : MqTagEnum.user.name(), SystemOperationEnum.LOGOUT, MqTagEnum.user.name(), tbUser.getId(), tbUser.getLoginName());
         //mq发送消息end
         return ResultUtil.ok(JacksonUtil.parseJson(SystemConstant.SUCCESS));
     }

+ 1 - 2
themis-backend/src/main/java/com/qmth/themis/backend/api/TEExamActivityController.java

@@ -10,7 +10,6 @@ import com.qmth.themis.business.entity.TBUser;
 import com.qmth.themis.business.entity.TEExam;
 import com.qmth.themis.business.entity.TEExamActivity;
 import com.qmth.themis.business.enums.FieldUniqueEnum;
-import com.qmth.themis.business.enums.MqEnum;
 import com.qmth.themis.business.enums.MqTagEnum;
 import com.qmth.themis.business.enums.MqTopicEnum;
 import com.qmth.themis.business.service.MqDtoService;
@@ -80,7 +79,7 @@ public class TEExamActivityController {
             prop.put("oper", "insert");
             prop.put("exam", teExam);
             if (Objects.nonNull(teExamActivityList.get(0)) && teExamActivityList.get(0).getEnable() == 1) {
-                MqDto mqDto = new MqDto(MqTopicEnum.themisTopic.getCode(), MqTagEnum.examActivity.name(), JacksonUtil.parseJson(teExamActivityList), MqEnum.QUARTZ_LOG, String.valueOf(teExam.getId()), prop, tbUser.getName());
+                MqDto mqDto = new MqDto(MqTopicEnum.themisTopic.getCode(), MqTagEnum.examActivity.name(), JacksonUtil.parseJson(teExamActivityList), MqTagEnum.examActivity, String.valueOf(teExam.getId()), prop, tbUser.getName());
                 mqDtoService.assembleSendOneWayMsg(mqDto);
             }
             //新增quartz任务,发送mq消息end

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

@@ -101,7 +101,7 @@ public class TEExamController {
                 Map<String, Object> prop = new HashMap<>();
                 prop.put("oper", "delete");
                 if (Objects.nonNull(teExamActivityList.get(0)) && teExamActivityList.get(0).getEnable() == 1) {
-                    MqDto mqDto = new MqDto(MqTopicEnum.themisTopic.getCode(), MqTagEnum.examActivity.name(), JacksonUtil.parseJson(teExamActivityList), MqEnum.QUARTZ_LOG, String.valueOf(teExam.getId()), prop, tbUser.getName());
+                    MqDto mqDto = new MqDto(MqTopicEnum.themisTopic.getCode(), MqTagEnum.examActivity.name(), JacksonUtil.parseJson(teExamActivityList), MqTagEnum.examActivity, String.valueOf(teExam.getId()), prop, tbUser.getName());
                     mqDtoService.assembleSendOneWayMsg(mqDto);
                 }
                 //删除quartz任务,发送mq消息end
@@ -120,7 +120,7 @@ public class TEExamController {
                     prop.put("oper", "insert");
                     prop.put("exam", teExam);
                     if (Objects.nonNull(teExamActivity) && teExamActivity.getEnable() == 1) {
-                        MqDto mqDto = new MqDto(MqTopicEnum.themisTopic.getCode(), MqTagEnum.examActivity.name(), JacksonUtil.parseJson(Arrays.asList(teExamActivity)), MqEnum.QUARTZ_LOG, String.valueOf(teExam.getId()), prop, tbUser.getName());
+                        MqDto mqDto = new MqDto(MqTopicEnum.themisTopic.getCode(), MqTagEnum.examActivity.name(), JacksonUtil.parseJson(Arrays.asList(teExamActivity)), MqTagEnum.examActivity, String.valueOf(teExam.getId()), prop, tbUser.getName());
                         mqDtoService.assembleSendOneWayMsg(mqDto);
                     }
                     //新增quartz任务,发送mq消息end
@@ -144,7 +144,7 @@ public class TEExamController {
                     prop.put("oper", "insert");
                     prop.put("exam", teExam);
                     if (Objects.nonNull(teExamActivityList.get(0)) && teExamActivityList.get(0).getEnable() == 1) {
-                        MqDto mqDto = new MqDto(MqTopicEnum.themisTopic.getCode(), MqTagEnum.examActivity.name(), JacksonUtil.parseJson(teExamActivityList), MqEnum.QUARTZ_LOG, String.valueOf(teExam.getId()), prop, tbUser.getName());
+                        MqDto mqDto = new MqDto(MqTopicEnum.themisTopic.getCode(), MqTagEnum.examActivity.name(), JacksonUtil.parseJson(teExamActivityList), MqTagEnum.examActivity, String.valueOf(teExam.getId()), prop, tbUser.getName());
                         mqDtoService.assembleSendOneWayMsg(mqDto);
                     }
                     //新增quartz任务,发送mq消息end

+ 1 - 1
themis-backend/src/main/java/com/qmth/themis/backend/api/TEExamPaperController.java

@@ -158,7 +158,7 @@ public class TEExamPaperController {
             transMap.put("processAnswer", processAnswer);
             transMap.put("remark", tbAttachment.getRemark());
             //mq发送消息start
-            MqDto mqDto = new MqDto(MqTopicEnum.themisTopic.getCode(), MqTagEnum.examPaperImport.name(), transMap, MqEnum.TASK_LOG, String.valueOf(tbTaskHistory.getId()), tbUser.getName());
+            MqDto mqDto = new MqDto(MqTopicEnum.themisTopic.getCode(), MqTagEnum.examPaperImport.name(), transMap, MqTagEnum.examPaperImport, String.valueOf(tbTaskHistory.getId()), tbUser.getName());
             mqDtoService.assembleSendOneWayMsg(mqDto);
             //mq发送消息end
         } catch (Exception e) {

+ 1 - 1
themis-backend/src/main/java/com/qmth/themis/backend/api/TEExamStudentController.java

@@ -203,7 +203,7 @@ public class TEExamStudentController {
             }
             transMap.put("remark", tbAttachment.getRemark());
             //mq发送消息start
-            MqDto mqDto = new MqDto(MqTopicEnum.themisTopic.getCode(), MqTagEnum.examStudentImport.name(), transMap, MqEnum.TASK_LOG, String.valueOf(tbTaskHistory.getId()), tbUser.getName());
+            MqDto mqDto = new MqDto(MqTopicEnum.themisTopic.getCode(), MqTagEnum.examStudentImport.name(), transMap, MqTagEnum.examStudentImport, String.valueOf(tbTaskHistory.getId()), tbUser.getName());
             mqDtoService.assembleSendOneWayMsg(mqDto);
             //mq发送消息end
         } catch (Exception e) {

+ 7 - 4
themis-backend/src/main/java/com/qmth/themis/backend/api/TIeInvigilateController.java

@@ -10,7 +10,10 @@ import com.qmth.themis.business.dto.MqDto;
 import com.qmth.themis.business.entity.TBUser;
 import com.qmth.themis.business.entity.TEExamBreachLog;
 import com.qmth.themis.business.entity.TOeExamRecord;
-import com.qmth.themis.business.enums.*;
+import com.qmth.themis.business.enums.BreachTypeEnum;
+import com.qmth.themis.business.enums.FinishTypeEnum;
+import com.qmth.themis.business.enums.MqTagEnum;
+import com.qmth.themis.business.enums.MqTopicEnum;
 import com.qmth.themis.business.service.MqDtoService;
 import com.qmth.themis.business.service.TEExamBreachLogService;
 import com.qmth.themis.business.service.TOeExamRecordService;
@@ -91,7 +94,7 @@ public class TIeInvigilateController {
         FinishTypeEnum type = FinishTypeEnum.valueOf(String.valueOf(mapParameter.get("type")));
         TBUser tbUser = (TBUser) ServletUtil.getRequestAccount();
         //发送mq给客户端强制收卷start
-        MqDto mqDto = new MqDto(MqTopicEnum.themisTopic.getCode(), MqTagEnum.oe.name(), JacksonUtil.parseJson(recordIdList), type.ordinal() == FinishTypeEnum.INTERRUPT.ordinal() ? MqEnum.WEBSOCKET_MONITOR_FINISH_LOG : MqEnum.WEBSOCKET_HAND_FINISH_LOG, String.valueOf(tbUser.getId()), mapParameter, tbUser.getName());
+        MqDto mqDto = new MqDto(MqTopicEnum.themisTopic.getCode(), MqTagEnum.oeMonitorFinish.name(), JacksonUtil.parseJson(recordIdList), type.ordinal() == FinishTypeEnum.INTERRUPT.ordinal() ? MqTagEnum.oeMonitorFinish : MqTagEnum.oeHardFinish, String.valueOf(tbUser.getId()), mapParameter, tbUser.getName());
         mqDtoService.assembleSendOneWayMsg(mqDto);
         //发送mq给客户端强制收卷end
         return ResultUtil.ok(SystemConstant.SUCCESS);
@@ -179,12 +182,12 @@ public class TIeInvigilateController {
         }
         TBUser tbUser = (TBUser) ServletUtil.getRequestAccount();
         //发送mq给客户端监考消息start
-        MqDto mqDto = new MqDto(MqTopicEnum.themisTopic.getCode(), MqTagEnum.oe.name(), recordId, MqEnum.WEBSOCKET_IM_CLUSTERING_LOG, String.valueOf(tbUser.getId()), mapParameter, tbUser.getName());
+        MqDto mqDto = new MqDto(MqTopicEnum.themisTopic.getCode(), MqTagEnum.oeImClustering.name(), recordId, MqTagEnum.oeImClustering, String.valueOf(tbUser.getId()), mapParameter, tbUser.getName());
         mqDtoService.assembleSendOneWayMsg(mqDto);
         //发送mq给客户端监考消息end
 
         //发送mq给客户端监考强制活体验证start
-        mqDto = new MqDto(MqTopicEnum.themisTopic.getCode(), MqTagEnum.oe.name(), recordId, MqEnum.WEBSOCKET_LIVENESS_VERIFY_LOG, String.valueOf(tbUser.getId()), mapParameter, tbUser.getName());
+        mqDto = new MqDto(MqTopicEnum.themisTopic.getCode(), MqTagEnum.oeLivenessVerify.name(), recordId, MqTagEnum.oeLivenessVerify, String.valueOf(tbUser.getId()), mapParameter, tbUser.getName());
         mqDtoService.assembleSendOneWayMsg(mqDto);
         //发送mq给客户端监考强制活体验证end
         return ResultUtil.ok(SystemConstant.SUCCESS);

+ 1 - 8
themis-backend/src/main/java/com/qmth/themis/backend/interceptor/AuthInterceptor.java

@@ -1,6 +1,5 @@
 package com.qmth.themis.backend.interceptor;
 
-import cn.hutool.http.HttpStatus;
 import com.qmth.themis.backend.config.DictionaryConfig;
 import com.qmth.themis.business.constant.SystemConstant;
 import com.qmth.themis.business.dto.AuthDto;
@@ -56,13 +55,7 @@ public class AuthInterceptor implements HandlerInterceptor {
         String url = request.getServletPath();
         String method = request.getMethod();
         if (url.equalsIgnoreCase(SystemConstant.ERROR)) {
-//            if (response.getStatus() == HttpStatus.HTTP_NOT_FOUND) {
-                throw new BusinessException(ExceptionResultEnum.NOT_FOUND);
-//            } else if (response.getStatus() == HttpStatus.HTTP_INTERNAL_ERROR) {
-//                throw new BusinessException(ExceptionResultEnum.SERVICE_NOT_FOUND);
-//            } else {
-//                throw new BusinessException(ExceptionResultEnum.EXCEPTION_ERROR);
-//            }
+            throw new BusinessException(ExceptionResultEnum.NOT_FOUND);
         }
         Platform platform = Platform.valueOf(ServletUtil.getRequestPlatform());
         String deviceId = ServletUtil.getRequestDeviceId();

+ 8 - 32
themis-backend/src/main/java/com/qmth/themis/backend/start/StartRunning.java

@@ -37,54 +37,30 @@ public class StartRunning implements CommandLineRunner {
     public void run(String... args) throws Exception {
         log.info("服务器启动时执行 start");
         /**
-         * session mq start
+         * session
          */
-        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.sessionConsumerWebGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.web.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(SessionConcurrentlyImpl.class));
-        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.sessionConsumerWinGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.win.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(SessionConcurrentlyImpl.class));
-        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.sessionConsumerMacGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.mac.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(SessionConcurrentlyImpl.class));
-        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.sessionConsumerWxappGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.wxapp.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(SessionConcurrentlyImpl.class));
-        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.sessionConsumerIosGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.ios.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(SessionConcurrentlyImpl.class));
-        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.sessionConsumerAndroidGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.android.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(SessionConcurrentlyImpl.class));
+        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.sessionConsumerGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.web.name() + "||" + MqTagEnum.win.name() + "||" + MqTagEnum.mac.name() + "||" + MqTagEnum.wxapp.name() + "||" + MqTagEnum.ios.name() + "||" + MqTagEnum.android.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(SessionConcurrentlyImpl.class));
         /**
-         * session mq end
+         * userLog
          */
-
-        /**
-         * userLog mq start
-         */
-        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.userLogConsumerUserGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.user.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(UserLogConcurrentlyImpl.class));
-        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.userLogConsumerStudentGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.student.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(UserLogConcurrentlyImpl.class));
-        /**
-         * userLog mq end
-         */
-
+        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.userLogConsumerGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.user.name() + "||" + MqTagEnum.student.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(UserLogConcurrentlyImpl.class));
         /**
-         * task mq start
+         * task
          */
-        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.taskConsumerExamStudentImportGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.examStudentImport.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(TaskConcurrentlyImpl.class));
-        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.taskConsumerRoomCodeImportGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.roomCodeImport.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(TaskConcurrentlyImpl.class));
-        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.taskConsumerRoomCodeExportGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.roomCodeExport.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(TaskConcurrentlyImpl.class));
-        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.taskConsumerExamPaperImportGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.examPaperImport.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(TaskConcurrentlyImpl.class));
-        /**
-         * task mq end
-         */
-
+        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.taskConsumerGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.examStudentImport.name() + "||" + MqTagEnum.roomCodeImport.name() + "||" + MqTagEnum.roomCodeExport.name() + "||" + MqTagEnum.examPaperImport.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(TaskConcurrentlyImpl.class));
         /**
          * websocket mq start
          */
-        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.websocketConsumerUnNormalGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.unNormal.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(WebsocketUnNormalConcurrentlyImpl.class));
+        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.websocketConsumerDelayGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.oeUnNormal.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(WebsocketUnNormalConcurrentlyImpl.class));
         /**
          * websocket mq end
          */
         //计算客观分
         rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.calculateObjectiveScoreGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.calculateObjectiveScore.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(CalculateObjectiveScoreConcurrentlyImpl.class));
-
         //人脸验证保存
         rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.faceVerifySaveGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.faceVerifySave.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(FaceVerifyConcurrentlyImpl.class));
-
         //活体验证保存
-        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.livenessVerifySaveGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.livenessVerifySave.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(FaceVerifyConcurrentlyImpl.class));
-
+        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.livenessVerifySaveGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.livenessVerifySave.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(LivenessVerifyConcurrentlyImpl.class));
         //考试记录数据持久化
         rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.examRecordPersistedGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.examRecordPersisted.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(ExamRecordPersistedConcurrentlyImpl.class));
 

+ 0 - 7
themis-backend/src/main/java/com/qmth/themis/backend/websocket/WebSocketAdminServer.java

@@ -8,8 +8,6 @@ import com.qmth.themis.business.constant.SpringContextHolder;
 import com.qmth.themis.business.constant.SystemConstant;
 import com.qmth.themis.business.dto.WebsocketDto;
 import com.qmth.themis.business.entity.TBSession;
-import com.qmth.themis.business.enums.MqEnum;
-import com.qmth.themis.business.enums.SystemOperationEnum;
 import com.qmth.themis.business.enums.WebsocketTypeEnum;
 import com.qmth.themis.business.util.JacksonUtil;
 import com.qmth.themis.business.util.RedisUtil;
@@ -20,9 +18,6 @@ import com.qmth.themis.common.exception.BusinessException;
 import com.qmth.themis.common.signature.SignatureInfo;
 import com.qmth.themis.common.signature.SignatureType;
 import com.qmth.themis.business.dto.MqDto;
-import com.qmth.themis.business.enums.MqTagEnum;
-import com.qmth.themis.business.enums.MqTopicEnum;
-import com.qmth.themis.business.service.MqDtoService;
 import com.qmth.themis.mq.templete.Concurrently;
 import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
 import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
@@ -36,8 +31,6 @@ import javax.websocket.server.ServerEndpoint;
 import java.io.IOException;
 import java.lang.reflect.Method;
 import java.net.InetSocketAddress;
-import java.time.LocalDateTime;
-import java.time.ZoneOffset;
 import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
 

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

@@ -1,6 +1,6 @@
 package com.qmth.themis.business.dto;
 
-import com.qmth.themis.business.enums.MqEnum;
+import com.qmth.themis.business.enums.MqTagEnum;
 
 import java.io.Serializable;
 import java.util.Map;
@@ -21,7 +21,7 @@ public class MqDto implements Serializable {
     private String tag;//消息tag
     private long timestamp;//时间戳
     private Object body;//消息体
-    private MqEnum type;//消息类型
+    private MqTagEnum type;//消息类型
     private String objId;//关联业务id
     private String objName;//关联业务名称
     private Integer ack;//ack
@@ -32,7 +32,7 @@ public class MqDto implements Serializable {
 
     }
 
-    public MqDto(String topic, String tag, Object body, MqEnum type, String objId, String objName) {
+    public MqDto(String topic, String tag, Object body, MqTagEnum type, String objId, String objName) {
         this.topic = topic;
         this.tag = tag;
         this.body = body;
@@ -43,7 +43,7 @@ public class MqDto implements Serializable {
         this.id = String.valueOf(UUID.randomUUID()).replaceAll("-", "");
     }
 
-    public MqDto(String topic, String tag, Object body, MqEnum type, String objId, Map properties, String objName) {
+    public MqDto(String topic, String tag, Object body, MqTagEnum type, String objId, Map properties, String objName) {
         this.topic = topic;
         this.tag = tag;
         this.body = body;
@@ -59,11 +59,11 @@ public class MqDto implements Serializable {
         return serialVersionUID;
     }
 
-    public MqEnum getType() {
+    public MqTagEnum getType() {
         return type;
     }
 
-    public void setType(MqEnum type) {
+    public void setType(MqTagEnum type) {
         this.type = type;
     }
 

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

@@ -3,7 +3,7 @@ package com.qmth.themis.business.entity;
 import com.baomidou.mybatisplus.annotation.FieldFill;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
-import com.qmth.themis.business.enums.MqEnum;
+import com.qmth.themis.business.enums.MqTagEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -40,7 +40,7 @@ public class TMRocketMessage implements Serializable {
 
     @ApiModelProperty(value = "消息类型")
     @TableField(value = "type")
-    private MqEnum type;
+    private MqTagEnum type;
 
     @ApiModelProperty(value = "关联业务id")
     @TableField(value = "obj_id")
@@ -157,11 +157,11 @@ public class TMRocketMessage implements Serializable {
         this.body = body;
     }
 
-    public MqEnum getType() {
+    public MqTagEnum getType() {
         return type;
     }
 
-    public void setType(MqEnum type) {
+    public void setType(MqTagEnum type) {
         this.type = type;
     }
 

+ 0 - 51
themis-business/src/main/java/com/qmth/themis/business/enums/MqEnum.java

@@ -1,51 +0,0 @@
-package com.qmth.themis.business.enums;
-
-/**
- * @Description: mq enum
- * @Param:
- * @return:
- * @Author: wangliang
- * @Date: 2020/7/1
- */
-public enum MqEnum {
-
-    SESSION(0, "用户session记录"),
-    EXAM_STUDENT_LOG(1, "考生轨迹"),
-    WARMING_LOG(2, "预警日志"),
-    EXCEPTION_LOG(3, "异常日志"),
-    MESSAGE_LOG(4, "消息日志"),
-    USER_LOG(5, "用户轨迹"),
-    TASK_LOG(6, "任务"),
-    QUARTZ_LOG(7, "quartz任务"),
-    EXAM(8, "考生端消息"),
-    EXAM_BREAK(9, "考生断点记录"),
-//    WEBSOCKET_OFFLINE_LOG(9, "websocket强行离线(交卷)"),
-    WEBSOCKET_IM_CLUSTERING_LOG(10, "websocket点对点发送消息"),
-    WEBSOCKET_IM_BROADCASTING_LOG(11, "websocket广播发送消息"),
-    WEBSOCKET_MONITOR_FINISH_LOG(12, "监考强制离线(交卷)"),
-    WEBSOCKET_WARNING_FINISH_LOG(13, "预警强制离线(交卷)"),
-    WEBSOCKET_HAND_FINISH_LOG(14, "手动(交卷)"),
-    WEBSOCKET_LIVENESS_VERIFY_LOG(15, "监考强制活体验证"),
-
-    /**
-     * websocket超时退出
-     */
-    WEBSOCKET_UN_NORMAL_LOG(100, "websocket超时退出");
-
-    private int id;
-
-    private String code;
-
-    private MqEnum(int id, String code) {
-        this.id = id;
-        this.code = code;
-    }
-
-    public int getId() {
-        return id;
-    }
-
-    public String getCode() {
-        return code;
-    }
-}

+ 8 - 53
themis-business/src/main/java/com/qmth/themis/business/enums/MqGroupEnum.java

@@ -10,64 +10,19 @@ package com.qmth.themis.business.enums;
 public enum MqGroupEnum {
 
     /**
-     * web group
+     * session会话
      */
-    sessionConsumerWebGroup("themis-group-exam-sessionWeb"),
+    sessionConsumerGroup("themis-group-exam-session"),
 
     /**
-     * win group
+     * 用户轨迹
      */
-    sessionConsumerWinGroup("themis-group-exam-sessionWin"),
+    userLogConsumerGroup("themis-group-exam-userLog"),
 
     /**
-     * mac group
+     * 导入导出任务
      */
-    sessionConsumerMacGroup("themis-group-exam-sessionMac"),
-
-    /**
-     * wxapp group
-     */
-    sessionConsumerWxappGroup("themis-group-exam-sessionWxapp"),
-
-    /**
-     * ios group
-     */
-    sessionConsumerIosGroup("themis-group-exam-sessionIos"),
-
-    /**
-     * android group
-     */
-    sessionConsumerAndroidGroup("themis-group-exam-sessionAndroid"),
-
-    /**
-     * 用户轨迹 user group
-     */
-    userLogConsumerUserGroup("themis-group-exam-userLogUser"),
-
-    /**
-     * 用户轨迹 student group
-     */
-    userLogConsumerStudentGroup("themis-group-exam-userLogStudent"),
-
-    /**
-     * 异步任务 考生导入 group
-     */
-    taskConsumerExamStudentImportGroup("themis-group-exam-taskExamStudentImport"),
-
-    /**
-     * 异步任务 考场导出 group
-     */
-    taskConsumerRoomCodeExportGroup("themis-group-exam-taskRoomCodeExport"),
-
-    /**
-     * 异步任务 考场导入 group
-     */
-    taskConsumerRoomCodeImportGroup("themis-group-exam-taskRoomCodeImport"),
-
-    /**
-     * 异步任务 试卷导入 group
-     */
-    taskConsumerExamPaperImportGroup("themis-group-exam-taskExamPaperImport"),
+    taskConsumerGroup("themis-group-exam-task"),
 
     /**
      * websocket超时退出 考生 group
@@ -77,12 +32,12 @@ public enum MqGroupEnum {
     /**
      * websocket超时退出 考生 group
      */
-    websocketConsumerUnNormalGroup("themis-group-exam-websocketUnNormal"),
+    websocketConsumerDelayGroup("themis-group-exam-websocketDelay"),
 
     /**
      * quartz 考场 group
      */
-    quartzConsumerExamActivityGroup("themis-group-exam-quartzExamActivity"),
+    quartzConsumerGroup("themis-group-exam-quartz"),
 
     /**
      * 计算客观分

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

@@ -9,37 +9,65 @@ package com.qmth.themis.business.enums;
  */
 public enum MqTagEnum {
 
-    web("会话web标签"),
-    win("会话win标签"),
-    mac("会话mac标签"),
-    wxapp("会话wxapp标签"),
-    ios("会话ios标签"),
-    android("会话android标签"),
-    user("用户轨迹user标签"),
-    student("用户轨迹student标签"),
-    examStudentImport("考生导入任务标签"),
-    roomCodeExport("考场导出任务标签"),
-    roomCodeImport("考场导入任务标签"),
-    examPaperImport("试卷导入任务标签"),
-    oe("websocket客户端标签"),
-    unNormal("websocket超时退出标签"),
-    examActivity("考场一次性延时任务标签"),
-    quartz("quartz标签"),
-    calculateObjectiveScore("计算客观分标签"),
-    faceVerifySave("人脸验证保存"),
-    livenessVerifySave("活体验证保存"),
-    examRecordPersisted("考试记录数据持久化"),
-    examRecordUpdate("考试记录数据更新"),
-    examRecordInit("考试记录数据初始化"),
-    examBreakHistory("考试断点记录");
-
-    private MqTagEnum(String code) {
+    web("会话web标签", "用户session日志", "normal", 0),
+    win("会话win标签", "用户session日志", "normal", 1),
+    mac("会话mac标签", "用户session日志", "normal", 2),
+    wxapp("会话wxapp标签", "用户session日志", "normal", 3),
+    ios("会话ios标签", "用户session日志", "normal", 4),
+    android("会话android标签", "用户session日志", "normal", 5),
+    user("用户轨迹user标签", "用户轨迹日志", "normal", 6),
+    student("用户轨迹student标签", "考生轨迹日志", "normal", 7),
+    examStudentImport("考生导入任务标签", "考生导入任务日志", "normal", 8),
+    roomCodeExport("考场导出任务标签", "考场导出任务日志", "normal", 9),
+    roomCodeImport("考场导入任务标签", "考场导入任务日志", "normal", 10),
+    examPaperImport("试卷导入任务标签", "试卷导入任务日志", "normal", 11),
+    oeImClustering("websocket客户端点对点发送消息标签", "客户端点对点消息日志", "normal", 12),
+    oeImBroadcasting("websocket客户端广播发送消息标签", "客户端广播消息日志", "normal", 13),
+    oeMonitorFinish("websocket客户端监考强制离线(交卷)标签", "监考强制离线(交卷)日志", "normal", 14),
+    oeWarningFinish("websocket客户端预警强制离线(交卷)标签", "预警强制离线(交卷)日志", "normal", 15),
+    oeHardFinish("websocket客户端手动(交卷)标签", "手动(交卷)日志", "normal", 16),
+    oeLivenessVerify("websocket客户端监考强制活体验证标签", "监考强制活体验证日志", "normal", 17),
+    oeUnNormal("websocket超时退出标签", "websocket超时退出超时退出日志", "delay", 18),
+    examActivity("考场一次性延时任务标签", "考场一次性延时任务日志", "normal", 19),
+    quartz("quartz标签", "quartz任务日志", "normal", 20),
+    calculateObjectiveScore("计算客观分标签", "计算客观分日志", "normal", 21),
+    faceVerifySave("人脸验证保存", "人脸验证日志", "normal", 22),
+    livenessVerifySave("活体验证保存", "活体验证日志", "normal", 23),
+    examRecordPersisted("考试记录数据持久化", "考试日志", "normal", 24),
+    examRecordUpdate("考试记录数据更新", "考试日志", "normal", 25),
+    examRecordInit("考试记录数据初始化", "考试日志", "normal", 26),
+    examBreakHistory("考试断点记录", "考试日志", "normal", 27),
+    warningLog("预警日志标签", "预警日志", "normal", 28),
+    exceptionLog("异常日志标签", "异常日志", "normal", 29);
+
+    private MqTagEnum(String desc, String code, String type, int id) {
+        this.desc = desc;
         this.code = code;
+        this.type = type;
+        this.id = id;
     }
 
-    private String code;
+    private String code;//留痕描述
+
+    private String desc;//标签
+
+    private String type;//消息类型,normal:正常消息,delay:延时消息,transactional:事务消息
+
+    private int id;
 
     public String getCode() {
         return code;
     }
+
+    public String getDesc() {
+        return desc;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public int getId() {
+        return id;
+    }
 }

+ 5 - 19
themis-business/src/main/java/com/qmth/themis/business/service/impl/MqDtoServiceImpl.java

@@ -1,11 +1,11 @@
 package com.qmth.themis.business.service.impl;
 
 import com.qmth.themis.business.constant.SystemConstant;
-import com.qmth.themis.business.enums.MqEnum;
-import com.qmth.themis.business.util.RedisUtil;
 import com.qmth.themis.business.dto.MqDto;
+import com.qmth.themis.business.enums.MqTagEnum;
 import com.qmth.themis.business.service.MqDtoService;
 import com.qmth.themis.business.service.ProducerServer;
+import com.qmth.themis.business.util.RedisUtil;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -36,24 +36,10 @@ public class MqDtoServiceImpl implements MqDtoService {
     @Override
     public MqDto assembleSendOneWayMsg(Object... o) {
         MqDto mqDto = null;
-        MqEnum mqEnum = MqEnum.valueOf(String.valueOf(o[3]));
-//        for (int i = 0; i < 100; i++) {
-//            int random = (int) (Math.random() * Source.values().length);
+        MqTagEnum mqtagEnum = MqTagEnum.valueOf(String.valueOf(o[3]));
         //往mq发送消息插入会话信息
-        mqDto = new MqDto(String.valueOf(o[0]), String.valueOf(o[1]), o[2], mqEnum, String.valueOf(o[4]), String.valueOf(o[5]));
-//            mqDto = new MqDto(String.valueOf(o[0]), Source.values()[random].name(), o[2], mqEnum, String.valueOf(o[4]), String.valueOf(o[5]));
-//            mqDto.setSequence(i);
+        mqDto = new MqDto(String.valueOf(o[0]), String.valueOf(o[1]), o[2], mqtagEnum, String.valueOf(o[4]), String.valueOf(o[5]));
         mqDto.setAck(SystemConstant.DELIVERED_ACK_TYPE);
-//            producerServer.sendOneWay(mqDto);
-//            switch (mqEnum.ordinal()) {
-//                case 0:
-//                    redisUtil.setSessionTopicList(SystemConstant.SESSION_TOPIC_BUFFER_LIST, mqDto.getId(), mqDto);
-//                    break;
-//                default:
-//                    redisUtil.setSessionTopicList(SystemConstant.USERLOG_TOPIC_BUFFER_LIST, mqDto.getId(), mqDto);
-//                    break;
-//            }
-//        }
         try {
             producerServer.sendOneWay(mqDto);
         } catch (Exception e) {
@@ -162,7 +148,7 @@ public class MqDtoServiceImpl implements MqDtoService {
      */
     void setTopicBuffer(MqDto mqDto) {
         if (Objects.nonNull(mqDto)) {
-            if (mqDto.getType().getId() < 100) {
+            if (Objects.equals(mqDto.getType().getType(), "normal")) {
                 redisUtil.set(SystemConstant.MQ_TOPIC_BUFFER_LIST, mqDto.getId(), mqDto);
             } else {
                 redisUtil.set(SystemConstant.MQ_DELAY_TOPIC_BUFFER_LIST, mqDto.getId(), mqDto);

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

@@ -63,7 +63,6 @@ import com.qmth.themis.business.enums.FinishTypeEnum;
 import com.qmth.themis.business.enums.HardwareTestEnum;
 import com.qmth.themis.business.enums.InvigilateVerifyEnum;
 import com.qmth.themis.business.enums.MonitorVideoSourceEnum;
-import com.qmth.themis.business.enums.MqEnum;
 import com.qmth.themis.business.enums.MqTagEnum;
 import com.qmth.themis.business.enums.MqTopicEnum;
 import com.qmth.themis.business.enums.ReviewResultEnum;
@@ -475,7 +474,7 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
         transMap.put("subIndex", subIndex);
         // mq发送消息start
         MqDto mqDto = new MqDto(MqTopicEnum.themisTopic.getCode(), MqTagEnum.calculateObjectiveScore.name(), transMap,
-                MqEnum.EXAM, recordId.toString(), recordId.toString());
+                MqTagEnum.calculateObjectiveScore, recordId.toString(), recordId.toString());
         mqDtoService.assembleSendOneWayMsg(mqDto);
     }
 
@@ -738,7 +737,7 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
         transMap.put("recordId", recordId);
         // mq发送消息start
         MqDto mqDto = new MqDto(MqTopicEnum.themisTopic.getCode(), MqTagEnum.examRecordPersisted.name(), transMap,
-                MqEnum.EXAM, recordId.toString(), recordId.toString());
+                MqTagEnum.examRecordPersisted, recordId.toString(), recordId.toString());
         mqDtoService.assembleSendOneWayMsg(mqDto);
     }
     @Cacheable(value = "exam", key = "#examId", unless = "#result == null")

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

@@ -38,7 +38,6 @@ import com.qmth.themis.business.entity.TOeExamRecord;
 import com.qmth.themis.business.enums.ExamRecordStatusEnum;
 import com.qmth.themis.business.enums.ExamTypeEnum;
 import com.qmth.themis.business.enums.LivenessTypeEnum;
-import com.qmth.themis.business.enums.MqEnum;
 import com.qmth.themis.business.enums.MqTagEnum;
 import com.qmth.themis.business.enums.MqTopicEnum;
 import com.qmth.themis.business.enums.ObjectiveScorePolicyEnum;
@@ -389,7 +388,7 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
         transMap.put("colValue", colValue);
         transMap.put("isDate", isDate);
         //mq发送消息start
-        MqDto mqDto = new MqDto(MqTopicEnum.themisTopic.getCode(), MqTagEnum.examRecordUpdate.name(), transMap, MqEnum.EXAM, recordId.toString(), colName);
+        MqDto mqDto = new MqDto(MqTopicEnum.themisTopic.getCode(), MqTagEnum.examRecordUpdate.name(), transMap, MqTagEnum.examRecordUpdate, recordId.toString(), colName);
         mqDtoService.assembleSendOneWayMsg(mqDto);
 	}
 
@@ -409,7 +408,7 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
 	public void dataInitMq(Map<String, Object> param) {
 		Long id=(Long)param.get("id");
         //mq发送消息start
-        MqDto mqDto = new MqDto(MqTopicEnum.themisTopic.getCode(), MqTagEnum.examRecordInit.name(), param, MqEnum.EXAM, id.toString(), id.toString());
+        MqDto mqDto = new MqDto(MqTopicEnum.themisTopic.getCode(), MqTagEnum.examRecordInit.name(), param, MqTagEnum.examRecordInit, id.toString(), id.toString());
         mqDtoService.assembleSendOneWayMsg(mqDto);
 	}
 

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

@@ -7,7 +7,6 @@ import com.qmth.themis.business.config.SystemConfig;
 import com.qmth.themis.business.constant.SpringContextHolder;
 import com.qmth.themis.business.constant.SystemConstant;
 import com.qmth.themis.business.entity.TBTaskHistory;
-import com.qmth.themis.business.enums.TaskStatusEnum;
 import com.qmth.themis.business.enums.UploadFileEnum;
 import com.qmth.themis.business.service.TBAttachmentService;
 import com.qmth.themis.business.service.TBTaskHistoryService;
@@ -17,8 +16,6 @@ import org.apache.poi.ss.usermodel.CellStyle;
 import org.apache.poi.ss.usermodel.Row;
 
 import java.io.*;
-import java.math.BigDecimal;
-import java.time.LocalDateTime;
 import java.util.*;
 
 /**
@@ -137,7 +134,7 @@ public class TaskExportCommon {
             fileWriter = new FileWriter(file);
             fileWriter.write(txtStr);
             JSONObject json = new JSONObject();
-            json.put("path", file.getPath());
+            json.put("path", file.getPath().replaceAll(SystemConstant.FILES_DIR + File.separator, ""));
             json.put("type", this.type);
             if (this.exception) {
                 this.tbTaskHistory.setErrorFilePath(json.toJSONString());

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

@@ -86,7 +86,7 @@ public class TaskImportCommon {
     public File getUploadFile() {
         File file = null;
         if (Objects.nonNull(this.type) && Objects.equals(this.type, SystemConstant.LOCAL)) {
-            StringJoiner localPath = new StringJoiner("").add(this.path);
+            StringJoiner localPath = new StringJoiner("").add(SystemConstant.FILES_DIR).add(File.separator).add(this.path);
             file = new File(localPath.toString());
         } else {
             try {
@@ -107,6 +107,9 @@ public class TaskImportCommon {
     public void writeImportResultTxt(String txtStr) throws IOException {
         FileWriter fileWriter = null;
         try {
+            if (Objects.equals(this.type, SystemConstant.LOCAL)) {
+                this.path = SystemConstant.FILES_DIR + File.separator + this.path;
+            }
             this.path = this.path.substring(0, this.path.lastIndexOf(File.separator) + 1);
             File file = new File(this.path + String.valueOf(UUID.randomUUID()).replaceAll("-", "") + SystemConstant.TXT_PREFIX);
             if (!file.exists()) {
@@ -116,7 +119,7 @@ public class TaskImportCommon {
             fileWriter = new FileWriter(file);
             fileWriter.write(txtStr);
             JSONObject json = new JSONObject();
-            json.put("path", file.getPath());
+            json.put("path", file.getPath().replaceAll(SystemConstant.FILES_DIR + File.separator, ""));
             json.put("type", this.type);
             if (this.exception) {
                 this.tbTaskHistory.setErrorFilePath(json.toJSONString());

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

@@ -13,7 +13,6 @@ import org.springframework.web.bind.annotation.RestController;
 
 import com.qmth.themis.business.bean.exam.FaceVerifyBean;
 import com.qmth.themis.business.bean.exam.FaceVerifyParamBean;
-import com.qmth.themis.business.enums.MqEnum;
 import com.qmth.themis.business.service.TOeFaceVerifyHistoryService;
 import com.qmth.themis.common.exception.BusinessException;
 import com.qmth.themis.common.util.Result;
@@ -88,7 +87,7 @@ public class TEFaceController {
         transMap.put("time", param.getTime());
         transMap.put("exception", param.getException());
         //mq发送消息start
-        MqDto mqDto = new MqDto(MqTopicEnum.themisTopic.getCode(), MqTagEnum.faceVerifySave.name(), transMap, MqEnum.EXAM, param.getRecordId().toString(), param.getRecordId().toString());
+        MqDto mqDto = new MqDto(MqTopicEnum.themisTopic.getCode(), MqTagEnum.faceVerifySave.name(), transMap, MqTagEnum.faceVerifySave, param.getRecordId().toString(), param.getRecordId().toString());
         mqDtoService.assembleSendOneWayMsg(mqDto);
 		return ResultUtil.ok(ret);
 	}

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

@@ -13,7 +13,6 @@ import org.springframework.web.bind.annotation.RestController;
 
 import com.qmth.themis.business.bean.exam.LivenessVerifyBean;
 import com.qmth.themis.business.bean.exam.LivenessVerifyParamBean;
-import com.qmth.themis.business.enums.MqEnum;
 import com.qmth.themis.business.service.TOeLivenessVerifyHistoryService;
 import com.qmth.themis.common.exception.BusinessException;
 import com.qmth.themis.common.util.Result;
@@ -87,7 +86,7 @@ public class TELivenessController {
 		transMap.put("exception", param.getException());
 		// mq发送消息start
 		MqDto mqDto = new MqDto(MqTopicEnum.themisTopic.getCode(), MqTagEnum.livenessVerifySave.name(), transMap,
-				MqEnum.EXAM, param.getRecordId().toString(), param.getRecordId().toString());
+				MqTagEnum.livenessVerifySave, param.getRecordId().toString(), param.getRecordId().toString());
 		mqDtoService.assembleSendOneWayMsg(mqDto);
 		return ResultUtil.ok(ret);
 	}

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

@@ -179,8 +179,8 @@ public class TEStudentController {
         TBSession tbSession = new TBSession(sessionId, String.valueOf(teStudent.getId()), authDto.getRoleCodes().toString(), source, platform.name(), deviceId, ServletUtil.getRequest().getLocalAddr(), token, expire);
         redisUtil.setUserSession(sessionId, tbSession, redisExpire);
         //mq发送消息start
-        mqDtoService.assembleSendOneWayMsg(MqTopicEnum.themisTopic.getCode(), platform.name(), tbSession, MqEnum.SESSION.name(), tbSession.getId(), teStudent.getIdentity());
-        mqDtoService.assembleSendOneWayMsg(MqTopicEnum.themisTopic.getCode(), authDto.getRoleCodes().toString().contains(RoleEnum.STUDENT.name()) ? MqTagEnum.student.name() : MqTagEnum.user.name(), SystemOperationEnum.LOGIN, MqEnum.EXAM_STUDENT_LOG.name(), teStudent.getId(), teStudent.getIdentity());
+        mqDtoService.assembleSendOneWayMsg(MqTopicEnum.themisTopic.getCode(), platform.name(), tbSession,platform.name(), tbSession.getId(), teStudent.getIdentity());
+        mqDtoService.assembleSendOneWayMsg(MqTopicEnum.themisTopic.getCode(), authDto.getRoleCodes().toString().contains(RoleEnum.STUDENT.name()) ? MqTagEnum.student.name() : MqTagEnum.user.name(), SystemOperationEnum.LOGIN, MqTagEnum.student.name(), teStudent.getId(), teStudent.getIdentity());
         //mq发送消息end
         //测试
         String test = SignatureInfo.build(SignatureType.TOKEN, sessionId, token);
@@ -243,7 +243,7 @@ public class TEStudentController {
                         objectMap.put("lastStartTime", new Date());
 
                         //发送mq,增加断点次数记录
-                        MqDto mqDto = new MqDto(MqTopicEnum.themisTopic.getCode(), MqTagEnum.examBreakHistory.name(), JacksonUtil.parseJson(objectMap), MqEnum.EXAM_BREAK, String.valueOf(recordId), "增加断点记录");
+                        MqDto mqDto = new MqDto(MqTopicEnum.themisTopic.getCode(), MqTagEnum.examBreakHistory.name(), JacksonUtil.parseJson(objectMap), MqTagEnum.examBreakHistory, String.valueOf(recordId), "增加断点记录");
                         mqDtoService.assembleSendOneWayMsg(mqDto);
                         ExamUnFinishBean examUnFinishBean = this.unFinishCommon(recordId, ec, examStudentCacheBean, examActivityCacheBean, examStudentId);
                         map.put("unFinished", examUnFinishBean);
@@ -291,7 +291,7 @@ public class TEStudentController {
             cacheService.removeStudentCache(teStudent.getId());
         }
         //mq发送消息start
-        mqDtoService.assembleSendOneWayMsg(MqTopicEnum.themisTopic.getCode(), authDto.getRoleCodes().toString().contains(RoleEnum.STUDENT.name()) ? MqTagEnum.student.name() : MqTagEnum.user.name(), SystemOperationEnum.LOGOUT, MqEnum.EXAM_STUDENT_LOG.name(), teStudent.getId(), teStudent.getIdentity());
+        mqDtoService.assembleSendOneWayMsg(MqTopicEnum.themisTopic.getCode(), authDto.getRoleCodes().toString().contains(RoleEnum.STUDENT.name()) ? MqTagEnum.student.name() : MqTagEnum.user.name(), SystemOperationEnum.LOGOUT, MqTagEnum.student.name(), teStudent.getId(), teStudent.getIdentity());
         //mq发送消息end
         return ResultUtil.ok(JacksonUtil.parseJson(SystemConstant.SUCCESS));
     }

+ 1 - 10
themis-exam/src/main/java/com/qmth/themis/exam/interceptor/AuthInterceptor.java

@@ -1,13 +1,11 @@
 package com.qmth.themis.exam.interceptor;
 
-import cn.hutool.http.HttpStatus;
 import com.google.gson.Gson;
 import com.qmth.themis.business.constant.SystemConstant;
 import com.qmth.themis.business.dto.AuthDto;
 import com.qmth.themis.business.dto.cache.TEStudentCacheDto;
 import com.qmth.themis.business.entity.TBSession;
 import com.qmth.themis.business.entity.TEStudent;
-import com.qmth.themis.business.enums.RoleEnum;
 import com.qmth.themis.business.service.CacheService;
 import com.qmth.themis.business.service.TEStudentService;
 import com.qmth.themis.business.util.RedisUtil;
@@ -18,7 +16,6 @@ import com.qmth.themis.common.exception.BusinessException;
 import com.qmth.themis.common.signature.SignatureInfo;
 import com.qmth.themis.common.signature.SignatureType;
 import com.qmth.themis.exam.config.DictionaryConfig;
-import org.apache.poi.ss.formula.functions.T;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.web.servlet.HandlerInterceptor;
@@ -60,13 +57,7 @@ public class AuthInterceptor implements HandlerInterceptor {
         String url = request.getServletPath();
         String method = request.getMethod();
         if (url.equalsIgnoreCase(SystemConstant.ERROR)) {
-//            if (response.getStatus() == HttpStatus.HTTP_NOT_FOUND) {
-                throw new BusinessException(ExceptionResultEnum.NOT_FOUND);
-//            } else if (response.getStatus() == HttpStatus.HTTP_INTERNAL_ERROR) {
-//                throw new BusinessException(ExceptionResultEnum.SERVICE_NOT_FOUND);
-//            } else {
-//                throw new BusinessException(ExceptionResultEnum.EXCEPTION_ERROR);
-//            }
+            throw new BusinessException(ExceptionResultEnum.NOT_FOUND);
         }
         Platform platform = Platform.valueOf(ServletUtil.getRequestPlatform());
         String deviceId = ServletUtil.getRequestDeviceId();

+ 9 - 24
themis-exam/src/main/java/com/qmth/themis/exam/listener/service/impl/MqOeLogicServiceImpl.java

@@ -7,7 +7,7 @@ import com.qmth.themis.business.dto.MqDto;
 import com.qmth.themis.business.dto.WebsocketDto;
 import com.qmth.themis.business.entity.TMRocketMessage;
 import com.qmth.themis.business.enums.FinishTypeEnum;
-import com.qmth.themis.business.enums.MqEnum;
+import com.qmth.themis.business.enums.MqTagEnum;
 import com.qmth.themis.business.enums.WebsocketTypeEnum;
 import com.qmth.themis.business.service.TEExamStudentLogService;
 import com.qmth.themis.business.service.TMRocketMessageService;
@@ -81,24 +81,9 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
     @Transactional
     public void execMqOeLogic(MqDto mqDto, String key) throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
         Gson gson = new Gson();
-        MqEnum mqEnum = mqDto.getType();
         ConcurrentHashMap<Long, WebSocketOeServer> webSocketMap = WebSocketOeServer.getWebSocketMap();
-//        if (MqEnum.WEBSOCKET_OFFLINE_LOG.ordinal() == mqEnum.ordinal()) {//下线
-//            JSONArray jsonArray = JSONArray.parseArray(String.valueOf(mqDto.getBody()));
-//            Set<String> examStudentIdentitySet = jsonArray.toJavaObject(Set.class);
-//            log.info("examStudentIdentitySet:{}", JacksonUtil.parseJson(examStudentIdentitySet));
-//            webSocketMap.forEach((k, v) -> {
-//                examStudentIdentitySet.forEach(s -> {
-//                    if (k.contains(s)) {
-//                        Map map = new HashMap<>();
-//                        map.put("offLineId", k);
-//                        WebsocketDto websocketDto = new WebsocketDto("offLine", map);
-//                        v.sendMessage(websocketDto);
-//                    }
-//                });
-//            });
-//        } else
-        if (MqEnum.WEBSOCKET_MONITOR_FINISH_LOG.ordinal() == mqEnum.ordinal()) {//强制离线交卷
+        String tag = mqDto.getTag();
+        if (tag.contains(MqTagEnum.oeMonitorFinish.name())) {//强制离线交卷
             Set examRecordId = JacksonUtil.readJson(String.valueOf(mqDto.getBody()), Set.class);
             examRecordId.forEach(s -> {
                 Long recordId = Long.parseLong(String.valueOf(s));
@@ -112,7 +97,7 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
                     webSocketOeServer.sendMessage(websocketDto);
                 }
             });
-        } else if (MqEnum.WEBSOCKET_HAND_FINISH_LOG.ordinal() == mqEnum.ordinal()) {//手动交卷
+        } else if (tag.contains(MqTagEnum.oeHardFinish.name())) {//手动交卷
             Set examRecordId = JacksonUtil.readJson(String.valueOf(mqDto.getBody()), Set.class);
             examRecordId.forEach(s -> {
                 Long recordId = Long.parseLong(String.valueOf(s));
@@ -125,7 +110,7 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
                     webSocketOeServer.sendMessage(websocketDto);
                 }
             });
-        } else if (MqEnum.WEBSOCKET_WARNING_FINISH_LOG.ordinal() == mqEnum.ordinal()) {//预警交卷
+        } else if (tag.contains(MqTagEnum.oeWarningFinish.name())) {//预警交卷
             Set examRecordId = JacksonUtil.readJson(String.valueOf(mqDto.getBody()), Set.class);
             examRecordId.forEach(s -> {
                 Long recordId = Long.parseLong(String.valueOf(s));
@@ -138,7 +123,7 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
                     webSocketOeServer.sendMessage(websocketDto);
                 }
             });
-        } else if (MqEnum.WEBSOCKET_IM_CLUSTERING_LOG.ordinal() == mqEnum.ordinal()) {//点对点消息
+        } else if (tag.contains(MqTagEnum.oeImClustering.name())) {//点对点消息
             Long recordId = Long.parseLong(String.valueOf(mqDto.getBody()));
             if (Objects.nonNull(webSocketMap.get(recordId))) {
                 WebSocketOeServer webSocketOeServer = webSocketMap.get(recordId);
@@ -151,11 +136,11 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
                 WebsocketDto websocketDto = new WebsocketDto(WebsocketTypeEnum.INVIGILATE_NOTICE.name(), map);
                 webSocketOeServer.sendMessage(websocketDto);
             }
-        } else if (MqEnum.WEBSOCKET_IM_BROADCASTING_LOG.ordinal() == mqEnum.ordinal()) {//广播消息
+        } else if (tag.contains(MqTagEnum.oeImBroadcasting.name())) {//广播消息
             JSONArray jsonArray = JSONArray.parseArray(String.valueOf(mqDto.getBody()));
             Set<String> examStudentIdentitySet = jsonArray.toJavaObject(Set.class);
             log.info("examStudentIdentitySet:{}", JacksonUtil.parseJson(examStudentIdentitySet));
-        } else if (MqEnum.WEBSOCKET_LIVENESS_VERIFY_LOG.ordinal() == mqEnum.ordinal()) {//监考强制活体验证
+        } else if (tag.contains(MqTagEnum.oeLivenessVerify.name())) {//监考强制活体验证
             Long recordId = Long.parseLong(String.valueOf(mqDto.getBody()));
             if (Objects.nonNull(webSocketMap.get(recordId))) {
                 WebSocketOeServer webSocketOeServer = webSocketMap.get(recordId);
@@ -166,7 +151,7 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
             }
         }
         mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);
-        teExamStudentLogService.saveStudentLogInfo(mqDto.getTimestamp(), MqEnum.valueOf(String.valueOf(mqDto.getType())).getId(), mqDto.getType().getCode(), JacksonUtil.parseJson(mqDto));
+        teExamStudentLogService.saveStudentLogInfo(mqDto.getTimestamp(), MqTagEnum.valueOf(String.valueOf(mqDto.getType())).getId(), mqDto.getType().getCode(), JacksonUtil.parseJson(mqDto));
         TMRocketMessage tmRocketMessage = gson.fromJson(gson.toJson(mqDto), TMRocketMessage.class);
         tmRocketMessage.setBody(JacksonUtil.parseJson(tmRocketMessage.getBody()));
         tmRocketMessageService.saveOrUpdate(tmRocketMessage);

+ 14 - 36
themis-exam/src/main/java/com/qmth/themis/exam/start/StartRunning.java

@@ -1,9 +1,12 @@
 package com.qmth.themis.exam.start;
 
-import javax.annotation.Resource;
-
 import com.qmth.themis.business.constant.SpringContextHolder;
+import com.qmth.themis.business.constant.SystemConstant;
+import com.qmth.themis.business.enums.MqGroupEnum;
+import com.qmth.themis.business.enums.MqTagEnum;
+import com.qmth.themis.business.enums.MqTopicEnum;
 import com.qmth.themis.exam.websocket.WebSocketOeServer;
+import com.qmth.themis.mq.listener.RocketMessageConsumer;
 import com.qmth.themis.mq.templete.impl.*;
 import org.apache.rocketmq.common.protocol.heartbeat.MessageModel;
 import org.slf4j.Logger;
@@ -12,11 +15,7 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.CommandLineRunner;
 import org.springframework.stereotype.Component;
 
-import com.qmth.themis.business.constant.SystemConstant;
-import com.qmth.themis.business.enums.MqGroupEnum;
-import com.qmth.themis.business.enums.MqTagEnum;
-import com.qmth.themis.business.enums.MqTopicEnum;
-import com.qmth.themis.mq.listener.RocketMessageConsumer;
+import javax.annotation.Resource;
 
 /**
  * @Description: 服务启动时初始化运行,哪个微服务模块需要则拿此模版去用
@@ -39,43 +38,22 @@ public class StartRunning implements CommandLineRunner {
     public void run(String... args) throws Exception {
         log.info("服务器启动时执行 start");
         /**
-         * session mq start
-         */
-        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.sessionConsumerWebGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.web.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(SessionConcurrentlyImpl.class));
-        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.sessionConsumerWinGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.win.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(SessionConcurrentlyImpl.class));
-        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.sessionConsumerMacGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.mac.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(SessionConcurrentlyImpl.class));
-        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.sessionConsumerWxappGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.wxapp.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(SessionConcurrentlyImpl.class));
-        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.sessionConsumerIosGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.ios.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(SessionConcurrentlyImpl.class));
-        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.sessionConsumerAndroidGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.android.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(SessionConcurrentlyImpl.class));
-        /**
-         * session mq end
+         * session
          */
-
+        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.sessionConsumerGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.web.name() + "||" + MqTagEnum.win.name() + "||" + MqTagEnum.mac.name() + "||" + MqTagEnum.wxapp.name() + "||" + MqTagEnum.ios.name() + "||" + MqTagEnum.android.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(SessionConcurrentlyImpl.class));
         /**
-         * userLog mq start
+         * userLog
          */
-        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.userLogConsumerUserGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.user.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(UserLogConcurrentlyImpl.class));
-        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.userLogConsumerStudentGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.student.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(UserLogConcurrentlyImpl.class));
+        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.userLogConsumerGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.user.name() + "||" + MqTagEnum.student.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(UserLogConcurrentlyImpl.class));
         /**
-         * userLog mq end
+         * task
          */
-
-        /**
-         * task mq start
-         */
-        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.taskConsumerExamStudentImportGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.examStudentImport.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(TaskConcurrentlyImpl.class));
-        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.taskConsumerRoomCodeImportGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.roomCodeImport.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(TaskConcurrentlyImpl.class));
-        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.taskConsumerRoomCodeExportGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.roomCodeExport.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(TaskConcurrentlyImpl.class));
-        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.taskConsumerExamPaperImportGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.examPaperImport.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(TaskConcurrentlyImpl.class));
-        /**
-         * task mq end
-         */
-
+        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.taskConsumerGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.examStudentImport.name() + "||" + MqTagEnum.roomCodeImport.name() + "||" + MqTagEnum.roomCodeExport.name() + "||" + MqTagEnum.examPaperImport.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(TaskConcurrentlyImpl.class));
         /**
          * websocket mq start
          */
-        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.websocketConsumerUnNormalGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.unNormal.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(WebsocketUnNormalConcurrentlyImpl.class));
-        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.websocketConsumerOeGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.oe.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(WebSocketOeServer.class));
+        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.websocketConsumerOeGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.oeHardFinish.name() + "||" + MqTagEnum.oeImBroadcasting.name() + "||" + MqTagEnum.oeImClustering.name() + "||" + MqTagEnum.oeLivenessVerify.name() + "||" + MqTagEnum.oeMonitorFinish.name() + "||" + MqTagEnum.oeWarningFinish.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(WebSocketOeServer.class));
+        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.websocketConsumerDelayGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.oeUnNormal.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(WebsocketUnNormalConcurrentlyImpl.class));
         /**
          * websocket mq end
          */

+ 1 - 2
themis-exam/src/main/java/com/qmth/themis/exam/websocket/WebSocketOeServer.java

@@ -6,7 +6,6 @@ import com.qmth.themis.business.constant.SpringContextHolder;
 import com.qmth.themis.business.constant.SystemConstant;
 import com.qmth.themis.business.dto.WebsocketDto;
 import com.qmth.themis.business.entity.TBSession;
-import com.qmth.themis.business.enums.MqEnum;
 import com.qmth.themis.business.enums.SystemOperationEnum;
 import com.qmth.themis.business.enums.WebsocketTypeEnum;
 import com.qmth.themis.business.util.JacksonUtil;
@@ -155,7 +154,7 @@ public class WebSocketOeServer implements Concurrently {
 //                dt = dt.plusSeconds(Long.parseLong(level.replace("s", "")));
                 tranMap.put("timeOut", time);
                 tranMap.put("mqExecTime", dt.toInstant(ZoneOffset.of("+8")).toEpochMilli());
-                MqDto mqDto = new MqDto(MqTopicEnum.themisTopic.getCode(), MqTagEnum.unNormal.name(), SystemOperationEnum.OE_NET_UN_NORMAL, MqEnum.WEBSOCKET_UN_NORMAL_LOG, String.valueOf(this.recordId), this.tranMap, this.sessionId);
+                MqDto mqDto = new MqDto(MqTopicEnum.themisTopic.getCode(), MqTagEnum.oeUnNormal.name(), SystemOperationEnum.OE_NET_UN_NORMAL, MqTagEnum.oeUnNormal, String.valueOf(this.recordId), this.tranMap, this.sessionId);
                 mqDtoService.assembleSendAsyncDelayMsg(mqDto);
                 //发送延时mq消息end
             }

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

@@ -9,6 +9,7 @@ import java.util.Objects;
 
 import javax.annotation.Resource;
 
+import com.qmth.themis.business.enums.MqTagEnum;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -23,7 +24,6 @@ import com.qmth.themis.business.entity.TMRocketMessage;
 import com.qmth.themis.business.entity.TOeExamBreakHistory;
 import com.qmth.themis.business.enums.BreakReasonEnum;
 import com.qmth.themis.business.enums.ExamRecordStatusEnum;
-import com.qmth.themis.business.enums.MqEnum;
 import com.qmth.themis.business.enums.SystemOperationEnum;
 import com.qmth.themis.business.service.CommonService;
 import com.qmth.themis.business.service.TBSessionService;
@@ -125,10 +125,10 @@ public class MqLogicServiceImpl implements MqLogicService {
     public void execMqUserLogLogic(MqDto mqDto, String key) {
         Gson gson = new Gson();
         String tag = mqDto.getTag();
-        if (tag.contains("user")) {
-            teUserLogService.saveUserLogInfo(mqDto.getTimestamp(), mqDto.getObjId(), MqEnum.valueOf(String.valueOf(mqDto.getType())).getId(), SystemOperationEnum.valueOf(String.valueOf(mqDto.getBody())).getCode(), JacksonUtil.parseJson(mqDto));
-        } else if (tag.contains("student")) {
-            teExamStudentLogService.saveStudentLogInfo(mqDto.getTimestamp(), MqEnum.valueOf(String.valueOf(mqDto.getType())).getId(), SystemOperationEnum.valueOf(String.valueOf(mqDto.getBody())).getCode(), JacksonUtil.parseJson(mqDto));
+        if (tag.contains(MqTagEnum.user.name())) {
+            teUserLogService.saveUserLogInfo(mqDto.getTimestamp(), mqDto.getObjId(), MqTagEnum.valueOf(String.valueOf(mqDto.getType())).getId(), SystemOperationEnum.valueOf(String.valueOf(mqDto.getBody())).getCode(), JacksonUtil.parseJson(mqDto));
+        } else if (tag.contains(MqTagEnum.student.name())) {
+            teExamStudentLogService.saveStudentLogInfo(mqDto.getTimestamp(), MqTagEnum.valueOf(String.valueOf(mqDto.getType())).getId(), SystemOperationEnum.valueOf(String.valueOf(mqDto.getBody())).getCode(), JacksonUtil.parseJson(mqDto));
         }
         mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);
         TMRocketMessage tmRocketMessage = gson.fromJson(gson.toJson(mqDto), TMRocketMessage.class);
@@ -170,11 +170,11 @@ public class MqLogicServiceImpl implements MqLogicService {
         myThreadPool.arbitratePoolTaskExecutor.execute(() -> {
             if (tag.contains("Import")) {
                 TaskImportTemplete taskImportTemplete = null;
-                if (tag.contains("examStudentImport")) {
+                if (tag.contains(MqTagEnum.examStudentImport.name())) {
                     taskImportTemplete = SpringContextHolder.getBean(TaskExamStudentImportTemplete.class);
-                } else if (tag.contains("roomCodeImport")) {
+                } else if (tag.contains(MqTagEnum.roomCodeImport.name())) {
                     taskImportTemplete = SpringContextHolder.getBean(TaskRoomCodeImportTemplete.class);
-                } else if (tag.contains("examPaperImport")) {
+                } else if (tag.contains(MqTagEnum.examPaperImport.name())) {
                     taskImportTemplete = SpringContextHolder.getBean(TaskExamPaperImportTemplete.class);
                 }
                 try {
@@ -184,7 +184,7 @@ public class MqLogicServiceImpl implements MqLogicService {
                 }
             } else {
                 TaskExportTemplete taskExportTemplete = null;
-                if (tag.contains("roomCodeExport")) {
+                if (tag.contains(MqTagEnum.roomCodeExport.name())) {
                     taskExportTemplete = SpringContextHolder.getBean(TaskRoomCodeExportTemplete.class);
                 }
                 try {
@@ -222,7 +222,7 @@ public class MqLogicServiceImpl implements MqLogicService {
             objectMap.put("status", ExamRecordStatusEnum.bREAK_OFF.name());
             redisUtil.setForHash(RedisKeyHelper.examRecordCacheKey(recordId), objectMap);
         }
-        teExamStudentLogService.saveStudentLogInfo(mqDto.getTimestamp(), MqEnum.valueOf(String.valueOf(mqDto.getType())).getId(), SystemOperationEnum.valueOf(String.valueOf(mqDto.getBody())).getCode(), JacksonUtil.parseJson(mqDto));
+        teExamStudentLogService.saveStudentLogInfo(mqDto.getTimestamp(), MqTagEnum.valueOf(String.valueOf(mqDto.getType())).getId(), SystemOperationEnum.valueOf(String.valueOf(mqDto.getBody())).getCode(), JacksonUtil.parseJson(mqDto));
         TMRocketMessage tmRocketMessage = gson.fromJson(gson.toJson(mqDto), TMRocketMessage.class);
         Map map = new HashMap();
         map.put(SystemConstant.MQDTO_OBJ, JacksonUtil.parseJson(mqDto));
@@ -358,7 +358,7 @@ public class MqLogicServiceImpl implements MqLogicService {
         redisUtil.setForHash(RedisKeyHelper.examRecordCacheKey(recordId), objectMap);
 
         Gson gson = new Gson();
-        teExamStudentLogService.saveStudentLogInfo(mqDto.getTimestamp(), MqEnum.valueOf(String.valueOf(mqDto.getType())).getId(), SystemOperationEnum.valueOf(String.valueOf(mqDto.getBody())).getCode(), JacksonUtil.parseJson(mqDto));
+        teExamStudentLogService.saveStudentLogInfo(mqDto.getTimestamp(), MqTagEnum.valueOf(String.valueOf(mqDto.getType())).getId(), SystemOperationEnum.valueOf(String.valueOf(mqDto.getBody())).getCode(), JacksonUtil.parseJson(mqDto));
         mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);
         TMRocketMessage tmRocketMessage = gson.fromJson(gson.toJson(mqDto), TMRocketMessage.class);
         tmRocketMessage.setBody(JacksonUtil.parseJson(tmRocketMessage.getBody()));

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

@@ -2,21 +2,7 @@ package com.qmth.themis.task.quartz.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.qmth.themis.business.entity.TEExamActivity;
-import com.qmth.themis.business.entity.TEExamStudent;
-import com.qmth.themis.business.entity.TOeExamRecord;
-import com.qmth.themis.business.enums.ExamRecordStatusEnum;
-import com.qmth.themis.business.enums.FinishTypeEnum;
-import com.qmth.themis.business.enums.MqEnum;
 import com.qmth.themis.business.service.TEExamActivityService;
-import com.qmth.themis.business.service.TEExamService;
-import com.qmth.themis.business.service.TEExamStudentService;
-import com.qmth.themis.business.service.TOeExamRecordService;
-import com.qmth.themis.business.util.JacksonUtil;
-import com.qmth.themis.business.util.RedisUtil;
-import com.qmth.themis.business.dto.MqDto;
-import com.qmth.themis.business.enums.MqTagEnum;
-import com.qmth.themis.business.enums.MqTopicEnum;
-import com.qmth.themis.business.service.MqDtoService;
 import com.qmth.themis.task.quartz.service.QuartzLogicService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -24,9 +10,6 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
 import java.util.Objects;
 
 /**

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

@@ -5,6 +5,7 @@ import java.util.Map;
 
 import javax.annotation.Resource;
 
+import com.qmth.themis.business.constant.SystemConstant;
 import com.qmth.themis.mq.templete.impl.*;
 import org.apache.rocketmq.common.protocol.heartbeat.MessageModel;
 import org.slf4j.Logger;
@@ -50,48 +51,34 @@ public class StartRunning implements CommandLineRunner {
         Map mqMap = new HashMap();
         mqMap.put("name", MqJob.class.getName());
         quartzService.deleteJob(QuartzTaskEnum.mqJobName.name(), QuartzTaskEnum.mqJobGroupName.name());
-        quartzService.addJob(MqJob.class, QuartzTaskEnum.mqJobName.name(), QuartzTaskEnum.mqJobGroupName.name(), "0 0/1 * * * ?", mqMap);
+        quartzService.addJob(MqJob.class, QuartzTaskEnum.mqJobName.name(), QuartzTaskEnum.mqJobGroupName.name(), "0 0/2 * * * ?", mqMap);
         log.info("增加mqjob end");
 
         /**
-         * session mq start
+         * session
          */
-        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.sessionConsumerWebGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.web.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(SessionConcurrentlyImpl.class));
-        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.sessionConsumerWinGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.win.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(SessionConcurrentlyImpl.class));
-        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.sessionConsumerMacGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.mac.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(SessionConcurrentlyImpl.class));
-        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.sessionConsumerWxappGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.wxapp.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(SessionConcurrentlyImpl.class));
-        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.sessionConsumerIosGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.ios.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(SessionConcurrentlyImpl.class));
-        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.sessionConsumerAndroidGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.android.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(SessionConcurrentlyImpl.class));
+        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.sessionConsumerGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.web.name() + "||" + MqTagEnum.win.name() + "||" + MqTagEnum.mac.name() + "||" + MqTagEnum.wxapp.name() + "||" + MqTagEnum.ios.name() + "||" + MqTagEnum.android.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(SessionConcurrentlyImpl.class));
         /**
-         * session mq end
+         * userLog
          */
-
+        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.userLogConsumerGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.user.name() + "||" + MqTagEnum.student.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(UserLogConcurrentlyImpl.class));
         /**
-         * userLog mq start
+         * task
          */
-        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.userLogConsumerUserGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.user.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(UserLogConcurrentlyImpl.class));
-        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.userLogConsumerStudentGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.student.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(UserLogConcurrentlyImpl.class));
+        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.taskConsumerGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.examStudentImport.name() + "||" + MqTagEnum.roomCodeImport.name() + "||" + MqTagEnum.roomCodeExport.name() + "||" + MqTagEnum.examPaperImport.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(TaskConcurrentlyImpl.class));
         /**
-         * userLog mq end
-         */
-
-        /**
-         * task mq start
+         * websocket mq start
          */
-        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.taskConsumerExamStudentImportGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.examStudentImport.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(TaskConcurrentlyImpl.class));
-        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.taskConsumerRoomCodeImportGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.roomCodeImport.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(TaskConcurrentlyImpl.class));
-        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.taskConsumerRoomCodeExportGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.roomCodeExport.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(TaskConcurrentlyImpl.class));
-        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.taskConsumerExamPaperImportGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.examPaperImport.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(TaskConcurrentlyImpl.class));
+        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.websocketConsumerDelayGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.oeUnNormal.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(WebsocketUnNormalConcurrentlyImpl.class));
         /**
-         * task mq end
+         * websocket mq end
          */
-
         /**
-         * websocket mq start
+         * quartz mq start
          */
-        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.websocketConsumerUnNormalGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.unNormal.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(WebsocketUnNormalConcurrentlyImpl.class));
+        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.quartzConsumerGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.examActivity.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(QuartzOrderlyImpl.class));
         /**
-         * websocket mq end
+         * quartz mq end
          */
         //计算客观分
         rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.calculateObjectiveScoreGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.calculateObjectiveScore.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(CalculateObjectiveScoreConcurrentlyImpl.class));
@@ -102,13 +89,6 @@ public class StartRunning implements CommandLineRunner {
         //活体验证保存
         rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.livenessVerifySaveGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.livenessVerifySave.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(LivenessVerifyConcurrentlyImpl.class));
 
-        /**
-         * quartz mq start
-         */
-        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.quartzConsumerExamActivityGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.examActivity.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(QuartzOrderlyImpl.class));
-        /**
-         * quartz mq end
-         */
         //考试记录数据持久化
         rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.examRecordPersistedGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.examRecordPersisted.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(ExamRecordPersistedConcurrentlyImpl.class));
 
@@ -119,6 +99,7 @@ public class StartRunning implements CommandLineRunner {
         rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.examRecordUpdateGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.examRecordUpdate.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(ExamRecordUpdateConcurrentlyImpl.class));
         //考试记录数据初始化
         rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.examRecordInitGroup.getCode(), MqTopicEnum.themisTopic.getCode(), MqTagEnum.examRecordInit.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(ExamRecordInitConcurrentlyImpl.class));
+        SystemConstant.initTempFiles();
         log.info("服务器启动时执行 end");
     }
 }