From 0dccc72bd928ddcf30a5cb8e3f6c4936ef61f983 Mon Sep 17 00:00:00 2001 From: Chengliang <1546584672@qq.com> Date: Mon, 20 Nov 2023 15:39:39 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=88=9B=E5=85=83=E6=8A=A5=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/ReportCollectService.java | 9 ++ .../service/ReportExportService.java | 9 ++ .../impl/ReportCollectServiceImpl.java | 129 +++++++++++++++--- .../service/impl/ReportExportServiceImpl.java | 34 ++++- src/com/engine/thinktrans/util/ExcelUtil.java | 8 +- .../web/ReportCollectController.java | 10 ++ .../web/ReportExportController.java | 21 +++ 7 files changed, 196 insertions(+), 24 deletions(-) diff --git a/src/com/engine/thinktrans/service/ReportCollectService.java b/src/com/engine/thinktrans/service/ReportCollectService.java index cad6197..b5c1520 100644 --- a/src/com/engine/thinktrans/service/ReportCollectService.java +++ b/src/com/engine/thinktrans/service/ReportCollectService.java @@ -19,4 +19,13 @@ public interface ReportCollectService { * @return: com.engine.thinktrans.entity.vo.TendencyReportVO */ TendencyReportVO getPersonTendency(TendencyReportParam tendencyReportParam); + + /** + * @Description: 实时在职人数 + * @Author: liang.cheng + * @Date: 2023/11/20 10:05 AM + * @param: [param] + * @return: com.engine.thinktrans.entity.vo.TendencyReportVO + */ + TendencyReportVO getOnJobStatistics(); } diff --git a/src/com/engine/thinktrans/service/ReportExportService.java b/src/com/engine/thinktrans/service/ReportExportService.java index 12f4849..7160490 100644 --- a/src/com/engine/thinktrans/service/ReportExportService.java +++ b/src/com/engine/thinktrans/service/ReportExportService.java @@ -21,4 +21,13 @@ public interface ReportExportService { * @return: org.apache.poi.xssf.usermodel.XSSFWorkbook */ XSSFWorkbook personTendencyExport(TendencyReportParam tendencyReportParam); + + /** + * @Description: 实时在职人数统计 + * @Author: liang.cheng + * @Date: 2023/11/20 3:02 PM + * @param: [] + * @return: org.apache.poi.xssf.usermodel.XSSFWorkbook + */ + XSSFWorkbook onJobStatisticsExport(); } diff --git a/src/com/engine/thinktrans/service/impl/ReportCollectServiceImpl.java b/src/com/engine/thinktrans/service/impl/ReportCollectServiceImpl.java index 12d2edb..4e5f5bb 100644 --- a/src/com/engine/thinktrans/service/impl/ReportCollectServiceImpl.java +++ b/src/com/engine/thinktrans/service/impl/ReportCollectServiceImpl.java @@ -13,6 +13,7 @@ import org.apache.commons.lang3.StringUtils; import weaver.conn.RecordSet; import weaver.hrm.company.DepartmentComInfo; +import java.time.LocalDate; import java.time.Year; import java.time.YearMonth; import java.util.ArrayList; @@ -31,7 +32,7 @@ public class ReportCollectServiceImpl extends Service implements ReportCollectSe @Override public TendencyReportVO getPersonTendency(TendencyReportParam tendencyReportParam) { - List columns = getReportColumns(); + List columns = getPTReportColumns(); List deptList = new ArrayList<>(); RecordSet rs = new RecordSet(); rs.executeQuery("select a.deptid from hrmdepartmentdefined a left join hrmdepartment b on a.deptid =b.id where a.bmcj in (0,1)"); @@ -59,15 +60,7 @@ public class ReportCollectServiceImpl extends Service implements ReportCollectSe }); //求和 - List result = countLists.stream() - .reduce((a, b) -> { - List sum = new ArrayList<>(); - for (int i = 0; i < a.size(); i++) { - sum.add(a.get(i) + b.get(i)); - } - return sum; - }) - .orElse(new ArrayList<>()); + List result = summary(countLists); List stringList = result.stream() .map(String::valueOf) @@ -84,11 +77,74 @@ public class ReportCollectServiceImpl extends Service implements ReportCollectSe .build(); } - /** - * - * @param param - * @return - */ + @Override + public TendencyReportVO getOnJobStatistics() { + List columns = getOJSReportColumns(); + List deptList = new ArrayList<>(); + RecordSet rs = new RecordSet(); + rs.executeQuery("select a.deptid from hrmdepartmentdefined a left join hrmdepartment b on a.deptid =b.id where a.bmcj in (0,1)"); + while (rs.next()) { + deptList.add(Util.getIntValue(rs.getString("deptid"))); + } + + + List datas = new ArrayList<>(); + List> countLists = new ArrayList<>(); + + deptList.forEach(id -> { + List countList = new ArrayList<>(); + ReportChildrenData childrenData = getOnJobChildrenData(id,countList); + datas.add(childrenData); + countLists.add(countList); + }); + + //求和 + List result = summary(countLists); + + List stringList = result.stream() + .map(String::valueOf) + .collect(Collectors.toList()); + + List sums = new ArrayList<>(); + sums.add("/"); + sums.add("全公司"); + sums.addAll(stringList); + + datas.add(ReportChildrenData.builder().data(sums).build()); + return TendencyReportVO.builder() + .columns(columns) + .datas(datas) + .build(); + } + + @SneakyThrows + private ReportChildrenData getOnJobChildrenData(Integer id, List countList) { + RecordSet rs = new RecordSet(); + DepartmentComInfo departmentComInfo = new DepartmentComInfo(); + List data = new ArrayList<>(); + data.add(departmentComInfo.getDepartmentCode(String.valueOf(id))); + data.add(departmentComInfo.getDepartmentName(String.valueOf(id))); + ArrayList allSubDepartment = new ArrayList<>(); + departmentComInfo.getAllChildDeptByDepId(allSubDepartment, String.valueOf(id)); + allSubDepartment.add(String.valueOf(id)); + String allId = StringUtils.join(allSubDepartment, ","); + List yearMonths = CommonDateUtil.getYearMonths(LocalDate.now()); + StringBuilder st = new StringBuilder(); + st.append("select count(1) as sum from hrmresource where status < 4 and companystartdate <= ? and departmentid in"); + st.append(" (").append(allId).append(")"); + yearMonths.forEach(yearMonth -> { + String endMonth = CommonDateUtil.getFormatYear(CommonDateUtil.toDateEndOfMonth(yearMonth)); + rs.executeQuery(st.toString(),endMonth); + if (rs.next()) { + Integer sum = Util.getIntValue(rs.getString("sum"),0); + data.add(String.valueOf(sum)); + countList.add(sum); + } + }); + return ReportChildrenData.builder().data(data).build(); + } + + @SneakyThrows private ReportChildrenData getReportChildrenData(TendencyReportParam param, Integer id,List countList) { RecordSet rs = new RecordSet(); @@ -128,10 +184,10 @@ public class ReportCollectServiceImpl extends Service implements ReportCollectSe /** - * 月份 + * 月份1 * @return */ - private List getReportColumns() { + private List getPTReportColumns() { List columns = new ArrayList<>(); columns.add(ReportColumns.builder().title("月份").key("0").build()); columns.add(ReportColumns.builder().title("1月").key("1").build()); @@ -149,5 +205,44 @@ public class ReportCollectServiceImpl extends Service implements ReportCollectSe return columns; } + /** + * 月份2 + * @return + */ + private List getOJSReportColumns() { + List columns = new ArrayList<>(); + columns.add(ReportColumns.builder().title("部门编号").key("-1").build()); + columns.add(ReportColumns.builder().title("部门名称").key("0").build()); + columns.add(ReportColumns.builder().title("一月").key("1").build()); + columns.add(ReportColumns.builder().title("二月").key("2").build()); + columns.add(ReportColumns.builder().title("三月").key("3").build()); + columns.add(ReportColumns.builder().title("四月").key("4").build()); + columns.add(ReportColumns.builder().title("五月").key("5").build()); + columns.add(ReportColumns.builder().title("六月").key("6").build()); + columns.add(ReportColumns.builder().title("七月").key("7").build()); + columns.add(ReportColumns.builder().title("八月").key("8").build()); + columns.add(ReportColumns.builder().title("九月").key("9").build()); + columns.add(ReportColumns.builder().title("十月").key("10").build()); + columns.add(ReportColumns.builder().title("十一月").key("11").build()); + columns.add(ReportColumns.builder().title("十二月").key("12").build()); + return columns; + } + + /** + * 求和 + * @return + */ + private List summary(List> countLists){ + return countLists.stream() + .reduce((a, b) -> { + List sum = new ArrayList<>(); + for (int i = 0; i < a.size(); i++) { + sum.add(a.get(i) + b.get(i)); + } + return sum; + }) + .orElse(new ArrayList<>()); + } + } diff --git a/src/com/engine/thinktrans/service/impl/ReportExportServiceImpl.java b/src/com/engine/thinktrans/service/impl/ReportExportServiceImpl.java index a16068e..84fa389 100644 --- a/src/com/engine/thinktrans/service/impl/ReportExportServiceImpl.java +++ b/src/com/engine/thinktrans/service/impl/ReportExportServiceImpl.java @@ -35,7 +35,7 @@ public class ReportExportServiceImpl extends Service implements ReportExportServ TendencyReportVO personTendency = getReportCollectService(user).getPersonTendency(tendencyReportParam); // 1.工作簿名称 - String sheetName = "年度人力趋势报表("+tendencyReportParam.getYear()+"年)"; + String sheetName = "年度人力趋势("+tendencyReportParam.getYear()+"年)"; // 2.表头(后面动态获取) List> excelSheetData = new ArrayList<>(); @@ -49,10 +49,34 @@ public class ReportExportServiceImpl extends Service implements ReportExportServ //数据 List datas = personTendency.getDatas(); List> rows = datas.stream() - .map(data -> { - List convertedData = new ArrayList<>(data.getData()); - return convertedData; - }) + .map(data -> (List) new ArrayList(data.getData())) + .collect(Collectors.toList()); + + + excelSheetData.addAll(rows); + return ExcelUtil.genWorkbook(excelSheetData, sheetName); + } + + @Override + public XSSFWorkbook onJobStatisticsExport() { + TendencyReportVO personTendency = getReportCollectService(user).getOnJobStatistics(); + + // 1.工作簿名称 + String sheetName = "实时在职人数"; + // 2.表头(后面动态获取) + List> excelSheetData = new ArrayList<>(); + + List columns = personTendency.getColumns(); + String[] header = columns.stream() + .map(ReportColumns::getTitle) + .toArray(String[]::new); + + excelSheetData.add(Arrays.asList(header)); + + //数据 + List datas = personTendency.getDatas(); + List> rows = datas.stream() + .map(data -> (List) new ArrayList(data.getData())) .collect(Collectors.toList()); diff --git a/src/com/engine/thinktrans/util/ExcelUtil.java b/src/com/engine/thinktrans/util/ExcelUtil.java index 6b91b05..085b5a0 100644 --- a/src/com/engine/thinktrans/util/ExcelUtil.java +++ b/src/com/engine/thinktrans/util/ExcelUtil.java @@ -46,7 +46,11 @@ public class ExcelUtil { titleStyle.setVerticalAlignment(VerticalAlignment.CENTER); titleCell.setCellStyle(titleStyle); - sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, 13)); + if ("实时在职人数".equals(sheetName)){ + sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, 13)); + }else { + sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, 12)); + } // 设置表头样式 @@ -69,7 +73,7 @@ public class ExcelUtil { // 自适应宽度 //sheet.autoSizeColumn(0, true); //默认列宽 - sheet.setDefaultColumnWidth(20); + sheet.setDefaultColumnWidth(18); //默认行高 sheet.setDefaultRowHeightInPoints(18); diff --git a/src/com/engine/thinktrans/web/ReportCollectController.java b/src/com/engine/thinktrans/web/ReportCollectController.java index b4f5873..675786f 100644 --- a/src/com/engine/thinktrans/web/ReportCollectController.java +++ b/src/com/engine/thinktrans/web/ReportCollectController.java @@ -40,4 +40,14 @@ public class ReportCollectController { TendencyReportParam tendencyReportParam = TendencyReportParam.builder().deptIds(deptIds).year(year).useKind(useKind).build(); return new ResponseResult(user).run(getReportCollectService(user) :: getPersonTendency,tendencyReportParam); } + + @GET + @Path("/onJobStatistics") + @Produces(MediaType.APPLICATION_JSON) + public String getOnJobStatistics(@Context HttpServletRequest request, @Context HttpServletResponse response) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getReportCollectService(user) :: getOnJobStatistics); + } + + } diff --git a/src/com/engine/thinktrans/web/ReportExportController.java b/src/com/engine/thinktrans/web/ReportExportController.java index 0a309f5..e29863f 100644 --- a/src/com/engine/thinktrans/web/ReportExportController.java +++ b/src/com/engine/thinktrans/web/ReportExportController.java @@ -56,4 +56,25 @@ public class ReportExportController { response.setContentType("application/octet-stream"); return Response.ok(output).header("Content-disposition", "attachment;filename=" + fileName).header("Cache-Control", "no-cache").build(); } + + @GET + @Path("/onJobStatistics/export") + @Produces(MediaType.APPLICATION_OCTET_STREAM) + public Response onJobStatisticsExport(@Context HttpServletRequest request, @Context HttpServletResponse response) { + User user = HrmUserVarify.getUser(request, response); + XSSFWorkbook workbook = getReportExportService(user).onJobStatisticsExport(); + 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(); + } }