功能标识:024-flash-delivery
创建日期:2026-08-31
状态:既有功能已验证;2026-09-07 设计稿费用与物品信息对齐增量已确认,待实施;2026-09-14 多取货点增量已确认,2026-09-15 按方式 2 修订取件顺序规则,待实施
输入:基于蓝湖“闪送”分组 7 个设计页面、2026-08-24 用户端/骑手端补充原型及 2026-09-03 更新的 19 张用户端设计稿,实现帮送/帮取业务场景、普通/1 对 1 加急配送、共享地址簿、路线报价、完整物品信息、立即/预约配送、费用明细与报价校验、可选 PIN 交付、创建订单、寄件人/收件人订单查询、骑手主动抢单、急送独占、取件、送达、用户签收、平台配置与介入的非支付业务闭环。
用户选择帮送或帮取、普通或 1 对 1 加急配送,填写取送地址、物品信息和可选骑手小费后获取服务端报价,并回传报价明细发布一笔等待骑手接单的闪送订单。
优先级原因:报价与发布订单是闪送服务成立的基础,没有该能力就无法形成可配送任务。
独立测试:为同一组取件和收件坐标分别选择帮送/帮取及普通/加急配送,验证两种业务场景共享运价,立即订单按当前时刻、预约订单按预约开始时刻匹配唯一运价时段;系统使用起送与里程规则计算普通配送费,以当前时段的加急比例和最低加急费计算加急费,再加入用户小费返回整数新台币明细;创建订单时前端回传报价,后端复算并逐项校验后保存物品、地址、路线和计价快照。
验收场景:
骑手通过与骑手外卖订单一致的单一分页列表和页签参数查看新任务、待取件、配送中、已完成及已取消任务,主动抢单后依次上传取件和送达图片,完成实际配送。
优先级原因:第一版明确采用骑手主动抢单,不实现自动派单;抢单与配送状态流转是业务闭环的核心。
独立测试:使用 page、size、tab、longitude、latitude 查询骑手闪送列表,验证五个页签的状态映射、本人订单边界、附近任务距离和接单前字段;再由两个骑手并发抢同一订单,验证只有一个骑手成功,成功骑手上传取件和送达图片后订单依次进入已取件和已送达状态。
验收场景:
tab=newTask 和当前位置,当 查询闪送列表,那么 系统只返回当前可抢任务,并按与骑手外卖新任务列表一致的附近范围和距离规则处理。toPickup、delivering、completed 或 cancelled 页签,当 查询列表,那么 系统只返回当前骑手本人且符合页签状态映射的任务。newTask,那么 系统返回附近任务总数和最高订单金额,不返回尖峰倍率或骑手收入字段。用户在闪送与现有收货场景中共用同一个地址簿,可以搜索、新增、修改、查看、删除和置顶自己的地址。
优先级原因:蓝湖设计中的取件地址、收件地址和地址簿均依赖该能力,同时现有地址接口需要消除跨用户访问风险。
独立测试:准备用户 A 与用户 B 的地址,以用户 A 身份执行列表、详情、修改、删除和置顶操作,验证只能访问 A 的地址,所有针对 B 地址的请求均被拒绝。
验收场景:
userId,当 系统保存地址,那么 系统忽略该字段并以登录用户身份确定归属。用户查看自己的闪送订单与履约进度,可以在允许阶段取消订单,并在骑手送达后确认签收。
优先级原因:用户需要了解履约进度,并对尚未实际取件的订单保留取消能力。
独立测试:分别创建处于待接单、已接单、已取件和已送达状态的订单,验证用户取消和签收权限符合状态机规则,并验证送达 24 小时后的自动完成。
验收场景:
role=sender 或省略 role,那么 系统按创建时间倒序返回本人创建的各状态订单轻量摘要,不要求客户端提交 scene、status 或 serviceType。role=receiver 查询列表或查询订单详情,那么 系统返回该用户作为收件人的订单并允许读取收件码和配送进度。平台管理员维护一套供帮送和帮取共享的分时段运价,查询全部闪送订单,并在取件后的异常场景中取消或完成订单。
优先级原因:价格必须可运营调整,取件后的订单又必须具备受控的人工处置入口。
独立测试:管理员新增、修改和删除统一运价时段,验证重叠时段被拒绝、保存后立即生效,普通报价使用基础配送规则,加急报价额外使用该时段的加急比例和最低加急费;随后对已取件订单执行平台取消并检查状态日志。
验收场景:
平台管理员从“闪送管理”菜单进入价格配置或订单管理页面,无需直接调用接口即可维护统一分时段运价、筛选订单、查看完整履约资料并执行受权限控制的平台介入。
优先级原因:后端接口已具备,但缺少平台可操作入口会导致计价只能通过接口工具维护,异常订单也无法进入日常运营流程。
独立测试:以拥有完整闪送权限的管理员登录后台,完成统一分时段运价读取与修改、订单组合筛选、详情查看、异常取消和已送达订单完成;再以缺少对应权限的账号验证菜单与操作按钮不可用。
验收场景:
已注册普通用户在他人创建订单时通过收件手机号被安全绑定为收件人,可在“我收的”查看订单详情和配送进度;骑手承接 deliveryType=URGENT 的 1 对 1 急送后,在订单送达或取消前不得承接其他外卖或闪送任务。
独立测试:使用已注册、未注册、重复手机号和换绑手机号创建订单,验证收件账号只在创建时唯一匹配并固化;并发发起急送与其他任务抢单,验证同一骑手只能进入一个互斥的有效接单结果。
验收场景:
receiverUserId,后续手机号变化不改写历史订单。receiverUserId 为空,不向任何账号开放“我收的”权限。serviceType 只接受 HELP_SEND(帮送)和 HELP_PICKUP(帮取),deliveryType 只接受 NORMAL(普通配送)和 URGENT(1 对 1 加急配送)。deliveryType=URGENT 额外启用骑手独占规则和加急计价。scheduledPickupStartAt 匹配唯一运价时段;全部时间段之间不得重叠,没有匹配时段时必须拒绝报价和创建订单。sys_googlemap_key;闪送接口和业务日志不得返回或写入该 Key,Google Cloud 必须限制其 API、来源和配额。UP_TO_5_KG、OVER_5_TO_10_KG、OVER_10_TO_15_KG、OVER_15_TO_20_KG 之一,并作为订单快照原样保存。newTask 页签主动抢单,第一阶段不实现自动派单。page、size、tab、longitude、latitude;不得再拆分为 available、mine 或叠加 scene、status、serviceType 筛选。info_address 地址数据。updatesql/sql.md,不得直接执行。NOW 和 SCHEDULED 两种配送方式;预约时段固定为 30 分钟且不得晚于创建时间后三天。SENDER、PICKUP、DELIVERY 并记录操作人类型。page 和 size,按创建时间倒序返回本人全部状态的轻量摘要;骑手订单列表必须按 tab 在服务端映射底层状态并完成分页,禁止先分页后由客户端过滤。data 必须直接是订单详情,不得再套 order、images 或 logs;照片使用 senderImageUrls、pickupImageUrls、deliveryImageUrls 等明确字段,原始状态日志只允许平台审计详情返回。flash:* 权限分别控制页面访问、价格修改、订单查看、取消和完成操作,不得仅依赖按钮隐藏代替后端鉴权。startTime、endTime、startingDistance、startingFare、distance、freight、urgentRate 和 minimumUrgentFee,同时展示只读配置版本与更新时间。v-hasPermi 体系,不新增重复的状态管理或 UI 框架。tab 只接受 newTask、toPickup、delivering、completed 和 cancelled,分别映射待接单、已接单、已取件、已送达/已完成和已取消;闪送不提供外卖退款页签。newTask 列表必须返回取件点距离、路线距离、预计时长、基础配送费、加急费、小费、订单总金额、业务场景、配送等级、包裹类别、数量、重量范围、规格、配送方式、预约时段、完整取送文字地址和是否需要 PIN,并返回附近任务总数与最高订单金额;不得返回内部加急比例、最低加急费或尚未实现的骑手收入。data 的顶层形状,也不得要求 App 通过 data.order 是否存在判断响应类型。receiver_user_id;创建订单时将收件手机号去除首尾/内部空白、+、- 和圆括号但不改写国家码,再以剩余数字唯一匹配当时已注册且 userType=0 的普通用户并固化匹配结果,不执行历史订单追溯认领。role 参数,只接受 sender 和 receiver,省略时兼容为 sender;筛选必须在数据库分页前完成。deliveryType=URGENT 表示 1 对 1 独占配送。骑手已有未送达外卖、ACCEPTED 或 PICKED_UP 闪送时不得接急送;骑手存在 ACCEPTED 或 PICKED_UP 急送时不得再接任何外卖或闪送。lock:delivery:rider:{riderId},在持锁期间检查跨外卖和闪送订单的独占条件并执行接单;锁必须在数据库事务完成后释放,获取超时或 Redis 异常时按失败关闭原则拒绝接单。WAITING_ACCEPTANCE,不增加待支付状态、支付倒计时、支付接口或退款流程。baseDeliveryFee 仅表示起送价格,distanceFee 表示距离附加费;普通配送费仅在服务端按两者之和计算,不增加小计字段。普通配送的加急费为 0,加急配送的加急费等于“普通配送费 × 当前时段加急比例”四舍五入到整数 TWD 后与最低加急费取较大值。baseDeliveryFee、distanceFee、urgentFee、tipAmount 和 amount;加急报价还必须返回命中的 urgentRate 和 minimumUrgentFee,费用名称不得混用。历史订单金额快照不回写。flashDelivery key 集合完全一致。TWD。pos_order 或打车订单 taxi_order 的业务语义。本次只新增以上能力;沿用现有取消规则、非支付边界。复用现有字段与 version,无数据库迁移。
FR-078(2026-09-09 入参调整):确认修改地址与追加小费使用 POST /orders/address 和 POST /orders/tip;订单 ID 通过 JSON 请求体 orderId 传入,必须是有效正整数,token 仍放请求头。
本节按 2026-09-15 用户确认的方式 2 更新:默认按用户顺序引导,取得下单人同意后允许调整实际取件顺序;替换此前无条件自由取件的规则,生产功能仍待实施。单笔订单包含 1 至 N 个取货点和 1 个收货点,每个取货点独立关联联系人和物品信息。用户填写顺序用于初始路线报价、展示和默认取件引导;调整实际取件顺序须遵守 FR-094 至 FR-098。按整条路线距离计价,不新增每取货点附加费;点间不设单独距离限制,整条报价路线仍不得超过 40 公里。
用户逐站填写联系人、地址和物品,填写唯一收货点后获取整条路线报价;骑手接单后默认按用户顺序前往未取货站点,需要调整时先与下单人沟通、取得同意并保存调整记录,再逐站确认取件并上传凭证,全部取货点完成后订单进入已取件,送达流程不变。
优先级原因:每站独立物品和凭证用于履约核对与纠纷定位。
独立测试:验证每站物品独立、按用户顺序报价和默认引导、沟通同意后调整并记录骑手声明、前往与取件分离、单点可省略 stopId、多点必传 stopId、重试不推进其他站点、取件与用户取消互斥,以及全部取货点完成时仅推进一次主状态。
验收场景:
假如 多点地址保存与抢单或其他编辑并发,当 保存,那么 站点、摘要、收件人绑定、路线和金额必须同一事务提交或回滚,不出现两套地址或报价。
假如 用户下单前调整站点顺序,当 确认报价,那么 按最终顺序计算并展示路线和费用,提示默认按此顺序取件、骑手如需调整将先沟通。
假如 骑手选择非默认未取站,当 缺少调整原因或未声明已取得下单人同意,那么 不保存调整,也不能通过直接调用取件确认绕过所需记录;首期不要求用户在 App 内点击批准。
假如 已保存先前往 B 的调整,当 打开或退出导航,那么 B 仍为待取件,不生成取件凭证、不增加已取数量、不推进主状态;实际交接并提交有效图片后才可确认已取。
假如 用户顺序为 A → B → C,当 B 已取且 A/C 待取,那么 保留原始顺序和报价,展示已取 1/3 站及各站状态,默认下一站回到 A,用户自助取消不可用。
假如 平台核对调整,当 查看记录,那么 展示调整前后目标站、原因、骑手、操作时间和骑手声明,不显示为用户已在 App 审批;订单聊天可作为沟通依据。
假如 某站暂未备好,当 沟通同意后先去其他站,那么 原站继续待取;最终无法取货时联系平台处理,不能删除站点、虚假取件或直接完成整单。平台记录已取物品去向和交接凭证后再关闭异常订单。
假如 调整请求重试或与取件、取消并发,当 保存,那么 不重复追加同一次记录,不以过期状态覆盖目标;取消后禁止新调整,已取站不能作为新目标。
FR-093:地址编辑沿用 FR-073 至 FR-075、FR-077 的权限、状态、版本及原运价快照,重算整线;订单原子条件更新成功后,在同一事务保存完整站点、首点摘要、数量、收件人绑定及费用,失败全部回滚。完整站点输入保留并校验逐站物品,不因编辑联系人或地址清空物品。
FR-094:下单前用户可调整取货点顺序,按最终顺序报价并确认;待接单订单调整顺序沿用 FR-093 重报价及确认流程。下单页提示“默认按此顺序取件,骑手如需调整将先与您沟通”,用户可见文案按现有国际化要求实现。骑手接单后可以查看全部站点,默认突出显示用户顺序中最早的未取站为下一站。
FR-095:骑手需要先去其他未取站时,须先联系下单人并取得同意,再选择“先前往该站”,填写调整原因并声明“已取得下单人同意”。服务端保存订单、调整前目标站、调整后目标站、原因、骑手身份、操作时间及同意声明。首期不要求用户在 App 内点击批准;骑手勾选只证明其作出了声明,不证明下单人实际同意,平台不得标记为用户审批通过。订单聊天可作为沟通依据;未取得同意不能自行调整,无法联系下单人时联系平台处理。
FR-096:选择前往与确认已取货分开:前者只确定目标并记录必要的调整,不能修改站点取件状态、取件时间、凭证或主状态;后者必须实际交接并提交有效取件图片。新取件确认以当前目标为准;选择非默认站须先保存 FR-095 记录,不能通过直接提交 stopId 绕过。已确认站点的重试仍按 FR-087 幂等处理,不受目标已变化影响。选定目标在取件前保持;再次改变目标时记录调整。目标站取件后回到用户顺序中最早的未取站,全部取完后转为收货点。调整操作校验接单骑手、订单状态和本单未取站,保存须防重复并与取件、取消使用一致的订单并发保护。
FR-097:保留用户原始站点顺序及报价,按每站实际确认时间和状态展示履约进度;用户、骑手及平台显示已取数量/总数量(如“已取 1/3 站”)。部分取件主状态仍为 ACCEPTED,取消入口按是否任意站已取判断,不能仅依据主状态显示可取消。平台详情可查看 FR-095 调整记录;调整声明和取件凭证分别展示,不相互替代。
FR-098:骑手仅能调整本单未取货地点的访问先后,不能新增或删除地点、修改地址或物品,也不能漏取。某站暂时无法取货可以沟通后先去其他站,该站继续保留待取件;最终无法取货、缺件或拒收须联系平台处理,不能虚假确认取件、擅自部分履约或直接完成整单。平台介入时记录问题站、处理结果及已取物品去向和交接凭证,再关闭异常订单;沿用既有介入权限,本次不新增支付退款功能。
方案来源:上述为本项目 2026-09-15 已确认的方式 2。Lalamove 的业务规范仅作为讨论背景;骑手声明、调整记录及具体 App 操作是本项目设计,不标注为已核实的 Lalamove 操作流程。
地图约束依据:Google Routes 中途点限制、Google Maps URL 参数及平台途经点限制。
vehicleType:1=机车、2=轿车;服务端拒绝缺失或其他数值。TWO_WHEELER,轿车使用 DRIVE;返回的路线距离和预计时长随订单保存。地图失败时降级为直线距离并标记 STRAIGHT_LINE,预计时长按机车 25 km/h、轿车 30 km/h 保守估算,向上取整且最少 60 秒;该展示估算不参与计价。info_user.vehicle_type(1=机车、2=轿车);待抢列表、待抢详情和接单均要求与订单车型一致。历史骑手、运价和订单均默认机车,保证迁移后既有行为不变。NULL,不参与本期运费计算。物品类别、数量、小费及地址校验保持必填规则。vehicleType。