Преглед изворни кода

feat(alarm): 添加报警数据管理功能

- 新增AlarmData实体类,包含设备信息、报警状态、时间和阈值字段
- 实现报警数据的增删改查接口,支持分页查询和条件筛选
- 集成MyBatis-Plus实现数据库操作和分页功能
- 添加报警处理功能,支持设置处理时间和处理人
- 实现批量删除报警数据功能
- 添加报警测试控制器,支持模拟井盖、可燃气体和环境设备报警
- 在各子服务中集成报警工具类,实现实时报警检测和记录
- 提供自定义报警测试接口,便于调试和验证报警逻辑
林仔 пре 2 месеци
родитељ
комит
a4595c6684

+ 52 - 0
environment-service/src/main/java/com/zksy/environment/utils/AlarmUtil.java

@@ -0,0 +1,52 @@
+package com.zksy.environment.utils;
+
+import com.zksy.api.domain.AlarmData;
+import com.zksy.api.service.AlarmDataService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Component
+public class AlarmUtil {
+
+    @Autowired
+    private AlarmDataService alarmDataService;
+
+    public void checkAndSaveAlarm(String deviceName, String deviceCode, String deviceType,
+                                    String warningType, String warningCode, Double warningValue,
+                                    BigDecimal actualValue, String remark) {
+        if (warningValue == null || actualValue == null) {
+            return;
+        }
+
+        if (actualValue.doubleValue() > warningValue) {
+            saveAlarm(deviceName, deviceCode, deviceType, warningType, warningCode,
+                    BigDecimal.valueOf(warningValue), actualValue, remark);
+        }
+    }
+
+    public void saveAlarm(String deviceName, String deviceCode, String deviceType,
+                           String warningType, String warningCode, BigDecimal warningValue,
+                           BigDecimal actualValue, String remark) {
+        try {
+            AlarmData alarmData = new AlarmData();
+            alarmData.setDeviceName(deviceName);
+            alarmData.setDeviceCode(deviceCode);
+            alarmData.setDeviceType(deviceType);
+            alarmData.setWarningType(warningType);
+            alarmData.setWarningCode(warningCode);
+            alarmData.setWarningValue(warningValue);
+            alarmData.setActualValue(actualValue);
+            alarmData.setAlarmStatus(0);
+            alarmData.setAlarmTime(LocalDateTime.now());
+            alarmData.setRemark(remark);
+            alarmData.setCreateTime(LocalDateTime.now());
+
+            alarmDataService.saveAlarmData(alarmData);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+}

+ 52 - 0
flammable-gas-service/src/main/java/com/zksy/gas/utils/AlarmUtil.java

@@ -0,0 +1,52 @@
+package com.zksy.gas.utils;
+
+import com.zksy.api.domain.AlarmData;
+import com.zksy.api.service.AlarmDataService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Component
+public class AlarmUtil {
+
+    @Autowired
+    private AlarmDataService alarmDataService;
+
+    public void checkAndSaveAlarm(String deviceName, String deviceCode, String deviceType,
+                                    String warningType, String warningCode, Double warningValue,
+                                    BigDecimal actualValue, String remark) {
+        if (warningValue == null || actualValue == null) {
+            return;
+        }
+
+        if (actualValue.doubleValue() > warningValue) {
+            saveAlarm(deviceName, deviceCode, deviceType, warningType, warningCode,
+                    BigDecimal.valueOf(warningValue), actualValue, remark);
+        }
+    }
+
+    public void saveAlarm(String deviceName, String deviceCode, String deviceType,
+                           String warningType, String warningCode, BigDecimal warningValue,
+                           BigDecimal actualValue, String remark) {
+        try {
+            AlarmData alarmData = new AlarmData();
+            alarmData.setDeviceName(deviceName);
+            alarmData.setDeviceCode(deviceCode);
+            alarmData.setDeviceType(deviceType);
+            alarmData.setWarningType(warningType);
+            alarmData.setWarningCode(warningCode);
+            alarmData.setWarningValue(warningValue);
+            alarmData.setActualValue(actualValue);
+            alarmData.setAlarmStatus(0);
+            alarmData.setAlarmTime(LocalDateTime.now());
+            alarmData.setRemark(remark);
+            alarmData.setCreateTime(LocalDateTime.now());
+
+            alarmDataService.saveAlarmData(alarmData);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+}

+ 65 - 0
manhole-service/src/main/java/com/zksy/manhole/utils/AlarmUtil.java

@@ -0,0 +1,65 @@
+package com.zksy.manhole.utils;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.zksy.common.utils.AjaxResult;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.HashMap;
+import java.util.Map;
+
+@Component
+public class AlarmUtil {
+
+    @Autowired
+    private RestTemplate restTemplate;
+
+    @Value("${alarm.api.url:http://zk-api-service/alarmData/save}")
+    private String alarmApiUrl;
+
+    public void checkAndSaveAlarm(String deviceName, String deviceCode, String deviceType,
+                                    String warningType, String warningCode, Double warningValue,
+                                    BigDecimal actualValue, String remark) {
+        if (warningValue == null || actualValue == null) {
+            return;
+        }
+
+        if (actualValue.doubleValue() > warningValue) {
+            saveAlarm(deviceName, deviceCode, deviceType, warningType, warningCode,
+                    BigDecimal.valueOf(warningValue), actualValue, remark);
+        }
+    }
+
+    public void saveAlarm(String deviceName, String deviceCode, String deviceType,
+                           String warningType, String warningCode, BigDecimal warningValue,
+                           BigDecimal actualValue, String remark) {
+        try {
+            Map<String, Object> alarmData = new HashMap<>();
+            alarmData.put("deviceName", deviceName);
+            alarmData.put("deviceCode", deviceCode);
+            alarmData.put("deviceType", deviceType);
+            alarmData.put("warningType", warningType);
+            alarmData.put("warningCode", warningCode);
+            alarmData.put("warningValue", warningValue);
+            alarmData.put("actualValue", actualValue);
+            alarmData.put("alarmStatus", 0);
+            alarmData.put("alarmTime", LocalDateTime.now().toString());
+            alarmData.put("remark", remark);
+
+            HttpHeaders headers = new HttpHeaders();
+            headers.setContentType(MediaType.APPLICATION_JSON);
+            HttpEntity<Map<String, Object>> request = new HttpEntity<>(alarmData, headers);
+
+            restTemplate.postForObject(alarmApiUrl, request, AjaxResult.class);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+}

+ 80 - 0
pipe-network-service/zksy-admin/src/main/java/com/zksy/web/controller/base/alarm/AlarmDataController.java

@@ -0,0 +1,80 @@
+package com.zksy.web.controller.base.alarm;
+
+import com.zksy.base.alarm.domain.AlarmData;
+import com.zksy.base.alarm.service.AlarmDataService;
+import com.zksy.common.annotation.Anonymous;
+import com.zksy.common.core.domain.AjaxResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.time.LocalDateTime;
+import java.util.Arrays;
+
+@RestController
+@RequestMapping("/alarmData")
+@Api(tags = "报警数据信息", description = "报警数据信息desc")
+public class AlarmDataController {
+    @Autowired
+    private AlarmDataService service;
+
+    @GetMapping("/findByPage")
+    @ApiOperation(value = "报警数据信息查询分页")
+    @Anonymous
+    public AjaxResult findByPage(@ApiParam(value = "页码", required = true) long pageNum,
+                                 @ApiParam(value = "页数", required = true) long pageSize,
+                                 @ApiParam(value = "设备名称", required = false) String deviceName,
+                                 @ApiParam(value = "设备编码", required = false) String deviceCode,
+                                 @ApiParam(value = "预警类型", required = false) String warningType,
+                                 @ApiParam(value = "预警编码", required = false) String warningCode,
+                                 @ApiParam(value = "报警状态 0-未处理 1-已处理", required = false) Integer alarmStatus) {
+        return AjaxResult.success(service.findByPage(pageNum, pageSize, deviceName, deviceCode, warningType, warningCode, alarmStatus));
+    }
+
+    @GetMapping("/getAlarmDataList")
+    @ApiOperation(value = "报警数据信息查询")
+    @Anonymous
+    public AjaxResult getAlarmDataList(@ApiParam(value = "设备名称", required = false) String deviceName,
+                                         @ApiParam(value = "设备编码", required = false) String deviceCode,
+                                         @ApiParam(value = "预警类型", required = false) String warningType,
+                                         @ApiParam(value = "预警编码", required = false) String warningCode,
+                                         @ApiParam(value = "报警状态 0-未处理 1-已处理", required = false) Integer alarmStatus) {
+        return AjaxResult.success(service.getAlarmDataList(deviceName, deviceCode, warningType, warningCode, alarmStatus));
+    }
+
+    @GetMapping("/getById/{id}")
+    @ApiOperation(value = "根据Id查询报警数据信息")
+    public AjaxResult getById(@PathVariable String id) {
+        return AjaxResult.success(service.getById(id));
+    }
+
+    @PostMapping("/save")
+    @ApiOperation(value = "报警数据信息保存")
+    public AjaxResult save(@RequestBody AlarmData entity) {
+        return service.saveAlarmData(entity) ? AjaxResult.success(entity) : AjaxResult.error("保存失败");
+    }
+
+    @PostMapping("/update")
+    @ApiOperation(value = "报警数据信息修改")
+    public AjaxResult update(@RequestBody AlarmData entity) {
+        entity.setUpdateTime(LocalDateTime.now());
+        return service.updateById(entity) ? AjaxResult.success(entity) : AjaxResult.error("修改失败");
+    }
+
+    @PostMapping("/handle")
+    @ApiOperation(value = "处理报警")
+    public AjaxResult handle(@RequestBody AlarmData entity) {
+        entity.setAlarmStatus(1);
+        entity.setHandleTime(LocalDateTime.now());
+        entity.setUpdateTime(LocalDateTime.now());
+        return service.updateById(entity) ? AjaxResult.success(entity) : AjaxResult.error("处理失败");
+    }
+
+    @PostMapping("/deleteBatch")
+    @ApiOperation(value = "报警数据信息删除")
+    public AjaxResult delete(@RequestBody String[] ids) {
+        return service.removeByIds(Arrays.asList(ids)) ? AjaxResult.success("删除成功") : AjaxResult.error("删除失败");
+    }
+}

+ 249 - 0
pipe-network-service/zksy-admin/src/main/java/com/zksy/web/controller/base/alarm/AlarmTestController.java

@@ -0,0 +1,249 @@
+package com.zksy.web.controller.base.alarm;
+
+import com.zksy.base.alarm.domain.AlarmData;
+import com.zksy.base.alarm.service.AlarmDataService;
+import com.zksy.common.core.domain.AjaxResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Random;
+
+@RestController
+@RequestMapping("/alarmTest")
+@Api(tags = "报警测试", description = "模拟采集数据和报警测试")
+public class AlarmTestController {
+
+    @Autowired
+    private AlarmDataService alarmDataService;
+
+    private Random random = new Random();
+
+    @GetMapping("/simulateManhole")
+    @ApiOperation(value = "模拟井盖设备采集数据并报警")
+    public AjaxResult simulateManhole() {
+        String deviceCode = "TEST-MANHOLE-001";
+        String deviceName = "测试井盖设备";
+        String deviceType = "manhole";
+
+        double temperature = 30 + random.nextDouble() * 40;
+        double tiltAngle = 0 + random.nextDouble() * 90;
+        double threshold = 60.0;
+
+        Map<String, Object> result = new HashMap<>();
+        result.put("deviceCode", deviceCode);
+        result.put("deviceName", deviceName);
+        result.put("temperature", temperature);
+        result.put("tiltAngle", tiltAngle);
+        result.put("threshold", threshold);
+
+        if (temperature > 50) {
+            AlarmData alarmData = new AlarmData();
+            alarmData.setDeviceName(deviceName);
+            alarmData.setDeviceCode(deviceCode);
+            alarmData.setDeviceType(deviceType);
+            alarmData.setWarningType("温度预警");
+            alarmData.setWarningCode("WARN-TEMPERATURE");
+            alarmData.setWarningValue(BigDecimal.valueOf(50.0));
+            alarmData.setActualValue(BigDecimal.valueOf(temperature));
+            alarmData.setAlarmStatus(0);
+            alarmData.setAlarmTime(LocalDateTime.now());
+            alarmData.setRemark("模拟井盖温度报警");
+            alarmData.setCreateTime(LocalDateTime.now());
+            alarmDataService.saveAlarmData(alarmData);
+            result.put("temperatureAlarm", true);
+        } else {
+            result.put("temperatureAlarm", false);
+        }
+
+        if (tiltAngle > threshold) {
+            AlarmData alarmData = new AlarmData();
+            alarmData.setDeviceName(deviceName);
+            alarmData.setDeviceCode(deviceCode);
+            alarmData.setDeviceType(deviceType);
+            alarmData.setWarningType("倾斜预警");
+            alarmData.setWarningCode("WARN-TILT");
+            alarmData.setWarningValue(BigDecimal.valueOf(threshold));
+            alarmData.setActualValue(BigDecimal.valueOf(tiltAngle));
+            alarmData.setAlarmStatus(0);
+            alarmData.setAlarmTime(LocalDateTime.now());
+            alarmData.setRemark("模拟井盖倾斜报警");
+            alarmData.setCreateTime(LocalDateTime.now());
+            alarmDataService.saveAlarmData(alarmData);
+            result.put("tiltAlarm", true);
+        } else {
+            result.put("tiltAlarm", false);
+        }
+
+        return AjaxResult.success(result);
+    }
+
+    @GetMapping("/simulateGas")
+    @ApiOperation(value = "模拟可燃气体设备采集数据并报警")
+    public AjaxResult simulateGas() {
+        String deviceCode = "TEST-GAS-001";
+        String deviceName = "测试可燃气体设备";
+        String deviceType = "flammable-gas";
+
+        float temperature = 20 + random.nextFloat() * 40;
+        float humidity = 40 + random.nextFloat() * 40;
+        BigDecimal gasConcentration = BigDecimal.valueOf(random.nextDouble() * 100);
+
+        Map<String, Object> result = new HashMap<>();
+        result.put("deviceCode", deviceCode);
+        result.put("deviceName", deviceName);
+        result.put("temperature", temperature);
+        result.put("humidity", humidity);
+        result.put("gasConcentration", gasConcentration);
+
+        if (temperature > 50) {
+            AlarmData alarmData = new AlarmData();
+            alarmData.setDeviceName(deviceName);
+            alarmData.setDeviceCode(deviceCode);
+            alarmData.setDeviceType(deviceType);
+            alarmData.setWarningType("温度预警");
+            alarmData.setWarningCode("WARN-TEMPERATURE");
+            alarmData.setWarningValue(BigDecimal.valueOf(50.0));
+            alarmData.setActualValue(BigDecimal.valueOf(temperature));
+            alarmData.setAlarmStatus(0);
+            alarmData.setAlarmTime(LocalDateTime.now());
+            alarmData.setRemark("模拟可燃气体温度报警");
+            alarmData.setCreateTime(LocalDateTime.now());
+            alarmDataService.saveAlarmData(alarmData);
+            result.put("temperatureAlarm", true);
+        } else {
+            result.put("temperatureAlarm", false);
+        }
+
+        if (humidity > 80) {
+            AlarmData alarmData = new AlarmData();
+            alarmData.setDeviceName(deviceName);
+            alarmData.setDeviceCode(deviceCode);
+            alarmData.setDeviceType(deviceType);
+            alarmData.setWarningType("湿度预警");
+            alarmData.setWarningCode("WARN-HUMIDITY");
+            alarmData.setWarningValue(BigDecimal.valueOf(80.0));
+            alarmData.setActualValue(BigDecimal.valueOf(humidity));
+            alarmData.setAlarmStatus(0);
+            alarmData.setAlarmTime(LocalDateTime.now());
+            alarmData.setRemark("模拟可燃气体湿度报警");
+            alarmData.setCreateTime(LocalDateTime.now());
+            alarmDataService.saveAlarmData(alarmData);
+            result.put("humidityAlarm", true);
+        } else {
+            result.put("humidityAlarm", false);
+        }
+
+        if (gasConcentration.doubleValue() > 50) {
+            AlarmData alarmData = new AlarmData();
+            alarmData.setDeviceName(deviceName);
+            alarmData.setDeviceCode(deviceCode);
+            alarmData.setDeviceType(deviceType);
+            alarmData.setWarningType("气体浓度预警");
+            alarmData.setWarningCode("WARN-GAS-CONCENTRATION");
+            alarmData.setWarningValue(BigDecimal.valueOf(50.0));
+            alarmData.setActualValue(gasConcentration);
+            alarmData.setAlarmStatus(0);
+            alarmData.setAlarmTime(LocalDateTime.now());
+            alarmData.setRemark("模拟可燃气体浓度报警");
+            alarmData.setCreateTime(LocalDateTime.now());
+            alarmDataService.saveAlarmData(alarmData);
+            result.put("gasConcentrationAlarm", true);
+        } else {
+            result.put("gasConcentrationAlarm", false);
+        }
+
+        return AjaxResult.success(result);
+    }
+
+    @GetMapping("/simulateEnvironment")
+    @ApiOperation(value = "模拟环境设备采集数据并报警")
+    public AjaxResult simulateEnvironment() {
+        String deviceCode = "TEST-ENV-001";
+        String deviceName = "测试环境设备";
+        String deviceType = "environment";
+
+        double temperature = 15 + random.nextDouble() * 50;
+        double humidity = 30 + random.nextDouble() * 60;
+
+        Map<String, Object> result = new HashMap<>();
+        result.put("deviceCode", deviceCode);
+        result.put("deviceName", deviceName);
+        result.put("temperature", temperature);
+        result.put("humidity", humidity);
+
+        if (temperature > 50) {
+            AlarmData alarmData = new AlarmData();
+            alarmData.setDeviceName(deviceName);
+            alarmData.setDeviceCode(deviceCode);
+            alarmData.setDeviceType(deviceType);
+            alarmData.setWarningType("温度预警");
+            alarmData.setWarningCode("WARN-TEMPERATURE");
+            alarmData.setWarningValue(BigDecimal.valueOf(50.0));
+            alarmData.setActualValue(BigDecimal.valueOf(temperature));
+            alarmData.setAlarmStatus(0);
+            alarmData.setAlarmTime(LocalDateTime.now());
+            alarmData.setRemark("模拟环境温度报警");
+            alarmData.setCreateTime(LocalDateTime.now());
+            alarmDataService.saveAlarmData(alarmData);
+            result.put("temperatureAlarm", true);
+        } else {
+            result.put("temperatureAlarm", false);
+        }
+
+        if (humidity > 90) {
+            AlarmData alarmData = new AlarmData();
+            alarmData.setDeviceName(deviceName);
+            alarmData.setDeviceCode(deviceCode);
+            alarmData.setDeviceType(deviceType);
+            alarmData.setWarningType("湿度预警");
+            alarmData.setWarningCode("WARN-HUMIDITY");
+            alarmData.setWarningValue(BigDecimal.valueOf(90.0));
+            alarmData.setActualValue(BigDecimal.valueOf(humidity));
+            alarmData.setAlarmStatus(0);
+            alarmData.setAlarmTime(LocalDateTime.now());
+            alarmData.setRemark("模拟环境湿度报警");
+            alarmData.setCreateTime(LocalDateTime.now());
+            alarmDataService.saveAlarmData(alarmData);
+            result.put("humidityAlarm", true);
+        } else {
+            result.put("humidityAlarm", false);
+        }
+
+        return AjaxResult.success(result);
+    }
+
+    @PostMapping("/customAlarm")
+    @ApiOperation(value = "自定义报警测试")
+    public AjaxResult customAlarm(@RequestBody Map<String, Object> params) {
+        AlarmData alarmData = new AlarmData();
+        alarmData.setDeviceName((String) params.get("deviceName"));
+        alarmData.setDeviceCode((String) params.get("deviceCode"));
+        alarmData.setDeviceType((String) params.get("deviceType"));
+        alarmData.setWarningType((String) params.get("warningType"));
+        alarmData.setWarningCode((String) params.get("warningCode"));
+        
+        Object warningValueObj = params.get("warningValue");
+        if (warningValueObj != null) {
+            alarmData.setWarningValue(new BigDecimal(warningValueObj.toString()));
+        }
+        
+        Object actualValueObj = params.get("actualValue");
+        if (actualValueObj != null) {
+            alarmData.setActualValue(new BigDecimal(actualValueObj.toString()));
+        }
+        
+        alarmData.setAlarmStatus(0);
+        alarmData.setAlarmTime(LocalDateTime.now());
+        alarmData.setRemark((String) params.getOrDefault("remark", "自定义测试报警"));
+        alarmData.setCreateTime(LocalDateTime.now());
+        
+        boolean success = alarmDataService.saveAlarmData(alarmData);
+        return success ? AjaxResult.success(alarmData) : AjaxResult.error("保存失败");
+    }
+}

+ 88 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/base/alarm/domain/AlarmData.java

@@ -0,0 +1,88 @@
+package com.zksy.base.alarm.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@TableName(value ="alarm_data")
+@Data
+public class AlarmData implements Serializable {
+    @TableId(value = "id", type = IdType.ASSIGN_UUID)
+    @ApiModelProperty(value = "主键")
+    private String id;
+
+    @TableField(value = "device_name")
+    @ApiModelProperty(value = "设备名称")
+    private String deviceName;
+
+    @TableField(value = "device_code")
+    @ApiModelProperty(value = "设备编码")
+    private String deviceCode;
+
+    @TableField(value = "device_type")
+    @ApiModelProperty(value = "设备类型")
+    private String deviceType;
+
+    @TableField(value = "warning_type")
+    @ApiModelProperty(value = "预警类型")
+    private String warningType;
+
+    @TableField(value = "warning_code")
+    @ApiModelProperty(value = "预警编码")
+    private String warningCode;
+
+    @TableField(value = "warning_value")
+    @ApiModelProperty(value = "预警阈值")
+    private BigDecimal warningValue;
+
+    @TableField(value = "actual_value")
+    @ApiModelProperty(value = "实际值")
+    private BigDecimal actualValue;
+
+    @TableField(value = "alarm_status")
+    @ApiModelProperty(value = "报警状态 0-未处理 1-已处理")
+    private Integer alarmStatus;
+
+    @TableField(value = "alarm_time")
+    @ApiModelProperty(value = "报警时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime alarmTime;
+
+    @TableField(value = "handle_time")
+    @ApiModelProperty(value = "处理时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime handleTime;
+
+    @TableField(value = "handle_user")
+    @ApiModelProperty(value = "处理人")
+    private String handleUser;
+
+    @TableField(value = "handle_remark")
+    @ApiModelProperty(value = "处理备注")
+    private String handleRemark;
+
+    @TableField(value = "remark")
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+    @TableField(value = "create_time")
+    @ApiModelProperty(value = "创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime createTime;
+
+    @TableField(value = "update_time")
+    @ApiModelProperty(value = "更新时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime updateTime;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}

+ 10 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/base/alarm/mapper/AlarmDataMapper.java

@@ -0,0 +1,10 @@
+package com.zksy.base.alarm.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zksy.base.alarm.domain.AlarmData;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface AlarmDataMapper extends BaseMapper<AlarmData> {
+
+}

+ 17 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/base/alarm/service/AlarmDataService.java

@@ -0,0 +1,17 @@
+package com.zksy.base.alarm.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zksy.base.alarm.domain.AlarmData;
+
+import java.util.List;
+
+public interface AlarmDataService extends IService<AlarmData> {
+    Page<AlarmData> findByPage(long pageNum, long pageSize, String deviceName, String deviceCode, 
+                                 String warningType, String warningCode, Integer alarmStatus);
+    
+    List<AlarmData> getAlarmDataList(String deviceName, String deviceCode, 
+                                       String warningType, String warningCode, Integer alarmStatus);
+    
+    boolean saveAlarmData(AlarmData alarmData);
+}

+ 60 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/base/alarm/service/impl/AlarmDataServiceImpl.java

@@ -0,0 +1,60 @@
+package com.zksy.base.alarm.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zksy.base.alarm.domain.AlarmData;
+import com.zksy.base.alarm.mapper.AlarmDataMapper;
+import com.zksy.base.alarm.service.AlarmDataService;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Service
+public class AlarmDataServiceImpl extends ServiceImpl<AlarmDataMapper, AlarmData>
+    implements AlarmDataService {
+
+    @Override
+    public Page<AlarmData> findByPage(long pageNum, long pageSize, String deviceName, 
+                                        String deviceCode, String warningType, String warningCode, 
+                                        Integer alarmStatus) {
+        Page<AlarmData> page = new Page<>(pageNum, pageSize);
+        LambdaQueryWrapper<AlarmData> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.like(deviceName != null, AlarmData::getDeviceName, deviceName)
+                .like(deviceCode != null, AlarmData::getDeviceCode, deviceCode)
+                .like(warningType != null, AlarmData::getWarningType, warningType)
+                .like(warningCode != null, AlarmData::getWarningCode, warningCode)
+                .eq(alarmStatus != null, AlarmData::getAlarmStatus, alarmStatus);
+        queryWrapper.orderByDesc(AlarmData::getAlarmTime);
+        return this.page(page, queryWrapper);
+    }
+
+    @Override
+    public List<AlarmData> getAlarmDataList(String deviceName, String deviceCode, 
+                                              String warningType, String warningCode, 
+                                              Integer alarmStatus) {
+        LambdaQueryWrapper<AlarmData> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.like(deviceName != null, AlarmData::getDeviceName, deviceName)
+                .like(deviceCode != null, AlarmData::getDeviceCode, deviceCode)
+                .like(warningType != null, AlarmData::getWarningType, warningType)
+                .like(warningCode != null, AlarmData::getWarningCode, warningCode)
+                .eq(alarmStatus != null, AlarmData::getAlarmStatus, alarmStatus);
+        queryWrapper.orderByDesc(AlarmData::getAlarmTime);
+        return this.list(queryWrapper);
+    }
+
+    @Override
+    public boolean saveAlarmData(AlarmData alarmData) {
+        if (alarmData.getAlarmTime() == null) {
+            alarmData.setAlarmTime(LocalDateTime.now());
+        }
+        if (alarmData.getCreateTime() == null) {
+            alarmData.setCreateTime(LocalDateTime.now());
+        }
+        if (alarmData.getAlarmStatus() == null) {
+            alarmData.setAlarmStatus(0);
+        }
+        return this.save(alarmData);
+    }
+}

+ 88 - 0
zk-api-service/src/main/java/com/zksy/api/domain/AlarmData.java

@@ -0,0 +1,88 @@
+package com.zksy.api.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@TableName(value ="alarm_data")
+@Data
+public class AlarmData implements Serializable {
+    @TableId(value = "id", type = IdType.ASSIGN_UUID)
+    @ApiModelProperty(value = "主键")
+    private String id;
+
+    @TableField(value = "device_name")
+    @ApiModelProperty(value = "设备名称")
+    private String deviceName;
+
+    @TableField(value = "device_code")
+    @ApiModelProperty(value = "设备编码")
+    private String deviceCode;
+
+    @TableField(value = "device_type")
+    @ApiModelProperty(value = "设备类型")
+    private String deviceType;
+
+    @TableField(value = "warning_type")
+    @ApiModelProperty(value = "预警类型")
+    private String warningType;
+
+    @TableField(value = "warning_code")
+    @ApiModelProperty(value = "预警编码")
+    private String warningCode;
+
+    @TableField(value = "warning_value")
+    @ApiModelProperty(value = "预警阈值")
+    private BigDecimal warningValue;
+
+    @TableField(value = "actual_value")
+    @ApiModelProperty(value = "实际值")
+    private BigDecimal actualValue;
+
+    @TableField(value = "alarm_status")
+    @ApiModelProperty(value = "报警状态 0-未处理 1-已处理")
+    private Integer alarmStatus;
+
+    @TableField(value = "alarm_time")
+    @ApiModelProperty(value = "报警时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime alarmTime;
+
+    @TableField(value = "handle_time")
+    @ApiModelProperty(value = "处理时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime handleTime;
+
+    @TableField(value = "handle_user")
+    @ApiModelProperty(value = "处理人")
+    private String handleUser;
+
+    @TableField(value = "handle_remark")
+    @ApiModelProperty(value = "处理备注")
+    private String handleRemark;
+
+    @TableField(value = "remark")
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+    @TableField(value = "create_time")
+    @ApiModelProperty(value = "创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime createTime;
+
+    @TableField(value = "update_time")
+    @ApiModelProperty(value = "更新时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime updateTime;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}

+ 8 - 0
zk-api-service/src/main/java/com/zksy/api/mapper/AlarmDataMapper.java

@@ -0,0 +1,8 @@
+package com.zksy.api.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zksy.api.domain.AlarmData;
+
+public interface AlarmDataMapper extends BaseMapper<AlarmData> {
+
+}

+ 11 - 0
zk-api-service/src/main/java/com/zksy/api/service/AlarmDataService.java

@@ -0,0 +1,11 @@
+package com.zksy.api.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zksy.api.domain.AlarmData;
+
+import java.util.List;
+
+public interface AlarmDataService extends IService<AlarmData> {
+    boolean saveAlarmData(AlarmData alarmData);
+}

+ 30 - 0
zk-api-service/src/main/java/com/zksy/api/service/impl/AlarmDataServiceImpl.java

@@ -0,0 +1,30 @@
+package com.zksy.api.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zksy.api.domain.AlarmData;
+import com.zksy.api.mapper.AlarmDataMapper;
+import com.zksy.api.service.AlarmDataService;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Service
+public class AlarmDataServiceImpl extends ServiceImpl<AlarmDataMapper, AlarmData> 
+    implements AlarmDataService {
+    @Override
+    public boolean saveAlarmData(AlarmData alarmData) {
+        if (alarmData.getAlarmTime() == null) {
+            alarmData.setAlarmTime(LocalDateTime.now());
+        }
+        if (alarmData.getCreateTime() == null) {
+            alarmData.setCreateTime(LocalDateTime.now());
+        }
+        if (alarmData.getAlarmStatus() == null) {
+            alarmData.setAlarmStatus(0);
+        }
+        return this.save(alarmData);
+    }
+}

+ 33 - 0
zk-api-service/src/main/resources/mapper/AlarmDataMapper.xml

@@ -0,0 +1,33 @@
+<?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="com.zksy.api.mapper.AlarmDataMapper">
+
+    <resultMap id="BaseResultMap" type="com.zksy.api.domain.AlarmData">
+            <id property="id" column="id" jdbcType="VARCHAR"/>
+            <result property="deviceName" column="device_name" jdbcType="VARCHAR"/>
+            <result property="deviceCode" column="device_code" jdbcType="VARCHAR"/>
+            <result property="deviceType" column="device_type" jdbcType="VARCHAR"/>
+            <result property="warningType" column="warning_type" jdbcType="VARCHAR"/>
+            <result property="warningCode" column="warning_code" jdbcType="VARCHAR"/>
+            <result property="warningValue" column="warning_value" jdbcType="DECIMAL"/>
+            <result property="actualValue" column="actual_value" jdbcType="DECIMAL"/>
+            <result property="alarmStatus" column="alarm_status" jdbcType="INTEGER"/>
+            <result property="alarmTime" column="alarm_time" jdbcType="TIMESTAMP"/>
+            <result property="handleTime" column="handle_time" jdbcType="TIMESTAMP"/>
+            <result property="handleUser" column="handle_user" jdbcType="VARCHAR"/>
+            <result property="handleRemark" column="handle_remark" jdbcType="VARCHAR"/>
+            <result property="remark" column="remark" jdbcType="VARCHAR"/>
+            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+            <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,device_name,device_code,device_type,
+        warning_type,warning_code,warning_value,
+        actual_value,alarm_status,alarm_time,
+        handle_time,handle_user,handle_remark,
+        remark,create_time,update_time
+    </sql>
+</mapper>