From 78e602f3d0cd9355a05f7bbdeac1ba294bb24869 Mon Sep 17 00:00:00 2001 From: Chengliang <1546584672@qq.com> Date: Fri, 1 Nov 2024 17:17:52 +0800 Subject: [PATCH] =?UTF-8?q?=E6=97=B6=E7=82=B9=E8=8A=B1=E5=90=8D=E5=86=8C?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/EmployeeRecordReportService.java | 13 ++++ .../impl/EmployeeRecordReportServiceImpl.java | 34 +++++++-- .../engine/jclproduct/utils/ExcelUtil.java | 72 +++++++++++++++++++ .../web/EmployeeRecordReportAction.java | 27 +++++++ 4 files changed, 141 insertions(+), 5 deletions(-) create mode 100644 src/com/engine/jclproduct/utils/ExcelUtil.java diff --git a/src/com/engine/jclproduct/service/EmployeeRecordReportService.java b/src/com/engine/jclproduct/service/EmployeeRecordReportService.java index af004ad..0ddb401 100644 --- a/src/com/engine/jclproduct/service/EmployeeRecordReportService.java +++ b/src/com/engine/jclproduct/service/EmployeeRecordReportService.java @@ -1,5 +1,9 @@ package com.engine.jclproduct.service; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import java.util.Map; /** @@ -62,4 +66,13 @@ public interface EmployeeRecordReportService { */ Map caluResourece(Map params); + + /** + * @Description: 管理幅度统计导出 + * @Author: liang.cheng + * @Date: 2024/11/1 11:42 AM + * @param: [request, response] + * @return: org.apache.poi.xssf.usermodel.XSSFWorkbook + */ + XSSFWorkbook reportExport(Map params); } diff --git a/src/com/engine/jclproduct/service/impl/EmployeeRecordReportServiceImpl.java b/src/com/engine/jclproduct/service/impl/EmployeeRecordReportServiceImpl.java index 79a84ae..5e24190 100644 --- a/src/com/engine/jclproduct/service/impl/EmployeeRecordReportServiceImpl.java +++ b/src/com/engine/jclproduct/service/impl/EmployeeRecordReportServiceImpl.java @@ -11,16 +11,15 @@ import com.engine.jclproduct.entity.vo.TimeResourceVo; import com.engine.jclproduct.entity.vo.TransferResourceVo; import com.engine.jclproduct.service.EmployeeRecordReportService; import com.engine.jclproduct.utils.EmploymentUtil; +import com.engine.jclproduct.utils.ExcelUtil; import org.apache.commons.lang3.StringUtils; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import weaver.common.DateUtil; import weaver.conn.RecordSet; import weaver.general.Util; import weaver.hrm.company.DepartmentComInfo; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -168,7 +167,7 @@ public class EmployeeRecordReportServiceImpl extends Service implements Employee }); - + resultMap.put("caluResourceVos",caluResourceVos); //3.构建上下级关系 List topLevelResources = new ArrayList<>(); @@ -194,6 +193,31 @@ public class EmployeeRecordReportServiceImpl extends Service implements Employee return resultMap; } + @Override + public XSSFWorkbook reportExport(Map params) { + String sheetName = "管理幅度统计"; + Map map = caluResourece(params); + List caluResourceVos =(List) map.get("caluResourceVos"); + List headerList = Arrays.asList("部门名称","期初人数","入职人数","转正人数","离职人数","调入人数","调出人数","期末人数"); + List> rows = new LinkedList<>(); + for (CaluResourceVo hr : caluResourceVos) { + List row = new LinkedList<>(); + row.add(hr.getDepartmentName()); + row.add(hr.getStartNumber()); + row.add(hr.getEntryNumber()); + row.add(hr.getTransferNumber()); + row.add(hr.getLeaveNumber()); + row.add(hr.getOnNumber()); + row.add(hr.getOutNumber()); + row.add(hr.getEndNumber()); + rows.add(row); + } + List> excelSheetData = new ArrayList<>(); + excelSheetData.add(headerList); + excelSheetData.addAll(rows); + return ExcelUtil.genWorkbookV2(excelSheetData, sheetName); + } + private String buildtransferResoureceSql(Map params) { String pointValue = Util.null2String(params.get("pointValue")); String startDate = Util.null2String(params.get("startDate")); diff --git a/src/com/engine/jclproduct/utils/ExcelUtil.java b/src/com/engine/jclproduct/utils/ExcelUtil.java new file mode 100644 index 0000000..272b052 --- /dev/null +++ b/src/com/engine/jclproduct/utils/ExcelUtil.java @@ -0,0 +1,72 @@ +package com.engine.jclproduct.utils; + +import org.apache.poi.ss.usermodel.CellType; +import org.apache.poi.ss.usermodel.FillPatternType; +import org.apache.poi.ss.usermodel.HorizontalAlignment; +import org.apache.poi.ss.usermodel.IndexedColors; +import org.apache.poi.xssf.usermodel.*; +import java.util.List; +/** + * @Author liang.cheng + * @Date 2024/11/1 4:56 PM + * @Description: + * @Version 1.0 + */ +public class ExcelUtil { + + public static XSSFWorkbook genWorkbookV2(List> rowList, String sheetName) { + XSSFWorkbook workbook = new XSSFWorkbook(); + + // 设置title样式 + XSSFCellStyle titleCellStyle = workbook.createCellStyle(); + XSSFFont titleFont = workbook.createFont(); + titleFont.setFontName("仿宋"); + titleFont.setFontHeightInPoints((short) 15); + titleCellStyle.setFont(titleFont); + titleCellStyle.setAlignment(HorizontalAlignment.CENTER); + titleCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());//背景色 + titleCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); + + + // 设置主体样式 + XSSFCellStyle cellStyle = workbook.createCellStyle(); + XSSFFont font = workbook.createFont(); + font.setFontName("宋体"); + font.setFontHeightInPoints((short) 10);// 设置字体大小 + cellStyle.setFont(font);// 选择需要用到的字体格式 + cellStyle.setWrapText(true); + + XSSFSheet sheet = workbook.createSheet(sheetName); + //自适应宽度 + sheet.autoSizeColumn(0, true); + //默认列宽 + sheet.setDefaultColumnWidth(25); + //默认行高 + sheet.setDefaultRowHeightInPoints(18); + + for (int rowIndex = 0; rowIndex < rowList.size(); rowIndex++) { + List infoList = rowList.get(rowIndex); + XSSFRow row = sheet.createRow(rowIndex); + for (int cellIndex = 0; cellIndex < infoList.size(); cellIndex++) { + XSSFCell cell = row.createCell(cellIndex); + if (rowIndex == 0) { + cell.setCellStyle(titleCellStyle); + } else { + cell.setCellStyle(cellStyle); + } + Object o = infoList.get(cellIndex); + if (o instanceof String) { + cell.setCellType(CellType.STRING); + cell.setCellValue(String.valueOf(o)); + } else if (o instanceof Boolean) { + cell.setCellType(CellType.BOOLEAN); + cell.setCellValue(String.valueOf(o)); + } else { + cell.setCellType(CellType.STRING); + cell.setCellValue(o == null ? "" : o.toString()); + } + } + } + return workbook; + } +} diff --git a/src/com/engine/jclproduct/web/EmployeeRecordReportAction.java b/src/com/engine/jclproduct/web/EmployeeRecordReportAction.java index df78752..b45d4f0 100644 --- a/src/com/engine/jclproduct/web/EmployeeRecordReportAction.java +++ b/src/com/engine/jclproduct/web/EmployeeRecordReportAction.java @@ -6,6 +6,7 @@ import com.engine.common.util.ParamUtil; import com.engine.common.util.ServiceUtil; import com.engine.jclproduct.service.EmployeeRecordReportService; import com.engine.jclproduct.service.impl.EmployeeRecordReportServiceImpl; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import weaver.hrm.HrmUserVarify; import weaver.hrm.User; @@ -16,6 +17,11 @@ import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.StreamingOutput; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.time.LocalDate; import java.util.HashMap; import java.util.Map; @@ -46,4 +52,25 @@ public class EmployeeRecordReportAction { } return JSONObject.toJSONString(data, SerializerFeature.DisableCircularReferenceDetect); } + + @GET + @Path("/employee/export") + @Produces(MediaType.APPLICATION_OCTET_STREAM) + public Response reportExport(@Context HttpServletRequest request, @Context HttpServletResponse response) { + User user = HrmUserVarify.getUser(request, response); + XSSFWorkbook workbook = getService(user).reportExport(ParamUtil.request2Map(request)); + String time = LocalDate.now().toString(); + String fileName = "报表导出" + time; + try { + fileName = URLEncoder.encode(fileName + ".xlsx", "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + StreamingOutput output = outputStream -> { + workbook.write(outputStream); + outputStream.flush(); + }; + response.setContentType("application/octet-stream"); + return Response.ok(output).header("Content-disposition", "attachment;filename=" + fileName).header("Cache-Control", "no-cache").build(); + } }