# 闪送多取货点验证记录 日期: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 的有序多经点与整线直线降级。 - 未运行全仓完整回归,未部署上线。 ## 2026-09-30:闪送骑手账单增量验证 以下仅针对本次账单增量,不覆盖上述旧章节的真实业务联调待办。 - TDD:先确认完成记账 6 项行为失败(原逻辑未写账单),补实现后通过;先确认账单详情缺失与历史来源 4 项失败,补来源分流后通过。审查发现旧钱包账单入口仍跨表查询,先以测试复现,再补来源过滤。 - 新增 `FlashDeliveryRiderBillingTest` 12 项、`UserBillingFlashDeliveryTest` 8 项、`UserBillingOrderSourceTest` 2 项,覆盖各完成操作人、完整金额、未确认收款、重复/竞争失败、未取完/取消、记账失败、Spring 注解事务回滚、本骑手查询过滤、日周月/通用列表、混合与缺失订单、来源/完成时间 XML 绑定。事务代理测试验证回滚请求,不等同真实数据库回滚验证。 - 最终使用本机 JDK 21(`C:\Users\99029\.jdks\graalvm-jdk-21.0.12+7.1`)运行 `mvn -pl ruoyi-admin -am test`,本轮 141 个测试类、975 项测试,0 失败、0 错误、0 跳过;原 target 中过期的已删除测试报告不计入。 - 执行 `mvn -pl ruoyi-admin -am -DskipTests package`,全部参与模块 `BUILD SUCCESS`。独立只读审查后修复唯一低严重度来源过滤问题,检查变更范围、CRLF 与 `git diff --check`(临时 `core.whitespace` 包含 `cr-at-eol`)。 - 未执行 `user_billing.order_source` 迁移 SQL、真实 MySQL 多连接竞争/失败回滚、App 联调或部署。代码仅对未来成功完成的订单生成账单,不自动补历史账单,不进入钱包/提现。提交与推送状态以 Git 记录为准。 ## 2026-10-14 测试库多点取送 SQL 执行核对 - 用户明确要求后,连接 `application-druid.yml` 标注的测试站点 `foodie`(MySQL 5.7.44),执行 `updatesql/sql.md` 的旧版增量补丁、两项上限字典初始化及废弃开关清理;未执行完整结构路径。 - 执行前 18 条站点旧列内容与对应订单级字段核对;执行后站点仍为 18 条,新增站点 3 列和订单 2 列,旧站点 6 列已删除。字典仅有取货/收货上限各一条,均为 1。 - 仅验证数据库结构及字典状态;真实 App 联调、线上迁移和真实并发履约未验证。 ## 2026-10-15:v2 交错取送与骑手双进度 - 用户确认在 `test-202609v2` 修改;保留全部原 Tab、名称、参数和角标订单数,App 源码由前端人员接入。客户原序可交错,骑手可自主选择其他待完成站,不新增取送关联、表或字段。 - RED:服务 `FlashDeliveryV2Test` 23 项中 3 失败/4 错误,分别命中旧顺序、默认目标、未取完不可送及必须同意的限制;XML 7 项中 1 失败,命中只允许 PICKED_UP 的数据库更新条件。 - 实现后定向测试仅一项新列表断言失败,原因为 QueryWrapper 的参数需先生成 SQL 才绑定;修正测试显式读取 SQL 后,运行完整 `mvn -q -pl ruoyi-admin -am test`,本轮新鲜报告 166 类/1192 项,0 失败/错误/跳过;包含 v2 23 项、XML 7 项及旧单/支付/记账/通知回归。 - `mvn -q -pl ruoyi-admin -am -DskipTests package` 退出码 0;实际 JDK 为 `C:\Users\99029\.jdks\graalvm-jdk-21.0.12+7.1`,只设置命令环境。只读代码复核未发现 Critical/Important/Minor 问题;差异与原有换行检查通过。 - 验证覆盖:交错报价/创建/改址保留原序;取2/3、送1/2仍待取件;取完才配送中;最后送达才整单已送达;骑手无同意声明选站和重试;未取禁送、漏取禁末送;错误骑手/目标/PIN/空凭证拒绝;站点重试不重复通知/写图;旧单同意和先取后送门禁保持。 - 未执行:真实 MySQL 多连接竞争/回滚、真实地图/支付网关/设备推送和 App 联调。无新增 SQL,未操作数据库;用户已要求提交与推送,实际结果以 Git 记录为准;既有未跟踪文件保持原样。