一、商家平台-订单操作(添加\移除菜品) 问题同购物车操作

image.png 主要分为修改订单项菜品、可核算订单添加商品和移除菜品三个功能,具体实现如下:

  1. 判定订单待支付状态才可操作
  2. 判定菜品处于起售状态才可操作
  3. 给订单加锁
  4. 给菜品加锁
  5. 添加联锁,保证订单和库存都被锁定
  6. 判断是添加还是移除订单
    1. 如果是添加可核算订单项
      1. 如果库存够,redis减库存
      2. 修改可核算订单项
      3. 减菜品库存
      4. 减菜品库存失败,归还redis菜品库存
      5. redis库存不足,虽然可以不处理,但建议还是做归还库存
    2. 如果是移除可核算订单项
      1. 修改订单项
      2. 添加菜品库存
      3. 添加缓存中的库存数量
  7. 计算订单总金额
  8. 修改订单总金额
  9. 返回新订单信息

二、转台需要满足什么条件?

  1. 当前桌台状态是使用中,目标桌台状态是空闲中
  2. 目标桌台不能是当前桌台
  3. 当前桌台的账单状态是待付款状态DFK

三、转台为什么需要加分布式锁? 怎么添加?

  • 为了防止转台时目标桌台被别人给占用了
  • 给目标桌台加锁

四、转台业务流程?

image.png

  1. 锁定目标桌台
  2. 查询目标桌台
    1. 桌台空闲
    2. 2.2、桌台非空闲
  3. 订单关联新桌台
  4. 修改桌台状态

五、订单结算的状态有哪些?

image.png 总共有六种状态

  1. 待支付—>用户下单创建订单时
  2. 支付中—>收银员发起结算,生产二维码,用户未扫码或扫码后,三方未给出最终结果钱
  3. 支付失败—>三方告知当前订单结算失败时
  4. 已结算—>三方告知当前订单结算成功时
  5. 免单—>当前订单无需支付,直接结单
  6. 退款【单独字段】—>已结算后发起的 线下退款操作

六、结算时,为什么需要根据订单生成交易单?

因为一个订单根据对应的结算状态可以有多个单号,生成订单号是为了给第三方支付接口结算

七、退款满足条件是什么?

  1. 订单处于【已结算】,才可退款
  2. 退款金额不能超过实付款
  3. 收款人与退款人必须是同一个人,如果不同不可退款