# 移除闪送运价专用锁表设计 ## 背景与目标 `flash_delivery_pricing_lock` 当前通过固定 `GLOBAL` 行和 `SELECT ... FOR UPDATE` 串行化平台运价增删改。闪送运价属于低频管理员配置,业务接受双击、重试或多页面同时操作时极低概率的并发新增冲突,因此移除专用锁表及锁代码,降低数据库结构和维护复杂度。 ## 保留行为 - `flash_delivery_pricing` 继续保存全局统一、互不重叠的分时段运价。 - 新增、修改和删除仍在 Spring 事务内执行。 - 新增和修改仍通过 `countOverlapping(startTime, endTime, excludedId)` 检查时段重叠。 - 修改仍以 `config_version` 作为更新条件,拒绝旧页面覆盖新配置。 - 报价和创建订单继续要求目标时间只匹配一个运价时段;异常重叠数据仍显式报错。 - 运价字段、计价公式、加急费、小费和订单价格快照均不改变。 ## 删除内容 - 删除 `FlashDeliveryPricingMapper.lockPricing()` 及其 `SELECT ... FOR UPDATE`。 - 删除运价新增、修改、删除入口对 `lockPricing()` 的调用和服务层辅助方法。 - 删除要求锁表及 `FOR UPDATE` 存在的 Mapper 契约测试。 - 在 `updatesql/sql.md` 追加 `DROP TABLE IF EXISTS flash_delivery_pricing_lock;`,仅记录,不直接执行数据库变更。 - 更新闪送规格、设计、数据模型、计划和任务说明,不再将专用锁表作为当前架构组成。 ## 并发边界 移除锁表后,两个并发新增请求可能同时通过重叠检查并各自写入。该风险由业务明确接受。修改请求仍受 `config_version` 乐观锁保护;读取侧继续检查匹配结果数量,因此即使出现异常重叠,也不会静默选择其中一条价格。 ## 验证 - 先删除应用服务测试夹具对固定 `GLOBAL` 锁行的模拟,验证管理员新增运价不应依赖专用锁行;旧实现会因此失败。 - 删除生产锁逻辑后,移除只验证锁方法调用顺序的内部实现断言,并运行 Mapper、应用服务和 Controller 闪送定向测试。 - 使用 JDK 21 执行 `ruoyi-admin` 相关模块测试和构建。 - 提交前检查暂存清单,不能包含工作区原有注释修改或 `.claude/homunculus/observations.jsonl`。