订单.md 19 KB

公共接口

获取租户配置

参数:

  • 租户编号

后台逻辑:

  • 根据租户编号查询租户配置
  • 返回租户配置
获取技师配置

参数:

  • 技师编号 后台逻辑:
  • 根据技师编号查询技师配置
  • 返回技师配置
计算路费金额

参数 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: 使用
  • 订单编号
  1. 涉及表和关键列:
  • 订单表: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)
      • 订单状态为待支付
      • 如果订单来源为平台

    • 如果新订单类型为加钟订单

    • 如果新订单类型为常规订单

    • 如果订单支付方式为余额支付

    • 订单经度、纬度、定位地址、详细地址、行政区划代码来自用户地址

    • 从用户钱包总余额中扣除余额抵扣金额

    • 从用户钱包可用余额中扣除余额抵扣金额

    • 保存用户钱包

    • 否则

  3. 发送异步抢单通知(比如对接极光推送)

获取项目列表-加钟

参数:

  • 项目编号

后台逻辑:

加钟

参数:

  • 用户编号, 订单编号
  • 用户编号 通过 Auth::id() 获取
  • 订单编号 通过路由获取

后台逻辑:

修改订单

参数:

  • 用户编号, 订单编号, 技师编号
  • 用户编号 通过 Auth::id() 获取

后台逻辑:

指定技师(修改订单)

参数:

  • 用户编号, 订单编号, 技师编号
  • 用户编号 通过 Auth::id() 获取

后台逻辑:

  1. 参数校验
    • 查询用户数据
      • 用户编号
      • 用户状态为正常
    • 查询订单数据
      • 用户编号
      • 订单编号
      • 订单状态为待抢单或待支付或已拒绝
    • 查询技师数据
      • 技师编号
      • 技师状态为正常
      • 技师认证状态为已认证
    • 查询技师排班数据
      • 技师编号
      • 排班日期为订单服务日期
      • 排班状态为空闲
  2. 事务处理
  1. 发送异步抢单通知(比如对接极光推送)
获取支付配置

参数:

  • 用户编号, 订单编号
  • 用户编号 通过 Auth::id() 获取

后台逻辑:

  1. 参数校验
    • 根据用户编号查询用户
      • 用户状态是否开启
    • 根据订单编号查询订单
      • 订单是否存在
      • 订单用户编号是否匹配
      • 订单状态为未支付
  2. 生成微信 JSAPI 支付配置
    • 外部交易号
    • 支付配置
  3. 修改订单外部交易号为微信外部交易号
  4. 发送异步抢单通知(比如对接极光推送)
  5. 返回微信 JSAPI 支付配置
获取订单列表

参数: - 用户编号 通过 Auth::id() 获取

后台逻辑: - 根据用户编号查询订单列表 - 返回订单列表

获取订单详情

参数: - 用户编号 通过 Auth::id() 获取 - 订单编号

后台逻辑: - 根据用户编号、订单编号查询订单详情 - 返回订单详情

订单退款

参数: - 用户编号 通过 Auth::id() 获取 - 订单编号 通过路由获取

涉及表和关键列: - 订单表 - 字段:编号, 用户编号, 状态 - 状态 - 待支付 - 待服务 - 待评价 - 已完成 - 已取消 - 订单历史记录表 - 字段:历史记录编号, 订单编号, 角色, 角色编号, 状态 - 角色 - 用户 - 技师 - 代理 - 状态 - 下单 - 接单 - 出发 - 到达 - 开始 - 结束 - 撤离 - 取消(退款)

后台逻辑:

  1. 查询订单
  • 订单编号
  • 订单状态为待服务
  • 用户编号
  1. 更新数据
订单初始化-前端初始化

参数:

  • 用户编号 通过 Auth::id() 获取
  • 技师编号 通过路由获取
  • 区域编号 通过路由获取
  • 项目编号 通过路由获取

后台逻辑:

  • 根据用户编号查询钱包数据
  • 根据用户编号查询用户默认地址数据
    • 如果存在
      • 区域编号:默认地址区域编码
  • 根据技师编号查询技师数据
  • 根据技师编号查询技师排班数据
  • 根据用户编号查询用户优惠卷数据
  • 获取租户
  • 租户项目详情
  • 计算订单金额
  • 返回钱包数据、技师数据、项目详情、地址数据、排班数据、订单金额、优惠卷数据
结束订单

参数:

  • 用户编号 通过 Auth::id() 获取
  • 订单编号 通过路由获取

后台逻辑:

确认技师离开

参数:

  • 用户编号 通过 Auth::id() 获取
  • 订单编号 通过路由获取

后台逻辑:

  • 根据用户编号查询订单列表
  • 订单状态为服务结束
  • 修改订单状态为撤离
用户取消订单

参数:

  • 用户编号 通过 Auth::id() 获取
  • 订单编号 通过路由获取

后台逻辑:

技师端接口

获取订单列表(抢单)

参数:

  • 用户编号 通过 Auth::id() 获取

后台逻辑:

  1. 参数校验
    • 根据用户编号查询用户技师数据
      • 技师状态为正常
      • 技师认证状态为已认证
  2. 获取技师配置
    • 接单范围
  3. 查询技师定位数据
  4. 查询抢单类型订单列表
    • 订单状态为待抢单
    • 订单地区编码与技师定位地区编码匹配
    • 订单经纬度与技师定位经纬度在接单范围内
    • 抢单池中是否存在订单编号、技师编号的记录
      • 存在,记录抢单状态
      • 不存在,记录抢单状态为 0
  5. 返回订单列表
抢单

参数:

  • 用户编号, 订单编号
  • 用户编号 通过 Auth::id() 获取
  • 订单编号 通过路由获取

后台逻辑:

  1. 参数校验
    • 根据用户编号查询用户技师数据
      • 技师状态为正常
      • 技师认证状态为已认证
  2. 事务处理
    • 添加抢单池数据
      • 订单编号
      • 技师编号
      • 状态为抢单中
  3. 发送异步抢单通知(比如对接极光推送)
接单

参数:

  • 用户编号, 订单编号
  • 用户编号 通过 Auth::id() 获取
  • 订单编号 通过路由获取

后台逻辑:

  1. 参数校验
    • 根据用户编号查询用户技师数据
      • 技师状态为正常
      • 技师认证状态为已认证
  2. 事务处理
  3. 发送异步抢单通知(比如对接极光推送)
出发

参数:

  • 用户编号, 订单编号
  • 用户编号 通过 Auth::id() 获取
  • 订单编号 通过路由获取

后台逻辑:

  1. 参数校验
    • 根据用户编号查询用户技师数据
    • 技师状态为正常
    • 技师认证状态为已认证
  2. 事务处理
  3. 发送异步抢单通知(比如对接极光推送)
到达

参数:

  • 用户编号, 订单编号
  • 用户编号 通过 Auth::id() 获取
  • 订单编号 通过路由获取

后台逻辑:

  1. 参数校验
    • 根据用户编号查询用户技师数据
      • 技师状态为正常
      • 技师认证状态为已认证
  2. 事务处理
  3. 发送异步抢单通知(比如对接极光推送)
撤离

参数:

  • 用户编号, 订单编号
  • 用户编号 通过 Auth::id() 获取
  • 订单编号 通过路由获取

后台逻辑:

  1. 参数校验
    • 根据用户编号查询用户技师数据
      • 技师状态为正常
      • 技师认证状态为已认证
  2. 事务处理
  3. 发送异步抢单通知(比如对接极光推送)
订单列表

参数:

  • 用户编号 通过 Auth::id() 获取
  • pageSize 每页大小
  • page 页码

后台逻辑:

  • 根据用户编号查询技师
  • 根据页面大小、页码查询技师订单列表
  • 返回订单分页列表
拒绝接单

参数:

  • 用户编号, 订单编号
  • 用户编号 通过 Auth::id() 获取
  • 订单编号 通过路由获取

后台逻辑:

  1. 参数校验
    • 根据用户编号查询用户技师数据
      • 技师状态为正常
      • 技师认证状态为已认证
  2. 事务处理
  3. 发送异步抢单通知(比如对接极光推送)