00:01
各位同学大家好,我们继续来开发医院排班功能,刚才咱们把医院里边的所有科室用树形结构做了显示,那咱们下面继续开发后面内容。咱们看一下这张图上,就是现在呢,咱把里边的这部分已经做到了,根据医院编号查出了医院里边的所有科室,并且把科室按照大科室和里边的小科室啊,我们按照树形结构做了显示,那在下面呢,就来做里边的这部分,那这部分中呢,首先咱先完成上面的这个地方。也就是根据我们的医院包括科室来查询他的排班的规则数据,比如说你看我显示中,比如我们10月1号有它一些数据,10月2号有数据,包括10月3号有数据,这个过程中肯定会有很多数据,咱们把它可以做一个列表显示,所以咱们下面就来做里边的这个功能。
01:03
那这个功能怎么做呢?给各位来分析一下啊,首先大家注意我这份查的是不是科室里边的排班规则数据,比如说咱们查的话,要根据科室的编号是不是查询,因为科室的属于某一个医院,所以咱们查的更完整点,那就根据医院的编号加上科室的编号来查出他的排班的规则数据。而这数据因为会有很多个,所以咱把数据是不是要做一个分页的显示啊,所以咱们下面就来做这个功能,把这个排班规则数据我们来做一个查询,这个过程中要用到一些统计,包括分析或者说聚合的一些操作,因为咱要做一些计之后的,或者说分组之后的数据。那下面咱们把它来写一下啊,首先第一个呢,因为咱们做的是一个排班的基本规则,所以说我在里边呢,我就重新创建一个controller,咱们专门写这个排班的规则数据,那我现在在里边建一个controller。
02:08
Controller起个名字,比如说我叫这个schedule controller,那我写一下。删掉CTRL。这个我们就做了一个创建,然后创建之后呢,我们在上面加上它相关这个注解,比如说我们第一个加一个risk controller,第二个加上一个request mapping,里边加上它的路径,路径呢,按照之前的我们给它改成我们目前这个路径。咱们这个名字叫这个筛掉,我把这个筛掉。拿过来。这样的话把这个就写出来了,然后咱们再加上一个跨域普解,然后加上之后呢,咱们再schedule的CTRL中是不是要注入这个service,也就这个筛掉service,这咱之前创建过了,那我把它直接al。
03:05
注进来加上一个叫schedule service。这样的话我们就完成了,完成之后呢,下面咱就来开发这个接口,我来写一下啊,先加个注释。就根据我们的医院的编号和这个科室的编号,然后查询什么呢,你这个排班的这个规则的。这么一个数据。这是我们做的事情,那下面写一下,首先我们加上一个注解A片。Of里边写个Y6 Y6中加上它这个名字,查询排班的规则数据,然后加上之后下面加上它的提方式,我们就写一个。Get提交,然后在里边给这个方法起个名字,比如我们叫get这个schedule。
04:00
因为是排班规则嘛,我们叫这个ruler啊,排班规则后面加上它的参数,它里边因为要做到分页包含有两个编号,分页中我们加上当前页,包括每页的居住数,另外两个编号,一个是医院编号,我们叫这个house code,还有一个是科室的编号,我们叫这个DP。厚道。这样的话把这个就写出来了,然后写出来之后下面加上它的方法。他。Result。我们加这个方法,比如都叫get筛掉了。排班规则。然后加上之后在里边把这个值给它得到,用我们那个pass这个注解,咱们快速得一下,第一个值就是当前页比我们来一个浪类型,我们叫配置,然后第二个每页技术数。写一个pass,不点让类型limit,包括第三个,第四个写法都是一样的,那我用它,咱就快速复制我们给他。
05:06
改一下,然后咱们看啊,第三个值就是医院编号,因为咱们要根据它做查询,第四个是是科室编号,我们来一个最。这样的话呢,咱们把几个值就得到了,得到之后咱们最后来调用service里边的方法做实现,那我们调一下啊,筛掉里边我们给它方法起个名字,比如就要这个get这个,呃,大家为了区分啊,我就get这个。入了筛掉。这个名字,然后这里边咱们就传入刚才的这么四个参数,当前页配置,每页记录数利米,包括它这个医院编号,还有这个部分编号,这样的话咱们把方法就写出来了,然后写完之后呢,最终咱们给它加上一个返回值。
06:00
这返回值啊,各位注意啊,大家可以想一下,目前咱这返回值可以写什么呢。大家想一下,按照咱们之前说到的,就是写的话,多种写法,你可以写的粒子集合,但是因为我们目前的过程中,它需要很多的数据,比如说咱们看到我这张图上,它包含咱们的是日期,然后包含里边那个就是预约数量,比如说你现在一共有多少号可以预约,然后目前剩余多少,这些信息里边都需要显示,另外需要你医院的一些名称等等信息,所以咱们现在为了后面更加方便,咱是不是也可以再写个卖克集合,然后最终返回啊,跟咱之前写那个科室应该是类似的,所以现在咱给大家写上一个map集合,为了后面更加方便。那我来写一个啊,脉部集合。然后里边的T我们就加上一个。试卷。它的Y表咱通用点写个object,这样的话就让它返回一个map集合,然后把这个依赖引入,最终咱加个蕊退给它做一个返回。
07:08
然后给他。最终完成瑞屯。result.ok加上一个map。这样的话,这个CTRL部分我们就最终完成了,根据我们的医院编号,还有科室编号,最终查询得到它的排班的规则数据,因为数据中有很多内容,所以咱让他返回就是一个map集合,为了后面更加方便,这个ctrler完成了,完成之后咱们下面在S里边,我把这方法咱们做创建。这是service,然后来到这里边的实现类中,在实现类中再把这个方法最终做实现。那我在里边写一下这个方法,这个方法呢,因为这里边呢,我们要得到就是按照日期,大家看这张图上按照日期是不是要排序分组,然后得到每个日期中的排班规则,比如说10月1号里边我们一共有100号,然后目前可预约的有50个等等这数据,所以咱们既要根据日期做一个排序,另外里边还要做到不同的操作,所以下面呢,咱们把这个我们就具体写一下,看这个我们该怎么做,咱就是用这个猫DB进行我们的情况操作。
08:27
那现在我在里边写一下这个代码,然后Mo DB呢,大家注意啊,咱们之前住的是这个叫schedule,是不是这个reper,你用它确实能实现我们的过程是没有问题的,但是现在呢,咱为了这个操作更加方便,咱在里边啊,也可以注入另外一个对象,咱之前写过给大家写一下啊,比如我们加一个。奥wa,然后咱们注意一个什么呢?来记住这个嘛,叫做mango汤里。咱们之前用过用它我们做这个聚合,比如说做分组,做排序,做什么统计会更加方便,但是这个也能实现啊,这咱现在我就想换一种方式给大家写一下,那我们就用这个mango toilet来做这个操作,那这操作怎么做呢?给大家先分析一下啊,咱们先看一下我们这个数据,打开猫DB看一下里面数据。
09:23
在数据中呢,找这个schedule,各位看啊,在schedule里边呢,有咱的排班的信息,然后它里边你发现啊,首先有一个叫work date是不是一个工作日期,所以再根据这个日期是不是做一个分组操作,然后在这里边有一个叫received和这个a alive number,一个是剩余数,一个是可约束,就是这个相关的数量,而数量咱是不是要做一个求和的操作,就是最终得到我这一天有多少这个相关的号源的数量。啊,这个啊是我们提到的,然后下面大家来做一下,根据work date要做一个分组,包括这里边要得到这两个求和的操作,就是你的号源的数量。
10:08
而过程中大要根据我们这个就是。House code和dp code就是你的医院编号和科室编号,查出数据,然后再做一个分组操作,那这里边啊,我把这个过程给大家先写一下,然后咱们写代码就是首先第一部分。我写一个基本的步骤啊,我们先根据我们的医院编号和这个科室的编号,先做一个查询。然后查询之后呢,怎么做呢,咱们根据里边这个就是工作的这个日期进行一个分组。就是分组的这么一个操作。而分组这个就是工作日期,就是咱们看到里边的这个字段叫work date,我把这个写过来叫做。Work date这个分组,然后分组之后呢,咱们最后还要做件事情,要统计一下它那个号源的这个数量。
11:08
啊,就是你有多少号,它那个数量,比如说我们现在剩余多少,可预约多少,你要把数量做一个统计,其实就做一个相加操作,这个啊是我们要做的这么一个基本过程,包括这个过程中,咱还要实验一个叫分组的操作。啊不就不是分组,是一个分页的操作啊,分组是上面来说这个,所以这是咱们对于我们要写代码一个基本分析给各位再重复一遍啊,然后咱们实验一下,首先第一步我们要根据医院编号,科室编号,先把数据查出来,然后查出来之后呢,根据工作日期,就是这个work date做个分组,然后分组之后要统计你的耗源数量,比如现在我可预约多少,包括我这个剩余多少,咱要做一个求和操作,然后做完之后,最后还要实现一个叫分组操作,所以这个啊是我们要实现的这么一过程,那咱下面把它就做一下啊,咱们看这个到底该怎么进行实现,那我们下面写一下啊,首先第一个呢,因为你要做个查询嘛,这单怎么做?
12:16
在咱们这个mango to中有一个封装条件,对比下叫这个criteria,那我们写一下。Criteria,我们叫criteria,然后等于就是criteria,里边有一个方法叫做where,咱做条件where中的第一个是咱这个医院的编号,我们叫hot code,然后点上一个方法叫is,里边加上一个叫hot code,它就好比说咱们写语中where hot code等于你的值,然后里边还有第二个是这个部门或者说科室编号,那我们加上一个叫and,里边加上你那个字段,我们叫dp code。
13:00
然后再来一个叫is加这个dp code的,所以这样的话呢,咱用这个create,这个就完成一个条件的封装,是咱们的这个写法,然后条件封装之后,下面咱要做这个分组,包括计算,包括分液过程,这过程要用到mon汤姆利的中内构聚合操作。因为各位知道啊,分组做的是不是group操作呀,然后这个计算数量做的是不是一个sum操作呀,包括你求和等等内容,那在下面啊,把这个我们就来写一下,那我们看这该怎么做。我们在里边呢,加上mango to中一个对象叫做aggregation,那我们来加一下啊,叫A,然后DR。我写一下啊B。Re aggregation啊,就是里边的这个,然后这个就是agggation的,用于咱们在mango computer中做这个聚合操作,比如说你做分组啊,做求和等等,那咱给它起个名字,比如叫ADE,等于这个aggregation,然后里边有一个方法,这个方法我们就是new上这么一个叫。
14:20
Agggation,然后在里边写上你这个具体内容啊,那我们给他写一下啊,就是用它我们来new上一个叫aggregation。然后写上它的内容,我把这个啊,咱们直接就先复制过来。那我们来写一下啊,首先呢,在里边咱们做的肯定是一个分组的这么一个机关内容啊,就是你要做分组操作。那咱们往下来写啊,然后大家看啊,目前写的时候呢,这里面报了一个错,他说这个方法不能用,那我们看一下什么问题啊,咱首先看一下是不是我的包导的不对,我们看到这个包aggregation导的是这个包,那这个包导的应该不是这个里边的agggation,比如咱给它改个包,因为这里边刚才咱们看到报错了,那咱导哪个包呢?大家看啊,咱导这个润里边这个mango扣核心中这个aggg,你看现在是不是没错了,所以注意这个包导的这个问题啊,别导错,包导的是这个mango DB扣核心包中的A。
15:25
然后导完之后,咱在里边就new这个aragation里边,首先我们先做一个就是分组操作,那分组操作怎么做,给大家写一下啊,第一部分因为咱有条件嘛,咱把条件先做个匹配,加这个match,加一个cri,咱是在条件差这基础之上,是不是做分组,所以这是一个匹配那个条件我写个注释啊。匹配。条件,然后匹配条件之后,在下面的咱们再做这个分组,在agg里边有个方法叫group,是不是就分组,然后在group里边加上你要分组的那个字段,分组字段咱刚才看到了,是不是里边的这个字段叫这个work date,所以用它我们就有分组,那里边写一下就叫work。
16:17
Date,这是一个叫分组字段。我把这个加个注释。然后分组之后呢,咱们下面干什么呢?在里边要把你分组之后那个值,比如说给他做个显示,好比说咱们select星号,然后后面S加个别名,就咱给它也可以起个名字,分组之后那个名字叫什么,那怎么做,咱就来一个叫first,就是从它的这个值开始啊,我们这个名字就是这个叫work。Date,然后咱给它加个别名,我们就来一个叫S,加上你那个别名,别名,比如我也叫这个work date,这样的话,咱现在这个部分就完成了,根据你的工作日期做一个分组操作,这就完成了,然后完成之后呢,下面咱继续来做,刚才我提到咱这过程中是不是要做一个你的号源的数量的一个计算操作,那这里边我们就给他做个计算。
17:17
那我们看这个怎么做啊,我把注释拿过来,它的做法就是呢,首先我们肯定做一个统计嘛,那我们来一个com,就统计一共有多少个数量,我们来一个SS里边给它起个名字,就是你统计之后,我们现在查出来之后,这个总体的数量一共是多少,那比如我们叫这个do count啊,随便起个名字,然后下面做这个统计,统计的话呢,就是求和嘛,咱要求出里边比如说我这个数量。你的剩余数,或者说你可约束一共多少,那计算出它用多少数量,咱是不是用一个函数叫sum,这里边也是sum sum就根据刚才这两个字段,我们做一个计算就可以了,然后这个字段呢,我到我这里边咱找一下啊,我从model中咱直接复制一个就可以了。
18:06
我们找一下这两个字段啊,应该就是里边的这两个。一个叫科室可约束,一个叫科室的剩余数量,那咱们先把这个就是receive的这个科室可约束做计算用sum这个函数,然后最终也是起个名字,名字我还叫这个receive number。然后除了这个之外,咱们再做计算,把刚才的另外一个做个计算,也就是里边的这个值。我们叫做科,是剩余的约数。A alive number,咱们给它也是as一个名字,我还是这这名字,这样的话呢,咱现在把这个就完成了,就关于我们这个根据这个work date做个分组,然后包括对你耗源数量一个统计,这个完成了啊完成之后呢,其实咱们现在下面在查就可以了,但是咱们写的更明确点啊,咱可以把这个就是work date是不是可以做个排序,不排序也可以啊,那我给它也是排序一下,就是写的更完整点啊,做个排序。
19:12
这个位置架构注释啊。排序,然后排序呢,咱加这个aggregation上这个叫sot,里边加上一个类叫做so,点上这个方法我们来一个叫。第dereation点上,比如我们是升序还是降序,后面加上你要排序那个字段,咱们叫这个work date,这样的话,现在把这过程就完成了啊,就是咱们写的这部分,然后都完成之后呢,最后咱还有一步,咱这过程中除了你查询分组,包括求和之外,最终是不是还要做一个分页凑作用,所以最后咱们把这分页给它最终完成一下。分页各位都知道,它里边需要咱们的当前页每页记录数,包括你的开始位置,所以咱们写一下第一个,我加上一个叫skpe,而咱的开始位置是不是就是你的当前页减一再乘以每页计数数呀,所以里边把这个咱加个skip,我写一下啊,配置减一。
20:17
再乘以这个角。Limit,然后这个写完之后,下面再加这个。Aggreg,点上这个limit,把limit传进去,所以大家看啊,现在我们写到这个位置,咱就把这个根据work date进行分组,包括耗源的数量,以及最终的分页,这个过程我们就写出来了,就是咱们现在完成了一个条件部分的构造啊,各位把这部分能写出来啊,咱现在是基于这个mango to这做到的,这过程稍微麻烦点,这过程好比说我们现在在mango中做一个聚合操作。这个就完成了啊,然后完成之后呢,咱们下面就调用方法做一下,最终这个查询,把它的数据我们就能给他弄出来啊,咱最后来查询一下啊,我写一下。
21:10
调用方法最终去执行,那怎么执行呢?我写一下啊,就叫这个mango time中这个方法,那我们写一下啊,然后里边一个方法叫这个ago g这个方法,然后在里边呢,传入有这么几个参数,它的参数呢,一共应该是有这么三个参数。啊,那我们看一下啊,参数,参数是什么?首先啊,咱找到这个核心应该是这个,第一个参数是我们这个aggregation刚才写的一个条件部分,然后第二个参数呢,应该是你那个就是封装那个是一类的class,咱应该是这个筛,就是你查出那个mango do那个是一类,然后第三个是你最终返回结果的class,主要有三个值,那我写一下啊,第一个就是AJ,第二个就是咱这筛。啊,N class。
22:04
然后第三个是你返回值的class,而返回值什么呢?咱就不用这个筛,大家看啊,在model里边呢,我这边写好了一个view对象,就这个对象叫booking筛VO。这个对象是用于咱们返回那个预约规则数据,包括你看这里面是不是有咱需要数据,所以咱最后返回它啊,当然你可以自己单独写一个,我就用它返回了,再加上一个class。这样的话呢,是咱们写出来的这么一个结构,然后这个结构写完之后,最终它会有一个返回值啊,咱们把这返回值大家看一下,返回值就是这个aggregation result,就是我们的结果,然后它的结果就是这个,比如叫这个呃,A j result。啊,Results这个结果,然后咱们从这结果中能得到你那个具体的内容,咱们把它得到一下,啊,那我来写一下,就这个abd results,点上里面一个方法,大家看这方法叫get map results,然后它返回结果,就是咱们最终想得到这个例子集合,你看例子集合中每部分是不是这个booking。
23:17
筛掉入了VO啊,就是咱们刚才写的这么一个class,所以这样的话呢,咱现在调用方法把这个就完成操作,而我这个就是我们最终反映出那个基本的结果。所以现在啊,这个过程做到了啊,但是咱们并没有写完,咱这是目前写完了一大部分。这个过程我们再看一遍啊,稍微麻烦一点,首先我们要做的是根据医院的编号和科室做查询。所以在里边呢,我们就写上这么一个criteria封装条件,另外在这基础之上,咱们既要做工作日期分组,还要做这个就是数量的求和以及做分页,所以咱们用到里边这个聚合操作,就是这个aggregation,里边包括匹配条件,包括分组,包括求和以及最终这个分页,然后都做到之后,咱们就要用mongo to中这个方法叫aggregate,里边传入三个参数,第一个参数就是你写这个aggreg这个对象,第二个是你这个对应的实体class,然后第三个是你返回结果class,咱这个booking schedule view,这个我提前已经写出来了,然后最终通过方法得到咱们返回这个历史集合。
24:31
所以这样的话呢,咱们现在把这个我们就最终写出来了,是咱们这么一个结果。然后这个选完之后呢,咱的操作并没有完。因为咱们最后用做分页,包括里边还有一些其他值,比如说咱们分组查询之后,是不是有咱那个总记录数,这里边需要计算,上面这内容中没有包括咱要获取一下我们那个可预约规则,包括这里边你还要需要得到你的医院的名称等等信息,所以咱们一会儿把下面部分我们做封装,目前只得到你这个就是基本这个数据啊,也就是我们的这个数据。
25:09
这个数据那就是我们那个预约规则那个集合,包括里面一些基本信息,所以咱们一会儿把这给头进一步扩张出来,大家把这部分先能给他看懂。
我来说两句