|
@@ -2994,3 +2994,299 @@ W0.2 双配置中心合并:`product_config` 已并入 `service_config`(唯
|
|
|
| SC-A-21 | 舌诊/情绪模型管理 | `POST /api/admin/innate-portrait-config/{list,update,invalidate}` + `POST /api/mind/emotion/{analyze,analyze-url}` 存在;舌诊模型无独立 admin 端点(内联报告解析链) | 端点载体部分存在,需产品侧确认 |
|
|
| SC-A-21 | 舌诊/情绪模型管理 | `POST /api/admin/innate-portrait-config/{list,update,invalidate}` + `POST /api/mind/emotion/{analyze,analyze-url}` 存在;舌诊模型无独立 admin 端点(内联报告解析链) | 端点载体部分存在,需产品侧确认 |
|
|
|
|
|
|
|
|
*文档更新:2026-11-07(EVD-11 平台运营 25 SC 契约核对增补「平台运营能力」段落 4.60:管理端登录 / 统计 / 报告解析中台 / 文章审核 / 勋章 / 供应商 / 活动 / 知识库 / 维度 / 迁移 / 用户家庭治理 / 订单退款 / 审核队列 / 审计日志 / 优惠券 / 能量配置 / 睡眠选项 + 契约缺口。完整核验表见 `docs/superpowers/specs/2026-11-07-admin-ops-contract.md`)*
|
|
*文档更新:2026-11-07(EVD-11 平台运营 25 SC 契约核对增补「平台运营能力」段落 4.60:管理端登录 / 统计 / 报告解析中台 / 文章审核 / 勋章 / 供应商 / 活动 / 知识库 / 维度 / 迁移 / 用户家庭治理 / 订单退款 / 审核队列 / 审计日志 / 优惠券 / 能量配置 / 睡眠选项 + 契约缺口。完整核验表见 `docs/superpowers/specs/2026-11-07-admin-ops-contract.md`)*
|
|
|
|
|
+## 4.61 孩子端(不能登录用户视角)接口(EVD-9 契约核对,2026-11-07)
|
|
|
|
|
+> 来源:EVD-9 孩子端 26 SC 契约核对,依据开工包 `docs/tdd/orchestration/child-zone-kickoff-20261107.md`(26 SC,6 个 ⚠ 待核实项已全部实测关闭)。
|
|
|
|
|
+> 本节端点由 `cfc-backend` 源码全量提取(1935 个 `@PostMapping`)后逐条比对得出;场景口径另参 `tests/user-scenarios/应用场景总览.md` § 四。
|
|
|
|
|
+> 完整核验表 / 能力键建议 / 缺口清单见 `docs/superpowers/specs/2026-11-07-child-zone-contract.md`。
|
|
|
|
|
+> 开工包候选载体与实测不一致的 6 处(C-07/C-08/C-12/C-14/C-22/C-24)在下方按实测路径登记。
|
|
|
|
|
+> 覆盖 SC-C-01 ~ SC-C-26。统一 `@PostMapping`、响应 `Result<T>`、JWT 鉴权(`JwtInterceptor` 拦 `/api/**`)。
|
|
|
|
|
+> **"不能登录用户"没有自己的 JWT**:孩子端写操作都发生在家长会话下,通过 `memberId` / `currentMemberId` 指定被代管成员。
|
|
|
|
|
+### 4.61.1 身份与视角切换(SC-C-01 / SC-C-17 / SC-C-18)
|
|
|
|
|
+| 路径 | 请求 | 响应 `data` | 说明 |
|
|
|
|
|
+|------|------|-------------|------|
|
|
|
|
|
+| `POST /api/auth/silent-login` | `{code}`(WechatLoginDTO) | `LoginResultDTO`(`token`/`userId`/`role`/...) | 微信静默登录 |
|
|
|
|
|
+| `POST /api/auth/wechat-login` | `{code,...}`(WechatLoginDTO) | `LoginResultDTO` | 微信授权登录 |
|
|
|
|
|
+| `POST /api/auth/phone-login` | `{phone, code}` | `LoginResultDTO` | 手机号验证码登录 |
|
|
|
|
|
+| `POST /api/auth/auto-login` | `{openid,...}` | `LoginResultDTO` | 自动登录 |
|
|
|
|
|
+| `POST /api/auth/verify` | 无 body,Header `Authorization: Bearer <token>` | `{userId, role}`;token 无效或用户不存在 → `401` | 会话校验(前端启动探活) |
|
|
|
|
|
+| `POST /api/family/member/switch` | `{memberId, source?}` | `SwitchMemberVO{memberId, source, effectiveRole, nickname, isSwitchable}` | **现行切视角端点**:家长切到孩子视角(孩子端入口) |
|
|
|
|
|
+| `POST /api/family/user/switch-back-verify` | `{password}` | `Boolean` | 密码校验后切回家长视角 |
|
|
|
|
|
+| `POST /api/family/user/switch-to-child` | `{memberId}` | **`410`** | **已废弃**,返回"请使用 /api/family/member/switch" |
|
|
|
|
|
+| `POST /api/family/user/switch-back-to-parent` | 无 | **`410`** | **已废弃**,同上 |
|
|
|
|
|
+| `POST /api/family/invite/check-family` | 无 | 家庭绑定状态 | 账号是否已绑定家庭 |
|
|
|
|
|
+| `POST /api/family/invite/validate` | `{token}` | 校验结果 | 家庭邀请令牌校验 |
|
|
|
|
|
+| `POST /api/family/invite/validate-family-code` | `{inviteCode}` | 校验结果 | 家庭邀请码校验 |
|
|
|
|
|
+> **缺口**:无 `logout` 端点(JWT 无状态,退出=前端清 token,G-03);无任何设备维度(无 deviceId/设备表/异常设备二次验证,G-04)。
|
|
|
|
|
+> **路径缺陷**:前端 `utils/api.js` 仍调 `/api/user/switch-to-child`、`/api/user/switch-back-to-parent`、`/api/user/switch-mode`、`/api/user/roles`、`/api/user/switch-role`,这些 `/api/user/*` 在 `UserController` 中**无映射(404)**(G-08)。
|
|
|
|
|
+### 4.61.2 任务 / 打卡 / 方案进度(SC-C-02 / C-05 / C-08 / C-14)
|
|
|
|
|
+| 路径 | 请求 | 响应 `data` | 说明 |
|
|
|
|
|
+|------|------|-------------|------|
|
|
|
|
|
+| `POST /api/tasks/today` | `{memberId?, dimensionCode?, category?}` | `Task[]` | 今日任务 |
|
|
|
|
|
+| `POST /api/tasks/my-pending` | `{memberId?}` | `Task[]` | 待接受任务 |
|
|
|
|
|
+| `POST /api/tasks/accept` | `{taskId, memberId}` | `Boolean` | **⚠ 参数绑定错误**:后端 `@PathVariable Long id` 但路径无 `{id}` → 必抛 `MissingPathVariableException`(G-12) |
|
|
|
|
|
+| `POST /api/tasks/reject/{id}` | `{memberId?}` | `Boolean` | 孩子拒接任务 |
|
|
|
|
|
+| `POST /api/tasks/{id}/start` | `{memberId?}` | `Boolean`/Task | 开始任务 |
|
|
|
|
|
+| `POST /api/tasks/{id}/complete` | `CompleteTaskDTO{memberId?, photoUrl, content, contentType}` | `Map`(奖励/状态) | 打卡提交 |
|
|
|
|
|
+| `POST /api/tasks/{id}/complete-minigame` | `{memberId?, completionTime?, score?}` | `Map` | 以小游戏结果完成任务 |
|
|
|
|
|
+| `POST /api/tasks/{id}/review` | `{approved? , result?, reason?}` | `Boolean` | 家长审核;`approved=false` → `status` 回 `pending`,孩子可重做(C-14) |
|
|
|
|
|
+| `POST /api/tasks/history` | `{memberId?, page, size}` | `Page<Task>` | 任务历史 |
|
|
|
|
|
+| `POST /api/daily/checkin/create` | `DailyHealthCheckin`(饮食/运动/睡眠/饮水/心情) | 记录 | 通用每日打卡 |
|
|
|
|
|
+| `POST /api/daily/checkin/list` | `{memberId?, date?}` | `DailyHealthCheckin[]` | 打卡列表 |
|
|
|
|
|
+| `POST /api/health/plan/list` | `{memberId?, page, size}` | `Page<HealthPlan>` | 成长方案列表 |
|
|
|
|
|
+| `POST /api/health/plan/detail` | `{planId}` | `HealthPlan` | 方案详情 |
|
|
|
|
|
+| `POST /api/health/plan/tasks` | `{planId}` | `Task[]` | 方案任务与进度(含 `plan.getFamilyId()` 归属校验) |
|
|
|
|
|
+| `POST /api/growth-task/list` | `{type?, dimension?}` | `GrowthTask[]` | 成长任务(今日/周期) |
|
|
|
|
|
+| `POST /api/growth-task/claim` | `{taskId?}` | `String` | 领取成长任务(奖励在完成时自动发放) |
|
|
|
|
|
+### 4.61.3 小游戏与五维能量(SC-C-03 / C-24 / C-25)
|
|
|
|
|
+| 路径 | 请求 | 响应 `data` | 说明 |
|
|
|
|
|
+|------|------|-------------|------|
|
|
|
|
|
+| `POST /api/mini-game/list` | `{}`(`familyId` 取自会话) | `MiniGame[]` | 启用的小游戏 |
|
|
|
|
|
+| `POST /api/mini-game/complete` | `CompleteGameDTO{memberId, gameCode, completionTime, score}` | `{pointsEarned, ...}` | 成绩上报:加积分 + 写流水 + 写 `game_record` + 能量 |
|
|
|
|
|
+| `POST /api/game/record` | `{memberId, gameCode, score, completionTime, difficulty?, pointsEarned?}` | `Map` | 直接写游戏记录(`pointsEarned` 由客户端传入,**存在刷分风险**) |
|
|
|
|
|
+| `POST /api/game/history` / `/best` / `/stats` / `/leaderboard` | `{memberId, gameCode?, page?, size?}` | 记录/最高分/统计/排行榜 | 游戏数据查询 |
|
|
|
|
|
+| `POST /api/energy/sandbox` | `{view: "personal"|"family", memberId?}` | `{locked, view, personalData, familyData, familyUnlocked, familyGate?}` | 五维能量(个人+全家一次返回);需先过 `SELF_CHECK` 关卡,未过返回 `locked=true` |
|
|
|
|
|
+| `POST /api/energy/overview` | `{memberId?}` | `Map`(五维分值/变化) | 五维概览 |
|
|
|
|
|
+| `POST /api/energy/logs` | `{memberId?, dimensionCode?, page?, size?}` | `Page<EnergyLog>` | 能量流水 |
|
|
|
|
|
+| `POST /api/energy/score-history` | `{memberId?, dimensionCode?, page?, size?}` | `Page`(历史快照) | 分值历史 |
|
|
|
|
|
+> **缺口**:`/api/mini-game/complete` 无幂等、`score` 无上限(`score=999999` 可换巨额积分并污染 Redis 排行榜,G-09);`/api/game/record` 的 `pointsEarned` 由前端决定。
|
|
|
|
|
+> 能量写入只落 `energy_balance` + `energy_log`,**不写 `five_dimension_score` 快照**;`overview`/`logs` 未校验 `memberId` 归属(跨家庭可读,G-10)。
|
|
|
|
|
+### 4.61.4 勋章(SC-C-09 / C-10)
|
|
|
|
|
+| 路径 | 请求 | 响应 `data` | 说明 |
|
|
|
|
|
+|------|------|-------------|------|
|
|
|
|
|
+| `POST /api/badges/list` | 无 | `Badge[]` | 启用勋章定义(勋章墙底图) |
|
|
|
|
|
+| `POST /api/badges/member/list` | `{memberId}` | `[{memberBadge, badge}]` | 成员已得勋章(收藏优先、获得时间倒序) |
|
|
|
|
|
+| `POST /api/badges/statistics/member` | `{memberId}` | 统计(已得数/分类等) | 勋章统计 |
|
|
|
|
|
+| `POST /api/badges/ranking/family` | 无(`familyId` 取自会话) | 家庭排行 | 成员勋章排行 |
|
|
|
|
|
+| `POST /api/badges/detail` | `{id}` | `Badge` | 勋章详情(达成条件) |
|
|
|
|
|
+| `POST /api/badges/favorite` | `{memberId, badgeId}` | `Boolean` | 收藏/取消收藏 |
|
|
|
|
|
+| `POST /api/badges/grant` | `{memberId?, badgeId}` | `String` | 授予勋章(管理端/家长);**不写通知** |
|
|
|
|
|
+> **缺口**:`BadgeService.grantBadge` 只写 `member_badges`,无 `user_notification`、无推送 → C-10「解锁提醒」未实现(G-01);
|
|
|
|
|
+> 无"任务/打卡自动聚合授予"逻辑(场景要求"勋章来自任务/打卡聚合")。判重已满足(重复授予直接 return)。
|
|
|
|
|
+### 4.61.5 报告与成长档案(SC-C-06 / C-07 / C-11 / C-20)
|
|
|
|
|
+| 路径 | 请求 | 响应 `data` | 说明 |
|
|
|
|
|
+|------|------|-------------|------|
|
|
|
|
|
+| `POST /api/health/report/list` | `{memberId?, reportType?, page, size}` | `Page` | 健康报告列表(详见 4.59.2) |
|
|
|
|
|
+| `POST /api/health/report/latest` | `{memberId?, reportType?}` | 最新报告 | 最新报告 |
|
|
|
|
|
+| `POST /api/health/report/detail` | `{id}` | 报告详情 | 详情(含 `member-permission` 校验) |
|
|
|
|
|
+| `POST /api/dan-report/list` | `{memberId?, page, size}` | `Page` | DAN 测评报告列表(详见 4.59.5.1) |
|
|
|
|
|
+| `POST /api/dan-report/{id}` | 路径参数 | 报告详情 | 详情(`canViewMemberReports` 校验) |
|
|
|
|
|
+| `POST /api/dan-report/compare` | `{memberId, id1, id2}` | 对比结果 | 两版对比 |
|
|
|
|
|
+| `POST /api/growth/record/list` | 无(取 `userId`) | `GrowthRecord[]` | 本人成长档案 |
|
|
|
|
|
+| `POST /api/growth/record/child/{memberId}` | 路径参数 | `GrowthRecord[]` | 指定成员档案(**⚠ 无归属校验**,G-11) |
|
|
|
|
|
+| `POST /api/growth/record/child-records` | body 为裸 `Long memberId` | `GrowthRecord[]` | 同上(带 `currentMemberId` 缺省逻辑) |
|
|
|
|
|
+| `POST /api/growth/record/{id}` | 路径参数 | `GrowthRecord` | 记录详情(**⚠ 无归属校验**,G-11) |
|
|
|
|
|
+| `POST /api/user/data-export` | 无 | `Map`(`userInfo`/`children`/`assessmentResults`/`healthReports`/`tasks`) | **仅导出登录用户本人**;无 `memberId` 入参 → 无"家长代导出孩子"(G-05) |
|
|
|
|
|
+### 4.61.6 商城 / 心愿 / 积分(SC-C-04 / C-22)
|
|
|
|
|
+| 路径 | 请求 | 响应 `data` | 说明 |
|
|
|
|
|
+|------|------|-------------|------|
|
|
|
|
|
+| `POST /api/wishes/create` | `CreateWishDTO{title, description?, category?, imageUrl?, linkUrl?, estimatedPrice?, memberId?, pointsRequired?}` | `Long`(心愿 id) | 提心愿 |
|
|
|
|
|
+| `POST /api/wishes/list` | `{memberId?, status?, page?, size?}` | `Wish[]` | 心愿列表 |
|
|
|
|
|
+| `POST /api/wishes/{id}` | 路径参数 | `Wish` | 心愿详情 |
|
|
|
|
|
+| `POST /api/wishes/{id}/cancel` | 路径参数 | `Boolean` | 撤销心愿 |
|
|
|
|
|
+| `POST /api/wishes/pending` | 无 | `Wish[]` | 家长待审批 |
|
|
|
|
|
+| `POST /api/wishes/{id}/price` | `{pointsRequired}` | `Boolean` | 家长定价 |
|
|
|
|
|
+| `POST /api/wishes/{id}/approve-exchange` | `{approved}` | `Boolean` | 审批兑换 |
|
|
|
|
|
+| `POST /api/wishes/{id}/reject` | `{reason}` | `Boolean` | 驳回(驳回后不可兑) |
|
|
|
|
|
+| `POST /api/wishes/{id}/fulfill` / `/{id}/confirm` / `/{id}/exchange` | 路径参数 | `Boolean` | 兑现/确认/兑换 |
|
|
|
|
|
+| `POST /api/product/list` | `{page, size, domain?, keyword?}` | `Page<Product>` | 商城浏览 |
|
|
|
|
|
+| `POST /api/product/detail` | `{id}` | `Product` | 商品详情 |
|
|
|
|
|
+| `POST /api/points/exchange/product/list` | `{category?, pageNum?, pageSize?}` | `Page<PointsExchangeProduct>` | 积分兑换商品列表 |
|
|
|
|
|
+| `POST /api/points/exchange/product/detail` | `{id}` | `PointsExchangeProduct` | 兑换商品详情 |
|
|
|
|
|
+| `POST /api/points/exchange/submit` | `{productId, memberId, quantity?}` | `PointsExchangeRecord` | 提交兑换(积分不足/重复由 Service 拦截) |
|
|
|
|
|
+| `POST /api/points/exchange/records` | 无(取 `userId`) | `PointsExchangeRecord[]` | 兑换记录 |
|
|
|
|
|
+| `POST /api/points/exchange/stats` | 无(取 `userId`) | `{todayCount}` | 兑换统计 |
|
|
|
|
|
+| `POST /api/points/balance` | `{memberId?}` | `{balance, ...}` | 积分余额 |
|
|
|
|
|
+| `POST /api/points/logs` | `{memberId, page?, size?}` | `Page<PointsLog>` | 积分流水 |
|
|
|
|
|
+### 4.61.7 消息 / 反馈 / 资料(SC-C-15 / C-16 / C-19 / C-23)
|
|
|
|
|
+| 路径 | 请求 | 响应 `data` | 说明 |
|
|
|
|
|
+|------|------|-------------|------|
|
|
|
|
|
+| `POST /api/notification/list` | 无(取 `userId`) | `UserNotification[]`(未读优先,`LIMIT 100`) | 站内通知 |
|
|
|
|
|
+| `POST /api/notification/read` | `{id?}` / `{ids?}` / 空(全部已读) | `Boolean` | 标记已读 |
|
|
|
|
|
+| `POST /api/guide/messages/my` | 无(取 `userId`) | `TeacherMessage[]` | 规划师消息 |
|
|
|
|
|
+| `POST /api/guide/messages/unread-count` | 无 | `Long` | 未读数 |
|
|
|
|
|
+| `POST /api/user/info` / `/api/auth/info` / `/api/family/user/info` | 无(取 `userId`) | **完整 `User`**(仅 `password` 置空) | 个人资料(**无受限投影**,G-02) |
|
|
|
|
|
+| `POST /api/user/update` / `/api/family/user/update` | `UpdateUserDTO`/`User` | `Boolean` | 修改资料 |
|
|
|
|
|
+| `POST /api/health/feedback/submit` | 报告反馈 DTO | — | 报告反馈(**仅报告维度**) |
|
|
|
|
|
+| `POST /api/activity/feedback/submit` | 活动评价 DTO | — | 活动评价(**仅活动维度**) |
|
|
|
|
|
+| `POST /api/feedback/today` / `/read` / `/recent` | 无/`{id}`/`{limit?}` | 每日反馈 | **家长→孩子**方向,与"孩子提意见"相反 |
|
|
|
|
|
+> **缺口**:无通用"意见反馈"端点/表/管理端受理(G-06)。
|
|
|
|
|
+### 4.61.8 饮食 / AI / 舌诊情绪 / 睡眠(SC-C-12 / C-13 / C-21 / C-26)
|
|
|
|
|
+| 路径 | 请求 | 响应 `data` | 说明 |
|
|
|
|
|
+|------|------|-------------|------|
|
|
|
|
|
+| `POST /api/diet/recommendation/today` | `{date}`(**必填**,空→`Result.error("date不能为空")`) | 今日食谱 | 饮食推荐 |
|
|
|
|
|
+| `POST /api/diet/recommendation/generate` | `{date, ...}` | 食谱 | 生成/重新生成 |
|
|
|
|
|
+| `POST /api/diet/recommendation/complete` | `{date, ...}` | `Boolean` | 完成标记 |
|
|
|
|
|
+| `POST /api/health/meal/daily` / `/weekly` / `/list` | `{memberId?, date?}` | 餐次数据 | 餐次记录 |
|
|
|
|
|
+| `POST /api/ai/chat/send` | `{query, conversationId?}` | `Map`(`answer`/`conversationId`/...) | AI 对话(会员门禁 `checkGate`) |
|
|
|
|
|
+| `POST /api/ai/chat/conversations` / `/chat/messages` | `{conversationId?}` | 会话/消息列表 | 多轮上下文 |
|
|
|
|
|
+| `POST /api/health/report/upload-only` | `multipart(file, memberId?, type=tongue)` | `{type:"tongue", ...}` | 舌诊拍照上传 + 预览(含 `aiGateway.detectTongue` 自动识别分支) |
|
|
|
|
|
+| `POST /api/health/report/parse-preview` | `{recordId?, memberId?, type=tongue}` | 舌诊指标预览 | 解析预览 |
|
|
|
|
|
+| `POST /api/health/report/confirm` | `{recordId, subjectId/memberId, indicators, type=tongue}` | 入库结果 | 舌诊确认 |
|
|
|
|
|
+| `POST /api/health/report/discard` | `{recordId, type=tongue}` | `Boolean` | 放弃草稿 |
|
|
|
|
|
+| `POST /api/mind/emotion/analyze` / `/analyze-url` | 图片/URL | 情绪识别结果 | 情绪自拍识别 |
|
|
|
|
|
+| `POST /api/mind/checkin/create` / `/list` / `/latest` / `/trend` | 身心打卡 DTO | 记录/列表/趋势 | 情绪打卡记录 |
|
|
|
|
|
+| `POST /api/health/sleep/list` | `{memberId?}`(缺省 `currentMemberId`) | `HealthSleepRecord[]` | 睡眠记录 |
|
|
|
|
|
+| `POST /api/health/sleep/create` | `HealthSleepRecord{memberId?, sleepTime:"HH:mm", wakeTime:"HH:mm", durationMinutes?, qualityScore?, remark?, taskId?}` | `HealthSleepRecord` | 睡眠打卡(`taskId` 透传自动完成/累计任务) |
|
|
|
|
|
+| `POST /api/config/public/value` | `{key}` | `String` | 配置读取;睡眠标签应为 `key=sleep.quality.tags` |
|
|
|
|
|
+> **缺口**:`sleep_record` **无 `tags` 列**,标签被前端拼进 `remark` 文本;`/api/health/sleep/tags`、`/api/admin/sleep/tags` 均未实现;key 命名 `sleep.quality.tags`(需求/用例)与 `sleep.config.tags`(sc-key-map)不一致;`sleep-checkin.vue` 仍硬编码 8 项、无「正常」(G-07)。
|
|
|
|
|
+> AI 对话无适龄过滤入参;舌诊 confirm 需家长会话代传 `memberId`。
|
|
|
|
|
+### 4.61.9 契约缺口汇总(详见 `docs/superpowers/specs/2026-11-07-child-zone-contract.md` § 5)
|
|
|
|
|
+| ID | 关联 SC | 一句话 |
|
|
|
|
|
+|----|---------|--------|
|
|
|
|
|
+| G-01 | C-10 | 勋章解锁无通知/推送(`grantBadge` 不写 `user_notification`) |
|
|
|
|
|
+| G-02 | C-16 | 个人资料无受限投影(三处 info 返完整 `User`) |
|
|
|
|
|
+| G-03 | C-17 | 无服务端 `logout`(JWT 无状态) |
|
|
|
|
|
+| G-04 | C-18 | 无设备绑定/异常设备二次验证 |
|
|
|
|
|
+| G-05 | C-20 | 无"家长代导出指定成员";`exportUserData` 只认 `userId` |
|
|
|
|
|
+| G-06 | C-23 | 无通用意见反馈端点/表/管理端 |
|
|
|
|
|
+| G-07 | C-26 | 睡眠标签无 `tags` 列/无专用端点/无管理端/前端硬编码 |
|
|
|
|
|
+| G-08 | C-01/C-17 | 前端 `/api/user/switch-*` 无映射(404);旧 `/api/family/user/switch-to-child` 已 410 |
|
|
|
|
|
+| G-09 | C-02/C-03/C-24 | 小游戏上报无幂等、分数无上限、`pointsEarned` 前端可控 |
|
|
|
|
|
+| G-10 | C-06/C-24 | `energy/overview`、`energy/logs` 未校验 `memberId` 归属(可跨家庭读) |
|
|
|
|
|
+| G-11 | C-11/C-20 | `growth/record/child/{memberId}`、`/record/{id}` 无归属校验 |
|
|
|
|
|
+| G-12 | C-02 | `/api/tasks/accept` 的 `@PathVariable id` 与路径不匹配 → 调用必失败 |
|
|
|
|
|
+> 统计:**26/26 有承载端点**;场景完整闭环 **19/26**;场景级缺口 **7**(C-10/C-16/C-17/C-18/C-20/C-23/C-26);跨切面缺陷 **5**(G-08 ~ G-12)。
|
|
|
|
|
+*文档更新:2026-11-07(EVD-9 孩子端 26 SC 契约核对:4.61.1 身份与视角切换;4.61.2 任务/打卡/方案进度;4.61.3 小游戏与五维能量;4.61.4 勋章;4.61.5 报告与成长档案;4.61.6 商城/心愿/积分;4.61.7 消息/反馈/资料;4.61.8 饮食/AI/舌诊情绪/睡眠;4.61.9 缺口汇总 G-01~G-12)*
|
|
|
|
|
+### 4.62 商品服务商域(SC-S-01/05/07/08/10/11,EVD-12R2 契约核对增补)
|
|
|
|
|
+> 归属:契约补建计划 P0「商品服务商域」· 核对 2026-11-07(EVD-12R2)
|
|
|
|
|
+> 核对方法:类级 `@RequestMapping` + 方法级 `@PostMapping` 实测定位(防假 RED)。SC-S-02/03/04/06 由 EVD-4 商城-会员覆盖;SC-S-09 由 EVD-7R 报告闭环覆盖。
|
|
|
|
|
+> 完整核验表见 `docs/superpowers/specs/2026-11-07-service-provider-contract.md`。
|
|
|
|
|
+#### 4.62.1 服务商入驻申请(`SupplySystemController /api/admin/supply-system`,SC-S-01 `supplier.apply`)
|
|
|
|
|
+> ⚠ 载体置换:开工包候选 `AdminSupplierController /api/admin/supplier`、`EcomSupplierController /api/admin/ecom-supplier` 均标注「【已废弃】请使用 /api/admin/supply-system/list」,活跃载体为 `SupplySystemController`。
|
|
|
|
|
+| 路径 | 说明 |
|
|
|
|
|
+|------|------|
|
|
|
|
|
+| `POST /api/admin/supply-system/list` | 服务商体系分页(keyword/status/page/size) |
|
|
|
|
|
+| `POST /api/admin/supply-system/create` | 服务商体系建档(入驻申请提交) |
|
|
|
|
|
+| `POST /api/admin/supply-system/update` | 服务商体系更新 |
|
|
|
|
|
+| `POST /api/admin/supply-system/detail` | 服务商体系详情 |
|
|
|
|
|
+| `POST /api/admin/supply-system/toggle-status` | 启停审核(入驻审核动作) |
|
|
|
|
|
+| `POST /api/admin/supply-system/list-all` | 全量体系(下拉选择) |
|
|
|
|
|
+| `POST /api/admin/supply-system/my-system` | 当前用户所属体系 |
|
|
|
|
|
+| `POST /api/admin/supply-system/my-teams` | 一人多团队(顶部切换器) |
|
|
|
|
|
+| `POST /api/admin/supply-system/member/list` | 体系成员列表 |
|
|
|
|
|
+| `POST /api/admin/supply-system/member/add` | 添加体系成员 |
|
|
|
|
|
+| `POST /api/admin/supply-system/member/remove` | 移除体系成员 |
|
|
|
|
|
+| `POST /api/admin/supply-system/member/change-role` | 成员角色变更 |
|
|
|
|
|
+> 边界:体系层级/团队治理(`SupplyManageController /api/admin/supply-manage`:list/detail/create/update/delete/add-role/remove-role/adjust-tier)由 EVD-11 SC-A-06 覆盖,不重复登记。
|
|
|
|
|
+#### 4.62.2 库存管理(`AdminInventoryController /api/admin/inventory` + `SupplierProductController /api/admin/supplier/product`,SC-S-05 `supplier.inventory.manage`)
|
|
|
|
|
+**AdminInventoryController `/api/admin/inventory`**
|
|
|
|
|
+| 路径 | 说明 |
|
|
|
|
|
+|------|------|
|
|
|
|
|
+| `POST /api/admin/inventory/inbound/create` | 入库单创建 |
|
|
|
|
|
+| `POST /api/admin/inventory/inbound/list` | 入库单列表 |
|
|
|
|
|
+| `POST /api/admin/inventory/inbound/detail` | 入库单详情 |
|
|
|
|
|
+| `POST /api/admin/inventory/inbound/confirm` | 入库确认 |
|
|
|
|
|
+| `POST /api/admin/inventory/inbound/cancel` | 入库取消 |
|
|
|
|
|
+| `POST /api/admin/inventory/outbound/create` | 出库单创建 |
|
|
|
|
|
+| `POST /api/admin/inventory/outbound/list` | 出库单列表 |
|
|
|
|
|
+| `POST /api/admin/inventory/transactions/list` | 库存流水列表 |
|
|
|
|
|
+| `POST /api/admin/inventory/counting/create` | 盘点单创建 |
|
|
|
|
|
+| `POST /api/admin/inventory/counting/confirm` | 盘点确认 |
|
|
|
|
|
+| `POST /api/admin/inventory/counting/list` | 盘点单列表 |
|
|
|
|
|
+| `POST /api/admin/inventory/alert/list` | 库存告警列表 |
|
|
|
|
|
+| `POST /api/admin/inventory/product/stock` | 商品库存查询 |
|
|
|
|
|
+| `POST /api/admin/inventory/combo/items` | 组合商品项 |
|
|
|
|
|
+| `POST /api/admin/inventory/combo/items/list` | 组合商品项列表 |
|
|
|
|
|
+**SupplierProductController `/api/admin/supplier/product`**
|
|
|
|
|
+| 路径 | 说明 |
|
|
|
|
|
+|------|------|
|
|
|
|
|
+| `POST /api/admin/supplier/product/list` | 服务商商品列表 |
|
|
|
|
|
+| `POST /api/admin/supplier/product/create` | 服务商商品创建 |
|
|
|
|
|
+| `POST /api/admin/supplier/product/update` | 服务商商品更新 |
|
|
|
|
|
+| `POST /api/admin/supplier/product/detail` | 服务商商品详情 |
|
|
|
|
|
+| `POST /api/admin/supplier/product/delete` | 服务商商品删除 |
|
|
|
|
|
+| `POST /api/admin/supplier/product/shelve` | 服务商商品上/下架 |
|
|
|
|
|
+#### 4.62.3 营销活动报名(`ActivityController /api/activity` + `AdminActivityController /api/admin/activity` + `ActivityOrderController /api/activity/order`,SC-S-07 `supplier.activity.signup`)
|
|
|
|
|
+**ActivityController `/api/activity`**
|
|
|
|
|
+| 路径 | 说明 |
|
|
|
|
|
+|------|------|
|
|
|
|
|
+| `POST /api/activity/list` | 活动列表 |
|
|
|
|
|
+| `POST /api/activity/detail` | 活动详情 |
|
|
|
|
|
+| `POST /api/activity/create` | 活动创建 |
|
|
|
|
|
+| `POST /api/activity/update` | 活动更新 |
|
|
|
|
|
+| `POST /api/activity/publish` | 活动发布 |
|
|
|
|
|
+| `POST /api/activity/end` | 活动结束 |
|
|
|
|
|
+| `POST /api/activity/submit-review` | 提交审核 |
|
|
|
|
|
+| `POST /api/activity/register` | 活动报名 |
|
|
|
|
|
+| `POST /api/activity/cancel-registration` | 取消报名 |
|
|
|
|
|
+| `POST /api/activity/my-registrations` | 我的报名列表 |
|
|
|
|
|
+| `POST /api/activity/registration-roster` | 报名名单/核销 |
|
|
|
|
|
+| `POST /api/activity/checkin` | 活动签到 |
|
|
|
|
|
+| `POST /api/activity/checkin-review` | 签到审核 |
|
|
|
|
|
+**AdminActivityController `/api/admin/activity`**
|
|
|
|
|
+| 路径 | 说明 |
|
|
|
|
|
+|------|------|
|
|
|
|
|
+| `POST /api/admin/activity/list` | 活动管理列表 |
|
|
|
|
|
+| `POST /api/admin/activity/review` | 审核 |
|
|
|
|
|
+| `POST /api/admin/activity/detail` | 详情 |
|
|
|
|
|
+| `POST /api/admin/activity/submit-review` | 提交审核 |
|
|
|
|
|
+| `POST /api/admin/activity/audit` | 审核动作 |
|
|
|
|
|
+| `POST /api/admin/activity/backfill-tags` | 标签回填 |
|
|
|
|
|
+| `POST /api/admin/activity/withdraw` | 撤回 |
|
|
|
|
|
+| `POST /api/admin/activity/re-draft` | 退回草稿 |
|
|
|
|
|
+**ActivityOrderController `/api/activity/order`**
|
|
|
|
|
+| 路径 | 说明 |
|
|
|
|
|
+|------|------|
|
|
|
|
|
+| `POST /api/activity/order/create` | 报名订单创建 |
|
|
|
|
|
+| `POST /api/activity/order/pay` | 报名订单支付 |
|
|
|
|
|
+| `POST /api/activity/order/handlePaymentSuccess` | 支付成功回调处理 |
|
|
|
|
|
+| `POST /api/activity/order/notify` | 支付通知 |
|
|
|
|
|
+| `POST /api/activity/order/status` | 订单状态查询 |
|
|
|
|
|
+#### 4.62.4 对账/结算(`AdminSettlementController /api/admin/dan-settlement` + `SupplySettlementController /api/admin/supply-settlement`,SC-S-08 `supplier.settlement.reconcile`)
|
|
|
|
|
+**AdminSettlementController `/api/admin/dan-settlement`**
|
|
|
|
|
+| 路径 | 说明 |
|
|
|
|
|
+|------|------|
|
|
|
|
|
+| `POST /api/admin/dan-settlement/list` | DAN 结算列表 |
|
|
|
|
|
+| `POST /api/admin/dan-settlement/detail/{settlementId}` | DAN 结算详情 |
|
|
|
|
|
+| `POST /api/admin/dan-settlement/confirm/{settlementId}` | DAN 结算确认 |
|
|
|
|
|
+| `POST /api/admin/dan-settlement/stats` | DAN 结算统计 |
|
|
|
|
|
+**SupplySettlementController `/api/admin/supply-settlement`**
|
|
|
|
|
+| 路径 | 说明 |
|
|
|
|
|
+|------|------|
|
|
|
|
|
+| `POST /api/admin/supply-settlement/list` | 供货结算列表 |
|
|
|
|
|
+| `POST /api/admin/supply-settlement/detail` | 供货结算详情 |
|
|
|
|
|
+| `POST /api/admin/supply-settlement/detail-items` | 供货结算明细 |
|
|
|
|
|
+| `POST /api/admin/supply-settlement/create` | 供货结算创建 |
|
|
|
|
|
+| `POST /api/admin/supply-settlement/confirm` | 供货结算确认 |
|
|
|
|
|
+#### 4.62.5 营养/食谱数据供给(`NutritionProductController /api/nutrition/product` + `BeijingNutritionController /api/nutrition/beijing` + `UserNutritionProfileController /api/nutrition/profile`,SC-S-10 `supplier.nutrition.supply`)
|
|
|
|
|
+**NutritionProductController `/api/nutrition/product`**
|
|
|
|
|
+| 路径 | 说明 |
|
|
|
|
|
+|------|------|
|
|
|
|
|
+| `POST /api/nutrition/product/category/list` | 营养品分类列表 |
|
|
|
|
|
+| `POST /api/nutrition/product/brand/list` | 营养品品牌列表 |
|
|
|
|
|
+| `POST /api/nutrition/product/search` | 营养品搜索 |
|
|
|
|
|
+| `POST /api/nutrition/product/detail` | 营养品详情 |
|
|
|
|
|
+| `POST /api/nutrition/product/recommend` | 营养品推荐 |
|
|
|
|
|
+| `POST /api/nutrition/product/price-compare` | 营养品价格对比 |
|
|
|
|
|
+| `POST /api/nutrition/product/from-product` | 从商品转换 |
|
|
|
|
|
+**BeijingNutritionController `/api/nutrition/beijing`**
|
|
|
|
|
+| 路径 | 说明 |
|
|
|
|
|
+|------|------|
|
|
|
|
|
+| `POST /api/nutrition/beijing/bacteria/save` | 北京食谱菌群保存 |
|
|
|
|
|
+| `POST /api/nutrition/beijing/recommend` | 北京食谱推荐 |
|
|
|
|
|
+| `POST /api/nutrition/beijing/recommend/custom` | 北京食谱自定义推荐 |
|
|
|
|
|
+| `POST /api/nutrition/beijing/kb/query` | 食谱知识库查询 |
|
|
|
|
|
+| `POST /api/nutrition/beijing/kb/list` | 食谱知识库列表 |
|
|
|
|
|
+| `POST /api/nutrition/beijing/kb/info` | 食谱知识库详情 |
|
|
|
|
|
+| `POST /api/nutrition/beijing/analysis` | 食谱分析 |
|
|
|
|
|
+**UserNutritionProfileController `/api/nutrition/profile`**
|
|
|
|
|
+| 路径 | 说明 |
|
|
|
|
|
+|------|------|
|
|
|
|
|
+| `POST /api/nutrition/profile/get` | 营养画像查询 |
|
|
|
|
|
+| `POST /api/nutrition/profile/save` | 营养画像保存 |
|
|
|
|
|
+#### 4.62.6 数据导出合规(`UserController /api/user` + `ReportMemberPermissionController /api/health/report/member-permission`,SC-S-11 `supplier.export.compliance`)
|
|
|
|
|
+**UserController `/api/user`(用户侧自助,个保法数据可携带权)**
|
|
|
|
|
+| 路径 | 说明 |
|
|
|
|
|
+|------|------|
|
|
|
|
|
+| `POST /api/user/data-export` | 导出用户数据(`AccountCleanupService.exportUserData`) |
|
|
|
|
|
+| `POST /api/user/deactivate` | 注销账号(数据匿名化,`AccountCleanupService.deactivateAccount`) |
|
|
|
|
|
+**ReportMemberPermissionController `/api/health/report/member-permission`(授权使用约束)**
|
|
|
|
|
+| 路径 | 说明 |
|
|
|
|
|
+|------|------|
|
|
|
|
|
+| `POST /api/health/report/member-permission/list` | 报告授权列表 |
|
|
|
|
|
+| `POST /api/health/report/member-permission/members/{memberId}` | 指定成员的授权详情 |
|
|
|
|
|
+| `POST /api/health/report/member-permission/grant` | 授予报告查看权 |
|
|
|
|
|
+| `POST /api/health/report/member-permission/revoke` | 撤销报告查看权 |
|
|
|
|
|
+| `POST /api/health/report/member-permission/visible-members` | 可见成员列表 |
|
|
|
|
|
+> 边界:EVD-11 SC-A-19 的**运营工单处理**(账号注销/数据导出工单)无端点载体,属平台运营域需产品侧确认;本 SC 为用户侧自助能力。
|
|
|
|
|
+*文档更新:2026-11-07(EVD-12R2 商品服务商域 6 SC 契约核对增补「商品服务商域」段落 4.62:服务商入驻 / 库存管理 / 活动报名 / 对账结算 / 营养食谱数据供给 / 数据导出合规 + 边界归位说明。完整核验表见 `docs/superpowers/specs/2026-11-07-service-provider-contract.md`)*
|