diff --git a/fightmanager/src/main/java/com/ljsd/fight/LingMaiSecretArea.java b/fightmanager/src/main/java/com/ljsd/fight/LingMaiSecretArea.java index 2e766023f..4d1175af3 100644 --- a/fightmanager/src/main/java/com/ljsd/fight/LingMaiSecretArea.java +++ b/fightmanager/src/main/java/com/ljsd/fight/LingMaiSecretArea.java @@ -1,15 +1,20 @@ package com.ljsd.fight; public class LingMaiSecretArea { - private int id; - private int uid; - private String serverName; - private String name; - private long getAwardTimeOrOccupyTime;//得到奖励的时间(10分钟倒计时/被打下去或者打别人 时候有修改)或者占领的灵脉的时间 - private long beginOccupyTime;//占领的时间点 占领第一次的时候、打下别人的时候、被别人打下的时候 - //当日总积分 = score1+基础收益*occupyTime - private int score1;//当前结算分 被人打下去后 这个分才会有值 - private int occupyTime;//占领的时长 以分钟为单位 + private int id; + private int uid; + private String serverName; + private int occupyTime;//占领的时长 以分钟为单位 + + // 下面这四个参数用不到了 + @Deprecated + private String name; + @Deprecated + private long getAwardTimeOrOccupyTime;//得到奖励的时间(10分钟倒计时/被打下去或者打别人 时候有修改)或者占领的灵脉的时间 + @Deprecated + private long beginOccupyTime;//占领的时间点 占领第一次的时候、打下别人的时候、被别人打下的时候 + @Deprecated + private int score1;//当前结算分 被人打下去后 这个分才会有值 public int getId() { return id; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/crossServer/CrossLingmaiSecretAreaBattleHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/crossServer/CrossLingmaiSecretAreaBattleHandler.java index a8ce604ec..e025dfb7a 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/crossServer/CrossLingmaiSecretAreaBattleHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/crossServer/CrossLingmaiSecretAreaBattleHandler.java @@ -27,11 +27,7 @@ import com.ljsd.jieling.logic.fight.PVEFightEvent; import com.ljsd.jieling.logic.fight.result.FightResult; import com.ljsd.jieling.logic.hero.HeroLogic; import com.ljsd.jieling.logic.player.PlayerLogic; -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.network.session.ISession; -import com.ljsd.jieling.thrift.idl.CrossArenaManager; import com.ljsd.jieling.util.MessageUtil; import config.SArenaSetting; import config.SLodeConfig; @@ -74,7 +70,8 @@ public class CrossLingmaiSecretAreaBattleHandler extends BaseHandler lingMaiMap = RedisUtil.getInstence().getMapValues(RedisKey.CROSS_LINGMAISECRET_INFO, crossGroup + RedisKey.Delimiter_colon + group, String.class, LingMaiSecretArea.class); + String groupKey = crossGroup + RedisKey.Delimiter_colon + group; + Map lingMaiMap = CrossLingmaiLogic.getInstance().getLingmaiMap(crossGroup,group); int myLingmaiId = CrossLingmaiLogic.getInstance().getLingmaiIdOccupy(uid, lingMaiMap); if (myLingmaiId != 0 && myLingmaiId < id) { MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossLingmaiSecretAreaResponse.getNumber(), res.build(), true); @@ -95,12 +92,13 @@ public class CrossLingmaiSecretAreaBattleHandler extends BaseHandler 10 ? 10 : ((TimeUtils.nowInt() - (int)myLingmai.getGetAwardTimeOrOccupyTime()) / 60); - int minute = ((TimeUtils.nowInt() - (int)myLingmai.getGetAwardTimeOrOccupyTime()) / 60); - int second = Math.min(((TimeUtils.nowInt() - (int) myLingmai.getGetAwardTimeOrOccupyTime()) % 60), 60); - myLingmai.setScore1(myLingmai.getScore1() + minute*config.getRewardList()[0][1]+(second*config.getRewardList()[0][1]/60)); - //myLingmai.setGetAwardTimeOrOccupyTime(TimeUtils.nowInt()); - LOGGER.info("uid:"+uid+"first occupy myLingmaiId: "+myLingmaiId+" minute:"+minute+"second:"+second); - score = myLingmai.getScore1() + config.getRewardList()[0][1] * myLingmai.getOccupyTime()/60; - rank = RankContext.getRankEnum(RankEnum.CROSS_LINGMAI_RANK_PERSON.getType()); - rank.addRank(user.getId(), String.valueOf(crossGroup) + RedisKey.Delimiter_colon + group, score); + CrossLingmaiLogic.getInstance().sendNormalMail(uid,myLingmai); //清除已有灵脉数据 - lingMaiMap.remove(String.valueOf(myLingmaiId)); - RedisUtil.getInstence().removeMapEntrys(RedisKey.CROSS_LINGMAISECRET_INFO, - crossGroup + RedisKey.Delimiter_colon + group, String.valueOf(myLingmaiId)); + RedisUtil.getInstence().removeMapEntrys(RedisKey.CROSS_LINGMAISECRET_INFO, groupKey, String.valueOf(myLingmaiId)); } LingMaiSecretArea lingMaiSecretArea = new LingMaiSecretArea(); lingMaiSecretArea.setId(id); lingMaiSecretArea.setUid(uid); - String serverName = CrossServiceLogic.simplifyServerName(GameApplication.serverId); lingMaiSecretArea.setServerName(serverName); - lingMaiSecretArea.setGetAwardTimeOrOccupyTime(TimeUtils.nowInt()); - lingMaiSecretArea.setBeginOccupyTime(TimeUtils.nowInt()); - if(myLingmaiId != 0&&score!=0){ - lingMaiSecretArea.setScore1(score); - } - //被打下榜 重新上 - if(myLingmaiId ==0){ - double disappearScore = rank.getScoreById(uid, crossGroup + RedisKey.Delimiter_colon + group); - if(disappearScore>0){ - lingMaiSecretArea.setScore1((int) disappearScore); - } - } - RedisUtil.getInstence().putMapEntry(RedisKey.CROSS_LINGMAISECRET_INFO, crossGroup + RedisKey.Delimiter_colon + group, String.valueOf(id), lingMaiSecretArea); + lingMaiSecretArea.setOccupyTime(nowInt); + RedisUtil.getInstence().putMapEntry(RedisKey.CROSS_LINGMAISECRET_INFO, groupKey, String.valueOf(id), lingMaiSecretArea); } res.setResult(fightResult.getResult()); - } else { - //PVP - // 组装真人数据 + } + + // PVP 组装真人数据 + else { // 战斗逻辑 int defUid = lingMaiMap.get(String.valueOf(id)).getUid(); CSPlayer csPlayer = CrossServiceLogic.getPlayerByRedis(defUid); if (csPlayer == null) { throw new ErrorCodeException(ErrorCode.USE_NOT_EXIT); } - //其他服玩家rpc 数据调用 int myforce = HeroLogic.getInstance().calTeamTotalForce(user, TeamEnum.CROSS_LING_MAI_SECRET_AREA.getTeamId(), false); - + //其他服玩家rpc 数据调用 User defuser = PlayerLogic.getInstance().getUserByRpc(defUid); int defforce = HeroLogic.getInstance().calTeamTotalForce(defuser, TeamEnum.CROSS_LING_MAI_SECRET_AREA.getTeamId(), false); // 本人 @@ -191,51 +166,25 @@ public class CrossLingmaiSecretAreaBattleHandler extends BaseHandler 10 ? 10 : ((TimeUtils.nowInt() - (int)oldOwner.getGetAwardTimeOrOccupyTime()) / 60); - int minute = ((TimeUtils.nowInt() - (int)oldOwner.getGetAwardTimeOrOccupyTime()) / 60); - int second = Math.min(((TimeUtils.nowInt() - (int) oldOwner.getGetAwardTimeOrOccupyTime()) % 60), 60); - long tempScore = (long) second * config.getRewardList()[0][1] / 60; - LOGGER.info("uid:"+uid+"pvp other occupy id:"+id+" minute:"+minute+"second:"+second); - //oldOwner.setScore1(oldOwner.getScore1()+minute*config.getRewardList()[0][1]+(int)tempScore); - int score1 =oldOwner.getScore1()+minute*config.getRewardList()[0][1]+(int)tempScore; - long scoreOld = score1 + config.getRewardList()[0][1]*(long)oldOwner.getOccupyTime()/60; - rank.addRank(defUid, String.valueOf(crossGroup) + RedisKey.Delimiter_colon + group, scoreOld); - LingMaiSecretArea myLingmai =null; if (myLingmaiId != 0) { //本人已有灵脉结算 - myLingmai = lingMaiMap.get(String.valueOf(myLingmaiId));//上一个占领者 - config = SLodeConfig.lodeConfig.get(myLingmaiId); - //minute = ((TimeUtils.nowInt() - (int)myLingmai.getGetAwardTimeOrOccupyTime()) / 60) > 10 ? 10 : ((TimeUtils.nowInt() - (int)myLingmai.getGetAwardTimeOrOccupyTime()) / 60); - minute = ((TimeUtils.nowInt() - (int)myLingmai.getGetAwardTimeOrOccupyTime()) / 60); - second = Math.min(((TimeUtils.nowInt() - (int) myLingmai.getGetAwardTimeOrOccupyTime()) % 60), 60); - LOGGER.info("uid:"+uid+"pvp owner occupy id:"+myLingmaiId+" minute:"+minute+"second:"+second); - tempScore =((long) second * config.getRewardList()[0][1] / 60); - score1 = myLingmai.getScore1()+minute*config.getRewardList()[0][1]+(int)tempScore; - //long newScore = score1+ - //myLingmai.setScore1(myLingmai.getScore1()+minute*config.getRewardList()[0][1]+(int)tempScore); - myLingmai.setGetAwardTimeOrOccupyTime(TimeUtils.nowInt()); - //我的 - long score = score1 + config.getRewardList()[0][1] * (long)myLingmai.getOccupyTime()/60; - rank = RankContext.getRankEnum(RankEnum.CROSS_LINGMAI_RANK_PERSON.getType()); - rank.addRank(user.getId(), String.valueOf(crossGroup) + RedisKey.Delimiter_colon + group, score); - myLingmai.setScore1((int)score); - //两边都计算分 置换 - //oldOwner.setScore1(score); - oldOwner.setGetAwardTimeOrOccupyTime(TimeUtils.nowInt()); - oldOwner.setId(myLingmaiId); - oldOwner.setBeginOccupyTime(TimeUtils.nowInt()); - oldOwner.setOccupyTime(0); - oldOwner.setScore1((int)scoreOld); - RedisUtil.getInstence().putMapEntry(RedisKey.CROSS_LINGMAISECRET_INFO, crossGroup + RedisKey.Delimiter_colon + group, String.valueOf(myLingmaiId), oldOwner); + LingMaiSecretArea myLingmai = lingMaiMap.get(String.valueOf(myLingmaiId)); + CrossLingmaiLogic.getInstance().sendNormalMail(uid,myLingmai); + //清除已有灵脉数据 + RedisUtil.getInstence().removeMapEntrys(RedisKey.CROSS_LINGMAISECRET_INFO, groupKey, String.valueOf(myLingmai.getId())); } - //易主 - LingMaiSecretArea lingMaiSecretArea = CrossLingmaiLogic.getLingaMaiData(id, uid,crossGroup,group); - if(myLingmai!=null){ - lingMaiSecretArea.setScore1(myLingmai.getScore1()); - } - RedisUtil.getInstence().putMapEntry(RedisKey.CROSS_LINGMAISECRET_INFO, crossGroup + RedisKey.Delimiter_colon + group, String.valueOf(id), lingMaiSecretArea); + // 给失败者发邮件 + LingMaiSecretArea nowLingMai = lingMaiMap.get(String.valueOf(id)); + CrossLingmaiLogic.getInstance().sendBeAckMail(nowLingMai.getUid(),nowLingMai,uid); + //清除已有灵脉数据 + RedisUtil.getInstence().removeMapEntrys(RedisKey.CROSS_LINGMAISECRET_INFO, groupKey, String.valueOf(nowLingMai.getId())); + + // 更新灵脉信息 + nowLingMai.setUid(uid); + nowLingMai.setServerName(serverName); + nowLingMai.setOccupyTime(nowInt); + RedisUtil.getInstence().putMapEntry(RedisKey.CROSS_LINGMAISECRET_INFO, groupKey, String.valueOf(id), nowLingMai); + //挑战者记录 String key1 = RedisKey.getKey(RedisKey.CROSS_LINGMAISECRET_RECORD, String.valueOf(user.getId()), false); long defLenth = redisUtil.lGetListSize(key1); @@ -250,9 +199,10 @@ public class CrossLingmaiSecretAreaBattleHandler extends BaseHandler lingMaiMap = RedisUtil.getInstence().getMapValues(RedisKey.CROSS_LINGMAISECRET_INFO, crossGroup + RedisKey.Delimiter_colon + group, String.class, LingMaiSecretArea.class); + Map lingMaiMap = CrossLingmaiLogic.getInstance().getLingmaiMap(crossGroup,group); if (page == 0) { - int id = lingMaiMap.values().stream().filter(n -> n.getUid() == uid).limit(1).mapToInt(n -> n.getId()).sum(); + int id = lingMaiMap.values().stream().filter(n -> n.getUid() == uid).limit(1).mapToInt(LingMaiSecretArea::getId).sum(); if (SLodeConfig.lodeConfig.get(id) != null) { page = SLodeConfig.lodeConfig.get(id).getPageNo(); } else { @@ -94,9 +93,9 @@ public class CrossLingmaiSecretAreaInfoHandler extends BaseHandler matchMyInfoList = lingMaiMap.values().stream().filter(n -> n.getUid() == uid).collect(Collectors.toList()); - if (matchMyInfoList != null && matchMyInfoList.size() > 0) { + if (matchMyInfoList.size() > 0) { myOccupyId = matchMyInfoList.get(0).getId(); - myOccupyTime = (int) matchMyInfoList.get(0).getBeginOccupyTime(); + myOccupyTime = matchMyInfoList.get(0).getOccupyTime(); } //当前页面数据 for (SLodeConfig config : pageConfig) { diff --git a/serverlogic/src/main/java/com/ljsd/jieling/ktbeans/ReportUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/ktbeans/ReportUtil.java index acab0b913..eb2cee240 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/ktbeans/ReportUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/ktbeans/ReportUtil.java @@ -13,6 +13,7 @@ import org.slf4j.LoggerFactory; import rpc.protocols.CommonProto; import rpc.protocols.PlayerInfoProto; +import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Optional; @@ -47,6 +48,7 @@ public class ReportUtil { //对外接口只有一个(关闭数数上报 2022 4 25) public static void onReportEvent(User user,int type,Object... param) throws Exception { + LOGGER.info("*************埋点信息**********,uid:{},type:{},param:{}",user.getId(),type, Arrays.asList(param)); // if(!GameApplication.serverProperties.isSendlog37()){ // ta=null; // return; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/SignInSumActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/SignInSumActivity.java index ad25b3035..e8d367b39 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/SignInSumActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/SignInSumActivity.java @@ -68,7 +68,6 @@ class SignInSumActivity extends AbstractActivity { reSetValue(UserManager.getUser(session.getUid())); } reportTakeActivityReward(UserManager.getUser(session.getUid()),config.getReward(),missionId); - ActivityMission activityMission = UserManager.getUser(session.getUid()).getActivityManager().getActivityMissionMap().get(this.id); sendActivityProgress(session, null); } return result; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/event/AutoRechargeBackEvent.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/event/AutoRechargeBackEvent.java index 4bba2149b..78f6ad652 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/event/AutoRechargeBackEvent.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/event/AutoRechargeBackEvent.java @@ -41,4 +41,13 @@ public class AutoRechargeBackEvent implements IEvent { public String getRechargeMethod() { return rechargeMethod; } + + @Override + public String toString() { + return "AutoRechargeBackEvent{" + + "userId=" + userId + + ", giftId=" + giftId + + ", rechargeMethod='" + rechargeMethod + '\'' + + '}'; + } } 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 6923bf988..187b243f2 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 @@ -844,7 +844,7 @@ public class ArenaLogic { private void checkState(){ TimeControllerOfFunction timeControllerOfFunction = GlobalDataManaager.getInstance().getTimeControllerOfFunctionByFunctinoType(FunctionIdEnum.World_Arena); - if(null ==timeControllerOfFunction){ + if(null == timeControllerOfFunction){ return; } long diff = (System.currentTimeMillis() - timeControllerOfFunction.getStartTime())/1000; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/CrossLingmaiLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/CrossLingmaiLogic.java index 446cd2aa0..01e8cdbc1 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/CrossLingmaiLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/CrossLingmaiLogic.java @@ -13,19 +13,13 @@ 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 config.SErrorCodeEerverConfig; -import config.SLodeConfig; -import config.SLodeRankReward; -import config.SMServerLodeSetting; +import config.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import util.StringUtil; import util.TimeUtils; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; import java.util.stream.Collectors; /** @@ -57,7 +51,7 @@ public class CrossLingmaiLogic { lingMaiSecretArea.setBeginOccupyTime(TimeUtils.nowInt()); if(disappearScore>0){ Map lingMaiMap = RedisUtil.getInstence().getMapValues(RedisKey.CROSS_LINGMAISECRET_INFO, crossGroup + RedisKey.Delimiter_colon + group, String.class, LingMaiSecretArea.class); - if(!lingMaiMap.values().stream().anyMatch(n->n.getUid()==uid)){ + if(lingMaiMap.values().stream().noneMatch(n->n.getUid()==uid)){ lingMaiSecretArea.setScore1((int) disappearScore); } } @@ -66,6 +60,7 @@ public class CrossLingmaiLogic { public static void updateLingmaiData(Map lingMaiMap, int crossGroup, int group) { int nowTime = TimeUtils.nowInt(); + String groupkey = crossGroup + RedisKey.Delimiter_colon + group; for (Map.Entry map : lingMaiMap.entrySet()) { try { User user = UserManager.getUser(map.getValue().getUid()); @@ -74,23 +69,21 @@ public class CrossLingmaiLogic { if (config != null) { int occupyTime = (int) map.getValue().getGetAwardTimeOrOccupyTime(); //分钟 - //int minute = (nowTime - occupyTime) / 60 >= 10 ? 10 : (nowTime - occupyTime) / 60; int minute = (nowTime - occupyTime) / 60; //秒 - int second = (nowTime - occupyTime) % 60 >= 60 ? 60 : (nowTime - occupyTime) % 60; + int second = Math.min((nowTime - occupyTime) % 60, 60); //difVal =1 ; LOGGER.error("玩家" + map.getValue().getUid() + "原有秒:"+map.getValue().getOccupyTime()+" 获得秒:" + (minute*60+second)); map.getValue().setOccupyTime(map.getValue().getOccupyTime() + minute*60+second); map.getValue().setGetAwardTimeOrOccupyTime(nowTime); - RedisUtil.getInstence().putMapEntry(RedisKey.CROSS_LINGMAISECRET_INFO, - crossGroup + RedisKey.Delimiter_colon + group, map.getKey(), map.getValue()); + RedisUtil.getInstence().putMapEntry(RedisKey.CROSS_LINGMAISECRET_INFO, groupkey, map.getKey(), map.getValue()); AbstractRank rank = RankContext.getRankEnum(RankEnum.CROSS_LINGMAI_RANK_PERSON.getType()); LOGGER.error("minute:"+map.getValue().getOccupyTime()+" per:"+(config.getRewardList()[0][1]/60)); long score = (long)map.getValue().getOccupyTime() * config.getRewardList()[0][1]/60 + map.getValue().getScore1(); - double test = rank.getScoreById(user.getId(), crossGroup + RedisKey.Delimiter_colon + group); + double test = rank.getScoreById(user.getId(), groupkey); LOGGER.error("之前是:" + test + "之后是:" + score); - rank.addRank(user.getId(), String.valueOf(crossGroup) + RedisKey.Delimiter_colon + group, score); + rank.addRank(user.getId(), groupkey, score); } } } catch (Exception e) { @@ -106,7 +99,7 @@ public class CrossLingmaiLogic { long mondayZeroTime = TimeUtils.getWeekZero(1); List sendWeekDay = new ArrayList<>(); for (int[] everyTime : battleTime) { - sendWeekDay.add(TimeUtils.getDayOfWeekBytime(mondayZeroTime + (everyTime[1]+3) * 1000)); + sendWeekDay.add(TimeUtils.getDayOfWeekBytime(mondayZeroTime + (everyTime[1]+3) * 1000L)); } return sendWeekDay; } @@ -119,7 +112,7 @@ public class CrossLingmaiLogic { long mondayZeroTime = TimeUtils.getWeekZero(1); //休战期 for (int[] everyTime : restTime) { - if (TimeUtils.now() >= mondayZeroTime + everyTime[0] * 1000 && TimeUtils.now() <= mondayZeroTime + everyTime[1] * 1000) { + if (TimeUtils.now() >= mondayZeroTime + everyTime[0] * 1000L && TimeUtils.now() <= mondayZeroTime + everyTime[1] * 1000L) { result[0] = 2; result[1] = (int) (mondayZeroTime / 1000) + everyTime[1]; return; @@ -127,7 +120,7 @@ public class CrossLingmaiLogic { } //抢夺期 for (int[] everyTime : battleTime) { - if (TimeUtils.now() > mondayZeroTime + everyTime[0] * 1000 && TimeUtils.now() < mondayZeroTime + everyTime[1] * 1000) { + if (TimeUtils.now() > mondayZeroTime + everyTime[0] * 1000L && TimeUtils.now() < mondayZeroTime + everyTime[1] * 1000L) { result[0] = 1; result[1] = (int) (mondayZeroTime / 1000) + everyTime[1]; return; @@ -146,6 +139,92 @@ public class CrossLingmaiLogic { return 0; } + public String getReward(int multiple, int[][] reward){ + StringBuilder builder = new StringBuilder(); + for (int[] ints : reward) { + builder.append(ints[0]).append("#").append(ints[1]*multiple).append("|"); + } + if (builder.length() <= 0){ + return ""; + } + return builder.substring(0,builder.length()-1); + } + + public Map getLingmaiMap(int crossGroup, int group){ + int nowInt = TimeUtils.nowInt(); + String groupKey = crossGroup + RedisKey.Delimiter_colon + group; + int second = SSpecialConfig.getIntegerValue(SSpecialConfig.lingmai_basic_configuration); + Map mapValues = RedisUtil.getInstence().getMapValues(RedisKey.CROSS_LINGMAISECRET_INFO, groupKey, String.class, LingMaiSecretArea.class); + Iterator> iterator = mapValues.entrySet().iterator(); + while (iterator.hasNext()){ + Map.Entry next = iterator.next(); + LingMaiSecretArea lingMaiSecretArea = next.getValue(); + int time = nowInt - lingMaiSecretArea.getOccupyTime(); + if (time > second){ + iterator.remove(); + sendNormalMail(lingMaiSecretArea.getUid(),lingMaiSecretArea); + RedisUtil.getInstence().removeMapEntrys(RedisKey.CROSS_LINGMAISECRET_INFO, groupKey, String.valueOf(lingMaiSecretArea.getId())); + } + } + return mapValues; + } + + public void sendNormalMail(int uid, LingMaiSecretArea myLingmai){ + int nowInt = TimeUtils.nowInt(); + SLodeConfig sLodeConfig = SLodeConfig.lodeConfig.get(myLingmai.getId()); + int time = (nowInt - myLingmai.getOccupyTime()) / 60; + int minute = SSpecialConfig.getIntegerValue(SSpecialConfig.lingmai_basic_configuration)/60; + int minTime = Math.min(time, minute); + String title = SErrorCodeEerverConfig.getI18NMessage("LingmaikaicaiReward_mail_title"); + String content = SErrorCodeEerverConfig.getI18NMessage("LingmaikaicaiReward_mail_txt", new Object[]{minTime}); + String reward = CrossLingmaiLogic.getInstance().getReward(minTime, sLodeConfig.getRewardList()); + MailLogic.getInstance().sendMail(uid,title,content,reward,nowInt,Global.MAIL_EFFECTIVE_TIME); + LOGGER.info("灵脉发送正常结束邮件:{}",uid); + } + + public void sendBeAckMail(int uid, LingMaiSecretArea myLingmai, int ackId){ + int nowInt = TimeUtils.nowInt(); + SLodeConfig sLodeConfig = SLodeConfig.lodeConfig.get(myLingmai.getId()); + int time = (nowInt - myLingmai.getOccupyTime()) / 60; + int minute = SSpecialConfig.getIntegerValue(SSpecialConfig.lingmai_basic_configuration)/60; + int minTime = Math.min(time, minute); + String title = SErrorCodeEerverConfig.getI18NMessage("LingmaikaicaiReward1_mail_title"); + String content = SErrorCodeEerverConfig.getI18NMessage("LingmaikaicaiReward1_mail_txt", new Object[]{ackId,minTime}); + String reward = CrossLingmaiLogic.getInstance().getReward(minTime, sLodeConfig.getRewardList()); + MailLogic.getInstance().sendMail(uid,title,content,reward,nowInt,Global.MAIL_EFFECTIVE_TIME); + LOGGER.info("灵脉发送被占领结束邮件:{}",uid); + } + + public void initData(){ + //初始化数据 + int crossGroup = GlobleSystemLogic.getInstence().getCrossGroup(); + if (crossGroup == -1) { + return; + } + // 清理组别1 + String groupKey1 = crossGroup + RedisKey.Delimiter_colon + 1; + Map mapValues = RedisUtil.getInstence().getMapValues(RedisKey.CROSS_LINGMAISECRET_INFO, groupKey1, String.class, LingMaiSecretArea.class); + for (LingMaiSecretArea value : mapValues.values()) { + sendNormalMail(value.getUid(),value); + } + String key1 = RedisUtil.getInstence().getKey(RedisKey.CROSS_LINGMAISECRET_INFO, groupKey1); + RedisUtil.getInstence().del(key1); + LOGGER.info("灵脉初始化,key:{}, 长度:{}",key1,mapValues.size()); + mapValues.clear(); + + // 清理组别2 + String groupKey2 = crossGroup + RedisKey.Delimiter_colon + 2; + Map mapValue2 = RedisUtil.getInstence().getMapValues(RedisKey.CROSS_LINGMAISECRET_INFO, groupKey1, String.class, LingMaiSecretArea.class); + for (LingMaiSecretArea value : mapValue2.values()) { + sendNormalMail(value.getUid(),value); + } + String key2 = RedisUtil.getInstence().getKey(RedisKey.CROSS_LINGMAISECRET_INFO, groupKey2); + RedisUtil.getInstence().del(key2); + LOGGER.info("灵脉初始化,key:{}, 长度:{}",key2,mapValue2.size()); + mapValue2.clear(); + } + + /** * 占领奖励 每十分钟发放一次 */ @@ -169,35 +248,22 @@ public class CrossLingmaiLogic { if (crossGroup == -1) { return; } - String rkey1 = RedisUtil.getInstence().getKey(RedisKey.CROSS_LINGMAI_RANK_PERSON, Integer.toString(crossGroup) + RedisKey.Delimiter_colon + "1"); - String rkey2 = RedisUtil.getInstence().getKey(RedisKey.CROSS_LINGMAI_RANK_PERSON, Integer.toString(crossGroup) + RedisKey.Delimiter_colon + "2"); + String rkey1 = RedisUtil.getInstence().getKey(RedisKey.CROSS_LINGMAI_RANK_PERSON, crossGroup + RedisKey.Delimiter_colon + "1"); + String rkey2 = RedisUtil.getInstence().getKey(RedisKey.CROSS_LINGMAI_RANK_PERSON, crossGroup + RedisKey.Delimiter_colon + "2"); Set arenaRank1 = RedisUtil.getInstence().getReverseZset(rkey1, 0, -1); Set arenaRank2 = RedisUtil.getInstence().getReverseZset(rkey2, 0, -1); sendMailReward(arenaRank1); sendMailReward(arenaRank2); } - public void initData(){ - //初始化数据 - int crossGroup = GlobleSystemLogic.getInstence().getCrossGroup(); - if (crossGroup == -1) { - return; - } - String rkey1 = RedisUtil.getInstence().getKey(RedisKey.CROSS_LINGMAI_RANK_PERSON, Integer.toString(crossGroup) + RedisKey.Delimiter_colon + "1"); - String rkey2 = RedisUtil.getInstence().getKey(RedisKey.CROSS_LINGMAI_RANK_PERSON, Integer.toString(crossGroup) + RedisKey.Delimiter_colon + "2"); - RedisUtil.getInstence().del(rkey1); - RedisUtil.getInstence().del(rkey2); - String inf1 = RedisUtil.getInstence().getKey(RedisKey.CROSS_LINGMAISECRET_INFO, Integer.toString(crossGroup) + RedisKey.Delimiter_colon + "1"); - String inf2 = RedisUtil.getInstence().getKey(RedisKey.CROSS_LINGMAISECRET_INFO, Integer.toString(crossGroup) + RedisKey.Delimiter_colon + "2"); - RedisUtil.getInstence().del(inf1); - RedisUtil.getInstence().del(inf2); - } - public void sendMailReward(Set arenaRank) { - List arenaRankfilt = arenaRank.stream().mapToInt(n -> Integer.parseInt(n)).boxed().collect(Collectors.toList()); + List arenaRankfilt = arenaRank.stream().mapToInt(Integer::parseInt).boxed().collect(Collectors.toList()); String title = SErrorCodeEerverConfig.getI18NMessage("LingmaiReward_mail_title"); for (int i = 0; i < arenaRankfilt.size(); i++) { SLodeRankReward config = SLodeRankReward.getIdByScore(i + 1); + if (config == null){ + continue; + } try { String content = SErrorCodeEerverConfig.getI18NMessageNeedConvert("LingmaiReward_mail_txt", new Object[]{(i + 1)}, new int[0], "#"); MailLogic.getInstance().sendMail(arenaRankfilt.get(i), title, content, @@ -208,61 +274,7 @@ public class CrossLingmaiLogic { } } - //TODO 之后删除 - public void fixBug(){ - LOGGER.error("lingmaimijing6"); - //初始化数据 - int crossGroup = GlobleSystemLogic.getInstence().getCrossGroup(); - if (crossGroup == -1) { - LOGGER.error("lingmaifenzu:"+crossGroup); - return; - } - Map lingMaiMap1 = RedisUtil.getInstence().getMapValues(RedisKey.CROSS_LINGMAISECRET_INFO, crossGroup + RedisKey.Delimiter_colon + 1, String.class, LingMaiSecretArea.class); - Map lingMaiMap2 = RedisUtil.getInstence().getMapValues(RedisKey.CROSS_LINGMAISECRET_INFO, crossGroup + RedisKey.Delimiter_colon + 2, String.class, LingMaiSecretArea.class); - LOGGER.error("lingmaimijing4"); - fixBugUpdateLingmaiData(lingMaiMap1,crossGroup,1); - LOGGER.error("lingmaimijing5"); - fixBugUpdateLingmaiData(lingMaiMap2,crossGroup,2); - LOGGER.error("lingmaimijing1"); - //排行榜删除 - String rkey1 = RedisUtil.getInstence().getKey(RedisKey.CROSS_LINGMAI_RANK_PERSON, Integer.toString(crossGroup) + RedisKey.Delimiter_colon + "1"); - String rkey2 = RedisUtil.getInstence().getKey(RedisKey.CROSS_LINGMAI_RANK_PERSON, Integer.toString(crossGroup) + RedisKey.Delimiter_colon + "2"); - RedisUtil.getInstence().del(rkey1); - LOGGER.error("lingmaimijing2"+rkey1); - RedisUtil.getInstence().del(rkey2); - LOGGER.error("lingmaimijing3"+rkey2); - } - - public static void fixBugUpdateLingmaiData(Map lingMaiMap,int crossGroup,int group) { - for (Map.Entry map : lingMaiMap.entrySet()) { - try{ - User user = UserManager.getUser(map.getValue().getUid()); - if (user != null) { - SLodeConfig config = SLodeConfig.lodeConfig.get(map.getValue().getId()); - if(config !=null){ - map.getValue().setGetAwardTimeOrOccupyTime(TimeUtils.nowInt()); - map.getValue().setBeginOccupyTime(TimeUtils.nowInt()); - LOGGER.error("lingmaimijing1"); - map.getValue().setScore1(0); - map.getValue().setOccupyTime(0); - } - } - } catch (Exception e) { - e.printStackTrace(); - } - } - RedisUtil.getInstence().putMapEntrys(RedisKey.CROSS_LINGMAISECRET_INFO, crossGroup + RedisKey.Delimiter_colon + group, lingMaiMap); - } - - - - - - - - public static class Instance { public final static CrossLingmaiLogic instance = new CrossLingmaiLogic(); - } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildLogic.java index 17bd9d704..de5ab7117 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildLogic.java @@ -451,7 +451,11 @@ public class GuildLogic { Set value = memberEntry.getValue(); for(Integer uidTmp : value){ User userTmp = PlayerLogic.getInstance().getUserByRpc(uidTmp); - builder.addFamilyUserInfo(CBean2Proto.getFamilyUserInfo(userTmp,position)); + if (userTmp != null){ + builder.addFamilyUserInfo(CBean2Proto.getFamilyUserInfo(userTmp,position)); + }else { + LOGGER.error("获取工会成员信息报错,本人id:{},工会id:{},报错成员id:{}",uid,guildInfo.getId(),uidTmp); + } } } MessageUtil.sendMessage(session,1,msgId,builder.build(),true); 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 9f9597d16..359f3f07f 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 @@ -163,8 +163,7 @@ public class SevenWorldLogic { int ranking = builder.getMyRankInfo().getRank(); int integral = (int) builder.getMyRankInfo().getParam1(); int count = user.getPlayerInfoManager().getSevenWorldOpenTierCount(); - return PlayerInfoProto.SevenWorldInfoResponse.newBuilder() - .setId(tier).setRanking(ranking).setIntegral(integral).setTotalTier(count).build(); + return PlayerInfoProto.SevenWorldInfoResponse.newBuilder().setId(tier).setRanking(ranking).setIntegral(integral).setTotalTier(count).build(); } /** diff --git a/serverlogic/src/main/java/com/ljsd/jieling/thread/task/MinuteTask.java b/serverlogic/src/main/java/com/ljsd/jieling/thread/task/MinuteTask.java index 5e6eddce7..6756b7044 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/thread/task/MinuteTask.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/thread/task/MinuteTask.java @@ -342,7 +342,7 @@ public class MinuteTask extends Thread { } //每日分钟数是10的倍数执行 0 分 10分 20分 30分....60分 - public void every10IntMul()throws Exception { + public void every10IntMul() { Calendar calendar = Calendar.getInstance(); int hour = calendar.get(Calendar.HOUR_OF_DAY); int minute = calendar.get(Calendar.MINUTE); @@ -351,32 +351,10 @@ public class MinuteTask extends Thread { //周二 四 六 开放 9点-21点 List weekDay = CrossLingmaiLogic.getSendRewardWeekDay(); if(weekDay.contains(w)){ - //占领奖励 - if(hour>=9&&hour<21){ - int mod = minute%10; - if(mod ==0 ){ - CrossLingmaiLogic.getInstance().sendOccypyReward(); - } - } - if(hour==21&& minute==0){ - CrossLingmaiLogic.getInstance().sendOccypyReward(); - } - //结算每日排行奖励 - if(hour ==21 && minute==0){ - CrossLingmaiLogic.getInstance().sendMailReward(); - } //0点清除数据 - if(hour == 0&& minute==0){ + if(hour==0 && minute==0){ CrossLingmaiLogic.getInstance().initData(); } - - //bug 修复 - /*if(w==4){ - if(hour ==10 && minute ==50){ - LOGGER.error("lingmaimijing0 000000"); - CrossLingmaiLogic.getInstance().fixBug(); - } - }*/ } } } diff --git a/tablemanager/src/main/java/config/SSpecialConfig.java b/tablemanager/src/main/java/config/SSpecialConfig.java index 1b9e05de2..b72cda375 100644 --- a/tablemanager/src/main/java/config/SSpecialConfig.java +++ b/tablemanager/src/main/java/config/SSpecialConfig.java @@ -136,6 +136,7 @@ public class SSpecialConfig implements BaseConfig { public static final String EquipTalismanaUpperLimit = "EquipTalismanaUpperLimit ";//法宝等级上限 public static final String EquipRankResetCost = "EquipRankResetCost";//摘星阁装备强化精炼重置消耗 public static final String ShenZhunTeQuan = "ShenZhunTeQuan";//神尊特权加个兑换10仙晶兑换1神尊经验 + public static final String lingmai_basic_configuration = "lingmai_basic_configuration";//灵脉秘境最大占矿时间(s) @Override public void init() throws Exception {