From 15a84807844c3bf16c951bfbc3232e97a83352bc Mon Sep 17 00:00:00 2001 From: wangyu <823267011@qq.com> Date: Sun, 16 Feb 2025 18:41:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=A5=E8=81=8C=E7=A6=BB=E8=81=8C=E5=88=9D?= =?UTF-8?q?=E6=AD=A5=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/oa/HeartBeatController.java | 16 + .../src/main/resources/application.yml | 2 +- .../com/ruoyi/common/config/RuoYiConfig.java | 2 +- .../framework/config/ResourcesConfig.java | 5 + .../EmployeeOffboardingController.java | 108 +++++ .../EmployeeOnboardingController.java | 109 +++++ .../ruoyi/oa/domain/EmployeeOffboarding.java | 98 ++++ .../ruoyi/oa/domain/EmployeeOnboarding.java | 144 ++++++ .../oa/domain/bo/EmployeeOffboardingBo.java | 106 +++++ .../oa/domain/bo/EmployeeOnboardingBo.java | 174 +++++++ .../oa/domain/vo/EmployeeOffboardingVo.java | 123 +++++ .../oa/domain/vo/EmployeeOnboardingVo.java | 219 +++++++++ .../oa/mapper/EmployeeOffboardingMapper.java | 15 + .../oa/mapper/EmployeeOnboardingMapper.java | 16 + .../service/IEmployeeOffboardingService.java | 49 ++ .../service/IEmployeeOnboardingService.java | 49 ++ .../impl/EmployeeOffboardingServiceImpl.java | 135 ++++++ .../impl/EmployeeOnboardingServiceImpl.java | 141 ++++++ .../mapper/oa/EmployeeOffboardingMapper.xml | 31 ++ .../mapper/oa/EmployeeOnboardingMapper.xml | 43 ++ .../ruoyi/system/mapper/SysUserMapper.java | 7 +- .../ruoyi/system/service/ISysUserService.java | 8 + .../service/impl/SysUserServiceImpl.java | 5 + .../resources/mapper/system/SysUserMapper.xml | 6 +- ruoyi-ui/src/api/oa/offboarding.js | 44 ++ ruoyi-ui/src/api/oa/onboarding.js | 44 ++ ruoyi-ui/src/router/index.js | 37 ++ ruoyi-ui/src/views/oa/offboarding/add.vue | 123 +++++ ruoyi-ui/src/views/oa/offboarding/index.vue | 337 +++++++++++++ ruoyi-ui/src/views/oa/offboarding/update.vue | 177 +++++++ ruoyi-ui/src/views/oa/onboarding/add.vue | 280 +++++++++++ ruoyi-ui/src/views/oa/onboarding/index.vue | 449 ++++++++++++++++++ ruoyi-ui/src/views/oa/onboarding/update.vue | 341 +++++++++++++ 33 files changed, 3438 insertions(+), 5 deletions(-) create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/HeartBeatController.java create mode 100644 ruoyi-oa/src/main/java/com/ruoyi/oa/controller/EmployeeOffboardingController.java create mode 100644 ruoyi-oa/src/main/java/com/ruoyi/oa/controller/EmployeeOnboardingController.java create mode 100644 ruoyi-oa/src/main/java/com/ruoyi/oa/domain/EmployeeOffboarding.java create mode 100644 ruoyi-oa/src/main/java/com/ruoyi/oa/domain/EmployeeOnboarding.java create mode 100644 ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/EmployeeOffboardingBo.java create mode 100644 ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/EmployeeOnboardingBo.java create mode 100644 ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/EmployeeOffboardingVo.java create mode 100644 ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/EmployeeOnboardingVo.java create mode 100644 ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/EmployeeOffboardingMapper.java create mode 100644 ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/EmployeeOnboardingMapper.java create mode 100644 ruoyi-oa/src/main/java/com/ruoyi/oa/service/IEmployeeOffboardingService.java create mode 100644 ruoyi-oa/src/main/java/com/ruoyi/oa/service/IEmployeeOnboardingService.java create mode 100644 ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/EmployeeOffboardingServiceImpl.java create mode 100644 ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/EmployeeOnboardingServiceImpl.java create mode 100644 ruoyi-oa/src/main/resources/mapper/oa/EmployeeOffboardingMapper.xml create mode 100644 ruoyi-oa/src/main/resources/mapper/oa/EmployeeOnboardingMapper.xml create mode 100644 ruoyi-ui/src/api/oa/offboarding.js create mode 100644 ruoyi-ui/src/api/oa/onboarding.js create mode 100644 ruoyi-ui/src/views/oa/offboarding/add.vue create mode 100644 ruoyi-ui/src/views/oa/offboarding/index.vue create mode 100644 ruoyi-ui/src/views/oa/offboarding/update.vue create mode 100644 ruoyi-ui/src/views/oa/onboarding/add.vue create mode 100644 ruoyi-ui/src/views/oa/onboarding/index.vue create mode 100644 ruoyi-ui/src/views/oa/onboarding/update.vue diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/HeartBeatController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/HeartBeatController.java new file mode 100644 index 0000000..b370de7 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/HeartBeatController.java @@ -0,0 +1,16 @@ +package com.ruoyi.web.controller.oa; + + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/heartBeat") +public class HeartBeatController { + + @GetMapping + public String heartBeat() { + return "ok"; + } +} diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index 6ce2024..09e5475 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -13,7 +13,7 @@ ruoyi: # 缓存懒加载 cacheLazy: false # 文件路径 - profile: /home/wy/oa/uploadPath + profile: /home/wangyu/oa/uploadPath captcha: # 页面 <参数设置> 可开启关闭 验证码校验 diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/config/RuoYiConfig.java b/ruoyi-common/src/main/java/com/ruoyi/common/config/RuoYiConfig.java index 0886ff8..8c83291 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/config/RuoYiConfig.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/config/RuoYiConfig.java @@ -43,7 +43,7 @@ public class RuoYiConfig { /** 上传路径 */ @Getter - private static String profile = "/home/wy/oa/uploadPath"; + private static String profile = "/home/wangyu/oa/uploadPath"; /** * 获取地址开关 diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java index ea83338..66fc6a1 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java @@ -1,5 +1,7 @@ package com.ruoyi.framework.config; +import com.ruoyi.common.config.RuoYiConfig; +import com.ruoyi.common.constant.Constants; import com.ruoyi.framework.interceptor.PlusWebInvokeTimeInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -26,6 +28,9 @@ public class ResourcesConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { + /** 本地文件上传路径 */ + registry.addResourceHandler(Constants.RESOURCE_PREFIX + "/**") + .addResourceLocations("file:" + RuoYiConfig.getProfile() + "/"); } /** diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/EmployeeOffboardingController.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/EmployeeOffboardingController.java new file mode 100644 index 0000000..265641a --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/EmployeeOffboardingController.java @@ -0,0 +1,108 @@ +package com.ruoyi.oa.controller; + +import java.util.List; +import java.util.Arrays; +import java.util.concurrent.TimeUnit; + +import lombok.RequiredArgsConstructor; +import javax.servlet.http.HttpServletResponse; +import javax.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import com.ruoyi.common.annotation.RepeatSubmit; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +import com.ruoyi.common.core.validate.QueryGroup; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.oa.domain.vo.EmployeeOffboardingVo; +import com.ruoyi.oa.domain.bo.EmployeeOffboardingBo; +import com.ruoyi.oa.service.IEmployeeOffboardingService; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * 离职管理 + * + * @author hdka + * @date 2025-02-16 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/offboarding") +public class EmployeeOffboardingController extends BaseController { + + private final IEmployeeOffboardingService iEmployeeOffboardingService; + + /** + * 查询离职管理列表 + */ + @SaCheckPermission("system:offboarding:list") + @GetMapping("/list") + public TableDataInfo list(EmployeeOffboardingBo bo, PageQuery pageQuery) { + return iEmployeeOffboardingService.queryPageList(bo, pageQuery); + } + + /** + * 导出离职管理列表 + */ + @SaCheckPermission("system:offboarding:export") + @Log(title = "离职管理", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(EmployeeOffboardingBo bo, HttpServletResponse response) { + List list = iEmployeeOffboardingService.queryList(bo); + ExcelUtil.exportExcel(list, "离职管理", EmployeeOffboardingVo.class, response); + } + + /** + * 获取离职管理详细信息 + * + * @param offboardingId 主键 + */ + @SaCheckPermission("system:offboarding:query") + @GetMapping("/{offboardingId}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long offboardingId) { + return R.ok(iEmployeeOffboardingService.queryById(offboardingId)); + } + + /** + * 新增离职管理 + */ + @SaCheckPermission("system:offboarding:add") + @Log(title = "离职管理", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody EmployeeOffboardingBo bo) { + return toAjax(iEmployeeOffboardingService.insertByBo(bo)); + } + + /** + * 修改离职管理 + */ + @SaCheckPermission("system:offboarding:edit") + @Log(title = "离职管理", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody EmployeeOffboardingBo bo) { + return toAjax(iEmployeeOffboardingService.updateByBo(bo)); + } + + /** + * 删除离职管理 + * + * @param offboardingIds 主键串 + */ + @SaCheckPermission("system:offboarding:remove") + @Log(title = "离职管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{offboardingIds}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] offboardingIds) { + return toAjax(iEmployeeOffboardingService.deleteWithValidByIds(Arrays.asList(offboardingIds), true)); + } +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/EmployeeOnboardingController.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/EmployeeOnboardingController.java new file mode 100644 index 0000000..3f6b2c9 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/EmployeeOnboardingController.java @@ -0,0 +1,109 @@ +package com.ruoyi.oa.controller; + +import java.util.List; +import java.util.Arrays; +import java.util.concurrent.TimeUnit; + +import com.ruoyi.oa.domain.bo.EmployeeOnboardingBo; +import com.ruoyi.oa.domain.vo.EmployeeOnboardingVo; +import com.ruoyi.oa.service.IEmployeeOnboardingService; +import lombok.RequiredArgsConstructor; +import javax.servlet.http.HttpServletResponse; +import javax.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import com.ruoyi.common.annotation.RepeatSubmit; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +import com.ruoyi.common.core.validate.QueryGroup; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; + +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * 入职管理 + * + * @author hdka + * @date 2025-02-15 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/onboarding") +public class EmployeeOnboardingController extends BaseController { + + private final IEmployeeOnboardingService iEmployeeOnboardingService; + + /** + * 查询入职管理列表 + */ + @SaCheckPermission("system:onboarding:list") + @GetMapping("/list") + public TableDataInfo list(EmployeeOnboardingBo bo, PageQuery pageQuery) { + return iEmployeeOnboardingService.queryPageList(bo, pageQuery); + } + + /** + * 导出入职管理列表 + */ + @SaCheckPermission("system:onboarding:export") + @Log(title = "入职管理", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(EmployeeOnboardingBo bo, HttpServletResponse response) { + List list = iEmployeeOnboardingService.queryList(bo); + ExcelUtil.exportExcel(list, "入职管理", EmployeeOnboardingVo.class, response); + } + + /** + * 获取入职管理详细信息 + * + * @param onboardingId 主键 + */ + @SaCheckPermission("system:onboarding:query") + @GetMapping("/{onboardingId}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long onboardingId) { + return R.ok(iEmployeeOnboardingService.queryById(onboardingId)); + } + + /** + * 新增入职管理 + */ + @SaCheckPermission("system:onboarding:add") + @Log(title = "入职管理", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody EmployeeOnboardingBo bo) { + return toAjax(iEmployeeOnboardingService.insertByBo(bo)); + } + + /** + * 修改入职管理 + */ + @SaCheckPermission("system:onboarding:edit") + @Log(title = "入职管理", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody EmployeeOnboardingBo bo) { + return toAjax(iEmployeeOnboardingService.updateByBo(bo)); + } + + /** + * 删除入职管理 + * + * @param onboardingIds 主键串 + */ + @SaCheckPermission("system:onboarding:remove") + @Log(title = "入职管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{onboardingIds}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] onboardingIds) { + return toAjax(iEmployeeOnboardingService.deleteWithValidByIds(Arrays.asList(onboardingIds), true)); + } +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/EmployeeOffboarding.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/EmployeeOffboarding.java new file mode 100644 index 0000000..03dfe71 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/EmployeeOffboarding.java @@ -0,0 +1,98 @@ +package com.ruoyi.oa.domain; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import java.io.Serializable; +import java.util.Date; +import java.math.BigDecimal; + +import java.math.BigDecimal; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.core.domain.BaseEntity; +import org.springframework.format.annotation.DateTimeFormat; + +/** + * 离职管理对象 employee_offboarding + * + * @author hdka + * @date 2025-02-16 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("employee_offboarding") +public class EmployeeOffboarding extends BaseEntity { + + private static final long serialVersionUID=1L; + + /** + * 离职记录ID + */ + @TableId(value = "offboarding_id") + private Long offboardingId; + /** + * 用户ID (外键) + */ + private Long userId; + /** + * 离职日期 + */ + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date resignationDate; + /** + * 离职面谈 + */ + private Integer exitInterview; + /** + * 工作交接 + */ + private Integer handoverCompleted; + /** + * 离职原因 + */ + private String exitReason; + /** + * 最终结算工资 + */ + private BigDecimal finalSalary; + /** + * 离职申请 + */ + private Integer resignationApplicationSubmitted; + /** + * 数据备份 + */ + private Integer dataBackupCompleted; + /** + * 是否已安排工作交接 + */ + private Integer handoverArranged; + /** + * 薪资结算是否完成 + */ + private Integer salarySettled; + /** + * 福利结算是否完成 + */ + private Integer benefitsSettled; + /** + * 离职证明 + */ + private Integer exitCertificateIssued; + /** + * 确认离职 + */ + private Integer offboardingConfirmed; + /** + * 备注 + */ + private String remark; + /** + * 删除标识 + */ + @TableLogic + private Integer delFlag; + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/EmployeeOnboarding.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/EmployeeOnboarding.java new file mode 100644 index 0000000..19062b7 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/EmployeeOnboarding.java @@ -0,0 +1,144 @@ +package com.ruoyi.oa.domain; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import java.io.Serializable; +import java.util.Date; +import java.math.BigDecimal; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 入职管理对象 employee_onboarding + * + * @author hdka + * @date 2025-02-15 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("employee_onboarding") +public class EmployeeOnboarding extends BaseEntity { + + private static final long serialVersionUID=1L; + + /** + * 入职记录ID + */ + @TableId(value = "onboarding_id") + private Long onboardingId; + /** + * 证件照 + */ + private String idPhoto; + /** + * 用户ID (外键) + */ + private Long userId; + /** + * 入职日期 + */ + private Date joiningDate; + /** + * 试用期结束日期 + */ + private Date probationPeriodEnd; + + private String address; + + /** + * 直属经理ID + */ + private Long managerId; + /** + * 是否提交入职资料 + */ + private Integer documentsSubmitted; + /** + * 是否完成入职培训 + */ + private Integer orientationCompleted; + /** + * 入职状态(pending,completed,onboarding) + */ + private Long joiningStatus; + /** + * 是否完成招聘与面试 + */ + private Integer recruitmentCompleted; + /** + * 是否已发放Offer + */ + private Integer offerIssued; + /** + * 是否已签署合同 + */ + private Integer contractSigned; + /** + * 入职材料/工作准备是否完成 + */ + private Integer materialsPrepared; + /** + * 是否完成入职培训 + */ + private Integer trainingCompleted; + /** + * 是否完成工作条件准备(权限分配、工位等) + */ + private Integer workConditionsPrepared; + /** + * 最高学历 + */ + private String highestDegree; + /** + * 备注 + */ + private String remark; + /** + * 删除标识 + */ + @TableLogic + private Integer delFlag; + /** + * 出生日期 + */ + private Date birthDate; + /** + * 民族 + */ + private String ethnicity; + /** + * 转正日期 + */ + private Date confirmDate; + /** + * 婚姻状态 + */ + private String maritalStatus; + /** + * 政治面貌 + */ + private String politicalStatus; + /** + * 身高 + */ + private Long height; + /** + * 体重 + */ + private Long weight; + /** + * 编制类型 + */ + private String staffType; + /** + * 紧急联系人1 + */ + private String emergencyContact1; + /** + * 紧急联系人2 + */ + private String emergencyContact2; +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/EmployeeOffboardingBo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/EmployeeOffboardingBo.java new file mode 100644 index 0000000..9c73f13 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/EmployeeOffboardingBo.java @@ -0,0 +1,106 @@ +package com.ruoyi.oa.domain.bo; + +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.validation.constraints.*; + +import java.util.Date; + +import java.math.BigDecimal; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.core.domain.BaseEntity; +import org.springframework.format.annotation.DateTimeFormat; + +/** + * 离职管理业务对象 employee_offboarding + * + * @author hdka + * @date 2025-02-16 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +public class EmployeeOffboardingBo extends BaseEntity { + + /** + * 离职记录ID + */ + private Long offboardingId; + + /** + * 用户ID (外键) + */ + private Long userId; + + /** + * 离职日期 + */ + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date resignationDate; + + /** + * 离职面谈 + */ + private Integer exitInterview; + + /** + * 工作交接 + */ + private Integer handoverCompleted; + + /** + * 离职原因 + */ + private String exitReason; + + /** + * 最终结算工资 + */ + private BigDecimal finalSalary; + + /** + * 离职申请 + */ + private Integer resignationApplicationSubmitted; + + /** + * 数据备份 + */ + private Integer dataBackupCompleted; + + /** + * 是否已安排工作交接 + */ + private Integer handoverArranged; + + /** + * 薪资结算是否完成 + */ + private Integer salarySettled; + + /** + * 福利结算是否完成 + */ + private Integer benefitsSettled; + + /** + * 离职证明 + */ + private Integer exitCertificateIssued; + + /** + * 确认离职 + */ + private Integer offboardingConfirmed; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/EmployeeOnboardingBo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/EmployeeOnboardingBo.java new file mode 100644 index 0000000..8e3c2b6 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/EmployeeOnboardingBo.java @@ -0,0 +1,174 @@ +package com.ruoyi.oa.domain.bo; + +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.validation.constraints.*; + +import java.util.Date; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.core.domain.BaseEntity; +import org.springframework.format.annotation.DateTimeFormat; + +/** + * 入职管理业务对象 employee_onboarding + * + * @author hdka + * @date 2025-02-15 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +public class EmployeeOnboardingBo extends BaseEntity { + + /** + * 入职记录ID + */ + private Long onboardingId; + + /** + * 证件照 + */ + private String idPhoto; + + /** + * 用户ID (外键) + */ + private Long userId; + + /** + * 入职日期 + */ + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date joiningDate; + + /** + * 试用期结束日期 + */ + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date probationPeriodEnd; + + /** + * 直属经理ID + */ + private Long managerId; + + /** + * 是否提交入职资料 + */ + private Integer documentsSubmitted; + + /** + * 是否完成入职培训 + */ + private Integer orientationCompleted; + + /** + * 入职状态(pending,completed,onboarding) + */ + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Long joiningStatus; + + /** + * 是否完成招聘与面试 + */ + private Integer recruitmentCompleted; + + /** + * 是否已发放Offer + */ + private Integer offerIssued; + + /** + * 是否已签署合同 + */ + private Integer contractSigned; + + /** + * 入职材料/工作准备是否完成 + */ + private Integer materialsPrepared; + + /** + * 是否完成入职培训 + */ + private Integer trainingCompleted; + + /** + * 是否完成工作条件准备(权限分配、工位等) + */ + private Integer workConditionsPrepared; + + /** + * 最高学历 + */ + private String highestDegree; + + /** + * 备注 + */ + private String remark; + + /** + * 出生日期 + */ + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date birthDate; + + /** + * 民族 + */ + private String ethnicity; + + /** + * 转正日期 + */ + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date confirmDate; + + /** + * 婚姻状态 + */ + private String maritalStatus; + + /** + * 政治面貌 + */ + private String politicalStatus; + + /** + * 身高 + */ + private Long height; + + /** + * 体重 + */ + private Long weight; + + /** + * 编制类型 + */ + private String staffType; + + /** + * 紧急联系人1 + */ + private String emergencyContact1; + + /** + * 紧急联系人2 + */ + private String emergencyContact2; + + private String address; + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/EmployeeOffboardingVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/EmployeeOffboardingVo.java new file mode 100644 index 0000000..d04fa68 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/EmployeeOffboardingVo.java @@ -0,0 +1,123 @@ +package com.ruoyi.oa.domain.vo; + +import java.math.BigDecimal; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.ruoyi.common.annotation.ExcelDictFormat; +import com.ruoyi.common.convert.ExcelDictConvert; +import lombok.Data; +import java.util.Date; + + + +/** + * 离职管理视图对象 employee_offboarding + * + * @author hdka + * @date 2025-02-16 + */ +@Data +@ExcelIgnoreUnannotated +public class EmployeeOffboardingVo { + + private static final long serialVersionUID = 1L; + + /** + * 离职记录ID + */ + @ExcelProperty(value = "离职记录ID") + private Long offboardingId; + + /** + * 用户ID (外键) + */ + @ExcelProperty(value = "用户ID (外键)") + private Long userId; + + /** + * 离职日期 + */ + @ExcelProperty(value = "离职日期") + private Date resignationDate; + + /** + * 离职面谈 + */ + @ExcelProperty(value = "离职面谈") + private Integer exitInterview; + + /** + * 工作交接 + */ + @ExcelProperty(value = "工作交接") + private Integer handoverCompleted; + + /** + * 离职原因 + */ + @ExcelProperty(value = "离职原因") + private String exitReason; + + /** + * 最终结算工资 + */ + @ExcelProperty(value = "最终结算工资") + private BigDecimal finalSalary; + + /** + * 离职申请 + */ + @ExcelProperty(value = "离职申请") + private Integer resignationApplicationSubmitted; + + /** + * 数据备份 + */ + @ExcelProperty(value = "数据备份") + private Integer dataBackupCompleted; + + /** + * 是否已安排工作交接 + */ + @ExcelProperty(value = "是否已安排工作交接") + private Integer handoverArranged; + + /** + * 薪资结算是否完成 + */ + @ExcelProperty(value = "薪资结算是否完成") + private Integer salarySettled; + + /** + * 福利结算是否完成 + */ + @ExcelProperty(value = "福利结算是否完成") + private Integer benefitsSettled; + + /** + * 离职证明 + */ + @ExcelProperty(value = "离职证明") + private Integer exitCertificateIssued; + + /** + * 确认离职 + */ + @ExcelProperty(value = "确认离职") + private Integer offboardingConfirmed; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + /** + * 姓名 + */ + private String nickName; + + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/EmployeeOnboardingVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/EmployeeOnboardingVo.java new file mode 100644 index 0000000..2236e6d --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/EmployeeOnboardingVo.java @@ -0,0 +1,219 @@ +package com.ruoyi.oa.domain.vo; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.ruoyi.common.annotation.ExcelDictFormat; +import com.ruoyi.common.convert.ExcelDictConvert; +import com.ruoyi.oa.domain.EmployeeOnboarding; +import lombok.Data; +import java.util.Date; + + + +/** + * 入职管理视图对象 employee_onboarding + * + * @author hdka + * @date 2025-02-15 + */ +@Data +@ExcelIgnoreUnannotated +public class EmployeeOnboardingVo extends EmployeeOnboarding { + + private static final long serialVersionUID = 1L; + + /** + * 入职记录ID + */ + @ExcelProperty(value = "入职记录ID") + private Long onboardingId; + + /** + * 证件照 + */ + @ExcelProperty(value = "证件照") + private String idPhoto; + + /** + * 用户ID (外键) + */ + @ExcelProperty(value = "用户ID (外键)") + private Long userId; + + /** + * 入职日期 + */ + @ExcelProperty(value = "入职日期") + private Date joiningDate; + + /** + * 试用期结束日期 + */ + @ExcelProperty(value = "试用期结束日期") + private Date probationPeriodEnd; + + /** + * 直属经理ID + */ + @ExcelProperty(value = "直属经理ID") + private Long managerId; + + /** + * 是否提交入职资料 + */ + @ExcelProperty(value = "是否提交入职资料") + private Integer documentsSubmitted; + + /** + * 是否完成入职培训 + */ + @ExcelProperty(value = "是否完成入职培训") + private Integer orientationCompleted; + + /** + * 入职状态(pending,completed,onboarding) + */ + @ExcelProperty(value = "入职状态(pending,completed,onboarding)", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "joining_status") + private Long joiningStatus; + + /** + * 是否完成招聘与面试 + */ + @ExcelProperty(value = "是否完成招聘与面试") + private Integer recruitmentCompleted; + + /** + * 是否已发放Offer + */ + @ExcelProperty(value = "是否已发放Offer") + private Integer offerIssued; + + /** + * 是否已签署合同 + */ + @ExcelProperty(value = "是否已签署合同") + private Integer contractSigned; + + /** + * 入职材料/工作准备是否完成 + */ + @ExcelProperty(value = "入职材料/工作准备是否完成") + private Integer materialsPrepared; + + /** + * 是否完成入职培训 + */ + @ExcelProperty(value = "是否完成入职培训") + private Integer trainingCompleted; + + /** + * 是否完成工作条件准备(权限分配、工位等) + */ + @ExcelProperty(value = "是否完成工作条件准备", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "权=限分配、工位等") + private Integer workConditionsPrepared; + + /** + * 最高学历 + */ + @ExcelProperty(value = "最高学历") + private String highestDegree; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + /** + * 出生日期 + */ + @ExcelProperty(value = "出生日期") + private Date birthDate; + + /** + * 民族 + */ + @ExcelProperty(value = "民族") + private String ethnicity; + + /** + * 转正日期 + */ + @ExcelProperty(value = "转正日期") + private Date confirmDate; + + /** + * 婚姻状态 + */ + @ExcelProperty(value = "婚姻状态") + private String maritalStatus; + + /** + * 政治面貌 + */ + @ExcelProperty(value = "政治面貌") + private String politicalStatus; + + /** + * 身高 + */ + @ExcelProperty(value = "身高") + private Long height; + + /** + * 体重 + */ + @ExcelProperty(value = "体重") + private Long weight; + + /** + * 编制类型 + */ + @ExcelProperty(value = "编制类型") + private String staffType; + + /** + * 紧急联系人1 + */ + @ExcelProperty(value = "紧急联系人1") + private String emergencyContact1; + + /** + * 紧急联系人2 + */ + @ExcelProperty(value = "紧急联系人2") + private String emergencyContact2; + + /** 用户名 */ + private String userName; + + /** 名字 */ + private String nickName; + + /** 手机号 */ + private String phonenumber; + + /** 邮箱 */ + private String email; + + /** 住址 */ + private String address; + + /** 性别 */ + private Long sex; + + /** 部门id */ + private Long deptId; + + /** 身份证号 */ + private String idCard; + + /** 银行卡号 */ + private String bankCard; + + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/EmployeeOffboardingMapper.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/EmployeeOffboardingMapper.java new file mode 100644 index 0000000..3c38e27 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/EmployeeOffboardingMapper.java @@ -0,0 +1,15 @@ +package com.ruoyi.oa.mapper; + +import com.ruoyi.oa.domain.EmployeeOffboarding; +import com.ruoyi.oa.domain.vo.EmployeeOffboardingVo; +import com.ruoyi.common.core.mapper.BaseMapperPlus; + +/** + * 离职管理Mapper接口 + * + * @author hdka + * @date 2025-02-16 + */ +public interface EmployeeOffboardingMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/EmployeeOnboardingMapper.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/EmployeeOnboardingMapper.java new file mode 100644 index 0000000..bf7ae6d --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/EmployeeOnboardingMapper.java @@ -0,0 +1,16 @@ +package com.ruoyi.oa.mapper; + + +import com.ruoyi.common.core.mapper.BaseMapperPlus; +import com.ruoyi.oa.domain.EmployeeOnboarding; +import com.ruoyi.oa.domain.vo.EmployeeOnboardingVo; + +/** + * 入职管理Mapper接口 + * + * @author hdka + * @date 2025-02-15 + */ +public interface EmployeeOnboardingMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IEmployeeOffboardingService.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IEmployeeOffboardingService.java new file mode 100644 index 0000000..0ec0029 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IEmployeeOffboardingService.java @@ -0,0 +1,49 @@ +package com.ruoyi.oa.service; + +import com.ruoyi.oa.domain.EmployeeOffboarding; +import com.ruoyi.oa.domain.vo.EmployeeOffboardingVo; +import com.ruoyi.oa.domain.bo.EmployeeOffboardingBo; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.domain.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 离职管理Service接口 + * + * @author hdka + * @date 2025-02-16 + */ +public interface IEmployeeOffboardingService { + + /** + * 查询离职管理 + */ + EmployeeOffboardingVo queryById(Long offboardingId); + + /** + * 查询离职管理列表 + */ + TableDataInfo queryPageList(EmployeeOffboardingBo bo, PageQuery pageQuery); + + /** + * 查询离职管理列表 + */ + List queryList(EmployeeOffboardingBo bo); + + /** + * 新增离职管理 + */ + Boolean insertByBo(EmployeeOffboardingBo bo); + + /** + * 修改离职管理 + */ + Boolean updateByBo(EmployeeOffboardingBo bo); + + /** + * 校验并批量删除离职管理信息 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IEmployeeOnboardingService.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IEmployeeOnboardingService.java new file mode 100644 index 0000000..892c533 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IEmployeeOnboardingService.java @@ -0,0 +1,49 @@ +package com.ruoyi.oa.service; + + +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.oa.domain.bo.EmployeeOnboardingBo; +import com.ruoyi.oa.domain.vo.EmployeeOnboardingVo; + +import java.util.Collection; +import java.util.List; + +/** + * 入职管理Service接口 + * + * @author hdka + * @date 2025-02-15 + */ +public interface IEmployeeOnboardingService { + + /** + * 查询入职管理 + */ + EmployeeOnboardingVo queryById(Long onboardingId); + + /** + * 查询入职管理列表 + */ + TableDataInfo queryPageList(EmployeeOnboardingBo bo, PageQuery pageQuery); + + /** + * 查询入职管理列表 + */ + List queryList(EmployeeOnboardingBo bo); + + /** + * 新增入职管理 + */ + Boolean insertByBo(EmployeeOnboardingBo bo); + + /** + * 修改入职管理 + */ + Boolean updateByBo(EmployeeOnboardingBo bo); + + /** + * 校验并批量删除入职管理信息 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/EmployeeOffboardingServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/EmployeeOffboardingServiceImpl.java new file mode 100644 index 0000000..233558b --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/EmployeeOffboardingServiceImpl.java @@ -0,0 +1,135 @@ +package com.ruoyi.oa.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.domain.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.ruoyi.system.service.ISysUserService; +import liquibase.pro.packaged.A; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.oa.domain.bo.EmployeeOffboardingBo; +import com.ruoyi.oa.domain.vo.EmployeeOffboardingVo; +import com.ruoyi.oa.domain.EmployeeOffboarding; +import com.ruoyi.oa.mapper.EmployeeOffboardingMapper; +import com.ruoyi.oa.service.IEmployeeOffboardingService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 离职管理Service业务层处理 + * + * @author hdka + * @date 2025-02-16 + */ +@RequiredArgsConstructor +@Service +public class EmployeeOffboardingServiceImpl implements IEmployeeOffboardingService { + + private final EmployeeOffboardingMapper baseMapper; + + @Autowired + private ISysUserService userService; + + /** + * 查询离职管理 + */ + @Override + public EmployeeOffboardingVo queryById(Long offboardingId){ + EmployeeOffboardingVo employeeOffboardingVo = baseMapper.selectVoById(offboardingId); + SysUser sysUser = userService.selectUserByIdAndNotDelFlag(employeeOffboardingVo.getUserId()); + employeeOffboardingVo.setNickName(sysUser.getUserName()); + return employeeOffboardingVo; + } + + /** + * 查询离职管理列表 + */ + @Override + public TableDataInfo queryPageList(EmployeeOffboardingBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + result.getRecords().forEach(item -> { + SysUser sysUser = userService.selectUserByIdAndNotDelFlag(item.getUserId()); + item.setNickName(sysUser.getUserName()); + }); + return TableDataInfo.build(result); + } + + /** + * 查询离职管理列表 + */ + @Override + public List queryList(EmployeeOffboardingBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(EmployeeOffboardingBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getUserId() != null, EmployeeOffboarding::getUserId, bo.getUserId()); + lqw.eq(bo.getResignationDate() != null, EmployeeOffboarding::getResignationDate, bo.getResignationDate()); + lqw.eq(bo.getExitInterview() != null, EmployeeOffboarding::getExitInterview, bo.getExitInterview()); + lqw.eq(bo.getHandoverCompleted() != null, EmployeeOffboarding::getHandoverCompleted, bo.getHandoverCompleted()); + lqw.eq(StringUtils.isNotBlank(bo.getExitReason()), EmployeeOffboarding::getExitReason, bo.getExitReason()); + lqw.eq(bo.getFinalSalary() != null, EmployeeOffboarding::getFinalSalary, bo.getFinalSalary()); + lqw.eq(bo.getResignationApplicationSubmitted() != null, EmployeeOffboarding::getResignationApplicationSubmitted, bo.getResignationApplicationSubmitted()); + lqw.eq(bo.getDataBackupCompleted() != null, EmployeeOffboarding::getDataBackupCompleted, bo.getDataBackupCompleted()); + lqw.eq(bo.getHandoverArranged() != null, EmployeeOffboarding::getHandoverArranged, bo.getHandoverArranged()); + lqw.eq(bo.getSalarySettled() != null, EmployeeOffboarding::getSalarySettled, bo.getSalarySettled()); + lqw.eq(bo.getBenefitsSettled() != null, EmployeeOffboarding::getBenefitsSettled, bo.getBenefitsSettled()); + lqw.eq(bo.getExitCertificateIssued() != null, EmployeeOffboarding::getExitCertificateIssued, bo.getExitCertificateIssued()); + lqw.eq(bo.getOffboardingConfirmed() != null, EmployeeOffboarding::getOffboardingConfirmed, bo.getOffboardingConfirmed()); + return lqw; + } + + /** + * 新增离职管理 + */ + @Override + public Boolean insertByBo(EmployeeOffboardingBo bo) { + EmployeeOffboarding add = BeanUtil.toBean(bo, EmployeeOffboarding.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setOffboardingId(add.getOffboardingId()); + } + return flag; + } + + /** + * 修改离职管理 + */ + @Override + public Boolean updateByBo(EmployeeOffboardingBo bo) { + EmployeeOffboarding update = BeanUtil.toBean(bo, EmployeeOffboarding.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(EmployeeOffboarding entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 批量删除离职管理 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteBatchIds(ids) > 0; + } +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/EmployeeOnboardingServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/EmployeeOnboardingServiceImpl.java new file mode 100644 index 0000000..8554b8a --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/EmployeeOnboardingServiceImpl.java @@ -0,0 +1,141 @@ +package com.ruoyi.oa.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.domain.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.ruoyi.oa.domain.EmployeeOnboarding; +import com.ruoyi.oa.domain.bo.EmployeeOnboardingBo; +import com.ruoyi.oa.domain.vo.EmployeeOnboardingVo; +import com.ruoyi.oa.mapper.EmployeeOnboardingMapper; +import com.ruoyi.oa.service.IEmployeeOnboardingService; +import com.ruoyi.system.service.ISysUserService; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 入职管理Service业务层处理 + * + * @author hdka + * @date 2025-02-15 + */ +@RequiredArgsConstructor +@Service +public class EmployeeOnboardingServiceImpl implements IEmployeeOnboardingService { + + private final EmployeeOnboardingMapper baseMapper; + + @Autowired + private ISysUserService userService; + + /** + * 查询入职管理 + */ + @Override + public EmployeeOnboardingVo queryById(Long onboardingId){ + EmployeeOnboardingVo employeeOnboardingVo = baseMapper.selectVoById(onboardingId); + SysUser sysUser = userService.selectUserByIdAndNotDelFlag(employeeOnboardingVo.getUserId()); + employeeOnboardingVo.setUserName(sysUser.getUserName()); + employeeOnboardingVo.setNickName(sysUser.getNickName()); + employeeOnboardingVo.setEmail(sysUser.getEmail()); + employeeOnboardingVo.setPhonenumber(sysUser.getPhonenumber()); + employeeOnboardingVo.setBankCard(sysUser.getBankCard()); + employeeOnboardingVo.setIdCard(sysUser.getIdCard()); + employeeOnboardingVo.setDeptId(sysUser.getDeptId()); + return employeeOnboardingVo; + + } + + /** + * 查询入职管理列表 + */ + @Override + public TableDataInfo queryPageList(EmployeeOnboardingBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + result.getRecords().forEach(employeeOnboardingVo -> { + SysUser sysUser = userService.selectUserByIdAndNotDelFlag(employeeOnboardingVo.getUserId()); + employeeOnboardingVo.setNickName(sysUser.getNickName()); + }); + return TableDataInfo.build(result); + } + + /** + * 查询入职管理列表 + */ + @Override + public List queryList(EmployeeOnboardingBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(EmployeeOnboardingBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getUserId() != null, EmployeeOnboarding::getUserId, bo.getUserId()); + lqw.eq(bo.getJoiningDate() != null, EmployeeOnboarding::getJoiningDate, bo.getJoiningDate()); + lqw.eq(bo.getProbationPeriodEnd() != null, EmployeeOnboarding::getProbationPeriodEnd, bo.getProbationPeriodEnd()); + lqw.eq(bo.getManagerId() != null, EmployeeOnboarding::getManagerId, bo.getManagerId()); + lqw.eq(bo.getDocumentsSubmitted() != null, EmployeeOnboarding::getDocumentsSubmitted, bo.getDocumentsSubmitted()); + lqw.eq(bo.getOrientationCompleted() != null, EmployeeOnboarding::getOrientationCompleted, bo.getOrientationCompleted()); + lqw.eq(bo.getJoiningStatus() != null, EmployeeOnboarding::getJoiningStatus, bo.getJoiningStatus()); + lqw.eq(bo.getRecruitmentCompleted() != null, EmployeeOnboarding::getRecruitmentCompleted, bo.getRecruitmentCompleted()); + lqw.eq(bo.getOfferIssued() != null, EmployeeOnboarding::getOfferIssued, bo.getOfferIssued()); + lqw.eq(bo.getContractSigned() != null, EmployeeOnboarding::getContractSigned, bo.getContractSigned()); + lqw.eq(bo.getMaterialsPrepared() != null, EmployeeOnboarding::getMaterialsPrepared, bo.getMaterialsPrepared()); + lqw.eq(bo.getTrainingCompleted() != null, EmployeeOnboarding::getTrainingCompleted, bo.getTrainingCompleted()); + lqw.eq(bo.getWorkConditionsPrepared() != null, EmployeeOnboarding::getWorkConditionsPrepared, bo.getWorkConditionsPrepared()); + return lqw; + } + + /** + * 新增入职管理 + */ + @Override + public Boolean insertByBo(EmployeeOnboardingBo bo) { + EmployeeOnboarding add = BeanUtil.toBean(bo, EmployeeOnboarding.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setOnboardingId(add.getOnboardingId()); + } + return flag; + } + + /** + * 修改入职管理 + */ + @Override + public Boolean updateByBo(EmployeeOnboardingBo bo) { + EmployeeOnboarding update = BeanUtil.toBean(bo, EmployeeOnboarding.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(EmployeeOnboarding entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 批量删除入职管理 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteBatchIds(ids) > 0; + } +} diff --git a/ruoyi-oa/src/main/resources/mapper/oa/EmployeeOffboardingMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/EmployeeOffboardingMapper.xml new file mode 100644 index 0000000..28d2acb --- /dev/null +++ b/ruoyi-oa/src/main/resources/mapper/oa/EmployeeOffboardingMapper.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ruoyi-oa/src/main/resources/mapper/oa/EmployeeOnboardingMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/EmployeeOnboardingMapper.xml new file mode 100644 index 0000000..fdd1fc2 --- /dev/null +++ b/ruoyi-oa/src/main/resources/mapper/oa/EmployeeOnboardingMapper.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java index 5c39caa..0baf736 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java @@ -93,5 +93,10 @@ public interface SysUserMapper extends BaseMapperPlus where u.del_flag = '0' and u.user_id = #{userId} - - + diff --git a/ruoyi-ui/src/api/oa/offboarding.js b/ruoyi-ui/src/api/oa/offboarding.js new file mode 100644 index 0000000..51f918a --- /dev/null +++ b/ruoyi-ui/src/api/oa/offboarding.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询离职管理列表 +export function listOffboarding(query) { + return request({ + url: '/system/offboarding/list', + method: 'get', + params: query + }) +} + +// 查询离职管理详细 +export function getOffboarding(offboardingId) { + return request({ + url: '/system/offboarding/' + offboardingId, + method: 'get' + }) +} + +// 新增离职管理 +export function addOffboarding(data) { + return request({ + url: '/system/offboarding', + method: 'post', + data: data + }) +} + +// 修改离职管理 +export function updateOffboarding(data) { + return request({ + url: '/system/offboarding', + method: 'put', + data: data + }) +} + +// 删除离职管理 +export function delOffboarding(offboardingId) { + return request({ + url: '/system/offboarding/' + offboardingId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/oa/onboarding.js b/ruoyi-ui/src/api/oa/onboarding.js new file mode 100644 index 0000000..5626269 --- /dev/null +++ b/ruoyi-ui/src/api/oa/onboarding.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询入职管理列表 +export function listOnboarding(query) { + return request({ + url: '/system/onboarding/list', + method: 'get', + params: query + }) +} + +// 查询入职管理详细 +export function getOnboarding(onboardingId) { + return request({ + url: '/system/onboarding/' + onboardingId, + method: 'get' + }) +} + +// 新增入职管理 +export function addOnboarding(data) { + return request({ + url: '/system/onboarding', + method: 'post', + data: data + }) +} + +// 修改入职管理 +export function updateOnboarding(data) { + return request({ + url: '/system/onboarding', + method: 'put', + data: data + }) +} + +// 删除入职管理 +export function delOnboarding(onboardingId) { + return request({ + url: '/system/onboarding/' + onboardingId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/router/index.js b/ruoyi-ui/src/router/index.js index 3bd3cc2..7f45c26 100644 --- a/ruoyi-ui/src/router/index.js +++ b/ruoyi-ui/src/router/index.js @@ -101,6 +101,43 @@ export const constantRoutes = [ } ] }, + + { + path: '/people', + component: Layout, + hidden: true, + children: [ + { + path: 'updateOnboarding/:onboardingId(\\d+)', + component: () => import('@/views/oa/onboarding/update'), + name: 'updateOnboarding', + meta: { title: '更新入职数据', activeMenu: '/people/onboarding' } + }, + + { + path: 'addOffboarding', + component: () => import('@/views/oa/offboarding/add'), + name: 'addOffboarding', + meta: { title: '新增离职申请' ,activeMenu: '/people/offboarding' } + }, + + { + path: 'updateOffboarding/:offboardingId(\\d+)', + component: () => import('@/views/oa/offboarding/update'), + name: 'updateOffboarding', + meta: { title: '新增离职申请' ,activeMenu: '/people/offboarding' } + }, + + ] + }, + + // { + // path: '/people/updateOffboarding/:offboardingId(\\d+)', + // component: () => import('@/views/oa/offboarding/update'), + // hidden: true, + // name: 'offboarding', + // meta: { title: '跟进离职流程', activeMenu: '/people/offboarding' } + // }, /* { path: '/finance', component: Layout, diff --git a/ruoyi-ui/src/views/oa/offboarding/add.vue b/ruoyi-ui/src/views/oa/offboarding/add.vue new file mode 100644 index 0000000..b29932f --- /dev/null +++ b/ruoyi-ui/src/views/oa/offboarding/add.vue @@ -0,0 +1,123 @@ + + + + + + diff --git a/ruoyi-ui/src/views/oa/offboarding/index.vue b/ruoyi-ui/src/views/oa/offboarding/index.vue new file mode 100644 index 0000000..6b68849 --- /dev/null +++ b/ruoyi-ui/src/views/oa/offboarding/index.vue @@ -0,0 +1,337 @@ + + + diff --git a/ruoyi-ui/src/views/oa/offboarding/update.vue b/ruoyi-ui/src/views/oa/offboarding/update.vue new file mode 100644 index 0000000..8ba44fc --- /dev/null +++ b/ruoyi-ui/src/views/oa/offboarding/update.vue @@ -0,0 +1,177 @@ + + + + + + diff --git a/ruoyi-ui/src/views/oa/onboarding/add.vue b/ruoyi-ui/src/views/oa/onboarding/add.vue new file mode 100644 index 0000000..c9443b0 --- /dev/null +++ b/ruoyi-ui/src/views/oa/onboarding/add.vue @@ -0,0 +1,280 @@ + + + + + diff --git a/ruoyi-ui/src/views/oa/onboarding/index.vue b/ruoyi-ui/src/views/oa/onboarding/index.vue new file mode 100644 index 0000000..50c9c60 --- /dev/null +++ b/ruoyi-ui/src/views/oa/onboarding/index.vue @@ -0,0 +1,449 @@ + + + diff --git a/ruoyi-ui/src/views/oa/onboarding/update.vue b/ruoyi-ui/src/views/oa/onboarding/update.vue new file mode 100644 index 0000000..28495c4 --- /dev/null +++ b/ruoyi-ui/src/views/oa/onboarding/update.vue @@ -0,0 +1,341 @@ + + + + +