package com.ruoyi.personnel.excel; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.ruoyi.personnel.service.PersonTrainingDetailedService; import lombok.Data; import lombok.extern.slf4j.Slf4j; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; import java.util.Objects; @Data @Slf4j public class PersonTrainingDetailedListener extends AnalysisEventListener { private Integer planId; private static Boolean FLAG = true; private static final int BATCH_COUNT = 1000; List list = new ArrayList<>(); private PersonTrainingDetailedService personTrainingDetailedService; public PersonTrainingDetailedListener(PersonTrainingDetailedService personTrainingDetailedService,Integer planId) { this.personTrainingDetailedService = personTrainingDetailedService; this.planId = planId; } @Override public void invoke(PersonTrainingDetailedUpload data, AnalysisContext context) { log.info("解析到一条数据{}", JSON.toJSONString(data)); int count = 0; int count1 = 0; // 如果数据全为空 那么就不在继续添加 Field[] fields = data.getClass().getDeclaredFields(); for (Field field : fields) { count1++; field.setAccessible(true); try { Object o = field.get(data); // 获取字段值 if(Objects.isNull(o) || StringUtils.isEmpty(o.toString())) { count++; } } catch (IllegalAccessException e) { throw new RuntimeException(e); } } if(count == count1) { FLAG = false; } if(FLAG) { list.add(data); } if (list.size() >= BATCH_COUNT) { save(); list.clear(); } } @Override public void doAfterAllAnalysed(AnalysisContext analysisContext) { log.info("所有数据解析完成{}",list.size()); save(); // 所有数据解析完成 将FLAG更新为true if(!FLAG) { FLAG = true; } } private void save() { personTrainingDetailedService.importExcel(list, this.planId); } }