## 1. 数据模型 - [ ] 1.1 迁移:批次表加 `detail_file_key`、`skipped_items`(jsonb)、`skipped_count`;延期明细加 `source_silence_status`(默认 expired),含 down - [ ] 1.2 model、常量:审批字段 `detail_file_keys`、明细上限、跳过原因编码 ## 2. 资产展开与预检 - [ ] 2.1 资产号解析与去重:ICCID→卡(绑定设备则换设备)、虚拟号/IMEI→设备;查询 expired / waiting 套餐 - [ ] 2.2 抽取 `checkSpecialUsage`(支持 allowWaiting),旧 `validateSpecialItems` 改为调用它且行为不变 - [ ] 2.3 预检接口 DTO、handler、路由(`package_silence:extend_batch`),返回逐资产逐套餐结果 - [ ] 2.4 表驱动测试:设备去重、多套餐、无沉默期套餐、免费次数用完、已有进行中申请 ## 3. 提交与执行 - [ ] 3.1 提交接口:服务端重跑预检,只写可延期明细,跳过明细入批次;0 条拒绝 - [ ] 3.2 复用批次创建、免审批判定与审批创建;审批字段 ≤5 列全部资产号、>5 写首个 + 条数并附注批次号 - [ ] 3.3 >5 时事务前生成 xlsx 明细并上传对象存储,记录 `detail_file_key`,作为 `detail_file_keys` 审批字段;失败拒绝提交 - [ ] 3.4 `executeExtensionInTx` 支持来源 waiting 的明细:仍 waiting 只延截止日,expired 走原流程,ended/失效/退款记失败 - [ ] 3.5 企微场景字段登记"延期明细"(FileList,非必须映射) - [ ] 3.6 测试:部分跳过、全部跳过、waiting 延期、审批期间已实名失败、旧单资产特殊延期回归 ## 4. 批次查询 - [ ] 4.1 批次列表筛选(批次号、路径、延期类型、审批状态、时间)与详情返回跳过明细、计数 - [ ] 4.2 明细下载接口:有 `detail_file_key` 签名下载,否则即时生成 ## 5. 管理端前端(admin `iteration/8-11`) - [ ] 5.1 批量延期弹窗:统一天数/类型/原因/依据/附件,导入一列资产号(xlsx/csv,≤1000),预检结果表,确认提交 - [ ] 5.2 延期批次列表与详情页,下载明细;菜单与权限 - [ ] 5.3 移除单资产弹窗中的旧 CSV 批量入口 ## 6. 验证与部署 - [ ] 6.1 `go build ./...`、`go vet`、相关测试通过;前端构建与测试通过 - [ ] 6.2 部署测试环境,用 6 个以上过期 / 待实名设备验证预检、提交、xlsx 附件生成(企微场景配置后验证审批单附件) - [ ] 6.3 更新 `docs/` 前端对接说明与企微模板配置说明