# 模型参数配置功能 - 后端功能测试

## 任务概述

**任务编号:** 03
**任务名称:** 后端功能测试
**前置任务:** 02-后端业务逻辑开发
**预计工时:** 1小时

## 任务目标

启动后端服务,使用 Swagger 测试所有接口,确保功能正常。

---

## 开发步骤

### 1. 启动后端服务

#### 1.1 编译项目

```bash
# 在项目根目录执行
mvn clean compile
```

#### 1.2 启动应用

**方式一:使用 Maven**

```bash
mvn spring-boot:run
```

**方式二:使用启动脚本**

```bash
# Windows
ry.bat

# Linux/Mac
./ry.sh start
```

#### 1.3 验证启动成功

访问: http://localhost:8080

看到若依登录页面即表示启动成功。

---

### 2. 获取测试 Token

#### 2.1 登录获取 Token

**请求地址:**

```
POST http://localhost:8080/login/test?username=admin&password=admin123
```

**使用 curl:**

```bash
curl -X POST "http://localhost:8080/login/test?username=admin&password=admin123"
```

**响应示例:**

```json
{
  "msg": "操作成功",
  "code": 200,
  "data": {
    "token": "eyJhbGciOiJIUzUxMiJ9..."
  }
}
```

**记录 Token:** 将返回的 token 值保存,后续测试需要使用。

---

### 3. Swagger 接口测试

#### 3.1 访问 Swagger UI

浏览器访问: http://localhost:8080/swagger-ui/index.html

#### 3.2 配置 Authorization

1. 点击右上角 "Authorize" 按钮
2. 在弹出框中输入: `Bearer <你的token>`
3. 点击 "Authorize" 确认

#### 3.3 测试接口1: 查询模型列表

**接口路径:** `GET /ccdi/modelParam/modelList`

**测试步骤:**

1. 在 Swagger UI 中找到 "模型参数配置" 分组
2. 点击 `GET /ccdi/modelParam/modelList` 接口
3. 点击 "Try it out"
4. 参数 `projectId` 留空(默认查询系统参数)
5. 点击 "Execute"

**预期响应:**

```json
{
  "msg": "操作成功",
  "code": 200,
  "data": [
    {
      "modelCode": "LARGE_TRANSACTION",
      "modelName": "大额交易模型"
    },
    {
      "modelCode": "SUSPICIOUS_FOREIGN_EXCHANGE",
      "modelName": "可疑外汇交易模型"
    },
    {
      "modelCode": "SUSPICIOUS_PART_TIME",
      "modelName": "可疑兼职模型"
    }
  ]
}
```

#### 3.4 测试接口2: 查询模型参数列表

**接口路径:** `GET /ccdi/modelParam/list`

**测试步骤:**

1. 点击 `GET /ccdi/modelParam/list` 接口
2. 点击 "Try it out"
3. 参数填写:
    - `modelCode`: `LARGE_TRANSACTION`
    - `projectId`: 留空
4. 点击 "Execute"

**预期响应:**

```json
{
  "msg": "操作成功",
  "code": 200,
  "data": [
    {
      "id": 1,
      "modelCode": "LARGE_TRANSACTION",
      "modelName": "大额交易模型",
      "paramCode": "SINGLE_TRANSACTION_AMOUNT",
      "paramName": "单笔交易额",
      "paramDesc": "单笔超过该金额视为大额交易",
      "paramValue": "50000",
      "paramUnit": "元",
      "sortOrder": 1
    },
    ...
  ]
}
```

#### 3.5 测试接口3: 保存参数配置

**接口路径:** `POST /ccdi/modelParam/save`

**测试步骤:**

1. 点击 `POST /ccdi/modelParam/save` 接口
2. 点击 "Try it out"
3. 在 Request body 中填写:

```json
{
  "projectId": 0,
  "modelCode": "LARGE_TRANSACTION",
  "modelName": "大额交易模型",
  "params": [
    {
      "paramCode": "SINGLE_TRANSACTION_AMOUNT",
      "paramName": "单笔交易额",
      "paramDesc": "单笔超过该金额视为大额交易",
      "paramValue": "60000",
      "paramUnit": "元",
      "sortOrder": 1
    },
    {
      "paramCode": "CUMULATIVE_TRANSACTION_AMOUNT",
      "paramName": "累计交易额",
      "paramDesc": "年累计交易额超过该金额",
      "paramValue": "6000000",
      "paramUnit": "元",
      "sortOrder": 2
    }
  ]
}
```

4. 点击 "Execute"

**预期响应:**

```json
{
  "msg": "保存成功",
  "code": 200
}
```

#### 3.6 验证数据已更新

再次调用 `GET /ccdi/modelParam/list` 接口,确认参数值已更新为 60000 和 6000000。

---

### 4. 数据库验证

#### 4.1 查询参数数据

```sql
-- 查询大额交易模型的参数
SELECT id, model_code, param_name, param_value, update_by, update_time
FROM ccdi_model_param
WHERE model_code = 'LARGE_TRANSACTION'
ORDER BY sort_order;
```

**预期结果:**

```
id | model_code          | param_name              | param_value | update_by | update_time
---|---------------------|-------------------------|-------------|-----------|------------------
1  | LARGE_TRANSACTION   | 单笔交易额              | 60000       | admin     | 2026-02-26 10:30:00
2  | LARGE_TRANSACTION   | 累计交易额              | 6000000     | admin     | 2026-02-26 10:30:00
3  | LARGE_TRANSACTION   | 大额存现                | 200000      | NULL      | 2026-02-26 09:00:00
4  | LARGE_TRANSACTION   | 短时多次存现            | 100000      | NULL      | 2026-02-26 09:00:00
5  | LARGE_TRANSACTION   | 频繁转账                | 10          | NULL      | 2026-02-26 09:00:00
6  | LARGE_TRANSACTION   | 转账频率                | 1000000     | NULL      | 2026-02-26 09:00:00
```

验证点:

- ✅ 只有被修改的参数有 `update_by` 和 `update_time`
- ✅ 参数值已更新为提交的值
- ✅ 其他未修改的参数保持原值

---

### 5. 安全性验证

#### 5.1 验证只能修改阈值

尝试在保存接口中修改其他字段(如 param_name):

```json
{
  "projectId": 0,
  "modelCode": "LARGE_TRANSACTION",
  "modelName": "大额交易模型",
  "params": [
    {
      "paramCode": "SINGLE_TRANSACTION_AMOUNT",
      "paramName": "修改后的名称",  // 尝试修改名称
      "paramValue": "70000",
      "paramUnit": "修改后的单位",  // 尝试修改单位
      "sortOrder": 1
    }
  ]
}
```

**验证数据库:**

```sql
SELECT param_name, param_unit, param_value
FROM ccdi_model_param
WHERE param_code = 'SINGLE_TRANSACTION_AMOUNT';
```

**预期结果:**

- ✅ `param_value` 已更新为 70000
- ✅ `param_name` 仍为 "单笔交易额" (未改变)
- ✅ `param_unit` 仍为 "元" (未改变)

---

## 测试清单

完成以下测试后,本任务才算完成:

- [ ] 后端服务启动成功
- [ ] 获取 Token 成功
- [ ] Swagger 测试:查询模型列表接口正常
- [ ] Swagger 测试:查询参数列表接口正常
- [ ] Swagger 测试:保存参数接口正常
- [ ] 数据库验证:数据已正确更新
- [ ] 安全性验证:只能修改阈值字段

---

## 测试报告模板

完成测试后,请填写以下测试报告:

### 测试报告

**测试日期:** 2026-02-26
**测试人员:** ___________
**测试环境:**

- 数据库地址: ___________
- 后端地址: http://localhost:8080

**测试结果:**

| 测试项      | 预期结果   | 实际结果 | 是否通过 |
|----------|--------|------|------|
| 查询模型列表   | 返回3个模型 |      |      |
| 查询大额交易参数 | 返回6个参数 |      |      |
| 保存参数配置   | 返回成功   |      |      |
| 数据更新验证   | 数据已更新  |      |      |
| 安全性验证    | 只更新阈值  |      |      |

**发现问题:**

- (如有问题请记录)

**结论:**

- [ ] 通过
- [ ] 不通过

---

## 注意事项

1. **测试顺序**: 必须按照测试步骤的顺序执行
2. **Token 有效期**: Token 有效期 30 分钟,过期需重新获取
3. **数据库连接**: 确保数据库连接配置正确
4. **端口占用**: 确保 8080 端口未被占用
5. **日志查看**: 如遇问题,查看后端日志排查

---

## 下一步

完成本任务后,进入下一个任务: **04-前端代码开发.md**
