|
@@ -43,6 +43,7 @@ import java.text.SimpleDateFormat;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.time.ZoneOffset;
|
|
|
import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* @Description: 考试批次 服务实现类
|
|
@@ -123,50 +124,60 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
|
|
|
public List<TEExamDto> getWaitingExam(Long studentId, Long examId, Long orgId) {
|
|
|
List<TEExamDto> list = teExamMapper.getWaitingExam(studentId, examId, orgId);
|
|
|
if (Objects.nonNull(list) && list.size() > 0) {
|
|
|
- list.forEach(s -> {
|
|
|
- List<TEExamActivityDto> teExamActivityList = teExamActivityService.getWaitingExam(studentId, s.getId(), s.getExamActivityId(), s.getMode());
|
|
|
- teExamActivityList.forEach(v -> {
|
|
|
- ExamCacheBean examCache = getExamCacheBean(v.getExamId());
|
|
|
- ExamStudentCacheBean examStudentCacheBean = teExamStudentService.getExamStudentCacheBean(v.getExamStudentId());
|
|
|
- v.setLeftExamCount(examCache.getExamCount() - examStudentCacheBean.getAlreadyExamCount());
|
|
|
- if (Objects.nonNull(v.getInProcessLivenessFixedRangeStr())) {
|
|
|
- String[] longs = v.getInProcessLivenessFixedRangeStr().trim().replaceAll(" ", "").split(",");
|
|
|
- List inProcessLivenessFixedRange = new ArrayList();
|
|
|
- for (int i = 0; i < longs.length; i++) {
|
|
|
- Integer integer = Integer.valueOf(longs[i].trim());
|
|
|
- inProcessLivenessFixedRange.add(integer);
|
|
|
- }
|
|
|
- if (Objects.equals(inProcessLivenessFixedRange.toString().trim().replaceAll(" ", ""), "")) {
|
|
|
- v.setInProcessLivenessFixedRange(null);
|
|
|
- } else {
|
|
|
- v.setInProcessLivenessFixedRange(inProcessLivenessFixedRange);
|
|
|
- }
|
|
|
+ Set<Long> examActivityIds = list.stream().map(s -> s.getExamActivityId()).collect(Collectors.toSet());
|
|
|
+ List<TEExamActivityDto> teExamActivityList = teExamActivityService.getWaitingExam(studentId, examActivityIds, null);
|
|
|
+ Map<Long, Set<TEExamActivityDto>> map = new HashMap<>();
|
|
|
+ teExamActivityList.forEach(v -> {
|
|
|
+ Set<TEExamActivityDto> teExamActivityDtos = null;
|
|
|
+ if (Objects.isNull(map.get(v.getExamId()))) {
|
|
|
+ teExamActivityDtos = new HashSet<>();
|
|
|
+ } else {
|
|
|
+ teExamActivityDtos = map.get(v.getExamId());
|
|
|
+ }
|
|
|
+ teExamActivityDtos.add(v);
|
|
|
+ map.put(v.getExamId(), teExamActivityDtos);
|
|
|
+ ExamCacheBean examCache = getExamCacheBean(v.getExamId());
|
|
|
+ ExamStudentCacheBean examStudentCacheBean = teExamStudentService.getExamStudentCacheBean(v.getExamStudentId());
|
|
|
+ v.setLeftExamCount(examCache.getExamCount() - examStudentCacheBean.getAlreadyExamCount());
|
|
|
+ if (Objects.nonNull(v.getInProcessLivenessFixedRangeStr())) {
|
|
|
+ String[] longs = v.getInProcessLivenessFixedRangeStr().trim().replaceAll(" ", "").split(",");
|
|
|
+ List inProcessLivenessFixedRange = new ArrayList();
|
|
|
+ for (int i = 0; i < longs.length; i++) {
|
|
|
+ Integer integer = Integer.valueOf(longs[i].trim());
|
|
|
+ inProcessLivenessFixedRange.add(integer);
|
|
|
+ }
|
|
|
+ if (Objects.equals(inProcessLivenessFixedRange.toString().trim().replaceAll(" ", ""), "")) {
|
|
|
+ v.setInProcessLivenessFixedRange(null);
|
|
|
+ } else {
|
|
|
+ v.setInProcessLivenessFixedRange(inProcessLivenessFixedRange);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (Objects.nonNull(v.getMonitorVideoSourceStr()) && !Objects.equals(v.getMonitorVideoSourceStr().toString().trim().replaceAll(" ", ""), "")) {
|
|
|
+ v.setMonitorVideoSource(Arrays.asList(v.getMonitorVideoSourceStr().trim().toUpperCase().replaceAll(" ", "").split(",")));
|
|
|
+ //加入monitorAudioEnable逻辑
|
|
|
+ if (v.getMonitorVideoSource().size() == 4 || (v.getMonitorVideoSourceStr().toUpperCase().contains(MonitorVideoSourceEnum.CLIENT_SCREEN.name()) || v.getMonitorVideoSourceStr().toUpperCase().contains(MonitorVideoSourceEnum.CLIENT_CAMERA.name()))) {
|
|
|
+ v.setMonitorAudioEnable(true);
|
|
|
}
|
|
|
- if (Objects.nonNull(v.getMonitorVideoSourceStr()) && !Objects.equals(v.getMonitorVideoSourceStr().toString().trim().replaceAll(" ", ""), "")) {
|
|
|
- v.setMonitorVideoSource(Arrays.asList(v.getMonitorVideoSourceStr().trim().toUpperCase().replaceAll(" ", "").split(",")));
|
|
|
- //加入monitorAudioEnable逻辑
|
|
|
- if (v.getMonitorVideoSource().size() == 4 || (v.getMonitorVideoSourceStr().toUpperCase().contains(MonitorVideoSourceEnum.CLIENT_SCREEN.name()) || v.getMonitorVideoSourceStr().toUpperCase().contains(MonitorVideoSourceEnum.CLIENT_CAMERA.name()))) {
|
|
|
- v.setMonitorAudioEnable(true);
|
|
|
+ //加入hardwareTest逻辑
|
|
|
+ if (v.getMonitorVideoSourceStr().toUpperCase().contains(MonitorVideoSourceEnum.CLIENT_CAMERA.name()) || (Objects.nonNull(v.getEntryAuthenticationPolicy()) && (Objects.equals(v.getEntryAuthenticationPolicy(), EntryAuthenticationPolicyEnum.LIVENESS_VERIFY.name()) || Objects.equals(v.getEntryAuthenticationPolicy(), EntryAuthenticationPolicyEnum.FACE_VERIFY_FORCE.name()))) || (Objects.nonNull(v.getCameraPhotoUpload()) && v.getCameraPhotoUpload() == 1)) {
|
|
|
+ List<String> hardwareTest = v.getHardwareTest();
|
|
|
+ if (Objects.isNull(hardwareTest)) {
|
|
|
+ hardwareTest = new ArrayList<>();
|
|
|
}
|
|
|
- //加入hardwareTest逻辑
|
|
|
- if (v.getMonitorVideoSourceStr().toUpperCase().contains(MonitorVideoSourceEnum.CLIENT_CAMERA.name()) || (Objects.nonNull(v.getEntryAuthenticationPolicy()) && (Objects.equals(v.getEntryAuthenticationPolicy(), EntryAuthenticationPolicyEnum.LIVENESS_VERIFY.name()) || Objects.equals(v.getEntryAuthenticationPolicy(), EntryAuthenticationPolicyEnum.FACE_VERIFY_FORCE.name()))) || (Objects.nonNull(v.getCameraPhotoUpload()) && v.getCameraPhotoUpload() == 1)) {
|
|
|
- List<String> hardwareTest = v.getHardwareTest();
|
|
|
- if (Objects.isNull(hardwareTest)) {
|
|
|
- hardwareTest = new ArrayList<>();
|
|
|
- }
|
|
|
- hardwareTest.add(HardwareTestEnum.CAMERA.name());
|
|
|
- //取course缓存
|
|
|
- ExamCourseCacheBean examCourseCacheBean = teExamCourseService.getExamCourseCacheBean(v.getExamId(), v.getCourseCode());
|
|
|
- if (Objects.nonNull(examCourseCacheBean) && Objects.nonNull(examCourseCacheBean.getHasAudio()) && examCourseCacheBean.getHasAudio() == 1) {
|
|
|
- hardwareTest.add(HardwareTestEnum.AUDIOPLAY.name());
|
|
|
- }
|
|
|
- v.setHardwareTest(hardwareTest);
|
|
|
+ hardwareTest.add(HardwareTestEnum.CAMERA.name());
|
|
|
+ //取course缓存
|
|
|
+ ExamCourseCacheBean examCourseCacheBean = teExamCourseService.getExamCourseCacheBean(v.getExamId(), v.getCourseCode());
|
|
|
+ if (Objects.nonNull(examCourseCacheBean) && Objects.nonNull(examCourseCacheBean.getHasAudio()) && examCourseCacheBean.getHasAudio() == 1) {
|
|
|
+ hardwareTest.add(HardwareTestEnum.AUDIOPLAY.name());
|
|
|
}
|
|
|
- } else {
|
|
|
- v.setMonitorVideoSource(null);
|
|
|
+ v.setHardwareTest(hardwareTest);
|
|
|
}
|
|
|
- });
|
|
|
- s.setActivities(teExamActivityList);
|
|
|
+ } else {
|
|
|
+ v.setMonitorVideoSource(null);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ list.forEach(s -> {
|
|
|
+ s.setActivities(new ArrayList<>(map.get(s.getId())));
|
|
|
});
|
|
|
}
|
|
|
return list;
|
|
@@ -371,11 +382,11 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
|
|
|
throw new BusinessException("没有到允许开考的时间");
|
|
|
}
|
|
|
//集中不启用统一收卷,考试快结束时,断点,再登录时, 时间已经超过考试截止时间,断点时,此时应该能登录继续作答
|
|
|
- Integer forceFinish=ExamRecordCacheUtil.getForceFinish(recordId);
|
|
|
- if(forceFinish!=null&&forceFinish.intValue()==1) {
|
|
|
- if (now.getTime() > end) {
|
|
|
- throw new BusinessException("允许开考的时间已结束");
|
|
|
- }
|
|
|
+ Integer forceFinish = ExamRecordCacheUtil.getForceFinish(recordId);
|
|
|
+ if (forceFinish != null && forceFinish.intValue() == 1) {
|
|
|
+ if (now.getTime() > end) {
|
|
|
+ throw new BusinessException("允许开考的时间已结束");
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
ExamRecordStatusEnum sta = ExamRecordCacheUtil.getStatus(recordId);
|