四灵试炼开启天数管理

back_recharge
duhui 2022-04-21 14:06:25 +08:00
parent 232fc4efeb
commit f86f4e5676
3 changed files with 104 additions and 32 deletions

View File

@ -11,10 +11,7 @@ import java.sql.Timestamp;
import java.text.DateFormat; import java.text.DateFormat;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Calendar; import java.util.*;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
@ -801,7 +798,6 @@ public class TimeUtils {
* *
*1 *1
* @param src * @param src
* @param target
* @return * @return
*/ */
public static boolean isSameWeek7(long src) { public static boolean isSameWeek7(long src) {
@ -1224,6 +1220,63 @@ public class TimeUtils {
return hour; return hour;
} }
/**
*
* @param dataBegin
* @param dataEnd
* @param weekDays 160
* @return List
*/
public static int getDayOfWeekWithinDateInterval(String dataBegin, String dataEnd, int weekDays) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
List<String> dateResult = new ArrayList<>();
Calendar cal = Calendar.getInstance();
String[] dateInterval = {dataBegin, dataEnd};
Date[] dates = new Date[dateInterval.length];
for (int i = 0; i < dateInterval.length; i++) {
String[] ymd = dateInterval[i].split("[^\\d]+");
cal.set(Integer.parseInt(ymd[0]), Integer.parseInt(ymd[1]) - 1, Integer.parseInt(ymd[2]));
dates[i] = cal.getTime();
}
for (Date date = dates[0]; date.compareTo(dates[1]) <= 0; ) {
cal.setTime(date);
if (cal.get(Calendar.DAY_OF_WEEK) - 1 == weekDays) {
String format = sdf.format(date);
dateResult.add(format);
}
cal.add(Calendar.DATE, 1);
date = cal.getTime();
}
return dateResult.size();
}
/**
* date2date1
*
* @param time1
* @param time2
* @param weekday
* @return
*/
public static int differentDaysToWeekday(long time1, long time2, int weekday) {
// 格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
// 第二天
c.setTimeInMillis(time1);
c.add(Calendar.DATE, 1);
// 转换格式
Date date1 = new Date(time1);
Date date2 = new Date(time2);
String format1 = sdf.format(date1);
String format2 = sdf.format(date2);
// 周几
if (weekday == 7){
weekday = 0;
}
return getDayOfWeekWithinDateInterval(format1,format2,weekday);
}
/** /**
* date2date1 * date2date1
* *

View File

@ -453,10 +453,8 @@ public class GlobalDataManaager implements IManager {
PlayerLogic.getInstance().sendTimingMail(user); PlayerLogic.getInstance().sendTimingMail(user);
user.getGuildMyInfo().setLastHurt(0); user.getGuildMyInfo().setLastHurt(0);
// 距离上次登陆相隔几天
int num = TimeUtils.differentDays(user.getPlayerInfoManager().getLoginTime(), TimeUtils.now());
// 四灵试炼,计算每天次数 // 四灵试炼,计算每天次数
FourChallengeLogic.getInstance().addFourChallengeNum(user,num); FourChallengeLogic.getInstance().addFourChallengeNum(user,user.getPlayerInfoManager().getLoginTime());
// 助战清理 // 助战清理
HelpHeroLogic.getInstance().clearHelpInfo(user); HelpHeroLogic.getInstance().clearHelpInfo(user);
// 七界推送 // 七界推送

View File

@ -380,9 +380,14 @@ public class FourChallengeLogic {
* @param user * @param user
*/ */
public void firstGetTimes(User user) throws Exception { public void firstGetTimes(User user) throws Exception {
if (ifOpenFourChallenge(user) && !user.getPlayerInfoManager().isOpenFourChallenge()){ // 功能开启了,并且是首次登陆
if (!ifOpenFourChallenge(user) || user.getPlayerInfoManager().isOpenFourChallenge()){
return;
}
// 检测一次 // 检测一次
if (status == null){ check(); } if (status == null){
check();
}
// 获取每天增加的天数 // 获取每天增加的天数
int campOpenDay = STableManager.getConfig(SCampTowerSetting.class).get(1).getTimesAddPerDay(); int campOpenDay = STableManager.getConfig(SCampTowerSetting.class).get(1).getTimesAddPerDay();
for (int i = 0; i < status.length; i++) { for (int i = 0; i < status.length; i++) {
@ -398,24 +403,40 @@ public class FourChallengeLogic {
fourChallengeGetInfo(session,false); fourChallengeGetInfo(session,false);
} }
} }
}
/** /**
* *
* @param user * @param user
* @param num * @param time
*/ */
public void addFourChallengeNum(User user,int num) throws Exception { public void addFourChallengeNum(User user,long time) throws Exception {
// 四灵试炼活动未开启 // 四灵试炼活动未开启
if (!ifOpenFourChallenge(user)){ return; } boolean b = ifOpenFourChallenge(user);
if (!b){
return;
}
// 检测一次 // 检测一次
if (status == null){ check(); } if (status == null){
check();
}
// 获取每天增加的天数 // 获取每天增加的天数
int campOpenDay = STableManager.getConfig(SCampTowerSetting.class).get(1).getTimesAddPerDay(); SCampTowerSetting towerSetting = STableManager.getConfig(SCampTowerSetting.class).get(1);
int campOpenDay = towerSetting.getTimesAddPerDay();
for (int i = 0; i < status.length; i++) { for (int i = 0; i < status.length; i++) {
// 类型未开启 // 类型未开启
if (status[i] == 0){ continue; } if (status[i] == 0){
user.getPlayerInfoManager().addFourChallengeRemainTimes(i, campOpenDay*num); continue;
}
// 记录天数
int count = 0;
// 开启的星期数第一位是开启阵营要调过从1开始
int[] openDay = towerSetting.getCampOpenDay()[i];
for (int i1 = 1; i1 < openDay.length; i1++) {
// 中间经过了几次开启时间
count += TimeUtils.differentDaysToWeekday(time,TimeUtils.now(),openDay[i]);
}
user.getPlayerInfoManager().addFourChallengeRemainTimes(i, campOpenDay*count);
} }
LOGGER.info("四灵试炼层数刷新,每日登录,玩家:{},层数:{}", user.getId(), Arrays.toString(user.getPlayerInfoManager().getFourChallengeRemainTimes())); LOGGER.info("四灵试炼层数刷新,每日登录,玩家:{},层数:{}", user.getId(), Arrays.toString(user.getPlayerInfoManager().getFourChallengeRemainTimes()));
user.getPlayerInfoManager().setOpenFourChallenge(true); user.getPlayerInfoManager().setOpenFourChallenge(true);