00:01
各位同学,刚才内容中呢,咱们完成了预约下单接口中的接管内容,我们完成了两个远程调用的接口,获取就诊人信息,获取排班数据,那咱们下面呢,就实际实现一下生成订单的部分,我们来继续做一下,首先我们找到刚才我们在order里边写的这个controller。然后CTRL里边我们找到,我们是调用service里边的save order方法传入你的排班ID,还有你的救人ID,然后在save order里边,我们来最终实现这个生成订单部分,那下面咱们把这个来写一下,首先第一个因为这里边呢需要远程调用,所以咱们把刚才我们的两个那个f claim给它先注进来。首先我们先注入第一个,我们来一个private,第一个呢,应该叫这个patient。
01:02
Patient。克。把这个先拿过来,然后咱们把它注入进来,这是我们的第一个用于一会儿的远程调用,那我们看一下这个名字啊,这个名字我们别写错。然后这个名字我们在这个user里边,刚才的名字就是这个。Patient。把它拿过来引入依赖,但是引入依赖的时候,大家发现这里边引入是不是不能引入啊,所以咱们需要把这个就是相关的依赖先引入到这个O里面去,然后才能进行这个操作,那咱给它引入一下啊,我们加个。Dependence,然后这个叫service user client,然后咱们再加上一个dependence,这个叫service hospital client。咱们把这两个引入,然后引入之后再来完成它的注入,第一个patient b client,这咱们注进来了,然后注入之后我们再来注入,第二个我们加上一个。
02:10
然后加一个private,第二个叫这个hospital b client。把这个咱给他也是。拿回来,所以这样的话,两个远程注入的这个内容我们就入进来了,然后注入之后呢,下面我们在里边进行它相关的这么一个调用,我们来写一下这个生成订单,那生成订单的逻辑是怎么样的呢?给各位先做个分析,其实过程很简单,首先第一步我们先根据这个。就诊人的ID得到信息,再根据排班ID得到信息,然后把信息加到数据库中,加完数据库之后,咱们去调用我们医院那边的接口,在医院那边做这个订单生成,然后医院接口那边会反映数据,咱们得到反映数据来更新咱们的订单表中的内容,它的流程就是这么一个过程,那下面给各位来写下啊。
03:11
首先第一部分咱们先获取这个订单里边这个就诊人的这个信息,咱们来调一下这个patient c里边的这个方法。Get patient order传入ID,最终返回我们这个对象,这个对象我起名,比如就叫这个patient,这是我们的第一步,然后这个做到之后,我们再进入到第二步,获取咱们那个就是。排班的相关的信息,那咱调这个hospital f可单里边的这个方法。就是get筛掉O的Bo里边传入我们这个ID,最终返回咱这个忽悠对象,这是里边的第二部分,跟咱之前应该都差不多,然后这个做到之后呢,在这过程中呢,我们需要做一个简单的判断,什么判断呢?比如说啊,当前的时间已经不可逾越了,那咱可以给他直接抛出一个。
04:17
自定义异常,或者说当天时间已经过了,这个时候咱需要给他做一个简单的判断,那判断一下啊,就是判断当前的这个时间。是否?还可以预约,比如说现在已经到了今天的凌晨的,或者是23:59,那肯定不能预约了,所以这个时候咱给他直接抛出一个定义异常,这个我们需要做判断,那这判断我就从课件中直接复制了啊,就是里边的这个代码。我把它拿过来,然后大家看啊,首先咱们new上一个it time。然后这time中得到咱们VO中的开始时间,判断它是否可以预约,如果说不能预约,那我们就直间抛出一个预约挂号exception,告诉他已经超时了啊,就是里边的这么一个,就是当天时间不可预约,这样的话判断就完成了,然后完成之后呢,我们再做下一个操作,因为咱们要去调用医院接口的时候,需要得到他那个签名的那个信息,所以咱们下一个来获取一下咱们那个签名的这个信息,我们来调用咱这个hospital b里边的这个方法叫get s。
05:37
Ino VO,然后在里边呢,得到咱那个就是医院的编号,医院编号咱通过VO中可以给他取到,我们来取一下啊这个号扣。最终得到我们这个c info,就是那个签名的积分信息,这样的话,我们把这个数据就得到了,然后得到数据之后呢,咱们下面啊,就把这些数据给他添加到我们那个订单的表里面去,就来做这事情,那添加到订单表中,我们来做一下啊,首先来new一个叫order info,我们new一下这个对象。
06:18
等于new上一个order info,然后像order info中来设置咱们的相关内容,因为这个内容呢,大部分应该都是在这个筛掉O的view中,所以咱把这里面的数据给它直接复制到在那个O的info中就可以了。那我来写一下啊,就是我们现在把这个里边的数据给它复制到咱这个O的in中去,那怎么做呢?各位同学可以想一下,最原始方式就是把它的值get出来,再set进去,这么做是可以的,但是咱有一种更简单方式,用个工具类叫BU里面这个叫copy pro,把这个就是。
07:05
我们写一下啊,这个筛掉。Order的view中的数据复制到order info中去,这样的话就可以了,然后复制之后呢,里边还有一些其他的值,那其他值咱给它就依次set进去就可以了啊,那我写一下啊,我们在向这个order info中在设置它的其他的一些数据,其他数据也都是通过这里边取到就可以了,那这部分我从课件中直接就拿过来,就是往里边一个一个给它set值就可以了,也就是这个代码。我把它复制过来,咱们快图看一下啊,应该很简单,首先第一个这里边呢,因为咱们这个订单有一个订单号,所以订单号呢,我就根据当前时间加个随机数给它生成一下,然后除了这个之外,有咱的筛ID,有用户ID,有这个救人ID,包括名称啊,包括电话,包括里面这个订单的状态等信息,这个咱给他直接就拿回来,然后这个状态咱用的是这个,就是预约成功啊,就是没有支付这个状态是这个。
08:15
我们现在最后调这个方法做一个添加。那我们来调一下啊,咱写这次可以,或者说我用贝麦里面这个。音色的方法,然后传一个O的info,最终完成一个添加,这样的话,咱们现在把这个流程就完成了,比如说现在我们做到的步骤就是首先得到就诊人信息,再得到排班信息,判断当前日期是否还可以预约,然后得到签名信息,下一步把这些信息加到咱的订单表中,现在完成这一步,然后这个完成之后呢,咱们下面做什么呢?咱们就需要去调一下我们医院那边的接口,来实验一下这个订单,这个下单操作。
09:05
我写一下调用医院那边的接口来实现这个预约下单的这个操作,或者说预约挂号的操作,那我们来看一下啊,在医院这端呢,是在我们的这个里边。Hospital manager这个模块我们已经开发好了,然后在里边呢,有这么一个hospital control了,大家看啊,里边就是这个接口叫做预约下单,所以咱们就来调用这个接口,最终完成这个操作。这个接口中呢,咱们只需要传入相关数据,然后把数据放到一个Mac机合中,这边得到,得到之后它会给我们实现它的切换操作。包括大家看一下操作中,它就是在里边。做了数据的处理,然后在里边又去做了各种的计算等等,最终返回我们的相应内容,这个啊是我们看到这个意愿接口,所以咱们下面就来调用这个接口,最终把它做实现。那接口怎么做呢?咱们刚才也看到了,在我们调接口的时候呢,首先向接口中是不是要传一些参数,所以我们的第一部分就是先设置咱们调用医院接口需要的一些参数,这参数给它放到一个map机构中去,刚才看到在这里边它是用request.get per map得到,所以咱给它放到一个map集合中,然后最终再调用,那这里边放到map集合里边就需要就这些数据,我把数据啊给各位直接拿过来就是里边的。
10:43
这些值。把这个带过来,然后大家看啊,这里边就是这些相关的数据,首先把依赖引入,咱用的是一个麦克集合,大家看包含什么,医院编号,科室编号,名称,证件类型等等这些内容,然后在内容中啊,还有一个这个。
11:05
工具类啊,得到这个时间,这些包括签名等相关内容,所以现在我们这个map中就放到相关内容,然后放完内容之后呢,咱们下面就去请求医院系统中的接口做这个操作,而医院系统接口中呢,我们这里边呢,给各位提供了一个工具类,这工具类我们来看一下啊,咱看一下这工具类呢,应该是在我们里边这个。Common里面我们来找一下啊,Common里面。有一个工具类啊,应该在这里边啊,Service common里边的service YouTube中,之前我们曾经复制了一个相关的工具类,应该是里边的,我们找一下啊,是这个工具类啊,Htp request hier,所以咱们就调用这个工具类中的一个方法,叫做散request。
12:02
大家看就是里边的。应该在下面这个方法,这个方法中你看到它是做了什么事情呢?用里边一个东西叫做htp client,然后用post的请求方式去请求咱们这个路径,包括传参数,最终返回里面的结果,结果就是一个Jason的数据,所以咱们现在就要这个方法去请求预院内算接口,里边需要传入你的参数,还有你的相关的地址,这是我们的这么一个做法,那在下面就把它来请求下,我们来写下这个请求代码。我在里边啊,实现一下。然后这个做法就是我们调刚才看到那个工具类调htp request help里边的方法叫send request2个参数,第一个叫para map,第二是咱们这个路径,而这个路径呢,我们刚才在取那个签名的对象中应该能取到,那咱给它取一下啊,这个s info VO,点上这个get API URL,然后这里边加上咱们最终的路径,这个路径我们到里边复制一下,应该是它叫这个order。
13:19
Sum order,所以咱们通过它来做这么一个请求,也就是里边的。这个结构。然后这个启用之后呢,最终它会返回一个Jason的这么一个对象,比如说我们起名叫result,咱通过对象进行处理,然后再更新我们的内容,所以现在这一部分就是请求医院那边的接口,咱把它就完成了,完成之后呢,下面我们根据它返回的结果对它做一个处理。那我们来看一下啊,就是这个返回结果里边呢,就是这个result map,我们看这个map集合中啊,有什么内容,然后在内容中呢,首先啊,它里边返回中就是一些相关的数据啊,包括一些相关的状态码等等一些内容。
14:08
那咱们在里边给它处理一下啊,你看这里边是OKOK,状态码应该是那个。是不是这个200啊,那我们来写一下啊,来写这个位置。我们加上一个if判断就是。如果说里边这个。Result,点上get这个,比如来了一个inag啊,因为它是一个这么一个对象,然后里面有一个code,就状态码,如果它的状态码等于200,那表示当前请求是不是成功了,如果成功的话,我们从里边把它一些数据给他取出来,也就是它返回的这些数据,咱刚才看到就是里边的这些数据啊,比如大家看一下。就是返回的这些值咱给他取到,然后取到之后呢,再去更新我们的数据库。那我们这里边啊,给它就复制过来,再给他取一下,就是里边的这些值。
15:05
我把这部分代码给各位拿过来。在我们的这里大家看啊,通过J首先取它的date,就是它里面这个date中的数据,然后date中有这么几个值,包括预约记录的标识,预约的序号,取号时间,取号地址,这些是我们需要的数据,然后数据得到之后,咱们来向order info中再来set咱们的内容,然后最终调用方法去更新咱这个表里面的内容,因为咱们就是。进行了医院调用之后,它里面数据做了操作,咱需要把我当前的内容做个更新,在这里边我们就来调这个方法,然后更新之后呢,在里边还有一些其他数据啊,比如说你有什么剩余的这个约束,或者说你有什么相关的这个可约数量,那数量应该也会有一些相应的变化。
16:02
比如说我们给它也取一下啊,就是最后你看还有这两个数据表,比如说现在你已经预约了,然后预约之后数量是不是要减一啊,包括你这个可预约数量也要发生一些变化,所以这里边最后应该还有这么两个值。然后这两只有之后呢,就是最后咱可以再还,还是把我们的数据做更新,但是更新过程呢,我们现在可以实时进行更新,就是马上进行更新,这么做是没有错的,但是实际中这过程啊,因为咱们一般来讲,当我预约挂号结束之后,我们一般可能不会马上更新,因为它里边可能频繁做很多操作,这个时候呢,咱们可以交给一个插件或者一个组件进行实现,这个组件各位同学应该听过,叫做MQ,就是消息对列,所以咱们后面呢,就把这个过程呢交给MQ进行实现,怎么做呢,咱又可以把这消息啊,就是发送。我写一下发送给MQ这么一个消息。
17:03
让这消息中呢,进行我们这个就是号源的这个更新,还有你这个短信的一个通知,就是把这个数量更新咱们的表里面去,然后再给我这个就是联系人发个手机短信,说你这个号源已经预约成功了,所以咱们现在就可以作为处理这个MQ的消息发送,后面咱们把它整合出来,目前咱只是完成这么一个基本过程。啊,就是这个调用系统之后返回这个结果,然后这里边如果它不是200,咱们也做处理,如果不是200的话呢,那我们给他就直接抛出一个自定义异常就可以了,咱们写一个周new上一个预约挂号exception,然后里边得到它的相关的这个内容就可以了,啊那这里边我从课件中把这个咱就顺过来。
18:00
就是里边那个失败的信息,包括它对应的状态码。然后这些呢,都反应之后,大家看啊,咱这方法最终是不是一个返回值啊,而返回值是什么呢?咱们生成订单之后,是不是可以把我们那个订单的这个编号或者订单这个号给它返回,就是每个订单有V的编号,那咱来返回一下啊,就是O的info.get。ID把这个先给他返回一下,就返回这个订单ID。所以咱们现在就是通过这个流程就完成了咱们最终的这么一个操作,这是关于生成订单即可编写,咱们就完成了,然后在过程中还缺少一个就是MQ的这个发索,后面咱们来完成,目前是把这个订单接口我们做到了。所以各位能按照我刚才的过程,把这个接口能给它准确的编写出来。
我来说两句