From fd21726937c8f1feb8c54356f66863476f6e8b26 Mon Sep 17 00:00:00 2001 From: duhui Date: Fri, 18 Nov 2022 15:09:30 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=81=E5=8D=81=E4=B8=87=E7=9C=9F=E5=85=85?= =?UTF-8?q?=E6=B4=BB=E5=8A=A8=E5=88=9D=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamecommon/src/main/java/util/TimeUtils.java | 3 +- .../java/com/global/logic/GlobalLogic.java | 9 +- .../jieling/logic/GlobalDataManaager.java | 4 +- .../jieling/logic/activity/ActivityType.java | 4 +- .../logic/activity/ActivityTypeEnum.java | 1 + .../GiveOneHundredThousandActivity.java | 158 ++++++++++++++++++ .../ljsd/jieling/logic/dao/PlayerManager.java | 16 ++ .../network/server/SessionManager.java | 4 + 8 files changed, 186 insertions(+), 13 deletions(-) create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/logic/activity/GiveOneHundredThousandActivity.java diff --git a/gamecommon/src/main/java/util/TimeUtils.java b/gamecommon/src/main/java/util/TimeUtils.java index 08f64d890..3df7e48de 100644 --- a/gamecommon/src/main/java/util/TimeUtils.java +++ b/gamecommon/src/main/java/util/TimeUtils.java @@ -528,8 +528,7 @@ public class TimeUtils { st.setTimeInMillis(start); Calendar et = Calendar.getInstance(); et.setTimeInMillis(end); - int days = Math.abs(TimeUtils.getSoFarWentDays(st, et)); - return days; + return Math.abs(TimeUtils.getSoFarWentDays(st, et)); } /** diff --git a/globalidserver/src/main/java/com/global/logic/GlobalLogic.java b/globalidserver/src/main/java/com/global/logic/GlobalLogic.java index 90132b241..fd4035a11 100644 --- a/globalidserver/src/main/java/com/global/logic/GlobalLogic.java +++ b/globalidserver/src/main/java/com/global/logic/GlobalLogic.java @@ -1,18 +1,10 @@ package com.global.logic; -import com.global.redis.RedisKey; -import com.global.redis.RedisUtil; -import config.SMServerArenaSetting; -import manager.STableManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.data.redis.core.ZSetOperations; -import util.TimeUtils; -import java.util.HashMap; import java.util.Map; -import java.util.Set; /** * @author lvxinran @@ -20,6 +12,7 @@ import java.util.Set; * @discribe */ +@Deprecated public class GlobalLogic { 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 7824643d6..495f6da76 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobalDataManaager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobalDataManaager.java @@ -524,8 +524,10 @@ public class GlobalDataManaager implements IManager { if(abstractActivity instanceof WholeLifeActivity){ ((WholeLifeActivity)abstractActivity).calWhenLogin(user); } - ///清空当天推送的礼包次数 + // 清空当天推送的礼包次数 user.getPlayerInfoManager().getNewRechargeInfo().ClearDayPushMap(); + // 清空当天在线时间 + user.getPlayerInfoManager().setDayOfOnlineTime(0); } user.getPlayerInfoManager().setLoginTime(TimeUtils.now()); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityType.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityType.java index 5707f8477..e0726e084 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityType.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityType.java @@ -145,8 +145,8 @@ public interface ActivityType { int RECHARGE_FIRST = 108;//直充首冲活动 int FREE_RECHARGE = 109;//免费充值,仙充 int OPEN_SERVER_COMPETE_RANK = 110;//开服冲榜活动 - int NEW_RECHARGE_SUM_DAY_6 = 90;//超值返利6 - int NEW_RECHARGE_SUM_DAY_12 = 111;//超值返利12 int NEW_RECHARGE_SUM_DAY_30 = 92;//超值返利30 + int NEW_RECHARGE_SUM_DAY_12 = 111;//超值返利12 + int GIVE_ONE_HUNDRED_THOUSAND_RECHARGE = 112;//送十万真充 } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityTypeEnum.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityTypeEnum.java index 025e9655a..16c32711e 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityTypeEnum.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityTypeEnum.java @@ -123,6 +123,7 @@ public enum ActivityTypeEnum { RECHARGE_FIRST(ActivityType.RECHARGE_FIRST, RechargeFirstActivity::new),//直充购买礼包活动 FREE_RECHARGE(ActivityType.FREE_RECHARGE, DefaultEmptyActivity::new),//免费充值,仙充 OPEN_SERVER_COMPETE_RANK(ActivityType.OPEN_SERVER_COMPETE_RANK, OpenServerCompeteRankActivity::new),//开服冲榜 + GIVE_ONE_HUNDRED_THOUSAND_RECHARGE(ActivityType.GIVE_ONE_HUNDRED_THOUSAND_RECHARGE, GiveOneHundredThousandActivity::new) ; private int type; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/GiveOneHundredThousandActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/GiveOneHundredThousandActivity.java new file mode 100644 index 000000000..01a94c04e --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/GiveOneHundredThousandActivity.java @@ -0,0 +1,158 @@ +package com.ljsd.jieling.logic.activity; + +import com.ljsd.jieling.exception.ErrorCode; +import com.ljsd.jieling.exception.ErrorCodeException; +import com.ljsd.jieling.globals.BIReason; +import com.ljsd.jieling.jbean.ActivityMission; +import com.ljsd.jieling.jbean.ActivityProgressInfo; +import com.ljsd.jieling.logic.dao.UserManager; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.util.ItemUtil; +import com.ljsd.jieling.util.MessageUtil; +import config.SSuperZhenChong; +import rpc.protocols.CommonProto; +import rpc.protocols.PlayerInfoProto; +import util.TimeUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * @author hj + * 送十万真充活动-bt版 + * 2022-9-6 + */ +public class GiveOneHundredThousandActivity extends AbstractActivity { + + GiveOneHundredThousandActivity(int id) { + super(id); + } + + @Override + public void initActivity(User user) throws Exception { + // 活动信息初始化 + ActivityMission mission = new ActivityMission(); + ActivityLogic.getInstance().initOtherMission(mission, new ArrayList<>()); + user.getActivityManager().getActivityMissionMap().put(id, mission); + LOGGER.info("送十万真充活动-bt版...uid={},activityId={}",user.getId(), id); + } + + @Override + public List getAllMissInfo(User user,ActivityMission activityMission, Set filter) { + if (activityMission == null){ + return new ArrayList<>(); + } + // 策划表的配置 + Map zhenChongMap = SSuperZhenChong.getMap(); + // 返回对象 + List missionInfos = new ArrayList<>(zhenChongMap.size()); + int rewardValue = 0; + for (SSuperZhenChong value : zhenChongMap.values()) { + // 参数初始化 + int missionId = value.getId(); + int progress = user.getPlayerInfoManager().getDayOfOnlineTime(); + int state = getState(user,value); + if (state >= 2){ + rewardValue += value.getRewardValue(); + } + // 封装proto并返回 + CommonProto.ActivityInfo.MissionInfo build = CommonProto.ActivityInfo.MissionInfo.newBuilder() + .setMissionId(missionId) + .setProgress(progress) + .setState(state) + .build(); + missionInfos.add(build); + } + activityMission.setV(rewardValue); + return missionInfos; + } + + /** + * 获取状态 + * @param user + * @param config + * @return + * 0:不可领取 + * 1:可领取 + * 2:已领取 + * 3:已过期 + */ + private int getState(User user, SSuperZhenChong config){ + if (config == null){ + return 0; + } + ActivityMission mission = user.getActivityManager().getActivityMissionMap().get(id); + ActivityProgressInfo info = mission.getActivityMissionMap().get(config.getId()); + if (info != null && info.getState() == 2){ + return 2; + } + int soFarWentDays = TimeUtils.getSoFarWentDays(mission.getCreatTime(), TimeUtils.now())+1; + int day = config.getDay(); + if (soFarWentDays < day){ + return 3; + } + if (soFarWentDays > day){ + return 0; + } + int time = user.getPlayerInfoManager().getDayOfOnlineTime(); + if (time >= config.getTime()){ + return 1; + } + return 0; + } + + /** + * 领取奖励 + * @param session + * @param missionId + * @return + * @throws Exception + */ + @Override + public boolean takeReward(ISession session, int missionId) throws Exception { + User user = UserManager.getUser(session.getUid()); + // activity check + ActivityMission mission = user.getActivityManager().getActivityMissionMap().get(id); + if (mission == null){ + throw new ErrorCodeException(ErrorCode.SYS_ERROR_CODE,"活动信息不存在:"+id); + } + // 根据天数获取当天的奖励内容 + int day = TimeUtils.getSoFarWentDays(mission.getCreatTime(), TimeUtils.now())+1; + Map zhenChongMap = SSuperZhenChong.getDayMap().get(day); + + ArrayList rewardList = new ArrayList<>(); + for (SSuperZhenChong value : zhenChongMap.values()) { + int state = getState(user, value); + if (state == 1){ + // 奖励 + rewardList.add(new int[][]{value.getReward()}); + // 更新数据库 + ActivityProgressInfo info = new ActivityProgressInfo(); + info.setState(2); + mission.getActivityMissionMap().put(missionId,info); + } + } + if (rewardList.size() == 0){ + return false; + } + // reward + CommonProto.Drop.Builder drop = ItemUtil.drop(user, rewardList, BIReason.TAKE_ACTIVITY_REWARD); + + PlayerInfoProto.TakeActivityRewardResponse build = PlayerInfoProto.TakeActivityRewardResponse.newBuilder().setDrop(drop).build(); + MessageUtil.sendMessage(session, 1, rewardResponseValue, build, true); + // 状态推送 + sendActivityProgress(session, mission, null); + // 打点上报 + reportTakeActivityReward(user,rewardList,missionId); + return true; + } + + @Override + public boolean checkActivityMissionFinishAndTake(int uid, int activityId, ActivityMission activityMission) { + return false; + } + +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PlayerManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PlayerManager.java index 34ab6eb72..c459ff32e 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PlayerManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PlayerManager.java @@ -121,6 +121,8 @@ public class PlayerManager extends MongoBase { private long onlineTime; + private int dayOfOnlineTime;//当天在线时间,秒 + private int isdayFirst = 0;//给客户端记录下 private Set fixIds = new CopyOnWriteArraySet<>(); @@ -961,6 +963,20 @@ public class PlayerManager extends MongoBase { updateString("onlineTime", this.onlineTime); } + public int getDayOfOnlineTime() { + return dayOfOnlineTime; + } + + public void setDayOfOnlineTime(int dayOfOnlineTime) { + this.dayOfOnlineTime = dayOfOnlineTime; + updateString("dayOfOnlineTime", this.dayOfOnlineTime); + } + + public void addDayOfOnlineTime(int time) { + this.dayOfOnlineTime += time; + updateString("dayOfOnlineTime", this.dayOfOnlineTime); + } + public int getIsdayFirst() { return isdayFirst; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/network/server/SessionManager.java b/serverlogic/src/main/java/com/ljsd/jieling/network/server/SessionManager.java index 0a157fe49..f52f59557 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/network/server/SessionManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/network/server/SessionManager.java @@ -430,10 +430,14 @@ public class SessionManager implements INetSession, INetReceived