企业信息采集 · 导入使用说明
后台企业信息采集 — 导入用法说明
入口:采集管理 → 企业信息采集 → 导入基础企业
地址:backstage/companycollect/import.html
本模块用于将目录下的多个 .xlsx 企业名录批量写入数据库表 by_company_base,供后台检索、导出,以及商家后台(有权限的员工)查询、新增企业。
1. 功能结构
| 页面 | 路径 | 作用 |
|---|---|---|
| 导入基础企业 | companycollect/import | 指定目录,批量导入 xlsx |
| 企业基础列表 | companycollect/index | 搜索、查看、导出 |
| 企业详情 | companycollect/detail | 单条完整字段 |
| 导入批次日志 | companycollect/batches | 每次导入的统计 |
| 错误明细 | companycollect/batchLogs | 失败行原因 |
说明: 批量导入仅在平台后台提供;商家/员工后台只能查列表、看详情、手工新增,不能走目录导入。
2. 环境准备
2.1 数据库表
首次使用前需执行:docs/sql/company_collect.sql
会创建 by_company_base、by_company_import_batch、by_company_import_log 等表。
2.2 读取方式(import 页二选一)
| 方式 | 要求 | 适用 |
|---|---|---|
| Python(推荐) | Python 3 + openpyxl;PHP 需启用 proc_open | 大文件、省 PHP 内存 |
| PHPExcel | 项目已安装 PHPExcel | Python 不可用时的备选 |
安装 openpyxl:
pip install openpyxl
2.3 导入目录
- 页面默认目录:项目根下
安徽所有企业\ - 目录内放置多个
.xlsx(只认.xlsx,不认.xls) - 路径建议用英文/数字,避免中文路径在 Windows/IIS 下编码异常
- 若手动填写目录,系统不会偷偷 fallback 到其他目录;目录不存在会直接报错
3. Excel 文件格式
3.1 读取规则
- 只读第 1 个 sheet
- 优先按表头自动匹配列(扫描前 20 行找表头)
- 表头匹配失败时,回退到固定列顺序(旧模板)
3.2 完整表头模板(推荐)
与企查查/天眼查等导出格式兼容,支持字段包括:
| 表头关键词(部分) | 入库字段 |
|---|---|
| 公司名称 / 企业名称 | 企业名称 |
| 法定代表人 / 法人 | 法人 |
| 成立日期 | 成立日期 |
| 注册地址 | 地址 |
| 公司类型 / 企业类型 | 企业类型 |
| 统一社会信用代码 | 信用代码(去重主键) |
| 纳税人识别号 / 税号 | 税号 |
| 组织机构代码 | 组织机构代码 |
| 所属省份 / 所属城市 / 所属区县 | 地区(拼成 省-市-区) |
| 国标行业门类 / 大类 / 中类 | 行业分类 |
| 经营范围 | 经营范围 |
| 有效手机号 / 更多电话 | 电话(合并写入 phone) |
| 登记状态、企业规模、注册资本、实缴资本 | 对应扩展字段 |
| 核准日期、营业期限、曾用名、英文名 | 对应扩展字段 |
| 参保人数、网址、邮箱等 | 对应扩展字段 |
3.3 旧版固定列(无表头时)
| 列 | 字段 |
|---|---|
| A | 名称 |
| B | 法人 |
| C | 成立日期 |
| D | 地址 |
| E | 类型 |
| F | 信用代码 |
| G | 税号 |
| H | 行业 |
| I | 地区 |
| J | 经营范围 |
| K | 电话 |
3.4 数据清洗
-、--、—视为空- 电话只保留 11 位手机号或
区号-号码固话,过滤13、15等无效片段 - 成立日期、核准日期转为
YYYY-MM-DD
4. Web 导入操作步骤
步骤 1:准备文件
- 将 xlsx 放到服务器目录,例如:
D:\www\baoan\安徽所有企业\ - 单文件过大(如几十万行)先拆分(见第 5 节)
步骤 2:打开导入页
访问 backstage/companycollect/import.html,填写:
- 导入目录:xlsx 所在绝对路径
- 读取方式:选 Python(推荐)
步骤 3:开始导入
- 点击「开始导入」,确认提示
- 会新开窗口显示实时进度(适配 IIS,避免单请求超时)
- 系统按文件逐个处理:
(1/N) 文件名.xlsx→ 自动跳转下一个 - 顶部显示累计:总 / 新增 / 重复 / 失败
步骤 4:查看结果
- 导入批次日志:
companycollect/batches— 每批总数、新增、重复、失败 - 错误明细:点「错误明细」查看具体行与错误信息
- 企业列表:
companycollect/index— 确认数据已入库
导入流程
提交表单 → 创建导入批次 → 逐步处理每个 xlsx
→ Python/PHPExcel 逐行解析
→ 写入 by_company_base
→ 更新批次统计 → 自动跳转下一文件
→ 全部完成后标记批次「完成」
单文件卡住超过约 2 分钟,进度页提供「跳过本文件」链接。
5. 大文件拆分
单文件过大导致内存不足或超时时,先用拆分脚本:
python Banyan/Lib/Util/split_xlsx.py "大文件.xlsx"
python Banyan/Lib/Util/split_xlsx.py "大文件.xlsx" "输出目录" 2000
- 默认每文件 2000 行(含表头)
- 输出如:
大文件_part01.xlsx、大文件_part02.xlsx… - 拆分后的文件放入同一导入目录,再执行 Web 导入
6. 命令行导入(大库/生产推荐)
Web 受 PHP 内存、超时、proc_open 限制时,使用 CLI 脚本:
cd D:\www\baoan
php docs/cli_company_import.php
php docs/cli_company_import.php "D:\www\baoan\安徽所有企业"
php docs/cli_company_import.php "D:\www\baoan\安徽所有企业" --limit 50
| 参数 | 说明 |
|---|---|
| 无参数 | 使用默认目录 安徽所有企业 |
| 目录路径 | 指定 xlsx 目录 |
--limit 50 | 每文件只导入前 50 行(测试用) |
CLI 同样走 Python 解析脚本 Banyan/Lib/Util/companycollect_xlsx_parser.py,直接写库,并创建批次记录;完成后在「导入批次日志」可见。
7. 去重与更新策略
写入时按以下规则判断重复:
- 有统一社会信用代码 → 按
credit_code查重(库里有唯一索引uk_credit_code) - 无信用代码 → 按「企业名称 + 地区 + 法人」查重
| 情况 | 行为 |
|---|---|
| 不存在 | 新增 |
| 已存在 | 计为重复;若原记录某字段为空、新数据有值,则补全(电话、地址、经营范围、行业、邮箱等) |
| 写入异常 | 计为失败,记入错误明细 |
空行(名称和信用代码都空)自动跳过,不计入总数。
8. 导入后的数据使用
8.1 后台列表与搜索
companycollect/index 支持:
- 综合关键字(名称/法人/地址/电话/行业/信用代码等)
- 企业名、地区、类型、行业
- 成立日期区间、注册资本、信用代码、电话
- 导出 XLSX(按当前条件,每批 5000 条)
8.2 商家/员工后台
- 菜单:企业信息采集(需模块权限 + 员工
is_companycollect=1) - 功能:列表搜索、详情、手工新增
- 不能批量导入;数据来自平台后台导入的
by_company_base池
9. 常见问题
| 现象 | 处理 |
|---|---|
| 「目录不可访问或路径编码不匹配」 | 换英文路径,或检查 IIS 进程是否有读权限 |
| 「目录下未找到 xlsx」 | 确认扩展名为 .xlsx,不是 .xls |
| Python 解析超时 | 拆分大文件,或改用 cli_company_import.php |
| 「proc_open 被禁用」 | 选 PHPExcel,或只用命令行导入 |
| PHPExcel 内存不足 | 拆分文件 + Python 方式 |
| 重复很多 | 正常;同一信用代码不会重复插入,只会补空字段 |
| 列错位 | 检查表头是否含「公司名称」「法定代表人」「统一社会信用代码」等;否则回退 A~K 旧映射 |
10. 典型工作流示例
1. 从数据源导出企业 xlsx(带完整表头)
2. 若单文件 > 5 万行 → split_xlsx.py 拆成多个 part
3. 复制到服务器 安徽所有企业\ 目录
4. backstage/companycollect/import.html → Python → 开始导入
5. 在 batches 确认 新增/重复/失败
6. 有失败 → batchLogs 查原因
7. companycollect/index 搜索抽样验证
8. 商家员工在 merchant/companycollect 查询使用
11. 相关文件
| 文件 | 说明 |
|---|---|
Banyan/Backstage/companycollect/import.html | 导入配置页 |
Banyan/Lib/Action/Backstage/CompanycollectAction.class.php | 导入逻辑 |
Banyan/Lib/Util/companycollect_xlsx_parser.py | Python xlsx 解析 |
Banyan/Lib/Util/split_xlsx.py | 大文件拆分 |
docs/cli_company_import.php | 命令行导入 |
docs/sql/company_collect.sql | 建表与菜单 SQL |
docs/company_collect_plan.md | 模块设计方案 |
*文档版本:与当前 baoan 代码库一致。*
