<!-- EasyExcel -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.1.1</version>
</dependency>
1.要导入的数据结构,按层级导入
//导入excel
@PostMapping("/import")
public AjaxResult doImport(MultipartFile file){
List<自己的实体类> list = new ArrayList<>();
try {
EasyExcel.read(file.getInputStream(),
FtDataDto.class, new ReadListener(){
@Override
public void invoke(Object o, AnalysisContext analysisContext) {
//实体类格式转换
自己的实体类 domain = (自己的实体类)o;
try {
list.add(domain);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
}
}).sheet().doRead();
//调用方法处理list数据(主要将列表结构转为树状结构)
setListInfo(list);
} catch (Exception e) {
e.printStackTrace();
return AjaxResult.error("文件内容格式错误!");
}
}
2.然后写一个处理的方法
public Integer setListInfo(List<实体类> list) {
//调整树状结构
Map<Integer,Integer> map = new HashMap<>();
//层级
Integer level = 0;
//上一条数据id
Integer id = 0;
for(int i = 0,m = list.size();i<m;i++) {
//第一层必定为父节点
if (i == 0){
list.get(i).setPid(0);
//先将父节点添加并获取他的id
实体类Mapper.insert(list.get(i));
//将当前id暂存,如果下一条数据层级降低,则pid就是此id
id = list.get(i).getId();
//暂存当前层级,用于和下一条循环比对
level = list.get(i).getLevel();
//暂存当前层级的pid,也就是父级id,如果之后碰到同级的,直接可以拿到,第一条pid为0
map.put(level,0);
//结束当前循环,开始下一次循环
continue;
}
//如果层级变大,也就是上一条数据的下一级
if (list.get(i).getLevel() > level){
System.out.println("大于>>>>>>>>>>>>>");
//当前层级的pid就是上一条数据的id
list.get(i).setPid(id);
}
//如果层级不变
if (list.get(i).getLevel().equals(level)){
//当前层级的pid就是同层级的pid
System.out.println("等于=============");
list.get(i).setPid(map.get(level));
}
//如果层级变小,认为是一条新的父级
if (list.get(i).getLevel() < level){
//当前层级的pid就是同层级的pid
System.out.println("小于<<<<<<<<<<<<<<<<");
System.out.println(list.get(i).getLevel()+"-----"+level);
System.out.println(map);
list.get(i).setPid(map.get(list.get(i).getLevel()));
}
//更新层级
level = list.get(i).getLevel();
//添加数据并更改id
System.out.println(list.get(i));
//添加数据
实体类Mapper.insert(list.get(i));
//暂存id
id = list.get(i).getId();
//暂存当前层级的pid
map.put(level,list.get(i).getPid());
}
//返回数量
return list.size();
}
之后导入的数据就是树状结构了,用pid进行绑定的,之后要获取数据的话就用递归或深度优先了。