From 43aab58c9ecb1203770ba382efbdbae299ca87ec Mon Sep 17 00:00:00 2001
From: liu <2021943741@qq.com>
Date: 星期一, 26 十月 2026 15:12:31 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_business' into dev_business

---
 yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/attendance/HrmAttendanceRuleServiceImpl.java |   29 ++++++++++++++++++++++-------
 1 files changed, 22 insertions(+), 7 deletions(-)

diff --git a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/attendance/HrmAttendanceRuleServiceImpl.java b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/attendance/HrmAttendanceRuleServiceImpl.java
index aaa1ccb..1d20197 100644
--- a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/attendance/HrmAttendanceRuleServiceImpl.java
+++ b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/attendance/HrmAttendanceRuleServiceImpl.java
@@ -7,12 +7,16 @@
 import cn.iocoder.yudao.module.hrm.controller.admin.attendance.vo.HrmAttendanceRuleSaveReqVO;
 import cn.iocoder.yudao.module.hrm.dal.dataobject.attendance.HrmAttendanceRuleDO;
 import cn.iocoder.yudao.module.hrm.dal.mysql.attendance.HrmAttendanceRuleMapper;
+import cn.iocoder.yudao.module.system.api.dept.DeptApi;
+import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
 import jakarta.annotation.Resource;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
 import java.math.BigDecimal;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.iocoder.yudao.module.hrm.enums.ErrorCodeConstants.*;
@@ -28,6 +32,8 @@
 
     @Resource
     private HrmAttendanceRuleMapper attendanceRuleMapper;
+    @Resource
+    private DeptApi deptApi;
 
     @Override
     public Long createAttendanceRule(HrmAttendanceRuleSaveReqVO createReqVO) {
@@ -170,17 +176,26 @@
 
     @Override
     public HrmAttendanceRuleDO getAttendanceRuleByDeptId(Long deptId) {
-        // 1. 鍏堟煡鎵鹃儴闂ㄤ笓灞炶鍒�
-        List<HrmAttendanceRuleDO> deptRules = attendanceRuleMapper.selectList(new cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX<HrmAttendanceRuleDO>()
-                .eq(HrmAttendanceRuleDO::getDeptId, deptId)
-                .eq(HrmAttendanceRuleDO::getStatus, 0));
-        if (!deptRules.isEmpty()) {
-            return deptRules.get(0);
+        // 1. 浠庡憳宸ユ墍鍦ㄩ儴闂ㄥ紑濮嬮�愮骇鍚戜笂鏌ユ壘锛氶厤缃湪涓婄骇閮ㄩ棬鐨勮鍒欏鍏跺瓙閮ㄩ棬鐢熸晥
+        Set<Long> visitedDeptIds = new HashSet<>();
+        Long currentDeptId = deptId;
+        while (currentDeptId != null && currentDeptId != 0 && visitedDeptIds.add(currentDeptId)) {
+            List<HrmAttendanceRuleDO> deptRules = attendanceRuleMapper.selectEnabledListByDeptId(currentDeptId);
+            if (!deptRules.isEmpty()) {
+                // 鍚屼竴閮ㄩ棬锛堝銆屾�诲叕鍙搞�嶏級鍙兘閰嶇疆浜嗗鏉″惎鐢ㄨ鍒欙紝浠ユ渶鏂板垱寤虹殑涓哄綋鍓嶇敓鏁堣鍒�
+                return deptRules.get(0);
+            }
+            DeptRespDTO dept = deptApi.getDept(currentDeptId);
+            if (dept == null) {
+                break;
+            }
+            currentDeptId = dept.getParentId();
         }
         // 2. 鏌ユ壘鍏ㄥ眬瑙勫垯锛坉eptId 涓� null锛�
         List<HrmAttendanceRuleDO> globalRules = attendanceRuleMapper.selectList(new cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX<HrmAttendanceRuleDO>()
                 .isNull(HrmAttendanceRuleDO::getDeptId)
-                .eq(HrmAttendanceRuleDO::getStatus, 0));
+                .eq(HrmAttendanceRuleDO::getStatus, 0)
+                .orderByDesc(HrmAttendanceRuleDO::getId));
         if (!globalRules.isEmpty()) {
             return globalRules.get(0);
         }

--
Gitblit v1.9.3