From d2ab6f7153e604bac7bc4ad58f27f368b65d8a1e Mon Sep 17 00:00:00 2001
From: yuan <123@>
Date: 星期二, 16 六月 2026 13:54:58 +0800
Subject: [PATCH] feat: 添加能耗数据综合分析功能,支持按天和周维度的趋势分析
---
src/main/java/com/ruoyi/http/util/StatisticEleReadingUtil.java | 74 +++++++++++++++++++++++++++++++++++++
1 files changed, 74 insertions(+), 0 deletions(-)
diff --git a/src/main/java/com/ruoyi/http/util/StatisticEleReadingUtil.java b/src/main/java/com/ruoyi/http/util/StatisticEleReadingUtil.java
new file mode 100644
index 0000000..b1b21e8
--- /dev/null
+++ b/src/main/java/com/ruoyi/http/util/StatisticEleReadingUtil.java
@@ -0,0 +1,74 @@
+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;
+ }
+ }
+}
--
Gitblit v1.9.3