# HireSmart **Repository Path**: brzhang/HireSmart ## Basic Information - **Project Name**: HireSmart - **Description**: 求职 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-07 - **Last Updated**: 2026-05-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # HireSmart 招聘系统 > 毕业设计项目:基于 **Spring Boot 3 + uniapp(Vue3 / H5)** 的三端招聘系统 > 目标:以最小可用的代码量完成 求职者 / 企业 HR / 平台管理员 三端核心闭环。 演示账号: 管理员 admin / admin123 HR hr_xingchen / hr12345 (其它 HR:hr_zijie / hr_jiguang / hr_lanqiao / hr_yuntu) 求职者 zhangwei / Sk123456 (其它:liyifei / wangxin / zhaoying / chenyu / zhouchen / xulu / gaoming) ## 一、系统功能概览 ### 公共 - 三类用户注册/登录(JWT),用户名+密码 - 站内消息:列表、详情、已读标记、一键回复、未读数轮询提醒 ### 求职者 - 个人信息编辑 - 简历主表 + 教育经历 + 工作经历 + 技能 + PDF 附件 - 投递前自动校验简历完整性 - 岗位搜索(关键词)+ 多维度筛选(城市 / 学历 / 经验 / 薪资) - 岗位详情、企业详情 - 一键投递、投递记录、状态跟踪、收藏 - 面试邀约接收、列表、详情 ### 企业 HR - 企业资料填写、Logo 上传,提交后等待审核 - 岗位发布 / 编辑 / 上下架 / 删除(发布与编辑后均需审核) - 收到投递的简历列表与详情 - 改投递状态:已查看 / 驳回 / 通过 / 邀请面试 - 发起面试、录入面试结果(自动联动投递状态 + 推送消息) ### 平台管理员 - 用户管理:列表、按角色/状态筛选、禁用/启用 - 待审核企业、待审核岗位列表与审核(通过 / 驳回,原因可填) - 系统日志:操作日志 + 登录日志,按时间/用户/动作筛选 - 数据概览:总用户、待审企业、待审岗位 ## 二、技术栈 | 模块 | 技术 | |------|------| | 后端 | Spring Boot 3.2 · Java 17 · Maven · MyBatis-Plus 3.5 · MySQL 8 · JWT (jjwt 0.12) · Lombok · AOP | | 前端 | uniapp (Vue 3) · Vite · TypeScript · Pinia · H5 | | 鉴权 | 自定义 `HandlerInterceptor` + `@AuthRequired` 注解 + ThreadLocal | | 文件 | 本地磁盘 `./uploads`,由 Spring Boot 静态资源映射 `/uploads/**` | | 日志 | AOP 切面 `@LogAction` 自动写 `operation_log`;登录日志由 `AuthController` 直接写入 | ## 三、目录结构 ``` HireSmart/ ├── README.md ├── 毕设.docx 原始需求文档 ├── CLAUDE.md ├── backend/ Spring Boot 项目 │ ├── pom.xml │ ├── src/main/java/com/hiresmart/ │ │ ├── HireSmartApplication.java │ │ ├── common/ R / 异常 / JWT / 拦截器 / 日志 AOP │ │ ├── config/ WebMvc / MyBatis-Plus / DataInitializer │ │ ├── entity/ 12 张表的 PO │ │ └── module/ 按业务域分包 │ │ ├── auth/ user/ resume/ company/ job/ │ │ ├── application/ interview/ message/ favorite/ │ │ ├── upload/ log/ admin/ │ └── src/main/resources/ │ ├── application.yml │ └── db/schema.sql └── frontend/ uniapp 项目 ├── package.json ├── vite.config.ts 含 /api → backend 代理 └── src/ ├── App.vue main.ts ├── pages.json ├── api/ 按业务域分文件的 API ├── components/ JobCard 等 ├── pages/ │ ├── login/ register/ message/ │ ├── seeker/ (10 页) │ ├── hr/ (8 页) │ └── admin/ (5 页) ├── store/ Pinia user store └── utils/ request / format ``` ## 四、本地启动(三步) ### 1. 准备数据库 需要本地有 MySQL 8。任选其一安装: ```bash brew install mysql # macOS brew services start mysql ``` 执行建表脚本: ```bash mysql -uroot -p < backend/src/main/resources/db/schema.sql ``` 如果 root 密码不是 `root`,请同步改 `backend/src/main/resources/application.yml` 中的 `spring.datasource.password`。 > 启动后端时会自动播种管理员账号 **`admin / admin123`**(见 `DataInitializer`)。 ### 2. 启动后端 ```bash cd backend mvn spring-boot:run ``` 后端监听 `http://localhost:8080`。 ### 3. 启动前端 ```bash cd frontend npm install # 首次 npm run dev:h5 ``` 前端默认监听 `http://localhost:5173`,浏览器访问该地址即可。 前端通过 vite 代理把 `/api/**` 与 `/uploads/**` 转发到后端,无需改动 baseURL。 > 如果后端不在 `localhost:8080`,可在 `frontend/.env` 中设置: > `VITE_API_TARGET=http://your-backend:port` ### 生产构建 ```bash cd frontend && npm run build:h5 # 产物在 frontend/dist/build/h5/ ``` ```bash cd backend && mvn package # 产物在 backend/target/hiresmart-backend.jar java -jar backend/target/hiresmart-backend.jar ``` ## 五、内置演示账号 | 角色 | 账号 | 密码 | 备注 | |------|------|------|------| | 平台管理员 | `admin` | `admin123` | 启动时自动播种,请尽快改密 | | 求职者 / HR | — | — | 通过注册页自助创建 | ## 六、端到端冒烟测试脚本(5 分钟跑通) 按顺序依次操作即可演示完整业务闭环: 1. **注册 HR**:登录页选「企业 HR」→ 注册 `hr01 / hr123456`。 2. **完善企业**:HR 工作台 → 企业资料 → 填写企业名/简介 → 保存(变 PENDING)。 3. **管理员审核企业**:退出 → 用 `admin / admin123` 登录 → 企业审核 → 通过。 4. **HR 发布岗位**:重新登录 hr01 → 岗位管理 → 发布岗位(填名称/薪资/城市等)→ 提交。 5. **管理员审核岗位**:admin 登录 → 岗位审核 → 通过。 6. **注册求职者**:选「求职者」→ 注册 `seeker01 / seeker123`。 7. **完善简历**:编辑简历 → 填基础信息(姓名/电话/期望岗位)→ 至少添加 1 条教育经历。 8. **搜索 + 投递**:首页搜索 → 进入岗位详情 → 一键投递。 9. **HR 处理投递**:hr01 登录 → 投递管理 → 进入简历详情 → 标记已查看 → 发起面试。 10. **求职者收消息**:seeker01 → 消息列表 → 看到「面试邀约」→ 我的面试列表也有记录。 11. **HR 录入结果**:hr01 → 简历详情 → 录入面试结果(PASSED)。 12. **求职者侧闭环**:seeker01 → 我的投递 → 状态变 `已通过`,消息收到面试结果。 13. **管理员看日志**:admin → 系统日志 → 看到 LOGIN / AUDIT_COMPANY / AUDIT_JOB / ADMIN_TOGGLE_USER 等记录。 ## 七、后端 API 速查 | 模块 | 端点 | |------|------| | 鉴权 | `POST /api/auth/register`, `POST /api/auth/login`, `GET /api/auth/me` | | 用户 | `GET/PUT /api/user/profile`, `PUT /api/user/password` | | 简历 | `GET/PUT /api/resume`, `POST/PUT/DELETE /api/resume/{education,work,skill}/...` | | 企业 | `GET/PUT /api/company/mine`, `GET /api/company/{id}` | | 岗位 | `GET /api/job`, `GET /api/job/{id}`, `POST/PUT/DELETE /api/job`, `PUT /api/job/{id}/status`, `GET /api/job/mine` | | 投递 | `POST /api/application`, `GET /api/application/mine`, `GET /api/application/job/{jobId}`, `GET /api/application/hr`, `GET /api/application/{id}`, `PUT /api/application/{id}/status` | | 面试 | `POST /api/interview`, `PUT /api/interview/{id}/result`, `GET /api/interview/mine`, `GET /api/interview/by-application/{appId}` | | 消息 | `GET /api/message`, `GET /api/message/unread-count`, `GET /api/message/{id}`, `PUT /api/message/{id}/read`, `POST /api/message/{id}/reply` | | 收藏 | `POST/DELETE /api/favorite/{jobId}`, `GET /api/favorite` | | 上传 | `POST /api/upload/{type}` (type ∈ avatar / logo / resume) | | 管理员 | `GET /api/admin/overview`, `GET/PUT /api/admin/user...`, `GET/PUT /api/admin/audit/{company,job}...`, `GET /api/admin/log`, `GET /api/admin/log/login` | ## 八、数据库表(12 张) `user`, `resume`, `resume_education`, `resume_work`, `resume_skill`, `company`, `job`, `application`, `interview`, `message`, `favorite`, `operation_log` 详见 `backend/src/main/resources/db/schema.sql`。 ## 九、毕设答辩可强调的设计点 1. **拦截器 + 注解的轻量鉴权**:避免 Spring Security 复杂配置,体现框架取舍能力。 2. **AOP `@LogAction` 切面**:通过注解自动记录关键操作,业务代码零侵入。 3. **状态机式投递流转**:投递 → 已查看 → 邀约面试 → 通过/驳回;面试结果回写联动投递状态,并主动推送站内消息。 4. **三道投递校验**:简历完整性、岗位上架/审核、是否重复投递(DB 唯一约束兜底)。 5. **三角色单工程一前端**:一份 uniapp 工程登录后按角色路由,部署最小化。 6. **审核闭环**:HR 修改企业/岗位后自动回到 PENDING;管理员驳回时可写原因,前端展示给 HR。 ## 十、未来可扩展(毕设外) - WebSocket 实时推送(替代 30s 轮询) - 简历 PDF 解析自动填充 - 岗位/简历推荐算法 - 后端单元测试与 CI - 前端打包小程序 / App 端 --- > 如果某一步运行失败,请按报错信息查 `application.yml` 数据库连接、`backend/uploads` 写权限以及前端 `vite.config.ts` 的代理配置。