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