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.*;
/**
* 个税申报
*
Copyright: Copyright (c) 2023
* Company: 泛微软件
*
* @author qiantao
* @version 1.0
**/
public class TaxDeclarationRequest {
public static Map convert2RequestParam(List taxReportColumns,
List taxDeclarations,
List taxDeclarationValues,
List employeeDeclares,
Map> taxFreeMap) {
Map> objRequestParam = Maps.newHashMap();
Map>> listRequestParam = Maps.newHashMap();
Map> taxReportColumnMap = SalaryEntityUtil.group2Map(taxReportColumns, TaxReportColumnPO::getIncomeCategory);
Map employeeDeclareMap = SalaryEntityUtil.convert2Map(employeeDeclares, EmployeeDeclarePO::getEmployeeId);
Map> taxDeclarationValueMap = SalaryEntityUtil.group2Map(taxDeclarationValues, TaxDeclarationValuePO::getTaxDeclarationId);
for (TaxDeclarationPO taxDeclaration : taxDeclarations) {
List 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 taxReportColumnList = taxReportColumnMap.get(Util.null2String(incomeCategoryEnum.getValue()));
Map employeeRequestParam = convert2RequestParam(incomeCategoryEnum, taxReportColumnList, taxDeclarationValue, employeeDeclare);
if (incomeCategoryEnum == IncomeCategoryEnum.WAGES_AND_SALARIES) {
Map paramMap = objRequestParam.computeIfAbsent("zcgzxj", k -> {
Map param = new HashMap<>();
// 正常工资薪金列表
param.put("zcgzxjlb", Lists.newArrayList());
// 正常工资薪金是否需要专项
param.put("zcgzxjsfxyzx", 0);
// 正常工资薪金是否传入专项累计
param.put("zcgzxjsfcrlj", 1);
return param;
});
List