# 征信解析远程路径调用改造实施记录

## 背景

天座征信解析接口调用方式变更：不再直接 multipart 上传 HTML 文件，改为先将 HTML 保存到业务服务器可访问目录，再将完整远程访问地址作为 `remotePath` 以 `application/x-www-form-urlencoded` 表单参数提交到新接口。

本次按新接口文档确认输出外层结构为 `success/code/data/mappingOutputFields`，其中 `mappingOutputFields.payload` 内部仍沿用原有 `lx_header/lx_debt/lx_publictype` 结构。

## 修改内容

1. 后端上传处理
   - 上传入口 `/ccdi/creditInfo/upload` 保持不变。
   - 新增 `CreditHtmlStorageService`，校验通过后的 HTML 保存到 `ruoyi.profile/credit-html/...`。
   - 根据 `credit-parse.api.file-public-base-url` 与 `/profile/credit-html/...` 拼接生成 `remotePath`。
   - 征信维护落库逻辑改为调用 `CreditParseClient.parse(remotePath)`，后续日期校验、落库、失败记录逻辑保持原样。

2. 天座接口客户端
   - `CreditParseClient` 改为提交 `serialNum/orgCode/runType/remotePath/model` 表单参数。
   - `HttpUtil` 增加 `postUrlEncodedForm` 方法，统一提交 `application/x-www-form-urlencoded`。
   - 新增 `CreditParseInvokeResponse`、`CreditParseInvokeData`，承载新外层响应结构。
   - 业务解析只读取 `data.mappingOutputFields` 下的 `message/status_code/payload`。

3. 配置
   - `application-dev.yml`、`application-pro.yml`、`application-nas.yml`、`application-uat.yml` 同步调整 `credit-parse.api.url` 到 `/api/service/interface/invokeService/xfeature`。
   - 新增 `credit-parse.api.file-public-base-url`、`org-code=902000`、`run-type=1`、`model=LXCUSTALL`。

4. 本地 mock
   - `lsfx-mock-server` 新增支持 `/api/service/interface/invokeService/xfeature`。
   - mock 接收新表单参数并通过 `remotePath` 读取 HTML。
   - mock 返回新外层结构，payload 仍按旧结构生成。

5. 测试覆盖
   - `CreditParseControllerTest` 覆盖新调试入口、默认模型、客户端异常、表单参数完整性。
   - `CcdiCreditInfoServiceImplTest` 覆盖 HTML 保存路径与 `remotePath` 拼接、旧日期拦截、成功落库、从新外层结构读取旧 payload。

## 验证结果

1. 接口文档核对
   - 已读取 `天座征信解析接口文档.xlsx`，确认调用方式为 `POST application/x-www-form-urlencoded`。
   - 已确认输入参数为 `serialNum/orgCode/runType/remotePath/model`。
   - 已确认输出结构为 `success/code/data/mappingOutputFields`。

2. 单元测试与编译
   - `mvn -pl ccdi-lsfx -Dtest=CreditParseControllerTest test`：通过，4 个用例成功。
   - `mvn -pl ccdi-info-collection -am -Dtest=CcdiCreditInfoServiceImplTest -Dsurefire.failIfNoSpecifiedTests=false test`：通过，3 个用例成功。
   - `mvn -pl ccdi-lsfx,ccdi-info-collection -am compile`：通过。

3. 联调验证
   - 通过 `bin/restart_java_backend.sh restart` 启动后端。
   - 启动本地 mock 后，通过 `/ccdi/creditInfo/upload` 上传临时 HTML。
   - 后端日志确认调用参数包含：
     - `model=LXCUSTALL`
     - `remotePath=http://127.0.0.1:62318/profile/credit-html/2026/05/12/credit_remote_path_test_20260512190228A001.html`
   - mock 日志确认收到 `POST /api/service/interface/invokeService/xfeature` 并返回 200。
   - 上传结果：`successCount=1`、`failureCount=0`。
   - 列表与详情均可查询到解析后的征信负面信息和债务信息。
   - 联调测试身份证号 `330781199001019999` 对应数据已通过删除接口清理，复查列表 `total=0`。

## 影响范围

- 影响征信维护上传入口、征信解析客户端、本地 mock、相关环境配置。
- 前端上传入口和页面接口路径不变。
- 不保留旧 multipart 外部接口兼容逻辑。

