#### 公共接口 ##### 获取租户配置 **参数**: - 租户编号 **后台逻辑**: - 根据租户编号查询租户配置 - 返回租户配置 ##### 获取技师配置 **参数**: - 技师编号 **后台逻辑**: - 根据技师编号查询技师配置 - 返回技师配置 ##### 计算路费金额 **参数 1**: 技师编号,租户编号,服务路程 **参数 2**: 技师编号,用户经纬度,服务路程 **后台逻辑**: - 如果路由不存在租户编号 - 根据用户经纬度查询租户 - 根据技师编号查询技师配置 - 技师是否收取路费 - 如果收取 - 根据租户编号查询租户配置 - 服务路程小于等于租户配置的最小路程 - 单程路费金额=租户配置的最小路程金额 - 服务路程大于租户配置的最小路程 - 路程单位为公里 - 超出路程=服务路程减租户配置的最小路程 - 单程路费金额=租户配置的最小路费金额 加 (超出路程 乘 租户配置的每公里路程单价) - 如果技师配置为单程路费 - 路费金额=单程路费金额 - 如果技师配置为往返路费 - 路费金额=单程路费金额\*2 - 不收取 - 路费金额=0 - 返回路费金额 #### 后台接口 ##### 支付订单回调 **参数**: - 外部交易号 **后台逻辑**: 1. 参数校验 - 根据外部交易号,查询订单 - 如果订单支付类型为微信支付 - 根据外部交易号,查询微信支付统一下单接口 - 如果支付成功 - 根据外部交易号查询订单 - 订单是否存在 - 订单用户编号是否匹配 - 订单状态为未支付 2. 事务处理 - 修改订单状态为已支付 - 如果订单余额抵扣大于 0 - 根据订单的角色编号查询用户钱包 - 创建钱包明细 - 钱包编号 - 钱包明细类型为支付 - 钱包明细金额为订单余额抵扣金额 - 余额为钱包余额 - 冻结金额为钱包冻结金额 - 状态为已通过(已支付) - 用户钱包数据开启更新锁表 - 扣除用户钱包余额 - [创建订单历史:支付](#订单历史-支付) 3. 发送异步抢单通知(比如对接极光推送) ##### 开始服务 **参数**: - 订单编号, 核销码 - 订单编号 通过路由获取 - 核销码 通过路由获取 **后台逻辑**: 1. 参数校验 - 如果订单编号存在 - 如果订单编号不为空,根据订单编号查询订单 - 订单状态为待服务 - 否则, 根据核销码查询订单 - 订单状态为待服务 - 根据订单接单技师查询用户技师数据 - 技师状态为正常 - 技师认证状态为已认证 2. 事务处理 - 修改订单状态为服务中 - [创建订单历史:服务(扫码)](#四-订单历史) 3. 发送异步抢单通知(比如对接极光推送) #### 用户端接口 ##### 获取租户 **参数**: - 区域编号 **后台逻辑**: 1. 根据区域数据编码查询租户信息 - 如果租户信息不存在 - 则依次按照区域编码按市、省、全国逐步查询,直至查找到租户信息 - 返回租户信息 ##### 获取项目列表-租户项目 **参数**: - 项目分类,租户编号 **后台逻辑**: - 根据项目分类和租户编号查询项目列表 - 返回项目列表 ##### 获取项目详情-租户项目 **参数**: - 项目编号,租户编号 **后台逻辑**: 1. 参数校验 - 根据项目编号查询项目 - 项目存在 - 项目状态为正常 - 根据租户编号查询租户 - 租户存在 - 根据租户信息及项目编号查询租户项目数据 - 项目状态为正常 2. 返回租户项目详情 ##### 计算订单金额 **参数**: - 用户编号, 地址编号, 技师编号, 项目编号,租户编号, 余额抵扣 - 用户编号 通过 Auth::id() 获取 - 余额抵扣 - 0: 不使用 - 1: 使用 **后台逻辑**: 1. 参数校验 - 根据用户编号查询用户 - 用户状态为正常 - 根据地址编号查询地址 - 用户编号 - 地址存在 - 根据技师编号查询技师 - 技师状态为正常 - 技师认证状态为已认证 2. 计算金额 - 订单金额=项目金额+路费金额+打赏金额-优惠卷金额 - 项目金额=[项目详情](#项目详情)的项目金额 - 路费金额=[路费金额](#计算路费金额) - 如果存在优惠卷编码,则根据优惠卷编号查询优惠卷 - 优惠卷状态为正常 - 优惠金额 = 优惠卷金额 - 否则优惠金额 = 0 - 如果路由存在参数订单编号 - 打赏金额=订单打赏金额 - 否则打赏金额 = 0 - 如果使用余额抵扣 - 根据用户编号查询用户钱包 - 用户钱包余额大于等于订单金额 - 余额抵扣金额=订单金额 - 实付金额=0 - 否则 - 余额抵扣金额=用户钱包余额 - 实付金额=订单金额-余额抵扣金额 - 否则 - 余额抵扣金额=0 - 实付金额=订单金额 - 返回 - 订单金额 - 余额抵扣金额 - 实付金额 - 优惠卷金额 - 打赏金额 - 项目金额 - 路费金额 ##### 创建订单 1. **参数**: - 用户编号, 项目编号, 地址编号, 技师编号,是否余额抵扣,订单来源 - 用户编号 通过 Auth::id() 获取 - 是否余额抵扣 - false: 不使用 - true: 使用 - 订单编号 2. **涉及表和关键列**: - 订单表:orde - 订单类型字段 - normal: 正常订单 - add_time: 加钟订单 - 状态字段 - wait_pay:待支付 - wait_receive:待接单 - service:待服务 - service_ing:服务中 - service_end:服务结束 - complete:完成 - cancel:取消 - 支付类型字段 - balance:余额支付 - wechat:微信支付 - alipay:支付宝支付 - 订单来源字段 - platform:平台 - shop:店铺 - 路费金额字段:traffic_amount - 用户表:member_users - 状态字段:state - disable:禁用 - enable:开启 - 用户地址表:member_address - 项目表:project - 状态字段 - disable:禁用 - enable:开启 - 技师表:coach_users - 状态字段 - disable:禁用 - enable:开启 - 技师信息认证表:coach_info_records - 认证状态字段 - wait:待认证 - pass:已认证 - reject:已拒绝 - 技师资质认证表:coach_qual_records - 认证状态字段 - wait:待认证 - pass:已认证 - reject:已拒绝 - 技师实名认证表:coach_real_auth_records - 认证状态字段 - wait:待认证 - pass:已认证 - reject:已拒绝 **后台逻辑**: 1. 参数校验 - 根据用户编号查询用户 - 用户状态为开启 - 根据地址编号查询地址 - 用户地址存在 - 如果订单类型为正常订单 - 根据技师编号查询技师 - 技师状态为开启 - 技师信息认证状态为已认证 - 技师资质认证状态为已认证 - 技师实名认证状态为已认证 - 根据项目编号查询项目 - 项目存在 - 项目状态为开启 2. 事务处理 - 如果存在订单编号 - 新订单类型设为加钟订单 - 否则 - 新订单类型为正常订单 - 创建新订单数据 - 如果订单类型为正常订单 - 指定技师(coach_id) - 订单状态为待支付 - 如果订单来源为平台 - 订单来源为平台 - 订单金额=[计算订单金额](#计算订单金额):订单金额 - 余额抵扣金额=[计算订单金额](#计算订单金额):余额抵扣金额 - 实付金额=[计算订单金额](#计算订单金额):实付金额 - 优惠卷金额=[计算订单金额](#计算订单金额):优惠卷金额 - 打赏金额=[计算订单金额](#计算订单金额):打赏金额 - 项目金额=[计算订单金额](#计算订单金额):项目金额 - 如果新订单类型为加钟 - 路费金额=0 - 如果新订单类型为正常订单 - 路费金额=[计算路费金额](#计算路费金额) - 如果使用余额抵扣,并且实付金额为 0 - 订单支付方式为余额支付 - 如果新订单类型为加钟订单 - [创建订单历史数据:加钟](#订单历史-加钟) - 如果新订单类型为常规订单 - [创建订单历史数据:下单](#订单历史-下单) - 如果订单支付方式为余额支付 - 更改订单状态为已支付 - [创建订单历史数据:支付](#订单历史-支付) - 存入技师排班数据 - 返回订单编号 - 订单经度、纬度、定位地址、详细地址、行政区划代码来自用户地址 - 从用户钱包总余额中扣除余额抵扣金额 - 从用户钱包可用余额中扣除余额抵扣金额 - 保存用户钱包 - 否则 - [支付订单(配置)](<#支付订单(配置)>) 3. 发送异步抢单通知(比如对接极光推送) ##### 获取项目列表-加钟 **参数**: - 项目编号 **后台逻辑**: - [获取项目列表](#获取项目列表-租户项目) - 项目分类为加钟 - 返回项目列表 ##### 加钟 **参数**: - 用户编号, 订单编号 - 用户编号 通过 Auth::id() 获取 - 订单编号 通过路由获取 **后台逻辑**: - 根据订单编号查询订单 - [创建订单](#创建订单) ##### 修改订单 **参数**: - 用户编号, 订单编号, 技师编号 - 用户编号 通过 Auth::id() 获取 **后台逻辑**: ##### 指定技师(修改订单) **参数**: - 用户编号, 订单编号, 技师编号 - 用户编号 通过 Auth::id() 获取 **后台逻辑**: 1. 参数校验 - 查询用户数据 - 用户编号 - 用户状态为正常 - 查询订单数据 - 用户编号 - 订单编号 - 订单状态为待抢单或待支付或已拒绝 - 查询技师数据 - 技师编号 - 技师状态为正常 - 技师认证状态为已认证 - 查询技师排班数据 - 技师编号 - 排班日期为订单服务日期 - 排班状态为空闲 2. 事务处理 - 修改订单数据 - 订单技师为当前技师编号 - 订单状态为未支付 - 订单金额=[计算订单金额](#计算订单金额):订单金额 - 余额抵扣金额=[计算订单金额](#计算订单金额):余额抵扣金额 - 实付金额=[计算订单金额](#计算订单金额):实付金额 - 优惠卷金额=[计算订单金额](#计算订单金额):优惠卷金额 - 打赏金额=[计算订单金额](#计算订单金额):打赏金额 - 项目金额=[计算订单金额](#计算订单金额):项目金额 - 路费金额=[计算订单金额](#计算订单金额):路费金额 - 如果使用余额抵扣,并且实付金额为 0 - 订单支付方式为余额支付 - 如果订单支付方式为余额支付 - 更改订单状态为已支付 - [创建订单历史数据:支付](#订单历史-支付) - 否则 - [支付订单(配置)](<#支付订单(配置)>) - 订单状态为已支付 - 订单状态为已接单 - [创建订单历史数据:指定技师](./模型/订单记录.md#指派技师) - [创建订单历史数据:技师接单](./模型/订单记录.md#接单) - 备注为抢单成功 - [抢单池指定技师](./模型/抢单池.md#选择技师) - 修改技师排班数据 - 技师编号 - 排班日期为订单服务日期 - 排班状态改为忙碌 3. 发送异步抢单通知(比如对接极光推送) ##### 获取支付配置 **参数**: - 用户编号, 订单编号 - 用户编号 通过 Auth::id() 获取 **后台逻辑**: 1. 参数校验 - 根据用户编号查询用户 - 用户状态是否开启 - 根据订单编号查询订单 - 订单是否存在 - 订单用户编号是否匹配 - 订单状态为未支付 2. 生成微信 JSAPI 支付配置 - 外部交易号 - 支付配置 3. 修改订单外部交易号为微信外部交易号 4. 发送异步抢单通知(比如对接极光推送) 5. 返回微信 JSAPI 支付配置 ##### 获取订单列表 **参数**: - 用户编号 通过 Auth::id() 获取 **后台逻辑**: - 根据用户编号查询订单列表 - 返回订单列表 ##### 获取订单详情 **参数**: - 用户编号 通过 Auth::id() 获取 - 订单编号 **后台逻辑**: - 根据用户编号、订单编号查询订单详情 - 返回订单详情 ##### 订单退款 **参数**: - 用户编号 通过 Auth::id() 获取 - 订单编号 通过路由获取 **涉及表和关键列**: - 订单表 - 字段:编号, 用户编号, 状态 - 状态 - 待支付 - 待服务 - 待评价 - 已完成 - 已取消 - 订单历史记录表 - 字段:历史记录编号, 订单编号, 角色, 角色编号, 状态 - 角色 - 用户 - 技师 - 代理 - 状态 - 下单 - 接单 - 出发 - 到达 - 开始 - 结束 - 撤离 - 取消(退款) **后台逻辑**: 1. 查询订单 - 订单编号 - 订单状态为待服务 - 用户编号 2. 更新数据 - 开启事务 - 更新订单 - 锁定数据 - 状态为已退款 - [添加订单退款记录](./模型/订单记录.md#退款) - [钱包-退款](./钱包.md#退款) - 提交事务 ##### 订单初始化-前端初始化 **参数**: - 用户编号 通过 Auth::id() 获取 - 技师编号 通过路由获取 - 区域编号 通过路由获取 - 项目编号 通过路由获取 **后台逻辑**: - 根据用户编号查询钱包数据 - 根据用户编号查询用户默认地址数据 - 如果存在 - 区域编号:默认地址区域编码 - 根据技师编号查询技师数据 - 根据技师编号查询技师排班数据 - 根据用户编号查询用户优惠卷数据 - [获取租户](#获取租户) - [租户项目详情](#获取项目详情-租户项目) - [计算订单金额](#计算订单金额) - 返回钱包数据、技师数据、项目详情、地址数据、排班数据、订单金额、优惠卷数据 ##### 结束订单 **参数**: - 用户编号 通过 Auth::id() 获取 - 订单编号 通过路由获取 **后台逻辑**: - 根据用户编号查询订单列表 - [添加订单结束记录](./模型/订单记录.md#结束) - 修改订单状态为服务结束 ##### 确认技师离开 **参数**: - 用户编号 通过 Auth::id() 获取 - 订单编号 通过路由获取 **后台逻辑**: - 根据用户编号查询订单列表 - 订单状态为服务结束 - 修改订单状态为撤离 ##### 用户取消订单 **参数**: - 用户编号 通过 Auth::id() 获取 - 订单编号 通过路由获取 **后台逻辑**: - 根据用户编号查询订单列表 - [添加订单取消记录](./模型/订单记录.md#取消) - 修改订单状态为已取消 #### 技师端接口 ##### 获取订单列表(抢单) **参数**: - 用户编号 通过 Auth::id() 获取 **后台逻辑**: 1. 参数校验 - 根据用户编号查询用户技师数据 - 技师状态为正常 - 技师认证状态为已认证 2. [获取技师配置](#获取技师配置) - 接单范围 3. 查询技师定位数据 4. 查询抢单类型订单列表 - 订单状态为待抢单 - 订单地区编码与技师定位地区编码匹配 - 订单经纬度与技师定位经纬度在接单范围内 - 抢单池中是否存在订单编号、技师编号的记录 - 存在,记录抢单状态 - 不存在,记录抢单状态为 0 5. 返回订单列表 ##### 抢单 **参数**: - 用户编号, 订单编号 - 用户编号 通过 Auth::id() 获取 - 订单编号 通过路由获取 **后台逻辑**: 1. 参数校验 - 根据用户编号查询用户技师数据 - 技师状态为正常 - 技师认证状态为已认证 2. 事务处理 - 添加抢单池数据 - 订单编号 - 技师编号 - 状态为抢单中 3. 发送异步抢单通知(比如对接极光推送) ##### 接单 **参数**: - 用户编号, 订单编号 - 用户编号 通过 Auth::id() 获取 - 订单编号 通过路由获取 **后台逻辑**: 1. 参数校验 - 根据用户编号查询用户技师数据 - 技师状态为正常 - 技师认证状态为已认证 2. 事务处理 - 修改订单状态为待服务 - [创建订单记录:接单](./模型/订单记录.md#接单) 3. 发送异步抢单通知(比如对接极光推送) ##### 出发 **参数**: - 用户编号, 订单编号 - 用户编号 通过 Auth::id() 获取 - 订单编号 通过路由获取 **后台逻辑**: 1. 参数校验 - 根据用户编号查询用户技师数据 - 技师状态为正常 - 技师认证状态为已认证 2. 事务处理 - [创建订单历史:出发](#四-订单历史) 3. 发送异步抢单通知(比如对接极光推送) ##### 到达 **参数**: - 用户编号, 订单编号 - 用户编号 通过 Auth::id() 获取 - 订单编号 通过路由获取 **后台逻辑**: 1. 参数校验 - 根据用户编号查询用户技师数据 - 技师状态为正常 - 技师认证状态为已认证 2. 事务处理 - [创建订单历史:到达](#四-订单历史) 3. 发送异步抢单通知(比如对接极光推送) ##### 撤离 **参数**: - 用户编号, 订单编号 - 用户编号 通过 Auth::id() 获取 - 订单编号 通过路由获取 **后台逻辑**: 1. 参数校验 - 根据用户编号查询用户技师数据 - 技师状态为正常 - 技师认证状态为已认证 2. 事务处理 - [创建订单历史:撤离](#四-订单历史) 3. 发送异步抢单通知(比如对接极光推送) ##### 订单列表 **参数**: - 用户编号 通过 Auth::id() 获取 - pageSize 每页大小 - page 页码 **后台逻辑**: - 根据用户编号查询技师 - 根据页面大小、页码查询技师订单列表 - 返回订单分页列表 ##### 拒绝接单 **参数**: - 用户编号, 订单编号 - 用户编号 通过 Auth::id() 获取 - 订单编号 通过路由获取 **后台逻辑**: 1. 参数校验 - 根据用户编号查询用户技师数据 - 技师状态为正常 - 技师认证状态为已认证 2. 事务处理 - 修改订单状态为拒单 - [创建订单记录:拒单](./模型/订单记录.md#拒单) 3. 发送异步抢单通知(比如对接极光推送)