本文档设计DAN测评订单的完整服务闭环流程,作为平台商品订单流程的平行体系。
graph LR
A[下单支付] --> B[预约时间/地点]
B --> C[服务执行]
C --> D[填写结果]
| 问题 | 影响 | 办法 |
|---|---|---|
| 服务完成状态不明确 | 服务方未确认完成,无法计费 | 增加"服务方确认完成"流程 |
| 用户满意度无记录 | 无法评估服务质量 | 增加用户评分评价系统 |
| 资金手动结算 | 体验差,延迟多 | 自动化结算流程 |
graph TD
A[下单支付] --> B[选择预约时间]
B --> C[可选预约规划师]
C --> D{规划师预约?}
D -->|有规划师| E[等待双方确认]
D -->|无规划师| F[等待测评师确认]
E --> F
F --> G[测评师填写完成]
D -->|有规划师| H[规划师填写完成]
G --> I[用户确认+评分]
H --> I
I --> J[自动结算]
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测评服务执行记录';
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='服务评分记录';
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='服务结算记录';
| 配置项 | 类型 | 描述 | 默认值 |
|---|---|---|---|
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 |
| 接口 | 方法 | 描述 | 参数 |
|---|---|---|---|
/api/assessment/execution/{id}/complete |
POST | 服务方填写完成 | { notes: string } |
/api/assessment/execution/my-list |
POST | 我的服务单列表 | { status: enum } |
| 接口 | 方法 | 描述 | 参数 |
|---|---|---|---|
/api/assessment/execution/{id}/confirm |
POST | 确认服务完成 | {} |
/api/assessment/execution/{id}/rate |
POST | 评分 | { assessorRating, assessorComment, [plannerRating], [plannerComment] } |
| 接口 | 方法 | 描述 | 参数 |
|---|---|---|---|
/api/admin/assessment/execution/list |
POST | 执行记录列表 | { dateRange, status } |
/api/admin/assessment/execution/{id}/settle |
POST | 手动结算 | {} |
stateDiagram
[*] --> pending: 下单+预约
pending --> confirmed: 测评师确认
confirmed --> planner_confirmed: 规划师确认(如有)
confirmed --> user_rated: 仅测评师
planner_confirmed --> user_rated
user_rated --> auto_settled: 自动结算
pending --> rejected: 服务方拒绝
结算金额计算
结算金额 = 历史服务费用 × (佣金比例 / 10000)
自动结算触发
条件1:ServiceExecution.user_confirmed = 1
条件2:SysConfig.dan_assessment_auto_settle = true
延迟:N = SysConfig.dan_assessment_settlement_days 天后
| 风险项 | 应对措施 |
|---|---|
| 服务方虚假完成 | 二次确认(短信/人工) |
| 用户误评价 | 评价前确认提示 |
| 结算异常 | 短信通知管理员 |
| 阶段 | 工作内容 | 人天 |
|---|---|---|
| 1 | 数据库设计+迁移 | 1 |
| 2 | 后端服务层开发 | 3 |
| 3 | API层开发+测试 | 2 |
| 4 | 小程序端界面 | 2 |
| 5 | 管理后台界面 | 1 |
| 6 | 整体测试+验证 | 2 |
下一步:基于本设计方案,启动开发工作。需求细节确认后,分阶段实现。