滨州项目|万医生可配置异步推送方案

总开关、After-Commit 任务、独立 Worker、幂等重试与主流程强隔离

开关关闭(默认)

wanyisheng_sync_enable=0

不创建任务、不调用万医生,人员、体测、支付、订单、退款完全保持现有业务逻辑。

开关开启

wanyisheng_sync_enable=1

本地主事务成功提交后,尽力登记异步任务;独立 Worker 后台推送,第三方失败不影响原业务。

总体流程

原业务事务提交并确定结果 → After-Commit 检查开关 → 关闭则结束;开启则在主事务外尽力登记任务 → 立即保持原响应 → 独立 Worker 组装快照并推送 → 成功 / 重试 / 人工处理。

主流程零影响硬门禁

验收标准 故障注入前后,现有接口响应、事务提交、订单/退款状态、金额及健康结果必须一致。

全局强制适用

人员、健康标签、Mocatch、体重管理、宅客报告、全部消费订单、餐饮退款、补偿扫描、人工重推、群体展开、Worker 和重试全部使用同一个 wanyisheng_sync_enable 开关。

配置建议

配置默认值作用
wanyisheng_sync_enable0总开关,事件登记和 Worker 发送双重检查
wanyisheng_sync_timeout5 秒可选,HTTP 超时
wanyisheng_sync_batch_size20可选,单批任务数量
wanyisheng_sync_max_retry5可选,最大自动重试次数

初始化放在 store/db/config.sql,默认关闭;App Secret 不写入可提交 SQL、普通日志或前端可见配置。请求使用 App ID、毫秒时间戳、唯一 nonce 和 HMAC-SHA256 签名。

三个业务事件

类型登记时机幂等键
健康档案人员健康信息提交后;一次体测 session 完整落库后health_profile:userId
订单滨州所有完成的消费订单均纳入,不因订餐、外部/Shop、自提、取餐柜等来源排除;统一发送 dine_in_order,人工、设备和定时自动完成均触发order:orderNo
退单退款真正成功后;发送前保证原订单已同步refund:refundNo

任务与 Worker

必须通过的故障测试

分别模拟任务表缺失/写失败、Worker 被杀、DNS 失败、连接超时、HTTP 400/500、无效 JSON、重复事件、并发 Worker、日志写失败;逐项证明原接口响应与主业务数据库结果不变。

实施切片

  1. 配置与任务表。
  2. After-Commit 登记、独立 Worker、HTTP Client、重试、熔断与脱敏日志。
  3. 健康档案事件。
  4. 订单事件。
  5. 退款事件及原订单依赖。
  6. 补偿、人工重推、状态查询与故障注入测试。

当前为设计方案,未修改业务代码、正式 SQL、Supervisor 或生产配置。正式开发前需确认发布版本和 Worker 部署方式。