查询分组未关联的属性
本章添加关联属性中未关联的属性的功能,对应前端页面:
对应的API文档如下:
13、获取属性分组没有关联的其他属性
GET
/product/attrgroup/{attrgroupId}/noattr/relation
接口描述
获取属性分组里面还没有关联的本分类里面的其他基本属性,方便添加新的关联
请求参数
{
page: 1,//当前页码
limit: 10,//每页记录数
sidx: 'id',//排序字段
order: 'asc/desc',//排序方式
key: '华为'//检索关键字
}
分页数据
响应数据
{
"msg": "success",
"code": 0,
"page": {
"totalCount": 3,
"pageSize": 10,
"totalPage": 1,
"currPage": 1,
"list": [{
"attrId": 1,
"attrName": "aaa",
"searchType": 1,
"valueType": 1,
"icon": "aa",
"valueSelect": "aa;ddd;sss;aaa2",
"attrType": 1,
"enable": 1,
"catelogId": 225,
"showDesc": 1
}]
}
}
首先来到响应控制中:
/**
* 响应product/attrgroup/{attrgroupId}/noattr/relation
* 获取属性分组里面还没有关联的本分类里面的其他基本属性,方便添加新的关联
* @param attrgroupId 属性分组ID
* @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);
}
之后创建方法实现方法getNoRelationAttr:
/**
* 获取当前分组没有关联的所有属性
* @param params 分页插件的基本信息
* @param attrgroupId 分类组ID
* @return 列表形式的未关联属性
*/
@Override
public PageUtils getNoRelationAttr(Map<String, Object> params, Long attrgroupId) {
//1、当前分组只能关联自己所属的分类里面的所有属性
AttrGroupEntity attrGroupEntity = attrGroupDao.selectById(attrgroupId);
//首先查找出分类ID
Long catelogId = attrGroupEntity.getCatelogId();
//2、当前分组只能关联别的分组没有引用的属性
//2.1)、当前分类下的其他分组
List<AttrGroupEntity> group = attrGroupDao.selectList(new QueryWrapper<AttrGroupEntity>().eq("catelog_id", catelogId));
//从属性分组实体类的集合通过流转化为组ID的集合
List<Long> collect = group.stream().map(item -> {
return item.getAttrGroupId();
}).collect(Collectors.toList());
//2.2)、这些分组关联的属性
//找到具有关联属性的关系表实例
List<AttrAttrgroupRelationEntity> groupId = relationDao.selectList(new QueryWrapper<AttrAttrgroupRelationEntity>().in("attr_group_id", collect));
//通过流使关联表的实体类转化为属性ID的集合
List<Long> attrIds = groupId.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());
//对列表进行非空判断,之后添加过滤条件,不在分类ID中
if(attrIds!=null && attrIds.size()>0){
wrapper.notIn("attr_id", attrIds);
}
//获取搜索关键词,如果关键词不为空添加进wrapper条件中
String key = (String) params.get("key");
if(!org.springframework.util.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);
return new PageUtils(page);
}
之后重启服务进行前端测试,可以看到能够正确显示:
完成正确显示。