数据修复、迁移脚本与临时任务治理

本文整理 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:报价范围迁移。

执行前检查清单

  1. 确认环境:本地、测试、预发、生产。
  2. 确认脚本是否仍然适用当前表结构和业务状态。
  3. 确认参数:sid、单号、id 范围、limit、时间范围。
  4. 备份影响表,至少导出待修改记录。
  5. 先 dry-run 或只查不改。
  6. 小批量执行。
  7. 每批验证业务表、流水表、报表口径。
  8. 记录执行命令、时间、影响行数和回滚方案。

推荐修复流程

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 或重复回调。