PC
2024-03-31 608f20e0d5d8f95d9bbb917e95e2913682deb77d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
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);
    }
}