# 统一导出任务手工验证清单 ## 验证工具与原则 - 数据库结构与数据状态:使用 PostgreSQL MCP(只读) - 接口契约验证:使用 Postman 或 curl - 明确约束:不新增自动化测试文件(`*_test.go`) ## A. 创建导出任务 - [ ] `POST /api/admin/export-tasks`,`scene=device`,`format=xlsx` - [ ] `POST /api/admin/export-tasks`,`scene=iot_card`,`format=csv` - [ ] 非法 `scene`(如 `order`)返回参数错误 - [ ] 非法 `format`(如 `pdf`)返回参数错误 ## B. 列表与过滤 - [ ] `GET /api/admin/export-tasks?page=1&page_size=20` 默认分页生效 - [ ] `scene` 过滤生效(`device` / `iot_card`) - [ ] `status` 过滤生效(1~5) - [ ] `start_time/end_time` 时间过滤生效 - [ ] `page_size > 100` 时被限制到 100 ## C. 详情与下载 - [ ] 未完成任务详情不返回 `download_url` - [ ] 已完成任务详情返回 `download_url` - [ ] `download_url` 有效期固定 24 小时 - [ ] 过期后再次访问详情可刷新新链接 ## D. 取消语义 - [ ] 待处理任务可取消,状态立即变为已取消 - [ ] 处理中任务可提交取消请求(`cancel_requested=true`) - [ ] 已完成/已失败/已取消任务再次取消被拒绝 - [ ] 重复取消处理中任务幂等返回 ## E. 异步链路(dispatch -> shard -> finalize) - [ ] 创建任务后 `export:dispatch` 被消费 - [ ] 分片任务写入 `tb_export_shard_task` - [ ] `export:shard` 执行后分片状态更新,产物写入 OSS - [ ] `export:finalize` 汇总后主任务状态收敛 - [ ] 分片失败时主任务最终失败,错误信息可追踪 ## F. 数据权限与可见性 - [ ] 平台用户可见全量任务 - [ ] 代理仅可见其店铺范围任务 - [ ] 越权访问详情统一返回:`无权限操作该资源或资源不存在` ## G. 数据库核查项(PostgreSQL MCP) - [ ] `tb_export_task` 表存在,字段与注释完整 - [ ] `tb_export_shard_task` 表存在,字段与注释完整 - [ ] 关键索引存在并生效(任务号唯一索引、`task_id+status`、`scene+status+created_at`)