From ebe27b0d9f9cf990e34142e79ebc60ab4081f65a Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期三, 04 十一月 2026 15:33:30 +0800
Subject: [PATCH] 九鸿:工资表所有数值字段支持自动计算后手工调整,保存以页面值为准
---
yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/salary/HrmSalaryCalculationServiceImpl.java | 61 +++++++++++++++---------------
1 files changed, 30 insertions(+), 31 deletions(-)
diff --git a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/salary/HrmSalaryCalculationServiceImpl.java b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/salary/HrmSalaryCalculationServiceImpl.java
index edc86ab..e27665c 100644
--- a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/salary/HrmSalaryCalculationServiceImpl.java
+++ b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/salary/HrmSalaryCalculationServiceImpl.java
@@ -731,21 +731,14 @@
}
/**
- * 淇濆瓨鍓嶆寜涔濇硴宸ヨ祫琛ㄥ彛寰勯噸绠楀悎璁★紝閬垮厤鍓嶇婕忕畻鎴栨棫瀹㈡埛绔紶鍏ヤ笉涓�鑷寸殑鍚堣鍊笺��
+ * 淇濆瓨鍓嶈ˉ榻愬悎璁″瓧娈点��
*
- * 鍔犻」鍚堣 = 宸ラ緞宸ヨ祫 + 澶滅彮琛ュ姪 + 瀛﹀巻琛ヨ创 + 浣撴 + 浼樼鍛樺伐濂� + 鍏朵粬琛ュ姪 + 閮ㄩ棬缁╂晥
- * 鎵f鍚堣 = 婕忔墦鍗� + 杩熷埌鏃╅�� + 鍏朵粬鎵f
- * 绋庡悗宸ヨ祫 = 搴斾粯宸ヨ祫 + 鍔犻」鍚堣 - 鎵f鍚堣 - 绀句繚 - 鍏Н閲� - 涓◣
- *
- * 浠呭綋鏈璁板綍甯︽湁銆屽簲浠樺伐璧勩�嶆椂閲嶇畻锛涘彧鏈夋棫瀛楁鐨勮�佹暟鎹繚鎸佸師鏍凤紝閬垮厤鎶婃湭缁存姢鐨勬柊瀛楁娓呮垚 0銆�
+ * 宸ヨ祫琛ㄧ殑姣忎釜鏁板�煎瓧娈甸兘鍏佽鍦ㄨ嚜鍔ㄨ绠楀悗鎵嬪伐璋冩暣锛屽洜姝よ繖閲�**鍙ˉ绌哄�笺�佷笉瑕嗙洊鎻愪氦鍊�**锛�
+ * 鍓嶇棰勮椤靛凡缁忔寜鍚屽彛寰勯噸绠楀ソ搴斾粯宸ヨ祫/鍔犻」鍚堣/鎵f鍚堣/绋庡悗宸ヨ祫骞朵竴璧锋彁浜わ紝
+ * 鐩存帴钀藉簱鎵嶈兘淇濅綇鐢ㄦ埛鎵嬪伐鏀硅繃鐨勬暟锛涘彧鏈夊瓧娈典负绌猴紙鏃у鎴风銆佹帴鍙g洿璋冿級鏃舵墠鎸夊彛寰勮ˉ绠椼��
*/
private void normalizeSalaryTotals(HrmSalaryCalculationDO calculation) {
- if (calculation.getPayableSalary() == null) {
- return;
- }
- // 搴斾粯宸ヨ祫 = 鏍囧噯鍑哄嫟宸ヨ祫 + 鍔犵彮宸ヨ祫 + 娉曞畾鍋囧伐璧� + 瀹夊叏鐜繚濂� + 娴姩缁╂晥宸ヨ祫
- // 浠呭綋鏈璁板綍甯︽柊鐗堟爣鍑嗛」鏃堕噸绠楋紝閬垮厤鏃ф暟鎹紙鏃犺繖浜涘垪锛夎娓呴浂
- if (calculation.getStandardAttendancePay() != null) {
+ if (calculation.getPayableSalary() == null && calculation.getStandardAttendancePay() != null) {
calculation.setPayableSalary(nvl(calculation.getStandardAttendancePay())
.add(nvl(calculation.getOvertimePay()))
.add(nvl(calculation.getLegalHolidayPay()))
@@ -753,25 +746,31 @@
.add(nvl(calculation.getFloatingPerformancePay()))
.setScale(2, RoundingMode.HALF_UP));
}
- BigDecimal additionTotal = nvl(calculation.getSeniorityPay())
- .add(nvl(calculation.getNightShiftAllowance()))
- .add(nvl(calculation.getEducationAllowance()))
- .add(nvl(calculation.getHealthCheckAllowance()))
- .add(nvl(calculation.getExcellentEmployeeAward()))
- .add(nvl(calculation.getOtherSubsidy()))
- .add(nvl(calculation.getDeptPerformance()));
- BigDecimal deductionTotal = nvl(calculation.getMissedPunchDeduction())
- .add(nvl(calculation.getLateEarlyDeduction()))
- .add(nvl(calculation.getOtherDeduction()));
- calculation.setAdditionTotal(additionTotal.setScale(2, RoundingMode.HALF_UP));
- calculation.setDeductionTotal(deductionTotal.setScale(2, RoundingMode.HALF_UP));
- calculation.setActualSalary(calculation.getPayableSalary()
- .add(calculation.getAdditionTotal())
- .subtract(calculation.getDeductionTotal())
- .subtract(nvl(calculation.getSocialSecurityDeduction()))
- .subtract(nvl(calculation.getHousingFundDeduction()))
- .subtract(nvl(calculation.getTaxDeduction()))
- .setScale(2, RoundingMode.HALF_UP));
+ if (calculation.getAdditionTotal() == null) {
+ BigDecimal additionTotal = nvl(calculation.getSeniorityPay())
+ .add(nvl(calculation.getNightShiftAllowance()))
+ .add(nvl(calculation.getEducationAllowance()))
+ .add(nvl(calculation.getHealthCheckAllowance()))
+ .add(nvl(calculation.getExcellentEmployeeAward()))
+ .add(nvl(calculation.getOtherSubsidy()))
+ .add(nvl(calculation.getDeptPerformance()));
+ calculation.setAdditionTotal(additionTotal.setScale(2, RoundingMode.HALF_UP));
+ }
+ if (calculation.getDeductionTotal() == null) {
+ BigDecimal deductionTotal = nvl(calculation.getMissedPunchDeduction())
+ .add(nvl(calculation.getLateEarlyDeduction()))
+ .add(nvl(calculation.getOtherDeduction()));
+ calculation.setDeductionTotal(deductionTotal.setScale(2, RoundingMode.HALF_UP));
+ }
+ if (calculation.getActualSalary() == null && calculation.getPayableSalary() != null) {
+ calculation.setActualSalary(calculation.getPayableSalary()
+ .add(nvl(calculation.getAdditionTotal()))
+ .subtract(nvl(calculation.getDeductionTotal()))
+ .subtract(nvl(calculation.getSocialSecurityDeduction()))
+ .subtract(nvl(calculation.getHousingFundDeduction()))
+ .subtract(nvl(calculation.getTaxDeduction()))
+ .setScale(2, RoundingMode.HALF_UP));
+ }
}
/**
--
Gitblit v1.9.3