From 21898888e7781959f746b1fe6814f7353ab4810f Mon Sep 17 00:00:00 2001
From: liu <2021943741@qq.com>
Date: 星期五, 21 八月 2026 17:03:14 +0800
Subject: [PATCH] 考勤记录下载模板 导入计算迟到加班正常打卡

---
 yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/attendance/vo/HrmAttendanceRecordImportReqVO.java   |   18 +++
 yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/attendance/vo/HrmAttendanceRecordImportExcelVO.java |   51 ++++++++++
 yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/employee/HrmEmployeeServiceImpl.java                         |   10 ++
 yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/attendance/HrmAttendanceRecordController.java       |  102 ++++++++++++++++++++
 yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/attendance/HrmAttendanceRecordService.java                   |    6 +
 yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/employee/HrmEmployeeService.java                             |    6 +
 yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/attendance/HrmAttendanceRecordServiceImpl.java               |   80 ++++++++++++++++
 yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/attendance/vo/HrmAttendanceRecordRespVO.java        |    4 
 yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/dal/mysql/employee/HrmEmployeeMapper.java                            |    8 +
 9 files changed, 285 insertions(+), 0 deletions(-)

diff --git a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/attendance/HrmAttendanceRecordController.java b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/attendance/HrmAttendanceRecordController.java
index e99c45f..9f94ad3 100644
--- a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/attendance/HrmAttendanceRecordController.java
+++ b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/attendance/HrmAttendanceRecordController.java
@@ -7,6 +7,8 @@
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+import cn.iocoder.yudao.module.hrm.controller.admin.attendance.vo.HrmAttendanceRecordImportExcelVO;
+import cn.iocoder.yudao.module.hrm.controller.admin.attendance.vo.HrmAttendanceRecordImportReqVO;
 import cn.iocoder.yudao.module.hrm.controller.admin.attendance.vo.HrmAttendanceRecordPageReqVO;
 import cn.iocoder.yudao.module.hrm.controller.admin.attendance.vo.HrmAttendanceRecordRespVO;
 import cn.iocoder.yudao.module.hrm.dal.dataobject.attendance.HrmAttendanceRecordDO;
@@ -142,6 +144,7 @@
             HrmEmployeeDO employee = employeeMap.get(respVO.getUserId());
             if (employee != null) {
                 respVO.setUserName(employee.getName());
+                respVO.setPhone(employee.getPhone());
             }
             // 閮ㄩ棬鍚嶇О
             DeptRespDTO dept = deptMap.get(respVO.getDeptId());
@@ -166,6 +169,7 @@
             HrmEmployeeDO employee = employeeService.getEmployee(attendanceRecord.getUserId());
             if (employee != null) {
                 respVO.setUserName(employee.getName());
+                respVO.setPhone(employee.getPhone());
             }
         }
         if (attendanceRecord.getDeptId() != null) {
@@ -177,6 +181,104 @@
         return success(respVO);
     }
 
+    @GetMapping("/get-import-template")
+    @Operation(summary = "涓嬭浇鑰冨嫟璁板綍瀵煎叆妯℃澘")
+    @PreAuthorize("@ss.hasPermission('hrm:attendance-record:import')")
+    public void importTemplate(HttpServletResponse response) throws IOException {
+        List<HrmAttendanceRecordImportExcelVO> list = Collections.singletonList(
+                HrmAttendanceRecordImportExcelVO.builder()
+                        .userName("寮犱笁")
+                        .phone("13800138000")
+                        .date(java.time.LocalDate.of(2026, 1, 15))
+                        .clockInTime(java.time.LocalDateTime.of(2026, 1, 15, 8, 30))
+                        .clockOutTime(java.time.LocalDateTime.of(2026, 1, 15, 17, 30))
+                        .clockInType(1)
+                        .clockOutType(1)
+                        .location("鍔炲叕鍖�")
+                        .remark("绀轰緥鏁版嵁")
+                        .build()
+        );
+        ExcelUtils.write(response, "鑰冨嫟瀵煎叆妯℃澘.xls", "鑰冨嫟璁板綍", HrmAttendanceRecordImportExcelVO.class, list);
+    }
+
+    @PostMapping("/import")
+    @Operation(summary = "瀵煎叆鑰冨嫟璁板綍")
+    @PreAuthorize("@ss.hasPermission('hrm:attendance-record:import')")
+    public CommonResult<String> importExcel(@Valid HrmAttendanceRecordImportReqVO importReqVO) throws IOException {
+        List<HrmAttendanceRecordImportExcelVO> list = ExcelUtils.read(importReqVO.getFile(), HrmAttendanceRecordImportExcelVO.class);
+        if (CollUtil.isEmpty(list)) {
+            return success("娌℃湁鍙鍏ョ殑鏁版嵁");
+        }
+        int successCount = 0;
+        Set<String> missingNames = new LinkedHashSet<>();
+        Set<String> duplicateNames = new LinkedHashSet<>();
+        Set<String> invalidRows = new LinkedHashSet<>();
+        for (HrmAttendanceRecordImportExcelVO item : list) {
+            if (item.getDate() == null) {
+                invalidRows.add((item.getUserName() == null || item.getUserName().isBlank()) ? "鏈~濮撳悕鐨勮" : "鑰冨嫟鏃ユ湡涓虹┖(" + item.getUserName().trim() + ")");
+                continue;
+            }
+            if (item.getUserName() == null || item.getUserName().isBlank()) {
+                invalidRows.add("鑰冨嫟鏃ユ湡涓� " + item.getDate() + " 浣嗘湭濉憳宸ュ鍚�");
+                continue;
+            }
+            List<HrmEmployeeDO> employees = employeeService.getEmployeeListByName(item.getUserName().trim());
+            if (employees.isEmpty()) {
+                missingNames.add(item.getUserName().trim());
+                continue;
+            }
+            HrmEmployeeDO employee = employees.get(0);
+            // 瀛樺湪澶氫釜鍚屽悕鍛樺伐鏃讹紝鐢ㄦ墜鏈哄彿鍖哄垎
+            if (employees.size() > 1) {
+                String phone = item.getPhone() != null ? item.getPhone().trim() : null;
+                List<HrmEmployeeDO> matchedByPhone = new ArrayList<>();
+                if (phone != null && !phone.isEmpty()) {
+                    for (HrmEmployeeDO emp : employees) {
+                        if (phone.equals(emp.getPhone())) {
+                            matchedByPhone.add(emp);
+                        }
+                    }
+                }
+                if (matchedByPhone.size() == 1) {
+                    employee = matchedByPhone.get(0);
+                } else {
+                    duplicateNames.add(item.getUserName().trim());
+                    continue;
+                }
+            }
+            HrmAttendanceRecordDO record = attendanceRecordService.getAttendanceRecordByUserIdAndDate(employee.getId(), item.getDate());
+            if (record == null) {
+                record = HrmAttendanceRecordDO.builder()
+                        .userId(employee.getId()).deptId(employee.getDeptId()).date(item.getDate())
+                        .clockInTime(item.getClockInTime()).clockOutTime(item.getClockOutTime())
+                        .clockInType(item.getClockInType()).clockOutType(item.getClockOutType())
+                        .location(item.getLocation()).remark(item.getRemark())
+                        .dataSource(2).build();
+                attendanceRecordService.createImportedRecord(record);
+            } else if (Boolean.TRUE.equals(importReqVO.getUpdateSupport())) {
+                record.setClockInTime(item.getClockInTime());
+                record.setClockOutTime(item.getClockOutTime());
+                record.setClockInType(item.getClockInType());
+                record.setClockOutType(item.getClockOutType());
+                record.setLocation(item.getLocation());
+                record.setRemark(item.getRemark());
+                attendanceRecordService.updateImportedRecord(record);
+            }
+            successCount++;
+        }
+        StringBuilder msg = new StringBuilder("鎴愬姛瀵煎叆 " + successCount + " 鏉�");
+        if (!missingNames.isEmpty()) {
+            msg.append("锛涗互涓嬪憳宸ヤ笉瀛樺湪锛屾湭鑳藉鍏ワ細").append(String.join("銆�", missingNames));
+        }
+        if (!duplicateNames.isEmpty()) {
+            msg.append("锛涗互涓嬪憳宸ュ瓨鍦ㄥ鍚嶅悓鍚嶅憳宸ワ紝闇�琛ュ厖鎵嬫満鍙峰尯鍒嗭紝鏈兘瀵煎叆锛�").append(String.join("銆�", duplicateNames));
+        }
+        if (!invalidRows.isEmpty()) {
+            msg.append("锛涗互涓嬭褰曟暟鎹笉瀹屾暣锛屾湭鑳藉鍏ワ細").append(String.join("銆�", invalidRows));
+        }
+        return success(msg.toString());
+    }
+
     @GetMapping("/export-excel")
     @Operation(summary = "瀵煎嚭鑰冨嫟璁板綍 Excel")
     @PreAuthorize("@ss.hasPermission('hrm:attendance:export')")
diff --git a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/attendance/vo/HrmAttendanceRecordImportExcelVO.java b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/attendance/vo/HrmAttendanceRecordImportExcelVO.java
new file mode 100644
index 0000000..44e4ee1
--- /dev/null
+++ b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/attendance/vo/HrmAttendanceRecordImportExcelVO.java
@@ -0,0 +1,51 @@
+package cn.iocoder.yudao.module.hrm.controller.admin.attendance.vo;
+
+import cn.idev.excel.annotation.ExcelProperty;
+import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
+import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * 鑰冨嫟璁板綍 Excel 瀵煎叆妯℃澘 VO
+ */
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class HrmAttendanceRecordImportExcelVO {
+
+    @ExcelProperty("鍛樺伐濮撳悕")
+    private String userName;
+
+    @ExcelProperty("鎵嬫満鍙�")
+    private String phone;
+
+    @ExcelProperty("鑰冨嫟鏃ユ湡")
+    private LocalDate date;
+
+    @ExcelProperty("涓婄彮鎵撳崱鏃堕棿")
+    private LocalDateTime clockInTime;
+
+    @ExcelProperty("涓嬬彮鎵撳崱鏃堕棿")
+    private LocalDateTime clockOutTime;
+
+    @ExcelProperty(value = "涓婄彮鎵撳崱绫诲瀷", converter = DictConvert.class)
+    @DictFormat("hrm_clock_type")
+    private Integer clockInType;
+
+    @ExcelProperty(value = "涓嬬彮鎵撳崱绫诲瀷", converter = DictConvert.class)
+    @DictFormat("hrm_clock_type")
+    private Integer clockOutType;
+
+    @ExcelProperty("鎵撳崱鍦扮偣")
+    private String location;
+
+    @ExcelProperty("澶囨敞")
+    private String remark;
+}
diff --git a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/attendance/vo/HrmAttendanceRecordImportReqVO.java b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/attendance/vo/HrmAttendanceRecordImportReqVO.java
new file mode 100644
index 0000000..c509a13
--- /dev/null
+++ b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/attendance/vo/HrmAttendanceRecordImportReqVO.java
@@ -0,0 +1,18 @@
+package cn.iocoder.yudao.module.hrm.controller.admin.attendance.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+import org.springframework.web.multipart.MultipartFile;
+
+@Schema(description = "绠$悊鍚庡彴 - 鑰冨嫟璁板綍瀵煎叆 Request VO")
+@Data
+public class HrmAttendanceRecordImportReqVO {
+
+    @Schema(description = "Excel 鏂囦欢", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "Excel 鏂囦欢涓嶈兘涓虹┖")
+    private MultipartFile file;
+
+    @Schema(description = "鏄惁瑕嗙洊宸插瓨鍦ㄧ殑鏁版嵁")
+    private Boolean updateSupport = false;
+}
diff --git a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/attendance/vo/HrmAttendanceRecordRespVO.java b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/attendance/vo/HrmAttendanceRecordRespVO.java
index 67215a6..7b91afa 100644
--- a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/attendance/vo/HrmAttendanceRecordRespVO.java
+++ b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/attendance/vo/HrmAttendanceRecordRespVO.java
@@ -34,6 +34,10 @@
     @ExcelProperty("閮ㄩ棬鍚嶇О")
     private String deptName;
 
+    @Schema(description = "鎵嬫満鍙�")
+    @ExcelProperty("鎵嬫満鍙�")
+    private String phone;
+
     @Schema(description = "鑰冨嫟鏃ユ湡")
     @ExcelProperty("鑰冨嫟鏃ユ湡")
     private LocalDate date;
diff --git a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/dal/mysql/employee/HrmEmployeeMapper.java b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/dal/mysql/employee/HrmEmployeeMapper.java
index 6265746..19ab24b 100644
--- a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/dal/mysql/employee/HrmEmployeeMapper.java
+++ b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/dal/mysql/employee/HrmEmployeeMapper.java
@@ -21,6 +21,14 @@
         return selectOne(HrmEmployeeDO::getPhone, phone);
     }
 
+    default HrmEmployeeDO selectByName(String name) {
+        return selectOne(HrmEmployeeDO::getName, name);
+    }
+
+    default List<HrmEmployeeDO> selectListByName(String name) {
+        return selectList(HrmEmployeeDO::getName, name);
+    }
+
     default HrmEmployeeDO selectByEmployeeNo(String employeeNo) {
         return selectOne(HrmEmployeeDO::getEmployeeNo, employeeNo);
     }
diff --git a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/attendance/HrmAttendanceRecordService.java b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/attendance/HrmAttendanceRecordService.java
index 352854b..25cfd62 100644
--- a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/attendance/HrmAttendanceRecordService.java
+++ b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/attendance/HrmAttendanceRecordService.java
@@ -37,6 +37,12 @@
      */
     HrmAttendanceRecordDO getAttendanceRecordByUserIdAndDate(Long userId, LocalDate date);
 
+    /** 鍒涘缓瀵煎叆鐨勮�冨嫟璁板綍 */
+    void createImportedRecord(HrmAttendanceRecordDO record);
+
+    /** 鏇存柊瀵煎叆鐨勮�冨嫟璁板綍 */
+    void updateImportedRecord(HrmAttendanceRecordDO record);
+
     /**
      * 鎵撳崱锛堜笂鐝墦鍗★級
      *
diff --git a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/attendance/HrmAttendanceRecordServiceImpl.java b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/attendance/HrmAttendanceRecordServiceImpl.java
index f7ff44c..60ba60d 100644
--- a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/attendance/HrmAttendanceRecordServiceImpl.java
+++ b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/attendance/HrmAttendanceRecordServiceImpl.java
@@ -67,6 +67,86 @@
     }
 
     @Override
+    public void createImportedRecord(HrmAttendanceRecordDO record) {
+        // 鎸夎�冨嫟瑙勫垯閲嶇畻鎵撳崱绫诲瀷涓庢椂闀匡紝涓嶄俊浠� Excel 濉啓鐨勫��
+        fillClockTypes(record);
+        fillCalculatedHours(record);
+        attendanceRecordMapper.insert(record);
+    }
+
+    @Override
+    public void updateImportedRecord(HrmAttendanceRecordDO record) {
+        fillClockTypes(record);
+        fillCalculatedHours(record);
+        attendanceRecordMapper.updateById(record);
+    }
+
+    /**
+     * 鎸夎�冨嫟瑙勫垯閲嶇畻涓婁笅鐝墦鍗$被鍨嬶紙姝e父/杩熷埌/鏃╅��锛夛紝涓庢墦鍗¢�昏緫淇濇寔涓�鑷�
+     */
+    private void fillClockTypes(HrmAttendanceRecordDO record) {
+        if (record.getDeptId() == null) {
+            return;
+        }
+        HrmAttendanceRuleDO rule = attendanceRuleService.getAttendanceRuleByDeptId(record.getDeptId());
+        if (rule == null) {
+            return;
+        }
+        // 涓婄彮鎵撳崱绫诲瀷锛氭櫄浜� 涓婄彮鏃堕棿+杩熷埌鍏佽 璁颁负杩熷埌
+        if (record.getClockInTime() != null && rule.getWorkStartTime() != null) {
+            int lateAllowMinutes = rule.getLateAllowMinutes() != null ? rule.getLateAllowMinutes() : 0;
+            LocalTime lateThreshold = rule.getWorkStartTime().plusMinutes(lateAllowMinutes);
+            LocalTime clockInOnly = record.getClockInTime().toLocalTime();
+            record.setClockInType(clockInOnly.isAfter(lateThreshold)
+                    ? HrmAttendanceClockTypeEnum.LATE.getType()
+                    : HrmAttendanceClockTypeEnum.NORMAL.getType());
+        }
+        // 涓嬬彮鎵撳崱绫诲瀷锛氭棭浜� 涓嬬彮鏃堕棿-鏃╅��鍏佽 璁颁负鏃╅��
+        if (record.getClockOutTime() != null && rule.getWorkEndTime() != null) {
+            int earlyAllowMinutes = rule.getEarlyAllowMinutes() != null ? rule.getEarlyAllowMinutes() : 0;
+            LocalTime earlyThreshold = rule.getWorkEndTime().minusMinutes(earlyAllowMinutes);
+            LocalTime clockOutOnly = record.getClockOutTime().toLocalTime();
+            record.setClockOutType(clockOutOnly.isBefore(earlyThreshold)
+                    ? HrmAttendanceClockTypeEnum.EARLY.getType()
+                    : HrmAttendanceClockTypeEnum.NORMAL.getType());
+        }
+    }
+
+    /**
+     * 鏍规嵁涓婁笅鐝墦鍗℃椂闂村拰鑰冨嫟瑙勫垯锛岃绠楀伐浣滄椂闀夸笌鍔犵彮鏃堕暱
+     */
+    private void fillCalculatedHours(HrmAttendanceRecordDO record) {
+        // 宸ヤ綔鏃堕暱 = 涓嬬彮鎵撳崱鏃堕棿 - 涓婄彮鎵撳崱鏃堕棿锛堜笌鎵撳崱閫昏緫涓�鑷达級
+        if (record.getClockInTime() != null && record.getClockOutTime() != null) {
+            Duration duration = Duration.between(record.getClockInTime(), record.getClockOutTime());
+            BigDecimal workHours = BigDecimal.valueOf(duration.toMinutes())
+                    .divide(BigDecimal.valueOf(60), 2, RoundingMode.HALF_UP);
+            record.setWorkHours(workHours);
+        }
+        // 鍔犵彮鏃堕暱锛氭寜鑰冨嫟瑙勫垯鐨勬爣鍑嗕笅鐝椂闂磋绠楄秴棰濋儴鍒�
+        if (record.getClockOutTime() != null && record.getDeptId() != null) {
+            HrmAttendanceRuleDO rule = attendanceRuleService.getAttendanceRuleByDeptId(record.getDeptId());
+            if (rule != null && rule.getWorkEndTime() != null) {
+                LocalTime workEnd = rule.getWorkEndTime();
+                LocalDate outDate = record.getClockOutTime().toLocalDate();
+                LocalDateTime workEndDateTime = LocalDateTime.of(outDate, workEnd);
+                if (record.getClockOutTime().isAfter(workEndDateTime)) {
+                    Duration overtimeDuration = Duration.between(workEndDateTime, record.getClockOutTime());
+                    BigDecimal overtimeThreshold = rule.getOvertimeThreshold() != null
+                            ? rule.getOvertimeThreshold() : BigDecimal.ZERO;
+                    BigDecimal overtimeHours = BigDecimal.valueOf(overtimeDuration.toMinutes())
+                            .divide(BigDecimal.valueOf(60), 2, RoundingMode.HALF_UP);
+                    record.setOvertimeHours(overtimeHours.compareTo(overtimeThreshold) > 0 ? overtimeHours : BigDecimal.ZERO);
+                } else {
+                    record.setOvertimeHours(BigDecimal.ZERO);
+                }
+            } else {
+                record.setOvertimeHours(BigDecimal.ZERO);
+            }
+        }
+    }
+
+    @Override
     @Transactional(rollbackFor = Exception.class)
     public HrmAttendanceRecordDO clockIn(Long userId, LocalDateTime clockTime, String location) {
         LocalDate clockDate = clockTime.toLocalDate();
diff --git a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/employee/HrmEmployeeService.java b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/employee/HrmEmployeeService.java
index 6ece4cb..90424ba 100644
--- a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/employee/HrmEmployeeService.java
+++ b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/employee/HrmEmployeeService.java
@@ -99,6 +99,12 @@
      */
     HrmEmployeeDO getEmployeeByUserId(Long userId);
 
+    /** 鏍规嵁鍛樺伐濮撳悕鑾峰彇鍛樺伐 */
+    HrmEmployeeDO getEmployeeByName(String name);
+
+    /** 鏍规嵁鍛樺伐濮撳悕鑾峰彇鎵�鏈夊悓鍚嶅憳宸� */
+    List<HrmEmployeeDO> getEmployeeListByName(String name);
+
     /**
      * 瀵煎叆鍛樺伐鍒楄〃
      *
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 02e3c20..c538b8c 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
@@ -335,6 +335,16 @@
     }
 
     @Override
+    public HrmEmployeeDO getEmployeeByName(String name) {
+        return employeeMapper.selectByName(name);
+    }
+
+    @Override
+    public List<HrmEmployeeDO> getEmployeeListByName(String name) {
+        return employeeMapper.selectListByName(name);
+    }
+
+    @Override
     public HrmEmployeeImportRespVO importEmployeeList(List<HrmEmployeeImportExcelVO> importEmployees,
                                                       HrmEmployeeImportReqVO importReqVO) {
         // 1. 鏍¢獙闈炵┖

--
Gitblit v1.9.3