From 077377baf13d42a4040928e85f5d1216efd9d082 Mon Sep 17 00:00:00 2001 From: kastnerorz Date: Wed, 20 Nov 2019 16:45:30 +0800 Subject: [PATCH] refactor: timeList data structure --- src/main/java/cn/kastner/oj/domain/TimeCost.java | 2 +- src/main/java/cn/kastner/oj/dto/RankingUserDTO.java | 4 ++-- .../cn/kastner/oj/task/RankingComputingTask.java | 2 +- src/main/java/cn/kastner/oj/util/DTOMapper.java | 12 ++++++++---- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/main/java/cn/kastner/oj/domain/TimeCost.java b/src/main/java/cn/kastner/oj/domain/TimeCost.java index 192d49c..906a06e 100644 --- a/src/main/java/cn/kastner/oj/domain/TimeCost.java +++ b/src/main/java/cn/kastner/oj/domain/TimeCost.java @@ -16,7 +16,7 @@ public class TimeCost { @Column(length = 40) private String id = UUID.randomUUID().toString(); - @ManyToOne(fetch = FetchType.LAZY) + @ManyToOne(fetch = FetchType.EAGER) @NotFound(action = NotFoundAction.IGNORE) private ContestProblem contestProblem; diff --git a/src/main/java/cn/kastner/oj/dto/RankingUserDTO.java b/src/main/java/cn/kastner/oj/dto/RankingUserDTO.java index 83d7775..6ba3bcf 100644 --- a/src/main/java/cn/kastner/oj/dto/RankingUserDTO.java +++ b/src/main/java/cn/kastner/oj/dto/RankingUserDTO.java @@ -2,7 +2,7 @@ import lombok.Data; -import java.util.List; +import java.util.Map; @Data public class RankingUserDTO { @@ -25,7 +25,7 @@ public class RankingUserDTO { private Double score; - private List timeList; + private Map timeList; private Boolean ranked; diff --git a/src/main/java/cn/kastner/oj/task/RankingComputingTask.java b/src/main/java/cn/kastner/oj/task/RankingComputingTask.java index 585e030..182ec50 100644 --- a/src/main/java/cn/kastner/oj/task/RankingComputingTask.java +++ b/src/main/java/cn/kastner/oj/task/RankingComputingTask.java @@ -54,7 +54,7 @@ public void computeRank() { for (int i = 0; i < rankingUserList.size(); i++) { RankingUser rankingUser = rankingUserList.get(i); List timeCostList = timeCostRepository.findByRankingUser(rankingUser); - redisTemplate.opsForValue().set("timeCostList:" + rankingUser.getId(), mapper.toTimeCostDTOs(timeCostList)); + redisTemplate.opsForValue().set("timeCostList:" + rankingUser.getId(), mapper.toLabelTimeCostDTOs(timeCostList)); rankingUser.setRankingNumber(i); if (!rankingUser.getRanked()) { i--; diff --git a/src/main/java/cn/kastner/oj/util/DTOMapper.java b/src/main/java/cn/kastner/oj/util/DTOMapper.java index 52028da..9d03a96 100644 --- a/src/main/java/cn/kastner/oj/util/DTOMapper.java +++ b/src/main/java/cn/kastner/oj/util/DTOMapper.java @@ -8,9 +8,7 @@ import org.mapstruct.Mapper; import org.mapstruct.Mapping; -import java.util.Collection; -import java.util.List; -import java.util.Set; +import java.util.*; @Mapper(componentModel = "spring") public interface DTOMapper { @@ -130,7 +128,13 @@ public interface DTOMapper { TimeCostDTO entityToDTO(TimeCost timeCost); - List toTimeCostDTOs(List timeCostList); + default Map toLabelTimeCostDTOs(List timeCostList) { + Map labelTimeCostDTO = new HashMap<>(); + for (TimeCost timeCost : timeCostList) { + labelTimeCostDTO.put(timeCost.getContestProblem().getLabel(), entityToDTO(timeCost)); + } + return labelTimeCostDTO; + } @Mapping(target = "authorName", source = "author.username") @Mapping(target = "contestId", source = "contest.id")