For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (
- [ ]) syntax for tracking.
Goal: 删除闪送运价专用数据库锁表及调用,同时保留事务、重叠校验、配置版本校验和读取侧异常保护。
Architecture: 平台运价增删改直接在现有 Spring 事务中执行,新增和修改先调用 countOverlapping(...) 校验;修改继续以 config_version 为条件更新。数据库迁移仅追加删表 SQL,不直接执行。
Tech Stack: JDK 21、Spring Boot、MyBatis-Plus/MyBatis、MySQL、JUnit 5、Mockito。
test,提交标题和正文使用中文,不使用英文 Conventional Commits 前缀。updatesql/sql.md。@Transactional、countOverlapping(...)、config_version 更新条件和读取侧多时段异常检查。Files:
ruoyi-system/src/test/java/com/ruoyi/system/mapper/flash/FlashDeliveryPricingMapperContractTest.javaruoyi-admin/src/test/java/com/ruoyi/app/flashdelivery/service/FlashDeliveryApplicationServiceTest.javaruoyi-system/src/main/java/com/ruoyi/system/mapper/flash/FlashDeliveryPricingMapper.javaruoyi-admin/src/main/java/com/ruoyi/app/flashdelivery/service/FlashDeliveryApplicationService.javaspecs/024-flash-delivery/spec.mdspecs/024-flash-delivery/design.mdspecs/024-flash-delivery/data-model.mdspecs/024-flash-delivery/plan.mdspecs/024-flash-delivery/tasks.mdupdatesql/sql.mdInterfaces:
FlashDeliveryPricingMapper.countOverlapping(String, String, Long)、BaseMapper CRUD 和 FlashDeliveryPricing.configVersion。Produces: 不再暴露 FlashDeliveryPricingMapper.lockPricing();运价接口和请求响应契约保持不变。
[ ] Step 1: 先写删除锁接口的失败契约测试
将原锁表测试改为要求 Mapper 不再暴露锁方法:
@Test
void pricingMapperDoesNotExposeDedicatedDatabaseLock() {
assertThrows(NoSuchMethodException.class,
() -> FlashDeliveryPricingMapper.class.getMethod("lockPricing"));
}
[ ] Step 2: 运行测试确认旧实现红灯
$env:JAVA_HOME='C:\Users\qmj\.jdks\graalvm-jdk-21.0.7'
$env:PATH="$env:JAVA_HOME\bin;$env:PATH"
mvn -pl ruoyi-system -am -Dtest=FlashDeliveryPricingMapperContractTest -Dsurefire.failIfNoSpecifiedTests=false test
预期:pricingMapperDoesNotExposeDedicatedDatabaseLock 失败,因为旧 Mapper 仍存在 lockPricing()。
从 Mapper 删除:
@Select("""
select lock_key
from flash_delivery_pricing_lock
where lock_key = 'GLOBAL'
for update
""")
String lockPricing();
从 createPricing、updatePricing、deletePricing 删除 lockPricing();,并删除服务层私有 lockPricing() 方法。应用服务测试删除 lockPricing() 的 mock 和顺序验证,但继续验证重叠查询、插入、版本更新和删除行为。
删除当前数据模型中的 flash_delivery_pricing_lock,在规格中明确低频管理场景接受并发新增的极低概率重叠风险;修改仍使用版本校验,读取仍拒绝多条匹配。在 updatesql/sql.md 末尾追加:
## 2026-09-07 移除闪送运价专用锁表
\`\`\`sql
DROP TABLE IF EXISTS flash_delivery_pricing_lock;
\`\`\`
更新 tasks.md 增加并完成本次规格、红灯、实现、验证任务。
[ ] Step 5: 运行定向测试和模块构建
$env:JAVA_HOME='C:\Users\qmj\.jdks\graalvm-jdk-21.0.7'
$env:PATH="$env:JAVA_HOME\bin;$env:PATH"
mvn -pl ruoyi-admin -am "-Dtest=FlashDeliveryPricingMapperContractTest,FlashDeliveryApplicationServiceTest,FlashDeliveryControllerContractTest" "-Dsurefire.failIfNoSpecifiedTests=false" test
mvn -pl ruoyi-admin -am -DskipTests package
预期:定向测试与七模块构建均为 BUILD SUCCESS。
[ ] Step 6: 核对范围、中文提交并推送
git diff --check
git status --short
git add -- docs/superpowers/plans/2026-09-07-remove-flash-pricing-lock.md ruoyi-system/src/test/java/com/ruoyi/system/mapper/flash/FlashDeliveryPricingMapperContractTest.java ruoyi-admin/src/test/java/com/ruoyi/app/flashdelivery/service/FlashDeliveryApplicationServiceTest.java ruoyi-system/src/main/java/com/ruoyi/system/mapper/flash/FlashDeliveryPricingMapper.java ruoyi-admin/src/main/java/com/ruoyi/app/flashdelivery/service/FlashDeliveryApplicationService.java specs/024-flash-delivery/spec.md specs/024-flash-delivery/design.md specs/024-flash-delivery/data-model.md specs/024-flash-delivery/plan.md specs/024-flash-delivery/tasks.md updatesql/sql.md
git diff --cached --name-only
git diff --cached --check
git commit -m "移除闪送运价专用锁表" -m "保留事务、时段重叠和版本校验,删除低频后台配置不需要的全局数据库行锁及迁移表。"
git push origin test
预期:暂存清单不包含工作区原有注释文件和 .claude/homunculus/observations.jsonl。