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;
}

浙公网安备 33010602011771号