Selaa lähdekoodia

feat(gas): 新增可燃气体监测数据接口

- 实现查询最新一条监测数据接口- 添加按天统计数据接口(均值、最大值、最小值)
- 实现设备在线率统计功能
- 新增报警数据查询接口- 添加设备趋势分析接口(用于折线图展示)
- 实现含报警位解析的最新数据查询接口
林仔 7 kuukautta sitten
vanhempi
commit
f9e3285bd9

+ 97 - 0
pipe-network-service/zksy-admin/src/main/java/com/zksy/web/controller/base/gas/GasMonitorDataController.java

@@ -0,0 +1,97 @@
+package com.zksy.web.controller.base.gas;
+
+import com.zksy.base.gas.domain.GasMonitorData;
+import com.zksy.base.gas.service.GasMonitorDataService;
+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.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 可燃气体监测数据接口
+ */
+@Api(tags = "可燃气体监测数据", description = "可燃气体监测数据接口")
+@RestController
+@RequestMapping("/api/gas")
+public class GasMonitorDataController {
+
+    @Autowired
+    private GasMonitorDataService gasMonitorDataService;
+
+    private static final DateTimeFormatter DATE_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+    private static final DateTimeFormatter DATETIME_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+
+    /**
+     * 查询最新一条监测数据
+     */
+    @GetMapping("/latest/{deviceId}")
+    @ApiOperation("查询最新一条监测数据")
+    public AjaxResult getLatestData(@PathVariable String deviceId) {
+        return AjaxResult.success(gasMonitorDataService.getLatestByDeviceId(deviceId));
+    }
+
+    /**
+     * 按天统计(均值、最大值、最小值)
+     */
+    @GetMapping("/daily-stats/{deviceId}")
+    @ApiOperation("按天统计(均值、最大值、最小值)")
+    public AjaxResult getDailyStats(@PathVariable String deviceId,@RequestParam String date) {
+        LocalDate localDate = LocalDate.parse(date, DATE_FORMAT);
+        return AjaxResult.success(gasMonitorDataService.getDailyStats(deviceId, localDate));
+    }
+
+    /**
+     * 设备在线率统计
+     */
+    @GetMapping("/online-rate")
+    @ApiOperation("设备在线率统计")
+    public AjaxResult getOnlineRate(@RequestParam String deviceId,@RequestParam String start,@RequestParam String end) {
+        LocalDate startDate = LocalDate.parse(start, DATE_FORMAT);
+        LocalDate endDate = LocalDate.parse(end, DATE_FORMAT);
+        return AjaxResult.success(gasMonitorDataService.getOnlineRate(deviceId, startDate, endDate));
+    }
+
+    /**
+     * 查询报警数据
+     */
+    @GetMapping("/alarms")
+    @ApiOperation("查询报警数据")
+    public AjaxResult getAlarms(@RequestParam String deviceId,@RequestParam String start,@RequestParam String end, @RequestParam(defaultValue = "1000") double threshold) {
+        LocalDateTime startTime = LocalDateTime.parse(start, DATETIME_FORMAT);
+        LocalDateTime endTime = LocalDateTime.parse(end, DATETIME_FORMAT);
+        return AjaxResult.success(gasMonitorDataService.getAlarms(deviceId, startTime, endTime, threshold));
+    }
+
+    /**
+     * 设备趋势分析(折线图用)
+     */
+    @GetMapping("/trend")
+    @ApiOperation("设备趋势分析")
+    public AjaxResult getTrend(@RequestParam String deviceId, @RequestParam String start, @RequestParam String end) {
+        LocalDateTime startTime = LocalDateTime.parse(start, DATETIME_FORMAT);
+        LocalDateTime endTime = LocalDateTime.parse(end, DATETIME_FORMAT);
+        return AjaxResult.success(gasMonitorDataService.getTrend(deviceId, startTime, endTime));
+    }
+    /**
+     * 查询最新数据(含报警位解析)
+     */
+    @GetMapping("/latest-with-alarm/{deviceId}")
+    @ApiOperation("查询最新数据(含报警位解析)")
+    public AjaxResult getLatestWithAlarm(@PathVariable String deviceId) {
+        GasMonitorData data = gasMonitorDataService.getLatestWithAlarmBits(deviceId);
+        if (data == null) {
+            return AjaxResult.success(null);
+        }
+        Map<String, Object> result = new HashMap<>();
+        result.put("alarmBits", data.parseAlarmBits());
+        result.put("otherData", data);
+        return AjaxResult.success(result);
+    }
+}