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; } } }