迁移脚本的一些问题修复

This commit is contained in:
Break
2026-05-28 17:22:52 +08:00
parent 1550ef3cb1
commit 872769e69e
13 changed files with 328 additions and 114 deletions

View File

@@ -20,9 +20,9 @@ DEVICE_HEADERS_AT_LEAST_ONE = ("imei", "virtual_no")
class CardRow:
"""cards.csv 单行的解析结果(只含业务方决策字段)。
业务方必须同时提供 iccid_19 iccid_20(20 位运营商):
- iccid_19:前 19 位,所有卡必填,作为跨文件稳定 ID
- iccid_20:20 位完整 ICCID,CMCC/CUCC/CBN 必填、CTCC 必须留空
业务方至少提供 iccid_19 / iccid_20 之一:
- iccid_19:前 19 位,可作为奇成主表查询键
- iccid_20:20 位完整 ICCID,固定 20 位运营商只填这一列即可
- 运营商类型与 iccid_20 的一致性在查完奇成后由 sql_builder 校验
新系统 iccid 唯一键 = iccid_20 优先,否则 iccid_19。
"""
@@ -30,6 +30,7 @@ class CardRow:
line_no: int # 原始 CSV 行号(从 1 开始,含表头)
iccid_19: str
iccid_20: str = "" # 留空表示 CTCC(查完奇成会再校验)
allow_iccid_19_lookup: bool = True # iccid_19 是否为业务方显式提供,可用于奇成主表兜底查询
is_industry: bool = False # 默认 False(普通卡)
# 跨文件校验后填充
@@ -159,6 +160,16 @@ def _load_cards(path: Path, result: LoadResult) -> None:
for idx, raw in enumerate(reader, start=2):
iccid_19 = _normalize_cell(raw.get("iccid_19", ""))
iccid_20 = _normalize_cell(raw.get("iccid_20", ""))
allow_iccid_19_lookup = bool(iccid_19)
if iccid_20 and len(iccid_20) != 20:
result.errors.append(
ErrorRow("cards.csv", idx, "iccid_20", iccid_20, "iccid_20_length",
f"iccid_20 必须是 20 位,当前 {len(iccid_20)}")
)
continue
if not iccid_19 and iccid_20:
iccid_19 = iccid_20[:19]
err = iccid_utils.validate_iccid_19(iccid_19)
if err is not None:
@@ -186,7 +197,13 @@ def _load_cards(path: Path, result: LoadResult) -> None:
continue
result.cards.append(
CardRow(line_no=idx, iccid_19=iccid_19, iccid_20=iccid_20, is_industry=is_industry)
CardRow(
line_no=idx,
iccid_19=iccid_19,
iccid_20=iccid_20,
allow_iccid_19_lookup=allow_iccid_19_lookup,
is_industry=is_industry,
)
)