47、商品服务---品牌管理---查询分组未关联属性

注意理清逻辑

/**
     * 获取当前分组没有关联的所有属性值
     * @param params
     * @param attrgroupId
     * @return
     */
    @Override
    public PageUtils getNoRelationAttr(Map<String, Object> params, Long attrgroupId) {
        //1、当前分组只能关联自己所属的分类里面的所有属性
        AttrGroupEntity groupEntity = attrGroupDao.selectById(attrgroupId);//获取当前attrgroupId所属分类

        //2、当前分组只能关联别的分组没有引用的属性
        //2、1)当前分类下的其他分组
        List<AttrGroupEntity> groupEntities = attrGroupDao.selectList(new QueryWrapper<AttrGroupEntity>().eq("catelog_id", groupEntity.getCatelogId())/*.ne("attr_group_id", attrgroupId)*/); //注意这里的注释,我们下面排除了其他分组关联的属性,但是这里如果注释打开的话,就会排除自己关联的分组,所以下面就没有排除自己所在分组关联的属性,这是不正确的

        //2、2)这些分组关联的属性
        List<Long> collect = groupEntities.stream().map((group) -> {
            return group.getAttrGroupId();
        }).collect(Collectors.toList());//其他分组的attr_group_id收集成一个集合

        List<AttrAttrgroupRelationEntity> attrAttrgroupRelationEntities = relationDao.selectList(new QueryWrapper<AttrAttrgroupRelationEntity>().in("attr_group_id", collect));//所有的关联表所对应的对象
        List<Long> attrIds = attrAttrgroupRelationEntities.stream().map((attrAttrgroupRelationEntity) -> {
            return attrAttrgroupRelationEntity.getAttrId();
        }).collect(Collectors.toList());

        //2、3)从当前分类的所有属性中剔除这些属性(并且只能查询基本属性)
        QueryWrapper<AttrEntity> wrapper = new QueryWrapper<AttrEntity>().eq("catelog_id", groupEntity.getCatelogId()).eq("attr_type", ProductConstant.AttrEnum.ATTR_TYPE_BASE.getCode());
        if (attrIds!=null && attrIds.size()>0){ //只有不为空才拼接notIn,不然sql报错
            wrapper.notIn("attr_id", attrIds);
        }

        String key = (String) params.get("key");

        if (!StringUtils.isEmptyOrWhitespaceOnly(key)){//如果有查询条件,要进行模糊查询
            wrapper.and((w)->{
                w.eq("attr_id", key).or().like("attr_name", key);
            });
        }

        IPage<AttrEntity> page = this.page(
                new Query<AttrEntity>().getPage(params),
                wrapper
        );
        PageUtils pageUtils = new PageUtils(page);
        return pageUtils;
    }
posted @ 2023-01-13 19:34  不是孩子了  阅读(27)  评论(0)    收藏  举报