From 54a3e50ae69bdf4d5d36a8689984248406ceaac4 Mon Sep 17 00:00:00 2001 From: wangyuan Date: Wed, 18 Sep 2019 16:45:04 +0800 Subject: [PATCH] fix buy not in mongo --- .../src/main/java/com/ljsd/GmService.java | 25 ++++++++++++++++++ .../jieling/logic/store/BuyGoodsLogic.java | 26 ++++++++++++++++--- 2 files changed, 47 insertions(+), 4 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/GmService.java b/serverlogic/src/main/java/com/ljsd/GmService.java index 5d427398e..af17278ab 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; @@ -20,6 +21,7 @@ import org.slf4j.LoggerFactory; import java.io.File; import java.lang.reflect.Method; +import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Random; @@ -35,6 +37,26 @@ public class GmService implements RPCRequestGMIFace.Iface { String[] arg = cmd.split(" "); GmInterface obj; try { + 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(); @@ -45,6 +67,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/logic/store/BuyGoodsLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsLogic.java index e68bea6c1..de6cf62b9 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; @@ -14,20 +18,20 @@ 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.lang.reflect.Field; import java.util.*; /** @@ -211,6 +215,20 @@ 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<>()); + + AyyncWorker ayyncWorker = new AyyncWorker(user,true) { + @Override + public void work(User user) throws Exception { + MongoUtil.getLjsdMongoTemplate().save(user); + } + }; + ProtocolsManager instance = ProtocolsManager.getInstance(); + HandlerLogicThread handlerThread = instance.handlerThreads[user.getId() % instance.HANDLER_THREAD_NUM]; + handlerThread.addAyyncWorker(ayyncWorker); return resultRes; }