From c4d60a25bddd10122ba3f00064ee4a23a6d28a83 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 17:01:33 +0800 Subject: [PATCH] =?UTF-8?q?```=20feat(shopro=5Fhuifu):=20=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E8=82=A1=E4=BB=BD=E5=88=B6=E9=93=B6=E8=A1=8C=E5=92=8C?= =?UTF-8?q?=E5=9F=8E=E5=95=86=E8=A1=8C=E8=81=94=E8=A1=8C=E5=8F=B7=E5=AF=BC?= =?UTF-8?q?=E5=85=A5=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加 joint 预设选项,支持导入招商、浦发、民生等股份制银行及常用城商行 - 更新命令行选项,增加 --preset=joint 参数说明 - 重构联行号导入过滤器,添加股份制银行关键词配置 - 优化 README 文档,更新导入命令使用说明 ``` --- addons/shopro_huifu/README.md | 7 +- .../shopro_huifu/command/ImportBankBranch.php | 11 +- .../HuifuOnboardBankBranchImportFilter.php | 109 ++++++++++++++---- 3 files changed, 100 insertions(+), 27 deletions(-) diff --git a/addons/shopro_huifu/README.md b/addons/shopro_huifu/README.md index 2706886..09eb68a 100644 --- a/addons/shopro_huifu/README.md +++ b/addons/shopro_huifu/README.md @@ -95,10 +95,13 @@ php think shopro_huifu:verify # 1) 导入内置种子(约 120 条,主要城市 + 贵州/广东,无需下载) php think shopro_huifu:import-bank-branch --seed -# 2) 下载 CSV 并导入(默认 main:主要省市 + 四大行/农商行,约5万条) +# 2) 下载 CSV 并导入(默认 main:四大行/农商行,约5万条) php think shopro_huifu:import-bank-branch --download -# 3) 手动下载后导入(下载失败时用) +# 3) 追加导入股份制/常用城商行(招商/浦发/民生等,约3万条,增量不清库) +php think shopro_huifu:import-bank-branch --file=addons/shopro_huifu/data/cnaps.csv --preset=joint + +# 4) 手动下载后导入(下载失败时用) # https://hf-mirror.com/datasets/gweesin/CNAPS/resolve/main/cnaps.csv php think shopro_huifu:import-bank-branch --file=addons/shopro_huifu/data/cnaps.csv diff --git a/addons/shopro_huifu/command/ImportBankBranch.php b/addons/shopro_huifu/command/ImportBankBranch.php index 39a7fc2..f71f139 100644 --- a/addons/shopro_huifu/command/ImportBankBranch.php +++ b/addons/shopro_huifu/command/ImportBankBranch.php @@ -3,6 +3,7 @@ namespace addons\shopro_huifu\command; use addons\shopro_huifu\library\Installer; +use addons\shopro_huifu\library\onboard\HuifuOnboardBankBranchImportFilter; use addons\shopro_huifu\library\onboard\HuifuOnboardBankBranchImporter; use think\console\Command; use think\console\Input; @@ -22,7 +23,7 @@ class ImportBankBranch extends Command ->addOption('truncate', 't', Option::VALUE_NONE, 'Clear table before import (optional, default skip existing)') ->addOption('update-existing', 'u', Option::VALUE_NONE, 'Update rows when branch_code already exists') ->addOption('check', 'c', Option::VALUE_NONE, 'Check duplicate branch_code / branch_name in DB only') - ->addOption('preset', 'p', Option::VALUE_OPTIONAL, 'Import scope: main(~50k, default) / full(all)', 'main') + ->addOption('preset', 'p', Option::VALUE_OPTIONAL, 'Import scope: main(~50k) / joint(~30k) / full(all)', 'main') ->addOption('limit', 'l', Option::VALUE_OPTIONAL, 'Max rows to import (0=all)', 0) ->addOption('batch', 'b', Option::VALUE_OPTIONAL, 'Batch size', 500) ->addOption('format', null, Option::VALUE_OPTIONAL, 'Force format: csv|json|auto', 'auto') @@ -91,6 +92,7 @@ class ImportBankBranch extends Command $output->writeln(' php think shopro_huifu:import-bank-branch --seed'); $output->writeln(' php think shopro_huifu:import-bank-branch --download'); $output->writeln(' php think shopro_huifu:import-bank-branch --file=addons/shopro_huifu/data/cnaps.csv'); + $output->writeln(' php think shopro_huifu:import-bank-branch --file=addons/shopro_huifu/data/cnaps.csv --preset=joint'); return 1; } } @@ -110,7 +112,12 @@ class ImportBankBranch extends Command ]; $output->writeln('导入文件: ' . $file); - $output->writeln('导入范围: ' . ($preset === 'full' ? '全国全量(约15万)' : '主要省市 + 四大行/农商行等(约5万)')); + try { + $output->writeln('导入范围: ' . HuifuOnboardBankBranchImportFilter::presetLabel($preset)); + } catch (\Throwable $e) { + $output->error($e->getMessage()); + return 1; + } if ($options['dry_run']) { $output->writeln('[dry-run] 仅解析,不写入数据库'); } diff --git a/addons/shopro_huifu/library/onboard/HuifuOnboardBankBranchImportFilter.php b/addons/shopro_huifu/library/onboard/HuifuOnboardBankBranchImportFilter.php index a9e3059..973941d 100644 --- a/addons/shopro_huifu/library/onboard/HuifuOnboardBankBranchImportFilter.php +++ b/addons/shopro_huifu/library/onboard/HuifuOnboardBankBranchImportFilter.php @@ -3,7 +3,10 @@ namespace addons\shopro_huifu\library\onboard; /** - * 联行号导入范围过滤(默认 main ≈ 5 万条:主要省市 + 四大行/农商行等常用银行) + * 联行号导入范围过滤 + * - main ≈5万:主要省市 + 四大行/交邮/农商行 + * - joint ≈3万:主要省市 + 招商/浦发等股份制及常用城商行 + * - full :全国全量 */ class HuifuOnboardBankBranchImportFilter { @@ -13,34 +16,27 @@ class HuifuOnboardBankBranchImportFilter if ($preset === '' || $preset === 'main') { return self::mainPreset(); } + if ($preset === 'joint' || $preset === 'commercial') { + return self::jointPreset(); + } if ($preset === 'full') { return ['enabled' => false, 'name' => 'full']; } - throw new \InvalidArgumentException('未知 preset: ' . $preset . ',可选 main / full'); + throw new \InvalidArgumentException('未知 preset: ' . $preset . ',可选 main / joint / full'); } - protected static function mainPreset() + public static function presetLabel($preset) + { + $config = self::resolvePreset($preset); + if (empty($config['enabled'])) { + return '全国全量(约15万)'; + } + return ($config['description'] ?? $config['name']); + } + + protected static function sharedRegion() { return [ - 'enabled' => true, - 'name' => 'main', - 'description' => '主要省市 + 四大行/交邮/农商行等,约5万条', - 'bank_keywords' => [ - '工商银行', - '农业银行', - '中国银行', - '建设银行', - '交通银行', - '邮储银行', - '邮政储蓄', - '农村商业银行', - '农村合作银行', - '农村信用', - '农商行', - '信用社', - '村镇银行', - '农信', - ], 'major_provinces' => [ '北京', '上海', '天津', '重庆', '河北', '山西', '辽宁', '吉林', '黑龙江', @@ -76,10 +72,77 @@ class HuifuOnboardBankBranchImportFilter '拉萨', '西宁', '韶关', '江门', '肇庆', '清远', '茂名', '梅州', ], - 'max_matched' => 55000, ]; } + protected static function mainPreset() + { + return array_merge([ + 'enabled' => true, + 'name' => 'main', + 'description' => '主要省市 + 四大行/交邮/农商行,约5万条', + 'bank_keywords' => [ + '工商银行', + '农业银行', + '中国银行', + '建设银行', + '交通银行', + '邮储银行', + '邮政储蓄', + '农村商业银行', + '农村合作银行', + '农村信用', + '农商行', + '信用社', + '村镇银行', + '农信', + ], + 'max_matched' => 55000, + ], self::sharedRegion()); + } + + protected static function jointPreset() + { + return array_merge([ + 'enabled' => true, + 'name' => 'joint', + 'description' => '主要省市 + 招商/浦发/民生等股份制及常用城商行,约3万条', + 'bank_keywords' => [ + '招商银行', + '浦发银行', + '浦东发展', + '民生银行', + '光大银行', + '兴业银行', + '平安银行', + '中信银行', + '华夏银行', + '广发银行', + '恒丰银行', + '浙商银行', + '渤海银行', + '上海银行', + '北京银行', + '宁波银行', + '南京银行', + '杭州银行', + '江苏银行', + '徽商银行', + '天津银行', + '重庆银行', + '成都银行', + '长沙银行', + '郑州银行', + '青岛银行', + '厦门银行', + '广州银行', + '东莞银行', + '苏州银行', + ], + 'max_matched' => 32000, + ], self::sharedRegion()); + } + public static function matches(array $row, array $preset) { if (empty($preset['enabled'])) {