Quellcode durchsuchen

添加大华接口

邵洋 vor 1 Jahr
Ursprung
Commit
bcbdc16f71
17 geänderte Dateien mit 946 neuen und 107 gelöschten Zeilen
  1. 94 0
      visualization-service/src/main/java/com/zksy/visualization/controller/AccessControlController.java
  2. 0 2
      visualization-service/src/main/java/com/zksy/visualization/controller/DeviceInfoController.java
  3. 99 3
      visualization-service/src/main/java/com/zksy/visualization/controller/FireFightingController.java
  4. 256 2
      visualization-service/src/main/java/com/zksy/visualization/controller/ParkingManageController.java
  5. 1 1
      visualization-service/src/main/java/com/zksy/visualization/controller/RotatingRingController.java
  6. 28 0
      visualization-service/src/main/java/com/zksy/visualization/domain/request/AccessControlRequest.java
  7. 40 0
      visualization-service/src/main/java/com/zksy/visualization/domain/request/CaptureRecordResponse.java
  8. 63 0
      visualization-service/src/main/java/com/zksy/visualization/domain/request/EntryExitInfoRequest.java
  9. 73 0
      visualization-service/src/main/java/com/zksy/visualization/domain/request/EventStatisticsPageRequest.java
  10. 67 0
      visualization-service/src/main/java/com/zksy/visualization/domain/request/EventStatisticsRequest.java
  11. 58 0
      visualization-service/src/main/java/com/zksy/visualization/domain/request/ImportExportStatisticsRequest.java
  12. 33 0
      visualization-service/src/main/java/com/zksy/visualization/domain/request/StatisticalSnapshotRecordsRequest.java
  13. 5 1
      visualization-service/src/main/java/com/zksy/visualization/domain/response/ChannelSubtypeResponse.java
  14. 95 87
      visualization-service/src/main/java/com/zksy/visualization/domain/response/DevicePageResponse.java
  15. 17 0
      visualization-service/src/main/java/com/zksy/visualization/domain/response/EventStatisticsResponse.java
  16. 15 11
      visualization-service/src/main/java/com/zksy/visualization/domain/response/RealTimeDataResponse.java
  17. 2 0
      visualization-service/src/main/java/com/zksy/visualization/domain/response/UsingEnergyResponse.java

+ 94 - 0
visualization-service/src/main/java/com/zksy/visualization/controller/AccessControlController.java

@@ -0,0 +1,94 @@
+package com.zksy.visualization.controller;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.zksy.common.core.domain.Result;
+import com.zksy.visualization.config.IccConfigProperty;
+import com.zksy.visualization.domain.request.AccessControlRequest;
+import com.zksy.visualization.domain.request.DevicePageRequest;
+import com.zksy.visualization.domain.response.DevicePageResponse;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import okhttp3.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.io.IOException;
+
+/**
+ * @author Administrator
+ * @version 1.0
+ * @project dh-server-micro
+ * @description 门禁管理
+ * @date 2025/1/16 09:48:44
+ */
+@RestController
+@Api(tags = "门禁管理", description = "门禁管理")
+@RequestMapping("/accessControl")
+@Slf4j
+public class AccessControlController {
+    @Autowired
+    private IccConfigProperty iccConfigProperty;
+    @Autowired
+    private OkHttpClient httpClient;
+    @Autowired
+    private RedisTemplate<String,String> redisTemplate;
+    private static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
+
+    @ApiOperation(value = "查询门禁设备列表")
+    @PostMapping("/getAccessControl")
+    public Result getAccessControl(DevicePageRequest request){
+        ObjectMapper objectMapper = new ObjectMapper();
+        String jsonParams = null;
+        try {
+            jsonParams = objectMapper.writeValueAsString(request);
+        } catch (JsonProcessingException e) {
+            log.error("JSON序列化失败: {}", e);
+            return Result.error("请求失败");
+        }
+        String authorization = redisTemplate
+                .opsForValue()
+                .get("Authorization:" + iccConfigProperty.getUsername());
+        // 创建请求体
+        RequestBody body = RequestBody.create(jsonParams, JSON);
+        // 构建请求
+        Request requestHttp = new Request.Builder()
+                .url("https://" + iccConfigProperty.getHost() + "/evo-apigw/evo-brm/"+ iccConfigProperty.getVersion()+"/device/subsystem/page")
+                .addHeader("Authorization", authorization)
+                .post(body)
+                .build();
+        // 发送请求
+        try (Response response = httpClient.newCall(requestHttp).execute()) {
+            if (!response.isSuccessful()) {
+                return Result.error("请求失败");
+            }
+            ResponseBody responseBody = response.body();
+            if (responseBody != null) {
+                String responseString = responseBody.string();
+                JsonNode rootNode = objectMapper.readTree(responseString);
+                JsonNode success = rootNode.path("success");
+                if(success.isBoolean() && success.asBoolean()) {
+                    JsonNode dataNode = rootNode.path("data");
+                    if (dataNode.isObject()) {
+                        DevicePageResponse intelligentPanelResponse = objectMapper.treeToValue(dataNode, DevicePageResponse.class);
+                        return Result.ok(intelligentPanelResponse);
+                    } else {
+                        return Result.ok(null);
+                    }
+                }else {
+                    JsonNode errMsgNode = rootNode.path("errMsg");
+                    String errMsg = errMsgNode.isTextual() ? errMsgNode.asText() : "未知错误";
+                    return Result.error(errMsg);
+                }
+            }
+        } catch (IOException e) {
+            log.error("请求失败: {}", e);
+        }
+        return Result.error("请求失败");
+    }
+}

+ 0 - 2
visualization-service/src/main/java/com/zksy/visualization/controller/DeviceInfoController.java

@@ -6,11 +6,9 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import com.zksy.common.core.domain.Result;
 import com.zksy.visualization.config.IccConfigProperty;
 import com.zksy.visualization.domain.request.ChannelPageRequest;
-import com.zksy.visualization.domain.request.DevicePageRequest;
 import com.zksy.visualization.domain.request.DeviceTreeRequest;
 import com.zksy.visualization.domain.response.ChannelPageResponse;
 import com.zksy.visualization.domain.response.DeviceDetailsResponse;
-import com.zksy.visualization.domain.response.DevicePageResponse;
 import com.zksy.visualization.domain.response.DeviceTreeResponse;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;

+ 99 - 3
visualization-service/src/main/java/com/zksy/visualization/controller/FireFightingController.java

@@ -5,10 +5,9 @@ import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.zksy.common.core.domain.Result;
 import com.zksy.visualization.config.IccConfigProperty;
-import com.zksy.visualization.domain.request.AnalogQuantityRequest;
-import com.zksy.visualization.domain.request.FireEquipmentRequest;
-import com.zksy.visualization.domain.request.FirefightingComponentsRequest;
+import com.zksy.visualization.domain.request.*;
 import com.zksy.visualization.domain.response.AnalogQuantityResponse;
+import com.zksy.visualization.domain.response.EventStatisticsResponse;
 import com.zksy.visualization.domain.response.FireEquipmentResponse;
 import com.zksy.visualization.domain.response.FirefightingComponentsResponse;
 import io.swagger.annotations.Api;
@@ -194,4 +193,101 @@ public class FireFightingController {
         return Result.error("请求失败");
     }
 
+    @ApiOperation(value = "消防事件统计")
+    @PostMapping("/queryEventStatistics")
+    public Result queryEventStatistics(EventStatisticsRequest request){
+        ObjectMapper objectMapper = new ObjectMapper();
+        String jsonParams = null;
+        String authorization = redisTemplate
+                .opsForValue()
+                .get("Authorization:" + iccConfigProperty.getUsername());
+        try {
+            jsonParams = objectMapper.writeValueAsString(request);
+        } catch (JsonProcessingException e) {
+            log.error("JSON序列化失败: {}", e);
+            return Result.error("请求失败");
+        }
+        // 创建请求体
+        RequestBody body = RequestBody.create(jsonParams, JSON);
+        // 构建请求
+        Request requestHttp = new Request.Builder()
+                .url("https://" + iccConfigProperty.getHost() + "/evo-apigw/evo-event/"+ iccConfigProperty.getVersion() +"/alarm-record/count-num")
+                .addHeader("Authorization", authorization)
+                .post(body)
+                .build();
+        // 发送请求
+        try (Response response = httpClient.newCall(requestHttp).execute()) {
+            if (!response.isSuccessful()) {
+                return Result.error("请求失败");
+            }
+            ResponseBody responseBody = response.body();
+            if (responseBody != null) {
+                String responseString = responseBody.string();
+                JsonNode rootNode = objectMapper.readTree(responseString);
+                JsonNode success = rootNode.path("success");
+                if("true".equals(success.asText())) {
+                    JsonNode dataNode = rootNode.path("data");
+                    if (dataNode.isObject()) {
+                        EventStatisticsResponse fireEquipmentResponse = objectMapper.treeToValue(dataNode, EventStatisticsResponse.class);
+                        return Result.ok(fireEquipmentResponse);
+                    } else {
+                        return Result.ok(null);
+                    }
+                }else {
+                    return Result.error("消防事件统计失败");
+                }
+            }
+        } catch (IOException e) {
+            log.error("请求失败: {}", e);
+        }
+        return Result.error("请求失败");
+    }
+    @ApiOperation(value = "alarm事件分页查询")
+    @PostMapping("/queryEventStatisticsPage")
+    public Result queryEventStatisticsPage(EventStatisticsPageRequest request){
+        ObjectMapper objectMapper = new ObjectMapper();
+        String jsonParams = null;
+        String authorization = redisTemplate
+                .opsForValue()
+                .get("Authorization:" + iccConfigProperty.getUsername());
+        try {
+            jsonParams = objectMapper.writeValueAsString(request);
+        } catch (JsonProcessingException e) {
+            log.error("JSON序列化失败: {}", e);
+            return Result.error("请求失败");
+        }
+        // 创建请求体
+        RequestBody body = RequestBody.create(jsonParams, JSON);
+        // 构建请求
+        Request requestHttp = new Request.Builder()
+                .url("https://" + iccConfigProperty.getHost() + "/evo-apigw/evo-event/"+ iccConfigProperty.getVersion() +"/alarm-record/page")
+                .addHeader("Authorization", authorization)
+                .post(body)
+                .build();
+        // 发送请求
+        try (Response response = httpClient.newCall(requestHttp).execute()) {
+            if (!response.isSuccessful()) {
+                return Result.error("请求失败");
+            }
+            ResponseBody responseBody = response.body();
+            if (responseBody != null) {
+                String responseString = responseBody.string();
+                JsonNode rootNode = objectMapper.readTree(responseString);
+                JsonNode success = rootNode.path("success");
+                if("true".equals(success.asText())) {
+                    JsonNode dataNode = rootNode.path("data");
+                    if (dataNode != null) {
+                        return Result.ok(dataNode);
+                    } else {
+                        return Result.ok(null);
+                    }
+                }else {
+                    return Result.error("消防事件统计失败");
+                }
+            }
+        } catch (IOException e) {
+            log.error("请求失败: {}", e);
+        }
+        return Result.error("请求失败");
+    }
 }

+ 256 - 2
visualization-service/src/main/java/com/zksy/visualization/controller/ParkingManageController.java

@@ -4,8 +4,7 @@ import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.zksy.common.core.domain.Result;
 import com.zksy.visualization.config.IccConfigProperty;
-import com.zksy.visualization.domain.request.ParkingListRequest;
-import com.zksy.visualization.domain.request.QueryVehicleListRequest;
+import com.zksy.visualization.domain.request.*;
 import com.zksy.visualization.domain.response.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -17,6 +16,13 @@ import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
 /**
  * @author Administrator
  * @version 1.0
@@ -302,4 +308,252 @@ public class ParkingManageController {
         }
         return Result.error("车辆列表查询失败");
     }
+
+    @ApiOperation(value = "车辆进出信息查询")
+    @GetMapping("/entryExitInfo")
+    public Result entryExitInfo(EntryExitInfoRequest queryRequest){
+        String authorization = redisTemplate
+                .opsForValue()
+                .get("Authorization:" + iccConfigProperty.getUsername());
+        HttpUrl url = new HttpUrl.Builder()
+                .scheme("https")
+                .host(iccConfigProperty.getHost())
+                .addPathSegments("/evo-apigw/ipms/caraccess/find/his")
+                .addQueryParameter("pageNum", String.valueOf(queryRequest.getPageNum()))
+                .addQueryParameter("pageSize", String.valueOf(queryRequest.getPageSize()))
+                .addQueryParameter("entranceChannelIds", queryRequest.getEntranceChannelIds() == null ? "" : queryRequest.getEntranceChannelIds())
+                .addQueryParameter("exitusChannelIds", queryRequest.getExitusChannelIds() == null ? "" : queryRequest.getExitusChannelIds())
+                .addQueryParameter("carType", queryRequest.getCarType() == null ? "" : String.valueOf(queryRequest.getCarType()))
+                .addQueryParameter("departmentId", queryRequest.getDepartmentId() == null ? "" : String.valueOf(queryRequest.getDepartmentId()))
+                .addQueryParameter("etcType", queryRequest.getEtcType() == null ? "" : String.valueOf(queryRequest.getEtcType()))
+                .addQueryParameter("ownerCode", queryRequest.getOwnerCode() == null ? "" : queryRequest.getOwnerCode())
+                .addQueryParameter("ownerLikeStr", queryRequest.getOwnerLikeStr() == null ? "" : queryRequest.getOwnerLikeStr())
+                .addQueryParameter("parkingLotCodes", queryRequest.getParkingLotCodes() == null ? "" : queryRequest.getParkingLotCodes())
+                .addQueryParameter("enterCarNumLikeStr", queryRequest.getEnterCarNumLikeStr() == null ? "" : queryRequest.getEnterCarNumLikeStr())
+                .addQueryParameter("exitCarNumLikeStr", queryRequest.getExitCarNumLikeStr() == null ? "" : queryRequest.getExitCarNumLikeStr())
+                .addQueryParameter("enterTimeStrLeft", queryRequest.getEnterTimeStrLeft() == null ? "" : queryRequest.getEnterTimeStrLeft())
+                .addQueryParameter("enterTimeStrRight", queryRequest.getEnterTimeStrRight() == null ? "" : queryRequest.getEnterTimeStrRight())
+                .addQueryParameter("exitTimeStrLeft", queryRequest.getExitTimeStrLeft() == null ? "" : queryRequest.getExitTimeStrLeft())
+                .addQueryParameter("exitTimeStrRight", queryRequest.getExitTimeStrRight() == null ? "" : queryRequest.getExitTimeStrRight())
+
+                .build();
+
+        Request request = new Request.Builder()
+                .url(url)
+                .addHeader("Authorization", authorization)
+                .build();
+        try {
+            Response response = httpClient.newCall(request).execute();
+            if(!response.isSuccessful()){
+                return Result.error("车辆列表查询失败");
+            }
+            ResponseBody responseBody = response.body();
+            if (responseBody != null) {
+                String responseString = responseBody.string();
+                ObjectMapper objectMapper = new ObjectMapper();
+                JsonNode rootNode = objectMapper.readTree(responseString);
+                JsonNode success = rootNode.path("success");
+                if(success.isBoolean() && success.asBoolean()) {
+                    JsonNode dataNode = rootNode.path("data");
+                    if (dataNode.isObject()) {
+                        return Result.ok(dataNode);
+                    } else {
+                        return Result.ok(null);
+                    }
+                }else{
+                    JsonNode errMsgNode = rootNode.path("errMsg");
+                    String errMsg = errMsgNode.isTextual() ? errMsgNode.asText() : "未知错误";
+                    return Result.error(errMsg);
+                }
+            }
+        } catch (Exception e) {
+            log.error("车辆进出信息查询失败:{}", e);
+        }
+        return Result.error("车辆进出信息查询");
+    }
+
+    @ApiOperation(value = "统计车辆进出总数")
+    @GetMapping("/importExportStatistics")
+    public Result importExportStatistics(ImportExportStatisticsRequest queryRequest){
+        String authorization = redisTemplate
+                .opsForValue()
+                .get("Authorization:" + iccConfigProperty.getUsername());
+        HttpUrl url = new HttpUrl.Builder()
+                .scheme("https")
+                .host(iccConfigProperty.getHost())
+                .addPathSegments("/evo-apigw/ipms/caraccess/find/hisCount")
+                // 添加查询参数时检查null值并处理日期格式化
+                .addQueryParameter("entranceChannelIds", nullToEmpty(queryRequest.getEntranceChannelIds()))
+                .addQueryParameter("exitusChannelIds", nullToEmpty(queryRequest.getExitusChannelIds()))
+                .addQueryParameter("carType", valueOrNull(queryRequest.getCarType()))
+                .addQueryParameter("departmentId", valueOrNull(queryRequest.getDepartmentId()))
+                .addQueryParameter("etcType", valueOrNull(queryRequest.getEtcType()))
+                .addQueryParameter("ownerCode", nullToEmpty(queryRequest.getOwnerCode()))
+                .addQueryParameter("ownerLikeStr", nullToEmpty(queryRequest.getOwnerLikeStr()))
+                .addQueryParameter("parkingLotCodes", nullToEmpty(queryRequest.getParkingLotCodes()))
+                .addQueryParameter("enterCarNumLikeStr", nullToEmpty(queryRequest.getEnterCarNumLikeStr()))
+                .addQueryParameter("exitCarNumLikeStr", nullToEmpty(queryRequest.getExitCarNumLikeStr()))
+                .addQueryParameter("enterTimeStrLeft", formatDate(queryRequest.getEnterTimeStrLeft()))
+                .addQueryParameter("enterTimeStrRight", formatDate(queryRequest.getEnterTimeStrRight()))
+                .addQueryParameter("exitTimeStrLeft", formatDate(queryRequest.getExitTimeStrLeft()))
+                .addQueryParameter("exitTimeStrRight", formatDate(queryRequest.getExitTimeStrRight()))
+                .build();
+
+        Request request = new Request.Builder()
+                .url(url)
+                .addHeader("Authorization", authorization)
+                .build();
+        try {
+            Response response = httpClient.newCall(request).execute();
+            if(!response.isSuccessful()){
+                return Result.error("统计车辆进出总数失败");
+            }
+            ResponseBody responseBody = response.body();
+            if (responseBody != null) {
+                String responseString = responseBody.string();
+                ObjectMapper objectMapper = new ObjectMapper();
+                JsonNode rootNode = objectMapper.readTree(responseString);
+                JsonNode success = rootNode.path("success");
+                if(success.isBoolean() && success.asBoolean()) {
+                    JsonNode dataNode = rootNode.path("data");
+                    if (dataNode != null) {
+                        return Result.ok(dataNode);
+                    } else {
+                        return Result.ok(null);
+                    }
+                }else{
+                    JsonNode errMsgNode = rootNode.path("errMsg");
+                    String errMsg = errMsgNode.isTextual() ? errMsgNode.asText() : "未知错误";
+                    return Result.error(errMsg);
+                }
+            }
+        } catch (Exception e) {
+            log.error("统计车辆进出总数失败:{}", e);
+        }
+        return Result.error("统计车辆进出总数");
+    }
+    @ApiOperation(value = "抓拍记录信息")
+    @GetMapping("/captureRecord")
+    public Result captureRecord(CaptureRecordResponse queryRequest){
+        String authorization = redisTemplate
+                .opsForValue()
+                .get("Authorization:" + iccConfigProperty.getUsername());
+        HttpUrl url = new HttpUrl.Builder()
+                .scheme("https")
+                .host(iccConfigProperty.getHost())
+                .addPathSegments("/evo-apigw/ipms/carcapture/find/conditions")
+                // 添加查询参数时检查null值并处理日期格式化
+                .addQueryParameter("pageNum", String.valueOf(queryRequest.getPageNum()))
+                .addQueryParameter("pageSize", String.valueOf(queryRequest.getPageSize()))
+                .addQueryParameter("carDirect", nullToEmpty(queryRequest.getCarDirect()))
+                .addQueryParameter("queryTimeBegin", formatDate(queryRequest.getQueryTimeBegin()))
+                .addQueryParameter("queryTimeEnd", formatDate(queryRequest.getQueryTimeEnd()))
+                .addQueryParameter("carNumLikeStr", nullToEmpty(queryRequest.getCarNumLikeStr()))
+                .addQueryParameter("devChnId", nullToEmpty(queryRequest.getDevChnId()))
+                .addQueryParameter("ownerName", nullToEmpty(queryRequest.getOwnerName()))
+                .build();
+
+        Request request = new Request.Builder()
+                .url(url)
+                .addHeader("Authorization", authorization)
+                .build();
+        try {
+            Response response = httpClient.newCall(request).execute();
+            if(!response.isSuccessful()){
+                return Result.error("抓拍记录信息失败");
+            }
+            ResponseBody responseBody = response.body();
+            if (responseBody != null) {
+                String responseString = responseBody.string();
+                ObjectMapper objectMapper = new ObjectMapper();
+                JsonNode rootNode = objectMapper.readTree(responseString);
+                JsonNode success = rootNode.path("success");
+                if(success.isBoolean() && success.asBoolean()) {
+                    JsonNode dataNode = rootNode.path("data");
+                    if (dataNode != null) {
+                        return Result.ok(dataNode);
+                    } else {
+                        return Result.ok(null);
+                    }
+                }else{
+                    JsonNode errMsgNode = rootNode.path("errMsg");
+                    String errMsg = errMsgNode.isTextual() ? errMsgNode.asText() : "未知错误";
+                    return Result.error(errMsg);
+                }
+            }
+        } catch (Exception e) {
+            log.error("抓拍记录信息失败:{}", e);
+        }
+        return Result.error("抓拍记录信息");
+    }
+    @ApiOperation(value = "统计抓拍记录总数")
+    @GetMapping("/statisticalSnapshotRecords")
+    public Result statisticalSnapshotRecords(StatisticalSnapshotRecordsRequest queryRequest){
+        String authorization = redisTemplate
+                .opsForValue()
+                .get("Authorization:" + iccConfigProperty.getUsername());
+        HttpUrl url = new HttpUrl.Builder()
+                .scheme("https")
+                .host(iccConfigProperty.getHost())
+                .addPathSegments("/evo-apigw/ipms/carcapture/find/conditionsCount")
+                // 添加查询参数时检查null值
+                .addEncodedQueryParameter("carDirect", nullToEmpty(queryRequest.getCarDirect()))
+                .addEncodedQueryParameter("queryTimeBegin", nullToEmpty(queryRequest.getQueryTimeBegin()))
+                .addEncodedQueryParameter("queryTimeEnd", nullToEmpty(queryRequest.getQueryTimeEnd()))
+                .addEncodedQueryParameter("carNumLikeStr", nullToEmpty(queryRequest.getCarNumLikeStr()))
+                .addEncodedQueryParameter("devChnId", nullToEmpty(queryRequest.getDevChnId()))
+                .addEncodedQueryParameter("ownerName", nullToEmpty(queryRequest.getOwnerName()))
+                .build();
+
+        Request request = new Request.Builder()
+                .url(url)
+                .addHeader("Authorization", authorization)
+                .build();
+        try {
+            Response response = httpClient.newCall(request).execute();
+            if(!response.isSuccessful()){
+                return Result.error("统计抓拍记录总数失败");
+            }
+            ResponseBody responseBody = response.body();
+            if (responseBody != null) {
+                String responseString = responseBody.string();
+                ObjectMapper objectMapper = new ObjectMapper();
+                JsonNode rootNode = objectMapper.readTree(responseString);
+                JsonNode success = rootNode.path("success");
+                if(success.isBoolean() && success.asBoolean()) {
+                    JsonNode dataNode = rootNode.path("data");
+                    if (dataNode != null) {
+                        return Result.ok(dataNode);
+                    } else {
+                        return Result.ok(null);
+                    }
+                }else{
+                    JsonNode errMsgNode = rootNode.path("errMsg");
+                    String errMsg = errMsgNode.isTextual() ? errMsgNode.asText() : "未知错误";
+                    return Result.error(errMsg);
+                }
+            }
+        } catch (Exception e) {
+            log.error("统计抓拍记录总数失败:{}", e);
+        }
+        return Result.error("统计抓拍记录总数");
+    }
+    // 辅助方法:将null转换为空字符串
+    private String nullToEmpty(String str) {
+        return str == null ? "" : str;
+    }
+
+    // 辅助方法:将非空的Integer或Long值转换为字符串,否则返回null
+    private String valueOrNull(Number number) {
+        return number == null ? null : String.valueOf(number);
+    }
+
+    // 辅助方法:格式化日期,若日期为null则返回null
+    private String formatDate(Date date) {
+        if (date == null) {
+            return null;
+        }
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        return sdf.format(date);
+    }
 }

+ 1 - 1
visualization-service/src/main/java/com/zksy/visualization/controller/RotatingRingController.java

@@ -114,7 +114,7 @@ public class RotatingRingController {
                 String responseString = responseBody.string();
                 ObjectMapper objectMapper = new ObjectMapper();
                 JsonNode rootNode = objectMapper.readTree(responseString);
-                    JsonNode dataNode = rootNode.path("result");
+                    JsonNode dataNode = rootNode.path("data");
                     if (dataNode.isObject()) {
                         RealTimeDataResponse realTimeDataResponse = objectMapper.treeToValue(dataNode, RealTimeDataResponse.class);
                         return Result.ok(realTimeDataResponse);

+ 28 - 0
visualization-service/src/main/java/com/zksy/visualization/domain/request/AccessControlRequest.java

@@ -0,0 +1,28 @@
+package com.zksy.visualization.domain.request;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author Administrator
+ * @version 1.0
+ * @project dh-server-micro
+ * @description 门禁入参
+ * @date 2025/1/16 09:49:18
+ */
+@Data
+public class AccessControlRequest {
+    @ApiModelProperty(value = "设备大类,门禁设备:8", required = true,example = "8")
+    private List<String> categorys;
+    @ApiModelProperty(value = "设备小类,1\t普通门禁\n" +
+            "15\t人证核验终端\n" +
+            "16\t人脸门禁\n" +
+            "18\t二代RFID设备\n" +
+            "19\t人脸提取设备\n" +
+            "20\t第三方门禁\n" +
+            "21\t集中控制器\n" +
+            "26\t人脸对讲门禁", required = true)
+    private List<String> types;
+}

+ 40 - 0
visualization-service/src/main/java/com/zksy/visualization/domain/request/CaptureRecordResponse.java

@@ -0,0 +1,40 @@
+package com.zksy.visualization.domain.request;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author Administrator
+ * @version 1.0
+ * @project dh-server-micro
+ * @description 抓拍记录信息
+ * @date 2025/1/16 16:30:25
+ */
+@Data
+public class CaptureRecordResponse {
+    @ApiModelProperty(value = "页码", required = true)
+    private int pageNum;
+
+    @ApiModelProperty(value = "分页数据大小,最大1000", required = true)
+    private int pageSize;
+
+    @ApiModelProperty(value = "行车方向,8-进场,9-出场", required = false)
+    private String carDirect;
+
+    @ApiModelProperty(value = "查询开始时间 ,格式:yyyy-MM-dd HH:mm:ss", required = false)
+    private Date queryTimeBegin;
+
+    @ApiModelProperty(value = "查询截止时间 ,格式:yyyy-MM-dd HH:mm:ss", required = false)
+    private Date queryTimeEnd;
+
+    @ApiModelProperty(value = "车牌号码模糊查询", required = false)
+    private String carNumLikeStr;
+
+    @ApiModelProperty(value = "通道id,多个时用半角逗号隔开;通道id调停车管理下的设备列表查询接口获取,返回字段encoderUnits.channels下的deviceCode、unitSeq、channelSeq,并组装成完整的通道编码,组装格式:deviceCode$1$unitSeq$channelSeq", required = false)
+    private String devChnId;
+
+    @ApiModelProperty(value = "车主姓名", required = false)
+    private String ownerName;
+}

+ 63 - 0
visualization-service/src/main/java/com/zksy/visualization/domain/request/EntryExitInfoRequest.java

@@ -0,0 +1,63 @@
+package com.zksy.visualization.domain.request;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author Administrator
+ * @version 1.0
+ * @project dh-server-micro
+ * @description 车辆进出信息查询
+ * @date 2025/1/16 15:43:49
+ */
+@Data
+public class EntryExitInfoRequest {
+
+    @ApiModelProperty(value = "页码", required = true)
+    private int pageNum;
+
+    @ApiModelProperty(value = "分页数据大小,最大1000", required = true)
+    private int pageSize;
+
+    @ApiModelProperty(value = "入口通道id,多个时用半角逗号隔开")
+    private String entranceChannelIds;
+
+    @ApiModelProperty(value = "出口通道id,多个时用半角逗号隔开")
+    private String exitusChannelIds;
+
+    @ApiModelProperty(value = "车辆类型 (1-内部车,0-外部车,字段不送则查询全部)")
+    private Integer carType;
+
+    @ApiModelProperty(value = "部门ID")
+    private Long departmentId;
+
+    @ApiModelProperty(value = "是否ETC用户(0:否 1:是)")
+    private Integer etcType;
+
+    @ApiModelProperty(value = "车主编码")
+    private String ownerCode;
+
+    @ApiModelProperty(value = "车主名称模糊查询")
+    private String ownerLikeStr;
+
+    @ApiModelProperty(value = "所属场区编码(多个时半角逗号分隔)")
+    private String parkingLotCodes;
+
+    @ApiModelProperty(value = "进场车牌")
+    private String enterCarNumLikeStr;
+
+    @ApiModelProperty(value = "出场车牌")
+    private String exitCarNumLikeStr;
+
+    @ApiModelProperty(value = "进场时间起,格式:yyyy-MM-dd HH:mm:ss")
+    private String enterTimeStrLeft;
+
+    @ApiModelProperty(value = "进场时间止,格式:yyyy-MM-dd HH:mm:ss")
+    private String enterTimeStrRight;
+
+    @ApiModelProperty(value = "出场时间起,格式:yyyy-MM-dd HH:mm:ss")
+    private String exitTimeStrLeft;
+
+    @ApiModelProperty(value = "出场时间止,格式:yyyy-MM-dd HH:mm:ss")
+    private String exitTimeStrRight;
+}

+ 73 - 0
visualization-service/src/main/java/com/zksy/visualization/domain/request/EventStatisticsPageRequest.java

@@ -0,0 +1,73 @@
+package com.zksy.visualization.domain.request;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author Administrator
+ * @version 1.0
+ * @project dh-server-micro
+ * @description 事件分页查询
+ * @date 2025/1/17 10:59:16
+ */
+@Data
+public class EventStatisticsPageRequest {
+    @ApiModelProperty(value = "当前页", required = true)
+    private Integer pageNum;
+
+    @ApiModelProperty(value = "每页记录数", required = true)
+    private Integer pageSize;
+
+    @ApiModelProperty(value = "排序字段", allowableValues = "alarmDate,handleUser,handleDate,orgName,alarmPosition")
+    private String sort;
+
+    @ApiModelProperty(value = "排序方式", allowableValues = "ASC,DESC")
+    private String sortType;
+
+    @ApiModelProperty(value = "报警状态", allowableValues = "1,2")
+    private Integer alarmStat;
+
+    @ApiModelProperty(value = "报警处理状态", example = "[1,2,3,4,0]")
+    private List<Integer> handleStatList;
+
+    @ApiModelProperty(value = "所属组织编码", example = "[\"code1\",\"code2\"]")
+    private List<String> orgCodeList;
+
+    @ApiModelProperty(value = "设备编码或通道编码", example = "[\"nodeCode1\",\"nodeCode2\"]")
+    private List<String> nodeCodeList;
+
+    @ApiModelProperty(value = "报警开始时间", example = "yyyy-MM-dd HH:mm:ss")
+    private String alarmStartDateString;
+
+    @ApiModelProperty(value = "报警结束时间", example = "yyyy-MM-dd HH:mm:ss")
+    private String alarmEndDateString;
+
+    @ApiModelProperty(value = "处理开始时间", example = "yyyy-MM-dd HH:mm:ss")
+    private String handleStartDateString;
+
+    @ApiModelProperty(value = "处理结束时间", example = "yyyy-MM-dd HH:mm:ss")
+    private String handleEndDateString;
+
+    @ApiModelProperty(value = "事件类型列表", example = "[1,2,3]")
+    private List<Integer> alarmTypeList;
+
+    @ApiModelProperty(value = "事件类型", allowableValues = "枚举参考报警类型")
+    private Integer alarmType;
+
+    @ApiModelProperty(value = "设备大类", allowableValues = "枚举参考设备大类")
+    private Integer deviceCategory;
+
+    @ApiModelProperty(value = "报警预案标识", allowableValues = "0,1")
+    private Integer isEvent;
+
+    @ApiModelProperty(value = "报警等级", example = "[1,2,3]")
+    private List<Integer> alarmGradeList;
+
+    @ApiModelProperty(value = "语言", example = "zh-cn")
+    private String language;
+
+    @ApiModelProperty(value = "查询类型", allowableValues = "0,1")
+    private Integer dbType;
+}

+ 67 - 0
visualization-service/src/main/java/com/zksy/visualization/domain/request/EventStatisticsRequest.java

@@ -0,0 +1,67 @@
+package com.zksy.visualization.domain.request;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author Administrator
+ * @version 1.0
+ * @project dh-server-micro
+ * @description 消防事件统计
+ * @date 2025/1/16 15:00:41
+ */
+@Data
+public class EventStatisticsRequest {
+    @ApiModelProperty(value = "排序字段", example = "alarmDate, handleUser, handleDate, orgName, alarmPosition", required = false)
+    private String sort;
+
+    @ApiModelProperty(value = "排序方式", example = "ASC, DESC", required = false)
+    private String sortType;
+
+    @ApiModelProperty(value = "报警状态", allowableValues = "1,2", required = false)
+    private Integer alarmStat;
+
+    @ApiModelProperty(value = "报警处理状态", allowableValues = "1,2,3,4,0", required = false)
+    private List<Integer> handleStatList;
+
+    @ApiModelProperty(value = "所属组织编码", required = false)
+    private List<String> orgCodeList;
+
+    @ApiModelProperty(value = "设备编码或通道编码", required = false)
+    private List<String> nodeCodeList;
+
+    @ApiModelProperty(value = "报警开始时间", example = "yyyy-MM-dd HH:mm:ss", required = false)
+    private String alarmStartDateString;
+
+    @ApiModelProperty(value = "报警结束时间", example = "yyyy-MM-dd HH:mm:ss", required = false)
+    private String alarmEndDateString;
+
+    @ApiModelProperty(value = "处理开始时间", example = "yyyy-MM-dd HH:mm:ss", required = false)
+    private String handleStartDateString;
+
+    @ApiModelProperty(value = "处理结束时间", example = "yyyy-MM-dd HH:mm:ss", required = false)
+    private String handleEndDateString;
+
+    @ApiModelProperty(value = "事件类型列表", required = false)
+    private List<Integer> alarmTypeList;
+
+    @ApiModelProperty(value = "事件类型", required = false)
+    private Integer alarmType;
+
+    @ApiModelProperty(value = "设备大类", required = false)
+    private Integer deviceCategory;
+
+    @ApiModelProperty(value = "报警预案标识", allowableValues = "0,1", required = false)
+    private Integer isEvent;
+
+    @ApiModelProperty(value = "报警等级", allowableValues = "1,2,3", required = false)
+    private List<Integer> alarmGradeList;
+
+    @ApiModelProperty(value = "语言", example = "zh-cn", required = false)
+    private String language;
+
+    @ApiModelProperty(value = "查询类型", allowableValues = "0,1", required = false)
+    private Integer dbType;
+}

+ 58 - 0
visualization-service/src/main/java/com/zksy/visualization/domain/request/ImportExportStatisticsRequest.java

@@ -0,0 +1,58 @@
+package com.zksy.visualization.domain.request;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author Administrator
+ * @version 1.0
+ * @project dh-server-micro
+ * @description 统计车辆进出总数
+ * @date 2025/1/16 16:02:44
+ */
+@Data
+public class ImportExportStatisticsRequest {
+    @ApiModelProperty(value = "入口通道id,多个时用半角逗号隔开; 获取方式一:调道闸通道信息全量查询接口 ,返回字段channelId;获取方式二:调设备列表查询接口 ,返回字段sluiceUnits.channels下的deviceCode、unitSeq、channelSeq,并组装成完整的通道编码,组装格式:deviceCode$14$unitSeq$channelSeq", required = false)
+    private String entranceChannelIds;
+
+    @ApiModelProperty(value = "出口通道id,多个时用半角逗号隔开; 获取方式一:调道闸通道信息全量查询接口 ,返回字段channelId;获取方式二:调设备列表查询接口 ,返回字段sluiceUnits.channels下的deviceCode、unitSeq、channelSeq,并组装成完整的通道编码,组装格式:deviceCode$14$unitSeq$channelSeq", required = false)
+    private String exitusChannelIds;
+
+    @ApiModelProperty(value = "车辆类型 (1-内部车,0-外部车,字段不送则查询全部)", required = false)
+    private Integer carType;
+
+    @ApiModelProperty(value = "部门ID", required = false)
+    private Long departmentId;
+
+    @ApiModelProperty(value = "是否ETC用户(0:否 1:是)", required = false)
+    private Integer etcType;
+
+    @ApiModelProperty(value = "车主编码", required = false)
+    private String ownerCode;
+
+    @ApiModelProperty(value = "车主名称模糊查询", required = false)
+    private String ownerLikeStr;
+
+    @ApiModelProperty(value = "所属场区编码(多个时半角逗号分隔)", required = false)
+    private String parkingLotCodes;
+
+    @ApiModelProperty(value = "进场车牌", required = false)
+    private String enterCarNumLikeStr;
+
+    @ApiModelProperty(value = "出场车牌", required = false)
+    private String exitCarNumLikeStr;
+
+    @ApiModelProperty(value = "进场时间起,格式:yyyy-MM-dd HH:mm:ss", required = false)
+    private Date enterTimeStrLeft;
+
+    @ApiModelProperty(value = "进场时间止,格式:yyyy-MM-dd HH:mm:ss", required = false)
+    private Date enterTimeStrRight;
+
+    @ApiModelProperty(value = "出场时间起,格式:yyyy-MM-dd HH:mm:ss", required = false)
+    private Date exitTimeStrLeft;
+
+    @ApiModelProperty(value = "出场时间止,格式:yyyy-MM-dd HH:mm:ss", required = false)
+    private Date exitTimeStrRight;
+}

+ 33 - 0
visualization-service/src/main/java/com/zksy/visualization/domain/request/StatisticalSnapshotRecordsRequest.java

@@ -0,0 +1,33 @@
+package com.zksy.visualization.domain.request;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author Administrator
+ * @version 1.0
+ * @project dh-server-micro
+ * @description 统计抓拍记录总数
+ * @date 2025/1/16 16:36:28
+ */
+@Data
+public class StatisticalSnapshotRecordsRequest {
+    @ApiModelProperty(value = "行车方向,8-进场,9-出场", required = false)
+    private String carDirect;
+
+    @ApiModelProperty(value = "查询开始时间,格式:yyyy-MM-dd HH:mm:ss", required = false)
+    private String queryTimeBegin;
+
+    @ApiModelProperty(value = "查询截止时间,格式:yyyy-MM-dd HH:mm:ss", required = false)
+    private String queryTimeEnd;
+
+    @ApiModelProperty(value = "车牌号码模糊查询", required = false)
+    private String carNumLikeStr;
+
+    @ApiModelProperty(value = "通道id,多个时用半角逗号隔开;通道id调停车管理下的设备列表查询接口获取,返回字段encoderUnits.channels下的deviceCode、unitSeq、channelSeq,并组装成完整的通道编码,组装格式:deviceCode$1$unitSeq$channelSeq", required = false)
+    private String devChnId;
+
+    @ApiModelProperty(value = "车主姓名", required = false)
+    private String ownerName;
+
+}

+ 5 - 1
visualization-service/src/main/java/com/zksy/visualization/domain/response/ChannelSubtypeResponse.java

@@ -27,7 +27,7 @@ public class ChannelSubtypeResponse {
     private List<DictionaryItem> result;
 
 @Data
-class DictionaryItem {
+public static class DictionaryItem {
 
     @ApiModelProperty(value = "id")
     private Long id;
@@ -50,7 +50,11 @@ class DictionaryItem {
     @ApiModelProperty(value = "所属场景名称")
     private String par2Name;
 
+    private String type;
+
     @ApiModelProperty(value = "描述")
     private String memo;
+
+    private Integer deleteMark;
 }
 }

+ 95 - 87
visualization-service/src/main/java/com/zksy/visualization/domain/response/DevicePageResponse.java

@@ -1,6 +1,5 @@
 package com.zksy.visualization.domain.response;
 
-import com.fasterxml.jackson.annotation.JsonInclude;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -9,141 +8,150 @@ import java.util.List;
 @Data
 @ApiModel(description = "设备分页查询响应")
 public class DevicePageResponse {
-    @ApiModelProperty(value = "当前页码", example = "1", required = true)
+    @ApiModelProperty(value = "当前页码", example = "1")
     private int currentPage;
 
-    @ApiModelProperty(value = "总页数", example = "5", required = true)
+    @ApiModelProperty(value = "总页数", example = "5")
     private int totalPage;
 
-    @ApiModelProperty(value = "每页记录数", example = "10", required = true)
+    @ApiModelProperty(value = "每页记录数", example = "10")
     private int pageSize;
 
-    @ApiModelProperty(value = "总数", example = "45", required = true)
+    @ApiModelProperty(value = "总数", example = "45")
     private int totalRows;
 
-    @ApiModelProperty(value = "数据列表", required = true)
+    @ApiModelProperty(value = "数据列表")
     private List<DeviceInfoVO> pageData;
     @Data
-    @ApiModel(description = "设备信息")
-    @JsonInclude(JsonInclude.Include.NON_NULL)
-    public static class DeviceInfoVO {
-
-        @ApiModelProperty(value = "设备编码", example = "1000001", required = true)
+    private static class DeviceInfoVO {
+        @ApiModelProperty(value = "设备编码")
         private String deviceCode;
-
-        @ApiModelProperty(value = "设备名称", example = "172.16.100.2", required = true)
+        @ApiModelProperty(value = "设备名称")
         private String deviceName;
-
-        @ApiModelProperty(value = "设备唯一标识码", example = "SN123456789", required = true)
+        @ApiModelProperty(value = "设备唯一标识码")
         private String deviceSn;
-
-        @ApiModelProperty(value = "设备大类", example = "93", required = true)
+        @ApiModelProperty(value = "设备mac")
+        private String deviceMac;
+        @ApiModelProperty(value = "设备大类")
         private Integer deviceCategory;
-
-        @ApiModelProperty(value = "设备小类", example = "类型A", required = true)
+        @ApiModelProperty(value = "设备小类")
         private String deviceType;
-
-        @ApiModelProperty(value = "厂商类型", example = "厂商X", required = true)
+        @ApiModelProperty(value = "厂商类型")
         private String deviceManufacturer;
-
-        @ApiModelProperty(value = "设备IP", example = "172.16.100.2", required = true)
+        @ApiModelProperty(value = "设备型号")
+        private String deviceModel;
+        @ApiModelProperty(value = "设备IP")
         private String deviceIp;
-
-        @ApiModelProperty(value = "设备端口", example = "8080", required = true)
+        @ApiModelProperty(value = "设备端口")
         private Integer devicePort;
-
-        @ApiModelProperty(value = "设备所属组织编码", example = "001", required = true)
+        @ApiModelProperty(value = "设备所属组织编码")
         private String ownerCode;
-
-        @ApiModelProperty(value = "设备在线状态", example = "0", required = true)
+        @ApiModelProperty(value = "添加方式")
+        private String loginType;
+        @ApiModelProperty(value = "登录名称")
+        private String loginName;
+        @ApiModelProperty(value = "登录密码")
+        private String loginPassword;
+        @ApiModelProperty(value = "是否修改密码")
+        private Boolean isPwdChange;
+        @ApiModelProperty(value = "设备在线状态")
         private Integer isOnline;
-
-        @ApiModelProperty(value = "设备离线原因", example = "断电", required = true)
+        @ApiModelProperty(value = "设备在线状态更新时间(yyyy-MM-dd HH:mm:ss),设备由在线变为离线或者离线变为在线都会进行更新")
+        private String onlineUpdateTime;
+        @ApiModelProperty(value = "设备在线版本")
+        private String onlineUpdateVersion;
+        @ApiModelProperty(value = "设备离线原因")
         private String offlineReason;
-
-        @ApiModelProperty(value = "设备所属子系统", example = "evo-runs-adapt", required = true)
+        @ApiModelProperty(value = "是否是虚拟通道")
+        private String isVirtual;
+        @ApiModelProperty(value = "设备所属子系统")
         private String subSystem;
-
-        @ApiModelProperty(value = "设备扩展属性,自定义json数据", example = "{}", required = true)
+        @ApiModelProperty(value = "是否休眠1休眠,0非休眠")
+        private Integer sleepStat;
+        @ApiModelProperty(value = "第三服务代理端口")
+        private Integer thirdProxyPort;
+        @ApiModelProperty(value = "第三服务器编码")
+        private String thirdProxyServerCode;
+        @ApiModelProperty(value = "加密狗是否到期0否,1是")
+        private Integer licenseLimit;
+        @ApiModelProperty(value = "设备扩展属性,自定义json数据")
         private Object devExt;
-
-        @ApiModelProperty(value = "经度", example = "116.4074", required = true)
+        @ApiModelProperty(value = "经度")
         private String gpsX;
-
-        @ApiModelProperty(value = "纬度", example = "39.9042", required = true)
+        @ApiModelProperty(value = "纬度")
         private String gpsY;
-
-        @ApiModelProperty(value = "单元信息", required = true)
+        @ApiModelProperty(value = "能力集")
+        private String capability;
+        @ApiModelProperty(value = "单元信息")
         private List<UnitVO> units;
+        @ApiModelProperty(value = "修改时间")
+        private Long updateTime;
+        @ApiModelProperty(value = "创建时间")
+        private Long createTime;
+        private Long recordUpdateTime;
     }
     @Data
-    @ApiModel(description = "单元信息")
-    @JsonInclude(JsonInclude.Include.NON_NULL)
-    public static class UnitVO {
-
-        @ApiModelProperty(value = "单元类型", example = "1", required = true)
+    private static class UnitVO {
+        @ApiModelProperty(value = "单元类型")
         private Integer unitType;
-
-        @ApiModelProperty(value = "单元序号", example = "1", required = true)
+        @ApiModelProperty(value = "单元序号")
         private Integer unitSeq;
-
-        @ApiModelProperty(value = "排序码", example = "1", required = true)
+        @ApiModelProperty(value = "排序码")
         private Integer sort;
-
-        @ApiModelProperty(value = "能力集", example = "能力A,能力B", required = true)
+        @ApiModelProperty(value = "能力集")
         private String capability;
-
-        @ApiModelProperty(value = "单元扩展信息", example = "{}", required = true)
+        @ApiModelProperty(value = "单元扩展信息")
         private Object unitExt;
-
-        @ApiModelProperty(value = "单元通道信息", required = true)
+        @ApiModelProperty(value = "单元通道信息")
         private List<ChannelVO> channels;
     }
     @Data
-    @ApiModel(description = "通道信息")
-    @JsonInclude(JsonInclude.Include.NON_NULL)
-    public static class ChannelVO {
-
-        @ApiModelProperty(value = "通道编码", example = "CH123456", required = true)
+    private static class ChannelVO {
+        @ApiModelProperty(value = "通道编码")
         private String channelCode;
-
-        @ApiModelProperty(value = "通道名称", example = "通道1", required = true)
+        @ApiModelProperty(value = "通道名称")
         private String channelName;
-
-        @ApiModelProperty(value = "通道序号", example = "1", required = true)
+        @ApiModelProperty(value = "通道序号")
         private Integer channelSeq;
-
-        @ApiModelProperty(value = "通道唯一标识码", example = "CSN123456789", required = true)
+        @ApiModelProperty(value = "通道唯一标识码")
         private String channelSn;
-
-        @ApiModelProperty(value = "通道类型", example = "类型A", required = true)
+        @ApiModelProperty(value = "设备所属组织编码")
+        private String ownerCode;
+        @ApiModelProperty(value = "通道类型")
         private String channelType;
-
-        @ApiModelProperty(value = "通道能力集", example = "能力A,能力B", required = true)
+        @ApiModelProperty(value = "通道能力集,详细说明请参考通道能力级说明")
         private String capability;
-
-        @ApiModelProperty(value = "摄像头类型", example = "高清摄像头", required = false)
+        @ApiModelProperty(value = "摄像头类型,视频通道会返回该字段")
         private String cameraType;
-
-        @ApiModelProperty(value = "是否已接入:0-未接入,1-接入", example = "1", required = true)
+        @ApiModelProperty(value = "是否已接入:0-未接入,1-接入")
         private Integer access;
-
-        @ApiModelProperty(value = "经度", example = "116.4074", required = false)
+        @ApiModelProperty(value = "经度")
         private String gpsX;
-
-        @ApiModelProperty(value = "纬度", example = "39.9042", required = false)
+        @ApiModelProperty(value = "纬度")
         private String gpsY;
-
-        @ApiModelProperty(value = "Z轴", example = "10.0", required = false)
+        @ApiModelProperty(value = "设备在线状态")
+        private Integer isOnline;
+        @ApiModelProperty(value = "设备在线状态更新时间(yyyy-MM-dd HH:mm:ss),设备由在线变为离线或者离线变为在线都会进行更新")
+        private String onlineUpdateTime;
+        @ApiModelProperty(value = "设备在线版本")
+        private String onlineUpdateVersion;
+        @ApiModelProperty(value = "是否休眠1休眠,0非休眠")
+        private Integer sleepStat;
+        @ApiModelProperty(value = "Z轴")
         private String gpsZ;
-
-        @ApiModelProperty(value = "通道描述", example = "描述信息", required = false)
+        @ApiModelProperty(value = "通道描述")
         private String memo;
-
-        @ApiModelProperty(value = "状态 :0-不启用,1-启用", example = "1", required = true)
+        @ApiModelProperty(value = "状态 :0-不启用,1-启用")
         private Integer stat;
-
-        @ApiModelProperty(value = "通道扩展属性 自定义", example = "{}", required = false)
+        @ApiModelProperty(value = "通道扩展属性 自定义 ")
         private Object chExt;
+        @ApiModelProperty(value = "是否是虚拟通道")
+        private String isVirtual;
+        @ApiModelProperty(value = "修改时间")
+        private Long updateTime;
+        @ApiModelProperty(value = "创建时间")
+        private Long createTime;
+        private Long treeSort;
+        private String newTreeSort;
     }
 }

+ 17 - 0
visualization-service/src/main/java/com/zksy/visualization/domain/response/EventStatisticsResponse.java

@@ -0,0 +1,17 @@
+package com.zksy.visualization.domain.response;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author Administrator
+ * @version 1.0
+ * @project dh-server-micro
+ * @description 消防事件统计
+ * @date 2025/1/16 15:02:26
+ */
+@Data
+public class EventStatisticsResponse {
+        @ApiModelProperty(value = "报警数量")
+        private Integer value;
+}

+ 15 - 11
visualization-service/src/main/java/com/zksy/visualization/domain/response/RealTimeDataResponse.java

@@ -1,6 +1,8 @@
 package com.zksy.visualization.domain.response;
 
+import io.minio.messages.Item;
 import io.swagger.annotations.ApiModelProperty;
+import io.swagger.models.auth.In;
 import lombok.Data;
 
 import java.util.List;
@@ -24,7 +26,7 @@ public class RealTimeDataResponse {
     private Integer totalCount;
 
     @ApiModelProperty(value = "返回数据对象")
-    private Result result;
+    private List<Result> result;
 
     @Data
     public static class Result {
@@ -43,8 +45,14 @@ public class RealTimeDataResponse {
 
         @ApiModelProperty(value = "实时数据")
         private List<DataItem> dataList;
+
+        private String channelId;
+        private String failureCause;
+        private String result;
+        private String domainId;
     }
 
+
     @Data
     public static class DataItem {
 
@@ -63,20 +71,16 @@ public class RealTimeDataResponse {
         @ApiModelProperty(value = "测量值含义")
         private String measuredValName;
 
+        private String setupVal;
+
         @ApiModelProperty(value = "点位单位")
-        private Integer signalUnit;
+        private String signalUnit;
 
         @ApiModelProperty(value = "状态:0,正常;1-4,告警")
-        private Status status;
-    }
+        private Integer status;
 
-    @Data
-    public static class Status {
-
-        @ApiModelProperty(value = "状态代码")
-        private Integer code;
+        private String time;
 
-        @ApiModelProperty(value = "状态描述")
-        private String description;
+        private String serialNo;
     }
 }

+ 2 - 0
visualization-service/src/main/java/com/zksy/visualization/domain/response/UsingEnergyResponse.java

@@ -28,6 +28,8 @@ public class UsingEnergyResponse {
         @ApiModelProperty(value = "耗能")
         private List<String> electricityConsumption;
 
+        private List<String> lastElectricityConsumption;
+
         @ApiModelProperty(value = "环比")
         private List<String> monthRation;