1.先检查库存是否充足
1.1在库存历史表中检查是否存在数据,where条件:`product_id`, `order_item_id`
1.2如果不存在,则去库存表,查看库存是否满足,如果不满足,直接返回,库存不足
2在库存历史表中:
2.1如果不存在行,则插入数据,ver = 1
2.2如果存在行,则进行更新,这里要保证只能更新一次,因此需要 update set ver = 1 where ver = 0
,
如果更新返回的行数为0,则说明已经更新过了,因此,按照幂等性要求,直接返回,不能更新库存,以免造成多次扣除库存
3.库存表:进行库存的扣除,如果返回行数为0,则说明库存不足(或者该产品不存在),因此返回库存不足,回滚事务
4.提交事务成功返回。