一、商家平台-订单操作(添加\移除菜品) 问题同购物车操作
主要分为修改订单项菜品、可核算订单添加商品和移除菜品三个功能,具体实现如下:
- 判定订单待支付状态才可操作
- 判定菜品处于起售状态才可操作
- 给订单加锁
- 给菜品加锁
- 添加联锁,保证订单和库存都被锁定
- 判断是添加还是移除订单
- 如果是添加可核算订单项
- 如果库存够,redis减库存
- 修改可核算订单项
- 减菜品库存
- 减菜品库存失败,归还redis菜品库存
- redis库存不足,虽然可以不处理,但建议还是做归还库存
- 如果是移除可核算订单项
- 修改订单项
- 添加菜品库存
- 添加缓存中的库存数量
- 计算订单总金额
- 修改订单总金额
- 返回新订单信息
二、转台需要满足什么条件?
- 当前桌台状态是使用中,目标桌台状态是空闲中
- 目标桌台不能是当前桌台
- 当前桌台的账单状态是待付款状态DFK
三、转台为什么需要加分布式锁? 怎么添加?
- 为了防止转台时目标桌台被别人给占用了
- 给目标桌台加锁
四、转台业务流程?
- 锁定目标桌台
- 查询目标桌台
- 桌台空闲
- 2.2、桌台非空闲
- 订单关联新桌台
- 修改桌台状态
五、订单结算的状态有哪些?
总共有六种状态
- 待支付—>用户下单创建订单时
- 支付中—>收银员发起结算,生产二维码,用户未扫码或扫码后,三方未给出最终结果钱
- 支付失败—>三方告知当前订单结算失败时
- 已结算—>三方告知当前订单结算成功时
- 免单—>当前订单无需支付,直接结单
- 退款【单独字段】—>已结算后发起的 线下退款操作
六、结算时,为什么需要根据订单生成交易单?
因为一个订单根据对应的结算状态可以有多个单号,生成订单号是为了给第三方支付接口结算
七、退款满足条件是什么?
- 订单处于【已结算】,才可退款
- 退款金额不能超过实付款
- 收款人与退款人必须是同一个人,如果不同不可退款