Excel导入,导入时进行数据校验,不匹配的数据弹窗提示哪行哪个数据有误

@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("导入失败");
        }
     }   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值