00:00
接着我们前边的逻辑,一旦我们这个验价成功,金额对比成功以后,我们接下来要做的事情呢,就是我们把订单的所有数据保存到数据库,那以前的创建的这些订单,这个里边包含了我们这个订单以及订单项,这只是我们内存里边的一个对象,那等价格没问题,说明我们这个订单是有效的,我们可以把它保存到数据库,所以第三步那应该是保存订单,那这个保存订单呢,我们希望写一个方法,我们就叫save order,我们这个订单的保存,我们还是把这个to我们传递过来,因为要保存的订单信息不止有订单,还有我们的订单项,好来创建出我们这个方法,来创建出这个方法,这个私有方法呢,就是保存我们订单的所有数据,保存订单数据,那保存订单数据呢?那接下来我们要做的就是。我们先来找出这里边的订单,这个呢是订单,订单呢只有一个,然后呢,我们这个订单项有很多一个订单要购买好多东西,我们这呢有订单项,所以接下来我们就来把它们全部保存到数据库就行了,们要保存订单,那就调用订单的这个保存map,我们来找一下订单的member,订单的就是这个order do,我们这一块呢,其实都是有的,那么直接把这块呢,也都来注入到我们这个里边,Order do我们可以不入注入,但是我们来自动注入也没啥问题,首先order do我们得拿过来,Order item这个do我们也得拿过来,我们既要保存订单,还要保存订单项,好,那现在呢,把这两个数据准备过来,然后我们接下来进行保存,我们来到后边我们的整个保存方法,我们来保存订单的时候呢,首先我们来调用order do order点。
01:50
一个DAO点一个,我们现在呢,就是一个save,那就是insert,给我们数据库里边插入一条订单信息。单这个订单信息插入之前,我们还可以给订单里边设置上一些字段,比如我们这个订单来看一下订单有没有什么插入时间之类的,来看一下订单在下边呢,比如我们就把这个修改时间当成我们这个目前的这个时间,所我们来set一个我们叫modify time来找一下订单的修改时间,这个修改时间呢,你就直接传一个new,一个date当前时间就行了,然后我们订单给数据库里边来进行插入,那么这个订单所要的所有信息数据,我们这块呢,就都有了,我们之前设置到的优惠信息,包括我们订单号信息,诶我们这个会员ID呢,我们忘了没设置,所以我们这个订单在构建的时候,我们还要把会员信息我们都要放上,那在这保存订单,那以前我们在这构建订单,Create order,在这构建订单的时候,我把这个会员的ID我们也拿过来,所以我们在这order entity,我们上来就来set一个,我们这有。
02:59
有一个会员的ID,会员ID呢,直接从我们拦截器里边拿,因为我们整个都是同一个线程的,我们这个login user intercept,点一个login user,把它里边的登录的用户拿过来,直接拿到会员的ID,好把这个我们获取来点一个ID,这是会员的ID,那么整个订单呢,就这么构造好了,那在最后一步,我们订单创建完,验价成功,就保存订单,那这一步一保存,我们的订单就保存了,那接下来还有我们的所有的订单项数据。
03:32
因为订单项里边呢,我们之前把订单号都保存了,这个订单的ID我们可以不要了,订单号呢就能唯一识别订单,所以接下来我们要做的就是保存所有的订单项,我们可以用order item这个DAO点一个,因为我们这个有好多的订单项,所以我们可以调用一个批量保存,有没有一个bench引入我们的批量保存,那批量保存呢,那就用自己的service就行了,包括我们现在也不用这个deo,我们都用自己的service this,那就是当前类的service,当前类呢就是order service order service呢,它肯定就能保存,有我们的save方法保存我们这个订单数据,好,这是保存订单,那保存我们这个订单项,我们就把订单项的service拿来,我们在这呢就不用它的do了,把订单项的service order item的service,来找一下这个service order item service and,一个autowa,我们用的MY。
04:33
Plus,它自动生成的这个里边也有我们的批量方法,你点过来直接用它的这个service点一个有一个save Bach批量保存,然后把这一块数据呢,你就在这一保存,那我们整个这一块做完以后,我们的订单就保存到数据库了,那只要这一步执行成功,我们数据库里边肯定有我们订单数据,那订单数据有了,那接下来就要进行我们第四步订单保存到数据库了,相当于用户这个订单生成了,那生成了那我们一定要把库存锁定,库存锁定,如果库存不锁定,等我们这个用户支付成功了,再要去锁库存,我们发现这个库存不足了,或者出现各种问题,咱们在这个订单一保存,我们就要锁库存,而且库存只要锁定失败了,有两三个没库存,还要撤销这个保存订单的方法,所以呢,我们接下来整个呢,可以是一个事物,At,一个transitional,这是一个事物。接下来我们就。
05:33
不应该锁库存,只要锁库存有任何问题,我们可以来抛一个异常,只要一有异常,我们所有的事物呢,都要进行回滚保存的订单呢,又就没有了,我们这个库存锁定,只要有异常,只要有异常,然后呢回滚我们这个订单数据,订单数据,所以接下来我就希望呢,远程有一个锁库存的方法,所库存的核心就是我这个订单,每一个商品买了几个,每一个商品买了几个,在库存里边呢,都先占好位,我们来看库存表,我们的库存表在我们的WMS这个系统里边,这个系统里边呢,专门有一张VSQ表,保存了每一个商品,它在哪个仓库拥有几个库存量,还有呢,现在已经占了几个量,所以我们现在所库存呢,相当于给我们库存的这个占位量,往上加,我现在买了三件,那我们就来再加个三,加到什么时候为止呢?加到我们这个不能再累加到比他。
06:33
排大为止,所以最大呢能累加到它的这个库存量,所以锁库存呢,其实要调用远程的库存服务,而这个锁库存呢,库存服务要用哪些数据,首先呢,我们想想肯定得给我们说一个订单号,因为这个订单号给我们以后,我们就知道我们是为哪个订单所得库存,万一这个订单出问题了,我们可能后来还要根据这个订单要进行解锁,然后呢,接下来订单号,这个订单里边的所有订单项,订单项信息,这个订单项呢,主要包含我们哪个商品,SKU的ID,还有这个商品呢,我们要锁几件我们的squ的这个number,当我们在这保存所库存的时候呢,我们还保存了SKU的名字,所以我们可以给它携带的时候,把当前我要所库存的这个商品的名字也带给他,所以我们想要调用远程的所库存服务,那接下来我来准备一个VO,这个VO呢,我们远程请求远程。
07:33
点球呢,现在是我们的v SKU lock VO,那么现在呢,是库存锁定的这个VO,这个VO呢,现在有这么多的数据,首先private string order SN,这是我们的订单号,订单号代表呢,我们要为哪个订单来锁住库存好,然后呢,接下来再来一个list,代表我们要锁住哪些库存,所以说呢,这一块呢,都是每一个我们要锁定的这个信息,这个信息就是我们order item VI里边的这些数据,我们要为这个商品锁多少件,那就在这。
08:09
那我们可以整个将order item VO我们全部交给他也行,所以我们在这呢,直接写一个list,有一个叫order item VO,这是我们订单项的这个VO数据,这就是我们要锁的所有库存,我们就叫locks,这是我们需要锁住的,需要锁住的所有库存信息,主要呢就是我们要取到每一个商品里边要锁几件,我们现在呢,就是有这么一个数量,想代表我们当前哪个商品购买了多少,所以呢,我们希望有一个远程的所库存方法。那么先来写我们的远程接口,假设在我们这个库存服务里边,我们也有这么一个远程接口能提供我们的所库存,那把这个VI数据呢,我就直接复制过来,我们在这儿都抽象好了。我们来到我们的订单服务,订单服务里边呢,我现在来接收这么两个数据,好,这有一个order item VO和我们的所库存的这个VOCC,我们把这个数据呢,我放到这CV。
09:12
走,那现在呢,就是我们所库存的这个VO,表示我们要锁哪个订单号,然后呢要锁几个数量,然后呢,把每一个订单项的信息我们也传递过来,那接下来们就来写一个controller,第controller呢就是库存锁定,然后呢,Where where SQ,那接下来我们就来写一个control了,Public啊,我们就叫orderl订单锁定库存的这个方法,好,那为某一个订单来锁定库存,你给我发一个请求,Post map发一个POS请求。我们就叫lock,我们要锁库存,我们是为订单来锁的,我们为当前订单来锁一个库存,那当然订单的所有信息我们都在我们的这个VO里边,我们现在呢叫where s ku lock VO,好,我就叫这个VO,当然我们希望呢,它以Jason的方式把这个数据提交过来,我们就叫request body,提交过来以后呢,我们接下来就给它来锁库存,R点一个OK,无论是成功还是失败,我们先给它返回一个OK,接下来我们就来锁库存,希望呢,这个service有一个方法能给我们来进行库存的锁定,然后呢,我们要锁的库存就是这些数据,但是最终返回的结果是什么?我们应该返回每一个人锁定的信息,谁锁定成功了,谁没锁定成功,我们可以返回每一个商品,哪个商品都锁成功了,哪个商品没锁成功的信息,所以呢,我们现在在这儿我来创建一个class这个VO。
10:47
这个呢,就是我们look result,我们这个锁定我们库存的这个结果,Look stock result库存的锁定结果,这个锁定结果呢,来按特data我们来写在这,好,我们现在呢,这个锁定结果,那就应该是我们现在至少得包含这些信息。
11:08
首先是private,我们哪个商品浪类型的SQID,就是这个商品锁了几件,我们现在是这个number锁了这么多件,它锁定成功了没有private我们一个布尔类型。的lock,它是不是已经被锁定成功了,你就在这来写一个布尔类型,所以呢,我们所有的库存锁定状态,那就应该返回的是一个list,你每一个商品,最终我们都想让它返回它的库存锁定状态,那就叫lookto result,库存的锁定结果,那就叫s stock result。我们库存的锁定结果,只要锁成功了,我们点一个set贝塔,好,我们把我们最终的锁定结果放到这儿,接下来我们来创建出这个方法,那我们接下来再来创建出我们所库存的这个方法,走,那这个方法呢,就是我们要为某个订单锁定库存,为某个订单某个订单锁定库存。
12:10
好,我们假设呢,我们这个远程方法那就在这儿了,那就去来进行一个远程调用,把这一块呢,我们复制过来,我们订单呢,想要锁库存们就在这个份接口里边,我们找一个库存服务,好库存服务呢,他想要在这儿锁库存,我们的这个VO我们自己也抽取了,我们直接拿来v SQ lo VO想要为这些商品来所库存,再加上我们的整个前置路径,把所库存的这个前置路径来复制过来,CTRLC来到我们的远程调用这一块,好,那么呢,这一块的方法那就在这儿了,那想要所库存,那就是where,我们的库存的远程服务有一个为订单锁库存,那么接下来就来准备我们为订单的这些锁库存数据,他呢,现在要传一个VR SQ look VO,那么就来准备这个VO,你现在要锁库存走。
13:05
我们就叫lock VO,等于new一个where SQ lo VO,我们相当于要为这个订单来锁库存,那哪个订单呢?首先订单里边的订单号信息,订单号我们都已经保存这个订单了,我们点一个set。有一个OSN订单号,订单号呢,就是我们之前创建好的这个订单里边,这个订单里边我们获取到订单,拿到他的订单号,那就是我们为这个订单号来锁库存,然后要锁成什么样,我们还是要获取来从这个里边,这是我们里边的所有订单项,但我们现在呢,不用这么麻烦获取到订单项,我们只需要直接拿到我们要锁的每一个库存信息,这个呢,我们叫order item VO ctrl c来找一下我们这个order item VO,这个呢其实就是我们购物车里边的所有这些数据,我们把这些数据呢,还封装成了我们这个order item in entity,那接下来我们也不用远程查购物车了,因为这个订单呢都固化了,所以我们现在就需要我们拿到订单里边的这些数据,这是我们这个订单,我们把这个订单里边的数据拿到order items,这是它的数据,然后呢,我们再来封装成我们想要的结果,我们想要的结果呢,其实也不多。
14:22
点进来,那虽然说要一个order it VO。但实际上我们只要一个SQID和我们的数量就行了,那么就可以把这两个纸来封装一下,好,我们来准备,现在呢,我们来拿到所有的这个数据,我们在这儿继续来写,订单号呢,我们放上去了,然后呢,我们拿到所有的订单项,点一个,我们把它每一个都来重新封装我们的这个item,重新封装返回一个什么呢?那现在要返回一个现在的new,一个order item VO,这个item VO里边。多的数据我们也不要啊,我们只是为了封装简单,我们懒得再抽取一个VO,把这个VO呢直接来返回,这个里边只放两个东西,是哪个商品,Set一个,比如我们S的ID,那们是哪个商品呢?把这个拿过来,点一个get SQ ID,那们这个商品要锁几件item VO点一个,那set一个要锁几件数量,我们从这个订单项里边把每一个数量再拿到count,我们这有一个叫it,点一个get count,我们订单项的数量,这个数量呢,我们有一个值,点一个它叫SQ quant,好,这是我们的数量。当然我们还可以带一个当前要锁的这个商品的名字,有一个title,我把这个title带来,然后呢,商品的名字我们也可以拿来,就带这几个基本的信息,SQ name,然后呢,我们接下来把这些数据collect to一个list。这就是我们。
15:56
我们要锁的这些数订单项的数据,好这些订单项的数据呢,我们把它放到这个VO里边走,把这一块呢,来删掉lock VO点一个set,我们现在想要锁定的所有数据,那就在这,我们把这个呢就叫locks,好,我们现在想要锁定的数据就在这,然后呢,我们把这两个VO,就这一个VO我们直接传过去,让他来远程锁定,所以我们这个订单服务,只要订单一保存成功,那接下来呢,一定要远程去来锁库存,只要这一块有任何失败,比如我们网络没连接上,我们这一块订单呢,也会撤销,当然我们这个锁库存呢,会有一个返回啊,对象返回,那么接下来就要在这个返回里边,我们来判断它锁成功了还是失败了,R点一个,比如我们有一个get code的,只要code的呢都是零,那就是锁成功了,我们接下来可以做下面的事情,锁成功了,那么这个库存呢,就锁定成功了,否则我们这个库存呢。
16:56
那就锁定失败了,就锁定失败了,然后呢,我们还会返回每一个的锁定结果都在贝塔里边,当然真正的锁库存方法,那么下一节课呢,继续来讲。
我来说两句