plan.md 2.3 KB

实施计划:骑手配送类型与派单过滤

分支test | 日期:2026-09-02 | 规格spec.md

设计决策

  1. info_user.delivery_type VARCHAR(64) NULL,取值 FOODFLASH 逗号组合(归一化为大写、去空白、去重);NULL/空串在代码层视为同时兼容两类,保证 SQL 未执行或骑手未重新保存资料时现有行为不变。
  2. InfoUser.supportsDeliveryType(String) 供两端门禁复用;InfoUser.normalizeDeliveryTypes(String) 静态归一化,非法值抛 IllegalArgumentException,Controller 统一转国际化业务错误 no.user.delivery.type.invalid
  3. 门禁只加在"获取新任务"路径:外卖 orderListnewTask 页签与 acceptOrder 要求兼容 FOOD;闪送 riderOrdersnewTask、待抢详情与 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、insertInfoUserupdateInfoUser 三处。
  7. SQL 记录于 updatesql/sql.md:增量加列 + user_type='2' AND delivery_type IS NULL 回填 FOOD,FLASH
  8. 平台骑手审核页 peisus.vue 在交通工具下方增加配送类型复选框(FOOD/FLASH),文案进四个 infouspeisus 语言文件。

验证

$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

外卖控制器为既有无测试代码,本次门禁改动仅做编译验证。