# 奇成迁移映射配置(单文件) # 复制为 mapping.yaml 后使用,会被 scan_legacy.py 自动增量补全 # # 工作流: # 1. 业务方提供 resources/cards.csv(只需 iccid 列) # 2. python3 scan_legacy.py → 自动从奇成扫描元数据,把发现的 carrier/package/agent 补到本文件 # 3. 人工填写所有 target_* 字段 # 4. python3 migrate_assets.py / migrate_runtime.py 正常出 SQL # ============== 全局配置 ============== # 迁移操作者(creator/updater/operator_id),通常是后台超级管理员账号 ID # 上线前确认: SELECT id FROM tb_account WHERE login_account = 'admin' LIMIT 1; migration_user_id: 0 # 本次迁移批次号。线上每次迁移必须使用独立批次,用于导入后收尾、验收和回滚定位。 migration_batch_no: "MIGRATION-QICHENG-YYYYMMDD" # ============== 资产归属与槽位规则 ============== # mapping.yaml 是迁移决策源。奇成 agent_id 不会默认参与归属;只有显式 legacy_agent 模式才读取 agents。 ownership_rules: # default_shop 模式的批量目标店铺。legacy_agent/none 模式可保持 null。 default_target_shop_code: KWTX device: # default_shop=默认店铺;legacy_agent=按默认/行级旧套餐读取槽位的绑定卡 agent_id 分店铺;none=进平台库存 mode: default_shop # 默认当前卡槽。devices.csv 未填 current_slot 时使用这里;用于 tb_device_sim_binding.is_current current_slot: 2 # 默认旧套餐读取卡槽。devices.csv 未填 package_source_slot 时使用这里;新系统套餐仍挂设备;不填则回退 current_slot package_source_slot: 2 standalone_card: # default_shop=默认店铺;legacy_agent=按卡 agent_id 分店铺;none=进平台库存 mode: legacy_agent # ============== 套餐迁移规则 ============== package_rules: # active=当前生效正式套餐,pending=未生效待生效正式套餐 migrate_statuses: - active - pending # 可选:也可把套餐映射写在这里;scan_legacy 仍会增量维护顶层 packages。 packages: [] # ============== 少量资产级覆盖 ============== # 覆盖优先级:devices.csv 行级槽位 > overrides.devices 槽位 > ownership_rules.device 默认槽位。 overrides: devices: - virtual_no: "862639073940258" target_shop_code: OTHER current_slot: 1 package_source_slot: 1 cards: - iccid: "89861590172420360956" target_shop_code: OTHER # ============== 运营商映射 ============== # scan_legacy 会按"奇成 tbl_card.account_id/account_name"分组写入,你只需填 target_* # legacy_category 只是奇成运营商大类,用于人工判断 target_carrier_type,不要把它当具体运营商。 carriers: - legacy_account_id: "72493DB64A2A4F01B5E59E49D58A2A34" legacy_account_name: "联通10-1" legacy_category: 9 legacy_category_name: "中国联通" target_carrier_id: null # 必填:新库 tb_carrier.id target_carrier_type: null # 必填:CMCC / CUCC / CTCC / CBN target_carrier_name: null # 必填:新库 carrier_name 快照 # ============== 套餐映射 ============== # scan_legacy 会按"奇成 tbl_card_life.meal_id"分组写入 packages: - legacy_meal_id: "D6554244711498752" legacy_meal_name: "三网充电宝全国畅玩年卡套餐1000G/月(12个月)" target_package_id: null # 必填:新库 tb_package.id # ============== 套餐系列快照(可选) ============== # 资产 series_id 优先从 target_package_id 对应的 tb_package.series_id 反查;target_series_id 可作无套餐时的兜底 series: - legacy_series_id: "95A038B9D3014F9DA1539EC092D9DBAA" legacy_series_name: "国内卡 无预存30天" target_series_id: null # 可选:新库套餐系列 ID;无当前套餐时可作为资产系列兜底 # ============== 代理-店铺映射(legacy_agent 归属 + 代理钱包) ============== # scan_legacy 会按"奇成 tbl_card.agent_id"分组写入。 # standalone_card/device mode=legacy_agent 时,资产按这里的 target_shop_code 分配。 # 不使用 legacy_agent 时,这里只影响 migrate_runtime.py 的代理钱包初始化。 agents: - legacy_agent_id: "D15EC779767B412A82B8448AC2324F04" legacy_agent_name: "叶发伟" target_shop_code: null # 新库 tb_shop.shop_code;legacy_agent 模式下 null=该代理资产进平台库存