From 8b35cfd56883970c579dd3610b539ac3c835aef2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=AF=E4=B9=90=E5=8A=A0=E5=86=B0?= <11869599+addie66@user.noreply.gitee.com> Date: Wed, 30 Sep 2026 14:01:38 +0800 Subject: [PATCH] =?UTF-8?q?```=20feat(shopro=5Fhuifu):=20=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E8=81=94=E8=A1=8C=E5=8F=B7=E8=A1=A8=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=E5=92=8C=E7=BB=93=E7=AE=97=E8=B4=B9=E7=8E=87?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 install_bank_branch_table.sql 脚本用于独立创建联行号表 - 修改 ImportBankBranch 命令,当联行号表不存在时自动创建,无需手动执行 repair-menu - 添加 upgradeSchema 方法支持独立运行数据库升级脚本 - 在配置界面新增 onboard_settle_fee_rate 字段,支持设置D1结算费率 - 更新 HuifuOnboardBusiOpen 类使用配置的结算费率参数 ``` --- .../shopro_huifu/command/ImportBankBranch.php | 12 +++++++-- addons/shopro_huifu/command/RepairMenu.php | 2 +- .../data/install_bank_branch_table.sql | 17 +++++++++++++ addons/shopro_huifu/library/Installer.php | 25 ++++++++++++++++++- .../library/onboard/HuifuOnboardBusiOpen.php | 5 ++++ .../assets/js/backend/shopro_huifu/config.js | 1 + addons/shopro_huifu/upgrade_huifu_onboard.sql | 1 + .../admin/view/shopro_huifu/config/index.html | 6 +++++ 8 files changed, 65 insertions(+), 4 deletions(-) create mode 100644 addons/shopro_huifu/data/install_bank_branch_table.sql diff --git a/addons/shopro_huifu/command/ImportBankBranch.php b/addons/shopro_huifu/command/ImportBankBranch.php index ec9b3e0..a7764c2 100644 --- a/addons/shopro_huifu/command/ImportBankBranch.php +++ b/addons/shopro_huifu/command/ImportBankBranch.php @@ -2,6 +2,7 @@ namespace addons\shopro_huifu\command; +use addons\shopro_huifu\library\Installer; use addons\shopro_huifu\library\onboard\HuifuOnboardBankBranchImporter; use think\console\Command; use think\console\Input; @@ -37,8 +38,15 @@ class ImportBankBranch extends Command try { Db::execute('SELECT 1 FROM `' . config('database.prefix') . 'shopro_huifu_bank_branch` LIMIT 1'); } catch (\Throwable $e) { - $output->error('表 shopro_huifu_bank_branch 不存在,请先执行 php think shopro_huifu:repair-menu'); - return 1; + $output->writeln('表 shopro_huifu_bank_branch 不存在,正在自动创建 ...'); + try { + Installer::ensureBankBranchTable($output); + Db::execute('SELECT 1 FROM `' . config('database.prefix') . 'shopro_huifu_bank_branch` LIMIT 1'); + } catch (\Throwable $inner) { + $output->error('创建 shopro_huifu_bank_branch 失败: ' . $inner->getMessage()); + $output->writeln('也可手动执行: php think shopro_huifu:repair-menu'); + return 1; + } } $file = trim((string) $input->getOption('file')); diff --git a/addons/shopro_huifu/command/RepairMenu.php b/addons/shopro_huifu/command/RepairMenu.php index c13d401..abc4602 100644 --- a/addons/shopro_huifu/command/RepairMenu.php +++ b/addons/shopro_huifu/command/RepairMenu.php @@ -23,9 +23,9 @@ class RepairMenu extends Command return; } + Installer::upgradeSchema($output); Installer::installMenu($output); Installer::installSplitMenu($output); - Installer::upgradePayTypeColumn($output); \app\common\library\Menu::enable('shopro_huifu/config'); \app\common\library\Menu::enable('shopro/split'); Installer::grantRulesToShoproGroups($output); diff --git a/addons/shopro_huifu/data/install_bank_branch_table.sql b/addons/shopro_huifu/data/install_bank_branch_table.sql new file mode 100644 index 0000000..0913317 --- /dev/null +++ b/addons/shopro_huifu/data/install_bank_branch_table.sql @@ -0,0 +1,17 @@ +-- 仅创建联行号表(可单独执行,不依赖 repair-menu) +-- 用法: mysql -u用户 -p 数据库名 < addons/shopro_huifu/data/install_bank_branch_table.sql +-- 表前缀默认 fa_,若不同请全局替换 fa_ + +CREATE TABLE IF NOT EXISTS `fa_shopro_huifu_bank_branch` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `branch_code` varchar(20) NOT NULL COMMENT '联行号', + `branch_name` varchar(255) NOT NULL COMMENT '支行全称', + `bank_name` varchar(64) DEFAULT NULL COMMENT '银行简称', + `prov_id` char(6) DEFAULT NULL, + `area_id` char(6) DEFAULT NULL, + `status` tinyint(1) NOT NULL DEFAULT 1, + PRIMARY KEY (`id`), + UNIQUE KEY `uniq_branch_code` (`branch_code`), + KEY `branch_name` (`branch_name`(64)), + KEY `area_id` (`area_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='汇付银行支行联行号'; diff --git a/addons/shopro_huifu/library/Installer.php b/addons/shopro_huifu/library/Installer.php index dbab4d2..3ffbfc6 100644 --- a/addons/shopro_huifu/library/Installer.php +++ b/addons/shopro_huifu/library/Installer.php @@ -149,12 +149,35 @@ class Installer */ protected static function recreateMenu(array $menu, $parent, $rootName, array $legacyNames = []) { - foreach (array_merge($legacyNames, [$rootName]) as $name) { + $toDelete = array_unique(array_filter(array_merge( + $legacyNames, + [$rootName], + array_column($menu, 'name') + ))); + foreach ($toDelete as $name) { \app\common\library\Menu::delete($name); } \app\common\library\Menu::create($menu, $parent); } + /** + * 补跑升级 SQL(repair-menu / 导入联行号前可单独调用,忽略已存在字段/表) + */ + public static function upgradeSchema($output = null) + { + $addonDir = ADDON_PATH . 'shopro_huifu' . DS; + self::log($output, '检查/升级汇付数据表 ...'); + self::importSqlFile($addonDir . 'upgrade_huifu_split.sql', $output, true); + self::importSqlFile($addonDir . 'upgrade_huifu_onboard.sql', $output, true); + self::importSqlFile($addonDir . 'upgrade_huifu_onboard_account.sql', $output, true); + self::upgradePayTypeColumn($output); + } + + public static function ensureBankBranchTable($output = null) + { + self::upgradeSchema($output); + } + /** * 汇付/分账菜单统一挂到「商城配置」 */ diff --git a/addons/shopro_huifu/library/onboard/HuifuOnboardBusiOpen.php b/addons/shopro_huifu/library/onboard/HuifuOnboardBusiOpen.php index e57648f..7e3dd0a 100644 --- a/addons/shopro_huifu/library/onboard/HuifuOnboardBusiOpen.php +++ b/addons/shopro_huifu/library/onboard/HuifuOnboardBusiOpen.php @@ -58,6 +58,9 @@ class HuifuOnboardBusiOpen $settleBatch = $this->config->get('onboard_settle_batch_no', '300'); + // 汇付费率单位为百分比;AMT * 0.0005 对应 fee_rate=0.05。 + $settleFeeRate = max(0.05, (float) $this->config->get('onboard_settle_fee_rate', '0.05')); + $cashType = $this->config->get('onboard_cash_type', 'D1'); $cashFix = $this->config->get('onboard_cash_fix_amt', '0.03'); @@ -82,6 +85,8 @@ class HuifuOnboardBusiOpen 'fixed_ratio' => '0.00', + 'fee_rate' => number_format($settleFeeRate, 2, '.', ''), + ]]; diff --git a/addons/shopro_huifu/public/assets/js/backend/shopro_huifu/config.js b/addons/shopro_huifu/public/assets/js/backend/shopro_huifu/config.js index 5f82ecd..1243ae2 100644 --- a/addons/shopro_huifu/public/assets/js/backend/shopro_huifu/config.js +++ b/addons/shopro_huifu/public/assets/js/backend/shopro_huifu/config.js @@ -24,6 +24,7 @@ define(['jquery', 'bootstrap', 'backend', 'form'], function ($, undefined, Backe onboard_required: '1', onboard_settle_cycle: 'D1', onboard_settle_batch_no: '300', + onboard_settle_fee_rate: '0.05', onboard_notify_url: '' } }, diff --git a/addons/shopro_huifu/upgrade_huifu_onboard.sql b/addons/shopro_huifu/upgrade_huifu_onboard.sql index a81210b..4c27ff3 100644 --- a/addons/shopro_huifu/upgrade_huifu_onboard.sql +++ b/addons/shopro_huifu/upgrade_huifu_onboard.sql @@ -31,6 +31,7 @@ INSERT IGNORE INTO `__PREFIX__shopro_huifu_config` (`name`, `value`, `group`, `d ('onboard_required', '1', 'onboard', '汇付分账模式下强制个人进件'), ('onboard_settle_cycle', 'D1', 'onboard', '个人入驻默认结算周期'), ('onboard_settle_batch_no', '300', 'onboard', '结算批次号'), +('onboard_settle_fee_rate', '0.05', 'onboard', 'D1结算手续费率(百分比,AMT*0.0005对应0.05)'), ('onboard_cash_type', 'D1', 'onboard', '取现类型'), ('onboard_cash_fix_amt', '0.03', 'onboard', '取现固定手续费'), ('onboard_cash_fee_rate', '0', 'onboard', '取现费率'), diff --git a/application/admin/view/shopro_huifu/config/index.html b/application/admin/view/shopro_huifu/config/index.html index cd55c19..3cb954a 100644 --- a/application/admin/view/shopro_huifu/config/index.html +++ b/application/admin/view/shopro_huifu/config/index.html @@ -45,6 +45,12 @@ + + +
+ 汇付按百分比传值;0.05 表示 AMT × 0.0005,不能低于渠道商/上级商户底价。 +
+
只读