From ba100c651a81162a9a9a4533ff4d072f2889171a Mon Sep 17 00:00:00 2001
From: tuqin <tuqin@tuqin.cn>
Date: 星期五, 06 十一月 2026 09:38:46 +0800
Subject: [PATCH] fix(hrm): 考勤统计支持员工姓名搜索;缺卡统计补全(与考勤记录联动)
---
yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/employee/HrmEmployeeServiceImpl.java | 69 ++++++++++++++++++++++++++++++++++
1 files changed, 69 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 f2a01a6..23778f5 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
@@ -40,6 +40,7 @@
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserCreateReqDTO;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserUpdateReqDTO;
import jakarta.annotation.Resource;
+import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -69,7 +70,11 @@
*/
@Service
@Validated
+@Slf4j
public class HrmEmployeeServiceImpl implements HrmEmployeeService {
+
+ /** 鍛樺伐鐘舵�侊細绂昏亴锛�1-鍦ㄨ亴锛�2-璇曠敤锛�3-绂昏亴锛� */
+ private static final Integer EMPLOYEE_STATUS_RESIGNED = 3;
@Resource
private HrmEmployeeMapper employeeMapper;
@@ -369,7 +374,63 @@
@Override
public List<HrmEmployeeDO> getEmployeeList(Collection<Long> ids) {
+ // 闃插尽锛歁yBatis-Plus 鐨� selectByIds(null) 浼氭姏
+ // BuilderException: The expression 'coll' evaluated to a null value
+ if (CollUtil.isEmpty(ids)) {
+ return new ArrayList<>();
+ }
return employeeMapper.selectByIds(ids);
+ }
+
+ @Override
+ public List<HrmEmployeeDO> getEmployeeListByStatus(Integer employeeStatus) {
+ return employeeMapper.selectListByStatus(employeeStatus);
+ }
+
+ @Override
+ public void syncEmployeeTransfer(Long employeeId, Long targetDeptId, Long targetPostId) {
+ if (employeeId == null) {
+ return;
+ }
+ HrmEmployeeDO employee = employeeMapper.selectById(employeeId);
+ if (employee == null) {
+ log.warn("[syncEmployeeTransfer][鍛樺伐({}) 涓嶅瓨鍦紝璺宠繃璋冨矖鍚屾]", employeeId);
+ return;
+ }
+ if (targetDeptId == null && targetPostId == null) {
+ return;
+ }
+ HrmEmployeeDO updateObj = new HrmEmployeeDO();
+ updateObj.setId(employeeId);
+ if (targetDeptId != null) {
+ updateObj.setDeptId(targetDeptId);
+ }
+ if (targetPostId != null) {
+ // hrm_employee.post_ids 瀛� JSON 鏁扮粍瀛楃涓诧紝濡� [38]
+ updateObj.setPostIds(JSONUtil.toJsonStr(java.util.List.of(targetPostId)));
+ }
+ employeeMapper.updateById(updateObj);
+ log.info("[syncEmployeeTransfer][鍛樺伐({}) 璋冨矖鐢熸晥锛氶儴闂� {} -> {}锛屽矖浣� -> {}]",
+ employeeId, employee.getDeptId(), targetDeptId, targetPostId);
+ }
+
+ @Override
+ public void syncEmployeeResignation(Long systemUserId, java.time.LocalDate leaveDate) {
+ if (systemUserId == null) {
+ return;
+ }
+ HrmEmployeeDO employee = employeeMapper.selectByUserId(systemUserId);
+ if (employee == null) {
+ log.warn("[syncEmployeeResignation][绯荤粺鐢ㄦ埛({}) 娌℃湁瀵瑰簲鍛樺伐妗f锛岃烦杩囩鑱屽悓姝", systemUserId);
+ return;
+ }
+ employeeMapper.updateById(HrmEmployeeDO.builder()
+ .id(employee.getId())
+ .employeeStatus(EMPLOYEE_STATUS_RESIGNED)
+ .leaveDate(leaveDate != null ? leaveDate : java.time.LocalDate.now())
+ .build());
+ log.info("[syncEmployeeResignation][鍛樺伐({}) 绂昏亴鐢熸晥锛岀姸鎬� {} -> {}]",
+ employee.getId(), employee.getEmployeeStatus(), EMPLOYEE_STATUS_RESIGNED);
}
@Override
@@ -459,6 +520,14 @@
}
@Override
+ public List<HrmEmployeeDO> getEmployeeListByNameLike(String name) {
+ if (StrUtil.isBlank(name)) {
+ return new ArrayList<>();
+ }
+ return employeeMapper.selectListByNameLike(name.trim());
+ }
+
+ @Override
public HrmEmployeeImportRespVO importEmployeeList(List<HrmEmployeeImportExcelVO> importEmployees,
HrmEmployeeImportReqVO importReqVO) {
// 1. 鏍¢獙闈炵┖
--
Gitblit v1.9.3