有需求如下:共导入3级产品类,每级对应多个下级;通过前端页面添加时不同上级可以对应相同的下级且同级名称可重复,通过导入功能添加的数据同级品类名称重复的示为一个品类。
并且在导入的时候只需要关注此次需要导入的数据,而不需要关注数据库表中原有数据,即使原数据有名字相同的,也不必合并。
excel表中数据如图所示:
对应的数据为:
excel表中的数据导入了之后为List:
[TestLevelDTO{firstLevelName='电脑', secondLevelName='台式机', thirdLevelName='神舟'},
TestLevelDTO{firstLevelName='电脑', secondLevelName='台式机', thirdLevelName='联想'},
TestLevelDTO{firstLevelName='电脑', secondLevelName='手提电脑', thirdLevelName='戴尔'},
TestLevelDTO{firstLevelName='电脑', secondLevelName='台式机', thirdLevelName='苹果'},
TestLevelDTO{firstLevelName='电脑', secondLevelName='手提电脑', thirdLevelName='华为'},
TestLevelDTO{firstLevelName='纸', secondLevelName='打印纸', thirdLevelName='A3'},
TestLevelDTO{firstLevelName='纸', secondLevelName='打印纸', thirdLevelName='A4'}]
三级数据都有确定的上下级关系,二级类目的父id为一级类目的id,因为原数据有可能有一级品类名称为“电脑”或者“纸”的,所以将第一条数据导入到数据库后,查询一级类目名称为“电脑”的数据并不能准确得知对应的一级品类。所以如果插入数据库的话,需要在一级数据插入之后,就将对应的二级插入数据库,三级类目也同理。
List数据转换为Map
将原始List数据转换为以下数据格式:
Map<String, List<Map<String, Set<String>>>>
一级品类作为Map的key,不重复。而二级类目可能有多个,所以设置为List。
二级类目和三级类目的关系也设置为Map,二级类目的名字作为key,三级类目的名字放在Set里面,保证二级类目和三级类目的名字都不重复。
代码示例如下:
public class TestLevelDTO {
//一级类目名称
private String firstLevelName;
//二级类目名称
private String secondLevelName;
//三级类目名称
private String thirdLevelName;
public String getFirstLevelName() {
return firstLevelName;
}
public void setFirstLevelName(String firstLevelName) {
this.firstLevelName = firstLevelName;
}
public String getSecondLevelName() {
return secondLevelName;
}
public void setSecondLevelName(String secondLevelName) {
this.secondLevelName = secondLevelName;
}
public String getThirdLevelName() {
return thirdLevelName;
}
public void setThirdLevelName(String thirdLevelName) {
this.thirdLevelName = thirdLevelName;
}
@Override
public String toString() {
return "TestLevelDTO{" +
"firstLevelName='" + firstLevelName + '\'' +
", secondLevelName='" + secondLevelName + '\'' +
", thirdLevelName='" + thirdLevelName + '\'' +
'}';
}
}
public class CategoryLevel {
//id
private int id;
//父级id
private int parentId;
//层级
private int level;
//品类名称
private String categoryLevelName;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getParentId() {
return parentId;
}
public void setParentId(int parentId) {
this.parentId = parentId;
}
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}
public String getCategoryLevelName() {
return categoryLevelName;
}
public void setCategoryLevelName(String categoryLevelName) {
this.cate