- 在开发规范 steering 文件中新增第九节:双数据库架构规范 - 在开发文档中新增第八节:双数据库架构说明 - 明确 Admin 库与 Business 库的职责划分 - 定义配置数据分离规则和 DbContext 映射关系 - 规定跨库访问只读原则
20 KiB
20 KiB
学业邑规划 - 开发文档
一、项目概述
1.1 项目信息
- 项目名称:学业邑规划
- 项目类型:微信小程序
- 目标用户:10-50岁学生及家长
- 核心功能:多元智能测评、学业规划服务、分销推广
1.2 技术栈
| 端 | 技术 |
|---|---|
| 前端 | UniApp + Vue 3 + TypeScript |
| 后端 | .NET 10 Web API (C#) |
| 数据库 | SQL Server 2022 |
| 缓存 | Redis |
| 对象存储 | 阿里云 OSS / 腾讯云 COS |
| 支付 | 微信支付 |
| 接口风格 | RPC 风格(仅 GET / POST 请求) |
1.3 项目结构
├── uniapp/ # 小程序前端
├── server/ # 后端服务
│ └── MiAssessment/
│ ├── src/
│ │ ├── MiAssessment.Api/ # 小程序API接口
│ │ ├── MiAssessment.Admin/ # 后台管理系统
│ │ ├── MiAssessment.Admin.Business/ # 后台业务模块
│ │ ├── MiAssessment.Core/ # 核心业务逻辑
│ │ ├── MiAssessment.Infrastructure/ # 基础设施
│ │ └── MiAssessment.Model/ # 数据模型
│ └── scripts/ # 数据库脚本
└── docs/ # 文档资料
二、用户角色与权限
2.1 小程序用户角色
| 角色 | 说明 | 权限 |
|---|---|---|
| 游客 | 未登录用户 | 浏览首页、团队页 |
| 普通用户 | 已登录用户 | 购买测评、查看报告、学业规划预约 |
| 合伙人 | 后台配置 | 普通用户权限 + 邀请新用户 + 佣金提现 |
| 渠道合伙人 | 后台配置 | 合伙人权限 + 绑定合伙人为下级 |
2.2 后台管理角色
| 角色 | 说明 |
|---|---|
| 超级管理员 | 全部权限 |
| 运营人员 | 内容管理、订单管理、用户管理 |
| 财务人员 | 订单管理、提现审核 |
三、功能模块详细分解
3.1 首页模块
3.1.1 Banner轮播图
| 字段 | 说明 |
|---|---|
| 图片 | 轮播图片URL |
| 跳转类型 | 无跳转 / 内部页面 / 外部链接 / 小程序 |
| 跳转地址 | 根据跳转类型填写 |
| 排序 | 显示顺序 |
| 状态 | 启用/禁用 |
后台功能:
- 新增/编辑/删除 Banner
- 拖拽排序
- 启用/禁用
3.1.2 测评入口
| 字段 | 说明 |
|---|---|
| 测评名称 | 如"多元智能测评" |
| 入口图片 | 展示图片 |
| 价格 | 测评价格(元) |
| 状态 | 已上线 / 即将上线 / 已下线 |
| 排序 | 显示顺序 |
交互逻辑:
- 点击"已上线"测评 → 进入测评流程
- 点击"即将上线"测评 → 弹出提示"该测评暂未开放"
3.1.3 底部宣传图
| 字段 | 说明 |
|---|---|
| 图片 | 长图URL |
| 排序 | 显示顺序 |
| 状态 | 启用/禁用 |
3.2 团队页模块
3.2.1 团队介绍
| 字段 | 说明 |
|---|---|
| 图片 | 团队介绍图片 |
| 排序 | 显示顺序 |
| 状态 | 启用/禁用 |
3.3 用户模块
3.3.1 用户注册/登录
登录方式:微信一键登录(获取手机号)
登录流程:
1. 用户点击登录
2. 调用 wx.login() 获取 code
3. 调用 wx.getPhoneNumber() 获取加密手机号
4. 后端解密手机号,创建/更新用户
5. 返回 token
用户信息:
| 字段 | 说明 |
|---|---|
| UID | 6位随机数字(不以0开头) |
| 手机号 | 微信授权获取 |
| 昵称 | 默认"用户+UID",可修改 |
| 头像 | 默认头像,可修改 |
| 用户等级 | 普通用户/合伙人/渠道合伙人 |
| 上级用户ID | 邀请关系绑定 |
| 注册时间 | - |
3.3.2 个人信息页
功能:
- 查看/修改头像
- 查看/修改昵称
- 查看UID(不可修改)
- 获取微信头像/昵称
3.3.3 用户协议 & 隐私政策
后台配置:
- 富文本编辑器配置内容
- 支持图文混排
3.4 多元智能测评模块(核心)
3.4.1 基本信息填写页
用户填写字段:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| 姓名 | 文本 | 是 | - |
| 手机号 | 文本 | 是 | 需验证格式 |
| 性别 | 单选 | 是 | 男/女 |
| 年龄 | 下拉 | 是 | 10岁~50岁 |
| 学业阶段 | 下拉 | 是 | 小学及以下/初中/高中/大专/本科/研究生及以上 |
| 省份 | 下拉 | 是 | - |
| 城市 | 下拉 | 是 | - |
| 区县 | 下拉 | 是 | 必须选择到区县 |
页面顶部介绍:后台可配置文字或图片
按钮状态:
- 有未填写项 → 按钮灰色不可点击
- 全部填写 → 按钮可点击
两个入口按钮:
-
支付¥XX元 开始测评
- 金额从后台配置读取
- 点击后验证信息 → 拉起微信支付
-
邀请码免费测评
- 点击后验证信息 → 弹出邀请码输入框
- 邀请码验证:不存在/已使用/验证通过
验证规则:
- 手机号格式验证(11位数字,1开头)
- 城市必须选择到区县
3.4.2 答题页
题目结构:
- 共80道选择题
- 每题10个选项
- 所有题目在一个页面内展示(可滚动)
题目数据结构:
| 字段 | 说明 |
|---|---|
| 题号 | 1-80 |
| 题目内容 | 题目描述文本 |
| 选项列表 | 10个选项文本 |
选项评分标准(展示给用户):
| 分值 | 等级 | 描述 |
|---|---|---|
| 1分 | 极弱 | 完全不符合 |
| 2分 | 很弱 | 几乎不符合 |
| 3分 | 较弱 | 偶尔符合 |
| 4分 | 偏弱 | 有时候符合 |
| 5分 | 中等 | 普通一般 |
| 6分 | 略强 | 多数情况符合 |
| 7分 | 偏强 | 大多数情况符合 |
| 8分 | 较强 | 绝大多数情况符合 |
| 9分 | 很强 | 偶尔不符合 |
| 10分 | 极强 | 完全符合 |
提交逻辑:
- 点击提交 → 检测未答题目
- 有未答题 → 弹窗显示未答题号列表
- 全部已答 → 提交答案 → 进入生成中页面
3.4.3 测评生成中页
展示内容:
- 加载动画
- 提示文字:"测评报告生成中,请稍候..."
- 提示可在"往期测评"中查看
逻辑:
- 后端异步计算测评结果
- 前端轮询查询状态
- 生成完成 → 自动跳转到结果页
3.4.4 测评结果页
报告内容结构:
1. 基本信息
- 姓名、年龄、学业阶段、测评日期
2. 八大智能分析
- 雷达图展示8项智能得分
- 最强智能TOP2(展示结论)
- 较弱智能TOP2(展示结论)
3. 个人特质分析
- 4项特质得分百分比
- 最强特质结论
4. 40项细分能力分析
- 按8大智能分组展示
- 每组显示5项细分能力
- 五星图展示
- 最强10项 / 最弱10项
5. 先天学习类型分析
- 5种类型得分
- 最强类型结论
6. 学习关键能力分析
- 5项能力得分
- 最弱能力结论(需加强)
7. 科学大脑类型分析
- 5种脑类型得分
- 最强/最弱类型结论
8. 性格类型分析
- 5种性格得分
- 最强性格结论
9. 未来关键发展能力分析
- 10项能力得分
- 最强/最弱能力结论
功能按钮:
- 保存到本地(导出PDF)
3.5 测评计分逻辑(核心算法)
3.5.1 题目归属关系
每道题可同时归属多个分类:
报告1-3(累加计分):
- 8大智能(每项对应多道题)
- 40细分能力(每项对应2道题)
- 4项个人特质(每项对应20道题)
报告4-8(0/1计分):
- 5种先天学习类型(每种对应9-10道题)
- 5项学习关键能力(每项对应12道题)
- 5种科学大脑类型(每种对应12道题)
- 5种性格类型(每种对应10道题)
- 10项未来发展能力(每项对应10道题)
3.5.2 计分规则
规则A(报告1-3):
得分 = 用户选择的选项序号(1-10)
总分 = 该分类下所有题目得分之和
规则B(报告4-8):
得分 = 用户选择选项1-5 ? 0 : 1
总分 = 该分类下所有题目得分之和
3.5.3 结果判定
8大智能:
- 按总分排序
- 排名1 → 最强五星
- 排名2 → 较强五星
- 排名7 → 相对较弱
- 排名8 → 相对较弱
其他分类:
- 按总分排序
- 最高分 → 展示最强结论
- 最低分 → 展示最弱结论(部分报告)
3.5.4 题目-分类映射表
详见 docs/题库和结论/1.各分析报告对应题目/ 目录下各文档。
3.6 学业规划模块
3.6.1 规划师选择页
规划师信息:
| 字段 | 说明 |
|---|---|
| 照片 | 规划师头像 |
| 姓名 | - |
| 介绍 | 简介文本 |
| 价格 | 咨询价格(元) |
| 状态 | 启用/禁用 |
| 排序 | 显示顺序 |
3.6.2 规划时间预约页
预约信息:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| 预约日期 | 日期选择 | 是 | - |
| 预约时间 | 时间选择 | 是 | - |
| 姓名 | 文本 | 是 | - |
| 手机号 | 文本 | 是 | - |
| 性别 | 单选 | 是 | - |
| 所在年级 | 下拉 | 是 | 小学/初中/高中/大专/本科/研究生及以上 |
| 各科成绩 | 动态 | 部分必填 | 根据年级动态显示 |
各科成绩动态规则:
| 年级 | 显示科目 |
|---|---|
| 小学 | 语文、数学、英语(必填) |
| 初中/高中 | 语文、数学、英语(必填)+ 物理、化学、生物、地理、政治(选填) |
| 大专/本科/研究生 | 专业名称(必填) |
支付流程:
- 全部必填项填写完成 → 按钮可点击
- 点击支付 → 拉起微信支付
- 支付成功 → 弹出预约成功提示
3.7 订单模块
3.7.1 我的订单页
订单列表字段:
| 字段 | 说明 |
|---|---|
| 订单日期 | 创建时间 |
| 订单编号 | 系统生成 |
| 订单类型 | 测评订单 / 学业规划订单 |
| 项目名称 | 如"多元智能测评" |
| 金额 | 支付金额 |
| 订单状态 | 见下表 |
测评订单状态:
| 状态 | 说明 | 操作 |
|---|---|---|
| 待测评 | 已支付,未完成答题 | 【开始测评】 |
| 测评生成中 | 已答题,报告生成中 | - |
| 已测评 | 报告已生成 | 【查看测评结果】 |
| 退款中 | 申请退款处理中 | - |
| 已退款 | 退款完成 | - |
学业规划订单状态:
| 状态 | 说明 |
|---|---|
| 已支付 | 预约成功 |
3.7.2 往期测评页
列表字段:
| 字段 | 说明 |
|---|---|
| 测评日期 | - |
| 订单编号 | - |
| 测评项目 | - |
| 报告状态 | 测评生成中 / 查看测评结果 |
3.8 邀请分销模块
3.8.1 邀请新用户页(合伙人专属)
页面内容:
- 邀请规则说明
- 专属邀请链接
- 生成二维码按钮
- 分享链接按钮(转发微信好友)
- 已提现/待提现金额
- 申请提现按钮
- 提现记录
- 我的邀请记录列表
3.8.2 邀请关系绑定
绑定规则:
- 新用户通过邀请链接/二维码进入小程序
- 首次登录时自动绑定上级
- 绑定后不可更改
层级关系:
- 最多2级:A邀请B,B邀请C
- A是B的上级,B是C的上级
- A不能直接看到C的信息
3.8.3 佣金规则
佣金计算:
下级用户支付成功后:
- 直接上级获得 30% 佣金
- 间接上级(上上级)获得 10% 佣金
如果没有间接上级:
- 直接上级获得 40% 佣金
示例:
用户C支付100元:
- 用户B(C的上级)获得 30元
- 用户A(B的上级)获得 10元
用户B支付100元(B没有上级的上级):
- 用户A(B的上级)获得 40元
3.8.4 提现功能
提现规则:
- 最低提现金额:1元
- 只能提现整数
- 提现到微信零钱
提现状态:
| 状态 | 说明 |
|---|---|
| 申请中 | 用户提交申请 |
| 提现中 | 后台审核通过,打款中 |
| 已提现 | 打款成功 |
| 已取消 | 后台拒绝申请 |
3.8.5 邀请码管理
邀请码规则:
- 5位随机大写字母
- 后台批量生成
- 每个邀请码只能使用一次
- 记录:生成时间、发放给谁、使用状态、使用者、使用的测评
3.9 系统配置模块(后台)
3.9.1 基础配置
| 配置项 | 说明 |
|---|---|
| 小程序名称 | - |
| 客服微信 | - |
| 关于我们 | 富文本 |
| 用户协议 | 富文本 |
| 隐私政策 | 富文本 |
3.9.2 测评配置
| 配置项 | 说明 |
|---|---|
| 测评价格 | 元 |
| 测评介绍 | 基本信息页顶部展示 |
| 题目管理 | 80道题目及选项 |
3.9.3 规划师管理
- 新增/编辑/删除规划师
- 设置价格、介绍、排序、状态
四、接口设计概览
接口风格说明:本项目采用 RPC 风格,所有接口仅使用 GET 和 POST 两种请求方法。
- GET:用于查询操作,参数通过 Query String 传递
- POST:用于新增、修改、删除等操作,参数通过 Request Body (JSON) 传递
4.1 小程序端接口
用户模块
| 方法 | 接口 | 说明 |
|---|---|---|
| POST | /api/user/login | 微信登录 |
| GET | /api/user/getProfile | 获取个人信息 |
| POST | /api/user/updateProfile | 更新个人信息 |
| POST | /api/user/updateAvatar | 更新头像 |
首页模块
| 方法 | 接口 | 说明 |
|---|---|---|
| GET | /api/home/getBannerList | 获取Banner列表 |
| GET | /api/home/getAssessmentList | 获取测评入口列表 |
| GET | /api/home/getPromotionList | 获取底部宣传图 |
团队模块
| 方法 | 接口 | 说明 |
|---|---|---|
| GET | /api/team/getInfo | 获取团队介绍 |
测评模块
| 方法 | 接口 | 说明 |
|---|---|---|
| GET | /api/assessment/getIntro | 获取测评介绍 |
| GET | /api/assessment/getQuestionList | 获取题目列表 |
| POST | /api/assessment/submitAnswers | 提交测评答案 |
| GET | /api/assessment/getResult | 获取测评结果 |
| GET | /api/assessment/getResultStatus | 查询报告生成状态 |
| POST | /api/assessment/verifyInviteCode | 验证邀请码 |
订单模块
| 方法 | 接口 | 说明 |
|---|---|---|
| GET | /api/order/getList | 获取订单列表 |
| GET | /api/order/getDetail | 获取订单详情 |
| POST | /api/order/create | 创建订单 |
| POST | /api/order/pay | 发起支付 |
| GET | /api/order/getPayResult | 查询支付结果 |
学业规划模块
| 方法 | 接口 | 说明 |
|---|---|---|
| GET | /api/planner/getList | 获取规划师列表 |
| POST | /api/planner/book | 预约规划 |
分销模块
| 方法 | 接口 | 说明 |
|---|---|---|
| GET | /api/invite/getInfo | 获取邀请信息 |
| GET | /api/invite/getQrcode | 生成邀请二维码 |
| GET | /api/invite/getRecordList | 获取邀请记录 |
| GET | /api/invite/getCommission | 获取佣金信息 |
| POST | /api/invite/applyWithdraw | 申请提现 |
| GET | /api/invite/getWithdrawList | 获取提现记录 |
系统模块
| 方法 | 接口 | 说明 |
|---|---|---|
| GET | /api/system/getAgreement | 获取用户协议 |
| GET | /api/system/getPrivacy | 获取隐私政策 |
| GET | /api/system/getAbout | 获取关于我们 |
4.2 接口请求/响应规范
请求格式
// GET 请求示例
GET /api/order/getDetail?orderId=123456
// POST 请求示例
POST /api/user/updateProfile
Content-Type: application/json
{
"nickname": "张三",
"avatar": "https://xxx.com/avatar.jpg"
}
响应格式
{
"code": 0, // 状态码:0成功,非0失败
"message": "success", // 提示信息
"data": {} // 业务数据
}
错误码定义
| 错误码 | 说明 |
|---|---|
| 0 | 成功 |
| 1001 | 参数错误 |
| 1002 | 未登录 |
| 1003 | 登录已过期 |
| 1004 | 无权限 |
| 2001 | 业务错误(具体看message) |
| 5000 | 系统错误 |
五、页面清单
5.1 小程序页面
| 页面 | 路径 | 说明 |
|---|---|---|
| 首页 | /pages/index/index | TabBar页面 |
| 团队 | /pages/team/index | TabBar页面 |
| 我的 | /pages/mine/index | TabBar页面 |
| 登录 | /pages/login/index | - |
| 个人信息 | /pages/mine/profile | - |
| 我的订单 | /pages/order/list | - |
| 订单详情 | /pages/order/detail | - |
| 往期测评 | /pages/assessment/history | - |
| 业务详情 | /pages/business/detail | Banner跳转 |
| 测评-基本信息 | /pages/assessment/info | - |
| 测评-答题 | /pages/assessment/questions | - |
| 测评-生成中 | /pages/assessment/loading | - |
| 测评-结果 | /pages/assessment/result | - |
| 学业规划-规划师 | /pages/planner/list | - |
| 学业规划-预约 | /pages/planner/book | - |
| 邀请新用户 | /pages/invite/index | 合伙人专属 |
| 邀请二维码 | /pages/invite/qrcode | - |
| 提现记录 | /pages/invite/withdraw | - |
| 关于 | /pages/about/index | - |
| 用户协议 | /pages/agreement/user | - |
| 隐私政策 | /pages/agreement/privacy | - |
5.2 后台管理页面
| 模块 | 页面 |
|---|---|
| 首页 | 数据概览(用户数、订单数、收入等) |
| 用户管理 | 用户列表、用户详情、等级设置 |
| 订单管理 | 订单列表、订单详情、退款处理 |
| 测评管理 | 题目管理、测评记录、报告查看 |
| 内容管理 | Banner管理、测评入口、宣传图、团队介绍 |
| 规划师管理 | 规划师列表、预约记录 |
| 分销管理 | 邀请码管理、佣金记录、提现审核 |
| 系统设置 | 基础配置、协议配置、价格配置 |
六、非功能需求
6.1 性能要求
- 页面加载时间 < 2秒
- 接口响应时间 < 500ms
- 支持1000并发用户
6.2 安全要求
- 接口鉴权(JWT Token)
- 敏感数据加密存储
- 防SQL注入、XSS攻击
- 微信支付签名验证
6.3 兼容性要求
- 微信基础库版本 >= 2.20.0
- iOS 10.0+
- Android 5.0+
七、开发计划建议
第一阶段:基础框架(1周)
- 数据库设计
- 后端项目搭建
- 小程序项目搭建
- 微信登录对接
第二阶段:核心功能(2周)
- 首页、团队页、我的页
- 测评流程(信息填写→答题→结果)
- 测评计分算法实现
- 微信支付对接
第三阶段:扩展功能(1周)
- 学业规划模块
- 订单管理
- 往期测评
第四阶段:分销系统(1周)
- 邀请关系绑定
- 佣金计算
- 提现功能
- 邀请码管理
第五阶段:后台管理(1周)
- 内容管理
- 用户管理
- 订单管理
- 数据统计
第六阶段:测试上线(1周)
- 功能测试
- 性能测试
- 小程序审核
- 正式上线
八、双数据库架构
8.1 架构说明
本项目采用双数据库架构,严格区分后台管理数据与业务数据:
| 数据库 | 名称 | 职责 |
|---|---|---|
| Admin 库 | MiAssessment_Admin |
后台管理系统自身运行所需数据(RBAC、审计、运营配置) |
| Business 库 | MiAssessment_Business |
C端用户产生的或直接服务C端的业务数据 |
8.2 配置数据分离
| 配置类型 | 所在库 | 表名 | 说明 |
|---|---|---|---|
| 运营配置 | Admin 库 | admin_configs |
支付密钥、小程序配置、上传凭证、短信配置等 |
| 业务配置 | Business 库 | configs |
测评价格、佣金比例、提现限额、联系方式、协议内容等 |
8.3 DbContext 映射
| DbContext | 所在项目 | 连接数据库 | 读写权限 |
|---|---|---|---|
AdminDbContext |
MiAssessment.Admin | Admin 库 | 读写 |
AdminBusinessDbContext |
MiAssessment.Admin.Business | Business 库 | 读写 |
AdminConfigDbContext |
MiAssessment.Admin.Business | Admin 库 | 只读 |
AdminConfigReadDbContext |
MiAssessment.Model | Admin 库 | 只读 |
MiAssessmentDbContext |
MiAssessment.Model | Business 库 | 读写 |
8.4 跨库访问规则
- Business 项目对 Admin 库只读,通过
AdminConfigDbContext - Core/API 项目对 Admin 库只读,通过
AdminConfigReadDbContext - Admin 库的写操作只通过 Admin 项目的
AdminDbContext进行 - 连接字符串:Admin 库 =
AdminConnection,Business 库 =DefaultConnection
九、附录
9.1 设计图地址
Figma: https://www.figma.com/design/88edYGASUcyID6afiwILdf/项目?node-id=432-1991
9.2 相关文档
- 需求文档:
docs/需求文档.md - 题库文档:
docs/题库和结论/ - 设计切图:
docs/切图/ - 设计图:
docs/设计图/
9.3 题目-分类映射汇总
详见各分析报告对应题目文档,核心映射关系已在 3.5 节说明。