数据修复、迁移脚本与临时任务治理
本文整理 DGJ2.0 中数据修复、迁移、临时脚本和工具入口的治理方式。此类代码风险极高,很多脚本绕过正常业务入口,执行前必须确认环境、数据范围、备份和幂等。
业务目标
- 识别哪些脚本是一次性迁移,哪些是可重复任务。
- 为数据修复建立固定排查、备份、执行、验证流程。
- 避免临时脚本误跑生产、重复跑、跑错
sid或破坏历史数据。
入口文件
- 数据修复:
application/controllers/tasks/DataFix.php - 通用任务:
application/controllers/tasks/GeneralTasks.php - 迁移任务:
application/controllers/tasks/*Migrate.php - 临时任务:
application/controllers/tasks/Tmp*.php - 临时控制器:
application/controllers/temp/* - 工具控制器:
application/controllers/tools/* - 迁移服务:
application/Services/Migrate/*
高风险脚本示例
DataFix::deletePuOrder:删除采购入库相关数据,风险极高。DataFix::updatePaymentInfoStlDate:批量修复付款明细结算日期。DataFix::realtimeFix/realtimeFixK:实时库存修复。ActivityRuleMigrate::migrateRule:活动规则迁移。QuoteMigrate::migrateDaemon/migrate:报价规则迁移。TmpChannelOrder::autoDelivery/autoRefundConfirm:渠道订单自动处理。MigrateQuoteConfig::migrateQuoteRange:报价范围迁移。
执行前检查清单
- 确认环境:本地、测试、预发、生产。
- 确认脚本是否仍然适用当前表结构和业务状态。
- 确认参数:
sid、单号、id 范围、limit、时间范围。 - 备份影响表,至少导出待修改记录。
- 先 dry-run 或只查不改。
- 小批量执行。
- 每批验证业务表、流水表、报表口径。
- 记录执行命令、时间、影响行数和回滚方案。
推荐修复流程
flowchart TD
A["发现数据问题"] --> B["确认业务口径"]
B --> C["只读 SQL 复核影响范围"]
C --> D["备份待修记录"]
D --> E["编写或确认修复脚本"]
E --> F["测试环境演练"]
F --> G["生产小批量执行"]
G --> H["验证业务表、流水、报表、日志"]
H --> I["沉淀修复记录"]
常见修复类型
| 类型 | 风险点 | 必查表 | | --- | --- | --- | | 库存修复 | 流水和实时库存不一致 | 库存流水、实时库存、业务单据 | | 支付修复 | 重复入账或漏入账 | 收付款、账户流水、支付明细 | | 订单修复 | 状态跳转错误 | 采购/销售主单、明细、日志 | | 活动迁移 | 活动规则错配 | 活动主表、活动商品、活动订单 | | 报价迁移 | 价格规则影响范围大 | 报价规则、客户组、商品价 | | 渠道补偿 | 自动发货/退款不可逆 | 渠道订单、售后、库存 |
常用 rg 命令
rg -n "class DataFix|realtimeFix|deletePuOrder|updatePaymentInfoStlDate" application/controllers/tasks/DataFix.php
rg -n "class .*Migrate|migrate\\(|migrateDaemon|switchStationVersion" application/controllers/tasks application/Services/Migrate
rg -n "class Tmp|TmpChannelOrder|autoDelivery|autoRefundConfirm" application/controllers/tasks
rg -n "execSql|delete|truncate|update .* set|drop table" application/controllers/tasks application/controllers/temp application/controllers/tools application/Services/Migrate
禁止事项
- 不带
sid或 id 范围直接全表更新。 - 不备份直接改生产。
- 用旧脚本处理新表结构。
- 修实时库存但不补业务流水。
- 重复跑没有幂等保护的脚本。
- 把真实客户隐私、银行卡、token、密码写入文档或聊天。
回归清单
- 修复前后主单状态一致。
- 明细数量和主单汇总一致。
- 库存流水和实时库存一致。
- 账户流水和收付款一致。
- 报表能查到正确结果。
- 外部系统不会收到重复 MQ 或重复回调。