00:00
下面呢,我们继续来完成公众号菜单接口部分,咱们刚才写到接口中还剩下最后一个接口,获取所有菜单,这个菜单我想给他封装成咱们的这种结口,就是里边很多异义菜单,每个异义菜单中又有很多二级菜单,我想要做这么一个封装啊。当然这个过程呢,咱是故意写的一种封装方式,我们也可以按照之前咱们说那个懒加载方式,做到跟之前做那个课程分类管理做成一样的也可以,我现在就换一种方式来写,那怎么做?首先把这个代码的实现过程给各位先写一下,然后一会儿我们做一个最终实现,那大看怎么做啊,首先第一步咱一会儿做的话,我可以先创建一个。历次集合用于咱们最终的数据的封装,这是第一步,然后创建之后,咱第二部分怎么做呢?因为现在我们要做封装,咱这里边有数据,所以第二步呢,我就查询出。
01:04
咱们所有的这个。分类的,或者所有这个一级二级这个菜单数据,把数据都查出来,我这里特别说明啊,我这里写的这个过程是一种实现的方式,你可能还有别的方式也能做到,都是可以的,这里边看你的实际,我只讲一种比较通俗的方式,但是你可能有别的方式,总之最终能把数据变成这个效果就可以了。那我就按照我的思路给大家写一下啊,第二步,我这里边查出所有的菜单数据,这个数据中我强调啊,包含你的一级和二级,这里边全有,这是第二步,然后完成之后,咱的第三步操作怎么做呢?从我这个所有菜单的数据里边获取到所有的一级菜单数据,把这得到,那怎么得到,刚才咱们提到了,就是说我们判断。
02:03
Parent ID值。等于零的数据是不是就是所有的一财的数据,所以咱们下面一会这么来做,然后这个做到之后,我们下面的第四步,第四步怎么做呢?咱就开始封装我们的那个。一级菜单数据最终放到咱那个最终的那个数据的历子集合中去,就是我们第一步的例子集合中去,把所有一层的数据都封装到里面去啊,咱写到研究点封装到里面去,然后这个做完之后,咱的第五步再来封装。封装什么,是不是二级菜单数据,那怎么封装呢?里边其实就做个判断,判断什么写一下啊。判断你的一级菜单的ID。和二级菜单的什么parent ID是否一样?
03:04
判断这两个是否相同,如果他们相同的话,那就把二级菜单放到一级菜单里边,就是里边的这个过程写下啊,如果说这2ID相同,那就把这个二级菜单数据。放到一级菜单的下边,或者一级菜单的里边来做这个步骤,然后最终把咱需要数据集中在返回以上就是咱们分析的一个基本过程,我再说一遍啊,第一步间隔集合,因为最终封装。然后查出所有数据,包括一级,二级,然后第三步得到最后一级数据就排等于零,然后封装一级数据,然后下一步分成二级,怎么封装,判断数据中谁的就是判断ID和一级的ID一样,那它就是这下面二级菜单,把它放到一级里边去,最终完成封装,因为大家看到啊,它的结构就是。ID和ID表示他们的层级关系,所以咱们最终这判断做封装,以上是咱说这个基本过程,那下面按照流程我把代码写一下,第一步我先建个历集合,加上泛型menu,然后起个名字,这个名字我就叫。
04:20
Final这个list就是最终的集合,等于上一个a list。啊,比如说咱起的完整点,我叫final menu。List。最终菜单集合,然后这个选完之后,下面呢,咱们把所有菜单数据都查出来,不管一二级都查出来,Base map中的select list加个no,这查出来是不是就所有才能数据,咱们起个名字menu list,所有数据,然后所有数据取到之后,咱从里边把里边的就是所有的一级参数据取到。那怎么取到,其实很简单啊,第一种方式,你把它变历,变历之后呢,判断里边这个判值是零,那就取出来,咱们再写个集合净封装。
05:11
就是可以把它遍历这些得到,而这个写法中呢,各位应该知道JAVA8中一种写法叫STEM流,咱通过流也可以做到,所以现在我就用流给大家写一下啊,但是如果你不习惯把它便利依然可以得到,过程都差不多,我就想故意用一下4G流经实现。大家看怎么做,把它放到水分流里边,加上里边一个方法叫这个方法filter。什么意思啊,是不是过滤就过滤谁的等于零就可以了,然后在里边我写一下啊,加上一个叫menu。然后menu里边就表示便利,每个对象是menu menu后面加上它那个就是过滤那个值,通过menu里边那个方法叫get判D,若它的值等于零。
06:03
那咱们就做个处理啊,咱为了明确这个ID值,给它做个转换,变成一个浪类型,如果它的值等于零,那表示咱们就过滤这个数据,因为它里边会有很多的menu,就是集合里边有很多对象,每个对象中它会有很多这个值都是零,所以咱最终把这些数据给它放装到一个新的例子中去。加上一个方法,我叫这个collect里边有一个工具类方法,叫collect里边的to list,最终变成一个list集合。所以咱现在啊,把这结构就力完成,然后给它往下拉一点啊,一会咱会再说一遍,最终变成的是一个list集合,然后这个list结合中就是放咱们所有的一级菜单数据,咱们叫y menu。例子。这段代码我们就完成了,那咱们啊,把这个代码我们再看一遍啊,它的特点是什么。
07:02
我们的做法就是首先通过流把这个me list变得到每个对象,然后判断每个对象中的判值是不是等于零,如果等于零的话,把这个对象值取出来,最终放到咱的例色机构中去,最终这个例色机构中有咱们所有的一级菜单的数据。所以现在这个代码我们就最终完成了,大家把这代码能给他准确的写出来,是咱们四分流里边一个最常见的代码,各位应该特别熟练。所以现在啊,这部分我们就完成了,然后完成之后我们继续往下来做,呃,这格式你稍微调整一下啊,继续往下来做,那下面怎么做呢?因为下面这个一菜单数据得到了,那咱把这个一级菜单数据就封装到这个final卖list中就可以了,给它做一个封装实现。
08:00
那怎么封装,我们看一下啊,因为一级菜单这个集合它的泛型跟最终的泛型是不一样的,所以咱们需要做一个转换,那我写一下啊,怎么做啊,写个注释。便利。一级菜单这个历史集合,然后最终做转换,我来做个便利。加上一个for each。啊,这个叫menu,然后咱起个名字menu。遍历这个y menu list,把一级菜单的集合进行遍历,得到每个一菜单,然后咱们做的话就是把我们的这个me这个对象。给他怎么做转换成是不是这个menu view这个对象,给它最终放到里边就可以,就是做一个类型转换,因为他们的类型不一样,咱给他转一下啊。Menu。
09:00
等于。上一个me啊,为了咱们看到明确我叫这个。Me啊,咱们叫这个名字。然后这个转换之后,咱们用一个工具类,也是咱们之前特别说过一工具类,这个叫BU里边的copy pro,把这个menu中的数据复制到one menu view里面去,现在这代码执行之后,在one me view中有咱们的所有内容。现在这一部分就完成了,然后完成之后呢,咱把这个数据我想这里啊。就是把我们这个。My view中的这个数据放到咱们最终的这个list构中去,那我现在放下啊,Me list加上这个叫nu view,现在这部分就完成了,就是现在这个做完之后,在咱们的历子机合中有咱们所有的一级分类的或者一级这个菜单的数据里边都存在了。
10:10
目前这步就完成了,然后完成之后呢,下面咱要再附上他的二级菜单数据,当然二级菜单跟一级要做比较,所以咱们啊,在一级这个循环里边进一步做封装,就在这个位置来写,因为它里边要做这个判断,你要得到每个一级的这个ID和二级的这个ID做个比较,所以咱们写到这里。那咱们看啊,这一部分该怎么去做,给大家写一下啊这个代码。然后我现在啊,咱们进一步往下写一下。首先做到。就这个事情,咱们就要判断一级的这个ID,就是一级菜单的ID和二级菜单的判ID是否一样,如果他们一样的话,那就是这个一下边的二级菜单,把它做这么一个放到一里面去做封装,所以下面就来做这个事情,看他是怎么样的啊。
11:08
那我写一下再看怎么做啊。就是现在因为咱们所有数据都在menu list中,所以用同样这个filter方式,咱们还是用这种方式实现,我把这个结构拿过来,再用它改一下。我写一下啊,这里边起个名字叫这个to menu list,还是给它放到里边,然后这位置条件,那就不是这个条件了,我们写一下啊,这是便利我们要。就是刚才提到的啊。一级的ID和二级的ID,这个是二级的ID,那大也得到一级ID,一级叫做one menu.get ID,让这两个做个比较,如果它们相同的话,把值取道放到一个新的例子机构中去。以上就是用到40分流中的非右做比较。
12:02
这各位要特别清楚啊,我再说一遍。咱们的做法就是用这个一级菜单中的ID和二级中的per ID做比较,如果它们相同的话。那就把这个值取到,放到一个新的集合中去就可以了。这是咱们啊说的这个过程,然后这个写完之后,咱们继母来做啊,因为现在二级同样也要变成这个VO这个对象,所以咱们用相同方式再来处理一下啊,也就是这么来理解,咱们把这个类型。这个类型。变成这个叫menu v这个类型做这个处理,那咱们写一下啊,和刚才基本上是一致的,咱们现在继续进行便利。Menu啊,这个我们叫menu。Me nu,然后便利的是这个叫to menu list,把它做个遍利,遍利之后呢,把这个变成vu在里边,我就下这个me。
13:11
然后咱们叫这个to。Me,不?等于妞上这么一个地下。然后像这里边我们用B还是做这个数据的一个这个复制啊,Copy把里面那个中的数据。复制到这个to menu view中去,目前里边有我们的数据,有数据之后咱在上面的建一个粒子集合,封装咱这个数据来建一个集合啊,比如咱们叫这个就叫children吧。啊,这名字随便写,我就叫children啊,New上一个,然后在children里面放咱们这个数据,点A加这个叫to menu view啊,注意不要放错啊,也就目前children里边有一级,下边的所有二级菜单都存在了,然后都有之后咱们下面做这个事情,就刚才提到的,把你这个二级菜单数据放到一级菜单里边就可以了。
14:15
那咱看怎么做啊,一级菜单是不是这个数据menu view,所以咱们给他往里面放,在它里边set一个。方法啊,就是set一个叫children准,里边放这个children准就可以了,因为咱们刚才看到那个view对象里边啊,再看一下啊,里边是不是有个秋准代表它的二级菜单。所以以上啊,咱们就是通过这个过程,就把这个一级和二级菜单做了封装,最终把这个nu me list做个返回可以了,这个不要忘记啊,忘记把最终数据给他返回。现在这个封装的过程咱就做到了啊,稍微麻烦一点,但是实际中呢,这种封装思想用的很多很多,所以下面啊给各位同学我再说一遍,后面咱来做最终的测试,咱再说一遍啊,我们的做法就是先创建一个集合,用于封装最终数据,然后第二步得到所有参单数据,包括一级,二级,第三步把里面所有一级渠道,那就是判断谁的party等于零,就是一级。
15:27
然后判断之后,下面咱把一级数据放到集合中去,因为他们的类型不一样,用BU做个转换,转换之后咱再封装二级,二级怎么做,同样判断一级的ID和二级的PD如果一样,那它就是二级同样放到这个机构中去,最终就是把二级都放到一级里边,再做最终的返回。所以咱们现在啊,通过这些过程就完成咱们这个菜单管理的相关接口。
16:00
咱们看一遍啊,返回所有菜单。获取意义菜单添加、修改删除,批量删除这个功能,咱目前把这些基础接口就都做到了,然后这里边呢,比较复杂点的应该就是第一个获取所有菜单,按照一级和二级菜单这个结构,咱们做这封装,大家把这个封装过程好好去写写,是咱们说的一个重点部分。
我来说两句