From bb75dfbcfae4ec63ea28789ba85dee4e9114b366 Mon Sep 17 00:00:00 2001 From: zhangshanxue Date: Thu, 26 Dec 2019 10:09:06 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90ID1005331=E3=80=91=E3=80=90=E6=98=9F?= =?UTF-8?q?=E7=BA=A7=E6=88=90=E9=95=BF=E7=A4=BC=E3=80=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/ljsd/GameLogicService.java | 8 ++++++ .../config/reportData/DataMessageUtils.java | 11 +++++--- .../activity/event/HeroFiveStarGetEvent.java | 10 +++++++ .../HeroFiveStarGetEventHandler.java | 28 ++++++++++++++++++- .../ljsd/jieling/logic/dao/RechargeInfo.java | 26 ++++++++++++++++- .../ljsd/jieling/logic/hero/HeroLogic.java | 5 ++++ .../ljsd/jieling/logic/item/ItemLogUtil.java | 5 +++- .../jieling/logic/store/BuyGoodsLogic.java | 25 +++++++++++------ .../java/com/ljsd/jieling/util/ItemUtil.java | 5 ++-- .../java/config/SRechargeCommodityConfig.java | 21 ++++++++++---- 10 files changed, 121 insertions(+), 23 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/GameLogicService.java b/serverlogic/src/main/java/com/ljsd/GameLogicService.java index 82a7bc66d..df379ca11 100644 --- a/serverlogic/src/main/java/com/ljsd/GameLogicService.java +++ b/serverlogic/src/main/java/com/ljsd/GameLogicService.java @@ -22,6 +22,7 @@ import com.ljsd.jieling.util.ConfigurableApplicationContextManager; import com.ljsd.jieling.util.KeyGenUtils; import com.ljsd.jieling.util.SensitivewordFilter; import com.ljsd.jieling.util.http.HttpPool; +import com.sun.xml.internal.bind.v2.runtime.unmarshaller.XsiNilLoader; import manager.STableManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -41,6 +42,7 @@ public class GameLogicService implements IService { public static GameLogicService getInstance() { return instance; } + private static volatile boolean isShutdown = false; @Override @@ -107,8 +109,10 @@ public class GameLogicService implements IService { LOGGER.info(resource.getFile()); } + Runtime.getRuntime().addShutdownHook(new Thread(() -> { LOGGER.info("ShutdownHook start"); + isShutdown= true; Thread.currentThread().setName("addShutdownHook"); try { GameApplication.close(); @@ -116,4 +120,8 @@ public class GameLogicService implements IService { })); } + + public static boolean isServiceShutdown() { + return isShutdown; + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/reportData/DataMessageUtils.java b/serverlogic/src/main/java/com/ljsd/jieling/config/reportData/DataMessageUtils.java index 405db9b1a..f6f9fc500 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/config/reportData/DataMessageUtils.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/reportData/DataMessageUtils.java @@ -5,6 +5,7 @@ import com.google.gson.FieldAttributes; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.ljsd.GameApplication; +import com.ljsd.GameLogicService; import com.ljsd.common.mogodb.util.BlockingUniqueQueue; import com.ljsd.jieling.config.json.SDK37Constans; import com.ljsd.jieling.dataReport.reportBeans_37.*; @@ -37,10 +38,12 @@ public class DataMessageUtils { private static final String sendChatContent37 = "http://cm3.api.37.com.cn/Content/_checkContent/"; //入队列 public static void addLogQueue(Object info) { - if (info instanceof KTParam) { - logQueue.offer(info); - } else if (info instanceof Report37Param && GameApplication.serverProperties.isSendlog37()) { - logQueue_37.offer(info); + if(!GameLogicService.isServiceShutdown()){ + if (info instanceof KTParam) { + logQueue.offer(info); + } else if (info instanceof Report37Param && GameApplication.serverProperties.isSendlog37()) { + logQueue_37.offer(info); + } } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/event/HeroFiveStarGetEvent.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/event/HeroFiveStarGetEvent.java index 3126fde3b..6f7b3a605 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/event/HeroFiveStarGetEvent.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/event/HeroFiveStarGetEvent.java @@ -7,6 +7,16 @@ package com.ljsd.jieling.logic.activity.event; */ public class HeroFiveStarGetEvent implements IEvent { private int uid; + private int star; + + public HeroFiveStarGetEvent(int uid, int star) { + this.uid = uid; + this.star = star; + } + + public int getStar() { + return star; + } public HeroFiveStarGetEvent(int uid) { this.uid = uid; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/eventhandler/HeroFiveStarGetEventHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/eventhandler/HeroFiveStarGetEventHandler.java index 52eab25a9..76c5d0428 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/eventhandler/HeroFiveStarGetEventHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/eventhandler/HeroFiveStarGetEventHandler.java @@ -2,6 +2,8 @@ package com.ljsd.jieling.logic.activity.eventhandler; import com.ljsd.jieling.core.HandlerLogicThread; import com.ljsd.jieling.core.SimpleTransaction; +import com.ljsd.jieling.exception.ErrorCode; +import com.ljsd.jieling.exception.ErrorCodeException; import com.ljsd.jieling.logic.OnlineUserManager; import com.ljsd.jieling.logic.activity.IEventHandler; import com.ljsd.jieling.logic.activity.event.HeroFiveStarGetEvent; @@ -19,6 +21,7 @@ import config.SRechargeCommodityConfig; import java.util.ArrayList; import java.util.List; +import java.util.Map; /** * Description: des @@ -34,10 +37,33 @@ public class HeroFiveStarGetEventHandler implements IEventHandler { User user = UserManager.getUser(((HeroFiveStarGetEvent) event).getUid()); RechargeInfo rechargeInfo = user.getPlayerInfoManager().getRechargeInfo(); - rechargeInfo.addTypeBagMap(5,System.currentTimeMillis()); + long now = System.currentTimeMillis(); + + Map typeBagMap = rechargeInfo.getTypeBagMap(); + + int goodsId =SRechargeCommodityConfig.getRecharegeHeroTime().getOrDefault(((HeroFiveStarGetEvent) event).getStar(),0); + if(goodsId!=0){ + if(typeBagMap.containsKey(((HeroFiveStarGetEvent) event).getStar())){ + long lasttime = rechargeInfo.getTypeBagMap().get(((HeroFiveStarGetEvent) event).getStar()); + + int diffHourTemp = (int) ((now - lasttime) / 3600 / 1000); + if (diffHourTemp < 2) { + rechargeInfo.addDyGoodsCanBuyTimes(goodsId); + }else { + rechargeInfo.putDyGoodsCanBuyTimes(goodsId,1); + } + }else { + rechargeInfo.putDyGoodsCanBuyTimes(goodsId,1); + } + }else { + throw new ErrorCodeException(ErrorCode.CFG_NULL); + } + + rechargeInfo.addTypeBagMap(((HeroFiveStarGetEvent) event).getStar(),System.currentTimeMillis()); List goodsBagInfo = new ArrayList<>(SRechargeCommodityConfig.rechargeCommodityConfigMap.size()); BuyGoodsLogic.getGoodsBagInfo(user.getId(), goodsBagInfo,false); + System.out.print(goodsBagInfo.toString()); ISession session = OnlineUserManager.getSessionByUid(user.getId()); if(session!=null){ if(null!= HandlerLogicThread.current()){ 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 15558663d..6ecbcebf7 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 @@ -29,11 +29,12 @@ public class RechargeInfo extends MongoBase{ //特殊类型控制触发开启的商品表 如五星妖灵师类型5 private Map typeBagMap = new HashMap<>(); + //动态商品可买数量 + private Map dyGoodsCanBuyTimes = new HashMap<>(); @Transient private Map cacheSendedTypes = new HashMap<>(); - public RechargeInfo(){ } @@ -201,4 +202,27 @@ public class RechargeInfo extends MongoBase{ public void setCacheSendedTypes(Map cacheSendedTypes) { this.cacheSendedTypes = cacheSendedTypes; } + + + public Map getDyGoodsCanBuyTimes() { + return dyGoodsCanBuyTimes; + } + + public void addDyGoodsCanBuyTimes(Integer type) { + this.dyGoodsCanBuyTimes.put(type,this.dyGoodsCanBuyTimes.get(type)+1 ); + updateString("dyGoodsCanBuyTimes",dyGoodsCanBuyTimes); + } + + public void putDyGoodsCanBuyTimes(Integer type,Integer value) { + this.dyGoodsCanBuyTimes.put(type,value ); + updateString("dyGoodsCanBuyTimes",dyGoodsCanBuyTimes); + } + public void removeDyGoodsCanBuyTimes(Integer type) { + this.dyGoodsCanBuyTimes.remove(type); + updateString("dyGoodsCanBuyTimes",dyGoodsCanBuyTimes); + } + public void setDyGoodsCanBuyTimes(Map dyGoodsCanBuyTimes) { + updateString("dyGoodsCanBuyTimes",dyGoodsCanBuyTimes); + this.dyGoodsCanBuyTimes = dyGoodsCanBuyTimes; + } } 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 c272eb6ef..c90f61410 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 @@ -785,6 +785,11 @@ public class HeroLogic{ // recyleHeroBySystem(user,removeHeroIds); targetHero.upStar( 1 ); Poster.getPoster().dispatchEvent(new HeroUpStarEvent(user.getId(),targetHero.getStar())); + if(targetHero.getStar()>=5&&targetHero.getStar()!=15){ + if(SItem.getsItemMap().get(scHero.getId()).getQuantity()>=5) + Poster.getPoster().dispatchEvent(new HeroFiveStarGetEvent(user.getId(),targetHero.getStar())); + } + // if(targetHero.getStar()==5){ // Poster.getPoster().dispatchEvent(new HeroFiveStarGetEvent(user.getId())); // } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/item/ItemLogUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/item/ItemLogUtil.java index 277957534..93814a4f7 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/item/ItemLogUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/item/ItemLogUtil.java @@ -1,5 +1,6 @@ package com.ljsd.jieling.logic.item; +import com.ljsd.GameLogicService; import com.ljsd.common.mogodb.util.BlockingUniqueQueue; import com.ljsd.jieling.db.mongo.MongoUtil; @@ -11,7 +12,9 @@ public class ItemLogUtil { public static BlockingQueue logQueue = new BlockingUniqueQueue<>(); public static void addLogQueue(ItemLog itemLog) { - logQueue.offer(itemLog); + if(!GameLogicService.isServiceShutdown()){ + logQueue.offer(itemLog); + } } public static void record () { List sendDataList = new ArrayList<>(10); 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 19b20f394..4fabf6a48 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 @@ -228,12 +228,18 @@ public class BuyGoodsLogic { int[] discountType = sRechargeCommodityConfig.getDiscountType(); int temptype = discountType[0]; int tempvalue = discountType[1]; - if(temptype == 4&&tempvalue==5){ - if (rechargeInfo.getTypeBagMap().containsKey(tempvalue)){ - rechargeInfo.removeTypeBagMap(tempvalue); - } - if (rechargeInfo.getCacheSendedTypes().containsKey(tempvalue)){ - rechargeInfo.getCacheSendedTypes().remove(tempvalue); + if(temptype == 4){ + + int dytime = rechargeInfo.getDyGoodsCanBuyTimes().getOrDefault(tempvalue,0)-1; + if(dytime <=0){ + if (rechargeInfo.getTypeBagMap().containsKey(tempvalue)){ + rechargeInfo.removeTypeBagMap(tempvalue); + } + if (rechargeInfo.getCacheSendedTypes().containsKey(tempvalue)){ + rechargeInfo.getCacheSendedTypes().remove(tempvalue); + } + }else { + rechargeInfo.putDyGoodsCanBuyTimes(dytime,dytime); } List goodsBagInfo = new ArrayList<>(SRechargeCommodityConfig.rechargeCommodityConfigMap.size()); @@ -364,6 +370,7 @@ public class BuyGoodsLogic { int time = sRechargeCommodityConfig.getTime(); long startTime=0; long endTime=0; + int dybuytime = 0; if(time == 4){ int type = discountType[0]; int value = discountType[1]; @@ -388,6 +395,7 @@ public class BuyGoodsLogic { int addtime = discountType[2]; int diffHour = (int) ((now - startTime) / 3600 / 1000); if (diffHour >= addtime) { + rechargeInfo.removeDyGoodsCanBuyTimes(value); continue; } endTime = startTime + addtime * 3600 * 1000; @@ -405,7 +413,7 @@ public class BuyGoodsLogic { }else { rechargeInfo.getCacheSendedTypes().put(value, startTime); } - + dybuytime = rechargeInfo.getDyGoodsCanBuyTimes().getOrDefault(value,0); } }else{ @@ -431,7 +439,8 @@ 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()); + giftGoodsInfoMap.put(goodsId,CommonProto.GiftGoodsInfo.newBuilder().setGoodsId(goodsId).setStartTime((int)(startTime/1000)).setBuyTimes(buyTimes).setEndTime((int)(endTime/1000)) + .setDynamicBuyTimes(dybuytime).build()); boolean isNew = rechargeInfo.addNewSendId(goodsId); if(isNew){ needChange = true; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java index 9b7522a6c..c944cd6f3 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java @@ -1205,8 +1205,9 @@ public class ItemUtil { } } user.getUserMissionManager().onGameEvent(user,GameEvent.GET_HERO,heroStar[0],heroStar[1]); - if(scHero.getStar()==5){ - Poster.getPoster().dispatchEvent(new HeroFiveStarGetEvent(user.getId())); + if(scHero.getStar()>=5){ + if(SItem.getsItemMap().get(scHero.getId()).getQuantity()>=5) + Poster.getPoster().dispatchEvent(new HeroFiveStarGetEvent(user.getId(),scHero.getStar())); } KtEventUtils.onKtEvent(user, ParamEventBean.UserItemEvent,reason,GlobalsDef.addReason,cardId,1,heroStar[1]); } diff --git a/tablemanager/src/main/java/config/SRechargeCommodityConfig.java b/tablemanager/src/main/java/config/SRechargeCommodityConfig.java index 8ed6cc6d3..c775173b3 100644 --- a/tablemanager/src/main/java/config/SRechargeCommodityConfig.java +++ b/tablemanager/src/main/java/config/SRechargeCommodityConfig.java @@ -5,10 +5,7 @@ import manager.Table; import util.TimeUtils; import util.StringUtil; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; +import java.util.*; @Table(name ="RechargeCommodityConfig") public class SRechargeCommodityConfig implements BaseConfig { @@ -59,21 +56,24 @@ public class SRechargeCommodityConfig implements BaseConfig { public static Map rechargeCommodityConfigMap; public static Map rechargeLevelMap; private static Set rchargeHeroGet; - + private static Map recharegeHeroTime; @Override public void init() throws Exception { Map config = STableManager.getConfig(SRechargeCommodityConfig.class); Map rechargeLevelMapTmp = new HashMap<>(); Set rchargeHeroGetTemp = new HashSet<>(); + + Map recharegeHeroTimeTmp = new HashMap<>(); for(SRechargeCommodityConfig sRechargeCommodityConfig : config.values()){ int[] discountType = sRechargeCommodityConfig.getDiscountType(); if(discountType!=null && discountType.length>0 &&discountType[0] == 2){ int level = discountType[1]; rechargeLevelMapTmp.put(level,sRechargeCommodityConfig); } - if(discountType!=null && discountType.length>0 &&discountType[0] == 4){ + if(discountType!=null && discountType.length>0 &&discountType[0] == 4&&sRechargeCommodityConfig.getTime()==4&&sRechargeCommodityConfig.getDiscountType().length==3){ rchargeHeroGetTemp.add(sRechargeCommodityConfig.getId()); + recharegeHeroTimeTmp.put(discountType[1],sRechargeCommodityConfig.getId()); } int time = sRechargeCommodityConfig.getTime(); @@ -99,6 +99,7 @@ public class SRechargeCommodityConfig implements BaseConfig { rechargeCommodityConfigMap = config; rechargeLevelMap = rechargeLevelMapTmp; rchargeHeroGet = rchargeHeroGetTemp; + recharegeHeroTime = recharegeHeroTimeTmp; } @@ -202,4 +203,12 @@ public class SRechargeCommodityConfig implements BaseConfig { public static Set getRchargeHeroGet() { return rchargeHeroGet; } + + public static Map getRecharegeHeroTime() { + return recharegeHeroTime; + } + + public static void setRecharegeHeroTime(Map recharegeHeroTime) { + SRechargeCommodityConfig.recharegeHeroTime = recharegeHeroTime; + } } \ No newline at end of file