-- ========================================
-- yanzhu-module-mp 建表 SQL
-- 数据库: MySQL 8.0+
-- 微信公众号模块
-- ========================================

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ========================================
-- 公众号核心表
-- ========================================

-- ----------------------------
-- Table structure for mp_account
-- ----------------------------
DROP TABLE IF EXISTS `mp_account`;
CREATE TABLE `mp_account` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  `name` varchar(64) NOT NULL COMMENT '公众号名称',
  `account` varchar(64) NOT NULL COMMENT '公众号账号',
  `app_id` varchar(64) NOT NULL COMMENT '公众号 appid',
  `app_secret` varchar(128) NOT NULL COMMENT '公众号密钥',
  `token` varchar(128) NOT NULL COMMENT '公众号 token',
  `aes_key` varchar(128) DEFAULT NULL COMMENT '消息加解密密钥',
  `qr_code_url` varchar(256) DEFAULT NULL COMMENT '二维码图片 URL',
  `remark` varchar(256) DEFAULT NULL COMMENT '备注',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_app_id` (`app_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='公众号账号';

-- ----------------------------
-- Table structure for mp_user
-- ----------------------------
DROP TABLE IF EXISTS `mp_user`;
CREATE TABLE `mp_user` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  `openid` varchar(64) NOT NULL COMMENT '粉丝标识',
  `union_id` varchar(64) DEFAULT NULL COMMENT '微信生态唯一标识',
  `subscribe_status` tinyint NOT NULL COMMENT '关注状态',
  `subscribe_time` datetime DEFAULT NULL COMMENT '关注时间',
  `unsubscribe_time` datetime DEFAULT NULL COMMENT '取消关注时间',
  `nickname` varchar(64) DEFAULT NULL COMMENT '昵称',
  `head_image_url` varchar(256) DEFAULT NULL COMMENT '头像地址',
  `language` varchar(32) DEFAULT NULL COMMENT '语言',
  `country` varchar(32) DEFAULT NULL COMMENT '国家',
  `province` varchar(32) DEFAULT NULL COMMENT '省份',
  `city` varchar(32) DEFAULT NULL COMMENT '城市',
  `remark` varchar(64) DEFAULT NULL COMMENT '备注',
  `tag_ids` text COMMENT '标签编号数组',
  `account_id` bigint NOT NULL COMMENT '公众号账号的编号',
  `app_id` varchar(64) NOT NULL COMMENT '公众号 appId',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
  PRIMARY KEY (`id`),
  KEY `idx_openid` (`openid`),
  KEY `idx_account_id` (`account_id`),
  KEY `idx_union_id` (`union_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='微信公众号粉丝';

-- ----------------------------
-- Table structure for mp_tag
-- ----------------------------
DROP TABLE IF EXISTS `mp_tag`;
CREATE TABLE `mp_tag` (
  `id` bigint NOT NULL COMMENT '主键',
  `tag_id` bigint NOT NULL COMMENT '公众号标签 id',
  `name` varchar(32) NOT NULL COMMENT '标签名',
  `count` int DEFAULT NULL COMMENT '此标签下粉丝数',
  `account_id` bigint NOT NULL COMMENT '公众号账号的编号',
  `app_id` varchar(64) NOT NULL COMMENT '公众号 appId',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
  PRIMARY KEY (`id`),
  KEY `idx_account_id` (`account_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='公众号标签';

-- ----------------------------
-- Table structure for mp_menu
-- ----------------------------
DROP TABLE IF EXISTS `mp_menu`;
CREATE TABLE `mp_menu` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  `account_id` bigint NOT NULL COMMENT '公众号账号的编号',
  `app_id` varchar(64) NOT NULL COMMENT '公众号 appId',
  `name` varchar(32) NOT NULL COMMENT '菜单名称',
  `menu_key` varchar(64) DEFAULT NULL COMMENT '菜单标识',
  `parent_id` bigint DEFAULT NULL COMMENT '父菜单编号',
  `type` varchar(16) DEFAULT NULL COMMENT '按钮类型',
  `url` varchar(256) DEFAULT NULL COMMENT '网页链接',
  `mini_program_app_id` varchar(32) DEFAULT NULL COMMENT '小程序的 appId',
  `mini_program_page_path` varchar(128) DEFAULT NULL COMMENT '小程序的页面路径',
  `article_id` varchar(64) DEFAULT NULL COMMENT '跳转图文的媒体编号',
  `reply_message_type` varchar(16) DEFAULT NULL COMMENT '消息类型',
  `reply_content` text COMMENT '回复的消息内容',
  `reply_media_id` varchar(64) DEFAULT NULL COMMENT '回复的媒体 id',
  `reply_media_url` varchar(256) DEFAULT NULL COMMENT '回复的媒体 URL',
  `reply_title` varchar(128) DEFAULT NULL COMMENT '回复的标题',
  `reply_description` varchar(256) DEFAULT NULL COMMENT '回复的描述',
  `reply_thumb_media_id` varchar(64) DEFAULT NULL COMMENT '回复的缩略图的媒体 id',
  `reply_thumb_media_url` varchar(256) DEFAULT NULL COMMENT '回复的缩略图的媒体 URL',
  `reply_articles` text COMMENT '回复的图文消息数组',
  `reply_music_url` varchar(256) DEFAULT NULL COMMENT '回复的音乐链接',
  `reply_hq_music_url` varchar(256) DEFAULT NULL COMMENT '回复的高质量音乐链接',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
  PRIMARY KEY (`id`),
  KEY `idx_account_id` (`account_id`),
  KEY `idx_parent_id` (`parent_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='公众号菜单';

-- ----------------------------
-- Table structure for mp_message
-- ----------------------------
DROP TABLE IF EXISTS `mp_message`;
CREATE TABLE `mp_message` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `msg_id` bigint DEFAULT NULL COMMENT '微信公众号消息 id',
  `account_id` bigint NOT NULL COMMENT '公众号账号的 ID',
  `app_id` varchar(64) NOT NULL COMMENT '公众号 appid',
  `user_id` bigint DEFAULT NULL COMMENT '公众号粉丝的编号',
  `openid` varchar(64) DEFAULT NULL COMMENT '公众号粉丝标志',
  `type` varchar(16) NOT NULL COMMENT '消息类型',
  `send_from` int DEFAULT NULL COMMENT '消息来源',
  `content` text COMMENT '消息内容',
  `media_id` varchar(64) DEFAULT NULL COMMENT '媒体文件的编号',
  `media_url` varchar(256) DEFAULT NULL COMMENT '媒体文件的 URL',
  `recognition` varchar(512) DEFAULT NULL COMMENT '语音识别后文本',
  `format` varchar(16) DEFAULT NULL COMMENT '语音格式',
  `title` varchar(128) DEFAULT NULL COMMENT '标题',
  `description` varchar(256) DEFAULT NULL COMMENT '描述',
  `thumb_media_id` varchar(64) DEFAULT NULL COMMENT '缩略图的媒体 id',
  `thumb_media_url` varchar(256) DEFAULT NULL COMMENT '缩略图的媒体 URL',
  `url` varchar(256) DEFAULT NULL COMMENT '点击图文消息跳转链接',
  `location_x` double DEFAULT NULL COMMENT '地理位置维度',
  `location_y` double DEFAULT NULL COMMENT '地理位置经度',
  `scale` double DEFAULT NULL COMMENT '地图缩放大小',
  `label` varchar(128) DEFAULT NULL COMMENT '详细地址',
  `articles` text COMMENT '图文消息数组',
  `music_url` varchar(256) DEFAULT NULL COMMENT '音乐链接',
  `hq_music_url` varchar(256) DEFAULT NULL COMMENT '高质量音乐链接',
  `event` varchar(32) DEFAULT NULL COMMENT '事件类型',
  `event_key` varchar(128) DEFAULT NULL COMMENT '事件 Key',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
  PRIMARY KEY (`id`),
  KEY `idx_account_id` (`account_id`),
  KEY `idx_user_id` (`user_id`),
  KEY `idx_msg_id` (`msg_id`),
  KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='公众号消息';

-- ----------------------------
-- Table structure for mp_message_template
-- ----------------------------
DROP TABLE IF EXISTS `mp_message_template`;
CREATE TABLE `mp_message_template` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `account_id` bigint NOT NULL COMMENT '公众号账号的编号',
  `app_id` varchar(64) NOT NULL COMMENT '公众号 appId',
  `template_id` varchar(64) NOT NULL COMMENT '公众号模板 ID',
  `title` varchar(64) NOT NULL COMMENT '标题',
  `content` text COMMENT '模板内容',
  `example` text COMMENT '模板示例',
  `primary_industry` varchar(32) DEFAULT NULL COMMENT '模板所属行业的一级行业',
  `deputy_industry` varchar(32) DEFAULT NULL COMMENT '模板所属行业的二级行业',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
  PRIMARY KEY (`id`),
  KEY `idx_account_id` (`account_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='公众号模版消息';

-- ----------------------------
-- Table structure for mp_material
-- ----------------------------
DROP TABLE IF EXISTS `mp_material`;
CREATE TABLE `mp_material` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `account_id` bigint NOT NULL COMMENT '公众号账号的编号',
  `app_id` varchar(64) NOT NULL COMMENT '公众号 appId',
  `media_id` varchar(64) NOT NULL COMMENT '公众号素材 id',
  `type` varchar(16) NOT NULL COMMENT '文件类型',
  `permanent` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否永久',
  `url` varchar(256) DEFAULT NULL COMMENT '文件服务器的 URL',
  `name` varchar(64) DEFAULT NULL COMMENT '名字',
  `mp_url` varchar(256) DEFAULT NULL COMMENT '公众号文件 URL',
  `title` varchar(128) DEFAULT NULL COMMENT '视频素材的标题',
  `introduction` varchar(256) DEFAULT NULL COMMENT '视频素材的描述',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
  PRIMARY KEY (`id`),
  KEY `idx_account_id` (`account_id`),
  KEY `idx_media_id` (`media_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='公众号素材';

-- ----------------------------
-- Table structure for mp_auto_reply
-- ----------------------------
DROP TABLE IF EXISTS `mp_auto_reply`;
CREATE TABLE `mp_auto_reply` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `account_id` bigint NOT NULL COMMENT '公众号账号的编号',
  `app_id` varchar(64) NOT NULL COMMENT '公众号 appId',
  `type` tinyint NOT NULL COMMENT '回复类型',
  `request_keyword` varchar(32) DEFAULT NULL COMMENT '请求的关键字',
  `request_match` tinyint DEFAULT NULL COMMENT '请求的关键字的匹配',
  `request_message_type` varchar(16) DEFAULT NULL COMMENT '请求的消息类型',
  `response_message_type` varchar(16) DEFAULT NULL COMMENT '回复的消息类型',
  `response_content` text COMMENT '回复的消息内容',
  `response_media_id` varchar(64) DEFAULT NULL COMMENT '回复的媒体 id',
  `response_media_url` varchar(256) DEFAULT NULL COMMENT '回复的媒体 URL',
  `response_title` varchar(128) DEFAULT NULL COMMENT '回复的标题',
  `response_description` varchar(256) DEFAULT NULL COMMENT '回复的描述',
  `response_thumb_media_id` varchar(64) DEFAULT NULL COMMENT '回复的缩略图的媒体 id',
  `response_thumb_media_url` varchar(256) DEFAULT NULL COMMENT '回复的缩略图的媒体 URL',
  `response_articles` text COMMENT '回复的图文消息',
  `response_music_url` varchar(256) DEFAULT NULL COMMENT '回复的音乐链接',
  `response_hq_music_url` varchar(256) DEFAULT NULL COMMENT '回复的高质量音乐链接',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
  PRIMARY KEY (`id`),
  KEY `idx_account_id` (`account_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='公众号消息自动回复';

SET FOREIGN_KEY_CHECKS = 1;
