VisitLogService.java 5.24 KB
Newer Older
张辰's avatar
张辰 committed
1 2 3
package com.tanpu.community.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
张辰's avatar
张辰 committed
4
import com.tanpu.biz.common.enums.clue.PageEnum;
刘基明's avatar
刘基明 committed
5 6
import com.tanpu.community.api.enums.DeleteTagEnum;
import com.tanpu.community.dao.entity.community.TimesCountEntity;
刘基明's avatar
刘基明 committed
7 8
import com.tanpu.community.dao.entity.community.VisitLogEntity;
import com.tanpu.community.dao.mapper.community.VisitLogMapper;
张辰's avatar
张辰 committed
9
import lombok.extern.slf4j.Slf4j;
刘基明's avatar
刘基明 committed
10
import org.apache.commons.collections4.CollectionUtils;
张辰's avatar
张辰 committed
11
import org.apache.commons.collections4.ListUtils;
张辰's avatar
张辰 committed
12
import org.apache.commons.lang3.time.DateUtils;
张辰's avatar
张辰 committed
13
import org.springframework.stereotype.Service;
刘基明's avatar
刘基明 committed
14
import org.springframework.transaction.annotation.Transactional;
张辰's avatar
张辰 committed
15 16

import javax.annotation.Resource;
张辰's avatar
张辰 committed
17
import java.util.Date;
刘基明's avatar
刘基明 committed
18
import java.util.HashMap;
刘基明's avatar
刘基明 committed
19
import java.util.List;
刘基明's avatar
刘基明 committed
20
import java.util.Map;
张辰's avatar
张辰 committed
21
import java.util.stream.Collectors;
张辰's avatar
张辰 committed
22

23 24
import static com.tanpu.biz.common.enums.clue.PageEnum.COMM_VISIT_TOPIC_DETAIL;

张辰's avatar
张辰 committed
25 26
@Slf4j
@Service
刘基明's avatar
刘基明 committed
27
public class VisitLogService {
张辰's avatar
张辰 committed
28 29

    @Resource
刘基明's avatar
刘基明 committed
30
    private VisitLogMapper visitLogMapper;
张辰's avatar
张辰 committed
31

张辰's avatar
张辰 committed
32 33 34 35
    // 获取用户7天内访问过的
    public List<String> queryUserRecentVisited(String userId) {
        Date endDate = new Date();
        Date startDate = DateUtils.addDays(endDate, -7);
张辰's avatar
张辰 committed
36
        List<String> visited = visitLogMapper.selectRefIdByVisitorIdAndCreateBetween(userId, startDate, endDate);
张辰's avatar
张辰 committed
37 38 39
        return visited;
    }

40
    // 从refIds中去掉用户已经访问过的
张辰's avatar
张辰 committed
41 42 43 44
    public List<String> filterUserNotVisited(String userId, List<String> refIds) {
        if (refIds.isEmpty()) {
            return refIds;
        }
刘基明's avatar
刘基明 committed
45 46 47 48
        List<String> visited = visitLogMapper.selectList(new LambdaQueryWrapper<VisitLogEntity>()
                .eq(VisitLogEntity::getVisitorId, userId)
                .in(VisitLogEntity::getRefId, refIds))
                .stream().map(VisitLogEntity::getRefId).distinct().collect(Collectors.toList());
张辰's avatar
张辰 committed
49 50
        return ListUtils.subtract(refIds, visited);
    }
刘基明's avatar
刘基明 committed
51
    public List<String> queryUserVisited(String userId) {
刘基明's avatar
刘基明 committed
52 53 54
        List<String> visited = visitLogMapper.selectList(new LambdaQueryWrapper<VisitLogEntity>()
                .eq(VisitLogEntity::getVisitorId, userId))
                .stream().map(VisitLogEntity::getRefId).distinct().collect(Collectors.toList());
刘基明's avatar
刘基明 committed
55 56 57
        return visited;
    }

张辰's avatar
张辰 committed
58 59

    @Transactional
刘基明's avatar
刘基明 committed
60
    public void insertOrUpdateDur(VisitLogEntity vs) {
张辰's avatar
张辰 committed
61
        if (visitLogMapper.selectByIdentAndRefId(vs.getIdent(), vs.getRefId()) == null) {
刘基明's avatar
刘基明 committed
62
            visitLogMapper.insert(vs);
张辰's avatar
张辰 committed
63
        } else {
刘基明's avatar
刘基明 committed
64
            visitLogMapper.updateDurByIdent(vs.getDuration(), vs.getIdent());
张辰's avatar
张辰 committed
65 66 67
        }
    }

刘基明's avatar
刘基明 committed
68 69
    @Transactional
    //TODO 临时埋点,接入新埋点后删除
70
    public void addPageView(String userId, String targetId, PageEnum type) {
刘基明's avatar
刘基明 committed
71
        visitLogMapper.insert(VisitLogEntity.builder()
刘基明's avatar
刘基明 committed
72 73
                .visitorId(userId)
                .refId(targetId)
74
                .refType(type.getId())
刘基明's avatar
刘基明 committed
75 76 77 78
                .duration(0)
                .build());
    }

张辰's avatar
张辰 committed
79 80
    // 查询话题 详细页面 浏览量
    public Integer queryTopicDetailVisit(String topicId) {
刘基明's avatar
刘基明 committed
81 82
        return visitLogMapper.selectCount(new LambdaQueryWrapper<VisitLogEntity>()
                .eq(VisitLogEntity::getRefId, topicId)
83
                .eq(VisitLogEntity::getRefType, COMM_VISIT_TOPIC_DETAIL.getId()));
刘基明's avatar
刘基明 committed
84 85 86 87
    }

    // 查询主题 浏览量
    public Integer queryThemeVisit(String theme) {
刘基明's avatar
刘基明 committed
88 89
        return visitLogMapper.selectCount(new LambdaQueryWrapper<VisitLogEntity>()
                .eq(VisitLogEntity::getRefId, theme)
张辰's avatar
张辰 committed
90
                .eq(VisitLogEntity::getRefType, PageEnum.COMM_VISIT_THEME.getId()));
刘基明's avatar
刘基明 committed
91 92 93 94
    }

    // 查询主题 浏览量
    public Integer queryThemeVisit(List<String> themes) {
刘基明's avatar
刘基明 committed
95 96 97
        if (CollectionUtils.isEmpty(themes)){
            return 0;
        }
刘基明's avatar
刘基明 committed
98 99
        return visitLogMapper.selectCount(new LambdaQueryWrapper<VisitLogEntity>()
                .in(VisitLogEntity::getRefId, themes)
张辰's avatar
张辰 committed
100
                .eq(VisitLogEntity::getRefType, PageEnum.COMM_VISIT_THEME.getId()));
张辰's avatar
张辰 committed
101
    }
张辰's avatar
张辰 committed
102

张辰's avatar
张辰 committed
103 104 105 106 107 108 109 110 111 112 113
//    public LocalDateTime queryLatestViewFollow(String userId) {
//        List<VisitLogEntity> visitSummaryEntities = visitLogMapper.selectList(new LambdaQueryWrapper<VisitLogEntity>()
//                .eq(VisitLogEntity::getVisitorId, userId)
//                .eq(VisitLogEntity::getRefType, VisitTypeEnum.FOLLOW_THEME_VIEW.getCode())
//                .orderByDesc(VisitLogEntity::getCreateTime));
//        if (CollectionUtils.isEmpty(visitSummaryEntities)) {
//            return null;
//        } else {
//            return visitSummaryEntities.get(0).getCreateTime();
//        }
//    }
刘基明's avatar
刘基明 committed
114

刘基明's avatar
刘基明 committed
115
    //统计行为集合的浏览量
张辰's avatar
张辰 committed
116
    public Map<String, Integer> getCountMapByTargetIds(List<String> refIds, String refType) {
刘基明's avatar
刘基明 committed
117 118 119
        if (CollectionUtils.isEmpty(refIds)){
            return new HashMap<>();
        }
刘基明's avatar
刘基明 committed
120 121 122
        LambdaQueryWrapper<VisitLogEntity> wrapper = (new LambdaQueryWrapper<VisitLogEntity>()
                .in(VisitLogEntity::getRefId,refIds))
                .eq(VisitLogEntity::getDeleteTag, DeleteTagEnum.NOT_DELETED)
张辰's avatar
张辰 committed
123
                .eq(VisitLogEntity::getRefType, refType)
刘基明's avatar
刘基明 committed
124 125
                .groupBy(VisitLogEntity::getRefId);
        return visitLogMapper.selectCountByThemeIds(wrapper).stream()
刘基明's avatar
刘基明 committed
126 127
                .collect(Collectors.toMap(TimesCountEntity::getId, TimesCountEntity::getTimes));
    }
张辰's avatar
张辰 committed
128
}