依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.2.7</version>
<exclusions>
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.github.dozermapper</groupId>
<artifactId>dozer-spring-boot-starter</artifactId>
<version>6.5.0</version>
</dependency>
工具类
import com.github.dozermapper.core.Mapper;
import java.util.ArrayList;
import java.util.List;
public class DozerUtils {
public static <T,S> List<T> mapList(final Mapper mapper, List<S> sourceList, Class<T> targetObjectClass){
List<T> targetList=new ArrayList<T>();
for(S s:sourceList){
targetList.add(mapper.map(s,targetObjectClass));
}
return targetList;
}
}
控制器写法
@Resource
private Mapper dozerMapper;
@Override
public RestResponse importBaseDataExcel(@RequestParam("file") MultipartFile file) {
try {
InputStream inputStream = file.getInputStream();
ExcelReader excelReader = EasyExcel.read(inputStream).build();
ReadSheet sheet = EasyExcel.readSheet("绩效打分领导").head(JxLeader.class)
.registerReadListener(new JxLeaderListener(iJxLeaderService,dozerMapper))
.build();
ReadSheet sheet2 = EasyExcel.readSheet("岗位级别系数人员分组").head(JxPostLevel.class)
.registerReadListener(new JxPostLevelListener(iJxPostLevelService,dozerMapper))
.build();
ReadSheet sheet3 = EasyExcel.readSheet("绩效岗位条线").head(JxPostLine.class)
.registerReadListener(new JxPostLineListener(iJxPostLineService,dozerMapper))
.build();
ReadSheet sheet4 = EasyExcel.readSheet("部门系数").head(JxInstCoef.class)
.registerReadListener(new JxInstCoefListener(iJxInstCoefService,dozerMapper))
.build();
ReadSheet sheet5 = EasyExcel.readSheet("领导部门系数").head(JxLeaderInstCoef.class)
.registerReadListener(new JxLeaderInstCoefListener(iJxLeaderInstCoefService,dozerMapper))
.build();
ReadSheet sheet6 = EasyExcel.readSheet("身份证号对应工号").head(JxIdCardToEmp.class)
.registerReadListener(new JxIdCardToEmpListener(iJxIdCardToEmpService,dozerMapper))
.build();
excelReader.read(sheet);
excelReader.read(sheet2);
excelReader.read(sheet3);
excelReader.read(sheet4);
excelReader.read(sheet5);
excelReader.read(sheet6);
excelReader.finish();
}catch (Exception e){
e.printStackTrace();
}
return RestResponse.ok("导入成功");
}
监听器写法
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.github.dozermapper.core.Mapper;
import com.pfpj.entity.JxIdCardToEmp;
import com.pfpj.service.IJxIdCardToEmpService;
import com.pfpj.utils.DozerUtils;
import lombok.*;
import java.util.ArrayList;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
@RequiredArgsConstructor
public class JxIdCardToEmpListener extends AnalysisEventListener<JxIdCardToEmp> {
/**
*单次缓存量为1000
*/
private final int BATCH_SIZE = 1000;
/**
* 临时存储List
*/
private List<JxIdCardToEmp> cacheData = new ArrayList<>();
@NonNull
private IJxIdCardToEmpService iJxIdCardToEmpService;
@NonNull
private Mapper dozerMapper;
@Override
public void invoke(JxIdCardToEmp data, AnalysisContext analysisContext) {
cacheData.add(data);
if (cacheData.size() >= BATCH_SIZE){
saveData();
//每批存储完成后清空list
cacheData.clear();
}
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
if (cacheData.size() > 0){
saveData();
}
}
private void saveData(){
List<JxIdCardToEmp> teachers = DozerUtils.mapList(dozerMapper,cacheData,JxIdCardToEmp.class);
iJxIdCardToEmpService.saveOrUpdateBatch(teachers);
}
}
Comments | NOTHING