00:00
接下来我们再来编写在我们商品详情页,来展示我们商品的秒杀预告的这个功能,那这个功能呢,我们可以在页面一加载完成以后,给我们的秒杀服务发送AJS请求,来查一下那们当前这个商品有没有参与秒杀,这是第一个,第二个我们再来展示这个详情页,展示其他数据的时候,我们也可以让我们商品服务自己发一个远程调用去来查询我们的秒杀服务,那么现在呢,就来采取我们第二种方式来做一个远程调用,那来到我们这个商品服务,我们来看一下,在我们这个商品服务里边呢,我们有一个controller item controller它呢是来查询当前SQ的详情,我们调用了service,我们查询了非常多的步骤,我们查询SQ的基本信息,Squ的各种信息等等都查完了以后呢,我们额外当然也可以再来加一个第三步来查询当前SQ,查询当前我们这个SQ是否参与秒杀优惠,参与咱们这个秒杀优惠,那如果参与的。
01:00
的话呢,我们就把这个秒杀优惠信息我们也封装一下,那我们呢,就接下来先来给我们的秒杀服务,我们来写一个controller,这个controller呢,我们还是返回R对象,我们呢就叫我们SQ的这个秒杀信息second q,我们的info,我们获取我们当前SQ的这个秒杀信息get好,我们整个的请求我们来约定一下,那请求的路径我们就叫get man,那既然是按照SQ来查的,我们就叫SQ的second kill,我们看一下我们当前SQ有没有什么秒杀预告,然后带上我们的SQID。来拿到我们的这一块信息,然后接下来我们这一块呢,先获取一个SQID,我们商品的ID来写一个at,一个pass verb,我们是路径变量,那路径变量这一块呢,就是一个它,然后得到这个以后,接下来我们再来return一个R,点一个OK,我们想要来查询这个信息,当然我们秒杀的每一个商品的详细信息,我们都是存到red里边,在SQS这个里边封装着,这个呢是我们当前封装的一个to,所以我们接下来就来准备这么一个to就行了,能给他返回也是返回这个。
02:15
那我们希望呢,就有一个业务second kill这个service点一个能获取我们当前SQ的这个秒杀信息,然后我们来带一个SQID,但是这个ID呢,最终给我们来返回这个秒杀用的这个to数据,好to,然后我们把这个to呢,最后往出一返回就行了。CTRLC来复制过来,好,我们现在就来编写这个方法,那这个方法呢,我们来创建出它的实现,这获取某一个SKU商品的秒杀预告信息,好,我们现在呢就来想办法来查一下这个商品,但我们现在发现呢,如果我们按照SQID来查,不好查,因为SQID呢,前面还拼了一个场次ID,但没关系,我们的这个second k sqs它呢是一个哈希结构,我们可以拿到哈希里边的所有K来匹配一下,如果呢,有我这个SQID的,那我们就把这个内容拿出来一返回就行了,所以我们现在要做的第一件事情,那就是我们来找到。
03:17
找到所有需要参与秒杀的我们这个参与秒杀的咱们这个商品的K,咱们这个K信息,这个K信息呢,我们使用red temp点一个options for哈希,然后呢,我们当然是来获取,我们来点一个case,就能获取到它的这个哈希里边的所有K,当然我们这个后来要经常操作,我们就来B我们的这个哈希操作,绑定我们这个哈希操作,我们要用的key呢,那就是我们这个固定的second ksqs,把这个前缀我们来拿来,我们就来获取这个K里边,由于它呢是一个哈希操作,好我们把这个哈希操作呢拿过来,然后这个哈希操作呢,它返回的都是string string,封装的都是string string,好们把这个string string我们来先写好,然后接下来我们先来通过这个哈希操作,我们来拿到它里边的所有的kiss集合,那这呢有一个kiss,我们先拿到所有的kiss这个集合,然后呢,我们在这个集合里边。
04:17
来判断有没有包含当前商品的这个K就行了,所以这个集合里边肯定拿到的是六杠四,六杠一,四杠二,那就是这三个值,那接下来我们就来变利这个集何当变历之前,我们还是判断一下K点一个不等于空,我们先来让它不等于空,并且呢,它的这个长度是有的,K点一个,我们的size是大于零的,我们才有必要呢来做下面的事情。好,接下来我们就来遍利我们case里边的这个集合,Case点一个来写一个for each,我们来直接做一个遍历,怎么遍历呢?我们应该看我们当前获取到的这个K肯定是六杠四,六杠一,四杠二这些,它呢有没有匹配我们当前的SQID与我们这个K的值,它是这样子的,所以我们可以来写一个正则判断,但是大家注意,我们使用正则呢,是把所有的K拿到以后,能在我们的代码里边正则,那我们在我们这个线上环境,我们不能在这儿发命令,让他red来做一个正则匹配,这样呢是太浪费red的。
05:17
这个性能了,好,我们现在呢,就自己来在下边来做一个正则,这个正则呢,我们来可以写一个表达式,比如们这个正则表达式呢,是这样子的,那么这个正则表达式呢,应该这么来写,首先这个D代表呢,我们匹配一个数字,前面呢这个数字是场次信息,然后接下来再来杠一个杠后边呢,我们是带了当前商品的信息,所以我们可以把这个商品的ID我们给这一加,所以只要呢前边是一个数字,然后杠后边呢带了我们当前的这个商品,无论你是哪个场次的,那说明就是匹配的,所以我们接下来就要匹配这个正则信息,当然每一个人呢都是要这么匹配的,我们把这个正则呢,就放在我们便利的最前面,不要每一次便利都生成这么一个spring,好,那接下来呢,我们就来做一件事情来使用这个匹配pattern,我们直接拿到他的pattern来调用一个match来进行匹配,匹配什么呢?我们先来传入正则表达式,然后接下来我们就要按拿这个key来进行匹配,如果这个匹配上if。
06:18
它呢返回的是一个true false,如果我们的这个正则匹配上了,那匹配上了,那说明这个呢,就是我们要用的这个数据,所以我们直接可以把它这个数据的内容我们返回出来就行了,那这个哈希操作拿来点一个我们调用一个方法就叫get获取他的这个成员信息,Get他用的K呢,当然就是我们的这个K,然后呢拿到一个string,这就是我们真正的从这个哈希options里边按照我们匹配上的这个K,我们现在模式匹配上了,匹配上以后呢,我们拿到这个string,这是一个杰S,然后这个string呢,我们最终封装成这个样子,所以我们现在呢,就来匹配一下,我们使用这个杰森,点一个pass object,我们把这个封装来的这个数据呢已处理,我们把这个杰森呢,封装成我们想要返回的second kill,我们的这个信息,好,那这个信息呢,这就是我们的这一块内容,那我们把这一块呢,直接来返回,这是我们second kill这个信息。
07:18
啊,这个信息呢,我们来直接一返回就行了,Return return,我们要返回的呢,那就是它走,那如果我们全都匹配上了,我们就返回,否则呢,我们返回的就是那没问题,但现在呢,还有另外一个问题,因为我们现在呢,是获取当前商品的这个预告信息,这个预告信息里边呢,我们给它封装返回的还带了这个随机。秒杀随机码我们一般给页面呢,不应该返回,但什么时候返回,所以我们当前是这个秒杀时间了,我们就给他返回这个随机码,不是了,我们就给它不返回,所以我们这个随机码呢,我们可以来处理一下,来判断一下我们这个当前时间是不是合适的这个秒杀时间,那么从这个里边拿到它的开始时间,有一个start time,这start time我们再来拿到一个结束时间,我们就来判断一下,我们来判断一下当前时间,这是我们服务器你在这儿给我进行远程调用的当前时间,我如果你正好调用的这个当前时间,这个当前时间呢,正好是大于等于你的开始时间。
08:23
这儿呢,是有一个开始时间,我们把这个当前时间我们也拿过来,好,这是当前时间。Current,那我们这个当前时间呢,如果大于等于我们的开始时间,并且呢,我们这个小于等于我们的结束时间,那我们直接从这个to里边获取就行了,Get一个end time,那说明呢,它是在时间范围内的,那在时间范围内呢,我们才有用,否则的话,只要不在这个时间范围内,我们就应该把我们的这一块的随机码,我可以给他返回的时候直接滞空,那这样呢,你就看不到我们的这个随机码了,这是我们说的这一块的处理,好我们把这一块的这个处理我们也拿过来放到这。
09:07
把这一块呢去掉好,现在我们得到了这一块的内容以后,我们的远程请求就准备好了,那接下来呢,别人就去来给我们发请求,就能得到了我们这个数据信息,那接下来来到我们的商品服务,那们商品服务呢,想要查询详情的时候,产询详情在这,那他除了查这些信息,还要查我们秒杀服务的优惠,所以我们再商品服务呢,再来写一个远程调用,这个远程调用呢,调用的就是我们秒杀服务second kill phone service,好,我们就来编写一个这个它呢是一个我们指定的接口,那写一个phone class,好,我们现在呢是一个分客户端,客户端呢去来调用我们秒杀服务的方法,那调用哪个方法呢?我们直接把秒杀服务的这个方法我们拿过来。咱们这个秒杀服务的controlrler里边,我们重新编写了一个查询当前SQID的这个信息,CTRLC,我们来到这个远程调用复制过来,那整个路径呢也是完整的,那就没问题,好,那么接下来来到我们的这个服务里边,我们接下来注入我们的这个远程调用这个功能服务,那现在呢是second kill,那么这个秒杀服务的远程调用,把这个秒杀服务的这个远程服务拿过来,那拿过来以后,接下来我们在这呢,就来进行一个获取,点一个我们想要获取SPU。
10:36
Second kill info这个信息我们传入当前的SQID,这个SQID呢,我们在这直接有我们调的这个方法就传了SQID,我们相当于调它最终呢返回一个R对象,那这个R对象里边呢,有我们秒杀要用的这些数据,所以这个数据呢,我们想要用,我们在这也得封装一下,那这个封装呢,我们就叫second kill ino,我们的VO,这个VO信息我们可以把我们red里边这一块的这个匹配拿过来,由于远程呢给我们返回的是我们red的这个数据信息,那么这个VO的位置写错了,放到这儿,然后我们的远程调用是来到商品服务的,所以我来到商品服务里边,我们给商品服务准备来创建一个VO来接收这个数据,Second kill,我们的info VO,好,那这个VO里边的数据呢,应该是这样子的,我们来写一个按特data,我们把我们远程服务给我们传来的所有数据。
11:36
我们全部接过来就行了,这个数据呢,包含我们所有的这些信息,我们全部拿过来,但我们这一块就可以不用了,SQ的详细信息,我们本来就是商品服务,我们查的呢,可能比它还精确,所以我们现在呢,就只要我们这几个,我们把这几个呢直接全部复制过来,这就是我们秒杀的这个详细信息,我们在这已复制所有属序名呢都保持一样,直接复制过来那就没问题了,我们按data get set方法也加了,那来到我们的service这一块,那service呢,现在我们的服务调用了我们远程服务功能,那来判断一下,如果远程服务的get code是等等零,那就一切都是成功的,否则的话呢,那就是失败的。好在这做一个判断,如果get code等等零,那如果一切正常的话,我们拿到它的这个数据信息,直接来get data,因为我们呢,本身就是远程服务呢,给data里边我们放的数据来确认一下啊没问题,它放到。
12:36
那这个数据呢,是我们现在抽取的这个类型的second kill,那我们就来写一个用一个type reference,好,我们要封装的类型就是这个类型,然后我们来把远程服务返回的数据拿到,那拿到这个数据以后呢,接下来我们就可以封装给页面要用的这个VO里边SQ item VO,这个VO里边呢,我们再多添一个字段,如果他有这个秒杀信息,我们就叫second kill,英fo VO o我们就叫second kill info,这就是我们表示当前商品的这个秒杀优惠信息,当前商品的秒杀优惠信息。
13:18
那这个优惠信息呢,我们拿到这以后,好,我们来到这来进行一个远程调用,那得到我们这个数据以后呢,我们就直接来set上就行了,SKU item,这个VO,点一个set,我们的second kill,我们的这个info,把这个拿过来,CTRLC复制过来,当然我们整个东西呢,也应该是像别人一样,是一个异步调用,Compable future,点一个run as anthnic来以一个异步的方式来运行我们的这个任务,我们把我们整个任务的功能CTRLX来剪过来,好,我们整个异步任务提交给我们这个线程池,那我们这个异步任务呢,运行完了以后。这是我们的second kill,我们的这个秒杀的future这个信息,这个运行完了以后呢,我们才可以来整体返回,所以我们在这来加一个所有的异步任务都运行完以后,然后我们来给页面整体返回,那接下来来到页面就直接来展示就行了,来到我们这个页面模板这一块,好,这是我们这个页面信息,我们来在哪一块展示呢?比如他这之前有一个字叫预约这个享受资格,把这个字呢,我们来查一下在哪,我们把它的这个位置,我们来改成显示我们这个秒杀预告信息的CTRLC。
14:34
好,我们来CTRLF,我们来找一下,那就在这这一块呢,我们来为了秒杀预告,明显期间我们就叫color read,好我们秒杀预告呢,我们来判断一下我们要做什么,之前我们先t if们,因为当前页面呢,是我们这个item信息里边有item里边呢有second kill,我们这个秒杀信息,如果它不等于空了,那我们才有必要呢来做下边的这个事情,那这个下边这个事情呢,我们就来给他预告一下我们这个秒杀的这个时间,所们现在双中括号来Dollar符大括号直接来取一下这个时间,从item里边它呢有一个second,这个kill info,这个info里边呢,我们有一个秒杀时间,我们可以来确认一下,在这里边,那有一个这个秒杀的开始时间,这个开始时间呢,在这好我CTRLC复制一下,所以我们在这呢,预告一下它的这个开始时间,我们就直接先在这儿来简单一显示,我们一会来改页面效果同样的。
15:35
那我们将我们的秒杀服务以及我们这个商品服务我们都重新启动一下,因为我们又修改了代码,也加了这个页面功能,好我们现在来做一个整体测试,那只要我们的这个商品当前呢,有秒杀参与的这个信息,我们就会在这儿呢进行展示,来等一下我们微服务的整个启动,好现在我们这个服务呢都启动成功,包括我们这个商品服务也启动成功,来看一下我们当前有没有秒杀预告的商品,那先来我们red里边124这几个商品呢,都有秒杀预告信息,正好呢,这是二号,我来刷新一下,这服务呢,还没有启动稳定,我们稍等一下,我们现在再来刷新一下,来看一下我们页面的整个效果,那现在呢,我发现,诶我们这一块呢,确实有一个我们秒杀的这个时间信息,只不过这个时间呢,是我们的这一串数字,所以我们应该给它格式化变一下,把这个数字怎么变呢?们来参照SIM的官方文档,首先呢,我们应该把这个数字。
16:35
转成日期,然后再格式化,我们来到这个文档,这个附录里边,我们专门呢这一块有针对日期的转换,然后呢,特别是这一块,诶我们正好停在message这,那么这呢还有一个演示,如我们可以来创建一些对象,所以我们现在要做的两件事情,先把这个数字转成我们这个日期,转成日期以后呢,我们才可以使用这个日期工具来进行一个format格式化操作,好我们现在呢,就来做一个这个事情来到这,我们的整个写法呢,应该是这样子的,来先来写new一个,我们要创建一个日期,这个日期的全类名应该是这个Java YouTube的这个date,我们来创建我们这个日期,点一个YouTube,点一个date,来创建一个这个对象,那创建这个对象的时候呢,我们可以给它传入我们当前的这个时间,比如我们这个时间,我们来测试一下CRC这个时间我们来放到这点一个呢,它有一个start time们来照这来找一下这个时间,好我们以前查的这一块。
17:35
把它的开始时间我们在这儿来复制过来,说明呢,我们这儿有一个开始时间来创建成这个日期对象,来创建成这个日期对象以后,我们先来CTRLF9,那先来保证我这个日期对象呢,它没有出错,来看一下我们来到页面,我来刷新好页面呢,这确实有日期对象,然后接下来把这个对象呢,再来做一个格式化,好我们接下来来做一个格式化,这个格式化呢,应该是我们把整个创建的日期对象,我CTRLX剪过来,然后接下来我们要调用这个date,那就是井号date,好我们来写一个井号date点一个,然后呢,它要调用一个方法叫format来format要格式化,格式化的呢,就是我们前一个的这个日期要格式化成的效果,那就是YYYY。
18:24
杠MM-DD年月日,还有10HH风以及秒,我们现在呢,把这个信息格式化以后,CTRLF9来重新刷新一下,我们来看一下我们的页面效果来刷新,那这一块呢,就展示来我们这个商品呢,是在2月22号八点呢,开始秒杀来确定一下,那这个呢是一个二号商品,我们在后台管理系统里边,那么这个二号商品呢,它肯定有一个这个时间。我们这个八点八点我们来看一下关联了一个商品ID是二没问题,所以呢,我们现在确定呢有一个秒杀时间,但是这一块的细节呢,我们还要重新来修整一下,大家看我们这个时间不同,应该显示的不一样,如果说我们的这个时间还没到这个时间,我们给他提前说我们这个秒杀预计在这个时候秒杀,如果我们这个时间呢,正好到了这个时间,而且在它的秒杀范围区间,我们可以给他显示正在秒杀它的价格是多少,如果我们这个过了这个时间,它的这个秒杀范围都已经过了,那么可以什么都不显示,所我们在这儿呢,应该是三种不同的情况,那接下来我们就来分这三种情况啊,每一种情况呢,我们都来准备一个SPA,首先第一个SP,我们来判断一下TF。
19:41
由于我们现在呢,不等于空能进到这个里边,那就没问题了,我们接下来再来Dollar福大括号,我们先来判断一下item,点一个second kill,我们的这个info,它有一个呢,Start time,它的这个开始时间,如果我们当前时间呢,比开始时间还小,我们就来显示预告信息,这个呢就是预告信息好,我们在这儿来剪切过来放到这儿,然后呢,我们这个商品预计在这个我们这个商品。
20:11
将会在这个时间,然后呢,进行秒杀,来写一个进行秒杀来给一个提示。所以我们在这来写一个判断,如果呢,这是这个开始时间,这个时间呢,比我们当前的这个时间好,我们来拿一个当前时间,当前时间呢,我们直接可以new一个date,这个date呢,我们还得用Java YouTube,但是我们可以直接拿它这一块的工具类。Data里边呢,有一个create now,那这就是我们这个当前时间,好,我们直接拿这个当前时间。CTRLC,那么这一块呢,得到当前时间点一个,因为这个当前时间呢,是一个date类型的,所以呢,它也有一个数字类型的这个time点一个完调用一个方法叫get time,拿到它的这个数字时间,这个数字时间呢小于我们这个时间,那说明呢,我们这个商品呢,将会在这个时候秒杀,这是第一种情况,第二种情况我们再来写一个SPA。
21:09
如果说我们这个时间正好在这个区间以内,所以我们现在呢,再来写一个PHF,我们就给它显示秒杀价格THF,我们当前时间呢,还是这个,哎,这是我们当前时间,我们拿一下这个当前时间,当前时间THF,我们来写一个Dollar大括号当前时间,然后呢,大于等于我们这个开始时间,并且好,我们还有一个并且,并且呢,我们当前时间于等于CTRLC,当前时间呢,小于等于我们的结束时间,我们把这一块拿过来,CTRLC。在这儿。点一个N的time,这是结束时间,那然后呢,我就来给它显示这个价格,秒杀价,秒杀价价格呢是多少?来双重括号刀了福大括号,我来给它进行一个展示,这个价格呢,在我们返回的数据里边,我们直接呢有一个叫。
22:11
Second kill price好,我们拿过来,在这我们来判断一下,我们这个展示呢还是一样,我们来使用格式化工具,我们把这一块的整个价格我们来格式化一下,我们现在是这个价格,我们来看一下我们格式化工具来到这一块,我们使用numbers们来进行一个format们应该format一个DEC,好,Format一个decem,我们来调用这个方法,CTRLC直接复制过来。我们现在来格式化一个这个价格走,我们要格式化的这个价格,那就是我们当前商品item,当前我们秒杀的这个优惠信息,我们在SQ second这个info里边有优惠信息,这个优惠信息里边呢,有它的这个秒杀价格,所以我们在这来秒杀价格,秒杀价格呢,整数位最少有一位,保留两位小数就行了,这是我们的秒杀价,如果不是这两种情况,那什么都不显示,所以我来CTRLF9。
23:06
来看一下,那现在一号商品呢,秒杀价,那就在这儿确定没问题,所以我们这个时间呢是没。没问题的,包括我们现在来来到首页,首页也应该链接过去,如果他正在秒杀,我来点一个,那直接来到我们这个商品详情,来到我们这个首页里边,首页里边我们在这展示的时候来给整个大来可以写一个单击事件,把那一个事件如果一触发以后,location.ref我们让它跳转到一个位置,什么位置呢?我们来加上我们这个位置,我们这个位置呢,也是一个单引号,当然我们现在得转移。我们现在的位置应该是HTTP冒号双斜杠,我们的item,我们来看一下我们的这个详情页,是item,点一个什么当前SQID试体,那就是我们去几号的这一块把HTTP我们复制过来,然后呢,这一块的整个一,我们把这个地址好我们拿过来,我们先放在这先写好,那这块的整个一它呢就应该变成我们这个SQ的ID,那我们把这个直接先拼过来,挖一个h ref,等于等于我们把要拼的串呢拿过来,CTRLX好,我们来剪过来这个串,然后呢,这一块我们来拼上,拼上呢我们当前的item。
24:25
当前item点一个,我们肯定知道当前正在秒杀商品的这个ID,我们在这来看一下,我们在这查的时候呢,直接在商品的详情里边也有这个SQID,我们直接item点一个SQID,那就要跳到这,然后呢,只要我们1.onclick。我们安克立的这一块location开ref,我们就来给它拼接上我们的这个ref这个值来这一块的拼接呢,我们现在要这么来写,我们使用双引号一分割好动态拼接h ref,好,现在我们这块呢就写好了CTRLF9,我们把页面呢重新编译一下,们来到首页再来确认一下。
25:05
我们来访问果粒email首页,好,我们来刷新,来点一个这个页面点过来,因为我们是在Li上绑的,来右键检查元素,确定这个Li on click。一点以后来到这儿,只不过我们发现呢,这些双斜杠这个呢已经被转移过来了,所以我们来到这儿呢,重新来修改一下,我们也不要让它在这儿呢,直接来跳转了,我来写一个方法,就叫ref,你给我来调这个方法,To ref去一个指定的地址,当然你是一个SQID,你给我传一个SQID,我呢自个儿给你跳到我们指定的位置,然后呢,你在这只需要来调我们的方法就行了,好,我们把这一块呢去掉。来到我们这一块,那我们现在on click以后就直接来调用我们的two re EF这个方法,这个方法里边呢,我们来接收一个SQID,好把这个SQID来传进来,那就是item,点一个SQID。
26:06
SQID们以前呢取过,那拿到这个数据以后,我们在这少了一个双引号,好,那接下来这个拿到以后呢,我们就应该来去一个跳转location,点一个HRF来给它指定一个位置,这个位置呢,那就是HTTP冒号双斜杠item,点一个鼓力ma.com,那下边呢是当前的SQID,加上SID再来加上我们的点2HTML。来重新编辑一下我们这个页面效果好,我再来做一个刷新,现在我们来重新点击,那我们就能跳到这一块,那就有我们的秒杀价格,现在这两个页面呢,就写好了。
我来说两句