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 519055592..9c504ab31 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 @@ -287,6 +287,7 @@ public class RedisKey { public static final String MONSTER_ATTACK_RANK = "MONSTER_ATTACK_RANK";//兽潮 + public static final String THREE_WORLD_END_REWARD = "THREE_WORLD_END_REWARD";//三界除魔是否结算完毕 diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/TakeTreasureRewardHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/TakeTreasureRewardHandler.java index cc60295e5..7c7459007 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/TakeTreasureRewardHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/TakeTreasureRewardHandler.java @@ -41,6 +41,9 @@ public class TakeTreasureRewardHandler extends BaseHandler drops = new ArrayList<>(); + if(worldTreasureReward.getCreateTime() == 0){ + throw new ErrorCodeException(ErrorCode.SYS_ERROR_CODE); + } if(id!=-1){ SWorldBossTreasureConfig sWorldBossTreasureConfig = worldBossTreasureStaticConfig.getsWorldBossTreasureConfigByIdMap().get(id); if(sWorldBossTreasureConfig == null){ diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityLogic.java index 0ad86ffb5..61d5cd84f 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityLogic.java @@ -137,6 +137,7 @@ public class ActivityLogic implements IEventHandler{ } long startTime = ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),0, 1); long endTime = ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),0, 2); + long gapEndTime = endTime+sGlobalActivity.getGapTime()*TimeUtils.DAY; if (now < startTime) { //如果没到活动开启时间,但是openActivityIds里有了这个活动,证明是热更延迟开启的活动,需要清除掉 if (openActivityIds.contains(sGlobalActivity.getId())) { @@ -153,14 +154,20 @@ public class ActivityLogic implements IEventHandler{ } } if (endTime != 0 && now > endTime) { - if (openActivityIds.contains(sGlobalActivity.getId())) { - openActivityIds.remove(sGlobalActivity.getId()); - AbstractActivity abstractActivity = ActivityTypeEnum.getActicityType(sGlobalActivity.getId()); - if (null == abstractActivity) { - continue; + if (!openActivityIds.contains(sGlobalActivity.getId())) { + if(nowgapEndTime){ + openActivityIds.remove(sGlobalActivity.getId()); + } + AbstractActivity abstractActivity = ActivityTypeEnum.getActicityType(sGlobalActivity.getId()); + if (null == abstractActivity) { + continue; + } + abstractActivity.onActivityEnd(); continue; } AbstractActivity abstractActivity = ActivityTypeEnum.getActicityType(sGlobalActivity.getId()); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ExpectRankActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ExpectRankActivity.java index 5d3287b02..d4c5fc364 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ExpectRankActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ExpectRankActivity.java @@ -13,6 +13,7 @@ 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.thread.ThreadManager; import com.ljsd.jieling.util.ItemUtil; import util.TimeUtils; import config.*; @@ -59,7 +60,11 @@ class ExpectRankActivity extends AbstractActivity { @Override public void onActivityEnd() throws Exception { + ThreadManager.getScheduledExecutor().execute(this::sendReward); + } + protected void sendReward(){ + Thread.currentThread().setName("sendReward-Activity-"+id); SGlobalActivity sGlobalActivity = SGlobalActivity.getsGlobalActivityMap().get(id); if(sGlobalActivity.getOpenRanking()==0){ return; @@ -93,35 +98,47 @@ class ExpectRankActivity extends AbstractActivity { int rank = 1; int nowTime = (int) (TimeUtils.now() / 1000); for (ZSetOperations.TypedTuple item : rankInfo) { + String value = item.getValue(); int uid = Integer.parseInt(value); - User user = UserManager.getUser(uid, true); - if (null == user) { - continue; - } - ActivityMission activityMission = user.getActivityManager().getActivityMissionMap().get(id); - if (activityMission == null || activityMission.getOpenType() == 0) { - continue; - } - int missionId ; - if(rank2miss.containsKey(rank)) { - missionId = rank2miss.get(rank); - }else { - if(maxRank==-1){ - missionId = maxRewardId; - }else { + try { + User user = UserManager.getUser(uid, true); + if (null == user) { continue; } + ActivityMission activityMission = user.getActivityManager().getActivityMissionMap().get(id); + if (activityMission == null ) { + continue; + } + if(activityMission.getOpenType() == 0){ + //三界除魔没有个人奖励,只有排行奖励 所以不需要判断这里 + if(sGlobalActivity.getType()!=ActivityType.THREE_WORLD_RANK){ + continue; + } + } + int missionId; + if (rank2miss.containsKey(rank)) { + missionId = rank2miss.get(rank); + } else { + if (maxRank == -1) { + missionId = maxRewardId; + } else { + continue; + } + } + //checkAndUpdate value + SActivityRankingReward sActivityRankingReward1 = SActivityRankingReward.getsActivityRankingRewardMap().get(missionId); + //sendmail + + String title = SErrorCodeEerverConfig.getI18NMessage("expertrank_activity_title", new Object[]{sGlobalActivity.getSesc()}); + String content = SErrorCodeEerverConfig.getI18NMessage("expertrank_activity_txt", new Object[]{sGlobalActivity.getSesc(), rank++}); + String mailReward = ItemUtil.getMailReward(sActivityRankingReward1.getRankingReward()); + MailLogic.getInstance().sendMail(uid, title, content, mailReward, nowTime, Global.MAIL_EFFECTIVE_TIME); + }catch (Exception e) { + LOGGER.error("id为{}的玩家,{}活动排行奖励没有发成功",uid,id); + System.out.println(e); + e.printStackTrace(); } - - //checkAndUpdate value - SActivityRankingReward sActivityRankingReward1 = SActivityRankingReward.getsActivityRankingRewardMap().get(missionId); - //sendmail - - String title = SErrorCodeEerverConfig.getI18NMessage("expertrank_activity_title", new Object[]{sGlobalActivity.getSesc()}); - String content = SErrorCodeEerverConfig.getI18NMessage("expertrank_activity_txt", new Object[]{sGlobalActivity.getSesc(), rank++}); - String mailReward = ItemUtil.getMailReward(sActivityRankingReward1.getRankingReward()); - MailLogic.getInstance().sendMail(uid, title, content, mailReward, nowTime, Global.MAIL_EFFECTIVE_TIME); } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ThreeWorldRankActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ThreeWorldRankActivity.java index 2218c823f..321c05799 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ThreeWorldRankActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ThreeWorldRankActivity.java @@ -1,27 +1,41 @@ package com.ljsd.jieling.logic.activity; +import com.ljsd.jieling.db.redis.RedisKey; +import com.ljsd.jieling.db.redis.RedisUtil; import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.logic.mail.MailLogic; +import com.ljsd.jieling.logic.rank.RankContext; +import com.ljsd.jieling.logic.rank.RankEnum; import com.ljsd.jieling.logic.rank.rankImpl.AbstractRank; +import com.ljsd.jieling.thread.ThreadManager; +import config.SGlobalActivity; +import org.springframework.data.redis.core.ZSetOperations; +import util.TimeUtils; + +import java.util.Set; /** * @author lvxinran * @date 2020/9/23 * @discribe */ -public class ThreeWorldRankActivity extends AbstractActivity { +public class ThreeWorldRankActivity extends ExpectRankActivity { public ThreeWorldRankActivity(int id) { super(id); } @Override public void onActivityEnd() throws Exception { - System.out.println("end"+id); + if(RedisUtil.getInstence().get(RedisKey.getKey(RedisKey.THREE_WORLD_END_REWARD,String.valueOf(id),false))!=null){ + return; + } + int gapTime = SGlobalActivity.getsGlobalActivityMap().get(id).getGapTime(); + + //这里time+1,多一天来删除key,防止边界线程超过时间 + long expireTime = (gapTime + 1) * TimeUtils.DAY; + + RedisUtil.getInstence().set(RedisKey.getKey(RedisKey.THREE_WORLD_END_REWARD,String.valueOf(id),false),String.valueOf(1),expireTime/1000);//已经结算的标识 + RedisUtil.getInstence().zsetAddAall(RedisKey.getKey(RedisKey.EXPERT_RANK,String.valueOf(id),false), RedisUtil.getInstence().getAllZsetRange(RedisKey.getKey(RedisKey.MONSTER_ATTACK_RANK, "", false))); super.onActivityEnd(); } - - @Override - public void onActivityEndDealReward(User user) throws Exception { - System.out.println("endend"+id); - - } }