package com.ruoyi.common.tax; 
 | 
  
 | 
import java.math.BigDecimal; 
 | 
import java.text.DecimalFormat; 
 | 
  
 | 
/** 
 | 
 * 绩效个税计算规则 
 | 
 * 
 | 
 * @author ls 
 | 
 */ 
 | 
public class PerformanceTaxtUtils { 
 | 
    /** 
 | 
     * 分隔符 
 | 
     */ 
 | 
    public static final String SEPARATOR = ","; 
 | 
  
 | 
    /** 
 | 
     * 获取个税 
 | 
     * 
 | 
     * @param wages 工资 (扣掉5000元免税 和 扣掉社保的金额) 
 | 
     */ 
 | 
    public static BigDecimal getPersonTaxation(BigDecimal wages) { 
 | 
        BigDecimal firstTax = new BigDecimal(0.0); 
 | 
        BigDecimal secondTax = new BigDecimal(0.0); 
 | 
        BigDecimal thirdTax = new BigDecimal(0.0); 
 | 
        BigDecimal fourthTax = new BigDecimal(0.0); 
 | 
        BigDecimal fifthTax = new BigDecimal(0.0); 
 | 
        BigDecimal sixthTax = new BigDecimal(0.0); 
 | 
        BigDecimal seventhTax = new BigDecimal(0.0); 
 | 
  
 | 
  
 | 
        //当X<=36000时的税 
 | 
        if (wages.doubleValue() <= 36000) { 
 | 
            firstTax = wages.multiply(BigDecimal.valueOf(0.03)); 
 | 
        } else if (wages.doubleValue() > 36000) { 
 | 
            firstTax = BigDecimal.valueOf(36000).multiply(BigDecimal.valueOf(0.03)); 
 | 
        } 
 | 
  
 | 
        // 计算36000到144000之间的税 
 | 
        if (wages.doubleValue() > 36000 && wages.doubleValue() <= 144000) { 
 | 
            //如果工资小于144000,就直接进行计算,先减去36000的部分,再算税 
 | 
            BigDecimal subtract = wages.subtract(BigDecimal.valueOf(36000)); 
 | 
            secondTax = subtract.multiply(BigDecimal.valueOf(0.1)); 
 | 
        } else if (wages.doubleValue() > 144000) { 
 | 
            //如果工资大于144000,就直接用144000进行计算,先减去36000的部分,再算税 
 | 
            BigDecimal subtract1 = BigDecimal.valueOf(144000).subtract(BigDecimal.valueOf(36000)); 
 | 
            secondTax = subtract1.multiply(BigDecimal.valueOf(0.1)); 
 | 
        } 
 | 
  
 | 
        // 计算300000到144000之间的税 
 | 
        if (wages.doubleValue() > 144000 && wages.doubleValue() <= 300000) { 
 | 
            //如果工资小于300000,就直接进行计算,先减去144000的部分,再算税 
 | 
            BigDecimal subtract = wages.subtract(new BigDecimal(144000)); 
 | 
            thirdTax = subtract.multiply(BigDecimal.valueOf(0.2)); 
 | 
        } else if (wages.doubleValue() > 300000) { 
 | 
            //如果工资大于300000,就直接用300000进行计算,先减去144000的部分,再算税 
 | 
            BigDecimal subtract1 = BigDecimal.valueOf(300000).subtract(BigDecimal.valueOf(144000)); 
 | 
            thirdTax = subtract1.multiply(BigDecimal.valueOf(0.2)); 
 | 
        } 
 | 
  
 | 
        // 计算300000到420000之间的税 
 | 
        if (wages.doubleValue() > 300000 && wages.doubleValue() <= 420000) { 
 | 
            //如果工资小于420000,就直接进行计算,先减去300000的部分,再算税 
 | 
            BigDecimal subtract = wages.subtract(BigDecimal.valueOf(300000)); 
 | 
            fourthTax = subtract.multiply(BigDecimal.valueOf(0.25)); 
 | 
        } else if (wages.doubleValue() > 420000) { 
 | 
            //如果工资大于420000,就直接用420000进行计算,先减去300000的部分,再算税 
 | 
            BigDecimal subtract1 = BigDecimal.valueOf(420000).subtract(BigDecimal.valueOf(300000)); 
 | 
            fourthTax = subtract1.multiply(BigDecimal.valueOf(0.25)); 
 | 
        } 
 | 
  
 | 
        //计算660000到420000之间的税 
 | 
        if (wages.doubleValue() > 420000 && wages.doubleValue() <= 660000) { 
 | 
            //如果工资小于660000,就直接进行计算,先减去420000的部分,再算税 
 | 
            BigDecimal subtract = wages.subtract(BigDecimal.valueOf(420000)); 
 | 
            fifthTax = subtract.multiply(BigDecimal.valueOf(0.3)); 
 | 
        } else if (wages.doubleValue() > 660000) { 
 | 
            //如果工资大于660000,就直接用660000进行计算,先减去420000的部分,再算税 
 | 
            BigDecimal subtract1 = BigDecimal.valueOf(660000).subtract(BigDecimal.valueOf(420000)); 
 | 
            fifthTax = subtract1.multiply(BigDecimal.valueOf(0.3)); 
 | 
        } 
 | 
  
 | 
        // 计算660000到960000之间的税 
 | 
        if (wages.doubleValue() > 660000 && wages.doubleValue() <= 960000) { 
 | 
            //如果工资小于960000,就直接进行计算,先减去660000的部分,再算税 
 | 
            BigDecimal subtract = wages.subtract(BigDecimal.valueOf(660000)); 
 | 
            sixthTax = subtract.multiply(BigDecimal.valueOf(0.35)); 
 | 
        } else if (wages.doubleValue() > 960000) { 
 | 
            //如果工资大于960000,就直接用960000进行计算,先减去660000的部分,再算税 
 | 
            BigDecimal subtract1 = BigDecimal.valueOf(960000).subtract(BigDecimal.valueOf(660000)); 
 | 
            sixthTax = subtract1.multiply(BigDecimal.valueOf(0.35)); 
 | 
        } 
 | 
  
 | 
        //960000以上的税 
 | 
        if (wages.doubleValue() > 960000) { 
 | 
            //如果工资大于960000,就直接进行计算,先减去660000的部分,再算税 
 | 
            BigDecimal subtract = wages.subtract(BigDecimal.valueOf(960000)); 
 | 
            seventhTax = subtract.multiply(BigDecimal.valueOf(0.45)); 
 | 
        } 
 | 
  
 | 
        //将计算的税相加 
 | 
        BigDecimal result = firstTax.add(secondTax).add(thirdTax).add(fourthTax).add(fifthTax).add(sixthTax).add(seventhTax); 
 | 
  
 | 
        return result; 
 | 
    } 
 | 
  
 | 
  
 | 
    public static void main(String[] args) { 
 | 
        BigDecimal personTaxation = getPersonTaxation(new BigDecimal(7654321)); 
 | 
//        String taxationBefore = getTaxationBefore(new BigDecimal(52000)); 
 | 
  
 | 
  
 | 
        System.out.println(personTaxation); 
 | 
    } 
 | 
  
 | 
} 
 |