23 lines
2.2 KiB
Markdown
23 lines
2.2 KiB
Markdown
# 05 — 完成附件上传与企微异步提交闭环
|
||
|
||
**What to build:** 审批提交 Worker 可以从公共 Outbox 可靠领取审批实例,使用冻结的模板、业务快照和企微发起身份上传附件副本并调用企微发起审批;成功后绑定唯一 `sp_no`,明确失败可安全重试,已发送但响应未知时停止自动重发并等待人工恢复。
|
||
|
||
**Blocked by:**
|
||
|
||
- 04 — 提供审批创建前置检查与事务接入契约
|
||
- `.scratch/tech-public-foundation/issues/03-outbox-at-least-once-delivery.md` — 03 — 完成 Outbox 到 Asynq 的至少一次投递闭环
|
||
- `.scratch/tech-global-audit/issues/02-integration-log-attempt-loop.md` — 02 — 交付可恢复的 Integration Log 尝试闭环
|
||
|
||
**Status:** ready-for-agent
|
||
|
||
**架构通道:** 复杂写 Application + Domain,外部调用位于 Infrastructure WeCom Adapter。
|
||
|
||
**完整业务边界:** 本票收口技术提交尝试、提交租约、附件副本上传、企微表单构造和提交结果分类。明确不处理企微审批终态,不执行退款或充值资金动作,不把临时企微资料变成永久业务事实。
|
||
|
||
- [ ] Worker 通过审批状态和 `submit_lease_until` 条件领取、续租并在所有退出路径释放租约;并发 Worker 同一时刻只有租约所有者可以提交。
|
||
- [ ] 本地私有对象 Key 是申请附件权威引用;Worker 使用受控临时文件上传企微,临时 `media_id`、预签名 URL 和文件内容不进入永久业务快照、普通日志或响应。
|
||
- [ ] 企微表单严格使用实例冻结的模板映射、真实业务提交人和实际企微发起身份,审批人配置完全使用企微模板,不由系统计算或提交。
|
||
- [ ] 成功响应原子绑定唯一 `sp_no` 并进入审批中;企微明确未创建时进入提交失败,可在同一实例上技术重试且保留尝试历史。
|
||
- [ ] 可证明未发送的建连失败允许自动重试;请求已发送后超时或连接中断进入提交结果未知,持久化未知事实后禁止自动再次调用 `applyevent`。
|
||
- [ ] 测试覆盖 Outbox 重投、并发领取、租约过期恢复、部分附件失败、明确失败、未发送失败、响应未知、成功绑定和结构化 Asynq 载荷,且不依赖真实企微网络。
|