diff --git a/src/main/java/com/xkrs/straw/utils/FirePointQueryManager.java b/src/main/java/com/xkrs/straw/utils/FirePointQueryManager.java index e9503d1..c13edac 100644 --- a/src/main/java/com/xkrs/straw/utils/FirePointQueryManager.java +++ b/src/main/java/com/xkrs/straw/utils/FirePointQueryManager.java @@ -5,11 +5,15 @@ import com.xkrs.straw.dao.FirePointPreciseDao; import com.xkrs.straw.model.bean.FirePointQueryResultBean; import com.xkrs.straw.model.bean.VipTimeRangeBean; import com.xkrs.straw.model.entity.SysUserEntity; +import com.xkrs.utils.DateTimeUtil; +import com.xkrs.utils.DateTimeUtils; import com.xkrs.utils.FirePointCodeUtils; import org.apache.hc.core5.util.TextUtils; import org.springframework.stereotype.Component; import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.List; @Component @@ -23,6 +27,8 @@ public class FirePointQueryManager { public FirePointQueryResultBean queryFirePointBelongToUser(SysUserEntity sysUserEntity, String startTime, String endTime, String satelliteType, String landType) { + String mNoRedundantUserCode = null; + final List mVipTimeRangeItemList = new ArrayList<>(); try { //获取用户注册的区划编码 String userCode = sysUserEntity.getCountyCode(); @@ -52,7 +58,41 @@ public class FirePointQueryManager { //得到由<开始时间 + 结束时间>组成的集合 List vipTimeRangeItemList = vipTimeRangeBean.getList(); - + for (VipTimeRangeBean.VipTimeRangeItemBean vipTimeRangeItemA : vipTimeRangeItemList) { + //校验用户VIP开始时间合法性 + if (!DateTimeUtil.isValidDateTime(vipTimeRangeItemA.getStartTime())) { + return new FirePointQueryResultBean(false, "User VIP 开始时间格式不合法1, StartTime = " + vipTimeRangeItemA.getStartTime(), null); + } + //校验用户VIP结束时间合法性 + if (!DateTimeUtil.isValidDateTime(vipTimeRangeItemA.getEndTime())) { + return new FirePointQueryResultBean(false, "User VIP 结束时间格式不合法2, EndTime = " + vipTimeRangeItemA.getEndTime(), null); + } + LocalDateTime userStartLocalDateTimeA = LocalDateTime.parse(vipTimeRangeItemA.getStartTime(), DateTimeUtils.DATE_TIME_FORMATTER_1); + LocalDateTime userEndLocalDateTimeA = LocalDateTime.parse(vipTimeRangeItemA.getEndTime(), DateTimeUtils.DATE_TIME_FORMATTER_1); + for (VipTimeRangeBean.VipTimeRangeItemBean vipTimeRangeItemB : vipTimeRangeItemList) { + if (vipTimeRangeItemA != vipTimeRangeItemB) { + //校验用户VIP开始时间合法性 + if (!DateTimeUtil.isValidDateTime(vipTimeRangeItemB.getStartTime())) { + return new FirePointQueryResultBean(false, "User VIP 开始时间格式不合法3, StartTime = " + vipTimeRangeItemB.getStartTime(), null); + } + //校验用户VIP结束时间合法性 + if (!DateTimeUtil.isValidDateTime(vipTimeRangeItemB.getEndTime())) { + return new FirePointQueryResultBean(false, "User VIP 结束时间格式不合法4, EndTime = " + vipTimeRangeItemB.getEndTime(), null); + } + LocalDateTime userStartLocalDateTimeB = LocalDateTime.parse(vipTimeRangeItemB.getStartTime(), DateTimeUtils.DATE_TIME_FORMATTER_1); + LocalDateTime userEndLocalDateTimeB = LocalDateTime.parse(vipTimeRangeItemB.getEndTime(), DateTimeUtils.DATE_TIME_FORMATTER_1); + //校验用户VIP开始结束时间是否存在交叉现象 + if (userStartLocalDateTimeB.isBefore(userStartLocalDateTimeA) && userEndLocalDateTimeB.isAfter(userStartLocalDateTimeA)) { + return new FirePointQueryResultBean(false, "User VIP 开始结束时间格式不合法5, 存在交叉现象", null); + } + if (userStartLocalDateTimeB.isBefore(userEndLocalDateTimeA) && userEndLocalDateTimeB.isAfter(userEndLocalDateTimeA)) { + return new FirePointQueryResultBean(false, "User VIP 开始结束时间格式不合法6, 存在交叉现象", null); + } + } + } + } + mNoRedundantUserCode = noRedundantUserCode; + mVipTimeRangeItemList.addAll(vipTimeRangeItemList); } catch (Exception e) { e.printStackTrace(); @@ -60,8 +100,6 @@ public class FirePointQueryManager { } - //FirePointQueryResultBean - return null; } diff --git a/src/main/java/com/xkrs/utils/DateTimeUtil.java b/src/main/java/com/xkrs/utils/DateTimeUtil.java index cb62e70..136e4e3 100644 --- a/src/main/java/com/xkrs/utils/DateTimeUtil.java +++ b/src/main/java/com/xkrs/utils/DateTimeUtil.java @@ -1,5 +1,7 @@ package com.xkrs.utils; +import org.apache.hc.core5.util.TextUtils; + import java.time.Instant; import java.time.LocalDateTime; import java.time.ZoneOffset; @@ -77,15 +79,22 @@ public class DateTimeUtil { /** * 判断时间格式 格式必须为 "YYYY-MM-DD HH:mm:ss" */ - public static boolean isValidDateTime(String sDateTime) { - final int minLen = 19; - if ((sDateTime == null) || (sDateTime.length() < minLen)) { + public static boolean isValidDateTime(String formattedDateTime) { + int validLength = 19; + if (TextUtils.isEmpty(formattedDateTime) || formattedDateTime.length() != validLength) { return false; } - String eL = "(((01[0-9]{2}|0[2-9][0-9]{2}|[1-9][0-9]{3})-(0?[13578]|1[02])-" + "(0?[1-9]|[12]\\\\d|3[01]))|((01[0-9]{2}|0[2-9][0-9]{2}|[1-9][0-9]{3})-" + "(0?[13456789]|1[012])-(0?[1-9]|[12]\\\\d|30))|((01[0-9]{2}|0[2-9][0-9]{2}|[1-9][0-9]{3})-0?2-" + "(0?[1-9]|1\\\\d|2[0-8]))|(((1[6-9]|[2-9]\\\\d)(0[48]|[2468][048]|[13579][26])|((04|08|12|16|[2468][048]|" + "[3579][26])00))-0?2-29)) (20|21|22|23|[0-1]?\\\\d):[0-5]?\\\\d:[0-5]?\\\\d"; - Pattern pat = Pattern.compile(eL); - Matcher matcher = pat.matcher(sDateTime); + String regex = "^([1-2][0-9][0-9][0-9]-[0-1]{0,1}[0-9]-[0-3]{0,1}[0-9])\\s(20|21|22|23|[0-1]\\d):[0-5]\\d:[0-5]\\d$"; + Pattern pattern = Pattern.compile(regex); + Matcher matcher = pattern.matcher(formattedDateTime); return matcher.matches(); } + public static void main(String[] args) { + +// boolean validDateTime = isValidDateTime("2222-01-21 19:59:59"); +// System.out.println("validDateTime = " + validDateTime); + + } + }