diff --git a/cloudutil/src/main/resources/application-util-test.yml b/cloudutil/src/main/resources/application-util-test.yml index 929fc03c..a52717f4 100644 --- a/cloudutil/src/main/resources/application-util-test.yml +++ b/cloudutil/src/main/resources/application-util-test.yml @@ -20,8 +20,8 @@ eureka: service-url: # 指定eureka server通信地址,注意/eureka/小尾巴不能少 #defaultZone: http://admin:admin@peer1:8761/eureka/,http://admin:admin@peer2:8762/eureka/ - defaultZone: http://admin:admin@192.168.0.99:7010/eureka/ -# defaultZone: http://admin:admin@test.tall.wiki:7010/eureka/ +# defaultZone: http://admin:admin@192.168.0.99:7010/eureka/ + defaultZone: http://admin:admin@test.tall.wiki:7010/eureka/ instance: # 是否注册IP到eureka server,如不指定或设为false,那就回注册主机名到eureka server prefer-ip-address: true diff --git a/game/src/main/resources/druid-test.yml b/game/src/main/resources/druid-test.yml index 579863aa..bc9a6a82 100644 --- a/game/src/main/resources/druid-test.yml +++ b/game/src/main/resources/druid-test.yml @@ -28,6 +28,6 @@ spring: testWhileIdle: true timeBetweenEvictionRunsMillis: 60000 url: jdbc:mysql://127.0.0.1/game?useUnicode=true&characterEncoding=UTF-8 - rname: root + username: root validationQuery: SELECT 1 FROM DUAL env: CCSENS_GAME \ No newline at end of file diff --git a/tall/src/main/resources/application.yml b/tall/src/main/resources/application.yml index c88e995d..b2acd365 100644 --- a/tall/src/main/resources/application.yml +++ b/tall/src/main/resources/application.yml @@ -1,4 +1,4 @@ spring: profiles: - active: test - include: util-test,common + active: dev + include: util-dev,common diff --git a/util/src/main/java/com/ccsens/util/StringUtil.java b/util/src/main/java/com/ccsens/util/StringUtil.java index 63ea759c..7e410ce1 100644 --- a/util/src/main/java/com/ccsens/util/StringUtil.java +++ b/util/src/main/java/com/ccsens/util/StringUtil.java @@ -12,13 +12,17 @@ import java.util.regex.Pattern; public class StringUtil { + public final static String SPLIT_RANGE = "[到\\-至]"; + public final static String SPLIT = "-"; public final static String WEEK_DAY = "(每?隔\\d周)|(每?隔\\d星期)|(每?周[0-7]+)|(每?星期[0-7]+)|(每?周一)|(每?周二)|(每?周三)|(每?周四)|(每?周五)|(每?周六)|(每?周日)|(每?周天)"; + public final static String WEEK_DAY_CIRCLE = WEEK_DAY+SPLIT_RANGE+WEEK_DAY; public final static String DAY = "(每\\d+天)|(每\\d+日)|(每?隔\\d+天)|(每?隔\\d+日)|(\\d+号)|(\\d+日)|(\\d+\\-\\d+号)|(\\d+\\-\\d+日)|(\\d+到\\d+号)|(\\d+到\\d+日)"; public final static String CONTINUE_RANGE = ".*(到|\\-|至).*"; public final static String EVERY = "每(天|日|小时|时|分钟|分|秒)"; public final static String EVERY_WEEK = "每(周|星期)"; + public final static String EVERY_MONTH = "每月"; public final static String EVERY_NUM = "\\D*(\\d+)\\D*"; public final static String CHINESE_NUM = "([零一二三四五六七八九十百千万亿]+)"; @@ -29,13 +33,13 @@ public class StringUtil { public final static String DAY_REGEXP = "(每天)|(每日)|" + DAY; public final static String MONTH_REGEXP = EVERY_MONTH +"|(每隔\\d+月)|(\\d+月)|(每隔[零一二三四五六七八九十百千万亿]+月)|([零一二三四五六七八九十百千万亿]+月)"; - public final static String WEEK_REGEXP = WEEK_DAY + "|(每周)|(每星期)"; + public final static String WEEK_REGEXP = "(每?周[0-7]"+SPLIT_RANGE+"每?周[0-7])|" + WEEK_DAY + "|(每周)|(每星期)"; public final static String WEEK_FLAG_REGEXP = "(每?周)|(每?星期)"; public final static String NO_REPEAT = "不重复"; - public final static String SPLIT_RANGE = "[到\\-至]"; + public final static String NUMBER = "\\d+"; diff --git a/util/src/main/java/com/ccsens/util/cron/CronConstant.java b/util/src/main/java/com/ccsens/util/cron/CronConstant.java index f1855da6..0fdae1e5 100644 --- a/util/src/main/java/com/ccsens/util/cron/CronConstant.java +++ b/util/src/main/java/com/ccsens/util/cron/CronConstant.java @@ -39,7 +39,7 @@ public class CronConstant { // System.out.println("每月:" + month); // System.out.println("每月:" + getDate(month, start, end)); -// TaskCron day = getCronDay("八月8号-15号"); + TaskCron day = getCronDay("八月8号-15号"); // System.out.println("每月8号-15号:" + day); // System.out.println("每月8号-15号:" + getDate(day, start, end)); // @@ -154,6 +154,7 @@ public class CronConstant { } + /** * 根据自然语言转换成开始cron和结束cron * */ @@ -178,19 +179,21 @@ public class CronConstant { split = natureDate.split(StringUtil.SPLIT_RANGE); - String start = startCron.generateCron(split[0]); - taskCron.setStartCron(start); + //结束 + String endStr = null; if (split.length == 1) { + String start = startCron.generateCron(split[0]); + taskCron.setStartCron(start); List months = StringUtil.match(natureDate, StringUtil.MONTH_REGEXP); List weeks = StringUtil.match(natureDate, StringUtil.WEEK_REGEXP); - if (CollectionUtils.isEmpty(months) && months.contains("每月")) { + if (!CollectionUtils.isEmpty(months) && months.contains("每月")) { endStr = "每月1号0时0分"; taskCron.setFirstFlag(true); - } else if (CollectionUtils.isEmpty(weeks) &&(weeks.contains("每周") || - CollectionUtils.isEmpty(weeks) && weeks.contains("每星期"))) { + } else if (!CollectionUtils.isEmpty(weeks) &&(weeks.contains("每周") || + !CollectionUtils.isEmpty(weeks) && weeks.contains("每星期"))) { endStr = "每周1 "; taskCron.setFirstFlag(true); } else { @@ -198,7 +201,23 @@ public class CronConstant { endStr = reg.replaceAll(StringUtil.MINUTE_REGEXP,""); endStr += " 23时59分"; } + } else if (natureDate.contains(NatureConstant.SPACE_STR) && natureDate.split(NatureConstant.SPACE).length >= 2) { + // 多个分段且包含空格 + //空格分隔 认为最后一个是最小单位,前面都是xx-xx 例如:周一-周5 8点:周一-周五8点和周一到周五23:59:59 周一-周5 8点-9点:周一-周五8点和周一到周五9点 + String[] manyTypes = natureDate.split(NatureConstant.SPACE); + String last = manyTypes[manyTypes.length-1]; + String startStr = natureDate.substring(0, natureDate.indexOf(last)); + StringBuilder start = new StringBuilder(startStr); + StringBuilder end = new StringBuilder(startStr); + String[] mins = last.split(StringUtil.SPLIT_RANGE); + start.append(mins[0]); + taskCron.setStartCron(startCron.generateCron(start.toString())); + // TODO 根据时间单位,确认是时分秒日月周 + end.append(mins.length > 1 ? mins[1] : "23:59:59"); + endStr = end.toString(); } else { + String start = startCron.generateCron(split[0]); + taskCron.setStartCron(start); String reg = split[1].replaceAll("\\d+","\\\\d+"); endStr = split[0].replaceAll(reg, "") + split[1]; } @@ -258,6 +277,8 @@ public class CronConstant { private String month = ""; private String week = ""; + + /** * 将自然时间转化成cron * @param natureDate @@ -335,6 +356,12 @@ public class CronConstant { } else if (StringUtil.isMatch(nature, StringUtil.EVERY_WEEK)) { //每周默认是从每周一 set("1", type); + }else if (nature.split(StringUtil.SPLIT_RANGE).length > 1){ + //例如:每周一-周五 --> 1-5 + String[] arr = nature.split(StringUtil.SPLIT_RANGE); + int start = getNum(arr[0]); + int end = getNum(arr[1]); + set(start + "-" + end, type); } else if (StringUtil.isMatch(nature, StringUtil.WEEK_DAY)){ //每周几 int num = getNum(nature); @@ -360,6 +387,12 @@ public class CronConstant { // for (; start <= end; start++) { // set(String.valueOf(start), type); // } + } else if (nature.split(StringUtil.SPLIT_RANGE).length > 1){ + //例如:每周一-周五 --> 1-5 + String[] arr = nature.split(StringUtil.SPLIT_RANGE); + int start = getNum(arr[0]); + int end = getNum(arr[1]); + set(start + "-" + end, type); } else { //普通 int num = getNum(nature); diff --git a/util/src/main/java/com/ccsens/util/cron/NatureConstant.java b/util/src/main/java/com/ccsens/util/cron/NatureConstant.java index 531a7e76..eb0aec6c 100644 --- a/util/src/main/java/com/ccsens/util/cron/NatureConstant.java +++ b/util/src/main/java/com/ccsens/util/cron/NatureConstant.java @@ -15,6 +15,8 @@ public class NatureConstant { public static final String WORK_DAY = "工作日"; /**每周几*/ public static final String WEEK_ZHOU = "每?周[一二三四五六七日天0-7]"; + /**每周一到周五 */ + public static final String WEEK_EVERY = "每周[一二三四五六七日天0-7][到\\-至]周[一二三四五六七日天0-7]"; public static final String WEEK_XINGQI = "每?星期[一二三四五六七日天0-7]"; /**每月几号*/ public static final String EVERY_MONTH_DAY = "每月" + NUM + "号?日?"; @@ -42,6 +44,8 @@ public class NatureConstant { /**第几天*/ public static final String WHAT_DAY= "第" + NUM + "天?日?"; + public static final String SPACE = "\\s"; + public static final String SPACE_STR = " "; diff --git a/util/src/main/java/com/ccsens/util/cron/NatureToDate.java b/util/src/main/java/com/ccsens/util/cron/NatureToDate.java index bf7b6aa5..d35e5b9f 100644 --- a/util/src/main/java/com/ccsens/util/cron/NatureToDate.java +++ b/util/src/main/java/com/ccsens/util/cron/NatureToDate.java @@ -40,8 +40,9 @@ public class NatureToDate { // System.out.println("入职第一月:" + generateDates("入职第一月", start, end)); // System.out.println("入职第一年:" + generateDates("入职第一年", start, end)); // System.out.println("第八天:" + generateDates("第八天", start, end)); - System.out.println("每月15号下午5点:" + generateDates("每月15号下午5点", start, end)); +// System.out.println("每月15号下午5点:" + generateDates("每月15号下午5点", start, end)); + System.out.println("周一-周五 8点-9点: " + generateDates("周一-周五 8点-9点", start, end)); } @@ -93,7 +94,10 @@ public class NatureToDate { */ private static List dealSpecialKnow(String nature, Date startDate, Date endDate) { List taskDates = new ArrayList<>(); - if (StringUtil.isMatch(nature, NatureConstant.EVERY_MONTH_ZHOU) || StringUtil.isMatch(nature, NatureConstant.EVERY_MONTH_XINGQI) ) { + if(nature.contains(NatureConstant.SPACE_STR)){ + String[] natureArr = nature.split(NatureConstant.SPACE); + + } else if (StringUtil.isMatch(nature, NatureConstant.EVERY_MONTH_ZHOU) || StringUtil.isMatch(nature, NatureConstant.EVERY_MONTH_XINGQI) ) { //获取第几周 int endIndex = getWeekEndIndex(nature); String numStr = nature.substring(nature.indexOf("第") + 1, endIndex); @@ -247,6 +251,9 @@ public class NatureToDate { if (CronConstant.CronExpression.map.containsKey(nature)){ split[0] = nature; split[1] = nature; + } else if (StringUtil.isMatch(nature, NatureConstant.WEEK_EVERY)){ + String[] natureArr = nature.split(NatureConstant.SPACE); + } else if (nature.contains(NatureConstant.WORK_DAY)) { //工作日 split[0] = nature.replaceAll("工作日","周1"); @@ -286,8 +293,14 @@ public class NatureToDate { private static String dealSpecialTime(String nature){ nature = nature.replace("周日", "周0").replace("周天", "周0") .replace("星期日", "周0").replace("星期天", "周0") - .replace("周七", "周0").replace("周七", "周0") - .replace("星期七", "周0").replace("星期七", "周0") ; + .replace("周七", "周0").replace("星期七", "周0") + .replace("星期一", "周1").replace("周一", "周1") + .replace("星期二", "周2").replace("周二", "周2") + .replace("星期三", "周3").replace("周三", "周3") + .replace("星期四", "周4").replace("周四", "周4") + .replace("星期五", "周5").replace("周五", "周5") + .replace("星期六", "周6").replace("周六", "周6") + ; if (nature.contains(NatureConstant.PM)) { int start = nature.indexOf("下午"); int end = nature.indexOf("点", start) > 0 ? nature.indexOf("点", start) : nature.indexOf("时", start); diff --git a/util/src/test/java/com/ccsens/util/Base64Test.java b/util/src/test/java/com/ccsens/util/Base64Test.java index 7499305c..77ef6edc 100644 --- a/util/src/test/java/com/ccsens/util/Base64Test.java +++ b/util/src/test/java/com/ccsens/util/Base64Test.java @@ -36,78 +36,5 @@ public class Base64Test { } - @Test - public void test02() throws Exception { - String[] strings = new String[]{"1590997352223", - "1591545600000", - "1592150400000", - "1592755200000", - "1593360000000", - "1593964800000", - "1594569600000", - "1595174400000", - "1595779200000", - "1596384000000", - "1596988800000", - "1597593600000", - "1598198400000", - "1598803200000", - "1599408000000", - "1600012800000", - "1600617600000", - "1601222400000", - "1601827200000", - "1602432000000", - "1603036800000", - "1603641600000", - "1604246400000", - "1604851200000", - "1605456000000", - "1606060800000", - "1606665600000", - "1607270400000", - "1607875200000", - "1608480000000", - "1609084800000" - }; - String[] strings1 = new String[]{ - "1591315200000", - "1591574400000", - "1592179200000", - "1592784000000", - "1593388800000", - "1593993600000", - "1594598400000", - "1595203200000", - "1595808000000", - "1596412800000", - "1597017600000", - "1597622400000", - "1598227200000", - "1598832000000", - "1599436800000", - "1600041600000", - "1600646400000", - "1601251200000", - "1601856000000", - "1602460800000", - "1603065600000", - "1603670400000", - "1604275200000", - "1604880000000", - "1605484800000", - "1606089600000", - "1606694400000", - "1607299200000", - "1607904000000", - "1608508800000", - "1609113600000" - }; - for(int i = 0 ;i