@RequestMapping("/import")
public R importExcel(MultipartFile file) throws ParseException {
User user = (User) SecurityUtils.getSubject().getPrincipal();
if (file.isEmpty()) {
return R.failed("上传失败,请选择文件");
}
List<Report> reportList = reportService.list();
List<Integer> newReportList = new ArrayList<>();
//读取Excel表格中所有数据
ExcelReader reader = null;
try {
reader = ExcelUtil.getReader(file.getInputStream(), 0);
} catch (IOException e) {
log.error("文件读取异常",e.getMessage());
return R.failed("文件读取异常");
}
List<List<Object>> data = reader.read();
List<Map<String,String>> listError=new ArrayList<>();
List<Report> newList = new ArrayList<>();
boolean flag = true;
for (int i = 0; i < data.size(); i++) {
Report report = new Report();
//跳过表头的列名
if (data.get(i).get(0).toString().contains("表头首列的名称")) {
continue;
}
QueryWrapper<Type> typeQueryWrapper = new QueryWrapper<>();
typeQueryWrapper.eq("type",data.get(i).get(2).toString());
Type type = typeService.getOne(typeQueryWrapper);
QueryWrapper<SysIndustry> sysIndustryQueryWrapper = new QueryWrapper<>();
sysIndustryQueryWrapper.eq("industry",data.get(i).get(4).toString());
SysIndustry sysIndustry = sysIndustryService.getOne(sysIndustryQueryWrapper);
if (type == null || sysIndustry == null){
Map<String,String> stringMap = new HashMap<>();
String m = type == null ? "服务类型:"+data.get(i).get(2).toString() : "";
String n = sysIndustry == null ? ",行业:"+data.get(i).get(4).toString() : "";
stringMap.put(i+1+"", m+n);
listError.add(stringMap);
flag =false;
} else {
report.setBrokerName(data.get(i).get(0).toString());
String time = "";
try {
time = data.get(i).get(1).toString();
if (time.length() > 10) {
time = time.substring(0, time.length() - 8);
}
} catch (Exception e) {
return R.failed("日期格式错误");
}
report.setTime(time);
report.setServiceType(data.get(i).get(2).toString());
report.setTheme(data.get(i).get(3).toString());
report.setIndustryClassification(data.get(i).get(4).toString());
report.setAnalysts(data.get(i).get(5).toString());
report.setSales(data.get(i).get(6).toString());
report.setParticipants(data.get(i).get(7).toString());
report.setAnnualQuarter(annualQuarter);
report.setStatus("1");
report.setCreateTime(new Date());
report.setUpdateTime(new Date());
newList.add(report);
}
}
try {
//导入前先删除之前的数据,按需要来
if (flag){
if (reportList.size() > 0){
reportList.stream().forEach(report -> {
newReportList.add(report.getId());
});
reportService.removeByIds(newReportList);
}
reportService.saveBatch(newList);
return R.ok(null,"导入成功");
} else{
return R.ok(listError);
}
} catch (Exception e) {
log.error("导入失败",e.getMessage());
return R.failed("导入失败");
}
}
Excel导入,导入时进行数据校验,不匹配的数据弹窗提示哪行哪个数据有误
最新推荐文章于 2024-09-13 08:47:47 发布