package com.ruoyi.common.tax;
|
|
import com.ruoyi.common.constant.Constants;
|
import com.ruoyi.common.core.domain.entity.SysDictData;
|
import com.ruoyi.common.core.redis.RedisCache;
|
import com.ruoyi.common.utils.StringUtils;
|
import com.ruoyi.common.utils.spring.SpringUtils;
|
|
import java.math.BigDecimal;
|
import java.text.DecimalFormat;
|
import java.util.Collection;
|
import java.util.List;
|
|
/**
|
* 劳务报酬个税计算规则 (可能不答公共用法,用前先看看是否适合)
|
*
|
* @author ls
|
*/
|
public class TaxtUtils {
|
/**
|
* 分隔符
|
*/
|
public static final String SEPARATOR = ",";
|
|
/**
|
* 获取税金
|
*
|
* @param money 报酬 (税前)
|
*/
|
public static String getTaxation(BigDecimal money) {
|
//当X<=800时,个税T=0
|
BigDecimal taxMoney = new BigDecimal(0.0);
|
|
//当800<X<=4000时,个税T=(X-800)*20%
|
if (money.doubleValue() > 800 && money.doubleValue() <= 4000) {
|
BigDecimal subtract = money.subtract(new BigDecimal(800));
|
taxMoney = subtract.multiply(new BigDecimal(0.2));
|
}
|
|
BigDecimal multiply = money.multiply(new BigDecimal(0.8));
|
// 当X>4000时
|
//(1)当X*(1-20%)<=20000时,个税T=X*(1-20%)*20%
|
if (money.doubleValue() > 4000 && multiply.doubleValue() <= 20000) {
|
taxMoney = multiply.multiply(new BigDecimal(0.2));
|
}
|
|
//(2)当20000<X*(1-20%)<=50000时,个税T=X*(1-20%)*30%-2000
|
if (multiply.doubleValue() > 20000 && multiply.doubleValue() <= 50000) {
|
taxMoney = multiply.multiply(new BigDecimal(0.3)).subtract(new BigDecimal(2000));
|
}
|
|
//X*(1-20%)>50000时,个税T=X*(1-20%)*40%-7000
|
if (multiply.doubleValue() > 50000) {
|
taxMoney = multiply.multiply(new BigDecimal(0.4)).subtract(new BigDecimal(7000));
|
}
|
DecimalFormat decimalFormat = new DecimalFormat("#.00");
|
String format = decimalFormat.format(taxMoney);
|
return format;
|
}
|
|
/**
|
* 通过税后工资,算出税前工资
|
*
|
* @param money
|
* @return
|
*/
|
public static String getTaxationBefore(BigDecimal money) {
|
//当X<=800时,个税T=0
|
BigDecimal taxMoney = new BigDecimal(0.0);
|
|
if (money.doubleValue() > 800 && money.doubleValue() <= 3360) {
|
taxMoney = money.divide(new BigDecimal(0.2),2,BigDecimal.ROUND_DOWN).add(new BigDecimal(800));
|
}
|
|
if (money.doubleValue() > 3360 && money.doubleValue() <= 21000) {
|
taxMoney = money.divide(new BigDecimal(0.84),2,BigDecimal.ROUND_DOWN);
|
}
|
|
if (money.doubleValue() > 21000 && money.doubleValue() <= 40000) {
|
money = money.subtract(new BigDecimal(2000));
|
taxMoney = money.divide(new BigDecimal(0.76),2,BigDecimal.ROUND_DOWN);
|
}
|
|
if (money.doubleValue() > 40000) {
|
money = money.subtract(new BigDecimal(7000));
|
taxMoney = money.divide(new BigDecimal(0.68),2,BigDecimal.ROUND_DOWN);
|
}
|
|
|
DecimalFormat decimalFormat = new DecimalFormat("#.00");
|
String format = decimalFormat.format(taxMoney);
|
return format;
|
}
|
|
|
public static void main(String[] args) {
|
String taxation = getTaxation(new BigDecimal(21000));
|
String taxationBefore = getTaxationBefore(new BigDecimal(52000));
|
|
|
System.out.println(taxation + " " + taxationBefore);
|
}
|
|
}
|