2026-03-16提交:新增total总条数获取逻辑

This commit is contained in:
junzhangfm 2026-03-16 18:03:21 +08:00
parent e30929f6f7
commit c6da443080
2 changed files with 26 additions and 2 deletions

View File

@ -1,5 +1,6 @@
package com.southern.power.grid.listener; package com.southern.power.grid.listener;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.excel.event.AnalysisEventListener;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@ -13,9 +14,11 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.io.InputStream;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.concurrent.atomic.AtomicInteger;
/** /**
* 数据导入逻辑 -- easyexcel事件监听器 * 数据导入逻辑 -- easyexcel事件监听器
@ -51,7 +54,6 @@ public class DataExcelListener extends AnalysisEventListener<DataExcelEntity> {
@Override @Override
public void invoke(DataExcelEntity data, AnalysisContext context) { public void invoke(DataExcelEntity data, AnalysisContext context) {
if (!Objects.isNull(data)) { if (!Objects.isNull(data)) {
//TODO 待完善 等志明拿到具体数据再导入到数据库中
cacheList.add(data); cacheList.add(data);
// 达到批次数量 插入数据库 // 达到批次数量 插入数据库
if (cacheList.size() >= BATCH_SIZE) { if (cacheList.size() >= BATCH_SIZE) {
@ -107,7 +109,25 @@ public class DataExcelListener extends AnalysisEventListener<DataExcelEntity> {
importTaskMapper.update(null, new LambdaUpdateWrapper<ImportTask>() importTaskMapper.update(null, new LambdaUpdateWrapper<ImportTask>()
.set(ImportTask::getSuccessCount, success) // 成功数 .set(ImportTask::getSuccessCount, success) // 成功数
.set(ImportTask::getFailCount, fail) // 失败数 .set(ImportTask::getFailCount, fail) // 失败数
.set(ImportTask::getTotal, success + fail) // 总数据量
.eq(ImportTask::getTaskNo, task.getTaskNo())); .eq(ImportTask::getTaskNo, task.getTaskNo()));
} }
/**
* 获取 Excel 总条数只读行数不处理数据
*/
public int getTotalCount(InputStream inputStream) {
AtomicInteger totalCount = new AtomicInteger(0);
EasyExcel.read(inputStream, DataExcelEntity.class, new AnalysisEventListener<DataExcelEntity>() {
@Override
public void invoke(DataExcelEntity data, AnalysisContext context) {
totalCount.incrementAndGet(); // 每读一行 +1
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {}
}).sheet().doRead();
return totalCount.get();
}
} }

View File

@ -33,13 +33,17 @@ public class AsyncImportServiceImpl {
@Async("asyncExecutor") @Async("asyncExecutor")
public void doAsyncImport(InputStream inputStream, ImportTask task) { public void doAsyncImport(InputStream inputStream, ImportTask task) {
try { try {
// 获取总条数先读一遍获取总条数
int total = dataExcelListener.getTotalCount(inputStream);
// 更新为导入中 // 更新为导入中
importTaskMapper.update(null, new LambdaUpdateWrapper<ImportTask>() importTaskMapper.update(null, new LambdaUpdateWrapper<ImportTask>()
.set(ImportTask::getStatus, ImportTaskStatusEnum.PROCESSING.getCode()) .set(ImportTask::getStatus, ImportTaskStatusEnum.PROCESSING.getCode())
.set(ImportTask::getTotal, total)
.eq(ImportTask::getTaskNo, task.getTaskNo())); .eq(ImportTask::getTaskNo, task.getTaskNo()));
// 注入任务 // 注入任务
dataExcelListener.setTask(task); dataExcelListener.setTask(task);
inputStream.reset(); // 流被读过一次了重置一下
// 采用easyExcel流式读取一行一行读不加载整个excel文件防止OOM // 采用easyExcel流式读取一行一行读不加载整个excel文件防止OOM
EasyExcel.read(inputStream, DataExcelEntity.class, dataExcelListener) EasyExcel.read(inputStream, DataExcelEntity.class, dataExcelListener)
.sheet() .sheet()