Преглед изворни кода

当阳数据实时数据将1分钟以下的数据做1分钟对齐

1037015548@qq.com пре 9 месеци
родитељ
комит
b11dfdf2fc

+ 2 - 2
dc3-gateway/src/main/java/io/github/pnoker/gateway/bizmgr/KprDangyangWaterBizFun.java

@@ -212,8 +212,8 @@ public class KprDangyangWaterBizFun {
         Calendar nextRun = (Calendar) now.clone();
 
         // 设置为明天的0点
-        nextRun.set(Calendar.HOUR_OF_DAY, 15);
-        nextRun.set(Calendar.MINUTE, 28);
+        nextRun.set(Calendar.HOUR_OF_DAY, 1);
+        nextRun.set(Calendar.MINUTE, 0);
         nextRun.set(Calendar.SECOND, 0);
         nextRun.set(Calendar.MILLISECOND, 0);
 

+ 32 - 18
dc3-gateway/src/main/java/io/github/pnoker/gateway/comtool/ThreadHistoryTask.java

@@ -48,17 +48,31 @@ public class ThreadHistoryTask implements Runnable{
     @Override
     public void run() {
         try {
-            LocalDateTime nowTime = LocalDateTime.now();
-            String nowTimeStr = nowTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
-            String oneMonthStr = nowTime.minusMonths(1).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+            // 获取当前时间的0点
+            LocalDateTime now = LocalDateTime.now().minusHours(0).minusMinutes(0).minusSeconds(0);
+
+            // 提取当前时间的年、月、时、分、秒
+            int year = now.getYear();
+            int month = now.getMonthValue();
+            int dayOfMonth = 1; // 该月的第一天
+            int hour = now.getHour();
+            int minute = now.getMinute();
+            int second = now.getSecond();
+
+            // 创建一个列表来存储每一天的日期(内部循环补齐数据的日期集合)
+            List<LocalDateTime> days = new ArrayList<>();
+
+            // 使用提取的值构造新的LocalDateTime对象
+            LocalDateTime firstDayOfMonthWithCurrentTime = LocalDateTime.of(year, month, dayOfMonth, hour, minute, second);
+            // 从当前月的第一天遍历到当前日期(包含当前日期)
+            for (LocalDateTime date = firstDayOfMonthWithCurrentTime; !date.isAfter(now); date = date.plusDays(1)) {
+                // 将日期与午夜时间结合,并添加到列表中
+                days.add(date);
+            }
+
             List<JSONObject> deviceRealtimeDataList = new ArrayList<>();
-            int pageSize = 1000;
             for (Map<String, Object> map : deviceList) {
-//                int pageNo = 1;
-                while (true) {
-                    if (oneMonthStr.equals(nowTimeStr)){
-                        break;
-                    }
+                for (LocalDateTime day:days){
                     JSONObject devicerealtimeDataTotal = null;
                     try {
                         Map<String, String> paramRealtime = new HashMap<>();
@@ -66,34 +80,34 @@ public class ThreadHistoryTask implements Runnable{
                         paramRealtime.put("deviceCode", String.valueOf(map.get("deviceCode")));
 //                        paramRealtime.put("pageNo", String.valueOf(pageNo));
 //                        paramRealtime.put("pageSize", String.valueOf(pageSize));
-                        paramRealtime.put("startTime", oneMonthStr);
-                        paramRealtime.put("endTime", parseStringToDateTime(oneMonthStr,TimeTool.TIMESTAMP_FORMAT).minusDays(-1)
-                                .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+                        paramRealtime.put("startTime", day.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+                        paramRealtime.put("endTime", day.minusDays(-2)
+                                .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));//由于长通接口问题,暂时先每次查两天范围的数据
+                        paramRealtime.put("interval", String.valueOf((collectionFrequency<60?60:collectionFrequency)));
                         Map<String, String> headers = new HashMap<>();
                         headers.put("Authorization", "Bearer " + KprDangyangWaterBizFun.dangyangToken);
                         devicerealtimeDataTotal = JSONObject.parseObject(HttpUtil.sendGet(
                                 KprDangyangWaterBizFun.hisDataListUrl, paramRealtime, headers));
+                        System.out.println(taskId+",日期:"+paramRealtime.get("startTime")+
+                                "----"+paramRealtime.get("endTime")+";"+paramRealtime.get("deviceCode")+"数据:"+devicerealtimeDataTotal.toJSONString());
                     } catch (Exception ex) {
                         log.error("历史任务线程" + taskId + " 调用异常:" + ex.getLocalizedMessage());
                     }
                     if (devicerealtimeDataTotal == null || devicerealtimeDataTotal.getInteger("code") != 0 ||
                             devicerealtimeDataTotal.getJSONArray("data") == null
                             || devicerealtimeDataTotal.getJSONArray("data").isEmpty()) {
-                        break;
+                        continue;
                     }
                     try {
                         //TODO 查询数据不为空,插入infulxdb
                         for (int i = 0; i <devicerealtimeDataTotal.getJSONArray("data").size(); i++) {
                             JSONObject deviceRealtimeData = devicerealtimeDataTotal.getJSONArray("data").getJSONObject(i);
-                            adjustTime(deviceRealtimeData, collectionFrequency);//整点rand处理
+//                            adjustTime(deviceRealtimeData, collectionFrequency);//整点rand处理
                             deviceRealtimeDataList.add(deviceRealtimeData);
                         }
                     } catch (Exception ex) {
                         log.error("历史任务线程" + taskId + " " + String.valueOf(map.get("deviceCode")) + "查询异常:" + ex.getLocalizedMessage() + ";resJson:" + devicerealtimeDataTotal.toJSONString());
                     }
-//                    pageNo++;
-                    oneMonthStr = parseStringToDateTime(oneMonthStr,TimeTool.TIMESTAMP_FORMAT).minusDays(-1)
-                            .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
                 }
             }
             //TODO 开始插入数据库
@@ -107,7 +121,7 @@ public class ThreadHistoryTask implements Runnable{
                     KprDangyangWaterBizFun.infulxDbUtil.insert(pointNanos);
                 }
             }
-
+            System.out.println(taskId+"历史数据同步完毕,数据长度:"+deviceRealtimeDataList.size());
         }catch(Exception ex){
             ex.printStackTrace();
         }