Files
junhong_cmp_fiber/.scratch/ur37-wecom-approval-foundation/issues/05-attachment-upload-and-approval-submission.md
2026-07-22 16:58:26 +09:00

23 lines
2.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 载荷,且不依赖真实企微网络。