校验传入的时间是否在指定的VIP时间范围内
This commit is contained in:
parent
a9849d48b8
commit
31aadb17a6
@ -0,0 +1,26 @@
|
|||||||
|
package com.xkrs.straw.model.bean;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
public class VipLocalDateTimeRangePair {
|
||||||
|
|
||||||
|
private LocalDateTime startLocalDateTime;
|
||||||
|
|
||||||
|
private LocalDateTime endLocalDateTime;
|
||||||
|
|
||||||
|
public LocalDateTime getStartLocalDateTime() {
|
||||||
|
return startLocalDateTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStartLocalDateTime(LocalDateTime startLocalDateTime) {
|
||||||
|
this.startLocalDateTime = startLocalDateTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LocalDateTime getEndLocalDateTime() {
|
||||||
|
return endLocalDateTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEndLocalDateTime(LocalDateTime endLocalDateTime) {
|
||||||
|
this.endLocalDateTime = endLocalDateTime;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,45 @@
|
|||||||
|
package com.xkrs.straw.model.bean;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class VipTimeRangeBean {
|
||||||
|
|
||||||
|
private List<VipTimeRangeItemBean> list;
|
||||||
|
|
||||||
|
public static class VipTimeRangeItemBean {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 开始时间
|
||||||
|
*/
|
||||||
|
private String startTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 结束时间
|
||||||
|
*/
|
||||||
|
private String endTime;
|
||||||
|
|
||||||
|
public String getStartTime() {
|
||||||
|
return startTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStartTime(String startTime) {
|
||||||
|
this.startTime = startTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getEndTime() {
|
||||||
|
return endTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEndTime(String endTime) {
|
||||||
|
this.endTime = endTime;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<VipTimeRangeItemBean> getList() {
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setList(List<VipTimeRangeItemBean> list) {
|
||||||
|
this.list = list;
|
||||||
|
}
|
||||||
|
}
|
99
src/main/java/com/xkrs/straw/utils/VipTimeRangeUtils.java
Normal file
99
src/main/java/com/xkrs/straw/utils/VipTimeRangeUtils.java
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
package com.xkrs.straw.utils;
|
||||||
|
|
||||||
|
import com.xkrs.straw.model.bean.VipLocalDateTimeRangePair;
|
||||||
|
import com.xkrs.straw.model.bean.VipTimeRangeBean;
|
||||||
|
import com.xkrs.utils.DateTimeUtils;
|
||||||
|
import org.apache.hc.core5.util.TextUtils;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
public class VipTimeRangeUtils {
|
||||||
|
|
||||||
|
public static Logger log = LoggerFactory.getLogger(VipTimeRangeUtils.class);
|
||||||
|
|
||||||
|
private VipTimeRangeUtils() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 校验传入的时间是否在指定的VIP时间范围内
|
||||||
|
*/
|
||||||
|
public static boolean checkIfInVipTimeRange(String vipTimeRangeJson, LocalDateTime targetLocalDateTime) {
|
||||||
|
try {
|
||||||
|
if (TextUtils.isEmpty(vipTimeRangeJson) || targetLocalDateTime == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
VipTimeRangeBean vipTimeRangeBean = JsonUtils.deserialize(vipTimeRangeJson, VipTimeRangeBean.class);
|
||||||
|
if (vipTimeRangeBean == null || vipTimeRangeBean.getList() == null || vipTimeRangeBean.getList().size() == 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
List<VipLocalDateTimeRangePair> vipLocalDateTimeRangePairList = obtainSortedVipLocalDateTimeRangePairList(vipTimeRangeBean.getList());
|
||||||
|
if (vipLocalDateTimeRangePairList.size() == 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
for (VipLocalDateTimeRangePair vipLocalDateTimeRangePair : vipLocalDateTimeRangePairList) {
|
||||||
|
LocalDateTime startLocalDateTime = vipLocalDateTimeRangePair.getStartLocalDateTime();
|
||||||
|
LocalDateTime endLocalDateTime = vipLocalDateTimeRangePair.getEndLocalDateTime();
|
||||||
|
if (startLocalDateTime.isBefore(targetLocalDateTime) && endLocalDateTime.isAfter(targetLocalDateTime)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
log.info("检查是否属于VIP时间范围时出错,详情=" + e.getMessage());
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据一个字符串格式时间的列表 生成 一个LocalDateTime格式时间的列表
|
||||||
|
*/
|
||||||
|
private static List<VipLocalDateTimeRangePair> obtainSortedVipLocalDateTimeRangePairList(List<VipTimeRangeBean.VipTimeRangeItemBean> list) {
|
||||||
|
List<VipLocalDateTimeRangePair> vipLocalDateTimeRangePairList = new ArrayList<>();
|
||||||
|
try {
|
||||||
|
if (list == null || list.size() == 0) {
|
||||||
|
return vipLocalDateTimeRangePairList;
|
||||||
|
}
|
||||||
|
for (VipTimeRangeBean.VipTimeRangeItemBean vipTimeRangeItemBean : list) {
|
||||||
|
String startTime = vipTimeRangeItemBean.getStartTime();
|
||||||
|
LocalDateTime startLocalDateTime = LocalDateTime.parse(startTime, DateTimeUtils.DATE_TIME_FORMATTER_1);
|
||||||
|
String endTime = vipTimeRangeItemBean.getEndTime();
|
||||||
|
LocalDateTime endLocalDateTime = LocalDateTime.parse(endTime, DateTimeUtils.DATE_TIME_FORMATTER_1);
|
||||||
|
|
||||||
|
VipLocalDateTimeRangePair vipLocalDateTimeRangePair = new VipLocalDateTimeRangePair();
|
||||||
|
vipLocalDateTimeRangePair.setStartLocalDateTime(startLocalDateTime);
|
||||||
|
vipLocalDateTimeRangePair.setEndLocalDateTime(endLocalDateTime);
|
||||||
|
vipLocalDateTimeRangePairList.add(vipLocalDateTimeRangePair);
|
||||||
|
}
|
||||||
|
List<VipLocalDateTimeRangePair> sortedVipLocalDateTimeRangePairList = vipLocalDateTimeRangePairList.stream().sorted((o1, o2) -> {
|
||||||
|
try {
|
||||||
|
LocalDateTime startLocalDateTime1 = o1.getStartLocalDateTime();
|
||||||
|
LocalDateTime endLocalDateTime1 = o1.getEndLocalDateTime();
|
||||||
|
LocalDateTime startLocalDateTime2 = o2.getStartLocalDateTime();
|
||||||
|
LocalDateTime endLocalDateTime2 = o2.getEndLocalDateTime();
|
||||||
|
if (startLocalDateTime1.isBefore(startLocalDateTime2) && endLocalDateTime1.isBefore(endLocalDateTime2)) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if (startLocalDateTime1.isAfter(startLocalDateTime2) && endLocalDateTime1.isAfter(endLocalDateTime2)) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}).collect(Collectors.toList());
|
||||||
|
log.info("原始集合size=" + list.size() + ",格式化后的集合size=" + vipLocalDateTimeRangePairList.size() + ",排序后的集合size=" + sortedVipLocalDateTimeRangePairList.size());
|
||||||
|
return sortedVipLocalDateTimeRangePairList;
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return vipLocalDateTimeRangePairList;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user