Merge remote-tracking branch 'origin/main'

main
wangqing 10 months ago
commit 7e1af4eceb

@ -1,40 +1,22 @@
package com.luoo.music.controller; package com.luoo.music.controller;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javax.annotation.PostConstruct;
import com.apifan.common.random.RandomSource;
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.mapper.JournalMapper;
import com.luoo.music.dto.request.JournalQueryReq; import com.luoo.music.dto.request.JournalQueryReq;
import com.luoo.music.dto.response.JournalFilterDTO; 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.dto.response.TotalCommentVo;
import com.luoo.music.pojo.Comment;
import io.swagger.annotations.*; import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ClassPathResource;
import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.MongoTemplate; 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 org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import com.luoo.music.pojo.Journal; import com.luoo.music.pojo.Journal;
import com.luoo.music.pojo.Tag; import com.luoo.music.pojo.Tag;
@ -45,14 +27,9 @@ import annotation.GlobalInterceptor;
import annotation.VerifyParam; import annotation.VerifyParam;
import api.PageResult; import api.PageResult;
import api.Result; import api.Result;
import constants.Constants;
import dto.UserLoginDto; import dto.UserLoginDto;
import enums.CollectTypeEnum; import enums.CollectTypeEnum;
import enums.DateTimePatternEnum;
import lombok.SneakyThrows;
import util.DateUtil;
import util.JwtUtil; import util.JwtUtil;
import util.StringTools;
/** /**
* *
@ -71,16 +48,12 @@ public class JournalController {
@Autowired @Autowired
private JournalService journalService; private JournalService journalService;
@Autowired
private TagDao tagDao;
@Autowired @Autowired
private TagService tagService; private TagService tagService;
@Autowired @Autowired
private JwtUtil jwtUtil; private JwtUtil jwtUtil;
@Autowired @Autowired
private MongoTemplate mongoTemplate; private MongoTemplate mongoTemplate;
@ -88,30 +61,6 @@ public class JournalController {
private CommentDao commentDao; private CommentDao commentDao;
private static final int JOURNAL_FILTER_NUMBER_RANGE=100; private static final int JOURNAL_FILTER_NUMBER_RANGE=100;
// mock data
private static final String JOURNAL_TAG_FILE_PATH = "journalTags.txt";
private Map<String, List<String>> journalTagMap = new HashMap<>();
private static final String[] EDITOR = new String[] { "左岸以西", "落在低处" };
@PostConstruct
@SneakyThrows
private void init() {
getLines(JOURNAL_TAG_FILE_PATH).forEach(s -> {
String[] segs = s.split("\\|");
List<String> tags = Arrays.stream(segs[1].split(",")).collect(Collectors.toList());
journalTagMap.put(segs[0], tags);
});
}
private static List<String> getLines(String filePath) {
try (InputStream is = new ClassPathResource(filePath).getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));) {
return reader.lines().collect(Collectors.toList());
} catch (IOException e) {
e.printStackTrace();
}
return Collections.emptyList();
}
@ApiOperation(value = "1.查询期刊信息", notes = "若authorization为空或authorization校验失败默认返回最新的10期期刊筛选条件对游客不可用") @ApiOperation(value = "1.查询期刊信息", notes = "若authorization为空或authorization校验失败默认返回最新的10期期刊筛选条件对游客不可用")
@GetMapping("/list") @GetMapping("/list")
@ -121,8 +70,7 @@ public class JournalController {
@VerifyParam JournalQueryReq queryReq) { @VerifyParam JournalQueryReq queryReq) {
UserLoginDto user = jwtUtil.getUserLoginDto(authorization); UserLoginDto user = jwtUtil.getUserLoginDto(authorization);
if (null == user) { if (null == user) {
queryReq.setLanguage(null); queryReq.setCategoryId(null);
queryReq.setStyle(null);
queryReq.setPageNum(1); queryReq.setPageNum(1);
queryReq.setPageSize(10); queryReq.setPageSize(10);
} }
@ -130,7 +78,7 @@ public class JournalController {
List<String> ids=pageList.stream().map(Journal::getId).collect(Collectors.toList()); List<String> ids=pageList.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 = pageList.stream().map(a -> getJournalRespDTO(a, journalCollectSet)) List<JournalRespDTO> list = pageList.stream().map(a -> JournalMapper.getJournalRespDTO(a, journalCollectSet,mongoTemplate,commentDao))
.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));
} }
@ -153,7 +101,7 @@ public class JournalController {
} }
List<Journal> pageList = journalService.orderByField(objectIds); List<Journal> pageList = journalService.orderByField(objectIds);
Set<String> journalCollectSet = new HashSet<>(objectIds); Set<String> journalCollectSet = new HashSet<>(objectIds);
List<JournalRespDTO> list = pageList.stream().map(a -> getJournalRespDTO(a, journalCollectSet)) List<JournalRespDTO> list = pageList.stream().map(a -> JournalMapper.getJournalRespDTO(a, journalCollectSet,mongoTemplate,commentDao))
.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));
} }
@ -166,7 +114,7 @@ public class JournalController {
@PathVariable @VerifyParam(required = true) String id) { @PathVariable @VerifyParam(required = true) String id) {
UserLoginDto user = jwtUtil.getUserLoginDto(authorization); UserLoginDto user = jwtUtil.getUserLoginDto(authorization);
Journal journal = journalService.findById(id); Journal journal = journalService.findById(id);
JournalRespDTO journalRespDTO=getJournalRespDTO(journal, Collections.emptySet()); JournalRespDTO journalRespDTO=JournalMapper.getJournalRespDTO(journal, Collections.emptySet(),mongoTemplate,commentDao);
boolean isCollect=null == user ? false:userCollectInfoService.isCollect(user.getUserId(),id, CollectTypeEnum.JOURNAL); boolean isCollect=null == user ? false:userCollectInfoService.isCollect(user.getUserId(),id, CollectTypeEnum.JOURNAL);
journalRespDTO.setHaveCollect(isCollect); journalRespDTO.setHaveCollect(isCollect);
return Result.success(journalRespDTO); return Result.success(journalRespDTO);
@ -179,86 +127,17 @@ public class JournalController {
@RequestHeader(value = "Authorization", required = false) String authorization) { @RequestHeader(value = "Authorization", required = false) String authorization) {
JournalFilterDTO journalFilterDTO=new JournalFilterDTO(); JournalFilterDTO journalFilterDTO=new JournalFilterDTO();
journalFilterDTO.setJournalNoList(journalService.getJournalNoList(JOURNAL_FILTER_NUMBER_RANGE)); journalFilterDTO.setJournalNoList(journalService.getJournalNoList(JOURNAL_FILTER_NUMBER_RANGE));
journalFilterDTO.setLanguageList(tagService.getLanguageList());
journalFilterDTO.setStyleList(tagService.getStyleList());
return Result.success(journalFilterDTO);
}
private JournalRespDTO getJournalRespDTO(Journal journal, Set<String> journalCollectSet) {
JournalRespDTO journalRespDTO = new JournalRespDTO();
journalRespDTO.setId(journal.getId());
journalRespDTO.setJournalNo(journal.getJournalNo());
journalRespDTO.setTitle(journal.getTitle());
journalRespDTO.setImage(Constants.MUSIC_RESOURCE_PREFIX + journal.getImage());
journalRespDTO.setDate(getEditDate(journal));
journalRespDTO.setHaveCollect(journalCollectSet.contains(journalRespDTO.getId()));
journalRespDTO.setIpLocation("广东");
journalRespDTO.setTags(getTags(journalRespDTO.getJournalNo())); journalFilterDTO.setLanguageList(tagService.getLanguageList().stream().map(this::getTagDTO).collect(Collectors.toList()));
String content = journal.getContent(); journalFilterDTO.setStyleList(tagService.getStyleList().stream().map(this::getTagDTO).collect(Collectors.toList()));
if (StringTools.isEmpty(content)) { return Result.success(journalFilterDTO);
Poem poem = RandomSource.languageSource().randomTangPoem();
journalRespDTO.setEditor(poem.getAuthor());
journalRespDTO.setContent(Arrays.stream(poem.getContent()).collect(Collectors.joining("\r\n")));
} else {
journalRespDTO.setContent(content);
journalRespDTO.setEditor(getEditor(journal.getUserName()));
}
/**
*5...
*/
List<Comment> commentList = commentDao.findTop5ByJournalIdOrderByThumbupCountDesc(journal.getId());
journalRespDTO.setCommentList(commentList);
/**
*
*/
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();
journalRespDTO.setTotalCommentReply(total+"");
if (total>99) {
journalRespDTO.setTotalCommentReply("99+");
}
}
return journalRespDTO;
}
private String getEditor(String userName) {
return StringTools.isEmpty(userName)?EDITOR[RandomSource.numberSource().randomInt(0, EDITOR.length)]:userName;
}
private List<String> getTags(String journalNo) {
return journalTagMap.computeIfAbsent(journalNo, a -> getTags());
}
private List<String> getTags() {
int limit = RandomSource.numberSource().randomInt(1, 3);
return tagDao.random(limit).stream().map(Tag::getNameCh).sorted().collect(Collectors.toList());
} }
private TagDTO getTagDTO(Tag tag) {
private String getEditDate(Journal journal) { TagDTO tagDTO=new TagDTO();
LocalDateTime date = null == journal.getUpdateTime() ? journal.getCreateTime() : journal.getUpdateTime(); tagDTO.setName(tag.getNameCh());
return DateUtil.format(date, DateTimePatternEnum.YYYY_DOT_MM_DOT_DD.getPattern()); tagDTO.setId(tag.getId());
return tagDTO;
} }
@ApiOperation(value = "统计期刊的浏览数", notes = "APP端打开期刊调用一次统计接口") @ApiOperation(value = "统计期刊的浏览数", notes = "APP端打开期刊调用一次统计接口")
@RequestMapping(value="/stat/visits/{id}", method= RequestMethod.PUT) @RequestMapping(value="/stat/visits/{id}", method= RequestMethod.PUT)
public Result statVisitsCount(@ApiParam(value = "期刊ID", required = true) @PathVariable String id) { public Result statVisitsCount(@ApiParam(value = "期刊ID", required = true) @PathVariable String id) {

@ -0,0 +1,114 @@
package com.luoo.music.controller;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import javax.annotation.PostConstruct;
import com.apifan.common.random.RandomSource;
import com.apifan.common.random.entity.Poem;
import com.luoo.music.dao.CommentDao;
import com.luoo.music.dao.TagDao;
import com.luoo.music.dto.mapper.JournalMapper;
import com.luoo.music.dto.mapper.SongMapper;
import com.luoo.music.dto.request.JournalQueryReq;
import com.luoo.music.dto.response.JournalFilterDTO;
import com.luoo.music.dto.response.JournalRespDTO;
import com.luoo.music.dto.response.SearchCategoryDTO;
import com.luoo.music.dto.response.SearchResultDTO;
import com.luoo.music.dto.response.TotalCommentVo;
import com.luoo.music.pojo.Comment;
import io.swagger.annotations.*;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ClassPathResource;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
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 org.springframework.web.bind.annotation.*;
import com.luoo.music.pojo.Journal;
import com.luoo.music.pojo.JournalSong;
import com.luoo.music.pojo.Tag;
import com.luoo.music.service.JournalService;
import com.luoo.music.service.JournalSongService;
import com.luoo.music.service.TagService;
import com.luoo.music.service.UserCollectInfoService;
import annotation.GlobalInterceptor;
import annotation.VerifyParam;
import api.PageResult;
import api.Result;
import constants.Constants;
import dto.UserLoginDto;
import enums.CollectTypeEnum;
import enums.DateTimePatternEnum;
import lombok.SneakyThrows;
import util.DateUtil;
import util.JwtUtil;
import util.StringTools;
/**
*
*
* @author Administrator
*
*/
@RestController
@CrossOrigin
@Api(tags = "雀跃APP搜索 APIs")
@RequestMapping("/search")
public class SearchController {
@Autowired
private JournalService journalService;
@Autowired
private JournalSongService journalSongService;
@Autowired
private TagService tagService;
@ApiOperation(value = "1.查询搜索大类", notes = "如 ‘民谣’,‘电子’")
@GetMapping("/category")
@GlobalInterceptor
public Result<List<SearchCategoryDTO>> getCategory() {
List<Tag> tags = tagService.getLevel1Tags();
List<SearchCategoryDTO> searchCategoryDTOs = tags.stream().map(this::getSearchCategoryDTO)
.collect(Collectors.toList());
return Result.success(searchCategoryDTOs);
}
@ApiOperation(value = "2.搜索期刊/歌曲", notes = "根据关键词模糊搜索,如 期刊号,歌曲名 等")
@ApiImplicitParams({ @ApiImplicitParam(name = "keyword", value = "搜索关键词", required = true) })
@GetMapping("/fuzzy/{keyword}")
@GlobalInterceptor
public Result<SearchResultDTO> fuzzySearch(
@RequestHeader(value = "Authorization", required = false) String authorization,
@PathVariable @VerifyParam(required = true) String keyword) {
SearchResultDTO searchResultDTO = new SearchResultDTO();
List<Journal> journals = journalService.fuzzySearch(keyword);
List<JournalSong> songs = journalSongService.fuzzySearch(keyword);
searchResultDTO.setJournals(journals.stream().map(JournalMapper::getJournalRespDTO).collect(Collectors.toList()));
searchResultDTO.setSongs(songs.stream().map(SongMapper::getSongRespDTO).collect(Collectors.toList()));
return Result.success(searchResultDTO);
}
private SearchCategoryDTO getSearchCategoryDTO(Tag tag) {
SearchCategoryDTO searchCategoryDTO = new SearchCategoryDTO();
BeanUtils.copyProperties(tag, searchCategoryDTO);
return searchCategoryDTO;
}
}

@ -1,5 +1,6 @@
package com.luoo.music.controller; package com.luoo.music.controller;
import com.luoo.music.dto.mapper.SongMapper;
import com.luoo.music.dto.response.SongRespDTO; import com.luoo.music.dto.response.SongRespDTO;
import com.luoo.music.pojo.JournalSong; import com.luoo.music.pojo.JournalSong;
import com.luoo.music.service.JournalService; import com.luoo.music.service.JournalService;
@ -9,7 +10,6 @@ import annotation.GlobalInterceptor;
import annotation.VerifyParam; import annotation.VerifyParam;
import api.PageResult; import api.PageResult;
import api.Result; import api.Result;
import constants.Constants;
import dto.UserLoginDto; import dto.UserLoginDto;
import enums.CollectTypeEnum; import enums.CollectTypeEnum;
import enums.VerifyRegexEnum; import enums.VerifyRegexEnum;
@ -68,7 +68,7 @@ public class SongController {
List<String> ids=songs.stream().map(JournalSong::getId).collect(Collectors.toList()); List<String> ids=songs.stream().map(JournalSong::getId).collect(Collectors.toList());
Set<String> songCollectSet = null == user ? Collections.emptySet() Set<String> songCollectSet = null == user ? Collections.emptySet()
: userCollectInfoService.getCollectSet(user.getUserId(),ids, CollectTypeEnum.SONG); : userCollectInfoService.getCollectSet(user.getUserId(),ids, CollectTypeEnum.SONG);
List<SongRespDTO> results = songs.stream().map(s -> getSongRespDTO(s, songCollectSet)) List<SongRespDTO> results = songs.stream().map(s -> SongMapper.getSongRespDTO(s, songCollectSet))
.collect(Collectors.toList()); .collect(Collectors.toList());
return Result.success(results); return Result.success(results);
} }
@ -97,7 +97,7 @@ public class SongController {
List<JournalSong> songs = journalSongService.orderByField(objectIds); List<JournalSong> songs = journalSongService.orderByField(objectIds);
Set<String> songCollectSet = new HashSet<>(objectIds); Set<String> songCollectSet = new HashSet<>(objectIds);
List<SongRespDTO> results = songs.stream().map(s -> getSongRespDTO(s, songCollectSet)) List<SongRespDTO> results = songs.stream().map(s -> SongMapper.getSongRespDTO(s, songCollectSet))
.collect(Collectors.toList()); .collect(Collectors.toList());
return Result.success(new PageResult<SongRespDTO>(Long.valueOf(results.size()), results)); return Result.success(new PageResult<SongRespDTO>(Long.valueOf(results.size()), results));
} }
@ -116,7 +116,7 @@ public class SongController {
Set<String> songCollectSet = null == user ? Collections.emptySet() Set<String> songCollectSet = null == user ? Collections.emptySet()
: userCollectInfoService.getCollectSet(user.getUserId(),ids, CollectTypeEnum.SONG); : userCollectInfoService.getCollectSet(user.getUserId(),ids, CollectTypeEnum.SONG);
List<SongRespDTO> results = songs.stream().map(s -> getSongRespDTO(s, songCollectSet)) List<SongRespDTO> results = songs.stream().map(s -> SongMapper.getSongRespDTO(s, songCollectSet))
.collect(Collectors.toList()); .collect(Collectors.toList());
return Result.success(results); return Result.success(results);
} }
@ -129,24 +129,11 @@ public class SongController {
UserLoginDto user = jwtUtil.getUserLoginDto(authorization); UserLoginDto user = jwtUtil.getUserLoginDto(authorization);
JournalSong song = journalSongService.findById(id); JournalSong song = journalSongService.findById(id);
SongRespDTO songRespDTO=getSongRespDTO(song, Collections.emptySet()); SongRespDTO songRespDTO=SongMapper.getSongRespDTO(song);
boolean isCollect=null == user ? false:userCollectInfoService.isCollect(user.getUserId(),id, CollectTypeEnum.SONG); boolean isCollect=null == user ? false:userCollectInfoService.isCollect(user.getUserId(),id, CollectTypeEnum.SONG);
songRespDTO.setHaveCollect(isCollect); songRespDTO.setHaveCollect(isCollect);
return Result.success(songRespDTO); return Result.success(songRespDTO);
} }
private SongRespDTO getSongRespDTO(JournalSong song, Set<String> songCollectSet) {
SongRespDTO songRespDTO = new SongRespDTO();
songRespDTO.setJournalNo(song.getJournalNo());
songRespDTO.setAlbum(song.getAlbum());
songRespDTO.setArtist(song.getArtist());
songRespDTO.setId(song.getId());
songRespDTO.setTitle(song.getName());
songRespDTO.setSrc(Constants.MUSIC_RESOURCE_PREFIX + song.getUrl());
songRespDTO.setPic(Constants.MUSIC_RESOURCE_PREFIX + song.getUrl().replace(".mp3", ".jpg"));
songRespDTO.setLrc(Constants.MUSIC_RESOURCE_PREFIX + song.getUrl().replace(".mp3", ".lyric"));
songRespDTO.setSongNo(song.getSongNo());
songRespDTO.setHaveCollect(songCollectSet.contains(songRespDTO.getId()));
return songRespDTO;
}
} }

@ -29,6 +29,6 @@ public interface JournalTagDao extends JpaRepository<JournalTag,String>, JpaSpec
@Query("DELETE FROM JournalTag jt WHERE jt.journalId = :journalId") @Query("DELETE FROM JournalTag jt WHERE jt.journalId = :journalId")
int deleteByJournalId(@Param("journalId") String journalId); int deleteByJournalId(@Param("journalId") String journalId);
@Query(value = "select journal_id FROM tb_journal_tag where tag_id=(select id from tb_tag_info where level=?1 and name_ch=?2 limit 1)", nativeQuery = true) @Query(value = "select journal_id FROM tb_journal_tag where tag_id=?1", nativeQuery = true)
List<String> getJournalIdByLevelAndChName(int level,String chName); List<String> getJournalIdByTagId(String tagId);
} }

@ -18,9 +18,12 @@ public interface TagDao extends JpaRepository<Tag, String>, JpaSpecificationExec
@Query(value = "select * from tb_tag_info where parent_id='' order by rand() limit ?1 ", nativeQuery = true) @Query(value = "select * from tb_tag_info where parent_id='' order by rand() limit ?1 ", nativeQuery = true)
List<Tag> random(int limit); List<Tag> random(int limit);
@Query(value = "select name_ch from tb_tag_info where parent_id=(select id from tb_tag_info where name_ch='语言' and level=1 limit 1) ", nativeQuery = true) @Query(value = "select * from tb_tag_info where parent_id=(select id from tb_tag_info where name_ch='语言' and level=1 limit 1) ", nativeQuery = true)
List<String> getLanguageList(); List<Tag> getLanguageList();
@Query(value = "select name_ch from tb_tag_info where level=1 and not name_ch='语言' ", nativeQuery = true) @Query(value = "select * from tb_tag_info where level=1 and not name_ch='语言' ", nativeQuery = true)
List<String> getStyleList(); List<Tag> getStyleList();
@Query(value = "select * from tb_tag_info where level=1", nativeQuery = true)
List<Tag> getLevel1Tags();
} }

@ -0,0 +1,135 @@
package com.luoo.music.dto.mapper;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
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.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;
import util.DateUtil;
import util.StringTools;
public class JournalMapper {
// mock data
private static final String JOURNAL_TAG_FILE_PATH = "journalTags.txt";
private static final Map<String, List<String>> journalTagMap = new HashMap<>();
private static final String[] EDITOR = new String[] { "左岸以西", "落在低处" };
static {
getLines(JOURNAL_TAG_FILE_PATH).forEach(s -> {
String[] segs = s.split("\\|");
List<String> tags = Arrays.stream(segs[1].split(",")).collect(Collectors.toList());
journalTagMap.put(segs[0], tags);
});
}
private static List<String> getLines(String filePath) {
try (InputStream is = new ClassPathResource(filePath).getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));) {
return reader.lines().collect(Collectors.toList());
} catch (IOException e) {
e.printStackTrace();
}
return Collections.emptyList();
}
public static JournalRespDTO getJournalRespDTO(Journal journal) {
return getJournalRespDTO(journal,Collections.emptySet());
}
public static JournalRespDTO getJournalRespDTO(Journal journal, Set<String> journalCollectSet) {
JournalRespDTO journalRespDTO = new JournalRespDTO();
journalRespDTO.setId(journal.getId());
journalRespDTO.setJournalNo(journal.getJournalNo());
journalRespDTO.setTitle(journal.getTitle());
journalRespDTO.setImage(Constants.MUSIC_RESOURCE_PREFIX + journal.getImage());
journalRespDTO.setDate(getEditDate(journal));
journalRespDTO.setHaveCollect(journalCollectSet.contains(journalRespDTO.getId()));
journalRespDTO.setIpLocation("广东");
journalRespDTO.setTags(getTags(journalRespDTO.getJournalNo()));
String content = journal.getContent();
if (StringTools.isEmpty(content)) {
Poem poem = RandomSource.languageSource().randomTangPoem();
journalRespDTO.setEditor(poem.getAuthor());
journalRespDTO.setContent(Arrays.stream(poem.getContent()).collect(Collectors.joining("\r\n")));
} else {
journalRespDTO.setContent(content);
journalRespDTO.setEditor(getEditor(journal.getUserName()));
}
return journalRespDTO;
}
public static JournalRespDTO getJournalRespDTO(Journal journal, Set<String> journalCollectSet,
MongoTemplate mongoTemplate, CommentDao commentDao) {
JournalRespDTO journalRespDTO = getJournalRespDTO(journal,journalCollectSet);
/**
* 5...
*/
List<Comment> commentList = commentDao.findTop5ByJournalIdOrderByThumbupCountDesc(journal.getId());
journalRespDTO.setCommentList(commentList);
/**
*
*/
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();
journalRespDTO.setTotalCommentReply(total + "");
if (total > 99) {
journalRespDTO.setTotalCommentReply("99+");
}
}
return journalRespDTO;
}
private static String getEditor(String userName) {
return StringTools.isEmpty(userName) ? EDITOR[RandomSource.numberSource().randomInt(0, EDITOR.length)]
: userName;
}
private static List<String> getTags(String journalNo) {
return journalTagMap.getOrDefault(journalNo, Collections.emptyList());
}
private static String getEditDate(Journal journal) {
LocalDateTime date = null == journal.getUpdateTime() ? journal.getCreateTime() : journal.getUpdateTime();
return DateUtil.format(date, DateTimePatternEnum.YYYY_DOT_MM_DOT_DD.getPattern());
}
}

@ -0,0 +1,30 @@
package com.luoo.music.dto.mapper;
import java.util.Collections;
import java.util.Set;
import com.luoo.music.dto.response.SongRespDTO;
import com.luoo.music.pojo.JournalSong;
import constants.Constants;
public class SongMapper {
public static SongRespDTO getSongRespDTO(JournalSong song, Set<String> songCollectSet) {
SongRespDTO songRespDTO = new SongRespDTO();
songRespDTO.setJournalNo(song.getJournalNo());
songRespDTO.setAlbum(song.getAlbum());
songRespDTO.setArtist(song.getArtist());
songRespDTO.setId(song.getId());
songRespDTO.setTitle(song.getName());
songRespDTO.setSrc(Constants.MUSIC_RESOURCE_PREFIX + song.getUrl());
songRespDTO.setPic(Constants.MUSIC_RESOURCE_PREFIX + song.getUrl().replace(".mp3", ".jpg"));
songRespDTO.setLrc(Constants.MUSIC_RESOURCE_PREFIX + song.getUrl().replace(".mp3", ".lyric"));
songRespDTO.setSongNo(song.getSongNo());
songRespDTO.setHaveCollect(songCollectSet.contains(songRespDTO.getId()));
return songRespDTO;
}
public static SongRespDTO getSongRespDTO(JournalSong song) {
return getSongRespDTO(song, Collections.emptySet());
}
}

@ -12,10 +12,8 @@ import java.io.Serializable;
@ApiModel @ApiModel
public class JournalQueryReq implements Serializable { public class JournalQueryReq implements Serializable {
private static final long serialVersionUID = -1198060864891902188L; private static final long serialVersionUID = -1198060864891902188L;
@ApiModelProperty(value = "筛选条件:风格", example = "民谣") @ApiModelProperty(value = "筛选条件类目Id", example = "民谣/国语 id")
private String style; private String categoryId;
@ApiModelProperty(value = "筛选条件:语言", example = "国语")
private String language;
@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")

@ -8,9 +8,9 @@ import lombok.Data;
@Data @Data
public class JournalFilterDTO { public class JournalFilterDTO {
@ApiModelProperty(value = "风格筛选条件") @ApiModelProperty(value = "风格筛选条件")
private List<String> styleList; private List<TagDTO> styleList;
@ApiModelProperty(value = "语言筛选条件") @ApiModelProperty(value = "语言筛选条件")
private List<String> languageList; private List<TagDTO> languageList;
@ApiModelProperty(value = "期刊号筛选条件") @ApiModelProperty(value = "期刊号筛选条件")
private List<String> journalNoList; private List<String> journalNoList;
} }

@ -0,0 +1,18 @@
package com.luoo.music.dto.response;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class SearchCategoryDTO {
@ApiModelProperty(value = "ID")
private String id;
@ApiModelProperty(value = "中文名")
private String nameCh;
@ApiModelProperty(value = "英文名")
private String nameEn;
@ApiModelProperty(value = "图片路径")
private String image;
@ApiModelProperty(value = "说明文案")
private String description;
}

@ -0,0 +1,14 @@
package com.luoo.music.dto.response;
import java.util.List;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class SearchResultDTO {
@ApiModelProperty(value = "歌曲")
private List<SongRespDTO> songs;
@ApiModelProperty(value = "期刊")
private List<JournalRespDTO> journals;
}

@ -0,0 +1,12 @@
package com.luoo.music.dto.response;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class TagDTO {
@ApiModelProperty(value = "ID")
private String id;
@ApiModelProperty(value = "中文名")
private String name;
}

@ -1,7 +1,7 @@
package com.luoo.music.pojo; package com.luoo.music.pojo;
import lombok.Data; import lombok.*;
import org.hibernate.proxy.HibernateProxy; import org.hibernate.proxy.HibernateProxy;
import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate; import org.springframework.data.annotation.LastModifiedDate;
@ -15,11 +15,10 @@ import java.io.Serializable;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Objects; import java.util.Objects;
/** @Getter
* @Setter
* @author locust @ToString
*/ @RequiredArgsConstructor
@Data
@Entity @Entity
@Table(name = "tb_tag_info") @Table(name = "tb_tag_info")
@EntityListeners(AuditingEntityListener.class) @EntityListeners(AuditingEntityListener.class)
@ -54,6 +53,16 @@ public class Tag implements Serializable {
*/ */
private Integer state; private Integer state;
/**
*
*/
private String description;
/**
*
*/
private String image;
/** /**
* ID * ID
*/ */

@ -205,11 +205,8 @@ public class JournalService {
private List<String> getJournalIds(JournalQueryReq queryReq) { private List<String> getJournalIds(JournalQueryReq queryReq) {
if(StringUtils.isNotBlank(queryReq.getLanguage())){ if(StringUtils.isNotBlank(queryReq.getCategoryId())){
return journalTagDao.getJournalIdByLevelAndChName(2,queryReq.getLanguage()); return journalTagDao.getJournalIdByTagId(queryReq.getCategoryId());
}
if(StringUtils.isNotBlank(queryReq.getStyle())){
return journalTagDao.getJournalIdByLevelAndChName(1,queryReq.getStyle());
} }
return Collections.emptyList(); return Collections.emptyList();
} }
@ -278,4 +275,10 @@ public class JournalService {
JOURNAL_RANGE_MAP.put(maxJournalNo, journalNoList); JOURNAL_RANGE_MAP.put(maxJournalNo, journalNoList);
return journalNoList; return journalNoList;
} }
public List<Journal> fuzzySearch(String keyword) {
// TODO Auto-generated method stub
return Collections.emptyList();
}
} }

@ -17,6 +17,7 @@ import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root; import javax.persistence.criteria.Root;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -152,4 +153,9 @@ public class JournalSongService {
public List<JournalSong> orderByField(List<String> objectIds) { public List<JournalSong> orderByField(List<String> objectIds) {
return journalSongDao.orderByField(objectIds); return journalSongDao.orderByField(objectIds);
} }
public List<JournalSong> fuzzySearch(String keyword) {
// TODO Auto-generated method stub
return Collections.emptyList();
}
} }

@ -6,17 +6,22 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.luoo.music.dao.TagDao; import com.luoo.music.dao.TagDao;
import com.luoo.music.pojo.Tag;
@Service @Service
public class TagService { public class TagService {
@Autowired @Autowired
private TagDao tagDao; private TagDao tagDao;
public List<String> getLanguageList() { public List<Tag> getLanguageList() {
return tagDao.getLanguageList(); return tagDao.getLanguageList();
} }
public List<String> getStyleList() { public List<Tag> getStyleList() {
return tagDao.getStyleList(); return tagDao.getStyleList();
} }
public List<Tag> getLevel1Tags() {
return tagDao.getLevel1Tags();
}
} }

Loading…
Cancel
Save