anxin-ruoyi/docker/database/init/03-verification-schema.sql

229 lines
15 KiB
SQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- ============================================================================
-- 用户企业认证、身份认证和员工CA二维码认证功能数据库初始化脚本
-- 创建日期: 2026-03-04
-- 描述: 创建认证相关表、角色、菜单和权限
-- ============================================================================
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ============================================================================
-- 1. 创建认证相关表
-- ============================================================================
-- ----------------------------
-- Table structure for sys_user_enterprise_verification
-- ----------------------------
DROP TABLE IF EXISTS `sys_user_enterprise_verification`;
CREATE TABLE `sys_user_enterprise_verification` (
`verification_id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '认证ID',
`user_id` BIGINT(20) NOT NULL COMMENT '用户ID',
`enterprise_name` VARCHAR(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '企业名称',
`enterprise_code` VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '企业统一社会信用代码',
`legal_person` VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '法人代表',
`business_license` VARCHAR(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '营业执照URL',
`verification_status` VARCHAR(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'PENDING' COMMENT '认证状态: PENDING-未认证, APPROVED-已认证, REJECTED-认证失败',
`audit_remark` VARCHAR(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '审核备注',
`auditor_id` BIGINT(20) NULL DEFAULT NULL COMMENT '审核人ID',
`audit_time` DATETIME NULL DEFAULT NULL COMMENT '审核时间',
`create_by` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '' COMMENT '创建者',
`create_time` DATETIME NULL DEFAULT NULL COMMENT '创建时间',
`update_by` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '' COMMENT '更新者',
`update_time` DATETIME NULL DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`verification_id`) USING BTREE,
INDEX `idx_user_id` (`user_id`) USING BTREE,
INDEX `idx_status` (`verification_status`) USING BTREE,
INDEX `idx_enterprise_code` (`enterprise_code`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '用户企业认证表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Table structure for sys_user_identity_verification
-- ----------------------------
DROP TABLE IF EXISTS `sys_user_identity_verification`;
CREATE TABLE `sys_user_identity_verification` (
`verification_id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '认证ID',
`user_id` BIGINT(20) NOT NULL COMMENT '用户ID',
`real_name` VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '真实姓名',
`id_card_number` VARCHAR(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '身份证号(加密)',
`verification_status` VARCHAR(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'PENDING' COMMENT '认证状态: PENDING-未认证, APPROVED-已认证, REJECTED-认证失败',
`ca_verification_id` VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'CA服务返回的认证ID',
`reject_reason` VARCHAR(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'CA服务拒绝原因',
`verification_time` DATETIME NULL DEFAULT NULL COMMENT 'CA认证时间',
`create_by` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '' COMMENT '创建者',
`create_time` DATETIME NULL DEFAULT NULL COMMENT '创建时间',
`update_by` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '' COMMENT '更新者',
`update_time` DATETIME NULL DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`verification_id`) USING BTREE,
INDEX `idx_user_id` (`user_id`) USING BTREE,
INDEX `idx_status` (`verification_status`) USING BTREE,
INDEX `idx_ca_verification_id` (`ca_verification_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '用户身份认证表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Table structure for sys_verification_audit_log
-- ----------------------------
DROP TABLE IF EXISTS `sys_verification_audit_log`;
CREATE TABLE `sys_verification_audit_log` (
`log_id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '日志ID',
`verification_type` VARCHAR(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '认证类型: ENTERPRISE-企业认证, IDENTITY-身份认证',
`verification_id` BIGINT(20) NOT NULL COMMENT '认证记录ID',
`user_id` BIGINT(20) NOT NULL COMMENT '用户ID',
`old_status` VARCHAR(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '原状态',
`new_status` VARCHAR(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '新状态',
`audit_remark` VARCHAR(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '审核备注',
`operator_id` BIGINT(20) NOT NULL COMMENT '操作人ID',
`operator_name` VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '操作人姓名',
`operator_roles` VARCHAR(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '操作人角色列表(逗号分隔)',
`operation_time` DATETIME NOT NULL COMMENT '操作时间',
PRIMARY KEY (`log_id`) USING BTREE,
INDEX `idx_verification` (`verification_type`, `verification_id`) USING BTREE,
INDEX `idx_user_id` (`user_id`) USING BTREE,
INDEX `idx_operation_time` (`operation_time`) USING BTREE,
INDEX `idx_operator_id` (`operator_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '认证审核日志表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Table structure for dc_employee_qr_code
-- ----------------------------
DROP TABLE IF EXISTS `dc_employee_qr_code`;
CREATE TABLE `dc_employee_qr_code` (
`qr_code_id` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '二维码ID(UUID)',
`employee_id` BIGINT(20) NOT NULL COMMENT '员工ID',
`real_name` VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '真实姓名',
`id_card_number` VARCHAR(18) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '身份证号',
`generate_time` DATETIME NOT NULL COMMENT '生成时间',
`expiry_time` DATETIME NOT NULL COMMENT '过期时间',
`qr_code_status` VARCHAR(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'ACTIVE' COMMENT '二维码状态: ACTIVE-有效, EXPIRED-已过期, USED-已使用',
`verification_status` VARCHAR(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '认证状态: PENDING-待认证, APPROVED-已认证, REJECTED-认证失败',
`ca_verification_id` VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'CA服务返回的认证ID',
`verification_time` DATETIME NULL DEFAULT NULL COMMENT '认证时间',
PRIMARY KEY (`qr_code_id`) USING BTREE,
INDEX `idx_employee_id` (`employee_id`) USING BTREE,
INDEX `idx_status` (`qr_code_status`) USING BTREE,
INDEX `idx_expiry_time` (`expiry_time`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '员工实名认证二维码表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Table structure for sys_ca_service_config
-- ----------------------------
DROP TABLE IF EXISTS `sys_ca_service_config`;
CREATE TABLE `sys_ca_service_config` (
`config_id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '配置ID',
`config_key` VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '配置键',
`config_value` VARCHAR(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '配置值',
`config_desc` VARCHAR(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '配置描述',
`is_encrypted` TINYINT(1) NULL DEFAULT 0 COMMENT '是否加密存储',
`create_time` DATETIME NULL DEFAULT NULL COMMENT '创建时间',
`update_time` DATETIME NULL DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`config_id`) USING BTREE,
UNIQUE INDEX `uk_config_key` (`config_key`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = 'CA服务配置表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of sys_ca_service_config
-- ----------------------------
INSERT INTO `sys_ca_service_config` (`config_key`, `config_value`, `config_desc`, `is_encrypted`, `create_time`, `update_time`) VALUES
('ca.service.url', 'http://localhost:8080/mock-ca', 'CA服务接口地址', 0, NOW(), NOW()),
('ca.service.timeout', '30000', 'CA服务超时时间(毫秒)', 0, NOW(), NOW()),
('ca.service.app_id', 'ruoyi-system', 'CA服务应用ID', 0, NOW(), NOW()),
('ca.service.app_secret', 'mock-secret-key', 'CA服务应用密钥', 0, NOW(), NOW()),
('ca.service.enabled', 'true', 'CA服务是否启用', 0, NOW(), NOW()),
('ca.qrcode.validity_hours', '24', '二维码默认有效期(小时)', 0, NOW(), NOW());
-- ============================================================================
-- 2. 创建认证相关角色
-- ============================================================================
-- 插入认证审核员角色
INSERT INTO `sys_role` (`role_name`, `role_key`, `role_sort`, `data_scope`, `menu_check_strictly`, `dept_check_strictly`, `status`, `del_flag`, `create_by`, `create_time`, `remark`) VALUES
('认证审核员', 'verification_auditor', 50, '1', 1, 1, '0', '0', 'admin', NOW(), '负责审核企业认证申请');
-- 插入认证管理员角色
INSERT INTO `sys_role` (`role_name`, `role_key`, `role_sort`, `data_scope`, `menu_check_strictly`, `dept_check_strictly`, `status`, `del_flag`, `create_by`, `create_time`, `remark`) VALUES
('认证管理员', 'verification_manager', 51, '1', 1, 1, '0', '0', 'admin', NOW(), '负责管理所有认证信息');
-- ============================================================================
-- 3. 创建认证相关菜单和权限
-- ============================================================================
-- 插入认证管理目录菜单
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `route_name`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`) VALUES
('认证管理', 0, 5, 'verification', NULL, NULL, '', 1, 0, 'M', '0', '0', NULL, 'shield', 'admin', NOW(), '认证管理目录');
-- 获取刚插入的认证管理目录的menu_id
SET @verification_menu_id = LAST_INSERT_ID();
-- 插入企业认证审核菜单
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `route_name`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`) VALUES
('企业认证审核', @verification_menu_id, 1, 'enterprise', 'system/verification/enterprise/index', NULL, '', 1, 0, 'C', '0', '0', 'system:verification:audit:enterprise', 'building', 'admin', NOW(), '企业认证审核菜单');
-- 获取企业认证审核菜单的menu_id
SET @enterprise_menu_id = LAST_INSERT_ID();
-- 插入认证信息管理菜单
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `route_name`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`) VALUES
('认证信息管理', @verification_menu_id, 2, 'manage', 'system/verification/manage/index', NULL, '', 1, 0, 'C', '0', '0', 'system:verification:manage', 'list', 'admin', NOW(), '认证信息管理菜单');
-- 获取认证信息管理菜单的menu_id
SET @manage_menu_id = LAST_INSERT_ID();
-- 插入企业认证审核的按钮权限
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `route_name`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`) VALUES
('企业认证查询', @enterprise_menu_id, 1, '', NULL, NULL, '', 1, 0, 'F', '0', '0', 'system:verification:enterprise:query', '#', 'admin', NOW(), ''),
('企业认证审核', @enterprise_menu_id, 2, '', NULL, NULL, '', 1, 0, 'F', '0', '0', 'system:verification:enterprise:audit', '#', 'admin', NOW(), ''),
('企业认证详情', @enterprise_menu_id, 3, '', NULL, NULL, '', 1, 0, 'F', '0', '0', 'system:verification:enterprise:detail', '#', 'admin', NOW(), '');
-- 插入认证信息管理的按钮权限
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `route_name`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`) VALUES
('认证信息查询', @manage_menu_id, 1, '', NULL, NULL, '', 1, 0, 'F', '0', '0', 'system:verification:view:all', '#', 'admin', NOW(), ''),
('认证信息导出', @manage_menu_id, 2, '', NULL, NULL, '', 1, 0, 'F', '0', '0', 'system:verification:export', '#', 'admin', NOW(), ''),
('批量审核', @manage_menu_id, 3, '', NULL, NULL, '', 1, 0, 'F', '0', '0', 'system:verification:batch:audit', '#', 'admin', NOW(), '');
-- ============================================================================
-- 4. 为角色分配菜单权限
-- ============================================================================
-- 为认证审核员角色分配权限
-- 获取认证审核员角色ID
SET @auditor_role_id = (SELECT role_id FROM sys_role WHERE role_key = 'verification_auditor');
-- 分配企业认证审核菜单权限
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`)
SELECT @auditor_role_id, menu_id
FROM sys_menu
WHERE perms IN (
'system:verification:audit:enterprise',
'system:verification:enterprise:query',
'system:verification:enterprise:audit',
'system:verification:enterprise:detail',
'system:verification:view:all'
);
-- 为认证管理员角色分配权限
-- 获取认证管理员角色ID
SET @manager_role_id = (SELECT role_id FROM sys_role WHERE role_key = 'verification_manager');
-- 分配所有认证相关菜单权限
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`)
SELECT @manager_role_id, menu_id
FROM sys_menu
WHERE perms IN (
'system:verification:audit:enterprise',
'system:verification:manage',
'system:verification:enterprise:query',
'system:verification:enterprise:audit',
'system:verification:enterprise:detail',
'system:verification:view:all',
'system:verification:export',
'system:verification:batch:audit'
) OR menu_id = @verification_menu_id;
-- ============================================================================
-- 完成
-- ============================================================================
SET FOREIGN_KEY_CHECKS = 1;
-- 输出完成信息
SELECT '用户企业认证、身份认证和员工CA二维码认证功能数据库初始化完成' AS message;