From 85f9ba60b55be46520f6646ff0d092409a411f61 Mon Sep 17 00:00:00 2001
From: liusheng <337615773@qq.com>
Date: 星期一, 05 六月 2023 17:51:39 +0800
Subject: [PATCH] (个税)税前代码提交

---
 ruoyi-project/src/main/resources/mapper/project/ServiceFunddetailMapper.xml                  |    5 +
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/project/ServiceFunddetailController.java  |   25 ++++----
 ruoyi-common/src/main/java/com/ruoyi/common/tax/TaxtUtils.java                               |   66 ++++++++++++++++++++++
 ruoyi-project/src/main/java/com/ruoyi/project/mapper/ServiceFunddetailMapper.java            |   11 ++-
 ruoyi-project/src/main/java/com/ruoyi/project/domain/vo/TaxMoneyVO.java                      |   24 ++++++++
 ruoyi-project/src/main/java/com/ruoyi/project/service/IServiceFunddetailService.java         |   18 ++++-
 ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceFunddetailServiceImpl.java |   24 ++++++++
 7 files changed, 154 insertions(+), 19 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/project/ServiceFunddetailController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/project/ServiceFunddetailController.java
index 7c749f2..e75e0ff 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/project/ServiceFunddetailController.java
+++ b/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));
+    }
+
 
 }
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/tax/TaxtUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/tax/TaxtUtils.java
new file mode 100644
index 0000000..3a78e57
--- /dev/null
+++ b/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) {
+        //褰揦<=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));
+        // 褰揦>4000鏃�
+        //(1)褰揦*(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);
+    }
+
+}
diff --git a/ruoyi-project/src/main/java/com/ruoyi/project/domain/vo/TaxMoneyVO.java b/ruoyi-project/src/main/java/com/ruoyi/project/domain/vo/TaxMoneyVO.java
new file mode 100644
index 0000000..0debe77
--- /dev/null
+++ b/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;
+
+}
diff --git a/ruoyi-project/src/main/java/com/ruoyi/project/mapper/ServiceFunddetailMapper.java b/ruoyi-project/src/main/java/com/ruoyi/project/mapper/ServiceFunddetailMapper.java
index f7099c6..4ab866a 100644
--- a/ruoyi-project/src/main/java/com/ruoyi/project/mapper/ServiceFunddetailMapper.java
+++ b/ruoyi-project/src/main/java/com/ruoyi/project/mapper/ServiceFunddetailMapper.java
@@ -2,20 +2,23 @@
 
 
 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;
 
 /**
  * 璐圭敤鐢宠鏄庣粏Mapper鎺ュ彛
- * 
+ *
  * @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);
 }
diff --git a/ruoyi-project/src/main/java/com/ruoyi/project/service/IServiceFunddetailService.java b/ruoyi-project/src/main/java/com/ruoyi/project/service/IServiceFunddetailService.java
index 1d18a27..27ef39d 100644
--- a/ruoyi-project/src/main/java/com/ruoyi/project/service/IServiceFunddetailService.java
+++ b/ruoyi-project/src/main/java/com/ruoyi/project/service/IServiceFunddetailService.java
@@ -1,24 +1,26 @@
 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;
 
 /**
  * 璐圭敤鐢宠鏄庣粏Service鎺ュ彛
- * 
+ *
  * @author ruoyi
  * @date 2022-01-25
  */
-public interface IServiceFunddetailService extends IService<ServiceFunddetail>
-{
+public interface IServiceFunddetailService extends IService<ServiceFunddetail> {
 
     /**
      * 鏌ヨ璐圭敤鐢宠鏄庣粏鍒楄〃
-     * 
+     *
      * @param serviceFunddetail 璐圭敤鐢宠鏄庣粏
      * @return 璐圭敤鐢宠鏄庣粏闆嗗悎
      */
@@ -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);
diff --git a/ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceFunddetailServiceImpl.java b/ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceFunddetailServiceImpl.java
index 35637c2..32b0637 100644
--- a/ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceFunddetailServiceImpl.java
+++ b/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);
     }
diff --git a/ruoyi-project/src/main/resources/mapper/project/ServiceFunddetailMapper.xml b/ruoyi-project/src/main/resources/mapper/project/ServiceFunddetailMapper.xml
index 3090737..94e6adc 100644
--- a/ruoyi-project/src/main/resources/mapper/project/ServiceFunddetailMapper.xml
+++ b/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>
\ No newline at end of file

--
Gitblit v1.9.3