VisitSummaryService.java 4.51 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.community.api.enums.DeleteTagEnum;
刘基明's avatar
刘基明 committed
5
import com.tanpu.community.api.enums.VisitTypeEnum;
刘基明's avatar
刘基明 committed
6
import com.tanpu.community.dao.entity.community.TimesCountEntity;
张辰's avatar
张辰 committed
7 8 9
import com.tanpu.community.dao.entity.community.VisitSummaryEntity;
import com.tanpu.community.dao.mapper.community.VisitSummaryMapper;
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.springframework.stereotype.Service;
刘基明's avatar
刘基明 committed
13
import org.springframework.transaction.annotation.Transactional;
张辰's avatar
张辰 committed
14 15

import javax.annotation.Resource;
刘基明's avatar
刘基明 committed
16
import java.time.LocalDateTime;
刘基明's avatar
刘基明 committed
17
import java.util.HashMap;
刘基明's avatar
刘基明 committed
18
import java.util.List;
刘基明's avatar
刘基明 committed
19
import java.util.Map;
张辰's avatar
张辰 committed
20
import java.util.stream.Collectors;
张辰's avatar
张辰 committed
21 22 23 24 25 26 27 28

@Slf4j
@Service
public class VisitSummaryService {

    @Resource
    private VisitSummaryMapper visitSummaryMapper;

张辰's avatar
张辰 committed
29 30 31 32
    public List<String> filterUserNotVisited(String userId, List<String> refIds) {
        if (refIds.isEmpty()) {
            return refIds;
        }
张辰's avatar
张辰 committed
33 34 35 36
        List<String> visited = visitSummaryMapper.selectList(new LambdaQueryWrapper<VisitSummaryEntity>()
                .eq(VisitSummaryEntity::getVisitorId, userId)
                .in(VisitSummaryEntity::getRefId, refIds))
                .stream().map(VisitSummaryEntity::getRefId).distinct().collect(Collectors.toList());
张辰's avatar
张辰 committed
37 38 39 40 41 42 43 44 45 46 47 48
        return ListUtils.subtract(refIds, visited);
    }

    @Transactional
    public void insertOrUpdateDur(VisitSummaryEntity vs) {
        if (visitSummaryMapper.selectByIdent(vs.getIdent()) == null) {
            visitSummaryMapper.insert(vs);
        } else {
            visitSummaryMapper.updateDurByIdent(vs.getDuration(), vs.getIdent());
        }
    }

刘基明's avatar
刘基明 committed
49 50 51 52 53 54
    @Transactional
    public void addPageView(String userId, String targetId, VisitTypeEnum type) {
        visitSummaryMapper.insert(VisitSummaryEntity.builder()
                .visitorId(userId)
                .refId(targetId)
                .refType(type.getCode())
刘基明's avatar
刘基明 committed
55
                .duration(0)
刘基明's avatar
刘基明 committed
56 57
                .build());
    }
张辰's avatar
张辰 committed
58 59 60 61

    // 查询话题 详细页面 浏览量
    public Integer queryTopicDetailVisit(String topicId) {
        return visitSummaryMapper.selectCount(new LambdaQueryWrapper<VisitSummaryEntity>()
刘基明's avatar
刘基明 committed
62
                .eq(VisitSummaryEntity::getRefId, topicId)
刘基明's avatar
刘基明 committed
63
                .eq(VisitSummaryEntity::getRefType, VisitTypeEnum.TOPIC_PAGE_VIEW.getCode()));
刘基明's avatar
刘基明 committed
64 65 66 67 68 69
    }

    // 查询主题 浏览量
    public Integer queryThemeVisit(String theme) {
        return visitSummaryMapper.selectCount(new LambdaQueryWrapper<VisitSummaryEntity>()
                .eq(VisitSummaryEntity::getRefId, theme)
刘基明's avatar
刘基明 committed
70
                .eq(VisitSummaryEntity::getRefType, VisitTypeEnum.THEME_PAGE_VIEW.getCode()));
刘基明's avatar
刘基明 committed
71 72 73 74
    }

    // 查询主题 浏览量
    public Integer queryThemeVisit(List<String> themes) {
刘基明's avatar
刘基明 committed
75 76 77
        if (CollectionUtils.isEmpty(themes)){
            return 0;
        }
刘基明's avatar
刘基明 committed
78 79
        return visitSummaryMapper.selectCount(new LambdaQueryWrapper<VisitSummaryEntity>()
                .in(VisitSummaryEntity::getRefId, themes)
刘基明's avatar
刘基明 committed
80
                .eq(VisitSummaryEntity::getRefType, VisitTypeEnum.THEME_PAGE_VIEW.getCode()));
张辰's avatar
张辰 committed
81
    }
张辰's avatar
张辰 committed
82

刘基明's avatar
刘基明 committed
83 84 85 86 87 88 89 90 91 92 93
    public LocalDateTime queryLatestViewFollow(String userId) {
        List<VisitSummaryEntity> visitSummaryEntities = visitSummaryMapper.selectList(new LambdaQueryWrapper<VisitSummaryEntity>()
                .eq(VisitSummaryEntity::getVisitorId, userId)
                .eq(VisitSummaryEntity::getRefType, VisitTypeEnum.FOLLOW_THEME_VIEW.getCode())
                .orderByDesc(VisitSummaryEntity::getCreateTime));
        if (CollectionUtils.isEmpty(visitSummaryEntities)) {
            return null;
        } else {
            return visitSummaryEntities.get(0).getCreateTime();
        }
    }
刘基明's avatar
刘基明 committed
94 95

    //统计主题集合的浏览量
刘基明's avatar
刘基明 committed
96 97 98 99
    public Map<String, Integer> getCountMapByTargetIds(List<String> refIds, VisitTypeEnum type) {
        if (CollectionUtils.isEmpty(refIds)){
            return new HashMap<>();
        }
刘基明's avatar
刘基明 committed
100
        LambdaQueryWrapper<VisitSummaryEntity> wrapper = (new LambdaQueryWrapper<VisitSummaryEntity>()
刘基明's avatar
刘基明 committed
101
                .in(VisitSummaryEntity::getRefId,refIds))
刘基明's avatar
刘基明 committed
102 103 104 105 106 107
                .eq(VisitSummaryEntity::getDeleteTag, DeleteTagEnum.NOT_DELETED)
                .eq(VisitSummaryEntity::getRefType,type.getCode())
                .groupBy(VisitSummaryEntity::getRefId);
        return visitSummaryMapper.selectCountByThemeIds(wrapper).stream()
                .collect(Collectors.toMap(TimesCountEntity::getId, TimesCountEntity::getTimes));
    }
张辰's avatar
张辰 committed
108
}