1092 lines
24 KiB
Markdown
1092 lines
24 KiB
Markdown
|
|
# 习正陪伴业务流程完整分析
|
|||
|
|
|
|||
|
|
> 创建时间:2026-01-27
|
|||
|
|
> 文档类型:系统架构与业务流程分析
|
|||
|
|
> 适用范围:全体开发人员、产品经理、运营人员
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📋 目录
|
|||
|
|
|
|||
|
|
1. [核心业务流程](#核心业务流程)
|
|||
|
|
2. [支撑业务流程](#支撑业务流程)
|
|||
|
|
3. [管理业务流程](#管理业务流程)
|
|||
|
|
4. [数据模型](#数据模型)
|
|||
|
|
5. [状态流转规则](#状态流转规则)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🎯 一、核心业务流程
|
|||
|
|
|
|||
|
|
### 1.1 订单创建流程
|
|||
|
|
|
|||
|
|
**参与角色:** 家长(用户)
|
|||
|
|
|
|||
|
|
**流程步骤:**
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
家长端 → 选择服务 → 填写订单信息 → 创建订单
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**关键代码位置:**
|
|||
|
|
- Controller: `OrderController.createOrder()`
|
|||
|
|
- Service: `OrderServiceImpl.createOrder()`
|
|||
|
|
- Entity: `Order.java`
|
|||
|
|
|
|||
|
|
**业务逻辑:**
|
|||
|
|
|
|||
|
|
1. **服务验证**
|
|||
|
|
- 检查服务是否存在(serviceId)
|
|||
|
|
- 特殊处理:家长学院课程不在service表中,跳过检查
|
|||
|
|
|
|||
|
|
2. **订单初始化**
|
|||
|
|
- 生成订单号:`PD + yyyyMMddHHmmss + 4位随机数`
|
|||
|
|
- 生成核销码:12位随机数字
|
|||
|
|
- 设置初始状态:`status=0`(待支付)
|
|||
|
|
- 设置支付状态:`payStatus=0`(未支付)
|
|||
|
|
|
|||
|
|
3. **数据保存**
|
|||
|
|
- 保存订单到数据库
|
|||
|
|
- 发送订单创建通知给家长
|
|||
|
|
|
|||
|
|
**订单字段说明:**
|
|||
|
|
|
|||
|
|
| 字段 | 说明 | 示例 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| orderNo | 订单号 | PD20260127143025001 |
|
|||
|
|
| verificationCode | 核销码(12位) | 123456789012 |
|
|||
|
|
| status | 订单状态 | 0=待支付 |
|
|||
|
|
| payStatus | 支付状态 | 0=未支付 |
|
|||
|
|
| userId | 家长ID | 1 |
|
|||
|
|
| studentId | 学生ID | 可为null |
|
|||
|
|
| serviceId | 服务ID | 1 |
|
|||
|
|
| serviceName | 服务名称 | 陪伴服务 |
|
|||
|
|
| serviceType | 服务类型 | basic/package/parent_academy |
|
|||
|
|
| price | 服务价格 | 100.00 |
|
|||
|
|
| payAmount | 实付金额 | 90.00 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 1.2 支付流程
|
|||
|
|
|
|||
|
|
**参与角色:** 家长(用户)
|
|||
|
|
|
|||
|
|
**流程步骤:**
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
家长端 → 选择支付方式 → 发起支付 → 支付成功 → 订单状态更新
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**关键代码位置:**
|
|||
|
|
- Controller: `OrderController.payOrder()`
|
|||
|
|
- Service: `OrderServiceImpl.payOrder()`
|
|||
|
|
|
|||
|
|
**支付方式:**
|
|||
|
|
|
|||
|
|
1. **微信支付** (`paymentMethod = "wechat"`)
|
|||
|
|
- 调用微信支付接口
|
|||
|
|
- 等待支付回调
|
|||
|
|
|
|||
|
|
2. **钱包支付** (`paymentMethod = "wallet"`)
|
|||
|
|
- 检查钱包余额
|
|||
|
|
- 调用 `walletService.consume()` 扣款
|
|||
|
|
- 立即完成支付
|
|||
|
|
|
|||
|
|
3. **其他支付方式**
|
|||
|
|
- 支付宝、银行卡等
|
|||
|
|
|
|||
|
|
**支付成功后的处理:**
|
|||
|
|
|
|||
|
|
|
|||
|
|
1. **更新订单状态**
|
|||
|
|
- `payStatus = 1`(已支付)
|
|||
|
|
- `status = 0`(待派单)
|
|||
|
|
- 记录支付时间和支付方式
|
|||
|
|
|
|||
|
|
2. **创建购买记录**(针对特定服务类型)
|
|||
|
|
- 家长学院订单:创建 `parent_academy_purchase` 记录
|
|||
|
|
- 套餐订单:创建 `user_package` 记录
|
|||
|
|
|
|||
|
|
3. **创建分销订单**
|
|||
|
|
- 自动调用 `distributorService.createDistributorOrderFromOrder()`
|
|||
|
|
- 记录分销关系和佣金信息
|
|||
|
|
|
|||
|
|
4. **发送通知**
|
|||
|
|
- 通知家长支付成功
|
|||
|
|
- 通知管理师有新订单待派单
|
|||
|
|
|
|||
|
|
**状态流转:**
|
|||
|
|
```
|
|||
|
|
status: 0(待支付) → 0(待派单)
|
|||
|
|
payStatus: 0(未支付) → 1(已支付)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 1.3 派单流程
|
|||
|
|
|
|||
|
|
**参与角色:** 管理师
|
|||
|
|
|
|||
|
|
**流程步骤:**
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
管理师端 → 查看待派单列表 → 选择订单 → 选择陪伴员 → 确认派单
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**关键代码位置:**
|
|||
|
|
- 前端页面: `manager-package/pages/manager/work-order-detail.vue`
|
|||
|
|
- 前端页面: `manager-package/pages/manager/assign.vue`
|
|||
|
|
- Controller: `WorkOrderController.createWorkOrder()`
|
|||
|
|
|
|||
|
|
**派单逻辑:**
|
|||
|
|
|
|||
|
|
1. **查看订单详情**
|
|||
|
|
- 显示家长信息(姓名、电话)
|
|||
|
|
- 显示学生信息(姓名、年级、年龄)
|
|||
|
|
- 显示订单信息(服务名称、金额、时间、地址)
|
|||
|
|
|
|||
|
|
2. **选择陪伴员**
|
|||
|
|
- 查看陪伴员列表
|
|||
|
|
- 筛选条件:等级、状态、距离等
|
|||
|
|
- 查看陪伴员详情(评分、服务次数等)
|
|||
|
|
|
|||
|
|
3. **确认派单**
|
|||
|
|
- 更新订单的 `teacherId` 字段
|
|||
|
|
- 订单状态保持为 `status = 0`(待派单)
|
|||
|
|
- 等待陪伴员接单
|
|||
|
|
|
|||
|
|
4. **发送通知**
|
|||
|
|
- 通知陪伴员有新订单待接单
|
|||
|
|
- 通知家长订单已派单
|
|||
|
|
|
|||
|
|
**状态流转:**
|
|||
|
|
```
|
|||
|
|
status: 0(待派单) → 0(待派单,但已分配陪伴员)
|
|||
|
|
teacherId: null → 具体陪伴员ID
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 1.4 接单流程
|
|||
|
|
|
|||
|
|
**参与角色:** 陪伴员
|
|||
|
|
|
|||
|
|
**流程步骤:**
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
陪伴员端 → 查看待接单列表 → 查看订单详情 → 接单/拒单
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**关键代码位置:**
|
|||
|
|
- Controller: `OrderController.acceptOrder()` / `rejectOrder()`
|
|||
|
|
- Service: `OrderServiceImpl.acceptOrder()` / `rejectOrder()`
|
|||
|
|
|
|||
|
|
**接单逻辑:**
|
|||
|
|
|
|||
|
|
1. **查看订单详情**
|
|||
|
|
- 服务时间、地址
|
|||
|
|
- 学生信息
|
|||
|
|
- 服务要求
|
|||
|
|
|
|||
|
|
2. **接单**
|
|||
|
|
- 前置条件:订单状态为 `status = 1`(待接单)且已分配陪伴员
|
|||
|
|
- 更新订单状态为 `status = 2`(待服务)
|
|||
|
|
- 发送通知给家长
|
|||
|
|
|
|||
|
|
3. **拒单**
|
|||
|
|
- 前置条件:订单状态为 `status = 1`(待接单)
|
|||
|
|
- 订单状态回退为 `status = 0`(待派单)
|
|||
|
|
- 清除 `teacherId`,让管理师重新分配
|
|||
|
|
- 记录拒单原因
|
|||
|
|
- 发送通知给家长和管理师
|
|||
|
|
|
|||
|
|
**状态流转:**
|
|||
|
|
|
|||
|
|
接单:
|
|||
|
|
```
|
|||
|
|
status: 1(待接单) → 2(待服务)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
拒单:
|
|||
|
|
```
|
|||
|
|
status: 1(待接单) → 0(待派单)
|
|||
|
|
teacherId: 具体陪伴员ID → null
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 1.5 服务流程
|
|||
|
|
|
|||
|
|
**参与角色:** 陪伴员、家长
|
|||
|
|
|
|||
|
|
**流程步骤:**
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
陪伴员端 → 签到(开始服务)→ 服务中 → 签退(完成服务)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**关键代码位置:**
|
|||
|
|
- Controller: `OrderController.startService()` / `completeService()`
|
|||
|
|
- Service: `OrderServiceImpl.startServiceWithCheckIn()` / `completeService()`
|
|||
|
|
- Entity: `CheckInRecord.java`
|
|||
|
|
|
|||
|
|
**签到(开始服务):**
|
|||
|
|
|
|||
|
|
1. **前置条件**
|
|||
|
|
- 订单状态为 `status = 2`(待服务)
|
|||
|
|
- 陪伴员已到达服务地点
|
|||
|
|
|
|||
|
|
2. **签到信息**
|
|||
|
|
- 拍照上传
|
|||
|
|
- 获取GPS位置
|
|||
|
|
- 填写备注
|
|||
|
|
|
|||
|
|
3. **系统处理**
|
|||
|
|
- 更新订单状态为 `status = 3`(服务中)
|
|||
|
|
- 设置 `isVerified = 1`(已核销)
|
|||
|
|
- 记录 `verifyTime`(核销时间)
|
|||
|
|
- 记录 `serviceStartTime`(服务开始时间)
|
|||
|
|
- 创建签到记录到 `check_in_record` 表
|
|||
|
|
|
|||
|
|
4. **发送通知**
|
|||
|
|
- 通知家长:陪伴员已到达,服务开始
|
|||
|
|
- 通知管理师:订单已核销
|
|||
|
|
|
|||
|
|
|
|||
|
|
**签退(完成服务):**
|
|||
|
|
|
|||
|
|
1. **前置条件**
|
|||
|
|
- 订单状态为 `status = 3`(服务中)
|
|||
|
|
- 服务已完成
|
|||
|
|
|
|||
|
|
2. **签退信息**
|
|||
|
|
- 拍照上传
|
|||
|
|
- 获取GPS位置
|
|||
|
|
- 填写服务总结
|
|||
|
|
|
|||
|
|
3. **系统处理**
|
|||
|
|
- 更新订单状态为 `status = 4`(已完成)
|
|||
|
|
- 记录 `completeTime`(完成时间)
|
|||
|
|
- 创建签退记录到 `check_in_record` 表
|
|||
|
|
- 计算实际服务时长
|
|||
|
|
|
|||
|
|
4. **时卡/套餐扣减**
|
|||
|
|
- 如果订单关联时卡:扣减时卡时长
|
|||
|
|
- 如果订单关联套餐:扣减套餐时长
|
|||
|
|
- 记录使用明细
|
|||
|
|
|
|||
|
|
5. **收益结算**
|
|||
|
|
- 创建陪伴员收益记录(`teacher_salary`)
|
|||
|
|
- 陪伴员分成比例:70%
|
|||
|
|
- 钱包收益入账
|
|||
|
|
|
|||
|
|
6. **分销佣金**
|
|||
|
|
- 触发分销佣金状态更新
|
|||
|
|
- 佣金状态:待结算 → 可提现
|
|||
|
|
|
|||
|
|
7. **更新统计**
|
|||
|
|
- 更新课程销量
|
|||
|
|
- 更新陪伴员服务次数
|
|||
|
|
|
|||
|
|
**状态流转:**
|
|||
|
|
|
|||
|
|
签到:
|
|||
|
|
```
|
|||
|
|
status: 2(待服务) → 3(服务中)
|
|||
|
|
isVerified: 0 → 1
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
签退:
|
|||
|
|
```
|
|||
|
|
status: 3(服务中) → 4(已完成)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 1.6 评价流程
|
|||
|
|
|
|||
|
|
**参与角色:** 家长
|
|||
|
|
|
|||
|
|
**流程步骤:**
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
家长端 → 查看已完成订单 → 提交评价 → 评价成功
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**关键代码位置:**
|
|||
|
|
- Controller: `ReviewController.submitReview()`
|
|||
|
|
- Service: `ReviewService.submitReview()`
|
|||
|
|
- Entity: `Review.java`
|
|||
|
|
|
|||
|
|
**评价内容:**
|
|||
|
|
|
|||
|
|
1. **评分**
|
|||
|
|
- 1-5星评分
|
|||
|
|
- 必填项
|
|||
|
|
|
|||
|
|
2. **评价内容**
|
|||
|
|
- 文字评价
|
|||
|
|
- 可选项
|
|||
|
|
|
|||
|
|
3. **评价标签**
|
|||
|
|
- 预设标签(如:耐心、专业、准时等)
|
|||
|
|
- 多选
|
|||
|
|
|
|||
|
|
4. **系统处理**
|
|||
|
|
- 保存评价到 `review` 表
|
|||
|
|
- 更新订单的 `reviewed` 字段为 `true`
|
|||
|
|
- 更新陪伴员的平均评分
|
|||
|
|
- 发送通知给陪伴员
|
|||
|
|
|
|||
|
|
**陪伴员回复:**
|
|||
|
|
- 陪伴员可以回复评价
|
|||
|
|
- 回复内容保存到 `review` 表的 `reply_content` 字段
|
|||
|
|
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🔧 二、支撑业务流程
|
|||
|
|
|
|||
|
|
### 2.1 支付系统
|
|||
|
|
|
|||
|
|
**核心功能:** 处理订单支付、退款、支付记录
|
|||
|
|
|
|||
|
|
**涉及实体:**
|
|||
|
|
- `PaymentRecord`:支付记录
|
|||
|
|
- `Order`:订单支付状态
|
|||
|
|
|
|||
|
|
**支付方式:**
|
|||
|
|
|
|||
|
|
1. **微信支付**
|
|||
|
|
- 调用微信支付API
|
|||
|
|
- 处理支付回调
|
|||
|
|
- 更新订单状态
|
|||
|
|
|
|||
|
|
2. **钱包支付**
|
|||
|
|
- 检查余额
|
|||
|
|
- 扣减余额
|
|||
|
|
- 记录交易流水
|
|||
|
|
|
|||
|
|
3. **支付宝支付**
|
|||
|
|
- 调用支付宝API
|
|||
|
|
- 处理支付回调
|
|||
|
|
|
|||
|
|
**退款流程:**
|
|||
|
|
```
|
|||
|
|
用户申请退款 → 审核 → 原路退回 → 更新订单状态
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 2.2 钱包系统
|
|||
|
|
|
|||
|
|
**核心功能:** 管理用户钱包余额、充值、消费、提现
|
|||
|
|
|
|||
|
|
**涉及实体:**
|
|||
|
|
- `Wallet`:钱包账户
|
|||
|
|
- `WalletTransaction`:钱包交易记录
|
|||
|
|
|
|||
|
|
**关键代码位置:**
|
|||
|
|
- Controller: `WalletController`
|
|||
|
|
- Service: `WalletServiceImpl`
|
|||
|
|
|
|||
|
|
**钱包功能:**
|
|||
|
|
|
|||
|
|
1. **充值**
|
|||
|
|
- 选择充值金额
|
|||
|
|
- 选择支付方式
|
|||
|
|
- 充值成功后增加余额
|
|||
|
|
- 记录交易流水
|
|||
|
|
|
|||
|
|
2. **消费**
|
|||
|
|
- 订单支付时扣减余额
|
|||
|
|
- 检查余额是否足够
|
|||
|
|
- 记录交易流水
|
|||
|
|
|
|||
|
|
3. **提现**(陪伴员)
|
|||
|
|
- 申请提现
|
|||
|
|
- 审核
|
|||
|
|
- 转账到银行卡
|
|||
|
|
- 扣减余额
|
|||
|
|
|
|||
|
|
4. **收益入账**(陪伴员)
|
|||
|
|
- 订单完成后自动入账
|
|||
|
|
- 收益 = 订单金额 × 70%
|
|||
|
|
- 记录交易流水
|
|||
|
|
|
|||
|
|
**钱包余额计算:**
|
|||
|
|
```
|
|||
|
|
当前余额 = 初始余额 + 充值金额 + 收益金额 - 消费金额 - 提现金额
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 2.3 优惠券系统
|
|||
|
|
|
|||
|
|
**核心功能:** 发放优惠券、使用优惠券、优惠券统计
|
|||
|
|
|
|||
|
|
**涉及实体:**
|
|||
|
|
- `Coupon`:优惠券模板
|
|||
|
|
- `UserCoupon`:用户优惠券
|
|||
|
|
|
|||
|
|
**关键代码位置:**
|
|||
|
|
- Controller: `CouponController`, `UserCouponController`
|
|||
|
|
- Service: `CouponServiceImpl`, `UserCouponServiceImpl`
|
|||
|
|
|
|||
|
|
**优惠券类型:**
|
|||
|
|
|
|||
|
|
1. **满减券**
|
|||
|
|
- 满X元减Y元
|
|||
|
|
- 例:满100减20
|
|||
|
|
|
|||
|
|
2. **折扣券**
|
|||
|
|
- X折优惠
|
|||
|
|
- 例:8折券
|
|||
|
|
|
|||
|
|
3. **代金券**
|
|||
|
|
- 直接抵扣金额
|
|||
|
|
- 例:10元代金券
|
|||
|
|
|
|||
|
|
|
|||
|
|
**优惠券流程:**
|
|||
|
|
|
|||
|
|
1. **发放**
|
|||
|
|
- 管理员创建优惠券模板
|
|||
|
|
- 系统自动发放或手动发放给用户
|
|||
|
|
- 用户领取优惠券
|
|||
|
|
|
|||
|
|
2. **使用**
|
|||
|
|
- 下单时选择可用优惠券
|
|||
|
|
- 系统计算优惠金额
|
|||
|
|
- 支付时扣减优惠金额
|
|||
|
|
- 标记优惠券为已使用
|
|||
|
|
|
|||
|
|
3. **过期**
|
|||
|
|
- 定时任务检查过期优惠券
|
|||
|
|
- 标记为已过期
|
|||
|
|
|
|||
|
|
**优惠券字段:**
|
|||
|
|
- `couponName`:优惠券名称
|
|||
|
|
- `couponType`:类型(满减/折扣/代金)
|
|||
|
|
- `discountAmount`:优惠金额
|
|||
|
|
- `minAmount`:最低消费金额
|
|||
|
|
- `validFrom`:有效期开始
|
|||
|
|
- `validTo`:有效期结束
|
|||
|
|
- `status`:状态(未使用/已使用/已过期)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 2.4 成长记录系统
|
|||
|
|
|
|||
|
|
**核心功能:** 记录学生成长轨迹、陪伴员反馈
|
|||
|
|
|
|||
|
|
**涉及实体:**
|
|||
|
|
- `GrowthRecord`:成长记录
|
|||
|
|
|
|||
|
|
**关键代码位置:**
|
|||
|
|
- Controller: `GrowthRecordController`
|
|||
|
|
- Service: `GrowthRecordServiceImpl`
|
|||
|
|
|
|||
|
|
**成长记录内容:**
|
|||
|
|
|
|||
|
|
1. **陪伴员反馈**
|
|||
|
|
- 服务完成后填写
|
|||
|
|
- 记录学生表现
|
|||
|
|
- 上传照片/视频
|
|||
|
|
|
|||
|
|
2. **管理师补充**
|
|||
|
|
- 管理师可以补充反馈内容
|
|||
|
|
- 字段:`supplement`
|
|||
|
|
|
|||
|
|
3. **家长查看**
|
|||
|
|
- 家长端查看学生成长记录
|
|||
|
|
- 按时间倒序展示
|
|||
|
|
|
|||
|
|
**成长记录字段:**
|
|||
|
|
- `orderId`:关联订单
|
|||
|
|
- `studentId`:学生ID
|
|||
|
|
- `teacherId`:陪伴员ID
|
|||
|
|
- `content`:反馈内容
|
|||
|
|
- `photos`:照片URL(多张,逗号分隔)
|
|||
|
|
- `videos`:视频URL
|
|||
|
|
- `supplement`:管理师补充内容
|
|||
|
|
- `recordDate`:记录日期
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 2.5 时卡/套餐系统
|
|||
|
|
|
|||
|
|
**核心功能:** 管理用户购买的时卡和套餐
|
|||
|
|
|
|||
|
|
**涉及实体:**
|
|||
|
|
- `Package`:套餐模板
|
|||
|
|
- `UserPackage`:用户套餐
|
|||
|
|
- `TimeCard`:时卡
|
|||
|
|
- `PackageUsage`:套餐使用记录
|
|||
|
|
|
|||
|
|
**关键代码位置:**
|
|||
|
|
- Service: `PackageService`, `TimeCardService`, `PackageUsageService`
|
|||
|
|
|
|||
|
|
**套餐类型:**
|
|||
|
|
|
|||
|
|
1. **时卡套餐**
|
|||
|
|
- 按小时计费
|
|||
|
|
- 例:100小时套餐
|
|||
|
|
|
|||
|
|
2. **次卡套餐**
|
|||
|
|
- 按次数计费
|
|||
|
|
- 例:10次套餐
|
|||
|
|
|
|||
|
|
**套餐流程:**
|
|||
|
|
|
|||
|
|
1. **购买套餐**
|
|||
|
|
- 用户下单购买套餐
|
|||
|
|
- 支付成功后创建 `user_package` 记录
|
|||
|
|
- 初始化总时长和剩余时长
|
|||
|
|
|
|||
|
|
2. **使用套餐**
|
|||
|
|
- 预约服务时选择套餐
|
|||
|
|
- 订单关联 `userPackageId`
|
|||
|
|
- 服务完成后扣减套餐时长
|
|||
|
|
|
|||
|
|
3. **套餐扣减**
|
|||
|
|
- 计算实际服务时长
|
|||
|
|
- 扣减剩余时长
|
|||
|
|
- 记录使用明细到 `package_usage`
|
|||
|
|
|
|||
|
|
4. **套餐过期**
|
|||
|
|
- 检查有效期
|
|||
|
|
- 过期后不可使用
|
|||
|
|
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 👥 三、管理业务流程
|
|||
|
|
|
|||
|
|
### 3.1 分销系统
|
|||
|
|
|
|||
|
|
**核心功能:** 管理分销员、分销订单、佣金结算
|
|||
|
|
|
|||
|
|
**涉及实体:**
|
|||
|
|
- `Distributor`:分销员
|
|||
|
|
- `DistributorOrder`:分销订单
|
|||
|
|
- `DistributorCustomer`:分销客户关系
|
|||
|
|
- `DistributorWithdraw`:分销员提现记录
|
|||
|
|
|
|||
|
|
**关键代码位置:**
|
|||
|
|
- Controller: `DistributorController`
|
|||
|
|
- Service: `DistributorServiceImpl`
|
|||
|
|
- Listener: `OrderStatusListener`
|
|||
|
|
|
|||
|
|
**分销流程:**
|
|||
|
|
|
|||
|
|
1. **分销员注册**
|
|||
|
|
- 用户申请成为分销员
|
|||
|
|
- 审核通过后开通分销权限
|
|||
|
|
- 生成专属邀请码
|
|||
|
|
|
|||
|
|
2. **客户绑定**
|
|||
|
|
- 新用户通过邀请码注册
|
|||
|
|
- 建立分销关系(`distributor_customer`)
|
|||
|
|
- 关系永久绑定
|
|||
|
|
|
|||
|
|
3. **订单分佣**
|
|||
|
|
- 客户下单支付成功
|
|||
|
|
- 自动创建分销订单记录
|
|||
|
|
- 计算佣金金额(订单金额 × 佣金比例)
|
|||
|
|
- 佣金状态:待结算
|
|||
|
|
|
|||
|
|
4. **佣金结算**
|
|||
|
|
- 订单完成后,佣金状态变为可提现
|
|||
|
|
- 分销员申请提现
|
|||
|
|
- 审核通过后转账
|
|||
|
|
|
|||
|
|
5. **佣金取消**
|
|||
|
|
- 订单取消或退款
|
|||
|
|
- 扣减对应佣金
|
|||
|
|
- 更新分销订单状态
|
|||
|
|
|
|||
|
|
**佣金计算规则:**
|
|||
|
|
```
|
|||
|
|
佣金金额 = 订单实付金额 × 佣金比例
|
|||
|
|
佣金比例 = 10%(可配置)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**分销员等级:**
|
|||
|
|
- 普通分销员:10%佣金
|
|||
|
|
- 高级分销员:15%佣金
|
|||
|
|
- 金牌分销员:20%佣金
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 3.2 培训系统
|
|||
|
|
|
|||
|
|
**核心功能:** 陪伴员培训、考试、证书管理
|
|||
|
|
|
|||
|
|
**涉及实体:**
|
|||
|
|
- `TrainingCourse`:培训课程
|
|||
|
|
- `TrainingLearningRecord`:学习记录
|
|||
|
|
- `TrainingExam`:考试
|
|||
|
|
- `TrainingExamRecord`:考试记录
|
|||
|
|
- `TrainingCertificate`:证书
|
|||
|
|
|
|||
|
|
**关键代码位置:**
|
|||
|
|
- Controller: `TrainingController`
|
|||
|
|
- Service: `TrainingServiceImpl`
|
|||
|
|
|
|||
|
|
**培训流程:**
|
|||
|
|
|
|||
|
|
1. **课程学习**
|
|||
|
|
- 陪伴员选择培训课程
|
|||
|
|
- 观看视频、阅读文档
|
|||
|
|
- 记录学习进度
|
|||
|
|
|
|||
|
|
2. **考试**
|
|||
|
|
- 完成课程后参加考试
|
|||
|
|
- 题型:单选、多选、判断
|
|||
|
|
- 及格分数:60分
|
|||
|
|
|
|||
|
|
3. **获得证书**
|
|||
|
|
- 考试通过后颁发证书
|
|||
|
|
- 证书包含:课程名称、成绩、颁发时间
|
|||
|
|
|
|||
|
|
4. **等级提升**
|
|||
|
|
- 完成指定培训课程
|
|||
|
|
- 考试成绩达标
|
|||
|
|
- 服务次数达标
|
|||
|
|
- 评分达标
|
|||
|
|
- 自动提升陪伴员等级
|
|||
|
|
|
|||
|
|
**培训课程类型:**
|
|||
|
|
- 基础培训:新人必修
|
|||
|
|
- 进阶培训:提升技能
|
|||
|
|
- 专项培训:特殊服务
|
|||
|
|
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 3.3 权限管理系统
|
|||
|
|
|
|||
|
|
**核心功能:** 管理用户角色、权限、操作日志
|
|||
|
|
|
|||
|
|
**涉及实体:**
|
|||
|
|
- `User`:用户(包含角色信息)
|
|||
|
|
- `Permission`:权限
|
|||
|
|
- `OperationLog`:操作日志
|
|||
|
|
|
|||
|
|
**关键代码位置:**
|
|||
|
|
- Controller: `PermissionController`
|
|||
|
|
- Service: `PermissionService`
|
|||
|
|
|
|||
|
|
**角色类型:**
|
|||
|
|
|
|||
|
|
1. **家长(user)**
|
|||
|
|
- 下单、支付
|
|||
|
|
- 查看订单
|
|||
|
|
- 评价服务
|
|||
|
|
- 查看成长记录
|
|||
|
|
|
|||
|
|
2. **陪伴员(teacher)**
|
|||
|
|
- 接单、拒单
|
|||
|
|
- 签到、签退
|
|||
|
|
- 提交反馈
|
|||
|
|
- 查看收益
|
|||
|
|
|
|||
|
|
3. **管理师(manager)**
|
|||
|
|
- 派单
|
|||
|
|
- 查看所有订单
|
|||
|
|
- 补充反馈
|
|||
|
|
- 处理投诉
|
|||
|
|
|
|||
|
|
4. **分销员(distributor)**
|
|||
|
|
- 推广邀请
|
|||
|
|
- 查看客户
|
|||
|
|
- 查看佣金
|
|||
|
|
- 申请提现
|
|||
|
|
|
|||
|
|
5. **管理员(admin)**
|
|||
|
|
- 系统配置
|
|||
|
|
- 用户管理
|
|||
|
|
- 数据统计
|
|||
|
|
- 权限管理
|
|||
|
|
|
|||
|
|
**权限控制:**
|
|||
|
|
- 基于角色的访问控制(RBAC)
|
|||
|
|
- API接口权限验证
|
|||
|
|
- 前端路由权限控制
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📊 四、数据模型
|
|||
|
|
|
|||
|
|
### 4.1 核心实体关系
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
User(用户)
|
|||
|
|
├─ 1:N → Order(订单)
|
|||
|
|
├─ 1:N → Student(学生)
|
|||
|
|
├─ 1:1 → Wallet(钱包)
|
|||
|
|
└─ 1:N → UserCoupon(用户优惠券)
|
|||
|
|
|
|||
|
|
Order(订单)
|
|||
|
|
├─ N:1 → User(家长)
|
|||
|
|
├─ N:1 → Student(学生)
|
|||
|
|
├─ N:1 → Teacher(陪伴员)
|
|||
|
|
├─ N:1 → Service(服务)
|
|||
|
|
├─ 1:N → CheckInRecord(签到记录)
|
|||
|
|
├─ 1:N → GrowthRecord(成长记录)
|
|||
|
|
├─ 1:1 → Review(评价)
|
|||
|
|
└─ 1:1 → DistributorOrder(分销订单)
|
|||
|
|
|
|||
|
|
Teacher(陪伴员)
|
|||
|
|
├─ 1:N → Order(订单)
|
|||
|
|
├─ 1:N → TeacherSalary(收益记录)
|
|||
|
|
└─ 1:1 → Wallet(钱包)
|
|||
|
|
|
|||
|
|
Distributor(分销员)
|
|||
|
|
├─ 1:N → DistributorCustomer(客户关系)
|
|||
|
|
└─ 1:N → DistributorOrder(分销订单)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 4.2 订单状态定义
|
|||
|
|
|
|||
|
|
**订单状态(status):**
|
|||
|
|
|
|||
|
|
| 状态值 | 状态名称 | 说明 |
|
|||
|
|
|--------|----------|------|
|
|||
|
|
| 0 | 待派单 | 已支付,等待管理师派单 |
|
|||
|
|
| 1 | 待接单 | 已派单,等待陪伴员接单 |
|
|||
|
|
| 2 | 待服务 | 已接单,等待签到开始服务 |
|
|||
|
|
| 3 | 服务中 | 已签到,正在服务 |
|
|||
|
|
| 4 | 已完成 | 已签退,服务完成 |
|
|||
|
|
| -1 | 已取消 | 用户取消或超时取消 |
|
|||
|
|
| -2 | 已退款 | 退款成功 |
|
|||
|
|
|
|||
|
|
**支付状态(payStatus):**
|
|||
|
|
|
|||
|
|
| 状态值 | 状态名称 | 说明 |
|
|||
|
|
|--------|----------|------|
|
|||
|
|
| 0 | 未支付 | 订单已创建,等待支付 |
|
|||
|
|
| 1 | 已支付 | 支付成功 |
|
|||
|
|
| 2 | 支付失败 | 支付失败 |
|
|||
|
|
| 3 | 已退款 | 已退款 |
|
|||
|
|
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🔄 五、状态流转规则
|
|||
|
|
|
|||
|
|
### 5.1 订单状态流转图
|
|||
|
|
|
|||
|
|
```mermaid
|
|||
|
|
graph LR
|
|||
|
|
A[0-待支付] -->|支付成功| B[0-待派单]
|
|||
|
|
A -->|取消订单| F[-1-已取消]
|
|||
|
|
B -->|管理师派单| C[1-待接单]
|
|||
|
|
C -->|陪伴员接单| D[2-待服务]
|
|||
|
|
C -->|陪伴员拒单| B
|
|||
|
|
C -->|取消/退款| F
|
|||
|
|
D -->|签到| E[3-服务中]
|
|||
|
|
D -->|取消/退款| F
|
|||
|
|
E -->|签退| G[4-已完成]
|
|||
|
|
E -->|退款| H[-2-已退款]
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 5.2 状态流转规则
|
|||
|
|
|
|||
|
|
**代码位置:** `OrderServiceImpl.isValidStatusTransition()`
|
|||
|
|
|
|||
|
|
**合法的状态流转:**
|
|||
|
|
|
|||
|
|
| 当前状态 | 允许流转到 | 触发条件 |
|
|||
|
|
|---------|-----------|---------|
|
|||
|
|
| 0-待支付 | 0-待派单 | 支付成功 |
|
|||
|
|
| 0-待支付 | -1-已取消 | 取消订单 |
|
|||
|
|
| 0-待派单 | 1-待接单 | 管理师派单 |
|
|||
|
|
| 1-待接单 | 2-待服务 | 陪伴员接单 |
|
|||
|
|
| 1-待接单 | 0-待派单 | 陪伴员拒单 |
|
|||
|
|
| 1-待接单 | -1-已取消 | 取消订单 |
|
|||
|
|
| 1-待接单 | -2-已退款 | 申请退款 |
|
|||
|
|
| 2-待服务 | 3-服务中 | 签到 |
|
|||
|
|
| 2-待服务 | -1-已取消 | 取消订单 |
|
|||
|
|
| 2-待服务 | -2-已退款 | 申请退款 |
|
|||
|
|
| 3-服务中 | 4-已完成 | 签退 |
|
|||
|
|
| 3-服务中 | -2-已退款 | 申请退款 |
|
|||
|
|
|
|||
|
|
**终态(不允许再流转):**
|
|||
|
|
- 4-已完成
|
|||
|
|
- -1-已取消
|
|||
|
|
- -2-已退款
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📱 六、前端页面结构
|
|||
|
|
|
|||
|
|
### 6.1 家长端(user-package)
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
pages/
|
|||
|
|
├── index/ # 首页
|
|||
|
|
├── order/ # 订单管理
|
|||
|
|
│ ├── list.vue # 订单列表
|
|||
|
|
│ ├── detail.vue # 订单详情
|
|||
|
|
│ └── create.vue # 创建订单
|
|||
|
|
├── service/ # 服务相关
|
|||
|
|
│ ├── list.vue # 服务列表
|
|||
|
|
│ └── detail.vue # 服务详情
|
|||
|
|
├── growth/ # 成长记录
|
|||
|
|
│ └── list.vue # 成长记录列表
|
|||
|
|
├── review/ # 评价
|
|||
|
|
│ └── create.vue # 提交评价
|
|||
|
|
└── wallet/ # 钱包
|
|||
|
|
├── index.vue # 钱包首页
|
|||
|
|
└── recharge.vue # 充值
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 6.2 陪伴员端(teacher-package)
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
pages/
|
|||
|
|
├── index/ # 首页
|
|||
|
|
├── order/ # 订单管理
|
|||
|
|
│ ├── list.vue # 订单列表(待接单/服务中/已完成)
|
|||
|
|
│ └── detail.vue # 订单详情
|
|||
|
|
├── checkin/ # 签到签退
|
|||
|
|
│ ├── checkin.vue # 签到
|
|||
|
|
│ └── checkout.vue # 签退
|
|||
|
|
├── feedback/ # 反馈
|
|||
|
|
│ └── create.vue # 提交反馈
|
|||
|
|
├── salary/ # 收益
|
|||
|
|
│ └── list.vue # 收益列表
|
|||
|
|
└── training/ # 培训
|
|||
|
|
├── list.vue # 培训课程列表
|
|||
|
|
└── exam.vue # 考试
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 6.3 管理师端(manager-package)
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
pages/
|
|||
|
|
├── index/ # 首页(待派单数量统计)
|
|||
|
|
├── work-order/ # 工单管理
|
|||
|
|
│ ├── list.vue # 工单列表
|
|||
|
|
│ └── detail.vue # 工单详情
|
|||
|
|
├── assign/ # 派单
|
|||
|
|
│ └── index.vue # 选择陪伴员派单
|
|||
|
|
└── statistics/ # 统计
|
|||
|
|
└── index.vue # 数据统计
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 6.4 分销员端(distributor-package)
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
pages/
|
|||
|
|
├── index/ # 首页
|
|||
|
|
├── customer/ # 客户管理
|
|||
|
|
│ └── list.vue # 客户列表
|
|||
|
|
├── order/ # 分销订单
|
|||
|
|
│ └── list.vue # 订单列表
|
|||
|
|
├── commission/ # 佣金
|
|||
|
|
│ └── list.vue # 佣金列表
|
|||
|
|
└── withdraw/ # 提现
|
|||
|
|
└── apply.vue # 申请提现
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🔔 七、通知系统
|
|||
|
|
|
|||
|
|
### 7.1 通知类型
|
|||
|
|
|
|||
|
|
**关键代码位置:** `NotificationService`
|
|||
|
|
|
|||
|
|
**通知场景:**
|
|||
|
|
|
|||
|
|
1. **订单相关**
|
|||
|
|
- 订单创建成功
|
|||
|
|
- 支付成功
|
|||
|
|
- 派单成功
|
|||
|
|
- 陪伴员接单
|
|||
|
|
- 陪伴员拒单
|
|||
|
|
- 签到通知
|
|||
|
|
- 服务完成
|
|||
|
|
- 订单取消
|
|||
|
|
- 退款成功
|
|||
|
|
|
|||
|
|
2. **评价相关**
|
|||
|
|
- 收到新评价
|
|||
|
|
- 评价被回复
|
|||
|
|
|
|||
|
|
3. **钱包相关**
|
|||
|
|
- 充值成功
|
|||
|
|
- 消费成功
|
|||
|
|
- 收益入账
|
|||
|
|
- 提现成功
|
|||
|
|
|
|||
|
|
4. **分销相关**
|
|||
|
|
- 新客户绑定
|
|||
|
|
- 佣金到账
|
|||
|
|
- 提现审核通过
|
|||
|
|
|
|||
|
|
### 7.2 通知方式
|
|||
|
|
|
|||
|
|
1. **站内消息**
|
|||
|
|
- 保存到 `notification` 表
|
|||
|
|
- 前端轮询或WebSocket推送
|
|||
|
|
|
|||
|
|
2. **微信模板消息**
|
|||
|
|
- 调用微信API发送
|
|||
|
|
|
|||
|
|
3. **短信通知**
|
|||
|
|
- 调用短信API发送
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📊 八、数据统计
|
|||
|
|
|
|||
|
|
### 8.1 管理师端统计
|
|||
|
|
|
|||
|
|
1. **订单统计**
|
|||
|
|
- 待派单数量
|
|||
|
|
- 服务中订单数量
|
|||
|
|
- 已完成订单数量
|
|||
|
|
- 今日订单数量
|
|||
|
|
|
|||
|
|
2. **陪伴员统计**
|
|||
|
|
- 在线陪伴员数量
|
|||
|
|
- 服务中陪伴员数量
|
|||
|
|
- 空闲陪伴员数量
|
|||
|
|
|
|||
|
|
3. **收入统计**
|
|||
|
|
- 今日收入
|
|||
|
|
- 本月收入
|
|||
|
|
- 总收入
|
|||
|
|
|
|||
|
|
### 8.2 陪伴员端统计
|
|||
|
|
|
|||
|
|
1. **服务统计**
|
|||
|
|
- 服务次数
|
|||
|
|
- 服务时长
|
|||
|
|
- 平均评分
|
|||
|
|
|
|||
|
|
2. **收益统计**
|
|||
|
|
- 今日收益
|
|||
|
|
- 本月收益
|
|||
|
|
- 总收益
|
|||
|
|
- 可提现金额
|
|||
|
|
|
|||
|
|
### 8.3 分销员端统计
|
|||
|
|
|
|||
|
|
1. **客户统计**
|
|||
|
|
- 客户总数
|
|||
|
|
- 本月新增客户
|
|||
|
|
|
|||
|
|
2. **佣金统计**
|
|||
|
|
- 待结算佣金
|
|||
|
|
- 可提现佣金
|
|||
|
|
- 已提现佣金
|
|||
|
|
- 总佣金
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🎯 九、关键业务规则
|
|||
|
|
|
|||
|
|
### 9.1 派单规则
|
|||
|
|
|
|||
|
|
1. **陪伴员筛选条件**
|
|||
|
|
- 状态:在线且空闲
|
|||
|
|
- 等级:满足服务要求
|
|||
|
|
- 距离:优先推荐距离近的
|
|||
|
|
- 评分:优先推荐评分高的
|
|||
|
|
|
|||
|
|
2. **派单限制**
|
|||
|
|
- 同一时间段不能重复派单
|
|||
|
|
- 陪伴员服务中不能接新单
|
|||
|
|
|
|||
|
|
### 9.2 收益分成规则
|
|||
|
|
|
|||
|
|
1. **陪伴员收益**
|
|||
|
|
- 分成比例:70%
|
|||
|
|
- 结算时机:订单完成后
|
|||
|
|
- 入账方式:自动入账到钱包
|
|||
|
|
|
|||
|
|
2. **平台收益**
|
|||
|
|
- 分成比例:30%
|
|||
|
|
|
|||
|
|
3. **分销佣金**
|
|||
|
|
- 佣金比例:10%-20%(根据等级)
|
|||
|
|
- 结算时机:订单完成后
|
|||
|
|
- 提现条件:满100元可提现
|
|||
|
|
|
|||
|
|
### 9.3 时卡扣减规则
|
|||
|
|
|
|||
|
|
1. **扣减时机**
|
|||
|
|
- 订单完成(签退)后自动扣减
|
|||
|
|
|
|||
|
|
2. **扣减规则**
|
|||
|
|
- 按实际服务时长扣减
|
|||
|
|
- 不足1小时按1小时计算
|
|||
|
|
|
|||
|
|
3. **余额不足**
|
|||
|
|
- 提示用户充值或购买套餐
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📝 十、总结
|
|||
|
|
|
|||
|
|
### 10.1 核心流程总结
|
|||
|
|
|
|||
|
|
**完整的订单生命周期:**
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
1. 家长创建订单(status=0,待支付)
|
|||
|
|
2. 家长支付订单(status=0,待派单,payStatus=1)
|
|||
|
|
3. 管理师派单(分配teacherId,status保持0)
|
|||
|
|
4. 陪伴员接单(status=2,待服务)
|
|||
|
|
5. 陪伴员签到(status=3,服务中)
|
|||
|
|
6. 陪伴员签退(status=4,已完成)
|
|||
|
|
7. 家长评价(reviewed=true)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 10.2 关键技术点
|
|||
|
|
|
|||
|
|
1. **状态机管理**
|
|||
|
|
- 严格的状态流转规则
|
|||
|
|
- 防止非法状态跳转
|
|||
|
|
|
|||
|
|
2. **事务管理**
|
|||
|
|
- 支付、扣减、收益结算使用事务
|
|||
|
|
- 保证数据一致性
|
|||
|
|
|
|||
|
|
3. **异步处理**
|
|||
|
|
- 通知发送异步处理
|
|||
|
|
- 不影响主流程
|
|||
|
|
|
|||
|
|
4. **分布式锁**
|
|||
|
|
- 钱包扣减使用乐观锁
|
|||
|
|
- 防止并发问题
|
|||
|
|
|
|||
|
|
### 10.3 扩展性设计
|
|||
|
|
|
|||
|
|
1. **支付方式扩展**
|
|||
|
|
- 支持多种支付方式
|
|||
|
|
- 易于添加新支付方式
|
|||
|
|
|
|||
|
|
2. **服务类型扩展**
|
|||
|
|
- 支持多种服务类型
|
|||
|
|
- 易于添加新服务
|
|||
|
|
|
|||
|
|
3. **角色权限扩展**
|
|||
|
|
- 基于RBAC的权限管理
|
|||
|
|
- 易于添加新角色
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**文档结束**
|
|||
|
|
|
|||
|
|
> 本文档详细描述了习正陪伴系统的完整业务流程,包括核心流程、支撑流程和管理流程。
|
|||
|
|
> 建议开发人员在开发新功能或修复问题时,先参考本文档理解业务逻辑。
|