From fdbc5af6474abb39120b771af87005aeb6186ae5 Mon Sep 17 00:00:00 2001
From: tuqin <tuqin@tuqin.cn>
Date: 星期一, 14 九月 2026 15:28:28 +0800
Subject: [PATCH] feat: 售后工单按条绑定部门与原因类型;新增加班工资管理;员工附件留档

---
 yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/employee/HrmEmployeeServiceImpl.java |   22 ++++++++++++++++++++++
 1 files changed, 22 insertions(+), 0 deletions(-)

diff --git a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/employee/HrmEmployeeServiceImpl.java b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/employee/HrmEmployeeServiceImpl.java
index c326a89..92a709e 100644
--- a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/employee/HrmEmployeeServiceImpl.java
+++ b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/employee/HrmEmployeeServiceImpl.java
@@ -31,6 +31,8 @@
 import cn.iocoder.yudao.module.system.api.dept.dto.PostRespDTO;
 import cn.iocoder.yudao.module.system.api.permission.RoleApi;
 import cn.iocoder.yudao.module.system.api.permission.dto.RoleRespDTO;
+import cn.iocoder.yudao.module.system.api.storage.StorageAttachmentApi;
+import cn.iocoder.yudao.module.system.api.storage.dto.StorageBlobRespDTO;
 import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
 import cn.iocoder.yudao.module.system.api.user.dto.AdminUserCreateReqDTO;
 import cn.iocoder.yudao.module.system.api.user.dto.AdminUserUpdateReqDTO;
@@ -83,6 +85,8 @@
     @Resource
     private RoleApi roleApi;
     @Resource
+    private StorageAttachmentApi storageAttachmentApi;
+    @Resource
     @Lazy // 鑷敞鍏ラ渶寤惰繜鍔犺浇锛屽惁鍒� bean 琚唬鐞嗗寘瑁呭悗娉ㄥ叆鍘熷鐗堟湰瀵艰嚧鍚姩澶辫触
     private HrmEmployeeService self;
 
@@ -129,6 +133,8 @@
         }
         employeeMapper.insert(employee);
         Long employeeId = employee.getId();
+        // 缁戝畾闄勪欢
+        storageAttachmentApi.bindAttachments("file", "hrm_employee", employeeId, createReqVO.getBlobIds());
         // 7. 鍚屾娣诲姞鏁欒偛缁忓巻
         if (CollUtil.isNotEmpty(createReqVO.getEducations())) {
             createReqVO.getEducations().forEach(educationVO -> {
@@ -210,6 +216,8 @@
         syncWorkHistoryList(employeeId, updateReqVO.getWorkHistories());
         // 鍚屾绱ф�ヨ仈绯讳汉
         syncEmergencyContactList(employeeId, updateReqVO.getEmergencyContacts());
+        // 鏇存柊闄勪欢
+        storageAttachmentApi.updateAttachments("file", "hrm_employee", employeeId, updateReqVO.getBlobIds());
     }
 
     private void syncEducationList(Long employeeId, List<HrmEmployeeEducationSaveReqVO> newList) {
@@ -257,6 +265,8 @@
         educationMapper.deleteByEmployeeId(id);
         workHistoryMapper.deleteByEmployeeId(id);
         emergencyContactMapper.deleteByEmployeeId(id);
+        // 鍒犻櫎闄勪欢
+        storageAttachmentApi.deleteAttachmentsByRecord("hrm_employee", id);
         // 鍒犻櫎鍛樺伐
         employeeMapper.deleteById(id);
     }
@@ -311,6 +321,8 @@
                 respVO.setRoleNames(roles.stream().map(RoleRespDTO::getName).collect(Collectors.joining(",")));
             }
         }
+        // 濉厖闄勪欢
+        respVO.setAttachmentList(storageAttachmentApi.listAttachments("hrm_employee", id));
         return respVO;
     }
 
@@ -325,6 +337,16 @@
 
     @Override
     public PageResult<HrmEmployeeDO> getEmployeePage(HrmEmployeePageReqVO pageReqVO) {
+        if (pageReqVO.getDeptId() != null) {
+            // 閫変腑閮ㄩ棬鏃讹紝杩炲甫鏌ヨ鍏舵墍鏈夊瓙閮ㄩ棬鐨勫憳宸ワ紙鍚嚜韬級
+            List<DeptRespDTO> childDepts = deptApi.getChildDeptList(pageReqVO.getDeptId());
+            Set<Long> deptIds = new LinkedHashSet<>();
+            deptIds.add(pageReqVO.getDeptId());
+            if (CollUtil.isNotEmpty(childDepts)) {
+                childDepts.forEach(dept -> deptIds.add(dept.getId()));
+            }
+            return employeeMapper.selectPageByDeptIds(pageReqVO, deptIds);
+        }
         return employeeMapper.selectPage(pageReqVO);
     }
 

--
Gitblit v1.9.3