瀏覽代碼

1、增加知识图谱标签查询,人才地图查询接口

rayson 9 月之前
父節點
當前提交
8cce2d8e98

+ 8 - 2
menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/api/python/GraphApi.java

@@ -5,6 +5,7 @@ import com.citu.module.menduner.system.enums.ApiConstants;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 
@@ -12,8 +13,13 @@ import org.springframework.web.bind.annotation.RequestBody;
 @Tag(name = "RPC 服务 - python 知识图谱")
 public interface GraphApi {
 
+    @Async
     @PostMapping("/rocket/receive/data")
-    @Operation(summary = "发生数据到知识图谱")
-    <T> CommonResult<Boolean> send(@RequestBody GraphSendDTO<T> resp);
+    @Operation(summary = "发送数据到知识图谱")
+    <T> CommonResult<Boolean> send(@RequestBody GraphSendDTO<T> sendDTO);
+
+    @PostMapping("/rocket/query/graph")
+    @Operation(summary = "查询知识图谱数据")
+    CommonResult<Long[]> query(@RequestBody GraphQueryDTO queryDTO);
 
 }

+ 30 - 0
menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/api/python/GraphQueryDTO.java

@@ -0,0 +1,30 @@
+package com.citu.module.menduner.system.api.python;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Collections;
+import java.util.List;
+
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+@Schema(description = "图谱标签查询")
+public class GraphQueryDTO {
+
+    /**
+     * 标签
+     **/
+    private String[] label;
+
+    /**
+     * 数据类型
+     **/
+    private String type;
+
+
+}

+ 39 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/recruit/person/AppRecruitPersonMapController.java

@@ -0,0 +1,39 @@
+package com.citu.module.menduner.system.controller.app.recruit.person;
+
+import com.citu.framework.common.pojo.CommonResult;
+import com.citu.framework.common.pojo.PageResult;
+import com.citu.framework.security.core.annotations.PreAuthenticated;
+import com.citu.module.menduner.system.controller.app.recruit.person.cv.AppRecruitJobCvRelPageReqVO;
+import com.citu.module.menduner.system.controller.app.recruit.person.cv.AppRecruitJobCvRelRespVO;
+import com.citu.module.menduner.system.controller.base.person.PersonMapQueryReqVO;
+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;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+
+import static com.citu.framework.common.pojo.CommonResult.success;
+
+@Tag(name = "招聘端 - 人才地图")
+@RestController
+@RequestMapping("/menduner/system/recruit/person-map")
+@Validated
+public class AppRecruitPersonMapController {
+
+    @Resource
+    private PersonIntegrationService personIntegrationService;
+
+    @PreAuthenticated
+    @GetMapping("/page")
+    @Operation(summary = "分页查询人才地图")
+    public CommonResult<PageResult<PersonInfoRespVO>> query(@Valid PersonMapQueryReqVO reqVO) {
+        return success(personIntegrationService.queryPage(reqVO));
+    }
+
+}

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

@@ -0,0 +1,54 @@
+package com.citu.module.menduner.system.controller.base.person;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.citu.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+
+import java.math.BigDecimal;
+
+@Schema(description = "人才地图查询条件分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class PersonMapQueryReqVO extends PageParam {
+
+    @Schema(description = "真实姓名", example = "王五")
+    private String name;
+
+    @Schema(description = "用户性别")
+    private String sex;
+
+    @Schema(description = "年龄", example = "[18,20]")
+    private Integer[] age;
+
+    @Schema(description = "婚姻状况(0未婚 1已婚 2离异 3保密)", example = "1")
+    private String maritalStatus;
+
+    @Schema(description = "现居住地", example = "8366")
+    private Long[] areaIds;
+
+    @Schema(description = "户籍地", example = "8366")
+    private Long[] regIds;
+
+    @Schema(description = "求职类型(0全职 1兼职 2临时 3实习)", example = "1")
+    private String jobType;
+
+    @Schema(description = "求职状态(0离职-随时到岗 1在职-月内到岗 2在职-考虑机会 3在职-暂不考虑)", example = "1")
+    private String jobStatus;
+
+    @Schema(description = "工作经验", example = "1")
+    private String[] expType;
+
+    @Schema(description = "学历", example = "2")
+    private String[] eduType;
+
+    @Schema(description = "期望薪资", example = "[10000,20000]")
+    private BigDecimal[] pay;
+
+    @Schema(description = "标签", example = "[\"形象好\",\"全日制\"]")
+    private String[] labels;
+
+}

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

@@ -4,15 +4,15 @@ import com.citu.framework.common.pojo.PageResult;
 import com.citu.framework.mybatis.core.mapper.BaseMapperX;
 import com.citu.framework.mybatis.core.query.LambdaQueryWrapperX;
 import com.citu.framework.mybatis.core.query.MPJLambdaWrapperX;
-import com.citu.module.menduner.system.controller.app.recruit.person.vo.AppRecruitPersonDetailRespVO;
-import com.citu.module.menduner.system.controller.base.person.info.PersonDetailRespVO;
+import com.citu.module.menduner.system.controller.base.person.PersonMapQueryReqVO;
 import com.citu.module.menduner.system.controller.base.person.info.PersonInfoPageReqVO;
-import com.citu.module.menduner.system.dal.dataobject.job.JobAdvertisedDO;
+import com.citu.module.menduner.system.controller.base.person.info.PersonInfoRespVO;
+import com.citu.module.menduner.system.dal.dataobject.job.JobInterestedDO;
 import com.citu.module.menduner.system.dal.dataobject.person.PersonInfoDO;
 import org.apache.ibatis.annotations.Mapper;
-import org.springframework.util.StringUtils;
 
-import java.util.List;
+import java.time.LocalDate;
+import java.time.ZoneId;
 
 /**
  * 人才信息-人才档案 Mapper
@@ -36,7 +36,7 @@ public interface PersonInfoMapper extends BaseMapperX<PersonInfoDO> {
                 .eqIfPresent(PersonInfoDO::getEduType, reqVO.getEduType())
                 .eqIfPresent(PersonInfoDO::getExpType, reqVO.getExpType())
                 .betweenIfPresent(PersonInfoDO::getCreateTime, reqVO.getCreateTime())
-                .like(null!=reqVO.getUserId(),PersonInfoDO::getUserId, String.valueOf(reqVO.getUserId()))
+                .like(null != reqVO.getUserId(), PersonInfoDO::getUserId, String.valueOf(reqVO.getUserId()))
                 .orderByDesc(PersonInfoDO::getId));
     }
 
@@ -44,4 +44,38 @@ public interface PersonInfoMapper extends BaseMapperX<PersonInfoDO> {
         return selectOne(PersonInfoDO::getUserId, userId);
     }
 
+    /**
+     * 根据用户id和查询条件查询人才信息
+     **/
+    default PageResult<PersonInfoRespVO> queryPage(PersonMapQueryReqVO reqVO, Long[] userIds) {
+        MPJLambdaWrapperX<PersonInfoDO> query = new MPJLambdaWrapperX<>();
+        query.selectAsClass(PersonInfoDO.class, PersonInfoRespVO.class);
+        query.likeIfPresent(PersonInfoDO::getName, reqVO.getName());
+        query.eqIfPresent(PersonInfoDO::getSex, reqVO.getSex());
+
+        if (null != reqVO.getAge()) {
+            LocalDate now = LocalDate.now(ZoneId.systemDefault());
+            // 最大年龄加一天,包含最后一天
+            LocalDate min = now.minusYears(reqVO.getAge()[0]).plusDays(1);
+            LocalDate max = now.minusYears(reqVO.getAge()[1]);
+            query.ge(PersonInfoDO::getBirthday, min);
+            query.le(PersonInfoDO::getBirthday, max);
+        }
+        query.eqIfPresent(PersonInfoDO::getMaritalStatus, reqVO.getMaritalStatus());
+        query.inIfPresent(PersonInfoDO::getAreaId, reqVO.getAreaIds());
+        query.inIfPresent(PersonInfoDO::getRegId, reqVO.getRegIds());
+        query.eqIfPresent(PersonInfoDO::getJobType, reqVO.getJobType());
+        query.eqIfPresent(PersonInfoDO::getJobStatus, reqVO.getJobStatus());
+        query.eqIfPresent(PersonInfoDO::getEduType, reqVO.getEduType());
+        query.eqIfPresent(PersonInfoDO::getExpType, reqVO.getExpType());
+        query.inIfPresent(PersonInfoDO::getUserId, userIds);
+
+        if (null != reqVO.getPay()) {
+            query.leftJoin(JobInterestedDO.class, JobInterestedDO::getUserId, PersonInfoDO::getUserId);
+            query.ge(JobInterestedDO::getPayTo, reqVO.getPay()[0]);
+            query.le(JobInterestedDO::getPayTo, reqVO.getPay()[1]);
+        }
+        return selectJoinPage(reqVO, PersonInfoRespVO.class, query);
+    }
+
 }

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

@@ -1,6 +1,9 @@
 package com.citu.module.menduner.system.service.person;
 
+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.info.PersonInfoRespVO;
 
 /**
  * 人才信息相关的整合层
@@ -20,4 +23,12 @@ public interface PersonIntegrationService {
      * 同步所有人才数据到知识图谱
      **/
     void syncGraph();
+
+
+    /**
+     * 人才地图-根据条件查询人才
+     * @param reqVO 查询条件
+     * @return PageResult<PersonInfoRespVO>
+     **/
+    PageResult<PersonInfoRespVO> queryPage(PersonMapQueryReqVO reqVO);
 }

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

@@ -1,10 +1,14 @@
 package com.citu.module.menduner.system.service.person;
 
+import com.citu.framework.common.pojo.PageResult;
 import com.citu.framework.dict.core.DictFrameworkUtils;
 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.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.info.PersonDetailRespVO;
+import com.citu.module.menduner.system.controller.base.person.info.PersonInfoRespVO;
 import com.citu.module.menduner.system.convert.*;
 import com.citu.module.menduner.system.dal.dataobject.eduexp.EduExpDO;
 import com.citu.module.menduner.system.dal.dataobject.job.JobInterestedDO;
@@ -181,4 +185,14 @@ public class PersonIntegrationServiceImpl implements PersonIntegrationService {
                         )
         ).getCheckedData();
     }
+
+    @Override
+    public PageResult<PersonInfoRespVO> queryPage(PersonMapQueryReqVO reqVO) {
+        Long[] ids = graphApi.query(
+                GraphQueryDTO.builder()
+                        .label(reqVO.getLabels()).type(SyncConstants.PERSON)
+                        .build()
+        ).getCheckedData();
+        return personInfoMapper.queryPage(reqVO, ids);
+    }
 }