From 64bce2eb858b95e7851b6c05fa34938dbfb701e6 Mon Sep 17 00:00:00 2001
From: liusheng <337615773@qq.com>
Date: 星期四, 30 五月 2024 16:49:13 +0800
Subject: [PATCH] 修改因算税时间一税,导致获取历史数据不准的问题(加上xh字段) 个税汇总里的功能,删除时一个fund时,将相应的fund的“算税时间” 和"funddetail"表里的“算税时间”、“序号”置空

---
 ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceFunddetailServiceImpl.java |  343 +++++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 323 insertions(+), 20 deletions(-)

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 f7add24..a7038e2 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,17 +1,27 @@
 package com.ruoyi.project.service.impl;
 
 import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
 import java.time.LocalDate;
+import java.time.ZoneId;
 import java.time.temporal.TemporalAdjusters;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 
+import com.alibaba.fastjson.JSONArray;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.ruoyi.common.exception.base.BaseException;
+import com.ruoyi.common.tax.PerformanceTaxtUtils;
 import com.ruoyi.common.tax.TaxtUtils;
+import com.ruoyi.common.utils.bean.DtoConversionUtils;
 import com.ruoyi.project.domain.*;
-import com.ruoyi.project.domain.vo.TaxMoneyVO;
-import com.ruoyi.project.domain.vo.TaxedMoneyVO;
+import com.ruoyi.project.domain.vo.*;
 import com.ruoyi.project.mapper.ServiceFundMapper;
+import com.ruoyi.project.mapper.SpStatBonusMapper;
+import lombok.extern.flogger.Flogger;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -20,6 +30,7 @@
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.project.mapper.ServiceFunddetailMapper;
 import com.ruoyi.project.service.IServiceFunddetailService;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * 璐圭敤鐢宠鏄庣粏Service涓氬姟灞傚鐞�
@@ -27,14 +38,18 @@
  * @author ruoyi
  * @date 2022-01-25
  */
+@Slf4j
 @Service
 public class ServiceFunddetailServiceImpl extends ServiceImpl<ServiceFunddetailMapper, ServiceFunddetail> implements IServiceFunddetailService {
-
+    protected final Logger logger = LoggerFactory.getLogger(this.getClass());
     @Autowired
     ServiceFunddetailMapper serviceFunddetailMapper;
 
     @Autowired
     ServiceFundMapper serviceFundMapper;
+
+    @Autowired
+    SpStatBonusMapper spStatBonusMapper;
 
 
     /**
@@ -76,6 +91,24 @@
         if (serviceFunddetail.getUploadtime() != null) {
             wrappers.eq(ServiceFunddetail::getUploadtime, serviceFunddetail.getUploadtime());
         }
+        if (serviceFunddetail.getJxrq() != null) {
+            wrappers.like(ServiceFunddetail::getJxrq, serviceFunddetail.getJxrq());
+        }
+        if (StringUtils.isNotBlank(serviceFunddetail.getIdcardno())) {
+            wrappers.eq(ServiceFunddetail::getIdcardno, serviceFunddetail.getIdcardno());
+        }
+        if (StringUtils.isNotBlank(serviceFunddetail.getApplytype())) {
+            wrappers.eq(ServiceFunddetail::getApplytype, serviceFunddetail.getApplytype());
+        }
+        if (serviceFunddetail.getDel_flag() != null) {
+            wrappers.eq(ServiceFunddetail::getDel_flag, serviceFunddetail.getDel_flag());
+        }
+        if (serviceFunddetail.getDeptId() != null) {
+            wrappers.eq(ServiceFunddetail::getDeptId, serviceFunddetail.getDeptId());
+        }
+        if (serviceFunddetail.getDeptName() != null) {
+            wrappers.eq(ServiceFunddetail::getDeptName, serviceFunddetail.getDeptName());
+        }
         return this.list(wrappers);
     }
 
@@ -95,13 +128,13 @@
     }
 
     /**
-     * 鏍规嵁鍙楃泭浜虹紪鍙疯幏鍙栫◣璐归噾棰�
+     * 鏍规嵁鍙楃泭浜鸿韩浠借瘉缂栧彿鑾峰彇绋庤垂閲戦
      *
      * @param taxMoneyVo
      * @return
      */
     @Override
-    public Double getTaxBeforeByBeneFiciaryNo(TaxMoneyVO taxMoneyVo) {
+    public Double getTaxByBeneFiciaryNo(TaxMoneyVO taxMoneyVo) {
         Double sum = 0.00;
         Double totalScore = 0.00;
         List<ServiceFunddetail> taxationByBeneFiciaryNo = serviceFunddetailMapper.getTaxBeforeByBeneFiciaryNo(taxMoneyVo);
@@ -123,7 +156,7 @@
     /**
      * 鏍规嵁绋庡悗宸ヨ祫锛岀畻鍑虹◣鍓嶅伐璧�
      *
-     * @param money
+     * @param taxMoneyVo
      * @return
      */
     @Override
@@ -139,7 +172,7 @@
             totalScore = taxationByBeneFiciaryNo.stream().mapToDouble(ServiceFunddetail::getTaxamount).sum();
         }
         //璁$畻鍑烘�荤殑绋庡悗钖叕锛堝寘鍚湰娆★級
-        sum = sum + taxMoneyVo.getMoney();
+        sum = sum + Double.valueOf(taxMoneyVo.getMoney());
         //绋庡墠鎬婚噾棰�
         String taxationBefore = TaxtUtils.getTaxationBefore(new BigDecimal(sum));
         //鎬讳釜绋�
@@ -200,20 +233,290 @@
         ServiceFunddetail serviceFunddetail = serviceFunddetailMapper.selectById(id);
         Long fundid = serviceFunddetail.getFundid();
         ServiceFund serviceFund = serviceFundMapper.selectById(fundid);
+        if (ObjectUtils.isNotEmpty(serviceFund)) {
+            Double pretax = serviceFund.getPretaxcost();
+            Double aftertax = serviceFund.getTaxedcost();
+            pretax = pretax - serviceFunddetail.getAmount();
+            aftertax = aftertax - serviceFunddetail.getTaxedamount();
+            Double amount = pretax + aftertax;
 
-        Double pretax = serviceFund.getPretaxcost();
-        Double aftertax = serviceFund.getTaxedcost();
-        pretax = pretax - serviceFunddetail.getAmount();
-        aftertax = aftertax - serviceFunddetail.getTaxedamount();
-        Double amount = pretax + aftertax;
-
-        serviceFund.setPretaxcost(pretax);
-        serviceFund.setTaxedcost(aftertax);
-        serviceFund.setAmountrequested(amount);
-        int updateAmount = serviceFundMapper.updateById(serviceFund);
-
+            serviceFund.setPretaxcost(pretax);
+            serviceFund.setTaxedcost(aftertax);
+            serviceFund.setAmountrequested(amount);
+            int updateAmount = serviceFundMapper.updateById(serviceFund);
+        }
         return serviceFunddetailMapper.deleteById(id);
     }
 
+    @Override
+    public List<ServiceFunddetailVO> getFundDetail(Long id) {
+        List<ServiceFunddetail> serviceFunddetails = serviceFunddetailMapper.selectFundDetailListById(id);
+        List<ServiceFunddetailVO> serviceFunddetailVOS = DtoConversionUtils.sourceToTarget(serviceFunddetails, ServiceFunddetailVO.class);
+        for (ServiceFunddetailVO serviceFunddetailVO : serviceFunddetailVOS) {
+            if (!StringUtils.isEmpty(serviceFunddetailVO.getAnnexfiles())) {
+                List<RbDetailFile> rbDetailFiles = JSONArray.parseArray(serviceFunddetailVO.getAnnexfiles(), RbDetailFile.class);
+                serviceFunddetailVO.setAnnexfilesList(rbDetailFiles);
+            }
+            if (!StringUtils.isEmpty(serviceFunddetailVO.getInvoicefiles())) {
+                List<RbDetailFile> rbDetailFiles = JSONArray.parseArray(serviceFunddetailVO.getInvoicefiles(), RbDetailFile.class);
+                serviceFunddetailVO.setInvoicefilesList(rbDetailFiles);
+            }
+        }
+        return serviceFunddetailVOS;
+    }
 
+    /**
+     * 鏍规嵁鏉′欢绠楃◣
+     *
+     * @param serviceFunddetails
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean calculateTax(List<ServiceFunddetail> serviceFunddetails) {
+        if (CollectionUtils.isEmpty(serviceFunddetails)) {
+            throw new BaseException("绠楃◣鏉′欢涓虹┖锛岃妫�鏌ュ悗锛屽啀杩涜璁$畻");
+        }
+        // 鍏堝serviceFunddetails鎺掑簭
+        Comparator<ServiceFunddetail> customComparator = Comparator.comparing(obj -> {
+            if (ObjectUtils.isEmpty(obj.getTaxTime())) {
+                return 1; // 杩斿洖1琛ㄧず瀛楁涓虹┖鐨勫璞℃帓鍦ㄥ悗闈�
+            } else {
+                return 0; // 杩斿洖0琛ㄧず瀛楁涓嶄负绌虹殑瀵硅薄淇濇寔鍘熼『搴�
+            }
+        });
+        Collections.sort(serviceFunddetails, customComparator);
+
+        //杩欎釜鏄负浜嗚幏鍙杅und_tax_time
+        Long fundid = serviceFunddetails.get(0).getFundid();
+        log.info("绠楃◣鐨刦undid鐨勫�间负锛歿}", fundid);
+        ServiceFund serviceFund1 = serviceFundMapper.selectById(fundid);
+        log.info("fund琛ㄧ殑fundtextime鍊间负锛歿}", serviceFund1.getFundtaxtime());
+
+//        //鐢ㄤ簬涓存椂淇濆瓨宸茬粡绠楀ソ鐨�"璐圭敤璇︽儏鏁版嵁"
+        List<ServiceFunddetail> temporarySave = new ArrayList<>();
+        //淇濆瓨鎬荤◣鍓嶉噾棰濓紙鐢ㄤ簬鏇存柊fund琛ㄩ噷鐨勶級
+        BigDecimal pretaxcost = BigDecimal.valueOf(0.00);
+        BigDecimal taxedcost = BigDecimal.valueOf(0.00);
+        for (ServiceFunddetail serviceFunddetail : serviceFunddetails) {
+            if (StringUtils.isEmpty(serviceFunddetail.getIdcardno())) {
+                logger.info("serviceFunddetail鏁版嵁鍏ュ弬 锛� {}", serviceFunddetail);
+                //濡傛灉韬唤璇佸彿涓虹┖锛屽氨涓嶇敤鏌ヤ簡锛屽彲鑳芥槸鍖婚櫌鐨勮褰�
+                if (StringUtils.isEmpty(serviceFunddetail.getServicesscopename()) || !serviceFunddetail.getServicesscopename().contains("绋庡悗")) {
+                    serviceFunddetail.setTaxedamount(serviceFunddetail.getAmount());
+                } else {
+                    serviceFunddetail.setAmount(serviceFunddetail.getTaxedamount());
+                }
+                //鍏徃鐨勭敵璇烽噾棰濅篃瑕佸姞杩涘幓
+                pretaxcost = pretaxcost.add(BigDecimal.valueOf(serviceFunddetail.getAmount()));
+                taxedcost = taxedcost.add(BigDecimal.valueOf(serviceFunddetail.getTaxedamount()));
+
+                serviceFunddetail.setTaxamount(0.0);
+                logger.info("serviceFunddetail鏇存柊鍚庣殑鏁版嵁 锛� {}", serviceFunddetail);
+                boolean b = this.updateById(serviceFunddetail);
+                logger.info("serviceFunddetail淇敼缁撴灉 锛� {}", b);
+                continue;
+            }
+
+            //鑾峰彇褰撴湀鐨勭涓�澶�
+            Date firstDay = Date.from(LocalDate.now().with(TemporalAdjusters.firstDayOfMonth()).atStartOfDay(ZoneId.systemDefault()).toInstant());
+            //鑾峰彇鍒板綋鍓嶄汉鐨勬湰鏈堢畻绋庡簭鍙锋渶澶у��
+            TaxMoneyByItemEO taxMoneyByItemEO = new TaxMoneyByItemEO();
+            taxMoneyByItemEO.setFirstDay(firstDay);
+            taxMoneyByItemEO.setIDCard(serviceFunddetail.getIdcardno());
+            taxMoneyByItemEO.setTaxTime(new Date());
+            Long maxXH = serviceFunddetailMapper.getMaxXH(taxMoneyByItemEO);
+            if (maxXH == null) {
+                maxXH = 0L;
+            }
+
+            TaxMoneyByItemEO taxMoneyVO = new TaxMoneyByItemEO();
+            if (serviceFund1.getFundtaxtime() != null) {
+                taxMoneyVO.setTaxTime(serviceFund1.getFundtaxtime());
+            } else {
+                taxMoneyVO.setTaxTime(new Date());
+            }
+            taxMoneyVO.setFirstDay(firstDay);
+            taxMoneyVO.setFundID(serviceFunddetail.getFundid());
+            taxMoneyVO.setIDCard(serviceFunddetail.getIdcardno());
+            if (serviceFunddetail.getXh() != null) {
+                taxMoneyVO.setXh(serviceFunddetail.getXh());
+            } else {
+                taxMoneyVO.setXh(maxXH + 1);
+            }
+            //鏌ュ嚭绋庡墠銆佺◣銆佺◣鍚庣殑鎬婚锛堜笉鍖呭惈鏈锛�
+            TaxMoneySumEO taxSum = serviceFunddetailMapper.getTaxSum(taxMoneyVO);
+            logger.info("鏌ヨ鐨則axSum鐨勫�� 锛� {}", taxSum);
+            if (ObjectUtils.isEmpty(taxSum)) {
+                taxSum = new TaxMoneySumEO();
+            }
+
+            //鍒ゆ柇涓存椂闆嗗悎temporarySave涓紝鏈夋病鏈夊凡缁忕畻杩囩殑鏁版嵁
+            if (CollectionUtils.isNotEmpty(temporarySave)) {
+                for (ServiceFunddetail serviceFunddetail1 : temporarySave) {
+                    //濡傛灉鏈鐨勨�濅汉鍛樼被鍨嬧�溿�佲�濊韩浠借瘉鍙封�滃湪涓存椂闆嗗悎涓瓨鍦紝鍒欏皢闆嗗悎鏁版嵁涓殑璇ュ彈鐩婁汉鐨勶紝绋庡墠銆佺◣閲戙�佺◣鍚庯紝鍜屾�荤殑鐩稿姞锛屽苟灏嗚�佺殑瑕嗙洊
+                    // if (serviceFunddetail1.getApplytype().equals(serviceFunddetail.getApplytype()) && serviceFunddetail1.getBeneficiaryno().equals(serviceFunddetail.getBeneficiaryno())) {
+                    if (serviceFunddetail1.getIdcardno().trim().equals(serviceFunddetail.getIdcardno().trim())) {
+                        //灏嗛泦鍚堟暟鎹腑鐨勮鍙楃泭浜虹殑锛岀◣鍓嶃�佺◣閲戙�佺◣鍚庯紝鍜屾�荤殑鐩稿姞
+                        BigDecimal amounts = BigDecimal.valueOf(taxSum.getAmounts()).add(new BigDecimal(String.valueOf(serviceFunddetail1.getAmount())));
+                        BigDecimal taxAmounts = BigDecimal.valueOf(taxSum.getTaxAmounts()).add(new BigDecimal(String.valueOf(serviceFunddetail1.getTaxamount())));
+                        BigDecimal TaxedAmounts = BigDecimal.valueOf(taxSum.getTaxedAmounts()).add(new BigDecimal(String.valueOf(serviceFunddetail1.getTaxedamount())));
+                        //灏嗚�佺殑瑕嗙洊
+                        taxSum.setAmounts(amounts.doubleValue());
+                        taxSum.setTaxAmounts(taxAmounts.doubleValue());
+                        taxSum.setTaxedAmounts(TaxedAmounts.doubleValue());
+                    }
+                    continue;
+                }
+            }
+            if (serviceFunddetail.getXh() == null) {
+                serviceFunddetail.setXh(maxXH + 1);
+            }
+
+            if (StringUtils.isEmpty(serviceFunddetail.getServicesscopename()) || !serviceFunddetail.getServicesscopename().contains("绋庡悗")) {
+                logger.info("璁$畻绋庡墠淇℃伅寮�濮嬶細{}", serviceFunddetail);
+                logger.info("taxSum鍏ュ弬鏁版嵁锛歿}", taxSum);
+                // 濡備綍绋庡墠閲戦涓嶄负绌猴紝鐢ㄤ箣鍓嶇殑鈥濇�荤◣鍓嶉噾棰濃�滐紝鍔犱笂褰撳墠鈥濈◣鍓嶉噾棰濃��
+                BigDecimal newAmounts = BigDecimal.valueOf(taxSum.getAmounts()).add(BigDecimal.valueOf(serviceFunddetail.getAmount()));
+
+                // 璁$畻鎬荤◣閲戯紙鍖呭惈鏈锛�
+                String taxation = TaxtUtils.getTaxation(newAmounts);
+                //璁$畻鏈绋庨噾锛堟�荤◣閲戯紙鍖呭惈鏈锛� - 鎬荤◣閲戯紙涓嶅寘鍚湰娆★級锛�
+                BigDecimal taxAmountNow = new BigDecimal(taxation).subtract(new BigDecimal(String.valueOf(taxSum.getTaxAmounts())));
+
+                //璁$畻鏈鐨勭◣鍚庨噾棰�(鏈鐨勭◣鍓嶉噾棰� - 绋庨噾)
+                BigDecimal texdAfterNow = BigDecimal.valueOf(serviceFunddetail.getAmount()).subtract(taxAmountNow);
+                logger.info("鎵撳嵃newAmounts锛歿},taxation:{},taxAmountNow:{},texdAfterNow:{}", newAmounts, taxation, taxAmountNow, texdAfterNow);
+
+                //灏嗗惊鐜殑鏁版嵁閲嶆柊鏀惧埌涓�涓柊瀵硅薄涓�
+                ServiceFunddetail serviceFunddetail3 = DtoConversionUtils.sourceToTarget(serviceFunddetail, ServiceFunddetail.class);
+                serviceFunddetail3.setTaxamount(taxAmountNow.doubleValue());
+                serviceFunddetail3.setTaxedamount(texdAfterNow.doubleValue());
+                if (ObjectUtils.isEmpty(serviceFund1.getFundtaxtime())) {
+                    serviceFunddetail3.setTaxTime(new Date());
+                } else {
+                    serviceFunddetail3.setTaxTime(serviceFund1.getFundtaxtime());
+                }
+                logger.info("鎵撳嵃绋庡墠serviceFunddetail3鏁版嵁 :{}", serviceFunddetail3);
+
+                // 灏嗚鏉℃暟鎹洿鏂�
+
+                boolean b = this.updateById(serviceFunddetail3);
+                pretaxcost = pretaxcost.add(BigDecimal.valueOf(serviceFunddetail.getAmount()));
+                taxedcost = taxedcost.add(BigDecimal.valueOf(serviceFunddetail.getTaxedamount()));
+//                // 鎶婅鏁版嵁锛屾斁鍒颁复鏃剁殑闆嗗悎涓�
+                temporarySave.add(serviceFunddetail3);
+            } else if (serviceFunddetail.getServicesscopename().contains("绋庡悗")) {
+                logger.info("璁$畻绋庡悗淇℃伅寮�濮嬶細{}", serviceFunddetail);
+                logger.info("taxSum鍏ュ弬鏁版嵁锛歿}", taxSum);
+                //绋庡悗涓嶄负绌�, 鐢ㄤ箣鍓嶇殑鈥濇�荤◣鍚庨噾棰濃�滐紝鍔犱笂褰撳墠鈥濈◣鍚庨噾棰濃��
+                BigDecimal newTaxedAmounts = BigDecimal.valueOf(taxSum.getTaxedAmounts()).add(BigDecimal.valueOf(serviceFunddetail.getTaxedamount()));
+
+                //閫氳繃鎬荤◣鍚庯紙鍖呭惈鏈锛夌畻鍑烘�荤◣鍓�
+                String taxationBefore = TaxtUtils.getTaxationBefore(newTaxedAmounts);
+                //绠楀嚭鏈绋庡墠锛堟�荤◣鍓嶏紙鍖呭惈鏈锛� - 鎬荤◣鍓嶏紙涓嶅寘鍚湰娆★級锛�
+                BigDecimal amountNow = new BigDecimal(taxationBefore).subtract(BigDecimal.valueOf(taxSum.getAmounts()));
+
+                //绠楀嚭鏈绋庨噾(鏈绋庡墠 - 鏈绋庡悗)
+                BigDecimal tax = amountNow.subtract(BigDecimal.valueOf(serviceFunddetail.getTaxedamount()));
+                logger.info("鎵撳嵃newTaxedAmounts锛歿},taxationBefore:{},amountNow:{},tax:{}", newTaxedAmounts, taxationBefore, amountNow, tax);
+
+                //灏嗗惊鐜殑鏁版嵁閲嶆柊鏀惧埌涓�涓柊瀵硅薄涓�
+                ServiceFunddetail serviceFunddetail3 = DtoConversionUtils.sourceToTarget(serviceFunddetail, ServiceFunddetail.class);
+                serviceFunddetail3.setAmount(amountNow.doubleValue());
+                serviceFunddetail3.setTaxamount(tax.doubleValue());
+                if (ObjectUtils.isEmpty(serviceFund1.getFundtaxtime())) {
+                    serviceFunddetail3.setTaxTime(new Date());
+                } else {
+                    serviceFunddetail3.setTaxTime(serviceFund1.getFundtaxtime());
+                }
+                logger.info("鎵撳嵃serviceFunddetail3:{}", serviceFunddetail3);
+                //鑾峰彇鍒板綋鍓嶄汉鐨勬湰鏈堢畻绋庡簭鍙锋渶澶у��
+                TaxMoneyByItemEO byItemEO = new TaxMoneyByItemEO();
+                byItemEO.setFirstDay(firstDay);
+                byItemEO.setIDCard(serviceFunddetail.getIdcardno());
+                byItemEO.setTaxTime(new Date());
+                // 灏嗚鏉℃暟鎹洿鏂�
+                updateById(serviceFunddetail3);
+                pretaxcost = pretaxcost.add(BigDecimal.valueOf(serviceFunddetail3.getAmount()));
+                taxedcost = taxedcost.add(BigDecimal.valueOf(serviceFunddetail3.getTaxedamount()));
+//                // 鎶婅鏁版嵁锛屾斁鍒颁复鏃剁殑闆嗗悎涓�
+                temporarySave.add(serviceFunddetail3);
+            }
+        }
+        ServiceFund serviceFund = new ServiceFund();
+        serviceFund.setPretaxcost(pretaxcost.doubleValue());
+        serviceFund.setTaxedcost(taxedcost.doubleValue());
+        serviceFund.setId(serviceFunddetails.get(0).getFundid());
+        if (ObjectUtils.isEmpty(serviceFund1.getFundtaxtime())) {
+            serviceFund.setFundtaxtime(new Date());
+        }
+        // 1 宸茬畻绋�
+        serviceFund.setIstax(1);
+        serviceFundMapper.updateById(serviceFund);
+
+        return true;
+    }
+
+    @Override
+    public Map<String, Double> performance(ServiceFunddetail serviceFunddetail) {
+        //鏍规嵁"韬唤璇佸彿"鍜�"缁╂晥鏃ユ湡(骞翠唤)"鏌ヨ涓汉鍘嗗彶缁╂晥
+        ServiceFunddetail serviceFunddetailEo = new ServiceFunddetail();
+        serviceFunddetailEo.setIdcardno(serviceFunddetail.getIdcardno());
+        serviceFunddetailEo.setApplytype("5");
+        Calendar cal = Calendar.getInstance();
+        //榛樿鏈勾搴�
+        serviceFunddetailEo.setJxrq(String.valueOf(cal.get(Calendar.YEAR)));
+        List<ServiceFunddetail> serviceFunddetails = queryList(serviceFunddetailEo);
+
+        //缁熻鍘嗗彶鐨勭◣
+        BigDecimal historyTax = BigDecimal.valueOf(0.00);
+        //璁$畻鎵e幓姣忔湀5000鐨勫巻鍙茬◣鍓嶉噾棰�
+        BigDecimal historyTaxBefore = BigDecimal.valueOf(0.00);
+        //鏈湀鏄惁宸茬粡绠楄繃缁╂晥锛堜笅闈㈡墸闄�5000闇�瑕佺敤鍒拌繖涓紝濡傛灉鏈湀宸茬粡鎵h繃5000锛屽氨涓嶅啀鎵d簡锛�
+        Boolean deduct = false;
+        //鑾峰彇褰撳墠鏈堜唤
+        Date date = new Date();
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
+        String nowMonth = sdf.format(date);
+
+        for (ServiceFunddetail serviceFunddetail1 : serviceFunddetails) {
+            historyTaxBefore = historyTaxBefore.add(BigDecimal.valueOf(serviceFunddetail1.getAmount())).subtract(BigDecimal.valueOf(5000));
+            historyTax = historyTax.add(BigDecimal.valueOf(serviceFunddetail1.getTaxamount()));
+            if (serviceFunddetail1.getJxrq().equals(nowMonth)) {
+                deduct = true;
+            }
+        }
+        BigDecimal allValue = BigDecimal.valueOf(0.00);
+        //鍏堟煡璇竴涓嬫湰鏈堟槸鍚﹀凡缁忕畻杩囩哗鏁堬紙涓�涓湀鍙噺涓�娆�5000锛屽鏋滀笂涓�娆″凡缁忓噺杩囷紝杩欎竴娆″氨涓嶅湪鍑忎簡锛�
+        if (deduct == true) {
+            //鏈湀宸茬粡鍑忚繃5000浜�
+            allValue = historyTaxBefore.add(BigDecimal.valueOf(serviceFunddetail.getAmount()));
+        } else {
+            BigDecimal subtract = BigDecimal.valueOf(serviceFunddetail.getAmount()).subtract(BigDecimal.valueOf(5000));
+            allValue = historyTaxBefore.add(subtract);
+        }
+        //璁$畻鍔犱笂鏈鐨勭◣鍓嶉噾棰濈殑鎬荤◣
+        BigDecimal personTaxation = PerformanceTaxtUtils.getPersonTaxation(allValue);
+        //璁$畻鏈鐨勭◣
+        BigDecimal nowSingleTax = personTaxation.subtract(historyTax);
+        //璁$畻鏈鐨勭◣鍚�
+        BigDecimal taxAfter = BigDecimal.valueOf(serviceFunddetail.getAmount()).subtract(nowSingleTax);
+
+        //灏嗚绠楀嚭鏉ョ殑鏁版嵁鏀惧埌serviceFunddetail涓�
+        serviceFunddetail.setTaxamount(nowSingleTax.doubleValue());
+        serviceFunddetail.setTaxedamount(taxAfter.doubleValue());
+        serviceFunddetail.setJxrq(nowMonth);
+
+        save(serviceFunddetail);
+        Map map = new HashMap();
+        map.put("amount", serviceFunddetail.getAmount());
+        map.put("taxedamount", taxAfter.doubleValue());
+        return map;
+    }
+
+
+    @Override
+    public List<SpStatBonus> getListBySpStatBonus(SpStatBonusReq spStatBonusReq) {
+        return spStatBonusMapper.getListBySpStatBonus(spStatBonusReq.getPabegtime(), spStatBonusReq.getPaendtime(), spStatBonusReq.getPadeptno(), spStatBonusReq.getPausername(), spStatBonusReq.getPabonustype());
+    }
 }

--
Gitblit v1.9.3