diff --git a/gamecommon/src/main/java/util/TimeUtils.java b/gamecommon/src/main/java/util/TimeUtils.java index 4393874a6..630502e3e 100644 --- a/gamecommon/src/main/java/util/TimeUtils.java +++ b/gamecommon/src/main/java/util/TimeUtils.java @@ -843,6 +843,43 @@ public class TimeUtils { return c.getTimeInMillis(); } + /** + * 获取当前月份最后一天23:59:59秒时间戳 + */ + public static long getCurMonthEndTime(){ + //获取当前月最后一天 + Calendar ca = Calendar.getInstance(); + ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH)); + //将小时至0 + ca.set(Calendar.HOUR_OF_DAY, 23); + //将分钟至0 + ca.set(Calendar.MINUTE, 59); + //将秒至0 + ca.set(Calendar.SECOND,59); + //将毫秒至0 + ca.set(Calendar.MILLISECOND, 1000); + return ca.getTimeInMillis(); + } + + /** + * 获取某个时间戳当前月份最后一天23:59:59秒时间戳 + */ + public static long getMonthEndTime(Long time){ + //获取当前月最后一天 + Calendar ca = Calendar.getInstance(); + ca.setTimeInMillis(time); + ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH)); + //将小时至0 + ca.set(Calendar.HOUR_OF_DAY, 23); + //将分钟至0 + ca.set(Calendar.MINUTE, 59); + //将秒至0 + ca.set(Calendar.SECOND,59); + //将毫秒至0 + ca.set(Calendar.MILLISECOND, 1000); + return ca.getTimeInMillis(); + } + /** * x:第几天 * next:距离当前月几个月 @@ -860,6 +897,24 @@ public class TimeUtils { return c.getTimeInMillis(); } + /** + * time :时间戳 + * x:第几天 + * next:距离当前月几个月 + * 获取距离时间戳 几个月份第几天0点时间戳 + */ + public static long getMonthStartTime(long time,int x,int next){ + Calendar c = Calendar.getInstance(); + c.setTime(new Date(time)); + c.add(Calendar.MONTH,next); + c.set(Calendar.DAY_OF_MONTH, x); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND,0); + c.set(Calendar.MILLISECOND, 0); + return c.getTimeInMillis(); + } + /** * 获取距离现在最早的下一个周几的时间 * @param targetWeekday 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 c15f7f39f..875864de8 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 @@ -148,7 +148,7 @@ public class ActivityLogic implements IEventHandler{ //开服日期 String openTime = GameApplication.serverConfig.getOpenTime().split(" ")[0]; String nowTime = TimeUtils.getTimeStampYMDnew(TimeUtils.now()); - now = TimeUtils.getGapMonthsByTwoTime(openTime, nowTime)+1; + //now = TimeUtils.getGapMonthsByTwoTime(openTime, nowTime)+1; } long startTime = ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),0, 1); long endTime = ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),0, 2); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/SuperFundActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/SuperFundActivity.java index 77ed1646b..5f83bca47 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/SuperFundActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/SuperFundActivity.java @@ -64,7 +64,7 @@ public class SuperFundActivity extends AbstractActivity { // 状态初始化 initState(user,event1.getGiftId()); // 礼包处理 - updateValue(user); + updateValue(user,event1.getGiftId()); // 状态刷新 updateState(user); // 状态推送 @@ -75,22 +75,32 @@ public class SuperFundActivity extends AbstractActivity { * 礼包处理 * @param user */ - private void updateValue(User user) throws Exception { + private void updateValue(User user, int giftId){ // 活动详情 ActivityMission mission = user.getActivityManager().getActivityMissionMap().get(id); if (mission == null || mission.getV() == 2){ // 活动不存在或者已经购买了 return; } - // 获取活动信息 - ReceiveWelfareBag bag = getBagInfo(user); - // 已购买月卡 - if (bag.isOpen()){ + Map monthCard = user.getPlayerInfoManager().getMonthCard(); + int monthTime = 0; + // 普通月卡 + if (id == 78){ + monthTime = monthCard.getOrDefault(1, 0); + } + // 高级月卡 + if (id == 79){ + monthTime = monthCard.getOrDefault(2, 0); + } + // 已激活月卡 + if (monthTime > 0){ mission.setV(1); } // 已购买基金 - if (bag.isBought()){ + if (giftId == id){ mission.setV(2); + // 初始化基金 + reSetValue(user); } } @@ -136,15 +146,14 @@ public class SuperFundActivity extends AbstractActivity { * @throws ErrorCodeException */ private void updateState(User user) throws Exception { - // 获取礼包信息 - AbstractWelfareBag bag = getBagInfo(user); - if (bag.getLastBuyTime() == 0){ + // 活动信息 + ActivityMission mission = user.getActivityManager().getActivityMissionMap().get(id); + if (mission.getV() != 2){ return; } // 间隔天数,购买当天算第一天,所以需要+1 - int days = TimeUtils.differentDays(bag.getLastBuyTime(), TimeUtils.getTodayZero())+1; - // 活动信息 - ActivityMission mission = user.getActivityManager().getActivityMissionMap().get(id); + int days = TimeUtils.differentDays(mission.getCreatTime(), TimeUtils.getTodayZero())+1; + Map infoMap = getMissionMap(mission); // 遍历 infoMap.forEach((k,v)->{ @@ -204,26 +213,30 @@ public class SuperFundActivity extends AbstractActivity { ActivityMission mission = user.getActivityManager().getActivityMissionMap().get(id); Map infoMap = getMissionMap(mission); // 领取得天数 - int days = TimeUtils.differentDays(bag.getGetRewardTime(), TimeUtils.getTodayZero())+1; + int days = TimeUtils.differentDays(bag.getStartTime(), TimeUtils.getTodayZero())+1; + // 老玩家活动重置 + reSetValue(user); // 遍历 infoMap.forEach((k,v)->{ // 已领取得不做处理 if (days >= k){ + v.setProgrss(1); v.setState(1); mission.getActivityMissionMap().put(k,v); } }); + mission.setV(2); + bag.setGetRewardTime(0); + LOGGER.info("================超值基金老玩家兼容===============,uid:{},id:{}",user.getId(),id); } @Override - public void reSetValue(User user) throws Exception { + public void reSetValue(User user){ // 活动信息重置 ActivityManager activityManager = user.getActivityManager(); activityManager.getActivityMissionMap().remove(id); initActivity(user); - // 礼包信息重置 - ReceiveWelfareBag bagInfo = getBagInfo(user); - bagInfo.refresh(); + LOGGER.info("================超值基金礼包刷新===============,uid:{},id:{}",user.getId(),id); } /** diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserMissionManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserMissionManager.java index 58ccda8bf..196b01f2f 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserMissionManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserMissionManager.java @@ -591,7 +591,7 @@ public class UserMissionManager extends MongoBase { //缥缈之旅 if(!mistyTripMissionType.getDoingMissionIds().isEmpty() ){ - Map config = STableManager.getConfig(SEndlessTask.class); + Map config = STableManager.getConfig(SJourneyWithWind.class); if(config!=null&&config.size()!=0){ int starSum = HardStageLogic.getHardStageStarsSum(user); if(starSum != 0 && mistyTripCumulationData.getHardstage_stars() == 0){ diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionLoigc.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionLoigc.java index 5434952a2..cde8270a2 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionLoigc.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionLoigc.java @@ -34,6 +34,7 @@ import config.*; import manager.STableManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import util.TimeUtils; import java.util.*; import java.util.stream.Collectors; @@ -387,23 +388,26 @@ public class MissionLoigc { values.forEach(v->{ int id = v.getId(); SEndlessTask config = STableManager.getConfig(SEndlessTask.class).get(id); - CommonProto.UserMissionInfo.Builder info = CommonProto.UserMissionInfo.newBuilder(); - info.setMissionId(id); - info.setType(GameMisionType.ENDLESS_MISSION.getType()); - if (doingMissionIds.contains(id)){ - info.setState(MissionState.DOING.getState()); - int doingProgress = getDoingProgress(user, treasureCumulationData, config.getType(), config.getValues()[0]); - info.setProgress(doingProgress); + int day =new Date(TimeUtils.now()).getDate();//当月第几天 + if(day >= config.getViewDateUp() && day <= config.getViewDataDown()){ + CommonProto.UserMissionInfo.Builder info = CommonProto.UserMissionInfo.newBuilder(); + info.setMissionId(id); + info.setType(GameMisionType.ENDLESS_MISSION.getType()); + if (doingMissionIds.contains(id)){ + info.setState(MissionState.DOING.getState()); + int doingProgress = getDoingProgress(user, treasureCumulationData, config.getType(), config.getValues()[0]); + info.setProgress(doingProgress); + } + if (finishMissionIds.contains(id)){ + int finishProgress = config.getValues()[1][0]; + info.setState(MissionState.FINISH.getState()); + info.setProgress(finishProgress); + } + if (rewardedMissionIds.get(id)){ + info.setState(MissionState.REWARD.getState()); + } + missionList.add(info.build()); } - if (finishMissionIds.contains(id)){ - int finishProgress = config.getValues()[1][0]; - info.setState(MissionState.FINISH.getState()); - info.setProgress(finishProgress); - } - if (rewardedMissionIds.get(id)){ - info.setState(MissionState.REWARD.getState()); - } - missionList.add(info.build()); }); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/ToolsUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/util/ToolsUtil.java index 650712ac4..d74b3e645 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/ToolsUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/ToolsUtil.java @@ -12,13 +12,28 @@ public class ToolsUtil { baseTime = endTimeLong; } long startTime=0; - if(time == ActivityType.OPEN_TYPE_TIME || time == ActivityType.OPEN_TYPE_MONTHS){ + if(time == ActivityType.OPEN_TYPE_TIME ){ startTime = baseTime; }else if(time == ActivityType.OPEN_TYPE_SERVER){ long serverOpenTime = GameApplication.serverConfig.getCacheOpenTime(); startTime = serverOpenTime + baseTime*1000; }else if(time == ActivityType.OPEN_TYPE_ROLE){ startTime = TimeUtils.getAppointTimeInXDay(createUserTime,0) + baseTime*1000; + }else if(time == ActivityType.OPEN_TYPE_MONTHS){ + if(type == 1){ + if(baseTime ==1){ + //第一个月 + startTime = GameApplication.serverConfig.getCacheOpenTime(); + }else{ + startTime = TimeUtils.getMonthStartTime(GameApplication.serverConfig.getCacheOpenTime(),1,(int)baseTime-1); + } + }else if(type ==2){ + if(baseTime ==1){ + startTime = TimeUtils.getMonthEndTime(GameApplication.serverConfig.getCacheOpenTime()); + }else{ + startTime = TimeUtils.getMonthStartTime(GameApplication.serverConfig.getCacheOpenTime(),1,(int)baseTime); + } + } } return startTime; }