Kaynağa Gözat

1、增加就平台职位订阅的数据
2、优化人才检索查询
3、增加推荐人才接口

rayson 9 ay önce
ebeveyn
işleme
baddfa38e4

+ 4 - 0
menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/api/python/GraphApi.java

@@ -30,4 +30,8 @@ public interface GraphApi {
     @PostMapping("/rocket/recommend/job")
     @Operation(summary = "推荐职位")
     CommonResult<Long[]> queryRecommendJob(@RequestBody GraphQueryPageDTO queryDTO);
+
+    @PostMapping("/rocket/recommend/person")
+    @Operation(summary = "推荐人才")
+    CommonResult<Long[]> queryRecommendPerson(@RequestBody GraphQueryPageDTO queryDTO);
 }

+ 9 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/recruit/person/AppRecruitPersonMapController.java → menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/recruit/person/AppRecruitPersonController.java

@@ -5,6 +5,7 @@ import com.citu.framework.common.pojo.PageResult;
 import com.citu.framework.security.core.annotations.PreAuthenticated;
 import com.citu.module.menduner.system.controller.base.person.PersonQueryReqVO;
 import com.citu.module.menduner.system.controller.base.person.PersonMapQueryReqVO;
+import com.citu.module.menduner.system.controller.base.person.PersonRecommendQueryReqVO;
 import com.citu.module.menduner.system.controller.base.person.info.PersonInfoRespVO;
 import com.citu.module.menduner.system.service.person.PersonIntegrationService;
 import io.swagger.v3.oas.annotations.Operation;
@@ -23,7 +24,7 @@ import static com.citu.framework.common.pojo.CommonResult.success;
 @RestController
 @RequestMapping("/menduner/system/recruit")
 @Validated
-public class AppRecruitPersonMapController {
+public class AppRecruitPersonController {
 
     @Resource
     private PersonIntegrationService personIntegrationService;
@@ -42,5 +43,12 @@ public class AppRecruitPersonMapController {
     public CommonResult<PageResult<PersonInfoRespVO>> query(@Valid PersonQueryReqVO reqVO) {
         return success(personIntegrationService.queryPage(reqVO));
     }
+    @PreAuthenticated
+    @GetMapping("/person-recommend/page")
+    @Operation(summary = "分页推荐人才信息")
+    public CommonResult<PageResult<PersonInfoRespVO>> query(@Valid PersonRecommendQueryReqVO reqVO) {
+        return success(personIntegrationService.queryRecommendJob(reqVO));
+    }
+
 
 }

+ 16 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/PersonRecommendQueryReqVO.java

@@ -0,0 +1,16 @@
+package com.citu.module.menduner.system.controller.base.person;
+
+import com.citu.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+@Schema(description = "menduner - 人才推荐查询 Response VO")
+@Data
+public class PersonRecommendQueryReqVO extends PageParam {
+
+    @Schema(description = "职位id")
+    private Long jobId;
+
+}

+ 10 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/eduexp/EduExpMapper.java

@@ -50,4 +50,14 @@ public interface EduExpMapper extends BaseMapperX<EduExpDO> {
                 .orderByDesc(EduExpDO::getStartTime)
         );
     }
+
+
+    /** 根据用户id查询最高学历的数据 **/
+    default EduExpDO selectMaxEducationByUserId(Long userId) {
+        return selectOne(new LambdaQueryWrapperX<EduExpDO>()
+                .eqIfPresent(EduExpDO::getUserId, userId)
+                .orderByDesc(EduExpDO::getEducationType)
+                .last("limit 1")
+        );
+    }
 }

+ 54 - 31
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/person/PersonInfoMapper.java

@@ -1,6 +1,7 @@
 package com.citu.module.menduner.system.dal.mysql.person;
 
 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;
 import com.citu.framework.mybatis.core.query.LambdaQueryWrapperX;
@@ -20,6 +21,7 @@ import org.apache.ibatis.annotations.Mapper;
 
 import java.time.LocalDate;
 import java.time.ZoneId;
+import java.util.List;
 
 /**
  * 人才信息-人才档案 Mapper
@@ -143,51 +145,63 @@ public interface PersonInfoMapper extends BaseMapperX<PersonInfoDO> {
         query.distinct();
         query.selectAsClass(PersonInfoDO.class, PersonInfoRespVO.class);
 
+        // 求职意向
+        query.leftJoin(JobInterestedDO.class, JobInterestedDO::getUserId, PersonInfoDO::getUserId);
+
         // 并且条件
         query.inIfPresent(PersonInfoDO::getAreaId, reqVO.getAreaIds());
         query.eqIfPresent(PersonInfoDO::getEduType, reqVO.getEduType());
         query.eqIfPresent(PersonInfoDO::getExpType, reqVO.getExpType());
 
+        query.in(CollUtil.isNotEmpty(reqVO.getPositionIds()), JobInterestedDO::getPositionId, reqVO.getPositionIds())
+                .or()
+                .in(CollUtil.isNotEmpty(reqVO.getAreaIds()),JobInterestedDO::getWorkAreaId, reqVO.getAreaIds())
+        ;
+
+        if(CollUtil.isNotEmpty(reqVO.getAreaIds())) {
+            StringBuilder jsonContainsClause = new StringBuilder();
+            for (Long areaId : reqVO.getAreaIds()) {
+                if (jsonContainsClause.length() > 0) {
+                    jsonContainsClause.append(" OR ");
+                }
+                jsonContainsClause.append("JSON_CONTAINS(interested_area_id_list, '\"").append(areaId).append("\"')");
+            }
+            query.apply("(" + jsonContainsClause.toString() + ")");
+        }
+
         // 或者条件
         query.likeIfPresent(PersonInfoDO::getName, reqVO.getContent())
                 .or()
                 .likeIfExists(PersonInfoDO::getTagList, reqVO.getContent())
                 .or()
                 .likeIfExists(PersonInfoDO::getAdvantage, reqVO.getContent())
-                .or();
-
-        // 求职意向
-        query.leftJoin(JobInterestedDO.class, JobInterestedDO::getUserId, PersonInfoDO::getUserId);
-
-        query.in(CollUtil.isNotEmpty(reqVO.getPositionIds()), JobInterestedDO::getPositionId, reqVO.getPositionIds())
                 .or()
-                .likeIfExists(JobInterestedDO::getWorkAreaId, reqVO.getAreaIds())
-                .or()
-                .likeIfExists(JobInterestedDO::getInterestedAreaIdList, reqVO.getAreaIds())
-                .or();
+                .likeIfExists(PersonInfoDO::getForeignName, reqVO.getContent());
 
 
-        // 教育经历
-        query.leftJoin(EduExpDO.class, EduExpDO::getUserId, PersonInfoDO::getUserId);
-        query.likeIfExists(EduExpDO::getSchoolName, reqVO.getContent())
-                .or()
-                .likeIfExists(EduExpDO::getMajor, reqVO.getContent())
-                .or()
-                .eqIfExists(EduExpDO::getEducationType, reqVO.getEduType())
-                .or();
-
-        // 工作经验
-        query.leftJoin(WorkExpDO.class, WorkExpDO::getUserId, PersonInfoDO::getUserId);
-        query.likeIfExists(WorkExpDO::getEnterpriseName, reqVO.getContent())
-                .or()
-                .likeIfExists(WorkExpDO::getPositionName, reqVO.getContent())
-                .or()
-                .likeIfExists(WorkExpDO::getDeptName, reqVO.getContent())
-                .or()
-                .likeIfExists(WorkExpDO::getContent, reqVO.getContent())
-                .or()
-                .likeIfExists(WorkExpDO::getAchievement, reqVO.getContent())
-                .or();
+//
+//
+//        // 教育经历
+//        query.leftJoin(EduExpDO.class, EduExpDO::getUserId, PersonInfoDO::getUserId);
+//        query.likeIfExists(EduExpDO::getSchoolName, reqVO.getContent())
+//                .or()
+//                .likeRightIfExists(EduExpDO::getMajor, reqVO.getContent())
+//                .or()
+//                .eqIfExists(EduExpDO::getEducationType, reqVO.getEduType())
+//                .or();
+//
+//        // 工作经验
+//        query.leftJoin(WorkExpDO.class, WorkExpDO::getUserId, PersonInfoDO::getUserId);
+//        query.likeIfExists(WorkExpDO::getEnterpriseName, reqVO.getContent())
+//                .or()
+//                .likeRightIfExists(WorkExpDO::getPositionName, reqVO.getContent())
+//                .or()
+//                .likeRightIfExists(WorkExpDO::getDeptName, reqVO.getContent())
+//                .or()
+//                .likeIfExists(WorkExpDO::getContent, reqVO.getContent())
+//                .or()
+//                .likeIfExists(WorkExpDO::getAchievement, reqVO.getContent())
+//                .or();
 
 //        // 项目经验
 //        query.leftJoin(ProjectExpDO.class, ProjectExpDO::getUserId, PersonInfoDO::getUserId);
@@ -210,4 +224,13 @@ public interface PersonInfoMapper extends BaseMapperX<PersonInfoDO> {
         return selectJoinPage(reqVO, PersonInfoRespVO.class, query);
     }
 
+    /** 根据id查询人才信息 **/
+    default PageResult<PersonInfoRespVO> queryPageById(List<Long> ids, PageParam pageParam) {
+        MPJLambdaWrapperX<PersonInfoDO> query = new MPJLambdaWrapperX<>();
+        query.selectAsClass(PersonInfoDO.class, PersonInfoRespVO.class);
+        query.inIfPresent(PersonInfoDO::getId, ids);
+        query.orderByDesc(PersonInfoDO::getUpdateTime);
+        return selectJoinPage(pageParam, PersonInfoRespVO.class, query);
+    }
+
 }

+ 134 - 26
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/old/MdeOldSyncService.java

@@ -2,6 +2,7 @@ package com.citu.module.menduner.system.old;
 
 import cn.hutool.core.collection.CollUtil;
 import com.citu.framework.common.util.date.DateUtils;
+import com.citu.framework.common.util.object.ObjectUtils;
 import com.citu.framework.mybatis.core.query.LambdaQueryWrapperX;
 import com.citu.framework.tenant.core.aop.TenantIgnore;
 import com.citu.framework.tenant.core.db.TenantBaseDO;
@@ -47,6 +48,8 @@ import org.springframework.util.StringUtils;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.time.temporal.ChronoUnit;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -129,26 +132,30 @@ public class MdeOldSyncService {
     private JobInterestedMapper jobInterestedMapper;
     @Resource
     private OldInterestedAddsMapper oldInterestedAddsMapper;
+    @Resource
+    private OldMdeSubscribedPositionsMapper oldSubscribedPositionsMapper;
 
     private String url = "https://www.mendunerhr.com/";
 
     @Async
     @TenantIgnore
     public void run() {
-        // 同步区域
-        syncArea();
-        // 同步感兴趣城市
+//        // 同步区域
+//        syncArea();
+        // 同步感兴趣城市 or 订阅的职位类型
         syncInterested();
-        // 同步职位信息
-        syncPosition();
-        // 同步用户信息
-        syncUser();
-        // 同步发布职位
-        syncJob();
-        // 同步人才工作经历、教育经历
-        syncPersonExtend();
-        // 同步人才简历附件、投递简历
-        syncCv();
+//        // 同步职位信息
+//        syncPosition();
+//        // 同步用户信息
+//        syncUser();
+//        // 同步发布职位
+//        syncJob();
+//        // 同步人才工作经历、教育经历
+//        syncPersonExtend();
+//        // 同步人才简历附件、投递简历
+//        syncCv();
+//        // 计算工作年限和最高学历
+//        syncEduAndWork();
     }
 
     public void syncArea() {
@@ -190,36 +197,77 @@ public class MdeOldSyncService {
         Map<Long, List<OldInterestedAdds>> groupByUser = oldInterestedAddsList.stream()
                 .collect(Collectors.groupingBy(OldInterestedAdds::getUserCode));
 
-        groupByUser.entrySet().forEach(user -> {
 
+        List<OldMdeSubscribedPositions> oldSubscribedPositionsList =
+                oldSubscribedPositionsMapper.selectList(new LambdaQueryWrapperX<OldMdeSubscribedPositions>()
+                        .eq(OldMdeSubscribedPositions::getDelFlag, 0));
 
+        oldSubscribedPositionsList.forEach(oldSubscribedPositions -> {
+            // 查找求职意向
             JobInterestedDO jobInterested = jobInterestedMapper
                     .selectOne(new LambdaQueryWrapperX<JobInterestedDO>()
-                            .eq(JobInterestedDO::getUserId, user.getKey())
+                            .eq(JobInterestedDO::getUserId, oldSubscribedPositions.getUserCode())
+                            .eq(JobInterestedDO::getPositionId, oldSubscribedPositions.getPositionId())
                     );
 
             Set<String> interestedAreaIdList = new HashSet<>();
 
-            for (OldInterestedAdds oldInterestedAdds : user.getValue()) {
-                interestedAreaIdList.add(oldInterestedAdds.getIntdCity());
+            if (groupByUser.containsKey(oldSubscribedPositions.getUserCode())) {
+                for (OldInterestedAdds oldInterestedAdds : groupByUser.get(oldSubscribedPositions.getUserCode())) {
+                    interestedAreaIdList.add(oldInterestedAdds.getIntdCity());
+                }
             }
 
-            if (null != jobInterested&& CollUtil.isNotEmpty(jobInterested.getIndustryIdList())) {
-                interestedAreaIdList.addAll(jobInterested.getIndustryIdList());
+
+            if (null != jobInterested && CollUtil.isNotEmpty(jobInterested.getInterestedAreaIdList())) {
+                interestedAreaIdList.addAll(jobInterested.getInterestedAreaIdList());
             }
 
+
             JobInterestedDO insert = JobInterestedDO.builder()
-                    .id(null == jobInterested ? user.getKey() : jobInterested.getId())
-                    .userId(user.getKey())
+                    .id(null == jobInterested ? oldSubscribedPositions.getUserCode()+oldSubscribedPositions.getPositionId()
+                            : jobInterested.getId())
+                    .userId( oldSubscribedPositions.getUserCode())
+                    .positionId(oldSubscribedPositions.getPositionId())
                     .jobType(JobTypeEnum.FULL_TIME.getType())
-                    .interestedAreaIdList(new ArrayList<>(interestedAreaIdList))
+                    .interestedAreaIdList(interestedAreaIdList.size()>0?new ArrayList<>(interestedAreaIdList):null)
                     .build();
 
             setCommon(insert);
 
             jobInterestedMapper.insertOrUpdate(insert);
-
         });
+
+//        groupByUser.entrySet().forEach(user -> {
+//
+//
+//            JobInterestedDO jobInterested = jobInterestedMapper
+//                    .selectOne(new LambdaQueryWrapperX<JobInterestedDO>()
+//                            .eq(JobInterestedDO::getUserId, user.getKey())
+//                    );
+//
+//            Set<String> interestedAreaIdList = new HashSet<>();
+//
+//            for (OldInterestedAdds oldInterestedAdds : user.getValue()) {
+//                interestedAreaIdList.add(oldInterestedAdds.getIntdCity());
+//            }
+//
+//            if (null != jobInterested && CollUtil.isNotEmpty(jobInterested.getInterestedAreaIdList())) {
+//                interestedAreaIdList.addAll(jobInterested.getInterestedAreaIdList());
+//            }
+//
+//            JobInterestedDO insert = JobInterestedDO.builder()
+//                    .id(null == jobInterested ? user.getKey() : jobInterested.getId())
+//                    .userId(user.getKey())
+//                    .jobType(JobTypeEnum.FULL_TIME.getType())
+//                    .interestedAreaIdList(new ArrayList<>(interestedAreaIdList))
+//                    .build();
+//
+//            setCommon(insert);
+//
+//            jobInterestedMapper.insertOrUpdate(insert);
+//
+//        });
     }
 
     @Async
@@ -258,7 +306,7 @@ public class MdeOldSyncService {
                     if (null != positionDO) {
                         return;
                     }
-                    if("领导".equals(oldMdeDepartment.getDepdNameCn())) {
+                    if ("领导".equals(oldMdeDepartment.getDepdNameCn())) {
                         oldMdeDepartment.setDepdNameCn("高层");
                     }
                     PositionDO insertionDO = PositionDO.builder()
@@ -305,7 +353,6 @@ public class MdeOldSyncService {
 
     }
 
-
     public void syncUser() {
 
         // 个人用户
@@ -455,7 +502,6 @@ public class MdeOldSyncService {
 
     }
 
-
     public void syncJob() {
         // 职位信息
         List<OldMdeJobAdvertised> jobList = oldJobAdvertisedMapper.selectList();
@@ -609,6 +655,68 @@ public class MdeOldSyncService {
         });
     }
 
+
+    public void syncEduAndWork() {
+        List<PersonInfoDO> personList = personInfoMapper.selectList();
+        personList.forEach(person -> {
+            boolean isUpdate = false;
+            EduExpDO eduMax = eduExpMapper.selectMaxEducationByUserId(person.getUserId());
+            if (null != eduMax) {
+                isUpdate = true;
+                person.setEduType(eduMax.getEducationType());
+            }
+
+            List<WorkExpDO> workList = workExpMapper.selectByUserIdList(person.getUserId());
+            if (CollUtil.isNotEmpty(workList)) {
+                isUpdate = true;
+                // 计算工龄
+                // 计算总工龄
+                long totalMonthsOfWork = 0;
+                for (WorkExpDO workExp : workList) {
+                    LocalDateTime startDate = workExp.getStartTime();
+                    LocalDateTime endDate = ObjectUtils.defaultIfNull(workExp.getEndTime(), LocalDateTime.now());
+
+                    // 检查开始日期是否为空
+                    if (startDate == null) {
+                        log.warn("Start date is null for work experience of user: {}", person.getUserId());
+                        continue;
+                    }
+
+                    // 计算工作时长(以月为单位)
+                    long monthsOfWork = ChronoUnit.MONTHS.between(startDate, endDate);
+                    totalMonthsOfWork += monthsOfWork;
+                }
+
+                // 确定工作经验类型
+                double totalYearsOfWork = totalMonthsOfWork / 12.0; // 转换年
+                ExpTypeEnum expType = null;
+                if (totalYearsOfWork < 1) {
+                    expType = ExpTypeEnum.LESS_THAN_ONE_YEAR;
+                } else if (totalYearsOfWork >= 1 && totalYearsOfWork < 3) {
+                    expType = ExpTypeEnum.ONE_TO_THREE_YEARS;
+                } else if (totalYearsOfWork >= 3 && totalYearsOfWork < 5) {
+                    expType = ExpTypeEnum.THREE_TO_FIVE_YEARS;
+                } else if (totalYearsOfWork >= 5 && totalYearsOfWork < 10) {
+                    expType = ExpTypeEnum.FIVE_TO_TEN_YEARS;
+                } else if (totalYearsOfWork >= 10 && totalYearsOfWork < 20) {
+                    expType = ExpTypeEnum.MORE_THAN_TEN_YEARS;
+                } else if (totalYearsOfWork >= 20) {
+                    expType = ExpTypeEnum.MORE_THAN_TWENTY_YEARS;
+                }
+                person.setExpType(null == expType ? null : expType.getType());
+
+            }
+
+
+            if (isUpdate) {
+                personInfoMapper.updateById(person);
+            }
+
+
+        });
+
+    }
+
     private void setCommon(TenantBaseDO tenantBaseDO) {
         tenantBaseDO.setTenantId(155L);
     }

+ 21 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/old/dataobject/OldMdeSubscribedPositions.java

@@ -0,0 +1,21 @@
+package com.citu.module.menduner.system.old.dataobject;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+@Data
+@TableName("mde_subscribed_positions")
+public class OldMdeSubscribedPositions extends OldBaseEntity {
+
+    /**
+     * 用户code
+     */
+    private Long userCode;
+
+    private Long positionId;
+
+    private Long depdId;
+
+    private Long positionGrade;
+
+}

+ 11 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/old/mysql/OldMdeSubscribedPositionsMapper.java

@@ -0,0 +1,11 @@
+package com.citu.module.menduner.system.old.mysql;
+
+import com.baomidou.dynamic.datasource.annotation.Slave;
+import com.citu.framework.mybatis.core.mapper.BaseMapperX;
+import com.citu.module.menduner.system.old.dataobject.OldMdeSubscribedPositions;
+import org.apache.ibatis.annotations.Mapper;
+
+@Slave
+@Mapper
+public interface OldMdeSubscribedPositionsMapper extends BaseMapperX<OldMdeSubscribedPositions> {
+}

+ 8 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/person/PersonIntegrationService.java

@@ -4,6 +4,7 @@ import com.citu.framework.common.pojo.PageResult;
 import com.citu.module.menduner.system.controller.app.recruit.person.vo.AppRecruitPersonDetailRespVO;
 import com.citu.module.menduner.system.controller.base.person.PersonMapQueryReqVO;
 import com.citu.module.menduner.system.controller.base.person.PersonQueryReqVO;
+import com.citu.module.menduner.system.controller.base.person.PersonRecommendQueryReqVO;
 import com.citu.module.menduner.system.controller.base.person.info.PersonInfoPageReqVO;
 import com.citu.module.menduner.system.controller.base.person.info.PersonInfoRespVO;
 
@@ -44,6 +45,13 @@ public interface PersonIntegrationService {
      **/
     PageResult<PersonInfoRespVO> queryPage(PersonQueryReqVO reqVO);
 
+    /**
+     * 人才信息-根据发布职位推荐人才
+     * @param reqVO 发布职位id
+     * @return PageResult<PersonInfoRespVO>
+     **/
+    PageResult<PersonInfoRespVO> queryRecommendJob(PersonRecommendQueryReqVO reqVO);
+
 
     /**
      * 企业人才库-根据条件查询人才

+ 24 - 4
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/person/PersonIntegrationServiceImpl.java

@@ -5,10 +5,12 @@ import com.citu.framework.dict.core.DictFrameworkUtils;
 import com.citu.module.menduner.common.util.LoginUserContext;
 import com.citu.module.menduner.system.api.python.GraphApi;
 import com.citu.module.menduner.system.api.python.GraphQueryDTO;
+import com.citu.module.menduner.system.api.python.GraphQueryPageDTO;
 import com.citu.module.menduner.system.api.python.GraphSendDTO;
 import com.citu.module.menduner.system.controller.app.recruit.person.vo.AppRecruitPersonDetailRespVO;
 import com.citu.module.menduner.system.controller.base.person.PersonMapQueryReqVO;
 import com.citu.module.menduner.system.controller.base.person.PersonQueryReqVO;
+import com.citu.module.menduner.system.controller.base.person.PersonRecommendQueryReqVO;
 import com.citu.module.menduner.system.controller.base.person.info.PersonDetailRespVO;
 import com.citu.module.menduner.system.controller.base.person.info.PersonInfoPageReqVO;
 import com.citu.module.menduner.system.controller.base.person.info.PersonInfoRespVO;
@@ -38,6 +40,7 @@ import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Set;
 
@@ -194,10 +197,10 @@ public class PersonIntegrationServiceImpl implements PersonIntegrationService {
 
             graphProducer.send(
                     new GraphSendDTO(
-                                    SyncConstants.SYNC_ALL,
-                                    SyncConstants.PERSON,
-                                    resp
-                            )
+                            SyncConstants.SYNC_ALL,
+                            SyncConstants.PERSON,
+                            resp
+                    )
             );
 
         }
@@ -234,6 +237,7 @@ public class PersonIntegrationServiceImpl implements PersonIntegrationService {
 
     @Override
     public PageResult<PersonInfoRespVO> queryPage(PersonQueryReqVO reqVO) {
+        //TODO 后续改es
         if (null != reqVO.getAreaIds()) {
             // 取最后一个元素
             Set<Long> areaIds = areaService.
@@ -248,6 +252,22 @@ public class PersonIntegrationServiceImpl implements PersonIntegrationService {
         return personInfoMapper.queryPage(reqVO);
     }
 
+    @Override
+    public PageResult<PersonInfoRespVO> queryRecommendJob(PersonRecommendQueryReqVO reqVO) {
+        Long[] ids = null;
+        if (null != reqVO.getJobId()) {
+            try {
+                GraphQueryPageDTO condition = GraphQueryPageDTO.builder().type(SyncConstants.PERSON).build();
+                condition.setCurrent(reqVO.getPageNo());
+                condition.setSize(reqVO.getPageSize());
+                ids = graphApi.queryRecommendJob(condition).getCheckedData();
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+        return personInfoMapper.queryPageById(Arrays.asList(ids), reqVO);
+    }
+
     @Override
     public PageResult<PersonInfoRespVO> selectEnterpriseTalentPoolPage(PersonInfoPageReqVO reqVO) {
         return personInfoMapper.selectEnterpriseTalentPoolPage(LoginUserContext.getEnterpriseId(), reqVO);