diff --git a/src/com/engine/salary/entity/salarysob/po/SalarySobItemPO.java b/src/com/engine/salary/entity/salarysob/po/SalarySobItemPO.java index e3167bc23..47d8938ef 100644 --- a/src/com/engine/salary/entity/salarysob/po/SalarySobItemPO.java +++ b/src/com/engine/salary/entity/salarysob/po/SalarySobItemPO.java @@ -1,5 +1,6 @@ package com.engine.salary.entity.salarysob.po; +import com.engine.salary.elog.annotation.ElogTransform; import com.engine.salary.enums.SalaryRoundingModeEnum; import com.engine.salary.enums.SalaryValueTypeEnum; import lombok.AllArgsConstructor; @@ -23,6 +24,7 @@ import java.util.Date; @NoArgsConstructor @AllArgsConstructor //hrsa_salary_sob_item +@ElogTransform( name="薪资账套薪资项目" ) public class SalarySobItemPO { /** diff --git a/src/com/engine/salary/entity/salarysob/po/SalarySobPO.java b/src/com/engine/salary/entity/salarysob/po/SalarySobPO.java index 921fad01c..68712f06c 100644 --- a/src/com/engine/salary/entity/salarysob/po/SalarySobPO.java +++ b/src/com/engine/salary/entity/salarysob/po/SalarySobPO.java @@ -1,5 +1,6 @@ package com.engine.salary.entity.salarysob.po; +import com.engine.salary.elog.annotation.ElogTransform; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -17,77 +18,110 @@ import java.util.Date; @Accessors(chain = true) @NoArgsConstructor @AllArgsConstructor +@ElogTransform( name="薪资账套" ) //hrsa_salary_sob public class SalarySobPO { + /** * 主键id */ + @ElogTransform( name="主键" ) private Long id; + /** * 名称 */ + @ElogTransform( name="名称" ) private String name; /** * 个税扣缴义务人的主键id */ + @ElogTransform( name="个税扣缴义务人id" ) private Long taxAgentId; /** * 应税项目。1:正常工资薪金所得 */ + @ElogTransform( name="薪资类型" ) private Integer incomeCategory; + /** * 薪资周期。1:上上月、2:上月、3:本月、4:下月 */ + @ElogTransform( name="薪资周期" ) private Integer salaryCycleType; + /** * 薪资周期的起始日期 */ + @ElogTransform( name="薪资周期起始日期" ) private Integer salaryCycleFromDay; + /** * 税款所属期。1:上上月、2:上月、3:本月、4:下月 */ + @ElogTransform( name="税款所属期" ) private Integer taxCycleType; + /** * 考勤周期。1:上上月、2:上月、3:本月、4:下月 */ + @ElogTransform( name="考勤周期" ) private Integer attendCycleType; + /** * 考勤周期的起始日期 */ + @ElogTransform( name="考勤周期起始日期" ) private Integer attendCycleFromDay; + /** * 社保福利所属期。1:上上月、2:上月、3:本月、4:下月 */ + @ElogTransform( name="社保福利所属期" ) private Integer socialSecurityCycleType; + /** * 是否禁用。0:正常使用、1:禁用 */ + @ElogTransform( name="是否禁用" ) private Integer disable; + /** * 描述 */ + @ElogTransform( name="描述" ) private String description; + /** * 创建人 */ + @ElogTransform( name="创建人" ) private Long creator; + /** * 创建时间 */ + @ElogTransform( name="创建时间" ) private Date createTime; + /** * 更新时间 */ + @ElogTransform( name="更新时间" ) private Date updateTime; + /** * 是否已删除。0:未删除、1:已删除 */ + @ElogTransform( name="是否已删除" ) private Integer deleteType; + /** * 租户ID */ + @ElogTransform( name="租户" ) private String tenantKey; Collection ids; 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 d0305777b..aa359b7e6 100644 --- a/src/com/engine/salary/report/entity/po/SalaryStatisticsItemPO.java +++ b/src/com/engine/salary/report/entity/po/SalaryStatisticsItemPO.java @@ -13,26 +13,26 @@ import java.util.Date; @NoArgsConstructor @AllArgsConstructor @ToString -//hrsa_salary_statistics_item") -//薪酬报表统计子表自定义统计项") +//hrsa_salary_statistics_item +//薪酬报表统计子表自定义统计项 @ElogTransform(name = "统计项目") public class SalaryStatisticsItemPO implements Serializable { private static final long serialVersionUID = 5335849418826222822L; - //主键id") + //主键id @ElogTransform(name = "主键id") private Long id; - //统计报表id") + //统计报表id @ElogTransform(name = "报表id") private Long statReportId; - //统计项名称") + //统计项名称 @ElogTransform(name = "统计项名称") private String itemName; - //统计项集合") + //统计项集合 @ElogTransform(name = "统计项集合") private String itemValue; @@ -49,7 +49,7 @@ public class SalaryStatisticsItemPO implements Serializable { * } * jsonToString */ - //计数规则") + //计数规则 @ElogTransform(name = "计数规则") private String countRule; @@ -66,7 +66,7 @@ public class SalaryStatisticsItemPO implements Serializable { * } * jsonToString */ - //求和规则") + //求和规则 @ElogTransform(name = "求和规则") private String sumRule; @@ -83,7 +83,7 @@ public class SalaryStatisticsItemPO implements Serializable { * } * jsonToString */ - //平均值规则") + //平均值规则 @ElogTransform(name = "平均值规则") private String avgRule; @@ -100,7 +100,7 @@ public class SalaryStatisticsItemPO implements Serializable { * } * jsonToString */ - //最大值规则") + //最大值规则 @ElogTransform(name = "最大值规则") private String maxRule; @@ -117,7 +117,7 @@ public class SalaryStatisticsItemPO implements Serializable { * } * jsonToString */ - //最小值规则") + //最小值规则 @ElogTransform(name = "最小值规则") private String minRule; @@ -134,7 +134,7 @@ public class SalaryStatisticsItemPO implements Serializable { * } * jsonToString */ - //中位数规则") + //中位数规则 @ElogTransform(name = "中位数规则") private String medianRule; @@ -177,7 +177,7 @@ public class SalaryStatisticsItemPO implements Serializable { @ElogTransform(name = "平铺是否使用") private String tileRule; - //顺序") + //顺序 @ElogTransform(name = "顺序") private Integer indexValue; @@ -186,23 +186,23 @@ public class SalaryStatisticsItemPO implements Serializable { * * @see UnitTypeEnum */ - //统计单位") + //统计单位 @ElogTransform(name = "统计单位") 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 60acca9fc..419759806 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java @@ -423,7 +423,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); }); @@ -469,7 +469,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 -> { @@ -497,7 +497,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); }); @@ -520,12 +520,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); } } @@ -548,14 +547,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); } } @@ -664,7 +662,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())) { @@ -1088,9 +1086,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"); @@ -1108,11 +1104,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())) { @@ -1951,6 +1945,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())); diff --git a/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java index 8a90a0049..93de141bc 100644 --- a/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java @@ -269,7 +269,7 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe loggerContext.setUser(user); loggerContext.setTargetId("" + salarySob.getId()); loggerContext.setTargetName(salarySob.getName()); - loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "编辑薪资账套薪资项目")); loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "编辑薪资账套薪资项目")); SalaryElogConfig.salarySobLoggerTemplate.write(loggerContext);