[API] Ignore song without level information when calculating rating

master
samnyan 2020-02-02 14:09:44 +08:00
parent e992ca81c3
commit 4e462d16ea
1 changed files with 18 additions and 11 deletions

View File

@ -83,12 +83,16 @@ public class ApiAmazonController {
List<RatingItem> result = new ArrayList<>(); List<RatingItem> result = new ArrayList<>();
for (UserMusicDetail detail : details) { for (UserMusicDetail detail : details) {
Music music = musicMap.get(detail.getMusicId()); Music music = musicMap.get(detail.getMusicId());
if (music != null) {
Level level = music.getLevels().get(detail.getLevel()); Level level = music.getLevels().get(detail.getLevel());
if (level != null) {
int levelBase = level.getLevel() * 100 + level.getLevelDecimal(); int levelBase = level.getLevel() * 100 + level.getLevelDecimal();
int score = detail.getScoreMax(); int score = detail.getScoreMax();
int rating = calculateRating(levelBase, score); int rating = calculateRating(levelBase, score);
result.add(new RatingItem(music.getMusicId(), music.getName(), music.getArtistName(), level.getDiff(), score, levelBase, rating)); result.add(new RatingItem(music.getMusicId(), music.getName(), music.getArtistName(), level.getDiff(), score, levelBase, rating));
} }
}
}
return result.stream() return result.stream()
.filter(detail -> detail.getLevel() != 4) .filter(detail -> detail.getLevel() != 4)
@ -105,14 +109,17 @@ public class ApiAmazonController {
List<RatingItem> result = new ArrayList<>(); List<RatingItem> result = new ArrayList<>();
for (UserPlaylog log : logList) { for (UserPlaylog log : logList) {
Music music = musicMap.get(log.getMusicId()); Music music = musicMap.get(log.getMusicId());
if (music != null) {
Level level = music.getLevels().get(log.getLevel()); Level level = music.getLevels().get(log.getLevel());
if (level != null) {
int levelBase = level.getLevel() * 100 + level.getLevelDecimal(); int levelBase = level.getLevel() * 100 + level.getLevelDecimal();
int score = log.getScore(); int score = log.getScore();
int rating = calculateRating(levelBase, score); int rating = calculateRating(levelBase, score);
result.add(new RatingItem(music.getMusicId(), music.getName(), music.getArtistName(), level.getDiff(), score, levelBase, rating)); result.add(new RatingItem(music.getMusicId(), music.getName(), music.getArtistName(), level.getDiff(), score, levelBase, rating));
} }
List<String> keys = new ArrayList<>(); }
}
return result.stream() return result.stream()
.filter(detail -> detail.getLevel() != 4) .filter(detail -> detail.getLevel() != 4)