package com.iailab.module.data.point.common; import com.iailab.framework.common.util.date.DateUtils; import lombok.AllArgsConstructor; import lombok.Getter; import java.util.Calendar; import java.util.Date; import java.util.function.BiFunction; /** * 累计测点累计单位 */ @Getter @AllArgsConstructor public enum PointCumulateUnitEnum { MIN("min", (end, length) -> { Calendar cal = (Calendar) end.clone(); cal.add(Calendar.MINUTE, -length); return cal; }), HOUR("hour", (end, length) -> { Calendar cal = (Calendar) end.clone(); cal.add(Calendar.HOUR_OF_DAY, -length); return cal; }), DAY("day", (end, length) -> { Calendar cal = (Calendar) end.clone(); cal.add(Calendar.DAY_OF_MONTH, -length); return cal; }), THIS_MONTH("this_month", (end, length) -> { Calendar cal = (Calendar) end.clone(); cal.set(Calendar.DAY_OF_MONTH, 1); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); cal.set(Calendar.MILLISECOND, 0); return cal; }); private final String code; private final BiFunction calculator; public Calendar calculate(Calendar endTime, Integer length) { return calculator.apply(endTime, length); } public static PointCumulateUnitEnum fromCode(String code) { for (PointCumulateUnitEnum unit : values()) { if (unit.code.equals(code)) { return unit; } } return null; } public static Date getStartTime(Calendar endTime, Integer length, String cumulateUnit) { PointCumulateUnitEnum unit = PointCumulateUnitEnum.fromCode(cumulateUnit); if (unit == null) { return endTime.getTime(); } else if (unit != THIS_MONTH) { if (length == null || length <= 0) { return endTime.getTime(); } } Calendar startCal = unit.calculate(endTime, length); return startCal.getTime(); } }