战力冲刺排行榜调整

back_recharge
xuexinpeng 2022-02-25 11:52:23 +08:00
parent 163a14fe36
commit 4ce354caa5
4 changed files with 128 additions and 11 deletions

View File

@ -12,6 +12,7 @@ import com.ljsd.jieling.logic.mail.MailLogic;
import com.ljsd.jieling.logic.rank.RankContext;
import com.ljsd.jieling.logic.rank.RankEnum;
import com.ljsd.jieling.logic.rank.rankImpl.AbstractRank;
import com.ljsd.jieling.logic.rank.rankImpl.PowerRiceRank;
import com.ljsd.jieling.network.session.ISession;
import config.SActivityRankingReward;
import config.SActivityRewardConfig;
@ -20,6 +21,7 @@ import org.springframework.data.redis.core.ZSetOperations;
import util.StringUtil;
import util.TimeUtils;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class PowerRiceActivity extends AbstractActivity{
@ -71,13 +73,23 @@ public class PowerRiceActivity extends AbstractActivity{
@Override
public void onActivityPreEnd() throws Exception {
AbstractRank powerRank = RankContext.getRankEnum(RankEnum.POWER_RICE_RANK.getType());
Set<ZSetOperations.TypedTuple<String>> rankInfos = powerRank.getRankByKey("", 0,-1);
List<SActivityRankingReward> sActivityRankingReward = SActivityRankingReward.getsActivityRankingRewardMapByActivityId(id);
if(sActivityRankingReward == null || sActivityRankingReward.size() ==0 ){
return;
}
Map<Integer,Integer> powerRankMap = PowerRiceRank.getSpecailRank();
for(Map.Entry<Integer,Integer> keval:powerRankMap.entrySet()){
final int rankIndex = keval.getKey();
String title = SErrorCodeEerverConfig.getI18NMessage("battlecapacityrank_mail_title");
String content = SErrorCodeEerverConfig.getFormatMessage("battlecapacityrank_mail_txt", new Object[]{rankIndex});
SActivityRankingReward activityReward =sActivityRankingReward.stream().filter(n->rankIndex>=n.getMinRank() && rankIndex>=n.getMaxRank()).findFirst().orElse(null);
if(activityReward == null){
continue;
}
MailLogic.getInstance().sendMail(keval.getValue(), title, content, StringUtil.parseArrayToString(activityReward.getRankingReward()), TimeUtils.nowInt(), Global.MAIL_EFFECTIVE_TIME);
}
/* AbstractRank powerRank = RankContext.getRankEnum(RankEnum.POWER_RICE_RANK.getType());
Set<ZSetOperations.TypedTuple<String>> rankInfos = powerRank.getRankByKey("", 0,-1);
int index = 1;
for(ZSetOperations.TypedTuple<String> rankInfo:rankInfos){
String title = SErrorCodeEerverConfig.getI18NMessage("battlecapacityrank_mail_title");
@ -89,9 +101,13 @@ public class PowerRiceActivity extends AbstractActivity{
}
MailLogic.getInstance().sendMail(Integer.parseInt(rankInfo.getValue()), title, content, StringUtil.parseArrayToString(activityReward.getRankingReward()), TimeUtils.nowInt(), Global.MAIL_EFFECTIVE_TIME);
index++;
}
}*/
GlobalSystemControl globalSystemControl = GlobalSystemControl.getGlobalSystemControl();
globalSystemControl.addActivityPreEnd(id,TimeUtils.now());
GlobalSystemControl.save(globalSystemControl);
}
public List<SActivityRankingReward> getRankReward() throws Exception{
List<SActivityRankingReward> sActivityRankingReward = SActivityRankingReward.getsActivityRankingRewardMapByActivityId(id);
return sActivityRankingReward;
}
}

View File

@ -195,7 +195,7 @@ public abstract class AbstractRank implements IRank {
return builder;
}
private PlayerInfoProto.RankResponse.Builder getAllUserResponse(Set<ZSetOperations.TypedTuple<String>> zsetreverseRangeWithScores, int start){
public PlayerInfoProto.RankResponse.Builder getAllUserResponse(Set<ZSetOperations.TypedTuple<String>> zsetreverseRangeWithScores, int start){
PlayerInfoProto.RankResponse.Builder builder = PlayerInfoProto.RankResponse.newBuilder();
forEach(start,zsetreverseRangeWithScores,(index,data)->{
try {

View File

@ -1,20 +1,26 @@
package com.ljsd.jieling.logic.rank.rankImpl;
import com.ljsd.jieling.logic.activity.ActivityLogic;
import com.ljsd.jieling.logic.activity.ActivityType;
import com.ljsd.jieling.logic.activity.IEventHandler;
import com.ljsd.jieling.db.redis.RedisUtil;
import com.ljsd.jieling.exception.ErrorCode;
import com.ljsd.jieling.exception.ErrorCodeException;
import com.ljsd.jieling.logic.activity.*;
import com.ljsd.jieling.logic.activity.event.IEvent;
import com.ljsd.jieling.logic.activity.event.Poster;
import com.ljsd.jieling.logic.activity.event.UserMainTeamForceEvent;
import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.hero.HeroLogic;
import com.ljsd.jieling.logic.rank.RankEnum;
import config.SActivityRankingReward;
import config.SGlobalActivity;
import org.springframework.data.redis.core.ZSetOperations;
import rpc.protocols.PlayerInfoProto;
import util.TimeUtils;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.function.BiConsumer;
import java.util.stream.Collectors;
public class PowerRiceRank extends AbstractRank implements IEventHandler {
@ -70,4 +76,95 @@ public class PowerRiceRank extends AbstractRank implements IEventHandler {
}
}
}
@Override
public PlayerInfoProto.RankResponse.Builder getAllUserResponse(Set<ZSetOperations.TypedTuple<String>> zsetreverseRangeWithScores, int start){
PlayerInfoProto.RankResponse.Builder builder = PlayerInfoProto.RankResponse.newBuilder();
forEach(start,zsetreverseRangeWithScores,(index,data)->{
try {
getOptional(index,data,builder);
} catch (Exception e) {
e.printStackTrace();
}
});
return builder;
}
protected static <T> void forEach(int startIndex,Iterable<? extends T> elements, BiConsumer<Integer, ? super T> action) {
Objects.requireNonNull(elements);
Objects.requireNonNull(action);
try {
Map<Integer,Integer> mapSpecailRank = getSpecailRank();
for (T element : elements) {
int rank =0;
for(Map.Entry<Integer,Integer> keyVal :mapSpecailRank.entrySet()){
int key = keyVal.getKey();
if(((ZSetOperations.TypedTuple<String>)element).getValue().equals(String.valueOf(keyVal.getValue()))){
rank = key;
break;
}
}
//int rank = mapSpecailRank.entrySet().stream().filter(entry -> ((ZSetOperations.TypedTuple<String>)element).getValue().equals(entry.getValue())).map(Map.Entry::getKey).findFirst().orElse(null);
action.accept(rank, element);}
}catch (Exception e){
e.printStackTrace();
}
}
//map<名次uid>
public static Map<Integer,Integer> getSpecailRank() throws Exception {
Set<ZSetOperations.TypedTuple<String>> zsetreverseRangeWithScores = RedisUtil.getInstence().getZsetreverseRangeWithScores(RankEnum.POWER_RICE_RANK.getRedisKey(), "", 0, -1);
Map<Integer,Integer> newMap = new HashMap<>();
AbstractActivity activityType = ActivityTypeEnum.getActicityType(9701);
if(!(activityType instanceof PowerRiceActivity)){
throw new ErrorCodeException(ErrorCode.ACTIVITY_NOT_OPEN);
}
List<SActivityRankingReward> sActivityRankingReward = ((PowerRiceActivity)activityType).getRankReward();
int ranIndex =0;
SActivityRankingReward activityReward =sActivityRankingReward.stream().filter(n->n.getRankLimit()== null).sorted(Comparator.comparing(SActivityRankingReward::getId)).findFirst().orElse(null);
if(activityReward != null){
ranIndex = activityReward.getMinRank();
}else{
ranIndex = 4;
}
for(ZSetOperations.TypedTuple<String> operation :zsetreverseRangeWithScores){
boolean isRank = false;
for(SActivityRankingReward config:sActivityRankingReward.stream().filter(n->n.getRankLimit()!= null).collect(Collectors.toList())){
if(config.getRankLimit()!=null && config.getRankLimit().length>0){
if(operation.getScore()>= config.getRankLimit()[0] && operation.getScore()<= config.getRankLimit()[1]){
//if(operation.getScore()>= 4000 && operation.getScore()<= 1500000){
for(int i= config.getMinRank();i<=config.getMaxRank();i++){
/*if(!newList.contains(i)){
newList.add(i,Integer.parseInt(operation.getValue()));
isRank = true;
break;//结束此次排序
}*/
if(!newMap.containsKey(i)){
newMap.put(i,Integer.parseInt(operation.getValue()));
isRank = true;
break;//结束此次排序
}
}
}else{
}
}
if(isRank){
break;
}
}
if(!isRank){
if(!newMap.containsKey(ranIndex)){
newMap.put(ranIndex,Integer.parseInt(operation.getValue()));
}else{
//https://blog.csdn.net/long243416336/article/details/84876476
int currentMaxRank = newMap.keySet().stream().min(Integer::min).get();
newMap.put(++currentMaxRank,Integer.parseInt(operation.getValue()));
}
}
//newList.add(Integer.parseInt(operation.getValue()));
}
return newMap;
}
}

View File

@ -21,6 +21,8 @@ public class SActivityRankingReward implements BaseConfig {
private int[][] rankingReward;
private int[] rankLimit;
private static Map<Integer, SActivityRankingReward> sActivityRankingRewardMap;
private static Map<Integer, List<SActivityRankingReward>> sActivityRankingRewardMapByActivityId;
@ -67,5 +69,7 @@ public class SActivityRankingReward implements BaseConfig {
return rankingReward;
}
public int[] getRankLimit() {
return rankLimit;
}
}