Przeglądaj źródła

1、优化招聘端-找人逻辑

rayson 4 miesięcy temu
rodzic
commit
69ffbb2fa9
22 zmienionych plików z 360 dodań i 55 usunięć
  1. 5 0
      citu-framework/citu-common/src/main/java/com/citu/framework/common/util/collection/CollectionUtils.java
  2. 0 6
      citu-framework/citu-spring-boot-starter-mybatis/src/main/java/com/citu/framework/mybatis/core/query/MPJLambdaWrapperX.java
  3. 33 0
      menduner/menduner-flames-biz/src/main/java/com/citupro/module/menduner/flames/config/FlamesMetaObjectHandler.java
  4. 15 9
      menduner/menduner-flames-biz/src/main/java/com/citupro/module/menduner/flames/config/MyBatiesPlusConfiguration.java
  5. 30 0
      menduner/menduner-flames-biz/src/main/java/com/citupro/module/menduner/flames/controller/admin/SchoolAdminController.java
  6. 61 0
      menduner/menduner-flames-biz/src/main/java/com/citupro/module/menduner/flames/controller/admin/UserAuthRecordAdminController.java
  7. 11 1
      menduner/menduner-flames-biz/src/main/java/com/citupro/module/menduner/flames/controller/app/UserAuthRecordController.java
  8. 1 0
      menduner/menduner-flames-biz/src/main/java/com/citupro/module/menduner/flames/serviceimpl/SchoolServiceImpl.java
  9. 5 2
      menduner/menduner-flames-biz/src/main/java/com/citupro/module/menduner/flames/serviceimpl/UserAuthRecordServiceImpl.java
  10. 20 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/PersonRecommendQueryReqVO.java
  11. 4 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/info/PersonInfoRespVO.java
  12. 18 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/position/PositionWebRespVO.java
  13. 3 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/convert/PositionConvert.java
  14. 2 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/job/JobAdvertisedMapper.java
  15. 5 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/job/JobInterestedMapper.java
  16. 20 11
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/person/PersonInfoMapper.java
  17. 1 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/person/StudentPracticeRecordMapper.java
  18. 10 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/redis/RedisKeyConstants.java
  19. 6 3
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/area/AreaServiceImpl.java
  20. 84 15
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/person/PersonIntegrationServiceImpl.java
  21. 9 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/position/PositionService.java
  22. 17 5
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/position/PositionServiceImpl.java

+ 5 - 0
citu-framework/citu-common/src/main/java/com/citu/framework/common/util/collection/CollectionUtils.java

@@ -335,4 +335,9 @@ public class CollectionUtils {
         return list.stream().filter(Objects::nonNull).flatMap(Collection::stream).collect(Collectors.toList());
     }
 
+
+    @SafeVarargs
+    public static <T> List<T> ofDefaultIfNull(T... t) {
+        return null != t ? asList(t) : Collections.emptyList();
+    }
 }

+ 0 - 6
citu-framework/citu-spring-boot-starter-mybatis/src/main/java/com/citu/framework/mybatis/core/query/MPJLambdaWrapperX.java

@@ -47,12 +47,6 @@ public class MPJLambdaWrapperX<T> extends MPJLambdaWrapper<T> {
         return this;
     }
 
-    public MPJLambdaWrapperX<T> inIfPresent(SFunction<T, ?> column, Object... values) {
-        if (ObjectUtil.isAllNotEmpty(values) && !ArrayUtil.isEmpty(values)) {
-            return (MPJLambdaWrapperX<T>) super.in(column, values);
-        }
-        return this;
-    }
 
     public MPJLambdaWrapperX<T> eqIfPresent(SFunction<T, ?> column, Object val) {
         if (ObjectUtil.isNotEmpty(val)) {

+ 33 - 0
menduner/menduner-flames-biz/src/main/java/com/citupro/module/menduner/flames/config/FlamesMetaObjectHandler.java

@@ -0,0 +1,33 @@
+package com.citupro.module.menduner.flames.config;
+
+import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
+import org.apache.ibatis.reflection.MetaObject;
+import org.springframework.context.annotation.Primary;
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDateTime;
+
+/**
+ * 火苗儿表的字段填充
+ **/
+@Primary
+@Component
+public class FlamesMetaObjectHandler implements MetaObjectHandler {
+
+
+    @Override
+    public void insertFill(MetaObject metaObject) {
+        if(metaObject.hasGetter("createDate") && LocalDateTime.class.equals(metaObject.getGetterType("createDate"))) {
+            this.setFieldValByName("createDate", LocalDateTime.now(), metaObject);
+        }
+
+
+    }
+
+    @Override
+    public void updateFill(MetaObject metaObject) {
+        if(metaObject.hasGetter("updateDate") && LocalDateTime.class.equals(metaObject.getGetterType("createDate"))) {
+            this.setFieldValByName("updateDate", LocalDateTime.now(), metaObject);
+        }
+    }
+}

+ 15 - 9
menduner/menduner-flames-biz/src/main/java/com/citupro/module/menduner/flames/config/MyBatiesPlusConfiguration.java

@@ -103,24 +103,27 @@ public class MyBatiesPlusConfiguration implements InitializingBean {
         return interceptor;
     }
 
-    @Bean
-    public SqlInterceptor intSqlInterceptor() {
-        SqlInterceptor sqlInterceptor = new SqlInterceptor();
-        return sqlInterceptor;
-    }
+//    @Bean
+//    public SqlInterceptor intSqlInterceptor() {
+//        SqlInterceptor sqlInterceptor = new SqlInterceptor();
+//        return sqlInterceptor;
+//    }
 
 
 
     @Bean(name = "primarySqlSessionFactory")
     @Primary
     public SqlSessionFactory primarySqlSessionFactory(@Qualifier("primaryDataSource") DataSource dataSource
-            ,MybatisPlusInterceptor mybatisPlusInterceptor,SqlInterceptor sqlInterceptor) throws Exception {
+            ,MybatisPlusInterceptor mybatisPlusInterceptor
+//            ,SqlInterceptor sqlInterceptor
+    ) throws Exception {
         Resource[] resources = new PathMatchingResourcePatternResolver().getResources("classpath*:mybatis/mapper/primary/*.xml");
 
 
         MybatisSqlSessionFactoryBean factory = new MybatisSqlSessionFactoryBean();
         factory.setVfs(SpringBootVFS.class);
-        factory.setPlugins(mybatisPlusInterceptor,sqlInterceptor);
+        factory.setPlugins(mybatisPlusInterceptor);
+//        factory.setPlugins(mybatisPlusInterceptor,sqlInterceptor);
         if (StringUtils.hasText(this.properties.getConfigLocation())) {
             factory.setConfigLocation(this.resourceLoader.getResource(this.properties.getConfigLocation()));
         }
@@ -206,12 +209,15 @@ public class MyBatiesPlusConfiguration implements InitializingBean {
 
     @Bean(name = "mendunerSqlSessionFactory")
     public SqlSessionFactory mendunerSqlSessionFactory(@Qualifier("mendunerDataSource") DataSource dataSource
-            ,MybatisPlusInterceptor mybatisPlusInterceptor,SqlInterceptor sqlInterceptor) throws Exception {
+            ,MybatisPlusInterceptor mybatisPlusInterceptor
+//            ,SqlInterceptor sqlInterceptor
+    ) throws Exception {
 
         MybatisSqlSessionFactoryBean factory = new MybatisSqlSessionFactoryBean();
 
 //        factory.setma
-        factory.setPlugins(mybatisPlusInterceptor,sqlInterceptor);
+//        factory.setPlugins(mybatisPlusInterceptor,sqlInterceptor);
+        factory.setPlugins(mybatisPlusInterceptor);
 //        factory.setTypeAliasesPackage("com.citupro.flames.pojo");
         if (StringUtils.hasText(this.properties.getConfigLocation())) {
             factory.setConfigLocation(this.resourceLoader.getResource(this.properties.getConfigLocation()));

+ 30 - 0
menduner/menduner-flames-biz/src/main/java/com/citupro/module/menduner/flames/controller/admin/SchoolAdminController.java

@@ -60,5 +60,35 @@ public class SchoolAdminController {
         schoolService.schoolStudentDetailExport(reqVo,response.getOutputStream());
     }
 
+    /**
+     * 分页查询
+     * @eo.name 分页查询
+     * @eo.url /school/list
+     * @eo.method post
+     * @eo.request-type json
+     */
+    @PostMapping("/school/list")
+    public CommonResult getSchoolList(@RequestBody Map reqVo) {
+        School entity = BeanUtil.mapToBean(reqVo, School.class, true);
+        Page page = BeanUtil.mapToBean(reqVo, Page.class, true);
+        return schoolService.schoolList(page, entity);
+    }
+
+
+
+    /**
+     * 通过id查询
+     * @return R
+     * @eo.name 通过id查询
+     * @eo.url /school/detail
+     * @eo.method post
+     * @eo.request-type json
+     */
+    @PostMapping("/school/detail")
+    public CommonResult getById(@RequestBody School school) {
+        return schoolService.schoolDetail(school.getSchoolId());
+    }
+
+
 
 }

+ 61 - 0
menduner/menduner-flames-biz/src/main/java/com/citupro/module/menduner/flames/controller/admin/UserAuthRecordAdminController.java

@@ -0,0 +1,61 @@
+package com.citupro.module.menduner.flames.controller.admin;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.citu.framework.common.pojo.CommonResult;
+import com.citu.framework.security.core.util.SecurityFrameworkUtils;
+import com.citupro.module.menduner.flames.controller.base.reqvo.school.SchoolStudentDetailReqVo;
+import com.citupro.module.menduner.flames.controller.base.reqvo.system.user.auth.UserAuthRecordIdReqVo;
+import com.citupro.module.menduner.flames.controller.base.reqvo.system.user.auth.UserAuthRecordListReqVo;
+import com.citupro.module.menduner.flames.controller.base.vo.system.UserAuthRecordInfoVo;
+import com.citupro.module.menduner.flames.dal.mysql.UserAuthRecord;
+import com.citupro.module.menduner.flames.service.UserAuthRecordService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author auto
+ * @date 2023-09-18 19:03:51
+ * @eo.api-type http
+ * @eo.groupName 火苗儿.信息管理.资料审核记录
+ * @eo.path /flames
+ */
+@RequestMapping("/flames")
+@RestController
+public class UserAuthRecordAdminController {
+    @SuppressWarnings("all")
+    private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(UserAuthRecordAdminController.class);
+    @Autowired
+    private UserAuthRecordService userAuthRecordService;
+
+
+
+    /**
+     * @return Result
+     * @eo.name getSchoolInformation
+     * @eo.url /school/information
+     * @eo.method post
+     * @eo.request-type formdata
+     */
+    @PostMapping("/user/auth/record/get")
+    public CommonResult getUserAuthRecordBySchoolId(@RequestBody SchoolStudentDetailReqVo reqVo) {
+        return CommonResult.success(userAuthRecordService.getEntityById(reqVo.getSchoolId()));
+    }
+
+    /**
+     * @param userAuthRecord
+     * @return R
+     * @eo.name 保存
+     * @eo.url /user/auth/record/save
+     * @eo.method post
+     * @eo.request-type json
+     */
+    @PostMapping("/user/auth/record/save")
+    public CommonResult<UserAuthRecord> userAuthRecordSave(@RequestBody UserAuthRecord userAuthRecord) {
+        userAuthRecord.setAuthUserId(SecurityFrameworkUtils.getLoginUserId());
+        return userAuthRecordService.userAuthRecordSave(userAuthRecord);
+    }
+
+}

+ 11 - 1
menduner/menduner-flames-biz/src/main/java/com/citupro/module/menduner/flames/controller/app/UserAuthRecordController.java

@@ -5,8 +5,10 @@ import com.citu.framework.common.pojo.CommonResult;
 import com.citu.framework.security.core.util.SecurityFrameworkUtils;
 import com.citupro.module.menduner.flames.controller.base.reqvo.system.user.auth.UserAuthRecordIdReqVo;
 import com.citupro.module.menduner.flames.controller.base.reqvo.system.user.auth.UserAuthRecordListReqVo;
+import com.citupro.module.menduner.flames.controller.base.vo.school.SchoolInfoVo;
 import com.citupro.module.menduner.flames.controller.base.vo.system.UserAuthRecordInfoVo;
 import com.citupro.module.menduner.flames.dal.mysql.UserAuthRecord;
+import com.citupro.module.menduner.flames.service.SchoolService;
 import com.citupro.module.menduner.flames.service.UserAuthRecordService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -29,6 +31,9 @@ public class UserAuthRecordController {
     @Autowired
     private UserAuthRecordService userAuthRecordService;
 
+    @Autowired
+    private SchoolService schoolService;
+
     /**
      * @param reqVo
      * @return R
@@ -64,7 +69,12 @@ public class UserAuthRecordController {
      */
     @PostMapping("/user/auth/record/get")
     public CommonResult getUserAuthRecordBySchoolId() {
-        return CommonResult.success(userAuthRecordService.getUserAuthRecordById(SecurityFrameworkUtils.getLoginUserId()));
+        CommonResult<SchoolInfoVo> schoolInfo =
+                schoolService.getSchoolInformation(SecurityFrameworkUtils.getLoginUserId());
+        if(null == schoolInfo.getCheckedData()) {
+            return CommonResult.success(null);
+        }
+        return CommonResult.success(userAuthRecordService.getEntityById(schoolInfo.getCheckedData().getSchool().getSchoolId()));
     }
 
     /**

+ 1 - 0
menduner/menduner-flames-biz/src/main/java/com/citupro/module/menduner/flames/serviceimpl/SchoolServiceImpl.java

@@ -91,6 +91,7 @@ public class SchoolServiceImpl extends ServiceImpl<SchoolMapper, School> impleme
         school.setTages(null);
         LambdaQueryWrapper<School> schoolLambdaQueryWrapper = new LambdaQueryWrapper<>(school);
         schoolLambdaQueryWrapper.like(StringUtils.isNotBlank(schoolName), School::getSchoolName, schoolName);
+        schoolLambdaQueryWrapper.orderByDesc(School::getCreateDate);
         schoolMapper.selectPage(page, schoolLambdaQueryWrapper);
         return CommonResult.success(page);
     }

+ 5 - 2
menduner/menduner-flames-biz/src/main/java/com/citupro/module/menduner/flames/serviceimpl/UserAuthRecordServiceImpl.java

@@ -148,8 +148,11 @@ public class UserAuthRecordServiceImpl extends ServiceImpl<UserAuthRecordMapper,
 
     @Override
     public UserAuthRecord getEntityById(Long entityId) {
-        return userAuthRecordMapper.selectOne(new LambdaQueryWrapper<UserAuthRecord>()
-                .eq(UserAuthRecord::getEntityId, entityId));
+        LambdaQueryWrapper<UserAuthRecord> queryWrapper = new LambdaQueryWrapper<UserAuthRecord>()
+                .eq(UserAuthRecord::getEntityId, entityId)
+                .orderByDesc(UserAuthRecord::getCreateDate)
+                .last("limit 1");
+        return userAuthRecordMapper.selectOne(queryWrapper);
     }
 
     @Autowired

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

@@ -13,4 +13,24 @@ public class PersonRecommendQueryReqVO extends PageParam {
     @Schema(description = "职位id")
     private Long jobId;
 
+    @Schema(description = "职位id列表")
+    private List<Long> jobIds;
+
+    @Schema(description = "人才id列表")
+    private List<Long> ids;
+
+    // ========== 对职位的要求 ==========
+
+    @Schema(description = "职位类型id列表")
+    private List<Long> positionIds;
+
+    @Schema(description = "招聘类型")
+    private String type;
+
+    @Schema(description = "工作经验")
+    private String expType;
+
+    @Schema(description = "学历要求")
+    private String eduType;
+
 }

+ 4 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/info/PersonInfoRespVO.java

@@ -3,6 +3,7 @@ package com.citu.module.menduner.system.controller.base.person.info;
 import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.citu.module.menduner.system.controller.base.area.AreaWebRespVO;
+import com.citu.module.menduner.system.controller.base.position.PositionWebRespVO;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
@@ -110,4 +111,7 @@ public class PersonInfoRespVO {
 
     @Schema(description = "户籍地")
     private AreaWebRespVO reg;
+
+    @Schema(description = "感兴趣职位信息")
+    private PositionWebRespVO position;
 }

+ 18 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/position/PositionWebRespVO.java

@@ -0,0 +1,18 @@
+package com.citu.module.menduner.system.controller.base.position;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+@Schema(description = "职位信息 Response VO")
+@Data
+public class PositionWebRespVO {
+
+    @Schema(description = "职位类型名称")
+    private String positionNames;
+
+    @Schema(description = "职位信息")
+    private List<PositionRespVO> positionList;
+
+}

+ 3 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/convert/PositionConvert.java

@@ -2,6 +2,7 @@ package com.citu.module.menduner.system.convert;
 
 import com.citu.module.menduner.system.controller.app.jobhunt.position.vo.AppPositionChildrenRespVO;
 import com.citu.module.menduner.system.controller.app.jobhunt.position.vo.AppPositionSimpleRespVO;
+import com.citu.module.menduner.system.controller.base.position.PositionRespVO;
 import com.citu.module.menduner.system.dal.dataobject.position.PositionDO;
 import org.mapstruct.Mapper;
 import org.mapstruct.factory.Mappers;
@@ -15,6 +16,8 @@ public interface PositionConvert {
 
     AppPositionChildrenRespVO convert(PositionDO industryDO);
 
+    PositionRespVO convert2(PositionDO industryDO);
+
     List<AppPositionChildrenRespVO> convertList(List<PositionDO> list);
 
     List<AppPositionSimpleRespVO> convertList2(List<PositionDO> list);

+ 2 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/job/JobAdvertisedMapper.java

@@ -5,6 +5,7 @@ import cn.hutool.core.collection.CollUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.citu.framework.common.pojo.PageParam;
 import com.citu.framework.common.pojo.PageResult;
+import com.citu.framework.common.util.collection.CollectionUtils;
 import com.citu.framework.mybatis.core.mapper.BaseMapperX;
 import com.citu.framework.mybatis.core.query.LambdaQueryWrapperX;
 import com.citu.framework.mybatis.core.query.MPJLambdaWrapperX;
@@ -193,7 +194,7 @@ public interface JobAdvertisedMapper extends BaseMapperX<JobAdvertisedDO> {
 
         notExpireTime(query);
 
-        query.inIfPresent(JobAdvertisedDO::getId, reqVO.getIds());
+        query.inIfPresent(JobAdvertisedDO::getId, CollectionUtils.ofDefaultIfNull(reqVO.getIds()));
         query.inIfPresent(JobAdvertisedDO::getPositionId, reqVO.getPositionIds());
         query.eqIfPresent(JobAdvertisedDO::getHire, reqVO.getHire());
         if (null != reqVO.getNotNameList()) {

+ 5 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/job/JobInterestedMapper.java

@@ -47,4 +47,9 @@ public interface JobInterestedMapper extends BaseMapperX<JobInterestedDO> {
         return selectList(new LambdaQueryWrapperX<JobInterestedDO>()
                 .eqIfPresent(JobInterestedDO::getUserId, userId));
     }
+
+    default List<JobInterestedDO> selectByUserIdsList(List<Long> userIds) {
+        return selectList(new LambdaQueryWrapperX<JobInterestedDO>()
+                .inIfPresent(JobInterestedDO::getUserId, userIds));
+    }
 }

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

@@ -3,6 +3,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.common.util.collection.CollectionUtils;
 import com.citu.framework.mybatis.core.mapper.BaseMapperX;
 import com.citu.framework.mybatis.core.query.LambdaQueryWrapperX;
 import com.citu.framework.mybatis.core.query.MPJLambdaWrapperX;
@@ -11,6 +12,7 @@ import com.citu.module.menduner.system.controller.app.jobhunt.person.vo.AppInvit
 import com.citu.module.menduner.system.controller.base.CommonRespVO;
 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;
 import com.citu.module.menduner.system.dal.dataobject.enterprise.EnterpriseTalentPoolDO;
@@ -154,13 +156,13 @@ public interface PersonInfoMapper extends BaseMapperX<PersonInfoDO> {
             }
         }
         query.eqIfPresent(PersonInfoDO::getMaritalStatus, reqVO.getMaritalStatus());
-        query.inIfPresent(PersonInfoDO::getAreaId, reqVO.getAreaIds());
-        query.inIfPresent(PersonInfoDO::getRegId, reqVO.getRegIds());
+        query.inIfPresent(PersonInfoDO::getAreaId, CollectionUtils.ofDefaultIfNull(reqVO.getAreaIds()));
+        query.inIfPresent(PersonInfoDO::getRegId, CollectionUtils.ofDefaultIfNull(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, ids);
+        query.inIfPresent(PersonInfoDO::getUserId, CollectionUtils.ofDefaultIfNull(ids));
 
         if (null != reqVO.getPay()) {
             query.leftJoin(JobInterestedDO.class, JobInterestedDO::getUserId, PersonInfoDO::getUserId);
@@ -229,24 +231,31 @@ public interface PersonInfoMapper extends BaseMapperX<PersonInfoDO> {
     }
 
     /**
-     * 根据id查询人才信息
+     * 查询推荐
      *
-     * @param ids          人才id集合
+     * @param reqVO          检索条件
      * @param enterpriseId 操作的企业
-     * @param pageParam    分页
      **/
-    default PageResult<PersonInfoRespVO> queryPageById(List<Long> ids,
-                                                       Long enterpriseId,
-                                                       PageParam pageParam) {
+    default PageResult<PersonInfoRespVO> queryRecommendPerson(PersonRecommendQueryReqVO reqVO,
+                                                              Long enterpriseId) {
         MPJLambdaWrapperX<PersonInfoDO> query = new MPJLambdaWrapperX<>();
         query.selectAsClass(PersonInfoDO.class, PersonInfoRespVO.class);
-        query.inIfPresent(PersonInfoDO::getUserId, ids);
+
+        query.leftJoin(JobInterestedDO.class, JobInterestedDO::getUserId, PersonInfoDO::getUserId);
+        query.inIfPresent(PersonInfoDO::getUserId, reqVO.getIds());
+
+        query.eqIfPresent(PersonInfoDO::getExpType, reqVO.getExpType());
+        query.eqIfPresent(PersonInfoDO::getEduType, reqVO.getEduType());
+
+        query.eqIfPresent(PersonInfoDO::getJobType, reqVO.getType());
+        query.in(CollUtil.isNotEmpty(reqVO.getPositionIds()),JobInterestedDO::getPositionId, reqVO.getPositionIds());
+
         // 连接用户表设置vip条件
         JoinHelper.joinAndFilterVipUser(query, PersonInfoDO::getUserId);
         // 过滤屏蔽用户
         JoinHelper.filterBlockedUsersForEnterprise(query, PersonInfoDO::getUserId, enterpriseId);
         query.orderByDesc(PersonInfoDO::getUpdateTime);
-        return selectJoinPage(pageParam, PersonInfoRespVO.class, query);
+        return selectJoinPage(reqVO, PersonInfoRespVO.class, query);
     }
 
 

+ 1 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/person/StudentPracticeRecordMapper.java

@@ -61,7 +61,7 @@ public interface StudentPracticeRecordMapper extends BaseMapperX<StudentPractice
         wrapper.eqIfPresent(StudentPracticeRecordDO::getJobId, reqVO.getJobId());
         wrapper.eqIfPresent(StudentPracticeRecordDO::getJobFairId, reqVO.getJobFairId());
         wrapper.eqIfPresent(StudentPracticeRecordDO::getEnterpriseId, reqVO.getEnterpriseId());
-        wrapper.inIfPresent(StudentPracticeRecordDO::getUserId, userId);
+        wrapper.eqIfPresent(StudentPracticeRecordDO::getUserId, userId);
         wrapper.betweenIfPresent(StudentPracticeRecordDO::getStartTime, reqVO.getStartTime());
         wrapper.betweenIfPresent(StudentPracticeRecordDO::getEndTime, reqVO.getEndTime());
         wrapper.eqIfPresent(StudentPracticeRecordDO::getStatus, reqVO.getStatus());

+ 10 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/redis/RedisKeyConstants.java

@@ -114,13 +114,22 @@ public interface RedisKeyConstants {
 
 
     /**
-     *  职位信息的缓存
+     *  职位信息的缓存
      * <p>
      * KEY 格式:mde_position_tree:{id}
      * VALUE 数据类型:String 子职位编号集合
      */
     String MDE_POSITION_TREE ="mde_position_tree";
 
+
+    /**
+     * 职位信息的缓存
+     * <p>
+     * KEY 格式:mde_position_web_resp:{id}
+     * VALUE 数据类型:String 区域编号集合
+     */
+    String MDE_POSITION_WEB_RESP="mde_position_web_resp";
+
     /**
      * 指定行业的所有子行业信息的缓存
      * <p>

+ 6 - 3
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/area/AreaServiceImpl.java

@@ -52,7 +52,8 @@ public class AreaServiceImpl implements AreaService {
             RedisKeyConstants.MDE_AREA_LIST,
             RedisKeyConstants.MDE_AREA_IDS,
             RedisKeyConstants.MDE_AREA_TREE,
-            RedisKeyConstants.MDE_AREA_MAP
+            RedisKeyConstants.MDE_AREA_MAP,
+            RedisKeyConstants.MDE_AREA_WEB_RESP
     },
             allEntries = true) // allEntries 清空所有缓存,因为操作一个区域,涉及到多个缓存
     public Long createArea(AreaSaveReqVO createReqVO) {
@@ -69,7 +70,8 @@ public class AreaServiceImpl implements AreaService {
             RedisKeyConstants.MDE_AREA_LIST,
             RedisKeyConstants.MDE_AREA_IDS,
             RedisKeyConstants.MDE_AREA_TREE,
-            RedisKeyConstants.MDE_AREA_MAP
+            RedisKeyConstants.MDE_AREA_MAP,
+            RedisKeyConstants.MDE_AREA_WEB_RESP
     },
             allEntries = true) // allEntries 清空所有缓存,因为操作一个区域,涉及到多个缓存
     public void updateArea(AreaSaveReqVO updateReqVO) {
@@ -86,7 +88,8 @@ public class AreaServiceImpl implements AreaService {
             RedisKeyConstants.MDE_AREA_LIST,
             RedisKeyConstants.MDE_AREA_IDS,
             RedisKeyConstants.MDE_AREA_TREE,
-            RedisKeyConstants.MDE_AREA_MAP
+            RedisKeyConstants.MDE_AREA_MAP,
+            RedisKeyConstants.MDE_AREA_WEB_RESP
     },
             allEntries = true) // allEntries 清空所有缓存,因为操作一个区域,涉及到多个缓存
     public void deleteArea(Long id) {

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

@@ -17,11 +17,14 @@ import com.citu.module.menduner.system.controller.base.person.PersonRecommendQue
 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;
+import com.citu.module.menduner.system.controller.base.position.PositionRespVO;
+import com.citu.module.menduner.system.controller.base.position.PositionWebRespVO;
 import com.citu.module.menduner.system.controller.base.userperson.UserPersonPageReqVO;
 import com.citu.module.menduner.system.controller.base.userperson.UserPersonRespVO;
 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.enterprise.EnterpriseTalentPoolDO;
+import com.citu.module.menduner.system.dal.dataobject.job.JobAdvertisedDO;
 import com.citu.module.menduner.system.dal.dataobject.job.JobInterestedDO;
 import com.citu.module.menduner.system.dal.dataobject.person.PersonInfoDO;
 import com.citu.module.menduner.system.dal.dataobject.person.PersonSkillDO;
@@ -34,6 +37,7 @@ import com.citu.module.menduner.system.dal.mysql.enterprise.EnterpriseTalentPool
 import com.citu.module.menduner.system.dal.mysql.job.JobInterestedMapper;
 import com.citu.module.menduner.system.dal.mysql.person.PersonInfoMapper;
 import com.citu.module.menduner.system.dal.mysql.person.PersonSkillMapper;
+import com.citu.module.menduner.system.dal.mysql.position.PositionMapper;
 import com.citu.module.menduner.system.dal.mysql.projectexp.ProjectExpMapper;
 import com.citu.module.menduner.system.dal.mysql.trainexp.TrainExpMapper;
 import com.citu.module.menduner.system.dal.mysql.user.MdeUserMapper;
@@ -41,6 +45,8 @@ import com.citu.module.menduner.system.dal.mysql.workexp.WorkExpMapper;
 import com.citu.module.menduner.system.enums.sync.SyncConstants;
 import com.citu.module.menduner.system.mq.producer.GraphProducer;
 import com.citu.module.menduner.system.service.area.AreaService;
+import com.citu.module.menduner.system.service.job.JobAdvertisedService;
+import com.citu.module.menduner.system.service.position.PositionService;
 import com.citu.module.menduner.system.util.RedisUtils;
 import org.jetbrains.annotations.NotNull;
 import org.springframework.stereotype.Service;
@@ -48,10 +54,7 @@ import org.springframework.util.StringUtils;
 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;
+import java.util.*;
 import java.util.stream.Collectors;
 
 import static com.citu.module.menduner.system.enums.DictTypeConstants.*;
@@ -96,6 +99,12 @@ public class PersonIntegrationServiceImpl implements PersonIntegrationService {
     @Resource
     private AreaService areaService;
 
+    @Resource
+    private JobAdvertisedService jobAdvertisedService;
+
+    @Resource
+    private PositionService positionService;
+
     @Resource
     private RedisUtils redisUtils;
 
@@ -344,6 +353,7 @@ public class PersonIntegrationServiceImpl implements PersonIntegrationService {
             }
         }
         PageResult<PersonInfoRespVO> result = personInfoMapper.queryPage(reqVO, LoginUserContext.getEnterpriseId());
+        fillPosition(result);
         result = fillArea(result);
         PageResult<AppRecruitPersonInfoRespVO>  recruitResult =
                 BeanUtils.toBean(result, AppRecruitPersonInfoRespVO.class) ;
@@ -375,23 +385,82 @@ public class PersonIntegrationServiceImpl implements PersonIntegrationService {
         return result;
     }
 
+    private PageResult<PersonInfoRespVO> fillPosition(PageResult<PersonInfoRespVO> result) {
+        // 获取所有用户的 ID
+        List<Long> userIds = result.getList().stream()
+                .map(PersonInfoRespVO::getUserId)
+                .collect(Collectors.toList());
+
+        // 批量查询用户的职位兴趣
+        Map<Long, List<JobInterestedDO>> interestMap = jobInterestedMapper.selectByUserIdsList(userIds)
+                .stream()
+                .collect(Collectors.groupingBy(JobInterestedDO::getUserId));
+
+        // 填充职位信息
+        result.getList().forEach(item -> {
+            List<JobInterestedDO> interestList = interestMap.getOrDefault(item.getUserId(), Collections.emptyList());
+            if (CollUtil.isNotEmpty(interestList)) {
+                PositionWebRespVO resp = new PositionWebRespVO();
+                List<PositionRespVO> positionList = new ArrayList<>();
+
+                // 遍历职位兴趣,查询职位信息
+                for (JobInterestedDO interested : interestList) {
+                    PositionRespVO position = positionService.getById(interested.getPositionId());
+                    if (position != null) {
+                        positionList.add(position);
+                    }
+                }
+
+                // 设置职位名称(逗号隔开)
+                String positionNames = positionList.stream()
+                        .map(PositionRespVO::getNameCn)
+                        .distinct()
+                        .collect(Collectors.joining(","));
+                resp.setPositionNames(positionNames);
+                resp.setPositionList(positionList);
+                item.setPosition(resp);
+            }
+        });
+
+        return result;
+    }
+
+
+
     @Override
     public PageResult<PersonInfoRespVO> queryRecommendPerson(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());
-                condition.setId(reqVO.getJobId());
-                ids = graphApi.queryRecommendPerson(condition).getCheckedData();
-            } catch (Exception e) {
-                e.printStackTrace();
+//            try {
+//                GraphQueryPageDTO condition = GraphQueryPageDTO.builder().type(SyncConstants.PERSON).build();
+//                condition.setCurrent(reqVO.getPageNo());
+//                condition.setSize(reqVO.getPageSize());
+//                condition.setId(reqVO.getJobId());
+//                ids = graphApi.queryRecommendPerson(condition).getCheckedData();
+//            } catch (Exception e) {
+//                e.printStackTrace();
+//            }
+            JobAdvertisedDO job =  jobAdvertisedService.getJobAdvertised(reqVO.getJobId());
+            if (null != job) {
+                // 填入职位相关的条件
+                if(StringUtils.hasText(job.getEduType())) {
+                    reqVO.setEduType(job.getEduType());
+                }
+                if(StringUtils.hasText(job.getExpType())) {
+                    reqVO.setExpType(job.getExpType());
+                }
+                if(StringUtils.hasText(job.getType())) {
+                    reqVO.setType(job.getType());
+                }
+                if(null != job.getPositionId()) {
+                    reqVO.setPositionIds(Collections.singletonList(job.getPositionId()));
+                }
             }
         }
-        PageResult<PersonInfoRespVO> result = personInfoMapper.queryPageById(null == ids ? null : Arrays.asList(ids),
-                LoginUserContext.getEnterpriseId(),
-                reqVO);
+
+        PageResult<PersonInfoRespVO> result = personInfoMapper.queryRecommendPerson(reqVO,
+                LoginUserContext.getEnterpriseId());
+        fillPosition(result);
         return fillArea(result);
     }
 

+ 9 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/position/PositionService.java

@@ -7,6 +7,7 @@ import com.citu.module.menduner.system.controller.app.jobhunt.position.vo.AppPos
 import com.citu.module.menduner.system.controller.app.jobhunt.position.vo.AppPositionSimpleRespVO;
 import com.citu.module.menduner.system.controller.base.position.PositionListReqVO;
 import com.citu.module.menduner.system.controller.base.position.PositionPageReqVO;
+import com.citu.module.menduner.system.controller.base.position.PositionRespVO;
 import com.citu.module.menduner.system.controller.base.position.PositionSaveReqVO;
 import com.citu.module.menduner.system.dal.dataobject.position.PositionDO;
 
@@ -128,4 +129,12 @@ public interface PositionService {
      * @return 职位信息
      **/
     PositionDO getByName(String name);
+
+    /**
+     * 根据职位id获取职位信息
+     *
+     * @param id 职位id
+     * @return 职位信息
+     **/
+    PositionRespVO getById(Long id);
 }

+ 17 - 5
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/position/PositionServiceImpl.java

@@ -10,6 +10,7 @@ import com.citu.module.menduner.system.controller.app.jobhunt.position.vo.AppPos
 import com.citu.module.menduner.system.controller.app.jobhunt.position.vo.AppPositionSimpleRespVO;
 import com.citu.module.menduner.system.controller.base.position.PositionListReqVO;
 import com.citu.module.menduner.system.controller.base.position.PositionPageReqVO;
+import com.citu.module.menduner.system.controller.base.position.PositionRespVO;
 import com.citu.module.menduner.system.controller.base.position.PositionSaveReqVO;
 import com.citu.module.menduner.system.convert.PositionConvert;
 import com.citu.module.menduner.system.dal.dataobject.industry.IndustryDO;
@@ -90,7 +91,8 @@ public class PositionServiceImpl implements PositionService {
     @CacheEvict(cacheNames =
             {
                     RedisKeyConstants.MDE_POSITION_CHILDREN,
-                    RedisKeyConstants.MDE_POSITION_TREE
+                    RedisKeyConstants.MDE_POSITION_TREE,
+                    RedisKeyConstants.MDE_POSITION_WEB_RESP,
             },
             allEntries = true)
     public Long createPosition(PositionSaveReqVO createReqVO) {
@@ -105,7 +107,8 @@ public class PositionServiceImpl implements PositionService {
     @CacheEvict(cacheNames =
             {
                     RedisKeyConstants.MDE_POSITION_CHILDREN,
-                    RedisKeyConstants.MDE_POSITION_TREE
+                    RedisKeyConstants.MDE_POSITION_TREE,
+                    RedisKeyConstants.MDE_POSITION_WEB_RESP,
             },
             allEntries = true)
     public void updatePosition(PositionSaveReqVO updateReqVO) {
@@ -120,7 +123,8 @@ public class PositionServiceImpl implements PositionService {
     @CacheEvict(cacheNames =
             {
                     RedisKeyConstants.MDE_POSITION_CHILDREN,
-                    RedisKeyConstants.MDE_POSITION_TREE
+                    RedisKeyConstants.MDE_POSITION_TREE,
+                    RedisKeyConstants.MDE_POSITION_WEB_RESP,
             },
             allEntries = true)
     public void deletePosition(Long id) {
@@ -161,7 +165,8 @@ public class PositionServiceImpl implements PositionService {
     @CacheEvict(cacheNames =
             {
                     RedisKeyConstants.MDE_POSITION_CHILDREN,
-                    RedisKeyConstants.MDE_POSITION_TREE
+                    RedisKeyConstants.MDE_POSITION_TREE,
+                    RedisKeyConstants.MDE_POSITION_WEB_RESP,
             },
             allEntries = true)
     public void syncBossPosition() {
@@ -193,7 +198,8 @@ public class PositionServiceImpl implements PositionService {
     @CacheEvict(cacheNames =
             {
                     RedisKeyConstants.MDE_POSITION_CHILDREN,
-                    RedisKeyConstants.MDE_POSITION_TREE
+                    RedisKeyConstants.MDE_POSITION_TREE,
+                    RedisKeyConstants.MDE_POSITION_WEB_RESP,
             },
             allEntries = true)
     public void syncVeryeastPosition() {
@@ -401,4 +407,10 @@ public class PositionServiceImpl implements PositionService {
     public PositionDO getByName(String name) {
         return positionMapper.selectOne(PositionDO::getNameCn,name);
     }
+
+    @Override
+    @Cacheable(cacheNames = RedisKeyConstants.MDE_POSITION_WEB_RESP, key = "#id", unless = "#result == null")
+    public PositionRespVO getById(Long id) {
+        return PositionConvert.INSTANCE.convert2(positionMapper.selectById(id));
+    }
 }