Browse Source

1、优化热门职位推荐逻辑

rayson 1 năm trước cách đây
mục cha
commit
0cb94e5535

+ 1 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/position/vo/AppPositionSimpleRespVO.java

@@ -10,6 +10,7 @@ public class AppPositionSimpleRespVO {
     @Schema(description = "id", example = "27892")
     private Long id;
 
+    @Schema(description = "职位中文名称")
     private String nameCn;
 
     @Schema(description = "职位英文名称")

+ 3 - 2
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/visits/MdeVisitsMapper.java

@@ -35,12 +35,13 @@ public interface MdeVisitsMapper extends BaseMapperX<MdeVisitsDO> {
 
     default List<MdeVisitsDO> getBizIdVisitsTop10List(MdeVisitsListReqVO reqVO){
         return selectList(new LambdaQueryWrapperX<MdeVisitsDO>()
-                .eqIfPresent(MdeVisitsDO::getUserId, reqVO.getUserId())
-                .eqIfPresent(MdeVisitsDO::getType, reqVO.getType())
+                .eq(MdeVisitsDO::getUserId, reqVO.getUserId())
+                .eq(MdeVisitsDO::getType, reqVO.getType())
                 .eqIfPresent(MdeVisitsDO::getDate, reqVO.getDate())
                 .eqIfPresent(MdeVisitsDO::getBizId, reqVO.getBizId())
                 .eqIfPresent(MdeVisitsDO::getDate, DateUtils.of(reqVO.getDate()))
                 .orderByDesc(MdeVisitsDO::getDate)
+                .last("LIMIT 10")
         );
 
     }

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

@@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil;
 import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.citu.framework.common.pojo.PageResult;
 import com.citu.framework.common.util.object.BeanUtils;
+import com.citu.module.menduner.common.util.LoginUserContext;
 import com.citu.module.menduner.system.controller.app.position.vo.AppPositionChildrenRespVO;
 import com.citu.module.menduner.system.controller.app.position.vo.AppPositionClickReqVO;
 import com.citu.module.menduner.system.controller.app.position.vo.AppPositionListReqVO;
@@ -19,7 +20,6 @@ import com.citu.module.menduner.system.dal.redis.RedisKeyConstants;
 import com.citu.module.menduner.system.enums.visits.MdeVisitsEnum;
 import com.citu.module.menduner.system.mq.producer.MdeVisitsProducer;
 import com.citu.module.menduner.system.service.visits.MdeVisitsService;
-import com.citu.module.menduner.common.util.LoginUserContext;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.cache.annotation.Cacheable;
@@ -235,7 +235,7 @@ public class PositionServiceImpl implements PositionService {
     @Override
     public List<AppPositionSimpleRespVO> getHotPosition() {
         Long userId = LoginUserContext.getUserId2();
-        List<Long> ids = visitsService.getBizIdVisitsTop10List(
+        Map<Long, Integer> idMap = visitsService.getBizIdVisitsTop10List(
                 MdeVisitsListReqVO.builder()
                         .type(MdeVisitsEnum.POSITION_CLICK.getType())
                         .userId(userId)
@@ -243,16 +243,17 @@ public class PositionServiceImpl implements PositionService {
         );
 
         // 推荐数据的数量
-        Integer num = 10;
+        int num = 10;
         // 职位的层级深度
         Integer level = 3;
 
         // 该用户(包括访客)没有埋点
-        if (ids.size() < 1) {
+        if (idMap.isEmpty() || idMap.size() < 1) {
             // 随机十条,深度为{level}的数据
             return PositionConvert.INSTANCE.convertList2(positionMapper.getRandomTenByLevel(level));
 
         }
+        List<Long> ids = new ArrayList<>(idMap.keySet());
 
         // 埋点数据不够
         if (ids.size() < num) {
@@ -268,12 +269,19 @@ public class PositionServiceImpl implements PositionService {
                     positionDOList1.stream()
                             .limit(positionDOList1.size() - ids.size()).collect(Collectors.toList()).stream()
             ).collect(Collectors.toList());
-            return PositionConvert.INSTANCE.convertList2(mergedList);
+            return retHotPosition(mergedList, idMap);
         }
 
         // 该用户(包括访客)有埋点数据的情况
         List<PositionDO> positionDOList = positionMapper.selectListByIdList(ids);
-        return PositionConvert.INSTANCE.convertList2(positionDOList);
+        return retHotPosition(positionDOList, idMap);
+    }
+
+    private List<AppPositionSimpleRespVO> retHotPosition(List<PositionDO> positionDOList, Map<Long, Integer> idMap) {
+        List<AppPositionSimpleRespVO> list = PositionConvert.INSTANCE.convertList2(positionDOList);
+        // 将埋点数据按照埋点次数排序
+        list.sort(Comparator.comparingInt((AppPositionSimpleRespVO o) -> idMap.get(o.getId())).reversed());
+        return list;
     }
 
     @Override

+ 2 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/visits/MdeVisitsService.java

@@ -9,6 +9,7 @@ import com.citu.module.menduner.system.mq.message.MdeVisitsSendMessage;
 
 import javax.validation.Valid;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 访问量 Service 接口
@@ -67,5 +68,5 @@ public interface MdeVisitsService {
      * @param reqVO 查询条件
      * @return 业务id集合
      **/
-    List<Long> getBizIdVisitsTop10List(MdeVisitsListReqVO reqVO);
+    Map<Long,Integer> getBizIdVisitsTop10List(MdeVisitsListReqVO reqVO);
 }

+ 5 - 2
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/visits/MdeVisitsServiceImpl.java

@@ -16,6 +16,7 @@ import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 import static com.citu.framework.common.exception.util.ServiceExceptionUtil.exception;
@@ -105,11 +106,13 @@ public class MdeVisitsServiceImpl implements MdeVisitsService {
     }
 
     @Override
-    public List<Long> getBizIdVisitsTop10List(MdeVisitsListReqVO reqVO) {
+    public Map<Long,Integer> getBizIdVisitsTop10List(MdeVisitsListReqVO reqVO) {
         List<MdeVisitsDO> list = mdeVisitsMapper.getBizIdVisitsTop10List(reqVO);
         if(null == list) {
             return null;
         }
-        return list.stream().map(MdeVisitsDO::getBizId).collect(Collectors.toList());
+
+        return list.stream()
+                .collect(Collectors.toMap(MdeVisitsDO::getBizId, MdeVisitsDO::getCount,Integer::sum));
     }
 }