mi-assessment/docs/开发文档.md
zpc 2c3940895f docs(db): 添加双数据库架构规范文档
- 在开发规范 steering 文件中新增第九节:双数据库架构规范
- 在开发文档中新增第八节:双数据库架构说明
- 明确 Admin 库与 Business 库的职责划分
- 定义配置数据分离规则和 DbContext 映射关系
- 规定跨库访问只读原则
2026-02-20 15:52:28 +08:00

769 lines
20 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 学业邑规划 - 开发文档
## 一、项目概述
### 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岁 |
| 学业阶段 | 下拉 | 是 | 小学及以下/初中/高中/大专/本科/研究生及以上 |
| 省份 | 下拉 | 是 | - |
| 城市 | 下拉 | 是 | - |
| 区县 | 下拉 | 是 | 必须选择到区县 |
**页面顶部介绍**:后台可配置文字或图片
**按钮状态**
- 有未填写项 → 按钮灰色不可点击
- 全部填写 → 按钮可点击
**两个入口按钮**
1. **支付¥XX元 开始测评**
- 金额从后台配置读取
- 点击后验证信息 → 拉起微信支付
2. **邀请码免费测评**
- 点击后验证信息 → 弹出邀请码输入框
- 邀请码验证:不存在/已使用/验证通过
**验证规则**
- 手机号格式验证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-80/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邀请BB邀请C
- A是B的上级B是C的上级
- A不能直接看到C的信息
#### 3.8.3 佣金规则
**佣金计算**
```
下级用户支付成功后:
- 直接上级获得 30% 佣金
- 间接上级(上上级)获得 10% 佣金
如果没有间接上级:
- 直接上级获得 40% 佣金
```
**示例**
```
用户C支付100元
- 用户BC的上级获得 30元
- 用户AB的上级获得 10元
用户B支付100元B没有上级的上级
- 用户AB的上级获得 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 接口请求/响应规范
#### 请求格式
```json
// GET 请求示例
GET /api/order/getDetail?orderId=123456
// POST 请求示例
POST /api/user/updateProfile
Content-Type: application/json
{
"nickname": "张三",
"avatar": "https://xxx.com/avatar.jpg"
}
```
#### 响应格式
```json
{
"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 跨库访问规则
1. Business 项目对 Admin 库**只读**,通过 `AdminConfigDbContext`
2. Core/API 项目对 Admin 库**只读**,通过 `AdminConfigReadDbContext`
3. Admin 库的**写操作只通过 Admin 项目**的 `AdminDbContext` 进行
4. 连接字符串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 节说明。