quickstart.md 3.1 KB

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 资质、在线状态、车型、距离与接单互斥规则筛选。

手动端到端验证(联调环境)

  1. 用户 App(寄件人)与骑手 App 各登录一个测试账号;骑手账号具备闪送(FLASH)配送资质。
  2. 寄件人创建立即单(货到付款或沙箱支付),记下 orderNo;符合条件的骑手应立即看到订单并收到“有新的闪送订单”。
  3. 骑手在任务列表抢单 → 寄件人应收到「骑手已接单,NO:{orderNo}」推送,消息中心出现对应记录。
  4. 骑手提交取件凭证 → 寄件人收到「骑手配送中,NO:{orderNo}」。
  5. 骑手提交送达凭证(含 PIN 时输入 PIN)→ 寄件人收到「骑手已送达,NO:{orderNo}」。
  6. 另起一单:骑手接单后由寄件人取消 → 骑手收到「订单已取消,NO:{orderNo}」;寄件人不收到取消推送。
  7. 再起一单:骑手接单后由平台后台取消 → 骑手收到取消推送。
  8. 反例:待接单状态直接平台取消(无人接单)→ 无任何骑手推送。
  9. 反例:等待超过自动完成时限(或平台手动完成)→ 用户无「已完成」推送(FR-010)。
  10. 切换寄件人 App 语言(vi/en/tw/zh)重复第 3 步 → 推送文案语言随之变化。
  11. 创建未来时间的预约单 → 创建后骑手列表不可见、无新单推送;到达 scheduledPickupStartAt 后约 1 秒内订单变为可见并收到一次“有新的闪送订单”,持续观察不得重复推送。
  12. 发布一笔外卖单 → 骑手推送应为“有新的外卖订单”,与第 2/11 步的闪送文案可区分。

判定

  • 第 2~7、11~12 步全部按期收到且展示同步,第 8~9 步确实无推送、第 10 步语言正确 → 特性验证通过(对应 spec SC-001~SC-005)。
  • 推送期间人为停掉推送云函数 → 订单操作仍全部成功(SC-004 零传导)。