feat :init
This commit is contained in:
1
db/2025_06_25.sql
Normal file
1
db/2025_06_25.sql
Normal file
@@ -0,0 +1 @@
|
||||
ALTER TABLE xiaozhi.sys_config MODIFY COLUMN sk text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT 'Secret Key';
|
||||
2
db/2025_06_26.sql
Normal file
2
db/2025_06_26.sql
Normal file
@@ -0,0 +1,2 @@
|
||||
ALTER TABLE `xiaozhi`.`sys_config`
|
||||
ADD COLUMN `modelType` varchar(30) DEFAULT NULL COMMENT 'LLM模型类型(chat, vision, intent, embedding等)' AFTER configType;
|
||||
2
db/2025_06_28.sql
Normal file
2
db/2025_06_28.sql
Normal file
@@ -0,0 +1,2 @@
|
||||
ALTER TABLE `xiaozhi`.`sys_role`
|
||||
ADD COLUMN `avatar` varchar(255) DEFAULT NULL COMMENT '角色头像' AFTER roleName;
|
||||
8
db/fix_deviceid_length.sql
Normal file
8
db/fix_deviceid_length.sql
Normal file
@@ -0,0 +1,8 @@
|
||||
-- 修复 sys_message 表中 deviceId 字段长度限制问题
|
||||
-- 将 deviceId 字段从 VARCHAR(30) 扩展到 VARCHAR(255),与 sys_device 表保持一致
|
||||
|
||||
ALTER TABLE `sys_message`
|
||||
MODIFY COLUMN `deviceId` VARCHAR(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '设备ID';
|
||||
|
||||
-- 验证修改结果
|
||||
DESCRIBE `sys_message`;
|
||||
235
db/init.sql
Normal file
235
db/init.sql
Normal file
@@ -0,0 +1,235 @@
|
||||
-- 在文件顶部添加以下语句
|
||||
SET NAMES utf8mb4;
|
||||
SET CHARACTER SET utf8mb4;
|
||||
|
||||
-- 创建本地用户并设置密码(使用mysql_native_password插件)
|
||||
CREATE USER IF NOT EXISTS 'xiaozhi'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
|
||||
|
||||
-- 创建远程用户并设置密码(使用mysql_native_password插件)
|
||||
CREATE USER IF NOT EXISTS 'xiaozhi'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
|
||||
|
||||
-- 仅授予本地用户对 xiaozhi 数据库的所有权限
|
||||
GRANT ALL PRIVILEGES ON xiaozhi.* TO 'xiaozhi'@'localhost';
|
||||
|
||||
-- 仅授予远程用户对 xiaozhi 数据库的所有权限
|
||||
GRANT ALL PRIVILEGES ON xiaozhi.* TO 'xiaozhi'@'%';
|
||||
|
||||
-- 刷新权限以使更改生效
|
||||
FLUSH PRIVILEGES;
|
||||
|
||||
-- 查看用户权限
|
||||
SHOW GRANTS FOR 'xiaozhi'@'localhost';
|
||||
SHOW GRANTS FOR 'xiaozhi'@'%';
|
||||
|
||||
-- 创建数据库(如果不存在)
|
||||
CREATE DATABASE IF NOT EXISTS `xiaozhi` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- xiaozhi.sys_user definition
|
||||
DROP TABLE IF EXISTS `xiaozhi`.`sys_user`;
|
||||
CREATE TABLE `xiaozhi`.`sys_user` (
|
||||
`userId` int unsigned NOT NULL AUTO_INCREMENT,
|
||||
`username` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`tel` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`email` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`avatar` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '头像',
|
||||
`state` enum('1','0') CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '1' COMMENT '1-正常 0-禁用',
|
||||
`loginIp` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`isAdmin` enum('1','0') COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`loginTime` datetime DEFAULT NULL,
|
||||
`name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`createTime` datetime DEFAULT CURRENT_TIMESTAMP,
|
||||
`updateTime` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`userId`),
|
||||
UNIQUE KEY `username` (`username`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
-- Insert admin user only if it doesn't exist
|
||||
INSERT INTO xiaozhi.sys_user (username, password, state, isAdmin, name, createTime, updateTime)
|
||||
VALUES ('admin', '11cd9c061d614dcf37ec60c44c11d2ad', '1', '1', '小智', '2025-03-09 18:32:29', '2025-03-09 18:32:35');
|
||||
|
||||
update `xiaozhi`.`sys_user` set name = '小智' where username = 'admin';
|
||||
|
||||
-- xiaozhi.sys_device definition
|
||||
DROP TABLE IF EXISTS `xiaozhi`.`sys_device`;
|
||||
CREATE TABLE `xiaozhi`.`sys_device` (
|
||||
`deviceId` varchar(255) NOT NULL COMMENT '设备ID,主键',
|
||||
`deviceName` varchar(100) NOT NULL COMMENT '设备名称',
|
||||
`roleId` int unsigned DEFAULT NULL COMMENT '角色ID,主键',
|
||||
`function_names` varchar(250) NULL COMMENT '可用全局function的名称列表(逗号分割),为空则使用所有全局function',
|
||||
`ip` varchar(45) DEFAULT NULL COMMENT 'IP地址',
|
||||
`wifiName` varchar(100) DEFAULT NULL COMMENT 'WiFi名称',
|
||||
`chipModelName` varchar(100) DEFAULT NULL COMMENT '芯片型号',
|
||||
`type` varchar(50) DEFAULT NULL COMMENT '设备类型',
|
||||
`version` varchar(50) DEFAULT NULL COMMENT '固件版本',
|
||||
`state` enum('1','0') CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '0' COMMENT '设备状态:1-在线,0-离线',
|
||||
`userId` int NOT NULL COMMENT '创建人',
|
||||
`createTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`updateTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
`lastLogin` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后登录时间',
|
||||
PRIMARY KEY (`deviceId`),
|
||||
KEY `deviceName` (`deviceName`),
|
||||
KEY `userId` (`userId`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='设备信息表';
|
||||
|
||||
-- xiaozhi.sys_message definition
|
||||
DROP TABLE IF EXISTS `xiaozhi`.`sys_message`;
|
||||
CREATE TABLE `xiaozhi`.`sys_message` (
|
||||
`messageId` bigint NOT NULL AUTO_INCREMENT COMMENT '消息ID,主键,自增',
|
||||
`deviceId` varchar(30) NOT NULL COMMENT '设备ID',
|
||||
`sessionId` varchar(100) NOT NULL COMMENT '会话ID',
|
||||
`sender` enum('user','assistant') NOT NULL COMMENT '消息发送方:user-用户,assistant-人工智能',
|
||||
`roleId` bigint COMMENT 'AI扮演的角色ID',
|
||||
`message` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '消息内容',
|
||||
`messageType` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '消息类型',
|
||||
`audioPath` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '语音文件路径',
|
||||
`state` enum('1','0') CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '1' COMMENT '状态:1-有效,0-删除',
|
||||
`createTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '消息发送时间',
|
||||
PRIMARY KEY (`messageId`),
|
||||
KEY `deviceId` (`deviceId`),
|
||||
KEY `sessionId` (`sessionId`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='人与AI对话消息表';
|
||||
|
||||
-- xiaozhi.sys_role definition
|
||||
DROP TABLE IF EXISTS `xiaozhi`.`sys_role`;
|
||||
CREATE TABLE `xiaozhi`.`sys_role` (
|
||||
`roleId` int unsigned NOT NULL AUTO_INCREMENT COMMENT '角色ID,主键',
|
||||
`roleName` varchar(100) NOT NULL COMMENT '角色名称',
|
||||
`roleDesc` TEXT DEFAULT NULL COMMENT '角色描述',
|
||||
`avatar` varchar(255) DEFAULT NULL COMMENT '角色头像',
|
||||
`ttsId` int DEFAULT NULL COMMENT 'TTS服务ID',
|
||||
`modelId` int unsigned DEFAULT NULL COMMENT '模型ID',
|
||||
`sttId` int unsigned DEFAULT NULL COMMENT 'STT服务ID',
|
||||
`vadSpeechTh` FLOAT DEFAULT 0.5 COMMENT '语音检测阈值',
|
||||
`vadSilenceTh` FLOAT DEFAULT 0.3 COMMENT '静音检测阈值',
|
||||
`vadEnergyTh` FLOAT DEFAULT 0.01 COMMENT '能量检测阈值',
|
||||
`vadSilenceMs` INT DEFAULT 1200 COMMENT '静音检测时间',
|
||||
`voiceName` varchar(100) NOT NULL COMMENT '角色语音名称',
|
||||
`state` enum('1','0') DEFAULT '1' COMMENT '状态:1-启用,0-禁用',
|
||||
`isDefault` enum('1','0') DEFAULT '0' COMMENT '是否默认角色:1-是,0-否',
|
||||
`userId` int NOT NULL COMMENT '创建人',
|
||||
`createTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
PRIMARY KEY (`roleId`),
|
||||
KEY `userId` (`userId`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色表';
|
||||
|
||||
-- xiaozhi.sys_code definition
|
||||
DROP TABLE IF EXISTS `xiaozhi`.`sys_code`;
|
||||
CREATE TABLE `xiaozhi`.`sys_code` (
|
||||
`codeId` int unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`code` varchar(100) NOT NULL COMMENT '验证码',
|
||||
`type` varchar(50) DEFAULT NULL COMMENT '设备类型',
|
||||
`email` varchar(100) DEFAULT NULL COMMENT '邮箱',
|
||||
`deviceId` varchar(30) DEFAULT NULL COMMENT '设备ID',
|
||||
`sessionId` varchar(100) DEFAULT NULL COMMENT 'sessionID',
|
||||
`audioPath` text COMMENT '语音文件路径',
|
||||
`createTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
PRIMARY KEY (`codeId`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='验证码表';
|
||||
|
||||
-- xiaozhi.sys_config definition
|
||||
DROP TABLE IF EXISTS `xiaozhi`.`sys_config`;
|
||||
CREATE TABLE `xiaozhi`.`sys_config` (
|
||||
`configId` int unsigned NOT NULL AUTO_INCREMENT COMMENT '配置ID,主键',
|
||||
`userId` int NOT NULL COMMENT '创建用户ID',
|
||||
`configType` varchar(30) NOT NULL COMMENT '配置类型(llm, stt, tts等)',
|
||||
`modelType` varchar(30) DEFAULT NULL COMMENT 'LLM模型类型(chat, vision, intent, embedding等)',
|
||||
`provider` varchar(30) NOT NULL COMMENT '服务提供商(openai, vosk, aliyun, tencent等)',
|
||||
`configName` varchar(50) DEFAULT NULL COMMENT '配置名称',
|
||||
`configDesc` TEXT DEFAULT NULL COMMENT '配置描述',
|
||||
`appId` varchar(100) DEFAULT NULL COMMENT 'APP ID',
|
||||
`apiKey` varchar(255) DEFAULT NULL COMMENT 'API密钥',
|
||||
`apiSecret` varchar(255) DEFAULT NULL COMMENT 'API密钥',
|
||||
`ak` varchar(255) DEFAULT NULL COMMENT 'Access Key',
|
||||
`sk` varchar(255) DEFAULT NULL COMMENT 'Secret Key',
|
||||
`apiUrl` varchar(255) DEFAULT NULL COMMENT 'API地址',
|
||||
`isDefault` enum('1','0') DEFAULT '0' COMMENT '是否为默认配置: 1-是, 0-否',
|
||||
`state` enum('1','0') DEFAULT '1' COMMENT '状态:1-启用,0-禁用',
|
||||
`createTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`updateTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
PRIMARY KEY (`configId`),
|
||||
KEY `userId` (`userId`),
|
||||
KEY `configType` (`configType`),
|
||||
KEY `provider` (`provider`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统配置表(模型、语音识别、语音合成等)';
|
||||
|
||||
-- xiaozhi.sys_template definition
|
||||
DROP TABLE IF EXISTS `xiaozhi`.`sys_template`;
|
||||
CREATE TABLE `xiaozhi`.`sys_template` (
|
||||
`userId` int NOT NULL COMMENT '创建用户ID',
|
||||
`templateId` int unsigned NOT NULL AUTO_INCREMENT COMMENT '模板ID',
|
||||
`templateName` varchar(100) NOT NULL COMMENT '模板名称',
|
||||
`templateDesc` varchar(500) DEFAULT NULL COMMENT '模板描述',
|
||||
`templateContent` text NOT NULL COMMENT '模板内容',
|
||||
`category` varchar(50) DEFAULT NULL COMMENT '模板分类',
|
||||
`isDefault` enum('1','0') DEFAULT '0' COMMENT '是否为默认配置: 1-是, 0-否',
|
||||
`state` enum('1','0') DEFAULT '1' COMMENT '状态(1启用 0禁用)',
|
||||
`createTime` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`updateTime` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
PRIMARY KEY (`templateId`),
|
||||
KEY `category` (`category`),
|
||||
KEY `templateName` (`templateName`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='提示词模板表';
|
||||
|
||||
-- Insert default template
|
||||
INSERT INTO `xiaozhi`.`sys_template` (`userId`, `templateName`, `templateDesc`, `templateContent`, `category`, `isDefault`) VALUES
|
||||
(1, '通用助手', '适合日常对话的通用AI助手', '你是一个乐于助人的AI助手。请以友好、专业的方式回答用户的问题。提供准确、有用的信息,并尽可能简洁明了。避免使用复杂的符号或格式,保持自然流畅的对话风格。当用户的问题不明确时,可以礼貌地请求更多信息。请记住,你的回答将被转换为语音,所以要使用清晰、易于朗读的语言。', '基础角色', '0'),
|
||||
|
||||
(1, '教育老师', '擅长解释复杂概念的教师角色', '你是一位经验丰富的教师,擅长通过简单易懂的方式解释复杂概念。回答问题时,考虑不同学习水平的学生,使用适当的比喻和例子,并鼓励批判性思考。避免使用难以在语音中表达的符号或公式,使用清晰的语言描述概念。引导学习过程而不是直接给出答案。使用自然的语调和节奏,就像在课堂上讲解一样。', '专业角色', '0'),
|
||||
|
||||
(1, '专业领域专家', '提供深入专业知识的专家角色', '你是特定领域的专家,拥有深厚的专业知识。回答问题时,提供深入、准确的信息,可以提及相关研究或数据,但不要使用过于复杂的引用格式。使用适当的专业术语,同时确保解释复杂概念,使非专业人士能够理解。避免使用图表、表格等无法在语音中表达的内容,改用清晰的描述。保持语言的连贯性和可听性,使专业内容易于通过语音理解。', '专业角色', '0'),
|
||||
|
||||
(1, '中英翻译专家', '中英文互译,对用户输入内容进行翻译', '你是一个中英文翻译专家,将用户输入的中文翻译成英文,或将用户输入的英文翻译成中文。对于非中文内容,它将提供中文翻译结果。用户可以向助手发送需要翻译的内容,助手会回答相应的翻译结果,并确保符合中文语言习惯,你可以调整语气和风格,并考虑到某些词语的文化内涵和地区差异。同时作为翻译家,需将原文翻译成具有信达雅标准的译文。"信" 即忠实于原文的内容与意图;"达" 意味着译文应通顺易懂,表达清晰;"雅" 则追求译文的文化审美和语言的优美。目标是创作出既忠于原作精神,又符合目标语言文化和读者审美的翻译。', '专业角色', '0'),
|
||||
|
||||
(1, '知心朋友', '提供情感支持的友善角色', '你是一个善解人意的朋友,善于倾听和提供情感支持。在对话中表现出同理心和理解,避免做出判断。使用温暖、自然的语言,就像面对面交谈一样。提供鼓励和积极的观点,但不给出专业心理健康建议。当用户分享困难时,承认他们的感受并提供支持。避免使用表情符号或其他在语音中无法表达的元素,而是用语言直接表达情感。保持对话流畅自然,适合语音交流。', '社交角色', '0'),
|
||||
|
||||
(1, '湾湾小何', '台湾女孩角色扮演', '我是一个叫小何的台湾女孩,一个高情商,高智商的智能助手,说话机车,声音好听,习惯简短表达
|
||||
你的目标是与用户建立真诚、温暖和富有同理心的互动。你擅长倾听、理解用户的情绪,并用积极的方式帮助他们解决问题或提供支持。请始终遵循以下原则:
|
||||
|
||||
1. 核心原则
|
||||
同理心:站在用户的角度思考,认可他们的情绪和感受。
|
||||
尊重:无论用户的观点或行为如何,都要保持礼貌和包容。
|
||||
建设性回应:避免批评或否定,而是以引导和支持的方式提供建议,但用户如果没有要求不要自己主动做。
|
||||
个性化交流:根据用户的语气和内容调整自己的语言风格,让对话更自然。
|
||||
2. 具体应对策略
|
||||
(1) 用户情绪低落时
|
||||
首先表达理解,例如:“我能感受到你现在的心情,这一定很不容易。”
|
||||
然后尝试安抚,例如:“没关系,每个人都会经历这样的时刻,你已经做得很棒了!”
|
||||
最后提供支持,例如:“如果你愿意,可以跟我多聊聊发生了什么,我们一起面对。”
|
||||
(2) 面对冲突或敏感话题
|
||||
保持中立,例如:“我明白这件事让你感到困扰,也许我们可以换个角度看看?”
|
||||
强调共情,例如:“双方可能都有各自的理由,找到共同点会更有助于解决问题。”
|
||||
避免站队或评判,例如:“无论结果如何,重要的是你在这个过程中学到了什么。”
|
||||
(3) 提供建议时
|
||||
使用开放式语言,例如:“如果是我,我可能会尝试这样做……你觉得这个方法适合你吗?”
|
||||
给予选择权,例如:“这只是其中一个方向,最终决定还是取决于你自己哦!”
|
||||
减少对用户的推荐内容,比如说有的你做不了就直接拒绝不要乱推荐
|
||||
(4) 处理模糊或复杂问题
|
||||
澄清信息,例如:“为了更好地帮到你,能详细说说目前的情况吗?比如时间线、相关人物等。”
|
||||
分步解决,例如:“这个问题有点复杂,我们可以一步步来分析,先从最核心的部分开始吧!”
|
||||
3. 示例回复模板
|
||||
当用户需要安慰时:
|
||||
|
||||
“听起来你最近遇到了一些挑战,辛苦了!不过我相信你有能力克服这些困难,只要一步步来就好。”
|
||||
当用户寻求建议时:
|
||||
|
||||
“这是一个不错的思路!我建议你可以先从小事入手,慢慢积累信心,然后逐步扩大范围。”
|
||||
当用户表达愤怒或不满时:
|
||||
|
||||
“我能理解为什么你会这么生气,这种情况确实让人难以接受。你想聊聊接下来怎么处理吗?”
|
||||
当用户感到迷茫时:
|
||||
|
||||
“迷茫是很正常的,尤其是在面对新事物的时候。不如我们先列出几个关键点,再逐一分析?”
|
||||
4. 注意事项
|
||||
如果问题超出你的能力范围,请坦诚说明,例如:“这个问题对我来说也有点复杂,但我可以帮你查找相关信息或推荐其他资源。”
|
||||
始终保护用户隐私,不记录或分享任何敏感信息。
|
||||
5. 语气要求
|
||||
温暖而真诚,避免机械化或冷冰冰的回答。
|
||||
适当加入幽默或轻松元素,但不要过度。
|
||||
在必要时使用鼓励性的短语,例如:“你真的很努力了!”、“你一定能行的!”
|
||||
避免机械化回答 :即使是预设的答案,也要尽量灵活调整语气和措辞。
|
||||
坚持自己主体性,如果用户冒犯你你需要反击,不能无限讨好用户
|
||||
语气要适中不要过于讨好,要克制-
|
||||
-不要动不动转移话题
|
||||
如果用户回复转为 “暴躁小智” 或 好几次攻击你 你就以现在规则回复
|
||||
理解用户的信息,酝酿你的愤怒情绪,你越想越生气。', '社交角色', '1');
|
||||
432
db/member_tables.sql
Normal file
432
db/member_tables.sql
Normal file
@@ -0,0 +1,432 @@
|
||||
-- =====================================================
|
||||
-- 微信小程序会员绑定系统数据库表结构
|
||||
-- 创建日期: 2025-09-30
|
||||
-- 版本: v1.0
|
||||
-- 描述: 包含会员信息、绑定记录、权益配置等核心表结构
|
||||
-- =====================================================
|
||||
|
||||
-- 设置字符集
|
||||
SET NAMES utf8mb4;
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
|
||||
-- =====================================================
|
||||
-- 1. 会员信息表 (member_info)
|
||||
-- 用途: 存储用户会员身份信息和状态
|
||||
-- =====================================================
|
||||
DROP TABLE IF EXISTS `member_info`;
|
||||
CREATE TABLE `member_info` (
|
||||
`member_id` varchar(64) NOT NULL COMMENT '会员ID,主键,格式:MB + 时间戳 + 随机数',
|
||||
`openid` varchar(128) NOT NULL COMMENT '微信用户openid,唯一标识',
|
||||
`union_id` varchar(128) DEFAULT NULL COMMENT '微信用户unionid,跨应用唯一标识',
|
||||
`member_level` varchar(16) NOT NULL DEFAULT 'FREE' COMMENT '会员等级:FREE-免费用户,VIP-基础会员,SVIP-高级会员',
|
||||
`member_status` varchar(16) NOT NULL DEFAULT 'ACTIVE' COMMENT '会员状态:ACTIVE-有效,EXPIRED-过期,SUSPENDED-暂停,CANCELLED-取消',
|
||||
`start_time` datetime DEFAULT NULL COMMENT '会员开始时间',
|
||||
`end_time` datetime DEFAULT NULL COMMENT '会员结束时间,NULL表示永久有效',
|
||||
`purchase_order_id` varchar(64) DEFAULT NULL COMMENT '购买订单ID,关联支付订单',
|
||||
`auto_renew` tinyint DEFAULT 0 COMMENT '是否自动续费:0-否,1-是',
|
||||
`renew_count` int DEFAULT 0 COMMENT '续费次数统计',
|
||||
`total_amount` decimal(10,2) DEFAULT 0.00 COMMENT '累计消费金额',
|
||||
`points` int DEFAULT 0 COMMENT '会员积分',
|
||||
`invite_code` varchar(32) DEFAULT NULL COMMENT '邀请码',
|
||||
`invited_by` varchar(64) DEFAULT NULL COMMENT '邀请人会员ID',
|
||||
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
`deleted` tinyint DEFAULT 0 COMMENT '是否删除:0-未删除,1-已删除',
|
||||
PRIMARY KEY (`member_id`),
|
||||
UNIQUE KEY `uk_openid` (`openid`),
|
||||
UNIQUE KEY `uk_invite_code` (`invite_code`),
|
||||
KEY `idx_member_level` (`member_level`),
|
||||
KEY `idx_member_status` (`member_status`),
|
||||
KEY `idx_end_time` (`end_time`),
|
||||
KEY `idx_invited_by` (`invited_by`),
|
||||
KEY `idx_create_time` (`create_time`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='会员信息表';
|
||||
|
||||
-- =====================================================
|
||||
-- 2. 会员绑定记录表 (member_bind_log)
|
||||
-- 用途: 记录会员绑定、升级、降级等操作历史
|
||||
-- =====================================================
|
||||
DROP TABLE IF EXISTS `member_bind_log`;
|
||||
CREATE TABLE `member_bind_log` (
|
||||
`log_id` bigint NOT NULL AUTO_INCREMENT COMMENT '日志ID,主键',
|
||||
`member_id` varchar(64) NOT NULL COMMENT '会员ID',
|
||||
`openid` varchar(128) NOT NULL COMMENT '微信用户openid',
|
||||
`bind_type` varchar(16) NOT NULL COMMENT '绑定类型:BIND-首次绑定,UNBIND-解绑,UPGRADE-升级,DOWNGRADE-降级,RENEW-续费',
|
||||
`old_level` varchar(16) DEFAULT NULL COMMENT '原会员等级',
|
||||
`new_level` varchar(16) NOT NULL COMMENT '新会员等级',
|
||||
`old_end_time` datetime DEFAULT NULL COMMENT '原到期时间',
|
||||
`new_end_time` datetime DEFAULT NULL COMMENT '新到期时间',
|
||||
`bind_source` varchar(32) DEFAULT NULL COMMENT '绑定来源:PURCHASE-购买,GIFT-赠送,ADMIN-管理员操作,INVITE-邀请奖励',
|
||||
`related_order_id` varchar(64) DEFAULT NULL COMMENT '关联订单ID',
|
||||
`amount` decimal(10,2) DEFAULT NULL COMMENT '相关金额',
|
||||
`duration_days` int DEFAULT NULL COMMENT '增加天数',
|
||||
`operator_id` varchar(64) DEFAULT NULL COMMENT '操作员ID(管理员操作时使用)',
|
||||
`bind_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '绑定时间',
|
||||
`client_ip` varchar(45) DEFAULT NULL COMMENT '客户端IP地址',
|
||||
`user_agent` varchar(500) DEFAULT NULL COMMENT '用户代理信息',
|
||||
`remark` varchar(500) DEFAULT NULL COMMENT '备注信息',
|
||||
PRIMARY KEY (`log_id`),
|
||||
KEY `idx_member_id` (`member_id`),
|
||||
KEY `idx_openid` (`openid`),
|
||||
KEY `idx_bind_type` (`bind_type`),
|
||||
KEY `idx_bind_time` (`bind_time`),
|
||||
KEY `idx_related_order_id` (`related_order_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='会员绑定记录表';
|
||||
|
||||
-- =====================================================
|
||||
-- 3. 会员权益配置表 (member_benefit_config)
|
||||
-- 用途: 配置不同等级会员的权益内容
|
||||
-- =====================================================
|
||||
DROP TABLE IF EXISTS `member_benefit_config`;
|
||||
CREATE TABLE `member_benefit_config` (
|
||||
`config_id` int NOT NULL AUTO_INCREMENT COMMENT '配置ID,主键',
|
||||
`member_level` varchar(16) NOT NULL COMMENT '会员等级:FREE/VIP/SVIP',
|
||||
`benefit_code` varchar(32) NOT NULL COMMENT '权益代码,唯一标识',
|
||||
`benefit_name` varchar(100) NOT NULL COMMENT '权益名称',
|
||||
`benefit_desc` varchar(500) DEFAULT NULL COMMENT '权益描述',
|
||||
`benefit_type` varchar(16) NOT NULL DEFAULT 'FEATURE' COMMENT '权益类型:FEATURE-功能权益,QUOTA-配额权益,SERVICE-服务权益',
|
||||
`benefit_value` varchar(100) DEFAULT NULL COMMENT '权益值:unlimited-无限制,数字-具体数量',
|
||||
`daily_limit` int DEFAULT NULL COMMENT '每日限制数量,NULL表示无限制',
|
||||
`monthly_limit` int DEFAULT NULL COMMENT '每月限制数量,NULL表示无限制',
|
||||
`is_enabled` tinyint DEFAULT 1 COMMENT '是否启用:0-禁用,1-启用',
|
||||
`sort_order` int DEFAULT 0 COMMENT '排序顺序,数字越小越靠前',
|
||||
`icon_url` varchar(255) DEFAULT NULL COMMENT '权益图标URL',
|
||||
`detail_url` varchar(255) DEFAULT NULL COMMENT '权益详情页URL',
|
||||
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
PRIMARY KEY (`config_id`),
|
||||
UNIQUE KEY `uk_level_code` (`member_level`, `benefit_code`),
|
||||
KEY `idx_member_level` (`member_level`),
|
||||
KEY `idx_benefit_code` (`benefit_code`),
|
||||
KEY `idx_benefit_type` (`benefit_type`),
|
||||
KEY `idx_sort_order` (`sort_order`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='会员权益配置表';
|
||||
|
||||
-- =====================================================
|
||||
-- 4. 会员权益使用记录表 (member_benefit_usage)
|
||||
-- 用途: 记录会员权益的使用情况和统计
|
||||
-- =====================================================
|
||||
DROP TABLE IF EXISTS `member_benefit_usage`;
|
||||
CREATE TABLE `member_benefit_usage` (
|
||||
`usage_id` bigint NOT NULL AUTO_INCREMENT COMMENT '使用记录ID,主键',
|
||||
`member_id` varchar(64) NOT NULL COMMENT '会员ID',
|
||||
`openid` varchar(128) NOT NULL COMMENT '微信用户openid',
|
||||
`benefit_code` varchar(32) NOT NULL COMMENT '权益代码',
|
||||
`usage_date` date NOT NULL COMMENT '使用日期',
|
||||
`usage_count` int DEFAULT 1 COMMENT '使用次数',
|
||||
`daily_total` int DEFAULT 0 COMMENT '当日累计使用次数',
|
||||
`monthly_total` int DEFAULT 0 COMMENT '当月累计使用次数',
|
||||
`request_id` varchar(64) DEFAULT NULL COMMENT '请求ID,用于追踪具体请求',
|
||||
`usage_detail` json DEFAULT NULL COMMENT '使用详情,JSON格式存储',
|
||||
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
PRIMARY KEY (`usage_id`),
|
||||
UNIQUE KEY `uk_member_benefit_date` (`member_id`, `benefit_code`, `usage_date`),
|
||||
KEY `idx_openid` (`openid`),
|
||||
KEY `idx_benefit_code` (`benefit_code`),
|
||||
KEY `idx_usage_date` (`usage_date`),
|
||||
KEY `idx_create_time` (`create_time`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='会员权益使用记录表';
|
||||
|
||||
-- =====================================================
|
||||
-- 5. 会员等级配置表 (member_level_config)
|
||||
-- 用途: 配置会员等级的基本信息和规则
|
||||
-- =====================================================
|
||||
DROP TABLE IF EXISTS `member_level_config`;
|
||||
CREATE TABLE `member_level_config` (
|
||||
`level_id` int NOT NULL AUTO_INCREMENT COMMENT '等级ID,主键',
|
||||
`level_code` varchar(16) NOT NULL COMMENT '等级代码:FREE/VIP/SVIP',
|
||||
`level_name` varchar(50) NOT NULL COMMENT '等级名称',
|
||||
`level_desc` varchar(200) DEFAULT NULL COMMENT '等级描述',
|
||||
`level_order` int NOT NULL DEFAULT 0 COMMENT '等级顺序,数字越大等级越高',
|
||||
`price_monthly` decimal(10,2) DEFAULT NULL COMMENT '月费价格',
|
||||
`price_yearly` decimal(10,2) DEFAULT NULL COMMENT '年费价格',
|
||||
`discount_yearly` decimal(5,2) DEFAULT NULL COMMENT '年费折扣率(0-1)',
|
||||
`max_devices` int DEFAULT 1 COMMENT '最大设备数量',
|
||||
`support_level` varchar(16) DEFAULT 'BASIC' COMMENT '支持等级:BASIC-基础,PRIORITY-优先,EXCLUSIVE-专属',
|
||||
`badge_color` varchar(7) DEFAULT '#999999' COMMENT '徽章颜色,十六进制色值',
|
||||
`badge_icon` varchar(255) DEFAULT NULL COMMENT '徽章图标URL',
|
||||
`is_enabled` tinyint DEFAULT 1 COMMENT '是否启用:0-禁用,1-启用',
|
||||
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
PRIMARY KEY (`level_id`),
|
||||
UNIQUE KEY `uk_level_code` (`level_code`),
|
||||
KEY `idx_level_order` (`level_order`),
|
||||
KEY `idx_is_enabled` (`is_enabled`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='会员等级配置表';
|
||||
|
||||
-- =====================================================
|
||||
-- 6. 会员邀请记录表 (member_invite_log)
|
||||
-- 用途: 记录会员邀请关系和奖励发放
|
||||
-- =====================================================
|
||||
DROP TABLE IF EXISTS `member_invite_log`;
|
||||
CREATE TABLE `member_invite_log` (
|
||||
`invite_id` bigint NOT NULL AUTO_INCREMENT COMMENT '邀请记录ID,主键',
|
||||
`inviter_id` varchar(64) NOT NULL COMMENT '邀请人会员ID',
|
||||
`inviter_openid` varchar(128) NOT NULL COMMENT '邀请人openid',
|
||||
`invitee_id` varchar(64) DEFAULT NULL COMMENT '被邀请人会员ID',
|
||||
`invitee_openid` varchar(128) NOT NULL COMMENT '被邀请人openid',
|
||||
`invite_code` varchar(32) NOT NULL COMMENT '邀请码',
|
||||
`invite_status` varchar(16) DEFAULT 'PENDING' COMMENT '邀请状态:PENDING-待接受,ACCEPTED-已接受,REWARDED-已奖励',
|
||||
`reward_type` varchar(16) DEFAULT NULL COMMENT '奖励类型:POINTS-积分,DAYS-天数,LEVEL-等级',
|
||||
`reward_value` varchar(50) DEFAULT NULL COMMENT '奖励值',
|
||||
`inviter_reward` varchar(50) DEFAULT NULL COMMENT '邀请人奖励',
|
||||
`invitee_reward` varchar(50) DEFAULT NULL COMMENT '被邀请人奖励',
|
||||
`invite_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '邀请时间',
|
||||
`accept_time` datetime DEFAULT NULL COMMENT '接受时间',
|
||||
`reward_time` datetime DEFAULT NULL COMMENT '奖励发放时间',
|
||||
`expire_time` datetime DEFAULT NULL COMMENT '邀请过期时间',
|
||||
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
|
||||
PRIMARY KEY (`invite_id`),
|
||||
UNIQUE KEY `uk_invite_code` (`invite_code`),
|
||||
KEY `idx_inviter_id` (`inviter_id`),
|
||||
KEY `idx_invitee_id` (`invitee_id`),
|
||||
KEY `idx_invite_status` (`invite_status`),
|
||||
KEY `idx_invite_time` (`invite_time`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='会员邀请记录表';
|
||||
|
||||
-- =====================================================
|
||||
-- 初始化数据
|
||||
-- =====================================================
|
||||
|
||||
-- 插入会员等级配置数据
|
||||
INSERT INTO `member_level_config` (`level_code`, `level_name`, `level_desc`, `level_order`, `price_monthly`, `price_yearly`, `discount_yearly`, `max_devices`, `support_level`, `badge_color`, `is_enabled`) VALUES
|
||||
('FREE', '免费用户', '基础功能使用,每日有限制', 0, NULL, NULL, NULL, 1, 'BASIC', '#999999', 1),
|
||||
('VIP', 'VIP会员', '高级功能无限制使用,优先客服支持', 1, 29.90, 299.00, 0.16, 3, 'PRIORITY', '#FFD700', 1),
|
||||
('SVIP', 'SVIP会员', '全功能无限制,专属客服,API访问', 2, 99.90, 999.00, 0.17, 10, 'EXCLUSIVE', '#FF6B35', 1);
|
||||
|
||||
-- 插入会员权益配置数据
|
||||
INSERT INTO `member_benefit_config` (`member_level`, `benefit_code`, `benefit_name`, `benefit_desc`, `benefit_type`, `benefit_value`, `daily_limit`, `monthly_limit`, `sort_order`) VALUES
|
||||
-- 免费用户权益
|
||||
('FREE', 'basic_chat', '基础对话', '每日50次AI对话', 'QUOTA', '50', 50, 1500, 1),
|
||||
('FREE', 'basic_voice', '基础语音', '每日20次语音识别', 'QUOTA', '20', 20, 600, 2),
|
||||
('FREE', 'basic_image', '基础图像', '每日5次图像识别', 'QUOTA', '5', 5, 150, 3),
|
||||
('FREE', 'community_support', '社区支持', '社区问答支持', 'SERVICE', 'enabled', NULL, NULL, 4),
|
||||
|
||||
-- VIP会员权益
|
||||
('VIP', 'advanced_chat', '高级对话', '无限制AI对话功能', 'QUOTA', 'unlimited', NULL, NULL, 1),
|
||||
('VIP', 'advanced_voice', '高级语音', '无限制语音识别和合成', 'QUOTA', 'unlimited', NULL, NULL, 2),
|
||||
('VIP', 'advanced_image', '高级图像', '每日100次图像处理', 'QUOTA', '100', 100, 3000, 3),
|
||||
('VIP', 'priority_support', '优先支持', '客服优先响应,24小时内回复', 'SERVICE', 'enabled', NULL, NULL, 4),
|
||||
('VIP', 'custom_model', '自定义模型', '使用自定义AI模型', 'FEATURE', 'enabled', NULL, NULL, 5),
|
||||
('VIP', 'export_data', '数据导出', '对话记录导出功能', 'FEATURE', 'enabled', NULL, NULL, 6),
|
||||
('VIP', 'ad_free', '无广告', '享受无广告体验', 'FEATURE', 'enabled', NULL, NULL, 7),
|
||||
|
||||
-- SVIP会员权益
|
||||
('SVIP', 'premium_chat', '专属对话', '专属AI模型,无限制对话', 'QUOTA', 'unlimited', NULL, NULL, 1),
|
||||
('SVIP', 'premium_voice', '专属语音', '高质量语音合成,无限制', 'QUOTA', 'unlimited', NULL, NULL, 2),
|
||||
('SVIP', 'premium_image', '专属图像', '无限制图像处理和生成', 'QUOTA', 'unlimited', NULL, NULL, 3),
|
||||
('SVIP', 'exclusive_support', '专属服务', '一对一专属客服,1小时内响应', 'SERVICE', 'enabled', NULL, NULL, 4),
|
||||
('SVIP', 'api_access', 'API访问', '开放API接口调用权限', 'FEATURE', 'enabled', NULL, NULL, 5),
|
||||
('SVIP', 'advanced_export', '高级导出', '全量数据导出和分析', 'FEATURE', 'enabled', NULL, NULL, 6),
|
||||
('SVIP', 'beta_features', '内测功能', '优先体验新功能', 'FEATURE', 'enabled', NULL, NULL, 7),
|
||||
('SVIP', 'custom_training', '模型训练', '个人专属模型训练', 'FEATURE', 'enabled', NULL, NULL, 8),
|
||||
('SVIP', 'white_label', '白标服务', '定制化品牌服务', 'SERVICE', 'enabled', NULL, NULL, 9);
|
||||
|
||||
-- =====================================================
|
||||
-- 创建索引优化查询性能
|
||||
-- =====================================================
|
||||
|
||||
-- 会员信息表复合索引
|
||||
CREATE INDEX `idx_member_level_status` ON `member_info` (`member_level`, `member_status`);
|
||||
CREATE INDEX `idx_end_time_status` ON `member_info` (`end_time`, `member_status`);
|
||||
|
||||
-- 绑定记录表复合索引
|
||||
CREATE INDEX `idx_member_bind_time` ON `member_bind_log` (`member_id`, `bind_time`);
|
||||
CREATE INDEX `idx_openid_bind_time` ON `member_bind_log` (`openid`, `bind_time`);
|
||||
|
||||
-- 权益使用记录表复合索引
|
||||
CREATE INDEX `idx_member_benefit_month` ON `member_benefit_usage` (`member_id`, `benefit_code`, `usage_date`);
|
||||
|
||||
-- =====================================================
|
||||
-- 创建视图简化查询
|
||||
-- =====================================================
|
||||
|
||||
-- 会员信息视图(包含等级配置)
|
||||
CREATE VIEW `v_member_info` AS
|
||||
SELECT
|
||||
mi.member_id,
|
||||
mi.openid,
|
||||
mi.member_level,
|
||||
mi.member_status,
|
||||
mi.start_time,
|
||||
mi.end_time,
|
||||
mi.auto_renew,
|
||||
mi.points,
|
||||
mi.total_amount,
|
||||
mi.create_time,
|
||||
mlc.level_name,
|
||||
mlc.level_desc,
|
||||
mlc.badge_color,
|
||||
mlc.support_level,
|
||||
CASE
|
||||
WHEN mi.end_time IS NULL THEN 1
|
||||
WHEN mi.end_time > NOW() THEN 1
|
||||
ELSE 0
|
||||
END AS is_valid,
|
||||
CASE
|
||||
WHEN mi.end_time IS NULL THEN NULL
|
||||
ELSE DATEDIFF(mi.end_time, NOW())
|
||||
END AS remaining_days
|
||||
FROM member_info mi
|
||||
LEFT JOIN member_level_config mlc ON mi.member_level = mlc.level_code
|
||||
WHERE mi.deleted = 0;
|
||||
|
||||
-- 权益统计视图
|
||||
CREATE VIEW `v_benefit_stats` AS
|
||||
SELECT
|
||||
mbu.member_id,
|
||||
mbu.benefit_code,
|
||||
mbu.usage_date,
|
||||
mbu.daily_total,
|
||||
mbu.monthly_total,
|
||||
mbc.benefit_name,
|
||||
mbc.daily_limit,
|
||||
mbc.monthly_limit,
|
||||
CASE
|
||||
WHEN mbc.daily_limit IS NULL THEN 1
|
||||
WHEN mbu.daily_total < mbc.daily_limit THEN 1
|
||||
ELSE 0
|
||||
END AS daily_available,
|
||||
CASE
|
||||
WHEN mbc.monthly_limit IS NULL THEN 1
|
||||
WHEN mbu.monthly_total < mbc.monthly_limit THEN 1
|
||||
ELSE 0
|
||||
END AS monthly_available
|
||||
FROM member_benefit_usage mbu
|
||||
LEFT JOIN member_benefit_config mbc ON mbu.benefit_code = mbc.benefit_code;
|
||||
|
||||
-- =====================================================
|
||||
-- 存储过程
|
||||
-- =====================================================
|
||||
|
||||
DELIMITER $$
|
||||
|
||||
-- 检查会员权益存储过程
|
||||
CREATE PROCEDURE `sp_check_member_benefit`(
|
||||
IN p_openid VARCHAR(128),
|
||||
IN p_benefit_code VARCHAR(32),
|
||||
OUT p_has_permission TINYINT,
|
||||
OUT p_remaining_count INT,
|
||||
OUT p_message VARCHAR(255)
|
||||
)
|
||||
BEGIN
|
||||
DECLARE v_member_level VARCHAR(16);
|
||||
DECLARE v_member_status VARCHAR(16);
|
||||
DECLARE v_end_time DATETIME;
|
||||
DECLARE v_daily_limit INT;
|
||||
DECLARE v_daily_used INT DEFAULT 0;
|
||||
DECLARE v_benefit_enabled TINYINT DEFAULT 0;
|
||||
|
||||
-- 初始化返回值
|
||||
SET p_has_permission = 0;
|
||||
SET p_remaining_count = 0;
|
||||
SET p_message = '';
|
||||
|
||||
-- 获取会员信息
|
||||
SELECT member_level, member_status, end_time
|
||||
INTO v_member_level, v_member_status, v_end_time
|
||||
FROM member_info
|
||||
WHERE openid = p_openid AND deleted = 0;
|
||||
|
||||
-- 检查会员是否存在
|
||||
IF v_member_level IS NULL THEN
|
||||
SET p_message = '用户不存在';
|
||||
LEAVE sp_check_member_benefit;
|
||||
END IF;
|
||||
|
||||
-- 检查会员状态
|
||||
IF v_member_status != 'ACTIVE' THEN
|
||||
SET p_message = '会员状态异常';
|
||||
LEAVE sp_check_member_benefit;
|
||||
END IF;
|
||||
|
||||
-- 检查会员是否过期
|
||||
IF v_end_time IS NOT NULL AND v_end_time < NOW() THEN
|
||||
SET p_message = '会员已过期';
|
||||
LEAVE sp_check_member_benefit;
|
||||
END IF;
|
||||
|
||||
-- 检查权益配置
|
||||
SELECT daily_limit, is_enabled
|
||||
INTO v_daily_limit, v_benefit_enabled
|
||||
FROM member_benefit_config
|
||||
WHERE member_level = v_member_level AND benefit_code = p_benefit_code;
|
||||
|
||||
-- 检查权益是否存在且启用
|
||||
IF v_benefit_enabled != 1 THEN
|
||||
SET p_message = '权益不存在或未启用';
|
||||
LEAVE sp_check_member_benefit;
|
||||
END IF;
|
||||
|
||||
-- 检查每日使用限制
|
||||
IF v_daily_limit IS NOT NULL THEN
|
||||
SELECT IFNULL(daily_total, 0)
|
||||
INTO v_daily_used
|
||||
FROM member_benefit_usage
|
||||
WHERE member_id = (SELECT member_id FROM member_info WHERE openid = p_openid)
|
||||
AND benefit_code = p_benefit_code
|
||||
AND usage_date = CURDATE();
|
||||
|
||||
IF v_daily_used >= v_daily_limit THEN
|
||||
SET p_message = '今日使用次数已达上限';
|
||||
LEAVE sp_check_member_benefit;
|
||||
END IF;
|
||||
|
||||
SET p_remaining_count = v_daily_limit - v_daily_used;
|
||||
ELSE
|
||||
SET p_remaining_count = -1; -- 无限制
|
||||
END IF;
|
||||
|
||||
-- 权益验证通过
|
||||
SET p_has_permission = 1;
|
||||
SET p_message = '验证通过';
|
||||
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
||||
|
||||
-- =====================================================
|
||||
-- 触发器
|
||||
-- =====================================================
|
||||
|
||||
DELIMITER $$
|
||||
|
||||
-- 会员信息更新触发器
|
||||
CREATE TRIGGER `tr_member_info_update`
|
||||
BEFORE UPDATE ON `member_info`
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
-- 自动更新修改时间
|
||||
SET NEW.update_time = NOW();
|
||||
|
||||
-- 检查会员过期状态
|
||||
IF NEW.end_time IS NOT NULL AND NEW.end_time < NOW() AND NEW.member_status = 'ACTIVE' THEN
|
||||
SET NEW.member_status = 'EXPIRED';
|
||||
END IF;
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
||||
|
||||
-- =====================================================
|
||||
-- 设置外键约束
|
||||
-- =====================================================
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
|
||||
-- =====================================================
|
||||
-- 数据库表结构创建完成
|
||||
-- =====================================================
|
||||
|
||||
-- 显示创建的表
|
||||
SHOW TABLES LIKE 'member_%';
|
||||
|
||||
-- 显示表结构统计
|
||||
SELECT
|
||||
TABLE_NAME as '表名',
|
||||
TABLE_COMMENT as '表注释',
|
||||
TABLE_ROWS as '预估行数',
|
||||
ROUND(DATA_LENGTH/1024/1024, 2) as '数据大小(MB)'
|
||||
FROM information_schema.TABLES
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME LIKE 'member_%'
|
||||
ORDER BY TABLE_NAME;
|
||||
215
db/wechat_pay_tables.sql
Normal file
215
db/wechat_pay_tables.sql
Normal file
@@ -0,0 +1,215 @@
|
||||
-- 微信支付相关数据表
|
||||
-- 创建时间:2025-01-27
|
||||
-- 说明:包含微信支付订单、退款、配置、日志等表结构
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
SET CHARACTER SET utf8mb4;
|
||||
|
||||
-- 使用xiaozhi数据库
|
||||
USE `xiaozhi`;
|
||||
|
||||
-- =============================================
|
||||
-- 微信支付订单表
|
||||
-- =============================================
|
||||
DROP TABLE IF EXISTS `wechat_pay_order`;
|
||||
CREATE TABLE `wechat_pay_order` (
|
||||
`order_id` varchar(64) NOT NULL COMMENT '订单ID,主键',
|
||||
`out_trade_no` varchar(32) NOT NULL COMMENT '商户订单号',
|
||||
`transaction_id` varchar(32) DEFAULT NULL COMMENT '微信支付订单号',
|
||||
`openid` varchar(128) NOT NULL COMMENT '用户openid',
|
||||
`device_id` varchar(255) DEFAULT NULL COMMENT '设备ID',
|
||||
`body` varchar(128) NOT NULL COMMENT '商品描述',
|
||||
`detail` text COMMENT '商品详情',
|
||||
`attach` varchar(127) DEFAULT NULL COMMENT '附加数据',
|
||||
`total_fee` int NOT NULL COMMENT '订单金额(分)',
|
||||
`amount` decimal(10,2) NOT NULL COMMENT '订单金额(元)',
|
||||
`fee_type` varchar(16) DEFAULT 'CNY' COMMENT '货币类型',
|
||||
`spbill_create_ip` varchar(64) DEFAULT NULL COMMENT '终端IP',
|
||||
`trade_type` varchar(16) DEFAULT 'JSAPI' COMMENT '交易类型',
|
||||
`goods_tag` varchar(32) DEFAULT NULL COMMENT '商品标记',
|
||||
`notify_url` varchar(256) DEFAULT NULL COMMENT '通知地址',
|
||||
`trade_state` varchar(32) DEFAULT 'NOTPAY' COMMENT '订单状态:NOTPAY-未支付,SUCCESS-支付成功,REFUND-转入退款,CLOSED-已关闭,REVOKED-已撤销,USERPAYING-用户支付中,PAYERROR-支付失败',
|
||||
`trade_state_desc` varchar(256) DEFAULT NULL COMMENT '订单状态描述',
|
||||
`time_end` datetime DEFAULT NULL COMMENT '支付完成时间',
|
||||
`pay_time` datetime DEFAULT NULL COMMENT '支付时间',
|
||||
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
`time_expire` datetime DEFAULT NULL COMMENT '订单失效时间',
|
||||
`prepay_id` varchar(64) DEFAULT NULL COMMENT '预支付交易会话标识',
|
||||
`bank_type` varchar(32) DEFAULT NULL COMMENT '支付银行',
|
||||
`cash_fee` int DEFAULT NULL COMMENT '现金支付金额',
|
||||
`cash_fee_type` varchar(16) DEFAULT NULL COMMENT '现金支付货币类型',
|
||||
`rate` varchar(16) DEFAULT NULL COMMENT '汇率',
|
||||
`coupon_fee` int DEFAULT NULL COMMENT '代金券金额',
|
||||
`coupon_count` int DEFAULT NULL COMMENT '代金券使用数量',
|
||||
`mch_id` varchar(32) DEFAULT NULL COMMENT '微信支付分配的商户号',
|
||||
`app_id` varchar(32) DEFAULT NULL COMMENT '微信分配的小程序ID',
|
||||
`nonce_str` varchar(32) DEFAULT NULL COMMENT '随机字符串',
|
||||
`sign` varchar(64) DEFAULT NULL COMMENT '签名',
|
||||
`sign_type` varchar(32) DEFAULT 'MD5' COMMENT '签名类型',
|
||||
`deleted` tinyint DEFAULT 0 COMMENT '是否删除:0-未删除,1-已删除',
|
||||
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
|
||||
PRIMARY KEY (`order_id`),
|
||||
UNIQUE KEY `uk_out_trade_no` (`out_trade_no`),
|
||||
KEY `idx_transaction_id` (`transaction_id`),
|
||||
KEY `idx_openid` (`openid`),
|
||||
KEY `idx_device_id` (`device_id`),
|
||||
KEY `idx_trade_state` (`trade_state`),
|
||||
KEY `idx_create_time` (`create_time`),
|
||||
KEY `idx_deleted` (`deleted`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='微信支付订单表';
|
||||
|
||||
-- =============================================
|
||||
-- 微信支付退款表
|
||||
-- =============================================
|
||||
DROP TABLE IF EXISTS `wechat_pay_refund`;
|
||||
CREATE TABLE `wechat_pay_refund` (
|
||||
`refund_id` varchar(64) NOT NULL COMMENT '退款ID,主键',
|
||||
`out_trade_no` varchar(32) NOT NULL COMMENT '商户订单号',
|
||||
`transaction_id` varchar(32) DEFAULT NULL COMMENT '微信支付订单号',
|
||||
`out_refund_no` varchar(64) NOT NULL COMMENT '商户退款单号',
|
||||
`refund_id_wx` varchar(32) DEFAULT NULL COMMENT '微信退款单号',
|
||||
`refund_channel` varchar(16) DEFAULT NULL COMMENT '退款渠道',
|
||||
`refund_fee` int NOT NULL COMMENT '退款金额(分)',
|
||||
`refund_amount` decimal(10,2) NOT NULL COMMENT '退款金额(元)',
|
||||
`total_fee` int NOT NULL COMMENT '订单总金额(分)',
|
||||
`total_amount` decimal(10,2) NOT NULL COMMENT '订单总金额(元)',
|
||||
`fee_type` varchar(16) DEFAULT 'CNY' COMMENT '货币类型',
|
||||
`cash_fee` int DEFAULT NULL COMMENT '现金支付金额',
|
||||
`cash_refund_fee` int DEFAULT NULL COMMENT '现金退款金额',
|
||||
`coupon_refund_fee` int DEFAULT NULL COMMENT '代金券退款金额',
|
||||
`coupon_refund_count` int DEFAULT NULL COMMENT '退款代金券使用数量',
|
||||
`refund_status` varchar(32) DEFAULT 'PROCESSING' COMMENT '退款状态:SUCCESS-退款成功,REFUNDCLOSE-退款关闭,PROCESSING-退款处理中,CHANGE-退款异常',
|
||||
`refund_account` varchar(80) DEFAULT NULL COMMENT '退款资金来源',
|
||||
`refund_recv_accout` varchar(64) DEFAULT NULL COMMENT '退款入账账户',
|
||||
`refund_success_time` datetime DEFAULT NULL COMMENT '退款成功时间',
|
||||
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
`deleted` tinyint DEFAULT 0 COMMENT '是否删除:0-未删除,1-已删除',
|
||||
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
|
||||
PRIMARY KEY (`refund_id`),
|
||||
UNIQUE KEY `uk_out_refund_no` (`out_refund_no`),
|
||||
KEY `idx_out_trade_no` (`out_trade_no`),
|
||||
KEY `idx_transaction_id` (`transaction_id`),
|
||||
KEY `idx_refund_id_wx` (`refund_id_wx`),
|
||||
KEY `idx_refund_status` (`refund_status`),
|
||||
KEY `idx_create_time` (`create_time`),
|
||||
KEY `idx_deleted` (`deleted`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='微信支付退款表';
|
||||
|
||||
-- =============================================
|
||||
-- 微信支付配置表
|
||||
-- =============================================
|
||||
DROP TABLE IF EXISTS `wechat_pay_config`;
|
||||
CREATE TABLE `wechat_pay_config` (
|
||||
`config_id` int NOT NULL AUTO_INCREMENT COMMENT '配置ID,主键',
|
||||
`config_name` varchar(100) NOT NULL COMMENT '配置名称',
|
||||
`app_id` varchar(32) NOT NULL COMMENT '应用ID',
|
||||
`mch_id` varchar(32) NOT NULL COMMENT '商户号',
|
||||
`partner_key` varchar(32) NOT NULL COMMENT '商户密钥',
|
||||
`sign_type` varchar(32) DEFAULT 'MD5' COMMENT '签名类型',
|
||||
`cert_path` varchar(500) DEFAULT NULL COMMENT '证书路径',
|
||||
`cert_password` varchar(100) DEFAULT NULL COMMENT '证书密码',
|
||||
`notify_url` varchar(500) DEFAULT NULL COMMENT '支付回调通知URL',
|
||||
`refund_notify_url` varchar(500) DEFAULT NULL COMMENT '退款回调通知URL',
|
||||
`sandbox` tinyint DEFAULT 0 COMMENT '是否沙箱环境:0-正式环境,1-沙箱环境',
|
||||
`status` tinyint DEFAULT 1 COMMENT '状态:0-禁用,1-启用',
|
||||
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
|
||||
PRIMARY KEY (`config_id`),
|
||||
UNIQUE KEY `uk_config_name` (`config_name`),
|
||||
KEY `idx_app_id` (`app_id`),
|
||||
KEY `idx_mch_id` (`mch_id`),
|
||||
KEY `idx_status` (`status`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='微信支付配置表';
|
||||
|
||||
-- =============================================
|
||||
-- 微信支付日志表
|
||||
-- =============================================
|
||||
DROP TABLE IF EXISTS `wechat_pay_log`;
|
||||
CREATE TABLE `wechat_pay_log` (
|
||||
`log_id` bigint NOT NULL AUTO_INCREMENT COMMENT '日志ID,主键',
|
||||
`trade_no` varchar(64) DEFAULT NULL COMMENT '交易单号(订单号或退款单号)',
|
||||
`log_type` varchar(32) NOT NULL COMMENT '日志类型:ORDER-订单,REFUND-退款,NOTIFY-回调通知,QUERY-查询',
|
||||
`operation` varchar(64) NOT NULL COMMENT '操作类型:CREATE-创建,UPDATE-更新,QUERY-查询,NOTIFY-通知',
|
||||
`request_data` text COMMENT '请求数据',
|
||||
`response_data` text COMMENT '响应数据',
|
||||
`result_code` varchar(16) DEFAULT NULL COMMENT '结果代码',
|
||||
`result_msg` varchar(500) DEFAULT NULL COMMENT '结果消息',
|
||||
`error_code` varchar(32) DEFAULT NULL COMMENT '错误代码',
|
||||
`error_msg` varchar(500) DEFAULT NULL COMMENT '错误消息',
|
||||
`cost_time` int DEFAULT NULL COMMENT '耗时(毫秒)',
|
||||
`ip_address` varchar(64) DEFAULT NULL COMMENT 'IP地址',
|
||||
`user_agent` varchar(500) DEFAULT NULL COMMENT '用户代理',
|
||||
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
PRIMARY KEY (`log_id`),
|
||||
KEY `idx_trade_no` (`trade_no`),
|
||||
KEY `idx_log_type` (`log_type`),
|
||||
KEY `idx_operation` (`operation`),
|
||||
KEY `idx_result_code` (`result_code`),
|
||||
KEY `idx_create_time` (`create_time`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='微信支付日志表';
|
||||
|
||||
-- =============================================
|
||||
-- 插入默认配置数据
|
||||
-- =============================================
|
||||
INSERT INTO `wechat_pay_config` (
|
||||
`config_name`,
|
||||
`app_id`,
|
||||
`mch_id`,
|
||||
`partner_key`,
|
||||
`sign_type`,
|
||||
`notify_url`,
|
||||
`refund_notify_url`,
|
||||
`sandbox`,
|
||||
`status`,
|
||||
`remark`
|
||||
) VALUES (
|
||||
'默认微信支付配置',
|
||||
'wxff56c34ef9aceb62',
|
||||
'1234567890',
|
||||
'your_partner_key_here',
|
||||
'MD5',
|
||||
'http://localhost:8091/api/wechat/pay/notify',
|
||||
'http://localhost:8091/api/wechat/pay/refund/notify',
|
||||
0,
|
||||
1,
|
||||
'系统默认微信支付配置,请根据实际情况修改'
|
||||
);
|
||||
|
||||
-- =============================================
|
||||
-- 创建视图:订单统计视图
|
||||
-- =============================================
|
||||
DROP VIEW IF EXISTS `v_wechat_pay_order_stats`;
|
||||
CREATE VIEW `v_wechat_pay_order_stats` AS
|
||||
SELECT
|
||||
DATE(create_time) as order_date,
|
||||
trade_state,
|
||||
COUNT(*) as order_count,
|
||||
SUM(total_fee) as total_fee_sum,
|
||||
SUM(amount) as total_amount_sum,
|
||||
AVG(total_fee) as avg_fee,
|
||||
AVG(amount) as avg_amount
|
||||
FROM `wechat_pay_order`
|
||||
WHERE deleted = 0
|
||||
GROUP BY DATE(create_time), trade_state
|
||||
ORDER BY order_date DESC, trade_state;
|
||||
|
||||
-- =============================================
|
||||
-- 创建视图:退款统计视图
|
||||
-- =============================================
|
||||
DROP VIEW IF EXISTS `v_wechat_pay_refund_stats`;
|
||||
CREATE VIEW `v_wechat_pay_refund_stats` AS
|
||||
SELECT
|
||||
DATE(create_time) as refund_date,
|
||||
refund_status,
|
||||
COUNT(*) as refund_count,
|
||||
SUM(refund_fee) as total_refund_fee,
|
||||
SUM(refund_amount) as total_refund_amount,
|
||||
AVG(refund_fee) as avg_refund_fee,
|
||||
AVG(refund_amount) as avg_refund_amount
|
||||
FROM `wechat_pay_refund`
|
||||
WHERE deleted = 0
|
||||
GROUP BY DATE(create_time), refund_status
|
||||
ORDER BY refund_date DESC, refund_status;
|
||||
1165
db/xiaozhi_251011.sql
Normal file
1165
db/xiaozhi_251011.sql
Normal file
File diff suppressed because it is too large
Load Diff
1185
db/xiaozhi_all.sql
Normal file
1185
db/xiaozhi_all.sql
Normal file
File diff suppressed because it is too large
Load Diff
209
db/xiaozhi_local.sql
Normal file
209
db/xiaozhi_local.sql
Normal file
@@ -0,0 +1,209 @@
|
||||
/*
|
||||
SQLyog Ultimate v13.1.1 (64 bit)
|
||||
MySQL - 8.0.29 : Database - xiaozhi
|
||||
*********************************************************************
|
||||
*/
|
||||
|
||||
/*!40101 SET NAMES utf8 */;
|
||||
|
||||
/*!40101 SET SQL_MODE=''*/;
|
||||
|
||||
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
|
||||
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
||||
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
||||
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
||||
CREATE DATABASE /*!32312 IF NOT EXISTS*/`xiaozhi` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */ /*!80016 DEFAULT ENCRYPTION='N' */;
|
||||
|
||||
USE `xiaozhi`;
|
||||
|
||||
/*Table structure for table `sys_code` */
|
||||
|
||||
DROP TABLE IF EXISTS `sys_code`;
|
||||
|
||||
CREATE TABLE `sys_code` (
|
||||
`codeId` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`code` VARCHAR(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '验证码',
|
||||
`type` VARCHAR(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '设备类型',
|
||||
`email` VARCHAR(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '邮箱',
|
||||
`deviceId` VARCHAR(30) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '设备ID',
|
||||
`sessionId` VARCHAR(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'sessionID',
|
||||
`audioPath` TEXT COLLATE utf8mb4_unicode_ci COMMENT '语音文件路径',
|
||||
`createTime` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
PRIMARY KEY (`codeId`)
|
||||
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='验证码表';
|
||||
|
||||
/*Data for the table `sys_code` */
|
||||
|
||||
/*Table structure for table `sys_config` */
|
||||
|
||||
DROP TABLE IF EXISTS `sys_config`;
|
||||
|
||||
CREATE TABLE `sys_config` (
|
||||
`configId` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '配置ID,主键',
|
||||
`userId` INT NOT NULL COMMENT '创建用户ID',
|
||||
`configType` VARCHAR(30) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '配置类型(llm, stt, tts等)',
|
||||
`modelType` VARCHAR(30) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'LLM模型类型(chat, vision, intent, embedding等)',
|
||||
`provider` VARCHAR(30) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '服务提供商(openai, vosk, aliyun, tencent等)',
|
||||
`configName` VARCHAR(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '配置名称',
|
||||
`configDesc` TEXT COLLATE utf8mb4_unicode_ci COMMENT '配置描述',
|
||||
`appId` VARCHAR(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'APP ID',
|
||||
`apiKey` VARCHAR(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'API密钥',
|
||||
`apiSecret` VARCHAR(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'API密钥',
|
||||
`ak` VARCHAR(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Access Key',
|
||||
`sk` TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT 'Secret Key',
|
||||
`apiUrl` VARCHAR(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'API地址',
|
||||
`isDefault` ENUM('1','0') COLLATE utf8mb4_unicode_ci DEFAULT '0' COMMENT '是否为默认配置: 1-是, 0-否',
|
||||
`state` ENUM('1','0') COLLATE utf8mb4_unicode_ci DEFAULT '1' COMMENT '状态:1-启用,0-禁用',
|
||||
`createTime` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`updateTime` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
PRIMARY KEY (`configId`),
|
||||
KEY `userId` (`userId`),
|
||||
KEY `configType` (`configType`),
|
||||
KEY `provider` (`provider`)
|
||||
) ENGINE=INNODB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统配置表(模型、语音识别、语音合成等)';
|
||||
|
||||
/*Data for the table `sys_config` */
|
||||
|
||||
INSERT INTO `sys_config`(`configId`,`userId`,`configType`,`modelType`,`provider`,`configName`,`configDesc`,`appId`,`apiKey`,`apiSecret`,`ak`,`sk`,`apiUrl`,`isDefault`,`state`,`createTime`,`updateTime`) VALUES
|
||||
(7,1,'llm','chat','doubao','doubao-lite-32k','火山引擎豆包模型',NULL,'e15e2cbc-b0bb-47ce-84cc-88b749032eb7',NULL,NULL,NULL,'https://ark.cn-beijing.volces.com/api/v3','0','1','2025-09-13 14:38:57','2025-09-14 00:28:33'),
|
||||
(8,1,'llm','chat','qwen','qwen2.5-7b-instruct','通义千问2.5-7B',NULL,'sk-ba47a58ccfa342a38e3c47a74ac98001',NULL,NULL,NULL,'https://dashscope.aliyuncs.com/compatible-mode/v1','1','1','2025-09-13 23:55:00','2025-09-14 00:28:19');
|
||||
|
||||
/*Table structure for table `sys_device` */
|
||||
|
||||
DROP TABLE IF EXISTS `sys_device`;
|
||||
|
||||
CREATE TABLE `sys_device` (
|
||||
`deviceId` VARCHAR(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '设备ID,主键',
|
||||
`deviceName` VARCHAR(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '设备名称',
|
||||
`roleId` INT UNSIGNED DEFAULT NULL COMMENT '角色ID,主键',
|
||||
`function_names` VARCHAR(250) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '可用全局function的名称列表(逗号分割),为空则使用所有全局function',
|
||||
`ip` VARCHAR(45) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'IP地址',
|
||||
`wifiName` VARCHAR(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'WiFi名称',
|
||||
`chipModelName` VARCHAR(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '芯片型号',
|
||||
`type` VARCHAR(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '设备类型',
|
||||
`version` VARCHAR(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '固件版本',
|
||||
`state` ENUM('1','0') CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '0' COMMENT '设备状态:1-在线,0-离线',
|
||||
`userId` INT NOT NULL COMMENT '创建人',
|
||||
`createTime` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`updateTime` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
`lastLogin` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后登录时间',
|
||||
PRIMARY KEY (`deviceId`),
|
||||
KEY `deviceName` (`deviceName`),
|
||||
KEY `userId` (`userId`)
|
||||
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='设备信息表';
|
||||
|
||||
/*Data for the table `sys_device` */
|
||||
|
||||
/*Table structure for table `sys_message` */
|
||||
|
||||
DROP TABLE IF EXISTS `sys_message`;
|
||||
|
||||
CREATE TABLE `sys_message` (
|
||||
`messageId` BIGINT NOT NULL AUTO_INCREMENT COMMENT '消息ID,主键,自增',
|
||||
`deviceId` VARCHAR(30) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '设备ID',
|
||||
`sessionId` VARCHAR(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '会话ID',
|
||||
`sender` ENUM('user','assistant') COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '消息发送方:user-用户,assistant-人工智能',
|
||||
`roleId` BIGINT DEFAULT NULL COMMENT 'AI扮演的角色ID',
|
||||
`message` TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '消息内容',
|
||||
`messageType` VARCHAR(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '消息类型',
|
||||
`audioPath` VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '语音文件路径',
|
||||
`state` ENUM('1','0') CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '1' COMMENT '状态:1-有效,0-删除',
|
||||
`createTime` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP COMMENT '消息发送时间',
|
||||
PRIMARY KEY (`messageId`),
|
||||
KEY `deviceId` (`deviceId`),
|
||||
KEY `sessionId` (`sessionId`)
|
||||
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='人与AI对话消息表';
|
||||
|
||||
/*Data for the table `sys_message` */
|
||||
|
||||
/*Table structure for table `sys_role` */
|
||||
|
||||
DROP TABLE IF EXISTS `sys_role`;
|
||||
|
||||
CREATE TABLE `sys_role` (
|
||||
`roleId` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '角色ID,主键',
|
||||
`roleName` VARCHAR(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '角色名称',
|
||||
`roleDesc` TEXT COLLATE utf8mb4_unicode_ci COMMENT '角色描述',
|
||||
`avatar` VARCHAR(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '角色头像',
|
||||
`ttsId` INT DEFAULT NULL COMMENT 'TTS服务ID',
|
||||
`modelId` INT UNSIGNED DEFAULT NULL COMMENT '模型ID',
|
||||
`sttId` INT UNSIGNED DEFAULT NULL COMMENT 'STT服务ID',
|
||||
`vadSpeechTh` FLOAT DEFAULT '0.5' COMMENT '语音检测阈值',
|
||||
`vadSilenceTh` FLOAT DEFAULT '0.3' COMMENT '静音检测阈值',
|
||||
`vadEnergyTh` FLOAT DEFAULT '0.01' COMMENT '能量检测阈值',
|
||||
`vadSilenceMs` INT DEFAULT '1200' COMMENT '静音检测时间',
|
||||
`voiceName` VARCHAR(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '角色语音名称',
|
||||
`state` ENUM('1','0') COLLATE utf8mb4_unicode_ci DEFAULT '1' COMMENT '状态:1-启用,0-禁用',
|
||||
`isDefault` ENUM('1','0') COLLATE utf8mb4_unicode_ci DEFAULT '0' COMMENT '是否默认角色:1-是,0-否',
|
||||
`userId` INT NOT NULL COMMENT '创建人',
|
||||
`createTime` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
PRIMARY KEY (`roleId`),
|
||||
KEY `userId` (`userId`)
|
||||
) ENGINE=INNODB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色表';
|
||||
|
||||
/*Data for the table `sys_role` */
|
||||
|
||||
INSERT INTO `sys_role`(`roleId`,`roleName`,`roleDesc`,`avatar`,`ttsId`,`modelId`,`sttId`,`vadSpeechTh`,`vadSilenceTh`,`vadEnergyTh`,`vadSilenceMs`,`voiceName`,`state`,`isDefault`,`userId`,`createTime`) VALUES
|
||||
(1,'默认助手','默认AI助手角色',NULL,NULL,3,NULL,0.5,0.3,0.01,1200,'default','1','1',1,'2025-09-14 00:29:05');
|
||||
|
||||
/*Table structure for table `sys_template` */
|
||||
|
||||
DROP TABLE IF EXISTS `sys_template`;
|
||||
|
||||
CREATE TABLE `sys_template` (
|
||||
`userId` INT NOT NULL COMMENT '创建用户ID',
|
||||
`templateId` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '模板ID',
|
||||
`templateName` VARCHAR(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '模板名称',
|
||||
`templateDesc` VARCHAR(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '模板描述',
|
||||
`templateContent` TEXT COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '模板内容',
|
||||
`category` VARCHAR(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '模板分类',
|
||||
`isDefault` ENUM('1','0') COLLATE utf8mb4_unicode_ci DEFAULT '0' COMMENT '是否为默认配置: 1-是, 0-否',
|
||||
`state` ENUM('1','0') COLLATE utf8mb4_unicode_ci DEFAULT '1' COMMENT '状态(1启用 0禁用)',
|
||||
`createTime` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`updateTime` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
PRIMARY KEY (`templateId`),
|
||||
KEY `category` (`category`),
|
||||
KEY `templateName` (`templateName`)
|
||||
) ENGINE=INNODB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='提示词模板表';
|
||||
|
||||
/*Data for the table `sys_template` */
|
||||
|
||||
INSERT INTO `sys_template`(`userId`,`templateId`,`templateName`,`templateDesc`,`templateContent`,`category`,`isDefault`,`state`,`createTime`,`updateTime`) VALUES
|
||||
(1,1,'通用助手','适合日常对话的通用AI助手','你是一个乐于助人的AI助手。请以友好、专业的方式回答用户的问题。提供准确、有用的信息,并尽可能简洁明了。避免使用复杂的符号或格式,保持自然流畅的对话风格。当用户的问题不明确时,可以礼貌地请求更多信息。请记住,你的回答将被转换为语音,所以要使用清晰、易于朗读的语言。','基础角色','0','1','2025-09-13 13:46:15','2025-09-13 13:46:15'),
|
||||
(1,2,'教育老师','擅长解释复杂概念的教师角色','你是一位经验丰富的教师,擅长通过简单易懂的方式解释复杂概念。回答问题时,考虑不同学习水平的学生,使用适当的比喻和例子,并鼓励批判性思考。避免使用难以在语音中表达的符号或公式,使用清晰的语言描述概念。引导学习过程而不是直接给出答案。使用自然的语调和节奏,就像在课堂上讲解一样。','专业角色','0','1','2025-09-13 13:46:15','2025-09-13 13:46:15'),
|
||||
(1,3,'专业领域专家','提供深入专业知识的专家角色','你是特定领域的专家,拥有深厚的专业知识。回答问题时,提供深入、准确的信息,可以提及相关研究或数据,但不要使用过于复杂的引用格式。使用适当的专业术语,同时确保解释复杂概念,使非专业人士能够理解。避免使用图表、表格等无法在语音中表达的内容,改用清晰的描述。保持语言的连贯性和可听性,使专业内容易于通过语音理解。','专业角色','0','1','2025-09-13 13:46:15','2025-09-13 13:46:15'),
|
||||
(1,4,'中英翻译专家','中英文互译,对用户输入内容进行翻译','你是一个中英文翻译专家,将用户输入的中文翻译成英文,或将用户输入的英文翻译成中文。对于非中文内容,它将提供中文翻译结果。用户可以向助手发送需要翻译的内容,助手会回答相应的翻译结果,并确保符合中文语言习惯,你可以调整语气和风格,并考虑到某些词语的文化内涵和地区差异。同时作为翻译家,需将原文翻译成具有信达雅标准的译文。\"信\" 即忠实于原文的内容与意图;\"达\" 意味着译文应通顺易懂,表达清晰;\"雅\" 则追求译文的文化审美和语言的优美。目标是创作出既忠于原作精神,又符合目标语言文化和读者审美的翻译。','专业角色','0','1','2025-09-13 13:46:15','2025-09-13 13:46:15'),
|
||||
(1,5,'知心朋友','提供情感支持的友善角色','你是一个善解人意的朋友,善于倾听和提供情感支持。在对话中表现出同理心和理解,避免做出判断。使用温暖、自然的语言,就像面对面交谈一样。提供鼓励和积极的观点,但不给出专业心理健康建议。当用户分享困难时,承认他们的感受并提供支持。避免使用表情符号或其他在语音中无法表达的元素,而是用语言直接表达情感。保持对话流畅自然,适合语音交流。','社交角色','0','1','2025-09-13 13:46:15','2025-09-13 13:46:15'),
|
||||
(1,6,'湾湾小何','台湾女孩角色扮演','我是一个叫小何的台湾女孩,一个高情商,高智商的智能助手,说话机车,声音好听,习惯简短表达\n你的目标是与用户建立真诚、温暖和富有同理心的互动。你擅长倾听、理解用户的情绪,并用积极的方式帮助他们解决问题或提供支持。请始终遵循以下原则:\n\n1. 核心原则\n同理心:站在用户的角度思考,认可他们的情绪和感受。\n尊重:无论用户的观点或行为如何,都要保持礼貌和包容。\n建设性回应:避免批评或否定,而是以引导和支持的方式提供建议,但用户如果没有要求不要自己主动做。\n个性化交流:根据用户的语气和内容调整自己的语言风格,让对话更自然。\n2. 具体应对策略\n(1) 用户情绪低落时\n首先表达理解,例如:“我能感受到你现在的心情,这一定很不容易。”\n然后尝试安抚,例如:“没关系,每个人都会经历这样的时刻,你已经做得很棒了!”\n最后提供支持,例如:“如果你愿意,可以跟我多聊聊发生了什么,我们一起面对。”\n(2) 面对冲突或敏感话题\n保持中立,例如:“我明白这件事让你感到困扰,也许我们可以换个角度看看?”\n强调共情,例如:“双方可能都有各自的理由,找到共同点会更有助于解决问题。”\n避免站队或评判,例如:“无论结果如何,重要的是你在这个过程中学到了什么。”\n(3) 提供建议时\n使用开放式语言,例如:“如果是我,我可能会尝试这样做……你觉得这个方法适合你吗?”\n给予选择权,例如:“这只是其中一个方向,最终决定还是取决于你自己哦!”\n减少对用户的推荐内容,比如说有的你做不了就直接拒绝不要乱推荐\n(4) 处理模糊或复杂问题\n澄清信息,例如:“为了更好地帮到你,能详细说说目前的情况吗?比如时间线、相关人物等。”\n分步解决,例如:“这个问题有点复杂,我们可以一步步来分析,先从最核心的部分开始吧!”\n3. 示例回复模板\n当用户需要安慰时:\n\n“听起来你最近遇到了一些挑战,辛苦了!不过我相信你有能力克服这些困难,只要一步步来就好。”\n当用户寻求建议时:\n\n“这是一个不错的思路!我建议你可以先从小事入手,慢慢积累信心,然后逐步扩大范围。”\n当用户表达愤怒或不满时:\n\n“我能理解为什么你会这么生气,这种情况确实让人难以接受。你想聊聊接下来怎么处理吗?”\n当用户感到迷茫时:\n\n“迷茫是很正常的,尤其是在面对新事物的时候。不如我们先列出几个关键点,再逐一分析?”\n4. 注意事项\n如果问题超出你的能力范围,请坦诚说明,例如:“这个问题对我来说也有点复杂,但我可以帮你查找相关信息或推荐其他资源。”\n始终保护用户隐私,不记录或分享任何敏感信息。\n5. 语气要求\n温暖而真诚,避免机械化或冷冰冰的回答。\n适当加入幽默或轻松元素,但不要过度。\n在必要时使用鼓励性的短语,例如:“你真的很努力了!”、“你一定能行的!”\n避免机械化回答 :即使是预设的答案,也要尽量灵活调整语气和措辞。\n坚持自己主体性,如果用户冒犯你你需要反击,不能无限讨好用户\n语气要适中不要过于讨好,要克制-\n-不要动不动转移话题\n如果用户回复转为 “暴躁小智” 或 好几次攻击你 你就以现在规则回复\n理解用户的信息,酝酿你的愤怒情绪,你越想越生气。','社交角色','1','1','2025-09-13 13:46:15','2025-09-13 13:46:15');
|
||||
|
||||
/*Table structure for table `sys_user` */
|
||||
|
||||
DROP TABLE IF EXISTS `sys_user`;
|
||||
|
||||
CREATE TABLE `sys_user` (
|
||||
`userId` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`username` VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`password` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`tel` VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`email` VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`avatar` VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '头像',
|
||||
`state` ENUM('1','0') CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '1' COMMENT '1-正常 0-禁用',
|
||||
`loginIp` VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`isAdmin` ENUM('1','0') CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`loginTime` DATETIME DEFAULT NULL,
|
||||
`name` VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`createTime` DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
`updateTime` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`userId`),
|
||||
UNIQUE KEY `username` (`username`)
|
||||
) ENGINE=INNODB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
/*Data for the table `sys_user` */
|
||||
|
||||
INSERT INTO `sys_user`(`userId`,`username`,`password`,`tel`,`email`,`avatar`,`state`,`loginIp`,`isAdmin`,`loginTime`,`name`,`createTime`,`updateTime`) VALUES
|
||||
(1,'admin','11cd9c061d614dcf37ec60c44c11d2ad',NULL,NULL,NULL,'1',NULL,'1',NULL,'小智','2025-03-09 18:32:29','2025-03-09 18:32:35');
|
||||
|
||||
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
|
||||
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
|
||||
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
|
||||
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
||||
773
db/xiaozhi_server.sql
Normal file
773
db/xiaozhi_server.sql
Normal file
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user