浏览代码

feat(zk-api-service): 新增通用接口服务模块
- 添加 zk-api-service 模块,实现通用接口服务功能
- 新增 AjaxResult 工具类,用于统一返回结果封装
- 实现环境数据分页查询接口
-配置 Nacos 服务注册发现和配置管理
- 集成 Sentinel 流量控制和熔断功能

林仔 9 月之前
父节点
当前提交
f9ade07347

+ 24 - 0
environment-service/src/main/java/com/zksy/environment/controller/ERealTimeDataController.java

@@ -0,0 +1,24 @@
+package com.zksy.environment.controller;
+
+import cn.hutool.core.date.DateTime;
+import com.zksy.common.utils.AjaxResult;
+import com.zksy.environment.service.ERealTimeDataService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/ERealTimeData")
+@Api(tags = "环境数据信息", description = "环境数据信息")
+public class ERealTimeDataController {
+    @Autowired
+    private ERealTimeDataService eRealTimeDataService;
+    @GetMapping("/findByPage")
+    @ApiOperation(value = "分页查询")
+    public AjaxResult getPictureMessagePage(long pageNum, long pageSize,Integer deviceId, DateTime startTime, DateTime endTime) {
+        return AjaxResult.success(eRealTimeDataService.findByPage(pageNum, pageSize,deviceId, startTime, endTime));
+    }
+}

+ 0 - 18
environment-service/src/main/java/com/zksy/environment/controller/WeatherDataController.java

@@ -1,18 +0,0 @@
-package com.zksy.environment.controller;
-
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-@RestController
-@RequestMapping("/weatherData")
-@Api(tags = "环境数据信息", description = "环境数据信息")
-public class WeatherDataController {
-    @GetMapping("/findByPage")
-    @ApiOperation(value = "分页查询")
-    public void getPictureMessagePage() {
-        System.out.println("分页查询");
-    }
-}

+ 3 - 0
environment-service/src/main/java/com/zksy/environment/service/ERealTimeDataService.java

@@ -1,5 +1,7 @@
 package com.zksy.environment.service;
 
+import cn.hutool.core.date.DateTime;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.zksy.environment.domain.ERealTimeData;
 import com.baomidou.mybatisplus.extension.service.IService;
 
@@ -9,5 +11,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
 * @createDate 2025-08-27 10:30:48
 */
 public interface ERealTimeDataService extends IService<ERealTimeData> {
+    Page<ERealTimeData> findByPage(long pageNum, long pageSize, Integer deviceId, DateTime startTime, DateTime endTime);
 
 }

+ 13 - 1
environment-service/src/main/java/com/zksy/environment/service/impl/ERealTimeDataServiceImpl.java

@@ -1,5 +1,8 @@
 package com.zksy.environment.service.impl;
 
+import cn.hutool.core.date.DateTime;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.zksy.environment.domain.ERealTimeData;
 import com.zksy.environment.service.ERealTimeDataService;
@@ -14,7 +17,16 @@ import org.springframework.stereotype.Service;
 @Service
 public class ERealTimeDataServiceImpl extends ServiceImpl<ERealTimeDataMapper, ERealTimeData>
     implements ERealTimeDataService{
-
+    @Override
+    public Page<ERealTimeData> findByPage(long pageNum, long pageSize, Integer deviceId, DateTime startTime, DateTime endTime) {
+        Page<ERealTimeData> page = new Page<>(pageNum, pageSize);
+        LambdaQueryWrapper<ERealTimeData> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(ERealTimeData::getDeviceId,deviceId)
+                .ge(ERealTimeData::getCreateTime,startTime)
+                .le(ERealTimeData::getCreateTime,endTime);
+        queryWrapper.orderByDesc(ERealTimeData::getCreateTime);
+        return this.page(page,queryWrapper);
+    }
 }
 
 

+ 54 - 49
logs/zksy-gateway/spring.log

@@ -1,12 +1,12 @@
-11:31:01:387  INFO 14384 --- [main] com.zksy.gateway.GatewayApplication      : The following 1 profile is active: "prod"
-11:31:01:854  INFO 14384 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode
-11:31:01:856  INFO 14384 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.
-11:31:01:872  INFO 14384 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 5 ms. Found 0 Redis repository interfaces.
-11:31:02:021  INFO 14384 --- [main] o.s.cloud.context.scope.GenericScope     : BeanFactory id=8f77ea2c-9f60-3dbf-90da-74a4ff075b6e
-11:31:02:057  INFO 14384 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.client.loadbalancer.reactive.LoadBalancerBeanPostProcessorAutoConfiguration' of type [org.springframework.cloud.client.loadbalancer.reactive.LoadBalancerBeanPostProcessorAutoConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-11:31:02:059  INFO 14384 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.client.loadbalancer.reactive.LoadBalancerBeanPostProcessorAutoConfiguration$ReactorDeferringLoadBalancerFilterConfig' of type [org.springframework.cloud.client.loadbalancer.reactive.LoadBalancerBeanPostProcessorAutoConfiguration$ReactorDeferringLoadBalancerFilterConfig] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-11:31:02:059  INFO 14384 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'reactorDeferringLoadBalancerExchangeFilterFunction' of type [org.springframework.cloud.client.loadbalancer.reactive.DeferringLoadBalancerExchangeFilterFunction] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-11:31:02:587 DEBUG 14384 --- [main] c.zksy.gateway.route.DynamicRouteLoader  : 监听到路由配置变更,[
+10:25:48:792  INFO 21528 --- [main] com.zksy.gateway.GatewayApplication      : The following 1 profile is active: "prod"
+10:25:49:278  INFO 21528 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode
+10:25:49:280  INFO 21528 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.
+10:25:49:293  INFO 21528 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 5 ms. Found 0 Redis repository interfaces.
+10:25:49:382  INFO 21528 --- [main] o.s.cloud.context.scope.GenericScope     : BeanFactory id=8f77ea2c-9f60-3dbf-90da-74a4ff075b6e
+10:25:49:418  INFO 21528 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.client.loadbalancer.reactive.LoadBalancerBeanPostProcessorAutoConfiguration' of type [org.springframework.cloud.client.loadbalancer.reactive.LoadBalancerBeanPostProcessorAutoConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+10:25:49:419  INFO 21528 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.client.loadbalancer.reactive.LoadBalancerBeanPostProcessorAutoConfiguration$ReactorDeferringLoadBalancerFilterConfig' of type [org.springframework.cloud.client.loadbalancer.reactive.LoadBalancerBeanPostProcessorAutoConfiguration$ReactorDeferringLoadBalancerFilterConfig] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+10:25:49:420  INFO 21528 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'reactorDeferringLoadBalancerExchangeFilterFunction' of type [org.springframework.cloud.client.loadbalancer.reactive.DeferringLoadBalancerExchangeFilterFunction] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+10:25:50:105 DEBUG 21528 --- [main] c.zksy.gateway.route.DynamicRouteLoader  : 监听到路由配置变更,[
     {
         "id": "visualization",
         "predicates": [{
@@ -134,43 +134,48 @@
         "uri": "lb://infrared-reading-meter-service"
     }
 ]
-11:31:03:903  INFO 14384 --- [main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [After]
-11:31:03:903  INFO 14384 --- [main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [Before]
-11:31:03:903  INFO 14384 --- [main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [Between]
-11:31:03:903  INFO 14384 --- [main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [Cookie]
-11:31:03:903  INFO 14384 --- [main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [Header]
-11:31:03:903  INFO 14384 --- [main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [Host]
-11:31:03:903  INFO 14384 --- [main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [Method]
-11:31:03:903  INFO 14384 --- [main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [Path]
-11:31:03:903  INFO 14384 --- [main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [Query]
-11:31:03:903  INFO 14384 --- [main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [ReadBody]
-11:31:03:903  INFO 14384 --- [main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [RemoteAddr]
-11:31:03:903  INFO 14384 --- [main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [XForwardedRemoteAddr]
-11:31:03:903  INFO 14384 --- [main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [Weight]
-11:31:03:903  INFO 14384 --- [main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [CloudFoundryRouteService]
-11:31:04:413  INFO 14384 --- [main] com.alibaba.nacos.common.remote.client   : [RpcClientFactory] create a new rpc client of 4ebf319a-0c38-4003-8c67-e73eaaf47629
-11:31:04:414  INFO 14384 --- [main] com.alibaba.nacos.common.remote.client   : [4ebf319a-0c38-4003-8c67-e73eaaf47629] RpcClient init label, labels = {module=naming, source=sdk}
-11:31:04:414  INFO 14384 --- [main] com.alibaba.nacos.common.remote.client   : [4ebf319a-0c38-4003-8c67-e73eaaf47629] RpcClient init, ServerListFactory = com.alibaba.nacos.client.naming.core.ServerListManager
-11:31:04:414  INFO 14384 --- [main] com.alibaba.nacos.common.remote.client   : [4ebf319a-0c38-4003-8c67-e73eaaf47629] Registry connection listener to current client:com.alibaba.nacos.client.naming.remote.gprc.redo.NamingGrpcRedoService
-11:31:04:415  INFO 14384 --- [main] com.alibaba.nacos.common.remote.client   : [4ebf319a-0c38-4003-8c67-e73eaaf47629] Register server push request handler:com.alibaba.nacos.client.naming.remote.gprc.NamingPushRequestHandler
-11:31:04:415  INFO 14384 --- [main] com.alibaba.nacos.common.remote.client   : [4ebf319a-0c38-4003-8c67-e73eaaf47629] Try to connect to server on start up, server: {serverIp = '192.168.110.30', server main port = 8848}
-11:31:04:530  INFO 14384 --- [main] com.alibaba.nacos.common.remote.client   : [4ebf319a-0c38-4003-8c67-e73eaaf47629] Success to connect to server [192.168.110.30:8848] on start up, connectionId = 1755487864602_192.168.110.235_59235
-11:31:04:530  INFO 14384 --- [main] com.alibaba.nacos.common.remote.client   : [4ebf319a-0c38-4003-8c67-e73eaaf47629] Register server push request handler:com.alibaba.nacos.common.remote.client.RpcClient$ConnectResetRequestHandler
-11:31:04:530  INFO 14384 --- [main] com.alibaba.nacos.common.remote.client   : [4ebf319a-0c38-4003-8c67-e73eaaf47629] Register server push request handler:com.alibaba.nacos.common.remote.client.RpcClient$$Lambda$466/0x0000000800435440
-11:31:04:530  INFO 14384 --- [com.alibaba.nacos.client.remote.worker] com.alibaba.nacos.common.remote.client   : [4ebf319a-0c38-4003-8c67-e73eaaf47629] Notify connected event to listeners.
-11:31:04:747  INFO 14384 --- [main] o.s.b.web.embedded.netty.NettyWebServer  : Netty started on port 8080
-11:31:05:142  INFO 14384 --- [nacos-grpc-client-executor-5] com.alibaba.nacos.common.remote.client   : [4ebf319a-0c38-4003-8c67-e73eaaf47629] Receive server push request, request = NotifySubscriberRequest, requestId = 48
-11:31:05:144  INFO 14384 --- [nacos-grpc-client-executor-5] com.alibaba.nacos.common.remote.client   : [4ebf319a-0c38-4003-8c67-e73eaaf47629] Ack server push request, request = NotifySubscriberRequest, requestId = 48
-11:31:05:189  INFO 14384 --- [main] c.a.c.n.registry.NacosServiceRegistry    : nacos registry, DEFAULT_GROUP zksy-gateway 192.168.110.235:8080 register finished
-11:31:05:208  INFO 14384 --- [main] com.zksy.gateway.GatewayApplication      : Started GatewayApplication in 6.439 seconds (JVM running for 7.231)
-11:31:05:209  INFO 14384 --- [main] c.a.c.n.refresh.NacosContextRefresher    : [Nacos Config] Listening config: dataId=zksy-gateway.yaml, group=DEFAULT_GROUP
-11:31:05:210  INFO 14384 --- [main] c.a.c.n.refresh.NacosContextRefresher    : [Nacos Config] Listening config: dataId=zksy-gateway-prod.yaml, group=DEFAULT_GROUP
-11:31:05:210  INFO 14384 --- [main] c.a.c.n.refresh.NacosContextRefresher    : [Nacos Config] Listening config: dataId=zksy-gateway, group=DEFAULT_GROUP
-11:31:05:737  INFO 14384 --- [nacos-grpc-client-executor-8] com.alibaba.nacos.common.remote.client   : [4ebf319a-0c38-4003-8c67-e73eaaf47629] Receive server push request, request = NotifySubscriberRequest, requestId = 50
-11:31:05:740  INFO 14384 --- [nacos-grpc-client-executor-8] com.alibaba.nacos.common.remote.client   : [4ebf319a-0c38-4003-8c67-e73eaaf47629] Ack server push request, request = NotifySubscriberRequest, requestId = 50
-11:31:07:892  WARN 14384 --- [Thread-1] c.a.n.common.http.HttpClientBeanHolder   : [HttpClientBeanHolder] Start destroying common HttpClient
-11:31:07:892  WARN 14384 --- [Thread-5] c.a.nacos.common.notify.NotifyCenter     : [NotifyCenter] Start destroying Publisher
-11:31:07:892  WARN 14384 --- [Thread-5] c.a.nacos.common.notify.NotifyCenter     : [NotifyCenter] Destruction of the end
-11:31:07:892  WARN 14384 --- [Thread-1] c.a.n.common.http.HttpClientBeanHolder   : [HttpClientBeanHolder] Destruction of the end
-11:31:07:909  INFO 14384 --- [SpringApplicationShutdownHook] c.a.c.n.registry.NacosServiceRegistry    : De-registering from Nacos Server now...
-11:31:07:915  INFO 14384 --- [SpringApplicationShutdownHook] c.a.c.n.registry.NacosServiceRegistry    : De-registration finished.
+10:25:51:674  INFO 21528 --- [main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [After]
+10:25:51:674  INFO 21528 --- [main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [Before]
+10:25:51:674  INFO 21528 --- [main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [Between]
+10:25:51:674  INFO 21528 --- [main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [Cookie]
+10:25:51:674  INFO 21528 --- [main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [Header]
+10:25:51:674  INFO 21528 --- [main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [Host]
+10:25:51:674  INFO 21528 --- [main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [Method]
+10:25:51:674  INFO 21528 --- [main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [Path]
+10:25:51:675  INFO 21528 --- [main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [Query]
+10:25:51:675  INFO 21528 --- [main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [ReadBody]
+10:25:51:675  INFO 21528 --- [main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [RemoteAddr]
+10:25:51:675  INFO 21528 --- [main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [XForwardedRemoteAddr]
+10:25:51:675  INFO 21528 --- [main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [Weight]
+10:25:51:675  INFO 21528 --- [main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [CloudFoundryRouteService]
+10:25:52:294  INFO 21528 --- [main] com.alibaba.nacos.common.remote.client   : [RpcClientFactory] create a new rpc client of c5f255d9-38c3-4b69-9119-53c65735f09a
+10:25:52:294  INFO 21528 --- [main] com.alibaba.nacos.common.remote.client   : [c5f255d9-38c3-4b69-9119-53c65735f09a] RpcClient init label, labels = {module=naming, source=sdk}
+10:25:52:296  INFO 21528 --- [main] com.alibaba.nacos.common.remote.client   : [c5f255d9-38c3-4b69-9119-53c65735f09a] RpcClient init, ServerListFactory = com.alibaba.nacos.client.naming.core.ServerListManager
+10:25:52:296  INFO 21528 --- [main] com.alibaba.nacos.common.remote.client   : [c5f255d9-38c3-4b69-9119-53c65735f09a] Registry connection listener to current client:com.alibaba.nacos.client.naming.remote.gprc.redo.NamingGrpcRedoService
+10:25:52:296  INFO 21528 --- [main] com.alibaba.nacos.common.remote.client   : [c5f255d9-38c3-4b69-9119-53c65735f09a] Register server push request handler:com.alibaba.nacos.client.naming.remote.gprc.NamingPushRequestHandler
+10:25:52:296  INFO 21528 --- [main] com.alibaba.nacos.common.remote.client   : [c5f255d9-38c3-4b69-9119-53c65735f09a] Try to connect to server on start up, server: {serverIp = '192.168.110.30', server main port = 8848}
+10:25:52:411  INFO 21528 --- [main] com.alibaba.nacos.common.remote.client   : [c5f255d9-38c3-4b69-9119-53c65735f09a] Success to connect to server [192.168.110.30:8848] on start up, connectionId = 1756693552023_192.168.110.235_58388
+10:25:52:411  INFO 21528 --- [main] com.alibaba.nacos.common.remote.client   : [c5f255d9-38c3-4b69-9119-53c65735f09a] Register server push request handler:com.alibaba.nacos.common.remote.client.RpcClient$ConnectResetRequestHandler
+10:25:52:411  INFO 21528 --- [com.alibaba.nacos.client.remote.worker] com.alibaba.nacos.common.remote.client   : [c5f255d9-38c3-4b69-9119-53c65735f09a] Notify connected event to listeners.
+10:25:52:411  INFO 21528 --- [main] com.alibaba.nacos.common.remote.client   : [c5f255d9-38c3-4b69-9119-53c65735f09a] Register server push request handler:com.alibaba.nacos.common.remote.client.RpcClient$$Lambda$466/0x0000000800436440
+10:25:52:643  INFO 21528 --- [main] o.s.b.web.embedded.netty.NettyWebServer  : Netty started on port 8080
+10:25:52:992  INFO 21528 --- [nacos-grpc-client-executor-4] com.alibaba.nacos.common.remote.client   : [c5f255d9-38c3-4b69-9119-53c65735f09a] Receive server push request, request = NotifySubscriberRequest, requestId = 29
+10:25:53:006  INFO 21528 --- [nacos-grpc-client-executor-4] com.alibaba.nacos.common.remote.client   : [c5f255d9-38c3-4b69-9119-53c65735f09a] Ack server push request, request = NotifySubscriberRequest, requestId = 29
+10:25:53:110  INFO 21528 --- [main] c.a.c.n.registry.NacosServiceRegistry    : nacos registry, DEFAULT_GROUP zksy-gateway 192.168.110.235:8080 register finished
+10:25:53:128  INFO 21528 --- [main] com.zksy.gateway.GatewayApplication      : Started GatewayApplication in 6.657 seconds (JVM running for 7.355)
+10:25:53:130  INFO 21528 --- [main] c.a.c.n.refresh.NacosContextRefresher    : [Nacos Config] Listening config: dataId=zksy-gateway.yaml, group=DEFAULT_GROUP
+10:25:53:131  INFO 21528 --- [main] c.a.c.n.refresh.NacosContextRefresher    : [Nacos Config] Listening config: dataId=zksy-gateway-prod.yaml, group=DEFAULT_GROUP
+10:25:53:131  INFO 21528 --- [main] c.a.c.n.refresh.NacosContextRefresher    : [Nacos Config] Listening config: dataId=zksy-gateway, group=DEFAULT_GROUP
+10:25:53:674  INFO 21528 --- [nacos-grpc-client-executor-8] com.alibaba.nacos.common.remote.client   : [c5f255d9-38c3-4b69-9119-53c65735f09a] Receive server push request, request = NotifySubscriberRequest, requestId = 30
+10:25:53:675  INFO 21528 --- [nacos-grpc-client-executor-8] com.alibaba.nacos.common.remote.client   : [c5f255d9-38c3-4b69-9119-53c65735f09a] Ack server push request, request = NotifySubscriberRequest, requestId = 30
+10:27:39:290  WARN 21528 --- [Thread-5] c.a.nacos.common.notify.NotifyCenter     : [NotifyCenter] Start destroying Publisher
+10:27:39:290  WARN 21528 --- [Thread-1] c.a.n.common.http.HttpClientBeanHolder   : [HttpClientBeanHolder] Start destroying common HttpClient
+10:27:39:291  WARN 21528 --- [Thread-5] c.a.nacos.common.notify.NotifyCenter     : [NotifyCenter] Destruction of the end
+10:27:39:291  WARN 21528 --- [Thread-1] c.a.n.common.http.HttpClientBeanHolder   : [HttpClientBeanHolder] Destruction of the end
+10:27:39:303  INFO 21528 --- [SpringApplicationShutdownHook] c.a.c.n.registry.NacosServiceRegistry    : De-registering from Nacos Server now...
+10:27:39:306  INFO 21528 --- [SpringApplicationShutdownHook] c.a.c.n.registry.NacosServiceRegistry    : De-registration finished.
+10:27:39:611  INFO 21528 --- [SpringApplicationShutdownHook] com.alibaba.nacos.common.remote.client   : Shutdown rpc client, set status to shutdown
+10:27:39:611  INFO 21528 --- [SpringApplicationShutdownHook] com.alibaba.nacos.common.remote.client   : Shutdown client event executor java.util.concurrent.ScheduledThreadPoolExecutor@61ffc1f5[Running, pool size = 2, active threads = 2, queued tasks = 0, completed tasks = 0]
+10:27:39:611  INFO 21528 --- [SpringApplicationShutdownHook] com.alibaba.nacos.common.remote.client   : Close current connection 1756693552023_192.168.110.235_58388
+10:27:39:613  INFO 21528 --- [nacos-grpc-client-executor-31] c.a.n.c.remote.client.grpc.GrpcClient    : [1756693552023_192.168.110.235_58388]Ignore complete event,isRunning:false,isAbandon=false
+10:27:39:628  INFO 21528 --- [SpringApplicationShutdownHook] c.a.n.c.remote.client.grpc.GrpcClient    : Shutdown grpc executor java.util.concurrent.ThreadPoolExecutor@7ff1a5f2[Running, pool size = 5, active threads = 0, queued tasks = 0, completed tasks = 32]

+ 1 - 0
pom.xml

@@ -13,6 +13,7 @@
         <module>environment-service</module>
         <module>zk-gateway</module>
         <module>zk-common</module>
+        <module>zk-api-service</module>
     </modules>
     <parent>
         <groupId>org.springframework.boot</groupId>

+ 86 - 0
zk-api-service/pom.xml

@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>com.zksy</groupId>
+        <artifactId>pipe-ner-server</artifactId>
+        <version>1.0.0</version>
+    </parent>
+    <groupId>org.example</groupId>
+    <artifactId>zk-api-service</artifactId>
+
+    <properties>
+        <maven.compiler.source>11</maven.compiler.source>
+        <maven.compiler.target>11</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+    <dependencies>
+        <!--common-->
+        <dependency>
+            <groupId>com.zksy</groupId>
+            <artifactId>zk-common</artifactId>
+            <version>1.0.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <!--数据库-->
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+        </dependency>
+        <!--mybatis-->
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-boot-starter</artifactId>
+        </dependency>
+        <!--nacos 服务注册发现-->
+        <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
+        </dependency>
+        <!--负载均衡-->
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
+        </dependency>
+        <!--统一配置管理-->
+        <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
+        </dependency>
+        <!--加载bootstrap-->
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-bootstrap</artifactId>
+        </dependency>
+        <!--redis-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-redis</artifactId>
+        </dependency>
+        <!--sentinel-->
+        <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
+        </dependency>
+        <!--websocket-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-websocket</artifactId>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <finalName>${project.artifactId}</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+</project>

+ 15 - 0
zk-api-service/src/main/java/com/zksy/api/ApiApplication.java

@@ -0,0 +1,15 @@
+package com.zksy.api;
+
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+@MapperScan(basePackages = "com.zksy.api.mapper")
+public class ApiApplication {
+    public static void main(String[] args) {
+        SpringApplication.run(ApiApplication.class, args);
+        System.out.println("通用接口启动成功");
+    }
+}

+ 67 - 0
zk-api-service/src/main/java/com/zksy/api/controller/WarningThresholdController.java

@@ -0,0 +1,67 @@
+package com.zksy.api.controller;
+
+import com.zksy.api.domain.WarningThreshold;
+import com.zksy.api.service.WarningThresholdService;
+import com.zksy.common.utils.AjaxResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.time.LocalDateTime;
+import java.util.Arrays;
+
+/**
+ * @author Administrator
+ * @version 1.0
+ * @project pipe-ner-server
+ * @description 预警阈值
+ * @date 2025/9/1 10:29:11
+ */
+@RestController
+@RequestMapping("/warningThreshold")
+@Api(tags = "预警阈值信息",description = "预警阈值信息desc")
+public class WarningThresholdController {
+    @Autowired
+    private WarningThresholdService service;
+    @GetMapping("/findByPage")
+    @ApiOperation(value = "预警阈值信息查询分页")
+    public AjaxResult findByPage(@ApiParam(value = "页码", example = "1", required = true)long pageNum,
+                                 @ApiParam(value = "页数", example = "10", required = true)long pageSize, @ApiParam(value = "设备名称", example = "反应釜A", required = false)String deviceName,
+                                 @ApiParam(value = "设备编码", example = "EQ-2023-001", required = false)String deviceCode,
+                                 @ApiParam(value = "预警类型", example = "温度预警", allowableValues = "温度预警,压力预警,湿度预警", required = false) String warningType,
+                                 @ApiParam(value = "预警编码", example = "WARN-TEMP-001", required = false) String warningCode){
+        return AjaxResult.success(service.findByPage(pageNum, pageSize, deviceName,deviceCode,warningType,warningCode));
+    }
+    @GetMapping("/getWarningThresholdList")
+    @ApiOperation(value = "预警阈值信息查询")
+    public AjaxResult getWarningThresholdList(@ApiParam(value = "设备名称", example = "反应釜A", required = false)String deviceName,
+                                              @ApiParam(value = "设备编码", example = "EQ-2023-001", required = false)String deviceCode,
+                                              @ApiParam(value = "预警类型", example = "温度预警", allowableValues = "温度预警,压力预警,湿度预警", required = false) String warningType,
+                                              @ApiParam(value = "预警编码", example = "WARN-TEMP-001", required = false) String warningCode
+    ){
+        return AjaxResult.success(service.getWarningThresholdList(deviceName,deviceCode,warningType,warningCode));
+    }
+    @GetMapping("/getById/{id}")
+    @ApiOperation(value = "根据Id查询预警阈值信息")
+    public AjaxResult getById(@PathVariable String id){
+        return AjaxResult.success(service.getById(id));
+    }
+    @PostMapping("/save")
+    @ApiOperation(value = "预警阈值信息保存")
+    public AjaxResult save(@RequestBody WarningThreshold entity) {
+        return service.save(entity) ? AjaxResult.success(entity): AjaxResult.error("保存失败");
+    }
+    @PostMapping("/update")
+    @ApiOperation(value = "预警阈值信息修改")
+    public AjaxResult update(@RequestBody WarningThreshold entity) {
+        entity.setUpdateTime(LocalDateTime.now());
+        return service.updateById(entity) ? AjaxResult.success(entity): AjaxResult.error("修改失败");
+    }
+    @PostMapping("/deleteBatch")
+    @ApiOperation(value = "预警阈值信息删除")
+    public AjaxResult delete(@RequestBody String[] ids) {
+        return service.removeByIds(Arrays.asList(ids)) ? AjaxResult.success("删除成功") : AjaxResult.error("删除失败");
+    }
+}

+ 85 - 0
zk-api-service/src/main/java/com/zksy/api/domain/WarningThreshold.java

@@ -0,0 +1,85 @@
+package com.zksy.api.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 预警阈值
+ * @TableName warning_threshold
+ */
+@TableName(value ="warning_threshold")
+@Data
+public class WarningThreshold implements Serializable {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.ASSIGN_UUID)
+    @ApiModelProperty(value = "主键")
+    private String id;
+
+    /**
+     * 设备名称
+     */
+    @TableField(value = "device_name")
+    @ApiModelProperty(value = "设备名称")
+    private String deviceName;
+
+    /**
+     * 设备编码
+     */
+    @TableField(value = "device_code")
+    @ApiModelProperty(value = "设备编码")
+    private String deviceCode;
+
+    /**
+     * 预警类型
+     */
+    @TableField(value = "warning_type")
+    @ApiModelProperty(value = "预警类型")
+    private String warningType;
+
+    /**
+     * 预警编码
+     */
+    @TableField(value = "warning_code")
+    @ApiModelProperty(value = "预警编码")
+    private String warningCode;
+
+    /**
+     * 预警值
+     */
+    @TableField(value = "warning_value")
+    @ApiModelProperty(value = "预警值")
+    private Double warningValue;
+
+    /**
+     * 备注
+     */
+    @TableField(value = "remark")
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+    /**
+     * 创建时间
+     */
+    @TableField(value = "create_time")
+    @ApiModelProperty(value = "创建时间")
+    private LocalDateTime createTime;
+
+    /**
+     * 修改时间
+     */
+    @TableField(value = "update_time")
+    @ApiModelProperty(value = "修改时间")
+    private LocalDateTime updateTime;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}

+ 18 - 0
zk-api-service/src/main/java/com/zksy/api/mapper/WarningThresholdMapper.java

@@ -0,0 +1,18 @@
+package com.zksy.api.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zksy.api.domain.WarningThreshold;
+
+/**
+* @author Administrator
+* @description 针对表【warning_threshold(预警阈值)】的数据库操作Mapper
+* @createDate 2025-09-01 09:59:43
+* @Entity com.zksy.common.domain.WarningThreshold
+*/
+public interface WarningThresholdMapper extends BaseMapper<WarningThreshold> {
+
+}
+
+
+
+

+ 18 - 0
zk-api-service/src/main/java/com/zksy/api/service/WarningThresholdService.java

@@ -0,0 +1,18 @@
+package com.zksy.api.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zksy.api.domain.WarningThreshold;
+
+import java.util.List;
+
+/**
+* @author Administrator
+* @description 针对表【warning_threshold(预警阈值)】的数据库操作Service
+* @createDate 2025-09-01 09:59:43
+*/
+public interface WarningThresholdService extends IService<WarningThreshold> {
+    Page<WarningThreshold> findByPage(long pageNum, long pageSize, String deviceName,String deviceCode,String warningType,String warningCode);
+    List<WarningThreshold> getWarningThresholdList(String deviceName,String deviceCode,String warningType,String warningCode);
+
+}

+ 48 - 0
zk-api-service/src/main/java/com/zksy/api/service/impl/WarningThresholdServiceImpl.java

@@ -0,0 +1,48 @@
+package com.zksy.api.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zksy.api.domain.WarningThreshold;
+import com.zksy.api.mapper.WarningThresholdMapper;
+import com.zksy.api.service.WarningThresholdService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+* @author Administrator
+* @description 针对表【warning_threshold(预警阈值)】的数据库操作Service实现
+* @createDate 2025-09-01 09:59:43
+*/
+@Service
+public class WarningThresholdServiceImpl extends ServiceImpl<WarningThresholdMapper, WarningThreshold>
+    implements WarningThresholdService{
+
+    @Override
+    public Page<WarningThreshold> findByPage(long pageNum, long pageSize, String deviceName, String deviceCode, String warningType, String warningCode) {
+        Page<WarningThreshold> page = new Page<>(pageNum, pageSize);
+        LambdaQueryWrapper<WarningThreshold> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.like(WarningThreshold::getDeviceName,deviceName)
+                .like(WarningThreshold::getDeviceCode,deviceCode)
+                .like(WarningThreshold::getWarningType,warningType)
+                .like(WarningThreshold::getWarningCode,warningCode);
+        queryWrapper.orderByDesc(WarningThreshold::getUpdateTime);
+        return this.page(page, queryWrapper);
+    }
+
+    @Override
+    public List<WarningThreshold> getWarningThresholdList(String deviceName, String deviceCode, String warningType, String warningCode) {
+        LambdaQueryWrapper<WarningThreshold> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.like(WarningThreshold::getDeviceName,deviceName)
+                .like(WarningThreshold::getDeviceCode,deviceCode)
+                .like(WarningThreshold::getWarningType,warningType)
+                .like(WarningThreshold::getWarningCode,warningCode);
+        queryWrapper.orderByDesc(WarningThreshold::getUpdateTime);
+        return this.list(queryWrapper);
+    }
+}
+
+
+
+

+ 17 - 0
zk-api-service/src/main/resources/application-dev.yaml

@@ -0,0 +1,17 @@
+zksy:
+  db:
+    host: 192.168.110.30
+    un: root
+    pw: 123
+    port: 3307
+    database: pipe-ner
+spring:
+  redis:
+    host: 192.168.110.30
+    port: 6379
+  cloud:
+    nacos:
+      discovery:
+        server-addr: 192.168.110.30:8848
+      config:
+        server-addr: 192.168.110.30:8848

+ 11 - 0
zk-api-service/src/main/resources/application-prod.yaml

@@ -0,0 +1,11 @@
+zksy:
+  db:
+    host: 47.107.107.47
+    un: root
+    pw: d$3%#*(jnhUDGHB]z0x876c~
+    port: 3306
+    database: pipe-ner
+spring:
+  redis:
+    host: 47.107.107.47
+    port: 6379

+ 33 - 0
zk-api-service/src/main/resources/bootstrap.yaml

@@ -0,0 +1,33 @@
+spring:
+  application:
+    name: zk-api-service
+  profiles:
+    active: dev
+  servlet:
+    multipart:
+      max-file-size: 100MB
+      max-request-size: 100MB
+  main:
+    allow-bean-definition-overriding: true
+  cloud:
+    sentinel:
+      transport:
+#        dashboard: 172.16.102.52:8090
+        dashboard: 192.168.110.30:8090
+      http-method-specify: true
+    nacos:
+      discovery:
+#        server-addr: 172.16.102.52:8848
+#        namespace: 99a7b129-faed-4b32-bcbf-54acd7ffd372
+         server-addr: 192.168.110.30:8848
+         namespace: 9ce240d6-ae6b-45a3-8566-e75ac25c9d71
+      config:
+#        server-addr: 172.16.102.52:8848
+#        namespace: 99a7b129-faed-4b32-bcbf-54acd7ffd372
+        server-addr: 192.168.110.30:8848
+        namespace: 9ce240d6-ae6b-45a3-8566-e75ac25c9d71
+        file-extension: yaml
+        shared-configs:
+          - dataId: zk-api-service.yaml
+          - dataId: zksy-shared-jdbc.yaml
+          - dataId: zksy-shared-log.yaml

+ 24 - 0
zk-api-service/src/main/resources/mapper/WarningThresholdMapper.xml

@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zksy.api.mapper.WarningThresholdMapper">
+
+    <resultMap id="BaseResultMap" type="com.zksy.api.domain.WarningThreshold">
+            <id property="id" column="id" jdbcType="VARCHAR"/>
+            <result property="deviceName" column="device_name" jdbcType="VARCHAR"/>
+            <result property="deviceCode" column="device_code" jdbcType="VARCHAR"/>
+            <result property="warningType" column="warning_type" jdbcType="VARCHAR"/>
+            <result property="warningCode" column="warning_code" jdbcType="VARCHAR"/>
+            <result property="warningValue" column="warning_value" jdbcType="DOUBLE"/>
+            <result property="remark" column="remark" jdbcType="VARCHAR"/>
+            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+            <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,device_name,device_code,
+        warning_type,warning_code,warning_value,
+        remark,create_time,update_time
+    </sql>
+</mapper>

+ 163 - 0
zk-common/src/main/java/com/zksy/common/utils/AjaxResult.java

@@ -0,0 +1,163 @@
+package com.zksy.common.utils;
+
+import cn.hutool.http.HttpStatus;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+
+import java.util.HashMap;
+
+/**
+ * 操作消息提醒
+ * 
+ * @author ruoyi
+ */
+public class AjaxResult extends HashMap<String, Object>
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 状态码 */
+    public static final String CODE_TAG = "code";
+
+    /** 返回内容 */
+    public static final String MSG_TAG = "msg";
+
+    /** 数据对象 */
+    public static final String DATA_TAG = "data";
+
+    /**
+     * 初始化一个新创建的 AjaxResult 对象,使其表示一个空消息。
+     */
+    public AjaxResult()
+    {
+    }
+
+    /**
+     * 初始化一个新创建的 AjaxResult 对象
+     * 
+     * @param code 状态码
+     * @param msg 返回内容
+     */
+    public AjaxResult(int code, String msg)
+    {
+        super.put(CODE_TAG, code);
+        super.put(MSG_TAG, msg);
+    }
+
+    /**
+     * 初始化一个新创建的 AjaxResult 对象
+     * 
+     * @param code 状态码
+     * @param msg 返回内容
+     * @param data 数据对象
+     */
+    public AjaxResult(int code, String msg, Object data)
+    {
+        super.put(CODE_TAG, code);
+        super.put(MSG_TAG, msg);
+        if (StringUtils.checkValNotNull(data))
+        {
+            super.put(DATA_TAG, data);
+        }
+    }
+
+    /**
+     * 返回成功消息
+     * 
+     * @return 成功消息
+     */
+    public static AjaxResult success()
+    {
+        return AjaxResult.success("操作成功");
+    }
+
+    /**
+     * 返回成功数据
+     * 
+     * @return 成功消息
+     */
+    public static AjaxResult success(Object data)
+    {
+        return AjaxResult.success("操作成功", data);
+    }
+
+    /**
+     * 返回成功消息
+     * 
+     * @param msg 返回内容
+     * @return 成功消息
+     */
+    public static AjaxResult success(String msg)
+    {
+        return AjaxResult.success(msg, null);
+    }
+
+    /**
+     * 返回成功消息
+     * 
+     * @param msg 返回内容
+     * @param data 数据对象
+     * @return 成功消息
+     */
+    public static AjaxResult success(String msg, Object data)
+    {
+        return new AjaxResult(HttpStatus.HTTP_OK, msg, data);
+    }
+
+    /**
+     * 返回错误消息
+     * 
+     * @return
+     */
+    public static AjaxResult error()
+    {
+        return AjaxResult.error("操作失败");
+    }
+
+    /**
+     * 返回错误消息
+     * 
+     * @param msg 返回内容
+     * @return 警告消息
+     */
+    public static AjaxResult error(String msg)
+    {
+        return AjaxResult.error(msg, null);
+    }
+
+    /**
+     * 返回错误消息
+     * 
+     * @param msg 返回内容
+     * @param data 数据对象
+     * @return 警告消息
+     */
+    public static AjaxResult error(String msg, Object data)
+    {
+        return new AjaxResult(HttpStatus.HTTP_INTERNAL_ERROR, msg, data);
+    }
+
+    /**
+     * 返回错误消息
+     * 
+     * @param code 状态码
+     * @param msg 返回内容
+     * @return 警告消息
+     */
+    public static AjaxResult error(int code, String msg)
+    {
+        return new AjaxResult(code, msg, null);
+    }
+
+    /**
+     * 方便链式调用
+     *
+     * @param key 键
+     * @param value 值
+     * @return 数据对象
+     */
+    @Override
+    public AjaxResult put(String key, Object value)
+    {
+        super.put(key, value);
+        return this;
+    }
+}