import lombok.extern.slf4j.Slf4j;
public abstract class AbstractClean {
  protected abstract Integer expireDays();
  private Integer defaultMinutes(){return 5;}
  protected abstract void clean(String startDate, String endDate);
  protected abstract Boolean checkHasData(String endDate);
  protected abstract Date getLatestdEndDate(Date endDate);
  public void execClean() {
    Date endDate = previousDate(new Date(), expireDays());
      startDate = subtractMinutes(endDate,defaultMinutes());
      // 每次清理很短时间区间内的数据(目前是defaultMinutes()内的数据)
      String startDateStr = formatYYMMDD(startDate);
      String endDateStr = formatYYMMDD(endDate);
      log.info("clean,startDate:{},endDate:{}",startDateStr,endDateStr);
      clean(startDateStr, endDateStr);
      if(!checkHasData(endDateStr)){
        log.info("clean finished,startDate:{},endDate:{}",startDateStr,endDateStr);
      // 获取索引中在限定条件下最大的时间。 以前推的开始时间作为条件
      endDate = getLatestdEndDate(startDate);