diff --git a/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationCommon.java b/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationCommon.java index 19d0e742f..910328e9a 100644 --- a/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationCommon.java +++ b/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationCommon.java @@ -22,13 +22,14 @@ import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.db.IdGenerator; import com.google.common.collect.Lists; import com.google.common.collect.Maps; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.math.NumberUtils; +import weaver.general.BaseBean; import java.lang.reflect.Field; import java.math.BigDecimal; -import java.util.Date; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; +import java.util.stream.Collectors; /** * 通用:一般劳务报酬所得、全年一次性奖金 @@ -42,6 +43,13 @@ public class TaxDeclarationCommon implements TaxDeclarationStrategy { @Override public TaxDeclarationGenerateResult generate(TaxDeclareContext taxDeclareContext, Long employeeId) { + // 获取联特绩效账套 + BaseBean baseBean = new BaseBean(); + String jxSobIdStr = baseBean.getPropValue("ltSalary", "tax_declare_jx_sob_ids"); + List jxSobIdList = new ArrayList<>(); + if (StringUtils.isNotBlank(jxSobIdStr)) { + jxSobIdList = Arrays.stream(jxSobIdStr.split(",")).filter(id -> NumberUtils.isCreatable(id)).map(Long::valueOf).collect(Collectors.toList()); + } Date now = new Date(); // 薪资核算结果按照薪资核算人员id聚合分类 Map> salaryAcctResultValueMap = SalaryEntityUtil.group2Map(taxDeclareContext.getSalaryAcctResultValues(), SalaryAcctResultPO::getSalaryAcctEmpId); @@ -122,6 +130,10 @@ public class TaxDeclarationCommon implements TaxDeclarationStrategy { List employeePOS = employeeIdEntry.getValue(); BigDecimal income = new BigDecimal("0.00"); for (SalaryAcctEmployeePO salaryAcctEmployeePO : employeePOS) { + // 跳过绩效账套 + if (jxSobIdList.contains(salaryAcctEmployeePO.getSalarySobId())) { + continue; + } SalarySobTaxReportRulePO incomeRule = taxDeclareContext.getSalarySobTaxReportRuleMap() .get(salaryAcctEmployeePO.getSalarySobId() + "-" + taxReportColumn.getReportColumnDataIndex()); List salaryAcctResultValue = salaryAcctResultValueMap.get(salaryAcctEmployeePO.getId()); @@ -160,6 +172,29 @@ public class TaxDeclarationCommon implements TaxDeclarationStrategy { } value = StrUtil.isNotBlank(value) ? value : Objects.equals(taxReportColumn.getDataType(), SalaryDataTypeEnum.NUMBER.getValue()) ? "0.00" : ""; } + + if (new String("income").equals(taxReportColumn.getReportColumnDataIndex()) && Objects.equals(taxReportColumn.getDataType(), SalaryDataTypeEnum.NUMBER.getValue())) { + // 还需要取联特绩效本期收入 + List employeePOS = employeeIdEntry.getValue(); + BigDecimal income = new BigDecimal("0.00"); + for (SalaryAcctEmployeePO salaryAcctEmployeePO : employeePOS) { + SalarySobTaxReportRulePO incomeRule = taxDeclareContext.getSalarySobTaxReportRuleMap() + .get(salaryAcctEmployeePO.getSalarySobId() + "-ltjxincome" ); + List salaryAcctResultValue = salaryAcctResultValueMap.get(salaryAcctEmployeePO.getId()); + if (incomeRule != null && salaryAcctResultValue != null) { + String incomeValue = salaryAcctResultValue.stream() + .filter(result -> result.getSalaryItemId().equals(incomeRule.getSalaryItemId())) + .findFirst() + .orElse(new SalaryAcctResultPO()) + .getResultValue(); + if (StrUtil.isNotBlank(incomeValue) && NumberUtil.isNumber(incomeValue)) { + income = income.add(new BigDecimal(incomeValue)); + } + } + } + BigDecimal valueBigDecimal = NumberUtils.isCreatable(value) ? new BigDecimal(value) : new BigDecimal("0.00"); + value = valueBigDecimal.add(income).toPlainString(); + } valueMap.put(taxReportColumn.getReportColumnDataIndex(), value); } TaxDeclarationValuePO taxDeclarationValue = TaxDeclarationValuePO.builder() diff --git a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java index ffa21899c..744fbb82f 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java @@ -302,11 +302,12 @@ 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 (!taxIds.contains(salaryItemId)) { - //个税项目,默认只能从税局取。 - resultValue = handleConsolidatedTax(resultValue, salaryItemPO, salaryAcctCalculateBO, otherSalaryAcctEmployeePOMap.get(salaryAcctEmployeePO.getEmployeeId() + "_" + salaryAcctEmployeePO.getTaxAgentId()), otherSalaryAcctResultPOMap.get(salaryAcctEmployeePO.getEmployeeId() + "_" + salaryAcctEmployeePO.getTaxAgentId())); - } + // 联特 取消合并计税 + // // 处理合并计税 + // if (!taxIds.contains(salaryItemId)) { + // //个税项目,默认只能从税局取。 + // resultValue = handleConsolidatedTax(resultValue, salaryItemPO, salaryAcctCalculateBO, otherSalaryAcctEmployeePOMap.get(salaryAcctEmployeePO.getEmployeeId() + "_" + salaryAcctEmployeePO.getTaxAgentId()), otherSalaryAcctResultPOMap.get(salaryAcctEmployeePO.getEmployeeId() + "_" + salaryAcctEmployeePO.getTaxAgentId())); + // } // 处理小数点 resultValue = SalaryAcctFormulaBO.roundResultValue(resultValue, salaryItemPO, salarySobBackItems, salarySobBackItemMap, salaryItemIdKeySalarySobItemPOMap);