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