From 52feee3e55403d2858da59605173ec055f601bfa Mon Sep 17 00:00:00 2001
From: tuqin <tuqin@tuqin.cn>
Date: 星期六, 24 十月 2026 19:47:25 +0800
Subject: [PATCH] feat(hrm): 同步新疆中亿装配的人力资源模块到北方科技
---
yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/employee/HrmEmployeeServiceImpl.java | 281 +++++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 258 insertions(+), 23 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 02e3c20..d32b4c5 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
@@ -6,6 +6,7 @@
import cn.iocoder.yudao.framework.common.exception.ServiceException;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.hrm.controller.admin.employee.vo.HrmEmployeeEducationSaveReqVO;
import cn.iocoder.yudao.module.hrm.controller.admin.employee.vo.HrmEmployeeEmergencyContactSaveReqVO;
import cn.iocoder.yudao.module.hrm.controller.admin.employee.vo.HrmEmployeeImportExcelVO;
@@ -16,10 +17,12 @@
import cn.iocoder.yudao.module.hrm.controller.admin.employee.vo.HrmEmployeeSaveReqVO;
import cn.iocoder.yudao.module.hrm.controller.admin.employee.vo.HrmEmployeeSimpleRespVO;
import cn.iocoder.yudao.module.hrm.controller.admin.employee.vo.HrmEmployeeWorkHistorySaveReqVO;
+import cn.iocoder.yudao.module.hrm.dal.dataobject.employee.HrmEmployeeContractDO;
import cn.iocoder.yudao.module.hrm.dal.dataobject.employee.HrmEmployeeDO;
import cn.iocoder.yudao.module.hrm.dal.dataobject.employee.HrmEmployeeEducationDO;
import cn.iocoder.yudao.module.hrm.dal.dataobject.employee.HrmEmployeeEmergencyContactDO;
import cn.iocoder.yudao.module.hrm.dal.dataobject.employee.HrmEmployeeWorkHistoryDO;
+import cn.iocoder.yudao.module.hrm.dal.mysql.employee.HrmEmployeeContractMapper;
import cn.iocoder.yudao.module.hrm.dal.mysql.employee.HrmEmployeeEducationMapper;
import cn.iocoder.yudao.module.hrm.dal.mysql.employee.HrmEmployeeEmergencyContactMapper;
import cn.iocoder.yudao.module.hrm.dal.mysql.employee.HrmEmployeeMapper;
@@ -31,16 +34,21 @@
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;
import jakarta.annotation.Resource;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
+import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
@@ -66,6 +74,8 @@
@Resource
private HrmEmployeeMapper employeeMapper;
@Resource
+ private HrmEmployeeContractMapper contractMapper;
+ @Resource
private HrmEmployeeEducationMapper educationMapper;
@Resource
private HrmEmployeeWorkHistoryMapper workHistoryMapper;
@@ -82,6 +92,8 @@
@Resource
private RoleApi roleApi;
@Resource
+ private StorageAttachmentApi storageAttachmentApi;
+ @Resource
@Lazy // 鑷敞鍏ラ渶寤惰繜鍔犺浇锛屽惁鍒� bean 琚唬鐞嗗寘瑁呭悗娉ㄥ叆鍘熷鐗堟湰瀵艰嚧鍚姩澶辫触
private HrmEmployeeService self;
@@ -91,7 +103,7 @@
// 1. 鏍¢獙閮ㄩ棬
deptApi.validateDeptList(Collections.singleton(createReqVO.getDeptId()));
// 2. 鏍¢獙宀椾綅
- postApi.validPostList(Collections.singleton(createReqVO.getPostId()));
+ postApi.validPostList(createReqVO.getPostIds());
// 3. 鏍¢獙鎵嬫満鍙锋槸鍚﹀凡瀛樺湪
if (employeeMapper.selectByPhone(createReqVO.getPhone()) != null) {
throw exception(EMPLOYEE_PHONE_EXISTS);
@@ -101,7 +113,7 @@
userCreateReqDTO.setUsername(createReqVO.getPhone());
userCreateReqDTO.setNickname(createReqVO.getName());
userCreateReqDTO.setDeptId(createReqVO.getDeptId());
- userCreateReqDTO.setPostIds(Collections.singleton(createReqVO.getPostId()));
+ userCreateReqDTO.setPostIds(new LinkedHashSet<>(createReqVO.getPostIds()));
userCreateReqDTO.setMobile(createReqVO.getPhone());
userCreateReqDTO.setPassword(createReqVO.getPhone());
userCreateReqDTO.setSex(createReqVO.getGender());
@@ -122,8 +134,14 @@
if (CollUtil.isNotEmpty(createReqVO.getRoleIds())) {
employee.setRoleIds(JSONUtil.toJsonStr(createReqVO.getRoleIds()));
}
+ // postIds 瀛樺偍涓� JSON
+ if (CollUtil.isNotEmpty(createReqVO.getPostIds())) {
+ employee.setPostIds(JSONUtil.toJsonStr(createReqVO.getPostIds()));
+ }
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 -> {
@@ -167,7 +185,7 @@
// 鏍¢獙閮ㄩ棬
deptApi.validateDeptList(Collections.singleton(updateReqVO.getDeptId()));
// 鏍¢獙宀椾綅
- postApi.validPostList(Collections.singleton(updateReqVO.getPostId()));
+ postApi.validPostList(updateReqVO.getPostIds());
// 鏍¢獙鎵嬫満鍙锋槸鍚﹀凡瀛樺湪锛堝鏋滄墜鏈哄彿鏈夊彉鏇达級
if (!Objects.equals(employee.getPhone(), updateReqVO.getPhone())
&& employeeMapper.selectByPhone(updateReqVO.getPhone()) != null) {
@@ -179,7 +197,24 @@
if (CollUtil.isNotEmpty(updateReqVO.getRoleIds())) {
updateObj.setRoleIds(JSONUtil.toJsonStr(updateReqVO.getRoleIds()));
}
+ // postIds 瀛樺偍涓� JSON
+ if (CollUtil.isNotEmpty(updateReqVO.getPostIds())) {
+ updateObj.setPostIds(JSONUtil.toJsonStr(updateReqVO.getPostIds()));
+ }
employeeMapper.updateById(updateObj);
+ // 鍚屾鏇存柊鍏宠仈绯荤粺鐢ㄦ埛锛堝矖浣�/閮ㄩ棬/鏄电О/瑙掕壊/閭/澶囨敞锛夛紝淇濇寔涓庣敤鎴风鐞嗕竴鑷�
+ if (employee.getUserId() != null) {
+ AdminUserUpdateReqDTO userUpdateReqDTO = new AdminUserUpdateReqDTO();
+ userUpdateReqDTO.setId(employee.getUserId());
+ userUpdateReqDTO.setNickname(updateReqVO.getName());
+ userUpdateReqDTO.setDeptId(updateReqVO.getDeptId());
+ userUpdateReqDTO.setPostIds(new LinkedHashSet<>(updateReqVO.getPostIds()));
+ userUpdateReqDTO.setRoleIds(CollUtil.isEmpty(updateReqVO.getRoleIds()) ? null
+ : new LinkedHashSet<>(updateReqVO.getRoleIds()));
+ userUpdateReqDTO.setEmail(updateReqVO.getEmail());
+ userUpdateReqDTO.setRemark(updateReqVO.getRemark());
+ adminUserApi.updateUser(userUpdateReqDTO);
+ }
Long employeeId = updateReqVO.getId();
// 鍚屾鏁欒偛缁忓巻
@@ -188,6 +223,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) {
@@ -235,6 +272,8 @@
educationMapper.deleteByEmployeeId(id);
workHistoryMapper.deleteByEmployeeId(id);
emergencyContactMapper.deleteByEmployeeId(id);
+ // 鍒犻櫎闄勪欢
+ storageAttachmentApi.deleteAttachmentsByRecord("hrm_employee", id);
// 鍒犻櫎鍛樺伐
employeeMapper.deleteById(id);
}
@@ -270,12 +309,16 @@
respVO.setDeptName(dept.getName());
}
}
- // 濉厖宀椾綅鍚嶇О
- if (employee.getPostId() != null) {
- Map<Long, PostRespDTO> postMap = postApi.getPostMap(Collections.singleton(employee.getPostId()));
- PostRespDTO post = postMap.get(employee.getPostId());
- if (post != null) {
- respVO.setPostName(post.getName());
+ // 濉厖宀椾綅淇℃伅
+ if (StrUtil.isNotBlank(employee.getPostIds())) {
+ List<Long> postIds = JSONUtil.toList(employee.getPostIds(), Long.class);
+ respVO.setPostIds(postIds);
+ if (CollUtil.isNotEmpty(postIds)) {
+ Map<Long, PostRespDTO> postMap = postApi.getPostMap(postIds);
+ respVO.setPostNames(postIds.stream()
+ .filter(postMap::containsKey)
+ .map(postId -> postMap.get(postId).getName())
+ .collect(Collectors.joining(",")));
}
}
// 濉厖瑙掕壊鍚嶇О
@@ -285,6 +328,8 @@
respVO.setRoleNames(roles.stream().map(RoleRespDTO::getName).collect(Collectors.joining(",")));
}
}
+ // 濉厖闄勪欢
+ respVO.setAttachmentList(storageAttachmentApi.listAttachments("hrm_employee", id));
return respVO;
}
@@ -299,6 +344,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);
}
@@ -316,22 +371,81 @@
.filter(Objects::nonNull)
.collect(Collectors.toSet());
Map<Long, DeptRespDTO> deptMap = deptApi.getDeptMap(deptIds);
+ // 瑙f瀽宀椾綅ID锛坧ost_ids 瀛樼殑鏄� JSON 鏁扮粍瀛楃涓诧紝濡� [38]锛夛紝骞舵壒閲忓姞杞藉矖浣嶅悕绉�
+ Map<Long, List<Long>> empPostIdsMap = new LinkedHashMap<>();
+ Set<Long> allPostIds = new LinkedHashSet<>();
+ for (HrmEmployeeDO emp : list) {
+ List<Long> postIdList = parseEmployeePostIds(emp.getPostIds());
+ empPostIdsMap.put(emp.getId(), postIdList);
+ allPostIds.addAll(postIdList);
+ }
+ Map<Long, PostRespDTO> postMap = CollUtil.isEmpty(allPostIds)
+ ? Collections.emptyMap() : postApi.getPostMap(allPostIds);
return list.stream().map(emp -> {
HrmEmployeeSimpleRespVO vo = new HrmEmployeeSimpleRespVO();
vo.setId(emp.getId());
vo.setEmployeeNo(emp.getEmployeeNo());
vo.setName(emp.getName());
vo.setEmployeeStatus(emp.getEmployeeStatus());
+ vo.setDeptId(emp.getDeptId());
if (emp.getDeptId() != null && deptMap.containsKey(emp.getDeptId())) {
vo.setDeptName(deptMap.get(emp.getDeptId()).getName());
+ }
+ // 宀椾綅淇℃伅锛堢敤浜庤皟宀楃瓑鍦烘櫙鑷姩甯﹀嚭鍘熷矖浣嶏級
+ List<Long> postIdList = empPostIdsMap.getOrDefault(emp.getId(), Collections.emptyList());
+ vo.setPostIds(postIdList);
+ if (CollUtil.isNotEmpty(postIdList)) {
+ vo.setPostName(postIdList.stream()
+ .map(postMap::get)
+ .filter(Objects::nonNull)
+ .map(PostRespDTO::getName)
+ .collect(Collectors.joining(",")));
}
return vo;
}).collect(Collectors.toList());
}
+ /**
+ * 瑙f瀽鍛樺伐鐨勫矖浣岻D瀛楃涓诧紙JSON 鏁扮粍鏍煎紡锛屽 [38] 鎴� [1,2]锛�
+ */
+
+ /**
+ * 瑙f瀽鍛樺伐宀椾綅ID瀛楃涓诧紙post_ids 瀛� JSON 鏁扮粍锛屽 [38] 鎴� [1,2]锛�
+ */
+ private java.util.List<Long> parseEmployeePostIds(String postIds) {
+ if (StrUtil.isBlank(postIds)) {
+ return Collections.emptyList();
+ }
+
+ // post_ids 褰㈠ "[38]" 鎴� "[1,2]"锛氬幓鎺変腑鎷彿鍚庢寜閫楀彿瑙f瀽
+ return Arrays.stream(postIds.replace("[", "").replace("]", "").split(","))
+ .map(String::trim)
+ .filter(StrUtil::isNotBlank)
+ .map(s -> {
+ try {
+ return Long.valueOf(s);
+ } catch (NumberFormatException ex) {
+ return null;
+ }
+ })
+ .filter(Objects::nonNull)
+ .collect(Collectors.toList());
+ }
+
+
@Override
public HrmEmployeeDO getEmployeeByUserId(Long userId) {
return employeeMapper.selectByUserId(userId);
+ }
+
+ @Override
+ public HrmEmployeeDO getEmployeeByName(String name) {
+ return employeeMapper.selectByName(name);
+ }
+
+ @Override
+ public List<HrmEmployeeDO> getEmployeeListByName(String name) {
+ return employeeMapper.selectListByName(name);
}
@Override
@@ -360,10 +474,10 @@
try {
// 3.1 鍚嶇О杞� ID
Long deptId = parseDeptId(importEmployee.getDeptName(), deptMap);
- Long postId = parsePostId(importEmployee.getPostName(), postMap);
+ Set<Long> postIds = parsePostIds(importEmployee.getPostName(), postMap);
Set<Long> roleIds = parseRoleIds(importEmployee.getRoleNames(), roleMap);
// 3.2 鏋勫缓淇濆瓨璇锋眰
- HrmEmployeeSaveReqVO saveReqVO = buildImportSaveReqVO(importEmployee, deptId, postId, roleIds);
+ HrmEmployeeSaveReqVO saveReqVO = buildImportSaveReqVO(importEmployee, deptId, postIds, roleIds);
// 3.3 鍒ゆ柇瀛樺湪鎬э細鎸夋墜鏈哄彿
HrmEmployeeDO existEmployee = employeeMapper.selectByPhone(importEmployee.getPhone());
if (existEmployee == null) {
@@ -388,28 +502,29 @@
}
private HrmEmployeeSaveReqVO buildImportSaveReqVO(HrmEmployeeImportExcelVO importEmployee,
- Long deptId, Long postId, Set<Long> roleIds) {
+ Long deptId, Set<Long> postIds, Set<Long> roleIds) {
if (StrUtil.isBlank(importEmployee.getName())) {
throw exception(EMPLOYEE_IMPORT_FIELD_REQUIRED, "鍛樺伐濮撳悕");
}
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());
reqVO.setGender(importEmployee.getGender() != null ? importEmployee.getGender() : 1); // 榛樿鐢�
reqVO.setPhone(importEmployee.getPhone());
reqVO.setDeptId(deptId);
- reqVO.setPostId(postId);
+ 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());
@@ -417,6 +532,11 @@
reqVO.setEducation(importEmployee.getEducation());
reqVO.setPoliticalStatus(importEmployee.getPoliticalStatus());
reqVO.setRemark(importEmployee.getRemark());
+ reqVO.setEmployeeCategory(importEmployee.getEmployeeCategory());
+ reqVO.setBaseSalary(importEmployee.getBaseSalary());
+ reqVO.setBankName(importEmployee.getBankName());
+ reqVO.setBankAccount(importEmployee.getBankAccount());
+ reqVO.setAddress(importEmployee.getAddress());
return reqVO;
}
@@ -431,15 +551,26 @@
return dept.getId();
}
- private Long parsePostId(String postName, Map<String, PostRespDTO> postMap) {
- if (StrUtil.isBlank(postName)) {
+ private Set<Long> parsePostIds(String postNames, Map<String, PostRespDTO> postMap) {
+ if (StrUtil.isBlank(postNames)) {
throw exception(EMPLOYEE_IMPORT_FIELD_REQUIRED, "宀椾綅鍚嶇О");
}
- PostRespDTO post = postMap.get(postName.trim());
- if (post == null) {
- throw exception(EMPLOYEE_POST_NAME_NOT_EXISTS, postName.trim());
+ Set<Long> postIds = new LinkedHashSet<>();
+ for (String postName : postNames.split("[,锛宂")) {
+ String trimmed = postName.trim();
+ if (StrUtil.isBlank(trimmed)) {
+ continue;
+ }
+ PostRespDTO post = postMap.get(trimmed);
+ if (post == null) {
+ throw exception(EMPLOYEE_POST_NAME_NOT_EXISTS, trimmed);
+ }
+ postIds.add(post.getId());
}
- return post.getId();
+ if (CollUtil.isEmpty(postIds)) {
+ throw exception(EMPLOYEE_IMPORT_FIELD_REQUIRED, "宀椾綅鍚嶇О");
+ }
+ return postIds;
}
private Set<Long> parseRoleIds(String roleNames, Map<String, RoleRespDTO> roleMap) {
@@ -461,4 +592,108 @@
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
+ public void regularizeEmployee(Long id) {
+ validateEmployee(id);
+ HrmEmployeeContractDO contract = findCurrentContract(id);
+ // 浠呫�屽姵鍔ㄥ悎鍚屻�嶅彲杞锛涘姵鍔″悎鍚屼笉杞
+ if (contract == null || !Integer.valueOf(1).equals(contract.getContractType())) {
+ throw exception(EMPLOYEE_REGULARIZE_NEED_LABOR_CONTRACT);
+ }
+ HrmEmployeeDO updateObj = new HrmEmployeeDO();
+ updateObj.setId(id);
+ updateObj.setEmployeeStatus(1); // 1-鍦ㄨ亴
+ updateObj.setRegularDate(LocalDate.now());
+ employeeMapper.updateById(updateObj);
+ }
+
+ @Override
+ public List<HrmEmployeeDO> getRegularizeReminderList(Integer days) {
+ int aheadDays = days == null ? 7 : days;
+ LocalDate limit = LocalDate.now().plusDays(aheadDays);
+ // 璇曠敤涓殑鍛樺伐
+ List<HrmEmployeeDO> trials = employeeMapper.selectList(
+ new LambdaQueryWrapperX<HrmEmployeeDO>().eq(HrmEmployeeDO::getEmployeeStatus, 2));
+ List<HrmEmployeeDO> result = new ArrayList<>();
+ for (HrmEmployeeDO employee : trials) {
+ HrmEmployeeContractDO contract = findCurrentContract(employee.getId());
+ // 浠呭姵鍔ㄥ悎鍚屻�佷笖璇曠敤鏈熷嵆灏嗗埌鏈�
+ if (contract == null || !Integer.valueOf(1).equals(contract.getContractType())) {
+ continue;
+ }
+ LocalDate probationEnd = contract.getProbationEndDate();
+ if (probationEnd != null && !probationEnd.isAfter(limit)) {
+ result.add(employee);
+ }
+ }
+ return result;
+ }
+
+ /** 鏌ヨ鍛樺伐褰撳墠鐢熸晥鍚堝悓 */
+ private HrmEmployeeContractDO findCurrentContract(Long employeeId) {
+ List<HrmEmployeeContractDO> list = contractMapper.selectListByEmployee(employeeId);
+ if (CollUtil.isEmpty(list)) {
+ return null;
+ }
+ for (HrmEmployeeContractDO contract : list) {
+ if (Boolean.TRUE.equals(contract.getIsCurrent())) {
+ return contract;
+ }
+ }
+ return null;
+ }
+
}
\ No newline at end of file
--
Gitblit v1.9.3