From 5e485f54a2a654f20ff3942ecd628349fc799860 Mon Sep 17 00:00:00 2001 From: liuwei Date: Tue, 20 May 2025 16:34:57 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0sql=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/scripts/init.sql | 342 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 293 insertions(+), 49 deletions(-) diff --git a/db/scripts/init.sql b/db/scripts/init.sql index e58e00d..6501b6f 100644 --- a/db/scripts/init.sql +++ b/db/scripts/init.sql @@ -1,7 +1,7 @@ -- 创建数据库 CREATE DATABASE IF NOT EXISTS message_archive CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; USE message_archive; -CREATE TABLE IF NOT EXISTS message_archive.messages +create or replace table messages ( id int auto_increment comment '自增主键ID' primary key, @@ -10,14 +10,24 @@ CREATE TABLE IF NOT EXISTS message_archive.messages sender varchar(255) not null comment '发送者微信ID', content text null comment '消息内容', message_type varchar(50) null comment '消息类型(文本、图片、视频等)', - attachment_url varchar(512) null comment '附件URL(图片、视频链接)', + attachment_url text null comment '附件URL(图片、视频链接)', message_id varchar(32) null comment '消息 id', message_xml text null comment '消息 xml 部分', - message_thumb text null comment '视频或图片消息的缩略图路径' + message_thumb longtext null comment '视频或图片消息的缩略图路径', + image_path varchar(255) null comment '图片URL路径' ) comment '微信群消息存储表,记录所有群聊消息'; -CREATE TABLE IF NOT EXISTS message_archive.speech_counts +create or replace index idx_date_timestamp + on messages (timestamp); + +create or replace index idx_group_timestamp + on messages (group_id, timestamp); + +create or replace index idx_message_type + on messages (message_type); + +create or replace table speech_counts ( id int auto_increment comment '自增主键ID' primary key, @@ -30,13 +40,69 @@ CREATE TABLE IF NOT EXISTS message_archive.speech_counts ) comment '群成员每日发言统计表'; -CREATE TABLE IF NOT EXISTS message_archive.t_encyclopedia_active_tasks +create or replace table t_chatroom_member +( + id int auto_increment + primary key, + chatroom_id varchar(64) not null comment '群聊ID', + wxid varchar(64) not null comment '成员微信ID', + nick_name varchar(128) null comment '成员昵称', + display_name varchar(128) null comment '群内显示名称', + inviter_user_name varchar(64) null comment '邀请人微信ID', + member_flag int null comment '成员标志,2049表示管理员', + big_head_img_url text null comment '大头像URL', + small_head_img_url text null comment '小头像URL', + is_owner tinyint(1) default 0 null comment '是否群主:0否,1是', + is_admin tinyint(1) default 0 null comment '是否管理员:0否,1是', + sex tinyint null comment '性别:1男,2女,0未知', + signature text null comment '个性签名', + alias varchar(128) null comment '微信号', + country varchar(64) null comment '国家', + province varchar(64) null comment '省份', + city varchar(64) null comment '城市', + label_list text null comment '标签列表', + phone_num_list text null comment '电话号码列表', + py_initial varchar(128) null comment '拼音首字母', + quan_pin varchar(256) null comment '全拼', + remark_py_initial varchar(128) null comment '备注拼音首字母', + remark_quan_pin varchar(256) null comment '备注全拼', + create_time datetime default current_timestamp() not null comment '创建时间', + update_time datetime default current_timestamp() not null on update current_timestamp() comment '更新时间', + constraint idx_chatroom_member + unique (chatroom_id, wxid) +) + comment '微信群成员信息表'; + +create or replace table t_chatrooms +( + id int auto_increment + primary key, + chatroom_id varchar(64) not null comment '群聊ID', + nick_name varchar(128) null comment '群昵称', + py_initial varchar(128) null comment '群昵称拼音首字母', + quan_pin varchar(256) null comment '群昵称全拼', + sex tinyint null comment '性别', + remark varchar(128) null comment '备注', + remark_py_initial varchar(128) null comment '备注拼音首字母', + remark_quan_pin varchar(256) null comment '备注全拼', + chat_room_notify tinyint null comment '群通知', + chat_room_owner varchar(64) null comment '群主微信ID', + small_head_img_url text null comment '群头像URL', + member_list text null comment '成员列表(JSON)', + create_time datetime default current_timestamp() not null comment '创建时间', + update_time datetime default current_timestamp() not null on update current_timestamp() comment '更新时间', + constraint idx_chatroom_id + unique (chatroom_id) +) + comment '微信群信息表'; + +create or replace table t_encyclopedia_active_tasks ( active_task_id int auto_increment comment '任务ID' primary key, group_id varchar(50) not null comment '群聊ID', question varchar(255) not null comment '问题内容', - answer varchar(100) not null comment '正确答案', + answer varchar(256) not null comment '正确答案', score int not null comment '答对可获得的分数', description text null comment '问题描述或提示', holder_id varchar(50) not null comment '出题人ID', @@ -47,12 +113,12 @@ CREATE TABLE IF NOT EXISTS message_archive.t_encyclopedia_active_tasks comment '百科答题游戏活跃任务表'; create or replace index group_id - on message_archive.t_encyclopedia_active_tasks (group_id); + on t_encyclopedia_active_tasks (group_id); create or replace index question_id - on message_archive.t_encyclopedia_active_tasks (question_id); + on t_encyclopedia_active_tasks (question_id); -CREATE TABLE IF NOT EXISTS message_archive.t_encyclopedia_groups +create or replace table t_encyclopedia_groups ( group_id varchar(50) not null comment '群聊ID' primary key, @@ -60,7 +126,7 @@ CREATE TABLE IF NOT EXISTS message_archive.t_encyclopedia_groups ) comment '百科答题游戏群聊表'; -CREATE TABLE IF NOT EXISTS message_archive.t_encyclopedia_players +create or replace table t_encyclopedia_players ( player_id varchar(50) not null comment '玩家ID(微信ID)', group_id varchar(50) not null comment '群聊ID', @@ -71,14 +137,14 @@ CREATE TABLE IF NOT EXISTS message_archive.t_encyclopedia_players ) comment '百科答题游戏玩家表'; -CREATE TABLE IF NOT EXISTS message_archive.t_encyclopedia_task_history +create or replace table t_encyclopedia_task_history ( history_id int auto_increment comment '历史记录ID' primary key, group_id varchar(50) not null comment '群聊ID', active_task_id int not null comment '关联的任务ID', player_id varchar(50) not null comment '回答者ID', - answer varchar(100) not null comment '玩家的回答', + answer varchar(256) not null comment '玩家的回答', is_correct tinyint(1) default 0 null comment '是否回答正确', points_earned int default 0 null comment '获得的积分', completed_at datetime default current_timestamp() null comment '完成时间' @@ -86,26 +152,229 @@ CREATE TABLE IF NOT EXISTS message_archive.t_encyclopedia_task_history comment '百科答题游戏任务历史表'; create or replace index group_id - on message_archive.t_encyclopedia_task_history (group_id); + on t_encyclopedia_task_history (group_id); -CREATE TABLE IF NOT EXISTS message_archive.t_sign_record +create or replace table t_error_logs ( - id bigint auto_increment comment '自增主键ID' + id bigint auto_increment primary key, - wx_id varchar(100) not null comment '用户微信ID', - group_id varchar(100) not null comment '群聊ID', - wx_nick_name varchar(100) not null comment '用户昵称', - points int default 0 null comment '积分数量', - sign_stat datetime null comment '最近签到时间', - signin_streak int default 0 null comment '连续签到天数', - create_time datetime default current_timestamp() null comment '记录创建时间', - update_time datetime default current_timestamp() null on update current_timestamp() comment '记录更新时间', + plugin_name varchar(50) not null comment '插件名称', + command varchar(50) not null comment '触发的命令', + user_id varchar(50) not null comment '用户ID', + group_id varchar(50) null comment '群组ID,私聊为NULL', + error_message text not null comment '错误信息', + stack_trace text null comment '堆栈跟踪', + created_at datetime default current_timestamp() not null comment '创建时间' +) + comment '错误日志表'; + +create or replace index idx_created_at + on t_error_logs (created_at); + +create or replace index idx_plugin_name + on t_error_logs (plugin_name); + +create or replace table t_group_stats +( + id bigint auto_increment + primary key, + group_id varchar(50) not null comment '群组ID', + plugin_name varchar(50) not null comment '插件名称', + command varchar(50) not null comment '触发的命令', + total_calls int default 0 not null comment '总调用次数', + success_calls int default 0 not null comment '成功调用次数', + failed_calls int default 0 not null comment '失败调用次数', + unique_users int default 0 not null comment '唯一用户数', + first_used_at datetime not null comment '首次使用时间', + last_used_at datetime not null comment '最后使用时间', + constraint uk_group_plugin_command + unique (group_id, plugin_name, command) +) + comment '群组使用统计表'; + +create or replace index idx_group_id + on t_group_stats (group_id); + +create or replace index idx_last_used_at + on t_group_stats (last_used_at); + +create or replace table t_plugin_point_config +( + id int auto_increment + primary key, + plugin_name varchar(100) not null, + points_required int default 0 null, + is_enabled tinyint(1) default 1 null, + description text null, + constraint plugin_name + unique (plugin_name) +); + +create or replace table t_plugin_stats +( + id bigint auto_increment + primary key, + plugin_name varchar(50) not null comment '插件名称', + command varchar(50) not null comment '触发的命令', + stat_date date not null comment '统计日期', + total_calls int default 0 not null comment '总调用次数', + success_calls int default 0 not null comment '成功调用次数', + failed_calls int default 0 not null comment '失败调用次数', + group_calls int default 0 not null comment '群聊调用次数', + private_calls int default 0 not null comment '私聊调用次数', + avg_process_time float default 0 not null comment '平均处理时间(毫秒)', + created_at datetime default current_timestamp() not null comment '创建时间', + updated_at datetime default current_timestamp() not null on update current_timestamp() comment '更新时间', + constraint uk_plugin_command_date + unique (plugin_name, command, stat_date) +) + comment '插件统计汇总表'; + +create or replace index idx_stat_date + on t_plugin_stats (stat_date); + +create or replace table t_point_transactions +( + id int auto_increment + primary key, + user_id varchar(100) not null, + group_id varchar(100) not null, + transaction_type varchar(20) not null, + points int not null, + source varchar(50) not null, + description text null, + created_at timestamp default current_timestamp() null +); + +create or replace table t_prison_records +( + id int auto_increment + primary key, + user_id varchar(100) not null, + group_id varchar(100) not null, + start_time timestamp default current_timestamp() null, + end_time timestamp not null, + reason varchar(255) null, + status tinyint default 1 null comment '1:在押 0:已释放', + bailout_user_id varchar(100) null, + bailout_time timestamp null, + created_at timestamp default current_timestamp() null +); + +create or replace table t_sign_history +( + id bigint auto_increment comment '历史记录ID' + primary key, + wx_id varchar(100) not null comment '用户微信ID', + group_id varchar(100) not null comment '群聊ID', + sign_date date not null comment '签到日期', + sign_time datetime not null comment '签到时间', + is_makeup tinyint(1) default 0 null comment '是否为补签', + points_earned int default 0 null comment '获得的积分', + streak_count int default 1 null comment '当时的连签天数', + create_time datetime default current_timestamp() null comment '记录创建时间' +) + comment '用户签到历史记录表'; + +create or replace index idx_sign_date + on t_sign_history (sign_date); + +create or replace index idx_user_group + on t_sign_history (wx_id, group_id); + +create or replace table t_sign_record +( + id bigint auto_increment comment '自增主键ID' + primary key, + wx_id varchar(100) not null comment '用户微信ID', + group_id varchar(100) not null comment '群聊ID', + wx_nick_name varchar(100) not null comment '用户昵称', + points int default 0 null comment '积分数量', + sign_stat datetime null comment '最近签到时间', + signin_streak int default 0 null comment '连续签到天数', + create_time datetime default current_timestamp() null comment '记录创建时间', + update_time datetime default current_timestamp() null on update current_timestamp() comment '记录更新时间', + last_sign_date datetime null comment '上一次签到日期', + streak_start_sign_date datetime null comment '连续签到第一天日期', + last_continuous_days int default 0 null comment '历史最长连续签到天数', + total_sign_days int default 0 null comment '总签到天数', + previous_streak int default 0 null comment '断签前的连签天数', constraint unique_sign unique (wx_id, group_id) ) comment '用户群内签到记录表'; -CREATE TABLE IF NOT EXISTS message_archive.tasks +create or replace table t_user_points +( + id int auto_increment + primary key, + user_id varchar(100) not null, + group_id varchar(100) not null, + total_points int default 0 null, + checkin_points int default 0 null, + game_points int default 0 null, + other_points int default 0 null, + last_updated timestamp default current_timestamp() null on update current_timestamp(), + constraint user_id + unique (user_id, group_id) +); + +create or replace table t_user_stats +( + id bigint auto_increment + primary key, + user_id varchar(50) not null comment '用户ID', + plugin_name varchar(50) not null comment '插件名称', + command varchar(50) not null comment '触发的命令', + total_calls int default 0 not null comment '总调用次数', + success_calls int default 0 not null comment '成功调用次数', + failed_calls int default 0 not null comment '失败调用次数', + first_used_at datetime not null comment '首次使用时间', + last_used_at datetime not null comment '最后使用时间', + constraint uk_user_plugin_command + unique (user_id, plugin_name, command) +) + comment '用户使用统计表'; + +create or replace index idx_last_used_at + on t_user_stats (last_used_at); + +create or replace index idx_user_id + on t_user_stats (user_id); + +create or replace table t_wechat_contacts +( + id int auto_increment + primary key, + user_name varchar(64) not null comment '微信ID', + nick_name varchar(128) null comment '昵称', + py_initial varchar(128) null comment '拼音首字母', + quan_pin varchar(256) null comment '全拼', + sex tinyint null comment '性别:1男,2女,0未知', + remark varchar(128) null comment '备注', + remark_py_initial varchar(128) null comment '备注拼音首字母', + remark_quan_pin varchar(256) null comment '备注全拼', + signature text null comment '个性签名', + alias varchar(128) null comment '微信号', + sns_bg_img text null comment '朋友圈背景图', + country varchar(64) null comment '国家', + province varchar(64) null comment '省份', + city varchar(64) null comment '城市', + big_head_img_url text null comment '大头像URL', + small_head_img_url text null comment '小头像URL', + description text null comment '描述', + card_img_url text null comment '名片图片URL', + label_list text null comment '标签列表', + phone_num_list text null comment '电话号码列表', + type enum ('friends', 'chatrooms', 'ghs') not null comment '联系人类型:好友、群聊、公众号', + create_time datetime default current_timestamp() not null comment '创建时间', + update_time datetime default current_timestamp() not null on update current_timestamp() comment '更新时间', + constraint idx_user_name + unique (user_name) +) + comment '微信联系人信息表'; + +create or replace table tasks ( task_id int auto_increment comment '任务ID' primary key, @@ -117,28 +386,3 @@ CREATE TABLE IF NOT EXISTS message_archive.tasks ) comment '机器人定时任务表'; - - --- 修改签到表,添加必要字段 -ALTER TABLE t_sign_record ADD COLUMN last_continuous_days INT DEFAULT 0 COMMENT '历史最长连续签到天数'; -ALTER TABLE t_sign_record ADD COLUMN total_sign_days INT DEFAULT 0 COMMENT '总签到天数'; -ALTER TABLE t_sign_record ADD COLUMN last_sign_date DATETIME NULL COMMENT '上一次签到日期'; -ALTER TABLE t_sign_record ADD COLUMN streak_start_sign_date DATETIME NULL COMMENT '连续签到第一天日期'; --- 添加断签前连签天数字段 -ALTER TABLE t_sign_record ADD COLUMN previous_streak INT DEFAULT 0 COMMENT '断签前的连签天数'; - - --- 创建签到历史记录表 -CREATE TABLE IF NOT EXISTS message_archive.t_sign_history ( - id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '历史记录ID', - wx_id VARCHAR(100) NOT NULL COMMENT '用户微信ID', - group_id VARCHAR(100) NOT NULL COMMENT '群聊ID', - sign_date DATE NOT NULL COMMENT '签到日期', - sign_time DATETIME NOT NULL COMMENT '签到时间', - is_makeup TINYINT(1) DEFAULT 0 COMMENT '是否为补签', - points_earned INT DEFAULT 0 COMMENT '获得的积分', - streak_count INT DEFAULT 1 COMMENT '当时的连签天数', - create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间', - INDEX idx_user_group (wx_id, group_id), - INDEX idx_sign_date (sign_date) -) COMMENT '用户签到历史记录表'; \ No newline at end of file