From f86f4e56768f6cd1113b910aca70fb481ecf7e10 Mon Sep 17 00:00:00 2001 From: duhui Date: Thu, 21 Apr 2022 14:06:25 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9B=9B=E7=81=B5=E8=AF=95=E7=82=BC=E5=BC=80?= =?UTF-8?q?=E5=90=AF=E5=A4=A9=E6=95=B0=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamecommon/src/main/java/util/TimeUtils.java | 63 +++++++++++++++-- .../jieling/logic/GlobalDataManaager.java | 4 +- .../fourChallenge/FourChallengeLogic.java | 69 ++++++++++++------- 3 files changed, 104 insertions(+), 32 deletions(-) diff --git a/gamecommon/src/main/java/util/TimeUtils.java b/gamecommon/src/main/java/util/TimeUtils.java index e56f59c68..db44dd716 100644 --- a/gamecommon/src/main/java/util/TimeUtils.java +++ b/gamecommon/src/main/java/util/TimeUtils.java @@ -11,10 +11,7 @@ import java.sql.Timestamp; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.Date; -import java.util.Locale; -import java.util.TimeZone; +import java.util.*; import java.util.concurrent.TimeUnit; import java.time.LocalDate; import java.time.format.DateTimeFormatter; @@ -801,7 +798,6 @@ public class TimeUtils { * 是否为同一周 *星期1是一周的开始 * @param src - * @param target * @return */ public static boolean isSameWeek7(long src) { @@ -1224,6 +1220,63 @@ public class TimeUtils { return hour; } + /** + * 获取某段时间内的周一(二等等)的日期 + * @param dataBegin 开始日期 + * @param dataEnd 结束日期 + * @param weekDays 获取周几,1-6代表周一到周六。0代表周日 + * @return 返回日期List + */ + public static int getDayOfWeekWithinDateInterval(String dataBegin, String dataEnd, int weekDays) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + List 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(); + } + + /** + * date2比date1多的天数 + * + * @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); + } + /** * date2比date1多的天数 * diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobalDataManaager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobalDataManaager.java index 02211daa0..54136fabc 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobalDataManaager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobalDataManaager.java @@ -453,10 +453,8 @@ public class GlobalDataManaager implements IManager { PlayerLogic.getInstance().sendTimingMail(user); 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); // 七界推送 diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/fourChallenge/FourChallengeLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/fourChallenge/FourChallengeLogic.java index 2183facd2..414dbe082 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/fourChallenge/FourChallengeLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/fourChallenge/FourChallengeLogic.java @@ -380,42 +380,63 @@ public class FourChallengeLogic { * @param user */ public void firstGetTimes(User user) throws Exception { - if (ifOpenFourChallenge(user) && !user.getPlayerInfoManager().isOpenFourChallenge()){ - // 检测一次 - if (status == null){ check(); } - // 获取每天增加的天数 - int campOpenDay = STableManager.getConfig(SCampTowerSetting.class).get(1).getTimesAddPerDay(); - for (int i = 0; i < status.length; i++) { - // 类型未开启 - if (status[i] == 0){ continue; } - user.getPlayerInfoManager().addFourChallengeRemainTimes(i, campOpenDay); - } - LOGGER.info("四灵试炼层数刷新,首次开启,玩家:{},层数:{}", user.getId(), Arrays.toString(user.getPlayerInfoManager().getFourChallengeRemainTimes())); - user.getPlayerInfoManager().setOpenFourChallenge(true); - // 推送四灵试炼信息 - ISession session = OnlineUserManager.getSessionByUid(user.getId()); - if (session != null){ - fourChallengeGetInfo(session,false); - } + // 功能开启了,并且是首次登陆 + if (!ifOpenFourChallenge(user) || user.getPlayerInfoManager().isOpenFourChallenge()){ + return; + } + // 检测一次 + if (status == null){ + check(); + } + // 获取每天增加的天数 + int campOpenDay = STableManager.getConfig(SCampTowerSetting.class).get(1).getTimesAddPerDay(); + for (int i = 0; i < status.length; i++) { + // 类型未开启 + if (status[i] == 0){ continue; } + user.getPlayerInfoManager().addFourChallengeRemainTimes(i, campOpenDay); + } + LOGGER.info("四灵试炼层数刷新,首次开启,玩家:{},层数:{}", user.getId(), Arrays.toString(user.getPlayerInfoManager().getFourChallengeRemainTimes())); + user.getPlayerInfoManager().setOpenFourChallenge(true); + // 推送四灵试炼信息 + ISession session = OnlineUserManager.getSessionByUid(user.getId()); + if (session != null){ + fourChallengeGetInfo(session,false); } } /** * 增加玩家登陆次数 * @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++) { // 类型未开启 - if (status[i] == 0){ continue; } - user.getPlayerInfoManager().addFourChallengeRemainTimes(i, campOpenDay*num); + if (status[i] == 0){ + 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())); user.getPlayerInfoManager().setOpenFourChallenge(true);