2026-03-16提交:新增total总条数获取逻辑
This commit is contained in:
parent
e30929f6f7
commit
c6da443080
@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user