# 数据模型:闪送配送服务 ## `flash_delivery_order` 核心字段:`id`、唯一 `order_no`、与用户联合唯一的 `client_request_id`、`user_id`、`rider_id`、`service_type`、`status`;`package_type`、`package_size`;`delivery_mode`、预约开始/结束时间;`pin_required`、四位交付 PIN;取件/收件联系人、电话、市/区、交付方式、地址、详细地址和经纬度快照;`distance_meters`、`distance_source`、`estimated_duration_seconds`;整数 `amount`、`currency`、`pricing_id`、`pricing_version`、`pricing_start_time`、`pricing_end_time`、`starting_distance`、`starting_fare`、`distance`、`freight`、`distance_fee` 计价快照;`user_note`、`version`、关键状态时间、取消审计及创建/更新时间。 索引:订单号唯一、用户幂等号唯一、待抢排序、用户列表、骑手列表、自动完成扫描。 ## `flash_delivery_pricing` 每个服务类型可保存多个运价时段。字段为 `service_type`、`start_time`、`end_time`、`starting_distance`、整数 `starting_fare`、`distance`、整数 `freight`、`config_version`、`updated_by` 和创建/更新时间。配置保存即生效,不保存 `enabled`;同一服务类型的时间段不得重叠,索引支持按服务类型和时间匹配当前时段。有效修改后版本加一,历史订单不回写。当前时段查询不使用 `LIMIT 1` 隐藏异常数据;若匹配到多条则明确返回配置重叠错误。 ## `flash_delivery_pricing_lock` 以 `service_type` 为主键,固定保存 `HELP_SEND`、`HELP_PICKUP`、`URGENT` 三行。新增、修改和删除运价时,事务先通过 `SELECT ... FOR UPDATE` 锁定涉及的服务类型,再检查重叠并写入,避免并发请求同时通过“先查重、后写入”。修改跨服务类型时按服务类型字典序加锁,避免反向加锁造成死锁。 ## `flash_delivery_order_image` 保存 `order_id`、`proof_type`(SENDER/PICKUP/DELIVERY)、`image_url`、`sort_order`、`operator_type`、`operator_id`、`create_time`。 ## `flash_delivery_order_log` 保存 `order_id`、`from_status`、`to_status`、`operator_type`(USER/RIDER/ADMIN/SYSTEM)、`operator_id`、`reason`、`create_time`。 ## `info_address` 增量 新增 `is_top tinyint(1) not null default 0` 和 `top_time datetime null`。列表按 `is_top desc, top_time desc, id desc`。 ## 状态转换 | 当前 | 操作/角色 | 下一状态 | |---|---|---| | WAITING_ACCEPTANCE | 抢单/RIDER | ACCEPTED | | WAITING_ACCEPTANCE | 取消/USER、ADMIN | CANCELLED | | ACCEPTED | 取件且含图片/指定 RIDER | PICKED_UP | | ACCEPTED | 取消/USER、ADMIN | CANCELLED | | PICKED_UP | 送达且含图片/指定 RIDER | DELIVERED | | PICKED_UP | 异常取消/ADMIN | CANCELLED | | DELIVERED | 签收或自动/USER、SYSTEM、ADMIN | COMPLETED | | DELIVERED | 异常取消/ADMIN | CANCELLED | `COMPLETED`、`CANCELLED` 是终态。