排行榜批量修改,跨服逻辑统一接口,本地获取排行玩家数据不放缓存

back_recharge
duhui 2021-11-05 17:20:36 +08:00
parent 93a653423f
commit e807b5b743
27 changed files with 127 additions and 411 deletions

View File

@ -111,7 +111,11 @@ public class FastChallengeHandler extends BaseHandler<FightInfoProto.FastFightCh
int fight = fightResult.getResult();
String content;
String challengeContent;
PlayerManager playerInfoManager = UserManager.getUser(challengeId).getPlayerInfoManager();
User challenge = UserManager.getUserNotCache(challengeId);
if (challenge == null){
throw new ErrorCodeException(ErrorCode.USE_NOT_EXIT);
}
PlayerManager playerInfoManager = challenge.getPlayerInfoManager();
String challengeName = playerInfoManager.getNickName();
String challengeNameColor = playerInfoManager.getNameColor();
String nameColor = user.getPlayerInfoManager().getNameColor();

View File

@ -6,6 +6,7 @@ import com.ljsd.jieling.config.clazzStaticCfg.CommonStaticConfig;
import com.ljsd.jieling.core.FunctionIdEnum;
import com.ljsd.jieling.core.GlobalsDef;
import com.ljsd.jieling.db.mongo.MongoKey;
import com.ljsd.jieling.db.mongo.MongoUtil;
import com.ljsd.jieling.globals.BIReason;
import com.ljsd.jieling.globals.Global;
import com.ljsd.jieling.handler.mission.Mission;
@ -297,8 +298,7 @@ public class MapManager extends MongoBase {
}
public static void getEnergy(User user) throws Exception {
public static void getEnergy(User user){
PlayerManager playerInfoManager = user.getPlayerInfoManager();
Item item = user.getItemManager().getItemMap().get(Global.STAMINA);
int itemNum = (int)item.getItemNum();
@ -313,14 +313,12 @@ public class MapManager extends MongoBase {
item.setItemNum(curEnergy > playerInfoManager.getMaxStamina() ? playerInfoManager.getMaxStamina() : curEnergy);
KtEventUtils.onKtEvent(user, ParamEventBean.UserItemEvent, BIReason.TIME_REWARD,GlobalsDef.addReason,item.getItemId(),addValue,item.getItemNum());
}
setLastUpdateEnergyTime(item, updateTime, lastUpdateEnergyTime);
} else {
setLastUpdateEnergyTime(item, updateTime, lastUpdateEnergyTime);
}
setLastUpdateEnergyTime(item, updateTime, lastUpdateEnergyTime);
}
}
private static void setLastUpdateEnergyTime(Item item, int updateTime, int lastUpdateEnergyTime) throws Exception {
private static void setLastUpdateEnergyTime(Item item, int updateTime, int lastUpdateEnergyTime) {
int time = lastUpdateEnergyTime + ((updateTime -lastUpdateEnergyTime)/60 )* 60;
item.setEndingTime(time);
}

View File

@ -8,6 +8,7 @@ import com.ljsd.jieling.db.redis.RedisKey;
import com.ljsd.jieling.db.redis.RedisUtil;
import com.ljsd.jieling.logic.arena.ArenaLogic;
import com.ljsd.jieling.logic.dao.PlayerManager;
import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.cross.CSPlayer;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.dao.root.UserInfo;
@ -116,11 +117,21 @@ public class CrossServiceLogic {
*/
public static long getCrossTeamForce(int userId, int teamId){
CSPlayer csPlayer = getPlayerByRedis(userId);
int force = 0;
if (csPlayer == null){
return 0;
return force;
}
CrossArenaManager data = PlayerLogic.getInstance().getCrossArenaManagerData(csPlayer);
return data.getTotalForceByTeam().getOrDefault(teamId,0);
// 本服玩家直接计算跨服玩家走rpc
if(GameApplication.serverId == csPlayer.getServerId()){
User user = UserManager.getUserNotCache(userId);
if (user != null){
force = HeroLogic.getInstance().calTeamTotalForce(user, teamId, false);
}
}else {
CrossArenaManager data = PlayerLogic.getInstance().getCrossArenaManagerData(csPlayer);
force = data.getTotalForceByTeam().getOrDefault(teamId,0);
}
return force;
}
private static CSPlayer formattUserToPlayer(User user){

View File

@ -153,7 +153,7 @@ public class FightUtil {
deffightTeamInfo = makeFightWithSnapData(pvpFightEvent.getDefFightSnapData());
} else {
if (fightEvent.getFightType() == GameFightType.ArenaPersonFight || fightEvent.getFightType() == GameFightType.CarPersonChallenge) {
User defInMem = UserManager.getUserInMem(pvpFightEvent.getDefUid());
User defInMem = UserManager.getUserNotCache(pvpFightEvent.getDefUid());
deffightTeamInfo = makePersonFightData(defInMem, pvpFightEvent.getDefTeamId(), null, null);
} else {
deffightTeamInfo = makeRobotFightData(pvpFightEvent.getDefUid());
@ -165,7 +165,7 @@ public class FightUtil {
if (SArenaRobotConfig.getsArenaRobotConfigById(pvpFightEvent.getAttackUid()) != null) {
fightTeamInfo = makeRobotFightData(pvpFightEvent.getAttackUid());
} else {
User userInMem = UserManager.getUserInMem(pvpFightEvent.getAttackUid());
User userInMem = UserManager.getUserNotCache(pvpFightEvent.getAttackUid());
fightTeamInfo = makePersonFightData(userInMem, pvpFightEvent.getTeamId(), pvpFightEvent.getAttackBloodMap(), null);
}
} else {

View File

@ -965,7 +965,7 @@ public class PlayerLogic {
}
return builder.build();
}
public CrossArenaManager getCrossArenaManagerData(CSPlayer csPlayer){
public CrossArenaManager getCrossArenaManagerData(CSPlayer csPlayer){
String rpcString = RedisUtil.getInstence().getObject(RedisKey.LOGIC_SERVER_INFO, String.valueOf(csPlayer.getServerId()), String.class, -1);
String ip = rpcString.split(":")[0];
String port = rpcString.split(":")[3];
@ -976,7 +976,7 @@ public class PlayerLogic {
StringBuilder sb = new StringBuilder();
sb.append("RPCCORE").append("|")
.append(ip).append("|")
.append(port).toString();
.append(port);
ClientAdapterPo<RPCRequestIFace.Client> rPCClient = null;
CrossArenaManager crossArenaManager = null ;
try{

View File

@ -106,7 +106,7 @@ public class RankLogic {
if (now > old){
// 距离上次存储超过一小时,重新获取
AbstractRank rank = RankContext.getRankEnum(RankEnum.FORCE_CURR_RANK.getType());
PlayerInfoProto.RankResponse rankResponse = null;
PlayerInfoProto.RankResponse rankResponse;
try {
rankResponse = rank.getRank(user.getId(), "", start, end);
} catch (Exception e) {
@ -172,6 +172,9 @@ public class RankLogic {
*/
private List<Integer> getTeamByUid(User user){
ArrayList<Integer> integers = new ArrayList<>();
if (user == null){
return integers;
}
List<TeamPosHeroInfo> heroInfos = user.getTeamPosManager().getTeamPosForHero().get(GlobalsDef.FORMATION_NORMAL);
heroInfos.forEach(v->{
// 获取英雄模板id
@ -188,9 +191,9 @@ public class RankLogic {
* @return
* @throws Exception
*/
private User getRankUid(PlayerInfoProto.RankResponse rankResponse, int ranking) throws Exception {
private User getRankUid(PlayerInfoProto.RankResponse rankResponse, int ranking){
CommonProto.UserRank ranks = rankResponse.getRanks(ranking);
return UserManager.getUser(ranks.getUid());
return UserManager.getUserNotCache(ranks.getUid());
}
/**

View File

@ -143,8 +143,12 @@ public abstract class AbstractRank implements IRank {
return RedisUtil.getInstence().getZsetreverseRangeWithScores(getCrossRedisKey(), rkey, start, end, false);
}
//获取第一名信息
public CommonProto.UserRank.Builder getFirst(int activityId) throws Exception {
/**
*
* @param activityId
* @return
*/
public CommonProto.UserRank.Builder getFirst(int activityId) {
Set<ZSetOperations.TypedTuple<String>> rankByKey = getRankByKey(activityId==0?"":String.valueOf(activityId), 0, 0);
CommonProto.UserRank.Builder builder = CommonProto.UserRank.newBuilder();
if(rankByKey.size()!=1){
@ -152,7 +156,7 @@ public abstract class AbstractRank implements IRank {
}
ZSetOperations.TypedTuple<String> data = rankByKey.iterator().next();
LOGGER.info("有问题的ArenaId{}",Integer.parseInt(data.getValue()));
User everyUser = UserManager.getUser(Integer.parseInt(data.getValue()), true);
User everyUser = UserManager.getUserNotCache(Integer.parseInt(data.getValue()));
if (everyUser == null){
return builder;
}
@ -191,7 +195,7 @@ public abstract class AbstractRank implements IRank {
return builder;
}
protected PlayerInfoProto.RankResponse.Builder getAllUserResponse(Set<ZSetOperations.TypedTuple<String>> zsetreverseRangeWithScores,int start) throws Exception{
private PlayerInfoProto.RankResponse.Builder getAllUserResponse(Set<ZSetOperations.TypedTuple<String>> zsetreverseRangeWithScores, int start){
PlayerInfoProto.RankResponse.Builder builder = PlayerInfoProto.RankResponse.newBuilder();
forEach(start,zsetreverseRangeWithScores,(index,data)->{
try {
@ -204,7 +208,7 @@ public abstract class AbstractRank implements IRank {
}
protected void getOptional(int index,ZSetOperations.TypedTuple<String> data,PlayerInfoProto.RankResponse.Builder builder) throws Exception {
User everyUser = UserManager.getUser(Integer.parseInt(data.getValue()), true);
User everyUser = UserManager.getUserNotCache(Integer.parseInt(data.getValue()));
if (everyUser == null){
return;
}
@ -244,7 +248,7 @@ public abstract class AbstractRank implements IRank {
builder.addRanks(oneUserRank);
}
private CommonProto.UserRank.Builder getOneUserRank(User everyUser,CommonProto.RankInfo.Builder everyRankInfo){
public CommonProto.UserRank.Builder getOneUserRank(User everyUser,CommonProto.RankInfo.Builder everyRankInfo){
return CommonProto.UserRank.newBuilder()
.setUid(everyUser.getId())
.setUserName(everyUser.getPlayerInfoManager().getNickName())

View File

@ -8,6 +8,9 @@ import org.springframework.data.redis.core.ZSetOperations;
import rpc.protocols.CommonProto;
import rpc.protocols.PlayerInfoProto;
/**
* @author Administrator
*/
public class CarDealyGuildRank extends AbstractRank{
public CarDealyGuildRank(int type, String redisKey) {
super(type, redisKey);
@ -44,7 +47,6 @@ public class CarDealyGuildRank extends AbstractRank{
builder.addRanks(everyRank);
}
@Override
protected void getMyInfo(User user, String rkey, PlayerInfoProto.RankResponse.Builder allUserResponse) {
int guildId = user.getPlayerInfoManager().getGuildId();

View File

@ -1,45 +1,8 @@
package com.ljsd.jieling.logic.rank.rankImpl;
import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.root.User;
import rpc.protocols.CommonProto;
import rpc.protocols.PlayerInfoProto;
import org.springframework.data.redis.core.ZSetOperations;
public class CarDealyRank extends AbstractRank{
public class CarDealyRank extends ForceRank{
public CarDealyRank(int type, String redisKey) {
super(type, redisKey);
}
@Override
public long[] getDataByScore(Double score) {
return new long[]{score.longValue()};
}
@Override
public double getScore(double... data) {
return data[0];
}
@Override
protected void getOptional(int index, ZSetOperations.TypedTuple<String> data, PlayerInfoProto.RankResponse.Builder builder) throws Exception {
CommonProto.RankInfo.Builder everyRankInfo = CommonProto.RankInfo.newBuilder()
.setRank(index)
.setParam1(getParam1(data.getScore()))
.setParam2(getParam2(data.getScore()))
.setParam3(getParam3(data.getScore()));
User everyUser = UserManager.getUser(Integer.parseInt(data.getValue()), true);
CommonProto.UserRank everyRank = CommonProto.UserRank.newBuilder()
.setUserName(everyUser.getPlayerInfoManager().getNickName())
.setRankInfo(everyRankInfo)
.setSex(everyUser.getPlayerInfoManager().getSex())
.setUserSkin(everyUser.getPlayerInfoManager().getUserSkin())
.setUserTitle(everyUser.getPlayerInfoManager().getUserTitle())
.setUserMount(everyUser.getPlayerInfoManager().getUserMount())
.setPracticeLevel(everyUser.getHeroManager().getPracticeLevel())
.build();
builder.addRanks(everyRank);
}
}

View File

@ -1,22 +1,13 @@
package com.ljsd.jieling.logic.rank.rankImpl;
import com.ljsd.jieling.core.GlobalsDef;
import com.ljsd.jieling.db.redis.RedisKey;
import com.ljsd.jieling.db.redis.RedisUtil;
import com.ljsd.jieling.logic.GlobleSystemLogic;
import com.ljsd.jieling.logic.activity.crossService.CrossServiceLogic;
import com.ljsd.jieling.logic.arena.ArenaLogic;
import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.cross.CSPlayer;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.hero.HeroLogic;
import org.springframework.data.redis.core.ZSetOperations;
import rpc.protocols.CommonProto;
import rpc.protocols.PlayerInfoProto;
import java.util.Set;
public class CrossYuXuLunDaoPersonRank extends AbstractRank{
public class CrossYuXuLunDaoPersonRank extends CrossYuXuLunDaoRank{
public CrossYuXuLunDaoPersonRank(int type, String redisKey) {
super(type, redisKey);
@ -37,39 +28,13 @@ public class CrossYuXuLunDaoPersonRank extends AbstractRank{
return data[0];
}
/**
*
*/
public void addOrUpdateRank(int uid,String rkey,double... data){
String key = RedisKey.getKey(redisKey,rkey,false);
//decr
RedisUtil.getInstence().zsetAddOne(key,String.valueOf(uid), getScore(data));
}
@Override
protected void getCrossOptional(int index, ZSetOperations.TypedTuple<String> data, PlayerInfoProto.RankResponse.Builder builder) throws Exception {
if(Integer.parseInt(data.getValue())<1000){
/*CommonProto.RankInfo.Builder everyRankInfo = CommonProto.RankInfo.newBuilder()
.setRank(index)
.setParam1(0)
.setParam2(getParam2(data.getScore()))
.setParam3(getParam3(data.getScore()));
CrossArenaEnemy mapEntry = RedisUtil.getInstence().getMapEntry(RedisKey.CROSS_YUXULUNDAO_ROBOT_INFO, String.valueOf(GlobleSystemLogic.getInstence().getCrossGroup()), data.getValue(), CrossArenaEnemy.class);
if(mapEntry==null){
if(Integer.parseInt(data.getValue()) >= 1000){
CSPlayer cPlayer = CrossServiceLogic.getPlayerByRedis(Integer.valueOf(data.getValue()));
if (cPlayer == null){
return;
}
String serverName = CrossDeathPathLogic.getInstance().getServerNameByDeathPath(mapEntry.getServerID());
everyRankInfo.setParam1(mapEntry.getTotalForce());
CommonProto.UserRank.Builder everyRank = CommonProto.UserRank.newBuilder()
.setUid(mapEntry.getEnemyId_UUid())
.setUserName(mapEntry.getRandomName())
.setLevel(mapEntry.getLevel()==0?100:mapEntry.getLevel())
.setUserSkin(80012)
.setRankInfo(everyRankInfo)
.setServerName(serverName)
.setSex(0).setCrossScore(mapEntry.getEnemyStatus());
builder.addRanks(everyRank);*/
}else{
CSPlayer cPlayer = CrossServiceLogic.getPlayerByRedis(Integer.valueOf(data.getValue()));
CommonProto.RankInfo.Builder everyRankInfo = CommonProto.RankInfo.newBuilder()
.setRank(index)
.setParam1(getParam1(data.getScore()))
@ -79,60 +44,5 @@ public class CrossYuXuLunDaoPersonRank extends AbstractRank{
builder.addRanks(everyRank);
}
}
public static CommonProto.UserRank.Builder getCrossOneUserRankyx(CSPlayer player, CommonProto.RankInfo.Builder everyRankInfo){
String serverName = CrossServiceLogic.simplifyServerName(player.getServerId());
return CommonProto.UserRank.newBuilder()
.setUid(player.getUserId())
.setLevel(player.getLevel())
.setUserName(player.getName())
.setRankInfo(everyRankInfo)
.setForce(player.getMaxFore())
.setSex(player.getSex())
.setHead(player.getHead())
.setGuildName("")
.setHeadFrame(player.getHeadFrame())
.setUserMount(player.getUserMount())
.setUserSkin(player.getSkin())
.setUserTitle(player.getUserTitle())
.setPracticeLevel(player.getPracticeLevel())
.setServerName(serverName)
.setCrossScore((int)everyRankInfo.getParam1());
}
@Override
public void getCrossMyInfo(User user, String rkey, PlayerInfoProto.RankResponse.Builder allUserResponse){
String crossGroup = String.valueOf(GlobleSystemLogic.getInstence().getCrossGroup());
int myRank= RedisUtil.getInstence().getZSetreverseRank(redisKey, crossGroup,Integer.toString(user.getId()),false).intValue();
Double zSetScore = RedisUtil.getInstence().getZSetScore(redisKey, crossGroup, Integer.toString(user.getId()),false);
int totalForce = HeroLogic.getInstance().calTeamTotalForce(user, GlobalsDef.WORLD_TEAM_ARENA_DEFENSE,false);
CommonProto.RankInfo towerRankInfo = CommonProto.RankInfo.newBuilder()
.setRank(myRank)
.setParam1(totalForce)
.setParam2(zSetScore.intValue())
.build();
allUserResponse.setMyRankInfo(towerRankInfo);
}
@Override
public PlayerInfoProto.RankResponse getCrossRank(int uid, String rkey, int page, int rankEndLine) throws Exception {
if(rankEndLine==-1){
rankEndLine = 100;
}
User user = UserManager.getUser(uid);
if (page == 0) {
page = 1;
}
int start = (page - 1) * rankEndLine, end = page * rankEndLine - 1;
int crossGroup = GlobleSystemLogic.getInstence().getCrossGroup();
Set<ZSetOperations.TypedTuple<String>> scores =
RedisUtil.getInstence().getZsetreverseRangeWithScores(redisKey, String.valueOf(crossGroup), start, end, false);
if(start % rankEndLine == 0){
start++;
}
PlayerInfoProto.RankResponse.Builder allUserResponse = getCrossAllUserResponse(scores,start);
//当前用户信息
getCrossMyInfo(user,rkey,allUserResponse);
return allUserResponse.build();
}
}

View File

@ -51,6 +51,7 @@ public class CrossYuXuLunDaoRank extends AbstractRank{
//decr
RedisUtil.getInstence().zsetAddOne(key,String.valueOf(uid), getScore(data));
}
@Override
protected void getCrossOptional(int index, ZSetOperations.TypedTuple<String> data, PlayerInfoProto.RankResponse.Builder builder) throws Exception {
if(Integer.parseInt(data.getValue())<1000){
@ -89,7 +90,7 @@ public class CrossYuXuLunDaoRank extends AbstractRank{
}
}
private static CommonProto.UserRank.Builder getCrossOneUserRankyx(CSPlayer player, CommonProto.RankInfo.Builder everyRankInfo){
public static CommonProto.UserRank.Builder getCrossOneUserRankyx(CSPlayer player, CommonProto.RankInfo.Builder everyRankInfo){
String serverName = CrossServiceLogic.simplifyServerName(player.getServerId());
return CommonProto.UserRank.newBuilder()
.setUid(player.getUserId())

View File

@ -9,6 +9,7 @@ import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.hero.HeroLogic;
import com.ljsd.jieling.logic.rank.RankContext;
import com.ljsd.jieling.logic.rank.RankEnum;
import com.ljsd.jieling.util.TaskKit;
import java.util.*;
import java.util.concurrent.ScheduledThreadPoolExecutor;
@ -24,18 +25,13 @@ public class ForceCurrRank extends AbstractRank implements IEventHandler{
public ForceCurrRank(int type, String redisKey) {
super(type, redisKey);
if(executor==null){
executor = new ScheduledThreadPoolExecutor(8);
}
executor.scheduleAtFixedRate(this::run,2,1, TimeUnit.SECONDS);
TaskKit.scheduleWithFixedDelay(this::run,2,1, TimeUnit.SECONDS);
Poster.getPoster().listenEvent(this, UserMainTeamForceEvent.class);
}
private static Queue<UserMainTeamForceEvent> infoQueue = new ArrayDeque<>();
private static ScheduledThreadPoolExecutor executor;
@Override
public long[] getDataByScore(Double score) {
return new long[]{score.intValue()};
@ -79,21 +75,23 @@ public class ForceCurrRank extends AbstractRank implements IEventHandler{
Set<Integer> changeId = new HashSet<>();
eventList.forEach(n->changeId.add(n.getUid()));
changeId.forEach(i-> {
for (Integer i : changeId) {
try {
User user = UserManager.getUser(i);
User user = UserManager.getUserNotCache(i);
if (user == null){
continue;
}
LOGGER.info("战力userId,{}",user.getId());
int force = HeroLogic.getInstance().calTeamTotalForce(user, 1, false);
LOGGER.info("战力大小,{}",force);
addRank(i,"",force);
} catch (Exception e) {
LOGGER.info("战力排行错误{}",e);
LOGGER.info("战力排行错误{}",e.getMessage());
e.printStackTrace();
}
});
}
}catch (Exception e){
LOGGER.info("战力排行报错{}",e);
LOGGER.info("战力排行报错{}",e.getMessage());
e.printStackTrace();
}
}

View File

@ -1,26 +1,14 @@
package com.ljsd.jieling.logic.rank.rankImpl;
import util.TimeUtils;
/**
* @author lvxinran
* @date 2020/6/10
* @discribe
*/
public class GoldRank extends AbstractRank {
public class GoldRank extends TowerRank {
public GoldRank(int type, String redisKey) {
super(type, redisKey);
}
@Override
public long[] getDataByScore(Double score) {
return new long[]{score.intValue()};
}
@Override
public double getScore(double... data) {
return data[0]+ TimeUtils.getDoubleTime();
}
}

View File

@ -11,7 +11,7 @@ public class GuildBossRank extends AbstractRank{
@Override
public long[] getDataByScore(Double score) {
return new long[]{score.intValue()};
return new long[]{score.longValue()};
}
@Override

View File

@ -11,6 +11,7 @@ import rpc.protocols.PlayerInfoProto;
import org.springframework.data.redis.core.ZSetOperations;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
/**
@ -20,14 +21,13 @@ import java.util.Set;
*/
public class GuildForceRank extends AbstractRank {
public GuildForceRank(int type, String redisKey) {
super(type, redisKey);
}
@Override
public long[] getDataByScore(Double score) {
return new long[]{score.intValue()};
return new long[]{score.longValue()};
}
@Override
@ -44,23 +44,16 @@ public class GuildForceRank extends AbstractRank {
.setParam2(getParam2(data.getScore()))
.setParam3(getParam3(data.getScore()));
LOGGER.info("获取公会战力排行榜信息===========公会id{}",data.getValue());
Set<Integer> chairMan = guildInfo.getMembers().get(GlobalsDef.CHAIRMAN);
int chairManId = chairMan.iterator().next();
User user = UserManager.getUser(chairManId);
CommonProto.UserRank.Builder everyRank = CommonProto.UserRank.newBuilder()
.setUid(user.getId())
.setLevel(user.getPlayerInfoManager().getLevel())
.setGuildName(guildInfo.getName())
.setRankInfo(everyRankInfo)
.setSex(user.getPlayerInfoManager().getSex())
.setHead(user.getPlayerInfoManager().getHead())
.setHeadFrame(user.getPlayerInfoManager().getHeadFrame())
.setUserMount(user.getPlayerInfoManager().getUserMount())
.setUserSkin(user.getPlayerInfoManager().getUserSkin())
.setUserTitle(user.getPlayerInfoManager().getUserTitle())
;
builder.addRanks(everyRank);
int chairManId = guildInfo.getMembers().get(GlobalsDef.CHAIRMAN).iterator().next();
User user = UserManager.getUserNotCache(chairManId);
if (user == null){
return;
}
CommonProto.UserRank.Builder oneUserRank = getOneUserRank(user, everyRankInfo);
oneUserRank.setGuildName(guildInfo.getName());
builder.addRanks(oneUserRank);
}
@Override
protected void getMyInfo(User user, String rkey, PlayerInfoProto.RankResponse.Builder allUserResponse){
int guildId = user.getPlayerInfoManager().getGuildId();
@ -77,7 +70,7 @@ public class GuildForceRank extends AbstractRank {
}
@Override
public CommonProto.UserRank.Builder getFirst(int activityId) throws Exception {
public CommonProto.UserRank.Builder getFirst(int activityId){
Set<ZSetOperations.TypedTuple<String>> rankByKey = getRankByKey(activityId==0?"":String.valueOf(activityId), 0, 0);
CommonProto.UserRank.Builder builder = CommonProto.UserRank.newBuilder();
if(rankByKey.size()!=1){
@ -89,32 +82,22 @@ public class GuildForceRank extends AbstractRank {
.setParam1(getParam1(data.getScore()))
.setParam2(getParam2(data.getScore()))
.setParam3(getParam3(data.getScore()));
int gid = Integer.parseInt(data.getValue());
Map<Integer, GuildInfo> map = GuilidManager.guildInfoMap;
if (map == null || map.isEmpty()){
// 获取公会信息
GuildInfo guildInfo = Optional.ofNullable(GuilidManager.guildInfoMap)
.map(v -> v.get(Integer.parseInt(data.getValue())))
.orElse(null);
if (guildInfo == null){
return builder;
}
GuildInfo guildInfo = map.get(gid);
if (guildInfo == null || guildInfo.getMembers() == null || guildInfo.getMembers().isEmpty()){
// 获取公会会长id
Integer chairManId = guildInfo.getMembers().get(GlobalsDef.CHAIRMAN).iterator().next();
User user = UserManager.getUserNotCache(chairManId);
if (user == null){
return builder;
}
Set<Integer> chairMan = guildInfo.getMembers().get(GlobalsDef.CHAIRMAN);
int chairManId = chairMan.iterator().next();
User user = UserManager.getUser(chairManId);
builder = CommonProto.UserRank.newBuilder()
.setUid(chairManId)
.setUserName(user.getPlayerInfoManager().getNickName())
.setHead(user.getPlayerInfoManager().getHead())
.setHeadFrame(user.getPlayerInfoManager().getHeadFrame())
.setLevel(user.getPlayerInfoManager().getLevel())
.setRankInfo(everyRankInfo)
.setForce(user.getPlayerInfoManager().getMaxForce())
.setSex(user.getPlayerInfoManager().getSex())
.setUserMount(user.getPlayerInfoManager().getUserMount())
.setUserSkin(user.getPlayerInfoManager().getUserSkin())
.setUserTitle(user.getPlayerInfoManager().getUserTitle())
.setGuildName(guildInfo.getName())
.setPracticeLevel(user.getHeroManager().getPracticeLevel());
return builder;
// 封装排行榜信息
CommonProto.UserRank.Builder oneUserRank = getOneUserRank(user, everyRankInfo);
oneUserRank.setGuildName(guildInfo.getName());
return oneUserRank;
}
}

View File

@ -10,7 +10,6 @@ import rpc.protocols.PlayerInfoProto;
*/
public class GuildRedPackageRank extends AbstractRank {
@Override
public PlayerInfoProto.RankResponse getRank(int uid, String rkey, int page, int rankEndLine) throws Exception {
rkey = String.valueOf(UserManager.getUser(uid).getPlayerInfoManager().getGuildId());

View File

@ -1,14 +1,9 @@
package com.ljsd.jieling.logic.rank.rankImpl;
import com.ljsd.jieling.core.GlobalsDef;
import com.ljsd.jieling.db.redis.RedisUtil;
import com.ljsd.jieling.logic.dao.GuilidManager;
import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.root.GuildInfo;
import com.ljsd.jieling.logic.dao.root.User;
import rpc.protocols.CommonProto;
import rpc.protocols.PlayerInfoProto;
import org.springframework.data.redis.core.ZSetOperations;
import rpc.protocols.CommonProto;
import java.util.Set;
@ -17,59 +12,30 @@ import java.util.Set;
* @date 2020/8/22
* @discribe
*/
public class GuildSheJiScoreRank extends AbstractRank {
public class GuildSheJiScoreRank extends GuildForceRank {
public GuildSheJiScoreRank(int type, String redisKey) {
super(type, redisKey);
}
@Override
public long[] getDataByScore(Double score) {
return new long[]{score.longValue()};
}
@Override
public double getScore(double... data) {
return data[0];
}
@Override
protected void getOptional(int index, ZSetOperations.TypedTuple<String> data, PlayerInfoProto.RankResponse.Builder builder) throws Exception{
GuildInfo guildInfo = GuilidManager.guildInfoMap.get(Integer.parseInt(data.getValue()));
public CommonProto.UserRank.Builder getFirst(int activityId){
Set<ZSetOperations.TypedTuple<String>> rankByKey = getRankByKey(activityId==0?"":String.valueOf(activityId), 0, 0);
CommonProto.UserRank.Builder builder = CommonProto.UserRank.newBuilder();
if(rankByKey.size()!=1){
return builder;
}
ZSetOperations.TypedTuple<String> data = rankByKey.iterator().next();
LOGGER.info("有问题的ArenaId{}",Integer.parseInt(data.getValue()));
User everyUser = UserManager.getUserNotCache(Integer.parseInt(data.getValue()));
if (everyUser == null){
return builder;
}
CommonProto.RankInfo.Builder everyRankInfo = CommonProto.RankInfo.newBuilder()
.setRank(index)
.setRank(1)
.setParam1(getParam1(data.getScore()))
.setParam2(getParam2(data.getScore()))
.setParam3(getParam3(data.getScore()));
Set<Integer> chairMan = guildInfo.getMembers().get(GlobalsDef.CHAIRMAN);
int chairManId = chairMan.iterator().next();
User user = UserManager.getUser(chairManId);
CommonProto.UserRank.Builder everyRank = CommonProto.UserRank.newBuilder()
.setUid(user.getId())
.setLevel(user.getPlayerInfoManager().getLevel())
.setGuildName(guildInfo.getName())
.setRankInfo(everyRankInfo)
.setSex(user.getPlayerInfoManager().getSex())
.setHead(user.getPlayerInfoManager().getHead())
.setHeadFrame(user.getPlayerInfoManager().getHeadFrame())
.setUserMount(user.getPlayerInfoManager().getUserMount())
.setUserSkin(user.getPlayerInfoManager().getUserSkin())
.setUserTitle(user.getPlayerInfoManager().getUserTitle())
.setPracticeLevel(user.getHeroManager().getPracticeLevel());
builder.addRanks(everyRank);
}
@Override
protected void getMyInfo(User user, String rkey, PlayerInfoProto.RankResponse.Builder allUserResponse){
int guildId = user.getPlayerInfoManager().getGuildId();
if(guildId==0){
return;
}
int myRank= RedisUtil.getInstence().getZSetreverseRank(redisKey,rkey,Integer.toString(guildId)).intValue();
Double zSetScore = RedisUtil.getInstence().getZSetScore(redisKey, rkey, Integer.toString(guildId));
CommonProto.RankInfo towerRankInfo = CommonProto.RankInfo.newBuilder()
.setRank(myRank)
.setParam1(getParam1(zSetScore))
.setParam2(getParam2(zSetScore)).build();
allUserResponse.setMyRankInfo(towerRankInfo);
builder = getOneUserRank(everyUser,everyRankInfo);
return builder;
}
}

View File

@ -23,42 +23,6 @@ public class MainLevelRank extends AbstractRank {
return new long[]{i%10_000_000};
}
@Override
protected PlayerInfoProto.RankResponse.Builder getAllUserResponse(Set<ZSetOperations.TypedTuple<String>> zsetreverseRangeWithScores, int start) throws Exception {
// PlayerInfoProto.RankResponse.Builder allUserResponse = super.getAllUserResponse(zsetreverseRangeWithScores, start);
// List<CommonProto.UserRank> ranksBuilderList = allUserResponse.getRanksList();
// if(ranksBuilderList.size()<2){
// return allUserResponse;
// }
// List<CommonProto.UserRank> builders = new ArrayList<>(ranksBuilderList);
// Collections.sort(builders,(o1, o2) -> {
// if(o1.getRankInfo().getParam1()==o2.getRankInfo().getParam1()){
// if(o1.getForce()>o2.getForce() &&o1.getRankInfo().getRank()>o2.getRankInfo().getRank()){
// CommonProto.UserRank rankInfo1 = o1 ;
// o1 = o2;
// o2 = rankInfo1;
// }
// }
// return o1.getRankInfo().getRank()-o2.getRankInfo().getRank();
// });
// List<CommonProto.UserRank> buildersCopy = new ArrayList<>(ranksBuilderList.size());
// for(CommonProto.UserRank userRank : builders){
// buildersCopy.add(userRank.toBuilder().setRankInfo(userRank.toBuilder().getRankInfo().toBuilder().setRank(start).build()).build());
// start++;
// }
// PlayerInfoProto.RankResponse.Builder response = PlayerInfoProto.RankResponse.newBuilder();
// response.setMyRankInfo(allUserResponse.getMyRankInfo()).addAllRanks(buildersCopy);
// return response;
return super.getAllUserResponse(zsetreverseRangeWithScores,start);
}
@Override
public Set<ZSetOperations.TypedTuple<String>> getRankByKey(String rkey,int start, int end) {
Set<ZSetOperations.TypedTuple<String>> rankByKey = super.getRankByKey(rkey,start, end);
return rankByKey;
}
@Override
public double getScore(double... data) {
return data[0]+ TimeUtils.getDoubleTime();

View File

@ -1,24 +1,13 @@
package com.ljsd.jieling.logic.rank.rankImpl;
import util.TimeUtils;
/**
* @author lvxinran
* @date 2019/11/29
* @discribe
*/
public class MonsterAttackRank extends AbstractRank{
public MonsterAttackRank(int type, String redisKey) {
public class MonsterAttackRank extends TowerRank{
public MonsterAttackRank(Integer type, String redisKey) {
super(type, redisKey);
}
@Override
public long[] getDataByScore(Double score) {
return new long[]{score.intValue()};
}
@Override
public double getScore(double... data) {
return data[0]+ TimeUtils.getDoubleTime();
}
}

View File

@ -8,9 +8,9 @@ import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.root.GuildInfo;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.rank.rankKey.RandomCardSpecialKey;
import org.springframework.data.redis.core.ZSetOperations;
import rpc.protocols.CommonProto;
import rpc.protocols.PlayerInfoProto;
import org.springframework.data.redis.core.ZSetOperations;
/**
* @author lvxinran
@ -28,7 +28,6 @@ public class RandomCardPerfectRank extends AbstractRank {
double[] doubles = new double[3];
System.arraycopy(data, 0, doubles, 0, data.length);
doubles[2] = uid;
// data[0]+"_"+data[1]+"_"+RedisUtil.getInstence().incrementZsetScore()
Gson gson = new Gson();
String heroKey = gson.toJson(new RandomCardSpecialKey(uid, Double.valueOf(data[1]).intValue(),Double.valueOf(data[2]).intValue(),RedisUtil.getInstence().incr("incr_Card", 1)));
RedisUtil.getInstence().zsetAddOne(key, heroKey, getScore(doubles));
@ -39,7 +38,10 @@ public class RandomCardPerfectRank extends AbstractRank {
Gson gson = new Gson();
String value = data.getValue();
RandomCardSpecialKey randomCardSpecialKey = gson.fromJson(value, RandomCardSpecialKey.class);
User everyUser = UserManager.getUser(randomCardSpecialKey.getUid(), true);
User everyUser = UserManager.getUserNotCache(randomCardSpecialKey.getUid());
if (everyUser == null){
return;
}
CommonProto.RankInfo everyRankInfo = CommonProto.RankInfo.newBuilder()
.setRank(index)
.setParam1(getParam1(data.getScore()))

View File

@ -1,24 +1,12 @@
package com.ljsd.jieling.logic.rank.rankImpl;
import util.TimeUtils;
/**
* @author lvxinran
* @date 2019/11/27
* @discribe
*/
public class RandomCardRank extends AbstractRank {
public class RandomCardRank extends TowerRank {
public RandomCardRank(int type, String redisKey) {
super(type, redisKey);
}
@Override
public long[] getDataByScore(Double score) {
return new long[]{score.intValue()};
}
@Override
public double getScore(double... data) {
return data[0]+ TimeUtils.getDoubleTime();
}
}

View File

@ -1,20 +1,9 @@
package com.ljsd.jieling.logic.rank.rankImpl;
import util.TimeUtils;
public class ShanHeSheJiTuChapterRank extends AbstractRank{
public class ShanHeSheJiTuChapterRank extends TowerRank{
public ShanHeSheJiTuChapterRank(int type, String redisKey) {
super(type, redisKey);
}
@Override
public long[] getDataByScore(Double score) {
return new long[]{score.longValue()};
}
@Override
public double getScore(double... data) {
return data[0]+ TimeUtils.getDoubleTime();
}
}

View File

@ -1,20 +1,8 @@
package com.ljsd.jieling.logic.rank.rankImpl;
import util.TimeUtils;
public class ShanHeSheJiTuStarRank extends AbstractRank{
public class ShanHeSheJiTuStarRank extends TowerRank{
public ShanHeSheJiTuStarRank(int type, String redisKey) {
super(type, redisKey);
}
@Override
public long[] getDataByScore(Double score) {
return new long[]{score.longValue()};
}
@Override
public double getScore(double... data) {
return data[0]+ TimeUtils.getDoubleTime();
}
}

View File

@ -1,25 +1,13 @@
package com.ljsd.jieling.logic.rank.rankImpl;
import util.TimeUtils;
/**
* @author lvxinran
* @date 2020/8/14
* @discribe
*/
public class SituationRank extends AbstractRank {
public class SituationRank extends TowerRank {
public SituationRank(int type, String redisKey) {
super(type, redisKey);
}
@Override
public long[] getDataByScore(Double score) {
return new long[]{score.longValue()};
}
@Override
public double getScore(double... data) {
return data[0]+ TimeUtils.getDoubleTime();
}
}

View File

@ -1,25 +1,13 @@
package com.ljsd.jieling.logic.rank.rankImpl;
import util.TimeUtils;
/**
* @author lvxinran
* @date 2021/6/5
* @discribe
*/
public class TaSuiLingXiaoRank extends AbstractRank {
public class TaSuiLingXiaoRank extends TowerRank {
public TaSuiLingXiaoRank(int type, String redisKey) {
super(type, redisKey);
}
@Override
public long[] getDataByScore(Double score) {
return new long[]{score.longValue()};
}
@Override
public double getScore(double... data) {
return data[0]+ TimeUtils.getDoubleTime();
}
}

View File

@ -1,6 +1,5 @@
package com.ljsd.jieling.logic.rank.rankImpl;
import rpc.protocols.PlayerInfoProto;
import config.SSpecialConfig;
import util.TimeUtils;
@ -13,15 +12,6 @@ public class TowerRank extends AbstractRank {
public TowerRank(Integer type,String redisKey){
super(type,redisKey);
}
// @Override
// public long[] getDataByScore(Double score) {
// long[] array = new long [2];
// int scoreInt = score.intValue();
// array[0] = scoreInt/3601;
// array[1] =3600-scoreInt%3601;
// return array;
// }
@Override
public long[] getDataByScore(Double score) {
@ -30,8 +20,6 @@ public class TowerRank extends AbstractRank {
@Override
public double getScore(double... data) {
// double doubleTime = TimeUtils.getDoubleTime();
// return data[1]>3600?data[0]*3601+doubleTime:data[0]*3601+3600-data[1]+doubleTime;
return data[0]+TimeUtils.getDoubleTime();
}
}

View File

@ -165,8 +165,7 @@ public abstract class TaskKit {
*/
public static void reset() {
depose();
taskScheduler = new ScheduledThreadPoolExecutor(3);
LOGGER.info("定时器线程启动,线程数量:{}",3);
taskScheduler = new ScheduledThreadPoolExecutor(getBestPoolSize());
}
/**
@ -174,16 +173,19 @@ public abstract class TaskKit {
* 线 = CPU / (1 - )0.9
*/
private static int getBestPoolSize() {
int num = 0;
try {
// JVM可用处理器的个数
final int cores = Runtime.getRuntime().availableProcessors();
// 最佳的线程数 = CPU可用核心数 / (1 - 阻塞系数)
// TODO 阻塞系数是不是需要有个setter方法能让使用者自由设置呢
return (int)(cores / (1 - 0.9));
num = (int)(cores / (1 - 0.9));
}
catch (Throwable e) {
// 异常发生时姑且返回10个任务线程池
return 5;
num = 5;
}
LOGGER.info("定时器线程启动,线程数量:{}",num);
return num;
}
}