From a80b8c95be0c803c9b7bfc31d0f8ec67ab12756d Mon Sep 17 00:00:00 2001 From: grimm <1769111741@qq.com> Date: Tue, 2 Sep 2025 17:52:37 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0F5=E6=B5=AE=E7=AA=97=E5=A5=96?= =?UTF-8?q?=E5=8A=B1=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/ljsd/CoreService.java | 5 + .../com/ljsd/jieling/db/redis/RedisUtil.java | 11 +++ .../jieling/handler/GetPlayerInfoHandler.java | 2 + .../jieling/logic/player/PlayerLogic.java | 98 +++++++++++++++++++ 4 files changed, 116 insertions(+) diff --git a/serverlogic/src/main/java/com/ljsd/CoreService.java b/serverlogic/src/main/java/com/ljsd/CoreService.java index 8f36499..159ef6f 100644 --- a/serverlogic/src/main/java/com/ljsd/CoreService.java +++ b/serverlogic/src/main/java/com/ljsd/CoreService.java @@ -16,6 +16,7 @@ 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.logic.store.BuyGoodsLogic; import com.ljsd.jieling.logic.store.RechargeStatisticType; import com.ljsd.jieling.network.server.ProtocolsManager; @@ -51,6 +52,10 @@ public class CoreService implements RPCRequestIFace.Iface { if(Objects.nonNull(devalueRet)) { devalueId = Integer.valueOf((String) devalueRet) ; } + //浮窗礼包走单独逻辑,不走充值逻辑 + if(PlayerLogic.getInstance().isF5Gift(goodsId)){ + return PlayerLogic.getInstance().sendF5Gift(orderId,goodsId,uid); + } Result result = BuyGoodsLogic.sendGoods(uid, goodsId, openId, orderId, orderTime, amount, false, null, RechargeStatisticType.REAL_RECHARGE, devalueId); MissionEventDistributor.requestEnd(OnlineUserManager.getSessionByUid(uid), true); User user = UserManager.getUser(uid); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisUtil.java index 224809a..387d52c 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisUtil.java @@ -1433,6 +1433,17 @@ public class RedisUtil { return result; } + public Map getSimpleStringMapValues(String key){ + Map result = new HashMap(); + Map entries = redisTemplate.opsForHash().entries(key); + for(Map.Entry item : entries.entrySet()){ + Object key1 = item.getKey(); + Object value = item.getValue(); + result.put(gson.fromJson(gson.toJson(key1),String.class),gson.fromJson(value.toString(),String.class)); + } + return result; + } + public List getMapEntrys(String type, String key, Collection mapKeys, Class valueClazz) { String rkey = getKey(type, key); List result = new ArrayList<>(); 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 d1a6868..2e1aa3e 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java @@ -227,6 +227,8 @@ public class GetPlayerInfoHandler extends BaseHandler { RankRewardLogic.getInstance().dealRankReward(user); //处理google预注册奖励 PlayerLogic.getInstance().dealGooglePreReward(user); + //处理F5浮窗礼包奖励 + PlayerLogic.getInstance().dealF5Gift(user); int trainTaskCurLevel = MissionLoigc.getTrainTaskCurLevel(user.getUserMissionManager()); PlayerInfoProto.GetPlayerInfoResponse getPlayerInfoResponse = PlayerInfoProto.GetPlayerInfoResponse.newBuilder() diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/player/PlayerLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/player/PlayerLogic.java index 2bc5952..30ebf0e 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/player/PlayerLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/player/PlayerLogic.java @@ -51,6 +51,7 @@ import com.ljsd.jieling.protocols.CommonProto; import com.ljsd.jieling.protocols.MessageTypeProto; import com.ljsd.jieling.protocols.PlayerInfoProto; import com.ljsd.jieling.reportBeans_37.ChatContentType; +import com.ljsd.jieling.thrift.idl.Result; import com.ljsd.jieling.util.*; import config.*; import manager.STableManager; @@ -1918,4 +1919,101 @@ public class PlayerLogic { SErrorCodeEerverConfig.getI18NMessage("Google_Comment_txt"),rewardStr,TimeUtils.nowInt(),Global.MAIL_EFFECTIVE_TIME); user.getPlayerInfoManager().setIsGoogleCommentReward(1); } + + /** + * 判断是否是F5浮窗礼包 + * @param goodsId + * @return + */ + public boolean isF5Gift(String goodsId) { + SRechargeCommodityConfig config = SRechargeCommodityConfig.getConfigBySdkRechargeId(goodsId); + if(config == null){ + return false; + } + if(config.getType() == 26){ + return true; + } + return false; + } + + public Result sendF5Gift(String transactionId, String goodsId, int uid) throws Exception { + String key = GameApplication.serverId + RedisKey.Delimiter_colon + uid; + Map map = RedisUtil.getInstence().getSimpleStringMapValues(key); + Result resultRes = new Result(); + //商品不存在,直接返回失败 + SRechargeCommodityConfig config = SRechargeCommodityConfig.getConfigBySdkRechargeId(goodsId); + if(config == null){ + resultRes.setResultCode(0); + resultRes.setResultMsg("gift config is not exist"); + return resultRes; + } + if(map == null){ + map = new HashMap(); + } + //重复订单,直接返回成功 + if (map.containsKey(transactionId)) { + resultRes.setResultCode(1); + resultRes.setResultMsg("SUCCESS"); + return resultRes; + } + String giftInfo = ""; + User user = UserManager.getUserOnlyInMap(uid,true); + //玩家不在线,保存礼包信息,登录时候处理 + if(user == null){ + giftInfo = goodsId + ",0"; + }else{ + //玩家在线,直接发奖 + String rewardStr = getRewardStr(false, config, 0); + MailLogic.getInstance().sendMail(user.getId(),SErrorCodeEerverConfig.getI18NMessage("Google_Comment_title"), + SErrorCodeEerverConfig.getI18NMessage("Google_Comment_txt"),rewardStr,TimeUtils.nowInt(),Global.MAIL_EFFECTIVE_TIME); + giftInfo = goodsId + ",1"; + } + map.put(transactionId,giftInfo); + RedisUtil.getInstence().set(key,map); + resultRes.setResultCode(1); + resultRes.setResultMsg("SUCCESS"); + return resultRes; + } + + /** + * 登录处理离线的F5gift奖励 + * @param user + * @throws Exception + */ + public void dealF5Gift(User user) throws Exception { + String key = GameApplication.serverId + RedisKey.Delimiter_colon + user.getId(); + Map map = RedisUtil.getInstence().getSimpleStringMapValues(key); + if(map == null||map.size() == 0){ + return; + } + boolean change = false; + for(String transactionId : map.keySet()){ + String giftInfo = map.get(transactionId); + if(giftInfo == null||giftInfo.length() < 2){ + continue; + } + String[] gift = giftInfo.split(","); + String goodsId = gift[0]; + int status = Integer.parseInt(gift[1]); + //已经发过了 + if(status >= 1){ + continue; + } + //商品不存在,直接返回失败 + SRechargeCommodityConfig config = SRechargeCommodityConfig.getConfigBySdkRechargeId(goodsId); + if(config == null){ + continue; + } + String rewardStr = getRewardStr(false, config, 0); + MailLogic.getInstance().sendMail(user.getId(),SErrorCodeEerverConfig.getI18NMessage("F5_Gift_title"), + SErrorCodeEerverConfig.getI18NMessage("F5_Gift_txt"),rewardStr,TimeUtils.nowInt(),Global.MAIL_EFFECTIVE_TIME); + giftInfo = goodsId + ",1"; + map.put(transactionId,giftInfo); + change = true; + } + //有变化,更新redis + if(change) { + RedisUtil.getInstence().set(key, map); + } + } }