Files
junhong_cmp_fiber/.scratch/iot-risk-import-voucher-remark/issues/04-batch-invalidate-package-task.md
break c0b9604515
Some checks failed
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Has been cancelled
完成
2026-06-23 11:05:58 +09:00

2.0 KiB
Raw Blame History

Status: done

Parent

.scratch/iot-risk-import-voucher-remark/PRD.md

What to build

新增"批量失效订单套餐"导入任务,完整实现 Model → Store → Service → Handler → Route → Worker 全链路,参照现有 IoT 卡导入任务的结构。

数据模型(新建 tb_order_package_invalidate_task

  • 参照 tb_iot_card_import_task 的基础字段(任务编号、状态、计数、失败/跳过明细、文件存储 key、时间戳等
  • 额外字段:creator_name varchar(100)remark textvoucher_keys jsonb(存储 []string最多5个元素

上传接口(创建任务):

  • 接受 CSV 文件(单列 order_no
  • 额外参数:remark(字符串,可选)和 voucher_keys[]string最多5个可选
  • 写入 creator_name 快照

Worker 处理逻辑

  • 逐行读取 order_no
  • order_no 查询 tb_order 获取 order_id;找不到则记为失败,继续处理
  • 查询 tb_package_usage WHERE order_id = ? AND status NOT IN (3, 4),批量更新 status = 4(已失效)
  • 订单存在但套餐全部已是终态status 3 或 4记为成功
  • 不触发退款,不调用网关,不直接停机

列表/详情接口:参照现有导入任务接口结构。

Acceptance criteria

  • Migration 创建 tb_order_package_invalidate_task 表,包含所有必要字段
  • 创建任务接口:接受 CSV + remark + voucher_keys最多5个写入 creator_name 快照
  • Worker 按行处理:order_no 不存在 → 失败并记录原因,继续下一行
  • Worker 按行处理:订单存在且有可失效套餐 → 批量更新 status=4 → 记为成功
  • Worker 按行处理:订单存在但套餐全为终态 → 记为成功
  • 处理过程中不调用退款接口、不操作网关
  • 列表接口返回 creator_nameremark、任务状态和计数
  • 详情接口返回失败明细(含 order_no 和原因)
  • 已在路由和文档生成器中注册

Blocked by

None - can start immediately