From 824b3bee4d838cf26060b59e2e226c83da5cf8fc Mon Sep 17 00:00:00 2001
From: tuqin <tuqin@tuqin.cn>
Date: 星期四, 15 十月 2026 17:16:56 +0800
Subject: [PATCH] fix(hrm): 员工导入日期列容错解析(支持 2015年 / 2015-01-01 / Excel序列号),修复含非标准日期时整表报系统异常
---
yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/employee/HrmEmployeeController.java | 4 +-
yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/employee/vo/HrmEmployeeImportExcelVO.java | 4 +-
yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/employee/HrmEmployeeServiceImpl.java | 60 ++++++++++++++++++++++++++++--
3 files changed, 60 insertions(+), 8 deletions(-)
diff --git a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/employee/HrmEmployeeController.java b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/employee/HrmEmployeeController.java
index 0e07916..e1c4c6a 100644
--- a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/employee/HrmEmployeeController.java
+++ b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/employee/HrmEmployeeController.java
@@ -205,8 +205,8 @@
List<HrmEmployeeImportExcelVO> list = Arrays.asList(
HrmEmployeeImportExcelVO.builder().name("寮犱笁").gender(1).phone("13800138000")
.deptName("鐮斿彂閮�").postName("閮ㄩ棬缁忕悊,椤圭洰缁忕悊").roleNames("鏅�氱鐞嗗憳")
- .hireDate(LocalDate.of(2020, 3, 1)).employeeStatus(1)
- .idCard("320102199001150011").birthday(LocalDate.of(1990, 1, 15))
+ .hireDate("2020-03-01").employeeStatus(1)
+ .idCard("320102199001150011").birthday("1990-01-15")
.nation("姹夋棌").marriageStatus("宸插").age(36).education("鏈").politicalStatus("涓叡鍏氬憳")
.email("zhangsan@example.com").build()
);
diff --git a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/employee/vo/HrmEmployeeImportExcelVO.java b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/employee/vo/HrmEmployeeImportExcelVO.java
index 20f930f..c276c95 100644
--- a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/employee/vo/HrmEmployeeImportExcelVO.java
+++ b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/employee/vo/HrmEmployeeImportExcelVO.java
@@ -40,7 +40,7 @@
private String roleNames;
@ExcelProperty("鍏ヨ亴鏃ユ湡")
- private LocalDate hireDate;
+ private String hireDate;
@ExcelProperty(value = "鍛樺伐鐘舵��", converter = DictConvert.class)
@DictFormat("hrm_employee_status")
@@ -54,7 +54,7 @@
private String idCard;
@ExcelProperty("鍑虹敓鏃ユ湡")
- private LocalDate birthday;
+ private String birthday;
@ExcelProperty("姘戞棌")
private String nation;
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 3864fd3..54cc87d 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
@@ -459,8 +459,9 @@
if (StrUtil.isBlank(importEmployee.getPhone())) {
throw exception(EMPLOYEE_IMPORT_FIELD_REQUIRED, "鎵嬫満鍙�");
}
- if (importEmployee.getHireDate() == null) {
- throw exception(EMPLOYEE_IMPORT_FIELD_REQUIRED, "鍏ヨ亴鏃ユ湡");
+ LocalDate hireDate = parseImportDate(importEmployee.getHireDate());
+ if (hireDate == null) {
+ throw exception(EMPLOYEE_IMPORT_FIELD_REQUIRED, "鍏ヨ亴鏃ユ湡(鏍煎紡锛�2015 鎴� 2015-01-01)");
}
HrmEmployeeSaveReqVO reqVO = new HrmEmployeeSaveReqVO();
reqVO.setName(importEmployee.getName());
@@ -469,11 +470,11 @@
reqVO.setDeptId(deptId);
reqVO.setPostIds(CollUtil.isEmpty(postIds) ? null : new ArrayList<>(postIds));
reqVO.setRoleIds(CollUtil.isEmpty(roleIds) ? null : new ArrayList<>(roleIds));
- reqVO.setHireDate(importEmployee.getHireDate());
+ reqVO.setHireDate(hireDate);
reqVO.setEmployeeStatus(importEmployee.getEmployeeStatus() != null
? importEmployee.getEmployeeStatus() : 1); // 榛樿鍦ㄨ亴
reqVO.setEmail(importEmployee.getEmail());
- reqVO.setBirthday(importEmployee.getBirthday());
+ reqVO.setBirthday(parseImportDate(importEmployee.getBirthday()));
reqVO.setIdCard(importEmployee.getIdCard());
reqVO.setNation(importEmployee.getNation());
reqVO.setMarriageStatus(importEmployee.getMarriageStatus());
@@ -541,6 +542,57 @@
return roleIds;
}
+ /**
+ * 瀹归敊瑙f瀽瀵煎叆鏃ユ湡鏂囨湰锛屾敮鎸侊細2015 / 2015骞� / 2015-01 / 2015-01-02 / 2015/1/2 / 2015.1.2 /
+ * 2015-01-02 00:00:00 / 20150102锛屼互鍙� Excel 鏃ユ湡搴忓垪鍙凤紱瑙f瀽涓嶅嚭杩斿洖 null銆�
+ */
+ private static LocalDate parseImportDate(String raw) {
+ if (StrUtil.isBlank(raw)) {
+ return null;
+ }
+ String s = raw.trim();
+ // 鍘绘帀鏃堕棿閮ㄥ垎
+ int sp = s.indexOf(' ');
+ if (sp > 0) {
+ s = s.substring(0, sp);
+ }
+ // 涓枃骞存湀鏃� / 鏂滄潬 / 鐐� / 涓嬪垝绾� 缁熶竴鎴� - 鍒嗛殧
+ s = s.replace("骞�", "-").replace("鏈�", "-").replace("鏃�", "")
+ .replace("/", "-").replace(".", "-").replace("_", "-").trim();
+ s = s.replaceAll("^-+|-+$", "");
+ if (StrUtil.isBlank(s)) {
+ return null;
+ }
+ try {
+ if (s.matches("\\d+")) {
+ int len = s.length();
+ if (len == 4) { // 2015
+ return LocalDate.of(Integer.parseInt(s), 1, 1);
+ }
+ if (len == 5) { // Excel 鏃ユ湡搴忓垪鍙凤紙1900 鏃ユ湡绯荤粺锛屽熀鍑� 1899-12-30锛�
+ return LocalDate.of(1899, 12, 30).plusDays(Long.parseLong(s));
+ }
+ if (len == 6) { // 201506
+ return LocalDate.of(Integer.parseInt(s.substring(0, 4)), Integer.parseInt(s.substring(4, 6)), 1);
+ }
+ if (len == 8) { // 20150601
+ return LocalDate.of(Integer.parseInt(s.substring(0, 4)), Integer.parseInt(s.substring(4, 6)), Integer.parseInt(s.substring(6, 8)));
+ }
+ return null;
+ }
+ String[] parts = s.split("-");
+ if (parts.length == 2) { // 2015-06
+ return LocalDate.of(Integer.parseInt(parts[0]), Integer.parseInt(parts[1]), 1);
+ }
+ if (parts.length >= 3) { // 2015-06-01
+ return LocalDate.of(Integer.parseInt(parts[0]), Integer.parseInt(parts[1]), Integer.parseInt(parts[2]));
+ }
+ } catch (Exception e) {
+ return null;
+ }
+ return null;
+ }
+
// ========== 杞 ==========
@Override
--
Gitblit v1.9.3