# 通风模型算法 MCP 接口测试报告
**测试时间**: 2026-08-04 09:56:56
**MCP 服务地址**: `http://39.97.59.228:8071/mcp`
**测试模型 ID**: `2012326636757958658`
**传输协议**: `streamable-http` | **客户端库**: `fastmcp`
## 📊 测试汇总
### 传输层结果
| 指标 | 数值 |
|:---|---:|
| 接口总数 | 15 |
| ✅ 传输层通过 | 15 |
| ❌ 传输层失败 | 0 |
| 传输层通过率 | 100.0% |
| 总耗时 | 378669 ms |
| 平均响应 | 25245 ms |
### 业务层结果
| 指标 | 数值 |
|:---|---:|
| ✅ 业务正常 | 11 |
| ⏱️ 服务端超时 (408) | 2 |
| 🔴 服务端错误 (500) | 1 |
| 🔴 服务不可用 (503) | 1 |
| ❌ 客户端校验失败 | 0 |
| **综合可用率** | **73.3%** |
### 分类统计
| 分类 | 总数 | 传输通过 | 业务正常 | 平均耗时 |
|:---|---:|---:|---:|---:|
| 故障诊断 | 5 | 5 | 4 | 37060 ms |
| 避灾路线 | 2 | 2 | 1 | 69164 ms |
| 关键阻力 | 5 | 5 | 5 | 1378 ms |
| 压能/解算 | 3 | 3 | 1 | 16049 ms |
## 📋 详细测试结果
### ✅ TC-01: 模型网络连通检查 (`check_model_connect_status`)
- **分类**: 故障诊断 | **业务状态**: 正常
- **耗时**: 1148.5 ms | **结果大小**: 23.3 KB
- **数据结构**: `{success: bool, message: str, code: int, result: {result: str(19924)}, timestamp: int}`
- **调用参数**: `model_id=2012326636757958658`
📄 数据预览
```json
{"success": true, "message": "", "code": 200, "result": {"result": "{\"data\":{\"0\":[\"4\",\"6\",\"8\",\"10\",\"12\",\"14\",\"16\",\"18\",\"22\",\"28\",\"30\",\"32\",\"37\",\"41\",\"43\",\"49\",\"51\",\"52\",\"54\",\"56\",\"58\",\"59\",\"61\",\"62\",\"64\",\"66\",\"68\",\"69\",\"71\",\"73\",\"77\",\"78\",\"80\",\"82\",\"84\",\"88\",\"89\",\"90\",\"92\",\"95\",\"97\",\"98\",\"100\",\"102\",\"104\",\"105\",\"107\",\"108\",\"110\",\"113\",\"116\",\"117\",\"121\",\"122\",\"124\",\"126\",\"127\",\"1
```
### ✅ TC-02: 模型循环风路检查 (`check_model_one_dir_cycle`)
- **分类**: 故障诊断 | **业务状态**: 正常
- **耗时**: 850.65 ms | **结果大小**: 152 B
- **数据结构**: `{success: bool, message: str, code: int, result: {result: str}, timestamp: int}`
- **调用参数**: `model_id=2012326636757958658`
📄 数据预览
```json
{"success": true, "message": "", "code": 200, "result": {"result": "{\"bSucced\":0,\"cnt\":0,\"strRemark\":\"模型中没有单向回路\"}"}, "timestamp": 1785808101540}
```
### ✅ TC-03: 模型单向节点检查 (`check_model_one_dir_node`)
- **分类**: 故障诊断 | **业务状态**: 正常
- **耗时**: 760.43 ms | **结果大小**: 165 B
- **数据结构**: `{success: bool, message: str, code: int, result: {result: str}, timestamp: int}`
- **调用参数**: `model_id=2012326636757958658`
📄 数据预览
```json
{"success": true, "message": "", "code": 200, "result": {"result": "{\"bSucced\":1,\"cnt\":0,\"ids\":[],\"strRemark\":\"网络中不含有单风向节点\"}"}, "timestamp": 1785808102295}
```
### ⏱️ TC-04: 模型角联结构诊断(计算重,耗时较长) (`check_model_diagonal_structure`)
- **分类**: 故障诊断 | **业务状态**: 服务端超时 (408)
- **耗时**: 180176.28 ms | **结果大小**: 48 B
- **数据结构**: `{success: bool, error: str, code: int}`
- **调用参数**: `model_id=2012326636757958658`
📄 数据预览
```json
{"success": false, "error": "请求超时", "code": 408}
```
### ✅ TC-05: 模型故障诊断(聚合,不含角联) (`get_model_fault_diagnosis`)
- **分类**: 故障诊断 | **业务状态**: 正常
- **耗时**: 2366.39 ms | **结果大小**: 23.7 KB
- **数据结构**: `{success: bool, code: int, modelID: int, result: {connect_status: {success: bool, message: str, code: int, result: {result: str(19924)}, timestamp: int}, one_dir_cycle: {success: bool, message: str, code: int, result: {result: str}, timestamp: int}, one_dir_node: {success: bool, message: str, code: int, result: {result: str}, timestamp: int}}}`
- **调用参数**: `model_id=2012326636757958658`, `include_diagonal=False`
📄 数据预览
```json
{"success": true, "code": 200, "modelID": 2012326636757958658, "result": {"connect_status": {"success": true, "message": "", "code": 200, "result": {"result": "{\"data\":{\"0\":[\"51\",\"52\",\"54\",\"56\",\"58\",\"59\",\"61\",\"62\",\"64\",\"66\",\"68\",\"69\",\"71\",\"73\",\"77\",\"78\",\"80\",\"82\",\"84\",\"88\",\"89\",\"90\",\"92\",\"95\",\"97\",\"98\",\"100\",\"102\",\"104\",\"105\",\"107\",\"108\",\"110\",\"113\",\"116\",\"117\",\"121\",\"122\",\"124\",\"126\",\"127\",\"129\",\"131\",\"13
```
### ✅ TC-06: 避灾路线模拟 (`get_escape_path`)
- **分类**: 避灾路线 | **业务状态**: 正常
- **耗时**: 18138.89 ms | **结果大小**: 204.3 KB
- **数据结构**: `{success: bool, message: str, code: int, result: {result: str(187009)}, timestamp: int}`
- **调用参数**: `model_id=2012326636757958658`, `fire_tun_id=4`, `person_tun_id=6`
📄 数据预览
```json
{"success": true, "message": "", "code": 200, "result": {"result": "{\"bSucced\":1,\"nTunCount\":1796,\"fCostTime\":192861.796875,\"data\":{\"tuns\":[{\"4\":{\"nextId\":[\"6\",\"1735448793881634\"],\"startTime\":0.000000,\"endTime\":0.000000,\"coVal\":2000.000000}},{\"6\":{\"nextId\":[\"8\"],\"startTime\":0.000000,\"endTime\":215.592896,\"coVal\":2000.000000}},{\"1735448793881634\":{\"nextId\":[\"1735448793881478\"],\"startTime\":0.000000,\"endTime\":221.394775,\"coVal\":2000.000000}},{\"8\":{\"
```
### ⏱️ TC-07: 避灾路线模拟(各出口,含CO参数) (`get_escape_path_each_exit`)
- **分类**: 避灾路线 | **业务状态**: 服务端超时 (408)
- **耗时**: 120188.95 ms | **结果大小**: 48 B
- **数据结构**: `{success: bool, error: str, code: int}`
- **调用参数**: `model_id=2012326636757958658`, `fire_tun_id=4`, `person_tun_id=6`, `co_per=2000.0`, `during_time=30.0`
📄 数据预览
```json
{"success": false, "error": "请求超时", "code": 408}
```
### ✅ TC-08: 获取回风井巷道ID列表 (`get_out_shafts`)
- **分类**: 关键阻力 | **业务状态**: 正常
- **耗时**: 1073.53 ms | **结果大小**: 130 B
- **数据结构**: `{success: bool, message: str, code: int, result: {result: str}, timestamp: int}`
- **调用参数**: `model_id=2012326636757958658`
📄 数据预览
```json
{"success": true, "message": "", "code": 200, "result": {"result": "{\"cnt\":2,\"ids\":[3957,3963]}"}, "timestamp": 1785808424370}
```
### ✅ TC-09: 获取进风井巷道ID列表 (`get_in_shafts`)
- **分类**: 关键阻力 | **业务状态**: 正常
- **耗时**: 1284.8 ms | **结果大小**: 144 B
- **数据结构**: `{success: bool, message: str, code: int, result: {result: str}, timestamp: int}`
- **调用参数**: `model_id=2012326636757958658`
📄 数据预览
```json
{"success": true, "message": "", "code": 200, "result": {"result": "{\"cnt\":6,\"ids\":[4,37,113,3214,3964,3986]}"}, "timestamp": 1785808425643}
```
### ✅ TC-10: 最大阻力路线 (`get_max_resistance_path`)
- **分类**: 关键阻力 | **业务状态**: 正常
- **耗时**: 1549.44 ms | **结果大小**: 1.0 KB
- **数据结构**: `{success: bool, message: str, code: int, result: {result: str(959)}, timestamp: int}`
- **调用参数**: `model_id=2012326636757958658`, `node_id=3958`
📄 数据预览
```json
{"success": true, "message": "", "code": 200, "result": {"result": "{\"bSucced\":0,\"fMaxH\":1077.614465,\"path\":[0,4,6,8,10,12,14,16,28,98,100,102,104,105,107,108,110,117,122,121,124,149,151,160,159,158,141,143,145,204,206,208,211,215,218,1133,1134,223,225,232,257,258,260,273,275,277,280,284,310,311,289,291,302,313,315,335,334,345,340,342,344,365,366,382,384,404,415,417,420,439,442,447,501,505,509,517,544,564,566,576,587,590,657,681,1123,662,664,685,686,1735211924946739,1734397888359985,721,72
```
### ✅ TC-11: 三区阻力分布 (`get_three_area_distribution`)
- **分类**: 关键阻力 | **业务状态**: 正常
- **耗时**: 1825.01 ms | **结果大小**: 366.0 KB
- **数据结构**: `{success: bool, message: str, code: int, result: {result: str(328985)}, timestamp: int}`
- **调用参数**: `model_id=2012326636757958658`
📄 数据预览
```json
{"success": true, "message": "", "code": 200, "result": {"result": "{\"bSucced\":1,\"tuns\":{\"4\":{\"dQ\":127.000000,\"strName\":\"辅运平硐\",\"dV\":6.685196,\"dHTotal\":74.494432,\"dHFric\":74.494432,\"dHLocal\":0.000000,\"dHNature\":0,\"nAirType\":1,\"strAirType\":\"FreshQEdges\"},\"6\":{\"dQ\":59.790000,\"strName\":\"2#辅运平硐联络巷\",\"dV\":2.778617,\"dHTotal\":2.539730,\"dHFric\":2.539730,\"dHLocal\":0.000000,\"dHNature\":0,\"nAirType\":1,\"strAirType\":\"FreshQEdges\"},\"8\":{\"dQ\":59.790000,\"str
```
### ✅ TC-12: 关键路径决策 (`get_key_path_decision`)
- **分类**: 关键阻力 | **业务状态**: 正常
- **耗时**: 1158.9 ms | **结果大小**: 33.2 KB
- **数据结构**: `{success: bool, message: str, code: int, result: {result: str(29908)}, timestamp: int}`
- **调用参数**: `model_id=2012326636757958658`
📄 数据预览
```json
{"success": true, "message": "", "code": 200, "result": {"result": "{\"bSucced\":1,\"nNum1\":67,\"nNum2\":123,\"AmendEdges1\":{\"549\":{\"strName\":\"二水平中部回风大巷\",\"dLength\":65.226318,\"dQ\":47.620000,\"dH\":10.191495,\"dHAmend\":7.753141,\"AmendTypes\":\"新增设施调节\",\"dRAmend\":0.003419,\"dAmendArea\":11.541236},\"622\":{\"strName\":\"42上204主运顺槽\",\"dLength\":62.211524,\"dQ\":2.820000,\"dH\":0.024795,\"dHAmend\":2.043394,\"AmendTypes\":\"新增设施调节\",\"dRAmend\":0.256953,\"dAmendArea\":2.164311},\"912
```
### ✅ TC-13: 节点压能图 (`get_path_press_power`)
- **分类**: 压能/解算 | **业务状态**: 正常
- **耗时**: 12464.22 ms | **结果大小**: 3.8 MB
- **数据结构**: `{success: bool, message: str, code: int, result: {result: str(2874396)}, timestamp: int}`
- **调用参数**: `model_id=2012326636757958658`, `id_from=2`, `id_to=3958`
📄 数据预览
```json
{"success": true, "message": "", "code": 200, "result": {"result": "{\n\t\"bSucced\":\t1,\n\t\"PathNum\":\t154,\n\t\"Paths\":\t{\n\t\t\"0\":\t{\n\t\t\t\"nTunNum\":\t31,\n\t\t\t\"Tuns\":\t[{\n\t\t\t\t\t\"strID\":\t\"4\",\n\t\t\t\t\t\"strName\":\t\"辅运平硐\",\n\t\t\t\t\t\"dFromPower\":\t0.000000,\n\t\t\t\t\t\"dToPower\":\t74.494432,\n\t\t\t\t\t\"dQ\":\t127.000000,\n\t\t\t\t\t\"dH\":\t74.494432,\n\t\t\t\t\t\"dLength\":\t341.101060\n\t\t\t\t}, {\n\t\t\t\t\t\"strID\":\t\"6\",\n\t\t\t\t\t\"strName\":\t\"
```
### 🔴 TC-14: 网络解算(耗时较长) (`net_cal`)
- **分类**: 压能/解算 | **业务状态**: 服务端内部错误 (500)
- **耗时**: 35607.82 ms | **结果大小**: 601 B
- **数据结构**: `{success: bool, error: str, code: int, message: str(500)}`
- **调用参数**: `model_id=2012326636757958658`
📄 数据预览
```json
{"success": false, "error": "HTTP错误: 500", "code": 500, "message": "{\"timestamp\":\"2026-08-04 09:54:38\",\"path\":\"/ventanaly-model/Vmodel/VentanalyAirthmeticJson/netcal\",\"status\":500,\"error\":\"Internal Server Error\",\"message\":\"Connection prematurely closed BEFORE response\",\"requestId\":\"7d7be25a-37578\",\"exception\":\"reactor.netty.http.client.PrematureCloseException\",\"trace\":\"reactor.netty.http.client.PrematureCloseException: Connection prematurely closed BEFORE response\\n
```
### 🔴 TC-15: 方案模拟解算 (`net_cal_for_plan`)
- **分类**: 压能/解算 | **业务状态**: 服务不可用 (503)
- **耗时**: 74.82 ms | **结果大小**: 605 B
- **数据结构**: `{success: bool, error: str, code: int, message: str(500)}`
- **调用参数**: `model_id=2012326636757958658`, `plan={}`
📄 数据预览
```json
{"success": false, "error": "HTTP错误: 503", "code": 503, "message": "{\"timestamp\":\"2026-08-04 09:54:38\",\"path\":\"/ventanaly-model/Vmodel/VentanalyAirthmeticJson/getNetCalForPlan\",\"status\":503,\"error\":\"Service Unavailable\",\"message\":\"Unable to find instance for ventanaly-model\",\"requestId\":\"dc06103d-37682\",\"exception\":\"org.springframework.cloud.gateway.support.NotFoundException\",\"trace\":\"org.springframework.cloud.gateway.support.NotFoundException: 503 SERVICE_UNAVAILABL
```
## 💡 问题与建议
### ⚠️ 发现 4 个问题
| 接口 | 问题 | 建议 |
|:---|:---|:---|
| `check_model_diagonal_structure` | 服务端超时 (408),耗时 180176ms | 优化后端算法或增加超时时间;前端设置 180s+ 超时并显示进度 |
| `get_escape_path_each_exit` | 服务端超时 (408),耗时 120189ms | 优化后端算法或增加超时时间;前端设置 180s+ 超时并显示进度 |
| `net_cal` | 服务端内部错误 (500) - `Connection prematurely closed BEFORE response` | 检查后端 Netty 连接池/响应超时配置 |
| `net_cal_for_plan` | 服务不可用 (503) - `Unable to find instance for ventanaly-model` | 检查微服务 `ventanaly-model` 实例是否在注册中心在线 |
### 📝 通用建议
1. **响应时间差异大**:快速接口(进/回风井查询、循环风路检查)约 0.8-1.5s,重计算接口(压能图 12s、避灾路线 18s)约 12-35s,超时接口约 180s。**建议按接口类型设置差异化超时**。
2. **数据量大**:`get_three_area_distribution` (366KB) 和 `get_path_press_power` (3.8MB) 返回数据量大,移动端需考虑分页或压缩。
3. **参数校验**:`net_cal_for_plan` 的 `plan` 参数不能为空字符串,建议后端明确 `plan` 格式规范并提供示例。
4. **返回值结构**:外层统一为 `{success, code, result}`,但 `get_model_fault_diagnosis` 直接在外层暴露 `modelID` 字段,略有风格不一致。
5. **节点 vs 隧道 ID**:`get_max_resistance_path` 和 `get_path_press_power` 使用 `node_id`(节点ID),其他接口使用 `tun_id`(隧道ID),文档已有说明但调用时容易混淆。
6. **内层 JSON**:多数接口的 `result.result` 是 JSON 字符串,需要二次 `json.loads` 解析,建议统一为对象格式。