|
|
|
@ -413,29 +413,79 @@ public class CMSJournalService {
|
|
|
|
|
// 歌曲信息
|
|
|
|
|
List<String> updateSongs = param.getSongs();
|
|
|
|
|
if (!CollectionUtils.isEmpty(updateSongs)) {
|
|
|
|
|
// 清理当前journalSong
|
|
|
|
|
journalSongDao.deleteByJournalNo(journalNo);
|
|
|
|
|
List<SongInfo> songList = songDao.orderByField(updateSongs);
|
|
|
|
|
List<JournalSong> journalSongs=journalSongDao.findByJournalNoOrderBySongNo(journalNo);
|
|
|
|
|
//如果JournalSong 保存信息与SongInfo 一致,则不更新
|
|
|
|
|
if(isSameContent(songList,journalSongs)) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Map<String,String> songId2JournalSongIdMap=journalSongs.stream().collect(Collectors.toMap(JournalSong::getSongId, JournalSong::getId));
|
|
|
|
|
|
|
|
|
|
List<JournalSong> updatedJournalSong = new ArrayList<>();
|
|
|
|
|
for (int i = 0; i < songList.size(); i++) {
|
|
|
|
|
SongInfo song = songList.get(i);
|
|
|
|
|
JournalSong journalSong = new JournalSong();
|
|
|
|
|
journalSong.setId(song.getId());
|
|
|
|
|
|
|
|
|
|
journalSong.setId(songId2JournalSongIdMap.getOrDefault(song.getId(), 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+1);
|
|
|
|
|
|
|
|
|
|
updatedJournalSong.add(journalSong);
|
|
|
|
|
}
|
|
|
|
|
// 清理当前journalSong
|
|
|
|
|
journalSongDao.deleteByJournalNo(journalNo);
|
|
|
|
|
journalSongDao.saveAll(updatedJournalSong);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
private boolean isSameContent(SongInfo song, JournalSong previousJournalSong) {
|
|
|
|
|
boolean isSameName=isSameString(song.getName(),previousJournalSong.getName());
|
|
|
|
|
boolean isSameAlbum=isSameString(song.getAlbum(),previousJournalSong.getAlbum());
|
|
|
|
|
boolean isSameArtist=isSameString(song.getArtist(),previousJournalSong.getArtist());
|
|
|
|
|
boolean isSameUrl=isSameUrl(song.getUrl(),previousJournalSong.getUrl());
|
|
|
|
|
boolean isSameImage=isSameUrl(song.getImage(),previousJournalSong.getImage());
|
|
|
|
|
boolean isSameLyricUrl=isSameUrl(song.getLyricUrl(),previousJournalSong.getLyricUrl());
|
|
|
|
|
return isSameName&&isSameAlbum&&isSameArtist&&isSameUrl&&isSameImage&&isSameLyricUrl;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private boolean isSameUrl(String songUrl, String journalSongUrl) {
|
|
|
|
|
return (Constants.SONG_KEY_PREFIX+songUrl).equals(journalSongUrl);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private boolean isSameString(String current, String previous) {
|
|
|
|
|
boolean isCurrentEmpty=StringTools.isEmpty(current);
|
|
|
|
|
boolean isPreviousEmpty=StringTools.isEmpty(previous);
|
|
|
|
|
if((isCurrentEmpty&&isPreviousEmpty)||(!isCurrentEmpty&&!isPreviousEmpty&¤t.equals(previous))) {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private boolean isSameContent(List<SongInfo> current, List<JournalSong> update) {
|
|
|
|
|
if ((null == current && null == update) || (current.isEmpty() && update.isEmpty())) {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
if (current.size() != update.size()) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
Collections.sort(current,Comparator.comparing(SongInfo::getId));
|
|
|
|
|
Collections.sort(update,Comparator.comparing(JournalSong::getSongId));
|
|
|
|
|
for (int i = 0; i < current.size(); i++) {
|
|
|
|
|
if (!isSameContent(current.get(i),update.get(i))) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private JournalTag createJournalTag(String tagId, String journalId) {
|
|
|
|
|
JournalTag journalTag = new JournalTag();
|
|
|
|
|