如何快速搭建一套 HR 招聘+入职系统(SpringBoot+Vue3 含源码)
🌐演示地址:http://ruoyioffice.com | 📦源码1·GitHub:ruoyi-office | 📦源码2·GitCode:ruoyi-office | 📦源码3·Gitee:ruoyi-office | 💬微信:17156169080(备注「RuoYi Office」)
又到毕业季,计算机专业的同学被"选题难、要全栈、还要能现场演示"三件事支配。如果你还在纠结,不妨直接做一套HR 招聘+入职系统:业务场景人人都懂(投简历、面试、发 Offer、办入职),技术栈主流(SpringBoot 3.5 + Vue3 + Flowable),而且有一条天然的"数据流主线"——招聘需求 → 职位 → 候选人 → 面试 → 录用审批 → 入职建档,答辩时一条线讲下来,评委一听就懂。本文基于开源项目 RuoYi Office 的真实 HRM 模块源码,带你 10 分钟把它跑起来。
▲ 技术架构全景:前端层(Vue3/Vben/UniApp)→ 网关层(Gateway/认证)→ 服务层(SpringBoot/Security/MyBatis/Flowable)→ 数据层(MySQL/Redis/MinIO/Nacos)→ 17 大业务模块层。HRM 模块本身就是一个"毕设选题超市",招聘+入职是本文主线。
引言:毕设到底卡在哪三件事?
每年六月,CSDN、知乎上"求推荐毕设选题"的帖子准时刷屏。归根结底,计算机毕设的焦虑来自三件具体的事:
痛点一:选题难。选太简单(纯 CRUD)怕答辩被问倒,选太难(分布式/AI 大模型)怕做不完,选冷门怕导师不认可。管理系统类选题仍是最稳的选择,但"又一个图书管理系统"已经审美疲劳。
痛点二:要全栈,但时间不够。毕设评委越来越看重"前后端分离 + 工作流 + 权限"这套现代技术栈,可从零搭框架往往要花掉两三个月,真正写业务的时间所剩无几。
痛点三:要能现场演示。论文写得再漂亮,答辩当天系统跑不起来、数据是空的,印象分直接打折。
| 现状 | 后果 |
|---|---|
| 从零搭框架,权限、工作流自己造轮子 | 3 个月过去还在调登录,业务没动几行 |
| 选题太"小",只有增删改查 | 答辩被追问技术深度时无话可说 |
| 演示数据靠现场临时录入 | 流程演示卡壳,评委体验差 |
| 技术栈陈旧(SSM、jQuery) | 体现不出技术视野,错失加分项 |
一句话结论:选一套业务清晰、技术主流、能开箱即跑的开源系统做二次开发,把精力聚焦在业务流程和技术深度上,才是 2026 毕设的聪明解法。HR 招聘+入职系统恰好满足全部条件。
一、为什么推荐用「HR 招聘+入职」做毕设?
结论先行:招聘+入职是一条"看得见、讲得清、有深度"的完整业务链,单是这一条线就足以撑起一篇优秀毕业设计。
HRM(Human Resource Management,人力资源管理)模块在 RuoYi Office 中是一个完整的业务域,包含招聘、入职、考勤、请假、薪资、绩效六大子域。其中招聘→录用→入职这条主线特别适合做毕设,原因有四:
| 选它的理由 | 具体说明 |
|---|---|
| 业务人人都懂 | 投简历、约面试、发 Offer、办入职,答辩不用花时间解释领域知识 |
| 数据流有主线 | 一条招聘需求单,串起职位、候选人、面试、录用、入职五张核心单据,自然形成"端到端流程" |
| 技术点密集 | RBAC 权限、Flowable 审批流、状态机、单据编号生成、定时任务(邮箱抓简历)、附件上传,每个点都能在论文里展开一节 |
| 难度可裁剪 | 时间紧只做"候选人管理 + 录用审批";想冲优秀就把"邮箱自动抓简历 + 审批即建档"这套自动化做透 |
更关键的是,招聘+入职之间有一个非常出彩的自动化衔接:录用审批单审批通过后,系统会自动生成员工入职登记单;入职登记单审批通过后,又会自动创建员工档案。这种"审批驱动、单据自动流转"的设计,是答辩时区分"普通 CRUD"和"有工程思想"的关键。
二、技术架构总览:2026 主流技术栈全覆盖
结论先行:这套系统是标准的"前后端分离 + 网关 + 微服务可选 + BPM 工作流"架构,技术栈与 2026 年企业级开发主流完全一致。
如全景图所示,系统自上而下分为五层。每一层的技术选型都能直接对应到毕设论文的"系统设计"章节:
| 层级 | 技术选型 | 版本 | 论文对应章节 |
|---|---|---|---|
| 前端层 | Vue 3 + TypeScript + Vben Admin 5 + Ant Design Vue 4 | Vite 6 构建 | 前端技术选型 |
| 网关层 | Spring Cloud Gateway + OAuth2 + Nginx + 多租户 | — | 安全设计 / 部署架构 |
| 服务层 | Spring Boot 3.5 + Spring Security + MyBatis-Plus | Java 17 | 后端技术选型 / 数据访问层 |
| 工作流 | Flowable | BPMN 7.0 | 流程引擎设计(亮点章节) |
| 数据层 | MySQL 8 + Redis + MinIO/OSS + Nacos + Docker | — | 数据库设计 / 缓存设计 |
名词解释:BPM即业务流程管理(Business Process Management),用于把"申请→审批→流转"这类流程用引擎驱动;Flowable是开源的 BPMN 2.0 工作流引擎,可视化设计流程、无需改代码即可调整审批节点。
为什么这套技术栈适合 2026 毕设?看评委关心的几个点:
| 评审关注点 | 如何满足 |
|---|---|
| 技术是否主流 | Spring Boot 3.5 + Vue3 是当前 Java Web 最主流组合 |
| 前后端是否分离 | 标准 RESTful API(前缀/admin-api),前端 Vben + 后端 SpringBoot |
| 是否有工作流 | Flowable BPMN,招聘需求/录用/入职三张单据全部走审批流 |
| 安全机制是否完整 | Spring Security + RBAC 三级权限 + 多租户 + OAuth2 |
| 是否可扩展 | 模块化架构,yudao-module-hrm独立拆分为-api与-server |
三、模块与功能清单:招聘子域 8 张表 + 入职建档
结论先行:HRM 招聘子域由 8 张核心表组成,配合员工入职登记单与员工档案,构成完整的"招到人 → 入职 → 建档"闭环。
下面是后端yudao-module-hrm中招聘+入职相关的真实数据表与功能模块(均来自源码dal/dataobject与service目录):
| 子模块 | 数据表 | 核心功能 | 是否走审批流 |
|---|---|---|---|
| 招聘需求申请单 | hrm_recruitment_requirement_bill | 用人部门提报岗位需求、人数、紧急度、预算 | ✅ Flowable |
| 招聘职位 | hrm_recruitment_position | 由需求生成职位,记录需求人数/已录用人数 | — |
| 候选人 | hrm_recruitment_candidate | 候选人简历库,姓名/学历/期望薪资/状态 | — |
| 投递关系 | hrm_recruitment_application | 候选人投递职位,记录所处阶段 | — |
| 面试记录 | hrm_recruitment_interview_record | 面试轮次、评价、结果 | — |
| 录用审批单 | hrm_recruitment_offer_bill | 发 Offer、薪资说明、计划入职日期 | ✅ Flowable |
| 邮箱简历线索 | hrm_recruitment_email_lead | 自动抓取的邮件简历,解析后转候选人 | — |
| 招聘邮箱配置 | hrm_recruitment_mailbox_config | IMAP/POP3 邮箱配置,定时抓取 | — |
| 员工入职登记单 | hrm_employee_entry_bill+ 3 子表 | 入职登记,审批通过自动建档 | ✅ Flowable |
| 员工档案 | hrm_employee | 在职员工档案,入职单审批后自动创建 | — |
整个 HRM 模块在HrmBillTypeEnum中注册了13 种审批单据类型(编号 201~213),其中招聘相关的两张分别是:
| 单据类型 | 编号 | 流程定义 Key |
|---|---|---|
| 招聘需求申请单 | 207 | hr_recruitment_requirement_bill |
| 录用审批单 | 208 | hr_recruitment_offer_bill |
| 员工入职申请单 | 201 | hr_employee_entry_bill |
候选人状态机覆盖
待跟进 → 已投递 → 面试中 → 待录用 → 已录用 / 未通过共 6 种状态;投递关系阶段与候选人状态联动更新——这正是论文里"有限状态机"小节的好素材。
四、核心流程:从招聘需求到入职建档
结论先行:这条主线由两个"审批即触发"的自动化节点串起来——录用审批通过自动生成入职单,入职审批通过自动建员工档案。
4.1 招聘需求列表(流程起点)
用人部门在这里提报岗位需求,提交后走 Flowable 审批流。审批通过的需求才能发布为职位、对外招聘。
▲ 招聘需求申请单列表:展示单据编号、岗位名称、需求人数、紧急度、审批状态等。每条需求都带HR207前缀的单据编号,点击可查看详情并跟踪审批进度。
4.2 候选人简历库(人才池)
候选人可以手工录入、Excel 导入,也可以由"邮箱简历线索"自动转化而来。候选人状态随投递阶段自动流转。
▲ 候选人列表:支持按姓名、手机号、来源渠道、状态筛选。来源渠道用字典(HRM_RECRUITMENT_CHANNEL)管理,状态标签清晰展示候选人当前所处招聘阶段。
4.3 员工档案(流程终点)
当录用审批和入职审批都通过后,系统自动把入职登记单的数据迁移成正式员工档案,候选人正式成为员工。
▲ 员工档案列表:展示工号、姓名、部门、岗位、入职日期、员工状态(试用/正式)等。这些记录大部分是由入职登记单审批通过后"自动建档"生成的,无需 HR 二次录入。
五、关键代码片段(真实源码)
下面三段代码全部来自yudao-module-hrm的真实实现,分别对应"发起审批"“审批衔接”"审批建档"三个关键节点。论文的"系统实现"章节可以直接基于这些代码展开。
5.1 招聘需求提交:发起 Flowable 流程
需求提交时,先生成单据编号并落库,再调用 BPM 接口发起流程实例,最后把流程实例 ID 回写到单据。这套"先存业务、再发流程、回写关联"的写法贯穿所有审批单据。
@Override@Transactional(rollbackFor=Exception.class)publicLongsubmitRecruitmentRequirementBill(RecruitmentRequirementBillSaveReqVOsaveReqVO){// 1. 生成单据编号(Redis 自增 + HR207 前缀)if(StringUtils.isBlank(saveReqVO.getBillCode())){saveReqVO.setBillCode(BillCodeUtils.generateBillCode(SystemEnum.HRM,HrmBillTypeEnum.HRM_RECRUITMENT_REQUIREMENT_BILL));}// 2. 保存业务表,状态置为「审批中」RecruitmentRequirementBillDObill=BeanUtils.toBean(saveReqVO,RecruitmentRequirementBillDO.class).setProcessStatus(BpmTaskStatusEnum.RUNNING.getStatus());recruitmentRequirementBillMapper.insertOrUpdate(bill);// 3. 发起 Flowable 流程实例Map<String,Object>variables=BpmProcessVariableUtils.buildBillVariables(saveReqVO);StringprocessInstanceId=processInstanceApi.submitProcessInstance(Long.valueOf(saveReqVO.getCreator()),newBpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(HrmBillTypeEnum.HRM_RECRUITMENT_REQUIREMENT_BILL.getProcessDefinitionKey()).setVariables(variables).setBusinessKey(String.valueOf(bill.getId()))).getCheckedData();// 4. 回写流程实例 ID,建立业务单据与流程的关联recruitmentRequirementBillMapper.updateById(newRecruitmentRequirementBillDO().setId(bill.getId()).setProcessInstanceId(processInstanceId));returnbill.getId();}5.2 录用审批通过:自动生成入职登记单
这是招聘与入职衔接的关键。RecruitmentOfferBillServiceImpl实现了FlowBillService接口,当审批人在流程中心点"通过"时,Flowable 引擎回调updateProcessStatus,此时自动把候选人信息搬运成一张入职登记单,并同步更新候选人状态为"已录用"、职位已录用人数 +1。
@Override@Transactional(rollbackFor=Exception.class)publicvoidupdateProcessStatus(StringbusinessKey,Integerstatus){Longid=Long.parseLong(businessKey);RecruitmentOfferBillDObill=validateRecruitmentOfferBillExists(id);RecruitmentOfferBillDOupdateObj=newRecruitmentOfferBillDO().setId(id).setProcessStatus(status);// 审批通过 → 自动创建入职登记单if(APPROVE.getStatus().equals(status)){LongentryBillId=createEmployeeEntryBillFromOffer(bill);updateObj.setEmployeeEntryBillId(entryBillId);}recruitmentOfferBillMapper.updateById(updateObj);}privateLongcreateEmployeeEntryBillFromOffer(RecruitmentOfferBillDOofferBill){if(offerBill.getEmployeeEntryBillId()!=null){// 幂等:已生成不重复创建returnofferBill.getEmployeeEntryBillId();}RecruitmentApplicationDOapplication=validateRecruitmentApplicationExists(offerBill.getApplicationId());RecruitmentCandidateDOcandidate=validateRecruitmentCandidateExists(offerBill.getCandidateId());// 1. 把候选人 + Offer 信息拼装成入职登记单EmployeeEntryBillSaveReqVOentryReqVO=buildEmployeeEntryBillSaveReqVO(offerBill,candidate);LongentryBillId=employeeEntryBillService.saveEmployeeEntryBill(entryReqVO);// 2. 候选人状态置「已录用」、投递阶段置「录用通过」、职位已录用人数 +1recruitmentCandidateMapper.updateById(newRecruitmentCandidateDO().setId(candidate.getId()).setStatus(RecruitmentConstants.CANDIDATE_STATUS_HIRED));recruitmentApplicationMapper.updateById(newRecruitmentApplicationDO().setId(application.getId()).setStage(RecruitmentConstants.APPLICATION_STAGE_OFFER_APPROVED));returnentryBillId;}5.3 入职审批通过:自动创建员工档案
入职登记单同样实现了FlowBillService。审批通过后回调updateProcessStatus,触发createEmployeeFromEntryBill,把入职单的基本信息、工作信息、工作经历/教育经历/家属信息三张子表,一次性迁移成正式员工档案,并初始化薪资档案。
@Override@Transactional(rollbackFor=Exception.class)publicvoidupdateProcessStatus(StringbusinessKey,Integerstatus){Longid=Long.parseLong(businessKey);validateEmployeeEntryBillExists(id);EmployeeEntryBillDOupdateObj=newEmployeeEntryBillDO();updateObj.setId(id);updateObj.setProcessStatus(status);// 审批通过 → 自动建员工档案(含明细子表)if(APPROVE.getStatus().equals(status)){createEmployeeFromEntryBill(id);}employeeEntryBillMapper.updateById(updateObj);}这种把"流程引擎"与"业务逻辑"解耦的设计(
FlowBillService回调机制),在论文里值得单独用一节分析——它是观察者模式在工程中的典型落地,也是答辩时的高频提问点。
5.4 加分项:邮箱简历自动抓取并转候选人
招聘子域还有一个很出彩的自动化能力:通过 XXL-Job 定时任务连接 IMAP/POP3 邮箱,自动抓取投递到招聘邮箱的简历邮件,用正则解析出手机号、邮箱、期望薪资等字段,落成"邮箱线索",HR 一键即可转为候选人。
// 定时任务:定时抓取已启用邮箱的简历线索@XxlJob("recruitmentMailboxFetchJob")@TenantJobpublicStringexecute(){intcount=recruitmentMailboxConfigService.fetchEnabledMailboxLeads();log.info("[execute][招聘邮箱自动抓取完成 count={}]",count);returnString.format("招聘邮箱自动抓取新增线索 %s 条",count);}// 正则解析:从邮件正文提取手机号privatestaticfinalPatternMOBILE_PATTERN=Pattern.compile("(1[3-9]\\d{9})");privateStringextractMobile(StringrawContent){Matchermatcher=MOBILE_PATTERN.matcher(rawContent);returnmatcher.find()?matcher.group(1).trim():"";}这一段在答辩时尤其加分:它把"定时任务 + 邮件协议 + 文本解析 + 去重幂等"四个技术点串在一起,足够撑起论文中一个完整的"创新点"小节。
六、如何 10 分钟在本地跑起来
结论先行:装好 JDK 17 / MySQL 8 / Redis / Node18 后,后端跑YudaoServerApplication、前端跑pnpm dev:antd,约 10 分钟即可登录。
6.1 环境准备清单
| 工具 | 版本要求 | 用途 |
|---|---|---|
| JDK | 17+ | 后端运行环境 |
| Maven | 3.9+ | 后端依赖管理 |
| MySQL | 8.0+ | 数据库 |
| Redis | 5.0+ | 缓存 / 单据编号自增 |
| Node.js | 18+ | 前端运行环境 |
| pnpm | 9+ | 前端包管理(npm i -g pnpm) |
| IDEA / Cursor | 最新版 | 开发 IDE |
6.2 后端启动步骤
# 1. 克隆后端源码gitclone https://github.com/yuqing2026/ruoyi-office.git# 2. 创建数据库(utf8mb4),导入 ruoyi-office-db 下的全量 SQL# 3. 修改 yudao-server/src/main/resources/application-local.yaml# 配置好 MySQL / Redis 连接信息# 4. 启动:运行 yudao-server 模块的 YudaoServerApplication(单体 -P boot)# 成功后访问接口文档:http://localhost:48080/admin-api/doc.html后端默认端口48080,API 前缀/admin-api,单体启动用-P boot,微服务用-P cloud(默认)。
6.3 前端启动步骤
# 1. 克隆前端源码gitclone https://gitcode.com/zhouzhongyan/ruoyi-office-vben.git# 2. 安装依赖cdruoyi-office-vbenpnpminstall# 3. 启动开发服务器(自动代理到 localhost:48080/admin-api)pnpmdev:antd启动成功后用默认账号admin / admin123登录,左侧菜单进入人力资源 → 招聘管理 / 员工关系即可看到招聘需求、候选人、录用、入职等页面。
6.4 首次跑通确认清单
| 检查项 | 预期结果 | 排查方向 |
|---|---|---|
| 接口文档可访问 | 看到 Knife4j 文档 | 后端是否启动、MySQL/Redis 是否就绪 |
admin/admin123可登录 | 进入首页 | 数据库是否导入完整 |
| 招聘菜单正常展示 | 看到招聘/候选人/录用页面 | 菜单数据是否导入 |
| 新建招聘需求并提交 | 生成 HR207 编号、状态变审批中 | Flowable 流程是否部署 |
七、毕设答辩加分点
把下面这几个点写进论文、讲进 PPT,能明显拉高答辩印象分:
| 加分点 | 一句话讲法 | 论文可展开方向 |
|---|---|---|
| 审批即建单 | 录用审批通过自动生成入职单、入职审批通过自动建档,全程无需 HR 重复录入 | 流程驱动的业务自动化设计 |
| FlowBillService 回调机制 | 流程引擎与业务逻辑解耦,每张单据只实现统一回调接口 | 观察者模式 / 策略模式工程实践 |
| 状态机设计 | 候选人 6 状态、投递阶段联动更新 | 有限状态机理论 + 实践 |
| 单据编号生成 | BillCodeUtils基于 Redis 自增 + 单据类型前缀,分布式唯一 | 分布式 ID 生成方案对比 |
| 定时任务抓简历 | XXL-Job + IMAP/POP3 + 正则解析 + 去重幂等 | 系统集成与自动化创新点 |
| RBAC 三级权限 | 菜单权限控页面、操作权限控接口、数据权限控范围 | 安全设计章节,权限模型图 |
| 多租户隔离 | 全表tenant_id隔离,SaaS 架构 | SaaS 架构设计 |
| 幂等设计 | 已建档/已生成入职单不重复创建 | 数据一致性与幂等保证 |
答辩小技巧:演示时按"招聘需求 → 候选人 → 录用审批 → 自动生成入职单 → 入职审批 → 自动出现在员工档案"这条主线一气呵成走完,比零散展示十个功能更有说服力。
八、快速体验
结论先行:在线演示 + 三份源码仓库全部公开,账号admin / admin123直接登录体验。
8.1 在线演示
- 🌐Web 演示:http://ruoyioffice.com/web/(账号
admin/ 密码admin123) - 操作路径:登录 → 左侧菜单「人力资源」→「招聘管理」/「员工关系」
推荐体验流程(5 步走完招聘→入职主线):
- 进入「招聘需求」,新建一条需求并提交审批;
- 在「流程中心 - 我的待办」中审批通过该需求;
- 进入「候选人」,新增候选人并发起「录用审批」;
- 审批通过录用单后,到「员工关系 - 入职管理」查看自动生成的入职登记单;
- 审批通过入职单后,到「员工档案」确认新员工已自动建档。
8.2 源码仓库
| 平台 | 仓库 | 地址 |
|---|---|---|
| GitHub | 后端 | https://github.com/yuqing2026/ruoyi-office |
| GitCode | 后端 | https://gitcode.com/zhouzhongyan/ruoyi-office |
| Gitee | 后端 | https://gitee.com/yqzy1688/ruoyi-office |
| GitCode | 前端 | https://gitcode.com/zhouzhongyan/ruoyi-office-vben.git |
结语
2026 毕业季,与其纠结"从零自己搭框架",不如站在成熟开源框架的肩膀上,把精力聚焦到业务流程和技术深度。HR 招聘+入职系统的最大优势,在于它有一条天然清晰的主线——招聘需求、职位、候选人、面试、录用、入职建档,环环相扣、可演示、可讲解。
更重要的是,HRM 模块本身就是一个"选题超市":时间紧,就做"候选人管理 + 录用审批";想冲优秀,就把"邮箱自动抓简历 + 审批即建档 + 状态机联动"这套自动化做透。同一套源码,丰俭由人。
送给 2026 届同学一句话:毕设的含金量不在于"做了多少功能",而在于"你能把一条业务流程讲到多深"。把招聘到入职这条线讲到流程引擎回调、状态机设计、单据编号生成、幂等保证,比堆十个半成品模块更打动评委。
💬讨论话题:你的毕设打算选 HRM 的哪个子域?是招聘、考勤还是薪资?欢迎在评论区聊聊你的选题思路,遇到的技术难点也可以一起讨论。
祝 2026 届毕业生顺利通过答辩!
常见问题(FAQ)
这套 HR 招聘+入职系统适合做毕业设计吗?
非常适合。它业务场景人人都懂(投简历/面试/发 Offer/办入职),技术栈主流(Spring Boot 3.5 + Vue3 + Flowable),且有一条完整的"招聘→录用→入职"数据流主线,便于答辩演示。难度可裁剪:基础同学做候选人管理+录用审批即可成题,想冲优秀可把"邮箱抓简历+审批即建档"这套自动化做透。
是开源免费的吗?要钱吗?
开源免费、可商用。后端基于 Spring Boot 3.5、前端基于 Vue3 + Vben Admin,源码在 GitCode 和 GitHub 上完全公开,无 license 限制,可放心用于毕业设计与二次开发。
部署难不难?本地多久能跑起来?
不难。准备好 JDK 17、MySQL 8、Redis、Node 18 后,导入 SQL、配置数据库连接,后端运行YudaoServerApplication(单体模式),前端执行pnpm dev:antd,约 10 分钟即可用admin/admin123登录。答辩演示可部署到阿里云 2 核 2G 服务器。
招聘审批流程可以自定义吗?
可以。招聘需求单、录用审批单、入职登记单都基于 Flowable BPMN 引擎,可在流程设计器中自定义审批节点、会签、条件分支,无需改代码。流程定义 Key 分别为hr_recruitment_requirement_bill、hr_recruitment_offer_bill、hr_employee_entry_bill。
"录用审批通过自动生成入职单"是怎么实现的?
通过FlowBillService回调机制实现。录用审批单实现该接口,审批人点"通过"后 Flowable 引擎回调updateProcessStatus,方法内判断状态为通过时,自动用候选人和 Offer 信息拼装一张入职登记单并落库,同时更新候选人状态、职位已录用人数。整个过程做了幂等处理,已生成的不会重复创建。
💡想要体验 RuoYi Office 的强大功能?
🌐在线演示:http://ruoyioffice.com/web/(账号 admin / admin123)
📦源码仓库:GitHub | GitCode | Gitee
💬技术咨询:添加微信17156169080,备注「RuoYi Office」
⭐如果觉得不错,请给个 Star 支持一下!