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

2.2 KiB
Raw Blame History

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 载荷,且不依赖真实企微网络。