添加状态统计接口

This commit is contained in:
zk
2026-03-20 20:39:51 +08:00
parent 6fc056aabd
commit eb0bbab040
4 changed files with 124 additions and 0 deletions
@@ -9,6 +9,8 @@ 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.JobQueryParam;
import org.jiayunet.pojo.vo.JobApplyCountVo;
import org.jiayunet.pojo.vo.JobFavoriteCountVo;
import org.jiayunet.service.JobService;
import org.jiayunet.tool.UserSecurityTool;
import org.springframework.validation.annotation.Validated;
@@ -99,4 +101,22 @@ public class JobController {
Long userId = UserSecurityTool.getUserId();
jobService.applyJob(param.getJobId(), param.getStatus(), userId);
}
/**
* 收藏统计
*/
@GetMapping("/favorite/count")
public JobFavoriteCountVo getFavoriteCount() {
Long userId = UserSecurityTool.getUserId();
return jobService.getFavoriteCount(userId);
}
/**
* 投递统计
*/
@GetMapping("/apply/count")
public JobApplyCountVo getApplyCount() {
Long userId = UserSecurityTool.getUserId();
return jobService.getApplyCount(userId);
}
}
@@ -0,0 +1,30 @@
package org.jiayunet.pojo.vo;
import lombok.Data;
/**
* 投递统计结果
*
* @author zk
*/
@Data
public class JobApplyCountVo {
/** 投递总数 */
private Long totalCount;
/** 已投递数(status=0 */
private Long appliedCount;
/** 面试中数(status=1 */
private Long interviewingCount;
/** 有Offer数(status=2 */
private Long offerCount;
/** 未通过数(status=3 */
private Long rejectedCount;
/** 已结束数(status=4 */
private Long closedCount;
}
@@ -0,0 +1,25 @@
package org.jiayunet.pojo.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 收藏统计结果
*
* @author zk
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class JobFavoriteCountVo {
/** 收藏总数 */
private Long totalCount;
/** 有效收藏数(岗位status=0 */
private Long validCount;
/** 失效收藏数(岗位status!=0或已删除) */
private Long invalidCount;
}
@@ -12,6 +12,8 @@ import org.jiayunet.pojo.dto.job.JobMatchScoreDto;
import org.jiayunet.pojo.param.job.JobApplyQueryParam;
import org.jiayunet.pojo.param.job.JobQueryParam;
import org.jiayunet.pojo.po.*;
import org.jiayunet.pojo.vo.JobApplyCountVo;
import org.jiayunet.pojo.vo.JobFavoriteCountVo;
import org.jiayunet.pojo.vo.JobListItemVo;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -461,4 +463,51 @@ public class JobService {
userJobApplicationMapper.insert(application);
}
}
/**
* 收藏统计
* <p>方法逻辑流程:</p>
* <p>1. 查询收藏总数</p>
* <p>2. 查询有效收藏数(JOIN岗位表,status=0</p>
* <p>3. 计算失效收藏数</p>
*/
public JobFavoriteCountVo getFavoriteCount(Long userId) {
// 1. 查询收藏总数
Long totalCount = userJobFavoriteMapper.selectCount(new LambdaQueryWrapper<UserJobFavorite>().eq(UserJobFavorite::getUserId, userId));
// 2. 查询有效收藏数(岗位status=0)
List<UserJobFavorite> favorites = userJobFavoriteMapper.selectList(new LambdaQueryWrapper<UserJobFavorite>().eq(UserJobFavorite::getUserId, userId));
List<Long> jobIds = favorites.stream().map(UserJobFavorite::getJobId).collect(Collectors.toList());
Long validCount = 0L;
if (!jobIds.isEmpty()) {
validCount = jobMapper.selectCount(new LambdaQueryWrapper<Job>().in(Job::getId, jobIds).eq(Job::getStatus, 0));
}
// 3. 计算失效收藏数
Long invalidCount = totalCount - validCount;
return new JobFavoriteCountVo(totalCount, validCount, invalidCount);
}
/**
* 投递统计
* <p>方法逻辑流程:</p>
* <p>1. 查询所有投递记录</p>
* <p>2. 按状态分组统计</p>
*/
public JobApplyCountVo getApplyCount(Long userId) {
// 1. 查询所有投递记录
List<UserJobApplication> applications = userJobApplicationMapper.selectList(new LambdaQueryWrapper<UserJobApplication>().eq(UserJobApplication::getUserId, userId));
// 2. 按状态分组统计
JobApplyCountVo vo = new JobApplyCountVo();
vo.setTotalCount((long) applications.size());
vo.setAppliedCount(applications.stream().filter(a -> a.getStatus() == 0).count());
vo.setInterviewingCount(applications.stream().filter(a -> a.getStatus() == 1).count());
vo.setOfferCount(applications.stream().filter(a -> a.getStatus() == 2).count());
vo.setRejectedCount(applications.stream().filter(a -> a.getStatus() == 3).count());
vo.setClosedCount(applications.stream().filter(a -> a.getStatus() == 4).count());
return vo;
}
}