From 34b56683125b210f929b9ef5ea41a4dea009dfcf Mon Sep 17 00:00:00 2001
From: sinake <sinake1@qq.com>
Date: 星期二, 13 十月 2026 10:06:12 +0800
Subject: [PATCH] 差旅报销审批流程处理

---
 ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceFunddetailServiceImpl.java |   65 +++++++++++++++++++-------------
 1 files changed, 39 insertions(+), 26 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 5717177..7488e4b 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
@@ -136,21 +136,30 @@
      */
     @Override
     public Double getTaxByBeneFiciaryNo(TaxMoneyVO taxMoneyVo) {
-        Double sum = 0.00;
-        Double totalScore = 0.00;
+        // 閲戦绱姞蹇呴』鐢� BigDecimal锛歞ouble 绱姞浼氬紩鍏ユ诞鐐瑰熬宸紝瀵艰嚧绠楀嚭鐨勪釜绋庡嚭鐜板垎浠ヤ笅璇樊
+        BigDecimal sum = BigDecimal.ZERO;
+        BigDecimal totalScore = BigDecimal.ZERO;
         List<ServiceFunddetail> taxationByBeneFiciaryNo = serviceFunddetailMapper.getTaxBeforeByBeneFiciaryNo(taxMoneyVo);
         if (CollectionUtils.isNotEmpty(taxationByBeneFiciaryNo)) {
             //璁$畻鐢宠閲戦鎬诲拰锛屼笉鍖呮嫭褰撳墠浼犺繘鏉ョ殑
-            sum = taxationByBeneFiciaryNo.stream().mapToDouble(ServiceFunddetail::getAmount).sum();
+            sum = taxationByBeneFiciaryNo.stream()
+                    .map(ServiceFunddetail::getAmount)
+                    .filter(java.util.Objects::nonNull)
+                    .map(BigDecimal::valueOf)
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
             //涓嶅姞鏈钖叕鐨勪釜绋�
-            totalScore = taxationByBeneFiciaryNo.stream().mapToDouble(ServiceFunddetail::getTaxamount).sum();
+            totalScore = taxationByBeneFiciaryNo.stream()
+                    .map(ServiceFunddetail::getTaxamount)
+                    .filter(java.util.Objects::nonNull)
+                    .map(BigDecimal::valueOf)
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
         }
 
-        sum = sum + new Double(taxMoneyVo.getMoney());
+        sum = sum.add(new BigDecimal(taxMoneyVo.getMoney()));
         //鍔犱笂鏈钖叕鐨勬�讳釜绋�
-        String taxation = TaxtUtils.getTaxation(new BigDecimal(sum));
+        String taxation = TaxtUtils.getTaxation(sum);
 
-        Double tax = Double.valueOf(taxation) - totalScore;
+        Double tax = new BigDecimal(taxation).subtract(totalScore).doubleValue();
         return tax;
     }
 
@@ -163,21 +172,30 @@
     @Override
     public TaxedMoneyVO getTaxBeforeByAfterMoney(TaxMoneyVO taxMoneyVo) {
         TaxedMoneyVO taxedMoneyVO = new TaxedMoneyVO();
-        Double sum = 0.00;
-        Double totalScore = 0.00;
+        // 閲戦绱姞蹇呴』鐢� BigDecimal锛岄伩鍏嶆诞鐐瑰熬宸奖鍝嶇◣鍓�/绋庨缁撴灉
+        BigDecimal sum = BigDecimal.ZERO;
+        BigDecimal totalScore = BigDecimal.ZERO;
         List<ServiceFunddetail> taxationByBeneFiciaryNo = serviceFunddetailMapper.getTaxBeforeByBeneFiciaryNo(taxMoneyVo);
         if (CollectionUtils.isNotEmpty(taxationByBeneFiciaryNo)) {
             //璁$畻鍑虹◣鍚庢�婚噾棰濓紙涓嶅寘鍚湰娆★級
-            sum = taxationByBeneFiciaryNo.stream().mapToDouble(ServiceFunddetail::getTaxedamount).sum();
+            sum = taxationByBeneFiciaryNo.stream()
+                    .map(ServiceFunddetail::getTaxedamount)
+                    .filter(java.util.Objects::nonNull)
+                    .map(BigDecimal::valueOf)
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
             //姹傚嚭涔嬪墠鐨勬�荤殑涓◣
-            totalScore = taxationByBeneFiciaryNo.stream().mapToDouble(ServiceFunddetail::getTaxamount).sum();
+            totalScore = taxationByBeneFiciaryNo.stream()
+                    .map(ServiceFunddetail::getTaxamount)
+                    .filter(java.util.Objects::nonNull)
+                    .map(BigDecimal::valueOf)
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
         }
         //璁$畻鍑烘�荤殑绋庡悗钖叕锛堝寘鍚湰娆★級
-        sum = sum + Double.valueOf(taxMoneyVo.getMoney());
+        sum = sum.add(new BigDecimal(taxMoneyVo.getMoney()));
         //绋庡墠鎬婚噾棰�
-        String taxationBefore = TaxtUtils.getTaxationBefore(new BigDecimal(sum));
+        String taxationBefore = TaxtUtils.getTaxationBefore(sum);
         //鎬讳釜绋�
-        BigDecimal tax = new BigDecimal(taxationBefore).subtract(new BigDecimal(sum));
+        BigDecimal tax = new BigDecimal(taxationBefore).subtract(sum);
 
         //鏈鐨勭◣鍓嶉噾棰�
         String nowTaxMoney = TaxtUtils.getTaxationBefore(new BigDecimal(taxMoneyVo.getMoney()));
@@ -346,9 +364,9 @@
             // 5.2.3 绠楃◣閫昏緫
             if (detail.getServicesscopename().contains("绋庡悗")) {
                 // 绋庡悗鏄庣粏锛氱疮璁$◣鍚庨噾棰濓紝鍙嶆帹绋庡墠閲戦鍜岀◣閲�
-                if (idcard.equals("330103196704060019")) {
-                    log.info("330103196704060019");
-                }
+//                if (idcard.equals("362329199103224511")) {
+//                    log.info("鏈辩幃瀹�");
+//                }
                 BigDecimal newTaxedAmounts = BigDecimal.valueOf(taxSum.getTaxedAmounts()).add(BigDecimal.valueOf(detail.getTaxedamount()));
                 String taxationBefore = TaxtUtils.getTaxationBefore(newTaxedAmounts);
                 BigDecimal amountNow = new BigDecimal(taxationBefore).subtract(BigDecimal.valueOf(taxSum.getAmounts()));
@@ -360,26 +378,21 @@
                 } else {
                     detail.setTaxTime(serviceFund1.getFundtaxtime());
                 }
-                if (tax.doubleValue() < 0) {
-                    log.info("灏忎簬0浜�");
-                }
                 taxSum.setAmounts((BigDecimal.valueOf(taxSum.getAmounts()).add(amountNow)).doubleValue());
                 taxSum.setTaxAmounts((BigDecimal.valueOf(taxSum.getTaxAmounts()).add(tax)).doubleValue());
                 taxSum.setTaxedAmounts(newTaxedAmounts.doubleValue());
             } else {
                 // 绋庡墠鏄庣粏锛氱疮璁$◣鍓嶉噾棰濓紝绠楁�荤◣閲戯紝鍐嶇畻鏈绋庨噾鍜岀◣鍚庨噾棰�
                 BigDecimal newAmounts = BigDecimal.valueOf(taxSum.getAmounts()).add(BigDecimal.valueOf(detail.getAmount()));
-                if (idcard.equals("330103196704060019")) {
-                    log.info("330103196704060019");
-                }
+//                if (idcard.equals("362329199103224511")) {
+//                    log.info("鏈辩幃瀹�");
+//                }
                 String taxation = TaxtUtils.getTaxation(newAmounts);
+
                 BigDecimal taxAmountNow = new BigDecimal(taxation).subtract(new BigDecimal(String.valueOf(taxSum.getTaxAmounts())));
                 BigDecimal texdAfterNow = BigDecimal.valueOf(detail.getAmount()).subtract(taxAmountNow);
                 detail.setTaxamount(taxAmountNow.doubleValue());
                 detail.setTaxedamount(texdAfterNow.doubleValue());
-                if (taxAmountNow.doubleValue() < 0) {
-                    log.info("灏忎簬0浜�");
-                }
 
                 if (ObjectUtils.isEmpty(serviceFund1.getFundtaxtime())) {
                     detail.setTaxTime(new Date());

--
Gitblit v1.9.3