Commit ccfdbde4 authored by 刘斌's avatar 刘斌

fix: 增加部门换成,完善变动日志

parent b00ed09c
......@@ -48,6 +48,7 @@ public class RefreshDeptCacheAspect {
// 清除部门缓存
CacheUtils.evict(HrCacheConstants.DEPT_AND_PARENT_NAME, deptId + "");
}
CacheUtils.clear(HrCacheConstants.DEPT_AND_CHILD_TREE);
} catch (Exception e) {
log.error("清除部门缓存异常", e);
......
......@@ -6,13 +6,33 @@ package com.anplus.hr.constant;
*/
public interface EmployeeChangeLogTypeConstant {
/**
* 入职
*/
String Entry = "1";
/**
* 离职
*/
String Resign = "2";
String Transfer = "3";
/**
* 调配-转入
*/
String TransferIn = "3";
String Regularization = "4";
/**
* 调配-转出
*/
String TransferOut = "4";
String RenewalContract = "5";
/**
* 转正
*/
String Regularization = "5";
/**
* 续签
*/
String RenewalContract = "6";
}
......@@ -7,7 +7,12 @@ package com.anplus.hr.constant;
public interface HrCacheConstants {
/**
* 部门及以下权限
* 部门祖级名称计划
*/
String DEPT_AND_PARENT_NAME = "dept_and_parent_name#30d";
/**
* 部门树
*/
String DEPT_AND_CHILD_TREE = "dept_and_child_tree#30d";
}
......@@ -9,6 +9,7 @@ import com.anplus.hr.domain.params.*;
import com.anplus.hr.domain.vo.EmployeeInfoImportVo;
import com.anplus.hr.domain.vo.EmployeeInfoVo;
import com.anplus.hr.service.EmployeeInfoServ;
import com.anplus.hr.service.EmployeeSysDeptServ;
import jakarta.annotation.Resource;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotEmpty;
......@@ -46,7 +47,7 @@ public class EmployeeInfoCtrl {
@Resource
private EmployeeInfoServ employeeInfoServ;
@Resource
private SysDeptServ deptService;
private EmployeeSysDeptServ employeeSysDeptServ;
/**
* 查询员工信息列表
......@@ -225,6 +226,6 @@ public class EmployeeInfoCtrl {
@SaCheckPermission("employee:info:export")
@GetMapping("/deptTree")
public MultiResponse<SysDeptDTO> deptTree(SysDeptParam dept) {
return MultiResponse.of(deptService.selectDeptTreeList(dept));
return MultiResponse.of(employeeSysDeptServ.selectDeptTreeForEmployee(dept));
}
}
\ No newline at end of file
......@@ -32,7 +32,17 @@ public class EmployeeChangeLog extends TenantModel {
private String type;
/**
* 板块
* 申请编号
*/
private String applyCode;
/**
* 板块ID
*/
private Long plateId;
/**
* 板块名称
*/
private String plate;
......
......@@ -4,6 +4,8 @@ import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import java.time.LocalDate;
/**
* @author 刘斌
* @date 2025/10/31 17:07
......@@ -43,5 +45,11 @@ public class EmployeeTransferApplyParam {
@NotNull(message = "部门id不能为空")
private Long deptId;
/**
* 调配时间
*/
@NotNull(message = "调配时间不能为空")
private LocalDate transferDate;
private String remark;
}
......@@ -51,7 +51,7 @@ public interface EmployeeChangeLogServ extends IService<EmployeeChangeLog> {
* @param changeType 变更类型
* @return 是否新增成功
*/
Boolean insertByEmployee(EmployeeInfo employeeInfo, String changeType, LocalDate changeDate);
Boolean insertByEmployee(EmployeeInfo employeeInfo, LocalDate changeDate, String changeType);
/**
* 新增员工异动记录
......
package com.anplus.hr.service;
import top.binfast.app.biz.sysapi.bean.params.sysDept.SysDeptParam;
import top.binfast.app.biz.sysapi.bean.vo.sysDept.SysDeptDTO;
import java.util.List;
import java.util.Map;
......@@ -16,6 +19,11 @@ public interface EmployeeSysDeptServ {
*/
List<String> selectDeptNameAncestorsById(Long deptId);
/**
* 查询部门树结构
*/
List<SysDeptDTO> selectDeptTreeForEmployee(SysDeptParam param);
Map<String, Long> selectJoinDeptNames();
/**
......
......@@ -21,8 +21,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import top.binfast.app.biz.sysapi.bean.model.auth.SysDept;
import top.binfast.app.biz.sysapi.dao.auth.SysDeptMapper;
import top.binfast.app.biz.sysapi.bean.vo.sysDept.SysDeptDTO;
import top.binfast.app.biz.sysbiz.service.SysDeptServ;
import top.binfast.common.core.util.MapstructUtils;
import top.binfast.common.mybatis.util.QueryUtil;
......@@ -40,7 +40,7 @@ import java.util.List;
public class EmployeeChangeLogServImpl extends ServiceImpl<EmployeeChangeLogMapper, EmployeeChangeLog> implements EmployeeChangeLogServ {
private final EmployeeChangeLogMapper employeeChangeLogMapper;
private final SysDeptMapper sysDeptMapper;
private final SysDeptServ sysDeptServ;
private final EmployeeSysDeptServ employeeSysDeptServ;
/**
......@@ -104,17 +104,20 @@ public class EmployeeChangeLogServImpl extends ServiceImpl<EmployeeChangeLogMapp
}
@Override
public Boolean insertByEmployee(EmployeeInfo employeeInfo, String changeType, LocalDate changeDate) {
SysDept childDept = sysDeptMapper.selectById(employeeInfo.getDeptId());
public Boolean insertByEmployee(EmployeeInfo employeeInfo, LocalDate changeDate, String changeType) {
SysDeptDTO childDept = sysDeptServ.selectDeptById(employeeInfo.getDeptId());
List<String> split = StrUtil.splitTrim(childDept.getNodePath(), '/');
if (split.size() < 2) {
return true;
}
Long parentDeptId = split.stream().map(Convert::toLong).filter(t -> t > 0).findFirst().get();
SysDept parentDept = sysDeptMapper.selectById(parentDeptId);
SysDeptDTO parentDept = sysDeptServ.selectDeptById(parentDeptId);
// List<EmployeeChangeLog> changeLogList = new ArrayList<>();
// for (String changeType : changeTypes) {
EmployeeChangeLog changeLog = new EmployeeChangeLog();
changeLog.setEmployeeId(employeeInfo.getId());
changeLog.setDeptId(employeeInfo.getDeptId());
changeLog.setPlateId(parentDeptId);
changeLog.setPlate(parentDept.getName());
changeLog.setType(changeType);
changeLog.setChangeDate(changeDate != null ? changeDate : LocalDate.now());
......@@ -131,6 +134,8 @@ public class EmployeeChangeLogServImpl extends ServiceImpl<EmployeeChangeLogMapp
changeLog.setResignYearsOfServiceType(hrResignYearsOfServiceTypeEnum.getCode());
}
}
// changeLogList.add(changeLog);
// }
return this.save(changeLog);
}
......
......@@ -45,6 +45,7 @@ import top.binfast.daemon.workflow.domain.event.ProcessEvent;
import top.binfast.daemon.workflow.domain.event.ProcessTaskEvent;
import top.binfast.daemon.workflow.service.WorkflowService;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
......@@ -298,7 +299,7 @@ public class EmployeeFlowServImpl extends ServiceImpl<EmployeeFlowMapper, Employ
employeeInfo.setEntryDate(LocalDateTimeUtil.parseDate(auditLog.getAfterVal(), DatePattern.NORM_DATE_PATTERN));
}
}
employeeChangeLogServ.insertByEmployee(employeeInfo, EmployeeChangeLogTypeConstant.Entry, employeeInfo.getEntryDate());
employeeChangeLogServ.insertByEmployee(employeeInfo, employeeInfo.getEntryDate(), EmployeeChangeLogTypeConstant.Entry);
break;
case HrFlowTypeConstant.REGULARIZATION_CODE:
// 转正流程结束
......@@ -352,7 +353,7 @@ public class EmployeeFlowServImpl extends ServiceImpl<EmployeeFlowMapper, Employ
break;
}
}
employeeChangeLogServ.insertByEmployee(employeeInfo, EmployeeChangeLogTypeConstant.Regularization, employeeInfo.getRegularizationDate());
employeeChangeLogServ.insertByEmployee(employeeInfo, employeeInfo.getRegularizationDate(), EmployeeChangeLogTypeConstant.Regularization);
break;
case HrFlowTypeConstant.RESIGN_CODE:
// 离职流程结束
......@@ -376,11 +377,15 @@ public class EmployeeFlowServImpl extends ServiceImpl<EmployeeFlowMapper, Employ
break;
}
}
employeeChangeLogServ.insertByEmployee(employeeInfo, EmployeeChangeLogTypeConstant.Resign, employeeInfo.getResignationDate());
employeeChangeLogServ.insertByEmployee(employeeInfo, employeeInfo.getResignationDate(), EmployeeChangeLogTypeConstant.Resign);
break;
case HrFlowTypeConstant.TRANSFER_CODE:
// 调配流程结束
EmployeeInfo oldEmployeeInfo = new EmployeeInfo();
oldEmployeeInfo.setId(employeeInfo.getId());
oldEmployeeInfo.setDeptId(employeeInfo.getDeptId());
employeeInfo.setTransferApplyStatus(HrFlowEnum.FINISH.getStatus());
LocalDate transferDate = null;
for (SysAuditLog auditLog : auditLogs) {
switch (auditLog.getAuditField()) {
case "plate":
......@@ -398,11 +403,15 @@ public class EmployeeFlowServImpl extends ServiceImpl<EmployeeFlowMapper, Employ
case "deptId":
employeeInfo.setDeptId(Convert.toLong(auditLog.getAfterVal()));
break;
case "transferDate":
transferDate = LocalDateTimeUtil.parseDate(auditLog.getAfterVal(), DatePattern.NORM_DATE_PATTERN);
break;
default:
break;
}
}
employeeChangeLogServ.insertByEmployee(employeeInfo, EmployeeChangeLogTypeConstant.Transfer, null);
employeeChangeLogServ.insertByEmployee(oldEmployeeInfo, transferDate, EmployeeChangeLogTypeConstant.TransferOut);
employeeChangeLogServ.insertByEmployee(employeeInfo, transferDate, EmployeeChangeLogTypeConstant.TransferIn);
break;
case HrFlowTypeConstant.RENEWAL_CONTRACT:
// 续签流程结束
......@@ -431,7 +440,7 @@ public class EmployeeFlowServImpl extends ServiceImpl<EmployeeFlowMapper, Employ
break;
}
}
employeeChangeLogServ.insertByEmployee(employeeInfo, EmployeeChangeLogTypeConstant.RenewalContract, employeeInfo.getContractStartDate());
employeeChangeLogServ.insertByEmployee(employeeInfo, employeeInfo.getContractStartDate(), EmployeeChangeLogTypeConstant.RenewalContract);
break;
default: {
// 其他流程结束
......
......@@ -509,6 +509,8 @@ public class EmployeeInfoServImpl extends ServiceImpl<EmployeeInfoMapper, Employ
"三级部门", param.getThirdLevelDepartment(), list);
employeeAuditLogServ.initAuditLog("调职申请", "deptId",
"部门序号", Convert.toStr(param.getDeptId()), list);
employeeAuditLogServ.initAuditLog("调职申请", "transferDate",
"调配时间", Convert.toStr(param.getTransferDate()), list);
employeeAuditLogServ.saveAuditLogs(list);
String logIds = LambdaUtil.join(list, (item) -> item.getId() + StrUtil.EMPTY, StrUtil.COMMA);
......
......@@ -10,6 +10,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import top.binfast.app.biz.sysapi.bean.model.auth.SysDept;
import top.binfast.app.biz.sysapi.bean.params.sysDept.SysDeptParam;
import top.binfast.app.biz.sysapi.bean.vo.sysDept.SysDeptDTO;
import top.binfast.app.biz.sysapi.dao.auth.SysDeptMapper;
import top.binfast.app.biz.sysbiz.service.SysDeptServ;
......@@ -45,6 +46,12 @@ public class EmployeeSysDeptServImpl implements EmployeeSysDeptServ {
return LambdaUtil.mapToList(deptNameList, SysDept::getName);
}
@Cacheable(cacheNames = HrCacheConstants.DEPT_AND_CHILD_TREE, key = "'" + HrCacheConstants.DEPT_AND_CHILD_TREE + "'" )
@Override
public List<SysDeptDTO> selectDeptTreeForEmployee(SysDeptParam param) {
return sysDeptServ.selectDeptTreeList(param);
}
@Override
public Map<String, Long> selectJoinDeptNames() {
Map<String, Long> result = new HashMap<>();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment