Browse Source

fix:修复传感器数据导出最高/最低/平均数值不正确bug
feat:新增获取程序信息接口

黄渊昊 4 tháng trước cách đây
mục cha
commit
62b28bc79b
13 tập tin đã thay đổi với 166 bổ sung36 xóa
  1. 5 0
      snowy-plugin/snowy-plugin-coldchain/pom.xml
  2. 24 5
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/alarm/mapper/mapping/SensorAlarmMapper.xml
  3. 16 2
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/app/controller/AppController.java
  4. 36 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/app/dto/AppInfo.java
  5. 68 20
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/app/service/AppDeviceService.java
  6. 3 3
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/controller/MonitorDeviceController.java
  7. 1 1
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/service/MonitorDeviceService.java
  8. 4 1
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/service/impl/MonitorDeviceServiceImpl.java
  9. 1 1
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/targetroom/param/TargetRoomAddParam.java
  10. 1 1
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/targetroom/param/TargetRoomEditParam.java
  11. 1 1
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/targetroom/service/impl/TargetRoomServiceImpl.java
  12. 5 0
      snowy-web-app/pom.xml
  13. 1 1
      snowy-web-app/src/main/resources/logback-spring.xml

+ 5 - 0
snowy-plugin/snowy-plugin-coldchain/pom.xml

@@ -108,5 +108,10 @@
             <groupId>org.springframework.integration</groupId>
             <artifactId>spring-integration-mqtt</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.github.binarywang</groupId>
+            <artifactId>weixin-java-miniapp</artifactId>
+            <version>4.6.0</version>
+        </dependency>
     </dependencies>
 </project>

+ 24 - 5
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/alarm/mapper/mapping/SensorAlarmMapper.xml

@@ -3,7 +3,7 @@
 <mapper namespace="vip.xiaonuo.coldchain.core.alarm.mapper.SensorAlarmMapper">
 
     <select id="getTop10Warning" resultType="vip.xiaonuo.coldchain.modular.monitorsearchhistory.dto.TopWarningDto">
-        SELECT
+<!--        SELECT
         COUNT(*) AS totalWarnings,
         s.device_id AS deviceId,
         r.NAME AS device_name,
@@ -27,6 +27,26 @@
         r.NAME
         ORDER BY
         totalWarnings DESC
+        LIMIT 10-->
+
+        SELECT
+        sensor_code,
+        sensor_route,
+        COUNT(*) AS totalWarnings,
+        source as device_name
+        FROM
+        sensor_alarm force index (top10)
+        WHERE
+        create_time > #{time}
+        AND type IN
+        <foreach collection="types" item="type" open="(" separator="," close=")">
+            #{type}
+        </foreach>
+        AND CREATE_ORG = #{orgId}
+        GROUP BY
+        sensor_code, sensor_route
+        ORDER BY
+        totalWarnings DESC
         LIMIT 10
     </select>
 
@@ -61,13 +81,12 @@
     <select id="countInPage" resultType="Long">
         SELECT COUNT(id) AS total
         FROM sensor_alarm FORCE INDEX(sensoralarm_page)
-        WHERE DELETE_FLAG = 'NOT_DELETE'
-        AND CREATE_ORG = #{orgId}
+        WHERE CREATE_ORG = #{orgId}
         AND type IN
         <foreach collection="typeCodes" item="type" open="(" separator="," close=")">
             #{type}
         </foreach>
-        <if test="alarmType != null">
+        <if test="alarmType != null and alarmType != ''">
             AND alarm_type = #{alarmType}
         </if>
         <if test="startTime != null">
@@ -76,7 +95,7 @@
         <if test="endTime != null">
             AND CREATE_TIME &lt;= #{endTime}
         </if>
-        <if test="keyword != null">
+        <if test="keyword != null and keyword != ''">
             AND (device_name LIKE CONCAT('%', #{keyword}, '%')
             OR message LIKE CONCAT('%', #{keyword}, '%'))
         </if>

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

@@ -14,11 +14,13 @@ import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 import rk.netDevice.sdk.p2.ParamItem;
+import vip.xiaonuo.coldchain.modular.app.dto.AppInfo;
 import vip.xiaonuo.coldchain.modular.app.param.*;
 import vip.xiaonuo.coldchain.modular.app.param.export.AppTrendParam;
 import vip.xiaonuo.coldchain.modular.app.service.AppDeviceService;
 import vip.xiaonuo.coldchain.modular.app.service.MessageService;
 import vip.xiaonuo.coldchain.modular.monitordevice.service.MonitorDeviceService;
+import vip.xiaonuo.coldchain.modular.monitordevicetype.entity.CountEntity;
 import vip.xiaonuo.common.exception.CommonException;
 import vip.xiaonuo.common.pojo.CommonResult;
 
@@ -143,8 +145,8 @@ public class AppController {
      */
     @Operation(summary = "导出传感器数据")
     @PostMapping("/device/export")
-    public void export(HttpServletResponse response, AppTrendParam trendParam, MultipartFile file) {
-        appDeviceService.export(response, trendParam ,file);
+    public void export(HttpServletResponse response,@RequestBody AppTrendParam trendParam) {
+        appDeviceService.export(response, trendParam, null);
     }
 
     /**
@@ -155,4 +157,16 @@ public class AppController {
     public CommonResult<AppParametersParam> getParameters(String deviceCode, Integer sensorRoute) {
         return CommonResult.data(monitorDeviceService.getParameters(deviceCode, sensorRoute));
     }
+
+    @Operation(summary = "获取小程序信息")
+    @GetMapping("/device/getAppInfo")
+    public CommonResult<AppInfo> getAppInfo() {
+        return CommonResult.data(appDeviceService.getAppInfo());
+    }
+
+    @Operation(summary = "正常/离线总数")
+    @GetMapping("/device/getIndexCount")
+    public CommonResult<CountEntity> getIndexCount() {
+        return CommonResult.data(monitorDeviceService.getIndexCount());
+    }
 }

+ 36 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/app/dto/AppInfo.java

@@ -0,0 +1,36 @@
+package vip.xiaonuo.coldchain.modular.app.dto;
+
+import lombok.Data;
+
+@Data
+public class AppInfo {
+    /**
+     * 系统版本
+     */
+    private String SysVersion;
+
+    /**
+     * 系统简介
+     */
+    private String SysIntro;
+
+    /**
+     * 版权信息
+     */
+    private String Copyright;
+
+    /**
+     * 官网地址
+     */
+    private String OfficialWebsite;
+
+    /**
+     * 系统图标
+     */
+    private String SysIcon;
+
+    /**
+     * 版权号
+     */
+    private String CopyRightNo;
+}

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

@@ -34,6 +34,7 @@ import com.itextpdf.layout.element.*;
 import com.itextpdf.layout.properties.HorizontalAlignment;
 import com.itextpdf.layout.properties.TextAlignment;
 import com.itextpdf.layout.properties.UnitValue;
+import jakarta.annotation.Resource;
 import jakarta.servlet.http.HttpServletResponse;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -42,6 +43,7 @@ import org.springframework.web.multipart.MultipartFile;
 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.dto.AppInfo;
 import vip.xiaonuo.coldchain.modular.app.param.*;
 import vip.xiaonuo.coldchain.modular.app.param.export.AppTrendParam;
 import vip.xiaonuo.coldchain.modular.app.param.export.ExportParam;
@@ -54,6 +56,8 @@ import vip.xiaonuo.coldchain.modular.monitortargetregion.entity.MonitorTargetReg
 import vip.xiaonuo.coldchain.modular.monitortargetregion.service.MonitorTargetRegionService;
 import vip.xiaonuo.common.enums.CommonDeleteFlagEnum;
 import vip.xiaonuo.common.exception.CommonException;
+import vip.xiaonuo.dev.modular.config.entity.DevConfig;
+import vip.xiaonuo.dev.modular.config.service.DevConfigService;
 
 import java.io.*;
 import java.math.RoundingMode;
@@ -83,6 +87,8 @@ public class AppDeviceService {
     private final MonitorTargetRegionService monitorTargetRegionService;
     private final JfcloudSensorDataService jfcloudSensorDataService;
     private final MonitorDeviceService monitorDeviceService;
+    @Resource
+    DevConfigService devConfigService;
 
     // 模拟设备保存操作,实际应用中可能会是数据库操作
     public boolean addDevice(AppDeviceAddParam device) {
@@ -533,10 +539,12 @@ public class AppDeviceService {
     public void export(HttpServletResponse response, AppTrendParam trendParam, MultipartFile file) {
         // 初始化配置和计时器
         TEMP_FORMAT.setRoundingMode(RoundingMode.HALF_UP);
+
+        MonitorTargetRegion monitorTargetRegion1 = monitorTargetRegionService.findOneByDeviceCodeAndSensorNo(trendParam.getSensorCode(), trendParam.getRoads());
         try {
             // 并行执行设备查询和数据查询
-            CompletableFuture<MonitorTargetRegion> regionFuture = CompletableFuture.supplyAsync(() ->
-                    monitorTargetRegionService.findOneByDeviceCodeAndSensorNo(trendParam.getSensorCode(), trendParam.getRoads()));
+            CompletableFuture<MonitorTargetRegion> regionFuture = CompletableFuture.supplyAsync(() -> monitorTargetRegion1
+            );
 
             AppDeviceQueryParams appDeviceQueryParams = BeanUtil.copyProperties(trendParam, AppDeviceQueryParams.class);
             appDeviceQueryParams.setSensorRoute(trendParam.getRoads());
@@ -771,28 +779,40 @@ public class AppDeviceService {
             Float[] co2Stats = statsMap.get("co2");
 
             if (sensorType.contains("W")) {
-                addTableRow(recordTable, "开始时间:", trendParam.getStartTime(),
-                        "最高温度:", TEMP_FORMAT.format(tempStats[0]) + "°C");
-                addTableRow(recordTable, "结束时间:", trendParam.getEndTime(),
-                        "最低温度:", TEMP_FORMAT.format(tempStats[1]) + "°C");
-                addTableRow(recordTable, "", "",
-                        "平均温度:", TEMP_FORMAT.format(tempStats[2]) + "°C");
+                String maxTemp = (tempStats != null && tempStats.length > 0 && tempStats[0] != null) ?
+                        TEMP_FORMAT.format(tempStats[0]) + "℃" : "";
+                String minTemp = (tempStats != null && tempStats.length > 1 && tempStats[1] != null) ?
+                        TEMP_FORMAT.format(tempStats[1]) + "℃" : "";
+                String avgTemp = (tempStats != null && tempStats.length > 2 && tempStats[2] != null) ?
+                        TEMP_FORMAT.format(tempStats[2]) + "℃" : "";
+
+                addTableRow(recordTable, "开始时间:", trendParam.getStartTime(), "最高温度:", maxTemp);
+                addTableRow(recordTable, "结束时间:", trendParam.getEndTime(), "最低温度:", minTemp);
+                addTableRow(recordTable, "", "", "平均温度:", avgTemp);
             }
             if (sensorType.contains("S")) {
-                addTableRow(recordTable, "开始时间:", trendParam.getStartTime(),
-                        "最高湿度:", TEMP_FORMAT.format(humStats[0]) + "%");
-                addTableRow(recordTable, "结束时间:", trendParam.getEndTime(),
-                        "最低湿度:", TEMP_FORMAT.format(humStats[1]) + "%");
-                addTableRow(recordTable, "", "",
-                        "平均湿度:", TEMP_FORMAT.format(humStats[2]) + "%");
+                String maxHum = (humStats != null && humStats.length > 0 && humStats[0] != null)
+                        ? TEMP_FORMAT.format(humStats[0]) + "%" : "";
+                String minHum = (humStats != null && humStats.length > 1 && humStats[1] != null)
+                        ? TEMP_FORMAT.format(humStats[1]) + "%" : "";
+                String avgHum = (humStats != null && humStats.length > 2 && humStats[2] != null)
+                        ? TEMP_FORMAT.format(humStats[2]) + "%" : "";
+
+                addTableRow(recordTable, "开始时间:", trendParam.getStartTime(), "最高湿度:", maxHum);
+                addTableRow(recordTable, "结束时间:", trendParam.getEndTime(), "最低湿度:", minHum);
+                addTableRow(recordTable, "", "", "平均湿度:", avgHum);
             }
             if (sensorType.contains("C")) {
-                addTableRow(recordTable, "开始时间:", trendParam.getStartTime(),
-                        "最高Co2浓度:", TEMP_FORMAT.format(co2Stats[0]) + "ppm");
-                addTableRow(recordTable, "结束时间:", trendParam.getEndTime(),
-                        "最低Co2浓度:", TEMP_FORMAT.format(co2Stats[1]) + "ppm");
-                addTableRow(recordTable, "", "",
-                        "平均Co2浓度:", TEMP_FORMAT.format(co2Stats[2]) + "ppm");
+                String maxCo2 = (co2Stats != null && co2Stats.length > 0 && co2Stats[0] != null)
+                        ? TEMP_FORMAT.format(co2Stats[0]) + "ppm" : "";
+                String minCo2 = (co2Stats != null && co2Stats.length > 1 && co2Stats[1] != null)
+                        ? TEMP_FORMAT.format(co2Stats[1]) + "ppm" : "";
+                String avgCo2 = (co2Stats != null && co2Stats.length > 2 && co2Stats[2] != null)
+                        ? TEMP_FORMAT.format(co2Stats[2]) + "ppm" : "";
+
+                addTableRow(recordTable, "开始时间:", trendParam.getStartTime(), "最高CO₂浓度:", maxCo2);
+                addTableRow(recordTable, "结束时间:", trendParam.getEndTime(), "最低CO₂浓度:", minCo2);
+                addTableRow(recordTable, "", "", "平均CO₂浓度:", avgCo2);
             }
             recordTable.setMarginBottom(10);
             elements.add(recordTable);
@@ -985,4 +1005,32 @@ public class AppDeviceService {
             default -> time;
         };
     }
+
+    public AppInfo getAppInfo() {
+        List<DevConfig> devConfigs = devConfigService.sysBaseList();
+        AppInfo appInfo = new AppInfo();
+        for (DevConfig devConfig : devConfigs) {
+            switch (devConfig.getConfigKey()) {
+                case "SNOWY_SYS_LOGO":
+                    appInfo.setSysIcon(devConfig.getConfigValue());
+                    break;
+                case "SNOWY_SYS_VERSION":
+                    appInfo.setSysVersion(devConfig.getConfigValue());
+                    break;
+                case "SNOWY_SYS_COPYRIGHT":
+                    appInfo.setCopyright(devConfig.getConfigValue());
+                    break;
+                case "SNOWY_SYS_COPYRIGHT_URL":
+                    appInfo.setOfficialWebsite(devConfig.getConfigValue());
+                    break;
+                case "SNOWY_SYS_DEFAULT_DESCRRIPTION":
+                    appInfo.setSysIntro(devConfig.getConfigValue());
+                    break;
+                case "SNOWY_SYS_COPYRIGHT_NO":
+                    appInfo.setCopyRightNo(devConfig.getConfigValue());
+                    break;
+            }
+        }
+        return appInfo;
+    }
 }

+ 3 - 3
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/controller/MonitorDeviceController.java

@@ -132,8 +132,8 @@ public class MonitorDeviceController {
     @Operation(summary = "获取监控设备列表")
     @SaCheckPermission("/coldchain/monitordevice/list")
     @GetMapping("/coldchain/monitordevice/list")
-    public CommonResult<List<MonitorDevice>> list(Boolean isAll,String sensorType) {
-        return CommonResult.data(monitorDeviceService.myList(isAll,sensorType));
+    public CommonResult<List<MonitorDevice>> list(Boolean isAll,String sensorType,String deviceId) {
+        return CommonResult.data(monitorDeviceService.myList(isAll,sensorType,deviceId));
     }
 
     /**
@@ -145,7 +145,7 @@ public class MonitorDeviceController {
     @SaCheckPermission("/coldchain/monitordevice/list")
     @GetMapping("/api/coldchain/monitordevice/list")
     public CommonResult<List<MonitorDevice>> appList(Boolean isAll,String sensorType) {
-        return CommonResult.data(monitorDeviceService.myList(isAll,sensorType));
+        return CommonResult.data(monitorDeviceService.myList(isAll,sensorType,null));
     }
 
     /**

+ 1 - 1
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/service/MonitorDeviceService.java

@@ -107,7 +107,7 @@ public interface MonitorDeviceService extends IService<MonitorDevice> {
 
     List<SensorData> querySensorData(String deviceId, int roads, Instant startTime, Instant endTime, List<QueryCondition> queryConditions);
 
-    List<MonitorDevice> myList(Boolean isAll,String sensorType);
+    List<MonitorDevice> myList(Boolean isAll,String sensorType,String deviceId);
 
     boolean getByDeviceName(String deviceName);
 

+ 4 - 1
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/service/impl/MonitorDeviceServiceImpl.java

@@ -336,7 +336,7 @@ public class MonitorDeviceServiceImpl extends ServiceImpl<MonitorDeviceMapper, M
 
 
     @Override
-    public List<MonitorDevice> myList(Boolean isAll, String sensorType) {
+    public List<MonitorDevice> myList(Boolean isAll, String sensorType,String deviceId) {
         SaBaseLoginUser loginUser = StpLoginUserUtil.getLoginUser();
 
         //查询设备类型
@@ -369,6 +369,9 @@ public class MonitorDeviceServiceImpl extends ServiceImpl<MonitorDeviceMapper, M
             }
             newMonitorDeviceList.add(monitorDevice);
         }
+        if (StrUtil.isNotBlank(deviceId)) {
+            newMonitorDeviceList.add(getById(deviceId));
+        }
         return newMonitorDeviceList;
     }
 

+ 1 - 1
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/targetroom/param/TargetRoomAddParam.java

@@ -35,7 +35,7 @@ public class TargetRoomAddParam {
 
     /** 房间名 */
     @Schema(description = "房间名")
-    @Length(min = 1, max = 10)
+    @Length(min = 1, max = 20)
     private String name;
 
     /** 背景图 */

+ 1 - 1
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/targetroom/param/TargetRoomEditParam.java

@@ -40,7 +40,7 @@ public class TargetRoomEditParam {
 
     /** 房间名 */
     @Schema(description = "房间名")
-    @Length(min = 1, max = 10)
+    @Length(min = 1, max = 20)
     private String name;
 
     /** 背景图 */

+ 1 - 1
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/targetroom/service/impl/TargetRoomServiceImpl.java

@@ -86,7 +86,7 @@ public class TargetRoomServiceImpl extends ServiceImpl<TargetRoomMapper, TargetR
     @Override
     public void edit(TargetRoomEditParam targetRoomEditParam) {
         TargetRoom targetRoom = this.queryEntity(targetRoomEditParam.getId());
-        if (ifRoomExist(targetRoomEditParam.getName())) {
+        if (ifRoomExist(targetRoomEditParam.getName()) && !targetRoom.getName().equals(targetRoomEditParam.getName())) {
             throw new CommonException("该房间名已存在!请重新输入");
         }
         BeanUtil.copyProperties(targetRoomEditParam, targetRoom);

+ 5 - 0
snowy-web-app/pom.xml

@@ -148,6 +148,11 @@
             <artifactId>itext-asian</artifactId>
             <version>5.2.0</version>
         </dependency>
+        <dependency>
+            <groupId>com.github.binarywang</groupId>
+            <artifactId>weixin-java-miniapp</artifactId>
+            <version>4.6.0</version>
+        </dependency>
     </dependencies>
 
     <build>

+ 1 - 1
snowy-web-app/src/main/resources/logback-spring.xml

@@ -107,7 +107,7 @@
         </appender>
 
         <!--记录到文件时,记录两类一类是error日志,一个是所有日志-->
-        <root level="WARN">
+        <root level="info">
             <appender-ref ref="STDOUT"/>
             <appender-ref ref="FILE_ERROR"/>
             <appender-ref ref="FILE_ALL"/>