wangliang 4 gadi atpakaļ
vecāks
revīzija
a988cbc289

+ 63 - 11
themis-backend/src/main/java/com/qmth/themis/backend/api/TIeInvigilateCallMobileController.java

@@ -12,12 +12,11 @@ import com.qmth.themis.business.cache.RedisKeyHelper;
 import com.qmth.themis.business.constant.SystemConstant;
 import com.qmth.themis.business.dto.AuthDto;
 import com.qmth.themis.business.dto.MqDto;
-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.service.MqDtoService;
+import com.qmth.themis.business.service.TBExamInvigilateUserService;
+import com.qmth.themis.business.service.TEExamStudentService;
 import com.qmth.themis.business.service.TIeExamInvigilateCallService;
 import com.qmth.themis.business.util.RedisUtil;
 import com.qmth.themis.business.util.ServletUtil;
@@ -33,10 +32,8 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @Description: mobile监考监控通话信息 前端控制器
@@ -63,11 +60,21 @@ public class TIeInvigilateCallMobileController {
     @Resource
     TencentYunUtil tencentYunUtil;
 
+    @Resource
+    TBExamInvigilateUserService tbExamInvigilateUserService;
+
+    @Resource
+    TEExamStudentService teExamStudentService;
+
     @ApiOperation(value = "监考监控通话查询接口")
     @RequestMapping(value = "/call/list", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "监考监控信息", response = TIeExamInvigilateCall.class)})
-    public Result callList(@ApiParam(value = "考试批次id", required = false) @RequestParam(required = false) Long examId, @ApiParam(value = "分页页码", required = true) @RequestParam int pageNumber, @ApiParam(value = "分页数", required = true) @RequestParam int pageSize) {
-        IPage<TIeExamInvigilateCall> tIeExamInvigilateCallIPage = tIeExamInvigilateCallService.examInvigilateCallQuery(new Page<>(pageNumber, pageSize), examId, MonitorStatusSourceEnum.START.name());
+    public Result callList(@ApiParam(value = "考试批次id", required = true) @RequestParam(required = true) Long examId, @ApiParam(value = "分页页码", required = true) @RequestParam int pageNumber, @ApiParam(value = "分页数", required = true) @RequestParam int pageSize) {
+        if (Objects.isNull(examId) || Objects.equals(examId, "")) {
+            throw new BusinessException(ExceptionResultEnum.EXAM_ID_IS_NULL);
+        }
+        Set<Long> examActivityIdSet = this.getExamActivityIds();
+        IPage<TIeExamInvigilateCall> tIeExamInvigilateCallIPage = tIeExamInvigilateCallService.examInvigilateCallQuery(new Page<>(pageNumber, pageSize), examActivityIdSet, MonitorStatusSourceEnum.START.name());
         BasePage basePage = new BasePage(tIeExamInvigilateCallIPage.getRecords(), tIeExamInvigilateCallIPage.getCurrent(), tIeExamInvigilateCallIPage.getSize(), tIeExamInvigilateCallIPage.getTotal());
         return ResultUtil.ok(basePage);
     }
@@ -79,8 +86,9 @@ public class TIeInvigilateCallMobileController {
         if (Objects.isNull(examId) || Objects.equals(examId, "")) {
             throw new BusinessException(ExceptionResultEnum.EXAM_ID_IS_NULL);
         }
+        Set<Long> examActivityIdSet = this.getExamActivityIds();
         QueryWrapper<TIeExamInvigilateCall> examInvigilateCallQueryWrapper = new QueryWrapper<>();
-        examInvigilateCallQueryWrapper.lambda().eq(TIeExamInvigilateCall::getExamId, examId).eq(TIeExamInvigilateCall::getStatus, MonitorStatusSourceEnum.START.name());
+        examInvigilateCallQueryWrapper.lambda().in(TIeExamInvigilateCall::getExamActivityId, examActivityIdSet).eq(TIeExamInvigilateCall::getStatus, MonitorStatusSourceEnum.START.name());
         int count = tIeExamInvigilateCallService.count(examInvigilateCallQueryWrapper);
         return ResultUtil.ok(Collections.singletonMap("count", count));
     }
@@ -152,4 +160,48 @@ public class TIeInvigilateCallMobileController {
         map.put("monitorUserSig", monitorUserSig);
         return ResultUtil.ok(map);
     }
+
+    /**
+     * 获取考试批次
+     *
+     * @return
+     */
+    public Set<Long> getExamActivityIds() {
+        TBUser tbUser = (TBUser) ServletUtil.getRequestAccount();
+        TBSession tbSession = (TBSession) ServletUtil.getRequestSession();
+        if (Objects.isNull(tbSession)) {
+            throw new BusinessException(ExceptionResultEnum.LOGIN_NO);
+        }
+        //首先查询当前用户所要监控的roomCode
+        QueryWrapper<TBExamInvigilateUser> examInvigilateUserQueryWrapper = new QueryWrapper<>();
+        AuthDto authDto = (AuthDto) redisUtil.get(SystemConstant.userOauth + "::" + tbUser.getId());
+        //如果有监考员角色,只能查看自己所监考的考场,巡考员和管理员则可以查看全部考场
+        examInvigilateUserQueryWrapper.lambda().eq(TBExamInvigilateUser::getOrgId, tbUser.getOrgId());
+        if (authDto.getRoleCodes().toString().contains(RoleEnum.INVIGILATE.name())) {
+            examInvigilateUserQueryWrapper.lambda().eq(TBExamInvigilateUser::getUserId, tbUser.getId());
+        }
+        List<TBExamInvigilateUser> tbExamInvigilateUserList = tbExamInvigilateUserService.list(examInvigilateUserQueryWrapper);
+        Set<String> roomCodeSet = null;
+        if (Objects.nonNull(tbExamInvigilateUserList) && tbExamInvigilateUserList.size() > 0) {
+            roomCodeSet = tbExamInvigilateUserList.stream().map(s -> s.getRoomCode()).collect(Collectors.toSet());
+        }
+        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<Long> examActivityIdSet = null;
+        if (Objects.nonNull(teExamStudentList) && teExamStudentList.size() > 0) {
+            examActivityIdSet = new HashSet<>();
+            Set<Long> finalExamActivityIdSet = examActivityIdSet;
+            teExamStudentList.forEach(s -> {
+                finalExamActivityIdSet.add(s.getExamActivityId());
+            });
+        }
+        return examActivityIdSet;
+    }
 }

+ 1 - 1
themis-backend/src/main/resources/application.properties

@@ -163,5 +163,5 @@ rocketmq.producer.customized-trace-topic=my-trace-topic
 prefix.url.admin=api/admin
 
 #\u65E0\u9700\u9274\u6743\u7684url
-no.auth.urls=/webjars/**,/druid/**,/swagger-ui.html,/doc.html,/swagger-resources/**,/v2/api-docs,/webjars/springfox-swagger-ui/**,/api/admin/user/login/account,/api/admin/sys/org/queryByOrgCode,/file/**,/upload/**,/client/**,/base_photo/**,/frontend/**,/api/admin/monitor/call/list,/api/admin/monitor/call/query
+no.auth.urls=/webjars/**,/druid/**,/swagger-ui.html,/doc.html,/swagger-resources/**,/v2/api-docs,/webjars/springfox-swagger-ui/**,/api/admin/user/login/account,/api/admin/sys/org/queryByOrgCode,/file/**,/upload/**,/client/**,/base_photo/**,/frontend/**
 common.system.urls=/api/admin/sys/getMenu,/api/admin/user/logout,/api/admin/sys/env,/api/admin/sys/file/upload,/api/admin/sys/file/download,/api/admin/sys/org/query,/api/admin/sys/role/query,/api/admin/sys/examActivity/query,/api/admin/sys/exam/query,/api/admin/sys/examRoom/query,/api/admin/sys/exam/privilegeQuery,/api/admin/student/photo/upload

+ 11 - 0
themis-business/src/main/java/com/qmth/themis/business/constant/SystemConstant.java

@@ -1,11 +1,22 @@
 package com.qmth.themis.business.constant;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.qmth.themis.business.dto.AuthDto;
+import com.qmth.themis.business.entity.TBExamInvigilateUser;
+import com.qmth.themis.business.entity.TBSession;
+import com.qmth.themis.business.entity.TBUser;
+import com.qmth.themis.business.entity.TEExamStudent;
+import com.qmth.themis.business.enums.RoleEnum;
+import com.qmth.themis.business.util.ServletUtil;
 import com.qmth.themis.common.contanst.Constants;
+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 java.io.File;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @Description: 系统常量

+ 3 - 2
themis-business/src/main/java/com/qmth/themis/business/dao/TIeExamInvigilateCallMapper.java

@@ -7,6 +7,7 @@ import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.Map;
+import java.util.Set;
 
 /**
  * @Description: 监考 监控通话申请 Mapper 接口
@@ -22,9 +23,9 @@ public interface TIeExamInvigilateCallMapper extends BaseMapper<TIeExamInvigilat
      * 监考监控通话申请查询
      *
      * @param iPage
-     * @param examId
+     * @param examActivityIdSet
      * @param status
      * @return
      */
-    public IPage<TIeExamInvigilateCall> examInvigilateCallQuery(IPage<Map> iPage, @Param("examId") Long examId, @Param("status") String status);
+    public IPage<TIeExamInvigilateCall> examInvigilateCallQuery(IPage<Map> iPage, @Param("examActivityIdSet") Set<Long> examActivityIdSet, @Param("status") String status);
 }

+ 3 - 2
themis-business/src/main/java/com/qmth/themis/business/service/TIeExamInvigilateCallService.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.themis.business.entity.TIeExamInvigilateCall;
 
 import java.util.Map;
+import java.util.Set;
 
 /**
  * @Description: 监考监控通话申请 服务类
@@ -19,9 +20,9 @@ public interface TIeExamInvigilateCallService extends IService<TIeExamInvigilate
      * 监考监控通话申请查询
      *
      * @param iPage
-     * @param examId
+     * @param examActivityIdSet
      * @param status
      * @return
      */
-    public IPage<TIeExamInvigilateCall> examInvigilateCallQuery(IPage<Map> iPage, Long examId, String status);
+    public IPage<TIeExamInvigilateCall> examInvigilateCallQuery(IPage<Map> iPage, Set<Long> examActivityIdSet, String status);
 }

+ 11 - 2
themis-business/src/main/java/com/qmth/themis/business/service/impl/TIeExamInvigilateCallServiceImpl.java

@@ -9,6 +9,7 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.util.Map;
+import java.util.Set;
 
 /**
  * @Description: 监考监控通话申请 服务实现类
@@ -23,8 +24,16 @@ public class TIeExamInvigilateCallServiceImpl extends ServiceImpl<TIeExamInvigil
     @Resource
     TIeExamInvigilateCallMapper tIeExamInvigilateCallMapper;
 
+    /**
+     * 监考监控通话申请查询
+     *
+     * @param iPage
+     * @param examActivityIdSet
+     * @param status
+     * @return
+     */
     @Override
-    public IPage<TIeExamInvigilateCall> examInvigilateCallQuery(IPage<Map> iPage, Long examId, String status) {
-        return tIeExamInvigilateCallMapper.examInvigilateCallQuery(iPage, examId, status);
+    public IPage<TIeExamInvigilateCall> examInvigilateCallQuery(IPage<Map> iPage, Set<Long> examActivityIdSet, String status) {
+        return tIeExamInvigilateCallMapper.examInvigilateCallQuery(iPage, examActivityIdSet, status);
     }
 }

+ 14 - 0
themis-business/src/main/resources/db/init.sql

@@ -505,6 +505,9 @@ INSERT INTO `t_b_privilege` VALUES (139, '监考端撤销通话申请', '/api/ad
 INSERT INTO `t_b_privilege` VALUES (140, '结束监考', '/api/admin/invigilate/exam/finish', 'LINK', 14, 12, NULL, '2020-08-01 12:08:31');
 INSERT INTO `t_b_privilege` VALUES (141, '导入导出任务', 'ImportExportTask', 'MENU', 4, 7, NULL, '2020-08-01 12:08:31');
 INSERT INTO `t_b_privilege` VALUES (142, '监考获取monitorKey', '/api/admin/monitor/getMonitorKey', 'LINK', 60, 28, NULL, '2020-08-01 12:08:31');
+INSERT INTO `t_b_privilege` VALUES (143, '监考监控通话提醒', '/api/admin/monitor/call/count', 'LINK', 60, 29, NULL, '2020-08-01 12:08:31');
+INSERT INTO `t_b_privilege` VALUES (144, '监考监控通话查询', '/api/admin/monitor/call/list', 'LINK', 60, 30, NULL, '2020-08-01 12:08:31');
+INSERT INTO `t_b_privilege` VALUES (145, '监考监控通话查询来源', '/api/admin/monitor/call/query', 'LINK', 60, 31, NULL, '2020-08-01 12:08:31');
 COMMIT;
 
 -- ----------------------------
@@ -700,6 +703,17 @@ INSERT INTO `t_b_role_privilege` VALUES (157, 'ADMIN', 25);
 INSERT INTO `t_b_role_privilege` VALUES (158, 'INVIGILATE', 142);
 INSERT INTO `t_b_role_privilege` VALUES (159, 'INSPECTION', 11);
 INSERT INTO `t_b_role_privilege` VALUES (160, 'INSPECTION', 13);
+INSERT INTO `t_b_role_privilege` VALUES (161, 'INVIGILATE', 35);
+INSERT INTO `t_b_role_privilege` VALUES (162, 'INSPECTION', 35);
+INSERT INTO `t_b_role_privilege` VALUES (163, 'ADMIN', 143);
+INSERT INTO `t_b_role_privilege` VALUES (164, 'INVIGILATE', 143);
+INSERT INTO `t_b_role_privilege` VALUES (165, 'INSPECTION', 143);
+INSERT INTO `t_b_role_privilege` VALUES (166, 'ADMIN', 144);
+INSERT INTO `t_b_role_privilege` VALUES (167, 'INVIGILATE', 144);
+INSERT INTO `t_b_role_privilege` VALUES (168, 'INSPECTION', 144);
+INSERT INTO `t_b_role_privilege` VALUES (169, 'ADMIN', 145);
+INSERT INTO `t_b_role_privilege` VALUES (170, 'INVIGILATE', 145);
+INSERT INTO `t_b_role_privilege` VALUES (171, 'INSPECTION', 145);
 COMMIT;
 
 -- ----------------------------

+ 4 - 3
themis-business/src/main/resources/mapper/TIeExamInvigilateCallMapper.xml

@@ -8,9 +8,10 @@
         from
             t_ie_exam_invigilate_call tieic
         <where>
-            <if test="examId != null and examId != ''">
-                and tieic.exam_id = #{examId}
-            </if>
+            tieic.exam_activity_id in
+            <foreach collection="examActivityIdSet" item="examActivityId" index="index" open="(" close=")" separator=",">
+                #{examActivityId}
+            </foreach>
             <if test="status != null and status != ''">
                 and tieic.status = #{status}
             </if>