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 @@ + + + + + + + + 视频管理平台 + + + +
+
+ + + + +
+ +
+
+ + +
+
+ +
+ +
内容主体区域。记得修改 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=['"}(),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 Time
Please re-select",invalidDate:"Invalid date",formatError:["The date format error
Must 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.length
a",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="",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=/\s*$/g,at=p(re),st=at.appendChild(re.createElement("div"));pe.extend({htmlPrefilter:function(e){return e.replace(tt,"<$1>")},clone:function(e,t,n){var r,i,o,a,s,u=pe.contains(e.ownerDocument,e);if(fe.html5Clone||pe.isXMLDoc(e)||!et.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(st.innerHTML=e.outerHTML,st.removeChild(o=st.firstChild)),!(fe.noCloneEvent&&fe.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||pe.isXMLDoc(e)))for(r=h(o),s=h(e),a=0;null!=(i=s[a]);++a)r[a]&&k(i,r[a]);if(t)if(n)for(s=s||h(e),r=r||h(o),a=0;null!=(i=s[a]);a++)N(i,r[a]);else N(e,o);return r=h(o,"script"),r.length>0&&g(r,!u&&h(e,"script")),r=s=i=null,o},cleanData:function(e,t){for(var n,r,i,o,a=0,s=pe.expando,u=pe.cache,l=fe.attributes,c=pe.event.special;null!=(n=e[a]);a++)if((t||He(n))&&(i=n[s],o=i&&u[i])){if(o.events)for(r in o.events)c[r]?pe.event.remove(n,r):pe.removeEvent(n,r,o.handle);u[i]&&(delete u[i],l||"undefined"==typeof n.removeAttribute?n[s]=void 0:n.removeAttribute(s),ne.push(i))}}}),pe.fn.extend({domManip:S,detach:function(e){return A(this,e,!0)},remove:function(e){return A(this,e)},text:function(e){return Pe(this,function(e){return void 0===e?pe.text(this):this.empty().append((this[0]&&this[0].ownerDocument||re).createTextNode(e))},null,e,arguments.length)},append:function(){return S(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=T(this,e);t.appendChild(e)}})},prepend:function(){return S(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=T(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return S(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return S(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++){for(1===e.nodeType&&pe.cleanData(h(e,!1));e.firstChild;)e.removeChild(e.firstChild);e.options&&pe.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return pe.clone(this,e,t)})},html:function(e){return Pe(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e)return 1===t.nodeType?t.innerHTML.replace(Ze,""):void 0;if("string"==typeof e&&!nt.test(e)&&(fe.htmlSerialize||!et.test(e))&&(fe.leadingWhitespace||!$e.test(e))&&!Xe[(We.exec(e)||["",""])[1].toLowerCase()]){e=pe.htmlPrefilter(e);try{for(;nt",l.childNodes[0].style.borderCollapse="separate",t=l.getElementsByTagName("td"),t[0].style.cssText="margin:0;border:0;padding:0;display:none",o=0===t[0].offsetHeight,o&&(t[0].style.display="",t[1].style.display="none",o=0===t[0].offsetHeight)),f.removeChild(u)}var n,r,i,o,a,s,u=re.createElement("div"),l=re.createElement("div");l.style&&(l.style.cssText="float:left;opacity:.5",fe.opacity="0.5"===l.style.opacity,fe.cssFloat=!!l.style.cssFloat,l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",fe.clearCloneStyle="content-box"===l.style.backgroundClip,u=re.createElement("div"),u.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",l.innerHTML="",u.appendChild(l),fe.boxSizing=""===l.style.boxSizing||""===l.style.MozBoxSizing||""===l.style.WebkitBoxSizing,pe.extend(fe,{reliableHiddenOffsets:function(){return null==n&&t(),o},boxSizingReliable:function(){return null==n&&t(),i},pixelMarginRight:function(){return null==n&&t(),r},pixelPosition:function(){return null==n&&t(),n},reliableMarginRight:function(){return null==n&&t(),a},reliableMarginLeft:function(){return null==n&&t(),s}}))}();var ht,gt,mt=/^(top|right|bottom|left)$/;e.getComputedStyle?(ht=function(t){var n=t.ownerDocument.defaultView;return n&&n.opener||(n=e),n.getComputedStyle(t)},gt=function(e,t,n){var r,i,o,a,s=e.style;return n=n||ht(e),a=n?n.getPropertyValue(t)||n[t]:void 0,""!==a&&void 0!==a||pe.contains(e.ownerDocument,e)||(a=pe.style(e,t)),n&&!fe.pixelMarginRight()&&ft.test(a)&&ct.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o),void 0===a?a:a+""}):pt.currentStyle&&(ht=function(e){return e.currentStyle},gt=function(e,t,n){var r,i,o,a,s=e.style;return n=n||ht(e),a=n?n[t]:void 0,null==a&&s&&s[t]&&(a=s[t]),ft.test(a)&&!mt.test(t)&&(r=s.left,i=e.runtimeStyle,o=i&&i.left,o&&(i.left=e.currentStyle.left),s.left="fontSize"===t?"1em":a,a=s.pixelLeft+"px",s.left=r,o&&(i.left=o)),void 0===a?a:a+""||"auto"});var yt=/alpha\([^)]*\)/i,vt=/opacity\s*=\s*([^)]*)/i,xt=/^(none|table(?!-c[ea]).+)/,bt=new RegExp("^("+Fe+")(.*)$","i"),wt={position:"absolute",visibility:"hidden",display:"block"},Tt={letterSpacing:"0",fontWeight:"400"},Ct=["Webkit","O","Moz","ms"],Et=re.createElement("div").style;pe.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=gt(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":fe.cssFloat?"cssFloat":"styleFloat"},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=pe.camelCase(t),u=e.style;if(t=pe.cssProps[s]||(pe.cssProps[s]=H(s)||s),a=pe.cssHooks[t]||pe.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:u[t];if(o=typeof n,"string"===o&&(i=Me.exec(n))&&i[1]&&(n=d(e,t,i),o="number"),null!=n&&n===n&&("number"===o&&(n+=i&&i[3]||(pe.cssNumber[s]?"":"px")),fe.clearCloneStyle||""!==n||0!==t.indexOf("background")||(u[t]="inherit"),!(a&&"set"in a&&void 0===(n=a.set(e,n,r)))))try{u[t]=n}catch(l){}}},css:function(e,t,n,r){var i,o,a,s=pe.camelCase(t);return t=pe.cssProps[s]||(pe.cssProps[s]=H(s)||s),a=pe.cssHooks[t]||pe.cssHooks[s],a&&"get"in a&&(o=a.get(e,!0,n)),void 0===o&&(o=gt(e,t,r)),"normal"===o&&t in Tt&&(o=Tt[t]),""===n||n?(i=parseFloat(o),n===!0||isFinite(i)?i||0:o):o}}),pe.each(["height","width"],function(e,t){pe.cssHooks[t]={get:function(e,n,r){if(n)return xt.test(pe.css(e,"display"))&&0===e.offsetWidth?dt(e,wt,function(){return M(e,t,r)}):M(e,t,r)},set:function(e,n,r){var i=r&&ht(e);return _(e,n,r?F(e,t,r,fe.boxSizing&&"border-box"===pe.css(e,"boxSizing",!1,i),i):0)}}}),fe.opacity||(pe.cssHooks.opacity={get:function(e,t){return vt.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=pe.isNumeric(t)?"alpha(opacity="+100*t+")":"",o=r&&r.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===pe.trim(o.replace(yt,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||r&&!r.filter)||(n.filter=yt.test(o)?o.replace(yt,i):o+" "+i)}}),pe.cssHooks.marginRight=L(fe.reliableMarginRight,function(e,t){if(t)return dt(e,{display:"inline-block"},gt,[e,"marginRight"])}),pe.cssHooks.marginLeft=L(fe.reliableMarginLeft,function(e,t){if(t)return(parseFloat(gt(e,"marginLeft"))||(pe.contains(e.ownerDocument,e)?e.getBoundingClientRect().left-dt(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}):0))+"px"}),pe.each({margin:"",padding:"",border:"Width"},function(e,t){pe.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[e+Oe[r]+t]=o[r]||o[r-2]||o[0];return i}},ct.test(e)||(pe.cssHooks[e+t].set=_)}),pe.fn.extend({css:function(e,t){return Pe(this,function(e,t,n){var r,i,o={},a=0;if(pe.isArray(t)){for(r=ht(e),i=t.length;a1)},show:function(){return q(this,!0)},hide:function(){return q(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){Re(this)?pe(this).show():pe(this).hide()})}}),pe.Tween=O,O.prototype={constructor:O,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||pe.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(pe.cssNumber[n]?"":"px")},cur:function(){var e=O.propHooks[this.prop];return e&&e.get?e.get(this):O.propHooks._default.get(this)},run:function(e){var t,n=O.propHooks[this.prop];return this.options.duration?this.pos=t=pe.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):O.propHooks._default.set(this),this}},O.prototype.init.prototype=O.prototype,O.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=pe.css(e.elem,e.prop,""),t&&"auto"!==t?t:0)},set:function(e){pe.fx.step[e.prop]?pe.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[pe.cssProps[e.prop]]&&!pe.cssHooks[e.prop]?e.elem[e.prop]=e.now:pe.style(e.elem,e.prop,e.now+e.unit)}}},O.propHooks.scrollTop=O.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},pe.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},pe.fx=O.prototype.init,pe.fx.step={};var Nt,kt,St=/^(?:toggle|show|hide)$/,At=/queueHooks$/;pe.Animation=pe.extend($,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return d(n.elem,e,Me.exec(t),n),n}]},tweener:function(e,t){pe.isFunction(e)?(t=e,e=["*"]):e=e.match(De);for(var n,r=0,i=e.length;r
a",e=n.getElementsByTagName("a")[0],t.setAttribute("type","checkbox"),n.appendChild(t),e=n.getElementsByTagName("a")[0],e.style.cssText="top:1px",fe.getSetAttribute="t"!==n.className,fe.style=/top/.test(e.getAttribute("style")),fe.hrefNormalized="/a"===e.getAttribute("href"),fe.checkOn=!!t.value,fe.optSelected=i.selected,fe.enctype=!!re.createElement("form").enctype,r.disabled=!0,fe.optDisabled=!i.disabled,t=re.createElement("input"),t.setAttribute("value",""),fe.input=""===t.getAttribute("value"),t.value="t",t.setAttribute("type","radio"),fe.radioValue="t"===t.value}();var Dt=/\r/g,jt=/[\x20\t\r\n\f]+/g;pe.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=pe.isFunction(e),this.each(function(n){var i;1===this.nodeType&&(i=r?e.call(this,n,pe(this).val()):e,null==i?i="":"number"==typeof i?i+="":pe.isArray(i)&&(i=pe.map(i,function(e){return null==e?"":e+""})),t=pe.valHooks[this.type]||pe.valHooks[this.nodeName.toLowerCase()],t&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))});if(i)return t=pe.valHooks[i.type]||pe.valHooks[i.nodeName.toLowerCase()],t&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:(n=i.value,"string"==typeof n?n.replace(Dt,""):null==n?"":n)}}}),pe.extend({valHooks:{option:{get:function(e){var t=pe.find.attr(e,"value");return null!=t?t:pe.trim(pe.text(e)).replace(jt," ")}},select:{get:function(e){for(var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||i<0,a=o?null:[],s=o?i+1:r.length,u=i<0?s:o?i:0;u-1)try{r.selected=n=!0}catch(s){r.scrollHeight}else r.selected=!1;return n||(e.selectedIndex=-1),i}}}}),pe.each(["radio","checkbox"],function(){pe.valHooks[this]={set:function(e,t){if(pe.isArray(t))return e.checked=pe.inArray(pe(e).val(),t)>-1}},fe.checkOn||(pe.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Lt,Ht,qt=pe.expr.attrHandle,_t=/^(?:checked|selected)$/i,Ft=fe.getSetAttribute,Mt=fe.input;pe.fn.extend({attr:function(e,t){return Pe(this,pe.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){pe.removeAttr(this,e)})}}),pe.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?pe.prop(e,t,n):(1===o&&pe.isXMLDoc(e)||(t=t.toLowerCase(),i=pe.attrHooks[t]||(pe.expr.match.bool.test(t)?Ht:Lt)),void 0!==n?null===n?void pe.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:(r=pe.find.attr(e,t),null==r?void 0:r))},attrHooks:{type:{set:function(e,t){if(!fe.radioValue&&"radio"===t&&pe.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(De);if(o&&1===e.nodeType)for(;n=o[i++];)r=pe.propFix[n]||n,pe.expr.match.bool.test(n)?Mt&&Ft||!_t.test(n)?e[r]=!1:e[pe.camelCase("default-"+n)]=e[r]=!1:pe.attr(e,n,""),e.removeAttribute(Ft?n:r)}}),Ht={set:function(e,t,n){return t===!1?pe.removeAttr(e,n):Mt&&Ft||!_t.test(n)?e.setAttribute(!Ft&&pe.propFix[n]||n,n):e[pe.camelCase("default-"+n)]=e[n]=!0,n}},pe.each(pe.expr.match.bool.source.match(/\w+/g),function(e,t){var n=qt[t]||pe.find.attr;Mt&&Ft||!_t.test(t)?qt[t]=function(e,t,r){var i,o;return r||(o=qt[t],qt[t]=i,i=null!=n(e,t,r)?t.toLowerCase():null,qt[t]=o),i}:qt[t]=function(e,t,n){if(!n)return e[pe.camelCase("default-"+t)]?t.toLowerCase():null}}),Mt&&Ft||(pe.attrHooks.value={set:function(e,t,n){return pe.nodeName(e,"input")?void(e.defaultValue=t):Lt&&Lt.set(e,t,n)}}),Ft||(Lt={set:function(e,t,n){var r=e.getAttributeNode(n);if(r||e.setAttributeNode(r=e.ownerDocument.createAttribute(n)),r.value=t+="","value"===n||t===e.getAttribute(n))return t}},qt.id=qt.name=qt.coords=function(e,t,n){var r;if(!n)return(r=e.getAttributeNode(t))&&""!==r.value?r.value:null},pe.valHooks.button={get:function(e,t){var n=e.getAttributeNode(t);if(n&&n.specified)return n.value},set:Lt.set},pe.attrHooks.contenteditable={set:function(e,t,n){Lt.set(e,""!==t&&t,n)}},pe.each(["width","height"],function(e,t){pe.attrHooks[t]={set:function(e,n){if(""===n)return e.setAttribute(t,"auto"),n}}})),fe.style||(pe.attrHooks.style={get:function(e){return e.style.cssText||void 0},set:function(e,t){return e.style.cssText=t+""}});var Ot=/^(?:input|select|textarea|button|object)$/i,Rt=/^(?:a|area)$/i;pe.fn.extend({prop:function(e,t){return Pe(this,pe.prop,e,t,arguments.length>1)},removeProp:function(e){return e=pe.propFix[e]||e,this.each(function(){try{this[e]=void 0,delete this[e]}catch(t){}})}}),pe.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&pe.isXMLDoc(e)||(t=pe.propFix[t]||t,i=pe.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=pe.find.attr(e,"tabindex");return t?parseInt(t,10):Ot.test(e.nodeName)||Rt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),fe.hrefNormalized||pe.each(["href","src"],function(e,t){pe.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),fe.optSelected||(pe.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),pe.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){pe.propFix[this.toLowerCase()]=this}),fe.enctype||(pe.propFix.enctype="encoding");var Pt=/[\t\r\n\f]/g;pe.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(pe.isFunction(e))return this.each(function(t){pe(this).addClass(e.call(this,t,z(this)))});if("string"==typeof e&&e)for(t=e.match(De)||[];n=this[u++];)if(i=z(n),r=1===n.nodeType&&(" "+i+" ").replace(Pt," ")){for(a=0;o=t[a++];)r.indexOf(" "+o+" ")<0&&(r+=o+" ");s=pe.trim(r),i!==s&&pe.attr(n,"class",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(pe.isFunction(e))return this.each(function(t){pe(this).removeClass(e.call(this,t,z(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof e&&e)for(t=e.match(De)||[];n=this[u++];)if(i=z(n),r=1===n.nodeType&&(" "+i+" ").replace(Pt," ")){for(a=0;o=t[a++];)for(;r.indexOf(" "+o+" ")>-1;)r=r.replace(" "+o+" "," ");s=pe.trim(r),i!==s&&pe.attr(n,"class",s)}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):pe.isFunction(e)?this.each(function(n){pe(this).toggleClass(e.call(this,n,z(this),t),t)}):this.each(function(){var t,r,i,o;if("string"===n)for(r=0,i=pe(this),o=e.match(De)||[];t=o[r++];)i.hasClass(t)?i.removeClass(t):i.addClass(t);else void 0!==e&&"boolean"!==n||(t=z(this),t&&pe._data(this,"__className__",t),pe.attr(this,"class",t||e===!1?"":pe._data(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;for(t=" "+e+" ";n=this[r++];)if(1===n.nodeType&&(" "+z(n)+" ").replace(Pt," ").indexOf(t)>-1)return!0;return!1}}),pe.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){pe.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),pe.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}});var Bt=e.location,Wt=pe.now(),It=/\?/,$t=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;pe.parseJSON=function(t){if(e.JSON&&e.JSON.parse)return e.JSON.parse(t+"");var n,r=null,i=pe.trim(t+"");return i&&!pe.trim(i.replace($t,function(e,t,i,o){return n&&t&&(r=0),0===r?e:(n=i||t,r+=!o-!i,"")}))?Function("return "+i)():pe.error("Invalid JSON: "+t)},pe.parseXML=function(t){var n,r;if(!t||"string"!=typeof t)return null;try{e.DOMParser?(r=new e.DOMParser,n=r.parseFromString(t,"text/xml")):(n=new e.ActiveXObject("Microsoft.XMLDOM"),n.async="false",n.loadXML(t))}catch(i){n=void 0}return n&&n.documentElement&&!n.getElementsByTagName("parsererror").length||pe.error("Invalid XML: "+t),n};var zt=/#.*$/,Xt=/([?&])_=[^&]*/,Ut=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Vt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Yt=/^(?:GET|HEAD)$/,Jt=/^\/\//,Gt=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Kt={},Qt={},Zt="*/".concat("*"),en=Bt.href,tn=Gt.exec(en.toLowerCase())||[];pe.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:en,type:"GET",isLocal:Vt.test(tn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Zt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":pe.parseJSON,"text xml":pe.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?V(V(e,pe.ajaxSettings),t):V(pe.ajaxSettings,e)},ajaxPrefilter:X(Kt),ajaxTransport:X(Qt),ajax:function(t,n){function r(t,n,r,i){var o,f,v,x,w,C=n;2!==b&&(b=2,u&&e.clearTimeout(u),c=void 0,s=i||"",T.readyState=t>0?4:0,o=t>=200&&t<300||304===t,r&&(x=Y(d,T,r)),x=J(d,x,T,o),o?(d.ifModified&&(w=T.getResponseHeader("Last-Modified"),w&&(pe.lastModified[a]=w),w=T.getResponseHeader("etag"),w&&(pe.etag[a]=w)),204===t||"HEAD"===d.type?C="nocontent":304===t?C="notmodified":(C=x.state,f=x.data,v=x.error,o=!v)):(v=C,!t&&C||(C="error",t<0&&(t=0))),T.status=t,T.statusText=(n||C)+"",o?g.resolveWith(p,[f,C,T]):g.rejectWith(p,[T,C,v]),T.statusCode(y),y=void 0,l&&h.trigger(o?"ajaxSuccess":"ajaxError",[T,d,o?f:v]),m.fireWith(p,[T,C]),l&&(h.trigger("ajaxComplete",[T,d]),--pe.active||pe.event.trigger("ajaxStop")))}"object"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,a,s,u,l,c,f,d=pe.ajaxSetup({},n),p=d.context||d,h=d.context&&(p.nodeType||p.jquery)?pe(p):pe.event,g=pe.Deferred(),m=pe.Callbacks("once memory"),y=d.statusCode||{},v={},x={},b=0,w="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(2===b){if(!f)for(f={};t=Ut.exec(s);)f[t[1].toLowerCase()]=t[2];t=f[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===b?s:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return b||(e=x[n]=x[n]||e,v[e]=t),this},overrideMimeType:function(e){return b||(d.mimeType=e),this},statusCode:function(e){var t;if(e)if(b<2)for(t in e)y[t]=[y[t],e[t]];else T.always(e[T.status]);return this},abort:function(e){var t=e||w;return c&&c.abort(t),r(0,t),this}};if(g.promise(T).complete=m.add,T.success=T.done,T.error=T.fail,d.url=((t||d.url||en)+"").replace(zt,"").replace(Jt,tn[1]+"//"),d.type=n.method||n.type||d.method||d.type,d.dataTypes=pe.trim(d.dataType||"*").toLowerCase().match(De)||[""],null==d.crossDomain&&(i=Gt.exec(d.url.toLowerCase()),d.crossDomain=!(!i||i[1]===tn[1]&&i[2]===tn[2]&&(i[3]||("http:"===i[1]?"80":"443"))===(tn[3]||("http:"===tn[1]?"80":"443")))),d.data&&d.processData&&"string"!=typeof d.data&&(d.data=pe.param(d.data,d.traditional)),U(Kt,d,n,T),2===b)return T;l=pe.event&&d.global,l&&0===pe.active++&&pe.event.trigger("ajaxStart"),d.type=d.type.toUpperCase(),d.hasContent=!Yt.test(d.type),a=d.url,d.hasContent||(d.data&&(a=d.url+=(It.test(a)?"&":"?")+d.data,delete d.data),d.cache===!1&&(d.url=Xt.test(a)?a.replace(Xt,"$1_="+Wt++):a+(It.test(a)?"&":"?")+"_="+Wt++)),d.ifModified&&(pe.lastModified[a]&&T.setRequestHeader("If-Modified-Since",pe.lastModified[a]),pe.etag[a]&&T.setRequestHeader("If-None-Match",pe.etag[a])),(d.data&&d.hasContent&&d.contentType!==!1||n.contentType)&&T.setRequestHeader("Content-Type",d.contentType),T.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+("*"!==d.dataTypes[0]?", "+Zt+"; q=0.01":""):d.accepts["*"]);for(o in d.headers)T.setRequestHeader(o,d.headers[o]);if(d.beforeSend&&(d.beforeSend.call(p,T,d)===!1||2===b))return T.abort();w="abort";for(o in{success:1,error:1,complete:1})T[o](d[o]);if(c=U(Qt,d,n,T)){if(T.readyState=1,l&&h.trigger("ajaxSend",[T,d]),2===b)return T;d.async&&d.timeout>0&&(u=e.setTimeout(function(){T.abort("timeout")},d.timeout));try{b=1,c.send(v,r)}catch(C){if(!(b<2))throw C;r(-1,C)}}else r(-1,"No Transport");return T},getJSON:function(e,t,n){return pe.get(e,t,n,"json")},getScript:function(e,t){return pe.get(e,void 0,t,"script")}}),pe.each(["get","post"],function(e,t){pe[t]=function(e,n,r,i){return pe.isFunction(n)&&(i=i||r,r=n,n=void 0),pe.ajax(pe.extend({url:e,type:t,dataType:i,data:n,success:r},pe.isPlainObject(e)&&e))}}),pe._evalUrl=function(e){return pe.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},pe.fn.extend({wrapAll:function(e){if(pe.isFunction(e))return this.each(function(t){pe(this).wrapAll(e.call(this,t))});if(this[0]){var t=pe(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstChild&&1===e.firstChild.nodeType;)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return pe.isFunction(e)?this.each(function(t){pe(this).wrapInner(e.call(this,t))}):this.each(function(){var t=pe(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=pe.isFunction(e);return this.each(function(n){pe(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){pe.nodeName(this,"body")||pe(this).replaceWith(this.childNodes)}).end()}}),pe.expr.filters.hidden=function(e){return fe.reliableHiddenOffsets()?e.offsetWidth<=0&&e.offsetHeight<=0&&!e.getClientRects().length:K(e)},pe.expr.filters.visible=function(e){return!pe.expr.filters.hidden(e)};var nn=/%20/g,rn=/\[\]$/,on=/\r?\n/g,an=/^(?:submit|button|image|reset|file)$/i,sn=/^(?:input|select|textarea|keygen)/i;pe.param=function(e,t){var n,r=[],i=function(e,t){t=pe.isFunction(t)?t():null==t?"":t,r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(void 0===t&&(t=pe.ajaxSettings&&pe.ajaxSettings.traditional),pe.isArray(e)||e.jquery&&!pe.isPlainObject(e))pe.each(e,function(){i(this.name,this.value)});else for(n in e)Q(n,e[n],t,i);return r.join("&").replace(nn,"+")},pe.fn.extend({serialize:function(){return pe.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=pe.prop(this,"elements");return e?pe.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!pe(this).is(":disabled")&&sn.test(this.nodeName)&&!an.test(e)&&(this.checked||!Be.test(e))}).map(function(e,t){var n=pe(this).val();return null==n?null:pe.isArray(n)?pe.map(n,function(e){return{name:t.name,value:e.replace(on,"\r\n")}}):{name:t.name,value:n.replace(on,"\r\n")}}).get()}}),pe.ajaxSettings.xhr=void 0!==e.ActiveXObject?function(){return this.isLocal?ee():re.documentMode>8?Z():/^(get|post|head|put|delete|options)$/i.test(this.type)&&Z()||ee()}:Z;var un=0,ln={},cn=pe.ajaxSettings.xhr();e.attachEvent&&e.attachEvent("onunload",function(){for(var e in ln)ln[e](void 0,!0)}),fe.cors=!!cn&&"withCredentials"in cn,cn=fe.ajax=!!cn,cn&&pe.ajaxTransport(function(t){if(!t.crossDomain||fe.cors){var n;return{send:function(r,i){var o,a=t.xhr(),s=++un;if(a.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(o in t.xhrFields)a[o]=t.xhrFields[o];t.mimeType&&a.overrideMimeType&&a.overrideMimeType(t.mimeType),t.crossDomain||r["X-Requested-With"]||(r["X-Requested-With"]="XMLHttpRequest");for(o in r)void 0!==r[o]&&a.setRequestHeader(o,r[o]+"");a.send(t.hasContent&&t.data||null),n=function(e,r){var o,u,l;if(n&&(r||4===a.readyState))if(delete ln[s],n=void 0,a.onreadystatechange=pe.noop,r)4!==a.readyState&&a.abort();else{l={},o=a.status,"string"==typeof a.responseText&&(l.text=a.responseText);try{u=a.statusText}catch(c){u=""}o||!t.isLocal||t.crossDomain?1223===o&&(o=204):o=l.text?200:404}l&&i(o,u,l,a.getAllResponseHeaders())},t.async?4===a.readyState?e.setTimeout(n):a.onreadystatechange=ln[s]=n:n()},abort:function(){n&&n(void 0,!0)}}}}),pe.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return pe.globalEval(e),e}}}),pe.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),pe.ajaxTransport("script",function(e){if(e.crossDomain){var t,n=re.head||pe("head")[0]||re.documentElement;return{send:function(r,i){t=re.createElement("script"),t.async=!0,e.scriptCharset&&(t.charset=e.scriptCharset),t.src=e.url,t.onload=t.onreadystatechange=function(e,n){(n||!t.readyState||/loaded|complete/.test(t.readyState))&&(t.onload=t.onreadystatechange=null,t.parentNode&&t.parentNode.removeChild(t),t=null,n||i(200,"success"))},n.insertBefore(t,n.firstChild)},abort:function(){t&&t.onload(void 0,!0)}}}});var fn=[],dn=/(=)\?(?=&|$)|\?\?/;pe.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=fn.pop()||pe.expando+"_"+Wt++;return this[e]=!0,e}}),pe.ajaxPrefilter("json jsonp",function(t,n,r){var i,o,a,s=t.jsonp!==!1&&(dn.test(t.url)?"url":"string"==typeof t.data&&0===(t.contentType||"").indexOf("application/x-www-form-urlencoded")&&dn.test(t.data)&&"data");if(s||"jsonp"===t.dataTypes[0])return i=t.jsonpCallback=pe.isFunction(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,s?t[s]=t[s].replace(dn,"$1"+i):t.jsonp!==!1&&(t.url+=(It.test(t.url)?"&":"?")+t.jsonp+"="+i),t.converters["script json"]=function(){return a||pe.error(i+" was not called"),a[0]},t.dataTypes[0]="json",o=e[i],e[i]=function(){a=arguments},r.always(function(){void 0===o?pe(e).removeProp(i):e[i]=o,t[i]&&(t.jsonpCallback=n.jsonpCallback,fn.push(i)),a&&pe.isFunction(o)&&o(a[0]),a=o=void 0}),"script"}),pe.parseHTML=function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||re;var r=Te.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=y([e],t,i),i&&i.length&&pe(i).remove(),pe.merge([],r.childNodes))};var pn=pe.fn.load;return pe.fn.load=function(e,t,n){if("string"!=typeof e&&pn)return pn.apply(this,arguments);var r,i,o,a=this,s=e.indexOf(" ");return s>-1&&(r=pe.trim(e.slice(s,e.length)),e=e.slice(0,s)),pe.isFunction(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),a.length>0&&pe.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?pe("
").append(pe.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},pe.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){pe.fn[t]=function(e){return this.on(t,e)}}),pe.expr.filters.animated=function(e){return pe.grep(pe.timers,function(t){return e===t.elem}).length},pe.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l,c=pe.css(e,"position"),f=pe(e),d={};"static"===c&&(e.style.position="relative"),s=f.offset(),o=pe.css(e,"top"),u=pe.css(e,"left"),l=("absolute"===c||"fixed"===c)&&pe.inArray("auto",[o,u])>-1,l?(r=f.position(),a=r.top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),pe.isFunction(t)&&(t=t.call(e,n,pe.extend({},s))),null!=t.top&&(d.top=t.top-s.top+a),null!=t.left&&(d.left=t.left-s.left+i),"using"in t?t.using.call(e,d):f.css(d)}},pe.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each(function(t){pe.offset.setOffset(this,e,t)});var t,n,r={top:0,left:0},i=this[0],o=i&&i.ownerDocument;if(o)return t=o.documentElement,pe.contains(t,i)?("undefined"!=typeof i.getBoundingClientRect&&(r=i.getBoundingClientRect()),n=te(o),{top:r.top+(n.pageYOffset||t.scrollTop)-(t.clientTop||0),left:r.left+(n.pageXOffset||t.scrollLeft)-(t.clientLeft||0)}):r},position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===pe.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),pe.nodeName(e[0],"html")||(n=e.offset()),n.top+=pe.css(e[0],"borderTopWidth",!0),n.left+=pe.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-pe.css(r,"marginTop",!0),left:t.left-n.left-pe.css(r,"marginLeft",!0)}}},offsetParent:function(){ +return this.map(function(){for(var e=this.offsetParent;e&&!pe.nodeName(e,"html")&&"static"===pe.css(e,"position");)e=e.offsetParent;return e||pt})}}),pe.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,t){var n=/Y/.test(t);pe.fn[e]=function(r){return Pe(this,function(e,r,i){var o=te(e);return void 0===i?o?t in o?o[t]:o.document.documentElement[r]:e[r]:void(o?o.scrollTo(n?pe(o).scrollLeft():i,n?i:pe(o).scrollTop()):e[r]=i)},e,r,arguments.length,null)}}),pe.each(["top","left"],function(e,t){pe.cssHooks[t]=L(fe.pixelPosition,function(e,n){if(n)return n=gt(e,t),ft.test(n)?pe(e).position()[t]+"px":n})}),pe.each({Height:"height",Width:"width"},function(e,t){pe.each({padding:"inner"+e,content:t,"":"outer"+e},function(n,r){pe.fn[r]=function(r,i){var o=arguments.length&&(n||"boolean"!=typeof r),a=n||(r===!0||i===!0?"margin":"border");return Pe(this,function(t,n,r){var i;return pe.isWindow(t)?t.document.documentElement["client"+e]:9===t.nodeType?(i=t.documentElement,Math.max(t.body["scroll"+e],i["scroll"+e],t.body["offset"+e],i["offset"+e],i["client"+e])):void 0===r?pe.css(t,n,a):pe.style(t,n,r,a)},t,o?r:void 0,o,null)}})}),pe.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}}),pe.fn.size=function(){return this.length},pe.fn.andSelf=pe.fn.addBack,layui.define(function(e){layui.$=pe,e("jquery",pe)}),pe});!function(e,t){"use strict";var i,n,a=e.layui&&layui.define,o={getPath:function(){var t=document.currentScript?document.currentScript.src:function(){for(var e,t=document.scripts,i=t.length-1,n=i;n>0;n--)if("interactive"===t[n].readyState){e=t[n].src;break}return e||t[i].src}(),i=e.LAYUI_GLOBAL||{};return i.layer_dir||t.substring(0,t.lastIndexOf("/")+1)}(),config:{},end:{},minIndex:0,minLeft:[],btn:["确定","取消"],type:["dialog","page","iframe","loading","tips"],getStyle:function(t,i){var n=t.currentStyle?t.currentStyle:e.getComputedStyle(t,null);return n[n.getPropertyValue?"getPropertyValue":"getAttribute"](i)},link:function(t,i,n){if(r.path){var a=document.getElementsByTagName("head")[0],s=document.createElement("link");"string"==typeof i&&(n=i);var l=(n||t).replace(/\.|\//g,""),f="layuicss-"+l,c="creating",u=0;s.rel="stylesheet",s.href=r.path+t,s.id=f,document.getElementById(f)||a.appendChild(s),"function"==typeof i&&!function d(t){var n=100,a=document.getElementById(f);return++u>1e4/n?e.console&&console.error(l+".css: Invalid"):void(1989===parseInt(o.getStyle(a,"width"))?(t===c&&a.removeAttribute("lay-status"),a.getAttribute("lay-status")===c?setTimeout(d,n):i()):(a.setAttribute("lay-status",c),setTimeout(function(){d(c)},n)))}()}}},r={v:"3.5.1",ie:function(){var t=navigator.userAgent.toLowerCase();return!!(e.ActiveXObject||"ActiveXObject"in e)&&((t.match(/msie\s(\d+)/)||[])[1]||"11")}(),index:e.layer&&e.layer.v?1e5:0,path:o.getPath,config:function(e,t){return e=e||{},r.cache=o.config=i.extend({},o.config,e),r.path=o.config.path||r.path,"string"==typeof e.extend&&(e.extend=[e.extend]),o.config.path&&r.ready(),e.extend?(a?layui.addcss("modules/layer/"+e.extend):o.link("theme/"+e.extend),this):this},ready:function(e){var t="layer",i="",n=(a?"modules/layer/":"theme/")+"default/layer.css?v="+r.v+i;return a?layui.addcss(n,e,t):o.link(n,e,t),this},alert:function(e,t,n){var a="function"==typeof t;return a&&(n=t),r.open(i.extend({content:e,yes:n},a?{}:t))},confirm:function(e,t,n,a){var s="function"==typeof t;return s&&(a=n,n=t),r.open(i.extend({content:e,btn:o.btn,yes:n,btn2:a},s?{}:t))},msg:function(e,n,a){var s="function"==typeof n,f=o.config.skin,c=(f?f+" "+f+"-msg":"")||"layui-layer-msg",u=l.anim.length-1;return s&&(a=n),r.open(i.extend({content:e,time:3e3,shade:!1,skin:c,title:!1,closeBtn:!1,btn:!1,resize:!1,end:a},s&&!o.config.skin?{skin:c+" layui-layer-hui",anim:u}:function(){return n=n||{},(n.icon===-1||n.icon===t&&!o.config.skin)&&(n.skin=c+" "+(n.skin||"layui-layer-hui")),n}()))},load:function(e,t){return r.open(i.extend({type:3,icon:e||0,resize:!1,shade:.01},t))},tips:function(e,t,n){return r.open(i.extend({type:4,content:[e,t],closeBtn:!1,time:3e3,shade:!1,resize:!1,fixed:!1,maxWidth:260},n))}},s=function(e){var t=this,a=function(){t.creat()};t.index=++r.index,t.config.maxWidth=i(n).width()-30,t.config=i.extend({},t.config,o.config,e),document.body?a():setTimeout(function(){a()},30)};s.pt=s.prototype;var l=["layui-layer",".layui-layer-title",".layui-layer-main",".layui-layer-dialog","layui-layer-iframe","layui-layer-content","layui-layer-btn","layui-layer-close"];l.anim=["layer-anim-00","layer-anim-01","layer-anim-02","layer-anim-03","layer-anim-04","layer-anim-05","layer-anim-06"],l.SHADE="layui-layer-shade",l.MOVE="layui-layer-move",s.pt.config={type:0,shade:.3,fixed:!0,move:l[1],title:"信息",offset:"auto",area:"auto",closeBtn:1,time:0,zIndex:19891014,maxWidth:360,anim:0,isOutAnim:!0,minStack:!0,icon:-1,moveType:1,resize:!0,scrollbar:!0,tips:2},s.pt.vessel=function(e,t){var n=this,a=n.index,r=n.config,s=r.zIndex+a,f="object"==typeof r.title,c=r.maxmin&&(1===r.type||2===r.type),u=r.title?'
'+(f?r.title[0]:r.title)+"
":"";return r.zIndex=s,t([r.shade?'
':"",'
'+(e&&2!=r.type?"":u)+'
'+(0==r.type&&r.icon!==-1?'':"")+(1==r.type&&e?"":r.content||"")+'
'+function(){var e=c?'':"";return r.closeBtn&&(e+=''),e}()+""+(r.btn?function(){var e="";"string"==typeof r.btn&&(r.btn=[r.btn]);for(var t=0,i=r.btn.length;t'+r.btn[t]+"";return'
'+e+"
"}():"")+(r.resize?'':"")+"
"],u,i('
')),n},s.pt.creat=function(){var e=this,t=e.config,a=e.index,s=t.content,f="object"==typeof s,c=i("body");if(!t.id||!i("#"+t.id)[0]){switch("string"==typeof t.area&&(t.area="auto"===t.area?["",""]:[t.area,""]),t.shift&&(t.anim=t.shift),6==r.ie&&(t.fixed=!1),t.type){case 0:t.btn="btn"in t?t.btn:o.btn[0],r.closeAll("dialog");break;case 2:var s=t.content=f?t.content:[t.content||"","auto"];t.content='';break;case 3:delete t.title,delete t.closeBtn,t.icon===-1&&0===t.icon,r.closeAll("loading");break;case 4:f||(t.content=[t.content,"body"]),t.follow=t.content[1],t.content=t.content[0]+'',delete t.title,t.tips="object"==typeof t.tips?t.tips:[t.tips,!0],t.tipsMore||r.closeAll("tips")}if(e.vessel(f,function(n,r,u){c.append(n[0]),f?function(){2==t.type||4==t.type?function(){i("body").append(n[1])}():function(){s.parents("."+l[0])[0]||(s.data("display",s.css("display")).show().addClass("layui-layer-wrap").wrap(n[1]),i("#"+l[0]+a).find("."+l[5]).before(r))}()}():c.append(n[1]),i("#"+l.MOVE)[0]||c.append(o.moveElem=u),e.layero=i("#"+l[0]+a),e.shadeo=i("#"+l.SHADE+a),t.scrollbar||l.html.css("overflow","hidden").attr("layer-full",a)}).auto(a),e.shadeo.css({"background-color":t.shade[1]||"#000",opacity:t.shade[0]||t.shade}),2==t.type&&6==r.ie&&e.layero.find("iframe").attr("src",s[0]),4==t.type?e.tips():function(){e.offset(),parseInt(o.getStyle(document.getElementById(l.MOVE),"z-index"))||function(){e.layero.css("visibility","hidden"),r.ready(function(){e.offset(),e.layero.css("visibility","visible")})}()}(),t.fixed&&n.on("resize",function(){e.offset(),(/^\d+%$/.test(t.area[0])||/^\d+%$/.test(t.area[1]))&&e.auto(a),4==t.type&&e.tips()}),t.time<=0||setTimeout(function(){r.close(e.index)},t.time),e.move().callback(),l.anim[t.anim]){var u="layer-anim "+l.anim[t.anim];e.layero.addClass(u).one("webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend",function(){i(this).removeClass(u)})}t.isOutAnim&&e.layero.data("isOutAnim",!0)}},s.pt.auto=function(e){var t=this,a=t.config,o=i("#"+l[0]+e);""===a.area[0]&&a.maxWidth>0&&(r.ie&&r.ie<8&&a.btn&&o.width(o.innerWidth()),o.outerWidth()>a.maxWidth&&o.width(a.maxWidth));var s=[o.innerWidth(),o.innerHeight()],f=o.find(l[1]).outerHeight()||0,c=o.find("."+l[6]).outerHeight()||0,u=function(e){e=o.find(e),e.height(s[1]-f-c-2*(0|parseFloat(e.css("padding-top"))))};switch(a.type){case 2:u("iframe");break;default:""===a.area[1]?a.maxHeight>0&&o.outerHeight()>a.maxHeight?(s[1]=a.maxHeight,u("."+l[5])):a.fixed&&s[1]>=n.height()&&(s[1]=n.height(),u("."+l[5])):u("."+l[5])}return t},s.pt.offset=function(){var e=this,t=e.config,i=e.layero,a=[i.outerWidth(),i.outerHeight()],o="object"==typeof t.offset;e.offsetTop=(n.height()-a[1])/2,e.offsetLeft=(n.width()-a[0])/2,o?(e.offsetTop=t.offset[0],e.offsetLeft=t.offset[1]||e.offsetLeft):"auto"!==t.offset&&("t"===t.offset?e.offsetTop=0:"r"===t.offset?e.offsetLeft=n.width()-a[0]:"b"===t.offset?e.offsetTop=n.height()-a[1]:"l"===t.offset?e.offsetLeft=0:"lt"===t.offset?(e.offsetTop=0,e.offsetLeft=0):"lb"===t.offset?(e.offsetTop=n.height()-a[1],e.offsetLeft=0):"rt"===t.offset?(e.offsetTop=0,e.offsetLeft=n.width()-a[0]):"rb"===t.offset?(e.offsetTop=n.height()-a[1],e.offsetLeft=n.width()-a[0]):e.offsetTop=t.offset),t.fixed||(e.offsetTop=/%$/.test(e.offsetTop)?n.height()*parseFloat(e.offsetTop)/100:parseFloat(e.offsetTop),e.offsetLeft=/%$/.test(e.offsetLeft)?n.width()*parseFloat(e.offsetLeft)/100:parseFloat(e.offsetLeft),e.offsetTop+=n.scrollTop(),e.offsetLeft+=n.scrollLeft()),i.attr("minLeft")&&(e.offsetTop=n.height()-(i.find(l[1]).outerHeight()||0),e.offsetLeft=i.css("left")),i.css({top:e.offsetTop,left:e.offsetLeft})},s.pt.tips=function(){var e=this,t=e.config,a=e.layero,o=[a.outerWidth(),a.outerHeight()],r=i(t.follow);r[0]||(r=i("body"));var s={width:r.outerWidth(),height:r.outerHeight(),top:r.offset().top,left:r.offset().left},f=a.find(".layui-layer-TipsG"),c=t.tips[0];t.tips[1]||f.remove(),s.autoLeft=function(){s.left+o[0]-n.width()>0?(s.tipLeft=s.left+s.width-o[0],f.css({right:12,left:"auto"})):s.tipLeft=s.left},s.where=[function(){s.autoLeft(),s.tipTop=s.top-o[1]-10,f.removeClass("layui-layer-TipsB").addClass("layui-layer-TipsT").css("border-right-color",t.tips[1])},function(){s.tipLeft=s.left+s.width+10,s.tipTop=s.top,f.removeClass("layui-layer-TipsL").addClass("layui-layer-TipsR").css("border-bottom-color",t.tips[1])},function(){s.autoLeft(),s.tipTop=s.top+s.height+10,f.removeClass("layui-layer-TipsT").addClass("layui-layer-TipsB").css("border-right-color",t.tips[1])},function(){s.tipLeft=s.left-o[0]-10,s.tipTop=s.top,f.removeClass("layui-layer-TipsR").addClass("layui-layer-TipsL").css("border-bottom-color",t.tips[1])}],s.where[c-1](),1===c?s.top-(n.scrollTop()+o[1]+16)<0&&s.where[2]():2===c?n.width()-(s.left+s.width+o[0]+16)>0||s.where[3]():3===c?s.top-n.scrollTop()+s.height+o[1]+16-n.height()>0&&s.where[0]():4===c&&o[0]+16-s.left>0&&s.where[1](),a.find("."+l[5]).css({"background-color":t.tips[1],"padding-right":t.closeBtn?"30px":""}),a.css({left:s.tipLeft-(t.fixed?n.scrollLeft():0),top:s.tipTop-(t.fixed?n.scrollTop():0)})},s.pt.move=function(){var e=this,t=e.config,a=i(document),s=e.layero,l=s.find(t.move),f=s.find(".layui-layer-resize"),c={};return t.move&&l.css("cursor","move"),l.on("mousedown",function(e){e.preventDefault(),t.move&&(c.moveStart=!0,c.offset=[e.clientX-parseFloat(s.css("left")),e.clientY-parseFloat(s.css("top"))],o.moveElem.css("cursor","move").show())}),f.on("mousedown",function(e){e.preventDefault(),c.resizeStart=!0,c.offset=[e.clientX,e.clientY],c.area=[s.outerWidth(),s.outerHeight()],o.moveElem.css("cursor","se-resize").show()}),a.on("mousemove",function(i){if(c.moveStart){var a=i.clientX-c.offset[0],o=i.clientY-c.offset[1],l="fixed"===s.css("position");if(i.preventDefault(),c.stX=l?0:n.scrollLeft(),c.stY=l?0:n.scrollTop(),!t.moveOut){var f=n.width()-s.outerWidth()+c.stX,u=n.height()-s.outerHeight()+c.stY;af&&(a=f),ou&&(o=u)}s.css({left:a,top:o})}if(t.resize&&c.resizeStart){var a=i.clientX-c.offset[0],o=i.clientY-c.offset[1];i.preventDefault(),r.style(e.index,{width:c.area[0]+a,height:c.area[1]+o}),c.isResize=!0,t.resizing&&t.resizing(s)}}).on("mouseup",function(e){c.moveStart&&(delete c.moveStart,o.moveElem.hide(),t.moveEnd&&t.moveEnd(s)),c.resizeStart&&(delete c.resizeStart,o.moveElem.hide())}),e},s.pt.callback=function(){function e(){var e=a.cancel&&a.cancel(t.index,n);e===!1||r.close(t.index)}var t=this,n=t.layero,a=t.config;t.openLayer(),a.success&&(2==a.type?n.find("iframe").on("load",function(){a.success(n,t.index,t)}):a.success(n,t.index,t)),6==r.ie&&t.IE6(n),n.find("."+l[6]).children("a").on("click",function(){var e=i(this).index();if(0===e)a.yes?a.yes(t.index,n):a.btn1?a.btn1(t.index,n):r.close(t.index);else{var o=a["btn"+(e+1)]&&a["btn"+(e+1)](t.index,n);o===!1||r.close(t.index)}}),n.find("."+l[7]).on("click",e),a.shadeClose&&t.shadeo.on("click",function(){r.close(t.index)}),n.find(".layui-layer-min").on("click",function(){var e=a.min&&a.min(n,t.index);e===!1||r.min(t.index,a)}),n.find(".layui-layer-max").on("click",function(){i(this).hasClass("layui-layer-maxmin")?(r.restore(t.index),a.restore&&a.restore(n,t.index)):(r.full(t.index,a),setTimeout(function(){a.full&&a.full(n,t.index)},100))}),a.end&&(o.end[t.index]=a.end)},o.reselect=function(){i.each(i("select"),function(e,t){var n=i(this);n.parents("."+l[0])[0]||1==n.attr("layer")&&i("."+l[0]).length<1&&n.removeAttr("layer").show(),n=null})},s.pt.IE6=function(e){i("select").each(function(e,t){var n=i(this);n.parents("."+l[0])[0]||"none"===n.css("display")||n.attr({layer:"1"}).hide(),n=null})},s.pt.openLayer=function(){var e=this;r.zIndex=e.config.zIndex,r.setTop=function(e){var t=function(){r.zIndex++,e.css("z-index",r.zIndex+1)};return r.zIndex=parseInt(e[0].style.zIndex),e.on("mousedown",t),r.zIndex}},o.record=function(e){var t=[e.width(),e.height(),e.position().top,e.position().left+parseFloat(e.css("margin-left"))];e.find(".layui-layer-max").addClass("layui-layer-maxmin"),e.attr({area:t})},o.rescollbar=function(e){l.html.attr("layer-full")==e&&(l.html[0].style.removeProperty?l.html[0].style.removeProperty("overflow"):l.html[0].style.removeAttribute("overflow"),l.html.removeAttr("layer-full"))},e.layer=r,r.getChildFrame=function(e,t){return t=t||i("."+l[4]).attr("times"),i("#"+l[0]+t).find("iframe").contents().find(e)},r.getFrameIndex=function(e){return i("#"+e).parents("."+l[4]).attr("times")},r.iframeAuto=function(e){if(e){var t=r.getChildFrame("html",e).outerHeight(),n=i("#"+l[0]+e),a=n.find(l[1]).outerHeight()||0,o=n.find("."+l[6]).outerHeight()||0;n.css({height:t+a+o}),n.find("iframe").css({height:t})}},r.iframeSrc=function(e,t){i("#"+l[0]+e).find("iframe").attr("src",t)},r.style=function(e,t,n){var a=i("#"+l[0]+e),r=a.find(".layui-layer-content"),s=a.attr("type"),f=a.find(l[1]).outerHeight()||0,c=a.find("."+l[6]).outerHeight()||0;a.attr("minLeft");s!==o.type[3]&&s!==o.type[4]&&(n||(parseFloat(t.width)<=260&&(t.width=260),parseFloat(t.height)-f-c<=64&&(t.height=64+f+c)),a.css(t),c=a.find("."+l[6]).outerHeight(),s===o.type[2]?a.find("iframe").css({height:parseFloat(t.height)-f-c}):r.css({height:parseFloat(t.height)-f-c-parseFloat(r.css("padding-top"))-parseFloat(r.css("padding-bottom"))}))},r.min=function(e,t){t=t||{};var a=i("#"+l[0]+e),s=i("#"+l.SHADE+e),f=a.find(l[1]).outerHeight()||0,c=a.attr("minLeft")||181*o.minIndex+"px",u=a.css("position"),d={width:180,height:f,position:"fixed",overflow:"hidden"};o.record(a),o.minLeft[0]&&(c=o.minLeft[0],o.minLeft.shift()),t.minStack&&(d.left=c,d.top=n.height()-f,a.attr("minLeft")||o.minIndex++,a.attr("minLeft",c)),a.attr("position",u),r.style(e,d,!0),a.find(".layui-layer-min").hide(),"page"===a.attr("type")&&a.find(l[4]).hide(),o.rescollbar(e),s.hide()},r.restore=function(e){var t=i("#"+l[0]+e),n=i("#"+l.SHADE+e),a=t.attr("area").split(",");t.attr("type");r.style(e,{width:parseFloat(a[0]),height:parseFloat(a[1]),top:parseFloat(a[2]),left:parseFloat(a[3]),position:t.attr("position"),overflow:"visible"},!0),t.find(".layui-layer-max").removeClass("layui-layer-maxmin"),t.find(".layui-layer-min").show(),"page"===t.attr("type")&&t.find(l[4]).show(),o.rescollbar(e),n.show()},r.full=function(e){var t,a=i("#"+l[0]+e);o.record(a),l.html.attr("layer-full")||l.html.css("overflow","hidden").attr("layer-full",e),clearTimeout(t),t=setTimeout(function(){var t="fixed"===a.css("position");r.style(e,{top:t?0:n.scrollTop(),left:t?0:n.scrollLeft(),width:n.width(),height:n.height()},!0),a.find(".layui-layer-min").hide()},100)},r.title=function(e,t){var n=i("#"+l[0]+(t||r.index)).find(l[1]);n.html(e)},r.close=function(e,t){var n=i("#"+l[0]+e),a=n.attr("type"),s="layer-anim-close";if(n[0]){var f="layui-layer-wrap",c=function(){if(a===o.type[1]&&"object"===n.attr("conType")){n.children(":not(."+l[5]+")").remove();for(var r=n.find("."+f),s=0;s<2;s++)r.unwrap();r.css("display",r.data("display")).removeClass(f)}else{if(a===o.type[2])try{var c=i("#"+l[4]+e)[0];c.contentWindow.document.write(""),c.contentWindow.close(),n.find("."+l[5])[0].removeChild(c)}catch(u){}n[0].innerHTML="",n.remove()}"function"==typeof o.end[e]&&o.end[e](),delete o.end[e],"function"==typeof t&&t()};n.data("isOutAnim")&&n.addClass("layer-anim "+s),i("#layui-layer-moves, #"+l.SHADE+e).remove(),6==r.ie&&o.reselect(),o.rescollbar(e),n.attr("minLeft")&&(o.minIndex--,o.minLeft.push(n.attr("minLeft"))),r.ie&&r.ie<10||!n.data("isOutAnim")?c():setTimeout(function(){c()},200)}},r.closeAll=function(e,t){"function"==typeof e&&(t=e,e=null);var n=i("."+l[0]);i.each(n,function(a){var o=i(this),s=e?o.attr("type")===e:1;s&&r.close(o.attr("times"),a===n.length-1?t:null),s=null}),0===n.length&&"function"==typeof t&&t()};var f=r.cache||{},c=function(e){return f.skin?" "+f.skin+" "+f.skin+"-"+e:""};r.prompt=function(e,t){var a="";if(e=e||{},"function"==typeof e&&(t=e),e.area){var o=e.area;a='style="width: '+o[0]+"; height: "+o[1]+';"',delete e.area}var s,l=2==e.formType?'":function(){return''}(),f=e.success;return delete e.success,r.open(i.extend({type:1,btn:["确定","取消"],content:l,skin:"layui-layer-prompt"+c("prompt"),maxWidth:n.width(),success:function(t){s=t.find(".layui-layer-input"),s.val(e.value||"").focus(),"function"==typeof f&&f(t)},resize:!1,yes:function(i){var n=s.val();""===n?s.focus():n.length>(e.maxlength||500)?r.tips("最多输入"+(e.maxlength||500)+"个字数",s,{tips:1}):t&&t(n,i,s)}},e))},r.tab=function(e){e=e||{};var t=e.tab||{},n="layui-this",a=e.success;return delete e.success,r.open(i.extend({type:1,skin:"layui-layer-tab"+c("tab"),resize:!1,title:function(){var e=t.length,i=1,a="";if(e>0)for(a=''+t[0].title+"";i"+t[i].title+"";return a}(),content:'
    '+function(){var e=t.length,i=1,a="";if(e>0)for(a='
  • '+(t[0].content||"no content")+"
  • ";i'+(t[i].content||"no content")+"";return a}()+"
",success:function(t){var o=t.find(".layui-layer-title").children(),r=t.find(".layui-layer-tabmain").children();o.on("mousedown",function(t){t.stopPropagation?t.stopPropagation():t.cancelBubble=!0;var a=i(this),o=a.index();a.addClass(n).siblings().removeClass(n),r.eq(o).show().siblings().hide(),"function"==typeof e.change&&e.change(o)}),"function"==typeof a&&a(t)}},e))},r.photos=function(t,n,a){function o(e,t,i){var n=new Image;return n.src=e,n.complete?t(n):(n.onload=function(){n.onload=null,t(n)},void(n.onerror=function(e){n.onerror=null,i(e)}))}var s={};if(t=t||{},t.photos){var l=!("string"==typeof t.photos||t.photos instanceof i),f=l?t.photos:{},u=f.data||[],d=f.start||0;s.imgIndex=(0|d)+1,t.img=t.img||"img";var y=t.success;if(delete t.success,l){if(0===u.length)return r.msg("没有图片")}else{var p=i(t.photos),h=function(){u=[],p.find(t.img).each(function(e){var t=i(this);t.attr("layer-index",e),u.push({alt:t.attr("alt"),pid:t.attr("layer-pid"),src:t.attr("layer-src")||t.attr("src"),thumb:t.attr("src")})})};if(h(),0===u.length)return;if(n||p.on("click",t.img,function(){h();var e=i(this),n=e.attr("layer-index");r.photos(i.extend(t,{photos:{start:n,data:u,tab:t.tab},full:t.full}),!0)}),!n)return}s.imgprev=function(e){s.imgIndex--,s.imgIndex<1&&(s.imgIndex=u.length),s.tabimg(e)},s.imgnext=function(e,t){s.imgIndex++,s.imgIndex>u.length&&(s.imgIndex=1,t)||s.tabimg(e)},s.keyup=function(e){if(!s.end){var t=e.keyCode;e.preventDefault(),37===t?s.imgprev(!0):39===t?s.imgnext(!0):27===t&&r.close(s.index)}},s.tabimg=function(e){if(!(u.length<=1))return f.start=s.imgIndex-1,r.close(s.index),r.photos(t,!0,e)},s.event=function(){s.bigimg.find(".layui-layer-imgprev").on("click",function(e){e.preventDefault(),s.imgprev(!0)}),s.bigimg.find(".layui-layer-imgnext").on("click",function(e){e.preventDefault(),s.imgnext(!0)}),i(document).on("keyup",s.keyup)},s.loadi=r.load(1,{shade:!("shade"in t)&&.9,scrollbar:!1}),o(u[d].src,function(n){r.close(s.loadi),a&&(t.anim=-1),s.index=r.open(i.extend({type:1,id:"layui-layer-photos",area:function(){var a=[n.width,n.height],o=[i(e).width()-100,i(e).height()-100];if(!t.full&&(a[0]>o[0]||a[1]>o[1])){var r=[a[0]/o[0],a[1]/o[1]];r[0]>r[1]?(a[0]=a[0]/r[0],a[1]=a[1]/r[0]):r[0]'+(u[d].alt||'+function(){return u.length>1?'
'+(u[d].alt||"")+""+s.imgIndex+" / "+u.length+"
":""}()+"
",success:function(e,i){s.bigimg=e.find(".layui-layer-phimg"),s.imgsee=e.find(".layui-layer-imgbar"),s.event(e),t.tab&&t.tab(u[d],e),"function"==typeof y&&y(e)},end:function(){s.end=!0,i(document).off("keyup",s.keyup)}},t))},function(){r.close(s.loadi),r.msg("当前图片地址异常
是否继续查看下一张?",{time:3e4,btn:["下一张","不看了"],yes:function(){u.length>1&&s.imgnext(!0,!0)}})})}},o.run=function(t){i=t,n=i(e),l.html=i("html"),r.open=function(e){var t=new s(e);return t.index}},e.layui&&layui.define?(r.ready(),layui.define("jquery",function(t){r.path=layui.cache.dir,o.run(layui.$),e.layer=r,t("layer",r)})):"function"==typeof define&&define.amd?define(["jquery"],function(){return o.run(e.jQuery),r}):function(){r.ready(),o.run(e.jQuery)}()}(window);layui.define("jquery",function(e){"use strict";var t=layui.$,i=layui.hint(),n={fixbar:function(e){var i,n,r="layui-fixbar",a="layui-fixbar-top",o=t(document),l=t("body");e=t.extend({showHeight:200},e),e.bar1=e.bar1===!0?"":e.bar1,e.bar2=e.bar2===!0?"":e.bar2,e.bgcolor=e.bgcolor?"background-color:"+e.bgcolor:"";var c=[e.bar1,e.bar2,""],g=t(['
    ',e.bar1?'
  • '+c[0]+"
  • ":"",e.bar2?'
  • '+c[1]+"
  • ":"",'
  • '+c[2]+"
  • ","
"].join("")),u=g.find("."+a),s=function(){var t=o.scrollTop();t>=e.showHeight?i||(u.show(),i=1):i&&(u.hide(),i=0)};t("."+r)[0]||("object"==typeof e.css&&g.css(e.css),l.append(g),s(),g.find("li").on("click",function(){var i=t(this),n=i.attr("lay-type");"top"===n&&t("html,body").animate({scrollTop:0},200),e.click&&e.click.call(this,n)}),o.on("scroll",function(){clearTimeout(n),n=setTimeout(function(){s()},100)}))},countdown:function(e,t,i){var n=this,r="function"==typeof t,a=new Date(e).getTime(),o=new Date(!t||r?(new Date).getTime():t).getTime(),l=a-o,c=[Math.floor(l/864e5),Math.floor(l/36e5)%24,Math.floor(l/6e4)%60,Math.floor(l/1e3)%60];r&&(i=t);var g=setTimeout(function(){n.countdown(e,o+1e3,i)},1e3);return i&&i(l>0?c:[0,0,0,0],t,g),l<=0&&clearTimeout(g),g},timeAgo:function(e,t){var i=this,n=[[],[]],r=(new Date).getTime()-new Date(e).getTime();return r>26784e5?(r=new Date(e),n[0][0]=i.digit(r.getFullYear(),4),n[0][1]=i.digit(r.getMonth()+1),n[0][2]=i.digit(r.getDate()),t||(n[1][0]=i.digit(r.getHours()),n[1][1]=i.digit(r.getMinutes()),n[1][2]=i.digit(r.getSeconds())),n[0].join("-")+" "+n[1].join(":")):r>=864e5?(r/1e3/60/60/24|0)+"\u5929\u524d":r>=36e5?(r/1e3/60/60|0)+"\u5c0f\u65f6\u524d":r>=18e4?(r/1e3/60|0)+"\u5206\u949f\u524d":r<0?"\u672a\u6765":"\u521a\u521a"},digit:function(e,t){var i="";e=String(e),t=t||2;for(var n=e.length;n/g,">").replace(/'/g,"'").replace(/"/g,""")},unescape:function(e){return String(e||"").replace(/\&/g,"&").replace(/\</g,"<").replace(/\>/g,">").replace(/\'/,"'").replace(/\"/,'"')},toVisibleArea:function(e){if(e=t.extend({margin:160,duration:200,type:"y"},e),e.scrollElem[0]&&e.thisElem[0]){var i=e.scrollElem,n=e.thisElem,r="y"===e.type,a=r?"scrollTop":"scrollLeft",o=r?"top":"left",l=i[a](),c=i[r?"height":"width"](),g=i.offset()[o],u=n.offset()[o]-g,s={};(u>c-e.margin||u0&&t.unshift(""),t.join(" ")}()+">"+(a.title||"unnaming")+"";return s[0]?s.before(r):n.append(r),o.append('
'+(a.content||"")+"
"),b.hideTabMore(!0),b.tabAuto(),this},s.prototype.tabDelete=function(t,a){var e=".layui-tab-title",l=i(".layui-tab[lay-filter="+t+"]"),n=l.children(e),s=n.find('>li[lay-id="'+a+'"]');return b.tabDelete(null,s),this},s.prototype.tabChange=function(t,a){var e=".layui-tab-title",l=i(".layui-tab[lay-filter="+t+"]"),n=l.children(e),s=n.find('>li[lay-id="'+a+'"]');return b.tabClick.call(s[0],null,null,s),this},s.prototype.tab=function(t){t=t||{},m.on("click",t.headerElem,function(a){var e=i(this).index();b.tabClick.call(this,a,e,null,t)})},s.prototype.progress=function(t,a){var e="layui-progress",l=i("."+e+"[lay-filter="+t+"]"),n=l.find("."+e+"-bar"),s=n.find("."+e+"-text");return n.css("width",a).attr("lay-percent",a),s.text(a),this};var o=".layui-nav",r="layui-nav-item",c="layui-nav-bar",u="layui-nav-tree",y="layui-nav-child",d="layui-nav-child-c",f="layui-nav-more",h="layui-icon-down",p="layui-anim layui-anim-upbit",b={tabClick:function(t,a,s,o){o=o||{};var r=s||i(this),a=a||r.parent().children("li").index(r),c=o.headerElem?r.parent():r.parents(".layui-tab").eq(0),u=o.bodyElem?i(o.bodyElem):c.children(".layui-tab-content").children(".layui-tab-item"),y=r.find("a"),d="javascript:;"!==y.attr("href")&&"_blank"===y.attr("target"),f="string"==typeof r.attr("lay-unselect"),h=c.attr("lay-filter");d||f||(r.addClass(l).siblings().removeClass(l),u.eq(a).addClass(n).siblings().removeClass(n)),layui.event.call(this,e,"tab("+h+")",{elem:c,index:a})},tabDelete:function(t,a){var n=a||i(this).parent(),s=n.index(),o=n.parents(".layui-tab").eq(0),r=o.children(".layui-tab-content").children(".layui-tab-item"),c=o.attr("lay-filter");n.hasClass(l)&&(n.next()[0]?b.tabClick.call(n.next()[0],null,s+1):n.prev()[0]&&b.tabClick.call(n.prev()[0],null,s-1)),n.remove(),r.eq(s).remove(),setTimeout(function(){b.tabAuto()},50),layui.event.call(this,e,"tabDelete("+c+")",{elem:o,index:s})},tabAuto:function(){var t="layui-tab-more",e="layui-tab-bar",l="layui-tab-close",n=this;i(".layui-tab").each(function(){var s=i(this),o=s.children(".layui-tab-title"),r=(s.children(".layui-tab-content").children(".layui-tab-item"),'lay-stope="tabmore"'),c=i('');if(n===window&&8!=a.ie&&b.hideTabMore(!0),s.attr("lay-allowClose")&&o.find("li").each(function(){var t=i(this);if(!t.find("."+l)[0]){var a=i('');a.on("click",b.tabDelete),t.append(a)}}),"string"!=typeof s.attr("lay-unauto"))if(o.prop("scrollWidth")>o.outerWidth()+1){if(o.find("."+e)[0])return;o.append(c),s.attr("overflow",""),c.on("click",function(i){o[this.title?"removeClass":"addClass"](t),this.title=this.title?"":"\u6536\u7f29"})}else o.find("."+e).remove(),s.removeAttr("overflow")})},hideTabMore:function(t){var a=i(".layui-tab-title");t!==!0&&"tabmore"===i(t.target).attr("lay-stope")||(a.removeClass("layui-tab-more"),a.find(".layui-tab-bar").attr("title",""))},clickThis:function(){var t=i(this),a=t.parents(o),n=a.attr("lay-filter"),s=t.parent(),c=t.siblings("."+y),d="string"==typeof s.attr("lay-unselect");"javascript:;"!==t.attr("href")&&"_blank"===t.attr("target")||d||c[0]||(a.find("."+l).removeClass(l),s.addClass(l)),a.hasClass(u)&&(c.removeClass(p),c[0]&&(s["none"===c.css("display")?"addClass":"removeClass"](r+"ed"),"all"===a.attr("lay-shrink")&&s.siblings().removeClass(r+"ed"))),layui.event.call(this,e,"nav("+n+")",t)},collapse:function(){var t=i(this),a=t.find(".layui-colla-icon"),l=t.siblings(".layui-colla-content"),s=t.parents(".layui-collapse").eq(0),o=s.attr("lay-filter"),r="none"===l.css("display");if("string"==typeof s.attr("lay-accordion")){var c=s.children(".layui-colla-item").children("."+n);c.siblings(".layui-colla-title").children(".layui-colla-icon").html(""),c.removeClass(n)}l[r?"addClass":"removeClass"](n),a.html(r?"":""),layui.event.call(this,e,"collapse("+o+")",{title:t,content:l,show:r})}};s.prototype.init=function(t,e){var l=function(){return e?'[lay-filter="'+e+'"]':""}(),s={tab:function(){b.tabAuto.call({})},nav:function(){var t=200,e={},s={},v={},m="layui-nav-title",C=function(l,o,r){var c=i(this),h=c.find("."+y);if(o.hasClass(u)){if(!h[0]){var b=c.children("."+m);l.css({top:c.offset().top-o.offset().top,height:(b[0]?b:c).outerHeight(),opacity:1})}}else h.addClass(p),h.hasClass(d)&&h.css({left:-(h.outerWidth()-c.width())/2}),h[0]?l.css({left:l.position().left+l.width()/2,width:0,opacity:0}):l.css({left:c.position().left+parseFloat(c.css("marginLeft")),top:c.position().top+c.height()-l.height()}),e[r]=setTimeout(function(){l.css({width:h[0]?0:c.width(),opacity:h[0]?0:1})},a.ie&&a.ie<10?0:t),clearTimeout(v[r]),"block"===h.css("display")&&clearTimeout(s[r]),s[r]=setTimeout(function(){h.addClass(n),c.find("."+f).addClass(f+"d")},300)};i(o+l).each(function(a){var l=i(this),o=i(''),d=l.find("."+r);l.find("."+c)[0]||(l.append(o),(l.hasClass(u)?d.find("dd,>."+m):d).on("mouseenter",function(){C.call(this,o,l,a)}).on("mouseleave",function(){l.hasClass(u)?o.css({height:0,opacity:0}):(clearTimeout(s[a]),s[a]=setTimeout(function(){l.find("."+y).removeClass(n),l.find("."+f).removeClass(f+"d")},300))}),l.on("mouseleave",function(){clearTimeout(e[a]),v[a]=setTimeout(function(){l.hasClass(u)||o.css({width:0,left:o.position().left+o.width()/2,opacity:0})},t)})),d.find("a").each(function(){var t=i(this),a=(t.parent(),t.siblings("."+y));a[0]&&!t.children("."+f)[0]&&t.append(''),t.off("click",b.clickThis).on("click",b.clickThis)})})},breadcrumb:function(){var t=".layui-breadcrumb";i(t+l).each(function(){var t=i(this),a="lay-separator",e=t.attr(a)||"/",l=t.find("a");l.next("span["+a+"]")[0]||(l.each(function(t){t!==l.length-1&&i(this).after(""+e+"")}),t.css("visibility","visible"))})},progress:function(){var t="layui-progress";i("."+t+l).each(function(){var a=i(this),e=a.find(".layui-progress-bar"),l=e.attr("lay-percent");e.css("width",function(){return/^.+\/.+$/.test(l)?100*new Function("return "+l)()+"%":l}()),a.attr("lay-showPercent")&&setTimeout(function(){e.html(''+l+"")},350)})},collapse:function(){var t="layui-collapse";i("."+t+l).each(function(){var t=i(this).find(".layui-colla-item");t.each(function(){var t=i(this),a=t.find(".layui-colla-title"),e=t.find(".layui-colla-content"),l="none"===e.css("display");a.find(".layui-colla-icon").remove(),a.append(''+(l?"":"")+""),a.off("click",b.collapse).on("click",b.collapse)})})}};return s[t]?s[t]():layui.each(s,function(t,i){i()})},s.prototype.render=s.prototype.init;var v=new s,m=i(document);i(function(){v.render()});var C=".layui-tab-title li";m.on("click",C,b.tabClick),m.on("click",b.hideTabMore),i(window).on("resize",b.tabAuto),t(e,v)});layui.define("layer",function(e){"use strict";var t=layui.$,i=layui.layer,n=layui.hint(),o=layui.device(),a={config:{},set:function(e){var i=this;return i.config=t.extend({},i.config,e),i},on:function(e,t){return layui.onevent.call(this,r,e,t)}},l=function(){var e=this;return{upload:function(t){e.upload.call(e,t)},reload:function(t){e.reload.call(e,t)},config:e.config}},r="upload",u="layui-upload-file",c="layui-upload-form",f="layui-upload-iframe",s="layui-upload-choose",p=function(e){var i=this;i.config=t.extend({},i.config,a.config,e),i.render()};p.prototype.config={accept:"images",exts:"",auto:!0,bindAction:"",url:"",field:"file",acceptMime:"",method:"post",data:{},drag:!0,size:0,number:0,multiple:!1},p.prototype.render=function(e){var i=this,e=i.config;e.elem=t(e.elem),e.bindAction=t(e.bindAction),i.file(),i.events()},p.prototype.file=function(){var e=this,i=e.config,n=e.elemFile=t(['"].join("")),a=i.elem.next();(a.hasClass(u)||a.hasClass(c))&&a.remove(),o.ie&&o.ie<10&&i.elem.wrap('
'),e.isFile()?(e.elemFile=i.elem,i.field=i.elem[0].name):i.elem.after(n),o.ie&&o.ie<10&&e.initIE()},p.prototype.initIE=function(){var e=this,i=e.config,n=t(''),o=t(['
',"
"].join(""));t("#"+f)[0]||t("body").append(n),i.elem.next().hasClass(c)||(e.elemFile.wrap(o),i.elem.next("."+c).append(function(){var e=[];return layui.each(i.data,function(t,i){i="function"==typeof i?i():i,e.push('')}),e.join("")}()))},p.prototype.msg=function(e){return i.msg(e,{icon:2,shift:6})},p.prototype.isFile=function(){var e=this.config.elem[0];if(e)return"input"===e.tagName.toLocaleLowerCase()&&"file"===e.type},p.prototype.preview=function(e){var t=this;window.FileReader&&layui.each(t.chooseFiles,function(t,i){var n=new FileReader;n.readAsDataURL(i),n.onload=function(){e&&e(t,i,this.result)}})},p.prototype.upload=function(e,i){var n,a=this,l=a.config,r=a.elemFile[0],u=function(){var i=0,n=0,o=e||a.files||a.chooseFiles||r.files,u=function(){l.multiple&&i+n===a.fileLength&&"function"==typeof l.allDone&&l.allDone({total:a.fileLength,successful:i,aborted:n})};layui.each(o,function(e,o){var r=new FormData;r.append(l.field,o),layui.each(l.data,function(e,t){t="function"==typeof t?t():t,r.append(e,t)});var c={url:l.url,type:"post",data:r,contentType:!1,processData:!1,dataType:"json",headers:l.headers||{},success:function(t){i++,d(e,t),u()},error:function(){n++,a.msg("\u8bf7\u6c42\u4e0a\u4f20\u63a5\u53e3\u51fa\u73b0\u5f02\u5e38"),m(e),u()}};"function"==typeof l.progress&&(c.xhr=function(){var i=t.ajaxSettings.xhr();return i.upload.addEventListener("progress",function(t){if(t.lengthComputable){var i=Math.floor(t.loaded/t.total*100);l.progress(i,l.item?l.item[0]:l.elem[0],t,e)}}),i}),t.ajax(c)})},c=function(){var e=t("#"+f);a.elemFile.parent().submit(),clearInterval(p.timer),p.timer=setInterval(function(){var t,i=e.contents().find("body");try{t=i.text()}catch(n){a.msg("\u83b7\u53d6\u4e0a\u4f20\u540e\u7684\u54cd\u5e94\u4fe1\u606f\u51fa\u73b0\u5f02\u5e38"),clearInterval(p.timer),m()}t&&(clearInterval(p.timer),i.html(""),d(0,t))},30)},d=function(e,t){if(a.elemFile.next("."+s).remove(),r.value="","object"!=typeof t)try{t=JSON.parse(t)}catch(i){return t={},a.msg("\u8bf7\u5bf9\u4e0a\u4f20\u63a5\u53e3\u8fd4\u56de\u6709\u6548JSON")}"function"==typeof l.done&&l.done(t,e||0,function(e){a.upload(e)})},m=function(e){l.auto&&(r.value=""),"function"==typeof l.error&&l.error(e||0,function(e){a.upload(e)})},h=l.exts,v=function(){var t=[];return layui.each(e||a.chooseFiles,function(e,i){t.push(i.name)}),t}(),g={preview:function(e){a.preview(e)},upload:function(e,t){var i={};i[e]=t,a.upload(i)},pushFile:function(){return a.files=a.files||{},layui.each(a.chooseFiles,function(e,t){a.files[e]=t}),a.files},resetFile:function(e,t,i){var n=new File([t],i);a.files=a.files||{},a.files[e]=n}},y=function(){if(!(("choose"===i||l.auto)&&(l.choose&&l.choose(g),"choose"===i)||l.before&&l.before(g)===!1))return o.ie?o.ie>9?u():c():void u()};if(v=0===v.length?r.value.match(/[^\/\\]+\..+/g)||[]||"":v,0!==v.length){switch(l.accept){case"file":if(h&&!RegExp("\\w\\.("+h+")$","i").test(escape(v)))return a.msg("\u9009\u62e9\u7684\u6587\u4ef6\u4e2d\u5305\u542b\u4e0d\u652f\u6301\u7684\u683c\u5f0f"),r.value="";break;case"video":if(!RegExp("\\w\\.("+(h||"avi|mp4|wma|rmvb|rm|flash|3gp|flv")+")$","i").test(escape(v)))return a.msg("\u9009\u62e9\u7684\u89c6\u9891\u4e2d\u5305\u542b\u4e0d\u652f\u6301\u7684\u683c\u5f0f"),r.value="";break;case"audio":if(!RegExp("\\w\\.("+(h||"mp3|wav|mid")+")$","i").test(escape(v)))return a.msg("\u9009\u62e9\u7684\u97f3\u9891\u4e2d\u5305\u542b\u4e0d\u652f\u6301\u7684\u683c\u5f0f"),r.value="";break;default:if(layui.each(v,function(e,t){RegExp("\\w\\.("+(h||"jpg|png|gif|bmp|jpeg$")+")","i").test(escape(t))||(n=!0)}),n)return a.msg("\u9009\u62e9\u7684\u56fe\u7247\u4e2d\u5305\u542b\u4e0d\u652f\u6301\u7684\u683c\u5f0f"),r.value=""}if(a.fileLength=function(){var t=0,i=e||a.files||a.chooseFiles||r.files;return layui.each(i,function(){t++}),t}(),l.number&&a.fileLength>l.number)return a.msg("\u540c\u65f6\u6700\u591a\u53ea\u80fd\u4e0a\u4f20\u7684\u6570\u91cf\u4e3a\uff1a"+l.number);if(l.size>0&&!(o.ie&&o.ie<10)){var F;if(layui.each(a.chooseFiles,function(e,t){if(t.size>1024*l.size){var i=l.size/1024;i=i>=1?i.toFixed(2)+"MB":l.size+"KB",r.value="",F=i}}),F)return a.msg("\u6587\u4ef6\u4e0d\u80fd\u8d85\u8fc7"+F)}y()}},p.prototype.reload=function(e){e=e||{},delete e.elem,delete e.bindAction;var i=this,e=i.config=t.extend({},i.config,a.config,e),n=e.elem.next();n.attr({name:e.name,accept:e.acceptMime,multiple:e.multiple})},p.prototype.events=function(){var e=this,i=e.config,a=function(t){e.chooseFiles={},layui.each(t,function(t,i){var n=(new Date).getTime();e.chooseFiles[n+"-"+t]=i})},l=function(t,n){var o=e.elemFile,a=(i.item?i.item:i.elem,t.length>1?t.length+"\u4e2a\u6587\u4ef6":(t[0]||{}).name||o[0].value.match(/[^\/\\]+\..+/g)||[]||"");o.next().hasClass(s)&&o.next().remove(),e.upload(null,"choose"),e.isFile()||i.choose||o.after(''+a+"")};i.elem.off("upload.start").on("upload.start",function(){var o=t(this),a=o.attr("lay-data");if(a)try{a=new Function("return "+a)(),e.config=t.extend({},i,a)}catch(l){n.error("Upload element property lay-data configuration item has a syntax error: "+a)}e.config.item=o,e.elemFile[0].click()}),o.ie&&o.ie<10||i.elem.off("upload.over").on("upload.over",function(){var e=t(this);e.attr("lay-over","")}).off("upload.leave").on("upload.leave",function(){var e=t(this);e.removeAttr("lay-over")}).off("upload.drop").on("upload.drop",function(n,o){var r=t(this),u=o.originalEvent.dataTransfer.files||[];r.removeAttr("lay-over"),a(u),i.auto?e.upload(u):l(u)}),e.elemFile.off("upload.change").on("upload.change",function(){var t=this.files||[];a(t),i.auto?e.upload():l(t)}),i.bindAction.off("upload.action").on("upload.action",function(){e.upload()}),i.elem.data("haveEvents")||(e.elemFile.on("change",function(){t(this).trigger("upload.change")}),i.elem.on("click",function(){e.isFile()||t(this).trigger("upload.start")}),i.drag&&i.elem.on("dragover",function(e){e.preventDefault(),t(this).trigger("upload.over")}).on("dragleave",function(e){t(this).trigger("upload.leave")}).on("drop",function(e){e.preventDefault(),t(this).trigger("upload.drop",e)}),i.bindAction.on("click",function(){t(this).trigger("upload.action")}),i.elem.data("haveEvents",!0))},a.render=function(e){var t=new p(e);return l.call(t)},e(r,a)});layui.define(["jquery","laytpl","lay"],function(e){"use strict";var i=layui.$,n=layui.laytpl,t=layui.hint(),a=layui.device(),l=a.mobile?"click":"mousedown",r="dropdown",o="layui_"+r+"_index",u={config:{},index:layui[r]?layui[r].index+1e4:0,set:function(e){var n=this;return n.config=i.extend({},n.config,e),n},on:function(e,i){return layui.onevent.call(this,r,e,i)}},d=function(){var e=this,i=e.config,n=i.id;return d.that[n]=e,{config:i,reload:function(i){e.reload.call(e,i)}}},s="layui-dropdown",m="layui-menu-item-up",c="layui-menu-item-down",p="layui-menu-body-title",y="layui-menu-item-group",f="layui-menu-item-parent",v="layui-menu-item-divider",g="layui-menu-item-checked",h="layui-menu-item-checked2",w="layui-menu-body-panel",C="layui-menu-body-panel-left",V="."+y+">."+p,k=function(e){var n=this;n.index=++u.index,n.config=i.extend({},n.config,u.config,e),n.init()};k.prototype.config={trigger:"click",content:"",className:"",style:"",show:!1,isAllowSpread:!0,isSpreadItem:!0,data:[],delay:300},k.prototype.reload=function(e){var n=this;n.config=i.extend({},n.config,e),n.init(!0)},k.prototype.init=function(e){var n=this,t=n.config,a=t.elem=i(t.elem);if(a.length>1)return layui.each(a,function(){u.render(i.extend({},t,{elem:this}))}),n;if(!e&&a[0]&&a.data(o)){var l=d.getThis(a.data(o));if(!l)return;return l.reload(t)}t.id="id"in t?t.id:n.index,t.show&&n.render(e),n.events()},k.prototype.render=function(e){var t=this,a=t.config,r=i("body"),s=function(){var e=i('
    ');return a.data.length>0?m(e,a.data):e.html('
  • no menu
  • '),e},m=function(e,t){return layui.each(t,function(t,l){var r=l.child&&l.child.length>0,o="isSpreadItem"in l?l.isSpreadItem:a.isSpreadItem,u=l.templet?n(l.templet).render(l):a.templet?n(a.templet).render(l):l.title,d=function(){return r&&(l.type=l.type||"parent"),l.type?{group:"group",parent:"parent","-":"-"}[l.type]||"parent":""}();if("-"===d||l.title||l.id||r){var s=i(["",function(){var e="href"in l?''+u+"":u;return r?'
    '+e+function(){return"parent"===d?'':"group"===d&&a.isAllowSpread?'':""}()+"
    ":'
    '+e+"
    "}(),""].join(""));if(s.data("item",l),r){var c=i('
    '),y=i("
      ");"parent"===d?(c.append(m(y,l.child)),s.append(c)):s.append(m(y,l.child))}e.append(s)}}),e},c=['
      ',"
      "].join("");("contextmenu"===a.trigger||lay.isTopElem(a.elem[0]))&&(e=!0),!e&&a.elem.data(o+"_opened")||(t.elemView=i(c),t.elemView.append(a.content||s()),a.className&&t.elemView.addClass(a.className),a.style&&t.elemView.attr("style",a.style),u.thisId=a.id,t.remove(),r.append(t.elemView),a.elem.data(o+"_opened",!0),t.position(),d.prevElem=t.elemView,d.prevElem.data("prevElem",a.elem),t.elemView.find(".layui-menu").on(l,function(e){layui.stope(e)}),t.elemView.find(".layui-menu li").on("click",function(e){var n=i(this),l=n.data("item")||{},r=l.child&&l.child.length>0;r||"-"===l.type||(t.remove(),"function"==typeof a.click&&a.click(l,n))}),t.elemView.find(V).on("click",function(e){var n=i(this),t=n.parent(),l=t.data("item")||{};"group"===l.type&&a.isAllowSpread&&d.spread(t)}),"mouseenter"===a.trigger&&t.elemView.on("mouseenter",function(){clearTimeout(d.timer)}).on("mouseleave",function(){t.delayRemove()}))},k.prototype.position=function(e){var i=this,n=i.config;lay.position(n.elem[0],i.elemView[0],{position:n.position,e:i.e,clickType:"contextmenu"===n.trigger?"right":null,align:n.align||null})},k.prototype.remove=function(){var e=this,i=(e.config,d.prevElem);i&&(i.data("prevElem")&&i.data("prevElem").data(o+"_opened",!1),i.remove())},k.prototype.delayRemove=function(){var e=this,i=e.config;clearTimeout(d.timer),d.timer=setTimeout(function(){e.remove()},i.delay)},k.prototype.events=function(){var e=this,i=e.config;"hover"===i.trigger&&(i.trigger="mouseenter"),e.prevElem&&e.prevElem.off(i.trigger,e.prevElemCallback),e.prevElem=i.elem,e.prevElemCallback=function(n){clearTimeout(d.timer),e.e=n,e.render(),n.preventDefault(),"function"==typeof i.ready&&i.ready(e.elemView,i.elem,e.e.target)},i.elem.on(i.trigger,e.prevElemCallback),"mouseenter"===i.trigger&&i.elem.on("mouseleave",function(){e.delayRemove()})},d.that={},d.getThis=function(e){var i=d.that[e];return i||t.error(e?r+" instance with ID '"+e+"' not found":"ID argument required"),i},d.spread=function(e){var i=e.children("."+p).find(".layui-icon");e.hasClass(m)?(e.removeClass(m).addClass(c),i.removeClass("layui-icon-down").addClass("layui-icon-up")):(e.removeClass(c).addClass(m),i.removeClass("layui-icon-up").addClass("layui-icon-down"))},!function(){var e=i(window),n=i(document);e.on("resize",function(){if(u.thisId){var e=d.getThis(u.thisId);if(e){if(!e.elemView[0]||!i("."+s)[0])return!1;var n=e.config;"contextmenu"===n.trigger?e.remove():e.position()}}}),n.on(l,function(e){if(u.thisId){var i=d.getThis(u.thisId);if(i){var n=i.config;!lay.isTopElem(n.elem[0])&&"contextmenu"!==n.trigger&&(e.target===n.elem[0]||n.elem.find(e.target)[0]||e.target===i.elemView[0]||i.elemView&&i.elemView.find(e.target)[0])||i.remove()}}});var t=".layui-menu:not(.layui-dropdown-menu) li";n.on("click",t,function(e){var n=i(this),t=n.parents(".layui-menu").eq(0),a=n.hasClass(y)||n.hasClass(f),l=t.attr("lay-filter")||t.attr("id"),o=lay.options(this);n.hasClass(v)||a||(t.find("."+g).removeClass(g),t.find("."+h).removeClass(h),n.addClass(g),n.parents("."+f).addClass(h),layui.event.call(this,r,"click("+l+")",o))}),n.on("click",t+V,function(e){var n=i(this),t=n.parents("."+y+":eq(0)"),a=lay.options(t[0]);"isAllowSpread"in a&&!a.isAllowSpread||d.spread(t)});var a=".layui-menu ."+f;n.on("mouseenter",a,function(n){var t=i(this),a=t.find("."+w);if(a[0]){var l=a[0].getBoundingClientRect();l.right>e.width()&&(a.addClass(C),l=a[0].getBoundingClientRect(),l.left<0&&a.removeClass(C)),l.bottom>e.height()&&a.eq(0).css("margin-top",-(l.bottom-e.height()))}}).on("mouseleave",a,function(e){var n=i(this),t=n.children("."+w);t.removeClass(C),t.css("margin-top",0)})}(),u.reload=function(e,i){var n=d.getThis(e);return n?(n.reload(i),d.call(n)):this},u.render=function(e){var i=new k(e);return d.call(i)},e(r,u)});layui.define("jquery",function(e){"use strict";var i=layui.jquery,t={config:{},index:layui.slider?layui.slider.index+1e4:0,set:function(e){var t=this;return t.config=i.extend({},t.config,e),t},on:function(e,i){return layui.onevent.call(this,n,e,i)}},a=function(){var e=this,i=e.config;return{setValue:function(t,a){return i.value=t,e.slide("set",t,a||0)},config:i}},n="slider",l="layui-disabled",s="layui-slider",r="layui-slider-bar",o="layui-slider-wrap",u="layui-slider-wrap-btn",d="layui-slider-tips",v="layui-slider-input",c="layui-slider-input-txt",p="layui-slider-input-btn",m="layui-slider-hover",f=function(e){var a=this;a.index=++t.index,a.config=i.extend({},a.config,t.config,e),a.render()};f.prototype.config={type:"default",min:0,max:100,value:0,step:1,showstep:!1,tips:!0,input:!1,range:!1,height:200,disabled:!1,theme:"#009688"},f.prototype.render=function(){var e=this,t=e.config;if(t.step<1&&(t.step=1),t.maxt.min?a:t.min,t.value[1]=n>t.min?n:t.min,t.value[0]=t.value[0]>t.max?t.max:t.value[0],t.value[1]=t.value[1]>t.max?t.max:t.value[1];var r=Math.floor((t.value[0]-t.min)/(t.max-t.min)*100),v=Math.floor((t.value[1]-t.min)/(t.max-t.min)*100),p=v-r+"%";r+="%",v+="%"}else{"object"==typeof t.value&&(t.value=Math.min.apply(null,t.value)),t.valuet.max&&(t.value=t.max);var p=Math.floor((t.value-t.min)/(t.max-t.min)*100)+"%"}var m=t.disabled?"#c2c2c2":t.theme,f='
      '+(t.tips?'
      ':"")+'
      '+(t.range?'
      ':"")+"
      ",h=i(t.elem),y=h.next("."+s);if(y[0]&&y.remove(),e.elemTemp=i(f),t.range?(e.elemTemp.find("."+o).eq(0).data("value",t.value[0]),e.elemTemp.find("."+o).eq(1).data("value",t.value[1])):e.elemTemp.find("."+o).data("value",t.value),h.html(e.elemTemp),"vertical"===t.type&&e.elemTemp.height(t.height+"px"),t.showstep){for(var g=(t.max-t.min)/t.step,b="",x=1;x')}e.elemTemp.append(b)}if(t.input&&!t.range){var w=i('
      ');h.css("position","relative"),h.append(w),h.find("."+c).children("input").val(t.value),"vertical"===t.type?w.css({left:0,top:-48}):e.elemTemp.css("margin-right",w.outerWidth()+15)}t.disabled?(e.elemTemp.addClass(l),e.elemTemp.find("."+u).addClass(l)):e.slide(),e.elemTemp.find("."+u).on("mouseover",function(){var a="vertical"===t.type?t.height:e.elemTemp[0].offsetWidth,n=e.elemTemp.find("."+o),l="vertical"===t.type?a-i(this).parent()[0].offsetTop-n.height():i(this).parent()[0].offsetLeft,s=l/a*100,r=i(this).parent().data("value"),u=t.setTips?t.setTips(r):r;e.elemTemp.find("."+d).html(u),"vertical"===t.type?e.elemTemp.find("."+d).css({bottom:s+"%","margin-bottom":"20px",display:"inline-block"}):e.elemTemp.find("."+d).css({left:s+"%",display:"inline-block"})}).on("mouseout",function(){e.elemTemp.find("."+d).css("display","none")})},f.prototype.slide=function(e,t,a){var n=this,l=n.config,s=n.elemTemp,f=function(){return"vertical"===l.type?l.height:s[0].offsetWidth},h=s.find("."+o),y=s.next("."+v),g=y.children("."+c).children("input").val(),b=100/((l.max-l.min)/Math.ceil(l.step)),x=function(e,i){e=Math.ceil(e)*b>100?Math.ceil(e)*b:Math.round(e)*b,e=e>100?100:e,h.eq(i).css("vertical"===l.type?"bottom":"left",e+"%");var t=T(h[0].offsetLeft),a=l.range?T(h[1].offsetLeft):0;"vertical"===l.type?(s.find("."+d).css({bottom:e+"%","margin-bottom":"20px"}),t=T(f()-h[0].offsetTop-h.height()),a=l.range?T(f()-h[1].offsetTop-h.height()):0):s.find("."+d).css("left",e+"%"),t=t>100?100:t,a=a>100?100:a;var n=Math.min(t,a),o=Math.abs(t-a);"vertical"===l.type?s.find("."+r).css({height:o+"%",bottom:n+"%"}):s.find("."+r).css({width:o+"%",left:n+"%"});var u=l.min+Math.round((l.max-l.min)*e/100);if(g=u,y.children("."+c).children("input").val(g),h.eq(i).data("value",u),s.find("."+d).html(l.setTips?l.setTips(u):u),l.range){var v=[h.eq(0).data("value"),h.eq(1).data("value")];v[0]>v[1]&&v.reverse()}l.change&&l.change(l.range?v:u)},T=function(e){var i=e/f()*100/b,t=Math.round(i)*b;return e==f()&&(t=Math.ceil(i)*b),t},w=i(['
      f()&&(r=f());var o=r/f()*100/b;x(o,e),t.addClass(m),s.find("."+d).show(),i.preventDefault()},o=function(){t.removeClass(m),s.find("."+d).hide()};M(r,o)})}),s.on("click",function(e){var t=i("."+u);if(!t.is(event.target)&&0===t.has(event.target).length&&t.length){var a,n="vertical"===l.type?f()-e.clientY+i(this).offset().top:e.clientX-i(this).offset().left;n<0&&(n=0),n>f()&&(n=f());var s=n/f()*100/b;a=l.range?"vertical"===l.type?Math.abs(n-parseInt(i(h[0]).css("bottom")))>Math.abs(n-parseInt(i(h[1]).css("bottom")))?1:0:Math.abs(n-h[0].offsetLeft)>Math.abs(n-h[1].offsetLeft)?1:0:0,x(s,a),e.preventDefault()}}),y.children("."+p).children("i").each(function(e){i(this).on("click",function(){g=y.children("."+c).children("input").val(),g=1==e?g-l.stepl.max?l.max:Number(g)+l.step;var i=(g-l.min)/(l.max-l.min)*100/b;x(i,0)})});var q=function(){var e=this.value;e=isNaN(e)?0:e,e=el.max?l.max:e,this.value=e;var i=(e-l.min)/(l.max-l.min)*100/b;x(i,0)};y.children("."+c).children("input").on("keydown",function(e){13===e.keyCode&&(e.preventDefault(),q.call(this))}).on("change",q)},f.prototype.events=function(){var e=this;e.config},t.render=function(e){var i=new f(e);return a.call(i)},e(n,t)});layui.define(["jquery","lay"],function(e){"use strict";var i=layui.jquery,r=layui.lay,o=layui.device(),n=o.mobile?"click":"mousedown",l={config:{},index:layui.colorpicker?layui.colorpicker.index+1e4:0,set:function(e){var r=this;return r.config=i.extend({},r.config,e),r},on:function(e,i){return layui.onevent.call(this,"colorpicker",e,i)}},t=function(){var e=this,i=e.config;return{config:i}},c="colorpicker",a="layui-show",s="layui-colorpicker",f=".layui-colorpicker-main",d="layui-icon-down",u="layui-icon-close",p="layui-colorpicker-trigger-span",g="layui-colorpicker-trigger-i",v="layui-colorpicker-side",h="layui-colorpicker-side-slider",b="layui-colorpicker-basis",k="layui-colorpicker-alpha-bgcolor",y="layui-colorpicker-alpha-slider",m="layui-colorpicker-basis-cursor",x="layui-colorpicker-main-input",P=function(e){var i={h:0,s:0,b:0},r=Math.min(e.r,e.g,e.b),o=Math.max(e.r,e.g,e.b),n=o-r;return i.b=o,i.s=0!=o?255*n/o:0,0!=i.s?e.r==o?i.h=(e.g-e.b)/n:e.g==o?i.h=2+(e.b-e.r)/n:i.h=4+(e.r-e.g)/n:i.h=-1,o==r&&(i.h=0),i.h*=60,i.h<0&&(i.h+=360),i.s*=100/255,i.b*=100/255,i},C=function(e){var e=e.indexOf("#")>-1?e.substring(1):e;if(3==e.length){var i=e.split("");e=i[0]+i[0]+i[1]+i[1]+i[2]+i[2]}e=parseInt(e,16);var r={r:e>>16,g:(65280&e)>>8,b:255&e};return P(r)},B=function(e){var i={},r=e.h,o=255*e.s/100,n=255*e.b/100;if(0==o)i.r=i.g=i.b=n;else{var l=n,t=(255-o)*n/255,c=(l-t)*(r%60)/60;360==r&&(r=0),r<60?(i.r=l,i.b=t,i.g=t+c):r<120?(i.g=l,i.b=t,i.r=l-c):r<180?(i.g=l,i.r=t,i.b=t+c):r<240?(i.b=l,i.r=t,i.g=l-c):r<300?(i.b=l,i.g=t,i.r=t+c):r<360?(i.r=l,i.g=t,i.b=l-c):(i.r=0,i.g=0,i.b=0)}return{r:Math.round(i.r),g:Math.round(i.g),b:Math.round(i.b)}},w=function(e){var r=B(e),o=[r.r.toString(16),r.g.toString(16),r.b.toString(16)];return i.each(o,function(e,i){1==i.length&&(o[e]="0"+i)}),o.join("")},D=function(e){var i=/[0-9]{1,3}/g,r=e.match(i)||[];return{r:r[0],g:r[1],b:r[2]}},j=i(window),E=i(document),F=function(e){var r=this;r.index=++l.index,r.config=i.extend({},r.config,l.config,e),r.render()};F.prototype.config={color:"",size:null,alpha:!1,format:"hex",predefine:!1,colors:["#009688","#5FB878","#1E9FFF","#FF5722","#FFB800","#01AAED","#999","#c00","#ff8c00","#ffd700","#90ee90","#00ced1","#1e90ff","#c71585","rgb(0, 186, 189)","rgb(255, 120, 0)","rgb(250, 212, 0)","#393D49","rgba(0,0,0,.5)","rgba(255, 69, 0, 0.68)","rgba(144, 240, 144, 0.5)","rgba(31, 147, 255, 0.73)"]},F.prototype.render=function(){var e=this,r=e.config,o=i(['
      ',"",'3&&(r.alpha&&"rgb"==r.format||(e="#"+w(P(D(r.color))))),"background: "+e):e}()+'">','',"","","
      "].join("")),n=i(r.elem);r.size&&o.addClass("layui-colorpicker-"+r.size),n.addClass("layui-inline").html(e.elemColorBox=o),e.color=e.elemColorBox.find("."+p)[0].style.background,e.events()},F.prototype.renderPicker=function(){var e=this,r=e.config,o=e.elemColorBox[0],n=e.elemPicker=i(['
      ','
      ','
      ','
      ','
      ','
      ',"
      ",'
      ','
      ',"
      ","
      ",'
      ','
      ','
      ',"
      ","
      ",function(){if(r.predefine){var e=['
      '];return layui.each(r.colors,function(i,r){e.push(['
      ','
      ',"
      "].join(""))}),e.push("
      "),e.join("")}return""}(),'
      ','
      ','',"
      ",'
      ','','',"","
      "].join(""));e.elemColorBox.find("."+p)[0];i(f)[0]&&i(f).data("index")==e.index?e.removePicker(F.thisElemInd):(e.removePicker(F.thisElemInd),i("body").append(n)),F.thisElemInd=e.index,F.thisColor=o.style.background,e.position(),e.pickerEvents()},F.prototype.removePicker=function(e){var r=this;r.config;return i("#layui-colorpicker"+(e||r.index)).remove(),r},F.prototype.position=function(){var e=this,i=e.config;return r.position(e.bindElem||e.elemColorBox[0],e.elemPicker[0],{position:i.position,align:"center"}),e},F.prototype.val=function(){var e=this,i=(e.config,e.elemColorBox.find("."+p)),r=e.elemPicker.find("."+x),o=i[0],n=o.style.backgroundColor;if(n){var l=P(D(n)),t=i.attr("lay-type");if(e.select(l.h,l.s,l.b),"torgb"===t&&r.find("input").val(n),"rgba"===t){var c=D(n);if(3==(n.match(/[0-9]{1,3}/g)||[]).length)r.find("input").val("rgba("+c.r+", "+c.g+", "+c.b+", 1)"),e.elemPicker.find("."+y).css("left",280);else{r.find("input").val(n);var a=280*n.slice(n.lastIndexOf(",")+1,n.length-1);e.elemPicker.find("."+y).css("left",a)}e.elemPicker.find("."+k)[0].style.background="linear-gradient(to right, rgba("+c.r+", "+c.g+", "+c.b+", 0), rgb("+c.r+", "+c.g+", "+c.b+"))"}}else e.select(0,100,100),r.find("input").val(""),e.elemPicker.find("."+k)[0].style.background="",e.elemPicker.find("."+y).css("left",280)},F.prototype.side=function(){var e=this,r=e.config,o=e.elemColorBox.find("."+p),n=o.attr("lay-type"),l=e.elemPicker.find("."+v),t=e.elemPicker.find("."+h),c=e.elemPicker.find("."+b),a=e.elemPicker.find("."+m),s=e.elemPicker.find("."+k),f=e.elemPicker.find("."+y),C=t[0].offsetTop/180*360,w=100-(a[0].offsetTop+3)/180*100,E=(a[0].offsetLeft+3)/260*100,F=Math.round(f[0].offsetLeft/280*100)/100,H=e.elemColorBox.find("."+g),M=e.elemPicker.find(".layui-colorpicker-pre").children("div"),Y=function(i,l,t,c){e.select(i,l,t);var a=B({h:i,s:l,b:t});if(H.addClass(d).removeClass(u),o[0].style.background="rgb("+a.r+", "+a.g+", "+a.b+")","torgb"===n&&e.elemPicker.find("."+x).find("input").val("rgb("+a.r+", "+a.g+", "+a.b+")"),"rgba"===n){var p=0;p=280*c,f.css("left",p),e.elemPicker.find("."+x).find("input").val("rgba("+a.r+", "+a.g+", "+a.b+", "+c+")"),o[0].style.background="rgba("+a.r+", "+a.g+", "+a.b+", "+c+")",s[0].style.background="linear-gradient(to right, rgba("+a.r+", "+a.g+", "+a.b+", 0), rgb("+a.r+", "+a.g+", "+a.b+"))"}r.change&&r.change(e.elemPicker.find("."+x).find("input").val())},I=i(['
      '].join("")),L=function(e){i("#LAY-colorpicker-moving")[0]||i("body").append(I),I.on("mousemove",e),I.on("mouseup",function(){I.remove()}).on("mouseleave",function(){I.remove()})};t.on("mousedown",function(e){var i=this.offsetTop,r=e.clientY,o=function(e){var o=i+(e.clientY-r),n=l[0].offsetHeight;o<0&&(o=0),o>n&&(o=n);var t=o/180*360;C=t,Y(t,E,w,F),e.preventDefault()};L(o),e.preventDefault()}),l.on("click",function(e){var r=e.clientY-i(this).offset().top;r<0&&(r=0),r>this.offsetHeight&&(r=this.offsetHeight);var o=r/180*360;C=o,Y(o,E,w,F),e.preventDefault()}),a.on("mousedown",function(e){var i=this.offsetTop,r=this.offsetLeft,o=e.clientY,n=e.clientX,l=function(e){var l=i+(e.clientY-o),t=r+(e.clientX-n),a=c[0].offsetHeight-3,s=c[0].offsetWidth-3;l<-3&&(l=-3),l>a&&(l=a),t<-3&&(t=-3),t>s&&(t=s);var f=(t+3)/260*100,d=100-(l+3)/180*100;w=d,E=f,Y(C,f,d,F),e.preventDefault()};layui.stope(e),L(l),e.preventDefault()}),c.on("mousedown",function(e){var r=e.clientY-i(this).offset().top-3+j.scrollTop(),o=e.clientX-i(this).offset().left-3+j.scrollLeft();r<-3&&(r=-3),r>this.offsetHeight-3&&(r=this.offsetHeight-3),o<-3&&(o=-3),o>this.offsetWidth-3&&(o=this.offsetWidth-3);var n=(o+3)/260*100,l=100-(r+3)/180*100;w=l,E=n,Y(C,n,l,F),layui.stope(e),e.preventDefault(),a.trigger(e,"mousedown")}),f.on("mousedown",function(e){var i=this.offsetLeft,r=e.clientX,o=function(e){var o=i+(e.clientX-r),n=s[0].offsetWidth;o<0&&(o=0),o>n&&(o=n);var l=Math.round(o/280*100)/100;F=l,Y(C,E,w,l),e.preventDefault()};L(o),e.preventDefault()}),s.on("click",function(e){var r=e.clientX-i(this).offset().left;r<0&&(r=0),r>this.offsetWidth&&(r=this.offsetWidth);var o=Math.round(r/280*100)/100;F=o,Y(C,E,w,o),e.preventDefault()}),M.each(function(){i(this).on("click",function(){i(this).parent(".layui-colorpicker-pre").addClass("selected").siblings().removeClass("selected");var e,r=this.style.backgroundColor,o=P(D(r)),n=r.slice(r.lastIndexOf(",")+1,r.length-1);C=o.h,E=o.s,w=o.b,3==(r.match(/[0-9]{1,3}/g)||[]).length&&(n=1),F=n,e=280*n,Y(o.h,o.s,o.b,n)})})},F.prototype.select=function(e,i,r,o){var n=this,l=(n.config,w({h:e,s:100,b:100})),t=w({h:e,s:i,b:r}),c=e/360*180,a=180-r/100*180-3,s=i/100*260-3;n.elemPicker.find("."+h).css("top",c),n.elemPicker.find("."+b)[0].style.background="#"+l,n.elemPicker.find("."+m).css({top:a,left:s}),"change"!==o&&n.elemPicker.find("."+x).find("input").val("#"+t)},F.prototype.pickerEvents=function(){var e=this,r=e.config,o=e.elemColorBox.find("."+p),n=e.elemPicker.find("."+x+" input"),l={clear:function(i){o[0].style.background="",e.elemColorBox.find("."+g).removeClass(d).addClass(u),e.color="",r.done&&r.done(""),e.removePicker()},confirm:function(i,l){var t=n.val(),c=t,a={};if(t.indexOf(",")>-1){if(a=P(D(t)),e.select(a.h,a.s,a.b),o[0].style.background=c="#"+w(a),(t.match(/[0-9]{1,3}/g)||[]).length>3&&"rgba"===o.attr("lay-type")){var s=280*t.slice(t.lastIndexOf(",")+1,t.length-1);e.elemPicker.find("."+y).css("left",s),o[0].style.background=t,c=t}}else a=C(t),o[0].style.background=c="#"+w(a),e.elemColorBox.find("."+g).removeClass(u).addClass(d);return"change"===l?(e.select(a.h,a.s,a.b,l),void(r.change&&r.change(c))):(e.color=t,r.done&&r.done(t),void e.removePicker())}};e.elemPicker.on("click","*[colorpicker-events]",function(){var e=i(this),r=e.attr("colorpicker-events");l[r]&&l[r].call(this,e)}),n.on("keyup",function(e){var r=i(this);l.confirm.call(this,r,13===e.keyCode?null:"change")})},F.prototype.events=function(){var e=this,r=e.config,o=e.elemColorBox.find("."+p);e.elemColorBox.on("click",function(){e.renderPicker(),i(f)[0]&&(e.val(),e.side())}),r.elem[0]&&!e.elemColorBox[0].eventHandler&&(E.on(n,function(r){if(!i(r.target).hasClass(s)&&!i(r.target).parents("."+s)[0]&&!i(r.target).hasClass(f.replace(/\./g,""))&&!i(r.target).parents(f)[0]&&e.elemPicker){if(e.color){var n=P(D(e.color));e.select(n.h,n.s,n.b)}else e.elemColorBox.find("."+g).removeClass(d).addClass(u);o[0].style.background=e.color||"",e.removePicker()}}),j.on("resize",function(){return!(!e.elemPicker||!i(f)[0])&&void e.position()}),e.elemColorBox[0].eventHandler=!0)},l.render=function(e){var i=new F(e);return t.call(i)},e(c,l)});layui.define("layer",function(e){"use strict";var t=layui.$,i=layui.layer,a=layui.hint(),n=layui.device(),l="form",r=".layui-form",o="layui-this",s="layui-hide",c="layui-disabled",u=function(){this.config={verify:{required:[/[\S]+/,"\u5fc5\u586b\u9879\u4e0d\u80fd\u4e3a\u7a7a"],phone:[/^1\d{10}$/,"\u8bf7\u8f93\u5165\u6b63\u786e\u7684\u624b\u673a\u53f7"],email:[/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/,"\u90ae\u7bb1\u683c\u5f0f\u4e0d\u6b63\u786e"],url:[/^(#|(http(s?)):\/\/|\/\/)[^\s]+\.[^\s]+$/,"\u94fe\u63a5\u683c\u5f0f\u4e0d\u6b63\u786e"],number:function(e){if(!e||isNaN(e))return"\u53ea\u80fd\u586b\u5199\u6570\u5b57"},date:[/^(\d{4})[-\/](\d{1}|0\d{1}|1[0-2])([-\/](\d{1}|0\d{1}|[1-2][0-9]|3[0-1]))*$/,"\u65e5\u671f\u683c\u5f0f\u4e0d\u6b63\u786e"],identity:[/(^\d{15}$)|(^\d{17}(x|X|\d)$)/,"\u8bf7\u8f93\u5165\u6b63\u786e\u7684\u8eab\u4efd\u8bc1\u53f7"]},autocomplete:null}};u.prototype.set=function(e){var i=this;return t.extend(!0,i.config,e),i},u.prototype.verify=function(e){var i=this;return t.extend(!0,i.config.verify,e),i},u.prototype.on=function(e,t){return layui.onevent.call(this,l,e,t)},u.prototype.val=function(e,i){var a=this,n=t(r+'[lay-filter="'+e+'"]');return n.each(function(e,a){var n=t(this);layui.each(i,function(e,t){var i,a=n.find('[name="'+e+'"]');a[0]&&(i=a[0].type,"checkbox"===i?a[0].checked=t:"radio"===i?a.each(function(){this.value==t&&(this.checked=!0)}):a.val(t))})}),f.render(null,e),a.getValue(e)},u.prototype.getValue=function(e,i){i=i||t(r+'[lay-filter="'+e+'"]').eq(0);var a={},n={},l=i.find("input,select,textarea");return layui.each(l,function(e,i){var l;t(this);if(i.name=(i.name||"").replace(/^\s*|\s*&/,""),i.name){if(/^.*\[\]$/.test(i.name)){var r=i.name.match(/^(.*)\[\]$/g)[0];a[r]=0|a[r],l=i.name.replace(/^(.*)\[\]$/,"$1["+a[r]++ +"]")}/^checkbox|radio$/.test(i.type)&&!i.checked||(n[l||i.name]=i.value)}}),n},u.prototype.render=function(e,i){var n=this,u=n.config,d=t(r+function(){return i?'[lay-filter="'+i+'"]':""}()),f={input:function(){var e=d.find("input,textarea");u.autocomplete&&e.attr("autocomplete",u.autocomplete)},select:function(){var e,i="\u8bf7\u9009\u62e9",a="layui-form-select",n="layui-select-title",r="layui-select-none",u="",f=d.find("select"),v=function(i,l){t(i.target).parent().hasClass(n)&&!l||(t("."+a).removeClass(a+"ed "+a+"up"),e&&u&&e.val(u)),e=null},y=function(i,d,f){var y,p=t(this),m=i.find("."+n),g=m.find("input"),k=i.find("dl"),x=k.children("dd"),b=this.selectedIndex;if(!d){var C=function(){var e=i.offset().top+i.outerHeight()+5-h.scrollTop(),t=k.outerHeight();b=p[0].selectedIndex,i.addClass(a+"ed"),x.removeClass(s),y=null,x.eq(b).addClass(o).siblings().removeClass(o),e+t>h.height()&&e>=t&&i.addClass(a+"up"),T()},w=function(e){i.removeClass(a+"ed "+a+"up"),g.blur(),y=null,e||$(g.val(),function(e){var i=p[0].selectedIndex;e&&(u=t(p[0].options[i]).html(),0===i&&u===g.attr("placeholder")&&(u=""),g.val(u||""))})},T=function(){var e=k.children("dd."+o);if(e[0]){var t=e.position().top,i=k.height(),a=e.height();t>i&&k.scrollTop(t+k.scrollTop()-i+a-5),t<0&&k.scrollTop(t+k.scrollTop()-5)}};m.on("click",function(e){i.hasClass(a+"ed")?w():(v(e,!0),C()),k.find("."+r).remove()}),m.find(".layui-edge").on("click",function(){g.focus()}),g.on("keyup",function(e){var t=e.keyCode;9===t&&C()}).on("keydown",function(e){var t=e.keyCode;9===t&&w();var i=function(t,a){var n,l;e.preventDefault();var r=function(){var e=k.children("dd."+o);if(k.children("dd."+s)[0]&&"next"===t){var i=k.children("dd:not(."+s+",."+c+")"),n=i.eq(0).index();if(n>=0&&n\u65e0\u5339\u914d\u9879

      '):k.find("."+r).remove()},"keyup"),""===t&&k.find("."+r).remove(),void T())};f&&g.on("keyup",q).on("blur",function(i){var a=p[0].selectedIndex;e=g,u=t(p[0].options[a]).html(),0===a&&u===g.attr("placeholder")&&(u=""),setTimeout(function(){$(g.val(),function(e){u||g.val("")},"blur")},200)}),x.on("click",function(){var e=t(this),a=e.attr("lay-value"),n=p.attr("lay-filter");return!e.hasClass(c)&&(e.hasClass("layui-select-tips")?g.val(""):(g.val(e.text()),e.addClass(o)),e.siblings().removeClass(o),p.val(a).removeClass("layui-form-danger"),layui.event.call(this,l,"select("+n+")",{elem:p[0],value:a,othis:i}),w(!0),!1)}),i.find("dl>dt").on("click",function(e){return!1}),t(document).off("click",v).on("click",v)}};f.each(function(e,l){var r=t(this),s=r.next("."+a),u=this.disabled,d=l.value,f=t(l.options[l.selectedIndex]),v=l.options[0];if("string"==typeof r.attr("lay-ignore"))return r.show();var h="string"==typeof r.attr("lay-search"),p=v?v.value?i:v.innerHTML||i:i,m=t(['
      ','
      ','','
      ','
      ',function(e){var a=[];return layui.each(e,function(e,n){0!==e||n.value?"optgroup"===n.tagName.toLowerCase()?a.push("
      "+n.label+"
      "):a.push('
      '+t.trim(n.innerHTML)+"
      "):a.push('
      '+t.trim(n.innerHTML||i)+"
      ")}),0===a.length&&a.push('
      \u6ca1\u6709\u9009\u9879
      '),a.join("")}(r.find("*"))+"
      ","
      "].join(""));s[0]&&s.remove(),r.after(m),y.call(this,m,u,h)})},checkbox:function(){var e={checkbox:["layui-form-checkbox","layui-form-checked","checkbox"],_switch:["layui-form-switch","layui-form-onswitch","switch"]},i=d.find("input[type=checkbox]"),a=function(e,i){var a=t(this);e.on("click",function(){var t=a.attr("lay-filter"),n=(a.attr("lay-text")||"").split("|");a[0].disabled||(a[0].checked?(a[0].checked=!1,e.removeClass(i[1]).find("em").text(n[1])):(a[0].checked=!0,e.addClass(i[1]).find("em").text(n[0])),layui.event.call(a[0],l,i[2]+"("+t+")",{elem:a[0],value:a[0].value,othis:e}))})};i.each(function(i,n){var l=t(this),r=l.attr("lay-skin"),o=(l.attr("lay-text")||"").split("|"),s=this.disabled;"switch"===r&&(r="_"+r);var u=e[r]||e.checkbox;if("string"==typeof l.attr("lay-ignore"))return l.show();var d=l.next("."+u[0]),f=t(['
      ",function(){var e=n.title.replace(/\s/g,""),t={checkbox:[e?""+n.title+"":"",''].join(""),_switch:""+((n.checked?o[0]:o[1])||"")+""};return t[r]||t.checkbox}(),"
      "].join(""));d[0]&&d.remove(),l.after(f),a.call(this,f,u)})},radio:function(){var e="layui-form-radio",i=["",""],a=d.find("input[type=radio]"),n=function(a){var n=t(this),o="layui-anim-scaleSpring";a.on("click",function(){var s=n[0].name,c=n.parents(r),u=n.attr("lay-filter"),d=c.find("input[name="+s.replace(/(\.|#|\[|\])/g,"\\$1")+"]");n[0].disabled||(layui.each(d,function(){var a=t(this).next("."+e);this.checked=!1,a.removeClass(e+"ed"),a.find(".layui-icon").removeClass(o).html(i[1])}),n[0].checked=!0,a.addClass(e+"ed"),a.find(".layui-icon").addClass(o).html(i[0]),layui.event.call(n[0],l,"radio("+u+")",{elem:n[0],value:n[0].value,othis:a}))})};a.each(function(a,l){var r=t(this),o=r.next("."+e),s=this.disabled;if("string"==typeof r.attr("lay-ignore"))return r.show();o[0]&&o.remove();var u=t(['
      ',''+i[l.checked?0:1]+"","
      "+function(){var e=l.title||"";return"string"==typeof r.next().attr("lay-radio")&&(e=r.next().html()),e}()+"
      ","
      "].join(""));r.after(u),n.call(this,u)})}};return e?f[e]?f[e]():a.error('\u4e0d\u652f\u6301\u7684 "'+e+'" \u8868\u5355\u6e32\u67d3'):layui.each(f,function(e,t){t()}),n};var d=function(){var e=null,a=f.config.verify,o="layui-form-danger",s={},c=t(this),u=c.parents(r).eq(0),d=u.find("*[lay-verify]"),h=c.parents("form")[0],y=c.attr("lay-filter");return layui.each(d,function(l,r){var s=t(this),c=s.attr("lay-verify").split("|"),u=s.attr("lay-verType"),d=s.val();if(s.removeClass(o),layui.each(c,function(t,l){var c,f="",h="function"==typeof a[l];if(a[l]){var c=h?f=a[l](d,r):!a[l][0].test(d),y="select"===r.tagName.toLowerCase()||/^checkbox|radio$/.test(r.type);if(f=f||a[l][1],"required"===l&&(f=s.attr("lay-reqText")||f),c)return"tips"===u?i.tips(f,function(){return"string"!=typeof s.attr("lay-ignore")&&y?s.next():s}(),{tips:1}):"alert"===u?i.alert(f,{title:"\u63d0\u793a",shadeClose:!0}):/\bstring|number\b/.test(typeof f)&&i.msg(f,{icon:5,shift:6}),n.mobile?v.scrollTop(function(){try{return(y?s.next():s).offset().top-15}catch(e){return 0}}()):setTimeout(function(){(y?s.next().find("input"):r).focus()},7),s.addClass(o),e=!0}}),e)return e}),!e&&(s=f.getValue(null,u),layui.event.call(this,l,"submit("+y+")",{elem:this,form:h,field:s}))},f=new u,v=t(document),h=t(window);t(function(){f.render()}),v.on("reset",r,function(){var e=t(this).attr("lay-filter");setTimeout(function(){f.render(null,e)},50)}),v.on("submit",r,d).on("click","*[lay-submit]",d),e(l,f)});layui.define("form",function(e){"use strict";var i=layui.$,a=layui.form,n=layui.layer,t="tree",r={config:{},index:layui[t]?layui[t].index+1e4:0,set:function(e){var a=this;return a.config=i.extend({},a.config,e),a},on:function(e,i){return layui.onevent.call(this,t,e,i)}},l=function(){var e=this,i=e.config,a=i.id||e.index;return l.that[a]=e,l.config[a]=i,{config:i,reload:function(i){e.reload.call(e,i)},getChecked:function(){return e.getChecked.call(e)},setChecked:function(i){return e.setChecked.call(e,i)}}},c="layui-hide",d="layui-disabled",s="layui-tree-set",o="layui-tree-iconClick",h="layui-icon-addition",u="layui-icon-subtraction",p="layui-tree-entry",f="layui-tree-main",y="layui-tree-txt",v="layui-tree-pack",C="layui-tree-spread",k="layui-tree-setLineShort",m="layui-tree-showLine",x="layui-tree-lineExtend",b=function(e){var a=this;a.index=++r.index,a.config=i.extend({},a.config,r.config,e),a.render()};b.prototype.config={data:[],showCheckbox:!1,showLine:!0,accordion:!1,onlyIconControl:!1,isJump:!1,edit:!1,text:{defaultNodeName:"\u672a\u547d\u540d",none:"\u65e0\u6570\u636e"}},b.prototype.reload=function(e){var a=this;layui.each(e,function(e,i){"array"===layui._typeof(i)&&delete a.config[e]}),a.config=i.extend(!0,{},a.config,e),a.render()},b.prototype.render=function(){var e=this,a=e.config;e.checkids=[];var n=i('
      ');e.tree(n);var t=a.elem=i(a.elem);if(t[0]){if(e.key=a.id||e.index,e.elem=n,e.elemNone=i('
      '+a.text.none+"
      "),t.html(e.elem),0==e.elem.find(".layui-tree-set").length)return e.elem.append(e.elemNone);a.showCheckbox&&e.renderForm("checkbox"),e.elem.find(".layui-tree-set").each(function(){var e=i(this);e.parent(".layui-tree-pack")[0]||e.addClass("layui-tree-setHide"),!e.next()[0]&&e.parents(".layui-tree-pack").eq(1).hasClass("layui-tree-lineExtend")&&e.addClass(k),e.next()[0]||e.parents(".layui-tree-set").eq(0).next()[0]||e.addClass(k)}),e.events()}},b.prototype.renderForm=function(e){a.render(e,"LAY-tree-"+this.index)},b.prototype.tree=function(e,a){var n=this,t=n.config,r=a||t.data;layui.each(r,function(a,r){var l=r.children&&r.children.length>0,o=i('
      "),h=i(['
      ','
      ','
      ',function(){return t.showLine?l?'':'':''}(),function(){return t.showCheckbox?'':""}(),function(){return t.isJump&&r.href?''+(r.title||r.label||t.text.defaultNodeName)+"":''+(r.title||r.label||t.text.defaultNodeName)+""}(),"
      ",function(){if(!t.edit)return"";var e={add:'',update:'',del:''},i=['
      '];return t.edit===!0&&(t.edit=["update","del"]),"object"==typeof t.edit?(layui.each(t.edit,function(a,n){i.push(e[n]||"")}),i.join("")+"
      "):void 0}(),"
      "].join(""));l&&(h.append(o),n.tree(o,r.children)),e.append(h),h.prev("."+s)[0]&&h.prev().children(".layui-tree-pack").addClass("layui-tree-showLine"),l||h.parent(".layui-tree-pack").addClass("layui-tree-lineExtend"),n.spread(h,r),t.showCheckbox&&(r.checked&&n.checkids.push(r.id),n.checkClick(h,r)),t.edit&&n.operate(h,r)})},b.prototype.spread=function(e,a){var n=this,t=n.config,r=e.children("."+p),l=r.children("."+f),c=r.find("."+o),k=r.find("."+y),m=t.onlyIconControl?c:l,x="";m.on("click",function(i){var a=e.children("."+v),n=m.children(".layui-icon")[0]?m.children(".layui-icon"):m.find(".layui-tree-icon").children(".layui-icon");if(a[0]){if(e.hasClass(C))e.removeClass(C),a.slideUp(200),n.removeClass(u).addClass(h);else if(e.addClass(C),a.slideDown(200),n.addClass(u).removeClass(h),t.accordion){var r=e.siblings("."+s);r.removeClass(C),r.children("."+v).slideUp(200),r.find(".layui-tree-icon").children(".layui-icon").removeClass(u).addClass(h)}}else x="normal"}),k.on("click",function(){var n=i(this);n.hasClass(d)||(x=e.hasClass(C)?t.onlyIconControl?"open":"close":t.onlyIconControl?"close":"open",t.click&&t.click({elem:e,state:x,data:a}))})},b.prototype.setCheckbox=function(e,i,a){var n=this,t=(n.config,a.prop("checked"));if(!a.prop("disabled")){if("object"==typeof i.children||e.find("."+v)[0]){var r=e.find("."+v).find('input[same="layuiTreeCheck"]');r.each(function(){this.disabled||(this.checked=t)})}var l=function(e){if(e.parents("."+s)[0]){var i,a=e.parent("."+v),n=a.parent(),r=a.prev().find('input[same="layuiTreeCheck"]');t?r.prop("checked",t):(a.find('input[same="layuiTreeCheck"]').each(function(){this.checked&&(i=!0)}),i||r.prop("checked",!1)),l(n)}};l(e),n.renderForm("checkbox")}},b.prototype.checkClick=function(e,a){var n=this,t=n.config,r=e.children("."+p),l=r.children("."+f);l.on("click",'input[same="layuiTreeCheck"]+',function(r){layui.stope(r);var l=i(this).prev(),c=l.prop("checked");l.prop("disabled")||(n.setCheckbox(e,a,l),t.oncheck&&t.oncheck({elem:e,checked:c,data:a}))})},b.prototype.operate=function(e,a){var t=this,r=t.config,l=e.children("."+p),d=l.children("."+f);l.children(".layui-tree-btnGroup").on("click",".layui-icon",function(l){layui.stope(l);var f=i(this).data("type"),b=e.children("."+v),g={data:a,type:f,elem:e};if("add"==f){b[0]||(r.showLine?(d.find("."+o).addClass("layui-tree-icon"),d.find("."+o).children(".layui-icon").addClass(h).removeClass("layui-icon-file")):d.find(".layui-tree-iconArrow").removeClass(c),e.append('
      '));var w=r.operate&&r.operate(g),N={};if(N.title=r.text.defaultNodeName,N.id=w,t.tree(e.children("."+v),[N]),r.showLine)if(b[0])b.hasClass(x)||b.addClass(x),e.find("."+v).each(function(){i(this).children("."+s).last().addClass(k)}),b.children("."+s).last().prev().hasClass(k)?b.children("."+s).last().prev().removeClass(k):b.children("."+s).last().removeClass(k),!e.parent("."+v)[0]&&e.next()[0]&&b.children("."+s).last().removeClass(k);else{var T=e.siblings("."+s),L=1,I=e.parent("."+v);layui.each(T,function(e,a){i(a).children("."+v)[0]||(L=0)}),1==L?(T.children("."+v).addClass(m),T.children("."+v).children("."+s).removeClass(k),e.children("."+v).addClass(m),I.removeClass(x),I.children("."+s).last().children("."+v).children("."+s).last().addClass(k)):e.children("."+v).children("."+s).addClass(k)}if(!r.showCheckbox)return;if(d.find('input[same="layuiTreeCheck"]')[0].checked){var A=e.children("."+v).children("."+s).last();A.find('input[same="layuiTreeCheck"]')[0].checked=!0}t.renderForm("checkbox")}else if("update"==f){var F=d.children("."+y).html();d.children("."+y).html(""),d.append(''),d.children(".layui-tree-editInput").val(F).focus();var j=function(e){var i=e.val().trim();i=i?i:r.text.defaultNodeName,e.remove(),d.children("."+y).html(i),g.data.title=i,r.operate&&r.operate(g)};d.children(".layui-tree-editInput").blur(function(){j(i(this))}),d.children(".layui-tree-editInput").on("keydown",function(e){13===e.keyCode&&(e.preventDefault(),j(i(this)))})}else n.confirm('\u786e\u8ba4\u5220\u9664\u8be5\u8282\u70b9 "'+(a.title||"")+'" \u5417\uff1f',function(a){if(r.operate&&r.operate(g),g.status="remove",n.close(a),!e.prev("."+s)[0]&&!e.next("."+s)[0]&&!e.parent("."+v)[0])return e.remove(),void t.elem.append(t.elemNone);if(e.siblings("."+s).children("."+p)[0]){if(r.showCheckbox){var l=function(e){if(e.parents("."+s)[0]){var a=e.siblings("."+s).children("."+p),n=e.parent("."+v).prev(),r=n.find('input[same="layuiTreeCheck"]')[0],c=1,d=0;0==r.checked&&(a.each(function(e,a){var n=i(a).find('input[same="layuiTreeCheck"]')[0];0!=n.checked||n.disabled||(c=0),n.disabled||(d=1)}),1==c&&1==d&&(r.checked=!0,t.renderForm("checkbox"),l(n.parent("."+s))))}};l(e)}if(r.showLine){var d=e.siblings("."+s),h=1,f=e.parent("."+v);layui.each(d,function(e,a){i(a).children("."+v)[0]||(h=0)}),1==h?(b[0]||(f.removeClass(x),d.children("."+v).addClass(m),d.children("."+v).children("."+s).removeClass(k)),e.next()[0]?f.children("."+s).last().children("."+v).children("."+s).last().addClass(k):e.prev().children("."+v).children("."+s).last().addClass(k),e.next()[0]||e.parents("."+s)[1]||e.parents("."+s).eq(0).next()[0]||e.prev("."+s).addClass(k)):!e.next()[0]&&e.hasClass(k)&&e.prev().addClass(k)}}else{var y=e.parent("."+v).prev();if(r.showLine){y.find("."+o).removeClass("layui-tree-icon"),y.find("."+o).children(".layui-icon").removeClass(u).addClass("layui-icon-file");var w=y.parents("."+v).eq(0);w.addClass(x),w.children("."+s).each(function(){i(this).children("."+v).children("."+s).last().addClass(k)})}else y.find(".layui-tree-iconArrow").addClass(c);e.parents("."+s).eq(0).removeClass(C),e.parent("."+v).remove()}e.remove()})})},b.prototype.events=function(){var e=this,a=e.config;e.elem.find(".layui-tree-checkedFirst");e.setChecked(e.checkids),e.elem.find(".layui-tree-search").on("keyup",function(){var n=i(this),t=n.val(),r=n.nextAll(),l=[];r.find("."+y).each(function(){var e=i(this).parents("."+p);if(i(this).html().indexOf(t)!=-1){l.push(i(this).parent());var a=function(e){e.addClass("layui-tree-searchShow"),e.parent("."+v)[0]&&a(e.parent("."+v).parent("."+s))};a(e.parent("."+s))}}),r.find("."+p).each(function(){var e=i(this).parent("."+s);e.hasClass("layui-tree-searchShow")||e.addClass(c)}),0==r.find(".layui-tree-searchShow").length&&e.elem.append(e.elemNone),a.onsearch&&a.onsearch({elem:l})}),e.elem.find(".layui-tree-search").on("keydown",function(){i(this).nextAll().find("."+p).each(function(){var e=i(this).parent("."+s);e.removeClass("layui-tree-searchShow "+c)}),i(".layui-tree-emptyText")[0]&&i(".layui-tree-emptyText").remove()})},b.prototype.getChecked=function(){var e=this,a=e.config,n=[],t=[];e.elem.find(".layui-form-checked").each(function(){n.push(i(this).prev()[0].value)});var r=function(e,a){layui.each(e,function(e,t){layui.each(n,function(e,n){if(t.id==n){var l=i.extend({},t);return delete l.children,a.push(l),t.children&&(l.children=[],r(t.children,l.children)),!0}})})};return r(i.extend({},a.data),t),t},b.prototype.setChecked=function(e){var a=this;a.config;a.elem.find("."+s).each(function(a,n){var t=i(this).data("id"),r=i(n).children("."+p).find('input[same="layuiTreeCheck"]'),l=r.next();if("number"==typeof e){if(t==e)return r[0].checked||l.click(),!1}else"object"==typeof e&&layui.each(e,function(e,i){if(i==t&&!r[0].checked)return l.click(),!0})})},l.that={},l.config={},r.reload=function(e,i){var a=l.that[e];return a.reload(i),l.call(a)},r.getChecked=function(e){var i=l.that[e];return i.getChecked()},r.setChecked=function(e,i){var a=l.that[e];return a.setChecked(i)},r.render=function(e){var i=new b(e);return l.call(i)},e(t,r)});layui.define(["laytpl","form"],function(e){"use strict";var a=layui.$,t=layui.laytpl,i=layui.form,n="transfer",l={config:{},index:layui[n]?layui[n].index+1e4:0,set:function(e){var t=this;return t.config=a.extend({},t.config,e),t},on:function(e,a){return layui.onevent.call(this,n,e,a)}},r=function(){var e=this,a=e.config,t=a.id||e.index;return r.that[t]=e,r.config[t]=a,{config:a,reload:function(a){e.reload.call(e,a)},getData:function(){return e.getData.call(e)}}},c="layui-hide",o="layui-btn-disabled",d="layui-none",s="layui-transfer-box",u="layui-transfer-header",h="layui-transfer-search",f="layui-transfer-active",y="layui-transfer-data",p=function(e){return e=e||{},['
      ','
      ','","
      ","{{# if(d.data.showSearch){ }}",'","{{# } }}",'
        ',"
        "].join("")},v=['
        ',p({index:0,checkAllName:"layTransferLeftCheckAll"}),'
        ','",'","
        ",p({index:1,checkAllName:"layTransferRightCheckAll"}),"
        "].join(""),x=function(e){var t=this;t.index=++l.index,t.config=a.extend({},t.config,l.config,e),t.render()};x.prototype.config={title:["\u5217\u8868\u4e00","\u5217\u8868\u4e8c"],width:200,height:360,data:[],value:[],showSearch:!1,id:"",text:{none:"\u65e0\u6570\u636e",searchNone:"\u65e0\u5339\u914d\u6570\u636e"}},x.prototype.reload=function(e){var t=this;t.config=a.extend({},t.config,e),t.render()},x.prototype.render=function(){var e=this,i=e.config,n=e.elem=a(t(v).render({data:i,index:e.index})),l=i.elem=a(i.elem);l[0]&&(i.data=i.data||[],i.value=i.value||[],e.key=i.id||e.index,l.html(e.elem),e.layBox=e.elem.find("."+s),e.layHeader=e.elem.find("."+u),e.laySearch=e.elem.find("."+h),e.layData=n.find("."+y),e.layBtn=n.find("."+f+" .layui-btn"),e.layBox.css({width:i.width,height:i.height}),e.layData.css({height:function(){return i.height-e.layHeader.outerHeight()-e.laySearch.outerHeight()-2}()}),e.renderData(),e.events())},x.prototype.renderData=function(){var e=this,a=(e.config,[{checkName:"layTransferLeftCheck",views:[]},{checkName:"layTransferRightCheck",views:[]}]);e.parseData(function(e){var t=e.selected?1:0,i=["
      • ",'',"
      • "].join("");a[t].views.push(i),delete e.selected}),e.layData.eq(0).html(a[0].views.join("")),e.layData.eq(1).html(a[1].views.join("")),e.renderCheckBtn()},x.prototype.renderForm=function(e){i.render(e,"LAY-transfer-"+this.index)},x.prototype.renderCheckBtn=function(e){var t=this,i=t.config;e=e||{},t.layBox.each(function(n){var l=a(this),r=l.find("."+y),d=l.find("."+u).find('input[type="checkbox"]'),s=r.find('input[type="checkbox"]'),h=0,f=!1;if(s.each(function(){var e=a(this).data("hide");(this.checked||this.disabled||e)&&h++,this.checked&&!e&&(f=!0)}),d.prop("checked",f&&h===s.length),t.layBtn.eq(n)[f?"removeClass":"addClass"](o),!e.stopNone){var p=r.children("li:not(."+c+")").length;t.noneView(r,p?"":i.text.none)}}),t.renderForm("checkbox")},x.prototype.noneView=function(e,t){var i=a('

        '+(t||"")+"

        ");e.find("."+d)[0]&&e.find("."+d).remove(),t.replace(/\s/g,"")&&e.append(i)},x.prototype.setValue=function(){var e=this,t=e.config,i=[];return e.layBox.eq(1).find("."+y+' input[type="checkbox"]').each(function(){var e=a(this).data("hide");e||i.push(this.value)}),t.value=i,e},x.prototype.parseData=function(e){var t=this,i=t.config,n=[];return layui.each(i.data,function(t,l){l=("function"==typeof i.parseData?i.parseData(l):l)||l,n.push(l=a.extend({},l)),layui.each(i.value,function(e,a){a==l.value&&(l.selected=!0)}),e&&e(l)}),i.data=n,t},x.prototype.getData=function(e){var a=this,t=a.config,i=[];return a.setValue(),layui.each(e||t.value,function(e,a){layui.each(t.data,function(e,t){delete t.selected,a==t.value&&i.push(t)})}),i},x.prototype.events=function(){var e=this,t=e.config;e.elem.on("click",'input[lay-filter="layTransferCheckbox"]+',function(){var t=a(this).prev(),i=t[0].checked,n=t.parents("."+s).eq(0).find("."+y);t[0].disabled||("all"===t.attr("lay-type")&&n.find('input[type="checkbox"]').each(function(){this.disabled||(this.checked=i)}),e.renderCheckBtn({stopNone:!0}))}),e.layBtn.on("click",function(){var i=a(this),n=i.data("index"),l=e.layBox.eq(n),r=[];if(!i.hasClass(o)){e.layBox.eq(n).each(function(t){var i=a(this),n=i.find("."+y);n.children("li").each(function(){var t=a(this),i=t.find('input[type="checkbox"]'),n=i.data("hide");i[0].checked&&!n&&(i[0].checked=!1,l.siblings("."+s).find("."+y).append(t.clone()),t.remove(),r.push(i[0].value)),e.setValue()})}),e.renderCheckBtn();var c=l.siblings("."+s).find("."+h+" input");""===c.val()||c.trigger("keyup"),t.onchange&&t.onchange(e.getData(r),n)}}),e.laySearch.find("input").on("keyup",function(){var i=this.value,n=a(this).parents("."+h).eq(0).siblings("."+y),l=n.children("li");l.each(function(){var e=a(this),t=e.find('input[type="checkbox"]'),n=t[0].title.indexOf(i)!==-1;e[n?"removeClass":"addClass"](c),t.data("hide",!n)}),e.renderCheckBtn();var r=l.length===n.children("li."+c).length;e.noneView(n,r?t.text.searchNone:"")})},r.that={},r.config={},l.reload=function(e,a){var t=r.that[e];return t.reload(a),r.call(t)},l.getData=function(e){var a=r.that[e];return a.getData()},l.render=function(e){var a=new x(e);return r.call(a)},e(n,l)});layui.define(["laytpl","laypage","layer","form","util"],function(e){"use strict";var t=layui.$,i=layui.laytpl,a=layui.laypage,l=layui.layer,n=layui.form,o=layui.util,r=layui.hint(),c=layui.device(),d={config:{checkName:"LAY_CHECKED",indexName:"LAY_TABLE_INDEX"},cache:{},index:layui.table?layui.table.index+1e4:0,set:function(e){var i=this;return i.config=t.extend({},i.config,e),i},on:function(e,t){return layui.onevent.call(this,h,e,t)}},s=function(){var e=this,t=e.config,i=t.id||t.index;return i&&(s.that[i]=e,s.config[i]=t),{config:t,reload:function(t,i){e.reload.call(e,t,i)},setColsWidth:function(){e.setColsWidth.call(e)},resize:function(){e.resize.call(e)}}},u=function(e){var t=s.config[e];return t||r.error(e?"The table instance with ID '"+e+"' not found":"ID argument required"),t||null},y=function(e,a,l,n){var r=this.config||{};r.escape&&(a=o.escape(a));var c=e.templet?function(){return"function"==typeof e.templet?e.templet(l):i(t(e.templet).html()||String(a)).render(l)}():a;return n?t("
        "+c+"
        ").text():c},h="table",f=".layui-table",p="layui-hide",v="layui-none",m="layui-table-view",g=".layui-table-tool",b=".layui-table-box",x=".layui-table-init",k=".layui-table-header",C=".layui-table-body",w=".layui-table-main",T=".layui-table-fixed",N=".layui-table-fixed-l",L=".layui-table-fixed-r",_=".layui-table-total",S=".layui-table-page",A=".layui-table-sort",R="layui-table-edit",W="layui-table-hover",z=function(e){var t='{{#if(item2.colspan){}} colspan="{{item2.colspan}}"{{#} if(item2.rowspan){}} rowspan="{{item2.rowspan}}"{{#}}}';return e=e||{},['',"","{{# layui.each(d.data.cols, function(i1, item1){ }}","","{{# layui.each(item1, function(i2, item2){ }}",'{{# if(item2.fixed && item2.fixed !== "right"){ left = true; } }}','{{# if(item2.fixed === "right"){ right = true; } }}',function(){return e.fixed&&"right"!==e.fixed?'{{# if(item2.fixed && item2.fixed !== "right"){ }}':"right"===e.fixed?'{{# if(item2.fixed === "right"){ }}':""}(),"{{# var isSort = !(item2.colGroup) && item2.sort; }}",'",e.fixed?"{{# }; }}":"","{{# }); }}","","{{# }); }}","","
        ','
        ','{{# if(item2.type === "checkbox"){ }}','',"{{# } else { }}",'{{item2.title||""}}',"{{# if(isSort){ }}",'',"{{# } }}","{{# } }}","
        ","
        "].join("")},E=['',"","
        "].join(""),j=['
        ',"{{# if(d.data.toolbar){ }}",'
        ','
        ','
        ',"
        ","{{# } }}",'
        ',"{{# if(d.data.loading){ }}",'
        ','',"
        ","{{# } }}","{{# var left, right; }}",'
        ',z(),"
        ",'
        ',E,"
        ","{{# if(left){ }}",'
        ','
        ',z({fixed:!0}),"
        ",'
        ',E,"
        ","
        ","{{# }; }}","{{# if(right){ }}",'
        ','
        ',z({fixed:"right"}),'
        ',"
        ",'
        ',E,"
        ","
        ","{{# }; }}","
        ","{{# if(d.data.totalRow){ }}",'
        ','','',"
        ","
        ","{{# } }}","{{# if(d.data.page){ }}",'
        ','
        ',"
        ","{{# } }}","","
        "].join(""),F=t(window),I=t(document),H=function(e){var i=this;i.index=++d.index,i.config=t.extend({},i.config,d.config,e),i.render()};H.prototype.config={limit:10,loading:!0,cellMinWidth:60,defaultToolbar:["filter","exports","print"],autoSort:!0,text:{none:"\u65e0\u6570\u636e"}},H.prototype.render=function(){var e=this,a=e.config;if(a.elem=t(a.elem),a.where=a.where||{},a.id=a.id||a.elem.attr("id")||e.index,a.request=t.extend({pageName:"page",limitName:"limit"},a.request),a.response=t.extend({statusName:"code",statusCode:0,msgName:"msg",dataName:"data",totalRowName:"totalRow",countName:"count"},a.response),"object"==typeof a.page&&(a.limit=a.page.limit||a.limit,a.limits=a.page.limits||a.limits,e.page=a.page.curr=a.page.curr||1,delete a.page.elem,delete a.page.jump),!a.elem[0])return e;a.height&&/^full-\d+$/.test(a.height)&&(e.fullHeightGap=a.height.split("-")[1],a.height=F.height()-e.fullHeightGap),e.setInit();var l=a.elem,n=l.next("."+m),o=e.elem=t(i(j).render({VIEW_CLASS:m,data:a,index:e.index}));if(a.index=e.index,e.key=a.id||a.index,n[0]&&n.remove(),l.after(o),e.layTool=o.find(g),e.layBox=o.find(b),e.layHeader=o.find(k),e.layMain=o.find(w),e.layBody=o.find(C),e.layFixed=o.find(T),e.layFixLeft=o.find(N),e.layFixRight=o.find(L),e.layTotal=o.find(_),e.layPage=o.find(S),e.renderToolbar(),e.fullSize(),a.cols.length>1){var r=e.layFixed.find(k).find("th");r.height(e.layHeader.height()-1-parseFloat(r.css("padding-top"))-parseFloat(r.css("padding-bottom")))}e.pullData(e.page),e.events()},H.prototype.initOpts=function(e){var t=this,i=(t.config,{checkbox:48,radio:48,space:15,numbers:40});e.checkbox&&(e.type="checkbox"),e.space&&(e.type="space"),e.type||(e.type="normal"),"normal"!==e.type&&(e.unresize=!0,e.width=e.width||i[e.type])},H.prototype.setInit=function(e){var t=this,i=t.config;return i.clientWidth=i.width||function(){var e=function(t){var a,l;t=t||i.elem.parent(),a=t.width();try{l="none"===t.css("display")}catch(n){}return!t[0]||a&&!l?a:e(t.parent())};return e()}(),"width"===e?i.clientWidth:void layui.each(i.cols,function(e,a){layui.each(a,function(l,n){if(!n)return void a.splice(l,1);if(n.key=e+"-"+l,n.hide=n.hide||!1,n.colGroup||n.colspan>1){var o=0;layui.each(i.cols[e+1],function(t,i){i.HAS_PARENT||o>1&&o==n.colspan||(i.HAS_PARENT=!0,i.parentKey=e+"-"+l,o+=parseInt(i.colspan>1?i.colspan:1))}),n.colGroup=!0}t.initOpts(n)})})},H.prototype.renderToolbar=function(){var e=this,a=e.config,l=['
        ','
        ','
        '].join(""),n=e.layTool.find(".layui-table-tool-temp");if("default"===a.toolbar)n.html(l);else if("string"==typeof a.toolbar){var o=t(a.toolbar).html()||"";o&&n.html(i(o).render(a))}var r={filter:{title:"\u7b5b\u9009\u5217",layEvent:"LAYTABLE_COLS",icon:"layui-icon-cols"},exports:{title:"\u5bfc\u51fa",layEvent:"LAYTABLE_EXPORT",icon:"layui-icon-export"},print:{title:"\u6253\u5370",layEvent:"LAYTABLE_PRINT",icon:"layui-icon-print"}},c=[];"object"==typeof a.defaultToolbar&&layui.each(a.defaultToolbar,function(e,t){var i="string"==typeof t?r[t]:t;i&&c.push('
        ')}),e.layTool.find(".layui-table-tool-self").html(c.join(""))},H.prototype.setParentCol=function(e,t){var i=this,a=i.config,l=i.layHeader.find('th[data-key="'+a.index+"-"+t+'"]'),n=parseInt(l.attr("colspan"))||0;if(l[0]){var o=t.split("-"),r=a.cols[o[0]][o[1]];e?n--:n++,l.attr("colspan",n),l[n<1?"addClass":"removeClass"](p),r.colspan=n,r.hide=n<1;var c=l.data("parentkey");c&&i.setParentCol(e,c)}},H.prototype.setColsPatch=function(){var e=this,t=e.config;layui.each(t.cols,function(t,i){layui.each(i,function(t,i){i.hide&&e.setParentCol(i.hide,i.parentKey)})})},H.prototype.setColsWidth=function(){var e=this,t=e.config,i=0,a=0,l=0,n=0,o=e.setInit("width");e.eachCols(function(e,t){t.hide||i++}),o=o-function(){return"line"===t.skin||"nob"===t.skin?2:i+1}()-e.getScrollWidth(e.layMain[0])-1;var r=function(e){layui.each(t.cols,function(i,r){layui.each(r,function(i,c){var d=0,s=c.minWidth||t.cellMinWidth;return c?void(c.colGroup||c.hide||(e?l&&ln&&a&&(l=(o-n)/a)};r(),r(!0),e.autoColNums=a,e.eachCols(function(i,a){var n=a.minWidth||t.cellMinWidth;a.colGroup||a.hide||(0===a.width?e.getCssRule(t.index+"-"+a.key,function(e){e.style.width=Math.floor(l>=n?l:n)+"px"}):/\d+%$/.test(a.width)&&e.getCssRule(t.index+"-"+a.key,function(e){e.style.width=Math.floor(parseFloat(a.width)/100*o)+"px"}))});var c=e.layMain.width()-e.getScrollWidth(e.layMain[0])-e.layMain.children("table").outerWidth();if(e.autoColNums&&c>=-i&&c<=i){var d=function(t){var i;return t=t||e.layHeader.eq(0).find("thead th:last-child"),i=t.data("field"),!i&&t.prev()[0]?d(t.prev()):t},s=d(),u=s.data("key");e.getCssRule(u,function(t){var i=t.style.width||s.outerWidth();t.style.width=parseFloat(i)+c+"px",e.layMain.height()-e.layMain.prop("clientHeight")>0&&(t.style.width=parseFloat(t.style.width)-1+"px")})}e.loading(!0)},H.prototype.resize=function(){var e=this;e.fullSize(),e.setColsWidth(),e.scrollPatch()},H.prototype.reload=function(e,i){var a=this;e=e||{},delete a.haveInit,layui.each(e,function(e,t){"array"===layui._typeof(t)&&delete a.config[e]}),a.config=t.extend(i,{},a.config,e),a.render()},H.prototype.errorView=function(e){var i=this,a=i.layMain.find("."+v),l=t('
        '+(e||"Error")+"
        ");a[0]&&(i.layNone.remove(),a.remove()),i.layFixed.addClass(p),i.layMain.find("tbody").html(""),i.layMain.append(i.layNone=l),d.cache[i.key]=[]},H.prototype.page=1,H.prototype.pullData=function(e){var i=this,a=i.config,l=a.request,n=a.response,o=function(){"object"==typeof a.initSort&&i.sort(a.initSort.field,a.initSort.type)};if(i.startTime=(new Date).getTime(),a.url){var r={};r[l.pageName]=e,r[l.limitName]=a.limit;var c=t.extend(r,a.where);a.contentType&&0==a.contentType.indexOf("application/json")&&(c=JSON.stringify(c)),i.loading(),t.ajax({type:a.method||"get",url:a.url,contentType:a.contentType,data:c,dataType:"json",headers:a.headers||{},success:function(t){"function"==typeof a.parseData&&(t=a.parseData(t)||t),t[n.statusName]!=n.statusCode?(i.renderForm(),i.errorView(t[n.msgName]||'\u8fd4\u56de\u7684\u6570\u636e\u4e0d\u7b26\u5408\u89c4\u8303\uff0c\u6b63\u786e\u7684\u6210\u529f\u72b6\u6001\u7801\u5e94\u4e3a\uff1a"'+n.statusName+'": '+n.statusCode)):(i.renderData(t,e,t[n.countName]),o(),a.time=(new Date).getTime()-i.startTime+" ms"),i.setColsWidth(),"function"==typeof a.done&&a.done(t,e,t[n.countName])},error:function(e,t){i.errorView("\u8bf7\u6c42\u5f02\u5e38\uff0c\u9519\u8bef\u63d0\u793a\uff1a"+t),i.renderForm(),i.setColsWidth(),"function"==typeof a.error&&a.error(e,t)}})}else if("array"===layui._typeof(a.data)){var d={},s=e*a.limit-a.limit;d[n.dataName]=a.data.concat().splice(s,a.limit),d[n.countName]=a.data.length,"object"==typeof a.totalRow&&(d[n.totalRowName]=t.extend({},a.totalRow)),i.renderData(d,e,d[n.countName]),o(),i.setColsWidth(),"function"==typeof a.done&&a.done(d,e,d[n.countName])}},H.prototype.eachCols=function(e){var t=this;return d.eachCols(null,e,t.config.cols),t},H.prototype.renderData=function(e,n,o,r){var c=this,s=c.config,u=e[s.response.dataName]||[],h=e[s.response.totalRowName],f=[],m=[],g=[],b=function(){var e;return!r&&c.sortKey?c.sort(c.sortKey.field,c.sortKey.sort,!0):(layui.each(u,function(a,l){var o=[],u=[],h=[],v=a+s.limit*(n-1)+1;"array"===layui._typeof(l)&&0===l.length||(r||(l[d.config.indexName]=a),c.eachCols(function(n,r){var f=r.field||n,m=s.index+"-"+r.key,g=l[f];if(void 0!==g&&null!==g||(g=""),!r.colGroup){var b=['','
        '+function(){var n=t.extend(!0,{LAY_INDEX:v,LAY_COL:r},l),o=d.config.checkName;switch(r.type){case"checkbox":return'";case"radio":return n[o]&&(e=a),'';case"numbers":return v}return r.toolbar?i(t(r.toolbar).html()||"").render(n):y.call(c,r,g,n)}(),"
        "].join("");o.push(b),r.fixed&&"right"!==r.fixed&&u.push(b),"right"===r.fixed&&h.push(b)}}),f.push(''+o.join("")+""),m.push(''+u.join("")+""),g.push(''+h.join("")+""))}),c.layBody.scrollTop(0),c.layMain.find("."+v).remove(),c.layMain.find("tbody").html(f.join("")),c.layFixLeft.find("tbody").html(m.join("")),c.layFixRight.find("tbody").html(g.join("")),c.renderForm(),"number"==typeof e&&c.setThisRowChecked(e),c.syncCheckAll(),c.haveInit?c.scrollPatch():setTimeout(function(){c.scrollPatch()},50),c.haveInit=!0,l.close(c.tipsIndex),s.HAS_SET_COLS_PATCH||c.setColsPatch(),void(s.HAS_SET_COLS_PATCH=!0))};return d.cache[c.key]=u,c.layPage[0==o||0===u.length&&1==n?"addClass":"removeClass"](p),0===u.length?(c.renderForm(),c.errorView(s.text.none)):(c.layFixed.removeClass(p),r?b():(b(),c.renderTotal(u,h),void(s.page&&(s.page=t.extend({elem:"layui-table-page"+s.index,count:o,limit:s.limit,limits:s.limits||[10,20,30,40,50,60,70,80,90],groups:3,layout:["prev","page","next","skip","count","limit"],prev:'',next:'',jump:function(e,t){t||(c.page=e.curr,s.limit=e.limit,c.pullData(e.curr))}},s.page),s.page.count=o,a.render(s.page)))))},H.prototype.renderTotal=function(e,a){var l=this,n=l.config,o={};if(n.totalRow){layui.each(e,function(e,t){"array"===layui._typeof(t)&&0===t.length||l.eachCols(function(e,i){var a=i.field||e,l=t[a];i.totalRow&&(o[a]=(o[a]||0)+(parseFloat(l)||0))})}),l.dataTotal={};var r=[];l.eachCols(function(e,c){var d=c.field||e,s=function(){var e,t=c.totalRowText||"",i=parseFloat(o[d]).toFixed(2),n={};return n[d]=i,e=c.totalRow?y.call(l,c,i,n)||t:t,a?a[c.field]||e:e}(),u=['','
        '+function(){var e=c.totalRow||n.totalRow;return"string"==typeof e?i(e).render(t.extend({TOTAL_NUMS:s},c)):s}(),"
        "].join("");c.field&&(l.dataTotal[d]=s),r.push(u)}),l.layTotal.find("tbody").html(""+r.join("")+"")}},H.prototype.getColElem=function(e,t){var i=this,a=i.config;return e.eq(0).find(".laytable-cell-"+(a.index+"-"+t)+":eq(0)")},H.prototype.renderForm=function(e){n.render(e,"LAY-table-"+this.index)},H.prototype.setThisRowChecked=function(e){var t=this,i=(t.config,"layui-table-click"),a=t.layBody.find('tr[data-index="'+e+'"]');a.addClass(i).siblings("tr").removeClass(i)},H.prototype.sort=function(e,i,a,l){var n,o,c=this,s={},u=c.config,y=u.elem.attr("lay-filter"),f=d.cache[c.key];"string"==typeof e&&(n=e,c.layHeader.find("th").each(function(i,a){var l=t(this),o=l.data("field");if(o===e)return e=l,n=o,!1}));try{var n=n||e.data("field"),p=e.data("key");if(c.sortKey&&!a&&n===c.sortKey.field&&i===c.sortKey.sort)return;var v=c.layHeader.find("th .laytable-cell-"+p).find(A);c.layHeader.find("th").find(A).removeAttr("lay-sort"),v.attr("lay-sort",i||null),c.layFixed.find("th")}catch(m){r.error("Table modules: sort field '"+n+"' not matched")}c.sortKey={field:n,sort:i},u.autoSort&&("asc"===i?o=layui.sort(f,n):"desc"===i?o=layui.sort(f,n,!0):(o=layui.sort(f,d.config.indexName),delete c.sortKey)),s[u.response.dataName]=o||f,c.renderData(s,c.page,c.count,!0),l&&layui.event.call(e,h,"sort("+y+")",{field:n,type:i})},H.prototype.loading=function(e){var i=this,a=i.config;a.loading&&(e?(i.layInit&&i.layInit.remove(),delete i.layInit,i.layBox.find(x).remove()):(i.layInit=t(['
        ','',"
        "].join("")),i.layBox.append(i.layInit)))},H.prototype.setCheckData=function(e,t){var i=this,a=i.config,l=d.cache[i.key];l[e]&&"array"!==layui._typeof(l[e])&&(l[e][a.checkName]=t)},H.prototype.syncCheckAll=function(){var e=this,t=e.config,i=e.layHeader.find('input[name="layTableCheckbox"]'),a=function(i){return e.eachCols(function(e,a){"checkbox"===a.type&&(a[t.checkName]=i)}),i};i[0]&&(d.checkStatus(e.key).isAll?(i[0].checked||(i.prop("checked",!0),e.renderForm("checkbox")),a(!0)):(i[0].checked&&(i.prop("checked",!1),e.renderForm("checkbox")),a(!1)))},H.prototype.getCssRule=function(e,t){var i=this,a=i.elem.find("style")[0],l=a.sheet||a.styleSheet||{},n=l.cssRules||l.rules;layui.each(n,function(i,a){if(a.selectorText===".laytable-cell-"+e)return t(a),!0})},H.prototype.fullSize=function(){var e,t=this,i=t.config,a=i.height;t.fullHeightGap&&(a=F.height()-t.fullHeightGap,a<135&&(a=135),t.elem.css("height",a)),a&&(e=parseFloat(a)-(t.layHeader.outerHeight()||38),i.toolbar&&(e-=t.layTool.outerHeight()||50),i.totalRow&&(e-=t.layTotal.outerHeight()||40),i.page&&(e-=t.layPage.outerHeight()||41),t.layMain.css("height",e-2))},H.prototype.getScrollWidth=function(e){var t=0;return e?t=e.offsetWidth-e.clientWidth:(e=document.createElement("div"),e.style.width="100px",e.style.height="100px",e.style.overflowY="scroll",document.body.appendChild(e),t=e.offsetWidth-e.clientWidth,document.body.removeChild(e)),t},H.prototype.scrollPatch=function(){var e=this,i=e.layMain.children("table"),a=e.layMain.width()-e.layMain.prop("clientWidth"),l=e.layMain.height()-e.layMain.prop("clientHeight"),n=(e.getScrollWidth(e.layMain[0]),i.outerWidth()-e.layMain.width()),o=function(e){if(a&&l){if(e=e.eq(0),!e.find(".layui-table-patch")[0]){var i=t('
        ');i.find("div").css({width:a}),e.find("tr").append(i)}}else e.find(".layui-table-patch").remove()};o(e.layHeader),o(e.layTotal);var r=e.layMain.height(),c=r-l;e.layFixed.find(C).css("height",i.height()>=c?c:"auto"),e.layFixRight[n>0?"removeClass":"addClass"](p),e.layFixRight.css("right",a-1)},H.prototype.events=function(){var e,i=this,a=i.config,o=t("body"),r={},s=i.layHeader.find("th"),u=".layui-table-cell",f=a.elem.attr("lay-filter");i.layTool.on("click","*[lay-event]",function(e){var o=t(this),r=o.attr("lay-event"),s=function(e){var l=t(e.list),n=t('
          ');n.html(l),a.height&&n.css("max-height",a.height-(i.layTool.outerHeight()||50)),o.find(".layui-table-tool-panel")[0]||o.append(n),i.renderForm(),n.on("click",function(e){layui.stope(e)}),e.done&&e.done(n,l)};switch(layui.stope(e),I.trigger("table.tool.panel.remove"),l.close(i.tipsIndex),r){case"LAYTABLE_COLS":s({list:function(){var e=[];return i.eachCols(function(t,i){i.field&&"normal"==i.type&&e.push('
        • ')}),e.join("")}(),done:function(){n.on("checkbox(LAY_TABLE_TOOL_COLS)",function(e){var l=t(e.elem),n=this.checked,o=l.data("key"),r=l.data("parentkey");layui.each(a.cols,function(e,t){layui.each(t,function(t,l){if(e+"-"+t===o){var c=l.hide;l.hide=!n,i.elem.find('*[data-key="'+a.index+"-"+o+'"]')[n?"removeClass":"addClass"](p),c!=l.hide&&i.setParentCol(!n,r),i.resize()}})})})}});break;case"LAYTABLE_EXPORT":c.ie?l.tips("\u5bfc\u51fa\u529f\u80fd\u4e0d\u652f\u6301 IE\uff0c\u8bf7\u7528 Chrome \u7b49\u9ad8\u7ea7\u6d4f\u89c8\u5668\u5bfc\u51fa",this,{tips:3}):s({list:function(){return['
        • \u5bfc\u51fa\u5230 Csv \u6587\u4ef6
        • ','
        • \u5bfc\u51fa\u5230 Excel \u6587\u4ef6
        • '].join("")}(),done:function(e,l){l.on("click",function(){var e=t(this).data("type");d.exportFile.call(i,a.id,null,e)})}});break;case"LAYTABLE_PRINT":var u=window.open("\u6253\u5370\u7a97\u53e3","_blank"),y=[""].join(""),v=t(i.layHeader.html());v.append(i.layMain.find("table").html()),v.append(i.layTotal.find("table").html()),v.find("th.layui-table-patch").remove(),v.find(".layui-table-col-special").remove(),u.document.write(y+v.prop("outerHTML")),u.document.close(),u.print(),u.close()}layui.event.call(this,h,"toolbar("+f+")",t.extend({event:r,config:a},{}))}),s.on("mousemove",function(e){var i=t(this),a=i.offset().left,l=e.clientX-a;i.data("unresize")||r.resizeStart||(r.allowResize=i.width()-l<=10,o.css("cursor",r.allowResize?"col-resize":""))}).on("mouseleave",function(){t(this);r.resizeStart||o.css("cursor","")}).on("mousedown",function(e){var l=t(this);if(r.allowResize){var n=l.data("key");e.preventDefault(),r.resizeStart=!0,r.offset=[e.clientX,e.clientY],i.getCssRule(n,function(e){var t=e.style.width||l.outerWidth();r.rule=e,r.ruleWidth=parseFloat(t),r.minWidth=l.data("minwidth")||a.cellMinWidth})}}),I.on("mousemove",function(t){if(r.resizeStart){if(t.preventDefault(),r.rule){var a=r.ruleWidth+t.clientX-r.offset[0];a');return n[0].value=i.data("content")||l.text(),i.find("."+R)[0]||i.append(n),n.focus(),void layui.stope(e)}}).on("mouseenter","td",function(){b.call(this)}).on("mouseleave","td",function(){b.call(this,"hide")});var g="layui-table-grid-down",b=function(e){var i=t(this),a=i.children(u);if(!i.data("off"))if(e)i.find(".layui-table-grid-down").remove();else if(a.prop("scrollWidth")>a.outerWidth()){if(a.find("."+g)[0])return;i.append('
          ')}};i.layBody.on("click","."+g,function(e){var n=t(this),o=n.parent(),r=o.children(u);i.tipsIndex=l.tips(['
          ',r.html(),"
          ",''].join(""),r[0],{tips:[3,""],time:-1,anim:-1,maxWidth:c.ios||c.android?300:i.elem.width()/2,isOutAnim:!1,skin:"layui-table-tips",success:function(e,t){e.find(".layui-table-tips-c").on("click",function(){l.close(t)})}}),layui.stope(e)}),i.layBody.on("click","*[lay-event]",function(){var e=t(this),a=e.parents("tr").eq(0).data("index");layui.event.call(this,h,"tool("+f+")",v.call(this,{event:e.attr("lay-event")})),i.setThisRowChecked(a)}),i.layMain.on("scroll",function(){var e=t(this),a=e.scrollLeft(),n=e.scrollTop();i.layHeader.scrollLeft(a),i.layTotal.scrollLeft(a),i.layFixed.find(C).scrollTop(n),l.close(i.tipsIndex)}),F.on("resize",function(){i.resize()})},function(){I.on("click",function(){I.trigger("table.remove.tool.panel")}),I.on("table.remove.tool.panel",function(){t(".layui-table-tool-panel").remove()})}(),d.init=function(e,i){i=i||{};var a=this,l=t(e?'table[lay-filter="'+e+'"]':f+"[lay-data]"),n="Table element property lay-data configuration item has a syntax error: ";return l.each(function(){var a=t(this),l=a.attr("lay-data");try{l=new Function("return "+l)()}catch(o){r.error(n+l,"error")}var c=[],s=t.extend({elem:this,cols:[],data:[],skin:a.attr("lay-skin"),size:a.attr("lay-size"),even:"string"==typeof a.attr("lay-even")},d.config,i,l);e&&a.hide(),a.find("thead>tr").each(function(e){s.cols[e]=[],t(this).children().each(function(i){var a=t(this),l=a.attr("lay-data");try{l=new Function("return "+l)()}catch(o){return r.error(n+l)}var d=t.extend({title:a.text(),colspan:a.attr("colspan")||0,rowspan:a.attr("rowspan")||0},l);d.colspan<2&&c.push(d),s.cols[e].push(d)})}),a.find("tbody>tr").each(function(e){var i=t(this),a={};i.children("td").each(function(e,i){var l=t(this),n=l.data("field");if(n)return a[n]=l.html()}),layui.each(c,function(e,t){var l=i.children("td").eq(e);a[t.field]=l.html()}),s.data[e]=a}),d.render(s)}),a},s.that={},s.config={},d.eachCols=function(e,i,a){var l=s.config[e]||{},n=[],o=0;a=t.extend(!0,[],a||l.cols),layui.each(a,function(e,t){layui.each(t,function(t,i){if(i.colGroup){var l=0;o++,i.CHILD_COLS=[],layui.each(a[e+1],function(e,t){t.PARENT_COL_INDEX||l>1&&l==i.colspan||(t.PARENT_COL_INDEX=o,i.CHILD_COLS.push(t),l+=parseInt(t.colspan>1?t.colspan:1))})}i.PARENT_COL_INDEX||n.push(i)})});var r=function(e){layui.each(e||n,function(e,t){return t.CHILD_COLS?r(t.CHILD_COLS):void("function"==typeof i&&i(e,t))})};r()},d.checkStatus=function(e){var t=0,i=0,a=[],l=d.cache[e]||[];return layui.each(l,function(e,l){return"array"===layui._typeof(l)?void i++:void(l[d.config.checkName]&&(t++,a.push(d.clearCacheKey(l))))}),{data:a,isAll:!!l.length&&t===l.length-i}},d.getData=function(e){var t=[],i=d.cache[e]||[];return layui.each(i,function(e,i){"array"!==layui._typeof(i)&&t.push(d.clearCacheKey(i))}),t},d.exportFile=function(e,t,i){var a=this;t=t||d.clearCacheKey(d.cache[e]),i=i||"csv";var l=s.that[e],n=s.config[e]||{},o={csv:"text/csv",xls:"application/vnd.ms-excel"}[i],u=document.createElement("a");return c.ie?r.error("IE_NOT_SUPPORT_EXPORTS"):(u.href="data:"+o+";charset=utf-8,\ufeff"+encodeURIComponent(function(){var i=[],n=[],o=[];return layui.each(t,function(t,a){var o=[];"object"==typeof e?(layui.each(e,function(e,a){0==t&&i.push(a||"")}),layui.each(d.clearCacheKey(a),function(e,t){o.push('"'+(t||"")+'"')})):d.eachCols(e,function(e,n){if(n.field&&"normal"==n.type&&!n.hide){var r=a[n.field];void 0!==r&&null!==r||(r=""),0==t&&i.push(n.title||""),o.push('"'+y.call(l,n,r,a,"text")+'"')}}),n.push(o.join(","))}),layui.each(a.dataTotal,function(e,t){o.push(t)}),i.join(",")+"\r\n"+n.join("\r\n")+"\r\n"+o.join(",")}()),u.download=(n.title||"table_"+(n.index||""))+"."+i,document.body.appendChild(u),u.click(),void document.body.removeChild(u))},d.resize=function(e){if(e){var t=u(e);if(!t)return;s.that[e].resize()}else layui.each(s.that,function(){ +this.resize()})},d.reload=function(e,t,i){var a=u(e);if(a){var l=s.that[e];return l.reload(t,i),s.call(l)}},d.render=function(e){var t=new H(e);return s.call(t)},d.clearCacheKey=function(e){return e=t.extend({},e),delete e[d.config.checkName],delete e[d.config.indexName],e},t(function(){d.init()}),e(h,d)});layui.define("jquery",function(e){"use strict";var i=layui.$,n=(layui.hint(),layui.device(),{config:{},set:function(e){var n=this;return n.config=i.extend({},n.config,e),n},on:function(e,i){return layui.onevent.call(this,t,e,i)}}),t="carousel",a="layui-this",l=">*[carousel-item]>*",o="layui-carousel-left",r="layui-carousel-right",d="layui-carousel-prev",s="layui-carousel-next",u="layui-carousel-arrow",c="layui-carousel-ind",m=function(e){var t=this;t.config=i.extend({},t.config,n.config,e),t.render()};m.prototype.config={width:"600px",height:"280px",full:!1,arrow:"hover",indicator:"inside",autoplay:!0,interval:3e3,anim:"",trigger:"click",index:0},m.prototype.render=function(){var e=this,n=e.config;n.elem=i(n.elem),n.elem[0]&&(e.elemItem=n.elem.find(l),n.index<0&&(n.index=0),n.index>=e.elemItem.length&&(n.index=e.elemItem.length-1),n.interval<800&&(n.interval=800),n.full?n.elem.css({position:"fixed",width:"100%",height:"100%",zIndex:9999}):n.elem.css({width:n.width,height:n.height}),n.elem.attr("lay-anim",n.anim),e.elemItem.eq(n.index).addClass(a),e.elemItem.length<=1||(e.indicator(),e.arrow(),e.autoplay(),e.events()))},m.prototype.reload=function(e){var n=this;clearInterval(n.timer),n.config=i.extend({},n.config,e),n.render()},m.prototype.prevIndex=function(){var e=this,i=e.config,n=i.index-1;return n<0&&(n=e.elemItem.length-1),n},m.prototype.nextIndex=function(){var e=this,i=e.config,n=i.index+1;return n>=e.elemItem.length&&(n=0),n},m.prototype.addIndex=function(e){var i=this,n=i.config;e=e||1,n.index=n.index+e,n.index>=i.elemItem.length&&(n.index=0)},m.prototype.subIndex=function(e){var i=this,n=i.config;e=e||1,n.index=n.index-e,n.index<0&&(n.index=i.elemItem.length-1)},m.prototype.autoplay=function(){var e=this,i=e.config;i.autoplay&&(clearInterval(e.timer),e.timer=setInterval(function(){e.slide()},i.interval))},m.prototype.arrow=function(){var e=this,n=e.config,t=i(['",'"].join(""));n.elem.attr("lay-arrow",n.arrow),n.elem.find("."+u)[0]&&n.elem.find("."+u).remove(),n.elem.append(t),t.on("click",function(){var n=i(this),t=n.attr("lay-type");e.slide(t)})},m.prototype.indicator=function(){var e=this,n=e.config,t=e.elemInd=i(['
            ',function(){var i=[];return layui.each(e.elemItem,function(e){i.push("")}),i.join("")}(),"
          "].join(""));n.elem.attr("lay-indicator",n.indicator),n.elem.find("."+c)[0]&&n.elem.find("."+c).remove(),n.elem.append(t),"updown"===n.anim&&t.css("margin-top",-(t.height()/2)),t.find("li").on("hover"===n.trigger?"mouseover":n.trigger,function(){var t=i(this),a=t.index();a>n.index?e.slide("add",a-n.index):al.length&&(l.value=l.length),parseInt(l.value)!==l.value&&(l.half||(l.value=Math.ceil(l.value)-l.value<.5?Math.ceil(l.value):Math.floor(l.value)));for(var n='
            ",s=1;s<=l.length;s++){var r='
          • ";l.half&&parseInt(l.value)!==l.value&&s==Math.ceil(l.value)?n=n+'
          • ":n+=r}n+="
          "+(l.text?''+l.value+"\u661f":"")+"";var c=l.elem,f=c.next("."+t);f[0]&&f.remove(),e.elemTemp=a(n),l.span=e.elemTemp.next("span"),l.setText&&l.setText(l.value),c.html(e.elemTemp),c.addClass("layui-inline"),l.readonly||e.action()},v.prototype.setvalue=function(e){var a=this,l=a.config;l.value=e,a.render()},v.prototype.action=function(){var e=this,l=e.config,i=e.elemTemp,n=i.find("i").width();i.children("li").each(function(e){var t=e+1,v=a(this);v.on("click",function(e){if(l.value=t,l.half){var o=e.pageX-a(this).offset().left;o<=n/2&&(l.value=l.value-.5)}l.text&&i.next("span").text(l.value+"\u661f"),l.choose&&l.choose(l.value),l.setText&&l.setText(l.value)}),v.on("mousemove",function(e){if(i.find("i").each(function(){a(this).addClass(o).removeClass(r)}),i.find("i:lt("+t+")").each(function(){a(this).addClass(u).removeClass(f)}),l.half){var c=e.pageX-a(this).offset().left;c<=n/2&&v.children("i").addClass(s).removeClass(u)}}),v.on("mouseleave",function(){i.find("i").each(function(){a(this).addClass(o).removeClass(r)}),i.find("i:lt("+Math.floor(l.value)+")").each(function(){a(this).addClass(u).removeClass(f)}),l.half&&parseInt(l.value)!==l.value&&i.children("li:eq("+Math.floor(l.value)+")").children("i").addClass(s).removeClass(c)})})},v.prototype.events=function(){var e=this;e.config},l.render=function(e){var a=new v(e);return i.call(a)},e(n,l)});layui.define("jquery",function(e){"use strict";var l=layui.$,o=function(e){},t='';o.prototype.load=function(e){var o,i,n,r,a=this,c=0;e=e||{};var m=l(e.elem);if(m[0]){var f=l(e.scrollElem||document),u=e.mb||50,s=!("isAuto"in e)||e.isAuto,y=e.end||"\u6ca1\u6709\u66f4\u591a\u4e86",v=e.scrollElem&&e.scrollElem!==document,d="\u52a0\u8f7d\u66f4\u591a",h=l('");m.find(".layui-flow-more")[0]||m.append(h);var p=function(e,t){e=l(e),h.before(e),t=0==t||null,t?h.html(y):h.find("a").html(d),i=t,o=null,n&&n()},g=function(){o=!0,h.find("a").html(t),"function"==typeof e.done&&e.done(++c,p)};if(g(),h.find("a").on("click",function(){l(this);i||o||g()}),e.isLazyimg)var n=a.lazyimg({elem:e.elem+" img",scrollElem:e.scrollElem});return s?(f.on("scroll",function(){var e=l(this),t=e.scrollTop();r&&clearTimeout(r),!i&&m.width()&&(r=setTimeout(function(){var i=v?e.height():l(window).height(),n=v?e.prop("scrollHeight"):document.documentElement.scrollHeight;n-t-i<=u&&(o||g())},100))}),a):a}},o.prototype.lazyimg=function(e){var o,t=this,i=0;e=e||{};var n=l(e.scrollElem||document),r=e.elem||"img",a=e.scrollElem&&e.scrollElem!==document,c=function(e,l){var o=n.scrollTop(),r=o+l,c=a?function(){return e.offset().top-n.offset().top+o}():e.offset().top;if(c>=o&&c<=r&&e.attr("lay-src")){var f=e.attr("lay-src");layui.img(f,function(){var l=t.lazyimg.elem.eq(i);e.attr("src",f).removeAttr("lay-src"),l[0]&&m(l),i++},function(){t.lazyimg.elem.eq(i);e.removeAttr("lay-src")})}},m=function(e,o){var m=a?(o||n).height():l(window).height(),f=n.scrollTop(),u=f+m;if(t.lazyimg.elem=l(r),e)c(e,m);else for(var s=0;su)break}};if(m(),!o){var f;n.on("scroll",function(){var e=l(this);f&&clearTimeout(f),f=setTimeout(function(){m(null,e)},50)}),o=!0}return m},e("flow",new o)});layui.define(["layer","form"],function(t){"use strict";var e=layui.$,i=layui.layer,a=layui.form,l=(layui.hint(),layui.device()),n="layedit",o="layui-show",r="layui-disabled",c=function(){var t=this;t.index=0,t.config={tool:["strong","italic","underline","del","|","left","center","right","|","link","unlink","face","image"],hideTool:[],height:280}};c.prototype.set=function(t){var i=this;return e.extend(!0,i.config,t),i},c.prototype.on=function(t,e){return layui.onevent(n,t,e)},c.prototype.build=function(t,i){i=i||{};var a=this,n=a.config,r="layui-layedit",c=e("string"==typeof t?"#"+t:t),u="LAY_layedit_"+ ++a.index,d=c.next("."+r),y=e.extend({},n,i),f=function(){var t=[],e={};return layui.each(y.hideTool,function(t,i){e[i]=!0}),layui.each(y.tool,function(i,a){C[a]&&!e[a]&&t.push(C[a])}),t.join("")}(),m=e(['
          ','
          '+f+"
          ",'
          ','',"
          ","
          "].join(""));return l.ie&&l.ie<8?c.removeClass("layui-hide").addClass(o):(d[0]&&d.remove(),s.call(a,m,c[0],y),c.addClass("layui-hide").after(m),a.index)},c.prototype.getContent=function(t){var e=u(t);if(e[0])return d(e[0].document.body.innerHTML)},c.prototype.getText=function(t){var i=u(t);if(i[0])return e(i[0].document.body).text()},c.prototype.setContent=function(t,i,a){var l=u(t);l[0]&&(a?e(l[0].document.body).append(i):e(l[0].document.body).html(i),layedit.sync(t))},c.prototype.sync=function(t){var i=u(t);if(i[0]){var a=e("#"+i[1].attr("textarea"));a.val(d(i[0].document.body.innerHTML))}},c.prototype.getSelection=function(t){var e=u(t);if(e[0]){var i=m(e[0].document);return document.selection?i.text:i.toString()}};var s=function(t,i,a){var l=this,n=t.find("iframe");n.css({height:a.height}).on("load",function(){var o=n.contents(),r=n.prop("contentWindow"),c=o.find("head"),s=e([""].join("")),u=o.find("body");c.append(s),u.attr("contenteditable","true").css({"min-height":a.height}).html(i.value||""),y.apply(l,[r,n,i,a]),g.call(l,r,t,a)})},u=function(t){var i=e("#LAY_layedit_"+t),a=i.prop("contentWindow");return[a,i]},d=function(t){return 8==l.ie&&(t=t.replace(/<.+>/g,function(t){return t.toLowerCase()})),t},y=function(t,a,n,o){var r=t.document,c=e(r.body);c.on("keydown",function(t){var e=t.keyCode;if(13===e){var a=m(r),l=p(a),n=l.parentNode;if("pre"===n.tagName.toLowerCase()){if(t.shiftKey)return;return i.msg("\u8bf7\u6682\u65f6\u7528shift+enter"),!1}r.execCommand("formatBlock",!1,"

          ")}}),e(n).parents("form").on("submit",function(){var t=c.html();8==l.ie&&(t=t.replace(/<.+>/g,function(t){return t.toLowerCase()})),n.value=t}),c.on("paste",function(e){r.execCommand("formatBlock",!1,"

          "),setTimeout(function(){f.call(t,c),n.value=c.html()},100)})},f=function(t){var i=this;i.document;t.find("*[style]").each(function(){var t=this.style.textAlign;this.removeAttribute("style"),e(this).css({"text-align":t||""})}),t.find("table").addClass("layui-table"),t.find("script,link").remove()},m=function(t){return t.selection?t.selection.createRange():t.getSelection().getRangeAt(0)},p=function(t){return t.endContainer||t.parentElement().childNodes[0]},v=function(t,i,a){var l=this.document,n=document.createElement(t);for(var o in i)n.setAttribute(o,i[o]);if(n.removeAttribute("text"),l.selection){var r=a.text||i.text;if("a"===t&&!r)return;r&&(n.innerHTML=r),a.pasteHTML(e(n).prop("outerHTML")),a.select()}else{var r=a.toString()||i.text;if("a"===t&&!r)return;r&&(n.innerHTML=r),a.deleteContents(),a.insertNode(n)}},h=function(t,i){var a=this.document,l="layedit-tool-active",n=p(m(a)),o=function(e){return t.find(".layedit-tool-"+e)};i&&i[i.hasClass(l)?"removeClass":"addClass"](l),t.find(">i").removeClass(l),o("unlink").addClass(r),e(n).parents().each(function(){var t=this.tagName.toLowerCase(),e=this.style.textAlign;"b"!==t&&"strong"!==t||o("b").addClass(l),"i"!==t&&"em"!==t||o("i").addClass(l),"u"===t&&o("u").addClass(l),"strike"===t&&o("d").addClass(l),"p"===t&&("center"===e?o("center").addClass(l):"right"===e?o("right").addClass(l):o("left").addClass(l)),"a"===t&&(o("link").addClass(l),o("unlink").removeClass(r))})},g=function(t,a,l){var n=t.document,o=e(n.body),c={link:function(i){var a=p(i),l=e(a).parent();b.call(o,{href:l.attr("href"),target:l.attr("target")},function(e){var a=l[0];"A"===a.tagName?a.href=e.url:v.call(t,"a",{target:e.target,href:e.url,text:e.url},i)})},unlink:function(t){n.execCommand("unlink")},face:function(e){x.call(this,function(i){v.call(t,"img",{src:i.src,alt:i.alt},e)})},image:function(a){var n=this;layui.use("upload",function(o){var r=l.uploadImage||{};o.render({url:r.url,method:r.type,elem:e(n).find("input")[0],done:function(e){0==e.code?(e.data=e.data||{},v.call(t,"img",{src:e.data.src,alt:e.data.title},a)):i.msg(e.msg||"\u4e0a\u4f20\u5931\u8d25")}})})},code:function(e){k.call(o,function(i){v.call(t,"pre",{text:i.code,"lay-lang":i.lang},e)})},help:function(){i.open({type:2,title:"\u5e2e\u52a9",area:["600px","380px"],shadeClose:!0,shade:.1,skin:"layui-layer-msg",content:["","no"]})}},s=a.find(".layui-layedit-tool"),u=function(){var i=e(this),a=i.attr("layedit-event"),l=i.attr("lay-command");if(!i.hasClass(r)){o.focus();var u=m(n);u.commonAncestorContainer;l?(n.execCommand(l),/justifyLeft|justifyCenter|justifyRight/.test(l)&&n.execCommand("formatBlock",!1,"

          "),setTimeout(function(){o.focus()},10)):c[a]&&c[a].call(this,u),h.call(t,s,i)}},d=/image/;s.find(">i").on("mousedown",function(){var t=e(this),i=t.attr("layedit-event");d.test(i)||u.call(this)}).on("click",function(){var t=e(this),i=t.attr("layedit-event");d.test(i)&&u.call(this)}),o.on("click",function(){h.call(t,s),i.close(x.index)})},b=function(t,e){var l=this,n=i.open({type:1,id:"LAY_layedit_link",area:"350px",shade:.05,shadeClose:!0,moveType:1,title:"\u8d85\u94fe\u63a5",skin:"layui-layer-msg",content:['

            ','
          • ','','
            ','',"
            ","
          • ",'
          • ','','
            ','",'","
            ","
          • ",'
          • ','','',"
          • ","
          "].join(""),success:function(t,n){var o="submit(layedit-link-yes)";a.render("radio"),t.find(".layui-btn-primary").on("click",function(){i.close(n),l.focus()}),a.on(o,function(t){i.close(b.index),e&&e(t.field)})}});b.index=n},x=function(t){var a=function(){var t=["[\u5fae\u7b11]","[\u563b\u563b]","[\u54c8\u54c8]","[\u53ef\u7231]","[\u53ef\u601c]","[\u6316\u9f3b]","[\u5403\u60ca]","[\u5bb3\u7f9e]","[\u6324\u773c]","[\u95ed\u5634]","[\u9119\u89c6]","[\u7231\u4f60]","[\u6cea]","[\u5077\u7b11]","[\u4eb2\u4eb2]","[\u751f\u75c5]","[\u592a\u5f00\u5fc3]","[\u767d\u773c]","[\u53f3\u54fc\u54fc]","[\u5de6\u54fc\u54fc]","[\u5618]","[\u8870]","[\u59d4\u5c48]","[\u5410]","[\u54c8\u6b20]","[\u62b1\u62b1]","[\u6012]","[\u7591\u95ee]","[\u998b\u5634]","[\u62dc\u62dc]","[\u601d\u8003]","[\u6c57]","[\u56f0]","[\u7761]","[\u94b1]","[\u5931\u671b]","[\u9177]","[\u8272]","[\u54fc]","[\u9f13\u638c]","[\u6655]","[\u60b2\u4f24]","[\u6293\u72c2]","[\u9ed1\u7ebf]","[\u9634\u9669]","[\u6012\u9a82]","[\u4e92\u7c89]","[\u5fc3]","[\u4f24\u5fc3]","[\u732a\u5934]","[\u718a\u732b]","[\u5154\u5b50]","[ok]","[\u8036]","[good]","[NO]","[\u8d5e]","[\u6765]","[\u5f31]","[\u8349\u6ce5\u9a6c]","[\u795e\u9a6c]","[\u56e7]","[\u6d6e\u4e91]","[\u7ed9\u529b]","[\u56f4\u89c2]","[\u5a01\u6b66]","[\u5965\u7279\u66fc]","[\u793c\u7269]","[\u949f]","[\u8bdd\u7b52]","[\u8721\u70db]","[\u86cb\u7cd5]"],e={};return layui.each(t,function(t,i){e[i]=layui.cache.dir+"images/face/"+t+".gif"}),e}();return x.hide=x.hide||function(t){"face"!==e(t.target).attr("layedit-event")&&i.close(x.index)},x.index=i.tips(function(){var t=[];return layui.each(a,function(e,i){t.push('
        • '+e+'
        • ')}),'
            '+t.join("")+"
          "}(),this,{tips:1,time:0,skin:"layui-box layui-util-face",maxWidth:500,success:function(l,n){l.css({marginTop:-4,marginLeft:-10}).find(".layui-clear>li").on("click",function(){t&&t({src:a[this.title],alt:this.title}),i.close(n)}),e(document).off("click",x.hide).on("click",x.hide)}})},k=function(t){var e=this,l=i.open({type:1,id:"LAY_layedit_code",area:"550px",shade:.05,shadeClose:!0,moveType:1,title:"\u63d2\u5165\u4ee3\u7801",skin:"layui-layer-msg",content:['
            ','
          • ','','
            ','","
            ","
          • ",'
          • ','','
            ','',"
            ","
          • ",'
          • ','','',"
          • ","
          "].join(""),success:function(l,n){var o="submit(layedit-code-yes)";a.render("select"),l.find(".layui-btn-primary").on("click",function(){i.close(n),e.focus()}),a.on(o,function(e){i.close(k.index),t&&t(e.field)})}});k.index=l},C={html:'',strong:'',italic:'',underline:'',del:'',"|":'',left:'',center:'',right:'',link:'',unlink:'',face:'',image:'',code:'',help:''},L=new c;t(n,L)});layui.define("jquery",function(a){"use strict";var e=layui.$;a("code",function(a){var l=[];a=a||{},a.elem=e(a.elem||".layui-code"),a.lang="lang"in a?a.lang:"code",a.elem.each(function(){l.push(this)}),layui.each(l.reverse(),function(l,i){var t=e(i),c=t.html();(t.attr("lay-encode")||a.encode)&&(c=c.replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""")),t.html('
          1. '+c.replace(/[\r\t\n]+/g,"
          2. ")+"
          "),t.find(">.layui-code-h3")[0]||t.prepend('

          '+(t.attr("lay-title")||a.title||"</>")+''+(t.attr("lay-lang")||a.lang||"")+"

          ");var n=t.find(">.layui-code-ol");t.addClass("layui-box layui-code-view"),(t.attr("lay-skin")||a.skin)&&t.addClass("layui-code-"+(t.attr("lay-skin")||a.skin)),(n.find("li").length/100|0)>0&&n.css("margin-left",(n.find("li").length/100|0)+"px"),(t.attr("lay-height")||a.height)&&n.css("max-height",t.attr("lay-height")||a.height)})})}).addcss("modules/code.css?v=2","skincodecss"); \ No newline at end of file diff --git a/src/test/kotlin/com/hisense/dahua_video/TestMainVerticle.kt b/src/test/kotlin/com/hisense/dahua_video/TestMainVerticle.kt new file mode 100644 index 0000000..9edc715 --- /dev/null +++ b/src/test/kotlin/com/hisense/dahua_video/TestMainVerticle.kt @@ -0,0 +1,22 @@ +package com.hisense.dahua_video + +import io.vertx.core.Vertx +import io.vertx.junit5.VertxExtension +import io.vertx.junit5.VertxTestContext +import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.extension.ExtendWith + +@ExtendWith(VertxExtension::class) +class TestMainVerticle { + + @BeforeEach + fun deploy_verticle(vertx: Vertx, testContext: VertxTestContext) { + vertx.deployVerticle(MainVerticle(), testContext.succeeding { _ -> testContext.completeNow() }) + } + + @Test + fun verticle_deployed(vertx: Vertx, testContext: VertxTestContext) { + testContext.completeNow() + } +}