更新数据库结构

This commit is contained in:
技术老胡
2026-03-10 13:47:28 +08:00
parent 54ad21ac8f
commit 9de902231f
54 changed files with 5070 additions and 501 deletions

View File

@@ -1,11 +0,0 @@
-- 系统配置表
CREATE TABLE IF NOT EXISTS `ma_system_config` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`config_key` varchar(100) NOT NULL DEFAULT '' COMMENT '配置项键名(唯一标识,直接使用字段名)',
`config_value` text COMMENT '配置项值支持字符串、数字、JSON等',
`created_at` datetime DEFAULT NULL COMMENT '创建时间',
`updated_at` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_config_key` (`config_key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统配置表';

View File

@@ -0,0 +1,248 @@
-- ============================================
-- 支付系统核心表结构(优化版)
-- ============================================
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- =======================
-- 1. 商户表
-- =======================
DROP TABLE IF EXISTS `ma_merchant`;
CREATE TABLE `ma_merchant` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`merchant_no` varchar(32) NOT NULL DEFAULT '' COMMENT '商户号(唯一,对外标识)',
`merchant_name` varchar(100) NOT NULL DEFAULT '' COMMENT '商户名称',
`funds_mode` varchar(20) NOT NULL DEFAULT 'direct' COMMENT '资金模式direct-直连, wallet-归集, hybrid-混合',
`status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '状态0-禁用, 1-启用',
`created_at` datetime DEFAULT NULL COMMENT '创建时间',
`updated_at` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_merchant_no` (`merchant_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商户表';
-- =======================
-- 2. 商户应用表
-- =======================
DROP TABLE IF EXISTS `ma_merchant_app`;
CREATE TABLE `ma_merchant_app` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`merchant_id` bigint unsigned NOT NULL DEFAULT 0 COMMENT '商户ID',
`api_type` varchar(32) NOT NULL DEFAULT 'default' COMMENT '接口类型openapi, epay, custom 等',
`app_id` varchar(64) NOT NULL DEFAULT '' COMMENT '应用ID',
`app_secret` varchar(128) NOT NULL DEFAULT '' COMMENT '应用密钥',
`app_name` varchar(100) NOT NULL DEFAULT '' COMMENT '应用名称',
`status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '状态0-禁用, 1-启用',
`created_at` datetime DEFAULT NULL COMMENT '创建时间',
`updated_at` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_app_id` (`app_id`),
KEY `idx_merchant_id` (`merchant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商户应用表';
-- =======================
-- 3. 支付方式字典表
-- =======================
DROP TABLE IF EXISTS `ma_pay_method`;
CREATE TABLE `ma_pay_method` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`method_code` varchar(32) NOT NULL DEFAULT '' COMMENT '支付方式编码,如 alipay,wechat',
`method_name` varchar(50) NOT NULL DEFAULT '' COMMENT '支付方式名称',
`icon` varchar(255) NOT NULL DEFAULT '' COMMENT '图标',
`sort` int(11) NOT NULL DEFAULT 0 COMMENT '排序',
`status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '状态0-禁用, 1-启用',
`created_at` datetime DEFAULT NULL COMMENT '创建时间',
`updated_at` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_method_code` (`method_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='支付方式字典表';
-- =======================
-- 4. 支付插件注册表
-- =======================
DROP TABLE IF EXISTS `ma_pay_plugin`;
CREATE TABLE `ma_pay_plugin` (
`plugin_code` varchar(32) NOT NULL DEFAULT '' COMMENT '插件编码(主键)',
`plugin_name` varchar(50) NOT NULL DEFAULT '' COMMENT '插件名称',
`class_name` varchar(255) NOT NULL DEFAULT '' COMMENT '插件类名(完整命名空间)',
`status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '状态0-禁用, 1-启用',
`created_at` datetime DEFAULT NULL COMMENT '创建时间',
`updated_at` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`plugin_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='支付插件注册表';
-- =======================
-- 5. 支付通道表
-- =======================
DROP TABLE IF EXISTS `ma_pay_channel`;
CREATE TABLE `ma_pay_channel` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`merchant_id` bigint unsigned NOT NULL DEFAULT 0 COMMENT '商户ID冗余方便统计',
`merchant_app_id` bigint unsigned NOT NULL DEFAULT 0 COMMENT '商户应用ID关联 ma_merchant_app.id',
`chan_code` varchar(32) NOT NULL DEFAULT '' COMMENT '通道编码(唯一)',
`chan_name` varchar(100) NOT NULL DEFAULT '' COMMENT '通道显示名称',
`plugin_code` varchar(32) NOT NULL DEFAULT '' COMMENT '支付插件编码',
`method_id` bigint unsigned NOT NULL DEFAULT 0 COMMENT '支付方式ID关联 ma_pay_method.id',
`config_json` json DEFAULT NULL COMMENT '通道插件配置参数JSON对应插件配置包括 enabled_products 等)',
`split_ratio` decimal(5,2) NOT NULL DEFAULT 100.00 COMMENT '分成比例(%',
`chan_cost` decimal(5,2) NOT NULL DEFAULT 0.00 COMMENT '通道成本(%',
`chan_mode` varchar(50) NOT NULL DEFAULT 'wallet' COMMENT '通道模式wallet-入余额, direct-直连到商户',
`daily_limit` decimal(12,2) NOT NULL DEFAULT 0.00 COMMENT '单日限额0表示不限制',
`daily_cnt` int(11) NOT NULL DEFAULT 0 COMMENT '单日限笔0表示不限制',
`min_amount` decimal(12,2) DEFAULT NULL COMMENT '单笔最小金额NULL表示不限制',
`max_amount` decimal(12,2) DEFAULT NULL COMMENT '单笔最大金额NULL表示不限制',
`status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '状态0-禁用, 1-启用',
`sort` int(11) NOT NULL DEFAULT 0 COMMENT '排序,越小优先级越高',
`created_at` datetime DEFAULT NULL COMMENT '创建时间',
`updated_at` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_chan_code` (`chan_code`),
KEY `idx_mch_app_method` (`merchant_id`,`merchant_app_id`,`method_id`,`status`,`sort`),
KEY `idx_plugin_method` (`plugin_code`,`method_id`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='支付通道表';
-- =======================
-- 6. 支付订单表
-- =======================
DROP TABLE IF EXISTS `ma_pay_order`;
CREATE TABLE `ma_pay_order` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`order_id` varchar(32) NOT NULL DEFAULT '' COMMENT '支付订单号(系统生成,唯一)',
`merchant_id` bigint unsigned NOT NULL DEFAULT 0 COMMENT '商户ID',
`merchant_app_id` bigint unsigned NOT NULL DEFAULT 0 COMMENT '商户应用ID',
`mch_order_no` varchar(64) NOT NULL DEFAULT '' COMMENT '商户订单号(幂等)',
`method_id` bigint unsigned NOT NULL DEFAULT 0 COMMENT '支付方式ID关联 ma_pay_method.id',
`channel_id` bigint unsigned NOT NULL DEFAULT 0 COMMENT '支付通道ID关联 ma_pay_channel.id',
`amount` decimal(12,2) NOT NULL DEFAULT 0.00 COMMENT '订单金额(元)',
`real_amount` decimal(12,2) NOT NULL DEFAULT 0.00 COMMENT '实际支付金额(元,扣除手续费后)',
`fee` decimal(12,2) NOT NULL DEFAULT 0.00 COMMENT '手续费(元,可选,用于对账)',
`currency` varchar(3) NOT NULL DEFAULT 'CNY' COMMENT '币种,如 CNY',
`subject` varchar(255) NOT NULL DEFAULT '' COMMENT '订单标题',
`body` varchar(500) NOT NULL DEFAULT '' COMMENT '订单描述',
`status` tinyint(1) NOT NULL DEFAULT 0 COMMENT '订单状态0-PENDING,1-SUCCESS,2-FAIL,3-CLOSED',
`chan_order_no` varchar(128) NOT NULL DEFAULT '' COMMENT '渠道订单号(渠道返回)',
`chan_trade_no` varchar(128) NOT NULL DEFAULT '' COMMENT '渠道交易号(部分渠道有)',
`pay_at` datetime DEFAULT NULL COMMENT '支付时间',
`expire_at` datetime DEFAULT NULL COMMENT '订单过期时间',
`client_ip` varchar(50) NOT NULL DEFAULT '' COMMENT '客户端IP',
`notify_stat` tinyint(1) NOT NULL DEFAULT 0 COMMENT '商户通知状态0-未通知,1-已通知成功',
`notify_cnt` int(11) NOT NULL DEFAULT 0 COMMENT '通知次数',
`extra` json DEFAULT NULL COMMENT '扩展字段JSON存储支付参数、退款信息等',
`created_at` datetime DEFAULT NULL COMMENT '创建时间',
`updated_at` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_order_id` (`order_id`),
UNIQUE KEY `uk_mch_order` (`merchant_id`,`merchant_app_id`,`mch_order_no`),
KEY `idx_mch_app_created` (`merchant_id`,`merchant_app_id`,`created_at`),
KEY `idx_method_id` (`method_id`),
KEY `idx_channel_id` (`channel_id`),
KEY `idx_status_created` (`status`,`created_at`),
KEY `idx_pay_at` (`pay_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='支付订单表';
-- =======================
-- 7. 支付回调日志表
-- =======================
DROP TABLE IF EXISTS `ma_pay_callback_log`;
CREATE TABLE `ma_pay_callback_log` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`order_id` varchar(32) NOT NULL DEFAULT '' COMMENT '支付订单号(系统订单号)',
`channel_id` bigint unsigned NOT NULL DEFAULT 0 COMMENT '通道ID关联 ma_pay_channel.id',
`callback_type` varchar(20) NOT NULL DEFAULT '' COMMENT '回调类型notify-异步通知, return-同步返回',
`request_data` text COMMENT '请求原始数据(完整回调参数)',
`verify_status` tinyint(1) NOT NULL DEFAULT 0 COMMENT '验签状态0-失败,1-成功',
`process_status` tinyint(1) NOT NULL DEFAULT 0 COMMENT '处理状态0-未处理,1-已处理',
`process_result` text COMMENT '处理结果JSON或文本',
`created_at` datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`),
KEY `idx_order_created` (`order_id`,`created_at`),
KEY `idx_channel_created` (`channel_id`,`created_at`),
KEY `idx_callback_type` (`callback_type`),
KEY `idx_verify_status` (`verify_status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='支付回调日志表';
-- =======================
-- 8. 商户通知任务表
-- =======================
DROP TABLE IF EXISTS `ma_notify_task`;
CREATE TABLE `ma_notify_task` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`order_id` varchar(32) NOT NULL DEFAULT '' COMMENT '支付订单号(系统订单号)',
`merchant_id` bigint unsigned NOT NULL DEFAULT 0 COMMENT '商户ID',
`merchant_app_id` bigint unsigned NOT NULL DEFAULT 0 COMMENT '商户应用ID',
`notify_url` varchar(255) NOT NULL DEFAULT '' COMMENT '通知地址',
`notify_data` text COMMENT '通知数据JSON格式',
`status` varchar(20) NOT NULL DEFAULT 'PENDING' COMMENT '状态PENDING-待通知,SUCCESS-成功,FAIL-失败',
`retry_cnt` int(11) NOT NULL DEFAULT 0 COMMENT '重试次数',
`next_retry_at` datetime DEFAULT NULL COMMENT '下次重试时间',
`last_notify_at` datetime DEFAULT NULL COMMENT '最后通知时间',
`last_response` text COMMENT '最后响应内容',
`created_at` datetime DEFAULT NULL COMMENT '创建时间',
`updated_at` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_order_id` (`order_id`),
KEY `idx_status_retry` (`status`,`next_retry_at`),
KEY `idx_mch_app` (`merchant_id`,`merchant_app_id`),
KEY `idx_created_at` (`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商户通知任务表';
-- =======================
-- 9. 系统配置表
-- =======================
DROP TABLE IF EXISTS `ma_system_config`;
CREATE TABLE IF NOT EXISTS `ma_system_config` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`config_key` varchar(100) NOT NULL DEFAULT '' COMMENT '配置项键名(唯一标识,直接使用字段名)',
`config_value` text COMMENT '配置项值支持字符串、数字、JSON等',
`created_at` datetime DEFAULT NULL COMMENT '创建时间',
`updated_at` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_config_key` (`config_key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统配置表';
-- =======================
-- 10. 初始化基础数据
-- =======================
-- 初始化支付方式字典
INSERT INTO `ma_pay_method` (`method_code`, `method_name`, `icon`, `sort`, `status`) VALUES
('alipay', '支付宝', '', 1, 1),
('wechat', '微信支付', '', 2, 1),
('unionpay','云闪付', '', 3, 1)
ON DUPLICATE KEY UPDATE
`method_name` = VALUES(`method_name`),
`icon` = VALUES(`icon`),
`sort` = VALUES(`sort`),
`status` = VALUES(`status`);
-- =======================
-- 11. 管理员用户表ma_admin
-- =======================
DROP TABLE IF EXISTS `ma_admin`;
CREATE TABLE `ma_admin` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`user_name` varchar(50) NOT NULL DEFAULT '' COMMENT '用户名(登录账号,唯一)',
`password` varchar(255) DEFAULT NULL COMMENT '登录密码hashNULL 或空表示使用默认开发密码)',
`nick_name` varchar(50) NOT NULL DEFAULT '' COMMENT '昵称',
`avatar` varchar(255) NOT NULL DEFAULT '' COMMENT '头像地址',
`mobile` varchar(20) NOT NULL DEFAULT '' COMMENT '手机号',
`email` varchar(100) NOT NULL DEFAULT '' COMMENT '邮箱',
`status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '状态0-禁用, 1-启用',
`login_ip` varchar(45) NOT NULL DEFAULT '' COMMENT '最后登录IP',
`login_at` datetime DEFAULT NULL COMMENT '最后登录时间',
`created_at` datetime DEFAULT NULL COMMENT '创建时间',
`updated_at` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_user_name` (`user_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='管理员用户表';
-- 初始化一个超级管理员账号(开发环境默认密码 123456对应 AuthService::validatePassword 逻辑)
INSERT INTO `ma_admin` (`user_name`, `password`, `nick_name`, `status`, `created_at`)
VALUES ('admin', NULL, '超级管理员', 1, NOW())
ON DUPLICATE KEY UPDATE
`nick_name` = VALUES(`nick_name`),
`status` = VALUES(`status`);
SET FOREIGN_KEY_CHECKS = 1;