|
|
@@ -0,0 +1,223 @@
|
|
|
+# DAN测评服务闭环流程设计
|
|
|
+
|
|
|
+## 1. 概述
|
|
|
+本文档设计DAN测评订单的完整服务闭环流程,作为平台商品订单流程的平行体系。
|
|
|
+- **目标**:实现从预约到服务完成、用户评价、资金结算的全流程线上化管理
|
|
|
+- **范围**:测评服务+成长规划师组合预约流程
|
|
|
+- **使用场景**:
|
|
|
+ - 家长为孩子预约测评(+可选规划师服务)
|
|
|
+ - 测评机构+规划师提供服务
|
|
|
+ - 平台自动结算服务费用
|
|
|
+
|
|
|
+## 2. 现状分析
|
|
|
+### 2.1 现有流程
|
|
|
+```mermaid
|
|
|
+graph LR
|
|
|
+A[下单支付] --> B[预约时间/地点]
|
|
|
+B --> C[服务执行]
|
|
|
+C --> D[填写结果]
|
|
|
+```
|
|
|
+
|
|
|
+### 2.2 问题与缺口
|
|
|
+| 问题 | 影响 | 办法 |
|
|
|
+|------|------|------|
|
|
|
+| 服务完成状态不明确 | 服务方未确认完成,无法计费 | 增加"服务方确认完成"流程 |
|
|
|
+| 用户满意度无记录 | 无法评估服务质量 | 增加用户评分评价系统 |
|
|
|
+| 资金手动结算 | 体验差,延迟多 | 自动化结算流程 |
|
|
|
+
|
|
|
+## 3. 完整流程设计
|
|
|
+```mermaid
|
|
|
+graph TD
|
|
|
+A[下单支付] --> B[选择预约时间]
|
|
|
+B --> C[可选预约规划师]
|
|
|
+C --> D{规划师预约?}
|
|
|
+D -->|有规划师| E[等待双方确认]
|
|
|
+D -->|无规划师| F[等待测评师确认]
|
|
|
+E --> F
|
|
|
+F --> G[测评师填写完成]
|
|
|
+D -->|有规划师| H[规划师填写完成]
|
|
|
+G --> I[用户确认+评分]
|
|
|
+H --> I
|
|
|
+I --> J[自动结算]
|
|
|
+```
|
|
|
+
|
|
|
+## 4. 实体设计
|
|
|
+### 4.1 DanAssessmentExecution
|
|
|
+```sql
|
|
|
+CREATE TABLE `dan_assessment_executions` (
|
|
|
+ `id` bigint AUTO_INCREMENT PRIMARY KEY,
|
|
|
+
|
|
|
+ -- 基本关联
|
|
|
+ `assessment_execution_id` bigint NOT NULL COMMENT '执行记录ID',
|
|
|
+ `assessment_order_id` bigint NOT NULL COMMENT '订单ID',
|
|
|
+ `child_id` bigint NOT NULL COMMENT '孩子ID',
|
|
|
+ `family_id` bigint NOT NULL COMMENT '家庭ID',
|
|
|
+ `quota_id` bigint COMMENT '额度ID',
|
|
|
+
|
|
|
+ -- 测评师
|
|
|
+ `assessor_id` bigint NOT NULL COMMENT '测评师userId',
|
|
|
+ `assessor_status` enum('pending','completed','rejected') DEFAULT 'pending' COMMENT '测评师状态',
|
|
|
+ `assessor_completed_at` datetime COMMENT '测评师完成时间',
|
|
|
+ `assessor_notes` varchar(200) COMMENT '测评摘要/服务备注',
|
|
|
+
|
|
|
+ -- 成长规划师(可选)
|
|
|
+ `planner_id` bigint COMMENT '规划师userId',
|
|
|
+ `planner_status` enum('pending','completed','rejected') DEFAULT 'pending' COMMENT '规划师状态',
|
|
|
+ `planner_completed_at` datetime COMMENT '规划师完成时间',
|
|
|
+ `planner_notes` varchar(200) COMMENT '规划服务备注',
|
|
|
+
|
|
|
+ -- 用户确认
|
|
|
+ `user_confirmed` tinyint(1) DEFAULT 0 COMMENT '用户确认:0未确认,1已确认',
|
|
|
+ `user_confirmed_at` datetime COMMENT '用户确认时间',
|
|
|
+
|
|
|
+ `created_at` datetime DEFAULT CURRENT_TIMESTAMP,
|
|
|
+ `updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
|
+
|
|
|
+ KEY `idx_assessment_execution_id` (`assessment_execution_id`),
|
|
|
+ KEY `idx_assessment_order_id` (`assessment_order_id`),
|
|
|
+ KEY `idx_assessor_id` (`assessor_id`),
|
|
|
+ KEY `idx_planner_id` (`planner_id`)
|
|
|
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='DAN测评服务执行记录';
|
|
|
+```
|
|
|
+
|
|
|
+### 4.2 ServiceRating
|
|
|
+```sql
|
|
|
+CREATE TABLE `service_ratings` (
|
|
|
+ `id` bigint AUTO_INCREMENT PRIMARY KEY,
|
|
|
+
|
|
|
+ -- 基本关联
|
|
|
+ `execution_id` bigint NOT NULL COMMENT '执行记录ID',
|
|
|
+ `assessment_order_id` bigint NOT NULL COMMENT '订单ID',
|
|
|
+ `user_id` bigint NOT NULL COMMENT '评分用户ID',
|
|
|
+
|
|
|
+ -- 测评师评分
|
|
|
+ `assessor_id` bigint NOT NULL COMMENT '测评师userId',
|
|
|
+ `assessor_rating` tinyint DEFAULT 0 COMMENT '测评师评分 1-5',
|
|
|
+ `assessor_comment` varchar(500) COMMENT '评价内容',
|
|
|
+
|
|
|
+ -- 规划师评分(可选)
|
|
|
+ `planner_id` bigint COMMENT '规划师userId',
|
|
|
+ `planner_rating` tinyint COMMENT '规划师评分 1-5',
|
|
|
+ `planner_comment` varchar(500) COMMENT '评价内容',
|
|
|
+
|
|
|
+ `created_at` datetime DEFAULT CURRENT_TIMESTAMP,
|
|
|
+
|
|
|
+ UNIQUE KEY `uniq_execution_user` (`execution_id`, `user_id`)
|
|
|
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='服务评分记录';
|
|
|
+```
|
|
|
+
|
|
|
+### 4.3 ServiceSettlement
|
|
|
+```sql
|
|
|
+CREATE TABLE `service_settlements` (
|
|
|
+ `id` bigint AUTO_INCREMENT PRIMARY KEY,
|
|
|
+
|
|
|
+ -- 基本关联
|
|
|
+ `execution_id` bigint NOT NULL COMMENT '执行记录ID',
|
|
|
+ `assessment_order_id` bigint NOT NULL COMMENT '订单ID',
|
|
|
+ `provider_id` bigint NOT NULL COMMENT '服务提供方userId',
|
|
|
+ `provider_type` enum('assessor','planner') NOT NULL COMMENT '服务方类型',
|
|
|
+
|
|
|
+ `service_fee` bigint DEFAULT 0 COMMENT '服务费用(分)',
|
|
|
+ `commission_rate` int COMMENT '佣金比例(bps)',
|
|
|
+ `commission_amount` bigint DEFAULT 0 COMMENT '结算金额(分)',
|
|
|
+
|
|
|
+ `status` enum('pending','settled','failed') DEFAULT 'pending' COMMENT '结算状态',
|
|
|
+ `settled_at` datetime COMMENT '结算时间',
|
|
|
+ `transaction_id` varchar(100) COMMENT '转账交易ID',
|
|
|
+
|
|
|
+ `created_at` datetime DEFAULT CURRENT_TIMESTAMP,
|
|
|
+ `updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
|
+
|
|
|
+ KEY `idx_execution_id` (`execution_id`),
|
|
|
+ KEY `idx_provider_id` (`provider_id`),
|
|
|
+ KEY `idx_status` (`status`)
|
|
|
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='服务结算记录';
|
|
|
+```
|
|
|
+
|
|
|
+## 5. 运营配置
|
|
|
+| 配置项 | 类型 | 描述 | 默认值 |
|
|
|
+|---------|------|------|--------|
|
|
|
+| `dan_assessment_assessor_commission_rate` | int | 测评师佣金比例(bps) | 7000 |
|
|
|
+| `dan_assessment_planner_commission_rate` | int | 规划师佣金比例(bps) | 5000 |
|
|
|
+| `dan_assessment_auto_settle` | bool | 用户确认后自动结算 | true |
|
|
|
+| `dan_assessment_settlement_days` | int | 结算延迟天数 | 0 |
|
|
|
+
|
|
|
+## 6. API 接口设计
|
|
|
+### 6.1 服务提供方接口
|
|
|
+| 接口 | 方法 | 描述 | 参数 |
|
|
|
+|------|------|------|------|
|
|
|
+| `/api/assessment/execution/{id}/complete` | POST | 服务方填写完成 | `{ notes: string }` |
|
|
|
+| `/api/assessment/execution/my-list` | POST | 我的服务单列表 | `{ status: enum }` |
|
|
|
+
|
|
|
+### 6.2 用户接口
|
|
|
+| 接口 | 方法 | 描述 | 参数 |
|
|
|
+|------|------|------|------|
|
|
|
+| `/api/assessment/execution/{id}/confirm` | POST | 确认服务完成 | `{}` |
|
|
|
+| `/api/assessment/execution/{id}/rate` | POST | 评分 | `{ assessorRating, assessorComment, [plannerRating], [plannerComment] }` |
|
|
|
+
|
|
|
+### 6.3 管理端接口
|
|
|
+| 接口 | 方法 | 描述 | 参数 |
|
|
|
+|------|------|------|------|
|
|
|
+| `/api/admin/assessment/execution/list` | POST | 执行记录列表 | `{ dateRange, status }` |
|
|
|
+| `/api/admin/assessment/execution/{id}/settle` | POST | 手动结算 | `{}` |
|
|
|
+
|
|
|
+## 7. 状态机设计
|
|
|
+```mermaid
|
|
|
+stateDiagram
|
|
|
+[*] --> pending: 下单+预约
|
|
|
+pending --> confirmed: 测评师确认
|
|
|
+confirmed --> planner_confirmed: 规划师确认(如有)
|
|
|
+confirmed --> user_rated: 仅测评师
|
|
|
+planner_confirmed --> user_rated
|
|
|
+user_rated --> auto_settled: 自动结算
|
|
|
+pending --> rejected: 服务方拒绝
|
|
|
+```
|
|
|
+
|
|
|
+## 8. 操作界面需求
|
|
|
+### 8.1 小程序端(用户)
|
|
|
+- **订单详情页**:服务完成进度展示、确认按钮
|
|
|
+- **评分入口**:测评结果查看后弹窗评分,或消息中心跳转评分
|
|
|
+- **评分界面**:双评分(测评师+规划师)+双评价
|
|
|
+
|
|
|
+### 8.2 小程序端(服务方)
|
|
|
+- **服务消息中心**:待办服务提醒
|
|
|
+- **服务完成**:备注说明+确认完成
|
|
|
+
|
|
|
+### 8.3 管理后台
|
|
|
+- **执行记录查询**:多维度过滤
|
|
|
+- **结算管理**:手动结算、异常处理
|
|
|
+
|
|
|
+## 9. 结算规则
|
|
|
+1. **结算金额计算**
|
|
|
+```
|
|
|
+结算金额 = 历史服务费用 × (佣金比例 / 10000)
|
|
|
+```
|
|
|
+
|
|
|
+2. **自动结算触发**
|
|
|
+- 条件1:`ServiceExecution.user_confirmed = 1`
|
|
|
+- 条件2:`SysConfig.dan_assessment_auto_settle = true`
|
|
|
+- 延迟:`N = SysConfig.dan_assessment_settlement_days` 天后
|
|
|
+
|
|
|
+## 10. 安全考虑
|
|
|
+| 风险项 | 应对措施 |
|
|
|
+|--------|----------|
|
|
|
+| 服务方虚假完成 | 二次确认(短信/人工) |
|
|
|
+| 用户误评价 | 评价前确认提示 |
|
|
|
+| 结算异常 | 短信通知管理员 |
|
|
|
+
|
|
|
+## 11. 实施计划
|
|
|
+| 阶段 | 工作内容 | 人天 |
|
|
|
+|------|---------|------|
|
|
|
+| 1 | 数据库设计+迁移 | 1 |
|
|
|
+| 2 | 后端服务层开发 | 3 |
|
|
|
+| 3 | API层开发+测试 | 2 |
|
|
|
+| 4 | 小程序端界面 | 2 |
|
|
|
+| 5 | 管理后台界面 | 1 |
|
|
|
+| 6 | 整体测试+验证 | 2 |
|
|
|
+
|
|
|
+## 12. 兼容性
|
|
|
+- **与现有流程**:扩展但不重构(新流程平行运行)
|
|
|
+- **与额度系统**:关联但独立(不影响现有额度消耗逻辑)
|
|
|
+- **与佣金系统**:复用结算逻辑(新增service类型)
|
|
|
+
|
|
|
+> 下一步:基于本设计方案,启动开发工作。需求细节确认后,分阶段实现。
|