00:00
下面呢,我们继续来实现为用户分配决策接口,刚才我们写到了service里边,在service中呢,我们有两个方法,第一个是查询,第二个分配,那咱们先写第一个查询方法,那咱们看怎么来做啊,刚才给大家分析的过程,那我把这里边的过程给各位再来写一遍,咱们按照步骤一步一步进行实现,那咱们看一下啊,首先我们要写的话,第一步操作,我把这步骤呢给各位写的详细点啊,第一步操作咱先这么做查询。所有的角色返回的肯定是一个历史集合。这时候我们做的第一件事情。然后第二件事情咱们做什么呢?写下啊,就刚才提到的,我们第二件事情根据用户ID查询。角色用户关系表,然后查询到用户ID对应的所有的角色ID,这是咱们做的第二部分,我这里强调啊,就是这个功能的实现,其实你可以直接在这个文件中编写一条circle语句,已经实现,这么做是完全可以的,我这里边就用这个代码方式一步步做到你写个语句也完全可以,那我现在按照我思路来写,我这里再重复一遍啊,第一步咱们把所有角色查出来,返回例子集合,最终进行返回,然后第二步。
01:29
我们做法就是在里边根据用户ID查询角色用户关系表,查询用户ID对应的角色ID,这是咱们做的第二件事情,然后我们的第三件事情做什么?咱做法就是根据查询出的所有的角色ID,然后找到对应的角色的这个信息,或者说角色对象,这个过程有多种方式,你可以查数据库,但是其实不需要了,因为大家看啊,第一步操作是所有角色大家做个判断,看ID在所有角色中是否存在,如果存在的话,就取到这个对象,如果不存在,那咱就不取这个对象。
02:14
这里写下啊,根据角色ID到所有角色。所有角色的这个粒子集合里边。进行这么一个比较。如果说啊,有相同的。那咱们就把这个对象取到,如果没有的话,那就不取,所以我们现在这么来做,这是我们一个基本过程,然后最终我们的第四步,把我们得到的两部分数据封装到map集合中,最终进行返回。以上是咱们分析的基本步骤,那下面我们来写一下啊,因为过程中要操作到用户角色关系表,所以咱把那个用户角色的给它注入进来,一会儿要用到刚才咱们用代码生成器应该是已经生成过了。
03:15
我这里写一下啊,用户角色service。也就是这个。把这个给它生成出来啊。现在就都准备好了,那咱们下面写下代码啊,首先第一个查所有角色,因为当前就是角色service,那咱直接查一下啊,我们在service里边呢,可以调用,咱们之前讲过啊,之前没有用过,大家想一下中怎么map这怎么做。第一种方式,你看啊,我把map是不是可以给它进行注入啊,然后调用这么做可以,但是其实咱们不需要注入,因为它里面已经帮我们做到了,你看啊,我的第一个在的类这个M,他把M是已经做了注入,然后他给注入之后起个名字base map,所以咱们怎么做,直接用这个base就可以了,就帮我们注入,那咱们调里面的方法,Select list直接传空,因为我要查所有这个得到就是所有的角色,我们起个名字啊,叫这个。
04:25
呃,O肉粒就是所有的角色加个O。现在第一步完成,完成之后我们继续往下来写啊,第二步操作,根据用快递查询用户角色关系表,得到用户对应的所有就是ID,那咱们做个查询,这个查询呢,因为咱需要用到条件,我先做个封装。的RY,注意啊,加是这个用户角色的这个体类,因为要查这个表,我们起个名字叫rapper,等于上一个拉的rapper,然后在里边设置它的条件,这个条件呢是根据用户ID行查询。
05:13
我这里写一下啊,加上用户ID,注意不要写错啊,传入又在D,然后条件放上之后,我们调方法进行实现,这方法调这个用户角色service,因为要查,然后咱们这个方法它的名字应该就是里这个。例子的传入rapper。最终得到我们这个结果就是这个例子集合,这个例子集合你可以理解为就是当前用户他分配的这个角色,因为一会咱要重新分配,把它要进进一步操作啊,那这里边我给它起个名字啊,呃,这个名字呢,我看一下我课件里边啊,跟他就保持一致了,就这个。一个Z肉ID。啊,就这个啊,肉栗的。
06:01
已经分配的角色的集合,所以现在这一部分我们就完成,完成之后呢,大家看啊,现在在这个集合中有当前用户所有的角色ID,另外还有很多其他值,那咱下面就是专门把这个角色ID给他取出来。而目前呢,是一个对象啊,那我们给它取一下啊小D位置。写个注释啊,从我们。查询出来的。啊,出来的这个用户ID对应的角色的。例的集合里边获取出所有的这个角色的ID,就是把里面这个就是你可以理解为把里面的ID都得到,因为它里面有很多值,我们只需要它的ID,那怎么做呢?最简单方式就是集合嘛,咱便历得到每个对象,每一个对象中取到ID,咱可以放到一个粒子机合中,最终进行实现啊,这么做完全可以,当然各位还要记住还有一种方式啊,各位应该知道JAVA8中有个特性叫stream,流加拉的表达式,用它也可以做到,所以这里边我就不写普通的方式了,我通过流加拉表达式做到,你写普通方式也完全可以,那怎么做写下啊。
07:24
一个user list,点上stream,点上一个方法map做数据处理,然后在map里边呢,咱们做这么一个事情啊,我给它起个名字,比如叫这个啊,咱就叫这个C,或者你叫别的也可以啊,加上一个拉姆的表达式。然后咱们加上c get这个ID,你可以理解为就相当于我们把这个集合得到里面这个角色ID,然后得到ID之后把它最终用一个方法叫collect,然后用这个collectors。
08:03
方法叫to list,最终给它放到一个list的集合中去啊,所以现在这个我们就完成了,然后这个集合给它起个名字们,这个呃,跟它保持一致啊个ZI。咱们叫这个名字。所以现在这个就完成了,这么写呢,很多同学应该没看懂他这句话到底是什么意思啊,就到底它是什意思,那我这里边呢,把这个代码给大家写的,就是用通俗的代码再写一遍,这么写完全可以,因为你看这个写法的优点就是一行就能实现,但是这么写很多人不太理解,所以我给他再写一遍啊,但是建议各位用这个来实现。咱们写的就是更原生一点啊,我们的做法就是把集合进行便利。就这个几何经变利好,我写的原生点。便利之后呢,得到里边的每个对象啊,这个对象,然后得到对象之后,从里边的把它的角色ID取到,这里边是不是有很多角色ID,然后取到之后呢,把多个角色ID放到一个例子集合中去,咱们new一个例子集合,比如我就叫例子啊,咱为了编写这个过程。
09:21
像例子中放这个那种例点A的,加上这个热ID,然后最终在例子中是不是有所有角色ID,所以咱们也可以这么做,两段代码的效果是等价,就看你怎么去写啊,我就用这种方式行了,这个我也保留在这里给大家个注释,你看这个写法中啊,通过此什么流把集合便利得到角色ID,放到例子集合中去,现在这个里边有当前用户所有的角色ID,这就可以了,然后有之后再往下看啊,因为咱们要得到是你这个角色的这个对象,就是角色名称等信息,这里边只有ID,所以第三步操作咱这么来做。
10:05
让每个决赛地到所有的角色集合中进行比较,如果里边包含的话,那把它对象取到,如果没有的话,那就不取,就咱们写第三步啊,给大家写一下啊。首先我先创建一个list集合,加上这个角色啊,咱起个名字就叫这个,比如叫A赛。肉list等于上一个list,然后下面呢,把这个所有的角色进行利,就是它进行便利,我们来写一下啊,加上for循环,我们便利下。得到这个角色。就是然后之后呢,我们做这么一个就是比较啊进行比较,那怎么比较呢,我写一下啊,咱们加上这个if。
11:05
就是如果说啊,我们已经分配好的集合里边。点一个叫它含这个ID,通过它就是里边有这个ID里在。加上啊,这个叫应该是这个ID。那这个时候表示它里边就相同,相同的话,我们取到这个对象,然后放到这里面去。给写一下啊,加上这个system,所以现在在里边我们当前用户已经分配的角色对象,这个代码我们就完成了,完成之后最后给它放到map集后中,我们最终进行返回就可以了,所以这周我们写的基本过程,这个我再说一遍啊,过程稍微要麻烦那么一点点。首先第一步得到所有角色,这应该都能看懂啊,直接调方案就可以了,然后第二步操作。
12:03
根据用户ID查询用户对应的角色ID,这得到是所有的角色ID,因为咱们反映这个对象,从对象中遍历得到所有角色ID就是肉ID。得到角色ID之后,咱们进行比较,就是为了得到角色ID对应的对象,因为这是所有角色嘛,所以根据它进行比较,如果里面包含ID啊,那把里这个就能给到,就都放到这个最终的机构中去,所以现在就完成了,完成之后咱们这个代码我就复制了啊,把它放到map集合中,最终进行返回。给头放下啊。我们看这个特点。善。肉ID。然后这个是所有的这个角色。跟我们这个保持一致。现在这个就完成了啊。
13:02
最终所以咱们完成了第一个接口的实现,把这个就做到了,做到之后呢,我们再看第二个接口,为用户分配角色,咱们看这个该怎么去写。刚才呢,我们也做了分析啊,就是我现在也为用户分配角色,我这用户呢,可能之前已经分配过角色,所以咱们做的第一步操作,把用户之前分配的角色的数据先给他删除,然后第二部分再重新进行分配,这是我们做的事情,那第一个怎么删除呢?我们的做法就是根据用户ID删就可以了,也就是把那个写的更完整点啊。用户。角色关系表里边根据用户ID进行删除,这是第一部分,那咱们来写一下啊,这个删除过程,删除过程呢,首先咱们还是要封装条件,注意啊,这是那个用户角色这个关系。
14:06
咱们加上一个rapper,等于上一个拉的rapper,向rapper中来设置,这个条件是根据用户ID。我这里写一下啊,应该是这个ID不要错啊,然后用户ID我们通过这个。肉VO给它取到。点get。里边这个方法用ID,然后取到之后咱们调方法进行删除,注意调的时候不要调错啊,调咱们这个。注入到service里这个delete方法啊,这里应该不叫delete,它叫做啊,咱们这个条件,根据条件把它删掉,也就是啊,比如现在我想为用户一分配角色,那他把之前这数据先删掉,然后再重新进行分配,根据这个ID删除,这是第一部分。
15:03
然后之后我们再重新进行分配,那怎么分配呢?在赛肉V里边有一个所有角色ID的这个集合,咱们把它得到啊,就这个集合,然后得到之后把集合变历,咱们一条一条进行添加就可以了,现在我做一个变历。然后它里边应该是那个用户的啊,就是角色的ID啊,啊不是用户是角色ID。加上肉ID,下面我们进行这个添加,那添加的时候呢,首先我们写的完整点,先做一个判断,如果说ID等于空,那肯定就不需要了,如果它不等于空,我们再添加就做一个简单的非空判断啊。缀us.empty ID如果等于空,那咱就直接加一个,这么啊,就是跳出当前循环。否则的话我们在添加,添加的话,那咱就是new这个对象往里面塞值就可以了。
16:07
咱们啊开头写一下S值的时候呢,第一个值用户ID通过这个。呃,VO给他取。然后第二个值是角色ID。肉ID啊,通过这个我们得到角色ID,最后调方法进行添加。Service里边有个方法,应该叫这个把对象传入就可以了,所以以上啊,这个功能我们就完成了啊,咱们再重复一遍啊,为用户分配角色的流程就是第一步把之前分配的角色先给它删掉,然后第二步重新分配,因为在VIVO里边有所有角色的集合,把所有角色ID的集合便利得到每个角色ID。咱们把每个ID对应这个用户ID都加到数据库表里,最终就是在这个表中有咱们相控的关系,就咱们说的多对多里边的用户角色关系表。
17:11
所以现在啊,这个两个接口就完成了,为用户分配角色。然后两个接口完成之后呢,咱们下面啊,就是这里边来实现下一个接口,这个接口比较简单了,就刚才提到的,我们可以更改用户状态,然后最终咱们把前端快度整合进行最终测试,我们这里边的重点关注到后端,前端整合一会咱们直接复制可以了。
我来说两句