123333
This commit is contained in:
148
ruoyi-cai/src/main/java/com/ruoyi/cai/rank/RankAdminManager.java
Normal file
148
ruoyi-cai/src/main/java/com/ruoyi/cai/rank/RankAdminManager.java
Normal file
@@ -0,0 +1,148 @@
|
||||
package com.ruoyi.cai.rank;
|
||||
|
||||
import com.ruoyi.cai.constant.RedisHttpConstant;
|
||||
import com.ruoyi.cai.enums.rank.RankTimeTypeEnum;
|
||||
import com.ruoyi.cai.rank.bean.RankAdminBean;
|
||||
import com.ruoyi.cai.rank.bean.RankAdminNode;
|
||||
import org.redisson.api.RScoredSortedSet;
|
||||
import org.redisson.api.RedissonClient;
|
||||
import org.redisson.client.protocol.ScoredEntry;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.time.DayOfWeek;
|
||||
import java.time.LocalDate;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.time.temporal.TemporalAdjusters;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 充值和提现
|
||||
* 排行榜 后台管理专用, 暂时没有做持久化
|
||||
*/
|
||||
@Component
|
||||
public class RankAdminManager {
|
||||
|
||||
|
||||
@Autowired
|
||||
private RedissonClient redissonClient;
|
||||
|
||||
public static final String WITHDRAW_RANK_REDIS = RedisHttpConstant.WITHDRAW_RANK_REDIS;
|
||||
public static final String RECHARGE_RANK_REDIS = RedisHttpConstant.RECHARGE_RANK_REDIS;
|
||||
|
||||
private String dateString(LocalDate time){
|
||||
return time.format(DateTimeFormatter.ofPattern("yyyyMMdd"));
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取key
|
||||
* @param time 时间
|
||||
* @return
|
||||
*/
|
||||
private String getWithdrawKey(LocalDate time, RankTimeTypeEnum rankTimeTypeEnum){
|
||||
String typeStr;
|
||||
if(rankTimeTypeEnum == RankTimeTypeEnum.DAY){
|
||||
typeStr = dateString(time);
|
||||
}else if(rankTimeTypeEnum == RankTimeTypeEnum.WEEK){
|
||||
LocalDate monday = time.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
|
||||
LocalDate sunday = time.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY));
|
||||
String mondayStr = dateString(monday);
|
||||
String sundayStr = dateString(sunday);
|
||||
typeStr = mondayStr+"-"+sundayStr;
|
||||
}else if(rankTimeTypeEnum == RankTimeTypeEnum.MONTH){
|
||||
typeStr = time.format(DateTimeFormatter.ofPattern("yyyyMM"));
|
||||
}else if(rankTimeTypeEnum == RankTimeTypeEnum.TOTAL){
|
||||
typeStr = RankTimeTypeEnum.TOTAL.getCode();
|
||||
}else {
|
||||
return null;
|
||||
}
|
||||
return String.format(WITHDRAW_RANK_REDIS,rankTimeTypeEnum.getCode(),typeStr);
|
||||
}
|
||||
|
||||
private String getRechargeKey(LocalDate time,RankTimeTypeEnum rankTimeTypeEnum){
|
||||
String typeStr;
|
||||
if(rankTimeTypeEnum == RankTimeTypeEnum.DAY){
|
||||
typeStr = dateString(time);
|
||||
}else if(rankTimeTypeEnum == RankTimeTypeEnum.WEEK){
|
||||
LocalDate monday = time.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
|
||||
LocalDate sunday = time.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY));
|
||||
String mondayStr = dateString(monday);
|
||||
String sundayStr = dateString(sunday);
|
||||
typeStr = mondayStr+"-"+sundayStr;
|
||||
}else if(rankTimeTypeEnum == RankTimeTypeEnum.MONTH){
|
||||
typeStr = time.format(DateTimeFormatter.ofPattern("yyyyMM"));
|
||||
}else if(rankTimeTypeEnum == RankTimeTypeEnum.TOTAL){
|
||||
typeStr = RankTimeTypeEnum.TOTAL.getCode();
|
||||
}else {
|
||||
return null;
|
||||
}
|
||||
return String.format(RECHARGE_RANK_REDIS,rankTimeTypeEnum.getCode(),typeStr);
|
||||
}
|
||||
|
||||
public void addRank(RankAdminBean dto){
|
||||
if(dto.getRankType() == null){
|
||||
return;
|
||||
}
|
||||
if(dto.getRankType() == 3){ // 3-充值榜
|
||||
LocalDate localDate = dto.getHappenTime().toLocalDate();
|
||||
String dayKey = getRechargeKey(localDate,RankTimeTypeEnum.DAY);
|
||||
RScoredSortedSet<String> daySet = redissonClient.getScoredSortedSet(dayKey);
|
||||
daySet.addScore(dto.getUserId()+"",dto.getPrice());
|
||||
|
||||
String weekKey = getRechargeKey(localDate,RankTimeTypeEnum.WEEK);
|
||||
RScoredSortedSet<String> weekSet = redissonClient.getScoredSortedSet(weekKey);
|
||||
weekSet.addScore(dto.getUserId()+"",dto.getPrice());
|
||||
|
||||
String monthKey = getRechargeKey(localDate,RankTimeTypeEnum.MONTH);
|
||||
RScoredSortedSet<String> monthSet = redissonClient.getScoredSortedSet(monthKey);
|
||||
monthSet.addScore(dto.getUserId()+"",dto.getPrice());
|
||||
|
||||
String totalKey = getRechargeKey(localDate,RankTimeTypeEnum.TOTAL);
|
||||
RScoredSortedSet<String> totalSet = redissonClient.getScoredSortedSet(totalKey);
|
||||
totalSet.addScore(dto.getUserId()+"",dto.getPrice());
|
||||
}else if(dto.getRankType() == 4){ // 4=提现榜
|
||||
LocalDate localDate = dto.getHappenTime().toLocalDate();
|
||||
String dayKey = getWithdrawKey(localDate,RankTimeTypeEnum.DAY);
|
||||
RScoredSortedSet<String> daySet = redissonClient.getScoredSortedSet(dayKey);
|
||||
daySet.addScore(dto.getUserId()+"",dto.getPrice());
|
||||
|
||||
String weekKey = getWithdrawKey(localDate,RankTimeTypeEnum.WEEK);
|
||||
RScoredSortedSet<String> weekSet = redissonClient.getScoredSortedSet(weekKey);
|
||||
weekSet.addScore(dto.getUserId()+"",dto.getPrice());
|
||||
|
||||
String monthKey = getWithdrawKey(localDate,RankTimeTypeEnum.MONTH);
|
||||
RScoredSortedSet<String> monthSet = redissonClient.getScoredSortedSet(monthKey);
|
||||
monthSet.addScore(dto.getUserId()+"",dto.getPrice());
|
||||
|
||||
String totalKey = getWithdrawKey(localDate,RankTimeTypeEnum.TOTAL);
|
||||
RScoredSortedSet<String> totalSet = redissonClient.getScoredSortedSet(totalKey);
|
||||
totalSet.addScore(dto.getUserId()+"",dto.getPrice());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public List<RankAdminNode> getRechargeRank(LocalDate date, RankTimeTypeEnum rankTimeType, int limit){
|
||||
List<RankAdminNode> res = new ArrayList<>();
|
||||
String key = getRechargeKey(date,rankTimeType);
|
||||
RScoredSortedSet<String> daySet = redissonClient.getScoredSortedSet(key);
|
||||
Collection<ScoredEntry<String>> entries = daySet.entryRangeReversed(0, limit-1);
|
||||
for (ScoredEntry<String> entry : entries) {
|
||||
res.add(RankAdminNode.getNode(entry));
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
public List<RankAdminNode> getWithdrawRank(LocalDate date, RankTimeTypeEnum rankTimeType, int limit){
|
||||
List<RankAdminNode> res = new ArrayList<>();
|
||||
String key = getWithdrawKey(date,rankTimeType);
|
||||
RScoredSortedSet<String> daySet = redissonClient.getScoredSortedSet(key);
|
||||
Collection<ScoredEntry<String>> entries = daySet.entryRangeReversed(0, limit-1);
|
||||
for (ScoredEntry<String> entry : entries) {
|
||||
res.add(RankAdminNode.getNode(entry));
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package com.ruoyi.cai.rank.bean;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Data
|
||||
public class RankAdminBean {
|
||||
/**
|
||||
* // 1-魅力榜
|
||||
* // 2-邀请榜
|
||||
* 3-充值榜
|
||||
* 4-提现榜
|
||||
*/
|
||||
private Integer rankType;
|
||||
// 受益人ID
|
||||
private Long userId;
|
||||
private Number price;
|
||||
|
||||
private LocalDateTime happenTime = LocalDateTime.now();
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package com.ruoyi.cai.rank.bean;
|
||||
|
||||
import lombok.Data;
|
||||
import org.redisson.client.protocol.ScoredEntry;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Data
|
||||
public class RankAdminNode {
|
||||
private BigDecimal score;
|
||||
private Long userId;
|
||||
public RankAdminNode() {
|
||||
}
|
||||
|
||||
public static RankAdminNode getNode(ScoredEntry<String> entry){
|
||||
RankAdminNode rankNode = new RankAdminNode();
|
||||
rankNode.setScore(BigDecimal.valueOf(entry.getScore()));
|
||||
rankNode.setUserId(Long.valueOf(entry.getValue()));
|
||||
return rankNode;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user