|
@@ -0,0 +1,33 @@
|
|
|
|
|
+# 移除闪送运价专用锁表设计
|
|
|
|
|
+
|
|
|
|
|
+## 背景与目标
|
|
|
|
|
+
|
|
|
|
|
+`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` 乐观锁保护;读取侧继续检查匹配结果数量,因此即使出现异常重叠,也不会静默选择其中一条价格。
|
|
|
|
|
+
|
|
|
|
|
+## 验证
|
|
|
|
|
+
|
|
|
|
|
+- 先调整 Mapper 契约测试,使旧实现因仍暴露 `lockPricing()` 而失败。
|
|
|
|
|
+- 删除生产锁逻辑后运行 Mapper、应用服务和 Controller 闪送定向测试。
|
|
|
|
|
+- 使用 JDK 21 执行 `ruoyi-admin` 相关模块测试和构建。
|
|
|
|
|
+- 提交前检查暂存清单,不能包含工作区原有注释修改或 `.claude/homunculus/observations.jsonl`。
|