Browse Source

fix:修复传感器导出excel不含湿度的问题;对导出各模块进行计时;导出接口不用返回结果

陈长荣 4 months ago
parent
commit
32c29180f9

+ 1 - 2
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/app/controller/AppController.java

@@ -135,8 +135,7 @@ public class AppController {
      */
     @Operation(summary = "导出传感器数据")
     @GetMapping("/device/export")
-    public CommonResult<String> export(HttpServletResponse response, AppTrendParam trendParam) {
+    public void export(HttpServletResponse response, AppTrendParam trendParam) {
         appDeviceService.export(response,trendParam);
-        return CommonResult.ok();
     }
 }

+ 39 - 31
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/app/service/AppDeviceService.java

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

+ 10 - 8
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitornotice/controller/MonitorNoticeController.java

@@ -15,8 +15,9 @@ package vip.xiaonuo.coldchain.modular.monitornotice.controller;
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import cn.hutool.core.bean.BeanUtil;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import io.swagger.v3.oas.annotations.tags.Tag;
 import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.annotation.Resource;
 import jakarta.servlet.http.HttpServletResponse;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -27,12 +28,14 @@ import vip.xiaonuo.coldchain.modular.app.param.export.AppTrendParam;
 import vip.xiaonuo.coldchain.modular.app.service.AppDeviceService;
 import vip.xiaonuo.coldchain.modular.monitordevice.entity.MonitorDevice;
 import vip.xiaonuo.coldchain.modular.monitordevice.service.MonitorDeviceService;
-import vip.xiaonuo.coldchain.modular.monitornotice.entity.*;
-import vip.xiaonuo.coldchain.modular.monitornotice.param.*;
-import vip.xiaonuo.common.pojo.CommonResult;
+import vip.xiaonuo.coldchain.modular.monitornotice.entity.CountWithTime;
+import vip.xiaonuo.coldchain.modular.monitornotice.entity.Realtime;
+import vip.xiaonuo.coldchain.modular.monitornotice.entity.Trend;
+import vip.xiaonuo.coldchain.modular.monitornotice.param.MonitorNoticePageParam;
+import vip.xiaonuo.coldchain.modular.monitornotice.param.RealtimeParam;
+import vip.xiaonuo.coldchain.modular.monitornotice.param.TrendParam;
 import vip.xiaonuo.coldchain.modular.monitornotice.service.MonitorNoticeService;
-
-import jakarta.annotation.Resource;
+import vip.xiaonuo.common.pojo.CommonResult;
 
 import java.util.List;
 
@@ -127,11 +130,10 @@ public class MonitorNoticeController {
      */
     @Operation(summary = "导出传感器数据")
     @GetMapping("/coldchain/monitornotice/export")
-    public CommonResult<String> export(HttpServletResponse response, TrendParam trendParam) {
+    public void export(HttpServletResponse response, TrendParam trendParam) {
         MonitorDevice monitorDevice = monitorDeviceService.queryEntity(trendParam.getDeviceId());
         AppTrendParam appTrendParam = BeanUtil.copyProperties(trendParam, AppTrendParam.class);
         appTrendParam.setSensorCode(monitorDevice.getDeviceCode());
         appDeviceService.export(response, appTrendParam);
-        return CommonResult.ok();
     }
 }