Commit ccfdbde4 authored by 刘斌's avatar 刘斌

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

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