-- 微信支付分账模块 -- 执行前请将 fa_ 替换为实际表前缀 CREATE TABLE IF NOT EXISTS `fa_shopro_split_receiver` ( `id` int(11) NOT NULL AUTO_INCREMENT, `role_type` enum('platform','promoter','regional_agent') NOT NULL COMMENT '角色类型', `role_id` int(11) NOT NULL DEFAULT 0 COMMENT '关联ID', `receiver_type` enum('MERCHANT_ID','PERSONAL_OPENID') NOT NULL DEFAULT 'PERSONAL_OPENID' COMMENT '接收方类型', `receiver_account` varchar(64) NOT NULL COMMENT '商户号或openid', `receiver_name` varchar(100) DEFAULT NULL COMMENT '接收方名称', `relation_type` varchar(30) DEFAULT 'USER' COMMENT '关系类型', `wx_status` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0=待同步,1=已同步,2=同步失败', `wx_message` varchar(255) DEFAULT NULL COMMENT '微信返回信息', `status` enum('normal','forbidden') NOT NULL DEFAULT 'normal', `createtime` int(10) NOT NULL, `updatetime` int(10) NOT NULL, PRIMARY KEY (`id`) USING BTREE, KEY `role_type` (`role_type`,`role_id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='分账接收方'; CREATE TABLE IF NOT EXISTS `fa_shopro_split_rule` ( `id` int(11) NOT NULL AUTO_INCREMENT, `role_type` enum('platform','promoter','regional_agent') NOT NULL COMMENT '角色类型', `rule_type` enum('rate','money') NOT NULL DEFAULT 'rate' COMMENT '规则类型', `rule_value` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '比例或金额', `priority` int(11) NOT NULL DEFAULT 0 COMMENT '优先级', `max_rate` decimal(5,2) NOT NULL DEFAULT 30.00 COMMENT '最大比例', `status` enum('normal','forbidden') NOT NULL DEFAULT 'normal', `createtime` int(10) NOT NULL, `updatetime` int(10) NOT NULL, PRIMARY KEY (`id`) USING BTREE, KEY `role_type` (`role_type`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='分账规则'; CREATE TABLE IF NOT EXISTS `fa_shopro_split_order` ( `id` int(11) NOT NULL AUTO_INCREMENT, `order_id` int(11) NOT NULL COMMENT '订单ID', `order_sn` varchar(50) NOT NULL COMMENT '订单号', `transaction_id` varchar(64) DEFAULT NULL COMMENT '微信支付单号', `out_order_no` varchar(64) NOT NULL COMMENT '商户分账单号', `total_amount` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '可分账金额', `split_amount` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '已分账金额', `status` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0=待分账,1=分账中,2=成功,3=部分成功,4=失败', `wx_result` text COMMENT '微信返回', `retry_count` int(11) NOT NULL DEFAULT 0, `next_retry_time` int(10) DEFAULT NULL, `createtime` int(10) NOT NULL, `updatetime` int(10) NOT NULL, PRIMARY KEY (`id`) USING BTREE, UNIQUE KEY `out_order_no` (`out_order_no`) USING BTREE, KEY `order_id` (`order_id`) USING BTREE, KEY `status` (`status`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='分账订单'; CREATE TABLE IF NOT EXISTS `fa_shopro_split_order_receiver` ( `id` int(11) NOT NULL AUTO_INCREMENT, `split_order_id` int(11) NOT NULL, `receiver_id` int(11) NOT NULL DEFAULT 0, `role_type` varchar(30) NOT NULL, `amount` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '分账金额(元)', `description` varchar(80) DEFAULT NULL, `status` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0=待分账,1=成功,2=失败', `wx_detail_id` varchar(64) DEFAULT NULL, `fail_reason` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE, KEY `split_order_id` (`split_order_id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='分账明细'; CREATE TABLE IF NOT EXISTS `fa_shopro_split_config` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, `value` varchar(2500) DEFAULT NULL, `group` varchar(50) DEFAULT NULL, `description` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE, UNIQUE KEY `name` (`name`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='分账配置'; INSERT IGNORE INTO `fa_shopro_split_config` (`name`, `value`, `group`, `description`) VALUES ('split_enable', '0', 'basic', '分账总开关'), ('split_mode', 'wechat', 'basic', '分账模式:wallet=仅钱包,wechat=仅微信分账,both=两者'), ('split_timing', 'payed', 'basic', '分账时机:payed/confirm/finish'), ('split_max_rate', '30', 'basic', '全局最大分账比例(%)'), ('split_retry_max', '5', 'basic', '最大重试次数'), ('split_retry_interval', '300', 'basic', '重试间隔(秒)'), ('platform_receiver_account', '', 'platform', '平台接收方商户号'), ('platform_receiver_name', '平台', 'platform', '平台接收方名称'); INSERT IGNORE INTO `fa_shopro_split_rule` (`role_type`, `rule_type`, `rule_value`, `priority`, `max_rate`, `status`, `createtime`, `updatetime`) VALUES ('regional_agent', 'rate', 1.00, 30, 30.00, 'normal', UNIX_TIMESTAMP(), UNIX_TIMESTAMP()), ('promoter', 'rate', 5.00, 20, 30.00, 'normal', UNIX_TIMESTAMP(), UNIX_TIMESTAMP()), ('platform', 'rate', 0.00, 10, 30.00, 'normal', UNIX_TIMESTAMP(), UNIX_TIMESTAMP());