Commit b00ed09c authored by 刘斌's avatar 刘斌

feat: 增加转正提醒,合同续约提醒

parent 3bc25ba8
......@@ -59,7 +59,7 @@ public interface HrFlowTypeConstant {
/**
* 续签流程编码
*/
String RENEWAL_CONTRACT_CODE = "renewalContractFlow";
String RENEWAL_CONTRACT_CODE = "hrRenewalContractFlow";
/**
* 部门调整流程编码
......
package com.anplus.hr.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.alibaba.cola.dto.PageResponse;
import com.anplus.hr.domain.params.ContractExpirationReminderListParam;
import com.anplus.hr.domain.vo.ContractExpirationReminderVo;
import com.anplus.hr.service.ContractExpirationReminderServ;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import top.binfast.common.core.constant.BusinessType;
import top.binfast.common.excel.annotion.ExcelExport;
import top.binfast.common.log.annotation.PinSysLog;
import java.util.List;
/**
* 员工合同续签提醒
*
* @author LiuBin
* @date 2025-11-20
*/
@Validated
@RestController
@RequestMapping("/employee/contractExpiration")
public class ContractExpirationReminderCtrl {
@Resource
private ContractExpirationReminderServ contractExpirationReminderServ;
/**
* 查询员工合同续签提醒列表
*/
@SaCheckPermission("employee:contractExpiration:list")
@GetMapping("/page")
public PageResponse<ContractExpirationReminderVo> pageList(ContractExpirationReminderListParam param) {
return contractExpirationReminderServ.queryPageList(param);
}
/**
* 导出员工合同续签提醒列表
*/
@ExcelExport
@SaCheckPermission("employee:contractExpiration:export")
@PinSysLog(value = "员工合同续签提醒", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public List<ContractExpirationReminderVo> export(ContractExpirationReminderListParam param) {
return contractExpirationReminderServ.queryList(param);
}
// /**
// * 获取员工合同续签提醒详细信息
// *
// * @param id 主键
// */
// @SaCheckPermission("employee:contractExpirationReminder:query")
// @GetMapping("/{id}")
// public SingleResponse<ContractExpirationReminderVo> getDetail(@PathVariable @Min(1)
// Long id) {
// return SingleResponse.of(contractExpirationReminderServ.queryById(id));
// }
//
// /**
// * 新增员工合同续签提醒
// */
// @SaCheckPermission("employee:contractExpirationReminder:add")
// @PinSysLog(value = "员工合同续签提醒", businessType = BusinessType.INSERT)
// @PostMapping()
// public Response add(@Validated(AddGroup.class) @RequestBody ContractExpirationReminderParam param) {
// return ResponseUtils.ofResult(contractExpirationReminderServ.insertByParam(param));
// }
//
// /**
// * 修改员工合同续签提醒
// */
// @SaCheckPermission("employee:contractExpirationReminder:edit")
// @PinSysLog(value = "员工合同续签提醒", businessType = BusinessType.UPDATE)
// @PutMapping()
// public Response edit(@Validated(EditGroup.class) @RequestBody ContractExpirationReminderParam param) {
// return ResponseUtils.ofResult(contractExpirationReminderServ.updateByParam(param));
// }
//
// /**
// * 删除员工合同续签提醒
// *
// * @param ids 主键串
// */
// @SaCheckPermission("employee:contractExpirationReminder:remove")
// @PinSysLog(value = "员工合同续签提醒", businessType = BusinessType.DELETE)
// @DeleteMapping("/{ids}")
// public Response remove(@NotEmpty(message = "主键不能为空")
// @PathVariable Long[] ids) {
// return ResponseUtils.ofResult(contractExpirationReminderServ.delByIds(List.of(ids)));
// }
}
\ No newline at end of file
package com.anplus.hr.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.alibaba.cola.dto.MultiResponse;
import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.Response;
import com.alibaba.cola.dto.SingleResponse;
import com.anplus.hr.domain.params.*;
import com.anplus.hr.domain.vo.EmployeeInfoImportVo;
import com.anplus.hr.domain.vo.EmployeeInfoResignImportVo;
import com.anplus.hr.domain.vo.EmployeeInfoVo;
import com.anplus.hr.service.EmployeeInfoServ;
import jakarta.annotation.Resource;
......@@ -16,6 +16,9 @@ import org.dromara.core.trans.anno.TransMethodResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
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.sysbiz.service.SysDeptServ;
import top.binfast.common.core.constant.BusinessType;
import top.binfast.common.core.util.ResponseUtils;
import top.binfast.common.core.validate.AddGroup;
......@@ -42,6 +45,8 @@ public class EmployeeInfoCtrl {
@Resource
private EmployeeInfoServ employeeInfoServ;
@Resource
private SysDeptServ deptService;
/**
* 查询员工信息列表
......@@ -119,7 +124,7 @@ public class EmployeeInfoCtrl {
@SaCheckPermission("employee:info:query")
@GetMapping("/detail/{id}")
public SingleResponse<EmployeeInfoVo> infoDetail(@PathVariable @Min(1)
Long id) {
Long id) {
return SingleResponse.of(employeeInfoServ.infoDetail(id));
}
......@@ -178,6 +183,28 @@ public class EmployeeInfoCtrl {
return ResponseUtils.ofResult(employeeInfoServ.applyResign(param));
}
/**
* 申请离职
*/
@NoRepeatSubmit(interval = 60_000)
@SaCheckPermission("employee:info:regular")
@PinSysLog(value = "员工信息-转正申请", businessType = BusinessType.UPDATE)
@PostMapping("/applyRegular")
public Response applyRegular(@Validated @RequestBody EmployeeRegularApplyParam param) {
return ResponseUtils.ofResult(employeeInfoServ.applyRegular(param));
}
/**
* 申请离职
*/
@NoRepeatSubmit(interval = 60_000)
@SaCheckPermission("employee:info:contractRenewal")
@PinSysLog(value = "员工信息-合同续约申请", businessType = BusinessType.UPDATE)
@PostMapping("/applyRenewalContract")
public Response applyRenewalContract(@Validated @RequestBody EmployeeRenewalContractApplyParam param) {
return ResponseUtils.ofResult(employeeInfoServ.applyRenewalContract(param));
}
/**
* 删除员工信息
*
......@@ -191,4 +218,13 @@ public class EmployeeInfoCtrl {
@PathVariable Long[] ids) {
return ResponseUtils.ofResult(employeeInfoServ.delByIds(List.of(ids)));
}
/**
* 获取部门树列表
*/
@SaCheckPermission("employee:info:export")
@GetMapping("/deptTree")
public MultiResponse<SysDeptDTO> deptTree(SysDeptParam dept) {
return MultiResponse.of(deptService.selectDeptTreeList(dept));
}
}
\ No newline at end of file
package com.anplus.hr.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.alibaba.cola.dto.PageResponse;
import com.anplus.hr.domain.params.EmployeeRegularReminderListParam;
import com.anplus.hr.domain.vo.EmployeeRegularReminderVo;
import com.anplus.hr.service.EmployeeRegularReminderServ;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import top.binfast.common.core.constant.BusinessType;
import top.binfast.common.excel.annotion.ExcelExport;
import top.binfast.common.log.annotation.PinSysLog;
import java.util.List;
/**
* 转正提醒
*
* @author LiuBin
* @date 2025-11-20
*/
@Validated
@RestController
@RequestMapping("/employee/regularReminder")
public class EmployeeRegularReminderCtrl {
@Resource
private EmployeeRegularReminderServ employeeRegularReminderServ;
/**
* 查询转正提醒列表
*/
@SaCheckPermission("employee:regularReminder:list")
@GetMapping("/page")
public PageResponse<EmployeeRegularReminderVo> pageList(EmployeeRegularReminderListParam param) {
return employeeRegularReminderServ.queryPageList(param);
}
/**
* 导出转正提醒列表
*/
@ExcelExport
@SaCheckPermission("employee:regularReminder:export")
@PinSysLog(value = "转正提醒", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public List<EmployeeRegularReminderVo> export(EmployeeRegularReminderListParam param) {
return employeeRegularReminderServ.queryList(param);
}
// /**
// * 获取转正提醒详细信息
// *
// * @param id 主键
// */
// @SaCheckPermission("employee:regularReminder:query")
// @GetMapping("/{id}")
// public SingleResponse<EmployeeRegularReminderVo> getDetail(@PathVariable @Min(1)
// Long id) {
// return SingleResponse.of(employeeRegularReminderServ.queryById(id));
// }
// /**
// * 新增转正提醒
// */
// @SaCheckPermission("employee:regularReminder:add")
// @PinSysLog(value = "转正提醒", businessType = BusinessType.INSERT)
// @PostMapping()
// public Response add(@Validated(AddGroup.class) @RequestBody EmployeeRegularReminderParam param) {
// return ResponseUtils.ofResult(employeeRegularReminderServ.insertByParam(param));
// }
//
// /**
// * 修改转正提醒
// */
// @SaCheckPermission("employee:regularReminder:edit")
// @PinSysLog(value = "转正提醒", businessType = BusinessType.UPDATE)
// @PutMapping()
// public Response edit(@Validated(EditGroup.class) @RequestBody EmployeeRegularReminderParam param) {
// return ResponseUtils.ofResult(employeeRegularReminderServ.updateByParam(param));
// }
//
// /**
// * 删除转正提醒
// *
// * @param ids 主键串
// */
// @SaCheckPermission("employee:regularReminder:remove")
// @PinSysLog(value = "转正提醒", businessType = BusinessType.DELETE)
// @DeleteMapping("/{ids}")
// public Response remove(@NotEmpty(message = "主键不能为空")
// @PathVariable Long[] ids) {
// return ResponseUtils.ofResult(employeeRegularReminderServ.delByIds(List.of(ids)));
// }
}
\ No newline at end of file
......@@ -360,6 +360,11 @@ public class EmployeeInfo extends TenantModel {
*/
private LocalDate regularizationDate;
/**
* 预计转正时间
*/
private LocalDate expectedRegularDate;
/**
* 奖励情况
*/
......
package com.anplus.hr.domain.params;
import lombok.Getter;
import lombok.Setter;
import top.binfast.common.core.bean.params.PageQueryParam;
import java.time.LocalDate;
import java.util.HashMap;
import java.util.Map;
/**
* 员工合同续签提醒分页对象 employee_contract_expiration_reminder
*
* @author LiuBin
* @date 2025-11-20
*/
@Getter
@Setter
public class ContractExpirationReminderListParam extends PageQueryParam {
/**
* 板块
*/
private String plate;
/**
* 一级部门
*/
private String firstLevelDepartment;
/**
* 二级部门
*/
private String secondLevelDepartment;
/**
* 三级部门
*/
private String thirdLevelDepartment;
/**
* 部门ID
*/
private Long deptId;
/**
* 主岗位
*/
private String position;
/**
* 姓名
*/
private String name;
/**
* 手机号码
*/
private String phoneNumber;
/**
* 劳动合同开始时间
*/
private LocalDate contractStartDate;
/**
* 劳动合同截止时间
*/
private LocalDate contractEndDate;
/**
* 合同形式
*/
private String contractForm;
/**
* 备注
*/
private String remarks;
/**
* 归属部门id(部门树)
*/
private Long belongDeptId;
private Map<String, Object> params = new HashMap<>();
}
package com.anplus.hr.domain.params;
import com.anplus.hr.domain.EmployeeInfo;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import top.binfast.common.core.validate.AddGroup;
import top.binfast.common.core.validate.EditGroup;
import java.time.LocalDate;
/**
* 员工合同续签提醒业务对象 employee_contract_expiration_reminder
*
* @author LiuBin
* @date 2025-11-20
*/
@Data
@AutoMapper(target = EmployeeInfo.class, reverseConvertGenerate = false)
public class ContractExpirationReminderParam {
/**
* 主键
*/
@NotNull(message = "主键不能为空", groups = { EditGroup.class })
private Long id;
/**
* 板块
*/
@NotBlank(message = "板块不能为空", groups = { AddGroup.class, EditGroup.class })
private String plate;
/**
* 一级部门
*/
@NotBlank(message = "一级部门不能为空", groups = { AddGroup.class, EditGroup.class })
private String firstLevelDepartment;
/**
* 二级部门
*/
@NotBlank(message = "二级部门不能为空", groups = { AddGroup.class, EditGroup.class })
private String secondLevelDepartment;
/**
* 三级部门
*/
@NotBlank(message = "三级部门不能为空", groups = { AddGroup.class, EditGroup.class })
private String thirdLevelDepartment;
/**
* 部门ID
*/
@NotNull(message = "部门ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long deptId;
/**
* 主岗位
*/
@NotBlank(message = "主岗位不能为空", groups = { AddGroup.class, EditGroup.class })
private String position;
/**
* 姓名
*/
@NotBlank(message = "姓名不能为空", groups = { AddGroup.class, EditGroup.class })
private String name;
/**
* 手机号码
*/
@NotBlank(message = "手机号码不能为空", groups = { AddGroup.class, EditGroup.class })
private String phoneNumber;
/**
* 劳动合同开始时间
*/
@NotNull(message = "劳动合同开始时间不能为空", groups = { AddGroup.class, EditGroup.class })
private LocalDate contractStartDate;
/**
* 劳动合同截止时间
*/
@NotNull(message = "劳动合同截止时间不能为空", groups = { AddGroup.class, EditGroup.class })
private LocalDate contractEndDate;
/**
* 合同形式
*/
@NotBlank(message = "合同形式不能为空", groups = { AddGroup.class, EditGroup.class })
private String contractForm;
/**
* 备注
*/
@NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class })
private String remarks;
}
......@@ -52,6 +52,11 @@ public class EmployeeChangeLogListParam extends PageQueryParam {
*/
private String resignYearsOfServiceType;
/**
* 归属部门id(部门树)
*/
private Long belongDeptId;
private Map<String, Object> params = new HashMap<>();
......
......@@ -46,7 +46,7 @@ public class EmployeeInfoListParam extends PageQueryParam {
/**
* 工号
*/
private String employeeId;
private String employeeNo;
/**
* 职级
......@@ -443,6 +443,10 @@ public class EmployeeInfoListParam extends PageQueryParam {
// */
// private Integer transferApplyStatus;
/**
* 归属部门id(部门树)
*/
private Long belongDeptId;
private Map<String, Object> params = new HashMap<>();
......
......@@ -60,7 +60,7 @@ public class EmployeeInfoParam {
* 工号
*/
// @NotBlank(message = "工号不能为空", groups = { AddGroup.class, EditGroup.class })
private String employeeId;
private String employeeNo;
/**
* 职级
......
......@@ -71,6 +71,11 @@ public class EmployeePhoneBookListParam extends PageQueryParam {
*/
private String remarks;
/**
* 归属部门id(部门树)
*/
private Long belongDeptId;
private Map<String, Object> params = new HashMap<>();
......
package com.anplus.hr.domain.params;
import lombok.Getter;
import lombok.Setter;
import top.binfast.common.core.bean.params.PageQueryParam;
import java.time.LocalDate;
import java.util.HashMap;
import java.util.Map;
/**
* 转正提醒分页对象 employee_regular_reminder
*
* @author LiuBin
* @date 2025-11-20
*/
@Getter
@Setter
public class EmployeeRegularReminderListParam extends PageQueryParam {
/**
* 板块
*/
private String plate;
/**
* 一级部门
*/
private String firstLevelDepartment;
/**
* 二级部门
*/
private String secondLevelDepartment;
/**
* 三级部门
*/
private String thirdLevelDepartment;
/**
* 部门ID
*/
private Long deptId;
/**
* 主岗位
*/
private String position;
/**
* 姓名
*/
private String name;
/**
* 手机号码
*/
private String phoneNumber;
/**
* 入职时间
*/
private LocalDate entryDate;
/**
* 转正时间
*/
private LocalDate expectedRegularDate;
/**
* 归属部门id(部门树)
*/
private Long belongDeptId;
private Map<String, Object> params = new HashMap<>();
}
package com.anplus.hr.domain.params;
import com.anplus.hr.domain.EmployeeInfo;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import top.binfast.common.core.validate.AddGroup;
import top.binfast.common.core.validate.EditGroup;
import java.time.LocalDate;
/**
* 转正提醒业务对象 employee_regular_reminder
*
* @author LiuBin
* @date 2025-11-20
*/
@Data
@AutoMapper(target = EmployeeInfo.class, reverseConvertGenerate = false)
public class EmployeeRegularReminderParam {
/**
* 主键
*/
@NotNull(message = "主键不能为空", groups = {EditGroup.class})
private Long id;
/**
* 板块
*/
@NotBlank(message = "板块不能为空", groups = {AddGroup.class, EditGroup.class})
private String plate;
/**
* 一级部门
*/
@NotBlank(message = "一级部门不能为空", groups = {AddGroup.class, EditGroup.class})
private String firstLevelDepartment;
/**
* 二级部门
*/
@NotBlank(message = "二级部门不能为空", groups = {AddGroup.class, EditGroup.class})
private String secondLevelDepartment;
/**
* 三级部门
*/
@NotBlank(message = "三级部门不能为空", groups = {AddGroup.class, EditGroup.class})
private String thirdLevelDepartment;
/**
* 部门ID
*/
@NotNull(message = "部门ID不能为空", groups = {AddGroup.class, EditGroup.class})
private Long deptId;
/**
* 主岗位
*/
@NotBlank(message = "主岗位不能为空", groups = {AddGroup.class, EditGroup.class})
private String position;
/**
* 姓名
*/
@NotBlank(message = "姓名不能为空", groups = {AddGroup.class, EditGroup.class})
private String name;
/**
* 手机号码
*/
@NotBlank(message = "手机号码不能为空", groups = {AddGroup.class, EditGroup.class})
private String phoneNumber;
/**
* 入职时间
*/
@NotNull(message = "入职时间不能为空", groups = {AddGroup.class, EditGroup.class})
private LocalDate entryDate;
/**
* 转正时间
*/
@NotNull(message = "转正时间不能为空", groups = {AddGroup.class, EditGroup.class})
private LocalDate expectedRegularDate;
/**
* 备注
*/
@NotBlank(message = "备注不能为空", groups = {AddGroup.class, EditGroup.class})
private String remarks;
}
package com.anplus.hr.domain.vo;
import cn.idev.excel.annotation.ExcelIgnore;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import cn.idev.excel.annotation.write.style.ColumnWidth;
import cn.idev.excel.annotation.write.style.ContentRowHeight;
import cn.idev.excel.annotation.write.style.HeadRowHeight;
import com.anplus.hr.domain.EmployeeInfo;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDate;
/**
* 员工合同续签提醒视图对象 employee_contract_expiration_reminder
*
* @author LiuBin
* @date 2025-11-20
*/
@Data
@ExcelIgnoreUnannotated
@ContentRowHeight(30)
@HeadRowHeight(32)
@ColumnWidth(20)
@AutoMapper(target = EmployeeInfo.class)
public class ContractExpirationReminderVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键
*/
private Long id;
/**
* 板块
*/
@ExcelProperty(value = {"合同续签提醒", "板块"})
private String plate;
/**
* 一级部门
*/
@ExcelProperty(value = {"合同续签提醒", "一级部门"})
private String firstLevelDepartment;
/**
* 二级部门
*/
@ExcelProperty(value = {"合同续签提醒", "二级部门"})
private String secondLevelDepartment;
/**
* 三级部门
*/
@ExcelProperty(value = {"合同续签提醒", "三级部门"})
private String thirdLevelDepartment;
/**
* 部门ID
*/
@ExcelIgnore
private Long deptId;
/**
* 主岗位
*/
@ExcelProperty(value = {"合同续签提醒", "主岗位"})
private String position;
/**
* 姓名
*/
@ExcelProperty(value = {"合同续签提醒", "姓名"})
private String name;
/**
* 手机号码
*/
@ExcelProperty(value = {"合同续签提醒", "手机号码"})
private String phoneNumber;
/**
* 劳动合同开始时间
*/
@ExcelProperty(value = {"合同续签提醒", "合同开始时间"})
private LocalDate contractStartDate;
/**
* 劳动合同截止时间
*/
@ExcelProperty(value = {"合同续签提醒", "合同截止时间"})
private LocalDate contractEndDate;
/**
* 合同形式
*/
@ExcelProperty(value = {"合同续签提醒", "合同形式"})
private String contractForm;
/**
* 备注
*/
@ExcelProperty(value = {"合同续签提醒", "备注"})
private String remarks;
}
package com.anplus.hr.domain.vo;
import cn.idev.excel.annotation.ExcelIgnore;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import cn.idev.excel.annotation.write.style.ColumnWidth;
import cn.idev.excel.annotation.write.style.ContentRowHeight;
import cn.idev.excel.annotation.write.style.HeadRowHeight;
import com.anplus.hr.domain.EmployeeInfo;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDate;
/**
* 转正提醒视图对象 employee_regular_reminder
*
* @author LiuBin
* @date 2025-11-20
*/
@Data
@ExcelIgnoreUnannotated
@ContentRowHeight(30)
@HeadRowHeight(32)
@ColumnWidth(20)
@AutoMapper(target = EmployeeInfo.class)
public class EmployeeRegularReminderVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键
*/
private Long id;
/**
* 板块
*/
@ExcelProperty(value = {"转正提醒", "板块"})
private String plate;
/**
* 一级部门
*/
@ExcelProperty(value = {"转正提醒", "一级部门"})
private String firstLevelDepartment;
/**
* 二级部门
*/
@ExcelProperty(value = {"转正提醒", "二级部门"})
private String secondLevelDepartment;
/**
* 三级部门
*/
@ExcelProperty(value = {"转正提醒", "三级部门"})
private String thirdLevelDepartment;
/**
* 部门ID
*/
@ExcelIgnore
private Long deptId;
/**
* 主岗位
*/
@ExcelProperty(value = {"转正提醒", "主岗位"})
private String position;
/**
* 姓名
*/
@ExcelProperty(value = {"转正提醒", "姓名"})
private String name;
/**
* 手机号码
*/
@ExcelProperty(value = {"转正提醒", "手机"})
private String phoneNumber;
/**
* 入职时间
*/
@ExcelProperty(value = {"转正提醒", "入职时间"})
private LocalDate entryDate;
/**
* 转正时间
*/
@ExcelProperty(value = {"转正提醒", "转正时间"})
private LocalDate expectedRegularDate;
/**
* 备注
*/
@ExcelProperty(value = {"转正提醒", "备注"})
private String remarks;
}
package com.anplus.hr.service;
import com.alibaba.cola.dto.PageResponse;
import com.anplus.hr.domain.EmployeeInfo;
import com.anplus.hr.domain.params.ContractExpirationReminderListParam;
import com.anplus.hr.domain.params.ContractExpirationReminderParam;
import com.anplus.hr.domain.vo.ContractExpirationReminderVo;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* 员工合同续签提醒Service接口
*
* @author LiuBin
* @date 2025-11-20
*/
public interface ContractExpirationReminderServ extends IService<EmployeeInfo> {
/**
* 分页查询员工合同续签提醒列表
*
* @param param 查询条件
* @return 员工合同续签提醒分页列表
*/
PageResponse<ContractExpirationReminderVo> queryPageList(ContractExpirationReminderListParam param);
/**
* 查询符合条件的员工合同续签提醒列表
*
* @param param 查询条件
* @return 员工合同续签提醒列表
*/
List<ContractExpirationReminderVo> queryList(ContractExpirationReminderListParam param);
/**
* 查询员工合同续签提醒
*
* @param id 主键
* @return 员工合同续签提醒
*/
ContractExpirationReminderVo queryById(Long id);
/**
* 新增员工合同续签提醒
*
* @param param 员工合同续签提醒
* @return 是否新增成功
*/
Boolean insertByParam(ContractExpirationReminderParam param);
/**
* 修改员工合同续签提醒
*
* @param param 员工合同续签提醒
* @return 是否修改成功
*/
Boolean updateByParam(ContractExpirationReminderParam param);
/**
* 校验并批量删除员工合同续签提醒信息
*
* @param ids 待删除的主键集合
* @return 是否删除成功
*/
Boolean delByIds(List<Long> ids);
}
......@@ -14,7 +14,7 @@ public interface EmployeeAuditLogServ {
Boolean saveAuditLogs(List<SysAuditLog> auditLog);
default void saveAuditLog(String auditName, String auditField, String auditFieldName, String afterVal, List<SysAuditLog> list) {
default void initAuditLog(String auditName, String auditField, String auditFieldName, String afterVal, List<SysAuditLog> list) {
SysAuditLog auditLog = new SysAuditLog();
auditLog.setAuditName(auditName);
auditLog.setAuditField(auditField);
......
......@@ -170,4 +170,18 @@ public interface EmployeeInfoServ extends IService<EmployeeInfo> {
return builder.toString();
}
default String buildPartDeptNameStr(EmployeeInfoImportVo importVo) {
StringBuilder builder = new StringBuilder(importVo.getPartTimePlate());
if (StrUtil.isNotBlank(importVo.getPartTimeFirstDept())) {
builder.append(StrUtil.SLASH).append(importVo.getPartTimeFirstDept());
}
if (StrUtil.isNotBlank(importVo.getPartTimeSecondDept())) {
builder.append(StrUtil.SLASH).append(importVo.getPartTimeSecondDept());
}
if (StrUtil.isNotBlank(importVo.getPartTimeThirdDept())) {
builder.append(StrUtil.SLASH).append(importVo.getPartTimeThirdDept());
}
return builder.toString();
}
}
package com.anplus.hr.service;
import com.alibaba.cola.dto.PageResponse;
import com.anplus.hr.domain.EmployeeInfo;
import com.anplus.hr.domain.params.EmployeeRegularReminderListParam;
import com.anplus.hr.domain.params.EmployeeRegularReminderParam;
import com.anplus.hr.domain.vo.EmployeeRegularReminderVo;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* 转正提醒Service接口
*
* @author LiuBin
* @date 2025-11-20
*/
public interface EmployeeRegularReminderServ extends IService<EmployeeInfo> {
/**
* 分页查询转正提醒列表
*
* @param param 查询条件
* @return 转正提醒分页列表
*/
PageResponse<EmployeeRegularReminderVo> queryPageList(EmployeeRegularReminderListParam param);
/**
* 查询符合条件的转正提醒列表
*
* @param param 查询条件
* @return 转正提醒列表
*/
List<EmployeeRegularReminderVo> queryList(EmployeeRegularReminderListParam param);
/**
* 查询转正提醒
*
* @param id 主键
* @return 转正提醒
*/
EmployeeRegularReminderVo queryById(Long id);
/**
* 新增转正提醒
*
* @param param 转正提醒
* @return 是否新增成功
*/
Boolean insertByParam(EmployeeRegularReminderParam param);
/**
* 修改转正提醒
*
* @param param 转正提醒
* @return 是否修改成功
*/
Boolean updateByParam(EmployeeRegularReminderParam param);
/**
* 校验并批量删除转正提醒信息
*
* @param ids 待删除的主键集合
* @return 是否删除成功
*/
Boolean delByIds(List<Long> ids);
}
......@@ -18,4 +18,11 @@ public interface EmployeeSysDeptServ {
Map<String, Long> selectJoinDeptNames();
/**
* 构建部门查询条件
*
* @param belongDeptId 部门id
*/
List<Long> buildQueryWrapper(Long belongDeptId);
}
package com.anplus.hr.service.impl;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.cola.dto.PageResponse;
import com.anplus.hr.constant.HrStatusEnum;
import com.anplus.hr.domain.EmployeeInfo;
import com.anplus.hr.domain.params.ContractExpirationReminderListParam;
import com.anplus.hr.domain.params.ContractExpirationReminderParam;
import com.anplus.hr.domain.vo.ContractExpirationReminderVo;
import com.anplus.hr.mapper.EmployeeInfoMapper;
import com.anplus.hr.service.ContractExpirationReminderServ;
import com.anplus.hr.service.EmployeeSysDeptServ;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
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.common.core.util.MapstructUtils;
import top.binfast.common.mybatis.util.QueryUtil;
import java.time.LocalDate;
import java.util.List;
/**
* 员工合同续签提醒Service业务层处理
*
* @author LiuBin
* @date 2025-11-20
*/
@RequiredArgsConstructor
@Service
public class ContractExpirationReminderServImpl extends ServiceImpl<EmployeeInfoMapper, EmployeeInfo> implements ContractExpirationReminderServ {
private final EmployeeInfoMapper employeeInfoMapper;
private final EmployeeSysDeptServ employeeSysDeptServ;
/**
* 分页查询员工合同续签提醒列表
*
* @param param 查询条件
* @return 员工合同续签提醒分页列表
*/
@Override
public PageResponse<ContractExpirationReminderVo> queryPageList(ContractExpirationReminderListParam param) {
Page<EmployeeInfo> page = QueryUtil.getPage(param);
LambdaQueryWrapper<EmployeeInfo> lambdaQuery = this.buildQueryWrapper(param);
employeeInfoMapper.selectPage(page, lambdaQuery);
return QueryUtil.getPageResponse(page, MapstructUtils.convert(page.getRecords(), ContractExpirationReminderVo.class));
}
/**
* 查询符合条件的员工合同续签提醒列表
*
* @param param 查询条件
* @return 员工合同续签提醒列表
*/
@Override
public List<ContractExpirationReminderVo> queryList(ContractExpirationReminderListParam param) {
LambdaQueryWrapper<EmployeeInfo> lambdaQuery = this.buildQueryWrapper(param);
return MapstructUtils.convert(employeeInfoMapper.selectList(lambdaQuery), ContractExpirationReminderVo.class);
}
private LambdaQueryWrapper<EmployeeInfo> buildQueryWrapper(ContractExpirationReminderListParam param) {
LambdaQueryWrapper<EmployeeInfo> lambdaQuery = Wrappers.<EmployeeInfo>lambdaQuery();
lambdaQuery.orderByDesc(EmployeeInfo::getId);
lambdaQuery.eq(EmployeeInfo::getStatus, HrStatusEnum.REGULARIZATION.getStatus());
lambdaQuery.between(EmployeeInfo::getContractEndDate, LocalDate.now().minusMonths(1), LocalDate.now().plusMonths(1));
lambdaQuery.eq(StrUtil.isNotBlank(param.getPlate()), EmployeeInfo::getPlate, param.getPlate());
lambdaQuery.eq(StrUtil.isNotBlank(param.getFirstLevelDepartment()), EmployeeInfo::getFirstLevelDepartment, param.getFirstLevelDepartment());
lambdaQuery.eq(StrUtil.isNotBlank(param.getSecondLevelDepartment()), EmployeeInfo::getSecondLevelDepartment, param.getSecondLevelDepartment());
lambdaQuery.eq(StrUtil.isNotBlank(param.getThirdLevelDepartment()), EmployeeInfo::getThirdLevelDepartment, param.getThirdLevelDepartment());
// lambdaQuery.eq(param.getDeptId() != null, EmployeeInfo::getDeptId, param.getDeptId());
if (ObjectUtil.isNotNull(param.getDeptId())) {
//优先单部门搜索
lambdaQuery.eq(EmployeeInfo::getDeptId, param.getDeptId());
} else if (ObjectUtil.isNotNull(param.getBelongDeptId())) {
//部门树搜索
lambdaQuery.and(x -> {
x.in(EmployeeInfo::getDeptId, employeeSysDeptServ.buildQueryWrapper(param.getBelongDeptId()));
});
}
lambdaQuery.eq(StrUtil.isNotBlank(param.getPosition()), EmployeeInfo::getPosition, param.getPosition());
lambdaQuery.like(StrUtil.isNotBlank(param.getName()), EmployeeInfo::getName, param.getName());
lambdaQuery.eq(StrUtil.isNotBlank(param.getPhoneNumber()), EmployeeInfo::getPhoneNumber, param.getPhoneNumber());
lambdaQuery.eq(param.getContractStartDate() != null, EmployeeInfo::getContractStartDate, param.getContractStartDate());
lambdaQuery.eq(param.getContractEndDate() != null, EmployeeInfo::getContractEndDate, param.getContractEndDate());
lambdaQuery.eq(StrUtil.isNotBlank(param.getContractForm()), EmployeeInfo::getContractForm, param.getContractForm());
lambdaQuery.eq(StrUtil.isNotBlank(param.getRemarks()), EmployeeInfo::getRemarks, param.getRemarks());
return lambdaQuery;
}
/**
* 查询员工合同续签提醒
*
* @param id 主键
* @return 员工合同续签提醒
*/
@Override
public ContractExpirationReminderVo queryById(Long id) {
EmployeeInfo contractExpirationReminder = employeeInfoMapper.selectById(id);
return MapstructUtils.convert(contractExpirationReminder, ContractExpirationReminderVo.class);
}
/**
* 新增员工合同续签提醒
*
* @param param 员工合同续签提醒
* @return 是否新增成功
*/
@Override
public Boolean insertByParam(ContractExpirationReminderParam param) {
// EmployeeInfo contractExpirationReminder = MapstructUtils.convert(param, EmployeeInfo.class);
// return this.save(contractExpirationReminder);
return true;
}
/**
* 修改员工合同续签提醒
*
* @param param 员工合同续签提醒
* @return 是否修改成功
*/
@Override
public Boolean updateByParam(ContractExpirationReminderParam param) {
// EmployeeInfo contractExpirationReminder = MapstructUtils.convert(param, EmployeeInfo.class);
// return this.updateById(contractExpirationReminder);
return true;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(EmployeeInfo entity) {
// 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除员工合同续签提醒信息
*
* @param ids 待删除的主键集合
* @return 是否删除成功
*/
@Override
// @Transactional(rollbackFor = {Exception.class})
public Boolean delByIds(List<Long> ids) {
//做一些业务上的校验,判断是否需要校验
// return this.removeByIds(ids);
return true;
}
}
package com.anplus.hr.service.impl;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.cola.dto.PageResponse;
import com.anplus.hr.constant.EmployeeChangeLogTypeConstant;
......@@ -13,6 +14,7 @@ import com.anplus.hr.domain.params.EmployeeChangeLogParam;
import com.anplus.hr.domain.vo.EmployeeChangeLogVo;
import com.anplus.hr.mapper.EmployeeChangeLogMapper;
import com.anplus.hr.service.EmployeeChangeLogServ;
import com.anplus.hr.service.EmployeeSysDeptServ;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
......@@ -39,6 +41,7 @@ public class EmployeeChangeLogServImpl extends ServiceImpl<EmployeeChangeLogMapp
private final EmployeeChangeLogMapper employeeChangeLogMapper;
private final SysDeptMapper sysDeptMapper;
private final EmployeeSysDeptServ employeeSysDeptServ;
/**
* 分页查询员工异动记录列表
......@@ -71,7 +74,16 @@ public class EmployeeChangeLogServImpl extends ServiceImpl<EmployeeChangeLogMapp
LambdaQueryWrapper<EmployeeChangeLog> lambdaQuery = Wrappers.<EmployeeChangeLog>lambdaQuery();
lambdaQuery.orderByDesc(EmployeeChangeLog::getId);
lambdaQuery.eq(StrUtil.isNotBlank(param.getType()), EmployeeChangeLog::getType, param.getType());
lambdaQuery.eq(param.getDeptId() != null, EmployeeChangeLog::getDeptId, param.getDeptId());
// lambdaQuery.eq(param.getDeptId() != null, EmployeeChangeLog::getDeptId, param.getDeptId());
if (ObjectUtil.isNotNull(param.getDeptId())) {
//优先单部门搜索
lambdaQuery.eq(EmployeeChangeLog::getDeptId, param.getDeptId());
} else if (ObjectUtil.isNotNull(param.getBelongDeptId())) {
//部门树搜索
lambdaQuery.and(x -> {
x.in(EmployeeChangeLog::getDeptId, employeeSysDeptServ.buildQueryWrapper(param.getBelongDeptId()));
});
}
lambdaQuery.eq(param.getEmployeeId() != null, EmployeeChangeLog::getEmployeeId, param.getEmployeeId());
lambdaQuery.eq(param.getChangeDate() != null, EmployeeChangeLog::getChangeDate, param.getChangeDate());
lambdaQuery.eq(StrUtil.isNotBlank(param.getResignType()), EmployeeChangeLog::getResignType, param.getResignType());
......
......@@ -13,6 +13,7 @@ import com.anplus.hr.domain.vo.EmployeeInfoVo;
import com.anplus.hr.mapper.EmployeeInfoMapper;
import com.anplus.hr.service.EmployeeInfoResignServ;
import com.anplus.hr.service.EmployeeInfoServ;
import com.anplus.hr.service.EmployeeSysDeptServ;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
......@@ -52,6 +53,7 @@ public class EmployeeInfoResignServImpl extends ServiceImpl<EmployeeInfoMapper,
private final TransService transService;
private final SysOssMapper sysOssMapper;
private final EmployeeAsyncService employeeAsyncService;
private final EmployeeSysDeptServ employeeSysDeptServ;
/**
* 分页查询员工信息列表
......@@ -119,12 +121,13 @@ public class EmployeeInfoResignServImpl extends ServiceImpl<EmployeeInfoMapper,
successList.add(item);
});
if (CollUtil.isNotEmpty(successList)) {
// Map<String, Long> deptNamesIdMap = employeeSysDeptServ.selectJoinDeptNames();
Map<String, Long> deptNamesIdMap = employeeSysDeptServ.selectJoinDeptNames();
ExcelProcessingResult excelProcessingResult = future.join();
List<EmployeeInfo> insertList = new ArrayList<>(successList.size());
for (EmployeeInfoResignImportVo importVo : successList) {
SysOss sysOss = employeeInfoServ.handleImageToUrl(excelProcessingResult, importVo);
// Long leafDeptId = deptNamesIdMap.get(employeeInfoServ.buildDeptNameStr(importVo));
Long leafDeptId = deptNamesIdMap.get(employeeInfoServ.buildDeptNameStr(importVo));
Long partDeptId = deptNamesIdMap.get(employeeInfoServ.buildPartDeptNameStr(importVo));
// if (leafDeptId == null) {
// importVo.addError("部门不存在");
// errorList.add(importVo);
......@@ -132,7 +135,8 @@ public class EmployeeInfoResignServImpl extends ServiceImpl<EmployeeInfoMapper,
// }
EmployeeInfo employeeInfo = MapstructUtils.convert(importVo, EmployeeInfo.class);
employeeInfo.setStatus(HrStatusEnum.RESIGN.getStatus());
// employeeInfo.setDeptId(leafDeptId);
employeeInfo.setDeptId(leafDeptId);
employeeInfo.setPartDeptId(partDeptId);
if (sysOss != null) {
ossList.add(sysOss);
ossEmployeeInfoMap.put(sysOss.getFileName(), employeeInfo);
......
package com.anplus.hr.service.impl;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.cola.dto.PageResponse;
import com.anplus.hr.constant.HrStatusEnum;
......@@ -10,6 +11,7 @@ import com.anplus.hr.domain.params.EmployeePhoneBookParam;
import com.anplus.hr.domain.vo.EmployeePhoneBookVo;
import com.anplus.hr.mapper.EmployeeInfoMapper;
import com.anplus.hr.service.EmployeePhoneBookServ;
import com.anplus.hr.service.EmployeeSysDeptServ;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
......@@ -32,6 +34,7 @@ import java.util.List;
public class EmployeePhoneBookServImpl extends ServiceImpl<EmployeeInfoMapper, EmployeeInfo> implements EmployeePhoneBookServ {
private final EmployeeInfoMapper employeeInfoMapper;
private final EmployeeSysDeptServ employeeSysDeptServ;
/**
* 分页查询电话本管理列表
......@@ -68,7 +71,16 @@ public class EmployeePhoneBookServImpl extends ServiceImpl<EmployeeInfoMapper, E
lambdaQuery.eq(StrUtil.isNotBlank(param.getFirstLevelDepartment()), EmployeeInfo::getFirstLevelDepartment, param.getFirstLevelDepartment());
lambdaQuery.eq(StrUtil.isNotBlank(param.getSecondLevelDepartment()), EmployeeInfo::getSecondLevelDepartment, param.getSecondLevelDepartment());
lambdaQuery.eq(StrUtil.isNotBlank(param.getThirdLevelDepartment()), EmployeeInfo::getThirdLevelDepartment, param.getThirdLevelDepartment());
lambdaQuery.eq(param.getDeptId() != null, EmployeeInfo::getDeptId, param.getDeptId());
// lambdaQuery.eq(param.getDeptId() != null, EmployeeInfo::getDeptId, param.getDeptId());
if (ObjectUtil.isNotNull(param.getDeptId())) {
//优先单部门搜索
lambdaQuery.eq(EmployeeInfo::getDeptId, param.getDeptId());
} else if (ObjectUtil.isNotNull(param.getBelongDeptId())) {
//部门树搜索
lambdaQuery.and(x -> {
x.in(EmployeeInfo::getDeptId, employeeSysDeptServ.buildQueryWrapper(param.getBelongDeptId()));
});
}
lambdaQuery.eq(StrUtil.isNotBlank(param.getPosition()), EmployeeInfo::getPosition, param.getPosition());
lambdaQuery.like(StrUtil.isNotBlank(param.getName()), EmployeeInfo::getName, param.getName());
lambdaQuery.eq(StrUtil.isNotBlank(param.getPhoneNumber()), EmployeeInfo::getPhoneNumber, param.getPhoneNumber());
......
package com.anplus.hr.service.impl;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.cola.dto.PageResponse;
import com.anplus.hr.constant.HrStatusEnum;
import com.anplus.hr.domain.EmployeeInfo;
import com.anplus.hr.domain.params.EmployeeRegularReminderListParam;
import com.anplus.hr.domain.params.EmployeeRegularReminderParam;
import com.anplus.hr.domain.vo.EmployeeRegularReminderVo;
import com.anplus.hr.mapper.EmployeeInfoMapper;
import com.anplus.hr.service.EmployeeRegularReminderServ;
import com.anplus.hr.service.EmployeeSysDeptServ;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
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.common.core.util.MapstructUtils;
import top.binfast.common.mybatis.util.QueryUtil;
import java.time.LocalDate;
import java.util.List;
import java.util.Map;
/**
* 转正提醒Service业务层处理
*
* @author LiuBin
* @date 2025-11-20
*/
@RequiredArgsConstructor
@Service
public class EmployeeRegularReminderServImpl extends ServiceImpl<EmployeeInfoMapper, EmployeeInfo> implements EmployeeRegularReminderServ {
private final EmployeeInfoMapper employeeInfoMapper;
private final EmployeeSysDeptServ employeeSysDeptServ;
/**
* 分页查询转正提醒列表
*
* @param param 查询条件
* @return 转正提醒分页列表
*/
@Override
public PageResponse<EmployeeRegularReminderVo> queryPageList(EmployeeRegularReminderListParam param) {
Page<EmployeeInfo> page = QueryUtil.getPage(param);
LambdaQueryWrapper<EmployeeInfo> lambdaQuery = this.buildQueryWrapper(param);
employeeInfoMapper.selectPage(page, lambdaQuery);
return QueryUtil.getPageResponse(page, MapstructUtils.convert(page.getRecords(), EmployeeRegularReminderVo.class));
}
/**
* 查询符合条件的转正提醒列表
*
* @param param 查询条件
* @return 转正提醒列表
*/
@Override
public List<EmployeeRegularReminderVo> queryList(EmployeeRegularReminderListParam param) {
LambdaQueryWrapper<EmployeeInfo> lambdaQuery = this.buildQueryWrapper(param);
return MapstructUtils.convert(employeeInfoMapper.selectList(lambdaQuery), EmployeeRegularReminderVo.class);
}
private LambdaQueryWrapper<EmployeeInfo> buildQueryWrapper(EmployeeRegularReminderListParam param) {
Map<String, Object> params = param.getParams();
LambdaQueryWrapper<EmployeeInfo> lambdaQuery = Wrappers.<EmployeeInfo>lambdaQuery();
lambdaQuery.orderByDesc(EmployeeInfo::getId);
lambdaQuery.eq(EmployeeInfo::getStatus, HrStatusEnum.ENTRY.getStatus());
lambdaQuery.between(EmployeeInfo::getExpectedRegularDate, LocalDate.now().minusMonths(1), LocalDate.now().plusMonths(1));
lambdaQuery.eq(StrUtil.isNotBlank(param.getPlate()), EmployeeInfo::getPlate, param.getPlate());
lambdaQuery.eq(StrUtil.isNotBlank(param.getFirstLevelDepartment()), EmployeeInfo::getFirstLevelDepartment, param.getFirstLevelDepartment());
lambdaQuery.eq(StrUtil.isNotBlank(param.getSecondLevelDepartment()), EmployeeInfo::getSecondLevelDepartment, param.getSecondLevelDepartment());
lambdaQuery.eq(StrUtil.isNotBlank(param.getThirdLevelDepartment()), EmployeeInfo::getThirdLevelDepartment, param.getThirdLevelDepartment());
// lambdaQuery.eq(param.getDeptId() != null, EmployeeInfo::getDeptId, param.getDeptId());
if (ObjectUtil.isNotNull(param.getDeptId())) {
//优先单部门搜索
lambdaQuery.eq(EmployeeInfo::getDeptId, param.getDeptId());
} else if (ObjectUtil.isNotNull(param.getBelongDeptId())) {
//部门树搜索
lambdaQuery.and(x -> {
x.in(EmployeeInfo::getDeptId, employeeSysDeptServ.buildQueryWrapper(param.getBelongDeptId()));
});
}
lambdaQuery.eq(StrUtil.isNotBlank(param.getPosition()), EmployeeInfo::getPosition, param.getPosition());
lambdaQuery.like(StrUtil.isNotBlank(param.getName()), EmployeeInfo::getName, param.getName());
lambdaQuery.eq(StrUtil.isNotBlank(param.getPhoneNumber()), EmployeeInfo::getPhoneNumber, param.getPhoneNumber());
// lambdaQuery.eq(param.getEntryDate() != null, EmployeeInfo::getEntryDate, param.getEntryDate());
lambdaQuery.between(params.get("entryBeginTime") != null && params.get("entryEndTime") != null,
EmployeeInfo::getEntryDate, params.get("entryBeginTime"), params.get("entryEndTime"));
// lambdaQuery.eq(param.getExpectedRegularDate() != null, EmployeeInfo::getExpectedRegularDate, param.getExpectedRegularDate());
lambdaQuery.between(params.get("expectedRegularBeginTime") != null && params.get("expectedRegularEndTime") != null,
EmployeeInfo::getExpectedRegularDate, params.get("expectedRegularBeginTime"), params.get("expectedRegularEndTime"));
return lambdaQuery;
}
/**
* 查询转正提醒
*
* @param id 主键
* @return 转正提醒
*/
@Override
public EmployeeRegularReminderVo queryById(Long id) {
EmployeeInfo employeeRegularReminder = employeeInfoMapper.selectById(id);
return MapstructUtils.convert(employeeRegularReminder, EmployeeRegularReminderVo.class);
}
/**
* 新增转正提醒
*
* @param param 转正提醒
* @return 是否新增成功
*/
@Override
public Boolean insertByParam(EmployeeRegularReminderParam param) {
// EmployeeInfo employeeRegularReminder = MapstructUtils.convert(param, EmployeeInfo.class);
// return this.save(employeeRegularReminder);
return true;
}
/**
* 修改转正提醒
*
* @param param 转正提醒
* @return 是否修改成功
*/
@Override
public Boolean updateByParam(EmployeeRegularReminderParam param) {
// EmployeeInfo employeeRegularReminder = MapstructUtils.convert(param, EmployeeInfo.class);
// return this.updateById(employeeRegularReminder);
return true;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(EmployeeInfo entity) {
// 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除转正提醒信息
*
* @param ids 待删除的主键集合
* @return 是否删除成功
*/
@Override
// @Transactional(rollbackFor = {Exception.class})
public Boolean delByIds(List<Long> ids) {
//做一些业务上的校验,判断是否需要校验
// return this.removeByIds(ids);
return true;
}
}
......@@ -4,6 +4,7 @@ import cn.hutool.core.date.LocalDateTimeUtil;
import com.anplus.hr.config.SeniorityUtils;
import com.anplus.hr.constant.HrAgeGroupEnum;
import com.anplus.hr.constant.HrFlowEnum;
import com.anplus.hr.constant.HrStatusEnum;
import com.anplus.hr.constant.HrYearsOfServiceSegmentEnum;
import com.anplus.hr.domain.EmployeeInfo;
import com.anplus.hr.mapper.EmployeeInfoMapper;
......@@ -11,6 +12,8 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
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.LocalDateTime;
......@@ -38,6 +41,36 @@ public class EmployeeScheduleService {
executeSafely("刷新员工工龄以及年龄", this::processRefreshInfo);
}
/**
* 使用cron表达式
* 每月15号8点10分执行
*/
// @Scheduled(cron = "0 10 8 15,16,17,18,19,20 * ?")
public void monthlyTask() {
// TODO: 实现每月任务逻辑
boolean existNewRegularReminders = employeeInfoMapper.exists(new LambdaUpdateWrapper<EmployeeInfo>()
.eq(EmployeeInfo::getStatus, HrStatusEnum.ENTRY.getStatus())
.between(EmployeeInfo::getExpectedRegularDate, LocalDate.now(), LocalDate.now().plusMonths(1))
);
if (existNewRegularReminders) {
SseMessageDto dto = new SseMessageDto();
dto.setMessage("有新的转正提醒!请检查!");
dto.setUserIds(List.of(1L));
SseMessageUtils.publishMessage(dto);
}
boolean existContractRenewalReminders = employeeInfoMapper.exists(new LambdaUpdateWrapper<EmployeeInfo>()
.eq(EmployeeInfo::getStatus, HrStatusEnum.REGULARIZATION.getStatus())
.between(EmployeeInfo::getContractEndDate, LocalDate.now(), LocalDate.now().plusMonths(1))
);
if (existContractRenewalReminders) {
SseMessageDto dto = new SseMessageDto();
dto.setMessage("有新的合同续约提醒!请检查!");
dto.setUserIds(List.of(1L));
SseMessageUtils.publishMessage(dto);
}
}
/**
* 刷新员工工龄以及工龄组
*/
......@@ -48,15 +81,17 @@ public class EmployeeScheduleService {
List<EmployeeInfo> updateList = new ArrayList<>();
for (EmployeeInfo employeeInfo : employeeInfos) {
boolean isUpdate = false;
int newTotalMonths = SeniorityUtils.calculateTotalMonths(employeeInfo.getEntryDate());
if (employeeInfo.getYearsOfServiceMonths() != newTotalMonths) {
isUpdate = true;
employeeInfo.setYearsOfServiceMonths(newTotalMonths);
employeeInfo.setYearsOfService(SeniorityUtils.formatMonthsToSeniority(newTotalMonths));
// 更新员工工龄组
HrYearsOfServiceSegmentEnum yearsOfServiceSegmentEnum = HrYearsOfServiceSegmentEnum.getByTotalMonths(newTotalMonths);
if (yearsOfServiceSegmentEnum != null) {
employeeInfo.setYearsOfServiceSegment(yearsOfServiceSegmentEnum.getCode());
if (employeeInfo.getEntryDate() != null) {
int newTotalMonths = SeniorityUtils.calculateTotalMonths(employeeInfo.getEntryDate());
if (employeeInfo.getYearsOfServiceMonths() == null || employeeInfo.getYearsOfServiceMonths() != newTotalMonths) {
isUpdate = true;
employeeInfo.setYearsOfServiceMonths(newTotalMonths);
employeeInfo.setYearsOfService(SeniorityUtils.formatMonthsToSeniority(newTotalMonths));
// 更新员工工龄组
HrYearsOfServiceSegmentEnum yearsOfServiceSegmentEnum = HrYearsOfServiceSegmentEnum.getByTotalMonths(newTotalMonths);
if (yearsOfServiceSegmentEnum != null) {
employeeInfo.setYearsOfServiceSegment(yearsOfServiceSegmentEnum.getCode());
}
}
}
isUpdate = isUpdate || precessRefreshAge(employeeInfo);
......@@ -69,9 +104,12 @@ public class EmployeeScheduleService {
private boolean precessRefreshAge(EmployeeInfo employeeInfo) {
boolean isUpdate = false;
if (employeeInfo.getBirthDate() == null) {
return false;
}
Period period = LocalDateTimeUtil.betweenPeriod(employeeInfo.getBirthDate(), LocalDate.from(LocalDateTime.now()));
int years = period.getYears();
if (employeeInfo.getAge() != years) {
if (employeeInfo.getAge() == null || employeeInfo.getAge() != years) {
isUpdate = true;
employeeInfo.setAge(years);
// 更新员工年龄组
......
......@@ -54,6 +54,19 @@ public class EmployeeSysDeptServImpl implements EmployeeSysDeptServ {
return result;
}
/**
* 构建部门查询条件
*
* @param belongDeptId 部门id
*/
@Override
public List<Long> buildQueryWrapper(Long belongDeptId) {
List<SysDept> deptList = sysDeptMapper.selectListByParentId(belongDeptId);
List<Long> deptIds = LambdaUtil.mapToList(deptList, SysDept::getId);
deptIds.add(belongDeptId);
return deptIds;
}
// 遍历根节点列表
private <T extends TreeDTO> void traverseDeptTree(List<T> deptList, String parentPath, Map<String, Long> result) {
if (CollUtil.isEmpty(deptList)) {
......
......@@ -17,9 +17,18 @@ import { defaultFormValueGetter, useBeforeCloseDiff } from '#/utils/popup';
const emit = defineEmits<{
success: [];
}>();
const formData = ref<${BusinessName}Api.${BusinessName}>();
const isUpdate = ref(false);
const formSchema: VbenFormSchema[] = [
{
component: 'Input',
dependencies: {
show: () => false,
triggerFields: [''],
},
fieldName: 'id',
label: 'id',
},
#foreach($column in $columns)
#set($field=$column.javaField)
#if(($column.insert || $column.edit) && !$column.pk)
......@@ -168,9 +177,9 @@ const [Drawer, drawerApi] = useVbenDrawer({
return null;
}
const data = drawerApi.getData<${BusinessName}Api.${BusinessName}>();
if (data) {
formData.value = data;
await formApi.setValues(formData.value);
isUpdate.value = !!data?.id;
if (isUpdate.value) {
await formApi.setValues(data);
} else {
formApi.resetForm();
}
......@@ -184,9 +193,7 @@ async function onSubmit() {
drawerApi.lock();
const data = await formApi.getValues<${BusinessName}Api.${BusinessName}>();
try {
await (formData.value?.id
? apiUpdate({ id: formData.value.id, ...data })
: apiAdd(data));
await (isUpdate.value ? apiUpdate(data) : apiAdd(data));
resetInitialized();
emit('success');
drawerApi.close();
......@@ -202,7 +209,7 @@ async function handleClosed() {
}
const getDrawerTitle = computed(() =>
formData.value?.id ? '修改${functionName}' : '新增${functionName}',
isUpdate.value ? '修改${functionName}' : '新增${functionName}',
);
</script>
<template>
......
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