From 3881e066edbb023e6dd707bc4baaae9803cdbb98 Mon Sep 17 00:00:00 2001 From: duhui Date: Mon, 19 Sep 2022 16:32:55 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9B=B4=E8=B4=AD=E9=A6=96=E5=86=B2=E6=B4=BB?= =?UTF-8?q?=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamecommon/src/main/java/util/TimeUtils.java | 7 + .../jieling/logic/activity/ActivityType.java | 1 + .../logic/activity/ActivityTypeEnum.java | 3 +- .../logic/activity/RechargeFirstActivity.java | 174 ++++++++++++++++++ 4 files changed, 184 insertions(+), 1 deletion(-) create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/logic/activity/RechargeFirstActivity.java diff --git a/gamecommon/src/main/java/util/TimeUtils.java b/gamecommon/src/main/java/util/TimeUtils.java index e063d7c80..e6543cde0 100644 --- a/gamecommon/src/main/java/util/TimeUtils.java +++ b/gamecommon/src/main/java/util/TimeUtils.java @@ -1346,6 +1346,13 @@ public class TimeUtils { return canRefresh; } + /** + * 查询两个时间戳的第x小时中间相隔几天 + * @param date1 + * @param date2 + * @param hour + * @return + */ public static int differentDaysByHour(long date1, long date2, int hour) { Calendar cal1 = Calendar.getInstance(); cal1.setTimeInMillis(date1); 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 ea0569c00..6ab80f505 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 @@ -144,4 +144,5 @@ public interface ActivityType { int ALL_PEOPLE_WELFARE = 105;//全民福利 int GIVE_ENDLESS_DRAW = 106;//送无限抽 int GM_DIAL = 107;//gm转盘 + int RECHARGE_FIRST = 108;//直充首冲活动 } 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 a66056f5a..087be253d 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 @@ -116,7 +116,8 @@ public enum ActivityTypeEnum { INFINITE_RESOURCES_PAVILION(ActivityType.INFINITE_RESOURCES_PAVILION, InfiniteResourcesPavilionActivity::new),//无限资源阁 ALL_PEOPLE_WELFARE(ActivityType.ALL_PEOPLE_WELFARE, AllPeopleWelfareActivity::new),//全民福利 GIVE_ENDLESS_DRAW(ActivityType.GIVE_ENDLESS_DRAW, GiveEndlessDrawActivity::new),//送无限抽 - GM_DIAL(ActivityType.GM_DIAL, LuckWheelNormalActivity::new);//gm转盘 + GM_DIAL(ActivityType.GM_DIAL, LuckWheelNormalActivity::new),//gm转盘 + RECHARGE_FIRST(ActivityType.RECHARGE_FIRST, RechargeFirstActivity::new),//直充购买礼包活动 ; private int type; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/RechargeFirstActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/RechargeFirstActivity.java new file mode 100644 index 000000000..c6671d439 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/RechargeFirstActivity.java @@ -0,0 +1,174 @@ +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.activity.event.IEvent; +import com.ljsd.jieling.logic.activity.event.Poster; +import com.ljsd.jieling.logic.activity.event.SuperBoxEvent; +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.SActivityRewardConfig; +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 RechargeFirstActivity extends AbstractActivity { + + RechargeFirstActivity(int id) { + super(id); + Poster.getPoster().listenEvent(this, SuperBoxEvent.class); + } + + @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 void onEvent(IEvent event) throws Exception { + // 类型验证 + if (!(event instanceof SuperBoxEvent)) { + return; + } + // 获取信息 + SuperBoxEvent event1 = (SuperBoxEvent) event; + User user = UserManager.getUser(event1.getUserId()); + // 活动数据处理 + updateValue(user, event1.getGiftId()); + // 状态推送 + sendActivityProgress(user, user.getActivityManager().getActivityMissionMap().get(id), null); + } + + /** + * 修改参数 + * @param giftId + */ + private void updateValue(User user, int giftId){ + if (giftId <= 0){ + return; + } + Map missionMap = user.getActivityManager().getActivityMissionMap().get(id).getActivityMissionMap(); + List rewardConfigs = SActivityRewardConfig.getsActivityRewardConfigByActivityId(id); + for (SActivityRewardConfig reward : rewardConfigs) { + // 礼包id相等并且库里没有,那么则创建一条新的 + if (reward.getValues()[0][0] == giftId && missionMap.get(reward.getId()) == null){ + ActivityProgressInfo progressInfo = new ActivityProgressInfo(); + progressInfo.setProgrss(TimeUtils.nowInt()); + progressInfo.setState(0); + } + } + } + + @Override + public List getAllMissInfo(User user,ActivityMission activityMission, Set filter) { + if (activityMission == null){ + return new ArrayList<>(); + } + // 库里存储的活动档位信息 + Map progressInfoMap = activityMission.getActivityMissionMap(); + // 策划表的配置 + List rewardConfigs = SActivityRewardConfig.getsActivityRewardConfigByActivityId(id); + // 返回对象 + List missionInfos = new ArrayList<>(rewardConfigs.size()); + for (SActivityRewardConfig rewardConfig : rewardConfigs) { + // 参数初始化 + int missionId = rewardConfig.getId(); + int state = getState(missionId, progressInfoMap.get(missionId)); + // 封装proto并返回 + CommonProto.ActivityInfo.MissionInfo build = CommonProto.ActivityInfo.MissionInfo.newBuilder() + .setMissionId(missionId) + .setProgress(0) + .setState(state) + .build(); + missionInfos.add(build); + } + return missionInfos; + } + + /** + * 获取状态 + * @param progressInfo + * @return + */ + private int getState(int missionId, ActivityProgressInfo progressInfo){ + // 未购买过任何条目礼包 + if (progressInfo == null){ + return 0; + } + // 已领取 + if (progressInfo.getState() == 2){ + return 2; + } + SActivityRewardConfig rewardConfig = SActivityRewardConfig.getsActivityRewardConfigByMissionId(missionId); + int days = TimeUtils.differentDaysByHour(progressInfo.getProgrss()*1000L, TimeUtils.now(),0) + 1; + // 判断金额和天数 + if (days >= rewardConfig.getValues()[0][1]){ + 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); + } + SActivityRewardConfig rewardConfig = SActivityRewardConfig.getsActivityRewardConfigByMissionId(missionId); + if (rewardConfig == null){ + throw new ErrorCodeException(ErrorCode.SYS_ERROR_CODE,"领取挡位不存在,活动id ==> "+id+",挡位id==>"+missionId); + } + int state = getState(missionId, mission.getActivityMissionMap().get(missionId)); + if (state != 1){ + throw new ErrorCodeException(ErrorCode.SYS_ERROR_CODE,"档位已领取或条件不满足,活动id ==> "+id+",挡位id ==>"+missionId); + } + // reward + int[][] reward = rewardConfig.getReward(); + CommonProto.Drop.Builder drop = ItemUtil.drop(user, reward, BIReason.TAKE_ACTIVITY_REWARD); + // 更新数据库 + ActivityProgressInfo info = new ActivityProgressInfo(); + info.setState(2); + mission.getActivityMissionMap().put(missionId,info); + + PlayerInfoProto.TakeActivityRewardResponse build = PlayerInfoProto.TakeActivityRewardResponse.newBuilder().setDrop(drop).build(); + MessageUtil.sendMessage(session, 1, rewardResponseValue, build, true); + // 状态推送 + sendActivityProgress(session, mission, null); + // 打点上报 + reportTakeActivityReward(user, reward, missionId); + return true; + } + + public boolean checkActivityMissionFinishAndTake(int uid,int activityId,ActivityMission activityMission){ + return false; + } +}