From 39b48bf320187083aedff356113af47a43cb9d1f Mon Sep 17 00:00:00 2001 From: lvxinran Date: Tue, 31 Dec 2019 18:37:01 +0800 Subject: [PATCH] =?UTF-8?q?=E9=99=90=E6=97=B6=E6=8A=BD=E5=8D=A1=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../logic/activity/AbstractActivity.java | 10 +++ .../jieling/logic/activity/ActivityLogic.java | 64 ++++++++------- .../logic/activity/ExpectRankActivity.java | 10 --- .../logic/activity/ForceRankActivity.java | 20 ++--- .../activity/LimitRandomCardActivity.java | 77 ++++++++++++++++++- .../ljsd/jieling/logic/hero/HeroLogic.java | 25 +++--- 6 files changed, 142 insertions(+), 64 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/AbstractActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/AbstractActivity.java index a95965463..7c6b30a02 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/AbstractActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/AbstractActivity.java @@ -328,5 +328,15 @@ public abstract class AbstractActivity implements IActivity, IEventHandler { } } + protected Set getRankSet(int start, int end) { + Set set = new HashSet<>(); + if (start > end) { + return set; + } + for (int i = start; i <= end; i++) { + set.add(i); + } + return set; + } } 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 ec2b850fd..49211c3b5 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 @@ -255,6 +255,12 @@ public class ActivityLogic implements IEventHandler{ for (SGlobalActivity sGlobalActivity : sGlobalActivityMap.values()) { int activityId = sGlobalActivity.getId(); if (openActivityIds.contains(activityId)) { + if(sGlobalActivity.getGapTime()>0){ + long endTime = ToolsUtil.getEndTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),userCreateTime, sGlobalActivity.getGapTime()); + if(TimeUtils.now()>=endTime){ + goRewardActivity(user,activityId,builder,false); + } + } int[] ifOpen = sGlobalActivity.getIfOpen(); if(ifOpen!=null && ifOpen.length>0){ if(ifOpen[0]==1){ //创角 @@ -274,19 +280,20 @@ public class ActivityLogic implements IEventHandler{ continue; } if (endTime != 0 && now > endTime) { - ActivityMission activityMission = activityMissionMap.get(activityId); - if (activityMission != null) { - AbstractActivity abstractActivity = ActivityTypeEnum.getActicityType(sGlobalActivity.getId()); - if (null==abstractActivity) { - continue; - } - abstractActivity .onActivityEndSelfWithDealReward(user); - activityManager.removeActivity(activityId); - LOGGER.info("the uid={},remove the activity id ={}", user.getId(), activityId); - if (builder != null) { - builder.addCloseActivityId(activityId); - } - } +// ActivityMission activityMission = activityMissionMap.get(activityId); +// if (activityMission != null) { +// AbstractActivity abstractActivity = ActivityTypeEnum.getActicityType(sGlobalActivity.getId()); +// if (null==abstractActivity) { +// continue; +// } +// abstractActivity .onActivityEndSelfWithDealReward(user); +// activityManager.removeActivity(activityId); +// LOGGER.info("the uid={},remove the activity id ={}", user.getId(), activityId); +// if (builder != null) { +// builder.addCloseActivityId(activityId); +// } +// } + goRewardActivity(user,activityId,builder,true); continue; } ActivityMission activityMission = activityMissionMap.get(activityId); @@ -309,24 +316,29 @@ public class ActivityLogic implements IEventHandler{ openNewActivityIds.add(activityId); checkNeedOpenStore(user,sGlobalActivity.getShopId(),startTime,endTime); } else { - ActivityMission activityMission = activityMissionMap.get(activityId); - if (activityMission != null) { - AbstractActivity abstractActivity = ActivityTypeEnum.getActicityType(sGlobalActivity.getId()); - if (null==abstractActivity) { - continue; - } - abstractActivity.onActivityEndSelfWithDealReward(user); - activityManager.removeActivity(activityId); - LOGGER.info("the uid={},remove the activity id ={}", user.getId(), activityId); - if (builder != null) { - builder.addCloseActivityId(activityId); - } - } + goRewardActivity(user,activityId,builder,true); } } return openNewActivityIds; } + private static void goRewardActivity(User user,int activityId,PlayerInfoProto.ActivityUpateIndication.Builder builder,boolean isRemoveInfo) throws Exception { + ActivityMission activityMission = user.getActivityManager().getActivityMissionMap().get(activityId); + if (activityMission != null) { + AbstractActivity abstractActivity = ActivityTypeEnum.getActicityType(activityId); + if (null==abstractActivity) { + return; + } + abstractActivity.onActivityEndSelfWithDealReward(user); + if(isRemoveInfo){ + user.getActivityManager().removeActivity(activityId); + LOGGER.info("the uid={},remove the activity id ={}", user.getId(), activityId); + if (builder != null) { + builder.addCloseActivityId(activityId); + } + } + } + } public static ActivityLogic getInstance() { 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 a5b15ad33..8c67f41f8 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 @@ -119,14 +119,4 @@ class ExpectRankActivity extends AbstractActivity { } } - private Set getRankSet(int start, int end) { - Set set = new HashSet<>(); - if (start > end) { - return set; - } - for (int i = start; i <= end; i++) { - set.add(i); - } - return set; - } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ForceRankActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ForceRankActivity.java index 254c20efb..85f42b35b 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ForceRankActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ForceRankActivity.java @@ -117,16 +117,16 @@ class ForceRankActivity extends AbstractActivity { } - private Set getRankSet(int start, int end) { - Set set = new HashSet<>(); - if (start > end) { - return set; - } - for (int i = start; i <= end; i++) { - set.add(i); - } - return set; - } +// private Set getRankSet(int start, int end) { +// Set set = new HashSet<>(); +// if (start > end) { +// return set; +// } +// for (int i = start; i <= end; i++) { +// set.add(i); +// } +// return set; +// } @Override public void onActivityEndDealReward(User user) throws Exception { diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/LimitRandomCardActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/LimitRandomCardActivity.java index 2ee0038e3..93742099a 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/LimitRandomCardActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/LimitRandomCardActivity.java @@ -3,6 +3,7 @@ package com.ljsd.jieling.logic.activity; import com.ljsd.jieling.core.GlobalsDef; import com.ljsd.jieling.db.redis.RedisKey; import com.ljsd.jieling.db.redis.RedisUtil; +import com.ljsd.jieling.globals.Global; import com.ljsd.jieling.logic.activity.event.IEvent; import com.ljsd.jieling.logic.activity.event.Poster; import com.ljsd.jieling.logic.activity.event.RandomCardEvent; @@ -10,15 +11,20 @@ import com.ljsd.jieling.logic.dao.ActivityMission; import com.ljsd.jieling.logic.dao.ActivityProgressInfo; import com.ljsd.jieling.logic.dao.UserManager; 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.network.session.ISession; -import config.SActivityRewardConfig; -import config.SCHero; -import config.SSpecialConfig; +import com.ljsd.jieling.util.ItemUtil; +import config.*; +import org.springframework.data.redis.core.ZSetOperations; import util.TimeUtils; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; import java.util.function.Consumer; import java.util.function.Predicate; import java.util.stream.Stream; @@ -62,7 +68,70 @@ public class LimitRandomCardActivity extends AbstractActivity { @Override public void onActivityEnd() throws Exception { - RedisUtil.getInstence().del(RedisKey.RANDOM_CARD_RANK); + SGlobalActivity sGlobalActivity = SGlobalActivity.getsGlobalActivityMap().get(id); + if(sGlobalActivity.getOpenRanking()==0){ + return; + } + List sActivityRankingReward = SActivityRankingReward.getsActivityRankingRewardMapByActivityId(id); + if(null==sActivityRankingReward) + return; + int maxRank = 0; + int maxRewardId = 0; + Map rank2miss = new HashMap<>(); + for (SActivityRankingReward sActivityRankingReward1 : sActivityRankingReward) { + if(sActivityRankingReward1.getMaxRank()==-1){ + maxRank =-1; + maxRewardId = sActivityRankingReward1.getId(); + continue; + } + + if(maxRank!=-1) + { + maxRank = Math.max(maxRank, sActivityRankingReward1.getMaxRank()); + } + + for (Integer rank : getRankSet(sActivityRankingReward1.getMinRank(), sActivityRankingReward1.getMaxRank())) { + rank2miss.put(rank, sActivityRankingReward1.getId()); + } + } + + Set> rankInfo = RedisUtil.getInstence().getZsetreverseRangeWithScores(RedisKey.RANDOM_CARD_RANK, Integer.toString(id), 0, (maxRank==-1?0:maxRank) - 1); + 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 { + continue; + } + } + + //check 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); + RedisUtil.getInstence().del(RedisKey.getKey(RedisKey.RANDOM_CARD_PERFECT_RANK,"",false)); + RedisUtil.getInstence().del(RedisKey.getKey(RedisKey.RANDOM_CARD_RANK,"",false)); + + } } @Override 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 d307e42a3..7137f46b1 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 @@ -222,21 +222,18 @@ public class HeroLogic{ //检验消耗 boolean allowFree = false; int privilege = 0; - if(perCount == 1){ - switch (sLotterySetting.getLotteryType()){ - case 1: - privilege = VipPrivilegeType.FREE_HERO_RANDOM; + switch (sLotterySetting.getLotteryType()){ + case 1: + privilege = VipPrivilegeType.FREE_HERO_RANDOM; + break; + case 3: + privilege = VipPrivilegeType.TIME_RANDOM_FREE; + break; + default: break; - case 3: - privilege = VipPrivilegeType.TIME_RANDOM_FREE; - break; - default: - break; - } - if(privilege!=0){ - allowFree = PlayerLogic.getInstance().check(user,privilege, 1); - } - + } + if(privilege!=0){ + allowFree = PlayerLogic.getInstance().check(user,privilege, perCount); } if(!allowFree){ boolean enoughCost = false;