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<PersonTrainingDetailedUpload> {
|
|
private Integer planId;
|
|
private static Boolean FLAG = true;
|
|
private static final int BATCH_COUNT = 1000;
|
|
List<PersonTrainingDetailedUpload> 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);
|
}
|
}
|