# 人事招聘模块API文档 ## 基本信息 - **模块名称**: 人事招聘管理 - **模块代码**: rs - **版本**: 1.0.0 - **更新日期**: 2025-07-02 - **负责人**: wuzilong ## 模块概述 人事招聘模块提供了招聘职位发布、应聘申请处理、应聘者管理等功能,帮助人事部门高效管理招聘流程。 ## 数据表结构 ### 1. 招聘职位表 (rs_job) | 字段名 | 类型 | 必填 | 描述 | |-------|------|------|------| | job_id | bigint(20) | 是 | 职位ID,主键 | | title | varchar(100) | 是 | 职位名称 | | department | varchar(50) | 是 | 部门 | | location | varchar(100) | 是 | 工作地点 | | description | text | 是 | 职位描述 | | requirements | text | 是 | 任职要求 | | is_active | char(1) | 是 | 是否启用(0正常 1停用) | | publish_time | datetime | 否 | 发布时间 | | views | int(11) | 否 | 浏览次数 | | create_by | bigint(20) | 是 | 创建者 | | create_time | datetime | 是 | 创建时间 | | update_by | bigint(20) | 否 | 更新者 | | update_time | datetime | 否 | 更新时间 | | remark | varchar(500) | 否 | 备注 | ### 2. 应聘申请表 (rs_application) | 字段名 | 类型 | 必填 | 描述 | |-------|------|------|------| | application_id | bigint(20) | 是 | 申请ID,主键 | | job_id | bigint(20) | 是 | 职位ID | | applicant_id | bigint(20) | 是 | 应聘者ID | | apply_time | datetime | 是 | 申请时间 | | status | varchar(20) | 是 | 状态(pending-待处理 interviewed-已面试 offered-已录用 rejected-已拒绝) | | resume_path | varchar(255) | 否 | 简历路径 | | self_description | text | 否 | 自我介绍 | | hr_notes | text | 否 | HR备注 | | create_by | bigint(20) | 是 | 创建者 | | create_time | datetime | 是 | 创建时间 | | update_by | bigint(20) | 否 | 更新者 | | update_time | datetime | 否 | 更新时间 | ### 3. 应聘者表 (rs_applicant) | 字段名 | 类型 | 必填 | 描述 | |-------|------|------|------| | applicant_id | bigint(20) | 是 | 应聘者ID,主键 | | name | varchar(100) | 是 | 姓名 | | phone | varchar(20) | 是 | 电话 | | email | varchar(100) | 是 | 邮箱 | | resume_path | varchar(255) | 否 | 简历路径 | | self_intro | text | 否 | 自我介绍 | | user_id | bigint(20) | 否 | 用户ID(关联系统用户) | | create_by | bigint(20) | 是 | 创建者 | | create_time | datetime | 是 | 创建时间 | | update_by | bigint(20) | 否 | 更新者 | | update_time | datetime | 否 | 更新时间 | ### 4. 教育经历表 (rs_education) | 字段名 | 类型 | 必填 | 描述 | |-------|------|------|------| | edu_id | bigint(20) | 是 | 教育ID,主键 | | applicant_id | bigint(20) | 是 | 应聘者ID | | school_name | varchar(100) | 是 | 学校名称 | | major | varchar(100) | 是 | 专业 | | degree | varchar(50) | 是 | 学位 | | start_date | date | 是 | 开始日期 | | end_date | date | 是 | 结束日期 | | description | text | 否 | 描述 | | create_by | bigint(20) | 是 | 创建者 | | create_time | datetime | 是 | 创建时间 | | update_by | bigint(20) | 否 | 更新者 | | update_time | datetime | 否 | 更新时间 | ### 5. 工作经历表 (rs_work_experience) | 字段名 | 类型 | 必填 | 描述 | |-------|------|------|------| | exp_id | bigint(20) | 是 | 经历ID,主键 | | applicant_id | bigint(20) | 是 | 应聘者ID | | company_name | varchar(100) | 是 | 公司名称 | | position | varchar(100) | 是 | 职位 | | is_current | char(1) | 是 | 是否在职(0是 1否) | | start_date | date | 是 | 开始日期 | | end_date | date | 否 | 结束日期 | | description | text | 否 | 描述 | | create_by | bigint(20) | 是 | 创建者 | | create_time | datetime | 是 | 创建时间 | | update_by | bigint(20) | 否 | 更新者 | | update_time | datetime | 否 | 更新时间 | ## API接口列表 ### 职位管理API #### 1. 查询职位列表 - **接口地址**: `/job/list` - **请求方式**: GET - **权限标识**: `rs:job:list` - **请求参数**: | 参数名 | 类型 | 必填 | 描述 | |-------|------|------|------| | pageNum | int | 否 | 页码 | | pageSize | int | 否 | 每页记录数 | | title | string | 否 | 职位名称 | | department | string | 否 | 部门 | | isActive | string | 否 | 状态(0正常 1停用) | - **返回示例**: ```json { "total": 10, "rows": [ { "jobId": 1, "title": "软件工程师", "department": "tech", "location": "北京", "isActive": "0", "publishTime": "2025-07-01 10:00:00", "views": 100, "createTime": "2025-07-01 10:00:00" } ], "code": 200, "msg": "查询成功" } ``` #### 2. 获取公开的招聘职位列表 - **接口地址**: `/job/public/list` - **请求方式**: GET - **权限标识**: 无需权限 - **请求参数**: | 参数名 | 类型 | 必填 | 描述 | |-------|------|------|------| | pageNum | int | 否 | 页码 | | pageSize | int | 否 | 每页记录数 | | title | string | 否 | 职位名称 | | department | string | 否 | 部门 | - **返回示例**: 与查询职位列表接口相同 #### 3. 获取职位详细信息 - **接口地址**: `/job/{jobId}` - **请求方式**: GET - **权限标识**: `rs:job:query` - **请求参数**: | 参数名 | 类型 | 必填 | 描述 | |-------|------|------|------| | jobId | long | 是 | 职位ID | - **返回示例**: ```json { "code": 200, "msg": "操作成功", "data": { "jobId": 1, "title": "软件工程师", "department": "tech", "location": "北京", "description": "负责系统设计和开发...", "requirements": "本科及以上学历,3年以上相关经验...", "isActive": "0", "publishTime": "2025-07-01 10:00:00", "views": 100, "createBy": 1, "createTime": "2025-07-01 10:00:00", "updateBy": null, "updateTime": null, "remark": null } } ``` #### 4. 新增招聘职位 - **接口地址**: `/job` - **请求方式**: POST - **权限标识**: `rs:job:add` - **请求参数**: | 参数名 | 类型 | 必填 | 描述 | |-------|------|------|------| | title | string | 是 | 职位名称 | | department | string | 是 | 部门 | | location | string | 是 | 工作地点 | | description | string | 是 | 职位描述 | | requirements | string | 是 | 任职要求 | | isActive | string | 是 | 是否启用(0正常 1停用) | | remark | string | 否 | 备注 | - **返回示例**: ```json { "code": 200, "msg": "操作成功" } ``` #### 5. 修改招聘职位 - **接口地址**: `/job` - **请求方式**: PUT - **权限标识**: `rs:job:edit` - **请求参数**: | 参数名 | 类型 | 必填 | 描述 | |-------|------|------|------| | jobId | long | 是 | 职位ID | | title | string | 是 | 职位名称 | | department | string | 是 | 部门 | | location | string | 是 | 工作地点 | | description | string | 是 | 职位描述 | | requirements | string | 是 | 任职要求 | | isActive | string | 是 | 是否启用(0正常 1停用) | | remark | string | 否 | 备注 | - **返回示例**: ```json { "code": 200, "msg": "操作成功" } ``` ### 申请管理API #### 1. 查询申请记录列表 - **接口地址**: `/application/list` - **请求方式**: GET - **权限标识**: `rs:application:list` - **请求参数**: | 参数名 | 类型 | 必填 | 描述 | |-------|------|------|------| | pageNum | int | 否 | 页码 | | pageSize | int | 否 | 每页记录数 | | jobTitle | string | 否 | 职位名称 | | applicantName | string | 否 | 应聘者姓名 | | status | string | 否 | 状态 | - **返回示例**: ```json { "total": 10, "rows": [ { "applicationId": 1, "jobId": 1, "applicantId": 1, "jobTitle": "软件工程师", "applicantName": "张三", "applyTime": "2025-07-01 10:00:00", "status": "pending", "hrNotes": null, "createTime": "2025-07-01 10:00:00" } ], "code": 200, "msg": "查询成功" } ``` #### 2. 提交职位申请 - **接口地址**: `/application/apply` - **请求方式**: POST - **权限标识**: 无需权限 - **请求参数**: | 参数名 | 类型 | 必填 | 描述 | |-------|------|------|------| | jobId | long | 是 | 职位ID | | applicantId | long | 是 | 应聘者ID | | resumePath | string | 否 | 简历路径 | | selfDescription | string | 否 | 自我介绍 | - **返回示例**: ```json { "code": 200, "msg": "申请提交成功" } ``` #### 3. 更新申请状态 - **接口地址**: `/application/status` - **请求方式**: PUT - **权限标识**: `rs:application:edit` - **请求参数**: | 参数名 | 类型 | 必填 | 描述 | |-------|------|------|------| | applicationId | long | 是 | 申请ID | | status | string | 是 | 状态(pending-待处理 interviewed-已面试 offered-已录用 rejected-已拒绝) | | hrNotes | string | 否 | HR备注 | - **返回示例**: ```json { "code": 200, "msg": "状态更新成功" } ``` ## 前端页面 ### 页面结构 ``` rs/ ├── job/ # 职位管理 │ ├── index.vue # 职位管理列表 │ └── public.vue # 公开招聘职位列表 ├── application/ # 申请管理 │ └── index.vue # 申请管理列表 ├── applicant/ # 应聘者管理 │ └── index.vue # 应聘者管理列表 ├── education/ # 教育经历管理 │ └── index.vue # 教育经历管理列表 ├── experience/ # 工作经历管理 │ └── index.vue # 工作经历管理列表 └── index.ts # 路由配置 ``` ### 菜单权限 人事招聘模块菜单权限配置在 `docs/设计文档/database/rs-menu.sql` 文件中,主要包括: - 人事管理(顶级菜单) - 职位管理 - 招聘中心 - 申请管理 - 应聘者管理 - 教育经历管理 - 工作经历管理 ### 数据字典 人事招聘模块使用的数据字典在 `docs/设计文档/database/rs-dictionary.sql` 文件中,主要包括: - 部门字典 (rs_department) - 应聘状态字典 (rs_application_status) ## 使用示例 ### 职位管理页面 1. 进入职位管理页面 (`/rs/job`) 2. 点击"新增"按钮添加职位 3. 填写职位信息,包括职位名称、部门、工作地点等 4. 点击"确定"保存职位信息 ### 申请管理页面 1. 进入申请管理页面 (`/rs/application`) 2. 查看申请列表 3. 点击"详情"按钮查看申请详情 4. 点击"状态"按钮更新申请状态(面试、录用、拒绝) ## 注意事项 1. 职位上线后会在招聘中心页面显示 2. 申请状态更新后会通知应聘者 3. 应聘者信息包含教育经历和工作经验 4. 确保应聘者上传的简历格式正确(PDF、DOC、DOCX)