01 · 模块定位
CRM 客户中心
一条新线索可完成查重、分配、跟进、试听、反馈、报价和转合同。业务目标
统一线索、客户、家长、学员、公海、跟进、邀约、试听和销售任务。
使用终端
PC Web 管理端由总部/区域/校区 CRM 管理员和销售主管使用,查看完整客户信息并处理审批、去重、归属仲裁、异常数据和线索重新分配;课程顾问、销售人员、市场人员只通过迪诺学堂教师端 App/小程序管理本人授权范围内的线索、客户、跟进、试听和活动线索,不提供 PC Web 操作入口。
验收主线
一条新线索可完成查重、分配、跟进、试听、反馈、报价和转合同。
02 · 范围边界
明确本模块负责什么、依赖什么、不负责什么
边界清晰后,原型、接口和数据库设计才能避免重复建设。模块内范围
- 线索池
- 客户画像
- 跟进任务
- 试听邀约
- 公海规则
- 销售漏斗
- 试听预约
- 到访签到
- 试听教师反馈
- 试听家长评价
- 未到访唤醒
- 试听转化任务
- 线索撞单
- 客户合并
- 归属仲裁
上游依赖
- 组织校区与账号权限
- 课程/客户/合同等主数据
- 审批流、消息模板、文件中心
- 必要的第三方接口密钥
下游输出
- 业务状态和待办
- 消息通知和审批记录
- 报表指标和数据快照
- 审计日志和接口回执
角色终端与权限边界
| 角色 | 使用终端 | 可见范围 | 主要能力 | 限制/说明 |
|---|---|---|---|---|
| 总部/区域 CRM 管理员 | PC Web 管理端 | 总部全量或区域辖区全部线索、客户、跟进、试听、合同摘要和异常数据 | CRM 管理总览、全量查询、查重合并、误合并恢复、线索重新分配、归属仲裁、导入导出审批、异常关闭 | 可查看完整信息;导出、明文查看、批量重分配等敏感动作需审批并审计 |
| 校区 CRM 管理员/校区主管 | PC Web 管理端 | 本校区及授权跨校区线索、客户、顾问团队、市场活动线索和异常数据 | 本校区线索治理、公海规则、保护期处理、销售团队分配、异常处理、试听转化跟踪 | 仅限授权校区;跨校区流转和批量动作按审批规则执行 |
| 销售主管 | PC Web 管理端 + 移动端待办 | 本人团队线索、客户、顾问跟进、试听和归属争议 | 团队看板、分配与重新分配、跟进督办、归属仲裁、撞单处理、超时升级 | PC 用于管理和审批;移动端用于提醒、审批待办和轻量处理 |
| 课程顾问/销售人员 | 迪诺学堂教师端 App/小程序 | 本人负责、本人创建、本人协作或主管授权的线索、客户、试听和跟进任务 | 销售工作台、我的线索、线索详情、移动端新增线索、记录跟进、试听邀约、转化跟进、归属申诉 | 不提供 PC Web 操作入口;非本人数据脱敏或拦截;越权访问写审计 |
| 市场人员 | 迪诺学堂教师端 App/小程序 | 本人负责渠道、活动、扫码报名、活动留资和转销售状态 | 市场线索工作台、活动线索查看、扫码报名、归因查看、转销售状态、归属申诉 | 不提供 PC Web 操作入口;不可查看全量客户和其他市场人员活动数据 |
| 安全审计员 | PC Web 安全审计后台/CRM 审计入口 | CRM 敏感导出、明文查看、越权访问、合并恢复、重新分配和批量操作审计记录 | 查看审计日志、导出审批复核、敏感访问追踪、异常操作追责 | 不直接处理销售业务数据,仅处理安全审计和合规复核 |
03 · 确认口径、后台配置与默认实施规则
CRM 客户中心必须承接的已确认规则
本章节来自待决策与澄清清单的收口结果,已经转为本模块 PRD 的正式需求、配置项或默认实施规则。| 分类 | 事项 | 本模块落地要求 | 责任方 |
|---|---|---|---|
| 已确认 | CRM角色终端边界 | CRM 管理员、总部/区域/校区管理人员和销售主管使用 PC Web 管理端处理全量客户、审批、去重、归属仲裁、异常数据和重新分配;课程顾问、销售人员、市场人员只使用迪诺学堂教师端 App/小程序管理本人授权范围内的线索、客户、跟进、试听和活动线索,不提供 PC Web 操作入口。 | 产品/研发/权限管理员 |
| 默认实施规则 | CRM数据范围控制 | 移动端接口必须按本人负责、本人创建、本人参与、授权校区和授权活动过滤;PC Web 管理端按总部全量、区域辖区、校区本地、主管团队和管理员授权范围展示。 | 研发/测试/安全合规 |
| 默认实施规则 | 接口设计说明书组织方式 | 采用单独 HTML 文件集中管理接口协议;模块 PRD 保留模块级接口摘要,避免每个模块重复写通用协议。 | 产品/研发 |
| 默认实施规则 | 接口错误码与重试中间件 | 所有外部接口和内部异步任务统一错误码、幂等键、重试次数、告警阈值和回执归档策略。 | 后端/测试/运维 |
04 · 业务流程
CRM 客户中心主流程
流程用于指导原型图的页面顺序、按钮状态和异常分支。线索池需覆盖入口、字段、状态、权限、审批/消息、异常处理、审计和指标统计,并与上下游模块保持数据一致。
客户画像需覆盖入口、字段、状态、权限、审批/消息、异常处理、审计和指标统计,并与上下游模块保持数据一致。
跟进任务需覆盖入口、字段、状态、权限、审批/消息、异常处理、审计和指标统计,并与上下游模块保持数据一致。
试听邀约需覆盖入口、字段、状态、权限、审批/消息、异常处理、审计和指标统计,并与上下游模块保持数据一致。
公海规则需覆盖入口、字段、状态、权限、审批/消息、异常处理、审计和指标统计,并与上下游模块保持数据一致。
销售漏斗需覆盖入口、字段、状态、权限、审批/消息、异常处理、审计和指标统计,并与上下游模块保持数据一致。
试听预约需覆盖入口、字段、状态、权限、审批/消息、异常处理、审计和指标统计,并与上下游模块保持数据一致。
试听课需记录预约、提醒、到访签到、教师反馈、家长评价、顾问二次跟进和签约转化结果。
05 · 功能清单
按子模块拆到可设计、可开发、可测试的颗粒度
每一行功能都需要在原型中体现入口、状态、按钮、字段和反馈。| 一级功能 | 二级功能 | 功能说明 | 规则/验收 |
|---|---|---|---|
| 线索池 | 角色化终端操作 | 线索池按角色拆分为 PC Web 管理端和迪诺学堂教师端 App/小程序端:管理员/主管处理全量治理、审批、去重、归属和异常;销售/市场只在移动端处理本人授权范围内的线索、客户、跟进、试听和活动线索。 | 必须校验角色终端、组织范围、本人归属、协作授权、字段脱敏、敏感操作审批和操作审计 |
| 线索池 | 业务处理 | 线索池需覆盖入口、字段、状态、权限、审批/消息、异常处理、审计和指标统计,并与上下游模块保持数据一致。 | 必须联动状态、权限、消息、审批和指标 |
| 线索池 | 异常闭环 | 重复客户处理 | 失败原因可见、可重试、可转人工、可追溯 |
| 客户画像 | 角色化终端操作 | 客户画像按角色拆分为 PC Web 管理端和迪诺学堂教师端 App/小程序端:管理员/主管处理全量治理、审批、去重、归属和异常;销售/市场只在移动端处理本人授权范围内的线索、客户、跟进、试听和活动线索。 | 必须校验角色终端、组织范围、本人归属、协作授权、字段脱敏、敏感操作审批和操作审计 |
| 客户画像 | 业务处理 | 客户画像需覆盖入口、字段、状态、权限、审批/消息、异常处理、审计和指标统计,并与上下游模块保持数据一致。 | 必须联动状态、权限、消息、审批和指标 |
| 客户画像 | 异常闭环 | 保护期冲突处理 | 失败原因可见、可重试、可转人工、可追溯 |
| 跟进任务 | 角色化终端操作 | 跟进任务按角色拆分为 PC Web 管理端和迪诺学堂教师端 App/小程序端:管理员/主管处理全量治理、审批、去重、归属和异常;销售/市场只在移动端处理本人授权范围内的线索、客户、跟进、试听和活动线索。 | 必须校验角色终端、组织范围、本人归属、协作授权、字段脱敏、敏感操作审批和操作审计 |
| 跟进任务 | 业务处理 | 跟进任务需覆盖入口、字段、状态、权限、审批/消息、异常处理、审计和指标统计,并与上下游模块保持数据一致。 | 必须联动状态、权限、消息、审批和指标 |
| 跟进任务 | 异常闭环 | 超时未跟进处理 | 失败原因可见、可重试、可转人工、可追溯 |
| 试听邀约 | 角色化终端操作 | 试听邀约按角色拆分为 PC Web 管理端和迪诺学堂教师端 App/小程序端:管理员/主管处理全量治理、审批、去重、归属和异常;销售/市场只在移动端处理本人授权范围内的线索、客户、跟进、试听和活动线索。 | 必须校验角色终端、组织范围、本人归属、协作授权、字段脱敏、敏感操作审批和操作审计 |
| 试听邀约 | 业务处理 | 试听邀约需覆盖入口、字段、状态、权限、审批/消息、异常处理、审计和指标统计,并与上下游模块保持数据一致。 | 必须联动状态、权限、消息、审批和指标 |
| 试听邀约 | 异常闭环 | 试听未到访处理 | 失败原因可见、可重试、可转人工、可追溯 |
| 公海规则 | 角色化终端操作 | 公海规则按角色拆分为 PC Web 管理端和迪诺学堂教师端 App/小程序端:管理员/主管处理全量治理、审批、去重、归属和异常;销售/市场只在移动端处理本人授权范围内的线索、客户、跟进、试听和活动线索。 | 必须校验角色终端、组织范围、本人归属、协作授权、字段脱敏、敏感操作审批和操作审计 |
| 公海规则 | 业务处理 | 公海规则需覆盖入口、字段、状态、权限、审批/消息、异常处理、审计和指标统计,并与上下游模块保持数据一致。 | 必须联动状态、权限、消息、审批和指标 |
| 公海规则 | 异常闭环 | 教师反馈缺失处理 | 失败原因可见、可重试、可转人工、可追溯 |
| 销售漏斗 | 角色化终端操作 | 销售漏斗按角色拆分为 PC Web 管理端和迪诺学堂教师端 App/小程序端:管理员/主管处理全量治理、审批、去重、归属和异常;销售/市场只在移动端处理本人授权范围内的线索、客户、跟进、试听和活动线索。 | 必须校验角色终端、组织范围、本人归属、协作授权、字段脱敏、敏感操作审批和操作审计 |
| 销售漏斗 | 业务处理 | 销售漏斗需覆盖入口、字段、状态、权限、审批/消息、异常处理、审计和指标统计,并与上下游模块保持数据一致。 | 必须联动状态、权限、消息、审批和指标 |
| 销售漏斗 | 异常闭环 | 家长评价未提交处理 | 失败原因可见、可重试、可转人工、可追溯 |
| 试听预约 | 角色化终端操作 | 试听预约按角色拆分为 PC Web 管理端和迪诺学堂教师端 App/小程序端:管理员/主管处理全量治理、审批、去重、归属和异常;销售/市场只在移动端处理本人授权范围内的线索、客户、跟进、试听和活动线索。 | 必须校验角色终端、组织范围、本人归属、协作授权、字段脱敏、敏感操作审批和操作审计 |
| 试听预约 | 业务处理 | 试听预约需覆盖入口、字段、状态、权限、审批/消息、异常处理、审计和指标统计,并与上下游模块保持数据一致。 | 必须联动状态、权限、消息、审批和指标 |
| 试听预约 | 异常闭环 | 转化任务未分配处理 | 失败原因可见、可重试、可转人工、可追溯 |
| 到访签到 | 角色化终端操作 | 到访签到按角色拆分为 PC Web 管理端和迪诺学堂教师端 App/小程序端:管理员/主管处理全量治理、审批、去重、归属和异常;销售/市场只在移动端处理本人授权范围内的线索、客户、跟进、试听和活动线索。 | 必须校验角色终端、组织范围、本人归属、协作授权、字段脱敏、敏感操作审批和操作审计 |
| 到访签到 | 业务处理 | 试听课需记录预约、提醒、到访签到、教师反馈、家长评价、顾问二次跟进和签约转化结果。 | 必须联动状态、权限、消息、审批和指标 |
| 到访签到 | 异常闭环 | 误合并处理 | 失败原因可见、可重试、可转人工、可追溯 |
| 试听教师反馈 | 角色化终端操作 | 试听教师反馈按角色拆分为 PC Web 管理端和迪诺学堂教师端 App/小程序端:管理员/主管处理全量治理、审批、去重、归属和异常;销售/市场只在移动端处理本人授权范围内的线索、客户、跟进、试听和活动线索。 | 必须校验角色终端、组织范围、本人归属、协作授权、字段脱敏、敏感操作审批和操作审计 |
| 试听教师反馈 | 业务处理 | 试听教师反馈需覆盖入口、字段、状态、权限、审批/消息、异常处理、审计和指标统计,并与上下游模块保持数据一致。 | 必须联动状态、权限、消息、审批和指标 |
| 试听教师反馈 | 异常闭环 | 归属争议超时处理 | 失败原因可见、可重试、可转人工、可追溯 |
| 试听家长评价 | 角色化终端操作 | 试听家长评价按角色拆分为 PC Web 管理端和迪诺学堂教师端 App/小程序端:管理员/主管处理全量治理、审批、去重、归属和异常;销售/市场只在移动端处理本人授权范围内的线索、客户、跟进、试听和活动线索。 | 必须校验角色终端、组织范围、本人归属、协作授权、字段脱敏、敏感操作审批和操作审计 |
| 试听家长评价 | 业务处理 | 试听家长评价需覆盖入口、字段、状态、权限、审批/消息、异常处理、审计和指标统计,并与上下游模块保持数据一致。 | 必须联动状态、权限、消息、审批和指标 |
| 试听家长评价 | 异常闭环 | 历史记录迁移失败处理 | 失败原因可见、可重试、可转人工、可追溯 |
| 未到访唤醒 | 角色化终端操作 | 未到访唤醒按角色拆分为 PC Web 管理端和迪诺学堂教师端 App/小程序端:管理员/主管处理全量治理、审批、去重、归属和异常;销售/市场只在移动端处理本人授权范围内的线索、客户、跟进、试听和活动线索。 | 必须校验角色终端、组织范围、本人归属、协作授权、字段脱敏、敏感操作审批和操作审计 |
| 未到访唤醒 | 业务处理 | 未到访唤醒需覆盖入口、字段、状态、权限、审批/消息、异常处理、审计和指标统计,并与上下游模块保持数据一致。 | 必须联动状态、权限、消息、审批和指标 |
| 未到访唤醒 | 异常闭环 | 重复客户处理 | 失败原因可见、可重试、可转人工、可追溯 |
| 试听转化任务 | 角色化终端操作 | 试听转化任务按角色拆分为 PC Web 管理端和迪诺学堂教师端 App/小程序端:管理员/主管处理全量治理、审批、去重、归属和异常;销售/市场只在移动端处理本人授权范围内的线索、客户、跟进、试听和活动线索。 | 必须校验角色终端、组织范围、本人归属、协作授权、字段脱敏、敏感操作审批和操作审计 |
| 试听转化任务 | 业务处理 | 试听转化任务需覆盖入口、字段、状态、权限、审批/消息、异常处理、审计和指标统计,并与上下游模块保持数据一致。 | 必须联动状态、权限、消息、审批和指标 |
| 试听转化任务 | 异常闭环 | 保护期冲突处理 | 失败原因可见、可重试、可转人工、可追溯 |
| 线索撞单 | 角色化终端操作 | 线索撞单按角色拆分为 PC Web 管理端和迪诺学堂教师端 App/小程序端:管理员/主管处理全量治理、审批、去重、归属和异常;销售/市场只在移动端处理本人授权范围内的线索、客户、跟进、试听和活动线索。 | 必须校验角色终端、组织范围、本人归属、协作授权、字段脱敏、敏感操作审批和操作审计 |
| 线索撞单 | 业务处理 | CRM 需支持线索撞单识别、客户家庭档案合并、顾问归属争议仲裁、历史跟进和试听合同归并,以及误合并恢复。 | 必须联动状态、权限、消息、审批和指标 |
| 线索撞单 | 异常闭环 | 超时未跟进处理 | 失败原因可见、可重试、可转人工、可追溯 |
| 客户合并 | 角色化终端操作 | 客户合并按角色拆分为 PC Web 管理端和迪诺学堂教师端 App/小程序端:管理员/主管处理全量治理、审批、去重、归属和异常;销售/市场只在移动端处理本人授权范围内的线索、客户、跟进、试听和活动线索。 | 必须校验角色终端、组织范围、本人归属、协作授权、字段脱敏、敏感操作审批和操作审计 |
| 客户合并 | 业务处理 | 客户合并需覆盖入口、字段、状态、权限、审批/消息、异常处理、审计和指标统计,并与上下游模块保持数据一致。 | 必须联动状态、权限、消息、审批和指标 |
| 客户合并 | 异常闭环 | 试听未到访处理 | 失败原因可见、可重试、可转人工、可追溯 |
| 归属仲裁 | 角色化终端操作 | 归属仲裁按角色拆分为 PC Web 管理端和迪诺学堂教师端 App/小程序端:管理员/主管处理全量治理、审批、去重、归属和异常;销售/市场只在移动端处理本人授权范围内的线索、客户、跟进、试听和活动线索。 | 必须校验角色终端、组织范围、本人归属、协作授权、字段脱敏、敏感操作审批和操作审计 |
| 归属仲裁 | 业务处理 | 归属仲裁需覆盖入口、字段、状态、权限、审批/消息、异常处理、审计和指标统计,并与上下游模块保持数据一致。 | 必须联动状态、权限、消息、审批和指标 |
| 归属仲裁 | 异常闭环 | 教师反馈缺失处理 | 失败原因可见、可重试、可转人工、可追溯 |
功能到数据对象/接口/表映射
| 功能域 | 承接对象 | 核心表 | 代表接口 | 状态机/状态字段 | 研发落地校验 |
|---|---|---|---|---|---|
| 线索池 | Lead、LeadAssignment、DuplicateCandidate、MergeDispute | crm_lead、crm_lead_assignment、crm_duplicate_candidate、crm_merge_dispute | 建议接口资源组 /api/v1/crm/leads | duplicate_status、biz_status、assignment_status、approval_status、source_biz_type、handle_status | 新增/编辑/删除/审批/导出/回调均需校验租户、校区、角色、数据范围、逻辑删除、幂等和审计 |
| 客户画像 | CustomerFamily、Guardian、Student、DuplicateCandidate | crm_customer_family、crm_guardian、stu_student、crm_duplicate_candidate | 建议接口资源组 /api/v1/crm/customers | risk_level、biz_status、verify_status、source_biz_type、handle_status | 新增/编辑/删除/审批/导出/回调均需校验租户、校区、角色、数据范围、逻辑删除、幂等和审计 |
| 跟进任务 | Lead、FollowRecord、LeadAssignment | crm_lead、crm_follow_record、crm_lead_assignment | 建议接口资源组 /api/v1/crm/follow-records | duplicate_status、biz_status、follow_type、assignment_status、approval_status | 新增/编辑/删除/审批/导出/回调均需校验租户、校区、角色、数据范围、逻辑删除、幂等和审计 |
| 试听邀约 | Lead、TrialLesson、TrialFeedback | crm_lead、crm_trial_lesson、crm_trial_feedback | 建议接口资源组 /api/v1/crm/trials | duplicate_status、biz_status、trial_status、arrival_status、conversion_status | 新增/编辑/删除/审批/导出/回调均需校验租户、校区、角色、数据范围、逻辑删除、幂等和审计 |
| 公海规则 | Lead、LeadAssignment、DuplicateCandidate、MergeDispute | crm_lead、crm_lead_assignment、crm_duplicate_candidate、crm_merge_dispute | 建议接口资源组 /api/v1/crm/leads | duplicate_status、biz_status、assignment_status、approval_status、source_biz_type、handle_status | 新增/编辑/删除/审批/导出/回调均需校验租户、校区、角色、数据范围、逻辑删除、幂等和审计 |
| 销售漏斗 | CRMRoleTerminalPolicy、Lead、CustomerFamily、Guardian | crm_role_terminal_policy、crm_lead、crm_customer_family、crm_guardian | 接口资源组 /api/v1/crm/features/06 | duplicate_status、biz_status、risk_level、verify_status | 新增/编辑/删除/审批/导出/回调均需校验租户、校区、角色、数据范围、逻辑删除、幂等和审计 |
| 试听预约 | Lead、TrialLesson、TrialFeedback | crm_lead、crm_trial_lesson、crm_trial_feedback | 建议接口资源组 /api/v1/crm/trials | duplicate_status、biz_status、trial_status、arrival_status、conversion_status | 新增/编辑/删除/审批/导出/回调均需校验租户、校区、角色、数据范围、逻辑删除、幂等和审计 |
| 到访签到 | Lead、TrialLesson、TrialFeedback | crm_lead、crm_trial_lesson、crm_trial_feedback | 建议接口资源组 /api/v1/crm/trials | duplicate_status、biz_status、trial_status、arrival_status、conversion_status | 新增/编辑/删除/审批/导出/回调均需校验租户、校区、角色、数据范围、逻辑删除、幂等和审计 |
| 试听教师反馈 | Lead、TrialLesson、TrialFeedback | crm_lead、crm_trial_lesson、crm_trial_feedback | 建议接口资源组 /api/v1/crm/trials | duplicate_status、biz_status、trial_status、arrival_status、conversion_status | 新增/编辑/删除/审批/导出/回调均需校验租户、校区、角色、数据范围、逻辑删除、幂等和审计 |
| 试听家长评价 | Lead、TrialLesson、TrialFeedback | crm_lead、crm_trial_lesson、crm_trial_feedback | 建议接口资源组 /api/v1/crm/trials | duplicate_status、biz_status、trial_status、arrival_status、conversion_status | 新增/编辑/删除/审批/导出/回调均需校验租户、校区、角色、数据范围、逻辑删除、幂等和审计 |
| 未到访唤醒 | Lead、TrialLesson、TrialFeedback | crm_lead、crm_trial_lesson、crm_trial_feedback | 建议接口资源组 /api/v1/crm/trials | duplicate_status、biz_status、trial_status、arrival_status、conversion_status | 新增/编辑/删除/审批/导出/回调均需校验租户、校区、角色、数据范围、逻辑删除、幂等和审计 |
| 试听转化任务 | Lead、FollowRecord、LeadAssignment | crm_lead、crm_follow_record、crm_lead_assignment | 建议接口资源组 /api/v1/crm/follow-records | duplicate_status、biz_status、follow_type、assignment_status、approval_status | 新增/编辑/删除/审批/导出/回调均需校验租户、校区、角色、数据范围、逻辑删除、幂等和审计 |
| 线索撞单 | Lead、LeadAssignment、DuplicateCandidate、MergeDispute | crm_lead、crm_lead_assignment、crm_duplicate_candidate、crm_merge_dispute | 建议接口资源组 /api/v1/crm/leads | duplicate_status、biz_status、assignment_status、approval_status、source_biz_type、handle_status | 新增/编辑/删除/审批/导出/回调均需校验租户、校区、角色、数据范围、逻辑删除、幂等和审计 |
| 客户合并 | CustomerFamily、Guardian、Student、DuplicateCandidate | crm_customer_family、crm_guardian、stu_student、crm_duplicate_candidate | 建议接口资源组 /api/v1/crm/customers | risk_level、biz_status、verify_status、source_biz_type、handle_status | 新增/编辑/删除/审批/导出/回调均需校验租户、校区、角色、数据范围、逻辑删除、幂等和审计 |
| 归属仲裁 | Lead、LeadAssignment、DuplicateCandidate、MergeDispute | crm_lead、crm_lead_assignment、crm_duplicate_candidate、crm_merge_dispute | 建议接口资源组 /api/v1/crm/leads | duplicate_status、biz_status、assignment_status、approval_status、source_biz_type、handle_status | 新增/编辑/删除/审批/导出/回调均需校验租户、校区、角色、数据范围、逻辑删除、幂等和审计 |
06 · 原子级功能需求
用于研发任务拆分和测试用例追踪
需求编号可直接进入项目管理工具。| 编号 | 需求描述 | 入口页面 | 关键动作 | 输入校验 | 输出结果 | 异常处理 | 验收标准 |
|---|---|---|---|---|---|---|---|
| FR-CRM-001 | 线索支持手动录入、表单导入、活动报名、批量导入和开放导入 | CRM 管理总览 | 移动端新增线索 | 校验租户、校区、角色、数据范围、状态前置、必填、唯一和敏感操作授权 | 生成业务记录、状态流转、消息通知、审计日志、指标快照和必要的第三方任务 | 重复客户 | 主流程、异常流、权限流、接口失败和数据一致性均可通过测试 |
| FR-CRM-002 | 按手机号、微信、学员姓名、生日、家长姓名查重合并 | 线索全量管理 | 移动端跟进 | 校验租户、校区、角色、数据范围、状态前置、必填、唯一和敏感操作授权 | 生成业务记录、状态流转、消息通知、审计日志、指标快照和必要的第三方任务 | 保护期冲突 | 主流程、异常流、权限流、接口失败和数据一致性均可通过测试 |
| FR-CRM-003 | 支持自动分配、手动分配、抢单、公海回收和保护期 | 客户全量档案 | 移动端试听邀约 | 校验租户、校区、角色、数据范围、状态前置、必填、唯一和敏感操作授权 | 生成业务记录、状态流转、消息通知、审计日志、指标快照和必要的第三方任务 | 超时未跟进 | 主流程、异常流、权限流、接口失败和数据一致性均可通过测试 |
| FR-CRM-004 | 跟进记录支持电话、微信、面谈、短信、活动、试听和上门 | 试听反馈台 | 到访签到、教师反馈或转化跟进 | 校验租户、校区、角色、数据范围、状态前置、必填、唯一和敏感操作授权 | 生成业务记录、状态流转、消息通知、审计日志、指标快照和必要的第三方任务 | 试听未到访、反馈缺失或转化任务未分配 | 主流程、异常流、权限流、接口失败和数据一致性均可通过测试 |
| FR-CRM-005 | 试听后自动生成反馈、报价和签约任务 | 试听反馈台 | 到访签到、教师反馈或转化跟进 | 校验租户、校区、角色、数据范围、状态前置、必填、唯一和敏感操作授权 | 生成业务记录、状态流转、消息通知、审计日志、指标快照和必要的第三方任务 | 试听未到访、反馈缺失或转化任务未分配 | 主流程、异常流、权限流、接口失败和数据一致性均可通过测试 |
| FR-CRM-006 | 试听课需记录预约、提醒、到访签到、教师反馈、家长评价、顾问二次跟进和签约转化结果。 | 试听反馈台 | 到访签到、教师反馈或转化跟进 | 校验租户、校区、角色、数据范围、状态前置、必填、唯一和敏感操作授权 | 生成业务记录、状态流转、消息通知、审计日志、指标快照和必要的第三方任务 | 试听未到访、反馈缺失或转化任务未分配 | 主流程、异常流、权限流、接口失败和数据一致性均可通过测试 |
| FR-CRM-007 | 未到访试听需自动生成唤醒任务,并保留未到访原因、改约记录和顾问跟进结果。 | 试听反馈台 | 到访签到、教师反馈或转化跟进 | 校验租户、校区、角色、数据范围、状态前置、必填、唯一和敏感操作授权 | 生成业务记录、状态流转、消息通知、审计日志、指标快照和必要的第三方任务 | 试听未到访、反馈缺失或转化任务未分配 | 主流程、异常流、权限流、接口失败和数据一致性均可通过测试 |
| FR-CRM-008 | CRM 需支持线索撞单识别、客户家庭档案合并、顾问归属争议仲裁、历史跟进和试听合同归并,以及误合并恢复。 | 试听反馈台 | 到访签到、教师反馈或转化跟进 | 校验租户、校区、角色、数据范围、状态前置、必填、唯一和敏感操作授权 | 生成业务记录、状态流转、消息通知、审计日志、指标快照和必要的第三方任务 | 试听未到访、反馈缺失或转化任务未分配 | 主流程、异常流、权限流、接口失败和数据一致性均可通过测试 |
07 · 关联闭环补充需求
CRM 客户中心在跨模块闭环中的责任边界
本章节承接最终闭环核对清单,明确本模块需要补齐的页面、接口对象、异常兜底和验收口径。| 闭环项 | 本模块责任 | 关键场景 | 页面/功能补充 | 关联对象/接口 | 验收口径 |
|---|---|---|---|---|---|
| 线索撞单 | 负责撞单规则、归属判定、合并、申诉和审计 | 多渠道重复获客、顾问抢单、跨校区线索转入 | PC 去重合并工作台、移动端撞单提示、撞单详情、归属申诉、合并确认 | Lead、Customer/Guardian/Student、/api/v1/crm/leads | 线索合并后保留来源、跟进、活动和归属变化记录 |
| 角色终端分工 | 负责按角色拆分 PC 管理端与迪诺学堂教师端 App/小程序的入口、数据范围、审批动作和异常处理 | 管理员需要全量治理,销售和市场只处理本人信息 | PC CRM 管理总览、PC 异常处理、教师端销售工作台、教师端市场线索工作台 | CRMRoleTerminalPolicy、User/Employee、LeadAssignment、/api/v1/crm/mobile/workbench | 销售/市场移动端无 PC Web 入口,越权访问必须拦截并审计 |
| 活动线索回流 | 负责接收员工专属推广链接和二维码产生的留资线索,并按活动归因、员工归属、撞单规则和分配规则生成移动端待办 | 员工分享活动后产生报名、试听预约、公开课报名或咨询留资 | 活动线索详情、移动端新线索提醒、活动归因卡片、线索跟进待办 | Lead、LeadAssignment、EmployeePromotionAsset、EmployeeShareRecord、/api/v1/crm/activity-leads | 员工推广产生的线索必须自动回到对应员工或分配规则指定责任人,撞单时进入 PC 管理端仲裁 |
| 线索重新分配 | 负责线索归属重新分配、主管审批、跨校区流转和归属审计 | 离职交接、顾问超时、错误分配、跨校区转入、团队调整 | PC 重新分配工作台、批量分配确认、移动端归属变更通知 | LeadAssignment、MergeDispute、/api/v1/crm/leads/reassign | 重新分配需记录原责任人、新责任人、原因、审批、消息触达和数据影响范围 |
08 · 页面与原型设计说明
页面清单、布局要求、按钮字段和状态
原型图设计需要覆盖列表、详情、表单、弹窗、空状态、异常状态和权限状态。| 终端 | 页面 | 用户 | 页面目标 | 布局结构 | 关键按钮 | 关键字段 | 异常状态 | 原型备注 |
|---|---|---|---|---|---|---|---|---|
| PC Web 管理端 | CRM 管理总览 | 总部/区域/校区 CRM 管理员、销售主管 | 查看全量线索、客户、撞单、归属、异常和转化指标 | CRM PC 管理端采用统一后台框架,左侧为线索/客户/公海/异常导航,中部为全量列表和批量处理区,右侧使用详情抽屉展示客户画像、跟进时间轴、重复候选、归属记录、审批日志和审计链路。 | 全量查询、批量查重、合并客户、恢复误合并、重新分配、归属仲裁、异常关闭、导出审批 | 线索编号、家长手机号、学员姓名、来源渠道、校区、归属顾问、保护期、重复候选、仲裁状态、异常原因 | 重复客户、保护期冲突、跨校区无权限、批量部分失败、归属争议超时、导出审批未通过 | PC 管理端需覆盖总部/区域/校区/主管数据范围、全量脱敏/明文审批、批量操作确认、处理进度、审批轨迹和异常兜底。 建议 Figma Frame:CRM-crm_管理总览;需补齐正常、空态、加载、无权限、处理中、成功和失败状态。 |
| PC Web 管理端 | 线索全量管理 | 总部/区域/校区 CRM 管理员、销售主管 | 按组织范围查看、筛选、批量查重、批量分配和导出审批 | CRM PC 管理端采用统一后台框架,左侧为线索/客户/公海/异常导航,中部为全量列表和批量处理区,右侧使用详情抽屉展示客户画像、跟进时间轴、重复候选、归属记录、审批日志和审计链路。 | 全量查询、批量查重、合并客户、恢复误合并、重新分配、归属仲裁、异常关闭、导出审批 | 线索编号、家长手机号、学员姓名、来源渠道、校区、归属顾问、保护期、重复候选、仲裁状态、异常原因 | 重复客户、保护期冲突、跨校区无权限、批量部分失败、归属争议超时、导出审批未通过 | PC 管理端需覆盖总部/区域/校区/主管数据范围、全量脱敏/明文审批、批量操作确认、处理进度、审批轨迹和异常兜底。 建议 Figma Frame:CRM-线索全量管理;需补齐正常、空态、加载、无权限、处理中、成功和失败状态。 |
| PC Web 管理端 | 客户全量档案 | 总部/区域/校区 CRM 管理员、销售主管 | 查看客户家庭、监护人、学员、跟进、试听、合同和审计摘要 | CRM PC 管理端采用统一后台框架,左侧为线索/客户/公海/异常导航,中部为全量列表和批量处理区,右侧使用详情抽屉展示客户画像、跟进时间轴、重复候选、归属记录、审批日志和审计链路。 | 全量查询、批量查重、合并客户、恢复误合并、重新分配、归属仲裁、异常关闭、导出审批 | 线索编号、家长手机号、学员姓名、来源渠道、校区、归属顾问、保护期、重复候选、仲裁状态、异常原因 | 重复客户、保护期冲突、跨校区无权限、批量部分失败、归属争议超时、导出审批未通过 | PC 管理端需覆盖总部/区域/校区/主管数据范围、全量脱敏/明文审批、批量操作确认、处理进度、审批轨迹和异常兜底。 建议 Figma Frame:CRM-客户全量档案;需补齐正常、空态、加载、无权限、处理中、成功和失败状态。 |
| PC Web 管理端 | 去重合并工作台 | CRM 管理员、销售主管 | 处理重复线索、重复客户、合并建议、误合并恢复和合并审计 | CRM PC 管理端采用统一后台框架,左侧为线索/客户/公海/异常导航,中部为全量列表和批量处理区,右侧使用详情抽屉展示客户画像、跟进时间轴、重复候选、归属记录、审批日志和审计链路。 | 全量查询、批量查重、合并客户、恢复误合并、重新分配、归属仲裁、异常关闭、导出审批 | 线索编号、家长手机号、学员姓名、来源渠道、校区、归属顾问、保护期、重复候选、仲裁状态、异常原因 | 重复客户、保护期冲突、跨校区无权限、批量部分失败、归属争议超时、导出审批未通过 | PC 管理端需覆盖总部/区域/校区/主管数据范围、全量脱敏/明文审批、批量操作确认、处理进度、审批轨迹和异常兜底。 建议 Figma Frame:CRM-去重合并工作台;需补齐正常、空态、加载、无权限、处理中、成功和失败状态。 |
| PC Web 管理端 | 线索归属重新分配 | CRM 管理员、销售主管 | 按离职、超时、错误分配、跨校区流转等原因重新分配线索 | CRM PC 管理端采用统一后台框架,左侧为线索/客户/公海/异常导航,中部为全量列表和批量处理区,右侧使用详情抽屉展示客户画像、跟进时间轴、重复候选、归属记录、审批日志和审计链路。 | 全量查询、批量查重、合并客户、恢复误合并、重新分配、归属仲裁、异常关闭、导出审批 | 线索编号、家长手机号、学员姓名、来源渠道、校区、归属顾问、保护期、重复候选、仲裁状态、异常原因 | 重复客户、保护期冲突、跨校区无权限、批量部分失败、归属争议超时、导出审批未通过 | PC 管理端需覆盖总部/区域/校区/主管数据范围、全量脱敏/明文审批、批量操作确认、处理进度、审批轨迹和异常兜底。 建议 Figma Frame:CRM-线索归属重新分配;需补齐正常、空态、加载、无权限、处理中、成功和失败状态。 |
| PC Web 管理端 | 归属仲裁审批 | CRM 管理员、销售主管 | 处理课程顾问、销售人员、市场人员提交的归属申诉和撞单争议 | CRM PC 管理端采用统一后台框架,左侧为线索/客户/公海/异常导航,中部为全量列表和批量处理区,右侧使用详情抽屉展示客户画像、跟进时间轴、重复候选、归属记录、审批日志和审计链路。 | 全量查询、批量查重、合并客户、恢复误合并、重新分配、归属仲裁、异常关闭、导出审批 | 线索编号、家长手机号、学员姓名、来源渠道、校区、归属顾问、保护期、重复候选、仲裁状态、异常原因 | 重复客户、保护期冲突、跨校区无权限、批量部分失败、归属争议超时、导出审批未通过 | PC 管理端需覆盖总部/区域/校区/主管数据范围、全量脱敏/明文审批、批量操作确认、处理进度、审批轨迹和异常兜底。 建议 Figma Frame:CRM-归属仲裁审批;需补齐正常、空态、加载、无权限、处理中、成功和失败状态。 |
| PC Web 管理端 | 异常数据处理 | CRM 管理员、销售主管 | 处理手机号异常、资料缺失、导入失败、回收失败、接口失败和重复提交 | CRM PC 管理端采用统一后台框架,左侧为线索/客户/公海/异常导航,中部为全量列表和批量处理区,右侧使用详情抽屉展示客户画像、跟进时间轴、重复候选、归属记录、审批日志和审计链路。 | 全量查询、批量查重、合并客户、恢复误合并、重新分配、归属仲裁、异常关闭、导出审批 | 线索编号、家长手机号、学员姓名、来源渠道、校区、归属顾问、保护期、重复候选、仲裁状态、异常原因 | 重复客户、保护期冲突、跨校区无权限、批量部分失败、归属争议超时、导出审批未通过 | PC 管理端需覆盖总部/区域/校区/主管数据范围、全量脱敏/明文审批、批量操作确认、处理进度、审批轨迹和异常兜底。 建议 Figma Frame:CRM-异常数据处理;需补齐正常、空态、加载、无权限、处理中、成功和失败状态。 |
| PC Web 管理端 | 公海池与保护期规则 | CRM 管理员、销售主管 | 配置公海领取、保护期、回收、转派、跨校区流转和超时提醒规则 | CRM PC 管理端采用统一后台框架,左侧为线索/客户/公海/异常导航,中部为全量列表和批量处理区,右侧使用详情抽屉展示客户画像、跟进时间轴、重复候选、归属记录、审批日志和审计链路。 | 全量查询、批量查重、合并客户、恢复误合并、重新分配、归属仲裁、异常关闭、导出审批 | 线索编号、家长手机号、学员姓名、来源渠道、校区、归属顾问、保护期、重复候选、仲裁状态、异常原因 | 重复客户、保护期冲突、跨校区无权限、批量部分失败、归属争议超时、导出审批未通过 | PC 管理端需覆盖总部/区域/校区/主管数据范围、全量脱敏/明文审批、批量操作确认、处理进度、审批轨迹和异常兜底。 建议 Figma Frame:CRM-公海池与保护期规则;需补齐正常、空态、加载、无权限、处理中、成功和失败状态。 |
| PC Web 管理端 | CRM 数据导入导出审批 | CRM 管理员、销售主管/安全审计员 | 导入线索并查看失败明细,导出客户数据需按敏感数据规则审批 | CRM PC 管理端采用统一后台框架,左侧为线索/客户/公海/异常导航,中部为全量列表和批量处理区,右侧使用详情抽屉展示客户画像、跟进时间轴、重复候选、归属记录、审批日志和审计链路。 | 全量查询、批量查重、合并客户、恢复误合并、重新分配、归属仲裁、异常关闭、导出审批 | 线索编号、家长手机号、学员姓名、来源渠道、校区、归属顾问、保护期、重复候选、仲裁状态、异常原因 | 重复客户、保护期冲突、跨校区无权限、批量部分失败、归属争议超时、导出审批未通过 | PC 管理端需覆盖总部/区域/校区/主管数据范围、全量脱敏/明文审批、批量操作确认、处理进度、审批轨迹和异常兜底。 建议 Figma Frame:CRM-crm_数据导入导出审批;需补齐正常、空态、加载、无权限、处理中、成功和失败状态。 |
| 迪诺学堂教师端 App/小程序 | 销售工作台 | 课程顾问/销售人员 | 查看本人线索、客户、跟进提醒、试听邀约和转化任务;不提供 PC Web 入口 | 迪诺学堂教师端 App/小程序采用移动端任务流,首页展示今日跟进、我的线索、试听邀约、市场活动线索和归属提醒;详情页突出拨打电话、添加跟进、预约试听、提交申诉和下一步任务。 | 新增线索、记录跟进、拨打电话、预约试听、提交反馈、申请归属、查看提醒、转化跟进 | 线索编号、家长手机号、学员姓名、意向课程、来源活动、跟进状态、下次跟进、试听课次、撞单提示、申诉进度 | 移动端无 PC 权限、重复线索、非本人线索、保护期冲突、超时未跟进、试听未到访、网络提交失败 | 销售人员和市场人员不绘制 PC Web 操作原型;移动端必须体现本人数据范围、越权提示、脱敏字段、撞单提示和消息待办。 建议 Figma Frame:CRM-销售工作台;需补齐正常、空态、加载、无权限、处理中、成功和失败状态。 |
| 迪诺学堂教师端 App/小程序 | 我的线索池 | 课程顾问/销售人员 | 查看本人负责、本人创建、本人协作和授权分配的线索 | 迪诺学堂教师端 App/小程序采用移动端任务流,首页展示今日跟进、我的线索、试听邀约、市场活动线索和归属提醒;详情页突出拨打电话、添加跟进、预约试听、提交申诉和下一步任务。 | 新增线索、记录跟进、拨打电话、预约试听、提交反馈、申请归属、查看提醒、转化跟进 | 线索编号、家长手机号、学员姓名、意向课程、来源活动、跟进状态、下次跟进、试听课次、撞单提示、申诉进度 | 移动端无 PC 权限、重复线索、非本人线索、保护期冲突、超时未跟进、试听未到访、网络提交失败 | 销售人员和市场人员不绘制 PC Web 操作原型;移动端必须体现本人数据范围、越权提示、脱敏字段、撞单提示和消息待办。 建议 Figma Frame:CRM-我的线索池;需补齐正常、空态、加载、无权限、处理中、成功和失败状态。 |
| 迪诺学堂教师端 App/小程序 | 线索详情与跟进 | 课程顾问/销售人员 | 查看授权字段、跟进时间轴、撞单提示、保护期和下一步动作 | 迪诺学堂教师端 App/小程序采用移动端任务流,首页展示今日跟进、我的线索、试听邀约、市场活动线索和归属提醒;详情页突出拨打电话、添加跟进、预约试听、提交申诉和下一步任务。 | 新增线索、记录跟进、拨打电话、预约试听、提交反馈、申请归属、查看提醒、转化跟进 | 线索编号、家长手机号、学员姓名、意向课程、来源活动、跟进状态、下次跟进、试听课次、撞单提示、申诉进度 | 移动端无 PC 权限、重复线索、非本人线索、保护期冲突、超时未跟进、试听未到访、网络提交失败 | 销售人员和市场人员不绘制 PC Web 操作原型;移动端必须体现本人数据范围、越权提示、脱敏字段、撞单提示和消息待办。 建议 Figma Frame:CRM-线索详情与跟进;需补齐正常、空态、加载、无权限、处理中、成功和失败状态。 |
| 迪诺学堂教师端 App/小程序 | 新增线索 | 课程顾问/销售人员/市场人员 | 录入家长手机号、学员姓名、意向课程、来源渠道并实时查重 | 迪诺学堂教师端 App/小程序采用移动端任务流,首页展示今日跟进、我的线索、试听邀约、市场活动线索和归属提醒;详情页突出拨打电话、添加跟进、预约试听、提交申诉和下一步任务。 | 新增线索、记录跟进、拨打电话、预约试听、提交反馈、申请归属、查看提醒、转化跟进 | 线索编号、家长手机号、学员姓名、意向课程、来源活动、跟进状态、下次跟进、试听课次、撞单提示、申诉进度 | 移动端无 PC 权限、重复线索、非本人线索、保护期冲突、超时未跟进、试听未到访、网络提交失败 | 销售人员和市场人员不绘制 PC Web 操作原型;移动端必须体现本人数据范围、越权提示、脱敏字段、撞单提示和消息待办。 建议 Figma Frame:CRM-新增线索;需补齐正常、空态、加载、无权限、处理中、成功和失败状态。 |
| 迪诺学堂教师端 App/小程序 | 试听邀约 | 课程顾问/销售人员 | 选择课程、校区、课次,发送试听通知并跟踪到访和反馈 | 迪诺学堂教师端 App/小程序采用移动端任务流,首页展示今日跟进、我的线索、试听邀约、市场活动线索和归属提醒;详情页突出拨打电话、添加跟进、预约试听、提交申诉和下一步任务。 | 新增线索、记录跟进、拨打电话、预约试听、提交反馈、申请归属、查看提醒、转化跟进 | 线索编号、家长手机号、学员姓名、意向课程、来源活动、跟进状态、下次跟进、试听课次、撞单提示、申诉进度 | 移动端无 PC 权限、重复线索、非本人线索、保护期冲突、超时未跟进、试听未到访、网络提交失败 | 销售人员和市场人员不绘制 PC Web 操作原型;移动端必须体现本人数据范围、越权提示、脱敏字段、撞单提示和消息待办。 建议 Figma Frame:CRM-试听邀约;需补齐正常、空态、加载、无权限、处理中、成功和失败状态。 |
| 迪诺学堂教师端 App/小程序 | 我的客户 | 课程顾问/销售人员 | 查看已转客户、服务状态、合同摘要、续费提醒和下一次跟进 | 迪诺学堂教师端 App/小程序采用移动端任务流,首页展示今日跟进、我的线索、试听邀约、市场活动线索和归属提醒;详情页突出拨打电话、添加跟进、预约试听、提交申诉和下一步任务。 | 新增线索、记录跟进、拨打电话、预约试听、提交反馈、申请归属、查看提醒、转化跟进 | 线索编号、家长手机号、学员姓名、意向课程、来源活动、跟进状态、下次跟进、试听课次、撞单提示、申诉进度 | 移动端无 PC 权限、重复线索、非本人线索、保护期冲突、超时未跟进、试听未到访、网络提交失败 | 销售人员和市场人员不绘制 PC Web 操作原型;移动端必须体现本人数据范围、越权提示、脱敏字段、撞单提示和消息待办。 建议 Figma Frame:CRM-我的客户;需补齐正常、空态、加载、无权限、处理中、成功和失败状态。 |
| 迪诺学堂教师端 App/小程序 | 市场线索工作台 | 市场人员 | 查看本人渠道/活动线索、扫码报名、活动归因和转销售状态;不提供 PC Web 入口 | 迪诺学堂教师端 App/小程序采用移动端任务流,首页展示今日跟进、我的线索、试听邀约、市场活动线索和归属提醒;详情页突出拨打电话、添加跟进、预约试听、提交申诉和下一步任务。 | 新增线索、记录跟进、拨打电话、预约试听、提交反馈、申请归属、查看提醒、转化跟进 | 线索编号、家长手机号、学员姓名、意向课程、来源活动、跟进状态、下次跟进、试听课次、撞单提示、申诉进度 | 移动端无 PC 权限、重复线索、非本人线索、保护期冲突、超时未跟进、试听未到访、网络提交失败 | 销售人员和市场人员不绘制 PC Web 操作原型;移动端必须体现本人数据范围、越权提示、脱敏字段、撞单提示和消息待办。 建议 Figma Frame:CRM-市场线索工作台;需补齐正常、空态、加载、无权限、处理中、成功和失败状态。 |
| 迪诺学堂教师端 App/小程序 | 线索归属申诉 | 课程顾问/销售人员/市场人员 | 对归属异常、撞单结果、回收或重新分配结果发起申诉并查看处理进度 | 迪诺学堂教师端 App/小程序采用移动端任务流,首页展示今日跟进、我的线索、试听邀约、市场活动线索和归属提醒;详情页突出拨打电话、添加跟进、预约试听、提交申诉和下一步任务。 | 新增线索、记录跟进、拨打电话、预约试听、提交反馈、申请归属、查看提醒、转化跟进 | 线索编号、家长手机号、学员姓名、意向课程、来源活动、跟进状态、下次跟进、试听课次、撞单提示、申诉进度 | 移动端无 PC 权限、重复线索、非本人线索、保护期冲突、超时未跟进、试听未到访、网络提交失败 | 销售人员和市场人员不绘制 PC Web 操作原型;移动端必须体现本人数据范围、越权提示、脱敏字段、撞单提示和消息待办。 建议 Figma Frame:CRM-线索归属申诉;需补齐正常、空态、加载、无权限、处理中、成功和失败状态。 |
| 迪诺学堂教师端 App/小程序 | 跟进超时提醒 | 课程顾问/销售人员/市场人员 | 接收跟进超时、保护期到期、公海回收和试听未到访提醒并处理 | 迪诺学堂教师端 App/小程序采用移动端任务流,首页展示今日跟进、我的线索、试听邀约、市场活动线索和归属提醒;详情页突出拨打电话、添加跟进、预约试听、提交申诉和下一步任务。 | 新增线索、记录跟进、拨打电话、预约试听、提交反馈、申请归属、查看提醒、转化跟进 | 线索编号、家长手机号、学员姓名、意向课程、来源活动、跟进状态、下次跟进、试听课次、撞单提示、申诉进度 | 移动端无 PC 权限、重复线索、非本人线索、保护期冲突、超时未跟进、试听未到访、网络提交失败 | 销售人员和市场人员不绘制 PC Web 操作原型;移动端必须体现本人数据范围、越权提示、脱敏字段、撞单提示和消息待办。 建议 Figma Frame:CRM-跟进超时提醒;需补齐正常、空态、加载、无权限、处理中、成功和失败状态。 |
| 迪诺学堂教师端 App/小程序 | 移动端无 PC 权限提示 | 课程顾问/销售人员/市场人员 | 当移动端角色访问 PC 链接或越权数据时展示原因、可用入口和申诉路径 | 迪诺学堂教师端 App/小程序采用移动端任务流,首页展示今日跟进、我的线索、试听邀约、市场活动线索和归属提醒;详情页突出拨打电话、添加跟进、预约试听、提交申诉和下一步任务。 | 新增线索、记录跟进、拨打电话、预约试听、提交反馈、申请归属、查看提醒、转化跟进 | 线索编号、家长手机号、学员姓名、意向课程、来源活动、跟进状态、下次跟进、试听课次、撞单提示、申诉进度 | 移动端无 PC 权限、重复线索、非本人线索、保护期冲突、超时未跟进、试听未到访、网络提交失败 | 销售人员和市场人员不绘制 PC Web 操作原型;移动端必须体现本人数据范围、越权提示、脱敏字段、撞单提示和消息待办。 建议 Figma Frame:CRM-移动端无_pc_权限提示;需补齐正常、空态、加载、无权限、处理中、成功和失败状态。 |
09 · 页面到接口的前后端闭环矩阵
把原型页面、后端接口、数据对象、状态和消息审批绑定到一起
设计原型时,每个关键页面必须能解释前端展示什么、后端提交什么、状态怎么变、异常怎么处理。| 原型页面 | 关键接口 | 关联对象 | 状态流 | 审批/权限触发 | 消息/待办触达 | 原型验收要求 |
|---|---|---|---|---|---|---|
| CRM 管理总览 | GET /api/v1/crm/admin/leads | Lead | 新线索 -> 待分配 -> 已分配 -> 跟进中 -> 已预约试听 -> 试听完成 -> 已转化 -> 已流失 -> 已回收公海 -> 异常待处理 | 敏感客户信息导出审批:导出手机号、家庭信息、跟进记录、合同摘要等敏感数据 | 撞单待处理提醒 -> 销售主管/CRM 管理员 | 原型需展示入口、主按钮、禁用原因、提交中、成功、失败、无权限、空状态和异常转人工入口 |
| 线索全量管理 | GET /api/v1/crm/admin/leads | Lead | 新线索 -> 待分配 -> 已分配 -> 跟进中 -> 已预约试听 -> 试听完成 -> 已转化 -> 已流失 -> 已回收公海 -> 异常待处理 | 敏感客户信息导出审批:导出手机号、家庭信息、跟进记录、合同摘要等敏感数据 | 撞单待处理提醒 -> 销售主管/CRM 管理员 | 原型需展示入口、主按钮、禁用原因、提交中、成功、失败、无权限、空状态和异常转人工入口 |
| 客户全量档案 | GET /api/v1/crm/duplicate-candidates | Customer/Guardian/Student | 待查重 -> 疑似重复 -> 合并待确认 -> 已合并 -> 误合并待恢复 -> 已恢复 -> 无需合并 | 客户去重合并审批:涉及已转客户、已有合同、跨校区或高价值客户时触发审批 | 撞单待处理提醒 -> 销售主管/CRM 管理员 | 原型需展示入口、主按钮、禁用原因、提交中、成功、失败、无权限、空状态和异常转人工入口 |
| 去重合并工作台 | GET /api/v1/crm/duplicate-candidates | Customer/Guardian/Student | 待查重 -> 疑似重复 -> 合并待确认 -> 已合并 -> 误合并待恢复 -> 已恢复 -> 无需合并 | 客户去重合并审批:涉及已转客户、已有合同、跨校区或高价值客户时触发审批 | 撞单待处理提醒 -> 销售主管/CRM 管理员 | 原型需展示入口、主按钮、禁用原因、提交中、成功、失败、无权限、空状态和异常转人工入口 |
| 线索归属重新分配 | POST /api/v1/crm/leads/reassign | LeadAssignment | 未归属 -> 本人负责 -> 团队协作 -> 主管待分配 -> 跨校区待审批 -> 已重新分配 -> 归属争议中 -> 已仲裁 -> 已回收 | 线索重新分配审批:跨校区、批量、保护期内、主管外团队或高价值线索重新分配 | 归属变更通知 -> 原责任人/新责任人/销售主管 | 原型需展示入口、主按钮、禁用原因、提交中、成功、失败、无权限、空状态和异常转人工入口 |
| 归属仲裁审批 | POST/PATCH /api/v1/crm/merge-disputes | LeadAssignment | 草稿 -> 已提交 -> 主管处理中 -> 需补充材料 -> 已通过 -> 已驳回 -> 已关闭 | 归属仲裁审批:销售/市场对撞单、回收、重新分配或活动归因结果有争议 | 归属变更通知 -> 原责任人/新责任人/销售主管 | 原型需展示入口、主按钮、禁用原因、提交中、成功、失败、无权限、空状态和异常转人工入口 |
| 异常数据处理 | POST /api/v1/crm/leads/reassign | TrialLesson | 未归属 -> 本人负责 -> 团队协作 -> 主管待分配 -> 跨校区待审批 -> 已重新分配 -> 归属争议中 -> 已仲裁 -> 已回收 | 误合并恢复审批:已合并客户需要拆分或恢复历史快照 | 撞单待处理提醒 -> 销售主管/CRM 管理员 | 原型需展示入口、主按钮、禁用原因、提交中、成功、失败、无权限、空状态和异常转人工入口 |
| 公海池与保护期规则 | GET /api/v1/crm/duplicate-candidates | TrialFeedback | 待跟进 -> 今日待办 -> 已完成 -> 超时 -> 已提醒 -> 已关闭 -> 转人工 | 线索重新分配审批:跨校区、批量、保护期内、主管外团队或高价值线索重新分配 | 试听结果提醒 -> 课程顾问/教师/销售主管 | 原型需展示入口、主按钮、禁用原因、提交中、成功、失败、无权限、空状态和异常转人工入口 |
| CRM 数据导入导出审批 | POST/PATCH /api/v1/crm/merge-disputes | LeadAssignment | 待预约 -> 已预约 -> 待到访 -> 已到访 -> 未到访 -> 教师已反馈 -> 待二次跟进 -> 已转化 -> 已流失 | 归属仲裁审批:销售/市场对撞单、回收、重新分配或活动归因结果有争议 | 撞单待处理提醒 -> 销售主管/CRM 管理员 | 原型需展示入口、主按钮、禁用原因、提交中、成功、失败、无权限、空状态和异常转人工入口 |
| 销售工作台 | GET /api/v1/crm/mobile/workbench | Lead | 待跟进 -> 今日待办 -> 已完成 -> 超时 -> 已提醒 -> 已关闭 -> 转人工 | 敏感客户信息导出审批:导出手机号、家庭信息、跟进记录、合同摘要等敏感数据 | 新线索分配提醒 -> 课程顾问/销售人员 | 原型需展示入口、主按钮、禁用原因、提交中、成功、失败、无权限、空状态和异常转人工入口 |
| 我的线索池 | POST/GET /api/v1/crm/my-leads | Lead | 新线索 -> 待分配 -> 已分配 -> 跟进中 -> 已预约试听 -> 试听完成 -> 已转化 -> 已流失 -> 已回收公海 -> 异常待处理 | 客户去重合并审批:涉及已转客户、已有合同、跨校区或高价值客户时触发审批 | 新线索分配提醒 -> 课程顾问/销售人员 | 原型需展示入口、主按钮、禁用原因、提交中、成功、失败、无权限、空状态和异常转人工入口 |
| 线索详情与跟进 | POST /api/v1/crm/follow-records | Lead | 待跟进 -> 今日待办 -> 已完成 -> 超时 -> 已提醒 -> 已关闭 -> 转人工 | 误合并恢复审批:已合并客户需要拆分或恢复历史快照 | 跟进超时提醒 -> 课程顾问/销售人员/销售主管 | 原型需展示入口、主按钮、禁用原因、提交中、成功、失败、无权限、空状态和异常转人工入口 |
10 · 原型、UI、研发、测试交付补充
把关键闭环补强为下一阶段可执行任务
本章节为正式 PRD 的交付要求,面向原型图、UI、开发、联调和测试分工。| 能力域 | 功能补充要求 | 原型交付要求 | UI 交互要求 | 研发实现要求 | 测试验收要求 |
|---|---|---|---|---|---|
| 角色终端 | 补齐 CRM 角色终端边界:管理员/主管使用 PC Web 管理端处理全量治理、审批、去重、重分配和异常;课程顾问、销售人员、市场人员只使用迪诺学堂教师端 App/小程序处理本人授权数据。 | 角色终端矩阵、PC CRM 管理总览、教师端销售工作台、教师端市场线索工作台、移动端无 PC 权限提示 需要在原型中拆到列表、详情、表单、弹窗、空状态、失败态、无权限态和处理进度。 | UI 需清晰呈现状态标签、流程节点、主次按钮、危险操作确认、移动/平板/TV 适配和错误提示;PC 管理端遵循统一框架,仅输出信息架构和交互说明。 | 后端需提供接口幂等、权限校验、状态机、审计日志、消息/审批触发、异步补偿和跨模块数据一致性保障。 | 测试需覆盖主流程、异常流、权限流、重复提交、批量部分失败和数据一致性;销售/市场无 PC Web 操作入口,移动端只显示本人/授权数据;管理员 PC 端可处理全量治理事项且全程审计。 |
| 客户去重 | 补齐撞单提示、合并申请、仲裁审批、恢复任务、跟进记录归并和审计链路。 | 线索详情、客户详情、合并仲裁页 需要在原型中拆到列表、详情、表单、弹窗、空状态、失败态、无权限态和处理进度。 | UI 需清晰呈现状态标签、流程节点、主次按钮、危险操作确认、移动/平板/TV 适配和错误提示;PC 管理端遵循统一框架,仅输出信息架构和交互说明。 | 后端需提供接口幂等、权限校验、状态机、审计日志、消息/审批触发、异步补偿和跨模块数据一致性保障。 | 测试需覆盖主流程、异常流、权限流、重复提交、批量部分失败和数据一致性;误合并可恢复,恢复后跟进、试听、合同关联不丢失。 |
| 试听闭环 | 补齐试听课表、到访签到、未到访唤醒、教师反馈、顾问转化任务和流失原因。 | 试听预约、试听反馈、顾问跟进 需要在原型中拆到列表、详情、表单、弹窗、空状态、失败态、无权限态和处理进度。 | UI 需清晰呈现状态标签、流程节点、主次按钮、危险操作确认、移动/平板/TV 适配和错误提示;PC 管理端遵循统一框架,仅输出信息架构和交互说明。 | 后端需提供接口幂等、权限校验、状态机、审计日志、消息/审批触发、异步补偿和跨模块数据一致性保障。 | 测试需覆盖主流程、异常流、权限流、重复提交、批量部分失败和数据一致性;试听结束后必须进入转化、复约、流失或服务观察之一。 |
| 归属规则 | 增加公海规则配置、保护期倒计时、回收原因、跨校区申请和归属变更审计。 | 公海池、线索分配、归属变更 需要在原型中拆到列表、详情、表单、弹窗、空状态、失败态、无权限态和处理进度。 | UI 需清晰呈现状态标签、流程节点、主次按钮、危险操作确认、移动/平板/TV 适配和错误提示;PC 管理端遵循统一框架,仅输出信息架构和交互说明。 | 后端需提供接口幂等、权限校验、状态机、审计日志、消息/审批触发、异步补偿和跨模块数据一致性保障。 | 测试需覆盖主流程、异常流、权限流、重复提交、批量部分失败和数据一致性;线索归属变化能追溯来源、审批和当前责任人。 |
11 · 数据对象与字段字典
明确页面、接口、数据库共同使用的数据语言
字段涉及敏感、人脸、财务、绩效时,原型需体现脱敏、授权和审计。核心对象
| 对象 | 说明 |
|---|---|
| CRMRoleTerminalPolicy | CRM 角色终端与字段权限策略;落地表:crm_role_terminal_policy |
| Lead | 销售线索主表;落地表:crm_lead |
| CustomerFamily | 客户家庭档案;落地表:crm_customer_family |
| Guardian | 监护人/家长资料;落地表:crm_guardian |
| Student | 学员基础档案;落地表:stu_student |
| FollowRecord | 线索/客户跟进记录;落地表:crm_follow_record |
| TrialLesson | 试听预约;落地表:crm_trial_lesson |
| TrialFeedback | 试听反馈与转化建议;落地表:crm_trial_feedback |
| LeadAssignment | 线索分配、重分配与申诉;落地表:crm_lead_assignment |
| DuplicateCandidate | 重复线索/客户候选;落地表:crm_duplicate_candidate |
| MergeDispute | 撞单、合并与归属仲裁;落地表:crm_merge_dispute |
关联引用对象
| 对象 | 说明 |
|---|---|
| Organization | 集团、区域、校区、部门组织树;引用来源:FND / sys_organization |
| User/Employee | 统一登录账号;引用来源:FND / sys_user |
| Employee | 员工基础档案;引用来源:FND / sys_employee |
| Role | 角色定义;引用来源:FND / sys_role |
| ApprovalFlow | 审批流配置;引用来源:FND / sys_approval_flow |
| MessageTemplate | 消息模板与多端触达配置;引用来源:FND / sys_message_template |
| AuditLog | 全平台操作审计日志;引用来源:FND / sys_audit_log |
| IntegrationLog | 接口调用日志;引用来源:OPEN / int_integration_log |
| SensitiveFieldPolicy | 敏感字段脱敏策略;引用来源:SEC / sec_sensitive_field_policy |
| MarketingCampaign | 营销活动主数据;引用来源:MKT / mkt_campaign |
| CampaignFormSubmit | 活动表单留资;引用来源:MKT / mkt_form_submit |
| Course/Product | 课程产品;引用来源:EDU / edu_course |
| Contract | 合同主表;引用来源:CON / con_contract |
| Order | 订单和应收;引用来源:CON / ord_order |
| ServiceTicket | 服务工单;引用来源:SER / ser_service_ticket |
完整字段字典
| 对象 | 字段 | 类型 | 必填 | 规则 | 数据级别 |
|---|---|---|---|---|---|
| CRMRoleTerminalPolicy | id | BIGINT | 是 | 主键,雪花或号段生成,禁止复用 | 普通 |
| CRMRoleTerminalPolicy | tenant_id | BIGINT | 是 | 集团/租户隔离字段,所有查询必须带租户上下文 | 普通 |
| CRMRoleTerminalPolicy | org_id | BIGINT | 否 | 所属组织,集团级或公共配置为空 | 普通 |
| CRMRoleTerminalPolicy | campus_id | BIGINT | 否 | 所属校区,跨校区或总部级数据为空 | 普通 |
| CRMRoleTerminalPolicy | created_by | BIGINT | 是 | 创建人账号 ID | 普通 |
| CRMRoleTerminalPolicy | created_at | DATETIME | 是 | 创建时间 | 普通 |
| CRMRoleTerminalPolicy | updated_by | BIGINT | 否 | 最后更新人账号 ID | 普通 |
| CRMRoleTerminalPolicy | updated_at | DATETIME | 否 | 最后更新时间 | 普通 |
| CRMRoleTerminalPolicy | is_deleted | TINYINT | 是 | 是否已删除,0 未删除,1 已删除 | 普通 |
| CRMRoleTerminalPolicy | deleted_at | DATETIME | 否 | 删除时间,未删除为空 | 普通 |
| CRMRoleTerminalPolicy | deleted_by | BIGINT | 否 | 删除人账号 ID,未删除为空 | 普通 |
| CRMRoleTerminalPolicy | version | INT | 是 | 乐观锁版本号,写操作必须校验 | 普通 |
| CRMRoleTerminalPolicy | role_code | VARCHAR(64) | 是 | 角色编码 | 普通 |
| CRMRoleTerminalPolicy | terminal_scope | VARCHAR(64) | 是 | PC Web/教师 App/教师小程序 | 普通 |
| CRMRoleTerminalPolicy | menu_codes | JSON | 是 | 可见菜单 | 普通 |
| CRMRoleTerminalPolicy | button_codes | JSON | 否 | 可见按钮 | 普通 |
| CRMRoleTerminalPolicy | field_policy_json | JSON | 是 | 字段明文/脱敏/隐藏策略 | 普通 |
| CRMRoleTerminalPolicy | data_scope_rule | JSON | 是 | 数据范围规则 | 普通 |
| CRMRoleTerminalPolicy | enabled | TINYINT | 是 | 是否启用 | 普通 |
| Lead | id | BIGINT | 是 | 主键,雪花或号段生成,禁止复用 | 普通 |
| Lead | tenant_id | BIGINT | 是 | 集团/租户隔离字段,所有查询必须带租户上下文 | 普通 |
| Lead | org_id | BIGINT | 否 | 所属组织,集团级或公共配置为空 | 普通 |
| Lead | campus_id | BIGINT | 否 | 所属校区,跨校区或总部级数据为空 | 普通 |
| Lead | created_by | BIGINT | 是 | 创建人账号 ID | 普通 |
| Lead | created_at | DATETIME | 是 | 创建时间 | 普通 |
| Lead | updated_by | BIGINT | 否 | 最后更新人账号 ID | 普通 |
| Lead | updated_at | DATETIME | 否 | 最后更新时间 | 普通 |
| Lead | is_deleted | TINYINT | 是 | 是否已删除,0 未删除,1 已删除 | 普通 |
| Lead | deleted_at | DATETIME | 否 | 删除时间,未删除为空 | 普通 |
| Lead | deleted_by | BIGINT | 否 | 删除人账号 ID,未删除为空 | 普通 |
| Lead | version | INT | 是 | 乐观锁版本号,写操作必须校验 | 普通 |
| Lead | lead_no | VARCHAR(64) | 是 | 线索编号,唯一 | 普通 |
| Lead | source_channel | VARCHAR(64) | 是 | 来源渠道 | 普通 |
| Lead | campaign_id | BIGINT | 否 | 来源活动 ID | 普通 |
| Lead | guardian_mobile | VARCHAR(32) | 是 | 家长手机号,敏感 | 敏感 |
| Lead | student_name | VARCHAR(64) | 否 | 学员姓名 | 普通 |
| Lead | intent_course_id | BIGINT | 否 | 意向课程 | 普通 |
| Lead | owner_id | BIGINT | 否 | 当前归属销售/顾问 | 普通 |
| Lead | protect_until | DATETIME | 否 | 保护期截止时间 | 普通 |
| Lead | duplicate_status | VARCHAR(32) | 是 | 未查重/疑似重复/已合并/已忽略 | 普通 |
| Lead | biz_status | VARCHAR(32) | 是 | 业务状态,取值来自状态机字典 | 普通 |
| Lead | remark | VARCHAR(512) | 否 | 业务备注,敏感内容按权限脱敏 | 普通 |
| CustomerFamily | id | BIGINT | 是 | 主键,雪花或号段生成,禁止复用 | 普通 |
| CustomerFamily | tenant_id | BIGINT | 是 | 集团/租户隔离字段,所有查询必须带租户上下文 | 普通 |
| CustomerFamily | org_id | BIGINT | 否 | 所属组织,集团级或公共配置为空 | 普通 |
| CustomerFamily | campus_id | BIGINT | 否 | 所属校区,跨校区或总部级数据为空 | 普通 |
| CustomerFamily | created_by | BIGINT | 是 | 创建人账号 ID | 普通 |
| CustomerFamily | created_at | DATETIME | 是 | 创建时间 | 普通 |
| CustomerFamily | updated_by | BIGINT | 否 | 最后更新人账号 ID | 普通 |
| CustomerFamily | updated_at | DATETIME | 否 | 最后更新时间 | 普通 |
| CustomerFamily | is_deleted | TINYINT | 是 | 是否已删除,0 未删除,1 已删除 | 普通 |
| CustomerFamily | deleted_at | DATETIME | 否 | 删除时间,未删除为空 | 普通 |
| CustomerFamily | deleted_by | BIGINT | 否 | 删除人账号 ID,未删除为空 | 普通 |
| CustomerFamily | version | INT | 是 | 乐观锁版本号,写操作必须校验 | 普通 |
| CustomerFamily | family_no | VARCHAR(64) | 是 | 家庭编号,唯一 | 普通 |
| CustomerFamily | primary_guardian_id | BIGINT | 否 | 主监护人 ID | 普通 |
| CustomerFamily | student_id | BIGINT | 否 | 主学员 ID | 普通 |
| CustomerFamily | owner_id | BIGINT | 否 | 客户归属人 | 普通 |
| CustomerFamily | risk_level | VARCHAR(32) | 否 | 风险等级 | 普通 |
| CustomerFamily | last_follow_at | DATETIME | 否 | 最近跟进时间 | 普通 |
| CustomerFamily | biz_status | VARCHAR(32) | 是 | 业务状态,取值来自状态机字典 | 普通 |
| CustomerFamily | remark | VARCHAR(512) | 否 | 业务备注,敏感内容按权限脱敏 | 普通 |
| Guardian | id | BIGINT | 是 | 主键,雪花或号段生成,禁止复用 | 普通 |
| Guardian | tenant_id | BIGINT | 是 | 集团/租户隔离字段,所有查询必须带租户上下文 | 普通 |
| Guardian | org_id | BIGINT | 否 | 所属组织,集团级或公共配置为空 | 普通 |
| Guardian | campus_id | BIGINT | 否 | 所属校区,跨校区或总部级数据为空 | 普通 |
| Guardian | created_by | BIGINT | 是 | 创建人账号 ID | 普通 |
| Guardian | created_at | DATETIME | 是 | 创建时间 | 普通 |
| Guardian | updated_by | BIGINT | 否 | 最后更新人账号 ID | 普通 |
| Guardian | updated_at | DATETIME | 否 | 最后更新时间 | 普通 |
| Guardian | is_deleted | TINYINT | 是 | 是否已删除,0 未删除,1 已删除 | 普通 |
| Guardian | deleted_at | DATETIME | 否 | 删除时间,未删除为空 | 普通 |
| Guardian | deleted_by | BIGINT | 否 | 删除人账号 ID,未删除为空 | 普通 |
| Guardian | version | INT | 是 | 乐观锁版本号,写操作必须校验 | 普通 |
| Guardian | family_id | BIGINT | 是 | 家庭 ID | 普通 |
| Guardian | guardian_name | VARCHAR(64) | 是 | 监护人姓名 | 普通 |
| Guardian | mobile | VARCHAR(32) | 是 | 手机号,敏感 | 敏感 |
| Guardian | relationship | VARCHAR(32) | 是 | 与学员关系 | 普通 |
| Guardian | wechat_openid | VARCHAR(128) | 否 | 微信 OpenID,敏感 | 敏感 |
| Guardian | verify_status | VARCHAR(32) | 是 | 未验证/已验证/已解绑 | 普通 |
| Student | id | BIGINT | 是 | 主键,雪花或号段生成,禁止复用 | 普通 |
| Student | tenant_id | BIGINT | 是 | 集团/租户隔离字段,所有查询必须带租户上下文 | 普通 |
| Student | org_id | BIGINT | 否 | 所属组织,集团级或公共配置为空 | 普通 |
| Student | campus_id | BIGINT | 否 | 所属校区,跨校区或总部级数据为空 | 普通 |
| Student | created_by | BIGINT | 是 | 创建人账号 ID | 普通 |
| Student | created_at | DATETIME | 是 | 创建时间 | 普通 |
| Student | updated_by | BIGINT | 否 | 最后更新人账号 ID | 普通 |
| Student | updated_at | DATETIME | 否 | 最后更新时间 | 普通 |
| Student | is_deleted | TINYINT | 是 | 是否已删除,0 未删除,1 已删除 | 普通 |
| Student | deleted_at | DATETIME | 否 | 删除时间,未删除为空 | 普通 |
| Student | deleted_by | BIGINT | 否 | 删除人账号 ID,未删除为空 | 普通 |
| Student | version | INT | 是 | 乐观锁版本号,写操作必须校验 | 普通 |
| Student | student_no | VARCHAR(64) | 是 | 学员编号,唯一 | 普通 |
| Student | family_id | BIGINT | 否 | 家庭 ID | 普通 |
| Student | student_name | VARCHAR(64) | 是 | 学员姓名 | 普通 |
| Student | gender | VARCHAR(16) | 否 | 性别 | 普通 |
| Student | birthday | DATE | 否 | 出生日期 | 普通 |
| Student | grade | VARCHAR(32) | 否 | 年级 | 普通 |
| Student | school_name | VARCHAR(128) | 否 | 学校名称 | 普通 |
| Student | biz_status | VARCHAR(32) | 是 | 业务状态,取值来自状态机字典 | 普通 |
| Student | remark | VARCHAR(512) | 否 | 业务备注,敏感内容按权限脱敏 | 普通 |
| FollowRecord | id | BIGINT | 是 | 主键,雪花或号段生成,禁止复用 | 普通 |
| FollowRecord | tenant_id | BIGINT | 是 | 集团/租户隔离字段,所有查询必须带租户上下文 | 普通 |
| FollowRecord | org_id | BIGINT | 否 | 所属组织,集团级或公共配置为空 | 普通 |
| FollowRecord | campus_id | BIGINT | 否 | 所属校区,跨校区或总部级数据为空 | 普通 |
| FollowRecord | created_by | BIGINT | 是 | 创建人账号 ID | 普通 |
| FollowRecord | created_at | DATETIME | 是 | 创建时间 | 普通 |
| FollowRecord | updated_by | BIGINT | 否 | 最后更新人账号 ID | 普通 |
| FollowRecord | updated_at | DATETIME | 否 | 最后更新时间 | 普通 |
| FollowRecord | is_deleted | TINYINT | 是 | 是否已删除,0 未删除,1 已删除 | 普通 |
| FollowRecord | deleted_at | DATETIME | 否 | 删除时间,未删除为空 | 普通 |
| FollowRecord | deleted_by | BIGINT | 否 | 删除人账号 ID,未删除为空 | 普通 |
| FollowRecord | version | INT | 是 | 乐观锁版本号,写操作必须校验 | 普通 |
| FollowRecord | lead_id | BIGINT | 否 | 线索 ID | 普通 |
| FollowRecord | family_id | BIGINT | 否 | 客户家庭 ID | 普通 |
| FollowRecord | owner_id | BIGINT | 是 | 跟进人 ID | 普通 |
| FollowRecord | follow_type | VARCHAR(32) | 是 | 电话/微信/到访/试听/其他 | 普通 |
| FollowRecord | follow_content | TEXT | 是 | 跟进内容 | 普通 |
| FollowRecord | next_follow_at | DATETIME | 否 | 下次跟进时间 | 普通 |
| FollowRecord | follow_result | VARCHAR(32) | 是 | 有效/无效/待跟进/转化 | 普通 |
| TrialLesson | id | BIGINT | 是 | 主键,雪花或号段生成,禁止复用 | 普通 |
| TrialLesson | tenant_id | BIGINT | 是 | 集团/租户隔离字段,所有查询必须带租户上下文 | 普通 |
| TrialLesson | org_id | BIGINT | 否 | 所属组织,集团级或公共配置为空 | 普通 |
| TrialLesson | campus_id | BIGINT | 否 | 所属校区,跨校区或总部级数据为空 | 普通 |
| TrialLesson | created_by | BIGINT | 是 | 创建人账号 ID | 普通 |
| TrialLesson | created_at | DATETIME | 是 | 创建时间 | 普通 |
| TrialLesson | updated_by | BIGINT | 否 | 最后更新人账号 ID | 普通 |
| TrialLesson | updated_at | DATETIME | 否 | 最后更新时间 | 普通 |
| TrialLesson | is_deleted | TINYINT | 是 | 是否已删除,0 未删除,1 已删除 | 普通 |
| TrialLesson | deleted_at | DATETIME | 否 | 删除时间,未删除为空 | 普通 |
| TrialLesson | deleted_by | BIGINT | 否 | 删除人账号 ID,未删除为空 | 普通 |
| TrialLesson | version | INT | 是 | 乐观锁版本号,写操作必须校验 | 普通 |
| TrialLesson | trial_no | VARCHAR(64) | 是 | 试听编号,唯一 | 普通 |
| TrialLesson | lead_id | BIGINT | 否 | 线索 ID | 普通 |
| TrialLesson | student_id | BIGINT | 是 | 学员 ID | 普通 |
| TrialLesson | course_id | BIGINT | 是 | 试听课程 ID | 普通 |
| TrialLesson | lesson_time | DATETIME | 是 | 试听时间 | 普通 |
| TrialLesson | teacher_id | BIGINT | 否 | 试听教师 ID | 普通 |
| TrialLesson | trial_status | VARCHAR(32) | 是 | 待确认/已预约/已到访/未到访/已取消 | 普通 |
| TrialLesson | arrival_status | VARCHAR(32) | 否 | 到访状态 | 普通 |
| TrialFeedback | id | BIGINT | 是 | 主键,雪花或号段生成,禁止复用 | 普通 |
| TrialFeedback | tenant_id | BIGINT | 是 | 集团/租户隔离字段,所有查询必须带租户上下文 | 普通 |
| TrialFeedback | org_id | BIGINT | 否 | 所属组织,集团级或公共配置为空 | 普通 |
| TrialFeedback | campus_id | BIGINT | 否 | 所属校区,跨校区或总部级数据为空 | 普通 |
| TrialFeedback | created_by | BIGINT | 是 | 创建人账号 ID | 普通 |
| TrialFeedback | created_at | DATETIME | 是 | 创建时间 | 普通 |
| TrialFeedback | updated_by | BIGINT | 否 | 最后更新人账号 ID | 普通 |
| TrialFeedback | updated_at | DATETIME | 否 | 最后更新时间 | 普通 |
| TrialFeedback | is_deleted | TINYINT | 是 | 是否已删除,0 未删除,1 已删除 | 普通 |
| TrialFeedback | deleted_at | DATETIME | 否 | 删除时间,未删除为空 | 普通 |
| TrialFeedback | deleted_by | BIGINT | 否 | 删除人账号 ID,未删除为空 | 普通 |
| TrialFeedback | version | INT | 是 | 乐观锁版本号,写操作必须校验 | 普通 |
| TrialFeedback | trial_id | BIGINT | 是 | 试听预约 ID | 普通 |
| TrialFeedback | teacher_feedback | TEXT | 否 | 教师反馈 | 普通 |
| TrialFeedback | guardian_rating | DECIMAL(4,2) | 否 | 家长评分 | 普通 |
| TrialFeedback | next_action | VARCHAR(64) | 否 | 下一步动作 | 普通 |
| TrialFeedback | conversion_status | VARCHAR(32) | 是 | 待转化/已转化/暂不转化/失败 | 普通 |
| LeadAssignment | id | BIGINT | 是 | 主键,雪花或号段生成,禁止复用 | 普通 |
| LeadAssignment | tenant_id | BIGINT | 是 | 集团/租户隔离字段,所有查询必须带租户上下文 | 普通 |
| LeadAssignment | org_id | BIGINT | 否 | 所属组织,集团级或公共配置为空 | 普通 |
| LeadAssignment | campus_id | BIGINT | 否 | 所属校区,跨校区或总部级数据为空 | 普通 |
| LeadAssignment | created_by | BIGINT | 是 | 创建人账号 ID | 普通 |
| LeadAssignment | created_at | DATETIME | 是 | 创建时间 | 普通 |
| LeadAssignment | updated_by | BIGINT | 否 | 最后更新人账号 ID | 普通 |
| LeadAssignment | updated_at | DATETIME | 否 | 最后更新时间 | 普通 |
| LeadAssignment | is_deleted | TINYINT | 是 | 是否已删除,0 未删除,1 已删除 | 普通 |
| LeadAssignment | deleted_at | DATETIME | 否 | 删除时间,未删除为空 | 普通 |
| LeadAssignment | deleted_by | BIGINT | 否 | 删除人账号 ID,未删除为空 | 普通 |
| LeadAssignment | version | INT | 是 | 乐观锁版本号,写操作必须校验 | 普通 |
| LeadAssignment | assignment_no | VARCHAR(64) | 是 | 分配编号,唯一 | 普通 |
| LeadAssignment | lead_id | BIGINT | 是 | 线索 ID | 普通 |
| LeadAssignment | from_owner_id | BIGINT | 否 | 原归属人 | 普通 |
| LeadAssignment | to_owner_id | BIGINT | 是 | 新归属人 | 普通 |
| LeadAssignment | assignment_reason | VARCHAR(255) | 是 | 分配原因 | 普通 |
| LeadAssignment | assignment_status | VARCHAR(32) | 是 | 待处理/已生效/已驳回 | 普通 |
| LeadAssignment | approval_status | VARCHAR(32) | 否 | 审批状态,未发起为空 | 普通 |
| LeadAssignment | approval_instance_id | BIGINT | 否 | 关联审批实例 ID | 普通 |
| DuplicateCandidate | id | BIGINT | 是 | 主键,雪花或号段生成,禁止复用 | 普通 |
| DuplicateCandidate | tenant_id | BIGINT | 是 | 集团/租户隔离字段,所有查询必须带租户上下文 | 普通 |
| DuplicateCandidate | org_id | BIGINT | 否 | 所属组织,集团级或公共配置为空 | 普通 |
| DuplicateCandidate | campus_id | BIGINT | 否 | 所属校区,跨校区或总部级数据为空 | 普通 |
| DuplicateCandidate | created_by | BIGINT | 是 | 创建人账号 ID | 普通 |
| DuplicateCandidate | created_at | DATETIME | 是 | 创建时间 | 普通 |
| DuplicateCandidate | updated_by | BIGINT | 否 | 最后更新人账号 ID | 普通 |
| DuplicateCandidate | updated_at | DATETIME | 否 | 最后更新时间 | 普通 |
| DuplicateCandidate | is_deleted | TINYINT | 是 | 是否已删除,0 未删除,1 已删除 | 普通 |
| DuplicateCandidate | deleted_at | DATETIME | 否 | 删除时间,未删除为空 | 普通 |
| DuplicateCandidate | deleted_by | BIGINT | 否 | 删除人账号 ID,未删除为空 | 普通 |
| DuplicateCandidate | version | INT | 是 | 乐观锁版本号,写操作必须校验 | 普通 |
| DuplicateCandidate | candidate_no | VARCHAR(64) | 是 | 候选编号,唯一 | 普通 |
| DuplicateCandidate | source_biz_type | VARCHAR(64) | 是 | 来源对象类型 | 普通 |
| DuplicateCandidate | source_biz_id | BIGINT | 是 | 来源对象 ID | 普通 |
| DuplicateCandidate | matched_biz_id | BIGINT | 是 | 疑似重复对象 ID | 普通 |
| DuplicateCandidate | match_score | DECIMAL(8,4) | 是 | 匹配分数 | 普通 |
| DuplicateCandidate | handle_status | VARCHAR(32) | 是 | 待处理/已合并/已忽略 | 普通 |
| MergeDispute | id | BIGINT | 是 | 主键,雪花或号段生成,禁止复用 | 普通 |
| MergeDispute | tenant_id | BIGINT | 是 | 集团/租户隔离字段,所有查询必须带租户上下文 | 普通 |
| MergeDispute | org_id | BIGINT | 否 | 所属组织,集团级或公共配置为空 | 普通 |
| MergeDispute | campus_id | BIGINT | 否 | 所属校区,跨校区或总部级数据为空 | 普通 |
| MergeDispute | created_by | BIGINT | 是 | 创建人账号 ID | 普通 |
| MergeDispute | created_at | DATETIME | 是 | 创建时间 | 普通 |
| MergeDispute | updated_by | BIGINT | 否 | 最后更新人账号 ID | 普通 |
| MergeDispute | updated_at | DATETIME | 否 | 最后更新时间 | 普通 |
| MergeDispute | is_deleted | TINYINT | 是 | 是否已删除,0 未删除,1 已删除 | 普通 |
| MergeDispute | deleted_at | DATETIME | 否 | 删除时间,未删除为空 | 普通 |
| MergeDispute | deleted_by | BIGINT | 否 | 删除人账号 ID,未删除为空 | 普通 |
| MergeDispute | version | INT | 是 | 乐观锁版本号,写操作必须校验 | 普通 |
| MergeDispute | dispute_no | VARCHAR(64) | 是 | 争议编号,唯一 | 普通 |
| MergeDispute | lead_ids | JSON | 是 | 涉及线索 ID 列表 | 普通 |
| MergeDispute | family_id | BIGINT | 否 | 客户家庭 ID | 普通 |
| MergeDispute | owner_candidates | JSON | 是 | 候选归属人列表 | 普通 |
| MergeDispute | restore_snapshot | JSON | 否 | 误合并恢复快照 | 普通 |
| MergeDispute | arbitrate_status | VARCHAR(32) | 是 | 待仲裁/已通过/已驳回/已恢复 | 普通 |
| MergeDispute | approval_status | VARCHAR(32) | 否 | 审批状态,未发起为空 | 普通 |
| MergeDispute | approval_instance_id | BIGINT | 否 | 关联审批实例 ID | 普通 |
引用对象字段字典
| 引用表 | 对象 | 字段 | 类型 | 必填 | 规则 | 数据级别 |
|---|---|---|---|---|---|---|
| sys_organization | Organization | id | BIGINT | 是 | 主键,雪花或号段生成,禁止复用 | 普通 |
| sys_organization | Organization | tenant_id | BIGINT | 是 | 集团/租户隔离字段,所有查询必须带租户上下文 | 普通 |
| sys_organization | Organization | org_id | BIGINT | 否 | 所属组织,集团级或公共配置为空 | 普通 |
| sys_organization | Organization | campus_id | BIGINT | 否 | 所属校区,跨校区或总部级数据为空 | 普通 |
| sys_organization | Organization | created_by | BIGINT | 是 | 创建人账号 ID | 普通 |
| sys_organization | Organization | created_at | DATETIME | 是 | 创建时间 | 普通 |
| sys_organization | Organization | updated_by | BIGINT | 否 | 最后更新人账号 ID | 普通 |
| sys_organization | Organization | updated_at | DATETIME | 否 | 最后更新时间 | 普通 |
| sys_organization | Organization | is_deleted | TINYINT | 是 | 是否已删除,0 未删除,1 已删除 | 普通 |
| sys_organization | Organization | deleted_at | DATETIME | 否 | 删除时间,未删除为空 | 普通 |
| sys_organization | Organization | deleted_by | BIGINT | 否 | 删除人账号 ID,未删除为空 | 普通 |
| sys_organization | Organization | version | INT | 是 | 乐观锁版本号,写操作必须校验 | 普通 |
| sys_organization | Organization | org_code | VARCHAR(64) | 是 | 组织编码,租户内唯一 | 普通 |
| sys_organization | Organization | org_name | VARCHAR(128) | 是 | 组织名称 | 普通 |
| sys_organization | Organization | org_type | VARCHAR(32) | 是 | 集团/区域/校区/部门/法人主体 | 普通 |
| sys_organization | Organization | parent_id | BIGINT | 否 | 上级组织 ID,根节点为空 | 普通 |
| sys_organization | Organization | sort_no | INT | 否 | 同级排序 | 普通 |
| sys_organization | Organization | enabled | TINYINT | 是 | 是否启用 | 普通 |
| sys_user | User/Employee | id | BIGINT | 是 | 主键,雪花或号段生成,禁止复用 | 普通 |
| sys_user | User/Employee | tenant_id | BIGINT | 是 | 集团/租户隔离字段,所有查询必须带租户上下文 | 普通 |
| sys_user | User/Employee | org_id | BIGINT | 否 | 所属组织,集团级或公共配置为空 | 普通 |
| sys_user | User/Employee | campus_id | BIGINT | 否 | 所属校区,跨校区或总部级数据为空 | 普通 |
| sys_user | User/Employee | created_by | BIGINT | 是 | 创建人账号 ID | 普通 |
| sys_user | User/Employee | created_at | DATETIME | 是 | 创建时间 | 普通 |
| sys_user | User/Employee | updated_by | BIGINT | 否 | 最后更新人账号 ID | 普通 |
| sys_user | User/Employee | updated_at | DATETIME | 否 | 最后更新时间 | 普通 |
| sys_user | User/Employee | is_deleted | TINYINT | 是 | 是否已删除,0 未删除,1 已删除 | 普通 |
| sys_user | User/Employee | deleted_at | DATETIME | 否 | 删除时间,未删除为空 | 普通 |
| sys_user | User/Employee | deleted_by | BIGINT | 否 | 删除人账号 ID,未删除为空 | 普通 |
| sys_user | User/Employee | version | INT | 是 | 乐观锁版本号,写操作必须校验 | 普通 |
| sys_user | User/Employee | user_no | VARCHAR(64) | 是 | 账号编号,唯一 | 普通 |
| sys_user | User/Employee | login_name | VARCHAR(64) | 是 | 登录名,唯一 | 普通 |
| sys_user | User/Employee | mobile | VARCHAR(32) | 否 | 手机号,敏感脱敏展示 | 敏感 |
| sys_user | User/Employee | password_hash | VARCHAR(255) | 否 | 密码哈希,禁止前端返回 | 高敏 |
| sys_user | User/Employee | user_type | VARCHAR(32) | 是 | 员工/学员/家长/外部账号 | 普通 |
| sys_user | User/Employee | login_status | VARCHAR(32) | 是 | 正常/锁定/停用/待激活 | 普通 |
| sys_employee | Employee | id | BIGINT | 是 | 主键,雪花或号段生成,禁止复用 | 普通 |
| sys_employee | Employee | tenant_id | BIGINT | 是 | 集团/租户隔离字段,所有查询必须带租户上下文 | 普通 |
| sys_employee | Employee | org_id | BIGINT | 否 | 所属组织,集团级或公共配置为空 | 普通 |
| sys_employee | Employee | campus_id | BIGINT | 否 | 所属校区,跨校区或总部级数据为空 | 普通 |
| sys_employee | Employee | created_by | BIGINT | 是 | 创建人账号 ID | 普通 |
| sys_employee | Employee | created_at | DATETIME | 是 | 创建时间 | 普通 |
| sys_employee | Employee | updated_by | BIGINT | 否 | 最后更新人账号 ID | 普通 |
| sys_employee | Employee | updated_at | DATETIME | 否 | 最后更新时间 | 普通 |
| sys_employee | Employee | is_deleted | TINYINT | 是 | 是否已删除,0 未删除,1 已删除 | 普通 |
| sys_employee | Employee | deleted_at | DATETIME | 否 | 删除时间,未删除为空 | 普通 |
| sys_employee | Employee | deleted_by | BIGINT | 否 | 删除人账号 ID,未删除为空 | 普通 |
| sys_employee | Employee | version | INT | 是 | 乐观锁版本号,写操作必须校验 | 普通 |
| sys_employee | Employee | employee_no | VARCHAR(64) | 是 | 工号,唯一 | 普通 |
| sys_employee | Employee | user_id | BIGINT | 否 | 关联账号 ID | 普通 |
| sys_employee | Employee | employee_name | VARCHAR(64) | 是 | 员工姓名 | 普通 |
| sys_employee | Employee | primary_campus_id | BIGINT | 否 | 主校区 ID | 普通 |
| sys_employee | Employee | job_title | VARCHAR(64) | 否 | 岗位名称 | 普通 |
| sys_employee | Employee | hire_status | VARCHAR(32) | 是 | 在职/试用/离职/停用 | 普通 |
| sys_role | Role | id | BIGINT | 是 | 主键,雪花或号段生成,禁止复用 | 普通 |
| sys_role | Role | tenant_id | BIGINT | 是 | 集团/租户隔离字段,所有查询必须带租户上下文 | 普通 |
| sys_role | Role | org_id | BIGINT | 否 | 所属组织,集团级或公共配置为空 | 普通 |
| sys_role | Role | campus_id | BIGINT | 否 | 所属校区,跨校区或总部级数据为空 | 普通 |
| sys_role | Role | created_by | BIGINT | 是 | 创建人账号 ID | 普通 |
| sys_role | Role | created_at | DATETIME | 是 | 创建时间 | 普通 |
| sys_role | Role | updated_by | BIGINT | 否 | 最后更新人账号 ID | 普通 |
| sys_role | Role | updated_at | DATETIME | 否 | 最后更新时间 | 普通 |
| sys_role | Role | is_deleted | TINYINT | 是 | 是否已删除,0 未删除,1 已删除 | 普通 |
| sys_role | Role | deleted_at | DATETIME | 否 | 删除时间,未删除为空 | 普通 |
| sys_role | Role | deleted_by | BIGINT | 否 | 删除人账号 ID,未删除为空 | 普通 |
| sys_role | Role | version | INT | 是 | 乐观锁版本号,写操作必须校验 | 普通 |
| sys_role | Role | role_code | VARCHAR(64) | 是 | 角色编码,唯一 | 普通 |
| sys_role | Role | role_name | VARCHAR(128) | 是 | 角色名称 | 普通 |
| sys_role | Role | role_level | VARCHAR(32) | 是 | 总部/区域/校区/个人 | 普通 |
| sys_role | Role | data_scope_type | VARCHAR(32) | 是 | 数据范围类型 | 普通 |
| sys_role | Role | enabled | TINYINT | 是 | 是否启用 | 普通 |
| sys_approval_flow | ApprovalFlow | id | BIGINT | 是 | 主键,雪花或号段生成,禁止复用 | 普通 |
| sys_approval_flow | ApprovalFlow | tenant_id | BIGINT | 是 | 集团/租户隔离字段,所有查询必须带租户上下文 | 普通 |
| sys_approval_flow | ApprovalFlow | org_id | BIGINT | 否 | 所属组织,集团级或公共配置为空 | 普通 |
| sys_approval_flow | ApprovalFlow | campus_id | BIGINT | 否 | 所属校区,跨校区或总部级数据为空 | 普通 |
| sys_approval_flow | ApprovalFlow | created_by | BIGINT | 是 | 创建人账号 ID | 普通 |
| sys_approval_flow | ApprovalFlow | created_at | DATETIME | 是 | 创建时间 | 普通 |
| sys_approval_flow | ApprovalFlow | updated_by | BIGINT | 否 | 最后更新人账号 ID | 普通 |
| sys_approval_flow | ApprovalFlow | updated_at | DATETIME | 否 | 最后更新时间 | 普通 |
| sys_approval_flow | ApprovalFlow | is_deleted | TINYINT | 是 | 是否已删除,0 未删除,1 已删除 | 普通 |
| sys_approval_flow | ApprovalFlow | deleted_at | DATETIME | 否 | 删除时间,未删除为空 | 普通 |
| sys_approval_flow | ApprovalFlow | deleted_by | BIGINT | 否 | 删除人账号 ID,未删除为空 | 普通 |
| sys_approval_flow | ApprovalFlow | version | INT | 是 | 乐观锁版本号,写操作必须校验 | 普通 |
| sys_approval_flow | ApprovalFlow | flow_code | VARCHAR(64) | 是 | 审批流编码,唯一 | 普通 |
| sys_approval_flow | ApprovalFlow | biz_type | VARCHAR(64) | 是 | 业务类型 | 普通 |
| sys_approval_flow | ApprovalFlow | flow_name | VARCHAR(128) | 是 | 审批流名称 | 普通 |
| sys_approval_flow | ApprovalFlow | condition_json | JSON | 否 | 触发条件 | 普通 |
| sys_approval_flow | ApprovalFlow | node_json | JSON | 是 | 节点、审批人和超时规则 | 普通 |
| sys_approval_flow | ApprovalFlow | version_no | INT | 是 | 审批流版本号 | 普通 |
| sys_approval_flow | ApprovalFlow | enabled | TINYINT | 是 | 是否启用 | 普通 |
| sys_message_template | MessageTemplate | id | BIGINT | 是 | 主键,雪花或号段生成,禁止复用 | 普通 |
| sys_message_template | MessageTemplate | tenant_id | BIGINT | 是 | 集团/租户隔离字段,所有查询必须带租户上下文 | 普通 |
| sys_message_template | MessageTemplate | org_id | BIGINT | 否 | 所属组织,集团级或公共配置为空 | 普通 |
| sys_message_template | MessageTemplate | campus_id | BIGINT | 否 | 所属校区,跨校区或总部级数据为空 | 普通 |
| sys_message_template | MessageTemplate | created_by | BIGINT | 是 | 创建人账号 ID | 普通 |
| sys_message_template | MessageTemplate | created_at | DATETIME | 是 | 创建时间 | 普通 |
| sys_message_template | MessageTemplate | updated_by | BIGINT | 否 | 最后更新人账号 ID | 普通 |
| sys_message_template | MessageTemplate | updated_at | DATETIME | 否 | 最后更新时间 | 普通 |
| sys_message_template | MessageTemplate | is_deleted | TINYINT | 是 | 是否已删除,0 未删除,1 已删除 | 普通 |
| sys_message_template | MessageTemplate | deleted_at | DATETIME | 否 | 删除时间,未删除为空 | 普通 |
| sys_message_template | MessageTemplate | deleted_by | BIGINT | 否 | 删除人账号 ID,未删除为空 | 普通 |
| sys_message_template | MessageTemplate | version | INT | 是 | 乐观锁版本号,写操作必须校验 | 普通 |
| sys_message_template | MessageTemplate | template_code | VARCHAR(64) | 是 | 模板编码,唯一 | 普通 |
| sys_message_template | MessageTemplate | template_name | VARCHAR(128) | 是 | 模板名称 | 普通 |
| sys_message_template | MessageTemplate | channel | VARCHAR(32) | 是 | 站内信/短信/微信小程序/企微/Push | 普通 |
| sys_message_template | MessageTemplate | receiver_rule | JSON | 是 | 接收人规则 | 普通 |
| sys_message_template | MessageTemplate | content_template | TEXT | 是 | 模板内容 | 普通 |
| sys_message_template | MessageTemplate | enabled | TINYINT | 是 | 是否启用 | 普通 |
| sys_audit_log | AuditLog | id | BIGINT | 是 | 主键,雪花或号段生成,禁止复用 | 普通 |
| sys_audit_log | AuditLog | tenant_id | BIGINT | 是 | 集团/租户隔离字段,所有查询必须带租户上下文 | 普通 |
| sys_audit_log | AuditLog | org_id | BIGINT | 否 | 所属组织,集团级或公共配置为空 | 普通 |
| sys_audit_log | AuditLog | campus_id | BIGINT | 否 | 所属校区,跨校区或总部级数据为空 | 普通 |
| sys_audit_log | AuditLog | created_by | BIGINT | 是 | 创建人账号 ID | 普通 |
| sys_audit_log | AuditLog | created_at | DATETIME | 是 | 创建时间 | 普通 |
| sys_audit_log | AuditLog | updated_by | BIGINT | 否 | 最后更新人账号 ID | 普通 |
| sys_audit_log | AuditLog | updated_at | DATETIME | 否 | 最后更新时间 | 普通 |
| sys_audit_log | AuditLog | is_deleted | TINYINT | 是 | 是否已删除,0 未删除,1 已删除 | 普通 |
| sys_audit_log | AuditLog | deleted_at | DATETIME | 否 | 删除时间,未删除为空 | 普通 |
| sys_audit_log | AuditLog | deleted_by | BIGINT | 否 | 删除人账号 ID,未删除为空 | 普通 |
| sys_audit_log | AuditLog | version | INT | 是 | 乐观锁版本号,写操作必须校验 | 普通 |
| sys_audit_log | AuditLog | operator_id | BIGINT | 是 | 操作人 ID | 普通 |
| sys_audit_log | AuditLog | biz_type | VARCHAR(64) | 是 | 业务类型 | 普通 |
| sys_audit_log | AuditLog | biz_id | BIGINT | 否 | 业务主键 ID | 普通 |
| sys_audit_log | AuditLog | action_code | VARCHAR(64) | 是 | 操作编码 | 普通 |
| sys_audit_log | AuditLog | before_snapshot | JSON | 否 | 变更前快照 | 普通 |
| sys_audit_log | AuditLog | after_snapshot | JSON | 否 | 变更后快照 | 普通 |
| sys_audit_log | AuditLog | ip_address | VARCHAR(64) | 否 | 操作 IP | 普通 |
| int_integration_log | IntegrationLog | id | BIGINT | 是 | 主键,雪花或号段生成,禁止复用 | 普通 |
| int_integration_log | IntegrationLog | tenant_id | BIGINT | 是 | 集团/租户隔离字段,所有查询必须带租户上下文 | 普通 |
| int_integration_log | IntegrationLog | org_id | BIGINT | 否 | 所属组织,集团级或公共配置为空 | 普通 |
| int_integration_log | IntegrationLog | campus_id | BIGINT | 否 | 所属校区,跨校区或总部级数据为空 | 普通 |
| int_integration_log | IntegrationLog | created_by | BIGINT | 是 | 创建人账号 ID | 普通 |
| int_integration_log | IntegrationLog | created_at | DATETIME | 是 | 创建时间 | 普通 |
| int_integration_log | IntegrationLog | updated_by | BIGINT | 否 | 最后更新人账号 ID | 普通 |
| int_integration_log | IntegrationLog | updated_at | DATETIME | 否 | 最后更新时间 | 普通 |
| int_integration_log | IntegrationLog | is_deleted | TINYINT | 是 | 是否已删除,0 未删除,1 已删除 | 普通 |
| int_integration_log | IntegrationLog | deleted_at | DATETIME | 否 | 删除时间,未删除为空 | 普通 |
| int_integration_log | IntegrationLog | deleted_by | BIGINT | 否 | 删除人账号 ID,未删除为空 | 普通 |
| int_integration_log | IntegrationLog | version | INT | 是 | 乐观锁版本号,写操作必须校验 | 普通 |
| int_integration_log | IntegrationLog | request_id | VARCHAR(128) | 是 | 请求 ID,幂等键 | 普通 |
| int_integration_log | IntegrationLog | system_code | VARCHAR(64) | 是 | 外部系统编码 | 普通 |
| int_integration_log | IntegrationLog | api_path | VARCHAR(512) | 是 | 接口路径 | 普通 |
| int_integration_log | IntegrationLog | biz_type | VARCHAR(64) | 否 | 业务类型 | 普通 |
| int_integration_log | IntegrationLog | biz_id | BIGINT | 否 | 业务 ID | 普通 |
| int_integration_log | IntegrationLog | request_payload | JSON | 否 | 请求报文,敏感字段脱敏 | 敏感 |
| int_integration_log | IntegrationLog | response_payload | JSON | 否 | 响应报文 | 普通 |
| int_integration_log | IntegrationLog | call_status | VARCHAR(32) | 是 | 成功/失败/超时/重试中 | 普通 |
| sec_sensitive_field_policy | SensitiveFieldPolicy | id | BIGINT | 是 | 主键,雪花或号段生成,禁止复用 | 普通 |
| sec_sensitive_field_policy | SensitiveFieldPolicy | tenant_id | BIGINT | 是 | 集团/租户隔离字段,所有查询必须带租户上下文 | 普通 |
| sec_sensitive_field_policy | SensitiveFieldPolicy | org_id | BIGINT | 否 | 所属组织,集团级或公共配置为空 | 普通 |
| sec_sensitive_field_policy | SensitiveFieldPolicy | campus_id | BIGINT | 否 | 所属校区,跨校区或总部级数据为空 | 普通 |
| sec_sensitive_field_policy | SensitiveFieldPolicy | created_by | BIGINT | 是 | 创建人账号 ID | 普通 |
| sec_sensitive_field_policy | SensitiveFieldPolicy | created_at | DATETIME | 是 | 创建时间 | 普通 |
| sec_sensitive_field_policy | SensitiveFieldPolicy | updated_by | BIGINT | 否 | 最后更新人账号 ID | 普通 |
| sec_sensitive_field_policy | SensitiveFieldPolicy | updated_at | DATETIME | 否 | 最后更新时间 | 普通 |
| sec_sensitive_field_policy | SensitiveFieldPolicy | is_deleted | TINYINT | 是 | 是否已删除,0 未删除,1 已删除 | 普通 |
| sec_sensitive_field_policy | SensitiveFieldPolicy | deleted_at | DATETIME | 否 | 删除时间,未删除为空 | 普通 |
| sec_sensitive_field_policy | SensitiveFieldPolicy | deleted_by | BIGINT | 否 | 删除人账号 ID,未删除为空 | 普通 |
| sec_sensitive_field_policy | SensitiveFieldPolicy | version | INT | 是 | 乐观锁版本号,写操作必须校验 | 普通 |
| sec_sensitive_field_policy | SensitiveFieldPolicy | field_code | VARCHAR(128) | 是 | 字段编码,唯一 | 普通 |
| sec_sensitive_field_policy | SensitiveFieldPolicy | biz_type | VARCHAR(64) | 是 | 业务类型 | 普通 |
| sec_sensitive_field_policy | SensitiveFieldPolicy | mask_rule | VARCHAR(64) | 是 | 脱敏规则 | 普通 |
| sec_sensitive_field_policy | SensitiveFieldPolicy | view_requires_approval | TINYINT | 是 | 明文查看是否需审批 | 普通 |
| sec_sensitive_field_policy | SensitiveFieldPolicy | watermark_required | TINYINT | 是 | 是否加水印 | 普通 |
| mkt_campaign | MarketingCampaign | id | BIGINT | 是 | 主键,雪花或号段生成,禁止复用 | 普通 |
| mkt_campaign | MarketingCampaign | tenant_id | BIGINT | 是 | 集团/租户隔离字段,所有查询必须带租户上下文 | 普通 |
| mkt_campaign | MarketingCampaign | org_id | BIGINT | 否 | 所属组织,集团级或公共配置为空 | 普通 |
| mkt_campaign | MarketingCampaign | campus_id | BIGINT | 否 | 所属校区,跨校区或总部级数据为空 | 普通 |
| mkt_campaign | MarketingCampaign | created_by | BIGINT | 是 | 创建人账号 ID | 普通 |
| mkt_campaign | MarketingCampaign | created_at | DATETIME | 是 | 创建时间 | 普通 |
| mkt_campaign | MarketingCampaign | updated_by | BIGINT | 否 | 最后更新人账号 ID | 普通 |
| mkt_campaign | MarketingCampaign | updated_at | DATETIME | 否 | 最后更新时间 | 普通 |
| mkt_campaign | MarketingCampaign | is_deleted | TINYINT | 是 | 是否已删除,0 未删除,1 已删除 | 普通 |
| mkt_campaign | MarketingCampaign | deleted_at | DATETIME | 否 | 删除时间,未删除为空 | 普通 |
| mkt_campaign | MarketingCampaign | deleted_by | BIGINT | 否 | 删除人账号 ID,未删除为空 | 普通 |
| mkt_campaign | MarketingCampaign | version | INT | 是 | 乐观锁版本号,写操作必须校验 | 普通 |
| mkt_campaign | MarketingCampaign | campaign_code | VARCHAR(64) | 是 | 活动编码,唯一 | 普通 |
| mkt_campaign | MarketingCampaign | campaign_name | VARCHAR(128) | 是 | 活动名称 | 普通 |
| mkt_campaign | MarketingCampaign | channel_id | BIGINT | 否 | 所属渠道 | 普通 |
| mkt_campaign | MarketingCampaign | campus_scope | JSON | 是 | 适用校区范围 | 普通 |
| mkt_campaign | MarketingCampaign | start_at | DATETIME | 是 | 开始时间 | 普通 |
| mkt_campaign | MarketingCampaign | end_at | DATETIME | 是 | 结束时间 | 普通 |
| mkt_campaign | MarketingCampaign | biz_status | VARCHAR(32) | 是 | 业务状态,取值来自状态机字典 | 普通 |
| mkt_campaign | MarketingCampaign | remark | VARCHAR(512) | 否 | 业务备注,敏感内容按权限脱敏 | 普通 |
| mkt_form_submit | CampaignFormSubmit | id | BIGINT | 是 | 主键,雪花或号段生成,禁止复用 | 普通 |
| mkt_form_submit | CampaignFormSubmit | tenant_id | BIGINT | 是 | 集团/租户隔离字段,所有查询必须带租户上下文 | 普通 |
| mkt_form_submit | CampaignFormSubmit | org_id | BIGINT | 否 | 所属组织,集团级或公共配置为空 | 普通 |
| mkt_form_submit | CampaignFormSubmit | campus_id | BIGINT | 否 | 所属校区,跨校区或总部级数据为空 | 普通 |
| mkt_form_submit | CampaignFormSubmit | created_by | BIGINT | 是 | 创建人账号 ID | 普通 |
| mkt_form_submit | CampaignFormSubmit | created_at | DATETIME | 是 | 创建时间 | 普通 |
| mkt_form_submit | CampaignFormSubmit | updated_by | BIGINT | 否 | 最后更新人账号 ID | 普通 |
| mkt_form_submit | CampaignFormSubmit | updated_at | DATETIME | 否 | 最后更新时间 | 普通 |
| mkt_form_submit | CampaignFormSubmit | is_deleted | TINYINT | 是 | 是否已删除,0 未删除,1 已删除 | 普通 |
| mkt_form_submit | CampaignFormSubmit | deleted_at | DATETIME | 否 | 删除时间,未删除为空 | 普通 |
| mkt_form_submit | CampaignFormSubmit | deleted_by | BIGINT | 否 | 删除人账号 ID,未删除为空 | 普通 |
| mkt_form_submit | CampaignFormSubmit | version | INT | 是 | 乐观锁版本号,写操作必须校验 | 普通 |
| mkt_form_submit | CampaignFormSubmit | submit_no | VARCHAR(64) | 是 | 提交编号,唯一 | 普通 |
| mkt_form_submit | CampaignFormSubmit | page_id | BIGINT | 是 | 页面 ID | 普通 |
| mkt_form_submit | CampaignFormSubmit | guardian_mobile | VARCHAR(32) | 是 | 家长手机号,敏感 | 敏感 |
| mkt_form_submit | CampaignFormSubmit | student_name | VARCHAR(64) | 否 | 学员姓名 | 普通 |
| mkt_form_submit | CampaignFormSubmit | form_data | JSON | 是 | 表单完整提交数据 | 普通 |
| mkt_form_submit | CampaignFormSubmit | lead_id | BIGINT | 否 | 转化生成线索 ID | 普通 |
| mkt_form_submit | CampaignFormSubmit | submit_status | VARCHAR(32) | 是 | 成功/失败/重复/风控拦截 | 普通 |
| edu_course | Course/Product | id | BIGINT | 是 | 主键,雪花或号段生成,禁止复用 | 普通 |
| edu_course | Course/Product | tenant_id | BIGINT | 是 | 集团/租户隔离字段,所有查询必须带租户上下文 | 普通 |
| edu_course | Course/Product | org_id | BIGINT | 否 | 所属组织,集团级或公共配置为空 | 普通 |
| edu_course | Course/Product | campus_id | BIGINT | 否 | 所属校区,跨校区或总部级数据为空 | 普通 |
| edu_course | Course/Product | created_by | BIGINT | 是 | 创建人账号 ID | 普通 |
| edu_course | Course/Product | created_at | DATETIME | 是 | 创建时间 | 普通 |
| edu_course | Course/Product | updated_by | BIGINT | 否 | 最后更新人账号 ID | 普通 |
| edu_course | Course/Product | updated_at | DATETIME | 否 | 最后更新时间 | 普通 |
| edu_course | Course/Product | is_deleted | TINYINT | 是 | 是否已删除,0 未删除,1 已删除 | 普通 |
| edu_course | Course/Product | deleted_at | DATETIME | 否 | 删除时间,未删除为空 | 普通 |
| edu_course | Course/Product | deleted_by | BIGINT | 否 | 删除人账号 ID,未删除为空 | 普通 |
| edu_course | Course/Product | version | INT | 是 | 乐观锁版本号,写操作必须校验 | 普通 |
| edu_course | Course/Product | course_code | VARCHAR(64) | 是 | 课程编码,唯一 | 普通 |
| edu_course | Course/Product | course_name | VARCHAR(128) | 是 | 课程名称 | 普通 |
| edu_course | Course/Product | subject | VARCHAR(32) | 是 | 学科 | 普通 |
| edu_course | Course/Product | course_type | VARCHAR(32) | 是 | 班课/一对一/直播/录播 | 普通 |
| edu_course | Course/Product | grade_scope | JSON | 否 | 适用年级 | 普通 |
| edu_course | Course/Product | enabled | TINYINT | 是 | 是否启用 | 普通 |
| con_contract | Contract | id | BIGINT | 是 | 主键,雪花或号段生成,禁止复用 | 普通 |
| con_contract | Contract | tenant_id | BIGINT | 是 | 集团/租户隔离字段,所有查询必须带租户上下文 | 普通 |
| con_contract | Contract | org_id | BIGINT | 否 | 所属组织,集团级或公共配置为空 | 普通 |
| con_contract | Contract | campus_id | BIGINT | 否 | 所属校区,跨校区或总部级数据为空 | 普通 |
| con_contract | Contract | created_by | BIGINT | 是 | 创建人账号 ID | 普通 |
| con_contract | Contract | created_at | DATETIME | 是 | 创建时间 | 普通 |
| con_contract | Contract | updated_by | BIGINT | 否 | 最后更新人账号 ID | 普通 |
| con_contract | Contract | updated_at | DATETIME | 否 | 最后更新时间 | 普通 |
| con_contract | Contract | is_deleted | TINYINT | 是 | 是否已删除,0 未删除,1 已删除 | 普通 |
| con_contract | Contract | deleted_at | DATETIME | 否 | 删除时间,未删除为空 | 普通 |
| con_contract | Contract | deleted_by | BIGINT | 否 | 删除人账号 ID,未删除为空 | 普通 |
| con_contract | Contract | version | INT | 是 | 乐观锁版本号,写操作必须校验 | 普通 |
| con_contract | Contract | contract_no | VARCHAR(64) | 是 | 合同编号,唯一 | 普通 |
| con_contract | Contract | student_id | BIGINT | 是 | 学员 ID | 普通 |
| con_contract | Contract | family_id | BIGINT | 否 | 客户家庭 ID | 普通 |
| con_contract | Contract | template_id | BIGINT | 是 | 合同模板 ID | 普通 |
| con_contract | Contract | employee_id | BIGINT | 否 | 创建合同的销售/市场/课程顾问员工 ID | 普通 |
| con_contract | Contract | source_terminal | VARCHAR(32) | 是 | 来源终端,教师端 App/小程序或 PC 管理端 | 普通 |
| con_contract | Contract | simulation_id | BIGINT | 否 | 关联优惠试算 ID | 普通 |
| con_contract | Contract | extra_discount_apply_id | BIGINT | 否 | 关联额外折扣申请 ID | 普通 |
| con_contract | Contract | hand_sign_status | VARCHAR(32) | 是 | 待手写签字/已手写签字/签字作废 | 普通 |
| con_contract | Contract | sign_status | VARCHAR(32) | 是 | 待家长签署/已手写签字/已作废 | 普通 |
| con_contract | Contract | payment_status | VARCHAR(32) | 是 | 待支付/支付中/支付成功/支付失败/已关闭 | 普通 |
| con_contract | Contract | enterprise_seal_status | VARCHAR(32) | 是 | 未触发/盖章中/已盖章/盖章失败/已归档 | 普通 |
| con_contract | Contract | contract_status | VARCHAR(32) | 是 | 草稿/生效/履约中/已终止/已退费 | 普通 |
| con_contract | Contract | supervision_status | VARCHAR(32) | 否 | 监管报送状态 | 普通 |
| con_contract | Contract | currency | VARCHAR(8) | 是 | 币种,默认 CNY | 普通 |
| con_contract | Contract | amount | DECIMAL(18,2) | 是 | 含税金额,必须大于等于 0 | 普通 |
| con_contract | Contract | tax_amount | DECIMAL(18,2) | 否 | 税额,按发票或税率计算 | 普通 |
| con_contract | Contract | approval_status | VARCHAR(32) | 否 | 审批状态,未发起为空 | 普通 |
| con_contract | Contract | approval_instance_id | BIGINT | 否 | 关联审批实例 ID | 普通 |
| ord_order | Order | id | BIGINT | 是 | 主键,雪花或号段生成,禁止复用 | 普通 |
| ord_order | Order | tenant_id | BIGINT | 是 | 集团/租户隔离字段,所有查询必须带租户上下文 | 普通 |
| ord_order | Order | org_id | BIGINT | 否 | 所属组织,集团级或公共配置为空 | 普通 |
| ord_order | Order | campus_id | BIGINT | 否 | 所属校区,跨校区或总部级数据为空 | 普通 |
| ord_order | Order | created_by | BIGINT | 是 | 创建人账号 ID | 普通 |
| ord_order | Order | created_at | DATETIME | 是 | 创建时间 | 普通 |
| ord_order | Order | updated_by | BIGINT | 否 | 最后更新人账号 ID | 普通 |
| ord_order | Order | updated_at | DATETIME | 否 | 最后更新时间 | 普通 |
| ord_order | Order | is_deleted | TINYINT | 是 | 是否已删除,0 未删除,1 已删除 | 普通 |
| ord_order | Order | deleted_at | DATETIME | 否 | 删除时间,未删除为空 | 普通 |
| ord_order | Order | deleted_by | BIGINT | 否 | 删除人账号 ID,未删除为空 | 普通 |
| ord_order | Order | version | INT | 是 | 乐观锁版本号,写操作必须校验 | 普通 |
| ord_order | Order | order_no | VARCHAR(64) | 是 | 订单编号,唯一 | 普通 |
| ord_order | Order | contract_id | BIGINT | 是 | 合同 ID | 普通 |
| ord_order | Order | student_id | BIGINT | 是 | 学员 ID | 普通 |
| ord_order | Order | receivable_amount | DECIMAL(18,2) | 是 | 应收金额 | 普通 |
| ord_order | Order | discount_amount | DECIMAL(18,2) | 否 | 优惠金额 | 普通 |
| ord_order | Order | paid_amount | DECIMAL(18,2) | 是 | 已收金额 | 普通 |
| ord_order | Order | order_status | VARCHAR(32) | 是 | 待支付/支付中/已支付/已关闭 | 普通 |
| ser_service_ticket | ServiceTicket | id | BIGINT | 是 | 主键,雪花或号段生成,禁止复用 | 普通 |
| ser_service_ticket | ServiceTicket | tenant_id | BIGINT | 是 | 集团/租户隔离字段,所有查询必须带租户上下文 | 普通 |
| ser_service_ticket | ServiceTicket | org_id | BIGINT | 否 | 所属组织,集团级或公共配置为空 | 普通 |
| ser_service_ticket | ServiceTicket | campus_id | BIGINT | 否 | 所属校区,跨校区或总部级数据为空 | 普通 |
| ser_service_ticket | ServiceTicket | created_by | BIGINT | 是 | 创建人账号 ID | 普通 |
| ser_service_ticket | ServiceTicket | created_at | DATETIME | 是 | 创建时间 | 普通 |
| ser_service_ticket | ServiceTicket | updated_by | BIGINT | 否 | 最后更新人账号 ID | 普通 |
| ser_service_ticket | ServiceTicket | updated_at | DATETIME | 否 | 最后更新时间 | 普通 |
| ser_service_ticket | ServiceTicket | is_deleted | TINYINT | 是 | 是否已删除,0 未删除,1 已删除 | 普通 |
| ser_service_ticket | ServiceTicket | deleted_at | DATETIME | 否 | 删除时间,未删除为空 | 普通 |
| ser_service_ticket | ServiceTicket | deleted_by | BIGINT | 否 | 删除人账号 ID,未删除为空 | 普通 |
| ser_service_ticket | ServiceTicket | version | INT | 是 | 乐观锁版本号,写操作必须校验 | 普通 |
| ser_service_ticket | ServiceTicket | ticket_no | VARCHAR(64) | 是 | 工单编号,唯一 | 普通 |
| ser_service_ticket | ServiceTicket | student_id | BIGINT | 否 | 学员 ID | 普通 |
| ser_service_ticket | ServiceTicket | guardian_id | BIGINT | 否 | 家长 ID | 普通 |
| ser_service_ticket | ServiceTicket | ticket_type | VARCHAR(32) | 是 | 咨询/投诉/风险/售后/转介绍 | 普通 |
| ser_service_ticket | ServiceTicket | ticket_content | TEXT | 是 | 工单内容 | 普通 |
| ser_service_ticket | ServiceTicket | priority | VARCHAR(32) | 是 | 普通/紧急/高风险 | 普通 |
| ser_service_ticket | ServiceTicket | ticket_status | VARCHAR(32) | 是 | 待处理/处理中/待确认/已关闭 | 普通 |
JSON 字段结构与校验
| 表名 | 对象 | 字段 | 结构编码 | 结构定义 | 校验规则 | 示例 |
|---|---|---|---|---|---|---|
| crm_role_terminal_policy | CRMRoleTerminalPolicy | menu_codes | GENERIC | object | array | 必须符合字段说明中的业务结构;保存前进行 JSON Schema 校验并记录版本 | {"version":1,"items":[]} |
| crm_role_terminal_policy | CRMRoleTerminalPolicy | button_codes | GENERIC | object | array | 必须符合字段说明中的业务结构;保存前进行 JSON Schema 校验并记录版本 | {"version":1,"items":[]} |
| crm_role_terminal_policy | CRMRoleTerminalPolicy | field_policy_json | PERMISSION_POLICY | {menus:string[], buttons:string[], fields:{fieldCode:string, action:string}[], dataScope:object} | 权限变更写审计并刷新缓存 | {"menus":["CRM_LEAD"],"dataScope":{"scopeType":"SELF"}} |
| crm_role_terminal_policy | CRMRoleTerminalPolicy | data_scope_rule | PERMISSION_POLICY | {menus:string[], buttons:string[], fields:{fieldCode:string, action:string}[], dataScope:object} | 权限变更写审计并刷新缓存 | {"menus":["CRM_LEAD"],"dataScope":{"scopeType":"SELF"}} |
| crm_merge_dispute | MergeDispute | lead_ids | GENERIC | object | array | 必须符合字段说明中的业务结构;保存前进行 JSON Schema 校验并记录版本 | {"version":1,"items":[]} |
| crm_merge_dispute | MergeDispute | owner_candidates | GENERIC | object | array | 必须符合字段说明中的业务结构;保存前进行 JSON Schema 校验并记录版本 | {"version":1,"items":[]} |
| crm_merge_dispute | MergeDispute | restore_snapshot | AUDIT_SNAPSHOT | {before?:object, after?:object, changedFields:string[], maskPolicy:string} | 敏感字段必须按脱敏策略写入,不允许存储明文密码或密钥 | {"changedFields":["owner_id"],"maskPolicy":"MOBILE_MASK"} |
状态/枚举标准字典
| 表名 | 对象 | 字段 | 枚举编码 | 取值 | 终态/流转规则 | 字段说明 |
|---|---|---|---|---|---|---|
| crm_role_terminal_policy | CRMRoleTerminalPolicy | tenant_id | TENANT_ID | 集团、租户隔离字段 | 非终态,可按状态机或字典规则流转 | 集团/租户隔离字段,所有查询必须带租户上下文 |
| crm_role_terminal_policy | CRMRoleTerminalPolicy | is_deleted | BOOL_DELETED | 0 未删除、1 已删除 | 非终态,可按状态机或字典规则流转 | 是否已删除,0 未删除,1 已删除 |
| crm_role_terminal_policy | CRMRoleTerminalPolicy | terminal_scope | TERMINAL_SCOPE | PC Web、教师 App、教师小程序 | 非终态,可按状态机或字典规则流转 | PC Web/教师 App/教师小程序 |
| crm_role_terminal_policy | CRMRoleTerminalPolicy | field_policy_json | FIELD_POLICY_JSON | 字段明文、脱敏、隐藏策略 | 非终态,可按状态机或字典规则流转 | 字段明文/脱敏/隐藏策略 |
| crm_role_terminal_policy | CRMRoleTerminalPolicy | enabled | ENABLED_STATUS | 0 停用、1 启用 | 非终态,可按状态机或字典规则流转 | 是否启用 |
| crm_lead | Lead | tenant_id | TENANT_ID | 集团、租户隔离字段 | 非终态,可按状态机或字典规则流转 | 集团/租户隔离字段,所有查询必须带租户上下文 |
| crm_lead | Lead | is_deleted | BOOL_DELETED | 0 未删除、1 已删除 | 非终态,可按状态机或字典规则流转 | 是否已删除,0 未删除,1 已删除 |
| crm_lead | Lead | source_channel | SOURCE_CHANNEL | DOUYIN 抖音、XIAOHONGSHU 小红书、MEITUAN 美团、WECHAT 公众号/小程序、GROUND_PUSH 地推、REFERRAL 转介绍、NATURAL 自然到访、IMPORT 批量导入、OTHER 其他 | 非终态,可按状态机或字典规则流转 | 来源渠道 |
| crm_lead | Lead | owner_id | OWNER_ID | 当前归属销售、顾问 | 非终态,可按状态机或字典规则流转 | 当前归属销售/顾问 |
| crm_lead | Lead | duplicate_status | DUPLICATE_STATUS | 未查重、疑似重复、已合并、已忽略 | 非终态,可按状态机或字典规则流转 | 未查重/疑似重复/已合并/已忽略 |
| crm_lead | Lead | biz_status | BIZ_STATUS | DRAFT 草稿、SUBMITTED 已提交、PROCESSING 处理中、ACTIVE 生效中、SUSPENDED 已暂停、CLOSED 已关闭、CANCELLED 已取消 | 包含终态,终态禁止直接编辑,需走变更/红冲/撤回流程 | 业务状态,取值来自状态机字典 |
| crm_customer_family | CustomerFamily | tenant_id | TENANT_ID | 集团、租户隔离字段 | 非终态,可按状态机或字典规则流转 | 集团/租户隔离字段,所有查询必须带租户上下文 |
| crm_customer_family | CustomerFamily | is_deleted | BOOL_DELETED | 0 未删除、1 已删除 | 非终态,可按状态机或字典规则流转 | 是否已删除,0 未删除,1 已删除 |
| crm_customer_family | CustomerFamily | risk_level | RISK_LEVEL | LOW 低、MEDIUM 中、HIGH 高、CRITICAL 严重 | 非终态,可按状态机或字典规则流转 | 风险等级 |
| crm_customer_family | CustomerFamily | biz_status | BIZ_STATUS | DRAFT 草稿、SUBMITTED 已提交、PROCESSING 处理中、ACTIVE 生效中、SUSPENDED 已暂停、CLOSED 已关闭、CANCELLED 已取消 | 包含终态,终态禁止直接编辑,需走变更/红冲/撤回流程 | 业务状态,取值来自状态机字典 |
| crm_guardian | Guardian | tenant_id | TENANT_ID | 集团、租户隔离字段 | 非终态,可按状态机或字典规则流转 | 集团/租户隔离字段,所有查询必须带租户上下文 |
| crm_guardian | Guardian | is_deleted | BOOL_DELETED | 0 未删除、1 已删除 | 非终态,可按状态机或字典规则流转 | 是否已删除,0 未删除,1 已删除 |
| crm_guardian | Guardian | relationship | RELATIONSHIP | FATHER 父亲、MOTHER 母亲、GRANDFATHER 祖父/外祖父、GRANDMOTHER 祖母/外祖母、OTHER 其他监护关系 | 非终态,可按状态机或字典规则流转 | 与学员关系 |
| crm_guardian | Guardian | verify_status | VERIFY_STATUS | 未验证、已验证、已解绑 | 非终态,可按状态机或字典规则流转 | 未验证/已验证/已解绑 |
| stu_student | Student | tenant_id | TENANT_ID | 集团、租户隔离字段 | 非终态,可按状态机或字典规则流转 | 集团/租户隔离字段,所有查询必须带租户上下文 |
| stu_student | Student | is_deleted | BOOL_DELETED | 0 未删除、1 已删除 | 非终态,可按状态机或字典规则流转 | 是否已删除,0 未删除,1 已删除 |
| stu_student | Student | gender | GENDER | MALE 男、FEMALE 女、UNKNOWN 未知/未填写 | 非终态,可按状态机或字典规则流转 | 性别 |
| stu_student | Student | biz_status | BIZ_STATUS | DRAFT 草稿、SUBMITTED 已提交、PROCESSING 处理中、ACTIVE 生效中、SUSPENDED 已暂停、CLOSED 已关闭、CANCELLED 已取消 | 包含终态,终态禁止直接编辑,需走变更/红冲/撤回流程 | 业务状态,取值来自状态机字典 |
| crm_follow_record | FollowRecord | tenant_id | TENANT_ID | 集团、租户隔离字段 | 非终态,可按状态机或字典规则流转 | 集团/租户隔离字段,所有查询必须带租户上下文 |
| crm_follow_record | FollowRecord | is_deleted | BOOL_DELETED | 0 未删除、1 已删除 | 非终态,可按状态机或字典规则流转 | 是否已删除,0 未删除,1 已删除 |
| crm_follow_record | FollowRecord | follow_type | FOLLOW_TYPE | 电话、微信、到访、试听、其他 | 非终态,可按状态机或字典规则流转 | 电话/微信/到访/试听/其他 |
| crm_follow_record | FollowRecord | follow_result | FOLLOW_RESULT | 有效、无效、待跟进、转化 | 非终态,可按状态机或字典规则流转 | 有效/无效/待跟进/转化 |
| crm_trial_lesson | TrialLesson | tenant_id | TENANT_ID | 集团、租户隔离字段 | 非终态,可按状态机或字典规则流转 | 集团/租户隔离字段,所有查询必须带租户上下文 |
| crm_trial_lesson | TrialLesson | is_deleted | BOOL_DELETED | 0 未删除、1 已删除 | 非终态,可按状态机或字典规则流转 | 是否已删除,0 未删除,1 已删除 |
| crm_trial_lesson | TrialLesson | trial_status | TRIAL_STATUS | 待确认、已预约、已到访、未到访、已取消 | 包含终态,终态禁止直接编辑,需走变更/红冲/撤回流程 | 待确认/已预约/已到访/未到访/已取消 |
| crm_trial_lesson | TrialLesson | arrival_status | ARRIVAL_STATUS | PENDING 待确认、ARRIVED 已到访、NO_SHOW 未到访、RESCHEDULED 已改约、CANCELLED 已取消 | 包含终态,终态禁止直接编辑,需走变更/红冲/撤回流程 | 到访状态 |
| crm_trial_feedback | TrialFeedback | tenant_id | TENANT_ID | 集团、租户隔离字段 | 非终态,可按状态机或字典规则流转 | 集团/租户隔离字段,所有查询必须带租户上下文 |
| crm_trial_feedback | TrialFeedback | is_deleted | BOOL_DELETED | 0 未删除、1 已删除 | 非终态,可按状态机或字典规则流转 | 是否已删除,0 未删除,1 已删除 |
| crm_trial_feedback | TrialFeedback | conversion_status | CONVERSION_STATUS | 待转化、已转化、暂不转化、失败 | 包含终态,终态禁止直接编辑,需走变更/红冲/撤回流程 | 待转化/已转化/暂不转化/失败 |
| crm_lead_assignment | LeadAssignment | tenant_id | TENANT_ID | 集团、租户隔离字段 | 非终态,可按状态机或字典规则流转 | 集团/租户隔离字段,所有查询必须带租户上下文 |
| crm_lead_assignment | LeadAssignment | is_deleted | BOOL_DELETED | 0 未删除、1 已删除 | 非终态,可按状态机或字典规则流转 | 是否已删除,0 未删除,1 已删除 |
| crm_lead_assignment | LeadAssignment | assignment_status | ASSIGNMENT_STATUS | 待处理、已生效、已驳回 | 非终态,可按状态机或字典规则流转 | 待处理/已生效/已驳回 |
| crm_lead_assignment | LeadAssignment | approval_status | APPROVAL_STATUS | NOT_STARTED 未发起、PENDING 审批中、APPROVED 已通过、REJECTED 已驳回、REVOKED 已撤回 | 非终态,可按状态机或字典规则流转 | 审批状态,未发起为空 |
| crm_duplicate_candidate | DuplicateCandidate | tenant_id | TENANT_ID | 集团、租户隔离字段 | 非终态,可按状态机或字典规则流转 | 集团/租户隔离字段,所有查询必须带租户上下文 |
| crm_duplicate_candidate | DuplicateCandidate | is_deleted | BOOL_DELETED | 0 未删除、1 已删除 | 非终态,可按状态机或字典规则流转 | 是否已删除,0 未删除,1 已删除 |
| crm_duplicate_candidate | DuplicateCandidate | source_biz_type | SOURCE_BIZ_TYPE | MARKETING_FORM 活动表单、LIVE_PUBLIC 公开课直播、CRM_IMPORT CRM导入、PARENT_REFERRAL 家长转介绍、SERVICE_TICKET 服务工单、PAYMENT 支付、DEVICE_EVENT 设备事件、MANUAL 手工录入 | 非终态,可按状态机或字典规则流转 | 来源对象类型 |
| crm_duplicate_candidate | DuplicateCandidate | handle_status | HANDLE_STATUS | 待处理、已合并、已忽略 | 非终态,可按状态机或字典规则流转 | 待处理/已合并/已忽略 |
| crm_merge_dispute | MergeDispute | tenant_id | TENANT_ID | 集团、租户隔离字段 | 非终态,可按状态机或字典规则流转 | 集团/租户隔离字段,所有查询必须带租户上下文 |
| crm_merge_dispute | MergeDispute | is_deleted | BOOL_DELETED | 0 未删除、1 已删除 | 非终态,可按状态机或字典规则流转 | 是否已删除,0 未删除,1 已删除 |
| crm_merge_dispute | MergeDispute | arbitrate_status | ARBITRATE_STATUS | 待仲裁、已通过、已驳回、已恢复 | 非终态,可按状态机或字典规则流转 | 待仲裁/已通过/已驳回/已恢复 |
| crm_merge_dispute | MergeDispute | approval_status | APPROVAL_STATUS | NOT_STARTED 未发起、PENDING 审批中、APPROVED 已通过、REJECTED 已驳回、REVOKED 已撤回 | 非终态,可按状态机或字典规则流转 | 审批状态,未发起为空 |
敏感字段与数据安全策略
| 来源 | 表名 | 对象 | 字段 | 数据级别 | 脱敏/返回策略 | 明文查看条件 | 导出策略 | 审计要求 | 端侧展示规则 |
|---|---|---|---|---|---|---|---|---|---|
| 本模块对象 | crm_role_terminal_policy | CRMRoleTerminalPolicy | field_policy_json | 普通 | PAYLOAD_DESENSITIZE | 接口报文、快照和文件地址默认脱敏;排障查看需运维/安全授权 | 导出日志或报文时自动清理手机号、证件号、密钥、票据和人脸字段 | 查看报文、下载附件、失败重放和人工补偿均记录审计 | 业务端展示摘要和状态,完整报文仅运维/安全后台查看 |
| 本模块对象 | crm_lead | Lead | guardian_mobile | 敏感 | MOBILE_MASK | 默认展示 138****0000;明文查看需字段权限或敏感字段查看审批 | 导出手机号必须触发导出审批、下载水印和有效期控制 | 明文查看、复制、导出和批量下载均写入 SensitiveAccessLog | PC 管理端按字段权限展示;移动端仅展示本人授权范围内脱敏信息 |
| 本模块对象 | crm_lead | Lead | remark | 普通 | BIZ_FIELD_MASK | 按字段权限、数据范围和业务角色展示;明文查看按敏感字段审批规则执行 | 导出时按数据级别触发审批、水印、下载有效期和日志 | 查看、修改、删除、导出、下载和审批均记录操作审计 | 默认遵循总部、区域、校区、团队、本人数据范围和端侧最小可见原则 |
| 本模块对象 | crm_customer_family | CustomerFamily | remark | 普通 | BIZ_FIELD_MASK | 按字段权限、数据范围和业务角色展示;明文查看按敏感字段审批规则执行 | 导出时按数据级别触发审批、水印、下载有效期和日志 | 查看、修改、删除、导出、下载和审批均记录操作审计 | 默认遵循总部、区域、校区、团队、本人数据范围和端侧最小可见原则 |
| 本模块对象 | crm_guardian | Guardian | mobile | 敏感 | MOBILE_MASK | 默认展示 138****0000;明文查看需字段权限或敏感字段查看审批 | 导出手机号必须触发导出审批、下载水印和有效期控制 | 明文查看、复制、导出和批量下载均写入 SensitiveAccessLog | PC 管理端按字段权限展示;移动端仅展示本人授权范围内脱敏信息 |
| 本模块对象 | crm_guardian | Guardian | wechat_openid | 敏感 | BIZ_FIELD_MASK | 按字段权限、数据范围和业务角色展示;明文查看按敏感字段审批规则执行 | 导出时按数据级别触发审批、水印、下载有效期和日志 | 查看、修改、删除、导出、下载和审批均记录操作审计 | 默认遵循总部、区域、校区、团队、本人数据范围和端侧最小可见原则 |
| 本模块对象 | stu_student | Student | remark | 普通 | BIZ_FIELD_MASK | 按字段权限、数据范围和业务角色展示;明文查看按敏感字段审批规则执行 | 导出时按数据级别触发审批、水印、下载有效期和日志 | 查看、修改、删除、导出、下载和审批均记录操作审计 | 默认遵循总部、区域、校区、团队、本人数据范围和端侧最小可见原则 |
| 引用对象 | sys_user | User/Employee | mobile | 敏感 | MOBILE_MASK | 默认展示 138****0000;明文查看需字段权限或敏感字段查看审批 | 导出手机号必须触发导出审批、下载水印和有效期控制 | 明文查看、复制、导出和批量下载均写入 SensitiveAccessLog | PC 管理端按字段权限展示;移动端仅展示本人授权范围内脱敏信息 |
| 引用对象 | sys_user | User/Employee | password_hash | 高敏 | NEVER_RETURN | 禁止接口返回明文;仅密钥中心/鉴权服务按服务身份读取密钥引用 | 禁止导出;配置导出只允许导出脱敏引用和启停状态 | 配置新增、修改、启停、轮换和失败读取均记录安全审计 | 前端只展示已配置/未配置、到期时间和连通性状态,不展示密钥值 |
| 引用对象 | int_integration_log | IntegrationLog | request_payload | 敏感 | PAYLOAD_DESENSITIZE | 接口报文、快照和文件地址默认脱敏;排障查看需运维/安全授权 | 导出日志或报文时自动清理手机号、证件号、密钥、票据和人脸字段 | 查看报文、下载附件、失败重放和人工补偿均记录审计 | 业务端展示摘要和状态,完整报文仅运维/安全后台查看 |
| 引用对象 | int_integration_log | IntegrationLog | response_payload | 普通 | PAYLOAD_DESENSITIZE | 接口报文、快照和文件地址默认脱敏;排障查看需运维/安全授权 | 导出日志或报文时自动清理手机号、证件号、密钥、票据和人脸字段 | 查看报文、下载附件、失败重放和人工补偿均记录审计 | 业务端展示摘要和状态,完整报文仅运维/安全后台查看 |
| 引用对象 | sec_sensitive_field_policy | SensitiveFieldPolicy | mask_rule | 普通 | BIZ_FIELD_MASK | 按字段权限、数据范围和业务角色展示;明文查看按敏感字段审批规则执行 | 导出时按数据级别触发审批、水印、下载有效期和日志 | 查看、修改、删除、导出、下载和审批均记录操作审计 | 默认遵循总部、区域、校区、团队、本人数据范围和端侧最小可见原则 |
| 引用对象 | mkt_campaign | MarketingCampaign | remark | 普通 | BIZ_FIELD_MASK | 按字段权限、数据范围和业务角色展示;明文查看按敏感字段审批规则执行 | 导出时按数据级别触发审批、水印、下载有效期和日志 | 查看、修改、删除、导出、下载和审批均记录操作审计 | 默认遵循总部、区域、校区、团队、本人数据范围和端侧最小可见原则 |
| 引用对象 | mkt_form_submit | CampaignFormSubmit | guardian_mobile | 敏感 | MOBILE_MASK | 默认展示 138****0000;明文查看需字段权限或敏感字段查看审批 | 导出手机号必须触发导出审批、下载水印和有效期控制 | 明文查看、复制、导出和批量下载均写入 SensitiveAccessLog | PC 管理端按字段权限展示;移动端仅展示本人授权范围内脱敏信息 |
| 引用对象 | con_contract | Contract | tax_amount | 普通 | TAX_INVOICE_MASK | 默认按税号/发票号局部脱敏;发票原图、OCR 结果和国税回执按财务权限查看 | 财务导出需审批并加水印;国税官方回执随业务单归档 | OCR、核验、查重、人工校正、导出和付款阻断均留痕 | 移动端可上传和查看本人报销结果,不展示其他人员票据明文 |
核心数据表完整字段
| 表名 | 对象 | 字段 | 类型 | 必填 | 规则 | 数据级别 |
|---|---|---|---|---|---|---|
| crm_role_terminal_policy | CRMRoleTerminalPolicy | id | BIGINT | 是 | 主键,雪花或号段生成,禁止复用 | 普通 |
| crm_role_terminal_policy | CRMRoleTerminalPolicy | tenant_id | BIGINT | 是 | 集团/租户隔离字段,所有查询必须带租户上下文 | 普通 |
| crm_role_terminal_policy | CRMRoleTerminalPolicy | org_id | BIGINT | 否 | 所属组织,集团级或公共配置为空 | 普通 |
| crm_role_terminal_policy | CRMRoleTerminalPolicy | campus_id | BIGINT | 否 | 所属校区,跨校区或总部级数据为空 | 普通 |
| crm_role_terminal_policy | CRMRoleTerminalPolicy | created_by | BIGINT | 是 | 创建人账号 ID | 普通 |
| crm_role_terminal_policy | CRMRoleTerminalPolicy | created_at | DATETIME | 是 | 创建时间 | 普通 |
| crm_role_terminal_policy | CRMRoleTerminalPolicy | updated_by | BIGINT | 否 | 最后更新人账号 ID | 普通 |
| crm_role_terminal_policy | CRMRoleTerminalPolicy | updated_at | DATETIME | 否 | 最后更新时间 | 普通 |
| crm_role_terminal_policy | CRMRoleTerminalPolicy | is_deleted | TINYINT | 是 | 是否已删除,0 未删除,1 已删除 | 普通 |
| crm_role_terminal_policy | CRMRoleTerminalPolicy | deleted_at | DATETIME | 否 | 删除时间,未删除为空 | 普通 |
| crm_role_terminal_policy | CRMRoleTerminalPolicy | deleted_by | BIGINT | 否 | 删除人账号 ID,未删除为空 | 普通 |
| crm_role_terminal_policy | CRMRoleTerminalPolicy | version | INT | 是 | 乐观锁版本号,写操作必须校验 | 普通 |
| crm_role_terminal_policy | CRMRoleTerminalPolicy | role_code | VARCHAR(64) | 是 | 角色编码 | 普通 |
| crm_role_terminal_policy | CRMRoleTerminalPolicy | terminal_scope | VARCHAR(64) | 是 | PC Web/教师 App/教师小程序 | 普通 |
| crm_role_terminal_policy | CRMRoleTerminalPolicy | menu_codes | JSON | 是 | 可见菜单 | 普通 |
| crm_role_terminal_policy | CRMRoleTerminalPolicy | button_codes | JSON | 否 | 可见按钮 | 普通 |
| crm_role_terminal_policy | CRMRoleTerminalPolicy | field_policy_json | JSON | 是 | 字段明文/脱敏/隐藏策略 | 普通 |
| crm_role_terminal_policy | CRMRoleTerminalPolicy | data_scope_rule | JSON | 是 | 数据范围规则 | 普通 |
| crm_role_terminal_policy | CRMRoleTerminalPolicy | enabled | TINYINT | 是 | 是否启用 | 普通 |
| crm_lead | Lead | id | BIGINT | 是 | 主键,雪花或号段生成,禁止复用 | 普通 |
| crm_lead | Lead | tenant_id | BIGINT | 是 | 集团/租户隔离字段,所有查询必须带租户上下文 | 普通 |
| crm_lead | Lead | org_id | BIGINT | 否 | 所属组织,集团级或公共配置为空 | 普通 |
| crm_lead | Lead | campus_id | BIGINT | 否 | 所属校区,跨校区或总部级数据为空 | 普通 |
| crm_lead | Lead | created_by | BIGINT | 是 | 创建人账号 ID | 普通 |
| crm_lead | Lead | created_at | DATETIME | 是 | 创建时间 | 普通 |
| crm_lead | Lead | updated_by | BIGINT | 否 | 最后更新人账号 ID | 普通 |
| crm_lead | Lead | updated_at | DATETIME | 否 | 最后更新时间 | 普通 |
| crm_lead | Lead | is_deleted | TINYINT | 是 | 是否已删除,0 未删除,1 已删除 | 普通 |
| crm_lead | Lead | deleted_at | DATETIME | 否 | 删除时间,未删除为空 | 普通 |
| crm_lead | Lead | deleted_by | BIGINT | 否 | 删除人账号 ID,未删除为空 | 普通 |
| crm_lead | Lead | version | INT | 是 | 乐观锁版本号,写操作必须校验 | 普通 |
| crm_lead | Lead | lead_no | VARCHAR(64) | 是 | 线索编号,唯一 | 普通 |
| crm_lead | Lead | source_channel | VARCHAR(64) | 是 | 来源渠道 | 普通 |
| crm_lead | Lead | campaign_id | BIGINT | 否 | 来源活动 ID | 普通 |
| crm_lead | Lead | guardian_mobile | VARCHAR(32) | 是 | 家长手机号,敏感 | 敏感 |
| crm_lead | Lead | student_name | VARCHAR(64) | 否 | 学员姓名 | 普通 |
| crm_lead | Lead | intent_course_id | BIGINT | 否 | 意向课程 | 普通 |
| crm_lead | Lead | owner_id | BIGINT | 否 | 当前归属销售/顾问 | 普通 |
| crm_lead | Lead | protect_until | DATETIME | 否 | 保护期截止时间 | 普通 |
| crm_lead | Lead | duplicate_status | VARCHAR(32) | 是 | 未查重/疑似重复/已合并/已忽略 | 普通 |
| crm_lead | Lead | biz_status | VARCHAR(32) | 是 | 业务状态,取值来自状态机字典 | 普通 |
| crm_lead | Lead | remark | VARCHAR(512) | 否 | 业务备注,敏感内容按权限脱敏 | 普通 |
| crm_customer_family | CustomerFamily | id | BIGINT | 是 | 主键,雪花或号段生成,禁止复用 | 普通 |
| crm_customer_family | CustomerFamily | tenant_id | BIGINT | 是 | 集团/租户隔离字段,所有查询必须带租户上下文 | 普通 |
| crm_customer_family | CustomerFamily | org_id | BIGINT | 否 | 所属组织,集团级或公共配置为空 | 普通 |
| crm_customer_family | CustomerFamily | campus_id | BIGINT | 否 | 所属校区,跨校区或总部级数据为空 | 普通 |
| crm_customer_family | CustomerFamily | created_by | BIGINT | 是 | 创建人账号 ID | 普通 |
| crm_customer_family | CustomerFamily | created_at | DATETIME | 是 | 创建时间 | 普通 |
| crm_customer_family | CustomerFamily | updated_by | BIGINT | 否 | 最后更新人账号 ID | 普通 |
| crm_customer_family | CustomerFamily | updated_at | DATETIME | 否 | 最后更新时间 | 普通 |
| crm_customer_family | CustomerFamily | is_deleted | TINYINT | 是 | 是否已删除,0 未删除,1 已删除 | 普通 |
| crm_customer_family | CustomerFamily | deleted_at | DATETIME | 否 | 删除时间,未删除为空 | 普通 |
| crm_customer_family | CustomerFamily | deleted_by | BIGINT | 否 | 删除人账号 ID,未删除为空 | 普通 |
| crm_customer_family | CustomerFamily | version | INT | 是 | 乐观锁版本号,写操作必须校验 | 普通 |
| crm_customer_family | CustomerFamily | family_no | VARCHAR(64) | 是 | 家庭编号,唯一 | 普通 |
| crm_customer_family | CustomerFamily | primary_guardian_id | BIGINT | 否 | 主监护人 ID | 普通 |
| crm_customer_family | CustomerFamily | student_id | BIGINT | 否 | 主学员 ID | 普通 |
| crm_customer_family | CustomerFamily | owner_id | BIGINT | 否 | 客户归属人 | 普通 |
| crm_customer_family | CustomerFamily | risk_level | VARCHAR(32) | 否 | 风险等级 | 普通 |
| crm_customer_family | CustomerFamily | last_follow_at | DATETIME | 否 | 最近跟进时间 | 普通 |
| crm_customer_family | CustomerFamily | biz_status | VARCHAR(32) | 是 | 业务状态,取值来自状态机字典 | 普通 |
| crm_customer_family | CustomerFamily | remark | VARCHAR(512) | 否 | 业务备注,敏感内容按权限脱敏 | 普通 |
| crm_guardian | Guardian | id | BIGINT | 是 | 主键,雪花或号段生成,禁止复用 | 普通 |
| crm_guardian | Guardian | tenant_id | BIGINT | 是 | 集团/租户隔离字段,所有查询必须带租户上下文 | 普通 |
| crm_guardian | Guardian | org_id | BIGINT | 否 | 所属组织,集团级或公共配置为空 | 普通 |
| crm_guardian | Guardian | campus_id | BIGINT | 否 | 所属校区,跨校区或总部级数据为空 | 普通 |
| crm_guardian | Guardian | created_by | BIGINT | 是 | 创建人账号 ID | 普通 |
| crm_guardian | Guardian | created_at | DATETIME | 是 | 创建时间 | 普通 |
| crm_guardian | Guardian | updated_by | BIGINT | 否 | 最后更新人账号 ID | 普通 |
| crm_guardian | Guardian | updated_at | DATETIME | 否 | 最后更新时间 | 普通 |
| crm_guardian | Guardian | is_deleted | TINYINT | 是 | 是否已删除,0 未删除,1 已删除 | 普通 |
| crm_guardian | Guardian | deleted_at | DATETIME | 否 | 删除时间,未删除为空 | 普通 |
| crm_guardian | Guardian | deleted_by | BIGINT | 否 | 删除人账号 ID,未删除为空 | 普通 |
| crm_guardian | Guardian | version | INT | 是 | 乐观锁版本号,写操作必须校验 | 普通 |
| crm_guardian | Guardian | family_id | BIGINT | 是 | 家庭 ID | 普通 |
| crm_guardian | Guardian | guardian_name | VARCHAR(64) | 是 | 监护人姓名 | 普通 |
| crm_guardian | Guardian | mobile | VARCHAR(32) | 是 | 手机号,敏感 | 敏感 |
| crm_guardian | Guardian | relationship | VARCHAR(32) | 是 | 与学员关系 | 普通 |
| crm_guardian | Guardian | wechat_openid | VARCHAR(128) | 否 | 微信 OpenID,敏感 | 敏感 |
| crm_guardian | Guardian | verify_status | VARCHAR(32) | 是 | 未验证/已验证/已解绑 | 普通 |
| stu_student | Student | id | BIGINT | 是 | 主键,雪花或号段生成,禁止复用 | 普通 |
| stu_student | Student | tenant_id | BIGINT | 是 | 集团/租户隔离字段,所有查询必须带租户上下文 | 普通 |
| stu_student | Student | org_id | BIGINT | 否 | 所属组织,集团级或公共配置为空 | 普通 |
| stu_student | Student | campus_id | BIGINT | 否 | 所属校区,跨校区或总部级数据为空 | 普通 |
| stu_student | Student | created_by | BIGINT | 是 | 创建人账号 ID | 普通 |
| stu_student | Student | created_at | DATETIME | 是 | 创建时间 | 普通 |
| stu_student | Student | updated_by | BIGINT | 否 | 最后更新人账号 ID | 普通 |
| stu_student | Student | updated_at | DATETIME | 否 | 最后更新时间 | 普通 |
| stu_student | Student | is_deleted | TINYINT | 是 | 是否已删除,0 未删除,1 已删除 | 普通 |
| stu_student | Student | deleted_at | DATETIME | 否 | 删除时间,未删除为空 | 普通 |
| stu_student | Student | deleted_by | BIGINT | 否 | 删除人账号 ID,未删除为空 | 普通 |
| stu_student | Student | version | INT | 是 | 乐观锁版本号,写操作必须校验 | 普通 |
| stu_student | Student | student_no | VARCHAR(64) | 是 | 学员编号,唯一 | 普通 |
| stu_student | Student | family_id | BIGINT | 否 | 家庭 ID | 普通 |
| stu_student | Student | student_name | VARCHAR(64) | 是 | 学员姓名 | 普通 |
| stu_student | Student | gender | VARCHAR(16) | 否 | 性别 | 普通 |
| stu_student | Student | birthday | DATE | 否 | 出生日期 | 普通 |
| stu_student | Student | grade | VARCHAR(32) | 否 | 年级 | 普通 |
| stu_student | Student | school_name | VARCHAR(128) | 否 | 学校名称 | 普通 |
| stu_student | Student | biz_status | VARCHAR(32) | 是 | 业务状态,取值来自状态机字典 | 普通 |
| stu_student | Student | remark | VARCHAR(512) | 否 | 业务备注,敏感内容按权限脱敏 | 普通 |
| crm_follow_record | FollowRecord | id | BIGINT | 是 | 主键,雪花或号段生成,禁止复用 | 普通 |
| crm_follow_record | FollowRecord | tenant_id | BIGINT | 是 | 集团/租户隔离字段,所有查询必须带租户上下文 | 普通 |
| crm_follow_record | FollowRecord | org_id | BIGINT | 否 | 所属组织,集团级或公共配置为空 | 普通 |
| crm_follow_record | FollowRecord | campus_id | BIGINT | 否 | 所属校区,跨校区或总部级数据为空 | 普通 |
| crm_follow_record | FollowRecord | created_by | BIGINT | 是 | 创建人账号 ID | 普通 |
| crm_follow_record | FollowRecord | created_at | DATETIME | 是 | 创建时间 | 普通 |
| crm_follow_record | FollowRecord | updated_by | BIGINT | 否 | 最后更新人账号 ID | 普通 |
| crm_follow_record | FollowRecord | updated_at | DATETIME | 否 | 最后更新时间 | 普通 |
| crm_follow_record | FollowRecord | is_deleted | TINYINT | 是 | 是否已删除,0 未删除,1 已删除 | 普通 |
| crm_follow_record | FollowRecord | deleted_at | DATETIME | 否 | 删除时间,未删除为空 | 普通 |
| crm_follow_record | FollowRecord | deleted_by | BIGINT | 否 | 删除人账号 ID,未删除为空 | 普通 |
| crm_follow_record | FollowRecord | version | INT | 是 | 乐观锁版本号,写操作必须校验 | 普通 |
| crm_follow_record | FollowRecord | lead_id | BIGINT | 否 | 线索 ID | 普通 |
| crm_follow_record | FollowRecord | family_id | BIGINT | 否 | 客户家庭 ID | 普通 |
| crm_follow_record | FollowRecord | owner_id | BIGINT | 是 | 跟进人 ID | 普通 |
| crm_follow_record | FollowRecord | follow_type | VARCHAR(32) | 是 | 电话/微信/到访/试听/其他 | 普通 |
| crm_follow_record | FollowRecord | follow_content | TEXT | 是 | 跟进内容 | 普通 |
| crm_follow_record | FollowRecord | next_follow_at | DATETIME | 否 | 下次跟进时间 | 普通 |
| crm_follow_record | FollowRecord | follow_result | VARCHAR(32) | 是 | 有效/无效/待跟进/转化 | 普通 |
| crm_trial_lesson | TrialLesson | id | BIGINT | 是 | 主键,雪花或号段生成,禁止复用 | 普通 |
| crm_trial_lesson | TrialLesson | tenant_id | BIGINT | 是 | 集团/租户隔离字段,所有查询必须带租户上下文 | 普通 |
| crm_trial_lesson | TrialLesson | org_id | BIGINT | 否 | 所属组织,集团级或公共配置为空 | 普通 |
| crm_trial_lesson | TrialLesson | campus_id | BIGINT | 否 | 所属校区,跨校区或总部级数据为空 | 普通 |
| crm_trial_lesson | TrialLesson | created_by | BIGINT | 是 | 创建人账号 ID | 普通 |
| crm_trial_lesson | TrialLesson | created_at | DATETIME | 是 | 创建时间 | 普通 |
| crm_trial_lesson | TrialLesson | updated_by | BIGINT | 否 | 最后更新人账号 ID | 普通 |
| crm_trial_lesson | TrialLesson | updated_at | DATETIME | 否 | 最后更新时间 | 普通 |
| crm_trial_lesson | TrialLesson | is_deleted | TINYINT | 是 | 是否已删除,0 未删除,1 已删除 | 普通 |
| crm_trial_lesson | TrialLesson | deleted_at | DATETIME | 否 | 删除时间,未删除为空 | 普通 |
| crm_trial_lesson | TrialLesson | deleted_by | BIGINT | 否 | 删除人账号 ID,未删除为空 | 普通 |
| crm_trial_lesson | TrialLesson | version | INT | 是 | 乐观锁版本号,写操作必须校验 | 普通 |
| crm_trial_lesson | TrialLesson | trial_no | VARCHAR(64) | 是 | 试听编号,唯一 | 普通 |
| crm_trial_lesson | TrialLesson | lead_id | BIGINT | 否 | 线索 ID | 普通 |
| crm_trial_lesson | TrialLesson | student_id | BIGINT | 是 | 学员 ID | 普通 |
| crm_trial_lesson | TrialLesson | course_id | BIGINT | 是 | 试听课程 ID | 普通 |
| crm_trial_lesson | TrialLesson | lesson_time | DATETIME | 是 | 试听时间 | 普通 |
| crm_trial_lesson | TrialLesson | teacher_id | BIGINT | 否 | 试听教师 ID | 普通 |
| crm_trial_lesson | TrialLesson | trial_status | VARCHAR(32) | 是 | 待确认/已预约/已到访/未到访/已取消 | 普通 |
| crm_trial_lesson | TrialLesson | arrival_status | VARCHAR(32) | 否 | 到访状态 | 普通 |
| crm_trial_feedback | TrialFeedback | id | BIGINT | 是 | 主键,雪花或号段生成,禁止复用 | 普通 |
| crm_trial_feedback | TrialFeedback | tenant_id | BIGINT | 是 | 集团/租户隔离字段,所有查询必须带租户上下文 | 普通 |
| crm_trial_feedback | TrialFeedback | org_id | BIGINT | 否 | 所属组织,集团级或公共配置为空 | 普通 |
| crm_trial_feedback | TrialFeedback | campus_id | BIGINT | 否 | 所属校区,跨校区或总部级数据为空 | 普通 |
| crm_trial_feedback | TrialFeedback | created_by | BIGINT | 是 | 创建人账号 ID | 普通 |
| crm_trial_feedback | TrialFeedback | created_at | DATETIME | 是 | 创建时间 | 普通 |
| crm_trial_feedback | TrialFeedback | updated_by | BIGINT | 否 | 最后更新人账号 ID | 普通 |
| crm_trial_feedback | TrialFeedback | updated_at | DATETIME | 否 | 最后更新时间 | 普通 |
| crm_trial_feedback | TrialFeedback | is_deleted | TINYINT | 是 | 是否已删除,0 未删除,1 已删除 | 普通 |
| crm_trial_feedback | TrialFeedback | deleted_at | DATETIME | 否 | 删除时间,未删除为空 | 普通 |
| crm_trial_feedback | TrialFeedback | deleted_by | BIGINT | 否 | 删除人账号 ID,未删除为空 | 普通 |
| crm_trial_feedback | TrialFeedback | version | INT | 是 | 乐观锁版本号,写操作必须校验 | 普通 |
| crm_trial_feedback | TrialFeedback | trial_id | BIGINT | 是 | 试听预约 ID | 普通 |
| crm_trial_feedback | TrialFeedback | teacher_feedback | TEXT | 否 | 教师反馈 | 普通 |
| crm_trial_feedback | TrialFeedback | guardian_rating | DECIMAL(4,2) | 否 | 家长评分 | 普通 |
| crm_trial_feedback | TrialFeedback | next_action | VARCHAR(64) | 否 | 下一步动作 | 普通 |
| crm_trial_feedback | TrialFeedback | conversion_status | VARCHAR(32) | 是 | 待转化/已转化/暂不转化/失败 | 普通 |
| crm_lead_assignment | LeadAssignment | id | BIGINT | 是 | 主键,雪花或号段生成,禁止复用 | 普通 |
| crm_lead_assignment | LeadAssignment | tenant_id | BIGINT | 是 | 集团/租户隔离字段,所有查询必须带租户上下文 | 普通 |
| crm_lead_assignment | LeadAssignment | org_id | BIGINT | 否 | 所属组织,集团级或公共配置为空 | 普通 |
| crm_lead_assignment | LeadAssignment | campus_id | BIGINT | 否 | 所属校区,跨校区或总部级数据为空 | 普通 |
| crm_lead_assignment | LeadAssignment | created_by | BIGINT | 是 | 创建人账号 ID | 普通 |
| crm_lead_assignment | LeadAssignment | created_at | DATETIME | 是 | 创建时间 | 普通 |
| crm_lead_assignment | LeadAssignment | updated_by | BIGINT | 否 | 最后更新人账号 ID | 普通 |
| crm_lead_assignment | LeadAssignment | updated_at | DATETIME | 否 | 最后更新时间 | 普通 |
| crm_lead_assignment | LeadAssignment | is_deleted | TINYINT | 是 | 是否已删除,0 未删除,1 已删除 | 普通 |
| crm_lead_assignment | LeadAssignment | deleted_at | DATETIME | 否 | 删除时间,未删除为空 | 普通 |
| crm_lead_assignment | LeadAssignment | deleted_by | BIGINT | 否 | 删除人账号 ID,未删除为空 | 普通 |
| crm_lead_assignment | LeadAssignment | version | INT | 是 | 乐观锁版本号,写操作必须校验 | 普通 |
| crm_lead_assignment | LeadAssignment | assignment_no | VARCHAR(64) | 是 | 分配编号,唯一 | 普通 |
| crm_lead_assignment | LeadAssignment | lead_id | BIGINT | 是 | 线索 ID | 普通 |
| crm_lead_assignment | LeadAssignment | from_owner_id | BIGINT | 否 | 原归属人 | 普通 |
| crm_lead_assignment | LeadAssignment | to_owner_id | BIGINT | 是 | 新归属人 | 普通 |
| crm_lead_assignment | LeadAssignment | assignment_reason | VARCHAR(255) | 是 | 分配原因 | 普通 |
| crm_lead_assignment | LeadAssignment | assignment_status | VARCHAR(32) | 是 | 待处理/已生效/已驳回 | 普通 |
| crm_lead_assignment | LeadAssignment | approval_status | VARCHAR(32) | 否 | 审批状态,未发起为空 | 普通 |
| crm_lead_assignment | LeadAssignment | approval_instance_id | BIGINT | 否 | 关联审批实例 ID | 普通 |
| crm_duplicate_candidate | DuplicateCandidate | id | BIGINT | 是 | 主键,雪花或号段生成,禁止复用 | 普通 |
| crm_duplicate_candidate | DuplicateCandidate | tenant_id | BIGINT | 是 | 集团/租户隔离字段,所有查询必须带租户上下文 | 普通 |
| crm_duplicate_candidate | DuplicateCandidate | org_id | BIGINT | 否 | 所属组织,集团级或公共配置为空 | 普通 |
| crm_duplicate_candidate | DuplicateCandidate | campus_id | BIGINT | 否 | 所属校区,跨校区或总部级数据为空 | 普通 |
| crm_duplicate_candidate | DuplicateCandidate | created_by | BIGINT | 是 | 创建人账号 ID | 普通 |
| crm_duplicate_candidate | DuplicateCandidate | created_at | DATETIME | 是 | 创建时间 | 普通 |
| crm_duplicate_candidate | DuplicateCandidate | updated_by | BIGINT | 否 | 最后更新人账号 ID | 普通 |
| crm_duplicate_candidate | DuplicateCandidate | updated_at | DATETIME | 否 | 最后更新时间 | 普通 |
| crm_duplicate_candidate | DuplicateCandidate | is_deleted | TINYINT | 是 | 是否已删除,0 未删除,1 已删除 | 普通 |
| crm_duplicate_candidate | DuplicateCandidate | deleted_at | DATETIME | 否 | 删除时间,未删除为空 | 普通 |
| crm_duplicate_candidate | DuplicateCandidate | deleted_by | BIGINT | 否 | 删除人账号 ID,未删除为空 | 普通 |
| crm_duplicate_candidate | DuplicateCandidate | version | INT | 是 | 乐观锁版本号,写操作必须校验 | 普通 |
| crm_duplicate_candidate | DuplicateCandidate | candidate_no | VARCHAR(64) | 是 | 候选编号,唯一 | 普通 |
| crm_duplicate_candidate | DuplicateCandidate | source_biz_type | VARCHAR(64) | 是 | 来源对象类型 | 普通 |
| crm_duplicate_candidate | DuplicateCandidate | source_biz_id | BIGINT | 是 | 来源对象 ID | 普通 |
| crm_duplicate_candidate | DuplicateCandidate | matched_biz_id | BIGINT | 是 | 疑似重复对象 ID | 普通 |
| crm_duplicate_candidate | DuplicateCandidate | match_score | DECIMAL(8,4) | 是 | 匹配分数 | 普通 |
| crm_duplicate_candidate | DuplicateCandidate | handle_status | VARCHAR(32) | 是 | 待处理/已合并/已忽略 | 普通 |
| crm_merge_dispute | MergeDispute | id | BIGINT | 是 | 主键,雪花或号段生成,禁止复用 | 普通 |
| crm_merge_dispute | MergeDispute | tenant_id | BIGINT | 是 | 集团/租户隔离字段,所有查询必须带租户上下文 | 普通 |
| crm_merge_dispute | MergeDispute | org_id | BIGINT | 否 | 所属组织,集团级或公共配置为空 | 普通 |
| crm_merge_dispute | MergeDispute | campus_id | BIGINT | 否 | 所属校区,跨校区或总部级数据为空 | 普通 |
| crm_merge_dispute | MergeDispute | created_by | BIGINT | 是 | 创建人账号 ID | 普通 |
| crm_merge_dispute | MergeDispute | created_at | DATETIME | 是 | 创建时间 | 普通 |
| crm_merge_dispute | MergeDispute | updated_by | BIGINT | 否 | 最后更新人账号 ID | 普通 |
| crm_merge_dispute | MergeDispute | updated_at | DATETIME | 否 | 最后更新时间 | 普通 |
| crm_merge_dispute | MergeDispute | is_deleted | TINYINT | 是 | 是否已删除,0 未删除,1 已删除 | 普通 |
| crm_merge_dispute | MergeDispute | deleted_at | DATETIME | 否 | 删除时间,未删除为空 | 普通 |
| crm_merge_dispute | MergeDispute | deleted_by | BIGINT | 否 | 删除人账号 ID,未删除为空 | 普通 |
| crm_merge_dispute | MergeDispute | version | INT | 是 | 乐观锁版本号,写操作必须校验 | 普通 |
| crm_merge_dispute | MergeDispute | dispute_no | VARCHAR(64) | 是 | 争议编号,唯一 | 普通 |
| crm_merge_dispute | MergeDispute | lead_ids | JSON | 是 | 涉及线索 ID 列表 | 普通 |
| crm_merge_dispute | MergeDispute | family_id | BIGINT | 否 | 客户家庭 ID | 普通 |
| crm_merge_dispute | MergeDispute | owner_candidates | JSON | 是 | 候选归属人列表 | 普通 |
| crm_merge_dispute | MergeDispute | restore_snapshot | JSON | 否 | 误合并恢复快照 | 普通 |
| crm_merge_dispute | MergeDispute | arbitrate_status | VARCHAR(32) | 是 | 待仲裁/已通过/已驳回/已恢复 | 普通 |
| crm_merge_dispute | MergeDispute | approval_status | VARCHAR(32) | 否 | 审批状态,未发起为空 | 普通 |
| crm_merge_dispute | MergeDispute | approval_instance_id | BIGINT | 否 | 关联审批实例 ID | 普通 |
数据表与对象映射
| 表名 | 对象 | 用途 | 完整字段 | 索引建议 |
|---|---|---|---|---|
| crm_role_terminal_policy | CRMRoleTerminalPolicy | CRM 角色终端与字段权限策略 | id(BIGINT,必填)、tenant_id(BIGINT,必填)、org_id(BIGINT)、campus_id(BIGINT)、created_by(BIGINT,必填)、created_at(DATETIME,必填)、updated_by(BIGINT)、updated_at(DATETIME)、is_deleted(TINYINT,必填)、deleted_at(DATETIME)、deleted_by(BIGINT)、version(INT,必填)、role_code(VARCHAR(64),必填)、terminal_scope(VARCHAR(64),必填)、menu_codes(JSON,必填)、button_codes(JSON)、field_policy_json(JSON,必填)、data_scope_rule(JSON,必填)、enabled(TINYINT,必填) | uk_role_terminal、idx_enabled |
| crm_lead | Lead | 销售线索主表 | id(BIGINT,必填)、tenant_id(BIGINT,必填)、org_id(BIGINT)、campus_id(BIGINT)、created_by(BIGINT,必填)、created_at(DATETIME,必填)、updated_by(BIGINT)、updated_at(DATETIME)、is_deleted(TINYINT,必填)、deleted_at(DATETIME)、deleted_by(BIGINT)、version(INT,必填)、lead_no(VARCHAR(64),必填)、source_channel(VARCHAR(64),必填)、campaign_id(BIGINT)、guardian_mobile(VARCHAR(32),必填)、student_name(VARCHAR(64))、intent_course_id(BIGINT)、owner_id(BIGINT)、protect_until(DATETIME)、duplicate_status(VARCHAR(32),必填)、biz_status(VARCHAR(32),必填)、remark(VARCHAR(512)) | uk_lead_no、idx_mobile_student、idx_owner_status |
| crm_customer_family | CustomerFamily | 客户家庭档案 | id(BIGINT,必填)、tenant_id(BIGINT,必填)、org_id(BIGINT)、campus_id(BIGINT)、created_by(BIGINT,必填)、created_at(DATETIME,必填)、updated_by(BIGINT)、updated_at(DATETIME)、is_deleted(TINYINT,必填)、deleted_at(DATETIME)、deleted_by(BIGINT)、version(INT,必填)、family_no(VARCHAR(64),必填)、primary_guardian_id(BIGINT)、student_id(BIGINT)、owner_id(BIGINT)、risk_level(VARCHAR(32))、last_follow_at(DATETIME)、biz_status(VARCHAR(32),必填)、remark(VARCHAR(512)) | uk_family_no、idx_owner_status |
| crm_guardian | Guardian | 监护人/家长资料 | id(BIGINT,必填)、tenant_id(BIGINT,必填)、org_id(BIGINT)、campus_id(BIGINT)、created_by(BIGINT,必填)、created_at(DATETIME,必填)、updated_by(BIGINT)、updated_at(DATETIME)、is_deleted(TINYINT,必填)、deleted_at(DATETIME)、deleted_by(BIGINT)、version(INT,必填)、family_id(BIGINT,必填)、guardian_name(VARCHAR(64),必填)、mobile(VARCHAR(32),必填)、relationship(VARCHAR(32),必填)、wechat_openid(VARCHAR(128))、verify_status(VARCHAR(32),必填) | idx_family、idx_mobile |
| stu_student | Student | 学员基础档案 | id(BIGINT,必填)、tenant_id(BIGINT,必填)、org_id(BIGINT)、campus_id(BIGINT)、created_by(BIGINT,必填)、created_at(DATETIME,必填)、updated_by(BIGINT)、updated_at(DATETIME)、is_deleted(TINYINT,必填)、deleted_at(DATETIME)、deleted_by(BIGINT)、version(INT,必填)、student_no(VARCHAR(64),必填)、family_id(BIGINT)、student_name(VARCHAR(64),必填)、gender(VARCHAR(16))、birthday(DATE)、grade(VARCHAR(32))、school_name(VARCHAR(128))、biz_status(VARCHAR(32),必填)、remark(VARCHAR(512)) | uk_student_no、idx_family |
| crm_follow_record | FollowRecord | 线索/客户跟进记录 | id(BIGINT,必填)、tenant_id(BIGINT,必填)、org_id(BIGINT)、campus_id(BIGINT)、created_by(BIGINT,必填)、created_at(DATETIME,必填)、updated_by(BIGINT)、updated_at(DATETIME)、is_deleted(TINYINT,必填)、deleted_at(DATETIME)、deleted_by(BIGINT)、version(INT,必填)、lead_id(BIGINT)、family_id(BIGINT)、owner_id(BIGINT,必填)、follow_type(VARCHAR(32),必填)、follow_content(TEXT,必填)、next_follow_at(DATETIME)、follow_result(VARCHAR(32),必填) | idx_lead_time、idx_owner_next |
| crm_trial_lesson | TrialLesson | 试听预约 | id(BIGINT,必填)、tenant_id(BIGINT,必填)、org_id(BIGINT)、campus_id(BIGINT)、created_by(BIGINT,必填)、created_at(DATETIME,必填)、updated_by(BIGINT)、updated_at(DATETIME)、is_deleted(TINYINT,必填)、deleted_at(DATETIME)、deleted_by(BIGINT)、version(INT,必填)、trial_no(VARCHAR(64),必填)、lead_id(BIGINT)、student_id(BIGINT,必填)、course_id(BIGINT,必填)、lesson_time(DATETIME,必填)、teacher_id(BIGINT)、trial_status(VARCHAR(32),必填)、arrival_status(VARCHAR(32)) | uk_trial_no、idx_lead_status、idx_lesson_time |
| crm_trial_feedback | TrialFeedback | 试听反馈与转化建议 | id(BIGINT,必填)、tenant_id(BIGINT,必填)、org_id(BIGINT)、campus_id(BIGINT)、created_by(BIGINT,必填)、created_at(DATETIME,必填)、updated_by(BIGINT)、updated_at(DATETIME)、is_deleted(TINYINT,必填)、deleted_at(DATETIME)、deleted_by(BIGINT)、version(INT,必填)、trial_id(BIGINT,必填)、teacher_feedback(TEXT)、guardian_rating(DECIMAL(4,2))、next_action(VARCHAR(64))、conversion_status(VARCHAR(32),必填) | idx_trial、idx_conversion |
| crm_lead_assignment | LeadAssignment | 线索分配、重分配与申诉 | id(BIGINT,必填)、tenant_id(BIGINT,必填)、org_id(BIGINT)、campus_id(BIGINT)、created_by(BIGINT,必填)、created_at(DATETIME,必填)、updated_by(BIGINT)、updated_at(DATETIME)、is_deleted(TINYINT,必填)、deleted_at(DATETIME)、deleted_by(BIGINT)、version(INT,必填)、assignment_no(VARCHAR(64),必填)、lead_id(BIGINT,必填)、from_owner_id(BIGINT)、to_owner_id(BIGINT,必填)、assignment_reason(VARCHAR(255),必填)、assignment_status(VARCHAR(32),必填)、approval_status(VARCHAR(32))、approval_instance_id(BIGINT) | uk_assignment_no、idx_lead_status |
| crm_duplicate_candidate | DuplicateCandidate | 重复线索/客户候选 | id(BIGINT,必填)、tenant_id(BIGINT,必填)、org_id(BIGINT)、campus_id(BIGINT)、created_by(BIGINT,必填)、created_at(DATETIME,必填)、updated_by(BIGINT)、updated_at(DATETIME)、is_deleted(TINYINT,必填)、deleted_at(DATETIME)、deleted_by(BIGINT)、version(INT,必填)、candidate_no(VARCHAR(64),必填)、source_biz_type(VARCHAR(64),必填)、source_biz_id(BIGINT,必填)、matched_biz_id(BIGINT,必填)、match_score(DECIMAL(8,4),必填)、handle_status(VARCHAR(32),必填) | uk_candidate_no、idx_source、idx_status_score |
| crm_merge_dispute | MergeDispute | 撞单、合并与归属仲裁 | id(BIGINT,必填)、tenant_id(BIGINT,必填)、org_id(BIGINT)、campus_id(BIGINT)、created_by(BIGINT,必填)、created_at(DATETIME,必填)、updated_by(BIGINT)、updated_at(DATETIME)、is_deleted(TINYINT,必填)、deleted_at(DATETIME)、deleted_by(BIGINT)、version(INT,必填)、dispute_no(VARCHAR(64),必填)、lead_ids(JSON,必填)、family_id(BIGINT)、owner_candidates(JSON,必填)、restore_snapshot(JSON)、arbitrate_status(VARCHAR(32),必填)、approval_status(VARCHAR(32))、approval_instance_id(BIGINT) | uk_dispute_no、idx_status |
12 · 状态机与业务规则
约束业务对象如何流转、何时可编辑、何时触发审批
原型需要把状态标签、可操作按钮和禁用原因展示清楚。| 对象 | 状态 | 触发与说明 |
|---|---|---|
| 线索状态 | 新线索 -> 待分配 -> 已分配 -> 跟进中 -> 已预约试听 -> 试听完成 -> 已转化 -> 已流失 -> 已回收公海 -> 异常待处理 | 移动端新增和跟进,PC 管理端分配、回收、异常处理和全量状态追踪 |
| 线索归属 | 未归属 -> 本人负责 -> 团队协作 -> 主管待分配 -> 跨校区待审批 -> 已重新分配 -> 归属争议中 -> 已仲裁 -> 已回收 | 按归属规则、保护期、公海规则、重新分配和申诉仲裁流转 |
| 去重合并 | 待查重 -> 疑似重复 -> 合并待确认 -> 已合并 -> 误合并待恢复 -> 已恢复 -> 无需合并 | 线索入库、导入、移动端新增和 PC 批量治理均需触发查重 |
| 跟进任务 | 待跟进 -> 今日待办 -> 已完成 -> 超时 -> 已提醒 -> 已关闭 -> 转人工 | 移动端展示本人待办,超时后按规则提醒、升级或回收 |
| 试听预约 | 待预约 -> 已预约 -> 待到访 -> 已到访 -> 未到访 -> 教师已反馈 -> 待二次跟进 -> 已转化 -> 已流失 | 试听从邀约、到访、教师反馈、顾问跟进到转化或流失闭环 |
| 归属申诉 | 草稿 -> 已提交 -> 主管处理中 -> 需补充材料 -> 已通过 -> 已驳回 -> 已关闭 | 销售/市场移动端发起,PC 管理端处理并回写结果 |
CRM 客户中心涉及该规则时,必须在前端提示、后端校验、审计日志和测试用例中同时覆盖。
CRM 客户中心涉及该规则时,必须在前端提示、后端校验、审计日志和测试用例中同时覆盖。
CRM 客户中心涉及该规则时,必须在前端提示、后端校验、审计日志和测试用例中同时覆盖。
CRM 客户中心涉及该规则时,必须在前端提示、后端校验、审计日志和测试用例中同时覆盖。
CRM 客户中心涉及该规则时,必须在前端提示、后端校验、审计日志和测试用例中同时覆盖。
CRM 客户中心涉及该规则时,必须在前端提示、后端校验、审计日志和测试用例中同时覆盖。
13 · 权限、审批与消息
动作权限、数据范围、审批触发和消息触达必须闭环
权限需要覆盖菜单、按钮、字段、接口和导出。动作权限
- 移动端新增线索:需映射菜单、按钮、接口和字段权限
- 移动端跟进:需映射菜单、按钮、接口和字段权限
- 移动端试听邀约:需映射菜单、按钮、接口和字段权限
- PC 全量查询:需映射菜单、按钮、接口和字段权限
- PC 查重合并:需映射菜单、按钮、接口和字段权限
- PC 重新分配:需映射菜单、按钮、接口和字段权限
- PC 归属仲裁:需映射菜单、按钮、接口和字段权限
- 异常处理:需映射菜单、按钮、接口和字段权限
数据范围
- 总部全量
- 区域辖区
- 校区本地
- 部门/岗位
- 本人负责
- 授权班级/学员
审批配置
| 审批名称 | 触发条件 | 流程 | 结果 | 留痕 |
|---|---|---|---|---|
| 客户去重合并审批 | 涉及已转客户、已有合同、跨校区或高价值客户时触发审批 | 申请人 -> 销售主管 -> CRM 管理员 | 通过后合并并归并跟进/试听/活动来源,驳回保留原记录 | 保留合并前快照、审批意见、影响对象和恢复入口 |
| 误合并恢复审批 | 已合并客户需要拆分或恢复历史快照 | 申请人 -> CRM 管理员 -> 安全审计员可选 | 通过后恢复客户、线索、跟进、试听和合同关联关系 | 保留恢复原因、快照版本、操作人和恢复结果 |
| 线索重新分配审批 | 跨校区、批量、保护期内、主管外团队或高价值线索重新分配 | 销售主管 -> 校区负责人/区域负责人 -> CRM 管理员 | 通过后变更责任人并通知原/新责任人 | 记录原责任人、新责任人、原因、审批和消息触达 |
| 归属仲裁审批 | 销售/市场对撞单、回收、重新分配或活动归因结果有争议 | 申诉人 -> 销售主管 -> CRM 管理员 | 通过后调整归属或保留原判定 | 保留证据、判定规则、仲裁意见和处理时长 |
| 敏感客户信息导出审批 | 导出手机号、家庭信息、跟进记录、合同摘要等敏感数据 | 申请人 -> 主管 -> 安全管理员 | 通过后限时导出并加水印 | 记录导出范围、文件水印、下载次数和过期时间 |
消息模板
| 消息 | 接收人 | 触发 | 渠道 | 变量 |
|---|---|---|---|---|
| 新线索分配提醒 | 课程顾问/销售人员 | 线索分配、重新分配或公海领取成功 | 迪诺学堂教师端 App/小程序、站内信 | 线索编号、来源渠道、保护期、跟进截止时间 |
| 市场活动线索提醒 | 市场人员 | 本人负责活动产生新报名、扫码或公开课线索 | 迪诺学堂教师端 App/小程序 | 活动名称、渠道、留资数量、转销售状态 |
| 跟进超时提醒 | 课程顾问/销售人员/销售主管 | 跟进截止前、已超时、保护期即将到期 | 迪诺学堂教师端 App/小程序、站内信 | 线索、责任人、剩余时间、处理入口 |
| 撞单待处理提醒 | 销售主管/CRM 管理员 | 系统识别疑似重复、合并冲突或归属争议 | PC Web 待办、站内信 | 重复候选、相似度、来源、处理入口 |
| 归属变更通知 | 原责任人/新责任人/销售主管 | 重新分配、回收公海、仲裁通过或驳回 | 迪诺学堂教师端 App/小程序、站内信 | 变更原因、处理人、生效时间、申诉入口 |
| 试听结果提醒 | 课程顾问/教师/销售主管 | 试听已到访、未到访、教师已反馈、待二次跟进 | 迪诺学堂教师端 App/小程序 | 试听课次、到访状态、反馈摘要、跟进任务 |
| 移动端越权提醒 | 课程顾问/销售人员/市场人员 | 访问非本人数据或 PC 管理入口 | 迪诺学堂教师端 App/小程序 | 拦截原因、可用入口、申诉入口 |
14 · 接口与技术细节
接口需支持幂等、权限、审计、重试和回执
每个写接口必须有 requestId 或业务幂等键,外部回调必须验签和去重。| 接口 | 方法 | 方向 | 请求字段 | 响应字段 | 幂等/权限 |
|---|---|---|---|---|---|
| /api/v1/crm/admin/leads | GET | PC Web 管理端到 CRM | tenantId, orgScope, campusId, ownerId, duplicateStatus, followStatus, pageNo, pageSize | records, total, duplicateSummary, assignSummary | 总部/区域/校区/主管数据范围校验 |
| /api/v1/crm/mobile/workbench | GET | 迪诺学堂教师端 App/小程序到 CRM | employeeId, roleCode, date, campusId | todoCount, myLeadSummary, todayFollowList, trialList, campaignLeadSummary | 仅返回本人负责、本人创建、本人参与或授权活动数据 |
| /api/v1/crm/activity-leads | GET | 迪诺学堂教师端 App/小程序到 CRM | employeeId, campaignId, assetId, followStatus, conversionStage, pageNo, pageSize | leadList, attributionSummary, nextTodoSummary | 仅返回本人推广资产或授权活动产生的线索 |
| /api/v1/crm/my-leads | POST/GET | 迪诺学堂教师端 App/小程序到 CRM | sourceChannel, guardianMobile, studentName, campaignId, followStatus, requestId | leadId, leadNo, duplicateResult, visibleActions | 手机号 + 学员名查重;移动端 owner 默认为当前登录员工 |
| /api/v1/crm/follow-records | POST | 迪诺学堂教师端 App/小程序到 CRM | leadId, customerId, followType, content, nextFollowAt, attachments, requestId | recordId, followStatus, nextTodoId, auditId | 只能操作本人负责或授权协作客户 |
| /api/v1/crm/leads/assign | POST | PC Web 管理端到 CRM | leadIds, ownerId, assignRule, reason, requestId | assignedCount, failedItems, notifyStatus | owner 数据范围校验,批量部分失败返回明细 |
| /api/v1/crm/leads/reassign | POST | PC Web 管理端/销售主管到 CRM | leadIds, fromOwnerId, toOwnerId, reason, approvalId, requestId | reassignBatchNo, reassignStatus, affectedCount | 跨校区、批量或保护期内重分配需审批 |
| /api/v1/crm/duplicate-candidates | GET | PC Web 管理端/教师端 App/小程序到 CRM | guardianMobile, studentName, leadId, customerId, scope | candidateList, mergeSuggestion, visibleFields | 移动端仅展示授权范围和脱敏字段 |
| /api/v1/crm/merge-disputes | POST/PATCH | PC Web 管理端到 CRM | leadIds, customerIds, action, disputeReason, restoreSnapshotId, requestId | disputeId, mergeStatus, restoreStatus, auditId | 合并、拆分、恢复必须保留快照并写审计 |
| /api/v1/crm/customers/{id} | GET/PUT | PC Web 管理端/教师端 App/小程序到 CRM | customerId, profile, relationship, tags, clientType | customerDetail, visibleFields, visibleActions, auditSummary | PC 管理端按授权全量;移动端仅本人/协作范围 |
| /api/v1/crm/trials | POST/GET | 教师端 App/小程序到教务/CRM | leadId, courseId, campusId, lessonTime, inviterId, requestId | trialId, scheduleStatus, notifyStatus | 同一时间冲突校验,移动端仅本人线索可预约 |
| /api/v1/crm/trials/{id}/feedback | POST | 教师端 App/小程序/PC Web 管理端到 CRM | trialId, arrivalStatus, teacherFeedback, guardianRating, nextAction, requestId | feedbackId, trialStatus, followTaskId | trialId 单反馈版本 |
前端约束
- 统一登录态和租户校区上下文
- 列表分页、筛选、排序、列显隐
- 表单本地校验与服务端错误映射
- 移动/平板/TV 按终端适配交互
后端约束
- 领域服务封装业务规则
- 写操作事务一致性
- 关键操作审计快照
- 异步任务失败重试和告警
集成约束
- 第三方接口统一走开放集成中心
- 回执文件归档
- 接口日志可按业务单号追踪
- 密钥和回调地址按环境隔离
15 · 数据库与存储设计
核心表建议、关键字段和索引方向
详细 DDL 已在平台技术设计文档中统一展开,本处保留模块核心表、关键字段和索引方向。| 表名 | 用途 | 核心字段 | 索引建议 |
|---|---|---|---|
| crm_role_terminal_policy | CRM 角色终端与字段权限策略 | id、tenant_id、org_id、campus_id、created_by、created_at、updated_by、updated_at、is_deleted、deleted_at、deleted_by、version、role_code、terminal_scope、menu_codes、button_codes、field_policy_json、data_scope_rule、enabled | uk_role_terminal、idx_enabled |
| crm_lead | 销售线索主表 | id、tenant_id、org_id、campus_id、created_by、created_at、updated_by、updated_at、is_deleted、deleted_at、deleted_by、version、lead_no、source_channel、campaign_id、guardian_mobile、student_name、intent_course_id、owner_id、protect_until、duplicate_status、biz_status、remark | uk_lead_no、idx_mobile_student、idx_owner_status |
| crm_customer_family | 客户家庭档案 | id、tenant_id、org_id、campus_id、created_by、created_at、updated_by、updated_at、is_deleted、deleted_at、deleted_by、version、family_no、primary_guardian_id、student_id、owner_id、risk_level、last_follow_at、biz_status、remark | uk_family_no、idx_owner_status |
| crm_guardian | 监护人/家长资料 | id、tenant_id、org_id、campus_id、created_by、created_at、updated_by、updated_at、is_deleted、deleted_at、deleted_by、version、family_id、guardian_name、mobile、relationship、wechat_openid、verify_status | idx_family、idx_mobile |
| stu_student | 学员基础档案 | id、tenant_id、org_id、campus_id、created_by、created_at、updated_by、updated_at、is_deleted、deleted_at、deleted_by、version、student_no、family_id、student_name、gender、birthday、grade、school_name、biz_status、remark | uk_student_no、idx_family |
| crm_follow_record | 线索/客户跟进记录 | id、tenant_id、org_id、campus_id、created_by、created_at、updated_by、updated_at、is_deleted、deleted_at、deleted_by、version、lead_id、family_id、owner_id、follow_type、follow_content、next_follow_at、follow_result | idx_lead_time、idx_owner_next |
| crm_trial_lesson | 试听预约 | id、tenant_id、org_id、campus_id、created_by、created_at、updated_by、updated_at、is_deleted、deleted_at、deleted_by、version、trial_no、lead_id、student_id、course_id、lesson_time、teacher_id、trial_status、arrival_status | uk_trial_no、idx_lead_status、idx_lesson_time |
| crm_trial_feedback | 试听反馈与转化建议 | id、tenant_id、org_id、campus_id、created_by、created_at、updated_by、updated_at、is_deleted、deleted_at、deleted_by、version、trial_id、teacher_feedback、guardian_rating、next_action、conversion_status | idx_trial、idx_conversion |
| crm_lead_assignment | 线索分配、重分配与申诉 | id、tenant_id、org_id、campus_id、created_by、created_at、updated_by、updated_at、is_deleted、deleted_at、deleted_by、version、assignment_no、lead_id、from_owner_id、to_owner_id、assignment_reason、assignment_status、approval_status、approval_instance_id | uk_assignment_no、idx_lead_status |
| crm_duplicate_candidate | 重复线索/客户候选 | id、tenant_id、org_id、campus_id、created_by、created_at、updated_by、updated_at、is_deleted、deleted_at、deleted_by、version、candidate_no、source_biz_type、source_biz_id、matched_biz_id、match_score、handle_status | uk_candidate_no、idx_source、idx_status_score |
| crm_merge_dispute | 撞单、合并与归属仲裁 | id、tenant_id、org_id、campus_id、created_by、created_at、updated_by、updated_at、is_deleted、deleted_at、deleted_by、version、dispute_no、lead_ids、family_id、owner_candidates、restore_snapshot、arbitrate_status、approval_status、approval_instance_id | uk_dispute_no、idx_status |
DDL 草案
crm_role_terminal_policyCRMRoleTerminalPolicy
CREATE TABLE `crm_role_terminal_policy` (
`id` BIGINT NOT NULL COMMENT '主键,雪花或号段生成,禁止复用;数据级别:普通',
`tenant_id` BIGINT NOT NULL COMMENT '集团/租户隔离字段,所有查询必须带租户上下文;数据级别:普通',
`org_id` BIGINT NULL COMMENT '所属组织,集团级或公共配置为空;数据级别:普通',
`campus_id` BIGINT NULL COMMENT '所属校区,跨校区或总部级数据为空;数据级别:普通',
`created_by` BIGINT NOT NULL COMMENT '创建人账号 ID;数据级别:普通',
`created_at` DATETIME NOT NULL COMMENT '创建时间;数据级别:普通',
`updated_by` BIGINT NULL COMMENT '最后更新人账号 ID;数据级别:普通',
`updated_at` DATETIME NULL COMMENT '最后更新时间;数据级别:普通',
`is_deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '是否已删除,0 未删除,1 已删除;数据级别:普通',
`deleted_at` DATETIME NULL COMMENT '删除时间,未删除为空;数据级别:普通',
`deleted_by` BIGINT NULL COMMENT '删除人账号 ID,未删除为空;数据级别:普通',
`version` INT NOT NULL DEFAULT 1 COMMENT '乐观锁版本号,写操作必须校验;数据级别:普通',
`role_code` VARCHAR(64) NOT NULL COMMENT '角色编码;数据级别:普通',
`terminal_scope` VARCHAR(64) NOT NULL COMMENT 'PC Web/教师 App/教师小程序;数据级别:普通',
`menu_codes` JSON NOT NULL COMMENT '可见菜单;数据级别:普通',
`button_codes` JSON NULL COMMENT '可见按钮;数据级别:普通',
`field_policy_json` JSON NOT NULL COMMENT '字段明文/脱敏/隐藏策略;数据级别:普通',
`data_scope_rule` JSON NOT NULL COMMENT '数据范围规则;数据级别:普通',
`enabled` TINYINT NOT NULL COMMENT '是否启用;数据级别:普通',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_role_terminal` (`role_code`, `terminal_scope`),
KEY `idx_enabled` (`enabled`),
KEY `idx_tenant_deleted` (`tenant_id`, `is_deleted`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='CRMRoleTerminalPolicy:CRM 角色终端与字段权限策略';
crm_leadLead
CREATE TABLE `crm_lead` (
`id` BIGINT NOT NULL COMMENT '主键,雪花或号段生成,禁止复用;数据级别:普通',
`tenant_id` BIGINT NOT NULL COMMENT '集团/租户隔离字段,所有查询必须带租户上下文;数据级别:普通',
`org_id` BIGINT NULL COMMENT '所属组织,集团级或公共配置为空;数据级别:普通',
`campus_id` BIGINT NULL COMMENT '所属校区,跨校区或总部级数据为空;数据级别:普通',
`created_by` BIGINT NOT NULL COMMENT '创建人账号 ID;数据级别:普通',
`created_at` DATETIME NOT NULL COMMENT '创建时间;数据级别:普通',
`updated_by` BIGINT NULL COMMENT '最后更新人账号 ID;数据级别:普通',
`updated_at` DATETIME NULL COMMENT '最后更新时间;数据级别:普通',
`is_deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '是否已删除,0 未删除,1 已删除;数据级别:普通',
`deleted_at` DATETIME NULL COMMENT '删除时间,未删除为空;数据级别:普通',
`deleted_by` BIGINT NULL COMMENT '删除人账号 ID,未删除为空;数据级别:普通',
`version` INT NOT NULL DEFAULT 1 COMMENT '乐观锁版本号,写操作必须校验;数据级别:普通',
`lead_no` VARCHAR(64) NOT NULL COMMENT '线索编号,唯一;数据级别:普通',
`source_channel` VARCHAR(64) NOT NULL COMMENT '来源渠道;数据级别:普通',
`campaign_id` BIGINT NULL COMMENT '来源活动 ID;数据级别:普通',
`guardian_mobile` VARCHAR(32) NOT NULL COMMENT '家长手机号,敏感;数据级别:敏感',
`student_name` VARCHAR(64) NULL COMMENT '学员姓名;数据级别:普通',
`intent_course_id` BIGINT NULL COMMENT '意向课程;数据级别:普通',
`owner_id` BIGINT NULL COMMENT '当前归属销售/顾问;数据级别:普通',
`protect_until` DATETIME NULL COMMENT '保护期截止时间;数据级别:普通',
`duplicate_status` VARCHAR(32) NOT NULL COMMENT '未查重/疑似重复/已合并/已忽略;数据级别:普通',
`biz_status` VARCHAR(32) NOT NULL COMMENT '业务状态,取值来自状态机字典;数据级别:普通',
`remark` VARCHAR(512) NULL COMMENT '业务备注,敏感内容按权限脱敏;数据级别:普通',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_lead_no` (`lead_no`),
KEY `idx_mobile_student` (`guardian_mobile`, `student_name`),
KEY `idx_owner_status` (`owner_id`, `duplicate_status`),
KEY `idx_tenant_deleted` (`tenant_id`, `is_deleted`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='Lead:销售线索主表';
crm_customer_familyCustomerFamily
CREATE TABLE `crm_customer_family` (
`id` BIGINT NOT NULL COMMENT '主键,雪花或号段生成,禁止复用;数据级别:普通',
`tenant_id` BIGINT NOT NULL COMMENT '集团/租户隔离字段,所有查询必须带租户上下文;数据级别:普通',
`org_id` BIGINT NULL COMMENT '所属组织,集团级或公共配置为空;数据级别:普通',
`campus_id` BIGINT NULL COMMENT '所属校区,跨校区或总部级数据为空;数据级别:普通',
`created_by` BIGINT NOT NULL COMMENT '创建人账号 ID;数据级别:普通',
`created_at` DATETIME NOT NULL COMMENT '创建时间;数据级别:普通',
`updated_by` BIGINT NULL COMMENT '最后更新人账号 ID;数据级别:普通',
`updated_at` DATETIME NULL COMMENT '最后更新时间;数据级别:普通',
`is_deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '是否已删除,0 未删除,1 已删除;数据级别:普通',
`deleted_at` DATETIME NULL COMMENT '删除时间,未删除为空;数据级别:普通',
`deleted_by` BIGINT NULL COMMENT '删除人账号 ID,未删除为空;数据级别:普通',
`version` INT NOT NULL DEFAULT 1 COMMENT '乐观锁版本号,写操作必须校验;数据级别:普通',
`family_no` VARCHAR(64) NOT NULL COMMENT '家庭编号,唯一;数据级别:普通',
`primary_guardian_id` BIGINT NULL COMMENT '主监护人 ID;数据级别:普通',
`student_id` BIGINT NULL COMMENT '主学员 ID;数据级别:普通',
`owner_id` BIGINT NULL COMMENT '客户归属人;数据级别:普通',
`risk_level` VARCHAR(32) NULL COMMENT '风险等级;数据级别:普通',
`last_follow_at` DATETIME NULL COMMENT '最近跟进时间;数据级别:普通',
`biz_status` VARCHAR(32) NOT NULL COMMENT '业务状态,取值来自状态机字典;数据级别:普通',
`remark` VARCHAR(512) NULL COMMENT '业务备注,敏感内容按权限脱敏;数据级别:普通',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_family_no` (`family_no`),
KEY `idx_owner_status` (`owner_id`, `biz_status`),
KEY `idx_tenant_deleted` (`tenant_id`, `is_deleted`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='CustomerFamily:客户家庭档案';
crm_guardianGuardian
CREATE TABLE `crm_guardian` (
`id` BIGINT NOT NULL COMMENT '主键,雪花或号段生成,禁止复用;数据级别:普通',
`tenant_id` BIGINT NOT NULL COMMENT '集团/租户隔离字段,所有查询必须带租户上下文;数据级别:普通',
`org_id` BIGINT NULL COMMENT '所属组织,集团级或公共配置为空;数据级别:普通',
`campus_id` BIGINT NULL COMMENT '所属校区,跨校区或总部级数据为空;数据级别:普通',
`created_by` BIGINT NOT NULL COMMENT '创建人账号 ID;数据级别:普通',
`created_at` DATETIME NOT NULL COMMENT '创建时间;数据级别:普通',
`updated_by` BIGINT NULL COMMENT '最后更新人账号 ID;数据级别:普通',
`updated_at` DATETIME NULL COMMENT '最后更新时间;数据级别:普通',
`is_deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '是否已删除,0 未删除,1 已删除;数据级别:普通',
`deleted_at` DATETIME NULL COMMENT '删除时间,未删除为空;数据级别:普通',
`deleted_by` BIGINT NULL COMMENT '删除人账号 ID,未删除为空;数据级别:普通',
`version` INT NOT NULL DEFAULT 1 COMMENT '乐观锁版本号,写操作必须校验;数据级别:普通',
`family_id` BIGINT NOT NULL COMMENT '家庭 ID;数据级别:普通',
`guardian_name` VARCHAR(64) NOT NULL COMMENT '监护人姓名;数据级别:普通',
`mobile` VARCHAR(32) NOT NULL COMMENT '手机号,敏感;数据级别:敏感',
`relationship` VARCHAR(32) NOT NULL COMMENT '与学员关系;数据级别:普通',
`wechat_openid` VARCHAR(128) NULL COMMENT '微信 OpenID,敏感;数据级别:敏感',
`verify_status` VARCHAR(32) NOT NULL COMMENT '未验证/已验证/已解绑;数据级别:普通',
PRIMARY KEY (`id`),
KEY `idx_family` (`family_id`),
KEY `idx_mobile` (`mobile`),
KEY `idx_tenant_deleted` (`tenant_id`, `is_deleted`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='Guardian:监护人/家长资料';
stu_studentStudent
CREATE TABLE `stu_student` (
`id` BIGINT NOT NULL COMMENT '主键,雪花或号段生成,禁止复用;数据级别:普通',
`tenant_id` BIGINT NOT NULL COMMENT '集团/租户隔离字段,所有查询必须带租户上下文;数据级别:普通',
`org_id` BIGINT NULL COMMENT '所属组织,集团级或公共配置为空;数据级别:普通',
`campus_id` BIGINT NULL COMMENT '所属校区,跨校区或总部级数据为空;数据级别:普通',
`created_by` BIGINT NOT NULL COMMENT '创建人账号 ID;数据级别:普通',
`created_at` DATETIME NOT NULL COMMENT '创建时间;数据级别:普通',
`updated_by` BIGINT NULL COMMENT '最后更新人账号 ID;数据级别:普通',
`updated_at` DATETIME NULL COMMENT '最后更新时间;数据级别:普通',
`is_deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '是否已删除,0 未删除,1 已删除;数据级别:普通',
`deleted_at` DATETIME NULL COMMENT '删除时间,未删除为空;数据级别:普通',
`deleted_by` BIGINT NULL COMMENT '删除人账号 ID,未删除为空;数据级别:普通',
`version` INT NOT NULL DEFAULT 1 COMMENT '乐观锁版本号,写操作必须校验;数据级别:普通',
`student_no` VARCHAR(64) NOT NULL COMMENT '学员编号,唯一;数据级别:普通',
`family_id` BIGINT NULL COMMENT '家庭 ID;数据级别:普通',
`student_name` VARCHAR(64) NOT NULL COMMENT '学员姓名;数据级别:普通',
`gender` VARCHAR(16) NULL COMMENT '性别;数据级别:普通',
`birthday` DATE NULL COMMENT '出生日期;数据级别:普通',
`grade` VARCHAR(32) NULL COMMENT '年级;数据级别:普通',
`school_name` VARCHAR(128) NULL COMMENT '学校名称;数据级别:普通',
`biz_status` VARCHAR(32) NOT NULL COMMENT '业务状态,取值来自状态机字典;数据级别:普通',
`remark` VARCHAR(512) NULL COMMENT '业务备注,敏感内容按权限脱敏;数据级别:普通',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_student_no` (`student_no`),
KEY `idx_family` (`family_id`),
KEY `idx_tenant_deleted` (`tenant_id`, `is_deleted`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='Student:学员基础档案';
crm_follow_recordFollowRecord
CREATE TABLE `crm_follow_record` (
`id` BIGINT NOT NULL COMMENT '主键,雪花或号段生成,禁止复用;数据级别:普通',
`tenant_id` BIGINT NOT NULL COMMENT '集团/租户隔离字段,所有查询必须带租户上下文;数据级别:普通',
`org_id` BIGINT NULL COMMENT '所属组织,集团级或公共配置为空;数据级别:普通',
`campus_id` BIGINT NULL COMMENT '所属校区,跨校区或总部级数据为空;数据级别:普通',
`created_by` BIGINT NOT NULL COMMENT '创建人账号 ID;数据级别:普通',
`created_at` DATETIME NOT NULL COMMENT '创建时间;数据级别:普通',
`updated_by` BIGINT NULL COMMENT '最后更新人账号 ID;数据级别:普通',
`updated_at` DATETIME NULL COMMENT '最后更新时间;数据级别:普通',
`is_deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '是否已删除,0 未删除,1 已删除;数据级别:普通',
`deleted_at` DATETIME NULL COMMENT '删除时间,未删除为空;数据级别:普通',
`deleted_by` BIGINT NULL COMMENT '删除人账号 ID,未删除为空;数据级别:普通',
`version` INT NOT NULL DEFAULT 1 COMMENT '乐观锁版本号,写操作必须校验;数据级别:普通',
`lead_id` BIGINT NULL COMMENT '线索 ID;数据级别:普通',
`family_id` BIGINT NULL COMMENT '客户家庭 ID;数据级别:普通',
`owner_id` BIGINT NOT NULL COMMENT '跟进人 ID;数据级别:普通',
`follow_type` VARCHAR(32) NOT NULL COMMENT '电话/微信/到访/试听/其他;数据级别:普通',
`follow_content` TEXT NOT NULL COMMENT '跟进内容;数据级别:普通',
`next_follow_at` DATETIME NULL COMMENT '下次跟进时间;数据级别:普通',
`follow_result` VARCHAR(32) NOT NULL COMMENT '有效/无效/待跟进/转化;数据级别:普通',
PRIMARY KEY (`id`),
KEY `idx_lead_time` (`lead_id`),
KEY `idx_owner_next` (`owner_id`, `next_follow_at`),
KEY `idx_tenant_deleted` (`tenant_id`, `is_deleted`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='FollowRecord:线索/客户跟进记录';
crm_trial_lessonTrialLesson
CREATE TABLE `crm_trial_lesson` (
`id` BIGINT NOT NULL COMMENT '主键,雪花或号段生成,禁止复用;数据级别:普通',
`tenant_id` BIGINT NOT NULL COMMENT '集团/租户隔离字段,所有查询必须带租户上下文;数据级别:普通',
`org_id` BIGINT NULL COMMENT '所属组织,集团级或公共配置为空;数据级别:普通',
`campus_id` BIGINT NULL COMMENT '所属校区,跨校区或总部级数据为空;数据级别:普通',
`created_by` BIGINT NOT NULL COMMENT '创建人账号 ID;数据级别:普通',
`created_at` DATETIME NOT NULL COMMENT '创建时间;数据级别:普通',
`updated_by` BIGINT NULL COMMENT '最后更新人账号 ID;数据级别:普通',
`updated_at` DATETIME NULL COMMENT '最后更新时间;数据级别:普通',
`is_deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '是否已删除,0 未删除,1 已删除;数据级别:普通',
`deleted_at` DATETIME NULL COMMENT '删除时间,未删除为空;数据级别:普通',
`deleted_by` BIGINT NULL COMMENT '删除人账号 ID,未删除为空;数据级别:普通',
`version` INT NOT NULL DEFAULT 1 COMMENT '乐观锁版本号,写操作必须校验;数据级别:普通',
`trial_no` VARCHAR(64) NOT NULL COMMENT '试听编号,唯一;数据级别:普通',
`lead_id` BIGINT NULL COMMENT '线索 ID;数据级别:普通',
`student_id` BIGINT NOT NULL COMMENT '学员 ID;数据级别:普通',
`course_id` BIGINT NOT NULL COMMENT '试听课程 ID;数据级别:普通',
`lesson_time` DATETIME NOT NULL COMMENT '试听时间;数据级别:普通',
`teacher_id` BIGINT NULL COMMENT '试听教师 ID;数据级别:普通',
`trial_status` VARCHAR(32) NOT NULL COMMENT '待确认/已预约/已到访/未到访/已取消;数据级别:普通',
`arrival_status` VARCHAR(32) NULL COMMENT '到访状态;数据级别:普通',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_trial_no` (`trial_no`),
KEY `idx_lead_status` (`lead_id`, `trial_status`),
KEY `idx_lesson_time` (`lesson_time`),
KEY `idx_tenant_deleted` (`tenant_id`, `is_deleted`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='TrialLesson:试听预约';
crm_trial_feedbackTrialFeedback
CREATE TABLE `crm_trial_feedback` (
`id` BIGINT NOT NULL COMMENT '主键,雪花或号段生成,禁止复用;数据级别:普通',
`tenant_id` BIGINT NOT NULL COMMENT '集团/租户隔离字段,所有查询必须带租户上下文;数据级别:普通',
`org_id` BIGINT NULL COMMENT '所属组织,集团级或公共配置为空;数据级别:普通',
`campus_id` BIGINT NULL COMMENT '所属校区,跨校区或总部级数据为空;数据级别:普通',
`created_by` BIGINT NOT NULL COMMENT '创建人账号 ID;数据级别:普通',
`created_at` DATETIME NOT NULL COMMENT '创建时间;数据级别:普通',
`updated_by` BIGINT NULL COMMENT '最后更新人账号 ID;数据级别:普通',
`updated_at` DATETIME NULL COMMENT '最后更新时间;数据级别:普通',
`is_deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '是否已删除,0 未删除,1 已删除;数据级别:普通',
`deleted_at` DATETIME NULL COMMENT '删除时间,未删除为空;数据级别:普通',
`deleted_by` BIGINT NULL COMMENT '删除人账号 ID,未删除为空;数据级别:普通',
`version` INT NOT NULL DEFAULT 1 COMMENT '乐观锁版本号,写操作必须校验;数据级别:普通',
`trial_id` BIGINT NOT NULL COMMENT '试听预约 ID;数据级别:普通',
`teacher_feedback` TEXT NULL COMMENT '教师反馈;数据级别:普通',
`guardian_rating` DECIMAL(4,2) NULL COMMENT '家长评分;数据级别:普通',
`next_action` VARCHAR(64) NULL COMMENT '下一步动作;数据级别:普通',
`conversion_status` VARCHAR(32) NOT NULL COMMENT '待转化/已转化/暂不转化/失败;数据级别:普通',
PRIMARY KEY (`id`),
KEY `idx_trial` (`trial_id`),
KEY `idx_conversion` (`conversion_status`),
KEY `idx_tenant_deleted` (`tenant_id`, `is_deleted`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='TrialFeedback:试听反馈与转化建议';
crm_lead_assignmentLeadAssignment
CREATE TABLE `crm_lead_assignment` (
`id` BIGINT NOT NULL COMMENT '主键,雪花或号段生成,禁止复用;数据级别:普通',
`tenant_id` BIGINT NOT NULL COMMENT '集团/租户隔离字段,所有查询必须带租户上下文;数据级别:普通',
`org_id` BIGINT NULL COMMENT '所属组织,集团级或公共配置为空;数据级别:普通',
`campus_id` BIGINT NULL COMMENT '所属校区,跨校区或总部级数据为空;数据级别:普通',
`created_by` BIGINT NOT NULL COMMENT '创建人账号 ID;数据级别:普通',
`created_at` DATETIME NOT NULL COMMENT '创建时间;数据级别:普通',
`updated_by` BIGINT NULL COMMENT '最后更新人账号 ID;数据级别:普通',
`updated_at` DATETIME NULL COMMENT '最后更新时间;数据级别:普通',
`is_deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '是否已删除,0 未删除,1 已删除;数据级别:普通',
`deleted_at` DATETIME NULL COMMENT '删除时间,未删除为空;数据级别:普通',
`deleted_by` BIGINT NULL COMMENT '删除人账号 ID,未删除为空;数据级别:普通',
`version` INT NOT NULL DEFAULT 1 COMMENT '乐观锁版本号,写操作必须校验;数据级别:普通',
`assignment_no` VARCHAR(64) NOT NULL COMMENT '分配编号,唯一;数据级别:普通',
`lead_id` BIGINT NOT NULL COMMENT '线索 ID;数据级别:普通',
`from_owner_id` BIGINT NULL COMMENT '原归属人;数据级别:普通',
`to_owner_id` BIGINT NOT NULL COMMENT '新归属人;数据级别:普通',
`assignment_reason` VARCHAR(255) NOT NULL COMMENT '分配原因;数据级别:普通',
`assignment_status` VARCHAR(32) NOT NULL COMMENT '待处理/已生效/已驳回;数据级别:普通',
`approval_status` VARCHAR(32) NULL COMMENT '审批状态,未发起为空;数据级别:普通',
`approval_instance_id` BIGINT NULL COMMENT '关联审批实例 ID;数据级别:普通',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_assignment_no` (`assignment_no`),
KEY `idx_lead_status` (`lead_id`, `assignment_status`),
KEY `idx_tenant_deleted` (`tenant_id`, `is_deleted`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='LeadAssignment:线索分配、重分配与申诉';
crm_duplicate_candidateDuplicateCandidate
CREATE TABLE `crm_duplicate_candidate` (
`id` BIGINT NOT NULL COMMENT '主键,雪花或号段生成,禁止复用;数据级别:普通',
`tenant_id` BIGINT NOT NULL COMMENT '集团/租户隔离字段,所有查询必须带租户上下文;数据级别:普通',
`org_id` BIGINT NULL COMMENT '所属组织,集团级或公共配置为空;数据级别:普通',
`campus_id` BIGINT NULL COMMENT '所属校区,跨校区或总部级数据为空;数据级别:普通',
`created_by` BIGINT NOT NULL COMMENT '创建人账号 ID;数据级别:普通',
`created_at` DATETIME NOT NULL COMMENT '创建时间;数据级别:普通',
`updated_by` BIGINT NULL COMMENT '最后更新人账号 ID;数据级别:普通',
`updated_at` DATETIME NULL COMMENT '最后更新时间;数据级别:普通',
`is_deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '是否已删除,0 未删除,1 已删除;数据级别:普通',
`deleted_at` DATETIME NULL COMMENT '删除时间,未删除为空;数据级别:普通',
`deleted_by` BIGINT NULL COMMENT '删除人账号 ID,未删除为空;数据级别:普通',
`version` INT NOT NULL DEFAULT 1 COMMENT '乐观锁版本号,写操作必须校验;数据级别:普通',
`candidate_no` VARCHAR(64) NOT NULL COMMENT '候选编号,唯一;数据级别:普通',
`source_biz_type` VARCHAR(64) NOT NULL COMMENT '来源对象类型;数据级别:普通',
`source_biz_id` BIGINT NOT NULL COMMENT '来源对象 ID;数据级别:普通',
`matched_biz_id` BIGINT NOT NULL COMMENT '疑似重复对象 ID;数据级别:普通',
`match_score` DECIMAL(8,4) NOT NULL COMMENT '匹配分数;数据级别:普通',
`handle_status` VARCHAR(32) NOT NULL COMMENT '待处理/已合并/已忽略;数据级别:普通',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_candidate_no` (`candidate_no`),
KEY `idx_source` (`source_biz_type`),
KEY `idx_status_score` (`handle_status`, `match_score`),
KEY `idx_tenant_deleted` (`tenant_id`, `is_deleted`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='DuplicateCandidate:重复线索/客户候选';
crm_merge_disputeMergeDispute
CREATE TABLE `crm_merge_dispute` (
`id` BIGINT NOT NULL COMMENT '主键,雪花或号段生成,禁止复用;数据级别:普通',
`tenant_id` BIGINT NOT NULL COMMENT '集团/租户隔离字段,所有查询必须带租户上下文;数据级别:普通',
`org_id` BIGINT NULL COMMENT '所属组织,集团级或公共配置为空;数据级别:普通',
`campus_id` BIGINT NULL COMMENT '所属校区,跨校区或总部级数据为空;数据级别:普通',
`created_by` BIGINT NOT NULL COMMENT '创建人账号 ID;数据级别:普通',
`created_at` DATETIME NOT NULL COMMENT '创建时间;数据级别:普通',
`updated_by` BIGINT NULL COMMENT '最后更新人账号 ID;数据级别:普通',
`updated_at` DATETIME NULL COMMENT '最后更新时间;数据级别:普通',
`is_deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '是否已删除,0 未删除,1 已删除;数据级别:普通',
`deleted_at` DATETIME NULL COMMENT '删除时间,未删除为空;数据级别:普通',
`deleted_by` BIGINT NULL COMMENT '删除人账号 ID,未删除为空;数据级别:普通',
`version` INT NOT NULL DEFAULT 1 COMMENT '乐观锁版本号,写操作必须校验;数据级别:普通',
`dispute_no` VARCHAR(64) NOT NULL COMMENT '争议编号,唯一;数据级别:普通',
`lead_ids` JSON NOT NULL COMMENT '涉及线索 ID 列表;数据级别:普通',
`family_id` BIGINT NULL COMMENT '客户家庭 ID;数据级别:普通',
`owner_candidates` JSON NOT NULL COMMENT '候选归属人列表;数据级别:普通',
`restore_snapshot` JSON NULL COMMENT '误合并恢复快照;数据级别:普通',
`arbitrate_status` VARCHAR(32) NOT NULL COMMENT '待仲裁/已通过/已驳回/已恢复;数据级别:普通',
`approval_status` VARCHAR(32) NULL COMMENT '审批状态,未发起为空;数据级别:普通',
`approval_instance_id` BIGINT NULL COMMENT '关联审批实例 ID;数据级别:普通',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_dispute_no` (`dispute_no`),
KEY `idx_status` (`arbitrate_status`),
KEY `idx_tenant_deleted` (`tenant_id`, `is_deleted`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='MergeDispute:撞单、合并与归属仲裁';
16 · 异常、指标、测试与初始化
保证模块上线后可运营、可追踪、可验收
测试要覆盖主流程、异常流、权限流、接口失败和数据一致性。异常状态
指标埋点
测试用例
| 编号 | 场景 | 前置 | 步骤 | 预期 | 优先级 |
|---|---|---|---|---|---|
| TC-CRM-ROLE-001 | 销售/市场无 PC Web 操作入口 | 账号角色为课程顾问、销售人员或市场人员 | 登录 PC Web 管理端并访问 CRM 菜单或直接访问 CRM 管理链接 | 不展示 CRM PC 管理菜单;直连返回无权限,提示使用迪诺学堂教师端 App/小程序;越权访问写入审计 | 高 |
| TC-CRM-ROLE-002 | 销售人员移动端本人数据范围 | 销售人员存在本人线索、团队协作线索和非本人线索 | 在迪诺学堂教师端 App/小程序打开销售工作台、我的线索、线索详情并尝试访问非本人线索 | 只展示本人负责、本人创建、本人协作或授权线索;非授权线索字段脱敏或拦截,提交动作不可用 | 高 |
| TC-CRM-ROLE-003 | 市场人员移动端活动线索 | 市场人员负责一个营销活动且活动产生报名线索 | 打开市场线索工作台,查看活动线索、扫码报名、归因和转销售状态 | 可查看本人活动数据和转销售状态,不可查看其他活动或全量客户档案 | 高 |
| TC-CRM-MKT-001 | 员工推广线索回流到移动端 | 员工通过专属活动二维码产生新线索,线索未撞单 | CRM 接收营销回流线索并按归属规则生成待办 | 线索归因显示活动、页面、二维码、员工和分享场景;员工端收到新线索待办并可直接跟进 | 高 |
| TC-CRM-MKT-002 | 员工推广线索撞单仲裁 | 员工专属推广链接产生疑似重复线索 | 表单提交后触发撞单,员工端查看提示,管理员 PC 端处理仲裁 | 移动端展示撞单状态和申诉入口;PC 管理端可合并、保留、重新分配并回写处理结果 | 高 |
| TC-CRM-ADMIN-001 | 管理员 PC 全量信息与异常处理 | CRM 管理员拥有总部/区域/校区授权范围 | 打开 CRM 管理总览、线索全量管理、客户全量档案和异常数据处理 | 展示授权范围内完整信息、异常原因、处理入口、审批轨迹和审计日志 | 高 |
| TC-CRM-DUP-001 | 去重合并与误合并恢复 | 存在疑似重复线索与客户,且至少一个客户已有试听或合同摘要 | PC 管理端执行查重、合并审批、合并确认、误合并恢复 | 合并后来源、跟进、试听、活动归因保留;恢复后关联不丢失,所有步骤有快照和审计 | 高 |
| TC-CRM-ASSIGN-001 | 线索重新分配审批 | 存在保护期内线索或跨校区重分配需求 | 销售主管在 PC 管理端发起重新分配,审批通过后查看移动端通知 | 审批前不生效;通过后责任人变更、原/新责任人收到通知,移动端工作台同步更新 | 高 |
| TC-CRM-APPEAL-001 | 归属申诉闭环 | 移动端销售人员对撞单结果有争议 | 销售人员提交申诉,主管/管理员在 PC 端处理,通过或驳回后查看移动端结果 | 申诉状态、证据、处理意见、归属结果和通知均正确;超时进入主管提醒 | 中 |
| TC-CRM-TRIAL-001 | 试听邀约到转化闭环 | 销售人员拥有一条有效线索,教务课表存在试听课次 | 移动端预约试听、到访签到、教师反馈、顾问二次跟进 | 试听结束后进入转化、复约、流失或服务观察之一,跟进任务和消息自动生成 | 高 |
| TC-CRM-ENH-001 | 角色终端交付闭环验收 | 角色终端矩阵、PC CRM 管理总览、教师端销售工作台、教师端市场线索工作台、移动端无 PC 权限提示相关基础数据、权限、审批流、消息模板和接口配置已初始化 | 按补齐 CRM 角色终端边界:管理员/主管使用 PC Web 管理端处理全量治理、审批、去重、重分配和异常;课程顾问、销售人员、市场人员只使用迪诺学堂教师端 App/小程序处理本人授权数据。执行前端提交、后端处理、状态流转、异常重试和消息触达 | 销售/市场无 PC Web 操作入口,移动端只显示本人/授权数据;管理员 PC 端可处理全量治理事项且全程审计。;同时产生审计日志、指标埋点和必要的补偿任务 | 高 |
| TC-CRM-ENH-002 | 客户去重交付闭环验收 | 线索详情、客户详情、合并仲裁页相关基础数据、权限、审批流、消息模板和接口配置已初始化 | 按补齐撞单提示、合并申请、仲裁审批、恢复任务、跟进记录归并和审计链路。执行前端提交、后端处理、状态流转、异常重试和消息触达 | 误合并可恢复,恢复后跟进、试听、合同关联不丢失。;同时产生审计日志、指标埋点和必要的补偿任务 | 高 |
| TC-CRM-ENH-003 | 试听闭环交付闭环验收 | 试听预约、试听反馈、顾问跟进相关基础数据、权限、审批流、消息模板和接口配置已初始化 | 按补齐试听课表、到访签到、未到访唤醒、教师反馈、顾问转化任务和流失原因。执行前端提交、后端处理、状态流转、异常重试和消息触达 | 试听结束后必须进入转化、复约、流失或服务观察之一。;同时产生审计日志、指标埋点和必要的补偿任务 | 高 |
| TC-CRM-ENH-004 | 归属规则交付闭环验收 | 公海池、线索分配、归属变更相关基础数据、权限、审批流、消息模板和接口配置已初始化 | 按增加公海规则配置、保护期倒计时、回收原因、跨校区申请和归属变更审计。执行前端提交、后端处理、状态流转、异常重试和消息触达 | 线索归属变化能追溯来源、审批和当前责任人。;同时产生审计日志、指标埋点和必要的补偿任务 | 高 |
上线初始化
| 初始化项 | 动作 | 数据 | 验收 |
|---|---|---|---|
| CRM 角色终端权限 | 初始化 CRM 管理员、销售主管、课程顾问、销售人员、市场人员的菜单、按钮、字段、接口和数据范围;销售/市场关闭 PC Web CRM 操作入口 | roleCode、terminalScope、menuCodes、buttonCodes、fieldPolicy、apiPolicy、dataScope | 管理员和主管可进入 PC 管理端;销售/市场只能在迪诺学堂教师端 App/小程序处理本人授权数据 |
| 线索归属规则 | 初始化默认分配、公海领取、保护期、回收、跨校区流转、重新分配和归属申诉规则 | assignRule、publicPoolRule、protectDays、recycleReason、crossCampusFlow、appealFlow | 线索归属变化均可追溯规则、原因、审批、责任人和通知 |
| 去重合并规则 | 初始化手机号、学员姓名、渠道、活动、校区、顾问和时间窗口的撞单检测规则,以及合并、恢复和仲裁审批流 | duplicateKeys、similarityThreshold、mergeFlow、restoreFlow、auditSnapshotPolicy | 重复线索可提示、合并、驳回、恢复且不丢跟进/试听/合同关联 |
| 移动端工作台配置 | 初始化销售工作台、市场线索工作台、今日待办、跟进超时、试听邀约、归属变更和越权提示消息模板 | workspaceLayout、todoRules、notifyTemplates、trialRemindRules、unauthorizedTips | 移动端角色登录后看到本人任务和可操作入口,PC 越权提示明确 |
| 活动线索回流规则 | 初始化营销活动、员工推广资产、表单留资、CRM 线索、员工待办之间的映射关系和撞单处理策略 | campaignAttributionRule、promotionAssetRule、duplicateRule、todoRule、notifyTemplate | 员工推广产生的线索可自动进入员工端待办或 PC 管理端仲裁 |
| CRM 异常原因字典 | 初始化重复客户、保护期冲突、手机号异常、导入失败、非本人线索、试听未到访、反馈缺失、接口失败等异常原因 | exceptionCode、exceptionName、ownerRole、handleSla、closePolicy | 异常数据可进入 PC 管理端处理并形成关闭记录 |
| 角色终端交付配置 | 初始化补齐 CRM 角色终端边界:管理员/主管使用 PC Web 管理端处理全量治理、审批、去重、重分配和异常;课程顾问、销售人员、市场人员只使用迪诺学堂教师端 App/小程序处理本人授权数据。所需的页面入口、功能开关、审批流、消息模板、状态枚举、异常原因和角色权限 | 角色终端矩阵、PC CRM 管理总览、教师端销售工作台、教师端市场线索工作台、移动端无 PC 权限提示 | 销售/市场无 PC Web 操作入口,移动端只显示本人/授权数据;管理员 PC 端可处理全量治理事项且全程审计。 |
| 客户去重交付配置 | 初始化补齐撞单提示、合并申请、仲裁审批、恢复任务、跟进记录归并和审计链路。所需的页面入口、功能开关、审批流、消息模板、状态枚举、异常原因和角色权限 | 线索详情、客户详情、合并仲裁页 | 误合并可恢复,恢复后跟进、试听、合同关联不丢失。 |
| 试听闭环交付配置 | 初始化补齐试听课表、到访签到、未到访唤醒、教师反馈、顾问转化任务和流失原因。所需的页面入口、功能开关、审批流、消息模板、状态枚举、异常原因和角色权限 | 试听预约、试听反馈、顾问跟进 | 试听结束后必须进入转化、复约、流失或服务观察之一。 |
| 归属规则交付配置 | 初始化增加公海规则配置、保护期倒计时、回收原因、跨校区申请和归属变更审计。所需的页面入口、功能开关、审批流、消息模板、状态枚举、异常原因和角色权限 | 公海池、线索分配、归属变更 | 线索归属变化能追溯来源、审批和当前责任人。 |