jiangping
2023-08-28 bab470926b3edba404d455f1cf0f6c8bf929f7b5
导出修复
已修改7个文件
225 ■■■■■ 文件已修改
platform_web/.env.development 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platform_web/src/views/system/loginLog.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/doumeemes/api/system/SystemLoginLogController.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/doumeemes/core/annotation/excel/ExcelColumn.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/doumeemes/core/annotation/excel/ExcelExporter.java 182 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/doumeemes/dao/system/model/SystemLoginLog.java 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/resources/application.yml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platform_web/.env.development
@@ -16,10 +16,10 @@
#江萍本地
# VUE_APP_BASE_URL = 'http://192.168.0.35:10021/'
VUE_APP_BASE_URL = 'http://192.168.0.35:10021/'
#焦松
VUE_APP_BASE_URL = 'http://192.168.0.36:10021/'
#VUE_APP_BASE_URL = 'http://192.168.0.36:10021/'
#刘磊磊本地
# VUE_APP_BASE_URL = 'http://192.168.0.18:10021/'
platform_web/src/views/system/loginLog.vue
@@ -62,9 +62,9 @@
        <el-table-column prop="companyUserId" label="用户id" align="center" min-width="100px"></el-table-column>
        <el-table-column prop="companyName" label="企业名称" align="center" min-width="100px"></el-table-column>
        <el-table-column prop="loginUsername" label="登录用户名" align="center" min-width="100px"></el-table-column>
        <el-table-column prop="companyUserName" label="登录用户名" align="center" min-width="100px">
        <el-table-column prop="companyUserName" label="企业用户名称" align="center" min-width="100px">
          <template slot-scope="{row}">
            {{ row.companyUserName || row.loginUsername }}
            {{ row.companyUserName}}
          </template>
        </el-table-column>
        <el-table-column prop="ip" label="登录IP" align="center" min-width="120px"></el-table-column>
server/src/main/java/doumeemes/api/system/SystemLoginLogController.java
@@ -5,6 +5,7 @@
import doumeemes.core.model.ApiResponse;
import doumeemes.core.model.PageData;
import doumeemes.core.model.PageWrap;
import doumeemes.core.utils.DateUtil;
import doumeemes.dao.system.dto.QuerySystemLoginLogDTO;
import doumeemes.dao.system.model.SystemLoginLog;
import doumeemes.service.system.SystemLoginLogService;
@@ -39,6 +40,6 @@
    @ApiOperation("导出Excel")
    @RequiresPermissions("system:loginLog:query")
    public void export (@RequestBody PageWrap<QuerySystemLoginLogDTO> pageWrap, HttpServletResponse response) {
        ExcelExporter.build(SystemLoginLog.class).export(systemLoginLogService.findPage(pageWrap).getRecords(), "登录日志", response);
        ExcelExporter.build(SystemLoginLog.class).exportWithFirstAndEnd(systemLoginLogService.findPage(pageWrap).getRecords(), "登录日志_"+System.currentTimeMillis(),"登录日志-"+ DateUtil.getPlusTime2(DateUtil.getCurrentDate()),null, response);
    }
}
server/src/main/java/doumeemes/core/annotation/excel/ExcelColumn.java
@@ -34,7 +34,7 @@
    /**
     * 对齐方式
     */
    HorizontalAlignment align() default HorizontalAlignment.LEFT;
    HorizontalAlignment  align() default HorizontalAlignment.LEFT;
    /**
     * 列背景色
server/src/main/java/doumeemes/core/annotation/excel/ExcelExporter.java
@@ -10,8 +10,10 @@
import org.apache.commons.lang3.CharUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.slf4j.Logger;
@@ -150,8 +152,188 @@
    public void export (List<T> data, String fileName, HttpServletResponse response) {
        this.export(data, fileName, DEFAULT_SHEET_NAME, response);
    }
    /**
     * 导出至响应流
     * @param data 数据
     * @param fileName Excel文件名
     * @param response HttpServletResponse对象
     */
    public void exportWithFirstAndEnd (List<T> data, String fileName,String first,String end, HttpServletResponse response) {
        this.exportWithFirstAndEnd(data, fileName, DEFAULT_SHEET_NAME, first,end,response);
    }
    /**
     * 导出至响应流
     * @param data 数据
     * @param fileName Excel文件名
     * @param sheetName Sheet名称
     * @param response HttpServletResponse对象
     */
    public void exportWithFirstAndEnd (List<T> data, String fileName, String sheetName, String first,String end ,HttpServletResponse response) {
        try {
            String encodeFileName = URLEncoder.encode(fileName, Charset.forName("UTF-8").toString()) + ".xlsx";
            response.setHeader("Content-Disposition","attachment;filename=" + encodeFileName);
            response.setContentType("application/octet-stream");
            response.setHeader("eva-opera-type", "download");
            response.setHeader("eva-download-filename", encodeFileName);
            this.exportWithFirstAndEnd(data, sheetName,first,end, response.getOutputStream());
        } catch (IOException e) {
            throw new BusinessException(ResponseStatus.EXPORT_EXCEL_ERROR, e);
        }
    }
    /**
     * 导出到指定输出流
     * @param data 数据
     * @param sheetName Sheet名称
     */
    public void exportWithFirstAndEnd (List<T> data, String sheetName,String first,String end, OutputStream os) {
        SXSSFWorkbook sxssfWorkbook;
        try {
            sxssfWorkbook = new SXSSFWorkbook();
            Sheet sheet = sxssfWorkbook.createSheet(sheetName);
            // 创建列头
            sheet.createFreezePane(0, 2);
            sheet.addMergedRegion(new CellRangeAddress(0   ,0,0,this.getColumns().size()-1));
            Row title = sheet.createRow(0);
            title.setHeight((short) 1000);
            Cell c = title.createCell(0);
            c.setCellValue(first);
            configFirstCell(sxssfWorkbook,c);
            Row header = sheet.createRow(1);
            header.setHeight((short)600);
            List<ColumnInfo> columns = this.getColumns();
            for (int columnIndex = 0; columnIndex < columns.size(); columnIndex++) {
                ColumnInfo column = columns.get(columnIndex);
                Cell cell = header.createCell(columnIndex);
                cell.setCellValue(new HSSFRichTextString(column.columnConfig.name()));
                // 列宽设置
                if (column.columnConfig.width() == -1) {
                    sheet.setColumnWidth(columnIndex, column.columnConfig.name().length() * 2 * 256);
                } else {
                    sheet.setColumnWidth(columnIndex, column.columnConfig.width() * 2 * 256);
                }
                // 设置列头单元格
                configHeaderCell(sxssfWorkbook, cell, column.columnConfig);
            }
            // 创建数据记录
            for (int rowIndex = 0; rowIndex < data.size(); rowIndex++) {
                Row row = sheet.createRow(rowIndex + 2);
                for (int columnIndex = 0; columnIndex < columns.size(); columnIndex++) {
                    ColumnInfo column = columns.get(columnIndex);
                    Cell cell = row.createCell(columnIndex);
                    cell.setCellValue(getCellData(column, data.get(rowIndex)));
                    // 设置数据单元格
                    configDataCell(sxssfWorkbook, cell, column.columnConfig);
                }
            }
            if(StringUtils.isNotBlank(end)){
                sheet.addMergedRegion(new CellRangeAddress(data.size()+2   ,data.size()+2,0,this.getColumns().size()-1));
                Row endRow = sheet.createRow(data.size()+2);
//            endRow.setHeight((short) 600);
                Cell c1 = endRow.createCell(0);
                c1.setCellValue(end);
                configEndCell(sxssfWorkbook,c1);
            }
            sxssfWorkbook.write(os);
            os.close();
        } catch (Exception e) {
            throw new BusinessException(ResponseStatus.EXPORT_EXCEL_ERROR, e);
        } finally {
            if (os != null) {
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    /**
     * 配置数据单元格
     */
    private void configDataCell (SXSSFWorkbook workbook, Cell cell, ExcelColumn columnConfig) {
        CellStyle style = workbook.createCellStyle();
        style.setAlignment(columnConfig.align());
        style.setVerticalAlignment(VerticalAlignment.CENTER);
        // 设置背景
        style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
        style.setFillForegroundColor(columnConfig.dataBackgroundColor().getIndex());
        // 字体
        Font font = workbook.createFont();
        font.setFontHeightInPoints(columnConfig.fontSize());
        // 字体颜色
        font.setColor(columnConfig.color().getIndex());
        // 粗体
        font.setBold(columnConfig.bold());
        // 斜体
        font.setItalic(columnConfig.italic());
        style.setFont(font);
        // 边框
        configCellBorder(style);
        style.setWrapText(true);
        cell.setCellStyle(style);
    }
    /**
     * 配置列头单元格
     */
    private void configFirstCell (SXSSFWorkbook workbook, Cell cell ) {
        CellStyle style = workbook.createCellStyle();
        style.setAlignment(HorizontalAlignment.CENTER);
        style.setVerticalAlignment(VerticalAlignment.CENTER);
        // 设置背景
        style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
        style.setFillForegroundColor(IndexedColors.PALE_BLUE.getIndex());
        // 字体
        Font font = workbook.createFont();
        font.setFontHeightInPoints((short)24);
        font.setBold(true);
        style.setFont(font);
        // 设置边框
        configCellBorder(style);
        cell.setCellStyle(style);
    }
    /**
     * 配置列头单元格
     */
    private void configEndCell (SXSSFWorkbook workbook, Cell cell ) {
        CellStyle style = workbook.createCellStyle();
        style.setAlignment(HorizontalAlignment.RIGHT);
        style.setVerticalAlignment(VerticalAlignment.CENTER);
        // 设置背景
        style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
        style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
        // 字体
        Font font = workbook.createFont();
        font.setFontHeightInPoints((short)14);
        style.setFont(font);
        // 设置边框
        configCellBorder(style);
        cell.setCellStyle(style);
    }
    /**
     * 配置列头单元格
     */
    private void configHeaderCell (SXSSFWorkbook workbook, Cell cell, ExcelColumn columnConfig) {
        CellStyle style = workbook.createCellStyle();
        style.setAlignment(columnConfig.align());
        style.setVerticalAlignment(VerticalAlignment.CENTER);
        // 设置背景
        style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
//        style.setFillForegroundColor(columnConfig.backgroundColor().getIndex());
        style.setFillForegroundColor(IndexedColors.LIGHT_CORNFLOWER_BLUE.getIndex());
        // 字体
        Font font = workbook.createFont();
        font.setFontHeightInPoints((short)11);
        font.setColor(columnConfig.color().index);
        font.setBold(true);
        style.setFont(font);
        // 设置边框
        style.setWrapText(true);
        configCellBorder(style);
        cell.setCellStyle(style);
    }
    /**
     * 获取列集合
     */
    private List<ColumnInfo> getColumns () {
server/src/main/java/doumeemes/dao/system/model/SystemLoginLog.java
@@ -33,14 +33,25 @@
    @ExcelColumn(name="来源", valueMapping = "0=PC平台;1=钉钉平台;2=羚羊平台;3=EDGP平台;4=微信小程序",width = 6,align = HorizontalAlignment.CENTER)
    private Integer orgin;
    @ApiModelProperty(value = "企业用户编码", example = "1")
    @ExcelColumn(name="企业用户ID", width = 6)
    private Integer companyUserId;
    @ApiModelProperty(value = "企业名称")
    @ExcelColumn(name="企业名称",  width = 16)
    @TableField(exist = false)
    private String  companyName;
    @ApiModelProperty(value = "企业用户名称")
    @ExcelColumn(name="企业用户名称",  width = 16)
    @TableField(exist = false)
    private String  companyUserName;
    @ApiModelProperty(value = "登录用户名")
    @ExcelColumn(name="登录用户名")
    private String loginUsername;
    @ApiModelProperty(value = "登录IP")
    @ExcelColumn(name="登录IP", color = IndexedColors.RED, width = 8)
    @ExcelColumn(name="登录IP",  width = 8)
    private String ip;
    @ApiModelProperty(value = "登录地址")
@@ -68,24 +79,14 @@
    private String serverIp;
    @ApiModelProperty(value = "是否登录成功")
    @ExcelColumn(name="是否登录成功", valueMapping = "true=是;false=否", align = HorizontalAlignment.CENTER)
    @ExcelColumn(name="是否成功", valueMapping = "true=成功;false=失败", align = HorizontalAlignment.CENTER)
    private Boolean success;
    @ApiModelProperty(value = "失败原因")
    @ExcelColumn(name="失败原因", color = IndexedColors.RED, width = 16)
    @ExcelColumn(name="失败原因",  width = 16)
    private String reason;
    @ApiModelProperty(value = "登录时间")
    @ExcelColumn(name="登录时间", dateFormat = "yyyy-MM-dd HH:mm:ss", width = 10)
    private Date loginTime;
    @ApiModelProperty(value = "企业名称")
    @ExcelColumn(name="企业名称", color = IndexedColors.RED, width = 16)
    @TableField(exist = false)
    private String  companyName;
    @ApiModelProperty(value = "企业用户名称")
    @ExcelColumn(name="企业用户名称", color = IndexedColors.RED, width = 16)
    @TableField(exist = false)
    private String  companyUserName;
}
server/src/main/resources/application.yml
@@ -5,12 +5,11 @@
  env: development
#  env: production
spring:
#  application:
#    name: doumeemes
  profiles:
    active: standardPro
    active: standard
  # JSON返回配置
  jackson:
    # 默认时区