From 90af84ac12b5633399471af69d4c6d5ac96c2a0a Mon Sep 17 00:00:00 2001 From: lvxinran Date: Wed, 23 Jun 2021 16:31:11 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=91=E9=80=81=E5=88=86=E7=BB=84=E9=82=AE?= =?UTF-8?q?=E4=BB=B6=EF=BC=8C=E5=88=A0=E9=99=A4=E6=97=A0=E7=94=A8=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ljsd/jieling/db/redis/RedisKey.java | 6 +- .../com/ljsd/jieling/db/redis/RedisUtil.java | 3 +- .../jieling/handler/BloodRankHandler.java | 20 ------- .../handler/room/RoomMatchRequestHandler.java | 2 - .../ljsd/jieling/logic/GlobleSystemLogic.java | 5 +- .../ljsd/jieling/logic/blood/BloodLogic.java | 59 ------------------- .../ljsd/jieling/logic/dao/ServerConfig.java | 11 ++++ .../ljsd/jieling/logic/mail/MailLogic.java | 33 ++++++++++- .../thread/task/FetchBloodyEndDataThread.java | 49 --------------- 9 files changed, 48 insertions(+), 140 deletions(-) delete mode 100644 serverlogic/src/main/java/com/ljsd/jieling/handler/BloodRankHandler.java delete mode 100644 serverlogic/src/main/java/com/ljsd/jieling/thread/task/FetchBloodyEndDataThread.java diff --git a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java index eb0a9db36..44aaf8b8f 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java @@ -196,14 +196,10 @@ public class RedisKey { //问卷调查 public static final String QUESTION_FROMBACK = "QUESTION_FROMBACK"; - public static final String BLOODY_RANK = "BLOODY_RANK"; public static final String MATCH_UID_KEY = "MATCH_UID_KEY"; - public static final String BLOODY_TEAM = "BLOODY_TEAM"; - public static final String BLOODY_PERSON_BATTLE_INFO = "BLOODY_PERSON_BATTLE_INFO"; public static final String MATCH_SERVER_INFO = "MATCH_SERVER_INFO"; public static final String LOGIC_SERVER_INFO = "LOGIC_SERVER_INFO"; - public static final String BLOODY_SERVER_INFO = "BLOODY_SERVER_INFO"; public static final String AUTOOPENTIME = "AUTOOPENTIME"; @@ -320,6 +316,8 @@ public class RedisKey { public static final String SERVER_SPLIT_INFO = "SERVER_SPLIT_INFO"; + public static final String SERVER_SPLIT_MAIL_INFO = "SERVER_SPLIT_MAIL_INFO"; + public static Set familyKey = new HashSet<>(); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisUtil.java index a332c39ff..6db326c14 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisUtil.java @@ -1249,8 +1249,7 @@ public class RedisUtil { public String getKey(String type,String key){ - if(RedisKey.BLOODY_RANK.equals(type) || RedisKey.BLOODY_TEAM.equals(type) || RedisKey.PLAYER_INFO_CACHE.equals(type) || RedisKey.BLOODY_PERSON_BATTLE_INFO.equals(type) - ||RedisKey.FAMILY_INFO.equals(type)||RedisKey.PIDGIDTEMP.equals(type)||RedisKey.SERVER_WORLDLEVE_INFO.equals(type)|| RedisKey.GUILD_INFO_CACHE.equals(type)||RedisKey.SERVER_SPLIT_INFO.equals(type)) { + if(RedisKey.PLAYER_INFO_CACHE.equals(type) ||RedisKey.FAMILY_INFO.equals(type)||RedisKey.PIDGIDTEMP.equals(type)||RedisKey.SERVER_WORLDLEVE_INFO.equals(type)|| RedisKey.GUILD_INFO_CACHE.equals(type)||RedisKey.SERVER_SPLIT_INFO.equals(type)||RedisKey.SERVER_SPLIT_MAIL_INFO.equals(type)) { return type + RedisKey.Delimiter_colon + key; } // if(RedisKey.familyKey.contains(type)){ diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/BloodRankHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/BloodRankHandler.java deleted file mode 100644 index c67f2b163..000000000 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/BloodRankHandler.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.ljsd.jieling.handler; - -import com.ljsd.jieling.logic.blood.BloodLogic; -import com.ljsd.jieling.netty.cocdex.PacketNetData; -import com.ljsd.jieling.network.session.ISession; -import rpc.protocols.MessageTypeProto; -import org.springframework.stereotype.Component; - -@Component -public class BloodRankHandler extends BaseHandler{ - @Override - public MessageTypeProto.MessageType getMessageCode() { - return MessageTypeProto.MessageType.BLOOD_RANK_REQUEST; - } - - @Override - public void process(ISession iSession, PacketNetData netData) throws Exception { - BloodLogic.getInstance().getBloodRank(iSession, MessageTypeProto.MessageType.BLOOD_RANK_RESPONSE); - } -} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/room/RoomMatchRequestHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/room/RoomMatchRequestHandler.java index 80bf156f5..8c83f30fb 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/room/RoomMatchRequestHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/room/RoomMatchRequestHandler.java @@ -129,8 +129,6 @@ public class RoomMatchRequestHandler extends BaseHandler{ maxHp += familyHeroInfo.getAttribute().get(HeroAttributeEnum.Hp.getPropertyId()); } userBloodySnpInfo.setMaxHp(maxHp); - String key = RedisUtil.getInstence().getKey(RedisKey.BLOODY_TEAM, Integer.toString(mine.getId())); - RedisUtil.getInstence().set(key,gson.toJson(userBloodySnpInfo)); } private boolean isEnter(){ diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobleSystemLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobleSystemLogic.java index 7786b1a7b..c38cbd668 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobleSystemLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobleSystemLogic.java @@ -257,13 +257,12 @@ public class GlobleSystemLogic implements IEventHandler { index++; } redisUtil.putMapEntrys(RedisKey.SERVER_SPLIT_INFO,"",split); - //todo 发分组邮件 -// sendMail(split.keySet()); + //发分组邮件 + split.keySet().forEach(server->redisUtil.putMapEntry(RedisKey.SERVER_SPLIT_MAIL_INFO,"",server,0)); } LOGGER.info("Global分组结束"); // splitInfo = RedisUtil.getInstence().getMapValues(RedisKey.SERVER_SPLIT_INFO,"",String.class,Integer.class); } - //获取当前区服的跨服区组 -1为未在分组内 public int getCrossGroup(){ if(crossGroup==0){ diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/blood/BloodLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/blood/BloodLogic.java index 9892d4eb7..78602b79f 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/blood/BloodLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/blood/BloodLogic.java @@ -143,65 +143,6 @@ public class BloodLogic { - /** - * 获取血战排行榜 - * @param session - * @param messageType - */ - public void getBloodRank(ISession session, MessageTypeProto.MessageType messageType){ - Set> zsetreverseRangeWithScores = RedisUtil.getInstence().getZsetreverseRangeWithScores(RedisKey.BLOODY_RANK, "1", 0, 100); - Map playerInfoCacheMap = RedisUtil.getInstence().getMapValues(RedisKey.PLAYER_INFO_CACHE, "", Integer.class, PlayerInfoCache.class); - int rank = 0; - RoomProto.BloodRankResponse.Builder response = RoomProto.BloodRankResponse.newBuilder(); - for(ZSetOperations.TypedTuple blood:zsetreverseRangeWithScores){ - rank++; - PlayerInfoCache cache = playerInfoCacheMap.get(Integer.parseInt(blood.getValue())); - CommonProto.BloodPersonInfo info = CommonProto.BloodPersonInfo.newBuilder() - .setHead(cache.getHead()) - .setId(Integer.parseInt(blood.getValue())) - .setHeadFrame(cache.getHeadFrame()) - .setLevel(cache.getLevel()) - .setServerId(cache.getServerId()) - .setScore(blood.getScore().intValue()) - .setRank(rank) - .setName(cache.getName()) - .build(); - response.addInfos(info); - } - int myRank= RedisUtil.getInstence().getZSetreverseRank(RedisKey.BLOODY_RANK,"1",Integer.toString(session.getUid())).intValue(); - response.setMyRank(myRank); - MessageUtil.sendMessage(session,1,messageType.getNumber(),response.build(),true); - } - public void bloodSeasonReward() throws Exception { - Set> zsetreverseRangeWithScores = RedisUtil.getInstence().getZsetreverseRangeWithScores(RedisKey.BLOODY_RANK, "1", 0, RedisUtil.getInstence().getZsetSize(RedisKey.getKey(RedisKey.BLOODY_RANK, "1", true))); - Map players = RedisUtil.getInstence().getMapValues(RedisKey.PLAYER_INFO_CACHE, "", Integer.class, PlayerInfoCache.class); - Map sBloodyRankConfigMap = STableManager.getConfig(SBloodyRankConfig.class); - int floor = 0 ; - for(ZSetOperations.TypedTuple rank:zsetreverseRangeWithScores){ - //是否为本服玩家 - if(players.get(Integer.parseInt(rank.getValue())).getServerId()!= GameApplication.serverId){ - continue; - } - int[][] reward; - for(Map.Entry entry:sBloodyRankConfigMap.entrySet()){ - SBloodyRankConfig value = entry.getValue(); - if(rank.getScore()>value.getScore()){ - floor = entry.getKey(); - }else{ - break; - } - } - if(floor==0){ - continue; - }else{ - reward = sBloodyRankConfigMap.get(floor).getReward(); - MailLogic.getInstance().sendMail(Integer.parseInt(rank.getValue()),"血战排行奖励","恭喜",StringUtil.parseArrayToString(reward), (int)(TimeUtils.now()/1000),10); - } - } - - - } - //获取血战积分以及领取状态信息 public void getBloodySsoreInfo(ISession session) throws Exception { diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/ServerConfig.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/ServerConfig.java index b928cc989..a09b6979a 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/ServerConfig.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/ServerConfig.java @@ -18,6 +18,9 @@ public class ServerConfig extends MongoBase { @Field(value = "n_world_level") private int new_worldLevel;// 新的世界等级计算 等级前50的玩家 + @Field(value = "groupCount") + private int groupCount; + @Transient private long cacheOpenTime; @@ -44,4 +47,12 @@ public class ServerConfig extends MongoBase { public void setCacheOpenTime(long cacheOpenTime) { this.cacheOpenTime = cacheOpenTime; } + + public int getGroupCount() { + return groupCount; + } + + public void setGroupCount(int groupCount) { + this.groupCount = groupCount; + } } 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 75cf4e436..703b6f3da 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 @@ -1,5 +1,6 @@ package com.ljsd.jieling.logic.mail; +import com.ljsd.GameApplication; import com.ljsd.jieling.core.GlobalsDef; import com.ljsd.jieling.db.mongo.MongoUtil; import com.ljsd.jieling.db.redis.RedisKey; @@ -16,6 +17,7 @@ import com.ljsd.jieling.logic.dao.root.MailingSystem; import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.dao.UserManager; import com.ljsd.jieling.network.session.ISession; +import config.SErrorCodeEerverConfig; import org.luaj.vm2.ast.Str; import rpc.protocols.CommonProto; import rpc.protocols.MessageTypeProto; @@ -288,7 +290,8 @@ public class MailLogic { AutoIncrementManager autoIncrementManager = mailingSystem.getcAutoIncrementManager(); autoIncrementManager.addAutoIncrement(new AutoIncrement(name)); SystemMailManager systemMailManager = mailingSystem.getSystemMailManager(); - int id = getSystemMailId(autoIncrementManager,name); +// getSystemMailId(autoIncrementManager,name); + int id = TimeUtils.nowInt(); systemMailManager.addSystemMail(new SystemMail(id,title,userList,content,sendTime,reward,effectiveTime,sendName,registerEndTime,version)); MongoUtil.getInstence().lastUpdate(); } @@ -366,6 +369,12 @@ public class MailLogic { } redisUtil.del(RedisKey.getKey(RedisKey.MAIL_RED_POINT,"",false)); } + //检测跨服分组邮件 + Integer split = redisUtil.getMapValue(RedisKey.SERVER_SPLIT_MAIL_INFO, "", String.valueOf(GameApplication.serverId), Integer.class); + if(split!=null){ + sendServerSplitMail(); + redisUtil.removeMapEntrys(RedisKey.SERVER_SPLIT_MAIL_INFO, "", String.valueOf(GameApplication.serverId)); + } //检测个人邮件 Map mails =redisUtil.getMapValues(RedisKey.READY_TO_USER_MAIL, "", String.class, MailCache.class); if (mails.size()<1){ @@ -376,12 +385,34 @@ public class MailLogic { } redisUtil.del(RedisKey.getKey(RedisKey.READY_TO_USER_MAIL,"",false)); MongoUtil.getLjsdMongoTemplate().lastUpdate(); + }catch(Exception e){ LOGGER.info("发送邮件异常{}",e); e.printStackTrace(); } } + public void sendServerSplitMail() throws Exception { + int nowTime = TimeUtils.nowInt(); + String title ; + String content ; + //todo 发邮件 + + ServerConfig serverConfigTmp = MongoUtil.getInstence().getMyMongoTemplate().findById(1, ServerConfig.class); + if(serverConfigTmp.getGroupCount()==0){ + //首次 + title = SErrorCodeEerverConfig.getI18NMessage("mserverarena_join_group_mail_title"); + content = SErrorCodeEerverConfig.getI18NMessage("mserverarena_join_group_mail_content"); + }else{ + title = SErrorCodeEerverConfig.getI18NMessage("mserverarena_change_group_mail_title"); + content = SErrorCodeEerverConfig.getI18NMessage("mserverarena_change_group_mail_content"); + } + serverConfigTmp.setGroupCount(serverConfigTmp.getGroupCount()+1); + MongoUtil.getInstence().getMyMongoTemplate().saveWithoutMongoRoot(serverConfigTmp); + + MailLogic.getInstance().sendSystemMail(title,new ArrayList<>(),content,nowTime,"",30*24*60*60,"system",TimeUtils.now(),"0"); + } + /** *手动删除邮件 */ diff --git a/serverlogic/src/main/java/com/ljsd/jieling/thread/task/FetchBloodyEndDataThread.java b/serverlogic/src/main/java/com/ljsd/jieling/thread/task/FetchBloodyEndDataThread.java deleted file mode 100644 index 81b79c363..000000000 --- a/serverlogic/src/main/java/com/ljsd/jieling/thread/task/FetchBloodyEndDataThread.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.ljsd.jieling.thread.task; - -import com.ljsd.GameApplication; -import com.ljsd.jieling.bloody.SortDataBean; -import com.ljsd.jieling.core.HandlerLogicThread; -import com.ljsd.jieling.db.mongo.MongoUtil; -import com.ljsd.jieling.db.redis.RedisKey; -import com.ljsd.jieling.db.redis.RedisUtil; -import com.ljsd.jieling.logic.OnlineUserManager; -import com.ljsd.jieling.logic.blood.BloodLogic; -import com.ljsd.jieling.logic.dao.UserManager; -import com.ljsd.jieling.logic.dao.root.User; -import com.ljsd.jieling.network.server.ProtocolsManager; -import com.ljsd.jieling.util.AyncWorkerRunnable; -import com.ljsd.jieling.util.AyyncWorker; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.Map; - -public class FetchBloodyEndDataThread extends Thread{ - private static final Logger LOGGER = LoggerFactory.getLogger(FetchBloodyEndDataThread.class); - - public FetchBloodyEndDataThread(){ - this.setName("FetchBloodyEndDataThread"); - } - - - @Override - public void run() { - try { - Map mapValues = RedisUtil.getInstence().getMapValues(RedisKey.BLOODY_PERSON_BATTLE_INFO, Integer.toString(GameApplication.serverId), Integer.class, SortDataBean.class); - for(SortDataBean sortDataBean : mapValues.values()){ - int uid = sortDataBean.getUid(); - User user = UserManager.getUser(uid); - AyyncWorker ayyncWorker = new AyyncWorker(user, true,(user1) -> - BloodLogic.getInstance().calBloodyMissionInfo(user1,sortDataBean) - ); - ProtocolsManager.getInstance().updateAyncWorker(ayyncWorker); - RedisUtil.getInstence().removeMapEntrys(RedisKey.BLOODY_PERSON_BATTLE_INFO, Integer.toString(GameApplication.serverId),Integer.toString(uid)); - - } - }catch (Exception e){ - LOGGER.error("e->",e); - } - - } - -}