00:00
接下来我们就来编写秒杀商品的定时上架功能,我专门来创建一个service,那么这个呢,就叫second kill,我们秒杀的这个SQ,它的整个定时任务scheduled。好,我们来创建一个这个定时任务,这个定时任务呢,这是我们的业务service,然后我们将以前的这个定时的一些配置,我可以专门来写一个配置类来抽取过来,那就叫scheduled conflict。Config,好,我们这个配置类呢,来写在这,它是一个configuration,然后把我们要开启的那两个功能,一个是异步,一个是我们的定时调度,那这两个功能呢,我们就开启一遍,那在这呢就不用编写了,那接下来来到我们的这个业务里边,好来加上self for街日志,那现在呢,我们这个就是商品定时上架的这个服务,诶我们这个秒杀商品,秒杀商品的咱们这个定时上架,那这个定时上架呢,我们可以这么来做,我们呢每天等我们这个服务器闲的时候定时上架。
01:07
比如我们这个每天晚上,每天晚上我们这个三点,每天晚上三点这个时候呢,不是我们高峰期,而且呢,服务器大量资源很闲置,然后呢,我们可以来上架,上架呢,我们这个最近三天需要呢秒杀的商品,那我们为什么要上架最新上三天呢?你们可以来到这个首页,如果我们来再看某一个商品的时候,比如我们这个商品,我们再看这个商品呢,今天可能不秒杀,但是我们可以给他提前预告,比如两天以后哪个时间我们这个商品会参与秒杀,所以呢,我们可以上架最近三天的,我们就可以拥有提前预告的功能,那我们这个最近三天的商品想要上架,我就来编写一个方法,我们就叫world,我们就叫upload,上架我们的这个second kill SK,而且呢,我们是最近三天的letk latest latest,我们这个3DAYS啊,我们上架最新三天的这个所有商品,那么这个上架呢,我们先来。
02:07
写一个定时任务scheduled,那既然我们这个定时任务每天晚上三点要执行,那么先来写上秒分时日月周,好把这个周的位置我们来打一个问号,然后每天晚上三点,那就是整点整分整秒,然后呢时间那就是三,这是我们每天晚上三点执行,那么现在呢,要上架的这些商品,那就是我们这个当天,因为有些商品啊,它是凌晨零点参与秒杀,这个呢,时间大家普遍呢也用的非常多,那么这个晚上呢,正好秒杀,所以呢,当天晚上凌晨零点到我们的。23:59:59的这个商品,那再一个时间再一加,那就成第二天了,所以这是当天的,我们还有第二天的,明天的,我们这个明天的商品呢,也是这个时间段,凡是这个时间段参与秒杀的商品呢,我们都要查,还有我们这个后天的,那相当于要查它的这个时间区间,它的这个作用区间,我们每一个秒杀的商品,它呢都有一个参与的这个区间,我们这有一个秒杀商品的这个关联,在这个关联里边呢,有我们这个秒杀活动的这个生效时间,那我们就要找这个活动时间能用的所有商品,但是这个晚上三点呢,稍微有一个问题,就是我们今天晚上三点,我们这个如果今天有凌晨零点的这个商品,那相当于人家已经都秒杀时间过了,我们再上架了,其实这个倒不用担心,因为今天的这个任务已经被昨天其实就扫描上架过来了,所以我们在这儿上架的话呢,由于要连续上架三天,所以重复上架我们就无需。
03:46
处理了,咱们这一块呢,要处理一个重复上架,重复上架无需处理,这一块呢,来做一个标注就行了,好,那现在呢,每天晚上三点我们来准备上架,那这个上架呢,我们专门来写一个service来做这个功能,好我们这个service那还是面向接口编程,我们先来写一个service,这个叫second kill这个秒杀的这个service,好,那这个service的接口我们先来写在这,我们再来填一个时间类,那么时间现类呢,放在employment这个包下,那们就叫second,我的service的employment实现类,这个实现类呢,它来实现我们这个接口,那叫second。
04:27
Kill service,好,我们这个实现类,我们把它加在容器中,这也是我们的业务逻辑,那来到我们这个秒杀的这个定时任务调度。我们来到这个定时任务调度里边,我们现在要做的就是我们希望呢,自动注入这个秒杀,用到我们的这个service second kill service,这个service呢,有给我们这个上架功能,好second kill service。我们来找到它,点一个我们就叫upload second kill,我们就希望呢,它有一个上架,最新三天的所有商品执行完以后呢,那就完成了,那么在这来编写一个这个方法,好,我们来再来加上它的实现,来到这加上它的实现,那么这个方法的功能那就是上架,那么想要做的第一件事情,那就是去数据库来扫描,那么最近三天哪些活动需要参与秒杀,所以第一个去扫描需要咱们这个参与秒杀的活动,由于我们这一块的这个活动,我们都要去来查我们的营销服务SMS系统里边的这些活动,所以这个呢,我们就需要远程调用我们的这个优惠系统,所以我们专门来写一个份,那么远程要调用,那我们就来开启我们远程调用功能,有一个叫enable phone cleans,我们来准备一个远程接口,来准备一个远程接口,我们放在这个phone包下,然后呢,我们来写。
05:54
成interface,那这个呢,就是来专门调用carbon phone service,好,我们来到这一块的调用phone service,那我们来标注它是一个分客户端,分client,它呢将会调用我们远程的服务这个代码,好,那我们接下来调用的第一个,我们现在来到这儿,我们先要扫描所有需要参与秒杀的这个活动,扫描最近三天,最近三天所有需要参与的秒杀活动,以及他们的这些秒杀商品信息,所以我们现在就来到我们的这个优惠服务来到这儿。
06:32
那么现在优惠服务里边来编写一个controller,那现在要查活动,我就来到SQL session里边,好来到这个SQL session来找一下。SQL session controller,那我们接下来呢,就来写上一个方法,Public,那现在呢,要返回我们就叫。Get latest,我们现在最近三天的三天的这个活动,把这个活动呢,先来获取过来,好来写一个叫get monkey,来get monkey,我们就叫LATEST3这个session,好,那现在来准备一下最近三天的这个活动,来整个return,我们先来写一个R,点一个OK,我们调用这个session service来进行查询就行了,我希望来获取这一个方法,由于我呢要获取活动,所以这个活动呢肯定有很多,那我就来写一个list,那这个list那就是我们这个活动数据,那就是这个session这个表里面的数据。
07:34
那就是second kill,我们的这个session实体类,好,我们拿到这个最近三天的所有活动,我们就叫sessions,拿到这个sessions,我们最终呢,就是要把这个来返回,我们OK,点一个put,比如put的这个就是data,那我们直接调用它的set data方法,点一个set data,我们将我们查询到的活动,我们先来准备到这,我们希望来调用这个service来实现我们这个功能,来创建出这个方法,好,我来添加上它的实现,走,那由于我们要查最近三天的每一个呢,都有一个这个活动时间,有一个start time和end time,相当于我们要调用这个时间区间来进行查询,所以我们的S语句应该是这样,Select星from from什么呢?From我们这张表查询条件呢,那就是where where,我们的这个开始时间,这是一个开始,时间必须呢,大于等于我们现在呢。
08:35
指定的一个值,比如我们现在就来指定它是二零,这个20年2月19号,那么这个凌晨零点是这个时间。然后呢,而且并且我们的这一块N的time我们要小于小于指定的时间,小于等于,小于等于什么呢?我们现在这也有一个指定的时间,比如我们来看看,那我们现在一查呢,就能查到一场活动,那就是这场活动,那这个东西我们可以写成的这个语句呢,不是这样子的,因为我们这个是直接来查他活动,那现在要查,由于我们这个最近三天,我比如现在呢,有一个当前时间,那只要我们这个开始时间是我们这个最近三天以内的,我们都应该给它查询出来,所以呢,我们现在应该写一个北吞安德的形式,好们现在来查这些东西,我们现在要按照开始时间来进行查,那where我们的这个开始时间,比如先来写一个北吞,来看这个北吞有没有来包含我们这个整点时刻,比如我们这个北屯,它然后呢,And,它如果我们是一个固定的时刻,如果包含了,那我们就应该。
09:45
查出来走好,我们现在呢是可以查出来的,那接下来我们就应该这个北的时间和and的时间,那最近三天的话,那么就应该变成比如这个是21号,21号的我们23点,23:59的这个59秒,所以我们希望呢,查到我们这个活动,只要在这个时间开始,我们都能查到。
10:11
那这个就是我们来准备用的这个SQ语句,我们把它拿过来,那么现在来直接拿到这个this,点一个来查询所有,来写一个list list里边我来传一个corrywaer,来用一个corrywaer,我们要返回的是second kill,这个second entity,然后点一个and,我们就来写一个,然后呢,它接下来指定哪一列,那么现在呢,是按照开始时间,那这个start time必须呢,等于我们指定的两个值,那接下来我们就要运算到我们这两个值,计算我们最近三天的这个时间计算计算咱们这个最近三天,那最近三天我们先拿到当前日期,比如我们来new一个date,这是我们这个当前日期,但是当前日期呢,我们现在肯定返回的是我们这个格式,比如是2020年12月。
11:07
12号13点,我们的59分16秒,那么返回的是这个时间,那么现在要做的就是我们来给他来加,加上三天,我们今天今天呢先放在这儿,还有我们明天加一天,然后呢再加两天,得到后天,所我们要做时间的计算,这个时间的计算呢,我们就可以使用JAVA8里边提供的时间API,首先呢有一个叫local date,这个local date呢,那就是只有日期的,我们看到还有一个local time,这是呢有时间的相当十分秒的date呢,就是年月日的,那还有这个date time就是十秒带年月日的,那么现在呢,相当于要计算一个时间,那我现在呢先用datet,因为我们都是最近三天我们拿到当前时间,这是我们这个当前的日期,我们给当前日期呢,我们可以来加一天,比如来调用它的plus方法,在这个plus方法里边呢,我们来可以指定来给它加上一天,那怎么来加一。
12:08
且呢,Plus里边传一个这个叫temporal amount,那这个amount我们来CTRH来打开它的实现这块呢,有一个实现类叫Du,还有我们这一块的接口,我们也都可以来使用,现在我们就拿到这个Du,我那我们现在要给它加时间,那么就来直接写一个这个direction,点一个我现在要加一天,那就是of days1,那么写一个一,那就是呢,我们来给它进行了加一天,加一天呢得到的是我们加一天的时间,然后呢,我们可以给它加两天,得到呢加两天的时间,我们在这呢可以来计算PLUS2,我们把这个计算的这个值,我们拿来合计一下看对不对,们来到单元测试里边,来到单元测试里边,我们来准备好我们这个值,好我们这三个值来把这一块呢,注掉,不用启动spring boot测试就一个普通的测试,S out,这个s out我们来打印一下当前的日期。
13:08
和他加了一天,我们相当于当前上线,然后呢,加一天上线加两天的这个商品,那我们都要上线来做一个测试,那么这一块呢,应该调用的不是这个方法,点一个plus,我们专门有一个plus days,我们来给它加上一天,那这一块呢也一样,我们要调用这个方法plus days,好我们来加上两天,那么给当前时间加一天,加两天,那就得到我们现在要用到最近三天,我们今天加上我们这个加一加二的结果,我们来看一下效果,现在呢,我们这个是21号,那么最近三天呢,那就是21 22 23,那么得到了最近三天这个时间,然后呢,我们还要查出的其实是我们最近三天所有的活动,那就是start时间,要是我们这个21号凌晨零点到23号最终的结束,所以我们最终呢,现在要拼一个这个时间,我们开始时间呢,是一个他202。
14:08
02020,然后呢,凌晨零点点点,然后呢,结束时间是加了两天的这个时间,然后呢,它是23点,我们这儿来写一个23:59:59,这是我们结束的时间,所以只要开始时间呢,在我们这个范围内,我们都应该给他商品上架,那这个范围我们又来怎么得,那么现在呢,还有一个叫local time,来看这个local time,首先这个凌晨零点的得法呢,有一个local time。我们能指定一个叫me,我们最小的这个时间,然后呢,还有一个local time的这个叫max最大的时间,我们正好用一下这个日期API来out,来看一下这个命和max,然后我们把它两个一组合,那就行了,命和max呢,那现在就是这样,那现在我们来重新再来打印一下走。
15:02
那最小时间呢,那就是零分零秒,然后呢,最大时间23时啊我们现在呢,得到这个时间,那接下来这两个一组合,那就是开始,这两个一组合呢,那就是结束,我们查这个区间范围,所以我们想要组合呢,组合成这样一个,有一个叫local date time,那既有时间还有日期点一个我们现在要组合用一个off,把两个呢时间合在一起,一组合,第一个呢传一个date,我们看到这个off的时候,它呢有两个参数,一个呢传一个local date,一个传一个local time,那这个local date呢,那就是我们当前的这个时间,然后加上它的这个最小时间,这个最小时间,然后呢得到我们这个起始时间,这是start时间,然后呢,再加上那么这个local that time,再来一个off,那现在呢当前时间,那就是加两天后的这个时间,再加上一个最大时间,那就是。
16:03
它的结束时间end,那么只要活动呢,在这个区间里边的,我们都应该查出来,好,那么得到这两个时间,我们来可以来看一下,打印一下start和打印一下我们的end,我们现在来做一个测试,走好我们现在得到了这个时间,起始呢是2月21号凌晨零点,我们这个起始,然后呢,结束是23:59:59,然后呢,我们接下来把这两个时间应该作为我们的日期范围,北屯的这个日期范围,那就是只要我们开始时间,咱们这个三天以内我们都能给它上架,好我们就把这个方法呢,直接来抽取过来,来到我们这个service,这我们来得到一个最近三天的这个起始和结束时间,比如我来写一个private,返回第一个local data time,就是start time来返回第一个起始时间,那起始时间我们从我们的这个单元测试里边拿到,这是我们这个当前时间,然后加一个最小时间,那就得到了我们的。
17:03
起始时间,好,我们在这儿CTRLC复制过来,把这个呢,最终一返回return一个start,然后我们当前时间,那就是local date,我们当前日期点一个no,我得到当前日期,然后呢,再拿到一个当前时间local time,点一个me,好,我们现在拿到当前的最小时间,两个一组合,这是起始时间,然后再来得一个结束时间local data time。我的N的派最近三天的这个结束时间,这个结束时间呢也一样得到我们这个当前时间,因为要最近三天,所以我们给它加上一个二,好,我们最终呢,得到一个加二的结果,我们我们自己再来手敲一遍,点一个plus day来给它加上两天,那加两天以后呢,得到我们现在的这个时间,然后我们最终的结束时间local date time,点一个off,传一个我们的local date date呢,那就是这个日期再来传一个local time,这个时间我们就来写一个local time,那现在呢,应该是一个max,我们的结束时间在这啊,最终得到它return一个off,那现在呢,我们就得到了这两个时间start和under time,那么接下来呢,想要获取我们调到这个SQL语句,就应该是这样,好把这个SQL语句拿来,那这个起始和结束时间,那么最好呢,给它格式化一下,我们可以调用这个start方。
18:33
方法,我们这个时间,时间呢有一个format格式化,格式化里边呢,传一个我们的data time format,那就是传一个它,那这个时间日期的格式化,我们就把这个form拿来,然后呢,这有一个我们的这个指定格式化的字符串,那现在呢,这个还是一个静态方法们也不用创建类,那么就把它直接拿过来,那调用这个format data time format,我们自己来导入过来,Data time format,好,就是它点一个pon,我们来指定一个格式,YYYY-MM-DD,我们跟数据库里边的时间呢保持一致,这都是年月日,然后呢,十分秒HH。
19:16
冒号我们的MM分还有一个秒,好,我们就按照这个最终得到我们一个格式化后的日期,那最终呢,希望返回一个格式化后的日期,那下边的这个也一样,CTRLC复制过来,把我们的这个来做一个格式化,来最终返回格式化后的日期。包括我们来测一下我们的这个格式化好不好用CTRLC,我们来到我们的单元测试类里边,我们把这一块呢全部来注掉,来测一下我们格式化的效果,看能不能用到这个格式化,直接s out,我们的format来做一个测试,这一块说我们这个service有问题,我们把service呢全部写完以后再来做一个测试,我们把这个service这一块注掉,先让整个测试呢先运行起来。
20:06
来到我们的测试类里边,好,我们现在再来运行测试,那么现在呢,得到的这个时间那就是没问题的,跟数据库呢是对应的,那来到我们的这个service里边。那最终我们想要查询那它的这个时间范围,那就是我们指定的start time,我们直接拿过来,我们调用start time得到的这个时间和调用under time得到的这个时间,那这就是我们要北的整个时间区间,最终呢,查出一个list,这就是我们所有的活动,好,那这个所有的活动呢,我们就可以查出来了。那下一节课我们继续再来查,我们这个所有活动涉及到的所有商品,我们给他来进行一个上架。
我来说两句