1.update url for song/image/lyric

main
Gary 10 months ago
parent e8ff3810af
commit c9d913fc61

@ -46,4 +46,6 @@ public interface JournalSongDao extends JpaRepository<JournalSong,String>, JpaSp
@Query(value = "select * from tb_journal_song where id in ?1 order by field(id,?1)", nativeQuery = true) @Query(value = "select * from tb_journal_song where id in ?1 order by field(id,?1)", nativeQuery = true)
public List<JournalSong> orderByField(List<String> idList); public List<JournalSong> orderByField(List<String> idList);
List<JournalSong> findByJournalNoOrderBySongNo(String journalNo);
} }

@ -1,5 +1,6 @@
package com.luoo.music.dao; package com.luoo.music.dao;
import com.luoo.music.pojo.Journal;
import com.luoo.music.pojo.SongInfo; import com.luoo.music.pojo.SongInfo;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
@ -25,5 +26,13 @@ public interface SongInfoDao extends JpaRepository<SongInfo,String>, JpaSpecific
@Query("UPDATE SongInfo s SET s.lyric = :lyric WHERE s.id = :id") @Query("UPDATE SongInfo s SET s.lyric = :lyric WHERE s.id = :id")
int updateSongLyric(@Param("id") String id, @Param("lyric") String lyric); int updateSongLyric(@Param("id") String id, @Param("lyric") String lyric);
@Modifying
@Transactional
@Query("UPDATE SongInfo s SET s.lyric = :lyric,s.lyricUrl = :lyricUrl WHERE s.id = :id")
int updateSongLyricAndUrl(@Param("id") String id, @Param("lyric") String lyric,@Param("lyricUrl") String lyricUrl);
List<SongInfo> findByIdIn(List<String> ids); List<SongInfo> findByIdIn(List<String> ids);
@Query(value = "select * from tb_song_info where id in ?1 order by field(id,?1)", nativeQuery = true)
List<SongInfo> orderByField(List<String> objectIds);
} }

@ -16,9 +16,9 @@ public class SongMapper {
songRespDTO.setArtist(song.getArtist()); songRespDTO.setArtist(song.getArtist());
songRespDTO.setId(song.getId()); songRespDTO.setId(song.getId());
songRespDTO.setTitle(song.getName()); songRespDTO.setTitle(song.getName());
songRespDTO.setSrc(Constants.MUSIC_RESOURCE_PREFIX + song.getUrl()); songRespDTO.setSrc(Constants.RESOURCE_PREFIX + song.getUrl());
songRespDTO.setPic(Constants.MUSIC_RESOURCE_PREFIX + song.getUrl().replace(".mp3", ".jpg")); songRespDTO.setPic(Constants.RESOURCE_PREFIX + song.getImage());
songRespDTO.setLrc(Constants.MUSIC_RESOURCE_PREFIX + song.getUrl().replace(".mp3", ".lyric")); songRespDTO.setLrc(Constants.RESOURCE_PREFIX + song.getLyricUrl());
songRespDTO.setSongNo(song.getSongNo()); songRespDTO.setSongNo(song.getSongNo());
songRespDTO.setHaveCollect(songCollectSet.contains(songRespDTO.getId())); songRespDTO.setHaveCollect(songCollectSet.contains(songRespDTO.getId()));
return songRespDTO; return songRespDTO;

@ -53,4 +53,8 @@ public class JournalSong implements Serializable{
* ID * ID
*/ */
private String songId; private String songId;
/**
*
*/
private String lyricUrl;
} }

@ -88,4 +88,9 @@ public class SongInfo implements Serializable {
* *
*/ */
private String lyric; private String lyric;
/**
*
*/
private String lyricUrl;
} }

@ -30,6 +30,7 @@ import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root; import javax.persistence.criteria.Root;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.*; import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -38,449 +39,528 @@ import java.util.stream.Collectors;
@Service @Service
public class CMSJournalService { public class CMSJournalService {
@Autowired @Autowired
private S3Service s3Service; private S3Service s3Service;
@Autowired @Autowired
private IdWorker idWorker; private IdWorker idWorker;
@Autowired @Autowired
private JournalTagDao journalTagDao; private JournalTagDao journalTagDao;
@Autowired @Autowired
private JournalDao journalDao; private JournalDao journalDao;
@Autowired @Autowired
private JournalSongDao journalSongDao; private JournalSongDao journalSongDao;
@Autowired @Autowired
private TagDao tagDao; private TagDao tagDao;
@Autowired @Autowired
private SongInfoDao songDao; private SongInfoDao songDao;
@Autowired @Autowired
private UserClient userClient; private UserClient userClient;
@Autowired @Autowired
private RedisTemplate redisTemplate; private RedisTemplate redisTemplate;
/**
/** * +
* + *
* @param param * @param param
* @param page * @param page
* @param size * @param size
* @return * @return
*/ */
public Result<PageResult<JournalVO>> search(JournalQueryModel param, int page, int size) { public Result<PageResult<JournalVO>> search(JournalQueryModel param, int page, int size) {
List<JournalVO> result = new ArrayList<>(); List<JournalVO> result = new ArrayList<>();
// Sort sort = new Sort(Sort.Direction.DESC, "journalNo"); // Sort sort = new Sort(Sort.Direction.DESC, "journalNo");
PageRequest pageRequest = PageRequest.of(page - 1, size); PageRequest pageRequest = PageRequest.of(page - 1, size);
Page<Journal> journalPage; Page<Journal> journalPage;
if (!Objects.isNull(param)) { if (!Objects.isNull(param)) {
List<String> journalIdsByTags = null; List<String> journalIdsByTags = null;
if (!CollectionUtils.isEmpty(param.getTags())) { if (!CollectionUtils.isEmpty(param.getTags())) {
journalIdsByTags = journalTagDao.findJournalIdsByTags(param.getTags()); journalIdsByTags = journalTagDao.findJournalIdsByTags(param.getTags());
if (journalIdsByTags.size() == 0) { if (journalIdsByTags.size() == 0) {
return Result.success(new PageResult<>(0L, result)); return Result.success(new PageResult<>(0L, result));
} }
} }
Specification<Journal> journalSpecification = buildSearchSpecification(param, journalIdsByTags); Specification<Journal> journalSpecification = buildSearchSpecification(param, journalIdsByTags);
journalPage = journalDao.findAll(journalSpecification, pageRequest); journalPage = journalDao.findAll(journalSpecification, pageRequest);
} else { } else {
List<String> journalIdsByTags = null; List<String> journalIdsByTags = null;
Specification<Journal> journalSpecification = buildSearchSpecification(param, journalIdsByTags); Specification<Journal> journalSpecification = buildSearchSpecification(param, journalIdsByTags);
journalPage = journalDao.findAll(journalSpecification,pageRequest); journalPage = journalDao.findAll(journalSpecification, pageRequest);
} }
long totalElements = journalPage.getTotalElements(); long totalElements = journalPage.getTotalElements();
List<Journal> content = journalPage.getContent(); List<Journal> content = journalPage.getContent();
if (!CollectionUtils.isEmpty(content)) { if (!CollectionUtils.isEmpty(content)) {
List<String> ids = content.stream().map(Journal::getId).collect(Collectors.toList()); List<String> ids = content.stream().map(Journal::getId).collect(Collectors.toList());
Map<String, List<String>> journalTagMap = tagInfo(ids); Map<String, List<String>> journalTagMap = tagInfo(ids);
List<String> journalNos = content.stream().map(Journal::getJournalNo).collect(Collectors.toList()); List<String> journalNos = content.stream().map(Journal::getJournalNo).collect(Collectors.toList());
Map<String, Long> songCountMap = songCountInfo(journalNos); Map<String, Long> songCountMap = songCountInfo(journalNos);
for (Journal item : content) { for (Journal item : content) {
JournalVO response = new JournalVO(); JournalVO response = new JournalVO();
response.setId(item.getId()); response.setId(item.getId());
response.setJournalNo(item.getJournalNo()); response.setJournalNo(item.getJournalNo());
response.setTitle(item.getTitle()); response.setTitle(item.getTitle());
response.setImage(Constants.MUSIC_RESOURCE_PREFIX + item.getImage()); response.setImage(Constants.MUSIC_RESOURCE_PREFIX + item.getImage());
if (!Objects.isNull(item.getCreateTime())) { if (!Objects.isNull(item.getCreateTime())) {
response.setCreateTime(item.getCreateTime().format(Constants.formatter)); response.setCreateTime(item.getCreateTime().format(Constants.formatter));
} }
response.setState(item.getState()); response.setState(item.getState());
response.setIsPublish(item.getIsPublish()); response.setIsPublish(item.getIsPublish());
if (!Objects.isNull(item.getPubTime())) { if (!Objects.isNull(item.getPubTime())) {
response.setPubTime(item.getPubTime().format(Constants.formatter)); response.setPubTime(item.getPubTime().format(Constants.formatter));
} }
response.setUserId(item.getUserId()); response.setUserId(item.getUserId());
response.setUserName(item.getUserName()); response.setUserName(item.getUserName());
response.setSongCount(songCountMap.get(item.getJournalNo())); response.setSongCount(songCountMap.get(item.getJournalNo()));
response.setTag(journalTagMap.get(item.getId())); response.setTag(journalTagMap.get(item.getId()));
response.setVisits(item.getVisits()); response.setVisits(item.getVisits());
response.setComment(item.getComment()); response.setComment(item.getComment());
result.add(response); result.add(response);
} }
} }
return Result.success(new PageResult<>(totalElements, result)); return Result.success(new PageResult<>(totalElements, result));
} }
/**
*
*
* @param param
* @return
*/
private Specification<Journal> buildSearchSpecification(JournalQueryModel param, List<String> ids) {
return (Root<Journal> root, CriteriaQuery<?> query, CriteriaBuilder builder) -> {
List<Predicate> predicateList = new ArrayList<Predicate>();
if ("1".equals(param.getTab())) {
predicateList.add(builder.equal(root.get("isPublish"), "1"));
} else if ("2".equals(param.getTab())) {
predicateList.add(builder.equal(root.get("state"), "0"));
} else {
Predicate state = builder.equal(root.get("state"), "1");
Predicate isPublish = builder.equal(root.get("isPublish"), "0");
predicateList.add(builder.and(state, isPublish));
}
if (StringUtils.isNotBlank(param.getUserId())) {
predicateList.add(builder.equal(root.get("userId"), param.getUserId()));
}
if (StringUtils.isNotBlank(param.getStart()) && StringUtils.isNotBlank(param.getEnd())) {
LocalDateTime start = LocalDateTime.parse(param.getStart() + "T00:00:00");
LocalDateTime end = LocalDateTime.parse(param.getEnd() + "T00:00:00");
predicateList.add(builder.between(root.get("createTime"), start, end));
}
if (!CollectionUtils.isEmpty(ids)) {
predicateList.add(root.get("journalNo").in(ids));
}
if (StringUtils.isNotBlank(param.getKeyword())) {
String likeExpression = "%" + param.getKeyword() + "%";
Predicate journalNo = builder.like(root.get("journalNo"), likeExpression);
Predicate title = builder.like(root.get("title"), likeExpression);
predicateList.add(builder.or(journalNo, title));
}
query.orderBy(builder.desc(root.get("journalNo").as(Integer.class)));
return builder.and(predicateList.toArray(new Predicate[predicateList.size()]));
};
}
/**
*
*
* @param journalNos
* @return
*/
private Map<String, Long> songCountInfo(List<String> journalNos) {
Map<String, Long> songCountMap = new HashMap<>();
if (!CollectionUtils.isEmpty(journalNos)) {
List<Map<String, Long>> journalSongCountList = journalSongDao.findSongCountByJournalNos(journalNos);
songCountMap = journalSongCountList.stream()
.collect(Collectors.toMap(map -> String.valueOf(map.get("journalNo")),
map -> Long.valueOf(String.valueOf(map.get("songCount")))));
}
return songCountMap;
}
/**
*
*
* @param ids
* @return
*/
private Map<String, List<String>> tagInfo(List<String> ids) {
Map<String, List<String>> journalTagMap = new HashMap<>();
List<JournalTag> journalTagList = journalTagDao.findByJournalIds(ids);
Set<String> tagIdSet = journalTagList.stream().map(JournalTag::getTagId).collect(Collectors.toSet());
List<Tag> tagList = tagDao.findByIdIn(tagIdSet);
Map<String, Tag> idTagMap = tagList.stream().collect(Collectors.toMap(Tag::getId, obj -> obj));
List<String> list;
for (JournalTag item : journalTagList) {
String journalId = item.getJournalId();
if (journalTagMap.containsKey(journalId)) {
list = journalTagMap.get(journalId);
} else {
list = new ArrayList<>();
}
if (idTagMap.containsKey(item.getTagId())) {
Tag tag = idTagMap.get(item.getTagId());
list.add(tag.getId());
}
journalTagMap.put(journalId, list);
}
return journalTagMap;
}
/**
*
*
* @param param
* @return
*/
public Result add(String token, JournalAddModel param) {
List<Journal> byJournalNo = journalDao.findByJournalNo(param.getJournalNo());
if (byJournalNo.size() > 0) {
return Result.failed("保存失败,期刊编号已存在");
}
String srcKey = param.getImage().substring(param.getImage().indexOf(Constants.TEMP_KEY_PREFIX));
String image = moveJournalImage(srcKey, param);
if (StringUtils.isNotBlank(image)) {
Journal journal = buildJournal(null, param, token);
String id = String.valueOf(idWorker.nextId());
journal.setId(id);
journal.setImage(image);
journalDao.save(journal);
batchSaveJournalRelatesInfo(id, param);
return Result.success();
} else {
return Result.failed("保存失败");
}
}
/**
*
*
* @param param
* @return
*/
private String moveJournalImage(String srcKey, JournalAddModel param) {
String image = param.getImage();
String suffix = image.substring(image.lastIndexOf(Constants.DOT));
String destKeySuffix = String.format("%05d/00%s", Integer.parseInt(param.getJournalNo()), suffix);
String destKey = Constants.MUSIC_KEY_PREFIX + destKeySuffix;
int copy = s3Service.copy(Constants.BUCKET, srcKey, destKey);
if (copy > 0) {
return destKeySuffix;
}
return null;
}
/**
*
*
* @param id
* @param param
* @param token
* @return
*/
private Journal buildJournal(String id, JournalAddModel param, String token) {
Journal journal = new Journal();
if (!StringUtils.isBlank(id)) {
journal.setId(id);
}
journal.setJournalNo(param.getJournalNo());
journal.setTitle(param.getTitle());
journal.setContent(param.getContent());
UserInfo userInfo = userClient.queryUserInfoById(param.getUserId());
if (!Objects.isNull(userInfo)) {
journal.setUserId(userInfo.getId());
journal.setUserName(userInfo.getName());
journal.setUserType(userInfo.getType());
}
return journal;
}
/** /**
* *
* @param param *
* @return * @param journalId
*/ * @param param
private Specification<Journal> buildSearchSpecification(JournalQueryModel param, List<String> ids) { */
return (Root<Journal> root, CriteriaQuery<?> query, CriteriaBuilder builder) -> { private void batchSaveJournalRelatesInfo(String journalId, JournalAddModel param) {
List<Predicate> predicateList = new ArrayList<Predicate>(); // 标签信息
if("1".equals(param.getTab())) { if (!CollectionUtils.isEmpty(param.getTag())) {
predicateList.add(builder.equal(root.get("isPublish"), "1")); List<JournalTag> journalTagList = new ArrayList<>();
} else if ("2".equals(param.getTab())) { for (String item : param.getTag()) {
predicateList.add(builder.equal(root.get("state"), "0")); JournalTag journalTag = new JournalTag();
} else { journalTag.setId(String.valueOf(idWorker.nextId()));
Predicate state = builder.equal(root.get("state"), "1"); journalTag.setJournalId(journalId);
Predicate isPublish = builder.equal(root.get("isPublish"), "0"); journalTag.setTagId(item);
predicateList.add(builder.and(state, isPublish)); journalTagList.add(journalTag);
} }
if(StringUtils.isNotBlank(param.getUserId())) { journalTagDao.saveAll(journalTagList);
predicateList.add(builder.equal(root.get("userId"), param.getUserId())); }
} // 歌曲信息
if (StringUtils.isNotBlank(param.getStart()) && StringUtils.isNotBlank(param.getEnd())) { if (!CollectionUtils.isEmpty(param.getSongs())) {
LocalDateTime start = LocalDateTime.parse(param.getStart() + "T00:00:00"); List<SongInfo> songList = songDao.findByIdIn(param.getSongs());
LocalDateTime end = LocalDateTime.parse(param.getEnd() + "T00:00:00"); Map<String, SongInfo> idSongMap = songList.stream().collect(Collectors.toMap(SongInfo::getId, obj -> obj));
predicateList.add(builder.between(root.get("createTime"), start, end)); List<JournalSong> journalSongList = new ArrayList<>();
} int num = 0;
if (!CollectionUtils.isEmpty(ids)) { for (String item : param.getSongs()) {
predicateList.add(root.get("journalNo").in(ids)); if (idSongMap.containsKey(item)) {
} num += 1;
if(StringUtils.isNotBlank(param.getKeyword())) { SongInfo song = idSongMap.get(item);
String likeExpression = "%" + param.getKeyword() + "%"; JournalSong journalSong = new JournalSong();
Predicate journalNo = builder.like(root.get("journalNo"), likeExpression); journalSong.setId(String.valueOf(idWorker.nextId()));
Predicate title = builder.like(root.get("title"), likeExpression); journalSong.setName(song.getName());
predicateList.add(builder.or(journalNo, title)); journalSong.setAlbum(song.getAlbum());
} journalSong.setArtist(song.getArtist());
query.orderBy(builder.desc(root.get("journalNo").as(Integer.class))); journalSong.setUrl(song.getUrl());
return builder.and(predicateList.toArray(new Predicate[predicateList.size()])); journalSong.setImage(song.getImage());
}; journalSong.setSongId(item);
} journalSong.setJournalNo(param.getJournalNo());
journalSong.setSongNo(num);
journalSong.setSongId(song.getId());
journalSongList.add(journalSong);
}
}
s3Service.fromSongToMusic(journalSongList);
journalSongDao.saveAll(journalSongList);
}
}
/** /**
* *
* @param journalNos *
* @return * @param id
*/ * @return
private Map<String, Long> songCountInfo(List<String> journalNos) { */
Map<String, Long> songCountMap = new HashMap<>(); public Result<JournalVO> findOne(String id) {
if (!CollectionUtils.isEmpty(journalNos)) { Optional<Journal> optional=journalDao.findById(id);
List<Map<String, Long>> journalSongCountList = journalSongDao.findSongCountByJournalNos(journalNos); if(!optional.isPresent()) {
songCountMap = journalSongCountList.stream() return Result.failed("无法找到期刊: "+id);
.collect(Collectors.toMap( }
map -> String.valueOf(map.get("journalNo")), Journal journal = optional.get();
map -> Long.valueOf(String.valueOf(map.get("songCount"))))); JournalVO response = new JournalVO();
} response.setId(journal.getId());
return songCountMap; response.setJournalNo(journal.getJournalNo());
} response.setTitle(journal.getTitle());
response.setTag(journalTagDao.findTagsByJournalId(id));
response.setUserId(journal.getUserId());
if (StringUtils.isNotBlank(journal.getImage())) {
response.setImage(Constants.MUSIC_RESOURCE_PREFIX + journal.getImage());
}
response.setSongs(journalSongInfo(journal.getJournalNo()));
response.setContent(journal.getContent());
return Result.success(response);
}
/** /**
* *
* @param ids *
* @return * @param journalNo
*/ * @return
private Map<String, List<String>> tagInfo(List<String> ids) { */
Map<String, List<String>> journalTagMap = new HashMap<>(); private List<SongVO> journalSongInfo(String journalNo) {
List<JournalTag> journalTagList = journalTagDao.findByJournalIds(ids); List<SongVO> list = new ArrayList<>();
Set<String> tagIdSet = journalTagList.stream().map(JournalTag::getTagId).collect(Collectors.toSet()); List<JournalSong> journalSongList = journalSongDao.findByJournalNo(journalNo);
List<Tag> tagList = tagDao.findByIdIn(tagIdSet); if (!CollectionUtils.isEmpty(journalSongList)) {
Map<String, Tag> idTagMap = tagList.stream().collect(Collectors.toMap(Tag::getId, obj -> obj)); for (JournalSong item : journalSongList) {
List<String> list; SongVO songVO = new SongVO();
for (JournalTag item : journalTagList) { songVO.setId(item.getSongId());
String journalId = item.getJournalId(); songVO.setName(item.getName());
if (journalTagMap.containsKey(journalId)) { songVO.setArtist(item.getArtist());
list = journalTagMap.get(journalId); songVO.setAlbum(item.getAlbum());
} else { if (StringUtils.isNotBlank(item.getUrl())) {
list = new ArrayList<>(); songVO.setUrl(Constants.RESOURCE_PREFIX + item.getUrl());
} }
if (idTagMap.containsKey(item.getTagId())) { if (StringUtils.isNotBlank(item.getImage())) {
Tag tag = idTagMap.get(item.getTagId()); songVO.setImage(Constants.RESOURCE_PREFIX + item.getImage());
list.add(tag.getId()); }
} list.add(songVO);
journalTagMap.put(journalId, list); }
} }
return journalTagMap; return list;
} }
/** /**
* *
* @param param *
* @return * @param id
*/ * @param token
public Result add(String token, JournalAddModel param) { * @param param
List<Journal> byJournalNo = journalDao.findByJournalNo(param.getJournalNo()); * @return
if (byJournalNo.size() > 0) { */
return Result.failed("保存失败,期刊编号已存在"); public Result update(String id, String token, JournalAddModel param) {
} Optional<Journal> optional = journalDao.findById(id);
String srcKey = param.getImage().substring(param.getImage().indexOf(Constants.TEMP_KEY_PREFIX)); if (!optional.isPresent()) {
String image = moveJournalImage(srcKey, param); return Result.failed("找不到期刊: " + id);
if (StringUtils.isNotBlank(image)) { }
Journal journal = buildJournal(null, param, token); Journal journal = optional.get();
String id = String.valueOf(idWorker.nextId()); updateJournal(journal, param, token);
journal.setId(id); journalDao.save(journal);
journal.setImage(image); redisTemplate.opsForValue().set("journal_" + id, journal);
journalDao.save(journal);
batchSaveJournalRelatesInfo(id, param);
return Result.success();
} else {
return Result.failed("保存失败");
}
}
/** batchUpdateJournalRelatesInfo(id, journal.getJournalNo(), param);
* return Result.success();
* @param param }
* @return
*/
private String moveJournalImage(String srcKey, JournalAddModel param) {
String image = param.getImage();
String suffix = image.substring(image.lastIndexOf(Constants.DOT));
String destKeySuffix = String.format("%05d/00%s", Integer.parseInt(param.getJournalNo()), suffix);
String destKey = Constants.MUSIC_KEY_PREFIX + destKeySuffix;
int copy = s3Service.copy(Constants.BUCKET, srcKey, destKey);
if (copy > 0) {
return destKeySuffix;
}
return null;
}
/** private void batchUpdateJournalRelatesInfo(String journalId, String journalNo, JournalAddModel param) {
* // 标签信息
* @param id List<String> updateTags = param.getTag();
* @param param List<String> currentTags = journalTagDao.findTagsByJournalId(journalId);
* @param token if (!CollectionUtils.isEmpty(updateTags) && !isCollectionEqual(currentTags, updateTags)) {
* @return // 清理当前journalTag
*/ journalTagDao.deleteByJournalId(journalId);
private Journal buildJournal(String id, JournalAddModel param, String token) { List<JournalTag> updatedJournalTags = updateTags.stream().map(t -> createJournalTag(t, journalId))
Journal journal = new Journal(); .collect(Collectors.toList());
if (!StringUtils.isBlank(id)) { journalTagDao.saveAll(updatedJournalTags);
journal.setId(id); }
}
journal.setJournalNo(param.getJournalNo()); // 歌曲信息
journal.setTitle(param.getTitle()); List<String> updateSongs = param.getSongs();
journal.setContent(param.getContent()); if (!CollectionUtils.isEmpty(updateSongs)) {
UserInfo userInfo = userClient.queryUserInfoById(param.getUserId()); // 清理当前journalSong
if (!Objects.isNull(userInfo)) { journalSongDao.deleteByJournalNo(journalId);
journal.setUserId(userInfo.getId()); List<SongInfo> songList = songDao.orderByField(updateSongs);
journal.setUserName(userInfo.getName()); List<JournalSong> updatedJournalSong = new ArrayList<>();
journal.setUserType(userInfo.getType()); for (int i = 1; i < songList.size(); i++) {
} SongInfo song = songList.get(i);
return journal; JournalSong journalSong = new JournalSong();
} journalSong.setId(String.valueOf(idWorker.nextId()));
journalSong.setName(song.getName());
journalSong.setAlbum(song.getAlbum());
journalSong.setArtist(song.getArtist());
journalSong.setUrl(Constants.SONG_KEY_PREFIX+song.getUrl());
journalSong.setImage(Constants.SONG_KEY_PREFIX+song.getImage());
journalSong.setLyricUrl(Constants.SONG_KEY_PREFIX+song.getLyricUrl());
journalSong.setSongId(song.getId());
journalSong.setJournalNo(journalNo);
journalSong.setSongNo(i);
updatedJournalSong.add(journalSong);
}
journalSongDao.saveAll(updatedJournalSong);
}
}
/** private JournalTag createJournalTag(String tagId, String journalId) {
* JournalTag journalTag = new JournalTag();
* @param journalId journalTag.setId(String.valueOf(idWorker.nextId()));
* @param param journalTag.setJournalId(journalId);
*/ journalTag.setTagId(tagId);
private void batchSaveJournalRelatesInfo(String journalId, JournalAddModel param) { return journalTag;
// 标签信息 }
if (!CollectionUtils.isEmpty(param.getTag())) {
List<JournalTag> journalTagList = new ArrayList<>();
for (String item : param.getTag()) {
JournalTag journalTag = new JournalTag();
journalTag.setId(String.valueOf(idWorker.nextId()));
journalTag.setJournalId(journalId);
journalTag.setTagId(item);
journalTagList.add(journalTag);
}
journalTagDao.saveAll(journalTagList);
}
// 歌曲信息
if (!CollectionUtils.isEmpty(param.getSongs())) {
List<SongInfo> songList = songDao.findByIdIn(param.getSongs());
Map<String, SongInfo> idSongMap = songList.stream().collect(Collectors.toMap(SongInfo::getId, obj -> obj));
List<JournalSong> journalSongList = new ArrayList<>();
int num = 0;
for (String item : param.getSongs()) {
if (idSongMap.containsKey(item)) {
num += 1;
SongInfo song = idSongMap.get(item);
JournalSong journalSong = new JournalSong();
journalSong.setId(String.valueOf(idWorker.nextId()));
journalSong.setName(song.getName());
journalSong.setAlbum(song.getAlbum());
journalSong.setArtist(song.getArtist());
journalSong.setUrl(song.getUrl());
journalSong.setImage(song.getImage());
journalSong.setSongId(item);
journalSong.setJournalNo(param.getJournalNo());
journalSong.setSongNo(num);
journalSong.setSongId(song.getId());
journalSongList.add(journalSong);
}
}
s3Service.fromSongToMusic(journalSongList);
journalSongDao.saveAll(journalSongList);
}
}
/** private boolean isCollectionEqual(List<String> current, List<String> update) {
* if ((null == current && null == update) || (current.isEmpty() && update.isEmpty())) {
* @param id return true;
* @return }
*/ if (current.size() != update.size()) {
public Result<JournalVO> findOne(String id) { return false;
Journal journal = journalDao.findById(id).get(); }
JournalVO response = new JournalVO(); Collections.sort(current);
response.setId(journal.getId()); Collections.sort(update);
response.setJournalNo(journal.getJournalNo()); for (int i = 0; i < current.size(); i++) {
response.setTitle(journal.getTitle()); if (!current.get(i).equals(update.get(i))) {
response.setTag(journalTagDao.findTagsByJournalId(id)); return false;
response.setUserId(journal.getUserId()); }
if (StringUtils.isNotBlank(journal.getImage())) { }
response.setImage(Constants.MUSIC_RESOURCE_PREFIX + journal.getImage()); return true;
} }
response.setSongs(journalSongInfo(journal.getJournalNo()));
response.setContent(journal.getContent());
return Result.success(response);
}
/** private void updateJournal(Journal journal, JournalAddModel param, String token) {
* String title = param.getTitle();
* @param journalNo if (!StringTools.isEmpty(title)) {
* @return journal.setTitle(title);
*/ }
private List<SongVO> journalSongInfo(String journalNo) {
List<SongVO> list = new ArrayList<>();
List<JournalSong> journalSongList = journalSongDao.findByJournalNo(journalNo);
if (!CollectionUtils.isEmpty(journalSongList)) {
for (JournalSong item : journalSongList) {
SongVO songVO = new SongVO();
songVO.setId(item.getSongId());
songVO.setName(item.getName());
songVO.setArtist(item.getArtist());
songVO.setAlbum(item.getAlbum());
if (StringUtils.isNotBlank(item.getUrl())) {
songVO.setUrl(Constants.MUSIC_RESOURCE_PREFIX + item.getUrl());
}
if (StringUtils.isNotBlank(item.getImage())) {
songVO.setImage(Constants.MUSIC_RESOURCE_PREFIX + item.getImage());
}
list.add(songVO);
}
}
return list;
}
/** String content = param.getContent();
* if (!StringTools.isEmpty(content)) {
* @param id journal.setContent(content);
* @param token }
* @param param
* @return
*/
public Result update(String id, String token, JournalAddModel param) {
Optional<Journal> optional = journalDao.findById(id);
if(!optional.isPresent()) {
return Result.failed("找不到期刊: "+id);
}
Journal journal=optional.get();
updateJournal(journal, param, token);
journalDao.save(journal);
redisTemplate.opsForValue().set("journal_"+id,journal);
if (!CollectionUtils.isEmpty(param.getTag())) {
journalTagDao.deleteByJournalId(id);
}
if (!CollectionUtils.isEmpty(param.getSongs())) {
journalSongDao.deleteByJournalNo(id);
}
batchSaveJournalRelatesInfo(id, param);
return Result.success();
}
private void updateJournal(Journal journal, JournalAddModel param, String token) {
String title=param.getTitle();
if(!StringTools.isEmpty(title)) {
journal.setTitle(title);
}
String content=param.getContent(); String userId = param.getUserId();
if(!StringTools.isEmpty(content)) { if (!StringTools.isEmpty(userId)) {
journal.setContent(content); UserInfo userInfo = userClient.queryUserInfoById(userId);
} if (!Objects.isNull(userInfo)) {
journal.setUserId(userInfo.getId());
journal.setUserName(userInfo.getName());
journal.setUserType(userInfo.getType());
}
}
String userId=param.getUserId(); String tempImage = param.getImage();
if(!StringTools.isEmpty(userId)) { if (!StringTools.isEmpty(tempImage) && tempImage.contains(Constants.TEMP_KEY_PREFIX)) {
UserInfo userInfo = userClient.queryUserInfoById(userId); String srcKey = param.getImage().substring(param.getImage().indexOf(Constants.TEMP_KEY_PREFIX));
if (!Objects.isNull(userInfo)) { String image = copyJournalImage(srcKey, journal.getJournalNo());
journal.setUserId(userInfo.getId()); if (null != image) {
journal.setUserName(userInfo.getName()); journal.setImage(image);
journal.setUserType(userInfo.getType()); }
} }
} }
String tempImage=param.getImage(); private String copyJournalImage(String srcKey, String journalNo) {
if(!StringTools.isEmpty(tempImage)&&tempImage.contains(Constants.TEMP_KEY_PREFIX)) { String destKeySuffix = String.format("%05d/%s", Integer.parseInt(journalNo),
String srcKey=param.getImage().substring(param.getImage().indexOf(Constants.TEMP_KEY_PREFIX)); srcKey.replace(Constants.TEMP_KEY_PREFIX, ""));
String image = copyJournalImage(srcKey, journal.getJournalNo()); String destKey = Constants.MUSIC_KEY_PREFIX + destKeySuffix;
if (null!=image) { int copy = s3Service.copy(Constants.BUCKET, srcKey, destKey);
journal.setImage(image); if (copy > 0) {
} return destKeySuffix;
} }
return null;
} }
private String copyJournalImage(String srcKey, String journalNo) { /**
String destKeySuffix = String.format("%05d/%s", Integer.parseInt(journalNo), srcKey.replace(Constants.TEMP_KEY_PREFIX, "")); *
String destKey = Constants.MUSIC_KEY_PREFIX + destKeySuffix; *
int copy = s3Service.copy(Constants.BUCKET, srcKey, destKey); * @param journalId
if (copy > 0) { * @param journalNo
return destKeySuffix; */
} private void batchDeleteJournalRelatesInfo(String journalId, String journalNo) {
return null; journalTagDao.deleteByJournalId(journalId);
} journalSongDao.deleteByJournalNo(journalNo);
/** }
*
* @param journalId
* @param journalNo
*/
private void batchDeleteJournalRelatesInfo(String journalId, String journalNo) {
journalTagDao.deleteByJournalId(journalId);
journalSongDao.deleteByJournalNo(journalNo);
}
/** /**
* *
* @param id *
* @param queryModel * @param id
* @return * @param queryModel
*/ * @return
public Result publish(String id, JournalPublishReq queryModel) { */
String scheduled = queryModel.getIsScheduled(); public Result publish(String id, JournalPublishReq queryModel) {
String pubTimeStr = queryModel.getPubTime(); String scheduled = queryModel.getIsScheduled();
LocalDateTime pubTime = LocalDateTime.now(); String pubTimeStr = queryModel.getPubTime();
if ("1".equals(scheduled)) { LocalDateTime pubTime = LocalDateTime.now();
if (StringUtils.isNotBlank(pubTimeStr)){ if ("1".equals(scheduled)) {
pubTime = LocalDateTime.parse(pubTimeStr, Constants.formatter); if (StringUtils.isNotBlank(pubTimeStr)) {
journalDao.updateScheduledPubById(id, pubTime); pubTime = LocalDateTime.parse(pubTimeStr, Constants.formatter);
} journalDao.updateScheduledPubById(id, pubTime);
} else { }
journalDao.updatePubById(id, pubTime); } else {
} journalDao.updatePubById(id, pubTime);
return Result.success(); }
} return Result.success();
}
/** /**
* *
* @param id *
* @param state * @param id
* @return * @param state
*/ * @return
public Result updateJournalState(String id, String state) { */
journalDao.updateJournalState(id, state); public Result updateJournalState(String id, String state) {
return Result.success(); journalDao.updateJournalState(id, state);
} return Result.success();
}
/** /**
* *
* @param id *
* @return * @param id
*/ * @return
public Result deleteById(String id) { */
Journal journal = journalDao.findById(id).get(); public Result deleteById(String id) {
if (!Objects.isNull(journal)) { Journal journal = journalDao.findById(id).get();
journalDao.deleteById(id); if (!Objects.isNull(journal)) {
batchDeleteJournalRelatesInfo(id, journal.getJournalNo()); journalDao.deleteById(id);
} batchDeleteJournalRelatesInfo(id, journal.getJournalNo());
return Result.success(); }
} return Result.success();
}
} }

@ -397,9 +397,9 @@ public class CMSSongService {
result.setLyric(song.getLyric()); result.setLyric(song.getLyric());
} else { } else {
if (StringUtils.isNotBlank(song.getUrl())) { if (StringUtils.isNotBlank(song.getUrl())) {
String url = song.getUrl(); //String url = song.getUrl();
String lyricSuffix = url.substring(0, url.lastIndexOf(Constants.DOT)) + ".lyric"; //String lyricSuffix = url.substring(0, url.lastIndexOf(Constants.DOT)) + ".lyric";
String lyricUrl = Constants.RESOURCE_PREFIX + Constants.SONG_KEY_PREFIX + lyricSuffix; String lyricUrl = Constants.RESOURCE_PREFIX + Constants.SONG_KEY_PREFIX + song.getLyricUrl();
String lyric = readLyric(lyricUrl); String lyric = readLyric(lyricUrl);
result.setLyric(lyric); result.setLyric(lyric);
} }
@ -414,17 +414,11 @@ public class CMSSongService {
* @return * @return
*/ */
public Result updateSongLyric(String id, String lyric) { public Result updateSongLyric(String id, String lyric) {
songDao.updateSongLyric(id, lyric);
if (StringUtils.isNotBlank(lyric)) { if (StringUtils.isNotBlank(lyric)) {
String key = Constants.SONG_KEY_PREFIX + id + "/00.lyric"; String lyricUrl=id + "/"+idWorker.nextId()+".lyric";
String key = Constants.SONG_KEY_PREFIX + lyricUrl;
songDao.updateSongLyricAndUrl(id, lyric, lyricUrl);
s3Service.uploadText(Constants.BUCKET, key, lyric); s3Service.uploadText(Constants.BUCKET, key, lyric);
List<JournalSong> bySongId = journalSongDao.findBySongId(id);
for (JournalSong item : bySongId) {
String format = String.format("%05d/%02d", Integer.parseInt(item.getJournalNo()), item.getSongNo());
String destLyricSuffix = format + ".lyric";
String destLyric = Constants.MUSIC_KEY_PREFIX + destLyricSuffix;
s3Service.copy(Constants.BUCKET, key, destLyric);
}
} }
return Result.success(); return Result.success();
} }

Loading…
Cancel
Save