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

实现步骤:

1、判定订单待支付状态才可操作
2、判定菜品处于起售状态才可操作
3、锁定订单
4、操作订单项
4.1、添加可核算订单项
4.2、移除可核算订单项
5、计算订单总金额
6、修改订单总金额
7、返回新订单信息
订单加锁是防止前端也在操作(前端加的也是同一个锁)
image.png
remove的减一操作时,订单就算没有也不会删除订单项,保留数量为0,(留痕)留一条记录(与购物车不同)

2. 转台需要满足什么条件?

1、桌台状态:当前桌台【使用中】、目标桌台【空闲中】

2、目标桌台,不能是当前桌台

3、当前桌台的账单状态:待付款【DFK】

3. 转台为什么需要加分布式锁? 怎么添加?

目标桌台的id加锁;
防止目标桌台开桌

  1. 扩展:

这里不需要加分布式事务;这里没有调用RPC远程调用,使用的是同一个数据库

4. 转台业务流程?

image.png

5. 订单结算的状态有哪些?

订单状态【DFK待付款,FKZ付款中,QXDD取消订单,YJS已结算,MD免单,GZ挂账】
9813ae1dacf8bf4379241741046cd1f.png

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

1、交易单是专门用于对接交易支付系统
2、订单和具体业务相关,交易单和业务无关, 解耦
3、交易系统是一个通用支付服务
支付服务:对外提供的接口统一参数是 交易单VO对象
对接系统: 餐掌柜需要将订单转换成 交易单,远程调用交易支付服务

根据订单生成交易单的优点:
● 项目解耦,设计成通用的支付服务
● 支付失败时,基于原始订单可以重新生成新的交易单发起新的支付
● 使用交易单,可以设计合并支付的功能

订单和交易单设计成: 一对多关系

7. 退款满足条件是什么?

1、订单处于【已结算】,才可退款

2、退款金额不能超过实付款

3、收款人与退款人必须是同一个人,如果不同不可退款