给这栋楼批量导入各公司员工数据
需求图解:如下啦
关键词:二级分类、三级分类、批量导入
实现该方法核心两个实体类
- CompanyPerson 意思就是整个excel表格我们把他称为CompanyPersonList公司人员名单,里面每一条数据都是一个CompanyPerson公司人员数据
- Unit单位实体类,Unit可以是楼座也可以是该楼座具体的某个公司,通过传入不同的单位unitId来判断二级分类、三级分类,例如说unitId=1,是二级分类, 传入unitld=10是三级分类,在这种情况下实现批量新增
核心代码实现分析
- firstLineMap 首先解析导入的文件第一行数据 所属单位 姓名 职位…
@Override
public List<CompanyPerson> importExcel(MultipartFile file, Integer unitId) throws Exception {
LinkedHashMap<String, String> firstLineMap = this.excelHeadMap();
//当前操作时间
LocalDateTime now = LocalDateTime.now();
- 读取文件里的数据,每一行都是代表一条公司人员数据CompanyPerson
//文件里面的数据 每一行是一个CompanyPerson
List<CompanyPerson> companyPersonList = ImportExportUtil
.importExcelOfDate(CompanyPerson.class, firstLineMap, file);
- 判断这个excel表有没有数据,是不是空,如果不等于空就遍历这个excel表
if (CompanyPersonList != null) {
int i = 2;
//第二行开始,也就是获取到第一条数据的信息
for (CompanyPerson companyPerson : CompanyPersonList) {
//获取到第一条数据的子单位名称
String unitName = companyPerson.getUnitName();
if (StringUtils.isEmpty(unitName)) {
throw new Exception("请检查第" + i + "行" + "所属单位不能为空");
}
-
用unitMapper.selectList获取到一个unitList,因为一个表里有很多个所属单位字段不一样,条件就是根据unitName,进而得到一个Unit
获取到Unit之后,给CompanyPerson赋值上子单元UnitId
//获取到unitName为这个的子单位的信息
List<Unit> unitList = unitMapper.selectList(Wrappers.<Unit>lambdaQuery()
.eq(Unit::getUnitName, unitName));
for (Unit unit : unitList) {
Integer id = unit.getId();
if (unit == null) {
throw new Exception("请检查第" + i + "行" + "所属单位跟选择的单位不匹配");
}
//获取到子单位id,并设置给CompanyPerson
companyPerson.setUnitId(unit.getId());
}
5.如果数据还有其他的也要做判断,例如手机号 、身份证、入职时间不能为空,这里省略了
那CompanyPerson::getUnitId对应的是每一个unitId,因为上面已经赋值给companyPerson了,所以在companyPerson里取UnitId
CompanyPerson oldEntity = this.baseMapper.selectOne(Wrappers.<ComponyPerson>lambdaQuery()
.eq(ComponyPerson::getUnitId, componyPerson.getUnitId())
.eq(ComponyPerson::getPhone,componyPerson.getPhone()));
if (oldEntity != null) {
//如果已存在则覆盖更新
componyPerson.setId(oldEntity.getId());
componyPerson.setUserId(oldEntity.getUserId());
}
componyPerson.setCreator(SecurityUtils.getUser().getId());
componyPerson.setDelFlag("0");
componyPerson.setCreateDate(now);
componyPerson.setModifyDate(now);
i = i + 1;
}
}
return componyPersonList;
}