常规订单.md 9.8 KB

用户端

1. 创建订单

参数:

- user_id, project_id, address_id, coach_id, pay_type, is_balance
- user_id 通过 Auth::id() 获取

涉及表和关键列:

  • 订单表:service_order

    • 必填字段:id,order_sn, user_id, user_name,mobile, address,real_address,address_lng,address_lat, adcode, project_id, project_name, project_sub_title,project_icon,service_price, coach_id, pay_type, type,status, created_at, updated_at

    • 订单类型字段: type

    • 0: 正常订单

    • 1: 抢单订单

    • 状态机字段:status

    • 0: 待抢单或待支付

    • 支付类型字段:pay_type

    • 0: 余额支付

    • 1: 微信支付

    • 2: 支付宝支付

    • 订单类型:type

    • 0:常规订单

    • 1:抢单订单

  • 用户表: member_user

    • 字段:balance, status
    • 状态字段:status
    • 0: 禁用
    • 1: 正常
  • 用户地址表: member_address

  • 项目表: service_project

    • 字段:id, status
    • 状态字段:status
    • 0: 禁用
    • 1: 正常
  • 技师表:coach_users

    • 字段:user_id, status
    • 状态字段:status
    • 0: 禁用
    • 1: 正常

后台逻辑:

  1. 根据用户编号和地址编号、技师编号查询详情数据,通过项目编号获取项目数据。
    • 用户数据存在,并且用户状态为正常
    • 地址数据存在
    • 项目数据存在,并且项目状态为正常
    • 技师数据存在,并且项目状态为正常
  2. 通过已上查询的数据,创建订单数据,并添加事务处理,要求:

    • 请自动填写相同名称的字段
    • 订单类型为常规订单
    • 如果使用余额支付
      • 用户余额足够支付项目金额,进行更新锁表处理
      • 则订单状态为已支付,并且扣除用户余额
      • 否则订单状态为未支付
    • 如果使用微信支付或支付宝支付
      • 订单状态为未支付
    • 指定技师
  3. 发送异步抢单通知(比如对接极光推送)

技师端

2. 接单

参数:

  • user_id, order_id
  • user_id 通过 Auth::id() 获取

涉及表和关键列:

  • 订单:service_order
    • 必填字段:id,status,coach_id
    • 状态字段:status
    • 0: 未支付
    • 1: 已支付
    • 2: 已接单
  • 技师:coach_users
    • 字段:user_id, status
    • 状态字段:status
    • 0: 禁用
    • 1: 正常

后台逻辑:

  1. 通过编号查订单,条件是:
    • 订单数据存在,并且状态为已支付
    • 订单有指派技师,并且技师的用户编号等于参数中的用户编号
    • 订单类型为常规订单
  2. 通过用户编号查技师,条件是:
    • 技师数据存在,并且技师状态为正常
  3. 通过以上数据,修改订单数据,要求:
    • 请自动填写相同名称的字段
    • 订单状态为已接单
  4. 发送异步抢单通知(比如对接极光推送)

3. 改变订单状态为已出发(技师端)

参数:

  • user_id, order_id
  • user_id 通过 Auth::id() 获取

涉及表和关键列:

  • 订单:service_order
    • 必填字段:id,status,coach_id
    • 状态字段:status
    • 0: 未支付
    • 1: 已支付
    • 2: 已接单
    • 3: 已出发
  • 技师:coach_users
    • 字段:user_id, status
    • 状态字段:status
    • 0: 禁用
    • 1: 正常

后台逻辑:

  1. 通过编号查订单,条件是:
    • 订单数据存在,并且状态为已接单
    • 订单有指派技师,并且技师的用户编号等于参数中的用户编号
  2. 通过用户编号查技师,条件是:
    • 技师数据存在,并且技师状态为正常
  3. 通过以上数据,修改订单数据,要求:
    • 请自动填写相同名称的字段
    • 订单状态为已出发
  4. 发送异步抢单通知(比如对接极光推送)

4. 改变订单状态为已到达(技师端)

参数:

  • user_id, order_id
  • user_id 通过 Auth::id() 获取 涉及表和关键列:
  • 订单:service_order
    • 必填字段:id,status,coach_id
    • 状态字段:status
    • 0: 未支付
    • 1: 已支付
    • 2: 已接单
    • 3: 已出发
    • 4: 已到达
  • 技师:coach_users
    • 字段:user_id, status
    • 状态字段:status
    • 0: 禁用
    • 1: 正常
      后台逻辑:
  • 通过编号查订单,条件是:
    • 订单数据存在,并且状态为已出发
    • 订单有指派技师,并且技师的用户编号等于参数中的用户编号
  • 通过用户编号查技师,条件是:
    • 技师数据存在,并且技师状态为正常
  • 通过以上数据,修改订单数据,要求:
    • 请自动填写相同名称的字段
    • 订单状态为已到达
  • 发送异步抢单通知(比如对接极光推送)

5. 订单状态改为服务中(技师端)

参数:

  • user_id, order_id
  • user_id 通过 Auth::id() 获取 涉及表和关键列:
  • 订单:service_order
    • 必填字段:id,status,coach_id,time_long
    • 状态字段:status
    • 0: 未支付
    • 1: 已支付
    • 2: 已接单
    • 3: 已出发
    • 4: 已到达
    • 5: 服务中
  • 技师:coach_users
    • 字段:user_id, status
    • 状态字段:status
    • 0: 禁用
    • 1: 正常

后台逻辑:

  1. 通过编号查订单,条件是:
    • 订单数据存在,并且状态为已到达
    • 订单有指派技师,并且技师的用户编号等于参数中的用户编号
  2. 通过用户编号查技师,条件是:
    • 技师数据存在,并且技师状态为正常
  3. 通过以上数据,修改订单数据,要求:
    • 请自动填写相同名称的字段
    • 订单状态为服务中
    • 订单服务开始时间
    • 根据服务时长计算订单服务结束时间
  4. 发送异步抢单通知(比如对接极光推送)

6. 订单改为服务结束(用户端结束订单)

参数:

  • user_id, order_id
  • user_id 通过 Auth::id() 获取 涉及表和关键列:
  • 订单:service_order
    • 必填字段:id, status, coach_id, user_end
    • 状态字段:status
    • 0: 未支付
    • 1: 已支付
    • 2: 已接单
    • 3: 已出发
    • 4: 已到达
    • 5: 服务中
    • 6: 服务结束
    • 状态字段:user_end
    • 0: 未结束
    • 1: 结束 后台逻辑:
  • 通过编号及用户编号查订单,条件是:
    • 订单数据存在,并且状态为服务中
    • 订单有指派技师
  • 通过以上数据,修改订单数据,要求:
    • 订单状态为服务结束
    • 订单服务结束时间
    • 用户确认结束
  • 发送异步抢单通知(比如对接极光推送)

7. 订单更改状态为技师离开(用户端确认技师离开)

参数:

  • user_id, order_id
  • user_id 通过 Auth::id() 获取 涉及表和关键列:
  • 订单:service_order
    • 必填字段:id,user_confirm_leave,user_confirm_leave_time
    • 用户确认技师撤离字段:user_confirm_leave
    • 0: 未确认
    • 1: 已确认
    • 状态字段:status
    • 0: 未支付
    • 1: 已支付
    • 2: 已接单
    • 3: 已出发
    • 4: 已到达
    • 5: 服务中
    • 6: 服务结束 后台逻辑:
  • 通过编号及用户编号查订单,条件是:
    • 订单数据存在,并且状态为服务结束
    • 订单有指派技师
  • 通过以上数据,修改订单数据,要求:
    • 订单用户确认离开
    • 订单用户确认离开时间
  • 发送异步抢单通知(比如对接极光推送)

8. 第二种:服务时间结束(后台自动服务结束)

参数:

  • order_id 涉及表和关键列:
  • 订单:service_order
    • 必填字段:id, end_time
    • 用户确认技师撤离字段:user_confirm_leave
    • 0: 未确认
    • 1: 已确认
    • 状态字段:status
    • 0: 未支付
    • 1: 已支付
    • 2: 已接单
    • 3: 已出发
    • 4: 已到达
    • 5: 服务中
    • 6: 服务结束
    • 7: 已撤离
    • 8: 已评价
    • 9: 已取消(退款中)
    • 10: 已退款

后台逻辑:

  1. 通过编号查订单,条件是:
    • 订单数据存在,并且状态为服务中
    • 订单有指派技师
  2. 通过订单服务结束时间,判断是否结束
    • 如果服务结束时间小于等于当前时间,则订单状态为服务结束
  3. 发送异步抢单通知(比如对接极光推送)

9. 技师撤离(技师端)

参数:

  • user_id, order_id
  • user_id 通过 Auth::id() 获取 涉及表和关键列:
  • 订单:service_order
    • 必填字段:id,status,coach_id, user_confirm_leave, leave_time, service_price
    • 状态字段:status
    • 0: 未支付
    • 1: 已支付
    • 2: 已接单
    • 3: 已出发
    • 4: 已到达
    • 5: 服务中
    • 6: 服务结束
    • 7: 已撤离
    • 用户确认技师撤离字段:user_confirm_leave
    • 0: 未确认
    • 1: 已确认
  • 收益:member_benefit
    • 必填字段��order_id, user_id, benefit, balance, type, created_at, updated_at
    • 类型字段:type
    • 1: 支付
    • 2: 退款
    • 3: 扣除
    • 4: 提现
    • 5: 返还
    • 6: 收益
    • 8: 赠送
    • 9: 路费
  • 用户:member_users
    • 必填字段:id, balance
    • 余额字段:balance 后台逻辑:
  • 通过编号查订单,条件是:
    • 订单数据存在,并且状态为服务结束
    • 订单有指派技师
    • 订单用户确认技师撤离为已确认
  • 通过以上数据,开启事务,修改订单数据,创建收益数据
    • 修改订单数据,要求:
      • 订单状态为已撤离
      • 订单撤离时间
    • 创建收益数据,要求:
      • 收益用户为技师
      • 收益订单为当前订单
      • 收益类型为收益
      • 收益金额为订单服务金额乘以百分之50
      • 收益余额为当前技师用户金额
  • 发送异步抢单通知(比如对接极光推送)