Bläddra i källkod

处理电量计算时 跳点的情况

wukai 6 månader sedan
förälder
incheckning
fd5c787ae3

+ 30 - 12
ruoyi-admin/src/main/java/com/ruoyi/biz/service/impl/AsyncServiceImpl.java

@@ -146,6 +146,9 @@ public class AsyncServiceImpl {
         int lastMkz = 0;
         //卷曲幅宽
         float lastFk = 0f;
+        //开始不为0的电能
+        //不为0的电能结束
+        float startKwh = 0f, endKwh = 0f;
         int last48 = 0;
         //上一轮最后一条停机记录
         JSONArray old = null;
@@ -179,20 +182,31 @@ public class AsyncServiceImpl {
                 lastMkz = da.getInt(8);
                 lastFk = da.getFloat(9);
                 last48 = curr48;
+                startKwh = da.getFloat(fieldList.indexOf("Capacity_data_34"));
                 continue;
             }
             //计算盘头
             calcPan(currPan, lastPanHead, panHeadInfo, timestamps.getLong(i));
 
+            //处理电量跳点
+            float currKwh = da.getFloat(fieldList.indexOf("Capacity_data_34"));
+            if (startKwh == 0) {
+                startKwh = currKwh;
+            }
+
+            if (currKwh != 0f) {
+                endKwh = currKwh;
+            }
+
 //            for (int j = 0; j < first.length; j++) {
-                //如果当前值为小于上一个,且上一个值不为0,则计算
-                //因为会出现数据波动,停机再启动之后的第一个点不为0,为0.00几几几的
-                //计算累加类的数据
-                //这里只计算米长
-                if (curr[0] < last[0] && last[0] != 0f) {
-                    calcTotal(0, last, first, total, lastMkz, lastFk);
-                    first[0] = curr[0];
-                }
+            //如果当前值为小于上一个,且上一个值不为0,则计算
+            //因为会出现数据波动,停机再启动之后的第一个点不为0,为0.00几几几的
+            //计算累加类的数据
+            //这里只计算米长
+            if (curr[0] < last[0] && last[0] != 0f) {
+                calcTotal(0, last, first, total, lastMkz, lastFk);
+                first[0] = curr[0];
+            }
 //            }
             calcAlarms(values, old, timestamps.getLong(i), alarmRecord, i);
             calcStops(curr48, last48, timestamps.getLong(i), total, stopRecord, old, i);
@@ -205,10 +219,14 @@ public class AsyncServiceImpl {
             last48 = curr48;
         }
         //最后再补一次计算
-        for (int j = 0; j < first.length; j++) {
-            //这里米长和电量都要计算
-            calcTotal(j, last, first, total, lastMkz, lastFk);
-        }
+//        for (int j = 0; j < first.length; j++) {
+//            //这里米长和电量都要计算
+//            calcTotal(j, last, first, total, lastMkz, lastFk);
+//        }
+        //还是只计算米长
+        calcTotal(0, last, first, total, lastMkz, lastFk);
+        //计算电量
+        total[1] = endKwh - startKwh;
 
         //存入最后一条记录的停机状态
 //        CacheUtils.put(Constants.IOT_TOKEN, table, values.getJSONArray(values.size() - 1));