迁移脚本的一些问题修复

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

@@ -29,6 +29,8 @@ class MissingTargetError(Exception):
@dataclass(frozen=True)
class CarrierMapping:
legacy_account_id: str
legacy_account_name: str
legacy_category: int
legacy_category_name: str
target_carrier_id: Optional[int]
@@ -44,7 +46,7 @@ class CarrierMapping:
) if v in (None, "", 0)
]
if missing:
raise MissingTargetError("carrier", str(self.legacy_category), self.legacy_category_name, missing)
raise MissingTargetError("carrier", self.legacy_account_id, self.legacy_account_name, missing)
return self
@@ -80,13 +82,13 @@ class Mapping:
migration_user_id: int = 0
migration_batch_no: str = "MIGRATION-QICHENG"
carriers: dict[int, CarrierMapping] = field(default_factory=dict)
carriers: dict[str, CarrierMapping] = field(default_factory=dict)
packages: dict[str, PackageMapping] = field(default_factory=dict)
series: dict[str, SeriesMapping] = field(default_factory=dict)
agents: dict[str, AgentMapping] = field(default_factory=dict)
def lookup_carrier(self, legacy_category: int) -> Optional[CarrierMapping]:
return self.carriers.get(int(legacy_category))
def lookup_carrier(self, legacy_account_id: str) -> Optional[CarrierMapping]:
return self.carriers.get(str(legacy_account_id or "").strip())
def lookup_package(self, legacy_meal_id: str) -> Optional[PackageMapping]:
return self.packages.get(str(legacy_meal_id).strip())
@@ -130,14 +132,20 @@ def load_mapping(config_dir: Path) -> Mapping:
)
for item in raw.get("carriers") or []:
legacy_account_id = _opt_str(item.get("legacy_account_id"))
# 旧版按 category 映射的配置会把多个实际运营商账号合成一项,不能安全复用。
if not legacy_account_id:
continue
c = CarrierMapping(
legacy_category=int(item["legacy_category"]),
legacy_account_id=legacy_account_id,
legacy_account_name=str(item.get("legacy_account_name") or ""),
legacy_category=int(item.get("legacy_category") or 0),
legacy_category_name=str(item.get("legacy_category_name") or ""),
target_carrier_id=_opt_int(item.get("target_carrier_id")),
target_carrier_type=_opt_str(item.get("target_carrier_type")),
target_carrier_name=_opt_str(item.get("target_carrier_name")),
)
m.carriers[c.legacy_category] = c
m.carriers[c.legacy_account_id] = c
for item in raw.get("packages") or []:
p = PackageMapping(
@@ -178,13 +186,15 @@ def merge_and_save(config_dir: Path, mapping: Mapping) -> Path:
"migration_batch_no": mapping.migration_batch_no,
"carriers": [
{
"legacy_account_id": c.legacy_account_id,
"legacy_account_name": c.legacy_account_name,
"legacy_category": c.legacy_category,
"legacy_category_name": c.legacy_category_name,
"target_carrier_id": c.target_carrier_id,
"target_carrier_type": c.target_carrier_type,
"target_carrier_name": c.target_carrier_name,
}
for c in sorted(mapping.carriers.values(), key=lambda x: x.legacy_category)
for c in sorted(mapping.carriers.values(), key=lambda x: (x.legacy_account_name, x.legacy_account_id))
],
"packages": [
{