\App\Console\CommandsRegionImport

地区导入命令

职责:导入中国行政区划(5 级,国家统计局数据)。主数据 code(12位) → id + code 列; pcode → parent_id;level → level;ancestors 沿 pcode 链计算(0/xx/xx/); 拼音按 code 匹配;坐标按 ext_path 匹配(省市区镇)。

数据源: --csv adyliu/china_area 的 area_code_2024.csv(code,name,level,pcode,category) --pinyin xiangyuecn 的 ok_data_level4.csv(ext_id 12位code, pinyin, pinyin_prefix) --geo xiangyuecn 的 ok_geo.csv(id,pid,deep,name,ext_path,geo)

┌────────────────── 分区导航(按此顺序阅读)──────────────────┐ 分区 1 · 命令签名与说明 $signature / $description 分区 2 · 执行入口 handle 分区 3 · 内部辅助 readCsv / buildAncestors / buildPath └────────────────────────────────────────────────────────────┘

Summary

Methods
Properties
Constants
handle()
No public properties found
REGION_TABLE
forgetRegionCaches()
syncRegionSequence()
batchInsert()
flushInsert()
nullableColumns()
$signature
$description
N/A
readCsv()
buildAncestors()
buildPath()
No private properties found
N/A

Constants

REGION_TABLE

REGION_TABLE = 'td_sys_region'

地区表名(裸表名,SQL 拼接处走 DbSchema::prefix)

Properties

$signature

$signature

命令签名:region:import,--csv 必须,--pinyin/--geo 可选

$description

$description

命令说明

Methods

handle()

handle() : int

执行导入。

流程:① 读拼音(code → pinyin 映射)与坐标(ext_path → geo 映射) ② 两趟流式:第一趟建紧凑祖先查找表(仅 level<=4 行,村级不驻留,控内存) ③ 事务内 TRUNCATE 后边读边算边分批插(2000 行/批) ④ PostgreSQL 同步自增序列 ⑤ DB 直插不触发模型事件,手动清地区统计与树缓存

Returns

int —

forgetRegionCaches()

forgetRegionCaches() : void

手动失效地区缓存(DB 直插/直改不触发模型事件时的单源收口)。 sys:region:tree 含地区全字段,缺失失效会让旧值残留。

syncRegionSequence()

syncRegionSequence() : void

同步地区序列(仅 pgsql;表名走 DbSchema::prefix(),勿硬编码 schema)

batchInsert()

batchInsert(array  $rows, int  $count, int  $batchSize = 2000) : void

批量攒插:行攒满 $batchSize 即插入并清空(内存恒定,防单条长事务)

Parameters

array $rows
int $count
int $batchSize

flushInsert()

flushInsert(array  $rows, int  $count) : void

尾部 flush:不足一批的剩余行落库

Parameters

array $rows
int $count

nullableColumns()

nullableColumns() : array<string,bool>

当前库表列 → 是否可空(按定义顺序;Schema 抽象,PG/sqlite 通吃—— 此前 RegionDump 的 information_schema 版仅 PG 可用,统一为可移植实现)。

Returns

array

列名 → true=可空(空值语义由调用方按列决定)

readCsv()

readCsv(string  $path, bool  $hasHeader) : \Generator

读 CSV($hasHeader=true 时首行为表头按 key 返回;false 时按索引返回)

Parameters

string $path
bool $hasHeader

Returns

\Generator —

buildAncestors()

buildAncestors(string  $code) : string

从 code 前缀推导 ancestors(省2位/市4位/区6位/镇9位/村12位)

Parameters

string $code

Returns

string —

buildPath()

buildPath(array  $lookup, string  $code) : string

拼 ext_path(省 市 区 镇,用 name;lookup 为 level<=4 紧凑查找表)

Parameters

array $lookup
string $code

Returns

string —