# 奇成迁移映射配置(由 scan_legacy.py 生成/增量补全) # # 使用方式: # 1. cards.csv 必填;devices.csv 可选。没有 devices.csv 时就是纯卡迁移。 # 2. legacy_* 字段来自奇成扫描,一般不要手工修改。 # 3. target_* 字段需要人工填写,否则生成 SQL 时会写入 errors.csv 并阻断对应资产。 # 4. 资产归属先看 overrides,再看 ownership_rules;只有显式 legacy_agent 模式才读取 agents。 # ============== 全局配置 ============== # 迁移操作者账号 ID,写入 creator/updater/operator_id。线上建议使用后台超级管理员 ID。 migration_user_id: 0 # 本次迁移批次号。每批线上迁移保持唯一,方便收尾、验收和回滚定位。 migration_batch_no: "MIGRATION-QICHENG-20260615" # ============== 资产归属与槽位规则 ============== # default_shop 模式下的批量目标店铺编码;mode=legacy_agent/none 时可保持 null。 ownership_rules: default_target_shop_code: KWTX # 设备规则只在存在 resources/devices.csv 时生效。 device: # default_shop=默认店铺;legacy_agent=按默认/行级旧套餐读取槽位绑定卡的奇成 agent_id 映射店铺;none=平台库存。 mode: "legacy_agent" # 默认当前卡槽。devices.csv 未填 current_slot 时使用这里;写入 tb_device_sim_binding.is_current。 current_slot: null # 默认旧套餐读取卡槽。devices.csv 未填 package_source_slot 时使用这里;新系统套餐仍挂设备;不填则回退 current_slot。 package_source_slot: null standalone_card: # default_shop=默认店铺;legacy_agent=按奇成 agent_id 映射店铺;none=平台库存。 mode: "legacy_agent" # ============== 套餐迁移规则 ============== package_rules: # active=当前生效正式套餐;pending=未生效待生效正式套餐。 migrate_statuses: - "active" - "pending" # ============== 少量资产级覆盖 ============== # 覆盖优先级:devices.csv 行级槽位 > overrides.devices 槽位 > ownership_rules.device 默认槽位。 overrides: # 设备级特殊处理。virtual_no 对应 devices.csv 的 virtual_no/imei 兜底值。 devices: [] # 独立卡特殊处理。iccid 可填 19 位或 20 位。 cards: [] # ============== 运营商映射 ============== # scan_legacy 按奇成 tbl_card.account_id/account_name 分组写入;只需要人工填写 target_*。 # target_carrier_type 只能填 CMCC / CUCC / CTCC / CBN。 carriers: - legacy_account_id: "64E0F6057D6749ABB211E11D51C3F1AA" legacy_account_name: "新移动15-1" legacy_category: 126 legacy_category_name: "GS移动" target_carrier_id: 2 target_carrier_type: CMCC target_carrier_name: 移动15-BE20030985258 - legacy_account_id: "811CA4BF74E24CD7AAEC3C54EF1BAE63" legacy_account_name: "新移动15-2" legacy_category: 126 legacy_category_name: "GS移动" target_carrier_id: 2 target_carrier_type: CMCC target_carrier_name: 移动15-BE20030985258 - legacy_account_id: "6A6D70450525448780AD4C3CCE6D4B29" legacy_account_name: "电信10-1" legacy_category: 124 legacy_category_name: "GS电信" target_carrier_id: 7 target_carrier_type: CTCC target_carrier_name: 电信10-qiangukeji - legacy_account_id: "B0C93CB44C184DFDA230DF0E574A395F" legacy_account_name: "电信9" legacy_category: 124 legacy_category_name: "GS电信" target_carrier_id: 4 target_carrier_type: CTCC target_carrier_name: 电信5-junhong004 - legacy_account_id: "ED12247823374841934283AAD40CCA9D" legacy_account_name: "联通15-1(3T)" legacy_category: 125 legacy_category_name: "GS联通" target_carrier_id: 3 target_carrier_type: CUCC target_carrier_name: 联通31-710WLW17915117 - legacy_account_id: "648D3C383B904D9686EC8650D5F20A7C" legacy_account_name: "联通38" legacy_category: 125 legacy_category_name: "GS联通" target_carrier_id: 3 target_carrier_type: CUCC target_carrier_name: 联通31-710WLW17915117 # ============== 套餐映射 ============== # scan_legacy 按奇成 tbl_card_life.meal_id 分组写入;target_package_id 必须指向新库正式套餐。 packages: - legacy_meal_id: "D6695908379395072" legacy_meal_name: "特惠畅享月卡套餐30G/月(1个月)" target_package_id: 40 - legacy_meal_id: "D6695911346816000" legacy_meal_name: "特惠畅享月卡套餐100G/月(1个月)" target_package_id: 39 - legacy_meal_id: "D6695913990718464" legacy_meal_name: "特惠畅享月卡套餐1000G/月(1个月)" target_package_id: 37 - legacy_meal_id: "D6695917828850688" legacy_meal_name: "特惠畅享年卡套餐3000G/月(12个月)" target_package_id: 34 # ============== 套餐系列快照(可选) ============== # 资产 series_id 优先从 target_package_id 对应的 tb_package.series_id 反查;target_series_id 可作无套餐时的兜底。 series: - legacy_series_id: "61721B92E3FF4F53834AC16F4214667C" legacy_series_name: "2026新春特惠套餐" target_series_id: 5 # ============== 代理-店铺映射(legacy_agent 归属 + 代理钱包) ============== # standalone_card/device mode=legacy_agent 时,资产按这里的 target_shop_code 分配。 # 不使用 legacy_agent 时,这里只影响 migrate_runtime.py 的代理钱包初始化。 agents: - legacy_agent_id: "0072250EBB88422C88A573AB06870D17" legacy_agent_name: "酷蛙通讯" target_shop_code: KWTX