# 任务：闪送配送服务

## Phase 1：测试红灯与数据层

- [x] T001 编写计价、状态机、路线测试并确认因实现缺失而失败
- [x] T002 编写 MyBatis XML 契约测试，覆盖映射、原子抢单和自动完成条件并确认失败
- [x] T003 在 `updatesql/sql.md` 记录四张新表、地址字段、索引、计价种子和后台权限 SQL
- [x] T004 新增闪送实体、Mapper、XML 与地址置顶/安全条件方法，使数据层测试转绿

## Phase 2：US1 报价与订单创建

- [x] T005 [US1] 先写报价边界、路线降级、配置停用、无效地址、重算和幂等测试并确认红灯
- [x] T006 [US1] 实现 Routes 客户端、Haversine 降级、计价器和配置读取
- [x] T007 [US1] 实现 home/quote/create DTO、服务与 Controller，保存快照和创建日志
- [x] T008 [US1] 运行 US1 定向测试转绿

## Phase 3：US2 骑手抢单和配送

- [x] T009 [US2] 先写骑手角色、脱敏、排序、原子抢单、越权、图片必填测试并确认红灯
- [x] T010 [US2] 实现骑手 available/mine/detail/accept/pickup/deliver
- [x] T011 [US2] 同事务保存图片和状态日志，运行 US2 测试转绿

## Phase 4：US3 安全共享地址簿

- [x] T012 [US3] 先写跨用户拒绝、userId 忽略和搜索排序测试并确认红灯
- [x] T013 [US3] 新增地址 DTO，修复匿名删除/详情和实体直绑，提供 DELETE/top
- [x] T014 [US3] 更新地址 Mapper/XML 并运行地址安全测试转绿

## Phase 5：US4 用户跟踪、取消和签收

- [x] T015 [US4] 先写本人查询、越权、取消、签收、终态和自动完成并发测试并确认红灯
- [x] T016 [US4] 实现用户列表/详情/cancel/confirmReceipt
- [x] T017 [US4] 实现 24 小时自动完成任务，运行 US4 测试转绿

## Phase 6：US5 平台配置和介入

- [x] T018 [US5] 先写权限注解、计价版本、查询、异常取消和平台完成测试并确认红灯
- [x] T019 [US5] 实现平台 pricing 和 orders API
- [x] T020 [US5] 运行 US5 测试转绿

## Phase 7：交付

- [x] T021 为五个 i18n 文件添加一致的闪送/地址错误 key 与一致性测试
- [x] T022 核对 API 契约、实现、权限和 SQL，更新任务状态
- [x] T023 JDK 21 运行定向测试、模块构建和 `git diff --check`
- [x] T024 核对暂存范围并准备中文提交

## Phase 8：补充用户端/骑手端原型

- [x] T025 更新包裹、预约、PIN、寄件凭证、费用明细和角色脱敏规格/API/SQL
- [x] T026 先写计价明细、预约抢单条件、PIN、寄件凭证、状态分组和安全响应测试并确认红灯
- [x] T027 扩展订单/计价/凭证实体、Mapper XML 和数据库迁移记录
- [x] T028 实现包裹信息、预约配送、40 公里限制和服务端费用明细
- [x] T029 实现 PIN 送达与 SENDER/PICKUP/DELIVERY 三类凭证
- [x] T030 实现用户/骑手状态分组分页、角色业务视图和骑手公开摘要
- [x] T031 更新 API 契约与 i18n，并运行 JDK 21 定向测试、模块构建和差异检查

## Phase 9：US6 平台管理前端

- [x] T032 [US6] 在 `foodie-admin-vue/tests/flash-delivery.test.cjs` 和 `package.json` 增加闪送定向测试，直接执行请求配置、分页归一化、价格校验、状态操作和四语言对象，并确认因目标模块缺失而红灯
- [x] T033 [US6] 新增 `src/api/flashDelivery/contracts.js`、`index.js` 和 `src/views/flashDelivery/shared.js`，封装六个平台请求及纯函数，使请求、分页、价格校验和状态规则测试转绿
- [x] T034 [US6] 新增 `src/views/flashDelivery/pricing/index.vue`，实现三类价格读取、编辑校验、启停、版本展示和保存后服务端回填
- [x] T035 [US6] 新增 `src/views/flashDelivery/orders/index.vue` 与 `OrderDetail.vue`，实现服务端分页筛选、详情分区、图片预览、取消原因和已送达完成操作
- [x] T036 [US6] 在四个 `src/api/language/language.*.js` 文件增加一致的 `flashDelivery` 文案，并使语言与页面契约测试转绿
- [x] T037 [US6] 在 `updatesql/sql.md` 追加幂等的“闪送管理/价格配置/闪送订单”动态菜单 SQL，将现有六项权限归入对应页面
- [x] T038 [US6] 运行 `npm run test:flash-delivery`、新增文件 ESLint、`npm run build:prod` 和两个仓库 `git diff --check`，核对暂存范围后分别使用中文提交

## Phase 10：外卖同规则时段运价

- [x] T039 [US1] 先重写 `FlashDeliveryPricingCalculatorTest`，覆盖起送内、0.49/0.50/0.99/1.20 公里边界、非 1 公里计价距离、整数 HALF_UP 和非法配置，并确认旧计价实现红灯
- [x] T040 [US1] 重写 `FlashDeliveryPricing`、`FlashDeliveryOrder`、费用 DTO、订单 XML 和计价器，删除最低价、分钟价、尖峰与启停字段，实现整数 TWD 的外卖同规则距离计价
- [x] T041 [US5] 先扩展 `FlashDeliveryApplicationServiceTest` 与 `FlashDeliveryControllerContractTest`，覆盖当前时段、无时段、重叠、新增、按 ID 修改、版本冲突、删除和新订单快照，并确认旧服务接口红灯
- [x] T042 [US5] 实现 `FlashDeliveryPricingMapper` 当前时段/重叠查询、服务类型行锁、时段 CRUD、home/quote/create 当前时段唯一性检查、完整快照及四语言业务错误，使后端定向测试转绿
- [x] T043 [US6] 先更新 `tests/flash-delivery.test.cjs`，覆盖价格 GET/POST/PUT/DELETE、六字段载荷、时段与整数校验、页面权限和四语言 key，并确认旧前端红灯
- [x] T044 [US6] 更新前端 API、`shared.js`、价格时段新增/编辑/删除页面、订单费用详情和四语言，删除启停、最低价、分钟价与尖峰展示，使定向测试转绿
- [x] T045 在 `updatesql/sql.md` 追加开发阶段重建脚本：删除旧闪送测试表并创建运价锁、时段配置、新订单快照与索引的最终结构；只记录不执行
- [x] T046 使用 JDK 21 运行后端定向测试和模块构建，运行前端定向测试、强制 ESLint、生产构建、CRLF 与两个仓库差异检查
- [x] T047 核对两个仓库暂存范围，分别使用中文提交并推送当前 `test` 分支，不包含后端仓库原有脏文件

## Phase 11：App 订单列表与详情精简

- [x] T048 先改 Controller 反射、列表字段白名单和详情直接响应测试，确认旧 `/available`、`/mine`、多筛选参数及 `{order,images,logs}` 契约红灯
- [x] T049 新增用户列表、骑手列表、骑手分页 DTO，将 App 详情 DTO 改为直接订单字段和三类明确照片 URL 数组，删除旧待抢/图片/日志 App DTO
- [x] T050 先改应用服务测试，覆盖用户轻量列表、五个骑手页签、外卖同规则附近范围/排序、摘要、预约条件、本人边界、接单前地址权限和固定详情结构并确认红灯
- [x] T051 将用户列表收敛为 `page,size`，将骑手 `/orders` 收敛为 `page,size,tab,longitude,latitude`，在数据库分页前完成条件与距离排序
- [x] T052 重写 App 详情映射，直接返回订单字段并按类型聚合照片 URL，不查询或返回原始状态日志；补齐五语言参数错误
- [x] T053 更新 `docs/flash-delivery-app-api.md` 与 quickstart，删除旧列表路由、筛选、近似坐标及 App 包装响应说明
- [x] T054 使用 JDK 21 运行闪送定向测试、i18n 契约、模块构建和差异检查，核对暂存范围后使用中文提交并推送 `test`

### 2026-09-01 中断点（已于 2026-09-02 收口）

- T048–T053 的生产代码、测试源码、五语言文案和接口文档已在 2026-09-01 写入工作区；2026-09-02 完成修复、验证并提交。
- 收口时修复两处阻塞：`FlashDeliveryApplicationService.riderOrders` 改用 `effectiveLongitude/effectiveLatitude` 有效坐标变量解决 lambda 捕获编译错误；`FlashDeliveryApplicationServiceTest.assertRiderTab` 改为先渲染 `getSqlSegment()` 再断言参数表（MyBatis-Plus 条件参数为惰性写入，原断言在渲染前读取恒为空）。
- 验证结果：JDK 21 定向测试 40 项全部通过（0 失败、0 错误）；`mvn -pl ruoyi-admin -am -DskipTests package` 成功；`git diff --check` 清洁。
- 另按审核结论补记 `sys_job` 闪送自动完成调度 SQL（见 `updatesql/sql.md` 2026-09-02 节），并在 `plan.md` 修订并发描述与实现一致。
- 已有规格提交：`17888f8`（明确闪送 App 订单列表与详情契约）、`8a3ea64`（制定闪送 App 订单接口精简计划）。

## Phase 12：新版蓝湖稿的收件人订单与急送独占

- [x] T055 更新规格、设计、数据模型和 API 契约，固定非支付、整数 TWD、静态等待接单文案、创建时收件账号匹配及急送独占规则
- [x] T056 先扩展 Mapper、应用服务和 Controller 测试，覆盖收件账号唯一匹配、无匹配、重复匹配、历史不追溯、`role` 列表、参与者详情/签收、收件人禁止取消，并确认旧实现红灯
- [x] T057 新增 `receiver_user_id` 实体/XML/索引和普通用户手机号精确匹配查询，实现创建时固化、寄件人/收件人数据库分页及参与者权限
- [x] T058 先补跨外卖/闪送接单测试，覆盖骑手级 Redisson 锁、忙碌骑手拒绝急送、急送阻止其他接单、终态释放和并发串行检查，并确认旧实现红灯
- [x] T059 以共享锁键 `lock:delivery:rider:{riderId}` 实现 `URGENT` 跨订单独占，事务完成后释放锁，并在当前有效外卖与闪送接单入口返回一致的国际化业务错误
- [x] T060 在 `updatesql/sql.md` 追加 `receiver_user_id` 字段和索引迁移，仅记录不执行；同步 App 接口文档和五语言错误文案
- [ ] T061 使用 JDK 21 运行闪送、外卖接单和 i18n 定向测试、模块构建与差异检查，核对暂存范围后使用中文提交

## Phase 13：设计稿费用与物品信息对齐

- [x] T062 修正规格、设计、数据模型和 API 契约，确认帮送/帮取与普通/加急正交、统一分时段运价、比例加急费、最低加急费、小费、预约计价时刻、报价回传校验及完整物品字段
- [x] T063 扩展计价器、运价 Mapper 和订单 XML 测试，覆盖比例加急费、最低值、小费、全局时段与新增快照字段；按用户要求集中实现后统一验证，未单独执行旧实现红灯
- [x] T064 修改运价/订单实体、Mapper、XML 和计价器，移除按服务类型分价并使数据层与计价测试转绿
- [x] T065 扩展应用服务、Controller、DTO 和独占测试，覆盖完整请求响应、立即/预约计价、前端报价逐项校验、最新报价错误、物品校验及 `deliveryType=URGENT`；按用户要求未单独执行旧实现红灯
- [x] T066 实现报价、创建、列表、详情和独占逻辑，保存业务场景、配送等级、物品与完整费用快照，使 App 定向测试转绿
- [x] T067 更新平台后端契约和 `foodie-admin-vue` 闪送测试，实现统一时段配置、加急比例、最低加急费、订单明细及四语言；按用户要求未单独执行旧页面红灯
- [x] T068 在 `updatesql/sql.md` 追加迁移 SQL，不执行数据库；同步五语言后端错误、App 接入文档和 quickstart
- [x] T069 使用 JDK 21 完成后端 69 项定向测试和模块构建、平台前端 8 项定向测试及两个仓库差异检查；用户要求立即提交后，不再执行平台 ESLint 与生产构建
- [x] T070 核对后端与平台前端暂存范围，分别使用中文提交；SHA 与未执行项记录在最终交付中
