Admin:档口入库码所有状态支持软删除与重复导入恢复 #238

Open
opened 2026-08-15 10:35:04 +08:00 by ila · 1 comment
Owner

基本信息

  • 类型:需求
  • 父级大工单:#14
  • 所属 MVP/版本:#224 Admin 档口入库码回写
  • 阶段:数据治理与异常恢复
  • 状态:已实现,待验收
  • 依赖:#237

要解决什么

档口入库码目前不能删除记录。所有状态都应允许删除,但删除必须保留审计和远端回写安全性;同一 Excel 重新导入时不能因软删除记录占用业务唯一键而失败或产生重复记录。

做什么 / 不做什么

做:

  • 所有可见状态支持勾选后批量软删除,并保存删除时间和操作账号。
  • 正常列表、统计、匹配和新回写入口隐藏已删除记录。
  • 删除不取消已发出的顺运宝请求,也不撤销远端已写入的快递单号;后台结果仍可落到隐藏记录。
  • 重复导入相同业务键时自动恢复软删除记录,不新增重复行。
  • 待匹配、可回写、已跳过、失败记录恢复时重置为待匹配并清空旧规划。
  • 回写中、已回写、已存在、需核对记录恢复时保留状态和审计。
  • 已完成或结果不确定的软删除记录若重新导入���档口入库码不同,拒绝恢复并提示人工处理。
  • 导入统计增加恢复数量。

不做:

  • 不物理删除业务记录和审计。
  • 不提供单独回收站或恢复按钮;重新导入同一业务键即恢复。
  • 不取消回写中请求,不自动撤销顺运宝远端数据。

已确认的实现方案

  • 追加 MySQL schema v24,为 inner_code_records 增加 deleted_at、deleted_by_user_id,保留现有业务唯一键。
  • repository/service 增加事务化批量软删除;新业务操作过滤软删除记录,但回写完成、启动恢复等安全收尾逻辑仍可更新隐藏记录。
  • 导入 upsert 识别软删除行并按状态分类恢复;导入结果增加 restored_count。
  • 页面增加“删除已选”操作,所有状态记录均可勾选;二次确认展示数量,并明确不会撤销远端值、不会取消回写中请求。
  • 更新数据模型文档,补充迁移、服务、页面与并发安全测试。

验收标准

  • 任意状态记录均可勾选并批量软删除,确认信息包含数量与远端不撤销说明。
  • 删除后记录从正常列表、统计、匹配和新回写入口隐藏,并记录删除时间与账号。
  • 删除回写中记录不会取消已发请求,最终结果仍写入同一隐藏记录。
  • 重新导入相同业务键只恢复原记录,不产生重复���,统计计入恢复数量。
  • 未完成记录恢复后回到待匹配且旧规划清空;完成/不确定记录恢复后保留状态和审计。
  • 完成/不确定记录的档口入库码变化时拒绝恢复并明确报错。
  • 固定 Go 1.23.0 build/test/vet 通过;MySQL v23→v24 和重复迁移测试通过。

验证方式

在 admin/ 目录执行固定 Go 1.23.0 的 go build ./...、go test -count=1 ./...、go vet ./...。

风险和回退

软删除不会撤销顺运宝远端写入,确认文案和服务端行为必须一致。回写中记录存在删除与远端响应并发,完成处理不得因 deleted_at 丢失最终审计。代码回退时保留 v24 字段,不做破坏性降级。

## 基本信息 - 类型:需求 - 父级大工单:#14 - 所属 MVP/版本:#224 Admin 档口入库码回写 - 阶段:数据治理与异常恢复 - 状态:已实现,待验收 - 依赖:#237 ## 要解决什么 档口入库码目前不能删除记录。所有状态都应允许删除,但删除必须保留审计和远端回写安全性;同一 Excel 重新导入时不能因软删除记录占用业务唯一键而失败或产生重复记录。 ## 做什么 / 不做什么 做: - 所有可见状态支持勾选后批量软删除,并保存删除时间和操作账号。 - 正常列表、统计、匹配和新回写入口隐藏已删除记录。 - 删除不取消已发出的顺运宝请求,也不撤销远端已写入的快递单号;后台结果仍可落到隐藏记录。 - 重复导入相同业务键时自动恢复软删除记录,不新增重复行。 - 待匹配、可回写、已跳过、失败记录恢复时重置为待匹配并清空旧规划。 - 回写中、已回写、已存在、需核对记录恢复时保留状态和审计。 - 已完成或结果不确定的软删除记录若重新导入���档口入库码不同,拒绝恢复并提示人工处理。 - 导入统计增加恢复数量。 不做: - 不物理删除业务记录和审计。 - 不提供单独回收站或恢复按钮;重新导入同一业务键即恢复。 - 不取消回写中请求,不自动撤销顺运宝远端数据。 ## 已确认的实现方案 - 追加 MySQL schema v24,为 `inner_code_records` 增加 `deleted_at`、`deleted_by_user_id`,保留现有业务唯一键。 - repository/service 增加事务化批量软删除;新业务操作过滤软删除记录,但回写完成、启动恢复等安全收尾逻辑仍可更新隐藏记录。 - 导入 upsert 识别软删除行并按状态分类恢复;导入结果增加 `restored_count`。 - 页面增加“删除已选”操作,所有状态记录均可勾选;二次确认展示数量,并明确不会撤销远端值、不会取消回写中请求。 - 更新数据模型文档,补充迁移、服务、页面与并发安全测试。 ## 验收标准 - [x] 任意状态记录均可勾选并批量软删除,确认信息包含数量与远端不撤销说明。 - [x] 删除后记录从正常列表、统计、匹配和新回写入口隐藏,并记录删除时间与账号。 - [x] 删除回写中记录不会取消已发请求,最终结果仍写入同一隐藏记录。 - [x] 重新导入相同业务键只恢复原记录,不产生重复���,统计计入恢复数量。 - [x] 未完成记录恢复后回到待匹配且旧规划清空;完成/不确定记录恢复后保留状态和审计。 - [x] 完成/不确定记录的档口入库码变化时拒绝恢复并明确报错。 - [ ] 固定 Go 1.23.0 build/test/vet 通过;MySQL v23→v24 和重复迁移测试通过。 ## 验证方式 在 `admin/` 目录执行固定 Go 1.23.0 的 `go build ./...`、`go test -count=1 ./...`、`go vet ./...`。 ## 风险和回退 软删除不会撤销顺运宝远端写入,确认文案和服务端行为必须一致。回写中记录存在删除与远端响应并发,完成处理不得因 `deleted_at` 丢失最终审计。代码回退时保留 v24 字段,不做破坏性降级。
Author
Owner

已实现,进入待验收。

  • 实现提交:2aea22b
  • 归档提交:7b766f5
  • 归档:docs/task/238-档口入库码软删除与重导恢复.md
  • 已验证:固定 Go 1.23.0 的 build/test/vet、JavaScript 语法、全状态软删除、整批回滚、隐藏 applying 记录后台收尾和页面契约。
  • 未验证:真实 MySQL 8.4 隔离 _test 库的 v23→v24 执行、浏览器端到端、生产部署。因此对应迁移验收项保持未勾选。
已实现,进入待验收。 - 实现提交:`2aea22b` - 归档提交:`7b766f5` - 归档:`docs/task/238-档口入库码软删除与重导恢复.md` - 已验证:固定 Go 1.23.0 的 build/test/vet、JavaScript 语法、全状态软删除、整批回滚、隐藏 applying 记录后台收尾和页面契约。 - 未验证:真实 MySQL 8.4 隔离 `_test` 库的 v23→v24 执行、浏览器端到端、生产部署。因此对应迁移验收项保持未勾选。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chengma/cmautobuy#238