Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
张文彪
/
employmentBusinessPc
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
ce8faa9b
authored
Dec 08, 2025
by
zwb
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
新增岗位智推列表查询
parent
cef9c004
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
185 additions
and
1 deletions
employmentBusiness-pc-modules/employmentBusiness-pc-system/src/main/java/com/bkty/system/controller/JobRecommendController.java
employmentBusiness-pc-modules/employmentBusiness-pc-system/src/main/java/com/bkty/system/domain/dto/PositionQueryDto.java
employmentBusiness-pc-modules/employmentBusiness-pc-system/src/main/java/com/bkty/system/domain/entity/AiPositionRecommendRecord.java
employmentBusiness-pc-modules/employmentBusiness-pc-system/src/main/java/com/bkty/system/domain/vo/PositionRecommendListVo.java
employmentBusiness-pc-modules/employmentBusiness-pc-system/src/main/java/com/bkty/system/mapper/PositionRecommendMapper.java
employmentBusiness-pc-modules/employmentBusiness-pc-system/src/main/java/com/bkty/system/service/jobRecommend/JobRecommendService.java
employmentBusiness-pc-modules/employmentBusiness-pc-system/src/main/java/com/bkty/system/service/jobRecommend/impl/JobRecommendServiceImpl.java
employmentBusiness-pc-modules/employmentBusiness-pc-system/src/main/java/com/bkty/system/service/jobRecommend/impl/RecommendPositionServiceImpl.java
employmentBusiness-pc-modules/employmentBusiness-pc-system/src/main/resources/mapper/system/PositionRecommendMapper.xml
employmentBusiness-pc-modules/employmentBusiness-pc-system/src/main/java/com/bkty/system/controller/JobRecommendController.java
View file @
ce8faa9b
...
@@ -2,7 +2,11 @@ package com.bkty.system.controller;
...
@@ -2,7 +2,11 @@ package com.bkty.system.controller;
import
cn.hutool.core.collection.CollectionUtil
;
import
cn.hutool.core.collection.CollectionUtil
;
import
cn.hutool.core.util.ObjectUtil
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.bkty.system.domain.dto.AnalysisCareerDto
;
import
com.bkty.system.domain.dto.AnalysisCareerDto
;
import
com.bkty.system.domain.dto.PositionQueryDto
;
import
com.bkty.system.domain.vo.AiPositionRecommendRecordVo
;
import
com.bkty.system.domain.vo.PositionRecommendListVo
;
import
com.bkty.system.init.*
;
import
com.bkty.system.init.*
;
import
com.bkty.system.service.jobRecommend.AiAnalysisService
;
import
com.bkty.system.service.jobRecommend.AiAnalysisService
;
import
com.bkty.system.service.jobRecommend.JobRecommendService
;
import
com.bkty.system.service.jobRecommend.JobRecommendService
;
...
@@ -99,4 +103,16 @@ public class JobRecommendController {
...
@@ -99,4 +103,16 @@ public class JobRecommendController {
jobRecommendService
.
recommendPosition
(
analysisId
,
userId
,
resumeId
);
jobRecommendService
.
recommendPosition
(
analysisId
,
userId
,
resumeId
);
return
R
.
ok
();
return
R
.
ok
();
}
}
/**
* 查询推荐岗位列表
*
* @param dto
* @return
*/
@PostMapping
(
"/query-position-list"
)
public
R
<
List
<
PositionRecommendListVo
>>
queryPositionList
(
@RequestBody
PositionQueryDto
dto
)
{
List
<
PositionRecommendListVo
>
aiPositionRecommendRecordVoList
=
jobRecommendService
.
queryPositionList
(
dto
);
return
new
R
<>(
aiPositionRecommendRecordVoList
);
}
}
}
employmentBusiness-pc-modules/employmentBusiness-pc-system/src/main/java/com/bkty/system/domain/dto/PositionQueryDto.java
0 → 100644
View file @
ce8faa9b
package
com
.
bkty
.
system
.
domain
.
dto
;
import
lombok.Data
;
import
java.util.List
;
/**
* @author Zhang Wenbiao
* @description 岗位查询dto
* @datetime 2025/12/8 9:49
*/
@Data
public
class
PositionQueryDto
{
private
Long
userId
;
private
int
minSalary
;
private
int
maxSalary
;
private
List
<
String
>
cityCodes
;
}
employmentBusiness-pc-modules/employmentBusiness-pc-system/src/main/java/com/bkty/system/domain/entity/AiPositionRecommendRecord.java
View file @
ce8faa9b
...
@@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.annotation.TableId;
...
@@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.annotation.TableId;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
lombok.Data
;
import
lombok.Data
;
import
org.dromara.common.mybatis.core.domain.BaseEntity
;
import
org.dromara.common.mybatis.core.domain.BaseEntity
;
import
org.springframework.data.elasticsearch.annotations.Field
;
import
org.springframework.data.elasticsearch.annotations.FieldType
;
import
java.util.Date
;
import
java.util.Date
;
...
@@ -75,6 +77,8 @@ public class AiPositionRecommendRecord extends BaseEntity {
...
@@ -75,6 +77,8 @@ public class AiPositionRecommendRecord extends BaseEntity {
private
Integer
maxPay
;
private
Integer
maxPay
;
private
Integer
minPay
;
private
String
companyName
;
private
String
companyName
;
private
Integer
positionScore
;
private
Integer
positionScore
;
...
@@ -106,4 +110,7 @@ public class AiPositionRecommendRecord extends BaseEntity {
...
@@ -106,4 +110,7 @@ public class AiPositionRecommendRecord extends BaseEntity {
// 分析id
// 分析id
private
Long
analysisId
;
private
Long
analysisId
;
//薪资范围
private
String
salaryRange
;
}
}
\ No newline at end of file
employmentBusiness-pc-modules/employmentBusiness-pc-system/src/main/java/com/bkty/system/domain/vo/PositionRecommendListVo.java
0 → 100644
View file @
ce8faa9b
package
com
.
bkty
.
system
.
domain
.
vo
;
import
lombok.Data
;
/**
* @author Zhang Wenbiao
* @description 岗位智推列表返回类
* @datetime 2025/12/8 11:45
*/
@Data
public
class
PositionRecommendListVo
{
/**
* 岗位id
*/
private
Long
positionId
;
/**
* 岗位名称
*/
private
String
jobTitle
;
/**
* 分析详情
*/
private
String
rDetails
;
/**
* 薪酬范围
*/
private
String
salaryRange
;
/**
* 公司名称
*/
private
String
companyName
;
/**
* 城市编码
*/
private
String
cityCode
;
/**
* 城市名称
*/
private
String
cityName
;
/**
* 匹配度
*/
private
int
rScore
;
}
employmentBusiness-pc-modules/employmentBusiness-pc-system/src/main/java/com/bkty/system/mapper/PositionRecommendMapper.java
View file @
ce8faa9b
package
com
.
bkty
.
system
.
mapper
;
package
com
.
bkty
.
system
.
mapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.bkty.system.domain.dto.PositionQueryDto
;
import
com.bkty.system.domain.entity.AiPositionRecommendRecord
;
import
com.bkty.system.domain.entity.AiPositionRecommendRecord
;
import
com.bkty.system.domain.vo.AiPositionRecommendRecordVo
;
import
com.bkty.system.domain.vo.AiPositionRecommendRecordVo
;
import
com.bkty.system.domain.vo.PositionRecommendListVo
;
import
org.apache.ibatis.annotations.Mapper
;
import
org.apache.ibatis.annotations.Mapper
;
import
org.apache.ibatis.annotations.Param
;
import
org.apache.ibatis.annotations.Param
;
import
org.apache.ibatis.annotations.Select
;
import
org.apache.ibatis.annotations.Select
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.List
;
/**
/**
...
@@ -31,4 +34,15 @@ public interface PositionRecommendMapper extends BaseMapper<AiPositionRecommendR
...
@@ -31,4 +34,15 @@ public interface PositionRecommendMapper extends BaseMapper<AiPositionRecommendR
@Param
(
"sortField"
)
String
sortField
,
@Param
(
"sortField"
)
String
sortField
,
@Param
(
"sortType"
)
String
sortType
,
@Param
(
"sortType"
)
String
sortType
,
@Param
(
"deliverType"
)
Integer
deliverType
);
@Param
(
"deliverType"
)
Integer
deliverType
);
/**
* 根据用户ID获取最后一次推荐时间
*
* @param userId 用户ID
* @return 最后一次推荐时间
*/
@Select
(
"SELECT MAX(recommend_time) FROM ai_position_recommend_record WHERE user_id = #{userId}"
)
Date
getLastRecommendTime
(
@Param
(
"userId"
)
Long
userId
);
List
<
PositionRecommendListVo
>
queryPositionList
(
@Param
(
"dto"
)
PositionQueryDto
dto
);
}
}
employmentBusiness-pc-modules/employmentBusiness-pc-system/src/main/java/com/bkty/system/service/jobRecommend/JobRecommendService.java
View file @
ce8faa9b
package
com
.
bkty
.
system
.
service
.
jobRecommend
;
package
com
.
bkty
.
system
.
service
.
jobRecommend
;
import
com.bkty.system.domain.dto.PositionQueryDto
;
import
com.bkty.system.domain.vo.AiPositionRecommendRecordVo
;
import
com.bkty.system.domain.vo.PositionRecommendListVo
;
import
com.bkty.system.init.Level1Group
;
import
com.bkty.system.init.Level1Group
;
import
java.util.List
;
import
java.util.List
;
...
@@ -22,4 +25,11 @@ public interface JobRecommendService {
...
@@ -22,4 +25,11 @@ public interface JobRecommendService {
* @param resumeId
* @param resumeId
*/
*/
void
recommendPosition
(
Long
analysisId
,
Long
userId
,
Long
resumeId
);
void
recommendPosition
(
Long
analysisId
,
Long
userId
,
Long
resumeId
);
/**
* 查询岗位智推列表数据
* @param dto
* @return
*/
List
<
PositionRecommendListVo
>
queryPositionList
(
PositionQueryDto
dto
);
}
}
employmentBusiness-pc-modules/employmentBusiness-pc-system/src/main/java/com/bkty/system/service/jobRecommend/impl/JobRecommendServiceImpl.java
View file @
ce8faa9b
package
com
.
bkty
.
system
.
service
.
jobRecommend
.
impl
;
package
com
.
bkty
.
system
.
service
.
jobRecommend
.
impl
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.alibaba.fastjson2.JSON
;
import
com.alibaba.fastjson2.TypeReference
;
import
com.alibaba.nacos.common.utils.StringUtils
;
import
com.bkty.system.domain.dto.PositionQueryDto
;
import
com.bkty.system.domain.entity.AiRecommendBase
;
import
com.bkty.system.domain.entity.AiRecommendBase
;
import
com.bkty.system.domain.vo.AiPositionRecommendRecordVo
;
import
com.bkty.system.domain.vo.PositionRecommendListVo
;
import
com.bkty.system.init.CategoryCacheManager
;
import
com.bkty.system.init.CategoryCacheManager
;
import
com.bkty.system.init.Level1Group
;
import
com.bkty.system.init.Level1Group
;
import
com.bkty.system.init.Level2Group
;
import
com.bkty.system.init.Level2Group
;
import
com.bkty.system.init.Level3Group
;
import
com.bkty.system.init.Level3Group
;
import
com.bkty.system.mapper.AiAnalysisMapper
;
import
com.bkty.system.mapper.AiAnalysisMapper
;
import
com.bkty.system.mapper.PositionRecommendMapper
;
import
com.bkty.system.service.jobRecommend.AiAnalysisService
;
import
com.bkty.system.service.jobRecommend.AiAnalysisService
;
import
com.bkty.system.service.jobRecommend.JobRecommendService
;
import
com.bkty.system.service.jobRecommend.JobRecommendService
;
import
com.bkty.system.service.jobRecommend.RecommendPositionService
;
import
com.bkty.system.service.jobRecommend.RecommendPositionService
;
...
@@ -18,10 +26,13 @@ import org.dromara.common.core.utils.SecurityUtils;
...
@@ -18,10 +26,13 @@ import org.dromara.common.core.utils.SecurityUtils;
import
org.dromara.common.satoken.utils.LoginHelper
;
import
org.dromara.common.satoken.utils.LoginHelper
;
import
org.jetbrains.annotations.NotNull
;
import
org.jetbrains.annotations.NotNull
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Objects
;
import
java.util.concurrent.TimeUnit
;
/**
/**
* @author Zhang Wenbiao
* @author Zhang Wenbiao
...
@@ -41,6 +52,10 @@ public class JobRecommendServiceImpl implements JobRecommendService {
...
@@ -41,6 +52,10 @@ public class JobRecommendServiceImpl implements JobRecommendService {
private
final
RecommendPositionService
recommendPositionService
;
private
final
RecommendPositionService
recommendPositionService
;
private
final
PositionRecommendMapper
positionRecommendMapper
;
private
final
RedisTemplate
<
String
,
String
>
redisTemplate
;
@Override
@Override
public
List
<
Level1Group
>
getLevel1Groups
(
String
level1
)
{
public
List
<
Level1Group
>
getLevel1Groups
(
String
level1
)
{
...
@@ -109,4 +124,24 @@ public class JobRecommendServiceImpl implements JobRecommendService {
...
@@ -109,4 +124,24 @@ public class JobRecommendServiceImpl implements JobRecommendService {
}
}
}).
start
();
}).
start
();
}
}
private
static
final
String
RECOMMEND_LIST
=
"recommend:list:%s"
;
@Override
public
List
<
PositionRecommendListVo
>
queryPositionList
(
PositionQueryDto
dto
)
{
Long
userId
=
Objects
.
requireNonNull
(
LoginHelper
.
getLoginUser
()).
getUserId
();
// String redisKey = String.format(RECOMMEND_LIST, userId);
dto
.
setUserId
(
userId
);
// if (ObjectUtil.isEmpty(dto.getMaxSalary())&&ObjectUtil.isEmpty(dto.getMinSalary())&&CollectionUtils.isEmpty(dto.getCityCodes())) {
// // 1. 先尝试从Redis获取
// String result = redisTemplate.opsForValue().get(redisKey);
// if (StringUtils.isNotBlank(result)) {
// // 使用TypeReference来处理泛型类型
// return JSON.parseObject(result, new TypeReference<List<PositionRecommendListVo>>() {
// });
// }
// }
List
<
PositionRecommendListVo
>
recommendList
=
positionRecommendMapper
.
queryPositionList
(
dto
);
return
recommendList
;
}
}
}
employmentBusiness-pc-modules/employmentBusiness-pc-system/src/main/java/com/bkty/system/service/jobRecommend/impl/RecommendPositionServiceImpl.java
View file @
ce8faa9b
...
@@ -291,10 +291,12 @@ public class RecommendPositionServiceImpl implements RecommendPositionService {
...
@@ -291,10 +291,12 @@ public class RecommendPositionServiceImpl implements RecommendPositionService {
recommendRecord
.
setPublicPlatform
(
portraitVo
.
getPublicPlatform
());
recommendRecord
.
setPublicPlatform
(
portraitVo
.
getPublicPlatform
());
recommendRecord
.
setCompanyName
(
portraitVo
.
getCompanyName
());
recommendRecord
.
setCompanyName
(
portraitVo
.
getCompanyName
());
recommendRecord
.
setJdMd
(
portraitVo
.
getJdMd
());
recommendRecord
.
setJdMd
(
portraitVo
.
getJdMd
());
recommendRecord
.
setMaxPay
(
portraitVo
.
getPay
());
recommendRecord
.
setMaxPay
(
Integer
.
valueOf
(
portraitVo
.
getSalaryRange
().
split
(
"-"
)[
1
]));
recommendRecord
.
setMinPay
(
Integer
.
valueOf
(
portraitVo
.
getSalaryRange
().
split
(
"-"
)[
0
]));
recommendRecord
.
setCreateTime
(
date
);
recommendRecord
.
setCreateTime
(
date
);
recommendRecord
.
setUpdateTime
(
date
);
recommendRecord
.
setUpdateTime
(
date
);
recommendRecord
.
setAnalysisId
(
analysisId
);
recommendRecord
.
setAnalysisId
(
analysisId
);
recommendRecord
.
setSalaryRange
(
portraitVo
.
getSalaryRange
());
return
recommendRecord
;
return
recommendRecord
;
}
}
...
...
employmentBusiness-pc-modules/employmentBusiness-pc-system/src/main/resources/mapper/system/PositionRecommendMapper.xml
View file @
ce8faa9b
...
@@ -56,4 +56,35 @@
...
@@ -56,4 +56,35 @@
</if>
</if>
</select>
</select>
<select
id=
"queryPositionList"
resultType=
"com.bkty.system.domain.vo.PositionRecommendListVo"
>
SELECT a.position_id,a.job_title,a.r_details,a.salary_range,a.company_name,a.city_code,a.r_score,c.city_name
FROM ai_position_recommend_record a
INNER JOIN city_data c
ON c.city_code = a.city_code
WHERE is_deleted = 0
AND user_id = #{dto.userId}
AND recommend_time = (
SELECT MAX(recommend_time)
FROM ai_position_recommend_record
WHERE user_id = #{dto.userId}
AND is_deleted = 0
)
<!-- 薪资过滤:查询薪资最小值小于薪资最小值字段,或查询薪资最大值大于薪资最大值字段 -->
<if
test=
"dto.minSalary != null and dto.minSalary != '' and dto.maxSalary != null and dto.maxSalary != ''"
>
AND (
#{dto.minSalary}
<![CDATA[ <= ]]>
min_pay
AND #{dto.maxSalary}
<![CDATA[ >= ]]>
min_pay
OR #{dto.maxSalary}
<![CDATA[ >= ]]>
max_pay
AND #{dto.minSalary}
<![CDATA[ <= ]]>
max_pay
)
</if>
<!-- 城市筛选:支持多个城市 -->
<if
test=
"dto.cityCodes != null and dto.cityCodes.size() > 0"
>
AND a.city_code IN
<foreach
collection=
"dto.cityCodes"
item=
"cityCode"
open=
"("
separator=
","
close=
")"
>
#{cityCode}
</foreach>
</if>
ORDER BY position_score DESC
</select>
</mapper>
</mapper>
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment