Commit 1e220855 by zwb

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

parent 7df4e9b1
...@@ -54,7 +54,7 @@ ...@@ -54,7 +54,7 @@
<dependency> <dependency>
<groupId>org.mariadb.jdbc</groupId> <groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId> <artifactId>mariadb-java-client</artifactId>
<version>2.7.2</version> <version>3.1.4</version>
</dependency> </dependency>
</dependencies> </dependencies>
......
...@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; ...@@ -6,6 +6,7 @@ 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.dto.PositionQueryDto;
import com.bkty.system.domain.vo.AiPositionRecommendRecordVo; 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.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;
...@@ -125,4 +126,15 @@ public class JobRecommendController { ...@@ -125,4 +126,15 @@ public class JobRecommendController {
AiPositionRecommendRecordVo aiPositionRecommendRecordVo = jobRecommendService.queryPositionDetail(dto); AiPositionRecommendRecordVo aiPositionRecommendRecordVo = jobRecommendService.queryPositionDetail(dto);
return new R<>(aiPositionRecommendRecordVo); 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; ...@@ -2,9 +2,12 @@ package com.bkty.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.bkty.system.domain.entity.AiRecommendBase; 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.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper @Mapper
public interface AiAnalysisMapper extends BaseMapper<AiRecommendBase> { public interface AiAnalysisMapper extends BaseMapper<AiRecommendBase> {
...@@ -12,4 +15,6 @@ public interface AiAnalysisMapper extends BaseMapper<AiRecommendBase> { ...@@ -12,4 +15,6 @@ public interface AiAnalysisMapper extends BaseMapper<AiRecommendBase> {
@Param("rType") Integer rType, @Param("rType") Integer rType,
@Param("userId") Long userId, @Param("userId") Long userId,
@Param("authRecommend") Integer authRecommend); @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 ...@@ -47,4 +47,6 @@ public interface PositionRecommendMapper extends BaseMapper<AiPositionRecommendR
List<PositionRecommendListVo> queryPositionList(@Param("dto") PositionQueryDto dto); List<PositionRecommendListVo> queryPositionList(@Param("dto") PositionQueryDto dto);
AiPositionRecommendRecordVo selectPositionById(@Param("positionId") Long positionId); 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; ...@@ -2,6 +2,7 @@ package com.bkty.system.service.jobRecommend;
import com.bkty.system.domain.dto.PositionQueryDto; import com.bkty.system.domain.dto.PositionQueryDto;
import com.bkty.system.domain.vo.AiPositionRecommendRecordVo; 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.domain.vo.PositionRecommendListVo;
import com.bkty.system.init.Level1Group; import com.bkty.system.init.Level1Group;
...@@ -39,4 +40,11 @@ public interface JobRecommendService { ...@@ -39,4 +40,11 @@ public interface JobRecommendService {
* @return * @return
*/ */
AiPositionRecommendRecordVo queryPositionDetail(PositionQueryDto dto); AiPositionRecommendRecordVo queryPositionDetail(PositionQueryDto dto);
/**
* 查询历史分析数据
* @param dateTime
* @return
*/
List<AnalysisListVo> queryAnalysisList(String dateTime);
} }
package com.bkty.system.service.jobRecommend.impl; 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 com.google.common.collect.Lists;
import java.util.Date; import java.util.Date;
import com.bkty.system.domain.entity.FunctionPositionPortraitV2; import com.bkty.system.domain.entity.FunctionPositionPortraitV2;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
...@@ -83,7 +88,7 @@ public class JobRecommendServiceImpl implements JobRecommendService { ...@@ -83,7 +88,7 @@ public class JobRecommendServiceImpl implements JobRecommendService {
List<Level1Group> positionCache = categoryCacheManager.getPositionCache(); List<Level1Group> positionCache = categoryCacheManager.getPositionCache();
List<Level1Group> result = new ArrayList<>(); List<Level1Group> result = new ArrayList<>();
for (Level1Group level1Group : positionCache) { for (Level1Group level1Group : positionCache) {
if (level1Group.getName().toLowerCase().contains(level1.toLowerCase())){ if (level1Group.getName().toLowerCase().contains(level1.toLowerCase())) {
result.add(level1Group); result.add(level1Group);
continue; continue;
} }
...@@ -91,17 +96,17 @@ public class JobRecommendServiceImpl implements JobRecommendService { ...@@ -91,17 +96,17 @@ public class JobRecommendServiceImpl implements JobRecommendService {
for (Level2Group level2Group : level1Group.getLevel2Groups()) { for (Level2Group level2Group : level1Group.getLevel2Groups()) {
List<Level3Group> level3Groups = new ArrayList<>(); List<Level3Group> level3Groups = new ArrayList<>();
for (Level3Group level3Group : level2Group.getLevel3Groups()) { for (Level3Group level3Group : level2Group.getLevel3Groups()) {
if (level3Group.getName().toLowerCase().contains(level1.toLowerCase())){ if (level3Group.getName().toLowerCase().contains(level1.toLowerCase())) {
level3Groups.add(level3Group); level3Groups.add(level3Group);
} }
} }
if (CollectionUtils.isNotEmpty(level3Groups)){ if (CollectionUtils.isNotEmpty(level3Groups)) {
Level2Group level2Group1 = new Level2Group(level2Group.getName()); Level2Group level2Group1 = new Level2Group(level2Group.getName());
level2Group1.setLevel3Groups(level3Groups); level2Group1.setLevel3Groups(level3Groups);
level2Groups.add(level2Group1); level2Groups.add(level2Group1);
} }
} }
if (CollectionUtils.isNotEmpty(level2Groups)){ if (CollectionUtils.isNotEmpty(level2Groups)) {
Level1Group level1Group1 = new Level1Group(level1Group.getName()); Level1Group level1Group1 = new Level1Group(level1Group.getName());
level1Group1.setLevel2Groups(level2Groups); level1Group1.setLevel2Groups(level2Groups);
result.add(level1Group1); result.add(level1Group1);
...@@ -145,25 +150,30 @@ public class JobRecommendServiceImpl implements JobRecommendService { ...@@ -145,25 +150,30 @@ public class JobRecommendServiceImpl implements JobRecommendService {
} }
}).start(); }).start();
} }
private static final String RECOMMEND_LIST = "recommend:list:%s"; private static final String RECOMMEND_LIST = "recommend:list:%s";
@Override @Override
public List<PositionRecommendListVo> queryPositionList(PositionQueryDto dto) { public List<PositionRecommendListVo> queryPositionList(PositionQueryDto dto) {
Long userId = Objects.requireNonNull(LoginHelper.getLoginUser()).getUserId(); Long userId = Objects.requireNonNull(LoginHelper.getLoginUser()).getUserId();
// String redisKey = String.format(RECOMMEND_LIST, userId); String redisKey = String.format(RECOMMEND_LIST, userId);
dto.setUserId(userId); dto.setUserId(userId);
// if (ObjectUtil.isEmpty(dto.getMaxSalary())&&ObjectUtil.isEmpty(dto.getMinSalary())&&CollectionUtils.isEmpty(dto.getCityCodes())) { List<PositionRecommendListVo> positionRecommendListVos = new ArrayList<>();
// // 1. 先尝试从Redis获取 if (dto.getMaxSalary() == 0 && dto.getMinSalary() == 0 && CollectionUtils.isEmpty(dto.getCityCodes())) {
// String result = redisTemplate.opsForValue().get(redisKey); // 1. 尝试从Redis获取
// if (StringUtils.isNotBlank(result)) { String result = redisTemplate.opsForValue().get(redisKey);
// // 使用TypeReference来处理泛型类型 if (StringUtils.isNotBlank(result)) {
// return JSON.parseObject(result, new TypeReference<List<PositionRecommendListVo>>() { // 使用TypeReference来处理泛型类型
// }); return JSON.parseObject(result, new TypeReference<List<PositionRecommendListVo>>() {
// } });
// } }
List<PositionRecommendListVo> recommendList = positionRecommendMapper.queryPositionList(dto); positionRecommendListVos = positionRecommendMapper.queryPositionList(dto);
redisTemplate.opsForValue().set(redisKey, JSON.toJSONString(positionRecommendListVos),1, TimeUnit.HOURS) ;
return recommendList; return positionRecommendListVos;
}else {
positionRecommendListVos = positionRecommendMapper.queryPositionList(dto);
return positionRecommendListVos;
}
} }
@Override @Override
...@@ -173,16 +183,13 @@ public class JobRecommendServiceImpl implements JobRecommendService { ...@@ -173,16 +183,13 @@ public class JobRecommendServiceImpl implements JobRecommendService {
if (ObjectUtil.isEmpty(dto.getPositionId())) { if (ObjectUtil.isEmpty(dto.getPositionId())) {
throw new WarnException("岗位id不能为空"); throw new WarnException("岗位id不能为空");
} }
String result = redisTemplate.opsForValue().get(String.format(RECOMMEND_ITEM_KEY, dto.getPositionId())); // String result = redisTemplate.opsForValue().get(String.format(RECOMMEND_ITEM_KEY, dto.getPositionId()));
if (StringUtils.isNotBlank(result)) { // if (StringUtils.isNotBlank(result)) {
// 使用TypeReference来处理泛型类型 // // 使用TypeReference来处理泛型类型
return JSON.parseObject(result, new TypeReference<AiPositionRecommendRecordVo>() { // return JSON.parseObject(result, new TypeReference<AiPositionRecommendRecordVo>() {
}); // });
} // }
AiPositionRecommendRecordVo aiPositionRecommendRecordVo = positionRecommendMapper.selectPositionById(dto.getPositionId()); String rDetails = positionRecommendMapper.selectPositionRDetails(dto.getPositionId(), userId);
if (aiPositionRecommendRecordVo != null) {
return aiPositionRecommendRecordVo;
}
String cityCode = dto.getCityCode(); String cityCode = dto.getCityCode();
...@@ -227,7 +234,7 @@ public class JobRecommendServiceImpl implements JobRecommendService { ...@@ -227,7 +234,7 @@ public class JobRecommendServiceImpl implements JobRecommendService {
// 6. 构建参返回结果 // 6. 构建参返回结果
SearchHit<Map> searchHit = searchHits.getSearchHit(0); SearchHit<Map> searchHit = searchHits.getSearchHit(0);
Map<String, Object> sourceMap = searchHit.getContent(); Map<String, Object> sourceMap = searchHit.getContent();
// AiPositionRecommendRecordVo aiPositionRecommendRecordVo = new AiPositionRecommendRecordVo(); AiPositionRecommendRecordVo aiPositionRecommendRecordVo = new AiPositionRecommendRecordVo();
aiPositionRecommendRecordVo.setUserId(userId); aiPositionRecommendRecordVo.setUserId(userId);
aiPositionRecommendRecordVo.setPositionId(Long.valueOf(String.valueOf(sourceMap.get("positionDataId")))); aiPositionRecommendRecordVo.setPositionId(Long.valueOf(String.valueOf(sourceMap.get("positionDataId"))));
aiPositionRecommendRecordVo.setCityCode(cityCode); aiPositionRecommendRecordVo.setCityCode(cityCode);
...@@ -245,7 +252,7 @@ public class JobRecommendServiceImpl implements JobRecommendService { ...@@ -245,7 +252,7 @@ public class JobRecommendServiceImpl implements JobRecommendService {
// aiPositionRecommendRecordVo.setMinPay(0); // aiPositionRecommendRecordVo.setMinPay(0);
// aiPositionRecommendRecordVo.setJobProfession(""); // aiPositionRecommendRecordVo.setJobProfession("");
// aiPositionRecommendRecordVo.setRScore(0); // aiPositionRecommendRecordVo.setRScore(0);
// aiPositionRecommendRecordVo.setRDetails(""); aiPositionRecommendRecordVo.setRDetails(rDetails);
// aiPositionRecommendRecordVo.setAnalyzeJson(""); // aiPositionRecommendRecordVo.setAnalyzeJson("");
// aiPositionRecommendRecordVo.setEvaluationJson(""); // aiPositionRecommendRecordVo.setEvaluationJson("");
// aiPositionRecommendRecordVo.setPublicPlatform(""); // aiPositionRecommendRecordVo.setPublicPlatform("");
...@@ -256,8 +263,8 @@ public class JobRecommendServiceImpl implements JobRecommendService { ...@@ -256,8 +263,8 @@ public class JobRecommendServiceImpl implements JobRecommendService {
// aiPositionRecommendRecordVo.setMatchRate(""); // aiPositionRecommendRecordVo.setMatchRate("");
// aiPositionRecommendRecordVo.setDeliverPrepare(""); // aiPositionRecommendRecordVo.setDeliverPrepare("");
// aiPositionRecommendRecordVo.setSelfIntroduction(""); // aiPositionRecommendRecordVo.setSelfIntroduction("");
// aiPositionRecommendRecordVo.setCompanyScale(""); aiPositionRecommendRecordVo.setCompanyScale("");
// aiPositionRecommendRecordVo.setCompanyIndustry(""); aiPositionRecommendRecordVo.setCompanyIndustry("");
// aiPositionRecommendRecordVo.setAnalysisId(0L); // aiPositionRecommendRecordVo.setAnalysisId(0L);
// aiPositionRecommendRecordVo.setSearchValue(""); // aiPositionRecommendRecordVo.setSearchValue("");
// aiPositionRecommendRecordVo.setCreateBy(""); // aiPositionRecommendRecordVo.setCreateBy("");
...@@ -269,4 +276,29 @@ public class JobRecommendServiceImpl implements JobRecommendService { ...@@ -269,4 +276,29 @@ public class JobRecommendServiceImpl implements JobRecommendService {
return aiPositionRecommendRecordVo; 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 ...@@ -44,6 +44,7 @@ public class PositionRecommendRedisServiceImpl implements PositionRecommendRedis
private static final String DELIVERED_KEY = "recommend:%d:delivered"; private static final String DELIVERED_KEY = "recommend:%d:delivered";
private static final String RECOMMEND_ITEM_KEY = "recommend:item:%d"; 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_COUNT_KEY = "recommend:count:%d";//推荐次数
private static final String RECOMMEND_LIST = "recommend:list:%s";// 用户岗位智推推荐列表
@Override @Override
public boolean initRedisData(Long userId) { public boolean initRedisData(Long userId) {
...@@ -73,7 +74,8 @@ public class PositionRecommendRedisServiceImpl implements PositionRecommendRedis ...@@ -73,7 +74,8 @@ public class PositionRecommendRedisServiceImpl implements PositionRecommendRedis
String favoriteKey = String.format(FAVORITE_KEY, userId); String favoriteKey = String.format(FAVORITE_KEY, userId);
String notSuitableKey = String.format(NOT_SUITABLE_KEY, userId); String notSuitableKey = String.format(NOT_SUITABLE_KEY, userId);
String deliveredKey = String.format(DELIVERED_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 // 2. 遍历数据,将其存入 Redis
for (AiPositionRecommendRecordVo position : positions) { for (AiPositionRecommendRecordVo position : positions) {
......
...@@ -12,4 +12,21 @@ ...@@ -12,4 +12,21 @@
</if> </if>
where id = #{analysisId} where id = #{analysisId}
</update> </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> </mapper>
\ No newline at end of file
...@@ -88,8 +88,14 @@ ...@@ -88,8 +88,14 @@
ORDER BY position_score DESC ORDER BY position_score DESC
</select> </select>
<select id="selectPositionById" resultType="com.bkty.system.domain.vo.AiPositionRecommendRecordVo"> <select id="selectPositionById" resultType="com.bkty.system.domain.vo.AiPositionRecommendRecordVo">
select * select r_details
from ai_position_recommend_record from ai_position_recommend_record
where position_id = #{positionId} where position_id = #{positionId}
</select> </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> </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