liusheng
2023-06-05 85f9ba60b55be46520f6646ff0d092409a411f61
(个税)税前代码提交
已添加2个文件
已修改5个文件
167 ■■■■■ 文件已修改
ruoyi-admin/src/main/java/com/ruoyi/web/controller/project/ServiceFunddetailController.java 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/tax/TaxtUtils.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/domain/vo/TaxMoneyVO.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/mapper/ServiceFunddetailMapper.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/service/IServiceFunddetailService.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceFunddetailServiceImpl.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/resources/mapper/project/ServiceFunddetailMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/project/ServiceFunddetailController.java
@@ -3,16 +3,8 @@
import java.io.*;
import java.util.*;
import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.constant.HttpStatus;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.project.domain.FunddetailReqVo;
import com.ruoyi.project.domain.ServiceFund;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import io.lettuce.core.dynamic.annotation.Param;
import com.ruoyi.project.domain.vo.TaxMoneyVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.security.access.prepost.PreAuthorize;
@@ -137,12 +129,21 @@
    @ApiOperation("根据受益人编号获取费用申请明细信息")
    @PostMapping("/getDataBybeneficiaryNo")
    public AjaxResult getDataBybeneficiaryNo(@RequestBody FunddetailReqVo funddetailReqVo) {
//        if (StringUtils.isEmpty(funddetailReqVo.getBeneficiaryNo())) {
//            return AjaxResult.error("受益人编号不能为空");
//        }
        List<ServiceFunddetail> dataBybeneficiaryNo = serviceFunddetailService.getDataBybeneficiaryNo(funddetailReqVo);
        return AjaxResult.success(dataBybeneficiaryNo);
    }
    /**
     * æ ¹æ®å—益人编号获取税费金额
     *
     * @param taxMoneyVo å—益人编号
     * @return
     */
    @ApiOperation("根据受益人编号获取税费金额")
    @PostMapping("/getTaxBeforeByBeneFiciaryNo")
    public AjaxResult getTaxBeforeByBeneFiciaryNo(@RequestBody TaxMoneyVO taxMoneyVo) {
        return AjaxResult.success(serviceFunddetailService.getTaxBeforeByBeneFiciaryNo(taxMoneyVo));
    }
}
ruoyi-common/src/main/java/com/ruoyi/common/tax/TaxtUtils.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,66 @@
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.8));
        }
        //(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;
    }
    public static void main(String[] args) {
        String taxation = getTaxation(new BigDecimal(70000));
        System.out.println(taxation);
    }
}
ruoyi-project/src/main/java/com/ruoyi/project/domain/vo/TaxMoneyVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
package com.ruoyi.project.domain.vo;
import com.ruoyi.common.core.domain.BaseEntity;
import lombok.Data;
@Data
public class TaxMoneyVO extends BaseEntity {
    /**
     * å—益人编号
     */
    private String beneficiaryNo;
    /**
     * å·¥èµ„
     */
    private Double money;
    /**
     * è´¹ç”¨åˆ›å»ºæ—¶é—´
     */
    private String startTime;
}
ruoyi-project/src/main/java/com/ruoyi/project/mapper/ServiceFunddetailMapper.java
@@ -2,10 +2,13 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
import com.ruoyi.project.domain.FunddetailReqVo;
import com.ruoyi.project.domain.ServiceFunddetail;
import com.ruoyi.project.domain.vo.TaxMoneyVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
@@ -14,8 +17,8 @@
 * @author ruoyi
 * @date 2022-01-25
 */
public interface ServiceFunddetailMapper extends BaseMapper<ServiceFunddetail>
{
@Mapper
public interface ServiceFunddetailMapper extends BaseMapper<ServiceFunddetail> {
    /**
     * æŸ¥è¯¢è´¹ç”¨ç”³è¯·æ˜Žç»†åˆ—表
     *
@@ -41,4 +44,6 @@
    int countItem(@Param("fundid") Long fundid, @Param("itemid") Long itemid);
    public List<ServiceFunddetail> getDataBybeneficiaryNo(FunddetailReqVo funddetailReqVo);
    List<ServiceFunddetail> getTaxBeforeByBeneFiciaryNo(TaxMoneyVO taxMoneyV);
}
ruoyi-project/src/main/java/com/ruoyi/project/service/IServiceFunddetailService.java
@@ -1,10 +1,13 @@
package com.ruoyi.project.service;
import java.util.List;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.project.domain.FunddetailReqVo;
import com.ruoyi.project.domain.ServiceFunddetail;
import com.ruoyi.project.domain.vo.TaxMoneyVO;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
/**
@@ -13,8 +16,7 @@
 * @author ruoyi
 * @date 2022-01-25
 */
public interface IServiceFunddetailService extends IService<ServiceFunddetail>
{
public interface IServiceFunddetailService extends IService<ServiceFunddetail> {
    /**
     * æŸ¥è¯¢è´¹ç”¨ç”³è¯·æ˜Žç»†åˆ—表
@@ -29,6 +31,14 @@
     */
    List<ServiceFunddetail> getDataBybeneficiaryNo(FunddetailReqVo funddetailReqVo);
    /**
     * æ ¹æ®å—益人编号获取税费金额
     *
     * @param taxMoneyVo
     * @return
     */
    Double getTaxBeforeByBeneFiciaryNo(TaxMoneyVO taxMoneyVo);
    List<ServiceFunddetail> getAllDetailsByFDIDLW(Long id);
    List<ServiceFunddetail> getAllDetailsByFDIDSH(Long id);
ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceFunddetailServiceImpl.java
@@ -1,11 +1,16 @@
package com.ruoyi.project.service.impl;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;
import java.util.Date;
import java.util.List;
import com.ruoyi.common.tax.TaxtUtils;
import com.ruoyi.project.domain.*;
import com.ruoyi.project.domain.vo.TaxMoneyVO;
import com.ruoyi.project.mapper.ServiceFundMapper;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -89,6 +94,25 @@
    }
    @Override
    public Double getTaxBeforeByBeneFiciaryNo(TaxMoneyVO taxMoneyVo) {
        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));
        //不加本次薪酬的个税
        Double totalScore = taxationByBeneFiciaryNo.stream().mapToDouble(ServiceFunddetail::getTaxamount).sum();
        Double tax = Double.valueOf(taxation) - totalScore;
        return tax;
    }
    @Override
    public List<ServiceFunddetail> getAllDetailsByFDIDLW(Long id) {
        return serviceFunddetailMapper.getAllDetailsByFDIDLW(id);
    }
ruoyi-project/src/main/resources/mapper/project/ServiceFunddetailMapper.xml
@@ -229,5 +229,10 @@
    </select>
    <select id="getTaxBeforeByBeneFiciaryNo" parameterType="com.ruoyi.project.domain.vo.TaxMoneyVO"
            resultMap="ServiceFunddetailResult">
        <include refid="selectServiceFunddetailVo"/>
        where create_time like concat(#{startTime}, '%') and beneficiaryNo=#{beneficiaryNo}
    </select>
</mapper>