All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m16s
老系统设备迁移快照导出脚本
这个工具只负责从老系统 legacy_mysql 导出设备迁移所需的业务快照,不写入新系统数据库,也不生成新系统导入 SQL。
导出范围
- 设备号/IMEI:从你提供的输入 CSV 读取;不提供 ICCID 时,脚本会按老库
tbl_card.vcode/tbl_card.imei反查主卡,并通过tbl_card_relate展开关联副卡。 - 卡当前快照:从
tbl_card读取当前卡状态、老套餐字段、当前已用量等。 - 套餐快照:从
tbl_card_life和tbl_next_month_card_life读取当前/次月套餐事实。 - 卡钱包快照:从
tbl_card_wallet读取余额和自动续费字段。 - 佣金账户快照:按卡所属老代理,从
tbl_agent_commission_account读取账户累计金额。 - 日流量记录:不导出,只保留当前已用量和剩余量建议值。
输入 CSV
脚本会自动识别常见表头。最省事的输入只需要设备号/IMEI,不需要提供 SN 和 ICCID。SN 只是随导出结果透传,可不填。
支持的常见表头:
imei
862639076004532
如果业务给的是设备号字段,也可以写成:
device_virtual_no
862639076004532
如果业务后续能直接给 ICCID,脚本也仍然支持单卡或多卡槽 ICCID 输入。
可识别字段包括:
- 设备号:
device_virtual_no、device_no、virtual_no、mchno、设备号、设备虚拟号、机器码 - IMEI:
imei、device_imei、mchno、设备imei、机器码 - SN:
sn、设备sn - 单卡:
iccid、卡号、主卡、main_iccid - 多卡槽:
iccid1、iccid_1、slot1_iccid、card1、sim1、卡1,最多识别到 4 个卡槽
使用方式
export LEGACY_MYSQL_DSN='user:password@tcp(host:3306)/kyhl'
go run ./scripts/legacy_device_export \
-input ./devices.csv \
-out ./legacy_device_export_output
也可以通过参数指定库名:
go run ./scripts/legacy_device_export \
-dsn 'user:password@tcp(host:3306)/kyhl' \
-schema kyhl \
-input ./devices.csv \
-out ./legacy_device_export_output
默认不会导出佣金明细。如需按输入 ICCID 额外导出 tbl_agent_commission_detail 明细,可加:
-include-commission-details
输出文件
input_assets.csv:标准化后的输入设备/卡关系。unresolved_inputs.csv:无法通过输入 ICCID 或设备号/IMEI 解析出老库 ICCID 的行。card_snapshot.csv:老卡本体快照和当前已用量,并给出tb_iot_card.data_usage_mb、current_month_usage_mb、last_gateway_reading_mb的导入建议值;状态/类型/运营商分类会同时输出中文*_name列,也会保留老卡expire_time。package_usage_snapshot.csv:老套餐快照,以及按当前已用量分摊出来的allocated_used_mb、remaining_mb建议值;老套餐状态、新系统建议状态会同时输出中文*_name列。时间字段同时输出老库原始start_at/expires_at和迁移参考effective_start_at/effective_expires_at,具体来源看date_source_note。wallet_snapshot.csv:老卡钱包余额和自动续费信息,自动续费状态会同时输出中文*_name列。commission_account_snapshot.csv:老代理佣金账户快照,预留suggested_new_shop_id供后续导入时映射新系统店铺。missing_cards.csv:输入 ICCID 在老库tbl_card中未命中的清单。summary.txt:本次导出摘要。field_dictionary.csv:所有输出字段的中文说明。enum_dictionary.csv:状态码、类型码、来源表等枚举值说明。README_zh.md:随本次导出生成的阅读入口和口径提醒。commission_detail_snapshot.csv:仅在传入-include-commission-details时生成。
注意事项
package_usage_snapshot.csv的已用量分摊是迁移建议值,后续生成新系统导入 SQL 前仍需要结合新系统套餐系列、套餐和供应商映射复核。- 输入 CSV 可以不提供 SN 和 ICCID;不提供 ICCID 时会先按老库
tbl_card.vcode,再兼容tbl_card.imei反查 ICCID,并通过tbl_card_relate展开关联卡。 - CSV 表头保留英文是为了后续脚本稳定读取;人工查看时优先看同表的
*_name中文列、field_dictionary.csv和enum_dictionary.csv。 - 老库部分
tbl_card_life.start_date为空,但expire_date和create_time有值;脚本会保留原始空值,并在effective_start_at用create_time兜底,避免误以为没有导出。 - 新系统轮询流量会根据网关当前读数和
last_gateway_reading_mb计算增量,后续导入脚本应优先使用card_snapshot.csv中的suggested_tb_iot_card_last_gateway_reading_mb避免首轮重复扣量。 - 这个脚本不会修改老系统或新系统数据。