Files
ccdi/docs/plans/backend/2026-03-18-model-param-save-trigger-rebuild-backend-implementation.md

6.2 KiB

Model Param Save Trigger Rebuild Backend Implementation Plan

For agentic workers: REQUIRED: Use superpowers:subagent-driven-development (if subagents available) or superpowers:executing-plans to implement this plan. Steps use checkbox (- [ ]) syntax for tracking.

Goal: 让项目参数保存成功后由后端自动异步触发项目内流水重新打标,避免前端额外串联重打标接口。

Architecture: 保持 CcdiModelParamController 的保存接口不变,把“保存参数成功后触发重打标”收敛到 CcdiModelParamServiceImpl,复用现有 ICcdiBankTagService.submitAutoRebuild 异步提交能力,并新增专用触发类型区分来源;仅在项目级参数保存成功且实际存在更新时触发,默认配置与保存失败场景不进入重打标链路。

Tech Stack: Java 21, Spring Boot 3, MyBatis Plus, JUnit 5, Mockito, Maven


Task 1: 补齐参数保存后触发自动重打标的失败测试

Files:

  • Modify: ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/impl/CcdiModelParamServiceImplTest.java

  • Step 1: Write the failing test

补充两个核心用例:

@Mock
private ICcdiBankTagService bankTagService;

@Test
void saveAllParams_shouldSubmitAutoRebuildAfterProjectParamsUpdated() {
    when(projectMapper.selectById(40L)).thenReturn(buildProject(40L, "custom"));
    when(modelParamMapper.selectOne(any())).thenReturn(buildParam(1L, 40L, "LARGE_TRANSACTION", "大额交易模型", "SINGLE_TRANSACTION_AMOUNT", "1000"));

    service.saveAllParams(buildSaveAllDto());

    verify(bankTagService).submitAutoRebuild(40L, TriggerType.AUTO_PARAM_CHANGE);
}

@Test
void saveAllParams_shouldNotSubmitAutoRebuildForGlobalDefaults() {
    ModelParamSaveAllDTO dto = buildSaveAllDto();
    dto.setProjectId(0L);
    when(modelParamMapper.selectOne(any())).thenReturn(buildParam(1L, 0L, "LARGE_TRANSACTION", "大额交易模型", "SINGLE_TRANSACTION_AMOUNT", "1000"));

    service.saveAllParams(dto);

    verify(bankTagService, never()).submitAutoRebuild(anyLong(), any());
}
  • Step 2: Run test to verify it fails

Run:

mvn -pl ccdi-project -Dtest=CcdiModelParamServiceImplTest test

Expected:

  • FAIL

  • 原因是当前服务尚未注入 ICcdiBankTagService,也不会在保存成功后触发自动重打标

  • Step 3: Write minimal implementation

最小实现包括:

  1. CcdiModelParamServiceImpl 注入 ICcdiBankTagService
  2. saveAllParams 成功批量更新后,若 projectId > 0updateList 非空,则调用:
bankTagService.submitAutoRebuild(projectId, TriggerType.AUTO_PARAM_CHANGE);
  1. saveParams 同步补齐相同语义,保证单模型保存与批量保存行为一致
  • Step 4: Run test to verify it passes

Run:

mvn -pl ccdi-project -Dtest=CcdiModelParamServiceImplTest test

Expected:

  • PASS

  • 说明参数保存成功后会自动进入异步重打标链路

  • Step 5: Commit

git add ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/impl/CcdiModelParamServiceImplTest.java ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiModelParamServiceImpl.java
git commit -m "实现参数保存后自动触发项目重打标"

Task 2: 扩展重打标触发类型并保持异步链路可观测

Files:

  • Modify: ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/enums/TriggerType.java

  • Modify: ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiBankTagServiceImpl.java

  • Modify: ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/impl/CcdiBankTagServiceImplTest.java

  • Step 1: Write the failing test

补一个触发类型透传校验,锁定参数保存来源不会被误记成上传或拉取:

@Test
void submitAutoRebuild_shouldKeepAutoParamChangeTriggerType() {
    service.submitAutoRebuild(40L, TriggerType.AUTO_PARAM_CHANGE);

    verify(coordinator).submitAuto(40L, TriggerType.AUTO_PARAM_CHANGE);
}
  • Step 2: Run test to verify it fails

Run:

mvn -pl ccdi-project -Dtest=CcdiBankTagServiceImplTest test

Expected:

  • FAIL

  • 原因是当前 TriggerType 还没有 AUTO_PARAM_CHANGE

  • Step 3: Write minimal implementation

TriggerType 新增:

AUTO_PARAM_CHANGE

同时检查 CcdiBankTagServiceImpl 的日志和调用链,确保新增枚举值无需额外分支即可沿现有异步协调器执行。

  • Step 4: Run test to verify it passes

Run:

mvn -pl ccdi-project -Dtest=CcdiBankTagServiceImplTest test

Expected:

  • PASS

  • Step 5: Commit

git add ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/enums/TriggerType.java ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiBankTagServiceImpl.java ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/impl/CcdiBankTagServiceImplTest.java
git commit -m "补充参数修改触发的自动重打标类型"

Task 3: 记录服务端验证结果与边界

Files:

  • Create: docs/tests/records/2026-03-18-model-param-save-trigger-rebuild-backend-verification.md

  • Create: docs/reports/implementation/2026-03-18-model-param-save-trigger-rebuild-record.md

  • Step 1: Write verification skeleton

先记录本次服务端验证点:

# 参数保存触发项目流水重打标后端验证记录

## 验证范围
- 项目参数保存成功后自动异步触发重打标
- 默认参数保存不触发项目重打标
- 保存失败时不触发重打标
  • Step 2: Run focused tests

Run:

mvn -pl ccdi-project -Dtest=CcdiModelParamServiceImplTest,CcdiBankTagServiceImplTest test

Expected:

  • 相关测试全部通过

  • Step 3: Write implementation record

把实际改动、测试命令和结果写入实施记录,覆盖:

  • 新增 AUTO_PARAM_CHANGE 触发类型

  • saveParams/saveAllParams 成功更新后触发异步重打标

  • 不触发场景与异常场景说明

  • Step 4: Commit

git add docs/tests/records/2026-03-18-model-param-save-trigger-rebuild-backend-verification.md docs/reports/implementation/2026-03-18-model-param-save-trigger-rebuild-record.md
git commit -m "补充参数保存触发重打标后端实施记录"