weaver-hrm-salary/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationRequest.java

408 lines
28 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.engine.salary.entity.taxdeclaration.bo;
import cn.hutool.core.util.NumberUtil;
import com.engine.salary.entity.datacollection.po.*;
import com.engine.salary.entity.employeedeclare.po.EmployeeDeclarePO;
import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationPO;
import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationValuePO;
import com.engine.salary.entity.taxdeclaration.po.TaxReportColumnPO;
import com.engine.salary.enums.datacollection.TaxFreeTypeEnum;
import com.engine.salary.enums.employeedeclare.CardTypeEnum;
import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum;
import com.engine.salary.enums.salarysob.IncomeCategoryEnum;
import com.engine.salary.util.SalaryDateUtil;
import com.engine.salary.util.SalaryEntityUtil;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import weaver.general.Util;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
/**
* 个税申报
* <p>Copyright: Copyright (c) 2023</p>
* <p>Company: 泛微软件</p>
*
* @author qiantao
* @version 1.0
**/
public class TaxDeclarationRequest {
public static Map<String, Object> convert2RequestParam(List<TaxReportColumnPO> taxReportColumns,
List<TaxDeclarationPO> taxDeclarations,
List<TaxDeclarationValuePO> taxDeclarationValues,
List<EmployeeDeclarePO> employeeDeclares,
Map<TaxFreeTypeEnum, Map<String, ? extends List>> taxFreeMap) {
Map<String, Map<String, Object>> objRequestParam = Maps.newHashMap();
Map<String, List<Map<String, Object>>> listRequestParam = Maps.newHashMap();
Map<String, List<TaxReportColumnPO>> taxReportColumnMap = SalaryEntityUtil.group2Map(taxReportColumns, TaxReportColumnPO::getIncomeCategory);
Map<Long, EmployeeDeclarePO> employeeDeclareMap = SalaryEntityUtil.convert2Map(employeeDeclares, EmployeeDeclarePO::getEmployeeId);
Map<Long, List<TaxDeclarationValuePO>> taxDeclarationValueMap = SalaryEntityUtil.group2Map(taxDeclarationValues, TaxDeclarationValuePO::getTaxDeclarationId);
for (TaxDeclarationPO taxDeclaration : taxDeclarations) {
List<TaxDeclarationValuePO> values = taxDeclarationValueMap.get(taxDeclaration.getId());
for (TaxDeclarationValuePO taxDeclarationValue : values) {
EmployeeDeclarePO employeeDeclare = employeeDeclareMap.get(taxDeclarationValue.getEmployeeId());
IncomeCategoryEnum incomeCategoryEnum = IncomeCategoryEnum.parseByValue(taxDeclaration.getIncomeCategory());
if (employeeDeclare == null || incomeCategoryEnum == null) {
continue;
}
List<TaxReportColumnPO> taxReportColumnList = taxReportColumnMap.get(Util.null2String(incomeCategoryEnum.getValue()));
Map<String, Object> employeeRequestParam = convert2RequestParam(incomeCategoryEnum, taxReportColumnList, taxDeclarationValue, employeeDeclare);
if (incomeCategoryEnum == IncomeCategoryEnum.WAGES_AND_SALARIES) {
Map<String, Object> paramMap = objRequestParam.computeIfAbsent("zcgzxj", k -> {
Map<String, Object> param = new HashMap<>();
// 正常工资薪金列表
param.put("zcgzxjlb", Lists.newArrayList());
// 正常工资薪金是否需要专项
param.put("zcgzxjsfxyzx", 0);
// 正常工资薪金是否传入专项累计
param.put("zcgzxjsfcrlj", 1);
return param;
});
List<Map<String, Object>> employeeRequestParams = (List<Map<String, Object>>) paramMap.computeIfAbsent("zcgzxjlb", K -> Lists.newArrayList());
employeeRequestParams.add(employeeRequestParam);
} else if (incomeCategoryEnum == IncomeCategoryEnum.ONETIME_ANNUAL_BONUS) {
// 全年一次性奖金收入
List<Map<String, Object>> employeeRequestParams = listRequestParam.computeIfAbsent("qnycxjjsslb", k -> Lists.newArrayList());
employeeRequestParams.add(employeeRequestParam);
} else if (incomeCategoryEnum == IncomeCategoryEnum.COMPENSATION_FOR_RETIRE) {
// 内退一次性补偿金
List<Map<String, Object>> employeeRequestParams = listRequestParam.computeIfAbsent("ntycxbcjlb", k -> Lists.newArrayList());
employeeRequestParams.add(employeeRequestParam);
} else if (incomeCategoryEnum == IncomeCategoryEnum.COMPENSATION_FOR_DISMISS) {
// 解除劳动合同一次性补偿金
List<Map<String, Object>> employeeRequestParams = listRequestParam.computeIfAbsent("jcldhtycxbcjlb", k -> Lists.newArrayList());
employeeRequestParam.put("sfzdscmsfb", "");
employeeRequestParams.add(employeeRequestParam);
} else if (incomeCategoryEnum == IncomeCategoryEnum.INCOME_FOR_INDIVIDUAL_EQUITY_INCENTIVE) {
// 个人股权激励收入
List<Map<String, Object>> employeeRequestParams = listRequestParam.computeIfAbsent("grgqjl", k -> Lists.newArrayList());
employeeRequestParams.add(employeeRequestParam);
} else if (incomeCategoryEnum == IncomeCategoryEnum.ANNUITY_RECEIPT) {
// 处理"是否一次性领取"(接口只能传0和1但是接口的错误返回信息告知只能填写是和否所以需要转一下)
String sfycxlq = Util.null2String(employeeRequestParam.get("sfycxlq"));
employeeRequestParam.put("sfycxlq", Objects.equals("", sfycxlq) ? "1" : "0");
// 年金领取
List<Map<String, Object>> employeeRequestParams = listRequestParam.computeIfAbsent("qynj", k -> Lists.newArrayList());
employeeRequestParams.add(employeeRequestParam);
} else if (incomeCategoryEnum == IncomeCategoryEnum.REMUNERATION_FOR_LABOR) {
// 一般劳务报酬所得
List<Map<String, Object>> employeeRequestParams = listRequestParam.computeIfAbsent("lwbclb", k -> Lists.newArrayList());
employeeRequestParams.add(employeeRequestParam);
} else if (incomeCategoryEnum == IncomeCategoryEnum.INCOME_FOR_INSURANCE_SALESMAN) {
// 保险营销员佣金收入
Map<String, Object> paramMap = objRequestParam.computeIfAbsent("bxyxy", k -> {
Map<String, Object> param = new HashMap<>();
param.put("bxyxylwbclb", Lists.newArrayList());
return param;
});
List<Map<String, Object>> employeeRequestParams = (List<Map<String, Object>>) paramMap.computeIfAbsent("bxyxylwbclb", k -> Lists.newArrayList());
employeeRequestParams.add(employeeRequestParam);
} else if (incomeCategoryEnum == IncomeCategoryEnum.INCOME_FOR_SECURITIES_BROKER) {
// 证券经纪人佣金收入
Map<String, Object> paramMap = objRequestParam.computeIfAbsent("zqjjr", k -> {
Map<String, Object> param = new HashMap<>();
param.put("zqjjrsdlb", Lists.newArrayList());
return param;
});
List<Map<String, Object>> employeeRequestParams = (List<Map<String, Object>>) paramMap.computeIfAbsent("zqjjrsdlb", k -> Lists.newArrayList());
employeeRequestParams.add(employeeRequestParam);
} else if (incomeCategoryEnum == IncomeCategoryEnum.REMUNERATION_FOR_OTHER_CONTINUOUS_LABOR) {
// 其他连续劳务报酬所得
Map<String, Object> paramMap = objRequestParam.computeIfAbsent("qtlxlwbc", k -> {
Map<String, Object> param = new HashMap<>();
param.put("qtlxlwbclb", Lists.newArrayList());
return param;
});
List<Map<String, Object>> employeeRequestParams = (List<Map<String, Object>>) paramMap.computeIfAbsent("qtlxlwbclb", k -> Lists.newArrayList());
employeeRequestParams.add(employeeRequestParam);
} else if (incomeCategoryEnum == IncomeCategoryEnum.REMUNERATION_FOR_OTHER_LABOR) {
// 其他非连续劳务报酬所得
List<Map<String, Object>> employeeRequestParams = listRequestParam.computeIfAbsent("qtflxlwbc", k -> Lists.newArrayList());
employeeRequestParams.add(employeeRequestParam);
} else if (incomeCategoryEnum == IncomeCategoryEnum.REMUNERATION_FOR_AUTHOR) {
// 稿酬所得
List<Map<String, Object>> employeeRequestParams = listRequestParam.computeIfAbsent("gcsdlb", k -> Lists.newArrayList());
employeeRequestParam.put("sfzdscmsfb", "");
employeeRequestParams.add(employeeRequestParam);
} else if (incomeCategoryEnum == IncomeCategoryEnum.ROYALTIES) {
// 特许权使用费所得
List<Map<String, Object>> employeeRequestParams = listRequestParam.computeIfAbsent("txq", k -> Lists.newArrayList());
employeeRequestParams.add(employeeRequestParam);
}
// 其他免税扣除附表
buildOtherDeductionDetailParams(taxFreeMap, listRequestParam, employeeDeclare, incomeCategoryEnum, employeeRequestParam);
}
}
Map<String, Object> requestParam = Maps.newHashMap();
requestParam.putAll(objRequestParam);
requestParam.putAll(listRequestParam);
return requestParam;
}
private static void buildOtherDeductionDetailParams(Map<TaxFreeTypeEnum, Map<String, ? extends List>> taxFreeMap, Map<String, List<Map<String, Object>>> listRequestParam, EmployeeDeclarePO employeeDeclare, IncomeCategoryEnum incomeCategoryEnum, Map<String, Object> employeeRequestParam) {
String mssd = employeeRequestParam.getOrDefault("mssd", "0").toString();
if (NumberUtil.isNumber(mssd) && new BigDecimal(mssd).compareTo(new BigDecimal("0")) > 0) {
Map<String, ? extends List> freeIncomeMap = taxFreeMap.get(TaxFreeTypeEnum.FREE_INCOME);
List<FreeIncomePO> poList = (List<FreeIncomePO>) freeIncomeMap.get(employeeDeclare.getTaxAgentId() + "-" + employeeDeclare.getEmployeeId() + "-" + SalaryDateUtil.getFormatYearMonth(employeeDeclare.getTaxCycle()));
if (CollectionUtils.isNotEmpty(poList)) {
List<Map<String, Object>> paramMaps = new ArrayList<>();
for (FreeIncomePO po : poList) {
Map<String, Object> map = new HashMap<>();
// 姓名
map.put("xm", employeeDeclare.getEmployeeName());
// 证件类型
map.put("zzlx", CardTypeEnum.RESIDENT_IDENTITY_CARDS.getDefaultLabel());
// 证件号码
map.put("zzhm", employeeDeclare.getCardNum());
// 所得项目
map.put("sdxm", incomeCategoryEnum.getDefaultLabel());
map.put("jmsx", po.getFreeItem());
map.put("jmxz", po.getFreeProperty());
map.put("sjkcje", po.getFreeAmount());
paramMaps.add(map);
}
listRequestParam.put("msfblb", paramMaps);
}
}
String syjkbx = employeeRequestParam.getOrDefault("syjkbx", "0").toString();
if (NumberUtil.isNumber(syjkbx) && new BigDecimal(syjkbx).compareTo(new BigDecimal("0")) > 0) {
Map<String, ? extends List> healthInsuranceMap = taxFreeMap.get(TaxFreeTypeEnum.HEALTH_INSURANCE);
List<HealthInsurancePO> pos = (List<HealthInsurancePO>) healthInsuranceMap.get(employeeDeclare.getTaxAgentId() + "-" + employeeDeclare.getEmployeeId() + "-" + SalaryDateUtil.getFormatYearMonth(employeeDeclare.getTaxCycle()));
if (CollectionUtils.isNotEmpty(pos)) {
List<Map<String, Object>> paramMaps = new ArrayList<>();
for (HealthInsurancePO healthInsurancePO : pos) {
Map<String, Object> map = new HashMap<>();
// 姓名
map.put("xm", employeeDeclare.getEmployeeName());
// 证件类型
map.put("zzlx", CardTypeEnum.RESIDENT_IDENTITY_CARDS.getDefaultLabel());
// 证件号码
map.put("zzhm", employeeDeclare.getCardNum());
// 所得项目
map.put("sdxm", incomeCategoryEnum.getDefaultLabel());
map.put("bdsxrq", SalaryDateUtil.getFormatLocalDate(healthInsurancePO.getEffectiveDate()));
map.put("sysbm", healthInsurancePO.getIdentificationNumber());
map.put("ndbf", healthInsurancePO.getYearPremium());
map.put("ydbf", healthInsurancePO.getMonthPremium());
map.put("sjkcje", healthInsurancePO.getCurrentDeduction());
paramMaps.add(map);
}
listRequestParam.put("syjkbxfblb", paramMaps);
}
}
String syylbx = employeeRequestParam.getOrDefault("syylbx", "0").toString();
if (NumberUtil.isNumber(syylbx) && new BigDecimal(syylbx).compareTo(new BigDecimal("0")) > 0) {
Map<String, ? extends List> posMap = taxFreeMap.get(TaxFreeTypeEnum.ENDOWMENT_INSURANCE);
List<EndowmentInsurancePO> pos = (List<EndowmentInsurancePO>) posMap.get(employeeDeclare.getTaxAgentId() + "-" + employeeDeclare.getEmployeeId() + "-" + SalaryDateUtil.getFormatYearMonth(employeeDeclare.getTaxCycle()));
if (CollectionUtils.isNotEmpty(pos)) {
List<Map<String, Object>> paramMaps = new ArrayList<>();
for (EndowmentInsurancePO po : pos) {
Map<String, Object> map = new HashMap<>();
// 姓名
map.put("xm", employeeDeclare.getEmployeeName());
// 证件类型
map.put("zzlx", CardTypeEnum.RESIDENT_IDENTITY_CARDS.getDefaultLabel());
// 证件号码
map.put("zzhm", employeeDeclare.getCardNum());
// 所得项目
map.put("sdxm", incomeCategoryEnum.getDefaultLabel());
map.put("sbkcyf", SalaryDateUtil.getFormatYearMonth((po.getDeductionMonth())));
map.put("syylzhbh", po.getAccountNumber());
map.put("bsjym", po.getCheckCode());
map.put("ndbf", po.getYearPremium());
map.put("ydbf", po.getMonthPremium());
map.put("sjkcje", po.getCurrentDeduction());
paramMaps.add(map);
}
listRequestParam.put("syjkbxfblb", paramMaps);
}
}
String zykcjze = employeeRequestParam.getOrDefault("zykcjze", "0").toString();
if (NumberUtil.isNumber(zykcjze) && new BigDecimal(zykcjze).compareTo(new BigDecimal("0")) > 0) {
Map<String, ? extends List> posMap = taxFreeMap.get(TaxFreeTypeEnum.GRANT_DONATION);
List<GrantDonationPO> pos = (List<GrantDonationPO>) posMap.get(employeeDeclare.getTaxAgentId() + "-" + employeeDeclare.getEmployeeId() + "-" + SalaryDateUtil.getFormatYearMonth(employeeDeclare.getTaxCycle()));
if (CollectionUtils.isNotEmpty(pos)) {
List<Map<String, Object>> paramMaps = new ArrayList<>();
for (GrantDonationPO po : pos) {
Map<String, Object> map = new HashMap<>();
// 姓名
map.put("xm", employeeDeclare.getEmployeeName());
// 证件类型
map.put("zzlx", CardTypeEnum.RESIDENT_IDENTITY_CARDS.getDefaultLabel());
// 证件号码
map.put("zzhm", employeeDeclare.getCardNum());
// 所得项目
map.put("sdxm", incomeCategoryEnum.getDefaultLabel());
map.put("szdwmc", po.getRecipientName());
map.put("szdwnsrsbh", po.getTaxCode());
map.put("jzpzh", po.getDonationNumber());
if (po.getDonateDate() != null) {
map.put("jzrq", SalaryDateUtil.getFormatLocalDate(po.getDonateDate()));
}
map.put("jzje", po.getDonateAmount());
map.put("kcbl", po.getDeductionProportion());
map.put("sjkcje", po.getActualDeduction());
paramMaps.add(map);
}
listRequestParam.put("zykcjzefb", paramMaps);
}
}
String jmse = employeeRequestParam.getOrDefault("jmse", "0").toString();
if (NumberUtil.isNumber(jmse) && new BigDecimal(jmse).compareTo(new BigDecimal("0")) > 0) {
Map<String, ? extends List> posMap = taxFreeMap.get(TaxFreeTypeEnum.DERATE_DEDUCTION);
List<DerateDeductionPO> pos = (List<DerateDeductionPO>) posMap.get(employeeDeclare.getTaxAgentId() + "-" + employeeDeclare.getEmployeeId() + "-" + SalaryDateUtil.getFormatYearMonth(employeeDeclare.getTaxCycle()));
if (CollectionUtils.isNotEmpty(pos)) {
List<Map<String, Object>> paramMaps = new ArrayList<>();
for (DerateDeductionPO po : pos) {
Map<String, Object> map = new HashMap<>();
// 姓名
map.put("xm", employeeDeclare.getEmployeeName());
// 证件类型
map.put("zzlx", CardTypeEnum.RESIDENT_IDENTITY_CARDS.getDefaultLabel());
// 证件号码
map.put("zzhm", employeeDeclare.getCardNum());
// 所得项目
map.put("sdxm", incomeCategoryEnum.getDefaultLabel());
map.put("jmsx", po.getDerateItem());
map.put("jmxz", po.getDerateProperty());
map.put("sjkcje", po.getDerateAmount());
paramMaps.add(map);
}
listRequestParam.put("jmfblb", paramMaps);
}
}
String qt = employeeRequestParam.getOrDefault("qt", "0").toString();
if (NumberUtil.isNumber(qt) && new BigDecimal(qt).compareTo(new BigDecimal("0")) > 0) {
Map<String, ? extends List> posMap = taxFreeMap.get(TaxFreeTypeEnum.OTHER_DERATE_DEDUCTION);
List<OtherDerateDeductionPO> pos = (List<OtherDerateDeductionPO>) posMap.get(employeeDeclare.getTaxAgentId() + "-" + employeeDeclare.getEmployeeId() + "-" + SalaryDateUtil.getFormatYearMonth(employeeDeclare.getTaxCycle()));
if (CollectionUtils.isNotEmpty(pos)) {
employeeRequestParam.put("bz", pos.get(0).getRemark());
}
}
}
private static Map<String, Object> convert2RequestParam(IncomeCategoryEnum incomeCategoryEnum,
List<TaxReportColumnPO> taxReportColumns,
TaxDeclarationValuePO taxDeclarationValue,
EmployeeDeclarePO employeeDeclare) {
if (CollectionUtils.isEmpty(taxReportColumns)) {
return Collections.emptyMap();
}
Map<String, Object> requestParam = Maps.newHashMap();
// 姓名
requestParam.put("xm", employeeDeclare.getEmployeeName());
// 证件类型
requestParam.put("zzlx", CardTypeEnum.getByValue(employeeDeclare.getCardType()).getDefaultLabel());
// 证件号码
requestParam.put("zzhm", employeeDeclare.getCardNum());
// 所得项目
requestParam.put("sdxm", incomeCategoryEnum.getDefaultLabel());
for (TaxReportColumnPO taxReportColumn : taxReportColumns) {
String value = taxDeclarationValue.getResultValue().getOrDefault(taxReportColumn.getReportColumnDataIndex(), StringUtils.EMPTY);
if (Objects.equals(taxReportColumn.getDataType(), SalaryDataTypeEnum.NUMBER.getValue())) {
value = SalaryEntityUtil.string2BigDecimalDefault0(taxDeclarationValue.getResultValue().get(taxReportColumn.getReportColumnDataIndex())).toPlainString();
} else if (Objects.equals(taxReportColumn.getDataType(), "integer")) {
value = SalaryEntityUtil.string2BigDecimalDefault0(taxDeclarationValue.getResultValue().get(taxReportColumn.getReportColumnDataIndex())).setScale(0, RoundingMode.HALF_UP).toPlainString();
}
requestParam.put(taxReportColumn.getRequestParamKey(), value);
}
return requestParam;
}
public static Map<String, Object> convert2flsdRequestParam(List<TaxReportColumnPO> taxReportColumns,
List<TaxDeclarationPO> taxDeclarations,
List<TaxDeclarationValuePO> taxDeclarationValues,
List<EmployeeDeclarePO> employeeDeclares) {
Map<String, Map<String, Object>> objRequestParam = Maps.newHashMap();
Map<String, List<Map<String, Object>>> listRequestParam = Maps.newHashMap();
Map<String, List<TaxReportColumnPO>> taxReportColumnMap = SalaryEntityUtil.group2Map(taxReportColumns, TaxReportColumnPO::getIncomeCategory);
Map<Long, EmployeeDeclarePO> employeeDeclareMap = SalaryEntityUtil.convert2Map(employeeDeclares, EmployeeDeclarePO::getEmployeeId);
Map<Long, List<TaxDeclarationValuePO>> taxDeclarationValueMap = SalaryEntityUtil.group2Map(taxDeclarationValues, TaxDeclarationValuePO::getTaxDeclarationId);
for (TaxDeclarationPO taxDeclaration : taxDeclarations) {
List<TaxDeclarationValuePO> values = taxDeclarationValueMap.get(taxDeclaration.getId());
for (TaxDeclarationValuePO taxDeclarationValue : values) {
EmployeeDeclarePO employeeDeclare = employeeDeclareMap.get(taxDeclarationValue.getEmployeeId());
IncomeCategoryEnum incomeCategoryEnum = IncomeCategoryEnum.parseByValue(taxDeclaration.getIncomeCategory());
if (employeeDeclare == null || incomeCategoryEnum == null) {
continue;
}
List<TaxReportColumnPO> taxReportColumnList = taxReportColumnMap.get(Util.null2String(incomeCategoryEnum.getValue()));
Map<String, Object> employeeRequestParam = convert2RequestParam(incomeCategoryEnum, taxReportColumnList, taxDeclarationValue, employeeDeclare);
if (incomeCategoryEnum == IncomeCategoryEnum.CLASSIFIED_INCOME_LISTED_COMPANY_DIVIDENDS_BONUSES) {
// 上市公司股息红利所得(沪市、深市、创业板)
List<Map<String, Object>> employeeRequestParams = listRequestParam.computeIfAbsent("ssgsgxhllb", k -> Lists.newArrayList());
employeeRequestParams.add(employeeRequestParam);
}
if (incomeCategoryEnum == IncomeCategoryEnum.CLASSIFIED_INCOME_OTHER_INTEREST_DIVIDENDS_BONUSES) {
// 其他利息股息红利所得
List<Map<String, Object>> employeeRequestParams = listRequestParam.computeIfAbsent("lxgxhllb", k -> Lists.newArrayList());
employeeRequestParams.add(employeeRequestParam);
}
}
}
Map<String, Object> requestParam = Maps.newHashMap();
requestParam.putAll(objRequestParam);
requestParam.putAll(listRequestParam);
return requestParam;
}
public static Map<String, Object> convert2fjmsdRequestParam(List<TaxReportColumnPO> taxReportColumns,
List<TaxDeclarationPO> taxDeclarations,
List<TaxDeclarationValuePO> taxDeclarationValues,
List<EmployeeDeclarePO> employeeDeclares) {
Map<String, Map<String, Object>> objRequestParam = Maps.newHashMap();
Map<String, List<Map<String, Object>>> listRequestParam = Maps.newHashMap();
Map<String, List<TaxReportColumnPO>> taxReportColumnMap = SalaryEntityUtil.group2Map(taxReportColumns, TaxReportColumnPO::getIncomeCategory);
Map<Long, EmployeeDeclarePO> employeeDeclareMap = SalaryEntityUtil.convert2Map(employeeDeclares, EmployeeDeclarePO::getEmployeeId);
Map<Long, List<TaxDeclarationValuePO>> taxDeclarationValueMap = SalaryEntityUtil.group2Map(taxDeclarationValues, TaxDeclarationValuePO::getTaxDeclarationId);
for (TaxDeclarationPO taxDeclaration : taxDeclarations) {
List<TaxDeclarationValuePO> values = taxDeclarationValueMap.get(taxDeclaration.getId());
for (TaxDeclarationValuePO taxDeclarationValue : values) {
EmployeeDeclarePO employeeDeclare = employeeDeclareMap.get(taxDeclarationValue.getEmployeeId());
IncomeCategoryEnum incomeCategoryEnum = IncomeCategoryEnum.parseByValue(taxDeclaration.getIncomeCategory());
if (employeeDeclare == null || incomeCategoryEnum == null) {
continue;
}
List<TaxReportColumnPO> taxReportColumnList = taxReportColumnMap.get(Util.null2String(incomeCategoryEnum.getValue()));
Map<String, Object> employeeRequestParam = convert2RequestParam(incomeCategoryEnum, taxReportColumnList, taxDeclarationValue, employeeDeclare);
if (incomeCategoryEnum == IncomeCategoryEnum.NON_RESIDENT_INCOME_WAGES_AND_SALARIES) {
// 无住所个人正常工资薪金
List<Map<String, Object>> employeeRequestParams = listRequestParam.computeIfAbsent("wjgzxjlb", k -> Lists.newArrayList());
employeeRequestParams.add(employeeRequestParam);
} else if (incomeCategoryEnum == IncomeCategoryEnum.NON_RESIDENT_INCOME_MONTHLY_BONUS) {
// 全年一次性奖金收入
List<Map<String, Object>> employeeRequestParams = listRequestParam.computeIfAbsent("wjrysyjjlb", k -> Lists.newArrayList());
employeeRequestParams.add(employeeRequestParam);
} else if (incomeCategoryEnum == IncomeCategoryEnum.NON_RESIDENT_INCOME_REMUNERATION_FOR_LABOR) {
// 内退一次性补偿金
List<Map<String, Object>> employeeRequestParams = listRequestParam.computeIfAbsent("lwbclb", k -> Lists.newArrayList());
employeeRequestParams.add(employeeRequestParam);
} else if (incomeCategoryEnum == IncomeCategoryEnum.NON_RESIDENT_INCOME_COMPENSATION_FOR_DISMISS) {
// 解除劳动合同一次性补偿金
List<Map<String, Object>> employeeRequestParams = listRequestParam.computeIfAbsent("jcldhtycxbcjlb", k -> Lists.newArrayList());
employeeRequestParams.add(employeeRequestParam);
}
}
}
Map<String, Object> requestParam = Maps.newHashMap();
requestParam.putAll(objRequestParam);
requestParam.putAll(listRequestParam);
return requestParam;
}
}