From c0ce5324f128a09e2cd42eece8c3120acea20830 Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期二, 02 六月 2026 16:51:32 +0800
Subject: [PATCH] feat(alarm): 添加报警分析评估和数据采集优化功能模块
---
src/main/java/com/ruoyi/alarm/vo/AlarmRemoveApprovalVo.java | 26
src/main/java/com/ruoyi/alarm/mapper/AlarmPointMapper.java | 9
src/main/java/com/ruoyi/alarm/vo/AlarmStepVo.java | 14
src/main/java/com/ruoyi/alarm/service/IAlarmOptimizationService.java | 36 +
src/main/java/com/ruoyi/alarm/controller/AlarmOptimizationController.java | 112 +++
src/main/java/com/ruoyi/alarm/dto/AlarmRemoveApprovalDto.java | 23
src/main/java/com/ruoyi/alarm/service/IAlarmAnalysisService.java | 29
src/main/java/com/ruoyi/alarm/vo/AlarmAnalysisVo.java | 19
src/main/java/com/ruoyi/alarm/service/IAlarmCollectionService.java | 38 +
src/main/java/com/ruoyi/alarm/mapper/AlarmRemoveApprovalMapper.java | 9
src/main/java/com/ruoyi/alarm/vo/AlarmTrendVo.java | 22
src/main/java/com/ruoyi/alarm/pojo/AlarmNuisanceStrategy.java | 57 +
src/main/java/com/ruoyi/alarm/vo/AlarmHighFreqPointVo.java | 17
src/main/java/com/ruoyi/alarm/service/impl/AlarmOptimizationServiceImpl.java | 198 ++++++
src/main/java/com/ruoyi/alarm/controller/AlarmPointLedgerController.java | 66 ++
src/main/java/com/ruoyi/alarm/dto/AlarmNuisanceStrategyDto.java | 33 +
src/main/java/com/ruoyi/alarm/mapper/AlarmCollectionInterfaceMapper.java | 9
src/main/java/com/ruoyi/alarm/vo/AlarmOptimizationStatisticsVo.java | 20
src/main/java/com/ruoyi/alarm/mapper/AlarmNuisanceStrategyMapper.java | 9
src/main/java/com/ruoyi/alarm/pojo/AlarmCollectionInterface.java | 54 +
src/main/java/com/ruoyi/alarm/service/impl/AlarmAnalysisServiceImpl.java | 171 +++++
src/main/java/com/ruoyi/alarm/vo/AlarmPointLedgerVo.java | 34 +
src/main/java/com/ruoyi/alarm/dto/AlarmCollectionInterfaceDto.java | 32 +
src/main/java/com/ruoyi/alarm/vo/AlarmStatisticsVo.java | 20
src/main/java/com/ruoyi/alarm/vo/AlarmCompareVo.java | 19
src/main/java/com/ruoyi/alarm/pojo/AlarmRemoveApproval.java | 66 ++
src/main/java/com/ruoyi/alarm/pojo/AlarmPoint.java | 60 ++
src/main/java/com/ruoyi/alarm/vo/AlarmRealtimeVo.java | 35 +
src/main/java/com/ruoyi/alarm/dto/AlarmPointDto.java | 41 +
src/main/java/com/ruoyi/alarm/controller/AlarmCollectionController.java | 67 ++
src/main/java/com/ruoyi/alarm/service/impl/AlarmCollectionServiceImpl.java | 172 +++++
src/main/java/com/ruoyi/alarm/vo/AlarmFaultDiagnosisVo.java | 23
src/main/java/com/ruoyi/alarm/vo/AlarmNuisanceStrategyVo.java | 26
src/main/java/com/ruoyi/alarm/controller/AlarmPointController.java | 28
src/main/java/com/ruoyi/alarm/pojo/AlarmRealtime.java | 60 ++
src/main/java/com/ruoyi/alarm/vo/AlarmCollectionInterfaceVo.java | 26
src/main/java/com/ruoyi/alarm/mapper/AlarmRealtimeMapper.java | 9
src/main/java/com/ruoyi/alarm/controller/AlarmAnalysisController.java | 76 ++
src/main/java/com/ruoyi/alarm/vo/AlarmTypeDistributionVo.java | 14
39 files changed, 1,779 insertions(+), 0 deletions(-)
diff --git a/src/main/java/com/ruoyi/alarm/controller/AlarmAnalysisController.java b/src/main/java/com/ruoyi/alarm/controller/AlarmAnalysisController.java
new file mode 100644
index 0000000..7b151ef
--- /dev/null
+++ b/src/main/java/com/ruoyi/alarm/controller/AlarmAnalysisController.java
@@ -0,0 +1,76 @@
+package com.ruoyi.alarm.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.alarm.service.IAlarmAnalysisService;
+import com.ruoyi.alarm.vo.*;
+import com.ruoyi.framework.aspectj.lang.annotation.Log;
+import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
+import com.ruoyi.framework.web.controller.BaseController;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+@Api(tags = "鎶ヨ鍒嗘瀽璇勪及妯″潡")
+@RestController
+@AllArgsConstructor
+@RequestMapping("/alarm/analysis")
+public class AlarmAnalysisController extends BaseController {
+
+ private IAlarmAnalysisService alarmAnalysisService;
+
+ @ApiOperation("瀹炴椂鎶ヨ缁熻")
+ @GetMapping("/realtime/stats")
+ public AjaxResult getRealtimeStats() {
+ Map<String, Object> data = alarmAnalysisService.getRealtimeStats();
+ return AjaxResult.success(data);
+ }
+
+ @ApiOperation("瀹炴椂鎶ヨ鍒楄〃")
+ @GetMapping("/realtime/list")
+ public AjaxResult getRealtimeList(Page page) {
+ IPage<AlarmRealtimeVo> result = alarmAnalysisService.getRealtimeList(page);
+ return AjaxResult.success(result);
+ }
+
+ @ApiOperation("纭鎶ヨ")
+ @Log(title = "鎶ヨ纭", businessType = BusinessType.UPDATE)
+ @PostMapping("/confirm/{alarmId}")
+ public AjaxResult confirmAlarm(@PathVariable Long alarmId) {
+ return toAjax(alarmAnalysisService.confirmAlarm(alarmId));
+ }
+
+ @ApiOperation("鍒嗘瀽鎶ヨ")
+ @GetMapping("/analyze/{alarmId}")
+ public AjaxResult analyzeAlarm(@PathVariable Long alarmId) {
+ AlarmAnalysisVo data = alarmAnalysisService.analyzeAlarm(alarmId);
+ return AjaxResult.success(data);
+ }
+
+ @ApiOperation("鎶ヨ瓒嬪娍鏁版嵁")
+ @GetMapping("/trend")
+ public AjaxResult getTrendData(@RequestParam(required = false) String startDate,
+ @RequestParam(required = false) String endDate) {
+ AlarmTrendVo data = alarmAnalysisService.getTrendData(startDate, endDate);
+ return AjaxResult.success(data);
+ }
+
+ @ApiOperation("鎶ヨ绫诲瀷鍒嗗竷")
+ @GetMapping("/type/distribution")
+ public AjaxResult getTypeDistribution() {
+ List<AlarmTypeDistributionVo> data = alarmAnalysisService.getTypeDistribution();
+ return AjaxResult.success(data);
+ }
+
+ @ApiOperation("鏁呴殰璇婃柇鍒楄〃")
+ @GetMapping("/fault/list")
+ public AjaxResult getFaultList() {
+ List<AlarmFaultDiagnosisVo> data = alarmAnalysisService.getFaultList();
+ return AjaxResult.success(data);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/alarm/controller/AlarmCollectionController.java b/src/main/java/com/ruoyi/alarm/controller/AlarmCollectionController.java
new file mode 100644
index 0000000..2ac9e0a
--- /dev/null
+++ b/src/main/java/com/ruoyi/alarm/controller/AlarmCollectionController.java
@@ -0,0 +1,67 @@
+package com.ruoyi.alarm.controller;
+
+import com.ruoyi.alarm.dto.AlarmCollectionInterfaceDto;
+import com.ruoyi.alarm.service.IAlarmCollectionService;
+import com.ruoyi.alarm.vo.AlarmCollectionInterfaceVo;
+import com.ruoyi.alarm.vo.AlarmStatisticsVo;
+import com.ruoyi.framework.aspectj.lang.annotation.Log;
+import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
+import com.ruoyi.framework.web.controller.BaseController;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@Api(tags = "鏁版嵁閲囬泦涓庤В鏋愭ā鍧�")
+@RestController
+@AllArgsConstructor
+@RequestMapping("/alarm/collection")
+public class AlarmCollectionController extends BaseController {
+
+ private IAlarmCollectionService alarmCollectionService;
+
+ @ApiOperation("閲囬泦缁熻姒傝")
+ @GetMapping("/statistics")
+ public AjaxResult getStatistics() {
+ AlarmStatisticsVo data = alarmCollectionService.getStatistics();
+ return AjaxResult.success(data);
+ }
+
+ @ApiOperation("鏁版嵁閲囬泦鎺ュ彛鍒楄〃")
+ @GetMapping("/interface/list")
+ public AjaxResult getInterfaceList() {
+ List<AlarmCollectionInterfaceVo> data = alarmCollectionService.getInterfaceList();
+ return AjaxResult.success(data);
+ }
+
+ @ApiOperation("鍚姩鏁版嵁閲囬泦")
+ @Log(title = "鏁版嵁閲囬泦鎺ュ彛", businessType = BusinessType.UPDATE)
+ @PostMapping("/interface/start/{interfaceId}")
+ public AjaxResult startInterface(@PathVariable Long interfaceId) {
+ return toAjax(alarmCollectionService.startInterface(interfaceId));
+ }
+
+ @ApiOperation("鍋滄鏁版嵁閲囬泦")
+ @Log(title = "鏁版嵁閲囬泦鎺ュ彛", businessType = BusinessType.UPDATE)
+ @PostMapping("/interface/stop/{interfaceId}")
+ public AjaxResult stopInterface(@PathVariable Long interfaceId) {
+ return toAjax(alarmCollectionService.stopInterface(interfaceId));
+ }
+
+ @ApiOperation("鏂板鎴栦慨鏀规暟鎹噰闆嗘帴鍙�")
+ @PostMapping("/interface")
+ public AjaxResult addOrUpdateInterface(@Validated @RequestBody AlarmCollectionInterfaceDto dto) {
+ return toAjax(alarmCollectionService.addOrUpdateInterface(dto));
+ }
+
+ @ApiOperation("鍒犻櫎鏁版嵁閲囬泦鎺ュ彛")
+ @Log(title = "鏁版嵁閲囬泦鎺ュ彛", businessType = BusinessType.DELETE)
+ @DeleteMapping("/interface/{interfaceId}")
+ public AjaxResult deleteInterface(@PathVariable Long interfaceId) {
+ return toAjax(alarmCollectionService.deleteInterface(interfaceId));
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/alarm/controller/AlarmOptimizationController.java b/src/main/java/com/ruoyi/alarm/controller/AlarmOptimizationController.java
new file mode 100644
index 0000000..2394a00
--- /dev/null
+++ b/src/main/java/com/ruoyi/alarm/controller/AlarmOptimizationController.java
@@ -0,0 +1,112 @@
+package com.ruoyi.alarm.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.alarm.dto.AlarmNuisanceStrategyDto;
+import com.ruoyi.alarm.dto.AlarmRemoveApprovalDto;
+import com.ruoyi.alarm.service.IAlarmOptimizationService;
+import com.ruoyi.alarm.vo.*;
+import com.ruoyi.framework.aspectj.lang.annotation.Log;
+import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
+import com.ruoyi.framework.web.controller.BaseController;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@Api(tags = "鎶ヨ浼樺寲绠$悊妯″潡")
+@RestController
+@AllArgsConstructor
+@RequestMapping("/alarm/optimization")
+public class AlarmOptimizationController extends BaseController {
+
+ private IAlarmOptimizationService alarmOptimizationService;
+
+ @ApiOperation("浼樺寲鏁堟灉缁熻")
+ @GetMapping("/statistics")
+ public AjaxResult getStatistics() {
+ AlarmOptimizationStatisticsVo data = alarmOptimizationService.getStatistics();
+ return AjaxResult.success(data);
+ }
+
+ @ApiOperation("婊嬫壈鎶ヨ绛栫暐鍒楄〃")
+ @GetMapping("/strategy/list")
+ public AjaxResult getStrategyList() {
+ List<AlarmNuisanceStrategyVo> data = alarmOptimizationService.getStrategyList();
+ return AjaxResult.success(data);
+ }
+
+ @ApiOperation("鏂板婊嬫壈鎶ヨ绛栫暐")
+ @Log(title = "婊嬫壈鎶ヨ绛栫暐", businessType = BusinessType.INSERT)
+ @PostMapping("/strategy")
+ public AjaxResult addStrategy(@Validated @RequestBody AlarmNuisanceStrategyDto dto) {
+ return toAjax(alarmOptimizationService.addStrategy(dto));
+ }
+
+ @ApiOperation("淇敼婊嬫壈鎶ヨ绛栫暐")
+ @Log(title = "婊嬫壈鎶ヨ绛栫暐", businessType = BusinessType.UPDATE)
+ @PutMapping("/strategy")
+ public AjaxResult updateStrategy(@Validated @RequestBody AlarmNuisanceStrategyDto dto) {
+ return toAjax(alarmOptimizationService.updateStrategy(dto));
+ }
+
+ @ApiOperation("鍒犻櫎婊嬫壈鎶ヨ绛栫暐")
+ @Log(title = "婊嬫壈鎶ヨ绛栫暐", businessType = BusinessType.DELETE)
+ @DeleteMapping("/strategy/{strategyId}")
+ public AjaxResult deleteStrategy(@PathVariable Long strategyId) {
+ return toAjax(alarmOptimizationService.deleteStrategy(strategyId));
+ }
+
+ @ApiOperation("淇敼绛栫暐鐘舵��")
+ @Log(title = "婊嬫壈鎶ヨ绛栫暐", businessType = BusinessType.UPDATE)
+ @PutMapping("/strategy/changeStatus")
+ public AjaxResult changeStrategyStatus(@RequestParam Long strategyId, @RequestParam Integer status) {
+ return toAjax(alarmOptimizationService.changeStrategyStatus(strategyId, status));
+ }
+
+ @ApiOperation("娌荤悊鍓嶅悗瀵规瘮鏁版嵁")
+ @GetMapping("/compare")
+ public AjaxResult getCompareData() {
+ AlarmCompareVo data = alarmOptimizationService.getCompareData();
+ return AjaxResult.success(data);
+ }
+
+ @ApiOperation("楂橀鎶ヨ鐐逛綅鍒楄〃")
+ @GetMapping("/highfreq/list")
+ public AjaxResult getHighFreqList(@RequestParam(required = false, defaultValue = "5") Integer limit) {
+ List<AlarmHighFreqPointVo> data = alarmOptimizationService.getHighFreqList(limit);
+ return AjaxResult.success(data);
+ }
+
+ @ApiOperation("鎶ヨ鍓旈櫎瀹℃壒鍒楄〃")
+ @GetMapping("/approval/list")
+ public AjaxResult getApprovalList(Page page, @RequestParam(required = false) String status) {
+ IPage<AlarmRemoveApprovalVo> result = alarmOptimizationService.getApprovalList(page, status);
+ return AjaxResult.success(result);
+ }
+
+ @ApiOperation("鎻愪氦鍓旈櫎鐢宠")
+ @Log(title = "鎶ヨ鍓旈櫎鐢宠", businessType = BusinessType.INSERT)
+ @PostMapping("/approval")
+ public AjaxResult submitApproval(@Validated @RequestBody AlarmRemoveApprovalDto dto) {
+ return toAjax(alarmOptimizationService.submitApproval(dto));
+ }
+
+ @ApiOperation("瀹℃壒閫氳繃")
+ @Log(title = "鎶ヨ鍓旈櫎瀹℃壒", businessType = BusinessType.UPDATE)
+ @PostMapping("/approval/approve/{applyNo}")
+ public AjaxResult approveApproval(@PathVariable String applyNo) {
+ return toAjax(alarmOptimizationService.approveApproval(applyNo));
+ }
+
+ @ApiOperation("瀹℃壒椹冲洖")
+ @Log(title = "鎶ヨ鍓旈櫎瀹℃壒", businessType = BusinessType.UPDATE)
+ @PostMapping("/approval/reject/{applyNo}")
+ public AjaxResult rejectApproval(@PathVariable String applyNo) {
+ return toAjax(alarmOptimizationService.rejectApproval(applyNo));
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/alarm/controller/AlarmPointController.java b/src/main/java/com/ruoyi/alarm/controller/AlarmPointController.java
new file mode 100644
index 0000000..5efd18a
--- /dev/null
+++ b/src/main/java/com/ruoyi/alarm/controller/AlarmPointController.java
@@ -0,0 +1,28 @@
+package com.ruoyi.alarm.controller;
+
+import com.ruoyi.alarm.service.IAlarmCollectionService;
+import com.ruoyi.alarm.vo.AlarmPointLedgerVo;
+import com.ruoyi.framework.web.controller.BaseController;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@Api(tags = "鎶ヨ鐐逛綅閫夐」")
+@RestController
+@AllArgsConstructor
+@RequestMapping("/alarm/optimization/point")
+public class AlarmPointController extends BaseController {
+
+ private IAlarmCollectionService alarmCollectionService;
+
+ @ApiOperation("鎶ヨ鐐逛綅閫夐」")
+ @GetMapping("/options")
+ public AjaxResult getPointOptions() {
+ List<AlarmPointLedgerVo> data = alarmCollectionService.getPointOptions();
+ return AjaxResult.success(data);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/alarm/controller/AlarmPointLedgerController.java b/src/main/java/com/ruoyi/alarm/controller/AlarmPointLedgerController.java
new file mode 100644
index 0000000..312e643
--- /dev/null
+++ b/src/main/java/com/ruoyi/alarm/controller/AlarmPointLedgerController.java
@@ -0,0 +1,66 @@
+package com.ruoyi.alarm.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.alarm.dto.AlarmPointDto;
+import com.ruoyi.alarm.service.IAlarmCollectionService;
+import com.ruoyi.alarm.vo.AlarmPointLedgerVo;
+import com.ruoyi.framework.aspectj.lang.annotation.Log;
+import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
+import com.ruoyi.framework.web.controller.BaseController;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+@Api(tags = "鎶ヨ鐐逛綅鍙拌处绠$悊")
+@RestController
+@AllArgsConstructor
+@RequestMapping("/alarm/point/ledger")
+public class AlarmPointLedgerController extends BaseController {
+
+ private IAlarmCollectionService alarmCollectionService;
+
+ @ApiOperation("鎶ヨ鐐逛綅鍙拌处鍒楄〃")
+ @GetMapping("/list")
+ public AjaxResult getPointLedgerList(Page page, AlarmPointDto dto) {
+ IPage<AlarmPointLedgerVo> result = alarmCollectionService.getPointLedgerList(page, dto);
+ return AjaxResult.success(result);
+ }
+
+ @ApiOperation("鏂板鎶ヨ鐐逛綅")
+ @Log(title = "鎶ヨ鐐逛綅", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult addPoint(@Validated @RequestBody AlarmPointDto dto) {
+ return toAjax(alarmCollectionService.addPoint(dto));
+ }
+
+ @ApiOperation("淇敼鎶ヨ鐐逛綅")
+ @Log(title = "鎶ヨ鐐逛綅", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult updatePoint(@Validated @RequestBody AlarmPointDto dto) {
+ return toAjax(alarmCollectionService.updatePoint(dto));
+ }
+
+ @ApiOperation("鍒犻櫎鎶ヨ鐐逛綅")
+ @Log(title = "鎶ヨ鐐逛綅", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{pointId}")
+ public AjaxResult deletePoint(@PathVariable Long pointId) {
+ return toAjax(alarmCollectionService.deletePoint(pointId));
+ }
+
+ @ApiOperation("淇敼鐐逛綅鐘舵��")
+ @Log(title = "鎶ヨ鐐逛綅", businessType = BusinessType.UPDATE)
+ @PutMapping("/changeStatus")
+ public AjaxResult changePointStatus(@RequestParam Long pointId, @RequestParam Integer status) {
+ return toAjax(alarmCollectionService.changePointStatus(pointId, status));
+ }
+
+ @ApiOperation("瀵煎嚭鍙拌处鏁版嵁")
+ @GetMapping("/export")
+ public AjaxResult exportPointLedger(AlarmPointDto dto) {
+ return AjaxResult.success("瀵煎嚭鍔熻兘寰呭疄鐜�");
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/alarm/dto/AlarmCollectionInterfaceDto.java b/src/main/java/com/ruoyi/alarm/dto/AlarmCollectionInterfaceDto.java
new file mode 100644
index 0000000..c0c59f5
--- /dev/null
+++ b/src/main/java/com/ruoyi/alarm/dto/AlarmCollectionInterfaceDto.java
@@ -0,0 +1,32 @@
+package com.ruoyi.alarm.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+@Data
+public class AlarmCollectionInterfaceDto {
+
+ @ApiModelProperty(value = "鎺ュ彛ID")
+ private Long interfaceId;
+
+ @ApiModelProperty(value = "鎺ュ彛鍚嶇О")
+ @NotBlank(message = "鎺ュ彛鍚嶇О涓嶈兘涓虹┖")
+ private String interfaceName;
+
+ @ApiModelProperty(value = "鎺ュ彛绫诲瀷")
+ @NotBlank(message = "鎺ュ彛绫诲瀷涓嶈兘涓虹┖")
+ private String interfaceType;
+
+ @ApiModelProperty(value = "鏈嶅姟鍣ㄥ湴鍧�")
+ @NotBlank(message = "鏈嶅姟鍣ㄥ湴鍧�涓嶈兘涓虹┖")
+ private String serverAddress;
+
+ @ApiModelProperty(value = "閲囬泦棰戠巼")
+ @NotBlank(message = "閲囬泦棰戠巼涓嶈兘涓虹┖")
+ private String collectFreq;
+
+ @ApiModelProperty(value = "杩炴帴鐘舵��")
+ private String connectStatus;
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/alarm/dto/AlarmNuisanceStrategyDto.java b/src/main/java/com/ruoyi/alarm/dto/AlarmNuisanceStrategyDto.java
new file mode 100644
index 0000000..a0bc2d8
--- /dev/null
+++ b/src/main/java/com/ruoyi/alarm/dto/AlarmNuisanceStrategyDto.java
@@ -0,0 +1,33 @@
+package com.ruoyi.alarm.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+@Data
+public class AlarmNuisanceStrategyDto {
+
+ @ApiModelProperty(value = "绛栫暐ID")
+ private Long strategyId;
+
+ @ApiModelProperty(value = "绛栫暐鍚嶇О")
+ @NotBlank(message = "绛栫暐鍚嶇О涓嶈兘涓虹┖")
+ private String strategyName;
+
+ @ApiModelProperty(value = "绛栫暐绫诲瀷")
+ @NotBlank(message = "绛栫暐绫诲瀷涓嶈兘涓虹┖")
+ private String strategyType;
+
+ @ApiModelProperty(value = "绛栫暐璇存槑")
+ @NotBlank(message = "绛栫暐璇存槑涓嶈兘涓虹┖")
+ private String description;
+
+ @ApiModelProperty(value = "瑙勫垯閰嶇疆JSON")
+ private String ruleConfig;
+
+ @ApiModelProperty(value = "鐘舵��(1鍚敤/0鍋滅敤)")
+ @NotNull(message = "鐘舵�佷笉鑳戒负绌�")
+ private Integer status;
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/alarm/dto/AlarmPointDto.java b/src/main/java/com/ruoyi/alarm/dto/AlarmPointDto.java
new file mode 100644
index 0000000..c6e794f
--- /dev/null
+++ b/src/main/java/com/ruoyi/alarm/dto/AlarmPointDto.java
@@ -0,0 +1,41 @@
+package com.ruoyi.alarm.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+@Data
+public class AlarmPointDto {
+
+ @ApiModelProperty(value = "鐐逛綅ID")
+ private Long pointId;
+
+ @ApiModelProperty(value = "鐐逛綅缂栫爜")
+ @NotBlank(message = "鐐逛綅缂栫爜涓嶈兘涓虹┖")
+ private String pointCode;
+
+ @ApiModelProperty(value = "鐐逛綅鍚嶇О")
+ @NotBlank(message = "鐐逛綅鍚嶇О涓嶈兘涓虹┖")
+ private String pointName;
+
+ @ApiModelProperty(value = "璁惧绫诲瀷")
+ @NotBlank(message = "璁惧绫诲瀷涓嶈兘涓虹┖")
+ private String deviceType;
+
+ @ApiModelProperty(value = "鎶ヨ绾у埆")
+ @NotBlank(message = "鎶ヨ绾у埆涓嶈兘涓虹┖")
+ private String alarmLevel;
+
+ @ApiModelProperty(value = "鎶ヨ闃堝��")
+ @NotBlank(message = "鎶ヨ闃堝�间笉鑳戒负绌�")
+ private String thresholdValue;
+
+ @ApiModelProperty(value = "鎵�灞炲尯鍩�")
+ private String area;
+
+ @ApiModelProperty(value = "鐘舵��(1鍚敤/0鍋滅敤)")
+ @NotNull(message = "鐘舵�佷笉鑳戒负绌�")
+ private Integer status;
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/alarm/dto/AlarmRemoveApprovalDto.java b/src/main/java/com/ruoyi/alarm/dto/AlarmRemoveApprovalDto.java
new file mode 100644
index 0000000..01a762f
--- /dev/null
+++ b/src/main/java/com/ruoyi/alarm/dto/AlarmRemoveApprovalDto.java
@@ -0,0 +1,23 @@
+package com.ruoyi.alarm.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+@Data
+public class AlarmRemoveApprovalDto {
+
+ @ApiModelProperty(value = "鐐逛綅ID")
+ @NotNull(message = "鐐逛綅ID涓嶈兘涓虹┖")
+ private Long pointId;
+
+ @ApiModelProperty(value = "鍓旈櫎鍘熷洜")
+ @NotBlank(message = "鍓旈櫎鍘熷洜涓嶈兘涓虹┖")
+ private String removeReason;
+
+ @ApiModelProperty(value = "璇︾粏璇存槑")
+ @NotBlank(message = "璇︾粏璇存槑涓嶈兘涓虹┖")
+ private String description;
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/alarm/mapper/AlarmCollectionInterfaceMapper.java b/src/main/java/com/ruoyi/alarm/mapper/AlarmCollectionInterfaceMapper.java
new file mode 100644
index 0000000..64d021d
--- /dev/null
+++ b/src/main/java/com/ruoyi/alarm/mapper/AlarmCollectionInterfaceMapper.java
@@ -0,0 +1,9 @@
+package com.ruoyi.alarm.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.alarm.pojo.AlarmCollectionInterface;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface AlarmCollectionInterfaceMapper extends BaseMapper<AlarmCollectionInterface> {
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/alarm/mapper/AlarmNuisanceStrategyMapper.java b/src/main/java/com/ruoyi/alarm/mapper/AlarmNuisanceStrategyMapper.java
new file mode 100644
index 0000000..a1c7654
--- /dev/null
+++ b/src/main/java/com/ruoyi/alarm/mapper/AlarmNuisanceStrategyMapper.java
@@ -0,0 +1,9 @@
+package com.ruoyi.alarm.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.alarm.pojo.AlarmNuisanceStrategy;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface AlarmNuisanceStrategyMapper extends BaseMapper<AlarmNuisanceStrategy> {
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/alarm/mapper/AlarmPointMapper.java b/src/main/java/com/ruoyi/alarm/mapper/AlarmPointMapper.java
new file mode 100644
index 0000000..226d174
--- /dev/null
+++ b/src/main/java/com/ruoyi/alarm/mapper/AlarmPointMapper.java
@@ -0,0 +1,9 @@
+package com.ruoyi.alarm.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.alarm.pojo.AlarmPoint;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface AlarmPointMapper extends BaseMapper<AlarmPoint> {
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/alarm/mapper/AlarmRealtimeMapper.java b/src/main/java/com/ruoyi/alarm/mapper/AlarmRealtimeMapper.java
new file mode 100644
index 0000000..36d259d
--- /dev/null
+++ b/src/main/java/com/ruoyi/alarm/mapper/AlarmRealtimeMapper.java
@@ -0,0 +1,9 @@
+package com.ruoyi.alarm.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.alarm.pojo.AlarmRealtime;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface AlarmRealtimeMapper extends BaseMapper<AlarmRealtime> {
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/alarm/mapper/AlarmRemoveApprovalMapper.java b/src/main/java/com/ruoyi/alarm/mapper/AlarmRemoveApprovalMapper.java
new file mode 100644
index 0000000..2cb03dc
--- /dev/null
+++ b/src/main/java/com/ruoyi/alarm/mapper/AlarmRemoveApprovalMapper.java
@@ -0,0 +1,9 @@
+package com.ruoyi.alarm.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.alarm.pojo.AlarmRemoveApproval;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface AlarmRemoveApprovalMapper extends BaseMapper<AlarmRemoveApproval> {
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/alarm/pojo/AlarmCollectionInterface.java b/src/main/java/com/ruoyi/alarm/pojo/AlarmCollectionInterface.java
new file mode 100644
index 0000000..b4e46c6
--- /dev/null
+++ b/src/main/java/com/ruoyi/alarm/pojo/AlarmCollectionInterface.java
@@ -0,0 +1,54 @@
+package com.ruoyi.alarm.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+@Data
+@TableName("alarm_collection_interface")
+public class AlarmCollectionInterface implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "鎺ュ彛ID")
+ @TableId(type = IdType.AUTO)
+ private Long interfaceId;
+
+ @ApiModelProperty(value = "鎺ュ彛鍚嶇О")
+ private String interfaceName;
+
+ @ApiModelProperty(value = "鎺ュ彛绫诲瀷")
+ private String interfaceType;
+
+ @ApiModelProperty(value = "鏈嶅姟鍣ㄥ湴鍧�")
+ private String serverAddress;
+
+ @ApiModelProperty(value = "閲囬泦棰戠巼")
+ private String collectFreq;
+
+ @ApiModelProperty(value = "杩炴帴鐘舵��")
+ private String connectStatus;
+
+ @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @ApiModelProperty(value = "鍒涘缓鐢ㄦ埛")
+ @TableField(fill = FieldFill.INSERT)
+ private Long createUser;
+
+ @ApiModelProperty(value = "鏇存柊鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @ApiModelProperty(value = "淇敼鐢ㄦ埛")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Long updateUser;
+
+ @ApiModelProperty(value = "绉熸埛ID")
+ @TableField(fill = FieldFill.INSERT)
+ private Long tenantId;
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/alarm/pojo/AlarmNuisanceStrategy.java b/src/main/java/com/ruoyi/alarm/pojo/AlarmNuisanceStrategy.java
new file mode 100644
index 0000000..8d0ca5c
--- /dev/null
+++ b/src/main/java/com/ruoyi/alarm/pojo/AlarmNuisanceStrategy.java
@@ -0,0 +1,57 @@
+package com.ruoyi.alarm.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+@Data
+@TableName("alarm_nuisance_strategy")
+public class AlarmNuisanceStrategy implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "绛栫暐ID")
+ @TableId(type = IdType.AUTO)
+ private Long strategyId;
+
+ @ApiModelProperty(value = "绛栫暐鍚嶇О")
+ private String strategyName;
+
+ @ApiModelProperty(value = "绛栫暐绫诲瀷")
+ private String strategyType;
+
+ @ApiModelProperty(value = "绛栫暐璇存槑")
+ private String description;
+
+ @ApiModelProperty(value = "瑙勫垯閰嶇疆JSON")
+ private String ruleConfig;
+
+ @ApiModelProperty(value = "宸茶繃婊ゆ暟")
+ private Integer filteredCount;
+
+ @ApiModelProperty(value = "鐘舵��")
+ private Integer status;
+
+ @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @ApiModelProperty(value = "鍒涘缓鐢ㄦ埛")
+ @TableField(fill = FieldFill.INSERT)
+ private Long createUser;
+
+ @ApiModelProperty(value = "鏇存柊鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @ApiModelProperty(value = "淇敼鐢ㄦ埛")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Long updateUser;
+
+ @ApiModelProperty(value = "绉熸埛ID")
+ @TableField(fill = FieldFill.INSERT)
+ private Long tenantId;
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/alarm/pojo/AlarmPoint.java b/src/main/java/com/ruoyi/alarm/pojo/AlarmPoint.java
new file mode 100644
index 0000000..7717d45
--- /dev/null
+++ b/src/main/java/com/ruoyi/alarm/pojo/AlarmPoint.java
@@ -0,0 +1,60 @@
+package com.ruoyi.alarm.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+@Data
+@TableName("alarm_point")
+public class AlarmPoint implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "鐐逛綅ID")
+ @TableId(type = IdType.AUTO)
+ private Long pointId;
+
+ @ApiModelProperty(value = "鐐逛綅缂栫爜")
+ private String pointCode;
+
+ @ApiModelProperty(value = "鐐逛綅鍚嶇О")
+ private String pointName;
+
+ @ApiModelProperty(value = "璁惧绫诲瀷")
+ private String deviceType;
+
+ @ApiModelProperty(value = "鎶ヨ绾у埆")
+ private String alarmLevel;
+
+ @ApiModelProperty(value = "鎶ヨ闃堝��")
+ private String thresholdValue;
+
+ @ApiModelProperty(value = "鎵�灞炲尯鍩�")
+ private String area;
+
+ @ApiModelProperty(value = "鐘舵��(1鍚敤/0鍋滅敤)")
+ private Integer status;
+
+ @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @ApiModelProperty(value = "鍒涘缓鐢ㄦ埛")
+ @TableField(fill = FieldFill.INSERT)
+ private Long createUser;
+
+ @ApiModelProperty(value = "鏇存柊鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @ApiModelProperty(value = "淇敼鐢ㄦ埛")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Long updateUser;
+
+ @ApiModelProperty(value = "绉熸埛ID")
+ @TableField(fill = FieldFill.INSERT)
+ private Long tenantId;
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/alarm/pojo/AlarmRealtime.java b/src/main/java/com/ruoyi/alarm/pojo/AlarmRealtime.java
new file mode 100644
index 0000000..12dab9d
--- /dev/null
+++ b/src/main/java/com/ruoyi/alarm/pojo/AlarmRealtime.java
@@ -0,0 +1,60 @@
+package com.ruoyi.alarm.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+@Data
+@TableName("alarm_realtime")
+public class AlarmRealtime implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "鎶ヨID")
+ @TableId(type = IdType.AUTO)
+ private Long alarmId;
+
+ @ApiModelProperty(value = "鐐逛綅ID")
+ private Long pointId;
+
+ @ApiModelProperty(value = "鎶ヨ鏃堕棿")
+ private LocalDateTime alarmTime;
+
+ @ApiModelProperty(value = "鎶ヨ绾у埆")
+ private String alarmLevel;
+
+ @ApiModelProperty(value = "鎶ヨ绫诲瀷")
+ private String alarmType;
+
+ @ApiModelProperty(value = "鎶ヨ鍊�")
+ private String alarmValue;
+
+ @ApiModelProperty(value = "闃堝��")
+ private String thresholdValue;
+
+ @ApiModelProperty(value = "鐘舵��")
+ private String status;
+
+ @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @ApiModelProperty(value = "鍒涘缓鐢ㄦ埛")
+ @TableField(fill = FieldFill.INSERT)
+ private Long createUser;
+
+ @ApiModelProperty(value = "鏇存柊鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @ApiModelProperty(value = "淇敼鐢ㄦ埛")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Long updateUser;
+
+ @ApiModelProperty(value = "绉熸埛ID")
+ @TableField(fill = FieldFill.INSERT)
+ private Long tenantId;
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/alarm/pojo/AlarmRemoveApproval.java b/src/main/java/com/ruoyi/alarm/pojo/AlarmRemoveApproval.java
new file mode 100644
index 0000000..1117b85
--- /dev/null
+++ b/src/main/java/com/ruoyi/alarm/pojo/AlarmRemoveApproval.java
@@ -0,0 +1,66 @@
+package com.ruoyi.alarm.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+@Data
+@TableName("alarm_remove_approval")
+public class AlarmRemoveApproval implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "涓婚敭")
+ @TableId(type = IdType.AUTO)
+ private Long approvalId;
+
+ @ApiModelProperty(value = "鐢宠缂栧彿")
+ private String applyNo;
+
+ @ApiModelProperty(value = "鐐逛綅ID")
+ private Long pointId;
+
+ @ApiModelProperty(value = "鍓旈櫎鍘熷洜")
+ private String removeReason;
+
+ @ApiModelProperty(value = "璇︾粏璇存槑")
+ private String description;
+
+ @ApiModelProperty(value = "鐢宠浜�")
+ private String applicant;
+
+ @ApiModelProperty(value = "鐢宠鏃堕棿")
+ private LocalDateTime applyTime;
+
+ @ApiModelProperty(value = "瀹℃壒鐘舵��")
+ private String status;
+
+ @ApiModelProperty(value = "瀹℃壒浜�")
+ private String approver;
+
+ @ApiModelProperty(value = "瀹℃壒鏃堕棿")
+ private LocalDateTime approveTime;
+
+ @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @ApiModelProperty(value = "鍒涘缓鐢ㄦ埛")
+ @TableField(fill = FieldFill.INSERT)
+ private Long createUser;
+
+ @ApiModelProperty(value = "鏇存柊鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @ApiModelProperty(value = "淇敼鐢ㄦ埛")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Long updateUser;
+
+ @ApiModelProperty(value = "绉熸埛ID")
+ @TableField(fill = FieldFill.INSERT)
+ private Long tenantId;
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/alarm/service/IAlarmAnalysisService.java b/src/main/java/com/ruoyi/alarm/service/IAlarmAnalysisService.java
new file mode 100644
index 0000000..44c6d5a
--- /dev/null
+++ b/src/main/java/com/ruoyi/alarm/service/IAlarmAnalysisService.java
@@ -0,0 +1,29 @@
+package com.ruoyi.alarm.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.alarm.vo.AlarmAnalysisVo;
+import com.ruoyi.alarm.vo.AlarmFaultDiagnosisVo;
+import com.ruoyi.alarm.vo.AlarmRealtimeVo;
+import com.ruoyi.alarm.vo.AlarmTrendVo;
+import com.ruoyi.alarm.vo.AlarmTypeDistributionVo;
+
+import java.util.List;
+import java.util.Map;
+
+public interface IAlarmAnalysisService {
+
+ Map<String, Object> getRealtimeStats();
+
+ IPage<AlarmRealtimeVo> getRealtimeList(Page page);
+
+ int confirmAlarm(Long alarmId);
+
+ AlarmAnalysisVo analyzeAlarm(Long alarmId);
+
+ AlarmTrendVo getTrendData(String startDate, String endDate);
+
+ List<AlarmTypeDistributionVo> getTypeDistribution();
+
+ List<AlarmFaultDiagnosisVo> getFaultList();
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/alarm/service/IAlarmCollectionService.java b/src/main/java/com/ruoyi/alarm/service/IAlarmCollectionService.java
new file mode 100644
index 0000000..9669da7
--- /dev/null
+++ b/src/main/java/com/ruoyi/alarm/service/IAlarmCollectionService.java
@@ -0,0 +1,38 @@
+package com.ruoyi.alarm.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.alarm.dto.AlarmCollectionInterfaceDto;
+import com.ruoyi.alarm.dto.AlarmPointDto;
+import com.ruoyi.alarm.vo.AlarmCollectionInterfaceVo;
+import com.ruoyi.alarm.vo.AlarmPointLedgerVo;
+import com.ruoyi.alarm.vo.AlarmStatisticsVo;
+
+import java.util.List;
+
+public interface IAlarmCollectionService {
+
+ AlarmStatisticsVo getStatistics();
+
+ IPage<AlarmPointLedgerVo> getPointLedgerList(Page page, AlarmPointDto dto);
+
+ int addPoint(AlarmPointDto dto);
+
+ int updatePoint(AlarmPointDto dto);
+
+ int deletePoint(Long pointId);
+
+ int changePointStatus(Long pointId, Integer status);
+
+ List<AlarmPointLedgerVo> getPointOptions();
+
+ List<AlarmCollectionInterfaceVo> getInterfaceList();
+
+ int addOrUpdateInterface(AlarmCollectionInterfaceDto dto);
+
+ int deleteInterface(Long interfaceId);
+
+ int startInterface(Long interfaceId);
+
+ int stopInterface(Long interfaceId);
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/alarm/service/IAlarmOptimizationService.java b/src/main/java/com/ruoyi/alarm/service/IAlarmOptimizationService.java
new file mode 100644
index 0000000..f6ebff6
--- /dev/null
+++ b/src/main/java/com/ruoyi/alarm/service/IAlarmOptimizationService.java
@@ -0,0 +1,36 @@
+package com.ruoyi.alarm.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.alarm.dto.AlarmNuisanceStrategyDto;
+import com.ruoyi.alarm.dto.AlarmRemoveApprovalDto;
+import com.ruoyi.alarm.vo.*;
+
+import java.util.List;
+
+public interface IAlarmOptimizationService {
+
+ AlarmOptimizationStatisticsVo getStatistics();
+
+ List<AlarmNuisanceStrategyVo> getStrategyList();
+
+ int addStrategy(AlarmNuisanceStrategyDto dto);
+
+ int updateStrategy(AlarmNuisanceStrategyDto dto);
+
+ int deleteStrategy(Long strategyId);
+
+ int changeStrategyStatus(Long strategyId, Integer status);
+
+ AlarmCompareVo getCompareData();
+
+ List<AlarmHighFreqPointVo> getHighFreqList(Integer limit);
+
+ IPage<AlarmRemoveApprovalVo> getApprovalList(Page page, String status);
+
+ int submitApproval(AlarmRemoveApprovalDto dto);
+
+ int approveApproval(String applyNo);
+
+ int rejectApproval(String applyNo);
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/alarm/service/impl/AlarmAnalysisServiceImpl.java b/src/main/java/com/ruoyi/alarm/service/impl/AlarmAnalysisServiceImpl.java
new file mode 100644
index 0000000..564650c
--- /dev/null
+++ b/src/main/java/com/ruoyi/alarm/service/impl/AlarmAnalysisServiceImpl.java
@@ -0,0 +1,171 @@
+package com.ruoyi.alarm.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.alarm.mapper.AlarmPointMapper;
+import com.ruoyi.alarm.mapper.AlarmRealtimeMapper;
+import com.ruoyi.alarm.pojo.AlarmPoint;
+import com.ruoyi.alarm.pojo.AlarmRealtime;
+import com.ruoyi.alarm.service.IAlarmAnalysisService;
+import com.ruoyi.alarm.vo.*;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+
+@Service
+@AllArgsConstructor
+public class AlarmAnalysisServiceImpl extends ServiceImpl<AlarmRealtimeMapper, AlarmRealtime> implements IAlarmAnalysisService {
+
+ private AlarmRealtimeMapper alarmRealtimeMapper;
+ private AlarmPointMapper alarmPointMapper;
+
+ @Override
+ public Map<String, Object> getRealtimeStats() {
+ Map<String, Object> result = new HashMap<>();
+ LambdaQueryWrapper<AlarmRealtime> wrapper = new LambdaQueryWrapper<>();
+ wrapper.eq(AlarmRealtime::getStatus, "鏈‘璁�");
+ List<AlarmRealtime> alarms = alarmRealtimeMapper.selectList(wrapper);
+
+ int urgent = 0, important = 0, normal = 0;
+ for (AlarmRealtime alarm : alarms) {
+ if ("绱ф��".equals(alarm.getAlarmLevel())) {
+ urgent++;
+ } else if ("閲嶈".equals(alarm.getAlarmLevel())) {
+ important++;
+ } else {
+ normal++;
+ }
+ }
+
+ result.put("urgent", urgent);
+ result.put("important", important);
+ result.put("normal", normal);
+ result.put("total", alarms.size());
+ return result;
+ }
+
+ @Override
+ public IPage<AlarmRealtimeVo> getRealtimeList(Page page) {
+ LambdaQueryWrapper<AlarmRealtime> wrapper = new LambdaQueryWrapper<>();
+ wrapper.orderByDesc(AlarmRealtime::getAlarmTime);
+ IPage<AlarmRealtime> alarmPage = alarmRealtimeMapper.selectPage(page, wrapper);
+
+ return alarmPage.convert(alarm -> {
+ AlarmRealtimeVo vo = new AlarmRealtimeVo();
+ vo.setAlarmId(alarm.getAlarmId());
+ vo.setAlarmTime(alarm.getAlarmTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+ vo.setAlarmLevel(alarm.getAlarmLevel());
+ vo.setAlarmType(alarm.getAlarmType());
+ vo.setAlarmValue(alarm.getAlarmValue());
+ vo.setThresholdValue(alarm.getThresholdValue());
+ vo.setStatus(alarm.getStatus());
+
+ AlarmPoint point = alarmPointMapper.selectById(alarm.getPointId());
+ if (point != null) {
+ vo.setPointName(point.getPointName());
+ vo.setArea(point.getArea());
+ }
+ return vo;
+ });
+ }
+
+ @Override
+ public int confirmAlarm(Long alarmId) {
+ AlarmRealtime alarm = new AlarmRealtime();
+ alarm.setAlarmId(alarmId);
+ alarm.setStatus("宸茬‘璁�");
+ return alarmRealtimeMapper.updateById(alarm);
+ }
+
+ @Override
+ public AlarmAnalysisVo analyzeAlarm(Long alarmId) {
+ AlarmRealtime alarm = alarmRealtimeMapper.selectById(alarmId);
+ AlarmAnalysisVo vo = new AlarmAnalysisVo();
+
+ vo.setFaultType("璁惧杩愯寮傚父");
+ vo.setFaultReason("鏍规嵁鍘嗗彶鏁版嵁鍒嗘瀽锛岃鐐逛綅棰戠箒瑙﹀彂鎶ヨ锛屽彲鑳藉瓨鍦ㄤ紶鎰熷櫒鏁呴殰鎴栧伐鑹哄弬鏁拌缃笉鍚堢悊");
+
+ List<AlarmStepVo> steps = new ArrayList<>();
+ AlarmStepVo step1 = new AlarmStepVo();
+ step1.setTitle("鐜板満妫�鏌�");
+ step1.setDesc("娲鹃仯鎿嶄綔浜哄憳鍒扮幇鍦烘鏌ヨ澶囪繍琛岀姸鎬�");
+ steps.add(step1);
+
+ AlarmStepVo step2 = new AlarmStepVo();
+ step2.setTitle("鍙傛暟璋冩暣");
+ step2.setDesc("鏍规嵁宸ヨ壓瑕佹眰璋冩暣鎶ヨ闃堝�艰缃�");
+ steps.add(step2);
+
+ AlarmStepVo step3 = new AlarmStepVo();
+ step3.setTitle("璁惧缁存姢");
+ step3.setDesc("濡傜‘璁よ澶囨晠闅滐紝瀹夋帓缁翠慨鎴栨洿鎹�");
+ steps.add(step3);
+
+ AlarmStepVo step4 = new AlarmStepVo();
+ step4.setTitle("鏁堟灉楠岃瘉");
+ step4.setDesc("璋冩暣鍚庢寔缁洃娴嬶紝楠岃瘉鎶ヨ鏄惁娑堥櫎");
+ steps.add(step4);
+
+ vo.setSteps(steps);
+
+ return vo;
+ }
+
+ @Override
+ public AlarmTrendVo getTrendData(String startDate, String endDate) {
+ AlarmTrendVo vo = new AlarmTrendVo();
+ vo.setDates(Arrays.asList("鍛ㄤ竴", "鍛ㄤ簩", "鍛ㄤ笁", "鍛ㄥ洓", "鍛ㄤ簲", "鍛ㄥ叚", "鍛ㄦ棩"));
+ vo.setUrgent(Arrays.asList(3, 5, 2, 4, 6, 2, 3));
+ vo.setImportant(Arrays.asList(8, 12, 10, 15, 18, 9, 11));
+ vo.setNormal(Arrays.asList(15, 20, 18, 25, 30, 16, 19));
+ return vo;
+ }
+
+ @Override
+ public List<AlarmTypeDistributionVo> getTypeDistribution() {
+ List<AlarmTypeDistributionVo> list = new ArrayList<>();
+ AlarmTypeDistributionVo vo1 = new AlarmTypeDistributionVo();
+ vo1.setValue(35);
+ vo1.setName("娓╁害瓒呴檺");
+ list.add(vo1);
+
+ AlarmTypeDistributionVo vo2 = new AlarmTypeDistributionVo();
+ vo2.setValue(28);
+ vo2.setName("鍘嬪姏寮傚父");
+ list.add(vo2);
+
+ AlarmTypeDistributionVo vo3 = new AlarmTypeDistributionVo();
+ vo3.setValue(20);
+ vo3.setName("娴侀噺寮傚父");
+ list.add(vo3);
+
+ AlarmTypeDistributionVo vo4 = new AlarmTypeDistributionVo();
+ vo4.setValue(15);
+ vo4.setName("娑蹭綅瓒呴檺");
+ list.add(vo4);
+
+ AlarmTypeDistributionVo vo5 = new AlarmTypeDistributionVo();
+ vo5.setValue(12);
+ vo5.setName("璁惧鏁呴殰");
+ list.add(vo5);
+
+ return list;
+ }
+
+ @Override
+ public List<AlarmFaultDiagnosisVo> getFaultList() {
+ List<AlarmFaultDiagnosisVo> list = new ArrayList<>();
+ AlarmFaultDiagnosisVo vo = new AlarmFaultDiagnosisVo();
+ vo.setFaultType("浼犳劅鍣ㄦ晠闅�");
+ vo.setAlarmPoint("鍙嶅簲閲滄俯搴︾洃娴嬬偣");
+ vo.setOccurrenceCount(12);
+ vo.setFaultReason("浼犳劅鍣ㄨ�佸寲锛屾祴閲忓�兼紓绉�");
+ vo.setSolution("鏇存崲娓╁害浼犳劅鍣紝閲嶆柊鏍″噯");
+ list.add(vo);
+ return list;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/alarm/service/impl/AlarmCollectionServiceImpl.java b/src/main/java/com/ruoyi/alarm/service/impl/AlarmCollectionServiceImpl.java
new file mode 100644
index 0000000..069fdc0
--- /dev/null
+++ b/src/main/java/com/ruoyi/alarm/service/impl/AlarmCollectionServiceImpl.java
@@ -0,0 +1,172 @@
+package com.ruoyi.alarm.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.alarm.dto.AlarmCollectionInterfaceDto;
+import com.ruoyi.alarm.dto.AlarmPointDto;
+import com.ruoyi.alarm.mapper.AlarmCollectionInterfaceMapper;
+import com.ruoyi.alarm.mapper.AlarmPointMapper;
+import com.ruoyi.alarm.pojo.AlarmCollectionInterface;
+import com.ruoyi.alarm.pojo.AlarmPoint;
+import com.ruoyi.alarm.service.IAlarmCollectionService;
+import com.ruoyi.alarm.vo.AlarmCollectionInterfaceVo;
+import com.ruoyi.alarm.vo.AlarmPointLedgerVo;
+import com.ruoyi.alarm.vo.AlarmStatisticsVo;
+import com.ruoyi.common.utils.bean.BeanUtils;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+@AllArgsConstructor
+public class AlarmCollectionServiceImpl extends ServiceImpl<AlarmPointMapper, AlarmPoint> implements IAlarmCollectionService {
+
+ private AlarmPointMapper alarmPointMapper;
+ private AlarmCollectionInterfaceMapper alarmCollectionInterfaceMapper;
+
+ @Override
+ public AlarmStatisticsVo getStatistics() {
+ AlarmStatisticsVo vo = new AlarmStatisticsVo();
+ LambdaQueryWrapper<AlarmPoint> wrapper = new LambdaQueryWrapper<>();
+ wrapper.eq(AlarmPoint::getStatus, 1);
+ Long totalPoints = alarmPointMapper.selectCount(wrapper);
+ vo.setTotalPoints(totalPoints.intValue());
+ vo.setConnectedDevices((int) (totalPoints * 0.7));
+ vo.setTodayDataVolume(245.6);
+ vo.setParseSuccessRate(99.8);
+ return vo;
+ }
+
+ @Override
+ public IPage<AlarmPointLedgerVo> getPointLedgerList(Page page, AlarmPointDto dto) {
+ LambdaQueryWrapper<AlarmPoint> wrapper = new LambdaQueryWrapper<>();
+ if (dto.getPointName() != null && !dto.getPointName().isEmpty()) {
+ wrapper.like(AlarmPoint::getPointName, dto.getPointName());
+ }
+ if (dto.getDeviceType() != null && !dto.getDeviceType().isEmpty()) {
+ wrapper.eq(AlarmPoint::getDeviceType, dto.getDeviceType());
+ }
+ wrapper.orderByDesc(AlarmPoint::getCreateTime);
+ IPage<AlarmPoint> pointPage = alarmPointMapper.selectPage(page, wrapper);
+ return pointPage.convert(point -> {
+ AlarmPointLedgerVo vo = new AlarmPointLedgerVo();
+ BeanUtils.copyProperties(point, vo);
+ return vo;
+ });
+ }
+
+ @Override
+ public int addPoint(AlarmPointDto dto) {
+ AlarmPoint point = new AlarmPoint();
+ BeanUtils.copyProperties(dto, point);
+ point.setCreateTime(LocalDateTime.now());
+ point.setUpdateTime(LocalDateTime.now());
+ return alarmPointMapper.insert(point);
+ }
+
+ @Override
+ public int updatePoint(AlarmPointDto dto) {
+ AlarmPoint point = new AlarmPoint();
+ BeanUtils.copyProperties(dto, point);
+ point.setUpdateTime(LocalDateTime.now());
+ return alarmPointMapper.updateById(point);
+ }
+
+ @Override
+ public int deletePoint(Long pointId) {
+ return alarmPointMapper.deleteById(pointId);
+ }
+
+ @Override
+ public int changePointStatus(Long pointId, Integer status) {
+ AlarmPoint point = new AlarmPoint();
+ point.setPointId(pointId);
+ point.setStatus(status);
+ point.setUpdateTime(LocalDateTime.now());
+ return alarmPointMapper.updateById(point);
+ }
+
+ @Override
+ public List<AlarmPointLedgerVo> getPointOptions() {
+ LambdaQueryWrapper<AlarmPoint> wrapper = new LambdaQueryWrapper<>();
+ wrapper.eq(AlarmPoint::getStatus, 1);
+ wrapper.select(AlarmPoint::getPointId, AlarmPoint::getPointName);
+ List<AlarmPoint> points = alarmPointMapper.selectList(wrapper);
+ return points.stream().map(point -> {
+ AlarmPointLedgerVo vo = new AlarmPointLedgerVo();
+ vo.setPointId(point.getPointId());
+ vo.setPointName(point.getPointName());
+ return vo;
+ }).collect(java.util.stream.Collectors.toList());
+ }
+
+ @Override
+ public List<AlarmCollectionInterfaceVo> getInterfaceList() {
+ LambdaQueryWrapper<AlarmCollectionInterface> wrapper = new LambdaQueryWrapper<>();
+ wrapper.orderByDesc(AlarmCollectionInterface::getCreateTime);
+ List<AlarmCollectionInterface> interfaces = alarmCollectionInterfaceMapper.selectList(wrapper);
+
+ if (interfaces.isEmpty()) {
+ List<AlarmCollectionInterfaceVo> mockData = new ArrayList<>();
+ AlarmCollectionInterfaceVo vo = new AlarmCollectionInterfaceVo();
+ vo.setInterfaceId(1L);
+ vo.setInterfaceName("OPC UA鏁版嵁閲囬泦");
+ vo.setInterfaceType("OPC UA");
+ vo.setServerAddress("opc.tcp://192.168.1.100:4840");
+ vo.setCollectFreq("1绉�");
+ vo.setConnectStatus("connected");
+ mockData.add(vo);
+ return mockData;
+ }
+
+ return interfaces.stream().map(iface -> {
+ AlarmCollectionInterfaceVo vo = new AlarmCollectionInterfaceVo();
+ BeanUtils.copyProperties(iface, vo);
+ return vo;
+ }).collect(java.util.stream.Collectors.toList());
+ }
+
+ @Override
+ public int startInterface(Long interfaceId) {
+ AlarmCollectionInterface iface = new AlarmCollectionInterface();
+ iface.setInterfaceId(interfaceId);
+ iface.setConnectStatus("connected");
+ iface.setUpdateTime(LocalDateTime.now());
+ return alarmCollectionInterfaceMapper.updateById(iface);
+ }
+
+ @Override
+ public int stopInterface(Long interfaceId) {
+ AlarmCollectionInterface iface = new AlarmCollectionInterface();
+ iface.setInterfaceId(interfaceId);
+ iface.setConnectStatus("disconnected");
+ iface.setUpdateTime(LocalDateTime.now());
+ return alarmCollectionInterfaceMapper.updateById(iface);
+ }
+
+ @Override
+ public int addOrUpdateInterface(AlarmCollectionInterfaceDto dto) {
+ AlarmCollectionInterface iface = new AlarmCollectionInterface();
+ BeanUtils.copyProperties(dto, iface);
+ iface.setUpdateTime(LocalDateTime.now());
+
+ if (dto.getInterfaceId() == null) {
+ // 鏂板
+ iface.setCreateTime(LocalDateTime.now());
+ return alarmCollectionInterfaceMapper.insert(iface);
+ } else {
+ // 鏇存柊
+ return alarmCollectionInterfaceMapper.updateById(iface);
+ }
+ }
+
+ @Override
+ public int deleteInterface(Long interfaceId) {
+ return alarmCollectionInterfaceMapper.deleteById(interfaceId);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/alarm/service/impl/AlarmOptimizationServiceImpl.java b/src/main/java/com/ruoyi/alarm/service/impl/AlarmOptimizationServiceImpl.java
new file mode 100644
index 0000000..12fd5a7
--- /dev/null
+++ b/src/main/java/com/ruoyi/alarm/service/impl/AlarmOptimizationServiceImpl.java
@@ -0,0 +1,198 @@
+package com.ruoyi.alarm.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.alarm.dto.AlarmNuisanceStrategyDto;
+import com.ruoyi.alarm.dto.AlarmRemoveApprovalDto;
+import com.ruoyi.alarm.mapper.AlarmNuisanceStrategyMapper;
+import com.ruoyi.alarm.mapper.AlarmPointMapper;
+import com.ruoyi.alarm.mapper.AlarmRemoveApprovalMapper;
+import com.ruoyi.alarm.pojo.AlarmNuisanceStrategy;
+import com.ruoyi.alarm.pojo.AlarmPoint;
+import com.ruoyi.alarm.pojo.AlarmRemoveApproval;
+import com.ruoyi.alarm.service.IAlarmOptimizationService;
+import com.ruoyi.alarm.vo.*;
+import com.ruoyi.common.utils.bean.BeanUtils;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Random;
+
+@Service
+@AllArgsConstructor
+public class AlarmOptimizationServiceImpl extends ServiceImpl<AlarmNuisanceStrategyMapper, AlarmNuisanceStrategy> implements IAlarmOptimizationService {
+
+ private AlarmNuisanceStrategyMapper alarmNuisanceStrategyMapper;
+ private AlarmRemoveApprovalMapper alarmRemoveApprovalMapper;
+ private AlarmPointMapper alarmPointMapper;
+
+ @Override
+ public AlarmOptimizationStatisticsVo getStatistics() {
+ AlarmOptimizationStatisticsVo vo = new AlarmOptimizationStatisticsVo();
+ vo.setFilteredCount(1568);
+ vo.setValidRate(85.6);
+ vo.setResponseTime(12);
+ vo.setScore(92);
+ return vo;
+ }
+
+ @Override
+ public List<AlarmNuisanceStrategyVo> getStrategyList() {
+ LambdaQueryWrapper<AlarmNuisanceStrategy> wrapper = new LambdaQueryWrapper<>();
+ wrapper.orderByDesc(AlarmNuisanceStrategy::getCreateTime);
+ List<AlarmNuisanceStrategy> strategies = alarmNuisanceStrategyMapper.selectList(wrapper);
+
+ return strategies.stream().map(strategy -> {
+ AlarmNuisanceStrategyVo vo = new AlarmNuisanceStrategyVo();
+ vo.setStrategyId(strategy.getStrategyId());
+ vo.setStrategyName(strategy.getStrategyName());
+ vo.setStrategyType(strategy.getStrategyType());
+ vo.setDescription(strategy.getDescription());
+ vo.setFilteredCount(strategy.getFilteredCount());
+ vo.setStatus(strategy.getStatus());
+ return vo;
+ }).collect(java.util.stream.Collectors.toList());
+ }
+
+ @Override
+ public int addStrategy(AlarmNuisanceStrategyDto dto) {
+ AlarmNuisanceStrategy strategy = new AlarmNuisanceStrategy();
+ BeanUtils.copyProperties(dto, strategy);
+ strategy.setFilteredCount(0);
+ strategy.setCreateTime(LocalDateTime.now());
+ strategy.setUpdateTime(LocalDateTime.now());
+ return alarmNuisanceStrategyMapper.insert(strategy);
+ }
+
+ @Override
+ public int updateStrategy(AlarmNuisanceStrategyDto dto) {
+ AlarmNuisanceStrategy strategy = new AlarmNuisanceStrategy();
+ BeanUtils.copyProperties(dto, strategy);
+ strategy.setUpdateTime(LocalDateTime.now());
+ return alarmNuisanceStrategyMapper.updateById(strategy);
+ }
+
+ @Override
+ public int deleteStrategy(Long strategyId) {
+ return alarmNuisanceStrategyMapper.deleteById(strategyId);
+ }
+
+ @Override
+ public int changeStrategyStatus(Long strategyId, Integer status) {
+ AlarmNuisanceStrategy strategy = new AlarmNuisanceStrategy();
+ strategy.setStrategyId(strategyId);
+ strategy.setStatus(status);
+ strategy.setUpdateTime(LocalDateTime.now());
+ return alarmNuisanceStrategyMapper.updateById(strategy);
+ }
+
+ @Override
+ public AlarmCompareVo getCompareData() {
+ AlarmCompareVo vo = new AlarmCompareVo();
+ vo.setCategories(Arrays.asList("鍛ㄤ竴", "鍛ㄤ簩", "鍛ㄤ笁", "鍛ㄥ洓", "鍛ㄤ簲", "鍛ㄥ叚", "鍛ㄦ棩"));
+ vo.setBefore(Arrays.asList(120, 132, 101, 134, 90, 230, 210));
+ vo.setAfter(Arrays.asList(45, 52, 38, 48, 35, 78, 65));
+ return vo;
+ }
+
+ @Override
+ public List<AlarmHighFreqPointVo> getHighFreqList(Integer limit) {
+ List<AlarmHighFreqPointVo> list = new ArrayList<>();
+ AlarmHighFreqPointVo vo = new AlarmHighFreqPointVo();
+ vo.setPointName("鍙嶅簲閲滄俯搴︾洃娴嬬偣");
+ vo.setAlarmCount(156);
+ vo.setTrend("涓嬮檷");
+ list.add(vo);
+ return list;
+ }
+
+ @Override
+ public IPage<AlarmRemoveApprovalVo> getApprovalList(Page page, String status) {
+ LambdaQueryWrapper<AlarmRemoveApproval> wrapper = new LambdaQueryWrapper<>();
+ if (status != null && !status.isEmpty()) {
+ wrapper.eq(AlarmRemoveApproval::getStatus, status);
+ }
+ wrapper.orderByDesc(AlarmRemoveApproval::getApplyTime);
+ IPage<AlarmRemoveApproval> approvalPage = alarmRemoveApprovalMapper.selectPage(page, wrapper);
+
+ return approvalPage.convert(approval -> {
+ AlarmRemoveApprovalVo vo = new AlarmRemoveApprovalVo();
+ vo.setApplyNo(approval.getApplyNo());
+ vo.setRemoveReason(approval.getRemoveReason());
+ vo.setApplicant(approval.getApplicant());
+ vo.setApplyTime(approval.getApplyTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+ vo.setStatus(approval.getStatus());
+
+ AlarmPoint point = alarmPointMapper.selectById(approval.getPointId());
+ if (point != null) {
+ vo.setPointName(point.getPointName());
+ }
+ return vo;
+ });
+ }
+
+ @Override
+ public int submitApproval(AlarmRemoveApprovalDto dto) {
+ AlarmRemoveApproval approval = new AlarmRemoveApproval();
+ BeanUtils.copyProperties(dto, approval);
+ approval.setApplyNo("AP" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")) + String.format("%03d", new Random().nextInt(1000)));
+ approval.setApplicant("褰撳墠鐢ㄦ埛");
+ approval.setApplyTime(LocalDateTime.now());
+ approval.setStatus("pending");
+ approval.setCreateTime(LocalDateTime.now());
+ approval.setUpdateTime(LocalDateTime.now());
+ return alarmRemoveApprovalMapper.insert(approval);
+ }
+
+ @Override
+ public int approveApproval(String applyNo) {
+ AlarmRemoveApproval approval = new AlarmRemoveApproval();
+ LambdaQueryWrapper<AlarmRemoveApproval> wrapper = new LambdaQueryWrapper<>();
+ wrapper.eq(AlarmRemoveApproval::getApplyNo, applyNo);
+ AlarmRemoveApproval existing = alarmRemoveApprovalMapper.selectOne(wrapper);
+
+ if (existing != null) {
+ approval.setApprovalId(existing.getApprovalId());
+ approval.setStatus("approved");
+ approval.setApprover("瀹℃壒浜�");
+ approval.setApproveTime(LocalDateTime.now());
+ approval.setUpdateTime(LocalDateTime.now());
+ int result = alarmRemoveApprovalMapper.updateById(approval);
+
+ // 瀹℃壒閫氳繃鍚庯紝灏嗗搴旂偣浣嶇殑鐘舵�佹敼涓哄仠鐢�
+ AlarmPoint point = new AlarmPoint();
+ point.setPointId(existing.getPointId());
+ point.setStatus(0); // 0琛ㄧず鍋滅敤
+ point.setUpdateTime(LocalDateTime.now());
+ alarmPointMapper.updateById(point);
+
+ return result;
+ }
+ return 0;
+ }
+
+ @Override
+ public int rejectApproval(String applyNo) {
+ AlarmRemoveApproval approval = new AlarmRemoveApproval();
+ LambdaQueryWrapper<AlarmRemoveApproval> wrapper = new LambdaQueryWrapper<>();
+ wrapper.eq(AlarmRemoveApproval::getApplyNo, applyNo);
+ AlarmRemoveApproval existing = alarmRemoveApprovalMapper.selectOne(wrapper);
+
+ if (existing != null) {
+ approval.setApprovalId(existing.getApprovalId());
+ approval.setStatus("rejected");
+ approval.setApprover("瀹℃壒浜�");
+ approval.setApproveTime(LocalDateTime.now());
+ approval.setUpdateTime(LocalDateTime.now());
+ return alarmRemoveApprovalMapper.updateById(approval);
+ }
+ return 0;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/alarm/vo/AlarmAnalysisVo.java b/src/main/java/com/ruoyi/alarm/vo/AlarmAnalysisVo.java
new file mode 100644
index 0000000..ba6fc05
--- /dev/null
+++ b/src/main/java/com/ruoyi/alarm/vo/AlarmAnalysisVo.java
@@ -0,0 +1,19 @@
+package com.ruoyi.alarm.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class AlarmAnalysisVo {
+
+ @ApiModelProperty(value = "鏁呴殰绫诲瀷")
+ private String faultType;
+
+ @ApiModelProperty(value = "鏁呴殰鍘熷洜")
+ private String faultReason;
+
+ @ApiModelProperty(value = "澶勭悊姝ラ")
+ private List<AlarmStepVo> steps;
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/alarm/vo/AlarmCollectionInterfaceVo.java b/src/main/java/com/ruoyi/alarm/vo/AlarmCollectionInterfaceVo.java
new file mode 100644
index 0000000..b5a0f45
--- /dev/null
+++ b/src/main/java/com/ruoyi/alarm/vo/AlarmCollectionInterfaceVo.java
@@ -0,0 +1,26 @@
+package com.ruoyi.alarm.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class AlarmCollectionInterfaceVo {
+
+ @ApiModelProperty(value = "鎺ュ彛ID")
+ private Long interfaceId;
+
+ @ApiModelProperty(value = "鎺ュ彛鍚嶇О")
+ private String interfaceName;
+
+ @ApiModelProperty(value = "鎺ュ彛绫诲瀷")
+ private String interfaceType;
+
+ @ApiModelProperty(value = "鏈嶅姟鍣ㄥ湴鍧�")
+ private String serverAddress;
+
+ @ApiModelProperty(value = "閲囬泦棰戠巼")
+ private String collectFreq;
+
+ @ApiModelProperty(value = "杩炴帴鐘舵��")
+ private String connectStatus;
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/alarm/vo/AlarmCompareVo.java b/src/main/java/com/ruoyi/alarm/vo/AlarmCompareVo.java
new file mode 100644
index 0000000..b2fdde9
--- /dev/null
+++ b/src/main/java/com/ruoyi/alarm/vo/AlarmCompareVo.java
@@ -0,0 +1,19 @@
+package com.ruoyi.alarm.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class AlarmCompareVo {
+
+ @ApiModelProperty(value = "鏃ユ湡鍒楄〃")
+ private List<String> categories;
+
+ @ApiModelProperty(value = "娌荤悊鍓嶆暟鎹�")
+ private List<Integer> before;
+
+ @ApiModelProperty(value = "娌荤悊鍚庢暟鎹�")
+ private List<Integer> after;
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/alarm/vo/AlarmFaultDiagnosisVo.java b/src/main/java/com/ruoyi/alarm/vo/AlarmFaultDiagnosisVo.java
new file mode 100644
index 0000000..8985d95
--- /dev/null
+++ b/src/main/java/com/ruoyi/alarm/vo/AlarmFaultDiagnosisVo.java
@@ -0,0 +1,23 @@
+package com.ruoyi.alarm.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class AlarmFaultDiagnosisVo {
+
+ @ApiModelProperty(value = "鏁呴殰绫诲瀷")
+ private String faultType;
+
+ @ApiModelProperty(value = "鍏宠仈鎶ヨ鐐逛綅")
+ private String alarmPoint;
+
+ @ApiModelProperty(value = "鍙戠敓娆℃暟")
+ private Integer occurrenceCount;
+
+ @ApiModelProperty(value = "鍙兘鍘熷洜")
+ private String faultReason;
+
+ @ApiModelProperty(value = "澶勭疆寤鸿")
+ private String solution;
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/alarm/vo/AlarmHighFreqPointVo.java b/src/main/java/com/ruoyi/alarm/vo/AlarmHighFreqPointVo.java
new file mode 100644
index 0000000..3776e8a
--- /dev/null
+++ b/src/main/java/com/ruoyi/alarm/vo/AlarmHighFreqPointVo.java
@@ -0,0 +1,17 @@
+package com.ruoyi.alarm.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class AlarmHighFreqPointVo {
+
+ @ApiModelProperty(value = "鐐逛綅鍚嶇О")
+ private String pointName;
+
+ @ApiModelProperty(value = "鎶ヨ娆℃暟")
+ private Integer alarmCount;
+
+ @ApiModelProperty(value = "瓒嬪娍")
+ private String trend;
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/alarm/vo/AlarmNuisanceStrategyVo.java b/src/main/java/com/ruoyi/alarm/vo/AlarmNuisanceStrategyVo.java
new file mode 100644
index 0000000..d930abe
--- /dev/null
+++ b/src/main/java/com/ruoyi/alarm/vo/AlarmNuisanceStrategyVo.java
@@ -0,0 +1,26 @@
+package com.ruoyi.alarm.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class AlarmNuisanceStrategyVo {
+
+ @ApiModelProperty(value = "绛栫暐ID")
+ private Long strategyId;
+
+ @ApiModelProperty(value = "绛栫暐鍚嶇О")
+ private String strategyName;
+
+ @ApiModelProperty(value = "绛栫暐绫诲瀷")
+ private String strategyType;
+
+ @ApiModelProperty(value = "绛栫暐璇存槑")
+ private String description;
+
+ @ApiModelProperty(value = "宸茶繃婊ゆ姤璀︽暟")
+ private Integer filteredCount;
+
+ @ApiModelProperty(value = "鐘舵��(1鍚敤/0鍋滅敤)")
+ private Integer status;
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/alarm/vo/AlarmOptimizationStatisticsVo.java b/src/main/java/com/ruoyi/alarm/vo/AlarmOptimizationStatisticsVo.java
new file mode 100644
index 0000000..48f0f09
--- /dev/null
+++ b/src/main/java/com/ruoyi/alarm/vo/AlarmOptimizationStatisticsVo.java
@@ -0,0 +1,20 @@
+package com.ruoyi.alarm.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class AlarmOptimizationStatisticsVo {
+
+ @ApiModelProperty(value = "宸茶繃婊ゆ棤鏁堟姤璀︽暟")
+ private Integer filteredCount;
+
+ @ApiModelProperty(value = "鏈夋晥鎶ヨ鐜�(%)")
+ private Double validRate;
+
+ @ApiModelProperty(value = "骞冲潎鍝嶅簲鏃堕棿(绉�)")
+ private Integer responseTime;
+
+ @ApiModelProperty(value = "娌荤悊璇勫垎")
+ private Integer score;
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/alarm/vo/AlarmPointLedgerVo.java b/src/main/java/com/ruoyi/alarm/vo/AlarmPointLedgerVo.java
new file mode 100644
index 0000000..44f2509
--- /dev/null
+++ b/src/main/java/com/ruoyi/alarm/vo/AlarmPointLedgerVo.java
@@ -0,0 +1,34 @@
+package com.ruoyi.alarm.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class AlarmPointLedgerVo {
+
+ @ApiModelProperty(value = "鐐逛綅ID")
+ private Long pointId;
+
+ @ApiModelProperty(value = "鐐逛綅缂栫爜")
+ private String pointCode;
+
+ @ApiModelProperty(value = "鐐逛綅鍚嶇О")
+ private String pointName;
+
+ @ApiModelProperty(value = "璁惧绫诲瀷")
+ private String deviceType;
+
+ @ApiModelProperty(value = "鎶ヨ绾у埆")
+ private String alarmLevel;
+
+ @ApiModelProperty(value = "鎶ヨ闃堝��")
+ private String thresholdValue;
+
+ @ApiModelProperty(value = "鎵�灞炲尯鍩�")
+ private String area;
+
+ @ApiModelProperty(value = "鐘舵��(1鍚敤/0鍋滅敤)")
+ private Integer status;
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/alarm/vo/AlarmRealtimeVo.java b/src/main/java/com/ruoyi/alarm/vo/AlarmRealtimeVo.java
new file mode 100644
index 0000000..59ff5b1
--- /dev/null
+++ b/src/main/java/com/ruoyi/alarm/vo/AlarmRealtimeVo.java
@@ -0,0 +1,35 @@
+package com.ruoyi.alarm.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class AlarmRealtimeVo {
+
+ @ApiModelProperty(value = "鎶ヨID")
+ private Long alarmId;
+
+ @ApiModelProperty(value = "鎶ヨ鏃堕棿")
+ private String alarmTime;
+
+ @ApiModelProperty(value = "鎶ヨ绾у埆")
+ private String alarmLevel;
+
+ @ApiModelProperty(value = "鎶ヨ鐐逛綅鍚嶇О")
+ private String pointName;
+
+ @ApiModelProperty(value = "鎶ヨ绫诲瀷")
+ private String alarmType;
+
+ @ApiModelProperty(value = "鎶ヨ鍊�")
+ private String alarmValue;
+
+ @ApiModelProperty(value = "鎶ヨ闃堝��")
+ private String thresholdValue;
+
+ @ApiModelProperty(value = "鎵�灞炲尯鍩�")
+ private String area;
+
+ @ApiModelProperty(value = "鐘舵��")
+ private String status;
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/alarm/vo/AlarmRemoveApprovalVo.java b/src/main/java/com/ruoyi/alarm/vo/AlarmRemoveApprovalVo.java
new file mode 100644
index 0000000..1d9ffd5
--- /dev/null
+++ b/src/main/java/com/ruoyi/alarm/vo/AlarmRemoveApprovalVo.java
@@ -0,0 +1,26 @@
+package com.ruoyi.alarm.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class AlarmRemoveApprovalVo {
+
+ @ApiModelProperty(value = "鐢宠缂栧彿")
+ private String applyNo;
+
+ @ApiModelProperty(value = "鎶ヨ鐐逛綅")
+ private String pointName;
+
+ @ApiModelProperty(value = "鍓旈櫎鍘熷洜")
+ private String removeReason;
+
+ @ApiModelProperty(value = "鐢宠浜�")
+ private String applicant;
+
+ @ApiModelProperty(value = "鐢宠鏃堕棿")
+ private String applyTime;
+
+ @ApiModelProperty(value = "瀹℃壒鐘舵��")
+ private String status;
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/alarm/vo/AlarmStatisticsVo.java b/src/main/java/com/ruoyi/alarm/vo/AlarmStatisticsVo.java
new file mode 100644
index 0000000..8a9aff0
--- /dev/null
+++ b/src/main/java/com/ruoyi/alarm/vo/AlarmStatisticsVo.java
@@ -0,0 +1,20 @@
+package com.ruoyi.alarm.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class AlarmStatisticsVo {
+
+ @ApiModelProperty(value = "鎶ヨ鐐逛綅鎬绘暟")
+ private Integer totalPoints;
+
+ @ApiModelProperty(value = "宸茶繛鎺ヨ澶囨暟")
+ private Integer connectedDevices;
+
+ @ApiModelProperty(value = "浠婃棩鏁版嵁閲�(涓囨潯)")
+ private Double todayDataVolume;
+
+ @ApiModelProperty(value = "瑙f瀽鎴愬姛鐜�(%)")
+ private Double parseSuccessRate;
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/alarm/vo/AlarmStepVo.java b/src/main/java/com/ruoyi/alarm/vo/AlarmStepVo.java
new file mode 100644
index 0000000..cd57e13
--- /dev/null
+++ b/src/main/java/com/ruoyi/alarm/vo/AlarmStepVo.java
@@ -0,0 +1,14 @@
+package com.ruoyi.alarm.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class AlarmStepVo {
+
+ @ApiModelProperty(value = "姝ラ鏍囬")
+ private String title;
+
+ @ApiModelProperty(value = "姝ラ鎻忚堪")
+ private String desc;
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/alarm/vo/AlarmTrendVo.java b/src/main/java/com/ruoyi/alarm/vo/AlarmTrendVo.java
new file mode 100644
index 0000000..b3ac0db
--- /dev/null
+++ b/src/main/java/com/ruoyi/alarm/vo/AlarmTrendVo.java
@@ -0,0 +1,22 @@
+package com.ruoyi.alarm.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class AlarmTrendVo {
+
+ @ApiModelProperty(value = "鏃ユ湡鍒楄〃")
+ private List<String> dates;
+
+ @ApiModelProperty(value = "绱ф�ユ姤璀︽暟")
+ private List<Integer> urgent;
+
+ @ApiModelProperty(value = "閲嶈鎶ヨ鏁�")
+ private List<Integer> important;
+
+ @ApiModelProperty(value = "涓�鑸姤璀︽暟")
+ private List<Integer> normal;
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/alarm/vo/AlarmTypeDistributionVo.java b/src/main/java/com/ruoyi/alarm/vo/AlarmTypeDistributionVo.java
new file mode 100644
index 0000000..a4d560b
--- /dev/null
+++ b/src/main/java/com/ruoyi/alarm/vo/AlarmTypeDistributionVo.java
@@ -0,0 +1,14 @@
+package com.ruoyi.alarm.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class AlarmTypeDistributionVo {
+
+ @ApiModelProperty(value = "鏁伴噺")
+ private Integer value;
+
+ @ApiModelProperty(value = "绫诲瀷鍚嶇О")
+ private String name;
+}
\ No newline at end of file
--
Gitblit v1.9.3