# 实施计划:骑手配送类型与派单过滤 **分支**:`test` | **日期**:2026-09-02 | **规格**:[spec.md](./spec.md) ## 设计决策 1. `info_user.delivery_type VARCHAR(64) NULL`,取值 `FOOD`、`FLASH` 逗号组合(归一化为大写、去空白、去重);`NULL`/空串在代码层视为同时兼容两类,保证 SQL 未执行或骑手未重新保存资料时现有行为不变。 2. `InfoUser.supportsDeliveryType(String)` 供两端门禁复用;`InfoUser.normalizeDeliveryTypes(String)` 静态归一化,非法值抛 `IllegalArgumentException`,Controller 统一转国际化业务错误 `no.user.delivery.type.invalid`。 3. 门禁只加在"获取新任务"路径:外卖 `orderList` 的 `newTask` 页签与 `acceptOrder` 要求兼容 `FOOD`;闪送 `riderOrders` 的 `newTask`、待抢详情与 `accept` 要求兼容 `FLASH`。骑手本人已接订单页签和取件、送达履约不限制,避免配置调整卡死进行中订单。 4. 闪送待抢详情对不兼容骑手返回"订单不存在"错误,避免泄露任务存在性;列表与抢单返回专属错误 `flash.delivery.rider.type.not.enabled`,外卖侧使用 `no.user.delivery.type.not.enabled`。 5. `/infouser/user/setuser` 白名单拷贝新增 `deliveryType`;平台 `POST/PUT /infouser/user` 沿用 `normalizeAuditRejectReason` 的归一化模式校验配送类型。 6. MyBatis:`InfoUser` 为 MyBatis-Plus 实体,普通字段自动参与 CRUD;手写 `InfoUserMapper.xml` 需同步 resultMap、`insertInfoUser`、`updateInfoUser` 三处。 7. SQL 记录于 `updatesql/sql.md`:增量加列 + `user_type='2' AND delivery_type IS NULL` 回填 `FOOD,FLASH`。 8. 平台骑手审核页 `peisus.vue` 在交通工具下方增加配送类型复选框(`FOOD`/`FLASH`),文案进四个 `infouspeisus` 语言文件。 ## 验证 ```powershell $env:JAVA_HOME='C:\Users\qmj\.jdks\graalvm-jdk-21.0.7' $env:PATH="$env:JAVA_HOME\bin;$env:PATH" mvn -pl ruoyi-system -am -Dtest=InfoUserDeliveryTypeTest -Dsurefire.failIfNoSpecifiedTests=false test mvn -pl ruoyi-admin -am -Dtest='FlashDeliveryApplicationServiceTest,FlashDeliveryI18nContractTest' -Dsurefire.failIfNoSpecifiedTests=false test mvn -pl ruoyi-admin -am -DskipTests package git diff --check ``` 外卖控制器为既有无测试代码,本次门禁改动仅做编译验证。