Jelajahi Sumber

加入考生轨迹ip变动

wangliang 2 tahun lalu
induk
melakukan
d19dcb705b

+ 2 - 3
themis-admin/src/main/java/com/qmth/themis/admin/api/TEExamStudentController.java

@@ -572,9 +572,8 @@ public class TEExamStudentController {
      */
     private void commonMarkResult(Long examId) {
         ExamCacheBean examCacheBean = teExamService.getExamCacheBean(examId);
-        if (Objects.isNull(examCacheBean)) {
-            throw new BusinessException(ExceptionResultEnum.EXAM_NO);
-        }
+        Optional.ofNullable(examCacheBean).orElseThrow(() -> new BusinessException(ExceptionResultEnum.EXAM_NO));
+
         InvigilateMonitorStatusEnum invigilateMonitorStatusEnum = examCacheBean.getMonitorStatus();//监考状态
         if (Objects.nonNull(invigilateMonitorStatusEnum) && !Objects
                 .equals(invigilateMonitorStatusEnum, InvigilateMonitorStatusEnum.FINISHED)) {

+ 13 - 1
themis-admin/src/main/java/com/qmth/themis/admin/api/TIeInvigilateController.java

@@ -40,7 +40,6 @@ import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
 import java.io.File;
 import java.util.*;
-import java.util.stream.Collectors;
 
 /**
  * @Description: 监考信息 前端控制器
@@ -344,6 +343,19 @@ public class TIeInvigilateController {
                 .orderByAsc(TEExamStudentLog::getCreateTime);
         //                .and(w -> w.ne(TEExamStudentLog::getType, SystemOperationEnum.BREACH_HANDLE.name()).or().ne(TEExamStudentLog::getType, SystemOperationEnum.BREACH_REVOKE.name()));
         List<TEExamStudentLog> teExamStudentLogList = teExamStudentLogService.list(teExamStudentLogQueryWrapper);
+        if (!CollectionUtils.isEmpty(teExamStudentLogList)) {
+            String currentIp = teExamStudentLogList.get(0).getIp();
+            for (int i = 1; i < teExamStudentLogList.size(); i++) {
+                String ip = teExamStudentLogList.get(i).getIp();
+                if (Objects.isNull(currentIp) || Objects.equals(currentIp.trim(), "")) {
+                    currentIp = ip;
+                    continue;
+                } else if (Objects.nonNull(currentIp) && !Objects.equals(currentIp.trim(), "") && !Objects.equals(currentIp, ip)) {
+                    teExamStudentLogList.get(i).setIpChange(true);
+                    currentIp = ip;
+                }
+            }
+        }
         invigilateListDetailBean.setExamStudentLogList(teExamStudentLogList);
 
         //预警、异常、人脸

+ 12 - 0
themis-business/src/main/java/com/qmth/themis/business/entity/TEExamStudentLog.java

@@ -90,6 +90,10 @@ public class TEExamStudentLog implements Serializable {
     @ApiModelProperty(value = "运营商")
     private String isp;
 
+    @ApiModelProperty(value = "ip是否改变")
+    @TableField(exist = false)
+    private Boolean ipChange;
+
     public TEExamStudentLog() {
 
     }
@@ -148,6 +152,14 @@ public class TEExamStudentLog implements Serializable {
         this.isp = isp;
     }
 
+    public Boolean getIpChange() {
+        return ipChange;
+    }
+
+    public void setIpChange(Boolean ipChange) {
+        this.ipChange = ipChange;
+    }
+
     public String getIp() {
         return ip;
     }

+ 6 - 0
themis-business/src/main/resources/db/init-table-data.sql

@@ -233,6 +233,9 @@ INSERT INTO `t_b_privilege` VALUES (198, '系统参数查询', '/api/admin/sys/c
 INSERT INTO `t_b_privilege` VALUES (199, '系统参数保存', '/api/admin/sys/config/save', 'LINK', 197, 2, NULL, 1600932652000);
 INSERT INTO `t_b_privilege` VALUES (200, '系统参数启用/禁用', '/api/admin/sys/config/enable', 'LINK', 197, 3, NULL, 1600932652000);
 INSERT INTO `t_b_privilege` VALUES (201, '试卷删除', '/api/admin/exam/paper/delete', 'LINK', 7, 5, NULL, 1600932652000);
+INSERT INTO `t_b_privilege` VALUES (202, '视频存储管理', 'VideoSaveManagement', 'MENU', 1, 6, NULL, 1600932652000);
+INSERT INTO `t_b_privilege` VALUES (203, '视频存储查询', '/api/admin/sys/video/select', 'LINK', 202, 1, NULL, 1600932652000);
+INSERT INTO `t_b_privilege` VALUES (204, '视频存储删除', '/api/admin/sys/video/delete', 'LINK', 202, 2, NULL, 1600932652000);
 
 INSERT INTO `t_b_role_privilege` VALUES (1, 'SUPER_ADMIN', 1);
 INSERT INTO `t_b_role_privilege` VALUES (2, 'SUPER_ADMIN', 2);
@@ -477,6 +480,9 @@ INSERT INTO `t_b_role_privilege` VALUES (248, 'SUPER_ADMIN', 199);
 INSERT INTO `t_b_role_privilege` VALUES (249, 'SUPER_ADMIN', 200);
 INSERT INTO `t_b_role_privilege` VALUES (250, 'ADMIN', 140);
 INSERT INTO `t_b_role_privilege` VALUES (251, 'ADMIN', 201);
+INSERT INTO `t_b_role_privilege` VALUES (252, 'SUPER_ADMIN', 203);
+INSERT INTO `t_b_role_privilege` VALUES (253, 'SUPER_ADMIN', 204);
+INSERT INTO `t_b_role_privilege` VALUES (254, 'SUPER_ADMIN', 202);
 
 INSERT INTO `t_b_role` VALUES (1, 'SUPER_ADMIN', '系统管理员', 1600932652000);
 INSERT INTO `t_b_role` VALUES (2, 'INVIGILATE', '监考员', 1600932652000);

+ 33 - 45
themis-business/src/main/resources/db/init-table.sql

@@ -1,22 +1,3 @@
-/*
- Navicat Premium Data Transfer
-
- Source Server         : localhost
- Source Server Type    : MySQL
- Source Server Version : 80027
- Source Host           : localhost:3306
- Source Schema         : themis_v1.1
-
- Target Server Type    : MySQL
- Target Server Version : 80027
- File Encoding         : 65001
-
- Date: 17/02/2023 17:05:19
-*/
-
-SET NAMES utf8mb4;
-SET FOREIGN_KEY_CHECKS = 0;
-
 -- ----------------------------
 -- Table structure for qrtz_blob_triggers
 -- ----------------------------
@@ -214,7 +195,7 @@ CREATE TABLE `sys_config` (
                               `org_id` bigint DEFAULT NULL COMMENT '机构id',
                               `config_key` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '参数键名',
                               `config_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '参数名称',
-                              `config_value` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '参数键值',
+                              `config_value` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '参数键值',
                               `enable` tinyint NOT NULL DEFAULT '1' COMMENT '是否启用,0:停用,1:启用',
                               `create_id` bigint DEFAULT NULL COMMENT '创建人',
                               `create_time` bigint DEFAULT NULL COMMENT '创建时间',
@@ -355,7 +336,7 @@ CREATE TABLE `t_b_org` (
                            `update_id` bigint DEFAULT NULL COMMENT '更新人id',
                            PRIMARY KEY (`id`),
                            UNIQUE KEY `t_b_org_code_Idx` (`code`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='机构';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='机构';
 
 -- ----------------------------
 -- Table structure for t_b_privilege
@@ -407,7 +388,7 @@ CREATE TABLE `t_b_role` (
                             `create_time` bigint DEFAULT NULL COMMENT '创建时间',
                             PRIMARY KEY (`id`),
                             UNIQUE KEY `t_b_role_role_code_Idx` (`role_code`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='角色';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='角色';
 
 -- ----------------------------
 -- Table structure for t_b_role_privilege
@@ -488,7 +469,7 @@ CREATE TABLE `t_b_user` (
                             `update_id` bigint DEFAULT NULL COMMENT '更新人id',
                             PRIMARY KEY (`id`),
                             UNIQUE KEY `org_login_name` (`org_id`,`login_name`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户';
 
 -- ----------------------------
 -- Table structure for t_b_user_role
@@ -500,7 +481,7 @@ CREATE TABLE `t_b_user_role` (
                                  `role_code` varchar(30) NOT NULL DEFAULT '' COMMENT '角色编码',
                                  PRIMARY KEY (`id`),
                                  KEY `user_id` (`user_id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户角色';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户角色';
 
 -- ----------------------------
 -- Table structure for t_e_audio
@@ -572,7 +553,7 @@ CREATE TABLE `t_e_exam` (
                             `update_time` bigint DEFAULT NULL COMMENT '更新时间',
                             `mode` varchar(30) DEFAULT NULL COMMENT '模式,together:集中统一,anytime:随到随考',
                             `enable` tinyint DEFAULT '1' COMMENT '是否启用,0:停用,1:启用',
-                            `archived` tinyint DEFAULT '1' COMMENT '是否归档,0:不归档,1:归档',
+                            `archived` tinyint DEFAULT '0' COMMENT '是否归档,0:不归档,1:归档',
                             `opening_seconds` int DEFAULT NULL COMMENT '允许开考开放时长(分钟),相当于迟到时间',
                             `max_duration_seconds` int DEFAULT NULL COMMENT '最大考试时长(分钟)',
                             `force_finish` tinyint DEFAULT NULL COMMENT '是否在结束时间集中强制收卷,0:不强制,1:强制',
@@ -600,10 +581,12 @@ CREATE TABLE `t_e_exam` (
                             `exam_student_call_enable` tinyint NOT NULL DEFAULT '1' COMMENT '是否允许考生发起语音通话,0:否,1:是',
                             `objective_score_push` tinyint NOT NULL DEFAULT '0' COMMENT '是否推送客观分,0:否,1:是',
                             `exam_student_breach_push` tinyint NOT NULL DEFAULT '0' COMMENT '是否推送违纪考生,0:否,1:是',
+                            `video_delete` tinyint NOT NULL DEFAULT '1' COMMENT '视频是否删除,0:已删除,1:未删除',
+                            `video_delete_time` bigint DEFAULT NULL COMMENT '视频删除时间',
                             PRIMARY KEY (`id`),
                             UNIQUE KEY `t_e_exam_orgId_code_Idx` (`org_id`,`code`) USING BTREE,
                             UNIQUE KEY `t_e_exam_short_code_Idx` (`short_code`,`enable`,`archived`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='考试批次';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='考试批次';
 
 -- ----------------------------
 -- Table structure for t_e_exam_activity
@@ -625,7 +608,7 @@ CREATE TABLE `t_e_exam_activity` (
                                      `update_id` bigint DEFAULT NULL COMMENT '更新人id',
                                      PRIMARY KEY (`id`),
                                      UNIQUE KEY `t_e_exam_activity_examId_code_Idx` (`exam_id`,`code`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='考试场次';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='考试场次';
 
 -- ----------------------------
 -- Table structure for t_e_exam_breach_log
@@ -672,7 +655,7 @@ CREATE TABLE `t_e_exam_course` (
                                    `update_time` bigint DEFAULT NULL COMMENT '更新时间',
                                    PRIMARY KEY (`id`),
                                    UNIQUE KEY `t_e_exam_course_examId_courseCode_Idx` (`exam_id`,`course_code`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='考试科目';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='考试科目';
 
 -- ----------------------------
 -- Table structure for t_e_exam_paper
@@ -706,7 +689,7 @@ CREATE TABLE `t_e_exam_paper` (
                                   `struct_md5` varchar(100) DEFAULT NULL COMMENT '结构文件MD5',
                                   PRIMARY KEY (`id`),
                                   UNIQUE KEY `t_e_exam_paper_examId_code_Idx` (`exam_id`,`code`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='考试试卷';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='考试试卷';
 
 -- ----------------------------
 -- Table structure for t_e_exam_reexam
@@ -777,7 +760,7 @@ CREATE TABLE `t_e_exam_student` (
                                     KEY `student_id` (`student_id`) USING BTREE,
                                     KEY `exam_id` (`exam_id`),
                                     KEY `exam_room_code` (`room_code`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='考生库';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='考生库';
 
 -- ----------------------------
 -- Table structure for t_e_exam_student_log
@@ -788,16 +771,22 @@ CREATE TABLE `t_e_exam_student_log` (
                                         `student_id` bigint NOT NULL COMMENT '学生id',
                                         `exam_student_id` bigint DEFAULT NULL COMMENT '考生id',
                                         `exam_record_id` bigint DEFAULT NULL COMMENT '考试记录id',
-                                        `type` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '类型',
-                                        `info` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '描述',
-                                        `remark` mediumtext CHARACTER SET utf8 COLLATE utf8_general_ci COMMENT '备注',
+                                        `type` varchar(30) DEFAULT NULL COMMENT '类型',
+                                        `info` varchar(1000) DEFAULT NULL COMMENT '描述',
+                                        `remark` mediumtext COMMENT '备注',
                                         `create_time` bigint DEFAULT NULL COMMENT '创建时间',
                                         `obj_id` bigint DEFAULT NULL COMMENT '业务id',
                                         `update_time` bigint DEFAULT NULL COMMENT '更新时间',
-                                        `title` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '日志标题',
-                                        PRIMARY KEY (`id`) USING BTREE,
+                                        `title` varchar(100) DEFAULT NULL COMMENT '日志标题',
+                                        `ip` varchar(30) DEFAULT NULL COMMENT 'ip地址',
+                                        `country` varchar(100) DEFAULT NULL COMMENT '国家',
+                                        `region` varchar(100) DEFAULT NULL COMMENT '地区',
+                                        `province` varchar(100) DEFAULT NULL COMMENT '省份',
+                                        `city` varchar(100) DEFAULT NULL COMMENT '城市',
+                                        `isp` varchar(100) DEFAULT NULL COMMENT '运营商',
+                                        PRIMARY KEY (`id`),
                                         KEY `student_create_time` (`exam_student_id`,`create_time`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='考生轨迹';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='考生轨迹';
 
 -- ----------------------------
 -- Table structure for t_e_exam_student_online_log
@@ -852,7 +841,7 @@ CREATE TABLE `t_e_student` (
                                `enable` tinyint DEFAULT '1' COMMENT '是否启用,0:停用,1:启用',
                                PRIMARY KEY (`id`),
                                UNIQUE KEY `t_e_student_orgId_identity_Idx` (`org_id`,`identity`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='学生档案';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='学生档案';
 
 -- ----------------------------
 -- Table structure for t_e_user_log
@@ -1017,7 +1006,8 @@ CREATE TABLE `t_ip_region` (
                                `create_time` bigint NOT NULL COMMENT '创建时间',
                                `update_time` bigint DEFAULT NULL COMMENT '更新时间',
                                PRIMARY KEY (`id`),
-                               KEY `exam_record_id_index` (`exam_record_id`)
+                               KEY `exam_record_id_index` (`exam_record_id`),
+                               KEY `t_ip_region_country_IDX` (`country`,`province`) USING BTREE
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='ip信息表';
 
 -- ----------------------------
@@ -1031,7 +1021,7 @@ CREATE TABLE `t_m_rocket_message` (
                                       `body` mediumtext CHARACTER SET utf8 COLLATE utf8_general_ci COMMENT '消息内容',
                                       `type` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '消息类型',
                                       `obj_id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '关联业务id',
-                                      `obj_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '关联业务名称',
+                                      `obj_name` varchar(200) DEFAULT NULL COMMENT '关联业务名称',
                                       `ack` tinyint NOT NULL COMMENT '消息ack',
                                       `sequence` int DEFAULT NULL COMMENT '消息序号',
                                       `properties` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '扩展类型',
@@ -1076,7 +1066,7 @@ CREATE TABLE `t_oe_exam_answer` (
                                     `score` double DEFAULT NULL COMMENT '分数',
                                     PRIMARY KEY (`id`),
                                     UNIQUE KEY `record_number` (`exam_record_id`,`main_number`,`sub_number`,`sub_index`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='作答结果';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='作答结果';
 
 -- ----------------------------
 -- Table structure for t_oe_exam_break_history
@@ -1106,7 +1096,7 @@ CREATE TABLE `t_oe_exam_record` (
                                     `exam_activity_id` bigint NOT NULL COMMENT '考试场次ID',
                                     `exam_student_id` bigint NOT NULL COMMENT '考生ID',
                                     `paper_id` bigint NOT NULL COMMENT '实际使用的试卷ID',
-                                    `status` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '考试状态,FIRST_PREPARE:首次候考,ANSWERING:正在答题,BREAK_OFF:已中断,RESUME_PREPARE:断点恢复候考,FINISHED:已结束考试,PERSISTED:数据已保存,JUNK: 作废',
+                                    `status` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '考试状态,FIRST_PREPARE:首次候考,ANSWERING:正在答题,BREAK_OFF:已中断,RESUME_PREPARE:断点恢复候考,FINISHED:已结束考试,PERSISTED:数据已保存,JUNK: 作废',
                                     `first_prepare_time` bigint DEFAULT NULL COMMENT '首次进入候考时间',
                                     `first_start_time` bigint DEFAULT NULL COMMENT '首次开考时间',
                                     `last_break_time` bigint DEFAULT NULL COMMENT '最近断点时间',
@@ -1169,7 +1159,7 @@ CREATE TABLE `t_oe_exam_record` (
                                     KEY `exam_activity_id` (`exam_activity_id`),
                                     KEY `exam_id` (`exam_id`),
                                     KEY `exam_status` (`status`,`client_websocket_status`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='考试记录';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='考试记录';
 
 -- ----------------------------
 -- Table structure for t_oe_exam_simulate_history
@@ -1340,6 +1330,4 @@ CREATE TABLE `t_sync_exam_student_score` (
                                              `create_id` bigint DEFAULT NULL COMMENT '创建人id',
                                              `create_time` bigint DEFAULT NULL COMMENT '创建时间',
                                              PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='同步云阅卷考生成绩表';
-
-SET FOREIGN_KEY_CHECKS = 1;
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='同步云阅卷考生成绩表';