diff --git a/src/com/engine/thinktrans/entity/param/PersonnelSizeTopParam.java b/src/com/engine/thinktrans/entity/param/PersonnelSizeTopParam.java new file mode 100644 index 0000000..77e2be5 --- /dev/null +++ b/src/com/engine/thinktrans/entity/param/PersonnelSizeTopParam.java @@ -0,0 +1,24 @@ +package com.engine.thinktrans.entity.param; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author liang.cheng + * @Date 2023/11/24 10:48 AM + * @Description: TODO + * @Version 1.0 + */ + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class PersonnelSizeTopParam { + + private Integer year; + + private Integer company; +} diff --git a/src/com/engine/thinktrans/service/ReportCollectService.java b/src/com/engine/thinktrans/service/ReportCollectService.java index a9e4ce1..83b1dbb 100644 --- a/src/com/engine/thinktrans/service/ReportCollectService.java +++ b/src/com/engine/thinktrans/service/ReportCollectService.java @@ -1,5 +1,6 @@ package com.engine.thinktrans.service; +import com.engine.thinktrans.entity.param.PersonnelSizeTopParam; import com.engine.thinktrans.entity.param.TendencyReportParam; import com.engine.thinktrans.entity.vo.TendencyReportVO; @@ -38,7 +39,7 @@ public interface ReportCollectService { * @param: [year] * @return: com.engine.thinktrans.entity.vo.TendencyReportVO */ - TendencyReportVO getPersonnelSize(Integer year); + TendencyReportVO getPersonnelSize(PersonnelSizeTopParam param); /** * @Description: 公司人员规模分析表顶部 @@ -47,5 +48,5 @@ public interface ReportCollectService { * @param: [integer] * @return: Map */ - Map getTop(Integer year); + Map getTop(PersonnelSizeTopParam param); } diff --git a/src/com/engine/thinktrans/service/ReportExportService.java b/src/com/engine/thinktrans/service/ReportExportService.java index 5bd52f8..a3789bd 100644 --- a/src/com/engine/thinktrans/service/ReportExportService.java +++ b/src/com/engine/thinktrans/service/ReportExportService.java @@ -1,5 +1,6 @@ package com.engine.thinktrans.service; +import com.engine.thinktrans.entity.param.PersonnelSizeTopParam; import com.engine.thinktrans.entity.param.TendencyReportParam; import org.apache.poi.xssf.usermodel.XSSFWorkbook; @@ -38,5 +39,5 @@ public interface ReportExportService { * @param: [year] * @return: org.apache.poi.xssf.usermodel.XSSFWorkbook */ - XSSFWorkbook personnelSizeExport(Integer year); + XSSFWorkbook personnelSizeExport(PersonnelSizeTopParam param); } diff --git a/src/com/engine/thinktrans/service/impl/ReportCollectServiceImpl.java b/src/com/engine/thinktrans/service/impl/ReportCollectServiceImpl.java index 05b7be2..3e09cf5 100644 --- a/src/com/engine/thinktrans/service/impl/ReportCollectServiceImpl.java +++ b/src/com/engine/thinktrans/service/impl/ReportCollectServiceImpl.java @@ -4,15 +4,18 @@ import com.engine.core.impl.Service; import com.engine.thinktrans.entity.PersonnelSizeTop; import com.engine.thinktrans.entity.ReportChildrenData; import com.engine.thinktrans.entity.ReportColumns; +import com.engine.thinktrans.entity.param.PersonnelSizeTopParam; import com.engine.thinktrans.entity.param.TendencyReportParam; import com.engine.thinktrans.entity.vo.TendencyReportVO; import com.engine.thinktrans.service.ReportCollectService; import com.engine.thinktrans.util.CommonDateUtil; import com.weaver.general.Util; import lombok.SneakyThrows; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import weaver.conn.RecordSet; import weaver.hrm.company.DepartmentComInfo; +import weaver.hrm.company.SubCompanyComInfo; import java.text.DecimalFormat; import java.time.LocalDate; @@ -120,11 +123,11 @@ public class ReportCollectServiceImpl extends Service implements ReportCollectSe } @Override - public TendencyReportVO getPersonnelSize(Integer year) { + public TendencyReportVO getPersonnelSize(PersonnelSizeTopParam param) { List columns = getPSReportColumns(); List addList = new ArrayList<>(); List addRate = new ArrayList<>(); - List datas = getPersonnelSizeData(year,addList,addRate); + List datas = getPersonnelSizeData(param,addList,addRate); return TendencyReportVO.builder() .columns(columns) .datas(datas) @@ -132,35 +135,31 @@ public class ReportCollectServiceImpl extends Service implements ReportCollectSe } @Override - public Map getTop(Integer year) { + public Map getTop(PersonnelSizeTopParam param) { Map result = new HashMap<>(4); List addList = new ArrayList<>(); List addRate = new ArrayList<>(); - if (year == null) { - year = Year.now().getValue(); + SubCompanyComInfo comInfo = new SubCompanyComInfo(); + ArrayList compList = new ArrayList<>(); + if (param.getCompany() != null) { + comInfo.getSubCompanyLists(String.valueOf(param.getCompany()),compList); + compList.add(param.getCompany()); } - getPersonnelSizeData(year,addList,addRate); + + if (param.getYear() == null) { + param.setYear(Year.now().getValue()); + } + getPersonnelSizeData(param,addList,addRate); List pstList = new ArrayList<>(); RecordSet rs = new RecordSet(); - String startYear = CommonDateUtil.getYearDayFirst(year); - String endYear = CommonDateUtil.getYearDayEnd(year); - int sumStart = 0; - int sumEnd = 0; - int entrySum = 0; + String startYear = CommonDateUtil.getYearDayFirst(param.getYear()); + String endYear = CommonDateUtil.getYearDayEnd(param.getYear()); + int sumStart = sumsByFirstDate(startYear,compList); + int sumEnd = sumsByFirstDate(endYear,compList); + int entrySum = sumsByTwoDate(startYear,endYear,compList); int leaveSum = 0; - rs.executeQuery("select count(1) as sumstart from hrmresource where status < 4 and companystartdate <= ?",startYear); - if (rs.next()) { - sumStart = Util.getIntValue(rs.getString("sumstart")); - } - rs.executeQuery("select count(1) as sumend from hrmresource where status < 4 and companystartdate <= ?",endYear); - if (rs.next()) { - sumEnd = Util.getIntValue(rs.getString("sumend")); - } - rs.executeQuery("select count(1) as entrysum from hrmresource where companystartdate >= ? and companystartdate <= ?",startYear,endYear); - if (rs.next()) { - entrySum = Util.getIntValue(rs.getString("entrysum")); - } + rs.executeQuery("select count(1) as leavesum from hrmstatushistory where type_n = 5 and changedate >= ? and changedate <= ?",startYear,endYear); if (rs.next()) { leaveSum = Util.getIntValue(rs.getString("leavesum")); @@ -180,34 +179,29 @@ public class ReportCollectServiceImpl extends Service implements ReportCollectSe return result; } - private List getPersonnelSizeData(Integer year, List addList, List addRate) { + private List getPersonnelSizeData(PersonnelSizeTopParam param, List addList, List addRate) { RecordSet rs = new RecordSet(); List result = new ArrayList<>(); - if (year == null) { - year = Year.now().getValue(); + if (param.getYear() == null) { + param.setYear(Year.now().getValue()); } - List yearMonths = CommonDateUtil.getYearMonths(year); + SubCompanyComInfo comInfo = new SubCompanyComInfo(); + ArrayList compList = new ArrayList<>(); + if (param.getCompany() != null) { + comInfo.getSubCompanyLists(String.valueOf(param.getCompany()),compList); + compList.add(param.getCompany()); + } + + List yearMonths = CommonDateUtil.getYearMonths(param.getYear()); for (int i = 0; i < yearMonths.size(); i++) { List data = new ArrayList<>(); String startMonth = CommonDateUtil.getFormatYear(CommonDateUtil.toDateStartOfMonth(yearMonths.get(i))); String endMonth = CommonDateUtil.getFormatYear(CommonDateUtil.toDateEndOfMonth(yearMonths.get(i))); - int sumStart = 0; - int sumEnd = 0; - int entrySum = 0; + int sumStart = sumsByFirstDate(startMonth,compList); + int sumEnd = sumsByFirstDate(endMonth,compList); + int entrySum = sumsByTwoDate(startMonth,endMonth,compList); int leaveSum = 0; data.add(String.format("%d 月",i+1)); - rs.executeQuery("select count(1) as sumstart from hrmresource where status < 4 and companystartdate <= ?",startMonth); - if (rs.next()) { - sumStart = Util.getIntValue(rs.getString("sumstart")); - } - rs.executeQuery("select count(1) as sumend from hrmresource where status < 4 and companystartdate <= ?",endMonth); - if (rs.next()) { - sumEnd = Util.getIntValue(rs.getString("sumend")); - } - rs.executeQuery("select count(1) as entrysum from hrmresource where companystartdate >= ? and companystartdate <= ?",startMonth,endMonth); - if (rs.next()) { - entrySum = Util.getIntValue(rs.getString("entrysum")); - } rs.executeQuery("select count(1) as leavesum from hrmstatushistory where type_n = 5 and changedate >= ? and changedate <= ?",startMonth,endMonth); if (rs.next()) { leaveSum = Util.getIntValue(rs.getString("leavesum")); @@ -309,10 +303,42 @@ public class ReportCollectServiceImpl extends Service implements ReportCollectSe return ReportChildrenData.builder().data(data).build(); } + /** + * 单日期 + */ + private int sumsByFirstDate(String firstDate,ArrayList compList) { + RecordSet rs = new RecordSet(); + StringBuilder sb = new StringBuilder(); + sb.append("select count(1) as sums from hrmresource where status < 4 and companystartdate <= ?"); + if (CollectionUtils.isNotEmpty(compList)) { + sb.append(" and subcompanyid1 in(").append(StringUtils.join(compList,",")).append(")"); + } + rs.executeQuery(sb.toString(),firstDate); + rs.next(); + return Util.getIntValue(rs.getString("sums")); + + } + + /** + * 双日期 + */ + private int sumsByTwoDate(String firstDate,String twoDate,ArrayList compList) { + RecordSet rs = new RecordSet(); + StringBuilder sb = new StringBuilder(); + sb.append("select count(1) as sums from hrmresource where companystartdate >= ? and companystartdate <= ?"); + if (CollectionUtils.isNotEmpty(compList)) { + sb.append(" and subcompanyid1 in(").append(StringUtils.join(compList,",")).append(")"); + } + rs.executeQuery(sb.toString(),firstDate,twoDate); + rs.next(); + return Util.getIntValue(rs.getString("sums")); + + } + + /** * 月份1 - * @return */ private List getPTReportColumns() { List columns = new ArrayList<>(); @@ -334,7 +360,6 @@ public class ReportCollectServiceImpl extends Service implements ReportCollectSe /** * 月份2 - * @return */ private List getOJSReportColumns() { List columns = new ArrayList<>(); @@ -357,7 +382,6 @@ public class ReportCollectServiceImpl extends Service implements ReportCollectSe /** * 求和 - * @return */ private List summary(List> countLists){ return countLists.stream() @@ -373,7 +397,6 @@ public class ReportCollectServiceImpl extends Service implements ReportCollectSe /** * 求比例 - * @return */ private String calculateRate(List addRate,int add,int sum) { String rate; diff --git a/src/com/engine/thinktrans/service/impl/ReportExportServiceImpl.java b/src/com/engine/thinktrans/service/impl/ReportExportServiceImpl.java index 1a7d193..8fde448 100644 --- a/src/com/engine/thinktrans/service/impl/ReportExportServiceImpl.java +++ b/src/com/engine/thinktrans/service/impl/ReportExportServiceImpl.java @@ -4,6 +4,7 @@ import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.thinktrans.entity.ReportChildrenData; import com.engine.thinktrans.entity.ReportColumns; +import com.engine.thinktrans.entity.param.PersonnelSizeTopParam; import com.engine.thinktrans.entity.param.TendencyReportParam; import com.engine.thinktrans.entity.vo.TendencyReportVO; import com.engine.thinktrans.service.ReportCollectService; @@ -85,8 +86,8 @@ public class ReportExportServiceImpl extends Service implements ReportExportServ } @Override - public XSSFWorkbook personnelSizeExport(Integer year) { - TendencyReportVO personTendency = getReportCollectService(user).getPersonnelSize(year); + public XSSFWorkbook personnelSizeExport(PersonnelSizeTopParam param) { + TendencyReportVO personTendency = getReportCollectService(user).getPersonnelSize(param); // 1.工作簿名称 String sheetName = "公司人员规模分析"; diff --git a/src/com/engine/thinktrans/web/ReportCollectController.java b/src/com/engine/thinktrans/web/ReportCollectController.java index bf6d3b0..db3db40 100644 --- a/src/com/engine/thinktrans/web/ReportCollectController.java +++ b/src/com/engine/thinktrans/web/ReportCollectController.java @@ -1,6 +1,7 @@ package com.engine.thinktrans.web; import com.engine.common.util.ServiceUtil; +import com.engine.thinktrans.entity.param.PersonnelSizeTopParam; import com.engine.thinktrans.entity.param.TendencyReportParam; import com.engine.thinktrans.entity.vo.TendencyReportVO; import com.engine.thinktrans.service.ReportCollectService; @@ -53,17 +54,19 @@ public class ReportCollectController { @GET @Path("/personnelSize") @Produces(MediaType.APPLICATION_JSON) - public String getPersonnelSize(@Context HttpServletRequest request, @Context HttpServletResponse response,@QueryParam("year") Integer year) { + public String getPersonnelSize(@Context HttpServletRequest request, @Context HttpServletResponse response,@QueryParam("year") Integer year,@QueryParam("company") Integer company) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult(user).run(getReportCollectService(user) :: getPersonnelSize,year); + PersonnelSizeTopParam build = PersonnelSizeTopParam.builder().year(year).company(company).build(); + return new ResponseResult(user).run(getReportCollectService(user) :: getPersonnelSize,build); } @GET @Path("/top") @Produces(MediaType.APPLICATION_JSON) - public String getTop(@Context HttpServletRequest request, @Context HttpServletResponse response,@QueryParam("year") Integer year) { + public String getTop(@Context HttpServletRequest request, @Context HttpServletResponse response,@QueryParam("year") Integer year,@QueryParam("company") Integer company) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult>(user).run(getReportCollectService(user) :: getTop,year); + PersonnelSizeTopParam build = PersonnelSizeTopParam.builder().year(year).company(company).build(); + return new ResponseResult>(user).run(getReportCollectService(user) :: getTop,build); } diff --git a/src/com/engine/thinktrans/web/ReportExportController.java b/src/com/engine/thinktrans/web/ReportExportController.java index 5137faa..155a5b6 100644 --- a/src/com/engine/thinktrans/web/ReportExportController.java +++ b/src/com/engine/thinktrans/web/ReportExportController.java @@ -1,6 +1,7 @@ package com.engine.thinktrans.web; import com.engine.common.util.ServiceUtil; +import com.engine.thinktrans.entity.param.PersonnelSizeTopParam; import com.engine.thinktrans.entity.param.TendencyReportParam; import com.engine.thinktrans.service.ReportExportService; import com.engine.thinktrans.service.impl.ReportExportServiceImpl; @@ -81,9 +82,10 @@ public class ReportExportController { @GET @Path("/personnelSize/export") @Produces(MediaType.APPLICATION_OCTET_STREAM) - public Response personnelSizeExport(@Context HttpServletRequest request, @Context HttpServletResponse response,@QueryParam("year") Integer year) { + public Response personnelSizeExport(@Context HttpServletRequest request, @Context HttpServletResponse response,@QueryParam("year") Integer year,@QueryParam("company") Integer company) { User user = HrmUserVarify.getUser(request, response); - XSSFWorkbook workbook = getReportExportService(user).personnelSizeExport(year); + PersonnelSizeTopParam build = PersonnelSizeTopParam.builder().year(year).company(company).build(); + XSSFWorkbook workbook = getReportExportService(user).personnelSizeExport(build); String time = LocalDate.now().toString(); String fileName = "公司人员规模报表" + time; try {