评审人员信息字段相关表
@Data
@ApiModel(value = "EssLibExpertsValset对象", description = "评审人员信息字段相关表")
public class EssLibExpertsValset extends BaseEntity {
@ApiModelProperty(value = "编码")
private String code;
@ApiModelProperty(value = "名称")
private String name;
@ApiModelProperty(value = "描述")
private String datadicDesc;
@ApiModelProperty(value = "顺序")
private Integer dispOrder;
@ApiModelProperty(value = "状态 0 保存 1 启用 2 停用")
private String status;
@JSONField(serializeUsing = ToStringSerializer.class)
@ApiModelProperty(value = "上级Id")
private Long parentId;
@ApiModelProperty(value = "类型")
private String type;
@ApiModelProperty(value = "级别")
private Integer level;
@ApiModelProperty(value = "父值集code")
private String parentCode;
}
vo
@Data
public class EssLibExpertsValsetVO extends EssLibExpertsValset {
@ApiModelProperty(value = "下级专业集合")
private List<EssLibExpertsValsetVO> childList = new LinkedList<>();
@ApiModelProperty(value = "是否叶子节点 0-否 1-是")
private String isLeft;
}
@RestController
/**
* 专家树查询
*/
@GetMapping("/queryExpertTree")
@ApiOperationSupport(order = 19)
@ApiOperation(value = "专家树查询", notes = "传入对应的类型10-毕业专业标签 20-从事专业标签 30-职称 40-执业证书 50-职等")
public R<Collection<EssLibExpertsValsetVO>> queryExpertTree(@RequestParam String type) {
return R.data(essLibExpertsService.queryExpertTree(type));
}
interface
/**
* 专家树查询
* @param type
* @return
*/
Collection<EssLibExpertsValsetVO> queryExpertTree(String type);
@Service
/**
* 树形查询
* @param type
* @return
*/
@Override
public Collection<EssLibExpertsValsetVO> queryExpertTree(String type) {
List<EssLibExpertsValset> essLibExpertsValsetList = essLibExpertsMapper.queryExpertTree(type);
//获取所有的父节点id
Set<Long> parentIds = essLibExpertsValsetList.stream().map(EssLibExpertsValset::getParentId).collect(Collectors.toSet());
List<EssLibExpertsValsetVO> essLibExpertsValsetVOS = essLibExpertsValsetList.stream().map(essLibExpertsValset->{
EssLibExpertsValsetVO essLibExpertsValsetVO = new EssLibExpertsValsetVO();
BeanUtils.copyProperties(essLibExpertsValset,essLibExpertsValsetVO);
if (parentIds.contains(essLibExpertsValset.getId())){
essLibExpertsValsetVO.setIsLeft(EssConstants.NODE_TYPE_0);
}else {
essLibExpertsValsetVO.setIsLeft(EssConstants.NODE_TYPE_1);
}
return essLibExpertsValsetVO;
}).collect(Collectors.toList());
//2、组装成父子的树形结构
//2.1找到所有的一级分类
List<EssLibExpertsValsetVO> level1Menus = essLibExpertsValsetVOS.stream()
.filter((expertsCategory) -> expertsCategory.getParentId() == 0)
.peek((menu)-> menu.setChildList(getChildren(menu,essLibExpertsValsetVOS)))
.sorted(Comparator.comparing(EssLibExpertsValsetVO::getDispOrder,Comparator.nullsLast(Integer::compareTo)))
.collect(Collectors.toList());
return level1Menus;
}
//递归查找所有菜单的子菜单
private List<EssLibExpertsValsetVO> getChildren(EssLibExpertsValsetVO menu,List<EssLibExpertsValsetVO> all){
List<EssLibExpertsValsetVO> child = all.stream()
.filter(expertsCategory -> expertsCategory.getParentId().equals(menu.getId()))
//找到子菜单
.peek(expertsCategory-> expertsCategory.setChildList(getChildren(expertsCategory, all)))
//菜单的排序
.sorted(Comparator.comparing(EssLibExpertsValsetVO::getDispOrder,Comparator.nullsLast(Integer::compareTo)))
.collect(Collectors.toList());
return child.isEmpty() ?null:child;
}