添加各种列表查询接口

This commit is contained in:
zk
2026-03-20 21:00:34 +08:00
parent eb0bbab040
commit f1d86b821e
7 changed files with 56 additions and 9 deletions
@@ -1,13 +1,13 @@
package org.jiayunet.controller;
import lombok.AllArgsConstructor;
import org.jiayunet.pojo.PageParam;
import org.jiayunet.pojo.PageResult;
import org.jiayunet.pojo.dto.job.JobDetailDto;
import org.jiayunet.pojo.dto.job.JobDto;
import org.jiayunet.pojo.param.job.JobApplyParam;
import org.jiayunet.pojo.param.job.JobApplyQueryParam;
import org.jiayunet.pojo.param.job.JobDislikeParam;
import org.jiayunet.pojo.param.job.JobFavoriteQueryParam;
import org.jiayunet.pojo.param.job.JobQueryParam;
import org.jiayunet.pojo.vo.JobApplyCountVo;
import org.jiayunet.pojo.vo.JobFavoriteCountVo;
@@ -79,7 +79,7 @@ public class JobController {
* 收藏列表
*/
@PostMapping("/favorite/list")
public PageResult<JobDto> listFavoriteJobs(@Validated @RequestBody PageParam param) {
public PageResult<JobDto> listFavoriteJobs(@Validated @RequestBody JobFavoriteQueryParam param) {
Long userId = UserSecurityTool.getUserId();
return jobService.listFavoriteJobs(param, userId);
}
@@ -51,6 +51,9 @@ public class JobDto {
/** 投递状态(null=未投递,0=已投递 1=面试中 2=有Offer 3=未通过 4=已结束) */
private Integer applicationStatus;
/** 岗位状态(0=有效 1=已下架 2=已过期) */
private Integer status;
/** 匹配总分(0-90 */
private Integer matchScore;
@@ -0,0 +1,18 @@
package org.jiayunet.pojo.param.job;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.jiayunet.pojo.PageParam;
/**
* 收藏列表查询参数
*
* @author zk
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class JobFavoriteQueryParam extends PageParam {
/** 是否只查询有效收藏(true=只查有效岗位,false=只查失效岗位,null=查所有) */
private Boolean valid;
}
@@ -29,4 +29,7 @@ public class JobQueryParam extends PageParam {
/** 指定岗位ID列表(用于收藏列表) */
private List<Long> jobIds;
/** 岗位状态过滤(0=有效 1=已下架 2=已过期,可多选,null或空=查所有) */
private List<Integer> statusFilter;
}
@@ -4,12 +4,12 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.jiayunet.mapper.*;
import org.jiayunet.pojo.PageParam;
import org.jiayunet.pojo.PageResult;
import org.jiayunet.pojo.dto.job.JobDetailDto;
import org.jiayunet.pojo.dto.job.JobDto;
import org.jiayunet.pojo.dto.job.JobMatchScoreDto;
import org.jiayunet.pojo.param.job.JobApplyQueryParam;
import org.jiayunet.pojo.param.job.JobFavoriteQueryParam;
import org.jiayunet.pojo.param.job.JobQueryParam;
import org.jiayunet.pojo.po.*;
import org.jiayunet.pojo.vo.JobApplyCountVo;
@@ -77,6 +77,11 @@ public class JobService {
* <p>7. 组装返回数据</p>
*/
public PageResult<JobDto> listJobs(JobQueryParam param, Long userId) {
// 默认只查有效岗位
if (param.getStatusFilter() == null) {
param.setStatusFilter(Collections.singletonList(0));
}
// 1. 扩展筛选条件的子级
List<String> expandedRegionCodes = expandRegionCodes(param.getRegionCodes());
List<Long> expandedCategoryIds = expandCategoryIds(param.getCategoryIds());
@@ -114,6 +119,7 @@ public class JobService {
BeanUtils.copyProperties(vo, dto);
dto.setIsFavorite(favoriteMap.getOrDefault(vo.getId(), false));
dto.setApplicationStatus(applicationMap.get(vo.getId()));
dto.setStatus(vo.getStatus());
Map<String, Integer> scoreMap = matchScoreMap.get(vo.getId());
if (scoreMap != null) {
JobMatchScoreDto matchScore = new JobMatchScoreDto(scoreMap.get("industryScore"), scoreMap.get("skillScore"), scoreMap.get("experienceScore"));
@@ -379,9 +385,9 @@ public class JobService {
* <p>方法逻辑流程:</p>
* <p>1. 分页查询收藏记录(按创建时间倒序)</p>
* <p>2. 提取岗位ID列表</p>
* <p>3. 复用岗位列表查询逻辑</p>
* <p>3. 复用岗位列表查询逻辑SQL层面根据valid参数过滤)</p>
*/
public PageResult<JobDto> listFavoriteJobs(PageParam param, Long userId) {
public PageResult<JobDto> listFavoriteJobs(JobFavoriteQueryParam param, Long userId) {
// 1. 分页查询收藏记录
Page<UserJobFavorite> favPage = new Page<>(param.getPageNum(), param.getPageSize());
Page<UserJobFavorite> favorites = userJobFavoriteMapper.selectPage(favPage, new LambdaQueryWrapper<UserJobFavorite>().eq(UserJobFavorite::getUserId, userId).orderByDesc(UserJobFavorite::getCreateTime));
@@ -392,11 +398,17 @@ public class JobService {
return new PageResult<>(param.getPageNum().longValue(), param.getPageSize().longValue(), 0L, Collections.emptyList());
}
// 3. 构造查询参数,复用岗位列表逻辑
// 3. 构造查询参数,复用岗位列表逻辑SQL层面过滤状态)
JobQueryParam queryParam = new JobQueryParam();
queryParam.setPageNum(param.getPageNum());
queryParam.setPageSize(param.getPageSize());
queryParam.setJobIds(jobIds);
// valid参数转换:true→[0](有效) false→[1,2](已下架+已过期) null→[0,1,2](所有)
if (param.getValid() != null) {
queryParam.setStatusFilter(param.getValid() ? Collections.singletonList(0) : Arrays.asList(1, 2));
} else {
queryParam.setStatusFilter(Arrays.asList(0,1, 2));
}
return listJobs(queryParam, userId);
}
@@ -423,11 +435,12 @@ public class JobService {
return new PageResult<>(param.getPageNum().longValue(), param.getPageSize().longValue(), 0L, Collections.emptyList());
}
// 3. 构造查询参数,复用岗位列表逻辑
// 3. 构造查询参数,复用岗位列表逻辑(查所有状态)
JobQueryParam queryParam = new JobQueryParam();
queryParam.setPageNum(param.getPageNum());
queryParam.setPageSize(param.getPageSize());
queryParam.setJobIds(jobIds);
queryParam.setStatusFilter(Arrays.asList(0,1, 2));
return listJobs(queryParam, userId);
}
@@ -62,4 +62,7 @@ public class JobListItemVo {
/** 最低工作年限 */
private Integer minExperience;
/** 岗位状态(0=有效 1=已下架 2=已过期) */
private Integer status;
}
@@ -11,6 +11,7 @@
j.source_url,
j.required_industry_id,
j.min_experience,
j.status,
c.id AS company_id,
c.name AS company_name,
c.short_name AS company_short_name,
@@ -24,8 +25,14 @@
INNER JOIN bg_company c ON j.company_id = c.id
INNER JOIN bg_china_regions_code r ON c.region_code = r.code
INNER JOIN bg_job_category cat ON j.category_id = cat.id
WHERE j.status = 0
AND c.status = 1
WHERE c.status = 1
<!-- 岗位状态过滤 -->
<if test="statusFilter != null and statusFilter.size() > 0">
AND j.status IN
<foreach collection="statusFilter" item="status" open="(" separator="," close=")">
#{status}
</foreach>
</if>
<!-- 指定岗位ID列表(用于收藏列表) -->
<if test="jobIds != null and jobIds.size() > 0">
AND j.id IN