diff --git a/gamecommon/src/main/java/util/TimeUtils.java b/gamecommon/src/main/java/util/TimeUtils.java index f9a71bfa0..cb6c6b9e1 100644 --- a/gamecommon/src/main/java/util/TimeUtils.java +++ b/gamecommon/src/main/java/util/TimeUtils.java @@ -1272,8 +1272,7 @@ public class TimeUtils { public static int getHourOfDay() { Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); - int hour = calendar.get(Calendar.HOUR_OF_DAY); - return hour; + return calendar.get(Calendar.HOUR_OF_DAY); } /** * 获得当前时间是今天的几点(整点) @@ -1283,8 +1282,7 @@ public class TimeUtils { public static int getMiunte() { Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); - int minute = calendar.get(Calendar.MINUTE); - return minute; + return calendar.get(Calendar.MINUTE); } /** * 获得当前时间是今天的几点(整点) @@ -1294,8 +1292,7 @@ public class TimeUtils { public static int getMiunte(long time) { Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(time); - int minute = calendar.get(Calendar.MINUTE); - return minute; + return calendar.get(Calendar.MINUTE); } // /** diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/crossService/CrossServiceLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/crossService/CrossServiceLogic.java index 95548f324..de3e4113d 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/crossService/CrossServiceLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/crossService/CrossServiceLogic.java @@ -90,7 +90,6 @@ public class CrossServiceLogic { * @throws Exception */ public void dispose(User user) throws Exception{ - ArenaOfUser query = query(user.getId()); ArenaOfUser arenaOfUser = buildArenaOfUser(user); countForce(arenaOfUser); @@ -101,6 +100,7 @@ public class CrossServiceLogic { update(arenaOfUser); } } + public ArenaOfUser buildArenaOfUser(User user){ ArenaOfUser arenaOfUser = new ArenaOfUser(); arenaOfUser.setId(user.getId()); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/ArenaLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/ArenaLogic.java index 89cefcbcc..e38baeaef 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/ArenaLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/ArenaLogic.java @@ -581,7 +581,7 @@ public class ArenaLogic { for(ZSetOperations.TypedTuple item : arenaRankInfo){ String value = item.getValue(); int uid = Integer.parseInt(value); - User user = UserManager.getUser(uid, true); + User user = UserManager.getUserNotCache(uid); if (null == user) { continue; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserManager.java index 43c1b76ad..522485bfe 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserManager.java @@ -203,6 +203,21 @@ public class UserManager { } return null; } + + public static User getUserNotCache(int uid) { + // User user = userMap.get(uid); + try { + User user = userMap.get(uid); + if (user != null) { + return user; + } + return MongoUtil.getInstence().getMyMongoTemplate().findById(User.getCollectionName(), uid, User.class); + }catch (Exception e){ + LOGGER.error("UserManager::getUser:{} null, exception:{}",uid,e.getMessage()); + } + return null; + } + public static void removeUser(int uid) { userMap.remove(uid); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/family/CrossDeathPathLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/family/CrossDeathPathLogic.java index 0d2b9912c..79a018474 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/family/CrossDeathPathLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/family/CrossDeathPathLogic.java @@ -124,7 +124,10 @@ public class CrossDeathPathLogic { // 结算标识设置 redisUtil.hset(RedisKey.DEATH_PATH_EVERY_OVER_HASH,String.valueOf(GameApplication.serverId),1); - User user = UserManager.getUser(uid); + User user = UserManager.getUserNotCache(uid); + if (user == null){ + return; + } CrossServiceLogic.getInstance().dispose(user); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java index b2692e9f5..1c3b30bf7 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java @@ -1193,11 +1193,6 @@ public class HeroLogic{ RedisUtil.getInstence().zsetAddOne(key, String.valueOf(user.getId()), teamForce); } - if (teamId == GlobalsDef.FORMATION_NORMAL) { - Poster.getPoster().dispatchEvent(new UserMainTeamForceEvent(iSession.getUid())); - CrossServiceLogic.getInstance().dispose(user); - } - // 跨服 更新编队信息 if (teamId == GlobalsDef.WORLD_TEAM_ARENA_DEFENSE) { CrossServiceLogic.getInstance().dispose(user); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/item/ItemLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/item/ItemLogic.java index 60c64935a..e6924a311 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/item/ItemLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/item/ItemLogic.java @@ -1014,10 +1014,10 @@ public class ItemLogic { */ public void functionEndClearItem(int uid,int type,int reason){ try { - User user = UserManager.getUser(uid); + User user = UserManager.getUserNotCache(uid); // 根据功能类型获取需要清理的道具列表 List itemList = SItem.getItemMapByRecycle().get(type); - if (itemList == null || itemList.isEmpty()){ + if (user == null || itemList == null || itemList.isEmpty()){ return; } for (SItem item:itemList){ diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mail/MailLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mail/MailLogic.java index e63e1aff5..6a7fb146c 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mail/MailLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mail/MailLogic.java @@ -344,7 +344,7 @@ public class MailLogic { } //发送邮件 public void sendMail(int uid, String title, String content, String reward, int sendTime, int mailEffectiveTime){ - User user = UserManager.getUserInMem(uid); + User user = UserManager.getUserNotCache(uid); if (user != null){ Mail mail = new Mail(uid,title,content,reward,sendTime, mailEffectiveTime,"system",Global.MAIL_TYPE_SYS); user.getMailManager().addMail(mail); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/AbstractRank.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/AbstractRank.java index 9d650df07..e807582ba 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/AbstractRank.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/AbstractRank.java @@ -95,7 +95,7 @@ public abstract class AbstractRank implements IRank { */ public void crossUserCache(int uid){ try { - User user = UserManager.getUser(uid); + User user = UserManager.getUserNotCache(uid); if (user == null){ return; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/CrossRank.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/CrossRank.java index 34f9798f0..eb11b2187 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/CrossRank.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/CrossRank.java @@ -1,6 +1,7 @@ package com.ljsd.jieling.logic.rank.rankImpl; import com.ljsd.jieling.db.redis.RedisUtil; +import util.TimeUtils; /** * @author hj @@ -24,7 +25,7 @@ public class CrossRank extends AbstractRank { @Override public double getScore(double... data) { - return data[0]; + return data[0]+ TimeUtils.getDoubleTime(); } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/sevenworld/SevenWorldLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/sevenworld/SevenWorldLogic.java index d848e6105..25875e4f8 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/sevenworld/SevenWorldLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/sevenworld/SevenWorldLogic.java @@ -11,6 +11,7 @@ import com.ljsd.jieling.exception.ErrorCodeException; import com.ljsd.jieling.globals.BIReason; import com.ljsd.jieling.globals.Global; import com.ljsd.jieling.logic.GlobleSystemLogic; +import com.ljsd.jieling.logic.activity.crossService.CrossServiceLogic; import com.ljsd.jieling.logic.activity.event.Poster; import com.ljsd.jieling.logic.activity.event.SevenWorldIntegralEvent; import com.ljsd.jieling.logic.dao.Hero; @@ -269,6 +270,8 @@ public class SevenWorldLogic { // 层数 user.getPlayerInfoManager().putSevenWorldOpenTier(week,tierId); } + // 跨服数据保存 + CrossServiceLogic.getInstance().dispose(user); } // 战斗数据 builder.setResult(fightResult.getResult()); @@ -430,39 +433,38 @@ public class SevenWorldLogic { * 结束发送奖励 */ public void sendRankReward(){ - if (!isTime()){ - return; - } - // 排行榜 - String crossRedisKey = RankContext.getRankEnum(RankEnum.CROSS_SEVEN_WORLD_RANK.getType()).getCrossRedisKey(); - Set> range = RedisUtil.getInstence().getZsetreverseRangeWithScores(crossRedisKey,"",0,-1,false); - // 排名 - int rank = 1; - for (ZSetOperations.TypedTuple tuple : range) { - User user = UserManager.getUserInMem(Integer.parseInt(tuple.getValue())); - if (user == null){ - return; - } - String title = SErrorCodeEerverConfig.getI18NMessage("Qijie_mail_title"); - String content = SErrorCodeEerverConfig.getI18NMessageNeedConvert("Qijie_mail_txt", new Object[]{rank},new int[0],"#"); - // 排行奖励 - Map config = STableManager.getConfig(SQijieRanking.class); - for (SQijieRanking value : config.values()) { - // 排名区间 - if (rank >= value.getMinRank() && rank <= value.getMaxRank()){ - // 发邮件奖励 - String reward = StringUtil.parseArrayToString(value.getRankingReward()); - MailLogic.getInstance().sendMail(user.getId(),title,content,reward,TimeUtils.nowInt(), Global.MAIL_EFFECTIVE_TIME); - // 清除道具 - ItemLogic.getInstance().functionEndClearItem(user.getId(),FunctionIdEnum.CrossSevenWorld.getFunctionType(),BIReason.SEVEN_WORLD_FUNCTION_END); - LOGGER.info("七界结束,发送邮件并删除道具,uid:{},奖励:{},",user.getId(),reward); - break; + if (isTime()){ + // 排行榜 + String crossRedisKey = RankContext.getRankEnum(RankEnum.CROSS_SEVEN_WORLD_RANK.getType()).getCrossRedisKey(); + Set> range = RedisUtil.getInstence().getZsetreverseRangeWithScores(crossRedisKey,"",0,-1,false); + // 排名 + int rank = 1; + for (ZSetOperations.TypedTuple tuple : range) { + User user = UserManager.getUserNotCache(Integer.parseInt(tuple.getValue())); + if (user == null){ + return; } + String title = SErrorCodeEerverConfig.getI18NMessage("Qijie_mail_title"); + String content = SErrorCodeEerverConfig.getI18NMessageNeedConvert("Qijie_mail_txt", new Object[]{rank},new int[0],"#"); + // 排行奖励 + Map config = STableManager.getConfig(SQijieRanking.class); + for (SQijieRanking value : config.values()) { + // 排名区间 + if (rank >= value.getMinRank() && rank <= value.getMaxRank()){ + // 发邮件奖励 + String reward = StringUtil.parseArrayToString(value.getRankingReward()); + MailLogic.getInstance().sendMail(user.getId(),title,content,reward,TimeUtils.nowInt(), Global.MAIL_EFFECTIVE_TIME); + // 清除道具 + ItemLogic.getInstance().functionEndClearItem(user.getId(),FunctionIdEnum.CrossSevenWorld.getFunctionType(),BIReason.SEVEN_WORLD_FUNCTION_END); + LOGGER.info("七界结束,发送邮件并删除道具,uid:{},奖励:{},",user.getId(),reward); + break; + } + } + rank++; } - rank++; + SevenWorldLogic.setEnd(true); + System.out.print("七界试炼活动结束,发奖完成...\n"); } - SevenWorldLogic.setEnd(true); - System.out.print("七界试炼活动结束,发奖完成...\n"); } /** @@ -473,7 +475,9 @@ public class SevenWorldLogic { int week = TimeUtils.getDayOfWeek(); int hour = TimeUtils.getHourOfDay(); int minute = TimeUtils.getMiunte(); - return week == 7 && hour == 23 && minute == 30; + boolean b = week == 7 && hour == 23 && minute == 30; + LOGGER.info("当前时间:week:{},hour:{},minute:{},result:{}",week,hour,minute,b); + return b; } }