Quickstart: 闪送订单状态变更消息推送
Date: 2026-09-17 | Spec: spec.md
前置条件
- JDK 21 构建(本机用
C:\Users\qmj\.jdks\graalvm-jdk-21.0.7,仅命令内临时设置 JAVA_HOME/PATH,不改全局)。
- 先由开发者手动执行
updatesql/sql.md 中 2026-09-18 段,新增 is_display、索引和 flashDeliveryAvailabilityTask.openScheduledOrders() 每秒调度;不要由应用自动执行迁移。
- 6 份后端 i18n 资源已包含外卖/闪送专属新单 key。
自动验证(单测)
# 仓库根目录,Git Bash
export JAVA_HOME="C:/Users/qmj/.jdks/graalvm-jdk-21.0.7"
export PATH="$JAVA_HOME/bin:$PATH"
mvn -pl ruoyi-admin -am test -Dtest='FlashDeliveryNotificationServiceTest,FlashDeliveryApplicationServiceTest'
预期:全部通过。覆盖点:
- 三类履约事件(抢单/取件/送达)成功时调用对应用户推送;操作失败(条件更新 0 行)不推送。
- 用户/平台取消且
riderId 非空时调用骑手推送;riderId 为空跳过。
- 排除事件(complete、cancelExpiredScheduledOrder、加小费)零推送调用。
- 立即单创建后可见并触发闪送新单通知;预约单创建时隐藏且不推送,时间窗内原子开放后只通知一次。
- 新单候选骑手按 FLASH 资质、在线状态、车型、距离与接单互斥规则筛选。
手动端到端验证(联调环境)
- 用户 App(寄件人)与骑手 App 各登录一个测试账号;骑手账号具备闪送(FLASH)配送资质。
- 寄件人创建立即单(货到付款或沙箱支付),记下
orderNo;符合条件的骑手应立即看到订单并收到“有新的闪送订单”。
- 骑手在任务列表抢单 → 寄件人应收到「骑手已接单,NO:{orderNo}」推送,消息中心出现对应记录。
- 骑手提交取件凭证 → 寄件人收到「骑手配送中,NO:{orderNo}」。
- 骑手提交送达凭证(含 PIN 时输入 PIN)→ 寄件人收到「骑手已送达,NO:{orderNo}」。
- 另起一单:骑手接单后由寄件人取消 → 骑手收到「订单已取消,NO:{orderNo}」;寄件人不收到取消推送。
- 再起一单:骑手接单后由平台后台取消 → 骑手收到取消推送。
- 反例:待接单状态直接平台取消(无人接单)→ 无任何骑手推送。
- 反例:等待超过自动完成时限(或平台手动完成)→ 用户无「已完成」推送(FR-010)。
- 切换寄件人 App 语言(vi/en/tw/zh)重复第 3 步 → 推送文案语言随之变化。
- 创建未来时间的预约单 → 创建后骑手列表不可见、无新单推送;到达
scheduledPickupStartAt 后约 1 秒内订单变为可见并收到一次“有新的闪送订单”,持续观察不得重复推送。
- 发布一笔外卖单 → 骑手推送应为“有新的外卖订单”,与第 2/11 步的闪送文案可区分。
判定
- 第 2~7、11~12 步全部按期收到且展示同步,第 8~9 步确实无推送、第 10 步语言正确 → 特性验证通过(对应 spec SC-001~SC-005)。
- 推送期间人为停掉推送云函数 → 订单操作仍全部成功(SC-004 零传导)。