diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/check/CheckReportController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/check/CheckReportController.java index ee1bdb0..665a3b9 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/check/CheckReportController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/check/CheckReportController.java @@ -22,6 +22,7 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.net.URLEncoder; import java.util.ArrayList; import java.util.List; @@ -90,15 +91,17 @@ public class CheckReportController extends BaseController { public void exportDetail(@RequestParam String checkId, HttpServletResponse response) throws IOException { // 1. 查询主表数据 TdCheckReportDTO tdCheckReportDTO = checkReportManager.getTdCheckReportDTO(checkId); + tdCheckReportDTO.setFramework(sysAreaManager.getAreaName(tdCheckReportDTO.getFramework())); + tdCheckReportDTO.setArea(sysAreaManager.getAreaName(tdCheckReportDTO.getArea())); List mainList = new ArrayList<>(); mainList.add(tdCheckReportDTO); // 2. 初始化导出工具 MultiSheetExcelUtil excelUtil = new MultiSheetExcelUtil(); - excelUtil.initExport(response, "主表与子表数据.xlsx"); + String fileName = URLEncoder.encode(tdCheckReportDTO.getCheckId() + ".xlsx", "UTF-8"); + excelUtil.initExport(response, fileName); // 3. 导出主表数据 - excelUtil.createSheet(mainList, "主表数据", TdCheckReportDTO.class); - - excelUtil.createSheet(tdCheckReportDTO.getCheckTypeDTOS(), "子表数据", TdCheckTypeDTO.class); + excelUtil.createSheet(mainList, "检查信息", TdCheckReportDTO.class); + excelUtil.createSheet(tdCheckReportDTO.getCheckTypeDTOS(), "自查类信息", TdCheckTypeDTO.class); // 5. 完成导出 excelUtil.finishExport(); } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/MultiSheetExcelUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/MultiSheetExcelUtil.java index 8022a8e..be38b9b 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/MultiSheetExcelUtil.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/MultiSheetExcelUtil.java @@ -1,10 +1,7 @@ package com.ruoyi.common.utils.poi; import com.ruoyi.common.annotation.Excel; -import org.apache.poi.ss.usermodel.Cell; -import org.apache.poi.ss.usermodel.Row; -import org.apache.poi.ss.usermodel.Sheet; -import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.streaming.SXSSFWorkbook; import javax.servlet.http.HttpServletResponse; @@ -48,6 +45,7 @@ public class MultiSheetExcelUtil { fillDataRows(sheet, list, fields); } + public void finishExport() throws IOException { try { String encodedFileName = encodeFilename(fileName); @@ -94,28 +92,6 @@ public class MultiSheetExcelUtil { return fields; } - private void createTitleRow(Sheet sheet, List fields) { - Row row = sheet.createRow(0); - for (int i = 0; i < fields.size(); i++) { - Cell cell = row.createCell(i); - cell.setCellValue((String) fields.get(i)[1]); - } - } - - private void fillDataRows(Sheet sheet, List list, List fields) { - int rowNum = 1; - for (T item : list) { - Row row = sheet.createRow(rowNum++); - for (int i = 0; i < fields.size(); i++) { - Cell cell = row.createCell(i); - Object[] fieldInfo = fields.get(i); - String fieldName = (String) fieldInfo[0]; - Object value = getFieldValueByName(fieldName, item); - setCellValue(cell, value); - } - } - } - private Object getFieldValueByName(String fieldName, Object obj) { try { Field field = obj.getClass().getDeclaredField(fieldName); @@ -144,4 +120,75 @@ public class MultiSheetExcelUtil { } } + /** + * 创建带样式的表头 + */ + private CellStyle createHeaderStyle(Workbook workbook) { + CellStyle style = workbook.createCellStyle(); + // 背景色 + style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); + style.setFillPattern(FillPatternType.SOLID_FOREGROUND); + // 边框 + style.setBorderTop(BorderStyle.THIN); + style.setBorderBottom(BorderStyle.THIN); + style.setBorderLeft(BorderStyle.THIN); + style.setBorderRight(BorderStyle.THIN); + // 字体 + Font font = workbook.createFont(); + font.setColor(IndexedColors.BLACK.getIndex()); + font.setFontName("Arial"); + font.setFontHeightInPoints((short) 12); + font.setBold(true); + style.setFont(font); + // 对齐方式 + style.setAlignment(HorizontalAlignment.CENTER); + style.setVerticalAlignment(VerticalAlignment.CENTER); + + return style; + } + + /** + * 创建数据行的样式(可选) + */ + private CellStyle createDataStyle(Workbook workbook) { + CellStyle style = workbook.createCellStyle(); + // 设置边框 + style.setBorderTop(BorderStyle.THIN); + style.setBorderBottom(BorderStyle.THIN); + style.setBorderLeft(BorderStyle.THIN); + style.setBorderRight(BorderStyle.THIN); + // 设置自动换行(可选) + style.setWrapText(true); + return style; + } + + private void createTitleRow(Sheet sheet, List fields) { + CellStyle headerStyle = createHeaderStyle(workbook); + CellStyle dataStyle = createDataStyle(workbook); // 数据行样式(可选) + Row row = sheet.createRow(0); + for (int i = 0; i < fields.size(); i++) { + Cell cell = row.createCell(i); + cell.setCellValue((String) fields.get(i)[1]); + cell.setCellStyle(headerStyle); + // 设置列宽 + sheet.setColumnWidth(i, Math.max(sheet.getColumnWidth(i), 3000)); + } + } + + private void fillDataRows(Sheet sheet, List list, List fields) { + CellStyle dataStyle = createDataStyle(workbook); // 应用数据行样式 + int rowNum = 1; + for (T item : list) { + Row row = sheet.createRow(rowNum++); + for (int i = 0; i < fields.size(); i++) { + Cell cell = row.createCell(i); + Object[] fieldInfo = fields.get(i); + String fieldName = (String) fieldInfo[0]; + Object value = getFieldValueByName(fieldName, item); + setCellValue(cell, value); + cell.setCellStyle(dataStyle); // 应用数据行样式 + } + } + } + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/check/dto/TdCheckReportDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/check/dto/TdCheckReportDTO.java index 3fe25b5..8c0b3be 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/check/dto/TdCheckReportDTO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/check/dto/TdCheckReportDTO.java @@ -17,6 +17,8 @@ import java.util.List; * @TableName td_check_report */ @Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) public class TdCheckReportDTO implements Serializable { /** * id diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/check/dto/TdCheckTypeDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/check/dto/TdCheckTypeDTO.java index 331286a..ca616b4 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/check/dto/TdCheckTypeDTO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/check/dto/TdCheckTypeDTO.java @@ -15,6 +15,8 @@ import java.io.Serializable; * @TableName td_check_type */ @Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) public class TdCheckTypeDTO implements Serializable { /** * 主键