wangliang 4 жил өмнө
parent
commit
a2169a3d65

+ 75 - 72
themis-backend/src/main/java/com/qmth/themis/backend/api/TEExamController.java

@@ -369,81 +369,84 @@ public class TEExamController {
         }
         if (authDto.getRoleCodes().toString().contains(RoleEnum.INVIGILATE.name()) && (Objects.isNull(roomCodeSet) || roomCodeSet.size() == 0)) {
             throw new BusinessException("当前监考老师未设置任何监考考场");
-        } else if (Objects.isNull(roomCodeSet) || roomCodeSet.size() == 0) {
-            throw new BusinessException("当前考试批次未设置任何监考考场");
-        }
-        //根据roomCode获取当前老师所要监考的全部应考学生数
-        QueryWrapper<TEExamStudent> teExamStudentQueryWrapper = new QueryWrapper<>();
-        teExamStudentQueryWrapper.lambda().in(TEExamStudent::getRoomCode, roomCodeSet);
-        List<TEExamStudent> teExamStudentList = teExamStudentService.list(teExamStudentQueryWrapper);
-        Set<String> studentSet = null;
-        Set<Long> examActivityIdSet = null;
-        Integer allCount = 0;
-        AtomicReference<Integer> prepareCount = new AtomicReference<>(0);
-        AtomicReference<Integer> examCount = new AtomicReference<>(0);
-        AtomicReference<Integer> clientWebsocketStatusCount = new AtomicReference<>(0);
-        AtomicReference<Integer> monitorStatusSourceCount = new AtomicReference<>(0);
-        AtomicReference<Integer> alreadyComplete = new AtomicReference<>(0);
-        Integer notComplete = 0;
-        if (Objects.nonNull(teExamStudentList) && teExamStudentList.size() > 0) {
-            studentSet = new HashSet<>();
-            examActivityIdSet = new HashSet<>();
-            Set<Long> finalExamActivityIdSet = examActivityIdSet;
-            Set<String> finalStudentSet = studentSet;
-            teExamStudentList.forEach(s -> {
-                finalStudentSet.add(SystemConstant.STUDENT + s.getStudentId());
-                finalExamActivityIdSet.add(s.getExamActivityId());
-            });
-            allCount = studentSet.size();
         }
+        ExamPropCountDto examPropCountDto = null;
+        if (Objects.nonNull(roomCodeSet) && roomCodeSet.size() > 0) {
+            //根据roomCode获取当前老师所要监考的全部应考学生数
+            QueryWrapper<TEExamStudent> teExamStudentQueryWrapper = new QueryWrapper<>();
+            teExamStudentQueryWrapper.lambda().in(TEExamStudent::getRoomCode, roomCodeSet);
+            List<TEExamStudent> teExamStudentList = teExamStudentService.list(teExamStudentQueryWrapper);
+            Set<String> studentSet = null;
+            Set<Long> examActivityIdSet = null;
+            Integer allCount = 0;
+            AtomicReference<Integer> prepareCount = new AtomicReference<>(0);
+            AtomicReference<Integer> examCount = new AtomicReference<>(0);
+            AtomicReference<Integer> clientWebsocketStatusCount = new AtomicReference<>(0);
+            AtomicReference<Integer> monitorStatusSourceCount = new AtomicReference<>(0);
+            AtomicReference<Integer> alreadyComplete = new AtomicReference<>(0);
+            Integer notComplete = 0;
+            if (Objects.nonNull(teExamStudentList) && teExamStudentList.size() > 0) {
+                studentSet = new HashSet<>();
+                examActivityIdSet = new HashSet<>();
+                Set<Long> finalExamActivityIdSet = examActivityIdSet;
+                Set<String> finalStudentSet = studentSet;
+                teExamStudentList.forEach(s -> {
+                    finalStudentSet.add(SystemConstant.STUDENT + s.getStudentId());
+                    finalExamActivityIdSet.add(s.getExamActivityId());
+                });
+                allCount = studentSet.size();
+            }
 
-        if (Objects.nonNull(examActivityIdSet)) {
-            //获取已待考、考试中、已完成学生
-            examActivityIdSet.forEach(s -> {
-                Map<String, Object> objectMap = redisUtil.getHashEntries(RedisKeyHelper.examActivityRecordCacheKey(s));
-                if (Objects.nonNull(objectMap) && objectMap.size() > 0) {
-                    objectMap.forEach((k, v) -> {
-                        Long recordId = Long.parseLong(k);
-                        //客户端通讯状态
-                        WebsocketStatusEnum clientStatus = Objects.isNull(ExamRecordCacheUtil.getClientWebsocketStatus(recordId)) ? null : ExamRecordCacheUtil.getClientWebsocketStatus(recordId);
-                        if (Objects.nonNull(clientStatus) && Objects.equals(clientStatus, WebsocketStatusEnum.OFF_LINE)) {
-                            clientWebsocketStatusCount.getAndSet(clientWebsocketStatusCount.get() + 1);
-                        }
-                        //监控端通讯状态
-                        MonitorVideoSourceEnum source = null;
-                        if (Objects.nonNull(ExamRecordCacheUtil.getMonitorLiveUrlClientCamera(recordId))) {
-                            source = MonitorVideoSourceEnum.CLIENT_CAMERA;
-                        } else if (Objects.nonNull(ExamRecordCacheUtil.getMonitorLiveUrlClientScreen(recordId))) {
-                            source = MonitorVideoSourceEnum.CLIENT_SCREEN;
-                        } else if (Objects.nonNull(ExamRecordCacheUtil.getMonitorLiveUrlMobileFirst(recordId))) {
-                            source = MonitorVideoSourceEnum.MOBILE_FIRST;
-                        } else if (Objects.nonNull(ExamRecordCacheUtil.getMonitorLiveUrlMobileSecond(recordId))) {
-                            source = MonitorVideoSourceEnum.MOBILE_SECOND;
-                        }
-                        MonitorStatusSourceEnum status = Objects.isNull(source) ? null : ExamRecordCacheUtil.getMonitorStatus(recordId, source.name());
-                        if (Objects.nonNull(status) && Objects.equals(status, MonitorStatusSourceEnum.STOP)) {
-                            monitorStatusSourceCount.getAndSet(monitorStatusSourceCount.get() + 1);
-                        }
-                        ExamRecordStatusEnum examRecordStatusEnum = (ExamRecordStatusEnum) v;
-                        //已待考
-                        if (Objects.equals(examRecordStatusEnum, ExamRecordStatusEnum.FIRST_PREPARE)) {
-                            prepareCount.getAndSet(prepareCount.get() + 1);
-                        }
-                        //考试中
-                        else if (Objects.equals(examRecordStatusEnum, ExamRecordStatusEnum.ANSWERING) || Objects.equals(examRecordStatusEnum, ExamRecordStatusEnum.RESUME_PREPARE)) {
-                            examCount.getAndSet(examCount.get() + 1);
-                        }
-                        //已完成
-                        else if (Objects.equals(examRecordStatusEnum, ExamRecordStatusEnum.FINISHED) || Objects.equals(examRecordStatusEnum, ExamRecordStatusEnum.PERSISTED)) {
-                            alreadyComplete.getAndSet(alreadyComplete.get() + 1);
-                        }
-                    });
-                }
-            });
+            if (Objects.nonNull(examActivityIdSet)) {
+                //获取已待考、考试中、已完成学生
+                examActivityIdSet.forEach(s -> {
+                    Map<String, Object> objectMap = redisUtil.getHashEntries(RedisKeyHelper.examActivityRecordCacheKey(s));
+                    if (Objects.nonNull(objectMap) && objectMap.size() > 0) {
+                        objectMap.forEach((k, v) -> {
+                            Long recordId = Long.parseLong(k);
+                            //客户端通讯状态
+                            WebsocketStatusEnum clientStatus = Objects.isNull(ExamRecordCacheUtil.getClientWebsocketStatus(recordId)) ? null : ExamRecordCacheUtil.getClientWebsocketStatus(recordId);
+                            if (Objects.nonNull(clientStatus) && Objects.equals(clientStatus, WebsocketStatusEnum.OFF_LINE)) {
+                                clientWebsocketStatusCount.getAndSet(clientWebsocketStatusCount.get() + 1);
+                            }
+                            //监控端通讯状态
+                            MonitorVideoSourceEnum source = null;
+                            if (Objects.nonNull(ExamRecordCacheUtil.getMonitorLiveUrlClientCamera(recordId))) {
+                                source = MonitorVideoSourceEnum.CLIENT_CAMERA;
+                            } else if (Objects.nonNull(ExamRecordCacheUtil.getMonitorLiveUrlClientScreen(recordId))) {
+                                source = MonitorVideoSourceEnum.CLIENT_SCREEN;
+                            } else if (Objects.nonNull(ExamRecordCacheUtil.getMonitorLiveUrlMobileFirst(recordId))) {
+                                source = MonitorVideoSourceEnum.MOBILE_FIRST;
+                            } else if (Objects.nonNull(ExamRecordCacheUtil.getMonitorLiveUrlMobileSecond(recordId))) {
+                                source = MonitorVideoSourceEnum.MOBILE_SECOND;
+                            }
+                            MonitorStatusSourceEnum status = Objects.isNull(source) ? null : ExamRecordCacheUtil.getMonitorStatus(recordId, source.name());
+                            if (Objects.nonNull(status) && Objects.equals(status, MonitorStatusSourceEnum.STOP)) {
+                                monitorStatusSourceCount.getAndSet(monitorStatusSourceCount.get() + 1);
+                            }
+                            ExamRecordStatusEnum examRecordStatusEnum = (ExamRecordStatusEnum) v;
+                            //已待考
+                            if (Objects.equals(examRecordStatusEnum, ExamRecordStatusEnum.FIRST_PREPARE)) {
+                                prepareCount.getAndSet(prepareCount.get() + 1);
+                            }
+                            //考试中
+                            else if (Objects.equals(examRecordStatusEnum, ExamRecordStatusEnum.ANSWERING) || Objects.equals(examRecordStatusEnum, ExamRecordStatusEnum.RESUME_PREPARE)) {
+                                examCount.getAndSet(examCount.get() + 1);
+                            }
+                            //已完成
+                            else if (Objects.equals(examRecordStatusEnum, ExamRecordStatusEnum.FINISHED) || Objects.equals(examRecordStatusEnum, ExamRecordStatusEnum.PERSISTED)) {
+                                alreadyComplete.getAndSet(alreadyComplete.get() + 1);
+                            }
+                        });
+                    }
+                });
+            }
+            notComplete = allCount - alreadyComplete.get();
+            BigDecimal completionRate = new BigDecimal(alreadyComplete.get()).divide(new BigDecimal(allCount)).setScale(2, BigDecimal.ROUND_HALF_UP);
+            examPropCountDto = new ExamPropCountDto(examId, allCount, prepareCount.get(), examCount.get(), clientWebsocketStatusCount.get(), monitorStatusSourceCount.get(), alreadyComplete.get(), notComplete, completionRate);
+        } else {
+            examPropCountDto = new ExamPropCountDto(examId, 0, 0, 0, 0, 0, 0, 0, new BigDecimal(0));
         }
-        notComplete = allCount - alreadyComplete.get();
-        BigDecimal completionRate = new BigDecimal(alreadyComplete.get()).divide(new BigDecimal(allCount)).setScale(2, BigDecimal.ROUND_HALF_UP);
-        ExamPropCountDto examPropCountDto = new ExamPropCountDto(examId, allCount, prepareCount.get(), examCount.get(), clientWebsocketStatusCount.get(), monitorStatusSourceCount.get(), alreadyComplete.get(), notComplete, completionRate);
         return ResultUtil.ok(examPropCountDto);
     }
 

+ 6 - 8
themis-backend/src/main/java/com/qmth/themis/backend/api/TIeInvigilateController.java

@@ -34,7 +34,6 @@ import org.slf4j.LoggerFactory;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
-import javax.servlet.http.HttpServletResponse;
 import java.io.File;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicReference;
@@ -347,12 +346,11 @@ public class TIeInvigilateController {
     @RequestMapping(value = "/progress/list/export", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "监考进度信息", response = InvigilateListProgressBean.class)})
     public void progressListExport(@ApiParam(value = "考试批次id", required = false) @RequestParam(required = false) Long examId,
-                                     @ApiParam(value = "考试场次id", required = false) @RequestParam(required = false) Long examActivityId,
-                                     @ApiParam(value = "虚拟考场代码", required = false) @RequestParam(required = false) String roomCode,
-                                     @ApiParam(value = "科目代码", required = false) @RequestParam(required = false) String courseCode,
-                                     @ApiParam(value = "姓名", required = false) @RequestParam(required = false) String name,
-                                     @ApiParam(value = "证件号", required = false) @RequestParam(required = false) String identity,
-                                     HttpServletResponse response) throws Exception {
+                                   @ApiParam(value = "考试场次id", required = false) @RequestParam(required = false) Long examActivityId,
+                                   @ApiParam(value = "虚拟考场代码", required = false) @RequestParam(required = false) String roomCode,
+                                   @ApiParam(value = "科目代码", required = false) @RequestParam(required = false) String courseCode,
+                                   @ApiParam(value = "姓名", required = false) @RequestParam(required = false) String name,
+                                   @ApiParam(value = "证件号", required = false) @RequestParam(required = false) String identity) throws Exception {
         TBUser tbUser = (TBUser) ServletUtil.getRequestAccount();
         AuthDto authDto = (AuthDto) redisUtil.get(SystemConstant.userOauth + "::" + tbUser.getId());
         //如果有监考员角色,只能查看自己所监考的考场,巡考员和管理员则可以查看全部考场
@@ -361,7 +359,7 @@ public class TIeInvigilateController {
             userId = tbUser.getId();
         }
         List<InvigilateListProgressExcelBean> invigilateListProgressExcelBeanList = tOeExamRecordService.invigilatePageProgressListExport(examId, examActivityId, roomCode, courseCode, name, identity, userId);
-        ExportUtils.exportEXCEL("进度信息", InvigilateListProgressExcelBean.class, invigilateListProgressExcelBeanList, response);
+        ExportUtils.exportEXCEL("进度信息", InvigilateListProgressExcelBean.class, invigilateListProgressExcelBeanList, ServletUtil.getResponse());
     }
 
     @ApiOperation(value = "违纪处理接口")