循环活动二改

master_otnew
grimm 2024-03-21 18:09:12 +08:00
parent 7fc1d5c3a9
commit dfa546ac98
4 changed files with 83 additions and 65 deletions

View File

@ -913,4 +913,31 @@ public class TimeUtils {
public static long getLatelyTime(long startTimeMillis, long currentMillis, long intervalMillis){ public static long getLatelyTime(long startTimeMillis, long currentMillis, long intervalMillis){
return startTimeMillis + (currentMillis - startTimeMillis) / intervalMillis * intervalMillis; return startTimeMillis + (currentMillis - startTimeMillis) / intervalMillis * intervalMillis;
} }
/**
*
*
* @param startTime
* @param interval
* @param currentTime
* @return
*/
public static long calculateNextStartTime(long startTime, long interval, long currentTime) {
// 计算从开始时间到当前时间的差异
long timeDiff = currentTime - startTime;
// 计算间隔时间的完整倍数
long intervalCount = timeDiff / interval;
// 计算距离当前时间最近的开始时间
long nextStartTime = startTime + interval * intervalCount;
// 如果计算出的时间小于或等于当前时间,则选择下一个开始时间
if (nextStartTime <= currentTime) {
nextStartTime += interval;
}
return nextStartTime;
}
} }

View File

@ -361,10 +361,10 @@ public class ActivityLogic implements IEventHandler{
LOGGER.info("checkActivityOfUser uid={} remove activity={}", user.getId(), openActivityId); LOGGER.info("checkActivityOfUser uid={} remove activity={}", user.getId(), openActivityId);
continue; continue;
} }
//创角 //多少天内不会出现 创角判断
int[] ifOpen = sGlobalActivity.getIfOpen(); int[] ifOpen = sGlobalActivity.getIfOpen();
if(ifOpen!=null && ifOpen.length>0 && ifOpen[0]==1){ if(ifOpen!=null && ifOpen.length>0 && ifOpen[0]==1){
if(userCreateTime + ifOpen[1]*TimeUtils.ONE_DAY > now){ if(userCreateTime + ifOpen[1] * TimeUtils.ONE_DAY > now){
continue; continue;
} }
} }
@ -379,6 +379,11 @@ public class ActivityLogic implements IEventHandler{
Poster.getPoster().dispatchEvent(new ActivityStateChangeEvent(user.getId(),openActivityId,1)); Poster.getPoster().dispatchEvent(new ActivityStateChangeEvent(user.getId(),openActivityId,1));
} }
} }
// 循环活动初始化
int time = sGlobalActivity.getTime();
if (time == ActivityType.OPEN_TYPE_CYCLE){
refreshCycleActivity(user, sGlobalActivity, builder);
}
continue; continue;
} }
boolean checked = checkStateAndInitFromActivity(user, openActivityId); boolean checked = checkStateAndInitFromActivity(user, openActivityId);
@ -429,7 +434,7 @@ public class ActivityLogic implements IEventHandler{
} }
} else if (activityMissionMap.containsKey(activityId)) { } else if (activityMissionMap.containsKey(activityId)) {
//如果活动没有开启,但是玩家有这个活动的数据,则清除,并通知客户端活动关闭 //如果活动没有开启,但是玩家有这个活动的数据,则清除,并通知客户端活动关闭
if(now < startTime && time != ActivityType.OPEN_TYPE_CYCLE){ if(now < startTime){
LOGGER.info("[活动延期,清除遗留玩家数据] [uid:{}] [activityId:{}] [activityType:{}] [activityStartTime:{}]",user.getId(),activityId, type, startTimeLong); LOGGER.info("[活动延期,清除遗留玩家数据] [uid:{}] [activityId:{}] [activityType:{}] [activityStartTime:{}]",user.getId(),activityId, type, startTimeLong);
activityMissionMap.remove(activityId); activityMissionMap.remove(activityId);
if (builder != null) { if (builder != null) {
@ -452,41 +457,37 @@ public class ActivityLogic implements IEventHandler{
} }
openNewActivityIds.add(activityId); openNewActivityIds.add(activityId);
} }
else if (time == ActivityType.OPEN_TYPE_CYCLE){//循环
// 循环时间
long cycleTime = cycleMinute * TimeUtils.ONE_MINUTE;
// 最近的开始时间
long latelyStartTime = TimeUtils.getLatelyTime(startTime, now, cycleTime);
// 当前期活动未开始
if (now < latelyStartTime) {
continue;
}
// 最近的结束时间
long latelyEndTime = latelyStartTime + (endTime - startTime);
ActivityMission mission = activityMissionMap.get(activityId);
// 活动存在,(当前时间大于最近的结束时间 或 活动创建时间大于最近得开启时间),表示当期活动结束
if (mission != null && (now > latelyEndTime || mission.getCreatTime() < latelyStartTime)){
goRewardActivity(user,activityId,builder, isRemove);
continue;
}
if (now > latelyEndTime){
continue;
}
if (mission == null){
boolean checked = checkStateAndInitFromActivity(user, activityId);
if (checked){
continue;
}
}
openNewActivityIds.add(activityId);
}
else { else {
goRewardActivity(user,activityId,builder, isRemove); goRewardActivity(user, activityId, builder, isRemove);
} }
} }
return openNewActivityIds; return openNewActivityIds;
}
/**
*
* @param user
* @param activity
* @param builder roto
* @throws Exception
*/
public void refreshCycleActivity(User user, SGlobalActivity activity, PlayerInfoProto.ActivityUpateIndication.Builder builder) throws Exception {
ActivityManager activityManager = user.getActivityManager();
int activityId = activity.getId();
long now = TimeUtils.now();
long startTime = ToolsUtil.getTimeLong(activity.getStartTimeLong(), activity.getEndTimeLong(), activity.getTime(), 0, 1, activity.getCycleMinute());
long endTime = ToolsUtil.getTimeLong(activity.getStartTimeLong(), activity.getEndTimeLong(), activity.getTime(), 0, 2, activity.getCycleMinute());
// 当前期活动未开始
if (now < startTime || now > endTime) {
return;
}
ActivityMission mission = activityManager.getActivityMissionMap().get(activityId);
long gepTimeLong = endTime + activity.getGapTime() * TimeUtils.ONE_DAY;
// 活动存在,(当前时间大于最近的结束时间 或 活动创建时间大于最近得开启时间),表示当期活动结束
if (mission.getCreatTime() < startTime){
goRewardActivity(user, activityId, builder, now > gepTimeLong);
checkStateAndInitFromActivity(user, activityId);
}
} }
/** /**
@ -511,22 +512,23 @@ public class ActivityLogic implements IEventHandler{
*/ */
private static void goRewardActivity(User user,int activityId,PlayerInfoProto.ActivityUpateIndication.Builder builder,boolean isRemoveInfo) throws Exception { private static void goRewardActivity(User user,int activityId,PlayerInfoProto.ActivityUpateIndication.Builder builder,boolean isRemoveInfo) throws Exception {
ActivityMission activityMission = user.getActivityManager().getActivityMissionMap().get(activityId); ActivityMission activityMission = user.getActivityManager().getActivityMissionMap().get(activityId);
if (activityMission != null) { if (activityMission == null) {
AbstractActivity abstractActivity = ActivityTypeEnum.getActicityById(activityId); return;
if (null == abstractActivity) { }
return; AbstractActivity abstractActivity = ActivityTypeEnum.getActicityById(activityId);
} if (null == abstractActivity) {
if(activityMission.getOpenType() != ActivityType.CLOSE_STATE){ return;
abstractActivity.onActivityEndSelfWithDealReward(user); }
abstractActivity.setOpenState(user,ActivityType.CLOSE_STATE); if(activityMission.getOpenType() != ActivityType.CLOSE_STATE){
Poster.getPoster().dispatchEvent(new ActivityStateChangeEvent(user.getId(),activityId,ActivityType.CLOSE_STATE)); abstractActivity.onActivityEndSelfWithDealReward(user);
} abstractActivity.setOpenState(user,ActivityType.CLOSE_STATE);
if(isRemoveInfo){ Poster.getPoster().dispatchEvent(new ActivityStateChangeEvent(user.getId(),activityId,ActivityType.CLOSE_STATE));
user.getActivityManager().getActivityMissionMap().remove(activityId); }
LOGGER.info("the uid={},remove the activity id ={}", user.getId(), activityId); if(isRemoveInfo){
if (builder != null) { user.getActivityManager().getActivityMissionMap().remove(activityId);
builder.addCloseActivityId(activityId); LOGGER.info("the uid={},remove the activity id ={}", user.getId(), activityId);
} if (builder != null) {
builder.addCloseActivityId(activityId);
} }
} }
} }
@ -599,6 +601,7 @@ public class ActivityLogic implements IEventHandler{
int timeType = sGlobalActivity.getTime(); int timeType = sGlobalActivity.getTime();
int type = sGlobalActivity.getType(); int type = sGlobalActivity.getType();
int gapTime = sGlobalActivity.getGapTime(); int gapTime = sGlobalActivity.getGapTime();
int cycleMinute = sGlobalActivity.getCycleMinute();
if(activityStatus == ActivityType.CLOSE_STATE){ if(activityStatus == ActivityType.CLOSE_STATE){
long prepareTime = ToolsUtil.getEndTimeLong(startTimeLong, endTimeLong, timeType,0, gapTime); long prepareTime = ToolsUtil.getEndTimeLong(startTimeLong, endTimeLong, timeType,0, gapTime);
@ -625,21 +628,13 @@ public class ActivityLogic implements IEventHandler{
if (sGlobalActivity.getIsSaving()==0 && activityStatus != ActivityType.OPEN_STATE) { if (sGlobalActivity.getIsSaving()==0 && activityStatus != ActivityType.OPEN_STATE) {
continue; continue;
} }
int startTime = (int) (ToolsUtil.getTimeLong(startTimeLong, endTimeLong, timeType,createTime, 1, 0) / 1000); int startTime = (int) (ToolsUtil.getTimeLong(startTimeLong, endTimeLong, timeType,createTime, 1, cycleMinute) / 1000);
int endTime = (int) (ToolsUtil.getTimeLong(startTimeLong, endTimeLong, timeType,createTime, 2, 0) / 1000);; int endTime = (int) (ToolsUtil.getTimeLong(startTimeLong, endTimeLong, timeType,createTime, 2, cycleMinute) / 1000);
if(type == ActivityType.DAILY_PREFERENTIAL_GIFT){ // 每日特惠活动 if(type == ActivityType.DAILY_PREFERENTIAL_GIFT){ // 每日特惠活动
startTime = (int)(activityState.getValue().getCreatTime()/1000); startTime = (int)(activityState.getValue().getCreatTime()/1000);
endTime = startTime+604800; endTime = startTime+604800;
} }
else if (timeType == ActivityType.OPEN_TYPE_CYCLE){
long now = TimeUtils.now();
long intervalTime = (endTime - startTime) * 1000L;
long cycleTime = sGlobalActivity.getCycleMinute() * TimeUtils.ONE_MINUTE;
long latelyStarTime = TimeUtils.getLatelyTime(startTime * 1000L, now, cycleTime);
startTime = (int) (latelyStarTime/1000);
endTime = (int) ((latelyStarTime + intervalTime + TimeUtils.DAY * gapTime)/1000);
}
else{ else{
endTime = endTime + (int) (TimeUtils.DAY * gapTime / 1000); endTime = endTime + (int) (TimeUtils.DAY * gapTime / 1000);
} }

View File

@ -52,11 +52,7 @@ public class WeekCardLogic {
long createTime = user.getPlayerInfoManager().getCreateTime(); long createTime = user.getPlayerInfoManager().getCreateTime();
// 计算间隔时间 // 计算间隔时间
long now = TimeUtils.now(); long now = TimeUtils.now();
long startTimeLong = ToolsUtil.getTimeLong(activity.getStartTimeLong(),activity.getEndTimeLong(),activity.getTime(),createTime,1, 0); long startTimeLong = ToolsUtil.getTimeLong(activity.getStartTimeLong(),activity.getEndTimeLong(),activity.getTime(),createTime,1, activity.getCycleMinute());
long cycleTime = activity.getCycleMinute() * TimeUtils.ONE_MINUTE;
if (cycleTime > 0){
startTimeLong = TimeUtils.getLatelyTime(startTimeLong, now, cycleTime);
}
int days = TimeUtils.differentDays(startTimeLong, now)+1; int days = TimeUtils.differentDays(startTimeLong, now)+1;

View File

@ -57,7 +57,7 @@ public class ToolsUtil {
// 循环时间 // 循环时间
long cycleTimeMils = cycleTime * TimeUtils.ONE_MINUTE; long cycleTimeMils = cycleTime * TimeUtils.ONE_MINUTE;
// 最近的开始时间 // 最近的开始时间
long latelyStartTime = TimeUtils.getLatelyTime(startTimeLong, now, cycleTimeMils); long latelyStartTime = TimeUtils.calculateNextStartTime(startTimeLong, now, cycleTimeMils);
if (type == 1){ if (type == 1){
resultTime = latelyStartTime; resultTime = latelyStartTime;
}else { }else {