# 闪送多取货点验证记录 日期: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 package`:**BUILD SUCCESS**,全部参与模块打包通过。 原支付失败在实现前 HEAD 已存在:`normalizePayType` 直接接受非空字符串,允许值校验被注释,而旧测试要求拒绝 `2`。本次未修改该支付行为或禁用该测试,只在最终定向命令排除该方法;不能据此声称闪送完整测试全部通过。 Mock 测试覆盖业务分支、事务注解、订单锁及当前读调用顺序、重试与异常传播,不能证明真实数据库事务回滚或并发结果。 ## 平台验证 - `node --test tests/flash-delivery.test.cjs tests/flash-multi-pickup.test.cjs`:**11/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 的有序多经点与整线直线降级。 - 未运行全仓完整回归,未部署上线。