package com.iailab.module.model.mcs.pre.enums;
|
|
import com.iailab.module.data.api.point.dto.ApiPointValueDTO;
|
import lombok.AllArgsConstructor;
|
import lombok.Getter;
|
|
import java.util.Calendar;
|
import java.util.Date;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.function.Function;
|
|
/**
|
* 自动调整 调整值计算规则
|
*/
|
@Getter
|
@AllArgsConstructor
|
public enum AutoAdjustValueRuleEnum {
|
|
// 流量累计
|
FLOW_RATE_ACCUMULATION("flow_rate_accumulation",(apiPointValues) -> {
|
// 基准值
|
double refValue = apiPointValues.get(0).getV();
|
double adjustValue = 0.0;
|
for (ApiPointValueDTO pointValue : apiPointValues) {
|
adjustValue += pointValue.getV() - refValue;
|
}
|
return adjustValue / 60;
|
});
|
|
|
private final String code;
|
private final Function<List<ApiPointValueDTO>, Double> calculator;
|
|
public Double calculate(List<ApiPointValueDTO> apiPointValues) {
|
return calculator.apply(apiPointValues);
|
}
|
|
public static AutoAdjustValueRuleEnum fromCode(String code) {
|
for (AutoAdjustValueRuleEnum unit : values()) {
|
if (unit.code.equals(code)) {
|
return unit;
|
}
|
}
|
return null;
|
}
|
|
public static Double getAdjustValue(String code, List<ApiPointValueDTO> apiPointValues) {
|
|
AutoAdjustValueRuleEnum rule = AutoAdjustValueRuleEnum.fromCode(code);
|
|
if (rule == null) {
|
return 0.0;
|
}
|
return rule.calculate(apiPointValues);
|
}
|
}
|