liusheng
2023-06-06 160ed62b3eca5e6b57efd945c95fb5a719bea785
根据税后求税前金额
已添加1个文件
已修改5个文件
167 ■■■■■ 文件已修改
ruoyi-admin/src/main/java/com/ruoyi/web/controller/project/ServiceFunddetailController.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/tax/TaxtUtils.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/domain/vo/TaxedMoneyVO.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/mapper/ServiceFundMapper.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/service/IServiceFunddetailService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceFunddetailServiceImpl.java 66 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/project/ServiceFunddetailController.java
@@ -145,5 +145,15 @@
        return AjaxResult.success(serviceFunddetailService.getTaxBeforeByBeneFiciaryNo(taxMoneyVo));
    }
    /**
     * æ ¹æ®ç¨ŽåŽé‡‘额获取税前金额
     *
     * @param money ç¨ŽåŽå·¥èµ„
     * @return
     */
    @ApiOperation("根据税后工资获取税前金额")
    @PostMapping("/getTaxBeforeByAfterMoney")
    public AjaxResult getTaxBeforeByAfterMoney(@RequestBody TaxMoneyVO taxMoneyVo) {
        return AjaxResult.success(serviceFunddetailService.getTaxBeforeByAfterMoney(taxMoneyVo));
    }
}
ruoyi-common/src/main/java/com/ruoyi/common/tax/TaxtUtils.java
@@ -41,7 +41,7 @@
        // å½“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.8));
            taxMoney = multiply.multiply(new BigDecimal(0.2));
        }
        //(2)当20000<X*(1-20%)<=50000时,个税T=X*(1-20%)*30%-2000
@@ -58,9 +58,47 @@
        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(70000));
        System.out.println(taxation);
        String taxation = getTaxation(new BigDecimal(21000));
        String taxationBefore = getTaxationBefore(new BigDecimal(52000));
        System.out.println(taxation + "        " + taxationBefore);
    }
}
ruoyi-project/src/main/java/com/ruoyi/project/domain/vo/TaxedMoneyVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
package com.ruoyi.project.domain.vo;
import com.ruoyi.common.core.domain.BaseEntity;
import lombok.Data;
@Data
public class TaxedMoneyVO {
    /**
     * ç¨Žå‰é‡‘额
     */
    private String allTaxbeforeMoney;
    /**
     * ä¸ªç¨Ž
     */
    private String allTax;
    /**
     * ç¨ŽåŽé‡‘额
     */
    private String allAaxAfterMoney;
    /**
     * æœ¬æ¬¡ç¨Žè´¹
     */
    private String nowTaxBeforeMoney;
    /**
     * æœ¬æ¬¡ç¨Žè´¹
     */
    private String nowTax;
}
ruoyi-project/src/main/java/com/ruoyi/project/mapper/ServiceFundMapper.java
@@ -2,11 +2,14 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
import com.ruoyi.project.domain.ServiceFund;
import com.ruoyi.project.domain.vo.FundVO;
import com.ruoyi.project.domain.vo.SpFinancialExpensesFundOut;
import com.ruoyi.project.domain.vo.SpFinancialExpensesReimbursementOut;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
@@ -15,8 +18,8 @@
 * @author ruoyi
 * @date 2022-01-24
 */
public interface ServiceFundMapper extends BaseMapper<ServiceFund>
{
@Mapper
public interface ServiceFundMapper extends BaseMapper<ServiceFund> {
    /**
     * æŸ¥è¯¢è´¹ç”¨ç”³è¯·ä¸»åˆ—表
     *
ruoyi-project/src/main/java/com/ruoyi/project/service/IServiceFunddetailService.java
@@ -7,6 +7,7 @@
import com.ruoyi.project.domain.FunddetailReqVo;
import com.ruoyi.project.domain.ServiceFunddetail;
import com.ruoyi.project.domain.vo.TaxMoneyVO;
import com.ruoyi.project.domain.vo.TaxedMoneyVO;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
@@ -39,6 +40,8 @@
     */
    Double getTaxBeforeByBeneFiciaryNo(TaxMoneyVO taxMoneyVo);
    TaxedMoneyVO getTaxBeforeByAfterMoney(TaxMoneyVO taxMoneyVo);
    List<ServiceFunddetail> getAllDetailsByFDIDLW(Long id);
    List<ServiceFunddetail> getAllDetailsByFDIDSH(Long id);
ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceFunddetailServiceImpl.java
@@ -9,6 +9,7 @@
import com.ruoyi.common.tax.TaxtUtils;
import com.ruoyi.project.domain.*;
import com.ruoyi.project.domain.vo.TaxMoneyVO;
import com.ruoyi.project.domain.vo.TaxedMoneyVO;
import com.ruoyi.project.mapper.ServiceFundMapper;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -93,24 +94,71 @@
        return dataBybeneficiaryNo;
    }
    /**
     * æ ¹æ®å—益人编号获取税费金额
     *
     * @param taxMoneyVo
     * @return
     */
    @Override
    public Double getTaxBeforeByBeneFiciaryNo(TaxMoneyVO taxMoneyVo) {
        Double sum = 0.00;
        Double totalScore = 0.00;
        List<ServiceFunddetail> taxationByBeneFiciaryNo = serviceFunddetailMapper.getTaxBeforeByBeneFiciaryNo(taxMoneyVo);
        if (CollectionUtils.isEmpty(taxationByBeneFiciaryNo) && taxMoneyVo.getMoney() == 0) {
            //都为0了,就没有必要再计算了
            return 0.00;
        }
        double sum = taxationByBeneFiciaryNo.stream().mapToDouble(ServiceFunddetail::getAmount).sum();
        sum = sum + new Double(taxMoneyVo.getMoney());
        //加上本次薪酬的个税
        String taxation = TaxtUtils.getTaxation(new BigDecimal(sum));
        if (CollectionUtils.isNotEmpty(taxationByBeneFiciaryNo)) {
            //计算申请金额总和,不包括当前传进来的
            sum = taxationByBeneFiciaryNo.stream().mapToDouble(ServiceFunddetail::getAmount).sum();
        //不加本次薪酬的个税
        Double totalScore = taxationByBeneFiciaryNo.stream().mapToDouble(ServiceFunddetail::getTaxamount).sum();
            totalScore = taxationByBeneFiciaryNo.stream().mapToDouble(ServiceFunddetail::getTaxamount).sum();
        }
        sum = sum + new Double(taxMoneyVo.getMoney());
        //加上本次薪酬的总个税
        String taxation = TaxtUtils.getTaxation(new BigDecimal(sum));
        Double tax = Double.valueOf(taxation) - totalScore;
        return tax;
    }
    /**
     * æ ¹æ®ç¨ŽåŽå·¥èµ„,算出税前工资
     *
     * @param money
     * @return
     */
    @Override
    public TaxedMoneyVO getTaxBeforeByAfterMoney(TaxMoneyVO taxMoneyVo) {
        TaxedMoneyVO taxedMoneyVO = new TaxedMoneyVO();
        Double sum = 0.00;
        Double totalScore = 0.00;
        List<ServiceFunddetail> taxationByBeneFiciaryNo = serviceFunddetailMapper.getTaxBeforeByBeneFiciaryNo(taxMoneyVo);
        if (CollectionUtils.isNotEmpty(taxationByBeneFiciaryNo)) {
            //计算出税后总金额(不包含本次)
            sum = taxationByBeneFiciaryNo.stream().mapToDouble(ServiceFunddetail::getTaxedamount).sum();
            //求出之前的总的个税
            totalScore = taxationByBeneFiciaryNo.stream().mapToDouble(ServiceFunddetail::getTaxamount).sum();
        }
        //计算出总的税后薪酬(包含本次)
        sum = sum + taxMoneyVo.getMoney();
        //税前总金额
        String taxationBefore = TaxtUtils.getTaxationBefore(new BigDecimal(sum));
        //总个税
        BigDecimal tax = new BigDecimal(taxationBefore).subtract(new BigDecimal(sum));
        //本次的税前金额
        String nowTaxMoney = TaxtUtils.getTaxationBefore(new BigDecimal(taxMoneyVo.getMoney()));
        //本次的税费
        BigDecimal subtract = new BigDecimal(nowTaxMoney).subtract(new BigDecimal(taxMoneyVo.getMoney()));
        taxedMoneyVO.setAllTax(tax.toString());
        taxedMoneyVO.setAllTaxbeforeMoney(taxationBefore);
        taxedMoneyVO.setAllAaxAfterMoney(sum.toString());
        taxedMoneyVO.setNowTaxBeforeMoney(nowTaxMoney);
        taxedMoneyVO.setNowTax(subtract.toString());
        return taxedMoneyVO;
    }
    @Override
    public List<ServiceFunddetail> getAllDetailsByFDIDLW(Long id) {