package com.tanpu.community.service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.tanpu.community.api.enums.DeleteTagEnum; import com.tanpu.community.api.enums.VisitTypeEnum; import com.tanpu.community.dao.entity.community.TimesCountEntity; import com.tanpu.community.dao.entity.community.VisitSummaryEntity; import com.tanpu.community.dao.mapper.community.VisitSummaryMapper; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.ListUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.time.LocalDateTime; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @Slf4j @Service public class VisitSummaryService { @Resource private VisitSummaryMapper visitSummaryMapper; // 从refIds中去掉用户已经访问过的 public List<String> filterUserNotVisited(String userId, List<String> refIds) { if (refIds.isEmpty()) { return refIds; } List<String> visited = visitSummaryMapper.selectList(new LambdaQueryWrapper<VisitSummaryEntity>() .eq(VisitSummaryEntity::getVisitorId, userId) .in(VisitSummaryEntity::getRefId, refIds)) .stream().map(VisitSummaryEntity::getRefId).distinct().collect(Collectors.toList()); return ListUtils.subtract(refIds, visited); } public List<String> queryUseVisited(String userId) { List<String> visited = visitSummaryMapper.selectList(new LambdaQueryWrapper<VisitSummaryEntity>() .eq(VisitSummaryEntity::getVisitorId, userId)) .stream().map(VisitSummaryEntity::getRefId).distinct().collect(Collectors.toList()); return visited; } @Transactional public void insertOrUpdateDur(VisitSummaryEntity vs) { if (visitSummaryMapper.selectByIdent(vs.getIdent()) == null) { visitSummaryMapper.insert(vs); } else { visitSummaryMapper.updateDurByIdent(vs.getDuration(), vs.getIdent()); } } // 查询话题 详细页面 浏览量 public Integer queryTopicDetailVisit(String topicId) { return visitSummaryMapper.selectCount(new LambdaQueryWrapper<VisitSummaryEntity>() .eq(VisitSummaryEntity::getRefId, topicId) .eq(VisitSummaryEntity::getRefType, VisitTypeEnum.TOPIC_PAGE_VIEW.getCode())); } // 查询主题 浏览量 public Integer queryThemeVisit(String theme) { return visitSummaryMapper.selectCount(new LambdaQueryWrapper<VisitSummaryEntity>() .eq(VisitSummaryEntity::getRefId, theme) .eq(VisitSummaryEntity::getRefType, VisitTypeEnum.THEME_PAGE_VIEW.getCode())); } // 查询主题 浏览量 public Integer queryThemeVisit(List<String> themes) { if (CollectionUtils.isEmpty(themes)){ return 0; } return visitSummaryMapper.selectCount(new LambdaQueryWrapper<VisitSummaryEntity>() .in(VisitSummaryEntity::getRefId, themes) .eq(VisitSummaryEntity::getRefType, VisitTypeEnum.THEME_PAGE_VIEW.getCode())); } 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(); } } //统计主题集合的浏览量 public Map<String, Integer> getCountMapByTargetIds(List<String> refIds, VisitTypeEnum type) { if (CollectionUtils.isEmpty(refIds)){ return new HashMap<>(); } LambdaQueryWrapper<VisitSummaryEntity> wrapper = (new LambdaQueryWrapper<VisitSummaryEntity>() .in(VisitSummaryEntity::getRefId,refIds)) .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)); } }