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

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

parent 3f6786ac
......@@ -56,6 +56,11 @@ public class EmployeeChangeLog extends TenantModel {
*/
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 {
@NotNull(message = "部门id不能为空")
private Long deptId;
/**
* 主岗位
*/
@NotBlank(message = "岗位不能为空")
private String position;
/**
* 调配时间
*/
......
package com.anplus.hr.domain.vo;
import cn.idev.excel.annotation.ExcelProperty;
import com.anplus.hr.domain.EmployeeInfo;
import io.github.linpeilie.annotations.AutoMapper;
import io.github.linpeilie.annotations.AutoMappers;
......@@ -22,4 +23,9 @@ public class EmployeeFlowTransferApplyVo extends EmployeeFlowVo {
* 内部个人履历
*/
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
changeLog.setDeptId(employeeInfo.getDeptId());
changeLog.setPlateId(parentDeptId);
changeLog.setPlate(parentDept.getName());
changeLog.setPosition(employeeInfo.getPosition());
changeLog.setType(changeType);
changeLog.setChangeDate(changeDate != null ? changeDate : LocalDate.now());
if (EmployeeChangeLogTypeConstant.Resign.equals(changeType)) {
......
......@@ -153,6 +153,7 @@ public class EmployeeFlowServImpl extends ServiceImpl<EmployeeFlowMapper, Employ
case HrFlowTypeConstant.TRANSFER:
EmployeeFlowTransferApplyVo employeeFlowTransferApplyVo = MapstructUtils.convert(employeeFlowVo, EmployeeFlowTransferApplyVo.class);
employeeFlowTransferApplyVo.setInternalResume(employeeInfo.getInternalResume());
employeeFlowTransferApplyVo.setPosition(employeeInfo.getPosition());
employeeFlowVo = employeeFlowTransferApplyVo;
break;
case HrFlowTypeConstant.RENEWAL_CONTRACT:
......@@ -511,6 +512,7 @@ public class EmployeeFlowServImpl extends ServiceImpl<EmployeeFlowMapper, Employ
EmployeeInfo oldEmployeeInfo = new EmployeeInfo();
oldEmployeeInfo.setId(employeeInfo.getId());
oldEmployeeInfo.setDeptId(employeeInfo.getDeptId());
oldEmployeeInfo.setPosition(employeeInfo.getPosition());
employeeInfo.setTransferApplyStatus(HrFlowEnum.FINISH.getStatus());
LocalDate transferDate = null;
for (SysAuditLog auditLog : auditLogs) {
......@@ -530,6 +532,9 @@ public class EmployeeFlowServImpl extends ServiceImpl<EmployeeFlowMapper, Employ
case "deptId":
employeeInfo.setDeptId(Convert.toLong(auditLog.getAfterVal()));
break;
case "position":
employeeInfo.setPosition(auditLog.getAfterVal());
break;
case "performanceRatio":
employeeInfo.setPerformanceRatio(auditLog.getAfterVal());
break;
......
......@@ -24,6 +24,7 @@ import com.anplus.hr.service.EmployeeFlowServ;
import com.anplus.hr.service.EmployeeInfoServ;
import com.anplus.hr.service.EmployeeSysDeptServ;
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.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
......@@ -56,7 +57,6 @@ import top.binfast.common.mybatis.util.QueryUtil;
import top.binfast.common.oss.core.OssService;
import top.binfast.common.oss.entity.UploadResult;
import java.time.LocalDate;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Stream;
......@@ -84,6 +84,7 @@ public class EmployeeInfoServImpl extends ServiceImpl<EmployeeInfoMapper, Employ
private final EmployeeAsyncService employeeAsyncService;
private final EmployeeTrainingMapper employeeTrainingMapper;
private final InterviewProfileMapper interviewProfileMapper;
private final SendMessageCmdExe sendMessageCmdExe;
/**
* 分页查询员工信息列表
......@@ -488,6 +489,7 @@ public class EmployeeInfoServImpl extends ServiceImpl<EmployeeInfoMapper, Employ
boolean flag = this.save(employeeInfo);
if (flag) {
familyMembersCmdExe.insertByEmployee(param.getFamilyMembers(), employeeInfo);
sendMessageCmdExe.sendMessageToAdmin("有新员工录入,请及时处理");
}
return flag;
}
......@@ -538,6 +540,7 @@ public class EmployeeInfoServImpl extends ServiceImpl<EmployeeInfoMapper, Employ
boolean flag = this.save(employeeInfo);
if (flag) {
familyMembersCmdExe.insertByEmployee(param.getFamilyMembers(), employeeInfo);
sendMessageCmdExe.sendMessageToAdmin("有新员工录入,请及时处理");
}
return flag;
}
......@@ -610,6 +613,8 @@ public class EmployeeInfoServImpl extends ServiceImpl<EmployeeInfoMapper, Employ
"三级部门", param.getThirdLevelDepartment(), list);
employeeAuditLogServ.initAuditLog("调职申请", "deptId",
"部门序号", Convert.toStr(param.getDeptId()), list);
employeeAuditLogServ.initAuditLog("调职申请", "position",
"岗位", param.getPosition(), list);
employeeAuditLogServ.initAuditLog("调职申请", "transferDate",
"调配时间", Convert.toStr(param.getTransferDate()), list);
employeeAuditLogServ.initAuditLog("调职申请", "performanceRatio",
......
......@@ -5,18 +5,20 @@ import com.anplus.hr.constant.HrFlowEnum;
import com.anplus.hr.constant.HrStatusEnum;
import com.anplus.hr.domain.EmployeeInfo;
import com.anplus.hr.mapper.EmployeeInfoMapper;
import com.anplus.hr.service.impl.command.SendMessageCmdExe;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
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.util.ArrayList;
import java.util.List;
/**
* 定时任务管理器
*
* @author 刘斌
* @date 2025/11/5 17:01
*/
......@@ -26,6 +28,7 @@ import java.util.List;
public class EmployeeScheduleService {
private final EmployeeInfoMapper employeeInfoMapper;
private final SendMessageCmdExe sendMessageCmdExe;
/**
* 方式1:使用cron表达式
......@@ -46,6 +49,18 @@ public class EmployeeScheduleService {
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分执行
*/
......@@ -57,10 +72,7 @@ public class EmployeeScheduleService {
.between(EmployeeInfo::getExpectedRegularDate, LocalDate.now(), LocalDate.now().plusMonths(1))
);
if (existNewRegularReminders) {
SseMessageDto dto = new SseMessageDto();
dto.setMessage("有新的转正提醒!请检查!");
dto.setUserIds(List.of(6L));
SseMessageUtils.publishMessage(dto);
sendMessageCmdExe.sendMessageToAdmin("有新的转正提醒!请检查!");
}
boolean existContractRenewalReminders = employeeInfoMapper.exists(new LambdaUpdateWrapper<EmployeeInfo>()
.eq(EmployeeInfo::getStatus, HrStatusEnum.REGULARIZATION.getStatus())
......@@ -68,10 +80,7 @@ public class EmployeeScheduleService {
.between(EmployeeInfo::getContractEndDate, LocalDate.now(), LocalDate.now().plusMonths(1))
);
if (existContractRenewalReminders) {
SseMessageDto dto = new SseMessageDto();
dto.setMessage("有新的合同续约提醒!请检查!");
dto.setUserIds(List.of(6L));
SseMessageUtils.publishMessage(dto);
sendMessageCmdExe.sendMessageToAdmin("有新的合同续约提醒!请检查!");
}
}
......
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