Commit 1e220855 by zwb

新增查询历史分析数据,修改岗位详情数据查询

parent 7df4e9b1
......@@ -54,7 +54,7 @@
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
<version>2.7.2</version>
<version>3.1.4</version>
</dependency>
</dependencies>
......
......@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
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.AnalysisListVo;
import com.bkty.system.domain.vo.PositionRecommendListVo;
import com.bkty.system.init.*;
import com.bkty.system.service.jobRecommend.AiAnalysisService;
......@@ -125,4 +126,15 @@ public class JobRecommendController {
AiPositionRecommendRecordVo aiPositionRecommendRecordVo = jobRecommendService.queryPositionDetail(dto);
return new R<>(aiPositionRecommendRecordVo);
}
/**
* 查询历史分析数据
* @param dateTime
* @return
*/
@GetMapping("/query-analysis-list")
public R<List<AnalysisListVo>> queryAnalysisList(@RequestParam(value = "dateTime") String dateTime) {
List<AnalysisListVo> analysisListVos = jobRecommendService.queryAnalysisList(dateTime);
return new R<>(analysisListVos);
}
}
package com.bkty.system.domain.vo;
import lombok.Data;
import java.util.List;
/**
* @author Zhang Wenbiao
* @description 岗位分析条件列表返回vo
* @datetime 2025/12/9 14:07
*/
@Data
public class AnalysisListVo {
/**
* 用户Id
*/
private String userId;
/**
* 分析条件id
*/
private String analysisId;
/**
* 目标岗位
*/
private String career;
private List<String> careerList;
/**
* 目标城市
*/
private String targetCity;
private List<String> targetCityList;
/**
* 期望薪资
*/
private String pay;
/**
* 简历id
*/
private String resumeId;
/**
* 简历名称
*/
private String resumeName;
/**
* 日期
*/
private String dateTime;
}
......@@ -2,9 +2,12 @@ package com.bkty.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.bkty.system.domain.entity.AiRecommendBase;
import com.bkty.system.domain.vo.AnalysisListVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface AiAnalysisMapper extends BaseMapper<AiRecommendBase> {
......@@ -12,4 +15,6 @@ public interface AiAnalysisMapper extends BaseMapper<AiRecommendBase> {
@Param("rType") Integer rType,
@Param("userId") Long userId,
@Param("authRecommend") Integer authRecommend);
List<AnalysisListVo> selectAnalysisList(@Param("userId") Long userId,@Param("dateTime") String dateTime);
}
......@@ -47,4 +47,6 @@ public interface PositionRecommendMapper extends BaseMapper<AiPositionRecommendR
List<PositionRecommendListVo> queryPositionList(@Param("dto") PositionQueryDto dto);
AiPositionRecommendRecordVo selectPositionById(@Param("positionId") Long positionId);
String selectPositionRDetails(@Param("positionId") Long positionId,@Param("userId") Long userId);
}
......@@ -2,6 +2,7 @@ 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.AnalysisListVo;
import com.bkty.system.domain.vo.PositionRecommendListVo;
import com.bkty.system.init.Level1Group;
......@@ -39,4 +40,11 @@ public interface JobRecommendService {
* @return
*/
AiPositionRecommendRecordVo queryPositionDetail(PositionQueryDto dto);
/**
* 查询历史分析数据
* @param dateTime
* @return
*/
List<AnalysisListVo> queryAnalysisList(String dateTime);
}
package com.bkty.system.service.jobRecommend.impl;
import com.bkty.system.domain.vo.AnalysisListVo;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.collect.Lists;
import java.util.Date;
import com.bkty.system.domain.entity.FunctionPositionPortraitV2;
import com.google.common.collect.Maps;
......@@ -83,7 +88,7 @@ public class JobRecommendServiceImpl implements JobRecommendService {
List<Level1Group> positionCache = categoryCacheManager.getPositionCache();
List<Level1Group> result = new ArrayList<>();
for (Level1Group level1Group : positionCache) {
if (level1Group.getName().toLowerCase().contains(level1.toLowerCase())){
if (level1Group.getName().toLowerCase().contains(level1.toLowerCase())) {
result.add(level1Group);
continue;
}
......@@ -91,17 +96,17 @@ public class JobRecommendServiceImpl implements JobRecommendService {
for (Level2Group level2Group : level1Group.getLevel2Groups()) {
List<Level3Group> level3Groups = new ArrayList<>();
for (Level3Group level3Group : level2Group.getLevel3Groups()) {
if (level3Group.getName().toLowerCase().contains(level1.toLowerCase())){
if (level3Group.getName().toLowerCase().contains(level1.toLowerCase())) {
level3Groups.add(level3Group);
}
}
if (CollectionUtils.isNotEmpty(level3Groups)){
if (CollectionUtils.isNotEmpty(level3Groups)) {
Level2Group level2Group1 = new Level2Group(level2Group.getName());
level2Group1.setLevel3Groups(level3Groups);
level2Groups.add(level2Group1);
}
}
if (CollectionUtils.isNotEmpty(level2Groups)){
if (CollectionUtils.isNotEmpty(level2Groups)) {
Level1Group level1Group1 = new Level1Group(level1Group.getName());
level1Group1.setLevel2Groups(level2Groups);
result.add(level1Group1);
......@@ -145,25 +150,30 @@ public class JobRecommendServiceImpl implements JobRecommendService {
}
}).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);
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;
List<PositionRecommendListVo> positionRecommendListVos = new ArrayList<>();
if (dto.getMaxSalary() == 0 && dto.getMinSalary() == 0 && 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>>() {
});
}
positionRecommendListVos = positionRecommendMapper.queryPositionList(dto);
redisTemplate.opsForValue().set(redisKey, JSON.toJSONString(positionRecommendListVos),1, TimeUnit.HOURS) ;
return positionRecommendListVos;
}else {
positionRecommendListVos = positionRecommendMapper.queryPositionList(dto);
return positionRecommendListVos;
}
}
@Override
......@@ -173,16 +183,13 @@ public class JobRecommendServiceImpl implements JobRecommendService {
if (ObjectUtil.isEmpty(dto.getPositionId())) {
throw new WarnException("岗位id不能为空");
}
String result = redisTemplate.opsForValue().get(String.format(RECOMMEND_ITEM_KEY, dto.getPositionId()));
if (StringUtils.isNotBlank(result)) {
// 使用TypeReference来处理泛型类型
return JSON.parseObject(result, new TypeReference<AiPositionRecommendRecordVo>() {
});
}
AiPositionRecommendRecordVo aiPositionRecommendRecordVo = positionRecommendMapper.selectPositionById(dto.getPositionId());
if (aiPositionRecommendRecordVo != null) {
return aiPositionRecommendRecordVo;
}
// String result = redisTemplate.opsForValue().get(String.format(RECOMMEND_ITEM_KEY, dto.getPositionId()));
// if (StringUtils.isNotBlank(result)) {
// // 使用TypeReference来处理泛型类型
// return JSON.parseObject(result, new TypeReference<AiPositionRecommendRecordVo>() {
// });
// }
String rDetails = positionRecommendMapper.selectPositionRDetails(dto.getPositionId(), userId);
String cityCode = dto.getCityCode();
......@@ -227,7 +234,7 @@ public class JobRecommendServiceImpl implements JobRecommendService {
// 6. 构建参返回结果
SearchHit<Map> searchHit = searchHits.getSearchHit(0);
Map<String, Object> sourceMap = searchHit.getContent();
// AiPositionRecommendRecordVo aiPositionRecommendRecordVo = new AiPositionRecommendRecordVo();
AiPositionRecommendRecordVo aiPositionRecommendRecordVo = new AiPositionRecommendRecordVo();
aiPositionRecommendRecordVo.setUserId(userId);
aiPositionRecommendRecordVo.setPositionId(Long.valueOf(String.valueOf(sourceMap.get("positionDataId"))));
aiPositionRecommendRecordVo.setCityCode(cityCode);
......@@ -245,7 +252,7 @@ public class JobRecommendServiceImpl implements JobRecommendService {
// aiPositionRecommendRecordVo.setMinPay(0);
// aiPositionRecommendRecordVo.setJobProfession("");
// aiPositionRecommendRecordVo.setRScore(0);
// aiPositionRecommendRecordVo.setRDetails("");
aiPositionRecommendRecordVo.setRDetails(rDetails);
// aiPositionRecommendRecordVo.setAnalyzeJson("");
// aiPositionRecommendRecordVo.setEvaluationJson("");
// aiPositionRecommendRecordVo.setPublicPlatform("");
......@@ -256,8 +263,8 @@ public class JobRecommendServiceImpl implements JobRecommendService {
// aiPositionRecommendRecordVo.setMatchRate("");
// aiPositionRecommendRecordVo.setDeliverPrepare("");
// aiPositionRecommendRecordVo.setSelfIntroduction("");
// aiPositionRecommendRecordVo.setCompanyScale("");
// aiPositionRecommendRecordVo.setCompanyIndustry("");
aiPositionRecommendRecordVo.setCompanyScale("");
aiPositionRecommendRecordVo.setCompanyIndustry("");
// aiPositionRecommendRecordVo.setAnalysisId(0L);
// aiPositionRecommendRecordVo.setSearchValue("");
// aiPositionRecommendRecordVo.setCreateBy("");
......@@ -269,4 +276,29 @@ public class JobRecommendServiceImpl implements JobRecommendService {
return aiPositionRecommendRecordVo;
}
@Override
public List<AnalysisListVo> queryAnalysisList(String dateTime) {
Long userId = Objects.requireNonNull(LoginHelper.getLoginUser()).getUserId();
List<AnalysisListVo> analysisListVos = aiAnalysisMapper.selectAnalysisList(userId,dateTime);
ArrayList<AnalysisListVo> listVos = new ArrayList<>();
for (AnalysisListVo analysisListVo : analysisListVos) {
if (StringUtils.isNotBlank(analysisListVo.getTargetCity())){
List<String> targetCityList = JSON.parseArray(analysisListVo.getTargetCity(), String.class);
if (CollectionUtils.isNotEmpty(targetCityList)){
analysisListVo.setTargetCityList(targetCityList);
}
}
if (StringUtils.isNotBlank(analysisListVo.getCareer())){
List<String> careerList = JSON.parseArray(analysisListVo.getCareer(), String.class);
if (CollectionUtils.isNotEmpty(careerList)){
analysisListVo.setCareerList(careerList);
}
}
listVos.add(analysisListVo);
// return analysisListVo;
}
return listVos;
}
}
......@@ -44,6 +44,7 @@ public class PositionRecommendRedisServiceImpl implements PositionRecommendRedis
private static final String DELIVERED_KEY = "recommend:%d:delivered";
private static final String RECOMMEND_ITEM_KEY = "recommend:item:%d";
private static final String RECOMMEND_COUNT_KEY = "recommend:count:%d";//推荐次数
private static final String RECOMMEND_LIST = "recommend:list:%s";// 用户岗位智推推荐列表
@Override
public boolean initRedisData(Long userId) {
......@@ -73,7 +74,8 @@ public class PositionRecommendRedisServiceImpl implements PositionRecommendRedis
String favoriteKey = String.format(FAVORITE_KEY, userId);
String notSuitableKey = String.format(NOT_SUITABLE_KEY, userId);
String deliveredKey = String.format(DELIVERED_KEY, userId);
delRedisKey(allKey, notReadKey, favoriteKey, notSuitableKey, deliveredKey);
String recommendListKey = String.format(RECOMMEND_LIST, userId);
delRedisKey(allKey, notReadKey, favoriteKey, notSuitableKey, deliveredKey,recommendListKey);
// 2. 遍历数据,将其存入 Redis
for (AiPositionRecommendRecordVo position : positions) {
......
......@@ -12,4 +12,21 @@
</if>
where id = #{analysisId}
</update>
<select id="selectAnalysisList" resultType="com.bkty.system.domain.vo.AnalysisListVo">
SELECT
a.id,
a.career,
a.target_city,
a.pay,
a.create_time,
b.resume_name
FROM ai_recommend_base a
INNER JOIN function_resume_base b
ON a.resume_id = b.id
WHERE a.user_id = #{userId}
AND a.is_deleted = 0
AND b.is_deleted = 0
AND DATE(a.create_time) = #{dateTime}
ORDER BY create_time DESC
</select>
</mapper>
\ No newline at end of file
......@@ -88,8 +88,14 @@
ORDER BY position_score DESC
</select>
<select id="selectPositionById" resultType="com.bkty.system.domain.vo.AiPositionRecommendRecordVo">
select *
select r_details
from ai_position_recommend_record
where position_id = #{positionId}
</select>
<select id="selectPositionRDetails" resultType="java.lang.String">
select r_details
from ai_position_recommend_record
where position_id = #{positionId}
and user_id = #{userId}
</select>
</mapper>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment