岗位列表接口
This commit is contained in:
@@ -120,7 +120,7 @@ UPDATE app_job_data SET clean_status=0 WHERE clean_status=1 AND updated_at < NOW
|
||||
"minExperience": 3,
|
||||
"employmentType": 0,
|
||||
"categoryId": 12,
|
||||
"industryId": 5,
|
||||
"requiredIndustryId": 5,
|
||||
"description": "1. 负责核心业务系统开发...",
|
||||
"requirement": "1. 本科及以上学历...",
|
||||
"bonus": "1. 有分布式系统经验优先...",
|
||||
@@ -142,7 +142,7 @@ UPDATE app_job_data SET clean_status=0 WHERE clean_status=1 AND updated_at < NOW
|
||||
| minExperience | experience + description | 提取最低年限数值,不要求则为0 |
|
||||
| employmentType | description | 判断 0=全职 1=兼职,默认0 |
|
||||
| categoryId | description + job_title | 必选,从分类列表中选最接近的,不允许返回null |
|
||||
| industryId | description(任职要求部分) | 仅当明确提到行业经验要求时设置;列表中无完全匹配则选最相似的;未提到则null |
|
||||
| requiredIndustryId | description(任职要求部分) | 仅当明确提到行业经验要求时设置;列表中无完全匹配则选最相似的;未提到则null |
|
||||
| description | description + experience + education | 提取"岗位职责"部分,保持原文风格,格式化展示 |
|
||||
| requirement | description + experience + education | 提取"任职要求"部分,保持原文风格,格式化展示 |
|
||||
| bonus | description + experience + education | 提取"加分项"部分,无则空 |
|
||||
@@ -205,7 +205,7 @@ CREATE TABLE bg_job_skill_tag_relation (
|
||||
| 分类/行业列表怎么给AI | 直接传 id:name 文本 | ID人工维护为短数字,token消耗可控 |
|
||||
| 地区匹配方式 | AI输出城市名,Java侧匹配 | 城市名无歧义,不需要传参考列表 |
|
||||
| categoryId 是否可空 | 不可空,必须选一个 | 岗位分类是核心维度 |
|
||||
| industryId 何时设置 | 仅描述中明确提到行业经验时 | 行业经验是任职要求,不是所有岗位都有 |
|
||||
| requiredIndustryId 何时设置 | 仅描述中明确提到行业经验要求时 | 行业经验是任职要求,不是所有岗位都有 |
|
||||
| tags 定位 | 核心职能标签,最多5个 | 区别于福利标签,体现岗位核心能力要求 |
|
||||
| skillTags 数量 | 最多8个 | 控制数量,保持精炼 |
|
||||
| source_id 取值 | app_job_data.id | 简单直接,用于去重 |
|
||||
|
||||
@@ -23,7 +23,8 @@ offerpie/back-end
|
||||
│ │ ├─ LoginController.java # 登录相关接口(发送验证码、短信登录)
|
||||
│ │ ├─ RouteMenuController.java # 路由菜单接口(获取用户有效菜单树)
|
||||
│ │ ├─ UserProfileController.java # 用户个人资料接口(主表+5张子表的查询与保存)
|
||||
│ │ └─ JobIntentionController.java # 求职意向接口(查询与保存)
|
||||
│ │ ├─ JobIntentionController.java # 求职意向接口(查询与保存)
|
||||
│ │ └─ JobController.java # 岗位接口(岗位列表查询)
|
||||
│ ├─ service/
|
||||
│ │ ├─ LoginService.java # 登录业务逻辑(验证码校验、自动注册、JWT生成、Cookie设置)
|
||||
│ │ ├─ UserRegisterService.java # 用户注册服务(注册逻辑、邀请码生成与绑定)
|
||||
@@ -31,15 +32,16 @@ offerpie/back-end
|
||||
│ │ ├─ RouteMenuService.java # 路由菜单服务(查询、添加库存、获取用户菜单树)
|
||||
│ │ ├─ UserProfileService.java # 用户个人资料服务(主表+5张子表的CRUD)
|
||||
│ │ ├─ JobIntentionService.java # 求职意向服务(查询与保存/更新)
|
||||
│ │ ├─ JobService.java # 岗位服务(岗位列表查询、匹配度计算编排)
|
||||
│ │ └─ WxPayNotifyMessageAbstractImpl.java # 微信支付回调实现
|
||||
│ └─ pojo/
|
||||
│ ├─ param/
|
||||
│ │ ├─ userProfile/ # 个人资料入参(UserProfileParam、各子表Param)
|
||||
│ │ └─ job/ # 岗位相关入参(JobIntentionParam)
|
||||
│ │ └─ job/ # 岗位相关入参(JobIntentionParam、JobQueryParam)
|
||||
│ ├─ dto/
|
||||
│ │ ├─ SmsLoginDto.java # 短信登录入参(mobileNumber + code + inviteCode)
|
||||
│ │ ├─ userProfile/ # 个人资料出参(UserProfileDto、各子表Dto)
|
||||
│ │ └─ job/ # 岗位相关出参(JobIntentionDto)
|
||||
│ │ └─ job/ # 岗位相关出参(JobIntentionDto、JobDto、JobMatchScoreDto)
|
||||
│ └─ vo/
|
||||
│ ├─ LoginVo.java # 登录返回(userId + nick)
|
||||
│ └─ RouteMenuVo.java # 路由菜单树形VO(含children子菜单)
|
||||
@@ -127,8 +129,10 @@ offerpie/back-end
|
||||
│ │ ├─ UserProfileCompetition.java # 用户竞赛经历表(bg_user_profile_competition)
|
||||
│ │ ├─ UserProfileSkillTagRelation.java # 用户技能标签关联表(bg_user_profile_skill_tag_relation)
|
||||
│ │ └─ AppJobData.java # 爬虫岗位原始数据表(app_job_data)
|
||||
│ └─ vo/ # ViewObject(OssUrlVo、DescriptionParagraph 等)
|
||||
└─ service/ # 业务 Service(OssService、SmsService、DictCacheService、JobCleanService、JobCleanTransactionService、CompanyCleanService、CompanyCleanTransactionService、UserSkillTagMatchService 等)
|
||||
│ └─ vo/ # ViewObject(OssUrlVo、DescriptionParagraph、JobListItemVo 等)
|
||||
├─ resources/mapper/ # MyBatis XML 映射文件
|
||||
│ └─ JobMapper.xml # 岗位自定义SQL(selectJobPage)
|
||||
└─ service/ # 业务 Service(OssService、SmsService、DictCacheService、JobCleanService、JobCleanTransactionService、CompanyCleanService、CompanyCleanTransactionService、UserSkillTagMatchService、JobMatchService 等)
|
||||
```
|
||||
> **设计理念** – 业务实体和 Mapper 位于 `manager`,B 端和 C 端共享;C 端特有的注解、切面、权限服务、路由菜单服务位于 `client-api`,避免 B 端误用;`common` 提供统一的技术支撑。
|
||||
|
||||
@@ -233,6 +237,59 @@ offerpie/back-end
|
||||
- 权限体系分两层:前端路由控制菜单可见性,后端切面控制功能点权限与库存扣减。
|
||||
- 权限和菜单作为商品维度,框架只负责校验和库存管理,不关心权限来源。
|
||||
|
||||
## 4.7️⃣ 岗位列表与匹配度计算设计
|
||||
### 整体架构
|
||||
- **触发时机**:用户访问岗位列表接口(支持筛选条件:地区/岗位类型/行业/工作类型)
|
||||
- **核心流程**:扩展层级筛选 → 查询不感兴趣记录 → 扩展排除列表 → SQL分页查询 → 查询收藏状态 → 批量计算匹配度 → 组装返回
|
||||
- **匹配度计算**:行业30% + 技能40% + 经验20%,在Java层批量计算(避免SQL性能问题)
|
||||
|
||||
### 数据库表(使用)
|
||||
| 表名 | 用途 |
|
||||
|------|------|
|
||||
| `bg_job` | 岗位主表(查询岗位列表) |
|
||||
| `bg_company` | 公司表(关联查询公司信息) |
|
||||
| `bg_china_regions_code` | 地区表(关联查询地区名称、扩展子级) |
|
||||
| `bg_job_category` | 岗位类型表(关联查询类型名称、扩展子级) |
|
||||
| `bg_industry` | 行业表(扩展子级、判断父级匹配) |
|
||||
| `bg_user_job_dislike` | 不感兴趣记录(排除岗位/公司/地区/行业) |
|
||||
| `bg_user_job_favorite` | 收藏记录(查询收藏状态) |
|
||||
| `bg_user_profile` | 用户简历(匹配度计算) |
|
||||
| `bg_job_skill_tag_relation` | 岗位技能标签(技能匹配) |
|
||||
| `bg_user_profile_skill_tag_relation` | 用户技能标签(技能匹配) |
|
||||
|
||||
### 匹配度计算规则
|
||||
#### 行业匹配(30分)
|
||||
- 岗位无要求(required_industry_id=null)→ 30分
|
||||
- 用户无简历(profile不存在或experienceIndustryIds为空)→ 0分
|
||||
- 完全匹配(用户行业包含岗位行业)→ 30分
|
||||
- 父级匹配(用户行业与岗位行业有相同父级)→ 22分
|
||||
- 不匹配 → 0分
|
||||
|
||||
#### 技能匹配(40分)
|
||||
- 岗位无要求(无技能标签关联)→ 40分
|
||||
- 用户无技能(无技能标签关联)→ 0分
|
||||
- 匹配公式:`(匹配数量 / 岗位要求数量) * 40`
|
||||
|
||||
#### 经验匹配(20分)
|
||||
- 岗位无要求(min_experience=0)→ 20分
|
||||
- 用户无简历(profile不存在或workYears=null)→ 0分
|
||||
- 计算公式:`min((workYears - minExp) / minExp * 0.8 + 0.2, 1.0) * 20`
|
||||
|
||||
### 排除逻辑
|
||||
- **排除岗位**:直接排除 `jobId`
|
||||
- **排除公司**:直接排除 `companyId`
|
||||
- **排除地区**:排除 `regionCode` + 其所有子级地区
|
||||
- **排除行业**:排除 `requiredIndustryId` + 其所有子级行业
|
||||
|
||||
### 核心服务
|
||||
- **JobService**(client-api):岗位列表查询主流程编排
|
||||
- **JobMatchService**(manager):批量计算匹配度(行业/技能/经验三个维度)
|
||||
|
||||
### 接口定义
|
||||
- **路径**:`POST /job/list`
|
||||
- **入参**:`JobQueryParam`(分页 + 地区/岗位类型/行业/工作类型筛选)
|
||||
- **出参**:`PageResult<JobDto>`(岗位列表 + 匹配度 + 收藏状态)
|
||||
|
||||
## 4.5️⃣ 用户技能标签匹配设计
|
||||
### 整体架构
|
||||
- **触发时机**:用户保存个人资料(主表或任意子表)后异步触发
|
||||
|
||||
Reference in New Issue
Block a user