|
@@ -8,22 +8,25 @@ import com.qmth.themis.business.annotation.ApiJsonObject;
|
|
import com.qmth.themis.business.annotation.ApiJsonProperty;
|
|
import com.qmth.themis.business.annotation.ApiJsonProperty;
|
|
import com.qmth.themis.business.bean.mobile.MobileAuthorizationMonitorBean;
|
|
import com.qmth.themis.business.bean.mobile.MobileAuthorizationMonitorBean;
|
|
import com.qmth.themis.business.cache.ExamRecordCacheUtil;
|
|
import com.qmth.themis.business.cache.ExamRecordCacheUtil;
|
|
|
|
+import com.qmth.themis.business.cache.bean.ExamCacheBean;
|
|
import com.qmth.themis.business.config.SystemConfig;
|
|
import com.qmth.themis.business.config.SystemConfig;
|
|
import com.qmth.themis.business.constant.SystemConstant;
|
|
import com.qmth.themis.business.constant.SystemConstant;
|
|
import com.qmth.themis.business.dto.AuthDto;
|
|
import com.qmth.themis.business.dto.AuthDto;
|
|
import com.qmth.themis.business.dto.MqDto;
|
|
import com.qmth.themis.business.dto.MqDto;
|
|
import com.qmth.themis.business.dto.response.TIeExamInvigilateCallDto;
|
|
import com.qmth.themis.business.dto.response.TIeExamInvigilateCallDto;
|
|
-import com.qmth.themis.business.entity.TBSession;
|
|
|
|
-import com.qmth.themis.business.entity.TBUser;
|
|
|
|
-import com.qmth.themis.business.entity.TIeExamInvigilateCall;
|
|
|
|
-import com.qmth.themis.business.entity.TIeExamInvigilateCallLog;
|
|
|
|
|
|
+import com.qmth.themis.business.entity.*;
|
|
import com.qmth.themis.business.enums.*;
|
|
import com.qmth.themis.business.enums.*;
|
|
import com.qmth.themis.business.service.MqDtoService;
|
|
import com.qmth.themis.business.service.MqDtoService;
|
|
|
|
+import com.qmth.themis.business.service.TEExamService;
|
|
import com.qmth.themis.business.service.TIeExamInvigilateCallService;
|
|
import com.qmth.themis.business.service.TIeExamInvigilateCallService;
|
|
|
|
+import com.qmth.themis.business.service.TOeExamRecordService;
|
|
import com.qmth.themis.business.util.RedisUtil;
|
|
import com.qmth.themis.business.util.RedisUtil;
|
|
import com.qmth.themis.business.util.ServletUtil;
|
|
import com.qmth.themis.business.util.ServletUtil;
|
|
|
|
+import com.qmth.themis.business.util.SessionUtil;
|
|
import com.qmth.themis.business.util.TencentYunUtil;
|
|
import com.qmth.themis.business.util.TencentYunUtil;
|
|
import com.qmth.themis.common.enums.ExceptionResultEnum;
|
|
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.exception.BusinessException;
|
|
import com.qmth.themis.common.util.Result;
|
|
import com.qmth.themis.common.util.Result;
|
|
import com.qmth.themis.common.util.ResultUtil;
|
|
import com.qmth.themis.common.util.ResultUtil;
|
|
@@ -35,10 +38,8 @@ import org.springframework.web.bind.annotation.*;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
import javax.annotation.Resource;
|
|
import java.io.File;
|
|
import java.io.File;
|
|
-import java.util.Collections;
|
|
|
|
-import java.util.HashMap;
|
|
|
|
-import java.util.Map;
|
|
|
|
-import java.util.Objects;
|
|
|
|
|
|
+import java.security.NoSuchAlgorithmException;
|
|
|
|
+import java.util.*;
|
|
|
|
|
|
/**
|
|
/**
|
|
* @Description: mobile监考监控通话信息 前端控制器
|
|
* @Description: mobile监考监控通话信息 前端控制器
|
|
@@ -71,6 +72,12 @@ public class TIeInvigilateCallMobileController {
|
|
@Resource
|
|
@Resource
|
|
DictionaryConfig dictionaryConfig;
|
|
DictionaryConfig dictionaryConfig;
|
|
|
|
|
|
|
|
+ @Resource
|
|
|
|
+ TEExamService teExamService;
|
|
|
|
+
|
|
|
|
+ @Resource
|
|
|
|
+ TOeExamRecordService tOeExamRecordService;
|
|
|
|
+
|
|
@ApiOperation(value = "监考监控通话查询接口")
|
|
@ApiOperation(value = "监考监控通话查询接口")
|
|
@RequestMapping(value = "/call/list", method = RequestMethod.POST)
|
|
@RequestMapping(value = "/call/list", method = RequestMethod.POST)
|
|
@ApiResponses({@ApiResponse(code = 200, message = "监考监控信息", response = TIeExamInvigilateCallDto.class)})
|
|
@ApiResponses({@ApiResponse(code = 200, message = "监考监控信息", response = TIeExamInvigilateCallDto.class)})
|
|
@@ -195,12 +202,56 @@ public class TIeInvigilateCallMobileController {
|
|
@ApiOperation(value = "监考获取monitorKey接口")
|
|
@ApiOperation(value = "监考获取monitorKey接口")
|
|
@RequestMapping(value = "/getMonitorKey", method = RequestMethod.POST)
|
|
@RequestMapping(value = "/getMonitorKey", method = RequestMethod.POST)
|
|
@ApiResponses({@ApiResponse(code = 200, message = "获取监考monitorKey", response = MobileAuthorizationMonitorBean.class)})
|
|
@ApiResponses({@ApiResponse(code = 200, message = "获取监考monitorKey", response = MobileAuthorizationMonitorBean.class)})
|
|
- public Result getMonitorKey(@ApiParam(value = "考试记录id", required = true) @RequestParam Long recordId) {
|
|
|
|
|
|
+ public Result getMonitorKey(@ApiParam(value = "考试记录id", required = true) @RequestParam Long recordId) throws NoSuchAlgorithmException {
|
|
TBUser tbUser = (TBUser) ServletUtil.getRequestAccount();
|
|
TBUser tbUser = (TBUser) ServletUtil.getRequestAccount();
|
|
TBSession tbSession = (TBSession) ServletUtil.getRequestSession();
|
|
TBSession tbSession = (TBSession) ServletUtil.getRequestSession();
|
|
String monitorKey = ExamRecordCacheUtil.getMonitorKey(recordId);
|
|
String monitorKey = ExamRecordCacheUtil.getMonitorKey(recordId);
|
|
AuthDto authDto = (AuthDto) redisUtil.get(SystemConstant.userOauth + "::" + tbUser.getId());
|
|
AuthDto authDto = (AuthDto) redisUtil.get(SystemConstant.userOauth + "::" + tbUser.getId());
|
|
String monitorUserId = null;
|
|
String monitorUserId = null;
|
|
|
|
+ String sourceUserId = null;
|
|
|
|
+ Long examId = ExamRecordCacheUtil.getExamId(recordId);
|
|
|
|
+ if (Objects.isNull(examId)) {
|
|
|
|
+ TOeExamRecord tOeExamRecord = tOeExamRecordService.getById(recordId);
|
|
|
|
+ examId = tOeExamRecord.getExamId();
|
|
|
|
+ }
|
|
|
|
+ ExamCacheBean ec = teExamService.getExamCacheBean(examId);//考试缓存
|
|
|
|
+ ec.getMonitorVideoSource();
|
|
|
|
+ List<String> monitorVideoSourceList = null;
|
|
|
|
+ if (Objects.nonNull(ec.getMonitorVideoSource()) && !Objects.equals(ec.getMonitorVideoSource().toString().trim().replaceAll(" ", ""), "")) {
|
|
|
|
+ monitorVideoSourceList = Arrays.asList(ec.getMonitorVideoSource().trim().toUpperCase().replaceAll(" ", "").split(","));
|
|
|
|
+ }
|
|
|
|
+ //加入monitorAudioEnable逻辑
|
|
|
|
+ if (Objects.nonNull(monitorVideoSourceList)) {
|
|
|
|
+ if (monitorVideoSourceList.size() == 4 || (ec.getMonitorVideoSource().toUpperCase().contains(MonitorVideoSourceEnum.CLIENT_SCREEN.name()) || ec.getMonitorVideoSource().toUpperCase().contains(MonitorVideoSourceEnum.CLIENT_CAMERA.name()))) {
|
|
|
|
+ for (Source s : Source.values()) {
|
|
|
|
+ String sessionId = SessionUtil.digest(tbUser.getId(), Math.abs(authDto.getRoleCodes().toString().hashCode()), s.name());
|
|
|
|
+ TBSession tbSessionClient = (TBSession) redisUtil.getUserSession(sessionId);
|
|
|
|
+ if (Objects.nonNull(tbSessionClient) && tbSessionClient.getExpireTime() > System.currentTimeMillis() && (Objects.equals(tbSessionClient.getSource(), Source.OE_CLIENT.name()) || Objects.equals(tbSessionClient.getSource(), Source.ADMIN_CLIENT.name())) && (Objects.equals(tbSessionClient.getPlatform(), Platform.WIN.name()) || Objects.equals(tbSessionClient.getPlatform(), Platform.MAC.name()))) {
|
|
|
|
+ if (Objects.nonNull(ExamRecordCacheUtil.getMonitorStatus(recordId, MonitorVideoSourceEnum.CLIENT_CAMERA.name()))) {
|
|
|
|
+ sourceUserId = "s_" + tbSessionClient.getId();
|
|
|
|
+ break;
|
|
|
|
+ } else if (Objects.nonNull(ExamRecordCacheUtil.getMonitorStatus(recordId, MonitorVideoSourceEnum.CLIENT_SCREEN.name()))) {
|
|
|
|
+ sourceUserId = "s_" + tbSessionClient.getId();
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ for (Source s : Source.values()) {
|
|
|
|
+ String sessionId = SessionUtil.digest(tbUser.getId(), Math.abs(authDto.getRoleCodes().toString().hashCode()), s.name());
|
|
|
|
+ TBSession tbSessionPhone = (TBSession) redisUtil.getUserSession(sessionId);
|
|
|
|
+ if (Objects.nonNull(tbSessionPhone) && tbSessionPhone.getExpireTime() > System.currentTimeMillis() && (Objects.equals(tbSessionPhone.getSource(), Source.MOBILE_FIRST.name()) || Objects.equals(tbSessionPhone.getSource(), Source.MOBILE_SECOND.name())) && (Objects.equals(tbSessionPhone.getPlatform(), Platform.ANDROID.name()) || Objects.equals(tbSessionPhone.getPlatform(), Platform.IOS.name()))) {
|
|
|
|
+ if (Objects.nonNull(ExamRecordCacheUtil.getMonitorStatus(recordId, MonitorVideoSourceEnum.MOBILE_FIRST.name()))) {
|
|
|
|
+ sourceUserId = "s_" + tbSessionPhone.getId();
|
|
|
|
+ break;
|
|
|
|
+ } else if (Objects.nonNull(ExamRecordCacheUtil.getMonitorStatus(recordId, MonitorVideoSourceEnum.MOBILE_SECOND.name()))) {
|
|
|
|
+ sourceUserId = "s_" + tbSessionPhone.getId();
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
if (Objects.nonNull(authDto) && authDto.toString().contains(RoleEnum.STUDENT.name())) {
|
|
if (Objects.nonNull(authDto) && authDto.toString().contains(RoleEnum.STUDENT.name())) {
|
|
monitorUserId = "s_" + tbSession.getId();
|
|
monitorUserId = "s_" + tbSession.getId();
|
|
} else {
|
|
} else {
|
|
@@ -210,6 +261,7 @@ public class TIeInvigilateCallMobileController {
|
|
Map<String, Object> map = new HashMap<>();
|
|
Map<String, Object> map = new HashMap<>();
|
|
map.put("monitorKey", monitorKey);
|
|
map.put("monitorKey", monitorKey);
|
|
map.put("monitorUserId", monitorUserId);
|
|
map.put("monitorUserId", monitorUserId);
|
|
|
|
+ map.put("sourceUserId", sourceUserId);
|
|
map.put("monitorUserSig", monitorUserSig);
|
|
map.put("monitorUserSig", monitorUserSig);
|
|
map.put("appId", dictionaryConfig.tencentYunDomain().getAppId());
|
|
map.put("appId", dictionaryConfig.tencentYunDomain().getAppId());
|
|
map.put("key", dictionaryConfig.tencentYunDomain().getKey());
|
|
map.put("key", dictionaryConfig.tencentYunDomain().getKey());
|