validation.md 4.2 KB

闪送多取货点验证记录

日期:2026-09-15。后端、平台 PC 在 test-202609v1 实现;商家 PC 同名分支没有闪送页面改动。

本次范围

  • 多点独立物品、整线报价、站点持久化、原运价快照改址、逐站凭证和进度。
  • 默认用户顺序,沟通后记录原因及骑手同意声明再调整目标;导航与取件分离、幂等与订单行锁保护。
  • 部分取件禁止用户取消,平台异常关闭记录问题站、处理结果和已取物品交接;接单前逐站脱敏。
  • 平台多点详情、实际进度、声明审计和异常取消,四语言文案;接口和 SQL 文档同步。

后端验证

临时设置 JAVA_HOME=C:\Users\qmj\.jdks\graalvm-jdk-21.0.7 并将其 bin 加入当前命令的 PATH,不修改全局配置。

  1. 新契约测试先复现缺少 pickups/stopId;严格数量测试先复现 Jackson 将 1.9 转为 1,再实现字段级整数解析。
  2. mvn -pl ruoyi-admin -am '-Dtest=FlashDelivery*Test' '-Dsurefire.failIfNoSpecifiedTests=false' test:system 7 项通过;admin 123 项中 122 项通过,唯一失败为原有 FlashDeliveryApplicationServiceTest.createRejectsUnsupportedPayType
  3. 最终定向命令:mvn -pl ruoyi-admin -am '-Dtest=FlashDelivery*Test,GoogleRoutesDistanceProviderTest,!FlashDeliveryApplicationServiceTest#createRejectsUnsupportedPayType' '-Dsurefire.failIfNoSpecifiedTests=false' test:system 7 + admin 124 = 131 项通过。其中多取货点业务测试 23 项,路线测试 7 项。额外 Google 类名模式未匹配测试类,不计入数量。
  4. mvn -pl ruoyi-admin -am -DskipTests packageBUILD SUCCESS,全部参与模块打包通过。

原支付失败在实现前 HEAD 已存在:normalizePayType 直接接受非空字符串,允许值校验被注释,而旧测试要求拒绝 2。本次未修改该支付行为或禁用该测试,只在最终定向命令排除该方法;不能据此声称闪送完整测试全部通过。

Mock 测试覆盖业务分支、事务注解、订单锁及当前读调用顺序、重试与异常传播,不能证明真实数据库事务回滚或并发结果。

平台验证

  • node --test tests/flash-delivery.test.cjs tests/flash-multi-pickup.test.cjs11/11 通过
  • node node_modules/eslint/bin/eslint.js --no-ignore src/views/flashDelivery/multiPickup.js src/views/flashDelivery/orders/MultiPickupDetail.vue src/views/flashDelivery/orders/OrderDetail.vue src/views/flashDelivery/orders/index.vue src/views/flashDelivery/shared.js:通过。
  • 当前命令设置 NODE_OPTIONS=--openssl-legacy-provider 后,执行 node node_modules/@vue/cli-service/bin/vue-cli-service.js build --mode staging:通过;保留仓库原有备份组件及资源大小警告。
  • Chrome 中挂载真实 Vue/Element 组件:检查原站点顺序、已取 1/2、当前目标、骑手声明和交接展示;异常取消检查缺项阻止提交、真实 ImageUpload 选择图片及提交完整取消参数,均通过,无页面运行错误。接口和上传响应由本地测试夹具模拟,没有访问真实后端。
  • 页面截图与浏览器夹具保存在本地 .superpowers/sdd/flash-multi/,不纳入产品代码提交。

审查

后端及路线/平台分别经过独立静态审查,未发现新增高、中严重度问题;补齐新增业务注释。提交前检查差异、范围与换行,保留现有编码风格。

未验证及上线前事项

  • updatesql/sql.md 的新表、字段、索引和字典由开发者手动执行,本次未执行任何数据库迁移。上限初始为 1;App 适配及联调后再配置多点开关和上限。
  • 真实 MySQL 中的取件/取消双向竞争、末站并发、锁等待后的当前读可见性、失败后的完整回滚与 SQL 应用结果未验证;按 quickstart.md 执行。
  • 用户/骑手闪送 App 页面源码不在本次工作区,排序、目标选择、导航、进度与取消入口仍需客户端接入和联调;T099、T100 对应部分继续保留待办。
  • 未调用真实 Google Routes,未部署或切换 Foodie_HCM_Map,未验证真机导航。当前报价扩展既有 Google provider 的有序多经点与整线直线降级。
  • 未运行全仓完整回归,未部署上线。