00:00
我们接下来来填充订单确认页要用的数据,首先我们所有的数据都在order confirm view里边,我们要用的第一个数据就是收货地址列表,那这个列表呢,应该是根据当前会员的ID查出他之前保存的所有收货地址列表。好我们希望呢就有一个方法,既然这个方法要查会员的信息,那肯定是一个远程调用,那来到我们的这个订单服务,在这个订单服务里边,我们来专门写一个份这个包,我们来做远程调用,那远程调用的第一个好,我们来打开,第一个应该是我们来调用我们会员的member,那就叫member phone service,那我们来调用会员服务里边来查询我们的整个地址列表功能。来,我们先来标第一个注解叫分client,代表我们是一个分客户端,我们要远程调用哪个服务呢?叫鼓励mail member。接下来第二个我们要调用远程服务,一定要开启远程调用功能,所以我们得加上enable分clients这个注解,但这两个都加上以后,我们先来写一个方法,那么先还是给远程服务里边来写好方法,那么希望呢,远程服务里边有一个方法,比如我们来到这个ctrler里边,它的地址controller,我们希望呢,它直接有一个方法就是public,我们就直接返回list吧,我们要返回一个收货地址列表,那就member receive address,我们的这个试题类,好,那现在呢,就叫get address。
01:32
那我们要获取哪个会员的这个收货地址列表,那我们可以来传一个会员的ID,比如我们浪一个member ID,那这个member ID呢,我们就来写一个请求,就叫get map,来映射一个get请求,这个get请求那就是来查查谁呢?我们来传入一个member ID,查这个会员的所有地址和addresses,好查他的所有地址,那接下来我们就来最终就希望能返回我们这个地址列表,然后我们拿到这个member receive service,好希望呢,它有一个方法叫get address,获取一个会员的所有收货地址列表,那这个收货地址列表肯定返回的就是我们这个实体列表,好没问题,然后呢,我们来创建出这个方法,Al in来创建出接口的方法,这是获取会员的收货地址列表,添加上它的实现,这个实现呢,也非常简单。我们只需来调用。
02:33
This点一个我们要查所有,那就是list,直接扭一个corry ber,那们最终返回的所有数据都是这个实体类,好我们要查这张表,然后呢,整一个EQ,我们的查询条件应该是等于,等于什么呢?我们这一块有一个会员ID,会员ID等于我们指定的这个值,所以我们按照会员ID查出它的所有收货地址列表,好拿到这个列表以后,我们把整个列表呢一返回就行了。
03:03
CTRLX,我们来剪切过来,来进行返回,这是我们返回的所有会员收货地址列表,然后接下来我们远程服务的这个ctrler我们就写好了,我们把这个,因为它是路径变量,标上pass variable。好,我们这个路径变量,我们路径上呢,有一个会员ID,然后接下来我们把这一块整个复制过来,我们放到我们的订单服务里边,那订单服务里边的第一个方法,那就是它我们可以来返回我们所有的收货地址列表,以前呢,返回的数据是收货地址这个实体类,当然我们把这个实体类里边的所有属性我们呢都抽取成了这个VO叫member address VO,所以我们在这来返回它就行了。好,这是我们的第一个方法,返回会员的所有收货地址列表,接下来来做一个调用,来到我们的订单里边。我们订单的这个份,我们来到它的controlrler,我们还是这个web的controller来到这儿,然后呢,我们想要确认订单,确认订单的第一步,远程查询,远程查询所有的收货地址列表,好,那我们现在呢,已经写好了,我们把这个phone呢,直接引入进来,Member phone service number phone service at,一个autowaar,我们将这个phone接口呢引进来就行了,走,然后接下来我们就在这来调用它的这个查询,Number phone service get address,那会员的ID是什么?
04:36
我们有一个登录拦截器,我们直接可以从拦截器里边获取到,能来我们的这个方法,那一定都是经过拦截了的,所以一定登录了,我们就从login user那这一块们直接来获取到当前登录的这个用户,那当前登录的这个用户这一块呢,就会有他的ID,我们点一个get ID,这就是会员的ID,好,我们远程的这个查询就好了,下来第二个我们还要远程查询我们这个购物车,购物车所有选中的,选中的购物项,这个购物项呢,现在是我们要用来进行结账的,我们无需将购物车里面的所有数据传过来,因为我们都在red里面保存着,每一个用户有自己的购物车,只需要拿来就行了,所以我们希望呢,远程购物车服务也有一个功能,能获取到当前用户的所有购物项,好,我们来到购物车这一块,那我们直接呢,希望有一个。
05:36
Controller来加上get,它的作用就是我们来获取我们current user,我们当前用户的it所有购物项,Car it好,那么现在呢,就希望有一个方法,最终呢,List来返回我们所有的购物项,那这个呢,就是我们获能获取到当前这个用户的所有购物,购物项get好,然后我们把它拿过来走。
06:04
来写一个return,那那接下来我们要做的就是我们希望这个service呢,能最终能有一个方法能获取到我们当前登录的用户的所有购物车里边的数据,好,我们就叫get,我们叫user car it。获取我们这个用户的购物车里边的数据,当然登录的用户我们肯定都知道在session里边有,所以我们直接创建出来,而且我们这个购物车服务也有拦截器,所以我们直接从拦截器里边要用户信息,我们都有,所我们现在呢想要做的一件事情就是get cut itto,获取购物车里边的所有数据,而购物车要操作的件是什么?那直接呢,拿拦截器,这是我们的这个拦截器,拦截器我们先获取到当前用户信息,点一个get。好,我们或要用的将是什么?
07:01
那能调用我们这个方法,那都是我们这个远程来查的,查我们当前用户的,所以呢,我们一定是是我们登录状态,所以我们这个to里边来先获取这个ID,如果它等等那等等那的话,那说明连登录都没登录,我们就直接返回为空,否则的话,我们就来给它获取,获取的只是我们登录后的这个购物购物车数据,好把这一块拿来,那么最终呢,就来获返回的是我们这个之前正好抽取一个方法,能获取购物车里面的数据,然后接下来。我们要操作哪个购物车这一块呢?要传一个购物车要用的K,这个K呢,我们之前是这么来拼装的,K有一个前缀,再加上我们这个用户ID走,现在登录成功了,那就有用户ID,这是我们购物车的项,我们去red里边可以找到购物车里边的所有购物项,大家注意这是找到所有购物项,我们现在只要选中的这些,所以呢,我们接下来把这个返回之前。
08:04
我们来给它过滤一下cut items,点一个stream,点一个filter,我们先来做一个过滤,过滤什么呢?过滤我们每一项,每一项呢得先保证它的这个get checked这个属性呢是true的,所以呢,只要它是true的,那我们就可以来收集,把我们选所有选中的拿过来,拿过来返回的这个cart item,我们最终要返回好,我们在这那这一块就是来获取所有被选中的购物项,那除了获取我们被选中的购物项外,那现在呢,还要做一件事,因为现在拿到的这个购物项,它里边呢,包含了我们商品的价格,这个价格呢,一定不是我们rabbits里边购物车里边存的价格,因为这个价格可能是我们五天前乃至于一年前我们加入购物车的价格,但一年后呢,价格早就变了。
09:00
如果我们还用购物车里面的价格,这肯定是有问题的,所以我们要实时来查询,就像我们去买房一样,一年前我们跟销售联系,诶,我们要买房,有这个意愿,我们加入购物车,但是什么钱都没交,等我们真正要买房下订单,我们还用一年前的这个购物车价格,这肯定不合适。好,那现在呢,我们来到我们这一块,我们现在要做的另外一个问题就是我们现在filter得到了所有我们要用的结果,然后呢,我们把这个再来进行一个map映射,那将每一个东西最终呢,给它返回它要用的这个数据,我们还是返回这个item,而item里边唯一不同的就是要set price,我把这个价格我们要获取成最新的价格,要更新为更新为最新价格。那这个最新价格我们要更新,我们肯定就是要来查询购物车,不应该是查询购物车,应该是查询我们这个商品服务,我们当前这个价格现在是多少,好,我们可以在商品服务里边,我们专门来写一个查价格的方法,来到我们这儿,我们在这个APP里边,我们专门来找一个SQ info,这个control,好,这个SQ info,那现在就来查当前商品的价格,我们public直接我们来返回一个big s,我们就叫get price,我们获取商品的价格,当然你要获取哪个商品的价格,你一定得给我传SQID,那么现在呢,就来写一个get,来处理一个get请求,这个get请求呢,那就是我们要获取price,获取一个人的价格,当然这是哪个人的价格,我可以用一个路径变量来表示,好,我们来写一个pass variable路径变。
10:50
那路径变量,那么就是这一块的SQID,我们想要获取价格,那最终来返回上一个价格,那么sqf for service点一个get price,我们希望能得到这个价格,当我们这一块呢,直接有一个获取我们这个8ID,我们按照SQID直接能拿到SQ信息的,那我们这个信息里边呢,就有价格,我们直接把价格一返回就行了,好把它里边点一个get price,这是我们获取到最新的价格,有可能我们后台改了价格,所以们在这呢,要远程调用这个获取价格的方法,那么希望呢,就有一个远程调用功能。
11:32
来到我们这个购物车服务,因为购物车在返回的时候要查一个最新价,所以来到我们的购物车服务,我们购物车的远程调用里边好商品的远程调用,再来多一个价格,我们来到商品的这一块,我们将它复制过来,查价格的方法来复制过来,走,这是我们查价格,那查价格我们拿过来,然后呢,我们商品服务的整个这一块,我们价格查询的这一块路径,我也复制过来,好,现在呢,这是我们的查价格,我们也有了这个远程方法,那么在购物车里边我们来返回数据的时候,那在这儿就来查价格,那现在来注入我们的这个商品的服务,商品服务的份service我们已经注入了,那在最后好,我们来为每一个商品都来远程查价格,Get price,把当前商品的ID拿过来,点一个get SQ ID,然后呢,最终我们返回一个价格。
12:32
然后再来把这个价格还返回一下,那么现在呢,就拿到了这个最新价格,每一个商品拿到最新价格以后,我们在这儿返回了,所以我们在这一块主要做了一个更新价格,更新为最新价格,那现在我们购物车的这个服务我们就写好了,购物车这一块呢,有一个能获取当前用户所有选中的购物项,把它直接复制过来,那么希望我们的订单服务来到订单,订单这一块呢,要远程查询购物车里边所选中的购物项,而且每一个购物项都是最新价格,所以我们现在拿过来,我们在份里边希望呢,有一个购物车的远程调用,哎,那么这个呢,就叫cut分service购物车的远程调用,那先来标注一个分client,那现在要远程调用一个购物车,把之前复制的方法我先拿过来,我们远程的调用的这个购物车方法,而且呢,我们返回的是一个cut item。
13:32
我们远程呢,要调用购物车这个服务,那么返回的这个cut item,那是购物车里边的实体类,它叫cut item,当然对应我们order,我们专门呢,之前抽取了一个叫order item VO,就是购物车里边的数据属性名都一样,直接复制过来的,好,我们现在呢就让它返回成这个就行了。那我们购物车的这一块远程服务我们就写好了,我在这一块我们就拿到购物车的远程服务cut份service,好购物车的远程服务拿到at一个owa,我们把这一块呢复制过来,来到这,我们希望呢。
14:08
我们来调用这个方法获取当前用户的所有购物项数据,我们能得到我们这个it,那这是我们的第三步,我们得到了这个数据,第一步我们得到了所有的收货地址列表,然后接下来我们的第三步,那我们第二步得到这个数据以后呢,第三步我们要可以远程查询一些优惠券信息,我们说这个就不查了,我们直接用用户的积分,所以我们也可以来保存用户的积分,查询用户积分,那这个用户积分我们其实都不用远程查询,因为我们现在只要一登录,我们从这个拦截器里边拿到当前登录的这个用户里边,它直接呢有这个积分信息,咱们把这个积分拿过来直接一保存就行了,相当于每一个数据都给它里边点一个set,一保存,保存积分,这是我们的积分,然后呢,这个是我们所有的购物项数据,点一个set。
15:06
这个呢,复制过来,还有我们所有的收货地址列表,点一个set我们的address,把这个拿过来,那另外我们confirm view里边的这两个数据,我们的这一块订单总额和应付总额,这两个呢都应该是计算来的,我们现在呢,没有什么参与优惠的计算,所以我们现在的这个总额就应该是我们所有的购物项整个数量的叠加结果,那么就自己来写一个get方法,Get total。我们把这个an data我们注掉,我们给每一个呢,现在都来加上set和get set和an一个get,那么这个属性呢,Get set方法就有了,把这个复制过来,At data是来批量get set的,那么关键的这个total total呢,我们它也不用set,我们直接来重写它的get方法就行了,那这个get方法呢,那就一定是拿到所有的各项数据点一个来进行一个for each。
16:06
来写一个增强否,我们来变历,而且在变历之前,我们最好来判断一下if,如果这个A4它呢,不等于空,我们就来进行一个变历。好,我们现在拿到我们的便利数据。我们现在来遍利每一个项,然后呢,最终的总价,那就是这个数据,那就希望这我们能有一个贝个DEC,好来等于谬一个被一个DEC,那我们现在呢,总价默认先是一个零,然后我们就来进行一个计算,好我们就得来进行一个计算,这个怎么计算呢?我们拿到我们这个当前,让当前添加上我当前的这一项,这一项里边我们拿到当前的价格,我们用当前的价格乘以它的数量,因为当前价格是最新价格,然后点一个multi。
17:00
来乘以一个当前的这个数量,当前我们这个购物项我们买了几个,好这个数量呢,需要一个string类型,我们就来给它拼成一个string,我们可以直接调用它的to string方法走,那我们这个当前的这个价格乘以数量,最终得到一个返回这么的这个结果,那结果呢,它要包装成一个这一块,这一块数量呢,也是一个decma,好,我们背一个DEC,好我们把这个呢放到这儿,然后呢,这是我们乘过来的,相当于当前项的价格,我们给sum里边一加,加来的结果,因为我们要叠加,所以我们再来复值过去走。那每一项呢,最终叠加的结果我们得到以后就来给他返回,那这个就是我们订单的总额,那么这个属性呢,就可以不写了,因为我们说属性的名其实就是get set后边的这个名字,那么这个临时变量都没用过,那我们就写都不用写了,那订单的总额在这来做一个计算,来应付价格也一样,来get一个pay price,把这个应付价格呢,我们现在还是跟这个处理都一样。
18:14
那现在没有参与任何优惠信息,那总额是多少,应付就是多少,我们先放到这好,我们把这一块呢,给他也注掉,这是我们的应付价格,或者我们之间让他来返回我们调用的这个总额方法,那现在我们这个购物车里边的所有这些数据我们都准备好了,其他数据自动计算,其他数据自动计算,那我们订单确认页要用的这个数据,我们在这呢,就应该能展示,那展示完了以后,当我们来提交订单,那就是下单了,但是呢,我们这一块虽然要展示这些数据,我们在这儿呢,再来额外来加上一个数据,来加一个什么数据呢?大家来注意,那这些信息都有,但如果我们在订单的确认页,我们来下单,假设网络很慢,用户不知道网络很慢,他呢,点了一个提交订单,感觉没反应,无限次点点点点点,那可能导致我们下单很多,所以呢。
19:11
为了防止我们下单,很多在订单确认页,每一次过来我们都给他带一个唯一令牌来进行防虫,那后来呢,还会仔细来说这件事儿,所以我们现在来给它带一个order token订单的这个防虫令牌,我们把这个令牌呢也放到这儿好,我们这个呢叫防虫令牌,防虫令牌这个呢是来防重复提交的,那我们最终第五个我们的防重令牌,防重令牌这一块呢,我们在密等性章节,我们再再来仔细的来说,留一个普度。好,我们订单确认页要用的这个数据我们基本好了,那下一节课我们来测试一下,看这些数据能不能获取到。
我来说两句