Browse Source

解决停机计算的BUG

wukai 5 months ago
parent
commit
00058c2ae5

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

@@ -202,10 +202,10 @@ public class AsyncServiceImpl {
                 continue;
             }
 
-            if (speed == 0f) {
-                //如果转速等于0,表示停机
-                total[4]++;
-            }
+//            if (speed == 0f) {
+//                //如果转速等于0,表示停机
+//                total[4]++;
+//            }
 
             //计算盘头
             calcPan(currPan, lastPanHead, panHeadInfo, timestamps.getLong(i));
@@ -258,11 +258,11 @@ public class AsyncServiceImpl {
         //计算电量
         total[1] = endKwh - startKwh;
 
-        long openTime = (endTime - startTime) / 1000 - 1;
-        if (openTime < total[4]) {
-            total[4] = openTime;
-        }
-        total[3] = openTime - total[4];
+//        long openTime = 3600;
+//        if (openTime < total[4]) {
+//            total[4] = openTime;
+//        }
+        total[3] = 3600;
 
         Map<String, Object> result = new HashMap<>(16);
         result.put("total", total);

+ 32 - 26
ruoyi-admin/src/main/java/com/ruoyi/biz/service/impl/TwinCalcStopServiceImpl.java

@@ -120,7 +120,6 @@ public class TwinCalcStopServiceImpl implements ITwinCalcStopService {
     public void process(LocalDateTime startTime, List<TwinDevice> deviceList) {
         String config = configService.selectConfigByKey("data.legal.time");
         int legalTime = Integer.parseInt(config) * 1000;
-        Date s = new Date();
         Date date = Date.from(startTime.toLocalDate().atStartOfDay(ZoneOffset.of("+8")).toInstant());
         List<TwinCalcStop> insertList = new ArrayList<>();
         List<TwinCalcStop> updateList = new ArrayList<>();
@@ -141,7 +140,6 @@ public class TwinCalcStopServiceImpl implements ITwinCalcStopService {
         hourSearch.setDataDate(date);
         hourSearch.setHour(startTime.getHour());
         List<TwinCalcHour> hourList = calcHourService.selectTwinCalcHourList(hourSearch);
-        List<TwinCalcHour> calcStopTimeList = new ArrayList<>();
 
         List<TwinRecordStop> recordList = new ArrayList<>();
         deviceList.forEach(device -> {
@@ -195,18 +193,6 @@ public class TwinCalcStopServiceImpl implements ITwinCalcStopService {
             }
         });
         for (TwinRecordStop stop : recordList) {
-            TwinCalcHour calcHour = new TwinCalcHour();
-            //1.计算停机时长
-            long stopTime = stop.getEndTime().getTime();
-            if (stop.getStartTime().before(date)) {
-                stopTime -= date.getTime();
-            } else {
-                stopTime -= stop.getStartTime().getTime();
-            }
-            calcHour.setDeviceId(stop.getDeviceId());
-            calcHour.setCloseTime(stopTime);
-            calcStopTimeList.add(calcHour);
-
             //2.复制记录
             TwinCalcStop v = new TwinCalcStop();
             BeanUtils.copyProperties(stop, v);
@@ -220,11 +206,39 @@ public class TwinCalcStopServiceImpl implements ITwinCalcStopService {
             }
         }
 
+
+        try (SqlSession sqlSession = factory.openSession(ExecutorType.BATCH, false)) {
+            TwinCalcStopMapper mapper = sqlSession.getMapper(TwinCalcStopMapper.class);
+            if (insertList.size() > 0) {
+                insertList.forEach(mapper::insertTwinCalcStop);
+            }
+            if (updateList.size() > 0) {
+                updateList.forEach(mapper::updateTwinCalcStop);
+            }
+            sqlSession.commit();
+        }
+
+
+        calcSearch = new TwinCalcStop();
+        calcSearch.setDataDate(date);
+        calcSearch.setHour(startTime.getHour());
+        List<TwinCalcStop> calcStops = selectTwinCalcStopList(calcSearch);
+        List<TwinCalcHour> calcStopTimeList = new ArrayList<>();
+        calcStops.forEach(stop -> {
+            TwinCalcHour calcHour = new TwinCalcHour();
+            //1.计算停机时长
+            if (stop.getStartTime().before(date)) {
+                stop.setStartTime(date);
+            }
+            long stopTime = stop.getEndTime().getTime() - stop.getStartTime().getTime();
+            calcHour.setDeviceId(stop.getDeviceId());
+            calcHour.setCloseTime(stopTime);
+            calcStopTimeList.add(calcHour);
+        });
+
         //按ID分组,并统计停机时间
         Map<Long, Long> resultMap = calcStopTimeList.stream().collect(Collectors.groupingBy(TwinCalcHour::getDeviceId, Collectors.reducing(0L, TwinCalcHour::getCloseTime, Long::sum)));
 
-        Date e = new Date();
-        System.err.println(e.getTime() - s.getTime());
         hourList.forEach(hour -> {
             Long closeTime = 0L;
             if (resultMap.get(hour.getDeviceId()) != null) {
@@ -237,16 +251,8 @@ public class TwinCalcStopServiceImpl implements ITwinCalcStopService {
         });
 
         try (SqlSession sqlSession = factory.openSession(ExecutorType.BATCH, false)) {
-            TwinCalcStopMapper mapper = sqlSession.getMapper(TwinCalcStopMapper.class);
-            if (insertList.size() > 0) {
-                insertList.forEach(mapper::insertTwinCalcStop);
-            }
-            if (updateList.size() > 0) {
-                updateList.forEach(mapper::updateTwinCalcStop);
-            }
-
-            TwinCalcHourMapper hourMapper = sqlSession.getMapper(TwinCalcHourMapper.class);
-            hourList.forEach(hourMapper::updateTwinCalcHour);
+            TwinCalcHourMapper mapper = sqlSession.getMapper(TwinCalcHourMapper.class);
+            hourList.forEach(mapper::updateTwinCalcHour);
             sqlSession.commit();
         }
     }