zjj
4 天以前 bcd9cb83cbbb36217cb99ced7bf1fa3cb26bd53c
rsf-server/src/main/java/com/vincent/rsf/server/common/utils/ExcelUtil.java
@@ -2,16 +2,19 @@
import cn.afterturn.easypoi.excel.annotation.Excel;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.vincent.rsf.framework.common.Cools;
import com.vincent.rsf.framework.common.SpringUtils;
import com.vincent.rsf.server.manager.entity.excel.MatnrsTemplate;
import com.vincent.rsf.server.manager.entity.excel.annotation.ExcelComment;
import com.vincent.rsf.server.system.entity.Fields;
import com.vincent.rsf.server.system.service.FieldsService;
import io.swagger.annotations.ApiModelProperty;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@@ -26,7 +29,6 @@
 */
@Slf4j
public class ExcelUtil {
    public static void build(Workbook workbook, HttpServletResponse response) {
        response.reset();
        Http.cors(response);
@@ -34,20 +36,27 @@
        try {
            response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode("export", "UTF-8"));
            workbook.write(response.getOutputStream());
        } catch (IOException ignore) {}
        } catch (IOException ignore) {
        }
    }
    public static <T> Workbook create(List<T> list, Class<T> clz) {
        return  create(list, clz, false);
        return create(list, clz, false);
    }
    public static <T> Workbook create(List<T> list, Class<T> clz, boolean flagTemplate) {
        HSSFWorkbook workbook = new HSSFWorkbook();
        XSSFWorkbook workbook = new XSSFWorkbook();
        Sheet sheet = workbook.createSheet(clz.getSimpleName());
        Row header = sheet.createRow(0);
        Field[] fields = Cools.getAllFields(clz);
        int headerIdx = 0;
        FieldsService itemService = SpringUtils.getBean(FieldsService.class);
        List<Fields> sysFields = itemService.list(new LambdaQueryWrapper<Fields>()
                .eq(Fields::getStatus, 1)
                .eq(Fields::getFlagEnable, 1));
        for (Field field : fields) {
            if (Modifier.isFinal(field.getModifiers())
                    || Modifier.isStatic(field.getModifiers())
@@ -56,9 +65,7 @@
            }
            String memo = "Undefined";
            if (flagTemplate) {
                if (field.isAnnotationPresent(ExcelComment.class)) {
                    memo = field.getAnnotation(ExcelComment.class).value();
                }
                memo = field.getName();
            } else {
                if (field.isAnnotationPresent(Excel.class)) {
                    memo = field.getAnnotation(Excel.class).name();
@@ -70,39 +77,53 @@
            header.createCell(headerIdx).setCellValue(memo);
            headerIdx++;
        }
        int rowIndex = 1;
        for (T t : list) {
            Row row = sheet.createRow(rowIndex++);
            int cellIndex = 0;
            for (Field field : fields) {
                if (Modifier.isFinal(field.getModifiers())
                        || Modifier.isStatic(field.getModifiers())
                        || Modifier.isTransient(field.getModifiers())) {
                    continue;
                }
                // 此行很重要,特别是字段为private时
                field.setAccessible(true);
                Object value = null;
                try {
                    value = field.get(t);
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
                if (value != null) {
                    if (value instanceof Date) {
                        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                        row.createCell(cellIndex).setCellValue(sdf.format((Date) value));
        if (clz.equals(MatnrsTemplate.class)) {
            //添加扩展字段别名
            if (!sysFields.isEmpty()) {
                for (Fields field : sysFields) {
                    if (flagTemplate) {
                        header.createCell(headerIdx).setCellValue(field.getFields());
                    } else {
                        row.createCell(cellIndex).setCellValue(value.toString());
                        header.createCell(headerIdx).setCellValue(field.getFieldsAlise());
                    }
                    headerIdx++;
                }
                cellIndex++;
            }
        }
        int rowIndex = 1;
        if (!Objects.isNull(list)) {
            for (T t : list) {
                Row row = sheet.createRow(rowIndex++);
                int cellIndex = 0;
                for (Field field : fields) {
                    if (Modifier.isFinal(field.getModifiers())
                            || Modifier.isStatic(field.getModifiers())
                            || Modifier.isTransient(field.getModifiers())) {
                        continue;
                    }
                    // 此行很重要,特别是字段为private时
                    field.setAccessible(true);
                    Object value = null;
                    try {
                        value = field.get(t);
                    } catch (IllegalAccessException e) {
                        e.printStackTrace();
                    }
                    if (value != null) {
                        if (value instanceof Date) {
                            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                            row.createCell(cellIndex).setCellValue(sdf.format((Date) value));
                        } else {
                            row.createCell(cellIndex).setCellValue(value.toString());
                        }
                    }
                    cellIndex++;
                }
            }
        }
        for (int i = 0; i <= fields.length; i++) {
            sheet.autoSizeColumn(i);
        }
@@ -113,15 +134,21 @@
    /**
     * 添加导入excel配置参数
     * 注:默认配置可满足当前需求
     *
     * @return
     */
    public static ImportParams getDefaultImportParams() {
        ImportParams params = new ImportParams();
        return params;
        ImportParams importParams = new ImportParams();
        importParams.setTitleRows(0);
//        importParams.setNeedVerify(true);
        importParams.setHeadRows(1);
        importParams.setSheetNum(1);
        return importParams;
    }
    /**
     * 根据 {@code tClass} 相关成员变量的 {@link ExcelComment#example()} 字段创建模拟数据,暂不支持 复杂类型
     *
     * @param tClass
     * @return
     */