# 2026-08-10 M09-B 清洁规则与照片验收 API ## 新增管理接口 - `GET /admin-api/cleaning/templates` - 按租户和管理员门店范围返回租户、门店、房间三级清洁模板。 - 返回照片必传规则、最少/最多张数、免清洁策略、状态和版本号。 - `PUT /admin-api/cleaning/templates` - 新建或更新同一作用范围的模板;更新时版本号递增并写审计日志。 - 配置只参与后续新任务生成,不修改既有任务快照。 - `GET /admin-api/cleaning/tasks/:taskId/submissions` - 返回最近 20 个验收提交版本,包含版本号、状态、照片、提交备注、驳回原因、提交/验收人和时间。 - `POST /admin-api/cleaning/photos/cleanup` - 批量清理到期且未提交的照片;先原子领取并标记孤儿,文件删除成功后再软删除记录,失败项五分钟后可重试。 ## 既有接口收口 - `POST /app-api/cleaning/tasks/:taskId/photos` 只允许本人 `STARTED` 任务;文件必须为 JPEG/PNG/WebP,声明 MIME、扩展名和实际解码格式一致,原图最多 8 MiB/4000 万像素。 - 图片统一旋转、限边并重编码为 WebP,移除 EXIF/ICC 等附加元数据;存储路径固定为 `tenants/{tenantId}/stores/{storeId}`。 - 每次上传写入任务照片资产,提交时再次校验租户、任务、上传人和 `PENDING` 状态,禁止复用其他任务或其他租户 URL。 - `POST /app-api/cleaning/tasks/:taskId/submit` 使用任务创建时固化的照片规则;驳回后必须先调用 `rework` 回到 `STARTED`,再提交新版本。 - `complete` / `reject` 同事务更新当前提交版本为 `ACCEPTED` / `REJECTED`,旧版本和旧照片继续保留。 - `exempt` 按任务快照中的 `DISABLED`、`BEFORE_START`、`ANY_ACTIVE` 策略执行,继续保证免清洁任务不进入结算。 ## 设备安全边界 - 订单结束、取消或换房旧房间触发断电前,重新查询该房间最新有效订单;存在 `PAID`、`RESERVED` 或 `IN_PROGRESS` 新订单时返回 `ROOM_HAS_ACTIVE_ORDER`,不下发取消任务或插座断电。