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,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); } 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); 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>