@ -11,22 +11,15 @@ import java.util.HashMap;
import java.util.List ;
import java.util.Map ;
import java.util.Set ;
import java.util.concurrent.TimeUnit ;
import java.util.stream.Collectors ;
import org.apache.commons.lang.StringUtils ;
import org.springframework.core.io.ClassPathResource ;
import org.springframework.data.mongodb.core.MongoTemplate ;
import org.springframework.data.mongodb.core.aggregation.Aggregation ;
import org.springframework.data.mongodb.core.aggregation.AggregationResults ;
import org.springframework.data.mongodb.core.query.Criteria ;
import com.apifan.common.random.RandomSource ;
import com.apifan.common.random.entity.Poem ;
import com.luoo.music.dao.CommentDao ;
import com.luoo.music.dto.response.CommentDTO ;
import com.luoo.music.dto.response.JournalRespDTO ;
import com.luoo.music.dto.response.TotalCommentVo ;
import com.luoo.music.pojo.Comment ;
import com.luoo.music.pojo.Journal ;
import constants.Constants ;
import enums.DateTimePatternEnum ;
@ -58,11 +51,12 @@ public class JournalMapper {
return Collections . emptyList ( ) ;
}
public static JournalRespDTO getJournalRespDTO ( Journal journal ) {
return getJournalRespDTO ( journal , Collections . emptySet ( ) ) ;
public static JournalRespDTO getJournalRespDTO ( Journal journal , Map < String , List < String > > tagMap ) {
return getJournalRespDTO ( journal , Collections . emptySet ( ) , tagMap ) ;
}
public static JournalRespDTO getJournalRespDTO ( Journal journal , Set < String > journalCollectSet ) {
public static JournalRespDTO getJournalRespDTO ( Journal journal , Set < String > journalCollectSet ,
Map < String , List < String > > tagMap ) {
JournalRespDTO journalRespDTO = new JournalRespDTO ( ) ;
journalRespDTO . setId ( journal . getId ( ) ) ;
journalRespDTO . setJournalNo ( journal . getJournalNo ( ) ) ;
@ -72,7 +66,7 @@ public class JournalMapper {
journalRespDTO . setHaveCollect ( journalCollectSet . contains ( journalRespDTO . getId ( ) ) ) ;
journalRespDTO . setIpLocation ( "广东" ) ;
journalRespDTO . setTags ( getTags( journalRespDTO . getJournalNo ( ) ) ) ;
journalRespDTO . setTags ( tagMap. getOrDefault ( journalRespDTO . getId ( ) , getTags( journalRespDTO . getJournalNo ( ) ) ) ) ;
String content = journal . getContent ( ) ;
if ( StringTools . isEmpty ( content ) ) {
Poem poem = RandomSource . languageSource ( ) . randomTangPoem ( ) ;
@ -85,58 +79,15 @@ public class JournalMapper {
}
return journalRespDTO ;
}
public static JournalRespDTO getJournalRespDTO ( Journal journal , Set < String > journalCollectSet ,
MongoTemplate mongoTemplate , RedisTemplate redisTemplate , CommentDao commentDao ) {
JournalRespDTO journalRespDTO = getJournalRespDTO ( journal , journalCollectSet ) ;
/ * *
* 显 示 期 刊 点 赞 最 多 5 条 评 论 , 该 五 条 评 论 随 机 显 示 , 每 次 进 入 刷 新 新 , 超 过 部 分 显 示 为 “ . . . ” 点 击 评 论 进 入 期 刊 详 情 页 并 自 动 定 位 到 该 评 论 , 点 击 用 户 头 像 同 上 , 若 为 空 数 据 则 显 示 “ 暂 无 评 论 , 快 去 抢 沙 发 吧 !
* /
List < Comment > commentList = ( List < Comment > ) redisTemplate . opsForValue ( ) . get ( "JOURNAL_TOP5_COMMENT___" + journal . getId ( ) ) ;
if ( null ! = commentList ) {
journalRespDTO . setCommentList ( commentList ) ;
} else {
commentList = commentDao . findTop5ByJournalIdOrderByThumbupCountDesc ( journal . getId ( ) ) ;
journalRespDTO . setCommentList ( commentList ) ;
redisTemplate . opsForValue ( ) . set ( "JOURNAL_TOP5_COMMENT___" + journal . getId ( ) , commentList , 6 , TimeUnit . HOURS ) ;
}
// List<Comment> commentList = commentDao.findTop5ByJournalIdOrderByThumbupCountDesc(journal.getId());
//
// journalRespDTO.setCommentList(commentList);
/ * *
* 获 取 期 刊 总 评 论 数 一 级 评 论 数 加 上 父 评 论 的 总 回 复 数
* /
String totalString = ( String ) redisTemplate . opsForValue ( ) . get ( "JOURNAL_TATAL_COMMENT_COUNT___" + journal . getId ( ) ) ;
if ( StringUtils . isNotBlank ( totalString ) ) {
journalRespDTO . setTotalCommentReply ( totalString ) ;
} else {
totalString = "0" ;
Criteria criteria = Criteria . where ( "journalId" ) . is ( journal . getId ( ) ) ;
Aggregation agg = Aggregation . newAggregation ( Aggregation . match ( criteria ) , // 匹配条件
Aggregation . group ( ) . sum ( "commentCount" ) . as ( "totalComment" ) ) ;
AggregationResults < TotalCommentVo > results = mongoTemplate . aggregate ( agg , "comment" , TotalCommentVo . class ) ;
TotalCommentVo totalCommentVo = results . getUniqueMappedResult ( ) ;
journalRespDTO . setTotalCommentReply ( "0" ) ;
List < Comment > list = commentDao . findByJournalId ( journal . getId ( ) ) ;
int total = 0 ;
if ( null ! = list & & list . size ( ) > 0 ) {
total = list . size ( ) ;
}
if ( null ! = totalCommentVo ) {
total = total + totalCommentVo . getTotalComment ( ) ;
totalString = total + "" ;
if ( total > 99 ) {
totalString = "99+" ;
}
}
journalRespDTO . setTotalCommentReply ( totalString ) ;
redisTemplate . opsForValue ( ) . set ( "JOURNAL_TATAL_COMMENT_COUNT___" + journal . getId ( ) , totalString , 6 , TimeUnit . HOURS ) ;
}
public static JournalRespDTO getJournalRespDTO ( Journal journal , Set < String > journalCollectSet ,
MongoTemplate mongoTemplate , RedisTemplate redisTemplate , CommentDao commentDao ,
Map < String , List < String > > tagMap ) {
JournalRespDTO journalRespDTO = getJournalRespDTO ( journal , journalCollectSet , tagMap ) ;
CommentDTO commentDTO = CommentMapper . getCommentDTO ( journalRespDTO . getId ( ) , mongoTemplate , commentDao ,
redisTemplate ) ;
journalRespDTO . setCommentList ( commentDTO . getCommentList ( ) ) ;
journalRespDTO . setTotalCommentReply ( commentDTO . getTotalCommentReply ( ) ) ;
return journalRespDTO ;
}