From 35f70b350f298bbac8de18adf613990122004c4e Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期五, 12 六月 2026 11:23:13 +0800
Subject: [PATCH] 修改工资计算逻辑

---
 src/main/java/com/ruoyi/staff/service/impl/SchemeApplicableStaffServiceImpl.java |   21 +++++++++------------
 1 files changed, 9 insertions(+), 12 deletions(-)

diff --git a/src/main/java/com/ruoyi/staff/service/impl/SchemeApplicableStaffServiceImpl.java b/src/main/java/com/ruoyi/staff/service/impl/SchemeApplicableStaffServiceImpl.java
index f22db90..73d01a6 100644
--- a/src/main/java/com/ruoyi/staff/service/impl/SchemeApplicableStaffServiceImpl.java
+++ b/src/main/java/com/ruoyi/staff/service/impl/SchemeApplicableStaffServiceImpl.java
@@ -285,9 +285,6 @@
         // 瀹炲彂宸ヨ祫鍒濆鍊�
         netSalary = grossSalary;
         map.put("netSalary", netSalary);
-        // 涓◣閲戦锛堟棤绀句繚鐗堬級
-        BigDecimal bigDecimal = TaxCalculator.calculateMonthlyTax(basicSalary, socialPersonal, fundPersonal);
-        map.put("salaryTax", bigDecimal);
         // 璁℃椂宸ヨ祫 璁′欢宸ヨ祫
         UserProductionAccountingDto userProductionAccountingDto = new UserProductionAccountingDto();
         userProductionAccountingDto.setUserId(getUidByStaffId(staffId));
@@ -323,6 +320,7 @@
                 socialPersonal = socialPersonal.add(amount);
             }
         }
+        BigDecimal currentMonthSocialPersonal = socialPersonal;
         BigDecimal socialSupplementAmount = calculateSocialSupplementAmount(
                 staffId,
                 staffOnJobDto,
@@ -331,18 +329,16 @@
                 currentDetailList,
                 socialPersonal
         );
-        if (socialSupplementAmount.compareTo(BigDecimal.ZERO) > 0) {
-            socialPersonal = socialPersonal.add(socialSupplementAmount);
-        }
-        map.put("socialPersonal", socialPersonal);
+        BigDecimal totalSocialPersonal = currentMonthSocialPersonal.add(socialSupplementAmount);
+        map.put("socialPersonal", currentMonthSocialPersonal);
         map.put("fundPersonal", fundPersonal);
         map.put("socialSupplementAmount", socialSupplementAmount);
         // 涓◣閲戦锛堢ぞ淇濈増锛�
-        bigDecimal = TaxCalculator.calculateMonthlyTax(basicSalary, socialPersonal, fundPersonal);
+        BigDecimal bigDecimal = TaxCalculator.calculateMonthlyTax(grossSalary, totalSocialPersonal, fundPersonal);
         map.put("salaryTax", bigDecimal);
 
-        // 搴旀墸宸ヨ祫 = 涓◣ + 鍏Н閲戜釜浜� + 绀句繚涓汉 + 鍏朵粬鏀嚭
-        deductSalary = bigDecimal.add(fundPersonal).add(socialPersonal).add(otherDeduct);
+        // 搴旀墸宸ヨ祫 = 涓◣ + 鍏Н閲戜釜浜� + 绀句繚涓汉 + 绀句繚琛ョ即 + 鍏朵粬鏀嚭
+        deductSalary = bigDecimal.add(fundPersonal).add(totalSocialPersonal).add(otherDeduct);
         map.put("deductSalary", deductSalary);
 
         // 瀹炲彂宸ヨ祫 = 搴斿彂宸ヨ祫 - 搴旀墸宸ヨ祫
@@ -473,6 +469,7 @@
 
     /**
      * 缁熻鍛樺伐褰撳勾1鏈堝埌鐩爣鏈堜唤涔嬪墠宸茬即绾崇殑绀句繚涓汉閮ㄥ垎鎬婚
+     * 杩欓噷鍚屾椂鍖呭惈 socialPersonal 鍜� socialSupplementAmount锛岄伩鍏嶅巻鍙茶ˉ缂存儏褰㈣閲嶅璁$畻銆�
      *
      * 鏌ヨ閫昏緫锛�
      * 1. 鏍规嵁鐩爣鏈堜唤鑾峰彇褰撳勾骞翠唤鍓嶇紑锛堝 "2024-"锛�
@@ -525,8 +522,8 @@
 
         // 6. 绱姞绀句繚涓汉閮ㄥ垎閲戦
         return detailList.stream()
-                .map(StaffSalaryDetail::getSocialPersonal)  // 鑾峰彇绀句繚涓汉閮ㄥ垎
-                .filter(Objects::nonNull)
+                .map(detail -> defaultZero(detail.getSocialPersonal())
+                        .add(defaultZero(detail.getSocialSupplementAmount())))
                 .reduce(BigDecimal.ZERO, BigDecimal::add);  // 绱姞姹傚拰
     }
 

--
Gitblit v1.9.3