Browse Source

新增监考老师强制收卷(操作人)

wangliang 3 years ago
parent
commit
7f1a9bbf55

+ 0 - 18
themis-admin/src/main/java/com/qmth/themis/admin/api/TOeTencentVideoLogController.java

@@ -1,18 +0,0 @@
-package com.qmth.themis.admin.api;
-
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * <p>
- * 腾讯视频日志 前端控制器
- * </p>
- *
- * @author wangliang
- * @since 2022-06-23
- */
-@RestController
-@RequestMapping("/t-oe-tencent-video-log")
-public class TOeTencentVideoLogController {
-
-}

+ 0 - 16
themis-business/src/main/java/com/qmth/themis/business/dao/TOeTencentVideoLogMapper.java

@@ -1,16 +0,0 @@
-package com.qmth.themis.business.dao;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.qmth.themis.business.entity.TOeTencentVideoLog;
-
-/**
- * <p>
- * 腾讯视频日志 Mapper 接口
- * </p>
- *
- * @author wangliang
- * @since 2022-06-23
- */
-public interface TOeTencentVideoLogMapper extends BaseMapper<TOeTencentVideoLog> {
-
-}

+ 0 - 125
themis-business/src/main/java/com/qmth/themis/business/entity/TOeTencentVideoLog.java

@@ -1,125 +0,0 @@
-package com.qmth.themis.business.entity;
-
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-
-import java.io.Serializable;
-import java.math.BigDecimal;
-
-/**
- * <p>
- * 腾讯视频日志
- * </p>
- *
- * @author wangliang
- * @since 2022-06-23
- */
-@ApiModel(value = "TOeTencentVideoLog对象", description = "腾讯视频日志")
-public class TOeTencentVideoLog implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @ApiModelProperty(value = "主键")
-    @JsonSerialize(using = ToStringSerializer.class)
-    private Long id;
-
-    @ApiModelProperty(value = "考生id")
-    @JsonSerialize(using = ToStringSerializer.class)
-    private Long examStudentId;
-
-    @ApiModelProperty(value = "考试id")
-    @JsonSerialize(using = ToStringSerializer.class)
-    private Long examRecordId;
-
-    @ApiModelProperty(value = "视频id")
-    private String vid;
-
-    @ApiModelProperty(value = "视频用时")
-    private BigDecimal duration;
-
-    @ApiModelProperty(value = "开启转录的视频源")
-    private String monitorRecord;
-
-    @ApiModelProperty(value = "转录视频地址")
-    private String tencentVideoUrl;
-
-    @ApiModelProperty(value = "开始时间")
-    private Long createTime;
-
-    @ApiModelProperty(value = "结束时间")
-    private Long endTime;
-
-    public BigDecimal getDuration() {
-        return duration;
-    }
-
-    public void setDuration(BigDecimal duration) {
-        this.duration = duration;
-    }
-
-    public String getVid() {
-        return vid;
-    }
-
-    public void setVid(String vid) {
-        this.vid = vid;
-    }
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public Long getExamStudentId() {
-        return examStudentId;
-    }
-
-    public void setExamStudentId(Long examStudentId) {
-        this.examStudentId = examStudentId;
-    }
-
-    public Long getExamRecordId() {
-        return examRecordId;
-    }
-
-    public void setExamRecordId(Long examRecordId) {
-        this.examRecordId = examRecordId;
-    }
-
-    public String getMonitorRecord() {
-        return monitorRecord;
-    }
-
-    public void setMonitorRecord(String monitorRecord) {
-        this.monitorRecord = monitorRecord;
-    }
-
-    public String getTencentVideoUrl() {
-        return tencentVideoUrl;
-    }
-
-    public void setTencentVideoUrl(String tencentVideoUrl) {
-        this.tencentVideoUrl = tencentVideoUrl;
-    }
-
-    public Long getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Long createTime) {
-        this.createTime = createTime;
-    }
-
-    public Long getEndTime() {
-        return endTime;
-    }
-
-    public void setEndTime(Long endTime) {
-        this.endTime = endTime;
-    }
-}

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

@@ -1,16 +0,0 @@
-package com.qmth.themis.business.service;
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.qmth.themis.business.entity.TOeTencentVideoLog;
-
-/**
- * <p>
- * 腾讯视频日志 服务类
- * </p>
- *
- * @author wangliang
- * @since 2022-06-23
- */
-public interface TOeTencentVideoLogService extends IService<TOeTencentVideoLog> {
-
-}

+ 0 - 20
themis-business/src/main/java/com/qmth/themis/business/service/impl/TOeTencentVideoLogServiceImpl.java

@@ -1,20 +0,0 @@
-package com.qmth.themis.business.service.impl;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.qmth.themis.business.dao.TOeTencentVideoLogMapper;
-import com.qmth.themis.business.entity.TOeTencentVideoLog;
-import com.qmth.themis.business.service.TOeTencentVideoLogService;
-import org.springframework.stereotype.Service;
-
-/**
- * <p>
- * 腾讯视频日志 服务实现类
- * </p>
- *
- * @author wangliang
- * @since 2022-06-23
- */
-@Service
-public class TOeTencentVideoLogServiceImpl extends ServiceImpl<TOeTencentVideoLogMapper, TOeTencentVideoLog> implements TOeTencentVideoLogService {
-
-}

+ 0 - 5
themis-business/src/main/resources/mapper/TOeTencentVideoLogMapper.xml

@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.qmth.themis.business.dao.TOeTencentVideoLogMapper">
-
-</mapper>

+ 15 - 12
themis-exam/src/main/java/com/qmth/themis/exam/listener/service/impl/MqOeLogicServiceImpl.java

@@ -12,7 +12,10 @@ import com.qmth.themis.business.entity.TEExamStudentLog;
 import com.qmth.themis.business.entity.TIeExamInvigilateNotice;
 import com.qmth.themis.business.entity.TOeExamRecord;
 import com.qmth.themis.business.enums.*;
-import com.qmth.themis.business.service.*;
+import com.qmth.themis.business.service.TEExamStudentLogService;
+import com.qmth.themis.business.service.TEExamStudentService;
+import com.qmth.themis.business.service.TIeExamInvigilateNoticeService;
+import com.qmth.themis.business.service.TMRocketMessageService;
 import com.qmth.themis.business.util.JacksonUtil;
 import com.qmth.themis.common.contanst.Constants;
 import com.qmth.themis.common.exception.BusinessException;
@@ -64,9 +67,9 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
      */
     @Transactional
     public Map<String, Object> oeMonitorFinishLogicPersisted(Object s,
-                                                                ConcurrentHashMap<String, WebSocketOeServer> webSocketMap,
-                                                                MqDto mqDto,
-                                                                String key) {
+                                                             ConcurrentHashMap<String, WebSocketOeServer> webSocketMap,
+                                                             MqDto mqDto,
+                                                             String key) {
         Map<String, Object> map = null;
         Long recordId = Long.parseLong(String.valueOf(s));
         //获取考试记录的客户端websocketId
@@ -86,7 +89,7 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
                 map.put(SystemConstant.WEB_SOCKET_OE_SERVER, webSocketOeServer);
                 map.put(SystemConstant.RECORD_ID, recordId);
                 map.put(SystemConstant.MESSAGE, FinishTypeEnum.valueOf(String.valueOf(mqDto.getProperties().get(SystemConstant.TYPE))).getCode());
-                TEExamStudentLog teExamStudentLog = new TEExamStudentLog(mqDto.getType().name(), mqDto.getType().getCode(), mqDto.getType().getCode(), examStudentCacheBean.getStudentId(), examStudentId, recordId, mqDto.getType().getCode());
+                TEExamStudentLog teExamStudentLog = new TEExamStudentLog(mqDto.getType().name(), "监考老师[" + mqDto.getObjName() + "]强制离线(交卷)", mqDto.getType().getCode(), examStudentCacheBean.getStudentId(), examStudentId, recordId, mqDto.getType().getCode());
                 teExamStudentLogService.save(teExamStudentLog);
 
                 tmRocketMessageService.saveMqMessageSuccess(mqDto, key);
@@ -106,9 +109,9 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
      */
     @Transactional
     public Map<String, Object> oeWarningFinishLogicPersisted(Object s,
-                                                                ConcurrentHashMap<String, WebSocketOeServer> webSocketMap,
-                                                                MqDto mqDto,
-                                                                String key) {
+                                                             ConcurrentHashMap<String, WebSocketOeServer> webSocketMap,
+                                                             MqDto mqDto,
+                                                             String key) {
         Map<String, Object> map = null;
         Long recordId = Long.parseLong(String.valueOf(s));
         String clientWebsocketId = ExamRecordCacheUtil.getClientWebsocketId(recordId);
@@ -145,8 +148,8 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
      */
     @Transactional
     public Map<String, Object> oeImClusteringLogicPersisted(ConcurrentHashMap<String, WebSocketOeServer> webSocketMap,
-                                                               MqDto mqDto,
-                                                               String key) {
+                                                            MqDto mqDto,
+                                                            String key) {
         Map<String, Object> map = null;
         Long recordId = Long.parseLong(String.valueOf(mqDto.getBody()));
         String clientWebsocketId = ExamRecordCacheUtil.getClientWebsocketId(recordId);
@@ -187,8 +190,8 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
      */
     @Transactional
     public Map<String, Object> oeLivenessVerifyLogicPersisted(ConcurrentHashMap<String, WebSocketOeServer> webSocketMap,
-                                                                 MqDto mqDto,
-                                                                 String key) {
+                                                              MqDto mqDto,
+                                                              String key) {
         Map<String, Object> map = null;
         Long recordId = Long.parseLong(String.valueOf(mqDto.getBody()));
         String clientWebsocketId = ExamRecordCacheUtil.getClientWebsocketId(recordId);

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

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