|
|
@@ -133,4 +133,47 @@ SKILL.md 里写了完整 9 步修复流程与本机编译方式。
|
|
|
- `eslint`(3 文件,`--max-warnings 0`)→ 0 错误
|
|
|
- `vue-tsc --noEmit` → 这三个文件 **0 错误**,全仓错误总数仍为 103(与改动前一致,无新增)
|
|
|
|
|
|
+---
|
|
|
+
|
|
|
+## Result 包装复核(2026-09-16 晚,用户要求)
|
|
|
+
|
|
|
+需求:「检查所有 controller 的接口返回结果是不是又缺 Result 包裹,有就加上」。
|
|
|
+
|
|
|
+### 审计口径与结果
|
|
|
+全量扫描 45 个 controller → **165 个方法级端点**(用「方法级映射注解总数 = 165」做过完整性交叉校验,**无遗漏**):
|
|
|
+| 类别 | 数量 |
|
|
|
+| --- | --- |
|
|
|
+| 已 `Result` 包裹 | 151 |
|
|
|
+| 流式 / ResponseEntity(不适用) | 3(`/govern/sse`、`/chat/stream` 的 SseEmitter + `/py/files/**` 的 ResponseEntity) |
|
|
|
+| **刻意裸返回(保持不动)** | 11(`AgentChatController` 10 个 `/chat/**` + `AgentResultController` 的 `/chat/results/{resultId}`) |
|
|
|
+| **漏网缺陷(已修)** | 2 |
|
|
|
+
|
|
|
+### 修掉的 2 个(`DataProfileController`)
|
|
|
+- `GET /dp/callStat`:`CallDataProfileStatDTO` → `Result<CallDataProfileStatDTO>`
|
|
|
+- `GET /dp/transStat`:`TransDataProfileStatDTO` → `Result<TransDataProfileStatDTO>`
|
|
|
+前端 `person/api/dpApi.ts` 用 `defHttp.get<...>` 默认 transform 读 `{code,message,data}`,
|
|
|
+裸返回必然走到 `code !== 200` 分支 → 画像页通话/交易统计直接报「接口请求出错」。
|
|
|
+
|
|
|
+### ★ 为什么上一轮批量脚本会漏掉这两个
|
|
|
+它们的注解与方法签名之间夹了一行注释(Solon 迁移遗留):
|
|
|
+```java
|
|
|
+@GetMapping("/callStat")
|
|
|
+//@Cache(key = "dp_callStat_${personName}", tags = StrConsts.CACHE_TAG_QING_JIAN)
|
|
|
+public CallDataProfileStatDTO callInfoStat(String personName) { ... }
|
|
|
+```
|
|
|
+「紧跟映射注解去找方法签名」的解析逻辑遇到注释行就失配 → 整个端点被跳过。
|
|
|
+**教训:任何注解/签名扫描都必须做完整性交叉校验**(映射注解总数 vs 解析端点数),否则静默漏项。
|
|
|
+
|
|
|
+### 刻意裸返回清单的判定依据(不要再"修"它们)
|
|
|
+- `/chat/**`:前端 `aiHttp.postRaw/getRaw/putRaw/deleteRaw`(`{ isTransformResponse: false }`)
|
|
|
+- `/chat/results/{resultId}`:同上,且 404 语义=结果过期
|
|
|
+- `/py/files/**`:`ResponseEntity` 直出文件
|
|
|
+- `/govern/sse`、`/chat/stream`:`SseEmitter` 流式
|
|
|
+
|
|
|
+### 验证
|
|
|
+- 复扫:151 + 3 + 11 = 165 ✓
|
|
|
+- `mvn -pl ai-server -B clean compile` → **BUILD SUCCESS**
|
|
|
+- 审计脚本已归档到 skill:`scripts/audit-result-wrap.cjs`
|
|
|
+
|
|
|
+
|
|
|
|