如何开发人事管理系统中的转正管理和调动管理板块?(附架构图+流程图+代码参考)

简介: 本文介绍了如何从零搭建高效的人事管理系统,重点聚焦“转正管理”和“调动管理”模块,涵盖系统架构、业务流程、开发技巧与实战代码,助力企业实现流程自动化与数字化管理。

咱们先聊聊为啥要做人事管理系统。企业招聘、入职、转正、调动……这些环节一环扣一环,如果全部靠 Excel+邮件、人肉审批,效率低还容易出错。尤其是“转正管理”和“调动管理”这俩块,既涉及员工职业轨迹,也关联薪酬、组织架构,做不好团队士气、流程合规就会出问题。

所以,咱今天的目标就是:带你从零开始,搭建一套高效可落地的“转正管理”和“调动管理”模块,给出架构图、流程图、开发技巧、实战代码,让企业马上用起来。

注:本文示例所用方案模板:简道云人事管理系统,给大家示例的是一些通用的功能和模块,都是支持自定义修改的,你可以根据自己的需求修改里面的功能。


一、什么是人事管理系统?

人事管理系统(HRMS)本质上是覆盖员工全生命周期的数字化平台,包含:

  1. 招聘管理(招人)
  2. 入职管理(办手续)
  3. 转正管理(试用到正式)
  4. 调动管理(岗位变更)
  5. 离职管理(结束劳动关系)
  6. 绩效考核培训等附属模块

今天重点聚焦第 3 和第 4 块:

  • 转正管理:帮HR和部门主管统一审批员工试用期转正,自动触发薪资、权限调整。
  • 调动管理:处理员工内部调岗、部门变更的审核,保证组织架构、薪资、报表及时同步。

二、系统整体架构图

markdown

┌───────────────────────────────────────────────┐

│                 前端(Vue/React)             │

│  ┌──────────┐   ┌──────────┐   ┌───────────┐  │

│  │  转正模块 │   │ 调动模块  │   │  公共组件   │  │

│  └──────────┘   └──────────┘   └───────────┘  │

└───────────────────────────────────────────────┘

                │           ▲

                ▼           │

┌───────────────────────────────────────────────┐

│             后端(Spring Boot)               │

│  ┌──────────┐   ┌──────────┐   ┌───────────┐  │

│  │转正Controller│ 调动Controller │ 公共Service │ │

│  └──────────┘   └──────────┘   └───────────┘  │

│       │                │               │      │

│  ┌──────────┐   ┌──────────┐   ┌───────────┐  │

│  │转正Service  │ 调动Service  │ 用户权限Service │ │

│  └──────────┘   └──────────┘   └───────────┘  │

│       │                │               │      │

│  ┌──────────┐   ┌──────────┐   ┌───────────┐  │

│  │ 转正DAO   │   │ 调动DAO   │   │ 通知消息DAO  │ │

│  └──────────┘   └──────────┘   └───────────┘  │

│               │                                │

└───────────────┼────────────────────────────────┘

               │

               ▼

        ┌───────────────┐

        │   MySQL/Oracle │

        └───────────────┘


三、转正管理模块

1.功能概览

  • 员工试用期到期自动提醒
  • 转正申请发起、审批(多级)
  • 审批结果自动更新员工状态、薪资方案
  • 通知邮件/站内信推送
  • 管理员可回溯历史审批记录

2.业务流程

mermaid

graph TD

 A[试用期到期提醒] --> B[员工发起转正申请]

 B --> C[直线经理审批]

 C -->|同意| D[HR审批]

 C -->|拒绝| E[流程结束]

 D -->|同意| F[转正成功,更新状态]

 D -->|拒绝| G[流程结束,通知员工]

 F --> H[触发薪资调整&权限开放]

3.开发技巧

  • 定时任务结合消息队列 用 Spring 的 @Scheduled 定时扫描即将到期试用期的员工,发送消息到 RabbitMQ。 异步消费后,生成待办任务,减少高峰期数据库压力。
  • 工作流引擎 如果审批节点复杂,可以集成 Activiti/Flowable,动态配置多级审批。 简单场景下,用状态机(StateMachine)也可以搞定。
  • 统一异常和审批日志 所有审批操作走相同入口,捕获异常。 审批日志统一记录到 approval_log,方便审计、回溯。
  • 前端组件化 把审批表单、审批流组件抽成可复用的 UI 组件,方便调动模块复用。

4.代码参考

转正实体类 PromotionApplication.java

java

@Entity

@Table(name = "promotion_application")

public class PromotionApplication {

   @Id @GeneratedValue private Long id;

   private Long employeeId;

   private Date applyDate;

   private String status; // PENDING, APPROVED, REJECTED

   private Long currentApproverId;

   private String remark;

   // getters & setters

}

Service 层:PromotionService.java

java

@Service

public class PromotionService {

   @Autowired private PromotionDao dao;

   @Autowired private ApprovalLogService logService;

   public void apply(Long empId) {

       PromotionApplication app = new PromotionApplication();

       app.setEmployeeId(empId);

       app.setApplyDate(new Date());

       app.setStatus("PENDING");

       app.setCurrentApproverId(findManager(empId));

       dao.save(app);

       // 推送待办

       notificationService.notify(app.getCurrentApproverId(), "有新的转正申请待审批");

   }

   public void approve(Long appId, Long approverId, boolean pass, String remark) {

       PromotionApplication app = dao.findById(appId).orElseThrow();

       if (!app.getCurrentApproverId().equals(approverId)) throw new BizException("无审批权限");

       logService.record(appId, approverId, pass, remark);

       if (!pass) {

           app.setStatus("REJECTED");

           dao.save(app);

           notificationService.notify(app.getEmployeeId(),"您的转正申请被拒绝:"+remark);

           return;

       }

       if (isHR(approverId)) {

           app.setStatus("APPROVED");

           dao.save(app);

           completePromotion(app);

       } else {

           app.setCurrentApproverId(findHR());

           dao.save(app);

           notificationService.notify(app.getCurrentApproverId(),"有转正申请待审批");

       }

   }

   private void completePromotion(PromotionApplication app) {

       // 更新员工档案、薪资表、权限表

       employeeService.updateStatus(app.getEmployeeId(), "正式员工");

       salaryService.adjustToFormal(app.getEmployeeId());

       notificationService.notify(app.getEmployeeId(),"恭喜,您已转正!");

   }

}

Controller 层:PromotionController.java

java

@RestController

@RequestMapping("/api/promotion")

public class PromotionController {

   @Autowired private PromotionService service;

   @PostMapping("/apply")

   public Result apply(@RequestParam Long empId) {

       service.apply(empId);

       return Result.success("申请提交成功");

   }

   @PostMapping("/approve")

   public Result approve(@RequestBody ApproveDTO dto) {

       service.approve(dto.getAppId(), dto.getApproverId(), dto.isPass(), dto.getRemark());

       return Result.success("审批完成");

   }

}

  • 员工侧:在“转正申请”页面,一键提交申请,实时查看审批状态。
  • 审批侧:在“待办审批”列表,点击审批弹窗,填写备注,一键同意/拒绝。
  • 后台:审批日志、状态变更一目了然;自动触发薪资与权限同步,无需运维再跑脚本。

四、调动管理模块

1.功能概览

  • 发起岗位/部门调动申请
  • 多级审批:部门经理→HR→目标部门经理
  • 调动生效日期管理
  • 自动更新组织架构、薪资、副本开关
  • 历史记录、回退功能

2.业务流程

mermaid

graph LR

 A[员工发起调动申请] --> B[原部门经理审批]

 B -->|同意| C[HR审批]

 B -->|拒绝| D[结束,通知员工]

 C -->|同意| E[目标部门经理审批]

 C -->|拒绝| D

 E -->|同意| F[调动完成,更新组织架构]

 E -->|拒绝| D

 F --> G[触发权限、薪资同步]

3.开发技巧

  1. 动态审批流配置 用数据库表配置每种调动类型(如:跨部门、跨岗位)对应审批节点,系统启动读取动态组装流程。
  2. 日期维度处理 调动可能是“未来某日生效”,要在生效日的零点通过定时器执行实际变更。
  3. 权限隔离 调动期间,员工可能需要同时保留原部门和目标部门权限,直到生效后统一切换。
  4. 回退方案 如果审批过程卡顿或审批人离职,可提供管理员强制回退/撤销功能。

4.代码参考

调动实体类 TransferApplication.java

java

@Entity

@Table(name = "transfer_application")

public class TransferApplication {

   @Id @GeneratedValue private Long id;

   private Long employeeId;

   private String fromDept;

   private String toDept;

   private Date applyDate;

   private Date effectiveDate;

   private String status; // PENDING, APPROVED, REJECTED

   private Long currentApproverId;

   // getters/setters

}

Service 层:TransferService.java

java

@Service

public class TransferService {

   @Autowired private TransferDao dao;

   @Autowired private ApprovalLogService logService;

   public void apply(TransferDTO dto) {

       TransferApplication app = new TransferApplication();

       BeanUtils.copyProperties(dto, app);

       app.setApplyDate(new Date());

       app.setStatus("PENDING");

       app.setCurrentApproverId(findManager(app.getFromDept()));

       dao.save(app);

       notificationService.notify(app.getCurrentApproverId(),"有新的调动申请待审批");

   }

   public void approve(Long appId, Long approverId, boolean pass, String remark) {

       TransferApplication app = dao.findById(appId).orElseThrow();

       if (!app.getCurrentApproverId().equals(approverId)) throw new BizException("无审批权限");

       logService.record(appId, approverId, pass, remark);

       if (!pass) {

           app.setStatus("REJECTED");

           dao.save(app);

           notificationService.notify(app.getEmployeeId(),"调动申请被拒绝:"+remark);

           return;

       }

       Long next = findNextApprover(app, approverId);

       if (next == null) {

           app.setStatus("APPROVED");

           dao.save(app);

           scheduleEffective(app);

       } else {

           app.setCurrentApproverId(next);

           dao.save(app);

           notificationService.notify(next,"有调动申请待审批");

       }

   }

   private void scheduleEffective(TransferApplication app) {

       // 用定时任务触发生效

       schedulerService.schedule(app.getId(), app.getEffectiveDate());

   }

   public void executeTransfer(Long appId) {

       TransferApplication app = dao.findById(appId).orElseThrow();

       employeeService.updateDept(app.getEmployeeId(), app.getToDept());

       salaryService.adjustDeptAllowance(app.getEmployeeId(), app.getToDept());

       app.setStatus("TRANSFERRED");

       dao.save(app);

       notificationService.notify(app.getEmployeeId(),"祝贺,您已正式调动到新部门");

   }

}

5.实现效果

  • 员工侧:填写调动申请单,指定生效日期,可以上传补充说明;实时查看审批进度。
  • 审批侧:多级审批界面、审批历史;一键通过/驳回。
  • 定时执行:生效当日凌晨自动执行组织架构变更、权限切换、薪资调整;运维无需介入。



五、FAQ

Q1:试用期延长后如何在转正流程中体现?

一般企业存在试用期延期的情况,比如需要再考察一个月。要兼容这种场景,可以在“转正审批”提交前,后台查询员工档案中的“试用到期日”,若延期,前端审批页面显示延期选项。审批人可在“审批备注”里选择“同意延期”并填写新的到期日期。后端处理时,若审批结果为延期,更新员工档案中的试用期结束时间,并将流程置为“延期待申请”状态,不走转正后续审批,直到新到期日再重新触发提醒。这样的方案既保留了审批轨迹,又能动态适配不同人。

Q2:调动后员工原有考核、培训等记录如何处理?

员工调动到新部门后,原部门的考核、培训数据仍然有效,但在报表中需要隔离。建议在数据模型上,把考核/培训记录与“所在部门”字段绑定,并且在报表查询时,动态根据“记录创建日期”对部门进行分段统计。比如“2025-07-01前属于A部的所有培训记录”依旧展现在A部报表里;“2025-07-02后属于B部的记录”则归到B部。这样既保证了历史数据不丢,又能使调动后的数据在新部门的统计里实时可见。开发时,可在 service 层统一封装:List records = recordDao.findByEmployeeAndDateRange(empId, start, end),再按部门分流即可。

Q3:如何保证审批流程中断或审批人失效时的后续处理?

现实里经理调岗、离职常常打断流程。系统需要提供:

  1. 代理审批:审批人离岗前,可在个人设置里指定代理人;流程到达自己节点时,自动转给代理人处理。
  2. 管理员干预:HR 管理员可在后台看到“卡住”的审批,直接移交给其他审批人或直接决策。
  3. 超时提醒和自动流转:若审批超过 SLA(如 48 小时)未处理,系统自动提醒或者直接跳过当前节点给下一节点。 建议在审批逻辑中统一调用:

java

Long actualApprover = isOverdue(node) ? findNextApprover(app, node) : node;

app.setCurrentApproverId(actualApprover);

并在前端给出黄色预警提示,使审批人及时响应。

相关文章
|
15天前
|
SQL 前端开发 关系型数据库
如何开发一套研发项目管理系统?(附架构图+流程图+代码参考)
研发项目管理系统助力企业实现需求、缺陷与变更的全流程管理,支持看板可视化、数据化决策与成本优化。系统以MVP模式快速上线,核心功能包括需求看板、缺陷闭环、自动日报及关键指标分析,助力中小企业提升交付效率与协作质量。
|
15天前
|
前端开发 API 定位技术
如何开发车辆管理系统中的用车申请板块(附架构图+流程图+代码参考)
本文详细解析了如何将传统纸质车辆管理流程数字化,涵盖业务规则、审批流、调度决策及数据留痕等核心环节。内容包括用车申请模块的价值定位、系统架构设计、数据模型构建、前端表单实现及后端开发技巧,助力企业打造可落地、易扩展的车辆管理系统。
|
10天前
|
设计模式 人工智能 API
AI智能体开发实战:17种核心架构模式详解与Python代码实现
本文系统解析17种智能体架构设计模式,涵盖多智能体协作、思维树、反思优化与工具调用等核心范式,结合LangChain与LangGraph实现代码工作流,并通过真实案例验证效果,助力构建高效AI系统。
145 7
|
10月前
|
弹性计算 API 持续交付
后端服务架构的微服务化转型
本文旨在探讨后端服务从单体架构向微服务架构转型的过程,分析微服务架构的优势和面临的挑战。文章首先介绍单体架构的局限性,然后详细阐述微服务架构的核心概念及其在现代软件开发中的应用。通过对比两种架构,指出微服务化转型的必要性和实施策略。最后,讨论了微服务架构实施过程中可能遇到的问题及解决方案。
|
11月前
|
Cloud Native Devops 云计算
云计算的未来:云原生架构与微服务的革命####
【10月更文挑战第21天】 随着企业数字化转型的加速,云原生技术正迅速成为IT行业的新宠。本文深入探讨了云原生架构的核心理念、关键技术如容器化和微服务的优势,以及如何通过这些技术实现高效、灵活且可扩展的现代应用开发。我们将揭示云原生如何重塑软件开发流程,提升业务敏捷性,并探索其对企业IT架构的深远影响。 ####
262 3
|
11月前
|
Cloud Native 安全 数据安全/隐私保护
云原生架构下的微服务治理与挑战####
随着云计算技术的飞速发展,云原生架构以其高效、灵活、可扩展的特性成为现代企业IT架构的首选。本文聚焦于云原生环境下的微服务治理问题,探讨其在促进业务敏捷性的同时所面临的挑战及应对策略。通过分析微服务拆分、服务间通信、故障隔离与恢复等关键环节,本文旨在为读者提供一个关于如何在云原生环境中有效实施微服务治理的全面视角,助力企业在数字化转型的道路上稳健前行。 ####
|
6月前
|
Cloud Native Serverless 流计算
云原生时代的应用架构演进:从微服务到 Serverless 的阿里云实践
云原生技术正重塑企业数字化转型路径。阿里云作为亚太领先云服务商,提供完整云原生产品矩阵:容器服务ACK优化启动速度与镜像分发效率;MSE微服务引擎保障高可用性;ASM服务网格降低资源消耗;函数计算FC突破冷启动瓶颈;SAE重新定义PaaS边界;PolarDB数据库实现存储计算分离;DataWorks简化数据湖构建;Flink实时计算助力风控系统。这些技术已在多行业落地,推动效率提升与商业模式创新,助力企业在数字化浪潮中占据先机。
355 12
|
10月前
|
Java 开发者 微服务
从单体到微服务:如何借助 Spring Cloud 实现架构转型
**Spring Cloud** 是一套基于 Spring 框架的**微服务架构解决方案**,它提供了一系列的工具和组件,帮助开发者快速构建分布式系统,尤其是微服务架构。
797 70
从单体到微服务:如何借助 Spring Cloud 实现架构转型
|
8月前
|
传感器 监控 安全
智慧工地云平台的技术架构解析:微服务+Spring Cloud如何支撑海量数据?
慧工地解决方案依托AI、物联网和BIM技术,实现对施工现场的全方位、立体化管理。通过规范施工、减少安全隐患、节省人力、降低运营成本,提升工地管理的安全性、效率和精益度。该方案适用于大型建筑、基础设施、房地产开发等场景,具备微服务架构、大数据与AI分析、物联网设备联网、多端协同等创新点,推动建筑行业向数字化、智能化转型。未来将融合5G、区块链等技术,助力智慧城市建设。
364 1
|
11月前
|
Dubbo Java 应用服务中间件
服务架构的演进:从单体到微服务的探索之旅
随着企业业务的不断拓展和复杂度的提升,对软件系统架构的要求也日益严苛。传统的架构模式在应对现代业务场景时逐渐暴露出诸多局限性,于是服务架构开启了持续演变之路。从单体架构的简易便捷,到分布式架构的模块化解耦,再到微服务架构的精细化管理,企业对技术的选择变得至关重要,尤其是 Spring Cloud 和 Dubbo 等微服务技术的对比和应用,直接影响着项目的成败。 本篇文章会从服务架构的演进开始分析,探索从单体项目到微服务项目的演变过程。然后也会对目前常见的微服务技术进行对比,找到目前市面上所常用的技术给大家进行讲解。
372 1
服务架构的演进:从单体到微服务的探索之旅

热门文章

最新文章