#### 用户端 ##### 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: 正常 **后台逻辑**: 1. 通过编号查订单,条件是: - 订单数据存在,并且状态为已出发 - 订单有指派技师,并且技师的用户编号等于参数中的用户编号 2. 通过用户编号查技师,条件是: - 技师数据存在,并且技师状态为正常 3. 通过以上数据,修改订单数据,要求: - 请自动填写相同名称的字段 - 订单状态为已到达 4. 发送异步抢单通知(比如对接极光推送) #### 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: 结束 **后台逻辑**: 1. 通过编号及用户编号查订单,条件是: - 订单数据存在,并且状态为服务中 - 订单有指派技师 2. 通过以上数据,修改订单数据,要求: - 订单状态为服务结束 - 订单服务结束时间 - 用户确认结束 3. 发送异步抢单通知(比如对接极光推送) #### 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: 服务结束 **后台逻辑**: 1. 通过编号及用户编号查订单,条件是: - 订单数据存在,并且状态为服务结束 - 订单有指派技师 2. 通过以上数据,修改订单数据,要求: - 订单用户确认离开 - 订单用户确认离开时间 3. 发送异步抢单通知(比如对接极光推送) #### 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 **后台逻辑**: 1. 通过编号查订单,条件是: - 订单数据存在,并且状态为服务结束 - 订单有指派技师 - 订单用户确认技师撤离为已确认 2. 通过以上数据,开启事务,修改订单数据,创建收益数据 - 修改订单数据,要求: - 订单状态为已撤离 - 订单撤离时间 - 创建收益数据,要求: - 收益用户为技师 - 收益订单为当前订单 - 收益类型为收益 - 收益金额为订单服务金额乘以百分之50 - 收益余额为当前技师用户金额 3. 发送异步抢单通知(比如对接极光推送)