package com.ruoyi.http.util;
|
|
import com.alibaba.fastjson2.JSONArray;
|
|
import java.math.BigDecimal;
|
import java.math.RoundingMode;
|
|
/**
|
* 电量读数与倍率计算
|
*/
|
public final class StatisticEleReadingUtil {
|
|
public static final int CONSUMPTION_SCALE = 4;
|
|
private StatisticEleReadingUtil() {
|
}
|
|
public static BigDecimal firstReading(JSONArray arr) {
|
if (arr == null || arr.isEmpty()) {
|
return null;
|
}
|
return arr.getBigDecimal(0);
|
}
|
|
public static BigDecimal calcConsumption(BigDecimal prev, BigDecimal curr, Integer ratio) {
|
if (prev == null || curr == null) {
|
return null;
|
}
|
BigDecimal diff = curr.subtract(prev);
|
return applyRatio(diff, ratio);
|
}
|
|
public static BigDecimal calcConsumptionFromRaw(BigDecimal raw, Integer ratio) {
|
if (raw == null) {
|
return null;
|
}
|
return applyRatio(raw, ratio);
|
}
|
|
public static BigDecimal applyRatio(BigDecimal value, Integer ratio) {
|
if (value == null) {
|
return null;
|
}
|
int r = ratio == null || ratio <= 0 ? 1 : ratio;
|
return value.multiply(BigDecimal.valueOf(r)).setScale(CONSUMPTION_SCALE, RoundingMode.HALF_UP);
|
}
|
|
public static String formatReadingArray(JSONArray arr) {
|
if (arr == null || arr.isEmpty()) {
|
return "";
|
}
|
StringBuilder sb = new StringBuilder();
|
for (int i = 0; i < arr.size(); i++) {
|
if (i > 0) {
|
sb.append("/");
|
}
|
sb.append(arr.getDouble(i));
|
}
|
return sb.toString();
|
}
|
|
public static BigDecimal parseFirstReading(String reading) {
|
if (reading == null || reading.isBlank()) {
|
return null;
|
}
|
int idx = reading.indexOf('/');
|
String first = idx > 0 ? reading.substring(0, idx) : reading;
|
try {
|
return new BigDecimal(first.trim());
|
} catch (NumberFormatException e) {
|
return null;
|
}
|
}
|
}
|