添加简历实体类相关表

This commit is contained in:
zk
2026-04-01 15:36:11 +08:00
parent 23cdf5d146
commit 93f19e5f80
13 changed files with 459 additions and 1 deletions
+19 -1
View File
@@ -99,6 +99,12 @@ offerpie/back-end
│ ├─ UserProfileProjectMapper.java # 用户项目经历Mapper │ ├─ UserProfileProjectMapper.java # 用户项目经历Mapper
│ ├─ UserProfileCompetitionMapper.java # 用户竞赛经历Mapper │ ├─ UserProfileCompetitionMapper.java # 用户竞赛经历Mapper
│ ├─ UserProfileSkillTagRelationMapper.java # 用户技能标签关联Mapper │ ├─ UserProfileSkillTagRelationMapper.java # 用户技能标签关联Mapper
│ ├─ UserResumeMapper.java # 用户简历Mapper
│ ├─ UserResumeEducationMapper.java # 简历-教育经历Mapper
│ ├─ UserResumeWorkMapper.java # 简历-工作经历Mapper
│ ├─ UserResumeInternshipMapper.java # 简历-实习经历Mapper
│ ├─ UserResumeProjectMapper.java # 简历-项目经历Mapper
│ ├─ UserResumeCompetitionMapper.java # 简历-竞赛经历Mapper
│ └─ AppJobDataMapper.java # 爬虫岗位原始数据Mapper │ └─ AppJobDataMapper.java # 爬虫岗位原始数据Mapper
├─ pojo/ ├─ pojo/
│ ├─ po/ # 持久化实体 │ ├─ po/ # 持久化实体
@@ -130,6 +136,12 @@ offerpie/back-end
│ │ ├─ UserProfileProject.java # 用户项目经历表(bg_user_profile_project │ │ ├─ UserProfileProject.java # 用户项目经历表(bg_user_profile_project
│ │ ├─ UserProfileCompetition.java # 用户竞赛经历表(bg_user_profile_competition │ │ ├─ UserProfileCompetition.java # 用户竞赛经历表(bg_user_profile_competition
│ │ ├─ UserProfileSkillTagRelation.java # 用户技能标签关联表(bg_user_profile_skill_tag_relation │ │ ├─ UserProfileSkillTagRelation.java # 用户技能标签关联表(bg_user_profile_skill_tag_relation
│ │ ├─ UserResume.java # 用户简历表(bg_user_resume,简历维度信息+个人基本信息合并存储)
│ │ ├─ UserResumeEducation.java # 简历-教育经历表(bg_user_resume_education
│ │ ├─ UserResumeWork.java # 简历-工作经历表(bg_user_resume_work
│ │ ├─ UserResumeInternship.java # 简历-实习经历表(bg_user_resume_internship
│ │ ├─ UserResumeProject.java # 简历-项目经历表(bg_user_resume_project
│ │ ├─ UserResumeCompetition.java # 简历-竞赛经历表(bg_user_resume_competition
│ │ └─ AppJobData.java # 爬虫岗位原始数据表(app_job_data │ │ └─ AppJobData.java # 爬虫岗位原始数据表(app_job_data
│ └─ vo/ # ViewObjectOssUrlVo、DescriptionParagraph、JobListItemVo、UserHonorsVo 等) │ └─ vo/ # ViewObjectOssUrlVo、DescriptionParagraph、JobListItemVo、UserHonorsVo 等)
├─ resources/mapper/ # MyBatis XML 映射文件 ├─ resources/mapper/ # MyBatis XML 映射文件
@@ -143,7 +155,7 @@ offerpie/back-end
|------|----------|-----------| |------|----------|-----------|
| **client-api** | - 面向终端用户的 REST API <br> - 启动 Spring Boot 应用 <br> - 短信验证码登录(含自动注册、邀请码绑定) <br> - **功能权限校验**:注解 + 切面 + 权限服务(校验、扣减、回退) <br> - **路由菜单**:获取用户有效菜单树 | `ClientApplication``LoginController``RouteMenuController``FuncPermission``FuncPermissionAspect``FuncPermissionService``RouteMenuService``UserRegisterService``RouteMenuVo` | | **client-api** | - 面向终端用户的 REST API <br> - 启动 Spring Boot 应用 <br> - 短信验证码登录(含自动注册、邀请码绑定) <br> - **功能权限校验**:注解 + 切面 + 权限服务(校验、扣减、回退) <br> - **路由菜单**:获取用户有效菜单树 | `ClientApplication``LoginController``RouteMenuController``FuncPermission``FuncPermissionAspect``FuncPermissionService``RouteMenuService``UserRegisterService``RouteMenuVo` |
| **common** | - **统一配置**OSS、Redis、Security、WxPay、Sms、Async 等 <br> - **跨层工具**:HTTP、IP、认证、验证码、Redis Server 等 <br> - **全局拦截/切面**:日志、TraceId、黑名单、SQL 打印 <br> - **统一异常/响应**`GlobalExceptionAdvice``UnifiedResponse` <br> - **业务抽象**:邮件发送、微信支付(Native/JS/Transfer)、异步任务 <br> - **公共 POJO**:登录令牌、防重放信息等 | `config/`, `tool/`, `interceptor/`, `aop/`, `exception/`, `email/`, `wxPay/`, `pojo/` | | **common** | - **统一配置**OSS、Redis、Security、WxPay、Sms、Async 等 <br> - **跨层工具**:HTTP、IP、认证、验证码、Redis Server 等 <br> - **全局拦截/切面**:日志、TraceId、黑名单、SQL 打印 <br> - **统一异常/响应**`GlobalExceptionAdvice``UnifiedResponse` <br> - **业务抽象**:邮件发送、微信支付(Native/JS/Transfer)、异步任务 <br> - **公共 POJO**:登录令牌、防重放信息等 | `config/`, `tool/`, `interceptor/`, `aop/`, `exception/`, `email/`, `wxPay/`, `pojo/` |
| **manager** | - **业务实体**`User``OssFile``UserInvite``RouteMenu``FuncPermission``UserRouteMenuStock``UserFuncPermissionStock``UserFuncUsageLog``ChinaRegionsCode``JobCategory``Company``Job``JobRegionRelation``Industry``SkillTag``UserJobFavorite``UserJobApplication``UserJobDislike``AppJobData` <br> - **MyBatis Mapper**`UserMapper``OssFileMapper``UserInviteMapper``RouteMenuMapper``FuncPermissionMapper``UserRouteMenuStockMapper``UserFuncPermissionStockMapper``UserFuncUsageLogMapper``ChinaRegionsCodeMapper``JobCategoryMapper``CompanyMapper``JobMapper``JobRegionRelationMapper``IndustryMapper``SkillTagMapper``UserJobFavoriteMapper``UserJobApplicationMapper``UserJobDislikeMapper``AppJobDataMapper` <br> - **业务 API**:文件上传/下载、健康检查等 <br> - **业务逻辑**:服务层、工具类等 <br> - **既供 B 端 UI(待实现)使用,也供 C 端业务直接调用** | `controller/`, `mapper/`, `pojo/po/`, `pojo/vo/`, `service/`, `constant/` | | **manager** | - **业务实体**`User``OssFile``UserInvite``RouteMenu``FuncPermission``UserRouteMenuStock``UserFuncPermissionStock``UserFuncUsageLog``ChinaRegionsCode``JobCategory``Company``Job``JobRegionRelation``Industry``SkillTag``UserJobFavorite``UserJobApplication``UserJobDislike``AppJobData``UserResume``UserResumeEducation``UserResumeWork``UserResumeInternship``UserResumeProject``UserResumeCompetition` <br> - **MyBatis Mapper**`UserMapper``OssFileMapper``UserInviteMapper``RouteMenuMapper``FuncPermissionMapper``UserRouteMenuStockMapper``UserFuncPermissionStockMapper``UserFuncUsageLogMapper``ChinaRegionsCodeMapper``JobCategoryMapper``CompanyMapper``JobMapper``JobRegionRelationMapper``IndustryMapper``SkillTagMapper``UserJobFavoriteMapper``UserJobApplicationMapper``UserJobDislikeMapper``AppJobDataMapper``UserResumeMapper``UserResumeEducationMapper``UserResumeWorkMapper``UserResumeInternshipMapper``UserResumeProjectMapper``UserResumeCompetitionMapper` <br> - **业务 API**:文件上传/下载、健康检查等 <br> - **业务逻辑**:服务层、工具类等 <br> - **既供 B 端 UI(待实现)使用,也供 C 端业务直接调用** | `controller/`, `mapper/`, `pojo/po/`, `pojo/vo/`, `service/`, `constant/` |
## 3️⃣ 关键业务实体 ## 3️⃣ 关键业务实体
| 实体 | 所属模块 | 作用概述 | | 实体 | 所属模块 | 作用概述 |
@@ -180,6 +192,12 @@ offerpie/back-end
| `JobSkillTagRelation` | manager | 岗位-技能标签关联表(bg_job_skill_tag_relation),AI提取的技能标签与岗位的关联,用于匹配度计算。 | | `JobSkillTagRelation` | manager | 岗位-技能标签关联表(bg_job_skill_tag_relation),AI提取的技能标签与岗位的关联,用于匹配度计算。 |
| `UserProfileSkillTagRelation` | manager | 用户技能标签关联表(bg_user_profile_skill_tag_relation),记录用户匹配的技能标签,由AI自动识别生成。 | | `UserProfileSkillTagRelation` | manager | 用户技能标签关联表(bg_user_profile_skill_tag_relation),记录用户匹配的技能标签,由AI自动识别生成。 |
| `AppJobData` | manager | 爬虫岗位原始数据表(app_job_data),存储爬虫抓取的原始岗位数据,供清洗服务读取并写入业务表。 | | `AppJobData` | manager | 爬虫岗位原始数据表(app_job_data),存储爬虫抓取的原始岗位数据,供清洗服务读取并写入业务表。 |
| `UserResume` | manager | 用户简历表(bg_user_resume),简历维度信息(名称、目标岗位、默认标记、排序)+ 个人基本信息(姓名、联系方式、技能、证书、个人概述等)合并存储,一个用户可有多份简历。 |
| `UserResumeEducation` | manager | 简历-教育经历表(bg_user_resume_education),学校、专业、学历(文本)、学习形式(文本)、起止时间、描述段落。 |
| `UserResumeWork` | manager | 简历-工作经历表(bg_user_resume_work),公司、职位、起止时间、描述段落。 |
| `UserResumeInternship` | manager | 简历-实习经历表(bg_user_resume_internship),公司、职位、起止时间、描述段落。 |
| `UserResumeProject` | manager | 简历-项目经历表(bg_user_resume_project),公司、项目名、角色、起止时间、描述段落。 |
| `UserResumeCompetition` | manager | 简历-竞赛经历表(bg_user_resume_competition),竞赛名、奖项、获奖时间、描述段落。 |
## 4️⃣ 权限体系设计 ## 4️⃣ 权限体系设计
### 整体架构 ### 整体架构
@@ -0,0 +1,12 @@
package org.jiayunet.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.jiayunet.pojo.po.UserResumeCompetition;
/**
* 简历-竞赛经历Mapper
*
* @author zk
*/
public interface UserResumeCompetitionMapper extends BaseMapper<UserResumeCompetition> {
}
@@ -0,0 +1,12 @@
package org.jiayunet.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.jiayunet.pojo.po.UserResumeEducation;
/**
* 简历-教育经历Mapper
*
* @author zk
*/
public interface UserResumeEducationMapper extends BaseMapper<UserResumeEducation> {
}
@@ -0,0 +1,12 @@
package org.jiayunet.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.jiayunet.pojo.po.UserResumeInternship;
/**
* 简历-实习经历Mapper
*
* @author zk
*/
public interface UserResumeInternshipMapper extends BaseMapper<UserResumeInternship> {
}
@@ -0,0 +1,12 @@
package org.jiayunet.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.jiayunet.pojo.po.UserResume;
/**
* 用户简历Mapper
*
* @author zk
*/
public interface UserResumeMapper extends BaseMapper<UserResume> {
}
@@ -0,0 +1,12 @@
package org.jiayunet.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.jiayunet.pojo.po.UserResumeProject;
/**
* 简历-项目经历Mapper
*
* @author zk
*/
public interface UserResumeProjectMapper extends BaseMapper<UserResumeProject> {
}
@@ -0,0 +1,12 @@
package org.jiayunet.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.jiayunet.pojo.po.UserResumeWork;
/**
* 简历-工作经历Mapper
*
* @author zk
*/
public interface UserResumeWorkMapper extends BaseMapper<UserResumeWork> {
}
@@ -0,0 +1,82 @@
package org.jiayunet.pojo.po;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import lombok.Data;
import java.time.Instant;
import java.util.List;
/**
* 用户简历表(bg_user_resume
* <p>简历维度信息 + 个人基本信息合并存储,个人信息与简历一对一,无需拆表</p>
*
* @author zk
*/
@Data
@TableName(value = "bg_user_resume", autoResultMap = true)
public class UserResume {
@TableId(type = IdType.ASSIGN_ID)
private Long id;
/** 用户ID */
private Long userId;
// ========== 简历维度信息(非简历文本内容) ==========
/** 简历名称(非简历文本内容) */
private String resumeName;
/** 目标岗位(非简历文本内容) */
private String targetPosition;
/** 是否默认简历 0=否 1=是 */
private Integer isDefault;
/** 排序序号,越小越靠前 */
private Integer sortOrder;
// ========== 简历个人信息(简历文本内容,与简历一对一) ==========
/** 头像URL */
private String avatarUrl;
/** 真实姓名 */
private String name;
/** 邮箱 */
private String email;
/** 手机号码 */
private String mobileNumber;
/** 所在城市 */
private String city;
/** 微信号 */
private String wechatNumber;
/** 作品集链接 */
private String portfolioUrl;
/** 技能标签列表 */
@TableField(typeHandler = JacksonTypeHandler.class)
private List<String> skills;
/** 证书标签列表 */
@TableField(typeHandler = JacksonTypeHandler.class)
private List<String> certificates;
/** 个人概述 */
private String summary;
/** 简历创建时间 */
private Instant createTime;
/** 简历整体修改时间 */
private Instant updateTime;
}
@@ -0,0 +1,53 @@
package org.jiayunet.pojo.po;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import lombok.Data;
import org.jiayunet.pojo.vo.DescriptionParagraph;
import java.time.Instant;
import java.util.List;
/**
* 简历-竞赛经历表(bg_user_resume_competition
*
* @author zk
*/
@Data
@TableName(value = "bg_user_resume_competition", autoResultMap = true)
public class UserResumeCompetition {
@TableId(type = IdType.ASSIGN_ID)
private Long id;
/** 关联bg_user_resume.id */
private Long resumeId;
/** 用户ID(冗余,便于直接按用户查询) */
private Long userId;
/** 竞赛名称 */
private String competitionName;
/** 获奖情况,如全国二等奖 */
private String award;
/** 获奖时间,格式:2023.07 */
private String awardDate;
/** 描述段落,id为前端生成的短标识,用于简历优化时精确定位段落 */
@TableField(typeHandler = JacksonTypeHandler.class)
private List<DescriptionParagraph> description;
/** 排序序号,越小越靠前 */
private Integer sortOrder;
/** 创建时间 */
private Instant createTime;
/** 更新时间 */
private Instant updateTime;
}
@@ -0,0 +1,62 @@
package org.jiayunet.pojo.po;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import lombok.Data;
import org.jiayunet.pojo.vo.DescriptionParagraph;
import java.time.Instant;
import java.util.List;
/**
* 简历-教育经历表(bg_user_resume_education
*
* @author zk
*/
@Data
@TableName(value = "bg_user_resume_education", autoResultMap = true)
public class UserResumeEducation {
@TableId(type = IdType.ASSIGN_ID)
private Long id;
/** 关联bg_user_resume.id */
private Long resumeId;
/** 用户ID(冗余,便于直接按用户查询) */
private Long userId;
/** 学校名称 */
private String school;
/** 专业 */
private String major;
/** 学历:大专/本科/硕士/博士 */
private String degree;
/** 学习形式:全日制/非全日制 */
private String studyType;
/** 开始时间,格式:2023.09 */
private String startDate;
/** 结束时间,格式:2024.06 */
private String endDate;
/** 描述段落,id为前端生成的短标识,用于简历优化时精确定位段落 */
@TableField(typeHandler = JacksonTypeHandler.class)
private List<DescriptionParagraph> description;
/** 排序序号,越小越靠前 */
private Integer sortOrder;
/** 创建时间 */
private Instant createTime;
/** 更新时间 */
private Instant updateTime;
}
@@ -0,0 +1,56 @@
package org.jiayunet.pojo.po;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import lombok.Data;
import org.jiayunet.pojo.vo.DescriptionParagraph;
import java.time.Instant;
import java.util.List;
/**
* 简历-实习经历表(bg_user_resume_internship
*
* @author zk
*/
@Data
@TableName(value = "bg_user_resume_internship", autoResultMap = true)
public class UserResumeInternship {
@TableId(type = IdType.ASSIGN_ID)
private Long id;
/** 关联bg_user_resume.id */
private Long resumeId;
/** 用户ID(冗余,便于直接按用户查询) */
private Long userId;
/** 公司名称 */
private String companyName;
/** 职位 */
private String position;
/** 开始时间,格式:2023.06 */
private String startDate;
/** 结束时间,格式:2023.09,至今则为空 */
private String endDate;
/** 描述段落,id为前端生成的短标识,用于简历优化时精确定位段落 */
@TableField(typeHandler = JacksonTypeHandler.class)
private List<DescriptionParagraph> description;
/** 排序序号,越小越靠前 */
private Integer sortOrder;
/** 创建时间 */
private Instant createTime;
/** 更新时间 */
private Instant updateTime;
}
@@ -0,0 +1,59 @@
package org.jiayunet.pojo.po;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import lombok.Data;
import org.jiayunet.pojo.vo.DescriptionParagraph;
import java.time.Instant;
import java.util.List;
/**
* 简历-项目经历表(bg_user_resume_project
*
* @author zk
*/
@Data
@TableName(value = "bg_user_resume_project", autoResultMap = true)
public class UserResumeProject {
@TableId(type = IdType.ASSIGN_ID)
private Long id;
/** 关联bg_user_resume.id */
private Long resumeId;
/** 用户ID(冗余,便于直接按用户查询) */
private Long userId;
/** 所属公司 */
private String companyName;
/** 项目名称 */
private String projectName;
/** 担任角色 */
private String role;
/** 开始时间,格式:2023.06 */
private String startDate;
/** 结束时间,格式:2023.09,至今则为空 */
private String endDate;
/** 描述段落,id为前端生成的短标识,用于简历优化时精确定位段落 */
@TableField(typeHandler = JacksonTypeHandler.class)
private List<DescriptionParagraph> description;
/** 排序序号,越小越靠前 */
private Integer sortOrder;
/** 创建时间 */
private Instant createTime;
/** 更新时间 */
private Instant updateTime;
}
@@ -0,0 +1,56 @@
package org.jiayunet.pojo.po;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import lombok.Data;
import org.jiayunet.pojo.vo.DescriptionParagraph;
import java.time.Instant;
import java.util.List;
/**
* 简历-工作经历表(bg_user_resume_work
*
* @author zk
*/
@Data
@TableName(value = "bg_user_resume_work", autoResultMap = true)
public class UserResumeWork {
@TableId(type = IdType.ASSIGN_ID)
private Long id;
/** 关联bg_user_resume.id */
private Long resumeId;
/** 用户ID(冗余,便于直接按用户查询) */
private Long userId;
/** 公司名称 */
private String companyName;
/** 职位 */
private String position;
/** 开始时间,格式:2023.06 */
private String startDate;
/** 结束时间,格式:2023.09,至今则为空 */
private String endDate;
/** 描述段落,id为前端生成的短标识,用于简历优化时精确定位段落 */
@TableField(typeHandler = JacksonTypeHandler.class)
private List<DescriptionParagraph> description;
/** 排序序号,越小越靠前 */
private Integer sortOrder;
/** 创建时间 */
private Instant createTime;
/** 更新时间 */
private Instant updateTime;
}