-- ========================================
-- 心理测评系统扩展表结构设计
-- 创建时间: 2025-11-01
-- ========================================

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- 1、用户档案扩展表
-- ----------------------------
DROP TABLE IF EXISTS `psy_user_profile`;
CREATE TABLE `psy_user_profile` (
  `profile_id` bigint NOT NULL AUTO_INCREMENT COMMENT '档案ID',
  `user_id` bigint NOT NULL COMMENT '用户ID（关联sys_user）',
  `profile_type` varchar(50) DEFAULT 'standard' COMMENT '档案类型（如：standard标准 child儿童 adult成人 senior老年）',
  `profile_data` longtext COMMENT '档案数据（JSON格式，支持自定义字段）',
  `avatar` varchar(500) DEFAULT NULL COMMENT '头像',
  `id_card` varchar(18) DEFAULT NULL COMMENT '身份证号',
  `birthday` date DEFAULT NULL COMMENT '生日',
  `education` varchar(50) DEFAULT NULL COMMENT '学历',
  `occupation` varchar(100) DEFAULT NULL COMMENT '职业',
  `address` varchar(500) DEFAULT NULL COMMENT '地址',
  `emergency_contact` varchar(50) DEFAULT NULL COMMENT '紧急联系人',
  `emergency_phone` varchar(11) DEFAULT NULL COMMENT '紧急联系电话',
  `medical_history` text COMMENT '病史',
  `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`profile_id`),
  UNIQUE KEY `uk_user_id` (`user_id`),
  KEY `idx_profile_type` (`profile_type`),
  CONSTRAINT `fk_profile_user` FOREIGN KEY (`user_id`) REFERENCES `sys_user` (`user_id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户档案扩展表';

-- ----------------------------
-- 2、量表权限表
-- ----------------------------
DROP TABLE IF EXISTS `psy_scale_permission`;
CREATE TABLE `psy_scale_permission` (
  `permission_id` bigint NOT NULL AUTO_INCREMENT COMMENT '权限ID',
  `scale_id` bigint NOT NULL COMMENT '量表ID',
  `dept_id` bigint DEFAULT NULL COMMENT '部门ID（关联sys_dept，为空表示所有部门）',
  `role_id` bigint DEFAULT NULL COMMENT '角色ID（关联sys_role，为空表示所有角色）',
  `user_id` bigint DEFAULT NULL COMMENT '用户ID（关联sys_user，为空表示所有用户）',
  `class_name` varchar(100) DEFAULT NULL COMMENT '班级名称（特殊字段，用于罪犯管理）',
  `start_time` datetime DEFAULT NULL COMMENT '开始时间',
  `end_time` datetime DEFAULT NULL COMMENT '结束时间',
  `status` char(1) DEFAULT '0' COMMENT '状态（0有效 1无效）',
  `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`permission_id`),
  KEY `idx_scale_id` (`scale_id`),
  KEY `idx_dept_id` (`dept_id`),
  KEY `idx_role_id` (`role_id`),
  KEY `idx_user_id` (`user_id`),
  KEY `idx_status` (`status`),
  CONSTRAINT `fk_permission_scale` FOREIGN KEY (`scale_id`) REFERENCES `psy_scale` (`scale_id`) ON DELETE CASCADE,
  CONSTRAINT `fk_permission_dept` FOREIGN KEY (`dept_id`) REFERENCES `sys_dept` (`dept_id`) ON DELETE CASCADE,
  CONSTRAINT `fk_permission_role` FOREIGN KEY (`role_id`) REFERENCES `sys_role` (`role_id`) ON DELETE CASCADE,
  CONSTRAINT `fk_permission_user` FOREIGN KEY (`user_id`) REFERENCES `sys_user` (`user_id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='量表权限表';

-- ----------------------------
-- 3、自定义问卷表
-- ----------------------------
DROP TABLE IF EXISTS `psy_questionnaire`;
CREATE TABLE `psy_questionnaire` (
  `questionnaire_id` bigint NOT NULL AUTO_INCREMENT COMMENT '问卷ID',
  `questionnaire_code` varchar(50) NOT NULL COMMENT '问卷编码',
  `questionnaire_name` varchar(100) NOT NULL COMMENT '问卷名称',
  `questionnaire_type` varchar(50) DEFAULT 'custom' COMMENT '问卷类型（custom自定义 exam考试 practice练习）',
  `paper_type` varchar(50) DEFAULT 'manual' COMMENT '组卷方式（manual手动 random随机 mixed混合）',
  `item_count` int DEFAULT 0 COMMENT '题目数量',
  `total_score` decimal(10,2) DEFAULT 0.00 COMMENT '总分',
  `pass_score` decimal(10,2) DEFAULT NULL COMMENT '及格分数',
  `estimated_time` int DEFAULT NULL COMMENT '预计完成时间（分钟）',
  `description` text COMMENT '问卷描述',
  `status` char(1) DEFAULT '0' COMMENT '状态（0正常 1停用）',
  `sort_order` int DEFAULT 0 COMMENT '排序顺序',
  `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`questionnaire_id`),
  UNIQUE KEY `uk_questionnaire_code` (`questionnaire_code`),
  KEY `idx_questionnaire_type` (`questionnaire_type`),
  KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='自定义问卷表';

-- ----------------------------
-- 4、问卷题目表（支持多种题型）
-- ----------------------------
DROP TABLE IF EXISTS `psy_questionnaire_item`;
CREATE TABLE `psy_questionnaire_item` (
  `item_id` bigint NOT NULL AUTO_INCREMENT COMMENT '题目ID',
  `questionnaire_id` bigint NOT NULL COMMENT '问卷ID',
  `item_number` int NOT NULL COMMENT '题目序号',
  `item_content` text NOT NULL COMMENT '题目内容',
  `item_type` varchar(20) NOT NULL COMMENT '题目类型（radio单选 checkbox多选 boolean判断 input填空 sort排序 calculate计算 text简答 textarea问答 essay作文）',
  `is_required` char(1) DEFAULT '1' COMMENT '是否必填（0否 1是）',
  `score` decimal(10,2) DEFAULT 0.00 COMMENT '题目分值',
  `sort_order` int DEFAULT 0 COMMENT '排序顺序',
  `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`item_id`),
  KEY `idx_questionnaire_id` (`questionnaire_id`),
  KEY `idx_item_number` (`questionnaire_id`, `item_number`),
  CONSTRAINT `fk_q_item_questionnaire` FOREIGN KEY (`questionnaire_id`) REFERENCES `psy_questionnaire` (`questionnaire_id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='问卷题目表';

-- ----------------------------
-- 5、问卷选项表
-- ----------------------------
DROP TABLE IF EXISTS `psy_questionnaire_option`;
CREATE TABLE `psy_questionnaire_option` (
  `option_id` bigint NOT NULL AUTO_INCREMENT COMMENT '选项ID',
  `item_id` bigint NOT NULL COMMENT '题目ID',
  `option_code` varchar(20) DEFAULT NULL COMMENT '选项编码（如A、B、C或1、2、3）',
  `option_content` varchar(500) NOT NULL COMMENT '选项内容',
  `option_score` decimal(10,2) DEFAULT 0.00 COMMENT '选项分值',
  `is_correct` char(1) DEFAULT '0' COMMENT '是否正确答案（0否 1是）',
  `sort_order` int DEFAULT 0 COMMENT '排序顺序',
  `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`option_id`),
  KEY `idx_item_id` (`item_id`),
  CONSTRAINT `fk_q_option_item` FOREIGN KEY (`item_id`) REFERENCES `psy_questionnaire_item` (`item_id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='问卷选项表';

-- ----------------------------
-- 6、问卷答题记录表
-- ----------------------------
DROP TABLE IF EXISTS `psy_questionnaire_answer`;
CREATE TABLE `psy_questionnaire_answer` (
  `answer_id` bigint NOT NULL AUTO_INCREMENT COMMENT '答案ID',
  `questionnaire_id` bigint NOT NULL COMMENT '问卷ID',
  `user_id` bigint DEFAULT NULL COMMENT '用户ID（关联sys_user）',
  `respondent_name` varchar(50) DEFAULT NULL COMMENT '答题人姓名',
  `start_time` datetime DEFAULT NULL COMMENT '开始时间',
  `submit_time` datetime DEFAULT NULL COMMENT '提交时间',
  `total_score` decimal(10,2) DEFAULT 0.00 COMMENT '总得分',
  `is_pass` char(1) DEFAULT '0' COMMENT '是否及格（0否 1是）',
  `rank` int DEFAULT NULL COMMENT '排名',
  `status` char(1) DEFAULT '0' COMMENT '状态（0进行中 1已完成 2已作废）',
  `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`answer_id`),
  KEY `idx_questionnaire_id` (`questionnaire_id`),
  KEY `idx_user_id` (`user_id`),
  KEY `idx_status` (`status`),
  CONSTRAINT `fk_q_answer_questionnaire` FOREIGN KEY (`questionnaire_id`) REFERENCES `psy_questionnaire` (`questionnaire_id`),
  CONSTRAINT `fk_q_answer_user` FOREIGN KEY (`user_id`) REFERENCES `sys_user` (`user_id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='问卷答题记录表';

-- ----------------------------
-- 7、语音读题配置表
-- ----------------------------
DROP TABLE IF EXISTS `psy_voice_config`;
CREATE TABLE `psy_voice_config` (
  `config_id` bigint NOT NULL AUTO_INCREMENT COMMENT '配置ID',
  `item_id` bigint DEFAULT NULL COMMENT '题目ID（为空表示全局配置）',
  `voice_type` varchar(50) DEFAULT 'tts' COMMENT '语音类型（tts合成 human真人录音）',
  `voice_url` varchar(500) DEFAULT NULL COMMENT '语音文件URL',
  `voice_provider` varchar(50) DEFAULT NULL COMMENT 'TTS提供商（aliyun tencent baidu local）',
  `voice_speed` decimal(3,2) DEFAULT 1.00 COMMENT '语速（0.5-2.0）',
  `voice_pitch` decimal(3,2) DEFAULT 1.00 COMMENT '音调（0.5-2.0）',
  `status` char(1) DEFAULT '0' COMMENT '状态（0正常 1停用）',
  `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`config_id`),
  KEY `idx_item_id` (`item_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='语音读题配置表';

-- ----------------------------
-- 8、危机预警表
-- ----------------------------
DROP TABLE IF EXISTS `psy_warning`;
CREATE TABLE `psy_warning` (
  `warning_id` bigint NOT NULL AUTO_INCREMENT COMMENT '预警ID',
  `assessment_id` bigint NOT NULL COMMENT '测评ID',
  `user_id` bigint DEFAULT NULL COMMENT '用户ID',
  `scale_id` bigint NOT NULL COMMENT '量表ID',
  `factor_id` bigint DEFAULT NULL COMMENT '因子ID（为空表示整体预警）',
  `warning_type` varchar(50) DEFAULT 'score' COMMENT '预警类型（score分数 risk风险）',
  `warning_level` varchar(50) DEFAULT 'medium' COMMENT '预警级别（low低 medium中 high高 critical严重）',
  `warning_score` decimal(10,2) DEFAULT NULL COMMENT '预警分值',
  `warning_reason` text COMMENT '预警原因',
  `status` char(1) DEFAULT '0' COMMENT '状态（0待处理 1处理中 2已解除 3已归档）',
  `handler_id` bigint DEFAULT NULL COMMENT '处理人ID',
  `handle_time` datetime DEFAULT NULL COMMENT '处理时间',
  `handle_result` text COMMENT '处理结果',
  `relief_time` datetime DEFAULT NULL COMMENT '解除时间',
  `relief_reason` text COMMENT '解除原因',
  `notification_sent` char(1) DEFAULT '0' COMMENT '是否已通知（0否 1是）',
  `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`warning_id`),
  KEY `idx_assessment_id` (`assessment_id`),
  KEY `idx_user_id` (`user_id`),
  KEY `idx_status` (`status`),
  KEY `idx_warning_level` (`warning_level`),
  CONSTRAINT `fk_warning_assessment` FOREIGN KEY (`assessment_id`) REFERENCES `psy_assessment` (`assessment_id`),
  CONSTRAINT `fk_warning_user` FOREIGN KEY (`user_id`) REFERENCES `sys_user` (`user_id`) ON DELETE SET NULL,
  CONSTRAINT `fk_warning_scale` FOREIGN KEY (`scale_id`) REFERENCES `psy_scale` (`scale_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='危机预警表';

-- ----------------------------
-- 9、预警规则配置表
-- ----------------------------
DROP TABLE IF EXISTS `psy_warning_rule`;
CREATE TABLE `psy_warning_rule` (
  `rule_id` bigint NOT NULL AUTO_INCREMENT COMMENT '规则ID',
  `scale_id` bigint NOT NULL COMMENT '量表ID',
  `factor_id` bigint DEFAULT NULL COMMENT '因子ID（为空表示整体规则）',
  `rule_name` varchar(100) NOT NULL COMMENT '规则名称',
  `warning_level` varchar(50) DEFAULT 'medium' COMMENT '预警级别',
  `score_min` decimal(10,2) DEFAULT NULL COMMENT '分值最小值',
  `score_max` decimal(10,2) DEFAULT NULL COMMENT '分值最大值',
  `percentile_min` decimal(5,2) DEFAULT NULL COMMENT '百分位最小值',
  `percentile_max` decimal(5,2) DEFAULT NULL COMMENT '百分位最大值',
  `auto_relief` char(1) DEFAULT '0' COMMENT '是否自动解除（0否 1是）',
  `relief_condition` text COMMENT '解除条件（JSON格式）',
  `status` char(1) DEFAULT '0' COMMENT '状态（0启用 1禁用）',
  `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`rule_id`),
  KEY `idx_scale_id` (`scale_id`),
  KEY `idx_factor_id` (`factor_id`),
  KEY `idx_status` (`status`),
  CONSTRAINT `fk_warning_rule_scale` FOREIGN KEY (`scale_id`) REFERENCES `psy_scale` (`scale_id`) ON DELETE CASCADE,
  CONSTRAINT `fk_warning_rule_factor` FOREIGN KEY (`factor_id`) REFERENCES `psy_factor` (`factor_id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='预警规则配置表';

-- ----------------------------
-- 10、二维码管理表
-- ----------------------------
DROP TABLE IF EXISTS `psy_qrcode`;
CREATE TABLE `psy_qrcode` (
  `qrcode_id` bigint NOT NULL AUTO_INCREMENT COMMENT '二维码ID',
  `qrcode_code` varchar(50) NOT NULL COMMENT '二维码编号',
  `qrcode_type` varchar(50) NOT NULL COMMENT '二维码类型（test测评 view_report查看报告 register注册 login登录）',
  `target_type` varchar(50) DEFAULT NULL COMMENT '目标类型（scale量表 assessment测评 report报告）',
  `target_id` bigint DEFAULT NULL COMMENT '目标ID',
  `short_url` varchar(200) DEFAULT NULL COMMENT '短链接',
  `qrcode_url` varchar(500) DEFAULT NULL COMMENT '二维码图片URL',
  `scan_count` int DEFAULT 0 COMMENT '扫码次数',
  `expire_time` datetime DEFAULT NULL COMMENT '过期时间',
  `status` char(1) DEFAULT '0' COMMENT '状态（0有效 1无效 2已过期）',
  `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`qrcode_id`),
  UNIQUE KEY `uk_qrcode_code` (`qrcode_code`),
  KEY `idx_qrcode_type` (`qrcode_type`),
  KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='二维码管理表';

-- ----------------------------
-- 11、二维码扫码记录表
-- ----------------------------
DROP TABLE IF EXISTS `psy_qrcode_log`;
CREATE TABLE `psy_qrcode_log` (
  `log_id` bigint NOT NULL AUTO_INCREMENT COMMENT '记录ID',
  `qrcode_id` bigint NOT NULL COMMENT '二维码ID',
  `user_id` bigint DEFAULT NULL COMMENT '扫码用户ID',
  `ip_address` varchar(128) DEFAULT '' COMMENT 'IP地址',
  `user_agent` varchar(500) DEFAULT NULL COMMENT '用户代理',
  `scan_time` datetime DEFAULT NULL COMMENT '扫码时间',
  PRIMARY KEY (`log_id`),
  KEY `idx_qrcode_id` (`qrcode_id`),
  KEY `idx_scan_time` (`scan_time`),
  CONSTRAINT `fk_qrcode_log_qrcode` FOREIGN KEY (`qrcode_id`) REFERENCES `psy_qrcode` (`qrcode_id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='二维码扫码记录表';

-- ----------------------------
-- 12、数据备份表
-- ----------------------------
DROP TABLE IF EXISTS `sys_backup`;
CREATE TABLE `sys_backup` (
  `backup_id` bigint NOT NULL AUTO_INCREMENT COMMENT '备份ID',
  `backup_name` varchar(200) NOT NULL COMMENT '备份名称',
  `backup_type` varchar(50) DEFAULT 'full' COMMENT '备份类型（full全量 incremental增量）',
  `backup_path` varchar(500) NOT NULL COMMENT '备份路径',
  `file_size` bigint DEFAULT NULL COMMENT '文件大小（字节）',
  `backup_status` char(1) DEFAULT '0' COMMENT '备份状态（0备份中 1成功 2失败）',
  `backup_time` datetime DEFAULT NULL COMMENT '备份时间',
  `backup_duration` int DEFAULT NULL COMMENT '备份耗时（秒）',
  `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`backup_id`),
  KEY `idx_backup_time` (`backup_time`),
  KEY `idx_backup_status` (`backup_status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='数据备份表';

-- ----------------------------
-- 13、心理网站内容表
-- ----------------------------
DROP TABLE IF EXISTS `psy_website_content`;
CREATE TABLE `psy_website_content` (
  `content_id` bigint NOT NULL AUTO_INCREMENT COMMENT '内容ID',
  `content_type` varchar(50) NOT NULL COMMENT '内容类型（article文章 notice公告 banner横幅 link链接）',
  `category_id` bigint DEFAULT NULL COMMENT '分类ID',
  `title` varchar(200) NOT NULL COMMENT '标题',
  `subtitle` varchar(200) DEFAULT NULL COMMENT '副标题',
  `summary` varchar(500) DEFAULT NULL COMMENT '摘要',
  `content` longtext COMMENT '正文内容',
  `cover_image` varchar(500) DEFAULT NULL COMMENT '封面图片',
  `author` varchar(100) DEFAULT NULL COMMENT '作者',
  `source` varchar(200) DEFAULT NULL COMMENT '来源',
  `click_count` int DEFAULT 0 COMMENT '点击量',
  `like_count` int DEFAULT 0 COMMENT '点赞数',
  `is_top` char(1) DEFAULT '0' COMMENT '是否置顶（0否 1是）',
  `is_recommend` char(1) DEFAULT '0' COMMENT '是否推荐（0否 1是）',
  `publish_time` datetime DEFAULT NULL COMMENT '发布时间',
  `sort_order` int DEFAULT 0 COMMENT '排序顺序',
  `status` char(1) DEFAULT '0' COMMENT '状态（0草稿 1已发布 2已下架）',
  `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`content_id`),
  KEY `idx_content_type` (`content_type`),
  KEY `idx_status` (`status`),
  KEY `idx_publish_time` (`publish_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='心理网站内容表';

-- ----------------------------
-- 14、心理网站配置表
-- ----------------------------
DROP TABLE IF EXISTS `psy_website_config`;
CREATE TABLE `psy_website_config` (
  `config_id` bigint NOT NULL AUTO_INCREMENT COMMENT '配置ID',
  `config_key` varchar(100) NOT NULL COMMENT '配置键',
  `config_value` text COMMENT '配置值',
  `config_type` varchar(50) DEFAULT 'text' COMMENT '配置类型（text文本 number数字 jsonJSON image图片）',
  `config_description` varchar(500) DEFAULT NULL COMMENT '配置描述',
  `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`config_id`),
  UNIQUE KEY `uk_config_key` (`config_key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='心理网站配置表';

-- ----------------------------
-- 15、开放式API配置表
-- ----------------------------
DROP TABLE IF EXISTS `sys_api_config`;
CREATE TABLE `sys_api_config` (
  `config_id` bigint NOT NULL AUTO_INCREMENT COMMENT '配置ID',
  `api_name` varchar(100) NOT NULL COMMENT 'API名称',
  `api_key` varchar(64) NOT NULL COMMENT 'API密钥',
  `api_secret` varchar(64) DEFAULT NULL COMMENT 'API密文',
  `client_id` varchar(100) DEFAULT NULL COMMENT '客户端ID',
  `allowed_ips` varchar(1000) DEFAULT NULL COMMENT '允许的IP地址（多个用逗号分隔）',
  `rate_limit` int DEFAULT 100 COMMENT '限流（每分钟请求数）',
  `status` char(1) DEFAULT '0' COMMENT '状态（0启用 1禁用）',
  `expire_time` datetime DEFAULT NULL COMMENT '过期时间',
  `last_use_time` datetime DEFAULT NULL COMMENT '最后使用时间',
  `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`config_id`),
  UNIQUE KEY `uk_api_key` (`api_key`),
  KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='开放式API配置表';

-- ----------------------------
-- 16、API调用日志表
-- ----------------------------
DROP TABLE IF EXISTS `sys_api_log`;
CREATE TABLE `sys_api_log` (
  `log_id` bigint NOT NULL AUTO_INCREMENT COMMENT '日志ID',
  `api_key` varchar(64) NOT NULL COMMENT 'API密钥',
  `api_path` varchar(200) NOT NULL COMMENT 'API路径',
  `request_method` varchar(20) DEFAULT NULL COMMENT '请求方法',
  `request_params` text COMMENT '请求参数',
  `response_code` varchar(10) DEFAULT NULL COMMENT '响应码',
  `response_time` int DEFAULT NULL COMMENT '响应时间（毫秒）',
  `ip_address` varchar(128) DEFAULT '' COMMENT 'IP地址',
  `user_agent` varchar(500) DEFAULT NULL COMMENT '用户代理',
  `create_time` datetime DEFAULT NULL COMMENT '调用时间',
  PRIMARY KEY (`log_id`),
  KEY `idx_api_key` (`api_key`),
  KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='API调用日志表';

-- ----------------------------
-- 初始化扩展数据字典
-- ----------------------------

-- 档案类型字典
INSERT INTO `sys_dict_type` (`dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `remark`) 
VALUES ('档案类型', 'psy_profile_type', '0', 'admin', NOW(), '用户档案类型列表');

INSERT INTO `sys_dict_data` (`dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `remark`) 
VALUES (1, '标准档案', 'standard', 'psy_profile_type', '', 'primary', 'Y', '0', 'admin', NOW(), '标准档案'),
       (2, '儿童档案', 'child', 'psy_profile_type', '', 'success', 'N', '0', 'admin', NOW(), '儿童档案'),
       (3, '成人档案', 'adult', 'psy_profile_type', '', 'info', 'N', '0', 'admin', NOW(), '成人档案'),
       (4, '老年档案', 'senior', 'psy_profile_type', '', 'warning', 'N', '0', 'admin', NOW(), '老年档案');

-- 问卷类型字典
INSERT INTO `sys_dict_type` (`dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `remark`) 
VALUES ('问卷类型', 'psy_questionnaire_type', '0', 'admin', NOW(), '自定义问卷类型');

INSERT INTO `sys_dict_data` (`dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `remark`) 
VALUES (1, '自定义', 'custom', 'psy_questionnaire_type', '', 'primary', 'Y', '0', 'admin', NOW(), '自定义问卷'),
       (2, '考试', 'exam', 'psy_questionnaire_type', '', 'warning', 'N', '0', 'admin', NOW(), '考试问卷'),
       (3, '练习', 'practice', 'psy_questionnaire_type', '', 'success', 'N', '0', 'admin', NOW(), '练习问卷');

-- 组卷方式字典
INSERT INTO `sys_dict_type` (`dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `remark`) 
VALUES ('组卷方式', 'psy_paper_type', '0', 'admin', NOW(), '问卷组卷方式');

INSERT INTO `sys_dict_data` (`dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `remark`) 
VALUES (1, '手动', 'manual', 'psy_paper_type', '', 'primary', 'Y', '0', 'admin', NOW(), '手动组卷'),
       (2, '随机', 'random', 'psy_paper_type', '', 'success', 'N', '0', 'admin', NOW(), '随机组卷'),
       (3, '混合', 'mixed', 'psy_paper_type', '', 'info', 'N', '0', 'admin', NOW(), '手动+随机');

-- 扩展题目类型字典
INSERT INTO `sys_dict_data` (`dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `remark`) 
VALUES (4, '判断题', 'boolean', 'psy_item_type', '', 'info', 'N', '0', 'admin', NOW(), '判断题'),
       (5, '填空题', 'input', 'psy_item_type', '', 'warning', 'N', '0', 'admin', NOW(), '填空题'),
       (6, '排序题', 'sort', 'psy_item_type', '', 'info', 'N', '0', 'admin', NOW(), '排序题'),
       (7, '计算题', 'calculate', 'psy_item_type', '', 'warning', 'N', '0', 'admin', NOW(), '计算题'),
       (8, '简答题', 'text', 'psy_item_type', '', 'info', 'N', '0', 'admin', NOW(), '简答题'),
       (9, '问答题', 'textarea', 'psy_item_type', '', 'warning', 'N', '0', 'admin', NOW(), '问答题'),
       (10, '作文题', 'essay', 'psy_item_type', '', 'success', 'N', '0', 'admin', NOW(), '作文题');

-- 预警级别字典
INSERT INTO `sys_dict_type` (`dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `remark`) 
VALUES ('预警级别', 'psy_warning_level', '0', 'admin', NOW(), '危机预警级别');

INSERT INTO `sys_dict_data` (`dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `remark`) 
VALUES (1, '低', 'low', 'psy_warning_level', '', 'info', 'N', '0', 'admin', NOW(), '低风险'),
       (2, '中', 'medium', 'psy_warning_level', '', 'warning', 'Y', '0', 'admin', NOW(), '中风险'),
       (3, '高', 'high', 'psy_warning_level', '', 'danger', 'N', '0', 'admin', NOW(), '高风险'),
       (4, '严重', 'critical', 'psy_warning_level', '', 'danger', 'N', '0', 'admin', NOW(), '严重风险');

-- 预警状态字典
INSERT INTO `sys_dict_type` (`dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `remark`) 
VALUES ('预警状态', 'psy_warning_status', '0', 'admin', NOW(), '危机预警状态');

INSERT INTO `sys_dict_data` (`dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `remark`) 
VALUES (1, '待处理', '0', 'psy_warning_status', '', 'warning', 'Y', '0', 'admin', NOW(), '待处理'),
       (2, '处理中', '1', 'psy_warning_status', '', 'info', 'N', '0', 'admin', NOW(), '处理中'),
       (3, '已解除', '2', 'psy_warning_status', '', 'success', 'N', '0', 'admin', NOW(), '已解除'),
       (4, '已归档', '3', 'psy_warning_status', '', 'default', 'N', '0', 'admin', NOW(), '已归档');

-- 二维码类型字典
INSERT INTO `sys_dict_type` (`dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `remark`) 
VALUES ('二维码类型', 'psy_qrcode_type', '0', 'admin', NOW(), '二维码类型列表');

INSERT INTO `sys_dict_data` (`dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `remark`) 
VALUES (1, '测评', 'test', 'psy_qrcode_type', '', 'primary', 'Y', '0', 'admin', NOW(), '扫码测评'),
       (2, '查看报告', 'view_report', 'psy_qrcode_type', '', 'success', 'N', '0', 'admin', NOW(), '扫码查看报告'),
       (3, '注册', 'register', 'psy_qrcode_type', '', 'info', 'N', '0', 'admin', NOW(), '扫码注册'),
       (4, '登录', 'login', 'psy_qrcode_type', '', 'warning', 'N', '0', 'admin', NOW(), '扫码登录');

-- 备份类型字典
INSERT INTO `sys_dict_type` (`dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `remark`) 
VALUES ('备份类型', 'sys_backup_type', '0', 'admin', NOW(), '数据备份类型');

INSERT INTO `sys_dict_data` (`dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `remark`) 
VALUES (1, '全量备份', 'full', 'sys_backup_type', '', 'primary', 'Y', '0', 'admin', NOW(), '全量备份'),
       (2, '增量备份', 'incremental', 'sys_backup_type', '', 'success', 'N', '0', 'admin', NOW(), '增量备份');

-- 网站内容类型字典
INSERT INTO `sys_dict_type` (`dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `remark`) 
VALUES ('网站内容类型', 'psy_content_type', '0', 'admin', NOW(), '心理网站内容类型');

INSERT INTO `sys_dict_data` (`dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `remark`) 
VALUES (1, '文章', 'article', 'psy_content_type', '', 'primary', 'Y', '0', 'admin', NOW(), '文章内容'),
       (2, '公告', 'notice', 'psy_content_type', '', 'warning', 'N', '0', 'admin', NOW(), '公告内容'),
       (3, '横幅', 'banner', 'psy_content_type', '', 'info', 'N', '0', 'admin', NOW(), '横幅图片'),
       (4, '链接', 'link', 'psy_content_type', '', 'success', 'N', '0', 'admin', NOW(), '外链内容');

SET FOREIGN_KEY_CHECKS = 1;

