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> addMerStrategy(List> data) { Map> strategyMap = new HashMap<>(16); List preExcelDTO = null; int i = 1; while (i < data.size()) { List 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 addColumnMerStrategy(List> data) { List strategyList = new ArrayList<>(); for (int i = 0; i < data.size(); i++) { List currDTO = data.get(i); if (currDTO.get(0).equals(currDTO.get(1))) { strategyList.add(Integer.valueOf(i)); } } return strategyList; } private static void fillStrategyMap(Map> strategyMap, int index) { List 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> head, List> data) throws Exception { Map> 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> head, List> 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> head, List> 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 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> head0, List> head1, List> data0, List> 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); } }