diff --git a/src/com/engine/salary/entity/salaryacct/bo/CalculateFormulaVarBO.java b/src/com/engine/salary/entity/salaryacct/bo/CalculateFormulaVarBO.java index 91b6ed174..3b934f215 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/CalculateFormulaVarBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/CalculateFormulaVarBO.java @@ -380,21 +380,27 @@ public class CalculateFormulaVarBO { String value; // 获取薪资项目的调薪规则 SalarySobAdjustRulePO salaryAdjustmentRulePO = salarySobAdjustRulePOMap.get(entry.getKey()); - // if (entry.getValue().size() > 2) { - // // 如果薪资项目在薪资周期内经历了多次调薪,则默认分段计薪 - // value = calculateBySalarySobAdjustRule(salaryCycle, SalarySobAdjustRuleTypeEnum.PARTITION, entry.getValue()); - // } else if (salaryAdjustmentRulePO == null || entry.getValue().size() < 2) { - // // 如果薪资项目没有设置调薪计薪规则,默认取薪资周期内薪资档案中最新的值 - // // 如果薪资项目在薪资周期内没有调薪,默认取薪资周期内薪资档案中最新的值 - // value = calculateBySalarySobAdjustRule(salaryCycle, SalarySobAdjustRuleTypeEnum.USE_AFTER_ADJUSTMENT, entry.getValue()); - // } else { - // // 如果薪资项目在薪资周期内只有一次调薪,则根据调薪计薪规则处理 - // SalarySobAdjustRuleTypeEnum adjustRuleTypeEnum = salaryAdjustmentRulePO.getDayOfMonth() < SalaryDateUtil.dateToLocalDate(entry.getValue().get(0).getEffectiveDateRange().getEndDate()).getDayOfMonth() - // ? SalarySobAdjustRuleTypeEnum.parseByValue(salaryAdjustmentRulePO.getAfterAdjustmentType()) - // : SalarySobAdjustRuleTypeEnum.parseByValue(salaryAdjustmentRulePO.getBeforeAdjustmentType()); - // // 根据调薪计薪规则处理薪资档案的调薪 - // value = calculateBySalarySobAdjustRule(salaryCycle, adjustRuleTypeEnum, entry.getValue()); - // } + if (entry.getValue().size() > 2) { + // 如果薪资项目在薪资周期内经历了多次调薪,则默认分段计薪 + value = calculateBySalarySobAdjustRule(salaryCycle, SalarySobAdjustRuleTypeEnum.PARTITION, entry.getValue()); + } else if (salaryAdjustmentRulePO == null || entry.getValue().size() < 2) { + // 如果薪资项目没有设置调薪计薪规则,默认取薪资周期内薪资档案中最新的值 + // 如果薪资项目在薪资周期内没有调薪,默认取薪资周期内薪资档案中最新的值 + value = calculateBySalarySobAdjustRule(salaryCycle, SalarySobAdjustRuleTypeEnum.USE_AFTER_ADJUSTMENT, entry.getValue()); + } else { + // 如果薪资项目在薪资周期内只有一次调薪,则根据调薪计薪规则处理 + SalarySobAdjustRuleTypeEnum adjustRuleTypeEnum = salaryAdjustmentRulePO.getDayOfMonth() < SalaryDateUtil.dateToLocalDate(entry.getValue().get(0).getEffectiveDateRange().getEndDate()).getDayOfMonth() + ? SalarySobAdjustRuleTypeEnum.parseByValue(salaryAdjustmentRulePO.getAfterAdjustmentType()) + : SalarySobAdjustRuleTypeEnum.parseByValue(salaryAdjustmentRulePO.getBeforeAdjustmentType()); + // 根据调薪计薪规则处理薪资档案的调薪 + value = calculateBySalarySobAdjustRule(salaryCycle, adjustRuleTypeEnum, entry.getValue()); + } + String fieldId = SalaryFormulaReferenceEnum.SALARY_ARCHIVES.getValue() + + SalaryFormulaFieldConstant.FIELD_ID_SEPARATOR + + salaryItemCodeMap.getOrDefault(entry.getKey(), StringUtils.EMPTY); + formulaVarValues.add(new FormulaVarValue().setFieldId(fieldId).setFieldValue(value)); + + List thisMonthEntryValue = new ArrayList<>(); if (CollectionUtils.isEmpty(entry.getValue())) { thisMonthEntryValue = new ArrayList<>(); @@ -447,9 +453,10 @@ public class CalculateFormulaVarBO { value = (NumberUtils.isCreatable(value) ? new BigDecimal(value) : new BigDecimal("0")).add(supplementValue).toString(); } } - String fieldId = SalaryFormulaReferenceEnum.SALARY_ARCHIVES.getValue() + fieldId = SalaryFormulaReferenceEnum.SALARY_ARCHIVES.getValue() + SalaryFormulaFieldConstant.FIELD_ID_SEPARATOR - + salaryItemCodeMap.getOrDefault(entry.getKey(), StringUtils.EMPTY); + + entry.getKey() + +"_secDev"; formulaVarValues.add(new FormulaVarValue().setFieldId(fieldId).setFieldValue(value)); } return formulaVarValues; diff --git a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java index 0d7fa3d68..effb43a0e 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java @@ -218,6 +218,15 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc Set salarySobBackItemIds = SalaryEntityUtil.properties(salarySobBackItems, SalarySobBackItemPO::getSalaryItemId); Map salarySobBackItemMap = SalaryEntityUtil.convert2Map(salarySobBackItems, SalarySobBackItemPO::getSalaryItemId); List salaryAcctResultTempPOS = Lists.newArrayList(); + // 获取3个档案的薪资项目id + BaseBean baseBean = new BaseBean(); + Long jbgzItemId = NumberUtils.isCreatable(baseBean.getPropValue("wyhzzxSalary", "jbgz_item_id")) ? Long.valueOf(baseBean.getPropValue("wyhzzxSalary", "jbgz_item_id")) : 0L; + Long gwgzItemId = NumberUtils.isCreatable(baseBean.getPropValue("wyhzzxSalary", "gwgz_item_id")) ? Long.valueOf(baseBean.getPropValue("wyhzzxSalary", "gwgz_item_id")) : 0L; + Long jxgzItemId = NumberUtils.isCreatable(baseBean.getPropValue("wyhzzxSalary", "jxgz_item_id")) ? Long.valueOf(baseBean.getPropValue("wyhzzxSalary", "jxgz_item_id")) : 0L; + Long yfjbgzItemId = NumberUtils.isCreatable(baseBean.getPropValue("wyhzzxSalary", "yfjbgz_item_id")) ? Long.valueOf(baseBean.getPropValue("wyhzzxSalary", "yfjbgz_item_id")) : 0L; + Long yfgwgzItemId = NumberUtils.isCreatable(baseBean.getPropValue("wyhzzxSalary", "yfgwgz_item_id")) ? Long.valueOf(baseBean.getPropValue("wyhzzxSalary", "yfgwgz_item_id")) : 0L; + Long yfjxgzItemId = NumberUtils.isCreatable(baseBean.getPropValue("wyhzzxSalary", "yfjxgz_item_id")) ? Long.valueOf(baseBean.getPropValue("wyhzzxSalary", "yfjxgz_item_id")) : 0L; + sw.stop(); // 开始核算 sw.start("核算耗时"); @@ -282,6 +291,17 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc String key = SalaryFormulaReferenceEnum.SALARY_ARCHIVES.getValue() + SalaryFormulaFieldConstant.FIELD_ID_SEPARATOR + salaryItemPO.getCode(); resultValue = formulaVarValueMap.getOrDefault(key, StringUtils.EMPTY); } + + if (salaryItemId.equals(yfjbgzItemId)) { + String key = SalaryFormulaReferenceEnum.SALARY_ARCHIVES.getValue() + SalaryFormulaFieldConstant.FIELD_ID_SEPARATOR + jbgzItemId + "_secDev"; + resultValue = formulaVarValueMap.getOrDefault(key, StringUtils.EMPTY); + } else if (salaryItemId.equals(yfgwgzItemId)) { + String key = SalaryFormulaReferenceEnum.SALARY_ARCHIVES.getValue() + SalaryFormulaFieldConstant.FIELD_ID_SEPARATOR + gwgzItemId + "_secDev"; + resultValue = formulaVarValueMap.getOrDefault(key, StringUtils.EMPTY); + } else if (salaryItemId.equals(yfjxgzItemId)) { + String key = SalaryFormulaReferenceEnum.SALARY_ARCHIVES.getValue() + SalaryFormulaFieldConstant.FIELD_ID_SEPARATOR + jxgzItemId + "_secDev"; + resultValue = formulaVarValueMap.getOrDefault(key, StringUtils.EMPTY); + } // 处理合并计税 resultValue = handleConsolidatedTax(resultValue, salaryItemPO, salaryAcctCalculateBO, otherSalaryAcctEmployeePOMap.get(salaryAcctEmployeePO.getEmployeeId() + "_" + salaryAcctEmployeePO.getTaxAgentId()), otherSalaryAcctResultPOMap.get(salaryAcctEmployeePO.getEmployeeId() + "_" + salaryAcctEmployeePO.getTaxAgentId()));