属性分组下的新建关联功能如下:
接下来需要查询出分组未关联的属性。
AttrGroupController类添加如下接口:
/**
* 查询分组未关联的属性
*
* @param attrgroupId
* @param params
* @return
*/
@GetMapping("/{attrgroupId}/noattr/relation")
public R attrNoRelation(@PathVariable("attrgroupId") Long attrgroupId,
@RequestParam Map<String, Object> params) {
PageUtils page = attrService.getNoRelationAttr(params, attrgroupId);
return R.ok().put("page", page);
}
AttrService类添加如下方法:
/**
* 查询出分组未关联的属性
*
* @param params
* @param attrgroupId
* @return
*/
PageUtils getNoRelationAttr(Map<String, Object> params, Long attrgroupId);
AttrServiceImpl类添加getNoRelationAttr()方法相关实现:
@Override
public PageUtils getNoRelationAttr(Map<String, Object> params, Long attrgroupId) {
//1、当前分组只能关联自己所属的分类里面的所有属性
AttrGroupEntity attrGroupEntity = attrGroupDao.selectById(attrgroupId);
Long catelogId = attrGroupEntity.getCatelogId();
//2、当前分组只能关联别的分组没有引用的属性
//2-1.查询当前分类下的其他分组
List<AttrGroupEntity> attrGroupEntities = attrGroupDao.selectList(new QueryWrapper<AttrGroupEntity>().eq("catelog_id", catelogId));
List<Long> collect = attrGroupEntities.stream().map(item -> {
return item.getAttrGroupId();
}).collect(Collectors.toList());
//2-2、查询分组关联的属性
List<AttrAttrgroupRelationEntity> attrgroupRelationEntities = relationDao.selectList(new QueryWrapper<AttrAttrgroupRelationEntity>().in("attr_group_id", collect));
List<Long> attrIds = attrgroupRelationEntities.stream().map(item -> {
return item.getAttrId();
}).collect(Collectors.toList());
//2-3、从当前分类的所有属性中移除这些属性
QueryWrapper<AttrEntity> wrapper = new QueryWrapper<AttrEntity>().eq("catelog_id", catelogId).eq("attr_type", ProductConstant.AttrEnum.ATTR_TYPE_BASE.getCode());
if (attrIds != null && attrIds.size() > 0) {
wrapper.notIn("attr_id", attrIds);
}
//支持模糊查询
String key = (String) params.get("key");
if (!StringUtils.isEmpty(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;
}
测试效果:
影视分类有如下两个属性:
影视相关分组已经关联了一个属性,如下:
点击新建关联,会查询出分组未关联的属性,如下:
查询出分组未关联的属性完成。