diff --git a/gamecommon/src/main/java/util/TimeUtils.java b/gamecommon/src/main/java/util/TimeUtils.java index cb6c6b9e1..9657185bc 100644 --- a/gamecommon/src/main/java/util/TimeUtils.java +++ b/gamecommon/src/main/java/util/TimeUtils.java @@ -724,6 +724,31 @@ public class TimeUtils { return c.getTime(); } + /** + * 获取几天后的当前时间点 + * @return + */ + public static long getTomorrowZero() { + Calendar c = Calendar.getInstance(); + c.add(Calendar.DATE, 1); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + return c.getTimeInMillis(); + } + + /** + * 获取几天后的当前时间点 + * @return + */ + public static long getTomorrowZero2() { + Calendar c = Calendar.getInstance(); + c.set(Calendar.HOUR_OF_DAY, 23); + c.set(Calendar.MINUTE, 59); + c.set(Calendar.SECOND, 30); + return c.getTimeInMillis(); + } + /** * 设置几分钟之后的时间点 * @@ -1578,8 +1603,7 @@ public class TimeUtils { calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MILLISECOND, 0); - long todayZero = calendar.getTimeInMillis(); - return todayZero; + return calendar.getTimeInMillis(); } /** diff --git a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java index 295df6cd3..045d0b198 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java @@ -392,6 +392,10 @@ public class RedisKey { */ public static final String SEVEN_WORLD_INTEGRAL_RANK = "SEVEN_WORLD_INTEGRAL_RANK"; + /** + * 网页支付特殊处理用 + */ + public static final String WEB_PAY = "WEB_PAY"; public static Set newAreaCacChe = new HashSet<>();//进程排行 合区统一 diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityLogic.java index 87fe99a6a..f2b020eff 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityLogic.java @@ -26,7 +26,6 @@ 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.logic.store.StoreLogic; -import com.ljsd.jieling.netty.cocdex.PacketNetData; import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.tools.Utils; import com.ljsd.jieling.util.InnerMessageUtil; @@ -90,6 +89,8 @@ public class ActivityLogic implements IEventHandler{ } //更新每日充值 ActivityLogic.getInstance().resumeActivity(user, ActivityType.DAILY_RECHARGE); + // 每日充值网页支付特殊处理 + ActivityLogic.getInstance().webPayHandlerLogin(user); //更新每日累计充值 ActivityLogic.getInstance().resumeActivity(user, ActivityType.RECHARGE_NUM); //更新首日充值st @@ -119,9 +120,28 @@ public class ActivityLogic implements IEventHandler{ upFiveActivityTypes.add(ActivityType.LUCK_WHEEL_ADVANCE); upFiveActivityTypes.add(ActivityType.RECHARGE_NUM); upFivePlayerActivity(user, upFiveActivityTypes, fBuilder); + } + /** + * 网页支付特殊处理登陆 + * @param user + * + */ + private void webPayHandlerLogin(User user){ + // 获取key + String subKey = RedisUtil.getInstence().getKey(String.valueOf(user.getId()), String.valueOf(ActivityType.DAILY_RECHARGE),false); + String key = RedisUtil.getInstence().getKey(RedisKey.WEB_PAY, subKey); - + Object result = RedisUtil.getInstence().get(key); + if (result == null){ + return; + } + // 网页支付在登陆之前充值的金额 + double value = (double) result; + // 玩家缓存更新 + ActivityLogic.getInstance().updateActivityMissionProgress(user, ActivityType.DAILY_RECHARGE,(int)(value*1000)); + // 删除key + RedisUtil.getInstence().del(key); } public void flushForLogin(User user,ISession iSession) throws Exception { diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsNewLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsNewLogic.java index 12e2fcd10..8c0fa7773 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsNewLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsNewLogic.java @@ -4,7 +4,6 @@ import com.ljsd.GameApplication; import com.ljsd.jieling.config.reportData.DataMessageUtils; import com.ljsd.jieling.core.VipPrivilegeType; import com.ljsd.jieling.db.mongo.MongoUtil; -import com.ljsd.jieling.db.mongo.core.ServerBanPro; import com.ljsd.jieling.db.redis.RedisKey; import com.ljsd.jieling.db.redis.RedisUtil; import com.ljsd.jieling.exception.ErrorCode; @@ -12,7 +11,6 @@ import com.ljsd.jieling.exception.ErrorCodeException; import com.ljsd.jieling.globals.BIReason; import com.ljsd.jieling.globals.Global; import com.ljsd.jieling.jbean.ActivityMission; -import com.ljsd.jieling.jbean.ActivityProgressInfo; import com.ljsd.jieling.ktbeans.ReportEventEnum; import com.ljsd.jieling.ktbeans.ReportUtil; import com.ljsd.jieling.logic.GlobalDataManaager; @@ -324,18 +322,16 @@ public class BuyGoodsNewLogic { ActivityLogic.getInstance().updateActivityMissionProgress(user, ActivityType.RechargeTotal,(int)(price*1000)); ActivityLogic.getInstance().updateActivityMissionProgress(user, ActivityType.LUCKYCAT,(int)(price*1000)); ActivityLogic.getInstance().updateActivityMissionProgress(user, ActivityType.DAILY_RECHARGE,(int)(price*1000)); + webPayHandlerBuy(user,price); ActivityLogic.getInstance().updateActivityMissionProgress(user, ActivityType.RECHARGE_NUM,(int)(price*1000)); ActivityLogic.getInstance().updateActivityMissionProgress(user, ActivityType.JADE_DYNASTY_RECHARGE_SUM,(int)(price*1000)); ActivityLogic.getInstance().updateActivityMissionProgress(user, ActivityType.RECHARGE_SUM_DAY, (int)(user.getPlayerInfoManager().getRechargedaily()*1000) ); ActivityLogic.getInstance().updateActivityMissionProgress(user, ActivityType.FIND_FAIRY_FESTIVAL, (int)(price*1000)); AyyncWorker ayyncWorker = new AyyncWorker(user, true, new AynMissionWorker(GameEvent.RECHARGE_TOTAL,(int)(price*1000))) ; - ProtocolsManager.getInstance().updateAyncWorker(ayyncWorker); - ISession session = OnlineUserManager.getSessionByUid(user.getId()); - PlayerInfoProto.RefreshRechargeIndication.Builder builder = PlayerInfoProto.RefreshRechargeIndication.newBuilder(); builder.setAmount(info.getRr()); builder.setMonthSaveAmt(info.getMonthRr()); @@ -343,6 +339,28 @@ public class BuyGoodsNewLogic { MessageUtil.sendIndicationMessage(session,1, MessageTypeProto.MessageType.REFRESH_RECHARGE_INDICATION_VALUE,builder.build(),true); } + /** + * 网页支付特殊处理 + * @param user + * @param price + */ + private static void webPayHandlerBuy(User user, double price){ + // 当天没有登陆,购买礼包操作 + if (TimeUtils.isOverTime(0,user.getPlayerInfoManager().getLoginTime())){ + // 获取key + String subKey = RedisUtil.getInstence().getKey(String.valueOf(user.getId()), String.valueOf(ActivityType.DAILY_RECHARGE),false); + String key = RedisUtil.getInstence().getKey(RedisKey.WEB_PAY, subKey); + // 计算金额 + double num = Optional.ofNullable(RedisUtil.getInstence().get(key)) + .map(v-> (double)v + price) + .orElse(price); + // 明天零点(实际是今天的23:59:30) + long tomorrowZero = TimeUtils.getTomorrowZero2(); + // 赋值 + RedisUtil.getInstence().set(key,String.valueOf(num),tomorrowZero-TimeUtils.now()); + } + } + /** * 处理特殊类型发货 */