00:00
那上一节课呢,我们编写了分组里边属性的获取和删除功能,当然点击关联首先会查出当前分组里边关联的所有属性,我们会给我们服务器来发送请求,发现这块有一个报错,来看一下这个错误,这个错误的原因呢?他说在这查询我们这些属性的时候,我们要where at TD应一个集合出错了,出错的原因来到这。我们要查某一个分组里边关联的所有属性,我们是先去关联表里边查到所有的关联,然后拿到关联属性的所有的ID,我们再去查这个集合,但有可能这个集合呢是空的,所以我们在这一定要做一个非空判断,再来进行查询,如果说at ts等等,那或者呢,它里边的长度是等等零的,那么就可以给它直接返回为空return一个那。那这块呢,我就先修改一下,然后我们再来看,当我们来点击新建关联这个界面呢,首先会展示当前分组可以关联的所有属性,如果我选中了几个属性,点击确认新增,那它就会关联上这几个属性。而现在的难点就在于我们需要查出哪些属性是当前分组能关联进来的。首先要求是这样的,当前分组能关联的肯定是本分类下的,而且是本分类下没有被其他分组关联的这些属性。所以在这儿呢,我们会发送一个请求,F12,看一下控制台,我来点新建关联的时候,发送请求会查出当前分组没有关联的这些属性。
01:43
那按照接口文档,我们这有一个获取属性,分组没有关联的其他属性,而且呢,属性可能有很多,我们在这儿还是一个分页查询,好,我们来编写这个功能,那来到product at tr group里边来到at tr group controller,那现在前边是查询分组关联的所有属性,那么在这来查询分组没有关联的所有属性,At tr no relation。
02:10
我们来写上我们的请求,映射一个get map,那现在要映射上at tr group I no at tr relation。主要在这呢,还是要获取路径变量at tr group ID,我们把它先获取过来,而且呢,还会收集页面带来的这些分页参数,所以我们把以前所有的参数,这个map我们都收集过来。放到这儿。我们希望呢,有一个at t service。At tr service能给我们获取到get no relation at tr,而且呢,这是一个分页方法,最终会帮我们来返回配置us数据,配置us配置。
03:01
我们把这个分页数据呢,最终返回放到这。这个方法呢,会传入分页的所有参数信息,包括当前是获取哪个分组里边没有关联的属性,能创建出这个方法。我们来编写上它的实现,创建出它的实现,这个作用呢就是获取,获取。当前分组。没有关联的所有属性,那这个功能呢,主要有核心两点,首先第一点当前分组只能关联。自己所属的分类里边的这些属性,所属的分类里边的所有属性。它肯定关联不到别的分类里面去,第二个当前分组呢,只能关联别的分组,没有引用的属性。
04:10
那如果被引用了,他也不能关联,所以我们先来保证第一点,我们查询所有属性是指定分类的,那哪个指定分类呢?我们先按照分组的ID查出这个组所属哪个分类,来看一下,在分组里边保存了它的分类ID,好,我们在这呢使用at tr group的do.select8id把分组的ID传过去。让他呢,先来查出当前分组的信息,然后从这个分组信息里边,我们能获取到当前分类的ID。那以后要查属性,只能查这个分类下的其次。还只能查别的分组,没有引用的属性,那这个怎么做呢?我们首先应该我们可以找到当前分类。
05:02
下单。其他分组。然后呢,我们再找到这些分组关联的属性。那最后呢,我们可以从属性表里边剔除这些属性,从当前分类的所有属性中。移除这些属性。我们就可以得到我们没有关联的这些属性。好们先来找到当前分类下的其他分组,这是分类ID,我们使用at tr group来找到所有的分组。我们可以调用一个方法叫select list,当然查询条件呢,来传过来有一个corrywaer,我们最终要查出at tr group的实体类at tr group nt,但是我们的查询条件就是按照分类ID先来到at tr group这张表里边,拿它的分类ID,那先查出当前类里边的其他所有分组,把这个分类ID传过来。
06:07
把其他的所有分组呢拿过来,我们要按照这些分组找到这些分组已经关联了的属性,而且这其他分组啊,必须还不是我当前分组,也就是。三级分类I等于我们指定的值,并且我们的这个分组的ID不能是我当前分组,所以我这写一个not e口,那我们就叫呢ne not e口,我当前这个at tr group ID不能是我现在正在用的这个at tr group ID,那就查出了其他分组,找到这些分组以后呢,我们如何找到这些分组关联的所有属性,那其实还是从relation do里边。Select list,它的查询条件那就是new,一个corer,我们还是查出这个at tr at tr group的relation entity条件呢,就是一一个集合,比如我们在关联表里边,关联表按照它的这个分组ID分组ID只要是在我们其他分组这个集合里边的,我们就可以查出其他分组引用的所有属性,所以呢,这个集合呢,我们来把它获取过来,我们使用group.stream。
07:24
点map方法,我们用item来return一个item里边的当前分组ID。At tr group ID,最终把他们来收集成一个集合。但这个集合呢,我们还要做非空判断,我们可以把这个集合呢先传过来。那么就是来在这儿判断其他分组里边所包含的所有关联的这个属性,那把这个关联的属性集合就拿来了,而这个属性集合呢,我们现在可以获取到已经关联了的所有属性,那么就group ID,点一个stream,继续来map,那现在想要拿到已经关联了的所有属性的ID,我继续来return。
08:15
item.get at TD,我们把这些at tri最终还是收集成这么一个集合。那这个集合里边就包含了我们所有其他分组关联的所有属性,而我们要找的属性不是这些属性,所以我们就在这用at tr DA o,那就是我们当前这个service自己的DA this.base map就可以拿到at tr DAO,它呢要查所有的我们这些属性,但必须是当前分类,而且ID不是这个指定集合,所以我们要进行查询,我们就调用select list我们的条件,那就是new,一个corry water,现在是at tr n t实体类,条件是什么呢?点一个E口,首先我们要查所有的属性的时候,这个属性的三级分类ID必须是我们本分组下的,不能查到别的分组里边,我们本分组呢,在前面获取到了三级分类的ID。
09:20
而且呢,我们的ID不能在这个集合里边,我们有一个not in,我们有一个字段,哪个字段呢?那就是我们的at t这一列,这一列的值。不能属于我们指定的这些几何at t ids。最终根据这个结果给我们来得到所有的at tr n t,那这些就是我们可以查出当前分组可以关联的其他属性,把这个呢就放在这儿,最终将所有的其他属性要进行返回,而这个返回呢,由于是一个分页,所以我们把这个条件我们先挑出来,我们最后调用分页方法来按照这个条件进行查询好。
10:07
我们把这个条件呢就放在这,我们在这来加上分号al in,好,这是我们的corwaer,我们调用当前service this点配置方法进行分页,分页先要传一个IPA置对象,再传一个wafer wafer,我们现在这已经有了IPA对象,我们有一个工具类叫NEW1伽quary,在这个quary里边呢,我们类型是at tr nity。我们可以封装我们的页面传过来的分页参数,我们这个quary方法有一个叫get配置,我们将页面传来的分页参数拿过来放到我们这个挖per,这而且这个挖per要构造由页面会传来分页参数,也就是在这一块我们还可能会模糊查询的,所以我们还得判断,如果页面传来的这个分页参数里边有模糊查询条件,点get k。
11:00
我们拿到它的这个模糊查询条件,把它转成string。Al in强转一下,如果string YouTube判断its empty,我们的页面传来的条件不是空的,那么就给vaper再来拼装上我们的模糊条件,那这个vaper里边呢,就会有一个条件就是and,前面条件是一个集合,后面条件呢,我们也是一个集合,并且并且我们必须是这个条件,把这个waper我们就叫W,我们的waper呢必须是EE也就是我们的,我们可能按照at t的ID来进行搜索,那就at t ID等于我们指定的这个值,或者点O。或者我们的这个属性的名字like,那我们就是这个字段,那在这like。Like,我们指定的这个值。
12:01
那最终这个配置呢,就会帮我们来返回整个分页的数据。ipad对象我们使用new一个配置us,把它一封装就行了。将我们的IPA对象传进来,最终他帮我们返回整个PA置U这个东西,我们就直接给它返回出去。大家会发现这一块都是一些公共方法,所以我们后来还是可以继续抽取的,那么呢,就来启动测试一下。把这关掉。好。我现在呢,整个把控制台清空,如果有什么错误,我们在这及时解决。我们现在把这一块也清空来,现在点击关联,首先会查出它关联的所有属性。但现在呢还没有,所以我们发的这个SQ查当前分组关联的所有属性,我们现在没有,但我们点新建关联,它就应该查出本类里边当前属性组还没有关联的其他属性,那这块呢有问题,我们来看控制台。
13:05
首先控制台这一块呢,会有一个报错,我们把这解决一下,在这的报错呢,有一个SQL语句,那就是这个not in,我们会发现not in呢,这是一个空几何,而其他组呢,也没有关联任何属性,所以我们在这at TDS直接是空的,那我们在这儿呢,Note in拼装就是不成立的,所以我们在这儿要进行任何拼装之前,我都来判断一下,如果我们这个at TDS它是空的,不是空我们才来拼装,我们给waper来拼装这个东西,那么就来判断at TDS不等于nu,并且呢,它的size也是有东西的点一个size大于零。来重新启动一下。好,控制台呢,我们先清空,那在这儿继续来测试,当我来点击新建关联,他帮我们能查出所有可以关联的属性,大家注意这一块不仅查出了基本属性,还查出了我们的销售属性,我们分组呢,只是来关联我们这些规格参数基本属性的,所以我们在这查询的时候,我们还应该拼接上,不仅要查本分类的,嗯,而且按照它的at tr类型,我们在这儿来拼接上at tr type。
14:20
它呢,必须是我们的基本类型,我们用这个product at tr枚举里边有一个基本类型,点get code,我们再来启动。而清空控制台,我们重新来测试一下。好,我把这关掉,我点新建关联。他帮我们查出了两个属性,一个叫入网型号,一个叫上市年份,这两个是没有被任何人关联的,我们就可以来选中并增加他们的关联关系,来,我们来测试一下,如果我们已经有人关联了基本信息,二号分组的来测试一下我们的这两个,现在呢,我们就让七号关联,二号分组,我们来到关联关系表里边。
15:07
我们来录入一个,我们让七号属性来关联,二号分组我来保存,现在我们来重新来测试,当来点击新建关联。那七号属性呢就没有了,只能查出八号属性,因为七号属性已经被人关联了,包括自己在这儿我们来点击关联的时候,一号分组呢没有关联属性,但是二号分组它关联了七号属性。我们也可以对它进行移除,那重新要新建关联都是可以查询出来的,当然我们再来测试另外一种效果,如果我还是把这个七号跟二号录录进去,来让七号属性关联,二号分组。来看一下。在这儿呢,我现在来点击关联,我们二号分组呢,已经关联了入网型号,当我来新建关联的时候,那我们查的时候入网型号就应该没有,只能查出上市年份,所以我们这儿还有一个问题,就是我们在查他能关联的属性,除了要把其他分组已经关联的这些属性移除外,还要把它自己已经关联了的属性也要移除,那来到我们的这个controller里边。
16:14
在这呢,我们是找到了这些分组关联的这些属性,这都是其他分组关联的,那么还要合并上自己分组已经关联的这些属性,所以其实我们在这查询的时候,我们不需要添加上分组的ID,不能是自己这么一添加,我们反倒查不出自己已经关联的这些属性,并把它们排除掉了。好,我就把这个不要了,来重新测试一下啊,这个bug我们来看一下。我们来清空控制台,继续来测试。啊。首先呢,我们这个二号分组已经关联了七号属性,当我们在新建关联的时候,七号属性已经被排除掉了,那我们这个查询属性分组所有没有关联的属性就完成了,包括我们在这要进行模糊检索八,这也是可以的,那我要检索九肯定没有这条记录。
17:04
好。
我来说两句