|
@@ -10,6 +10,7 @@ package vip.xiaonuo.coldchain.modular.app.service;
|
|
|
|
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
+import cn.hutool.core.date.StopWatch;
|
|
|
import cn.hutool.core.lang.Assert;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
import com.alibaba.excel.EasyExcel;
|
|
@@ -20,13 +21,14 @@ import com.github.jfcloud.influxdb.flux.AggregationWindow;
|
|
|
import com.google.common.collect.Lists;
|
|
|
import jakarta.servlet.http.HttpServletResponse;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import vip.xiaonuo.auth.core.util.StpLoginUserUtil;
|
|
|
import vip.xiaonuo.coldchain.core.bean.influxdb.SensorData;
|
|
|
import vip.xiaonuo.coldchain.core.service.JfcloudSensorDataService;
|
|
|
import vip.xiaonuo.coldchain.modular.app.param.*;
|
|
|
-import vip.xiaonuo.coldchain.modular.app.param.export.ExportParam;
|
|
|
import vip.xiaonuo.coldchain.modular.app.param.export.AppTrendParam;
|
|
|
+import vip.xiaonuo.coldchain.modular.app.param.export.ExportParam;
|
|
|
import vip.xiaonuo.coldchain.modular.monitordevice.service.MonitorDeviceService;
|
|
|
import vip.xiaonuo.coldchain.modular.monitortarget.entity.MonitorTarget;
|
|
|
import vip.xiaonuo.coldchain.modular.monitortarget.param.MonitorTargetPageParam;
|
|
@@ -42,10 +44,12 @@ import java.io.OutputStream;
|
|
|
import java.net.URLEncoder;
|
|
|
import java.nio.charset.StandardCharsets;
|
|
|
import java.util.*;
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
|
import java.util.function.Consumer;
|
|
|
import java.util.function.Supplier;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
+@Slf4j
|
|
|
@Service
|
|
|
@RequiredArgsConstructor
|
|
|
public class AppDeviceService {
|
|
@@ -442,47 +446,48 @@ public class AppDeviceService {
|
|
|
}
|
|
|
|
|
|
public void export(HttpServletResponse response, AppTrendParam trendParam) {
|
|
|
- AppDeviceQueryParams appDeviceQueryParams = BeanUtil.copyProperties(trendParam, AppDeviceQueryParams.class);
|
|
|
- appDeviceQueryParams.setSensorRoute(trendParam.getRoads());
|
|
|
- SensorEchartDataResult sensorEchartDataResult = queryDataByDeviceIdAndRoads(appDeviceQueryParams);
|
|
|
+ StopWatch stopWatch = new StopWatch("传感器数据导出");
|
|
|
+
|
|
|
+ stopWatch.start("查询设备信息");
|
|
|
MonitorTargetRegion monitorTargetRegion = monitorTargetRegionService.findOneByDeviceCodeAndSensorNo(trendParam.getSensorCode(), trendParam.getRoads());
|
|
|
+ stopWatch.stop();
|
|
|
if (Objects.isNull(monitorTargetRegion)) {
|
|
|
throw new CommonException("未找到设备编号 [{}] 和传感器编号 [{}] 对应的监控目标区域。", trendParam.getSensorCode(), trendParam.getRoads());
|
|
|
}
|
|
|
+
|
|
|
+ stopWatch.start("查询传感器数据");
|
|
|
+ AppDeviceQueryParams appDeviceQueryParams = BeanUtil.copyProperties(trendParam, AppDeviceQueryParams.class);
|
|
|
+ appDeviceQueryParams.setSensorRoute(trendParam.getRoads());
|
|
|
+ SensorEchartDataResult sensorEchartDataResult = queryDataByDeviceIdAndRoads(appDeviceQueryParams);
|
|
|
+ stopWatch.stop();
|
|
|
+
|
|
|
+ stopWatch.start("导出数据");
|
|
|
List<ExportParam> exportParamList = new ArrayList<>();
|
|
|
ExportParam exportParam = new ExportParam();
|
|
|
exportParam.setRegionName(monitorTargetRegion.getName());
|
|
|
exportParam.setDeviceCode(trendParam.getSensorCode());
|
|
|
exportParam.setSensorRoad(trendParam.getRoads());
|
|
|
String sensorType = monitorTargetRegion.getSensorType().toUpperCase();
|
|
|
- if (sensorType.contains("W")) {
|
|
|
- exportParam.setDataType("温度");
|
|
|
- LinkedHashSet<String> x = sensorEchartDataResult.getTemperature().getX();
|
|
|
- List<Float> y = sensorEchartDataResult.getTemperature().getY();
|
|
|
- int i = 0;
|
|
|
- for (String s : x) {
|
|
|
- ExportParam exportParamOut = BeanUtil.copyProperties(exportParam, ExportParam.class);
|
|
|
- exportParamOut.setTime(s);
|
|
|
- exportParamOut.setData(y.get(i));
|
|
|
- i++;
|
|
|
- exportParamList.add(exportParamOut);
|
|
|
- }
|
|
|
- } else if (sensorType.contains("S")) {
|
|
|
- exportParam.setDataType("湿度");
|
|
|
- LinkedHashSet<String> x = sensorEchartDataResult.getHumidity().getX();
|
|
|
- List<Float> y = sensorEchartDataResult.getHumidity().getY();
|
|
|
- int i = 0;
|
|
|
- for (String s : x) {
|
|
|
- ExportParam exportParamOut = BeanUtil.copyProperties(exportParam, ExportParam.class);
|
|
|
- exportParamOut.setTime(s);
|
|
|
- exportParamOut.setData(y.get(i));
|
|
|
- i++;
|
|
|
- exportParamList.add(exportParamOut);
|
|
|
+ for (char type : sensorType.toCharArray()) {
|
|
|
+ LinkedHashSet<String> x;
|
|
|
+ List<Float> y;
|
|
|
+ if (type == 'W') {
|
|
|
+ exportParam.setDataType("温度");
|
|
|
+ x = sensorEchartDataResult.getTemperature().getX();
|
|
|
+ y = sensorEchartDataResult.getTemperature().getY();
|
|
|
+ } else if (type == 'S') {
|
|
|
+ exportParam.setDataType("湿度");
|
|
|
+ x = sensorEchartDataResult.getHumidity().getX();
|
|
|
+ y = sensorEchartDataResult.getHumidity().getY();
|
|
|
+ } else if (type == 'C') {
|
|
|
+ exportParam.setDataType("二氧化碳浓度");
|
|
|
+ x = sensorEchartDataResult.getCo2().getX();
|
|
|
+ y = sensorEchartDataResult.getCo2().getY();
|
|
|
+ } else {
|
|
|
+ log.warn("未知的传感器类型:{}", type);
|
|
|
+ continue;
|
|
|
}
|
|
|
- } else if (sensorType.contains("C")) {
|
|
|
- exportParam.setDataType("二氧化碳浓度");
|
|
|
- LinkedHashSet<String> x = sensorEchartDataResult.getCo2().getX();
|
|
|
- List<Float> y = sensorEchartDataResult.getCo2().getY();
|
|
|
+
|
|
|
int i = 0;
|
|
|
for (String s : x) {
|
|
|
ExportParam exportParamOut = BeanUtil.copyProperties(exportParam, ExportParam.class);
|
|
@@ -505,6 +510,9 @@ public class AppDeviceService {
|
|
|
.doWrite(exportParamList);
|
|
|
} catch (IOException e) {
|
|
|
throw new RuntimeException(e);
|
|
|
+ } finally {
|
|
|
+ stopWatch.stop();
|
|
|
+ log.info("Excel导出耗时:{}", stopWatch.prettyPrint(TimeUnit.MILLISECONDS));
|
|
|
}
|
|
|
}
|
|
|
}
|