From ef1052e7bf9bf1765d61776bc49ce69a23c6cdee Mon Sep 17 00:00:00 2001
From: yuan <123@>
Date: 星期二, 20 十月 2026 00:25:29 +0800
Subject: [PATCH] feat: 添加加班时长和加班工资字段到员工工资明细

---
 src/main/java/com/ruoyi/staff/service/impl/SchemeApplicableStaffServiceImpl.java |   23 +++++++++++++++++++++--
 1 files changed, 21 insertions(+), 2 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 60607ba..c7ad83a 100644
--- a/src/main/java/com/ruoyi/staff/service/impl/SchemeApplicableStaffServiceImpl.java
+++ b/src/main/java/com/ruoyi/staff/service/impl/SchemeApplicableStaffServiceImpl.java
@@ -13,6 +13,7 @@
 import com.ruoyi.project.system.mapper.SysDeptMapper;
 import com.ruoyi.project.system.mapper.SysUserMapper;
 import com.ruoyi.staff.controller.TaxCalculator;
+import com.ruoyi.staff.dto.SalaryStat;
 import com.ruoyi.staff.mapper.SchemeApplicableStaffMapper;
 import com.ruoyi.staff.mapper.SchemeInsuranceDetailMapper;
 import com.ruoyi.staff.mapper.StaffOnJobMapper;
@@ -50,6 +51,7 @@
     private final SysDeptMapper sysDeptMapper;
     private final StaffOnJobMapper staffOnJobMapper;
     private final SalesLedgerProductionAccountingService salesLedgerProductionAccountingService;
+    private final SalaryStatServiceImpl salaryStatService;
 
 
     @Override
@@ -172,6 +174,8 @@
                 : calculateLatestDeptSocialSupplementAmount(staffOnJobDto);
         BigDecimal pieceSalary = normalizeMoney(getBigDecimal(map, "pieceSalary"));
         BigDecimal hourlySalary = normalizeMoney(getBigDecimal(map, "hourlySalary"));
+        // 鍔犵彮宸ヨ祫锛氭墜宸ュ~鍐欙紝涓嶆寜鍊嶇巼鑷姩璁$畻
+        BigDecimal overtimePay = normalizeMoney(getBigDecimal(map, "overtimePay"));
         BigDecimal socialPersonal = BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);
         BigDecimal fundPersonal = BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);
 
@@ -202,7 +206,7 @@
             }
         }
 
-        BigDecimal grossSalary = basicSalary.add(pieceSalary).add(hourlySalary).add(otherIncome);
+        BigDecimal grossSalary = basicSalary.add(pieceSalary).add(hourlySalary).add(overtimePay).add(otherIncome);
         BigDecimal salaryTax = TaxCalculator.calculateMonthlyTax(
                 grossSalary,
                 socialPersonal.add(socialSupplementAmount),
@@ -213,7 +217,12 @@
                 .add(socialPersonal)
                 .add(socialSupplementAmount)
                 .add(otherDeduct);
-        BigDecimal netSalary = grossSalary.subtract(deductSalary);
+        // 搴旀墸宸ヨ祫锛堟墜鍔ㄥ~鍐欙級锛屼粠瀹炲彂宸ヨ祫涓墸闄�
+        BigDecimal manualDeduct = normalizeMoney(getBigDecimal(map, "manualDeduct"));
+        BigDecimal netSalary = grossSalary.subtract(deductSalary).subtract(manualDeduct);
+
+        // 璇峰亣娆℃暟銆佺己鍕ゆ鏁般�佽繜鍒版鏁般�佹棭閫�娆℃暟锛岃鍋囧師鍥犺嚜鍔ㄥ甫鍏ュ娉紙澶囨敞宸插~鍐欐椂淇濈暀鍘熷娉級
+        SalaryStat salaryStat = salaryStatService.stat(staffId, staffOnJobDto.getStaffName(), date);
 
         if (!hasText(map, "staffName")) {
             map.put("staffName", staffOnJobDto.getStaffName());
@@ -224,6 +233,8 @@
         map.put("basicSalary", basicSalary);
         map.put("pieceSalary", pieceSalary);
         map.put("hourlySalary", hourlySalary);
+        map.put("overtimeHours", salaryStat.getOvertimeHours());
+        map.put("overtimePay", overtimePay);
         map.put("otherIncome", otherIncome);
         map.put("socialPersonal", socialPersonal);
         map.put("fundPersonal", fundPersonal);
@@ -232,7 +243,15 @@
         map.put("grossSalary", grossSalary);
         map.put("salaryTax", salaryTax);
         map.put("deductSalary", deductSalary);
+        map.put("leaveCount", salaryStat.getLeaveCount());
+        map.put("absenceCount", salaryStat.getAbsenceCount());
+        map.put("lateCount", salaryStat.getLateCount());
+        map.put("earlyCount", salaryStat.getEarlyCount());
+        map.put("manualDeduct", manualDeduct);
         map.put("netSalary", netSalary);
+        if (!hasText(map, "remark") && StringUtils.isNotEmpty(salaryStat.getLeaveReason())) {
+            map.put("remark", salaryStat.getLeaveReason());
+        }
     }
 
     /**

--
Gitblit v1.9.3