mqtt 模块添加

This commit is contained in:
yuhaiming
2026-06-04 11:24:08 +08:00
parent ccfecae584
commit 1ab8c28c36
48 changed files with 1200 additions and 10174 deletions

1
.gitignore vendored
View File

@@ -1,3 +1,4 @@
/water-admin/target/
/water-common/*/target/
/water-modules/*/target/
/logs/

7
.idea/compiler.xml generated
View File

@@ -42,6 +42,7 @@
<module name="water-common-log" />
<module name="water-common-job" />
<module name="water-common-json" />
<module name="water-common-mqtt" />
<module name="water-job" />
<module name="water-common-social" />
<module name="water-common-core" />
@@ -54,6 +55,11 @@
<module name="water-demo" />
<module name="water-workflow" />
</profile>
<profile name="Maven default annotation processors profile" enabled="true">
<sourceOutputDir name="target/generated-sources/annotations" />
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
<outputRelativeToContentRoot value="true" />
</profile>
</annotationProcessing>
</component>
<component name="JavacSettings">
@@ -71,6 +77,7 @@
<module name="water-common-json" options="-parameters" />
<module name="water-common-log" options="-parameters" />
<module name="water-common-mail" options="-parameters" />
<module name="water-common-mqtt" options="-parameters" />
<module name="water-common-mybatis" options="-parameters" />
<module name="water-common-oss" options="-parameters" />
<module name="water-common-ratelimiter" options="-parameters" />

16
.idea/encodings.xml generated
View File

@@ -1,8 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding" defaultCharsetForPropertiesFiles="UTF-8">
<file url="file://$APPLICATION_HOME_DIR$/src/main/java" charset="UTF-8" />
<file url="file://$APPLICATION_HOME_DIR$/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/water-admin/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/water-admin/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/water-common/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/water-common/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/water-common/water-common-core/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/water-common/water-common-core/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/water-common/water-common-doc/src/main/java" charset="UTF-8" />
@@ -10,6 +16,7 @@
<file url="file://$PROJECT_DIR$/water-common/water-common-encrypt/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/water-common/water-common-encrypt/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/water-common/water-common-excel/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/water-common/water-common-excel/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/water-common/water-common-idempotent/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/water-common/water-common-idempotent/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/water-common/water-common-job/src/main/java" charset="UTF-8" />
@@ -20,9 +27,12 @@
<file url="file://$PROJECT_DIR$/water-common/water-common-log/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/water-common/water-common-mail/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/water-common/water-common-mail/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/water-common/water-common-mqtt/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/water-common/water-common-mqtt/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/water-common/water-common-mybatis/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/water-common/water-common-mybatis/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/water-common/water-common-oss/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/water-common/water-common-oss/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/water-common/water-common-ratelimiter/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/water-common/water-common-ratelimiter/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/water-common/water-common-redis/src/main/java" charset="UTF-8" />
@@ -32,6 +42,7 @@
<file url="file://$PROJECT_DIR$/water-common/water-common-security/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/water-common/water-common-security/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/water-common/water-common-sensitive/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/water-common/water-common-sensitive/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/water-common/water-common-sms/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/water-common/water-common-sms/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/water-common/water-common-social/src/main/java" charset="UTF-8" />
@@ -46,10 +57,14 @@
<file url="file://$PROJECT_DIR$/water-common/water-common-web/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/water-common/water-common-websocket/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/water-common/water-common-websocket/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/water-extend/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/water-extend/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/water-extend/water-monitor-admin/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/water-extend/water-monitor-admin/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/water-extend/water-snailjob-server/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/water-extend/water-snailjob-server/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/water-modules/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/water-modules/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/water-modules/water-app/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/water-modules/water-app/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/water-modules/water-demo/src/main/java" charset="UTF-8" />
@@ -57,6 +72,7 @@
<file url="file://$PROJECT_DIR$/water-modules/water-generator/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/water-modules/water-generator/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/water-modules/water-job/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/water-modules/water-job/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/water-modules/water-system/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/water-modules/water-system/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/water-modules/water-workflow/src/main/java" charset="UTF-8" />

2
.idea/misc.xml generated
View File

@@ -5,6 +5,8 @@
<option name="originalFiles">
<list>
<option value="$PROJECT_DIR$/pom.xml" />
<option value="$PROJECT_DIR$/water-common/water-common-mqtt/pom.xml" />
<option value="$PROJECT_DIR$/water-admin/pom.xml" />
</list>
</option>
</component>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,615 +1,6 @@
2026-05-09 09:02:10 [snail-job-grpc-client-executor-127.0.0.1-0] ERROR c.a.s.c.j.c.r.JobExecutorRegistrar - Job executors register error requestId:[0] message:[UNAVAILABLE: io exception]
2026-05-09 09:02:10 [snail-job-grpc-client-executor-127.0.0.1-2] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[1] message:[UNAVAILABLE: io exception]
2026-05-09 09:02:20 [snail-job-grpc-client-executor-127.0.0.1-3] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[3] message:[UNAVAILABLE: io exception]
2026-05-09 09:02:30 [snail-job-grpc-client-executor-127.0.0.1-4] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[4] message:[UNAVAILABLE: io exception]
2026-05-09 09:02:40 [snail-job-grpc-client-executor-127.0.0.1-5] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[5] message:[UNAVAILABLE: io exception]
2026-05-09 09:02:50 [snail-job-grpc-client-executor-127.0.0.1-6] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[6] message:[UNAVAILABLE: io exception]
2026-05-09 09:03:00 [snail-job-grpc-client-executor-127.0.0.1-7] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[7] message:[UNAVAILABLE: io exception]
2026-05-09 09:03:10 [snail-job-grpc-client-executor-127.0.0.1-9] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[8] message:[UNAVAILABLE: io exception]
2026-05-09 09:03:15 [XNIO-1 task-2] ERROR o.d.c.w.h.GlobalExceptionHandler - 请求地址'/app/v1/addDevice',发生未知异常.
org.springframework.dao.DataIntegrityViolationException:
### Error updating database. Cause: java.sql.SQLException: Field 'user_id' doesn't have a default value
### The error may exist in org/dromara/app/mapper/AppDeviceMapper.java (best guess)
### The error may involve org.dromara.app.mapper.AppDeviceMapper.insert-Inline
### The error occurred while setting parameters
### SQL: INSERT INTO app_device ( id, create_dept, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ? )
### Cause: java.sql.SQLException: Field 'user_id' doesn't have a default value
; Field 'user_id' doesn't have a default value
at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:258)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:107)
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:95)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:347)
at jdk.proxy2/jdk.proxy2.$Proxy149.insert(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:224)
at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:59)
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:156)
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:93)
at jdk.proxy2/jdk.proxy2.$Proxy201.insert(Unknown Source)
at org.dromara.app.service.impl.AppDeviceServiceImpl.insertByBo(AppDeviceServiceImpl.java:113)
at org.dromara.app.controller.AppController.addDevice(AppController.java:89)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:360)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:728)
at org.dromara.app.controller.AppController$$SpringCGLIB$$0.addDevice(<generated>)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:258)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:191)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:991)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:896)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914)
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:547)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:614)
at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74)
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129)
at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67)
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at org.dromara.common.web.filter.RepeatableFilter.doFilter(RepeatableFilter.java:32)
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67)
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at cn.dev33.satoken.filter.SaServletFilter.doFilter(SaServletFilter.java:143)
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67)
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at cn.dev33.satoken.filter.SaFirewallCheckFilterForJakartaServlet.doFilter(SaFirewallCheckFilterForJakartaServlet.java:69)
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67)
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at cn.dev33.satoken.filter.SaTokenCorsFilterForJakartaServlet.doFilter(SaTokenCorsFilterForJakartaServlet.java:52)
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67)
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at cn.dev33.satoken.filter.SaTokenContextFilterForJakartaServlet.doFilter(SaTokenContextFilterForJakartaServlet.java:40)
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67)
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67)
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67)
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at org.dromara.common.web.filter.XssFilter.doFilter(XssFilter.java:42)
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67)
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at org.springframework.web.filter.ServerHttpObservationFilter.doFilterInternal(ServerHttpObservationFilter.java:110)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67)
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67)
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)
at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
at io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68)
at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
at io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:68)
at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:117)
at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)
at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:75)
at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.servlet.handlers.SendErrorPageHandler.handleRequest(SendErrorPageHandler.java:52)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:271)
at io.undertow.servlet.handlers.ServletInitialHandler$1.call(ServletInitialHandler.java:130)
at io.undertow.servlet.handlers.ServletInitialHandler$1.call(ServletInitialHandler.java:127)
at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:251)
at io.undertow.servlet.handlers.ServletInitialHandler.lambda$new$1(ServletInitialHandler.java:99)
at io.undertow.server.Connectors.executeRootHandler(Connectors.java:418)
at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:938)
at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
at org.jboss.threads.EnhancedQueueExecutor$Task.doRunWith(EnhancedQueueExecutor.java:2691)
at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2670)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1589)
at org.xnio.XnioWorker$WorkerThreadFactory$1$1.run(XnioWorker.java:1282)
at java.base/java.lang.Thread.run(Thread.java:842)
Caused by: java.sql.SQLException: Field 'user_id' doesn't have a default value
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:121)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:114)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:988)
at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:383)
at com.zaxxer.hikari.pool.ProxyPreparedStatement.execute(ProxyPreparedStatement.java:44)
at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.execute(HikariProxyPreparedStatement.java)
at com.p6spy.engine.wrapper.PreparedStatementWrapper.execute(PreparedStatementWrapper.java:362)
at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:48)
at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:75)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)
at jdk.proxy2/jdk.proxy2.$Proxy249.update(Unknown Source)
at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50)
at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117)
at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:61)
at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:106)
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59)
at jdk.proxy2/jdk.proxy2.$Proxy248.update(Unknown Source)
at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197)
at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:184)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:333)
... 107 common frames omitted
2026-05-09 09:03:20 [snail-job-grpc-client-executor-127.0.0.1-10] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[10] message:[UNAVAILABLE: io exception]
2026-05-09 09:03:30 [snail-job-grpc-client-executor-127.0.0.1-11] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[11] message:[UNAVAILABLE: io exception]
2026-05-09 09:03:58 [snail-job-grpc-client-executor-127.0.0.1-0] ERROR c.a.s.c.j.c.r.JobExecutorRegistrar - Job executors register error requestId:[0] message:[UNAVAILABLE: io exception]
2026-05-09 09:03:58 [snail-job-grpc-client-executor-127.0.0.1-2] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[1] message:[UNAVAILABLE: io exception]
2026-05-09 09:04:08 [snail-job-grpc-client-executor-127.0.0.1-3] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[3] message:[UNAVAILABLE: io exception]
2026-05-09 09:04:18 [snail-job-grpc-client-executor-127.0.0.1-4] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[4] message:[UNAVAILABLE: io exception]
2026-05-09 09:04:28 [snail-job-grpc-client-executor-127.0.0.1-5] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[5] message:[UNAVAILABLE: io exception]
2026-05-09 09:04:38 [snail-job-grpc-client-executor-127.0.0.1-6] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[6] message:[UNAVAILABLE: io exception]
2026-05-09 09:04:48 [snail-job-grpc-client-executor-127.0.0.1-7] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[7] message:[UNAVAILABLE: io exception]
2026-05-09 09:04:58 [snail-job-grpc-client-executor-127.0.0.1-9] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[9] message:[UNAVAILABLE: io exception]
2026-05-09 09:05:08 [snail-job-grpc-client-executor-127.0.0.1-10] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[10] message:[UNAVAILABLE: io exception]
2026-05-09 09:05:18 [snail-job-grpc-client-executor-127.0.0.1-11] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[11] message:[UNAVAILABLE: io exception]
2026-05-09 09:05:28 [snail-job-grpc-client-executor-127.0.0.1-12] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[12] message:[UNAVAILABLE: io exception]
2026-05-09 09:05:38 [snail-job-grpc-client-executor-127.0.0.1-13] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[13] message:[UNAVAILABLE: io exception]
2026-05-09 09:05:48 [snail-job-grpc-client-executor-127.0.0.1-14] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[14] message:[UNAVAILABLE: io exception]
2026-05-09 09:05:58 [snail-job-grpc-client-executor-127.0.0.1-15] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[15] message:[UNAVAILABLE: io exception]
2026-05-09 09:06:08 [snail-job-grpc-client-executor-127.0.0.1-17] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[17] message:[UNAVAILABLE: io exception]
2026-05-09 09:06:18 [snail-job-grpc-client-executor-127.0.0.1-18] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[18] message:[UNAVAILABLE: io exception]
2026-05-09 09:06:28 [snail-job-grpc-client-executor-127.0.0.1-19] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[19] message:[UNAVAILABLE: io exception]
2026-05-09 09:06:38 [snail-job-grpc-client-executor-127.0.0.1-20] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[20] message:[UNAVAILABLE: io exception]
2026-05-09 09:06:48 [snail-job-grpc-client-executor-127.0.0.1-21] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[21] message:[UNAVAILABLE: io exception]
2026-05-09 09:07:22 [snail-job-grpc-client-executor-127.0.0.1-24] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[25] message:[UNAVAILABLE: io exception]
2026-05-09 09:07:22 [snail-job-grpc-client-executor-127.0.0.1-23] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[23] message:[UNAVAILABLE: io exception]
2026-05-09 09:07:22 [snail-job-grpc-client-executor-127.0.0.1-25] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[24] message:[UNAVAILABLE: io exception]
2026-05-09 09:07:28 [snail-job-grpc-client-executor-127.0.0.1-26] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[26] message:[UNAVAILABLE: io exception]
2026-05-09 09:07:38 [snail-job-grpc-client-executor-127.0.0.1-27] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[27] message:[UNAVAILABLE: io exception]
2026-05-09 09:07:48 [snail-job-grpc-client-executor-127.0.0.1-28] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[28] message:[UNAVAILABLE: io exception]
2026-05-09 09:07:58 [snail-job-grpc-client-executor-127.0.0.1-30] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[29] message:[UNAVAILABLE: io exception]
2026-05-09 09:08:08 [snail-job-grpc-client-executor-127.0.0.1-31] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[31] message:[UNAVAILABLE: io exception]
2026-05-09 09:08:18 [snail-job-grpc-client-executor-127.0.0.1-32] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[32] message:[UNAVAILABLE: io exception]
2026-05-09 09:08:28 [snail-job-grpc-client-executor-127.0.0.1-33] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[33] message:[UNAVAILABLE: io exception]
2026-05-09 09:08:38 [snail-job-grpc-client-executor-127.0.0.1-34] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[34] message:[UNAVAILABLE: io exception]
2026-05-09 09:08:48 [snail-job-grpc-client-executor-127.0.0.1-35] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[35] message:[UNAVAILABLE: io exception]
2026-05-09 09:08:58 [snail-job-grpc-client-executor-127.0.0.1-36] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[37] message:[UNAVAILABLE: io exception]
2026-05-09 09:09:08 [snail-job-grpc-client-executor-127.0.0.1-38] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[38] message:[UNAVAILABLE: io exception]
2026-05-09 09:09:18 [snail-job-grpc-client-executor-127.0.0.1-39] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[39] message:[UNAVAILABLE: io exception]
2026-05-09 09:09:28 [snail-job-grpc-client-executor-127.0.0.1-40] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[40] message:[UNAVAILABLE: io exception]
2026-05-09 09:09:38 [snail-job-grpc-client-executor-127.0.0.1-41] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[41] message:[UNAVAILABLE: io exception]
2026-05-09 09:10:03 [snail-job-grpc-client-executor-127.0.0.1-0] ERROR c.a.s.c.j.c.r.JobExecutorRegistrar - Job executors register error requestId:[0] message:[UNAVAILABLE: io exception]
2026-05-09 09:10:03 [snail-job-grpc-client-executor-127.0.0.1-2] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[1] message:[UNAVAILABLE: io exception]
2026-05-09 09:10:13 [snail-job-grpc-client-executor-127.0.0.1-3] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[3] message:[UNAVAILABLE: io exception]
2026-05-09 09:10:23 [snail-job-grpc-client-executor-127.0.0.1-4] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[4] message:[UNAVAILABLE: io exception]
2026-05-09 09:10:33 [snail-job-grpc-client-executor-127.0.0.1-5] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[5] message:[UNAVAILABLE: io exception]
2026-05-09 09:10:43 [snail-job-grpc-client-executor-127.0.0.1-6] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[6] message:[UNAVAILABLE: io exception]
2026-05-09 09:10:53 [snail-job-grpc-client-executor-127.0.0.1-7] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[7] message:[UNAVAILABLE: io exception]
2026-05-09 09:11:03 [snail-job-grpc-client-executor-127.0.0.1-9] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[9] message:[UNAVAILABLE: io exception]
2026-05-09 09:11:13 [snail-job-grpc-client-executor-127.0.0.1-10] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[10] message:[UNAVAILABLE: io exception]
2026-05-09 09:11:23 [snail-job-grpc-client-executor-127.0.0.1-11] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[11] message:[UNAVAILABLE: io exception]
2026-05-09 09:11:33 [snail-job-grpc-client-executor-127.0.0.1-12] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[12] message:[UNAVAILABLE: io exception]
2026-05-09 09:11:43 [snail-job-grpc-client-executor-127.0.0.1-13] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[13] message:[UNAVAILABLE: io exception]
2026-05-09 09:11:53 [snail-job-grpc-client-executor-127.0.0.1-14] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[14] message:[UNAVAILABLE: io exception]
2026-05-09 09:12:03 [snail-job-grpc-client-executor-127.0.0.1-16] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[16] message:[UNAVAILABLE: io exception]
2026-05-09 09:12:13 [snail-job-grpc-client-executor-127.0.0.1-17] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[17] message:[UNAVAILABLE: io exception]
2026-05-09 09:12:23 [snail-job-grpc-client-executor-127.0.0.1-18] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[18] message:[UNAVAILABLE: io exception]
2026-05-09 09:12:33 [snail-job-grpc-client-executor-127.0.0.1-19] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[19] message:[UNAVAILABLE: io exception]
2026-05-09 09:12:43 [snail-job-grpc-client-executor-127.0.0.1-20] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[20] message:[UNAVAILABLE: io exception]
2026-05-09 09:12:53 [snail-job-grpc-client-executor-127.0.0.1-21] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[21] message:[UNAVAILABLE: io exception]
2026-05-09 09:13:03 [snail-job-grpc-client-executor-127.0.0.1-22] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[22] message:[UNAVAILABLE: io exception]
2026-05-09 09:13:13 [snail-job-grpc-client-executor-127.0.0.1-24] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[24] message:[UNAVAILABLE: io exception]
2026-05-09 09:13:23 [snail-job-grpc-client-executor-127.0.0.1-25] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[25] message:[UNAVAILABLE: io exception]
2026-05-09 09:13:33 [snail-job-grpc-client-executor-127.0.0.1-26] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[26] message:[UNAVAILABLE: io exception]
2026-05-09 09:13:43 [snail-job-grpc-client-executor-127.0.0.1-27] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[27] message:[UNAVAILABLE: io exception]
2026-05-09 09:13:53 [snail-job-grpc-client-executor-127.0.0.1-28] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[28] message:[UNAVAILABLE: io exception]
2026-05-09 09:14:03 [snail-job-grpc-client-executor-127.0.0.1-29] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[30] message:[UNAVAILABLE: io exception]
2026-05-09 09:14:13 [snail-job-grpc-client-executor-127.0.0.1-31] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[31] message:[UNAVAILABLE: io exception]
2026-05-09 09:14:14 [XNIO-1 task-2] ERROR o.d.c.s.h.SaTokenExceptionHandler - 请求地址'/system/user/getInfo',认证失败'token 已被冻结eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOiJzeXNfdXNlcjoxIiwicm5TdHIiOiJwc1JkWHpCOHEwNVNiZFFlMWYwVk9IcVltNUhuVkZadiIsImNsaWVudGlkIjoiZTVjZDdlNDg5MWJmOTVkMWQxOTIwNmNlMjRhN2IzMmUiLCJ0ZW5hbnRJZCI6IjAwMDAwMCIsInVzZXJJZCI6MSwidXNlck5hbWUiOiJhZG1pbiIsImRlcHRJZCI6MTAzLCJkZXB0TmFtZSI6IueglOWPkemDqOmXqCIsImRlcHRDYXRlZ29yeSI6IiJ9.heeUSHrki7ifeaNjqKQdNyDj5EC3jfqyKNAEXscqqcI',无法访问系统资源
2026-05-09 09:14:23 [snail-job-grpc-client-executor-127.0.0.1-32] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[32] message:[UNAVAILABLE: io exception]
2026-05-09 09:14:33 [snail-job-grpc-client-executor-127.0.0.1-33] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[33] message:[UNAVAILABLE: io exception]
2026-05-09 09:14:43 [snail-job-grpc-client-executor-127.0.0.1-34] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[34] message:[UNAVAILABLE: io exception]
2026-05-09 09:14:47 [XNIO-1 task-5] ERROR o.d.c.w.h.GlobalExceptionHandler - Validation failed for argument [0] in public org.dromara.common.core.domain.R<java.lang.Void> org.dromara.system.controller.system.SysUserController.edit(org.dromara.system.domain.bo.SysUserBo): [Field error in object 'sysUserBo' on field 'userName': rejected value [null]; codes [NotBlank.sysUserBo.userName,NotBlank.userName,NotBlank.java.lang.String,NotBlank]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [sysUserBo.userName,userName]; arguments []; default message [userName]]; default message [用户账号不能为空]]
2026-05-09 09:14:48 [XNIO-1 task-5] ERROR o.d.c.w.h.GlobalExceptionHandler - Validation failed for argument [0] in public org.dromara.common.core.domain.R<java.lang.Void> org.dromara.system.controller.system.SysUserController.edit(org.dromara.system.domain.bo.SysUserBo): [Field error in object 'sysUserBo' on field 'userName': rejected value [null]; codes [NotBlank.sysUserBo.userName,NotBlank.userName,NotBlank.java.lang.String,NotBlank]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [sysUserBo.userName,userName]; arguments []; default message [userName]]; default message [用户账号不能为空]]
2026-05-09 09:14:53 [snail-job-grpc-client-executor-127.0.0.1-35] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[35] message:[UNAVAILABLE: io exception]
2026-05-09 09:14:59 [XNIO-1 task-5] ERROR o.d.c.w.h.GlobalExceptionHandler - Validation failed for argument [0] in public org.dromara.common.core.domain.R<java.lang.Void> org.dromara.system.controller.system.SysUserController.edit(org.dromara.system.domain.bo.SysUserBo): [Field error in object 'sysUserBo' on field 'userName': rejected value [null]; codes [NotBlank.sysUserBo.userName,NotBlank.userName,NotBlank.java.lang.String,NotBlank]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [sysUserBo.userName,userName]; arguments []; default message [userName]]; default message [用户账号不能为空]]
2026-05-09 09:15:03 [snail-job-grpc-client-executor-127.0.0.1-37] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[37] message:[UNAVAILABLE: io exception]
2026-05-09 09:15:13 [snail-job-grpc-client-executor-127.0.0.1-38] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[38] message:[UNAVAILABLE: io exception]
2026-05-09 09:15:23 [snail-job-grpc-client-executor-127.0.0.1-39] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[39] message:[UNAVAILABLE: io exception]
2026-05-09 09:15:33 [snail-job-grpc-client-executor-127.0.0.1-40] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[40] message:[UNAVAILABLE: io exception]
2026-05-09 09:15:43 [snail-job-grpc-client-executor-127.0.0.1-41] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[41] message:[UNAVAILABLE: io exception]
2026-05-09 09:15:53 [snail-job-grpc-client-executor-127.0.0.1-42] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[42] message:[UNAVAILABLE: io exception]
2026-05-09 09:16:03 [snail-job-grpc-client-executor-127.0.0.1-44] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[43] message:[UNAVAILABLE: io exception]
2026-05-09 09:16:13 [snail-job-grpc-client-executor-127.0.0.1-45] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[45] message:[UNAVAILABLE: io exception]
2026-05-09 09:16:23 [snail-job-grpc-client-executor-127.0.0.1-46] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[46] message:[UNAVAILABLE: io exception]
2026-05-09 09:16:33 [snail-job-grpc-client-executor-127.0.0.1-47] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[47] message:[UNAVAILABLE: io exception]
2026-05-09 09:16:43 [snail-job-grpc-client-executor-127.0.0.1-48] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[48] message:[UNAVAILABLE: io exception]
2026-05-09 09:16:53 [snail-job-grpc-client-executor-127.0.0.1-49] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[49] message:[UNAVAILABLE: io exception]
2026-05-09 09:17:03 [snail-job-grpc-client-executor-127.0.0.1-51] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[50] message:[UNAVAILABLE: io exception]
2026-05-09 09:17:13 [snail-job-grpc-client-executor-127.0.0.1-52] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[52] message:[UNAVAILABLE: io exception]
2026-05-09 09:17:23 [snail-job-grpc-client-executor-127.0.0.1-53] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[53] message:[UNAVAILABLE: io exception]
2026-05-09 09:17:33 [snail-job-grpc-client-executor-127.0.0.1-54] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[54] message:[UNAVAILABLE: io exception]
2026-05-09 09:17:43 [snail-job-grpc-client-executor-127.0.0.1-55] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[55] message:[UNAVAILABLE: io exception]
2026-05-09 09:17:53 [snail-job-grpc-client-executor-127.0.0.1-56] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[56] message:[UNAVAILABLE: io exception]
2026-05-09 09:18:03 [snail-job-grpc-client-executor-127.0.0.1-57] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[57] message:[UNAVAILABLE: io exception]
2026-05-09 09:18:13 [snail-job-grpc-client-executor-127.0.0.1-59] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[59] message:[UNAVAILABLE: io exception]
2026-05-09 09:18:23 [snail-job-grpc-client-executor-127.0.0.1-60] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[60] message:[UNAVAILABLE: io exception]
2026-05-09 09:18:33 [snail-job-grpc-client-executor-127.0.0.1-61] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[61] message:[UNAVAILABLE: io exception]
2026-05-09 09:18:43 [snail-job-grpc-client-executor-127.0.0.1-62] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[62] message:[UNAVAILABLE: io exception]
2026-05-09 09:18:53 [snail-job-grpc-client-executor-127.0.0.1-63] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[63] message:[UNAVAILABLE: io exception]
2026-05-09 09:19:03 [snail-job-grpc-client-executor-127.0.0.1-65] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[64] message:[UNAVAILABLE: io exception]
2026-05-09 09:19:13 [snail-job-grpc-client-executor-127.0.0.1-66] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[66] message:[UNAVAILABLE: io exception]
2026-05-09 09:19:23 [snail-job-grpc-client-executor-127.0.0.1-67] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[67] message:[UNAVAILABLE: io exception]
2026-05-09 09:19:33 [snail-job-grpc-client-executor-127.0.0.1-68] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[68] message:[UNAVAILABLE: Channel shutdown invoked]
2026-05-09 09:19:53 [snail-job-grpc-client-executor-127.0.0.1-0] ERROR c.a.s.c.j.c.r.JobExecutorRegistrar - Job executors register error requestId:[0] message:[UNAVAILABLE: io exception]
2026-05-09 09:19:53 [snail-job-grpc-client-executor-127.0.0.1-2] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[1] message:[UNAVAILABLE: io exception]
2026-05-09 09:20:03 [snail-job-grpc-client-executor-127.0.0.1-3] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[3] message:[UNAVAILABLE: io exception]
2026-05-09 09:20:08 [XNIO-1 task-2] ERROR o.d.c.s.h.SaTokenExceptionHandler - 请求地址'/app/v1/deviceList',权限码校验失败'无此权限app:device:list'
2026-05-09 09:20:13 [snail-job-grpc-client-executor-127.0.0.1-4] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[4] message:[UNAVAILABLE: io exception]
2026-05-09 09:20:23 [snail-job-grpc-client-executor-127.0.0.1-5] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[5] message:[UNAVAILABLE: io exception]
2026-05-09 09:20:33 [snail-job-grpc-client-executor-127.0.0.1-6] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[6] message:[UNAVAILABLE: io exception]
2026-05-09 09:20:43 [snail-job-grpc-client-executor-127.0.0.1-7] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[7] message:[UNAVAILABLE: io exception]
2026-05-09 09:20:53 [snail-job-grpc-client-executor-127.0.0.1-8] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[9] message:[UNAVAILABLE: io exception]
2026-05-09 09:21:03 [snail-job-grpc-client-executor-127.0.0.1-10] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[10] message:[UNAVAILABLE: io exception]
2026-05-09 09:21:13 [snail-job-grpc-client-executor-127.0.0.1-11] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[11] message:[UNAVAILABLE: io exception]
2026-05-09 09:21:23 [snail-job-grpc-client-executor-127.0.0.1-12] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[12] message:[UNAVAILABLE: io exception]
2026-05-09 09:21:33 [snail-job-grpc-client-executor-127.0.0.1-13] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[13] message:[UNAVAILABLE: io exception]
2026-05-09 09:21:43 [snail-job-grpc-client-executor-127.0.0.1-14] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[14] message:[UNAVAILABLE: io exception]
2026-05-09 09:21:53 [XNIO-1 task-4] ERROR o.d.c.w.h.GlobalExceptionHandler - 请求地址'/system/tenant/list'不存在.
2026-05-09 09:21:53 [snail-job-grpc-client-executor-127.0.0.1-15] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[15] message:[UNAVAILABLE: io exception]
2026-05-09 09:21:55 [XNIO-1 task-4] ERROR o.d.c.w.h.GlobalExceptionHandler - 请求地址'/system/tenant/package/list'不存在.
2026-05-09 09:22:03 [snail-job-grpc-client-executor-127.0.0.1-17] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[17] message:[UNAVAILABLE: io exception]
2026-05-09 09:22:13 [snail-job-grpc-client-executor-127.0.0.1-18] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[18] message:[UNAVAILABLE: io exception]
2026-05-09 09:22:23 [snail-job-grpc-client-executor-127.0.0.1-19] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[19] message:[UNAVAILABLE: io exception]
2026-05-09 09:22:33 [snail-job-grpc-client-executor-127.0.0.1-20] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[20] message:[UNAVAILABLE: io exception]
2026-05-09 09:22:41 [XNIO-1 task-5] ERROR o.d.c.w.h.GlobalExceptionHandler - 本部门及以下已分配,不能删除!
2026-05-09 09:22:43 [snail-job-grpc-client-executor-127.0.0.1-21] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[21] message:[UNAVAILABLE: io exception]
2026-05-09 09:22:53 [snail-job-grpc-client-executor-127.0.0.1-23] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[22] message:[UNAVAILABLE: io exception]
2026-05-09 09:23:03 [snail-job-grpc-client-executor-127.0.0.1-24] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[24] message:[UNAVAILABLE: io exception]
2026-05-09 09:23:13 [snail-job-grpc-client-executor-127.0.0.1-25] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[25] message:[UNAVAILABLE: io exception]
2026-05-09 09:23:23 [snail-job-grpc-client-executor-127.0.0.1-26] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[26] message:[UNAVAILABLE: io exception]
2026-05-09 09:23:33 [snail-job-grpc-client-executor-127.0.0.1-27] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[27] message:[UNAVAILABLE: io exception]
2026-05-09 09:23:43 [snail-job-grpc-client-executor-127.0.0.1-28] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[28] message:[UNAVAILABLE: io exception]
2026-05-09 09:23:53 [snail-job-grpc-client-executor-127.0.0.1-29] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[29] message:[UNAVAILABLE: io exception]
2026-05-09 09:24:03 [snail-job-grpc-client-executor-127.0.0.1-31] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[31] message:[UNAVAILABLE: io exception]
2026-05-09 09:24:13 [snail-job-grpc-client-executor-127.0.0.1-32] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[32] message:[UNAVAILABLE: io exception]
2026-05-09 09:24:23 [snail-job-grpc-client-executor-127.0.0.1-33] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[33] message:[UNAVAILABLE: io exception]
2026-05-09 09:24:33 [snail-job-grpc-client-executor-127.0.0.1-34] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[34] message:[UNAVAILABLE: io exception]
2026-05-09 09:24:43 [snail-job-grpc-client-executor-127.0.0.1-35] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[35] message:[UNAVAILABLE: io exception]
2026-05-09 09:24:53 [snail-job-grpc-client-executor-127.0.0.1-36] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[36] message:[UNAVAILABLE: io exception]
2026-05-09 09:25:03 [snail-job-grpc-client-executor-127.0.0.1-38] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[38] message:[UNAVAILABLE: io exception]
2026-05-09 09:25:13 [snail-job-grpc-client-executor-127.0.0.1-39] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[39] message:[UNAVAILABLE: io exception]
2026-05-09 09:25:23 [snail-job-grpc-client-executor-127.0.0.1-40] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[40] message:[UNAVAILABLE: io exception]
2026-05-09 09:25:33 [snail-job-grpc-client-executor-127.0.0.1-41] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[41] message:[UNAVAILABLE: io exception]
2026-05-09 09:25:43 [snail-job-grpc-client-executor-127.0.0.1-42] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[42] message:[UNAVAILABLE: io exception]
2026-05-09 09:25:53 [snail-job-grpc-client-executor-127.0.0.1-44] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[44] message:[UNAVAILABLE: io exception]
2026-05-09 09:26:03 [snail-job-grpc-client-executor-127.0.0.1-45] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[45] message:[UNAVAILABLE: io exception]
2026-05-09 09:26:13 [snail-job-grpc-client-executor-127.0.0.1-46] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[46] message:[UNAVAILABLE: io exception]
2026-05-09 09:26:23 [snail-job-grpc-client-executor-127.0.0.1-47] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[47] message:[UNAVAILABLE: io exception]
2026-05-09 09:26:33 [snail-job-grpc-client-executor-127.0.0.1-48] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[48] message:[UNAVAILABLE: io exception]
2026-05-09 09:26:43 [snail-job-grpc-client-executor-127.0.0.1-49] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[49] message:[UNAVAILABLE: io exception]
2026-05-09 09:26:53 [snail-job-grpc-client-executor-127.0.0.1-50] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[51] message:[UNAVAILABLE: io exception]
2026-05-09 09:27:03 [snail-job-grpc-client-executor-127.0.0.1-52] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[52] message:[UNAVAILABLE: io exception]
2026-05-09 09:27:13 [snail-job-grpc-client-executor-127.0.0.1-53] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[53] message:[UNAVAILABLE: io exception]
2026-05-09 09:27:23 [snail-job-grpc-client-executor-127.0.0.1-54] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[54] message:[UNAVAILABLE: io exception]
2026-05-09 09:27:33 [snail-job-grpc-client-executor-127.0.0.1-55] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[55] message:[UNAVAILABLE: io exception]
2026-05-09 09:27:43 [snail-job-grpc-client-executor-127.0.0.1-56] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[56] message:[UNAVAILABLE: io exception]
2026-05-09 09:27:53 [snail-job-grpc-client-executor-127.0.0.1-58] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[57] message:[UNAVAILABLE: io exception]
2026-05-09 09:28:03 [snail-job-grpc-client-executor-127.0.0.1-59] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[59] message:[UNAVAILABLE: io exception]
2026-05-09 09:28:13 [snail-job-grpc-client-executor-127.0.0.1-60] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[60] message:[UNAVAILABLE: io exception]
2026-05-09 09:28:23 [snail-job-grpc-client-executor-127.0.0.1-61] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[61] message:[UNAVAILABLE: io exception]
2026-05-09 09:28:33 [snail-job-grpc-client-executor-127.0.0.1-62] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[62] message:[UNAVAILABLE: io exception]
2026-05-09 09:28:43 [snail-job-grpc-client-executor-127.0.0.1-63] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[63] message:[UNAVAILABLE: io exception]
2026-05-09 09:28:53 [snail-job-grpc-client-executor-127.0.0.1-64] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[64] message:[UNAVAILABLE: io exception]
2026-05-09 09:29:03 [snail-job-grpc-client-executor-127.0.0.1-66] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[66] message:[UNAVAILABLE: io exception]
2026-05-09 09:29:13 [snail-job-grpc-client-executor-127.0.0.1-67] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[67] message:[UNAVAILABLE: io exception]
2026-05-09 09:29:23 [snail-job-grpc-client-executor-127.0.0.1-68] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[68] message:[UNAVAILABLE: io exception]
2026-05-09 09:29:33 [snail-job-grpc-client-executor-127.0.0.1-69] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[69] message:[UNAVAILABLE: io exception]
2026-05-09 09:29:43 [snail-job-grpc-client-executor-127.0.0.1-70] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[70] message:[UNAVAILABLE: io exception]
2026-05-09 09:29:53 [snail-job-grpc-client-executor-127.0.0.1-71] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[72] message:[UNAVAILABLE: io exception]
2026-05-09 09:30:03 [snail-job-grpc-client-executor-127.0.0.1-73] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[73] message:[UNAVAILABLE: io exception]
2026-05-09 09:30:13 [snail-job-grpc-client-executor-127.0.0.1-74] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[74] message:[UNAVAILABLE: io exception]
2026-05-09 09:30:23 [snail-job-grpc-client-executor-127.0.0.1-75] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[75] message:[UNAVAILABLE: io exception]
2026-05-09 09:30:33 [snail-job-grpc-client-executor-127.0.0.1-76] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[76] message:[UNAVAILABLE: io exception]
2026-05-09 09:30:43 [snail-job-grpc-client-executor-127.0.0.1-77] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[77] message:[UNAVAILABLE: io exception]
2026-05-09 09:30:53 [snail-job-grpc-client-executor-127.0.0.1-78] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[79] message:[UNAVAILABLE: io exception]
2026-05-09 09:31:03 [snail-job-grpc-client-executor-127.0.0.1-80] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[80] message:[UNAVAILABLE: io exception]
2026-05-09 09:31:13 [snail-job-grpc-client-executor-127.0.0.1-81] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[81] message:[UNAVAILABLE: io exception]
2026-05-09 09:31:23 [snail-job-grpc-client-executor-127.0.0.1-82] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[82] message:[UNAVAILABLE: io exception]
2026-05-09 09:31:33 [snail-job-grpc-client-executor-127.0.0.1-83] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[83] message:[UNAVAILABLE: io exception]
2026-05-09 09:31:43 [snail-job-grpc-client-executor-127.0.0.1-84] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[84] message:[UNAVAILABLE: io exception]
2026-05-09 09:31:53 [snail-job-grpc-client-executor-127.0.0.1-86] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[86] message:[UNAVAILABLE: io exception]
2026-05-09 09:32:03 [snail-job-grpc-client-executor-127.0.0.1-87] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[87] message:[UNAVAILABLE: io exception]
2026-05-09 09:32:13 [snail-job-grpc-client-executor-127.0.0.1-88] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[88] message:[UNAVAILABLE: io exception]
2026-05-09 09:32:23 [snail-job-grpc-client-executor-127.0.0.1-89] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[89] message:[UNAVAILABLE: io exception]
2026-05-09 09:32:33 [snail-job-grpc-client-executor-127.0.0.1-90] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[90] message:[UNAVAILABLE: io exception]
2026-05-09 09:32:43 [snail-job-grpc-client-executor-127.0.0.1-91] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[91] message:[UNAVAILABLE: io exception]
2026-05-09 09:32:53 [snail-job-grpc-client-executor-127.0.0.1-92] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[92] message:[UNAVAILABLE: io exception]
2026-05-09 09:33:03 [snail-job-grpc-client-executor-127.0.0.1-94] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[94] message:[UNAVAILABLE: io exception]
2026-05-09 09:33:13 [snail-job-grpc-client-executor-127.0.0.1-95] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[95] message:[UNAVAILABLE: io exception]
2026-05-09 09:33:23 [snail-job-grpc-client-executor-127.0.0.1-96] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[96] message:[UNAVAILABLE: io exception]
2026-05-09 09:33:33 [snail-job-grpc-client-executor-127.0.0.1-97] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[97] message:[UNAVAILABLE: io exception]
2026-05-09 09:33:43 [snail-job-grpc-client-executor-127.0.0.1-98] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[98] message:[UNAVAILABLE: io exception]
2026-05-09 09:33:53 [snail-job-grpc-client-executor-127.0.0.1-99] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[100] message:[UNAVAILABLE: io exception]
2026-05-09 09:34:03 [snail-job-grpc-client-executor-127.0.0.1-101] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[101] message:[UNAVAILABLE: io exception]
2026-05-09 09:34:13 [snail-job-grpc-client-executor-127.0.0.1-102] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[102] message:[UNAVAILABLE: io exception]
2026-05-09 09:34:23 [snail-job-grpc-client-executor-127.0.0.1-103] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[103] message:[UNAVAILABLE: io exception]
2026-05-09 09:34:33 [snail-job-grpc-client-executor-127.0.0.1-104] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[104] message:[UNAVAILABLE: io exception]
2026-05-09 09:34:43 [snail-job-grpc-client-executor-127.0.0.1-105] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[105] message:[UNAVAILABLE: io exception]
2026-05-09 09:34:53 [snail-job-grpc-client-executor-127.0.0.1-106] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[106] message:[UNAVAILABLE: io exception]
2026-05-09 09:35:03 [snail-job-grpc-client-executor-127.0.0.1-108] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[108] message:[UNAVAILABLE: io exception]
2026-05-09 09:35:13 [snail-job-grpc-client-executor-127.0.0.1-109] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[109] message:[UNAVAILABLE: io exception]
2026-05-09 09:35:23 [snail-job-grpc-client-executor-127.0.0.1-110] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[110] message:[UNAVAILABLE: io exception]
2026-05-09 09:35:33 [snail-job-grpc-client-executor-127.0.0.1-111] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[111] message:[UNAVAILABLE: io exception]
2026-05-09 09:35:43 [snail-job-grpc-client-executor-127.0.0.1-112] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[112] message:[UNAVAILABLE: io exception]
2026-05-09 09:35:53 [snail-job-grpc-client-executor-127.0.0.1-114] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[114] message:[UNAVAILABLE: io exception]
2026-05-09 09:36:03 [snail-job-grpc-client-executor-127.0.0.1-115] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[115] message:[UNAVAILABLE: io exception]
2026-05-09 09:36:13 [snail-job-grpc-client-executor-127.0.0.1-116] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[116] message:[UNAVAILABLE: io exception]
2026-05-09 09:36:23 [snail-job-grpc-client-executor-127.0.0.1-117] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[117] message:[UNAVAILABLE: io exception]
2026-05-09 09:36:33 [snail-job-grpc-client-executor-127.0.0.1-118] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[118] message:[UNAVAILABLE: io exception]
2026-05-09 09:36:43 [snail-job-grpc-client-executor-127.0.0.1-119] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[119] message:[UNAVAILABLE: io exception]
2026-05-09 09:36:53 [snail-job-grpc-client-executor-127.0.0.1-121] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[121] message:[UNAVAILABLE: io exception]
2026-05-09 09:37:03 [snail-job-grpc-client-executor-127.0.0.1-122] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[122] message:[UNAVAILABLE: io exception]
2026-05-09 09:37:13 [snail-job-grpc-client-executor-127.0.0.1-123] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[123] message:[UNAVAILABLE: io exception]
2026-05-09 09:37:23 [snail-job-grpc-client-executor-127.0.0.1-124] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[124] message:[UNAVAILABLE: io exception]
2026-05-09 09:37:33 [snail-job-grpc-client-executor-127.0.0.1-125] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[125] message:[UNAVAILABLE: io exception]
2026-05-09 09:37:43 [snail-job-grpc-client-executor-127.0.0.1-126] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[126] message:[UNAVAILABLE: io exception]
2026-05-09 09:37:53 [snail-job-grpc-client-executor-127.0.0.1-127] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[127] message:[UNAVAILABLE: io exception]
2026-05-09 09:38:03 [snail-job-grpc-client-executor-127.0.0.1-129] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[129] message:[UNAVAILABLE: io exception]
2026-05-09 09:38:13 [snail-job-grpc-client-executor-127.0.0.1-130] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[130] message:[UNAVAILABLE: io exception]
2026-05-09 09:38:23 [snail-job-grpc-client-executor-127.0.0.1-131] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[131] message:[UNAVAILABLE: io exception]
2026-05-09 09:38:33 [snail-job-grpc-client-executor-127.0.0.1-132] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[132] message:[UNAVAILABLE: io exception]
2026-05-09 09:38:43 [snail-job-grpc-client-executor-127.0.0.1-133] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[133] message:[UNAVAILABLE: io exception]
2026-05-09 09:38:53 [snail-job-grpc-client-executor-127.0.0.1-135] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[135] message:[UNAVAILABLE: io exception]
2026-05-09 09:39:03 [snail-job-grpc-client-executor-127.0.0.1-136] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[136] message:[UNAVAILABLE: io exception]
2026-05-09 09:39:13 [snail-job-grpc-client-executor-127.0.0.1-137] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[137] message:[UNAVAILABLE: io exception]
2026-05-09 09:39:23 [snail-job-grpc-client-executor-127.0.0.1-138] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[138] message:[UNAVAILABLE: io exception]
2026-05-09 09:39:33 [snail-job-grpc-client-executor-127.0.0.1-139] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[139] message:[UNAVAILABLE: io exception]
2026-05-09 09:39:43 [snail-job-grpc-client-executor-127.0.0.1-140] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[140] message:[UNAVAILABLE: io exception]
2026-05-09 09:39:53 [snail-job-grpc-client-executor-127.0.0.1-142] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[142] message:[UNAVAILABLE: io exception]
2026-05-09 09:40:03 [snail-job-grpc-client-executor-127.0.0.1-143] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[143] message:[UNAVAILABLE: Channel shutdown invoked]
2026-05-09 09:40:30 [snail-job-grpc-client-executor-127.0.0.1-0] ERROR c.a.s.c.j.c.r.JobExecutorRegistrar - Job executors register error requestId:[0] message:[UNAVAILABLE: io exception]
2026-05-09 09:40:30 [snail-job-grpc-client-executor-127.0.0.1-2] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[1] message:[UNAVAILABLE: io exception]
2026-05-09 09:40:39 [XNIO-1 task-2] ERROR o.d.c.s.h.SaTokenExceptionHandler - 请求地址'/app/v1/deviceList',权限码校验失败'无此权限app:device:list'
2026-05-09 09:40:40 [snail-job-grpc-client-executor-127.0.0.1-3] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[3] message:[UNAVAILABLE: io exception]
2026-05-09 09:40:50 [snail-job-grpc-client-executor-127.0.0.1-4] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[4] message:[UNAVAILABLE: Channel shutdown invoked]
2026-05-09 09:41:09 [snail-job-grpc-client-executor-127.0.0.1-0] ERROR c.a.s.c.j.c.r.JobExecutorRegistrar - Job executors register error requestId:[0] message:[UNAVAILABLE: io exception]
2026-05-09 09:41:09 [snail-job-grpc-client-executor-127.0.0.1-2] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[1] message:[UNAVAILABLE: io exception]
2026-05-09 09:41:19 [snail-job-grpc-client-executor-127.0.0.1-3] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[3] message:[UNAVAILABLE: io exception]
2026-05-09 09:41:29 [snail-job-grpc-client-executor-127.0.0.1-4] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[4] message:[UNAVAILABLE: io exception]
2026-05-09 09:41:39 [snail-job-grpc-client-executor-127.0.0.1-5] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[5] message:[UNAVAILABLE: io exception]
2026-05-09 09:41:49 [snail-job-grpc-client-executor-127.0.0.1-6] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[6] message:[UNAVAILABLE: io exception]
2026-05-09 09:41:59 [snail-job-grpc-client-executor-127.0.0.1-7] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[7] message:[UNAVAILABLE: io exception]
2026-05-09 09:42:09 [snail-job-grpc-client-executor-127.0.0.1-8] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[9] message:[UNAVAILABLE: io exception]
2026-05-09 09:42:32 [snail-job-grpc-client-executor-127.0.0.1-0] ERROR c.a.s.c.j.c.r.JobExecutorRegistrar - Job executors register error requestId:[0] message:[UNAVAILABLE: io exception]
2026-05-09 09:42:32 [snail-job-grpc-client-executor-127.0.0.1-2] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[1] message:[UNAVAILABLE: io exception]
2026-05-09 09:42:42 [snail-job-grpc-client-executor-127.0.0.1-3] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[3] message:[UNAVAILABLE: io exception]
2026-05-09 09:42:52 [snail-job-grpc-client-executor-127.0.0.1-4] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[4] message:[UNAVAILABLE: io exception]
2026-05-09 09:43:02 [snail-job-grpc-client-executor-127.0.0.1-5] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[5] message:[UNAVAILABLE: io exception]
2026-05-09 09:43:12 [snail-job-grpc-client-executor-127.0.0.1-6] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[6] message:[UNAVAILABLE: io exception]
2026-05-09 09:43:22 [snail-job-grpc-client-executor-127.0.0.1-7] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[7] message:[UNAVAILABLE: io exception]
2026-05-09 09:43:32 [snail-job-grpc-client-executor-127.0.0.1-8] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[8] message:[UNAVAILABLE: io exception]
2026-05-09 09:43:42 [snail-job-grpc-client-executor-127.0.0.1-10] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[10] message:[UNAVAILABLE: io exception]
2026-05-09 09:43:52 [snail-job-grpc-client-executor-127.0.0.1-11] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[11] message:[UNAVAILABLE: io exception]
2026-05-09 09:44:02 [snail-job-grpc-client-executor-127.0.0.1-12] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[12] message:[UNAVAILABLE: io exception]
2026-05-09 09:44:12 [snail-job-grpc-client-executor-127.0.0.1-13] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[13] message:[UNAVAILABLE: io exception]
2026-05-09 09:44:22 [snail-job-grpc-client-executor-127.0.0.1-14] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[14] message:[UNAVAILABLE: io exception]
2026-05-09 09:44:32 [snail-job-grpc-client-executor-127.0.0.1-15] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[15] message:[UNAVAILABLE: io exception]
2026-05-09 09:44:42 [snail-job-grpc-client-executor-127.0.0.1-17] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[17] message:[UNAVAILABLE: io exception]
2026-05-09 09:44:52 [snail-job-grpc-client-executor-127.0.0.1-18] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[18] message:[UNAVAILABLE: io exception]
2026-05-09 09:45:02 [snail-job-grpc-client-executor-127.0.0.1-19] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[19] message:[UNAVAILABLE: io exception]
2026-05-09 09:45:12 [snail-job-grpc-client-executor-127.0.0.1-20] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[20] message:[UNAVAILABLE: io exception]
2026-05-09 09:45:22 [snail-job-grpc-client-executor-127.0.0.1-21] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[21] message:[UNAVAILABLE: io exception]
2026-05-09 09:45:32 [snail-job-grpc-client-executor-127.0.0.1-22] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[23] message:[UNAVAILABLE: io exception]
2026-05-09 09:45:42 [snail-job-grpc-client-executor-127.0.0.1-24] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[24] message:[UNAVAILABLE: io exception]
2026-05-09 09:45:52 [snail-job-grpc-client-executor-127.0.0.1-25] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[25] message:[UNAVAILABLE: io exception]
2026-05-09 09:46:02 [snail-job-grpc-client-executor-127.0.0.1-26] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[26] message:[UNAVAILABLE: io exception]
2026-05-09 09:46:12 [snail-job-grpc-client-executor-127.0.0.1-27] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[27] message:[UNAVAILABLE: io exception]
2026-05-09 09:46:22 [snail-job-grpc-client-executor-127.0.0.1-28] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[28] message:[UNAVAILABLE: io exception]
2026-05-09 09:46:32 [snail-job-grpc-client-executor-127.0.0.1-30] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[30] message:[UNAVAILABLE: io exception]
2026-05-09 09:46:42 [snail-job-grpc-client-executor-127.0.0.1-31] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[31] message:[UNAVAILABLE: io exception]
2026-05-09 09:46:52 [snail-job-grpc-client-executor-127.0.0.1-32] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[32] message:[UNAVAILABLE: io exception]
2026-05-09 09:47:02 [snail-job-grpc-client-executor-127.0.0.1-33] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[33] message:[UNAVAILABLE: io exception]
2026-05-09 09:47:12 [snail-job-grpc-client-executor-127.0.0.1-34] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[34] message:[UNAVAILABLE: io exception]
2026-05-09 09:47:22 [snail-job-grpc-client-executor-127.0.0.1-35] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[35] message:[UNAVAILABLE: io exception]
2026-05-09 09:47:59 [snail-job-grpc-client-executor-127.0.0.1-0] ERROR c.a.s.c.j.c.r.JobExecutorRegistrar - Job executors register error requestId:[0] message:[UNAVAILABLE: io exception]
2026-05-09 09:47:59 [snail-job-grpc-client-executor-127.0.0.1-2] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[1] message:[UNAVAILABLE: io exception]
2026-05-09 09:48:09 [snail-job-grpc-client-executor-127.0.0.1-3] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[3] message:[UNAVAILABLE: io exception]
2026-05-09 09:48:19 [snail-job-grpc-client-executor-127.0.0.1-4] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[4] message:[UNAVAILABLE: io exception]
2026-05-09 09:48:29 [snail-job-grpc-client-executor-127.0.0.1-5] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[5] message:[UNAVAILABLE: io exception]
2026-05-09 09:48:39 [snail-job-grpc-client-executor-127.0.0.1-6] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[6] message:[UNAVAILABLE: io exception]
2026-05-09 09:48:49 [snail-job-grpc-client-executor-127.0.0.1-7] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[7] message:[UNAVAILABLE: io exception]
2026-05-09 09:48:59 [snail-job-grpc-client-executor-127.0.0.1-8] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[9] message:[UNAVAILABLE: io exception]
2026-05-09 09:49:09 [snail-job-grpc-client-executor-127.0.0.1-10] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[10] message:[UNAVAILABLE: io exception]
2026-05-09 09:49:19 [snail-job-grpc-client-executor-127.0.0.1-11] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[11] message:[UNAVAILABLE: io exception]
2026-05-09 09:49:29 [snail-job-grpc-client-executor-127.0.0.1-12] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[12] message:[UNAVAILABLE: io exception]
2026-05-09 09:49:39 [snail-job-grpc-client-executor-127.0.0.1-13] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[13] message:[UNAVAILABLE: io exception]
2026-05-09 09:49:49 [snail-job-grpc-client-executor-127.0.0.1-14] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[14] message:[UNAVAILABLE: io exception]
2026-05-09 09:50:13 [snail-job-grpc-client-executor-127.0.0.1-0] ERROR c.a.s.c.j.c.r.JobExecutorRegistrar - Job executors register error requestId:[0] message:[UNAVAILABLE: io exception]
2026-05-09 09:50:13 [snail-job-grpc-client-executor-127.0.0.1-2] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[1] message:[UNAVAILABLE: io exception]
2026-05-09 09:50:23 [snail-job-grpc-client-executor-127.0.0.1-3] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[3] message:[UNAVAILABLE: io exception]
2026-05-09 09:50:33 [snail-job-grpc-client-executor-127.0.0.1-4] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[4] message:[UNAVAILABLE: io exception]
2026-05-09 09:50:43 [snail-job-grpc-client-executor-127.0.0.1-5] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[5] message:[UNAVAILABLE: io exception]
2026-05-09 09:51:00 [snail-job-grpc-client-executor-127.0.0.1-0] ERROR c.a.s.c.j.c.r.JobExecutorRegistrar - Job executors register error requestId:[0] message:[UNAVAILABLE: io exception]
2026-05-09 09:51:00 [snail-job-grpc-client-executor-127.0.0.1-2] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[1] message:[UNAVAILABLE: io exception]
2026-05-09 09:51:10 [snail-job-grpc-client-executor-127.0.0.1-3] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[3] message:[UNAVAILABLE: io exception]
2026-05-09 09:51:20 [snail-job-grpc-client-executor-127.0.0.1-4] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[4] message:[UNAVAILABLE: io exception]
2026-05-09 09:51:30 [snail-job-grpc-client-executor-127.0.0.1-5] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[5] message:[UNAVAILABLE: io exception]
2026-05-09 09:51:40 [snail-job-grpc-client-executor-127.0.0.1-6] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[6] message:[UNAVAILABLE: io exception]
2026-05-09 09:51:50 [snail-job-grpc-client-executor-127.0.0.1-7] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[7] message:[UNAVAILABLE: io exception]
2026-05-09 09:52:00 [snail-job-grpc-client-executor-127.0.0.1-8] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[8] message:[UNAVAILABLE: io exception]
2026-05-09 09:52:10 [snail-job-grpc-client-executor-127.0.0.1-10] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[10] message:[UNAVAILABLE: io exception]
2026-05-09 09:52:20 [snail-job-grpc-client-executor-127.0.0.1-11] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[11] message:[UNAVAILABLE: io exception]
2026-05-09 09:52:30 [snail-job-grpc-client-executor-127.0.0.1-12] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[12] message:[UNAVAILABLE: io exception]
2026-05-09 09:52:40 [snail-job-grpc-client-executor-127.0.0.1-13] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[13] message:[UNAVAILABLE: io exception]
2026-05-09 09:52:50 [snail-job-grpc-client-executor-127.0.0.1-14] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[14] message:[UNAVAILABLE: io exception]
2026-05-09 09:53:00 [snail-job-grpc-client-executor-127.0.0.1-15] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[15] message:[UNAVAILABLE: io exception]
2026-05-09 09:53:10 [snail-job-grpc-client-executor-127.0.0.1-17] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[17] message:[UNAVAILABLE: io exception]
2026-05-09 09:53:20 [snail-job-grpc-client-executor-127.0.0.1-18] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[18] message:[UNAVAILABLE: io exception]
2026-05-09 09:53:30 [snail-job-grpc-client-executor-127.0.0.1-19] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[19] message:[UNAVAILABLE: io exception]
2026-05-09 09:53:40 [snail-job-grpc-client-executor-127.0.0.1-20] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[20] message:[UNAVAILABLE: io exception]
2026-05-09 09:53:50 [snail-job-grpc-client-executor-127.0.0.1-21] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[21] message:[UNAVAILABLE: io exception]
2026-05-09 09:54:00 [snail-job-grpc-client-executor-127.0.0.1-23] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[23] message:[UNAVAILABLE: io exception]
2026-05-09 09:54:10 [snail-job-grpc-client-executor-127.0.0.1-24] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[24] message:[UNAVAILABLE: io exception]
2026-05-09 09:54:20 [snail-job-grpc-client-executor-127.0.0.1-25] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[25] message:[UNAVAILABLE: io exception]
2026-05-09 09:54:30 [snail-job-grpc-client-executor-127.0.0.1-26] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[26] message:[UNAVAILABLE: io exception]
2026-05-09 09:54:40 [snail-job-grpc-client-executor-127.0.0.1-27] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[27] message:[UNAVAILABLE: io exception]
2026-05-09 09:54:50 [snail-job-grpc-client-executor-127.0.0.1-28] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[28] message:[UNAVAILABLE: io exception]
2026-05-09 09:55:00 [snail-job-grpc-client-executor-127.0.0.1-29] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[30] message:[UNAVAILABLE: io exception]
2026-05-09 09:55:10 [snail-job-grpc-client-executor-127.0.0.1-31] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[31] message:[UNAVAILABLE: io exception]
2026-05-09 09:55:20 [snail-job-grpc-client-executor-127.0.0.1-32] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[32] message:[UNAVAILABLE: io exception]
2026-05-09 09:55:30 [snail-job-grpc-client-executor-127.0.0.1-33] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[33] message:[UNAVAILABLE: io exception]
2026-05-09 09:55:40 [snail-job-grpc-client-executor-127.0.0.1-34] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[34] message:[UNAVAILABLE: io exception]
2026-05-09 09:55:50 [snail-job-grpc-client-executor-127.0.0.1-35] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[35] message:[UNAVAILABLE: io exception]
2026-05-09 09:56:00 [snail-job-grpc-client-executor-127.0.0.1-36] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[36] message:[UNAVAILABLE: io exception]
2026-05-09 09:56:10 [snail-job-grpc-client-executor-127.0.0.1-38] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[38] message:[UNAVAILABLE: io exception]
2026-05-09 09:56:20 [snail-job-grpc-client-executor-127.0.0.1-39] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[39] message:[UNAVAILABLE: io exception]
2026-05-09 09:56:30 [snail-job-grpc-client-executor-127.0.0.1-40] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[40] message:[UNAVAILABLE: io exception]
2026-05-09 09:56:40 [snail-job-grpc-client-executor-127.0.0.1-41] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[41] message:[UNAVAILABLE: io exception]
2026-05-09 09:56:50 [snail-job-grpc-client-executor-127.0.0.1-42] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[42] message:[UNAVAILABLE: io exception]
2026-05-09 09:57:00 [snail-job-grpc-client-executor-127.0.0.1-43] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[43] message:[UNAVAILABLE: io exception]
2026-05-09 09:57:10 [snail-job-grpc-client-executor-127.0.0.1-45] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[45] message:[UNAVAILABLE: io exception]
2026-05-09 09:57:20 [snail-job-grpc-client-executor-127.0.0.1-46] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[46] message:[UNAVAILABLE: io exception]
2026-05-09 09:57:30 [snail-job-grpc-client-executor-127.0.0.1-47] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[47] message:[UNAVAILABLE: io exception]
2026-05-09 09:57:40 [snail-job-grpc-client-executor-127.0.0.1-48] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[48] message:[UNAVAILABLE: io exception]
2026-05-09 09:57:50 [snail-job-grpc-client-executor-127.0.0.1-49] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[49] message:[UNAVAILABLE: io exception]
2026-05-09 09:58:00 [snail-job-grpc-client-executor-127.0.0.1-50] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[50] message:[UNAVAILABLE: io exception]
2026-05-09 09:58:10 [snail-job-grpc-client-executor-127.0.0.1-52] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[52] message:[UNAVAILABLE: io exception]
2026-05-09 09:58:20 [snail-job-grpc-client-executor-127.0.0.1-53] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[53] message:[UNAVAILABLE: io exception]
2026-05-09 09:58:30 [snail-job-grpc-client-executor-127.0.0.1-54] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[54] message:[UNAVAILABLE: io exception]
2026-05-09 09:58:40 [snail-job-grpc-client-executor-127.0.0.1-55] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[55] message:[UNAVAILABLE: io exception]
2026-05-09 09:58:50 [snail-job-grpc-client-executor-127.0.0.1-56] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[56] message:[UNAVAILABLE: io exception]
2026-05-09 09:59:00 [snail-job-grpc-client-executor-127.0.0.1-57] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[57] message:[UNAVAILABLE: io exception]
2026-05-09 09:59:10 [snail-job-grpc-client-executor-127.0.0.1-59] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[59] message:[UNAVAILABLE: io exception]
2026-05-09 09:59:20 [snail-job-grpc-client-executor-127.0.0.1-60] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[60] message:[UNAVAILABLE: io exception]
2026-05-09 09:59:30 [snail-job-grpc-client-executor-127.0.0.1-61] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[61] message:[UNAVAILABLE: io exception]
2026-05-09 09:59:40 [snail-job-grpc-client-executor-127.0.0.1-62] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[62] message:[UNAVAILABLE: io exception]
2026-05-09 09:59:50 [snail-job-grpc-client-executor-127.0.0.1-63] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[63] message:[UNAVAILABLE: io exception]
2026-05-09 10:00:00 [snail-job-grpc-client-executor-127.0.0.1-65] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[65] message:[UNAVAILABLE: io exception]
2026-05-09 10:00:10 [snail-job-grpc-client-executor-127.0.0.1-66] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[66] message:[UNAVAILABLE: io exception]
2026-05-09 10:00:20 [snail-job-grpc-client-executor-127.0.0.1-67] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[67] message:[UNAVAILABLE: io exception]
2026-05-09 10:00:30 [snail-job-grpc-client-executor-127.0.0.1-68] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[68] message:[UNAVAILABLE: io exception]
2026-05-09 10:00:40 [snail-job-grpc-client-executor-127.0.0.1-69] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[69] message:[UNAVAILABLE: io exception]
2026-05-09 10:00:50 [snail-job-grpc-client-executor-127.0.0.1-70] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[70] message:[UNAVAILABLE: io exception]
2026-05-09 10:01:00 [snail-job-grpc-client-executor-127.0.0.1-72] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[71] message:[UNAVAILABLE: io exception]
2026-05-09 10:01:10 [snail-job-grpc-client-executor-127.0.0.1-73] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[73] message:[UNAVAILABLE: io exception]
2026-05-09 10:01:20 [snail-job-grpc-client-executor-127.0.0.1-74] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[74] message:[UNAVAILABLE: io exception]
2026-05-09 10:01:30 [snail-job-grpc-client-executor-127.0.0.1-75] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[75] message:[UNAVAILABLE: io exception]
2026-05-09 10:01:40 [snail-job-grpc-client-executor-127.0.0.1-76] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[76] message:[UNAVAILABLE: io exception]
2026-05-09 10:01:50 [snail-job-grpc-client-executor-127.0.0.1-77] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[77] message:[UNAVAILABLE: io exception]
2026-05-09 10:02:00 [snail-job-grpc-client-executor-127.0.0.1-78] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[78] message:[UNAVAILABLE: io exception]
2026-05-09 10:02:10 [snail-job-grpc-client-executor-127.0.0.1-80] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[80] message:[UNAVAILABLE: io exception]
2026-05-09 10:02:20 [snail-job-grpc-client-executor-127.0.0.1-81] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[81] message:[UNAVAILABLE: io exception]
2026-05-09 10:02:30 [snail-job-grpc-client-executor-127.0.0.1-82] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[82] message:[UNAVAILABLE: io exception]
2026-05-09 10:02:40 [snail-job-grpc-client-executor-127.0.0.1-83] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[83] message:[UNAVAILABLE: io exception]
2026-05-09 10:02:50 [snail-job-grpc-client-executor-127.0.0.1-84] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[84] message:[UNAVAILABLE: io exception]
2026-05-09 10:03:00 [snail-job-grpc-client-executor-127.0.0.1-86] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[86] message:[UNAVAILABLE: io exception]
2026-05-09 10:03:10 [snail-job-grpc-client-executor-127.0.0.1-87] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[87] message:[UNAVAILABLE: io exception]
2026-05-09 10:03:20 [snail-job-grpc-client-executor-127.0.0.1-88] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[88] message:[UNAVAILABLE: io exception]
2026-05-09 10:03:30 [snail-job-grpc-client-executor-127.0.0.1-89] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[89] message:[UNAVAILABLE: io exception]
2026-05-09 10:03:40 [snail-job-grpc-client-executor-127.0.0.1-90] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[90] message:[UNAVAILABLE: io exception]
2026-05-09 10:03:50 [snail-job-grpc-client-executor-127.0.0.1-91] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[91] message:[UNAVAILABLE: io exception]
2026-05-09 10:04:00 [snail-job-grpc-client-executor-127.0.0.1-92] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[92] message:[UNAVAILABLE: io exception]
2026-05-09 10:04:10 [snail-job-grpc-client-executor-127.0.0.1-94] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[94] message:[UNAVAILABLE: io exception]
2026-05-09 10:04:20 [snail-job-grpc-client-executor-127.0.0.1-95] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[95] message:[UNAVAILABLE: io exception]
2026-05-09 10:04:30 [snail-job-grpc-client-executor-127.0.0.1-96] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[96] message:[UNAVAILABLE: io exception]
2026-05-09 10:04:40 [snail-job-grpc-client-executor-127.0.0.1-97] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[97] message:[UNAVAILABLE: io exception]
2026-05-09 10:04:50 [snail-job-grpc-client-executor-127.0.0.1-98] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[98] message:[UNAVAILABLE: io exception]
2026-05-09 10:05:00 [snail-job-grpc-client-executor-127.0.0.1-99] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[99] message:[UNAVAILABLE: io exception]
2026-05-09 10:05:10 [snail-job-grpc-client-executor-127.0.0.1-101] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[101] message:[UNAVAILABLE: io exception]
2026-05-09 10:05:20 [snail-job-grpc-client-executor-127.0.0.1-102] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[102] message:[UNAVAILABLE: io exception]
2026-05-09 10:05:30 [snail-job-grpc-client-executor-127.0.0.1-103] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[103] message:[UNAVAILABLE: io exception]
2026-05-09 10:05:40 [snail-job-grpc-client-executor-127.0.0.1-104] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[104] message:[UNAVAILABLE: io exception]
2026-05-09 10:05:50 [snail-job-grpc-client-executor-127.0.0.1-105] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[105] message:[UNAVAILABLE: io exception]
2026-05-09 10:06:00 [snail-job-grpc-client-executor-127.0.0.1-106] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[106] message:[UNAVAILABLE: io exception]
2026-05-09 10:06:10 [snail-job-grpc-client-executor-127.0.0.1-108] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[108] message:[UNAVAILABLE: io exception]
2026-05-09 10:06:20 [snail-job-grpc-client-executor-127.0.0.1-109] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[109] message:[UNAVAILABLE: io exception]
2026-05-09 10:06:30 [snail-job-grpc-client-executor-127.0.0.1-110] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[110] message:[UNAVAILABLE: io exception]
2026-05-09 10:06:40 [snail-job-grpc-client-executor-127.0.0.1-111] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[111] message:[UNAVAILABLE: io exception]
2026-05-09 10:06:50 [snail-job-grpc-client-executor-127.0.0.1-112] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[112] message:[UNAVAILABLE: io exception]
2026-05-09 10:07:00 [snail-job-grpc-client-executor-127.0.0.1-114] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[113] message:[UNAVAILABLE: io exception]
2026-05-09 10:07:10 [snail-job-grpc-client-executor-127.0.0.1-115] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[115] message:[UNAVAILABLE: io exception]
2026-05-09 10:07:20 [snail-job-grpc-client-executor-127.0.0.1-116] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[116] message:[UNAVAILABLE: io exception]
2026-05-09 10:07:30 [snail-job-grpc-client-executor-127.0.0.1-117] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[117] message:[UNAVAILABLE: io exception]
2026-05-09 10:07:40 [snail-job-grpc-client-executor-127.0.0.1-118] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[118] message:[UNAVAILABLE: io exception]
2026-05-09 10:07:50 [snail-job-grpc-client-executor-127.0.0.1-119] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[119] message:[UNAVAILABLE: io exception]
2026-05-09 10:08:00 [snail-job-grpc-client-executor-127.0.0.1-121] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[120] message:[UNAVAILABLE: io exception]
2026-05-09 10:08:10 [snail-job-grpc-client-executor-127.0.0.1-122] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[122] message:[UNAVAILABLE: io exception]
2026-05-09 10:08:20 [snail-job-grpc-client-executor-127.0.0.1-123] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[123] message:[UNAVAILABLE: io exception]
2026-05-09 10:08:30 [snail-job-grpc-client-executor-127.0.0.1-124] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[124] message:[UNAVAILABLE: io exception]
2026-05-09 10:08:40 [snail-job-grpc-client-executor-127.0.0.1-125] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[125] message:[UNAVAILABLE: io exception]
2026-05-09 10:08:50 [snail-job-grpc-client-executor-127.0.0.1-126] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[126] message:[UNAVAILABLE: io exception]
2026-05-09 10:09:00 [snail-job-grpc-client-executor-127.0.0.1-127] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[128] message:[UNAVAILABLE: io exception]
2026-05-09 10:09:10 [snail-job-grpc-client-executor-127.0.0.1-129] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[129] message:[UNAVAILABLE: io exception]
2026-05-09 10:09:20 [snail-job-grpc-client-executor-127.0.0.1-130] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[130] message:[UNAVAILABLE: io exception]
2026-05-09 10:09:30 [snail-job-grpc-client-executor-127.0.0.1-131] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[131] message:[UNAVAILABLE: io exception]
2026-05-09 10:09:40 [snail-job-grpc-client-executor-127.0.0.1-132] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[132] message:[UNAVAILABLE: io exception]
2026-05-09 10:09:50 [snail-job-grpc-client-executor-127.0.0.1-133] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[133] message:[UNAVAILABLE: io exception]
2026-05-09 10:10:00 [snail-job-grpc-client-executor-127.0.0.1-134] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[134] message:[UNAVAILABLE: io exception]
2026-05-09 10:10:10 [snail-job-grpc-client-executor-127.0.0.1-136] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[136] message:[UNAVAILABLE: io exception]
2026-05-09 10:10:20 [snail-job-grpc-client-executor-127.0.0.1-137] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[137] message:[UNAVAILABLE: io exception]
2026-05-09 10:10:30 [snail-job-grpc-client-executor-127.0.0.1-138] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[138] message:[UNAVAILABLE: io exception]
2026-05-09 10:10:40 [snail-job-grpc-client-executor-127.0.0.1-139] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[139] message:[UNAVAILABLE: io exception]
2026-05-09 10:10:50 [snail-job-grpc-client-executor-127.0.0.1-140] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[140] message:[UNAVAILABLE: io exception]
2026-05-09 10:11:00 [snail-job-grpc-client-executor-127.0.0.1-142] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[141] message:[UNAVAILABLE: io exception]
2026-05-09 10:11:10 [snail-job-grpc-client-executor-127.0.0.1-143] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[143] message:[UNAVAILABLE: io exception]
2026-05-09 10:11:20 [snail-job-grpc-client-executor-127.0.0.1-144] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[144] message:[UNAVAILABLE: io exception]
2026-05-09 10:11:30 [snail-job-grpc-client-executor-127.0.0.1-145] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[145] message:[UNAVAILABLE: io exception]
2026-05-09 10:11:40 [snail-job-grpc-client-executor-127.0.0.1-146] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[146] message:[UNAVAILABLE: io exception]
2026-05-09 10:11:50 [snail-job-grpc-client-executor-127.0.0.1-147] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[147] message:[UNAVAILABLE: io exception]
2026-05-09 10:12:00 [snail-job-grpc-client-executor-127.0.0.1-148] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[148] message:[UNAVAILABLE: io exception]
2026-05-09 10:12:10 [snail-job-grpc-client-executor-127.0.0.1-150] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[150] message:[UNAVAILABLE: io exception]
2026-05-09 10:12:20 [snail-job-grpc-client-executor-127.0.0.1-151] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[151] message:[UNAVAILABLE: io exception]
2026-05-09 10:12:30 [snail-job-grpc-client-executor-127.0.0.1-152] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[152] message:[UNAVAILABLE: io exception]
2026-05-09 10:12:40 [snail-job-grpc-client-executor-127.0.0.1-153] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[153] message:[UNAVAILABLE: io exception]
2026-05-09 10:12:50 [snail-job-grpc-client-executor-127.0.0.1-154] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[154] message:[UNAVAILABLE: io exception]
2026-05-09 10:13:00 [snail-job-grpc-client-executor-127.0.0.1-155] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[155] message:[UNAVAILABLE: io exception]
2026-05-09 10:13:10 [snail-job-grpc-client-executor-127.0.0.1-157] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[157] message:[UNAVAILABLE: io exception]
2026-05-09 10:13:20 [snail-job-grpc-client-executor-127.0.0.1-158] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[158] message:[UNAVAILABLE: io exception]
2026-05-09 10:13:30 [snail-job-grpc-client-executor-127.0.0.1-159] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[159] message:[UNAVAILABLE: io exception]
2026-05-09 10:13:40 [snail-job-grpc-client-executor-127.0.0.1-160] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[160] message:[UNAVAILABLE: io exception]
2026-05-09 10:13:50 [snail-job-grpc-client-executor-127.0.0.1-161] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[161] message:[UNAVAILABLE: io exception]
2026-05-09 10:14:00 [snail-job-grpc-client-executor-127.0.0.1-163] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[163] message:[UNAVAILABLE: io exception]
2026-05-09 10:14:10 [snail-job-grpc-client-executor-127.0.0.1-164] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[164] message:[UNAVAILABLE: io exception]
2026-05-09 10:14:20 [snail-job-grpc-client-executor-127.0.0.1-165] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[165] message:[UNAVAILABLE: io exception]
2026-05-09 10:14:30 [snail-job-grpc-client-executor-127.0.0.1-166] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[166] message:[UNAVAILABLE: io exception]
2026-05-09 10:14:40 [snail-job-grpc-client-executor-127.0.0.1-167] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[167] message:[UNAVAILABLE: io exception]
2026-05-09 10:14:50 [snail-job-grpc-client-executor-127.0.0.1-168] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[168] message:[UNAVAILABLE: io exception]
2026-05-09 10:15:00 [snail-job-grpc-client-executor-127.0.0.1-169] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[170] message:[UNAVAILABLE: io exception]
2026-05-09 10:15:10 [snail-job-grpc-client-executor-127.0.0.1-171] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[171] message:[UNAVAILABLE: io exception]
2026-05-09 10:15:20 [snail-job-grpc-client-executor-127.0.0.1-172] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[172] message:[UNAVAILABLE: io exception]
2026-05-09 10:15:30 [snail-job-grpc-client-executor-127.0.0.1-173] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[173] message:[UNAVAILABLE: io exception]
2026-05-09 10:15:40 [snail-job-grpc-client-executor-127.0.0.1-174] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[174] message:[UNAVAILABLE: io exception]
2026-05-09 10:15:50 [snail-job-grpc-client-executor-127.0.0.1-175] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[175] message:[UNAVAILABLE: io exception]
2026-05-09 10:16:00 [snail-job-grpc-client-executor-127.0.0.1-176] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[177] message:[UNAVAILABLE: io exception]
2026-05-09 10:16:10 [snail-job-grpc-client-executor-127.0.0.1-178] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[178] message:[UNAVAILABLE: io exception]
2026-05-09 10:16:20 [snail-job-grpc-client-executor-127.0.0.1-179] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[179] message:[UNAVAILABLE: io exception]
2026-05-09 10:16:30 [snail-job-grpc-client-executor-127.0.0.1-180] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[180] message:[UNAVAILABLE: io exception]
2026-05-09 10:16:40 [snail-job-grpc-client-executor-127.0.0.1-181] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[181] message:[UNAVAILABLE: io exception]
2026-05-09 10:16:50 [snail-job-grpc-client-executor-127.0.0.1-182] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[182] message:[UNAVAILABLE: io exception]
2026-05-09 10:17:00 [snail-job-grpc-client-executor-127.0.0.1-184] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[184] message:[UNAVAILABLE: io exception]
2026-05-09 10:17:10 [snail-job-grpc-client-executor-127.0.0.1-185] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[185] message:[UNAVAILABLE: io exception]
2026-05-09 10:17:20 [snail-job-grpc-client-executor-127.0.0.1-186] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[186] message:[UNAVAILABLE: io exception]
2026-05-09 10:17:30 [snail-job-grpc-client-executor-127.0.0.1-187] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[187] message:[UNAVAILABLE: io exception]
2026-05-09 10:17:40 [snail-job-grpc-client-executor-127.0.0.1-188] ERROR c.a.s.c.c.handler.ClientRegister - heartbeat check requestId:[188] message:[UNAVAILABLE: io exception]
2026-06-03 08:07:41 [MQTT Ping: water-server] ERROR o.e.p.c.mqttv3.internal.ClientState - water-server: Timed out as no write activity, keepAlive=60,000,000,000 lastOutboundActivity=1,242,491,392,259,400 lastInboundActivity=1,242,491,421,357,900 time=1,293,117,233,745,900 lastPing=1,242,491,392,263,200
2026-06-03 11:22:23 [XNIO-1 task-2] ERROR o.d.c.s.h.SaTokenExceptionHandler - 请求地址'/app/v1/deviceList',认证失败'token 已被冻结eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOiJhcHBfdXNlcjoyMDU2NTQzNTA3NTE0MDk3NjY1Iiwicm5TdHIiOiI4QnM4c2RiWkdOMEFPRTVQUHZUeTFCYWtzV0ozQVVHaSIsImNsaWVudGlkIjoiNDI4YTgzMTBjZDQ0Mjc1N2FlNjk5ZGY1ZDg5NGYwNTEiLCJ0ZW5hbnRJZCI6IjAwMDAwMCIsInVzZXJJZCI6MjA1NjU0MzUwNzUxNDA5NzY2NX0.kKJvH80xg1I8iFL0-v4_aMCEGsuwYm87T19UQ7cu3l4',无法访问系统资源
2026-06-03 11:23:01 [XNIO-1 task-2] ERROR o.d.c.w.h.GlobalExceptionHandler - 访问过于频繁,请稍候再试
2026-06-03 11:45:09 [XNIO-1 task-2] ERROR o.d.c.s.h.SaTokenExceptionHandler - 请求地址'/app/v1/deviceList',认证失败'token 已被冻结eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOiJhcHBfdXNlcjoyMDU2NTQzNTA3NTE0MDk3NjY1Iiwicm5TdHIiOiJ2alU3OVV0dWhsYjc4azhhUDNRazM4YnJ3QVJ4MGt6MCIsImNsaWVudGlkIjoiNDI4YTgzMTBjZDQ0Mjc1N2FlNjk5ZGY1ZDg5NGYwNTEiLCJ0ZW5hbnRJZCI6IjAwMDAwMCIsInVzZXJJZCI6MjA1NjU0MzUwNzUxNDA5NzY2NSwidXNlck5hbWUiOiIxMzMwNTM3NjA1NCJ9.WkM2XneftUNQbnIm69pDDEAzocsvHZlkv6e5SRS4_48',无法访问系统资源
2026-06-03 17:44:04 [XNIO-1 task-3] ERROR o.d.c.w.h.GlobalExceptionHandler - 参数校验异常
2026-06-03 22:52:30 [XNIO-1 task-2] ERROR o.d.c.w.h.GlobalExceptionHandler - 密码输入错误1次

View File

@@ -1,662 +1,88 @@
2026-05-09 09:01:56 [background-preinit] INFO o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.3.Final
2026-05-09 09:01:56 [main] INFO org.dromara.DromaraApplication - Starting DromaraApplication using Java 17.0.17 with PID 32304 (D:\code\water\water-admin\target\classes started by admin in D:\code\water)
2026-05-09 09:01:56 [main] INFO org.dromara.DromaraApplication - The following 1 profile is active: "dev"
2026-05-09 09:02:00 [main] INFO io.undertow.servlet - Initializing Spring embedded WebApplicationContext
2026-05-09 09:02:00 [main] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource detect P6SPY plugin and enabled it
2026-05-09 09:02:00 [main] INFO com.zaxxer.hikari.HikariDataSource - master - Starting...
2026-05-09 09:02:00 [main] INFO com.zaxxer.hikari.pool.HikariPool - master - Added connection com.mysql.cj.jdbc.ConnectionImpl@2403c1c5
2026-05-09 09:02:00 [main] INFO com.zaxxer.hikari.HikariDataSource - master - Start completed.
2026-05-09 09:02:00 [main] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource - add a datasource named [master] success
2026-05-09 09:02:00 [main] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource initial loaded [1] datasource,primary datasource named [master]
2026-05-09 09:02:02 [main] INFO o.d.common.redis.config.RedisConfig - 初始化 redis 配置
2026-05-09 09:02:02 [main] INFO org.redisson.Version - Redisson 3.52.0
2026-05-09 09:02:02 [redisson-netty-1-5] INFO o.r.connection.ConnectionsHolder - 1 connections initialized for localhost/127.0.0.1:6379
2026-05-09 09:02:02 [redisson-netty-1-4] INFO o.r.connection.ConnectionsHolder - 8 connections initialized for localhost/127.0.0.1:6379
2026-05-09 09:02:03 [main] INFO c.a.s.c.j.c.e.b.AbstractScriptExecutor$SnailFileUtils - [FileUtils] [workspace] use user.home as workspace: C:\Users\admin/snailJob/worker
2026-05-09 09:02:03 [main] INFO c.a.s.c.j.c.e.b.AbstractScriptExecutor$SnailFileUtils - [FileUtils] [workspace] use user.home as workspace: C:\Users\admin/snailJob/worker
2026-05-09 09:02:03 [main] INFO c.a.s.c.j.c.e.b.AbstractScriptExecutor$SnailFileUtils - [FileUtils] [workspace] use user.home as workspace: C:\Users\admin/snailJob/worker
2026-05-09 09:02:04 [main] INFO o.d.common.json.config.JacksonConfig - 初始化 jackson 配置
2026-05-09 09:02:04 [main] INFO c.a.s.c.s.SnailJobClientJobCoreAutoConfiguration - Snail-Job 客户端IP为: 192.168.0.217
2026-05-09 09:02:04 [main] INFO c.b.m.e.s.MybatisPlusApplicationContextAware - Register ApplicationContext instances org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@65bb9029
2026-05-09 09:02:08 [main] INFO o.d.w.p.modes.sb.config.BeanConfig - 【warm-flow】加载完成
2026-05-09 09:02:09 [main] INFO io.undertow - starting server: Undertow - 2.3.23.Final
2026-05-09 09:02:09 [main] INFO org.xnio - XNIO version 3.8.16.Final
2026-05-09 09:02:09 [main] INFO org.xnio.nio - XNIO NIO Implementation Version 3.8.16.Final
2026-05-09 09:02:09 [main] INFO org.jboss.threads - JBoss Threads version 3.7.0.Final
2026-05-09 09:02:09 [main] INFO org.dromara.DromaraApplication - Started DromaraApplication in 14.199 seconds (process running for 15.467)
2026-05-09 09:02:09 [main] INFO o.d.c.sse.listener.SseTopicListener - 初始化SSE主题订阅监听器成功
2026-05-09 09:02:09 [main] INFO o.d.s.runner.SystemApplicationRunner - 初始化OSS配置成功
2026-05-09 09:02:09 [main] INFO c.a.s.c.c.init.SnailJobStartListener - snail-job client is preparing to start... v1.9.0
2026-05-09 09:02:10 [main] INFO c.a.s.c.c.r.c.g.SnailJobGrpcClient - gRPC client started connect to server
2026-05-09 09:02:10 [main] INFO c.a.s.c.c.rpc.server.SnailGrpcServer - ------> snail-job remoting server start success, grpc = com.aizuda.snailjob.client.common.rpc.server.SnailGrpcServer, port = 28081
2026-05-09 09:02:10 [main] INFO c.a.s.c.c.init.SnailJobStartListener - snail-job client started successfully v1.9.0
2026-05-09 09:02:11 [RMI TCP Connection(15)-192.168.111.1] INFO io.undertow.servlet - Initializing Spring DispatcherServlet 'dispatcherServlet'
2026-05-09 09:03:15 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[POST /app/v1/addDevice],参数类型[json],参数:[{"device_no":"sn165165fdfdsa","device_name":"测试设备一","device_img":"","wifi_name":"wifi","wifi_password":"12345678","device_em":"dfasdfas","device_sn":"fdasfsadf","fw_ver":"fsdfas","mac_address":"2.285ssadf.fsad"}]
2026-05-09 09:03:15 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[POST /app/v1/addDevice],耗时:[223]毫秒
2026-05-09 09:03:39 [Thread-5] INFO c.a.s.c.c.window.SlidingRingWindow - JVM is about to exit, emitting data in the Window
2026-05-09 09:03:39 [SpringApplicationShutdownHook] INFO c.a.s.c.c.init.SnailJobCloseListener - snail-job client about to shutdown v1.9.0
2026-05-09 09:03:39 [SpringApplicationShutdownHook] INFO c.a.s.c.c.l.report.AbstractLogReport - AsyncReport Log about to shutdown
2026-05-09 09:03:39 [SpringApplicationShutdownHook] INFO c.a.s.c.c.window.SlidingRingWindow - Sliding window is about to exit, emitting data in the Window
2026-05-09 09:03:39 [SpringApplicationShutdownHook] INFO c.a.s.c.c.l.report.AbstractLogReport - AsyncReport Log has been shutdown
2026-05-09 09:03:39 [SpringApplicationShutdownHook] INFO c.a.s.c.c.init.SnailJobCloseListener - snail-job client closed successfully v1.9.0
2026-05-09 09:03:39 [SpringApplicationShutdownHook] INFO io.undertow - stopping server: Undertow - 2.3.23.Final
2026-05-09 09:03:39 [SpringApplicationShutdownHook] INFO o.d.c.core.config.ThreadPoolConfig - ====关闭后台任务任务线程池====
2026-05-09 09:03:39 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource start closing ....
2026-05-09 09:03:39 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - master - Shutdown initiated...
2026-05-09 09:03:39 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - master - Shutdown completed.
2026-05-09 09:03:39 [SpringApplicationShutdownHook] INFO c.b.d.d.d.DefaultDataSourceDestroyer - dynamic-datasource close the datasource named [master] success,
2026-05-09 09:03:39 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource all closed success,bye
2026-05-09 09:03:39 [SpringApplicationShutdownHook] INFO io.undertow.servlet - Destroying Spring FrameworkServlet 'dispatcherServlet'
2026-05-09 09:03:44 [background-preinit] INFO o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.3.Final
2026-05-09 09:03:44 [main] INFO org.dromara.DromaraApplication - Starting DromaraApplication using Java 17.0.17 with PID 19172 (D:\code\water\water-admin\target\classes started by admin in D:\code\water)
2026-05-09 09:03:44 [main] INFO org.dromara.DromaraApplication - The following 1 profile is active: "dev"
2026-05-09 09:03:47 [main] INFO io.undertow.servlet - Initializing Spring embedded WebApplicationContext
2026-05-09 09:03:47 [main] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource detect P6SPY plugin and enabled it
2026-05-09 09:03:47 [main] INFO com.zaxxer.hikari.HikariDataSource - master - Starting...
2026-05-09 09:03:47 [main] INFO com.zaxxer.hikari.pool.HikariPool - master - Added connection com.mysql.cj.jdbc.ConnectionImpl@1001b435
2026-05-09 09:03:47 [main] INFO com.zaxxer.hikari.HikariDataSource - master - Start completed.
2026-05-09 09:03:47 [main] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource - add a datasource named [master] success
2026-05-09 09:03:47 [main] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource initial loaded [1] datasource,primary datasource named [master]
2026-05-09 09:03:49 [main] INFO o.d.common.redis.config.RedisConfig - 初始化 redis 配置
2026-05-09 09:03:49 [main] INFO org.redisson.Version - Redisson 3.52.0
2026-05-09 09:03:49 [redisson-netty-1-5] INFO o.r.connection.ConnectionsHolder - 1 connections initialized for localhost/127.0.0.1:6379
2026-05-09 09:03:49 [redisson-netty-1-4] INFO o.r.connection.ConnectionsHolder - 8 connections initialized for localhost/127.0.0.1:6379
2026-05-09 09:03:50 [main] INFO c.a.s.c.j.c.e.b.AbstractScriptExecutor$SnailFileUtils - [FileUtils] [workspace] use user.home as workspace: C:\Users\admin/snailJob/worker
2026-05-09 09:03:50 [main] INFO c.a.s.c.j.c.e.b.AbstractScriptExecutor$SnailFileUtils - [FileUtils] [workspace] use user.home as workspace: C:\Users\admin/snailJob/worker
2026-05-09 09:03:50 [main] INFO c.a.s.c.j.c.e.b.AbstractScriptExecutor$SnailFileUtils - [FileUtils] [workspace] use user.home as workspace: C:\Users\admin/snailJob/worker
2026-05-09 09:03:50 [main] INFO o.d.common.json.config.JacksonConfig - 初始化 jackson 配置
2026-05-09 09:03:51 [main] INFO c.a.s.c.s.SnailJobClientJobCoreAutoConfiguration - Snail-Job 客户端IP为: 192.168.0.217
2026-05-09 09:03:51 [main] INFO c.b.m.e.s.MybatisPlusApplicationContextAware - Register ApplicationContext instances org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@62e6a3ec
2026-05-09 09:03:55 [main] INFO o.d.w.p.modes.sb.config.BeanConfig - 【warm-flow】加载完成
2026-05-09 09:03:56 [main] INFO io.undertow - starting server: Undertow - 2.3.23.Final
2026-05-09 09:03:56 [main] INFO org.xnio - XNIO version 3.8.16.Final
2026-05-09 09:03:56 [main] INFO org.xnio.nio - XNIO NIO Implementation Version 3.8.16.Final
2026-05-09 09:03:56 [main] INFO org.jboss.threads - JBoss Threads version 3.7.0.Final
2026-05-09 09:03:56 [main] INFO org.dromara.DromaraApplication - Started DromaraApplication in 13.286 seconds (process running for 14.075)
2026-05-09 09:03:56 [main] INFO o.d.c.sse.listener.SseTopicListener - 初始化SSE主题订阅监听器成功
2026-05-09 09:03:56 [main] INFO c.a.s.c.c.init.SnailJobStartListener - snail-job client is preparing to start... v1.9.0
2026-05-09 09:03:56 [XNIO-1 task-2] INFO io.undertow.servlet - Initializing Spring DispatcherServlet 'dispatcherServlet'
2026-05-09 09:03:57 [main] INFO c.a.s.c.c.r.c.g.SnailJobGrpcClient - gRPC client started connect to server
2026-05-09 09:03:57 [main] INFO c.a.s.c.c.rpc.server.SnailGrpcServer - ------> snail-job remoting server start success, grpc = com.aizuda.snailjob.client.common.rpc.server.SnailGrpcServer, port = 28081
2026-05-09 09:03:57 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[POST /app/v1/addDevice],参数类型[json],参数:[{"device_no":"sn165165fdfdsa","device_name":"测试设备一","device_img":"","wifi_name":"wifi","wifi_password":"12345678","device_em":"dfasdfas","device_sn":"fdasfsadf","fw_ver":"fsdfas","mac_address":"2.285ssadf.fsad"}]
2026-05-09 09:03:58 [main] INFO c.a.s.c.c.init.SnailJobStartListener - snail-job client started successfully v1.9.0
2026-05-09 09:03:58 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[POST /app/v1/addDevice],耗时:[317]毫秒
2026-05-09 09:03:58 [main] INFO o.d.s.runner.SystemApplicationRunner - 初始化OSS配置成功
2026-05-09 09:06:52 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[POST /app/v1/addDevice],参数类型[json],参数:[{"device_no":"sn165165fdfdsa","device_name":"测试设备一","device_img":"","wifi_name":"wifi","wifi_password":"12345678","device_em":"dfasdfas","device_sn":"fdasfsadf","fw_ver":"fsdfas","mac_address":"2.285ssadf.fsad"}]
2026-05-09 09:07:22 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[POST /app/v1/addDevice],耗时:[29717]毫秒
2026-05-09 09:07:58 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[POST /app/v1/addDevice],参数类型[json],参数:[{"deviceNo":"sn165165fdfdsa","deviceName":"测试设备一","deviceImg":"","wifiName":"wifi","wifiPassword":"12345678","deviceEm":"dfasdfas","deviceSn":"fdasfsadf","fwVer":"fsdfas","macAddress":"2.285ssadf.fsad"}]
2026-05-09 09:07:58 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[POST /app/v1/addDevice],耗时:[9]毫秒
2026-05-09 09:09:43 [Thread-5] INFO c.a.s.c.c.window.SlidingRingWindow - JVM is about to exit, emitting data in the Window
2026-05-09 09:09:43 [SpringApplicationShutdownHook] INFO c.a.s.c.c.init.SnailJobCloseListener - snail-job client about to shutdown v1.9.0
2026-05-09 09:09:43 [SpringApplicationShutdownHook] INFO c.a.s.c.c.l.report.AbstractLogReport - AsyncReport Log about to shutdown
2026-05-09 09:09:43 [SpringApplicationShutdownHook] INFO c.a.s.c.c.window.SlidingRingWindow - Sliding window is about to exit, emitting data in the Window
2026-05-09 09:09:43 [SpringApplicationShutdownHook] INFO c.a.s.c.c.l.report.AbstractLogReport - AsyncReport Log has been shutdown
2026-05-09 09:09:43 [SpringApplicationShutdownHook] INFO c.a.s.c.c.init.SnailJobCloseListener - snail-job client closed successfully v1.9.0
2026-05-09 09:09:43 [SpringApplicationShutdownHook] INFO io.undertow - stopping server: Undertow - 2.3.23.Final
2026-05-09 09:09:43 [SpringApplicationShutdownHook] INFO o.d.c.core.config.ThreadPoolConfig - ====关闭后台任务任务线程池====
2026-05-09 09:09:43 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource start closing ....
2026-05-09 09:09:43 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - master - Shutdown initiated...
2026-05-09 09:09:43 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - master - Shutdown completed.
2026-05-09 09:09:43 [SpringApplicationShutdownHook] INFO c.b.d.d.d.DefaultDataSourceDestroyer - dynamic-datasource close the datasource named [master] success,
2026-05-09 09:09:43 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource all closed success,bye
2026-05-09 09:09:43 [SpringApplicationShutdownHook] INFO io.undertow.servlet - Destroying Spring FrameworkServlet 'dispatcherServlet'
2026-05-09 09:09:50 [background-preinit] INFO o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.3.Final
2026-05-09 09:09:50 [main] INFO org.dromara.DromaraApplication - Starting DromaraApplication using Java 17.0.17 with PID 16776 (D:\code\water\water-admin\target\classes started by admin in D:\code\water)
2026-05-09 09:09:50 [main] INFO org.dromara.DromaraApplication - The following 1 profile is active: "dev"
2026-05-09 09:09:54 [main] INFO io.undertow.servlet - Initializing Spring embedded WebApplicationContext
2026-05-09 09:09:54 [main] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource detect P6SPY plugin and enabled it
2026-05-09 09:09:54 [main] INFO com.zaxxer.hikari.HikariDataSource - master - Starting...
2026-05-09 09:09:54 [main] INFO com.zaxxer.hikari.pool.HikariPool - master - Added connection com.mysql.cj.jdbc.ConnectionImpl@1001b435
2026-05-09 09:09:54 [main] INFO com.zaxxer.hikari.HikariDataSource - master - Start completed.
2026-05-09 09:09:54 [main] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource - add a datasource named [master] success
2026-05-09 09:09:54 [main] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource initial loaded [1] datasource,primary datasource named [master]
2026-05-09 09:09:55 [main] INFO o.d.common.redis.config.RedisConfig - 初始化 redis 配置
2026-05-09 09:09:56 [main] INFO org.redisson.Version - Redisson 3.52.0
2026-05-09 09:09:56 [redisson-netty-1-5] INFO o.r.connection.ConnectionsHolder - 1 connections initialized for localhost/127.0.0.1:6379
2026-05-09 09:09:56 [redisson-netty-1-4] INFO o.r.connection.ConnectionsHolder - 8 connections initialized for localhost/127.0.0.1:6379
2026-05-09 09:09:57 [main] INFO c.a.s.c.j.c.e.b.AbstractScriptExecutor$SnailFileUtils - [FileUtils] [workspace] use user.home as workspace: C:\Users\admin/snailJob/worker
2026-05-09 09:09:57 [main] INFO c.a.s.c.j.c.e.b.AbstractScriptExecutor$SnailFileUtils - [FileUtils] [workspace] use user.home as workspace: C:\Users\admin/snailJob/worker
2026-05-09 09:09:57 [main] INFO c.a.s.c.j.c.e.b.AbstractScriptExecutor$SnailFileUtils - [FileUtils] [workspace] use user.home as workspace: C:\Users\admin/snailJob/worker
2026-05-09 09:09:57 [main] INFO o.d.common.json.config.JacksonConfig - 初始化 jackson 配置
2026-05-09 09:09:57 [main] INFO c.a.s.c.s.SnailJobClientJobCoreAutoConfiguration - Snail-Job 客户端IP为: 192.168.0.217
2026-05-09 09:09:57 [main] INFO c.b.m.e.s.MybatisPlusApplicationContextAware - Register ApplicationContext instances org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@62e6a3ec
2026-05-09 09:10:01 [main] INFO o.d.w.p.modes.sb.config.BeanConfig - 【warm-flow】加载完成
2026-05-09 09:10:02 [main] INFO io.undertow - starting server: Undertow - 2.3.23.Final
2026-05-09 09:10:02 [main] INFO org.xnio - XNIO version 3.8.16.Final
2026-05-09 09:10:02 [main] INFO org.xnio.nio - XNIO NIO Implementation Version 3.8.16.Final
2026-05-09 09:10:02 [main] INFO org.jboss.threads - JBoss Threads version 3.7.0.Final
2026-05-09 09:10:02 [main] INFO org.dromara.DromaraApplication - Started DromaraApplication in 13.24 seconds (process running for 14.094)
2026-05-09 09:10:02 [main] INFO o.d.c.sse.listener.SseTopicListener - 初始化SSE主题订阅监听器成功
2026-05-09 09:10:02 [main] INFO c.a.s.c.c.init.SnailJobStartListener - snail-job client is preparing to start... v1.9.0
2026-05-09 09:10:03 [main] INFO c.a.s.c.c.r.c.g.SnailJobGrpcClient - gRPC client started connect to server
2026-05-09 09:10:03 [main] INFO c.a.s.c.c.rpc.server.SnailGrpcServer - ------> snail-job remoting server start success, grpc = com.aizuda.snailjob.client.common.rpc.server.SnailGrpcServer, port = 28081
2026-05-09 09:10:03 [main] INFO c.a.s.c.c.init.SnailJobStartListener - snail-job client started successfully v1.9.0
2026-05-09 09:10:04 [main] INFO o.d.s.runner.SystemApplicationRunner - 初始化OSS配置成功
2026-05-09 09:10:04 [RMI TCP Connection(6)-192.168.111.1] INFO io.undertow.servlet - Initializing Spring DispatcherServlet 'dispatcherServlet'
2026-05-09 09:14:14 [XNIO-1 task-3] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /resource/sse/close],无参数
2026-05-09 09:14:14 [XNIO-1 task-4] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[POST /auth/logout],无参数
2026-05-09 09:14:14 [XNIO-1 task-4] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[POST /auth/logout],耗时:[8]毫秒
2026-05-09 09:14:15 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /auth/code],无参数
2026-05-09 09:14:15 [XNIO-1 task-4] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /auth/tenant/list],无参数
2026-05-09 09:14:15 [XNIO-1 task-4] INFO o.d.c.r.aspectj.RateLimiterAspect - 限制令牌 => 20, 剩余令牌 => 19, 缓存key => 'global:rate_limit:/auth/tenant/list:0:0:0:0:0:0:0:1:'
2026-05-09 09:14:15 [XNIO-1 task-4] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /auth/tenant/list],耗时:[38]毫秒
2026-05-09 09:14:15 [XNIO-1 task-2] INFO o.d.c.r.aspectj.RateLimiterAspect - 限制令牌 => 10, 剩余令牌 => 9, 缓存key => 'global:rate_limit:/auth/code:0:0:0:0:0:0:0:1:'
2026-05-09 09:14:15 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /auth/code],耗时:[294]毫秒
2026-05-09 09:14:15 [XNIO-1 task-3] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /resource/sse/close],耗时:[1081]毫秒
2026-05-09 09:14:22 [XNIO-1 task-3] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[POST /auth/login],参数类型[json],参数:[{"tenantId":"000000","username":"admin","rememberMe":false,"code":"3","uuid":"f138aa7b1b974923b01b4bd78781232e","clientId":"e5cd7e4891bf95d1d19206ce24a7b32e","grantType":"password"}]
2026-05-09 09:14:23 [async-1] INFO o.d.s.s.i.SysLogininforServiceImpl - [0:0:0:0:0:0:0:1]内网IP[admin][Success][登录成功]
2026-05-09 09:14:23 [XNIO-1 task-3] INFO o.d.web.listener.UserActionListener - user doLogin, userId:sys_user:1, token:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOiJzeXNfdXNlcjoxIiwicm5TdHIiOiJibElseTRpcjJFZmpSUjdjVERQdnlxNXZ1M2lkbXJsZyIsImNsaWVudGlkIjoiZTVjZDdlNDg5MWJmOTVkMWQxOTIwNmNlMjRhN2IzMmUiLCJ0ZW5hbnRJZCI6IjAwMDAwMCIsInVzZXJJZCI6MSwidXNlck5hbWUiOiJhZG1pbiIsImRlcHRJZCI6MTAzLCJkZXB0TmFtZSI6IueglOWPkemDqOmXqCIsImRlcHRDYXRlZ29yeSI6IiJ9.uk1CGB6xuPaW8OGcIPGOmA5Fo11mEj20KiUrr11rL9k
2026-05-09 09:14:23 [XNIO-1 task-3] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[POST /auth/login],耗时:[215]毫秒
2026-05-09 09:14:23 [XNIO-1 task-3] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/user/getInfo],无参数
2026-05-09 09:14:23 [XNIO-1 task-3] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/user/getInfo],耗时:[61]毫秒
2026-05-09 09:14:23 [XNIO-1 task-3] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/menu/getRouters],无参数
2026-05-09 09:14:23 [XNIO-1 task-3] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/menu/getRouters],耗时:[43]毫秒
2026-05-09 09:14:23 [XNIO-1 task-3] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /auth/tenant/list],无参数
2026-05-09 09:14:23 [XNIO-1 task-3] INFO o.d.c.r.aspectj.RateLimiterAspect - 限制令牌 => 20, 剩余令牌 => 18, 缓存key => 'global:rate_limit:/auth/tenant/list:0:0:0:0:0:0:0:1:'
2026-05-09 09:14:23 [XNIO-1 task-3] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /auth/tenant/list],耗时:[3]毫秒
2026-05-09 09:14:23 [XNIO-1 task-3] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /resource/sse],参数类型[param],参数:[{"Authorization":["Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOiJzeXNfdXNlcjoxIiwicm5TdHIiOiJibElseTRpcjJFZmpSUjdjVERQdnlxNXZ1M2lkbXJsZyIsImNsaWVudGlkIjoiZTVjZDdlNDg5MWJmOTVkMWQxOTIwNmNlMjRhN2IzMmUiLCJ0ZW5hbnRJZCI6IjAwMDAwMCIsInVzZXJJZCI6MSwidXNlck5hbWUiOiJhZG1pbiIsImRlcHRJZCI6MTAzLCJkZXB0TmFtZSI6IueglOWPkemDqOmXqCIsImRlcHRDYXRlZ29yeSI6IiJ9.uk1CGB6xuPaW8OGcIPGOmA5Fo11mEj20KiUrr11rL9k"],"clientid":["e5cd7e4891bf95d1d19206ce24a7b32e"]}]
2026-05-09 09:14:28 [schedule-pool-2] INFO o.d.c.sse.core.SseEmitterManager - SSE发送主题订阅消息topic:global:sse session keys:[1] message:上午好,欢迎登录 water-Vue-Plus 后台管理系统
2026-05-09 09:14:28 [redisson-3-2] INFO o.d.c.sse.listener.SseTopicListener - SSE主题订阅收到消息session keys=[1] message=上午好,欢迎登录 water-Vue-Plus 后台管理系统
2026-05-09 09:14:31 [XNIO-1 task-3] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/dict/data/type/sys_user_sex],无参数
2026-05-09 09:14:31 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/dict/data/type/sys_normal_disable],无参数
2026-05-09 09:14:31 [XNIO-1 task-3] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/dict/data/type/sys_user_sex],耗时:[13]毫秒
2026-05-09 09:14:31 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/dict/data/type/sys_normal_disable],耗时:[13]毫秒
2026-05-09 09:14:31 [XNIO-1 task-4] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/user/deptTree],无参数
2026-05-09 09:14:31 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/user/list],参数类型[param],参数:[{"pageSize":["10"],"pageNum":["1"]}]
2026-05-09 09:14:31 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/config/configKey/sys.user.initPassword],无参数
2026-05-09 09:14:31 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/config/configKey/sys.user.initPassword],耗时:[9]毫秒
2026-05-09 09:14:31 [XNIO-1 task-4] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/user/deptTree],耗时:[121]毫秒
2026-05-09 09:14:31 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/user/list],耗时:[129]毫秒
2026-05-09 09:14:36 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/user/2047881868870909954],无参数
2026-05-09 09:14:36 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/user/2047881868870909954],耗时:[23]毫秒
2026-05-09 09:14:47 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[PUT /system/user],参数类型[json],参数:[{"userId":"2047881868870909954","deptId":null,"userName":null,"nickName":"111111","phonenumber":"","email":"40624989@qq.com","sex":"0","status":"0","remark":null,"postIds":null,"roleIds":[4],"tenantId":"000000","userType":"app_user","avatar":null,"loginIp":"0:0:0:0:0:0:0:1","loginDate":"2026-05-07 10:53:11","createTime":"2026-04-25 11:34:20","deptName":null,"roles":[],"roleId":null}]
2026-05-09 09:14:47 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[PUT /system/user],耗时:[95]毫秒
2026-05-09 09:14:48 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[PUT /system/user],参数类型[json],参数:[{"userId":"2047881868870909954","deptId":null,"userName":null,"nickName":"111111","phonenumber":"","email":"40624989@qq.com","sex":"0","status":"0","remark":null,"postIds":null,"roleIds":[4],"tenantId":"000000","userType":"app_user","avatar":null,"loginIp":"0:0:0:0:0:0:0:1","loginDate":"2026-05-07 10:53:11","createTime":"2026-04-25 11:34:20","deptName":null,"roles":[],"roleId":null}]
2026-05-09 09:14:48 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[PUT /system/user],耗时:[2]毫秒
2026-05-09 09:14:59 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[PUT /system/user],参数类型[json],参数:[{"userId":"2047881868870909954","deptId":null,"userName":null,"nickName":"111111","phonenumber":"","email":"40624989@qq.com","sex":"0","status":"0","remark":null,"postIds":null,"roleIds":[4],"tenantId":"000000","userType":"app_user","avatar":null,"loginIp":"0:0:0:0:0:0:0:1","loginDate":"2026-05-07 10:53:11","createTime":"2026-04-25 11:34:20","deptName":null,"roles":[],"roleId":null}]
2026-05-09 09:14:59 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[PUT /system/user],耗时:[1]毫秒
2026-05-09 09:15:24 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/user/2047881868870909954],无参数
2026-05-09 09:15:24 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/user/2047881868870909954],耗时:[17]毫秒
2026-05-09 09:15:28 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[PUT /system/user],参数类型[json],参数:[{"userId":"2047881868870909954","deptId":null,"userName":"40624989@qq.com","nickName":"111111","phonenumber":"","email":"40624989@qq.com","sex":"0","status":"0","remark":null,"postIds":null,"roleIds":[4],"tenantId":"000000","userType":"app_user","avatar":null,"loginIp":"0:0:0:0:0:0:0:1","loginDate":"2026-05-07 10:53:11","createTime":"2026-04-25 11:34:20","deptName":null,"roles":[],"roleId":null}]
2026-05-09 09:15:28 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[PUT /system/user],耗时:[113]毫秒
2026-05-09 09:15:28 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/user/list],参数类型[param],参数:[{"pageSize":["10"],"pageNum":["1"]}]
2026-05-09 09:15:28 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/user/list],耗时:[21]毫秒
2026-05-09 09:17:41 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[POST /app/v1/addDevice],参数类型[json],参数:[{"deviceNo":"sn165165fdfdsa","deviceName":"测试设备二","deviceImg":"","wifiName":"wifi","wifiPassword":"12345678","deviceEm":"dfasdfas","deviceSn":"fdasfsadf","fwVer":"fsdfas","macAddress":"2.285ssadf.fsad"}]
2026-05-09 09:17:41 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[POST /app/v1/addDevice],耗时:[15]毫秒
2026-05-09 09:17:52 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[POST /app/v1/addDevice],参数类型[json],参数:[{"deviceNo":"sn165165fdfdda","deviceName":"测试设备三","deviceImg":"","wifiName":"wifi","wifiPassword":"12345678","deviceEm":"dfasdfas","deviceSn":"fdasfsadf","fwVer":"fsdfas","macAddress":"2.285ssadf.fsad"}]
2026-05-09 09:17:52 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[POST /app/v1/addDevice],耗时:[5]毫秒
2026-05-09 09:18:02 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[POST /app/v1/addDevice],参数类型[json],参数:[{"deviceNo":"sn1651dffffdfdda","deviceName":"测试设备四","deviceImg":"","wifiName":"wifi","wifiPassword":"12345678","deviceEm":"dfasdfas","deviceSn":"fdasfsadf","fwVer":"fsdfas","macAddress":"2.285ssadf.fsad"}]
2026-05-09 09:18:02 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[POST /app/v1/addDevice],耗时:[7]毫秒
2026-05-09 09:18:30 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/deviceList],无参数
2026-05-09 09:18:30 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/deviceList],耗时:[21]毫秒
2026-05-09 09:19:03 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/deviceList],无参数
2026-05-09 09:19:03 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/deviceList],耗时:[9]毫秒
2026-05-09 09:19:05 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/deviceList],无参数
2026-05-09 09:19:05 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/deviceList],耗时:[22]毫秒
2026-05-09 09:19:32 [Thread-5] INFO c.a.s.c.c.window.SlidingRingWindow - JVM is about to exit, emitting data in the Window
2026-05-09 09:19:32 [SpringApplicationShutdownHook] INFO c.a.s.c.c.init.SnailJobCloseListener - snail-job client about to shutdown v1.9.0
2026-05-09 09:19:32 [SpringApplicationShutdownHook] INFO c.a.s.c.c.l.report.AbstractLogReport - AsyncReport Log about to shutdown
2026-05-09 09:19:32 [SpringApplicationShutdownHook] INFO c.a.s.c.c.window.SlidingRingWindow - Sliding window is about to exit, emitting data in the Window
2026-05-09 09:19:32 [SpringApplicationShutdownHook] INFO c.a.s.c.c.l.report.AbstractLogReport - AsyncReport Log has been shutdown
2026-05-09 09:19:32 [SpringApplicationShutdownHook] INFO c.a.s.c.c.init.SnailJobCloseListener - snail-job client closed successfully v1.9.0
2026-05-09 09:19:41 [background-preinit] INFO o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.3.Final
2026-05-09 09:19:41 [main] INFO org.dromara.DromaraApplication - Starting DromaraApplication using Java 17.0.17 with PID 11676 (D:\code\water\water-admin\target\classes started by admin in D:\code\water)
2026-05-09 09:19:41 [main] INFO org.dromara.DromaraApplication - The following 1 profile is active: "dev"
2026-05-09 09:19:44 [main] INFO io.undertow.servlet - Initializing Spring embedded WebApplicationContext
2026-05-09 09:19:44 [main] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource detect P6SPY plugin and enabled it
2026-05-09 09:19:44 [main] INFO com.zaxxer.hikari.HikariDataSource - master - Starting...
2026-05-09 09:19:44 [main] INFO com.zaxxer.hikari.pool.HikariPool - master - Added connection com.mysql.cj.jdbc.ConnectionImpl@1001b435
2026-05-09 09:19:44 [main] INFO com.zaxxer.hikari.HikariDataSource - master - Start completed.
2026-05-09 09:19:44 [main] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource - add a datasource named [master] success
2026-05-09 09:19:44 [main] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource initial loaded [1] datasource,primary datasource named [master]
2026-05-09 09:19:45 [main] INFO o.d.common.redis.config.RedisConfig - 初始化 redis 配置
2026-05-09 09:19:45 [main] INFO org.redisson.Version - Redisson 3.52.0
2026-05-09 09:19:46 [redisson-netty-1-5] INFO o.r.connection.ConnectionsHolder - 1 connections initialized for localhost/127.0.0.1:6379
2026-05-09 09:19:46 [redisson-netty-1-4] INFO o.r.connection.ConnectionsHolder - 8 connections initialized for localhost/127.0.0.1:6379
2026-05-09 09:19:47 [main] INFO c.a.s.c.j.c.e.b.AbstractScriptExecutor$SnailFileUtils - [FileUtils] [workspace] use user.home as workspace: C:\Users\admin/snailJob/worker
2026-05-09 09:19:47 [main] INFO c.a.s.c.j.c.e.b.AbstractScriptExecutor$SnailFileUtils - [FileUtils] [workspace] use user.home as workspace: C:\Users\admin/snailJob/worker
2026-05-09 09:19:47 [main] INFO c.a.s.c.j.c.e.b.AbstractScriptExecutor$SnailFileUtils - [FileUtils] [workspace] use user.home as workspace: C:\Users\admin/snailJob/worker
2026-05-09 09:19:47 [main] INFO o.d.common.json.config.JacksonConfig - 初始化 jackson 配置
2026-05-09 09:19:47 [main] INFO c.a.s.c.s.SnailJobClientJobCoreAutoConfiguration - Snail-Job 客户端IP为: 192.168.0.217
2026-05-09 09:19:47 [main] INFO c.b.m.e.s.MybatisPlusApplicationContextAware - Register ApplicationContext instances org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@62e6a3ec
2026-05-09 09:19:51 [main] INFO o.d.w.p.modes.sb.config.BeanConfig - 【warm-flow】加载完成
2026-05-09 09:19:52 [main] INFO io.undertow - starting server: Undertow - 2.3.23.Final
2026-05-09 09:19:52 [main] INFO org.xnio - XNIO version 3.8.16.Final
2026-05-09 09:19:52 [main] INFO org.xnio.nio - XNIO NIO Implementation Version 3.8.16.Final
2026-05-09 09:19:52 [main] INFO org.jboss.threads - JBoss Threads version 3.7.0.Final
2026-05-09 09:19:52 [main] INFO org.dromara.DromaraApplication - Started DromaraApplication in 12.679 seconds (process running for 13.58)
2026-05-09 09:19:52 [main] INFO o.d.c.sse.listener.SseTopicListener - 初始化SSE主题订阅监听器成功
2026-05-09 09:19:52 [main] INFO c.a.s.c.c.init.SnailJobStartListener - snail-job client is preparing to start... v1.9.0
2026-05-09 09:19:53 [main] INFO c.a.s.c.c.r.c.g.SnailJobGrpcClient - gRPC client started connect to server
2026-05-09 09:19:53 [main] INFO c.a.s.c.c.rpc.server.SnailGrpcServer - ------> snail-job remoting server start success, grpc = com.aizuda.snailjob.client.common.rpc.server.SnailGrpcServer, port = 28081
2026-05-09 09:19:53 [main] INFO c.a.s.c.c.init.SnailJobStartListener - snail-job client started successfully v1.9.0
2026-05-09 09:19:53 [main] INFO o.d.s.runner.SystemApplicationRunner - 初始化OSS配置成功
2026-05-09 09:19:54 [RMI TCP Connection(5)-192.168.111.1] INFO io.undertow.servlet - Initializing Spring DispatcherServlet 'dispatcherServlet'
2026-05-09 09:19:56 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /resource/sse],参数类型[param],参数:[{"Authorization":["Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOiJzeXNfdXNlcjoxIiwicm5TdHIiOiJibElseTRpcjJFZmpSUjdjVERQdnlxNXZ1M2lkbXJsZyIsImNsaWVudGlkIjoiZTVjZDdlNDg5MWJmOTVkMWQxOTIwNmNlMjRhN2IzMmUiLCJ0ZW5hbnRJZCI6IjAwMDAwMCIsInVzZXJJZCI6MSwidXNlck5hbWUiOiJhZG1pbiIsImRlcHRJZCI6MTAzLCJkZXB0TmFtZSI6IueglOWPkemDqOmXqCIsImRlcHRDYXRlZ29yeSI6IiJ9.uk1CGB6xuPaW8OGcIPGOmA5Fo11mEj20KiUrr11rL9k"],"clientid":["e5cd7e4891bf95d1d19206ce24a7b32e"]}]
2026-05-09 09:20:18 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/user/getInfo],无参数
2026-05-09 09:20:18 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/user/getInfo],耗时:[177]毫秒
2026-05-09 09:20:18 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/menu/getRouters],无参数
2026-05-09 09:20:18 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/menu/getRouters],耗时:[52]毫秒
2026-05-09 09:20:18 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/dict/data/type/sys_user_sex],无参数
2026-05-09 09:20:18 [XNIO-1 task-3] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/dict/data/type/sys_normal_disable],无参数
2026-05-09 09:20:18 [XNIO-1 task-4] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/user/deptTree],无参数
2026-05-09 09:20:18 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/user/list],参数类型[param],参数:[{"pageSize":["10"],"pageNum":["1"]}]
2026-05-09 09:20:18 [XNIO-1 task-3] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/dict/data/type/sys_normal_disable],耗时:[22]毫秒
2026-05-09 09:20:18 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/dict/data/type/sys_user_sex],耗时:[23]毫秒
2026-05-09 09:20:18 [XNIO-1 task-3] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /auth/tenant/list],无参数
2026-05-09 09:20:18 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/config/configKey/sys.user.initPassword],无参数
2026-05-09 09:20:18 [XNIO-1 task-3] INFO o.d.c.r.aspectj.RateLimiterAspect - 限制令牌 => 20, 剩余令牌 => 19, 缓存key => 'global:rate_limit:/auth/tenant/list:0:0:0:0:0:0:0:1:'
2026-05-09 09:20:18 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/config/configKey/sys.user.initPassword],耗时:[14]毫秒
2026-05-09 09:20:18 [XNIO-1 task-3] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /auth/tenant/list],耗时:[19]毫秒
2026-05-09 09:20:18 [XNIO-1 task-4] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/user/deptTree],耗时:[144]毫秒
2026-05-09 09:20:18 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/user/list],耗时:[158]毫秒
2026-05-09 09:20:19 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /resource/sse],参数类型[param],参数:[{"Authorization":["Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOiJzeXNfdXNlcjoxIiwicm5TdHIiOiJibElseTRpcjJFZmpSUjdjVERQdnlxNXZ1M2lkbXJsZyIsImNsaWVudGlkIjoiZTVjZDdlNDg5MWJmOTVkMWQxOTIwNmNlMjRhN2IzMmUiLCJ0ZW5hbnRJZCI6IjAwMDAwMCIsInVzZXJJZCI6MSwidXNlck5hbWUiOiJhZG1pbiIsImRlcHRJZCI6MTAzLCJkZXB0TmFtZSI6IueglOWPkemDqOmXqCIsImRlcHRDYXRlZ29yeSI6IiJ9.uk1CGB6xuPaW8OGcIPGOmA5Fo11mEj20KiUrr11rL9k"],"clientid":["e5cd7e4891bf95d1d19206ce24a7b32e"]}]
2026-05-09 09:20:19 [XNIO-1 task-4] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /resource/sse],参数类型[param],参数:[{"Authorization":["Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOiJzeXNfdXNlcjoxIiwicm5TdHIiOiJibElseTRpcjJFZmpSUjdjVERQdnlxNXZ1M2lkbXJsZyIsImNsaWVudGlkIjoiZTVjZDdlNDg5MWJmOTVkMWQxOTIwNmNlMjRhN2IzMmUiLCJ0ZW5hbnRJZCI6IjAwMDAwMCIsInVzZXJJZCI6MSwidXNlck5hbWUiOiJhZG1pbiIsImRlcHRJZCI6MTAzLCJkZXB0TmFtZSI6IueglOWPkemDqOmXqCIsImRlcHRDYXRlZ29yeSI6IiJ9.uk1CGB6xuPaW8OGcIPGOmA5Fo11mEj20KiUrr11rL9k"],"clientid":["e5cd7e4891bf95d1d19206ce24a7b32e"]}]
2026-05-09 09:20:19 [XNIO-1 task-4] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /resource/sse],耗时:[4]毫秒
2026-05-09 09:20:19 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /resource/sse],参数类型[param],参数:[{"Authorization":["Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOiJzeXNfdXNlcjoxIiwicm5TdHIiOiJibElseTRpcjJFZmpSUjdjVERQdnlxNXZ1M2lkbXJsZyIsImNsaWVudGlkIjoiZTVjZDdlNDg5MWJmOTVkMWQxOTIwNmNlMjRhN2IzMmUiLCJ0ZW5hbnRJZCI6IjAwMDAwMCIsInVzZXJJZCI6MSwidXNlck5hbWUiOiJhZG1pbiIsImRlcHRJZCI6MTAzLCJkZXB0TmFtZSI6IueglOWPkemDqOmXqCIsImRlcHRDYXRlZ29yeSI6IiJ9.uk1CGB6xuPaW8OGcIPGOmA5Fo11mEj20KiUrr11rL9k"],"clientid":["e5cd7e4891bf95d1d19206ce24a7b32e"]}]
2026-05-09 09:20:19 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /resource/sse],耗时:[0]毫秒
2026-05-09 09:20:22 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /resource/sse],参数类型[param],参数:[{"Authorization":["Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOiJzeXNfdXNlcjoxIiwicm5TdHIiOiJibElseTRpcjJFZmpSUjdjVERQdnlxNXZ1M2lkbXJsZyIsImNsaWVudGlkIjoiZTVjZDdlNDg5MWJmOTVkMWQxOTIwNmNlMjRhN2IzMmUiLCJ0ZW5hbnRJZCI6IjAwMDAwMCIsInVzZXJJZCI6MSwidXNlck5hbWUiOiJhZG1pbiIsImRlcHRJZCI6MTAzLCJkZXB0TmFtZSI6IueglOWPkemDqOmXqCIsImRlcHRDYXRlZ29yeSI6IiJ9.uk1CGB6xuPaW8OGcIPGOmA5Fo11mEj20KiUrr11rL9k"],"clientid":["e5cd7e4891bf95d1d19206ce24a7b32e"]}]
2026-05-09 09:20:23 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/user/authRole/2047881868870909954],无参数
2026-05-09 09:20:23 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/user/authRole/2047881868870909954],耗时:[29]毫秒
2026-05-09 09:20:27 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/role/list],参数类型[param],参数:[{"pageSize":["10"],"pageNum":["1"]}]
2026-05-09 09:20:28 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/role/list],耗时:[30]毫秒
2026-05-09 09:20:30 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/role/4],无参数
2026-05-09 09:20:30 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/role/4],耗时:[12]毫秒
2026-05-09 09:20:30 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/menu/roleMenuTreeselect/4],无参数
2026-05-09 09:20:31 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/menu/roleMenuTreeselect/4],耗时:[42]毫秒
2026-05-09 09:20:57 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/dict/data/type/sys_show_hide],无参数
2026-05-09 09:20:57 [XNIO-1 task-4] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/menu/list],无参数
2026-05-09 09:20:57 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/dict/data/type/sys_show_hide],耗时:[15]毫秒
2026-05-09 09:20:57 [XNIO-1 task-4] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/menu/list],耗时:[27]毫秒
2026-05-09 09:21:00 [XNIO-1 task-4] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/menu/list],无参数
2026-05-09 09:21:00 [XNIO-1 task-4] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/menu/list],耗时:[12]毫秒
2026-05-09 09:21:00 [XNIO-1 task-4] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/menu/1],无参数
2026-05-09 09:21:00 [XNIO-1 task-4] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/menu/1],耗时:[3]毫秒
2026-05-09 09:21:07 [XNIO-1 task-4] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/dict/data/type/sys_yes_no],无参数
2026-05-09 09:21:07 [XNIO-1 task-4] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/dict/data/type/sys_yes_no],耗时:[7]毫秒
2026-05-09 09:21:07 [XNIO-1 task-4] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/config/list],参数类型[param],参数:[{"pageSize":["10"],"pageNum":["1"]}]
2026-05-09 09:21:07 [XNIO-1 task-4] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/config/list],耗时:[21]毫秒
2026-05-09 09:21:09 [XNIO-1 task-4] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/dict/type/list],参数类型[param],参数:[{"pageSize":["10"],"pageNum":["1"]}]
2026-05-09 09:21:09 [XNIO-1 task-4] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/dict/type/list],耗时:[26]毫秒
2026-05-09 09:21:09 [XNIO-1 task-4] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/dict/data/list],参数类型[param],参数:[{"pageSize":["10"],"pageNum":["1"],"dictType":["sys_user_sex"]}]
2026-05-09 09:21:09 [XNIO-1 task-4] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/dict/data/list],耗时:[17]毫秒
2026-05-09 09:21:20 [XNIO-1 task-4] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/dict/data/type/wf_business_status],无参数
2026-05-09 09:21:20 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /workflow/task/pageByTaskWait],参数类型[param],参数:[{"pageSize":["10"],"pageNum":["1"]}]
2026-05-09 09:21:20 [XNIO-1 task-4] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/dict/data/type/wf_business_status],耗时:[7]毫秒
2026-05-09 09:21:20 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /workflow/task/pageByTaskWait],耗时:[79]毫秒
2026-05-09 09:21:22 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/user/getInfo],无参数
2026-05-09 09:21:22 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/user/getInfo],耗时:[9]毫秒
2026-05-09 09:21:22 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/menu/getRouters],无参数
2026-05-09 09:21:22 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/menu/getRouters],耗时:[7]毫秒
2026-05-09 09:21:23 [XNIO-1 task-4] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/dict/data/type/sys_normal_disable],无参数
2026-05-09 09:21:23 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/dict/data/type/wf_business_status],无参数
2026-05-09 09:21:23 [XNIO-1 task-4] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/dict/data/type/sys_normal_disable],耗时:[2]毫秒
2026-05-09 09:21:23 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/dict/data/type/wf_business_status],耗时:[1]毫秒
2026-05-09 09:21:23 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /auth/tenant/list],无参数
2026-05-09 09:21:23 [XNIO-1 task-5] INFO o.d.c.r.aspectj.RateLimiterAspect - 限制令牌 => 20, 剩余令牌 => 19, 缓存key => 'global:rate_limit:/auth/tenant/list:0:0:0:0:0:0:0:1:'
2026-05-09 09:21:23 [XNIO-1 task-4] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /workflow/task/pageByTaskWait],参数类型[param],参数:[{"pageSize":["10"],"pageNum":["1"]}]
2026-05-09 09:21:23 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /auth/tenant/list],耗时:[3]毫秒
2026-05-09 09:21:23 [XNIO-1 task-4] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /workflow/task/pageByTaskWait],耗时:[33]毫秒
2026-05-09 09:21:23 [XNIO-1 task-4] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /resource/sse],参数类型[param],参数:[{"Authorization":["Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOiJzeXNfdXNlcjoxIiwicm5TdHIiOiJibElseTRpcjJFZmpSUjdjVERQdnlxNXZ1M2lkbXJsZyIsImNsaWVudGlkIjoiZTVjZDdlNDg5MWJmOTVkMWQxOTIwNmNlMjRhN2IzMmUiLCJ0ZW5hbnRJZCI6IjAwMDAwMCIsInVzZXJJZCI6MSwidXNlck5hbWUiOiJhZG1pbiIsImRlcHRJZCI6MTAzLCJkZXB0TmFtZSI6IueglOWPkemDqOmXqCIsImRlcHRDYXRlZ29yeSI6IiJ9.uk1CGB6xuPaW8OGcIPGOmA5Fo11mEj20KiUrr11rL9k"],"clientid":["e5cd7e4891bf95d1d19206ce24a7b32e"]}]
2026-05-09 09:21:23 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /resource/sse],参数类型[param],参数:[{"Authorization":["Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOiJzeXNfdXNlcjoxIiwicm5TdHIiOiJibElseTRpcjJFZmpSUjdjVERQdnlxNXZ1M2lkbXJsZyIsImNsaWVudGlkIjoiZTVjZDdlNDg5MWJmOTVkMWQxOTIwNmNlMjRhN2IzMmUiLCJ0ZW5hbnRJZCI6IjAwMDAwMCIsInVzZXJJZCI6MSwidXNlck5hbWUiOiJhZG1pbiIsImRlcHRJZCI6MTAzLCJkZXB0TmFtZSI6IueglOWPkemDqOmXqCIsImRlcHRDYXRlZ29yeSI6IiJ9.uk1CGB6xuPaW8OGcIPGOmA5Fo11mEj20KiUrr11rL9k"],"clientid":["e5cd7e4891bf95d1d19206ce24a7b32e"]}]
2026-05-09 09:21:23 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /resource/sse],耗时:[0]毫秒
2026-05-09 09:21:23 [XNIO-1 task-4] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /resource/sse],参数类型[param],参数:[{"Authorization":["Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOiJzeXNfdXNlcjoxIiwicm5TdHIiOiJibElseTRpcjJFZmpSUjdjVERQdnlxNXZ1M2lkbXJsZyIsImNsaWVudGlkIjoiZTVjZDdlNDg5MWJmOTVkMWQxOTIwNmNlMjRhN2IzMmUiLCJ0ZW5hbnRJZCI6IjAwMDAwMCIsInVzZXJJZCI6MSwidXNlck5hbWUiOiJhZG1pbiIsImRlcHRJZCI6MTAzLCJkZXB0TmFtZSI6IueglOWPkemDqOmXqCIsImRlcHRDYXRlZ29yeSI6IiJ9.uk1CGB6xuPaW8OGcIPGOmA5Fo11mEj20KiUrr11rL9k"],"clientid":["e5cd7e4891bf95d1d19206ce24a7b32e"]}]
2026-05-09 09:21:23 [XNIO-1 task-4] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /resource/sse],耗时:[0]毫秒
2026-05-09 09:21:26 [XNIO-1 task-4] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /resource/sse],参数类型[param],参数:[{"Authorization":["Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOiJzeXNfdXNlcjoxIiwicm5TdHIiOiJibElseTRpcjJFZmpSUjdjVERQdnlxNXZ1M2lkbXJsZyIsImNsaWVudGlkIjoiZTVjZDdlNDg5MWJmOTVkMWQxOTIwNmNlMjRhN2IzMmUiLCJ0ZW5hbnRJZCI6IjAwMDAwMCIsInVzZXJJZCI6MSwidXNlck5hbWUiOiJhZG1pbiIsImRlcHRJZCI6MTAzLCJkZXB0TmFtZSI6IueglOWPkemDqOmXqCIsImRlcHRDYXRlZ29yeSI6IiJ9.uk1CGB6xuPaW8OGcIPGOmA5Fo11mEj20KiUrr11rL9k"],"clientid":["e5cd7e4891bf95d1d19206ce24a7b32e"]}]
2026-05-09 09:21:29 [XNIO-1 task-4] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/dict/data/type/sys_device_type],无参数
2026-05-09 09:21:29 [XNIO-1 task-4] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/dict/data/type/sys_device_type],耗时:[2]毫秒
2026-05-09 09:21:30 [XNIO-1 task-4] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /monitor/online/list],参数类型[param],参数:[{"pageSize":["10"],"pageNum":["1"]}]
2026-05-09 09:21:30 [XNIO-1 task-4] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /monitor/online/list],耗时:[75]毫秒
2026-05-09 09:21:47 [XNIO-1 task-4] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /monitor/cache],无参数
2026-05-09 09:21:47 [XNIO-1 task-4] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /monitor/cache],耗时:[33]毫秒
2026-05-09 09:22:00 [XNIO-1 task-4] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/dict/data/type/sys_user_sex],无参数
2026-05-09 09:22:00 [XNIO-1 task-4] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/dict/data/type/sys_user_sex],耗时:[2]毫秒
2026-05-09 09:22:00 [XNIO-1 task-4] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/user/deptTree],无参数
2026-05-09 09:22:00 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/user/list],参数类型[param],参数:[{"pageSize":["10"],"pageNum":["1"]}]
2026-05-09 09:22:00 [XNIO-1 task-4] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/user/deptTree],耗时:[17]毫秒
2026-05-09 09:22:00 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/user/list],耗时:[31]毫秒
2026-05-09 09:22:00 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/config/configKey/sys.user.initPassword],无参数
2026-05-09 09:22:00 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/config/configKey/sys.user.initPassword],耗时:[1]毫秒
2026-05-09 09:22:10 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/role/list],参数类型[param],参数:[{"pageSize":["10"],"pageNum":["1"]}]
2026-05-09 09:22:11 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/role/list],耗时:[28]毫秒
2026-05-09 09:22:18 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/role/4],无参数
2026-05-09 09:22:18 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/role/4],耗时:[7]毫秒
2026-05-09 09:22:18 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/menu/roleMenuTreeselect/4],无参数
2026-05-09 09:22:19 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/menu/roleMenuTreeselect/4],耗时:[9]毫秒
2026-05-09 09:22:32 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[PUT /system/role],参数类型[json],参数:[{"roleId":4,"roleSort":4,"status":"0","roleName":"仅本人","roleKey":"me","menuCheckStrictly":true,"deptCheckStrictly":true,"remark":"","dataScope":"5","menuIds":[5,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511],"deptIds":[],"createTime":"2026-04-24 08:32:08","flag":false,"superAdmin":false}]
2026-05-09 09:22:33 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[PUT /system/role],耗时:[148]毫秒
2026-05-09 09:22:33 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/role/list],参数类型[param],参数:[{"pageSize":["10"],"pageNum":["1"]}]
2026-05-09 09:22:33 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/role/list],耗时:[14]毫秒
2026-05-09 09:22:41 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[DELETE /system/role/3],无参数
2026-05-09 09:22:41 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[DELETE /system/role/3],耗时:[14]毫秒
2026-05-09 09:22:48 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/role/authUser/allocatedList],参数类型[param],参数:[{"roleId":["3"],"pageSize":["10"],"pageNum":["1"]}]
2026-05-09 09:22:48 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/role/authUser/allocatedList],耗时:[27]毫秒
2026-05-09 09:22:52 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/role/3],无参数
2026-05-09 09:22:52 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/role/3],耗时:[11]毫秒
2026-05-09 09:22:52 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/role/deptTree/3],无参数
2026-05-09 09:22:52 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/role/deptTree/3],耗时:[20]毫秒
2026-05-09 09:22:57 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/role/4],无参数
2026-05-09 09:22:57 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/role/4],耗时:[10]毫秒
2026-05-09 09:22:57 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/role/deptTree/4],无参数
2026-05-09 09:22:57 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/role/deptTree/4],耗时:[14]毫秒
2026-05-09 09:23:03 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[PUT /system/role/dataScope],参数类型[json],参数:[{"roleId":4,"roleSort":4,"status":"0","roleName":"仅本人","roleKey":"me","menuCheckStrictly":true,"deptCheckStrictly":true,"remark":"","dataScope":"5","menuIds":[5,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511],"deptIds":[],"createTime":"2026-04-24 08:32:08","flag":false,"superAdmin":false}]
2026-05-09 09:23:03 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[PUT /system/role/dataScope],耗时:[11]毫秒
2026-05-09 09:23:03 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/role/list],参数类型[param],参数:[{"pageSize":["10"],"pageNum":["1"]}]
2026-05-09 09:23:03 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/role/list],耗时:[22]毫秒
2026-05-09 09:23:33 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/role/4],无参数
2026-05-09 09:23:33 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/role/4],耗时:[6]毫秒
2026-05-09 09:23:33 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/role/deptTree/4],无参数
2026-05-09 09:23:33 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/role/deptTree/4],耗时:[17]毫秒
2026-05-09 09:23:36 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[PUT /system/role/dataScope],参数类型[json],参数:[{"roleId":4,"roleSort":4,"status":"0","roleName":"仅本人","roleKey":"me","menuCheckStrictly":true,"deptCheckStrictly":true,"remark":"","dataScope":"1","menuIds":[5,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511],"deptIds":[],"createTime":"2026-04-24 08:32:08","flag":false,"superAdmin":false}]
2026-05-09 09:23:36 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[PUT /system/role/dataScope],耗时:[11]毫秒
2026-05-09 09:23:37 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/role/list],参数类型[param],参数:[{"pageSize":["10"],"pageNum":["1"]}]
2026-05-09 09:23:37 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/role/list],耗时:[22]毫秒
2026-05-09 09:24:07 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/role/4],无参数
2026-05-09 09:24:07 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/role/4],耗时:[11]毫秒
2026-05-09 09:24:07 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/role/deptTree/4],无参数
2026-05-09 09:24:07 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/role/deptTree/4],耗时:[12]毫秒
2026-05-09 09:24:11 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[PUT /system/role/dataScope],参数类型[json],参数:[{"roleId":4,"roleSort":4,"status":"0","roleName":"仅本人","roleKey":"me","menuCheckStrictly":true,"deptCheckStrictly":true,"remark":"","dataScope":"5","menuIds":[5,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511],"deptIds":[],"createTime":"2026-04-24 08:32:08","flag":false,"superAdmin":false}]
2026-05-09 09:24:11 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[PUT /system/role/dataScope],耗时:[11]毫秒
2026-05-09 09:24:12 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /system/role/list],参数类型[param],参数:[{"pageSize":["10"],"pageNum":["1"]}]
2026-05-09 09:24:12 [XNIO-1 task-5] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /system/role/list],耗时:[12]毫秒
2026-05-09 09:39:58 [Thread-5] INFO c.a.s.c.c.window.SlidingRingWindow - JVM is about to exit, emitting data in the Window
2026-05-09 09:39:58 [SpringApplicationShutdownHook] INFO c.a.s.c.c.init.SnailJobCloseListener - snail-job client about to shutdown v1.9.0
2026-05-09 09:39:58 [SpringApplicationShutdownHook] INFO c.a.s.c.c.l.report.AbstractLogReport - AsyncReport Log about to shutdown
2026-05-09 09:39:58 [SpringApplicationShutdownHook] INFO c.a.s.c.c.window.SlidingRingWindow - Sliding window is about to exit, emitting data in the Window
2026-05-09 09:39:58 [SpringApplicationShutdownHook] INFO c.a.s.c.c.l.report.AbstractLogReport - AsyncReport Log has been shutdown
2026-05-09 09:39:58 [SpringApplicationShutdownHook] INFO c.a.s.c.c.init.SnailJobCloseListener - snail-job client closed successfully v1.9.0
2026-05-09 09:40:18 [background-preinit] INFO o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.3.Final
2026-05-09 09:40:18 [main] INFO org.dromara.DromaraApplication - Starting DromaraApplication using Java 17.0.17 with PID 11260 (D:\code\water\water-admin\target\classes started by admin in D:\code\water)
2026-05-09 09:40:18 [main] INFO org.dromara.DromaraApplication - The following 1 profile is active: "dev"
2026-05-09 09:40:21 [main] INFO io.undertow.servlet - Initializing Spring embedded WebApplicationContext
2026-05-09 09:40:21 [main] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource detect P6SPY plugin and enabled it
2026-05-09 09:40:21 [main] INFO com.zaxxer.hikari.HikariDataSource - master - Starting...
2026-05-09 09:40:21 [main] INFO com.zaxxer.hikari.pool.HikariPool - master - Added connection com.mysql.cj.jdbc.ConnectionImpl@564e9c0b
2026-05-09 09:40:21 [main] INFO com.zaxxer.hikari.HikariDataSource - master - Start completed.
2026-05-09 09:40:21 [main] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource - add a datasource named [master] success
2026-05-09 09:40:21 [main] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource initial loaded [1] datasource,primary datasource named [master]
2026-05-09 09:40:22 [main] INFO o.d.common.redis.config.RedisConfig - 初始化 redis 配置
2026-05-09 09:40:23 [main] INFO org.redisson.Version - Redisson 3.52.0
2026-05-09 09:40:23 [redisson-netty-1-5] INFO o.r.connection.ConnectionsHolder - 1 connections initialized for localhost/127.0.0.1:6379
2026-05-09 09:40:23 [redisson-netty-1-4] INFO o.r.connection.ConnectionsHolder - 8 connections initialized for localhost/127.0.0.1:6379
2026-05-09 09:40:24 [main] INFO c.a.s.c.j.c.e.b.AbstractScriptExecutor$SnailFileUtils - [FileUtils] [workspace] use user.home as workspace: C:\Users\admin/snailJob/worker
2026-05-09 09:40:24 [main] INFO c.a.s.c.j.c.e.b.AbstractScriptExecutor$SnailFileUtils - [FileUtils] [workspace] use user.home as workspace: C:\Users\admin/snailJob/worker
2026-05-09 09:40:24 [main] INFO c.a.s.c.j.c.e.b.AbstractScriptExecutor$SnailFileUtils - [FileUtils] [workspace] use user.home as workspace: C:\Users\admin/snailJob/worker
2026-05-09 09:40:24 [main] INFO o.d.common.json.config.JacksonConfig - 初始化 jackson 配置
2026-05-09 09:40:24 [main] INFO c.a.s.c.s.SnailJobClientJobCoreAutoConfiguration - Snail-Job 客户端IP为: 192.168.0.217
2026-05-09 09:40:24 [main] INFO c.b.m.e.s.MybatisPlusApplicationContextAware - Register ApplicationContext instances org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@1bfe3203
2026-05-09 09:40:28 [main] INFO o.d.w.p.modes.sb.config.BeanConfig - 【warm-flow】加载完成
2026-05-09 09:40:29 [main] INFO io.undertow - starting server: Undertow - 2.3.23.Final
2026-05-09 09:40:29 [main] INFO org.xnio - XNIO version 3.8.16.Final
2026-05-09 09:40:29 [main] INFO org.xnio.nio - XNIO NIO Implementation Version 3.8.16.Final
2026-05-09 09:40:29 [main] INFO org.jboss.threads - JBoss Threads version 3.7.0.Final
2026-05-09 09:40:29 [main] INFO org.dromara.DromaraApplication - Started DromaraApplication in 12.61 seconds (process running for 13.283)
2026-05-09 09:40:29 [main] INFO o.d.c.sse.listener.SseTopicListener - 初始化SSE主题订阅监听器成功
2026-05-09 09:40:29 [main] INFO c.a.s.c.c.init.SnailJobStartListener - snail-job client is preparing to start... v1.9.0
2026-05-09 09:40:30 [main] INFO c.a.s.c.c.r.c.g.SnailJobGrpcClient - gRPC client started connect to server
2026-05-09 09:40:30 [main] INFO c.a.s.c.c.rpc.server.SnailGrpcServer - ------> snail-job remoting server start success, grpc = com.aizuda.snailjob.client.common.rpc.server.SnailGrpcServer, port = 28081
2026-05-09 09:40:30 [main] INFO c.a.s.c.c.init.SnailJobStartListener - snail-job client started successfully v1.9.0
2026-05-09 09:40:31 [main] INFO o.d.s.runner.SystemApplicationRunner - 初始化OSS配置成功
2026-05-09 09:40:31 [RMI TCP Connection(5)-192.168.111.1] INFO io.undertow.servlet - Initializing Spring DispatcherServlet 'dispatcherServlet'
2026-05-09 09:40:34 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /resource/sse],参数类型[param],参数:[{"Authorization":["Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOiJzeXNfdXNlcjoxIiwicm5TdHIiOiJibElseTRpcjJFZmpSUjdjVERQdnlxNXZ1M2lkbXJsZyIsImNsaWVudGlkIjoiZTVjZDdlNDg5MWJmOTVkMWQxOTIwNmNlMjRhN2IzMmUiLCJ0ZW5hbnRJZCI6IjAwMDAwMCIsInVzZXJJZCI6MSwidXNlck5hbWUiOiJhZG1pbiIsImRlcHRJZCI6MTAzLCJkZXB0TmFtZSI6IueglOWPkemDqOmXqCIsImRlcHRDYXRlZ29yeSI6IiJ9.uk1CGB6xuPaW8OGcIPGOmA5Fo11mEj20KiUrr11rL9k"],"clientid":["e5cd7e4891bf95d1d19206ce24a7b32e"]}]
2026-05-09 09:40:46 [Thread-5] INFO c.a.s.c.c.window.SlidingRingWindow - JVM is about to exit, emitting data in the Window
2026-05-09 09:40:46 [SpringApplicationShutdownHook] INFO c.a.s.c.c.init.SnailJobCloseListener - snail-job client about to shutdown v1.9.0
2026-05-09 09:40:46 [SpringApplicationShutdownHook] INFO c.a.s.c.c.l.report.AbstractLogReport - AsyncReport Log about to shutdown
2026-05-09 09:40:46 [SpringApplicationShutdownHook] INFO c.a.s.c.c.window.SlidingRingWindow - Sliding window is about to exit, emitting data in the Window
2026-05-09 09:40:46 [SpringApplicationShutdownHook] INFO c.a.s.c.c.l.report.AbstractLogReport - AsyncReport Log has been shutdown
2026-05-09 09:40:46 [SpringApplicationShutdownHook] INFO c.a.s.c.c.init.SnailJobCloseListener - snail-job client closed successfully v1.9.0
2026-05-09 09:40:56 [background-preinit] INFO o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.3.Final
2026-05-09 09:40:56 [main] INFO org.dromara.DromaraApplication - Starting DromaraApplication using Java 17.0.17 with PID 14948 (D:\code\water\water-admin\target\classes started by admin in D:\code\water)
2026-05-09 09:40:56 [main] INFO org.dromara.DromaraApplication - The following 1 profile is active: "dev"
2026-05-09 09:40:59 [main] INFO io.undertow.servlet - Initializing Spring embedded WebApplicationContext
2026-05-09 09:41:00 [main] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource detect P6SPY plugin and enabled it
2026-05-09 09:41:00 [main] INFO com.zaxxer.hikari.HikariDataSource - master - Starting...
2026-05-09 09:41:00 [main] INFO com.zaxxer.hikari.pool.HikariPool - master - Added connection com.mysql.cj.jdbc.ConnectionImpl@564e9c0b
2026-05-09 09:41:00 [main] INFO com.zaxxer.hikari.HikariDataSource - master - Start completed.
2026-05-09 09:41:00 [main] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource - add a datasource named [master] success
2026-05-09 09:41:00 [main] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource initial loaded [1] datasource,primary datasource named [master]
2026-05-09 09:41:01 [main] INFO o.d.common.redis.config.RedisConfig - 初始化 redis 配置
2026-05-09 09:41:01 [main] INFO org.redisson.Version - Redisson 3.52.0
2026-05-09 09:41:02 [redisson-netty-1-5] INFO o.r.connection.ConnectionsHolder - 1 connections initialized for localhost/127.0.0.1:6379
2026-05-09 09:41:02 [redisson-netty-1-4] INFO o.r.connection.ConnectionsHolder - 8 connections initialized for localhost/127.0.0.1:6379
2026-05-09 09:41:02 [main] INFO c.a.s.c.j.c.e.b.AbstractScriptExecutor$SnailFileUtils - [FileUtils] [workspace] use user.home as workspace: C:\Users\admin/snailJob/worker
2026-05-09 09:41:02 [main] INFO c.a.s.c.j.c.e.b.AbstractScriptExecutor$SnailFileUtils - [FileUtils] [workspace] use user.home as workspace: C:\Users\admin/snailJob/worker
2026-05-09 09:41:02 [main] INFO c.a.s.c.j.c.e.b.AbstractScriptExecutor$SnailFileUtils - [FileUtils] [workspace] use user.home as workspace: C:\Users\admin/snailJob/worker
2026-05-09 09:41:03 [main] INFO o.d.common.json.config.JacksonConfig - 初始化 jackson 配置
2026-05-09 09:41:03 [main] INFO c.a.s.c.s.SnailJobClientJobCoreAutoConfiguration - Snail-Job 客户端IP为: 192.168.0.217
2026-05-09 09:41:03 [main] INFO c.b.m.e.s.MybatisPlusApplicationContextAware - Register ApplicationContext instances org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@1bfe3203
2026-05-09 09:41:07 [main] INFO o.d.w.p.modes.sb.config.BeanConfig - 【warm-flow】加载完成
2026-05-09 09:41:08 [main] INFO io.undertow - starting server: Undertow - 2.3.23.Final
2026-05-09 09:41:08 [main] INFO org.xnio - XNIO version 3.8.16.Final
2026-05-09 09:41:08 [main] INFO org.xnio.nio - XNIO NIO Implementation Version 3.8.16.Final
2026-05-09 09:41:08 [main] INFO org.jboss.threads - JBoss Threads version 3.7.0.Final
2026-05-09 09:41:08 [main] INFO org.dromara.DromaraApplication - Started DromaraApplication in 13.118 seconds (process running for 13.776)
2026-05-09 09:41:08 [main] INFO o.d.c.sse.listener.SseTopicListener - 初始化SSE主题订阅监听器成功
2026-05-09 09:41:08 [main] INFO c.a.s.c.c.init.SnailJobStartListener - snail-job client is preparing to start... v1.9.0
2026-05-09 09:41:09 [main] INFO c.a.s.c.c.r.c.g.SnailJobGrpcClient - gRPC client started connect to server
2026-05-09 09:41:09 [main] INFO c.a.s.c.c.rpc.server.SnailGrpcServer - ------> snail-job remoting server start success, grpc = com.aizuda.snailjob.client.common.rpc.server.SnailGrpcServer, port = 28081
2026-05-09 09:41:09 [main] INFO c.a.s.c.c.init.SnailJobStartListener - snail-job client started successfully v1.9.0
2026-05-09 09:41:10 [main] INFO o.d.s.runner.SystemApplicationRunner - 初始化OSS配置成功
2026-05-09 09:41:10 [RMI TCP Connection(20)-192.168.111.1] INFO io.undertow.servlet - Initializing Spring DispatcherServlet 'dispatcherServlet'
2026-05-09 09:41:38 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/deviceList],无参数
2026-05-09 09:41:38 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/deviceList],耗时:[191]毫秒
2026-05-09 09:42:13 [Thread-5] INFO c.a.s.c.c.window.SlidingRingWindow - JVM is about to exit, emitting data in the Window
2026-05-09 09:42:13 [SpringApplicationShutdownHook] INFO c.a.s.c.c.init.SnailJobCloseListener - snail-job client about to shutdown v1.9.0
2026-05-09 09:42:13 [SpringApplicationShutdownHook] INFO c.a.s.c.c.l.report.AbstractLogReport - AsyncReport Log about to shutdown
2026-05-09 09:42:13 [SpringApplicationShutdownHook] INFO c.a.s.c.c.window.SlidingRingWindow - Sliding window is about to exit, emitting data in the Window
2026-05-09 09:42:13 [SpringApplicationShutdownHook] INFO c.a.s.c.c.l.report.AbstractLogReport - AsyncReport Log has been shutdown
2026-05-09 09:42:13 [SpringApplicationShutdownHook] INFO c.a.s.c.c.init.SnailJobCloseListener - snail-job client closed successfully v1.9.0
2026-05-09 09:42:13 [SpringApplicationShutdownHook] INFO io.undertow - stopping server: Undertow - 2.3.23.Final
2026-05-09 09:42:13 [SpringApplicationShutdownHook] INFO o.d.c.core.config.ThreadPoolConfig - ====关闭后台任务任务线程池====
2026-05-09 09:42:13 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource start closing ....
2026-05-09 09:42:13 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - master - Shutdown initiated...
2026-05-09 09:42:13 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - master - Shutdown completed.
2026-05-09 09:42:13 [SpringApplicationShutdownHook] INFO c.b.d.d.d.DefaultDataSourceDestroyer - dynamic-datasource close the datasource named [master] success,
2026-05-09 09:42:13 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource all closed success,bye
2026-05-09 09:42:13 [SpringApplicationShutdownHook] INFO io.undertow.servlet - Destroying Spring FrameworkServlet 'dispatcherServlet'
2026-05-09 09:42:19 [background-preinit] INFO o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.3.Final
2026-05-09 09:42:19 [main] INFO org.dromara.DromaraApplication - Starting DromaraApplication using Java 17.0.17 with PID 34292 (D:\code\water\water-admin\target\classes started by admin in D:\code\water)
2026-05-09 09:42:19 [main] INFO org.dromara.DromaraApplication - The following 1 profile is active: "dev"
2026-05-09 09:42:22 [main] INFO io.undertow.servlet - Initializing Spring embedded WebApplicationContext
2026-05-09 09:42:22 [main] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource detect P6SPY plugin and enabled it
2026-05-09 09:42:22 [main] INFO com.zaxxer.hikari.HikariDataSource - master - Starting...
2026-05-09 09:42:23 [main] INFO com.zaxxer.hikari.pool.HikariPool - master - Added connection com.mysql.cj.jdbc.ConnectionImpl@6c4eccd2
2026-05-09 09:42:23 [main] INFO com.zaxxer.hikari.HikariDataSource - master - Start completed.
2026-05-09 09:42:23 [main] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource - add a datasource named [master] success
2026-05-09 09:42:23 [main] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource initial loaded [1] datasource,primary datasource named [master]
2026-05-09 09:42:24 [main] INFO o.d.common.redis.config.RedisConfig - 初始化 redis 配置
2026-05-09 09:42:24 [main] INFO org.redisson.Version - Redisson 3.52.0
2026-05-09 09:42:24 [redisson-netty-1-5] INFO o.r.connection.ConnectionsHolder - 1 connections initialized for localhost/127.0.0.1:6379
2026-05-09 09:42:24 [redisson-netty-1-4] INFO o.r.connection.ConnectionsHolder - 8 connections initialized for localhost/127.0.0.1:6379
2026-05-09 09:42:25 [main] INFO c.a.s.c.j.c.e.b.AbstractScriptExecutor$SnailFileUtils - [FileUtils] [workspace] use user.home as workspace: C:\Users\admin/snailJob/worker
2026-05-09 09:42:25 [main] INFO c.a.s.c.j.c.e.b.AbstractScriptExecutor$SnailFileUtils - [FileUtils] [workspace] use user.home as workspace: C:\Users\admin/snailJob/worker
2026-05-09 09:42:25 [main] INFO c.a.s.c.j.c.e.b.AbstractScriptExecutor$SnailFileUtils - [FileUtils] [workspace] use user.home as workspace: C:\Users\admin/snailJob/worker
2026-05-09 09:42:25 [main] INFO o.d.common.json.config.JacksonConfig - 初始化 jackson 配置
2026-05-09 09:42:26 [main] INFO c.a.s.c.s.SnailJobClientJobCoreAutoConfiguration - Snail-Job 客户端IP为: 192.168.0.217
2026-05-09 09:42:26 [main] INFO c.b.m.e.s.MybatisPlusApplicationContextAware - Register ApplicationContext instances org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@65bb9029
2026-05-09 09:42:30 [main] INFO o.d.w.p.modes.sb.config.BeanConfig - 【warm-flow】加载完成
2026-05-09 09:42:31 [main] INFO io.undertow - starting server: Undertow - 2.3.23.Final
2026-05-09 09:42:31 [main] INFO org.xnio - XNIO version 3.8.16.Final
2026-05-09 09:42:31 [main] INFO org.xnio.nio - XNIO NIO Implementation Version 3.8.16.Final
2026-05-09 09:42:31 [main] INFO org.jboss.threads - JBoss Threads version 3.7.0.Final
2026-05-09 09:42:31 [main] INFO org.dromara.DromaraApplication - Started DromaraApplication in 12.491 seconds (process running for 13.272)
2026-05-09 09:42:31 [main] INFO o.d.c.sse.listener.SseTopicListener - 初始化SSE主题订阅监听器成功
2026-05-09 09:42:31 [main] INFO o.d.s.runner.SystemApplicationRunner - 初始化OSS配置成功
2026-05-09 09:42:31 [main] INFO c.a.s.c.c.init.SnailJobStartListener - snail-job client is preparing to start... v1.9.0
2026-05-09 09:42:31 [main] INFO c.a.s.c.c.r.c.g.SnailJobGrpcClient - gRPC client started connect to server
2026-05-09 09:42:32 [main] INFO c.a.s.c.c.rpc.server.SnailGrpcServer - ------> snail-job remoting server start success, grpc = com.aizuda.snailjob.client.common.rpc.server.SnailGrpcServer, port = 28081
2026-05-09 09:42:32 [main] INFO c.a.s.c.c.init.SnailJobStartListener - snail-job client started successfully v1.9.0
2026-05-09 09:42:32 [RMI TCP Connection(7)-192.168.111.1] INFO io.undertow.servlet - Initializing Spring DispatcherServlet 'dispatcherServlet'
2026-05-09 09:43:11 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/deviceList],无参数
2026-05-09 09:43:11 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/deviceList],耗时:[211]毫秒
2026-05-09 09:47:25 [Thread-5] INFO c.a.s.c.c.window.SlidingRingWindow - JVM is about to exit, emitting data in the Window
2026-05-09 09:47:25 [SpringApplicationShutdownHook] INFO c.a.s.c.c.init.SnailJobCloseListener - snail-job client about to shutdown v1.9.0
2026-05-09 09:47:25 [SpringApplicationShutdownHook] INFO c.a.s.c.c.l.report.AbstractLogReport - AsyncReport Log about to shutdown
2026-05-09 09:47:25 [SpringApplicationShutdownHook] INFO c.a.s.c.c.window.SlidingRingWindow - Sliding window is about to exit, emitting data in the Window
2026-05-09 09:47:25 [SpringApplicationShutdownHook] INFO c.a.s.c.c.l.report.AbstractLogReport - AsyncReport Log has been shutdown
2026-05-09 09:47:25 [SpringApplicationShutdownHook] INFO c.a.s.c.c.init.SnailJobCloseListener - snail-job client closed successfully v1.9.0
2026-05-09 09:47:25 [SpringApplicationShutdownHook] INFO io.undertow - stopping server: Undertow - 2.3.23.Final
2026-05-09 09:47:25 [SpringApplicationShutdownHook] INFO o.d.c.core.config.ThreadPoolConfig - ====关闭后台任务任务线程池====
2026-05-09 09:47:25 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource start closing ....
2026-05-09 09:47:25 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - master - Shutdown initiated...
2026-05-09 09:47:25 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - master - Shutdown completed.
2026-05-09 09:47:25 [SpringApplicationShutdownHook] INFO c.b.d.d.d.DefaultDataSourceDestroyer - dynamic-datasource close the datasource named [master] success,
2026-05-09 09:47:25 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource all closed success,bye
2026-05-09 09:47:25 [SpringApplicationShutdownHook] INFO io.undertow.servlet - Destroying Spring FrameworkServlet 'dispatcherServlet'
2026-05-09 09:47:29 [background-preinit] INFO o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.3.Final
2026-05-09 09:47:29 [main] INFO org.dromara.DromaraApplication - Starting DromaraApplication using Java 17.0.17 with PID 11244 (D:\code\water\water-admin\target\classes started by admin in D:\code\water)
2026-05-09 09:47:29 [main] INFO org.dromara.DromaraApplication - The following 1 profile is active: "dev"
2026-05-09 09:47:32 [main] INFO io.undertow.servlet - Initializing Spring embedded WebApplicationContext
2026-05-09 09:47:32 [main] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource detect P6SPY plugin and enabled it
2026-05-09 09:47:32 [main] INFO com.zaxxer.hikari.HikariDataSource - master - Starting...
2026-05-09 09:47:32 [main] INFO com.zaxxer.hikari.pool.HikariPool - master - Added connection com.mysql.cj.jdbc.ConnectionImpl@564e9c0b
2026-05-09 09:47:32 [main] INFO com.zaxxer.hikari.HikariDataSource - master - Start completed.
2026-05-09 09:47:32 [main] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource - add a datasource named [master] success
2026-05-09 09:47:32 [main] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource initial loaded [1] datasource,primary datasource named [master]
2026-05-09 09:47:34 [main] INFO o.d.common.redis.config.RedisConfig - 初始化 redis 配置
2026-05-09 09:47:35 [main] INFO org.redisson.Version - Redisson 3.52.0
2026-05-09 09:47:35 [redisson-netty-1-5] INFO o.r.connection.ConnectionsHolder - 1 connections initialized for localhost/127.0.0.1:6379
2026-05-09 09:47:35 [redisson-netty-1-4] INFO o.r.connection.ConnectionsHolder - 8 connections initialized for localhost/127.0.0.1:6379
2026-05-09 09:47:36 [main] INFO c.a.s.c.j.c.e.b.AbstractScriptExecutor$SnailFileUtils - [FileUtils] [workspace] use user.home as workspace: C:\Users\admin/snailJob/worker
2026-05-09 09:47:36 [main] INFO c.a.s.c.j.c.e.b.AbstractScriptExecutor$SnailFileUtils - [FileUtils] [workspace] use user.home as workspace: C:\Users\admin/snailJob/worker
2026-05-09 09:47:36 [main] INFO c.a.s.c.j.c.e.b.AbstractScriptExecutor$SnailFileUtils - [FileUtils] [workspace] use user.home as workspace: C:\Users\admin/snailJob/worker
2026-05-09 09:47:37 [main] INFO o.d.common.json.config.JacksonConfig - 初始化 jackson 配置
2026-05-09 09:47:37 [main] INFO c.a.s.c.s.SnailJobClientJobCoreAutoConfiguration - Snail-Job 客户端IP为: 192.168.0.217
2026-05-09 09:47:37 [main] INFO c.b.m.e.s.MybatisPlusApplicationContextAware - Register ApplicationContext instances org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@1bfe3203
2026-05-09 09:47:45 [background-preinit] INFO o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.3.Final
2026-05-09 09:47:45 [main] INFO org.dromara.DromaraApplication - Starting DromaraApplication using Java 17.0.17 with PID 32536 (D:\code\water\water-admin\target\classes started by admin in D:\code\water)
2026-05-09 09:47:45 [main] INFO org.dromara.DromaraApplication - The following 1 profile is active: "dev"
2026-05-09 09:47:48 [main] INFO io.undertow.servlet - Initializing Spring embedded WebApplicationContext
2026-05-09 09:47:48 [main] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource detect P6SPY plugin and enabled it
2026-05-09 09:47:48 [main] INFO com.zaxxer.hikari.HikariDataSource - master - Starting...
2026-05-09 09:47:48 [main] INFO com.zaxxer.hikari.pool.HikariPool - master - Added connection com.mysql.cj.jdbc.ConnectionImpl@21d478f3
2026-05-09 09:47:48 [main] INFO com.zaxxer.hikari.HikariDataSource - master - Start completed.
2026-05-09 09:47:48 [main] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource - add a datasource named [master] success
2026-05-09 09:47:48 [main] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource initial loaded [1] datasource,primary datasource named [master]
2026-05-09 09:47:50 [main] INFO o.d.common.redis.config.RedisConfig - 初始化 redis 配置
2026-05-09 09:47:50 [main] INFO org.redisson.Version - Redisson 3.52.0
2026-05-09 09:47:50 [redisson-netty-1-5] INFO o.r.connection.ConnectionsHolder - 1 connections initialized for localhost/127.0.0.1:6379
2026-05-09 09:47:50 [redisson-netty-1-4] INFO o.r.connection.ConnectionsHolder - 8 connections initialized for localhost/127.0.0.1:6379
2026-05-09 09:47:51 [main] INFO c.a.s.c.j.c.e.b.AbstractScriptExecutor$SnailFileUtils - [FileUtils] [workspace] use user.home as workspace: C:\Users\admin/snailJob/worker
2026-05-09 09:47:51 [main] INFO c.a.s.c.j.c.e.b.AbstractScriptExecutor$SnailFileUtils - [FileUtils] [workspace] use user.home as workspace: C:\Users\admin/snailJob/worker
2026-05-09 09:47:51 [main] INFO c.a.s.c.j.c.e.b.AbstractScriptExecutor$SnailFileUtils - [FileUtils] [workspace] use user.home as workspace: C:\Users\admin/snailJob/worker
2026-05-09 09:47:52 [main] INFO o.d.common.json.config.JacksonConfig - 初始化 jackson 配置
2026-05-09 09:47:52 [main] INFO c.a.s.c.s.SnailJobClientJobCoreAutoConfiguration - Snail-Job 客户端IP为: 192.168.0.217
2026-05-09 09:47:52 [main] INFO c.b.m.e.s.MybatisPlusApplicationContextAware - Register ApplicationContext instances org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@1bfe3203
2026-05-09 09:47:57 [main] INFO o.d.w.p.modes.sb.config.BeanConfig - 【warm-flow】加载完成
2026-05-09 09:47:57 [main] INFO io.undertow - starting server: Undertow - 2.3.23.Final
2026-05-09 09:47:57 [main] INFO org.xnio - XNIO version 3.8.16.Final
2026-05-09 09:47:58 [main] INFO org.xnio.nio - XNIO NIO Implementation Version 3.8.16.Final
2026-05-09 09:47:58 [main] INFO org.jboss.threads - JBoss Threads version 3.7.0.Final
2026-05-09 09:47:58 [main] INFO org.dromara.DromaraApplication - Started DromaraApplication in 13.714 seconds (process running for 14.472)
2026-05-09 09:47:58 [main] INFO o.d.c.sse.listener.SseTopicListener - 初始化SSE主题订阅监听器成功
2026-05-09 09:47:58 [main] INFO c.a.s.c.c.init.SnailJobStartListener - snail-job client is preparing to start... v1.9.0
2026-05-09 09:47:58 [main] INFO c.a.s.c.c.r.c.g.SnailJobGrpcClient - gRPC client started connect to server
2026-05-09 09:47:58 [main] INFO c.a.s.c.c.rpc.server.SnailGrpcServer - ------> snail-job remoting server start success, grpc = com.aizuda.snailjob.client.common.rpc.server.SnailGrpcServer, port = 28081
2026-05-09 09:47:59 [main] INFO c.a.s.c.c.init.SnailJobStartListener - snail-job client started successfully v1.9.0
2026-05-09 09:47:59 [main] INFO o.d.s.runner.SystemApplicationRunner - 初始化OSS配置成功
2026-05-09 09:47:59 [RMI TCP Connection(21)-192.168.111.1] INFO io.undertow.servlet - Initializing Spring DispatcherServlet 'dispatcherServlet'
2026-05-09 09:48:24 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/deviceList],无参数
2026-05-09 09:48:24 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/deviceList],耗时:[186]毫秒
2026-05-09 09:49:55 [Thread-5] INFO c.a.s.c.c.window.SlidingRingWindow - JVM is about to exit, emitting data in the Window
2026-05-09 09:49:55 [SpringApplicationShutdownHook] INFO c.a.s.c.c.init.SnailJobCloseListener - snail-job client about to shutdown v1.9.0
2026-05-09 09:49:55 [SpringApplicationShutdownHook] INFO c.a.s.c.c.l.report.AbstractLogReport - AsyncReport Log about to shutdown
2026-05-09 09:49:55 [SpringApplicationShutdownHook] INFO c.a.s.c.c.window.SlidingRingWindow - Sliding window is about to exit, emitting data in the Window
2026-05-09 09:49:55 [SpringApplicationShutdownHook] INFO c.a.s.c.c.l.report.AbstractLogReport - AsyncReport Log has been shutdown
2026-05-09 09:49:55 [SpringApplicationShutdownHook] INFO c.a.s.c.c.init.SnailJobCloseListener - snail-job client closed successfully v1.9.0
2026-05-09 09:49:55 [SpringApplicationShutdownHook] INFO io.undertow - stopping server: Undertow - 2.3.23.Final
2026-05-09 09:49:55 [SpringApplicationShutdownHook] INFO o.d.c.core.config.ThreadPoolConfig - ====关闭后台任务任务线程池====
2026-05-09 09:49:55 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource start closing ....
2026-05-09 09:49:55 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - master - Shutdown initiated...
2026-05-09 09:49:55 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - master - Shutdown completed.
2026-05-09 09:49:55 [SpringApplicationShutdownHook] INFO c.b.d.d.d.DefaultDataSourceDestroyer - dynamic-datasource close the datasource named [master] success,
2026-05-09 09:49:55 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource all closed success,bye
2026-05-09 09:49:55 [SpringApplicationShutdownHook] INFO io.undertow.servlet - Destroying Spring FrameworkServlet 'dispatcherServlet'
2026-05-09 09:50:00 [background-preinit] INFO o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.3.Final
2026-05-09 09:50:00 [main] INFO org.dromara.DromaraApplication - Starting DromaraApplication using Java 17.0.17 with PID 15312 (D:\code\water\water-admin\target\classes started by admin in D:\code\water)
2026-05-09 09:50:00 [main] INFO org.dromara.DromaraApplication - The following 1 profile is active: "dev"
2026-05-09 09:50:03 [main] INFO io.undertow.servlet - Initializing Spring embedded WebApplicationContext
2026-05-09 09:50:03 [main] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource detect P6SPY plugin and enabled it
2026-05-09 09:50:03 [main] INFO com.zaxxer.hikari.HikariDataSource - master - Starting...
2026-05-09 09:50:04 [main] INFO com.zaxxer.hikari.pool.HikariPool - master - Added connection com.mysql.cj.jdbc.ConnectionImpl@5367d46f
2026-05-09 09:50:04 [main] INFO com.zaxxer.hikari.HikariDataSource - master - Start completed.
2026-05-09 09:50:04 [main] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource - add a datasource named [master] success
2026-05-09 09:50:04 [main] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource initial loaded [1] datasource,primary datasource named [master]
2026-05-09 09:50:05 [main] INFO o.d.common.redis.config.RedisConfig - 初始化 redis 配置
2026-05-09 09:50:05 [main] INFO org.redisson.Version - Redisson 3.52.0
2026-05-09 09:50:05 [redisson-netty-1-5] INFO o.r.connection.ConnectionsHolder - 1 connections initialized for localhost/127.0.0.1:6379
2026-05-09 09:50:05 [redisson-netty-1-4] INFO o.r.connection.ConnectionsHolder - 8 connections initialized for localhost/127.0.0.1:6379
2026-05-09 09:50:06 [main] INFO c.a.s.c.j.c.e.b.AbstractScriptExecutor$SnailFileUtils - [FileUtils] [workspace] use user.home as workspace: C:\Users\admin/snailJob/worker
2026-05-09 09:50:06 [main] INFO c.a.s.c.j.c.e.b.AbstractScriptExecutor$SnailFileUtils - [FileUtils] [workspace] use user.home as workspace: C:\Users\admin/snailJob/worker
2026-05-09 09:50:06 [main] INFO c.a.s.c.j.c.e.b.AbstractScriptExecutor$SnailFileUtils - [FileUtils] [workspace] use user.home as workspace: C:\Users\admin/snailJob/worker
2026-05-09 09:50:06 [main] INFO o.d.common.json.config.JacksonConfig - 初始化 jackson 配置
2026-05-09 09:50:07 [main] INFO c.a.s.c.s.SnailJobClientJobCoreAutoConfiguration - Snail-Job 客户端IP为: 192.168.0.217
2026-05-09 09:50:07 [main] INFO c.b.m.e.s.MybatisPlusApplicationContextAware - Register ApplicationContext instances org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@1bfe3203
2026-05-09 09:50:11 [main] INFO o.d.w.p.modes.sb.config.BeanConfig - 【warm-flow】加载完成
2026-05-09 09:50:12 [main] INFO io.undertow - starting server: Undertow - 2.3.23.Final
2026-05-09 09:50:12 [main] INFO org.xnio - XNIO version 3.8.16.Final
2026-05-09 09:50:12 [main] INFO org.xnio.nio - XNIO NIO Implementation Version 3.8.16.Final
2026-05-09 09:50:12 [main] INFO org.jboss.threads - JBoss Threads version 3.7.0.Final
2026-05-09 09:50:12 [main] INFO org.dromara.DromaraApplication - Started DromaraApplication in 12.908 seconds (process running for 13.548)
2026-05-09 09:50:12 [main] INFO o.d.c.sse.listener.SseTopicListener - 初始化SSE主题订阅监听器成功
2026-05-09 09:50:12 [main] INFO c.a.s.c.c.init.SnailJobStartListener - snail-job client is preparing to start... v1.9.0
2026-05-09 09:50:12 [main] INFO c.a.s.c.c.r.c.g.SnailJobGrpcClient - gRPC client started connect to server
2026-05-09 09:50:13 [main] INFO c.a.s.c.c.rpc.server.SnailGrpcServer - ------> snail-job remoting server start success, grpc = com.aizuda.snailjob.client.common.rpc.server.SnailGrpcServer, port = 28081
2026-05-09 09:50:13 [main] INFO c.a.s.c.c.init.SnailJobStartListener - snail-job client started successfully v1.9.0
2026-05-09 09:50:13 [main] INFO o.d.s.runner.SystemApplicationRunner - 初始化OSS配置成功
2026-05-09 09:50:14 [RMI TCP Connection(9)-192.168.111.1] INFO io.undertow.servlet - Initializing Spring DispatcherServlet 'dispatcherServlet'
2026-05-09 09:50:18 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/deviceList],无参数
2026-05-09 09:50:18 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/deviceList],耗时:[217]毫秒
2026-05-09 09:50:43 [Thread-5] INFO c.a.s.c.c.window.SlidingRingWindow - JVM is about to exit, emitting data in the Window
2026-05-09 09:50:43 [SpringApplicationShutdownHook] INFO c.a.s.c.c.init.SnailJobCloseListener - snail-job client about to shutdown v1.9.0
2026-05-09 09:50:43 [SpringApplicationShutdownHook] INFO c.a.s.c.c.l.report.AbstractLogReport - AsyncReport Log about to shutdown
2026-05-09 09:50:43 [SpringApplicationShutdownHook] INFO c.a.s.c.c.window.SlidingRingWindow - Sliding window is about to exit, emitting data in the Window
2026-05-09 09:50:43 [SpringApplicationShutdownHook] INFO c.a.s.c.c.l.report.AbstractLogReport - AsyncReport Log has been shutdown
2026-05-09 09:50:43 [SpringApplicationShutdownHook] INFO c.a.s.c.c.init.SnailJobCloseListener - snail-job client closed successfully v1.9.0
2026-05-09 09:50:43 [SpringApplicationShutdownHook] INFO io.undertow - stopping server: Undertow - 2.3.23.Final
2026-05-09 09:50:43 [SpringApplicationShutdownHook] INFO o.d.c.core.config.ThreadPoolConfig - ====关闭后台任务任务线程池====
2026-05-09 09:50:43 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource start closing ....
2026-05-09 09:50:43 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - master - Shutdown initiated...
2026-05-09 09:50:43 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - master - Shutdown completed.
2026-05-09 09:50:43 [SpringApplicationShutdownHook] INFO c.b.d.d.d.DefaultDataSourceDestroyer - dynamic-datasource close the datasource named [master] success,
2026-05-09 09:50:43 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource all closed success,bye
2026-05-09 09:50:43 [SpringApplicationShutdownHook] INFO io.undertow.servlet - Destroying Spring FrameworkServlet 'dispatcherServlet'
2026-05-09 09:50:48 [background-preinit] INFO o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.3.Final
2026-05-09 09:50:48 [main] INFO org.dromara.DromaraApplication - Starting DromaraApplication using Java 17.0.17 with PID 27588 (D:\code\water\water-admin\target\classes started by admin in D:\code\water)
2026-05-09 09:50:48 [main] INFO org.dromara.DromaraApplication - The following 1 profile is active: "dev"
2026-05-09 09:50:51 [main] INFO io.undertow.servlet - Initializing Spring embedded WebApplicationContext
2026-05-09 09:50:51 [main] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource detect P6SPY plugin and enabled it
2026-05-09 09:50:51 [main] INFO com.zaxxer.hikari.HikariDataSource - master - Starting...
2026-05-09 09:50:51 [main] INFO com.zaxxer.hikari.pool.HikariPool - master - Added connection com.mysql.cj.jdbc.ConnectionImpl@5367d46f
2026-05-09 09:50:51 [main] INFO com.zaxxer.hikari.HikariDataSource - master - Start completed.
2026-05-09 09:50:51 [main] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource - add a datasource named [master] success
2026-05-09 09:50:51 [main] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource initial loaded [1] datasource,primary datasource named [master]
2026-05-09 09:50:52 [main] INFO o.d.common.redis.config.RedisConfig - 初始化 redis 配置
2026-05-09 09:50:52 [main] INFO org.redisson.Version - Redisson 3.52.0
2026-05-09 09:50:53 [redisson-netty-1-5] INFO o.r.connection.ConnectionsHolder - 1 connections initialized for localhost/127.0.0.1:6379
2026-05-09 09:50:53 [redisson-netty-1-4] INFO o.r.connection.ConnectionsHolder - 8 connections initialized for localhost/127.0.0.1:6379
2026-05-09 09:50:54 [main] INFO c.a.s.c.j.c.e.b.AbstractScriptExecutor$SnailFileUtils - [FileUtils] [workspace] use user.home as workspace: C:\Users\admin/snailJob/worker
2026-05-09 09:50:54 [main] INFO c.a.s.c.j.c.e.b.AbstractScriptExecutor$SnailFileUtils - [FileUtils] [workspace] use user.home as workspace: C:\Users\admin/snailJob/worker
2026-05-09 09:50:54 [main] INFO c.a.s.c.j.c.e.b.AbstractScriptExecutor$SnailFileUtils - [FileUtils] [workspace] use user.home as workspace: C:\Users\admin/snailJob/worker
2026-05-09 09:50:54 [main] INFO o.d.common.json.config.JacksonConfig - 初始化 jackson 配置
2026-05-09 09:50:54 [main] INFO c.a.s.c.s.SnailJobClientJobCoreAutoConfiguration - Snail-Job 客户端IP为: 192.168.0.217
2026-05-09 09:50:54 [main] INFO c.b.m.e.s.MybatisPlusApplicationContextAware - Register ApplicationContext instances org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@1bfe3203
2026-05-09 09:50:58 [main] INFO o.d.w.p.modes.sb.config.BeanConfig - 【warm-flow】加载完成
2026-05-09 09:50:59 [main] INFO io.undertow - starting server: Undertow - 2.3.23.Final
2026-05-09 09:50:59 [main] INFO org.xnio - XNIO version 3.8.16.Final
2026-05-09 09:50:59 [main] INFO org.xnio.nio - XNIO NIO Implementation Version 3.8.16.Final
2026-05-09 09:50:59 [main] INFO org.jboss.threads - JBoss Threads version 3.7.0.Final
2026-05-09 09:50:59 [main] INFO org.dromara.DromaraApplication - Started DromaraApplication in 12.544 seconds (process running for 13.162)
2026-05-09 09:50:59 [main] INFO o.d.c.sse.listener.SseTopicListener - 初始化SSE主题订阅监听器成功
2026-05-09 09:50:59 [main] INFO c.a.s.c.c.init.SnailJobStartListener - snail-job client is preparing to start... v1.9.0
2026-05-09 09:51:00 [main] INFO c.a.s.c.c.r.c.g.SnailJobGrpcClient - gRPC client started connect to server
2026-05-09 09:51:00 [main] INFO c.a.s.c.c.rpc.server.SnailGrpcServer - ------> snail-job remoting server start success, grpc = com.aizuda.snailjob.client.common.rpc.server.SnailGrpcServer, port = 28081
2026-05-09 09:51:00 [main] INFO c.a.s.c.c.init.SnailJobStartListener - snail-job client started successfully v1.9.0
2026-05-09 09:51:01 [main] INFO o.d.s.runner.SystemApplicationRunner - 初始化OSS配置成功
2026-05-09 09:51:01 [RMI TCP Connection(5)-192.168.111.1] INFO io.undertow.servlet - Initializing Spring DispatcherServlet 'dispatcherServlet'
2026-05-09 09:51:20 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/deviceList],无参数
2026-05-09 09:51:20 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/deviceList],耗时:[160]毫秒
2026-05-09 09:52:40 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/deviceList],无参数
2026-05-09 09:52:40 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/deviceList],耗时:[15]毫秒
2026-05-09 09:52:41 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/deviceList],无参数
2026-05-09 09:52:42 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/deviceList],耗时:[21]毫秒
2026-06-04 07:06:53 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/getUserInfo],参数类型[param],参数:[{"clientId":["32324a04c0175c8d61ac8a282553aea1"]}]
2026-06-04 07:06:53 [XNIO-1 task-3] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/deviceList],参数类型[param],参数:[{"clientId":["32324a04c0175c8d61ac8a282553aea1"],"pageSize":["10"],"pageNum":["1"]}]
2026-06-04 07:06:53 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/getUserInfo],耗时:[12]毫秒
2026-06-04 07:06:53 [XNIO-1 task-3] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/deviceList],耗时:[36]毫秒
2026-06-04 07:06:57 [XNIO-1 task-3] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/device/2062185771665858562],参数类型[param],参数:[{"clientId":["32324a04c0175c8d61ac8a282553aea1"]}]
2026-06-04 07:06:57 [XNIO-1 task-3] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/device/2062185771665858562],耗时:[13]毫秒
2026-06-04 07:06:59 [XNIO-1 task-3] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/device/2062185771665858562],参数类型[param],参数:[{"clientId":["32324a04c0175c8d61ac8a282553aea1"]}]
2026-06-04 07:06:59 [XNIO-1 task-3] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/device/2062185771665858562],耗时:[5]毫秒
2026-06-04 07:07:01 [XNIO-1 task-3] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[DELETE /app/v1/deleteDevice/2062185771665858562],参数类型[json],参数:[{"clientId":"32324a04c0175c8d61ac8a282553aea1"}]
2026-06-04 07:07:01 [XNIO-1 task-3] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[DELETE /app/v1/deleteDevice/2062185771665858562],耗时:[10]毫秒
2026-06-04 07:07:03 [XNIO-1 task-3] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/getUserInfo],参数类型[param],参数:[{"clientId":["32324a04c0175c8d61ac8a282553aea1"]}]
2026-06-04 07:07:03 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/deviceList],参数类型[param],参数:[{"clientId":["32324a04c0175c8d61ac8a282553aea1"],"pageSize":["10"],"pageNum":["1"]}]
2026-06-04 07:07:03 [XNIO-1 task-3] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/getUserInfo],耗时:[5]毫秒
2026-06-04 07:07:03 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/deviceList],耗时:[22]毫秒
2026-06-04 07:07:06 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/schedulelist],参数类型[param],参数:[{"clientId":["32324a04c0175c8d61ac8a282553aea1"],"pageSize":["10"],"pageNum":["1"]}]
2026-06-04 07:07:06 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/schedulelist],耗时:[12]毫秒
2026-06-04 07:07:07 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/schedulelist],参数类型[param],参数:[{"clientId":["32324a04c0175c8d61ac8a282553aea1"],"pageSize":["10"],"pageNum":["2"]}]
2026-06-04 07:07:07 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/schedulelist],耗时:[15]毫秒
2026-06-04 07:07:11 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/getUserInfo],参数类型[param],参数:[{"clientId":["32324a04c0175c8d61ac8a282553aea1"]}]
2026-06-04 07:07:11 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/getUserInfo],耗时:[4]毫秒
2026-06-04 07:07:13 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/dataStatistics],参数类型[param],参数:[{"clientId":["32324a04c0175c8d61ac8a282553aea1"]}]
2026-06-04 07:07:13 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/dataStatistics],耗时:[8]毫秒
2026-06-04 07:07:14 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/waterLogList],参数类型[param],参数:[{"param[endTime]":[""],"param[beginTime]":[""],"clientId":["32324a04c0175c8d61ac8a282553aea1"],"pageSize":["10"],"pageNum":["1"]}]
2026-06-04 07:07:14 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/waterLogList],耗时:[16]毫秒
2026-06-04 07:07:16 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/getUserInfo],参数类型[param],参数:[{"clientId":["32324a04c0175c8d61ac8a282553aea1"]}]
2026-06-04 07:07:16 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/getUserInfo],耗时:[4]毫秒
2026-06-04 07:07:24 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/getUserInfo],参数类型[param],参数:[{"clientId":["32324a04c0175c8d61ac8a282553aea1"]}]
2026-06-04 07:07:24 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/getUserInfo],耗时:[6]毫秒
2026-06-04 07:07:33 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/getUserInfo],参数类型[param],参数:[{"clientId":["32324a04c0175c8d61ac8a282553aea1"]}]
2026-06-04 07:07:33 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/getUserInfo],耗时:[6]毫秒
2026-06-04 07:38:43 [XNIO-1 task-3] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/getUserInfo],参数类型[param],参数:[{"clientId":["32324a04c0175c8d61ac8a282553aea1"]}]
2026-06-04 07:38:43 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/deviceList],参数类型[param],参数:[{"clientId":["32324a04c0175c8d61ac8a282553aea1"],"pageSize":["10"],"pageNum":["1"]}]
2026-06-04 07:38:43 [XNIO-1 task-3] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/getUserInfo],耗时:[11]毫秒
2026-06-04 07:38:43 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/deviceList],耗时:[28]毫秒
2026-06-04 07:38:46 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/device/2059509304398151682],参数类型[param],参数:[{"clientId":["32324a04c0175c8d61ac8a282553aea1"]}]
2026-06-04 07:38:46 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/device/2059509304398151682],耗时:[7]毫秒
2026-06-04 07:38:51 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/getUserInfo],参数类型[param],参数:[{"clientId":["32324a04c0175c8d61ac8a282553aea1"]}]
2026-06-04 07:38:51 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/getUserInfo],耗时:[4]毫秒
2026-06-04 08:11:28 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/deviceList],无参数
2026-06-04 08:11:28 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/deviceList],耗时:[16]毫秒
2026-06-04 08:11:32 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/device/2060265891827957762],无参数
2026-06-04 08:11:32 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/device/2060265891827957762],耗时:[8]毫秒
2026-06-04 08:11:33 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/deviceList],无参数
2026-06-04 08:11:34 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/deviceList],耗时:[18]毫秒
2026-06-04 08:11:35 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/device/2060266873861324801],无参数
2026-06-04 08:11:35 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/device/2060266873861324801],耗时:[3]毫秒
2026-06-04 08:11:37 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/deviceList],无参数
2026-06-04 08:11:37 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/deviceList],耗时:[16]毫秒
2026-06-04 08:11:38 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/device/2060266816596492289],无参数
2026-06-04 08:11:38 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/device/2060266816596492289],耗时:[2]毫秒
2026-06-04 08:11:51 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[PUT /app/v1/switchDevice],参数类型[json],参数:[{"id":"2060266816596492289","workStatus":"1","durationMin":"60"}]
2026-06-04 08:11:51 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[PUT /app/v1/switchDevice],耗时:[13]毫秒
2026-06-04 08:12:04 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/deviceList],无参数
2026-06-04 08:12:04 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/deviceList],耗时:[15]毫秒
2026-06-04 08:21:57 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/deviceList],无参数
2026-06-04 08:21:57 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/deviceList],耗时:[17]毫秒
2026-06-04 08:22:06 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/deviceList],无参数
2026-06-04 08:22:06 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/deviceList],耗时:[14]毫秒
2026-06-04 08:27:53 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/deviceList],无参数
2026-06-04 08:27:53 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/deviceList],耗时:[29]毫秒
2026-06-04 10:28:49 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/deviceList],无参数
2026-06-04 10:28:49 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/deviceList],耗时:[49]毫秒
2026-06-04 10:31:13 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/deviceList],无参数
2026-06-04 10:31:13 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/deviceList],耗时:[27]毫秒
2026-06-04 10:44:03 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/deviceList],无参数
2026-06-04 10:44:03 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/deviceList],耗时:[23]毫秒
2026-06-04 10:50:27 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/deviceList],无参数
2026-06-04 10:50:27 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/deviceList],耗时:[16]毫秒
2026-06-04 10:52:28 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/deviceList],无参数
2026-06-04 10:52:28 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/deviceList],耗时:[25]毫秒
2026-06-04 10:52:47 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/deviceList],无参数
2026-06-04 10:52:47 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/deviceList],耗时:[15]毫秒
2026-06-04 10:53:33 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/deviceList],无参数
2026-06-04 10:53:33 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/deviceList],耗时:[14]毫秒
2026-06-04 11:05:23 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/deviceList],无参数
2026-06-04 11:05:23 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/deviceList],耗时:[18]毫秒
2026-06-04 11:08:20 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/deviceList],无参数
2026-06-04 11:08:20 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/deviceList],耗时:[16]毫秒
2026-06-04 11:17:17 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/deviceList],无参数
2026-06-04 11:17:17 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/deviceList],耗时:[21]毫秒
2026-06-04 11:20:07 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/deviceList],参数
2026-06-04 11:20:07 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/deviceList],耗时:[15]毫秒
2026-06-04 11:21:29 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/deviceList],无参数
2026-06-04 11:21:29 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/deviceList],耗时:[15]毫秒
2026-06-04 11:22:24 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/deviceList],参数
2026-06-04 11:22:24 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/deviceList],耗时:[16]毫秒
2026-06-04 11:23:26 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[GET /app/v1/deviceList],参数
2026-06-04 11:23:26 [XNIO-1 task-2] INFO o.d.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]结束请求 => URL[GET /app/v1/deviceList],耗时:[15]毫秒

View File

@@ -64,7 +64,11 @@
<groupId>org.dromara</groupId>
<artifactId>water-common-mail</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>water-common-mqtt</artifactId>
<version>5.6.0</version>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>water-system</artifactId>
@@ -109,6 +113,11 @@
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
<!-- skywalking 整合 logback -->
<!-- <dependency>-->

View File

@@ -66,22 +66,22 @@ public class CaptchaController {
String code = RandomUtil.randomNumbers(6);
RedisUtils.setCacheObject(key, code, Duration.ofMinutes(Constants.CAPTCHA_EXPIRATION));
if (Validator.isMobile(username)){
// 验证码模板id 自行处理 (查数据库或写死均可)
String templateId = "";
LinkedHashMap<String, String> map = new LinkedHashMap<>(1);
map.put("code", code);
SmsBlend smsBlend = SmsFactory.getSmsBlend("config1");
SmsResponse smsResponse = smsBlend.sendMessage(username, templateId, map);
if (!smsResponse.isSuccess()) {
log.error("验证码短信发送异常 => {}", smsResponse);
return R.fail(smsResponse.getData().toString());
}
}else {
emailCodeImpl(username);
}
// if (Validator.isMobile(username)){
// // 验证码模板id 自行处理 (查数据库或写死均可)
// String templateId = "SMS_333877107";
// LinkedHashMap<String, String> map = new LinkedHashMap<>(1);
// map.put("code", code);
// SmsBlend smsBlend = SmsFactory.getSmsBlend("config1");
// SmsResponse smsResponse = smsBlend.sendMessage(username, templateId, map);
// if (!smsResponse.isSuccess()) {
// log.error("验证码短信发送异常 => {}", smsResponse);
// return R.fail(smsResponse.getData().toString());
// }
// }else {
// emailCodeImpl(username);
// }
return R.ok();
return R.ok(code);
}
@@ -96,10 +96,10 @@ public class CaptchaController {
@GetMapping("/resource/sms/code")
public R<Void> smsCode(@NotBlank(message = "{user.phonenumber.not.blank}") String phonenumber) {
String key = GlobalConstants.CAPTCHA_CODE_KEY + phonenumber;
String code = RandomUtil.randomNumbers(4);
String code = RandomUtil.randomNumbers(6);
RedisUtils.setCacheObject(key, code, Duration.ofMinutes(Constants.CAPTCHA_EXPIRATION));
// 验证码模板id 自行处理 (查数据库或写死均可)
String templateId = "";
String templateId = "SMS_333877107";
LinkedHashMap<String, String> map = new LinkedHashMap<>(1);
map.put("code", code);
SmsBlend smsBlend = SmsFactory.getSmsBlend("config1");

View File

@@ -1,7 +1,7 @@
--- # 监控中心配置
spring.boot.admin.client:
# 增加客户端开关
enabled: true
enabled: false
url: http://localhost:9090/admin
instance:
service-host-type: IP
@@ -13,7 +13,7 @@ spring.boot.admin.client:
--- # snail-job 配置
snail-job:
enabled: true
enabled: false
# 需要在 SnailJob 后台组管理创建对应名称的组,然后创建任务的时候选择对应的组,才能正确分派任务
group: "water_group"
# SnailJob 接入验证令牌 详见 script/sql/ry_job.sql `sj_group_config` 表
@@ -172,10 +172,10 @@ sms:
# 框架定义的厂商名称标识,标定此配置是哪个厂商,详细请看厂商标识介绍部分
supplier: alibaba
# 有些称为accessKey有些称之为apiKey也有称为sdkKey或者appId。
access-key-id: 您的accessKey
access-key-id: LTAI5t7xHqxFKG9DwMgurvrn
# 称为accessSecret有些称之为apiSecret
access-key-secret: 您的accessKeySecret
signature: 您的短信签名
access-key-secret: nNFjR8YwNJUcMrrtdc4pkpPsHmYtfp
signature: 山东春雨润集雨节灌设备
sdk-app-id: 您的sdkAppId
config2:
# 厂商标识,标定此配置是哪个厂商,详细请看厂商标识介绍部分

View File

@@ -19,6 +19,31 @@ server:
io: 8
# 阻塞任务线程池, 当执行类似servlet请求阻塞操作, undertow会从这个线程池中取得线程,它的值设置取决于系统的负载
worker: 256
--- # mqtt配置信息
--- # mqtt配置信息
mqtt:
broker-url: ssl://service.reinkun.com:8883
username: admin
password: yukun_mqtt
client-id: dm-server-${random.int[1000,9999]}
qos: 1
keep-alive: 60
connection-timeout: 30
tls:
enabled: true
skip-verify: true
topics:
subscribe:
- /publish/+/error
- /publish/deviceInfo
- /publish/finish/schedule
- /publish/finish/key
- /publish/schedule/canceled
- /subscriber/+/schedule
- /subscriber/+/cancel
- /subscriber/+/key
publish-prefix: /water
captcha:
# 是否启用验证码校验
enable: true
@@ -150,6 +175,7 @@ mybatis-plus:
# AUTO 自增 NONE 空 INPUT 用户输入 ASSIGN_ID 雪花 ASSIGN_UUID 唯一 UUID
# 如需改为自增 需要将数据库表全部设置为自增
idType: ASSIGN_ID
sql-injector: com.example.MyLogicSqlInjector
# 数据加密
mybatis-encryptor:

View File

@@ -34,6 +34,7 @@
<module>water-common-tenant</module>
<module>water-common-websocket</module>
<module>water-common-sse</module>
<module>water-common-mqtt</module>
</modules>
<artifactId>water-common</artifactId>

View File

@@ -0,0 +1,43 @@
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.dromara</groupId>
<artifactId>water-common</artifactId>
<version>5.6.0</version>
</parent>
<artifactId>water-common-mqtt</artifactId>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.eclipse.paho</groupId>
<artifactId>org.eclipse.paho.client.mqttv3</artifactId>
<version>1.2.5</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>water-common-json</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>water-app</artifactId>
</dependency>
</dependencies>
</project>

View File

@@ -0,0 +1,94 @@
package org.dromara.mqtt;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.app.mqtt.MqttMessageDispatcher;
import org.dromara.mqtt.config.properties.MqttProperties;
import org.eclipse.paho.client.mqttv3.*;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import java.nio.charset.StandardCharsets;
@Slf4j
@AutoConfiguration
@EnableConfigurationProperties(MqttProperties.class)
@RequiredArgsConstructor
public class MqttClientManager implements InitializingBean, DisposableBean {
private final MqttProperties props;
private final MqttMessageDispatcher dispatcher;
private MqttClient client;
@Override
public void afterPropertiesSet() throws Exception {
// mqttConnect();
}
@Bean
private MqttClient mqttConnect() throws MqttException {
client = new MqttClient(props.getBrokerUrl(), props.getClientId(), new MemoryPersistence());
MqttConnectOptions options = new MqttConnectOptions();
options.setUserName(props.getUsername());
options.setPassword(props.getPassword().toCharArray());
options.setKeepAliveInterval(props.getKeepAlive());
options.setConnectionTimeout(props.getConnectionTimeout());
options.setAutomaticReconnect(true);
options.setCleanSession(false);
client.setCallback(new MqttCallback() {
@Override
public void connectionLost(Throwable cause) {
log.warn("[MQTT] 连接断开: {}", cause.getMessage());
}
@Override
public void messageArrived(String topic, MqttMessage message) {
dispatcher.dispatch(topic, new String(message.getPayload()));
}
@Override
public void deliveryComplete(IMqttDeliveryToken token) {}
});
client.connect(options);
log.info("[MQTT] 连接成功: {}", props.getBrokerUrl());
// 订阅所有配置的主题
for (String topic : props.getTopics().getSubscribe()) {
client.subscribe(topic, props.getQos());
// log.info("[MQTT] 订阅主题: {}", topic);
log.info("[MQTT] 订阅成功: {} qos={}", topic, props.getQos()); // ← 加这行
}
return client;
}
/**
* 发布消息
*/
public void publish(String topic, String payload) {
try {
MqttMessage message = new MqttMessage(payload.getBytes(StandardCharsets.UTF_8));
message.setQos(props.getQos());
message.setRetained(false);
client.publish(topic, message);
log.info("[MQTT] 发布消息 topic={} payload={}", topic, payload);
} catch (MqttException e) {
log.error("[MQTT] 发布失败 topic={}", topic, e);
}
}
@Override
public void destroy() throws Exception {
if (client != null && client.isConnected()) {
client.disconnect();
client.close();
}
}
}

View File

@@ -0,0 +1,29 @@
package org.dromara.mqtt.config.properties;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.List;
@Data
//@Component
@ConfigurationProperties(prefix = "mqtt")
public class MqttProperties {
private String brokerUrl;
private String username;
private String password;
private String clientId;
private int qos = 1;
private int keepAlive = 60;
private int connectionTimeout = 30;
private Topics topics;
@Data
public static class Topics {
private List<String> subscribe;
private String publishPrefix;
}
}

View File

@@ -0,0 +1,2 @@
org.dromara.mqtt.MqttClientManager
org.dromara.app.mqtt.MqttMessageDispatcher

View File

@@ -1,31 +1,22 @@
package org.dromara.app.controller;
import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.lang.Validator;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.crypto.digest.BCrypt;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONUtil;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.app.domain.bo.AppDeviceBo;
import org.dromara.app.domain.bo.AppScheduleBo;
import org.dromara.app.domain.vo.AppDeviceVo;
import org.dromara.app.domain.vo.AppScheduleDetailVo;
import org.dromara.app.domain.vo.AppScheduleVo;
import org.dromara.app.domain.vo.AppSchedulingDeviceVo;
import org.dromara.app.service.IAppDeviceService;
import org.dromara.app.service.IAppScheduleDetailService;
import org.dromara.app.service.IAppScheduleService;
import org.dromara.app.service.IAppSchedulingDeviceService;
import org.dromara.app.service.impl.AppScheduleDetailServiceImpl;
import org.dromara.app.domain.AppDevice;
import org.dromara.app.domain.bo.*;
import org.dromara.app.domain.vo.*;
import org.dromara.app.service.*;
import org.dromara.app.service.impl.AppScheduleServiceImpl;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.domain.model.ForgotLoginBody;
import org.dromara.common.core.domain.model.LoginUser;
import org.dromara.common.core.enums.LoginType;
import org.dromara.common.core.exception.user.UserException;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.core.validate.AddGroup;
@@ -39,7 +30,6 @@ import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.helper.DataPermissionHelper;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.tenant.helper.TenantHelper;
import org.dromara.common.web.core.BaseController;
import org.dromara.system.domain.bo.SysUserBo;
import org.dromara.system.domain.vo.SysUserVo;
@@ -48,9 +38,9 @@ import org.dromara.system.service.ISysUserService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.text.SimpleDateFormat;
import java.util.*;
@Slf4j
@RequiredArgsConstructor
@@ -65,6 +55,8 @@ public class AppController extends BaseController {
private final AppScheduleServiceImpl appScheduleServiceimpl;
private final IAppSchedulingDeviceService appSchedulingDeviceService;
private final ISysUserService userService;
private final IAppWateringLogService wateringLogService;
private final IAppWateringLogService appWateringLogService;
/**
*查询设备
@@ -73,6 +65,8 @@ public class AppController extends BaseController {
@GetMapping("/deviceList")
public TableDataInfo<AppDeviceVo> list(AppDeviceBo bo, PageQuery pageQuery) {
bo.setUserId(LoginHelper.getUserId());
pageQuery.setOrderByColumn("createTime");
pageQuery.setIsAsc("desc");
return appDeviceService.queryPageList(bo, pageQuery);
}
@@ -137,40 +131,175 @@ public class AppController extends BaseController {
}
/**
* 手动开启关闭设备
*
*/
// @SaCheckRole("appadmin")
@RepeatSubmit()
@PutMapping("/switchDevice")
public R<Void> switchDevice(@RequestBody String body) {
Map<String,String> map = JsonUtils.parseObject(body, Map.class);
try {
Long id = Long.valueOf(map.get("id"));
String status = map.get("workStatus");
String startTime = map.get("startTime");
int durationMin = Integer.valueOf(map.get("durationMin"));
//更新设备工作状态
AppDeviceBo appDeviceBo = new AppDeviceBo();
appDeviceBo.setId(id);
appDeviceBo.setWorkStatus(status);
Boolean flag = appDeviceService.updateByBo(appDeviceBo);
if (flag){
//todo 给设备发送开始浇水信息
// 记录信息到历史表
AppWateringLogBo appWateringLog = new AppWateringLogBo();
appWateringLog.setDeviceId(id);
appWateringLog.setUserId(LoginHelper.getUserId());
appWateringLog.setDurationMin(durationMin+"");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
if (StringUtils.isNotEmpty(startTime)){
Date date = sdf.parse(startTime);
appWateringLog.setStartTime(date);
long time = date.getTime()+durationMin*60000L;
Date endTime = new Date(time);
appWateringLog.setEndTime(endTime);
}
appWateringLog.setTriggerType("1");
appWateringLog.setCreateTime(new Date());
appWateringLog.setScheduleId(1L);
wateringLogService.insertByBo(appWateringLog);
}
return toAjax(flag);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* 排程关联设备查询
* @param
* @return
*/
@GetMapping("/scheduleDeviceList")
public List<AppDeviceVo> scheduleDeviceList(AppDeviceBo appDeviceBo, AppScheduleBo appScheduleBo) {
@GetMapping("/scheduleDeviceList/{scheduleId}")
public R<Map<String,Object>> scheduleDeviceList( @PathVariable Long scheduleId) {
Map retMap = new HashMap();
//所有设备列表
AppDeviceBo appDeviceBo = new AppDeviceBo();
appDeviceBo.setUserId(LoginHelper.getUserId());
List<AppDeviceVo> appDeviceVos = appDeviceService.queryList(appDeviceBo);
List<AppDeviceVo> AppDeviceVoList = new ArrayList();
List<AppDeviceVo> appDeviceVoList = new ArrayList();
AppSchedulingDeviceBo schedulingDeviceBo = new AppSchedulingDeviceBo();
schedulingDeviceBo.setScheduleId(scheduleId);
for (AppDeviceVo appDeviceVo:appDeviceVos){
//查询设备日程冲突
List list = appScheduleServiceimpl.checkConflict(appDeviceVo.getId(), appScheduleBo);
if (list.size()==0){
AppDeviceVoList.add(appDeviceVo);
List<AppSchedulingDeviceVo> appSchedulingDeviceVos = appSchedulingDeviceService.queryByDeviveId(appDeviceVo.getId());
if(appSchedulingDeviceVos.size() == 0){
appDeviceVoList.add(appDeviceVo);
}
}
return AppDeviceVoList;
retMap.put("deviceList", appDeviceVoList);
// if (appDeviceVoList.size()==0){
// retMap.put("deviceList", appDeviceVos);
// }
return R.ok(retMap);
/** //排程信息
AppScheduleVo appScheduleVo = appScheduleService.queryById(scheduleId);
if (ObjectUtil.isNotNull(appScheduleVo)&&"1".equals(appScheduleVo.getStatus())){
for (AppDeviceVo appDeviceVo:appDeviceVos){
//查询设备日程冲突
List list = appScheduleServiceimpl.checkConflict(appDeviceVo.getId(), appScheduleVo);
if (list.size()==0){
AppDeviceVoList.add(appDeviceVo);
}
// retMap.put("conflict", list);
}
retMap.put("devicelist", AppDeviceVoList);
}else {
retMap.put("devicelist", appDeviceVos);
// retMap.put("conflict", new ArrayList<>());
return R.ok(retMap);
}
return R.ok(retMap); **/
}
/**
*绑定排程跟设备
*/
@RepeatSubmit()
@PostMapping("/addScheduleDevice")
public R<Void> addScheduleDevice( @RequestBody String body) {
try {
Map<String, Object> map = JsonUtils.parseObject(body, Map.class);
Long scheduleId = Long.valueOf(map.get("scheduleId").toString());
List<String> deviceIds= (List<String>) map.get("deviceIds");
for (String deviceId:deviceIds){
AppSchedulingDeviceBo schedulingDeviceBo = new AppSchedulingDeviceBo();
schedulingDeviceBo.setDeviceId(Long.valueOf(deviceId));
schedulingDeviceBo.setScheduleId(scheduleId);
appSchedulingDeviceService.insertByBo(schedulingDeviceBo);
}
return R.ok();
} catch (RuntimeException e) {
throw new RuntimeException(e);
}
}
/**
* 删除排程与设备绑定
* @param scheduleId,deviceId
* @return
*/
@Log(title = "排程与设备关联", businessType = BusinessType.DELETE)
@DeleteMapping("/deleteScheduleDevice")
public R<Void> deleteScheduleDevice(@NotEmpty(message = "主键不能为空")
@RequestParam String scheduleId, @RequestParam String deviceId) {
return toAjax(appSchedulingDeviceService.deleteWithValidByschedulingIds2Ids(Long.valueOf(scheduleId),Long.valueOf(deviceId)));
}
/**
* 查询排程列表
*/
@GetMapping("/schedulelist")
public TableDataInfo<AppScheduleVo> schedulelist(AppScheduleBo bo, PageQuery pageQuery) {
bo.setUserId(LoginHelper.getUserId());
pageQuery.setOrderByColumn("createTime");
pageQuery.setIsAsc("desc");
return appScheduleService.queryPageList(bo, pageQuery);
}
/**
* 新增排程
*
*/
@SaCheckPermission("app:schedule:add")
@Log(title = "日程排列", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping("/addschedule")
public R<Void> addSchedule(@Validated(AddGroup.class) @RequestBody AppScheduleBo bo) {
public R<AppScheduleVo> addSchedule(@Validated(AddGroup.class) @RequestBody AppScheduleBo bo) {
try {
return toAjax(appScheduleService.insertByBo(bo));
bo.setCreateTime(new Date());
AppScheduleVo appScheduleVo = appScheduleService.insertByBo(bo);
if (ObjectUtil.isNotNull(appScheduleVo)){
return R.ok(appScheduleVo);
}
return R.fail();
// return toAjax(appScheduleService.insertByBo(bo));
} catch (RuntimeException e) {
throw new RuntimeException(e);
}
@@ -186,27 +315,71 @@ public class AppController extends BaseController {
public R<AppScheduleVo> getScheduleInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
AppScheduleVo appScheduleVo = appScheduleService.queryById(id);
if (ObjectUtil.isNotNull(appScheduleVo)){
List<AppScheduleDetailVo> list = appScheduleDetailService.queryByScheduleIdByStatus(appScheduleVo.getId());
List<AppScheduleDetailVo> list = appScheduleDetailService.queryByScheduleId(appScheduleVo.getId());
AppSchedulingDeviceBo appSchedulingDeviceBo = new AppSchedulingDeviceBo();
appSchedulingDeviceBo.setScheduleId(appScheduleVo.getId());
List<AppSchedulingDeviceVo> appSchedulingDeviceVos = appSchedulingDeviceService.queryList(appSchedulingDeviceBo);
List deviceList = new ArrayList();
for (AppSchedulingDeviceVo appSchedulingDeviceVo:appSchedulingDeviceVos){
AppDeviceVo appDeviceVo = appDeviceService.queryById(appSchedulingDeviceVo.getDeviceId());
deviceList.add(appDeviceVo);
}
List detailList = new ArrayList();
appScheduleVo.setDetails(list);
for (AppScheduleDetailVo detail:list){
List timeSlots = new ArrayList();
JSONArray mapArray = JSONUtil.parseArray(detail.getTimeData());
for (Object timeSlot:mapArray){
timeSlots.add(timeSlot);
}
return R.ok(appScheduleVo);
Map map = new HashMap();
map.put("id",detail.getId() );
map.put("weekday",detail.getWeekday() );
map.put("timeData",timeSlots );
map.put("triggerType",detail.getTriggerType() );
map.put("status",detail.getStatus() );
detailList.add(map);
}
appScheduleVo.setDetails(detailList);
appScheduleVo.setDeviceIds(deviceList);
return R.ok(appScheduleVo);
}
return R.fail(appScheduleVo);
}
/**
* 修改排程状态
* @param
* @return
*/
@PutMapping("/editScheduleStatus")
public R<Void> editScheduleStatus(@NotNull(message = "主键不能为空")
@RequestBody AppScheduleBo bo) {
return toAjax(appScheduleService.updateStatusByBo(bo));
}
/**
* 修改日程排列
*/
@SaCheckPermission("app:schedule:edit")
@Log(title = "日程排列", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping("/updataschedule")
public R<Void> editSchedule(@Validated(EditGroup.class) @RequestBody AppScheduleBo bo) {
List list = appScheduleService.updateByBo(bo);
if (list.size()==0){
return R.ok();
public R<Object> editSchedule(@Validated(EditGroup.class) @RequestBody AppScheduleBo bo) {
Map<String, Object> map = appScheduleService.updateByBo(bo);
if (Boolean.valueOf(map.get("flag").toString())){
return R.ok(map.get("appSchedule"));
}else {
return R.fail(list.toString());
return R.fail();
}
}
@@ -217,7 +390,6 @@ public class AppController extends BaseController {
*
* @param ids 主键串
*/
@SaCheckPermission("app:schedule:remove")
@Log(title = "日程排列", businessType = BusinessType.DELETE)
@DeleteMapping("/deleteschedule/{ids}")
public R<Void> removeSchedule(@NotEmpty(message = "主键不能为空")
@@ -225,6 +397,85 @@ public class AppController extends BaseController {
return toAjax(appScheduleService.deleteWithValidByIds(List.of(ids), true));
}
/**
* 历史
* 查询浇水记录列表
*/
@GetMapping("/waterLogList")
public TableDataInfo<AppWateringLogVo> list(AppWateringLogBo bo, PageQuery pageQuery) {
bo.setUserId(LoginHelper.getUserId());
pageQuery.setOrderByColumn("createTime");
pageQuery.setIsAsc("desc");
TableDataInfo<AppWateringLogVo> appWateringLogVoTableDataInfo = appWateringLogService.queryPageList(bo, pageQuery);
AppDeviceBo appDeviceBo = new AppDeviceBo();
appDeviceBo.setUserId(LoginHelper.getUserId());
List<AppDeviceVo> appDeviceVos = appDeviceService.queryList(appDeviceBo);
List l = new ArrayList<>();
for (AppWateringLogVo vo : appWateringLogVoTableDataInfo.getRows()){
for(AppDeviceVo appDeviceVo:appDeviceVos){
if (appDeviceVo.getId().equals(vo.getDeviceId())){
vo.setDeviceName(appDeviceVo.getDeviceName());
vo.setDeviceNo(appDeviceVo.getDeviceNo());
}
}
// AppDeviceVo appDeviceVo = appDeviceService.queryById(vo.getDeviceId());
vo.setTriggerType(vo.getTriggerType().equals("0")?"排程":"手动");
l.add(vo);
}
appWateringLogVoTableDataInfo.setRows(l);
return appWateringLogVoTableDataInfo;
}
/**
* 删除浇水记录
*
* @param ids 主键串
*/
@Log(title = "浇水记录", businessType = BusinessType.DELETE)
@DeleteMapping("/waterLog/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(appWateringLogService.deleteWithValidByIds(List.of(ids), true));
}
/**
* 数据统计
*/
@GetMapping("/dataStatistics")
public R<Map> dataStatistics() {
Map map = new HashMap();
try {
Long userId = LoginHelper.getUserId();
//总浇水次数
Long count = appWateringLogService.queryCount(userId);
//本月浇水次数
Long monCount = appWateringLogService.queryByMonCount(userId);
//本周浇水次数
Long weekCount = appWateringLogService.queryByWeekCount(userId);
//排程浇水次数
Long schedule = appWateringLogService.queryByTriggerTypeCount(userId, "0");
//手动浇水次数
Long manualNum = appWateringLogService.queryByTriggerTypeCount(userId, "1");
//总浇水时间
Long allTime = appWateringLogService.queryByTotalWateringTime(userId);
//平均浇水时间
Long averageTime = allTime/count;
map.put("count",count);
map.put("monCount",monCount);
map.put("weekCount",weekCount);
map.put("schedule",schedule);
map.put("manualNum",manualNum);
map.put("allTime",allTime);
map.put("averageTime",averageTime);
return R.ok(map);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* 获取用户信息
@@ -290,12 +541,12 @@ public class AppController extends BaseController {
if(Validator.isEmail(bo.getUserName())){
boolean checkPhoneFlag = userService.checkEmailUnique(bo);
if (checkPhoneFlag){
if (!checkPhoneFlag){
throw new UserException("user.email.not.username");
}
}else if (Validator.isMobile(bo.getUserName())){
boolean checkPhoneFlag = userService.checkPhoneUnique(bo);
if (checkPhoneFlag){
if (!checkPhoneFlag){
throw new UserException("user.mobile.phone.number.not.username");
}
}

View File

@@ -55,6 +55,11 @@ public class AppDevice extends BaseEntity {
*/
private String status;
/**
* 工作状态 1-工作中 0-休息
*/
private String workStatus;
/**
* 电量
*/
@@ -98,8 +103,8 @@ public class AppDevice extends BaseEntity {
/**
* 删除标志0代表存在 1代表删除
*/
@TableLogic
private String delFlag;
//@TableLogic
//private String delFlag;
/**
* 到期时间

View File

@@ -47,8 +47,8 @@ public class AppSchedule extends BaseEntity {
private String status;
private Date createdTime;
private Date createTime;
private List<AppScheduleDetail> details;
//private List<AppScheduleDetail> details;
}

View File

@@ -1,16 +1,17 @@
package org.dromara.app.domain;
import cn.hutool.json.JSON;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serial;
import java.util.List;
import java.util.Map;
/**
* 排程详情对象 app_schedule_detail
@@ -20,7 +21,7 @@ import java.io.Serial;
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("app_schedule_detail")
@TableName(value ="app_schedule_detail")
public class AppScheduleDetail extends BaseEntity {
@Serial
@@ -45,12 +46,16 @@ public class AppScheduleDetail extends BaseEntity {
/**
* 开始时间
*/
private LocalTime startTime;
private String timeData;
private String endTime;
/**
* 持续时间(分钟)
*/
private Integer durationMin;
@TableField(value = "duration_min", typeHandler = JacksonTypeHandler.class)
private String durationMin;
/**
* 浇水区域
@@ -62,5 +67,7 @@ public class AppScheduleDetail extends BaseEntity {
*/
private String triggerType;
private String status;
}

View File

@@ -24,7 +24,7 @@ public class AppSchedulingDevice extends BaseEntity {
/**
* 排程id
*/
private Long schedulingId;
private Long scheduleId;
/**
* 设备id

View File

@@ -39,6 +39,8 @@ public class AppWateringLog extends BaseEntity {
*/
private Long deviceId;
private String deviceNo;
/**
* 关联排程
*/
@@ -72,7 +74,7 @@ public class AppWateringLog extends BaseEntity {
/**
* 创建时间
*/
private Date createdTime;
private Date createTime;
}

View File

@@ -54,6 +54,10 @@ public class AppDeviceBo extends BaseEntity {
* 状态 1-工作中 0-离线 2-待机 3-故障
*/
private String status;
/**
* 工作状态 1-工作中 0-休息
*/
private String workStatus;
/**
* 电量

View File

@@ -1,5 +1,6 @@
package org.dromara.app.domain.bo;
import cn.hutool.json.JSON;
import org.dromara.app.domain.AppSchedule;
import org.dromara.app.domain.AppScheduleDetail;
import org.dromara.common.mybatis.core.domain.BaseEntity;
@@ -13,6 +14,7 @@ import jakarta.validation.constraints.*;
import java.time.LocalTime;
import java.util.Date;
import java.util.List;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonFormat;
@@ -56,23 +58,30 @@ public class AppScheduleBo extends BaseEntity {
// 内部类
@Data
public static class AppScheduleDetail extends org.dromara.app.domain.AppScheduleDetail {
public static class AppScheduleDetail {
private Long id;
@NotNull(message = "星期不能为空")
@Min(1) @Max(7)
private Integer weekday;
@NotNull(message = "开始时间不能为空")
private LocalTime startTime;
@NotNull(message = "持续时间不能为空")
//@Min(1) @Max(120)
private Integer durationMin;
private List<TimeSlot> timeData;
//@NotNull(message = "浇水区域不能为空")
private Integer zones; // 位掩码
private String triggerType = "0";
private String status = "0";
}
@Data
public static class TimeSlot {
private String startTime;
private Integer durationMin;
}

View File

@@ -1,5 +1,6 @@
package org.dromara.app.domain.bo;
import cn.hutool.json.JSON;
import org.dromara.app.domain.AppScheduleDetail;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
@@ -11,6 +12,9 @@ import jakarta.validation.constraints.*;
import java.time.LocalTime;
import java.util.Date;
import java.util.List;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonFormat;
/**
@@ -43,7 +47,9 @@ public class AppScheduleDetailBo extends BaseEntity {
/**
* 开始时间
*/
private LocalTime startTime;
private String timeData;
private String endTime;
/**
* 持续时间(分钟)

View File

@@ -24,7 +24,7 @@ public class AppSchedulingDeviceBo extends BaseEntity {
* 排程id
*/
@NotNull(message = "排程id不能为空", groups = { AddGroup.class, EditGroup.class })
private Long schedulingId;
private Long scheduleId;
/**
* 设备id

View File

@@ -38,6 +38,8 @@ public class AppWateringLogBo extends BaseEntity {
*/
private Long deviceId;
private String deviceNo;
/**
* 关联排程
*/
@@ -71,7 +73,7 @@ public class AppWateringLogBo extends BaseEntity {
/**
* 创建时间
*/
private Date createdTime;
private Date createTime;
}

View File

@@ -66,7 +66,10 @@ public class AppDeviceVo implements Serializable {
*/
@ExcelProperty(value = "状态 1-工作中 0-离线 2-待机 3-故障")
private String status;
/**
* 工作状态 1-工作中 0-休息
*/
private String workStatus;
/**
* 电量
*/

View File

@@ -2,6 +2,8 @@ package org.dromara.app.domain.vo;
import java.time.LocalTime;
import java.util.Date;
import cn.hutool.json.JSON;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.app.domain.AppScheduleDetail;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
@@ -14,7 +16,8 @@ import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
@@ -53,13 +56,14 @@ public class AppScheduleDetailVo implements Serializable {
* 开始时间
*/
@ExcelProperty(value = "开始时间")
private LocalTime startTime;
private String timeData;
private String endTime;
/**
* 持续时间(分钟)
*/
@ExcelProperty(value = "持续时间(分钟)")
private Integer durationMin;
private String durationMin;
/**
* 浇水区域
@@ -73,5 +77,12 @@ public class AppScheduleDetailVo implements Serializable {
@ExcelProperty(value = "方式 0-排程 1-手动 ")
private String triggerType;
private String status;
@Data
public static class TimeSlot {
private String startTime;
private Integer durationMin;
}
}

View File

@@ -53,7 +53,7 @@ public class AppScheduleVo implements Serializable {
/**
* 设备ids
*/
private List<Long> deviceIds;
private List deviceIds;
/**
* 状态 0-关闭 1 开启
*/

View File

@@ -1,5 +1,6 @@
package org.dromara.app.domain.vo;
import org.dromara.app.domain.AppSchedule;
import org.dromara.app.domain.AppSchedulingDevice;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
@@ -32,7 +33,7 @@ public class AppSchedulingDeviceVo implements Serializable {
* 排程id
*/
@ExcelProperty(value = "排程id")
private Long schedulingId;
private Long scheduleId;
/**
* 设备id
@@ -40,5 +41,6 @@ public class AppSchedulingDeviceVo implements Serializable {
@ExcelProperty(value = "设备id")
private Long deviceId;
private AppScheduleVo schedule;
}

View File

@@ -48,6 +48,7 @@ public class AppWateringLogVo implements Serializable {
@ExcelProperty(value = "设备ID")
private Long deviceId;
private String deviceNo;
/**
* 关联排程
*/
@@ -83,12 +84,13 @@ public class AppWateringLogVo implements Serializable {
*/
@ExcelProperty(value = "0-排程 1-手动")
private String triggerType;
private String deviceName;
/**
* 创建时间
*/
@ExcelProperty(value = "创建时间")
private Date createdTime;
private Date createTime;
}

View File

@@ -0,0 +1,26 @@
package org.dromara.app.handler;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
@Slf4j
@Component
@RequiredArgsConstructor
public class DeviceDataHandler {
public void handle(String deviceId, String payload) {
try {
// DeviceDataDTO dto = JsonUtils.parseObject(payload, DeviceDataDTO.class);
// dto.setDeviceId(deviceId);
// dto.setReportTime(LocalDateTime.now());
// deviceDataService.saveDeviceData(dto);
log.info("[MQTT] 设备数据入库 deviceId={}", deviceId);
} catch (Exception e) {
log.error("[MQTT] 设备数据解析失败 deviceId={} payload={}", deviceId, payload, e);
}
}
}

View File

@@ -0,0 +1,29 @@
package org.dromara.app.handler;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.json.utils.JsonUtils;
import org.springframework.stereotype.Component;
import java.util.Map;
//设备在线状态
@Slf4j
@Component
@RequiredArgsConstructor
public class DeviceStatusHandler {
public void handle(String deviceNo, String payload) {
try {
Map<String,Object> dto = JsonUtils.parseObject(payload, Map.class);
// 更新设备在线状态
// log.info("[MQTT] 设备状态更新 deviceId={} status={}", deviceId, dto.getStatus());
} catch (Exception e) {
log.error("[MQTT] 设备状态处理失败 deviceId={}", deviceNo, e);
}
}
}

View File

@@ -0,0 +1,26 @@
package org.dromara.app.handler;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.json.utils.JsonUtils;
import org.springframework.stereotype.Component;
import java.util.Map;
//设备推送异常告警入库
@Slf4j
@Component
@RequiredArgsConstructor
public class ErromesHandler {
public void handle(String deviceNo, String payload) {
try {
Map<String,Object> dto = JsonUtils.parseObject(payload, Map.class);
log.info("[MQTT] 设备状态发送异常 deviceNo={}", deviceNo);
} catch (Exception e) {
log.error("[MQTT] 设备状态处理失败 deviceNo={}", deviceNo, e);
}
}
}

View File

@@ -1,5 +1,7 @@
package org.dromara.app.mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.dromara.app.domain.AppWateringLog;
import org.dromara.app.domain.vo.AppWateringLogVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
@@ -12,4 +14,26 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
*/
public interface AppWateringLogMapper extends BaseMapperPlus<AppWateringLog, AppWateringLogVo> {
@Select("SELECT count(id) FROM app_watering_log\n" +
"WHERE user_id=${userId} AND YEAR(create_time) = YEAR(CURDATE()) AND MONTH(create_time) = MONTH(CURDATE());")
Long selectByMonCout(@Param("userId") Long userId);
@Select("SELECT COUNT(id) \n" +
"FROM app_watering_log \n" +
"WHERE user_id=${userId} AND WEEK(create_time) = WEEK(CURDATE());")
Long selectByWeekCount(@Param("userId") Long userId);
@Select("SELECT COUNT(id) \n" +
"FROM app_watering_log \n" +
"WHERE user_id=${userId} AND trigger_type =${triggerType}")
Long selectByTriggerTypeCount(Long userId, String triggerType);
@Select("SELECT SUM(duration_min)\n" +
"FROM app_watering_log \n" +
"WHERE user_id=${userId}")
Long selectByTotalWateringTime(Long userId);
}

View File

@@ -0,0 +1,42 @@
package org.dromara.app.mqtt;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.app.handler.DeviceDataHandler;
import org.dromara.app.handler.DeviceStatusHandler;
import org.dromara.app.handler.ErromesHandler;
import org.springframework.stereotype.Component;
@Slf4j
@Component
@RequiredArgsConstructor
public class MqttMessageDispatcher {
private final DeviceDataHandler dataHandler;
private final DeviceStatusHandler statusHandler;
private final ErromesHandler erroHandler;
// 路由规则:匹配 topic 分发到对应 Handler
private static final String DATA_PATTERN = "/water/([^/]+)/data";
private static final String STATUS_PATTERN = "/water/([^/]+)/status";
private static final String ERROMES_PATTERN = "/water/([^/]+)/erromes";
public void dispatch(String topic, String payload) {
log.debug("[MQTT] 收到消息 topic={} 内容: {}", topic,payload);
if (topic.matches(DATA_PATTERN)) {
String deviceNo = extract(topic, DATA_PATTERN);
dataHandler.handle(deviceNo, payload);
} else if (topic.matches(STATUS_PATTERN)) {
String deviceNo = extract(topic, STATUS_PATTERN);
statusHandler.handle(deviceNo, payload);
}else if (topic.matches(ERROMES_PATTERN)) {
String deviceNo = extract(topic, STATUS_PATTERN);
erroHandler.handle(deviceNo, payload);
} else {
log.warn("[MQTT] 未知 topic: {} 内容: {}", topic,payload);
}
}
private String extract(String topic, String pattern) {
return topic.replaceAll(pattern, "$1");
}
}

View File

@@ -66,5 +66,5 @@ public interface IAppScheduleDetailService {
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
List<AppScheduleDetailVo> queryByScheduleId(Long id);
List<AppScheduleDetailVo> queryByScheduleIdByStatus(Long id);
}

View File

@@ -1,12 +1,16 @@
package org.dromara.app.service;
import jakarta.validation.constraints.NotNull;
import org.dromara.app.domain.vo.AppDeviceVo;
import org.dromara.app.domain.vo.AppScheduleVo;
import org.dromara.app.domain.bo.AppScheduleBo;
import org.dromara.app.domain.vo.AppSchedulingDeviceVo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import java.util.Collection;
import java.util.List;
import java.util.Map;
/**
* 日程排列Service接口
@@ -47,7 +51,7 @@ public interface IAppScheduleService {
* @param bo 日程排列
* @return 是否新增成功
*/
Boolean insertByBo(AppScheduleBo bo);
AppScheduleVo insertByBo(AppScheduleBo bo);
/**
* 修改日程排列
@@ -55,7 +59,7 @@ public interface IAppScheduleService {
* @param bo 日程排列
* @return 是否修改成功
*/
List updateByBo(AppScheduleBo bo);
Map<String,Object> updateByBo(AppScheduleBo bo);
/**
* 校验并批量删除日程排列信息
@@ -65,4 +69,6 @@ public interface IAppScheduleService {
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
Boolean updateStatusByBo(@NotNull(message = "主键不能为空") AppScheduleBo bo);
}

View File

@@ -1,5 +1,6 @@
package org.dromara.app.service;
import jakarta.validation.constraints.NotEmpty;
import org.dromara.app.domain.vo.AppSchedulingDeviceVo;
import org.dromara.app.domain.bo.AppSchedulingDeviceBo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
@@ -65,4 +66,17 @@ public interface IAppSchedulingDeviceService {
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 查找某一设备的所有日程
* @param deviceId
* @return
*/
List<AppSchedulingDeviceVo> findByDeviceId(Long deviceId);
Boolean deleteWithValidByschedulingIds2Ids(@NotEmpty(message = "主键不能为空") Long schedulingId, Long deviceId);
AppSchedulingDeviceVo queryById2DeviveId(Long scheduleId, Long id);
List<AppSchedulingDeviceVo> queryByDeviveId(Long id);
}

View File

@@ -65,4 +65,16 @@ public interface IAppWateringLogService {
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
Long queryCount(Long userId);
Long queryByMonCount(Long userId);
Long queryByWeekCount(Long userId);
Long queryByTriggerTypeCount(Long userId, String triggerType);
Long queryByTotalWateringTime(Long userId);
}

View File

@@ -1,5 +1,8 @@
package org.dromara.app.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.dromara.app.domain.AppSchedulingDevice;
import org.dromara.app.mapper.AppSchedulingDeviceMapper;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.annotation.DataColumn;
@@ -11,12 +14,14 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.satoken.utils.LoginHelper;
import org.springframework.stereotype.Service;
import org.dromara.app.domain.bo.AppDeviceBo;
import org.dromara.app.domain.vo.AppDeviceVo;
import org.dromara.app.domain.AppDevice;
import org.dromara.app.mapper.AppDeviceMapper;
import org.dromara.app.service.IAppDeviceService;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Map;
@@ -35,6 +40,7 @@ Service业务层处理
public class AppDeviceServiceImpl implements IAppDeviceService {
private final AppDeviceMapper baseMapper;
private final AppSchedulingDeviceMapper schedulingDeviceMapper;
/**
* 查询设备信息
@@ -150,10 +156,18 @@ public class AppDeviceServiceImpl implements IAppDeviceService {
* @return 是否删除成功
*/
@Override
@Transactional
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
boolean flag = baseMapper.deleteByIds(ids) > 0;
if (flag){
for (Long id :ids){
schedulingDeviceMapper.delete(new QueryWrapper<AppSchedulingDevice>().eq("device_id",id));
}
}
return flag;
}
}

View File

@@ -1,5 +1,7 @@
package org.dromara.app.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
@@ -76,8 +78,8 @@ public class AppScheduleDetailServiceImpl implements IAppScheduleDetailService {
lqw.orderByAsc(AppScheduleDetail::getId);
lqw.eq(bo.getScheduleId() != null, AppScheduleDetail::getScheduleId, bo.getScheduleId());
lqw.eq(StringUtils.isNotBlank(bo.getWeekday()), AppScheduleDetail::getWeekday, bo.getWeekday());
lqw.eq(bo.getStartTime() != null, AppScheduleDetail::getStartTime, bo.getStartTime());
lqw.eq(StringUtils.isNotBlank(bo.getDurationMin()), AppScheduleDetail::getDurationMin, bo.getDurationMin());
lqw.eq(bo.getTimeData() != null, AppScheduleDetail::getTimeData, bo.getTimeData());
lqw.eq(ObjectUtil.isNotNull(bo.getDurationMin()), AppScheduleDetail::getDurationMin, bo.getDurationMin());
lqw.eq(StringUtils.isNotBlank(bo.getZones()), AppScheduleDetail::getZones, bo.getZones());
lqw.eq(StringUtils.isNotBlank(bo.getTriggerType()), AppScheduleDetail::getTriggerType, bo.getTriggerType());
return lqw;
@@ -136,7 +138,8 @@ public class AppScheduleDetailServiceImpl implements IAppScheduleDetailService {
}
@Override
public List<AppScheduleDetailVo> queryByScheduleId(Long id) {
return List.of();
public List<AppScheduleDetailVo> queryByScheduleIdByStatus(Long id) {
return baseMapper.selectVoList(new QueryWrapper<AppScheduleDetail>().eq("schedule_id",id));
}
}

View File

@@ -3,10 +3,14 @@ package org.dromara.app.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.dromara.app.domain.AppSchedulingDevice;
import org.dromara.app.domain.vo.AppDeviceVo;
import org.dromara.app.domain.vo.AppScheduleDetailVo;
import org.dromara.app.domain.vo.AppSchedulingDeviceVo;
import org.dromara.app.mapper.AppScheduleDetailMapper;
import org.dromara.app.mapper.AppSchedulingDeviceMapper;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.json.utils.JsonUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -14,6 +18,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.satoken.utils.LoginHelper;
import org.springframework.stereotype.Service;
import org.dromara.app.domain.bo.AppScheduleBo;
import org.dromara.app.domain.vo.AppScheduleVo;
@@ -24,6 +29,7 @@ import org.dromara.app.service.IAppScheduleService;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalTime;
import java.time.ZoneId;
import java.util.*;
/**
@@ -84,6 +90,7 @@ public class AppScheduleServiceImpl implements IAppScheduleService {
lqw.orderByAsc(AppSchedule::getId);
lqw.like(StringUtils.isNotBlank(bo.getName()), AppSchedule::getName, bo.getName());
lqw.eq(StringUtils.isNotBlank(bo.getStatus()), AppSchedule::getStatus, bo.getStatus());
lqw.eq(bo.getUserId() != null, AppSchedule::getUserId, bo.getUserId());
return lqw;
}
@@ -95,37 +102,54 @@ public class AppScheduleServiceImpl implements IAppScheduleService {
*/
@Override
@Transactional
public Boolean insertByBo(AppScheduleBo bo) {
public AppScheduleVo insertByBo(AppScheduleBo bo) {
AppSchedule add = MapstructUtils.convert(bo, AppSchedule.class);
add.setUserId(LoginHelper.getUserId());
validEntityBeforeSave(add);
//创建排程
boolean flag = baseMapper.insert(add) > 0;
//创建详情
for (AppScheduleBo.AppScheduleDetail item:bo.getDetails()){
AppScheduleDetail detail = new AppScheduleDetail();
detail.setWeekday(item.getWeekday());
detail.setStartTime(item.getStartTime());
detail.setDurationMin(item.getDurationMin());
detail.setZones(item.getZones());
detail.setTriggerType(item.getTriggerType());
scheduleDetailMapper.insert(detail);
}
//绑定设备
for (Long deviceId:bo.getDeviceIds()){
//查询设备日程冲突
List list = checkConflict(deviceId, bo);
if (list.size()!=0){
return false;
if (flag){
AppScheduleVo vo = MapstructUtils.convert(add, AppScheduleVo.class);
List list = new ArrayList<>();
//创建详情
for (AppScheduleBo.AppScheduleDetail item:bo.getDetails()){
AppScheduleDetail detail = new AppScheduleDetail();
detail.setScheduleId(add.getId());
detail.setWeekday(item.getWeekday());
if (ObjectUtil.isNotNull(item.getTimeData())){
detail.setTimeData(JsonUtils.toJsonString(item.getTimeData()));
// detail.setEndTime(item.getStartTime().plusMinutes(item.getDurationMin()));
}
detail.setZones(item.getZones());
detail.setTriggerType(item.getTriggerType());
detail.setStatus(item.getStatus());
scheduleDetailMapper.insert(detail);
List timeSlots = new ArrayList();
for (AppScheduleBo.TimeSlot timeSlot:item.getTimeData()){
timeSlots.add(timeSlot);
}
Map map = new HashMap();
map.put("id",detail.getId() );
map.put("weekday",detail.getWeekday() );
map.put("timeData",timeSlots );
map.put("triggerType",detail.getTriggerType() );
map.put("status",detail.getStatus() );
map.put("createTime",detail.getCreateTime() );
list.add(map);
}
//没冲突设备绑定日程
AppSchedulingDevice appSchedulingDevice = new AppSchedulingDevice();
appSchedulingDevice.setDeviceId(deviceId);
appSchedulingDevice.setSchedulingId(add.getId());
appSchedulingDevice.setCreateTime(new Date());
schedulingDeviceMapper.insert(appSchedulingDevice);
vo.setDetails(list);
return vo;
}
return flag;
return new AppScheduleVo();
}
@Override
public Boolean updateStatusByBo(AppScheduleBo bo) {
AppSchedule update = MapstructUtils.convert(bo, AppSchedule.class);
return baseMapper.updateById(update)>0;
}
/**
@@ -135,36 +159,47 @@ public class AppScheduleServiceImpl implements IAppScheduleService {
* @return 是否修改成功
*/
@Override
public List updateByBo(AppScheduleBo bo) {
@Transactional
public Map<String,Object> updateByBo(AppScheduleBo bo) {
AppSchedule update = MapstructUtils.convert(bo, AppSchedule.class);
validEntityBeforeSave(update);
//修改详情
for (AppScheduleBo.AppScheduleDetail item:bo.getDetails()){
AppScheduleDetail detail = new AppScheduleDetail();
detail.setWeekday(item.getWeekday());
detail.setStartTime(item.getStartTime());
detail.setDurationMin(item.getDurationMin());
detail.setZones(item.getZones());
detail.setTriggerType(item.getTriggerType());
scheduleDetailMapper.updateById(detail);
}
//绑定设备
for (Long deviceId:bo.getDeviceIds()){
//查询设备日程冲突
List list = checkConflict(deviceId, bo);
if (list.size()!=0){
//有冲突
return list;
Map<String,Object> repMap = new HashMap();
Boolean flag = baseMapper.updateById(update)>0;
repMap.put("flag", flag);
repMap.put("list", new ArrayList<>());
repMap.put("appSchedule", "");
if (flag){
AppScheduleVo appScheduleVo = baseMapper.selectVoById(update.getId());
//修改详情
List detailList = new ArrayList<>();
for (AppScheduleBo.AppScheduleDetail item:bo.getDetails()){
AppScheduleDetail detail = new AppScheduleDetail();
detail.setWeekday(item.getWeekday());
detail.setId(item.getId());
detail.setTimeData(JsonUtils.toJsonString(item.getTimeData()));
detail.setZones(item.getZones());
detail.setTriggerType(item.getTriggerType());
detail.setStatus(item.getStatus());
scheduleDetailMapper.updateById(detail);
List timeSlots = new ArrayList();
for (AppScheduleBo.TimeSlot timeSlot:item.getTimeData()){
timeSlots.add(timeSlot);
}
Map map = new HashMap();
map.put("id",detail.getId() );
map.put("weekday",detail.getWeekday() );
map.put("timeData",timeSlots );
map.put("triggerType",detail.getTriggerType() );
map.put("status",detail.getStatus() );
map.put("createTime",detail.getCreateTime() );
detailList.add(map);
}
//没冲突设备绑定日程
AppSchedulingDevice appSchedulingDevice = new AppSchedulingDevice();
appSchedulingDevice.setDeviceId(deviceId);
appSchedulingDevice.setSchedulingId(bo.getId());
appSchedulingDevice.setCreateTime(new Date());
appScheduleVo.setDetails(detailList);
repMap.put("appSchedule", appScheduleVo);
return repMap;
}
return new ArrayList();
return repMap;
}
/**
@@ -182,44 +217,55 @@ public class AppScheduleServiceImpl implements IAppScheduleService {
* @return 是否删除成功
*/
@Override
@Transactional
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
boolean flag = false;
try {
flag = baseMapper.deleteByIds(ids) > 0;
if (flag){
for (Long id :ids){
schedulingDeviceMapper.delete(new QueryWrapper<AppSchedulingDevice>().eq("schedule_id",id ));
scheduleDetailMapper.delete(new QueryWrapper<AppScheduleDetail>().eq("schedule_id", id));
}
}
return flag;
} catch (Exception e) {
throw new RuntimeException(e);
}
return baseMapper.deleteByIds(ids) > 0;
}
/**
* 检查新日程与设备已绑定日程是否存在时间冲突
*/
public List checkConflict(Long deviceId, AppScheduleBo newSchedule) {
public List checkConflict(Long deviceId, AppScheduleVo newSchedule) {
// 1. 获取该设备所有已绑定的日程
List<AppSchedulingDevice> existingBindings = schedulingDeviceMapper.selectList(new QueryWrapper<AppSchedulingDevice>().eq("device_id", deviceId));
List conflicts = new ArrayList<>();
//新日程的详情列
List<AppScheduleDetail> scheduleDetails = scheduleDetailMapper.selectList(new QueryWrapper<AppScheduleDetail>().eq("schedule_id", newSchedule.getId()));
// 2. 对新日程的每一天,与已存在的每一天逐一比较
for (AppScheduleDetail newDay : newSchedule.getDetails()) {
//关闭的排程直接跳出
if ("0".equals(newSchedule.getStatus())) break;
for (AppScheduleDetail newDay : scheduleDetails) {
//此设备日程
for (AppSchedulingDevice existing : existingBindings){
AppScheduleVo appScheduleVo = baseMapper.selectVoById(existing.getSchedulingId());
AppScheduleVo appScheduleVo = baseMapper.selectVoById(existing.getScheduleId());
if (ObjectUtil.isNotNull(appScheduleVo) && !"0".equals(appScheduleVo.getStatus())){
List<AppScheduleDetail> details = scheduleDetailMapper.selectList(new QueryWrapper<AppScheduleDetail>().eq("scheduling_id", existing.getSchedulingId()));
List<AppScheduleDetail> details = scheduleDetailMapper.selectList(new QueryWrapper<AppScheduleDetail>().eq("schedule_id", existing.getScheduleId()));
for (AppScheduleDetail existingDay:details ){
// 3. 同一天才检查时间重叠
if (newDay.getWeekday() == existingDay.getWeekday()) {
if (timeOverlap(newDay, existingDay)) {
Map map = new HashMap();
map.put("scheduleName", appScheduleVo.getName());
map.put("newDay", newDay);
map.put("existingDay", existingDay);
conflicts.add(map);
}
// if (timeOverlap(newDay, existingDay)) {
//
// Map map = new HashMap();
// map.put("scheduleName", appScheduleVo.getName());
// map.put("newDay", newDay);
// map.put("existingDay", existingDay);
// conflicts.add(map);
// }
}
}
}
@@ -232,13 +278,13 @@ public class AppScheduleServiceImpl implements IAppScheduleService {
* 判断两段时间是否重叠
* 重叠条件start1 < end2 && start2 < end1
*/
public boolean timeOverlap(AppScheduleDetail a, AppScheduleDetail b) {
LocalTime bendTime = b.getStartTime().plusMinutes(b.getDurationMin());
LocalTime aendTime = a.getStartTime().plusMinutes(a.getDurationMin());
return a.getStartTime().isBefore(bendTime)
&& b.getStartTime().isBefore(aendTime);
}
// public boolean timeOverlap(AppScheduleDetail a, AppScheduleDetail b) {
// LocalTime bendTime = b.getStartTime().plusMinutes(b.getDurationMin());
// LocalTime aendTime = a.getStartTime().plusMinutes(a.getDurationMin());
//
// return a.getStartTime().isBefore(bendTime)
// && b.getStartTime().isBefore(aendTime);
// }
}

View File

@@ -1,7 +1,7 @@
package org.dromara.app.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -73,7 +73,7 @@ public class AppSchedulingDeviceServiceImpl implements IAppSchedulingDeviceServi
private LambdaQueryWrapper<AppSchedulingDevice> buildQueryWrapper(AppSchedulingDeviceBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<AppSchedulingDevice> lqw = Wrappers.lambdaQuery();
lqw.eq(bo.getSchedulingId() != null, AppSchedulingDevice::getSchedulingId, bo.getSchedulingId());
lqw.eq(bo.getScheduleId() != null, AppSchedulingDevice::getScheduleId, bo.getScheduleId());
lqw.eq(bo.getDeviceId() != null, AppSchedulingDevice::getDeviceId, bo.getDeviceId());
return lqw;
}
@@ -90,7 +90,7 @@ public class AppSchedulingDeviceServiceImpl implements IAppSchedulingDeviceServi
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setSchedulingId(add.getSchedulingId());
bo.setScheduleId(add.getScheduleId());
}
return flag;
}
@@ -129,4 +129,25 @@ public class AppSchedulingDeviceServiceImpl implements IAppSchedulingDeviceServi
}
return baseMapper.deleteByIds(ids) > 0;
}
@Override
public AppSchedulingDeviceVo queryById2DeviveId(Long scheduleId, Long id) {
return baseMapper.selectVoOne(new QueryWrapper<AppSchedulingDevice>().eq("schedule_id",scheduleId).eq("device_id",id));
}
@Override
public List<AppSchedulingDeviceVo> queryByDeviveId(Long id) {
return baseMapper.selectVoList(new QueryWrapper<AppSchedulingDevice>().eq("device_id",id));
}
@Override
public Boolean deleteWithValidByschedulingIds2Ids(Long schedulingId, Long deviceId) {
return baseMapper.delete(new QueryWrapper<AppSchedulingDevice>().eq("schedule_id",schedulingId).eq("device_id",deviceId)) > 0;
}
@Override
public List<AppSchedulingDeviceVo> findByDeviceId(Long deviceId) {
return baseMapper.selectVoList(new QueryWrapper<AppSchedulingDevice>().eq("device_id",deviceId));
}
}

View File

@@ -1,5 +1,6 @@
package org.dromara.app.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
@@ -9,6 +10,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.system.domain.SysConfig;
import org.springframework.stereotype.Service;
import org.dromara.app.domain.bo.AppWateringLogBo;
import org.dromara.app.domain.vo.AppWateringLogVo;
@@ -82,7 +84,10 @@ public class AppWateringLogServiceImpl implements IAppWateringLogService {
lqw.eq(StringUtils.isNotBlank(bo.getDurationMin()), AppWateringLog::getDurationMin, bo.getDurationMin());
lqw.eq(StringUtils.isNotBlank(bo.getZones()), AppWateringLog::getZones, bo.getZones());
lqw.eq(StringUtils.isNotBlank(bo.getTriggerType()), AppWateringLog::getTriggerType, bo.getTriggerType());
lqw.eq(bo.getCreatedTime() != null, AppWateringLog::getCreatedTime, bo.getCreatedTime());
// lqw.eq(bo.getCreateTime() != null, AppWateringLog::getCreateTime, bo.getCreateTime());
lqw.between(params.get("beginTime") != null && params.get("endTime") != null,
AppWateringLog::getCreateTime, params.get("beginTime"), params.get("endTime"));
return lqw;
}
@@ -137,4 +142,32 @@ public class AppWateringLogServiceImpl implements IAppWateringLogService {
}
return baseMapper.deleteByIds(ids) > 0;
}
@Override
public Long queryCount(Long userId) {
return baseMapper.selectCount(new QueryWrapper<AppWateringLog>().eq("user_id",userId));
}
@Override
public Long queryByMonCount(Long userId) {
return baseMapper.selectByMonCout(userId);
}
@Override
public Long queryByWeekCount(Long userId) {
return baseMapper.selectByWeekCount(userId);
}
@Override
public Long queryByTriggerTypeCount(Long userId, String triggerType) {
return baseMapper.selectByTriggerTypeCount(userId,triggerType);
}
@Override
public Long queryByTotalWateringTime(Long userId) {
return baseMapper.selectByTotalWateringTime(userId);
}
}

View File

@@ -115,6 +115,8 @@ public class SysUserBo extends BaseEntity {
*/
private String excludeUserIds;
public SysUserBo(Long userId) {
this.userId = userId;
}