|
@@ -1,5 +1,6 @@
|
|
|
package com.citu.module.menduner.system.dal.mysql.job;
|
|
|
|
|
|
+import cn.hutool.core.collection.CollUtil;
|
|
|
import com.citu.framework.common.pojo.PageParam;
|
|
|
import com.citu.framework.common.pojo.PageResult;
|
|
|
import com.citu.framework.mybatis.core.mapper.BaseMapperX;
|
|
@@ -11,7 +12,7 @@ import com.citu.module.menduner.system.controller.appadmin.person.cv.AppAdminJob
|
|
|
import com.citu.module.menduner.system.controller.appadmin.person.cv.AppAdminJobCvRelRespVO;
|
|
|
import com.citu.module.menduner.system.controller.appadmin.person.hire.AppAdminHireJobCvRelPageReqVO;
|
|
|
import com.citu.module.menduner.system.controller.appadmin.person.hire.AppAdminHireJobCvRelRespVO;
|
|
|
-import com.citu.module.menduner.system.controller.appadmin.person.vo.AppAdminPersonSimpleRespVO;
|
|
|
+import com.citu.module.menduner.system.controller.base.CommonRespVO;
|
|
|
import com.citu.module.menduner.system.controller.base.job.JobCvRelPageReqVO;
|
|
|
import com.citu.module.menduner.system.dal.dataobject.enterprise.EnterpriseDO;
|
|
|
import com.citu.module.menduner.system.dal.dataobject.job.JobAdvertisedDO;
|
|
@@ -24,7 +25,10 @@ import com.citu.module.menduner.system.enums.unfit.UnfitTypeEnum;
|
|
|
import org.apache.ibatis.annotations.Mapper;
|
|
|
|
|
|
import java.time.LocalDateTime;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.LinkedHashMap;
|
|
|
import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
|
|
|
/**
|
|
|
* 招聘职位简历投递 Mapper
|
|
@@ -47,27 +51,31 @@ public interface JobCvRelMapper extends BaseMapperX<JobCvRelDO> {
|
|
|
|
|
|
|
|
|
default PageResult<AppAdminJobCvRelRespVO> selectPage(AppAdminJobCvRelPageReqVO reqVO) {
|
|
|
- // 职位投递userId inner 招聘职位userId and 职位投递userId inner 人才信息userId
|
|
|
MPJLambdaWrapperX<JobCvRelDO> wrapper = new MPJLambdaWrapperX<>();
|
|
|
wrapper.selectAsClass(JobCvRelDO.class, AppAdminJobCvRelRespVO.class);
|
|
|
wrapper.selectAssociation(JobAdvertisedDO.class, AppAdminJobCvRelRespVO::getJob);
|
|
|
- wrapper.selectAssociation(PersonInfoDO.class, AppAdminJobCvRelRespVO::getPerson);
|
|
|
+ wrapper.selectAssociation("person", PersonInfoDO.class, AppAdminJobCvRelRespVO::getPerson);
|
|
|
+ wrapper.selectAssociation("recommend", PersonInfoDO.class, AppAdminJobCvRelRespVO::getRecommendPerson);
|
|
|
|
|
|
// 投递的职位 inner 招聘职位
|
|
|
wrapper.innerJoin(JobAdvertisedDO.class, JobAdvertisedDO::getId, JobCvRelDO::getJobId);
|
|
|
// 招聘职位的条件
|
|
|
wrapper.eqIfExists(JobCvRelDO::getJobId, reqVO.getJobId());
|
|
|
- wrapper.eqIfPresent(JobCvRelDO::getStatus, reqVO.getStatus());
|
|
|
+ wrapper.eqIfExists(JobCvRelDO::getStatus, reqVO.getStatus());
|
|
|
wrapper.eqIfExists(JobCvRelDO::getType, reqVO.getType());
|
|
|
+ wrapper.eqIfExists(JobCvRelDO::getRecommendUserId, reqVO.getRecommendUserId());
|
|
|
+ wrapper.likeIfExists(JobCvRelDO::getName, reqVO.getName());
|
|
|
+ wrapper.likeIfExists(JobCvRelDO::getPhone, reqVO.getPhone());
|
|
|
|
|
|
- // 投递的职位 inner 人才信息
|
|
|
- wrapper.innerJoin(PersonInfoDO.class, PersonInfoDO::getUserId, JobCvRelDO::getUserId);
|
|
|
+ // 投递的职位 inner 人才信息 (投递人)
|
|
|
+ wrapper.innerJoin(PersonInfoDO.class, "person", PersonInfoDO::getUserId, JobCvRelDO::getUserId);
|
|
|
+ // 人才相关的条件
|
|
|
+ wrapper.likeIfExists("person.name", reqVO.getName());
|
|
|
+
|
|
|
+ // 投递的职位 inner 人才信息 (推荐人)
|
|
|
+ wrapper.leftJoin(PersonInfoDO.class, "recommend", PersonInfoDO::getUserId, JobCvRelDO::getRecommendUserId);
|
|
|
// 人才相关的条件
|
|
|
- wrapper.eqIfExists(PersonInfoDO::getJobStatus, reqVO.getJobStatus());
|
|
|
- wrapper.eqIfExists(PersonInfoDO::getEduType, reqVO.getEduType());
|
|
|
- wrapper.eqIfExists(PersonInfoDO::getExpType, reqVO.getExpType());
|
|
|
- wrapper.likeIfExists(PersonInfoDO::getName, reqVO.getName());
|
|
|
- wrapper.likeIfExists(PersonInfoDO::getUserId, reqVO.getUserId());
|
|
|
+ wrapper.likeIfExists("recommend.name", reqVO.getName());
|
|
|
|
|
|
setUnfitCandidate(wrapper);
|
|
|
|
|
@@ -76,6 +84,39 @@ public interface JobCvRelMapper extends BaseMapperX<JobCvRelDO> {
|
|
|
}
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
+ * 获得赏金投递职位分页
|
|
|
+ **/
|
|
|
+ default PageResult<AppAdminHireJobCvRelRespVO> page(AppAdminHireJobCvRelPageReqVO reqVO) {
|
|
|
+ // 职位投递userId inner 招聘职位userId and 职位投递userId inner 人才信息userId
|
|
|
+ MPJLambdaWrapperX<JobCvRelDO> wrapper = new MPJLambdaWrapperX<>();
|
|
|
+ wrapper.selectAsClass(JobCvRelDO.class, AppAdminHireJobCvRelRespVO.class);
|
|
|
+ wrapper.selectAssociation(JobAdvertisedDO.class, AppAdminJobCvRelRespVO::getJob);
|
|
|
+ wrapper.selectAssociation("person", PersonInfoDO.class, AppAdminHireJobCvRelRespVO::getPerson);
|
|
|
+ wrapper.selectAssociation("recommend", PersonInfoDO.class, AppAdminHireJobCvRelRespVO::getRecommendPerson);
|
|
|
+
|
|
|
+ // 投递的职位 inner 招聘职位
|
|
|
+ wrapper.innerJoin(JobAdvertisedDO.class, JobAdvertisedDO::getId, JobCvRelDO::getJobId);
|
|
|
+ // 招聘职位的条件
|
|
|
+ wrapper.eqIfExists(JobCvRelDO::getJobId, reqVO.getJobId());
|
|
|
+ wrapper.eqIfExists(JobCvRelDO::getStatus, reqVO.getStatus());
|
|
|
+
|
|
|
+ // 投递的职位 inner 人才信息 (投递人)
|
|
|
+ wrapper.innerJoin(PersonInfoDO.class, "person", PersonInfoDO::getUserId, JobCvRelDO::getUserId);
|
|
|
+ // 人才相关的条件
|
|
|
+ wrapper.likeIfExists("person.name", reqVO.getName());
|
|
|
+
|
|
|
+ // 投递的职位 inner 人才信息 (推荐人)
|
|
|
+ wrapper.innerJoin(PersonInfoDO.class, "recommend", PersonInfoDO::getUserId, JobCvRelDO::getRecommendUserId);
|
|
|
+ // 人才相关的条件
|
|
|
+ wrapper.likeIfExists("recommend.name", reqVO.getName());
|
|
|
+
|
|
|
+ setUnfitCandidate(wrapper);
|
|
|
+
|
|
|
+ wrapper.orderByDesc(JobCvRelDO::getUpdateTime);
|
|
|
+ return selectJoinPage(reqVO, AppAdminHireJobCvRelRespVO.class, wrapper);
|
|
|
+ }
|
|
|
+
|
|
|
default PageResult<AppHireJobCvRelRespVO> page(AppHireJobCvRelQueryReqVO reqVO, Long userId) {
|
|
|
// 职位投递userId inner 招聘职位userId and 职位投递userId inner 人才信息userId
|
|
|
MPJLambdaWrapperX<JobCvRelDO> wrapper = new MPJLambdaWrapperX<>();
|
|
@@ -95,11 +136,11 @@ public interface JobCvRelMapper extends BaseMapperX<JobCvRelDO> {
|
|
|
|
|
|
setUnfitCandidate(wrapper);
|
|
|
|
|
|
-
|
|
|
wrapper.orderByDesc(JobCvRelDO::getUpdateTime);
|
|
|
return selectJoinPage(reqVO, AppHireJobCvRelRespVO.class, wrapper);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
/**
|
|
|
* 过滤不合适的候选人
|
|
|
**/
|
|
@@ -113,39 +154,6 @@ public interface JobCvRelMapper extends BaseMapperX<JobCvRelDO> {
|
|
|
wrapper.isNull(UnfitCandidateDO::getId);
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 获得赏金投递职位分页
|
|
|
- **/
|
|
|
- default PageResult<AppAdminHireJobCvRelRespVO> page(AppAdminHireJobCvRelPageReqVO reqVO) {
|
|
|
- // 职位投递userId inner 招聘职位userId and 职位投递userId inner 人才信息userId
|
|
|
- MPJLambdaWrapperX<JobCvRelDO> wrapper = new MPJLambdaWrapperX<>();
|
|
|
- wrapper.selectAsClass(JobCvRelDO.class, AppAdminHireJobCvRelRespVO.class);
|
|
|
- wrapper.selectAssociation(JobAdvertisedDO.class, AppAdminJobCvRelRespVO::getJob);
|
|
|
- wrapper.selectAssociation("person", PersonInfoDO.class, AppAdminHireJobCvRelRespVO::getPerson);
|
|
|
- wrapper.selectAssociation("recommend", PersonInfoDO.class, AppAdminHireJobCvRelRespVO::getRecommendPerson);
|
|
|
-
|
|
|
- // 投递的职位 inner 招聘职位
|
|
|
- wrapper.innerJoin(JobAdvertisedDO.class, JobAdvertisedDO::getId, JobCvRelDO::getJobId);
|
|
|
- // 招聘职位的条件
|
|
|
- wrapper.eqIfExists(JobCvRelDO::getJobId, reqVO.getJobId());
|
|
|
- wrapper.eqIfExists(JobCvRelDO::getStatus, reqVO.getStatus());
|
|
|
-
|
|
|
- // 投递的职位 inner 人才信息 (投递人)
|
|
|
- wrapper.innerJoin(PersonInfoDO.class, "person", PersonInfoDO::getUserId, JobCvRelDO::getUserId);
|
|
|
- // 人才相关的条件
|
|
|
- wrapper.likeIfExists("person.name", reqVO.getName());
|
|
|
-
|
|
|
- // 投递的职位 inner 人才信息 (推荐人)
|
|
|
- wrapper.innerJoin(PersonInfoDO.class, "recommend", PersonInfoDO::getUserId, JobCvRelDO::getRecommendUserId);
|
|
|
- // 人才相关的条件
|
|
|
- wrapper.likeIfExists("recommend.name", reqVO.getName());
|
|
|
-
|
|
|
- setUnfitCandidate(wrapper);
|
|
|
-
|
|
|
- wrapper.orderByDesc(JobCvRelDO::getUpdateTime);
|
|
|
- return selectJoinPage(reqVO, AppAdminHireJobCvRelRespVO.class, wrapper);
|
|
|
- }
|
|
|
-
|
|
|
|
|
|
// 根据用户ID和职位id判断15天内是否有数据,如果有返回true
|
|
|
default Boolean checkDataWithin15Day(Long userId, Long jobId) {
|
|
@@ -155,6 +163,16 @@ public interface JobCvRelMapper extends BaseMapperX<JobCvRelDO> {
|
|
|
.ge(JobCvRelDO::getCreateTime, LocalDateTime.now().minusDays(15))) > 0;
|
|
|
}
|
|
|
|
|
|
+ // 根据用户id和职位id获取投递简历信息
|
|
|
+ default JobCvRelDO selectByUserIdAndJobId(Long userId, Long jobId) {
|
|
|
+ return selectOne(new LambdaQueryWrapperX<JobCvRelDO>()
|
|
|
+ .eq(JobCvRelDO::getUserId, userId)
|
|
|
+ .eq(JobCvRelDO::getJobId, jobId)
|
|
|
+ // 大于15天内投递的
|
|
|
+ .ge(JobCvRelDO::getCreateTime, LocalDateTime.now().minusDays(15))
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
default List<JobCvRelDO> selectByJobIdList(List<Long> jobIdList) {
|
|
|
return selectList(new LambdaQueryWrapperX<JobCvRelDO>()
|
|
|
.in(JobCvRelDO::getJobId, jobIdList)
|
|
@@ -167,13 +185,6 @@ public interface JobCvRelMapper extends BaseMapperX<JobCvRelDO> {
|
|
|
}
|
|
|
|
|
|
|
|
|
- /**
|
|
|
- * 获取投递简历中的推荐人列表
|
|
|
- **/
|
|
|
- default List<AppAdminPersonSimpleRespVO> getRecommendUser() {
|
|
|
- return null;
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* 查询用户被看过的简历
|
|
|
**/
|
|
@@ -190,4 +201,79 @@ public interface JobCvRelMapper extends BaseMapperX<JobCvRelDO> {
|
|
|
return selectJoinPage(pageParam, JobCvRelDO.class, wrapper);
|
|
|
}
|
|
|
|
|
|
+ // ========== 统计 ==========
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 投递简历的性别比例
|
|
|
+ **/
|
|
|
+ default List<CommonRespVO> getJobCvSexCount(LocalDateTime startTime, LocalDateTime endTime) {
|
|
|
+ MPJLambdaWrapperX<JobCvRelDO> wrapper = new MPJLambdaWrapperX<>();
|
|
|
+ wrapper.selectAs(PersonInfoDO::getSex, "`key`");
|
|
|
+ wrapper.selectCount(JobCvRelDO::getId, CommonRespVO::getValue);
|
|
|
+ wrapper.innerJoin(PersonInfoDO.class, PersonInfoDO::getUserId, JobCvRelDO::getUserId);
|
|
|
+ wrapper.between(JobCvRelDO::getCreateTime, startTime, endTime);
|
|
|
+ wrapper.groupBy(PersonInfoDO::getSex);
|
|
|
+ wrapper.orderByDesc("`key`");
|
|
|
+ return selectJoinList(CommonRespVO.class, wrapper);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 投递简历的年龄分布
|
|
|
+ **/
|
|
|
+ default List<CommonRespVO> getJobCvAgeCount(LocalDateTime startTime, LocalDateTime endTime) {
|
|
|
+ MPJLambdaWrapperX<JobCvRelDO> wrapper = new MPJLambdaWrapperX<>();
|
|
|
+
|
|
|
+ String sql = "CASE \n" +
|
|
|
+ " WHEN YEAR(CURDATE()) - YEAR(birthday) BETWEEN 18 AND 22 THEN '18-22岁'\n" +
|
|
|
+ " WHEN YEAR(CURDATE()) - YEAR(birthday) BETWEEN 23 AND 30 THEN '23-30岁'\n" +
|
|
|
+ " WHEN YEAR(CURDATE()) - YEAR(birthday) BETWEEN 31 AND 39 THEN '31-39岁'\n" +
|
|
|
+ " WHEN YEAR(CURDATE()) - YEAR(birthday) BETWEEN 40 AND 49 THEN '40-49岁'\n" +
|
|
|
+ " WHEN YEAR(CURDATE()) - YEAR(birthday) BETWEEN 50 AND 59 THEN '50-59岁'\n" +
|
|
|
+ " ELSE '其他年龄段'\n" +
|
|
|
+ " END";
|
|
|
+ wrapper.selectFunc(() -> sql, PersonInfoDO::getBirthday, "`key`");
|
|
|
+ wrapper.selectCount(JobCvRelDO::getId, CommonRespVO::getValue);
|
|
|
+
|
|
|
+
|
|
|
+ wrapper.innerJoin(PersonInfoDO.class, PersonInfoDO::getUserId, JobCvRelDO::getUserId);
|
|
|
+ wrapper.between(JobCvRelDO::getCreateTime, startTime, endTime);
|
|
|
+ wrapper.groupBy("`key`");
|
|
|
+ wrapper.orderByDesc("`key`");
|
|
|
+ return selectJoinList(CommonRespVO.class, wrapper);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 投递简历的工作经验分布
|
|
|
+ **/
|
|
|
+ default List<CommonRespVO> getJobCvExpCount(LocalDateTime startTime, LocalDateTime endTime) {
|
|
|
+ MPJLambdaWrapperX<JobCvRelDO> wrapper = new MPJLambdaWrapperX<>();
|
|
|
+ wrapper.selectAs(PersonInfoDO::getExpType, "`key`");
|
|
|
+ wrapper.selectCount(JobCvRelDO::getId, CommonRespVO::getValue);
|
|
|
+
|
|
|
+ wrapper.innerJoin(PersonInfoDO.class, PersonInfoDO::getUserId, JobCvRelDO::getUserId);
|
|
|
+ wrapper.between(JobCvRelDO::getCreateTime, startTime, endTime);
|
|
|
+ wrapper.groupBy(PersonInfoDO::getExpType);
|
|
|
+ wrapper.orderByDesc("`key`");
|
|
|
+ return selectJoinList(CommonRespVO.class, wrapper);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 投递简历的学历分布
|
|
|
+ **/
|
|
|
+ default List<CommonRespVO> getJobCvEduCount(LocalDateTime startTime, LocalDateTime endTime) {
|
|
|
+ MPJLambdaWrapperX<JobCvRelDO> wrapper = new MPJLambdaWrapperX<>();
|
|
|
+ wrapper.selectAs(PersonInfoDO::getEduType, "`key`");
|
|
|
+ wrapper.selectCount(JobCvRelDO::getId, CommonRespVO::getValue);
|
|
|
+
|
|
|
+ wrapper.innerJoin(PersonInfoDO.class, PersonInfoDO::getUserId, JobCvRelDO::getUserId);
|
|
|
+ wrapper.between(JobCvRelDO::getCreateTime, startTime, endTime);
|
|
|
+ wrapper.groupBy(PersonInfoDO::getEduType);
|
|
|
+ wrapper.orderByDesc("`key`");
|
|
|
+
|
|
|
+ return selectJoinList(CommonRespVO.class, wrapper);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
}
|