package com.qianwen.smartman.modules.mdc.utils;
|
|
import com.alibaba.excel.EasyExcel;
|
import com.alibaba.excel.ExcelWriter;
|
import com.alibaba.excel.metadata.CellData;
|
import com.alibaba.excel.metadata.Head;
|
import com.alibaba.excel.write.metadata.WriteSheet;
|
import com.alibaba.excel.write.metadata.WriteTable;
|
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
|
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
|
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
|
import com.alibaba.excel.write.style.column.AbstractColumnWidthStyleStrategy;
|
import java.io.File;
|
import java.io.OutputStream;
|
import java.net.URLEncoder;
|
import java.nio.charset.StandardCharsets;
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
import org.apache.commons.fileupload.FileItem;
|
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
|
import org.apache.poi.ss.usermodel.Cell;
|
import org.apache.poi.ss.usermodel.Sheet;
|
import org.apache.poi.ss.usermodel.VerticalAlignment;
|
import com.qianwen.core.tool.utils.Charsets;
|
import com.qianwen.smartman.modules.mdc.dto.RowRangeDTO;
|
import com.qianwen.smartman.modules.mdc.strategy.BizMergeStrategy;
|
import com.qianwen.smartman.modules.mdc.strategy.CustomCellWriteHandler;
|
import com.qianwen.smartman.modules.mdc.strategy.ExcelWidthStyleStrategy;
|
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.commons.CommonsMultipartFile;
|
|
/* loaded from: blade-api.jar:BOOT-INF/classes/org/springblade/modules/mdc/utils/ExcelStrategyUtil.class */
|
public final class ExcelStrategyUtil {
|
private ExcelStrategyUtil() {
|
throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
|
}
|
|
public static Map<String, List<RowRangeDTO>> addMerStrategy(List<List<Object>> data) {
|
Map<String, List<RowRangeDTO>> strategyMap = new HashMap<>(16);
|
List<Object> preExcelDTO = null;
|
int i = 1;
|
while (i < data.size()) {
|
List<Object> currDTO = data.get(i);
|
if (preExcelDTO != null && currDTO.get(0).equals(preExcelDTO.get(0))) {
|
fillStrategyMap(strategyMap, i - 1);
|
}
|
preExcelDTO = currDTO;
|
i++;
|
}
|
fillStrategyMap(strategyMap, i - 1);
|
return strategyMap;
|
}
|
|
public static List<Integer> addColumnMerStrategy(List<List<Object>> data) {
|
List<Integer> strategyList = new ArrayList<>();
|
for (int i = 0; i < data.size(); i++) {
|
List<Object> currDTO = data.get(i);
|
if (currDTO.get(0).equals(currDTO.get(1))) {
|
strategyList.add(Integer.valueOf(i));
|
}
|
}
|
return strategyList;
|
}
|
|
private static void fillStrategyMap(Map<String, List<RowRangeDTO>> strategyMap, int index) {
|
List<RowRangeDTO> rowRangeDtoList = strategyMap.get("0") == null ? new ArrayList<>() : strategyMap.get("0");
|
boolean flag = false;
|
for (RowRangeDTO dto : rowRangeDtoList) {
|
if (dto.getEnd().intValue() == index) {
|
dto.setEnd(Integer.valueOf(index + 1));
|
flag = true;
|
}
|
}
|
if (!flag) {
|
rowRangeDtoList.add(new RowRangeDTO(Integer.valueOf(index), Integer.valueOf(index + 1)));
|
}
|
strategyMap.put("0", rowRangeDtoList);
|
}
|
|
public static MultipartFile export(String excelFileName, String sheetName, List<List<String>> head, List<List<Object>> data) throws Exception {
|
Map<String, List<RowRangeDTO>> strategyMap = addMerStrategy(data);
|
DiskFileItemFactory factory = new DiskFileItemFactory();
|
factory.setRepository(new File(System.getProperty("java.io.tmpdir")));
|
BizMergeStrategy bizMergeStrategy = new BizMergeStrategy(strategyMap);
|
WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
|
WriteCellStyle headWriteCellStyle = new WriteCellStyle();
|
contentWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
|
HorizontalCellStyleStrategy horizontalCellStyleStrategy = new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);
|
String fileName = URLEncoder.encode(excelFileName, Charsets.UTF_8.name());
|
FileItem fileItem = factory.createItem("excel", "application/vnd.ms-excel", true, fileName);
|
OutputStream os = fileItem.getOutputStream();
|
EasyExcel.write(os).sheet(sheetName).head(head).registerWriteHandler(bizMergeStrategy).registerWriteHandler(horizontalCellStyleStrategy).registerWriteHandler(new CustomCellWriteHandler()).doWrite(data);
|
return new CommonsMultipartFile(fileItem);
|
}
|
|
public static MultipartFile customerExport(String excelFileName, String sheetName, List<List<String>> head, List<List<Object>> data) throws Exception {
|
String fileName = new String(excelFileName.getBytes(), StandardCharsets.UTF_8);
|
DiskFileItemFactory factory = new DiskFileItemFactory();
|
factory.setRepository(new File(System.getProperty("java.io.tmpdir")));
|
FileItem fileItem = factory.createItem("excel", "application/vnd.ms-excel", true, fileName);
|
OutputStream os = fileItem.getOutputStream();
|
EasyExcel.write(os).sheet(sheetName).head(head).registerWriteHandler(new ExcelWidthStyleStrategy()).doWrite(data);
|
return new CommonsMultipartFile(fileItem);
|
}
|
|
public static MultipartFile customerStyleExport(String excelFileName, String sheetName, List<List<String>> head, List<List<Object>> data) throws Exception {
|
String fileName = new String(excelFileName.getBytes(), StandardCharsets.UTF_8);
|
DiskFileItemFactory factory = new DiskFileItemFactory();
|
factory.setRepository(new File(System.getProperty("java.io.tmpdir")));
|
FileItem fileItem = factory.createItem("excel", "application/vnd.ms-excel", true, fileName);
|
OutputStream os = fileItem.getOutputStream();
|
EasyExcel.write(os).sheet(sheetName).head(head).registerWriteHandler(new AbstractColumnWidthStyleStrategy() { // from class: org.springblade.modules.mdc.utils.ExcelStrategyUtil.1
|
protected void setColumnWidth(WriteSheetHolder writeSheetHolder, List<CellData> cellDataList, Cell cell, Head head2, Integer relativeRowIndex, Boolean isHead) {
|
Sheet sheet = writeSheetHolder.getSheet();
|
int columnIndex = cell.getColumnIndex();
|
sheet.setColumnWidth(columnIndex, 4000);
|
sheet.setDefaultRowHeight((short) 600);
|
}
|
}).doWrite(data);
|
return new CommonsMultipartFile(fileItem);
|
}
|
|
public static MultipartFile customerTwoHeadExport(String excelFileName, String sheetName, List<List<String>> head0, List<List<String>> head1, List<List<Object>> data0, List<List<Object>> data1) throws Exception {
|
String fileName = new String(excelFileName.getBytes(), StandardCharsets.UTF_8);
|
DiskFileItemFactory factory = new DiskFileItemFactory();
|
factory.setRepository(new File(System.getProperty("java.io.tmpdir")));
|
FileItem fileItem = factory.createItem("excel", "application/vnd.ms-excel", true, fileName);
|
OutputStream os = fileItem.getOutputStream();
|
ExcelWriter excelWriter = EasyExcel.write(os).build();
|
WriteSheet writeSheet = EasyExcel.writerSheet(sheetName).needHead(Boolean.FALSE).build();
|
WriteTable writeTable0 = EasyExcel.writerTable(0).head(head0).needHead(true).build();
|
WriteTable writeTable1 = EasyExcel.writerTable(1).head(head1).needHead(true).build();
|
excelWriter.write(data0, writeSheet, writeTable0);
|
excelWriter.write(data1, writeSheet, writeTable1);
|
excelWriter.finish();
|
return new CommonsMultipartFile(fileItem);
|
}
|
}
|