| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683 |
- -- ============================================
- -- 智价云(药店版)系统 - 数据库初始化脚本
- -- ============================================
- -- 设置 SQL Mode 以兼容 DATETIME DEFAULT NULL
- SET SESSION sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
- -- 创建数据库(如果不存在)
- CREATE DATABASE IF NOT EXISTS `zhijiayun_pharmacy`
- DEFAULT CHARACTER SET utf8mb4
- DEFAULT COLLATE utf8mb4_unicode_ci;
- USE `zhijiayun_pharmacy`;
- -- ============================================
- -- 开发阶段注意:生产环境禁止 DROP TABLE,使用 migration-v*.sql 增量迁移
- -- 开发环境如需重建表,手动执行 DROP TABLE 后再运行本脚本
- -- ============================================
- -- 用户表
- CREATE TABLE IF NOT EXISTS `t_user` (
- `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
- `phone` VARCHAR(20) DEFAULT NULL COMMENT '手机号',
- `nickname` VARCHAR(64) DEFAULT NULL COMMENT '昵称',
- `avatar` VARCHAR(512) DEFAULT NULL COMMENT '头像URL',
- `password` VARCHAR(128) DEFAULT NULL COMMENT '密码(加密存储)',
- `wechat_open_id` VARCHAR(64) DEFAULT NULL COMMENT '微信OpenID',
- `wechat_union_id` VARCHAR(64) DEFAULT NULL COMMENT '微信UnionID',
- `wechat_nickname` VARCHAR(128) DEFAULT NULL COMMENT '微信昵称',
- `pharmacy_name` VARCHAR(200) DEFAULT NULL COMMENT '药店名称',
- `province` VARCHAR(50) DEFAULT NULL COMMENT '省',
- `city` VARCHAR(50) DEFAULT NULL COMMENT '市',
- `district` VARCHAR(50) DEFAULT NULL COMMENT '区',
- `status` INT NOT NULL DEFAULT 1 COMMENT '账号状态:0-禁用 1-正常',
- `role` VARCHAR(20) NOT NULL DEFAULT 'USER' COMMENT '用户角色(管理员角色已迁至 t_admin)',
- `membership_level` VARCHAR(20) DEFAULT NULL COMMENT '当前会员等级:PLUS/PRO/ULTRA',
- `last_login_time` DATETIME DEFAULT NULL COMMENT '最后登录时间',
- `last_login_ip` VARCHAR(45) DEFAULT NULL COMMENT '最后登录IP',
- `last_login_device` VARCHAR(100) DEFAULT NULL COMMENT '最后登录设备信息',
- `login_source` VARCHAR(20) DEFAULT NULL COMMENT '登录来源:WINDOWS/MINIAPP/ANDROID/IOS/WECHAT',
- `token_version` BIGINT DEFAULT 0 COMMENT 'Token版本号(单设备登录控制)',
- `refresh_token_hash` VARCHAR(64) DEFAULT NULL COMMENT 'Refresh Token SHA-256哈希',
- `refresh_token_status` VARCHAR(10) DEFAULT NULL COMMENT 'Refresh Token状态:ACTIVE/USED',
- `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
- `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
- PRIMARY KEY (`id`),
- UNIQUE KEY `uk_phone` (`phone`),
- KEY `idx_openid` (`wechat_open_id`),
- KEY `idx_unionid` (`wechat_union_id`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';
- -- 管理员表
- CREATE TABLE IF NOT EXISTS `t_admin` (
- `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
- `username` VARCHAR(64) NOT NULL COMMENT '用户名',
- `password` VARCHAR(128) NOT NULL COMMENT '密码(BCrypt加密)',
- `phone` VARCHAR(20) DEFAULT NULL COMMENT '手机号',
- `role` VARCHAR(20) NOT NULL DEFAULT 'ADMIN' COMMENT '角色:ADMIN/SUPER_ADMIN',
- `status` INT NOT NULL DEFAULT 1 COMMENT '状态:0-禁用 1-正常',
- `token_version` BIGINT DEFAULT 0 COMMENT 'Token版本号',
- `refresh_token_hash` VARCHAR(64) DEFAULT NULL COMMENT 'Refresh Token SHA-256哈希',
- `refresh_token_status` VARCHAR(10) DEFAULT NULL COMMENT 'Refresh Token状态:ACTIVE/USED',
- `last_login_time` DATETIME DEFAULT NULL COMMENT '最后登录时间',
- `last_login_ip` VARCHAR(45) DEFAULT NULL COMMENT '最后登录IP',
- `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
- `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
- PRIMARY KEY (`id`),
- UNIQUE KEY `uk_username` (`username`),
- UNIQUE KEY `uk_phone` (`phone`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='管理员表';
- -- 用户会员记录表
- CREATE TABLE IF NOT EXISTS `t_user_membership` (
- `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
- `user_id` BIGINT NOT NULL COMMENT '用户ID',
- `level` VARCHAR(20) NOT NULL COMMENT '会员等级:PLUS/PRO/ULTRA',
- `source` VARCHAR(20) NOT NULL DEFAULT 'SYSTEM' COMMENT '来源:SYSTEM-系统默认 RECHARGE-充值购买 INVITE-邀请奖励 ADMIN_GRANT-运营发放 LICENSE-入驻信息',
- `effective_from` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '生效开始时间',
- `effective_to` DATETIME DEFAULT NULL COMMENT '生效结束时间(NULL表示永久)',
- `status` INT NOT NULL DEFAULT 1 COMMENT '状态:1-有效 0-过期/停用',
- `remark` VARCHAR(256) DEFAULT NULL COMMENT '备注',
- `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
- `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
- PRIMARY KEY (`id`),
- KEY `idx_user_id` (`user_id`),
- KEY `idx_level` (`level`),
- KEY `idx_status` (`status`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户会员记录表';
- -- 会员权益配置表
- CREATE TABLE IF NOT EXISTS `t_membership_benefit` (
- `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
- `level` VARCHAR(20) NOT NULL COMMENT '会员等级:PLUS/PRO/ULTRA',
- `benefit_type` VARCHAR(32) NOT NULL COMMENT '权益类型:DAILY_QUOTA-每日加成 MONTHLY_QUOTA-每月加成 YEARLY_QUOTA-每年加成 MAX_CONCURRENT-并发加成',
- `benefit_value` INT NOT NULL DEFAULT 0 COMMENT '权益数值',
- `description` VARCHAR(256) DEFAULT NULL COMMENT '权益说明',
- `status` INT NOT NULL 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 (`id`),
- UNIQUE KEY `uk_level_type` (`level`, `benefit_type`),
- KEY `idx_level` (`level`),
- KEY `idx_status` (`status`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='会员权益配置表';
- -- 优惠券模板表
- CREATE TABLE IF NOT EXISTS `t_coupon` (
- `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
- `name` VARCHAR(64) NOT NULL COMMENT '优惠券名称',
- `type` VARCHAR(16) NOT NULL COMMENT '类型:CRAWLER-爬虫次数券',
- `value` INT NOT NULL COMMENT '券面值(如:爬虫次数+10)',
- `total_count` INT NOT NULL DEFAULT -1 COMMENT '发行总量(-1表示不限量)',
- `issued_count` INT NOT NULL DEFAULT 0 COMMENT '已发放数量',
- `valid_type` INT NOT NULL DEFAULT 1 COMMENT '有效期类型:1-固定天数 2-固定日期',
- `valid_days` INT DEFAULT NULL COMMENT '领取后有效天数',
- `valid_start` DATETIME DEFAULT NULL COMMENT '固定有效期-开始时间',
- `valid_end` DATETIME DEFAULT NULL COMMENT '固定有效期-结束时间',
- `min_level_code` VARCHAR(16) DEFAULT NULL COMMENT '最低等级要求(NULL表示不限)',
- `status` INT NOT NULL DEFAULT 1 COMMENT '状态:0-下架 1-上架',
- `description` VARCHAR(256) DEFAULT NULL COMMENT '使用说明',
- `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
- `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
- PRIMARY KEY (`id`),
- KEY `idx_type` (`type`),
- KEY `idx_status` (`status`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='优惠券模板表';
- -- 用户优惠券表
- CREATE TABLE IF NOT EXISTS `t_user_coupon` (
- `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
- `user_id` BIGINT NOT NULL COMMENT '用户ID',
- `coupon_id` BIGINT NOT NULL COMMENT '优惠券模板ID',
- `status` INT NOT NULL DEFAULT 0 COMMENT '状态:0-未使用 1-已使用 2-已过期',
- `used_time` DATETIME DEFAULT NULL COMMENT '使用时间',
- `expire_time` DATETIME NOT NULL COMMENT '过期时间',
- `source` VARCHAR(32) NOT NULL DEFAULT 'ISSUE' COMMENT '来源:ISSUE-发放 ACTIVATE-激活码',
- `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
- `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
- PRIMARY KEY (`id`),
- KEY `idx_user_id` (`user_id`),
- KEY `idx_coupon_id` (`coupon_id`),
- KEY `idx_status` (`status`),
- KEY `idx_expire_time` (`expire_time`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户优惠券表';
- -- 爬虫使用记录表
- CREATE TABLE IF NOT EXISTS `t_crawler_usage_log` (
- `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
- `user_id` BIGINT NOT NULL COMMENT '用户ID',
- `usage_date` DATE NOT NULL COMMENT '使用日期',
- `usage_count` INT NOT NULL DEFAULT 1 COMMENT '本次使用次数',
- `platform` VARCHAR(32) DEFAULT NULL COMMENT '平台代码(如:yaoshibang、yaobangmang)',
- `source` VARCHAR(32) NOT NULL DEFAULT 'QUOTA' COMMENT '消耗来源:QUOTA-配额 COUPON-优惠券',
- `remark` VARCHAR(128) DEFAULT NULL COMMENT '备注',
- `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
- PRIMARY KEY (`id`),
- KEY `idx_user_date` (`user_id`, `usage_date`),
- KEY `idx_user_id` (`user_id`),
- KEY `idx_platform` (`platform`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='爬虫使用记录表';
- -- ============================================
- -- 初始化默认等级数据
- -- ============================================
- -- 邀请配置表(运营配置邀请奖励)
- CREATE TABLE IF NOT EXISTS `t_invite_config` (
- `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
- `reward_crawler_count` INT NOT NULL DEFAULT 5 COMMENT '每次邀请奖励爬虫次数(历史字段,已废弃)',
- `reward_type` VARCHAR(16) NOT NULL DEFAULT 'MEMBERSHIP' COMMENT '奖励类型:MEMBERSHIP-赠送会员时长 CRAWLER-爬虫次数(历史)',
- `reward_months` INT NOT NULL DEFAULT 1 COMMENT '邀请人奖励会员时长(月)',
- `max_daily_reward` INT NOT NULL DEFAULT 50 COMMENT '每日最大奖励次数上限',
- `invite_code_expire_days` INT NOT NULL DEFAULT 30 COMMENT '邀请码有效天数',
- `max_invite_per_day` INT NOT NULL DEFAULT 10 COMMENT '每人每天最大邀请次数',
- `max_total_invites` INT NOT NULL DEFAULT 30 COMMENT '单个账号总邀请上限',
- -- 多渠道配置
- `app_download_url` VARCHAR(512) DEFAULT NULL COMMENT 'Windows客户端下载地址',
- `miniapp_path` VARCHAR(256) DEFAULT NULL COMMENT '小程序页面路径(如 /pages/download/index)',
- `miniapp_app_id` VARCHAR(64) DEFAULT NULL COMMENT '小程序AppID',
- `wechat_redirect_url` VARCHAR(512) DEFAULT NULL COMMENT '微信公众号引导跳转URL',
- `dingtalk_app_id` VARCHAR(64) DEFAULT NULL COMMENT '钉钉应用ID',
- `feishu_app_id` VARCHAR(64) DEFAULT NULL COMMENT '飞书应用ID',
- -- 落地页配置
- `landing_title` VARCHAR(128) DEFAULT '邀请你加入智价云(药店版)' COMMENT '落地页标题',
- `landing_desc` VARCHAR(512) DEFAULT NULL COMMENT '落地页描述',
- `app_name` VARCHAR(64) DEFAULT '智价云(药店版)' COMMENT '应用名称',
- `status` INT NOT NULL DEFAULT 1 COMMENT '状态:0-停用 1-启用',
- -- 文案模板配置
- `share_title_template` VARCHAR(256) DEFAULT '{inviter} 邀请你加入{appName}' COMMENT '分享标题模板(占位符:{inviter}、{appName})',
- `copy_text_template` TEXT DEFAULT NULL COMMENT '一键复制文案模板(占位符:{inviter}、{appName}、{inviteLink}、{code})',
- `reward_description` VARCHAR(256) DEFAULT '邀请人每成功邀请1家药店注册,赠送1个月高级会员时长' COMMENT '奖励说明文案(占位符:{rewardMonths})',
- `summary_text_template` VARCHAR(256) DEFAULT '已邀请{totalInvited}家药店,{registeredCount}家注册,累计获得{totalReward}个月高级会员' COMMENT '邀请统计摘要模板(占位符:{totalInvited}、{registeredCount}、{totalReward})',
- -- 各渠道操作提示
- `instruction_windows` VARCHAR(256) DEFAULT NULL COMMENT 'Windows渠道提示文案(占位符:{code})',
- `instruction_app` VARCHAR(256) DEFAULT NULL COMMENT 'App渠道提示文案(占位符:{code})',
- `instruction_miniapp` VARCHAR(256) DEFAULT NULL COMMENT '小程序渠道提示文案(占位符:{code})',
- `instruction_wechat` VARCHAR(256) DEFAULT NULL COMMENT '微信公众号渠道提示文案(占位符:{code})',
- `instruction_dingtalk` VARCHAR(256) DEFAULT NULL COMMENT '钉钉渠道提示文案(占位符:{code}、{appName})',
- `instruction_feishu` VARCHAR(256) DEFAULT NULL COMMENT '飞书渠道提示文案(占位符:{code}、{appName})',
- `instruction_default` VARCHAR(256) DEFAULT NULL COMMENT '默认/未知渠道提示文案(占位符:{code})',
- `remark` VARCHAR(256) DEFAULT NULL COMMENT '备注',
- `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
- `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
- PRIMARY KEY (`id`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='邀请奖励配置表';
- -- 邀请码表
- CREATE TABLE IF NOT EXISTS `t_invite_code` (
- `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
- `user_id` BIGINT NOT NULL COMMENT '所属用户ID',
- `code` VARCHAR(16) NOT NULL COMMENT '邀请码(唯一)',
- `max_uses` INT NOT NULL DEFAULT -1 COMMENT '最大使用次数(-1不限制)',
- `used_count` INT NOT NULL DEFAULT 0 COMMENT '已使用次数(注册)',
- `click_count` INT NOT NULL DEFAULT 0 COMMENT '链接被打开次数',
- `expire_time` DATETIME DEFAULT NULL COMMENT '过期时间',
- `status` INT NOT NULL 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 (`id`),
- UNIQUE KEY `uk_code` (`code`),
- KEY `idx_user_id` (`user_id`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='邀请码表';
- -- 邀请关系表
- CREATE TABLE IF NOT EXISTS `t_invite_relation` (
- `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
- `inviter_id` BIGINT NOT NULL COMMENT '邀请人ID',
- `invitee_id` BIGINT NOT NULL COMMENT '被邀请人ID',
- `invite_code_id` BIGINT NOT NULL COMMENT '使用的邀请码ID',
- `registered` TINYINT NOT NULL DEFAULT 0 COMMENT '是否已注册:0-仅点击 1-已注册',
- `reward_granted` INT NOT NULL DEFAULT 0 COMMENT '已发放奖励次数',
- `status` INT NOT NULL DEFAULT 1 COMMENT '状态:1-有效',
- `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
- `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
- PRIMARY KEY (`id`),
- UNIQUE KEY `uk_invitee` (`invitee_id`),
- KEY `idx_inviter` (`inviter_id`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='邀请关系表';
- -- 爬虫额外配额发放表(邀请奖励 + 运营手动发放 + 购买会员奖励)
- CREATE TABLE IF NOT EXISTS `t_crawler_quota_grant` (
- `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
- `user_id` BIGINT NOT NULL COMMENT '目标用户ID',
- `grant_type` VARCHAR(16) NOT NULL COMMENT '发放类型:INVITE-邀请奖励 ADMIN-运营手动发放 PURCHASE-购买会员奖励',
- `quota_count` INT NOT NULL COMMENT '发放爬虫次数',
- `used_count` INT NOT NULL DEFAULT 0 COMMENT '已使用次数',
- `expire_time` DATETIME DEFAULT NULL COMMENT '过期时间(NULL永不过期)',
- `source_user_id` BIGINT DEFAULT NULL COMMENT '来源用户ID(邀请奖励时记录被邀请人)',
- `remark` VARCHAR(256) DEFAULT NULL COMMENT '备注',
- `status` INT NOT NULL DEFAULT 1 COMMENT '状态:1-有效 2-已用完 3-已过期',
- `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
- `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
- PRIMARY KEY (`id`),
- KEY `idx_user_id` (`user_id`),
- KEY `idx_grant_type` (`grant_type`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='爬虫额外配额发放表';
- INSERT INTO `t_membership_benefit` (`level`, `benefit_type`, `benefit_value`, `description`)
- VALUES
- ('PLUS', 'DAILY_QUOTA', 10, '普通会员:每日有效查询10次'),
- ('PLUS', 'MONTHLY_QUOTA', 300, '普通会员:每月查询300次'),
- ('PLUS', 'YEARLY_QUOTA', 3650, '普通会员:每年查询3650次(10*365)'),
- ('PRO', 'DAILY_QUOTA', 999, '高级会员:每日不限量'),
- ('PRO', 'MONTHLY_QUOTA', 29970, '高级会员:每月查询29970次(999*30)'),
- ('PRO', 'YEARLY_QUOTA', 364635, '高级会员:每年查询364635次(999*365)'),
- ('PRO', 'MAX_CONCURRENT', 5, '高级会员最大并发数'),
- ('ULTRA', 'DAILY_QUOTA', 999, '超级会员:每日不限量'),
- ('ULTRA', 'MONTHLY_QUOTA', 29970, '超级会员:每月查询29970次(999*30)'),
- ('ULTRA', 'YEARLY_QUOTA', 364635, '超级会员:每年查询364635次(999*365)'),
- ('ULTRA', 'MAX_CONCURRENT', 10, '超级会员最大并发数')
- ON DUPLICATE KEY UPDATE
- `benefit_value` = VALUES(`benefit_value`),
- `description` = VALUES(`description`),
- `status` = 1;
- -- ============================================
- -- 支付模块表
- -- ============================================
- -- 支付方案表(套餐定价)
- CREATE TABLE IF NOT EXISTS `t_payment_plan` (
- `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
- `plan_name` VARCHAR(64) NOT NULL COMMENT '方案名称(如:月卡)',
- `plan_code` VARCHAR(20) NOT NULL COMMENT '方案编码(MONTHLY/QUARTERLY/YEARLY)',
- `membership_level` VARCHAR(20) NOT NULL COMMENT '对应会员等级:PLUS/PRO/ULTRA',
- `price` DECIMAL(10,2) NOT NULL COMMENT '价格(元)',
- `original_price` DECIMAL(10,2) DEFAULT NULL COMMENT '原价(元)',
- `duration_days` INT NOT NULL COMMENT '会员有效天数',
- `sort_order` INT DEFAULT 0 COMMENT '排序号',
- `status` INT NOT NULL DEFAULT 1 COMMENT '状态:0-下架 1-上架',
- `description` VARCHAR(256) DEFAULT NULL COMMENT '方案描述',
- `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
- `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
- PRIMARY KEY (`id`),
- UNIQUE KEY `uk_plan_code` (`plan_code`),
- KEY `idx_status` (`status`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='支付方案表';
- -- 支付订单表
- CREATE TABLE IF NOT EXISTS `t_payment_order` (
- `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
- `order_no` VARCHAR(32) NOT NULL COMMENT '订单号',
- `user_id` BIGINT NOT NULL COMMENT '用户ID',
- `plan_id` BIGINT NOT NULL COMMENT '支付方案ID',
- `amount` DECIMAL(10,2) NOT NULL COMMENT '实付金额(元)',
- `channel` VARCHAR(20) NOT NULL COMMENT '支付渠道:WECHAT/ALIPAY',
- `status` VARCHAR(20) NOT NULL DEFAULT 'PENDING' COMMENT '状态:PENDING/PAID/EXPIRED/REFUNDED',
- `qr_code_url` VARCHAR(2048) DEFAULT NULL COMMENT '二维码内容/URL(支付宝电脑网站支付为收银台跳转URL)',
- `paid_channel` VARCHAR(20) DEFAULT NULL COMMENT '实际支付渠道:第一次支付成功时的渠道(可能与当前channel不同)',
- `trade_no` VARCHAR(64) DEFAULT NULL COMMENT '第三方交易号',
- `paid_time` DATETIME DEFAULT NULL COMMENT '支付时间',
- `expire_time` DATETIME NOT NULL COMMENT '订单过期时间',
- `refund_time` DATETIME DEFAULT NULL COMMENT '退款时间',
- `refund_amount` DECIMAL(10,2) DEFAULT NULL COMMENT '退款金额(元)',
- `membership_record_id` BIGINT DEFAULT NULL COMMENT '关联的会员记录ID',
- `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
- `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
- PRIMARY KEY (`id`),
- UNIQUE KEY `uk_order_no` (`order_no`),
- KEY `idx_user_id` (`user_id`),
- KEY `idx_status_expire_time` (`status`, `expire_time`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='支付订单表';
- -- 支付订单表补充联合索引(兼容旧库的幂等 ALTER:用 idx_status_expire_time 替代原单列 idx_status / idx_expire_time)
- SET @idx_exists = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 't_payment_order' AND INDEX_NAME = 'idx_status_expire_time');
- SET @sql = IF(@idx_exists = 0, "ALTER TABLE `t_payment_order` ADD KEY `idx_status_expire_time` (`status`, `expire_time`)", 'SELECT 1');
- PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
- -- 支付订单表补充字段(自动续费扣款相关)
- -- order_type / agreement_id(兼容旧库的幂等 ALTER)
- SET @col_exists = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 't_payment_order' AND COLUMN_NAME = 'order_type');
- SET @sql = IF(@col_exists = 0, "ALTER TABLE `t_payment_order` ADD COLUMN `order_type` VARCHAR(20) NOT NULL DEFAULT 'NORMAL' COMMENT '订单类型:NORMAL/AUTO_DEDUCT' AFTER `qr_code_url`", 'SELECT 1');
- PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
- SET @col_exists = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 't_payment_order' AND COLUMN_NAME = 'agreement_id');
- SET @sql = IF(@col_exists = 0, "ALTER TABLE `t_payment_order` ADD COLUMN `agreement_id` BIGINT DEFAULT NULL COMMENT '关联签约协议ID' AFTER `order_type`", 'SELECT 1');
- PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
- SET @col_exists = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 't_payment_order' AND COLUMN_NAME = 'paid_channel');
- SET @sql = IF(@col_exists = 0, "ALTER TABLE `t_payment_order` ADD COLUMN `paid_channel` VARCHAR(20) DEFAULT NULL COMMENT '实际支付渠道:第一次支付成功时的渠道' AFTER `qr_code_url`", 'SELECT 1');
- PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
- -- 支付订单重复支付记录表(切换渠道后多个渠道都支付成功时保留证据)
- CREATE TABLE IF NOT EXISTS `t_payment_order_extra_payment` (
- `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
- `order_no` VARCHAR(32) NOT NULL COMMENT '订单号',
- `channel` VARCHAR(20) NOT NULL COMMENT '实际支付渠道:WECHAT/ALIPAY',
- `trade_no` VARCHAR(64) NOT NULL COMMENT '第三方交易号',
- `amount` DECIMAL(10,2) NOT NULL COMMENT '支付金额(元)',
- `paid_time` DATETIME NOT NULL COMMENT '支付时间',
- `refund_status` VARCHAR(20) DEFAULT 'PENDING' COMMENT '退款状态:PENDING/SUCCESS/FAILED',
- `refund_trade_no` VARCHAR(64) DEFAULT NULL COMMENT '退款交易号(第三方退款单号)',
- `refund_time` DATETIME DEFAULT NULL COMMENT '退款时间',
- `refund_fail_reason` VARCHAR(500) DEFAULT NULL COMMENT '退款失败原因',
- `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
- `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
- PRIMARY KEY (`id`),
- KEY `idx_order_no` (`order_no`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='支付订单重复支付记录表';
- -- 签约协议表(周期扣款/委托代扣)
- CREATE TABLE IF NOT EXISTS `t_payment_agreement` (
- `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
- `user_id` BIGINT NOT NULL COMMENT '用户ID',
- `plan_id` BIGINT NOT NULL COMMENT '支付方案ID',
- `channel` VARCHAR(20) NOT NULL COMMENT '支付渠道:WECHAT/ALIPAY',
- `period_type` VARCHAR(10) NOT NULL COMMENT '周期类型:MONTH/YEAR',
- `period_amount` DECIMAL(10,2) NOT NULL COMMENT '每期扣款金额(元)',
- `status` VARCHAR(20) NOT NULL DEFAULT 'PENDING' COMMENT '状态:PENDING/SIGNED/UNSIGNED/FAILED',
- `agreement_no` VARCHAR(128) DEFAULT NULL COMMENT '第三方协议号(支付宝agreement_no/微信contract_id)',
- `external_agreement_no` VARCHAR(64) DEFAULT NULL COMMENT '商家自定义协议号(幂等)',
- `sign_time` DATETIME DEFAULT NULL COMMENT '签约时间',
- `unsign_time` DATETIME DEFAULT NULL COMMENT '解约时间',
- `next_deduct_time` DATETIME DEFAULT NULL COMMENT '下次扣款时间',
- `last_deduct_time` DATETIME DEFAULT NULL COMMENT '上次扣款时间',
- `consecutive_fail_count` INT NOT NULL DEFAULT 0 COMMENT '连续扣款失败次数',
- `unsign_reason` VARCHAR(256) DEFAULT NULL COMMENT '解约原因',
- `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
- `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
- PRIMARY KEY (`id`),
- UNIQUE KEY `uk_external_agreement_no` (`external_agreement_no`),
- KEY `idx_user_id` (`user_id`),
- KEY `idx_agreement_no` (`agreement_no`),
- KEY `idx_status_deduct` (`status`, `next_deduct_time`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='支付签约协议表';
- -- 初始化支付方案(普通会员免费,仅高级会员付费)
- INSERT INTO `t_payment_plan` (`plan_code`, `plan_name`, `membership_level`, `price`, `original_price`, `duration_days`, `sort_order`, `status`, `description`)
- VALUES
- ('MONTHLY_PLUS', '普通会员(免费)', 'PLUS', 0, NULL, 0, 1, 0, '普通会员免费开放,注册即拥有'),
- ('YEARLY_PLUS', '普通会员(免费)', 'PLUS', 0, NULL, 0, 2, 0, '普通会员免费开放,注册即拥有'),
- ('MONTHLY_PRO', '高级会员·月卡', 'PRO', 29.90, 59.90, 30, 3, 1, '每天不限量· 1个月29.9(原价59.9)'),
- ('YEARLY_PRO', '高级会员·年卡', 'PRO', 299.90,599.90, 365, 4, 1, '每天不限量· 1年299.9(原价599.9)'),
- ('ULTRA', '超级会员·连锁专享','ULTRA',0, NULL, 0, 5, 0, '连锁专用,多店铺管理,敬请期待')
- ON DUPLICATE KEY UPDATE
- `plan_name` = VALUES(`plan_name`),
- `membership_level` = VALUES(`membership_level`),
- `price` = VALUES(`price`),
- `original_price` = VALUES(`original_price`),
- `duration_days` = VALUES(`duration_days`),
- `sort_order` = VALUES(`sort_order`),
- `status` = VALUES(`status`),
- `description` = VALUES(`description`);
- -- ============================================
- -- B2B平台账号绑定相关表
- -- ============================================
- -- B2B平台账号绑定表
- CREATE TABLE IF NOT EXISTS `t_platform_account` (
- `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
- `user_id` BIGINT NOT NULL COMMENT '用户ID',
- `platform_code` VARCHAR(50) NOT NULL COMMENT '平台代码',
- `platform_name` VARCHAR(100) NOT NULL COMMENT '平台名称',
- `account_encrypted` TEXT NOT NULL COMMENT '平台账号(加密)',
- `password_encrypted` TEXT NOT NULL COMMENT '平台密码(加密)',
- `enabled` TINYINT(1) DEFAULT 1 COMMENT '是否启用',
- `last_verify_time` DATETIME DEFAULT NULL COMMENT '最后验证时间',
- `verify_status` VARCHAR(20) DEFAULT 'PENDING' COMMENT '验证状态:PENDING/SUCCESS/FAILED',
- `fail_reason` VARCHAR(500) DEFAULT NULL COMMENT '失败原因',
- `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
- `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
- PRIMARY KEY (`id`),
- KEY `idx_user_id` (`user_id`),
- KEY `idx_platform_code` (`platform_code`),
- UNIQUE KEY `uk_user_platform` (`user_id`, `platform_code`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='B2B平台账号绑定表';
- -- 入驻信息表
- CREATE TABLE IF NOT EXISTS `t_business_license` (
- `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
- `user_id` BIGINT NOT NULL COMMENT '用户ID',
- `license_image_url` VARCHAR(500) DEFAULT NULL COMMENT '营业执照图片URL',
- `credit_code` VARCHAR(50) DEFAULT NULL COMMENT '统一社会信用代码',
- `pharmacy_name` VARCHAR(200) DEFAULT NULL COMMENT '药店名称',
- `legal_person` VARCHAR(50) DEFAULT NULL COMMENT '法人姓名',
- `registered_address` VARCHAR(500) DEFAULT NULL COMMENT '注册地址',
- `business_scope` TEXT DEFAULT NULL COMMENT '经营范围',
- `valid_from` DATETIME DEFAULT NULL COMMENT '有效期起始日期',
- `valid_to` DATETIME DEFAULT NULL COMMENT '有效期截止日期(NULL表示长期有效)',
- `remark` VARCHAR(500) DEFAULT NULL COMMENT '备注',
- `review_status` VARCHAR(20) DEFAULT 'PENDING' COMMENT '审核状态:PENDING/APPROVED/REJECTED',
- `reviewer_id` BIGINT DEFAULT NULL COMMENT '审核人ID',
- `review_time` DATETIME DEFAULT NULL COMMENT '审核时间',
- `reject_reason` VARCHAR(500) DEFAULT NULL COMMENT '驳回原因',
- `show_verified_badge` TINYINT(1) DEFAULT 0 COMMENT '是否显示认证标识',
- `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
- `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
- PRIMARY KEY (`id`),
- KEY `idx_user_id` (`user_id`),
- KEY `idx_review_status` (`review_status`),
- UNIQUE KEY `uk_user_id` (`user_id`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='入驻信息表';
- -- 平台配置表
- CREATE TABLE IF NOT EXISTS `t_platform_config` (
- `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
- `platform_code` VARCHAR(50) NOT NULL COMMENT '平台代码',
- `platform_name` VARCHAR(100) NOT NULL COMMENT '平台名称',
- `enabled` TINYINT(1) DEFAULT 1 COMMENT '是否启用',
- `requires_recharge` TINYINT(1) DEFAULT 0 COMMENT '是否需要充值',
- `query_cost` INT DEFAULT 1 COMMENT '每次查询消耗配额',
- `priority` INT DEFAULT 0 COMMENT '优先级',
- `under_maintenance` TINYINT(1) DEFAULT 0 COMMENT '是否维护中',
- `maintenance_notice` VARCHAR(500) DEFAULT NULL COMMENT '维护公告',
- `description` VARCHAR(500) DEFAULT NULL COMMENT '平台描述',
- `official_url` VARCHAR(500) DEFAULT NULL COMMENT '平台官网链接',
- `binding_instructions` TEXT DEFAULT NULL COMMENT '绑定说明',
- `sort_order` INT DEFAULT 0 COMMENT '排序号',
- `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
- `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
- `created_by` BIGINT DEFAULT NULL COMMENT '创建人ID',
- `updated_by` BIGINT DEFAULT NULL COMMENT '更新人ID',
- PRIMARY KEY (`id`),
- UNIQUE KEY `uk_platform_code` (`platform_code`),
- KEY `idx_enabled` (`enabled`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='平台配置表';
- -- ============================================
- -- 操作审计日志表
- -- ============================================
- -- 操作审计日志表
- CREATE TABLE IF NOT EXISTS `t_operation_audit_log` (
- `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
- `operator_id` BIGINT DEFAULT NULL COMMENT '操作人ID',
- `operator_name` VARCHAR(100) DEFAULT NULL COMMENT '操作人姓名/昵称',
- `operator_role` VARCHAR(20) DEFAULT NULL COMMENT '操作人角色:USER/ADMIN/SUPER_ADMIN',
- `operation_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '操作时间',
- `ip_address` VARCHAR(50) DEFAULT NULL COMMENT '操作IP地址',
- `user_agent` VARCHAR(500) DEFAULT NULL COMMENT '操作设备信息',
- `module` VARCHAR(50) DEFAULT NULL COMMENT '操作模块:USER/LEVEL/PLATFORM/LICENSE/INVITE/COUPON/SYSTEM',
- `operation_type` VARCHAR(50) DEFAULT NULL COMMENT '操作类型代码',
- `operation_source` VARCHAR(20) DEFAULT NULL COMMENT '操作来源:ADMIN_CREATE-管理员新增 USER_SUBMIT-用户自主提交 EXTERNAL-外部系统',
- `description` VARCHAR(200) DEFAULT NULL COMMENT '操作描述',
- `target_type` VARCHAR(50) DEFAULT NULL COMMENT '目标对象类型',
- `target_id` BIGINT DEFAULT NULL COMMENT '目标对象ID',
- `target_identifier` VARCHAR(200) DEFAULT NULL COMMENT '目标对象标识',
- `before_data` TEXT DEFAULT NULL COMMENT '操作前的数据快照(JSON)',
- `after_data` TEXT DEFAULT NULL COMMENT '操作后的数据快照(JSON)',
- `result` VARCHAR(20) DEFAULT 'SUCCESS' COMMENT '操作结果:SUCCESS/FAILED/PARTIAL',
- `error_message` TEXT DEFAULT NULL COMMENT '错误信息',
- `request_url` VARCHAR(500) DEFAULT NULL COMMENT '请求URL',
- `request_method` VARCHAR(10) DEFAULT NULL COMMENT '请求方法',
- `request_params` TEXT DEFAULT NULL COMMENT '请求参数(脱敏)',
- `response_code` INT DEFAULT NULL COMMENT '响应状态码',
- `duration` BIGINT DEFAULT NULL COMMENT '耗时(毫秒)',
- `remark` VARCHAR(500) DEFAULT NULL COMMENT '备注说明',
- `is_sensitive` TINYINT(1) DEFAULT 0 COMMENT '是否敏感操作',
- `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
- PRIMARY KEY (`id`),
- KEY `idx_operator_id` (`operator_id`),
- KEY `idx_operation_time` (`operation_time`),
- KEY `idx_module` (`module`),
- KEY `idx_operation_type` (`operation_type`),
- KEY `idx_operation_source` (`operation_source`),
- KEY `idx_target` (`target_type`, `target_id`),
- KEY `idx_is_sensitive` (`is_sensitive`),
- KEY `idx_result` (`result`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='操作审计日志表';
- -- ============================================
- -- 搜索记录表(完整比价快照)
- -- ============================================
- CREATE TABLE IF NOT EXISTS `t_search_record` (
- `id` BIGINT NOT NULL COMMENT '主键ID(雪花算法)',
- `user_id` BIGINT NOT NULL COMMENT '用户ID',
- `drug_name` VARCHAR(200) NOT NULL COMMENT '药品名称',
- `searched_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '搜索时间',
- `status_text` VARCHAR(500) DEFAULT NULL COMMENT '状态文案',
- `platform_results` LONGTEXT DEFAULT NULL COMMENT '平台搜索结果(JSON文本)',
- `search_log` LONGTEXT DEFAULT NULL COMMENT '搜索日志(JSON文本,可为null)',
- `platform_count` INT NOT NULL DEFAULT 0 COMMENT '涉及平台数量(冗余存储,避免列表查询时解析大字段)',
- `quote_count` INT NOT NULL DEFAULT 0 COMMENT '总报价条数(冗余存储,避免列表查询时解析大字段)',
- `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
- PRIMARY KEY (`id`),
- KEY `idx_user_id` (`user_id`),
- KEY `idx_user_searched` (`user_id`, `searched_at`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='搜索记录表(完整比价快照)';
- -- ============================================
- -- 平台会话快照表
- -- ============================================
- CREATE TABLE IF NOT EXISTS `t_platform_session` (
- `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
- `user_id` BIGINT NOT NULL COMMENT '用户ID',
- `platform_code` VARCHAR(50) NOT NULL COMMENT '平台代码',
- `platform_name` VARCHAR(100) DEFAULT NULL COMMENT '平台展示名称',
- `login_url` VARCHAR(500) DEFAULT NULL COMMENT '平台登录页地址',
- `account_label` VARCHAR(200) DEFAULT NULL COMMENT '账号标签',
- `captured_at` DATETIME DEFAULT NULL COMMENT 'Cookie捕获时间',
- `updated_at` DATETIME DEFAULT NULL COMMENT '绑定元数据更新时间',
- `cookies_encrypted` LONGTEXT DEFAULT NULL COMMENT '加密后的Cookie JSON数组',
- `version` INT DEFAULT 1 COMMENT '数据版本号',
- `expires_at` DATETIME DEFAULT NULL COMMENT '最早过期的Cookie时间',
- `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
- `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
- PRIMARY KEY (`id`),
- UNIQUE KEY `uk_user_platform` (`user_id`, `platform_code`),
- KEY `idx_user_id` (`user_id`),
- KEY `idx_expires_at` (`expires_at`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='平台会话快照表';
- -- ============================================
- -- 关注/收藏表
- -- ============================================
- CREATE TABLE IF NOT EXISTS `t_watchlist` (
- `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
- `user_id` BIGINT NOT NULL COMMENT '用户ID',
- `drug_name` VARCHAR(200) NOT NULL COMMENT '药品通用名',
- `spec` VARCHAR(100) DEFAULT NULL COMMENT '规格',
- `manufacturer` VARCHAR(200) DEFAULT NULL COMMENT '厂家',
- `min_price` DECIMAL(10,2) DEFAULT NULL COMMENT '关注时最低价',
- `min_price_platform` VARCHAR(32) DEFAULT NULL COMMENT '最低价平台代码',
- `last_price` DECIMAL(10,2) DEFAULT NULL COMMENT '上次查询价格',
- `price_change` DECIMAL(10,2) DEFAULT NULL COMMENT '价格变动(正=涨价,负=降价)',
- `last_check_time` DATETIME DEFAULT NULL COMMENT '最后价格检查时间',
- `status` INT NOT NULL 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 (`id`),
- KEY `idx_user_id` (`user_id`),
- KEY `idx_status` (`status`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='关注/收藏表';
- -- ============================================
- -- 初始化默认数据
- -- ============================================
- -- 初始化MVP启用的3个核心平台配置
- INSERT INTO `t_platform_config` (`platform_code`, `platform_name`, `enabled`, `requires_recharge`, `query_cost`, `priority`, `description`, `official_url`, `binding_instructions`, `sort_order`)
- VALUES
- ('yaoshibang', '药师帮', 1, 1, 1, 1, '国内最大B2B医药批发平台,覆盖全国药品供应商', 'https://www.yaoshibang.com', '请输入您在药师帮平台的手机号和密码', 1),
- ('yaobangmang', '药帮忙', 1, 0, 1, 2, '专业医药B2B采购平台', 'https://www.yaobangmang.com', '请输入您在药帮忙平台的账号和密码', 2),
- ('yiyaocheng', '1药城', 1, 0, 1, 3, '1药网旗下B2B医药平台', 'https://www.1yaocheng.com', '请输入您在1药城平台的账号和密码', 3)
- ON DUPLICATE KEY UPDATE
- `description` = VALUES(`description`),
- `official_url` = VALUES(`official_url`);
- -- 初始化邀请配置(邀请人30天高级会员,被邀请人30天高级会员,总邀请上限30人)
- INSERT INTO `t_invite_config` (`id`, `reward_type`, `reward_months`, `reward_crawler_count`, `max_daily_reward`, `invite_code_expire_days`, `max_invite_per_day`, `max_total_invites`, `landing_title`, `landing_desc`, `app_name`, `status`)
- VALUES
- (1, 'MEMBERSHIP', 1, 5, 50, 30, 10, 30, '邀请你加入智价云(药店版)', '登录智价云(药店版)平台,聚合比价查低价', '智价云(药店版)', 1)
- ON DUPLICATE KEY UPDATE
- `reward_type` = 'MEMBERSHIP',
- `landing_desc` = '登录智价云(药店版)平台,聚合比价查低价',
- `max_total_invites` = VALUES(`max_total_invites`);
- -- ============================================
- -- DDL: 支付宝开放能力回调记录表
- -- 用于持久化应用网关推送和授权回调信息,便于后续排查和审计
- -- ============================================
- CREATE TABLE IF NOT EXISTS `t_alipay_callback_record` (
- `id` BIGINT NOT NULL COMMENT '主键ID(雪花算法)',
- `type` VARCHAR(50) NOT NULL COMMENT '回调类型:gateway(应用网关) / auth_callback(授权回调)',
- `app_id` VARCHAR(64) DEFAULT NULL COMMENT '支付宝应用ID',
- `msg_method` VARCHAR(128) DEFAULT NULL COMMENT '网关消息方法名',
- `auth_code` VARCHAR(256) DEFAULT NULL COMMENT '授权码(已脱敏)',
- `source` VARCHAR(64) DEFAULT NULL COMMENT '来源',
- `state` VARCHAR(256) DEFAULT NULL COMMENT '状态参数',
- `params` TEXT DEFAULT NULL COMMENT '原始请求参数(JSON文本)',
- `status` VARCHAR(20) DEFAULT 'RECEIVED' COMMENT '处理状态:RECEIVED/PROCESSED/IGNORED',
- `error_msg` VARCHAR(500) DEFAULT NULL COMMENT '错误信息',
- `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
- PRIMARY KEY (`id`),
- KEY `idx_type_create_time` (`type`, `create_time`),
- KEY `idx_app_id` (`app_id`),
- KEY `idx_msg_method` (`msg_method`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='支付宝开放能力回调记录表';
- -- ============================================
- -- DDL: 支付宝安心付卡模板表(周期卡)
- -- 记录安心付周期卡模板信息,与支付方案一一对应
- -- ============================================
- CREATE TABLE IF NOT EXISTS `t_alipay_anxin_card` (
- `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
- `plan_id` BIGINT NOT NULL COMMENT '关联支付方案ID(t_payment_plan.id)',
- `card_id` VARCHAR(128) DEFAULT NULL COMMENT '支付宝卡模板ID',
- `card_name` VARCHAR(128) DEFAULT NULL COMMENT '卡名称',
- `card_type` VARCHAR(20) DEFAULT 'PERIOD_PAY' COMMENT '卡类型:PERIOD_PAY(周期卡)',
- `period_amount` DECIMAL(10,2) DEFAULT NULL COMMENT '每期扣款金额(元)',
- `period_days` INT DEFAULT NULL COMMENT '扣款周期天数',
- `total_periods` INT DEFAULT NULL COMMENT '总期数(NULL表示无限期)',
- `status` VARCHAR(20) DEFAULT 'PENDING' COMMENT '状态:PENDING/EFFECTIVE/FROZEN/INVALID',
- `appointment_url` VARCHAR(2048) DEFAULT NULL COMMENT '预约链接(小程序跳转地址)',
- `raw_response` TEXT DEFAULT NULL COMMENT '原始创建响应(JSON)',
- `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
- `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
- PRIMARY KEY (`id`),
- UNIQUE KEY `uk_plan_id` (`plan_id`),
- KEY `idx_card_id` (`card_id`),
- KEY `idx_status` (`status`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='支付宝安心付卡模板表';
- -- ============================================
- -- DDL: 支付宝安心付扣款订单记录表
- -- 记录每一次安心付周期卡扣款通知信息
- -- ============================================
- CREATE TABLE IF NOT EXISTS `t_alipay_anxin_order_record` (
- `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
- `user_id` BIGINT DEFAULT NULL COMMENT '系统用户ID(通过out_biz_no匹配)',
- `plan_id` BIGINT NOT NULL COMMENT '关联支付方案ID',
- `card_id` VARCHAR(128) DEFAULT NULL COMMENT '支付宝卡模板ID',
- `order_id` VARCHAR(128) DEFAULT NULL COMMENT '支付宝售卖订单ID',
- `sub_order_id` VARCHAR(128) DEFAULT NULL COMMENT '核销/扣款子订单ID',
- `out_biz_no` VARCHAR(128) DEFAULT NULL COMMENT '商家业务号(存储系统用户ID)',
- `alipay_user_id` VARCHAR(128) DEFAULT NULL COMMENT '支付宝用户ID',
- `deduct_amount` DECIMAL(10,2) DEFAULT NULL COMMENT '扣款金额(元)',
- `deduct_status` VARCHAR(20) DEFAULT NULL COMMENT '扣款状态:SUCCESS/FAIL',
- `deduct_time` DATETIME DEFAULT NULL COMMENT '扣款时间',
- `membership_activated` TINYINT(1) DEFAULT 0 COMMENT '会员是否已激活',
- `order_no` VARCHAR(32) DEFAULT NULL COMMENT '关联支付订单号',
- `raw_params` TEXT DEFAULT NULL COMMENT '原始通知参数(JSON)',
- `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
- `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
- PRIMARY KEY (`id`),
- KEY `idx_sub_order_id` (`sub_order_id`),
- KEY `idx_order_id` (`order_id`),
- KEY `idx_user_id` (`user_id`),
- KEY `idx_card_id` (`card_id`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='支付宝安心付扣款订单记录表';
|