# Implementation Plan: 外卖无人接单自动取消与退款 **Date**: 2026-10-15 | **Spec**: [spec.md](spec.md) | **Status**: 已提交;数据库部署与联调待执行 ## Summary 仅处理当前独立外送单。订单首次可履约时写 `effective_at`;预约单以生效、预约开始、实际开放给骑手三者最晚时间计时。未支付在线单可安全切换到到付。无人接单超过配置阈值时用与骑手接单互斥的条件更新取消,记录退款意图、日志并通知用户和商家。 OMG 正式退款使用支付尝试保存的环境快照和商户 CreditCheckCode 调用信用卡交易查询与 DoAction;测试环境没有退款能力,退款意图保持待处理。正式退款结果不确定时先查询交易事实,再决定下一动作,不盲目重复调用。切换部署环境不会把旧测试流水送到正式接口。 ## Components 1. `ruoyi-system`:`pos_order.effective_at` 映射、条件支付切换/超时取消 SQL、退款意图持久层。 2. `ruoyi-admin`:订单创建和付款写点、切换服务、预约开放与超时任务、退款任务与 OMG 网关、取消通知。 3. `updatesql/sql.md`:按时间顺序追加字段、退款表、阈值字典、调度任务;不在此执行数据库迁移。 4. `specs/037-order-no-rider-auto-cancel`:规格、计划、任务与验证结果。 ## Safety and acceptance - 支付与切换的条件更新互斥,`effective_at` 只首次写入;迟到付款产生退款意图。 - 接单与取消的条件更新互斥,预约单未开放或未到阈值不会取消。 - LINE 复用现有退款意图;OMG 退款保留尝试、网关状态、动作和错误,重复扫描幂等。 - 测试环境不调用正式 OMG API,不把测试环境退款失败记作成功。 - 完成所有接口源码后统一运行 JDK 21 定向测试、模块构建与回归;提交前审计暂存范围,排除已有脏文件。 ## 验证记录 - JDK 21 定向测试:037 涉及的 9 个测试类、99 个测试通过。 - `mvn -q -pl ruoyi-admin -am -DskipTests package` 通过。 - `mvn -q -pl ruoyi-admin -am test` 执行 1057 个测试,只有 `FlashDeliveryV2Test` 的 7 个断言/错误未通过;该文件对应的闪送服务在本任务开始前已有未提交修改,本任务不改动其代码。 - SQL 仅登记在 `updatesql/sql.md`,没有执行数据库迁移;测试环境 OMG 无真实信用卡退款接口,正式退款仍待正式凭证和网关联调验收。