获取日期范围内有效排期

   /**
    * 获取规则包含的日历集合
    * @return
    */
   public List<String> getIncludeDateList() {
      List<String> resultList = null;
      if (StringUtils.isNotBlank(includeDates)) {
         resultList = Arrays.asList(includeDates.split(","));
      }
      return resultList;
   }

   /**
    * 获取逢周几(可售不可售)集合
    * @return
    */
   public List<String> getWeekList() {
      List<String> resultList = new ArrayList<String>();
      if (StringUtils.isBlank(this.weekDays)) {
         return resultList;
      }
      for (int i = 0; i < weekDays.length(); i++) {
         resultList.add(String.valueOf(weekDays.charAt(i)));
      }
      return resultList;
   }

   public List<String> getEffectDateList()throws Exception{
      if(TourPackageCalendarUtil.Type.DAYS.name().equals(type)){
         List<String> includeDateList = this.getIncludeDateList();
         List<String> finalList = new ArrayList<>();
         // 清理时间小于当前时间的日期
         for(String includeDateStr : includeDateList){
            if (DateUtil.compareDateStr(includeDateStr, DateUtil.getCurrentDateStr("yyyy-MM-dd"), "yyyy-MM-dd") > 0) {
                continue;
            }
            finalList.add(includeDateStr);
         }
         return finalList;
      }else if(TourPackageCalendarUtil.Type.DATE_RANGE.name().equals(type)){
         if (StringUtils.isBlank(this.startDate) || StringUtils.isBlank(this.endDate)) {
            return null;
         }
         // 若endDate在今天之后,则返回空
         if (DateUtil.compareDateStr(this.endDate, DateUtil.getCurrentDateStr("yyyy-MM-dd"), "yyyy-MM-dd") > 0) {
            return null;
         }
         if (DateUtil.compareDateStr(this.startDate, DateUtil.getCurrentDateStr("yyyy-MM-dd"), "yyyy-MM-dd") > 0) {
            return getEffectDateList(DateUtil.getCurrentDateStr("yyyy-MM-dd"), this.endDate);
         }
      }
      return null;
   }

   /**
    * 查询符合出行时间的所有可售日期
    * @param tripDateStr
    * @return
    * @throws Exception
    */
   public List<String> getEffectDateList(String tripDateStr)throws Exception{
      if(TourPackageCalendarUtil.Type.DAYS.name().equals(type)){
         List<String> includeDateList = this.getIncludeDateList();
         List<String> finalList = new ArrayList<>();
         // 清理时间小于出行时间的日期
         for(String includeDateStr : includeDateList){
            if (DateUtil.compareDateStr(includeDateStr, tripDateStr, "yyyy-MM-dd") > 0) {
               continue;
            }
            finalList.add(includeDateStr);
         }
         return finalList;
      }else if(TourPackageCalendarUtil.Type.DATE_RANGE.name().equals(type)){
         if (StringUtils.isBlank(this.startDate) || StringUtils.isBlank(this.endDate)) {
            return null;
         }
         // 若endDate在今天之后,则返回空
         if (DateUtil.compareDateStr(this.endDate, tripDateStr, "yyyy-MM-dd") > 0) {
            return null;
         }
         if (DateUtil.compareDateStr(this.startDate, tripDateStr, "yyyy-MM-dd") > 0) {
            return getEffectDateList(DateUtil.getCurrentDateStr("yyyy-MM-dd"), this.endDate);
         }
      }
      return null;
   }

   /**
    * 获取一段时间内当前日历规则的所包含的日期
    * @param startDateStr endDateStr在日期范围内查找,如果为空,则返回emptyList
    * @return
    */
   public List<String> getEffectDateList(String startDateStr, String endDateStr)throws Exception{
      List<String> resultList = new ArrayList<String>();
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
      if (TourPackageCalendarUtil.Type.DATE_RANGE.name().equals(this.type)) {
         if(DateUtil.compareDateStr(startDateStr, this.startDate, "yyyy-MM-dd") > 0){
            startDateStr = this.startDate;
         }
         if(DateUtil.compareDateStr(endDateStr, this.endDate, "yyyy-MM-dd") < 0){
            endDateStr = this.endDate;
         }
         Date startDate = sdf.parse(startDateStr);
         Date endDate = sdf.parse(endDateStr);
         // 日期范围型 判断包含日期
         // 查询限定的周几
         List<String> weekList = getWeekList();
         Calendar calendar = Calendar.getInstance();
         calendar.setTime(startDate);
         while(calendar.getTime().getTime() <= endDate.getTime()){
            // 一天一天增加 日期满足逢周就是包含日期
            int calendarWeek = calendar.get(Calendar.DAY_OF_WEEK);
            calendarWeek = (calendarWeek-1)==0 ? 7 : (calendarWeek-1);
            if(weekList.contains(calendarWeek+"")){
               resultList.add(sdf.format(calendar.getTime()));
            }
            calendar.add(Calendar.DAY_OF_MONTH, 1);
         }
      } else if (TourPackageCalendarUtil.Type.DAYS.name().equals(this.type)) {
         Date startDate = sdf.parse(startDateStr);
         Date endDate = sdf.parse(endDateStr);
         // 日历型 判断日期是否在此范围内
         List<String> includeDateStrList = getIncludeDateList();
         for(String includeDateStr : includeDateStrList){
            Date includeDate = sdf.parse(includeDateStr);
            if(startDate.getTime() <= includeDate.getTime() && includeDate.getTime() <= endDate.getTime()){
               resultList.add(includeDateStr);
            }
         }
      }
      return resultList;
   }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值