瀏覽代碼

考生端websocket

wangliang 5 年之前
父節點
當前提交
835a2c7df8

+ 73 - 33
themis-business/src/main/java/com/qmth/themis/business/service/impl/TOeExamRecordServiceImpl.java

@@ -1,13 +1,5 @@
 package com.qmth.themis.business.service.impl;
 
-import java.util.Date;
-import java.util.Map;
-
-import javax.annotation.Resource;
-
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.themis.business.cache.RedisKeyHelper;
 import com.qmth.themis.business.cache.bean.ExamRecordCacheBean;
@@ -15,6 +7,14 @@ import com.qmth.themis.business.dao.TOeExamRecordMapper;
 import com.qmth.themis.business.entity.TOeExamRecord;
 import com.qmth.themis.business.service.TOeExamRecordService;
 import com.qmth.themis.business.util.RedisUtil;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
 
 /**
  * @Description: 考试记录 服务实现类
@@ -28,37 +28,77 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
 
     @Resource
     TOeExamRecordMapper tOeExamRecordMapper;
-    
+
     @Resource
     RedisUtil redisUtil;
 
     @Override
     public Map getUnFinishExam(Long studentId) {
-        return tOeExamRecordMapper.getUnFinishExam(studentId);
+        Map unFinishExam = tOeExamRecordMapper.getUnFinishExam(studentId);
+        if (Objects.nonNull(unFinishExam)) {
+            Map finalMap = new HashMap();
+            Map<String, Object> waitingMap = new HashMap();
+            waitingMap.put("id", unFinishExam.get("id"));
+            waitingMap.put("name", unFinishExam.get("name"));
+            waitingMap.put("mode", unFinishExam.get("mode"));
+            waitingMap.put("preNotice", unFinishExam.get("preNotice"));
+            waitingMap.put("preNoticeStaySeconds", unFinishExam.get("preNoticeStaySeconds"));
+            waitingMap.put("postNotice", unFinishExam.get("postNotice"));
+            finalMap.put("waiting", waitingMap);
+
+            Map<String, Object> activityMap = new HashMap();
+            activityMap.put("recordId", unFinishExam.get("recordId"));
+            activityMap.put("minDurationSeconds", unFinishExam.get("minDurationSeconds"));
+            activityMap.put("clientVideoPush", unFinishExam.get("clientVideoPush"));
+            activityMap.put("cameraPhotoUpload", unFinishExam.get("cameraPhotoUpload"));
+            activityMap.put("courseCode", unFinishExam.get("courseCode"));
+            activityMap.put("wxappPhotoUpload", unFinishExam.get("wxappPhotoUpload"));
+            activityMap.put("inProcessLivenessRetryCount", unFinishExam.get("inProcessLivenessRetryCount"));
+            activityMap.put("examStudentId", unFinishExam.get("examStudentId"));
+            activityMap.put("inProcessLivenessVerify", unFinishExam.get("inProcessLivenessVerify"));
+            activityMap.put("inProcessFaceStrangerIgnore", unFinishExam.get("inProcessFaceStrangerIgnore"));
+            activityMap.put("wxappVideoRecord", unFinishExam.get("wxappVideoRecord"));
+            activityMap.put("inProcessFaceVerify", unFinishExam.get("inProcessFaceVerify"));
+            activityMap.put("courseName", unFinishExam.get("courseName"));
+            activityMap.put("wxappVideoPush", unFinishExam.get("wxappVideoPush"));
+            activityMap.put("inProcessLivenessIntervalSeconds", unFinishExam.get("inProcessLivenessIntervalSeconds"));
+            activityMap.put("prepareSeconds", unFinishExam.get("prepareSeconds"));
+            activityMap.put("fouceFinish", unFinishExam.get("fouceFinish"));
+            activityMap.put("entryAuthenticationPolicy", unFinishExam.get("entryAuthenticationPolicy"));
+            activityMap.put("maxDurationSeconds", unFinishExam.get("maxDurationSeconds"));
+            activityMap.put("examCount", unFinishExam.get("examCount"));
+            activityMap.put("inProcessLivenessJudgePolicy", unFinishExam.get("inProcessLivenessJudgePolicy"));
+            activityMap.put("id", unFinishExam.get("examActivityId"));
+
+            finalMap.put("activity", activityMap);
+            return finalMap;
+        } else {
+            return unFinishExam;
+        }
     }
-    
-    @Transactional 
+
+    @Transactional
     @Override
-    public Long saveByPrepare(Long examId,Long examActivityId,Long examStudentId,Long paperId,Integer serialNumber) {
-    	TOeExamRecord er=new TOeExamRecord();
-    	er.setExamId(examId);
-    	er.setExamActivityId(examActivityId);
-    	er.setExamStudentId(examStudentId);
-    	er.setPaperId(paperId);
-    	er.setSerialNumber(serialNumber);
-    	er.setFirstPrepareTime(new Date());
-    	er.setStatus(0);
-    	saveOrUpdate(er);
-    	ExamRecordCacheBean erCache=new ExamRecordCacheBean();
-    	erCache.setId(er.getId());
-    	erCache.setExamId(examId);
-    	erCache.setExamActivityId(examActivityId);
-    	erCache.setExamStudentId(examStudentId);
-    	erCache.setPaperId(paperId);
-    	erCache.setSerialNumber(serialNumber);
-    	erCache.setFirstPrepareTime(new Date());
-    	erCache.setStatus(0);
-    	redisUtil.set(RedisKeyHelper.examRecordCacheKey(er.getId()), erCache);
-    	return er.getId();
+    public Long saveByPrepare(Long examId, Long examActivityId, Long examStudentId, Long paperId, Integer serialNumber) {
+        TOeExamRecord er = new TOeExamRecord();
+        er.setExamId(examId);
+        er.setExamActivityId(examActivityId);
+        er.setExamStudentId(examStudentId);
+        er.setPaperId(paperId);
+        er.setSerialNumber(serialNumber);
+        er.setFirstPrepareTime(new Date());
+        er.setStatus(0);
+        saveOrUpdate(er);
+        ExamRecordCacheBean erCache = new ExamRecordCacheBean();
+        erCache.setId(er.getId());
+        erCache.setExamId(examId);
+        erCache.setExamActivityId(examActivityId);
+        erCache.setExamStudentId(examStudentId);
+        erCache.setPaperId(paperId);
+        erCache.setSerialNumber(serialNumber);
+        erCache.setFirstPrepareTime(new Date());
+        erCache.setStatus(0);
+        redisUtil.set(RedisKeyHelper.examRecordCacheKey(er.getId()), erCache);
+        return er.getId();
     }
 }

+ 1 - 1
themis-business/src/main/resources/mapper/TEExamMapper.xml

@@ -29,7 +29,7 @@
         from
         (
             select
-            distinct tee.id,teea.id as examActivityId, tee.name, tee.mode, tee.pre_notice as preNotice, tee.pre_notice_stay_seconds as
+            distinct tee.id, tee.name, tee.mode, tee.pre_notice as preNotice, tee.pre_notice_stay_seconds as
             preNoticeStaySeconds, tee.post_notice as postNotice, datediff(now(), teea.start_time) as reallyTime
         from
         t_e_exam_student tees

+ 4 - 1
themis-exam/src/main/java/com/qmth/themis/exam/websocket/WebSocketServer.java

@@ -15,13 +15,16 @@ import com.qmth.themis.common.signature.SignatureType;
 import com.qmth.themis.common.util.Result;
 import com.qmth.themis.exam.config.DictionaryConfig;
 import com.qmth.themis.exam.enums.WebsocketTypeEnum;
+import com.qmth.themis.exam.util.ServletUtil;
 import com.qmth.themis.exam.websocketTemplete.WebSocketOeMessageTemplete;
 import com.qmth.themis.mq.dto.MqDto;
 import com.qmth.themis.mq.service.MqDtoService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.http.server.ServerHttpRequest;
 import org.springframework.stereotype.Component;
 
+import javax.servlet.http.HttpServletRequest;
 import javax.websocket.*;
 import javax.websocket.server.PathParam;
 import javax.websocket.server.ServerEndpoint;
@@ -74,7 +77,6 @@ public class WebSocketServer
         if (Objects.isNull(mapParameter.get("deviceId")) || mapParameter.get("deviceId").size() == 0) {
             throw new BusinessException(ExceptionResultEnum.DEVICE_ID_INVALID);
         }
-        log.info("uri:{}", session.getRequestURI());
         this.deviceId = String.valueOf(mapParameter.get("deviceId").get(0));
         this.Authorization = String.valueOf(mapParameter.get("Authorization").get(0));
         this.time = Long.parseLong(String.valueOf(mapParameter.get("time").get(0)));
@@ -112,6 +114,7 @@ public class WebSocketServer
                         tranMap = new HashMap<>();
                         tranMap.put("recordId", this.recordId);
                         tranMap.put("deviceId", this.deviceId);
+                        //todo 这里获取真实ip
                         tranMap.put("ip", "");
                         tranMap.put("updateTime", this.updateTime);
                     } catch (IOException e) {