迁移脚本的一些问题修复
This commit is contained in:
@@ -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,
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user