Files
CN_Tool/tools/mms-mapping/API-buildIndexDebug.md

309 lines
9.0 KiB
Markdown
Raw Normal View History

# buildIndexConfirmData / buildIndexSelection 标准 API 调试文档
## 1. 文档范围
本文档用于说明 `mms-mapping` 模块中 `buildIndexConfirmData``buildIndexSelection` 两个调试接口的标准调用方式、请求结构、响应规则和联调注意事项。
本文档内容以当前源码为准,主要对照以下实现:
- `tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/controller/MappingController.java`
- `tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/component/IndexSelectionBuildService.java`
- `tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/pojo/param/IndexCandidateRequest.java`
- `tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/pojo/param/BuildIndexSelectionRequest.java`
- `tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/pojo/vo/IndexConfirmGroupResponse.java`
- `tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/pojo/vo/IndexSelectionGroupResponse.java`
说明:
- 两个接口当前统一返回 `HttpResult<T>` 标准包装。
- 业务异常和参数异常仍由全局异常处理器统一包装。
- 本次仅整理接口标准出口和调试文档,未改动索引组装算法。
- 本次未执行 `mvn` 编译、打包或真实接口联调。
## 2. 接口一buildIndexConfirmData
### 2.1 基本信息
| 项 | 说明 |
| --- | --- |
| 接口名称 | `buildIndexConfirmData` |
| 请求方法 | `POST` |
| 请求路径 | `/api/mms-mapping/build-index-confirm-data` |
| Content-Type | `application/json` |
| 控制器入口 | `MappingController#buildIndexConfirmData` |
| 成功响应体 | `HttpResult<List<IndexConfirmGroupResponse>>` |
### 2.2 接口职责
该接口用于把 `getIcdMmsJson``getICD` 返回的 `indexCandidates` 转换成前端可直接展示和确认的弹窗模型。
转换后的确认模型主要补充以下信息:
- 每个分组下去重后的标签列表
- 每个标签可配置的目标报告
- 每个标签多个目标报告的 `lnInst` 共同候选值
- 当共同候选值只有一个时,自动给出 `defaultLnInst`
### 2.3 请求体
请求体为 `IndexCandidateRequest[]`,也就是候选分组数组。
示例:
```json
[
{
"groupKey": "统计数据__DSSTATISTICDATA",
"groupDesc": "统计数据",
"reportCount": 2,
"templateLabels": [
"A相",
"B相",
"C相",
"间谐波1"
],
"reports": [
{
"reportName": "brcbStatistic",
"dataSetName": "dsStatisticData",
"reportDesc": "统计数据报告",
"availableLnInstValues": [
"1",
"2",
"3",
"11",
"12",
"13"
]
},
{
"reportName": "brcbStatisticInter",
"dataSetName": "dsStIHarm",
"reportDesc": "间谐波统计报告",
"availableLnInstValues": [
"11",
"12",
"13"
]
}
]
}
]
```
### 2.4 成功响应示例
```json
{
"code": "200",
"msg": "buildIndexConfirmData,成功",
"data": [
{
"groupKey": "统计数据__DSSTATISTICDATA",
"groupDesc": "统计数据",
"labelItems": [
{
"label": "A相",
"required": false,
"configurableOnce": true,
"commonLnInstValues": [
"1",
"2",
"3"
],
"targets": [
{
"reportName": "brcbStatistic",
"dataSetName": "dsStatisticData",
"reportDesc": "统计数据报告",
"availableLnInstValues": [
"1",
"2",
"3"
]
}
]
}
]
}
]
}
```
说明:
- `code``msg``data` 为标准 `HttpResult` 包装字段。
- `data` 中的每个元素对应一个确认分组。
- 若请求体为空数组,当前实现会返回成功响应,`data` 为空数组。
## 3. 接口二buildIndexSelection
### 3.1 基本信息
| 项 | 说明 |
| --- | --- |
| 接口名称 | `buildIndexSelection` |
| 请求方法 | `POST` |
| 请求路径 | `/api/mms-mapping/build-index-selection` |
| Content-Type | `application/json` |
| 控制器入口 | `MappingController#buildIndexSelection` |
| 成功响应体 | `HttpResult<List<IndexSelectionGroupResponse>>` |
### 3.2 接口职责
该接口用于根据前端确认模型 `confirmData` 和用户最终选择结果 `confirmedData`,展开生成正式的 `indexSelection` 结构,供 `getMmsJson``getIcdMmsJson` 第二次提交时直接复用。
该接口会在生成前做以下校验:
- `request` 不能为空
- `confirmData` 不能为空
- `confirmedData` 中不能出现未知分组
- 每个分组下不能出现未知标签
- 已启用标签必须选择合法的 `lnInst`
- `lnInst` 必须同时落在该标签所有目标报告的允许范围内
### 3.3 请求体
请求体为 `BuildIndexSelectionRequest`,包含两部分:
- `confirmData`:接口一返回并由前端回传的确认模型
- `confirmedData`:用户在界面上实际确认后的启用状态和 `lnInst`
示例:
```json
{
"confirmData": [
{
"groupKey": "harm",
"groupDesc": "谐波数据",
"labelItems": [
{
"label": "A相",
"required": false,
"configurableOnce": true,
"defaultLnInst": "1",
"commonLnInstValues": [
"1",
"2",
"3"
],
"targets": [
{
"reportName": "brcbStHarm",
"dataSetName": "dsStHarm",
"reportDesc": "谐波报告",
"availableLnInstValues": [
"1",
"2",
"3"
]
}
]
}
]
}
],
"confirmedData": [
{
"groupKey": "harm",
"labelItems": [
{
"label": "A相",
"enabled": true,
"lnInst": "1"
}
]
}
]
}
```
### 3.4 成功响应示例
```json
{
"code": "200",
"msg": "buildIndexSelection,成功",
"data": [
{
"groupKey": "harm",
"groupDesc": "谐波数据",
"bindings": [
{
"reportName": "brcbStHarm",
"dataSetName": "dsStHarm",
"label": "A相",
"lnInst": "1"
}
]
}
]
}
```
说明:
- 返回结果中的 `data` 就是可直接提交给 `getMmsJson` / `getIcdMmsJson``indexSelection`
- 只有启用且校验通过的标签才会被展开进最终 `bindings`
### 3.5 失败响应说明
如果请求结构不合法或业务校验失败,会进入全局异常处理,返回统一 `HttpResult<String>`。常见场景包括:
- `request` 为空
- `confirmData` 为空
- `confirmedData` 中存在未知分组
- 某个标签未选择 `lnInst`
- 选择的 `lnInst` 不在共同候选范围内
- 选择的 `lnInst` 不在目标报告允许范围内
示例:
```json
{
"code": "500",
"msg": "buildIndexSelection,参数异常",
"data": "分组【谐波数据】的标签【A相】未选择 lnInst"
}
```
说明:
- 这里的 `code``msg` 以公共异常包装实现为准,不保证与示例完全一致。
- 具体错误文案由 `IndexSelectionBuildService` 抛出的 `IllegalArgumentException` 决定。
## 4. 标准调试顺序
推荐按以下顺序联调:
1. 先调用 `getIcdMmsJson``getICD` 获取 `indexCandidates`
2.`indexCandidates` 原样提交给 `buildIndexConfirmData`
3. 前端根据返回的确认模型组装 `confirmedData`
4. 调用 `buildIndexSelection` 生成正式 `indexSelection`
5.`indexSelection` 提交给 `getMmsJson``getIcdMmsJson` 生成正式 `mappingJson`
## 5. curl 调试示例
### 5.1 buildIndexConfirmData
```powershell
curl.exe -X POST "http://localhost:8080/api/mms-mapping/build-index-confirm-data" `
-H "Content-Type: application/json" `
-d "[{\"groupKey\":\"harm\",\"groupDesc\":\"谐波数据\",\"reportCount\":1,\"templateLabels\":[\"A相\",\"B相\",\"C相\"],\"reports\":[{\"reportName\":\"brcbStHarm\",\"dataSetName\":\"dsStHarm\",\"reportDesc\":\"谐波报告\",\"availableLnInstValues\":[\"1\",\"2\",\"3\"]}]}]"
```
### 5.2 buildIndexSelection
```powershell
curl.exe -X POST "http://localhost:8080/api/mms-mapping/build-index-selection" `
-H "Content-Type: application/json" `
-d "{\"confirmData\":[{\"groupKey\":\"harm\",\"groupDesc\":\"谐波数据\",\"labelItems\":[{\"label\":\"A相\",\"required\":false,\"configurableOnce\":true,\"defaultLnInst\":\"1\",\"commonLnInstValues\":[\"1\",\"2\",\"3\"],\"targets\":[{\"reportName\":\"brcbStHarm\",\"dataSetName\":\"dsStHarm\",\"reportDesc\":\"谐波报告\",\"availableLnInstValues\":[\"1\",\"2\",\"3\"]}]}]}],\"confirmedData\":[{\"groupKey\":\"harm\",\"labelItems\":[{\"label\":\"A相\",\"enabled\":true,\"lnInst\":\"1\"}]}]}"
```
## 6. 当前边界
- 本文档只覆盖 `buildIndexConfirmData``buildIndexSelection`
- `getIcdMmsJson` 独立调试方式仍以 `API-getIcdMmsJson.md` 为准
- 示例中的 `HttpResult` 字段和值为结构化示意,实际成功码和提示文案以公共响应实现为准