diff --git a/hotfix/src/main/java/com/ljsd/jieling/hotfix/JavaAgent.java b/hotfix/src/main/java/com/ljsd/jieling/hotfix/JavaAgent.java index a63eff1b1..ddbbde4c1 100644 --- a/hotfix/src/main/java/com/ljsd/jieling/hotfix/JavaAgent.java +++ b/hotfix/src/main/java/com/ljsd/jieling/hotfix/JavaAgent.java @@ -79,7 +79,7 @@ public class JavaAgent { DynamicClassLoader myLoader = new DynamicClassLoader(); Class targetClazz = myLoader.findClass(targetClassFile); writeLog("class name is:["+targetClazz.getName() + "]"); - + writeLog("class path is:["+targetClazz.getResource("").getPath() + "]"); Class clz = Class.forName(targetClazz.getName()); writeLog("clz-->Class.forName:(\""+targetClazz.getName() + "\")"); 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 515a624fe..eace6e80d 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 @@ -4,6 +4,8 @@ import com.ljsd.common.mogodb.MongoBase; import com.ljsd.jieling.config.SRechargeCommodityConfig; import com.ljsd.jieling.core.VipPrivilegeType; import com.ljsd.jieling.logic.store.GiftGoodsType; +import io.netty.util.internal.ConcurrentSet; +import org.springframework.data.annotation.Transient; import java.util.*; @@ -16,6 +18,9 @@ public class RechargeInfo extends MongoBase{ private int hadBuyFound; private int isDayFirst; + + @Transient + private Set cacheSendedIds = new ConcurrentSet<>(); private Map levelBagMap = new HashMap<>(); private Map buyGoodsTimes = new HashMap<>(); @@ -28,6 +33,14 @@ public class RechargeInfo extends MongoBase{ } + public boolean addNewSendId(int id){ + return cacheSendedIds.add(id); + } + + public void clearCacheSendId(){ + cacheSendedIds.clear(); + } + //检测商品是否过期 public Set checkIsGoodsTypeOverTime(){ int now = (int)(System.currentTimeMillis()/1000); 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 d51d7ac67..ef1d4a0c8 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 @@ -9,10 +9,12 @@ 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.ActivityType; +import com.ljsd.jieling.logic.dao.ActivityMission; import com.ljsd.jieling.logic.dao.RechargeInfo; 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.mission.event.MissionEventDistributor; import com.ljsd.jieling.logic.player.PlayerLogic; import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.protocols.CommonProto; @@ -26,16 +28,14 @@ import com.ljsd.jieling.util.TimeUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; /** * 真钱购买东西 */ public class BuyGoodsLogic { + private static final Logger LOGGER = LoggerFactory.getLogger(BuyGoodsLogic.class); public static void testBuyGoods(ISession session,int goodsId) throws Exception { @@ -266,16 +266,19 @@ public class BuyGoodsLogic { } - public static List getGoodsBagInfo(int uid) throws Exception { + public static boolean getGoodsBagInfo(int uid,List giftGoodsInfoList,boolean needClear) throws Exception { User user = UserManager.getUser(uid); RechargeInfo rechargeInfo = user.getPlayerInfoManager().getRechargeInfo(); long now = TimeUtils.now(); Map buyGoodsTimes = rechargeInfo.getBuyGoodsTimes(); Map levelBagMap = rechargeInfo.getLevelBagMap(); Map goodsOrder = new HashMap<>(6); - List giftGoodsInfoList = new ArrayList<>(SRechargeCommodityConfig.rechargeCommodityConfigMap.size()); Map giftGoodsInfoMap = new HashMap<>(); long createTime = user.getPlayerInfoManager().getCreateTime(); + boolean needChange= false; + if(needClear){ + rechargeInfo.clearCacheSendId(); + } for(SRechargeCommodityConfig sRechargeCommodityConfig :SRechargeCommodityConfig.rechargeCommodityConfigMap.values()){ int limit = sRechargeCommodityConfig.getLimit(); int goodsId = sRechargeCommodityConfig.getId(); @@ -313,7 +316,7 @@ public class BuyGoodsLogic { startTime = sRechargeCommodityConfig.getTimeLong(createTime,1); endTime = sRechargeCommodityConfig.getTimeLong(createTime,2); } - if(now endTime)){ continue; } int order = sRechargeCommodityConfig.getOrder(); @@ -326,21 +329,42 @@ public class BuyGoodsLogic { } goodsOrder.put(sRechargeCommodityConfig.getType(),order*10000 + goodsId); giftGoodsInfoMap.put(goodsId,CommonProto.GiftGoodsInfo.newBuilder().setGoodsId(goodsId).setStartTime((int)(startTime/1000)).setBuyTimes(buyTimes).setEndTime((int)(endTime/1000)).build()); + boolean isNew = rechargeInfo.addNewSendId(goodsId); + if(isNew){ + needChange = true; + } continue; } + boolean isNew = rechargeInfo.addNewSendId(goodsId); + if(isNew){ + needChange = true; + } giftGoodsInfoList.add(CommonProto.GiftGoodsInfo.newBuilder().setGoodsId(goodsId).setBuyTimes(buyTimes).setStartTime((int)(startTime/1000)).setEndTime((int)(endTime/1000)).build()); } giftGoodsInfoList.addAll(giftGoodsInfoMap.values()); - return giftGoodsInfoList; + return needChange; } public static void sendGiftGooodsIndication(int uid) throws Exception { - List goodsBagInfo = BuyGoodsLogic.getGoodsBagInfo(uid); - PlayerInfoProto.AllGiftGoodsIndication build = PlayerInfoProto.AllGiftGoodsIndication.newBuilder().addAllGiftGoodsInfo(goodsBagInfo).build(); + List goodsBagInfo = new ArrayList<>(SRechargeCommodityConfig.rechargeCommodityConfigMap.size()); + boolean change = BuyGoodsLogic.getGoodsBagInfo(uid, goodsBagInfo,false); ISession session = OnlineUserManager.getSessionByUid(uid); - if(session!=null){ + if(session!=null && change){ + PlayerInfoProto.AllGiftGoodsIndication build = PlayerInfoProto.AllGiftGoodsIndication.newBuilder().addAllGiftGoodsInfo(goodsBagInfo).build(); MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.ALL_GIFTGOODS_INDICATION_VALUE,build,true); } } + + public static void minuteCheckReharge() throws Exception { + for (Map.Entry entry : OnlineUserManager.sessionMap.entrySet()) { + ISession value = entry.getValue(); + if(value.getFiveReady() == 1){ + sendGiftGooodsIndication(entry.getKey()); + } + + } + } + + } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/thread/task/MinuteTask.java b/serverlogic/src/main/java/com/ljsd/jieling/thread/task/MinuteTask.java index 6eece0ba6..66db29a99 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/thread/task/MinuteTask.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/thread/task/MinuteTask.java @@ -23,6 +23,7 @@ import com.ljsd.jieling.logic.fight.CheckFight; import com.ljsd.jieling.logic.fight.CombatLogic; import com.ljsd.jieling.logic.mail.MailLogic; import com.ljsd.jieling.logic.question.QuestionLogic; +import com.ljsd.jieling.logic.store.BuyGoodsLogic; import com.ljsd.jieling.logic.store.StoreLogic; import com.ljsd.jieling.network.server.ProtocolsManager; import org.slf4j.Logger; @@ -62,6 +63,7 @@ public class MinuteTask extends Thread { MailLogic.getInstance().checkReadyToMail(); ProtocolsManager.getInstance().minuteCheckForbidUser(); CoreLogic.getInstance().checkCoreCdk(); + BuyGoodsLogic.minuteCheckReharge(); RedisUtil.getInstence().set(RedisKey.ONLINE_NUM+RedisKey.Delimiter_colon+GameApplication.serverId, String.valueOf(OnlineUserManager.sessionMap.entrySet().size())); LOGGER.info("MinuteTask end..."); } catch (Exception e) {