diff --git a/bonus-common/bonus-common-core/src/main/java/com/bonus/common/core/utils/poi/MultiSheetExcelExporter.java b/bonus-common/bonus-common-core/src/main/java/com/bonus/common/core/utils/poi/MultiSheetExcelExporter.java new file mode 100644 index 0000000..e5f5193 --- /dev/null +++ b/bonus-common/bonus-common-core/src/main/java/com/bonus/common/core/utils/poi/MultiSheetExcelExporter.java @@ -0,0 +1,176 @@ +package com.bonus.common.core.utils.poi; + +import org.apache.commons.io.IOUtils; +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.ss.util.CellRangeAddress; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.net.URLEncoder; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * @author 16043 + */ +public class MultiSheetExcelExporter { + + private final Workbook workbook; + private int currentRowNum; + + private SimpleDateFormat dateFormat; + + public MultiSheetExcelExporter() { + this.workbook = new XSSFWorkbook(); + this.currentRowNum = 0; + this.dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + } + + public Sheet createSheet(String sheetName) { + Sheet sheet = workbook.createSheet(sheetName); + currentRowNum = 0; + return sheet; + } + + public void addHeaderRow(Sheet sheet, List headers) { + Row headerRow = sheet.createRow(currentRowNum++); + for (int i = 0; i < headers.size(); i++) { + Cell cell = headerRow.createCell(i); + cell.setCellValue(headers.get(i)); + // 可以在这里设置标题行的样式 + } + } + + public void addHeaderRowAndTitle(Sheet sheet, List headers,String title) { + + // 创建一个样式对象用于标题行 + CellStyle titleStyle = workbook.createCellStyle(); + titleStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); + titleStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); + Font titleFont = workbook.createFont(); + titleFont.setBold(true); // 设置字体加粗 + titleStyle.setFont(titleFont); + // 设置水平居中对齐 + titleStyle.setAlignment(HorizontalAlignment.CENTER); + // 添加标题行 + Row titleRow = sheet.createRow(currentRowNum++); + Cell titleCell = titleRow.createCell(0); + titleCell.setCellValue(title); // 标题内容 + titleCell.setCellStyle(titleStyle); + // 如果需要合并单元格,可以使用下面的语句 + sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, headers.size() - 1)); + Row headerRow = sheet.createRow(currentRowNum++); + for (int i = 0; i < headers.size(); i++) { + Cell cell = headerRow.createCell(i); + cell.setCellValue(headers.get(i)); + // 可以在这里设置标题行的样式 + cell.setCellStyle(titleStyle); + } + } + + public void addDataRows(Sheet sheet, List> dataList, List headers) { + + // 创建一个样式对象 + CellStyle titleStyle = workbook.createCellStyle(); + // 设置水平居中对齐 + titleStyle.setAlignment(HorizontalAlignment.CENTER); + + for (Map rowData : dataList) { + Row row = sheet.createRow(currentRowNum++); + for (int i = 0; i < headers.size(); i++) { + String header = headers.get(i); + Cell cell = row.createCell(i); + Object value = rowData.get(header); + if (value != null) { + if (value instanceof Date) { + cell.setCellValue(dateFormat.format((Date) value)); + } else if (value instanceof String) { + cell.setCellValue((String) value); + } else if (value instanceof Number) { + cell.setCellValue(((Number) value).doubleValue()); + } else if (value instanceof Boolean) { + cell.setCellValue((Boolean) value); + } else { + cell.setCellValue(value.toString()); + } + } + cell.setCellStyle(titleStyle); + } + } + } + + /** + * 转为异常排名导出重载的方法,设置列合并 + * @param sheet + * @param dataList + * @param headers + * @param orgCounts + * @param userCounts + */ + public void addDataRows(Sheet sheet, List> dataList, List headers,List orgCounts, List userCounts) { + + // 创建一个样式对象 + //设置这两列为上下居中 + CellStyle cellStyle = workbook.createCellStyle(); + // 设置上下居中 + cellStyle.setVerticalAlignment(VerticalAlignment.CENTER); + cellStyle.setAlignment(HorizontalAlignment.CENTER); // 可选:设置水平居中 + + for (Map rowData : dataList) { + Row row = sheet.createRow(currentRowNum++); + for (int i = 0; i < headers.size(); i++) { + String header = headers.get(i); + Cell cell = row.createCell(i); + Object value = rowData.get(header); + if (value != null) { + if (value instanceof Date) { + cell.setCellValue(dateFormat.format((Date) value)); + } else if (value instanceof String) { + cell.setCellValue((String) value); + } else if (value instanceof Number) { + cell.setCellValue(((Number) value).doubleValue()); + } else if (value instanceof Boolean) { + cell.setCellValue((Boolean) value); + } else { + cell.setCellValue(value.toString()); + } + } + cell.setCellStyle(cellStyle); + } + } + //设置数据合并 + + int startRow = 2; + for (int i = 0; i < orgCounts.size(); i++) { + int orgCount = orgCounts.get(i); + int endRow = startRow + orgCount - 1; + if(endRow-startRow>0){ + sheet.addMergedRegion(new CellRangeAddress(startRow, endRow, 1, 1)); + } + startRow = endRow + 1; + } + + startRow = 2; + for (int i = 0; i < userCounts.size(); i++) { + int userCount = userCounts.get(i); + int endRow = startRow + userCount - 1; + if(endRow-startRow>0){ + sheet.addMergedRegion(new CellRangeAddress(startRow, endRow, 2, 2)); + } + startRow = endRow + 1; + } + + + } + + public void exportToResponse(HttpServletResponse response, String fileName) throws IOException { + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setCharacterEncoding("UTF-8"); + response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName + ".xlsx", "UTF-8")); + workbook.write(response.getOutputStream()); + IOUtils.closeQuietly(workbook); + } +} diff --git a/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/controller/PmProjectController.java b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/controller/PmProjectController.java index 860f039..d4b182f 100644 --- a/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/controller/PmProjectController.java +++ b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/controller/PmProjectController.java @@ -723,6 +723,8 @@ public class PmProjectController extends BaseController { List userSalaryApprovalList = pmProjectService.getUserSalaryApprovalList(userSalaryApprovalVo); //分包人员考勤明细 UserAttendanceVo userAttendanceVo = new UserAttendanceVo(); + userAttendanceVo.setProName(userWagePayVo.getProName()); + userAttendanceVo.setMonth(userWagePayVo.getMonth()); userAttendanceVo.setMonthId(Long.valueOf(userWagePayVo.getMonthId())); List userAttendanceList = pmProjectService.getUserAttendanceList(userAttendanceVo); //农民工花名册 @@ -744,7 +746,7 @@ public class PmProjectController extends BaseController { ExcelUtil rosterExcel = new ExcelUtil<>(ProMonthTableRosterVo.class); List titles = new ArrayList<>(); titles.add("农民工花名册"); - titles.add("工程名称:"+proMonthTableRosterVo.getProId()); + titles.add("工程名称:"+userWagePayVo.getProName()); List tails = new ArrayList<>(); rosterExcel.addSheetMy(wb, proMonthTableRosterList, "农民工花名册", titles, tails); @@ -752,7 +754,7 @@ public class PmProjectController extends BaseController { ExcelUtil salaryApprovalExcel = new ExcelUtil<>(UserSalaryApprovalVo.class); List titles2 = new ArrayList<>(); titles2.add("农民工实名制工资信息报审表"); - titles2.add("工程名称:"+userSalaryApprovalVo.getProId()); + titles2.add("工程名称:"+userWagePayVo.getProName()); List tails2 = new ArrayList<>(); tails2.add("分包单位(章) 施工项目部(章) 监理项目部(章)"); tails2.add("法定代表人/授权委托人: 项目经理: 总/专业监理工程师:"); diff --git a/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/domain/vo/ProMonthTableRosterVo.java b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/domain/vo/ProMonthTableRosterVo.java index ca071c4..705b8db 100644 --- a/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/domain/vo/ProMonthTableRosterVo.java +++ b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/domain/vo/ProMonthTableRosterVo.java @@ -23,7 +23,7 @@ public class ProMonthTableRosterVo { /** *工程名称 */ - private Long proName; + private String proName; /** *月份