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<Calendar, Integer, Calendar> 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();
|
}
|
}
|