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;
/**
* 远程监控设备
*
* 温度、压力、能耗等关键参数实时监测,异常推送报警,支持远程启停控制
*/
@Api(tags = "远程监控设备")
@AllArgsConstructor
@RestController
@RequestMapping("/environmentAccess")
public class MonitorController {
private final MonitorService monitorService;
// ==================== 设备 ====================
@ApiOperation("监控设备分页")
@GetMapping("/monitorDevicePage")
public AjaxResult devicePage(Page 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 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 ids) {
return AjaxResult.success(monitorService.metricRemove(ids));
}
// ==================== 数据采集 ====================
@ApiOperation("监测历史数据(实时监测趋势曲线)")
@GetMapping("/monitorDataHistory")
public AjaxResult dataHistory(@RequestParam Long deviceId,
@RequestParam(required = false) String metricCode,
@RequestParam(required = false) String startTime,
@RequestParam(required = false) String endTime) {
return AjaxResult.success(monitorService.dataHistory(deviceId, metricCode, startTime, endTime));
}
@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 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 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 page, MonitorControl query) {
return AjaxResult.success(monitorService.controlPage(page, query));
}
@ApiOperation("监控总览")
@GetMapping("/monitorOverview")
public AjaxResult overview() {
return AjaxResult.success(monitorService.overview());
}
}