package com.walker.di.excel; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.walker.infrastructure.ApplicationRuntimeException; import com.walker.infrastructure.utils.StringUtils; import com.walker.security.SystemLogMan; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.List; import java.util.Map; /** * 默认的数据监听器实现,按照 EasyExcel 规范定义,转换成自己要的结果。

* 该对象一次性返回所有加载的数据。 * @author 时克英 * @date 2023-02-03 */ public class DefaultDataListener extends AnalysisEventListener> { protected final transient Logger logger = LoggerFactory.getLogger(this.getClass()); // 每次要保存的导入数据集合 protected List rows = null; // 表头信息 protected List headers = null; private int headerSize = 0; // 表头行计数器 private int currentHeadRowNumber = 1; public DefaultDataListener(LoadListener loadListener){ // if(loadListener == null){ // throw new IllegalArgumentException("LoadListener is required!"); // } this.loadListener = loadListener; SystemLogMan.getInstance().checkMan(); } @Override public void invokeHeadMap(Map headMap, AnalysisContext context) { // logger.debug("处理 header----->"); // for(Map.Entry entry : headMap.entrySet()){ // logger.debug(entry.getKey() + " = " + entry.getValue()); // } if(this.currentHeadRowNumber < this.headRowNumber){ logger.debug("表头行大于1,忽略改行,仅处理最后一行表头"); this.currentHeadRowNumber ++; return; } if(this.headers == null){ this.headers = new ArrayList<>(); for(String head : headMap.values()){ this.headers.add(head); } this.headerSize = this.headers.size(); } } @Override public void invoke(Map integerStringMap, AnalysisContext analysisContext) { // System.out.println("处理 data-----> " + integerStringMap); // for(Map.Entry entry : integerStringMap.entrySet()){ // logger.debug(entry.getKey() + " = " + entry.getValue()); // } // if(this.headers == null){ // throw new ApplicationRuntimeException("表头为空,无法继续导入数据", null); // } // if(data == null){ // data = new ArrayList<>(256); // } // Object[] one = new Object[this.headerSize]; // for(int i=0; i= this.saveSizeOnce){ // try { // this.loadListener.onSave(data, this.headers); // this.data.clear(); // this.data = null; // // } catch (DataImportException e) { // throw new ApplicationRuntimeException("loadListener保存导入数据错误:" + e.getMessage(), e); // } // // if(sleepMillSeconds > 0){ // try { // TimeUnit.MILLISECONDS.sleep(sleepMillSeconds); // logger.debug("-----> sleep: " + sleepMillSeconds); // } catch (InterruptedException e) { // logger.error("间隔等待(防止CUP过高),出现异常:" + e.getMessage()); // } // } // } } void increaseOneData(Map integerStringMap){ if(this.headers == null){ throw new ApplicationRuntimeException("表头为空,无法继续导入数据", null); } if(rows == null){ rows = new ArrayList<>(256); } Object[] one = new Object[this.headerSize]; String value = null; for(int i=0; i getRows() { return rows; } /** * 返回表头行(仅标识行) * @return */ public List getHeaders() { return headers; } /** * 设置表头有几行,默认:2 * @param headRowNumber */ public void setHeadRowNumber(int headRowNumber) { this.headRowNumber = headRowNumber; } protected LoadListener loadListener = null; private int headRowNumber = 2; }