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..8414c37b2 100644 --- a/hotfix/src/main/java/com/ljsd/jieling/hotfix/JavaAgent.java +++ b/hotfix/src/main/java/com/ljsd/jieling/hotfix/JavaAgent.java @@ -69,7 +69,8 @@ public class JavaAgent { //该方法支持在JVM 启动后再启动代理,对应清单的Agent-Class:属性 public static void agentmain(String args,Instrumentation inst){ try{ - writeLog("args=:[" + args + "]"); + writeLog("argsxxxxxxxxxx=:[" + args + "]"); + writeLog("argsxxxxxxxxxxyyy=:[" + JavaAgent.class.getResource("").getPath() + "]"); File f = new File(args); byte[] targetClassFile = new byte[(int)f.length()]; DataInputStream dis = new DataInputStream(new FileInputStream(f)); @@ -78,8 +79,8 @@ public class JavaAgent { DynamicClassLoader myLoader = new DynamicClassLoader(); Class targetClazz = myLoader.findClass(targetClassFile); - writeLog("class name is:["+targetClazz.getName() + "]"); - + writeLog("class namexxxxx 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/GmService.java b/serverlogic/src/main/java/com/ljsd/GmService.java index ac45be6ab..e97998a1a 100644 --- a/serverlogic/src/main/java/com/ljsd/GmService.java +++ b/serverlogic/src/main/java/com/ljsd/GmService.java @@ -1,6 +1,7 @@ package com.ljsd; +import com.ljsd.jieling.db.mongo.MongoUtil; import com.ljsd.jieling.kefu.GmGlobleAbstract; import com.ljsd.jieling.kefu.GmInterface; import com.ljsd.jieling.kefu.GmRoleAbstract; @@ -49,6 +50,27 @@ public class GmService implements RPCRequestGMIFace.Iface { return result; } + if(cmd.contains("hotfix")){ + List usersInDB = MongoUtil.getLjsdMongoTemplate().findAll("user", User.class); + List sendIds = new ArrayList<>(usersInDB.size()); + for(User user1 : usersInDB){ + User userInMem = UserManager.getUserInMem(user1.getId()); + if(userInMem == null){ + continue; + } + sendIds.add(user1.getId()); + } + InnerMessageUtil.broadcastWithRandom(new AyyncWorker() { + @Override + public void work(User user) throws Exception { + LOGGER.info("hotfix user={}",user.getId()); + MongoUtil.getLjsdMongoTemplate().save(user); + } + }, sendIds, Math.min(10, 10)); + result.setResultCode(1); + return result; + } + obj = (GmInterface) Class.forName( GmInterface.class.getPackage().getName() + ".Cmd_" + arg[0].toLowerCase()).newInstance(); @@ -59,6 +81,9 @@ public class GmService implements RPCRequestGMIFace.Iface { } try { String[] parameters = java.util.Arrays.copyOfRange(arg, 1, arg.length); + + + if (obj instanceof GmRoleAbstract) { List sendIds = new LinkedList<>(); if (obj instanceof GmGlobleAbstract) { diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/ServerConfig.java b/serverlogic/src/main/java/com/ljsd/jieling/config/ServerConfig.java index 04ba5566f..e4941388a 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/config/ServerConfig.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/ServerConfig.java @@ -51,6 +51,5 @@ public class ServerConfig extends MongoBase { public void setWorldLevel(int worldLevel) { this.worldLevel = worldLevel; - updateString("world_level",worldLevel); } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/db/mongo/MongoUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/db/mongo/MongoUtil.java index e5f7adcd0..56243056a 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/db/mongo/MongoUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/db/mongo/MongoUtil.java @@ -4,12 +4,18 @@ import com.google.gson.Gson; import com.ljsd.common.mogodb.LjsdMongoTemplate; import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.util.MathUtils; +import com.mongodb.MongoClientURI; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.data.domain.Sort; import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.SimpleMongoDbFactory; +import org.springframework.data.mongodb.core.convert.DefaultDbRefResolver; +import org.springframework.data.mongodb.core.convert.MappingMongoConverter; +import org.springframework.data.mongodb.core.mapping.MongoMappingContext; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import org.springframework.stereotype.Component; @@ -82,7 +88,6 @@ public class MongoUtil { return MongoUtil.getInstence().coreMongoTemplate; } - public static void main(String[] args) { try { LjsdMongoTemplate ljsdMongoTemplate = getLjsdMongoTemplate(); 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 15b8547ad..69d218e40 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java @@ -132,12 +132,14 @@ public class GetPlayerInfoHandler extends BaseHandler{ endless.setMapId(MapLogic.getEndlessMapId()); endless.setWorldLevel(MongoUtil.getInstence().getMyMongoTemplate().findById(1, ServerConfig.class).getWorldLevel()); endless.setBloodScore(RedisUtil.getInstence().getZSetScore(RedisKey.BLOODY_RANK,Integer.toString(1), Integer.toString(userId)).intValue()); + List goodsBagInfo = new ArrayList<>(SRechargeCommodityConfig.rechargeCommodityConfigMap.size()); + BuyGoodsLogic.getGoodsBagInfo(userId,goodsBagInfo,true); PlayerInfoProto.GetPlayerInfoResponse getPlayerInfoResponse = PlayerInfoProto.GetPlayerInfoResponse.newBuilder() .setPlayer(player) .addAllNewPlayerGuidePoint(list) .addAllPrivilege(privilegeList) - .addAllGiftGoodsInfo(BuyGoodsLogic.getGoodsBagInfo(userId)) + .addAllGiftGoodsInfo(goodsBagInfo) .addAllBuyGoodsId(rechargeInfo.getBuyGoodsTimes().keySet()) .setSuddenlyBossInfo(suddenlyBossInfo) .setVipBaseInfo(vipInfoProto) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java index 148f26ab6..13c7a8e4b 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java @@ -5,6 +5,7 @@ import com.ljsd.jieling.config.*; import com.ljsd.jieling.core.VipPrivilegeType; import com.ljsd.jieling.dataReport.reportBeans_37.ChatContentType; import com.ljsd.jieling.dataReport.reportBeans_37.Repot37EventUtil; +import com.ljsd.jieling.db.mongo.MongoUtil; import com.ljsd.jieling.db.redis.RedisKey; import com.ljsd.jieling.db.redis.RedisUtil; import com.ljsd.jieling.globals.BIReason; @@ -1027,26 +1028,30 @@ public class MapLogic { //无尽副本 if(challengeConfig.getType()==4) { if(outType==1){ - mapManager.updateEndlessLocation(0); - int[][] cost = new int[1][]; - int costId = SChallengeSetting.getChallengeSetting().getActionPowerId(); - int costNum = SEndlessMapConfig.sEndlessMapConfigMap.get(mapId).getTeleportCost(); - int costNum2 = SEndlessMapConfig.sEndlessMapConfigMap.get(targetMapId).getTeleportCost(); - int resultCost = Math.abs(costNum-costNum2); - mapManager.updateEndlessConsumeExecution(mapManager.getEndlessMapInfo().getConsumeExecution()+resultCost); - cost[0]= new int[]{costId,resultCost};//Math.abs(costNum-costNum) - boolean costResult = ItemUtil.itemCost(user,cost,BIReason.ENDLESS_CONSUME_EXECUTION,1); - mapManager.setCurMapId(0); - mapManager.setCurXY(0); - mapManager.updateEndlessLocation(0); - - if(!costResult){ - MessageUtil.sendErrorResponse(session,0,messageType.getNumber(),"行动力不足!"); - return; - } - LOGGER.info("传送消耗{}行动力"+Math.abs(costNum-costNum2)); +// mapManager.updateEndlessLocation(0); +// int[][] cost = new int[1][]; +// int costId = SChallengeSetting.getChallengeSetting().getActionPowerId(); +// int costNum = SEndlessMapConfig.sEndlessMapConfigMap.get(mapId).getTeleportCost(); +// int costNum2 = SEndlessMapConfig.sEndlessMapConfigMap.get(targetMapId).getTeleportCost(); +// int resultCost = Math.abs(costNum-costNum2); +// mapManager.updateEndlessConsumeExecution(mapManager.getEndlessMapInfo().getConsumeExecution()+resultCost); +// cost[0]= new int[]{costId,resultCost};//Math.abs(costNum-costNum) +// boolean costResult = ItemUtil.itemCost(user,cost,BIReason.ENDLESS_CONSUME_EXECUTION,1); +// mapManager.setCurMapId(0); +// mapManager.setCurXY(0); +// mapManager.updateEndlessLocation(0); +// +// if(!costResult){ +// MessageUtil.sendErrorResponse(session,0,messageType.getNumber(),"行动力不足!"); +// return; +// } +// LOGGER.info("传送消耗{}行动力"+Math.abs(costNum-costNum2)); }else{ - mapManager.updateEndlessLocation(curXY); + if(MapLogic.endlessSeason!=mapManager.getEndlessMapInfo().getSeason()){ + mapManager.updateEndlessLocation(0); + }else{ + mapManager.updateEndlessLocation(curXY); + } mapManager.updateEndlessConsumeExecution(0); mapManager.updateEndlessFightCount(0); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/hotfix/HotfixUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/hotfix/HotfixUtil.java index 9ecc75359..dbe277287 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/hotfix/HotfixUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/hotfix/HotfixUtil.java @@ -64,7 +64,7 @@ public class HotfixUtil{ for (ClassBean cl : list) { String path = "../conf/hotswap/"+cl.getName(); LOGGER.info("HotfixUtil->i={},path={}", i, path); - vm.loadAgent("../lib/serverlogiclib/hotfix.jar",path);//path参数即agentmain()方法的第一个参数 + vm.loadAgent("../lib/hotfix.jar",path);//path参数即agentmain()方法的第一个参数 i++; } currVerion = version; 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 d453ed938..233e21b74 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobalDataManaager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobalDataManaager.java @@ -37,7 +37,10 @@ import com.ljsd.jieling.util.TimeUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.data.domain.Sort; +import org.springframework.data.mongodb.core.query.Query; +import java.net.UnknownHostException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -164,6 +167,7 @@ public class GlobalDataManaager { case Endless: MapLogic.getInstance().updateEndlessSeason(timeControllerOfFunction.getTimes()); serverConfigTmp.setWorldLevel(calWorldLevel()); + MongoUtil.getLjsdMongoTemplate().save(serverConfigTmp); MapLogic.getInstance().setEndlessMapId(getEndleeMapIdByLevel()); break; default: @@ -350,7 +354,22 @@ public class GlobalDataManaager { private static int calWorldLevel(){ - return 20; + Query query = new Query(); + query.with(new Sort(Sort.Direction.DESC,"playerManager.level")); + query.fields().include("playerManager.level"); + List users = null; + try { + users = MongoUtil.getLjsdMongoTemplate().findAllByCondition(query, User.class); + } catch (Exception e) { + e.printStackTrace(); + } + int size = (int)(users.size()*0.85); + int level = 0; + for(int i = 0 ; i 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/fight/CombatLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/CombatLogic.java index e0ce54146..0f5b9beb7 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/CombatLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/CombatLogic.java @@ -978,9 +978,9 @@ public class CombatLogic { effect[1] = special; for(int i = 0 ; i2){ - LOGGER.info("生效的光环为{},{},{}",effect[i][0],effect[i][1],effect[i][2]); +// LOGGER.info("生效的光环为{},{},{}",effect[i][0],effect[i][1],effect[i][2]); }else{ - LOGGER.info("生效的光环为{},{}",effect[i][0],effect[i][1]); +// LOGGER.info("生效的光环为{},{}",effect[i][0],effect[i][1]); } } 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 fdbe0a8c2..9db76ec25 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 @@ -1,7 +1,11 @@ package com.ljsd.jieling.logic.store; +import com.ljsd.common.mogodb.MongoUpdateCache; +import com.ljsd.common.mogodb.MongoUpdateCacheThreadLocal; import com.ljsd.jieling.config.*; +import com.ljsd.jieling.core.HandlerLogicThread; import com.ljsd.jieling.core.VipPrivilegeType; +import com.ljsd.jieling.db.mongo.MongoUtil; import com.ljsd.jieling.globals.BIReason; import com.ljsd.jieling.globals.Global; import com.ljsd.jieling.ktbeans.KtEventUtils; @@ -9,33 +13,33 @@ 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.GameEvent; +import com.ljsd.jieling.logic.mission.event.MissionEventDistributor; import com.ljsd.jieling.logic.player.PlayerLogic; +import com.ljsd.jieling.network.server.ProtocolsManager; import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.protocols.CommonProto; import com.ljsd.jieling.protocols.MessageTypeProto; import com.ljsd.jieling.protocols.PlayerInfoProto; import com.ljsd.jieling.thrift.idl.Result; -import com.ljsd.jieling.util.ItemUtil; -import com.ljsd.jieling.util.MessageUtil; -import com.ljsd.jieling.util.StringUtil; -import com.ljsd.jieling.util.TimeUtils; +import com.ljsd.jieling.util.*; 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.lang.reflect.Field; +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 { @@ -211,6 +215,12 @@ public class BuyGoodsLogic { resultRes.setResultCode(1); KtEventUtils.onKtEvent(user, ParamEventBean.UserPayEvent,goodsId,orderId,resultRes.getResultCode(),price); notifyPaySuccessFul(uid,goodsId,amount != -999); + + Class aClass = MongoUpdateCacheThreadLocal.getMongoUpdateCache().getClass(); + Field requestMap = aClass.getDeclaredField("requestMap"); + requestMap.setAccessible(true); + requestMap.set(MongoUpdateCacheThreadLocal.getMongoUpdateCache(), new HashMap<>()); + MongoUtil.getLjsdMongoTemplate().save(user); return resultRes; } @@ -266,16 +276,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 +326,7 @@ public class BuyGoodsLogic { startTime = sRechargeCommodityConfig.getTimeLong(createTime,1); endTime = sRechargeCommodityConfig.getTimeLong(createTime,2); } - if(now endTime)){ continue; } int order = sRechargeCommodityConfig.getOrder(); @@ -326,21 +339,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/network/server/ProtocolsManager.java b/serverlogic/src/main/java/com/ljsd/jieling/network/server/ProtocolsManager.java index ed5bbf9e9..1b5f9be26 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/network/server/ProtocolsManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/network/server/ProtocolsManager.java @@ -299,7 +299,6 @@ public class ProtocolsManager implements ProtocolsAbstract { iSession.setOfflineType(ErrorCode.reloginCode); backUpMsgToRedis(iSession); OnlineUserManager.userOffline(uid); - LOGGER.info("the channel={}",iSession.getCtx().channel()); return 1; } return 0; @@ -401,7 +400,6 @@ public class ProtocolsManager implements ProtocolsAbstract { } String key = RedisUtil.getInstence().getKey(RedisKey.RESPONSE_OFFLINE, Integer.toString(session.getUid())); - LOGGER.info("the uid={},the offlineIndex={},",session.getUid(),session.getIndexToMessage().keySet().iterator().next()); RedisUtil.getInstence().set(key,gson.toJson(session.getIndexToMessage())); } 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..c661254b4 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 @@ -1,6 +1,7 @@ package com.ljsd.jieling.thread.task; import com.ljsd.GameApplication; +import com.ljsd.jieling.config.ServerConfig; import com.ljsd.jieling.config.reportData.DataMessageUtils; import com.ljsd.jieling.core.CoreLogic; import com.ljsd.jieling.core.GlobalsDef; @@ -18,17 +19,22 @@ import com.ljsd.jieling.logic.OnlineUserManager; import com.ljsd.jieling.logic.STableManager; import com.ljsd.jieling.logic.activity.ActivityLogic; import com.ljsd.jieling.logic.arena.ArenaLogic; +import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.family.GuildFightLogic; 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; import org.slf4j.LoggerFactory; +import org.springframework.data.domain.Sort; +import org.springframework.data.mongodb.core.query.Query; import java.util.Calendar; +import java.util.List; public class MinuteTask extends Thread { private static final Logger LOGGER = LoggerFactory.getLogger(MinuteTask.class); @@ -62,7 +68,23 @@ 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())); + ServerConfig serverConfigTmp = MongoUtil.getInstence().getMyMongoTemplate().findById(1, ServerConfig.class); + if(serverConfigTmp.getWorldLevel()==1){ + Query query = new Query(); + query.with(new Sort(Sort.Direction.DESC,"playerManager.level")); + query.fields().include("playerManager.level"); + List users = MongoUtil.getLjsdMongoTemplate().findAllByCondition(query, User.class); + int size = (int)(users.size()*0.85); + int level = 0; + for(int i = 0 ; i