话不多说直接上干货,不耽误各位宝贵时间,真实可用 !CV请点赞~谢谢
方法1
1.1 数据库设计
1.2 对象设计
package com.cdaxxt.business.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import com.cdaxxt.business.entity.ContingencyPlanModel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* @author yyh
* @date 2022/9/28 15:52
*/
@Data
@ApiModel(value = "ContingencyPlanModelVO", description = "组织树")
public class ContingencyPlanModelVO {
private Long id;
/**
* 名称
*/
@ApiModelProperty("名称")
@TableField("name")
private String name;
/**
* 全路径
*/
@ApiModelProperty("全路径")
private String path;
/**
* 父类ID
*/
@ApiModelProperty("父类ID")
private Long parentId;
/**
* 预案类型(1:专项应急;2:现场处置;3:应急综合)
*/
@ApiModelProperty("预案类型(1:专项应急;2:现场处置;3:应急综合)")
private Integer type;
@TableField(exist = false)
private List<ContingencyPlanModelVO> childMenu;
public ContingencyPlanModelVO() {
}
public ContingencyPlanModelVO(Long id, String name, String path, Long parentId, Integer type) {
this.id = id;
this.name = name;
this.path = path;
this.parentId = parentId;
this.type = type;
}
}
1.3 实现类方法1
public ContingencyPlanModelVO getModelTree(Long parentId) {
//所有组织
List<ContingencyPlanModelVO> voList = baseMapper.getVolist(parentId);
//根节点数据
ContingencyPlanModel entity = baseMapper.selectOne(new LambdaQueryWrapper<ContingencyPlanModel>().eq(ContingencyPlanModel::getPath, parentId));
ContingencyPlanModelVO vo = new ContingencyPlanModelVO();
BeanUtils.copyProperties(entity,vo);
ContingencyPlanModelVO tree = getTree(voList, vo, vo, entity.getId());
return tree;
}
/**
* 组建树形结构
*
* @param modelList 当前组织 及以下所有 组织机构
* @param rootBase 当前组织信息
* @param bases 子级 组织对象信息
* @param parentId 当前组织 id
* @return
*/
private ContingencyPlanModelVO getTree(List<ContingencyPlanModelVO> modelList, ContingencyPlanModelVO rootBase,
ContingencyPlanModelVO bases, Long parentId) {
List<ContingencyPlanModelVO> childBases = new ArrayList<>();
for (ContingencyPlanModelVO model : modelList) {
if (model.getParentId() == null) {
continue;
}
// 找到归属父类的组织,下面1级的所有组织机构
if (model.getParentId().longValue() == parentId.longValue()) {
//自定义VO对象参数组装
// String fullName = bases.getPath() != null ? bases.getPath() + Symbol.ACROSS + model.getName() : bases.getName() + Symbol.ACROSS + model.getName();
// String pathId = bases.getKey() != null ? bases.getKey() + Symbol.ACROSS + model.getId() : bases.getId() + Symbol.ACROSS + model.getId();
ContingencyPlanModelVO childBase = new ContingencyPlanModelVO(model.getId(), model.getName(), model.getPath(),model.getParentId(), model.getType());
childBases.add(childBase);
}
}
// 首次放入根节点,之后依次放入父节点
if (rootBase.getId().longValue() == bases.getId().longValue()) {
rootBase.setChildMenu(childBases);
} else {
bases.setChildMenu(childBases);
}
for (int i = 0; i < childBases.size(); i++) {
ContingencyPlanModelVO b = childBases.get(i);
getTree(modelList, rootBase, b, b.getId());
}
return rootBase;
}
1.4. 结果
方法2(优化后)
1. 数据库设计
2. 对象设计
package com.cdaxxt.business.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* @author yyh
* @date 2022/10/24 17:36
*/
@Data
@ApiModel(value = "OgnztTreeVO", description = "VO树对象")
public class OgnztTreeVO {
@ApiModelProperty(value = "id")
private Long id;
@ApiModelProperty(value = "名称")
private String name;
@ApiModelProperty(value = "类型(1:园区,2:园区部门,3:园区企业)")
private Integer type;
@ApiModelProperty(value = "全路径")
private String path;
@ApiModelProperty(value = "父级ID")
private String parentId;
/**
* 子树
*/
private List<OgnztTreeVO> children;
}
3. 实现类方法2
@Override
public Object getOgnztTree() {
//正式环境放开!redis 配置改为control配置
// Long organization = loginHelper.getCurrentUser().getOrganization();
Long organization = 10000L;
//查询当前用户根节点,子节点
OgnztTreeVO vo = baseMapper.getNode(organization);
List<OgnztTreeVO> list = baseMapper.getByParentId(vo.getId());
vo.setChildren(list);
OgnztTree(vo);
return vo;
}
public OgnztTreeVO OgnztTree(OgnztTreeVO vo){
List<OgnztTreeVO> list = vo.getChildren();
for (OgnztTreeVO child : list) {
List<OgnztTreeVO> voList = baseMapper.getByParentId(child.getId());
if (CollectionUtils.isEmpty(voList)) {
return vo;
}
child.setChildren(voList);
//子对象进行递归
OgnztTree(child);
}
return vo;
}
4. 结果