diff --git a/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java b/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java index 10e42f83a..2f6986f7a 100644 --- a/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java +++ b/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java @@ -1,5 +1,6 @@ package com.engine.salary.report.entity.bo; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.cloudstore.eccom.pc.table.WeaTableColumn; import com.engine.common.util.ServiceUtil; @@ -932,6 +933,16 @@ public class SalaryStatisticsReportBO { return sumDecimal; } + private static String handle4GroupValue(String dimCode, SalaryAcctEmployeePO sa, Map> salaryAcctResultValueMap, SalaryStatisticsItemPO item) { + if (salaryAcctResultValueMap.get(sa.getId()) != null) { + String value = salaryAcctResultValueMap.get(sa.getId()).get(dimCode); + if (StringUtils.isNotBlank(value)) { + return value; + } + } + return ""; + } + /** * 定量-单项式分组list分割 * @@ -960,6 +971,22 @@ public class SalaryStatisticsReportBO { return list.stream().filter(i -> ids.contains(i.getId())).collect(Collectors.toList()); } + public static List listAcctEmpByRationGroupIndividual(String groupIndividual, String dimCode, List list, Map yearMap, Map> salaryAcctResultValueMap, List salaryStatisticsItemList) { + Set ids = Sets.newHashSet(); + + for (SalaryAcctEmployeePO sa : list) { + salaryStatisticsItemList.forEach(item -> { + String value = handle4GroupValue(dimCode, sa, salaryAcctResultValueMap, item); + + if (StrUtil.equals(groupIndividual, value)) { + ids.add(sa.getId()); + } + }); + } + + return list.stream().filter(i -> ids.contains(i.getId())).collect(Collectors.toList()); + } + public static Map checkLoad(List salaryStatisticsItemList) { boolean isNow = false; boolean isLast = false; diff --git a/src/com/engine/salary/report/entity/po/SalaryStatisticsItemPO.java b/src/com/engine/salary/report/entity/po/SalaryStatisticsItemPO.java index bcf430d57..e87d1b282 100644 --- a/src/com/engine/salary/report/entity/po/SalaryStatisticsItemPO.java +++ b/src/com/engine/salary/report/entity/po/SalaryStatisticsItemPO.java @@ -12,22 +12,22 @@ import java.util.Date; @NoArgsConstructor @AllArgsConstructor @ToString -//hrsa_salary_statistics_item") -//薪酬报表统计子表自定义统计项") +//hrsa_salary_statistics_item +//薪酬报表统计子表自定义统计项 public class SalaryStatisticsItemPO implements Serializable { private static final long serialVersionUID = 5335849418826222822L; - //主键id") + //主键id private Long id; - //统计报表id") + //统计报表id private Long statReportId; - //统计项名称") + //统计项名称 private String itemName; - //统计项集合") + //统计项集合 private String itemValue; /** @@ -43,7 +43,7 @@ public class SalaryStatisticsItemPO implements Serializable { * } * jsonToString */ - //计数规则") + //计数规则 private String countRule; /** @@ -59,7 +59,7 @@ public class SalaryStatisticsItemPO implements Serializable { * } * jsonToString */ - //求和规则") + //求和规则 private String sumRule; /** @@ -75,7 +75,7 @@ public class SalaryStatisticsItemPO implements Serializable { * } * jsonToString */ - //平均值规则") + //平均值规则 private String avgRule; /** @@ -91,7 +91,7 @@ public class SalaryStatisticsItemPO implements Serializable { * } * jsonToString */ - //最大值规则") + //最大值规则 private String maxRule; /** @@ -107,7 +107,7 @@ public class SalaryStatisticsItemPO implements Serializable { * } * jsonToString */ - //最小值规则") + //最小值规则 private String minRule; /** @@ -123,7 +123,7 @@ public class SalaryStatisticsItemPO implements Serializable { * } * jsonToString */ - //中位数规则") + //中位数规则 private String medianRule; @@ -161,7 +161,7 @@ public class SalaryStatisticsItemPO implements Serializable { */ private String tileRule; - //顺序") + //顺序 private Integer indexValue; /** @@ -169,22 +169,22 @@ public class SalaryStatisticsItemPO implements Serializable { * * @see UnitTypeEnum */ - //统计单位") + //统计单位 private Integer unitType; - //创建时间") + //创建时间 private Date createTime; - //更新时间") + //更新时间 private Date updateTime; - //创建人") + //创建人 private Long creator; - //是否删除") + //是否删除 private Integer deleteType; - //租户key") + //租户key private String tenantKey; private Collection ids; diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java index 368918f4c..261e6292b 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java @@ -31,13 +31,13 @@ import com.engine.salary.report.util.ReportTimeUtil; import com.engine.salary.service.*; import com.engine.salary.service.impl.*; import com.engine.salary.util.*; +import com.engine.salary.util.db.IdGenerator; import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; -import com.engine.salary.util.db.IdGenerator; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; @@ -398,7 +398,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary Map> salaryAcctEmpResultMap = SalaryEntityUtil.group2Map(salaryAcctResultValues, SalaryAcctResultPO::getSalaryAcctEmpId); Map> map = new HashMap<>(); salaryAcctEmpResultMap.forEach((k, v) -> { - Map collect = v.stream().collect(Collectors.toMap(p -> Util.null2String(p.getSalaryItemId()), p -> Util.null2o(p.getResultValue()), (key1, key2) -> key2)); + Map collect = v.stream().collect(Collectors.toMap(p -> Util.null2String(p.getSalaryItemId()), SalaryAcctResultPO::getResultValue, (key1, key2) -> key2)); map.put(k, collect); }); @@ -444,7 +444,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary List finalSalaryAcctEmpIds = getSalaryAcctResultService(user).listAcctEmpIdByAcctEmpId(salaryAcctEmployeeIds); Map> salaryAcctEmpResultMap = SalaryEntityUtil.group2Map(salaryAcctResultValues, SalaryAcctResultPO::getSalaryAcctEmpId); salaryAcctEmpResultMap.forEach((k, v) -> { - Map collect = v.stream().collect(Collectors.toMap(p -> Util.null2String(p.getSalaryItemId()), p -> Util.null2o(p.getResultValue()), (key1, key2) -> key2)); + Map collect = v.stream().collect(Collectors.toMap(p -> Util.null2String(p.getSalaryItemId()), SalaryAcctResultPO::getResultValue, (key1, key2) -> key2)); resultMap.put(k, collect); }); salaryAcctEmployeeIds.stream().forEach(id -> { @@ -472,7 +472,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary Map> salaryAcctEmpResultMap = SalaryEntityUtil.group2Map(salaryAcctResultValues, SalaryAcctResultPO::getSalaryAcctEmpId); Map> map = new HashMap<>(); salaryAcctEmpResultMap.forEach((k, v) -> { - Map collect = v.stream().collect(Collectors.toMap(p -> Util.null2String(p.getSalaryItemId()), p -> Util.null2o(p.getResultValue()), (key1, key2) -> key2)); + Map collect = v.stream().collect(Collectors.toMap(p -> Util.null2String(p.getSalaryItemId()), p -> Util.null2String(p.getResultValue()), (key1, key2) -> key2)); map.put(k, collect); }); @@ -495,12 +495,11 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary String salaryReportConditions = getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_CONDITIONS + id); if (StringUtils.isNotBlank(salaryReportConditions)) { Arrays.asList(salaryReportConditions.split(",")).forEach(paramMd5 -> { - if (StringUtils.isNotBlank(paramMd5)) { - //条件对应的结果 - getSalaryCacheService(user).remove(SalaryCacheKey.SALARY_REPORT_DATA + id + "_" + paramMd5); - } - } - ); + if (StringUtils.isNotBlank(paramMd5)) { + //条件对应的结果 + getSalaryCacheService(user).remove(SalaryCacheKey.SALARY_REPORT_DATA + id + "_" + paramMd5); + } + }); getSalaryCacheService(user).remove(SalaryCacheKey.SALARY_REPORT_CONDITIONS + id); } } @@ -523,14 +522,13 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary List c = new ArrayList<>(); if (StringUtils.isNotBlank(salaryReportConditions)) { Arrays.asList(salaryReportConditions.split(",")).forEach(paramMd5 -> { - if (StringUtils.isNotBlank(paramMd5)) { - Map data = getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_DATA + paramMd5); - Map kv = new HashMap<>(); - kv.put(paramMd5, data); - c.add(kv); - } - } - ); + if (StringUtils.isNotBlank(paramMd5)) { + Map data = getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_DATA + paramMd5); + Map kv = new HashMap<>(); + kv.put(paramMd5, data); + c.add(kv); + } + }); report.add(c); } } @@ -639,7 +637,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary case SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR: return buildCompanyYearRecords(data, salaryAcctResultValueMap); default: - return new PageInfo<>(); + return buildSalaryItemRecords(dimension, data, salaryAcctResultValueMap); } // 定量-组距式分组 } else if (SalaryStatisticsDimensionTypeEnum.RATION_GROUP_SPACING.getValue().equals(dimension.getDimType())) { @@ -1063,9 +1061,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary Map> sameEmployeeListMap = data.getSameList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeId)); List empIds = accountDetailPOList.stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); - Map employeeByIdMap = getSalaryEmployeeService(user).getEmployeeByIdsAll(empIds) - .stream() - .collect(Collectors.toMap(DataCollectionEmployee::getEmployeeId, o -> o)); + Map employeeByIdMap = getSalaryEmployeeService(user).getEmployeeByIdsAll(empIds).stream().collect(Collectors.toMap(DataCollectionEmployee::getEmployeeId, o -> o)); //人员维度扩展属性 EmployeeInfoExpandDTO employeeInfoExpandDTO = getSalaryStatisticsDimensionService(user).getExpandFieldSettings("dim_employee"); @@ -1083,11 +1079,9 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary Map temp = new HashMap<>(); // temp.put(DM, Objects.nonNull(employeeByIdMap.get(k)) ? employeeByIdMap.get(k) : employeeExtByIdMap.get(k)); temp.put(DM, employeeByIdMap.get(k).getUsername()); - fieldSettings.forEach( - fieldSetting -> { - temp.put(fieldSetting.getField(), expandEmployeeMap.getOrDefault(k, new HashMap<>()).get(fieldSetting.getField())); - } - ); + fieldSettings.forEach(fieldSetting -> { + temp.put(fieldSetting.getField(), expandEmployeeMap.getOrDefault(k, new HashMap<>()).get(fieldSetting.getField())); + }); temp.putAll(SalaryStatisticsReportBO.calculateItem(v, lastEmployeeListMap.get(k), sameEmployeeListMap.get(k), salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); records.add(temp); } else if (StringUtils.equals(dimensionValue, employeeByIdMap.get(k).getUsername())) { @@ -1926,6 +1920,41 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary return result; } + private PageInfo> buildSalaryItemRecords(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + + //查询薪资项目存在的种类(维度) + Set dimensionSet = new HashSet<>(); + for (Long k : salaryAcctResultValueMap.keySet()) { + Map map = salaryAcctResultValueMap.get(k); + dimensionSet.add(map.getOrDefault(dimension.getDimCode(), "")); + } + + PageInfo> result = new PageInfo<>(); + List> records = new ArrayList<>(); + + Map empIdYearMap = new HashMap<>(); + Map lastEmpIdYearMap = new HashMap<>(); + Map sameEmpIdYearMap = new HashMap<>(); + + String dimensionValue = data.getDimensionValue(); + dimensionSet.stream().sorted((a,b)->b.length()-a.length()).forEach(k -> { + if (dimensionValue == null) { + List salaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupIndividual(k, dimension.getDimCode(), data.getList(), empIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); + List lastSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupIndividual(k, dimension.getDimCode(), data.getLastList(), lastEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); + List sameSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupIndividual(k, dimension.getDimCode(), data.getSameList(), sameEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); + Map temp = new HashMap<>(); + temp.put(DM, k); + temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + } else if (StringUtils.equals(dimensionValue, k)) { + List salaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupIndividual(k, dimension.getDimCode(), data.getList(), empIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); + data.setListByDimensionValue(salaryAcctEmployees); + } + }); + result.setList(records); + return result; + } + // private PageInfo> buildRationGroupSpacing4NoItemRecords(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { // PageInfo> result = new PageInfo<>(); // List> records = new ArrayList<>(); diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsDimensionWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsDimensionWrapper.java index 7e8c8a374..70261fc4d 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsDimensionWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsDimensionWrapper.java @@ -114,6 +114,7 @@ public class SalaryStatisticsDimensionWrapper extends Service { * @return */ public SalaryStatisticsDimensionFormDTO getFrom(Long id) { + List salaryItemList = salaryItemService(user).listAll(); List statsDimOptions = Lists.newArrayList(); // statsDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_SEX, SalaryI18nUtil.getI18nLabel(98622, "性别"))); @@ -129,12 +130,12 @@ public class SalaryStatisticsDimensionWrapper extends Service { // statsDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_AGE, SalaryI18nUtil.getI18nLabel(174001, "年龄"))); statsDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_WORK_YEAR, SalaryI18nUtil.getI18nLabel(174000, "工龄"))); statsDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR, SalaryI18nUtil.getI18nLabel(174003, "司龄"))); + statsDimOptions.addAll(salaryItemList.stream().map(item -> new WeaFormOption(item.getId().toString(), item.getName())).collect(Collectors.toList())); List groupDimOptions = Lists.newArrayList(); // groupDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_AGE, SalaryI18nUtil.getI18nLabel(174001, "年龄"))); groupDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_WORK_YEAR, SalaryI18nUtil.getI18nLabel(174000, "工龄"))); groupDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR, SalaryI18nUtil.getI18nLabel(174003, "司龄"))); - List salaryItemList = salaryItemService(user).listAll(); groupDimOptions.addAll(salaryItemList.stream() .filter(item -> SalaryDataTypeEnum.NUMBER.getValue().equals(item.getDataType())) .map(item -> new WeaFormOption(item.getId().toString(), item.getName())).collect(Collectors.toList()));