diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobalDataManaager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobalDataManaager.java index be2a0c533..803bdb410 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobalDataManaager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobalDataManaager.java @@ -353,21 +353,31 @@ public class GlobalDataManaager implements IManager { public static void flushGoodsTimes(User user){ Map buyGoodsTimes = user.getPlayerInfoManager().getRechargeInfo().getBuyGoodsTimes(); - if(buyGoodsTimes!=null && !buyGoodsTimes.isEmpty()){ - Iterator iterator = buyGoodsTimes.keySet().iterator(); - boolean update = false; - while (iterator.hasNext()){ - Integer goodsId = iterator.next(); - if(SRechargeCommodityConfig.rechargeCommodityConfigMap.get(goodsId).getDailyUpdate() == 1){ - buyGoodsTimes.put(goodsId,0); + boolean update = false; - update =true; - } + long now = TimeUtils.now(); + Map refreshBagMap = user.getPlayerInfoManager().getRechargeInfo().getRefreshBagMap(); + Iterator> iterator = refreshBagMap.entrySet().iterator(); + Set updateBuyTimesGoodsId = new HashSet<>(); + while (iterator.hasNext()){ + Map.Entry next = iterator.next(); + if(next.getValue()<=now){ + updateBuyTimesGoodsId.add(next.getKey()); + refreshBagMap.put(next.getKey(),next.getValue() + SRechargeCommodityConfig.rechargeCommodityConfigMap.get(next.getKey()).getDailyUpdate() * TimeUtils.ONE_DAY); + update =true; } - if(update){ + } + if(update){ + if(buyGoodsTimes!=null && !buyGoodsTimes.isEmpty()){ + updateBuyTimesGoodsId.forEach(e->{ + if(buyGoodsTimes.containsKey(e)){ + buyGoodsTimes.put(e,0); + } + + }); + user.getPlayerInfoManager().getRechargeInfo().clearCacheSendId(); user.getPlayerInfoManager().getRechargeInfo().setBuyGoodsTimes(buyGoodsTimes); - } } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/RechargeInfo.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/RechargeInfo.java index a06827477..6b5a03070 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/RechargeInfo.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/RechargeInfo.java @@ -21,6 +21,8 @@ public class RechargeInfo extends MongoBase{ private volatile Set cacheSendedIds = new ConcurrentSet<>(); private Map levelBagMap = new HashMap<>(); + private Map refreshBagMap = new HashMap<>(); + private Map buyGoodsTimes = new HashMap<>(); private Map goodseDurationMap = new HashMap<>(); @@ -48,6 +50,11 @@ public class RechargeInfo extends MongoBase{ cacheSendedIds.clear(); } + public void setRefreshBagMap(Map refreshBagMap) { + this.refreshBagMap = refreshBagMap; + updateString("refreshBagMap", refreshBagMap); + } + //检测商品是否过期 public Set checkIsGoodsTypeOverTime(){ int now = (int)(System.currentTimeMillis()/1000); @@ -226,4 +233,8 @@ public class RechargeInfo extends MongoBase{ updateString("dyGoodsCanBuyTimes",dyGoodsCanBuyTimes); this.dyGoodsCanBuyTimes = dyGoodsCanBuyTimes; } + + public Map getRefreshBagMap() { + return refreshBagMap; + } } 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 62f04de28..b85ce60c9 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 @@ -15,6 +15,7 @@ import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.hero.HeroLogic; import com.ljsd.jieling.logic.mission.GameEvent; import com.ljsd.jieling.logic.player.PlayerLogic; +import com.ljsd.jieling.logic.store.BuyGoodsLogic; import com.ljsd.jieling.util.ItemUtil; import config.SGameSetting; import config.SPlayerLevelConfig; @@ -90,7 +91,7 @@ public class UserManager { SPlayerLevelConfig sPlayerLevelConfig = SPlayerLevelConfig.getsPlayerLevelConfigMap().get(1); playerManager.setMaxStamina(sPlayerLevelConfig.getMaxEnergy()); playerManager.setRideLevel(1); - + BuyGoodsLogic.initOwernBagInfo(user); PlayerLogic.getInstance().vipflushEveryDay(user,null); ActivityLogic.getInstance().newPlayerOpenActivityMission(user); PlayerLogic.getInstance().playerInfoUpdate(user); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsLogic.java index e1bc7614a..732d19ce8 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsLogic.java @@ -353,6 +353,7 @@ public class BuyGoodsLogic { Map buyGoodsTimes = rechargeInfo.getBuyGoodsTimes(); Map levelBagMap = rechargeInfo.getLevelBagMap(); Map typeBagMap = rechargeInfo.getTypeBagMap(); + Map refreshBagMap = rechargeInfo.getRefreshBagMap(); Map goodsOrder = new HashMap<>(6); Map giftGoodsInfoMap = new HashMap<>(); long createTime = user.getPlayerInfoManager().getCreateTime(); @@ -434,8 +435,14 @@ public class BuyGoodsLogic { } }else{ - startTime = ToolsUtil.getTimeLong(sRechargeCommodityConfig.getStartTimeLong(),sRechargeCommodityConfig.getEndTimeLong(),sRechargeCommodityConfig.getTime(),createTime,1); - endTime = ToolsUtil.getTimeLong(sRechargeCommodityConfig.getStartTimeLong(),sRechargeCommodityConfig.getEndTimeLong(),sRechargeCommodityConfig.getTime(),createTime,2); + if(sRechargeCommodityConfig.getDailyUpdate()>=1){ + endTime = refreshBagMap.get(sRechargeCommodityConfig.getId()); + startTime = endTime - sRechargeCommodityConfig.getDailyUpdate()*TimeUtils.ONE_DAY; + }else{ + startTime = ToolsUtil.getTimeLong(sRechargeCommodityConfig.getStartTimeLong(),sRechargeCommodityConfig.getEndTimeLong(),sRechargeCommodityConfig.getTime(),createTime,1); + endTime = ToolsUtil.getTimeLong(sRechargeCommodityConfig.getStartTimeLong(),sRechargeCommodityConfig.getEndTimeLong(),sRechargeCommodityConfig.getTime(),createTime,2); + } + } if(now initBagMap = new HashMap<>(SRechargeCommodityConfig.refreshItemInfo.size()); + for(SRechargeCommodityConfig sRechargeCommodityConfig : SRechargeCommodityConfig.refreshItemInfo){ + long endTime = ToolsUtil.getTimeLong(sRechargeCommodityConfig.getStartTimeLong(),sRechargeCommodityConfig.getEndTimeLong(),sRechargeCommodityConfig.getTime(),createTime,1) + TimeUtils.ONE_DAY * sRechargeCommodityConfig.getDailyUpdate(); + initBagMap.put(sRechargeCommodityConfig.getId(),endTime); + } + user.getPlayerInfoManager().getRechargeInfo().setRefreshBagMap(initBagMap); + } + diff --git a/tablemanager/src/main/java/config/SRechargeCommodityConfig.java b/tablemanager/src/main/java/config/SRechargeCommodityConfig.java index e8384dfb9..0eb820407 100644 --- a/tablemanager/src/main/java/config/SRechargeCommodityConfig.java +++ b/tablemanager/src/main/java/config/SRechargeCommodityConfig.java @@ -62,6 +62,8 @@ public class SRechargeCommodityConfig implements BaseConfig { private static Set rchargeHeroGet; private static Map recharegeHeroTime; + public static Set refreshItemInfo; + @Override public void init() throws Exception { Map config = STableManager.getConfig(SRechargeCommodityConfig.class); @@ -69,6 +71,7 @@ public class SRechargeCommodityConfig implements BaseConfig { Set rchargeHeroGetTemp = new HashSet<>(); Map recharegeHeroTimeTmp = new HashMap<>(); + Set refreshItemInfoTmp = new HashSet<>(); for(SRechargeCommodityConfig sRechargeCommodityConfig : config.values()){ int[] discountType = sRechargeCommodityConfig.getDiscountType(); if(discountType!=null && discountType.length>0 &&discountType[0] == 2){ @@ -79,6 +82,9 @@ public class SRechargeCommodityConfig implements BaseConfig { rchargeHeroGetTemp.add(sRechargeCommodityConfig.getId()); recharegeHeroTimeTmp.put(discountType[1],sRechargeCommodityConfig.getId()); } + if(sRechargeCommodityConfig.getDailyUpdate()>0){ + refreshItemInfoTmp.add(sRechargeCommodityConfig); + } int time = sRechargeCommodityConfig.getTime(); String startTime = sRechargeCommodityConfig.getStartTime(); @@ -104,6 +110,7 @@ public class SRechargeCommodityConfig implements BaseConfig { rechargeLevelMap = rechargeLevelMapTmp; rchargeHeroGet = rchargeHeroGetTemp; recharegeHeroTime = recharegeHeroTimeTmp; + refreshItemInfo = refreshItemInfoTmp; } @@ -219,4 +226,5 @@ public class SRechargeCommodityConfig implements BaseConfig { public static void setRecharegeHeroTime(Map recharegeHeroTime) { SRechargeCommodityConfig.recharegeHeroTime = recharegeHeroTime; } + } \ No newline at end of file