فهرست منبع

refactor(voteResult): change param from activityId to voteId.

eric 2 سال پیش
والد
کامیت
3e9cb7af3a

+ 3 - 3
src/main/java/com/finikes/oc/vote/controller/VoteController.java

@@ -156,9 +156,9 @@ public class VoteController {
     }
 
     @GetMapping("/vote/result")
-    public ApiResponse<List<VoteResultDto>> voteResult(@RequestParam("activityId") Integer activityId) {
-        List<VoteResultDto> list = voteService.voteResult(activityId);
-        return ApiResponse.successful(list);
+    public ApiResponse<VoteResultDto> voteResult(@RequestParam("voteId") Integer voteId) {
+        VoteResultDto dto = voteService.voteResult(voteId);
+        return ApiResponse.successful(dto);
     }
 
 

+ 1 - 1
src/main/java/com/finikes/oc/vote/service/VoteService.java

@@ -69,5 +69,5 @@ public interface VoteService {
      */
     void madeChoiceDelegation(ChoiceDelegationDto dto);
 
-    List<VoteResultDto> voteResult(Integer voteActivityId);
+    VoteResultDto voteResult(Integer voteId);
 }

+ 32 - 45
src/main/java/com/finikes/oc/vote/service/VoteServiceImpl.java

@@ -358,22 +358,13 @@ public class VoteServiceImpl implements VoteService {
         }
     }
 
-    public List<VoteResultDto> voteResult(Integer voteActivityId) {
-        VoteActivity activity = voteActivityDao.selectByPrimaryKey(voteActivityId);
-        if (activity == null) {
-            throw new BusinessException("参与的投票不存在");
-        }
-        List<Vote> votes = voteDao.selectByVoteActivityId(voteActivityId)
-                .stream()
-                .sorted(Comparator.comparingInt(Vote::getSequence))
-                .collect(Collectors.toList());
-        if (votes.isEmpty()) {
+    public VoteResultDto voteResult(Integer voteId) {
+        Vote vote = voteDao.selectByPrimaryKey(voteId);
+        if (vote == null) {
             throw new BusinessException("参与的投票不存在");
         }
 
-        List<Integer> voteIds = votes.stream().map(Vote::getId).collect(Collectors.toList());
-
-        List<Option> options = optionDao.selectByVoteIds(voteIds);
+        List<Option> options = optionDao.selectByVoteIds(Collections.singletonList(voteId));
         Map<Integer, List<Option>> optionMap = new HashMap<>();
         for (Option option : options) {
             if (!optionMap.containsKey(option.getVoteId())) {
@@ -382,48 +373,44 @@ public class VoteServiceImpl implements VoteService {
             optionMap.get(option.getVoteId()).add(option);
         }
 
-        List<OptionSummary> list = voteIds.isEmpty() ? Collections.emptyList() : choiceDao.selectByVoteIds(voteIds);
+        List<OptionSummary> list = choiceDao.selectByVoteIds(Collections.singletonList(voteId));
         Map<Integer, OptionSummary> summaryMap = new HashMap<>();
         for (OptionSummary summary : list) {
             summaryMap.put(summary.getOptionId(), summary);
         }
 
-        List<VoteResultDto> results = new ArrayList<>(votes.size());
-        for (Vote vote : votes) {
-            VoteResultDto resultDto = new VoteResultDto();
-            resultDto.setVoteId(vote.getId());
+        VoteResultDto resultDto = new VoteResultDto();
+        resultDto.setVoteId(vote.getId());
 
-            List<Option> matchedOptions = optionMap.get(vote.getId());
-            if (matchedOptions == null || matchedOptions.isEmpty()) {
-                resultDto.setItems(Collections.emptyList());
-                continue;
-            }
+        List<Option> matchedOptions = optionMap.get(vote.getId());
+        if (matchedOptions == null || matchedOptions.isEmpty()) {
+            resultDto.setItems(Collections.emptyList());
+            return resultDto;
+        }
 
-            resultDto.setItems(new ArrayList<>());
-            int total = 0;
-            for (Option option : matchedOptions) {
-                VoteResultItemDto item = new VoteResultItemDto();
-
-                item.setOptionId(option.getId());
-                item.setValue(option.getValue());
-                item.setPercent(0);
-                OptionSummary summary = summaryMap.get(option.getId());
-                if (summary == null) {
-                    item.setQuantity(0);
-                } else {
-                    item.setQuantity(summary.getQuantity());
-                    total += summary.getQuantity();
-                }
-                resultDto.getItems().add(item);
+        resultDto.setItems(new ArrayList<>());
+        int total = 0;
+        for (Option option : matchedOptions) {
+            VoteResultItemDto item = new VoteResultItemDto();
+
+            item.setOptionId(option.getId());
+            item.setValue(option.getValue());
+            item.setPercent(0);
+            OptionSummary summary = summaryMap.get(option.getId());
+            if (summary == null) {
+                item.setQuantity(0);
+            } else {
+                item.setQuantity(summary.getQuantity());
+                total += summary.getQuantity();
             }
-            if (total != 0) {
-                for (VoteResultItemDto item : resultDto.getItems()) {
-                    item.setPercent(calcPercent(total, item.getQuantity()));
-                }
+            resultDto.getItems().add(item);
+        }
+        if (total != 0) {
+            for (VoteResultItemDto item : resultDto.getItems()) {
+                item.setPercent(calcPercent(total, item.getQuantity()));
             }
-            results.add(resultDto);
         }
-        return results;
+        return resultDto;
     }
 
     private static int calcPercent(int total, int number) {