|
@@ -11,7 +11,6 @@ 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.ExamPropCountDto;
|
|
import com.qmth.themis.business.dto.ExamPropCountDto;
|
|
import com.qmth.themis.business.dto.MqDto;
|
|
import com.qmth.themis.business.dto.MqDto;
|
|
-import com.qmth.themis.business.dto.cache.TEStudentCacheDto;
|
|
|
|
import com.qmth.themis.business.dto.request.TEExamDto;
|
|
import com.qmth.themis.business.dto.request.TEExamDto;
|
|
import com.qmth.themis.business.dto.response.TEExamQueryDto;
|
|
import com.qmth.themis.business.dto.response.TEExamQueryDto;
|
|
import com.qmth.themis.business.entity.*;
|
|
import com.qmth.themis.business.entity.*;
|
|
@@ -152,7 +151,7 @@ public class TEExamController {
|
|
teExamActivityList.forEach(s -> {
|
|
teExamActivityList.forEach(s -> {
|
|
teExamActivityService.updateExamActivityCacheBean(s.getId());
|
|
teExamActivityService.updateExamActivityCacheBean(s.getId());
|
|
});
|
|
});
|
|
- }else{
|
|
|
|
|
|
+ } else {
|
|
TEExamActivity teExamActivity = new TEExamActivity(teExam.getId(), teExam.getPrepareSeconds(), teExam.getMaxDurationSeconds(), teExam.getOpeningSeconds(), teExam.getStartTime(), teExam.getEndTime(), tbUser.getId());
|
|
TEExamActivity teExamActivity = new TEExamActivity(teExam.getId(), teExam.getPrepareSeconds(), teExam.getMaxDurationSeconds(), teExam.getOpeningSeconds(), teExam.getStartTime(), teExam.getEndTime(), tbUser.getId());
|
|
teExamActivity.setCode(String.valueOf(redisUtil.getRedisActivityCodeSequence()));
|
|
teExamActivity.setCode(String.valueOf(redisUtil.getRedisActivityCodeSequence()));
|
|
teExamActivity.setEnable(1);
|
|
teExamActivity.setEnable(1);
|
|
@@ -205,8 +204,8 @@ public class TEExamController {
|
|
@ApiOperation(value = "考试批次查询接口")
|
|
@ApiOperation(value = "考试批次查询接口")
|
|
@RequestMapping(value = "/query", method = RequestMethod.POST)
|
|
@RequestMapping(value = "/query", method = RequestMethod.POST)
|
|
@ApiResponses({@ApiResponse(code = 200, message = "考试批次信息", response = TEExam.class)})
|
|
@ApiResponses({@ApiResponse(code = 200, message = "考试批次信息", response = TEExam.class)})
|
|
- public Result query(@ApiParam(value = "考试批次id", required = false) @RequestParam(required = false) Long id, @ApiParam(value = "考试批次编码", required = false) @RequestParam(required = false) String code, @ApiParam(value = "考试批次名称", required = false) @RequestParam(required = false) String name, @ApiParam(value = "考试批次模式", required = false) @RequestParam(required = false) String mode, @ApiParam(value = "是否启用", required = false) @RequestParam(required = false) Integer enable, @ApiParam(value = "分页页码", required = true) @RequestParam int pageNumber, @ApiParam(value = "分页数", required = true) @RequestParam int pageSize) {
|
|
|
|
- IPage<TEExamQueryDto> teExamQueryDtoIPage = teExamService.examQuery(new Page<>(pageNumber, pageSize), id, code, name, mode, enable);
|
|
|
|
|
|
+ public Result query(@ApiParam(value = "用户id", required = false) @RequestParam(required = false) Long userId, @ApiParam(value = "考试批次id", required = false) @RequestParam(required = false) Long id, @ApiParam(value = "考试批次编码", required = false) @RequestParam(required = false) String code, @ApiParam(value = "考试批次名称", required = false) @RequestParam(required = false) String name, @ApiParam(value = "考试批次模式", required = false) @RequestParam(required = false) String mode, @ApiParam(value = "是否启用", required = false) @RequestParam(required = false) Integer enable, @ApiParam(value = "分页页码", required = true) @RequestParam int pageNumber, @ApiParam(value = "分页数", required = true) @RequestParam int pageSize) {
|
|
|
|
+ IPage<TEExamQueryDto> teExamQueryDtoIPage = teExamService.examQuery(new Page<>(pageNumber, pageSize), userId, id, code, name, mode, enable);
|
|
BasePage basePage = new BasePage(teExamQueryDtoIPage.getRecords(), teExamQueryDtoIPage.getCurrent(), teExamQueryDtoIPage.getSize(), teExamQueryDtoIPage.getTotal());
|
|
BasePage basePage = new BasePage(teExamQueryDtoIPage.getRecords(), teExamQueryDtoIPage.getCurrent(), teExamQueryDtoIPage.getSize(), teExamQueryDtoIPage.getTotal());
|
|
return ResultUtil.ok(basePage);
|
|
return ResultUtil.ok(basePage);
|
|
}
|
|
}
|
|
@@ -346,7 +345,8 @@ public class TEExamController {
|
|
QueryWrapper<TBExamInvigilateUser> examInvigilateUserQueryWrapper = new QueryWrapper<>();
|
|
QueryWrapper<TBExamInvigilateUser> examInvigilateUserQueryWrapper = new QueryWrapper<>();
|
|
AuthDto authDto = (AuthDto) redisUtil.get(SystemConstant.userOauth + "::" + tbUser.getId());
|
|
AuthDto authDto = (AuthDto) redisUtil.get(SystemConstant.userOauth + "::" + tbUser.getId());
|
|
//如果有监考员角色,只能查看自己所监考的考场,巡考员和管理员则可以查看全部考场
|
|
//如果有监考员角色,只能查看自己所监考的考场,巡考员和管理员则可以查看全部考场
|
|
- examInvigilateUserQueryWrapper.lambda().eq(TBExamInvigilateUser::getOrgId, tbUser.getOrgId());
|
|
|
|
|
|
+ examInvigilateUserQueryWrapper.lambda().eq(TBExamInvigilateUser::getOrgId, tbUser.getOrgId())
|
|
|
|
+ .eq(TBExamInvigilateUser::getExamId, examId);
|
|
if (authDto.getRoleCodes().toString().contains(RoleEnum.INVIGILATE.name())) {
|
|
if (authDto.getRoleCodes().toString().contains(RoleEnum.INVIGILATE.name())) {
|
|
examInvigilateUserQueryWrapper.lambda().eq(TBExamInvigilateUser::getUserId, tbUser.getId());
|
|
examInvigilateUserQueryWrapper.lambda().eq(TBExamInvigilateUser::getUserId, tbUser.getId());
|
|
}
|
|
}
|
|
@@ -367,10 +367,9 @@ public class TEExamController {
|
|
Set<String> studentSet = null;
|
|
Set<String> studentSet = null;
|
|
Set<Long> examActivityIdSet = null;
|
|
Set<Long> examActivityIdSet = null;
|
|
Integer allCount = 0;
|
|
Integer allCount = 0;
|
|
- Integer loginCount = 0;
|
|
|
|
AtomicReference<Integer> prepareCount = new AtomicReference<>(0);
|
|
AtomicReference<Integer> prepareCount = new AtomicReference<>(0);
|
|
AtomicReference<Integer> examCount = new AtomicReference<>(0);
|
|
AtomicReference<Integer> examCount = new AtomicReference<>(0);
|
|
- AtomicReference<Integer> clientCommunicationStatusCount = new AtomicReference<>(0);
|
|
|
|
|
|
+ AtomicReference<Integer> clientWebsocketStatusCount = new AtomicReference<>(0);
|
|
AtomicReference<Integer> monitorStatusSourceCount = new AtomicReference<>(0);
|
|
AtomicReference<Integer> monitorStatusSourceCount = new AtomicReference<>(0);
|
|
AtomicReference<Integer> alreadyComplete = new AtomicReference<>(0);
|
|
AtomicReference<Integer> alreadyComplete = new AtomicReference<>(0);
|
|
Integer notComplete = 0;
|
|
Integer notComplete = 0;
|
|
@@ -386,14 +385,6 @@ public class TEExamController {
|
|
allCount = studentSet.size();
|
|
allCount = studentSet.size();
|
|
}
|
|
}
|
|
|
|
|
|
- if (Objects.nonNull(studentSet)) {
|
|
|
|
- //获取已登录学生
|
|
|
|
- List<TEStudentCacheDto> teStudentCacheDtoList = (List<TEStudentCacheDto>) redisUtil.multiGet(studentSet);
|
|
|
|
- if (Objects.nonNull(teStudentCacheDtoList) && teStudentCacheDtoList.size() > 0) {
|
|
|
|
- loginCount = teStudentCacheDtoList.stream().filter(s -> Objects.nonNull(s)).collect(Collectors.toList()).size();
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
if (Objects.nonNull(examActivityIdSet)) {
|
|
if (Objects.nonNull(examActivityIdSet)) {
|
|
//获取已待考、考试中、已完成学生
|
|
//获取已待考、考试中、已完成学生
|
|
examActivityIdSet.forEach(s -> {
|
|
examActivityIdSet.forEach(s -> {
|
|
@@ -405,7 +396,7 @@ public class TEExamController {
|
|
//客户端通讯状态
|
|
//客户端通讯状态
|
|
WebsocketStatusEnum clientStatus = Objects.isNull(recordIdObjectMap.get("clientWebsocketStatus")) ? null : WebsocketStatusEnum.valueOf(String.valueOf(recordIdObjectMap.get("clientWebsocketStatus")));
|
|
WebsocketStatusEnum clientStatus = Objects.isNull(recordIdObjectMap.get("clientWebsocketStatus")) ? null : WebsocketStatusEnum.valueOf(String.valueOf(recordIdObjectMap.get("clientWebsocketStatus")));
|
|
if (Objects.nonNull(clientStatus) && Objects.equals(clientStatus, WebsocketStatusEnum.OFF_LINE)) {
|
|
if (Objects.nonNull(clientStatus) && Objects.equals(clientStatus, WebsocketStatusEnum.OFF_LINE)) {
|
|
- clientCommunicationStatusCount.getAndSet(clientCommunicationStatusCount.get() + 1);
|
|
|
|
|
|
+ clientWebsocketStatusCount.getAndSet(clientWebsocketStatusCount.get() + 1);
|
|
}
|
|
}
|
|
//监控端通讯状态
|
|
//监控端通讯状态
|
|
MonitorVideoSourceEnum source = null;
|
|
MonitorVideoSourceEnum source = null;
|
|
@@ -442,7 +433,7 @@ public class TEExamController {
|
|
}
|
|
}
|
|
notComplete = allCount - alreadyComplete.get();
|
|
notComplete = allCount - alreadyComplete.get();
|
|
BigDecimal completionRate = new BigDecimal(alreadyComplete.get()).divide(new BigDecimal(allCount)).setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
BigDecimal completionRate = new BigDecimal(alreadyComplete.get()).divide(new BigDecimal(allCount)).setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
- ExamPropCountDto examPropCountDto = new ExamPropCountDto(examId, allCount, loginCount, prepareCount.get(), examCount.get(), clientCommunicationStatusCount.get(), monitorStatusSourceCount.get(), alreadyComplete.get(), notComplete, completionRate);
|
|
|
|
|
|
+ ExamPropCountDto examPropCountDto = new ExamPropCountDto(examId, allCount, prepareCount.get(), examCount.get(), clientWebsocketStatusCount.get(), monitorStatusSourceCount.get(), alreadyComplete.get(), notComplete, completionRate);
|
|
return ResultUtil.ok(examPropCountDto);
|
|
return ResultUtil.ok(examPropCountDto);
|
|
}
|
|
}
|
|
}
|
|
}
|