Springboot+MybatisPlus+EasyExcel实现文件导入数据

记录一下写Excel文件导入数据所经历的问题。

springboot提供的文件处理MultipartFile有关方法,我没有具体看文档,但目测比较复杂,
遂了解学习了一下别的文件上传方法,本文第1节记录的是springboot原始的导入文件方法写法,第二节大概介绍了一下EasyExcel的使用,第三节是EasyExcel的实际使用。

只看实现,请直接跳转第三节。

1 原springboot写法,不使用EasyExcel

看了一下springboot原版写法如下,大致意思是写个工具类ExcelReadUtil来处理文件内容读取和转化,ServiceImpl实现文件存储,代码量很可怕。

1.1 SalaryController

    public R<?> addSalaryInfo(@RequestParam("file") MultipartFile file, @RequestParam("importTime") String importTime, @RequestParam("type") Integer type, @RequestParam("fileId") Long fileId) {
   
        salaryService.addSalaryInfo(file, importTime, type, fileId);
        return R.ok("操作成功");
    }

1.2 ServiceImpl

    @Override
    @Transactional(rollbackFor = Throwable.class)
    public void addSalaryInfo(MultipartFile file, String importTime, Integer type, Long fileId) {
   
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
        if (file == null || "".equals(file.getOriginalFilename())) {
   
            throw new PMValidationException("上传附件为空");
        }
        if (StringUtils.isEmpty(type) || Objects.isNull(SalaryType.getByCode(type))) {
   
            throw new PMValidationException("薪酬类型错误");
        }
        Date importDate;
        try {
   
            importDate = sdf.parse(importTime);
        } catch (ParseException e) {
   
            throw new PMValidationException("薪酬所属月份格式错误");
        }
        long loginUserId = userRemoteService.getLoginUser().getData().getUserId();
        List<Map<String, Object>> maps = ExcelReadUtil.readExcelByRC(file, 2, -1, true);

        SalaryInfo salaryInfo = new SalaryInfo();
        salaryInfo.setImportTime(importDate);
        salaryInfo.setCreateBy(loginUserId);
        salaryInfo.setUpdateBy(loginUserId);
        salaryInfo.setType(type);
        salaryInfo.setFileId(fileId);
        salaryInfoMapper.insert(salaryInfo);
        if (SalaryType.PAYABLE_SALARY.getCode() == type) {
   
            insertSalary(maps, loginUserId, importDate, salaryInfo.getId());
        } else {
   
            insertOrUpdateOtherSalary(maps, loginUserId, type, importDate);
        }
    }
 	public void insertSalary(List<Map<String, Object>> maps, Long loginUserId, Date importDate, Long salaryInfoId) {
   
        List<SalaryData> salaryInfoList = new LinkedList<>();
        maps.forEach(map -> {
   
            String deptName = String.valueOf(map.get(SalaryField.DEPT_NAME) == null ? "" : map.get(SalaryField.DEPT_NAME));
            String nickName = String.valueOf(map.get(SalaryField.NICK_NAME) == null ? "" : map.get(SalaryField.NICK_NAME));
            String userNo = String.valueOf(map.get(SalaryField.USER_NO) == null ? "" : map.get(SalaryField.USER_NO));
            BigDecimal salary = null;
            if (map.get(SalaryField.SALARY) != null) {
   
                salary = new BigDecimal(String.valueOf(map.get(SalaryField.SALARY)));
            }
            BigDecimal performance = null;
            if (map.get(SalaryField.PERFORMANCE) != null) {
   
                performance = new BigDecimal(String.valueOf(map.get(SalaryField.PERFORMANCE)));
            }
            BigDecimal seniorityPay = null;
            if (map.get(SalaryField.SENIORITY_PAY) != null) {
   
                seniorityPay = new BigDecimal(String.valueOf(map.get(SalaryField.SENIORITY_PAY)));
            }
            BigDecimal postSalary = null;
            if (map.get(SalaryField.POST_SALARY) != null) {
   
                postSalary = new BigDecimal(String.valueOf(map.get(SalaryField.POST_SALARY)));
            }
            BigDecimal tenementSubsidy = null;
            if (map.get(SalaryField.TENEMENT_SUBSIDY) != null) {
   
                tenementSubsidy = new BigDecimal(String.valueOf(map.get(SalaryField.TENEMENT_SUBSIDY)));
            }
            BigDecimal communicateSubsidy = null;
            if (map.get(SalaryField.COMMUNICATE_SUBSIDY) != null) {
   
                communicateSubsidy = new BigDecimal(String.valueOf(map.get(SalaryField.COMMUNICATE_SUBSIDY)));
            }
            BigDecimal trafficFee = null;
            if (map.get(SalaryField.TRAFFIC_FEE) != null) {
   
                trafficFee = new BigDecimal(map.get(SalaryField.TRAFFIC_FEE) == null ? "" : String.valueOf(map.get(SalaryField.TRAFFIC_FEE)));
            }
            BigDecimal mealFee = null;
            if (map.get(SalaryField.MEAL_FEE) != null) {
   
                mealFee = new BigDecimal(String.valueOf(map.get(SalaryField.MEAL_FEE)));
            }
            BigDecimal changeFee = null;
            if (map.get(SalaryField.CHANGE_FEE) != null) {
   
                changeFee = new BigDecimal(String.valueOf
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值