1.实体类
表单实体类(对应表单结构)
public class TbClueExcelVo{
/** 客户手机号 手机号(11位手机号,不可有空格) */
@ExcelProperty(value = "手机号(11位手机号,不可有空格)",index = 0)
private String phone;
/** 渠道 */
@ExcelProperty(value = "渠道来源",index = 1)
private String channel;
/** 活动编号 (来源于活动列表8位字母或数字)*/
@ExcelProperty(value = "活动编号(来源于活动列表8位字母或数字)",index = 2)
private String activityCode;
/** "客户姓名 **/
@ExcelProperty(value = "客户姓名",index = 3)
private String name;
/** 意向学科 */
@ExcelProperty(value = "意向学科",index = 4)
private String subject;
/** 意向级别 */
@ExcelProperty(value = "意向级别",index = 5)
private String level;
/** 性别 */
@ExcelProperty(value = "性别",index = 6)
private String sex;
/** 年龄 */
@ExcelProperty(value = "年龄",index = 7)
private Long age;
/** 微信 */
@ExcelProperty(value = "微信",index = 8)
private String weixin;
/** qq */
@ExcelProperty(value = "QQ",index = 9)
private String qq;}
成功失败实体类
public class ImportResultDTO {
//成功数量
private Integer successNum=0;
//失败数量
private Integer failureNum=0;
public static ImportResultDTO error(){
return new ImportResultDTO(0,1);
}
/**
* 提供静态方法,发生成功的时候记录数据
* @return
*/
public static ImportResultDTO success(){
return new ImportResultDTO(1,0);
}
/**
* 该方法主要是将每次插入的结果与总的结果进行汇总时进行调用
* @param data
* @return
*/
public ImportResultDTO addAll(ImportResultDTO data){
this.failureNum += data.getFailureNum();
this.successNum += data.getSuccessNum();
return this;
}
}
2.controller层
public AjaxResult importData(MultipartFile file) throws Exception {
/*自定义EasyExcel监听器,用于解析数据并执行操作 tbClueService业务的数据库操作接口*/
ExcelListener excelListener = new ExcelListener(tbClueService);
/*excel解析*/
EasyExcel.read(file.getInputStream(), TbClueExcelVo.class, excelListener).sheet().doRead();
return AjaxResult.success(excelListener.getResult());
}
3.自定义EasyExcel监听器
@Component
public class ExcelListener extends AnalysisEventListener<TbClueExcelVo> {
/**
* 利用构造方法获取对应的service
*/
@Autowired
public ITbClueService clueService;
/*成功和失败次数*/
@Autowired
private ImportResultDTO resultDTO;
/**
* 提供带参构造方法,在这里需要通过构造方法的方式获取对应的service层
* 谁调用这个监听器谁提供需要的service
*
* @param clueService
*/
public ExcelListener(ITbClueService clueService) {
this.clueService = clueService;
this.resultDTO = new ImportResultDTO();
}
/**
* 每解析一行数据都要执行一次
* 每条都执行一次插入操作
*
* @param data
* @param context
*/
@Override
public void invoke(TbClueExcelVo data, AnalysisContext context) {
/*解析一行执行业务层操作*/
ImportResultDTO addTbClue = clueService.importCluesData(data);
/*空指针异常*/
ImportResultDTO importResultDTO = resultDTO.addAll(addTbClue);
}
/**
* 当所有数据都解析完成后会执行
*
* @param context
*/
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
}
/**
* 返回结果集对象
*
* @return
*/
public ImportResultDTO getResult() {
return resultDTO;
}
}
4.业务层
@Override
public ImportResultDTO importCluesData(TbClueExcelVo data) {
//===============校验线索数据,封装属性,插入数据库,根据规则进行分配======================
//具体业务操作成功和失败
return ImportResultDTO.error();
return ImportResultDTO.success();
}