1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
package com.ruoyi.wrzs.monitor.controller;
 
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.wrzs.monitor.pojo.MonitorAlarm;
import com.ruoyi.wrzs.monitor.pojo.MonitorControl;
import com.ruoyi.wrzs.monitor.pojo.MonitorDevice;
import com.ruoyi.wrzs.monitor.pojo.MonitorMetric;
import com.ruoyi.wrzs.monitor.service.MonitorService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
 
import java.math.BigDecimal;
import java.util.List;
 
/**
 * 远程监控设备
 * <p>
 * 温度、压力、能耗等关键参数实时监测,异常推送报警,支持远程启停控制
 */
@Api(tags = "远程监控设备")
@AllArgsConstructor
@RestController
@RequestMapping("/environmentAccess")
public class MonitorController {
 
    private final MonitorService monitorService;
 
    // ==================== 设备 ====================
 
    @ApiOperation("监控设备分页")
    @GetMapping("/monitorDevicePage")
    public AjaxResult devicePage(Page<MonitorDevice> page, MonitorDevice query) {
        return AjaxResult.success(monitorService.devicePage(page, query));
    }
 
    @ApiOperation("监控设备下拉列表")
    @GetMapping("/monitorDeviceList")
    public AjaxResult deviceList() {
        return AjaxResult.success(monitorService.deviceList());
    }
 
    @ApiOperation("监控设备详情(含监测指标)")
    @GetMapping("/monitorDeviceInfo")
    public AjaxResult deviceInfo(@RequestParam Long id) {
        return AjaxResult.success(monitorService.deviceInfo(id));
    }
 
    @ApiOperation("新增监控设备")
    @PostMapping("/monitorDeviceAdd")
    public AjaxResult deviceAdd(@RequestBody MonitorDevice device) {
        return AjaxResult.success(monitorService.deviceSave(device));
    }
 
    @ApiOperation("修改监控设备")
    @PutMapping("/monitorDeviceUpdate")
    public AjaxResult deviceUpdate(@RequestBody MonitorDevice device) {
        return AjaxResult.success(monitorService.deviceUpdate(device));
    }
 
    @ApiOperation("删除监控设备")
    @DeleteMapping("/monitorDeviceDelete")
    public AjaxResult deviceDelete(@RequestBody List<Long> ids) {
        return AjaxResult.success(monitorService.deviceRemove(ids));
    }
 
    // ==================== 监测指标 ====================
 
    @ApiOperation("监测指标列表")
    @GetMapping("/monitorMetricList")
    public AjaxResult metricList(@RequestParam(required = false) Long deviceId) {
        return AjaxResult.success(monitorService.metricList(deviceId));
    }
 
    @ApiOperation("新增监测指标")
    @PostMapping("/monitorMetricAdd")
    public AjaxResult metricAdd(@RequestBody MonitorMetric metric) {
        return AjaxResult.success(monitorService.metricSave(metric));
    }
 
    @ApiOperation("修改监测指标")
    @PutMapping("/monitorMetricUpdate")
    public AjaxResult metricUpdate(@RequestBody MonitorMetric metric) {
        return AjaxResult.success(monitorService.metricUpdate(metric));
    }
 
    @ApiOperation("删除监测指标")
    @DeleteMapping("/monitorMetricDelete")
    public AjaxResult metricDelete(@RequestBody List<Long> ids) {
        return AjaxResult.success(monitorService.metricRemove(ids));
    }
 
    // ==================== 数据采集 ====================
 
    @ApiOperation("采集数据上报(自动采集/人工补录)")
    @PostMapping("/monitorDataReport")
    public AjaxResult dataReport(@RequestParam Long deviceId,
                                 @RequestParam String metricCode,
                                 @RequestParam BigDecimal value,
                                 @RequestParam(required = false, defaultValue = "0") String dataSource) {
        try {
            MonitorAlarm alarm = monitorService.dataReport(deviceId, metricCode, value, dataSource);
            AjaxResult result = AjaxResult.success();
            result.put("alarm", alarm);
            result.put("alarmFlag", alarm != null);
            return result;
        } catch (IllegalArgumentException e) {
            return AjaxResult.error(e.getMessage());
        }
    }
 
    // ==================== 报警 ====================
 
    @ApiOperation("报警分页")
    @GetMapping("/monitorAlarmPage")
    public AjaxResult alarmPage(Page<MonitorAlarm> page, MonitorAlarm query) {
        return AjaxResult.success(monitorService.alarmPage(page, query));
    }
 
    @ApiOperation("未处理报警列表(用于消息推送提示)")
    @GetMapping("/monitorAlarmUnhandled")
    public AjaxResult alarmUnhandled() {
        AjaxResult result = AjaxResult.success(monitorService.unhandledAlarms());
        result.put("count", monitorService.unhandledAlarmCount());
        return result;
    }
 
    @ApiOperation("处理报警")
    @PutMapping("/monitorAlarmHandle")
    public AjaxResult alarmHandle(@RequestParam Long id, @RequestParam(required = false) String handleRemark) {
        return AjaxResult.success(monitorService.alarmHandle(id, handleRemark));
    }
 
    @ApiOperation("删除报警")
    @DeleteMapping("/monitorAlarmDelete")
    public AjaxResult alarmDelete(@RequestBody List<Long> ids) {
        return AjaxResult.success(monitorService.alarmRemove(ids));
    }
 
    // ==================== 远程控制 ====================
 
    @ApiOperation("远程启停控制")
    @PostMapping("/monitorControl")
    public AjaxResult control(@RequestParam Long deviceId,
                              @RequestParam String command,
                              @RequestParam(required = false) String remark) {
        try {
            return AjaxResult.success(monitorService.control(deviceId, command, remark));
        } catch (IllegalArgumentException e) {
            return AjaxResult.error(e.getMessage());
        }
    }
 
    @ApiOperation("远程控制记录分页")
    @GetMapping("/monitorControlPage")
    public AjaxResult controlPage(Page<MonitorControl> page, MonitorControl query) {
        return AjaxResult.success(monitorService.controlPage(page, query));
    }
 
    @ApiOperation("监控总览")
    @GetMapping("/monitorOverview")
    public AjaxResult overview() {
        return AjaxResult.success(monitorService.overview());
    }
}