diff --git a/client-api/src/main/java/org/jiayunet/controller/JobController.java b/client-api/src/main/java/org/jiayunet/controller/JobController.java index 92f6e4e..5dd32a8 100644 --- a/client-api/src/main/java/org/jiayunet/controller/JobController.java +++ b/client-api/src/main/java/org/jiayunet/controller/JobController.java @@ -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 listFavoriteJobs(@Validated @RequestBody PageParam param) { + public PageResult listFavoriteJobs(@Validated @RequestBody JobFavoriteQueryParam param) { Long userId = UserSecurityTool.getUserId(); return jobService.listFavoriteJobs(param, userId); } diff --git a/client-api/src/main/java/org/jiayunet/pojo/dto/job/JobDto.java b/client-api/src/main/java/org/jiayunet/pojo/dto/job/JobDto.java index 175a56e..de7838a 100644 --- a/client-api/src/main/java/org/jiayunet/pojo/dto/job/JobDto.java +++ b/client-api/src/main/java/org/jiayunet/pojo/dto/job/JobDto.java @@ -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; diff --git a/client-api/src/main/java/org/jiayunet/pojo/param/job/JobFavoriteQueryParam.java b/client-api/src/main/java/org/jiayunet/pojo/param/job/JobFavoriteQueryParam.java new file mode 100644 index 0000000..0f56eef --- /dev/null +++ b/client-api/src/main/java/org/jiayunet/pojo/param/job/JobFavoriteQueryParam.java @@ -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; +} diff --git a/client-api/src/main/java/org/jiayunet/pojo/param/job/JobQueryParam.java b/client-api/src/main/java/org/jiayunet/pojo/param/job/JobQueryParam.java index 44d3f4b..6c24795 100644 --- a/client-api/src/main/java/org/jiayunet/pojo/param/job/JobQueryParam.java +++ b/client-api/src/main/java/org/jiayunet/pojo/param/job/JobQueryParam.java @@ -29,4 +29,7 @@ public class JobQueryParam extends PageParam { /** 指定岗位ID列表(用于收藏列表) */ private List jobIds; + + /** 岗位状态过滤(0=有效 1=已下架 2=已过期,可多选,null或空=查所有) */ + private List statusFilter; } diff --git a/client-api/src/main/java/org/jiayunet/service/JobService.java b/client-api/src/main/java/org/jiayunet/service/JobService.java index bc4a4f6..398340c 100644 --- a/client-api/src/main/java/org/jiayunet/service/JobService.java +++ b/client-api/src/main/java/org/jiayunet/service/JobService.java @@ -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 { *

7. 组装返回数据

*/ public PageResult listJobs(JobQueryParam param, Long userId) { + // 默认只查有效岗位 + if (param.getStatusFilter() == null) { + param.setStatusFilter(Collections.singletonList(0)); + } + // 1. 扩展筛选条件的子级 List expandedRegionCodes = expandRegionCodes(param.getRegionCodes()); List 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 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 { *

方法逻辑流程:

*

1. 分页查询收藏记录(按创建时间倒序)

*

2. 提取岗位ID列表

- *

3. 复用岗位列表查询逻辑

+ *

3. 复用岗位列表查询逻辑(SQL层面根据valid参数过滤)

*/ - public PageResult listFavoriteJobs(PageParam param, Long userId) { + public PageResult listFavoriteJobs(JobFavoriteQueryParam param, Long userId) { // 1. 分页查询收藏记录 Page favPage = new Page<>(param.getPageNum(), param.getPageSize()); Page favorites = userJobFavoriteMapper.selectPage(favPage, new LambdaQueryWrapper().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); } diff --git a/manager/src/main/java/org/jiayunet/pojo/vo/JobListItemVo.java b/manager/src/main/java/org/jiayunet/pojo/vo/JobListItemVo.java index 6175f8d..b05bf22 100644 --- a/manager/src/main/java/org/jiayunet/pojo/vo/JobListItemVo.java +++ b/manager/src/main/java/org/jiayunet/pojo/vo/JobListItemVo.java @@ -62,4 +62,7 @@ public class JobListItemVo { /** 最低工作年限 */ private Integer minExperience; + + /** 岗位状态(0=有效 1=已下架 2=已过期) */ + private Integer status; } diff --git a/manager/src/main/resources/mapper/JobMapper.xml b/manager/src/main/resources/mapper/JobMapper.xml index d0c5395..bd41be1 100644 --- a/manager/src/main/resources/mapper/JobMapper.xml +++ b/manager/src/main/resources/mapper/JobMapper.xml @@ -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 + + + AND j.status IN + + #{status} + + AND j.id IN