diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/app/RankController.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/app/RankController.java index 0bc4f951..b2059f98 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/app/RankController.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/app/RankController.java @@ -1,10 +1,14 @@ package com.ruoyi.cai.controller.app; -import com.fasterxml.jackson.databind.ser.std.CollectionSerializer; +import com.ruoyi.cai.domain.User; +import com.ruoyi.cai.dto.app.vo.rank.RankNodeInvite; import com.ruoyi.cai.dto.app.vo.rank.RankNodeLove; +import com.ruoyi.cai.enums.GenderEnum; import com.ruoyi.cai.rank.RankManager; import com.ruoyi.cai.rank.RankNode; +import com.ruoyi.cai.service.UserService; import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.utils.StringUtils; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -13,8 +17,9 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import java.util.Collections; -import java.util.List; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; @RestController @RequestMapping("/api/rank") @@ -23,6 +28,8 @@ public class RankController { @Autowired private RankManager rankManager; + @Autowired + private UserService userService; @GetMapping("/love") @Operation(summary = "魅力榜") @@ -47,7 +54,93 @@ public class RankController { }else{ rankNodeList = Collections.emptyList(); } + if(rankNodeList.isEmpty()){ + return R.ok(Collections.emptyList()); + } + List res = new ArrayList<>(); + Set userIds = rankNodeList.stream().map(RankNode::getUserId).collect(Collectors.toSet()); + List userList = userService.listByIds(userIds); + Map userMap = userList.stream().collect(Collectors.toMap(User::getId, Function.identity())); + long lastLove = 0; + for (int i = 0; i < rankNodeList.size(); i++) { + RankNode rankNode = rankNodeList.get(i); + User user = userMap.get(rankNode.getUserId()); + if(user == null){ + continue; + } + RankNodeLove love = new RankNodeLove(); + love.setUserId(user.getId()); + love.setAvatar(user.getAvatar()); + love.setNickname(user.getNickname()); + love.setValue(rankNode.getScore()); + love.setHide(false); + if(i == 0){ + love.setDiffLastValue(0L); + }else{ + love.setDiffLastValue(lastLove - rankNode.getScore()); + } + lastLove = rankNode.getScore(); + res.add(love); + } + return R.ok(res); + } - return R.ok(); + @GetMapping("/invite") + @Operation(summary = "邀请榜") + public R> inviteRank( + @Parameter(description = "类型 1-上周 2-昨日 3-日榜 4-周榜 5-月榜 6-总榜") Integer type){ + if(type == null){ + return R.ok(Collections.emptyList()); + } + List rankNodeList; + if(type == 1){ + rankNodeList = rankManager.getInviteRankDayLastWeek(10); + }else if(type == 2){ + rankNodeList = rankManager.getInviteRankDayLastDay(10); + }else if(type == 3){ + rankNodeList = rankManager.getInviteRankDayToday(30); + }else if(type == 4){ + rankNodeList = rankManager.getInviteRankDayWeek(30); + }else if(type == 5){ + rankNodeList = rankManager.getInviteRankDayMonth(30); + }else if(type == 6){ + rankNodeList = rankManager.getInviteRankTotal(30); + }else{ + rankNodeList = Collections.emptyList(); + } + if(rankNodeList.isEmpty()){ + return R.ok(Collections.emptyList()); + } + List res = new ArrayList<>(); + Set userIds = rankNodeList.stream().map(RankNode::getUserId).collect(Collectors.toSet()); + List userList = userService.listByIds(userIds); + Map userMap = userList.stream().collect(Collectors.toMap(User::getId, Function.identity())); + long lastLove = 0; + for (int i = 0; i < rankNodeList.size(); i++) { + RankNode rankNode = rankNodeList.get(i); + User user = userMap.get(rankNode.getUserId()); + if(user == null){ + continue; + } + RankNodeInvite invite = new RankNodeInvite(); + invite.setAvatar(GenderEnum.WOMEN.getDefaultAvatar()); + invite.setNickname(minNickname(user.getNickname())); + invite.setValue(rankNode.getScore()); + if(i == 0){ + invite.setDiffLastValue(0L); + }else{ + invite.setDiffLastValue(lastLove - rankNode.getScore()); + } + lastLove = rankNode.getScore(); + res.add(invite); + } + return R.ok(res); + } + + private static String minNickname(String nickname){ + if(StringUtils.isEmpty(nickname)){ + return "*"; + } + return "*"+nickname.substring(nickname.length()-1); } } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/vo/rank/RankNodeInvite.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/vo/rank/RankNodeInvite.java new file mode 100644 index 00000000..440cc746 --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/vo/rank/RankNodeInvite.java @@ -0,0 +1,19 @@ +package com.ruoyi.cai.dto.app.vo.rank; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +public class RankNodeInvite { + + @Schema(description = "头像") + private String avatar; + @Schema(description = "昵称") + private String nickname; + @Schema(description = "数值") + private Long value; + @Schema(description = "距离上一名差距") + private Long diffLastValue; + @Schema(description = "是否已经领取奖励(该字段仅限昨日榜单有用)") + private boolean draw = true; +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/vo/rank/RankNodeLove.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/vo/rank/RankNodeLove.java index 1164b6f6..5fac40a9 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/vo/rank/RankNodeLove.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/vo/rank/RankNodeLove.java @@ -14,9 +14,11 @@ public class RankNodeLove { @Schema(description = "昵称") private String nickname; @Schema(description = "魅力值") - private Long love; - @Schema(description = "距离上一个魅力值差距") - private Long diffLastLove; + private Long value; + @Schema(description = "距离上一名差距") + private Long diffLastValue; @Schema(description = "是否开启隐身模式") private boolean hide; + @Schema(description = "是否已经领取奖励(该字段仅限昨日榜单有用)") + private boolean draw = true; }