wangliang 4 rokov pred
rodič
commit
37353192ae

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

@@ -25,6 +25,8 @@ import com.qmth.themis.common.enums.ExceptionResultEnum;
 import com.qmth.themis.common.enums.Platform;
 import com.qmth.themis.common.enums.Source;
 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.common.util.AesUtil;
 import com.qmth.themis.common.util.Result;
 import com.qmth.themis.common.util.ResultUtil;
@@ -215,18 +217,17 @@ public class TBUserController {
                 expireTime.getDate().getTime());
         redisUtil.setUserSession(sessionId, tbSession, expireTime.getExpireSeconds());
         //mq发送消息start
-        MqDto mqDto = new MqDto(mqUtil.getMqGroupDomain().getTopic(), platform.name(), tbSession,
-                MqTagEnum.valueOf(platform.name()), tbSession.getId(), user.getLoginName());
+        MqDto mqDto = new MqDto(mqUtil.getMqGroupDomain().getTopic(), platform.name(), SystemOperationEnum.SESSION, sessionId);
         mqDtoService.assembleSendOneWayMsg(mqDto);
         MqDto mqDtoLog = new MqDto(mqUtil.getMqGroupDomain().getTopic(), MqTagEnum.USER.name(), SystemOperationEnum.LOGIN,
                 MqTagEnum.USER, String.valueOf(user.getId()), user.getLoginName());
         mqDtoService.assembleSendOneWayMsg(mqDtoLog);
         //mq发送消息end
         //测试
-//        String test = SignatureInfo.build(SignatureType.TOKEN, sessionId, token);
+        String test = SignatureInfo.build(SignatureType.TOKEN, sessionId, token);
         Map<String, Object> map = new HashMap<>();
-        map.put(SystemConstant.ACCESS_TOKEN, token);
-//        map.put(SystemConstant.ACCESS_TOKEN, test);
+//        map.put(SystemConstant.ACCESS_TOKEN, token);
+        map.put(SystemConstant.ACCESS_TOKEN, test);
         map.put(SystemConstant.ACCOUNT, user);
         map.put(SystemConstant.SESSION_ID, sessionId);
         map.put("roleCodes", authDto.getRoleCodes());

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

@@ -541,8 +541,8 @@ public class TIeInvigilateController {
                 ExamStudentCacheBean examStudentCacheBean = teExamStudentService.getExamStudentCacheBean(eb.getExamStudentId());
                 MqDto mqDto = new MqDto(mqUtil.getMqGroupDomain().getTopic(), MqTagEnum.STUDENT.name(), eb.getStatus() == 0 ? SystemOperationEnum.BREACH_HANDLE : SystemOperationEnum.BREACH_REVOKE, MqTagEnum.STUDENT, String.valueOf(examStudentCacheBean.getStudentId()), properties, examStudentCacheBean.getIdentity());
                 mqDtoService.assembleSendOneWayMsg(mqDto);
-                teExamBreachLogService.saveOrUpdate(eb);
             }
+            teExamBreachLogService.saveOrUpdateBatch(teExamBreachLogList);
         }
         return ResultUtil.ok(Collections.singletonMap(SystemConstant.SUCCESS, true));
     }

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

@@ -32,6 +32,16 @@ public class MqDto implements Serializable {
 
     }
 
+    public MqDto(String topic, String tag, Object body, String objId) {
+        this.topic = topic;
+        this.tag = tag;
+        this.body = body;
+        this.type = MqTagEnum.valueOf(tag);
+        this.objId = objId;
+        this.timestamp = System.currentTimeMillis();
+        this.id = String.valueOf(UUID.randomUUID()).replaceAll("-", "");
+    }
+
     public MqDto(String topic, String tag, Object body, MqTagEnum type, String objId, String objName) {
         this.topic = topic;
         this.tag = tag;

+ 2 - 0
themis-business/src/main/java/com/qmth/themis/business/enums/SystemOperationEnum.java

@@ -13,6 +13,8 @@ public enum SystemOperationEnum {
 
     LOGOUT("注销","用户注销"),
 
+    SESSION("会话","用户会话"),
+
     FIRST_PREPARE("首次候考", "进入候考"),
 
     ANSWERING("正在答题","进入考试"),

+ 0 - 8
themis-business/src/main/java/com/qmth/themis/business/service/TBSessionService.java

@@ -12,12 +12,4 @@ import com.qmth.themis.business.entity.TBSession;
  */
 public interface TBSessionService extends IService<TBSession> {
 
-    /**
-     * 保存session信息
-     *
-     * @param tbSession
-     * @param mqTimestamp
-     * @return
-     */
-    public boolean saveSessionInfo(TBSession tbSession, Long mqTimestamp);
 }

+ 0 - 36
themis-business/src/main/java/com/qmth/themis/business/service/impl/TBSessionServiceImpl.java

@@ -1,16 +1,11 @@
 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.dao.TBSessionMapper;
 import com.qmth.themis.business.entity.TBSession;
 import com.qmth.themis.business.service.TBSessionService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 
-import java.util.Objects;
-
 /**
  * @Description: 会话信息 服务实现类
  * @Param:
@@ -20,36 +15,5 @@ import java.util.Objects;
  */
 @Service
 public class TBSessionServiceImpl extends ServiceImpl<TBSessionMapper, TBSession> implements TBSessionService {
-    private final static Logger log = LoggerFactory.getLogger(TBSessionServiceImpl.class);
 
-    /**
-     * 保存session信息
-     *
-     * @param tbSession
-     * @param mqTimestamp
-     * @return
-     */
-    @Override
-    public boolean saveSessionInfo(TBSession tbSession, Long mqTimestamp) {
-        TBSession tbSessionDb = this.getById(tbSession.getId());
-        if (Objects.isNull(tbSessionDb)) {
-            Gson gson = new Gson();
-            tbSessionDb = gson.fromJson(gson.toJson(tbSession), TBSession.class);
-            this.saveOrUpdate(tbSessionDb);
-        } else if (Objects.nonNull(tbSessionDb.getUpdateTime())) {
-            Long dbtimestamp = Objects.nonNull(tbSessionDb.getUpdateTime()) ? tbSessionDb.getUpdateTime() : 0L;
-            if (mqTimestamp.longValue() > dbtimestamp.longValue()) {
-                log.info("mq时间大于db时间,可以更新");
-                tbSessionDb.setSource(tbSession.getSource());
-                tbSessionDb.setPlatform(tbSession.getPlatform());
-                tbSessionDb.setDeviceId(tbSession.getDeviceId());
-                tbSessionDb.setAccessToken(tbSession.getAccessToken());
-                tbSessionDb.setLastAccessIp(tbSession.getLastAccessIp());
-                tbSessionDb.setLastAccessTime(tbSession.getLastAccessTime());
-                tbSessionDb.setExpireTime(tbSession.getExpireTime());
-                this.saveOrUpdate(tbSessionDb);
-            }
-        }
-        return true;
-    }
 }

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

@@ -103,8 +103,7 @@ public class TEMobileServiceImpl implements TEMobileService {
         ret.setTime(System.currentTimeMillis());
         ret.setMode(mode);
         //mq发送消息start
-        MqDto mqDto = new MqDto(mqUtil.getMqGroupDomain().getTopic(), platform.name(), tbSession,
-                MqTagEnum.valueOf(platform.name()), tbSession.getId(), es.getIdentity());
+        MqDto mqDto = new MqDto(mqUtil.getMqGroupDomain().getTopic(), platform.name(), SystemOperationEnum.SESSION, sessionId);
         mqDtoService.assembleSendOneWayMsg(mqDto);
         MqDto mqDtoLog = new MqDto(mqUtil.getMqGroupDomain().getTopic(), MqTagEnum.STUDENT.name(),
                 SystemOperationEnum.LOGIN, MqTagEnum.STUDENT, String.valueOf(es.getStudentId()), es.getIdentity());

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

@@ -227,8 +227,7 @@ public class TEStudentController {
                 ServletUtil.getRequest().getLocalAddr(), token, expireTime.getDate().getTime());
         redisUtil.setUserSession(sessionId, tbSession, expireTime.getExpireSeconds());
         //mq发送消息start
-        MqDto mqDto = new MqDto(mqUtil.getMqGroupDomain().getTopic(), platform.name(), tbSession,
-                MqTagEnum.valueOf(platform.name()), tbSession.getId(), teStudent.getIdentity());
+        MqDto mqDto = new MqDto(mqUtil.getMqGroupDomain().getTopic(), platform.name(), SystemOperationEnum.SESSION, sessionId);
         mqDtoService.assembleSendOneWayMsg(mqDto);
         MqDto mqDtoLog = new MqDto(mqUtil.getMqGroupDomain().getTopic(), MqTagEnum.STUDENT.name(),
                 SystemOperationEnum.LOGIN, MqTagEnum.STUDENT, String.valueOf(teStudent.getId()),

+ 30 - 5
themis-exam/src/main/java/com/qmth/themis/exam/listener/service/impl/MqOeLogicServiceImpl.java

@@ -106,7 +106,12 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
                     Long examStudentId = ExamRecordCacheUtil.getExamStudentId(recordId);
                     ExamStudentCacheBean examStudentCacheBean = teExamStudentService.getExamStudentCacheBean(examStudentId);
                     WebSocketOeServer webSocketOeServer = webSocketMap.get(clientWebsocketId);
-                    if (Objects.nonNull(webSocketOeServer.getRecordId()) && webSocketOeServer.getRecordId().longValue() == recordId.longValue()) {
+                    ExamRecordStatusEnum examRecordStatusEnum = ExamRecordCacheUtil.getStatus(recordId);
+                    if ((Objects.nonNull(examRecordStatusEnum)
+                            && !Objects.equals(ExamRecordStatusEnum.PERSISTED, examRecordStatusEnum)
+                            && !Objects.equals(ExamRecordStatusEnum.FINISHED, examRecordStatusEnum))
+                            && Objects.nonNull(webSocketOeServer.getRecordId())
+                            && webSocketOeServer.getRecordId().longValue() == recordId.longValue()) {
                         match.set(true);
                         Map map = new HashMap<>();
                         map.put("form", mqDto.getObjName());
@@ -128,7 +133,12 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
                     Long examStudentId = ExamRecordCacheUtil.getExamStudentId(recordId);
                     ExamStudentCacheBean examStudentCacheBean = teExamStudentService.getExamStudentCacheBean(examStudentId);
                     WebSocketOeServer webSocketOeServer = webSocketMap.get(clientWebsocketId);
-                    if (Objects.nonNull(webSocketOeServer.getRecordId()) && webSocketOeServer.getRecordId().longValue() == recordId.longValue()) {
+                    ExamRecordStatusEnum examRecordStatusEnum = ExamRecordCacheUtil.getStatus(recordId);
+                    if ((Objects.nonNull(examRecordStatusEnum)
+                            && !Objects.equals(ExamRecordStatusEnum.PERSISTED, examRecordStatusEnum)
+                            && !Objects.equals(ExamRecordStatusEnum.FINISHED, examRecordStatusEnum))
+                            && Objects.nonNull(webSocketOeServer.getRecordId())
+                            && webSocketOeServer.getRecordId().longValue() == recordId.longValue()) {
                         match.set(true);
                         Map map = new HashMap<>();
                         map.put(SystemConstant.RECORD_ID, recordId);
@@ -148,7 +158,12 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
                 Long examStudentId = ExamRecordCacheUtil.getExamStudentId(recordId);
                 Long examActivityId = ExamRecordCacheUtil.getExamActivityId(recordId);
                 WebSocketOeServer webSocketOeServer = webSocketMap.get(clientWebsocketId);
-                if (Objects.nonNull(webSocketOeServer.getRecordId()) && webSocketOeServer.getRecordId().longValue() == recordId.longValue()) {
+                ExamRecordStatusEnum examRecordStatusEnum = ExamRecordCacheUtil.getStatus(recordId);
+                if ((Objects.nonNull(examRecordStatusEnum)
+                        && !Objects.equals(ExamRecordStatusEnum.PERSISTED, examRecordStatusEnum)
+                        && !Objects.equals(ExamRecordStatusEnum.FINISHED, examRecordStatusEnum))
+                        && Objects.nonNull(webSocketOeServer.getRecordId())
+                        && webSocketOeServer.getRecordId().longValue() == recordId.longValue()) {
                     match.set(true);
                     Map<String, Object> prop = mqDto.getProperties();
                     Map map = new HashMap<>();
@@ -173,7 +188,12 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
                 Long examStudentId = ExamRecordCacheUtil.getExamStudentId(recordId);
                 ExamStudentCacheBean examStudentCacheBean = teExamStudentService.getExamStudentCacheBean(examStudentId);
                 WebSocketOeServer webSocketOeServer = webSocketMap.get(clientWebsocketId);
-                if (Objects.nonNull(webSocketOeServer.getRecordId()) && webSocketOeServer.getRecordId().longValue() == recordId.longValue()) {
+                ExamRecordStatusEnum examRecordStatusEnum = ExamRecordCacheUtil.getStatus(recordId);
+                if ((Objects.nonNull(examRecordStatusEnum)
+                        && !Objects.equals(ExamRecordStatusEnum.PERSISTED, examRecordStatusEnum)
+                        && !Objects.equals(ExamRecordStatusEnum.FINISHED, examRecordStatusEnum))
+                        && Objects.nonNull(webSocketOeServer.getRecordId())
+                        && webSocketOeServer.getRecordId().longValue() == recordId.longValue()) {
                     match.set(true);
                     Map map = new HashMap<>();
                     map.put(SystemConstant.RECORD_ID, recordId);
@@ -193,7 +213,12 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
             String clientWebsocketId = ExamRecordCacheUtil.getClientWebsocketId(recordId);
             if (Objects.nonNull(webSocketMap.get(clientWebsocketId))) {
                 WebSocketOeServer webSocketOeServer = webSocketMap.get(clientWebsocketId);
-                if (Objects.nonNull(webSocketOeServer.getRecordId()) && webSocketOeServer.getRecordId().longValue() == recordId.longValue()) {
+                ExamRecordStatusEnum examRecordStatusEnum = ExamRecordCacheUtil.getStatus(recordId);
+                if ((Objects.nonNull(examRecordStatusEnum)
+                        && !Objects.equals(ExamRecordStatusEnum.PERSISTED, examRecordStatusEnum)
+                        && !Objects.equals(ExamRecordStatusEnum.FINISHED, examRecordStatusEnum))
+                        && Objects.nonNull(webSocketOeServer.getRecordId())
+                        && webSocketOeServer.getRecordId().longValue() == recordId.longValue()) {
                     match.set(true);
                     WebsocketDto websocketDto = null;
                     switch (tag.toUpperCase()) {