# 功能规格：骑手配送类型与派单过滤

**功能标识**：`025-rider-delivery-type`

**创建日期**：2026-09-02

**状态**：已确认

**输入**：骑手端审核资料原型新增"配送类型"多选项（美食外送、闪送，可同时选择）；派单要求按骑手选择的配送类型分配订单。

## 用户故事

### 用户故事 1：骑手在审核资料中选择配送类型（P1）

骑手在提交审核资料时选择自己承接的配送类型：美食外送、闪送，可同时勾选两项。

**验收场景**：

1. **假如** 骑手提交资料时勾选一项或两项配送类型，**当** 资料保存，**那么** 系统保存骑手选择的配送类型，平台审核页可见。
2. **假如** 骑手提交了 `FOOD`、`FLASH` 之外的配送类型值，**当** 资料保存，**那么** 系统拒绝并返回国际化业务错误。
3. **假如** 骑手未选择配送类型（历史数据或未提交），**当** 其查询或抢单，**那么** 系统视为同时兼容美食外送与闪送，行为与现有骑手一致。

### 用户故事 2：派单按配送类型分配订单（P1）

骑手查询外卖或闪送的新任务列表、抢单时，系统按骑手选择的配送类型过滤。

**验收场景**：

1. **假如** 骑手仅选择美食外送，**当** 其查询闪送新任务或抢单，**那么** 系统拒绝并返回国际化业务错误；查询外卖新任务与接单不受影响。
2. **假如** 骑手仅选择闪送，**当** 其查询外卖新任务或接单，**那么** 系统拒绝并返回国际化业务错误；闪送列表与抢单不受影响。
3. **假如** 骑手同时选择两项，**当** 其分别查询外卖与闪送新任务，**那么** 两类任务均可见、均可抢。
4. **假如** 骑手的配送类型后续被调整，**当** 其查询自己已接订单的页签（待取件、配送中等），**那么** 本人历史订单仍可见，不受新配置影响。

## 需求

- **FR-001**：`info_user` 新增 `delivery_type VARCHAR(64) NULL`，取值为 `FOOD`（美食外送）、`FLASH`（闪送）以逗号分隔的组合；`NULL` 或空串视为同时兼容两类。
- **FR-002**：App 资料提交接口 `/infouser/user/setuser` 接收并保存 `deliveryType`；值非空时必须能解析为至少一个合法类型，否则返回国际化错误。
- **FR-003**：平台新增/修改用户接口 `POST/PUT /infouser/user` 对 `deliveryType` 执行相同校验。
- **FR-004**：`getuserinfo` 等现有用户信息接口随实体返回 `deliveryType`。
- **FR-005**：外卖骑手新任务列表 `newTask` 页签与接单接口要求骑手兼容 `FOOD`；闪送新任务列表、待抢详情与抢单接口要求骑手兼容 `FLASH`；不满足时返回国际化业务错误。
- **FR-006**：骑手本人已接订单的列表页签与履约操作不做配送类型限制。
- **FR-007**：数据库变更只记录在 `updatesql/sql.md`；存量骑手回填为 `FOOD,FLASH`，保持现有行为不变。

## 非目标

- 不修改骑手 App 前端（表单由 App 团队按原型实现）。
- 不实现自动派单、按城市派单或骑手在线状态过滤。
- 不限制已完成历史订单的查询。
