通过捕获异常校验excel文件导入数据重复性(spring boot)

 /** excel上传
     */
    @PostMapping("excelUpload.do")
    public ResultResponse excelUpload(@RequestParam("file") MultipartFile file ) {
        ResultResponse response = new ResultResponse <>();     
        long MAX_SIZE = 3 * 1024 * 1024;// 设置上传文件最大为 3M
        if (file.getSize() > MAX_SIZE){
            response.setMessage( "上传Excel文件不超过3M" );
            return response;
        }
        //开始行 第一行是列名
        int startRow = 1;
        //excel列
        String[] column = new String[]{ID, DM, RQ, JE, JGHM, LSH};

        try {
            //1.把excel转化为list,工具类就不帖出来了哈
            response = ExcelImportPoi.excelToList( file, startRow, column );
            List<Map<String, Object>> excelList = (List<Map<String, Object>>) response.getData();
            if (null == excelList || excelList.size() == 0) {
                response.setMessage( "excel没有数据" );
                return response;
            }

            Set<String> dataSet= new HashSet<String>();
            for (int i = 0; i < excelList.size(); i++) {
                Map taxItemMap = excelList.get( i );
                Object lsh = taxItemMap.get(LSH);
                if(!dataSet.add(lsh.toString())){
                    response.setCode("999");
                    response.setMessage("第"+(i+1)+"行流水号在Excel中存在重复数据!");
                    return response;
                }
            }
            //入库操作
            batchInsertService.batchInsertTaxItem(excelList);
            response.setCode("000");
            response.setMessage("导入数据成功!");

        }catch (DuplicateKeyException e) {
            log.error( "上传excel异常,异常信息:" + e.getMessage() );
            response.setCode("999");
            String[] split = e.getCause().toString().split("'");
            response.setMessage("流水号"+split[1]+"已存在,请勿重复上传");
            return response;
        }catch (Exception e) {
            log.error( "上传excel异常,异常信息:" + e.getMessage() );
            response.setCode("9999");
            response.setMessage( "上传excel异常,异常信息:" + e.getMessage() );
        }
        return response;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值