# 流水分析接口测试脚本

## 环境配置

- **Mock Server 地址**: http://localhost:8000
- **后端服务地址**: http://localhost:8080
- **测试账号**: admin / admin123

## 测试说明

本测试脚本用于验证 ccdi-lsfx 模块的 form-data 接口改造。所有接口已从 JSON 格式改为 multipart/form-data 格式。

---

## 1. 获取 Token

**接口说明**: 获取访问令牌

**请求示例**:

```bash
curl -X POST "http://localhost:8080/lsfx/test/getToken" \
  -H "Content-Type: multipart/form-data" \
  -F "projectNo=902000_202603021400" \
  -F "entityName=902000_202603021400" \
  -F "userId=testuser" \
  -F "userName=测试用户" \
  -F "orgCode=ORG001" \
  -F "entityId=ENTITY001" \
  -F "role=审查人员" \
  -F "analysisType=流水分析" \
  -F "departmentCode=DEPT001"
```

**预期响应**:

```json
{
  "code": 200,
  "msg": "操作成功",
  "data": {
    "projectId": 123,
    "token": "mock-token-xxx",
    "groupId": 456
  }
}
```

---

## 2. 上传文件

**接口说明**: 上传银行流水文件

**请求示例**:

```bash
curl -X POST "http://localhost:8080/lsfx/test/uploadFile" \
  -H "Content-Type: multipart/form-data" \
  -F "groupId=456" \
  -F "file=@test-data.xlsx"
```

**预期响应**:

```json
{
  "code": 200,
  "msg": "操作成功",
  "data": {
    "uploadLogList": [
      {
        "logId": 789,
        "fileName": "test-data.xlsx",
        "uploadTime": "2026-03-03 14:00:00"
      }
    ]
  }
}
```

---

## 3. 拉取行内流水

**接口说明**: 从核心系统拉取行内流水数据

**请求示例**:

```bash
curl -X POST "http://localhost:8080/lsfx/test/fetchInnerFlow" \
  -H "Content-Type: multipart/form-data" \
  -F "groupId=456" \
  -F "customerNo=CUST001" \
  -F "dataChannelCode=CHANNEL001" \
  -F "requestDateId=20260303" \
  -F "dataStartDateId=20260101" \
  -F "dataEndDateId=20260303" \
  -F "uploadUserId=testuser"
```

**预期响应**:

```json
{
  "code": 200,
  "msg": "操作成功",
  "data": {
    "code": "SUCCESS",
    "message": "拉取成功",
    "fetchTime": "2026-03-03 14:00:00"
  }
}
```

---

## 4. 检查解析状态

**接口说明**: 检查文件解析状态

**请求示例**:

```bash
curl -X POST "http://localhost:8080/lsfx/test/checkParseStatus" \
  -H "Content-Type: multipart/form-data" \
  -F "groupId=456" \
  -F "inprogressList=789,790,791"
```

**预期响应**:

```json
{
  "code": 200,
  "msg": "操作成功",
  "data": {
    "parsing": false,
    "pendingList": [
      {
        "logId": 789,
        "fileName": "test-data.xlsx",
        "status": "COMPLETED"
      }
    ]
  }
}
```

---

## 5. 获取银行流水

**接口说明**: 分页获取银行流水明细

**请求示例**:

```bash
curl -X POST "http://localhost:8080/lsfx/test/getBankStatement" \
  -H "Content-Type: multipart/form-data" \
  -F "groupId=456" \
  -F "logId=789" \
  -F "pageNow=1" \
  -F "pageSize=20"
```

**预期响应**:

```json
{
  "code": 200,
  "msg": "操作成功",
  "data": {
    "totalCount": 100,
    "totalPage": 5,
    "currentPage": 1,
    "pageSize": 20,
    "list": [
      {
        "transactionDate": "2026-01-15",
        "transactionAmount": 10000.00,
        "balance": 50000.00,
        "summary": "转账收入"
      }
    ]
  }
}
```

---

## 测试步骤

### 步骤 1: 启动 Mock Server

确保 Mock Server 已启动并监听在 `http://localhost:8000`。

```bash
# 示例：如果使用 Python Flask
python lsfx-mock-server/app.py
```

### 步骤 2: 启动后端服务

```bash
cd ruoyi-admin
mvn spring-boot:run
```

或使用 Windows 脚本：

```bash
ry.bat
```

### 步骤 3: 获取访问 Token

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

记录返回的 token。

### 步骤 4: 执行接口测试

按照上述接口顺序依次测试。

### 步骤 5: 验证日志

检查后端日志，确认：

- ✅ 所有请求都使用了 `postFormData` 方法
- ✅ Content-Type 为 `multipart/form-data`
- ✅ 响应正常解析

---

## 常见问题

### Q1: 接口返回 401 Unauthorized

**解决方案**: 先调用登录接口获取 token，并在后续请求中添加 Authorization header。

### Q2: 接口返回 400 Bad Request

**可能原因**:

- 参数名称错误
- 缺少必填参数
- 参数格式不正确

**解决方案**: 检查请求参数是否完整且格式正确。

### Q3: 文件上传失败

**可能原因**:

- 文件路径错误
- 文件大小超过限制（默认 10MB）

**解决方案**:

- 使用绝对路径或正确的相对路径
- 检查文件大小

---

## 技术要点

### Form-Data 格式说明

本次改造将所有接口从 JSON 格式改为 multipart/form-data 格式：

**改造前（JSON）**:

```
Content-Type: application/json

{
  "projectNo": "902000_202603021400",
  "entityName": "902000_202603021400",
  ...
}
```

**改造后（Form-Data）**:

```
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary

------WebKitFormBoundary
Content-Disposition: form-data; name="projectNo"

902000_202603021400
------WebKitFormBoundary
Content-Disposition: form-data; name="entityName"

902000_202603021400
------WebKitFormBoundary
...
```

### ObjectUtil 工具类

改造中新增了 `ObjectUtil` 工具类，用于简化对象转 Map 的操作：

```java
// 改造前
Map<String, Object> params = new HashMap<>();
params.put("projectNo", request.getProjectNo());
params.put("entityName", request.getEntityName());
// ... 手动添加所有字段

// 改造后
Map<String, Object> params = ObjectUtil.toMapIgnoreNull(request);
// 只需手动添加特殊字段
```

---

## 测试清单

- [ ] 接口1：获取 Token - 通过
- [ ] 接口2：上传文件 - 通过
- [ ] 接口3：拉取行内流水 - 通过
- [ ] 接口4：检查解析状态 - 通过
- [ ] 接口5：获取银行流水 - 通过
- [ ] 日志验证 - 所有接口都使用 postFormData
- [ ] 异常处理 - 正常捕获并处理异常

---

## 测试结果记录

**测试日期**: 2026-03-03

**测试环境**:

- Mock Server: http://localhost:8000
- 后端服务: http://localhost:8080

**测试结论**: _待填写_

**问题记录**: _待填写_
