Commit 0c887632 authored by 刘斌's avatar 刘斌

fix: 异动记录增加岗位,增加发送站内信给管理员

parent 3f6786ac
...@@ -56,6 +56,11 @@ public class EmployeeChangeLog extends TenantModel { ...@@ -56,6 +56,11 @@ public class EmployeeChangeLog extends TenantModel {
*/ */
private Long employeeId; private Long employeeId;
/**
* 主岗位
*/
private String position;
/** /**
* 变动时间 * 变动时间
*/ */
......
package com.anplus.hr.domain;
import io.github.linpeilie.annotations.AutoMapper;
import top.binfast.common.mybatis.bean.model.TenantModel;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Getter;
import lombok.Setter;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 部门职位月度统计对象 staffing_position_month_summary
*
* @author LiuBin
* @date 2025-12-16
*/
@Getter
@Setter
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = StaffingPlanData.class, convertGenerate = false)
@TableName("staffing_position_month_summary")
public class StaffingPositionMonthSummary extends TenantModel {
@Serial
private static final long serialVersionUID = 1L;
/**
* 部门ID
*/
private Long deptId;
/**
* 一级部门ID
*/
private Long lv1DeptId;
/**
* 主岗位
*/
private String position;
/**
* 月份
*/
private Integer month;
/**
* 正式开始人数
*/
private Integer formalStartCount;
/**
* 正式结束人数
*/
private Integer formalEndCount;
/**
* 兼职开始人数
*/
private Integer partStartCount;
/**
* 兼职结束人数
*/
private Integer partEndCount;
}
...@@ -51,6 +51,12 @@ public class EmployeeTransferApplyParam { ...@@ -51,6 +51,12 @@ public class EmployeeTransferApplyParam {
@NotNull(message = "部门id不能为空") @NotNull(message = "部门id不能为空")
private Long deptId; private Long deptId;
/**
* 主岗位
*/
@NotBlank(message = "岗位不能为空")
private String position;
/** /**
* 调配时间 * 调配时间
*/ */
......
package com.anplus.hr.domain.vo; package com.anplus.hr.domain.vo;
import cn.idev.excel.annotation.ExcelProperty;
import com.anplus.hr.domain.EmployeeInfo; import com.anplus.hr.domain.EmployeeInfo;
import io.github.linpeilie.annotations.AutoMapper; import io.github.linpeilie.annotations.AutoMapper;
import io.github.linpeilie.annotations.AutoMappers; import io.github.linpeilie.annotations.AutoMappers;
...@@ -22,4 +23,9 @@ public class EmployeeFlowTransferApplyVo extends EmployeeFlowVo { ...@@ -22,4 +23,9 @@ public class EmployeeFlowTransferApplyVo extends EmployeeFlowVo {
* 内部个人履历 * 内部个人履历
*/ */
private String internalResume; private String internalResume;
/**
* 主岗位
*/
private String position;
} }
package com.anplus.hr.mapper;
import com.anplus.hr.domain.StaffingPositionMonthSummary;
import top.binfast.common.mybatis.mapper.BinBaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* 部门职位月度统计Mapper接口
*
* @author LiuBin
* @date 2025-12-16
*/
@Mapper
public interface StaffingPositionMonthSummaryMapper extends BinBaseMapper<StaffingPositionMonthSummary> {
}
...@@ -120,6 +120,7 @@ public class EmployeeChangeLogServImpl extends ServiceImpl<EmployeeChangeLogMapp ...@@ -120,6 +120,7 @@ public class EmployeeChangeLogServImpl extends ServiceImpl<EmployeeChangeLogMapp
changeLog.setDeptId(employeeInfo.getDeptId()); changeLog.setDeptId(employeeInfo.getDeptId());
changeLog.setPlateId(parentDeptId); changeLog.setPlateId(parentDeptId);
changeLog.setPlate(parentDept.getName()); changeLog.setPlate(parentDept.getName());
changeLog.setPosition(employeeInfo.getPosition());
changeLog.setType(changeType); changeLog.setType(changeType);
changeLog.setChangeDate(changeDate != null ? changeDate : LocalDate.now()); changeLog.setChangeDate(changeDate != null ? changeDate : LocalDate.now());
if (EmployeeChangeLogTypeConstant.Resign.equals(changeType)) { if (EmployeeChangeLogTypeConstant.Resign.equals(changeType)) {
......
...@@ -153,6 +153,7 @@ public class EmployeeFlowServImpl extends ServiceImpl<EmployeeFlowMapper, Employ ...@@ -153,6 +153,7 @@ public class EmployeeFlowServImpl extends ServiceImpl<EmployeeFlowMapper, Employ
case HrFlowTypeConstant.TRANSFER: case HrFlowTypeConstant.TRANSFER:
EmployeeFlowTransferApplyVo employeeFlowTransferApplyVo = MapstructUtils.convert(employeeFlowVo, EmployeeFlowTransferApplyVo.class); EmployeeFlowTransferApplyVo employeeFlowTransferApplyVo = MapstructUtils.convert(employeeFlowVo, EmployeeFlowTransferApplyVo.class);
employeeFlowTransferApplyVo.setInternalResume(employeeInfo.getInternalResume()); employeeFlowTransferApplyVo.setInternalResume(employeeInfo.getInternalResume());
employeeFlowTransferApplyVo.setPosition(employeeInfo.getPosition());
employeeFlowVo = employeeFlowTransferApplyVo; employeeFlowVo = employeeFlowTransferApplyVo;
break; break;
case HrFlowTypeConstant.RENEWAL_CONTRACT: case HrFlowTypeConstant.RENEWAL_CONTRACT:
...@@ -511,6 +512,7 @@ public class EmployeeFlowServImpl extends ServiceImpl<EmployeeFlowMapper, Employ ...@@ -511,6 +512,7 @@ public class EmployeeFlowServImpl extends ServiceImpl<EmployeeFlowMapper, Employ
EmployeeInfo oldEmployeeInfo = new EmployeeInfo(); EmployeeInfo oldEmployeeInfo = new EmployeeInfo();
oldEmployeeInfo.setId(employeeInfo.getId()); oldEmployeeInfo.setId(employeeInfo.getId());
oldEmployeeInfo.setDeptId(employeeInfo.getDeptId()); oldEmployeeInfo.setDeptId(employeeInfo.getDeptId());
oldEmployeeInfo.setPosition(employeeInfo.getPosition());
employeeInfo.setTransferApplyStatus(HrFlowEnum.FINISH.getStatus()); employeeInfo.setTransferApplyStatus(HrFlowEnum.FINISH.getStatus());
LocalDate transferDate = null; LocalDate transferDate = null;
for (SysAuditLog auditLog : auditLogs) { for (SysAuditLog auditLog : auditLogs) {
...@@ -530,6 +532,9 @@ public class EmployeeFlowServImpl extends ServiceImpl<EmployeeFlowMapper, Employ ...@@ -530,6 +532,9 @@ 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 "position":
employeeInfo.setPosition(auditLog.getAfterVal());
break;
case "performanceRatio": case "performanceRatio":
employeeInfo.setPerformanceRatio(auditLog.getAfterVal()); employeeInfo.setPerformanceRatio(auditLog.getAfterVal());
break; break;
......
...@@ -24,6 +24,7 @@ import com.anplus.hr.service.EmployeeFlowServ; ...@@ -24,6 +24,7 @@ import com.anplus.hr.service.EmployeeFlowServ;
import com.anplus.hr.service.EmployeeInfoServ; import com.anplus.hr.service.EmployeeInfoServ;
import com.anplus.hr.service.EmployeeSysDeptServ; import com.anplus.hr.service.EmployeeSysDeptServ;
import com.anplus.hr.service.impl.command.EmployeeFamilyMembersCmdExe; import com.anplus.hr.service.impl.command.EmployeeFamilyMembersCmdExe;
import com.anplus.hr.service.impl.command.SendMessageCmdExe;
import com.baomidou.dynamic.datasource.annotation.DSTransactional; import com.baomidou.dynamic.datasource.annotation.DSTransactional;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
...@@ -56,7 +57,6 @@ import top.binfast.common.mybatis.util.QueryUtil; ...@@ -56,7 +57,6 @@ import top.binfast.common.mybatis.util.QueryUtil;
import top.binfast.common.oss.core.OssService; import top.binfast.common.oss.core.OssService;
import top.binfast.common.oss.entity.UploadResult; import top.binfast.common.oss.entity.UploadResult;
import java.time.LocalDate;
import java.util.*; import java.util.*;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
import java.util.stream.Stream; import java.util.stream.Stream;
...@@ -84,6 +84,7 @@ public class EmployeeInfoServImpl extends ServiceImpl<EmployeeInfoMapper, Employ ...@@ -84,6 +84,7 @@ public class EmployeeInfoServImpl extends ServiceImpl<EmployeeInfoMapper, Employ
private final EmployeeAsyncService employeeAsyncService; private final EmployeeAsyncService employeeAsyncService;
private final EmployeeTrainingMapper employeeTrainingMapper; private final EmployeeTrainingMapper employeeTrainingMapper;
private final InterviewProfileMapper interviewProfileMapper; private final InterviewProfileMapper interviewProfileMapper;
private final SendMessageCmdExe sendMessageCmdExe;
/** /**
* 分页查询员工信息列表 * 分页查询员工信息列表
...@@ -488,6 +489,7 @@ public class EmployeeInfoServImpl extends ServiceImpl<EmployeeInfoMapper, Employ ...@@ -488,6 +489,7 @@ public class EmployeeInfoServImpl extends ServiceImpl<EmployeeInfoMapper, Employ
boolean flag = this.save(employeeInfo); boolean flag = this.save(employeeInfo);
if (flag) { if (flag) {
familyMembersCmdExe.insertByEmployee(param.getFamilyMembers(), employeeInfo); familyMembersCmdExe.insertByEmployee(param.getFamilyMembers(), employeeInfo);
sendMessageCmdExe.sendMessageToAdmin("有新员工录入,请及时处理");
} }
return flag; return flag;
} }
...@@ -538,6 +540,7 @@ public class EmployeeInfoServImpl extends ServiceImpl<EmployeeInfoMapper, Employ ...@@ -538,6 +540,7 @@ public class EmployeeInfoServImpl extends ServiceImpl<EmployeeInfoMapper, Employ
boolean flag = this.save(employeeInfo); boolean flag = this.save(employeeInfo);
if (flag) { if (flag) {
familyMembersCmdExe.insertByEmployee(param.getFamilyMembers(), employeeInfo); familyMembersCmdExe.insertByEmployee(param.getFamilyMembers(), employeeInfo);
sendMessageCmdExe.sendMessageToAdmin("有新员工录入,请及时处理");
} }
return flag; return flag;
} }
...@@ -610,6 +613,8 @@ public class EmployeeInfoServImpl extends ServiceImpl<EmployeeInfoMapper, Employ ...@@ -610,6 +613,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("调职申请", "position",
"岗位", param.getPosition(), list);
employeeAuditLogServ.initAuditLog("调职申请", "transferDate", employeeAuditLogServ.initAuditLog("调职申请", "transferDate",
"调配时间", Convert.toStr(param.getTransferDate()), list); "调配时间", Convert.toStr(param.getTransferDate()), list);
employeeAuditLogServ.initAuditLog("调职申请", "performanceRatio", employeeAuditLogServ.initAuditLog("调职申请", "performanceRatio",
......
...@@ -5,18 +5,20 @@ import com.anplus.hr.constant.HrFlowEnum; ...@@ -5,18 +5,20 @@ import com.anplus.hr.constant.HrFlowEnum;
import com.anplus.hr.constant.HrStatusEnum; import com.anplus.hr.constant.HrStatusEnum;
import com.anplus.hr.domain.EmployeeInfo; import com.anplus.hr.domain.EmployeeInfo;
import com.anplus.hr.mapper.EmployeeInfoMapper; import com.anplus.hr.mapper.EmployeeInfoMapper;
import com.anplus.hr.service.impl.command.SendMessageCmdExe;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import top.binfast.common.sse.dto.SseMessageDto;
import top.binfast.common.sse.utils.SseMessageUtils;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
/** /**
* 定时任务管理器
*
* @author 刘斌 * @author 刘斌
* @date 2025/11/5 17:01 * @date 2025/11/5 17:01
*/ */
...@@ -26,6 +28,7 @@ import java.util.List; ...@@ -26,6 +28,7 @@ import java.util.List;
public class EmployeeScheduleService { public class EmployeeScheduleService {
private final EmployeeInfoMapper employeeInfoMapper; private final EmployeeInfoMapper employeeInfoMapper;
private final SendMessageCmdExe sendMessageCmdExe;
/** /**
* 方式1:使用cron表达式 * 方式1:使用cron表达式
...@@ -46,6 +49,18 @@ public class EmployeeScheduleService { ...@@ -46,6 +49,18 @@ public class EmployeeScheduleService {
executeSafely("每月检查提醒", this::remindPerMonth); executeSafely("每月检查提醒", this::remindPerMonth);
} }
/**
* 每月1号0点执行
*/
// @Scheduled(cron = "0 0 0 1 * ?")
// @Scheduled(cron = "0 30 9 * * ?")
// @Scheduled(cron = "0 0 23 L * ?")
public void monthlyInDay1Task() {
executeSafely("每月1号0点执行", () -> {
System.out.println("每月1号0点执行");
});
}
/** /**
* 每月15到20号号8点10分执行 * 每月15到20号号8点10分执行
*/ */
...@@ -57,10 +72,7 @@ public class EmployeeScheduleService { ...@@ -57,10 +72,7 @@ public class EmployeeScheduleService {
.between(EmployeeInfo::getExpectedRegularDate, LocalDate.now(), LocalDate.now().plusMonths(1)) .between(EmployeeInfo::getExpectedRegularDate, LocalDate.now(), LocalDate.now().plusMonths(1))
); );
if (existNewRegularReminders) { if (existNewRegularReminders) {
SseMessageDto dto = new SseMessageDto(); sendMessageCmdExe.sendMessageToAdmin("有新的转正提醒!请检查!");
dto.setMessage("有新的转正提醒!请检查!");
dto.setUserIds(List.of(6L));
SseMessageUtils.publishMessage(dto);
} }
boolean existContractRenewalReminders = employeeInfoMapper.exists(new LambdaUpdateWrapper<EmployeeInfo>() boolean existContractRenewalReminders = employeeInfoMapper.exists(new LambdaUpdateWrapper<EmployeeInfo>()
.eq(EmployeeInfo::getStatus, HrStatusEnum.REGULARIZATION.getStatus()) .eq(EmployeeInfo::getStatus, HrStatusEnum.REGULARIZATION.getStatus())
...@@ -68,10 +80,7 @@ public class EmployeeScheduleService { ...@@ -68,10 +80,7 @@ public class EmployeeScheduleService {
.between(EmployeeInfo::getContractEndDate, LocalDate.now(), LocalDate.now().plusMonths(1)) .between(EmployeeInfo::getContractEndDate, LocalDate.now(), LocalDate.now().plusMonths(1))
); );
if (existContractRenewalReminders) { if (existContractRenewalReminders) {
SseMessageDto dto = new SseMessageDto(); sendMessageCmdExe.sendMessageToAdmin("有新的合同续约提醒!请检查!");
dto.setMessage("有新的合同续约提醒!请检查!");
dto.setUserIds(List.of(6L));
SseMessageUtils.publishMessage(dto);
} }
} }
......
package com.anplus.hr.service.impl.command;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import lombok.RequiredArgsConstructor;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import top.binfast.app.biz.sysapi.bean.model.auth.SysRole;
import top.binfast.app.biz.sysapi.dao.auth.SysRoleMapper;
import top.binfast.app.biz.sysapi.dao.auth.SysUserRoleMapper;
import top.binfast.common.sse.dto.SseMessageDto;
import top.binfast.common.sse.utils.SseMessageUtils;
import java.util.List;
/**
* @author 刘斌
* @date 2025/12/16 20:08
*/
@Component
@RequiredArgsConstructor
public class SendMessageCmdExe {
private final SysRoleMapper sysRoleMapper;
private final SysUserRoleMapper sysUserRoleMapper;
/**
* 发送消息给管理员
* 标识:hr_admin
*
* @param message 消息
*/
@Async
public void sendMessageToAdmin(String message) {
SysRole hrAdmin = sysRoleMapper.selectOne(new LambdaUpdateWrapper<SysRole>()
.eq(SysRole::getRoleKey, "hr_admin"));
if (hrAdmin == null) {
return;
}
List<Long> userIdList = sysUserRoleMapper.selectUserIdsByRoleId(hrAdmin.getId());
if (CollUtil.isEmpty(userIdList)) {
return;
}
SseMessageDto dto = new SseMessageDto();
dto.setUserIds(userIdList);
dto.setMessage(message);
SseMessageUtils.publishMessage(dto);
}
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.anplus.hr.mapper.StaffingPositionMonthSummaryMapper">
</mapper>
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