00:01
各位同学大家好,咱们下面继续来开发上移通项目,之前呢,咱们把预约挂号的相关功能已经实现出来了,那下面我们来开发另外一个功能,这个功能就叫做就医提醒。什么叫就医提醒呢?给大家解释一下,比如咱们现在完成了挂号的预约,已经完成了支付,那这里边呢,比如说我们今天呢,要进行要去那个医院看病了,那这个时候呢,我们系统是不是可以给我们这个用户发一个短息,或者发一个消息提醒他今天要去就诊了,所以咱们就做这个就医提醒,比如咱们现在预定一个规则,我们在每天八点的时候去执行一下这个方法,让他给我们就诊人发一个信息,告诉他今天要去就诊,咱们就来做这个就医提醒功能。那这功能怎么实现呢?在这过程中我们就要用到一个技术,这个技术就叫做定时任务,咱们通过定时任务把这功能做实现,那什么叫定时任务呢?这个东西很好理解,给大家举个例子,比如说各位同学应该都用过这个闹钟,这个东西每天在一个固定时间,闹钟是会响了,比如咱约定每天早晨七点我闹钟响,然后我起床,然后进行上班,这个就是一个定时任务的典型场景,而我们现在就通过定时任务让他在每天八点去执行咱的方法,提醒用户进行这个就诊,比如咱们可以发个短信,或者说做一些其他操作,那在下面就来完成这个功能,那功能怎么做?首先第一部分我们先创建一个新的模块,这个模块呢,我在里边已经创建过了,就是我里边的这个模块,咱们看一下叫service task,这作为咱们的定时任务模块,然后模块创建之后呢,在里边。
01:54
我们先一种依赖,因为后面我们要用到这个就是rub MQ的东西,所以咱们把这个MQ的依赖给它先引进来。
02:04
那我来做个引入rabbit u,这是我们做的第一步,然后做到之后呢,咱们在这个项目的配置文件中配置出它相关的内容,这个内容我从课件中给它就直接复制过来,然后咱们看一下第一个端括号。包括它的服务名字,包括na的地址,以及抓MQ的替换地址,这样的话,这个咱就完成了,然后完成之后呢,下面我们创建它的启动类,在启动类中把它的结构给它写出来,我在里边咱们把包做个创建。我们写一个com.at硅谷点预约挂号点上这个。Task,然后在里边呢,创建出来这个启动类,我们叫service task,在行类上边加上它相关的注解,因为这个过程中呢,咱们不需要操作数据库,所以让它的数据源不进行自动加载。咱们把这个。
03:08
Data source auto configuration给它加进去,然后加上这个注册到注册中心的这个内容,另外我们加一个包扫描comment sc。里边加一个base package,然后加上com.AP硅谷,所以现在把这结构写出来了,写完之后里边加上它这个问方法。所以这是关于我们创建的这么一个项目的结构,然后项目结构创建之后呢,咱们下面在里边来编写这个定时任务的相关内容,那我们看一下这个我们该怎么去做。那咱们首先呢,先在之前我们那个rubic MQ的常量类中先加上几个常量,为了一会儿发送消息做准备,那我们先找到这个传能类,在com里边的rabbit YouTube里边有这么一个类,就是这个类,然后在里边加上它这些,这个内容就是咱们定时任务中的这些常量,为了一会儿进行使用,然后加上之后呢,就是这里边我们在这个task和项目中加上一个定时任务这个类,那我在里边写一下。
04:19
给各位说一下这个特点到底什么样的,首先里边呢,比如说我先创建一个包,比如这个包啊,我就叫做schedule,就是咱做这个定任务,然后在schedule里边呢,我给它创建一个类,我就叫schedule task,在这个类上边首先加个注解,这个commentent,就是把它交给死润定管理,然后加上注解之后呢,在这类上边我们需要再加上另外一个注解,给大家写一下。这个注解叫做an able schedule,表示开启咱们这个就是定时任务操作,然后写完之后呢,在里边我们可以加上这个定时任务方法,比如咱们约定在每天的八点去执行咱这方法,做这个就是就医的这么一个。
05:13
提醒的一个功能,所以咱们现在就来写个方法,那这方法怎么做呢?首先我们就要加个注解,这注解就叫做筛掉的这个注解,然后在注解里边呢,我们需要加上一个属性,这属性叫做N,然后里边加这个值,那这CN什么意思呢?在里边解释一下啊,就是这个可肉N呢CN。它是一种表达式,通过这个表达式我们能设置它里边这个执行的这么一个时间,或者说执行的间隔,这单约定在每天的这个八点执行,那通过课程表达式把它可以设置,那这个咱就来说,我先把这方法创建出来,咱们来一个public we,比如我叫这个task,这个就是提醒这个就诊人啊,咱叫patient。
06:07
这是我们写个方法,然后在方法中呢,咱就可以调那个rubic MQ的方法,让他发送一个MQ消息,或者你直接调用咱们思维中的方法也可以,那我就调这个rub MQ,咱把那个MQ给它注进来。我们来一个private rabbit service,咱们先多注入,然后注入之后呢,调用rabbit service里面那个send message方法,在方法中传入它的相关参数,因为刚才我们写这个常用类,首先我们写第一个就是里边那个charge,里边我们找这个task。然后里边我们再写第二个这个参数啊,咱们来一个MQ点上里面这个就是。Root这个PASS8,然后第三是消息,咱们先来一个空,让它发送里边的这么一个send message,通过MQ发一个消息,然后发完消息之后,现在咱这结构就写出来了,写完之后呢,在可里边来设置咱们的表达式,设置它的执行间隔。
07:17
那这表达式怎么来写呢?给大家说一下啊,这表达式我强调不需要各位记,咱们通过网络上能找到很多在线生成课程表达式的工具,那我这里边给大家提前打开这个工具,当然工具肯定不仅限于我写的这个,在网络中有很多这种工具,那咱就以它为例给大家自我介绍。然后说一下这表达式怎么去用,其实很简单,咱们看一下啊,首先第一个课程表达式还有一个叫法,它也叫做妻子表达式,或者说期域表达式,什么叫区域?你看里面的值啊,年、周、月、日、小时、分秒,是不是一共有七个部分,这叫区域表达式,每部分代表不同结构,比如说咱们现在约定一个值,比如我这么写。
08:06
大家看啊,我这么来做,你看里面表达式最终就是这个结果,咱最后一位一边可以不用关注,也就是当前这个年,那你看这个结构啊,这什么意思呢?咱看它这个运行结果,你看啊,16:56:30 57分,57分30秒,58分,58分30秒59分,各位应该能看到什么意思,是不是就是每隔30秒让我们这个执行一次,所以这就是一种表达式的写法,那比如说咱可以把它直接复制过来到我们的这里边。但是复制之后呢,有一点各位注意啊,在咱们这个就是筛掉这里边写的表达式,它支持的只是六位,你不能写七位,这里生成是不是有七位,最后一位不要写,因为它不支持,因为咱默认就是当前年,这各位注意一下啊,就是从问号这里边写到前面部分,这就表示它会每隔30秒就执行一次,这是它一个使用,比如说咱可以再试一个,按照咱的约定,咱们约定是不是在每天八点去执行啊,那咱看怎么做啊,就是秒和分钟不需要变,然后呢,来到小时的地方,每天八点咱是不能指定这个时间,八点是不是在这里,那大家看啊,目前的效果你看啊,3月5号八点,3月6号八点,3月7号八点,3月8号八点,每天八点是不是执行啊,所以它的表达式就是里边的这个结构。
09:33
这各位注意啊,我把这个给各位也是分过来。所以咱们通过这个在线生成工具,各位能把表达式给它写出来,一会儿咱就写它,因为这个我们测试方便啊,但实际中咱写的肯定是这个表达式,让他在每天八点去执行,用这个咱做到,所以现在把这个给各位就写出来了,关于他这个课程表达式。然后这个选完之后呢,咱们现在把这个task模块已经完成了,完成之后呢,当咱一发送消息,那这个时候呢,我可以在我的OS里边呢,去接收到这个发送消息,然后咱们调用方法,最终做个实现,那我现在在里边就接收一下,咱们就添加一个MQ的一个监听,我在里边实现一下啊首先这个就是O的里边的,咱们先建个包,这个包我就叫这个receive。
10:29
然后写一下啊,Receive。Receive,然后在receive里边,咱们给它创建一个类,用于监听MQ这个消息,比如我叫这个order receive。这个写完之后,在上面我们加上它替换注解,就是comment,然后加上之后里边加上监听,那监听的话,我就从我课件中把它就直接复制过来了啊,就是里边的。
11:00
这么一个结构。把它拿回来,然后监听是我们这个相关这个通道啊,当然这里边相关这个内容是咱们在常量类中定义的这些值,对把它写过来就可以了,我把依赖给它先都引入进来。所以现在这个监听我们就写出来了,然后写完之后呢,在下面我们有这方法,就是当他一监听到我现在已经发送过来,这个就是消息,然后他就能知道,他知道之后呢,在里边就会调用我们下面这个方法,然后最终来实现我们的功能,那这方法我们就在这个o set里边写一下这个方法,那我来先把它注入进来啊。咱来一个private order service。然后叫order service,我们调用order service中的方法,就查询这一天有哪些,就是就诊人这个订单,然后对他进行通知,就是得到之后得到他的手机号,然后对他进行通知,啊这是我们做的事情,那现在我们在里边呢,就来写这个方法,我们叫patient这个types做一个就是相关的通知的这么一个功能。
12:13
那咱现在把这方法做个创建啊,做这个就是。就诊的通知。这是我们写的这么interface,咱们来到它的实现类中,在实现类中把这方法咱们多实现。那我们快速写一下啊,这个方法应该很简单,根据当前日期查出你的数据,然后发送一个短信,用MQ做到,那我们先查一下啊,大家看怎么查呀,首先第一个啊,我们现在在这个订单表里边呢,有很多的字段,而咱查的话是不是根据日期查呀,因为我在每天八点通知,那通知就是今天这个要就诊这个订单,那大家看我们查哪个字段合适呢?
13:02
各位看到啊这个字段。这个date是不是你的安排时间,就是哪天去就诊,所以再根据他做个查询是不是可以的,然后除了他之外呢,咱还需要加上一个字段,这个东西订单状态,如果说你的状态,比如咱们约定是负一,负一表取消,取消是不需要查呀,就是它不是负一,咱是不是常进行查询,你注意啊,我们现在预约成功之后,咱是不是能到线下去支付,是不是也可以网上支付,是不是都可以啊,所以咱只查这个不等于负一这个订单咱用这两个字段自我查询。这各位应该能够理解,根据他的安排时间和这个状态,咱们现在做查询,那我在里边给各位写一下啊,首先咱们定一个query。Rapper。里边加上我们这个po info,然后咱们叫rapper,等于new上一个快rapper,像rapper中设置它的条件,第一个就是它这个安排日期,那我们找到日期应该是刚才看那个receive。
14:10
对。把这个。分过来,然后日期呢,咱们得到当前的日期,我就直接new上一个date time。然后这time中咱来一个to string,加上它那个格式啊,就是这个年,四个Y,两个M月,还有两个D这个日,根据它做查询,这是第一个条件,然后第二个条件,咱们查询里边这个就是订单的这个状态,它不能等于负一,就是这个值O的thes。就是它,然后这个值呢,它不能等于负一,咱对它做一个查询啊,包括各位看里面这个数据older thes就是里边的,呃,咱找到这个值。然后这个值呢,其实我们应该是有一个枚举类啊,那我们用一下那个枚举类里边给它用一下啊order。
15:06
Thes枚举点上里面那个就是负一,应该是这个,然后咱们点上get thes,它不等于负一,肯定不是EQ了,这各位应该知道啊,不等于用的是不是这个NENE代表不等于这个值,咱们做个查询,然后最后调用base map中这个。例似方法,因为这一天可能有很多的这个订单,咱们传入rapper,最终返回这一天订单,这个例次集合我们叫order info。List了,这样的话,咱们就做一个查询,这各位知道,然后查询之后呢,咱们把这list集合,我们给它做一个遍历,遍历之后最终发送MQ消息,做到这个操作。那我们写一下啊。Older。Info,然后order info等于咱们这个集合,下面咱就发送这个相关的消息,跟我们之前写的一样,然后把这部分代码给各位就拿过来,咱之前写过这个类似操作,把这个给各位复制过来啊,然后咱们。
16:14
写到这里大家看一下,首先咱们new一个MSV里边设它的新闻信息,包括最终咱们用service去发送这个消息,里边有它的内容。这样的话,咱们现在。把这一部分我们就最终完成了,这是我们写的关于就医提醒的这么一个功能,然后这过程我们再看一遍啊,最终咱做个测试,这个过程怎么做呢?就是我们现在把这个task模块一启动,然后它里面会做一件事情,就是每隔一段时间去执行一次,这个方法就是做一个提醒,然后在这过程中,我们这里做法就是。在每天八点去进行这个操作,然后在操作中咱们用send message发送个消息,然后这个消息用的是这个pass这个消息,这个消息呢,咱们在O的里边写上一个MQ的监听器能监听到他发这个消息,就是这个task这个消息,如果接听到之后,咱们调用service里面这个方法进行我们这个就诊人这个信息的这个查询,然后发送短信进行这个操作,短信这个之前咱都做过了,所以现在这个过程我们就完成了,这是关于我们写的就医提醒模块。
17:31
然后这个选完之后呢,咱们下面把这功能我们来做个测试,看一下它最终的效果什么样的,再来测试一下啊,首先我先启动,比如说第一个呢,我先把这个OS这先启动起来,就是咱们的订单部分。然后这部分呢,我就用这个底bug方式把它启用起来,然后这个启用之后呢,我再把这个短信部分咱们给它启用起来啊,这是短信,除了短信之外,最后就是咱这个task模块,我等这两个启动之后,最后再启用这个task,然后咱们做测试,因为我TASK1启动,它就会每隔这段时间就进行这个方法,咱为了测试方便。
18:14
我先写一个30秒,实际中咱肯定是每天八点去进行一次这个操作啊,所以现在啊,我们等着先停起来,然后这时候我们的order order里边呢,我在这个receive中呢,加上一个断点,然后来到咱们这个方法中,在方法里边给它也是。加上钻顶啊,为了咱们一会儿测试方便,现在这两个都启动了,然后最后咱们把这个task做个启动啊,这些配置应该都写进去了,那我们把它启用起来啊,然后咱们做个测试。等他先启动。启动之后就会执行刚才我们写的这个方法,我这里是每隔30秒去进行一次。
19:04
那咱们看一下啊,一会debug应该能看到它的效果。现在启动了,然后咱们等待30秒,看它能出来这个效果。现在你看是不是过来了,就是我们这个已经发送了,然后这里面接收到了,接收到之后他就调用咱们里的方法,最终是发送短信,然后每隔30秒它都会去定一次啊,这里边啊,我们就做到了,所以大家能知道就是里边的这么一个基本过程。现在我们就完成了。但是这个过程中的一个小问题啊,就是咱们这个短信里边的一个特点啊,因为这个短信呢,我们申请的是发送验证码,所以它不能发送其他消息,实际中呢,我们要申请一个能发送更多消息内容,但是你看现在这句话也输出了,证明咱这方法应该都执行到了,包括你个现在是不是就执行了,每隔30秒会执行一次啊,这个我就不再执行了啊,所以现在这个过程我们应该就最终把它完成了,关于就医提醒的功能,在这功能中呢,要求大家重点掌握第一部分定时任务怎么去使用,包括课程表达式怎么去生成,以及我们把这个。
20:16
MQ发送消息的过程,带着各位有复习这遍,所以这个功能咱们就最终完成了。
我来说两句