循环活动二改
parent
7fc1d5c3a9
commit
dfa546ac98
|
|
@ -913,4 +913,31 @@ public class TimeUtils {
|
|||
public static long getLatelyTime(long startTimeMillis, long currentMillis, long 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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -361,10 +361,10 @@ public class ActivityLogic implements IEventHandler{
|
|||
LOGGER.info("checkActivityOfUser uid={} remove activity={}", user.getId(), openActivityId);
|
||||
continue;
|
||||
}
|
||||
//创角
|
||||
//多少天内不会出现 创角判断
|
||||
int[] ifOpen = sGlobalActivity.getIfOpen();
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
|
@ -379,6 +379,11 @@ public class ActivityLogic implements IEventHandler{
|
|||
Poster.getPoster().dispatchEvent(new ActivityStateChangeEvent(user.getId(),openActivityId,1));
|
||||
}
|
||||
}
|
||||
// 循环活动初始化
|
||||
int time = sGlobalActivity.getTime();
|
||||
if (time == ActivityType.OPEN_TYPE_CYCLE){
|
||||
refreshCycleActivity(user, sGlobalActivity, builder);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
boolean checked = checkStateAndInitFromActivity(user, openActivityId);
|
||||
|
|
@ -429,7 +434,7 @@ public class ActivityLogic implements IEventHandler{
|
|||
}
|
||||
} 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);
|
||||
activityMissionMap.remove(activityId);
|
||||
if (builder != null) {
|
||||
|
|
@ -452,41 +457,37 @@ public class ActivityLogic implements IEventHandler{
|
|||
}
|
||||
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 {
|
||||
goRewardActivity(user,activityId,builder, isRemove);
|
||||
goRewardActivity(user, activityId, builder, isRemove);
|
||||
}
|
||||
}
|
||||
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 {
|
||||
ActivityMission activityMission = user.getActivityManager().getActivityMissionMap().get(activityId);
|
||||
if (activityMission != null) {
|
||||
AbstractActivity abstractActivity = ActivityTypeEnum.getActicityById(activityId);
|
||||
if (null == abstractActivity) {
|
||||
return;
|
||||
}
|
||||
if(activityMission.getOpenType() != ActivityType.CLOSE_STATE){
|
||||
abstractActivity.onActivityEndSelfWithDealReward(user);
|
||||
abstractActivity.setOpenState(user,ActivityType.CLOSE_STATE);
|
||||
Poster.getPoster().dispatchEvent(new ActivityStateChangeEvent(user.getId(),activityId,ActivityType.CLOSE_STATE));
|
||||
}
|
||||
if(isRemoveInfo){
|
||||
user.getActivityManager().getActivityMissionMap().remove(activityId);
|
||||
LOGGER.info("the uid={},remove the activity id ={}", user.getId(), activityId);
|
||||
if (builder != null) {
|
||||
builder.addCloseActivityId(activityId);
|
||||
}
|
||||
if (activityMission == null) {
|
||||
return;
|
||||
}
|
||||
AbstractActivity abstractActivity = ActivityTypeEnum.getActicityById(activityId);
|
||||
if (null == abstractActivity) {
|
||||
return;
|
||||
}
|
||||
if(activityMission.getOpenType() != ActivityType.CLOSE_STATE){
|
||||
abstractActivity.onActivityEndSelfWithDealReward(user);
|
||||
abstractActivity.setOpenState(user,ActivityType.CLOSE_STATE);
|
||||
Poster.getPoster().dispatchEvent(new ActivityStateChangeEvent(user.getId(),activityId,ActivityType.CLOSE_STATE));
|
||||
}
|
||||
if(isRemoveInfo){
|
||||
user.getActivityManager().getActivityMissionMap().remove(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 type = sGlobalActivity.getType();
|
||||
int gapTime = sGlobalActivity.getGapTime();
|
||||
int cycleMinute = sGlobalActivity.getCycleMinute();
|
||||
|
||||
if(activityStatus == ActivityType.CLOSE_STATE){
|
||||
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) {
|
||||
continue;
|
||||
}
|
||||
int startTime = (int) (ToolsUtil.getTimeLong(startTimeLong, endTimeLong, timeType,createTime, 1, 0) / 1000);
|
||||
int endTime = (int) (ToolsUtil.getTimeLong(startTimeLong, endTimeLong, timeType,createTime, 2, 0) / 1000);;
|
||||
int startTime = (int) (ToolsUtil.getTimeLong(startTimeLong, endTimeLong, timeType,createTime, 1, cycleMinute) / 1000);
|
||||
int endTime = (int) (ToolsUtil.getTimeLong(startTimeLong, endTimeLong, timeType,createTime, 2, cycleMinute) / 1000);
|
||||
|
||||
if(type == ActivityType.DAILY_PREFERENTIAL_GIFT){ // 每日特惠活动
|
||||
startTime = (int)(activityState.getValue().getCreatTime()/1000);
|
||||
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{
|
||||
endTime = endTime + (int) (TimeUtils.DAY * gapTime / 1000);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -52,11 +52,7 @@ public class WeekCardLogic {
|
|||
long createTime = user.getPlayerInfoManager().getCreateTime();
|
||||
// 计算间隔时间
|
||||
long now = TimeUtils.now();
|
||||
long startTimeLong = ToolsUtil.getTimeLong(activity.getStartTimeLong(),activity.getEndTimeLong(),activity.getTime(),createTime,1, 0);
|
||||
long cycleTime = activity.getCycleMinute() * TimeUtils.ONE_MINUTE;
|
||||
if (cycleTime > 0){
|
||||
startTimeLong = TimeUtils.getLatelyTime(startTimeLong, now, cycleTime);
|
||||
}
|
||||
long startTimeLong = ToolsUtil.getTimeLong(activity.getStartTimeLong(),activity.getEndTimeLong(),activity.getTime(),createTime,1, activity.getCycleMinute());
|
||||
|
||||
int days = TimeUtils.differentDays(startTimeLong, now)+1;
|
||||
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ public class ToolsUtil {
|
|||
// 循环时间
|
||||
long cycleTimeMils = cycleTime * TimeUtils.ONE_MINUTE;
|
||||
// 最近的开始时间
|
||||
long latelyStartTime = TimeUtils.getLatelyTime(startTimeLong, now, cycleTimeMils);
|
||||
long latelyStartTime = TimeUtils.calculateNextStartTime(startTimeLong, now, cycleTimeMils);
|
||||
if (type == 1){
|
||||
resultTime = latelyStartTime;
|
||||
}else {
|
||||
|
|
|
|||
Loading…
Reference in New Issue