-- ============================================================ -- 第九联盟AI坐席辅助系统 - 数据库初始化脚本 -- MySQL 5.7适配版 -- ============================================================ -- 创建数据库 CREATE DATABASE IF NOT EXISTS `ai_assistant` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; USE `ai_assistant`; -- ============================================================ -- 企微会话存档消息表 (archive_messages) -- ============================================================ CREATE TABLE IF NOT EXISTS `archive_messages` ( `id` BIGINT(20) PRIMARY KEY AUTO_INCREMENT COMMENT '自增主键', `msgid` VARCHAR(255) NOT NULL COMMENT '企微消息唯一ID', `seq` BIGINT(20) NOT NULL COMMENT '存档序列号,用于增量拉取', `corp_id` VARCHAR(64) NOT NULL COMMENT '企业ID', `action` VARCHAR(32) DEFAULT 'send' COMMENT 'send/recall/agree/disagree', `from_user` VARCHAR(128) NOT NULL COMMENT '发送者userid', `from_role` VARCHAR(32) NOT NULL COMMENT '发送者角色: INTERNAL-企业内部成员 EXTERNAL-外部联系人 SYSTEM-系统', `to_user` VARCHAR(128) COMMENT '接收者userid(单聊)', `tolist` TEXT COMMENT '接收者列表(群聊),JSON数组字符串', `roomid` VARCHAR(255) COMMENT '群聊ID(群聊时有值)', `msgtype` VARCHAR(64) NOT NULL COMMENT 'text/image/voice/video/file/link/location/weapp/chatrecord/voip', `msgtime` BIGINT(20) NOT NULL COMMENT '消息发送时间,UTC毫秒时间戳', `content` LONGTEXT COMMENT '文本消息内容(长文本使用LONGTEXT)', `media_data` TEXT COMMENT '媒体消息元数据(sdkfileid/文件大小/时长等),JSON字符串', `session_id` VARCHAR(128) COMMENT '关联的会话ID(业务生成)', `decrypt_status` TINYINT DEFAULT 1 COMMENT '解密状态: 1成功 2失败', `decrypt_error` VARCHAR(512) COMMENT '解密失败原因', `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', UNIQUE KEY `uk_msgid_corp` (`msgid`, `corp_id`) COMMENT '消息ID+企业ID唯一', INDEX `idx_seq` (`seq`) COMMENT '序列号索引,用于增量拉取', INDEX `idx_session_id` (`session_id`) COMMENT '会话ID索引', INDEX `idx_from_user_msgtime` (`from_user`, `msgtime`) COMMENT '发送者+时间索引', INDEX `idx_to_user_msgtime` (`to_user`, `msgtime`) COMMENT '接收者+时间索引', INDEX `idx_roomid_msgtime` (`roomid`, `msgtime`) COMMENT '群聊ID+时间索引', INDEX `idx_msgtime` (`msgtime`) COMMENT '消息时间索引', INDEX `idx_corp_msgtype` (`corp_id`, `msgtype`, `msgtime`) COMMENT '企业+消息类型+时间' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='企微会话存档消息表'; -- ============================================================ -- 会话表 (conversations) -- ============================================================ CREATE TABLE IF NOT EXISTS `conversations` ( `id` BIGINT(20) PRIMARY KEY AUTO_INCREMENT COMMENT '自增主键', `session_id` VARCHAR(128) NOT NULL COMMENT '会话唯一ID(业务生成)', `corp_id` VARCHAR(64) NOT NULL COMMENT '企业ID', `customer_id` VARCHAR(128) NOT NULL COMMENT '学员(外部联系人)userid', `customer_name` VARCHAR(64) COMMENT '学员昵称', `staff_id` VARCHAR(128) NOT NULL COMMENT '坐席(企业成员)userid', `staff_name` VARCHAR(64) COMMENT '坐席姓名', `room_id` VARCHAR(128) COMMENT '群聊ID(群聊时有值)', `status` VARCHAR(32) DEFAULT 'ACTIVE' COMMENT '会话状态: ACTIVE-活跃 IDLE-空闲 CLOSED-关闭 ARCHIVED-归档', `current_stage` VARCHAR(32) DEFAULT '开场白' COMMENT '当前对话阶段', `stage_confidence` DECIMAL(4,3) DEFAULT 0.000 COMMENT '阶段判断置信度', `round_count` INT(11) DEFAULT 0 COMMENT '对话轮次', `intent_count` INT(11) DEFAULT 0 COMMENT '意图识别次数', `last_msg_id` VARCHAR(255) COMMENT '最后一条消息ID', `last_msg_time` TIMESTAMP NULL COMMENT '最后消息时间', `last_msg_content` VARCHAR(512) COMMENT '最后消息内容摘要', `start_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '会话开始时间', `end_time` TIMESTAMP NULL COMMENT '会话结束时间', `idle_duration` INT(11) DEFAULT 0 COMMENT '空闲时长(分钟)', `context_summary` TEXT COMMENT '对话摘要(LLM生成)', `key_events` TEXT COMMENT '关键事件列表,JSON字符串', `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', UNIQUE KEY `uk_session_id` (`session_id`) COMMENT '会话ID唯一', INDEX `idx_corp_staff` (`corp_id`, `staff_id`, `status`) COMMENT '企业+坐席+状态', INDEX `idx_corp_customer` (`corp_id`, `customer_id`, `status`) COMMENT '企业+学员+状态', INDEX `idx_status_time` (`status`, `last_msg_time`) COMMENT '状态+时间', INDEX `idx_created_at` (`created_at`) COMMENT '创建时间索引' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='会话表'; -- ============================================================ -- 对话轮次表 (conversation_turns) -- ============================================================ CREATE TABLE IF NOT EXISTS `conversation_turns` ( `id` BIGINT(20) PRIMARY KEY AUTO_INCREMENT COMMENT '自增主键', `turn_id` VARCHAR(128) NOT NULL COMMENT '轮次ID', `session_id` VARCHAR(128) NOT NULL COMMENT '会话ID', `turn_number` INT(11) NOT NULL COMMENT '轮次序号', `student_msg_id` VARCHAR(255) COMMENT '学员消息ID', `student_content` TEXT COMMENT '学员消息内容', `seat_msg_id` VARCHAR(255) COMMENT '坐席回复消息ID', `seat_content` TEXT COMMENT '坐席回复内容', `turn_type` VARCHAR(32) DEFAULT 'QUERY' COMMENT '轮次类型: OPEN-开场 QUERY-咨询 OBJECTION-异议 INTEREST-意向 SILENCE-沉默 FOLLOWUP-跟进 CLOSE-收尾', `primary_intent` VARCHAR(32) COMMENT '主意图编码', `intent_confidence` DECIMAL(4,3) COMMENT '意图置信度', `student_emotion` VARCHAR(32) DEFAULT 'NEUTRAL' COMMENT '学员情绪: POSITIVE-积极 NEUTRAL-中性 NEGATIVE-消极 ANXIOUS-焦虑 EXCITED-兴奋', `key_topics` TEXT COMMENT '涉及主题列表,JSON字符串', `slot_changes` TEXT COMMENT '槽位变化,JSON字符串', `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', UNIQUE KEY `uk_turn_id` (`turn_id`) COMMENT '轮次ID唯一', INDEX `idx_session_turn` (`session_id`, `turn_number`) COMMENT '会话+轮次号', INDEX `idx_session_time` (`session_id`, `created_at`) COMMENT '会话+时间' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='对话轮次表'; -- ============================================================ -- 意图分类表 (intent_categories) -- ============================================================ CREATE TABLE IF NOT EXISTS `intent_categories` ( `id` BIGINT(20) PRIMARY KEY AUTO_INCREMENT COMMENT '自增主键', `code` VARCHAR(32) NOT NULL COMMENT '意图编码,如INT-COURSE-01', `name` VARCHAR(64) NOT NULL COMMENT '意图名称', `domain` VARCHAR(32) NOT NULL COMMENT '所属领域', `description` VARCHAR(256) COMMENT '意图说明', `priority` VARCHAR(8) DEFAULT 'P2' COMMENT '优先级: P1-高 P2-中 P3-低', `trigger_keywords` TEXT COMMENT '触发关键词列表,JSON数组字符串', `sample_expressions` TEXT COMMENT '典型表达示例,JSON数组字符串', `status` TINYINT DEFAULT 1 COMMENT '状态: 1启用 0停用', `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', UNIQUE KEY `uk_code` (`code`) COMMENT '意图编码唯一', INDEX `idx_domain_priority` (`domain`, `priority`) COMMENT '领域+优先级' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='意图分类表'; -- ============================================================ -- 意图识别记录表 (intent_recognitions) -- ============================================================ CREATE TABLE IF NOT EXISTS `intent_recognitions` ( `id` BIGINT(20) PRIMARY KEY AUTO_INCREMENT COMMENT '自增主键', `session_id` VARCHAR(128) NOT NULL COMMENT '会话ID', `turn_id` VARCHAR(128) COMMENT '轮次ID', `msg_id` VARCHAR(255) NOT NULL COMMENT '消息ID', `customer_id` VARCHAR(128) NOT NULL COMMENT '学员ID', `staff_id` VARCHAR(128) NOT NULL COMMENT '坐席ID', `message_content` TEXT COMMENT '消息内容摘要', `primary_intent_code` VARCHAR(32) NOT NULL COMMENT '主意图编码', `primary_intent_confidence` DECIMAL(4,3) COMMENT '主意图置信度', `secondary_intents` TEXT COMMENT '辅意图列表,JSON字符串', `sentiment` VARCHAR(32) DEFAULT 'NEUTRAL' COMMENT '情感: POSITIVE-积极 NEUTRAL-中性 NEGATIVE-消极', `sentiment_confidence` DECIMAL(4,3) COMMENT '情感置信度', `recognition_method` VARCHAR(32) DEFAULT 'HYBRID' COMMENT '识别方法: RULE-规则 LLM-大模型 HYBRID-混合', `llm_model` VARCHAR(64) COMMENT '使用的LLM模型', `prompt_tokens` INT(11) COMMENT 'Prompt Token数', `completion_tokens` INT(11) COMMENT 'Completion Token数', `elapsed_ms` INT(11) COMMENT '识别耗时(毫秒)', `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', INDEX `idx_session_msg` (`session_id`, `msg_id`) COMMENT '会话+消息', INDEX `idx_customer_time` (`customer_id`, `created_at`) COMMENT '学员+时间', INDEX `idx_intent_code` (`primary_intent_code`, `created_at`) COMMENT '意图编码+时间' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='意图识别记录表'; -- ============================================================ -- 学员画像表 (customer_profiles) -- ============================================================ CREATE TABLE IF NOT EXISTS `customer_profiles` ( `id` BIGINT(20) PRIMARY KEY AUTO_INCREMENT COMMENT '自增主键', `customer_id` VARCHAR(128) NOT NULL COMMENT '学员userid', `corp_id` VARCHAR(64) NOT NULL COMMENT '企业ID', `student_type` VARCHAR(32) COMMENT '学员类型: 在校大学生/转行人员/在职提升/高中毕业生/家长代询', `student_type_confidence` DECIMAL(4,3) COMMENT '学员类型置信度', `skill_level` VARCHAR(32) COMMENT '基础水平: 零基础/有美术基础/相关专业/有从业经验', `skill_level_confidence` DECIMAL(4,3) COMMENT '基础水平置信度', `intent_level` VARCHAR(16) DEFAULT '低' COMMENT '意向度等级: 高/中/低/无意向', `intent_score` DECIMAL(6,2) DEFAULT 0.00 COMMENT '意向度分数', `concern_focus` VARCHAR(32) COMMENT '关注重点: 价格敏感型/就业导向型/师资看重型/时间灵活型/品牌信任型', `concern_focus_confidence` DECIMAL(4,3) COMMENT '关注重点置信度', `decision_stage` VARCHAR(32) DEFAULT '信息了解' COMMENT '决策阶段: 信息了解/方案比较/购买决策/报名成交', `decision_stage_confidence` DECIMAL(4,3) COMMENT '决策阶段置信度', `interested_courses` TEXT COMMENT '意向课程列表,JSON字符串', `budget_hint` VARCHAR(64) COMMENT '预算暗示', `preferred_city` VARCHAR(32) COMMENT '意向城市', `age` INT(11) COMMENT '年龄', `education` VARCHAR(32) COMMENT '学历', `current_occupation` VARCHAR(64) COMMENT '当前职业', `slot_data` TEXT COMMENT '完整槽位数据,JSON字符串', `conversation_count` INT(11) DEFAULT 0 COMMENT '对话次数', `last_conversation_time` TIMESTAMP NULL COMMENT '上次对话时间', `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', UNIQUE KEY `uk_customer_corp` (`customer_id`, `corp_id`) COMMENT '学员+企业唯一', INDEX `idx_intent_score` (`intent_score`) COMMENT '意向度分数索引', INDEX `idx_decision_stage` (`decision_stage`) COMMENT '决策阶段索引' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='学员画像表'; -- ============================================================ -- 话术库表 (utterances) -- ============================================================ CREATE TABLE IF NOT EXISTS `utterances` ( `id` BIGINT(20) PRIMARY KEY AUTO_INCREMENT COMMENT '自增主键', `utterance_id` VARCHAR(64) NOT NULL COMMENT '话术唯一ID(业务编码)', `corp_id` VARCHAR(64) NOT NULL COMMENT '企业ID', `title` VARCHAR(128) NOT NULL COMMENT '话术标题', `content` TEXT NOT NULL COMMENT '话术内容(富文本)', `content_text` TEXT COMMENT '纯文本内容(用于全文检索)', `version` INT(11) DEFAULT 1 COMMENT '版本号', `status` VARCHAR(32) DEFAULT 'DRAFT' COMMENT '状态: DRAFT-草稿 ACTIVE-启用 INACTIVE-停用 DEPRECATED-废弃', `priority` INT(11) DEFAULT 5 COMMENT '优先级(1-10,越小越优先)', `stage_tags` TEXT COMMENT '适用阶段标签,JSON数组字符串', `intent_tags` TEXT COMMENT '匹配意图标签,JSON数组字符串', `profile_tags` TEXT COMMENT '适用画像标签,JSON数组字符串', `course_type_tags` TEXT COMMENT '适用课程标签,JSON数组字符串', `emotion_tags` TEXT COMMENT '情感标签,JSON数组字符串', `topic_tags` TEXT COMMENT '主题标签,JSON数组字符串', `used_count` INT(11) DEFAULT 0 COMMENT '使用次数', `selected_count` INT(11) DEFAULT 0 COMMENT '选中次数', `positive_feedback` INT(11) DEFAULT 0 COMMENT '正面反馈数', `negative_feedback` INT(11) DEFAULT 0 COMMENT '负面反馈数', `conversion_count` INT(11) DEFAULT 0 COMMENT '转化次数', `success_rate` DECIMAL(5,4) DEFAULT 0.0000 COMMENT '成功率(0-1)', `avg_response_time_ms` INT(11) COMMENT '平均响应时间(毫秒)', `has_vector` TINYINT DEFAULT 0 COMMENT '是否已生成向量: 0否 1是', `vector_updated_at` TIMESTAMP NULL COMMENT '向量更新时间', `trigger_keywords` TEXT COMMENT '触发关键词,JSON字符串', `variables` TEXT COMMENT '变量定义,JSON字符串', `created_by` VARCHAR(64) COMMENT '创建人', `reviewed_by` VARCHAR(64) COMMENT '审核人', `source` VARCHAR(32) DEFAULT 'MANUAL' COMMENT '来源: MANUAL-人工录入 IMPORTED-导入 LLM_GENERATED-AI生成', `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', UNIQUE KEY `uk_utterance_id` (`utterance_id`) COMMENT '话术ID唯一', INDEX `idx_corp_status` (`corp_id`, `status`) COMMENT '企业+状态', INDEX `idx_success_rate` (`success_rate`) COMMENT '成功率索引', INDEX `idx_used_count` (`used_count`) COMMENT '使用次数索引', FULLTEXT KEY `ft_content` (`content_text`) COMMENT '全文检索索引' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='话术库表'; -- ============================================================ -- 话术分类表 (utterance_categories) -- ============================================================ CREATE TABLE IF NOT EXISTS `utterance_categories` ( `id` BIGINT(20) PRIMARY KEY AUTO_INCREMENT COMMENT '自增主键', `code` VARCHAR(32) NOT NULL COMMENT '分类编码', `name` VARCHAR(64) NOT NULL COMMENT '分类名称', `parent_code` VARCHAR(32) DEFAULT 'ROOT' COMMENT '父级编码', `sort_order` INT(11) DEFAULT 0 COMMENT '排序号', `color` VARCHAR(16) DEFAULT '#1890ff' COMMENT '显示颜色', `description` VARCHAR(256) COMMENT '分类说明', `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', UNIQUE KEY `uk_code` (`code`) COMMENT '分类编码唯一' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='话术分类表'; -- ============================================================ -- 话术效果表 (utterance_performance) -- ============================================================ CREATE TABLE IF NOT EXISTS `utterance_performance` ( `id` BIGINT(20) PRIMARY KEY AUTO_INCREMENT COMMENT '自增主键', `utterance_id` VARCHAR(64) NOT NULL COMMENT '话术ID', `corp_id` VARCHAR(64) NOT NULL COMMENT '企业ID', `hour_window` VARCHAR(13) NOT NULL COMMENT '时间窗口,格式: 2025-01-15-14', `show_count` INT(11) DEFAULT 0 COMMENT '展示次数', `click_count` INT(11) DEFAULT 0 COMMENT '点击次数', `send_count` INT(11) DEFAULT 0 COMMENT '发送次数', `positive_count` INT(11) DEFAULT 0 COMMENT '正面反馈数', `negative_count` INT(11) DEFAULT 0 COMMENT '负面反馈数', `ignore_count` INT(11) DEFAULT 0 COMMENT '忽略次数', `conversion_count` INT(11) DEFAULT 0 COMMENT '转化次数', `ctr` DECIMAL(5,4) COMMENT '点击率', `conversion_rate` DECIMAL(5,4) COMMENT '转化率', `score` DECIMAL(6,4) COMMENT '综合评分(EWA算法)', `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', UNIQUE KEY `uk_utterance_hour` (`utterance_id`, `hour_window`) COMMENT '话术+时间窗口唯一', INDEX `idx_corp_hour` (`corp_id`, `hour_window`) COMMENT '企业+时间窗口' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='话术效果表'; -- ============================================================ -- 推荐记录表 (recommendations) -- ============================================================ CREATE TABLE IF NOT EXISTS `recommendations` ( `id` BIGINT(20) PRIMARY KEY AUTO_INCREMENT COMMENT '自增主键', `recommendation_id` VARCHAR(128) NOT NULL COMMENT '推荐记录ID', `session_id` VARCHAR(128) NOT NULL COMMENT '会话ID', `turn_id` VARCHAR(128) COMMENT '轮次ID', `customer_id` VARCHAR(128) NOT NULL COMMENT '学员ID', `staff_id` VARCHAR(128) NOT NULL COMMENT '坐席ID', `corp_id` VARCHAR(64) NOT NULL COMMENT '企业ID', `primary_intent` VARCHAR(32) COMMENT '主意图编码', `secondary_intents` TEXT COMMENT '辅意图列表,JSON字符串', `student_type` VARCHAR(32) COMMENT '学员类型', `current_stage` VARCHAR(32) COMMENT '当前阶段', `student_message` VARCHAR(512) COMMENT '学员消息', `recommended_count` INT(11) DEFAULT 0 COMMENT '推荐条数', `recall_sources` TEXT COMMENT '召回来源统计,JSON字符串', `generation_mode` VARCHAR(32) DEFAULT 'KB_ONLY' COMMENT '生成模式: KB_ONLY-话术库 KB_LLM_MIX-混合 LLM_ONLY-纯AI', `elapsed_ms` INT(11) COMMENT '推荐耗时(毫秒)', `staff_action` VARCHAR(32) DEFAULT 'NOT_SEEN' COMMENT '坐席操作: SENT-发送 EDITED-编辑后发送 IGNORED-忽略 NOT_SEEN-未查看', `feedback` VARCHAR(32) DEFAULT 'NONE' COMMENT '反馈: POSITIVE-正面 NEGATIVE-负面 NONE-无', `feedback_reason` VARCHAR(128) COMMENT '反馈原因', `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `action_time` TIMESTAMP NULL COMMENT '操作时间', UNIQUE KEY `uk_rec_id` (`recommendation_id`) COMMENT '推荐ID唯一', INDEX `idx_session` (`session_id`, `created_at`) COMMENT '会话+时间', INDEX `idx_staff` (`staff_id`, `created_at`) COMMENT '坐席+时间', INDEX `idx_intent` (`primary_intent`, `created_at`) COMMENT '意图+时间' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='推荐记录表'; -- ============================================================ -- 知识库文档表 (knowledge_documents) -- ============================================================ CREATE TABLE IF NOT EXISTS `knowledge_documents` ( `id` BIGINT(20) PRIMARY KEY AUTO_INCREMENT COMMENT '自增主键', `doc_id` VARCHAR(64) NOT NULL COMMENT '文档唯一ID', `corp_id` VARCHAR(64) NOT NULL COMMENT '企业ID', `title` VARCHAR(256) NOT NULL COMMENT '文档标题', `content` LONGTEXT COMMENT '文档内容', `content_text` LONGTEXT COMMENT '纯文本内容(用于全文检索)', `doc_type` VARCHAR(32) DEFAULT 'KNOWLEDGE' COMMENT '文档类型: KNOWLEDGE-知识 UTTERANCE-话术 FAQ-常见问题', `category` VARCHAR(64) COMMENT '分类', `tags` TEXT COMMENT '标签,JSON数组字符串', `status` VARCHAR(32) DEFAULT 'ACTIVE' COMMENT '状态: ACTIVE-启用 INACTIVE-停用', `has_vector` TINYINT DEFAULT 0 COMMENT '是否已生成向量', `vector_updated_at` TIMESTAMP NULL COMMENT '向量更新时间', `created_by` VARCHAR(64) COMMENT '创建人', `updated_by` VARCHAR(64) COMMENT '更新人', `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', UNIQUE KEY `uk_doc_id` (`doc_id`) COMMENT '文档ID唯一', INDEX `idx_corp_type` (`corp_id`, `doc_type`, `status`) COMMENT '企业+类型+状态', FULLTEXT KEY `ft_content` (`content_text`) COMMENT '全文检索' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='知识库文档表'; -- ============================================================ -- 员工表 (staffs) -- ============================================================ CREATE TABLE IF NOT EXISTS `staffs` ( `id` BIGINT(20) PRIMARY KEY AUTO_INCREMENT COMMENT '自增主键', `staff_id` VARCHAR(128) NOT NULL COMMENT '企微用户ID', `corp_id` VARCHAR(64) NOT NULL COMMENT '企业ID', `name` VARCHAR(64) COMMENT '姓名', `avatar` VARCHAR(512) COMMENT '头像URL', `department` VARCHAR(128) COMMENT '部门', `role` VARCHAR(32) DEFAULT 'ADVISOR' COMMENT '角色: ADMIN-管理员 SUPERVISOR-主管 ADVISOR-顾问', `status` VARCHAR(32) DEFAULT 'ACTIVE' COMMENT '状态: ACTIVE-在职 INACTIVE-离职', `push_settings` TEXT COMMENT '推送设置,JSON字符串', `last_login_time` TIMESTAMP NULL COMMENT '最后登录时间', `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', UNIQUE KEY `uk_staff_corp` (`staff_id`, `corp_id`) COMMENT '员工+企业唯一', INDEX `idx_corp_role` (`corp_id`, `role`) COMMENT '企业+角色' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='员工表'; -- ============================================================ -- 客户表 (customers) -- ============================================================ CREATE TABLE IF NOT EXISTS `customers` ( `id` BIGINT(20) PRIMARY KEY AUTO_INCREMENT COMMENT '自增主键', `customer_id` VARCHAR(128) NOT NULL COMMENT '外部联系人userid', `corp_id` VARCHAR(64) NOT NULL COMMENT '企业ID', `name` VARCHAR(64) COMMENT '姓名/昵称', `avatar` VARCHAR(512) COMMENT '头像URL', `type` VARCHAR(32) DEFAULT 'UNKNOWN' COMMENT '客户类型: UNKNOWN-未知 INDIVIDUAL-个人 PARENT-家长 ENTERPRISE-企业', `gender` VARCHAR(8) COMMENT '性别: MALE-男 FEMALE-女', `phone` VARCHAR(32) COMMENT '手机号', `unionid` VARCHAR(128) COMMENT '微信unionid', `add_time` TIMESTAMP NULL COMMENT '添加时间', `status` VARCHAR(32) DEFAULT 'ACTIVE' COMMENT '状态: ACTIVE-正常 BLOCKED-拉黑 DELETED-删除', `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', UNIQUE KEY `uk_customer_corp` (`customer_id`, `corp_id`) COMMENT '客户+企业唯一', INDEX `idx_corp_status` (`corp_id`, `status`) COMMENT '企业+状态' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='客户表'; -- ============================================================ -- 管理员表 (admins) -- ============================================================ CREATE TABLE IF NOT EXISTS `admins` ( `id` BIGINT(20) PRIMARY KEY AUTO_INCREMENT COMMENT '自增主键', `username` VARCHAR(64) NOT NULL COMMENT '用户名', `password` VARCHAR(256) NOT NULL COMMENT '密码(BCrypt加密)', `name` VARCHAR(64) COMMENT '姓名', `email` VARCHAR(128) COMMENT '邮箱', `phone` VARCHAR(32) COMMENT '手机号', `role` VARCHAR(32) DEFAULT 'ADMIN' COMMENT '角色: SUPER_ADMIN-超级管理员 ADMIN-管理员 OPERATOR-运营', `status` VARCHAR(32) DEFAULT 'ACTIVE' COMMENT '状态: ACTIVE-启用 DISABLED-停用', `last_login_time` TIMESTAMP NULL COMMENT '最后登录时间', `last_login_ip` VARCHAR(64) COMMENT '最后登录IP', `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', UNIQUE KEY `uk_username` (`username`) COMMENT '用户名唯一' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='管理员表'; -- ============================================================ -- 操作日志表 (operation_logs) -- ============================================================ CREATE TABLE IF NOT EXISTS `operation_logs` ( `id` BIGINT(20) PRIMARY KEY AUTO_INCREMENT COMMENT '自增主键', `operator_id` VARCHAR(64) NOT NULL COMMENT '操作人ID', `operator_name` VARCHAR(64) COMMENT '操作人姓名', `operator_type` VARCHAR(32) DEFAULT 'STAFF' COMMENT '操作人类型: STAFF-员工 ADMIN-管理员', `module` VARCHAR(64) COMMENT '操作模块', `action` VARCHAR(64) COMMENT '操作动作', `description` TEXT COMMENT '操作描述', `request_params` TEXT COMMENT '请求参数', `response_result` TEXT COMMENT '响应结果', `ip` VARCHAR(64) COMMENT '操作IP', `user_agent` VARCHAR(512) COMMENT 'User-Agent', `status` TINYINT DEFAULT 1 COMMENT '状态: 1成功 0失败', `elapsed_ms` INT(11) COMMENT '耗时(毫秒)', `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', INDEX `idx_operator` (`operator_id`, `created_at`) COMMENT '操作人+时间', INDEX `idx_module` (`module`, `action`, `created_at`) COMMENT '模块+动作+时间', INDEX `idx_created_at` (`created_at`) COMMENT '创建时间索引' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='操作日志表'; -- ============================================================ -- 初始化数据 -- ============================================================ -- 40个意图分类 INSERT INTO `intent_categories` (`code`, `name`, `domain`, `description`, `priority`, `trigger_keywords`, `sample_expressions`, `status`) VALUES ('INT-COURSE-01', '课程内容咨询', '课程相关', '询问具体学什么内容', 'P1', '["学什么","课程","内容","教什么","学什么软件"]', '["你们的课程具体学什么内容?","课程都教哪些软件?","能说一下课程体系吗?"]', 1), ('INT-COURSE-02', '课程选择建议', '课程相关', '不知道该选哪个方向', 'P1', '["选哪个","推荐","适合我","怎么选","方向"]', '["我应该学3D建模还是原画?","哪个方向好就业?","您能帮我推荐一下吗?"]', 1), ('INT-COURSE-03', '课程大纲索要', '课程相关', '想看详细课程安排', 'P1', '["大纲","课程表","安排","详细","阶段"]', '["能发一下课程大纲吗?","具体是怎么安排的?","每个阶段学什么?"]', 1), ('INT-COURSE-04', '试听预约咨询', '课程相关', '想试听或体验课程', 'P1', '["试听","体验","免费","公开课","试学"]', '["有免费试听吗?","怎么预约试听课?","可以体验一下吗?"]', 1), ('INT-COURSE-05', '课程更新迭代', '课程相关', '担心课程内容过时', 'P2', '["更新","过时","新版","跟上","行业"]', '["课程内容会更新吗?","跟得上行业吗?","用的是最新技术吗?"]', 1), ('INT-COURSE-06', '线上vs线下选择', '课程相关', '不知道选哪种学习方式', 'P1', '["线上","线下","面授","直播","网课","区别"]', '["线上和线下有什么区别?","线上课程效果好吗?","可以线上学习吗?"]', 1), ('INT-COURSE-07', '课程难度询问', '课程相关', '担心零基础能否学会', 'P1', '["零基础","能学会吗","难吗","没有基础","小白","能不能学会"]', '["零基础能学会吗?","我没有美术基础可以学吗?","课程难度大不大?"]', 1), ('INT-COURSE-08', '学习周期询问', '课程相关', '想知道学多久', 'P2', '["多久","多长时间","几个月","学多久","周期"]', '["课程要学多久?","多长时间能学会?","几个月可以学完?"]', 1), ('INT-PRICE-01', '学费价格询问', '价格相关', '直接问学费多少', 'P1', '["多少钱","学费","价格","费用","收费","怎么收费"]', '["学费多少钱?","课程怎么收费?","一共多少钱?"]', 1), ('INT-PRICE-02', '优惠活动询问', '价格相关', '想知道有没有优惠', 'P1', '["优惠","活动","打折","减免","便宜","特价"]', '["现在有优惠活动吗?","能便宜点吗?","有没有折扣?"]', 1), ('INT-PRICE-03', '分期付款咨询', '价格相关', '关心付款方式', 'P2', '["分期","贷款","月付","首付","月供","花呗"]', '["可以分期付款吗?","有贷款方案吗?","月供多少?"]', 1), ('INT-PRICE-04', '退费政策询问', '价格相关', '关心退费保障', 'P2', '["退费","退款","退钱","学不好退","保障"]', '["学不好可以退费吗?","退费流程是怎样的?","有保障吗?"]', 1), ('INT-PRICE-05', '性价比比较', '价格相关', '和别家比较', 'P2', '["对比","比较","别家","其他机构","性价比","划算"]', '["你们的课程和XX比怎么样?","为什么价格比别人高?","性价比高吗?"]', 1), ('INT-JOB-01', '就业方向咨询', '就业相关', '学完能做什么', 'P1', '["就业","工作","岗位","方向","做什么"]', '["学完能去哪些公司工作?","就业方向有哪些?","能做什么岗位?"]', 1), ('INT-JOB-02', '薪资水平询问', '就业相关', '关心工资待遇', 'P1', '["工资","薪资","月薪","收入","待遇","多少钱一个月"]', '["毕业后工资能拿多少?","行业薪资水平怎么样?","能挣多少?"]', 1), ('INT-JOB-03', '就业率询问', '就业相关', '关心能否找到工作', 'P1', '["就业率","找到工作","保证","推荐","找工作"]', '["就业率高吗?","能保证就业吗?","好找工作吗?"]', 1), ('INT-JOB-04', '就业服务了解', '就业相关', '了解就业推荐服务', 'P2', '["就业服务","推荐","怎么找工作","帮找工作"]', '["你们怎么帮学员找工作?","有就业推荐吗?","就业服务包含什么?"]', 1), ('INT-JOB-05', '合作企业询问', '就业相关', '想知道合作企业', 'P2', '["合作企业","大厂","腾讯","米哈游","网易","公司"]', '["合作企业有哪些?","有米哈游/腾讯这样的公司吗?","就业单位有哪些?"]', 1), ('INT-JOB-06', '作品集指导', '就业相关', '关心作品质量', 'P2', '["作品集","作品","项目","Demo","案例"]', '["学完能做出作品集吗?","作品质量怎么样?","能参与项目吗?"]', 1), ('INT-JOB-07', '实习机会咨询', '就业相关', '想参与真实项目', 'P3', '["实习","真实项目","实训","参与项目","实战"]', '["有实习机会吗?","可以参与真实项目吗?","有企业实训吗?"]', 1), ('INT-TEACH-01', '师资背景询问', '师资相关', '想知道老师是谁', 'P2', '["老师","师资","讲师","谁教的","教学经验"]', '["老师是什么背景?","老师有项目经验吗?","谁来讲课?"]', 1), ('INT-TEACH-02', '教学模式了解', '师资相关', '想知道怎么上课', 'P2', '["怎么上课","教学方式","班型","一对一","多少人"]', '["是怎么上课的?","一个班多少人?","教学模式是怎样的?"]', 1), ('INT-TEACH-03', '课后答疑服务', '师资相关', '关心课后辅导', 'P2', '["答疑","辅导","课后","问问题","指导"]', '["课后有问题可以问老师吗?","答疑及时吗?","有课后辅导吗?"]', 1), ('INT-TEACH-04', '师生比例询问', '师资相关', '关心教学质量', 'P3', '["一个老师","带多少学生","比例","师生"]', '["一个老师带多少学生?","能照顾到每个人吗?","班级多大?"]', 1), ('INT-TEACH-05', '学习效果保障', '师资相关', '担心学不会怎么办', 'P2', '["学不会","怎么办","重修","保障","跟不上"]', '["学不会怎么办?","怎么保证学习效果?","跟不上怎么办?"]', 1), ('INT-BASIC-01', '学历要求咨询', '基础条件', '学历是否够', 'P2', '["学历","要求","高中","大专","本科"]', '["需要什么学历?","高中生可以学吗?","学历要求高吗?"]', 1), ('INT-BASIC-02', '年龄限制询问', '基础条件', '年龄是否合适', 'P2', '["年龄","多大","几岁","限制","30岁"]', '["有没有年龄限制?","30岁了还能学吗?","年龄大能学会吗?"]', 1), ('INT-BASIC-03', '零基础入学', '基础条件', '零基础可行性', 'P1', '["零基础","没有基础","小白","完全不会","从来没"]', '["我没有美术基础可以学吗?","零基础能学会吗?","完全没接触过可以学吗?"]', 1), ('INT-BASIC-04', '证书颁发询问', '基础条件', '学完发什么证书', 'P3', '["证书","毕业证","结业证","证明","认证"]', '["学完发证书吗?","证书有用吗?","有毕业证吗?"]', 1), ('INT-LOC-01', '校区地址询问', '校区相关', '想知道校区在哪', 'P2', '["校区","地址","在哪","位置","交通"]', '["校区在哪里?","附近有地铁吗?","具体地址是什么?"]', 1), ('INT-LOC-02', '校区参观预约', '校区相关', '想去参观', 'P2', '["参观","看看","实地考察","走访","预约"]', '["可以参观校区吗?","怎么预约参观?","能去看看吗?"]', 1), ('INT-LOC-03', '教学设备了解', '校区相关', '关心硬件条件', 'P3', '["设备","电脑","配置","硬件","机房"]', '["需要自备电脑吗?","校区提供设备吗?","电脑配置怎么样?"]', 1), ('INT-LOC-04', '住宿安排咨询', '校区相关', '外地学员住宿', 'P3', '["住宿","宿舍","外地","住哪","租房"]', '["外地学员有住宿吗?","住宿怎么安排?","有宿舍吗?"]', 1), ('INT-QUAL-01', '机构正规性', '机构资质', '是否正规机构', 'P2', '["正规","资质","办学","合法","备案"]', '["你们是正规机构吗?","有办学资质吗?","是国家认可的吗?"]', 1), ('INT-QUAL-02', '口碑评价询问', '机构资质', '想看学员评价', 'P3', '["评价","口碑","反馈","怎么样","好吗"]', '["学员评价怎么样?","有老学员反馈吗?","口碑如何?"]', 1), ('INT-QUAL-03', '媒体报道了解', '机构资质', '想看权威背书', 'P3', '["报道","媒体","电视","新闻","央视"]', '["有上过电视报道吗?","媒体报道过吗?","央视那个是真的吗?"]', 1), ('INT-OTHER-01', '大师课咨询', '其他', '进阶课程', 'P3', '["大师课","研修班","进阶","艺术家","高级"]', '["大师课和普通课什么区别?","研修班怎么报名?","大师课学费多少?"]', 1), ('INT-OTHER-02', '企业培训定制', '其他', 'B端需求', 'P3', '["企业培训","定制","公司","团队","B端"]', '["有企业定制培训吗?","公司团队能报名吗?","企业内训怎么合作?"]', 1), ('INT-OTHER-03', '比赛活动咨询', '其他', 'GGAC等赛事', 'P3', '["比赛","GGAC","大赛","活动","赛事"]', '["GGAC比赛怎么参加?","有比赛推荐吗?","学员能参加大赛吗?"]', 1), ('INT-OTHER-04', '转班转学咨询', '其他', '变更需求', 'P3', '["转班","换方向","转学","调整","换校区"]', '["可以换课程方向吗?","可以换校区吗?","转班怎么办理?"]', 1); -- 8个话术分类(销售阶段) INSERT INTO `utterance_categories` (`code`, `name`, `parent_code`, `sort_order`, `color`, `description`) VALUES ('STAGE-01', '开场白', 'ROOT', 1, '#52c41a', '首次接待学员/家长,建立信任,收集基础信息'), ('STAGE-02', '需求探询', 'ROOT', 2, '#1890ff', '了解学员背景和目标,精准画像,挖掘需求'), ('STAGE-03', '课程推荐', 'ROOT', 3, '#fa8c16', '匹配适合的课程方向,精准推荐1-2个方向'), ('STAGE-04', '价值塑造', 'ROOT', 4, '#722ed1', '强调优势和差异化,建立价值认同'), ('STAGE-05', '报价沟通', 'ROOT', 5, '#eb2f96', '价格说明和方案,化解价格顾虑'), ('STAGE-06', '异议处理', 'ROOT', 6, '#f5222d', '应对各类顾虑,消除障碍,建立信心'), ('STAGE-07', '促成报名', 'ROOT', 7, '#faad14', '推动转化成交,促成立即行动'), ('STAGE-08', '跟进维护', 'ROOT', 8, '#13c2c2', '未成交学员跟进,保持联系,等待时机'); -- 系统管理员(密码: admin123) INSERT INTO `admins` (`username`, `password`, `name`, `email`, `role`, `status`, `created_at`) VALUES ('admin', '$2a$10$N.zmdr9k7uOCQb376NoUnuTJ8iAt6Z5EHsM8lE9lBOsl7iOE1Qh6G', '系统管理员', 'admin@9artedu.com', 'SUPER_ADMIN', 'ACTIVE', NOW());