瀏覽代碼

补全容错机制

wukai 1 年之前
父節點
當前提交
f57421c485

+ 0 - 2
ruoyi-admin/src/main/java/com/ruoyi/biz/controller/DataController.java

@@ -64,8 +64,6 @@ public class DataController extends BaseController {
         LocalDate sld = LocalDate.parse(sd);
         LocalDate eld = LocalDate.parse(ed);
         do {
-            String sql = "DELETE FROM twin_calc_day WHERE TIME=?";
-            jdbcTemplate.update(sql, Date.from(sld.atStartOfDay(ZoneId.systemDefault()).toInstant()));
             dayService.calc4date(sld);
             sld = sld.plusDays(1);
         } while (!sld.isAfter(eld));

+ 11 - 3
ruoyi-admin/src/main/java/com/ruoyi/biz/mapper/TwinCalcDayMapper.java

@@ -1,8 +1,9 @@
 package com.ruoyi.biz.mapper;
 
+import com.ruoyi.biz.domain.TwinCalcDay;
+
 import java.util.Date;
 import java.util.List;
-import com.ruoyi.biz.domain.TwinCalcDay;
 
 /**
  * 日统计数据Mapper接口
@@ -10,8 +11,7 @@ import com.ruoyi.biz.domain.TwinCalcDay;
  * @author ruoyi
  * @date 2024-05-22
  */
-public interface TwinCalcDayMapper
-{
+public interface TwinCalcDayMapper {
     /**
      * 查询日统计数据
      *
@@ -59,6 +59,7 @@ public interface TwinCalcDayMapper
      * @return 结果
      */
     public int deleteTwinCalcDayByIds(String[] ids);
+
     /**
      * 查询指定日期及之后的数据
      *
@@ -66,4 +67,11 @@ public interface TwinCalcDayMapper
      * @return 列表
      */
     List<TwinCalcDay> selectTwinCalcDayListByTime(Date date);
+
+    /**
+     * 按日期删除数据
+     *
+     * @param date
+     */
+    void delete4date(Date date);
 }

+ 11 - 6
ruoyi-admin/src/main/java/com/ruoyi/biz/service/impl/TaskServiceImpl.java

@@ -4,10 +4,7 @@ import com.ruoyi.biz.domain.TwinCalc2hr;
 import com.ruoyi.biz.domain.TwinDevice;
 import com.ruoyi.biz.domain.TwinPanHeadInfo;
 import com.ruoyi.biz.domain.TwinRecordAlarms;
-import com.ruoyi.biz.service.IIotService;
-import com.ruoyi.biz.service.ITaskService;
-import com.ruoyi.biz.service.ITwinCalc2hrService;
-import com.ruoyi.biz.service.ITwinDeviceService;
+import com.ruoyi.biz.service.*;
 import com.ruoyi.biz.tools.Tools;
 import com.ruoyi.common.utils.DateUtils;
 import lombok.extern.slf4j.Slf4j;
@@ -47,6 +44,8 @@ public class TaskServiceImpl implements ITaskService {
     private JdbcTemplate jdbcTemplate;
     @Resource
     private AsyncServiceImpl asyncService;
+    @Resource
+    private ITwinCalcDayService dayService;
 
     /**
      * 从数据库最后一个时间段统计至当前的上一个偶数时间点
@@ -68,12 +67,18 @@ public class TaskServiceImpl implements ITaskService {
         LocalDateTime stop = Tools.currWholeTime();
         //当前时间之前的偶数时间段
         stop = stop.minusHours(stop.getHour() % 2);
-        do {
+        while (!end.isAfter(stop)) {
             start = start.minusSeconds(1);
             calc4device(start, end);
+            log.info("补录数据===========start:{},end:{},stop:{}", start, end, stop);
+            if (end.getHour() == 0) {
+                //跨天,统计前一天的总数据
+                log.info("----------------{},{}", start, end);
+                dayService.calc4date(start.toLocalDate());
+            }
             start = end;
             end = end.plusHours(2);
-        } while (!end.isAfter(stop));
+        }
     }
 
     /**

+ 1 - 0
ruoyi-admin/src/main/java/com/ruoyi/biz/service/impl/TwinCalcDayServiceImpl.java

@@ -121,6 +121,7 @@ public class TwinCalcDayServiceImpl implements ITwinCalcDayService {
     @Override
     public void calc4date(LocalDate localDate) {
         Date date = Date.from(localDate.atStartOfDay(ZoneOffset.of("+8")).toInstant());
+        twinCalcDayMapper.delete4date(date);
         TwinCalc2hr calc = calc2hrService.calc4date(date);
         if (calc != null) {
             TwinCalcDay day = new TwinCalcDay();

+ 5 - 0
ruoyi-admin/src/main/resources/mapper/biz/TwinCalcDayMapper.xml

@@ -201,5 +201,10 @@
             #{id}
         </foreach>
     </delete>
+    <delete id="delete4date" parameterType="Date">
+        DELETE
+        FROM twin_calc_day
+        WHERE TIME =#{date}
+    </delete>
 
 </mapper>

+ 8 - 18
ruoyi-admin/src/test/java/com/jjt/Test.java

@@ -22,7 +22,10 @@ import java.util.Date;
  */
 public class Test {
     public static void main(String[] args) {
-        test("2024-06-05", 1L);
+        LocalDateTime local
+                = LocalDateTime.parse("2018-12-03T00:00:00");
+
+        test("2024-06-06", 8L);
     }
 
     public static void test(String date, Long lastPeriod) {
@@ -40,26 +43,13 @@ public class Test {
         LocalDateTime stop = Tools.currWholeTime();
         //当前时间之前的偶数时间段
         stop = stop.minusHours(stop.getHour() % 2);
-        do {
+        while (!end.isAfter(stop)) {
             start = start.minusSeconds(1);
-            System.err.println(start + "\t" + end);
+
+            System.err.println(start+"\t"+end);
             start = end;
             end = end.plusHours(2);
-        } while (!end.isAfter(stop));
-//        for (; sp <= ep; sp++) {
-//            //先删除数据,再进行
-//            LocalDateTime start = ldt.plusHours(2 * sp).minusHours(2);
-//            LocalDateTime end = start.plusHours(2);
-//            Long startTime = start.toInstant(ZoneOffset.of("+8")).toEpochMilli();
-//            Long endTime = end.toInstant(ZoneOffset.of("+8")).toEpochMilli();
-//            String sql = "DELETE FROM TWIN_CALC_2HR WHERE DATA_DATE=? AND TIME_PERIOD=?";
-//            jdbcTemplate.update(sql, date, sp);
-//            sql = "DELETE FROM TWIN_RECORD_ALARMS WHERE DATA_TIME>=? AND DATA_TIME<=?";
-//            jdbcTemplate.update(sql, new Date(startTime), new Date(endTime));
-//            sql = "DELETE FROM TWIN_PAN_HEAD_INFO WHERE RECORD_TIME>=? AND RECORD_TIME<=?";
-//            jdbcTemplate.update(sql, new Date(startTime), new Date(endTime));
-//            taskService.calc(date, sp);
-//        }
+        }
     }
 
     public static void query(String table, String filed) {