From e3d0b77bacd77e57a89622afedffbc0c45ec5450 Mon Sep 17 00:00:00 2001 From: grimm <1769111741@qq.com> Date: Fri, 23 Feb 2024 18:28:30 +0800 Subject: [PATCH] =?UTF-8?q?=E7=89=B9=E6=9D=83=E9=80=BB=E8=BE=91=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jieling/handler/GetPlayerInfoHandler.java | 30 ++++--- .../logic/activity/GmDialActivity.java | 3 +- .../ActivityStateChangeHandler.java | 4 +- .../ljsd/jieling/logic/dao/PlayerManager.java | 67 ++------------ .../ljsd/jieling/logic/dao/UserManager.java | 3 +- .../ljsd/jieling/logic/hero/HeroLogic.java | 20 ++--- .../jieling/logic/player/PlayerLogic.java | 89 ++++++++++++++++++- .../jieling/logic/store/BuyGoodsNewLogic.java | 2 +- 8 files changed, 129 insertions(+), 89 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java index f83538896..015d81b62 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java @@ -84,25 +84,16 @@ public class GetPlayerInfoHandler extends BaseHandler{ long now = TimeUtils.now(); playerInfoManager.setLoginTime(now); - Map privilegeTypeConfigMap = SPrivilegeTypeConfig.getsPrivilegeTypeConfigMap(); - Map vipInfo = playerInfoManager.getVipInfo(); - for(Map.Entry entry:privilegeTypeConfigMap.entrySet()){ - //如果是<4 系统内置特权 (6是新增的好感度特权收益加成 2021.9.26) - int unlockType = entry.getValue().getUnlockType(); - if(unlockType < 4 || unlockType == 6 || unlockType == 11){ - if (!vipInfo.containsKey(entry.getKey())){ - playerInfoManager.addVipInfo(entry.getKey()); - } - } - } - List list = new ArrayList<>(); Map guidePoints = playerInfoManager.getGuidePoints(); for(Map.Entry guideItem : guidePoints.entrySet()){ list.add(CommonProto.NewPlayerGuidePoint.newBuilder().setType(guideItem.getKey()).setId(guideItem.getValue()).build()); } + // 老玩家vip数据处理 +// oldUserVipHandler(user); List privilegeList = new ArrayList<>(); + Map vipInfo = playerInfoManager.getVipInfo(); for(Map.Entry vipInfoItem : vipInfo.entrySet()){ privilegeList.add(CommonProto.Privilege.newBuilder().setId(vipInfoItem.getKey()) .setUsedTimes(vipInfoItem.getValue().getCount()) @@ -258,6 +249,21 @@ public class GetPlayerInfoHandler extends BaseHandler{ MessageUtil.sendMessage(iSession, 1, MessageTypeProto.MessageType.GET_PLAYERINFO_RESPONSE_VALUE, getPlayerInfoResponse, true); } + public void oldUserVipHandler(User user){ + PlayerManager playerInfoManager = user.getPlayerInfoManager(); + Map vipInfo = playerInfoManager.getVipInfo(); + Map privilegeTypeConfigMap = SPrivilegeTypeConfig.getsPrivilegeTypeConfigMap(); + for(Map.Entry entry:privilegeTypeConfigMap.entrySet()){ + //如果是<4 系统内置特权 (6是新增的好感度特权收益加成 2021.9.26) + int unlockType = entry.getValue().getUnlockType(); + if(unlockType < 4 || unlockType == 6 || unlockType == 11){ + if (!vipInfo.containsKey(entry.getKey())){ + PlayerLogic.getInstance().uporsetVipInfo(user, entry.getKey()); + } + } + } + } + //月卡特殊处理 // private void monthCardRefresh(User user){ // try { diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/GmDialActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/GmDialActivity.java index 6ae879f5d..b73b8caf2 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/GmDialActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/GmDialActivity.java @@ -3,6 +3,7 @@ package com.ljsd.jieling.logic.activity; import com.ljsd.jieling.logic.activity.event.LuckWheelEvent; import com.ljsd.jieling.logic.activity.event.Poster; import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.logic.player.PlayerLogic; import config.SGlobalActivity; /** @@ -23,7 +24,7 @@ public class GmDialActivity extends LuckWheelNormalActivity{ super.initActivity(user); SGlobalActivity activity = SGlobalActivity.getsGlobalActivityMap().get(id); if (activity.getPrivilege() != 0){ - user.getPlayerInfoManager().addVipInfo(activity.getPrivilege()); + PlayerLogic.getInstance().uporsetVipInfo(user, activity.getPrivilege()); } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/eventhandler/ActivityStateChangeHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/eventhandler/ActivityStateChangeHandler.java index 9a827f453..34a12dc8d 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/eventhandler/ActivityStateChangeHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/eventhandler/ActivityStateChangeHandler.java @@ -71,7 +71,9 @@ public class ActivityStateChangeHandler implements IEventHandler { ActivityMission activityMissionWillOpen = user.getActivityManager().getActivityMissionMap().get(s.getId()); if(activityMissionWillOpen!=null && activityMissionWillOpen.getActivityState() == ActivityType.UNOPEN_STATE){ AbstractActivity abstractActivity = ActivityTypeEnum.getActicityById(s.getId()); - abstractActivity.setOpenState(user,ActivityType.OPEN_STATE); + if (abstractActivity != null) { + abstractActivity.setOpenState(user,ActivityType.OPEN_STATE); + } ActivityLogic.getInstance().sendActivityInfo(user,s.getId()); } }); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PlayerManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PlayerManager.java index 482a8a851..e23c5fc68 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PlayerManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PlayerManager.java @@ -71,7 +71,7 @@ public class PlayerManager extends MongoBase { private final Map guidePoints = new HashMap<>(); - private final Map vipInfo = new HashMap<>(); + private Map vipInfo = new HashMap<>(); private final Set vipGoodInfo = new HashSet<>();// 特权商品礼包 private Set reds = new CopyOnWriteArraySet<>(); private NewRechargeInfo newRechargeInfo; @@ -523,7 +523,12 @@ public class PlayerManager extends MongoBase { return vipInfo; } - public void updateVipInfo(int unlockType,int condition) { + public void setVipInfo(Map vipInfo) { + this.vipInfo = vipInfo; + updateString("vipInfo", vipInfo); + } + + public void updateVipInfo(int unlockType, int condition) { Map> conditionMap = SPrivilegeTypeConfig.conditionMap.get(unlockType); if (conditionMap == null || conditionMap.isEmpty()){ return; @@ -562,68 +567,11 @@ public class PlayerManager extends MongoBase { updateString("vipInfo", vipInfo); } - public void vipFlush(Set removePrivileges) { - if (vipInfo.isEmpty()) { - return; - } - for (Integer remove : removePrivileges) { - vipInfo.remove(remove); - } - for (Map.Entry entry : vipInfo.entrySet()) { - Integer id = entry.getKey(); - VipInfo info = entry.getValue(); - SPrivilegeTypeConfig sPrivilegeTypeConfig = SPrivilegeTypeConfig.getsPrivilegeTypeConfigMap().get(id); - if (sPrivilegeTypeConfig == null) { - continue; - } - int refreshType = sPrivilegeTypeConfig.getRefreshType()[0]; - if (refreshType == 1 && info.getCount() > 0) { - VipInfo refreshVipInfo = new VipInfo(); - refreshVipInfo.setCount(0); - refreshVipInfo.setEffectTime(info.getEffectTime()); - vipInfo.put(id,refreshVipInfo); - } - } - updateString("vipInfo", vipInfo); - } - public void clearVipCount(int priviliageId){ vipInfo.put(priviliageId,new VipInfo()); updateString("vipInfo", vipInfo); } - public void addVipInfo(int privilegeId){ - SPrivilegeTypeConfig config = SPrivilegeTypeConfig.getsPrivilegeTypeConfigMap().get(privilegeId); - if (config==null){ - return; - } - int maxTime; - int nowInt = TimeUtils.nowInt(); - VipInfo newVipInfo = new VipInfo(); - if(config.getContinueTime()!=null && config.getContinueTime().length>0){ - if(vipInfo.containsKey(privilegeId)){ - VipInfo info = vipInfo.get(privilegeId); - if(config.getContinueTime()[1]==1 && nowInt < info.getEffectTime()){ - boolean aBool = config.getCondition().length == 1 && config.getCondition()[0][0] == 0; - if(!aBool){ - newVipInfo.setCount(info.getCount()-config.getCondition()[0][1]); - newVipInfo.setEffectTime(info.getEffectTime()); - vipInfo.put(privilegeId,newVipInfo); - updateString("vipInfo", this.vipInfo); - } - return; - } - maxTime = Math.max(nowInt, info.getEffectTime()) + config.getContinueTime()[0]; - }else { - maxTime = nowInt + config.getContinueTime()[0]; - } - maxTime = (int)(TimeUtils.getLastOrUnderHour(maxTime*1000L,0,0,true)/1000); - newVipInfo.setEffectTime(maxTime); - } - vipInfo.put(privilegeId,newVipInfo); - updateString("vipInfo", vipInfo); - } - /** * 根据时间添加权限 * @param privilageId 权限id @@ -642,7 +590,6 @@ public class PlayerManager extends MongoBase { /** * 刷新整个类型的次数 - * @param privilegeType */ public void refreshVipByType(int privilegeType){ List sPrivilegeTypeConfigs = SPrivilegeTypeConfig.privilegeByType.get(privilegeType); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserManager.java index b92ed1817..e18758577 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserManager.java @@ -6,10 +6,8 @@ import com.ljsd.jieling.config.clazzStaticCfg.CommonStaticConfig; import com.ljsd.jieling.core.GlobalsDef; import com.ljsd.jieling.db.mongo.MongoUtil; import com.ljsd.jieling.globals.BIReason; -import com.ljsd.jieling.ktbeans.KtEventUtils; import com.ljsd.jieling.ktbeans.ReportEventEnum; import com.ljsd.jieling.ktbeans.ReportUtil; -import com.ljsd.jieling.ktbeans.parmsBean.ParamEventBean; import com.ljsd.jieling.logic.OnlineUserManager; import com.ljsd.jieling.logic.activity.ActivityLogic; import com.ljsd.jieling.logic.activity.crossService.CrossServiceLogic; @@ -133,6 +131,7 @@ public class UserManager { playerManager.setSendDays(1); playerManager.updateVipInfo(GlobalsDef.LEVEL_UNLOCK_PRIVILEGE,1); playerManager.updateVipInfo(GlobalsDef.VIP_UNLOCK_PRIVILEGE,0); + playerManager.updateVipInfo(GlobalsDef.LIKABLE_UNLOCK,0); playerManager.updateVipInfo(GlobalsDef.GOD_LV_UNLOCK,0); playerManager.updateVipInfo(GlobalsDef.RENOWN_LV_UNLOCK,0); playerManager.updateVipInfo(GlobalsDef.BRUSHING_LV_UNLOCK,0); 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 72ef88aaf..811264665 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 @@ -7,8 +7,6 @@ import com.ljsd.jieling.config.clazzStaticCfg.CommonStaticConfig; import com.ljsd.jieling.config.clazzStaticCfg.HeroStaticConfig; import com.ljsd.jieling.core.FunctionIdEnum; import com.ljsd.jieling.core.GlobalsDef; -import com.ljsd.jieling.db.redis.RedisKey; -import com.ljsd.jieling.db.redis.RedisUtil; import com.ljsd.jieling.exception.ErrorCode; import com.ljsd.jieling.exception.ErrorCodeException; import com.ljsd.jieling.globals.BIReason; @@ -157,16 +155,17 @@ public class HeroLogic { HeroManager heroManager = user.getHeroManager(); Set mustSet = new HashSet<>(); Map> randomPoolByType = heroManager.getRandomPoolByType(); + Map poolRandom = randomPoolByType.get(mergePool); //设置用户必出计数器 if (specialConfigs != null && !specialConfigs.isEmpty()) { if (!randomPoolByType.containsKey(mergePool)) { randomPoolByType.put(mergePool, new HashMap<>()); for (SLotterySpecialConfig config : specialConfigs) { - randomPoolByType.get(mergePool).put(config.getDifferentType(), 0); + poolRandom.put(config.getDifferentType(), 0); } } //保底次数计算 - for (Map.Entry countEntry : randomPoolByType.get(mergePool).entrySet()) { + for (Map.Entry countEntry : poolRandom.entrySet()) { SLotterySpecialConfig config = null; for (SLotterySpecialConfig everyConfig : specialConfigs) { if (everyConfig.getDifferentType() != countEntry.getKey()) { @@ -208,7 +207,6 @@ public class HeroLogic { // LOGGER.info("随机到了{}-->对应star-->{}", sLotteryRewardConfig.getId(), currStarId); } } else { - //有必出时比较各个优先级,取优先级高的 int maxId = 0; for (int mustId : mustSet) { @@ -231,20 +229,20 @@ public class HeroLogic { if (sLotteryRewardConfig == null) { throw new ErrorCodeException(ErrorCode.SYS_ERROR_CODE); } - if (randomPoolByType.get(mergePool) != null) { - for (int key : randomPoolByType.get(mergePool).keySet()) { + if (poolRandom != null) { + for (int key : poolRandom.keySet()) { //如果生效次数是0可重置 List lotteryListByDifferentType = SLotterySpecialConfig.getLotteryListByDifferentType(key); if (currStarId >= key && lotteryListByDifferentType != null && lotteryListByDifferentType.iterator().hasNext() && lotteryListByDifferentType.iterator().next().getMin_num() == 0) { // LOGGER.info("清除计数{}下的--->{}", mergePool, key); - randomPoolByType.get(mergePool).put(key, 0); + poolRandom.put(key, 0); } else { - int curValue = randomPoolByType.get(mergePool).getOrDefault(key, 0); - randomPoolByType.get(mergePool).put(key, curValue + 1); + int curValue = poolRandom.getOrDefault(key, 0); + poolRandom.put(key, curValue + 1); } } } - heroManager.updateRandomPoolByType(mergePool, randomPoolByType.get(mergePool)); + heroManager.updateRandomPoolByType(mergePool, poolRandom); int result = sLotteryRewardConfig.getId(); heroManager.addRandomPoolInfo(sLotteryRewardConfig.getPool()); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/player/PlayerLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/player/PlayerLogic.java index cffb7c9d3..90d08aa7b 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/player/PlayerLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/player/PlayerLogic.java @@ -374,7 +374,7 @@ public class PlayerLogic { LOGGER.info("特权刷新删除日志2:{}-{}-{}",user.getId(), key, info.getEffectTime()); } } - playerInfoManager.vipFlush(removePrivileges); + vipFlush(user, removePrivileges); playerInfoManager.setHadTakeDailyBoxVip(-1); // vip刷新后才能发给前端 if(fBuilder != null){ @@ -390,6 +390,93 @@ public class PlayerLogic { } } + /** + * vip刷新 + * @param user + * @param removeIds + */ + public void vipFlush(User user, Set removeIds){ + PlayerManager playerManager = user.getPlayerInfoManager(); + Map vipInfo = playerManager.getVipInfo(); + if (vipInfo == null || vipInfo.isEmpty()) { + LOGGER.error("vip刷新,vipinfo为空,uid:{}",user.getId()); + return; + } + for (Map.Entry entry : vipInfo.entrySet()) { + Integer id = entry.getKey(); + if (removeIds.contains(id)){ + continue; + } + VipInfo info = entry.getValue(); + SPrivilegeTypeConfig sPrivilegeTypeConfig = SPrivilegeTypeConfig.getsPrivilegeTypeConfigMap().get(id); + if (sPrivilegeTypeConfig == null) { + LOGGER.error("vip新增,vipid查询表不存在,已删除,uid:{},vipid:{}",user.getId(),id); + removeIds.add(id); + continue; + } + int refreshType = sPrivilegeTypeConfig.getRefreshType()[0]; + if (refreshType == 1 && info.getCount() > 0) { + VipInfo refreshVipInfo = new VipInfo(); + refreshVipInfo.setCount(0); + refreshVipInfo.setEffectTime(info.getEffectTime()); + vipInfo.put(id,refreshVipInfo); + } + } + LOGGER.error("vip刷新,删除前的vip数量,uid:{},vipnum:{},removeIds:{}",user.getId(),vipInfo.size(),removeIds); + // 删除vip + for (Integer remove : removeIds) { + vipInfo.remove(remove); + } + LOGGER.error("vip刷新,删除后的vip数量,uid:{},vipnum:{}",user.getId(),vipInfo.size()); + playerManager.setVipInfo(vipInfo); + } + + /** + * 更新vip信息,不存在则新增 + * @param user + * @param privilegeId + */ + public void uporsetVipInfo(User user, int privilegeId){ + SPrivilegeTypeConfig config = SPrivilegeTypeConfig.getsPrivilegeTypeConfigMap().get(privilegeId); + if (config == null){ + LOGGER.error("vip新增,vipid查询表不存在,uid:{},vipid:{}",user.getId(),privilegeId); + return; + } + int maxTime; + int nowInt = TimeUtils.nowInt(); + PlayerManager playerInfoManager = user.getPlayerInfoManager(); + Map vipInfo = playerInfoManager.getVipInfo(); + VipInfo newVipInfo = new VipInfo(); + if(config.getContinueTime()!=null && config.getContinueTime().length>0){ + if(vipInfo.containsKey(privilegeId)){ + VipInfo info = vipInfo.get(privilegeId); + if(config.getContinueTime()[1]==1 && nowInt < info.getEffectTime()){ + boolean aBool = config.getCondition().length == 1 && config.getCondition()[0][0] == 0; + if(!aBool){ + newVipInfo.setCount(info.getCount()-config.getCondition()[0][1]); + newVipInfo.setEffectTime(info.getEffectTime()); + vipInfo.put(privilegeId,newVipInfo); + playerInfoManager.setVipInfo(vipInfo); + } + return; + } + maxTime = Math.max(nowInt, info.getEffectTime()) + config.getContinueTime()[0]; + }else { + maxTime = nowInt + config.getContinueTime()[0]; + } + maxTime = (int)(TimeUtils.getLastOrUnderHour(maxTime*1000L,0,0,true)/1000); + newVipInfo.setEffectTime(maxTime); + } + vipInfo.put(privilegeId,newVipInfo); + playerInfoManager.setVipInfo(vipInfo); + } + + /** + * 编译特权为proto类型 + * @param user + * @param collection + * @return + */ public Set getPrivilege(User user, Collection collection) { Map vipInfo = user.getPlayerInfoManager().getVipInfo(); HashSet set = new HashSet<>(); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsNewLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsNewLogic.java index 1deecd224..9f924b5bd 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsNewLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsNewLogic.java @@ -605,7 +605,7 @@ public class BuyGoodsNewLogic { if(privilegeType == VipPrivilegeType.ADVENTURE_BASE_REWARD){ CombatLogic.getInstance().getNewAdventureReward(user,true,TimeUtils.nowInt()); } - user.getPlayerInfoManager().addVipInfo(privilege); + PlayerLogic.getInstance().uporsetVipInfo(user, privilege); VipInfo vipInfo = user.getPlayerInfoManager().getVipInfo().get(privilege); indication.addInfos(CommonProto.Privilege.newBuilder().setId(privilege).setUsedTimes(vipInfo.getCount()).setEffectTime(vipInfo.getEffectTime()).build()); }