# 用户使用流程图 — 家庭管理 > **端口说明**: 📱 小程序 | 🖥 管理后台 | 📋 规划师端 | ⚙️ 系统自动 > > **分层说明**: 🏠 页面 → 🔗 API → ⚙️ Service → 📦 数据实体 ```mermaid flowchart TD %% ============ 颜色定义 ============ classDef page fill:#e3f2fd,stroke:#1565c0,stroke-width:2px classDef api fill:#fff3e0,stroke:#f57c00,stroke-width:1px classDef service fill:#e8f5e9,stroke:#388e3c,stroke-width:1px classDef data fill:#f3e5f5,stroke:#7b1fa2,stroke-width:1px classDef external fill:#fce4ec,stroke:#d32f2f,stroke-width:1px,stroke-dasharray:3 2 classDef actor fill:#e1f5fe,stroke:#0288d1,stroke-width:2px,stroke-dasharray:5 3 %% ============ 角色 ============ A0(("👤 家长")):::actor B0(("👶 孩子")):::actor C0(("📋 规划师")):::actor %% ================================================================ %% 阶段一:家庭创建与加入 %% ================================================================ subgraph 阶段一[阶段一:家庭创建与加入] P1["🏠 小程序:家庭首页"]:::page P1 -->|"选择操作"| P1_choice{"是否有家庭?"}:::page P1_choice -->|"无,创建新家庭"| P1a["🏠 创建家庭页"]:::page P1a -->|"家庭名称"| A1["🔗 POST /api/family/user/create-family"]:::api A1 -->|"用户ID, 家庭名称"| S1["⚙️ UserService.createFamilyForUser()"]:::service S1 -->|"写入一条家庭记录,关联用户"| D1["📦 families + users 表"]:::data P1_choice -->|"有,加入其他家庭"| P1b["🏠 输入邀请码页"]:::page P1b -->|"邀请码"| A2["🔗 POST /api/family/user/join-family"]:::api A2 -->|"用户ID, 邀请码"| S2["⚙️ UserService.joinFamily()"]:::service S2 -->|"更新用户家庭ID"| D2["📦 users 表(更新familyId)"]:::data D1 -->|"家庭创建成功"| P2["🏠 家庭管理页"]:::page P2 -->|"生成邀请二维码"| A3["🔗 POST /api/family/invite/qrcode"]:::api A3 -->|"用户ID"| S3["⚙️ QrCodeService.generateQrCodeBase64()"]:::service S3 -->|"family.inviteCode"| D3["📦 families 表(读取邀请码)"]:::data P2 -->|"生成邀请令牌"| A4["🔗 POST /api/family/invite/generate"]:::api A4 -->|"用户ID, 家庭ID"| S4["⚙️ FamilyInvitationService.generateInvitation()"]:::service S4 -->|"写入邀请令牌记录"| D4["📦 family_invitations 表"]:::data P2 -->|"校验邀请令牌"| A5["🔗 POST /api/family/invite/validate"]:::api A5 -->|"token"| S5["⚙️ FamilyInvitationService.validateInvitation()"]:::service S5 -->|"令牌有效期+家庭信息"| D4 P2 -->|"通过邀请码接受邀请"| A6["🔗 POST /api/family/invite/accept-by-code"]:::api A6 -->|"用户ID, 邀请码"| S6["⚙️ FamilyInviteController.acceptByCode()"]:::service S6 -->|"查询家庭+更新用户familyId"| D2 P2 -->|"接受邀请令牌"| A7["🔗 POST /api/family/invite/accept"]:::api A7 -->|"用户ID, token, 家庭角色, 是否合并"| S7["⚙️ FamilyInvitationService.acceptInvitation()"]:::service S7 -->|"加入家庭/合并家庭"| D2 P2 -->|"查询家庭状态"| A8["🔗 POST /api/family/invite/check-family"]:::api A8 -->|"用户ID"| S8["⚙️ FamilyInvitationService.checkUserFamilyStatus()"]:::service S8 -->|"用户家庭信息"| D1 end %% ================================================================ %% 阶段二:家庭成员管理 %% ================================================================ subgraph 阶段二[阶段二:家庭成员管理] D1 -->|"家庭ID"| P3["🏠 家庭成员管理页"]:::page P3 -->|"添加成员"| A9["🔗 POST /api/family/member/add"]:::api A9 -->|"用户ID, 昵称, 电话, 头像, 性别, 生日"| S9["⚙️ FamilyMemberService.addMember()"]:::service S9 -->|"写入一条家庭成员记录"| D5["📦 family_members 表"]:::data P3 -->|"成员列表"| A10["🔗 POST /api/family/member/list"]:::api A10 -->|"用户ID"| S10["⚙️ FamilyMemberService.listMembers()"]:::service S10 -->|"该家庭所有成员"| D5 P3 -->|"更新成员信息"| A11["🔗 POST /api/family/member/update"]:::api A11 -->|"用户ID, memberId, 昵称/电话/头像"| S11["⚙️ FamilyMemberService.updateMember()"]:::service S11 -->|"更新成员记录"| D5 P3 -->|"切换成员视图"| A12["🔗 POST /api/family/member/switch"]:::api A12 -->|"用户ID, memberId"| S12["⚙️ FamilyMemberService.switchToMember()"]:::service S12 -->|"切换上下文"| D5 P3 -->|"检查可编辑性"| A13["🔗 POST /api/family/member/editable"]:::api A13 -->|"用户ID, memberId"| S13["⚙️ FamilyMemberService.isEditable()"]:::service S13 -->|"布尔值"| D5 P3 -->|"踢出成员"| A14["🔗 POST /api/family/member/kick"]:::api A14 -->|"用户ID, memberId"| S14["⚙️ FamilyMemberService.kickMember()"]:::service S14 -->|"删除成员记录"| D5 P3 -->|"变更日志"| A15["🔗 POST /api/family/member/logs"]:::api A15 -->|"用户ID, memberId"| S15["⚙️ FamilyMemberService.getMemberLogs()"]:::service S15 -->|"操作日志列表"| D6["📦 family_member_logs 表"]:::data P3 -->|"可见成员列表"| A16["🔗 POST /api/family/user/members/visible"]:::api A16 -->|"用户ID"| S16["⚙️ UserService.getVisibleMembers()"]:::service S16 -->|"对当前用户可见的成员"| D5 P3 -->|"更新可见性"| A17["🔗 POST /api/family/user/members/update-visibility"]:::api A17 -->|"用户ID, memberId, memberType, showToFamily"| S17["⚙️ UserService.updateVisibility()"]:::service S17 -->|"更新成员可见性标记"| D5 end %% ================================================================ %% 阶段三:家庭设置 %% ================================================================ subgraph 阶段三[阶段三:家庭设置] D5 -->|"成员列表"| P4["🏠 家庭设置页"]:::page P4 -->|"创建孩子账号"| A18["🔗 POST /api/family/user/children"]:::api A18 -->|"用户ID, 孩子昵称/性别/生日"| S18["⚙️ UserService.createFamilyMember()"]:::service S18 -->|"写入孩子记录"| D5 P4 -->|"孩子列表"| A19["🔗 POST /api/family/user/children/list"]:::api A19 -->|"用户ID"| S19["⚙️ UserService.getFamilyMemberren()"]:::service S19 -->|"孩子信息列表"| D5 P4 -->|"更新孩子信息"| A20["🔗 POST /api/family/user/children/update"]:::api A20 -->|"用户ID, childId, 昵称/性别/生日"| S20["⚙️ UserService.updateFamilyMember()"]:::service S20 -->|"更新孩子记录"| D5 P4 -->|"家庭成员列表"| A21["🔗 POST /api/family/user/family-members"]:::api A21 -->|"用户ID"| S21["⚙️ FamilyUserController.getFamilyMembers()"]:::service S21 -->|"家长列表+孩子列表"| D1 P4 -->|"踢出用户(管理员)"| A22["🔗 POST /api/family/user/kick"]:::api A22 -->|"用户ID, targetUserId"| S22["⚙️ FamilyUserController.kickMember()"]:::service S22 -->|"清空目标用户familyId"| D2 P4 -->|"转让管理员"| A23["🔗 POST /api/family/invite/transfer-admin"]:::api A23 -->|"用户ID, newAdminId"| S23["⚙️ FamilyInvitationService.transferAdmin()"]:::service S23 -->|"更新家庭创建者ID"| D1 P4 -->|"吊销邀请"| A24["🔗 POST /api/family/invite/revoke"]:::api A24 -->|"用户ID, invitationId"| S24["⚙️ FamilyInvitationService.revokeInvitation()"]:::service S24 -->|"更新邀请令牌状态"| D4 P4 -->|"用户信息"| A25["🔗 POST /api/family/user/info"]:::api A25 -->|"用户ID"| S25["⚙️ UserService.getUserInfo()"]:::service S25 -->|"用户完整信息"| D2 P4 -->|"更新用户信息"| A26["🔗 POST /api/family/user/update"]:::api A26 -->|"用户ID, 昵称/头像"| S26["⚙️ UserService.updateUserInfo()"]:::service S26 -->|"更新用户记录"| D2 end %% ================================================================ %% 阶段四:规划师绑定 %% ================================================================ subgraph 阶段四[阶段四:规划师绑定] D1 -->|"家庭信息"| P5["🏠 规划师绑定管理页"]:::page P5 -->|"待审批列表"| A27["🔗 POST /api/family/teacher-bindings/pending"]:::api A27 -->|"用户ID"| S27["⚙️ TeacherFamilyBindingRequestService.getPendingByFamily()"]:::service S27 -->|"待审批绑定申请列表"| D7["📦 teacher_family_binding_requests 表"]:::data P5 -->|"审批通过"| A28["🔗 POST /api/family/teacher-bindings/approve"]:::api A28 -->|"用户ID, requestId"| S28["⚙️ TeacherFamilyBindingRequestService.approve()"]:::service S28 -->|"更新申请状态+建立绑定"| D7 P5 -->|"审批拒绝"| A29["🔗 POST /api/family/teacher-bindings/reject"]:::api A29 -->|"用户ID, requestId, reason"| S29["⚙️ TeacherFamilyBindingRequestService.reject()"]:::service S29 -->|"更新申请状态为拒绝"| D7 P5 -->|"已绑定规划师列表"| A30["🔗 POST /api/bind/guides"]:::api A30 -->|"用户ID"| S30["⚙️ GuideFamilyService.getGuidesByFamily()"]:::service S30 -->|"该家庭绑定的规划师"| D8["📦 guide_families 表"]:::data P5 -->|"解除绑定"| A31["🔗 POST /api/bind/unbind"]:::api A31 -->|"用户ID, id"| S31["⚙️ GuideFamilyService.unbindAndGet()"]:::service S31 -->|"更新绑定状态+发送通知"| D8 D7 -->|"绑定申请"| P6["📋 规划师端:绑定管理"]:::page P6 -->|"我的请求"| A32["🔗 POST /api/family/teacher-bindings/my-requests"]:::api A32 -->|"用户ID"| S32["⚙️ TeacherFamilyBindingRequestService.getByTeacher()"]:::service S32 -->|"该规划师的所有申请"| D7 P6 -->|"撤销申请"| A33["🔗 POST /api/family/teacher-bindings/cancel"]:::api A33 -->|"用户ID, requestId"| S33["⚙️ TeacherFamilyBindingRequestService.cancel()"]:::service S33 -->|"更新申请状态为取消"| D7 P6 -->|"申请绑定家庭"| A34["🔗 POST /api/family/guide-bind"]:::api A34 -->|"规划师ID, 邀请码, 留言"| S34["⚙️ TeacherFamilyBindingRequestService.createRequest()"]:::service S34 -->|"创建绑定申请记录"| D7 P6 -->|"生成绑定邀请"| A35["🔗 POST /api/guide/bind/invite"]:::api A35 -->|"规划师ID"| S35["⚙️ BindInviteService.generateInvite()"]:::service S35 -->|"写入绑定邀请记录"| D9["📦 bind_invites 表"]:::data P5 -->|"确认绑定邀请"| A36["🔗 POST /api/bind/accept"]:::api A36 -->|"用户ID, guideId, serviceType, servicePrice"| S36["⚙️ GuideFamilyService.confirmBind()"]:::service S36 -->|"写入guide_families绑定记录"| D8 end %% ================================================================ %% 阶段五:关系问卷与质量分析 %% ================================================================ subgraph 阶段五[阶段五:关系问卷与质量分析] D5 -->|"成员列表"| P7["🏠 关系问卷页"]:::page P7 -->|"AI生成问卷"| A37["🔗 POST /api/family/questionnaire/generate"]:::api A37 -->|"目标成员ID, 关系类型"| S37["⚙️ RelationshipQuestionnaireService.generateQuestionnaire()"]:::service S37 -->|"AI生成问卷内容"| D10["📦 questionnaire_snapshots 表"]:::data P7 -->|"提交问卷答案"| A38["🔗 POST /api/family/questionnaire/submit"]:::api A38 -->|"问卷快照ID, 答案列表"| S38["⚙️ RelationshipQuestionnaireService.submitQuestionnaire()"]:::service S38 -->|"写入问卷响应"| D11["📦 relationship_questionnaire_responses 表"]:::data P7 -->|"问卷历史"| A39["🔗 POST /api/family/questionnaire/history/{memberId}"]:::api A39 -->|"用户ID, memberId"| S39["⚙️ RelationshipQuestionnaireService.getHistory()"]:::service S39 -->|"该成员问卷历史列表"| D11 P7 -->|"问卷快照"| A40["🔗 POST /api/family/questionnaire/snapshot/{memberId}"]:::api A40 -->|"用户ID, memberId"| S40["⚙️ RelationshipQuestionnaireService.getSnapshot()"]:::service S40 -->|"最新问卷快照"| D10 D10 -->|"问卷结果"| P8["🏠 关系质量页"]:::page P8 -->|"计算评分"| A41["🔗 POST /api/family/relationship/calculate"]:::api A41 -->|"memberId"| S41["⚙️ RelationshipQualityService.calculateScore()"]:::service S41 -->|"写入评分结果"| D12["📦 relationship_scores 表"]:::data P8 -->|"评分列表"| A42["🔗 POST /api/family/relationship/scores"]:::api A42 -->|"用户ID, familyId"| S42["⚙️ RelationshipQualityService.getScores()"]:::service S42 -->|"所有成员评分"| D12 P8 -->|"健康预警"| A43["🔗 POST /api/family/relationship/health-alerts"]:::api A43 -->|"用户ID, familyId"| S43["⚙️ RelationshipQualityService.getHealthAlerts()"]:::service S43 -->|"预警列表"| D12 P8 -->|"里程碑"| A44["🔗 POST /api/family/relationship/milestones"]:::api A44 -->|"用户ID, familyId, daysAhead"| S44["⚙️ RelationshipQualityService.getMilestones()"]:::service S44 -->|"即将到来的里程碑"| D12 end %% ================================================================ %% 阶段六:互动记录 %% ================================================================ subgraph 阶段六[阶段六:互动记录] D5 -->|"成员列表"| P9["🏠 互动记录页"]:::page P9 -->|"互动类型"| A45["🔗 POST /api/family/interaction/types"]:::api A45 -->|""| S45["⚙️ InteractionLogService.getInteractionTypes()"]:::service S45 -->|"预定义的互动类型"| D13["📦 内存/配置类型数据"]:::data P9 -->|"添加互动"| A46["🔗 POST /api/family/interaction/add"]:::api A46 -->|"fromMemberId, toMemberId, type, content"| S46["⚙️ InteractionLogService.addInteraction()"]:::service S46 -->|"写入互动记录"| D14["📦 interaction_logs 表"]:::data P9 -->|"互动列表"| A47["🔗 POST /api/family/interaction/list"]:::api A47 -->|"familyId, fromMemberId, toMemberId, 分页"| S47["⚙️ InteractionLogService.listInteractions()"]:::service S47 -->|"分页互动记录"| D14 end %% ================================================================ %% 角色关联 %% ================================================================ A0 -.- P1 A0 -.- P2 A0 -.- P3 A0 -.- P4 A0 -.- P5 A0 -.- P7 A0 -.- P8 A0 -.- P9 B0 -.- P3 C0 -.- P6 ``` ## 端点明细 ### 家庭创建与加入 | 端点 | 说明 | 端口 | 请求数据 | 响应数据 | |------|------|------|---------|---------| | `POST /api/family/user/create-family` | 创建新家庭 | 📱小程序 | `{name: "我的家庭"}` | `{familyId}` | | `POST /api/family/user/join-family` | 通过邀请码加入家庭 | 📱小程序 | `{inviteCode}` | `{success}` | | `POST /api/family/invite/qrcode` | 生成家庭邀请二维码 | 📱小程序 | — (从token取userId) | `{inviteCode, familyName, qrCodeBase64, familyId}` | | `POST /api/family/invite/generate` | 生成家庭邀请令牌+小程序码 | 📱小程序 | — | `{token, qrCodeBase64, familyName, familyId}` | | `POST /api/family/invite/validate` | 校验邀请令牌有效性 | 📱小程序 | `{token}` | `{valid, familyId, familyName, ...}` | | `POST /api/family/invite/accept-by-code` | 通过邀请码加入家庭 | 📱小程序 | `{inviteCode}` | `"加入家庭成功"` | | `POST /api/family/invite/accept` | 接受邀请令牌 | 📱小程序 | `{token, familyRole, mergeFamily}` | `"加入家庭成功"` | | `POST /api/family/invite/check-family` | 查询用户家庭状态 | 📱小程序 | — | `{hasFamily, familyId, familyName, ...}` | ### 家庭成员管理 | 端点 | 说明 | 端口 | 请求数据 | 响应数据 | |------|------|------|---------|---------| | `POST /api/family/member/add` | 添加家庭成员 | 📱小程序 | `{nickname, phone, avatar, gender, birthday}` | `FamilyMemberVO` | | `POST /api/family/member/list` | 获取成员列表 | 📱小程序 | — | `List` | | `POST /api/family/member/switch` | 切换到成员视图 | 📱小程序 | `{memberId}` | `SwitchMemberVO` | | `POST /api/family/member/kick` | 踢出成员 | 📱小程序 | `{memberId}` | `"踢出成功"` | | `POST /api/family/member/update` | 更新成员信息 | 📱小程序 | `{memberId, nickname, phone, avatar, gender, birthday}` | `FamilyMemberVO` | | `POST /api/family/member/editable` | 检查成员是否可编辑 | 📱小程序 | `{memberId}` | `boolean` | | `POST /api/family/member/logs` | 成员变更日志 | 📱小程序 | `{memberId}` | `List` | | `POST /api/family/user/members/visible` | 可见成员列表 | 📱小程序 | — | `List` | | `POST /api/family/user/members/update-visibility` | 更新成员可见性 | 📱小程序 | `{memberId, memberType, showToFamily}` | `boolean` | ### 家庭设置 | 端点 | 说明 | 端口 | 请求数据 | 响应数据 | |------|------|------|---------|---------| | `POST /api/family/user/info` | 获取用户信息 | 📱小程序 | — | `User对象` | | `POST /api/family/user/update` | 更新用户信息 | 📱小程序 | `{nickname, avatar, ...}` | `boolean` | | `POST /api/family/user/children` | 创建孩子账号 | 📱小程序 | `{nickname, gender, birthday, ...}` | `FamilyMemberInfoDTO` | | `POST /api/family/user/children/list` | 孩子列表 | 📱小程序 | — | `List` | | `POST /api/family/user/children/update` | 更新孩子信息 | 📱小程序 | `{childId, nickname, gender, birthday, ...}` | `boolean` | | `POST /api/family/user/family-members` | 家庭成员完整列表(含家长) | 📱小程序 | — | `{familyId, familyName, parents, children}` | | `POST /api/family/user/kick` | 管理员踢出用户 | 📱小程序 | `{targetUserId}` | `boolean` | | `POST /api/family/invite/transfer-admin` | 转让家庭管理员 | 📱小程序 | `{newAdminId}` | `"转让成功"` | | `POST /api/family/invite/revoke` | 吊销邀请链接 | 📱小程序 | `{invitationId}` | `"邀请已吊销"` | | `POST /api/family/user/switch-role` | 切换用户角色 | 📱小程序 | `{role}` | `新token` | | `POST /api/family/user/switch-back-to-parent` | 切换回家长视图 | 📱小程序 | — | `boolean` | | `POST /api/family/user/switch-back-verify` | 密码校验后切换回家长 | 📱小程序 | `{password}` | `boolean` | ### 规划师绑定 | 端点 | 说明 | 端口 | 请求数据 | 响应数据 | |------|------|------|---------|---------| | `POST /api/family/teacher-bindings/pending` | 待审批绑定列表 | 📱小程序 | — | `List` | | `POST /api/family/teacher-bindings/approve` | 审批通过 | 📱小程序 | `{requestId}` | `"审批通过"` | | `POST /api/family/teacher-bindings/reject` | 审批拒绝 | 📱小程序 | `{requestId, reason}` | `"已拒绝"` | | `POST /api/family/teacher-bindings/my-requests` | 规划师我的请求 | 📋规划师端 | — | `List` | | `POST /api/family/teacher-bindings/cancel` | 撤销申请 | 📋规划师端 | `{requestId}` | `"已撤销"` | | `POST /api/family/guide-bind` | 规划师申请绑定家庭 | 📋规划师端 | `{inviteCode, message}` | `"申请已提交"` | | `POST /api/guide/bind/invite` | 规划师生成绑定邀请 | 📋规划师端 | — | `{token, ...}` | | `POST /api/guide/bind/validate` | 校验绑定邀请令牌 | 📋规划师端 | `{token}` | `{valid, guideInfo, ...}` | | `POST /api/bind/accept` | 家长确认绑定规划师 | 📱小程序 | `{guideId, serviceType, servicePrice}` | `boolean` | | `POST /api/bind/guides` | 已绑定规划师列表 | 📱小程序 | — | `List<{id, guideId, serviceType, ...}>` | | `POST /api/bind/unbind` | 解除绑定规划师 | 📱小程序 | `{id}` | `boolean` | ### 关系问卷与质量分析 | 端点 | 说明 | 端口 | 请求数据 | 响应数据 | |------|------|------|---------|---------| | `POST /api/family/questionnaire/generate` | AI生成关系问卷 | 📱小程序 | `{targetMemberId, relationshipType}` | `QuestionnaireSnapshotVO` | | `POST /api/family/questionnaire/submit` | 提交问卷答案 | 📱小程序 | `{snapshotId, answers[]}` | `RelationshipQuestionnaireResponse` | | `POST /api/family/questionnaire/history/{memberId}` | 问卷历史记录 | 📱小程序 | path: `memberId` | `List` | | `POST /api/family/questionnaire/snapshot/{memberId}` | 最新问卷快照 | 📱小程序 | path: `memberId` | `QuestionnaireSnapshotVO` | | `POST /api/family/relationship/calculate` | 计算并保存评分 | ⚙️系统自动 | `{memberId}` | `RelationshipScoreVO` | | `POST /api/family/relationship/scores` | 关系质量评分列表 | 📱小程序 | `{familyId}` | `List` | | `POST /api/family/relationship/health-alerts` | 健康预警列表 | 📱小程序 | `{familyId}` | `List` | | `POST /api/family/relationship/milestones` | 即将到来的里程碑 | 📱小程序 | `{familyId, daysAhead}` | `List` | ### 互动记录 | 端点 | 说明 | 端口 | 请求数据 | 响应数据 | |------|------|------|---------|---------| | `POST /api/family/interaction/types` | 互动类型列表 | 📱小程序 | — | `Map<类型代码, 类型名称>` | | `POST /api/family/interaction/add` | 添加互动记录 | 📱小程序 | `{fromMemberId, toMemberId, type, content}` | `InteractionLogVO` | | `POST /api/family/interaction/list` | 互动记录分页列表 | 📱小程序 | `{familyId, fromMemberId, toMemberId, page, size}` | `Page` | ## 完整性分析 | # | 维度 | 评估 | 说明 | |---|------|------|------| | 1 | **流程完整性** | ✅ 完整 | 覆盖家庭创建/加入、成员管理、家庭设置、规划师绑定、关系问卷与质量分析、互动记录6个阶段,路径完整 | | 2 | **异常路径** | ⚠️ 部分覆盖 | 邀请码无效、令牌过期、非管理员踢出等错误在Service层处理;家庭合并冲突已在图中体现 | | 3 | **端点覆盖** | ✅ 完整 | 47个端点全部映射到流程图中,与代码实际暴露的控制器一致 | | 4 | **角色覆盖** | ✅ 完整 | 家长(parent)管理家庭全流程、规划师(teacher)绑定申请、孩子(child)可见性管理均已覆盖;管理员(admin)在管理后台管理家庭,不在本图范围 | | 5 | **数据实体** | ✅ 完整 | families、users、family_members、family_member_logs、family_invitations、teacher_family_binding_requests、guide_families、bind_invites、questionnaire_snapshots、relationship_questionnaire_responses、relationship_scores、interaction_logs 均在图中映射 | | 6 | **一致性** | ✅ 与代码一致 | 所有端点路径与实际Controller(FamilyUserController、FamilyInviteController、FamilyMembersController、TeacherFamilyBindingController、RelationshipQuestionnaireController、RelationshipQualityController、InteractionLogController、BindController、BindInviteController)中的`@PostMapping`匹配 |