00:00
好,我们接着前边的流程,当我们原子验令牌失败以后呢,我们就直接返回给ctrler,但为了ctrler方便,期间应该set一个code我们的状态码,状态码呢,只要是一说明我们这个controltrler呢,调用失败了,我们来到controlrler,只有状态码是零的情况下,我们才会来到我们的支付选择页,否则呢,其他都是重新向到我们的订单结算页,那么这个订单验证失败直接返回,那验证成功就要进行我们完整的下单逻辑,那整个下单逻辑呢,我们在这一块大致是这么一个流程,首先我们来提交订单信息,订单的这些信息我们现在已经收到了,那下来验证令牌不通过,接下来我们这一块的补充逻辑,我们后边来做,如果是通过了,那接下来就应该创建订单,那创建订单呢?现在我们先来分配一个订单号来创建一个订单,然后订单里边要购买的每一项数据,我们从购物车里边再获取过来,购物车里边的这些数据就是我们说的订单项。那我们接下来把这。
01:00
这些订单订单项的信息都得到,包括我们这个用户前面的页面会给我们提交我们选择的收货地址,把这个收货地址的信息我们也详细拿到,通过订单订单项的信息,我能计算出我们要购买的商品的总价,通过收货地址能计算出运费,然后呢,这两个会得到我们整个订单应付的金额,我们可以根据这个金额呢去来做一个验价,看前端给我们交过来的这个金额跟我们算的这个金额是否一样,所以我们这一块呢,关键的两个环节就是要创建好订单,还有我们这个订单项信息,你们这个订单呢,最终都是要保存到数据库以及订单项,你们可以看一下数据库中对应的这些表,那订单呢,对应我们这个OMS这个订单库里边的OMS order表,那这一块呢,是我们的订单表,订单表里边有非常多的详细信息,订单号,哪个会员购买的,包括他的这些总价等等各种信息,然后订单里边购买的一项项的商品都是这个order item订单项。
02:00
好,那么现在呢,就需要准备这些数据,那我们就来专门来写一个私有方法,那么这个方法呢,就是来创建订单,当然创建订单要返回什么数据,那我们就来返回一个就叫。Order create to相当于我们返回一个订单创建好的这个对象,那订单创建好的这个对象里边包含什么?我们把这个类我们先创建出来,我们就直接放到我们这个订单里边的to这个类里边,好,不是这个intercept就放到to里边。我们把这个订单呢,这个order create to来创建来,只要订单创建好,那么就会有这些数据,首先我们创建了哪个订单,订单的实体类,这是我们真正的订单,我们创建好的订单,这是我们第一个,第二个因为我们这个订单啊,包含很多订单项,所以我们还可以写一个list,我创建好的每一个订单项有一个order it,这个实体类好,我们就叫it,这是我们所有创建好的订单项。
03:05
包括我们整个的收货地址这些信息,我们计算的这个订单的价格,比如我们可以有一个备个DEC,我们订单应付的价格pay price,这是我们订单计算的应付价格。但这个订单计算的应付价格是按照运费来进行计算的,所以我们把这个运费呢,也可以放到这备个decma,它里边呢应该有一个运费,好把这个运费呢给它计算上的运费,那么现在呢,这就是我们订单创建完成以后,给我们准备返回的这个数据,来new一个order create to,只要我们这个订单创建完,我们这个to里边就会有这个数据,那最终来返回这个create to,所以我们希望呢,现在先调我们的第一个方法,我们下单创建订单,好我们第一个创建订单,订单创建完了以后呢,相当于我们相关的对象就有了order item也好,我们order实体类也好,我们就都有了,然后整个创建订单的流程,那我们就写到里边,首先第一个生成一个订单号。
04:17
这个订单号呢,我们现在用myab给我们提供有一个叫ID worker,这个ID worker里边呢,有一个这个方法,它可以生成一个时间ID,这个时间ID呢,我们可以用于商品订单,这可以是一个唯一ID,不重复的,诶我们可以用它订单的ID,我们直接用它就行了,我们也不用复杂的这个订单号逻辑,我们直接get一个time ID,那么这个呢,当做我们最终要用的订单号好。这是我们order SN订单号单,整个订单的生成应该是一个order entity这个订单的实体类信息,这个实体类信息里边我们先来保存好订单号,这个实体类里边set order SN,我们的订单号应该是在这,然后呢,我们这个订单里边还要保存什么信息,我们看一下我们这个订单表,或者直接看订单实体类也行,我们这个里边呢,除了保存订单号,还有我们这个订单应付的这些额度信息,运费信息,这些都要保存,以及我们订单如果使用了什么优惠,这些优惠信息,包括我们的支付方式,特别是我们这一块物流信息,物流等等,我们这个发了货才会有物流信信息。
05:33
当然这个订单的状态默认刚创建来,应该是我们新建状态,待付款状态,所以我们现在把订单的所有状态,这个状态呢,我们专门给大家抽取了一个枚举类,将我们订单的所有这个枚举状态类,我们可以先复制过来,那后来要用到这个订单的枚举类,好这一块呢,都是订单的状态。那最重要的就是下边,因为我们如果有提交发票信息,在订单里边也要保存发票,发票是我们订单确认页提交的,当然这一块我们收货人的这些信息,这些信息呢,我们要提交这些信息呢,又是来源于我们收货地址的,所以我们接下来这一块呢,我们先来创建了一个订单号,创建订单号,那接下来我们要做的就是填充我们这个收货人的这些收货地址信息,以及填充我们订单里边的订单项信息,所以我们现在我们先来做第一件事,能获取收货地址,获取收货地址信息,好,那收货地址信息我们有这个远程的方法,那远程方法呢是库存服务。
06:39
我们库存服务呢,能根据我们的收货地址计算出一个价格,我们计算运费的这个方法,我们来可以看一下我们之前计算运费的方法,这个运费的方法呢,直接在库存服务里边,我们没有给他远程调用过来,来找一下我们的运费计算方法,在这儿走这个运费计算,我们这呢有一个库存controller好,这个controller里边除了有一个汉字to外,来看一下这一块ino,好那么在这呢,有计算运费,按照我们提供的地址计算来运费把这个复制来由为我们的远程服务将要计算运费,我们把这个订单里边好们先将要调用第一个远程服务是库存服务来过来,这是我们的库存服务,好,库存服务里边给我们算运费的方法,我们现在是拿过来了,然后接下来我们这一块的fair完整地址呢,要加上我们info controller的前缀好CRLC复制过来来到我们。
07:40
到份service里边,所以我们接下来要做的第一个事情,我们要下订单,要确认订单们先准备了一个订单号,我再来获取我们的库存服务,我们有一个获取我们的邮费地址,当然这一块呢,要传入我们收货地址,这个收货地址呢,我们以前这个VI里边有,所以我们这个方法呢,可以传进来点一个get我们的这个微收货地址,Get我们这个收货地址,当然每次呢,我们后来要传很多东西,我们都在这弄呢,太麻烦了,所以我们也可以使用我们以前的thread local,比如当条线程里边,我们就来共享一下它这一块我们要往下传递的这些数据,好,我们之间呢,给我们的这个方法里边,那也写一个thread local private。
08:30
我们呢,直接来写一个thread local,这个thread local呢,首先我们要创建订单页面提交的这个VO数据,我们得往下继续来进行共享,所以我们可以把这个VO放到里边,有一个叫order con VO。我们就叫comeform的这个thread local,等于你有一个thread local,我们把它准备好,好我们可以多用上几个thread local,然后呢,我们把它拿过来,只要每一个线程进来想要用thread local,我们可以在这一块,我们将要调用我们这个创建订单的方法,之前们所有的数据呢,都可以往下传,比如我们这个thread local set一个,这是我们页面给我们提交来的数据,我们传来,那如果下边我们想要用。
09:18
我们就可以来获取,当页面提交的是一个submit VO,好,我们把这个submit VO放过来,好,那我们就来放来,现在呢,我们前边将页面传来的所有数据我们都放到了thread local里边,我们现在直接从thread local里边获取来页面传递来的数据,点一个get,好,这是页面传递来的数据,传递来的数据里边有收货地址,我们直接点一个get address ID,最终呢,我们得到收货信息这一块呢是邮费,我们在这儿来获取一下我们收货地址获取来的这个邮费,我们来看一下它最终给我们返回的数据是这个样子的。我们远程的库存服务里边,我们在这一块它呢,返回的不止有我们邮费信息,还有我们整个费尔VO,相当于我们的地址信息,以及我们的整个收货信息,我们可以把这个VO我们直接来复制过来。
10:14
好,把这两个呢复制过来,远程的返回,我们在order这一块呢,我们也来接一下,把远程的返回的这个VO,我们在这儿也来自己写一个就叫VVO你返回到运费的这个VO,首先呢,第一个是我们的这个地址,地址我们有,还有我们的这个decim类型的运费,然后接下来我们就来准备数据,那么现在呢,Order info远程查出了运费信息。这一块呢,是获取到了我们的远程获取到我们收货地址信息,当然我们要把这个信息解析出来,它点一个能get data,我们直接呢,让它转成我们指定的数据,那我们这一块呢,Set data里边把这个放进去了,那么接下来让它转成你有一个type reference,我们要让它转成我们指定的这个fair VO fair VO,那data里面的数据呢,是这个类型,好,我们让它转成这个,那最终这是我们远程得到的这个运费相关的信息,Fair response。
11:23
那这个运费的信息我们拿过来给订单里边先来填充起来,好,那填充首先第一个来获取到这个运费,那么就设置到订单里边门entity,这个订单的entity里边点一个set,我们来找一下我们的运费control f来搜一下运费,运费呢是哪个字段,那叫运费金额,有一个叫amount,好,现在呢,我们就来set。Set我们这个运费金额,运费金额呢,那就是我们远程获取的这个运费金额,那给这儿呢一放,那这是我们获取到的运费金额,当然除了设置运费金额,我们给订单里边还要设置我们所有的收货信息,收货人的城市,我们应该远程获取到的这一块数据里边有我们的地址信息,地址信息有我们收货人的城市,那其他的我们都要设置进去,点一个set,我们收货人的这块有一个详情,好,我们这块呢,全部来get,点一个get address.get detail address,继续我们把所有的收货人信息我们也设置好,设置收货人咱们这个信息,这都是我们创建的这个订单的实体类里边要保存的东西,点一个我们再来set一个收货人的名字,我们还是从远程获取来的数据。那除。
12:50
呃,计算好运费,之前的这些数据呢,我们都有收货人的名字,再加上其他的这些信息,比如set,我们的receiver,收货人的名字,运费,还有我们的手机号,我们从这一块呢,就来获取到手机号get address,点一个get份,还有我们的其他值,我们都在这儿来设置上,点一个set receiver。
13:14
来看手机号名字这个都有了,还有他的这个省市区以及他的邮编,我们把这个邮编呢,也设置上,点一个get address,点一个get post code,然后我们再来设置上set我们的receiver,邮编完了以后呢,接下来是我们这个省和区,那么这个省呢,把这个信息也拿过来,Get一个address,点一个get province,然后我们的市区也保存进来,这块呢,就是字段比较多,有点麻烦,那再来set一个receive。我们的区域信息region city呢,我们上边都设置过了,所以我们接下来再来调用get address get。
14:00
然后再接下来我们还有一个叫enity,点一个set,我们有一个叫receive receive time,相当于我们的收货时间,这个收货时间我们先不弄,我们看一下这几个,这几个呢是七个字段,那这七个字段呢都设置好了,因为收货时间只有我们这个人收到货了,我们才会有呢这个收货时间,所以我们这个设置收货人信息我们就准备好了,而且呢,在这儿设置运费信息,设置运费信息我们也准备好了,那再接下来我们订单里边的大订单这一块就有了,那大订单有了以后呢,我们还要准备我们所有的订单项信息,让他从购物车里边再把所有的订单项拿来。把所有的订单项创建好,最终我们还要进行一个价格计算,所以我们第二个那再来获取到所有的订单项,那这个订单项呢,我们直接从购物车服务里边cut份service里边,我获取当前用户的这个购物车数据,来要获取当前用户的这个购物车数据,我们以前呢,加了一个份的拦截器,所以如果是异步状态下,我们想要将份的这些请求头之类的放上,我们还要在每一个异步线程里边共享上下文,但是我们呢,现在我先不做异步的话,那么就直接在这里边就能获取到所有的订单项信息,那这个订单项信息获取来以后。
15:27
每一个order item VO o最终都要创建成一个我们真正的order item实体类,因为这个实体类呢,是要保存到我们数据库里边的,所以我们把这些VO数据拿来判断,如果这些东西不为空,我们就可以直接使用了,然后呢,并且它的这个SS大于零的话。并且我们的current user cut item,点一个size大于零,我们就可以来便利把每一个呢都来处理一下当前购物车里边的这个数据,点一个stream点一个,我们映射每一个数据,每一个这是购物车里的购物项数据,然后呢,我们最终要映射成我们的订单信息,把他们呢要最终返回,我们先来返回,返回的是一个什么?是一个订单项,Order item,实体类,好。
16:24
也就是说每一个订单信息呢,都要构建成我们的这个订单项,然后呢,返回这个订单项信息,订单项最终返回完以后呢,点collect to一个list,这是我们所有的订单项,那这个订单项我们能得到以后呢,我们所有的这个订单项数据我们就可以以后保存到数据库了,那订单信息这一块订单项该怎么处理?首先呢,我们来看我们订单项里边有哪些字段,订单项呢,首先有我们当前的订单号,以及我们订单的ID,这个订单的ID只有我们保存了订单才知道订单ID,其实这个ID呢,我们可以不用,因为这个订单号就已经唯一能表示我们这个订单了。接下来还有我们这个当前购买的商品的SPUID以及它的SKU信息,所以呢,我们要购买的商品的详细信息,我们在这儿都要进行一个设置,以及我们这个商品有没有使用什么优惠,所以这一块我们就希望呢,能有一个方法,这个方法呢,就是帮我们来构建出我们每一个个的订单项,我们就叫build,我们的older it,好构建我们订单项,把我们的这个购物车里边的实体类信息拿过来,我们呢,帮你来返回这个订单项的详细信息。
17:46
好,我们当然希望呢,有这么一个方法,我们创建出来这个方法呢,我们先来return一个呢,这是我们的构建订单项,构建订单项数据,包括我们整个构建订单的这一块数据,我们也可以来抽取出来们最终呢想生成一个订单,返回一个这个实体类,好把这个呢来。
18:12
抽取一个方法,这个方法呢,我们就叫build,我们来构建一个订单build order。好,我们把这个方法呢创建出来,我们在这儿构建一个订单,那按照指定的订单号构建了一个订单,那么这个订单构建出来,我们把这个订单的实体类,我们要返回一个N。好,Return一个我们的实体类走,这是我们的构建订单,那最终我们在这儿来接收一个订单,这是订单的一些总信息们在这儿构建完,然后呢,接下来我们希望有订单项的一些总信息,我们在这儿也构建完,当然构建整个订单项,我们就可以给他,让他完整的返回一个list。
19:00
那么构建订单项的所有方法,我们直接来写到我们的这个里边,构建所有的订单项,那就应该是从购物车里边先查到所有的数据,然后呢,接下来构建每一个订单项,那么就叫build order it,每一个订单项的构建呢,我们也可以来抽取过来,那这一块呢,我们就参数就不用传了,这是我们构建所有订单项数据,CTRLY,我们来删除这一行,我们再来准备一个方法,构建某一个订单项,好,我们来return一个,那先把这些都抽取出来,抽取出来我们的大步骤就清晰了,构建。每一个订单项应该是我们某一个,我们指定的某一个购订单项的内容。好,我们现在的大流程就应该是这样,我们要创建订单,我们调用了这个创建订单方法,创建订单呢,先创建一个订单,然后呢,再创建出我们所有的订单项,Build order items,得到我们的所有订单项,这是我们的items,得到这个订单项以后呢,我们的大流程就是订单也好了,订单项也好了,然后呢,我们要进行计算我们订单的金额。
20:16
所以我们要比一个价,第三步我们就是要验价,行,我们现在呢,就先把订单构建好,那下一节课呢,我们再来把订单项构建好,我们再来进行验价。
我来说两句