添加岗位相关表

This commit is contained in:
zk
2026-03-18 16:07:22 +08:00
parent d2062c7e07
commit f0eec5fe3e
21 changed files with 576 additions and 3 deletions
+33 -3
View File
@@ -63,7 +63,17 @@ offerpie/back-end
│ ├─ FuncPermissionMapper.java # 功能权限Mapper
│ ├─ UserRouteMenuStockMapper.java # 用户路由菜单库存Mapper
│ ├─ UserFuncPermissionStockMapper.java # 用户功能权限库存Mapper
─ UserFuncUsageLogMapper.java # 用户功能使用记录Mapper
─ UserFuncUsageLogMapper.java # 用户功能使用记录Mapper
│ ├─ ChinaRegionsCodeMapper.java # 地区Mapper
│ ├─ JobCategoryMapper.java # 岗位类型Mapper
│ ├─ CompanyMapper.java # 公司Mapper
│ ├─ JobMapper.java # 岗位Mapper
│ ├─ JobRegionRelationMapper.java # 岗位-地区关联Mapper
│ ├─ IndustryMapper.java # 行业Mapper
│ ├─ SkillTagMapper.java # 技能标签Mapper
│ ├─ UserJobFavoriteMapper.java # 用户收藏岗位Mapper
│ ├─ UserJobApplicationMapper.java # 用户投递记录Mapper
│ └─ UserJobDislikeMapper.java # 用户不感兴趣记录Mapper
├─ pojo/
│ ├─ po/ # 持久化实体
│ │ ├─ User.java
@@ -73,7 +83,17 @@ offerpie/back-end
│ │ ├─ FuncPermission.java # 功能权限表(bg_func_permission
│ │ ├─ UserRouteMenuStock.java # 用户路由菜单库存表(bg_user_route_menu_stock
│ │ ├─ UserFuncPermissionStock.java # 用户功能权限库存表(bg_user_func_permission_stock
│ │ ─ UserFuncUsageLog.java # 用户功能使用记录表(bg_user_func_usage_log
│ │ ─ UserFuncUsageLog.java # 用户功能使用记录表(bg_user_func_usage_log
│ │ ├─ ChinaRegionsCode.java # 地区表(bg_china_regions_code
│ │ ├─ JobCategory.java # 岗位类型表(bg_job_category
│ │ ├─ Company.java # 公司表(bg_company
│ │ ├─ Job.java # 岗位表(bg_job
│ │ ├─ JobRegionRelation.java # 岗位-地区关联表(bg_job_region_relation
│ │ ├─ Industry.java # 行业字典表(bg_industry
│ │ ├─ SkillTag.java # 技能标签表(bg_skill_tag
│ │ ├─ UserJobFavorite.java # 用户收藏岗位表(bg_user_job_favorite
│ │ ├─ UserJobApplication.java # 用户投递记录表(bg_user_job_application
│ │ └─ UserJobDislike.java # 用户不感兴趣记录表(bg_user_job_dislike
│ └─ vo/ # ViewObjectOssUrlVo 等)
└─ service/ # 业务 ServiceOssService、SmsService 等)
```
@@ -84,7 +104,7 @@ offerpie/back-end
|------|----------|-----------|
| **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 等 <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` <br> - **MyBatis Mapper**`UserMapper``OssFileMapper``UserInviteMapper``RouteMenuMapper``FuncPermissionMapper``UserRouteMenuStockMapper``UserFuncPermissionStockMapper``UserFuncUsageLogMapper` <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``JobRegion``UserJobFavorite``UserJobApplication` <br> - **MyBatis Mapper**`UserMapper``OssFileMapper``UserInviteMapper``RouteMenuMapper``FuncPermissionMapper``UserRouteMenuStockMapper``UserFuncPermissionStockMapper``UserFuncUsageLogMapper``ChinaRegionsCodeMapper``JobCategoryMapper``CompanyMapper``JobMapper``JobRegionRelationMapper``UserJobFavoriteMapper``UserJobApplicationMapper` <br> - **业务 API**:文件上传/下载、健康检查等 <br> - **业务逻辑**:服务层、工具类等 <br> - **既供 B 端 UI(待实现)使用,也供 C 端业务直接调用** | `controller/`, `mapper/`, `pojo/po/`, `pojo/vo/`, `service/`, `constant/` |
## 3️⃣ 关键业务实体
| 实体 | 所属模块 | 作用概述 |
@@ -100,6 +120,16 @@ offerpie/back-end
| `RouteMenuVo` | client-api | 路由菜单树形VO,包含 children 子菜单列表,供前端渲染动态路由。 |
| `LoginVo` | client-api | 登录成功后返回的用户信息(userId、nick)。 |
| `SmsLoginDto` | client-api | 短信验证码登录的请求参数(mobileNumber、code、inviteCode)。 |
| `ChinaRegionsCode` | manager | 地区表(bg_china_regions_code),行政区划编码,省/市/区三级,code为主键。 |
| `JobCategory` | manager | 岗位类型表(bg_job_category),树形结构,一级/二级分类。 |
| `Company` | manager | 公司表(bg_company),公司基本信息、融资、规模、新闻动态等。 |
| `Job` | manager | 岗位表(bg_job),岗位信息、薪资、标签、技能标签,关联公司和岗位类型。 |
| `JobRegionRelation` | manager | 岗位-地区关联表(bg_job_region_relation),一个岗位可关联多个地区。 |
| `UserJobFavorite` | manager | 用户收藏岗位表(bg_user_job_favorite),用户与岗位唯一约束。 |
| `UserJobApplication` | manager | 用户投递记录表(bg_user_job_application),记录投递状态流转。 |
| `Industry` | manager | 行业字典表(bg_industry),树形结构,一级/二级分类。 |
| `SkillTag` | manager | 技能标签表(bg_skill_tag),挂在岗位类型下,不分级,用于匹配度计算。 |
| `UserJobDislike` | manager | 用户不感兴趣记录表(bg_user_job_dislike),记录用户对岗位的不感兴趣原因,冗余公司ID/地区编码/行业ID方便推荐过滤。 |
## 4️⃣ 权限体系设计
### 整体架构
@@ -0,0 +1,13 @@
package org.jiayunet.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.jiayunet.pojo.po.ChinaRegionsCode;
/**
* 地区Mapper
*
* @author zk
*/
@Mapper
public interface ChinaRegionsCodeMapper extends CommonMapper<ChinaRegionsCode> {
}
@@ -0,0 +1,13 @@
package org.jiayunet.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.jiayunet.pojo.po.Company;
/**
* 公司Mapper
*
* @author zk
*/
@Mapper
public interface CompanyMapper extends CommonMapper<Company> {
}
@@ -0,0 +1,13 @@
package org.jiayunet.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.jiayunet.pojo.po.Industry;
/**
* 行业Mapper
*
* @author zk
*/
@Mapper
public interface IndustryMapper extends CommonMapper<Industry> {
}
@@ -0,0 +1,13 @@
package org.jiayunet.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.jiayunet.pojo.po.JobCategory;
/**
* 岗位类型Mapper
*
* @author zk
*/
@Mapper
public interface JobCategoryMapper extends CommonMapper<JobCategory> {
}
@@ -0,0 +1,13 @@
package org.jiayunet.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.jiayunet.pojo.po.Job;
/**
* 岗位Mapper
*
* @author zk
*/
@Mapper
public interface JobMapper extends CommonMapper<Job> {
}
@@ -0,0 +1,13 @@
package org.jiayunet.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.jiayunet.pojo.po.JobRegionRelation;
/**
* 岗位-地区关联Mapper
*
* @author zk
*/
@Mapper
public interface JobRegionRelationMapper extends CommonMapper<JobRegionRelation> {
}
@@ -0,0 +1,13 @@
package org.jiayunet.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.jiayunet.pojo.po.SkillTag;
/**
* 技能标签Mapper
*
* @author zk
*/
@Mapper
public interface SkillTagMapper extends CommonMapper<SkillTag> {
}
@@ -0,0 +1,13 @@
package org.jiayunet.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.jiayunet.pojo.po.UserJobApplication;
/**
* 用户投递记录Mapper
*
* @author zk
*/
@Mapper
public interface UserJobApplicationMapper extends CommonMapper<UserJobApplication> {
}
@@ -0,0 +1,13 @@
package org.jiayunet.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.jiayunet.pojo.po.UserJobDislike;
/**
* 用户不感兴趣记录Mapper
*
* @author zk
*/
@Mapper
public interface UserJobDislikeMapper extends CommonMapper<UserJobDislike> {
}
@@ -0,0 +1,13 @@
package org.jiayunet.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.jiayunet.pojo.po.UserJobFavorite;
/**
* 用户收藏岗位Mapper
*
* @author zk
*/
@Mapper
public interface UserJobFavoriteMapper extends CommonMapper<UserJobFavorite> {
}
@@ -0,0 +1,29 @@
package org.jiayunet.pojo.po;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
/**
* 地区表(bg_china_regions_code
* <p>行政区划编码,省/市/区三级</p>
*
* @author zk
*/
@Data
@TableName(value = "bg_china_regions_code")
public class ChinaRegionsCode {
/** 行政区划编码(主键) */
@TableId
private String code;
/** 地区名称 */
private String name;
/** 市级编码,省级为null */
private String cityCode;
/** 省级编码,省级为null */
private String provinceCode;
}
@@ -0,0 +1,78 @@
package org.jiayunet.pojo.po;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.time.Instant;
/**
* 公司表(bg_company
*
* @author zk
*/
@Data
@TableName(value = "bg_company")
public class Company {
@TableId(type = IdType.ASSIGN_ID)
private Long id;
/** 公司名 */
private String name;
/** 公司简称 */
private String shortName;
/** logo地址 */
private String logoUrl;
/** 地区编码 */
private String regionCode;
/** 公司类型(上市企业、独角兽、国企等) */
private String companyType;
/** 行业ID */
private Long industryId;
/** 公司标签(JSON数组) */
private String tags;
/** 公司简要 */
private String summary;
/** 公司描述 */
private String description;
/** 成立时间 */
private String foundedYear;
/** 注册地址 */
private String address;
/** 企业规模(人数) */
private String scale;
/** 官网地址 */
private String website;
/** 融资状态 */
private String financingStage;
/** 最新估值 */
private String latestValuation;
/** 新闻动态(JSON数组) */
private String news;
/** 状态 0=待完善 1=已完善 2=禁用 */
private Integer status;
/** 创建时间 */
private Instant createTime;
/** 更新时间 */
private Instant updateTime;
}
@@ -0,0 +1,32 @@
package org.jiayunet.pojo.po;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
/**
* 行业字典表(bg_industry
* <p>树形结构,一级/二级分类</p>
*
* @author zk
*/
@Data
@TableName(value = "bg_industry")
public class Industry {
@TableId(type = IdType.ASSIGN_ID)
private Long id;
/** 行业名称 */
private String name;
/** 根节点ID,顶级=自身ID */
private Long rootId;
/** 父级ID0=顶级 */
private Long parentId;
/** 层级 1=一级 2=二级 */
private Integer level;
}
@@ -0,0 +1,75 @@
package org.jiayunet.pojo.po;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.time.Instant;
/**
* 岗位表(bg_job
*
* @author zk
*/
@Data
@TableName(value = "bg_job")
public class Job {
@TableId(type = IdType.ASSIGN_ID)
private Long id;
/** 岗位名称 */
private String title;
/** 关联公司ID */
private Long companyId;
/** 岗位类型ID */
private Long categoryId;
/** 0=全职 1=兼职 */
private Integer employmentType;
/** 岗位职责 */
private String description;
/** 任职要求 */
private String requirement;
/** 加分项 */
private String bonus;
/** 岗位标签(JSON数组) */
private String tags;
/** 技能标签(JSON数组) */
private String skillTags;
/** 薪资描述,如15-25K·13薪、面议 */
private String salary;
/** 学历要求 0=不限 1=大专 2=本科 3=硕士 4=博士 */
private Integer education;
/** 最低工作年限,0=不要求 */
private Integer minExperience;
/** 行业经验,关联bg_industry */
private Long industryId;
/** 来源链接 */
private String sourceUrl;
/** 爬虫原始数据ID,用于去重 */
private String sourceId;
/** 状态 0=上架 1=下架 2=已失效 */
private Integer status;
/** 创建时间 */
private Instant createTime;
/** 更新时间 */
private Instant updateTime;
}
@@ -0,0 +1,32 @@
package org.jiayunet.pojo.po;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
/**
* 岗位类型表(bg_job_category
* <p>树形结构,一级/二级分类</p>
*
* @author zk
*/
@Data
@TableName(value = "bg_job_category")
public class JobCategory {
@TableId(type = IdType.ASSIGN_ID)
private Long id;
/** 类型名称 */
private String name;
/** 根节点ID,顶级=自身ID */
private Long rootId;
/** 父级ID0=顶级 */
private Long parentId;
/** 层级 1=一级 2=二级 */
private Integer level;
}
@@ -0,0 +1,30 @@
package org.jiayunet.pojo.po;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.time.Instant;
/**
* 岗位-地区关联表(bg_job_region_relation
*
* @author zk
*/
@Data
@TableName(value = "bg_job_region_relation")
public class JobRegionRelation {
@TableId(type = IdType.ASSIGN_ID)
private Long id;
/** 岗位ID */
private Long jobId;
/** 地区编码 */
private String regionCode;
/** 创建时间 */
private Instant createTime;
}
@@ -0,0 +1,26 @@
package org.jiayunet.pojo.po;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
/**
* 技能标签表(bg_skill_tag
* <p>挂在岗位类型下,不分级</p>
*
* @author zk
*/
@Data
@TableName(value = "bg_skill_tag")
public class SkillTag {
@TableId(type = IdType.ASSIGN_ID)
private Long id;
/** 标签名称 */
private String name;
/** 所属岗位类型ID */
private Long categoryId;
}
@@ -0,0 +1,39 @@
package org.jiayunet.pojo.po;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.time.Instant;
/**
* 用户投递记录表(bg_user_job_application
*
* @author zk
*/
@Data
@TableName(value = "bg_user_job_application")
public class UserJobApplication {
@TableId(type = IdType.ASSIGN_ID)
private Long id;
/** 用户ID */
private Long userId;
/** 岗位ID */
private Long jobId;
/** 投递状态 0=已投递 1=面试中 2=有Offer 3=未通过 4=已结束 */
private Integer status;
/** 投递时间 */
private Instant applyTime;
/** 创建时间 */
private Instant createTime;
/** 更新时间 */
private Instant updateTime;
}
@@ -0,0 +1,42 @@
package org.jiayunet.pojo.po;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.time.Instant;
/**
* 用户不感兴趣记录表(bg_user_job_dislike
*
* @author zk
*/
@Data
@TableName(value = "bg_user_job_dislike")
public class UserJobDislike {
@TableId(type = IdType.ASSIGN_ID)
private Long id;
/** 用户ID */
private Long userId;
/** 岗位ID */
private Long jobId;
/** 公司ID(冗余,方便按公司过滤) */
private Long companyId;
/** 地区编码(冗余,方便按地区过滤) */
private String regionCode;
/** 行业ID(冗余,方便按行业过滤) */
private Long industryId;
/** 原因 0=对公司不感兴趣 1=对岗位不感兴趣 2=对行业不感兴趣 3=技能不符合 4=地点不合适 5=其他 */
private Integer reason;
/** 创建时间 */
private Instant createTime;
}
@@ -0,0 +1,30 @@
package org.jiayunet.pojo.po;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.time.Instant;
/**
* 用户收藏岗位表(bg_user_job_favorite
*
* @author zk
*/
@Data
@TableName(value = "bg_user_job_favorite")
public class UserJobFavorite {
@TableId(type = IdType.ASSIGN_ID)
private Long id;
/** 用户ID */
private Long userId;
/** 岗位ID */
private Long jobId;
/** 创建时间 */
private Instant createTime;
}