wealth-insurance-flow.md 10 KB

用户使用流程图 — 财富与保险

端口说明: 📱 小程序 | 🖥 管理后台 | 📋 规划师端 | ⚙️ 系统自动

分层说明: 🏠 页面 → 🔗 API → ⚙️ Service → 📦 数据实体

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

    %% ============ 角色 ============
    ROLE_PARENT(("👤 家长")):::actor
    ROLE_CHILD(("👶 孩子")):::actor
    ROLE_ADMIN(("🖥 管理员")):::actor

    %% ================================================================
    %% 阶段一:财商打卡
    %% ================================================================
    subgraph 阶段一[阶段一:财商打卡]
        P1["🏠 家长/孩子端:打卡列表页"]:::page
        P1 -->|"查看当月打卡"| A1["🔗 GET /api/wealth/checkin/list"]:::api
        A1 -->|"userId, childId, yearMonth"| S1["⚙️ FinanceCheckinService.getCheckins()"]:::service
        S1 -->|"查询打卡记录"| D1["📦 finance_checkins 表"]:::data

        P1 -->|"查看打卡统计"| A2["🔗 GET /api/wealth/checkin/stats"]:::api
        A2 -->|"userId, childId"| S2["⚙️ FinanceCheckinService.getCheckinStats()"]:::service
        S2 -->|"统计连续打卡天数, 本月次数"| D1

        P1 -->|"创建打卡"| A3["🔗 POST /api/wealth/checkin/create"]:::api
        A3 -->|"checkinType, userId, childId"| S3["⚙️ FinanceCheckinService.createCheckin()"]:::service
        S3 -->|"插入一条打卡记录"| D1

        P1 -->|"删除打卡"| A4["🔗 POST /api/wealth/checkin/delete"]:::api
        A4 -->|"id"| S4["⚙️ FinanceCheckinService.deleteCheckin()"]:::service
        S4 -->|"删除指定打卡记录"| D1
    end

    %% ================================================================
    %% 阶段二:保险规划
    %% ================================================================
    subgraph 阶段二[阶段二:保险规划]
        D1 -->|"用户ID"| P2["🏠 家长端:保险规划页"]:::page
        P2 -->|"生成规划报告"| A5["🔗 POST /api/insurance/planning"]:::api
        A5 -->|"userId"| S5["⚙️ InsurancePlanningService.generatePlanningReport()"]:::service
        S5 -->|"家庭维度评分 + 保单覆盖分析"| D2["📦 PlanningReportDTO(内存中)"]:::data
        D2 -->|"评分数据, 已购保单"| D3["📦 dan_assessment_results + 已有保单"]:::data
    end

    %% ================================================================
    %% 阶段三:保单管理
    %% ================================================================
    subgraph 阶段三[阶段三:保单管理]
        D2 -->|"覆盖缺口建议"| P3["🏠 家长端:保单管理页"]:::page
        P3 -->|"查看保单列表"| A6["🔗 POST /api/wealth/insurance/list"]:::api
        A6 -->|"userId, status"| S6["⚙️ InsurancePolicyService.getPolicies()"]:::service
        S6 -->|"用户所有保单"| D4["📦 insurance_policies 表"]:::data

        P3 -->|"查看保单详情"| A7["🔗 POST /api/wealth/insurance/detail"]:::api
        A7 -->|"id"| S7["⚙️ InsurancePolicyService.getById()"]:::service
        S7 -->|"单条保单完整信息"| D4

        P3 -->|"创建保单"| A8["🔗 POST /api/wealth/insurance/create"]:::api
        A8 -->|"userId, policyJson"| S8["⚙️ InsurancePolicyService.createPolicy()"]:::service
        S8 -->|"插入一条保单记录"| D4

        P3 -->|"更新保单"| A9["🔗 POST /api/wealth/insurance/update"]:::api
        A9 -->|"policyJson"| S9["⚙️ InsurancePolicyService.updatePolicy()"]:::service
        S9 -->|"更新保单字段"| D4

        P3 -->|"删除保单"| A10["🔗 POST /api/wealth/insurance/delete"]:::api
        A10 -->|"id"| S10["⚙️ InsurancePolicyService.deletePolicy()"]:::service
        S10 -->|"逻辑/物理删除保单"| D4
    end

    %% ================================================================
    %% 阶段四:家庭收益
    %% ================================================================
    subgraph 阶段四[阶段四:家庭收益]
        D4 -->|"家庭ID"| P4["🏠 家长端:家庭收益页"]:::page
        P4 -->|"查看收益总览"| A11["🔗 POST /api/earnings/family/summary"]:::api
        A11 -->|"userId → familyId"| S11["⚙️ FamilyEarningsService.getFamilySummary()"]:::service
        S11 -->|"总收入, 可提现, 已分配"| D5["📦 family_earnings 表"]:::data

        P4 -->|"查看成员贡献"| A12["🔗 POST /api/earnings/family/members"]:::api
        A12 -->|"userId → familyId"| S12["⚙️ FamilyEarningsService.getMemberContributions()"]:::service
        S12 -->|"各成员贡献金额/次数"| D6["📦 family_earnings_members 表"]:::data

        P4 -->|"查看收支流水"| A13["🔗 POST /api/earnings/family/records"]:::api
        A13 -->|"familyId, type"| S13["⚙️ FamilyEarningsService.getRecords()"]:::service
        S13 -->|"筛选后的流水列表"| D7["📦 family_earnings_records 表"]:::data
    end

    %% ================================================================
    %% 阶段五:收益管理(管理员)
    %% ================================================================
    subgraph 阶段五[阶段五:收益管理(管理员)]
        D5 -->|"家庭ID"| P5["🖥 管理后台:收益管理页"]:::page
        P5 -->|"收益分配"| A14["🔗 POST /api/earnings/admin/distribute"]:::api
        A14 -->|"家庭管理员ID, userId, amount"| S14["⚙️ FamilyEarningsService.distribute()"]:::service
        S14 -->|"插入收益分配记录"| D5

        P5 -->|"切换成员访问权限"| A15["🔗 POST /api/earnings/admin/toggle-member"]:::api
        A15 -->|"管理员ID, userId, enabled"| S15["⚙️ FamilyEarningsService.toggleMemberAccess()"]:::service
        S15 -->|"更新成员状态"| D6

        P5 -->|"提现"| A16["🔗 POST /api/earnings/admin/withdraw"]:::api
        A16 -->|"管理员ID, amount"| S16["⚙️ FamilyEarningsService.withdraw()"]:::service
        S16 -->|"创建提现申请/记录"| D7
    end

    %% ================================================================
    %% 角色关联
    %% ================================================================
    ROLE_PARENT -.- P1
    ROLE_PARENT -.- P2
    ROLE_PARENT -.- P3
    ROLE_PARENT -.- P4
    ROLE_CHILD -.- P1
    ROLE_ADMIN -.- P5

端点明细

财商打卡

端点 说明 端口 请求数据 响应数据
POST /api/wealth/checkin/list 获取打卡列表 📱小程序 {userId, childId, yearMonth} List<FinanceCheckin>
POST /api/wealth/checkin/stats 获取打卡统计 📱小程序 {userId, childId} {totalDays, consecutiveDays, monthlyCount}
POST /api/wealth/checkin/create 创建打卡记录 📱小程序 {checkinType, childId, ...} FinanceCheckin
POST /api/wealth/checkin/delete 删除打卡记录 📱小程序 {id} {success}

保险规划

端点 说明 端口 请求数据 响应数据
POST /api/insurance/planning 获取家庭保险规划报告 📱小程序 Header: Authorization PlanningReportDTO(覆盖缺口, 建议保额)

保单管理

端点 说明 端口 请求数据 响应数据
POST /api/wealth/insurance/list 获取保单列表 📱小程序 {status} List<InsurancePolicy>
POST /api/wealth/insurance/detail 获取保单详情 📱小程序 {id} InsurancePolicy
POST /api/wealth/insurance/create 创建保单 📱小程序 InsurancePolicy JSON(含保单类型/金额/到期日) InsurancePolicy
POST /api/wealth/insurance/update 更新保单 📱小程序 InsurancePolicy JSON(含id) {success}
POST /api/wealth/insurance/delete 删除保单 📱小程序 {id} {success}

家庭收益

端点 说明 端口 请求数据 响应数据
POST /api/earnings/family/summary 获取家庭收益总览 📱小程序 Header: Authorization FamilyEarningsSummaryDTO(总收入/可提现/已分配)
POST /api/earnings/family/members 获取成员贡献列表 📱小程序 Header: Authorization List(各成员贡献金额/次数)
POST /api/earnings/family/records 获取收支流水 📱小程序 {type} List<FamilyEarningsRecord>
POST /api/earnings/admin/distribute 管理员分配收益 🖥管理后台 {userId, amount} {success}
POST /api/earnings/admin/toggle-member 切换成员收益池权限 🖥管理后台 {userId, enabled} {success}
POST /api/earnings/admin/withdraw 管理员提现 🖥管理后台 {amount} {success}

完整性分析

# 维度 评估 说明
1 流程完整性 ✅ 完整 覆盖财商打卡→保险规划→保单管理→家庭收益→管理员收益管理共5个阶段,路径完整
2 异常路径 ⚠️ 部分覆盖 打卡删除时id为空返回错误;保单详情id为空/不存在返回错误;收益管理员无权限时返回错误;其余异常由Service层处理
3 端点覆盖 ✅ 完整 16个端点全部映射到流程图中,与代码实际暴露的/api/wealth/*/api/insurance/*/api/earnings/*一致
4 角色覆盖 ✅ 完整 家长可进行打卡/规划/保单/收益查看;孩子可参与打卡;管理员可进行收益分配/提现操作
5 数据实体 ✅ 完整 finance_checkins表、insurance_policies表、family_earnings表、family_earnings_members表、family_earnings_records表均在图中映射
6 一致性 ✅ 与代码一致 所有端点路径与实际Controller(FinanceCheckinController、InsurancePolicyController、InsurancePlanningController、FamilyEarningsController、AdminEarningsController)中的@PostMapping匹配
7 废弃端点 ✅ 已标记 无废弃端点;/api/earnings/admin/*实际在FamilyEarningsController中处理,虽命名为admin但靠角色检查控制权限