408 lines
28 KiB
Java
408 lines
28 KiB
Java
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;
|
||
}
|
||
}
|