mirror of
https://gitee.com/technical-laohu/mpay_v2_webman.git
synced 2026-04-05 17:44:27 +08:00
更新
This commit is contained in:
169
database/20260320_align_current_schema.sql
Normal file
169
database/20260320_align_current_schema.sql
Normal file
@@ -0,0 +1,169 @@
|
||||
-- Current schema alignment for the updated merchant / merchant-app model.
|
||||
-- Target DB: MySQL 5.7+
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
|
||||
-- =========================================================
|
||||
-- 1. Expand ma_mer for admin + merchant backend scenarios
|
||||
-- =========================================================
|
||||
ALTER TABLE `ma_mer`
|
||||
ADD COLUMN `merchant_short_name` varchar(60) NOT NULL DEFAULT '' COMMENT '商户简称' AFTER `merchant_name`,
|
||||
ADD COLUMN `merchant_type` varchar(20) NOT NULL DEFAULT 'company' COMMENT '商户类型:company/individual/other' AFTER `merchant_short_name`,
|
||||
ADD COLUMN `group_code` varchar(32) NOT NULL DEFAULT '' COMMENT '商户分组编码' AFTER `merchant_type`,
|
||||
ADD COLUMN `legal_name` varchar(100) NOT NULL DEFAULT '' COMMENT '法人姓名' AFTER `funds_mode`,
|
||||
ADD COLUMN `contact_name` varchar(50) NOT NULL DEFAULT '' COMMENT '联系人姓名' AFTER `legal_name`,
|
||||
ADD COLUMN `contact_phone` varchar(20) NOT NULL DEFAULT '' COMMENT '联系人手机号' AFTER `contact_name`,
|
||||
ADD COLUMN `contact_email` varchar(100) NOT NULL DEFAULT '' COMMENT '联系人邮箱' AFTER `contact_phone`,
|
||||
ADD COLUMN `website` varchar(255) NOT NULL DEFAULT '' COMMENT '商户官网' AFTER `contact_email`,
|
||||
ADD COLUMN `province` varchar(50) NOT NULL DEFAULT '' COMMENT '省份' AFTER `website`,
|
||||
ADD COLUMN `city` varchar(50) NOT NULL DEFAULT '' COMMENT '城市' AFTER `province`,
|
||||
ADD COLUMN `address` varchar(255) NOT NULL DEFAULT '' COMMENT '详细地址' AFTER `city`,
|
||||
ADD COLUMN `callback_domain` varchar(255) NOT NULL DEFAULT '' COMMENT '回调域名' AFTER `address`,
|
||||
ADD COLUMN `callback_ip_whitelist` text COMMENT '回调IP白名单' AFTER `callback_domain`,
|
||||
ADD COLUMN `risk_level` varchar(20) NOT NULL DEFAULT 'standard' COMMENT '风控等级:low/standard/high' AFTER `callback_ip_whitelist`,
|
||||
ADD COLUMN `settlement_mode` varchar(20) NOT NULL DEFAULT 'auto' COMMENT '结算方式:auto/manual' AFTER `risk_level`,
|
||||
ADD COLUMN `settlement_cycle` varchar(20) NOT NULL DEFAULT 't1' COMMENT '结算周期:d0/t1/manual' AFTER `settlement_mode`,
|
||||
ADD COLUMN `settlement_account_name` varchar(100) NOT NULL DEFAULT '' COMMENT '结算账户名' AFTER `settlement_cycle`,
|
||||
ADD COLUMN `settlement_account_no` varchar(100) NOT NULL DEFAULT '' COMMENT '结算账户号' AFTER `settlement_account_name`,
|
||||
ADD COLUMN `settlement_bank_name` varchar(100) NOT NULL DEFAULT '' COMMENT '结算银行名称' AFTER `settlement_account_no`,
|
||||
ADD COLUMN `settlement_bank_branch` varchar(100) NOT NULL DEFAULT '' COMMENT '结算支行名称' AFTER `settlement_bank_name`,
|
||||
ADD COLUMN `single_limit` decimal(12,2) NOT NULL DEFAULT 0.00 COMMENT '单笔限额(元)' AFTER `settlement_bank_branch`,
|
||||
ADD COLUMN `daily_limit` decimal(12,2) NOT NULL DEFAULT 0.00 COMMENT '日限额(元)' AFTER `single_limit`,
|
||||
ADD COLUMN `remark` varchar(500) NOT NULL DEFAULT '' COMMENT '备注' AFTER `daily_limit`,
|
||||
ADD COLUMN `extra` json DEFAULT NULL COMMENT '扩展字段(JSON)' AFTER `remark`;
|
||||
|
||||
ALTER TABLE `ma_mer`
|
||||
ADD KEY `idx_group_code` (`group_code`),
|
||||
ADD KEY `idx_contact_phone` (`contact_phone`),
|
||||
ADD KEY `idx_status` (`status`);
|
||||
|
||||
-- =========================================================
|
||||
-- 2. Expand ma_pay_app for merchant app backend settings
|
||||
-- =========================================================
|
||||
ALTER TABLE `ma_pay_app`
|
||||
ADD COLUMN `package_code` varchar(32) NOT NULL DEFAULT '' COMMENT '商户套餐编码' AFTER `app_name`,
|
||||
ADD COLUMN `notify_url` varchar(255) NOT NULL DEFAULT '' COMMENT '异步通知地址' AFTER `package_code`,
|
||||
ADD COLUMN `return_url` varchar(255) NOT NULL DEFAULT '' COMMENT '同步跳转地址' AFTER `notify_url`,
|
||||
ADD COLUMN `callback_mode` varchar(20) NOT NULL DEFAULT 'server' COMMENT '回调模式:server/server+page/manual' AFTER `return_url`,
|
||||
ADD COLUMN `sign_type` varchar(20) NOT NULL DEFAULT 'md5' COMMENT '签名方式' AFTER `callback_mode`,
|
||||
ADD COLUMN `order_expire_minutes` int(11) NOT NULL DEFAULT 30 COMMENT '订单超时时间(分钟)' AFTER `sign_type`,
|
||||
ADD COLUMN `callback_retry_limit` int(11) NOT NULL DEFAULT 6 COMMENT '回调重试次数' AFTER `order_expire_minutes`,
|
||||
ADD COLUMN `ip_whitelist` text COMMENT 'IP白名单' AFTER `callback_retry_limit`,
|
||||
ADD COLUMN `amount_min` decimal(12,2) NOT NULL DEFAULT 0.00 COMMENT '单笔最小金额' AFTER `ip_whitelist`,
|
||||
ADD COLUMN `amount_max` decimal(12,2) NOT NULL DEFAULT 0.00 COMMENT '单笔最大金额' AFTER `amount_min`,
|
||||
ADD COLUMN `daily_limit` decimal(12,2) NOT NULL DEFAULT 0.00 COMMENT '日限额' AFTER `amount_max`,
|
||||
ADD COLUMN `notify_enabled` tinyint(1) NOT NULL DEFAULT 1 COMMENT '是否开启通知:0-否,1-是' AFTER `daily_limit`,
|
||||
ADD COLUMN `remark` varchar(500) NOT NULL DEFAULT '' COMMENT '备注' AFTER `notify_enabled`,
|
||||
ADD COLUMN `extra` json DEFAULT NULL COMMENT '扩展字段(JSON)' AFTER `remark`;
|
||||
|
||||
ALTER TABLE `ma_pay_app`
|
||||
ADD KEY `idx_api_type` (`api_type`),
|
||||
ADD KEY `idx_status` (`status`);
|
||||
|
||||
-- =========================================================
|
||||
-- 3. Merchant backend user table
|
||||
-- =========================================================
|
||||
CREATE TABLE IF NOT EXISTS `ma_mer_user` (
|
||||
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`mer_id` bigint unsigned NOT NULL DEFAULT 0 COMMENT '商户ID',
|
||||
`username` varchar(50) NOT NULL DEFAULT '' COMMENT '登录账号',
|
||||
`password` varchar(255) DEFAULT NULL COMMENT '登录密码hash',
|
||||
`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 '邮箱',
|
||||
`role_code` varchar(32) NOT NULL DEFAULT 'owner' COMMENT '角色编码',
|
||||
`is_owner` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否商户主账号:0-否,1-是',
|
||||
`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_username` (`username`),
|
||||
KEY `idx_mer_id` (`mer_id`),
|
||||
KEY `idx_status` (`status`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商户后台用户表';
|
||||
|
||||
-- =========================================================
|
||||
-- 4. Compatibility views for legacy code paths
|
||||
-- =========================================================
|
||||
DROP VIEW IF EXISTS `ma_merchant`;
|
||||
CREATE VIEW `ma_merchant` AS
|
||||
SELECT
|
||||
`id`,
|
||||
`merchant_no`,
|
||||
`merchant_name`,
|
||||
`merchant_short_name`,
|
||||
`merchant_type`,
|
||||
`group_code`,
|
||||
`funds_mode`,
|
||||
`legal_name`,
|
||||
`contact_name`,
|
||||
`contact_phone`,
|
||||
`contact_email`,
|
||||
`website`,
|
||||
`province`,
|
||||
`city`,
|
||||
`address`,
|
||||
`callback_domain`,
|
||||
`callback_ip_whitelist`,
|
||||
`risk_level`,
|
||||
`settlement_mode`,
|
||||
`settlement_cycle`,
|
||||
`settlement_account_name`,
|
||||
`settlement_account_no`,
|
||||
`settlement_bank_name`,
|
||||
`settlement_bank_branch`,
|
||||
`single_limit`,
|
||||
`daily_limit`,
|
||||
`status`,
|
||||
`remark`,
|
||||
`extra`,
|
||||
`created_at`,
|
||||
`updated_at`
|
||||
FROM `ma_mer`;
|
||||
|
||||
DROP VIEW IF EXISTS `ma_merchant_app`;
|
||||
CREATE VIEW `ma_merchant_app` AS
|
||||
SELECT
|
||||
`id`,
|
||||
`mer_id` AS `merchant_id`,
|
||||
`api_type`,
|
||||
`app_code` AS `app_id`,
|
||||
`app_secret`,
|
||||
`app_name`,
|
||||
`package_code`,
|
||||
`notify_url`,
|
||||
`return_url`,
|
||||
`callback_mode`,
|
||||
`sign_type`,
|
||||
`order_expire_minutes`,
|
||||
`callback_retry_limit`,
|
||||
`ip_whitelist`,
|
||||
`amount_min`,
|
||||
`amount_max`,
|
||||
`daily_limit`,
|
||||
`notify_enabled`,
|
||||
`status`,
|
||||
`remark`,
|
||||
`extra`,
|
||||
`created_at`,
|
||||
`updated_at`
|
||||
FROM `ma_pay_app`;
|
||||
|
||||
DROP VIEW IF EXISTS `ma_pay_method`;
|
||||
CREATE VIEW `ma_pay_method` AS
|
||||
SELECT
|
||||
`id`,
|
||||
`type` AS `method_code`,
|
||||
`name` AS `method_name`,
|
||||
`icon`,
|
||||
`sort`,
|
||||
`status`,
|
||||
`created_at`,
|
||||
`updated_at`
|
||||
FROM `ma_pay_type`;
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
@@ -78,13 +78,13 @@ ON DUPLICATE KEY UPDATE
|
||||
|
||||
-- 7) 支付通道(为测试商户 M001 / 应用 1001 初始化拉卡拉通道)
|
||||
INSERT INTO `ma_pay_channel` (
|
||||
`merchant_id`,
|
||||
`merchant_app_id`,
|
||||
`mer_id`,
|
||||
`app_id`,
|
||||
`chan_code`,
|
||||
`chan_name`,
|
||||
`plugin_code`,
|
||||
`method_id`,
|
||||
`config_json`,
|
||||
`pay_type_id`,
|
||||
`config`,
|
||||
`split_ratio`,
|
||||
`chan_cost`,
|
||||
`chan_mode`,
|
||||
@@ -98,16 +98,16 @@ INSERT INTO `ma_pay_channel` (
|
||||
`updated_at`
|
||||
)
|
||||
SELECT
|
||||
m.id AS merchant_id,
|
||||
app.id AS merchant_app_id,
|
||||
m.id AS mer_id,
|
||||
app.id AS app_id,
|
||||
'lakala_alipay' AS chan_code,
|
||||
'拉卡拉-支付宝' AS chan_name,
|
||||
'lakala' AS plugin_code,
|
||||
pm.id AS method_id,
|
||||
JSON_OBJECT('notify_url', 'https://example.com/notify') AS config_json,
|
||||
pm.id AS pay_type_id,
|
||||
JSON_OBJECT('notify_url', 'https://example.com/notify') AS config,
|
||||
100.00 AS split_ratio,
|
||||
0.00 AS chan_cost,
|
||||
'wallet' AS chan_mode,
|
||||
0 AS chan_mode,
|
||||
0.00 AS daily_limit,
|
||||
0 AS daily_cnt,
|
||||
0.01 AS min_amount,
|
||||
@@ -122,8 +122,8 @@ JOIN `ma_pay_method` pm ON pm.method_code = 'alipay'
|
||||
ON DUPLICATE KEY UPDATE
|
||||
`chan_name` = VALUES(`chan_name`),
|
||||
`plugin_code` = VALUES(`plugin_code`),
|
||||
`method_id` = VALUES(`method_id`),
|
||||
`config_json` = VALUES(`config_json`),
|
||||
`pay_type_id` = VALUES(`pay_type_id`),
|
||||
`config` = VALUES(`config`),
|
||||
`split_ratio` = VALUES(`split_ratio`),
|
||||
`chan_cost` = VALUES(`chan_cost`),
|
||||
`chan_mode` = VALUES(`chan_mode`),
|
||||
@@ -136,13 +136,13 @@ ON DUPLICATE KEY UPDATE
|
||||
`updated_at` = NOW();
|
||||
|
||||
INSERT INTO `ma_pay_channel` (
|
||||
`merchant_id`,
|
||||
`merchant_app_id`,
|
||||
`mer_id`,
|
||||
`app_id`,
|
||||
`chan_code`,
|
||||
`chan_name`,
|
||||
`plugin_code`,
|
||||
`method_id`,
|
||||
`config_json`,
|
||||
`pay_type_id`,
|
||||
`config`,
|
||||
`split_ratio`,
|
||||
`chan_cost`,
|
||||
`chan_mode`,
|
||||
@@ -156,16 +156,16 @@ INSERT INTO `ma_pay_channel` (
|
||||
`updated_at`
|
||||
)
|
||||
SELECT
|
||||
m.id AS merchant_id,
|
||||
app.id AS merchant_app_id,
|
||||
m.id AS mer_id,
|
||||
app.id AS app_id,
|
||||
'lakala_wechat' AS chan_code,
|
||||
'拉卡拉-微信支付' AS chan_name,
|
||||
'lakala' AS plugin_code,
|
||||
pm.id AS method_id,
|
||||
JSON_OBJECT('notify_url', 'https://example.com/notify') AS config_json,
|
||||
pm.id AS pay_type_id,
|
||||
JSON_OBJECT('notify_url', 'https://example.com/notify') AS config,
|
||||
100.00 AS split_ratio,
|
||||
0.00 AS chan_cost,
|
||||
'wallet' AS chan_mode,
|
||||
0 AS chan_mode,
|
||||
0.00 AS daily_limit,
|
||||
0 AS daily_cnt,
|
||||
0.01 AS min_amount,
|
||||
@@ -180,8 +180,8 @@ JOIN `ma_pay_method` pm ON pm.method_code = 'wechat'
|
||||
ON DUPLICATE KEY UPDATE
|
||||
`chan_name` = VALUES(`chan_name`),
|
||||
`plugin_code` = VALUES(`plugin_code`),
|
||||
`method_id` = VALUES(`method_id`),
|
||||
`config_json` = VALUES(`config_json`),
|
||||
`pay_type_id` = VALUES(`pay_type_id`),
|
||||
`config` = VALUES(`config`),
|
||||
`split_ratio` = VALUES(`split_ratio`),
|
||||
`chan_cost` = VALUES(`chan_cost`),
|
||||
`chan_mode` = VALUES(`chan_mode`),
|
||||
@@ -191,4 +191,4 @@ ON DUPLICATE KEY UPDATE
|
||||
`max_amount` = VALUES(`max_amount`),
|
||||
`status` = VALUES(`status`),
|
||||
`sort` = VALUES(`sort`),
|
||||
`updated_at` = NOW();
|
||||
`updated_at` = NOW();
|
||||
|
||||
Reference in New Issue
Block a user