订单模块学习笔记

发布于:2024-06-20 ⋅ 阅读:(161) ⋅ 点赞:(0)

订单相关的表

订单表:关键字parentno关键字段(后面幂等性校验用),订单编号,pay_type(支付方式),last-pay-time 最后支付时间,还有一个最后确认时间(后面取消订单要用)

订单地址表

订单内容表:评价内容

订单详情表:订单明细

订单发票表:记录到表里面(可以忽略,如果面试问到,因为没有用到)

订单充值表:充值订单的详细,某用户,支付单号(这个挺关键的,支付宝后面要用),给账户充钱。支付方式(有用),最后支付时间, 创建时间。

整个项目,订单类型:礼物订单,充值订单。

为什么要有父订单,和订单编号?

父订单:为了区别是否同一批次下单

订单编号:为了针对某订单,单独进行退货,发货。

面试中可能会遇到,你项目多少并发量,用到多少服务器。

3000qbs,1000qbs一台服务器,假设,如果错了就改。

在项目中高并发遇到了什么问题,怎么解决高并发?

分布式事务,分布式锁讲一讲?

分库分表sql实现说一下?

当时懵逼了,啥也说不出来。

流程图

是由购物车或者商品购买按钮过来的。

店铺拆单,对店铺拆单,对店铺下的订单退货,此次学习就是对店铺拆单

商品拆单,对单个商品退货

一个房间一天就是一个订单,就一天就是一个订单,拆单的话,实际上没有固定的说法,按照业务的实际需求来制定。

正向流程,逆向流程:

正向流程:下单到发货正向流程

逆向流程:退货到商户

整个大概流程:

创建订单以后,调用支付服务,创建一个支付单,支付单单号返回给订单服务。把支付单单号,返回给前端,前端携带支付单号,跳转支付页面,选择支付方式,确认支付金额,最后点击确认支付。携带支付单单号,支付方式,金额,调用支付接口。支付接口:判断支付方式,然后调用三方支付的接口。三方支付结果,后续通过异步回调的方式,告知我们支付结果。n多支付单,如和得到结果,通过支付单号来得知支付结果。拿到结果,修改支付单状态,订单状态。根据bussinessid来修改订单的状态(一个是礼物订单,一个是充值订单)

如何防止重复下单(防重token方案,父订单)

两种方案,一个是在前端,一个实在后端

后端防重token,从redis获取token判断,删除token

前端页面生成一个uuid,依赖前台创建父订单号,根据父订单号来查询数据库有没有,如果存在,已经下过单了。

这两个方案各有优缺点,方案二:每次都要去查询数据库,对于数据库压力比较大。方案一:每次调用后端接口,对于后端接口压力也是有的。刷新了两次页面,每次token不一样,因此还是会重复下单。

方案一:尽量不要使用uuid,uuid+商品

其余方案:

点击按钮后,立马按钮变灰(前端实现),好处是简单,f5刷新又可以了,前端也要做。

请求唯一id+数据库唯一索树(这就是我们的方案二)高并发下行,数据库压力太大

redis锁加方案二就可以。

redis分布式锁+防重token,按照自己特点方式,生成一个通行证。

对token加锁

方案再好也会重复下单,所以要技术加产品支持+运营支持,达不到百分百。

任何一个方案都是可行的。

每个方案都有优缺点,每个方案都有讲。

加时间戳,一分钟内保证不重复下单,或者方案一加方案二一起用,使用token消失时间(一分钟)来实现一分钟不重复下单,再加上parentno以防网关失败会重试。

https://zhuanlan.zhihu.com/p/700541604

高并发,集群下,防止重复下单。(高并发下的解决方案)

加分布式锁

会不会影响性能,以什么标准,因为是因为父订单才会去抢锁,哪里来那么多父订单一样的。


网站公告

今日签到

点亮在社区的每一天
去签到