diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/activity/GetSomeActivityInfoHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/activity/GetSomeActivityInfoHandler.java index cdd241d4d..af52dab0d 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/activity/GetSomeActivityInfoHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/activity/GetSomeActivityInfoHandler.java @@ -32,7 +32,7 @@ public class GetSomeActivityInfoHandler extends BaseHandler activityInfos =ActivityLogic.getInstance().getActivityInfos(activityUpdateMap, user.getPlayerInfoManager().getCreateTime()); + List activityInfos =ActivityLogic.getInstance().getActivityInfos(user,activityUpdateMap, user.getPlayerInfoManager().getCreateTime()); PlayerInfoProto.GetSomeActitityInfoRespone build = PlayerInfoProto.GetSomeActitityInfoRespone.newBuilder().addAllActivityInfo(activityInfos).build(); MessageUtil.sendMessage(iSession,1, MessageTypeProto.MessageType.GET_SOME_ACTIVITY_INFO_RESPONSE_VALUE,build); } 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 a94557413..3f85b181b 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 @@ -370,12 +370,12 @@ public abstract class AbstractActivity implements IActivity, IEventHandler { takeAllReward(sessionByUid); } - List getAllMissInfo(ActivityMission activityMission) { - return getAllMissInfo(activityMission, null); + List getAllMissInfo(User user,ActivityMission activityMission) { + return getAllMissInfo(user,activityMission,null); } @Override - public List getAllMissInfo(ActivityMission activityMission, Set filter) { + public List getAllMissInfo(User user,ActivityMission activityMission, Set filter) { Map activityProgressInfoMap = activityMission.getActivityMissionMap(); List missionInfos = new ArrayList<>(activityProgressInfoMap.size()); for (Map.Entry missionProgress : activityProgressInfoMap.entrySet()) { @@ -396,10 +396,19 @@ public abstract class AbstractActivity implements IActivity, IEventHandler { */ public void sendActivityProgress(ISession session, ActivityMission activityMission, Set filterMissId) { PlayerInfoProto.ActivityUpateProgressIndication.Builder builder = PlayerInfoProto.ActivityUpateProgressIndication.newBuilder(); - builder.setActivityInfo(CommonProto.ActivityInfo.newBuilder().setValue(activityMission.getV()).addAllMission(getAllMissInfo(activityMission, filterMissId)).setActivityId(id)); if (session != null) { - MessageUtil.sendIndicationMessage(session, 1, MessageTypeProto.MessageType.ACTIVITY_UPDATE_PROGRESS_INDICATION_VALUE, builder.build(), true); + User user = UserManager.getUserInMem(session.getUid()); + if (user != null && activityMission != null){ + List missInfo = getAllMissInfo(user, activityMission, filterMissId); + CommonProto.ActivityInfo.Builder builder1 = CommonProto.ActivityInfo.newBuilder() + .setValue(activityMission.getV()) + .addAllMission(missInfo) + .setActivityId(id); + builder.setActivityInfo(builder1); + MessageUtil.sendIndicationMessage(session, 1, MessageTypeProto.MessageType.ACTIVITY_UPDATE_PROGRESS_INDICATION_VALUE, builder.build(), true); + } } + } public void sendActivityProgress(User user, ActivityMission activityMission, Set filterMissId) { 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 14a9d2ad1..7f05881be 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 @@ -241,7 +241,7 @@ public class ActivityLogic implements IEventHandler{ sendLuckWheelPool=true; activityUpdateMap.put(activityId, activityMissionMap.get(activityId)); } - List activityInfos = getActivityInfos(activityUpdateMap, user1.getPlayerInfoManager().getCreateTime()); + List activityInfos = getActivityInfos(user1,activityUpdateMap, user1.getPlayerInfoManager().getCreateTime()); builder.addAllActivityInfo(activityInfos); if(sendLuckWheelPool){ @@ -519,7 +519,7 @@ public class ActivityLogic implements IEventHandler{ long createTime = user.getPlayerInfoManager().getCreateTime(); int rewardResponseValue = MessageTypeProto.MessageType.GET_ALL_ACTIVITY_RESPONSE_VALUE; checkActivityOfUser(user, null); - List activityInfoList = getActivityInfos(user.getActivityManager().getActivityMissionMap(), createTime); + List activityInfoList = getActivityInfos(user,user.getActivityManager().getActivityMissionMap(), createTime); PlayerInfoProto.GetAllActivityResponse.Builder builder = PlayerInfoProto.GetAllActivityResponse.newBuilder(); builder.addAllActivityInfo(activityInfoList); @@ -543,7 +543,7 @@ public class ActivityLogic implements IEventHandler{ * @param createTime * @return */ - public List getActivityInfos(Map activityMissionMap, long createTime) { + public List getActivityInfos(User user,Map activityMissionMap, long createTime) { Map sGlobalActivityMap = SGlobalActivity.getsGlobalActivityMap(); List activityInfoList = new ArrayList<>(activityMissionMap.size()); for (Map.Entry activityState : activityMissionMap.entrySet()) { @@ -601,7 +601,7 @@ public class ActivityLogic implements IEventHandler{ LOGGER.error(sGlobalActivity.getId()+":活动类型不存在"); continue; } - List missionInfos =abstractActivity.getAllMissInfo(activityMission); + List missionInfos =abstractActivity.getAllMissInfo(user,activityMission); CommonProto.ActivityInfo build = CommonProto.ActivityInfo.newBuilder() .setActivityId(activityId) .addAllMission(missionInfos) @@ -627,7 +627,7 @@ public class ActivityLogic implements IEventHandler{ ||ActivityType.LUCK_WHEEL_ADVANCE == SGlobalActivity.getsGlobalActivityMap().get(activityId).getType()) sendLuckWheelPool=true; activityUpdateMap.put(activityId, activityMissionMap.get(activityId)); - List activityInfos = getActivityInfos(activityUpdateMap, user.getPlayerInfoManager().getCreateTime()); + List activityInfos = getActivityInfos(user,activityUpdateMap, user.getPlayerInfoManager().getCreateTime()); builder.addAllActivityInfo(activityInfos); if(sendLuckWheelPool){ sendLuckWheelPool(user,session); @@ -767,7 +767,7 @@ public class ActivityLogic implements IEventHandler{ long createTime = user.getPlayerInfoManager().getCreateTime(); int startTime = (int) (ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),createTime, 1) / 1000); int endTime = (int) (ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),createTime, 2) / 1000); - List missionInfos = abstractActivity.getAllMissInfo(activityMission); + List missionInfos = abstractActivity.getAllMissInfo(user,activityMission); fBuilder.addActivityInfo(CommonProto.ActivityInfo.newBuilder().setValue(activityMission.getV()).setActivityId(activityId).addAllMission(missionInfos).setStartTime(startTime).setEndTime(endTime).setReallyOpen(activityMission.getOpenType()).build()); fBuilder.setHadLuckTime( user.getPlayerInfoManager().getLuckWheelLimitTime()); fBuilder.setHadAdvanceLuckTime(user.getPlayerInfoManager().getLuckAdvanceWheelLimitTime()); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/IActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/IActivity.java index 9cfcc5a47..5df5fa691 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/IActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/IActivity.java @@ -54,6 +54,6 @@ public interface IActivity { void onActivityEndOnMySelf(User user) throws Exception; - List getAllMissInfo(ActivityMission activityMission, Set filter); + List getAllMissInfo(User user,ActivityMission activityMission, Set filter); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/LevelExpectActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/LevelExpectActivity.java index 1f475483e..2a11cacec 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/LevelExpectActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/LevelExpectActivity.java @@ -63,7 +63,7 @@ public class LevelExpectActivity extends ExpectRankActivity { @Override - public List getAllMissInfo(ActivityMission activityMission, Set filter) { + public List getAllMissInfo(User user,ActivityMission activityMission, Set filter) { Map activityProgressInfoMap = activityMission.getActivityMissionMap(); Map mapValues = RedisUtil.getInstence().getMapValues(RedisKey.ACTIVITY_GIFT_LIMIT, String.valueOf(id), Integer.class, Integer.class); List missionInfos = new ArrayList<>(activityProgressInfoMap.size()); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/SuperBoxActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/SuperBoxActivity.java index 6e023629a..4884fe62c 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/SuperBoxActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/SuperBoxActivity.java @@ -5,6 +5,7 @@ import com.ljsd.jieling.globals.Global; import com.ljsd.jieling.jbean.ActivityMission; import com.ljsd.jieling.jbean.ActivityProgressInfo; import com.ljsd.jieling.logic.OnlineUserManager; +import com.ljsd.jieling.logic.activity.event.ActivityStateChangeEvent; import com.ljsd.jieling.logic.activity.event.IEvent; import com.ljsd.jieling.logic.activity.event.Poster; import com.ljsd.jieling.logic.activity.event.SuperBoxEvent; @@ -19,6 +20,7 @@ import config.SGlobalActivity; import config.SRechargeCommodityNewConfig; import config.SSurpriseBox; import manager.STableManager; +import rpc.protocols.CommonProto; import util.TimeUtils; import java.util.*; @@ -49,17 +51,9 @@ public class SuperBoxActivity extends AbstractActivity { @Override public void initActivity(User user) throws Exception { ActivityMission mission = new ActivityMission(); - // 读表获取阶段奖励信息 - Map boxMap = SSurpriseBox.map.getOrDefault(id,new HashMap<>()); - if (boxMap.isEmpty()){ - LOGGER.error("惊喜礼盒初始化失败,活动id:"+id); - } - List list = boxMap.values().stream().mapToInt(SSurpriseBox::getId).boxed().collect(Collectors.toList()); // 初始化阶段奖励 - ActivityLogic.getInstance().initOtherMission(mission, list); + ActivityLogic.getInstance().initOtherMission(mission, new ArrayList<>()); user.getActivityManager().getActivityMissionMap().put(id, mission); - // 修改状态 - updateState(user); LOGGER.info("惊喜礼盒初始化..."+id); } @@ -74,8 +68,10 @@ public class SuperBoxActivity extends AbstractActivity { User user = UserManager.getUser(event1.getUserId()); // 礼包处理 giftHandle(user, event1.getGiftId()); - // 状态刷新 - updateState(user); + + // 客户端推送 + ISession session = OnlineUserManager.getSessionByUid(user.getId()); + sendActivityProgress(session, user.getActivityManager().getActivityMissionMap().get(id), null); } /** @@ -100,10 +96,9 @@ public class SuperBoxActivity extends AbstractActivity { for (SSurpriseBox box : boxes) { if (box.getPackId() == giftId){ // 当前礼包状态处理 - ActivityProgressInfo current = missionMap.get(box.getId()); - if (current != null && !checkBuyGiftCount(user,giftId)){ + if (!checkBuyGiftCount(user,giftId)){ + ActivityProgressInfo current = new ActivityProgressInfo(); current.setState(ActivityType.HAD_TAKED); - current.setProgrss(8); missionMap.put(box.getId(),current); } break; @@ -117,71 +112,123 @@ public class SuperBoxActivity extends AbstractActivity { * 不要问我为啥写的这么恶心,因为我自己也不知怎么写出来的 * @param user */ - private void updateState(User user){ + private int getProgress(User user,int missionId){ + // 活动信息是否为null + ActivityMission mission = user.getActivityManager().getActivityMissionMap().get(id); + int days = mission.getV(); + // 库 + ActivityProgressInfo progressInfo = Optional.ofNullable(mission.getActivityMissionMap()).map(v->v.get(missionId)).orElse(null); + // 表 + SSurpriseBox box = Optional.ofNullable(SSurpriseBox.map.get(id)).map(v -> v.get(missionId)).orElse(null); + // 返回值 + int result = 0; + // 极为恶心的循环,包含超多的if-else + if (box != null){ + if (progressInfo != null && progressInfo.getState() == ActivityType.HAD_TAKED){ + // 已购买 + result = 8; + }else { + // 未购买, 是否解锁 + if (days >= box.getUnlockDay()){ + // 已解锁, 可买天数 + if (days >= box.getBuyDay()){ + // 可买, 是否购买前置礼包 + if (checkBuyAgo(user,box.getId())){ + // 已购买前置. 是否需要特权, 是否激活特权 + result = checkRule(user,box.getRule())?1:4; + }else { + // 未购买前置 + result = 3; + } + }else { + // 不可买 + result = 2; + } + }else { + // 未解锁, 是否可见 + if (days >= box.getVisibleDay()){ + // 可见, 是否可预览 + result = days >= box.getViewDay()?6:7; + }else { + // 不可见 + result = 5; + } + } + } + + } + return result; + } + + + @Override + public List getAllMissInfo(User user,ActivityMission activityMission, Set filter) { long now = TimeUtils.now(); long start = getSrartTime(); long end = getEndTime(); // 验证活动是否开启 if (now < start || now > end){ - return; + return new ArrayList<>(); } - ActivityMission mission = user.getActivityManager().getActivityMissionMap().get(id); - if (mission == null){ - return; + if (activityMission == null){ + return new ArrayList<>(); } - // 计算过去了几天 - int days = TimeUtils.getSoFarWentDays(start, now)+1; - mission.setV(days); - // mission 单个礼包 - Map missionMap = mission.getActivityMissionMap(); - Map boxMap = SSurpriseBox.map.get(id); - // 极为恶心的循环,包含超多的if-else - for (Map.Entry entry : missionMap.entrySet()) { - int k = entry.getKey(); - ActivityProgressInfo v = entry.getValue(); - int progrss = v.getProgrss(); - // 是否已购买 - if (progrss == 8){ - // 已购买 + // 更新记录天数 + activityMission.setV(TimeUtils.getSoFarWentDays(start, now)+1); + // 库里存储的活动档位信息 + Map progressInfoMap = activityMission.getActivityMissionMap(); + // 返回对象 + List missionInfos = new ArrayList<>(progressInfoMap.size()); + // 策划表的配置 + Map boxMap = SSurpriseBox.map.getOrDefault(id,new HashMap<>()); + for (Map.Entry entry : boxMap.entrySet()) { + // 参数初始化 + int missionId = entry.getKey(); + int progress = getProgress(user,missionId); + if (progress == 0){ continue; } + int state = progress==8?1:0; + // 封装proto并返回 + CommonProto.ActivityInfo.MissionInfo build = CommonProto.ActivityInfo.MissionInfo.newBuilder() + .setMissionId(missionId) + .setProgress(progress) + .setState(state) + .build(); + missionInfos.add(build); + } + return missionInfos; + } - SSurpriseBox box = boxMap.get(k); - // 未购买, 是否解锁 - if (days >= box.getUnlockDay()){ - // 已解锁, 可买天数 - if (days >= box.getBuyDay()){ - // 可买, 是否购买前置礼包 - if (checkBuyAgo(user,box.getId())){ - // 已购买前置. 是否需要特权, 是否激活特权 - progrss = checkRule(user,box.getRule())?1:4; - }else { - // 未购买前置 - progrss = 3; - } - }else { - // 不可买 - progrss = 2; - } - }else { - // 未解锁, 是否可见 - if (days >= box.getVisibleDay()){ - // 可见, 是否可预览 - progrss = days >= box.getViewDay()?6:7; - }else { - // 不可见 - progrss = 5; - } - } - v.setProgrss(progrss); - mission.getActivityMissionMap().put(k,v); + /** + * 检查活动是否完成或者可以领取 + * @param uid + * @param activityId + * @param activityMission + * @return + */ + @Override + public boolean checkActivityMissionFinishAndTake(int uid, int activityId, ActivityMission activityMission) { + Map activityProgressInfoMap = activityMission.getActivityMissionMap(); + if (activityProgressInfoMap.isEmpty()) { + return false; } - LOGGER.info("========================惊喜礼盒状态刷新,uid={}",user.getId()); + // 策划表的配置 + Map boxMap = SSurpriseBox.map.getOrDefault(id,new HashMap<>()); + for (Map.Entry entry : boxMap.entrySet()) { + ActivityProgressInfo progressInfo = activityProgressInfoMap.get(entry.getKey()); + if (progressInfo == null || progressInfo.getState() == ActivityType.WILL_TAKE){ + return false; + } + } - // 客户端推送 - ISession session = OnlineUserManager.getSessionByUid(user.getId()); - sendActivityProgress(session, mission, null); + SGlobalActivity sGlobalActivity = SGlobalActivity.getsGlobalActivityMap().get(activityId); + if(sGlobalActivity.getResetGrade()==0){ + activityMission.setActivityState(ActivityType.FINISH_STATE); + Poster.getPoster().dispatchEvent(new ActivityStateChangeEvent(uid,activityId,ActivityType.FINISH_STATE)); + } + return true; } /** @@ -231,20 +278,24 @@ public class SuperBoxActivity extends AbstractActivity { * @return */ private boolean checkBuyAgo(User user, int boxId){ - boolean result = true; // 获取消息 Map missionMap = user.getActivityManager().getActivityMissionMap().get(id).getActivityMissionMap(); SSurpriseBox box = STableManager.getConfig(SSurpriseBox.class).get(boxId); // 非空 - if (!missionMap.isEmpty() && box != null){ - // 前置礼包状态验证 - ActivityProgressInfo info = missionMap.get(box.getLimitPackFId()); - // info为null代表没有前置条件, state==2代表已买过 - if (info != null && info.getState() == ActivityType.WILL_TAKE){ - result = false; - } + if (missionMap.isEmpty() || box == null){ + return false; } - return result; + // 0表示没有前置条件 + if (box.getLimitPackFId() == 0){ + return true; + } + // 前置礼包状态验证 + ActivityProgressInfo info = missionMap.get(box.getLimitPackFId()); + // info为null代表没有前置条件, state==1代表已买过 + if (info != null && info.getState() == ActivityType.HAD_TAKED){ + return true; + } + return false; } /** @@ -292,6 +343,11 @@ public class SuperBoxActivity extends AbstractActivity { return false; } + /** + * 获取全部不能购买的礼包 + * @param user + * @return + */ @Override public Set getCloseGoods(User user){ HashSet set = new HashSet<>(); @@ -302,14 +358,12 @@ public class SuperBoxActivity extends AbstractActivity { // 活动页签 Map map = mission.getActivityMissionMap(); Map boxMap = SSurpriseBox.map.get(id); - // 活动奖励条件 - for (Map.Entry entry2 : map.entrySet()) { - if (entry2.getValue().getProgrss() != 1){ - SSurpriseBox box = boxMap.getOrDefault(entry2.getKey(), null); - if (box == null){ - continue; - } - set.add(box.getPackId()); + + for (Map.Entry entry : boxMap.entrySet()) { + int progress = getProgress(user, entry.getKey()); + // 不可购买的礼包 + if (progress != 1 || progress == 0){ + set.add(entry.getValue().getPackId()); } } return set;