1.add tag infos in jouranl response

main
Gary 6 months ago
parent a7fd80ab97
commit 7cf67658d3

@ -124,6 +124,7 @@ public class SaticScheduleTask {
private void updateJouranlTag(Journal journal) { private void updateJouranlTag(Journal journal) {
List<String> tags = tagDao.getTagNameChByJournalId(journal.getId()); List<String> tags = tagDao.getTagNameChByJournalId(journal.getId());
if (!tags.isEmpty()) { if (!tags.isEmpty()) {
cacheChannel.clear("tag");
String tagStr = tags.stream().distinct().sorted().collect(Collectors.joining(Constants.COMMA)); String tagStr = tags.stream().distinct().sorted().collect(Collectors.joining(Constants.COMMA));
if (!tagStr.equals(journal.getNameChTags())) { if (!tagStr.equals(journal.getNameChTags())) {
journal.setNameChTags(tagStr); journal.setNameChTags(tagStr);

@ -12,7 +12,6 @@ import com.luoo.music.dto.response.JournalRespDTO;
import com.luoo.music.dto.response.SongRespDTO; import com.luoo.music.dto.response.SongRespDTO;
import io.swagger.annotations.*; import io.swagger.annotations.*;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.PageRequest;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
@ -51,6 +50,9 @@ public class JournalController {
@Autowired @Autowired
private JournalService journalService; private JournalService journalService;
@Autowired
private JournalMapper journalMapper;
@Autowired @Autowired
private SongController songController; private SongController songController;
@ -124,7 +126,7 @@ public class JournalController {
List<Journal> pageList = journalService.orderByField(objectIds); List<Journal> pageList = journalService.orderByField(objectIds);
UserLoginDto user = jwtUtil.getUserLoginDto(authorization); UserLoginDto user = jwtUtil.getUserLoginDto(authorization);
Set<String> journalCollectSet = getMyCollectSet(user.getUserId(),queryReq.getUserId(),objectIds); Set<String> journalCollectSet = getMyCollectSet(user.getUserId(),queryReq.getUserId(),objectIds);
List<JournalRespDTO> list = pageList.stream().map(a -> JournalMapper.getJournalRespDTO(a, journalCollectSet)) List<JournalRespDTO> list = pageList.stream().map(a -> journalMapper.getJournalRespDTO(a, journalCollectSet))
.collect(Collectors.toList()); .collect(Collectors.toList());
// list = list.stream().map(journalRespDTO -> randomCDN(journalRespDTO)).collect(Collectors.toList()); // list = list.stream().map(journalRespDTO -> randomCDN(journalRespDTO)).collect(Collectors.toList());
return Result.success(new PageResult<JournalRespDTO>(count, list)); return Result.success(new PageResult<JournalRespDTO>(count, list));
@ -278,7 +280,7 @@ public class JournalController {
List<String> ids=journals.stream().map(Journal::getId).collect(Collectors.toList()); List<String> ids=journals.stream().map(Journal::getId).collect(Collectors.toList());
Set<String> journalCollectSet = null == user ? Collections.emptySet() Set<String> journalCollectSet = null == user ? Collections.emptySet()
: userCollectInfoService.getCollectSet(user.getUserId(),ids, CollectTypeEnum.JOURNAL); : userCollectInfoService.getCollectSet(user.getUserId(),ids, CollectTypeEnum.JOURNAL);
List<JournalRespDTO> list = journals.stream().sorted(Comparator.comparing(Journal::getUserCollectCount).reversed()).map(a -> JournalMapper.getJournalRespDTO(a, journalCollectSet)) List<JournalRespDTO> list = journals.stream().sorted(Comparator.comparing(Journal::getUserCollectCount).reversed()).map(a -> journalMapper.getJournalRespDTO(a, journalCollectSet))
.collect(Collectors.toList()); .collect(Collectors.toList());
return Result.success(list); return Result.success(list);
} }
@ -288,7 +290,7 @@ public class JournalController {
@GlobalInterceptor @GlobalInterceptor
public Result<List<JournalRespDTO>> recommend() { public Result<List<JournalRespDTO>> recommend() {
List<Journal> journals = journalService.recommend(); List<Journal> journals = journalService.recommend();
List<JournalRespDTO> list = journals.stream().sorted(Comparator.comparing(Journal::getUserCollectCount).reversed()).map(a -> JournalMapper.getJournalRespDTO(a)) List<JournalRespDTO> list = journals.stream().sorted(Comparator.comparing(Journal::getUserCollectCount).reversed()).map(a -> journalMapper.getJournalRespDTO(a))
.collect(Collectors.toList()); .collect(Collectors.toList());
return Result.success(list); return Result.success(list);
} }

@ -43,6 +43,9 @@ public class SearchController {
@Autowired @Autowired
private JournalService journalService; private JournalService journalService;
@Autowired
private JournalMapper journalMapper;
@Autowired @Autowired
private JournalSongService journalSongService; private JournalSongService journalSongService;
@ -89,7 +92,7 @@ public class SearchController {
@VerifyParam(required = true) FuzzySearchReq query) throws InterruptedException, ExecutionException { @VerifyParam(required = true) FuzzySearchReq query) throws InterruptedException, ExecutionException {
PageRequest pageRequest = PageRequest.of(getPageNum(query.getPageNum()), getPageSize(query.getPageSize())); PageRequest pageRequest = PageRequest.of(getPageNum(query.getPageNum()), getPageSize(query.getPageSize()));
List<Journal> pageResults=journalService.fuzzySearch(query.getKeyword(),pageRequest); List<Journal> pageResults=journalService.fuzzySearch(query.getKeyword(),pageRequest);
List<JournalRespDTO> list = pageResults.stream().map(JournalMapper::getJournalRespDTO) List<JournalRespDTO> list = pageResults.stream().map(journalMapper::getJournalRespDTO)
.collect(Collectors.toList()); .collect(Collectors.toList());
return Result.success(new PageResult<JournalRespDTO>(Long.valueOf(list.size()), list)); return Result.success(new PageResult<JournalRespDTO>(Long.valueOf(list.size()), list));
} }

@ -32,9 +32,6 @@ public interface JournalTagDao extends JpaRepository<JournalTag,String>, JpaSpec
@Query(value = "select journal_id FROM tb_journal_tag where tag_id=?1 or tag_id in (select id from tb_tag_info where parent_id=?1)", nativeQuery = true) @Query(value = "select journal_id FROM tb_journal_tag where tag_id=?1 or tag_id in (select id from tb_tag_info where parent_id=?1)", nativeQuery = true)
List<String> getJournalIdByTagId(String tagId); List<String> getJournalIdByTagId(String tagId);
@Query(value = "select tb_journal_tag.journal_id FROM tb_journal_tag, tb_tag_info where tb_tag_info.name_ch=?1 and (tb_journal_tag.tag_id=tb_tag_info.id or tb_journal_tag.tag_id in (select tb_tag_info.id from tb_tag_info where tb_tag_info.parent_id=tb_tag_info.id))", nativeQuery = true)
List<String> getJournalIdByTagName(String tag);
@Query(value = "select journal_id from tb_journal_tag where tag_id in (select tag_id from tb_journal_tag where journal_id=?1) and not journal_id=?1 order by rand() limit ?2", nativeQuery = true) @Query(value = "select journal_id from tb_journal_tag where tag_id in (select tag_id from tb_journal_tag where journal_id=?1) and not journal_id=?1 order by rand() limit ?2", nativeQuery = true)
List<String> recommendByJournalId(String journalId, Integer limit); List<String> recommendByJournalId(String journalId, Integer limit);
} }

@ -33,4 +33,7 @@ public interface TagDao extends JpaRepository<Tag, String>, JpaSpecificationExec
@Query(value = "select name_ch from tb_journal_tag,tb_tag_info where journal_id = ?1 and tb_journal_tag.tag_id =tb_tag_info.id ;", nativeQuery = true) @Query(value = "select name_ch from tb_journal_tag,tb_tag_info where journal_id = ?1 and tb_journal_tag.tag_id =tb_tag_info.id ;", nativeQuery = true)
List<String> getTagNameChByJournalId(String journalId); List<String> getTagNameChByJournalId(String journalId);
@Query(value = "select * from tb_tag_info where name_ch=?1 limit 1", nativeQuery = true)
Tag findByTagName(String tagName);
} }

@ -10,31 +10,60 @@ import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import com.luoo.music.client.UserClient; import com.luoo.music.client.UserClient;
import net.oschina.j2cache.CacheChannel; import net.oschina.j2cache.CacheChannel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.ClassPathResource;
import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.MongoTemplate;
import com.apifan.common.random.RandomSource; import com.apifan.common.random.RandomSource;
import com.apifan.common.random.entity.Poem; import com.apifan.common.random.entity.Poem;
import com.luoo.music.dao.CommentDao; import com.luoo.music.dao.CommentDao;
import com.luoo.music.dao.TagDao;
import com.luoo.music.dto.response.CommentDTO; import com.luoo.music.dto.response.CommentDTO;
import com.luoo.music.dto.response.JournalFilterDTO;
import com.luoo.music.dto.response.JournalRespDTO; import com.luoo.music.dto.response.JournalRespDTO;
import com.luoo.music.dto.response.TagDTO;
import com.luoo.music.pojo.Journal; import com.luoo.music.pojo.Journal;
import com.luoo.music.pojo.Tag;
import com.luoo.music.service.TagService;
import constants.Constants; import constants.Constants;
import enums.DateTimePatternEnum; import enums.DateTimePatternEnum;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import util.DateUtil; import util.DateUtil;
import util.StringTools; import util.StringTools;
@Component
public class JournalMapper { public class JournalMapper {
public static JournalRespDTO getJournalRespDTO(Journal journal) { @Autowired
private RedisTemplate redisTemplate;
@Autowired
private CacheChannel cacheChannel;
@Autowired
private MongoTemplate mongoTemplate;
@Autowired
private CommentDao commentDao;
@Autowired
private TagDao tagDao;
@Autowired
private UserClient userClient;
public JournalRespDTO getJournalRespDTO(Journal journal) {
return getJournalRespDTO(journal, Collections.emptySet()); return getJournalRespDTO(journal, Collections.emptySet());
} }
public static JournalRespDTO getJournalRespDTO(Journal journal, Set<String> journalCollectSet) { public JournalRespDTO getJournalRespDTO(Journal journal, Set<String> journalCollectSet) {
JournalRespDTO journalRespDTO = new JournalRespDTO(); JournalRespDTO journalRespDTO = new JournalRespDTO();
journalRespDTO.setId(journal.getId()); journalRespDTO.setId(journal.getId());
journalRespDTO.setJournalNo(journal.getJournalNo()); journalRespDTO.setJournalNo(journal.getJournalNo());
@ -48,6 +77,8 @@ public class JournalMapper {
String nameChTags=journal.getNameChTags(); String nameChTags=journal.getNameChTags();
if(!StringTools.isEmpty(nameChTags)) { if(!StringTools.isEmpty(nameChTags)) {
List<String> tags=Arrays.stream(nameChTags.split(",")).collect(Collectors.toList()); List<String> tags=Arrays.stream(nameChTags.split(",")).collect(Collectors.toList());
List<TagDTO> tagInfos = tags.stream().map(this::getTagDto).filter(Objects::nonNull).collect(Collectors.toList());
journalRespDTO.setTagInfos(tagInfos);
journalRespDTO.setTags(tags); journalRespDTO.setTags(tags);
} }
journalRespDTO.setContent(journal.getContent()); journalRespDTO.setContent(journal.getContent());
@ -56,9 +87,22 @@ public class JournalMapper {
return journalRespDTO; return journalRespDTO;
} }
private TagDTO getTagDto(String tagName) {
return (TagDTO) this.cacheChannel.get("tag", tagName, key -> getTagDtoByName(tagName), false).getValue();
}
private TagDTO getTagDtoByName(String tagName) {
Tag tag=tagDao.findByTagName(tagName);
if(null==tag) {
return null;
}
TagDTO tagDTO=new TagDTO();
tagDTO.setName(tag.getNameCh());
tagDTO.setId(tag.getId());
return tagDTO;
}
public static JournalRespDTO getJournalRespDTO(Journal journal, public JournalRespDTO getJournalRespDTOWithComment(Journal journal) {
MongoTemplate mongoTemplate, RedisTemplate redisTemplate, CommentDao commentDao, UserClient userClient, CacheChannel cacheChannel) {
JournalRespDTO journalRespDTO = getJournalRespDTO(journal); JournalRespDTO journalRespDTO = getJournalRespDTO(journal);
CommentDTO commentDTO = CommentMapper.getCommentDTO(journalRespDTO.getId(), mongoTemplate, commentDao, CommentDTO commentDTO = CommentMapper.getCommentDTO(journalRespDTO.getId(), mongoTemplate, commentDao,
redisTemplate,userClient,cacheChannel); redisTemplate,userClient,cacheChannel);
@ -70,7 +114,7 @@ public class JournalMapper {
} }
private static String getPublishDate(Journal journal) { private String getPublishDate(Journal journal) {
LocalDateTime date = null == journal.getPubTime() ? journal.getCreateTime() : journal.getPubTime(); LocalDateTime date = null == journal.getPubTime() ? journal.getCreateTime() : journal.getPubTime();
return DateUtil.format(date, DateTimePatternEnum.YYYY_DOT_MM_DOT_DD.getPattern()); return DateUtil.format(date, DateTimePatternEnum.YYYY_DOT_MM_DOT_DD.getPattern());
} }

@ -18,8 +18,6 @@ public class JournalQueryReq implements Serializable {
private static final long serialVersionUID = -1198060864891902188L; private static final long serialVersionUID = -1198060864891902188L;
@ApiModelProperty(value = "筛选条件类目Id", example = "民谣/国语 id") @ApiModelProperty(value = "筛选条件类目Id", example = "民谣/国语 id")
private String categoryId; private String categoryId;
@ApiModelProperty(value = "筛选条件:期刊标签", example = "民谣/国语")
private String tag;
@ApiModelProperty(value = "筛选条件:期刊号范围", example = "900~800") @ApiModelProperty(value = "筛选条件:期刊号范围", example = "900~800")
private String journalNoRange; private String journalNoRange;
@ApiModelProperty(value = "分页: 页码以1开始即获取最新的几期", example = "1") @ApiModelProperty(value = "分页: 页码以1开始即获取最新的几期", example = "1")
@ -33,7 +31,7 @@ public class JournalQueryReq implements Serializable {
} }
public String countString() { public String countString() {
return getString(categoryId)+ "_" + getString(tag) + "_" + getString(journalNoRange); return getString(categoryId) + "_" + getString(journalNoRange);
} }
private String getString(String value) { private String getString(String value) {

@ -20,6 +20,8 @@ public class JournalRespDTO implements Serializable {
private String image; private String image;
@ApiModelProperty(value = "期刊标签") @ApiModelProperty(value = "期刊标签")
private List<String> tags; private List<String> tags;
@ApiModelProperty(value = "期刊标签信息")
private List<TagDTO> tagInfos;
@ApiModelProperty(value = "概要") @ApiModelProperty(value = "概要")
private String summary; private String summary;
@ApiModelProperty(value = "文案") @ApiModelProperty(value = "文案")

@ -60,6 +60,9 @@ public class JournalService {
@Autowired @Autowired
private JournalSongDao journalSongDao; private JournalSongDao journalSongDao;
@Autowired
private JournalMapper journalMapper;
@Autowired @Autowired
private JournalTagDao journalTagDao; private JournalTagDao journalTagDao;
@Autowired @Autowired
@ -228,14 +231,9 @@ public class JournalService {
if(StringUtils.isNotBlank(queryReq.getCategoryId())){ if(StringUtils.isNotBlank(queryReq.getCategoryId())){
return journalTagDao.getJournalIdByTagId(queryReq.getCategoryId()); return journalTagDao.getJournalIdByTagId(queryReq.getCategoryId());
} }
if(StringUtils.isNotBlank(queryReq.getTag())){
return journalTagDao.getJournalIdByTagName(queryReq.getTag());
}
return Collections.emptyList(); return Collections.emptyList();
} }
public boolean isLatest10ByJournalNo(String journalNo) { public boolean isLatest10ByJournalNo(String journalNo) {
return null!=journalDao.isLatest10ByJournalNo(journalNo); return null!=journalDao.isLatest10ByJournalNo(journalNo);
} }
@ -399,12 +397,12 @@ public class JournalService {
private List<JournalRespDTO> getJournalRespDTO(JournalQueryReq queryReq) { private List<JournalRespDTO> getJournalRespDTO(JournalQueryReq queryReq) {
List<Journal> pageList = queryPage(queryReq); List<Journal> pageList = queryPage(queryReq);
return pageList.stream().map(a -> return pageList.stream().map(a ->
JournalMapper.getJournalRespDTO(a)).collect(Collectors.toList()); journalMapper.getJournalRespDTO(a)).collect(Collectors.toList());
} }
private List<JournalRespDTO> getJournalRespDTOWithComment(JournalQueryReq queryReq) { private List<JournalRespDTO> getJournalRespDTOWithComment(JournalQueryReq queryReq) {
List<Journal> pageList = queryPage(queryReq); List<Journal> pageList = queryPage(queryReq);
return pageList.stream().map(journal -> JournalMapper.getJournalRespDTO(journal,mongoTemplate,redisTemplate,commentDao,userClient,cacheChannel)).collect(Collectors.toList()); return pageList.stream().map(journal -> journalMapper.getJournalRespDTOWithComment(journal)).collect(Collectors.toList());
} }
@ -418,7 +416,7 @@ public class JournalService {
if(null==journal) { if(null==journal) {
return null; return null;
} }
return JournalMapper.getJournalRespDTO(journal,mongoTemplate,redisTemplate,commentDao,userClient,cacheChannel); return journalMapper.getJournalRespDTOWithComment(journal);
} }
public JournalRespDTO queryJournalByJournalNo(String journalNo) { public JournalRespDTO queryJournalByJournalNo(String journalNo) {
@ -430,7 +428,7 @@ public class JournalService {
if(null==journal) { if(null==journal) {
return null; return null;
} }
return JournalMapper.getJournalRespDTO(journal,mongoTemplate,redisTemplate,commentDao,userClient,cacheChannel); return journalMapper.getJournalRespDTOWithComment(journal);
} }
public JournalFilterDTO getJournalFilterDTO() { public JournalFilterDTO getJournalFilterDTO() {

Loading…
Cancel
Save