Browse Source

feat:路数已用完设备不显示

黄渊昊 1 week ago
parent
commit
177f7a1b50

+ 3 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/alarm/bean/DataTrendDto.java

@@ -10,6 +10,9 @@ public class DataTrendDto {
     private List<Integer> temperatureData;
     private List<Integer> temperatureData;
     private List<Integer> humidityData;
     private List<Integer> humidityData;
     private List<Integer> co2Data;
     private List<Integer> co2Data;
+    private List<Integer> temperatureDownData;
+    private List<Integer> humidityDownData;
+    private List<Integer> co2DownData;
     private List<Integer> batteryData;
     private List<Integer> batteryData;
     private List<Integer> offlineData;
     private List<Integer> offlineData;
 }
 }

+ 4 - 2
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/alarm/mapper/SensorAlarmMapper.java

@@ -46,7 +46,7 @@ public interface SensorAlarmMapper extends BaseMapper<SensorAlarm> {
                      @Param("endDate") String endDate);
                      @Param("endDate") String endDate);
 
 
     List<DataTrendMapperDto> countByType(@Param("orgId") String orgId,
     List<DataTrendMapperDto> countByType(@Param("orgId") String orgId,
-                                         @Param("alarmType") String alarmType,
+                                         @Param("alarmTypes") List<String> alarmTypes,
                                          @Param("startDate") String startDate,
                                          @Param("startDate") String startDate,
                                          @Param("endDate") String endDate);
                                          @Param("endDate") String endDate);
 
 
@@ -57,6 +57,8 @@ public interface SensorAlarmMapper extends BaseMapper<SensorAlarm> {
 
 
     Long countInPage(@Param("orgId") String orgId,
     Long countInPage(@Param("orgId") String orgId,
                      @Param("typeCodes") List<String> typeCodes,
                      @Param("typeCodes") List<String> typeCodes,
+                     @Param("alarmType") String alarmType,
                      @Param("startTime") Date startTime,
                      @Param("startTime") Date startTime,
-                     @Param("endTime") Date endTime);
+                     @Param("endTime") Date endTime,
+                     @Param("keyword") String keyword);
 }
 }

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

@@ -32,11 +32,12 @@
 
 
     <select id="countByType" resultType="vip.xiaonuo.coldchain.core.alarm.bean.DataTrendMapperDto">
     <select id="countByType" resultType="vip.xiaonuo.coldchain.core.alarm.bean.DataTrendMapperDto">
         select COUNT(*) as alarm_count, alarm_type, date (CREATE_TIME) as alarm_time
         select COUNT(*) as alarm_count, alarm_type, date (CREATE_TIME) as alarm_time
-        from sensor_alarm
+        from sensor_alarm force index(countGroupAlarmType)
         WHERE
         WHERE
-            alarm_type like CONCAT('%'
-            , #{alarmType}
-            , '%')
+            alarm_type in
+            <foreach collection="alarmTypes" item="alarmType" open="(" separator="," close=")">
+                #{alarmType}
+            </foreach>
           and DELETE_FLAG = 'NOT_DELETE'
           and DELETE_FLAG = 'NOT_DELETE'
           and CREATE_TIME >= #{startDate}
           and CREATE_TIME >= #{startDate}
           and CREATE_TIME
           and CREATE_TIME
@@ -66,11 +67,18 @@
         <foreach collection="typeCodes" item="type" open="(" separator="," close=")">
         <foreach collection="typeCodes" item="type" open="(" separator="," close=")">
             #{type}
             #{type}
         </foreach>
         </foreach>
+        <if test="alarmType != null">
+            AND alarm_type = #{alarmType}
+        </if>
         <if test="startTime != null">
         <if test="startTime != null">
             AND CREATE_TIME &gt;= #{startTime}
             AND CREATE_TIME &gt;= #{startTime}
         </if>
         </if>
         <if test="endTime != null">
         <if test="endTime != null">
             AND CREATE_TIME &lt;= #{endTime}
             AND CREATE_TIME &lt;= #{endTime}
         </if>
         </if>
+        <if test="keyword != null">
+            AND (device_name LIKE CONCAT('%', #{keyword}, '%')
+            OR message LIKE CONCAT('%', #{keyword}, '%'))
+        </if>
     </select>
     </select>
 </mapper>
 </mapper>

+ 1 - 1
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/alarm/service/SensorAlarmService.java

@@ -37,5 +37,5 @@ public interface SensorAlarmService extends IService<SensorAlarm> {
      */
      */
     List<TopWarningDto> topWarning(List<String> types);
     List<TopWarningDto> topWarning(List<String> types);
 
 
-    DataTrendDto getLastWeekDataTrend(String type);
+    DataTrendDto getLastWeekDataTrend();
 }
 }

+ 73 - 39
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/alarm/service/SensorAlarmServiceImpl.java

@@ -179,7 +179,7 @@ public class SensorAlarmServiceImpl extends ServiceImpl<SensorAlarmMapper, Senso
     }
     }
 
 
     @Override
     @Override
-    public DataTrendDto getLastWeekDataTrend(String type) {
+    public DataTrendDto getLastWeekDataTrend() {
         SaBaseLoginUser loginUser = StpLoginUserUtil.getLoginUser();
         SaBaseLoginUser loginUser = StpLoginUserUtil.getLoginUser();
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
         DataTrendDto dataTrendDto = new DataTrendDto();
         DataTrendDto dataTrendDto = new DataTrendDto();
@@ -191,21 +191,18 @@ public class SensorAlarmServiceImpl extends ServiceImpl<SensorAlarmMapper, Senso
         calendar.add(Calendar.DAY_OF_MONTH, -8);
         calendar.add(Calendar.DAY_OF_MONTH, -8);
         Date lastWeek = calendar.getTime();
         Date lastWeek = calendar.getTime();
 
 
-        String alarmKeyword = null;
-        // 查询超标或过低数据
-        if (type.equals("1")) {
-            alarmKeyword = "超标";
-        } else if (type.equals("2")) {
-            alarmKeyword = "过低";
-        } else if (type.equals("3")) {
-            alarmKeyword = "电量过低";
-        } else if (type.equals("4")) {
-            alarmKeyword = "设备离线";
-        } else {
-            throw new CommonException("type参数错误");
-        }
+        List<String> alarmTypeList = new ArrayList<>();
+        alarmTypeList.add("温度超标");
+        alarmTypeList.add("湿度超标");
+        alarmTypeList.add("二氧化碳浓度超标");
+        alarmTypeList.add("温度过低");
+        alarmTypeList.add("湿度过低");
+        alarmTypeList.add("二氧化碳浓度过低");
+        alarmTypeList.add("电量过低");
+        alarmTypeList.add("设备离线");
         List<DataTrendMapperDto> dataTrendMapperDtos = sensorAlarmMapper.countByType(
         List<DataTrendMapperDto> dataTrendMapperDtos = sensorAlarmMapper.countByType(
-                loginUser.getOrgId(), alarmKeyword, sdf.format(lastWeek), sdf.format(now));
+                loginUser.getOrgId(), alarmTypeList, sdf.format(lastWeek), sdf.format(now));
+        log.info("报警统计数据:{}", dataTrendMapperDtos);
 
 
         // 按日期分组统计数据
         // 按日期分组统计数据
         Map<String, Map<String, Integer>> dateDataMap = new LinkedHashMap<>();
         Map<String, Map<String, Integer>> dateDataMap = new LinkedHashMap<>();
@@ -221,13 +218,17 @@ public class SensorAlarmServiceImpl extends ServiceImpl<SensorAlarmMapper, Senso
             tempCal.add(Calendar.DAY_OF_MONTH, 1);
             tempCal.add(Calendar.DAY_OF_MONTH, 1);
         }
         }
 
 
-        // 填充统计数据
+        // 初始化各类型数据是否存在标志
         boolean hasTemperature = false;
         boolean hasTemperature = false;
         boolean hasHumidity = false;
         boolean hasHumidity = false;
         boolean hasCo2 = false;
         boolean hasCo2 = false;
+        boolean hasTemperatureDown = false;
+        boolean hasHumidityDown = false;
+        boolean hasCo2Down = false;
         boolean hasBattery = false;
         boolean hasBattery = false;
         boolean hasOffline = false;
         boolean hasOffline = false;
 
 
+        // 填充统计数据
         for (DataTrendMapperDto dto : dataTrendMapperDtos) {
         for (DataTrendMapperDto dto : dataTrendMapperDtos) {
             String dateKey = dto.getAlarmTime().substring(0, 10);
             String dateKey = dto.getAlarmTime().substring(0, 10);
             String alarmType = dto.getAlarmType();
             String alarmType = dto.getAlarmType();
@@ -235,21 +236,39 @@ public class SensorAlarmServiceImpl extends ServiceImpl<SensorAlarmMapper, Senso
 
 
             Map<String, Integer> typeCountMap = dateDataMap.getOrDefault(dateKey, new HashMap<>());
             Map<String, Integer> typeCountMap = dateDataMap.getOrDefault(dateKey, new HashMap<>());
 
 
-            if (alarmType.contains("温度")) {
-                typeCountMap.put("temperature", typeCountMap.getOrDefault("temperature", 0) + count);
-                hasTemperature = true;
-            } else if (alarmType.contains("湿度")) {
-                typeCountMap.put("humidity", typeCountMap.getOrDefault("humidity", 0) + count);
-                hasHumidity = true;
-            } else if (alarmType.contains("二氧化碳") || alarmType.contains("CO2")) {
-                typeCountMap.put("co2", typeCountMap.getOrDefault("co2", 0) + count);
-                hasCo2 = true;
-            } else if (alarmType.contains("电量过低")) {
-                typeCountMap.put("battery", typeCountMap.getOrDefault("battery", 0) + count);
-                hasBattery = true;
-            } else if (alarmType.contains("设备离线")) {
-                typeCountMap.put("offline", typeCountMap.getOrDefault("offline", 0) + count);
-                hasOffline = true;
+            switch (alarmType) {
+                case "温度超标":
+                    typeCountMap.put("temperature", typeCountMap.getOrDefault("temperature", 0) + count);
+                    hasTemperature = true;
+                    break;
+                case "湿度超标":
+                    typeCountMap.put("humidity", typeCountMap.getOrDefault("humidity", 0) + count);
+                    hasHumidity = true;
+                    break;
+                case "二氧化碳浓度超标":
+                    typeCountMap.put("co2", typeCountMap.getOrDefault("co2", 0) + count);
+                    hasCo2 = true;
+                    break;
+                case "温度过低":
+                    typeCountMap.put("temperatureDown", typeCountMap.getOrDefault("temperatureDown", 0) + count);
+                    hasTemperatureDown = true;
+                    break;
+                case "湿度过低":
+                    typeCountMap.put("humidityDown", typeCountMap.getOrDefault("humidityDown", 0) + count);
+                    hasHumidityDown = true;
+                    break;
+                case "二氧化碳浓度过低":
+                    typeCountMap.put("co2Down", typeCountMap.getOrDefault("co2Down", 0) + count);
+                    hasCo2Down = true;
+                    break;
+                case "电量过低":
+                    typeCountMap.put("battery", typeCountMap.getOrDefault("battery", 0) + count);
+                    hasBattery = true;
+                    break;
+                case "设备离线":
+                    typeCountMap.put("offline", typeCountMap.getOrDefault("offline", 0) + count);
+                    hasOffline = true;
+                    break;
             }
             }
 
 
             dateDataMap.put(dateKey, typeCountMap);
             dateDataMap.put(dateKey, typeCountMap);
@@ -260,8 +279,11 @@ public class SensorAlarmServiceImpl extends ServiceImpl<SensorAlarmMapper, Senso
         List<Integer> yData1 = hasTemperature ? new ArrayList<>() : Collections.emptyList();
         List<Integer> yData1 = hasTemperature ? new ArrayList<>() : Collections.emptyList();
         List<Integer> yData2 = hasHumidity ? new ArrayList<>() : Collections.emptyList();
         List<Integer> yData2 = hasHumidity ? new ArrayList<>() : Collections.emptyList();
         List<Integer> yData3 = hasCo2 ? new ArrayList<>() : Collections.emptyList();
         List<Integer> yData3 = hasCo2 ? new ArrayList<>() : Collections.emptyList();
-        List<Integer> yData4 = hasBattery ? new ArrayList<>() : Collections.emptyList();
-        List<Integer> yData5 = hasOffline ? new ArrayList<>() : Collections.emptyList();
+        List<Integer> yData4 = hasTemperatureDown ? new ArrayList<>() : Collections.emptyList();
+        List<Integer> yData5 = hasHumidityDown ? new ArrayList<>() : Collections.emptyList();
+        List<Integer> yData6 = hasCo2Down ? new ArrayList<>() : Collections.emptyList();
+        List<Integer> yData7 = hasBattery ? new ArrayList<>() : Collections.emptyList();
+        List<Integer> yData8 = hasOffline ? new ArrayList<>() : Collections.emptyList();
 
 
         // 按日期顺序填充数据
         // 按日期顺序填充数据
         for (String date : dateList) {
         for (String date : dateList) {
@@ -277,11 +299,20 @@ public class SensorAlarmServiceImpl extends ServiceImpl<SensorAlarmMapper, Senso
             if (hasCo2) {
             if (hasCo2) {
                 yData3.add(counts.getOrDefault("co2", 0));
                 yData3.add(counts.getOrDefault("co2", 0));
             }
             }
+            if (hasTemperatureDown) {
+                yData4.add(counts.getOrDefault("temperatureDown", 0));
+            }
+            if (hasHumidityDown) {
+                yData5.add(counts.getOrDefault("humidityDown", 0));
+            }
+            if (hasCo2Down) {
+                yData6.add(counts.getOrDefault("co2Down", 0));
+            }
             if (hasBattery) {
             if (hasBattery) {
-                yData4.add(counts.getOrDefault("battery", 0));
+                yData7.add(counts.getOrDefault("battery", 0));
             }
             }
             if (hasOffline) {
             if (hasOffline) {
-                yData5.add(counts.getOrDefault("offline", 0));
+                yData8.add(counts.getOrDefault("offline", 0));
             }
             }
         }
         }
 
 
@@ -290,8 +321,11 @@ public class SensorAlarmServiceImpl extends ServiceImpl<SensorAlarmMapper, Senso
         dataTrendDto.setTemperatureData(yData1);
         dataTrendDto.setTemperatureData(yData1);
         dataTrendDto.setHumidityData(yData2);
         dataTrendDto.setHumidityData(yData2);
         dataTrendDto.setCo2Data(yData3);
         dataTrendDto.setCo2Data(yData3);
-        dataTrendDto.setBatteryData(yData4);
-        dataTrendDto.setOfflineData(yData5);
+        dataTrendDto.setTemperatureDownData(yData4);
+        dataTrendDto.setHumidityDownData(yData5);
+        dataTrendDto.setCo2DownData(yData6);
+        dataTrendDto.setBatteryData(yData7);
+        dataTrendDto.setOfflineData(yData8);
 
 
         return dataTrendDto;
         return dataTrendDto;
     }
     }
@@ -354,10 +388,10 @@ public class SensorAlarmServiceImpl extends ServiceImpl<SensorAlarmMapper, Senso
                 ? DateUtil.parse(messagePageParam.getEndTime(), "yyyy-MM-dd HH:mm:ss")
                 ? DateUtil.parse(messagePageParam.getEndTime(), "yyyy-MM-dd HH:mm:ss")
                 : null;
                 : null;
 
 
-        long count = sensorAlarmMapper.countInPage(orgId, typeCodes, startTime, endTime);
+        long count = sensorAlarmMapper.countInPage(orgId, typeCodes, messagePageParam.getAlarmType(), startTime, endTime, messagePageParam.getKeyword());
 
 
         // 按创建时间降序排序
         // 按创建时间降序排序
-        queryWrapper.lambda().orderByDesc(SensorAlarm::getCreateTime).last("limit " + messagePageParam.getSize() * (messagePageParam.getCurrent() - 1) + "," + messagePageParam.getSize() * messagePageParam.getCurrent());
+        queryWrapper.lambda().orderByDesc(SensorAlarm::getCreateTime).last("limit " + messagePageParam.getSize() * (messagePageParam.getCurrent() - 1) + "," + messagePageParam.getSize());
 
 
 
 
         List<SensorAlarm> ids = list(queryWrapper);
         List<SensorAlarm> ids = list(queryWrapper);

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

@@ -358,7 +358,18 @@ public class MonitorDeviceServiceImpl extends ServiceImpl<MonitorDeviceMapper, M
             deviceQueryWrapper.eq(MonitorDevice::getStatus, MonitorDeviceStatusEnum.NORMAL.getValue())
             deviceQueryWrapper.eq(MonitorDevice::getStatus, MonitorDeviceStatusEnum.NORMAL.getValue())
                     .orderByAsc(MonitorDevice::getSortCode);
                     .orderByAsc(MonitorDevice::getSortCode);
         }
         }
-        return this.list(deviceQueryWrapper);
+        List<MonitorDevice> monitorDeviceList = this.list(deviceQueryWrapper);
+        List<MonitorDevice> newMonitorDeviceList = new ArrayList<>();
+        for (MonitorDevice monitorDevice : monitorDeviceList) {
+            LambdaQueryWrapper<MonitorTargetRegion> regionQueryWrapper = new LambdaQueryWrapper<>();
+            regionQueryWrapper.eq(MonitorTargetRegion::getMonitorDeviceId, monitorDevice.getId());
+            long count = monitorTargetRegionService.count(regionQueryWrapper);
+            if (count == monitorDevice.getSensorCount()) {
+                continue;
+            }
+            newMonitorDeviceList.add(monitorDevice);
+        }
+        return newMonitorDeviceList;
     }
     }
 
 
     // 通用更新方法,避免代码重复,并处理 timestamp 为空的情况
     // 通用更新方法,避免代码重复,并处理 timestamp 为空的情况

+ 3 - 3
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitorsearchhistory/controller/SearchHistoryController.java

@@ -77,9 +77,9 @@ public class SearchHistoryController {
     /**
     /**
      * 获取近七日数据预警次数趋势
      * 获取近七日数据预警次数趋势
      */
      */
-    @Operation(summary = "获取近七日数据预警次数趋势(type=1读数超标2读数过低3电量过低4设备离线)")
+    @Operation(summary = "获取近七日数据预警次数趋势")
     @GetMapping("/coldchain/monitornotice/getLastWeekDataTrend")
     @GetMapping("/coldchain/monitornotice/getLastWeekDataTrend")
-    public CommonResult<DataTrendDto> getLastWeekDataTrend(String type) {
-        return CommonResult.data(sensorAlarmService.getLastWeekDataTrend(type));
+    public CommonResult<DataTrendDto> getLastWeekDataTrend() {
+        return CommonResult.data(sensorAlarmService.getLastWeekDataTrend());
     }
     }
 }
 }

+ 1 - 1
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/param/MonitorTargetAddWithRoomParam.java

@@ -38,7 +38,7 @@ public class MonitorTargetAddWithRoomParam {
      * 名称
      * 名称
      */
      */
     @Schema(description = "名称")
     @Schema(description = "名称")
-    @Length(min = 1, max = 12)
+    @Length(min = 1, max = 22)
     private String name;
     private String name;
 
 
     /**
     /**

+ 1 - 1
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/param/MonitorTargetEditWithRoomParam.java

@@ -47,7 +47,7 @@ public class MonitorTargetEditWithRoomParam {
      * 名称
      * 名称
      */
      */
     @Schema(description = "名称")
     @Schema(description = "名称")
-    @Length(min = 1, max = 12)
+    @Length(min = 1, max = 22)
     private String name;
     private String name;
 
 
     /**
     /**