diff --git a/src/main/java/com/xkrs/utilsnew/SysUserConvertUtils.java b/src/main/java/com/xkrs/utilsnew/SysUserConvertUtils.java index 3b4079c..c40fd84 100644 --- a/src/main/java/com/xkrs/utilsnew/SysUserConvertUtils.java +++ b/src/main/java/com/xkrs/utilsnew/SysUserConvertUtils.java @@ -25,7 +25,7 @@ public class SysUserConvertUtils { sysUserVo.setReceiveSms(entity.getReceiveSms()); sysUserVo.setReceiveSmsCount(entity.getReceiveSmsCount()); sysUserVo.setRemark(entity.getRemark()); - sysUserVo.setOverTime(VipTimeRangeUtils.obtainOverTime(entity.getVipTimeRangeJson(), entity.getAddTime(), entity.getDayNum())); + sysUserVo.setOverTime(TimeRangeUtils.getSysUserOverTime(entity)); return sysUserVo; } diff --git a/src/main/java/com/xkrs/utilsnew/TimeRangeUtils.java b/src/main/java/com/xkrs/utilsnew/TimeRangeUtils.java index a060cda..026bf0b 100644 --- a/src/main/java/com/xkrs/utilsnew/TimeRangeUtils.java +++ b/src/main/java/com/xkrs/utilsnew/TimeRangeUtils.java @@ -17,9 +17,9 @@ public class TimeRangeUtils { } public static boolean checkIfAllExpired(SysUserEntity sysUserEntity) { - boolean probationExpired = checkIfProbationExpired(sysUserEntity.getAddTime(), sysUserEntity.getDayNum());//试用期是否过期 boolean vipExpired = checkIfVipExpired(sysUserEntity.getVipTimeRangeJson());//VIP是否过期 - return probationExpired && vipExpired; + boolean probationExpired = checkIfProbationExpired(sysUserEntity.getAddTime(), sysUserEntity.getDayNum());//试用期是否过期 + return vipExpired && probationExpired; } /** @@ -101,4 +101,38 @@ public class TimeRangeUtils { return rangeStart.isBefore(test) && rangeEnd.isAfter(test); } + /** + * 获取系统用户的过期时间-VIP范围列表和试用期范围中最晚的那个时间 + */ + public static String getSysUserOverTime(SysUserEntity sysUserEntity) { + List timeList = new ArrayList<>(); + List> vipRangeList = getVipRangeList(sysUserEntity.getVipTimeRangeJson()); + DataWrapper2 probationRange = getProbationRange(sysUserEntity.getAddTime(), sysUserEntity.getDayNum()); + for (DataWrapper2 vipRange : vipRangeList) { + timeList.add(vipRange.getData2()); + } + timeList.add(probationRange.getData2()); + LocalDateTime lastDateTime = getLastDateTime(timeList); + return DateTimeUtils.localDateTimeToString(lastDateTime); + } + + /** + * 获取list中最晚的LocalDateTime + */ + public static LocalDateTime getLastDateTime(List list) { + if (list == null || list.size() == 0) { + throw new RuntimeException("GetLastDateTime Error"); + } + LocalDateTime lastDateTime = list.get(0); + for (LocalDateTime item : list) { + if (lastDateTime == item) { + continue; + } + if (item.isAfter(lastDateTime)) { + lastDateTime = item; + } + } + return lastDateTime; + } + } diff --git a/src/main/java/com/xkrs/utilsnew/VipTimeRangeUtils.java b/src/main/java/com/xkrs/utilsnew/VipTimeRangeUtils.java index b8cd0cc..b8b6ea6 100644 --- a/src/main/java/com/xkrs/utilsnew/VipTimeRangeUtils.java +++ b/src/main/java/com/xkrs/utilsnew/VipTimeRangeUtils.java @@ -16,74 +16,6 @@ public class VipTimeRangeUtils { private VipTimeRangeUtils() { } - /** - * 获取用户的过期时间 - */ - public static String obtainOverTime(String oldVipTimeRangeJson, String addTime, Long dayNum) { - // 试用期结束时间 - LocalDateTime lastTryTime = obtainLastTryTime(addTime, dayNum); - // VIP过期时间 - LocalDateTime lastOverTime = obtainLastOverTime(oldVipTimeRangeJson); - // 如果没有设置过VIP时间范围,那就将试用期结束时间返回 - if (lastOverTime == null) { - return DateTimeUtils.localDateTimeToString(lastTryTime); - } - //如果VIP时间范围对应的结束时间更晚,那就将VIP时间范围的结束时间返回 - if (lastOverTime.isAfter(lastTryTime)) { - return DateTimeUtils.localDateTimeToString(lastOverTime); - } - //否则就返回试用期的结束时间 - return DateTimeUtils.localDateTimeToString(lastTryTime); - } - - private static LocalDateTime obtainLastTryTime(String addTime, Long dayNum) { - return LocalDateTime.parse(addTime, DateTimeUtils.DATE_TIME_FORMATTER_1).plusDays(dayNum); - } - - private static LocalDateTime obtainLastOverTime(String oldVipTimeRangeJson) { - //只有付费签约的用户VipTimeRangeJson字段才不为空,注册试用的用户由DayNum字段设置的天数决定试用时长 - if (TextUtils.isEmpty(oldVipTimeRangeJson)) { - return null; - } - VipTimeRangeBean vipTimeRangeBean = JsonUtils.deserialize(oldVipTimeRangeJson, VipTimeRangeBean.class); - if (vipTimeRangeBean == null || vipTimeRangeBean.getList() == null || vipTimeRangeBean.getList().size() == 0) { - return null; - } - List list = vipTimeRangeBean.getList(); - if (list == null || list.size() == 0) { - return null; - } - //校验数据合法性 - for (VipTimeRangeBean.VipTimeRangeItemBean vipTimeRangeItemBeanA : list) { - for (VipTimeRangeBean.VipTimeRangeItemBean vipTimeRangeItemBeanB : list) { - if (vipTimeRangeItemBeanA != vipTimeRangeItemBeanB) { - LocalDateTime startLocalDateTimeA = LocalDateTime.parse(vipTimeRangeItemBeanA.getStartTime(), DateTimeUtils.DATE_TIME_FORMATTER_1); - LocalDateTime endLocalDateTimeA = LocalDateTime.parse(vipTimeRangeItemBeanA.getEndTime(), DateTimeUtils.DATE_TIME_FORMATTER_1); - LocalDateTime startLocalDateTimeB = LocalDateTime.parse(vipTimeRangeItemBeanB.getStartTime(), DateTimeUtils.DATE_TIME_FORMATTER_1); - LocalDateTime endLocalDateTimeB = LocalDateTime.parse(vipTimeRangeItemBeanB.getEndTime(), DateTimeUtils.DATE_TIME_FORMATTER_1); - if (startLocalDateTimeB.isBefore(startLocalDateTimeA) && endLocalDateTimeB.isAfter(startLocalDateTimeA)) { - throw new RuntimeException("VIP开始结束时间存在交叉现象1,系统数据错误"); - } - if (startLocalDateTimeB.isBefore(endLocalDateTimeA) && endLocalDateTimeB.isAfter(endLocalDateTimeA)) { - throw new RuntimeException("VIP开始结束时间存在交叉现象2,系统数据错误"); - } - } - } - } - //获取结束时间最大的那个Pair - VipTimeRangeBean.VipTimeRangeItemBean lastVipTimeRangeItemBean = list.get(0); - for (VipTimeRangeBean.VipTimeRangeItemBean vipTimeRangeItemBean : list) { - if (lastVipTimeRangeItemBean != vipTimeRangeItemBean) { - LocalDateTime endLocalDateTime = LocalDateTime.parse(vipTimeRangeItemBean.getEndTime(), DateTimeUtils.DATE_TIME_FORMATTER_1); - LocalDateTime lastEndLocalDateTime = LocalDateTime.parse(lastVipTimeRangeItemBean.getEndTime(), DateTimeUtils.DATE_TIME_FORMATTER_1); - if (endLocalDateTime.isAfter(lastEndLocalDateTime)) { - lastVipTimeRangeItemBean = vipTimeRangeItemBean; - } - } - } - return LocalDateTime.parse(lastVipTimeRangeItemBean.getEndTime(), DateTimeUtils.DATE_TIME_FORMATTER_1); - } - /** * 生成一个新的 VipTimeRangeJson */