---
html:
embed_local_images: false
embed_svg: true
offline: false
toc: true
print_background: false
export_on_save:
html: true
---
#### 技师端
##### 接单
**参数**: - user_id, order_id - user_id 通过 Auth::id() 获取 - order_id 通过路由获取
**涉及表和关键列**:
- 订单表:orders
- 字段:id, user_id, 核销码, status
- 订单编号字段:id
- 核销码字段:核销码
- 用户编号字段:user_id
- 订单状态字段:status
- 1: 待接单
- 2: 待服务
- 3: 服务中
- 4: 待评价
- 5: 已完成
- 6: 已取消
- 技师表:coach
- 字段:id, is_auth,status
- 技师编号字段:id
- 技师认证状态字段:is_auth
- 0: 未认证
- 1: 已认证
- 技师状态字段:status
- 0: 禁用
- 1: 开启
- 订单服务日志:order_service_log
- 字段:id, order_id, role,role_id,IMAGE_PATH,remark,service_status, status
- 订单编号字段:order_id
- 技师编号字段:coach_id
- 图片字段:IMAGE_PATH
- 服务状态字段:service_status
- 1: 下单
- 2: 支付
- 3: 接单
- 4: 出发
- 5: 到达
- 6: 服务
- 7: 结束
- 8: 撤离
- 日志状态字段:status
- 0: 禁用
- 1: 开启
**后台逻辑**:
1. 参数校验
- 查询用户编号的技师角色
- 查询订单编号
2. 验证订单
- 订单状态:待接单
- 订单技师:当前技师
3. 验证当前技师角色
- 认证状态:已认证
- 状态:开启
4. 创建订单服务日志
- 订单编号为当前订单编号
- 角色为技师角色
- 角色编号为当前技师编号
- 经纬度为当前技师经纬度
- 服务状态为 3: 接单
- 日志状态为 1: 开启
##### 出发
**后台逻辑**:
1. 参数校验
- 查询用户编号的技师角色
- 查询订单编号
2. 验证订单
- 订单状态:待服务
- 订单技师:当前技师
3. 验证当前技师角色
- 认证状态:已认证
- 状态:开启
4. 创建订单服务日志
- 订单编号为当前订单编号
- 角色为技师角色
- 角色编号为当前技师编号
- 经纬度为当前技师经纬度
- 服务状态为 3: 出发
- 日志状态为 1: 开启
##### 到达
**后台逻辑**:
1. 参数校验
- 查询用户编号的技师角色
- 查询订单编号
2. 验证订单
- 订单技师:当前技师
- 订单状态:待服务
3. 验证当前技师角色
- 认证状态:已认证
- 状态:开启
4. 创建订单服务日志
- 订单编号为当前订单编号
- 角色为技师角色
- 角色编号为当前技师编号
- 经纬度为当前技师经纬度
- JSON 格式记录图片
- 服务状态为 3: 到达
- 日志状态为 1: 开启
##### 服务
**参数**: - 用户编号, 订单编号 - 用户编号 通过 Auth::id() 获取 - 订单编号 通过路由获取
**后台逻辑**:
1. 参数校验
- 查询用户技师数据
- 查询订单
2. 验证订单
- 订单指派技师:当前技师
- 订单状态:待服务
3. 验证当前技师角色
- 认证状态:已认证
- 状态:开启
4. 创建订单服务日志
- 订单编号为当前订单编号
- 角色为技师角色
- 角色编号为当前技师编号
- 经纬度为当前技师经纬度
- 服务状态为 6: 服务
- 日志状态为 1: 开启
##### 撤离
1. **参数**:
- user_id, order_id
- user_id 通过 Auth::id() 获取
- order_id 通过路由获取
2. **后台逻辑**:
1. 参数校验
- 查询用户编号的技师数据
- 查询订单
2. 验证订单
- 订单技师:当前技师
- 订单状态:待评价或已完成
3. 验证当前技师角色
- 认证状态:已认证
- 状态:开启
4. 验证用户是否允许撤离
- 根据订单编号,查询订单服务日志
- 订单用户编号
- 服务状态为 8: 撤离
- 否则,提示技师无法撤离,需用户同意
5. 开启事务
- 创建订单服务日志
- 订单编号为当前订单编号
- 角色为技师角色
- 角色编号为当前技师编号
- 经纬度为当前技师经纬度
- 服务状态为 8: 撤离
- 日志状态为 1: 开启
- 进行 [分帐](#1-分帐)
6. 提交事务
##### 拒单
**参数**: - 用户编号, 订单编号 - 用户编号 通过 Auth::id() 获取 - 订单编号 通过路由获取
**后台逻辑**: 1. 参数校验 - 查询用户技师数据 2. 查询订单 - 匹配技师编号 - 匹配订单编号 - 订单状态为拒单 3. 创建订单历史数据 - 订单编号 - 角色为技师 - 角色编号为技师编号 - 历史状态为拒单
#### 用户端
##### 下单
**参数**: - 用户编号, 订单编号 - 用户编号 通过 Auth::id() 获取 - 订单编号 通过路由获取
**后台逻辑**: 1. 参数校验 2. 查询订单 - 匹配用户编号 - 匹配订单编号 - 订单状态为待支付 3. 创建订单历史数据 - 订单编号 - 角色为用户 - 角色编号为用户编号 - 历史状态为下单 - 如果订单类型为常规订单 - 指定技师
##### 指派
**参数**: - 用户编号, 订单编号 - 用户编号 通过 Auth::id() 获取 - 订单编号 通过路由获取
**后台逻辑**: 1. 参数校验 2. 查询订单 - 匹配用户编号 - 匹配订单编号 - 订单状态为待支付 3. 创建订单历史数据 - 订单编号 - 角色为用户 - 角色编号为用户编号 - 历史状态为指派 - 指定技师为订单指派技师
##### 支付
**参数**: - 用户编号, 订单编号 - 用户编号 通过 Auth::id() 获取 - 订单编号 通过路由获取
**后台逻辑**: 1. 参数校验 2. 查询订单 - 匹配用户编号 - 匹配订单编号 - 订单状态为待服务 3. 创建订单历史数据 - 订单编号 - 角色为用户 - 角色编号为用户编号 - 历史状态为支付 - 指定技师
##### 结束
1. **参数**:
- 用户编号, 订单编号
- 用户编号 通过 Auth::id() 获取
- 订单编号 通过路由获取
2. **后台逻辑**:
1. 参数校验
2. 查询订单
- 匹配用户编号
- 匹配订单编号
- 订单状态为服务中
3. 创建订单历史数据
- 订单编号
- 角色为用户
- 角色编号为用户编号
- 历史状态为结束
- 指定技师
##### 退款
**参数**: - 用户编号, 订单编号 - 用户编号 通过 Auth::id() 获取 - 订单编号 通过路由获取
**后台逻辑**: 1. 参数校验 2. 查询订单 - 匹配用户编号 - 匹配订单编号 - 订单状态为待服务或待接单 3. 创建订单历史数据 - 订单编号 - 角色为用户 - 角色编号为用户编号 - 历史状态为退款 - 指定技师
##### 取消
1. **参数**:
- user_id, order_id
- user_id 通过 Auth::id() 获取
- order_id 通过路由获取
2. **涉及表和关键列**:
- 订单表:orders
- 字段:id, user_id, 核销码, status
- 订单编号字段:id
- 核销码字段:核销码
- 用户编号字段:user_id
- 订单状态字段:status
- 1: 待接单
- 2: 待服务
- 3: 服务中
- 4: 待评价
- 5: 已完成
- 6: 已取消
3. **后台逻辑**:
1. 参数校验
2. 查询订单
- 匹配用户编号
- 匹配订单编号
- 订单状态为待服务
- 退还支付金额到用户钱包
- 记录钱包记录
- 退还余额支付金额
- 记录钱包记录
- 订单状态
- 已接单,扣除支付金额加余额支付金额减路费的 20%,不扣路费
- 已出发,扣除支付金额加余额支付金额减路费的 50%,扣路费
- 其他状态不允许取消
- 平台收入
- 记录平台收入记录
- 记录平台钱包记录
- 扣除金额小于余额支付金额,则从余额支付金额减掉扣除金额,剩下的退还
- 记录钱包退款记录
- 记录钱包交易记录
- 如果余额支付金额不够扣,剩下的金额从支付金额中扣除,并将支付金额剩余金额退还到用户钱包
- 记录钱包退款记录
- 记录钱包交易记录
- 修改订单状态为已取消
3. 创建订单取消记录
- 订单编号为当前订单编号
- 对象类型为用户
- 对象编号为当前用户编号
- 状态为取消
- 备注为用户取消订单