# 模型参数阈值更新接口优化实施计划

> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.

**Goal:** 简化模型参数保存接口的 DTO 结构，减少冗余字段

**Architecture:** 纯重构，不改变业务逻辑。简化 DTO 字段，同步更新 Service 和前端调用

**Tech Stack:** Java 17, Spring Boot, Vue.js

---

## Task 1: 简化后端 DTO

**Files:**

- Modify: `ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/dto/ModelParamSaveDTO.java`

**Step 1: 读取当前 DTO 文件**

检查现有代码结构。

**Step 2: 重写 DTO 文件**

将整个文件替换为简化后的版本：

```java
package com.ruoyi.ccdi.project.domain.dto;

import lombok.Data;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import java.util.List;

/**
 * 模型参数保存DTO
 */
@Data
public class ModelParamSaveDTO {

    /** 项目ID */
    private Long projectId;

    /** 模型编码 */
    @NotBlank(message = "模型编码不能为空")
    private String modelCode;

    /** 参数列表 */
    @NotNull(message = "参数列表不能为空")
    private List<ParamValueItem> params;

    @Data
    public static class ParamValueItem {

        /** 参数编码 */
        @NotBlank(message = "参数编码不能为空")
        private String paramCode;

        /** 参数值 - 唯一可修改字段 */
        @NotBlank(message = "参数值不能为空")
        private String paramValue;
    }
}
```

**Step 3: 保存文件**

确保文件保存成功。

---

## Task 2: 更新 Service 层类型引用

**Files:**

- Modify: `ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiModelParamServiceImpl.java`

**Step 1: 更新 for 循环中的类型引用**

找到第 105 行附近的代码，将：

```java
for (ModelParamSaveDTO.ParamItem item : saveDTO.getParams()) {
```

改为：

```java
for (ModelParamSaveDTO.ParamValueItem item : saveDTO.getParams()) {
```

---

## Task 3: 简化前端请求参数

**Files:**

- Modify: `ruoyi-ui/src/views/ccdi/modelParam/index.vue`

**Step 1: 找到 handleSave 方法中的 saveDTO 构建**

定位到第 119-133 行。

**Step 2: 简化请求参数**

将原有的 saveDTO 构建代码：

```javascript
const saveDTO = {
  projectId: this.queryParams.projectId,
  modelCode: this.queryParams.modelCode,
  modelName: this.modelList.find(
    (m) => m.modelCode === this.queryParams.modelCode
  )?.modelName,
  params: modifiedParams.map((item) => ({
    paramCode: item.paramCode,
    paramName: item.paramName,
    paramDesc: item.paramDesc,
    paramValue: item.paramValue,
    paramUnit: item.paramUnit,
    sortOrder: item.sortOrder,
  })),
};
```

替换为简化版本：

```javascript
const saveDTO = {
  projectId: this.queryParams.projectId,
  modelCode: this.queryParams.modelCode,
  params: modifiedParams.map((item) => ({
    paramCode: item.paramCode,
    paramValue: item.paramValue,
  })),
};
```

---

## Task 4: 编译后端验证

**Files:**

- 无文件修改，仅验证

**Step 1: 编译后端项目**

```bash
cd D:/ccdi/ccdi && mvn clean compile -DskipTests
```

**Expected:** BUILD SUCCESS

**Step 2: 如有编译错误，检查类型引用**

确保所有 `ParamItem` 都已改为 `ParamValueItem`。

---

## Task 5: 功能测试验证

**Files:**

- 无文件修改，仅验证

**Step 1: 启动后端服务**

```bash
cd D:/ccdi/ccdi && mvn spring-boot:run
```

等待服务启动完成。

**Step 2: 通过 Swagger 测试保存接口**

1. 访问 `http://localhost:8080/swagger-ui/index.html`
2. 找到 `模型参数配置` 分组
3. 测试 `/ccdi/modelParam/save` 接口
4. 使用简化的请求体：

```json
{
  "projectId": 0,
  "modelCode": "LARGE_TRANSACTION",
  "params": [
    {
      "paramCode": "SINGLE_AMOUNT",
      "paramValue": "50000"
    }
  ]
}
```

**Expected:** 返回 `{"code": 200, "msg": "保存成功"}`

**Step 3: 验证参数已更新**

调用 `/ccdi/modelParam/list?projectId=0&modelCode=LARGE_TRANSACTION`

**Expected:** 返回的参数中 `SINGLE_AMOUNT` 的 `paramValue` 已更新为 `50000`

---

## Task 6: 提交代码

**Step 1: 查看变更**

```bash
git status
git diff
```

**Step 2: 提交后端改动**

```bash
git add ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/dto/ModelParamSaveDTO.java
git add ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiModelParamServiceImpl.java
git commit -m "refactor: 简化 ModelParamSaveDTO，移除冗余字段"
```

**Step 3: 提交前端改动**

```bash
git add ruoyi-ui/src/views/ccdi/modelParam/index.vue
git commit -m "refactor: 简化模型参数保存请求参数"
```

---

## 改动摘要

| 文件                               | 改动                                             |
|----------------------------------|------------------------------------------------|
| `ModelParamSaveDTO.java`         | 移除 modelName，ParamItem 简化为 ParamValueItem（2字段） |
| `CcdiModelParamServiceImpl.java` | 类型引用 ParamItem → ParamValueItem                |
| `index.vue`                      | 请求参数只保留 paramCode 和 paramValue                 |

**风险等级：** 低（向后兼容，纯简化重构）

---

**创建日期：** 2026-02-26
