Browse Source

补全容错机制

wukai 1 year ago
parent
commit
d34ad5b006

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

@@ -60,7 +60,7 @@ public class DataController extends BaseController {
 
     @GetMapping("/bl2")
     @ResponseBody
-    public AjaxResult bl3(String sd, String ed) {
+    public AjaxResult bl2(String sd, String ed) {
         LocalDate sld = LocalDate.parse(sd);
         LocalDate eld = LocalDate.parse(ed);
         do {

File diff suppressed because it is too large
+ 5 - 4
ruoyi-admin/src/main/java/com/ruoyi/biz/controller/DemoController.java


+ 1 - 1
ruoyi-admin/src/main/java/com/ruoyi/biz/mapper/TwinCalc2hrMapper.java

@@ -66,7 +66,7 @@ public interface TwinCalc2hrMapper {
      *
      * @return 时段 1-12
      */
-    Long lastPeriod();
+    TwinCalc2hr lastPeriod();
 
     /**
      * 计算当天的统计数据

+ 5 - 0
ruoyi-admin/src/main/java/com/ruoyi/biz/service/ITaskService.java

@@ -9,6 +9,11 @@ import java.time.LocalDate;
  */
 public interface ITaskService {
     /**
+     * 从数据库最后一个时间段统计至当前的上一个偶数时间点
+     */
+    void calc2Curr();
+
+    /**
      * 统计上一个时段数据
      */
     void calcLastPeriod();

+ 1 - 1
ruoyi-admin/src/main/java/com/ruoyi/biz/service/ITwinCalc2hrService.java

@@ -67,7 +67,7 @@ public interface ITwinCalc2hrService {
      *
      * @return 时段 1-12
      */
-    Long lastPeriod();
+    TwinCalc2hr lastPeriod();
 
     /**
      * 计算当天的统计数据

+ 6 - 0
ruoyi-admin/src/main/java/com/ruoyi/biz/service/impl/ApiServiceImpl.java

@@ -42,10 +42,15 @@ public class ApiServiceImpl implements IApiService {
     @Resource
     private AsyncServiceImpl asyncService;
 
+    @Resource
+    private ITaskService taskService;
+
+
     /**
      * 首页统计数据
      */
     @Override
+
     public void indexCalc() {
         TwinCalc2hr calc2hr = calc2hrService.calcToday();
         IndexData indexData = new IndexData();
@@ -192,6 +197,7 @@ public class ApiServiceImpl implements IApiService {
 
     @PostConstruct
     public void init() {
+        taskService.calc2Curr();
         indexCalc();
         indexAlarms();
     }

+ 30 - 0
ruoyi-admin/src/main/java/com/ruoyi/biz/service/impl/TaskServiceImpl.java

@@ -9,6 +9,7 @@ import com.ruoyi.biz.service.ITaskService;
 import com.ruoyi.biz.service.ITwinCalc2hrService;
 import com.ruoyi.biz.service.ITwinDeviceService;
 import com.ruoyi.biz.tools.Tools;
+import com.ruoyi.common.utils.DateUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
@@ -48,6 +49,35 @@ public class TaskServiceImpl implements ITaskService {
     private AsyncServiceImpl asyncService;
 
     /**
+     * 从数据库最后一个时间段统计至当前的上一个偶数时间点
+     */
+    @Override
+    public void calc2Curr() {
+        TwinCalc2hr calc2hr = calc2hrService.lastPeriod();
+        LocalDate localDate = DateUtils.toLocalDate(calc2hr.getDataDate());
+        Long lastPeriod = calc2hr.getTimePeriod();
+        if (lastPeriod == 12L) {
+            localDate = localDate.plusDays(1);
+            lastPeriod = 1L;
+        }
+
+        LocalDateTime start = LocalDateTime.of(localDate, LocalTime.MIN);
+        start = start.plusHours(lastPeriod * 2);
+        LocalDateTime end = start.plusHours(2);
+
+        LocalDateTime stop = Tools.currWholeTime();
+        //当前时间之前的偶数时间段
+        stop = stop.minusHours(stop.getHour() % 2);
+        do {
+            start = start.minusSeconds(1);
+            log.error("开始:{},结束:{}", start, end);
+//            calc4device(start, end);
+            start = end;
+            end = end.plusHours(2);
+        } while (!end.isAfter(stop));
+    }
+
+    /**
      * 统计上一个时段数据
      */
     @Override

+ 3 - 2
ruoyi-admin/src/main/java/com/ruoyi/biz/service/impl/TwinCalc2hrServiceImpl.java

@@ -110,7 +110,7 @@ public class TwinCalc2hrServiceImpl implements ITwinCalc2hrService {
      * @return 时段 1-12
      */
     @Override
-    public Long lastPeriod() {
+    public TwinCalc2hr lastPeriod() {
         return twinCalc2hrMapper.lastPeriod();
     }
 
@@ -219,7 +219,8 @@ public class TwinCalc2hrServiceImpl implements ITwinCalc2hrService {
         TwinCalc2hr result = new TwinCalc2hr(true);
         result.setDataDate(new Date());
         //获取上一个时段
-        Long lastPeriod = lastPeriod();
+        TwinCalc2hr last = lastPeriod();
+        Long lastPeriod = last.getTimePeriod();
         LocalDateTime start = LocalDateTime.of(LocalDate.now(), LocalTime.MIN);
         if (lastPeriod != 12L) {
             //如果为12,则代表是前一天的,那就从今天0点开始

+ 3 - 4
ruoyi-admin/src/main/resources/mapper/biz/TwinCalc2hrMapper.xml

@@ -101,10 +101,9 @@
         <include refid="selectTwinCalc2hrVo"/>
         where ID = #{id}
     </select>
-    <select id="lastPeriod" resultType="java.lang.Long">
-        SELECT (TIME_PERIOD + 0)
-        FROM TWIN_CALC_2HR A
-        ORDER BY DATA_DATE DESC, (TIME_PERIOD + 0) DESC LIMIT 1
+    <select id="lastPeriod" resultMap="TwinCalc2hrResult">
+        <include refid="selectTwinCalc2hrVo"/>
+        ORDER BY DATA_DATE DESC, TIME_PERIOD DESC LIMIT 1
     </select>
     <select id="calcToday" resultMap="TwinCalc2hrResult">
         SELECT DATA_DATE,

+ 41 - 12
ruoyi-admin/src/test/java/com/jjt/Test.java

@@ -8,10 +8,11 @@ import cn.hutool.http.Method;
 import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
+import com.ruoyi.biz.tools.Tools;
+import com.ruoyi.common.utils.DateUtils;
 
-import java.time.Instant;
-import java.time.LocalDateTime;
-import java.time.ZoneId;
+import java.time.*;
+import java.util.Date;
 
 /**
  * Test$
@@ -21,15 +22,43 @@ import java.time.ZoneId;
  */
 public class Test {
     public static void main(String[] args) {
-        long timestamp = 1714860159579l;
-        LocalDateTime dateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(timestamp), ZoneId.systemDefault());
-        System.err.println(dateTime);
-//        String table = "root.tl.suxi.knittings2_plc1";
-//        for (String table : tables) {
-//            query(table, "1");
-////            for (String filed : fileds) {
-////                query(table, filed);
-////            }
+        test("2024-06-05", 1L);
+    }
+
+    public static void test(String date, Long lastPeriod) {
+        Date d = DateUtils.parseDate(date);
+        LocalDate localDate = DateUtils.toLocalDate(d);
+        if (lastPeriod == 12L) {
+            localDate = localDate.plusDays(1);
+            lastPeriod = 1L;
+        }
+
+        LocalDateTime start = LocalDateTime.of(localDate, LocalTime.MIN);
+        start = start.plusHours(lastPeriod * 2);
+        LocalDateTime end = start.plusHours(2);
+
+        LocalDateTime stop = Tools.currWholeTime();
+        //当前时间之前的偶数时间段
+        stop = stop.minusHours(stop.getHour() % 2);
+        do {
+            start = start.minusSeconds(1);
+            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);
 //        }
     }
 

+ 5 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java

@@ -178,4 +178,9 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
         ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault());
         return Date.from(zdt.toInstant());
     }
+
+    public static LocalDate toLocalDate(Date date) {
+        LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
+        return localDate;
+    }
 }

Some files were not shown because too many files changed in this diff