00:01
各位大家好,我们继续来开发上医通项目,前面呢我们已经完成了用户登录,用户认证以及就诊人管理,而这些数据呢,我们需要把他们在咱们的平台系统中做一个统一管理,那咱下面就开发平台用户管理模块,把这些内容在咱们里边做一个统一管理,而这功能中咱们主要完成这么几个功能,先给大家自我介绍,第一个呢,我们先做一个用户列表。就是把当前这里边的登录用户在里边我们做个显示,然后用户列表做完之后,咱可以把用户进行锁定,包括计算功能,比如说某个用户给他进行锁定,让他不能操作。然后除了这个之外,我们下一个功能再来开发一个详情功能,查看用户,包括用户救人的详细信息,以及咱们做一个用户认证列表,比如咱们之前提到的,当我提交认证信息之后,咱们在管理员部分给他是不是要做一个审核呀,或者说一个审批。
01:08
所以这个功能就是咱做个实现用户认证列表,包括用户认证的审批功能,所以咱们下面就来开发这个平台用户管理系统中的几个相换功能,下面我们来做一下啊,因为这个功能呢,属于咱们用户部分,所以咱把它也是写到我们的service user侧这个模块中来完成咱的操作,那这个我们来看一下怎么来做啊,首先第一个我们之前呢,有个包叫API,是由于我们的前台系统中用到的,包括里边有一个user英应该也是放到这里边,所以咱第一个呢,先把这个CTR给它换个位置,我把它先复制到我们的API里边来。先给它都统一放到这个模块中来,然后咱们把平台管理系统中的ctrler都写到咱们的CTRL中,这个给它去掉,咱都统一放到我们的API中,里边有这个救人信息,微信的包括。
02:07
User info全都给他拿过来,然后咱们下面的在里边来开发我们的接口,首先第一个功能,咱们先做这个用户列表的这么一个这个开发,然后整合它的前端,那下面给各位来具体写一下啊,第一部分呢,我们现在就在CTRL里边创建一个。关于用户的相关的controller用于咱们的平台系统中使用,那我给它起个名字,我就叫user controller。这是我们创建的,然后创建之后在CTRL上边加上它相关的注解,咱们加一个ctrler,包括第二个注解request的mapping,然后在request的mapping中加上咱们的路径,因为咱们这个是管理员部分用的这么一个controller,所以咱起名就叫din user,以in开头。
03:05
我把这个给他拿过来,这样的话把这个就完成创建,然后完成之后呢,下面我们再来创建它的service,包括它的map,那咱们来快速写下service map,我们来看一下啊,之前在里边应该有这个service和map,所以咱们不需要再单独创建了,用之前这个就可以了。我们现在在CTRL里边把service给它先注入进来。为了后面操作方便,咱们叫这个user info。Service user info service,这样的话CTRL就完成了,完成之后我们先写第一个接口,那就是用户的列表接口,而列表接口中咱们也做上这么一个条件查询在分页的功能,那下面给各位快速写一下啊,首先第一个我先写一个提交方式,咱们来一个get mapping。
04:03
然后里边加上它的路径,因为咱要做分页嘛,包括带条件,所以这里边呢,我就传入分页中的两个参数,一个是配置带有咱们的当前页,还有一个是limit,那就是每页显示的记录数,下面写方法public。伪造的。然后咱们加上他的名字,这个方法名字,比如说我起名就叫这个list。这样的话,把这个我们就解出来了,写完之后在例子中咱们把这两只得到就是我们的当前页,还有每页记录数,那我来获取一下啊,我们加上一个pass注解,然后来一个long类型配置,然后再加上这个pass注解,加上long类型的利米一个当前页,还有一个每月技术数,然后除了它之外呢,这里边呢,咱需要一个条件。
05:00
而条件部分呢,这里边多种写法,比如现在我就直接写一个VO对象,这VO对象呢,我们在model中应该咱们之前已经引入过了,那我到里边给各位找一下啊,咱们找到不里边。User中大家看这个user info query view,咱就用这个传递咱的条件,包括大家看条件中啊这么几个值,第一个就是里边那个根据名称做关键字的模查询,包括状态,包括认证状态,包括创建时间,就是创建的开始和结束时间,所咱用它做一个条件查询对象在里边我就写这个user info view。User info,不由这样的话,咱把这个结构就写出来了,然后写完结构之后,咱下面就来写一下这个具体操作,因为咱是做分页嘛,所以分页中呢,首先各位应该记得咱是不是要扭上一个配置对象了。
06:01
那我来扭一下啊,比如这个我起个名字,我就叫这个配置pro。等于谬上一个配置,然后在里边呢,传输两个参数,一个是当前页,一个是每页计数数,这是里边的第一步,然后写完之后第二步咱就可以调用service里边的方法做这么一个就是。条件查询带分页,那wi里边,比如说给它把方法起个名字,我们就叫这个select这个配置。然后在所在配置中传入这么些参数,第一个就是咱这个配置。然后第二个是咱那个条件user info query will,最终它返回的应该是一个配置这个对象啊,具体说是一个I配置。这么一个对象里边传入这个泛型user info,然后这个名字,比如起名叫配置model,这样的话把CTRL我们就写出来了,然后写完之后最终我们加上一个铝寸。
07:08
result.ok加这个配置model,这是关于我们CTRL编写,然后咱们一会儿在search里边完成它的具体的查询,包括功能过程,现在CTRL就写完了,写完之后下面我们在service里边把这方法做创建。这个方法用户列表天然查询待分页,然后来到它的实现类中,在实现类中写下它的具体操作啊,就是里边的这个方法,用户列表条件查询再分页,而这里边我们需要怎么做呢?给各位来说一下啊,首先第一部分大家看啊,这里边是不是有条件啊,就是我这个条件值可能为空,也可能不为空,所以咱在里边一会肯定要做个判断,如果条件值不等于空,我们就设置它的条件,如果等于空我们就不设置,最终得到我们的数据,然后得到数据之后,因为咱们在用户中有一些其他的相关值,比如说咱用户里边有里边,比如咱们看一下啊用户信息中。
08:15
大家看里边的这个表,在用户信息中呢,我们有一些就是相关的编号等等信息,咱可以把它通过查询咱们的数据字典表把它可以得到,这个咱们会做进一步的完善啊,包括一些其他的属性,我们也给他做一个封装,那我们下面咱就把这个继续给它写一下啊,关于这个操作,那我来实验一下,首先第一部分咱们先通过这个user in for query view获取里面那个。条件值,获取条件值之后,我们对这个条件值。进行非空的这么一个判断。如果不等于空,咱就做这个条件的这个设置,如果等于空,那我们就不径设置,所以咱们现在来做这个事情,那这里边给大家写一下啊,第一个得到值,我们来依次得到user in for for view,第一个值我们叫这个keyword。
09:19
这个值呢,其实我们要根据这个就是用户的名称做一个模糊查询,比如这个账小宝或者其他值做个查询,然后里边还有第二个值,我都加上注释啊,第一个就是。用户的名称,然后咱看第二个值。第二个值呢,我们得到这个值叫CS,就是用户那个状态。状态就是它是可用还是不可用,然后里边第三个值user info get,这个叫authors,这得到是咱那个认证的那个状态。之前咱应该用到过认证状态,如果你是零,未认证一,认证中,二表示已经认证通过,然后除了这个之外,下面还有两只,一个叫做可的time begin。
10:13
还有一个叫create time,这个and,我把两值先写出来。就是这个。然后这两只是什么呢?它就代表咱们查询的一个时间的范围,这代表你的开始时间,这个代表我们的。结束时间,比如说我现在根据这个2021年1月1号到2021年1月10号这个反应中的值,所以这就是开始和接入时间,所以现在咱们通过V类把里面几个条件值给它都取出来了,这是我们的第一部分。然后取出来之后呢,下面咱们对条件值做个判断,如果说条件值不等于空,那我们来设置它的这个条件,那咱们来做到,首先我先new一个叫query rapper里边传入user。
11:07
咱们叫这个rapper等于new上一个快rap,这是我们设这个rapper一个条件的这么一个包装类,然后写完之后,下面咱们做这个判断,首先我们判断第一个就是里边这个name,那咱们加上一个工具类string u点意思M,如果说name值它不等于空,那我们项里面是不是来设置它的条件,那咱写一下啊,不等于空。是不是加个C感叹号,就是它的值不等于空,那我们就来设置条件。Rapper点上咱们做一个模糊查询,所以里边我们写上一个like,在like中的咱看一下加上它的字段,我们是这个name。后面加上它的值,这是我们的第一个判断,然后下面判断跟它写法基本上是一样的,那我用它复制,咱们快速改一下,咱看第二个值啊,这个叫CS用户状态。
12:11
如果说用户状态不等于空,那这里边我们来做一个查询,然后用户状态查的话,我们加上一个叫EQ,然后里边加上那个字段。字段我到里边复制,就是里边这个叫CS。这个拿过来。然后它的值就是这个,这是我们的第二个。咱们再来看第三个,第三个呢是它这个认证状态叫这个author status,咱用它也做查询,然后把这个字段给它复制过来,它叫author。Theatres。啊,Author thes,这是认证状态,除了这个之外呢,最后有两只,一个叫开始时间,一个叫结束时间,那这两只怎么做呢?大家看啊,每次我加这个用户里边是不是有个创建时间呀,那我们就根据它做操作,如果创建时间大于这个开始时间,是不是要小于接束时间,或者说大于等于开始时间小于等于接束时间来用它做一下,那这两个给它复制,咱们快速写下啊。
13:23
第一个是开始时间,就是里边的呃,这个值,然后开始时间我们用的这个叫做,咱看这个字段啊,它的字段的名字叫做time。这里边加上咱们的开始时间,而开始时间呢,并不是EQ,咱是不是要大于开始时间呀,那大于的话,这里边我们用到里边有一个方法代表这个大于,咱给他写一下啊。那各位看啊,大于的方法是不是叫DT,如果说咱写的是de,那是不是就代表这个大于等于啊,这是一个,然后下面有一个结束叫create time and跟这一样,那这个里边也是加一个create time,后面加这个time and,咱是不是要小于等结束时间小于应该用的是LT。
14:17
然后小于等于用的是不是这个Le,所以这样的话呢,咱们把这条件替换成判断,最终我们做了这么一个条件的封装,然后封装之后下面咱就可以调用map里边的这个方法实验这个条件查询带分页,那我来调一下啊,我们调这个叫base map中的这个方法,咱们调这个select是不是这个配置。然后在散的配置里边传入两个参数,第一个参数就是这个配置。P第二个参数就是咱这个条件的封装对象rapper,然后最终它会返回,这个叫配置一个对象,这样的话咱现在就完成了这么一个结构,通过调用方法。
15:04
条件查询待分页,最终得到了咱们这个结果,比如我起名叫这个配S,这咱们就完成了啊,然后完成之后呢,就是现在我把它直接返回是可以的啊,因为这个对象是一样的啊,就是一个父和子的关系,比如叫IPA是一样的,现在给它返回是可以的,但是返回之后呢,这里边的值其实咱可以写的更完整点,我们写什么值呢?给各位说一下啊,比如说大家看啊,我现在这个状态中。有这个状态是不是有这个一或者零啊,那比如说咱们约定这个零和一,让它显示不同的中文,比如它是零,我们显示锁定一就显示正常,这个咱需要给他做进一步的处理,包括这里边其他值,比如说你看啊,我这里存的是一个身份证,直接存这个名称,这么存更方便,如果你存的是一个编号,那再根据编号是不是还要做这个远程调用,做这个查询啊,所以咱们现在就简单点,直接把这个就是零和一给他做个判断,然后最终把这值给他返回,为了咱后面在前端显示会更加的方便。
16:13
所以下面咱们把这个的就来弄一下。那这个怎么实现呢?跟咱们之前写法类似,比如现在我在里边写下啊,咱的做法就是呢,把这配置词给它遍利得到里边的每个u info,然后像每个u info中设置它那个值,也就是它的编号对应的具体内容,那我们写一下啊,就是把里边那个编号给它变成对应的那个值。我把这个给他完成一下。对应的值,那怎么做呢?咱们还是用我们之前的传统方式,比如现在我用配置S点上get一个方法叫records,得到的是是一个例子集合呀,咱们把例子集合变成一个stream流,然后咱们用个方法叫for each。
17:06
在fo中我加上一个item,然后这里边就做了一个便利,便利之后在里边咱直接调用一个方法做这个数据的封装,那比如说写个方法,我就叫这个。Package user info里边传入这个item,咱在这个方法中完成这么一个编号对应值的这么一个封装,那下面咱把这个方法给它快速完成一下。我来写一下啊,这个方法我在当前类中直接咱就做一个创建了,就做这个封装,那这方法最终呢,再让它反一个值,就是我们这个user。以后啊都返回就是它,然后在里边我们写一下啊,首先写的过程中,咱要把编号主要是两个编号,第一个编号就这个编号在那个认证状态零,一或者二,然后第二个编号是里面的状态零或者一,那咱们先写这个认证编号,那怎么做呢?两种方案,第一个方案咱可以把这值都取到,看当前什么值,然后这个值呢,咱通过异步判断,如果是零,我们显示就是未认证,是一显示认证中,是二显示认证成功,这也一样,如果是零,我们显示锁定,如果是一显示正常或者说未锁定,所以现在我们就这么来做。
18:31
那这做法中大家看一下啊,就是我在这个猫豆中呢,也有一种比较简单的写法,咱们看一下猫豆里边有这么一个。枚举类我们叫als in um,然后在这里边是不是有这些值啊,这些值对应的是不是有它的名称啊,所以咱用它应该是更加的方便一点,那我现在就用这个枚举类,把这个就是认证状态给它处理一下,我写下啊,就是第一个我们先处理一下那个认证状态的这个编码。
19:07
那怎么处理呢?因为现在咱这个值啊,最终可能要放到咱们这个user info中啊,那我叫user info,那比如现在我就像这个user info里边来设置它的值,咱还是用这个P。点上put,然后里边的第一个值就是咱们那个认证的状态,比如我叫这个author。CS。此。然后它的状态呢,咱通过刚才咱看那个枚举类中的这个值,那我们找到那个值,咱们看到啊,在枚类中呢,有一个方法就是这个方法。你看它。根据你的状态改成你的名称啊,咱就用这个方法,然后这个方法中呢,得到的那个具体的认证状态的值,我通过user info.get authors,这样的话把这个就完成了,处理认证状态编码变成咱们的具体文字,然后这个做到之后,第二个咱再梳理一下。
20:11
我们这个用户的状态,用户状态嘛,就是零或者一,那咱们来写一下啊,这个应该没有对应的枚举类,所以咱们单独给他写一下,那我们看怎么做啊。首先咱们通过user info.get the。通过它得到的是不是就是咱的状态呀,那这状态中呢,比如为了方便我这么做啊,我给它加上一个三元表达式,咱做个判断啊,当然你肯定有其他方式,但是写法都是类似的。我加个CN表达式吧,然后点get c,我直接给它变成一个特类型,如果说它的值等于零,那就显示出这个值,我们就叫做锁定。然后咱们加个冒号,如果它的值不等于零,我们就显示这个就叫正常,所以这是我们做的这么一个判断,各位应该能看懂啊,咱们看这结构,如果说你取到它的状态值是零,我们就显示锁定,如果它的值不是零,我们就显示正常,这个做到之后,把它最终也是放到咱们的user info。
21:24
Time里边点铺的方法里边加上这个名字,我们叫CS。然后加上你这个。The string,这样的话,咱们把这个额外的纸就完成封装,封装之后最终顿这个user INF for,这样的话,现在我们把这个用户列表功能就完成了包,当然除了查询基本数据之外,里边还有一些编码对应的具体内容的一个转换,现在我们就写出来了,这是我们开发的第一个接口,用户列表接口,所以各位能按照我刚才的过程把这接口能给他快速写出来,因为大家发现啊,我们写了这么多接口,接口的写法应该都差不多,都是类似的过程,所以现在这个咱们就完成了,完成之后呢,马上再来整合它的前端,把前端效果整出来,然后再来开发它其他的功能。
我来说两句