Răsfoiți Sursa

docs(api): 同步指标统一层 9 个新接口契约 + PROJECT-OVERVIEW 状态

iwt 3 zile în urmă
părinte
comite
4a3b283429

+ 4 - 4
docs/superpowers/PROJECT-OVERVIEW.md

@@ -1,9 +1,9 @@
 # 浠艾福 项目全景 — 阶段性需求与设计汇总
 
-**文档版本:** v2.16
+**文档版本:** v2.17
 **日期:** 2026-10-09
 **状态:** 已确认(v2.1 Phase 2-4 全栈完成)+ 虚拟支付改造(Tasks 1-12 已完成,退款闭环实施中)+ 新用户注册引导(12 Tasks 全栈完成)+ 家庭成员关系条增强(✅ 已实施)+ TabBar 重构(✅ 4Tab + 中间⭐扇形菜单,设计已对齐实现)+ **LIFETIME 终身会员(✅ 11 Tasks 全栈完成)** + **健康数据中心(✅ 全栈完成)** + **SKU 价格单位统一分 + 规格选择响应式修复(✅ 7 Tasks 全栈完成)** + **AI健康教练人格分化与管家自助选择(✅ 11 Tasks 全栈完成)** + **优惠券全链路改为家庭维度(待实施)** + **关系三图重构(关键人拓展章鱼图/珍珠图/能力图,设计规格已完成)** + **注册零填写+信息按需补充(✅ 全栈完成:登录直接进首页 + 家庭邀请独立页真实姓名/家庭身份必填 + 功能→信息字段映射表 + 添加成员手机号冲突邀请加入)** + **健康报告归属重分配(✅ 后端接口 + 管理端页面 + 小程序入口已实现,见 `specs/2026-10-05-health-report-reassign-design.md`)**
-**指标变化曲线·指标速查·指标关联(✅ 设计已确认 v1.0 + 3 份实施计划已就绪(backend/miniapp/webadmin),见 `specs/2026-10-09-indicator-change-curve-design.md`)**
+**指标变化曲线·指标速查·指标关联(✅ 后端已实施:11 任务全栈(迁移+统一指标层+4 视图 API+5 admin 端点+每日校准 Job),24 用例全绿;小程序/管理端实施计划已就绪待执行,见 `specs/2026-10-09-indicator-change-curve-design.md`)**
 **维护:** 所有需求变更需更新本文档
 
 ---
@@ -376,7 +376,7 @@
 | `2026-08-31-self-check-ai-integration-design.md` | 🟡 设计稿(P0-1 纯AI替换静态建议 + P0-2 用户点击生成健康计划 + P1-1 历史趋势AI解读 + P1-2 Chat上下文注入,P2延后) | 五维家庭自检 AI 结合设计 |
 | `2026-09-09-team-hierarchy-design.md` | 🟡 设计稿(团队层级树从下往上生长 + 团队消费额分级统计 + 直推成员消费/CF明细 + 我的推荐人展示 + 去掉富页面推荐码) | 团队层级与推荐关系可视化 |
 | `2026-09-10-report-quick-analyze-design.md` | 🟡 设计稿(报告详情页快速分析:免费版每日 1 次 Redis 计数 + 付费版多轮;复用 chat_graph + AiGateway,LangGraph 零改动) | 报告快速分析设计 |
-| `api/API_REFERENCE.md` | 🟢 已建立(2026-08-18;200+ 接口清单;废弃接口标注;新增接口检查流程;2026-09-06 补充家庭成员切换/回收箱接口:`/leave`、`/kick` 回收箱分流、`/recycle`;2026-09-10 补充关系三图接口:`/api/octopus`、`/api/pearl`、`/api/ability`;2026-09-12 补充供应商审核接口:`/api/product/order/review/update`;2026-10-04 补充统一服务角色申请 6 接口 `/api/service-role/*`(4.44,含 status 语义、角色落地规则及 admin/operator 权限口径)、规划师解绑家庭 `/api/guide/families/unbind`(4.45)、规划师方案审核 `/api/health/plan/pending-review/*`(4.46,含未分配池 `teacher_id IS NULL` 规则);2026-10-05 补充商品批量上下架 `POST /api/admin/product/batch-shelve`(body: `{productIds, shelve}`,批量校验仅审核通过商品可操作)) | 后台接口参考文档 |
+| `api/API_REFERENCE.md` | 🟢 已建立(2026-08-18;200+ 接口清单;废弃接口标注;新增接口检查流程;2026-09-06 补充家庭成员切换/回收箱接口:`/leave`、`/kick` 回收箱分流、`/recycle`;2026-09-10 补充关系三图接口:`/api/octopus`、`/api/pearl`、`/api/ability`;2026-09-12 补充供应商审核接口:`/api/product/order/review/update`;2026-10-04 补充统一服务角色申请 6 接口 `/api/service-role/*`(4.44,含 status 语义、角色落地规则及 admin/operator 权限口径)、规划师解绑家庭 `/api/guide/families/unbind`(4.45)、规划师方案审核 `/api/health/plan/pending-review/*`(4.46,含未分配池 `teacher_id IS NULL` 规则);2026-10-05 补充商品批量上下架 `POST /api/admin/product/batch-shelve`(body: `{productIds, shelve}`,批量校验仅审核通过商品可操作);2026-10-09 补充指标统一层 9 接口(4.48:视图 4 个 `/api/indicator/*` + admin 5 个 `/api/admin/indicator/*`,含家庭归属校验、关联校准口径、映射导入/review)) | 后台接口参考文档 |
 | `2026-09-10-key-person-expansion-octopus-design.md` | 🟡 设计规格已确认(成效对象=会员客户 + 类型bitmask + 关键人画像 + 四步法 + 高频词≤8方向;3表/10接口/三层画布;替换旧章鱼图) | 关键人拓展章鱼图替换设计(关系三图重构) |
 | `2026-09-19-article-reading-quiz-design.md` | 🟢 已实施(补全现有阅读答题:article_quiz_records 表 + LangGraph article_quiz_graph 出题 + AiGateway 接入 + 提交答题落库 + CF值/五维能量双奖励 + profile_snapshot.quiz_summary 认知雷达) | 文章阅读后答题奖励 + 认知雷达记录设计 |
 | `2026-09-22-guide-popup-config-design.md` | ✅ 已实施(4表/guide_popup+step+trigger+log,9接口,ConfigurableGuide.vue组件+管理端2页;旧 sys_config 方案保留并行) | 弹窗引导页配置化管理设计 |
@@ -385,7 +385,7 @@
 
 | 文件 | 状态 | 说明 |
 |------|:----:|------|
-| `2026-10-09-indicator-change-curve-backend.md` | 🟡 待执行(11 任务:迁移 356-362 两新表 indicator_mapping_rules/indicator_correlations + indicator_definitions/indicator_values 升级、NormalizeIndicatorPipeline 单一写者、4 视图 API、change-ranking、Spearman 校准、2 个 admin Controller 5 端点(L3113-3117)、API_REFERENCE 同步) | 指标变化曲线·速查·关联 — 后端实施计划(设计稿:2026-10-09-indicator-change-curve-design.md) |
+| `2026-10-09-indicator-change-curve-backend.md` | 🟢 已实施(11 任务全部完成:迁移 356-362 两新表 indicator_mapping_rules/indicator_correlations + indicator_definitions/indicator_values 升级、实体/Mapper、ReportDateExtractor(keyset 游标防挂死)、SpearmanUtil、IndicatorMappingService、NormalizeIndicatorPipeline 单一写者(三钩子)、IndicatorTrendService、IndicatorCorrelationService、4 视图 API + 2 admin Controller 5 端点、每日 03:00 IndicatorCalibrationJob、API_REFERENCE 4.48 同步;7 个新增单测类共 24 用例全绿,compile/test-compile EXIT=0) | 指标变化曲线·速查·关联 — 后端实施计划(设计稿:2026-10-09-indicator-change-curve-design.md) |
 | `2026-10-09-indicator-change-curve-miniapp.md` | 🟡 待执行(M1-M9:TrendChart canvas 组件 + 指标曲线页 + 指标速查页 + 菌群详情变化区块 + pages.json 注册 + utils/api.js 4 封装 + 单测;验证=提取 script + node --check) | 指标变化曲线·速查 — 小程序实施计划(P4,依赖后端 P1-P3) |
 | `2026-10-09-indicator-change-curve-webadmin.md` | 🟡 待执行(W1-W6 TDD:src/api/indicator.js 6 封装 + IndicatorCorrelations.vue + IndicatorMappings.vue + utils/indicatorSeeds.js + 路由注册 + 菜单回退项 + jest axios-mock-adapter 单测 + npx vue-cli-service build 门禁;零后端改动,仅复用 5 个 admin 端点) | 指标关联/映射 — Web 管理端实施计划(P5,依赖后端 P4-P5) |
 | `2026-10-04-plan-review-workbench.md` | 🟢 已实施(15 任务全部完成:0 修 test-compile 基线、1 GuideFamilyAccessGuard、2 confirmBind 重绑复位、3 七个端点接入绑定校验、4 rejectPlan 状态守卫 + getPlanForFamily IDOR 反查、5 approveAndPublish 返回 taskGenerated(新增 PlanApproveResultDTO)、6 GuidePlanReviewController 方案审核 4 端点(含 planId IDOR 反查,6/6 绿)、7 GuideFamilyQueryService/Controller 新增 my-families + members 端点(授权源与 isBound 同源,4/4 绿)、8 后端整体验证(compile/test-compile EXIT 0 + 五个新增单测类共 32 个用例全绿 + 全仓 1688 条映射零重复路由)、9 utils/api.js 新增审核工作台 8 个 API 封装(各导出唯一,语法校验须用 .mjs 副本)、10 review-workbench.vue 审核台首页、11 review-family.vue 单家庭双 Tab(Task 用 deadline 非 dueDate;HealthPlan 无 title)、12 plan-detail.vue 方案详情(含 taskGenerated=false 部分成功提示;updatePlanContent 用 `if (planJson != null)` 守卫,3 参调用不会清空 plan_json)、13 pages.json 分包注册 3 页面(裸 path)+ families.vue 加入口、14 文档同步 API_REFERENCE 4.47;计划本身核实并修正 26 处初版事实错误) | 规划师审核工作台实现计划(拆 2 层编排:后端并行 + 前端并行;验收门为 `mvn test-compile` + 纯 Mockito 单测,不依赖真实数据库。⚠️ `pom.xml:28` 有 `<skipTests>true</skipTests>`,跑单测必须显式 `-DskipTests=false`,否则只输出 `Tests are skipped` 的假通过。⚠️ 路由查重必须按「类级 @RequestMapping 前缀 + 方法级字面量」归一化比较,只比方法字面量会产生假阳性) |

+ 31 - 0
docs/superpowers/api/API_REFERENCE.md

@@ -1596,6 +1596,37 @@ interactionType 取值:`PHONE` / `WECHAT` / `MEETING` / `OTHER`。
 
 ---
 
+### 4.48 指标统一层(`/api/indicator/*` + `/api/admin/indicator/*`)
+
+指标变化曲线 / 指标速查 / 指标关联的统一读接口与管理端接口。读接口 `subjectId` 必填且做家庭归属校验(`family_members.id = subjectId AND family_id = 当前用户家庭`,由 `JwtInterceptor` 注入 `@RequestAttribute("familyId")`);管理端接口校验 `@RequestAttribute("role")`,仅 `role=admin` 可访问,否则「无权操作」。
+
+**视图接口(`IndicatorController`,`/api/indicator`)**
+
+| 端点 | 请求要点 | 用途 |
+|---|---|---|
+| `POST /api/indicator/trend` | `{subjectId, definitionIds:[...]}` | 指标曲线(按 definitionId 分组、report_date 升序点序列) |
+| `POST /api/indicator/change-ranking` | `{subjectId, reportType?, category?, scope:adjacent\|first-vs-latest, orderBy:up\|down\|magnitude, limit}` | 变化幅度排名(含 `overall.improvedCount/worsenedCount/flatCount` 汇总) |
+| `POST /api/indicator/quick-lookup` | `{subjectId, category?, page, pageSize}` | 指标速查(分类分页 + 类别汇总 + `dimensionScores` 五/七维评分小节) |
+| `POST /api/indicator/correlation/list` | `{subjectId, definitionId}` | 指标关联查询(含 `subjectEvidence` 成员级配对证据) |
+
+**管理端接口(`/api/admin/indicator/correlation/*`、`/api/admin/indicator/mapping/*`)**
+
+| 端点 | 请求要点 | 用途 |
+|---|---|---|
+| `POST /api/admin/indicator/correlation/save` | `{definitionIdA, definitionIdB, direction, manualStrength, description, manualLocked, sourceNote}` | 关联对定义/编辑(写入前按 `indicator_definitions.code` 字典序强制对序,保证唯一键对称) |
+| `POST /api/admin/indicator/correlation/list` | `{page, size}` | 关联对分页(按 `updated_at` 倒序,含校准状态) |
+| `POST /api/admin/indicator/correlation/calibrate` | `{pairId?}` | 手动触发校准(返回「校准完成,共更新 N 对」) |
+| `POST /api/admin/indicator/mapping/import` | `{sourceType, seeds:[{rawName, definitionId?}]}` | 映射种子批量导入(返回「导入完成,共 N 条」) |
+| `POST /api/admin/indicator/mapping/list` | `{page, size, status?, sourceType?}` | 映射规则分页/review(`status=0` 为 ai_fallback 待确认) |
+
+> **关联校准**:`save` 时 `effective_strength = manual_strength`;每日 03:00 `IndicatorCalibrationJob`(`@Scheduled(cron = "0 0 3 * * ?")`)对 `status=active` 且 `manual_locked=0` 的关联对按 subject 分组做 Spearman + Fisher z 聚合,有效样本 `>=30` 才用 `computed_strength` 覆盖 `manual_strength`。`correlation/calibrate` 手动触发同一逻辑(`pairId` 传入时仍走全量逐对幂等)。
+> **统一指标层写入(单一写者)**:报告入库 / 报告编辑 / 食材推荐刷新三处流程由 `NormalizeIndicatorPipeline` 幂等写入 `indicator_values`(唯一键 `source_type + source_id + definition_id`,`upsertMapping` ON DUPLICATE KEY)。本层读接口只读 `indicator_values`,不写时序;五维/七维评分在速查接口按原表 join,不进时序。
+> **关联表**:`indicator_correlations`(迁移 360)、`indicator_mapping_rules`(迁移 359)。
+
+*文档更新:2026-10-09(指标统一层新增,见 `specs/2026-10-09-indicator-change-curve-design.md`)*
+
+---
+
 *文档最后更新:2026-10-04*
 
 ---