2021-01-06【easyExcel,springBoot 批量任务】

springBoot @Async 异步任务

// async\GjContractAsync.java

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;
import java.util.List;

/**
 * 异步
 */
@Component
public class GjContractAsync {

    private static Logger logger = LoggerFactory.getLogger(GjContractAsync.class);
    private static String DATE_FORMAT1 = "yyyyMMdd";
    private static String SAV_CUS = "2"; // 保险蓄客

    @Autowired
    private GjKhxxDao gjKhxxDao;
	
    @Autowired
    private GjContractDao gjContractDao;
	
    @Autowired
    private HisGjContractDao hisGjContractDao;
	
    @Transactional(rollbackFor = Exception.class)
    @Async
    public  void mainAysc(List<Object> dataList, UserInfo userInfo) {
        logger.info("开始执行xxxx异步任务....");
		//  异步任务逻辑,无返回
        logger.info("结束xxxx异步任务....");

    }
    /**
     * 【保单状态处理】
     * @author copote
     * @date  2020/12/17 16:07
     */
    private ImpGjContractModel handerContractStatus(ImpGjContractModel item) {
        if(CommonUtil.isNotEmpty( item.getcState())){
            //  NORMAL((String) "1","正常"),
            //    CANCEL((String) "2","当日撤单");
            if(ContractStatusEnum.NORMAL.getName().equals( item.getcState().trim()) ||
                    ContractStatusEnum.NORMAL.getCode().equals( item.getcState().trim())
            ){
                item.setcState(ContractStatusEnum.NORMAL.getCode());
            }else{
                // 保费为负值
                item.setcState(ContractStatusEnum.CANCEL.getCode());
                System.out.println(ContractStatusEnum.CANCEL.getName()+"=========保费为负值=========="+item.getnPremium().negate());
                item.setnPremium(item.getnPremium().negate());
            }
        }
        return item;
    }
}



easyExcel 下载

//  project\model\ImpGjContractModel.java
public void exportGjContractRecordMbExcel() throws IOException {
        List<ImpGjContractModel> list =null;
        ServletOutputStream out = response.getOutputStream();
        ExcelWriter writer = new ExcelWriter(out, ExcelTypeEnum.XLSX, true);
        String fileName = "个金保险蓄客保险出单模板";
        Sheet sheet = new Sheet(1, 0,ImpGjContractModel.class);
        //设置自适应宽度
        sheet.setAutoWidth(Boolean.TRUE);
        // 第一个 sheet 名称
        sheet.setSheetName("个金保险蓄客保险出单");
        writer.write(list, sheet);
        //通知浏览器以附件的形式下载处理,设置返回头要注意文件名有中文
//        response.setHeader("Content-disposition", "attachment;filename=" + new String( fileName.getBytes("gb2312"), "ISO8859-1" ) + ".xlsx");
        response.setHeader("Content-Disposition","attachment;filename=" + URLEncoder.encode(fileName + ".xlsx", "utf-8"));
        writer.finish();
        response.setContentType("multipart/form-data");
        response.setCharacterEncoding("utf-8");
        out.flush();
}

spring Scheduled 批量任务



// spring 批量任务:project\task\GjStatisTask.java

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

@Component
public class GjStatisTask {

    private static Logger logger = LoggerFactory.getLogger(GjStatisTask.class);

    @Autowired
    private GjKhxxDao gjKhxxDao;
    @Transactional(rollbackFor = Exception.class)
    @Scheduled(cron="0 0 17 * * ?")
//    @Scheduled(cron="0 20 * * * ?")
    void GjTemporaryStatis(){
        logger.info("开始执行个金统计生成临时表数据任务....");
        //先执行 truncate table T_STBT_KHXX_GJ_TGTJ 删除临时表
        gjKhxxDao.deleteKhxxGjTgtj();

        gjKhxxDao.insertIntoKhxxGjTgtj();
        // insert into  select  添加到临时表
        logger.info("结束个金统计生成临时表数据任务....");
    }
}



### 集成 EasyExcel 到 Spring Boot 项目 #### 添加依赖项 为了在 Spring Boot 应用程序中使用 EasyExcel,需向 `pom.xml` 文件添加 Maven 依赖: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>3.0.5</version> </dependency> ``` 此配置使得应用程序能够访问 EasyExcel 提供的功能[^1]。 #### 创建实体类映射 Excel 表头 定义 Java 类来表示每一行的数据结构。假设有一个简单的员工信息表单如下所示: ```java public class EmployeeData { @ExcelProperty("Employee ID") private String employeeId; @ExcelProperty("Name") private String name; // Getters and Setters omitted for brevity. } ``` 上述代码片段展示了如何通过注解的方式指定列名与字段之间的对应关系[^2]。 #### 编写服务层逻辑实现文件读取功能 创建一个 Service 接口及其对应的实现类用于处理业务需求。这里展示了一个简单的方法用来解析上传的 Excel 文件并将其转换为对象列表的形式返回给控制器调用方。 ```java @Service public class ExcelService { public List<EmployeeData> readExcel(MultipartFile file) throws IOException { EasyExcel.read(file.getInputStream(), EmployeeData.class, new PageReadListener<EmployeeData>(dataList -> { System.out.println(dataList); })).sheet().doRead(); return dataList; } } ``` 这段代码实现了基本的读取流程,并利用了回调机制实时获取每一页的数据集合[^3]。 #### 实现 Controller 层接口暴露 RESTful API 给前端调用者 最后一步是在 Web 控制器里编写 HTTP 请求处理器方法以便接收客户端提交过来待处理的文档资源。 ```java @RestController @RequestMapping("/api/excel") public class ExcelController { @Autowired private ExcelService excelService; @PostMapping("/upload") public ResponseEntity<List<EmployeeData>> uploadFile(@RequestParam("file") MultipartFile file){ try{ List<EmployeeData> result = this.excelService.readExcel(file); return ResponseEntity.ok(result); } catch (Exception e){ return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); } } } ``` 以上就是完整的基于 Spring Boot 和 EasyExcel 的 Excel 文档导入解决方案[^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值