|
@@ -10,9 +10,12 @@ package vip.xiaonuo.coldchain.modular.app.service;
|
|
|
|
|
|
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
|
|
+import cn.hutool.core.collection.ListUtil;
|
|
|
|
|
+import cn.hutool.core.date.LocalDateTimeUtil;
|
|
|
import cn.hutool.core.lang.Assert;
|
|
import cn.hutool.core.lang.Assert;
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.github.jfcloud.influxdb.flux.AggregationWindow;
|
|
import com.github.jfcloud.influxdb.flux.AggregationWindow;
|
|
@@ -37,6 +40,9 @@ import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
import vip.xiaonuo.auth.core.util.StpLoginUserUtil;
|
|
import vip.xiaonuo.auth.core.util.StpLoginUserUtil;
|
|
|
|
|
+import vip.xiaonuo.coldchain.core.alarm.bean.SensorAlarm;
|
|
|
|
|
+import vip.xiaonuo.coldchain.core.alarm.enums.SensorAlarmType;
|
|
|
|
|
+import vip.xiaonuo.coldchain.core.alarm.service.SensorAlarmService;
|
|
|
import vip.xiaonuo.coldchain.core.alarm.service.delay.DeviceAlertDelayService;
|
|
import vip.xiaonuo.coldchain.core.alarm.service.delay.DeviceAlertDelayService;
|
|
|
import vip.xiaonuo.coldchain.core.bean.influxdb.SensorData;
|
|
import vip.xiaonuo.coldchain.core.bean.influxdb.SensorData;
|
|
|
import vip.xiaonuo.coldchain.core.service.JfcloudSensorDataService;
|
|
import vip.xiaonuo.coldchain.core.service.JfcloudSensorDataService;
|
|
@@ -44,6 +50,7 @@ import vip.xiaonuo.coldchain.modular.app.dto.AppInfo;
|
|
|
import vip.xiaonuo.coldchain.modular.app.param.*;
|
|
import vip.xiaonuo.coldchain.modular.app.param.*;
|
|
|
import vip.xiaonuo.coldchain.modular.app.param.export.AppTrendParam;
|
|
import vip.xiaonuo.coldchain.modular.app.param.export.AppTrendParam;
|
|
|
import vip.xiaonuo.coldchain.modular.app.param.export.ExportParam;
|
|
import vip.xiaonuo.coldchain.modular.app.param.export.ExportParam;
|
|
|
|
|
+import vip.xiaonuo.coldchain.modular.monitordevice.entity.MonitorDevice;
|
|
|
import vip.xiaonuo.coldchain.modular.monitordevice.service.MonitorDeviceService;
|
|
import vip.xiaonuo.coldchain.modular.monitordevice.service.MonitorDeviceService;
|
|
|
import vip.xiaonuo.coldchain.modular.monitortarget.entity.MonitorTarget;
|
|
import vip.xiaonuo.coldchain.modular.monitortarget.entity.MonitorTarget;
|
|
|
import vip.xiaonuo.coldchain.modular.monitortarget.param.MonitorTargetPageParam;
|
|
import vip.xiaonuo.coldchain.modular.monitortarget.param.MonitorTargetPageParam;
|
|
@@ -63,6 +70,11 @@ import java.net.URLEncoder;
|
|
|
import java.nio.charset.StandardCharsets;
|
|
import java.nio.charset.StandardCharsets;
|
|
|
import java.text.DecimalFormat;
|
|
import java.text.DecimalFormat;
|
|
|
import java.text.SimpleDateFormat;
|
|
import java.text.SimpleDateFormat;
|
|
|
|
|
+import java.time.LocalDate;
|
|
|
|
|
+import java.time.LocalDateTime;
|
|
|
|
|
+import java.time.ZoneId;
|
|
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
|
|
|
+import java.time.temporal.ChronoUnit;
|
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
import java.util.*;
|
|
import java.util.*;
|
|
|
import java.util.concurrent.CompletableFuture;
|
|
import java.util.concurrent.CompletableFuture;
|
|
@@ -82,6 +94,8 @@ public class AppDeviceService {
|
|
|
private final JfcloudSensorDataService jfcloudSensorDataService;
|
|
private final JfcloudSensorDataService jfcloudSensorDataService;
|
|
|
private final MonitorDeviceService monitorDeviceService;
|
|
private final MonitorDeviceService monitorDeviceService;
|
|
|
private final DeviceAlertDelayService delayService;
|
|
private final DeviceAlertDelayService delayService;
|
|
|
|
|
+
|
|
|
|
|
+ private final SensorAlarmService sensorAlarmService;
|
|
|
@Resource
|
|
@Resource
|
|
|
DevConfigService devConfigService;
|
|
DevConfigService devConfigService;
|
|
|
|
|
|
|
@@ -1233,9 +1247,9 @@ public class AppDeviceService {
|
|
|
String avgCo2 = (co2Stats != null && co2Stats.length > 2 && co2Stats[2] != null)
|
|
String avgCo2 = (co2Stats != null && co2Stats.length > 2 && co2Stats[2] != null)
|
|
|
? TEMP_FORMAT.format(co2Stats[2]) + "ppm" : "";
|
|
? TEMP_FORMAT.format(co2Stats[2]) + "ppm" : "";
|
|
|
|
|
|
|
|
- addTableRow(recordTable, "开始时间:", trendParam.getStartTime(), "最高CO₂浓度:", maxCo2);
|
|
|
|
|
- addTableRow(recordTable, "结束时间:", trendParam.getEndTime(), "最低CO₂浓度:", minCo2);
|
|
|
|
|
- addTableRow(recordTable, "", "", "平均CO₂浓度:", avgCo2);
|
|
|
|
|
|
|
+ addTableRow(recordTable, "开始时间:", trendParam.getStartTime(), "最高co2浓度:", maxCo2);
|
|
|
|
|
+ addTableRow(recordTable, "结束时间:", trendParam.getEndTime(), "最低co2浓度:", minCo2);
|
|
|
|
|
+ addTableRow(recordTable, "", "", "平均co2浓度:", avgCo2);
|
|
|
}
|
|
}
|
|
|
if (sensorType.contains("D")) {
|
|
if (sensorType.contains("D")) {
|
|
|
// 温度处理
|
|
// 温度处理
|
|
@@ -1437,9 +1451,9 @@ public class AppDeviceService {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if (co2Stats != null && !Arrays.stream(co2Stats).allMatch(Objects::isNull)) {
|
|
if (co2Stats != null && !Arrays.stream(co2Stats).allMatch(Objects::isNull)) {
|
|
|
- addTableRow(recordTable, "开始时间:", trendParam.getStartTime(), "最高CO2:", maxCo2);
|
|
|
|
|
- addTableRow(recordTable, "结束时间:", trendParam.getEndTime(), "最低CO2:", minCo2);
|
|
|
|
|
- addTableRow(recordTable, "", "", "平均CO2:", avgCo2);
|
|
|
|
|
|
|
+ addTableRow(recordTable, "开始时间:", trendParam.getStartTime(), "最高co2:", maxCo2);
|
|
|
|
|
+ addTableRow(recordTable, "结束时间:", trendParam.getEndTime(), "最低co2:", minCo2);
|
|
|
|
|
+ addTableRow(recordTable, "", "", "平均co2:", avgCo2);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if (pm25Stats != null && !Arrays.stream(pm25Stats).allMatch(Objects::isNull)) {
|
|
if (pm25Stats != null && !Arrays.stream(pm25Stats).allMatch(Objects::isNull)) {
|
|
@@ -1906,4 +1920,27 @@ public class AppDeviceService {
|
|
|
}
|
|
}
|
|
|
return appInfo;
|
|
return appInfo;
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ public JSONObject getRecordCount(Long deviceId, String roads) {
|
|
|
|
|
+ MonitorDevice monitorDevice = monitorDeviceService.getById(deviceId);
|
|
|
|
|
+ //统计时间范围
|
|
|
|
|
+ String startTime ="1997-01-01T00:00:00Z";
|
|
|
|
|
+ String endTime= LocalDate.now().format(DateTimeFormatter.ISO_DATE) + "T23:59:59Z";
|
|
|
|
|
+ //记录总数
|
|
|
|
|
+ long sensorDataCount = jfcloudSensorDataService.getSensorDataAllCount(startTime, endTime, monitorDevice.getDeviceCode(), roads);
|
|
|
|
|
+ //在线时长
|
|
|
|
|
+ SensorData startData = jfcloudSensorDataService.queryFirstDataTimeByDeviceIdAndRoads(startTime, endTime,monitorDevice.getDeviceCode(), Integer.valueOf(roads));
|
|
|
|
|
+ SensorData endData = jfcloudSensorDataService.queryLatestDataByDeviceIdAndRoads(monitorDevice.getDeviceCode(), Integer.valueOf(roads));
|
|
|
|
|
+ //预警次数
|
|
|
|
|
+ long alarmCount = 0;
|
|
|
|
|
+ LocalDateTime startUtc = startData.getTime().atZone(ZoneId.of("UTC+8")).toLocalDateTime();
|
|
|
|
|
+ LocalDateTime endUtc = endData.getTime().atZone(ZoneId.of("UTC+8")).toLocalDateTime();
|
|
|
|
|
+ JSONObject obj = new JSONObject()
|
|
|
|
|
+ .fluentPut("recordCount", sensorDataCount)
|
|
|
|
|
+ .fluentPut("onlineDay", LocalDateTimeUtil.between(startUtc,endUtc, ChronoUnit.DAYS))
|
|
|
|
|
+ .fluentPut("alarmCount", alarmCount);
|
|
|
|
|
+ return obj;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|