00:00
下面我们开始编写代码,首先我们看第一步获取所有菜单,根据状态是一,我们进行查询,那咱们来写一下,按照我们之前讲到的,我们加上一个query rapper,然后加上泛型system menu。在里边,我们给它起个名字,就叫rapper。等于new上一个,然后加上之后我们调用方法就是base map中的方法select list,传入rap menu,最终里边返回到就是我们这个集合啊,咱先写一个结构,然后咱再加那个条件,它叫menu。历史了。这个位置我们把条件加上。这里写一下啊,Menu点上一个叫EQ,然后条件是这个叫CS,咱为了防止写错,我从这个表里边,我们直接复理一下,就是里边的看到啊,在菜单里边的。
01:01
这个字段叫CS,把这个直接复制。然后它的值就写个一,表示查询可用这个菜单,所以里边这个menu list就是咱们目前查到所有菜单,这步咱就完成,完成之后我们再看第二步操作,根据角色ID查询角色分配过的菜单,也就是说现在咱要查这个表叫肉卖nu,但是这个表查的话呢,咱们首先要把它那个service或者说map创建,那这里边因为咱们只查询,所以我们只需要建它的map就可以了。我在这里边我们来做个创建,当然这个创建你可以用代码生成器,但是目前应该不需要,因为就是一个map。所以用它我复制咱们快速把这个map做个创建,为了能进行查询,首先这个名字我们改一下,咱们叫这个system menu。Map把这个创建,然后创建之后把里面内容改一下,它继承这个叫base map,然后它的型叫system肉menu。
02:11
所以现在map我们就完成,完成之后咱们回到刚才的里边,继续来编写它相关的代码。因为要查询那个就是角色和菜单的关系表,所以咱们把map给它先注入进来。加上加上这个system肉。Menu。这个注入。注入之后,在这里边我们写下根据角色ID我们进行查询,那咱们快速做一个实现。我们加上query rapper。然后加上这个泛型system menu。然后给它起个名字啊,咱们叫这个rapper肉。
03:05
等于谬上一个rap,这个完成,完成之后向里边设置我们这个条件,这个条件就是角色ID。咱们到表里边看一下啊,到表里边看,为了防止字段名字写错,肉ID就是角色ID。啊,这个咱们复制过来。然后加上决赛地这个条件部分完成了构建,构建之后呢,咱们调用刚才咱们注入到map里边的方法select例子,然后传入这个rapper,注意啊,传的时候不要传错啊,咱上面是。Menu下面是肉menu最终返回的是一个历史集合,这历史集合中有我们角色中的所有的菜单,咱们就叫这个肉meus,所现在这个就完成了,比如说以上咱的两份数据就都有了,第一个是所有菜单,第二个是角色已经分配的菜单,然后这个之后呢,下面我们继续来做,按照我刚才分析的,因为角色分配的菜单咱们查出来是一个完整对象,其实咱只需要得到是不是菜单的ID,所以我从里边把这个所有角色分配的菜单ID得到。
04:23
具体什么意思呢?比如说咱举个具体例子啊,大家看啊。我这里边就是这个角色ID是不是二啊,然后二的角色是不是有这么多菜单,咱就把里面的这部分就是菜单的ID给他得到,就来实验这个啊,当然这个表里面有一就是已经删掉了,咱们得到的肯定是这个零的这个数据。这是我们要做的事情,为了一会儿比对做准备,下面咱做个实现,那怎么实现呢?首先第一个啊,我先建一个历次集合,就为了咱们一会儿做那个操作方便,那list集合中我加上一个list,然后起个名字叫肉menu。
05:05
Ids等于谬上一个a release。然后创建完集合之后,下面呢,咱们把刚才咱们查出这个肉mus,我们做一个便利。我们来变了一下。加上system。Menu。然后叫system。呃,比如我们起这个名字啊,System menu,它便利我们刚才查出来这个集合得到里边的每个对象,咱们从每个对象中把它那个菜单ID给他取到,就是这个menu ID,然后取到之后把每个menu ID就放到这个集合中就可以了,点上A的加上这个menu ID。所以现在大家看啊,我的这段代码中,在集合中有所有角色分配的菜单的ID都放到里边去了,这一步咱就完成,完成之后我们看下一步操作,下一步做什么呢?因为咱们有所有菜单,也有分配菜单,那咱做个比对,如果说这个分配菜单在里边存在,让它那个it就变成true,为了咱最终做个显示,那咱们写一下啊。
06:23
首先同样做一个便利,咱们把这个所有这个菜单这个集合给他做一个便利。System menu。然后叫system menu。我这里写一下啊。遍历所有这个菜单,然后便利之后呢,下面呢,咱就做一个判断,就看我已经分配的在里边跟哪个值相同,相同的话给它变成处。咱们写一下啊,我这里用一种最简单方式来编写这个集合,Menu ids,点上一个叫contents。
07:04
大家看这个方法什么意思,是不是包含意思就是是否包含这个值,那咱从这个菜单这对象中取到里边的ID,就看它们是否包含,然后这个包含之后,那就表示里边是相同的,相同的话我们让菜单里面这个叫意思select值,它就等于这个处就可以了,啊里面应该有一个set方法,咱加上这个set方法。S select值等于处,然后否则的话,那它的值就是false。这里写一下啊。它里面这个。等于副词现在这个就完成了,所以以上咱就完成了这个操作,但这步中啊,有一个小问题啊,之前咱也遇到过什么问题呢,大家看啊。我菜单里边这个I地址,咱找到菜单啊,找他的I地址是个什么,是不是死赘,但是我现在呢,这个地方就是我的这个损害地址是什么,是不是一个烂类型,就该给它变成同一个类型,要不然它里边比较中会有问题啊,但是其实也能比较出来,只是说你转换肯定是更完整。
08:18
这个问题呢,是最早咱一个遗留问题,最早咱那个MP的时候,因为那个long类型或者整数类型,Javascript只能处理到16位,所以咱后来改成了死string,然后其他部分咱们并没有做修改啊,它是之前那个遗留问题,那咱们统一啊,都给它改成死string,或者咱们后面就是比较更加方便。那这里边我给他改一下啊。比如说我从最开始来改啊,咱们刚才到接口中,这只是不是浪,我就直接改成了死了。然后改成之后,咱们找到我这个方法中改成瑞,或者你最开始就直接改一下就可以了,我这里是再改一遍啊。
09:02
然后这位置改成缀,改成之后往下看啊,第一步查询所有的菜单,第二步根据决策ID查询已经分配的菜单,然后第三部分咱就得到里面这个值,把它改成瑞,但是改完之后就是这个地方。因为之前的这个事一类中,它这值还是这个浪类型,那我就在这里边,咱就直接给他转下了啊,这里直接转下,因为它这值。就是一个long类型,咱直接变成这个string menu ID,这样的话再比对应该就正确了。然后之后呢,我们看最后一步,因为这个数据要数形显示,所以咱们用我们之前写好那个类,咱们直接做个实现就可以了。Menu和help。里边有个方法,Build tree传入咱们这个菜单的集合。最终返回这么一个集合,就是我们说那个树形结构。
10:05
把这个最终我们做一个退。然后这个方法我们再看一遍啊,咱之前写的一个递归,首先找到递归的入口,就是派等于零的这个数据,然后咱们递归往下查询,构建成一个水用结构。也就是说啊,以上这个过程咱就完成了,为角色分配菜单的第一个接口,这个咱就做到了,所以各位把这个接口能给他准确的开发出来。
我来说两句