init
This commit is contained in:
277
ruoyi-cai/src/main/java/com/ruoyi/cai/rank/RankManager.java
Normal file
277
ruoyi-cai/src/main/java/com/ruoyi/cai/rank/RankManager.java
Normal file
@@ -0,0 +1,277 @@
|
||||
package com.ruoyi.cai.rank;
|
||||
|
||||
import com.ruoyi.cai.constant.RedisConstant;
|
||||
import com.ruoyi.cai.mq.AmqpProducer;
|
||||
import com.ruoyi.cai.mq.handle.dto.RankDTO;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
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
|
||||
@Slf4j
|
||||
public class RankManager {
|
||||
|
||||
@Autowired
|
||||
private RedissonClient redissonClient;
|
||||
|
||||
public static final String LOVE_KEY_FORMAT = RedisConstant.LOVE_RANK_REDIS;
|
||||
public static final String INVITE_KEY_FORMAT = RedisConstant.INVITE_RANK_REDIS;
|
||||
|
||||
public static final String DAY = "Day";
|
||||
public static final String WEEK = "Week";
|
||||
public static final String MONTH = "Month";
|
||||
public static final String TOTAL = "Total";
|
||||
|
||||
private String dateString(LocalDate time){
|
||||
return time.format(DateTimeFormatter.ofPattern("yyyyMMdd"));
|
||||
}
|
||||
|
||||
private String getKeyInviteDay(LocalDate time){
|
||||
String day = dateString(time);
|
||||
return String.format(INVITE_KEY_FORMAT,DAY,day);
|
||||
}
|
||||
|
||||
private String getKeyInviteWeek(LocalDate time){
|
||||
LocalDate monday = time.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
|
||||
LocalDate sunday = time.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY));
|
||||
String mondayStr = dateString(monday);
|
||||
String sundayStr = dateString(sunday);
|
||||
return String.format(INVITE_KEY_FORMAT,WEEK,mondayStr+"-"+sundayStr);
|
||||
}
|
||||
|
||||
private String getKeyInviteMonth(LocalDate time){
|
||||
String month = time.format(DateTimeFormatter.ofPattern("yyyyMM"));
|
||||
return String.format(INVITE_KEY_FORMAT,MONTH,month);
|
||||
}
|
||||
|
||||
private String getKeyInviteTotal(){
|
||||
return String.format(INVITE_KEY_FORMAT,TOTAL,TOTAL);
|
||||
}
|
||||
|
||||
private String getKeyLoveDay(LocalDate time){
|
||||
String day = dateString(time);
|
||||
return String.format(LOVE_KEY_FORMAT,DAY,day);
|
||||
}
|
||||
|
||||
private String getKeyLoveWeek(LocalDate time){
|
||||
LocalDate monday = time.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
|
||||
LocalDate sunday = time.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY));
|
||||
String mondayStr = dateString(monday);
|
||||
String sundayStr = dateString(sunday);
|
||||
return String.format(LOVE_KEY_FORMAT,WEEK,mondayStr+"-"+sundayStr);
|
||||
}
|
||||
|
||||
private String getKeyLoveMonth(LocalDate time){
|
||||
String month = time.format(DateTimeFormatter.ofPattern("yyyyMM"));
|
||||
return String.format(LOVE_KEY_FORMAT,MONTH,month);
|
||||
}
|
||||
|
||||
private String getKeyLoveTotal(){
|
||||
return String.format(LOVE_KEY_FORMAT,TOTAL,TOTAL);
|
||||
}
|
||||
|
||||
public void addRank(RankDTO dto){
|
||||
if(dto.getRankType() == null){
|
||||
return;
|
||||
}
|
||||
if(dto.getRankType() == 1){
|
||||
LocalDate localDate = dto.getHappenTime().toLocalDate();
|
||||
String dayKey = getKeyLoveDay(localDate);
|
||||
RScoredSortedSet<String> daySet = redissonClient.getScoredSortedSet(dayKey);
|
||||
daySet.addScore(dto.getUserId()+"",dto.getPrice());
|
||||
|
||||
String weekKey = getKeyLoveWeek(localDate);
|
||||
RScoredSortedSet<String> weekSet = redissonClient.getScoredSortedSet(weekKey);
|
||||
weekSet.addScore(dto.getUserId()+"",dto.getPrice());
|
||||
|
||||
String monthKey = getKeyLoveMonth(localDate);
|
||||
RScoredSortedSet<String> monthSet = redissonClient.getScoredSortedSet(monthKey);
|
||||
monthSet.addScore(dto.getUserId()+"",dto.getPrice());
|
||||
|
||||
String totalKey = getKeyLoveTotal();
|
||||
RScoredSortedSet<String> totalSet = redissonClient.getScoredSortedSet(totalKey);
|
||||
totalSet.addScore(dto.getUserId()+"",dto.getPrice());
|
||||
}else if(dto.getRankType() == 2){
|
||||
LocalDate localDate = dto.getHappenTime().toLocalDate();
|
||||
String dayKey = getKeyInviteDay(localDate);
|
||||
RScoredSortedSet<String> daySet = redissonClient.getScoredSortedSet(dayKey);
|
||||
daySet.addScore(dto.getUserId()+"",dto.getPrice());
|
||||
|
||||
String weekKey = getKeyInviteWeek(localDate);
|
||||
RScoredSortedSet<String> weekSet = redissonClient.getScoredSortedSet(weekKey);
|
||||
weekSet.addScore(dto.getUserId()+"",dto.getPrice());
|
||||
|
||||
String monthKey = getKeyInviteMonth(localDate);
|
||||
RScoredSortedSet<String> monthSet = redissonClient.getScoredSortedSet(monthKey);
|
||||
monthSet.addScore(dto.getUserId()+"",dto.getPrice());
|
||||
|
||||
String totalKey = getKeyInviteTotal();
|
||||
RScoredSortedSet<String> totalSet = redissonClient.getScoredSortedSet(totalKey);
|
||||
totalSet.addScore(dto.getUserId()+"",dto.getPrice());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public List<RankNode> getLoveRankDayLastDay(int limit){
|
||||
return getLoveRankDay(LocalDate.now().plusDays(-1),limit);
|
||||
}
|
||||
public List<RankNode> getLoveRankDayLastWeek(int limit){
|
||||
return getLoveRankWeek(LocalDate.now().plusWeeks(-7),limit);
|
||||
}
|
||||
|
||||
public List<RankNode> getLoveRankDayToday(int limit){
|
||||
return getLoveRankDay(LocalDate.now(),limit);
|
||||
}
|
||||
public List<RankNode> getLoveRankDayWeek(int limit){
|
||||
return getLoveRankWeek(LocalDate.now(),limit);
|
||||
}
|
||||
public List<RankNode> getLoveRankDayMonth(int limit){
|
||||
return getLoveRankMonth(LocalDate.now(),limit);
|
||||
}
|
||||
|
||||
public List<RankNode> getLoveRankDay(LocalDate date, int limit){
|
||||
List<RankNode> res = new ArrayList<>();
|
||||
String key = getKeyLoveDay(date);
|
||||
RScoredSortedSet<String> daySet = redissonClient.getScoredSortedSet(key);
|
||||
Collection<ScoredEntry<String>> entries = daySet.entryRangeReversed(0, limit-1);
|
||||
for (ScoredEntry<String> entry : entries) {
|
||||
res.add(RankNode.getNode(entry));
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
public List<RankNode> getLoveRankWeek(LocalDate date,int limit){
|
||||
List<RankNode> res = new ArrayList<>();
|
||||
String key = getKeyLoveWeek(date);
|
||||
RScoredSortedSet<String> daySet = redissonClient.getScoredSortedSet(key);
|
||||
Collection<ScoredEntry<String>> entries = daySet.entryRangeReversed(0, limit-1);
|
||||
for (ScoredEntry<String> entry : entries) {
|
||||
res.add(RankNode.getNode(entry));
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
public List<RankNode> getLoveRankMonth(LocalDate date,int limit){
|
||||
List<RankNode> res = new ArrayList<>();
|
||||
String key = getKeyLoveMonth(date);
|
||||
RScoredSortedSet<String> daySet = redissonClient.getScoredSortedSet(key);
|
||||
Collection<ScoredEntry<String>> entries = daySet.entryRangeReversed(0, limit-1);
|
||||
for (ScoredEntry<String> entry : entries) {
|
||||
res.add(RankNode.getNode(entry));
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
public List<RankNode> getLoveRankTotal(int limit){
|
||||
List<RankNode> res = new ArrayList<>();
|
||||
String key = getKeyLoveTotal();
|
||||
RScoredSortedSet<String> daySet = redissonClient.getScoredSortedSet(key);
|
||||
Collection<ScoredEntry<String>> entries = daySet.entryRangeReversed(0, limit-1);
|
||||
for (ScoredEntry<String> entry : entries) {
|
||||
res.add(RankNode.getNode(entry));
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
public List<RankNode> getInviteRankDayLastDay(int limit){
|
||||
return getInviteRankDay(LocalDate.now().plusDays(-1),limit);
|
||||
}
|
||||
public List<RankNode> getInviteRankDayLastWeek(int limit){
|
||||
return getInviteRankWeek(LocalDate.now().plusWeeks(-7),limit);
|
||||
}
|
||||
|
||||
public List<RankNode> getInviteRankDayToday(int limit){
|
||||
return getInviteRankDay(LocalDate.now(),limit);
|
||||
}
|
||||
public List<RankNode> getInviteRankDayWeek(int limit){
|
||||
return getInviteRankWeek(LocalDate.now(),limit);
|
||||
}
|
||||
public List<RankNode> getInviteRankDayMonth(int limit){
|
||||
return getInviteRankMonth(LocalDate.now(),limit);
|
||||
}
|
||||
|
||||
public List<RankNode> getInviteRankDay(LocalDate date, int limit){
|
||||
List<RankNode> res = new ArrayList<>();
|
||||
String key = getKeyInviteDay(date);
|
||||
RScoredSortedSet<String> daySet = redissonClient.getScoredSortedSet(key);
|
||||
Collection<ScoredEntry<String>> entries = daySet.entryRangeReversed(0, limit-1);
|
||||
for (ScoredEntry<String> entry : entries) {
|
||||
res.add(RankNode.getNode(entry));
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
public List<RankNode> getInviteRankWeek(LocalDate date,int limit){
|
||||
List<RankNode> res = new ArrayList<>();
|
||||
String key = getKeyInviteWeek(date);
|
||||
RScoredSortedSet<String> daySet = redissonClient.getScoredSortedSet(key);
|
||||
Collection<ScoredEntry<String>> entries = daySet.entryRangeReversed(0, limit-1);
|
||||
for (ScoredEntry<String> entry : entries) {
|
||||
res.add(RankNode.getNode(entry));
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
public List<RankNode> getInviteRankMonth(LocalDate date,int limit){
|
||||
List<RankNode> res = new ArrayList<>();
|
||||
String key = getKeyInviteMonth(date);
|
||||
RScoredSortedSet<String> daySet = redissonClient.getScoredSortedSet(key);
|
||||
Collection<ScoredEntry<String>> entries = daySet.entryRangeReversed(0, limit-1);
|
||||
for (ScoredEntry<String> entry : entries) {
|
||||
res.add(RankNode.getNode(entry));
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
public List<RankNode> getInviteRankTotal(int limit){
|
||||
List<RankNode> res = new ArrayList<>();
|
||||
String key = getKeyInviteTotal();
|
||||
RScoredSortedSet<String> daySet = redissonClient.getScoredSortedSet(key);
|
||||
Collection<ScoredEntry<String>> entries = daySet.entryRangeReversed(0, limit-1);
|
||||
for (ScoredEntry<String> entry : entries) {
|
||||
res.add(RankNode.getNode(entry));
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
@Autowired
|
||||
private AmqpProducer amqpProducer;
|
||||
|
||||
public void sendLoveRankMq(Long userId,Long value,Long traceId){
|
||||
try {
|
||||
RankDTO rank = new RankDTO();
|
||||
rank.setUserId(userId);
|
||||
rank.setPrice(value);
|
||||
rank.setTraceId(traceId);
|
||||
rank.setRankType(1);
|
||||
amqpProducer.sendCommonMq(rank);
|
||||
}catch (Exception e){
|
||||
log.error("发送魅力榜 rank mq失败",e);
|
||||
}
|
||||
}
|
||||
|
||||
public void sendInviteRankMq(Long userId,Long value,Long traceId){
|
||||
try {
|
||||
RankDTO rank = new RankDTO();
|
||||
rank.setUserId(userId);
|
||||
rank.setPrice(value);
|
||||
rank.setTraceId(traceId);
|
||||
rank.setRankType(2);
|
||||
amqpProducer.sendCommonMq(rank);
|
||||
}catch (Exception e){
|
||||
log.error("发送邀请榜 rank mq失败",e);
|
||||
}
|
||||
}
|
||||
}
|
||||
20
ruoyi-cai/src/main/java/com/ruoyi/cai/rank/RankNode.java
Normal file
20
ruoyi-cai/src/main/java/com/ruoyi/cai/rank/RankNode.java
Normal file
@@ -0,0 +1,20 @@
|
||||
package com.ruoyi.cai.rank;
|
||||
|
||||
import lombok.Data;
|
||||
import org.redisson.client.protocol.ScoredEntry;
|
||||
|
||||
@Data
|
||||
public class RankNode {
|
||||
private Long score;
|
||||
private Long userId;
|
||||
|
||||
public RankNode() {
|
||||
}
|
||||
|
||||
public static RankNode getNode(ScoredEntry<String> entry){
|
||||
RankNode rankNode = new RankNode();
|
||||
rankNode.setScore(entry.getScore().longValue());
|
||||
rankNode.setUserId(Long.valueOf(entry.getValue()));
|
||||
return rankNode;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user