weaver-hrm-salary/src/com/engine/salary/entity/salaryacct/bo/SalaryCalcTaxRequest.java

259 lines
10 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.salaryacct.bo;
import com.engine.salary.entity.employeedeclare.bo.EmployeeDeclareRequest;
import com.engine.salary.entity.employeedeclare.po.EmployeeDeclarePO;
import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO;
import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO;
import com.engine.salary.entity.salarysob.po.SalarySobTaxReportRulePO;
import com.engine.salary.entity.taxdeclaration.po.TaxReportColumnPO;
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.SalaryEntityUtil;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.wbi.util.Util;
import lombok.AllArgsConstructor;
import lombok.Data;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.StringUtils;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
@Data
@AllArgsConstructor
public class SalaryCalcTaxRequest {
private Map<Long, SalaryAcctEmployeePO> salaryAcctEmployeeMap;
private Map<Long, List<SalaryAcctResultPO>> salaryAcctResultValueMap;
private List<TaxReportColumnPO> taxReportColumns;
private Map<String, SalarySobTaxReportRulePO> salarySobTaxReportRuleMap;
private List<EmployeeDeclarePO> employeeDeclares;
/**
* 正常工资薪金
*
* @return
*/
public Map<String, Object> buildZCGZXJRequestParam() {
// 人员列表
List<Map<String, Object>> RYLBRequestParam = EmployeeDeclareRequest.convert2RequestParam(employeeDeclares);
// 正常工资薪金列表
List<Map<String, Object>> ZCGZXJLBRequestParams = buildRequestParams(IncomeCategoryEnum.WAGES_AND_SALARIES,
employeeDeclares, salaryAcctEmployeeMap, salaryAcctResultValueMap);
Map<String, Object> param = new HashMap<>();
// 人员列表
param.put("rylb", RYLBRequestParam);
// 正常工资薪金列表
param.put("zcgzxjlb", ZCGZXJLBRequestParams);
// 正常工资薪金是否需要专项
param.put("zcgzxjsfxyzx", 1);
// 正常工资薪金是否传入专项累计
param.put("zcgzxjsfcrlj", 0);
// 是否传入累计个人养老金2使用传入数据
param.put("gryljcl", 2);
return param;
}
/**
* 全年一次性奖金收入
*
* @return
*/
public List<Map<String, Object>> buildQNYCXJJSSLBRequestParam() {
return buildRequestParams(IncomeCategoryEnum.ONETIME_ANNUAL_BONUS,
employeeDeclares, salaryAcctEmployeeMap, salaryAcctResultValueMap);
}
/**
* 稿酬所得
*
* @return
*/
public List<Map<String, Object>> buildGCSDLBRequestParam() {
return buildRequestParams(IncomeCategoryEnum.REMUNERATION_FOR_AUTHOR,
employeeDeclares, salaryAcctEmployeeMap, salaryAcctResultValueMap);
}
/**
* 一般劳务报酬所得
*
* @return
*/
public List<Map<String, Object>> buildLWBCLBRequestParam() {
return buildRequestParams(IncomeCategoryEnum.REMUNERATION_FOR_LABOR,
employeeDeclares, salaryAcctEmployeeMap, salaryAcctResultValueMap);
}
/**
* 解除劳动合同一次性补偿金
*
* @return
*/
public List<Map<String, Object>> buildJCLDHTYCXBCJLBRequestParam() {
return buildRequestParams(IncomeCategoryEnum.COMPENSATION_FOR_DISMISS,
employeeDeclares, salaryAcctEmployeeMap, salaryAcctResultValueMap);
}
/**
* 保险营销员佣金收入
*
* @return
*/
public Map<String, Object> buildBXYXYRequestParam() {
List<Map<String, Object>> requestParams = buildRequestParams(IncomeCategoryEnum.INCOME_FOR_INSURANCE_SALESMAN,
employeeDeclares, salaryAcctEmployeeMap, salaryAcctResultValueMap);
Map<String, Object> param = new HashMap<>();
// 保险营销员薪金列表
param.put("bxyxylwbclb", requestParams);
// 是否传入累计个人养老金2使用传入数据
param.put("gryljcl", 2);
return param;
}
/**
* 证券经纪人佣金收入
*
* @return
*/
public Map<String, Object> buildZQJJRRequestParam() {
List<Map<String, Object>> requestParams = buildRequestParams(IncomeCategoryEnum.INCOME_FOR_SECURITIES_BROKER,
employeeDeclares, salaryAcctEmployeeMap, salaryAcctResultValueMap);
Map<String, Object> param = new HashMap<>();
// 证券经纪人薪金列表
param.put("zqjjrsdlb", requestParams);
// 是否传入累计个人养老金2使用传入数据
param.put("gryljcl", 2);
return param;
}
/**
* 其他连续劳务报酬所得
*
* @return
*/
public Map<String, Object> buildQTLXLWBCRequestParam() {
List<Map<String, Object>> requestParams = buildRequestParams(IncomeCategoryEnum.REMUNERATION_FOR_OTHER_CONTINUOUS_LABOR,
employeeDeclares, salaryAcctEmployeeMap, salaryAcctResultValueMap);
Map<String, Object> param = new HashMap<>();
param.put("qtlxlwbclb", Lists.newArrayList());
// 是否传入累计个人养老金2使用传入数据
param.put("gryljcl", 2);
return param;
}
/**
* 特许权使用费所得
*
* @return
*/
public List<Map<String, Object>> buildTXQRequestParam() {
return buildRequestParams(IncomeCategoryEnum.ROYALTIES,
employeeDeclares, salaryAcctEmployeeMap, salaryAcctResultValueMap);
}
/**
* 个人股权激励收入
*
* @return
*/
public List<Map<String, Object>> buildGRGQJLRequestParam() {
return buildRequestParams(IncomeCategoryEnum.INCOME_FOR_INDIVIDUAL_EQUITY_INCENTIVE,
employeeDeclares, salaryAcctEmployeeMap, salaryAcctResultValueMap);
}
/**
* 年金领取
*
* @return
*/
public List<Map<String, Object>> buildQYNJRequestParam() {
return buildRequestParams(IncomeCategoryEnum.ANNUITY_RECEIPT,
employeeDeclares, salaryAcctEmployeeMap, salaryAcctResultValueMap);
}
/**
* 内退一次性补偿金
*
* @return
*/
public List<Map<String, Object>> buildNTYCXBCJLBRequestParam() {
return buildRequestParams(IncomeCategoryEnum.COMPENSATION_FOR_RETIRE,
employeeDeclares, salaryAcctEmployeeMap, salaryAcctResultValueMap);
}
/**
* 其他非连续劳务报酬所得
*
* @return
*/
public List<Map<String, Object>> buildQTFLXLWBCRequestParam() {
return buildRequestParams(IncomeCategoryEnum.REMUNERATION_FOR_OTHER_LABOR,
employeeDeclares, salaryAcctEmployeeMap, salaryAcctResultValueMap);
}
public List<Map<String, Object>> buildRequestParams(IncomeCategoryEnum incomeCategoryEnum,
List<EmployeeDeclarePO> employeeDeclares,
Map<Long, SalaryAcctEmployeePO> salaryAcctEmployeeMap,
Map<Long, List<SalaryAcctResultPO>> salaryAcctResultValueMap) {
List<Map<String, Object>> requestParams = Lists.newArrayListWithExpectedSize(salaryAcctResultValueMap.size());
for (EmployeeDeclarePO employeeDeclare : employeeDeclares) {
SalaryAcctEmployeePO salaryAcctEmployee = salaryAcctEmployeeMap.get(employeeDeclare.getEmployeeId());
if (salaryAcctEmployee == null) {
continue;
}
List<SalaryAcctResultPO> salaryAcctResultValue = salaryAcctResultValueMap.get(salaryAcctEmployee.getId());
if (salaryAcctResultValue == null) {
continue;
}
Map<Long, String> map = SalaryEntityUtil.convert2Map(salaryAcctResultValue, SalaryAcctResultPO::getSalaryItemId, SalaryAcctResultPO::getResultValue);
Map<String, Object> requestParam = buildRequestParam(incomeCategoryEnum, employeeDeclare, map);
if (MapUtils.isNotEmpty(requestParam)) {
requestParams.add(requestParam);
}
}
return requestParams;
}
private Map<String, Object> buildRequestParam(IncomeCategoryEnum incomeCategoryEnum,
EmployeeDeclarePO employeeDeclare,
Map<Long, String> salaryAcctResultValue) {
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) {
Long dataKey = null;
SalarySobTaxReportRulePO salarySobTaxReportRule = salarySobTaxReportRuleMap.get(taxReportColumn.getReportColumnDataIndex());
if (salarySobTaxReportRule != null && salarySobTaxReportRule.getSalaryItemId() != null) {
dataKey = salarySobTaxReportRule.getSalaryItemId();
}
String value = salaryAcctResultValue.getOrDefault(dataKey, StringUtils.EMPTY);
if (Objects.equals(taxReportColumn.getDataType(), SalaryDataTypeEnum.NUMBER.getValue())) {
value = Util.getBigDecimalValue(value, BigDecimal.ZERO).toPlainString();
} else if (Objects.equals(taxReportColumn.getDataType(), "integer")) {
value = Util.getBigDecimalValue(value, BigDecimal.ZERO).setScale(0, RoundingMode.HALF_UP).toPlainString();
}
requestParam.put(taxReportColumn.getRequestParamKey(), value);
}
return requestParam;
}
}