diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..3003493 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,11 @@ +# EditorConfig is awesome: https://EditorConfig.org + +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +trim_trailing_whitespace = true +end_of_line = lf +insert_final_newline = true diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..359bb53 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# 默认忽略的文件 +/shelf/ +/workspace.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..b65a9fb --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/dbnavigator.xml b/.idea/dbnavigator.xml new file mode 100644 index 0000000..113759e --- /dev/null +++ b/.idea/dbnavigator.xml @@ -0,0 +1,414 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..942f3a2 --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..146ab09 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..efef92e --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml new file mode 100644 index 0000000..e1eea1d --- /dev/null +++ b/.idea/kotlinc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..d31b37a --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.mvn/wrapper/MavenWrapperDownloader.java b/.mvn/wrapper/MavenWrapperDownloader.java new file mode 100644 index 0000000..b901097 --- /dev/null +++ b/.mvn/wrapper/MavenWrapperDownloader.java @@ -0,0 +1,117 @@ +/* + * Copyright 2007-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import java.net.*; +import java.io.*; +import java.nio.channels.*; +import java.util.Properties; + +public class MavenWrapperDownloader { + + private static final String WRAPPER_VERSION = "0.5.6"; + /** + * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. + */ + private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/" + + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar"; + + /** + * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to + * use instead of the default one. + */ + private static final String MAVEN_WRAPPER_PROPERTIES_PATH = + ".mvn/wrapper/maven-wrapper.properties"; + + /** + * Path where the maven-wrapper.jar will be saved to. + */ + private static final String MAVEN_WRAPPER_JAR_PATH = + ".mvn/wrapper/maven-wrapper.jar"; + + /** + * Name of the property which should be used to override the default download url for the wrapper. + */ + private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; + + public static void main(String args[]) { + System.out.println("- Downloader started"); + File baseDirectory = new File(args[0]); + System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); + + // If the maven-wrapper.properties exists, read it and check if it contains a custom + // wrapperUrl parameter. + File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); + String url = DEFAULT_DOWNLOAD_URL; + if(mavenWrapperPropertyFile.exists()) { + FileInputStream mavenWrapperPropertyFileInputStream = null; + try { + mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); + Properties mavenWrapperProperties = new Properties(); + mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); + url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); + } catch (IOException e) { + System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); + } finally { + try { + if(mavenWrapperPropertyFileInputStream != null) { + mavenWrapperPropertyFileInputStream.close(); + } + } catch (IOException e) { + // Ignore ... + } + } + } + System.out.println("- Downloading from: " + url); + + File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); + if(!outputFile.getParentFile().exists()) { + if(!outputFile.getParentFile().mkdirs()) { + System.out.println( + "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'"); + } + } + System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); + try { + downloadFileFromURL(url, outputFile); + System.out.println("Done"); + System.exit(0); + } catch (Throwable e) { + System.out.println("- Error downloading"); + e.printStackTrace(); + System.exit(1); + } + } + + private static void downloadFileFromURL(String urlString, File destination) throws Exception { + if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) { + String username = System.getenv("MVNW_USERNAME"); + char[] password = System.getenv("MVNW_PASSWORD").toCharArray(); + Authenticator.setDefault(new Authenticator() { + @Override + protected PasswordAuthentication getPasswordAuthentication() { + return new PasswordAuthentication(username, password); + } + }); + } + URL website = new URL(urlString); + ReadableByteChannel rbc; + rbc = Channels.newChannel(website.openStream()); + FileOutputStream fos = new FileOutputStream(destination); + fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); + fos.close(); + rbc.close(); + } + +} diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000..8c79a83 --- /dev/null +++ b/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,18 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.4/apache-maven-3.8.4-bin.zip +wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar diff --git a/README.adoc b/README.adoc new file mode 100644 index 0000000..75593b4 --- /dev/null +++ b/README.adoc @@ -0,0 +1,31 @@ += Dahua_video + +image:https://img.shields.io/badge/vert.x-4.3.4-purple.svg[link="https://vertx.io"] + +This application was generated using http://start.vertx.io + +== Building + +To launch your tests: +``` +./mvnw clean test +``` + +To package your application: +``` +./mvnw clean package +``` + +To run your application: +``` +./mvnw clean compile exec:java +``` + +== Help + +* https://vertx.io/docs/[Vert.x Documentation] +* https://stackoverflow.com/questions/tagged/vert.x?sort=newest&pageSize=15[Vert.x Stack Overflow] +* https://groups.google.com/forum/?fromgroups#!forum/vertx[Vert.x User Group] +* https://gitter.im/eclipse-vertx/vertx-users[Vert.x Gitter] + + diff --git a/config.json b/config.json new file mode 100644 index 0000000..ec25ec3 --- /dev/null +++ b/config.json @@ -0,0 +1,9 @@ +{ + "port": 8883, + "sqlite_jdbcurl": "jdbc:sqlite:hisense_dh.db", + "sqlite_user": "root", + "sqlite_password": "Hisense2022", + "host": "192.168.124.25", + "memberList": [], + "recroot": "/mnts/record/" +} diff --git a/hisense_dh.db b/hisense_dh.db new file mode 100644 index 0000000..7e6b5c3 Binary files /dev/null and b/hisense_dh.db differ diff --git a/logs/app-error.log.20221116-1 b/logs/app-error.log.20221116-1 new file mode 100644 index 0000000..57d23ab --- /dev/null +++ b/logs/app-error.log.20221116-1 @@ -0,0 +1,60 @@ +2022-11-16 13:51:00,002 ERROR [com.hisense.dahua_video.util.MonitorSessionUtil]-[vert.x-eventloop-thread-16] 创建会话失败 +io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection timed out: no further information: /10.132.191.3:8314 +Caused by: java.net.ConnectException: Connection timed out: no further information + at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) ~[?:?] + at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:779) ~[?:?] + at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:337) ~[netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:334) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:776) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at java.lang.Thread.run(Thread.java:834) [?:?] +2022-11-16 14:32:04,512 ERROR [com.hisense.dahua_video.util.MonitorSessionUtil]-[vert.x-eventloop-thread-21] 创建会话失败 +io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection timed out: no further information: /10.132.191.3:8314 +Caused by: java.net.ConnectException: Connection timed out: no further information + at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) ~[?:?] + at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:779) ~[?:?] + at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:337) ~[netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:334) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:776) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at java.lang.Thread.run(Thread.java:834) [?:?] +2022-11-16 14:45:26,918 ERROR [com.hisense.dahua_video.util.MonitorSessionUtil]-[vert.x-eventloop-thread-16] 创建会话失败 +io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection timed out: no further information: /10.132.191.3:8314 +Caused by: java.net.ConnectException: Connection timed out: no further information + at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) ~[?:?] + at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:779) ~[?:?] + at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:337) ~[netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:334) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:776) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at java.lang.Thread.run(Thread.java:834) [?:?] +2022-11-16 18:18:08,782 ERROR [com.hisense.dahua_video.util.MonitorSessionUtil]-[vert.x-eventloop-thread-19] 创建会话失败 +io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection timed out: no further information: /10.132.191.3:8314 +Caused by: java.net.ConnectException: Connection timed out: no further information + at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) ~[?:?] + at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:779) ~[?:?] + at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:337) ~[netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:334) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:776) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at java.lang.Thread.run(Thread.java:834) [?:?] diff --git a/logs/app-error.log.20221117-1 b/logs/app-error.log.20221117-1 new file mode 100644 index 0000000..784861c --- /dev/null +++ b/logs/app-error.log.20221117-1 @@ -0,0 +1,45 @@ +2022-11-17 17:31:25,468 ERROR [com.hisense.dahua_video.util.MonitorSessionUtil]-[vert.x-eventloop-thread-16] 创建会话失败 +io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection timed out: no further information: /10.132.191.3:8314 +Caused by: java.net.ConnectException: Connection timed out: no further information + at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) ~[?:?] + at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:779) ~[?:?] + at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:337) ~[netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:334) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:776) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at java.lang.Thread.run(Thread.java:834) [?:?] +2022-11-17 17:36:53,874 ERROR [com.hisense.dahua_video.util.MonitorSessionUtil]-[vert.x-eventloop-thread-24] 创建会话失败 +io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection timed out: no further information: /10.132.191.3:8314 +Caused by: java.net.ConnectException: Connection timed out: no further information + at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) ~[?:?] + at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:779) ~[?:?] + at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:337) ~[netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:334) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:776) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at java.lang.Thread.run(Thread.java:834) [?:?] +2022-11-17 17:48:35,955 ERROR [com.hisense.dahua_video.util.MonitorSessionUtil]-[vert.x-eventloop-thread-16] 创建会话失败 +io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection timed out: no further information: /10.132.191.3:8314 +Caused by: java.net.ConnectException: Connection timed out: no further information + at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) ~[?:?] + at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:779) ~[?:?] + at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:337) ~[netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:334) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:776) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at java.lang.Thread.run(Thread.java:834) [?:?] diff --git a/logs/app-error.log.20221118-1 b/logs/app-error.log.20221118-1 new file mode 100644 index 0000000..8d55c87 --- /dev/null +++ b/logs/app-error.log.20221118-1 @@ -0,0 +1,85 @@ +2022-11-18 16:16:18,193 ERROR [io.vertx.core.impl.ContextBase]-[vert.x-eventloop-thread-1] Unhandled exception +org.jetbrains.exposed.exceptions.ExposedSQLException: java.sql.SQLException: Query returns results + at org.jetbrains.exposed.sql.statements.Statement.executeIn$exposed_core(Statement.kt:64) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.Transaction.exec(Transaction.kt:140) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.Transaction.exec(Transaction.kt:126) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.Transaction.exec(Transaction.kt:108) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.Transaction.exec(Transaction.kt:94) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.Transaction.exec$default(Transaction.kt:93) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.SchemaUtils.execStatements(SchemaUtils.kt:251) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.SchemaUtils.createMissingTablesAndColumns(SchemaUtils.kt:321) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.SchemaUtils.createMissingTablesAndColumns$default(SchemaUtils.kt:306) ~[exposed-core-0.40.1.jar:?] + at com.hisense.dahua_video.MainVerticle$exposed$1.invoke(MainVerticle.kt:160) ~[classes/:?] + at com.hisense.dahua_video.MainVerticle$exposed$1.invoke(MainVerticle.kt:157) ~[classes/:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.inTopLevelTransaction$run(ThreadLocalTransactionManager.kt:214) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.access$inTopLevelTransaction$run(ThreadLocalTransactionManager.kt:1) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt$inTopLevelTransaction$1.invoke(ThreadLocalTransactionManager.kt:240) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.keepAndRestoreTransactionRefAfterRun(ThreadLocalTransactionManager.kt:248) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.inTopLevelTransaction(ThreadLocalTransactionManager.kt:239) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt$transaction$1.invoke(ThreadLocalTransactionManager.kt:189) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.keepAndRestoreTransactionRefAfterRun(ThreadLocalTransactionManager.kt:248) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.transaction(ThreadLocalTransactionManager.kt:159) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.transaction(ThreadLocalTransactionManager.kt:146) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.transaction$default(ThreadLocalTransactionManager.kt:145) ~[exposed-core-0.40.1.jar:?] + at com.hisense.dahua_video.MainVerticle.exposed(MainVerticle.kt:157) ~[classes/:?] + at com.hisense.dahua_video.MainVerticle.start$lambda$4(MainVerticle.kt:51) ~[classes/:?] + at io.vertx.core.impl.future.FutureImpl$3.onSuccess(FutureImpl.java:141) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl$ListenerArray.onSuccess(FutureImpl.java:262) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Mapping.onSuccess(Mapping.java:40) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Mapping.onSuccess(Mapping.java:40) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.CompositeFutureImpl.trySucceed(CompositeFutureImpl.java:163) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.CompositeFutureImpl.lambda$all$0(CompositeFutureImpl.java:38) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl$3.onSuccess(FutureImpl.java:141) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Composition$1.onSuccess(Composition.java:62) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.SucceededFuture.addListener(SucceededFuture.java:88) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Composition.onSuccess(Composition.java:43) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Composition$1.onSuccess(Composition.java:62) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.addListener(FutureImpl.java:196) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.PromiseImpl.addListener(PromiseImpl.java:23) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Composition.onSuccess(Composition.java:43) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl$ListenerArray.onSuccess(FutureImpl.java:262) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.lambda$emitSuccess$0(FutureBase.java:54) ~[vertx-core-4.3.4.jar:4.3.4] + at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at java.lang.Thread.run(Thread.java:834) [?:?] +Caused by: java.sql.SQLException: Query returns results + at org.sqlite.jdbc3.JDBC3PreparedStatement.executeLargeUpdate(JDBC3PreparedStatement.java:106) ~[sqlite-jdbc-3.39.4.0.jar:?] + at org.sqlite.jdbc3.JDBC3PreparedStatement.executeUpdate(JDBC3PreparedStatement.java:98) ~[sqlite-jdbc-3.39.4.0.jar:?] + at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeUpdate(ProxyPreparedStatement.java:61) ~[HikariCP-4.0.3.jar:?] + at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeUpdate(HikariProxyPreparedStatement.java) ~[HikariCP-4.0.3.jar:?] + at org.jetbrains.exposed.sql.statements.jdbc.JdbcPreparedStatementImpl.executeUpdate(JdbcPreparedStatementImpl.kt:26) ~[exposed-jdbc-0.40.1.jar:?] + at org.jetbrains.exposed.sql.Transaction$exec$2.executeInternal(Transaction.kt:113) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.statements.Statement.executeIn$exposed_core(Statement.kt:62) ~[exposed-core-0.40.1.jar:?] + ... 58 more +2022-11-18 16:17:57,609 ERROR [com.hisense.dahua_video.util.MonitorSessionUtil]-[vert.x-eventloop-thread-17] 创建会话失败 +io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection timed out: no further information: /10.132.191.3:8314 +Caused by: java.net.ConnectException: Connection timed out: no further information + at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) ~[?:?] + at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:779) ~[?:?] + at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:337) ~[netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:334) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:776) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at java.lang.Thread.run(Thread.java:834) [?:?] diff --git a/logs/app.log.20221116-1 b/logs/app.log.20221116-1 new file mode 100644 index 0000000..c0e0e8b --- /dev/null +++ b/logs/app.log.20221116-1 @@ -0,0 +1,818 @@ +2022-11-16 13:50:36,325 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 开始创表2022-11-16T13:50:36.324702100 +2022-11-16 13:50:36,353 INFO [com.zaxxer.hikari.HikariDataSource]-[vert.x-eventloop-thread-1] HikariPool-1 - Starting... +2022-11-16 13:50:37,259 INFO [com.zaxxer.hikari.HikariDataSource]-[vert.x-eventloop-thread-1] HikariPool-1 - Start completed. +2022-11-16 13:50:37,293 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 连接完成2022-11-16T13:50:37.293113 +2022-11-16 13:50:37,443 INFO [Exposed]-[vert.x-eventloop-thread-1] Preparing create tables statements took 0ms +2022-11-16 13:50:37,444 INFO [Exposed]-[vert.x-eventloop-thread-1] Executing create tables statements took 1ms +2022-11-16 13:50:37,448 INFO [Exposed]-[vert.x-eventloop-thread-1] Extracting table columns took 4ms +2022-11-16 13:50:37,449 INFO [Exposed]-[vert.x-eventloop-thread-1] Preparing alter table statements took 5ms +2022-11-16 13:50:37,449 INFO [Exposed]-[vert.x-eventloop-thread-1] Executing alter table statements took 0ms +2022-11-16 13:50:37,486 INFO [Exposed]-[vert.x-eventloop-thread-1] Index on table 'sys_monitor_user' differs only in name: in db sys_monitor_user_userName -> in mapping sys_monitor_user_userName_unique +2022-11-16 13:50:37,487 INFO [Exposed]-[vert.x-eventloop-thread-1] Index on table 'sys_user' differs only in name: in db sys_user_userName -> in mapping sys_user_userName_unique +2022-11-16 13:50:37,487 INFO [Exposed]-[vert.x-eventloop-thread-1] Checking mapping consistence took 38ms +2022-11-16 13:50:37,488 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 创表成功2022-11-16T13:50:37.488557600 +2022-11-16 13:50:37,544 WARN [io.vertx.core.impl.VertxImpl]-[vert.x-eventloop-thread-1] You're already on a Vert.x context, are you sure you want to create a new Vertx instance? +2022-11-16 13:50:37,562 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 无集群配置,进行单节点部署! +2022-11-16 13:50:37,562 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] vertx.isNativeTransportEnabled:false +2022-11-16 13:50:37,563 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 截图根目录:/mnts/record/\ +2022-11-16 13:50:37,618 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-31] 部署 SqlFactoryVerticle 成功! +2022-11-16 13:50:37,736 INFO [com.hisense.dahua_video.verticle.MonitorVerticle]-[vert.x-eventloop-thread-16] monitorSessionUtil 创建成功! +2022-11-16 13:50:37,736 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-31] 部署 MonitorVerticle 成功! +2022-11-16 13:50:37,884 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-1] http 服务监听端口: 8883 +2022-11-16 13:50:37,884 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-13] http 服务监听端口: 8883 +2022-11-16 13:50:37,986 INFO [com.hisense.dahua_video.util.MonitorSessionUtil]-[vert.x-eventloop-thread-16] authorize:{"userName":"ynszdz","password":"Admin@123","monitorDomain":"http://10.132.191.3:8314","id":1} +2022-11-16 13:50:38,296 INFO [com.hisense.dahua_video.util.MonitorSessionUtil]-[vert.x-eventloop-thread-16] domain: 10.132.191.3 port:8314 +2022-11-16 13:50:38,741 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-1] 开放管理员后台 +2022-11-16 13:50:38,741 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-13] 开放管理员后台 +2022-11-16 13:50:38,742 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-6] http 服务监听端口: 8883 +2022-11-16 13:50:38,742 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-10] http 服务监听端口: 8883 +2022-11-16 13:50:38,742 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-15] http 服务监听端口: 8883 +2022-11-16 13:50:38,743 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-0] http 服务监听端口: 8883 +2022-11-16 13:50:38,743 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-5] http 服务监听端口: 8883 +2022-11-16 13:50:38,743 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-4] http 服务监听端口: 8883 +2022-11-16 13:50:38,743 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-11] http 服务监听端口: 8883 +2022-11-16 13:50:38,744 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-7] http 服务监听端口: 8883 +2022-11-16 13:50:38,745 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-3] http 服务监听端口: 8883 +2022-11-16 13:50:38,745 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-2] http 服务监听端口: 8883 +2022-11-16 13:50:38,745 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-14] http 服务监听端口: 8883 +2022-11-16 13:50:38,745 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-12] http 服务监听端口: 8883 +2022-11-16 13:50:38,745 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-8] http 服务监听端口: 8883 +2022-11-16 13:50:38,746 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-5] 开放管理员后台 +2022-11-16 13:50:38,746 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-10] 开放管理员后台 +2022-11-16 13:50:38,746 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-0] 开放管理员后台 +2022-11-16 13:50:38,746 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-15] 开放管理员后台 +2022-11-16 13:50:38,746 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-6] 开放管理员后台 +2022-11-16 13:50:38,746 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-12] 开放管理员后台 +2022-11-16 13:50:38,746 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-7] 开放管理员后台 +2022-11-16 13:50:38,746 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-31] 部署 WebAPIVerticle 成功! +2022-11-16 13:50:38,746 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-3] 开放管理员后台 +2022-11-16 13:50:38,746 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-8] 开放管理员后台 +2022-11-16 13:50:38,746 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-9] http 服务监听端口: 8883 +2022-11-16 13:50:38,746 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-4] 开放管理员后台 +2022-11-16 13:50:38,746 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-11] 开放管理员后台 +2022-11-16 13:50:38,746 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-2] 开放管理员后台 +2022-11-16 13:50:38,746 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-14] 开放管理员后台 +2022-11-16 13:50:38,747 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-9] 开放管理员后台 +2022-11-16 13:51:00,002 ERROR [com.hisense.dahua_video.util.MonitorSessionUtil]-[vert.x-eventloop-thread-16] 创建会话失败 +io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection timed out: no further information: /10.132.191.3:8314 +Caused by: java.net.ConnectException: Connection timed out: no further information + at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) ~[?:?] + at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:779) ~[?:?] + at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:337) ~[netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:334) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:776) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at java.lang.Thread.run(Thread.java:834) [?:?] +2022-11-16 14:31:37,819 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 开始创表2022-11-16T14:31:37.817809800 +2022-11-16 14:31:37,845 INFO [com.zaxxer.hikari.HikariDataSource]-[vert.x-eventloop-thread-1] HikariPool-1 - Starting... +2022-11-16 14:31:40,038 WARN [io.vertx.core.impl.BlockedThreadChecker]-[vertx-blocked-thread-checker] Thread Thread[vert.x-eventloop-thread-1,5,main] has been blocked for 2455 ms, time limit is 2000 ms +2022-11-16 14:31:41,040 WARN [io.vertx.core.impl.BlockedThreadChecker]-[vertx-blocked-thread-checker] Thread Thread[vert.x-eventloop-thread-1,5,main] has been blocked for 3456 ms, time limit is 2000 ms +2022-11-16 14:31:42,039 WARN [io.vertx.core.impl.BlockedThreadChecker]-[vertx-blocked-thread-checker] Thread Thread[vert.x-eventloop-thread-1,5,main] has been blocked for 4456 ms, time limit is 2000 ms +2022-11-16 14:31:42,269 INFO [com.zaxxer.hikari.HikariDataSource]-[vert.x-eventloop-thread-1] HikariPool-1 - Start completed. +2022-11-16 14:31:42,318 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 连接完成2022-11-16T14:31:42.318776 +2022-11-16 14:31:42,622 INFO [Exposed]-[vert.x-eventloop-thread-1] Preparing create tables statements took 1ms +2022-11-16 14:31:42,622 INFO [Exposed]-[vert.x-eventloop-thread-1] Executing create tables statements took 0ms +2022-11-16 14:31:42,627 INFO [Exposed]-[vert.x-eventloop-thread-1] Extracting table columns took 5ms +2022-11-16 14:31:42,627 INFO [Exposed]-[vert.x-eventloop-thread-1] Preparing alter table statements took 5ms +2022-11-16 14:31:42,627 INFO [Exposed]-[vert.x-eventloop-thread-1] Executing alter table statements took 0ms +2022-11-16 14:31:42,675 INFO [Exposed]-[vert.x-eventloop-thread-1] Index on table 'sys_monitor_user' differs only in name: in db sys_monitor_user_userName -> in mapping sys_monitor_user_userName_unique +2022-11-16 14:31:42,676 INFO [Exposed]-[vert.x-eventloop-thread-1] Index on table 'sys_user' differs only in name: in db sys_user_userName -> in mapping sys_user_userName_unique +2022-11-16 14:31:42,676 INFO [Exposed]-[vert.x-eventloop-thread-1] Index on table 'sys_organization' differs only in name: in db sys_organization_org_id -> in mapping sys_organization_org_id_unique +2022-11-16 14:31:42,676 INFO [Exposed]-[vert.x-eventloop-thread-1] Checking mapping consistence took 48ms +2022-11-16 14:31:42,677 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 创表成功2022-11-16T14:31:42.677816600 +2022-11-16 14:31:42,815 WARN [io.vertx.core.impl.VertxImpl]-[vert.x-eventloop-thread-1] You're already on a Vert.x context, are you sure you want to create a new Vertx instance? +2022-11-16 14:31:42,833 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 无集群配置,进行单节点部署! +2022-11-16 14:31:42,833 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] vertx.isNativeTransportEnabled:false +2022-11-16 14:31:42,834 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 截图根目录:/mnts/record/\ +2022-11-16 14:31:42,953 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-31] 部署 SqlFactoryVerticle 成功! +2022-11-16 14:31:43,004 INFO [com.hisense.dahua_video.verticle.MonitorVerticle]-[vert.x-eventloop-thread-21] monitorSessionUtil 创建成功! +2022-11-16 14:31:43,005 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-31] 部署 MonitorVerticle 成功! +2022-11-16 14:31:43,166 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-10] http 服务监听端口: 8883 +2022-11-16 14:31:43,166 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-5] http 服务监听端口: 8883 +2022-11-16 14:31:43,166 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-15] http 服务监听端口: 8883 +2022-11-16 14:31:43,166 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-13] http 服务监听端口: 8883 +2022-11-16 14:31:43,392 INFO [com.hisense.dahua_video.util.MonitorSessionUtil]-[vert.x-eventloop-thread-21] authorize:{"userName":"ynszdz","password":"Admin@123","monitorDomain":"http://10.132.191.3:8314","id":1} +2022-11-16 14:31:43,396 INFO [com.hisense.dahua_video.util.MonitorSessionUtil]-[vert.x-eventloop-thread-21] domain: 10.132.191.3 port:8314 +2022-11-16 14:31:43,454 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-10] 开放管理员后台 +2022-11-16 14:31:43,454 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-5] 开放管理员后台 +2022-11-16 14:31:43,454 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-13] 开放管理员后台 +2022-11-16 14:31:43,454 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-15] 开放管理员后台 +2022-11-16 14:31:43,456 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-7] http 服务监听端口: 8883 +2022-11-16 14:31:43,456 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-1] http 服务监听端口: 8883 +2022-11-16 14:31:43,456 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-2] http 服务监听端口: 8883 +2022-11-16 14:31:43,456 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-0] http 服务监听端口: 8883 +2022-11-16 14:31:43,456 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-6] http 服务监听端口: 8883 +2022-11-16 14:31:43,457 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-12] http 服务监听端口: 8883 +2022-11-16 14:31:43,457 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-8] http 服务监听端口: 8883 +2022-11-16 14:31:43,457 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-3] http 服务监听端口: 8883 +2022-11-16 14:31:43,458 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-4] http 服务监听端口: 8883 +2022-11-16 14:31:43,459 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-14] http 服务监听端口: 8883 +2022-11-16 14:31:43,459 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-11] http 服务监听端口: 8883 +2022-11-16 14:31:43,459 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-6] 开放管理员后台 +2022-11-16 14:31:43,459 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-7] 开放管理员后台 +2022-11-16 14:31:43,459 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-2] 开放管理员后台 +2022-11-16 14:31:43,459 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-0] 开放管理员后台 +2022-11-16 14:31:43,459 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-12] 开放管理员后台 +2022-11-16 14:31:43,459 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-1] 开放管理员后台 +2022-11-16 14:31:43,459 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-3] 开放管理员后台 +2022-11-16 14:31:43,459 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-8] 开放管理员后台 +2022-11-16 14:31:43,459 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-9] http 服务监听端口: 8883 +2022-11-16 14:31:43,459 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-14] 开放管理员后台 +2022-11-16 14:31:43,460 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-4] 开放管理员后台 +2022-11-16 14:31:43,460 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-31] 部署 WebAPIVerticle 成功! +2022-11-16 14:31:43,460 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-11] 开放管理员后台 +2022-11-16 14:31:43,460 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-9] 开放管理员后台 +2022-11-16 14:32:04,512 ERROR [com.hisense.dahua_video.util.MonitorSessionUtil]-[vert.x-eventloop-thread-21] 创建会话失败 +io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection timed out: no further information: /10.132.191.3:8314 +Caused by: java.net.ConnectException: Connection timed out: no further information + at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) ~[?:?] + at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:779) ~[?:?] + at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:337) ~[netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:334) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:776) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at java.lang.Thread.run(Thread.java:834) [?:?] +2022-11-16 14:45:02,640 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 开始创表2022-11-16T14:45:02.639073500 +2022-11-16 14:45:02,680 INFO [com.zaxxer.hikari.HikariDataSource]-[vert.x-eventloop-thread-1] HikariPool-1 - Starting... +2022-11-16 14:45:03,225 INFO [com.zaxxer.hikari.HikariDataSource]-[vert.x-eventloop-thread-1] HikariPool-1 - Start completed. +2022-11-16 14:45:03,373 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 连接完成2022-11-16T14:45:03.373111100 +2022-11-16 14:45:03,774 INFO [Exposed]-[vert.x-eventloop-thread-1] Preparing create tables statements took 0ms +2022-11-16 14:45:03,774 INFO [Exposed]-[vert.x-eventloop-thread-1] Executing create tables statements took 0ms +2022-11-16 14:45:03,785 INFO [Exposed]-[vert.x-eventloop-thread-1] Extracting table columns took 11ms +2022-11-16 14:45:03,786 INFO [Exposed]-[vert.x-eventloop-thread-1] Preparing alter table statements took 12ms +2022-11-16 14:45:03,786 INFO [Exposed]-[vert.x-eventloop-thread-1] Executing alter table statements took 0ms +2022-11-16 14:45:03,831 INFO [Exposed]-[vert.x-eventloop-thread-1] Index on table 'sys_monitor_user' differs only in name: in db sys_monitor_user_userName -> in mapping sys_monitor_user_userName_unique +2022-11-16 14:45:03,832 INFO [Exposed]-[vert.x-eventloop-thread-1] Index on table 'sys_user' differs only in name: in db sys_user_userName -> in mapping sys_user_userName_unique +2022-11-16 14:45:03,832 INFO [Exposed]-[vert.x-eventloop-thread-1] Index on table 'sys_organization' differs only in name: in db sys_organization_org_id -> in mapping sys_organization_org_id_unique +2022-11-16 14:45:03,832 INFO [Exposed]-[vert.x-eventloop-thread-1] Checking mapping consistence took 46ms +2022-11-16 14:45:03,832 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 创表成功2022-11-16T14:45:03.832882 +2022-11-16 14:45:03,984 WARN [io.vertx.core.impl.VertxImpl]-[vert.x-eventloop-thread-1] You're already on a Vert.x context, are you sure you want to create a new Vertx instance? +2022-11-16 14:45:04,002 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 无集群配置,进行单节点部署! +2022-11-16 14:45:04,002 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] vertx.isNativeTransportEnabled:false +2022-11-16 14:45:04,003 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 截图根目录:/mnts/record/\ +2022-11-16 14:45:04,138 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-31] 部署 SqlFactoryVerticle 成功! +2022-11-16 14:45:04,376 INFO [com.hisense.dahua_video.verticle.OrganizationVerticle]-[vert.x-eventloop-thread-17] devicesManagerUtil 创建成功! +2022-11-16 14:45:04,389 INFO [com.hisense.dahua_video.verticle.MonitorVerticle]-[vert.x-eventloop-thread-16] monitorSessionUtil 创建成功! +2022-11-16 14:45:04,390 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-31] 部署 MonitorVerticle 成功! +2022-11-16 14:45:04,390 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-31] 部署 OrganizationVerticle 成功! +2022-11-16 14:45:04,801 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-8] http 服务监听端口: 8883 +2022-11-16 14:45:04,801 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-4] http 服务监听端口: 8883 +2022-11-16 14:45:04,801 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-7] http 服务监听端口: 8883 +2022-11-16 14:45:05,401 INFO [com.hisense.dahua_video.util.MonitorSessionUtil]-[vert.x-eventloop-thread-16] authorize:{"userName":"ynszdz","password":"Admin@123","monitorDomain":"http://10.132.191.3:8314","id":1} +2022-11-16 14:45:05,420 INFO [com.hisense.dahua_video.util.MonitorSessionUtil]-[vert.x-eventloop-thread-16] domain: 10.132.191.3 port:8314 +2022-11-16 14:45:05,582 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-7] 开放管理员后台 +2022-11-16 14:45:05,582 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-8] 开放管理员后台 +2022-11-16 14:45:05,582 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-4] 开放管理员后台 +2022-11-16 14:45:05,584 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-12] http 服务监听端口: 8883 +2022-11-16 14:45:05,584 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-2] http 服务监听端口: 8883 +2022-11-16 14:45:05,584 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-1] http 服务监听端口: 8883 +2022-11-16 14:45:05,584 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-5] http 服务监听端口: 8883 +2022-11-16 14:45:05,584 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-6] http 服务监听端口: 8883 +2022-11-16 14:45:05,584 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-3] http 服务监听端口: 8883 +2022-11-16 14:45:05,585 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-14] http 服务监听端口: 8883 +2022-11-16 14:45:05,585 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-9] http 服务监听端口: 8883 +2022-11-16 14:45:05,587 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-10] http 服务监听端口: 8883 +2022-11-16 14:45:05,587 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-15] http 服务监听端口: 8883 +2022-11-16 14:45:05,588 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-0] http 服务监听端口: 8883 +2022-11-16 14:45:05,588 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-13] http 服务监听端口: 8883 +2022-11-16 14:45:05,588 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-2] 开放管理员后台 +2022-11-16 14:45:05,588 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-14] 开放管理员后台 +2022-11-16 14:45:05,588 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-6] 开放管理员后台 +2022-11-16 14:45:05,588 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-5] 开放管理员后台 +2022-11-16 14:45:05,588 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-3] 开放管理员后台 +2022-11-16 14:45:05,588 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-15] 开放管理员后台 +2022-11-16 14:45:05,588 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-9] 开放管理员后台 +2022-11-16 14:45:05,588 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-1] 开放管理员后台 +2022-11-16 14:45:05,588 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-10] 开放管理员后台 +2022-11-16 14:45:05,588 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-11] http 服务监听端口: 8883 +2022-11-16 14:45:05,588 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-13] 开放管理员后台 +2022-11-16 14:45:05,588 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-0] 开放管理员后台 +2022-11-16 14:45:05,589 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-31] 部署 WebAPIVerticle 成功! +2022-11-16 14:45:05,589 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-12] 开放管理员后台 +2022-11-16 14:45:05,589 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-11] 开放管理员后台 +2022-11-16 14:45:26,918 ERROR [com.hisense.dahua_video.util.MonitorSessionUtil]-[vert.x-eventloop-thread-16] 创建会话失败 +io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection timed out: no further information: /10.132.191.3:8314 +Caused by: java.net.ConnectException: Connection timed out: no further information + at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) ~[?:?] + at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:779) ~[?:?] + at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:337) ~[netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:334) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:776) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at java.lang.Thread.run(Thread.java:834) [?:?] +2022-11-16 18:15:05,563 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 开始创表2022-11-16T18:15:05.562863900 +2022-11-16 18:15:05,625 INFO [com.zaxxer.hikari.HikariDataSource]-[vert.x-eventloop-thread-1] HikariPool-1 - Starting... +2022-11-16 18:15:06,666 INFO [com.zaxxer.hikari.HikariDataSource]-[vert.x-eventloop-thread-1] HikariPool-1 - Start completed. +2022-11-16 18:15:06,862 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 连接完成2022-11-16T18:15:06.862389200 +2022-11-16 18:15:07,658 WARN [io.vertx.core.impl.BlockedThreadChecker]-[vertx-blocked-thread-checker] Thread Thread[vert.x-eventloop-thread-1,5,main] has been blocked for 2401 ms, time limit is 2000 ms +2022-11-16 18:15:07,886 INFO [Exposed]-[vert.x-eventloop-thread-1] Preparing create tables statements took 0ms +2022-11-16 18:15:07,887 INFO [Exposed]-[vert.x-eventloop-thread-1] Executing create tables statements took 0ms +2022-11-16 18:15:07,902 INFO [Exposed]-[vert.x-eventloop-thread-1] Extracting table columns took 15ms +2022-11-16 18:15:07,903 INFO [Exposed]-[vert.x-eventloop-thread-1] Preparing alter table statements took 16ms +2022-11-16 18:15:07,903 INFO [Exposed]-[vert.x-eventloop-thread-1] Executing alter table statements took 0ms +2022-11-16 18:15:07,970 INFO [Exposed]-[vert.x-eventloop-thread-1] Index on table 'sys_monitor_user' differs only in name: in db sys_monitor_user_userName -> in mapping sys_monitor_user_userName_unique +2022-11-16 18:15:07,971 INFO [Exposed]-[vert.x-eventloop-thread-1] Index on table 'sys_user' differs only in name: in db sys_user_userName -> in mapping sys_user_userName_unique +2022-11-16 18:15:07,971 INFO [Exposed]-[vert.x-eventloop-thread-1] Index on table 'sys_organization' differs only in name: in db sys_organization_org_id -> in mapping sys_organization_org_id_unique +2022-11-16 18:15:07,971 INFO [Exposed]-[vert.x-eventloop-thread-1] Checking mapping consistence took 68ms +2022-11-16 18:15:07,972 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 创表成功2022-11-16T18:15:07.971423800 +2022-11-16 18:15:08,040 WARN [io.vertx.core.impl.VertxImpl]-[vert.x-eventloop-thread-1] You're already on a Vert.x context, are you sure you want to create a new Vertx instance? +2022-11-16 18:15:08,071 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 无集群配置,进行单节点部署! +2022-11-16 18:15:08,071 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] vertx.isNativeTransportEnabled:false +2022-11-16 18:15:08,072 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 截图根目录:/mnts/record/\ +2022-11-16 18:15:08,207 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-31] 部署 SqlFactoryVerticle 成功! +2022-11-16 18:15:08,350 INFO [com.hisense.dahua_video.verticle.OrganizationVerticle]-[vert.x-eventloop-thread-18] devicesManagerUtil 创建成功! +2022-11-16 18:15:08,350 INFO [com.hisense.dahua_video.verticle.MonitorVerticle]-[vert.x-eventloop-thread-17] monitorSessionUtil 创建成功! +2022-11-16 18:15:08,351 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-31] 部署 MonitorVerticle 成功! +2022-11-16 18:15:08,351 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-31] 部署 OrganizationVerticle 成功! +2022-11-16 18:15:08,517 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-9] http 服务监听端口: 8883 +2022-11-16 18:15:08,517 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-0] http 服务监听端口: 8883 +2022-11-16 18:15:08,517 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-8] http 服务监听端口: 8883 +2022-11-16 18:15:08,517 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-1] http 服务监听端口: 8883 +2022-11-16 18:15:08,581 INFO [com.hisense.dahua_video.dao.MonitorUserTokenDao]-[vert.x-eventloop-thread-13] [{"token":"6141653985001472_f1cf78dad5fc68ff6d416a82511964cd840983c41c81eb62e591a8a57af10794ab48f7a0dd21335eafa766444ddc919605056e632ad9c2854ac93eb416382a3a","update_time":"2022-11-16 10:20:42.291","userName":"ynszdz"}] +2022-11-16 18:15:09,080 INFO [com.hisense.dahua_video.util.MonitorSessionUtil]-[vert.x-eventloop-thread-17] authorize:{"userName":"ynszdz","password":"Admin@123","monitorDomain":"http://10.132.191.3:8314","id":1} +2022-11-16 18:15:09,084 INFO [com.hisense.dahua_video.util.MonitorSessionUtil]-[vert.x-eventloop-thread-17] domain: 10.132.191.3 port:8314 +2022-11-16 18:15:09,289 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-1] 开放管理员后台 +2022-11-16 18:15:09,289 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-8] 开放管理员后台 +2022-11-16 18:15:09,289 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-0] 开放管理员后台 +2022-11-16 18:15:09,289 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-9] 开放管理员后台 +2022-11-16 18:15:09,291 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-2] http 服务监听端口: 8883 +2022-11-16 18:15:09,291 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-14] http 服务监听端口: 8883 +2022-11-16 18:15:09,291 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-7] http 服务监听端口: 8883 +2022-11-16 18:15:09,291 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-5] http 服务监听端口: 8883 +2022-11-16 18:15:09,291 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-12] http 服务监听端口: 8883 +2022-11-16 18:15:09,292 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-15] http 服务监听端口: 8883 +2022-11-16 18:15:09,292 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-3] http 服务监听端口: 8883 +2022-11-16 18:15:09,292 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-13] http 服务监听端口: 8883 +2022-11-16 18:15:09,294 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-11] http 服务监听端口: 8883 +2022-11-16 18:15:09,294 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-4] http 服务监听端口: 8883 +2022-11-16 18:15:09,295 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-10] http 服务监听端口: 8883 +2022-11-16 18:15:09,295 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-5] 开放管理员后台 +2022-11-16 18:15:09,295 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-2] 开放管理员后台 +2022-11-16 18:15:09,295 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-6] http 服务监听端口: 8883 +2022-11-16 18:15:09,295 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-7] 开放管理员后台 +2022-11-16 18:15:09,295 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-31] 部署 WebAPIVerticle 成功! +2022-11-16 18:15:09,296 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-3] 开放管理员后台 +2022-11-16 18:15:09,296 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-13] 开放管理员后台 +2022-11-16 18:15:09,296 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-10] 开放管理员后台 +2022-11-16 18:15:09,296 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-12] 开放管理员后台 +2022-11-16 18:15:09,296 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-15] 开放管理员后台 +2022-11-16 18:15:09,296 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-4] 开放管理员后台 +2022-11-16 18:15:09,296 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-14] 开放管理员后台 +2022-11-16 18:15:09,296 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-6] 开放管理员后台 +2022-11-16 18:15:09,296 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-11] 开放管理员后台 +2022-11-16 18:17:46,627 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 开始创表2022-11-16T18:17:46.626268400 +2022-11-16 18:17:46,647 INFO [com.zaxxer.hikari.HikariDataSource]-[vert.x-eventloop-thread-1] HikariPool-1 - Starting... +2022-11-16 18:17:46,836 INFO [com.zaxxer.hikari.HikariDataSource]-[vert.x-eventloop-thread-1] HikariPool-1 - Start completed. +2022-11-16 18:17:46,862 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 连接完成2022-11-16T18:17:46.862636300 +2022-11-16 18:17:46,969 INFO [Exposed]-[vert.x-eventloop-thread-1] Preparing create tables statements took 0ms +2022-11-16 18:17:46,969 INFO [Exposed]-[vert.x-eventloop-thread-1] Executing create tables statements took 0ms +2022-11-16 18:17:46,974 INFO [Exposed]-[vert.x-eventloop-thread-1] Extracting table columns took 4ms +2022-11-16 18:17:46,975 INFO [Exposed]-[vert.x-eventloop-thread-1] Preparing alter table statements took 5ms +2022-11-16 18:17:46,975 INFO [Exposed]-[vert.x-eventloop-thread-1] Executing alter table statements took 0ms +2022-11-16 18:17:47,013 INFO [Exposed]-[vert.x-eventloop-thread-1] Index on table 'sys_monitor_user' differs only in name: in db sys_monitor_user_userName -> in mapping sys_monitor_user_userName_unique +2022-11-16 18:17:47,014 INFO [Exposed]-[vert.x-eventloop-thread-1] Index on table 'sys_user' differs only in name: in db sys_user_userName -> in mapping sys_user_userName_unique +2022-11-16 18:17:47,014 INFO [Exposed]-[vert.x-eventloop-thread-1] Index on table 'sys_organization' differs only in name: in db sys_organization_org_id -> in mapping sys_organization_org_id_unique +2022-11-16 18:17:47,014 INFO [Exposed]-[vert.x-eventloop-thread-1] Checking mapping consistence took 39ms +2022-11-16 18:17:47,015 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 创表成功2022-11-16T18:17:47.014231400 +2022-11-16 18:17:47,073 WARN [io.vertx.core.impl.VertxImpl]-[vert.x-eventloop-thread-1] You're already on a Vert.x context, are you sure you want to create a new Vertx instance? +2022-11-16 18:17:47,091 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 无集群配置,进行单节点部署! +2022-11-16 18:17:47,091 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] vertx.isNativeTransportEnabled:false +2022-11-16 18:17:47,091 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 截图根目录:/mnts/record/\ +2022-11-16 18:17:47,196 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-31] 部署 SqlFactoryVerticle 成功! +2022-11-16 18:17:47,343 INFO [com.hisense.dahua_video.verticle.OrganizationVerticle]-[vert.x-eventloop-thread-17] devicesManagerUtil 创建成功! +2022-11-16 18:17:47,343 INFO [com.hisense.dahua_video.verticle.MonitorVerticle]-[vert.x-eventloop-thread-19] monitorSessionUtil 创建成功! +2022-11-16 18:17:47,343 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-31] 部署 MonitorVerticle 成功! +2022-11-16 18:17:47,344 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-31] 部署 OrganizationVerticle 成功! +2022-11-16 18:17:47,543 INFO [com.hisense.dahua_video.dao.MonitorUserTokenDao]-[vert.x-eventloop-thread-2] 有效token:[{"token":"6141653985001472_f1cf78dad5fc68ff6d416a82511964cd840983c41c81eb62e591a8a57af10794ab48f7a0dd21335eafa766444ddc919605056e632ad9c2854ac93eb416382a3a","update_time":"2022-11-16 10:20:42.291","userName":"ynszdz"}] +2022-11-16 18:17:47,544 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-2] http 服务监听端口: 8883 +2022-11-16 18:17:47,621 INFO [com.hisense.dahua_video.util.MonitorSessionUtil]-[vert.x-eventloop-thread-19] authorize:{"userName":"ynszdz","password":"Admin@123","monitorDomain":"http://10.132.191.3:8314","id":1} +2022-11-16 18:17:47,625 INFO [com.hisense.dahua_video.util.MonitorSessionUtil]-[vert.x-eventloop-thread-19] domain: 10.132.191.3 port:8314 +2022-11-16 18:17:47,739 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-2] 开放管理员后台 +2022-11-16 18:17:47,741 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-5] http 服务监听端口: 8883 +2022-11-16 18:17:47,741 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-7] http 服务监听端口: 8883 +2022-11-16 18:17:47,741 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-8] http 服务监听端口: 8883 +2022-11-16 18:17:47,741 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-4] http 服务监听端口: 8883 +2022-11-16 18:17:47,741 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-12] http 服务监听端口: 8883 +2022-11-16 18:17:47,742 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-0] http 服务监听端口: 8883 +2022-11-16 18:17:47,742 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-14] http 服务监听端口: 8883 +2022-11-16 18:17:47,742 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-13] http 服务监听端口: 8883 +2022-11-16 18:17:47,742 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-9] http 服务监听端口: 8883 +2022-11-16 18:17:47,742 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-11] http 服务监听端口: 8883 +2022-11-16 18:17:47,743 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-10] http 服务监听端口: 8883 +2022-11-16 18:17:47,744 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-15] http 服务监听端口: 8883 +2022-11-16 18:17:47,744 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-12] 开放管理员后台 +2022-11-16 18:17:47,744 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-5] 开放管理员后台 +2022-11-16 18:17:47,744 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-7] 开放管理员后台 +2022-11-16 18:17:47,744 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-4] 开放管理员后台 +2022-11-16 18:17:47,744 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-3] http 服务监听端口: 8883 +2022-11-16 18:17:47,744 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-1] http 服务监听端口: 8883 +2022-11-16 18:17:47,744 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-14] 开放管理员后台 +2022-11-16 18:17:47,744 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-8] 开放管理员后台 +2022-11-16 18:17:47,744 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-11] 开放管理员后台 +2022-11-16 18:17:47,744 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-13] 开放管理员后台 +2022-11-16 18:17:47,745 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-6] http 服务监听端口: 8883 +2022-11-16 18:17:47,745 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-10] 开放管理员后台 +2022-11-16 18:17:47,745 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-31] 部署 WebAPIVerticle 成功! +2022-11-16 18:17:47,745 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-0] 开放管理员后台 +2022-11-16 18:17:47,745 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-15] 开放管理员后台 +2022-11-16 18:17:47,745 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-3] 开放管理员后台 +2022-11-16 18:17:47,745 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-9] 开放管理员后台 +2022-11-16 18:17:47,745 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-1] 开放管理员后台 +2022-11-16 18:17:47,745 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-6] 开放管理员后台 +2022-11-16 18:18:08,782 ERROR [com.hisense.dahua_video.util.MonitorSessionUtil]-[vert.x-eventloop-thread-19] 创建会话失败 +io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection timed out: no further information: /10.132.191.3:8314 +Caused by: java.net.ConnectException: Connection timed out: no further information + at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) ~[?:?] + at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:779) ~[?:?] + at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:337) ~[netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:334) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:776) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at java.lang.Thread.run(Thread.java:834) [?:?] +2022-11-16 19:41:46,615 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 开始创表2022-11-16T19:41:46.614685200 +2022-11-16 19:41:46,681 INFO [com.zaxxer.hikari.HikariDataSource]-[vert.x-eventloop-thread-1] HikariPool-1 - Starting... +2022-11-16 19:41:48,529 WARN [io.vertx.core.impl.BlockedThreadChecker]-[vertx-blocked-thread-checker] Thread Thread[vert.x-eventloop-thread-1,5,main] has been blocked for 2311 ms, time limit is 2000 ms +2022-11-16 19:41:49,530 WARN [io.vertx.core.impl.BlockedThreadChecker]-[vertx-blocked-thread-checker] Thread Thread[vert.x-eventloop-thread-1,5,main] has been blocked for 3312 ms, time limit is 2000 ms +2022-11-16 19:41:50,530 WARN [io.vertx.core.impl.BlockedThreadChecker]-[vertx-blocked-thread-checker] Thread Thread[vert.x-eventloop-thread-1,5,main] has been blocked for 4312 ms, time limit is 2000 ms +2022-11-16 19:41:51,530 WARN [io.vertx.core.impl.BlockedThreadChecker]-[vertx-blocked-thread-checker] Thread Thread[vert.x-eventloop-thread-1,5,main] has been blocked for 5312 ms, time limit is 2000 ms +io.vertx.core.VertxException: Thread blocked + at java.lang.ClassLoader$NativeLibrary.load0(Native Method) ~[?:?] + at java.lang.ClassLoader$NativeLibrary.load(ClassLoader.java:2430) ~[?:?] + at java.lang.ClassLoader$NativeLibrary.loadLibrary(ClassLoader.java:2487) ~[?:?] + at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:2684) ~[?:?] + at java.lang.ClassLoader.loadLibrary(ClassLoader.java:2617) ~[?:?] + at java.lang.Runtime.load0(Runtime.java:765) ~[?:?] + at java.lang.System.load(System.java:1835) ~[?:?] + at org.sqlite.SQLiteJDBCLoader.loadNativeLibrary(SQLiteJDBCLoader.java:280) ~[sqlite-jdbc-3.39.4.0.jar:?] + at org.sqlite.SQLiteJDBCLoader.extractAndLoadLibraryFile(SQLiteJDBCLoader.java:237) ~[sqlite-jdbc-3.39.4.0.jar:?] + at org.sqlite.SQLiteJDBCLoader.loadSQLiteNativeLibrary(SQLiteJDBCLoader.java:350) ~[sqlite-jdbc-3.39.4.0.jar:?] + at org.sqlite.SQLiteJDBCLoader.initialize(SQLiteJDBCLoader.java:68) ~[sqlite-jdbc-3.39.4.0.jar:?] + at org.sqlite.core.NativeDB.load(NativeDB.java:63) ~[sqlite-jdbc-3.39.4.0.jar:?] + at org.sqlite.SQLiteConnection.open(SQLiteConnection.java:278) ~[sqlite-jdbc-3.39.4.0.jar:?] + at org.sqlite.SQLiteConnection.(SQLiteConnection.java:65) ~[sqlite-jdbc-3.39.4.0.jar:?] + at org.sqlite.jdbc3.JDBC3Connection.(JDBC3Connection.java:28) ~[sqlite-jdbc-3.39.4.0.jar:?] + at org.sqlite.jdbc4.JDBC4Connection.(JDBC4Connection.java:19) ~[sqlite-jdbc-3.39.4.0.jar:?] + at org.sqlite.JDBC.createConnection(JDBC.java:104) ~[sqlite-jdbc-3.39.4.0.jar:?] + at org.sqlite.JDBC.connect(JDBC.java:77) ~[sqlite-jdbc-3.39.4.0.jar:?] + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[HikariCP-4.0.3.jar:?] + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:364) ~[HikariCP-4.0.3.jar:?] + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206) ~[HikariCP-4.0.3.jar:?] + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:476) ~[HikariCP-4.0.3.jar:?] + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) ~[HikariCP-4.0.3.jar:?] + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:115) ~[HikariCP-4.0.3.jar:?] + at com.zaxxer.hikari.HikariDataSource.(HikariDataSource.java:81) ~[HikariCP-4.0.3.jar:?] + at com.hisense.dahua_video.MainVerticle.exposed(MainVerticle.kt:152) ~[classes/:?] + at com.hisense.dahua_video.MainVerticle.start$lambda$4(MainVerticle.kt:50) ~[classes/:?] + at com.hisense.dahua_video.MainVerticle$$Lambda$172/0x00000001002b0040.handle(Unknown Source) ~[?:?] + at io.vertx.core.impl.future.FutureImpl$3.onSuccess(FutureImpl.java:141) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl$ListenerArray.onSuccess(FutureImpl.java:262) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Mapping.onSuccess(Mapping.java:40) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Mapping.onSuccess(Mapping.java:40) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.CompositeFutureImpl.trySucceed(CompositeFutureImpl.java:163) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.CompositeFutureImpl.lambda$all$0(CompositeFutureImpl.java:38) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.CompositeFutureImpl$$Lambda$180/0x00000001002b7c40.handle(Unknown Source) ~[?:?] + at io.vertx.core.impl.future.FutureImpl$3.onSuccess(FutureImpl.java:141) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Composition$1.onSuccess(Composition.java:62) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.SucceededFuture.addListener(SucceededFuture.java:88) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Composition.onSuccess(Composition.java:43) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Composition$1.onSuccess(Composition.java:62) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.addListener(FutureImpl.java:196) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.PromiseImpl.addListener(PromiseImpl.java:23) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Composition.onSuccess(Composition.java:43) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl$ListenerArray.onSuccess(FutureImpl.java:262) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.lambda$emitSuccess$0(FutureBase.java:54) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase$$Lambda$160/0x00000001002a8840.run(Unknown Source) ~[?:?] + at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174) ~[netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167) ~[netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470) ~[netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569) ~[netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) ~[netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.82.Final.jar:4.1.82.Final] + at java.lang.Thread.run(Thread.java:834) ~[?:?] +2022-11-16 19:41:52,530 WARN [io.vertx.core.impl.BlockedThreadChecker]-[vertx-blocked-thread-checker] Thread Thread[vert.x-eventloop-thread-1,5,main] has been blocked for 6313 ms, time limit is 2000 ms +io.vertx.core.VertxException: Thread blocked + at java.lang.ClassLoader$NativeLibrary.load0(Native Method) ~[?:?] + at java.lang.ClassLoader$NativeLibrary.load(ClassLoader.java:2430) ~[?:?] + at java.lang.ClassLoader$NativeLibrary.loadLibrary(ClassLoader.java:2487) ~[?:?] + at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:2684) ~[?:?] + at java.lang.ClassLoader.loadLibrary(ClassLoader.java:2617) ~[?:?] + at java.lang.Runtime.load0(Runtime.java:765) ~[?:?] + at java.lang.System.load(System.java:1835) ~[?:?] + at org.sqlite.SQLiteJDBCLoader.loadNativeLibrary(SQLiteJDBCLoader.java:280) ~[sqlite-jdbc-3.39.4.0.jar:?] + at org.sqlite.SQLiteJDBCLoader.extractAndLoadLibraryFile(SQLiteJDBCLoader.java:237) ~[sqlite-jdbc-3.39.4.0.jar:?] + at org.sqlite.SQLiteJDBCLoader.loadSQLiteNativeLibrary(SQLiteJDBCLoader.java:350) ~[sqlite-jdbc-3.39.4.0.jar:?] + at org.sqlite.SQLiteJDBCLoader.initialize(SQLiteJDBCLoader.java:68) ~[sqlite-jdbc-3.39.4.0.jar:?] + at org.sqlite.core.NativeDB.load(NativeDB.java:63) ~[sqlite-jdbc-3.39.4.0.jar:?] + at org.sqlite.SQLiteConnection.open(SQLiteConnection.java:278) ~[sqlite-jdbc-3.39.4.0.jar:?] + at org.sqlite.SQLiteConnection.(SQLiteConnection.java:65) ~[sqlite-jdbc-3.39.4.0.jar:?] + at org.sqlite.jdbc3.JDBC3Connection.(JDBC3Connection.java:28) ~[sqlite-jdbc-3.39.4.0.jar:?] + at org.sqlite.jdbc4.JDBC4Connection.(JDBC4Connection.java:19) ~[sqlite-jdbc-3.39.4.0.jar:?] + at org.sqlite.JDBC.createConnection(JDBC.java:104) ~[sqlite-jdbc-3.39.4.0.jar:?] + at org.sqlite.JDBC.connect(JDBC.java:77) ~[sqlite-jdbc-3.39.4.0.jar:?] + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[HikariCP-4.0.3.jar:?] + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:364) ~[HikariCP-4.0.3.jar:?] + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206) ~[HikariCP-4.0.3.jar:?] + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:476) ~[HikariCP-4.0.3.jar:?] + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) ~[HikariCP-4.0.3.jar:?] + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:115) ~[HikariCP-4.0.3.jar:?] + at com.zaxxer.hikari.HikariDataSource.(HikariDataSource.java:81) ~[HikariCP-4.0.3.jar:?] + at com.hisense.dahua_video.MainVerticle.exposed(MainVerticle.kt:152) ~[classes/:?] + at com.hisense.dahua_video.MainVerticle.start$lambda$4(MainVerticle.kt:50) ~[classes/:?] + at com.hisense.dahua_video.MainVerticle$$Lambda$172/0x00000001002b0040.handle(Unknown Source) ~[?:?] + at io.vertx.core.impl.future.FutureImpl$3.onSuccess(FutureImpl.java:141) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl$ListenerArray.onSuccess(FutureImpl.java:262) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Mapping.onSuccess(Mapping.java:40) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Mapping.onSuccess(Mapping.java:40) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.CompositeFutureImpl.trySucceed(CompositeFutureImpl.java:163) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.CompositeFutureImpl.lambda$all$0(CompositeFutureImpl.java:38) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.CompositeFutureImpl$$Lambda$180/0x00000001002b7c40.handle(Unknown Source) ~[?:?] + at io.vertx.core.impl.future.FutureImpl$3.onSuccess(FutureImpl.java:141) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Composition$1.onSuccess(Composition.java:62) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.SucceededFuture.addListener(SucceededFuture.java:88) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Composition.onSuccess(Composition.java:43) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Composition$1.onSuccess(Composition.java:62) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.addListener(FutureImpl.java:196) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.PromiseImpl.addListener(PromiseImpl.java:23) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Composition.onSuccess(Composition.java:43) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl$ListenerArray.onSuccess(FutureImpl.java:262) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.lambda$emitSuccess$0(FutureBase.java:54) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase$$Lambda$160/0x00000001002a8840.run(Unknown Source) ~[?:?] + at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174) ~[netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167) ~[netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470) ~[netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569) ~[netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) ~[netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.82.Final.jar:4.1.82.Final] + at java.lang.Thread.run(Thread.java:834) ~[?:?] +2022-11-16 19:41:53,531 WARN [io.vertx.core.impl.BlockedThreadChecker]-[vertx-blocked-thread-checker] Thread Thread[vert.x-eventloop-thread-1,5,main] has been blocked for 7313 ms, time limit is 2000 ms +io.vertx.core.VertxException: Thread blocked + at java.lang.ClassLoader$NativeLibrary.load0(Native Method) ~[?:?] + at java.lang.ClassLoader$NativeLibrary.load(ClassLoader.java:2430) ~[?:?] + at java.lang.ClassLoader$NativeLibrary.loadLibrary(ClassLoader.java:2487) ~[?:?] + at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:2684) ~[?:?] + at java.lang.ClassLoader.loadLibrary(ClassLoader.java:2617) ~[?:?] + at java.lang.Runtime.load0(Runtime.java:765) ~[?:?] + at java.lang.System.load(System.java:1835) ~[?:?] + at org.sqlite.SQLiteJDBCLoader.loadNativeLibrary(SQLiteJDBCLoader.java:280) ~[sqlite-jdbc-3.39.4.0.jar:?] + at org.sqlite.SQLiteJDBCLoader.extractAndLoadLibraryFile(SQLiteJDBCLoader.java:237) ~[sqlite-jdbc-3.39.4.0.jar:?] + at org.sqlite.SQLiteJDBCLoader.loadSQLiteNativeLibrary(SQLiteJDBCLoader.java:350) ~[sqlite-jdbc-3.39.4.0.jar:?] + at org.sqlite.SQLiteJDBCLoader.initialize(SQLiteJDBCLoader.java:68) ~[sqlite-jdbc-3.39.4.0.jar:?] + at org.sqlite.core.NativeDB.load(NativeDB.java:63) ~[sqlite-jdbc-3.39.4.0.jar:?] + at org.sqlite.SQLiteConnection.open(SQLiteConnection.java:278) ~[sqlite-jdbc-3.39.4.0.jar:?] + at org.sqlite.SQLiteConnection.(SQLiteConnection.java:65) ~[sqlite-jdbc-3.39.4.0.jar:?] + at org.sqlite.jdbc3.JDBC3Connection.(JDBC3Connection.java:28) ~[sqlite-jdbc-3.39.4.0.jar:?] + at org.sqlite.jdbc4.JDBC4Connection.(JDBC4Connection.java:19) ~[sqlite-jdbc-3.39.4.0.jar:?] + at org.sqlite.JDBC.createConnection(JDBC.java:104) ~[sqlite-jdbc-3.39.4.0.jar:?] + at org.sqlite.JDBC.connect(JDBC.java:77) ~[sqlite-jdbc-3.39.4.0.jar:?] + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[HikariCP-4.0.3.jar:?] + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:364) ~[HikariCP-4.0.3.jar:?] + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206) ~[HikariCP-4.0.3.jar:?] + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:476) ~[HikariCP-4.0.3.jar:?] + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) ~[HikariCP-4.0.3.jar:?] + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:115) ~[HikariCP-4.0.3.jar:?] + at com.zaxxer.hikari.HikariDataSource.(HikariDataSource.java:81) ~[HikariCP-4.0.3.jar:?] + at com.hisense.dahua_video.MainVerticle.exposed(MainVerticle.kt:152) ~[classes/:?] + at com.hisense.dahua_video.MainVerticle.start$lambda$4(MainVerticle.kt:50) ~[classes/:?] + at com.hisense.dahua_video.MainVerticle$$Lambda$172/0x00000001002b0040.handle(Unknown Source) ~[?:?] + at io.vertx.core.impl.future.FutureImpl$3.onSuccess(FutureImpl.java:141) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl$ListenerArray.onSuccess(FutureImpl.java:262) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Mapping.onSuccess(Mapping.java:40) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Mapping.onSuccess(Mapping.java:40) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.CompositeFutureImpl.trySucceed(CompositeFutureImpl.java:163) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.CompositeFutureImpl.lambda$all$0(CompositeFutureImpl.java:38) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.CompositeFutureImpl$$Lambda$180/0x00000001002b7c40.handle(Unknown Source) ~[?:?] + at io.vertx.core.impl.future.FutureImpl$3.onSuccess(FutureImpl.java:141) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Composition$1.onSuccess(Composition.java:62) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.SucceededFuture.addListener(SucceededFuture.java:88) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Composition.onSuccess(Composition.java:43) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Composition$1.onSuccess(Composition.java:62) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.addListener(FutureImpl.java:196) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.PromiseImpl.addListener(PromiseImpl.java:23) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Composition.onSuccess(Composition.java:43) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl$ListenerArray.onSuccess(FutureImpl.java:262) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.lambda$emitSuccess$0(FutureBase.java:54) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase$$Lambda$160/0x00000001002a8840.run(Unknown Source) ~[?:?] + at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174) ~[netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167) ~[netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470) ~[netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569) ~[netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) ~[netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.82.Final.jar:4.1.82.Final] + at java.lang.Thread.run(Thread.java:834) ~[?:?] +2022-11-16 19:41:54,531 WARN [io.vertx.core.impl.BlockedThreadChecker]-[vertx-blocked-thread-checker] Thread Thread[vert.x-eventloop-thread-1,5,main] has been blocked for 8313 ms, time limit is 2000 ms +io.vertx.core.VertxException: Thread blocked + at java.lang.ClassLoader$NativeLibrary.load0(Native Method) ~[?:?] + at java.lang.ClassLoader$NativeLibrary.load(ClassLoader.java:2430) ~[?:?] + at java.lang.ClassLoader$NativeLibrary.loadLibrary(ClassLoader.java:2487) ~[?:?] + at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:2684) ~[?:?] + at java.lang.ClassLoader.loadLibrary(ClassLoader.java:2617) ~[?:?] + at java.lang.Runtime.load0(Runtime.java:765) ~[?:?] + at java.lang.System.load(System.java:1835) ~[?:?] + at org.sqlite.SQLiteJDBCLoader.loadNativeLibrary(SQLiteJDBCLoader.java:280) ~[sqlite-jdbc-3.39.4.0.jar:?] + at org.sqlite.SQLiteJDBCLoader.extractAndLoadLibraryFile(SQLiteJDBCLoader.java:237) ~[sqlite-jdbc-3.39.4.0.jar:?] + at org.sqlite.SQLiteJDBCLoader.loadSQLiteNativeLibrary(SQLiteJDBCLoader.java:350) ~[sqlite-jdbc-3.39.4.0.jar:?] + at org.sqlite.SQLiteJDBCLoader.initialize(SQLiteJDBCLoader.java:68) ~[sqlite-jdbc-3.39.4.0.jar:?] + at org.sqlite.core.NativeDB.load(NativeDB.java:63) ~[sqlite-jdbc-3.39.4.0.jar:?] + at org.sqlite.SQLiteConnection.open(SQLiteConnection.java:278) ~[sqlite-jdbc-3.39.4.0.jar:?] + at org.sqlite.SQLiteConnection.(SQLiteConnection.java:65) ~[sqlite-jdbc-3.39.4.0.jar:?] + at org.sqlite.jdbc3.JDBC3Connection.(JDBC3Connection.java:28) ~[sqlite-jdbc-3.39.4.0.jar:?] + at org.sqlite.jdbc4.JDBC4Connection.(JDBC4Connection.java:19) ~[sqlite-jdbc-3.39.4.0.jar:?] + at org.sqlite.JDBC.createConnection(JDBC.java:104) ~[sqlite-jdbc-3.39.4.0.jar:?] + at org.sqlite.JDBC.connect(JDBC.java:77) ~[sqlite-jdbc-3.39.4.0.jar:?] + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[HikariCP-4.0.3.jar:?] + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:364) ~[HikariCP-4.0.3.jar:?] + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206) ~[HikariCP-4.0.3.jar:?] + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:476) ~[HikariCP-4.0.3.jar:?] + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) ~[HikariCP-4.0.3.jar:?] + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:115) ~[HikariCP-4.0.3.jar:?] + at com.zaxxer.hikari.HikariDataSource.(HikariDataSource.java:81) ~[HikariCP-4.0.3.jar:?] + at com.hisense.dahua_video.MainVerticle.exposed(MainVerticle.kt:152) ~[classes/:?] + at com.hisense.dahua_video.MainVerticle.start$lambda$4(MainVerticle.kt:50) ~[classes/:?] + at com.hisense.dahua_video.MainVerticle$$Lambda$172/0x00000001002b0040.handle(Unknown Source) ~[?:?] + at io.vertx.core.impl.future.FutureImpl$3.onSuccess(FutureImpl.java:141) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl$ListenerArray.onSuccess(FutureImpl.java:262) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Mapping.onSuccess(Mapping.java:40) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Mapping.onSuccess(Mapping.java:40) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.CompositeFutureImpl.trySucceed(CompositeFutureImpl.java:163) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.CompositeFutureImpl.lambda$all$0(CompositeFutureImpl.java:38) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.CompositeFutureImpl$$Lambda$180/0x00000001002b7c40.handle(Unknown Source) ~[?:?] + at io.vertx.core.impl.future.FutureImpl$3.onSuccess(FutureImpl.java:141) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Composition$1.onSuccess(Composition.java:62) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.SucceededFuture.addListener(SucceededFuture.java:88) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Composition.onSuccess(Composition.java:43) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Composition$1.onSuccess(Composition.java:62) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.addListener(FutureImpl.java:196) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.PromiseImpl.addListener(PromiseImpl.java:23) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Composition.onSuccess(Composition.java:43) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl$ListenerArray.onSuccess(FutureImpl.java:262) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.lambda$emitSuccess$0(FutureBase.java:54) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase$$Lambda$160/0x00000001002a8840.run(Unknown Source) ~[?:?] + at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174) ~[netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167) ~[netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470) ~[netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569) ~[netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) ~[netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.82.Final.jar:4.1.82.Final] + at java.lang.Thread.run(Thread.java:834) ~[?:?] +2022-11-16 19:41:55,169 INFO [com.zaxxer.hikari.HikariDataSource]-[vert.x-eventloop-thread-1] HikariPool-1 - Start completed. +2022-11-16 19:41:55,447 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 连接完成2022-11-16T19:41:55.447073600 +2022-11-16 19:41:55,550 WARN [io.vertx.core.impl.BlockedThreadChecker]-[vertx-blocked-thread-checker] Thread Thread[vert.x-eventloop-thread-1,5,main] has been blocked for 9314 ms, time limit is 2000 ms +io.vertx.core.VertxException: Thread blocked + at java.lang.ClassLoader.defineClass2(Native Method) ~[?:?] + at java.lang.ClassLoader.defineClass(ClassLoader.java:1108) ~[?:?] + at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:206) ~[?:?] + at jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:759) ~[?:?] + at jdk.internal.loader.BuiltinClassLoader.findClassInModuleOrNull(BuiltinClassLoader.java:680) ~[?:?] + at jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:605) ~[?:?] + at jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:640) ~[?:?] + at jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:609) ~[?:?] + at jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579) ~[?:?] + at jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) ~[?:?] + at java.lang.ClassLoader.loadClass(ClassLoader.java:521) ~[?:?] + at com.zaxxer.hikari.pool.PoolEntry.createProxyConnection(PoolEntry.java:102) ~[HikariCP-4.0.3.jar:?] + at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:192) ~[HikariCP-4.0.3.jar:?] + at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:162) ~[HikariCP-4.0.3.jar:?] + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:100) ~[HikariCP-4.0.3.jar:?] + at org.jetbrains.exposed.sql.Database$Companion$connect$3.invoke(Database.kt:141) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.Database$Companion$connect$3.invoke(Database.kt:138) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.Database$Companion$doConnect$3.invoke(Database.kt:126) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.Database$Companion$doConnect$3.invoke(Database.kt:127) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.Database.metadata$exposed_core(Database.kt:31) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.Database$vendor$2.invoke(Database.kt:44) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.Database$vendor$2.invoke(Database.kt:43) ~[exposed-core-0.40.1.jar:?] + at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74) ~[kotlin-stdlib-1.7.20.jar:1.7.20-release-201(1.7.20)] + at org.jetbrains.exposed.sql.Database.getVendor(Database.kt:43) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.Database$dialect$2.invoke(Database.kt:48) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.Database$dialect$2.invoke(Database.kt:47) ~[exposed-core-0.40.1.jar:?] + at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74) ~[kotlin-stdlib-1.7.20.jar:1.7.20-release-201(1.7.20)] + at org.jetbrains.exposed.sql.Database.getDialect(Database.kt:47) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.Database$Companion.getDefaultIsolationLevel(Database.kt:209) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManager.getDefaultIsolationLevel(ThreadLocalTransactionManager.kt:28) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.transaction(ThreadLocalTransactionManager.kt:147) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.transaction$default(ThreadLocalTransactionManager.kt:145) ~[exposed-core-0.40.1.jar:?] + at com.hisense.dahua_video.MainVerticle.exposed(MainVerticle.kt:155) ~[classes/:?] + at com.hisense.dahua_video.MainVerticle.start$lambda$4(MainVerticle.kt:50) ~[classes/:?] + at com.hisense.dahua_video.MainVerticle$$Lambda$172/0x00000001002b0040.handle(Unknown Source) ~[?:?] + at io.vertx.core.impl.future.FutureImpl$3.onSuccess(FutureImpl.java:141) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl$ListenerArray.onSuccess(FutureImpl.java:262) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Mapping.onSuccess(Mapping.java:40) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Mapping.onSuccess(Mapping.java:40) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.CompositeFutureImpl.trySucceed(CompositeFutureImpl.java:163) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.CompositeFutureImpl.lambda$all$0(CompositeFutureImpl.java:38) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.CompositeFutureImpl$$Lambda$180/0x00000001002b7c40.handle(Unknown Source) ~[?:?] + at io.vertx.core.impl.future.FutureImpl$3.onSuccess(FutureImpl.java:141) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Composition$1.onSuccess(Composition.java:62) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.SucceededFuture.addListener(SucceededFuture.java:88) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Composition.onSuccess(Composition.java:43) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Composition$1.onSuccess(Composition.java:62) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.addListener(FutureImpl.java:196) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.PromiseImpl.addListener(PromiseImpl.java:23) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Composition.onSuccess(Composition.java:43) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl$ListenerArray.onSuccess(FutureImpl.java:262) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.lambda$emitSuccess$0(FutureBase.java:54) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase$$Lambda$160/0x00000001002a8840.run(Unknown Source) ~[?:?] + at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174) ~[netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167) ~[netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470) ~[netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569) ~[netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) ~[netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.82.Final.jar:4.1.82.Final] + at java.lang.Thread.run(Thread.java:834) ~[?:?] +2022-11-16 19:41:56,106 INFO [Exposed]-[vert.x-eventloop-thread-1] Preparing create tables statements took 0ms +2022-11-16 19:41:56,106 INFO [Exposed]-[vert.x-eventloop-thread-1] Executing create tables statements took 0ms +2022-11-16 19:41:56,110 INFO [Exposed]-[vert.x-eventloop-thread-1] Extracting table columns took 4ms +2022-11-16 19:41:56,111 INFO [Exposed]-[vert.x-eventloop-thread-1] Preparing alter table statements took 5ms +2022-11-16 19:41:56,111 INFO [Exposed]-[vert.x-eventloop-thread-1] Executing alter table statements took 0ms +2022-11-16 19:41:56,162 INFO [Exposed]-[vert.x-eventloop-thread-1] Index on table 'sys_monitor_user' differs only in name: in db sys_monitor_user_userName -> in mapping sys_monitor_user_userName_unique +2022-11-16 19:41:56,164 INFO [Exposed]-[vert.x-eventloop-thread-1] Index on table 'sys_user' differs only in name: in db sys_user_userName -> in mapping sys_user_userName_unique +2022-11-16 19:41:56,165 INFO [Exposed]-[vert.x-eventloop-thread-1] Index on table 'sys_organization' differs only in name: in db sys_organization_org_id -> in mapping sys_organization_org_id_unique +2022-11-16 19:41:56,165 INFO [Exposed]-[vert.x-eventloop-thread-1] Checking mapping consistence took 54ms +2022-11-16 19:41:56,165 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 创表成功2022-11-16T19:41:56.165153500 +2022-11-16 19:41:56,378 WARN [io.vertx.core.impl.VertxImpl]-[vert.x-eventloop-thread-1] You're already on a Vert.x context, are you sure you want to create a new Vertx instance? +2022-11-16 19:41:56,408 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 无集群配置,进行单节点部署! +2022-11-16 19:41:56,408 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] vertx.isNativeTransportEnabled:false +2022-11-16 19:41:56,409 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 截图根目录:/mnts/record/\ +2022-11-16 19:41:56,572 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-31] 部署 SqlFactoryVerticle 成功! +2022-11-16 19:41:56,532 WARN [io.vertx.core.impl.BlockedThreadChecker]-[vertx-blocked-thread-checker] Thread Thread[vert.x-eventloop-thread-1,5,main] has been blocked for 10314 ms, time limit is 2000 ms +io.vertx.core.VertxException: Thread blocked + at sun.nio.ch.WindowsSelectorImpl.setWakeupSocket0(Native Method) ~[?:?] + at sun.nio.ch.WindowsSelectorImpl.setWakeupSocket(WindowsSelectorImpl.java:504) ~[?:?] + at sun.nio.ch.WindowsSelectorImpl.wakeup(WindowsSelectorImpl.java:625) ~[?:?] + at io.netty.channel.nio.SelectedSelectionKeySetSelector.wakeup(SelectedSelectionKeySetSelector.java:73) ~[netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.wakeup(NioEventLoop.java:853) ~[netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.SingleThreadEventExecutor.execute(SingleThreadEventExecutor.java:857) ~[netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.SingleThreadEventExecutor.execute0(SingleThreadEventExecutor.java:827) ~[netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.SingleThreadEventExecutor.execute(SingleThreadEventExecutor.java:817) ~[netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.vertx.core.impl.EventLoopContext.runOnContext(EventLoopContext.java:43) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.ContextBase.runOnContext(ContextBase.java:218) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.DeploymentManager.doDeploy(DeploymentManager.java:191) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.DeploymentManager.doDeploy(DeploymentManager.java:167) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.DeploymentManager.deployVerticle(DeploymentManager.java:72) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.VertxImpl.deployVerticle(VertxImpl.java:708) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.VertxImpl.deployVerticle(VertxImpl.java:688) ~[vertx-core-4.3.4.jar:4.3.4] + at com.hisense.dahua_video.MainVerticle.deployVerticles(MainVerticle.kt:120) ~[classes/:?] + at com.hisense.dahua_video.MainVerticle.start$lambda$4(MainVerticle.kt:74) ~[classes/:?] + at com.hisense.dahua_video.MainVerticle$$Lambda$172/0x00000001002b0040.handle(Unknown Source) ~[?:?] + at io.vertx.core.impl.future.FutureImpl$3.onSuccess(FutureImpl.java:141) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl$ListenerArray.onSuccess(FutureImpl.java:262) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Mapping.onSuccess(Mapping.java:40) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Mapping.onSuccess(Mapping.java:40) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.CompositeFutureImpl.trySucceed(CompositeFutureImpl.java:163) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.CompositeFutureImpl.lambda$all$0(CompositeFutureImpl.java:38) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.CompositeFutureImpl$$Lambda$180/0x00000001002b7c40.handle(Unknown Source) ~[?:?] + at io.vertx.core.impl.future.FutureImpl$3.onSuccess(FutureImpl.java:141) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Composition$1.onSuccess(Composition.java:62) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.SucceededFuture.addListener(SucceededFuture.java:88) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Composition.onSuccess(Composition.java:43) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Composition$1.onSuccess(Composition.java:62) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.addListener(FutureImpl.java:196) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.PromiseImpl.addListener(PromiseImpl.java:23) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Composition.onSuccess(Composition.java:43) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl$ListenerArray.onSuccess(FutureImpl.java:262) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.lambda$emitSuccess$0(FutureBase.java:54) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase$$Lambda$160/0x00000001002a8840.run(Unknown Source) ~[?:?] + at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174) ~[netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167) ~[netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470) ~[netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569) ~[netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) ~[netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.82.Final.jar:4.1.82.Final] + at java.lang.Thread.run(Thread.java:834) ~[?:?] +2022-11-16 19:41:56,967 INFO [com.hisense.dahua_video.verticle.OrganizationVerticle]-[vert.x-eventloop-thread-16] devicesManagerUtil 创建成功! +2022-11-16 19:41:56,967 INFO [com.hisense.dahua_video.verticle.MonitorVerticle]-[vert.x-eventloop-thread-17] monitorSessionUtil 创建成功! +2022-11-16 19:41:56,968 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-31] 部署 MonitorVerticle 成功! +2022-11-16 19:41:56,968 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-31] 部署 OrganizationVerticle 成功! +2022-11-16 19:41:57,535 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-13] http 服务监听端口: 8883 +2022-11-16 19:41:57,535 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-3] http 服务监听端口: 8883 +2022-11-16 19:41:58,044 INFO [com.hisense.dahua_video.dao.MonitorUserTokenDao]-[vert.x-eventloop-thread-2] 有效token:[] +2022-11-16 19:41:58,138 INFO [com.hisense.dahua_video.util.MonitorSessionUtil]-[vert.x-eventloop-thread-17] authorize:{"userName":"ynszdz","password":"Admin@123","monitorDomain":"http://10.132.191.3:8314","id":1} +2022-11-16 19:41:58,141 INFO [com.hisense.dahua_video.util.MonitorSessionUtil]-[vert.x-eventloop-thread-17] domain: 10.132.191.3 port:8314 +2022-11-16 19:41:58,910 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-3] 开放管理员后台 +2022-11-16 19:41:58,910 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-13] 开放管理员后台 +2022-11-16 19:41:58,911 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-9] http 服务监听端口: 8883 +2022-11-16 19:41:58,911 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-14] http 服务监听端口: 8883 +2022-11-16 19:41:58,912 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-5] http 服务监听端口: 8883 +2022-11-16 19:41:58,912 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-0] http 服务监听端口: 8883 +2022-11-16 19:41:58,912 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-7] http 服务监听端口: 8883 +2022-11-16 19:41:58,912 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-15] http 服务监听端口: 8883 +2022-11-16 19:41:58,913 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-8] http 服务监听端口: 8883 +2022-11-16 19:41:58,913 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-6] http 服务监听端口: 8883 +2022-11-16 19:41:58,913 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-1] http 服务监听端口: 8883 +2022-11-16 19:41:58,913 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-10] http 服务监听端口: 8883 +2022-11-16 19:41:58,913 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-12] http 服务监听端口: 8883 +2022-11-16 19:41:58,913 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-4] http 服务监听端口: 8883 +2022-11-16 19:41:58,914 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-9] 开放管理员后台 +2022-11-16 19:41:58,914 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-5] 开放管理员后台 +2022-11-16 19:41:58,914 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-14] 开放管理员后台 +2022-11-16 19:41:58,914 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-15] 开放管理员后台 +2022-11-16 19:41:58,914 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-0] 开放管理员后台 +2022-11-16 19:41:58,914 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-7] 开放管理员后台 +2022-11-16 19:41:58,915 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-6] 开放管理员后台 +2022-11-16 19:41:58,915 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-8] 开放管理员后台 +2022-11-16 19:41:58,915 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-11] http 服务监听端口: 8883 +2022-11-16 19:41:58,915 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-10] 开放管理员后台 +2022-11-16 19:41:58,915 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-1] 开放管理员后台 +2022-11-16 19:41:58,915 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-12] 开放管理员后台 +2022-11-16 19:41:58,915 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-2] http 服务监听端口: 8883 +2022-11-16 19:41:58,915 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-4] 开放管理员后台 +2022-11-16 19:41:58,915 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-31] 部署 WebAPIVerticle 成功! +2022-11-16 19:41:58,915 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-11] 开放管理员后台 +2022-11-16 19:41:58,915 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-2] 开放管理员后台 diff --git a/logs/app.log.20221117-1 b/logs/app.log.20221117-1 new file mode 100644 index 0000000..f1df5c4 --- /dev/null +++ b/logs/app.log.20221117-1 @@ -0,0 +1,390 @@ +2022-11-17 17:30:57,217 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 开始创表2022-11-17T17:30:57.216725700 +2022-11-17 17:30:57,259 INFO [com.zaxxer.hikari.HikariDataSource]-[vert.x-eventloop-thread-1] HikariPool-1 - Starting... +2022-11-17 17:30:59,461 WARN [io.vertx.core.impl.BlockedThreadChecker]-[vertx-blocked-thread-checker] Thread Thread[vert.x-eventloop-thread-1,5,main] has been blocked for 2464 ms, time limit is 2000 ms +2022-11-17 17:31:00,462 WARN [io.vertx.core.impl.BlockedThreadChecker]-[vertx-blocked-thread-checker] Thread Thread[vert.x-eventloop-thread-1,5,main] has been blocked for 3464 ms, time limit is 2000 ms +2022-11-17 17:31:00,623 INFO [com.zaxxer.hikari.HikariDataSource]-[vert.x-eventloop-thread-1] HikariPool-1 - Start completed. +2022-11-17 17:31:01,462 WARN [io.vertx.core.impl.BlockedThreadChecker]-[vertx-blocked-thread-checker] Thread Thread[vert.x-eventloop-thread-1,5,main] has been blocked for 4465 ms, time limit is 2000 ms +2022-11-17 17:31:02,092 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 连接完成2022-11-17T17:31:02.092679800 +2022-11-17 17:31:02,462 WARN [io.vertx.core.impl.BlockedThreadChecker]-[vertx-blocked-thread-checker] Thread Thread[vert.x-eventloop-thread-1,5,main] has been blocked for 5465 ms, time limit is 2000 ms +io.vertx.core.VertxException: Thread blocked + at java.io.RandomAccessFile.readBytes(Native Method) ~[?:?] + at java.io.RandomAccessFile.read(RandomAccessFile.java:407) ~[?:?] + at java.util.zip.ZipFile$Source.readAt(ZipFile.java:1343) ~[?:?] + at java.util.zip.ZipFile$ZipFileInputStream.read(ZipFile.java:1021) ~[?:?] + at java.util.zip.ZipFile$ZipFileInflaterInputStream.fill(ZipFile.java:469) ~[?:?] + at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:159) ~[?:?] + at jdk.internal.loader.Resource.getBytes(Resource.java:124) ~[?:?] + at jdk.internal.loader.URLClassPath$JarLoader$2.getBytes(URLClassPath.java:884) ~[?:?] + at jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:797) ~[?:?] + at jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:698) ~[?:?] + at jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:621) ~[?:?] + at jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579) ~[?:?] + at jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) ~[?:?] + at java.lang.ClassLoader.loadClass(ClassLoader.java:521) ~[?:?] + at org.jetbrains.exposed.sql.statements.jdbc.JdbcDatabaseMetadataImpl.tableNamesFor(JdbcDatabaseMetadataImpl.kt:100) ~[exposed-jdbc-0.40.1.jar:?] + at org.jetbrains.exposed.sql.statements.jdbc.JdbcDatabaseMetadataImpl.access$tableNamesFor(JdbcDatabaseMetadataImpl.kt:18) ~[exposed-jdbc-0.40.1.jar:?] + at org.jetbrains.exposed.sql.statements.jdbc.JdbcDatabaseMetadataImpl$tableNames$1.invoke(JdbcDatabaseMetadataImpl.kt:95) ~[exposed-jdbc-0.40.1.jar:?] + at org.jetbrains.exposed.sql.statements.jdbc.JdbcDatabaseMetadataImpl$tableNames$1.invoke(JdbcDatabaseMetadataImpl.kt:94) ~[exposed-jdbc-0.40.1.jar:?] + at org.jetbrains.exposed.sql.statements.jdbc.JdbcDatabaseMetadataImpl$CachableMapWithDefault.get(JdbcDatabaseMetadataImpl.kt:87) ~[exposed-jdbc-0.40.1.jar:?] + at kotlin.collections.MapsKt__MapWithDefaultKt.getOrImplicitDefaultNullable(MapWithDefault.kt:105) ~[kotlin-stdlib-1.7.20.jar:1.7.20-release-201(1.7.20)] + at kotlin.collections.MapsKt__MapsKt.getValue(Maps.kt:348) ~[kotlin-stdlib-1.7.20.jar:1.7.20-release-201(1.7.20)] + at org.jetbrains.exposed.sql.vendors.VendorDialect.tableExists(Default.kt:760) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.QueriesKt.exists(Queries.kt:238) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.SchemaUtils.createStatements(SchemaUtils.kt:96) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.SchemaUtils.create(SchemaUtils.kt:258) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.SchemaUtils.create$default(SchemaUtils.kt:256) ~[exposed-core-0.40.1.jar:?] + at com.hisense.dahua_video.MainVerticle$exposed$1.invoke(MainVerticle.kt:157) ~[classes/:?] + at com.hisense.dahua_video.MainVerticle$exposed$1.invoke(MainVerticle.kt:155) ~[classes/:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.inTopLevelTransaction$run(ThreadLocalTransactionManager.kt:214) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.access$inTopLevelTransaction$run(ThreadLocalTransactionManager.kt:1) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt$inTopLevelTransaction$1.invoke(ThreadLocalTransactionManager.kt:240) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.keepAndRestoreTransactionRefAfterRun(ThreadLocalTransactionManager.kt:248) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.inTopLevelTransaction(ThreadLocalTransactionManager.kt:239) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt$transaction$1.invoke(ThreadLocalTransactionManager.kt:189) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.keepAndRestoreTransactionRefAfterRun(ThreadLocalTransactionManager.kt:248) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.transaction(ThreadLocalTransactionManager.kt:159) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.transaction(ThreadLocalTransactionManager.kt:146) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.transaction$default(ThreadLocalTransactionManager.kt:145) ~[exposed-core-0.40.1.jar:?] + at com.hisense.dahua_video.MainVerticle.exposed(MainVerticle.kt:155) ~[classes/:?] + at com.hisense.dahua_video.MainVerticle.start$lambda$4(MainVerticle.kt:50) ~[classes/:?] + at com.hisense.dahua_video.MainVerticle$$Lambda$172/0x00000001002b0040.handle(Unknown Source) ~[?:?] + at io.vertx.core.impl.future.FutureImpl$3.onSuccess(FutureImpl.java:141) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl$ListenerArray.onSuccess(FutureImpl.java:262) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Mapping.onSuccess(Mapping.java:40) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Mapping.onSuccess(Mapping.java:40) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.CompositeFutureImpl.trySucceed(CompositeFutureImpl.java:163) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.CompositeFutureImpl.lambda$all$0(CompositeFutureImpl.java:38) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.CompositeFutureImpl$$Lambda$180/0x00000001002b7c40.handle(Unknown Source) ~[?:?] + at io.vertx.core.impl.future.FutureImpl$3.onSuccess(FutureImpl.java:141) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Composition$1.onSuccess(Composition.java:62) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.SucceededFuture.addListener(SucceededFuture.java:88) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Composition.onSuccess(Composition.java:43) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Composition$1.onSuccess(Composition.java:62) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.addListener(FutureImpl.java:196) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.PromiseImpl.addListener(PromiseImpl.java:23) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Composition.onSuccess(Composition.java:43) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl$ListenerArray.onSuccess(FutureImpl.java:262) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.lambda$emitSuccess$0(FutureBase.java:54) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase$$Lambda$160/0x00000001002a8840.run(Unknown Source) ~[?:?] + at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174) ~[netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167) ~[netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470) ~[netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569) ~[netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) ~[netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.82.Final.jar:4.1.82.Final] + at java.lang.Thread.run(Thread.java:834) ~[?:?] +2022-11-17 17:31:02,689 INFO [Exposed]-[vert.x-eventloop-thread-1] Preparing create tables statements took 1ms +2022-11-17 17:31:02,689 INFO [Exposed]-[vert.x-eventloop-thread-1] Executing create tables statements took 0ms +2022-11-17 17:31:02,698 INFO [Exposed]-[vert.x-eventloop-thread-1] Extracting table columns took 8ms +2022-11-17 17:31:02,699 INFO [Exposed]-[vert.x-eventloop-thread-1] Preparing alter table statements took 9ms +2022-11-17 17:31:02,699 INFO [Exposed]-[vert.x-eventloop-thread-1] Executing alter table statements took 0ms +2022-11-17 17:31:02,742 INFO [Exposed]-[vert.x-eventloop-thread-1] Index on table 'sys_monitor_user' differs only in name: in db sys_monitor_user_userName -> in mapping sys_monitor_user_userName_unique +2022-11-17 17:31:02,743 INFO [Exposed]-[vert.x-eventloop-thread-1] Index on table 'sys_user' differs only in name: in db sys_user_userName -> in mapping sys_user_userName_unique +2022-11-17 17:31:02,744 INFO [Exposed]-[vert.x-eventloop-thread-1] Index on table 'sys_organization' differs only in name: in db sys_organization_org_id -> in mapping sys_organization_org_id_unique +2022-11-17 17:31:02,744 INFO [Exposed]-[vert.x-eventloop-thread-1] Checking mapping consistence took 45ms +2022-11-17 17:31:02,744 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 创表成功2022-11-17T17:31:02.744934600 +2022-11-17 17:31:02,798 WARN [io.vertx.core.impl.VertxImpl]-[vert.x-eventloop-thread-1] You're already on a Vert.x context, are you sure you want to create a new Vertx instance? +2022-11-17 17:31:02,839 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 无集群配置,进行单节点部署! +2022-11-17 17:31:02,839 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] vertx.isNativeTransportEnabled:false +2022-11-17 17:31:02,839 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 截图根目录:/mnts/record/\ +2022-11-17 17:31:03,347 INFO [com.hisense.dahua_video.verticle.MonitorVerticle]-[vert.x-eventloop-thread-16] monitorSessionUtil 创建成功! +2022-11-17 17:31:03,348 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-31] 部署 MonitorVerticle 成功! +2022-11-17 17:31:03,348 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-31] 部署 OrganizationVerticle 成功! +2022-11-17 17:31:03,444 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-31] 部署 SqlFactoryVerticle 成功! +2022-11-17 17:31:03,554 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-5] http 服务监听端口: 8883 +2022-11-17 17:31:03,554 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-8] http 服务监听端口: 8883 +2022-11-17 17:31:03,554 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-0] http 服务监听端口: 8883 +2022-11-17 17:31:03,554 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-3] http 服务监听端口: 8883 +2022-11-17 17:31:04,145 INFO [com.hisense.dahua_video.util.MonitorSessionUtil]-[vert.x-eventloop-thread-16] authorize:{"userName":"ynszdz","password":"Admin@123","monitorDomain":"http://10.132.191.3:8314","id":1} +2022-11-17 17:31:04,149 INFO [com.hisense.dahua_video.util.MonitorSessionUtil]-[vert.x-eventloop-thread-16] domain: 10.132.191.3 port:8314 +2022-11-17 17:31:04,278 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-0] 开放管理员后台 +2022-11-17 17:31:04,278 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-3] 开放管理员后台 +2022-11-17 17:31:04,278 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-5] 开放管理员后台 +2022-11-17 17:31:04,278 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-8] 开放管理员后台 +2022-11-17 17:31:04,280 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-4] http 服务监听端口: 8883 +2022-11-17 17:31:04,280 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-7] http 服务监听端口: 8883 +2022-11-17 17:31:04,280 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-1] http 服务监听端口: 8883 +2022-11-17 17:31:04,280 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-9] http 服务监听端口: 8883 +2022-11-17 17:31:04,281 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-10] http 服务监听端口: 8883 +2022-11-17 17:31:04,281 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-15] http 服务监听端口: 8883 +2022-11-17 17:31:04,281 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-14] http 服务监听端口: 8883 +2022-11-17 17:31:04,282 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-2] http 服务监听端口: 8883 +2022-11-17 17:31:04,282 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-13] http 服务监听端口: 8883 +2022-11-17 17:31:04,282 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-9] 开放管理员后台 +2022-11-17 17:31:04,282 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-7] 开放管理员后台 +2022-11-17 17:31:04,282 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-4] 开放管理员后台 +2022-11-17 17:31:04,282 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-6] http 服务监听端口: 8883 +2022-11-17 17:31:04,282 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-1] 开放管理员后台 +2022-11-17 17:31:04,283 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-10] 开放管理员后台 +2022-11-17 17:31:04,283 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-12] http 服务监听端口: 8883 +2022-11-17 17:31:04,283 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-15] 开放管理员后台 +2022-11-17 17:31:04,283 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-11] http 服务监听端口: 8883 +2022-11-17 17:31:04,283 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-13] 开放管理员后台 +2022-11-17 17:31:04,283 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-31] 部署 WebAPIVerticle 成功! +2022-11-17 17:31:04,283 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-14] 开放管理员后台 +2022-11-17 17:31:04,284 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-2] 开放管理员后台 +2022-11-17 17:31:04,284 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-6] 开放管理员后台 +2022-11-17 17:31:04,284 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-11] 开放管理员后台 +2022-11-17 17:31:04,284 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-12] 开放管理员后台 +2022-11-17 17:31:25,468 ERROR [com.hisense.dahua_video.util.MonitorSessionUtil]-[vert.x-eventloop-thread-16] 创建会话失败 +io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection timed out: no further information: /10.132.191.3:8314 +Caused by: java.net.ConnectException: Connection timed out: no further information + at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) ~[?:?] + at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:779) ~[?:?] + at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:337) ~[netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:334) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:776) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at java.lang.Thread.run(Thread.java:834) [?:?] +2022-11-17 17:36:31,146 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 开始创表2022-11-17T17:36:31.144833 +2022-11-17 17:36:31,214 INFO [com.zaxxer.hikari.HikariDataSource]-[vert.x-eventloop-thread-1] HikariPool-1 - Starting... +2022-11-17 17:36:31,406 INFO [com.zaxxer.hikari.HikariDataSource]-[vert.x-eventloop-thread-1] HikariPool-1 - Start completed. +2022-11-17 17:36:31,412 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 连接完成2022-11-17T17:36:31.412117800 +2022-11-17 17:36:31,744 INFO [Exposed]-[vert.x-eventloop-thread-1] Preparing create tables statements took 1ms +2022-11-17 17:36:31,745 INFO [Exposed]-[vert.x-eventloop-thread-1] Executing create tables statements took 0ms +2022-11-17 17:36:31,757 INFO [Exposed]-[vert.x-eventloop-thread-1] Extracting table columns took 11ms +2022-11-17 17:36:31,758 INFO [Exposed]-[vert.x-eventloop-thread-1] Preparing alter table statements took 13ms +2022-11-17 17:36:31,758 INFO [Exposed]-[vert.x-eventloop-thread-1] Executing alter table statements took 0ms +2022-11-17 17:36:31,819 INFO [Exposed]-[vert.x-eventloop-thread-1] Index on table 'sys_monitor_user' differs only in name: in db sys_monitor_user_userName -> in mapping sys_monitor_user_userName_unique +2022-11-17 17:36:31,820 INFO [Exposed]-[vert.x-eventloop-thread-1] Index on table 'sys_user' differs only in name: in db sys_user_userName -> in mapping sys_user_userName_unique +2022-11-17 17:36:31,821 INFO [Exposed]-[vert.x-eventloop-thread-1] Index on table 'sys_organization' differs only in name: in db sys_organization_org_id -> in mapping sys_organization_org_id_unique +2022-11-17 17:36:31,821 INFO [Exposed]-[vert.x-eventloop-thread-1] Checking mapping consistence took 63ms +2022-11-17 17:36:31,821 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 创表成功2022-11-17T17:36:31.821032200 +2022-11-17 17:36:31,868 WARN [io.vertx.core.impl.VertxImpl]-[vert.x-eventloop-thread-1] You're already on a Vert.x context, are you sure you want to create a new Vertx instance? +2022-11-17 17:36:31,886 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 无集群配置,进行单节点部署! +2022-11-17 17:36:31,887 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] vertx.isNativeTransportEnabled:false +2022-11-17 17:36:31,887 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 截图根目录:/mnts/record/\ +2022-11-17 17:36:32,163 INFO [com.hisense.dahua_video.verticle.MonitorVerticle]-[vert.x-eventloop-thread-24] monitorSessionUtil 创建成功! +2022-11-17 17:36:32,164 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-31] 部署 MonitorVerticle 成功! +2022-11-17 17:36:32,164 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-31] 部署 OrganizationVerticle 成功! +2022-11-17 17:36:32,203 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-31] 部署 SqlFactoryVerticle 成功! +2022-11-17 17:36:32,300 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-13] http 服务监听端口: 8883 +2022-11-17 17:36:32,492 INFO [com.hisense.dahua_video.util.MonitorSessionUtil]-[vert.x-eventloop-thread-24] authorize:{"userName":"ynszdz","password":"Admin@123","monitorDomain":"http://10.132.191.3:8314","id":1} +2022-11-17 17:36:32,496 INFO [com.hisense.dahua_video.util.MonitorSessionUtil]-[vert.x-eventloop-thread-24] domain: 10.132.191.3 port:8314 +2022-11-17 17:36:32,788 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-13] 开放管理员后台 +2022-11-17 17:36:32,789 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-12] http 服务监听端口: 8883 +2022-11-17 17:36:32,789 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-10] http 服务监听端口: 8883 +2022-11-17 17:36:32,789 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-9] http 服务监听端口: 8883 +2022-11-17 17:36:32,789 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-7] http 服务监听端口: 8883 +2022-11-17 17:36:32,789 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-8] http 服务监听端口: 8883 +2022-11-17 17:36:32,790 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-3] http 服务监听端口: 8883 +2022-11-17 17:36:32,790 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-0] http 服务监听端口: 8883 +2022-11-17 17:36:32,790 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-11] http 服务监听端口: 8883 +2022-11-17 17:36:32,790 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-5] http 服务监听端口: 8883 +2022-11-17 17:36:32,791 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-6] http 服务监听端口: 8883 +2022-11-17 17:36:32,791 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-4] http 服务监听端口: 8883 +2022-11-17 17:36:32,790 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-15] http 服务监听端口: 8883 +2022-11-17 17:36:32,791 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-1] http 服务监听端口: 8883 +2022-11-17 17:36:32,791 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-14] http 服务监听端口: 8883 +2022-11-17 17:36:32,792 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-7] 开放管理员后台 +2022-11-17 17:36:32,792 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-10] 开放管理员后台 +2022-11-17 17:36:32,792 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-2] http 服务监听端口: 8883 +2022-11-17 17:36:32,792 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-31] 部署 WebAPIVerticle 成功! +2022-11-17 17:36:32,792 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-8] 开放管理员后台 +2022-11-17 17:36:32,792 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-9] 开放管理员后台 +2022-11-17 17:36:32,793 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-12] 开放管理员后台 +2022-11-17 17:36:32,793 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-3] 开放管理员后台 +2022-11-17 17:36:32,793 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-11] 开放管理员后台 +2022-11-17 17:36:32,793 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-4] 开放管理员后台 +2022-11-17 17:36:32,793 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-6] 开放管理员后台 +2022-11-17 17:36:32,793 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-5] 开放管理员后台 +2022-11-17 17:36:32,793 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-0] 开放管理员后台 +2022-11-17 17:36:32,793 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-1] 开放管理员后台 +2022-11-17 17:36:32,793 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-14] 开放管理员后台 +2022-11-17 17:36:32,793 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-2] 开放管理员后台 +2022-11-17 17:36:32,793 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-15] 开放管理员后台 +2022-11-17 17:36:53,874 ERROR [com.hisense.dahua_video.util.MonitorSessionUtil]-[vert.x-eventloop-thread-24] 创建会话失败 +io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection timed out: no further information: /10.132.191.3:8314 +Caused by: java.net.ConnectException: Connection timed out: no further information + at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) ~[?:?] + at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:779) ~[?:?] + at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:337) ~[netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:334) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:776) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at java.lang.Thread.run(Thread.java:834) [?:?] +2022-11-17 17:48:13,468 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 开始创表2022-11-17T17:48:13.466077500 +2022-11-17 17:48:13,535 INFO [com.zaxxer.hikari.HikariDataSource]-[vert.x-eventloop-thread-1] HikariPool-1 - Starting... +2022-11-17 17:48:13,733 INFO [com.zaxxer.hikari.HikariDataSource]-[vert.x-eventloop-thread-1] HikariPool-1 - Start completed. +2022-11-17 17:48:13,740 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 连接完成2022-11-17T17:48:13.740377900 +2022-11-17 17:48:13,872 INFO [Exposed]-[vert.x-eventloop-thread-1] Preparing create tables statements took 0ms +2022-11-17 17:48:13,873 INFO [Exposed]-[vert.x-eventloop-thread-1] Executing create tables statements took 0ms +2022-11-17 17:48:13,879 INFO [Exposed]-[vert.x-eventloop-thread-1] Extracting table columns took 5ms +2022-11-17 17:48:13,879 INFO [Exposed]-[vert.x-eventloop-thread-1] Preparing alter table statements took 5ms +2022-11-17 17:48:13,879 INFO [Exposed]-[vert.x-eventloop-thread-1] Executing alter table statements took 0ms +2022-11-17 17:48:13,949 INFO [Exposed]-[vert.x-eventloop-thread-1] Index on table 'sys_monitor_user' differs only in name: in db sys_monitor_user_userName -> in mapping sys_monitor_user_userName_unique +2022-11-17 17:48:13,954 INFO [Exposed]-[vert.x-eventloop-thread-1] Index on table 'sys_user' differs only in name: in db sys_user_userName -> in mapping sys_user_userName_unique +2022-11-17 17:48:13,954 INFO [Exposed]-[vert.x-eventloop-thread-1] Index on table 'sys_organization' differs only in name: in db sys_organization_org_id -> in mapping sys_organization_org_id_unique +2022-11-17 17:48:13,955 INFO [Exposed]-[vert.x-eventloop-thread-1] Checking mapping consistence took 75ms +2022-11-17 17:48:13,955 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 创表成功2022-11-17T17:48:13.955767600 +2022-11-17 17:48:14,016 WARN [io.vertx.core.impl.VertxImpl]-[vert.x-eventloop-thread-1] You're already on a Vert.x context, are you sure you want to create a new Vertx instance? +2022-11-17 17:48:14,035 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 无集群配置,进行单节点部署! +2022-11-17 17:48:14,035 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] vertx.isNativeTransportEnabled:false +2022-11-17 17:48:14,035 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 截图根目录:/mnts/record/\ +2022-11-17 17:48:14,336 INFO [com.hisense.dahua_video.verticle.MonitorVerticle]-[vert.x-eventloop-thread-16] monitorSessionUtil 创建成功! +2022-11-17 17:48:14,337 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-31] 部署 MonitorVerticle 成功! +2022-11-17 17:48:14,337 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-31] 部署 OrganizationVerticle 成功! +2022-11-17 17:48:14,346 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-31] 部署 SqlFactoryVerticle 成功! +2022-11-17 17:48:14,446 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-4] http 服务监听端口: 8883 +2022-11-17 17:48:14,446 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-2] http 服务监听端口: 8883 +2022-11-17 17:48:14,446 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-3] http 服务监听端口: 8883 +2022-11-17 17:48:14,446 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-1] http 服务监听端口: 8883 +2022-11-17 17:48:14,446 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-0] http 服务监听端口: 8883 +2022-11-17 17:48:14,446 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-6] http 服务监听端口: 8883 +2022-11-17 17:48:14,446 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-15] http 服务监听端口: 8883 +2022-11-17 17:48:14,446 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-12] http 服务监听端口: 8883 +2022-11-17 17:48:14,604 INFO [com.hisense.dahua_video.util.MonitorSessionUtil]-[vert.x-eventloop-thread-16] authorize:{"userName":"ynszdz","password":"Admin@123","monitorDomain":"http://10.132.191.3:8314","id":1} +2022-11-17 17:48:14,608 INFO [com.hisense.dahua_video.util.MonitorSessionUtil]-[vert.x-eventloop-thread-16] domain: 10.132.191.3 port:8314 +2022-11-17 17:48:14,887 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-12] 开放管理员后台 +2022-11-17 17:48:14,887 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-4] 开放管理员后台 +2022-11-17 17:48:14,887 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-3] 开放管理员后台 +2022-11-17 17:48:14,887 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-15] 开放管理员后台 +2022-11-17 17:48:14,887 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-0] 开放管理员后台 +2022-11-17 17:48:14,887 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-6] 开放管理员后台 +2022-11-17 17:48:14,887 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-1] 开放管理员后台 +2022-11-17 17:48:14,887 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-2] 开放管理员后台 +2022-11-17 17:48:14,889 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-7] http 服务监听端口: 8883 +2022-11-17 17:48:14,889 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-14] http 服务监听端口: 8883 +2022-11-17 17:48:14,889 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-5] http 服务监听端口: 8883 +2022-11-17 17:48:14,889 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-10] http 服务监听端口: 8883 +2022-11-17 17:48:14,890 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-13] http 服务监听端口: 8883 +2022-11-17 17:48:14,890 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-11] http 服务监听端口: 8883 +2022-11-17 17:48:14,891 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-9] http 服务监听端口: 8883 +2022-11-17 17:48:14,891 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-8] http 服务监听端口: 8883 +2022-11-17 17:48:14,891 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-31] 部署 WebAPIVerticle 成功! +2022-11-17 17:48:14,891 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-13] 开放管理员后台 +2022-11-17 17:48:14,891 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-7] 开放管理员后台 +2022-11-17 17:48:14,891 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-10] 开放管理员后台 +2022-11-17 17:48:14,891 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-11] 开放管理员后台 +2022-11-17 17:48:14,891 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-14] 开放管理员后台 +2022-11-17 17:48:14,891 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-5] 开放管理员后台 +2022-11-17 17:48:14,891 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-9] 开放管理员后台 +2022-11-17 17:48:14,892 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-8] 开放管理员后台 +2022-11-17 17:48:25,756 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 17:48:35,955 ERROR [com.hisense.dahua_video.util.MonitorSessionUtil]-[vert.x-eventloop-thread-16] 创建会话失败 +io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection timed out: no further information: /10.132.191.3:8314 +Caused by: java.net.ConnectException: Connection timed out: no further information + at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) ~[?:?] + at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:779) ~[?:?] + at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:337) ~[netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:334) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:776) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at java.lang.Thread.run(Thread.java:834) [?:?] +2022-11-17 17:50:16,982 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 17:50:21,546 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 17:50:22,293 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 17:50:22,902 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 17:50:23,491 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 17:50:24,055 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 17:50:24,601 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 17:50:25,289 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 17:50:25,977 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 17:50:26,606 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 17:50:27,151 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 17:50:27,719 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 17:50:28,173 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 17:50:28,665 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 17:50:29,261 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 17:50:29,877 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 17:50:30,439 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 17:57:36,224 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 17:57:45,993 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 17:57:54,553 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 17:57:57,985 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 17:58:00,441 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 17:58:02,450 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:03:36,673 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:03:39,177 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:03:46,102 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:03:46,873 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:03:47,679 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:03:48,497 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:03:49,209 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:03:49,948 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:03:51,433 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:03:52,116 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:03:52,702 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:03:53,184 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:03:53,737 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:10:21,093 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:10:24,737 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:11:13,736 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:11:17,336 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:11:26,546 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:11:28,977 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:11:31,105 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:11:33,111 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:11:34,928 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:11:37,456 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:11:39,648 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:11:42,656 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:11:44,424 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:11:45,717 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:11:46,745 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:11:47,397 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:11:47,955 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:11:48,555 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:11:50,743 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:11:51,887 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:11:52,868 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:11:54,288 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:11:54,897 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:11:55,464 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:11:56,061 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:19:05,537 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:19:10,229 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:19:34,698 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:19:42,922 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:19:44,361 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:19:45,441 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:19:46,264 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:19:46,937 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:19:51,201 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:19:51,818 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:19:52,267 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:19:52,693 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:19:53,124 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:19:57,515 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:19:58,560 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:19:59,185 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:20:50,756 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:26:54,825 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:26:56,896 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:26:58,263 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:26:58,999 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:26:59,532 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:27:00,023 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:27:00,537 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:27:01,052 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:27:01,757 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:27:02,375 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} +2022-11-17 18:27:03,937 INFO [com.hisense.dahua_video.dao.SysUserDao]-[vert.x-eventloop-thread-9] checkLogin:{"userName":"liwen","password":"password"} diff --git a/logs/app.log.20221118-1 b/logs/app.log.20221118-1 new file mode 100644 index 0000000..5939dcb --- /dev/null +++ b/logs/app.log.20221118-1 @@ -0,0 +1,369 @@ +2022-11-18 16:16:16,528 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 开始创表2022-11-18T16:16:16.527701600 +2022-11-18 16:16:16,582 INFO [com.zaxxer.hikari.HikariDataSource]-[vert.x-eventloop-thread-1] HikariPool-1 - Starting... +2022-11-18 16:16:17,993 INFO [com.zaxxer.hikari.HikariDataSource]-[vert.x-eventloop-thread-1] HikariPool-1 - Start completed. +2022-11-18 16:16:18,055 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 连接完成2022-11-18T16:16:18.055891600 +2022-11-18 16:16:18,155 INFO [Exposed]-[vert.x-eventloop-thread-1] Preparing create tables statements took 1ms +2022-11-18 16:16:18,155 INFO [Exposed]-[vert.x-eventloop-thread-1] Executing create tables statements took 0ms +2022-11-18 16:16:18,161 INFO [Exposed]-[vert.x-eventloop-thread-1] Extracting table columns took 5ms +2022-11-18 16:16:18,166 INFO [Exposed]-[vert.x-eventloop-thread-1] Preparing alter table statements took 10ms +2022-11-18 16:16:18,173 WARN [Exposed]-[vert.x-eventloop-thread-1] Transaction attempt #0 failed: java.sql.SQLException: Query returns results. Statement(s): ALTER TABLE sys_device ADD device_id TEXT NOT NULL +org.jetbrains.exposed.exceptions.ExposedSQLException: java.sql.SQLException: Query returns results + at org.jetbrains.exposed.sql.statements.Statement.executeIn$exposed_core(Statement.kt:64) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.Transaction.exec(Transaction.kt:140) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.Transaction.exec(Transaction.kt:126) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.Transaction.exec(Transaction.kt:108) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.Transaction.exec(Transaction.kt:94) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.Transaction.exec$default(Transaction.kt:93) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.SchemaUtils.execStatements(SchemaUtils.kt:251) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.SchemaUtils.createMissingTablesAndColumns(SchemaUtils.kt:321) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.SchemaUtils.createMissingTablesAndColumns$default(SchemaUtils.kt:306) ~[exposed-core-0.40.1.jar:?] + at com.hisense.dahua_video.MainVerticle$exposed$1.invoke(MainVerticle.kt:160) ~[classes/:?] + at com.hisense.dahua_video.MainVerticle$exposed$1.invoke(MainVerticle.kt:157) ~[classes/:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.inTopLevelTransaction$run(ThreadLocalTransactionManager.kt:214) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.access$inTopLevelTransaction$run(ThreadLocalTransactionManager.kt:1) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt$inTopLevelTransaction$1.invoke(ThreadLocalTransactionManager.kt:240) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.keepAndRestoreTransactionRefAfterRun(ThreadLocalTransactionManager.kt:248) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.inTopLevelTransaction(ThreadLocalTransactionManager.kt:239) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt$transaction$1.invoke(ThreadLocalTransactionManager.kt:189) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.keepAndRestoreTransactionRefAfterRun(ThreadLocalTransactionManager.kt:248) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.transaction(ThreadLocalTransactionManager.kt:159) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.transaction(ThreadLocalTransactionManager.kt:146) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.transaction$default(ThreadLocalTransactionManager.kt:145) ~[exposed-core-0.40.1.jar:?] + at com.hisense.dahua_video.MainVerticle.exposed(MainVerticle.kt:157) ~[classes/:?] + at com.hisense.dahua_video.MainVerticle.start$lambda$4(MainVerticle.kt:51) ~[classes/:?] + at io.vertx.core.impl.future.FutureImpl$3.onSuccess(FutureImpl.java:141) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl$ListenerArray.onSuccess(FutureImpl.java:262) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Mapping.onSuccess(Mapping.java:40) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Mapping.onSuccess(Mapping.java:40) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.CompositeFutureImpl.trySucceed(CompositeFutureImpl.java:163) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.CompositeFutureImpl.lambda$all$0(CompositeFutureImpl.java:38) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl$3.onSuccess(FutureImpl.java:141) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Composition$1.onSuccess(Composition.java:62) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.SucceededFuture.addListener(SucceededFuture.java:88) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Composition.onSuccess(Composition.java:43) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Composition$1.onSuccess(Composition.java:62) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.addListener(FutureImpl.java:196) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.PromiseImpl.addListener(PromiseImpl.java:23) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Composition.onSuccess(Composition.java:43) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl$ListenerArray.onSuccess(FutureImpl.java:262) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.lambda$emitSuccess$0(FutureBase.java:54) ~[vertx-core-4.3.4.jar:4.3.4] + at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at java.lang.Thread.run(Thread.java:834) [?:?] +Caused by: java.sql.SQLException: Query returns results + at org.sqlite.jdbc3.JDBC3PreparedStatement.executeLargeUpdate(JDBC3PreparedStatement.java:106) ~[sqlite-jdbc-3.39.4.0.jar:?] + at org.sqlite.jdbc3.JDBC3PreparedStatement.executeUpdate(JDBC3PreparedStatement.java:98) ~[sqlite-jdbc-3.39.4.0.jar:?] + at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeUpdate(ProxyPreparedStatement.java:61) ~[HikariCP-4.0.3.jar:?] + at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeUpdate(HikariProxyPreparedStatement.java) ~[HikariCP-4.0.3.jar:?] + at org.jetbrains.exposed.sql.statements.jdbc.JdbcPreparedStatementImpl.executeUpdate(JdbcPreparedStatementImpl.kt:26) ~[exposed-jdbc-0.40.1.jar:?] + at org.jetbrains.exposed.sql.Transaction$exec$2.executeInternal(Transaction.kt:113) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.statements.Statement.executeIn$exposed_core(Statement.kt:62) ~[exposed-core-0.40.1.jar:?] + ... 58 more +2022-11-18 16:16:18,185 INFO [Exposed]-[vert.x-eventloop-thread-1] Preparing create tables statements took 0ms +2022-11-18 16:16:18,185 INFO [Exposed]-[vert.x-eventloop-thread-1] Executing create tables statements took 0ms +2022-11-18 16:16:18,187 INFO [Exposed]-[vert.x-eventloop-thread-1] Extracting table columns took 2ms +2022-11-18 16:16:18,188 INFO [Exposed]-[vert.x-eventloop-thread-1] Preparing alter table statements took 3ms +2022-11-18 16:16:18,188 WARN [Exposed]-[vert.x-eventloop-thread-1] Transaction attempt #1 failed: java.sql.SQLException: Query returns results. Statement(s): ALTER TABLE sys_device ADD device_id TEXT NOT NULL +org.jetbrains.exposed.exceptions.ExposedSQLException: java.sql.SQLException: Query returns results + at org.jetbrains.exposed.sql.statements.Statement.executeIn$exposed_core(Statement.kt:64) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.Transaction.exec(Transaction.kt:140) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.Transaction.exec(Transaction.kt:126) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.Transaction.exec(Transaction.kt:108) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.Transaction.exec(Transaction.kt:94) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.Transaction.exec$default(Transaction.kt:93) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.SchemaUtils.execStatements(SchemaUtils.kt:251) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.SchemaUtils.createMissingTablesAndColumns(SchemaUtils.kt:321) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.SchemaUtils.createMissingTablesAndColumns$default(SchemaUtils.kt:306) ~[exposed-core-0.40.1.jar:?] + at com.hisense.dahua_video.MainVerticle$exposed$1.invoke(MainVerticle.kt:160) ~[classes/:?] + at com.hisense.dahua_video.MainVerticle$exposed$1.invoke(MainVerticle.kt:157) ~[classes/:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.inTopLevelTransaction$run(ThreadLocalTransactionManager.kt:214) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.access$inTopLevelTransaction$run(ThreadLocalTransactionManager.kt:1) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt$inTopLevelTransaction$1.invoke(ThreadLocalTransactionManager.kt:240) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.keepAndRestoreTransactionRefAfterRun(ThreadLocalTransactionManager.kt:248) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.inTopLevelTransaction(ThreadLocalTransactionManager.kt:239) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt$transaction$1.invoke(ThreadLocalTransactionManager.kt:189) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.keepAndRestoreTransactionRefAfterRun(ThreadLocalTransactionManager.kt:248) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.transaction(ThreadLocalTransactionManager.kt:159) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.transaction(ThreadLocalTransactionManager.kt:146) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.transaction$default(ThreadLocalTransactionManager.kt:145) ~[exposed-core-0.40.1.jar:?] + at com.hisense.dahua_video.MainVerticle.exposed(MainVerticle.kt:157) ~[classes/:?] + at com.hisense.dahua_video.MainVerticle.start$lambda$4(MainVerticle.kt:51) ~[classes/:?] + at io.vertx.core.impl.future.FutureImpl$3.onSuccess(FutureImpl.java:141) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl$ListenerArray.onSuccess(FutureImpl.java:262) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Mapping.onSuccess(Mapping.java:40) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Mapping.onSuccess(Mapping.java:40) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.CompositeFutureImpl.trySucceed(CompositeFutureImpl.java:163) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.CompositeFutureImpl.lambda$all$0(CompositeFutureImpl.java:38) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl$3.onSuccess(FutureImpl.java:141) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Composition$1.onSuccess(Composition.java:62) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.SucceededFuture.addListener(SucceededFuture.java:88) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Composition.onSuccess(Composition.java:43) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Composition$1.onSuccess(Composition.java:62) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.addListener(FutureImpl.java:196) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.PromiseImpl.addListener(PromiseImpl.java:23) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Composition.onSuccess(Composition.java:43) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl$ListenerArray.onSuccess(FutureImpl.java:262) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.lambda$emitSuccess$0(FutureBase.java:54) ~[vertx-core-4.3.4.jar:4.3.4] + at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at java.lang.Thread.run(Thread.java:834) [?:?] +Caused by: java.sql.SQLException: Query returns results + at org.sqlite.jdbc3.JDBC3PreparedStatement.executeLargeUpdate(JDBC3PreparedStatement.java:106) ~[sqlite-jdbc-3.39.4.0.jar:?] + at org.sqlite.jdbc3.JDBC3PreparedStatement.executeUpdate(JDBC3PreparedStatement.java:98) ~[sqlite-jdbc-3.39.4.0.jar:?] + at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeUpdate(ProxyPreparedStatement.java:61) ~[HikariCP-4.0.3.jar:?] + at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeUpdate(HikariProxyPreparedStatement.java) ~[HikariCP-4.0.3.jar:?] + at org.jetbrains.exposed.sql.statements.jdbc.JdbcPreparedStatementImpl.executeUpdate(JdbcPreparedStatementImpl.kt:26) ~[exposed-jdbc-0.40.1.jar:?] + at org.jetbrains.exposed.sql.Transaction$exec$2.executeInternal(Transaction.kt:113) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.statements.Statement.executeIn$exposed_core(Statement.kt:62) ~[exposed-core-0.40.1.jar:?] + ... 58 more +2022-11-18 16:16:18,190 INFO [Exposed]-[vert.x-eventloop-thread-1] Preparing create tables statements took 1ms +2022-11-18 16:16:18,190 INFO [Exposed]-[vert.x-eventloop-thread-1] Executing create tables statements took 0ms +2022-11-18 16:16:18,192 INFO [Exposed]-[vert.x-eventloop-thread-1] Extracting table columns took 2ms +2022-11-18 16:16:18,192 INFO [Exposed]-[vert.x-eventloop-thread-1] Preparing alter table statements took 2ms +2022-11-18 16:16:18,192 WARN [Exposed]-[vert.x-eventloop-thread-1] Transaction attempt #2 failed: java.sql.SQLException: Query returns results. Statement(s): ALTER TABLE sys_device ADD device_id TEXT NOT NULL +org.jetbrains.exposed.exceptions.ExposedSQLException: java.sql.SQLException: Query returns results + at org.jetbrains.exposed.sql.statements.Statement.executeIn$exposed_core(Statement.kt:64) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.Transaction.exec(Transaction.kt:140) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.Transaction.exec(Transaction.kt:126) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.Transaction.exec(Transaction.kt:108) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.Transaction.exec(Transaction.kt:94) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.Transaction.exec$default(Transaction.kt:93) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.SchemaUtils.execStatements(SchemaUtils.kt:251) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.SchemaUtils.createMissingTablesAndColumns(SchemaUtils.kt:321) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.SchemaUtils.createMissingTablesAndColumns$default(SchemaUtils.kt:306) ~[exposed-core-0.40.1.jar:?] + at com.hisense.dahua_video.MainVerticle$exposed$1.invoke(MainVerticle.kt:160) ~[classes/:?] + at com.hisense.dahua_video.MainVerticle$exposed$1.invoke(MainVerticle.kt:157) ~[classes/:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.inTopLevelTransaction$run(ThreadLocalTransactionManager.kt:214) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.access$inTopLevelTransaction$run(ThreadLocalTransactionManager.kt:1) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt$inTopLevelTransaction$1.invoke(ThreadLocalTransactionManager.kt:240) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.keepAndRestoreTransactionRefAfterRun(ThreadLocalTransactionManager.kt:248) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.inTopLevelTransaction(ThreadLocalTransactionManager.kt:239) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt$transaction$1.invoke(ThreadLocalTransactionManager.kt:189) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.keepAndRestoreTransactionRefAfterRun(ThreadLocalTransactionManager.kt:248) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.transaction(ThreadLocalTransactionManager.kt:159) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.transaction(ThreadLocalTransactionManager.kt:146) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.transaction$default(ThreadLocalTransactionManager.kt:145) ~[exposed-core-0.40.1.jar:?] + at com.hisense.dahua_video.MainVerticle.exposed(MainVerticle.kt:157) ~[classes/:?] + at com.hisense.dahua_video.MainVerticle.start$lambda$4(MainVerticle.kt:51) ~[classes/:?] + at io.vertx.core.impl.future.FutureImpl$3.onSuccess(FutureImpl.java:141) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl$ListenerArray.onSuccess(FutureImpl.java:262) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Mapping.onSuccess(Mapping.java:40) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Mapping.onSuccess(Mapping.java:40) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.CompositeFutureImpl.trySucceed(CompositeFutureImpl.java:163) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.CompositeFutureImpl.lambda$all$0(CompositeFutureImpl.java:38) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl$3.onSuccess(FutureImpl.java:141) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Composition$1.onSuccess(Composition.java:62) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.SucceededFuture.addListener(SucceededFuture.java:88) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Composition.onSuccess(Composition.java:43) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Composition$1.onSuccess(Composition.java:62) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.addListener(FutureImpl.java:196) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.PromiseImpl.addListener(PromiseImpl.java:23) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Composition.onSuccess(Composition.java:43) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl$ListenerArray.onSuccess(FutureImpl.java:262) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.lambda$emitSuccess$0(FutureBase.java:54) ~[vertx-core-4.3.4.jar:4.3.4] + at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at java.lang.Thread.run(Thread.java:834) [?:?] +Caused by: java.sql.SQLException: Query returns results + at org.sqlite.jdbc3.JDBC3PreparedStatement.executeLargeUpdate(JDBC3PreparedStatement.java:106) ~[sqlite-jdbc-3.39.4.0.jar:?] + at org.sqlite.jdbc3.JDBC3PreparedStatement.executeUpdate(JDBC3PreparedStatement.java:98) ~[sqlite-jdbc-3.39.4.0.jar:?] + at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeUpdate(ProxyPreparedStatement.java:61) ~[HikariCP-4.0.3.jar:?] + at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeUpdate(HikariProxyPreparedStatement.java) ~[HikariCP-4.0.3.jar:?] + at org.jetbrains.exposed.sql.statements.jdbc.JdbcPreparedStatementImpl.executeUpdate(JdbcPreparedStatementImpl.kt:26) ~[exposed-jdbc-0.40.1.jar:?] + at org.jetbrains.exposed.sql.Transaction$exec$2.executeInternal(Transaction.kt:113) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.statements.Statement.executeIn$exposed_core(Statement.kt:62) ~[exposed-core-0.40.1.jar:?] + ... 58 more +2022-11-18 16:16:18,193 ERROR [io.vertx.core.impl.ContextBase]-[vert.x-eventloop-thread-1] Unhandled exception +org.jetbrains.exposed.exceptions.ExposedSQLException: java.sql.SQLException: Query returns results + at org.jetbrains.exposed.sql.statements.Statement.executeIn$exposed_core(Statement.kt:64) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.Transaction.exec(Transaction.kt:140) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.Transaction.exec(Transaction.kt:126) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.Transaction.exec(Transaction.kt:108) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.Transaction.exec(Transaction.kt:94) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.Transaction.exec$default(Transaction.kt:93) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.SchemaUtils.execStatements(SchemaUtils.kt:251) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.SchemaUtils.createMissingTablesAndColumns(SchemaUtils.kt:321) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.SchemaUtils.createMissingTablesAndColumns$default(SchemaUtils.kt:306) ~[exposed-core-0.40.1.jar:?] + at com.hisense.dahua_video.MainVerticle$exposed$1.invoke(MainVerticle.kt:160) ~[classes/:?] + at com.hisense.dahua_video.MainVerticle$exposed$1.invoke(MainVerticle.kt:157) ~[classes/:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.inTopLevelTransaction$run(ThreadLocalTransactionManager.kt:214) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.access$inTopLevelTransaction$run(ThreadLocalTransactionManager.kt:1) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt$inTopLevelTransaction$1.invoke(ThreadLocalTransactionManager.kt:240) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.keepAndRestoreTransactionRefAfterRun(ThreadLocalTransactionManager.kt:248) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.inTopLevelTransaction(ThreadLocalTransactionManager.kt:239) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt$transaction$1.invoke(ThreadLocalTransactionManager.kt:189) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.keepAndRestoreTransactionRefAfterRun(ThreadLocalTransactionManager.kt:248) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.transaction(ThreadLocalTransactionManager.kt:159) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.transaction(ThreadLocalTransactionManager.kt:146) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.transaction$default(ThreadLocalTransactionManager.kt:145) ~[exposed-core-0.40.1.jar:?] + at com.hisense.dahua_video.MainVerticle.exposed(MainVerticle.kt:157) ~[classes/:?] + at com.hisense.dahua_video.MainVerticle.start$lambda$4(MainVerticle.kt:51) ~[classes/:?] + at io.vertx.core.impl.future.FutureImpl$3.onSuccess(FutureImpl.java:141) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl$ListenerArray.onSuccess(FutureImpl.java:262) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Mapping.onSuccess(Mapping.java:40) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Mapping.onSuccess(Mapping.java:40) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.CompositeFutureImpl.trySucceed(CompositeFutureImpl.java:163) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.CompositeFutureImpl.lambda$all$0(CompositeFutureImpl.java:38) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl$3.onSuccess(FutureImpl.java:141) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Composition$1.onSuccess(Composition.java:62) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.SucceededFuture.addListener(SucceededFuture.java:88) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Composition.onSuccess(Composition.java:43) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Composition$1.onSuccess(Composition.java:62) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl.addListener(FutureImpl.java:196) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.PromiseImpl.addListener(PromiseImpl.java:23) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.Composition.onSuccess(Composition.java:43) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureImpl$ListenerArray.onSuccess(FutureImpl.java:262) ~[vertx-core-4.3.4.jar:4.3.4] + at io.vertx.core.impl.future.FutureBase.lambda$emitSuccess$0(FutureBase.java:54) ~[vertx-core-4.3.4.jar:4.3.4] + at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at java.lang.Thread.run(Thread.java:834) [?:?] +Caused by: java.sql.SQLException: Query returns results + at org.sqlite.jdbc3.JDBC3PreparedStatement.executeLargeUpdate(JDBC3PreparedStatement.java:106) ~[sqlite-jdbc-3.39.4.0.jar:?] + at org.sqlite.jdbc3.JDBC3PreparedStatement.executeUpdate(JDBC3PreparedStatement.java:98) ~[sqlite-jdbc-3.39.4.0.jar:?] + at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeUpdate(ProxyPreparedStatement.java:61) ~[HikariCP-4.0.3.jar:?] + at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeUpdate(HikariProxyPreparedStatement.java) ~[HikariCP-4.0.3.jar:?] + at org.jetbrains.exposed.sql.statements.jdbc.JdbcPreparedStatementImpl.executeUpdate(JdbcPreparedStatementImpl.kt:26) ~[exposed-jdbc-0.40.1.jar:?] + at org.jetbrains.exposed.sql.Transaction$exec$2.executeInternal(Transaction.kt:113) ~[exposed-core-0.40.1.jar:?] + at org.jetbrains.exposed.sql.statements.Statement.executeIn$exposed_core(Statement.kt:62) ~[exposed-core-0.40.1.jar:?] + ... 58 more +2022-11-18 16:17:33,061 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 开始创表2022-11-18T16:17:33.055055800 +2022-11-18 16:17:33,109 INFO [com.zaxxer.hikari.HikariDataSource]-[vert.x-eventloop-thread-1] HikariPool-1 - Starting... +2022-11-18 16:17:33,610 INFO [com.zaxxer.hikari.HikariDataSource]-[vert.x-eventloop-thread-1] HikariPool-1 - Start completed. +2022-11-18 16:17:33,692 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 连接完成2022-11-18T16:17:33.690195600 +2022-11-18 16:17:34,603 INFO [Exposed]-[vert.x-eventloop-thread-1] Preparing create tables statements took 0ms +2022-11-18 16:17:34,603 INFO [Exposed]-[vert.x-eventloop-thread-1] Executing create tables statements took 0ms +2022-11-18 16:17:34,618 INFO [Exposed]-[vert.x-eventloop-thread-1] Extracting table columns took 14ms +2022-11-18 16:17:34,618 INFO [Exposed]-[vert.x-eventloop-thread-1] Preparing alter table statements took 15ms +2022-11-18 16:17:34,618 INFO [Exposed]-[vert.x-eventloop-thread-1] Executing alter table statements took 0ms +2022-11-18 16:17:34,665 WARN [io.vertx.core.impl.BlockedThreadChecker]-[vertx-blocked-thread-checker] Thread Thread[vert.x-eventloop-thread-1,5,main] has been blocked for 2528 ms, time limit is 2000 ms +2022-11-18 16:17:34,666 INFO [Exposed]-[vert.x-eventloop-thread-1] Index on table 'sys_monitor_user' differs only in name: in db sys_monitor_user_userName -> in mapping sys_monitor_user_userName_unique +2022-11-18 16:17:34,681 INFO [Exposed]-[vert.x-eventloop-thread-1] Index on table 'sys_user' differs only in name: in db sys_user_userName -> in mapping sys_user_userName_unique +2022-11-18 16:17:34,681 INFO [Exposed]-[vert.x-eventloop-thread-1] Index on table 'sys_organization' differs only in name: in db sys_organization_org_id -> in mapping sys_organization_org_id_unique +2022-11-18 16:17:34,682 INFO [Exposed]-[vert.x-eventloop-thread-1] Checking mapping consistence took 63ms +2022-11-18 16:17:34,682 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 创表成功2022-11-18T16:17:34.682274800 +2022-11-18 16:17:34,740 WARN [io.vertx.core.impl.VertxImpl]-[vert.x-eventloop-thread-1] You're already on a Vert.x context, are you sure you want to create a new Vertx instance? +2022-11-18 16:17:34,778 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 无集群配置,进行单节点部署! +2022-11-18 16:17:34,779 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] vertx.isNativeTransportEnabled:false +2022-11-18 16:17:34,779 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-1] 截图根目录:/mnts/record/\ +2022-11-18 16:17:35,219 INFO [com.hisense.dahua_video.verticle.MonitorVerticle]-[vert.x-eventloop-thread-17] monitorSessionUtil 创建成功! +2022-11-18 16:17:35,220 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-31] 部署 MonitorVerticle 成功! +2022-11-18 16:17:35,220 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-31] 部署 OrganizationVerticle 成功! +2022-11-18 16:17:35,328 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-31] 部署 SqlFactoryVerticle 成功! +2022-11-18 16:17:35,682 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-10] http 服务监听端口: 8883 +2022-11-18 16:17:35,716 INFO [com.hisense.dahua_video.util.MonitorSessionUtil]-[vert.x-eventloop-thread-17] authorize:{"userName":"ynszdz","password":"Admin@123","monitorDomain":"http://10.132.191.3:8314","id":1} +2022-11-18 16:17:35,720 INFO [com.hisense.dahua_video.util.MonitorSessionUtil]-[vert.x-eventloop-thread-17] domain: 10.132.191.3 port:8314 +2022-11-18 16:17:36,659 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-10] 开放管理员后台 +2022-11-18 16:17:36,660 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-13] http 服务监听端口: 8883 +2022-11-18 16:17:36,661 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-4] http 服务监听端口: 8883 +2022-11-18 16:17:36,661 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-14] http 服务监听端口: 8883 +2022-11-18 16:17:36,661 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-8] http 服务监听端口: 8883 +2022-11-18 16:17:36,661 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-2] http 服务监听端口: 8883 +2022-11-18 16:17:36,661 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-7] http 服务监听端口: 8883 +2022-11-18 16:17:36,662 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-6] http 服务监听端口: 8883 +2022-11-18 16:17:36,662 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-5] http 服务监听端口: 8883 +2022-11-18 16:17:36,662 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-15] http 服务监听端口: 8883 +2022-11-18 16:17:36,662 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-3] http 服务监听端口: 8883 +2022-11-18 16:17:36,663 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-11] http 服务监听端口: 8883 +2022-11-18 16:17:36,662 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-0] http 服务监听端口: 8883 +2022-11-18 16:17:36,663 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-9] http 服务监听端口: 8883 +2022-11-18 16:17:36,663 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-1] http 服务监听端口: 8883 +2022-11-18 16:17:36,664 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-4] 开放管理员后台 +2022-11-18 16:17:36,664 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-14] 开放管理员后台 +2022-11-18 16:17:36,664 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-13] 开放管理员后台 +2022-11-18 16:17:36,664 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-7] 开放管理员后台 +2022-11-18 16:17:36,664 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-5] 开放管理员后台 +2022-11-18 16:17:36,664 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-2] 开放管理员后台 +2022-11-18 16:17:36,664 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-15] 开放管理员后台 +2022-11-18 16:17:36,664 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-3] 开放管理员后台 +2022-11-18 16:17:36,664 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-0] 开放管理员后台 +2022-11-18 16:17:36,664 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-12] http 服务监听端口: 8883 +2022-11-18 16:17:36,665 INFO [com.hisense.dahua_video.MainVerticle]-[vert.x-eventloop-thread-31] 部署 WebAPIVerticle 成功! +2022-11-18 16:17:36,665 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-8] 开放管理员后台 +2022-11-18 16:17:36,665 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-11] 开放管理员后台 +2022-11-18 16:17:36,665 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-6] 开放管理员后台 +2022-11-18 16:17:36,665 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-1] 开放管理员后台 +2022-11-18 16:17:36,665 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-9] 开放管理员后台 +2022-11-18 16:17:36,665 INFO [com.hisense.dahua_video.verticle.WebAPIVerticle]-[vert.x-eventloop-thread-12] 开放管理员后台 +2022-11-18 16:17:57,609 ERROR [com.hisense.dahua_video.util.MonitorSessionUtil]-[vert.x-eventloop-thread-17] 创建会话失败 +io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection timed out: no further information: /10.132.191.3:8314 +Caused by: java.net.ConnectException: Connection timed out: no further information + at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) ~[?:?] + at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:779) ~[?:?] + at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:337) ~[netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:334) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:776) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) [netty-transport-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-common-4.1.82.Final.jar:4.1.82.Final] + at java.lang.Thread.run(Thread.java:834) [?:?] diff --git a/mvnw b/mvnw new file mode 100644 index 0000000..5643201 --- /dev/null +++ b/mvnw @@ -0,0 +1,316 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /usr/local/etc/mavenrc ] ; then + . /usr/local/etc/mavenrc + fi + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + export JAVA_HOME="`/usr/libexec/java_home`" + else + export JAVA_HOME="/Library/Java/Home" + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`\\unset -f command; \\command -v java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=`cd "$wdir/.."; pwd` + fi + # end of workaround + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=`find_maven_basedir "$(pwd)"` +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." + fi + if [ -n "$MVNW_REPOURL" ]; then + jarUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" + else + jarUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" + fi + while IFS="=" read key value; do + case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + esac + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Downloading from: $jarUrl" + fi + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + if $cygwin; then + wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` + fi + + if command -v wget > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" + else + wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" + fi + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl -o "$wrapperJarPath" "$jarUrl" -f + else + curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f + fi + + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + # For Cygwin, switch paths to Windows format before running javac + if $cygwin; then + javaClass=`cygpath --path --windows "$javaClass"` + fi + if [ -e "$javaClass" ]; then + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaClass") + fi + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + $MAVEN_DEBUG_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" \ + "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/mvnw.cmd b/mvnw.cmd new file mode 100644 index 0000000..8a15b7f --- /dev/null +++ b/mvnw.cmd @@ -0,0 +1,188 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %* +if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %* +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" + +FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET DOWNLOAD_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% ^ + %JVM_CONFIG_MAVEN_PROPS% ^ + %MAVEN_OPTS% ^ + %MAVEN_DEBUG_OPTS% ^ + -classpath %WRAPPER_JAR% ^ + "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^ + %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat" +if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%"=="on" pause + +if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE% + +cmd /C exit /B %ERROR_CODE% diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..4c5f5d4 --- /dev/null +++ b/pom.xml @@ -0,0 +1,262 @@ + + + 4.0.0 + + com.hisense + dahua_video + 1.0.0-SNAPSHOT + + + UTF-8 + + 1.7.20 + + 3.2.4 + 2.22.2 + 3.0.0 + + 4.3.4 + 5.7.0 + + 3.1.1 + 2.8.2 + 3.3.6 + 0.40.1 + 3.39.4.0 + 4.0.3 + + com.hisense.dahua_video.MainVerticle + io.vertx.core.Launcher + + + + + + io.vertx + vertx-stack-depchain + ${vertx.version} + pom + import + + + + + + + io.vertx + vertx-web-client + + + io.vertx + vertx-config + + + io.vertx + vertx-web-templ-thymeleaf + + + io.vertx + vertx-web + + + io.vertx + vertx-lang-kotlin + + + io.vertx + vertx-lang-kotlin-coroutines + + + org.jetbrains.kotlin + kotlin-stdlib-jdk8 + ${kotlin.version} + + + + io.netty + netty-transport-native-epoll + linux-x86_64 + + + + io.vertx + vertx-hazelcast + + + + + com.github.ben-manes.caffeine + caffeine + ${caffeine.version} + + + + org.jetbrains.exposed + exposed-core + ${exposed.version} + + + org.jetbrains.exposed + exposed-jdbc + ${exposed.version} + + + org.jetbrains.exposed + exposed-java-time + ${exposed.version} + + + + + org.xerial + sqlite-jdbc + ${sqlite-jdbc.version} + + + + + com.zaxxer + HikariCP + ${HikariCP.version} + + + + + + org.apache.logging.log4j + log4j-api + ${log4j.version} + + + + org.apache.logging.log4j + log4j-core + ${log4j.version} + + + + org.apache.logging.log4j + log4j-slf4j-impl + ${log4j.version} + + + org.apache.logging.log4j + log4j-jcl + ${log4j.version} + + + + org.apache.logging.log4j + log4j-jul + ${log4j.version} + + + + com.lmax + disruptor + ${disruptor.version} + + + + + io.vertx + vertx-junit5 + test + + + org.junit.jupiter + junit-jupiter-api + ${junit-jupiter.version} + test + + + org.junit.jupiter + junit-jupiter-engine + ${junit-jupiter.version} + test + + + + + ${project.basedir}/src/main/kotlin + ${project.basedir}/src/test/kotlin + + + org.jetbrains.kotlin + kotlin-maven-plugin + ${kotlin.version} + + 11 + + + + compile + + compile + + + + test-compile + + test-compile + + + + + + maven-shade-plugin + ${maven-shade-plugin.version} + + + package + + shade + + + + + + ${launcher.class} + ${main.verticle} + + + + + ${project.build.directory}/${project.artifactId}-${project.version}-fat.jar + + + + + + + maven-surefire-plugin + ${maven-surefire-plugin.version} + + + org.codehaus.mojo + exec-maven-plugin + ${exec-maven-plugin.version} + + io.vertx.core.Launcher + + run + ${main.verticle} + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 8 + 8 + + + + + + + diff --git a/src/main/kotlin/com/hisense/dahua_video/MainVerticle.kt b/src/main/kotlin/com/hisense/dahua_video/MainVerticle.kt new file mode 100644 index 0000000..19322c0 --- /dev/null +++ b/src/main/kotlin/com/hisense/dahua_video/MainVerticle.kt @@ -0,0 +1,232 @@ +package com.hisense.dahua_video + +import com.hazelcast.config.* +import com.hisense.dahua_video.modules.device.Device +import com.hisense.dahua_video.modules.device.DeviceChannel +import com.hisense.dahua_video.modules.device.Organization +import com.hisense.dahua_video.modules.monitor.MonitorUser +import com.hisense.dahua_video.modules.monitor.MonitorUserToken +import com.hisense.dahua_video.modules.sys.SysUser +import com.hisense.dahua_video.verticle.MonitorVerticle +import com.hisense.dahua_video.verticle.OrganizationVerticle +import com.hisense.dahua_video.verticle.SqlFactoryVerticle +import com.hisense.dahua_video.verticle.WebAPIVerticle +import com.zaxxer.hikari.HikariConfig +import com.zaxxer.hikari.HikariDataSource +import io.vertx.config.ConfigRetriever +import io.vertx.config.ConfigRetrieverOptions +import io.vertx.config.ConfigStoreOptions +import io.vertx.core.* +import io.vertx.core.eventbus.EventBus +import io.vertx.core.eventbus.EventBusOptions +import io.vertx.core.file.FileSystem +import io.vertx.core.impl.logging.Logger +import io.vertx.core.impl.logging.LoggerFactory +import io.vertx.core.json.JsonArray +import io.vertx.core.json.JsonObject +import io.vertx.core.spi.cluster.ClusterManager +import io.vertx.spi.cluster.hazelcast.HazelcastClusterManager +import org.jetbrains.exposed.sql.Database +import org.jetbrains.exposed.sql.SchemaUtils +import org.jetbrains.exposed.sql.StdOutSqlLogger +import org.jetbrains.exposed.sql.addLogger +import org.jetbrains.exposed.sql.transactions.transaction +import java.io.File +import java.time.LocalDateTime +import java.util.concurrent.TimeUnit + +class MainVerticle : AbstractVerticle() { + private val logger: Logger = LoggerFactory.getLogger(MainVerticle::class.java) + private val cpuNum = Runtime.getRuntime().availableProcessors() + var fs: FileSystem? = null + private var event: EventBus? = null + + override fun start(startPromise: Promise) { + fs = vertx.fileSystem() + event = vertx.eventBus() + val fileStore = ConfigStoreOptions().apply { + type = "file" + config = JsonObject().put("path", System.getProperty("user.dir") + File.separator + "config.json") + } + val configOptions = ConfigRetrieverOptions().addStore(fileStore) + val retriever = ConfigRetriever.create(vertx, configOptions) + retriever.getConfig { config -> + val result = config.result() + exposed(result) + val memberList = result.getJsonArray("memberList", JsonArray()).list + var vertxOptions = if (memberList.isNotEmpty()) { // 集群模式配置 + clusteredOptions(memberList as List, result) + } else { // 单体配置 + VertxOptions().apply { + preferNativeTransport = true + internalBlockingPoolSize = 1 + maxWorkerExecuteTime = Long.MAX_VALUE + maxWorkerExecuteTimeUnit = TimeUnit.DAYS + workerPoolSize = if (cpuNum * 20 <= 80) 80 else cpuNum * 20 + eventBusOptions = EventBusOptions().apply { + host = result.getString("host", "localhost") + preferNativeTransport = true + isTcpFastOpen = true + isTcpQuickAck = true + isTcpNoDelay = true + } + } + } + val vertx = Vertx.vertx(vertxOptions) + when (vertxOptions?.clusterManager) { + null -> { + logger.info("无集群配置,进行单节点部署!") + deployVerticles(vertx, result) + } + + else -> { + logger.info("进行集群部署!") + Vertx.clusteredVertx(vertxOptions) { res: AsyncResult -> + if (res.succeeded()) { + val vertxClustered = res.result() + deployVerticles(vertxClustered!!, result) + } else { + logger.info("尝试集群部署失败!进行单节点部署") + deployVerticles(vertx, result) + } + } + } + + } + } + } + + + /** + * 全局定时任务 + */ + private fun globalTask() { + // TODO + } + + + /** + * 部署 verticle + */ + private fun deployVerticles(vertx: Vertx, result: JsonObject) { + logger.info("全局变量:vertx.isNativeTransportEnabled:${vertx.isNativeTransportEnabled}") + val record = result.getString("recroot", "/mnts/record/") + File.separator // 截图根目录 + logger.info("截图根目录:$record") + fs!!.exists(record)!!.onSuccess { exit -> + if (!exit) { + fs!!.mkdirs(record)?.onFailure { fail -> + logger.info("创建 $record 文件夹故障:", fail) + } + } + }?.onFailure { fail -> + logger.info("$record 文件夹故障:", fail) + } + + vertx.deployVerticle({ SqlFactoryVerticle() }, DeploymentOptions().setInstances(cpuNum).setConfig(result)) + .onSuccess { + logger.info("部署 SqlFactoryVerticle 成功!") + globalTask() + } + .onFailure { fail -> logger.error("创建 SqlFactoryVerticle 故障", fail) } + + vertx.deployVerticle({ MonitorVerticle() }, DeploymentOptions().setInstances(cpuNum).setConfig(result)) + .onSuccess { logger.info("部署 MonitorVerticle 成功!") } + .onFailure { fail -> logger.error("创建 MonitorVerticle 故障", fail) } + + vertx.deployVerticle({ WebAPIVerticle() }, DeploymentOptions().setInstances(cpuNum).setConfig(result)) + .onSuccess { logger.info("部署 WebAPIVerticle 成功!") } + .onFailure { fail -> logger.error("创建 WebAPIVerticle 故障", fail) } + + vertx.deployVerticle({ OrganizationVerticle() }, DeploymentOptions().setInstances(cpuNum).setConfig(result)) + .onSuccess { logger.info("部署 OrganizationVerticle 成功!") } + .onFailure { fail -> logger.error("创建 OrganizationVerticle 故障", fail) } + + } + + /** + * 连接数据库 + */ + private fun exposed(result: JsonObject) { + val sqliteJdbcurl = result.getString("sqlite_jdbcurl") + val sqliteUser = result.getString("sqlite_user") + val sqlitePassword = result.getString("sqlite_password") + val dbConfig = HikariConfig().apply { + jdbcUrl = sqliteJdbcurl + driverClassName = "org.sqlite.JDBC" + username = sqliteUser + password = sqlitePassword + minimumIdle = 2 * cpuNum + maximumPoolSize = 5 * cpuNum + isAutoCommit = false + } + val monitorUser = MonitorUser() + val monitorUserToken = MonitorUserToken() + val sysUser = SysUser() + val organization = Organization() + val device = Device() + val deviceChannel = DeviceChannel() + logger.info("开始创表" + LocalDateTime.now().toString()) + Database.connect( + HikariDataSource(dbConfig) + ) + logger.info("连接完成" + LocalDateTime.now().toString()) + transaction { + addLogger(StdOutSqlLogger) + SchemaUtils.create(monitorUser, monitorUserToken, sysUser, organization, device, deviceChannel) + SchemaUtils.createMissingTablesAndColumns( + monitorUser, + monitorUserToken, + sysUser, + organization, + device, + deviceChannel + ) + logger.info("创表成功" + LocalDateTime.now().toString()) + } + } + + /** + * 集群配置 + */ + private fun clusteredOptions(memberList: List, result: JsonObject): VertxOptions? { + val hazelcastConfig = Config() + val networkConfig = NetworkConfig().setPort(result.getInteger("cluster_port", 5701)) + .setMemcacheProtocolConfig(MemcacheProtocolConfig().setEnabled(true)) + .setRestApiConfig(RestApiConfig().setEnabled(false)) + .setOutboundPorts(listOf(0)) + .setJoin( + JoinConfig().setMulticastConfig(MulticastConfig().setEnabled(false)) + .setTcpIpConfig(TcpIpConfig().setEnabled(true).setMembers(memberList)) + ) + .setInterfaces(InterfacesConfig().setEnabled(false)) + .setSSLConfig(SSLConfig().setEnabled(false)) + .setSocketInterceptorConfig(SocketInterceptorConfig().setEnabled(false)) + .setSymmetricEncryptionConfig(SymmetricEncryptionConfig().setEnabled(false)) + hazelcastConfig.networkConfig = networkConfig + hazelcastConfig.managementCenterConfig = ManagementCenterConfig().setScriptingEnabled(true) + .addTrustedInterface(result.getString("host", "localhost")) + val mgr: ClusterManager = HazelcastClusterManager(hazelcastConfig) + return VertxOptions().setClusterManager(mgr) + .setEventBusOptions(EventBusOptions() + .apply { + host = result.getString("host", "localhost") + isTcpFastOpen = true + isTcpQuickAck = true + isTcpNoDelay = true + }) + .apply { + preferNativeTransport = true + internalBlockingPoolSize = 1 + maxWorkerExecuteTime = Long.MAX_VALUE + maxWorkerExecuteTimeUnit = TimeUnit.DAYS + workerPoolSize = if (cpuNum * 20 <= 80) 80 else cpuNum * 20 + eventBusOptions = EventBusOptions().apply { + host = result.getString("host", "localhost") + preferNativeTransport = true + isTcpFastOpen = true + isTcpQuickAck = true + isTcpNoDelay = true + } + } + } +} diff --git a/src/main/kotlin/com/hisense/dahua_video/consts/EventBusAddress.kt b/src/main/kotlin/com/hisense/dahua_video/consts/EventBusAddress.kt new file mode 100644 index 0000000..db11e09 --- /dev/null +++ b/src/main/kotlin/com/hisense/dahua_video/consts/EventBusAddress.kt @@ -0,0 +1,68 @@ +package com.hisense.dahua_video.consts + + +/** + * 事件总线上各地址 + */ +enum class EventBusAddress(val address: String) { + /** + * 平台用户注册 + */ + SYS_USER_SIGN_UP("MSG://EVENT/BUS/SQL/SYS/SYS_USER_SIGN_UP"), + + /** + * 校验用户名是否存在 + */ + SYS_USER_CHECK("MSG://EVENT/BUS/SQL/SYS/SYS_USER_CHECK"), + + /** + * 校验登录 + */ + SYS_USER_CHECK_LOGIN("MSG://EVENT/BUS/SQL/SYS/SYS_USER_CHECK_LOGIN"), + + /** + * 第三方平台数据录入 + */ + SYS_MONITOR_USER_SIGN_UP("MSG://EVENT/BUS/SQL/SYS/SYS_MONITOR_USER_SIGN_UP"), + + /** + * 获取全量第三方用户 + */ + SYS_MONITOR_USER_ALLMONITORUSER("MSG://EVENT/BUS/SQL/SYS/SYS_MONITOR_USER_ALLMONITORUSER"), + + /** + * 获取全量第三方有效token + */ + SYS_MONITOR_USER_ALLMONITORUSER_TOKEN("MSG://EVENT/BUS/SQL/SYS/SYS_MONITOR_USER_ALLMONITORUSER_TOKEN"), + + /** + * 清理失效token + */ + SYS_MONITOR_CLEANFAILTOKEN("MSG://EVENT/BUS/SQL/SYS/SYS_MONITOR_CLEANFAILTOKEN"), + + /** + * 保存新的第三方token + */ + SYS_MONITOR_USER_TOKEN_SAVE_NEW("MSG://EVENT/BUS/SQL/SYS/SYS_MONITOR_USER_TOKEN_SAVE_NEW"), + + /** + * 保活第三方token + */ + SYS_MONITOR_USER_TOKEN_KEEP_LIVE("MSG://EVENT/BUS/SQL/SYS/SYS_MONITOR_USER_TOKEN_KEEP_LIVE"), + + /** + * 同步第三方所有组织架构 + */ + SYS_ORGANIZATION_SYNC("MSG://EVENT/BUS/SQL/SYS/SYS_ORGANIZATION_SYNC"), + + /** + * 同步第三方设备 + */ + SYS_DEVICE_SYNC("MSG://EVENT/BUS/SQL/SYS/SYS_DEVICE_SYNC"), + + /** + *同步第三方设备通道 + */ + SYS_DEVICE_CHANNEL_SYNC("MSG://EVENT/BUS/SQL/SYS/SYS_DEVICE_CHANNEL_SYNC") + +} diff --git a/src/main/kotlin/com/hisense/dahua_video/consts/StatsInt.kt b/src/main/kotlin/com/hisense/dahua_video/consts/StatsInt.kt new file mode 100644 index 0000000..6a7fb1f --- /dev/null +++ b/src/main/kotlin/com/hisense/dahua_video/consts/StatsInt.kt @@ -0,0 +1,8 @@ +package com.hisense.dahua_video.consts + +enum class StatsInt(val value: Int) { + /** + * 正常 + */ + NORMAL(1) +} diff --git a/src/main/kotlin/com/hisense/dahua_video/controller/CommonController.kt b/src/main/kotlin/com/hisense/dahua_video/controller/CommonController.kt new file mode 100644 index 0000000..6fd930e --- /dev/null +++ b/src/main/kotlin/com/hisense/dahua_video/controller/CommonController.kt @@ -0,0 +1,83 @@ +package com.hisense.dahua_video.controller + +import com.hisense.dahua_video.consts.EventBusAddress +import io.vertx.core.eventbus.EventBus +import io.vertx.core.impl.logging.Logger +import io.vertx.core.impl.logging.LoggerFactory +import io.vertx.core.json.JsonObject +import io.vertx.ext.web.RoutingContext +import java.time.LocalDateTime +import java.time.format.DateTimeFormatter +import java.util.* + +class CommonController(event_: EventBus?) { + private val logger: Logger = LoggerFactory.getLogger(CommonController::class.java) + private var event: EventBus? = null + + init { + this.event = event_ + } + + fun optionSCros(requestHandler: RoutingContext) { + requestHandler.response() + .putHeader("Access-Control-Allow-Credentials", "true") + .putHeader("Access-Control-Allow-Origin", "*") + .putHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS") + .putHeader( + "Access-Control-Allow-Headers", + "authorization,Authorization,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,token,Range,range" + ) + .putHeader("Access-Control-Max-Age", "3600") + .putHeader("Content-Type", "text/plain; charset=utf-8") + .putHeader("Content-Length", "0") + .setStatusCode(204).send() + } + + fun getCros(requestHandler: RoutingContext) { + val response = requestHandler.response() + response.isChunked = true + response + .putHeader("Access-control-Allow-Origin", "*") + .putHeader("Access-Control-Allow-Credentials", "true") + .putHeader("Access-Control-Allow-Methods", "GET,POST,OPTIONS") + .putHeader( + "Access-Control-Allow-Headers", + "Origin, X-Requested-With, Content-Type, Accept, Connection, User-Agent, Cookie,Content-Type" + ) + requestHandler.next() + } + + /** + * 校验是否登录 + */ + fun checkLogin(requestHandler: RoutingContext) { + requestHandler.request().pause() + val authorization = requestHandler.request().getHeader("Authorization")?.substringAfter(" ") + + fun unAuth() { + requestHandler.response().putHeader("WWW-Authenticate", "Basic realm=\".\"").setStatusCode(401) + .end(LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)) + } + when (authorization == null) { + true -> { + unAuth() + } + + else -> { + val userInfo = String(Base64.getDecoder().decode(authorization), Charsets.UTF_8) + val userName = userInfo.substringBefore(":") + val password = userInfo.substringAfter(":") + val body = JsonObject().put("userName", userName).put("password", password) + event!!.request(EventBusAddress.SYS_USER_CHECK_LOGIN.address, body) { + if (it.succeeded() && it.result().body() != -1) { + requestHandler.next() + requestHandler.request().resume() + } else { + unAuth() + } + } + } + + } + } +} diff --git a/src/main/kotlin/com/hisense/dahua_video/controller/IndexController.kt b/src/main/kotlin/com/hisense/dahua_video/controller/IndexController.kt new file mode 100644 index 0000000..3244621 --- /dev/null +++ b/src/main/kotlin/com/hisense/dahua_video/controller/IndexController.kt @@ -0,0 +1,99 @@ +package com.hisense.dahua_video.controller + +import com.hisense.dahua_video.consts.EventBusAddress +import io.vertx.core.Vertx +import io.vertx.core.buffer.Buffer +import io.vertx.core.eventbus.EventBus +import io.vertx.core.file.FileSystem +import io.vertx.core.impl.logging.Logger +import io.vertx.core.impl.logging.LoggerFactory +import io.vertx.core.json.JsonObject +import io.vertx.ext.web.RoutingContext +import io.vertx.ext.web.client.WebClient +import io.vertx.ext.web.templ.thymeleaf.ThymeleafTemplateEngine +import java.time.LocalDateTime +import java.time.format.DateTimeFormatter + + +/** + * 平台主页控制器 + */ +class IndexController( + vertx: Vertx, + templateEngine: ThymeleafTemplateEngine? +) { + private val logger: Logger = LoggerFactory.getLogger(IndexController::class.java) + var templateEngine: ThymeleafTemplateEngine? = null + private var fs: FileSystem? = null + private var event: EventBus? = null + private var vertx: Vertx + private var client: WebClient? = null + + init { + this.vertx = vertx + this.fs = this.vertx.fileSystem() + this.event = this.vertx.eventBus() + this.templateEngine = templateEngine + client = WebClient.create(this.vertx) + } + + + /** + * 首页 + */ + fun index(requestHandler: RoutingContext) { + val data = JsonObject().put( + "msg", "当前日期:${LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE)}" + ) + templateEngine!!.render( + data, "templates/index.html" + ).onSuccess { success: Buffer? -> + requestHandler.response().putHeader("Content-Type", "text/html").end(success) + }.onFailure { fail: Throwable -> + requestHandler.fail(fail) + } + } + + + /** + * 注册表单 + */ + fun sign_up(requestHandler: RoutingContext) { + val jsonObject = JsonObject() + jsonObject.put("code", 0) + jsonObject.put("data", LocalDateTime.now().toString()) + val body = requestHandler.body().asJsonObject() + logger.info("注册表单:${body.encode()}") + event!!.publish(EventBusAddress.SYS_USER_SIGN_UP.address, body) + requestHandler + .response() + .putHeader("content-type", "text/html") + .end(jsonObject.encode()) + } + + /** + * 校验用户是否存在 + */ + fun check(requestHandler: RoutingContext) { + val jsonObject = JsonObject() + jsonObject.put("code", 0) + val body = requestHandler.body().asJsonObject() + logger.info("注册表单:${body.encode()}") + event!!.request(EventBusAddress.SYS_USER_CHECK.address, body) { + if (it.succeeded()) { + jsonObject.put("data", it.result().body()) + requestHandler + .response() + .putHeader("content-type", "text/html") + .end(jsonObject.encode()) + } else { + jsonObject.put("code", -1) + requestHandler.response() + .putHeader("content-type", "text/html") + .end(jsonObject.encode()) + } + } + } + + +} diff --git a/src/main/kotlin/com/hisense/dahua_video/controller/MonitorUserController.kt b/src/main/kotlin/com/hisense/dahua_video/controller/MonitorUserController.kt new file mode 100644 index 0000000..c99b167 --- /dev/null +++ b/src/main/kotlin/com/hisense/dahua_video/controller/MonitorUserController.kt @@ -0,0 +1,58 @@ +package com.hisense.dahua_video.controller + +import com.hisense.dahua_video.consts.EventBusAddress +import io.vertx.core.Vertx +import io.vertx.core.eventbus.EventBus +import io.vertx.core.impl.logging.Logger +import io.vertx.core.impl.logging.LoggerFactory +import io.vertx.core.json.JsonObject +import io.vertx.ext.web.RoutingContext +import io.vertx.ext.web.client.WebClient +import io.vertx.ext.web.templ.thymeleaf.ThymeleafTemplateEngine +import java.time.LocalDateTime +import java.util.* + +class MonitorUserController( + vertx: Vertx, + templateEngine: ThymeleafTemplateEngine? +) { + private val logger: Logger = LoggerFactory.getLogger(MonitorUserController::class.java) + var templateEngine: ThymeleafTemplateEngine? = null + private var event: EventBus? = null + private var vertx: Vertx + private var client: WebClient? = null + + init { + this.vertx = vertx + this.event = this.vertx.eventBus() + this.templateEngine = templateEngine + client = WebClient.create(this.vertx) + } + + /** + * 注册第三方用户表单 + */ + fun sign_up(requestHandler: RoutingContext) { + val jsonObject = JsonObject() + jsonObject.put("code", 0) + jsonObject.put("data", LocalDateTime.now().toString()) + val authorization = requestHandler.request().getHeader("Authorization")?.substringAfter(" ") + val userInfo = String(Base64.getDecoder().decode(authorization), Charsets.UTF_8) + val userName = userInfo.substringBefore(":") + val param = JsonObject().put("userName", userName) + val body = requestHandler.body().asJsonObject() + event!!.request(EventBusAddress.SYS_USER_CHECK.address, param) { + if (it.succeeded()) { + body.put("userId", it.result().body()) + logger.info("注册表单:${body.encode()}") + event!!.publish(EventBusAddress.SYS_MONITOR_USER_SIGN_UP.address, body) + } else { + logger.info("查用户异常") + } + } + requestHandler + .response() + .putHeader("content-type", "text/html") + .end(jsonObject.encode()) + } +} diff --git a/src/main/kotlin/com/hisense/dahua_video/dao/DeviceChannelDao.kt b/src/main/kotlin/com/hisense/dahua_video/dao/DeviceChannelDao.kt new file mode 100644 index 0000000..e769fef --- /dev/null +++ b/src/main/kotlin/com/hisense/dahua_video/dao/DeviceChannelDao.kt @@ -0,0 +1,116 @@ +package com.hisense.dahua_video.dao + +import com.github.benmanes.caffeine.cache.Caffeine +import com.hisense.dahua_video.consts.EventBusAddress +import com.hisense.dahua_video.modules.device.Device +import com.hisense.dahua_video.modules.device.DeviceChannel +import com.hisense.dahua_video.modules.device.Organization +import io.vertx.core.eventbus.EventBus +import io.vertx.core.impl.logging.Logger +import io.vertx.core.impl.logging.LoggerFactory +import io.vertx.core.json.JsonArray +import io.vertx.core.json.JsonObject +import org.jetbrains.exposed.sql.StdOutSqlLogger +import org.jetbrains.exposed.sql.addLogger +import org.jetbrains.exposed.sql.batchInsert +import org.jetbrains.exposed.sql.select +import org.jetbrains.exposed.sql.transactions.transaction +import java.util.concurrent.TimeUnit +import java.util.stream.Collectors + +class DeviceChannelDao( + event_: EventBus? +) { + private val logger: Logger = LoggerFactory.getLogger(DeviceChannelDao::class.java) + private val cpuNum = Runtime.getRuntime().availableProcessors() + private var event: EventBus? = null +// private val organization = Organization() + private val device = Device() + private val deviceChannel = DeviceChannel() + + init { + this.event = event_ + saveOrUpdateDeviceChannel() + } + + + /** + * 保存或更新设备 + */ + private fun saveOrUpdateDeviceChannel() { + val deviceCaffeineClient = Caffeine.newBuilder() + .expireAfterAccess(1, TimeUnit.MINUTES) // 缓存1分钟 + .maximumSize(10240) + .initialCapacity(cpuNum * 10).build { key -> + val value = transaction { + addLogger(StdOutSqlLogger) + return@transaction device.slice(device.id).select { device.deviceId eq key }.withDistinct() + .map { it[device.id] }.firstOrNull()?.value ?: return@transaction -1 + } + return@build value + } // 设备缓存 + + val deviceChannelCaffeineClient = Caffeine.newBuilder() + .expireAfterAccess(1, TimeUnit.MINUTES) // 缓存1分钟 + .maximumSize(10240) + .initialCapacity(cpuNum * 10).build { key -> + val value = transaction { + addLogger(StdOutSqlLogger) + return@transaction deviceChannel.slice(deviceChannel.id).select { deviceChannel.channelId eq key } + .withDistinct() + .map { it[deviceChannel.id] }.firstOrNull()?.value ?: return@transaction -1 + } + return@build value + } // 设备通道缓存 + + event!!.consumer(EventBusAddress.SYS_DEVICE_CHANNEL_SYNC.address)?.handler { res -> + val message = res.body() + val insertInfo = message.stream().filter { index -> + index as JsonObject + index.getInteger("nodeType") == 3 && + deviceCaffeineClient.get(index.getString("parentId")) != -1 && + deviceChannelCaffeineClient.get(index.getString("channelId")) == -1 //节点为通道类型 设备表内存在该设备 且 该设备通道未入库 + }.map { + it as JsonObject + it.put("deviceId", deviceCaffeineClient.get(it.getString("parentId"))) + it + }.collect(Collectors.toList()) + logger.info("设备通道入库·${insertInfo.size}") + transaction { + addLogger(StdOutSqlLogger) + deviceChannel.batchInsert(insertInfo) { device_ -> + this[deviceChannel.deviceId] = device_.getInteger("deviceId") + this[deviceChannel.channelNo] = device_.getString("channelId") + this[deviceChannel.channelId] = device_.getString("channelId") + this[deviceChannel.name] = device_.getString("name") + this[deviceChannel.orgCode] = device_.getString("orgCode") + this[deviceChannel.orgType] = device_.getString("orgType") + this[deviceChannel.online] = device_.getString("online") + this[deviceChannel.status] = device_.getInteger("status") + this[deviceChannel.sort] = device_.getInteger("sort") + this[deviceChannel.cameraType] = device_.getString("cameraType") + this[deviceChannel.cameraFunctions] = device_.getString("cameraFunctions") + this[deviceChannel.category] = device_.getString("category") + this[deviceChannel.isParent] = device_.getBoolean("isParent") + this[deviceChannel.parentId] = device_.getString("parentId") + this[deviceChannel.deviceCode] = device_.getString("deviceCode") + this[deviceChannel.channelCode] = device_.getString("channelCode") + this[deviceChannel.channelName] = device_.getString("channelName") + this[deviceChannel.channelSeq] = device_.getInteger("channelSeq") + this[deviceChannel.channelSn] = device_.getString("channelSn") + this[deviceChannel.channelType] = device_.getString("channelType") + this[deviceChannel.sn] = device_.getString("sn") + this[deviceChannel.stat] = device_.getInteger("stat") + this[deviceChannel.gpsX] = device_.getString("gpsX") + this[deviceChannel.gpsY] = device_.getString("gpsY") + this[deviceChannel.sn] = device_.getString("sn") + this[deviceChannel.unitType] = device_.getString("unitType") + this[deviceChannel.paasId] = device_.getString("paasId") + this[deviceChannel.intelliState] = device_.getInteger("intelliState") + this[deviceChannel.subType] = device_.getString("subType") + } + } + } + + } +} diff --git a/src/main/kotlin/com/hisense/dahua_video/dao/DeviceDao.kt b/src/main/kotlin/com/hisense/dahua_video/dao/DeviceDao.kt new file mode 100644 index 0000000..5da6d92 --- /dev/null +++ b/src/main/kotlin/com/hisense/dahua_video/dao/DeviceDao.kt @@ -0,0 +1,141 @@ +package com.hisense.dahua_video.dao + +import com.github.benmanes.caffeine.cache.Caffeine +import com.hisense.dahua_video.consts.EventBusAddress +import com.hisense.dahua_video.modules.device.Device +import com.hisense.dahua_video.modules.device.Organization +import com.hisense.dahua_video.util.DevicesManagerUtil +import io.vertx.core.Vertx +import io.vertx.core.eventbus.EventBus +import io.vertx.core.impl.logging.Logger +import io.vertx.core.impl.logging.LoggerFactory +import io.vertx.core.json.JsonArray +import io.vertx.core.json.JsonObject +import org.jetbrains.exposed.sql.StdOutSqlLogger +import org.jetbrains.exposed.sql.addLogger +import org.jetbrains.exposed.sql.batchInsert +import org.jetbrains.exposed.sql.select +import org.jetbrains.exposed.sql.transactions.transaction +import java.util.concurrent.TimeUnit +import java.util.stream.Collectors + +class DeviceDao( + event_: EventBus?, vertx: Vertx +) { + private val logger: Logger = LoggerFactory.getLogger(OrganizationDao::class.java) + private val cpuNum = Runtime.getRuntime().availableProcessors() + private var event: EventBus? = null + private val organization = Organization() + private var devicesManagerUtil: DevicesManagerUtil? = null + private val device = Device() + private var vertx: Vertx? = null + + init { + this.event = event_ + this.vertx = vertx + devicesManagerUtil = DevicesManagerUtil(vertx) + saveOrupdateDevice() + } + + + /** + * 更新或保存设备信息 + */ + private fun saveOrupdateDevice() { + val orgCaffeineClient = Caffeine.newBuilder() + .expireAfterAccess(60, TimeUnit.MINUTES) // 缓存1分钟 + .maximumSize(10240) + .initialCapacity(cpuNum * 10).build { key -> + val value = transaction { + addLogger(StdOutSqlLogger) + return@transaction organization.slice(organization.id).select { organization.orgId eq key }.withDistinct() + .map { it[organization.id] }.firstOrNull()?.value ?: return@transaction -1 + } + return@build value + } // 组织缓存 + + val deviceCaffeineClient = Caffeine.newBuilder() + .expireAfterAccess(60, TimeUnit.MINUTES) // 缓存60分钟 + .maximumSize(1024 * 1000) + .initialCapacity(cpuNum * 10).build { key -> + val value = transaction { + addLogger(StdOutSqlLogger) + return@transaction device.slice(device.id).select { device.deviceId eq key }.withDistinct() + .map { it[device.id] }.firstOrNull()?.value ?: return@transaction -1 + } + return@build value + } // 设备缓存 + + + val taskOrgCaffeineClient = Caffeine.newBuilder() + .expireAfterAccess(60, TimeUnit.MINUTES) // 缓存60分钟 + .maximumSize(10240) + .initialCapacity(cpuNum * 10).build { key -> + val teskId = vertx!!.setTimer(4000) { + event!!.request(EventBusAddress.SYS_MONITOR_USER_ALLMONITORUSER_TOKEN.address, JsonObject()) { + if (it.succeeded()) { + val tokinInfo = it.result().body().stream().filter { index -> + index as JsonObject + index.getString("id") == key.getString("userId") // 获取对应用户的第三方token + }.findAny() + tokinInfo.ifPresent { token -> + token as JsonObject + val monitorUserWithToken = JsonObject() + .put("monitorDomain", token.getString("monitorDomain")) + .put("token", token.getString("token")) + .put("id", token.getInteger("id")) + logger.info("==================================同步该组织(${key.getString("parentId")})的设备通道============================================") + devicesManagerUtil!!.syncDeviceChannel(monitorUserWithToken, key.getString("parentId")) + } + } + } + } + return@build teskId + } + + event!!.consumer(EventBusAddress.SYS_DEVICE_SYNC.address)?.handler { res -> + val message = res.body() + val insertInfo = message.stream().filter { index -> + index as JsonObject + index.getInteger("nodeType") == 2 && + orgCaffeineClient.get(index.getString("parentId")) != -1 && + deviceCaffeineClient.get(index.getString("deviceId")) == -1 //节点为设备类型 组织表内存在该组织 且 该设备未入库 + }.map { + it as JsonObject + it.put("organizationId", orgCaffeineClient.get(it.getString("parentId"))) + it + }.collect(Collectors.toList()) + logger.info("设备入库·${insertInfo.size}") + transaction { + addLogger(StdOutSqlLogger) + device.batchInsert(insertInfo) { device_ -> + this[device.organizationId] = device_.getInteger("organizationId") + this[device.nodeType] = device_.getInteger("nodeType") + this[device.category] = device_.getString("category") + this[device.deviceId] = device_.getString("deviceId") + this[device.name] = device_.getString("name") + this[device.online] = device_.getString("online") + this[device.isParent] = device_.getBoolean("isParent") + this[device.parentId] = device_.getString("parentId") + this[device.orgCode] = device_.getString("orgCode") + this[device.orgType] = device_.getString("orgType") + this[device.deviceCode] = device_.getString("deviceCode") + this[device.deviceName] = device_.getString("deviceName") + this[device.sort] = device_.getInteger("sort") + this[device.intelliFlag] = device_.getInteger("intelliFlag") + this[device.manufacturer] = device_.getString("manufacturer") + this[device.subType] = device_.getString("subType") + this[device.ip] = device_.getString("ip") + } + } + message.stream().forEach { index -> + index as JsonObject + val task = taskOrgCaffeineClient.get( + JsonObject().put("userId", index.getString("userId")).put("parentId", index.getString("parentId")) + ) + logger.info("同步至组织的通道task:$task") + } + } + + } +} diff --git a/src/main/kotlin/com/hisense/dahua_video/dao/MonitorUserDao.kt b/src/main/kotlin/com/hisense/dahua_video/dao/MonitorUserDao.kt new file mode 100644 index 0000000..e146523 --- /dev/null +++ b/src/main/kotlin/com/hisense/dahua_video/dao/MonitorUserDao.kt @@ -0,0 +1,95 @@ +package com.hisense.dahua_video.dao + +import com.hisense.dahua_video.consts.EventBusAddress +import com.hisense.dahua_video.consts.StatsInt +import com.hisense.dahua_video.modules.monitor.MonitorUser +import io.vertx.core.eventbus.EventBus +import io.vertx.core.impl.logging.Logger +import io.vertx.core.impl.logging.LoggerFactory +import io.vertx.core.json.JsonArray +import io.vertx.core.json.JsonObject +import org.jetbrains.exposed.sql.StdOutSqlLogger +import org.jetbrains.exposed.sql.addLogger +import org.jetbrains.exposed.sql.insert +import org.jetbrains.exposed.sql.select +import org.jetbrains.exposed.sql.transactions.transaction +import java.time.LocalDateTime + +class MonitorUserDao(event_: EventBus?) { + private val logger: Logger = LoggerFactory.getLogger(MonitorUserDao::class.java) + private var event: EventBus? = null + + private val monitorUser = MonitorUser() + + init { + this.event = event_ + signUp() + allMonitorUser() + } + + /** + * 响应注册 + */ + private fun signUp() { + event?.consumer(EventBusAddress.SYS_MONITOR_USER_SIGN_UP.address)?.handler { replay -> + val message = replay.body() + logger.info(message.encode()) + transaction { + addLogger(StdOutSqlLogger) + monitorUser.insert { + it[monitorUser.userName] = message.getString("userName", "") + it[monitorUser.password] = message.getString("password", "") + it[monitorUser.createTime] = LocalDateTime.now() + it[monitorUser.status] = StatsInt.NORMAL.value + it[monitorUser.monitorDomain] = message.getString("monitorDomain", "") + it[monitorUser.userId] = message.getInteger("userId") + it[monitorUser.identifier] = message.getString("identifier") + } + } + } + } + + /** + * 获取全量第三方用户信息 + */ + private fun allMonitorUser() { + event?.consumer(EventBusAddress.SYS_MONITOR_USER_ALLMONITORUSER.address)?.handler { replay -> + val value = transaction { + addLogger(StdOutSqlLogger) + return@transaction monitorUser + .slice(monitorUser.id, monitorUser.userName, monitorUser.password, monitorUser.monitorDomain) + .select { monitorUser.status eq StatsInt.NORMAL.value } + .withDistinct() + .map { + JsonObject().put("userName", it[monitorUser.userName]) + .put("password", it[monitorUser.password]) + .put("monitorDomain", it[monitorUser.monitorDomain]) + .put("id", it[monitorUser.id].value) + } + } + replay.reply(JsonArray(value)) + } + } + + /** + * 更新第三方用户登录时间 + */ + private fun updateMonitorUserLoginTime() { + event?.consumer(EventBusAddress.SYS_MONITOR_USER_ALLMONITORUSER.address)?.handler { replay -> + val value = transaction { + addLogger(StdOutSqlLogger) + return@transaction monitorUser + .slice(monitorUser.id, monitorUser.userName, monitorUser.password, monitorUser.monitorDomain) + .select { monitorUser.status eq StatsInt.NORMAL.value } + .withDistinct() + .map { + JsonObject().put("userName", it[monitorUser.userName]) + .put("password", it[monitorUser.password]) + .put("monitorDomain", it[monitorUser.monitorDomain]) + .put("id", it[monitorUser.id].value) + } + } + replay.reply(JsonArray(value)) + } + } +} diff --git a/src/main/kotlin/com/hisense/dahua_video/dao/MonitorUserTokenDao.kt b/src/main/kotlin/com/hisense/dahua_video/dao/MonitorUserTokenDao.kt new file mode 100644 index 0000000..3403152 --- /dev/null +++ b/src/main/kotlin/com/hisense/dahua_video/dao/MonitorUserTokenDao.kt @@ -0,0 +1,151 @@ +package com.hisense.dahua_video.dao + +import com.hisense.dahua_video.consts.EventBusAddress +import com.hisense.dahua_video.consts.StatsInt +import com.hisense.dahua_video.modules.monitor.MonitorUser +import com.hisense.dahua_video.modules.monitor.MonitorUserToken +import io.vertx.core.eventbus.EventBus +import io.vertx.core.impl.logging.Logger +import io.vertx.core.impl.logging.LoggerFactory +import io.vertx.core.json.JsonArray +import io.vertx.core.json.JsonObject +import org.jetbrains.exposed.sql.StdOutSqlLogger +import org.jetbrains.exposed.sql.addLogger +import org.jetbrains.exposed.sql.insert +import org.jetbrains.exposed.sql.transactions.transaction +import org.jetbrains.exposed.sql.update +import java.time.LocalDateTime + +class MonitorUserTokenDao(event_: EventBus?) { + private val logger: Logger = LoggerFactory.getLogger(MonitorUserTokenDao::class.java) + private var event: EventBus? = null + + private val monitorUserToken = MonitorUserToken() + private val monitorUser = MonitorUser() + + init { + this.event = event_ + saveNewToken() + keepLiveToken() + getAllEffectiveToken() + cleanFailToken() + } + + + /** + * 保存新token + */ + private fun saveNewToken() { + event?.consumer(EventBusAddress.SYS_MONITOR_USER_TOKEN_SAVE_NEW.address)?.handler { replay -> + val message = replay.body() + logger.info("saveNewToken:" + message.encode()) + transaction { + addLogger(StdOutSqlLogger) + monitorUserToken.insert { + it[monitorUserToken.token] = message.getString("token") + it[monitorUserToken.createTime] = LocalDateTime.now() + it[monitorUserToken.updateTime] = LocalDateTime.now() + it[monitorUserToken.status] = StatsInt.NORMAL.value + it[monitorUserToken.userId] = message.getInteger("userId") + it[monitorUserToken.realm] = message.getString("realm") + it[monitorUserToken.randomKey] = message.getString("randomKey") + it[monitorUserToken.duration] = message.getInteger("duration") + } + } + } + + } + + /** + * 保活第三方token + */ + private fun keepLiveToken() { + event?.consumer(EventBusAddress.SYS_MONITOR_USER_TOKEN_KEEP_LIVE.address)?.handler { replay -> + val message = replay.body() + logger.info("keepLiveToken:" + message.encode()) + transaction { + addLogger(StdOutSqlLogger) + monitorUserToken.update({ monitorUserToken.token eq message.getString("token") }) { + it[monitorUserToken.updateTime] = LocalDateTime.now() + it[monitorUserToken.status] = StatsInt.NORMAL.value + } + } + } + } + + /** + * 获取所有在有效期的token(包含域名、) + */ + private fun getAllEffectiveToken() { + val sql = """ +SELECT + token, + userName, + id, + monitorDomain, + duration +FROM + ( + SELECT + sys_monitor_user_token.token, + sys_monitor_user_token.update_time, + sys_monitor_user_token.duration, + sys_monitor_user.userName, + sys_monitor_user.id, + sys_monitor_user.monitorDomain, + ( strftime( '%s', sys_monitor_user_token.update_time, 'utc' ) + sys_monitor_user_token.duration ) AS effect, + strftime( '%s', 'now' ) AS _now + FROM + sys_monitor_user_token + LEFT JOIN sys_monitor_user ON sys_monitor_user_token.monitor_user_id = sys_monitor_user.id + WHERE + sys_monitor_user_token._status = 1 + AND ( effect - _now ) > 0 + ORDER BY + effect DESC + ) t +GROUP BY + t.userName +ORDER BY + strftime( '%s', t.update_time, 'utc' ) DESC; + """.trimIndent() + event?.consumer(EventBusAddress.SYS_MONITOR_USER_ALLMONITORUSER_TOKEN.address)?.handler { replay -> + val value = transaction { + val temp = JsonArray() + exec(sql) { res -> + while (res.next()) { + temp.add( + JsonObject() + .put("token", res.getString("token")) + .put("userName", res.getString("userName")) + .put("id", res.getInt("id")) + .put("monitorDomain", res.getString("monitorDomain")) + .put("duration", res.getString("duration")) + ) + } + } + temp + } + logger.info("有效token:" + value.encode()) + replay.reply(value) + } + } + + + /** + * 清理失效token + */ + private fun cleanFailToken() { + val sql = """ + DELETE FROM sys_monitor_user_token WHERE sys_monitor_user_token._status = 1 AND (( strftime( '%s', sys_monitor_user_token.update_time, 'utc' ) + sys_monitor_user_token.duration ) - strftime( '%s', 'now' )) < 0; + """.trimIndent() + event!!.consumer(EventBusAddress.SYS_MONITOR_CLEANFAILTOKEN.address)?.handler { + logger.info("清理失效token") + transaction { + addLogger(StdOutSqlLogger) + exec(sql) + } + } + } + +} diff --git a/src/main/kotlin/com/hisense/dahua_video/dao/OrganizationDao.kt b/src/main/kotlin/com/hisense/dahua_video/dao/OrganizationDao.kt new file mode 100644 index 0000000..5883e94 --- /dev/null +++ b/src/main/kotlin/com/hisense/dahua_video/dao/OrganizationDao.kt @@ -0,0 +1,107 @@ +package com.hisense.dahua_video.dao + +import com.github.benmanes.caffeine.cache.Caffeine +import com.hisense.dahua_video.consts.EventBusAddress +import com.hisense.dahua_video.modules.device.Organization +import com.hisense.dahua_video.util.DevicesManagerUtil +import io.vertx.core.Vertx +import io.vertx.core.eventbus.EventBus +import io.vertx.core.impl.logging.Logger +import io.vertx.core.impl.logging.LoggerFactory +import io.vertx.core.json.JsonArray +import io.vertx.core.json.JsonObject +import org.jetbrains.exposed.sql.StdOutSqlLogger +import org.jetbrains.exposed.sql.addLogger +import org.jetbrains.exposed.sql.batchInsert +import org.jetbrains.exposed.sql.select +import org.jetbrains.exposed.sql.transactions.transaction +import java.util.concurrent.TimeUnit +import java.util.stream.Collectors + +class OrganizationDao(event_: EventBus?, vertx: Vertx) { + private val logger: Logger = LoggerFactory.getLogger(OrganizationDao::class.java) + private val cpuNum = Runtime.getRuntime().availableProcessors() + private var event: EventBus? = null + private val organization = Organization() + private var devicesManagerUtil: DevicesManagerUtil? = null + private var vertx: Vertx? = null + + init { + this.event = event_ + this.vertx = vertx + saveOrUpdateOrganization() + devicesManagerUtil = DevicesManagerUtil(vertx) + } + + + /** + * 新建或更新组织信息 + */ + private fun saveOrUpdateOrganization() { + val caffeineClient = Caffeine.newBuilder() + .expireAfterAccess(1, TimeUnit.MINUTES) // 缓存1分钟 + .maximumSize(10240) + .initialCapacity(cpuNum * 10).build { key -> + val value = transaction { + addLogger(StdOutSqlLogger) + return@transaction organization.slice(organization.id).select { organization.orgId eq key }.withDistinct() + .map { it[organization.id] }.firstOrNull()?.value ?: return@transaction -1 + } + return@build value + } // 缓存 + + event!!.consumer(EventBusAddress.SYS_ORGANIZATION_SYNC.address).handler { res -> + val message = res.body() + val insertInfo = message.stream().filter { index -> + index as JsonObject + caffeineClient.get(index.getString("id")) == -1// 表内不存在 + }.map { it as JsonObject }.collect(Collectors.toList()) + logger.info("组织入库·${insertInfo.size}") + val re = transaction { + addLogger(StdOutSqlLogger) + organization.batchInsert(insertInfo) { organization_ -> + this[organization.userId] = organization_.getInteger("userId") + this[organization.orgId] = organization_.getString("id") + this[organization.name] = organization_.getString("name") + this[organization.memo] = organization_.getString("memo") + this[organization.orgType] = organization_.getString("orgType") + this[organization.isParent] = organization_.getBoolean("isParent") + this[organization.parentId] = organization_.getString("parentId") + this[organization.root] = organization_.getBoolean("root") + this[organization.orgCode] = organization_.getString("orgCode") + this[organization.orgName] = organization_.getString("orgName") + this[organization.sort] = organization_.getInteger("sort") + this[organization.orgSn] = organization_.getString("orgSn") + this[organization.sn] = organization_.getString("sn") + this[organization.subCount] = organization_.getInteger("subCount") + this[organization.parentNodeType] = organization_.getInteger("parentNodeType") + } + } + + vertx!!.setTimer(3000) { + event!!.request(EventBusAddress.SYS_MONITOR_USER_ALLMONITORUSER_TOKEN.address, JsonObject()) { + if (it.succeeded()) { + val tokinInfo = it.result().body().stream().filter { index -> + index as JsonObject + index.getString("id") == message.stream().map { it_ -> it_ as JsonObject }.findFirst()?.get() + ?.getString("userId") ?: ""// 获取对应用户的第三方token + }.findAny() + tokinInfo.ifPresent { token -> + token as JsonObject + val tokenInfo = JsonObject() + .put("monitorDomain", token.getString("monitorDomain")) + .put("token", token.getString("token")) + .put("id", token.getInteger("id")) + message.stream().forEach { index -> + index as JsonObject + devicesManagerUtil!!.syncDevice(tokenInfo, index.getString("id")) + } + } + } + } + } + + } + + } +} diff --git a/src/main/kotlin/com/hisense/dahua_video/dao/SysUserDao.kt b/src/main/kotlin/com/hisense/dahua_video/dao/SysUserDao.kt new file mode 100644 index 0000000..12913e6 --- /dev/null +++ b/src/main/kotlin/com/hisense/dahua_video/dao/SysUserDao.kt @@ -0,0 +1,94 @@ +package com.hisense.dahua_video.dao + +import com.hisense.dahua_video.consts.EventBusAddress +import com.hisense.dahua_video.consts.StatsInt +import com.hisense.dahua_video.modules.sys.SysUser +import io.vertx.core.eventbus.EventBus +import io.vertx.core.impl.logging.Logger +import io.vertx.core.impl.logging.LoggerFactory +import io.vertx.core.json.JsonObject +import org.jetbrains.exposed.sql.* +import org.jetbrains.exposed.sql.transactions.transaction +import java.time.LocalDateTime + +/** + * 用户 dao + */ +class SysUserDao(event_: EventBus?) { + private val logger: Logger = LoggerFactory.getLogger(SysUserDao::class.java) + private var event: EventBus? = null + + private val sysUser = SysUser() + + init { + this.event = event_ + signUp() + check() + checkLogin() + } + + /** + * 响应注册 + */ + private fun signUp() { + event?.consumer(EventBusAddress.SYS_USER_SIGN_UP.address)?.handler { replay -> + val message = replay.body() + logger.info("signUp:" + message.encode()) + transaction { + addLogger(StdOutSqlLogger) + sysUser.insert { + it[sysUser.userName] = message.getString("userName", "") + it[sysUser.password] = message.getString("password", "") + it[sysUser.createTime] = LocalDateTime.now() + it[sysUser.status] = StatsInt.NORMAL.value + } + } + } + } + + /** + * 校验是否存在该用户 返回-1 时该用户名不存在 + */ + private fun check() { + event?.consumer(EventBusAddress.SYS_USER_CHECK.address)?.handler { replay -> + val message = replay.body() + logger.info(message.encode()) + val value = transaction { + addLogger(StdOutSqlLogger) + return@transaction sysUser + .slice(sysUser.id) + .select { sysUser.userName eq message.getString("userName", "") } + .withDistinct() + .map { it[sysUser.id] } + .firstOrNull()?.value ?: return@transaction -1 + } + replay.reply(value) + } + } + + /** + * 校验用户登录 + */ + private fun checkLogin() { + val temp = event?.consumer(EventBusAddress.SYS_USER_CHECK_LOGIN.address) + temp?.exceptionHandler { + logger.error("注册总线异常", it) + } + temp?.handler { replay -> + val message = replay.body() + logger.info("checkLogin:" + message.encode()) + val value = transaction { + addLogger(StdOutSqlLogger) + return@transaction sysUser + .slice(sysUser.id) + .select { sysUser.userName eq message.getString("userName", "") } + .andWhere { sysUser.password eq message.getString("password", "") } + .withDistinct() + .map { it[sysUser.id] } + .firstOrNull()?.value ?: return@transaction -1 + } + replay.reply(value) + } + } + +} diff --git a/src/main/kotlin/com/hisense/dahua_video/modules/device/Device.kt b/src/main/kotlin/com/hisense/dahua_video/modules/device/Device.kt new file mode 100644 index 0000000..6575f93 --- /dev/null +++ b/src/main/kotlin/com/hisense/dahua_video/modules/device/Device.kt @@ -0,0 +1,27 @@ +package com.hisense.dahua_video.modules.device + +import org.jetbrains.exposed.dao.id.IntIdTable + +/** + * 设备 + */ +class Device : IntIdTable("sys_device") { + private val organization = Organization() + val organizationId = integer("organization_id").references(organization.id) // 所属设备组织。 + val nodeType = integer("node_type") // 节点类型。2:设备,3:通道。 + val category = text("category") // 设备大类,参考设备大类。 + val deviceId = text("device_id").uniqueIndex() // 设备编码。 + val name = text("name") // 设备名称。 + val online = text("online") // 设备是否在线。"1":在线;"0":离线。 + val isParent = bool("is_parent") // 是否是父节点(是否有子节点),true:是父节点,false:不是父节点。 + val parentId = text("parentId") // 所属组织的ID,如果属于root节点则为""。 + val orgCode = text("org_code") // 和parentId一样。 + val orgType = text("org_type") // 组织类型,"1"-基本组织;"2~6"-逻辑组织。 + val deviceCode = text("device_code") // 设备编码。 + val deviceName = text("device_name") // 设备名称。 + val sort = integer("sort") // 排序码。 + val intelliFlag = integer("intelli_flag") // 智能状态,0:非智能 1:智能。 + val manufacturer = text("manufacturer") // 参考厂商。 + val subType = text("subType") // 参考设备小类。 + val ip = text("ip") // 设备IP。 +} diff --git a/src/main/kotlin/com/hisense/dahua_video/modules/device/DeviceChannel.kt b/src/main/kotlin/com/hisense/dahua_video/modules/device/DeviceChannel.kt new file mode 100644 index 0000000..e04edde --- /dev/null +++ b/src/main/kotlin/com/hisense/dahua_video/modules/device/DeviceChannel.kt @@ -0,0 +1,38 @@ +package com.hisense.dahua_video.modules.device + +import org.jetbrains.exposed.dao.id.IntIdTable + +/** + * 设备通道 + */ +class DeviceChannel : IntIdTable("sys_device_channel") { + private val device = Device() + val deviceId = integer("device_id").references(device.id) // 所属设备(外键)。 + val channelNo = text("channel_no").uniqueIndex() // 通道编码 + val channelId = text("channel_id").uniqueIndex() // 通道编码 同channelNo + val name = text("name").nullable() // 通道名称 + val orgCode = text("org_code").nullable() // 组织编码,根组织为"" + val orgType = text("org_type").nullable() // 组织类型,"1"为基本组织 + val online = text("online").nullable() // 通道是否在线。"1":在线;"0":离线 + val status = integer("status").nullable() // 通道是否在线。1:在线 0:离线 + val sort = integer("sort").nullable() // 排序码 + val cameraType = text("camera_type").nullable() // 摄像头类型,"1":枪机,"2":球机,"3":半球等 + val cameraFunctions = text("camera_functions").nullable() // 编码通道功能,一个通道如果支持多种功能,用","分隔 + val category = text("category").nullable() // 设备大类 + val isParent = bool("is_parent").nullable() // 是否是父节点(是否有子节点),true:是父节点,false:不是父节点 + val parentId = text("parent_id").nullable() // 通道所属设备编码(和设备的id相同) + val deviceCode = text("device_code").nullable() //和parentId一样 + val channelCode = text("channel_code").nullable() // 通道编码。 + val channelName = text("channel_name").nullable() // 通道名称。 + val channelSeq = integer("channel_seq").nullable() // 通道序号,从0开始 + val channelSn = text("channel_sn").nullable() // 通道序列号。 + val channelType = text("channel_type").nullable() // 参考通道类型 + val sn = text("sn").nullable() // 通道序列号。同channelSn。 + val stat = integer("stat").nullable() //启停状态:1-启用;2-停用。 + val gpsX = text("gpsX").nullable()// 通道所在地图坐标的X值。 + val gpsY = text("gpsY").nullable() // 通道所在地图坐标的Y值。 + val unitType = text("unit_type").nullable() // 通道所属的单元类型,参考单元类型 + val paasId = text("paas_id").nullable() // 所属的paas编号,此值为paas基础平台所定义 + val intelliState = integer("intelli_state").nullable() // 智能状态,0:非智能 1:智能 + val subType = text("sub_type").nullable() // 参考设备小类 +} diff --git a/src/main/kotlin/com/hisense/dahua_video/modules/device/Organization.kt b/src/main/kotlin/com/hisense/dahua_video/modules/device/Organization.kt new file mode 100644 index 0000000..1c26ac1 --- /dev/null +++ b/src/main/kotlin/com/hisense/dahua_video/modules/device/Organization.kt @@ -0,0 +1,27 @@ +package com.hisense.dahua_video.modules.device + +import com.hisense.dahua_video.modules.monitor.MonitorUser +import org.jetbrains.exposed.dao.id.IntIdTable + + +/** + * 组织结构 + */ +class Organization : IntIdTable("sys_organization") { + private val monitorUser = MonitorUser() + val userId = integer("monitor_user_id").references(monitorUser.id) // 归属第三方用户 + val orgId = text("org_id").uniqueIndex() // 组织id + val name = text("name") // 组织名称 + val memo = text("memo").nullable() // 备注信息 + val orgType = text("org_type") // 组织类型,"1"为基本组织,"2"~"6"为业务组织 + val isParent = bool("is_parent") // 是否是父节点(是否有子节点),true:是父节点,false:不是父节点 + val parentId = text("parent_id") // 父节点ID,如果父节点是root节点则为"" + val root = bool("root") // 是否是根节点,true:是根节点,false:不是根节点 + val orgCode = text("org_code") // 父级组织编码,和parentId一样 + val orgName = text("org_name") // 组织名称。 + val sort = integer("sort") // 排序码 + val orgSn = text("orgSn") // 组织自定义编码,通常用于国标编码 + val sn = text("sn") // 和orgSn一样 + val subCount = integer("sub_count") // 一级子节点数量。 + val parentNodeType = integer("parent_node_type").nullable() // 父节点类型:1-组织;2-设备。 +} diff --git a/src/main/kotlin/com/hisense/dahua_video/modules/monitor/MonitorUser.kt b/src/main/kotlin/com/hisense/dahua_video/modules/monitor/MonitorUser.kt new file mode 100644 index 0000000..b56abfc --- /dev/null +++ b/src/main/kotlin/com/hisense/dahua_video/modules/monitor/MonitorUser.kt @@ -0,0 +1,20 @@ +package com.hisense.dahua_video.modules.monitor + +import com.hisense.dahua_video.modules.sys.SysUser +import org.jetbrains.exposed.dao.id.IntIdTable +import org.jetbrains.exposed.sql.javatime.datetime + +/** + * 第三方视频管理平台用户 + */ +class MonitorUser : IntIdTable("sys_monitor_user") { + private val sysUser = SysUser() // 所属用户 + val userName = text("userName").uniqueIndex() // 用户登录账户 + val password = text("password") // 第三方平台密码 + val monitorDomain = text("monitorDomain") // 管理平台域 + val createTime = datetime("create_time") + val loginTime = datetime("login_time").nullable() + val status = integer("_status") + val userId = integer("sys_user_id").references(sysUser.id) // 归属用户 + val identifier = text("identifier") // 标识名称 +} diff --git a/src/main/kotlin/com/hisense/dahua_video/modules/monitor/MonitorUserToken.kt b/src/main/kotlin/com/hisense/dahua_video/modules/monitor/MonitorUserToken.kt new file mode 100644 index 0000000..cd2aa6d --- /dev/null +++ b/src/main/kotlin/com/hisense/dahua_video/modules/monitor/MonitorUserToken.kt @@ -0,0 +1,20 @@ +package com.hisense.dahua_video.modules.monitor + +import org.jetbrains.exposed.dao.id.IntIdTable +import org.jetbrains.exposed.sql.javatime.datetime + + +/** + * 平第三方台返回的token + */ +class MonitorUserToken : IntIdTable("sys_monitor_user_token") { + private val monitorUser = MonitorUser() + val token = text("token") // 第三方token + val createTime = datetime("create_time") // 创建时间 + val updateTime = datetime("update_time") // 更新时间 + val status = integer("_status") // 是否可用 + val userId = integer("monitor_user_id").references(monitorUser.id) // 归属第三方用户 + val realm = text("realm") // 获取token的返回参数 + val randomKey = text("random_key") // 获取token的返回参数 + val duration = integer("duration") // token有效时长 +} diff --git a/src/main/kotlin/com/hisense/dahua_video/modules/monitor/package-info.java b/src/main/kotlin/com/hisense/dahua_video/modules/monitor/package-info.java new file mode 100644 index 0000000..5ec442c --- /dev/null +++ b/src/main/kotlin/com/hisense/dahua_video/modules/monitor/package-info.java @@ -0,0 +1,4 @@ +/** + * 第三方平台(大华)表 + */ +package com.hisense.dahua_video.modules.monitor; diff --git a/src/main/kotlin/com/hisense/dahua_video/modules/sys/SysUser.kt b/src/main/kotlin/com/hisense/dahua_video/modules/sys/SysUser.kt new file mode 100644 index 0000000..f5be9d0 --- /dev/null +++ b/src/main/kotlin/com/hisense/dahua_video/modules/sys/SysUser.kt @@ -0,0 +1,16 @@ +package com.hisense.dahua_video.modules.sys + +import org.jetbrains.exposed.dao.id.IntIdTable +import org.jetbrains.exposed.sql.javatime.datetime + +/** + * 平台用户表 + */ +class SysUser : IntIdTable("sys_user") { + val userName = text("userName").uniqueIndex() // 用户登录账户 + val password = text("password") // 平台密码 + val createTime = datetime("create_time") + val loginTime = datetime("login_time").nullable() + val status = integer("_status") + val loginFailTime = datetime("login_fail_time").nullable() // 上次登录失败时间 +} diff --git a/src/main/kotlin/com/hisense/dahua_video/modules/sys/package-info.java b/src/main/kotlin/com/hisense/dahua_video/modules/sys/package-info.java new file mode 100644 index 0000000..5442b23 --- /dev/null +++ b/src/main/kotlin/com/hisense/dahua_video/modules/sys/package-info.java @@ -0,0 +1,4 @@ +/** + * 平台系统表 + */ +package com.hisense.dahua_video.modules.sys; diff --git a/src/main/kotlin/com/hisense/dahua_video/util/DevicesManagerUtil.kt b/src/main/kotlin/com/hisense/dahua_video/util/DevicesManagerUtil.kt new file mode 100644 index 0000000..33d081e --- /dev/null +++ b/src/main/kotlin/com/hisense/dahua_video/util/DevicesManagerUtil.kt @@ -0,0 +1,243 @@ +package com.hisense.dahua_video.util + +import com.hisense.dahua_video.consts.EventBusAddress +import io.vertx.core.Vertx +import io.vertx.core.eventbus.EventBus +import io.vertx.core.impl.logging.LoggerFactory +import io.vertx.core.json.JsonArray +import io.vertx.core.json.JsonObject +import io.vertx.ext.web.client.WebClient +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.launch +import java.util.concurrent.atomic.AtomicInteger +import java.util.stream.Collectors + + +/** + * 第三方设备管理 + */ +class DevicesManagerUtil(vertx: Vertx) { + private val logger = LoggerFactory.getLogger(MonitorSessionUtil::class.java) + private val cpuNum = Runtime.getRuntime().availableProcessors() + + private var vertx: Vertx + private var event: EventBus? = null + private var client: WebClient? = null + + init { + this.vertx = vertx + this.event = this.vertx.eventBus() + client = WebClient.create(this.vertx) + } + + + /** + * 所有第三方用户同步组织架构 尝试全量同步 + */ + fun allAuthorize() { + event!!.request(EventBusAddress.SYS_MONITOR_USER_ALLMONITORUSER_TOKEN.address, JsonObject()) { + if (it.succeeded()) { + it.result().body().stream().forEach { index -> + index as JsonObject + syncOrganization(index) + } + } + } + } + + + /** + * 同步第三方组织架构 + */ + fun syncOrganization(monitorUserWithToken: JsonObject) { + val port = monitorUserWithToken.getString("monitorDomain").substringAfterLast(":").toInt() + var domain = monitorUserWithToken.getString("monitorDomain").substringBeforeLast(":").substringAfterLast("/") + val tokenString = monitorUserWithToken.getString("token") + val userId = monitorUserWithToken.getInteger("id") + val pageSize = cpuNum * 10 + var allCount = AtomicInteger(0) + + /** + * 获取下级组织 (参数传空字符时为获取第三方平台根组织) + */ + fun getOrgenization(orgId: String, page: Int) { + val getOrgenizationUrl = + "/videoService/devicesManager/deviceTree?id=$orgId&nodeType=1&typeCode=01&page=$page&pageSize=$pageSize" + logger.info("获取组织url:$getOrgenizationUrl") + client!!.get(port, domain, getOrgenizationUrl) + .putHeader("X-Subject-Token", tokenString) + .send() + .onSuccess { res -> + val result = res.bodyAsJsonObject() + logger.info("组织信息 statusCode:" + res.statusCode()) + when (res.statusCode()) { + 200 -> { // 成功 + logger.info("$orgId 组织信息:$result") + val nextPage = result.getInteger("nextPage", -1) + val resultResult = result.getJsonArray("results") // 获取下级组织 + allCount.getAndAdd(resultResult.size()) + event!!.publish( + EventBusAddress.SYS_ORGANIZATION_SYNC.address, + JsonArray(resultResult.stream().map { + it as JsonObject + it.put("userId", userId) + it + }.collect(Collectors.toList())) + ) // 入库消息 + + resultResult.stream().filter { index -> // 过滤出存在下级组织的组织 + index as JsonObject + index.getBoolean("isParent", false) + }.forEach { index -> // 对下级组织进行 + index as JsonObject + GlobalScope.launch(Dispatchers.IO) { // 使用协程 + getOrgenization(index.getString("id"), 1) // 递归调用获取下级组织 + } + } + if (nextPage != -1) { + GlobalScope.launch(Dispatchers.IO) {// 使用协程 + getOrgenization(orgId, nextPage) // 递归调用本组织下级组织 + } + } else { + logger.info("组织完成本级分页!!!$orgId 总数据量:${allCount.get()}") + } + } + + else -> { // 失败 + logger.info("组织同步失败 $orgId") + } + + } + + } + .onFailure { fail -> + logger.error("获取组织失败$getOrgenizationUrl", fail) + } + } + getOrgenization("", 1) // 根组织开始递归 + } + + + /** + * 同步设备 + */ + fun syncDevice(monitorUserWithToken: JsonObject, orgId: String) { + val port = monitorUserWithToken.getString("monitorDomain").substringAfterLast(":").toInt() + var domain = monitorUserWithToken.getString("monitorDomain").substringBeforeLast(":").substringAfterLast("/") + val tokenString = monitorUserWithToken.getString("token") + val userId = monitorUserWithToken.getInteger("id") + val pageSize = cpuNum * 10 + var allCount = AtomicInteger(0) + + /** + * 获取第三方设备 + */ + fun syncDeviceAction(orgId: String, page: Int) { + val getDeviceUrl = + "/videoService/devicesManager/deviceTree?id=$orgId&nodeType=1&typeCode=01;1;ALL&page=$page&pageSize=$pageSize" + logger.info("获取设备url:$getDeviceUrl") + client!!.get(port, domain, getDeviceUrl) + .putHeader("X-Subject-Token", tokenString) + .send() + .onSuccess { res -> + val result = res.bodyAsJsonObject() + logger.info("设备信息 statusCode:" + res.statusCode()) + when (res.statusCode()) { + 200 -> { + val resultResult = result.getJsonArray("results") // 获取下级组织 + val nextPage = result.getInteger("nextPage", -1) + allCount.getAndAdd(resultResult.size()) + event!!.publish( + EventBusAddress.SYS_DEVICE_SYNC.address, + JsonArray(resultResult.stream().map { + it as JsonObject + it.put("userId", userId) + it + }.collect(Collectors.toList())) + ) // 入库消息 + + if (nextPage != -1) { + GlobalScope.launch(Dispatchers.IO) {// 使用协程 + syncDeviceAction(orgId, nextPage) // 递归调用本组织设备 + } + } else { + logger.info("设备完成本级分页!!!$orgId 总数据量:${allCount.get()}") + } + + } + + else -> { + logger.info("组织设备失败 $orgId") + } + } + } + .onFailure { fail -> + logger.error("获取设备失败$getDeviceUrl", fail) + } + } + + syncDeviceAction(orgId, 1) // 分页获取本组织下的设备 + + } + + /** + * 同步该区域设备通道 + */ + fun syncDeviceChannel(monitorUserWithToken: JsonObject, orgId: String) { + val port = monitorUserWithToken.getString("monitorDomain").substringAfterLast(":").toInt() + var domain = monitorUserWithToken.getString("monitorDomain").substringBeforeLast(":").substringAfterLast("/") + val tokenString = monitorUserWithToken.getString("token") + val userId = monitorUserWithToken.getInteger("id") + val pageSize = cpuNum * 10 + var allCount = AtomicInteger(0) + + + fun syncDeviceChannelAction(orgId: String, page: Int) { + val getDeviceChannelUrl = + "/videoService/devicesManager/deviceTree?id=$orgId&nodeType=1&typeCode=01;0;ALL;ALL&page=$page&pageSize=$pageSize" + logger.info("获取设备通道url:$getDeviceChannelUrl") + client!!.get(port, domain, getDeviceChannelUrl) + .putHeader("X-Subject-Token", tokenString) + .send() + .onSuccess { res -> + val result = res.bodyAsJsonObject() + logger.info("设备通道信息 statusCode:" + res.statusCode()) + when (res.statusCode()) { + 200 -> { + val resultResult = result.getJsonArray("results") // 获取下级组织 + val nextPage = result.getInteger("nextPage", -1) + allCount.getAndAdd(resultResult.size()) + event!!.publish( + EventBusAddress.SYS_DEVICE_CHANNEL_SYNC.address, + JsonArray(resultResult.stream().map { + it as JsonObject + it.put("userId", userId) + it + }.collect(Collectors.toList())) + ) // 入库消息 + + if (nextPage != -1) { + GlobalScope.launch(Dispatchers.IO) {// 使用协程 + syncDeviceChannelAction(orgId, nextPage) // 递归调用本组织设备 + } + } else { + logger.info("设备完成本级分页!!!$orgId 总数据量:${allCount.get()}") + } + + } + + else -> { + logger.info("组织设备失败 $orgId") + } + } + } + .onFailure { fail -> + logger.error("获取设备失败$getDeviceChannelUrl", fail) + } + } + syncDeviceChannelAction(orgId, 1) + + } + +} diff --git a/src/main/kotlin/com/hisense/dahua_video/util/MonitorSessionUtil.kt b/src/main/kotlin/com/hisense/dahua_video/util/MonitorSessionUtil.kt new file mode 100644 index 0000000..184ff67 --- /dev/null +++ b/src/main/kotlin/com/hisense/dahua_video/util/MonitorSessionUtil.kt @@ -0,0 +1,184 @@ +package com.hisense.dahua_video.util + +import com.hazelcast.internal.util.MD5Util +import com.hisense.dahua_video.consts.EventBusAddress +import io.vertx.core.Vertx +import io.vertx.core.eventbus.EventBus +import io.vertx.core.impl.logging.LoggerFactory +import io.vertx.core.json.JsonArray +import io.vertx.core.json.JsonObject +import io.vertx.ext.web.client.WebClient + + +/** + * 全局第三方会话管理工具 + */ +class MonitorSessionUtil(vertx: Vertx) { + private val logger = LoggerFactory.getLogger(MonitorSessionUtil::class.java) + + private var vertx: Vertx + private var event: EventBus? = null + private var client: WebClient? = null + private var devicesManagerUtil: DevicesManagerUtil? = null + + init { + this.vertx = vertx + this.event = this.vertx.eventBus() + client = WebClient.create(this.vertx) + devicesManagerUtil = DevicesManagerUtil(this.vertx) + } + + + /** + * 所有第三方用户创建会话 + */ + fun allAuthorize() { + event!!.request(EventBusAddress.SYS_MONITOR_USER_ALLMONITORUSER.address, JsonObject()) { + if (it.succeeded()) { + it.result().body().stream().forEach { index -> + index as JsonObject + authorize(index) + } + } + } + } + + /** + * 创建会话 第一步骤 + */ + private fun authorize(monitorUser: JsonObject) { + logger.info("authorize:" + monitorUser.encode()) + val port = monitorUser.getString("monitorDomain").substringAfterLast(":").toInt() + var domain = monitorUser.getString("monitorDomain").substringBeforeLast(":").substringAfterLast("/") + val loginUrl = "/videoService/accounts/authorize" + val parm = JsonObject().put("userName", monitorUser.getString("userName")).put("clientType", "winpc") + logger.info("domain: $domain port:$port") + client!!.post(port, domain, loginUrl) + .putHeader("Content-Type", "application/json") + .sendJson(parm) + .onSuccess { res -> + logger.info("statusCode:" + res.statusCode()) + val result = res.bodyAsJsonObject() + logger.info("body:" + result.encode()) + monitorUser.put("randomKey", result.getValue("randomKey")) + monitorUser.put("realm", result.getValue("realm")) + monitorUser.put("encryptType", result.getValue("encryptType")) + getToken(monitorUser) + } + .onFailure { + logger.error("创建会话失败", it) + } + } + + /** + * 第二步骤 获取token + */ + private fun getToken(monitorUser: JsonObject) { + logger.info("getToken:" + monitorUser.encode()) + var sigin = MD5Util.toMD5String(monitorUser.getString("password")) + sigin = MD5Util.toMD5String(monitorUser.getString("userName") + sigin) + sigin = MD5Util.toMD5String(sigin) + sigin = MD5Util.toMD5String(monitorUser.getString("userName") + ":" + monitorUser.getString("realm") + ":" + sigin) + sigin = MD5Util.toMD5String(sigin + ":" + monitorUser.getString("randomKey")) + + val port = monitorUser.getString("monitorDomain").substringAfterLast(":").toInt() + var domain = monitorUser.getString("monitorDomain").substringBeforeLast(":").substringAfterLast("/") + val loginUrl = "/videoService/accounts/authorize" + logger.info("domain: $domain port:$port") + val parm = JsonObject() + .put("userName", monitorUser.getString("userName")) + .put("clientType", "winpc") + .put("randomKey", monitorUser.getValue("randomKey")) + .put("realm", monitorUser.getValue("realm")) + .put("encryptType", monitorUser.getValue("encryptType")) + .put("signature", sigin) + client!!.post(port, domain, loginUrl) + .putHeader("Content-Type", "application/json") + .sendJson(parm) + .onSuccess { res -> + val result = res.bodyAsJsonObject() + logger.info("statusCode:" + res.statusCode()) + logger.info("body:" + result.encode()) + val newToken = JsonObject() + .put("token", result.getString("token")) + .put("userId", monitorUser.getInteger("id")) + .put("realm", monitorUser.getValue("realm")) + .put("randomKey", monitorUser.getValue("randomKey")) + .put("duration", result.getInteger("duration")) + event!!.publish(EventBusAddress.SYS_MONITOR_USER_TOKEN_SAVE_NEW.address, newToken) + keepLiveToken(newToken, monitorUser) + } + .onFailure { + logger.error("获取token失败", it) + } + } + + /** + * 第三步骤 定时刷新token + */ + private fun keepLiveToken(token: JsonObject, monitorUser: JsonObject) { + val time = ((token.getLong("duration") * 0.75) * 1000).toLong() + logger.info("token保活时间间隔:$time 毫秒") + + val syncOrganizationTaskId = syncOrganization(token, monitorUser) + + val keepLiveTokenTaskId = vertx.setPeriodic(time) { + logger.info("刷新token!!!") + val port = monitorUser.getString("monitorDomain").substringAfterLast(":").toInt() + var domain = monitorUser.getString("monitorDomain").substringBeforeLast(":").substringAfterLast("/") + val keepLiveTokenUrl = "/videoService/accounts/token/keepalive" + val tokenString = token.getString("token") + val parm = JsonObject() + .put("token", tokenString) + client!!.put(port, domain, keepLiveTokenUrl) + .putHeader("X-Subject-Token", tokenString) + .putHeader("Content-Type", "application/json") + .sendJson(parm) + .onSuccess { res -> + val result = res.bodyAsString() + logger.info("statusCode:" + res.statusCode()) + logger.info("body:$result") + when (res.statusCode()) { + 200 -> { + event!!.publish(EventBusAddress.SYS_MONITOR_USER_TOKEN_KEEP_LIVE.address, token) + } + + else -> { + vertx.cancelTimer(it) + vertx.cancelTimer(syncOrganizationTaskId) + } + } + } + .onFailure { fail -> + logger.error("token保活失败", fail) + vertx.cancelTimer(it) + vertx.cancelTimer(syncOrganizationTaskId) + } + logger.info("完成保活token") + } + } + + + /** + * 同步该第三方用户的组织 + */ + private fun syncOrganization(token: JsonObject, monitorUser: JsonObject): Long { + devicesManagerUtil!!.syncOrganization( + JsonObject() + .put("monitorDomain", monitorUser.getString("monitorDomain")) + .put("token", token.getString("token")) + .put("id", monitorUser.getInteger("id")) + ) // 尝试同步该用户对应组织 + val syncOrganizationTaskId = vertx.setPeriodic(6 * 60 * 60 * 1000) { // 每间隔6小时进行一次全量组织同步与设备同步 + logger.info("--------------------------全量组织同步---------------------") + devicesManagerUtil!!.syncOrganization( + JsonObject() + .put("monitorDomain", monitorUser.getString("monitorDomain")) + .put("token", token.getString("token")) + .put("id", monitorUser.getInteger("id")) + ) // 尝试同步该用户对应组织 + } + return syncOrganizationTaskId + } + +} diff --git a/src/main/kotlin/com/hisense/dahua_video/verticle/MonitorVerticle.kt b/src/main/kotlin/com/hisense/dahua_video/verticle/MonitorVerticle.kt new file mode 100644 index 0000000..5be3b4d --- /dev/null +++ b/src/main/kotlin/com/hisense/dahua_video/verticle/MonitorVerticle.kt @@ -0,0 +1,33 @@ +package com.hisense.dahua_video.verticle + +import com.hisense.dahua_video.consts.EventBusAddress +import com.hisense.dahua_video.util.MonitorSessionUtil +import io.vertx.core.Promise +import io.vertx.core.eventbus.EventBus +import io.vertx.core.file.FileSystem +import io.vertx.core.impl.logging.LoggerFactory +import io.vertx.kotlin.coroutines.CoroutineVerticle + + +/** + * 对接第三方工具端点 + */ +class MonitorVerticle : CoroutineVerticle() { + private val logger = LoggerFactory.getLogger(MonitorVerticle::class.java) + + var event: EventBus? = null + var fs: FileSystem? = null + + override fun start(startFuture: Promise?) { + event = vertx.eventBus() + fs = vertx.fileSystem() + var shareDate = vertx.sharedData() + shareDate.getLocalLock(EventBusAddress.SYS_MONITOR_USER_ALLMONITORUSER.address) + .onSuccess { + val monitorSessionUtil = MonitorSessionUtil(this.vertx) + monitorSessionUtil.allAuthorize() + logger.info("monitorSessionUtil 创建成功!") + } + startFuture?.complete() + } +} diff --git a/src/main/kotlin/com/hisense/dahua_video/verticle/OrganizationVerticle.kt b/src/main/kotlin/com/hisense/dahua_video/verticle/OrganizationVerticle.kt new file mode 100644 index 0000000..083e66a --- /dev/null +++ b/src/main/kotlin/com/hisense/dahua_video/verticle/OrganizationVerticle.kt @@ -0,0 +1,32 @@ +package com.hisense.dahua_video.verticle + +import com.hisense.dahua_video.consts.EventBusAddress +import com.hisense.dahua_video.util.DevicesManagerUtil +import io.vertx.core.Promise +import io.vertx.core.eventbus.EventBus +import io.vertx.core.file.FileSystem +import io.vertx.core.impl.logging.LoggerFactory +import io.vertx.kotlin.coroutines.CoroutineVerticle + + +/** + * 第三方组织同步端点 + */ +class OrganizationVerticle : CoroutineVerticle() { + private val logger = LoggerFactory.getLogger(OrganizationVerticle::class.java) + + var event: EventBus? = null + var fs: FileSystem? = null + + override fun start(startFuture: Promise?) { + event = vertx.eventBus() + fs = vertx.fileSystem() + var shareDate = vertx.sharedData() +// shareDate.getLocalLock(EventBusAddress.SYS_ORGANIZATION_SYNC.address) +// .onSuccess { +// val devicesManagerUtil = DevicesManagerUtil(vertx) +// logger.info("devicesManagerUtil 创建成功!") +// } + startFuture?.complete() + } +} diff --git a/src/main/kotlin/com/hisense/dahua_video/verticle/SqlFactoryVerticle.kt b/src/main/kotlin/com/hisense/dahua_video/verticle/SqlFactoryVerticle.kt new file mode 100644 index 0000000..52be134 --- /dev/null +++ b/src/main/kotlin/com/hisense/dahua_video/verticle/SqlFactoryVerticle.kt @@ -0,0 +1,49 @@ +package com.hisense.dahua_video.verticle + +import com.hisense.dahua_video.consts.EventBusAddress +import com.hisense.dahua_video.dao.* +import io.vertx.core.Promise +import io.vertx.core.eventbus.EventBus +import io.vertx.core.file.FileSystem +import io.vertx.core.impl.logging.LoggerFactory +import io.vertx.core.json.JsonObject +import io.vertx.kotlin.coroutines.CoroutineVerticle + + +/** + * 数据库工厂端点 + */ +class SqlFactoryVerticle : CoroutineVerticle() { + private val logger = LoggerFactory.getLogger(SqlFactoryVerticle::class.java) + + var event: EventBus? = null + var fs: FileSystem? = null + + + override fun start(startFuture: Promise?) { + event = vertx.eventBus() + fs = vertx.fileSystem() + var shareDate = vertx.sharedData() + shareDate.getLocalLock(EventBusAddress.SYS_USER_SIGN_UP.address) + .onSuccess { val sysUserDao = SysUserDao(this.event) } + shareDate.getLocalLock(EventBusAddress.SYS_MONITOR_USER_SIGN_UP.address) + .onSuccess { val monitorUserDao = MonitorUserDao(this.event) } + shareDate.getLocalLock(EventBusAddress.SYS_MONITOR_USER_TOKEN_SAVE_NEW.address) + .onSuccess { + val monitorUserTokenDao = MonitorUserTokenDao(this.event) + val cleanfailtokenTaskId = vertx.setPeriodic(5 * 60 * 1000) { // 每间隔5分钟进行一次失效token清理 + logger.info("--------------------------定时清理失效token----------------------") + event!!.publish(EventBusAddress.SYS_MONITOR_CLEANFAILTOKEN.address, JsonObject()) + } + } + shareDate.getLocalLock(EventBusAddress.SYS_ORGANIZATION_SYNC.address) + .onSuccess { val organizationDao = OrganizationDao(this.event, vertx) } + shareDate.getLocalLock(EventBusAddress.SYS_DEVICE_SYNC.address) + .onSuccess { + val deviceDao = DeviceDao(this.event, this.vertx) + val deviceChannelDao = DeviceChannelDao(this.event) + } + startFuture?.complete() + } + +} diff --git a/src/main/kotlin/com/hisense/dahua_video/verticle/WebAPIVerticle.kt b/src/main/kotlin/com/hisense/dahua_video/verticle/WebAPIVerticle.kt new file mode 100644 index 0000000..d565be8 --- /dev/null +++ b/src/main/kotlin/com/hisense/dahua_video/verticle/WebAPIVerticle.kt @@ -0,0 +1,90 @@ +package com.hisense.dahua_video.verticle + +import com.hisense.dahua_video.controller.CommonController +import com.hisense.dahua_video.controller.IndexController +import com.hisense.dahua_video.controller.MonitorUserController +import io.vertx.core.Promise +import io.vertx.core.Vertx +import io.vertx.core.eventbus.EventBus +import io.vertx.core.file.FileSystem +import io.vertx.core.http.HttpMethod +import io.vertx.core.http.HttpServerOptions +import io.vertx.core.impl.logging.Logger +import io.vertx.core.impl.logging.LoggerFactory +import io.vertx.ext.web.Router +import io.vertx.ext.web.handler.BodyHandler +import io.vertx.ext.web.handler.CorsHandler +import io.vertx.ext.web.handler.StaticHandler +import io.vertx.ext.web.templ.thymeleaf.ThymeleafTemplateEngine +import io.vertx.kotlin.coroutines.CoroutineVerticle + +/** + * web接口 + */ +class WebAPIVerticle : CoroutineVerticle() { + private val logger: Logger = LoggerFactory.getLogger(WebAPIVerticle::class.java) + var event: EventBus? = null + var fs: FileSystem? = null + + override fun start(startFuture: Promise?) { + event = vertx.eventBus() + fs = vertx.fileSystem() + val config = Vertx.currentContext().config() + val port = config.getInteger("port", 8888) + + val router = Router.router(vertx) + + vertx.createHttpServer(HttpServerOptions().apply { + isTcpFastOpen = vertx.isNativeTransportEnabled + isTcpCork = vertx.isNativeTransportEnabled + isTcpQuickAck = vertx.isNativeTransportEnabled + isReusePort = vertx.isNativeTransportEnabled + isTcpNoDelay = vertx.isNativeTransportEnabled + }).requestHandler(router).listen(port) { http -> + if (http.succeeded()) { + startFuture?.complete() + logger.info("http 服务监听端口: $port") + /** + * 路由配置 + */ + setRouter(router) + } else { + logger.error("创建 HTTP server 失败", http.cause()) + startFuture?.fail(http.cause()) + } + } + } + + /** + * 设置全局路由 + */ + private fun setRouter(router: Router = Router.router(vertx)) { + val templateEngine = ThymeleafTemplateEngine.create(vertx) // ThymeleafTemplateEngine 配置 + val commonController = CommonController(event) + val indexControl = IndexController(this.vertx, templateEngine) + val monitorUserController = MonitorUserController(this.vertx, templateEngine) + router.route().method(HttpMethod.POST).handler(BodyHandler.create()) + router.route("/*").handler(StaticHandler.create()) //静态资源 + router.route().handler( + CorsHandler.create("*").allowedMethod(HttpMethod.GET).allowedMethod(HttpMethod.OPTIONS) + .allowedMethod(HttpMethod.POST).allowCredentials(true).addOrigin("*").allowedHeader("token") + .allowedHeader("Access-Control-Request-Method").allowedHeader("Access-Control-Allow-Credentials") + .allowedHeader("Access-Control-Allow-Origin").allowedHeader("Access-Control-Allow-Headers") + .allowedHeader("Content-Type") + ) + + /** + * 跨域 + */ + router.route().method(HttpMethod.OPTIONS).handler(commonController::optionSCros) + router.route().method(HttpMethod.GET).handler(commonController::getCros) + + logger.info("开放管理员后台") + router.route("/admin/*").order(0).handler(commonController::checkLogin) // 管理首页 + router.route(HttpMethod.GET, "/admin/").handler(indexControl::index) // 首页 + router.route(HttpMethod.POST, "/admin/check").handler(indexControl::check) // 注册校验 + router.route(HttpMethod.POST, "/admin/sign_up").handler(indexControl::sign_up) // 注册表单 + + router.route(HttpMethod.POST, "/admin/monitor_user/sign_up").handler(monitorUserController::sign_up) // 第三方平台注册表单 + } +} diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml new file mode 100644 index 0000000..f245816 --- /dev/null +++ b/src/main/resources/log4j2.xml @@ -0,0 +1,70 @@ + + + + %d{yyyy-MM-dd HH:mm:ss} |- %highlight{%5p}{TRACE=blue, DEBUG=green, INFO=green, + WARN=yellow, ERROR=red, FATAL=red} in %style{%C{1}:%L}{cyan} [%style{%t}{magenta}] - %m%n + + + + + + + + + + + %d %-5p [%c]-[%t] %m%n + + + + + + + + + + + + + + + + + + + %d %-5p [%c]-[%t] %m%n + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html new file mode 100644 index 0000000..b93fb2c --- /dev/null +++ b/src/main/resources/templates/index.html @@ -0,0 +1,113 @@ + + + + + + + + 视频管理平台 + + + + + + 视频管理平台 + + + 视频预览 + 视频截图 + + nav groups + + menu 11 + menu 22 + menu 33 + + + + + + + + tester + + + Your Profile + Settings + Sign out + + + + + + + + + + + + + + + + menu group 1 + + menu 1 + menu 2 + menu 3 + the links + + + + menu group 2 + + list 1 + list 2 + 超链接 + + + + + + + + + 内容主体区域。记得修改 layui.css 和 js 的路径 + + + + + + + + diff --git a/src/main/resources/webroot/layui/css/layui.css b/src/main/resources/webroot/layui/css/layui.css new file mode 100644 index 0000000..c784a25 --- /dev/null +++ b/src/main/resources/webroot/layui/css/layui.css @@ -0,0 +1 @@ +.layui-inline,img{display:inline-block;vertical-align:middle}h1,h2,h3,h4,h5,h6{font-weight:400}a,body{color:#333}.layui-edge,.layui-header,.layui-inline,.layui-main{position:relative}.layui-edge,hr{height:0;overflow:hidden}.layui-layout-body,.layui-side,.layui-side-scroll{overflow-x:hidden}.layui-edge,.layui-elip,hr{overflow:hidden}.layui-btn,.layui-edge,.layui-inline,img{vertical-align:middle}.layui-btn,.layui-disabled,.layui-icon,.layui-unselect{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}blockquote,body,button,dd,div,dl,dt,form,h1,h2,h3,h4,h5,h6,input,li,ol,p,pre,td,textarea,th,ul{margin:0;padding:0;-webkit-tap-highlight-color:rgba(0,0,0,0)}a:active,a:hover{outline:0}img{border:none}li{list-style:none}table{border-collapse:collapse;border-spacing:0}h4,h5,h6{font-size:100%}button,input,optgroup,option,select,textarea{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;outline:0}pre{white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}body{line-height:1.6;color:rgba(0,0,0,.85);font:14px Helvetica Neue,Helvetica,PingFang SC,Tahoma,Arial,sans-serif}hr{line-height:0;margin:10px 0;padding:0;border:none!important;border-bottom:1px solid #eee!important;clear:both;background:0 0}a{text-decoration:none}a:hover{color:#777}a cite{font-style:normal;*cursor:pointer}.layui-border-box,.layui-border-box *{box-sizing:border-box}.layui-box,.layui-box *{box-sizing:content-box}.layui-clear{clear:both;*zoom:1}.layui-clear:after{content:'\20';clear:both;*zoom:1;display:block;height:0}.layui-inline{*display:inline;*zoom:1}.layui-btn,.layui-btn-group,.layui-edge{display:inline-block}.layui-edge{width:0;border-width:6px;border-style:dashed;border-color:transparent}.layui-edge-top{top:-4px;border-bottom-color:#999;border-bottom-style:solid}.layui-edge-right{border-left-color:#999;border-left-style:solid}.layui-edge-bottom{top:2px;border-top-color:#999;border-top-style:solid}.layui-edge-left{border-right-color:#999;border-right-style:solid}.layui-elip{text-overflow:ellipsis;white-space:nowrap}.layui-disabled,.layui-disabled:hover{color:#d2d2d2!important;cursor:not-allowed!important}.layui-circle{border-radius:100%}.layui-show{display:block!important}.layui-hide{display:none!important}.layui-show-v{visibility:visible!important}.layui-hide-v{visibility:hidden!important}@font-face{font-family:layui-icon;src:url(../font/iconfont.eot?v=256);src:url(../font/iconfont.eot?v=256#iefix) format('embedded-opentype'),url(../font/iconfont.woff2?v=256) format('woff2'),url(../font/iconfont.woff?v=256) format('woff'),url(../font/iconfont.ttf?v=256) format('truetype'),url(../font/iconfont.svg?v=256#layui-icon) format('svg')}.layui-icon{font-family:layui-icon!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.layui-icon-reply-fill:before{content:"\e611"}.layui-icon-set-fill:before{content:"\e614"}.layui-icon-menu-fill:before{content:"\e60f"}.layui-icon-search:before{content:"\e615"}.layui-icon-share:before{content:"\e641"}.layui-icon-set-sm:before{content:"\e620"}.layui-icon-engine:before{content:"\e628"}.layui-icon-close:before{content:"\1006"}.layui-icon-close-fill:before{content:"\1007"}.layui-icon-chart-screen:before{content:"\e629"}.layui-icon-star:before{content:"\e600"}.layui-icon-circle-dot:before{content:"\e617"}.layui-icon-chat:before{content:"\e606"}.layui-icon-release:before{content:"\e609"}.layui-icon-list:before{content:"\e60a"}.layui-icon-chart:before{content:"\e62c"}.layui-icon-ok-circle:before{content:"\1005"}.layui-icon-layim-theme:before{content:"\e61b"}.layui-icon-table:before{content:"\e62d"}.layui-icon-right:before{content:"\e602"}.layui-icon-left:before{content:"\e603"}.layui-icon-cart-simple:before{content:"\e698"}.layui-icon-face-cry:before{content:"\e69c"}.layui-icon-face-smile:before{content:"\e6af"}.layui-icon-survey:before{content:"\e6b2"}.layui-icon-tree:before{content:"\e62e"}.layui-icon-ie:before{content:"\e7bb"}.layui-icon-upload-circle:before{content:"\e62f"}.layui-icon-add-circle:before{content:"\e61f"}.layui-icon-download-circle:before{content:"\e601"}.layui-icon-templeate-1:before{content:"\e630"}.layui-icon-util:before{content:"\e631"}.layui-icon-face-surprised:before{content:"\e664"}.layui-icon-edit:before{content:"\e642"}.layui-icon-speaker:before{content:"\e645"}.layui-icon-down:before{content:"\e61a"}.layui-icon-file:before{content:"\e621"}.layui-icon-layouts:before{content:"\e632"}.layui-icon-rate-half:before{content:"\e6c9"}.layui-icon-add-circle-fine:before{content:"\e608"}.layui-icon-prev-circle:before{content:"\e633"}.layui-icon-read:before{content:"\e705"}.layui-icon-404:before{content:"\e61c"}.layui-icon-carousel:before{content:"\e634"}.layui-icon-help:before{content:"\e607"}.layui-icon-code-circle:before{content:"\e635"}.layui-icon-windows:before{content:"\e67f"}.layui-icon-water:before{content:"\e636"}.layui-icon-username:before{content:"\e66f"}.layui-icon-find-fill:before{content:"\e670"}.layui-icon-about:before{content:"\e60b"}.layui-icon-location:before{content:"\e715"}.layui-icon-up:before{content:"\e619"}.layui-icon-pause:before{content:"\e651"}.layui-icon-date:before{content:"\e637"}.layui-icon-layim-uploadfile:before{content:"\e61d"}.layui-icon-delete:before{content:"\e640"}.layui-icon-play:before{content:"\e652"}.layui-icon-top:before{content:"\e604"}.layui-icon-firefox:before{content:"\e686"}.layui-icon-friends:before{content:"\e612"}.layui-icon-refresh-3:before{content:"\e9aa"}.layui-icon-ok:before{content:"\e605"}.layui-icon-layer:before{content:"\e638"}.layui-icon-face-smile-fine:before{content:"\e60c"}.layui-icon-dollar:before{content:"\e659"}.layui-icon-group:before{content:"\e613"}.layui-icon-layim-download:before{content:"\e61e"}.layui-icon-picture-fine:before{content:"\e60d"}.layui-icon-link:before{content:"\e64c"}.layui-icon-diamond:before{content:"\e735"}.layui-icon-log:before{content:"\e60e"}.layui-icon-key:before{content:"\e683"}.layui-icon-rate-solid:before{content:"\e67a"}.layui-icon-fonts-del:before{content:"\e64f"}.layui-icon-unlink:before{content:"\e64d"}.layui-icon-fonts-clear:before{content:"\e639"}.layui-icon-triangle-r:before{content:"\e623"}.layui-icon-circle:before{content:"\e63f"}.layui-icon-radio:before{content:"\e643"}.layui-icon-align-center:before{content:"\e647"}.layui-icon-align-right:before{content:"\e648"}.layui-icon-align-left:before{content:"\e649"}.layui-icon-loading-1:before{content:"\e63e"}.layui-icon-return:before{content:"\e65c"}.layui-icon-fonts-strong:before{content:"\e62b"}.layui-icon-upload:before{content:"\e67c"}.layui-icon-dialogue:before{content:"\e63a"}.layui-icon-video:before{content:"\e6ed"}.layui-icon-headset:before{content:"\e6fc"}.layui-icon-cellphone-fine:before{content:"\e63b"}.layui-icon-add-1:before{content:"\e654"}.layui-icon-face-smile-b:before{content:"\e650"}.layui-icon-fonts-html:before{content:"\e64b"}.layui-icon-screen-full:before{content:"\e622"}.layui-icon-form:before{content:"\e63c"}.layui-icon-cart:before{content:"\e657"}.layui-icon-camera-fill:before{content:"\e65d"}.layui-icon-tabs:before{content:"\e62a"}.layui-icon-heart-fill:before{content:"\e68f"}.layui-icon-fonts-code:before{content:"\e64e"}.layui-icon-ios:before{content:"\e680"}.layui-icon-at:before{content:"\e687"}.layui-icon-fire:before{content:"\e756"}.layui-icon-set:before{content:"\e716"}.layui-icon-fonts-u:before{content:"\e646"}.layui-icon-triangle-d:before{content:"\e625"}.layui-icon-tips:before{content:"\e702"}.layui-icon-picture:before{content:"\e64a"}.layui-icon-more-vertical:before{content:"\e671"}.layui-icon-bluetooth:before{content:"\e689"}.layui-icon-flag:before{content:"\e66c"}.layui-icon-loading:before{content:"\e63d"}.layui-icon-fonts-i:before{content:"\e644"}.layui-icon-refresh-1:before{content:"\e666"}.layui-icon-rmb:before{content:"\e65e"}.layui-icon-addition:before{content:"\e624"}.layui-icon-home:before{content:"\e68e"}.layui-icon-time:before{content:"\e68d"}.layui-icon-user:before{content:"\e770"}.layui-icon-notice:before{content:"\e667"}.layui-icon-chrome:before{content:"\e68a"}.layui-icon-edge:before{content:"\e68b"}.layui-icon-login-weibo:before{content:"\e675"}.layui-icon-voice:before{content:"\e688"}.layui-icon-upload-drag:before{content:"\e681"}.layui-icon-login-qq:before{content:"\e676"}.layui-icon-snowflake:before{content:"\e6b1"}.layui-icon-heart:before{content:"\e68c"}.layui-icon-logout:before{content:"\e682"}.layui-icon-file-b:before{content:"\e655"}.layui-icon-template:before{content:"\e663"}.layui-icon-transfer:before{content:"\e691"}.layui-icon-auz:before{content:"\e672"}.layui-icon-console:before{content:"\e665"}.layui-icon-app:before{content:"\e653"}.layui-icon-prev:before{content:"\e65a"}.layui-icon-website:before{content:"\e7ae"}.layui-icon-next:before{content:"\e65b"}.layui-icon-component:before{content:"\e857"}.layui-icon-android:before{content:"\e684"}.layui-icon-more:before{content:"\e65f"}.layui-icon-login-wechat:before{content:"\e677"}.layui-icon-shrink-right:before{content:"\e668"}.layui-icon-spread-left:before{content:"\e66b"}.layui-icon-camera:before{content:"\e660"}.layui-icon-note:before{content:"\e66e"}.layui-icon-refresh:before{content:"\e669"}.layui-icon-female:before{content:"\e661"}.layui-icon-male:before{content:"\e662"}.layui-icon-screen-restore:before{content:"\e758"}.layui-icon-password:before{content:"\e673"}.layui-icon-senior:before{content:"\e674"}.layui-icon-theme:before{content:"\e66a"}.layui-icon-tread:before{content:"\e6c5"}.layui-icon-praise:before{content:"\e6c6"}.layui-icon-star-fill:before{content:"\e658"}.layui-icon-rate:before{content:"\e67b"}.layui-icon-template-1:before{content:"\e656"}.layui-icon-vercode:before{content:"\e679"}.layui-icon-service:before{content:"\e626"}.layui-icon-cellphone:before{content:"\e678"}.layui-icon-print:before{content:"\e66d"}.layui-icon-cols:before{content:"\e610"}.layui-icon-wifi:before{content:"\e7e0"}.layui-icon-export:before{content:"\e67d"}.layui-icon-rss:before{content:"\e808"}.layui-icon-slider:before{content:"\e714"}.layui-icon-email:before{content:"\e618"}.layui-icon-subtraction:before{content:"\e67e"}.layui-icon-mike:before{content:"\e6dc"}.layui-icon-light:before{content:"\e748"}.layui-icon-gift:before{content:"\e627"}.layui-icon-mute:before{content:"\e685"}.layui-icon-reduce-circle:before{content:"\e616"}.layui-icon-music:before{content:"\e690"}.layui-main{width:1140px;margin:0 auto}.layui-header{z-index:1000;height:60px}.layui-header a:hover{transition:all .5s;-webkit-transition:all .5s}.layui-side{position:fixed;left:0;top:0;bottom:0;z-index:999;width:200px}.layui-side-scroll{position:relative;width:220px;height:100%}.layui-body{position:relative;left:200px;right:0;top:0;bottom:0;z-index:900;width:auto;box-sizing:border-box}.layui-layout-admin .layui-header{position:fixed;top:0;left:0;right:0;background-color:#23262E}.layui-layout-admin .layui-side{top:60px;width:200px;overflow-x:hidden}.layui-layout-admin .layui-body{position:absolute;top:60px;padding-bottom:44px}.layui-layout-admin .layui-main{width:auto;margin:0 15px}.layui-layout-admin .layui-footer{position:fixed;left:200px;right:0;bottom:0;z-index:990;height:44px;line-height:44px;padding:0 15px;box-shadow:-1px 0 4px rgb(0 0 0 / 12%);background-color:#FAFAFA}.layui-layout-admin .layui-logo{position:absolute;left:0;top:0;width:200px;height:100%;line-height:60px;text-align:center;color:#009688;font-size:16px;box-shadow:0 1px 2px 0 rgb(0 0 0 / 15%)}.layui-layout-admin .layui-header .layui-nav{background:0 0}.layui-layout-left{position:absolute!important;left:200px;top:0}.layui-layout-right{position:absolute!important;right:0;top:0}.layui-container{position:relative;margin:0 auto;padding:0 15px;box-sizing:border-box}.layui-fluid{position:relative;margin:0 auto;padding:0 15px}.layui-row:after,.layui-row:before{content:"";display:block;clear:both}.layui-col-lg1,.layui-col-lg10,.layui-col-lg11,.layui-col-lg12,.layui-col-lg2,.layui-col-lg3,.layui-col-lg4,.layui-col-lg5,.layui-col-lg6,.layui-col-lg7,.layui-col-lg8,.layui-col-lg9,.layui-col-md1,.layui-col-md10,.layui-col-md11,.layui-col-md12,.layui-col-md2,.layui-col-md3,.layui-col-md4,.layui-col-md5,.layui-col-md6,.layui-col-md7,.layui-col-md8,.layui-col-md9,.layui-col-sm1,.layui-col-sm10,.layui-col-sm11,.layui-col-sm12,.layui-col-sm2,.layui-col-sm3,.layui-col-sm4,.layui-col-sm5,.layui-col-sm6,.layui-col-sm7,.layui-col-sm8,.layui-col-sm9,.layui-col-xs1,.layui-col-xs10,.layui-col-xs11,.layui-col-xs12,.layui-col-xs2,.layui-col-xs3,.layui-col-xs4,.layui-col-xs5,.layui-col-xs6,.layui-col-xs7,.layui-col-xs8,.layui-col-xs9{position:relative;display:block;box-sizing:border-box}.layui-col-xs1,.layui-col-xs10,.layui-col-xs11,.layui-col-xs12,.layui-col-xs2,.layui-col-xs3,.layui-col-xs4,.layui-col-xs5,.layui-col-xs6,.layui-col-xs7,.layui-col-xs8,.layui-col-xs9{float:left}.layui-col-xs1{width:8.33333333%}.layui-col-xs2{width:16.66666667%}.layui-col-xs3{width:25%}.layui-col-xs4{width:33.33333333%}.layui-col-xs5{width:41.66666667%}.layui-col-xs6{width:50%}.layui-col-xs7{width:58.33333333%}.layui-col-xs8{width:66.66666667%}.layui-col-xs9{width:75%}.layui-col-xs10{width:83.33333333%}.layui-col-xs11{width:91.66666667%}.layui-col-xs12{width:100%}.layui-col-xs-offset1{margin-left:8.33333333%}.layui-col-xs-offset2{margin-left:16.66666667%}.layui-col-xs-offset3{margin-left:25%}.layui-col-xs-offset4{margin-left:33.33333333%}.layui-col-xs-offset5{margin-left:41.66666667%}.layui-col-xs-offset6{margin-left:50%}.layui-col-xs-offset7{margin-left:58.33333333%}.layui-col-xs-offset8{margin-left:66.66666667%}.layui-col-xs-offset9{margin-left:75%}.layui-col-xs-offset10{margin-left:83.33333333%}.layui-col-xs-offset11{margin-left:91.66666667%}.layui-col-xs-offset12{margin-left:100%}@media screen and (max-width:768px){.layui-hide-xs{display:none!important}.layui-show-xs-block{display:block!important}.layui-show-xs-inline{display:inline!important}.layui-show-xs-inline-block{display:inline-block!important}}@media screen and (min-width:768px){.layui-container{width:750px}.layui-hide-sm{display:none!important}.layui-show-sm-block{display:block!important}.layui-show-sm-inline{display:inline!important}.layui-show-sm-inline-block{display:inline-block!important}.layui-col-sm1,.layui-col-sm10,.layui-col-sm11,.layui-col-sm12,.layui-col-sm2,.layui-col-sm3,.layui-col-sm4,.layui-col-sm5,.layui-col-sm6,.layui-col-sm7,.layui-col-sm8,.layui-col-sm9{float:left}.layui-col-sm1{width:8.33333333%}.layui-col-sm2{width:16.66666667%}.layui-col-sm3{width:25%}.layui-col-sm4{width:33.33333333%}.layui-col-sm5{width:41.66666667%}.layui-col-sm6{width:50%}.layui-col-sm7{width:58.33333333%}.layui-col-sm8{width:66.66666667%}.layui-col-sm9{width:75%}.layui-col-sm10{width:83.33333333%}.layui-col-sm11{width:91.66666667%}.layui-col-sm12{width:100%}.layui-col-sm-offset1{margin-left:8.33333333%}.layui-col-sm-offset2{margin-left:16.66666667%}.layui-col-sm-offset3{margin-left:25%}.layui-col-sm-offset4{margin-left:33.33333333%}.layui-col-sm-offset5{margin-left:41.66666667%}.layui-col-sm-offset6{margin-left:50%}.layui-col-sm-offset7{margin-left:58.33333333%}.layui-col-sm-offset8{margin-left:66.66666667%}.layui-col-sm-offset9{margin-left:75%}.layui-col-sm-offset10{margin-left:83.33333333%}.layui-col-sm-offset11{margin-left:91.66666667%}.layui-col-sm-offset12{margin-left:100%}}@media screen and (min-width:992px){.layui-container{width:970px}.layui-hide-md{display:none!important}.layui-show-md-block{display:block!important}.layui-show-md-inline{display:inline!important}.layui-show-md-inline-block{display:inline-block!important}.layui-col-md1,.layui-col-md10,.layui-col-md11,.layui-col-md12,.layui-col-md2,.layui-col-md3,.layui-col-md4,.layui-col-md5,.layui-col-md6,.layui-col-md7,.layui-col-md8,.layui-col-md9{float:left}.layui-col-md1{width:8.33333333%}.layui-col-md2{width:16.66666667%}.layui-col-md3{width:25%}.layui-col-md4{width:33.33333333%}.layui-col-md5{width:41.66666667%}.layui-col-md6{width:50%}.layui-col-md7{width:58.33333333%}.layui-col-md8{width:66.66666667%}.layui-col-md9{width:75%}.layui-col-md10{width:83.33333333%}.layui-col-md11{width:91.66666667%}.layui-col-md12{width:100%}.layui-col-md-offset1{margin-left:8.33333333%}.layui-col-md-offset2{margin-left:16.66666667%}.layui-col-md-offset3{margin-left:25%}.layui-col-md-offset4{margin-left:33.33333333%}.layui-col-md-offset5{margin-left:41.66666667%}.layui-col-md-offset6{margin-left:50%}.layui-col-md-offset7{margin-left:58.33333333%}.layui-col-md-offset8{margin-left:66.66666667%}.layui-col-md-offset9{margin-left:75%}.layui-col-md-offset10{margin-left:83.33333333%}.layui-col-md-offset11{margin-left:91.66666667%}.layui-col-md-offset12{margin-left:100%}}@media screen and (min-width:1200px){.layui-container{width:1170px}.layui-hide-lg{display:none!important}.layui-show-lg-block{display:block!important}.layui-show-lg-inline{display:inline!important}.layui-show-lg-inline-block{display:inline-block!important}.layui-col-lg1,.layui-col-lg10,.layui-col-lg11,.layui-col-lg12,.layui-col-lg2,.layui-col-lg3,.layui-col-lg4,.layui-col-lg5,.layui-col-lg6,.layui-col-lg7,.layui-col-lg8,.layui-col-lg9{float:left}.layui-col-lg1{width:8.33333333%}.layui-col-lg2{width:16.66666667%}.layui-col-lg3{width:25%}.layui-col-lg4{width:33.33333333%}.layui-col-lg5{width:41.66666667%}.layui-col-lg6{width:50%}.layui-col-lg7{width:58.33333333%}.layui-col-lg8{width:66.66666667%}.layui-col-lg9{width:75%}.layui-col-lg10{width:83.33333333%}.layui-col-lg11{width:91.66666667%}.layui-col-lg12{width:100%}.layui-col-lg-offset1{margin-left:8.33333333%}.layui-col-lg-offset2{margin-left:16.66666667%}.layui-col-lg-offset3{margin-left:25%}.layui-col-lg-offset4{margin-left:33.33333333%}.layui-col-lg-offset5{margin-left:41.66666667%}.layui-col-lg-offset6{margin-left:50%}.layui-col-lg-offset7{margin-left:58.33333333%}.layui-col-lg-offset8{margin-left:66.66666667%}.layui-col-lg-offset9{margin-left:75%}.layui-col-lg-offset10{margin-left:83.33333333%}.layui-col-lg-offset11{margin-left:91.66666667%}.layui-col-lg-offset12{margin-left:100%}}.layui-col-space1{margin:-.5px}.layui-col-space1>*{padding:.5px}.layui-col-space2{margin:-1px}.layui-col-space2>*{padding:1px}.layui-col-space4{margin:-2px}.layui-col-space4>*{padding:2px}.layui-col-space5{margin:-2.5px}.layui-col-space5>*{padding:2.5px}.layui-col-space6{margin:-3px}.layui-col-space6>*{padding:3px}.layui-col-space8{margin:-4px}.layui-col-space8>*{padding:4px}.layui-col-space10{margin:-5px}.layui-col-space10>*{padding:5px}.layui-col-space12{margin:-6px}.layui-col-space12>*{padding:6px}.layui-col-space14{margin:-7px}.layui-col-space14>*{padding:7px}.layui-col-space15{margin:-7.5px}.layui-col-space15>*{padding:7.5px}.layui-col-space16{margin:-8px}.layui-col-space16>*{padding:8px}.layui-col-space18{margin:-9px}.layui-col-space18>*{padding:9px}.layui-col-space20{margin:-10px}.layui-col-space20>*{padding:10px}.layui-col-space22{margin:-11px}.layui-col-space22>*{padding:11px}.layui-col-space24{margin:-12px}.layui-col-space24>*{padding:12px}.layui-col-space25{margin:-12.5px}.layui-col-space25>*{padding:12.5px}.layui-col-space26{margin:-13px}.layui-col-space26>*{padding:13px}.layui-col-space28{margin:-14px}.layui-col-space28>*{padding:14px}.layui-col-space30{margin:-15px}.layui-col-space30>*{padding:15px}.layui-btn,.layui-input,.layui-select,.layui-textarea,.layui-upload-button{outline:0;-webkit-appearance:none;transition:all .3s;-webkit-transition:all .3s;box-sizing:border-box}.layui-elem-quote{margin-bottom:10px;padding:15px;line-height:1.6;border-left:5px solid #5FB878;border-radius:0 2px 2px 0;background-color:#FAFAFA}.layui-quote-nm{border-style:solid;border-width:1px 1px 1px 5px;background:0 0}.layui-elem-field{margin-bottom:10px;padding:0;border-width:1px;border-style:solid}.layui-elem-field legend{margin-left:20px;padding:0 10px;font-size:20px;font-weight:300}.layui-field-title{margin:10px 0 20px;border-width:1px 0 0}.layui-field-box{padding:15px}.layui-field-title .layui-field-box{padding:10px 0}.layui-progress{position:relative;height:6px;border-radius:20px;background-color:#eee}.layui-progress-bar{position:absolute;left:0;top:0;width:0;max-width:100%;height:6px;border-radius:20px;text-align:right;background-color:#5FB878;transition:all .3s;-webkit-transition:all .3s}.layui-progress-big,.layui-progress-big .layui-progress-bar{height:18px;line-height:18px}.layui-progress-text{position:relative;top:-20px;line-height:18px;font-size:12px;color:#666}.layui-progress-big .layui-progress-text{position:static;padding:0 10px;color:#fff}.layui-collapse{border-width:1px;border-style:solid;border-radius:2px}.layui-colla-content,.layui-colla-item{border-top-width:1px;border-top-style:solid}.layui-colla-item:first-child{border-top:none}.layui-colla-title{position:relative;height:42px;line-height:42px;padding:0 15px 0 35px;color:#333;background-color:#FAFAFA;cursor:pointer;font-size:14px;overflow:hidden}.layui-colla-content{display:none;padding:10px 15px;line-height:1.6;color:#666}.layui-colla-icon{position:absolute;left:15px;top:0;font-size:14px}.layui-card-body,.layui-card-header,.layui-form-label,.layui-form-mid,.layui-form-select,.layui-input-block,.layui-input-inline,.layui-panel,.layui-textarea{position:relative}.layui-card{margin-bottom:15px;border-radius:2px;background-color:#fff;box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.layui-form-select dl,.layui-panel{box-shadow:1px 1px 4px rgb(0 0 0 / 8%)}.layui-card:last-child{margin-bottom:0}.layui-card-header{height:42px;line-height:42px;padding:0 15px;border-bottom:1px solid #f6f6f6;color:#333;border-radius:2px 2px 0 0;font-size:14px}.layui-card-body{padding:10px 15px;line-height:24px}.layui-card-body[pad15]{padding:15px}.layui-card-body[pad20]{padding:20px}.layui-card-body .layui-table{margin:5px 0}.layui-card .layui-tab{margin:0}.layui-panel{border-width:1px;border-style:solid;border-radius:2px;background-color:#fff;color:#666}.layui-bg-black,.layui-bg-blue,.layui-bg-cyan,.layui-bg-green,.layui-bg-orange,.layui-bg-red{color:#fff!important}.layui-panel-window{position:relative;padding:15px;border-radius:0;border-top:5px solid #eee;background-color:#fff}.layui-border,.layui-border-black,.layui-border-blue,.layui-border-cyan,.layui-border-green,.layui-border-orange,.layui-border-red{border-width:1px;border-style:solid}.layui-auxiliar-moving{position:fixed;left:0;right:0;top:0;bottom:0;width:100%;height:100%;background:0 0;z-index:9999999999}.layui-bg-red{background-color:#FF5722!important}.layui-bg-orange{background-color:#FFB800!important}.layui-bg-green{background-color:#009688!important}.layui-bg-cyan{background-color:#2F4056!important}.layui-bg-blue{background-color:#1E9FFF!important}.layui-bg-black{background-color:#393D49!important}.layui-bg-gray{background-color:#FAFAFA!important;color:#666!important}.layui-badge-rim,.layui-border,.layui-colla-content,.layui-colla-item,.layui-collapse,.layui-elem-field,.layui-form-pane .layui-form-item[pane],.layui-form-pane .layui-form-label,.layui-input,.layui-layedit,.layui-layedit-tool,.layui-panel,.layui-quote-nm,.layui-select,.layui-tab-bar,.layui-tab-card,.layui-tab-title,.layui-tab-title .layui-this:after,.layui-textarea{border-color:#eee}.layui-border{color:#666!important}.layui-border-red{border-color:#FF5722!important;color:#FF5722!important}.layui-border-orange{border-color:#FFB800!important;color:#FFB800!important}.layui-border-green{border-color:#009688!important;color:#009688!important}.layui-border-cyan{border-color:#2F4056!important;color:#2F4056!important}.layui-border-blue{border-color:#1E9FFF!important;color:#1E9FFF!important}.layui-border-black{border-color:#393D49!important;color:#393D49!important}.layui-timeline-item:before{background-color:#eee}.layui-text{line-height:1.6;font-size:14px;color:#666}.layui-text h1,.layui-text h2,.layui-text h3{font-weight:500;color:#333}.layui-text h1{font-size:30px}.layui-text h2{font-size:24px}.layui-text h3{font-size:18px}.layui-text a:not(.layui-btn){color:#01AAED}.layui-text a:not(.layui-btn):hover{text-decoration:underline}.layui-text ul{padding:5px 0 5px 15px}.layui-text ul li{margin-top:5px;list-style-type:disc}.layui-text em,.layui-word-aux{color:#999!important;padding-left:5px!important;padding-right:5px!important}.layui-text p{margin:10px 0}.layui-text p:first-child{margin-top:0}.layui-font-12{font-size:12px!important}.layui-font-14{font-size:14px!important}.layui-font-16{font-size:16px!important}.layui-font-18{font-size:18px!important}.layui-font-20{font-size:20px!important}.layui-font-red{color:#FF5722!important}.layui-font-orange{color:#FFB800!important}.layui-font-green{color:#009688!important}.layui-font-cyan{color:#2F4056!important}.layui-font-blue{color:#01AAED!important}.layui-font-black{color:#000!important}.layui-font-gray{color:#c2c2c2!important}.layui-btn{height:38px;line-height:38px;border:1px solid transparent;padding:0 18px;background-color:#009688;color:#fff;white-space:nowrap;text-align:center;font-size:14px;border-radius:2px;cursor:pointer}.layui-btn:hover{opacity:.8;filter:alpha(opacity=80);color:#fff}.layui-btn:active{opacity:1;filter:alpha(opacity=100)}.layui-btn+.layui-btn{margin-left:10px}.layui-btn-container{font-size:0}.layui-btn-container .layui-btn{margin-right:10px;margin-bottom:10px}.layui-btn-container .layui-btn+.layui-btn{margin-left:0}.layui-table .layui-btn-container .layui-btn{margin-bottom:9px}.layui-btn-radius{border-radius:100px}.layui-btn .layui-icon{padding:0 2px;vertical-align:middle\9;vertical-align:bottom}.layui-btn-primary{border-color:#d2d2d2;background:0 0;color:#666}.layui-btn-primary:hover{border-color:#009688;color:#333}.layui-btn-normal{background-color:#1E9FFF}.layui-btn-warm{background-color:#FFB800}.layui-btn-danger{background-color:#FF5722}.layui-btn-checked{background-color:#5FB878}.layui-btn-disabled,.layui-btn-disabled:active,.layui-btn-disabled:hover{border-color:#eee!important;background-color:#FBFBFB!important;color:#d2d2d2!important;cursor:not-allowed!important;opacity:1}.layui-btn-lg{height:44px;line-height:44px;padding:0 25px;font-size:16px}.layui-btn-sm{height:30px;line-height:30px;padding:0 10px;font-size:12px}.layui-btn-xs{height:22px;line-height:22px;padding:0 5px;font-size:12px}.layui-btn-xs i{font-size:12px!important}.layui-btn-group{vertical-align:middle;font-size:0}.layui-btn-group .layui-btn{margin-left:0!important;margin-right:0!important;border-left:1px solid rgba(255,255,255,.5);border-radius:0}.layui-btn-group .layui-btn-primary{border-left:none}.layui-btn-group .layui-btn-primary:hover{border-color:#d2d2d2;color:#009688}.layui-btn-group .layui-btn:first-child{border-left:none;border-radius:2px 0 0 2px}.layui-btn-group .layui-btn-primary:first-child{border-left:1px solid #d2d2d2}.layui-btn-group .layui-btn:last-child{border-radius:0 2px 2px 0}.layui-btn-group .layui-btn+.layui-btn{margin-left:0}.layui-btn-group+.layui-btn-group{margin-left:10px}.layui-btn-fluid{width:100%}.layui-input,.layui-select,.layui-textarea{height:38px;line-height:1.3;line-height:38px\9;border-width:1px;border-style:solid;background-color:#fff;color:rgba(0,0,0,.85);border-radius:2px}.layui-input::-webkit-input-placeholder,.layui-select::-webkit-input-placeholder,.layui-textarea::-webkit-input-placeholder{line-height:1.3}.layui-input,.layui-textarea{display:block;width:100%;padding-left:10px}.layui-input:hover,.layui-textarea:hover{border-color:#eee!important}.layui-input:focus,.layui-textarea:focus{border-color:#d2d2d2!important}.layui-textarea{min-height:100px;height:auto;line-height:20px;padding:6px 10px;resize:vertical}.layui-select{padding:0 10px}.layui-form input[type=checkbox],.layui-form input[type=radio],.layui-form select{display:none}.layui-form [lay-ignore]{display:initial}.layui-form-item{margin-bottom:15px;clear:both;*zoom:1}.layui-form-item:after{content:'\20';clear:both;*zoom:1;display:block;height:0}.layui-form-label{float:left;display:block;padding:9px 15px;width:80px;font-weight:400;line-height:20px;text-align:right}.layui-form-label-col{display:block;float:none;padding:9px 0;line-height:20px;text-align:left}.layui-form-item .layui-inline{margin-bottom:5px;margin-right:10px}.layui-input-block{margin-left:110px;min-height:36px}.layui-input-inline{display:inline-block;vertical-align:middle}.layui-form-item .layui-input-inline{float:left;width:190px;margin-right:10px}.layui-form-text .layui-input-inline{width:auto}.layui-form-mid{float:left;display:block;padding:9px 0!important;line-height:20px;margin-right:10px}.layui-form-danger+.layui-form-select .layui-input,.layui-form-danger:focus{border-color:#FF5722!important}.layui-form-select .layui-input{padding-right:30px;cursor:pointer}.layui-form-select .layui-edge{position:absolute;right:10px;top:50%;margin-top:-3px;cursor:pointer;border-width:6px;border-top-color:#c2c2c2;border-top-style:solid;transition:all .3s;-webkit-transition:all .3s}.layui-form-select dl{display:none;position:absolute;left:0;top:42px;padding:5px 0;z-index:899;min-width:100%;border:1px solid #eee;max-height:300px;overflow-y:auto;background-color:#fff;border-radius:2px;box-sizing:border-box}.layui-form-select dl dd,.layui-form-select dl dt{padding:0 10px;line-height:36px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.layui-form-select dl dt{font-size:12px;color:#999}.layui-form-select dl dd{cursor:pointer}.layui-form-select dl dd:hover{background-color:#F6F6F6;-webkit-transition:.5s all;transition:.5s all}.layui-form-select .layui-select-group dd{padding-left:20px}.layui-form-select dl dd.layui-select-tips{padding-left:10px!important;color:#999}.layui-form-select dl dd.layui-this{background-color:#5FB878;color:#fff}.layui-form-checkbox,.layui-form-select dl dd.layui-disabled{background-color:#fff}.layui-form-selected dl{display:block}.layui-form-checkbox,.layui-form-checkbox *,.layui-form-switch{display:inline-block;vertical-align:middle}.layui-form-selected .layui-edge{margin-top:-9px;-webkit-transform:rotate(180deg);transform:rotate(180deg);margin-top:-3px\9}:root .layui-form-selected .layui-edge{margin-top:-9px\0/IE9}.layui-form-selectup dl{top:auto;bottom:42px}.layui-select-none{margin:5px 0;text-align:center;color:#999}.layui-select-disabled .layui-disabled{border-color:#eee!important}.layui-select-disabled .layui-edge{border-top-color:#d2d2d2}.layui-form-checkbox{position:relative;height:30px;line-height:30px;margin-right:10px;padding-right:30px;cursor:pointer;font-size:0;-webkit-transition:.1s linear;transition:.1s linear;box-sizing:border-box}.layui-form-checkbox span{padding:0 10px;height:100%;font-size:14px;border-radius:2px 0 0 2px;background-color:#d2d2d2;color:#fff;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.layui-form-checkbox:hover span{background-color:#c2c2c2}.layui-form-checkbox i{position:absolute;right:0;top:0;width:30px;height:28px;border:1px solid #d2d2d2;border-left:none;border-radius:0 2px 2px 0;color:#fff;font-size:20px;text-align:center}.layui-form-checkbox:hover i{border-color:#c2c2c2;color:#c2c2c2}.layui-form-checked,.layui-form-checked:hover{border-color:#5FB878}.layui-form-checked span,.layui-form-checked:hover span{background-color:#5FB878}.layui-form-checked i,.layui-form-checked:hover i{color:#5FB878}.layui-form-item .layui-form-checkbox{margin-top:4px}.layui-form-checkbox[lay-skin=primary]{height:auto!important;line-height:normal!important;min-width:18px;min-height:18px;border:none!important;margin-right:0;padding-left:28px;padding-right:0;background:0 0}.layui-form-checkbox[lay-skin=primary] span{padding-left:0;padding-right:15px;line-height:18px;background:0 0;color:#666}.layui-form-checkbox[lay-skin=primary] i{right:auto;left:0;width:16px;height:16px;line-height:16px;border:1px solid #d2d2d2;font-size:12px;border-radius:2px;background-color:#fff;-webkit-transition:.1s linear;transition:.1s linear}.layui-form-checkbox[lay-skin=primary]:hover i{border-color:#5FB878;color:#fff}.layui-form-checked[lay-skin=primary] i{border-color:#5FB878!important;background-color:#5FB878;color:#fff}.layui-checkbox-disabled[lay-skin=primary] span{background:0 0!important;color:#c2c2c2!important}.layui-checkbox-disabled[lay-skin=primary]:hover i{border-color:#d2d2d2}.layui-form-item .layui-form-checkbox[lay-skin=primary]{margin-top:10px}.layui-form-switch{position:relative;height:22px;line-height:22px;min-width:35px;padding:0 5px;margin-top:8px;border:1px solid #d2d2d2;border-radius:20px;cursor:pointer;background-color:#fff;-webkit-transition:.1s linear;transition:.1s linear}.layui-form-switch i{position:absolute;left:5px;top:3px;width:16px;height:16px;border-radius:20px;background-color:#d2d2d2;-webkit-transition:.1s linear;transition:.1s linear}.layui-form-switch em{position:relative;top:0;width:25px;margin-left:21px;padding:0!important;text-align:center!important;color:#999!important;font-style:normal!important;font-size:12px}.layui-form-onswitch{border-color:#5FB878;background-color:#5FB878}.layui-checkbox-disabled,.layui-checkbox-disabled i{border-color:#eee!important}.layui-form-onswitch i{left:100%;margin-left:-21px;background-color:#fff}.layui-form-onswitch em{margin-left:5px;margin-right:21px;color:#fff!important}.layui-checkbox-disabled span{background-color:#eee!important}.layui-checkbox-disabled em{color:#d2d2d2!important}.layui-checkbox-disabled:hover i{color:#fff!important}[lay-radio]{display:none}.layui-form-radio,.layui-form-radio *{display:inline-block;vertical-align:middle}.layui-form-radio{line-height:28px;margin:6px 10px 0 0;padding-right:10px;cursor:pointer;font-size:0}.layui-form-radio *{font-size:14px}.layui-form-radio>i{margin-right:8px;font-size:22px;color:#c2c2c2}.layui-form-radio:hover *,.layui-form-radioed,.layui-form-radioed>i{color:#5FB878}.layui-radio-disabled>i{color:#eee!important}.layui-radio-disabled *{color:#c2c2c2!important}.layui-form-pane .layui-form-label{width:110px;padding:8px 15px;height:38px;line-height:20px;border-width:1px;border-style:solid;border-radius:2px 0 0 2px;text-align:center;background-color:#FAFAFA;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;box-sizing:border-box}.layui-form-pane .layui-input-inline{margin-left:-1px}.layui-form-pane .layui-input-block{margin-left:110px;left:-1px}.layui-form-pane .layui-input{border-radius:0 2px 2px 0}.layui-form-pane .layui-form-text .layui-form-label{float:none;width:100%;border-radius:2px;box-sizing:border-box;text-align:left}.layui-form-pane .layui-form-text .layui-input-inline{display:block;margin:0;top:-1px;clear:both}.layui-form-pane .layui-form-text .layui-input-block{margin:0;left:0;top:-1px}.layui-form-pane .layui-form-text .layui-textarea{min-height:100px;border-radius:0 0 2px 2px}.layui-form-pane .layui-form-checkbox{margin:4px 0 4px 10px}.layui-form-pane .layui-form-radio,.layui-form-pane .layui-form-switch{margin-top:6px;margin-left:10px}.layui-form-pane .layui-form-item[pane]{position:relative;border-width:1px;border-style:solid}.layui-form-pane .layui-form-item[pane] .layui-form-label{position:absolute;left:0;top:0;height:100%;border-width:0 1px 0 0}.layui-form-pane .layui-form-item[pane] .layui-input-inline{margin-left:110px}@media screen and (max-width:450px){.layui-form-item .layui-form-label{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-form-item .layui-inline{display:block;margin-right:0;margin-bottom:20px;clear:both}.layui-form-item .layui-inline:after{content:'\20';clear:both;display:block;height:0}.layui-form-item .layui-input-inline{display:block;float:none;left:-3px;width:auto!important;margin:0 0 10px 112px}.layui-form-item .layui-input-inline+.layui-form-mid{margin-left:110px;top:-5px;padding:0}.layui-form-item .layui-form-checkbox{margin-right:5px;margin-bottom:5px}}.layui-layedit{border-width:1px;border-style:solid;border-radius:2px}.layui-layedit-tool{padding:3px 5px;border-bottom-width:1px;border-bottom-style:solid;font-size:0}.layedit-tool-fixed{position:fixed;top:0;border-top:1px solid #eee}.layui-layedit-tool .layedit-tool-mid,.layui-layedit-tool .layui-icon{display:inline-block;vertical-align:middle;text-align:center;font-size:14px}.layui-layedit-tool .layui-icon{position:relative;width:32px;height:30px;line-height:30px;margin:3px 5px;color:#777;cursor:pointer;border-radius:2px}.layui-layedit-tool .layui-icon:hover{color:#393D49}.layui-layedit-tool .layui-icon:active{color:#000}.layui-layedit-tool .layedit-tool-active{background-color:#eee;color:#000}.layui-layedit-tool .layui-disabled,.layui-layedit-tool .layui-disabled:hover{color:#d2d2d2;cursor:not-allowed}.layui-layedit-tool .layedit-tool-mid{width:1px;height:18px;margin:0 10px;background-color:#d2d2d2}.layedit-tool-html{width:50px!important;font-size:30px!important}.layedit-tool-b,.layedit-tool-code,.layedit-tool-help{font-size:16px!important}.layedit-tool-d,.layedit-tool-face,.layedit-tool-image,.layedit-tool-unlink{font-size:18px!important}.layedit-tool-image input{position:absolute;font-size:0;left:0;top:0;width:100%;height:100%;opacity:.01;filter:Alpha(opacity=1);cursor:pointer}.layui-layedit-iframe iframe{display:block;width:100%}#LAY_layedit_code{overflow:hidden}.layui-laypage{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;margin:10px 0;font-size:0}.layui-laypage>a:first-child,.layui-laypage>a:first-child em{border-radius:2px 0 0 2px}.layui-laypage>a:last-child,.layui-laypage>a:last-child em{border-radius:0 2px 2px 0}.layui-laypage>:first-child{margin-left:0!important}.layui-laypage>:last-child{margin-right:0!important}.layui-laypage a,.layui-laypage button,.layui-laypage input,.layui-laypage select,.layui-laypage span{border:1px solid #eee}.layui-laypage a,.layui-laypage span{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;padding:0 15px;height:28px;line-height:28px;margin:0 -1px 5px 0;background-color:#fff;color:#333;font-size:12px}.layui-flow-more a *,.layui-laypage input,.layui-table-view select[lay-ignore]{display:inline-block}.layui-laypage a:hover{color:#009688}.layui-laypage em{font-style:normal}.layui-laypage .layui-laypage-spr{color:#999;font-weight:700}.layui-laypage a{text-decoration:none}.layui-laypage .layui-laypage-curr{position:relative}.layui-laypage .layui-laypage-curr em{position:relative;color:#fff}.layui-laypage .layui-laypage-curr .layui-laypage-em{position:absolute;left:-1px;top:-1px;padding:1px;width:100%;height:100%;background-color:#009688}.layui-laypage-em{border-radius:2px}.layui-laypage-next em,.layui-laypage-prev em{font-family:Sim sun;font-size:16px}.layui-laypage .layui-laypage-count,.layui-laypage .layui-laypage-limits,.layui-laypage .layui-laypage-refresh,.layui-laypage .layui-laypage-skip{margin-left:10px;margin-right:10px;padding:0;border:none}.layui-laypage .layui-laypage-limits,.layui-laypage .layui-laypage-refresh{vertical-align:top}.layui-laypage .layui-laypage-refresh i{font-size:18px;cursor:pointer}.layui-laypage select{height:22px;padding:3px;border-radius:2px;cursor:pointer}.layui-laypage .layui-laypage-skip{height:30px;line-height:30px;color:#999}.layui-laypage button,.layui-laypage input{height:30px;line-height:30px;border-radius:2px;vertical-align:top;background-color:#fff;box-sizing:border-box}.layui-laypage input{width:40px;margin:0 10px;padding:0 3px;text-align:center}.layui-laypage input:focus,.layui-laypage select:focus{border-color:#009688!important}.layui-laypage button{margin-left:10px;padding:0 10px;cursor:pointer}.layui-table,.layui-table-view{margin:10px 0}.layui-flow-more{margin:10px 0;text-align:center;color:#999;font-size:14px}.layui-flow-more a{height:32px;line-height:32px}.layui-flow-more a *{vertical-align:top}.layui-flow-more a cite{padding:0 20px;border-radius:3px;background-color:#eee;color:#333;font-style:normal}.layui-flow-more a cite:hover{opacity:.8}.layui-flow-more a i{font-size:30px;color:#737383}.layui-table{width:100%;background-color:#fff;color:#666}.layui-table tr{transition:all .3s;-webkit-transition:all .3s}.layui-table th{text-align:left;font-weight:400}.layui-table tbody tr:hover,.layui-table thead tr,.layui-table-click,.layui-table-header,.layui-table-hover,.layui-table-mend,.layui-table-patch,.layui-table-tool,.layui-table-total,.layui-table-total tr,.layui-table[lay-even] tr:nth-child(even){background-color:#FAFAFA}.layui-table td,.layui-table th,.layui-table-col-set,.layui-table-fixed-r,.layui-table-grid-down,.layui-table-header,.layui-table-page,.layui-table-tips-main,.layui-table-tool,.layui-table-total,.layui-table-view,.layui-table[lay-skin=line],.layui-table[lay-skin=row]{border-width:1px;border-style:solid;border-color:#eee}.layui-table td,.layui-table th{position:relative;padding:9px 15px;min-height:20px;line-height:20px;font-size:14px}.layui-table[lay-skin=line] td,.layui-table[lay-skin=line] th{border-width:0 0 1px}.layui-table[lay-skin=row] td,.layui-table[lay-skin=row] th{border-width:0 1px 0 0}.layui-table[lay-skin=nob] td,.layui-table[lay-skin=nob] th{border:none}.layui-table img{max-width:100px}.layui-table[lay-size=lg] td,.layui-table[lay-size=lg] th{padding:15px 30px}.layui-table-view .layui-table[lay-size=lg] .layui-table-cell{height:40px;line-height:40px}.layui-table[lay-size=sm] td,.layui-table[lay-size=sm] th{font-size:12px;padding:5px 10px}.layui-table-view .layui-table[lay-size=sm] .layui-table-cell{height:20px;line-height:20px}.layui-table[lay-data]{display:none}.layui-table-box{position:relative;overflow:hidden}.layui-table-view .layui-table{position:relative;width:auto;margin:0}.layui-table-view .layui-table[lay-skin=line]{border-width:0 1px 0 0}.layui-table-view .layui-table[lay-skin=row]{border-width:0 0 1px}.layui-table-view .layui-table td,.layui-table-view .layui-table th{padding:5px 0;border-top:none;border-left:none}.layui-table-view .layui-table th.layui-unselect .layui-table-cell span{cursor:pointer}.layui-table-view .layui-table td{cursor:default}.layui-table-view .layui-table td[data-edit=text]{cursor:text}.layui-table-view .layui-form-checkbox[lay-skin=primary] i{width:18px;height:18px}.layui-table-view .layui-form-radio{line-height:0;padding:0}.layui-table-view .layui-form-radio>i{margin:0;font-size:20px}.layui-table-init{position:absolute;left:0;top:0;width:100%;height:100%;text-align:center;z-index:110}.layui-table-init .layui-icon{position:absolute;left:50%;top:50%;margin:-15px 0 0 -15px;font-size:30px;color:#c2c2c2}.layui-table-header{border-width:0 0 1px;overflow:hidden}.layui-table-header .layui-table{margin-bottom:-1px}.layui-table-tool .layui-inline[lay-event]{position:relative;width:26px;height:26px;padding:5px;line-height:16px;margin-right:10px;text-align:center;color:#333;border:1px solid #ccc;cursor:pointer;-webkit-transition:.5s all;transition:.5s all}.layui-table-tool .layui-inline[lay-event]:hover{border:1px solid #999}.layui-table-tool-temp{padding-right:120px}.layui-table-tool-self{position:absolute;right:17px;top:10px}.layui-table-tool .layui-table-tool-self .layui-inline[lay-event]{margin:0 0 0 10px}.layui-table-tool-panel{position:absolute;top:29px;left:-1px;padding:5px 0;min-width:150px;min-height:40px;border:1px solid #d2d2d2;text-align:left;overflow-y:auto;background-color:#fff;box-shadow:0 2px 4px rgba(0,0,0,.12)}.layui-table-cell,.layui-table-tool-panel li{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.layui-table-tool-panel li{padding:0 10px;line-height:30px;-webkit-transition:.5s all;transition:.5s all}.layui-menu li,.layui-menu-body-title a:hover,.layui-menu-body-title>.layui-icon:hover{transition:all .3s}.layui-table-tool-panel li .layui-form-checkbox[lay-skin=primary]{width:100%;padding-left:28px}.layui-table-tool-panel li:hover{background-color:#F6F6F6}.layui-table-tool-panel li .layui-form-checkbox[lay-skin=primary] i{position:absolute;left:0;top:0}.layui-table-tool-panel li .layui-form-checkbox[lay-skin=primary] span{padding:0}.layui-table-tool .layui-table-tool-self .layui-table-tool-panel{left:auto;right:-1px}.layui-table-col-set{position:absolute;right:0;top:0;width:20px;height:100%;border-width:0 0 0 1px;background-color:#fff}.layui-table-sort{width:10px;height:20px;margin-left:5px;cursor:pointer!important}.layui-table-sort .layui-edge{position:absolute;left:5px;border-width:5px}.layui-table-sort .layui-table-sort-asc{top:3px;border-top:none;border-bottom-style:solid;border-bottom-color:#b2b2b2}.layui-table-sort .layui-table-sort-asc:hover{border-bottom-color:#666}.layui-table-sort .layui-table-sort-desc{bottom:5px;border-bottom:none;border-top-style:solid;border-top-color:#b2b2b2}.layui-table-sort .layui-table-sort-desc:hover{border-top-color:#666}.layui-table-sort[lay-sort=asc] .layui-table-sort-asc{border-bottom-color:#000}.layui-table-sort[lay-sort=desc] .layui-table-sort-desc{border-top-color:#000}.layui-table-cell{height:28px;line-height:28px;padding:0 15px;position:relative;box-sizing:border-box}.layui-table-cell .layui-form-checkbox[lay-skin=primary]{top:-1px;padding:0}.layui-table-cell .layui-table-link{color:#01AAED}.laytable-cell-checkbox,.laytable-cell-numbers,.laytable-cell-radio,.laytable-cell-space{padding:0;text-align:center}.layui-table-body{position:relative;overflow:auto;margin-right:-1px;margin-bottom:-1px}.layui-table-body .layui-none{line-height:26px;padding:30px 15px;text-align:center;color:#999}.layui-table-fixed{position:absolute;left:0;top:0;z-index:101}.layui-table-fixed .layui-table-body{overflow:hidden}.layui-table-fixed-l{box-shadow:1px 0 8px rgba(0,0,0,.08)}.layui-table-fixed-r{left:auto;right:-1px;border-width:0 0 0 1px;box-shadow:-1px 0 8px rgba(0,0,0,.08)}.layui-table-fixed-r .layui-table-header{position:relative;overflow:visible}.layui-table-mend{position:absolute;right:-49px;top:0;height:100%;width:50px}.layui-table-tool{position:relative;z-index:890;width:100%;min-height:50px;line-height:30px;padding:10px 15px;border-width:0 0 1px}.layui-table-tool .layui-btn-container{margin-bottom:-10px}.layui-table-page,.layui-table-total{border-width:1px 0 0;margin-bottom:-1px;overflow:hidden}.layui-table-page{position:relative;width:100%;padding:7px 7px 0;height:41px;font-size:12px;white-space:nowrap}.layui-table-page>div{height:26px}.layui-table-page .layui-laypage{margin:0}.layui-table-page .layui-laypage a,.layui-table-page .layui-laypage span{height:26px;line-height:26px;margin-bottom:10px;border:none;background:0 0}.layui-table-page .layui-laypage a,.layui-table-page .layui-laypage span.layui-laypage-curr{padding:0 12px}.layui-table-page .layui-laypage span{margin-left:0;padding:0}.layui-table-page .layui-laypage .layui-laypage-prev{margin-left:-7px!important}.layui-table-page .layui-laypage .layui-laypage-curr .layui-laypage-em{left:0;top:0;padding:0}.layui-table-page .layui-laypage button,.layui-table-page .layui-laypage input{height:26px;line-height:26px}.layui-table-page .layui-laypage input{width:40px}.layui-table-page .layui-laypage button{padding:0 10px}.layui-table-page select{height:18px}.layui-table-patch .layui-table-cell{padding:0;width:30px}.layui-table-edit{position:absolute;left:0;top:0;width:100%;height:100%;padding:0 14px 1px;border-radius:0;box-shadow:1px 1px 20px rgba(0,0,0,.15)}.layui-table-edit:focus{border-color:#5FB878!important}select.layui-table-edit{padding:0 0 0 10px;border-color:#d2d2d2}.layui-table-view .layui-form-checkbox,.layui-table-view .layui-form-radio,.layui-table-view .layui-form-switch{top:0;margin:0;box-sizing:content-box}.layui-colorpicker-alpha-slider,.layui-colorpicker-side-slider,.layui-menu,.layui-menu *,.layui-nav{box-sizing:border-box}.layui-table-view .layui-form-checkbox{top:-1px;height:26px;line-height:26px}.layui-table-view .layui-form-checkbox i{height:26px}.layui-table-grid .layui-table-cell{overflow:visible}.layui-table-grid-down{position:absolute;top:0;right:0;width:26px;height:100%;padding:5px 0;border-width:0 0 0 1px;text-align:center;background-color:#fff;color:#999;cursor:pointer}.layui-table-grid-down .layui-icon{position:absolute;top:50%;left:50%;margin:-8px 0 0 -8px}.layui-table-grid-down:hover{background-color:#fbfbfb}body .layui-table-tips .layui-layer-content{background:0 0;padding:0;box-shadow:0 1px 6px rgba(0,0,0,.12)}.layui-table-tips-main{margin:-44px 0 0 -1px;max-height:150px;padding:8px 15px;font-size:14px;overflow-y:scroll;background-color:#fff;color:#666}.layui-table-tips-c{position:absolute;right:-3px;top:-13px;width:20px;height:20px;padding:3px;cursor:pointer;background-color:#666;border-radius:50%;color:#fff}.layui-table-tips-c:hover{background-color:#777}.layui-table-tips-c:before{position:relative;right:-2px}.layui-upload-file{display:none!important;opacity:.01;filter:Alpha(opacity=1)}.layui-upload-drag,.layui-upload-form,.layui-upload-wrap{display:inline-block}.layui-upload-list{margin:10px 0}.layui-upload-choose{max-width:200px;padding:0 10px;color:#999;font-size:14px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-upload-drag{position:relative;padding:30px;border:1px dashed #e2e2e2;background-color:#fff;text-align:center;cursor:pointer;color:#999}.layui-upload-drag .layui-icon{font-size:50px;color:#009688}.layui-upload-drag[lay-over]{border-color:#009688}.layui-upload-iframe{position:absolute;width:0;height:0;border:0;visibility:hidden}.layui-upload-wrap{position:relative;vertical-align:middle}.layui-upload-wrap .layui-upload-file{display:block!important;position:absolute;left:0;top:0;z-index:10;font-size:100px;width:100%;height:100%;opacity:.01;filter:Alpha(opacity=1);cursor:pointer}.layui-btn-container .layui-upload-choose{padding-left:0}.layui-menu{position:relative;margin:5px 0;background-color:#fff}.layui-menu li,.layui-menu-body-title a{padding:5px 15px}.layui-menu li{position:relative;margin:1px 0;width:calc(100% + 1px);line-height:26px;color:rgba(0,0,0,.8);font-size:14px;white-space:nowrap;cursor:pointer}.layui-menu li:hover{background-color:#F6F6F6}.layui-menu-item-parent:hover>.layui-menu-body-panel{display:block;animation-name:layui-fadein;animation-duration:.3s;animation-fill-mode:both;animation-delay:.2s}.layui-menu-item-group .layui-menu-body-title,.layui-menu-item-parent .layui-menu-body-title{padding-right:25px}.layui-menu .layui-menu-item-divider:hover,.layui-menu .layui-menu-item-group:hover,.layui-menu .layui-menu-item-none:hover{background:0 0;cursor:default}.layui-menu .layui-menu-item-group>ul{margin:5px 0 -5px}.layui-menu .layui-menu-item-group>.layui-menu-body-title{color:rgba(0,0,0,.35);user-select:none}.layui-menu .layui-menu-item-none{color:rgba(0,0,0,.35);cursor:default;text-align:center}.layui-menu .layui-menu-item-divider{margin:5px 0;padding:0;height:0;line-height:0;border-bottom:1px solid #eee;overflow:hidden}.layui-menu .layui-menu-item-down:hover,.layui-menu .layui-menu-item-up:hover{cursor:pointer}.layui-menu .layui-menu-item-up>.layui-menu-body-title{color:rgba(0,0,0,.8)}.layui-menu .layui-menu-item-up>ul{visibility:hidden;height:0;overflow:hidden}.layui-menu .layui-menu-item-down:hover>.layui-menu-body-title>.layui-icon,.layui-menu .layui-menu-item-up>.layui-menu-body-title:hover>.layui-icon{color:rgba(0,0,0,1)}.layui-menu .layui-menu-item-down>ul{visibility:visible;height:auto}.layui-breadcrumb,.layui-tree-btnGroup{visibility:hidden}.layui-menu .layui-menu-item-checked,.layui-menu .layui-menu-item-checked2{background-color:#F6F6F6!important;color:#5FB878}.layui-menu .layui-menu-item-checked a,.layui-menu .layui-menu-item-checked2 a{color:#5FB878}.layui-menu .layui-menu-item-checked:after{position:absolute;right:0;top:0;bottom:0;border-right:3px solid #5FB878;content:""}.layui-menu-body-title{position:relative;overflow:hidden;text-overflow:ellipsis}.layui-menu-body-title a{display:block;margin:-5px -15px;color:rgba(0,0,0,.8)}.layui-menu-body-title>.layui-icon{position:absolute;right:0;top:0;font-size:14px}.layui-menu-body-title>.layui-icon-right{right:-1px}.layui-menu-body-panel{display:none;position:absolute;top:-7px;left:100%;z-index:1000;margin-left:13px;padding:5px 0}.layui-menu-body-panel:before{content:"";position:absolute;width:20px;left:-16px;top:0;bottom:0}.layui-menu-body-panel-left{left:auto;right:100%;margin:0 13px}.layui-menu-body-panel-left:before{left:auto;right:-16px}.layui-menu-lg li{line-height:32px}.layui-menu-lg .layui-menu-body-title a:hover,.layui-menu-lg li:hover{background:0 0;color:#5FB878}.layui-menu-lg li .layui-menu-body-panel{margin-left:14px}.layui-menu-lg li .layui-menu-body-panel-left{margin:0 15px}.layui-dropdown{position:absolute;left:-999999px;top:-999999px;z-index:66666666;margin:5px 0;min-width:100px}.layui-dropdown:before{content:"";position:absolute;width:100%;height:6px;left:0;top:-6px}.layui-nav{position:relative;padding:0 20px;background-color:#393D49;color:#fff;border-radius:2px;font-size:0}.layui-nav *{font-size:14px}.layui-nav .layui-nav-item{position:relative;display:inline-block;*display:inline;*zoom:1;vertical-align:middle;line-height:60px}.layui-nav .layui-nav-item a{display:block;padding:0 20px;color:#fff;color:rgba(255,255,255,.7);transition:all .3s;-webkit-transition:all .3s}.layui-nav .layui-this:after,.layui-nav-bar{content:"";position:absolute;left:0;top:0;width:0;height:5px;background-color:#5FB878;transition:all .2s;-webkit-transition:all .2s;pointer-events:none}.layui-nav-bar{z-index:1000}.layui-nav[lay-bar=disabled] .layui-nav-bar{display:none}.layui-nav .layui-nav-item a:hover,.layui-nav .layui-this a{color:#fff}.layui-nav .layui-this:after{top:auto;bottom:0;width:100%}.layui-nav-img{width:30px;height:30px;margin-right:10px;border-radius:50%}.layui-nav .layui-nav-more{position:absolute;top:0;right:3px;left:auto!important;margin-top:0;font-size:12px;cursor:pointer;transition:all .2s;-webkit-transition:all .2s}.layui-nav .layui-nav-mored,.layui-nav-itemed>a .layui-nav-more{transform:rotate(180deg)}.layui-nav-child{display:none;position:absolute;left:0;top:65px;min-width:100%;line-height:36px;padding:5px 0;box-shadow:0 2px 4px rgba(0,0,0,.12);border:1px solid #eee;background-color:#fff;z-index:100;border-radius:2px;white-space:nowrap}.layui-nav .layui-nav-child a{color:#666;color:rgba(0,0,0,.8)}.layui-nav .layui-nav-child a:hover{background-color:#F6F6F6;color:rgba(0,0,0,.8)}.layui-nav-child dd{margin:1px 0;position:relative}.layui-nav-child dd.layui-this{background-color:#F6F6F6;color:#000}.layui-nav-child dd.layui-this:after{display:none}.layui-nav-child-r{left:auto;right:0}.layui-nav-child-c{text-align:center}.layui-nav-tree{width:200px;padding:0}.layui-nav-tree .layui-nav-item{display:block;width:100%;line-height:40px}.layui-nav-tree .layui-nav-item a{position:relative;height:40px;line-height:40px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-nav-tree .layui-nav-item>a{padding-top:5px;padding-bottom:5px}.layui-nav-tree .layui-nav-more{right:15px}.layui-nav-tree .layui-nav-item>a .layui-nav-more{padding:5px 0}.layui-nav-tree .layui-nav-bar{width:5px;height:0;background-color:#009688}.layui-side .layui-nav-tree .layui-nav-bar{width:2px}.layui-nav-tree .layui-nav-child dd.layui-this,.layui-nav-tree .layui-nav-child dd.layui-this a,.layui-nav-tree .layui-this,.layui-nav-tree .layui-this>a,.layui-nav-tree .layui-this>a:hover{background-color:#009688;color:#fff}.layui-nav-tree .layui-this:after{display:none}.layui-nav-itemed>a,.layui-nav-tree .layui-nav-title a,.layui-nav-tree .layui-nav-title a:hover{color:#fff!important}.layui-nav-tree .layui-nav-child{position:relative;z-index:0;top:0;border:none;box-shadow:none}.layui-nav-tree .layui-nav-child dd{margin:0}.layui-nav-tree .layui-nav-child a{color:#fff;color:rgba(255,255,255,.7)}.layui-nav-tree .layui-nav-child,.layui-nav-tree .layui-nav-child a:hover{background:0 0;color:#fff}.layui-nav-itemed>.layui-nav-child{display:block;background-color:rgba(0,0,0,.3)!important}.layui-nav-itemed>.layui-nav-child>.layui-this>.layui-nav-child{display:block}.layui-nav-side{position:fixed;top:0;bottom:0;left:0;overflow-x:hidden;z-index:999}.layui-breadcrumb{font-size:0}.layui-breadcrumb>*{font-size:14px}.layui-breadcrumb a{color:#999!important}.layui-breadcrumb a:hover{color:#5FB878!important}.layui-breadcrumb a cite{color:#666;font-style:normal}.layui-breadcrumb span[lay-separator]{margin:0 10px;color:#999}.layui-tab{margin:10px 0;text-align:left!important}.layui-tab[overflow]>.layui-tab-title{overflow:hidden}.layui-tab-title{position:relative;left:0;height:40px;white-space:nowrap;font-size:0;border-bottom-width:1px;border-bottom-style:solid;transition:all .2s;-webkit-transition:all .2s}.layui-tab-title li{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;font-size:14px;transition:all .2s;-webkit-transition:all .2s;position:relative;line-height:40px;min-width:65px;padding:0 15px;text-align:center;cursor:pointer}.layui-tab-title li a{display:block;padding:0 15px;margin:0 -15px}.layui-tab-title .layui-this{color:#000}.layui-tab-title .layui-this:after{position:absolute;left:0;top:0;content:"";width:100%;height:41px;border-width:1px;border-style:solid;border-bottom-color:#fff;border-radius:2px 2px 0 0;box-sizing:border-box;pointer-events:none}.layui-tab-bar{position:absolute;right:0;top:0;z-index:10;width:30px;height:39px;line-height:39px;border-width:1px;border-style:solid;border-radius:2px;text-align:center;background-color:#fff;cursor:pointer}.layui-tab-bar .layui-icon{position:relative;display:inline-block;top:3px;transition:all .3s;-webkit-transition:all .3s}.layui-tab-item{display:none}.layui-tab-more{padding-right:30px;height:auto!important;white-space:normal!important}.layui-tab-more li.layui-this:after{border-bottom-color:#eee;border-radius:2px}.layui-tab-more .layui-tab-bar .layui-icon{top:-2px;top:3px\9;-webkit-transform:rotate(180deg);transform:rotate(180deg)}:root .layui-tab-more .layui-tab-bar .layui-icon{top:-2px\0/IE9}.layui-tab-content{padding:15px 0}.layui-tab-title li .layui-tab-close{position:relative;display:inline-block;width:18px;height:18px;line-height:20px;margin-left:8px;top:1px;text-align:center;font-size:14px;color:#c2c2c2;transition:all .2s;-webkit-transition:all .2s}.layui-tab-title li .layui-tab-close:hover{border-radius:2px;background-color:#FF5722;color:#fff}.layui-tab-brief>.layui-tab-title .layui-this{color:#009688}.layui-tab-brief>.layui-tab-more li.layui-this:after,.layui-tab-brief>.layui-tab-title .layui-this:after{border:none;border-radius:0;border-bottom:2px solid #5FB878}.layui-tab-brief[overflow]>.layui-tab-title .layui-this:after{top:-1px}.layui-tab-card{border-width:1px;border-style:solid;border-radius:2px;box-shadow:0 2px 5px 0 rgba(0,0,0,.1)}.layui-tab-card>.layui-tab-title{background-color:#FAFAFA}.layui-tab-card>.layui-tab-title li{margin-right:-1px;margin-left:-1px}.layui-tab-card>.layui-tab-title .layui-this{background-color:#fff}.layui-tab-card>.layui-tab-title .layui-this:after{border-top:none;border-width:1px;border-bottom-color:#fff}.layui-tab-card>.layui-tab-title .layui-tab-bar{height:40px;line-height:40px;border-radius:0;border-top:none;border-right:none}.layui-tab-card>.layui-tab-more .layui-this{background:0 0;color:#5FB878}.layui-tab-card>.layui-tab-more .layui-this:after{border:none}.layui-timeline{padding-left:5px}.layui-timeline-item{position:relative;padding-bottom:20px}.layui-timeline-axis{position:absolute;left:-5px;top:0;z-index:10;width:20px;height:20px;line-height:20px;background-color:#fff;color:#5FB878;border-radius:50%;text-align:center;cursor:pointer}.layui-timeline-axis:hover{color:#FF5722}.layui-timeline-item:before{content:"";position:absolute;left:5px;top:0;z-index:0;width:1px;height:100%}.layui-timeline-item:first-child:before{display:block}.layui-timeline-item:last-child:before{display:none}.layui-timeline-content{padding-left:25px}.layui-timeline-title{position:relative;margin-bottom:10px;line-height:22px}.layui-badge,.layui-badge-dot,.layui-badge-rim{position:relative;display:inline-block;padding:0 6px;font-size:12px;text-align:center;background-color:#FF5722;color:#fff;border-radius:2px}.layui-badge{height:18px;line-height:18px}.layui-badge-dot{width:8px;height:8px;padding:0;border-radius:50%}.layui-badge-rim{height:18px;line-height:18px;border-width:1px;border-style:solid;background-color:#fff;color:#666}.layui-btn .layui-badge,.layui-btn .layui-badge-dot{margin-left:5px}.layui-nav .layui-badge,.layui-nav .layui-badge-dot{position:absolute;top:50%;margin:-5px 6px 0}.layui-nav .layui-badge{margin-top:-10px}.layui-tab-title .layui-badge,.layui-tab-title .layui-badge-dot{left:5px;top:-2px}.layui-carousel{position:relative;left:0;top:0;background-color:#f8f8f8}.layui-carousel>[carousel-item]{position:relative;width:100%;height:100%;overflow:hidden}.layui-carousel>[carousel-item]:before{position:absolute;content:'\e63d';left:50%;top:50%;width:100px;line-height:20px;margin:-10px 0 0 -50px;text-align:center;color:#c2c2c2;font-family:layui-icon!important;font-size:30px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.layui-carousel>[carousel-item]>*{display:none;position:absolute;left:0;top:0;width:100%;height:100%;background-color:#f8f8f8;transition-duration:.3s;-webkit-transition-duration:.3s}.layui-carousel-updown>*{-webkit-transition:.3s ease-in-out up;transition:.3s ease-in-out up}.layui-carousel-arrow{display:none\9;opacity:0;position:absolute;left:10px;top:50%;margin-top:-18px;width:36px;height:36px;line-height:36px;text-align:center;font-size:20px;border:0;border-radius:50%;background-color:rgba(0,0,0,.2);color:#fff;-webkit-transition-duration:.3s;transition-duration:.3s;cursor:pointer}.layui-carousel-arrow[lay-type=add]{left:auto!important;right:10px}.layui-carousel:hover .layui-carousel-arrow[lay-type=add],.layui-carousel[lay-arrow=always] .layui-carousel-arrow[lay-type=add]{right:20px}.layui-carousel[lay-arrow=always] .layui-carousel-arrow{opacity:1;left:20px}.layui-carousel[lay-arrow=none] .layui-carousel-arrow{display:none}.layui-carousel-arrow:hover,.layui-carousel-ind ul:hover{background-color:rgba(0,0,0,.35)}.layui-carousel:hover .layui-carousel-arrow{display:block\9;opacity:1;left:20px}.layui-carousel-ind{position:relative;top:-35px;width:100%;line-height:0!important;text-align:center;font-size:0}.layui-carousel[lay-indicator=outside]{margin-bottom:30px}.layui-carousel[lay-indicator=outside] .layui-carousel-ind{top:10px}.layui-carousel[lay-indicator=outside] .layui-carousel-ind ul{background-color:rgba(0,0,0,.5)}.layui-carousel[lay-indicator=none] .layui-carousel-ind{display:none}.layui-carousel-ind ul{display:inline-block;padding:5px;background-color:rgba(0,0,0,.2);border-radius:10px;-webkit-transition-duration:.3s;transition-duration:.3s}.layui-carousel-ind li{display:inline-block;width:10px;height:10px;margin:0 3px;font-size:14px;background-color:#eee;background-color:rgba(255,255,255,.5);border-radius:50%;cursor:pointer;-webkit-transition-duration:.3s;transition-duration:.3s}.layui-carousel-ind li:hover{background-color:rgba(255,255,255,.7)}.layui-carousel-ind li.layui-this{background-color:#fff}.layui-carousel>[carousel-item]>.layui-carousel-next,.layui-carousel>[carousel-item]>.layui-carousel-prev,.layui-carousel>[carousel-item]>.layui-this{display:block}.layui-carousel>[carousel-item]>.layui-this{left:0}.layui-carousel>[carousel-item]>.layui-carousel-prev{left:-100%}.layui-carousel>[carousel-item]>.layui-carousel-next{left:100%}.layui-carousel>[carousel-item]>.layui-carousel-next.layui-carousel-left,.layui-carousel>[carousel-item]>.layui-carousel-prev.layui-carousel-right{left:0}.layui-carousel>[carousel-item]>.layui-this.layui-carousel-left{left:-100%}.layui-carousel>[carousel-item]>.layui-this.layui-carousel-right{left:100%}.layui-carousel[lay-anim=updown] .layui-carousel-arrow{left:50%!important;top:20px;margin:0 0 0 -18px}.layui-carousel[lay-anim=updown]>[carousel-item]>*,.layui-carousel[lay-anim=fade]>[carousel-item]>*{left:0!important}.layui-carousel[lay-anim=updown] .layui-carousel-arrow[lay-type=add]{top:auto!important;bottom:20px}.layui-carousel[lay-anim=updown] .layui-carousel-ind{position:absolute;top:50%;right:20px;width:auto;height:auto}.layui-carousel[lay-anim=updown] .layui-carousel-ind ul{padding:3px 5px}.layui-carousel[lay-anim=updown] .layui-carousel-ind li{display:block;margin:6px 0}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-this{top:0}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-prev{top:-100%}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-next{top:100%}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-next.layui-carousel-left,.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-prev.layui-carousel-right{top:0}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-this.layui-carousel-left{top:-100%}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-this.layui-carousel-right{top:100%}.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-next,.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-prev{opacity:0}.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-next.layui-carousel-left,.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-prev.layui-carousel-right{opacity:1}.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-this.layui-carousel-left,.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-this.layui-carousel-right{opacity:0}.layui-fixbar{position:fixed;right:15px;bottom:15px;z-index:999999}.layui-fixbar li{width:50px;height:50px;line-height:50px;margin-bottom:1px;text-align:center;cursor:pointer;font-size:30px;background-color:#9F9F9F;color:#fff;border-radius:2px;opacity:.95}.layui-fixbar li:hover{opacity:.85}.layui-fixbar li:active{opacity:1}.layui-fixbar .layui-fixbar-top{display:none;font-size:40px}body .layui-util-face{border:none;background:0 0}body .layui-util-face .layui-layer-content{padding:0;background-color:#fff;color:#666;box-shadow:none}.layui-util-face .layui-layer-TipsG{display:none}.layui-transfer-active,.layui-transfer-box{display:inline-block;vertical-align:middle}.layui-util-face ul{position:relative;width:372px;padding:10px;border:1px solid #D9D9D9;background-color:#fff;box-shadow:0 0 20px rgba(0,0,0,.2)}.layui-util-face ul li{cursor:pointer;float:left;border:1px solid #e8e8e8;height:22px;width:26px;overflow:hidden;margin:-1px 0 0 -1px;padding:4px 2px;text-align:center}.layui-util-face ul li:hover{position:relative;z-index:2;border:1px solid #eb7350;background:#fff9ec}.layui-code{position:relative;margin:10px 0;padding:15px;line-height:20px;border:1px solid #eee;border-left-width:6px;background-color:#FAFAFA;color:#333;font-family:Courier New;font-size:12px}.layui-transfer-box,.layui-transfer-header,.layui-transfer-search{border-width:0;border-style:solid;border-color:#eee}.layui-transfer-box{position:relative;border-width:1px;width:200px;height:360px;border-radius:2px;background-color:#fff}.layui-transfer-box .layui-form-checkbox{width:100%;margin:0!important}.layui-transfer-header{height:38px;line-height:38px;padding:0 10px;border-bottom-width:1px}.layui-transfer-search{position:relative;padding:10px;border-bottom-width:1px}.layui-transfer-search .layui-input{height:32px;padding-left:30px;font-size:12px}.layui-transfer-search .layui-icon-search{position:absolute;left:20px;top:50%;margin-top:-8px;color:#666}.layui-transfer-active{margin:0 15px}.layui-transfer-active .layui-btn{display:block;margin:0;padding:0 15px;background-color:#5FB878;border-color:#5FB878;color:#fff}.layui-transfer-active .layui-btn-disabled{background-color:#FBFBFB;border-color:#eee;color:#d2d2d2}.layui-transfer-active .layui-btn:first-child{margin-bottom:15px}.layui-transfer-active .layui-btn .layui-icon{margin:0;font-size:14px!important}.layui-transfer-data{padding:5px 0;overflow:auto}.layui-transfer-data li{height:32px;line-height:32px;padding:0 10px}.layui-transfer-data li:hover{background-color:#F6F6F6;transition:.5s all}.layui-transfer-data .layui-none{padding:15px 10px;text-align:center;color:#999}.layui-rate,.layui-rate *{display:inline-block;vertical-align:middle}.layui-rate{padding:10px 5px 10px 0;font-size:0}.layui-rate li i.layui-icon{font-size:20px;color:#FFB800;margin-right:5px;transition:all .3s;-webkit-transition:all .3s}.layui-rate li i:hover{cursor:pointer;transform:scale(1.12);-webkit-transform:scale(1.12)}.layui-rate[readonly] li i:hover{cursor:default;transform:scale(1)}.layui-colorpicker{width:26px;height:26px;border:1px solid #eee;padding:5px;border-radius:2px;line-height:24px;display:inline-block;cursor:pointer;transition:all .3s;-webkit-transition:all .3s}.layui-colorpicker:hover{border-color:#d2d2d2}.layui-colorpicker.layui-colorpicker-lg{width:34px;height:34px;line-height:32px}.layui-colorpicker.layui-colorpicker-sm{width:24px;height:24px;line-height:22px}.layui-colorpicker.layui-colorpicker-xs{width:22px;height:22px;line-height:20px}.layui-colorpicker-trigger-bgcolor{display:block;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==);border-radius:2px}.layui-colorpicker-trigger-span{display:block;height:100%;box-sizing:border-box;border:1px solid rgba(0,0,0,.15);border-radius:2px;text-align:center}.layui-colorpicker-trigger-i{display:inline-block;color:#FFF;font-size:12px}.layui-colorpicker-trigger-i.layui-icon-close{color:#999}.layui-colorpicker-main{position:absolute;left:-999999px;top:-999999px;z-index:66666666;width:280px;margin:5px 0;padding:7px;background:#FFF;border:1px solid #d2d2d2;border-radius:2px;box-shadow:0 2px 4px rgba(0,0,0,.12)}.layui-colorpicker-main-wrapper{height:180px;position:relative}.layui-colorpicker-basis{width:260px;height:100%;position:relative}.layui-colorpicker-basis-white{width:100%;height:100%;position:absolute;top:0;left:0;background:linear-gradient(90deg,#FFF,hsla(0,0%,100%,0))}.layui-colorpicker-basis-black{width:100%;height:100%;position:absolute;top:0;left:0;background:linear-gradient(0deg,#000,transparent)}.layui-colorpicker-basis-cursor{width:10px;height:10px;border:1px solid #FFF;border-radius:50%;position:absolute;top:-3px;right:-3px;cursor:pointer}.layui-colorpicker-side{position:absolute;top:0;right:0;width:12px;height:100%;background:linear-gradient(red,#FF0,#0F0,#0FF,#00F,#F0F,red)}.layui-colorpicker-side-slider{width:100%;height:5px;box-shadow:0 0 1px #888;background:#FFF;border-radius:1px;border:1px solid #f0f0f0;cursor:pointer;position:absolute;left:0}.layui-colorpicker-main-alpha{display:none;height:12px;margin-top:7px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.layui-colorpicker-alpha-bgcolor{height:100%;position:relative}.layui-colorpicker-alpha-slider{width:5px;height:100%;box-shadow:0 0 1px #888;background:#FFF;border-radius:1px;border:1px solid #f0f0f0;cursor:pointer;position:absolute;top:0}.layui-colorpicker-main-pre{padding-top:7px;font-size:0}.layui-colorpicker-pre{width:20px;height:20px;border-radius:2px;display:inline-block;margin-left:6px;margin-bottom:7px;cursor:pointer}.layui-colorpicker-pre:nth-child(11n+1){margin-left:0}.layui-colorpicker-pre-isalpha{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.layui-colorpicker-pre.layui-this{box-shadow:0 0 3px 2px rgba(0,0,0,.15)}.layui-colorpicker-pre>div{height:100%;border-radius:2px}.layui-colorpicker-main-input{text-align:right;padding-top:7px}.layui-colorpicker-main-input .layui-btn-container .layui-btn{margin:0 0 0 10px}.layui-colorpicker-main-input div.layui-inline{float:left;margin-right:10px;font-size:14px}.layui-colorpicker-main-input input.layui-input{width:150px;height:30px;color:#666}.layui-slider{height:4px;background:#eee;border-radius:3px;position:relative;cursor:pointer}.layui-slider-bar{border-radius:3px;position:absolute;height:100%}.layui-slider-step{position:absolute;top:0;width:4px;height:4px;border-radius:50%;background:#FFF;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.layui-slider-wrap{width:36px;height:36px;position:absolute;top:-16px;-webkit-transform:translateX(-50%);transform:translateX(-50%);z-index:10;text-align:center}.layui-slider-wrap-btn{width:12px;height:12px;border-radius:50%;background:#FFF;display:inline-block;vertical-align:middle;cursor:pointer;transition:.3s}.layui-slider-wrap:after{content:"";height:100%;display:inline-block;vertical-align:middle}.layui-slider-wrap-btn.layui-slider-hover,.layui-slider-wrap-btn:hover{transform:scale(1.2)}.layui-slider-wrap-btn.layui-disabled:hover{transform:scale(1)!important}.layui-slider-tips{position:absolute;top:-42px;z-index:66666666;white-space:nowrap;display:none;-webkit-transform:translateX(-50%);transform:translateX(-50%);color:#FFF;background:#000;border-radius:3px;height:25px;line-height:25px;padding:0 10px}.layui-slider-tips:after{content:"";position:absolute;bottom:-12px;left:50%;margin-left:-6px;width:0;height:0;border-width:6px;border-style:solid;border-color:#000 transparent transparent}.layui-slider-input{width:70px;height:32px;border:1px solid #eee;border-radius:3px;font-size:16px;line-height:32px;position:absolute;right:0;top:-14px}.layui-slider-input-btn{position:absolute;top:0;right:0;width:20px;height:100%;border-left:1px solid #eee}.layui-slider-input-btn i{cursor:pointer;position:absolute;right:0;bottom:0;width:20px;height:50%;font-size:12px;line-height:16px;text-align:center;color:#999}.layui-slider-input-btn i:first-child{top:0;border-bottom:1px solid #eee}.layui-slider-input-txt{height:100%;font-size:14px}.layui-slider-input-txt input{height:100%;border:none}.layui-slider-input-btn i:hover{color:#009688}.layui-slider-vertical{width:4px;margin-left:33px}.layui-slider-vertical .layui-slider-bar{width:4px}.layui-slider-vertical .layui-slider-step{top:auto;left:0;-webkit-transform:translateY(50%);transform:translateY(50%)}.layui-slider-vertical .layui-slider-wrap{top:auto;left:-16px;-webkit-transform:translateY(50%);transform:translateY(50%)}.layui-slider-vertical .layui-slider-tips{top:auto;left:2px}@media \0screen{.layui-slider-wrap-btn{margin-left:-20px}.layui-slider-vertical .layui-slider-wrap-btn{margin-left:0;margin-bottom:-20px}.layui-slider-vertical .layui-slider-tips{margin-left:-8px}.layui-slider>span{margin-left:8px}}.layui-tree{line-height:22px}.layui-tree .layui-form-checkbox{margin:0!important}.layui-tree-set{width:100%;position:relative}.layui-tree-pack{display:none;padding-left:20px;position:relative}.layui-tree-iconClick,.layui-tree-main{display:inline-block;vertical-align:middle}.layui-tree-line .layui-tree-pack{padding-left:27px}.layui-tree-line .layui-tree-set .layui-tree-set:after{content:"";position:absolute;top:14px;left:-9px;width:17px;height:0;border-top:1px dotted #c0c4cc}.layui-tree-entry{position:relative;padding:3px 0;height:20px;white-space:nowrap}.layui-tree-entry:hover{background-color:#eee}.layui-tree-line .layui-tree-entry:hover{background-color:rgba(0,0,0,0)}.layui-tree-line .layui-tree-entry:hover .layui-tree-txt{color:#999;text-decoration:underline;transition:.3s}.layui-tree-main{cursor:pointer;padding-right:10px}.layui-tree-line .layui-tree-set:before{content:"";position:absolute;top:0;left:-9px;width:0;height:100%;border-left:1px dotted #c0c4cc}.layui-tree-line .layui-tree-set.layui-tree-setLineShort:before{height:13px}.layui-tree-line .layui-tree-set.layui-tree-setHide:before{height:0}.layui-tree-iconClick{position:relative;height:20px;line-height:20px;margin:0 10px;color:#c0c4cc}.layui-tree-icon{height:12px;line-height:12px;width:12px;text-align:center;border:1px solid #c0c4cc}.layui-tree-iconClick .layui-icon{font-size:18px}.layui-tree-icon .layui-icon{font-size:12px;color:#666}.layui-tree-iconArrow{padding:0 5px}.layui-tree-iconArrow:after{content:"";position:absolute;left:4px;top:3px;z-index:100;width:0;height:0;border-width:5px;border-style:solid;border-color:transparent transparent transparent #c0c4cc;transition:.5s}.layui-tree-btnGroup,.layui-tree-editInput{position:relative;vertical-align:middle;display:inline-block}.layui-tree-spread>.layui-tree-entry>.layui-tree-iconClick>.layui-tree-iconArrow:after{transform:rotate(90deg) translate(3px,4px)}.layui-tree-txt{display:inline-block;vertical-align:middle;color:#555}.layui-tree-search{margin-bottom:15px;color:#666}.layui-tree-btnGroup .layui-icon{display:inline-block;vertical-align:middle;padding:0 2px;cursor:pointer}.layui-tree-btnGroup .layui-icon:hover{color:#999;transition:.3s}.layui-tree-entry:hover .layui-tree-btnGroup{visibility:visible}.layui-tree-editInput{height:20px;line-height:20px;padding:0 3px;border:none;background-color:rgba(0,0,0,.05)}.layui-tree-emptyText{text-align:center;color:#999}.layui-anim{-webkit-animation-duration:.3s;-webkit-animation-fill-mode:both;animation-duration:.3s;animation-fill-mode:both}.layui-anim.layui-icon{display:inline-block}.layui-anim-loop{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.layui-trans,.layui-trans a{transition:all .2s;-webkit-transition:all .2s}@-webkit-keyframes layui-rotate{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(360deg)}}@keyframes layui-rotate{from{transform:rotate(0)}to{transform:rotate(360deg)}}.layui-anim-rotate{-webkit-animation-name:layui-rotate;animation-name:layui-rotate;-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-timing-function:linear;animation-timing-function:linear}@-webkit-keyframes layui-up{from{-webkit-transform:translate3d(0,100%,0);opacity:.3}to{-webkit-transform:translate3d(0,0,0);opacity:1}}@keyframes layui-up{from{transform:translate3d(0,100%,0);opacity:.3}to{transform:translate3d(0,0,0);opacity:1}}.layui-anim-up{-webkit-animation-name:layui-up;animation-name:layui-up}@-webkit-keyframes layui-upbit{from{-webkit-transform:translate3d(0,15px,0);opacity:.3}to{-webkit-transform:translate3d(0,0,0);opacity:1}}@keyframes layui-upbit{from{transform:translate3d(0,15px,0);opacity:.3}to{transform:translate3d(0,0,0);opacity:1}}.layui-anim-upbit{-webkit-animation-name:layui-upbit;animation-name:layui-upbit}@keyframes layui-down{0%{opacity:.3;transform:translate3d(0,-100%,0)}100%{opacity:1;transform:translate3d(0,0,0)}}.layui-anim-down{animation-name:layui-down}@keyframes layui-downbit{0%{opacity:.3;transform:translate3d(0,-5px,0)}100%{opacity:1;transform:translate3d(0,0,0)}}.layui-anim-downbit{animation-name:layui-downbit}@-webkit-keyframes layui-scale{0%{opacity:.3;-webkit-transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1)}}@keyframes layui-scale{0%{opacity:.3;-ms-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-ms-transform:scale(1);transform:scale(1)}}.layui-anim-scale{-webkit-animation-name:layui-scale;animation-name:layui-scale}@-webkit-keyframes layui-scale-spring{0%{opacity:.5;-webkit-transform:scale(.5)}80%{opacity:.8;-webkit-transform:scale(1.1)}100%{opacity:1;-webkit-transform:scale(1)}}@keyframes layui-scale-spring{0%{opacity:.5;transform:scale(.5)}80%{opacity:.8;transform:scale(1.1)}100%{opacity:1;transform:scale(1)}}.layui-anim-scaleSpring{-webkit-animation-name:layui-scale-spring;animation-name:layui-scale-spring}@keyframes layui-scalesmall{0%{opacity:.3;transform:scale(1.5)}100%{opacity:1;transform:scale(1)}}.layui-anim-scalesmall{animation-name:layui-scalesmall}@keyframes layui-scalesmall-spring{0%{opacity:.3;transform:scale(1.5)}80%{opacity:.8;transform:scale(.9)}100%{opacity:1;transform:scale(1)}}.layui-anim-scalesmall-spring{animation-name:layui-scalesmall-spring}@-webkit-keyframes layui-fadein{0%{opacity:0}100%{opacity:1}}@keyframes layui-fadein{0%{opacity:0}100%{opacity:1}}.layui-anim-fadein{-webkit-animation-name:layui-fadein;animation-name:layui-fadein}@-webkit-keyframes layui-fadeout{0%{opacity:1}100%{opacity:0}}@keyframes layui-fadeout{0%{opacity:1}100%{opacity:0}}.layui-anim-fadeout{-webkit-animation-name:layui-fadeout;animation-name:layui-fadeout} \ No newline at end of file diff --git a/src/main/resources/webroot/layui/css/modules/code.css b/src/main/resources/webroot/layui/css/modules/code.css new file mode 100644 index 0000000..0fee0c5 --- /dev/null +++ b/src/main/resources/webroot/layui/css/modules/code.css @@ -0,0 +1 @@ +html #layuicss-skincodecss{display:none;position:absolute;width:1989px}.layui-code-h3,.layui-code-view{position:relative;font-size:12px}.layui-code-view{display:block;margin:10px 0;padding:0;border:1px solid #eee;border-left-width:6px;background-color:#FAFAFA;color:#333;font-family:Courier New}.layui-code-h3{padding:0 10px;height:40px;line-height:40px;border-bottom:1px solid #eee}.layui-code-h3 a{position:absolute;right:10px;top:0;color:#999}.layui-code-view .layui-code-ol{position:relative;overflow:auto}.layui-code-view .layui-code-ol li{position:relative;margin-left:45px;line-height:20px;padding:0 10px;border-left:1px solid #e2e2e2;list-style-type:decimal-leading-zero;*list-style-type:decimal;background-color:#fff}.layui-code-view .layui-code-ol li:first-child{padding-top:10px}.layui-code-view .layui-code-ol li:last-child{padding-bottom:10px}.layui-code-view pre{margin:0}.layui-code-notepad{border:1px solid #0C0C0C;border-left-color:#3F3F3F;background-color:#0C0C0C;color:#C2BE9E}.layui-code-notepad .layui-code-h3{border-bottom:none}.layui-code-notepad .layui-code-ol li{background-color:#3F3F3F;border-left:none}.layui-code-demo .layui-code{visibility:visible!important;margin:-15px;border-top:none;border-right:none;border-bottom:none}.layui-code-demo .layui-tab-content{padding:15px;border-top:none} \ No newline at end of file diff --git a/src/main/resources/webroot/layui/css/modules/laydate/default/laydate.css b/src/main/resources/webroot/layui/css/modules/laydate/default/laydate.css new file mode 100644 index 0000000..c08928b --- /dev/null +++ b/src/main/resources/webroot/layui/css/modules/laydate/default/laydate.css @@ -0,0 +1 @@ +.laydate-set-ym,.layui-laydate,.layui-laydate *,.layui-laydate-list{box-sizing:border-box}html #layuicss-laydate{display:none;position:absolute;width:1989px}.layui-laydate *{margin:0;padding:0}.layui-laydate{position:absolute;z-index:66666666;margin:5px 0;border-radius:2px;font-size:14px;-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;animation-name:laydate-downbit}.layui-laydate-main{width:272px}.layui-laydate-content td,.layui-laydate-header *,.layui-laydate-list li{transition-duration:.3s;-webkit-transition-duration:.3s}@keyframes laydate-downbit{0%{opacity:.3;transform:translate3d(0,-5px,0)}100%{opacity:1;transform:translate3d(0,0,0)}}.layui-laydate-static{position:relative;z-index:0;display:inline-block;margin:0;-webkit-animation:none;animation:none}.laydate-ym-show .laydate-next-m,.laydate-ym-show .laydate-prev-m{display:none!important}.laydate-ym-show .laydate-next-y,.laydate-ym-show .laydate-prev-y{display:inline-block!important}.laydate-time-show .laydate-set-ym span[lay-type=month],.laydate-time-show .laydate-set-ym span[lay-type=year],.laydate-time-show .layui-laydate-header .layui-icon,.laydate-ym-show .laydate-set-ym span[lay-type=month]{display:none!important}.layui-laydate-header{position:relative;line-height:30px;padding:10px 70px 5px}.layui-laydate-header *{display:inline-block;vertical-align:bottom}.layui-laydate-header i{position:absolute;top:10px;padding:0 5px;color:#999;font-size:18px;cursor:pointer}.layui-laydate-header i.laydate-prev-y{left:15px}.layui-laydate-header i.laydate-prev-m{left:45px}.layui-laydate-header i.laydate-next-y{right:15px}.layui-laydate-header i.laydate-next-m{right:45px}.laydate-set-ym{width:100%;text-align:center;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.laydate-set-ym span{padding:0 10px;cursor:pointer}.laydate-time-text{cursor:default!important}.layui-laydate-content{position:relative;padding:10px;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.layui-laydate-content table{border-collapse:collapse;border-spacing:0}.layui-laydate-content td,.layui-laydate-content th{width:36px;height:30px;padding:5px;text-align:center}.layui-laydate-content td{position:relative;cursor:pointer}.laydate-day-mark{position:absolute;left:0;top:0;width:100%;line-height:30px;font-size:12px;overflow:hidden}.laydate-day-mark::after{position:absolute;content:'';right:2px;top:2px;width:5px;height:5px;border-radius:50%}.layui-laydate-footer{position:relative;height:46px;line-height:26px;padding:10px}.layui-laydate-footer span{display:inline-block;vertical-align:top;height:26px;line-height:24px;padding:0 10px;border:1px solid #C9C9C9;border-radius:2px;background-color:#fff;font-size:12px;cursor:pointer;white-space:nowrap;transition:all .3s}.layui-laydate-list>li,.layui-laydate-range .layui-laydate-main{display:inline-block;vertical-align:middle}.layui-laydate-footer span:hover{color:#5FB878}.layui-laydate-footer span.layui-laydate-preview{cursor:default;border-color:transparent!important}.layui-laydate-footer span.layui-laydate-preview:hover{color:#666}.layui-laydate-footer span:first-child.layui-laydate-preview{padding-left:0}.laydate-footer-btns{position:absolute;right:10px;top:10px}.laydate-footer-btns span{margin:0 0 0 -1px}.layui-laydate-list{position:absolute;left:0;top:0;width:100%;height:100%;padding:10px;background-color:#fff}.layui-laydate-list>li{position:relative;width:33.3%;height:36px;line-height:36px;margin:3px 0;text-align:center;cursor:pointer}.laydate-month-list>li{width:25%;margin:17px 0}.laydate-time-list>li{height:100%;margin:0;line-height:normal;cursor:default}.laydate-time-list p{position:relative;top:-4px;line-height:29px}.laydate-time-list ol{height:181px;overflow:hidden}.laydate-time-list>li:hover ol{overflow-y:auto}.laydate-time-list ol li{width:130%;padding-left:33px;height:30px;line-height:30px;text-align:left;cursor:pointer}.layui-laydate-hint{position:absolute;top:115px;left:50%;width:250px;margin-left:-125px;line-height:20px;padding:15px;text-align:center;font-size:12px}.layui-laydate-range{width:546px}.layui-laydate-range .laydate-main-list-1 .layui-laydate-content,.layui-laydate-range .laydate-main-list-1 .layui-laydate-header{border-left:1px solid #e2e2e2}.layui-laydate,.layui-laydate-hint{border:1px solid #d2d2d2;box-shadow:0 2px 4px rgba(0,0,0,.12);background-color:#fff;color:#666}.layui-laydate-header{border-bottom:1px solid #e2e2e2}.layui-laydate-header i:hover,.layui-laydate-header span:hover{color:#5FB878}.layui-laydate-content{border-top:none 0;border-bottom:none 0}.layui-laydate-content th{font-weight:400;color:#333}.layui-laydate-content td{color:#666}.layui-laydate-content td.laydate-selected{background-color:#B5FFF8}.laydate-selected:hover{background-color:#00F7DE!important}.layui-laydate-content td:hover,.layui-laydate-list li:hover{background-color:#eee;color:#333}.laydate-time-list li ol{margin:0;padding:0;border:1px solid #e2e2e2;border-left-width:0}.laydate-time-list li:first-child ol{border-left-width:1px}.laydate-time-list>li:hover{background:0 0}.layui-laydate-content .laydate-day-next,.layui-laydate-content .laydate-day-prev{color:#d2d2d2}.laydate-selected.laydate-day-next,.laydate-selected.laydate-day-prev{background-color:#f8f8f8!important}.layui-laydate-footer{border-top:1px solid #e2e2e2}.layui-laydate-hint{color:#FF5722}.laydate-day-mark::after{background-color:#5FB878}.layui-laydate-content td.layui-this .laydate-day-mark::after{display:none}.layui-laydate-footer span[lay-type=date]{color:#5FB878}.layui-laydate .layui-this{background-color:#009688!important;color:#fff!important}.layui-laydate .laydate-disabled,.layui-laydate .laydate-disabled:hover{background:0 0!important;color:#d2d2d2!important;cursor:not-allowed!important;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.laydate-theme-molv{border:none}.laydate-theme-molv.layui-laydate-range{width:548px}.laydate-theme-molv .layui-laydate-main{width:274px}.laydate-theme-molv .layui-laydate-header{border:none;background-color:#009688}.laydate-theme-molv .layui-laydate-header i,.laydate-theme-molv .layui-laydate-header span{color:#f6f6f6}.laydate-theme-molv .layui-laydate-header i:hover,.laydate-theme-molv .layui-laydate-header span:hover{color:#fff}.laydate-theme-molv .layui-laydate-content{border:1px solid #e2e2e2;border-top:none;border-bottom:none}.laydate-theme-molv .laydate-main-list-1 .layui-laydate-content{border-left:none}.laydate-theme-grid .laydate-month-list>li,.laydate-theme-grid .laydate-year-list>li,.laydate-theme-grid .layui-laydate-content td,.laydate-theme-grid .layui-laydate-content thead,.laydate-theme-molv .layui-laydate-footer{border:1px solid #e2e2e2}.laydate-theme-grid .laydate-selected,.laydate-theme-grid .laydate-selected:hover{background-color:#f2f2f2!important;color:#009688!important}.laydate-theme-grid .laydate-selected.laydate-day-next,.laydate-theme-grid .laydate-selected.laydate-day-prev{color:#d2d2d2!important}.laydate-theme-grid .laydate-month-list,.laydate-theme-grid .laydate-year-list{margin:1px 0 0 1px}.laydate-theme-grid .laydate-month-list>li,.laydate-theme-grid .laydate-year-list>li{margin:0 -1px -1px 0}.laydate-theme-grid .laydate-year-list>li{height:43px;line-height:43px}.laydate-theme-grid .laydate-month-list>li{height:71px;line-height:71px} \ No newline at end of file diff --git a/src/main/resources/webroot/layui/css/modules/layer/default/icon-ext.png b/src/main/resources/webroot/layui/css/modules/layer/default/icon-ext.png new file mode 100644 index 0000000..bbbb669 Binary files /dev/null and b/src/main/resources/webroot/layui/css/modules/layer/default/icon-ext.png differ diff --git a/src/main/resources/webroot/layui/css/modules/layer/default/icon.png b/src/main/resources/webroot/layui/css/modules/layer/default/icon.png new file mode 100644 index 0000000..3e17da8 Binary files /dev/null and b/src/main/resources/webroot/layui/css/modules/layer/default/icon.png differ diff --git a/src/main/resources/webroot/layui/css/modules/layer/default/layer.css b/src/main/resources/webroot/layui/css/modules/layer/default/layer.css new file mode 100644 index 0000000..db51f31 --- /dev/null +++ b/src/main/resources/webroot/layui/css/modules/layer/default/layer.css @@ -0,0 +1 @@ +.layui-layer-imgbar,.layui-layer-imgtit a,.layui-layer-tab .layui-layer-title span,.layui-layer-title{text-overflow:ellipsis;white-space:nowrap}html #layuicss-layer{display:none;position:absolute;width:1989px}.layui-layer,.layui-layer-shade{position:fixed;_position:absolute;pointer-events:auto}.layui-layer-shade{top:0;left:0;width:100%;height:100%;_height:expression(document.body.offsetHeight+"px")}.layui-layer{-webkit-overflow-scrolling:touch;top:150px;left:0;margin:0;padding:0;background-color:#fff;-webkit-background-clip:content;border-radius:2px;box-shadow:1px 1px 50px rgba(0,0,0,.3)}.layui-layer-close{position:absolute}.layui-layer-content{position:relative}.layui-layer-border{border:1px solid #B2B2B2;border:1px solid rgba(0,0,0,.1);box-shadow:1px 1px 5px rgba(0,0,0,.2)}.layui-layer-load{background:url(loading-1.gif) center center no-repeat #eee}.layui-layer-ico{background:url(icon.png) no-repeat}.layui-layer-btn a,.layui-layer-dialog .layui-layer-ico,.layui-layer-setwin a{display:inline-block;*display:inline;*zoom:1;vertical-align:top}.layui-layer-move{display:none;position:fixed;*position:absolute;left:0;top:0;width:100%;height:100%;cursor:move;opacity:0;filter:alpha(opacity=0);background-color:#fff;z-index:2147483647}.layui-layer-resize{position:absolute;width:15px;height:15px;right:0;bottom:0;cursor:se-resize}.layer-anim{-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.3s;animation-duration:.3s}@-webkit-keyframes layer-bounceIn{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes layer-bounceIn{0%{opacity:0;-webkit-transform:scale(.5);-ms-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.layer-anim-00{-webkit-animation-name:layer-bounceIn;animation-name:layer-bounceIn}@-webkit-keyframes layer-zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes layer-zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);-ms-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);-ms-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.layer-anim-01{-webkit-animation-name:layer-zoomInDown;animation-name:layer-zoomInDown}@-webkit-keyframes layer-fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes layer-fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);-ms-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.layer-anim-02{-webkit-animation-name:layer-fadeInUpBig;animation-name:layer-fadeInUpBig}@-webkit-keyframes layer-zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);transform:scale(.475) translateX(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes layer-zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);-ms-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);-ms-transform:scale(.475) translateX(48px);transform:scale(.475) translateX(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.layer-anim-03{-webkit-animation-name:layer-zoomInLeft;animation-name:layer-zoomInLeft}@-webkit-keyframes layer-rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0) rotate(0);transform:translateX(0) rotate(0)}}@keyframes layer-rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);-ms-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0) rotate(0);-ms-transform:translateX(0) rotate(0);transform:translateX(0) rotate(0)}}.layer-anim-04{-webkit-animation-name:layer-rollIn;animation-name:layer-rollIn}@keyframes layer-fadeIn{0%{opacity:0}100%{opacity:1}}.layer-anim-05{-webkit-animation-name:layer-fadeIn;animation-name:layer-fadeIn}@-webkit-keyframes layer-shake{0%,100%{-webkit-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);transform:translateX(10px)}}@keyframes layer-shake{0%,100%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);-ms-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);-ms-transform:translateX(10px);transform:translateX(10px)}}.layer-anim-06{-webkit-animation-name:layer-shake;animation-name:layer-shake}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}.layui-layer-title{padding:0 80px 0 20px;height:50px;line-height:50px;border-bottom:1px solid #F0F0F0;font-size:14px;color:#333;overflow:hidden;border-radius:2px 2px 0 0}.layui-layer-setwin{position:absolute;right:15px;*right:0;top:17px;font-size:0;line-height:initial}.layui-layer-setwin a{position:relative;width:16px;height:16px;margin-left:10px;font-size:12px;_overflow:hidden}.layui-layer-setwin .layui-layer-min cite{position:absolute;width:14px;height:2px;left:0;top:50%;margin-top:-1px;background-color:#2E2D3C;cursor:pointer;_overflow:hidden}.layui-layer-setwin .layui-layer-min:hover cite{background-color:#2D93CA}.layui-layer-setwin .layui-layer-max{background-position:-32px -40px}.layui-layer-setwin .layui-layer-max:hover{background-position:-16px -40px}.layui-layer-setwin .layui-layer-maxmin{background-position:-65px -40px}.layui-layer-setwin .layui-layer-maxmin:hover{background-position:-49px -40px}.layui-layer-setwin .layui-layer-close1{background-position:1px -40px;cursor:pointer}.layui-layer-setwin .layui-layer-close1:hover{opacity:.7}.layui-layer-setwin .layui-layer-close2{position:absolute;right:-28px;top:-28px;width:30px;height:30px;margin-left:0;background-position:-149px -31px;*right:-18px;_display:none}.layui-layer-setwin .layui-layer-close2:hover{background-position:-180px -31px}.layui-layer-btn{text-align:right;padding:0 15px 12px;pointer-events:auto;user-select:none;-webkit-user-select:none}.layui-layer-btn a{height:28px;line-height:28px;margin:5px 5px 0;padding:0 15px;border:1px solid #dedede;background-color:#fff;color:#333;border-radius:2px;font-weight:400;cursor:pointer;text-decoration:none}.layui-layer-btn a:hover{opacity:.9;text-decoration:none}.layui-layer-btn a:active{opacity:.8}.layui-layer-btn .layui-layer-btn0{border-color:#1E9FFF;background-color:#1E9FFF;color:#fff}.layui-layer-btn-l{text-align:left}.layui-layer-btn-c{text-align:center}.layui-layer-dialog{min-width:300px}.layui-layer-dialog .layui-layer-content{position:relative;padding:20px;line-height:24px;word-break:break-all;overflow:hidden;font-size:14px;overflow-x:hidden;overflow-y:auto}.layui-layer-dialog .layui-layer-content .layui-layer-ico{position:absolute;top:16px;left:15px;_left:-40px;width:30px;height:30px}.layui-layer-ico1{background-position:-30px 0}.layui-layer-ico2{background-position:-60px 0}.layui-layer-ico3{background-position:-90px 0}.layui-layer-ico4{background-position:-120px 0}.layui-layer-ico5{background-position:-150px 0}.layui-layer-ico6{background-position:-180px 0}.layui-layer-rim{border:6px solid #8D8D8D;border:6px solid rgba(0,0,0,.3);border-radius:5px;box-shadow:none}.layui-layer-msg{min-width:180px;border:1px solid #D3D4D3;box-shadow:none}.layui-layer-hui{min-width:100px;background-color:#000;filter:alpha(opacity=60);background-color:rgba(0,0,0,.6);color:#fff;border:none}.layui-layer-hui .layui-layer-content{padding:12px 25px;text-align:center}.layui-layer-dialog .layui-layer-padding{padding:20px 20px 20px 55px;text-align:left}.layui-layer-page .layui-layer-content{position:relative;overflow:auto}.layui-layer-iframe .layui-layer-btn,.layui-layer-page .layui-layer-btn{padding-top:10px}.layui-layer-nobg{background:0 0}.layui-layer-iframe iframe{display:block;width:100%}.layui-layer-loading{border-radius:100%;background:0 0;box-shadow:none;border:none}.layui-layer-loading .layui-layer-content{width:60px;height:24px;background:url(loading-0.gif) no-repeat}.layui-layer-loading .layui-layer-loading1{width:37px;height:37px;background:url(loading-1.gif) no-repeat}.layui-layer-ico16,.layui-layer-loading .layui-layer-loading2{width:32px;height:32px;background:url(loading-2.gif) no-repeat}.layui-layer-tips{background:0 0;box-shadow:none;border:none}.layui-layer-tips .layui-layer-content{position:relative;line-height:22px;min-width:12px;padding:8px 15px;font-size:12px;_float:left;border-radius:2px;box-shadow:1px 1px 3px rgba(0,0,0,.2);background-color:#000;color:#fff}.layui-layer-tips .layui-layer-close{right:-2px;top:-1px}.layui-layer-tips i.layui-layer-TipsG{position:absolute;width:0;height:0;border-width:8px;border-color:transparent;border-style:dashed;*overflow:hidden}.layui-layer-tips i.layui-layer-TipsB,.layui-layer-tips i.layui-layer-TipsT{left:5px;border-right-style:solid;border-right-color:#000}.layui-layer-tips i.layui-layer-TipsT{bottom:-8px}.layui-layer-tips i.layui-layer-TipsB{top:-8px}.layui-layer-tips i.layui-layer-TipsL,.layui-layer-tips i.layui-layer-TipsR{top:5px;border-bottom-style:solid;border-bottom-color:#000}.layui-layer-tips i.layui-layer-TipsR{left:-8px}.layui-layer-tips i.layui-layer-TipsL{right:-8px}.layui-layer-lan[type=dialog]{min-width:280px}.layui-layer-lan .layui-layer-title{background:#4476A7;color:#fff;border:none}.layui-layer-lan .layui-layer-btn{padding:5px 10px 10px;text-align:right;border-top:1px solid #E9E7E7}.layui-layer-lan .layui-layer-btn a{background:#fff;border-color:#E9E7E7;color:#333}.layui-layer-lan .layui-layer-btn .layui-layer-btn1{background:#C9C5C5}.layui-layer-molv .layui-layer-title{background:#009f95;color:#fff;border:none}.layui-layer-molv .layui-layer-btn a{background:#009f95;border-color:#009f95}.layui-layer-molv .layui-layer-btn .layui-layer-btn1{background:#92B8B1}.layui-layer-iconext{background:url(icon-ext.png) no-repeat}.layui-layer-prompt .layui-layer-input{display:block;width:260px;height:36px;margin:0 auto;line-height:30px;padding-left:10px;border:1px solid #e6e6e6;color:#333}.layui-layer-prompt textarea.layui-layer-input{width:300px;height:100px;line-height:20px;padding:6px 10px}.layui-layer-prompt .layui-layer-content{padding:20px}.layui-layer-prompt .layui-layer-btn{padding-top:0}.layui-layer-tab{box-shadow:1px 1px 50px rgba(0,0,0,.4)}.layui-layer-tab .layui-layer-title{padding-left:0;overflow:visible}.layui-layer-tab .layui-layer-title span{position:relative;float:left;min-width:80px;max-width:300px;padding:0 20px;text-align:center;overflow:hidden;cursor:pointer}.layui-layer-tab .layui-layer-title span.layui-this{height:51px;border-left:1px solid #eee;border-right:1px solid #eee;background-color:#fff;z-index:10}.layui-layer-tab .layui-layer-title span:first-child{border-left:none}.layui-layer-tabmain{line-height:24px;clear:both}.layui-layer-tabmain .layui-layer-tabli{display:none}.layui-layer-tabmain .layui-layer-tabli.layui-this{display:block}.layui-layer-photos{background:0 0;box-shadow:none}.layui-layer-photos .layui-layer-content{overflow:hidden;text-align:center}.layui-layer-photos .layui-layer-phimg img{position:relative;width:100%;display:inline-block;*display:inline;*zoom:1;vertical-align:top}.layui-layer-imgnext,.layui-layer-imgprev{position:fixed;top:50%;width:27px;_width:44px;height:44px;margin-top:-22px;outline:0;blr:expression(this.onFocus=this.blur())}.layui-layer-imgprev{left:30px;background-position:-5px -5px;_background-position:-70px -5px}.layui-layer-imgprev:hover{background-position:-33px -5px;_background-position:-120px -5px}.layui-layer-imgnext{right:30px;_right:8px;background-position:-5px -50px;_background-position:-70px -50px}.layui-layer-imgnext:hover{background-position:-33px -50px;_background-position:-120px -50px}.layui-layer-imgbar{position:fixed;left:0;right:0;bottom:0;width:100%;height:40px;line-height:40px;background-color:#000\9;filter:Alpha(opacity=60);background-color:rgba(2,0,0,.35);color:#fff;overflow:hidden;font-size:0}.layui-layer-imgtit *{display:inline-block;*display:inline;*zoom:1;vertical-align:top;font-size:12px}.layui-layer-imgtit a{max-width:65%;overflow:hidden;color:#fff}.layui-layer-imgtit a:hover{color:#fff;text-decoration:underline}.layui-layer-imgtit em{padding-left:10px;font-style:normal}@-webkit-keyframes layer-bounceOut{100%{opacity:0;-webkit-transform:scale(.7);transform:scale(.7)}30%{-webkit-transform:scale(1.05);transform:scale(1.05)}0%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes layer-bounceOut{100%{opacity:0;-webkit-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}30%{-webkit-transform:scale(1.05);-ms-transform:scale(1.05);transform:scale(1.05)}0%{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.layer-anim-close{-webkit-animation-name:layer-bounceOut;animation-name:layer-bounceOut;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.2s;animation-duration:.2s}@media screen and (max-width:1100px){.layui-layer-iframe{overflow-y:auto;-webkit-overflow-scrolling:touch}} \ No newline at end of file diff --git a/src/main/resources/webroot/layui/css/modules/layer/default/loading-0.gif b/src/main/resources/webroot/layui/css/modules/layer/default/loading-0.gif new file mode 100644 index 0000000..6f3c953 Binary files /dev/null and b/src/main/resources/webroot/layui/css/modules/layer/default/loading-0.gif differ diff --git a/src/main/resources/webroot/layui/css/modules/layer/default/loading-1.gif b/src/main/resources/webroot/layui/css/modules/layer/default/loading-1.gif new file mode 100644 index 0000000..db3a483 Binary files /dev/null and b/src/main/resources/webroot/layui/css/modules/layer/default/loading-1.gif differ diff --git a/src/main/resources/webroot/layui/css/modules/layer/default/loading-2.gif b/src/main/resources/webroot/layui/css/modules/layer/default/loading-2.gif new file mode 100644 index 0000000..5bb90fd Binary files /dev/null and b/src/main/resources/webroot/layui/css/modules/layer/default/loading-2.gif differ diff --git a/src/main/resources/webroot/layui/font/iconfont.eot b/src/main/resources/webroot/layui/font/iconfont.eot new file mode 100644 index 0000000..622d7ec Binary files /dev/null and b/src/main/resources/webroot/layui/font/iconfont.eot differ diff --git a/src/main/resources/webroot/layui/font/iconfont.svg b/src/main/resources/webroot/layui/font/iconfont.svg new file mode 100644 index 0000000..999ca1f --- /dev/null +++ b/src/main/resources/webroot/layui/font/iconfont.svg @@ -0,0 +1,554 @@ + + + + + +Created by iconfont + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/webroot/layui/font/iconfont.ttf b/src/main/resources/webroot/layui/font/iconfont.ttf new file mode 100644 index 0000000..06e30f9 Binary files /dev/null and b/src/main/resources/webroot/layui/font/iconfont.ttf differ diff --git a/src/main/resources/webroot/layui/font/iconfont.woff b/src/main/resources/webroot/layui/font/iconfont.woff new file mode 100644 index 0000000..66a1783 Binary files /dev/null and b/src/main/resources/webroot/layui/font/iconfont.woff differ diff --git a/src/main/resources/webroot/layui/font/iconfont.woff2 b/src/main/resources/webroot/layui/font/iconfont.woff2 new file mode 100644 index 0000000..47e9980 Binary files /dev/null and b/src/main/resources/webroot/layui/font/iconfont.woff2 differ diff --git a/src/main/resources/webroot/layui/layui.js b/src/main/resources/webroot/layui/layui.js new file mode 100644 index 0000000..8b89e2d --- /dev/null +++ b/src/main/resources/webroot/layui/layui.js @@ -0,0 +1,5 @@ +/*! MIT Licensed */;!function(t){"use strict";var e=t.document,n={modules:{},status:{},timeout:10,event:{}},r=function(){this.v="2.6.8"},o=t.LAYUI_GLOBAL||{},a=function(){var t=e.currentScript?e.currentScript.src:function(){for(var t,n=e.scripts,r=n.length-1,o=r;o>0;o--)if("interactive"===n[o].readyState){t=n[o].src;break}return t||n[r].src}();return n.dir=o.dir||t.substring(0,t.lastIndexOf("/")+1)}(),i=function(e,n){n=n||"log",t.console&&console[n]&&console[n]("layui error hint: "+e)},u="undefined"!=typeof opera&&"[object Opera]"===opera.toString(),l=n.builtin={lay:"lay",layer:"layer",laydate:"laydate",laypage:"laypage",laytpl:"laytpl",layedit:"layedit",form:"form",upload:"upload",dropdown:"dropdown",transfer:"transfer",tree:"tree",table:"table",element:"element",rate:"rate",colorpicker:"colorpicker",slider:"slider",carousel:"carousel",flow:"flow",util:"util",code:"code",jquery:"jquery",all:"all","layui.all":"layui.all"};r.prototype.cache=n,r.prototype.define=function(t,e){var r=this,o="function"==typeof t,a=function(){var t=function(t,e){layui[t]=e,n.status[t]=!0};return"function"==typeof e&&e(function(r,o){t(r,o),n.callback[r]=function(){e(t)}}),this};return o&&(e=t,t=[]),r.use(t,a,null,"define"),r},r.prototype.use=function(r,o,c,s){function p(t,e){var r="PLaySTATION 3"===navigator.platform?/^complete$/:/^(complete|loaded)$/;("load"===t.type||r.test((t.currentTarget||t.srcElement).readyState))&&(n.modules[h]=e,v.removeChild(b),function o(){return++m>1e3*n.timeout/4?i(h+" is not a valid module","error"):void(n.status[h]?f():setTimeout(o,4))}())}function f(){c.push(layui[h]),r.length>1?y.use(r.slice(1),o,c,s):"function"==typeof o&&function(){return layui.jquery&&"function"==typeof layui.jquery&&"define"!==s?layui.jquery(function(){o.apply(layui,c)}):void o.apply(layui,c)}()}var y=this,d=n.dir=n.dir?n.dir:a,v=e.getElementsByTagName("head")[0];r=function(){return"string"==typeof r?[r]:"function"==typeof r?(o=r,["all"]):r}(),t.jQuery&&jQuery.fn.on&&(y.each(r,function(t,e){"jquery"===e&&r.splice(t,1)}),layui.jquery=layui.$=jQuery);var h=r[0],m=0;if(c=c||[],n.host=n.host||(d.match(/\/\/([\s\S]+?)\//)||["//"+location.host+"/"])[0],0===r.length||layui["layui.all"]&&l[h])return f(),y;var g=(l[h]?d+"modules/":/^\{\/\}/.test(y.modules[h])?"":n.base||"")+(y.modules[h]||h)+".js";if(g=g.replace(/^\{\/\}/,""),!n.modules[h]&&layui[h]&&(n.modules[h]=g),n.modules[h])!function S(){return++m>1e3*n.timeout/4?i(h+" is not a valid module","error"):void("string"==typeof n.modules[h]&&n.status[h]?f():setTimeout(S,4))}();else{var b=e.createElement("script");b.async=!0,b.charset="utf-8",b.src=g+function(){var t=n.version===!0?n.v||(new Date).getTime():n.version||"";return t?"?v="+t:""}(),v.appendChild(b),!b.attachEvent||b.attachEvent.toString&&b.attachEvent.toString().indexOf("[native code")<0||u?b.addEventListener("load",function(t){p(t,g)},!1):b.attachEvent("onreadystatechange",function(t){p(t,g)}),n.modules[h]=g}return y},r.prototype.getStyle=function(e,n){var r=e.currentStyle?e.currentStyle:t.getComputedStyle(e,null);return r[r.getPropertyValue?"getPropertyValue":"getAttribute"](n)},r.prototype.link=function(t,r,o){var a=this,u=e.getElementsByTagName("head")[0],l=e.createElement("link");"string"==typeof r&&(o=r);var c=(o||t).replace(/\.|\//g,""),s=l.id="layuicss-"+c,p="creating",f=0;return l.rel="stylesheet",l.href=t+(n.debug?"?v="+(new Date).getTime():""),l.media="all",e.getElementById(s)||u.appendChild(l),"function"!=typeof r?a:(function y(o){var u=100,l=e.getElementById(s);return++f>1e3*n.timeout/u?i(t+" timeout"):void(1989===parseInt(a.getStyle(l,"width"))?(o===p&&l.removeAttribute("lay-status"),l.getAttribute("lay-status")===p?setTimeout(y,u):r()):(l.setAttribute("lay-status",p),setTimeout(function(){y(p)},u)))}(),a)},r.prototype.addcss=function(t,e,r){return layui.link(n.dir+"css/"+t,e,r)},n.callback={},r.prototype.factory=function(t){if(layui[t])return"function"==typeof n.callback[t]?n.callback[t]:null},r.prototype.img=function(t,e,n){var r=new Image;return r.src=t,r.complete?e(r):(r.onload=function(){r.onload=null,"function"==typeof e&&e(r)},void(r.onerror=function(t){r.onerror=null,"function"==typeof n&&n(t)}))},r.prototype.config=function(t){t=t||{};for(var e in t)n[e]=t[e];return this},r.prototype.modules=function(){var t={};for(var e in l)t[e]=l[e];return t}(),r.prototype.extend=function(t){var e=this;t=t||{};for(var n in t)e[n]||e.modules[n]?i(n+" Module already exists","error"):e.modules[n]=t[n];return e},r.prototype.router=function(t){var e=this,t=t||location.hash,n={path:[],search:{},hash:(t.match(/[^#](#.*$)/)||[])[1]||""};return/^#\//.test(t)?(t=t.replace(/^#\//,""),n.href="/"+t,t=t.replace(/([^#])(#.*$)/,"$1").split("/")||[],e.each(t,function(t,e){/^\w+=/.test(e)?function(){e=e.split("="),n.search[e[0]]=e[1]}():n.path.push(e)}),n):n},r.prototype.url=function(t){var e=this,n={pathname:function(){var e=t?function(){var e=(t.match(/\.[^.]+?\/.+/)||[])[0]||"";return e.replace(/^[^\/]+/,"").replace(/\?.+/,"")}():location.pathname;return e.replace(/^\//,"").split("/")}(),search:function(){var n={},r=(t?function(){var e=(t.match(/\?.+/)||[])[0]||"";return e.replace(/\#.+/,"")}():location.search).replace(/^\?+/,"").split("&");return e.each(r,function(t,e){var r=e.indexOf("="),o=function(){return r<0?e.substr(0,e.length):0!==r&&e.substr(0,r)}();o&&(n[o]=r>0?e.substr(r+1):null)}),n}(),hash:e.router(function(){return t?(t.match(/#.+/)||[])[0]||"/":location.hash}())};return n},r.prototype.data=function(e,n,r){if(e=e||"layui",r=r||localStorage,t.JSON&&t.JSON.parse){if(null===n)return delete r[e];n="object"==typeof n?n:{key:n};try{var o=JSON.parse(r[e])}catch(a){var o={}}return"value"in n&&(o[n.key]=n.value),n.remove&&delete o[n.key],r[e]=JSON.stringify(o),n.key?o[n.key]:o}},r.prototype.sessionData=function(t,e){return this.data(t,e,sessionStorage)},r.prototype.device=function(e){var n=navigator.userAgent.toLowerCase(),r=function(t){var e=new RegExp(t+"/([^\\s\\_\\-]+)");return t=(n.match(e)||[])[1],t||!1},o={os:function(){return/windows/.test(n)?"windows":/linux/.test(n)?"linux":/iphone|ipod|ipad|ios/.test(n)?"ios":/mac/.test(n)?"mac":void 0}(),ie:function(){return!!(t.ActiveXObject||"ActiveXObject"in t)&&((n.match(/msie\s(\d+)/)||[])[1]||"11")}(),weixin:r("micromessenger")};return e&&!o[e]&&(o[e]=r(e)),o.android=/android/.test(n),o.ios="ios"===o.os,o.mobile=!(!o.android&&!o.ios),o},r.prototype.hint=function(){return{error:i}},r.prototype._typeof=function(t){return null===t?String(t):"object"==typeof t||"function"==typeof t?function(){var e=Object.prototype.toString.call(t).match(/\s(.+)\]$/)||[],n="Function|Array|Date|RegExp|Object|Error|Symbol";return e=e[1]||"Object",new RegExp("\\b("+n+")\\b").test(e)?e.toLowerCase():"object"}():typeof t},r.prototype._isArray=function(e){var n,r=this,o=r._typeof(e);return!(!e||"object"!=typeof e||e===t)&&(n="length"in e&&e.length,"array"===o||0===n||"number"==typeof n&&n>0&&n-1 in e)},r.prototype.each=function(t,e){var n,r=this,o=function(t,n){return e.call(n[t],t,n[t])};if("function"!=typeof e)return r;if(t=t||[],r._isArray(t))for(n=0;no?1:r(t.innerHeight||n.documentElement.clientHeight)},r.position=function(e,o,i){if(o){i=i||{},e!==n&&e!==r("body")[0]||(i.clickType="right");var c="right"===i.clickType?function(){var e=i.e||t.event||{};return{left:e.clientX,top:e.clientY,right:e.clientX,bottom:e.clientY}}():e.getBoundingClientRect(),u=o.offsetWidth,a=o.offsetHeight,f=function(t){return t=t?"scrollLeft":"scrollTop",n.body[t]|n.documentElement[t]},s=function(t){return n.documentElement[t?"clientWidth":"clientHeight"]},l=5,h=c.left,p=c.bottom;"center"===i.align?h-=(u-e.offsetWidth)/2:"right"===i.align&&(h=h-u+e.offsetWidth),h+u+l>s("width")&&(h=s("width")-u-l),hs()&&(c.top>a+l?p=c.top-a-2*l:"right"===i.clickType&&(p=s()-a-2*l,p<0&&(p=0)));var y=i.position;if(y&&(o.style.position=y),o.style.left=h+("fixed"===y?0:f(1))+"px",o.style.top=p+("fixed"===y?0:f())+"px",!r.hasScrollbar()){var d=o.getBoundingClientRect();!i.SYSTEM_RELOAD&&d.bottom+l>s()&&(i.SYSTEM_RELOAD=!0,setTimeout(function(){r.position(e,o,i)},50))}}},r.options=function(t,e){var n=r(t),o=e||"lay-options";try{return new Function("return "+(n.attr(o)||"{}"))()}catch(i){return hint.error("parseerror\uff1a"+i,"error"),{}}},r.isTopElem=function(t){var e=[n,r("body")[0]],o=!1;return r.each(e,function(e,n){if(n===t)return o=!0}),o},o.addStr=function(t,e){return t=t.replace(/\s+/," "),e=e.replace(/\s+/," ").split(" "),r.each(e,function(e,n){new RegExp("\\b"+n+"\\b").test(t)||(t=t+" "+n)}),t.replace(/^\s|\s$/,"")},o.removeStr=function(t,e){return t=t.replace(/\s+/," "),e=e.replace(/\s+/," ").split(" "),r.each(e,function(e,n){var r=new RegExp("\\b"+n+"\\b");r.test(t)&&(t=t.replace(r,""))}),t.replace(/\s+/," ").replace(/^\s|\s$/,"")},o.prototype.find=function(t){var e=this,n=0,o=[],i="object"==typeof t;return this.each(function(r,c){for(var u=i?c.contains(t):c.querySelectorAll(t||null);n0)return n[0].style[t]}():n.each(function(n,i){"object"==typeof t?r.each(t,function(t,e){i.style[t]=o(e)}):i.style[t]=o(e)})},o.prototype.width=function(t){var e=this;return void 0===t?function(){if(e.length>0)return e[0].offsetWidth}():e.each(function(n,r){e.css("width",t)})},o.prototype.height=function(t){var e=this;return void 0===t?function(){if(e.length>0)return e[0].offsetHeight}():e.each(function(n,r){e.css("height",t)})},o.prototype.attr=function(t,e){var n=this;return void 0===e?function(){if(n.length>0)return n[0].getAttribute(t)}():n.each(function(n,r){r.setAttribute(t,e)})},o.prototype.removeAttr=function(t){return this.each(function(e,n){n.removeAttribute(t)})},o.prototype.html=function(t){var e=this;return void 0===t?function(){if(e.length>0)return e[0].innerHTML}():this.each(function(e,n){n.innerHTML=t})},o.prototype.val=function(t){var e=this;return void 0===t?function(){if(e.length>0)return e[0].value}():this.each(function(e,n){n.value=t})},o.prototype.append=function(t){return this.each(function(e,n){"object"==typeof t?n.appendChild(t):n.innerHTML=n.innerHTML+t})},o.prototype.remove=function(t){return this.each(function(e,n){t?n.removeChild(t):n.parentNode.removeChild(n)})},o.prototype.on=function(t,e){return this.each(function(n,r){r.attachEvent?r.attachEvent("on"+t,function(t){t.target=t.srcElement,e.call(r,t)}):r.addEventListener(t,e,!1)})},o.prototype.off=function(t,e){return this.each(function(n,r){r.detachEvent?r.detachEvent("on"+t,e):r.removeEventListener(t,e,!1)})},t.lay=r,t.layui&&layui.define&&layui.define(function(t){t(e,r)})}(window,window.document);layui.define(function(e){"use strict";var r={open:"{{",close:"}}"},c={exp:function(e){return new RegExp(e,"g")},query:function(e,c,t){var o=["#([\\s\\S])+?","([^{#}])*?"][e||0];return n((c||"")+r.open+o+r.close+(t||""))},escape:function(e){return String(e||"").replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""")},error:function(e,r){var c="Laytpl Error: ";return"object"==typeof console&&console.error(c+e+"\n"+(r||"")),c+e}},n=c.exp,t=function(e){this.tpl=e};t.pt=t.prototype,window.errors=0,t.pt.parse=function(e,t){var o=this,p=e,a=n("^"+r.open+"#",""),l=n(r.close+"$","");e=e.replace(/\s+|\r|\t|\n/g," ").replace(n(r.open+"#"),r.open+"# ").replace(n(r.close+"}"),"} "+r.close).replace(/\\/g,"\\\\").replace(n(r.open+"!(.+?)!"+r.close),function(e){return e=e.replace(n("^"+r.open+"!"),"").replace(n("!"+r.close),"").replace(n(r.open+"|"+r.close),function(e){return e.replace(/(.)/g,"\\$1")})}).replace(/(?="|')/g,"\\").replace(c.query(),function(e){return e=e.replace(a,"").replace(l,""),'";'+e.replace(/\\(.)/g,"$1")+';view+="'}).replace(c.query(1),function(e){var c='"+(';return e.replace(/\s/g,"")===r.open+r.close?"":(e=e.replace(n(r.open+"|"+r.close),""),/^=/.test(e)&&(e=e.replace(/^=/,""),c='"+_escape_('),c+e.replace(/\\(.)/g,"$1")+')+"')}),e='"use strict";var view = "'+e+'";return view;';try{return o.cache=e=new Function("d, _escape_",e),e(t,c.escape)}catch(u){return delete o.cache,c.error(u,p)}},t.pt.render=function(e,r){var n,t=this;return e?(n=t.cache?t.cache(e,c.escape):t.parse(t.tpl,e),r?void r(n):n):c.error("no data")};var o=function(e){return"string"!=typeof e?c.error("Template not found"):new t(e)};o.config=function(e){e=e||{};for(var c in e)r[c]=e[c]},o.v="1.2.0",e("laytpl",o)});layui.define(function(e){"use strict";var a=document,t="getElementById",n="getElementsByTagName",i="laypage",r="layui-disabled",u=function(e){var a=this;a.config=e||{},a.config.index=++s.index,a.render(!0)};u.prototype.type=function(){var e=this.config;if("object"==typeof e.elem)return void 0===e.elem.length?2:3},u.prototype.view=function(){var e=this,a=e.config,t=a.groups="groups"in a?0|a.groups:5;a.layout="object"==typeof a.layout?a.layout:["prev","page","next"],a.count=0|a.count,a.curr=0|a.curr||1,a.limits="object"==typeof a.limits?a.limits:[10,20,30,40,50],a.limit=0|a.limit||10,a.pages=Math.ceil(a.count/a.limit)||1,a.curr>a.pages&&(a.curr=a.pages),t<0?t=1:t>a.pages&&(t=a.pages),a.prev="prev"in a?a.prev:"上一页",a.next="next"in a?a.next:"下一页";var n=a.pages>t?Math.ceil((a.curr+(t>1?1:0))/(t>0?t:1)):1,i={prev:function(){return a.prev?''+a.prev+"":""}(),page:function(){var e=[];if(a.count<1)return"";n>1&&a.first!==!1&&0!==t&&e.push(''+(a.first||1)+"");var i=Math.floor((t-1)/2),r=n>1?a.curr-i:1,u=n>1?function(){var e=a.curr+(t-i-1);return e>a.pages?a.pages:e}():t;for(u-r2&&e.push('…');r<=u;r++)r===a.curr?e.push('"+r+""):e.push(''+r+"");return a.pages>t&&a.pages>u&&a.last!==!1&&(u+1…'),0!==t&&e.push(''+(a.last||a.pages)+"")),e.join("")}(),next:function(){return a.next?''+a.next+"":""}(),count:'\u5171 '+a.count+" \u6761",limit:function(){var e=[''];return layui.each(a.limits,function(t,n){e.push('"+n+" \u6761/\u9875")}),e.join("")+""}(),refresh:['','',""].join(""),skip:function(){return['到第','','页确定',""].join("")}()};return['',function(){var e=[];return layui.each(a.layout,function(a,t){i[t]&&e.push(i[t])}),e.join("")}(),""].join("")},u.prototype.jump=function(e,a){if(e){var t=this,i=t.config,r=e.children,u=e[n]("button")[0],l=e[n]("input")[0],p=e[n]("select")[0],c=function(){var e=0|l.value.replace(/\s|\D/g,"");e&&(i.curr=e,t.render())};if(a)return c();for(var o=0,y=r.length;oi.pages||(i.curr=e,t.render())});p&&s.on(p,"change",function(){var e=this.value;i.curr*e>i.count&&(i.curr=Math.ceil(i.count/e)),i.limit=e,t.render()}),u&&s.on(u,"click",function(){c()})}},u.prototype.skip=function(e){if(e){var a=this,t=e[n]("input")[0];t&&s.on(t,"keyup",function(t){var n=this.value,i=t.keyCode;/^(37|38|39|40)$/.test(i)||(/\D/.test(n)&&(this.value=n.replace(/\D/,"")),13===i&&a.jump(e,!0))})}},u.prototype.render=function(e){var n=this,i=n.config,r=n.type(),u=n.view();2===r?i.elem&&(i.elem.innerHTML=u):3===r?i.elem.html(u):a[t](i.elem)&&(a[t](i.elem).innerHTML=u),i.jump&&i.jump(i,e);var s=a[t]("layui-laypage-"+i.index);n.jump(s),i.hash&&!e&&(location.hash="!"+i.hash+"="+i.curr),n.skip(s)};var s={render:function(e){var a=new u(e);return a.index},index:layui.laypage?layui.laypage.index+1e4:0,on:function(e,a,t){return e.attachEvent?e.attachEvent("on"+a,function(a){a.target=a.srcElement,t.call(e,a)}):e.addEventListener(a,t,!1),this}};e(i,s)});!function(e,t){"use strict";var a=e.layui&&layui.define,n={getPath:e.lay&&lay.getPath?lay.getPath:"",link:function(t,a,n){l.path&&e.lay&&lay.layui&&lay.layui.link(l.path+t,a,n)}},i=e.LAYUI_GLOBAL||{},l={v:"5.3.1",config:{},index:e.laydate&&e.laydate.v?1e5:0,path:i.laydate_dir||n.getPath,set:function(e){var t=this;return t.config=lay.extend({},t.config,e),t},ready:function(e){var t="laydate",i="",r=(a?"modules/laydate/":"theme/")+"default/laydate.css?v="+l.v+i;return a?layui.addcss(r,e,t):n.link(r,e,t),this}},r=function(){var e=this,t=e.config,a=t.id;return r.that[a]=e,{hint:function(t){e.hint.call(e,t)},config:e.config}},o="laydate",s=".layui-laydate",y="layui-this",d="laydate-disabled",m=[100,2e5],c="layui-laydate-static",u="layui-laydate-list",h="layui-laydate-hint",f="layui-laydate-footer",p=".laydate-btns-confirm",g="laydate-time-text",v="laydate-btns-time",T="layui-laydate-preview",D=function(e){var t=this;t.index=++l.index,t.config=lay.extend({},t.config,l.config,e),e=t.config,e.id="id"in e?e.id:t.index,l.ready(function(){t.init()})},w="yyyy|y|MM|M|dd|d|HH|H|mm|m|ss|s";r.formatArr=function(e){return(e||"").match(new RegExp(w+"|.","g"))||[]},D.isLeapYear=function(e){return e%4===0&&e%100!==0||e%400===0},D.prototype.config={type:"date",range:!1,format:"yyyy-MM-dd",value:null,isInitValue:!0,min:"1900-1-1",max:"2099-12-31",trigger:"click",show:!1,showBottom:!0,isPreview:!0,btns:["clear","now","confirm"],lang:"cn",theme:"default",position:null,calendar:!1,mark:{},zIndex:null,done:null,change:null},D.prototype.lang=function(){var e=this,t=e.config,a={cn:{weeks:["\u65e5","\u4e00","\u4e8c","\u4e09","\u56db","\u4e94","\u516d"],time:["\u65f6","\u5206","\u79d2"],timeTips:"\u9009\u62e9\u65f6\u95f4",startTime:"\u5f00\u59cb\u65f6\u95f4",endTime:"\u7ed3\u675f\u65f6\u95f4",dateTips:"\u8fd4\u56de\u65e5\u671f",month:["\u4e00","\u4e8c","\u4e09","\u56db","\u4e94","\u516d","\u4e03","\u516b","\u4e5d","\u5341","\u5341\u4e00","\u5341\u4e8c"],tools:{confirm:"\u786e\u5b9a",clear:"\u6e05\u7a7a",now:"\u73b0\u5728"},timeout:"\u7ed3\u675f\u65f6\u95f4\u4e0d\u80fd\u65e9\u4e8e\u5f00\u59cb\u65f6\u95f4\u8bf7\u91cd\u65b0\u9009\u62e9",invalidDate:"\u4e0d\u5728\u6709\u6548\u65e5\u671f\u6216\u65f6\u95f4\u8303\u56f4\u5185",formatError:["\u65e5\u671f\u683c\u5f0f\u4e0d\u5408\u6cd5\u5fc5\u987b\u9075\u5faa\u4e0b\u8ff0\u683c\u5f0f\uff1a","\u5df2\u4e3a\u4f60\u91cd\u7f6e"],preview:"\u5f53\u524d\u9009\u4e2d\u7684\u7ed3\u679c"},en:{weeks:["Su","Mo","Tu","We","Th","Fr","Sa"],time:["Hours","Minutes","Seconds"],timeTips:"Select Time",startTime:"Start Time",endTime:"End Time",dateTips:"Select Date",month:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],tools:{confirm:"Confirm",clear:"Clear",now:"Now"},timeout:"End time cannot be less than start TimePlease re-select",invalidDate:"Invalid date",formatError:["The date format errorMust be followed\uff1a","It has been reset"],preview:"The selected result"}};return a[t.lang]||a.cn},D.prototype.init=function(){var t=this,a=t.config,n="static"===a.position,i={year:"yyyy",month:"yyyy-MM",date:"yyyy-MM-dd",time:"HH:mm:ss",datetime:"yyyy-MM-dd HH:mm:ss"};a.elem=lay(a.elem),a.eventElem=lay(a.eventElem),a.elem[0]&&(t.rangeStr=a.range?"string"==typeof a.range?a.range:"-":"","array"===layui._typeof(a.range)&&(t.rangeElem=[lay(a.range[0]),lay(a.range[1])]),i[a.type]||(e.console&&console.error&&console.error("laydate type error:'"+a.type+"' is not supported"),a.type="date"),a.format===i.date&&(a.format=i[a.type]||i.date),t.format=r.formatArr(a.format),t.EXP_IF="",t.EXP_SPLIT="",lay.each(t.format,function(e,a){var n=new RegExp(w).test(a)?"\\d{"+function(){return new RegExp(w).test(t.format[0===e?e+1:e-1]||"")?/^yyyy|y$/.test(a)?4:a.length:/^yyyy$/.test(a)?"1,4":/^y$/.test(a)?"1,308":"1,2"}()+"}":"\\"+a;t.EXP_IF=t.EXP_IF+n,t.EXP_SPLIT=t.EXP_SPLIT+"("+n+")"}),t.EXP_IF_ONE=new RegExp("^"+t.EXP_IF+"$"),t.EXP_IF=new RegExp("^"+(a.range?t.EXP_IF+"\\s\\"+t.rangeStr+"\\s"+t.EXP_IF:t.EXP_IF)+"$"),t.EXP_SPLIT=new RegExp("^"+t.EXP_SPLIT+"$",""),t.isInput(a.elem[0])||"focus"===a.trigger&&(a.trigger="click"),a.elem.attr("lay-key")||(a.elem.attr("lay-key",t.index),a.eventElem.attr("lay-key",t.index)),a.mark=lay.extend({},a.calendar&&"cn"===a.lang?{"0-1-1":"\u5143\u65e6","0-2-14":"\u60c5\u4eba","0-3-8":"\u5987\u5973","0-3-12":"\u690d\u6811","0-4-1":"\u611a\u4eba","0-5-1":"\u52b3\u52a8","0-5-4":"\u9752\u5e74","0-6-1":"\u513f\u7ae5","0-9-10":"\u6559\u5e08","0-9-18":"\u56fd\u803b","0-10-1":"\u56fd\u5e86","0-12-25":"\u5723\u8bde"}:{},a.mark),lay.each(["min","max"],function(e,t){var n=[],i=[];if("number"==typeof a[t]){var l=a[t],r=(new Date).getTime(),o=864e5,s=new Date(l?l0)return!0;var t=lay.elem("div",{"class":"layui-laydate-header"}),i=[function(){var e=lay.elem("i",{"class":"layui-icon laydate-icon laydate-prev-y"});return e.innerHTML="",e}(),function(){var e=lay.elem("i",{"class":"layui-icon laydate-icon laydate-prev-m"});return e.innerHTML="",e}(),function(){var e=lay.elem("div",{"class":"laydate-set-ym"}),t=lay.elem("span"),a=lay.elem("span");return e.appendChild(t),e.appendChild(a),e}(),function(){var e=lay.elem("i",{"class":"layui-icon laydate-icon laydate-next-m"});return e.innerHTML="",e}(),function(){var e=lay.elem("i",{"class":"layui-icon laydate-icon laydate-next-y"});return e.innerHTML="",e}()],l=lay.elem("div",{"class":"layui-laydate-content"}),r=lay.elem("table"),m=lay.elem("thead"),c=lay.elem("tr");lay.each(i,function(e,a){t.appendChild(a)}),m.appendChild(c),lay.each(new Array(6),function(e){var t=r.insertRow(0);lay.each(new Array(7),function(a){if(0===e){var i=lay.elem("th");i.innerHTML=n.weeks[a],c.appendChild(i)}t.insertCell(a)})}),r.insertBefore(m,r.children[0]),l.appendChild(r),o[e]=lay.elem("div",{"class":"layui-laydate-main laydate-main-list-"+e}),o[e].appendChild(t),o[e].appendChild(l),s.push(i),y.push(l),d.push(r)}),lay(m).html(function(){var e=[],t=[];return"datetime"===a.type&&e.push(''+n.timeTips+""),(a.range||"datetime"!==a.type)&&e.push(''),lay.each(a.btns,function(e,l){var r=n.tools[l]||"btn";a.range&&"now"===l||(i&&"clear"===l&&(r="cn"===a.lang?"\u91cd\u7f6e":"Reset"),t.push(''+r+""))}),e.push('"),e.join("")}()),lay.each(o,function(e,t){r.appendChild(t)}),a.showBottom&&r.appendChild(m),/^#/.test(a.theme)){var u=lay.elem("style"),h=["#{{id}} .layui-laydate-header{background-color:{{theme}};}","#{{id}} .layui-this{background-color:{{theme}} !important;}"].join("").replace(/{{id}}/g,e.elemID).replace(/{{theme}}/g,a.theme);"styleSheet"in u?(u.setAttribute("type","text/css"),u.styleSheet.cssText=h):u.innerHTML=h,lay(r).addClass("laydate-theme-molv"),r.appendChild(u)}l.thisId=a.id,e.remove(D.thisElemDate),i?a.elem.append(r):(t.body.appendChild(r),e.position()),e.checkDate().calendar(null,0,"init"),e.changeEvent(),D.thisElemDate=e.elemID,"function"==typeof a.ready&&a.ready(lay.extend({},a.dateTime,{month:a.dateTime.month+1})),e.preview()},D.prototype.remove=function(e){var t=this,a=(t.config,lay("#"+(e||t.elemID)));return a[0]?(a.hasClass(c)||t.checkDate(function(){a.remove()}),t):t},D.prototype.position=function(){var e=this,t=e.config;return lay.position(e.bindElem||t.elem[0],e.elem,{position:t.position}),e},D.prototype.hint=function(e){var t=this,a=(t.config,lay.elem("div",{"class":h}));t.elem&&(a.innerHTML=e||"",lay(t.elem).find("."+h).remove(),t.elem.appendChild(a),clearTimeout(t.hinTimer),t.hinTimer=setTimeout(function(){lay(t.elem).find("."+h).remove()},3e3))},D.prototype.getAsYM=function(e,t,a){return a?t--:t++,t<0&&(t=11,e--),t>11&&(t=0,e++),[e,t]},D.prototype.systemDate=function(e){var t=e||new Date;return{year:t.getFullYear(),month:t.getMonth(),date:t.getDate(),hours:e?e.getHours():0,minutes:e?e.getMinutes():0,seconds:e?e.getSeconds():0}},D.prototype.checkDate=function(e){var t,a,n=this,i=(new Date,n.config),r=n.lang(),o=i.dateTime=i.dateTime||n.systemDate(),s=n.bindElem||i.elem[0],y=(n.isInput(s)?"val":"html",function(){if(n.rangeElem){var e=[n.rangeElem[0].val(),n.rangeElem[1].val()];if(e[0]&&e[1])return e.join(" "+n.rangeStr+" ")}return n.isInput(s)?s.value:"static"===i.position?"":lay(s).attr("lay-date")}()),d=function(e){e.year>m[1]&&(e.year=m[1],a=!0),e.month>11&&(e.month=11,a=!0),e.hours>23&&(e.hours=0,a=!0),e.minutes>59&&(e.minutes=0,e.hours++,a=!0),e.seconds>59&&(e.seconds=0,e.minutes++,a=!0),t=l.getEndDate(e.month+1,e.year),e.date>t&&(e.date=t,a=!0)},c=function(e,t,l){var r=["startTime","endTime"];t=(t.match(n.EXP_SPLIT)||[]).slice(1),l=l||0,i.range&&(n[r[l]]=n[r[l]]||{}),lay.each(n.format,function(o,s){var y=parseFloat(t[o]);t[o].lengthh(i.max)||h(o)h(i.max))&&(n.endDate=lay.extend({},i.max)),e&&e(),n},D.prototype.mark=function(e,t){var a,n=this,i=n.config;return lay.each(i.mark,function(e,n){var i=e.split("-");i[0]!=t[0]&&0!=i[0]||i[1]!=t[1]&&0!=i[1]||i[2]!=t[2]||(a=n||t[2])}),a&&e.html(''+a+""),n},D.prototype.limit=function(e,t,a,n){var i,l=this,r=l.config,o={},s=r[a>41?"endDate":"dateTime"],y=lay.extend({},s,t||{});return lay.each({now:y,min:r.min,max:r.max},function(e,t){o[e]=l.newDate(lay.extend({year:t.year,month:t.month,date:t.date},function(){var e={};return lay.each(n,function(a,n){e[n]=t[n]}),e}())).getTime()}),i=o.nowo.max,e&&e[i?"addClass":"removeClass"](d),i},D.prototype.thisDateTime=function(e){var t=this,a=t.config;return e?t.endDate:a.dateTime},D.prototype.calendar=function(e,t,a){var n,i,r,o=this,s=o.config,t=t?1:0,d=e||o.thisDateTime(t),c=new Date,u=o.lang(),h="date"!==s.type&&"datetime"!==s.type,f=lay(o.table[t]).find("td"),g=lay(o.elemHeader[t][2]).find("span");return d.yearm[1]&&(d.year=m[1],o.hint(u.invalidDate)),o.firstDate||(o.firstDate=lay.extend({},d)),c.setFullYear(d.year,d.month,1),n=c.getDay(),i=l.getEndDate(d.month||12,d.year),r=l.getEndDate(d.month+1,d.year),lay.each(f,function(e,t){var a=[d.year,d.month],l=0;t=lay(t),t.removeAttr("class"),e=n&&e=a.firstDate.year&&(l.month=n.max.month,l.date=n.max.date),a.limit(lay(i),l,t),M++}),lay(m[f?0:1]).attr("lay-ym",M-8+"-"+D[1]).html(E+T+" - "+(M-1+T))}else if("month"===e)lay.each(new Array(12),function(e){var i=lay.elem("li",{"lay-ym":e}),r={year:D[0],month:e};e+1==D[1]&&lay(i).addClass(y),i.innerHTML=l.month[e]+(f?"\u6708":""),o.appendChild(i),D[0]=a.firstDate.year&&(r.date=n.max.date),a.limit(lay(i),r,t)}),lay(m[f?0:1]).attr("lay-ym",D[0]+"-"+D[1]).html(D[0]+T);else if("time"===e){var C=function(){lay(o).find("ol").each(function(e,n){lay(n).find("li").each(function(n,i){a.limit(lay(i),[{hours:n},{hours:a[x].hours,minutes:n},{hours:a[x].hours,minutes:a[x].minutes,seconds:n}][e],t,[["hours"],["hours","minutes"],["hours","minutes","seconds"]][e])})}),n.range||a.limit(lay(a.footer).find(p),a[x],0,["hours","minutes","seconds"])};n.range?a[x]||(a[x]="startTime"===x?i:a.endDate):a[x]=i,lay.each([24,60,60],function(e,t){var n=lay.elem("li"),i=[""+l.time[e]+""];lay.each(new Array(t),function(t){i.push(""+lay.digit(t,2)+"")}),n.innerHTML=i.join("")+"",o.appendChild(n)}),C()}if(h&&c.removeChild(h),c.appendChild(o),"year"===e||"month"===e)lay(a.elemMain[t]).addClass("laydate-ym-show"),lay(o).find("li").on("click",function(){var l=0|lay(this).attr("lay-ym");if(!lay(this).hasClass(d)){0===t?(i[e]=l,a.limit(lay(a.footer).find(p),null,0)):a.endDate[e]=l;var s="year"===n.type||"month"===n.type;s?(lay(o).find("."+y).removeClass(y),lay(this).addClass(y),"month"===n.type&&"year"===e&&(a.listYM[t][0]=l,r&&((t?a.endDate:i).year=l),a.list("month",t))):(a.checkDate("limit").calendar(null,t),a.closeList()),a.setBtnStatus(),n.range||("month"===n.type&&"month"===e||"year"===n.type&&"year"===e)&&a.setValue(a.parse()).remove().done(),a.done(null,"change"),lay(a.footer).find("."+v).removeClass(d)}});else{var I=lay.elem("span",{"class":g}),k=function(){lay(o).find("ol").each(function(e){var t=this,n=lay(t).find("li");t.scrollTop=30*(a[x][w[e]]-2),t.scrollTop<=0&&n.each(function(e,a){if(!lay(this).hasClass(d))return t.scrollTop=30*(e-2),!0})})},b=lay(s[2]).find("."+g);k(),I.innerHTML=n.range?[l.startTime,l.endTime][t]:l.timeTips,lay(a.elemMain[t]).addClass("laydate-time-show"),b[0]&&b.remove(),s[2].appendChild(I),lay(o).find("ol").each(function(e){var t=this;lay(t).find("li").on("click",function(){var l=0|this.innerHTML;lay(this).hasClass(d)||(n.range?a[x][w[e]]=l:i[w[e]]=l,lay(t).find("."+y).removeClass(y),lay(this).addClass(y),C(),k(),(a.endDate||"time"===n.type)&&a.done(null,"change"),a.setBtnStatus())})})}return a},D.prototype.listYM=[],D.prototype.closeList=function(){var e=this;e.config;lay.each(e.elemCont,function(t,a){lay(this).find("."+u).remove(),lay(e.elemMain[t]).removeClass("laydate-ym-show laydate-time-show")}),lay(e.elem).find("."+g).remove()},D.prototype.setBtnStatus=function(e,t,a){var n,i=this,l=i.config,r=i.lang(),o=lay(i.footer).find(p);l.range&&"time"!==l.type&&(t=t||l.dateTime,a=a||i.endDate,n=i.newDate(t).getTime()>i.newDate(a).getTime(),i.limit(null,t)||i.limit(null,a)?o.addClass(d):o[n?"addClass":"removeClass"](d),e&&n&&i.hint("string"==typeof e?r.timeout.replace(/\u65e5\u671f/g,e):r.timeout))},D.prototype.parse=function(e,t){var a=this,n=a.config,i=t||("end"==e?lay.extend({},a.endDate,a.endTime):n.range?lay.extend({},n.dateTime,a.startTime):n.dateTime),r=l.parse(i,a.format,1);return n.range&&void 0===e?r+" "+a.rangeStr+" "+a.parse("end"):r},D.prototype.newDate=function(e){return e=e||{},new Date(e.year||1,e.month||0,e.date||1,e.hours||0,e.minutes||0,e.seconds||0)},D.prototype.setValue=function(e){var t=this,a=t.config,n=t.bindElem||a.elem[0];return"static"===a.position?t:(e=e||"",t.isInput(n)?lay(n).val(e):t.rangeElem?(t.rangeElem[0].val(e?t.parse("start"):""),t.rangeElem[1].val(e?t.parse("end"):"")):(0===lay(n).find("*").length&&lay(n).html(e),lay(n).attr("lay-date",e)),t)},D.prototype.preview=function(){var e=this,t=e.config;if(t.isPreview){var a=lay(e.elem).find("."+T),n=t.range?e.endDate?e.parse():"":e.parse();a.html(n).css({color:"#5FB878"}),setTimeout(function(){a.css({color:"#666"})},300)}},D.prototype.done=function(e,t){var a=this,n=a.config,i=lay.extend({},lay.extend(n.dateTime,a.startTime)),l=lay.extend({},lay.extend(a.endDate,a.endTime));return lay.each([i,l],function(e,t){"month"in t&&lay.extend(t,{month:t.month+1})}),a.preview(),e=e||[a.parse(),i,l],"function"==typeof n[t||"done"]&&n[t||"done"].apply(n,e),a},D.prototype.choose=function(e,t){var a=this,n=a.config,i=a.thisDateTime(t),l=(lay(a.elem).find("td"),e.attr("lay-ymd").split("-"));l={year:0|l[0],month:(0|l[1])-1,date:0|l[2]},e.hasClass(d)||(lay.extend(i,l),n.range?(lay.each(["startTime","endTime"],function(e,t){a[t]=a[t]||{hours:0,minutes:0,seconds:0}}),a.calendar(null,t).done(null,"change")):"static"===n.position?a.calendar().done().done(null,"change"):"date"===n.type?a.setValue(a.parse()).remove().done():"datetime"===n.type&&a.calendar().done(null,"change"))},D.prototype.tool=function(e,t){var a=this,n=a.config,i=a.lang(),l=n.dateTime,r="static"===n.position,o={datetime:function(){lay(e).hasClass(d)||(a.list("time",0),n.range&&a.list("time",1),lay(e).attr("lay-type","date").html(a.lang().dateTips))},date:function(){a.closeList(),lay(e).attr("lay-type","datetime").html(a.lang().timeTips)},clear:function(){r&&(lay.extend(l,a.firstDate),a.calendar()),n.range&&(delete n.dateTime,delete a.endDate,delete a.startTime,delete a.endTime),a.setValue("").remove(),a.done(["",{},{}])},now:function(){var e=new Date;lay.extend(l,a.systemDate(),{hours:e.getHours(),minutes:e.getMinutes(),seconds:e.getSeconds()}),a.setValue(a.parse()).remove(),r&&a.calendar(),a.done()},confirm:function(){if(n.range){if(lay(e).hasClass(d))return a.hint("time"===n.type?i.timeout.replace(/\u65e5\u671f/g,"\u65f6\u95f4"):i.timeout)}else if(lay(e).hasClass(d))return a.hint(i.invalidDate);a.done(),a.setValue(a.parse()).remove()}};o[t]&&o[t]()},D.prototype.change=function(e){var t=this,a=t.config,n=t.thisDateTime(e),i=a.range&&("year"===a.type||"month"===a.type),l=t.elemCont[e||0],r=t.listYM[e],o=function(o){var s=lay(l).find(".laydate-year-list")[0],y=lay(l).find(".laydate-month-list")[0];return s&&(r[0]=o?r[0]-15:r[0]+15,t.list("year",e)),y&&(o?r[0]--:r[0]++,t.list("month",e)),(s||y)&&(lay.extend(n,{year:r[0]}),i&&(n.year=r[0]),a.range||t.done(null,"change"),a.range||t.limit(lay(t.footer).find(p),{year:r[0]})),t.setBtnStatus(),s||y};return{prevYear:function(){o("sub")||(n.year--,t.checkDate("limit").calendar(null,e),t.done(null,"change"))},prevMonth:function(){var a=t.getAsYM(n.year,n.month,"sub");lay.extend(n,{year:a[0],month:a[1]}),t.checkDate("limit").calendar(null,e),t.done(null,"change")},nextMonth:function(){var a=t.getAsYM(n.year,n.month);lay.extend(n,{year:a[0],month:a[1]}),t.checkDate("limit").calendar(null,e),t.done(null,"change")},nextYear:function(){o()||(n.year++,t.checkDate("limit").calendar(null,e),t.done(null,"change"))}}},D.prototype.changeEvent=function(){var e=this;e.config;lay(e.elem).on("click",function(e){lay.stope(e)}).on("mousedown",function(e){lay.stope(e)}),lay.each(e.elemHeader,function(t,a){lay(a[0]).on("click",function(a){e.change(t).prevYear()}),lay(a[1]).on("click",function(a){e.change(t).prevMonth()}),lay(a[2]).find("span").on("click",function(a){var n=lay(this),i=n.attr("lay-ym"),l=n.attr("lay-type");i&&(i=i.split("-"),e.listYM[t]=[0|i[0],0|i[1]],e.list(l,t),lay(e.footer).find("."+v).addClass(d))}),lay(a[3]).on("click",function(a){e.change(t).nextMonth()}),lay(a[4]).on("click",function(a){e.change(t).nextYear()})}),lay.each(e.table,function(t,a){var n=lay(a).find("td");n.on("click",function(){e.choose(lay(this),t)})}),lay(e.footer).find("span").on("click",function(){var t=lay(this).attr("lay-type");e.tool(this,t)})},D.prototype.isInput=function(e){return/input|textarea/.test(e.tagName.toLocaleLowerCase())},D.prototype.events=function(){var e=this,t=e.config,a=function(a,n){a.on(t.trigger,function(){n&&(e.bindElem=this),e.render()})};t.elem[0]&&!t.elem[0].eventHandler&&(a(t.elem,"bind"),a(t.eventElem),t.elem[0].eventHandler=!0)},r.that={},r.getThis=function(e){var t=r.that[e];return!t&&a&&layui.hint().error(e?o+" instance with ID '"+e+"' not found":"ID argument required"),t},n.run=function(a){a(t).on("mousedown",function(e){if(l.thisId){var t=r.getThis(l.thisId);if(t){var n=t.config;e.target!==n.elem[0]&&e.target!==n.eventElem[0]&&e.target!==a(n.closeStop)[0]&&t.remove()}}}).on("keydown",function(e){if(l.thisId){var t=r.getThis(l.thisId);t&&13===e.keyCode&&a("#"+t.elemID)[0]&&t.elemID===D.thisElemDate&&(e.preventDefault(),a(t.footer).find(p)[0].click())}}),a(e).on("resize",function(){if(l.thisId){var e=r.getThis(l.thisId);if(e)return!(!e.elem||!a(s)[0])&&void e.position()}})},l.render=function(e){var t=new D(e);return r.call(t)},l.parse=function(e,t,a){return e=e||{},"string"==typeof t&&(t=r.formatArr(t)),t=(t||[]).concat(),lay.each(t,function(n,i){/yyyy|y/.test(i)?t[n]=lay.digit(e.year,i.length):/MM|M/.test(i)?t[n]=lay.digit(e.month+(a||0),i.length):/dd|d/.test(i)?t[n]=lay.digit(e.date,i.length):/HH|H/.test(i)?t[n]=lay.digit(e.hours,i.length):/mm|m/.test(i)?t[n]=lay.digit(e.minutes,i.length):/ss|s/.test(i)&&(t[n]=lay.digit(e.seconds,i.length))}),t.join("")},l.getEndDate=function(e,t){var a=new Date;return a.setFullYear(t||a.getFullYear(),e||a.getMonth()+1,1),new Date(a.getTime()-864e5).getDate()},a?(l.ready(),layui.define("lay",function(e){l.path=layui.cache.dir,n.run(lay),e(o,l)})):"function"==typeof define&&define.amd?define(function(){return n.run(lay),l}):function(){l.ready(),n.run(e.lay),e.laydate=l}()}(window,window.document);!function(e,t){"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){function n(e){var t=!!e&&"length"in e&&e.length,n=pe.type(e);return"function"!==n&&!pe.isWindow(e)&&("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}function r(e,t,n){if(pe.isFunction(t))return pe.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return pe.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(Ce.test(t))return pe.filter(t,e,n);t=pe.filter(t,e)}return pe.grep(e,function(e){return pe.inArray(e,t)>-1!==n})}function i(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}function o(e){var t={};return pe.each(e.match(De)||[],function(e,n){t[n]=!0}),t}function a(){re.addEventListener?(re.removeEventListener("DOMContentLoaded",s),e.removeEventListener("load",s)):(re.detachEvent("onreadystatechange",s),e.detachEvent("onload",s))}function s(){(re.addEventListener||"load"===e.event.type||"complete"===re.readyState)&&(a(),pe.ready())}function u(e,t,n){if(void 0===n&&1===e.nodeType){var r="data-"+t.replace(_e,"-$1").toLowerCase();if(n=e.getAttribute(r),"string"==typeof n){try{n="true"===n||"false"!==n&&("null"===n?null:+n+""===n?+n:qe.test(n)?pe.parseJSON(n):n)}catch(i){}pe.data(e,t,n)}else n=void 0}return n}function l(e){var t;for(t in e)if(("data"!==t||!pe.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}function c(e,t,n,r){if(He(e)){var i,o,a=pe.expando,s=e.nodeType,u=s?pe.cache:e,l=s?e[a]:e[a]&&a;if(l&&u[l]&&(r||u[l].data)||void 0!==n||"string"!=typeof t)return l||(l=s?e[a]=ne.pop()||pe.guid++:a),u[l]||(u[l]=s?{}:{toJSON:pe.noop}),"object"!=typeof t&&"function"!=typeof t||(r?u[l]=pe.extend(u[l],t):u[l].data=pe.extend(u[l].data,t)),o=u[l],r||(o.data||(o.data={}),o=o.data),void 0!==n&&(o[pe.camelCase(t)]=n),"string"==typeof t?(i=o[t],null==i&&(i=o[pe.camelCase(t)])):i=o,i}}function f(e,t,n){if(He(e)){var r,i,o=e.nodeType,a=o?pe.cache:e,s=o?e[pe.expando]:pe.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){pe.isArray(t)?t=t.concat(pe.map(t,pe.camelCase)):t in r?t=[t]:(t=pe.camelCase(t),t=t in r?[t]:t.split(" ")),i=t.length;for(;i--;)delete r[t[i]];if(n?!l(r):!pe.isEmptyObject(r))return}(n||(delete a[s].data,l(a[s])))&&(o?pe.cleanData([e],!0):fe.deleteExpando||a!=a.window?delete a[s]:a[s]=void 0)}}}function d(e,t,n,r){var i,o=1,a=20,s=r?function(){return r.cur()}:function(){return pe.css(e,t,"")},u=s(),l=n&&n[3]||(pe.cssNumber[t]?"":"px"),c=(pe.cssNumber[t]||"px"!==l&&+u)&&Me.exec(pe.css(e,t));if(c&&c[3]!==l){l=l||c[3],n=n||[],c=+u||1;do o=o||".5",c/=o,pe.style(e,t,c+l);while(o!==(o=s()/u)&&1!==o&&--a)}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}function p(e){var t=ze.split("|"),n=e.createDocumentFragment();if(n.createElement)for(;t.length;)n.createElement(t.pop());return n}function h(e,t){var n,r,i=0,o="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):void 0;if(!o)for(o=[],n=e.childNodes||e;null!=(r=n[i]);i++)!t||pe.nodeName(r,t)?o.push(r):pe.merge(o,h(r,t));return void 0===t||t&&pe.nodeName(e,t)?pe.merge([e],o):o}function g(e,t){for(var n,r=0;null!=(n=e[r]);r++)pe._data(n,"globalEval",!t||pe._data(t[r],"globalEval"))}function m(e){Be.test(e.type)&&(e.defaultChecked=e.checked)}function y(e,t,n,r,i){for(var o,a,s,u,l,c,f,d=e.length,y=p(t),v=[],x=0;x"!==f[1]||Ve.test(a)?0:u:u.firstChild,o=a&&a.childNodes.length;o--;)pe.nodeName(c=a.childNodes[o],"tbody")&&!c.childNodes.length&&a.removeChild(c);for(pe.merge(v,u.childNodes),u.textContent="";u.firstChild;)u.removeChild(u.firstChild);u=y.lastChild}else v.push(t.createTextNode(a));for(u&&y.removeChild(u),fe.appendChecked||pe.grep(h(v,"input"),m),x=0;a=v[x++];)if(r&&pe.inArray(a,r)>-1)i&&i.push(a);else if(s=pe.contains(a.ownerDocument,a),u=h(y.appendChild(a),"script"),s&&g(u),n)for(o=0;a=u[o++];)Ie.test(a.type||"")&&n.push(a);return u=null,y}function v(){return!0}function x(){return!1}function b(){try{return re.activeElement}catch(e){}}function w(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)w(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),i===!1)i=x;else if(!i)return e;return 1===o&&(a=i,i=function(e){return pe().off(e),a.apply(this,arguments)},i.guid=a.guid||(a.guid=pe.guid++)),e.each(function(){pe.event.add(this,t,i,r,n)})}function T(e,t){return pe.nodeName(e,"table")&&pe.nodeName(11!==t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function C(e){return e.type=(null!==pe.find.attr(e,"type"))+"/"+e.type,e}function E(e){var t=it.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function N(e,t){if(1===t.nodeType&&pe.hasData(e)){var n,r,i,o=pe._data(e),a=pe._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;r1&&"string"==typeof p&&!fe.checkClone&&rt.test(p))return e.each(function(i){var o=e.eq(i);g&&(t[0]=p.call(this,i,o.html())),S(o,t,n,r)});if(f&&(l=y(t,e[0].ownerDocument,!1,e,r),i=l.firstChild,1===l.childNodes.length&&(l=i),i||r)){for(s=pe.map(h(l,"script"),C),a=s.length;c")).appendTo(t.documentElement),t=(ut[0].contentWindow||ut[0].contentDocument).document,t.write(),t.close(),n=D(e,t),ut.detach()),lt[e]=n),n}function L(e,t){return{get:function(){return e()?void delete this.get:(this.get=t).apply(this,arguments)}}}function H(e){if(e in Et)return e;for(var t=e.charAt(0).toUpperCase()+e.slice(1),n=Ct.length;n--;)if(e=Ct[n]+t,e in Et)return e}function q(e,t){for(var n,r,i,o=[],a=0,s=e.length;a=0&&n=0},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},isPlainObject:function(e){var t;if(!e||"object"!==pe.type(e)||e.nodeType||pe.isWindow(e))return!1;try{if(e.constructor&&!ce.call(e,"constructor")&&!ce.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}if(!fe.ownFirst)for(t in e)return ce.call(e,t);for(t in e);return void 0===t||ce.call(e,t)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?ue[le.call(e)]||"object":typeof e},globalEval:function(t){t&&pe.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(ge,"ms-").replace(me,ye)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t){var r,i=0;if(n(e))for(r=e.length;iT.cacheLength&&delete e[t.shift()],e[n+" "]=r}var t=[];return e}function r(e){return e[P]=!0,e}function i(e){var t=H.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function o(e,t){for(var n=e.split("|"),r=n.length;r--;)T.attrHandle[n[r]]=t}function a(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||V)-(~e.sourceIndex||V);if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function s(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function u(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function l(e){return r(function(t){return t=+t,r(function(n,r){for(var i,o=e([],n.length,t),a=o.length;a--;)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function c(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function f(){}function d(e){for(var t=0,n=e.length,r="";t1?function(t,n,r){for(var i=e.length;i--;)if(!e[i](t,n,r))return!1;return!0}:e[0]}function g(e,n,r){for(var i=0,o=n.length;i-1&&(r[l]=!(a[l]=f))}}else x=m(x===a?x.splice(h,x.length):x),o?o(null,a,x,u):Q.apply(a,x)})}function v(e){for(var t,n,r,i=e.length,o=T.relative[e[0].type],a=o||T.relative[" "],s=o?1:0,u=p(function(e){return e===t},a,!0),l=p(function(e){return ee(t,e)>-1},a,!0),c=[function(e,n,r){var i=!o&&(r||n!==A)||((t=n).nodeType?u(e,n,r):l(e,n,r));return t=null,i}];s1&&h(c),s>1&&d(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(se,"$1"),n,s0,o=e.length>0,a=function(r,a,s,u,l){var c,f,d,p=0,h="0",g=r&&[],y=[],v=A,x=r||o&&T.find.TAG("*",l),b=W+=null==v?1:Math.random()||.1,w=x.length;for(l&&(A=a===H||a||l);h!==w&&null!=(c=x[h]);h++){if(o&&c){for(f=0,a||c.ownerDocument===H||(L(c),s=!_);d=e[f++];)if(d(c,a||H,s)){u.push(c);break}l&&(W=b)}i&&((c=!d&&c)&&p--,r&&g.push(c))}if(p+=h,i&&h!==p){for(f=0;d=n[f++];)d(g,y,a,s);if(r){if(p>0)for(;h--;)g[h]||y[h]||(y[h]=G.call(u));y=m(y)}Q.apply(u,y),l&&!r&&y.length>0&&p+n.length>1&&t.uniqueSort(u)}return l&&(W=b,A=v),g};return i?r(a):a}var b,w,T,C,E,N,k,S,A,D,j,L,H,q,_,F,M,O,R,P="sizzle"+1*new Date,B=e.document,W=0,I=0,$=n(),z=n(),X=n(),U=function(e,t){return e===t&&(j=!0),0},V=1<<31,Y={}.hasOwnProperty,J=[],G=J.pop,K=J.push,Q=J.push,Z=J.slice,ee=function(e,t){for(var n=0,r=e.length;n+~]|"+ne+")"+ne+"*"),ce=new RegExp("="+ne+"*([^\\]'\"]*?)"+ne+"*\\]","g"),fe=new RegExp(oe),de=new RegExp("^"+re+"$"),pe={ID:new RegExp("^#("+re+")"),CLASS:new RegExp("^\\.("+re+")"),TAG:new RegExp("^("+re+"|[*])"),ATTR:new RegExp("^"+ie),PSEUDO:new RegExp("^"+oe),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ne+"*(even|odd|(([+-]|)(\\d*)n|)"+ne+"*(?:([+-]|)"+ne+"*(\\d+)|))"+ne+"*\\)|)","i"),bool:new RegExp("^(?:"+te+")$","i"),needsContext:new RegExp("^"+ne+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ne+"*((?:-\\d)?\\d*)"+ne+"*\\)|)(?=[^-]|$)","i")},he=/^(?:input|select|textarea|button)$/i,ge=/^h\d$/i,me=/^[^{]+\{\s*\[native \w/,ye=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ve=/[+~]/,xe=/'|\\/g,be=new RegExp("\\\\([\\da-f]{1,6}"+ne+"?|("+ne+")|.)","ig"),we=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},Te=function(){L()};try{Q.apply(J=Z.call(B.childNodes),B.childNodes),J[B.childNodes.length].nodeType}catch(Ce){Q={apply:J.length?function(e,t){K.apply(e,Z.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}w=t.support={},E=t.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},L=t.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:B;return r!==H&&9===r.nodeType&&r.documentElement?(H=r,q=H.documentElement,_=!E(H),(n=H.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",Te,!1):n.attachEvent&&n.attachEvent("onunload",Te)),w.attributes=i(function(e){return e.className="i",!e.getAttribute("className")}),w.getElementsByTagName=i(function(e){return e.appendChild(H.createComment("")),!e.getElementsByTagName("*").length}),w.getElementsByClassName=me.test(H.getElementsByClassName),w.getById=i(function(e){return q.appendChild(e).id=P,!H.getElementsByName||!H.getElementsByName(P).length}),w.getById?(T.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&_){var n=t.getElementById(e);return n?[n]:[]}},T.filter.ID=function(e){var t=e.replace(be,we);return function(e){return e.getAttribute("id")===t}}):(delete T.find.ID,T.filter.ID=function(e){var t=e.replace(be,we);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}}),T.find.TAG=w.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):w.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},T.find.CLASS=w.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&_)return t.getElementsByClassName(e)},M=[],F=[],(w.qsa=me.test(H.querySelectorAll))&&(i(function(e){q.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&F.push("[*^$]="+ne+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||F.push("\\["+ne+"*(?:value|"+te+")"),e.querySelectorAll("[id~="+P+"-]").length||F.push("~="),e.querySelectorAll(":checked").length||F.push(":checked"),e.querySelectorAll("a#"+P+"+*").length||F.push(".#.+[+~]")}),i(function(e){var t=H.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&F.push("name"+ne+"*[*^$|!~]?="),e.querySelectorAll(":enabled").length||F.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),F.push(",.*:")})),(w.matchesSelector=me.test(O=q.matches||q.webkitMatchesSelector||q.mozMatchesSelector||q.oMatchesSelector||q.msMatchesSelector))&&i(function(e){w.disconnectedMatch=O.call(e,"div"),O.call(e,"[s!='']:x"),M.push("!=",oe)}),F=F.length&&new RegExp(F.join("|")),M=M.length&&new RegExp(M.join("|")),t=me.test(q.compareDocumentPosition),R=t||me.test(q.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},U=t?function(e,t){if(e===t)return j=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n?n:(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1,1&n||!w.sortDetached&&t.compareDocumentPosition(e)===n?e===H||e.ownerDocument===B&&R(B,e)?-1:t===H||t.ownerDocument===B&&R(B,t)?1:D?ee(D,e)-ee(D,t):0:4&n?-1:1)}:function(e,t){if(e===t)return j=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,s=[e],u=[t];if(!i||!o)return e===H?-1:t===H?1:i?-1:o?1:D?ee(D,e)-ee(D,t):0;if(i===o)return a(e,t);for(n=e;n=n.parentNode;)s.unshift(n);for(n=t;n=n.parentNode;)u.unshift(n);for(;s[r]===u[r];)r++;return r?a(s[r],u[r]):s[r]===B?-1:u[r]===B?1:0},H):H},t.matches=function(e,n){return t(e,null,null,n)},t.matchesSelector=function(e,n){if((e.ownerDocument||e)!==H&&L(e),n=n.replace(ce,"='$1']"),w.matchesSelector&&_&&!X[n+" "]&&(!M||!M.test(n))&&(!F||!F.test(n)))try{var r=O.call(e,n);if(r||w.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(i){}return t(n,H,null,[e]).length>0},t.contains=function(e,t){return(e.ownerDocument||e)!==H&&L(e),R(e,t)},t.attr=function(e,t){(e.ownerDocument||e)!==H&&L(e);var n=T.attrHandle[t.toLowerCase()],r=n&&Y.call(T.attrHandle,t.toLowerCase())?n(e,t,!_):void 0;return void 0!==r?r:w.attributes||!_?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},t.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},t.uniqueSort=function(e){var t,n=[],r=0,i=0;if(j=!w.detectDuplicates,D=!w.sortStable&&e.slice(0),e.sort(U),j){for(;t=e[i++];)t===e[i]&&(r=n.push(i));for(;r--;)e.splice(n[r],1)}return D=null,e},C=t.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=C(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r++];)n+=C(t);return n},T=t.selectors={cacheLength:50,createPseudo:r,match:pe,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(be,we),e[3]=(e[3]||e[4]||e[5]||"").replace(be,we),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||t.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&t.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return pe.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&fe.test(n)&&(t=N(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(be,we).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=$[e+" "];return t||(t=new RegExp("(^|"+ne+")"+e+"("+ne+"|$)"))&&$(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,n,r){return function(i){var o=t.attr(i,e);return null==o?"!="===n:!n||(o+="","="===n?o===r:"!="===n?o!==r:"^="===n?r&&0===o.indexOf(r):"*="===n?r&&o.indexOf(r)>-1:"$="===n?r&&o.slice(-r.length)===r:"~="===n?(" "+o.replace(ae," ")+" ").indexOf(r)>-1:"|="===n&&(o===r||o.slice(0,r.length+1)===r+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,d,p,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!u&&!s,x=!1;if(m){if(o){for(;g;){for(d=t;d=d[g];)if(s?d.nodeName.toLowerCase()===y:1===d.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){for(d=m,f=d[P]||(d[P]={}),c=f[d.uniqueID]||(f[d.uniqueID]={}),l=c[e]||[],p=l[0]===W&&l[1],x=p&&l[2], +d=p&&m.childNodes[p];d=++p&&d&&d[g]||(x=p=0)||h.pop();)if(1===d.nodeType&&++x&&d===t){c[e]=[W,p,x];break}}else if(v&&(d=t,f=d[P]||(d[P]={}),c=f[d.uniqueID]||(f[d.uniqueID]={}),l=c[e]||[],p=l[0]===W&&l[1],x=p),x===!1)for(;(d=++p&&d&&d[g]||(x=p=0)||h.pop())&&((s?d.nodeName.toLowerCase()!==y:1!==d.nodeType)||!++x||(v&&(f=d[P]||(d[P]={}),c=f[d.uniqueID]||(f[d.uniqueID]={}),c[e]=[W,x]),d!==t)););return x-=i,x===r||x%r===0&&x/r>=0}}},PSEUDO:function(e,n){var i,o=T.pseudos[e]||T.setFilters[e.toLowerCase()]||t.error("unsupported pseudo: "+e);return o[P]?o(n):o.length>1?(i=[e,e,"",n],T.setFilters.hasOwnProperty(e.toLowerCase())?r(function(e,t){for(var r,i=o(e,n),a=i.length;a--;)r=ee(e,i[a]),e[r]=!(t[r]=i[a])}):function(e){return o(e,0,i)}):o}},pseudos:{not:r(function(e){var t=[],n=[],i=k(e.replace(se,"$1"));return i[P]?r(function(e,t,n,r){for(var o,a=i(e,null,r,[]),s=e.length;s--;)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,r,o){return t[0]=e,i(t,null,o,n),t[0]=null,!n.pop()}}),has:r(function(e){return function(n){return t(e,n).length>0}}),contains:r(function(e){return e=e.replace(be,we),function(t){return(t.textContent||t.innerText||C(t)).indexOf(e)>-1}}),lang:r(function(e){return de.test(e||"")||t.error("unsupported lang: "+e),e=e.replace(be,we).toLowerCase(),function(t){var n;do if(n=_?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===q},focus:function(e){return e===H.activeElement&&(!H.hasFocus||H.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!T.pseudos.empty(e)},header:function(e){return ge.test(e.nodeName)},input:function(e){return he.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:l(function(){return[0]}),last:l(function(e,t){return[t-1]}),eq:l(function(e,t,n){return[n<0?n+t:n]}),even:l(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:l(function(e,t,n){for(var r=n<0?n+t:n;++r2&&"ID"===(a=o[0]).type&&w.getById&&9===t.nodeType&&_&&T.relative[o[1].type]){if(t=(T.find.ID(a.matches[0].replace(be,we),t)||[])[0],!t)return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}for(i=pe.needsContext.test(e)?0:o.length;i--&&(a=o[i],!T.relative[s=a.type]);)if((u=T.find[s])&&(r=u(a.matches[0].replace(be,we),ve.test(o[0].type)&&c(t.parentNode)||t))){if(o.splice(i,1),e=r.length&&d(o),!e)return Q.apply(n,r),n;break}}return(l||k(e,f))(r,t,!_,n,!t||ve.test(e)&&c(t.parentNode)||t),n},w.sortStable=P.split("").sort(U).join("")===P,w.detectDuplicates=!!j,L(),w.sortDetached=i(function(e){return 1&e.compareDocumentPosition(H.createElement("div"))}),i(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||o("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),w.attributes&&i(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||o("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),i(function(e){return null==e.getAttribute("disabled")})||o(te,function(e,t,n){var r;if(!n)return e[t]===!0?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),t}(e);pe.find=ve,pe.expr=ve.selectors,pe.expr[":"]=pe.expr.pseudos,pe.uniqueSort=pe.unique=ve.uniqueSort,pe.text=ve.getText,pe.isXMLDoc=ve.isXML,pe.contains=ve.contains;var xe=function(e,t,n){for(var r=[],i=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(i&&pe(e).is(n))break;r.push(e)}return r},be=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},we=pe.expr.match.needsContext,Te=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,Ce=/^.[^:#\[\.,]*$/;pe.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?pe.find.matchesSelector(r,e)?[r]:[]:pe.find.matches(e,pe.grep(t,function(e){return 1===e.nodeType}))},pe.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(pe(e).filter(function(){for(t=0;t1?pe.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},filter:function(e){return this.pushStack(r(this,e||[],!1))},not:function(e){return this.pushStack(r(this,e||[],!0))},is:function(e){return!!r(this,"string"==typeof e&&we.test(e)?pe(e):e||[],!1).length}});var Ee,Ne=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,ke=pe.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||Ee,"string"==typeof e){if(r="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:Ne.exec(e),!r||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof pe?t[0]:t,pe.merge(this,pe.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:re,!0)),Te.test(r[1])&&pe.isPlainObject(t))for(r in t)pe.isFunction(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}if(i=re.getElementById(r[2]),i&&i.parentNode){if(i.id!==r[2])return Ee.find(e);this.length=1,this[0]=i}return this.context=re,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):pe.isFunction(e)?"undefined"!=typeof n.ready?n.ready(e):e(pe):(void 0!==e.selector&&(this.selector=e.selector,this.context=e.context),pe.makeArray(e,this))};ke.prototype=pe.fn,Ee=pe(re);var Se=/^(?:parents|prev(?:Until|All))/,Ae={children:!0,contents:!0,next:!0,prev:!0};pe.fn.extend({has:function(e){var t,n=pe(e,this),r=n.length;return this.filter(function(){for(t=0;t-1:1===n.nodeType&&pe.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?pe.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?pe.inArray(this[0],pe(e)):pe.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(pe.uniqueSort(pe.merge(this.get(),pe(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),pe.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return xe(e,"parentNode")},parentsUntil:function(e,t,n){return xe(e,"parentNode",n)},next:function(e){return i(e,"nextSibling")},prev:function(e){return i(e,"previousSibling")},nextAll:function(e){return xe(e,"nextSibling")},prevAll:function(e){return xe(e,"previousSibling")},nextUntil:function(e,t,n){return xe(e,"nextSibling",n)},prevUntil:function(e,t,n){return xe(e,"previousSibling",n)},siblings:function(e){return be((e.parentNode||{}).firstChild,e)},children:function(e){return be(e.firstChild)},contents:function(e){return pe.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:pe.merge([],e.childNodes)}},function(e,t){pe.fn[e]=function(n,r){var i=pe.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=pe.filter(r,i)),this.length>1&&(Ae[e]||(i=pe.uniqueSort(i)),Se.test(e)&&(i=i.reverse())),this.pushStack(i)}});var De=/\S+/g;pe.Callbacks=function(e){e="string"==typeof e?o(e):pe.extend({},e);var t,n,r,i,a=[],s=[],u=-1,l=function(){for(i=e.once,r=t=!0;s.length;u=-1)for(n=s.shift();++u-1;)a.splice(n,1),n<=u&&u--}),this},has:function(e){return e?pe.inArray(e,a)>-1:a.length>0},empty:function(){return a&&(a=[]),this},disable:function(){return i=s=[],a=n="",this},disabled:function(){return!a},lock:function(){return i=!0,n||c.disable(),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=n||[],n=[e,n.slice?n.slice():n],s.push(n),t||l()),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!r}};return c},pe.extend({Deferred:function(e){var t=[["resolve","done",pe.Callbacks("once memory"),"resolved"],["reject","fail",pe.Callbacks("once memory"),"rejected"],["notify","progress",pe.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return pe.Deferred(function(n){pe.each(t,function(t,o){var a=pe.isFunction(e[t])&&e[t];i[o[1]](function(){var e=a&&a.apply(this,arguments);e&&pe.isFunction(e.promise)?e.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[o[0]+"With"](this===r?n.promise():this,a?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?pe.extend(e,r):r}},i={};return r.pipe=r.then,pe.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t,n,r,i=0,o=ie.call(arguments),a=o.length,s=1!==a||e&&pe.isFunction(e.promise)?a:0,u=1===s?e:pe.Deferred(),l=function(e,n,r){return function(i){n[e]=this,r[e]=arguments.length>1?ie.call(arguments):i,r===t?u.notifyWith(n,r):--s||u.resolveWith(n,r)}};if(a>1)for(t=new Array(a),n=new Array(a),r=new Array(a);i0||(je.resolveWith(re,[pe]),pe.fn.triggerHandler&&(pe(re).triggerHandler("ready"),pe(re).off("ready"))))}}),pe.ready.promise=function(t){if(!je)if(je=pe.Deferred(),"complete"===re.readyState||"loading"!==re.readyState&&!re.documentElement.doScroll)e.setTimeout(pe.ready);else if(re.addEventListener)re.addEventListener("DOMContentLoaded",s),e.addEventListener("load",s);else{re.attachEvent("onreadystatechange",s),e.attachEvent("onload",s);var n=!1;try{n=null==e.frameElement&&re.documentElement}catch(r){}n&&n.doScroll&&!function i(){if(!pe.isReady){try{n.doScroll("left")}catch(t){return e.setTimeout(i,50)}a(),pe.ready()}}()}return je.promise(t)},pe.ready.promise();var Le;for(Le in pe(fe))break;fe.ownFirst="0"===Le,fe.inlineBlockNeedsLayout=!1,pe(function(){var e,t,n,r;n=re.getElementsByTagName("body")[0],n&&n.style&&(t=re.createElement("div"),r=re.createElement("div"),r.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",n.appendChild(r).appendChild(t),"undefined"!=typeof t.style.zoom&&(t.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",fe.inlineBlockNeedsLayout=e=3===t.offsetWidth,e&&(n.style.zoom=1)),n.removeChild(r))}),function(){var e=re.createElement("div");fe.deleteExpando=!0;try{delete e.test}catch(t){fe.deleteExpando=!1}e=null}();var He=function(e){var t=pe.noData[(e.nodeName+" ").toLowerCase()],n=+e.nodeType||1;return(1===n||9===n)&&(!t||t!==!0&&e.getAttribute("classid")===t)},qe=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,_e=/([A-Z])/g;pe.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return e=e.nodeType?pe.cache[e[pe.expando]]:e[pe.expando],!!e&&!l(e)},data:function(e,t,n){return c(e,t,n)},removeData:function(e,t){return f(e,t)},_data:function(e,t,n){return c(e,t,n,!0)},_removeData:function(e,t){return f(e,t,!0)}}),pe.fn.extend({data:function(e,t){var n,r,i,o=this[0],a=o&&o.attributes;if(void 0===e){if(this.length&&(i=pe.data(o),1===o.nodeType&&!pe._data(o,"parsedAttrs"))){for(n=a.length;n--;)a[n]&&(r=a[n].name,0===r.indexOf("data-")&&(r=pe.camelCase(r.slice(5)),u(o,r,i[r])));pe._data(o,"parsedAttrs",!0)}return i}return"object"==typeof e?this.each(function(){pe.data(this,e)}):arguments.length>1?this.each(function(){pe.data(this,e,t)}):o?u(o,e,pe.data(o,e)):void 0},removeData:function(e){return this.each(function(){pe.removeData(this,e)})}}),pe.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=pe._data(e,t),n&&(!r||pe.isArray(n)?r=pe._data(e,t,pe.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=pe.queue(e,t),r=n.length,i=n.shift(),o=pe._queueHooks(e,t),a=function(){pe.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return pe._data(e,n)||pe._data(e,n,{empty:pe.Callbacks("once memory").add(function(){pe._removeData(e,t+"queue"),pe._removeData(e,n)})})}}),pe.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.lengtha",fe.leadingWhitespace=3===e.firstChild.nodeType,fe.tbody=!e.getElementsByTagName("tbody").length,fe.htmlSerialize=!!e.getElementsByTagName("link").length,fe.html5Clone="<:nav>"!==re.createElement("nav").cloneNode(!0).outerHTML,n.type="checkbox",n.checked=!0,t.appendChild(n),fe.appendChecked=n.checked,e.innerHTML="x",fe.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue,t.appendChild(e),n=re.createElement("input"),n.setAttribute("type","radio"),n.setAttribute("checked","checked"),n.setAttribute("name","t"),e.appendChild(n),fe.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,fe.noCloneEvent=!!e.addEventListener,e[pe.expando]=1,fe.attributes=!e.getAttribute(pe.expando)}();var Xe={option:[1,"",""],legend:[1,"",""],area:[1,"",""],param:[1,"",""],thead:[1,"",""],tr:[2,"",""],col:[2,"",""],td:[3,"",""],_default:fe.htmlSerialize?[0,"",""]:[1,"X",""]};Xe.optgroup=Xe.option,Xe.tbody=Xe.tfoot=Xe.colgroup=Xe.caption=Xe.thead,Xe.th=Xe.td;var Ue=/<|?\w+;/,Ve=/-1&&(h=p.split("."),p=h.shift(),h.sort()),a=p.indexOf(":")<0&&"on"+p,t=t[pe.expando]?t:new pe.Event(p,"object"==typeof t&&t),t.isTrigger=i?2:3,t.namespace=h.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=r),n=null==n?[t]:pe.makeArray(n,[t]),l=pe.event.special[p]||{},i||!l.trigger||l.trigger.apply(r,n)!==!1)){if(!i&&!l.noBubble&&!pe.isWindow(r)){for(u=l.delegateType||p,Ke.test(u+p)||(s=s.parentNode);s;s=s.parentNode)d.push(s),c=s;c===(r.ownerDocument||re)&&d.push(c.defaultView||c.parentWindow||e)}for(f=0;(s=d[f++])&&!t.isPropagationStopped();)t.type=f>1?u:l.bindType||p,o=(pe._data(s,"events")||{})[t.type]&&pe._data(s,"handle"),o&&o.apply(s,n),o=a&&s[a],o&&o.apply&&He(s)&&(t.result=o.apply(s,n),t.result===!1&&t.preventDefault());if(t.type=p,!i&&!t.isDefaultPrevented()&&(!l._default||l._default.apply(d.pop(),n)===!1)&&He(r)&&a&&r[p]&&!pe.isWindow(r)){c=r[a],c&&(r[a]=null),pe.event.triggered=p;try{r[p]()}catch(g){}pe.event.triggered=void 0,c&&(r[a]=c)}return t.result}},dispatch:function(e){e=pe.event.fix(e);var t,n,r,i,o,a=[],s=ie.call(arguments),u=(pe._data(this,"events")||{})[e.type]||[],l=pe.event.special[e.type]||{};if(s[0]=e,e.delegateTarget=this,!l.preDispatch||l.preDispatch.call(this,e)!==!1){for(a=pe.event.handlers.call(this,e,u),t=0;(i=a[t++])&&!e.isPropagationStopped();)for(e.currentTarget=i.elem,n=0;(o=i.handlers[n++])&&!e.isImmediatePropagationStopped();)e.rnamespace&&!e.rnamespace.test(o.namespace)||(e.handleObj=o,e.data=o.data,r=((pe.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s),void 0!==r&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()));return l.postDispatch&&l.postDispatch.call(this,e),e.result}},handlers:function(e,t){var n,r,i,o,a=[],s=t.delegateCount,u=e.target;if(s&&u.nodeType&&("click"!==e.type||isNaN(e.button)||e.button<1))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||"click"!==e.type)){for(r=[],n=0;n-1:pe.find(i,this,null,[u]).length),r[i]&&r.push(o);r.length&&a.push({elem:u,handlers:r})}return s]","i"),tt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,nt=/
"+l.time[e]+"