|
@@ -1,31 +1,45 @@
|
|
|
package com.citu.module.menduner.system.service.job;
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
-import com.baomidou.dynamic.datasource.annotation.DSTransactional;
|
|
|
import com.citu.framework.common.pojo.PageParam;
|
|
|
import com.citu.framework.common.pojo.PageResult;
|
|
|
-import com.citu.framework.common.util.object.BeanUtils;
|
|
|
-import com.citu.module.menduner.system.controller.base.job.JobCvRelPageReqVO;
|
|
|
-import com.citu.module.menduner.system.controller.base.person.favorite.PersonJobFavoritePageReqVO;
|
|
|
-import com.citu.module.menduner.system.controller.base.person.subscribe.PersonEnterpriseSubscribePageReqVO;
|
|
|
-import com.citu.module.menduner.system.controller.base.contact.AppEnterpriseUserContactRespVO;
|
|
|
import com.citu.module.menduner.system.controller.app.enterprise.vo.AppEnterpriseSimpleRespVO;
|
|
|
import com.citu.module.menduner.system.controller.app.job.vo.AppJobAdvertisedRespVO;
|
|
|
-import com.citu.module.menduner.system.controller.app.job.vo.AppJobCvRelReqVO;
|
|
|
+import com.citu.module.menduner.system.controller.app.job.vo.AppJobAdvertisedSearchPageReqVO;
|
|
|
+import com.citu.module.menduner.system.controller.appadmin.cv.AppAdminJobCvRelPageReqVO;
|
|
|
+import com.citu.module.menduner.system.controller.appadmin.cv.AppAdminJobCvRelRespVO;
|
|
|
import com.citu.module.menduner.system.controller.appadmin.job.vo.AppAdminJobPageReqVO;
|
|
|
-import com.citu.module.menduner.system.controller.appadmin.job.vo.AppAdminJobSimpleRespVO;
|
|
|
+import com.citu.module.menduner.system.controller.appadmin.job.vo.AppAdminJobRespVO;
|
|
|
+import com.citu.module.menduner.system.controller.appadmin.person.vo.AppAdminPersonSimpleRespVO;
|
|
|
+import com.citu.module.menduner.system.controller.base.contact.AppEnterpriseUserContactRespVO;
|
|
|
+import com.citu.module.menduner.system.controller.base.job.JobCvRelPageReqVO;
|
|
|
+import com.citu.module.menduner.system.controller.base.person.favorite.PersonJobFavoritePageReqVO;
|
|
|
+import com.citu.module.menduner.system.controller.base.person.subscribe.PersonEnterpriseSubscribePageReqVO;
|
|
|
+import com.citu.module.menduner.system.convert.EnterpriseConvert;
|
|
|
import com.citu.module.menduner.system.convert.JobAdvertisedConvert;
|
|
|
import com.citu.module.menduner.system.dal.dataobject.job.JobAdvertisedDO;
|
|
|
import com.citu.module.menduner.system.dal.dataobject.job.JobCvRelDO;
|
|
|
import com.citu.module.menduner.system.dal.dataobject.person.PersonEnterpriseSubscribeDO;
|
|
|
import com.citu.module.menduner.system.dal.dataobject.person.PersonJobFavoriteDO;
|
|
|
+import com.citu.module.menduner.system.dal.es.job.ESJobAdvertisedMergeDO;
|
|
|
import com.citu.module.menduner.system.dal.mysql.enterprise.EnterpriseMapper;
|
|
|
import com.citu.module.menduner.system.dal.mysql.job.JobAdvertisedMapper;
|
|
|
import com.citu.module.menduner.system.dal.mysql.job.JobCvRelMapper;
|
|
|
-import com.citu.module.menduner.system.enums.MendunerStatusEnum;
|
|
|
+import com.citu.module.menduner.system.dal.mysql.person.PersonInfoMapper;
|
|
|
+import com.citu.module.menduner.system.service.area.AreaService;
|
|
|
import com.citu.module.menduner.system.service.enterprise.bind.EnterpriseUserBindService;
|
|
|
import com.citu.module.menduner.system.service.person.favorite.PersonJobFavoriteService;
|
|
|
import com.citu.module.menduner.system.service.person.subscribe.PersonEnterpriseSubscribeService;
|
|
|
+import com.citu.module.menduner.system.util.EsQueryBuildUtils;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.elasticsearch.index.query.BoolQueryBuilder;
|
|
|
+import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
|
|
|
+import org.springframework.data.domain.PageRequest;
|
|
|
+import org.springframework.data.domain.Pageable;
|
|
|
+import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
|
|
|
+import org.springframework.data.elasticsearch.core.SearchHits;
|
|
|
+import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
|
|
|
+import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.validation.annotation.Validated;
|
|
|
|
|
@@ -34,13 +48,13 @@ import java.time.LocalDateTime;
|
|
|
import java.time.temporal.ChronoUnit;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.Set;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
-import static com.citu.framework.common.exception.util.ServiceExceptionUtil.exception;
|
|
|
import static com.citu.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
|
|
|
-import static com.citu.module.menduner.system.enums.ErrorCodeConstants.JOB_CV_REL_EXISTS;
|
|
|
-import static com.citu.module.menduner.system.enums.ErrorCodeConstants.JOB_CV_REL_JOB_STOP_DELIVERY;
|
|
|
|
|
|
+@Slf4j
|
|
|
@Service
|
|
|
@Validated
|
|
|
public class JobIntegrationServiceImpl implements JobIntegrationService {
|
|
@@ -63,43 +77,18 @@ public class JobIntegrationServiceImpl implements JobIntegrationService {
|
|
|
@Resource
|
|
|
private EnterpriseMapper enterpriseMapper;
|
|
|
|
|
|
- @Override
|
|
|
- @DSTransactional
|
|
|
- public void send(AppJobCvRelReqVO reqVO) {
|
|
|
- // 效验职位是否关闭
|
|
|
- JobAdvertisedDO job = jobAdvertisedMapper.selectById(reqVO.getJobId());
|
|
|
- if (MendunerStatusEnum.DISABLE.getStatus().equals(job.getStatus())) {
|
|
|
- throw exception(JOB_CV_REL_JOB_STOP_DELIVERY);
|
|
|
- }
|
|
|
- Long userId = getLoginUserId();
|
|
|
- // 效验某段时间是否投递过
|
|
|
- if (jobCvRelMapper.checkDataWithin15Day(userId, reqVO.getJobId())) {
|
|
|
- throw exception(JOB_CV_REL_EXISTS);
|
|
|
- }
|
|
|
- // 赋值
|
|
|
- JobCvRelDO jobCvRel = BeanUtils.toBean(reqVO, JobCvRelDO.class);
|
|
|
- jobCvRel.setUserId(userId);
|
|
|
- jobCvRel.setPublishUserId(job.getUserId());
|
|
|
- jobCvRel.setEnterpriseId(job.getEnterpriseId());
|
|
|
- // 暂时不知道有什么状态
|
|
|
- jobCvRel.setStatus(MendunerStatusEnum.ENABLE.getStatus());
|
|
|
- // 保存
|
|
|
- jobCvRelMapper.insert(jobCvRel);
|
|
|
- }
|
|
|
+ @Resource
|
|
|
+ private AreaService areaService;
|
|
|
|
|
|
- @Override
|
|
|
- public boolean checkSend(Long jobId) {
|
|
|
- Long userId = getLoginUserId();
|
|
|
- if (null == userId) {
|
|
|
- // 没登录
|
|
|
- return false;
|
|
|
- }
|
|
|
- // 效验某段时间是否投递过
|
|
|
- return jobCvRelMapper.checkDataWithin15Day(userId, jobId);
|
|
|
- }
|
|
|
+ @Resource
|
|
|
+ private PersonInfoMapper personInfoMapper;
|
|
|
|
|
|
- public PageResult<AppJobAdvertisedRespVO> gteJobByIdList(PageParam page, List<Long> idList) {
|
|
|
- PageResult<AppJobAdvertisedRespVO> result = jobAdvertisedMapper.selectByIdListPage(page, idList);
|
|
|
+ @Resource
|
|
|
+ private ElasticsearchRestTemplate elasticsearchTemplate;
|
|
|
+
|
|
|
+
|
|
|
+ public PageResult<AppJobAdvertisedRespVO> getJobByIdList(PageParam page, List<Long> ids) {
|
|
|
+ PageResult<AppJobAdvertisedRespVO> result = jobAdvertisedMapper.selectByIdListPage(page, ids);
|
|
|
for (AppJobAdvertisedRespVO respVO : result.getList()) {
|
|
|
// 获取职位发布人
|
|
|
AppEnterpriseUserContactRespVO contactRespVO = userBindService
|
|
@@ -120,10 +109,13 @@ public class JobIntegrationServiceImpl implements JobIntegrationService {
|
|
|
relPageReqVO.setPageNo(page.getPageNo());
|
|
|
relPageReqVO.setPageSize(page.getPageSize());
|
|
|
relPageReqVO.setUserId(userId);
|
|
|
- PageResult<JobCvRelDO> jobCvRelDOPageResult = jobCvRelMapper.selectPage(relPageReqVO);
|
|
|
+ PageResult<JobCvRelDO> result = jobCvRelMapper.selectPage(relPageReqVO);
|
|
|
+ if (CollUtil.isEmpty(result.getList())) {
|
|
|
+ return PageResult.empty();
|
|
|
+ }
|
|
|
// 查询招聘职位等信息
|
|
|
- List<Long> idList = jobCvRelDOPageResult.getList().stream().map(JobCvRelDO::getJobId).collect(Collectors.toList());
|
|
|
- return gteJobByIdList(page, idList);
|
|
|
+ List<Long> ids = result.getList().stream().map(JobCvRelDO::getJobId).collect(Collectors.toList());
|
|
|
+ return getJobByIdList(page, ids);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -133,14 +125,16 @@ public class JobIntegrationServiceImpl implements JobIntegrationService {
|
|
|
pageReqVO.setPageNo(page.getPageNo());
|
|
|
pageReqVO.setPageSize(page.getPageSize());
|
|
|
pageReqVO.setUserId(userId);
|
|
|
- PageResult<PersonJobFavoriteDO> personJobFavoritePageResult =
|
|
|
+ PageResult<PersonJobFavoriteDO> result =
|
|
|
personJobFavoriteService.getPersonJobFavoritePage(pageReqVO);
|
|
|
-
|
|
|
+ if (CollUtil.isEmpty(result.getList())) {
|
|
|
+ return PageResult.empty();
|
|
|
+ }
|
|
|
// 查询招聘职位等信息
|
|
|
- List<Long> idList = personJobFavoritePageResult.getList()
|
|
|
+ List<Long> ids = result.getList()
|
|
|
.stream().map(PersonJobFavoriteDO::getJobId).collect(Collectors.toList());
|
|
|
|
|
|
- return gteJobByIdList(page, idList);
|
|
|
+ return getJobByIdList(page, ids);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -150,21 +144,106 @@ public class JobIntegrationServiceImpl implements JobIntegrationService {
|
|
|
pageReqVO.setPageNo(page.getPageNo());
|
|
|
pageReqVO.setPageSize(page.getPageSize());
|
|
|
pageReqVO.setUserId(userId);
|
|
|
- PageResult<PersonEnterpriseSubscribeDO> personJobFavoritePageResult =
|
|
|
+ PageResult<PersonEnterpriseSubscribeDO> result =
|
|
|
personEnterpriseSubscribeService.getPersonEnterpriseSubscribePage(pageReqVO);
|
|
|
+ if (CollUtil.isEmpty(result.getList())) {
|
|
|
+ return PageResult.empty();
|
|
|
+ }
|
|
|
// 查询招聘职位等信息
|
|
|
- List<Long> idList = personJobFavoritePageResult.getList()
|
|
|
+ List<Long> ids = result.getList()
|
|
|
.stream().map(PersonEnterpriseSubscribeDO::getEnterpriseId).collect(Collectors.toList());
|
|
|
- return enterpriseMapper.selectByIdListPage(page, idList);
|
|
|
+ return enterpriseMapper.selectByIdListPage(page, ids);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public PageResult<AppAdminJobSimpleRespVO> page(AppAdminJobPageReqVO reqVO) {
|
|
|
+ public PageResult<AppJobAdvertisedRespVO> search(AppJobAdvertisedSearchPageReqVO reqVO) {
|
|
|
+
|
|
|
+ PageResult<AppJobAdvertisedRespVO> result = new PageResult<>();
|
|
|
+ List<AppJobAdvertisedRespVO> list = new ArrayList<>();
|
|
|
+
|
|
|
+ // 构建分页
|
|
|
+ Pageable pageable = PageRequest.of(reqVO.getPageNo() - 1, reqVO.getPageSize());
|
|
|
+
|
|
|
+ if (null != reqVO.getAreaIds() && reqVO.getAreaIds().size() <= 1) {
|
|
|
+ // 不为空且只有一个区域id的情况
|
|
|
+ Set<Long> areaIds = areaService.getAreaIdChildrenIds(reqVO.getAreaIds().get(0));
|
|
|
+ if (!areaIds.isEmpty()) {
|
|
|
+ List<Long> areaIdList = new ArrayList<>(areaIds);
|
|
|
+ // 包括自己
|
|
|
+ areaIds.add(reqVO.getAreaIds().get(0));
|
|
|
+ reqVO.setAreaIds(areaIdList);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ BoolQueryBuilder queryBuilder = EsQueryBuildUtils.jobSearch(reqVO);
|
|
|
+
|
|
|
+ NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
|
|
|
+ .withQuery(queryBuilder)
|
|
|
+ // 高亮
|
|
|
+ // .withHighlightFields(new HighlightBuilder
|
|
|
+ // .Field("*")
|
|
|
+ // .preTags("<span style='color:red'>")
|
|
|
+ // .postTags("</span>").requireFieldMatch(false))
|
|
|
+ .withHighlightBuilder(new HighlightBuilder().field("name").field("enterpriseName")
|
|
|
+ .field("enterpriseAnotherName").requireFieldMatch(Boolean.TRUE)
|
|
|
+ .preTags("<span style='color:red'>")
|
|
|
+ .postTags("</span>")
|
|
|
+ .numOfFragments(10000)
|
|
|
+ )
|
|
|
+ .withPageable(pageable)
|
|
|
+ .build();
|
|
|
+ SearchHits<ESJobAdvertisedMergeDO> search = elasticsearchTemplate.search(searchQuery, ESJobAdvertisedMergeDO.class);
|
|
|
+ log.info("NativeSearchQuery json : " + searchQuery.getQuery().toString());
|
|
|
+
|
|
|
+ fill(list, search);
|
|
|
+ result.setList(list);
|
|
|
+ result.setTotal(search.getTotalHits());
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param list 目标对象
|
|
|
+ * @param search 搜索结果
|
|
|
+ * @return void
|
|
|
+ * @description 填充搜索结果
|
|
|
+ * @author Rayson
|
|
|
+ * @date 2024/6/4 下午2:40
|
|
|
+ **/
|
|
|
+ private void fill(List<AppJobAdvertisedRespVO> list, SearchHits<ESJobAdvertisedMergeDO> search) {
|
|
|
+ search.getSearchHits().stream()
|
|
|
+ .forEach(searchHit -> {
|
|
|
+ Map<String, List<String>> highlightFields = searchHit.getHighlightFields();
|
|
|
+
|
|
|
+ AppJobAdvertisedRespVO respVO = new AppJobAdvertisedRespVO();
|
|
|
+ respVO.setJob(JobAdvertisedConvert.INSTANCE.convert(searchHit.getContent()));
|
|
|
+ if (null != highlightFields.get("name")) {
|
|
|
+ respVO.getJob()
|
|
|
+ .setName(highlightFields.get("name").get(0));
|
|
|
+ }
|
|
|
+
|
|
|
+ AppEnterpriseSimpleRespVO enterprise = EnterpriseConvert.INSTANCE.convert5(searchHit.getContent());
|
|
|
+ enterprise.setId(searchHit.getContent().getEnterpriseId());
|
|
|
+ enterprise.setName(searchHit.getContent().getEnterpriseName());
|
|
|
+ enterprise.setAnotherName(searchHit.getContent().getEnterpriseAnotherName());
|
|
|
+ respVO.setEnterprise(enterprise);
|
|
|
+
|
|
|
+ // 获取职位发布人
|
|
|
+ AppEnterpriseUserContactRespVO contactRespVO = userBindService
|
|
|
+ .getContact(searchHit.getContent().getEnterpriseId(), searchHit.getContent().getUserId());
|
|
|
+ // 设置联系人
|
|
|
+ respVO.setContact(contactRespVO);
|
|
|
+ list.add(respVO);
|
|
|
+
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public PageResult<AppAdminJobRespVO> page(AppAdminJobPageReqVO reqVO) {
|
|
|
PageResult<JobAdvertisedDO> pageResult = jobAdvertisedMapper.selectPage(reqVO);
|
|
|
if (CollUtil.isEmpty(pageResult.getList())) {
|
|
|
return PageResult.empty();
|
|
|
}
|
|
|
- List<AppAdminJobSimpleRespVO> list = new ArrayList<>();
|
|
|
+ List<AppAdminJobRespVO> list = new ArrayList<>();
|
|
|
|
|
|
// 获取招聘职位id集合
|
|
|
List<Long> jobIdList
|
|
@@ -174,11 +253,11 @@ public class JobIntegrationServiceImpl implements JobIntegrationService {
|
|
|
List<JobCvRelDO> jobCvRelDOList = jobCvRelMapper.selectByJobIdList(jobIdList);
|
|
|
|
|
|
pageResult.getList().forEach(job -> {
|
|
|
- AppAdminJobSimpleRespVO respVO = JobAdvertisedConvert.INSTANCE.convert4(job);
|
|
|
+ AppAdminJobRespVO respVO = JobAdvertisedConvert.INSTANCE.convert4(job);
|
|
|
Long count = jobCvRelDOList.stream().filter(jobCvRelDO -> jobCvRelDO.getJobId().equals(job.getId())).count();
|
|
|
respVO.setCount(count);
|
|
|
// 计算多少天后到期
|
|
|
- if(null != job.getExpireTime()) {
|
|
|
+ if (null != job.getExpireTime()) {
|
|
|
respVO.setExpireDay(ChronoUnit.DAYS.between(LocalDateTime.now(), respVO.getExpireTime()));
|
|
|
}
|
|
|
list.add(respVO);
|
|
@@ -186,4 +265,34 @@ public class JobIntegrationServiceImpl implements JobIntegrationService {
|
|
|
});
|
|
|
return new PageResult<>(list, pageResult.getTotal());
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public PageResult<AppAdminJobCvRelRespVO> page(AppAdminJobCvRelPageReqVO reqVO) {
|
|
|
+
|
|
|
+ PageResult<AppAdminJobCvRelRespVO> pageResult = jobCvRelMapper.selectPage(reqVO);
|
|
|
+ if (CollUtil.isEmpty(pageResult.getList())) {
|
|
|
+ return PageResult.empty();
|
|
|
+ }
|
|
|
+ // 取得用户id集合
|
|
|
+ List<Long> userIdList = pageResult.getList()
|
|
|
+ .stream().map(AppAdminJobCvRelRespVO::getUserId).collect(Collectors.toList());
|
|
|
+ reqVO.setUserId(userIdList);
|
|
|
+ PageResult<AppAdminPersonSimpleRespVO> personSimpleResult
|
|
|
+ = personInfoMapper.selectSimplePersonPage(reqVO);
|
|
|
+
|
|
|
+ List<AppAdminJobCvRelRespVO> list = new ArrayList<>();
|
|
|
+
|
|
|
+ for (AppAdminPersonSimpleRespVO personSimple : personSimpleResult.getList()) {
|
|
|
+ AppAdminJobCvRelRespVO respVO = pageResult.getList().stream()
|
|
|
+ .filter(jobCvRel -> jobCvRel.getUserId().equals(personSimple.getUserId()))
|
|
|
+ .findFirst().orElse(null);
|
|
|
+ respVO.setPerson(personSimple);
|
|
|
+ list.add(respVO);
|
|
|
+ }
|
|
|
+ // 以二次查询的personSimpleResult 为准
|
|
|
+ pageResult.setList(list);
|
|
|
+ pageResult.setTotal(personSimpleResult.getTotal());
|
|
|
+ return pageResult;
|
|
|
+
|
|
|
+ }
|
|
|
}
|