|
@@ -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();
|
|
|
}
|