Browse Source

feat:增加获取报警次数最多的十条记录

陈长荣 4 months ago
parent
commit
9b9e7f0f2d

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

@@ -1,7 +1,11 @@
 package vip.xiaonuo.coldchain.core.alarm.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
 import vip.xiaonuo.coldchain.core.alarm.bean.SensorAlarm;
+import vip.xiaonuo.coldchain.modular.monitorsearchhistory.dto.TopWarningDto;
+
+import java.util.List;
 
 /**
  * @author jackzhou
@@ -11,4 +15,9 @@ import vip.xiaonuo.coldchain.core.alarm.bean.SensorAlarm;
  * @date 2024/11/26
  */
 public interface SensorAlarmMapper extends BaseMapper<SensorAlarm> {
+
+    /**
+     * 获取报警次数最多的十条记录
+     */
+    List<TopWarningDto> getTop10Warning(@Param("month") String month, @Param("types") List<String> types);
 }

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

@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="vip.xiaonuo.coldchain.core.alarm.mapper.SensorAlarmMapper">
+
+  <select id="getTop10Warning" resultType="vip.xiaonuo.coldchain.modular.monitorsearchhistory.dto.TopWarningDto">
+    SELECT
+    *
+    FROM
+      (SELECT
+        COUNT(*) AS totalWarnings,
+        device_id as deviceId,
+        device_name as deviceName,
+        sensor_code as sensorCode,
+        sensor_route as sensorRoute
+      FROM sensor_alarm
+      WHERE delete_flag = 'NOT_DELETE'
+      AND type in
+      <foreach collection="types" item="type" open="(" separator="," close=")">
+        #{type}
+      </foreach>
+      <if test="month != null">
+        AND alarm_time LIKE concat(#{month}, '%')
+      </if>
+      GROUP BY device_id , sensor_route) tmp
+    ORDER BY tmp.totalWarnings DESC
+    limit 10
+  </select>
+</mapper>

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

@@ -7,6 +7,7 @@ import vip.xiaonuo.coldchain.core.alarm.enums.SensorAlarmType;
 import vip.xiaonuo.coldchain.modular.app.param.Message;
 import vip.xiaonuo.coldchain.modular.app.param.MessagePageParam;
 import vip.xiaonuo.coldchain.modular.monitornotice.param.MonitorNoticePageParam;
+import vip.xiaonuo.coldchain.modular.monitorsearchhistory.dto.TopWarningDto;
 
 import java.util.List;
 
@@ -25,4 +26,13 @@ public interface SensorAlarmService extends IService<SensorAlarm> {
     long countAlarms(String startDate, String endDate, String sensorCode, String sensorRoute, SensorAlarmType type);
 
     List<String> getAlarmTypeList(String type);
+
+    /**
+     * 获取报警次数最多的十条记录
+     *
+     * @param month 查询的月份
+     * @param types 报警类型
+     * @return
+     */
+    List<TopWarningDto> topWarning(String month, List<String> types);
 }

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

@@ -20,6 +20,7 @@ import vip.xiaonuo.coldchain.modular.app.param.Message;
 import vip.xiaonuo.coldchain.modular.app.param.MessagePageParam;
 import vip.xiaonuo.coldchain.modular.app.param.MessageType;
 import vip.xiaonuo.coldchain.modular.monitornotice.param.MonitorNoticePageParam;
+import vip.xiaonuo.coldchain.modular.monitorsearchhistory.dto.TopWarningDto;
 import vip.xiaonuo.common.enums.CommonDeleteFlagEnum;
 import vip.xiaonuo.common.page.CommonPageRequest;
 
@@ -111,6 +112,11 @@ public class SensorAlarmServiceImpl extends ServiceImpl<SensorAlarmMapper, Senso
         return list(queryWrapper).stream().map(SensorAlarm::getAlarmType).collect(Collectors.toList());
     }
 
+    @Override
+    public List<TopWarningDto> topWarning(String month, List<String> types) {
+        return getBaseMapper().getTop10Warning(month, types);
+    }
+
     public Page<SensorAlarm> getSensorAlarmPage(MessagePageParam messagePageParam) {
         // 创建查询条件
         QueryWrapper<SensorAlarm> queryWrapper = new QueryWrapper<SensorAlarm>().checkSqlInjection();

+ 23 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitorsearchhistory/dto/TopWarningDto.java

@@ -0,0 +1,23 @@
+package vip.xiaonuo.coldchain.modular.monitorsearchhistory.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Data
+public class TopWarningDto {
+
+    @Schema(description = "预警总数")
+    private long totalWarnings;
+
+    @Schema(description = "设备ID,指示告警是由哪个设备触发的")
+    private String deviceId;
+
+    @Schema(description = "设备名称,给出触发告警的设备的名称(可选)")
+    private String deviceName;
+
+    @Schema(description = "设备序列号")
+    private String sensorCode;
+
+    @Schema(description = "传感器路数")
+    private Integer sensorRoute;
+}

+ 17 - 1
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitorsearchhistory/entity/SearchHistoryController.java

@@ -1,6 +1,6 @@
 package vip.xiaonuo.coldchain.modular.monitorsearchhistory.entity;
 
-import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.alibaba.fastjson.JSONObject;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import jakarta.annotation.Resource;
@@ -8,6 +8,8 @@ import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
+import vip.xiaonuo.coldchain.core.alarm.enums.SensorAlarmType;
+import vip.xiaonuo.coldchain.core.alarm.service.SensorAlarmService;
 import vip.xiaonuo.coldchain.modular.monitorsearchhistory.controller.SearchHistory;
 import vip.xiaonuo.coldchain.modular.monitorsearchhistory.param.SearchHistoryAddParam;
 import vip.xiaonuo.coldchain.modular.monitorsearchhistory.param.SearchHistoryIdParam;
@@ -27,6 +29,8 @@ import java.util.List;
 public class SearchHistoryController {
     @Resource
     private SearchHistoryService searchHistoryService;
+    @Resource
+    private SensorAlarmService sensorAlarmService;
 
     /**
      * 获取最新十条搜索记录
@@ -37,6 +41,18 @@ public class SearchHistoryController {
         return CommonResult.data(searchHistoryService.getSearchHistory());
     }
 
+    /**
+     * 获取报警次数最多的十条记录
+     */
+    @Operation(summary = "获取报警次数最多的十条记录")
+    @GetMapping("/coldchain/searchhistory/topWarning")
+    public CommonResult<JSONObject> topWarning(@RequestParam(value = "month", required = false) String month) {
+        JSONObject obj = new JSONObject()
+                .fluentPut("warning", sensorAlarmService.topWarning(month, List.of(SensorAlarmType.DATA_ALARM.getDeviceCode(), SensorAlarmType.DATA_RESTORE_ALARM.getDeviceCode())))
+                .fluentPut("abnormal", sensorAlarmService.topWarning(month, List.of(SensorAlarmType.SENSOR_OFF_LINE.getDeviceCode(), SensorAlarmType.SENSOR_ON_LINE.getDeviceCode())));
+        return CommonResult.data(obj);
+    }
+
     /**
      * 新增搜索记录
      */