# 02 — 完成 CSV 批量分配代理接口闭环

**What to build:** 平台员工或代理提交已上传的 CSV 与目标代理后，系统创建并执行批量分配任务；任务按既有设备分配规则安全处理每一行、同步绑定卡和设备状态、写入资产分配与审计事实，并向前端提供可轮询的进度、成功、幂等和失败原因。

**Blocked by:** 01 — 建立设备 CSV 批量任务与受控上传基础设施。

**Status:** ready-for-agent

**架构通道：** 主通道为复杂写，辅助通道为 Query。

**完整业务边界：** 本票收口任务提交、后台执行、设备归属/绑定卡归属与状态/资产分配记录的同事务变更、条件更新和重试幂等，以及任务详情安全读取。复杂写必须遵循 `Handler → Application UseCase → Domain → Repository/Infrastructure`；不变量、并发和审计不得一半留在旧 Service、一半迁入 Domain。

**明确不迁移：** 不迁移既有页面勾选、ID 列表、号段、筛选分配、设备回收和横向转移入口；既有同步分配只能作为内部业务规则门面，不能复制宽松逻辑。

- [ ] `batch-assign-shop` 只接受 `file_key` 与正目标代理 ID，提交时校验操作者、对象和目标权限，并返回前端轮询所需的任务标识、命令和状态。
- [ ] 平台仅能分配平台库存，代理仅能分配自己名下设备给直属下级；同目标为幂等成功，横向转移、跨级、无权和未命中均安全拒绝。
- [ ] 每个写批次经 Application 编排 Domain 与 Repository/Infrastructure，以条件更新在同一事务内完成设备归属、绑定卡同步、状态变化、资产分配记录和实际变更审计；重试或并发不会重复记录或覆盖其他操作。
- [ ] 任务详情由 Query 负责权限、批量加载和 DTO 投影，只读展示目标摘要、状态名称、进度、总数、成功数、幂等数、失败数、逐行中文失败原因及起止时间；权限不足与不存在使用相同安全语义。
