commit fb072c80312ef5635217f00df2a44a5d2c15f285 Author: 南宁网宿科技 Date: Fri Aug 26 13:48:49 2022 +0800 Initial commit diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..3027ae4 Binary files /dev/null and b/.DS_Store differ diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a2a3040 --- /dev/null +++ b/.gitignore @@ -0,0 +1,31 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/** +!**/src/test/** + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ + +### VS Code ### +.vscode/ diff --git a/.mvn/wrapper/MavenWrapperDownloader.java b/.mvn/wrapper/MavenWrapperDownloader.java new file mode 100644 index 0000000..a45eb6b --- /dev/null +++ b/.mvn/wrapper/MavenWrapperDownloader.java @@ -0,0 +1,118 @@ +/* + * 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 + * + * https://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.jar b/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000..2cc7d4a Binary files /dev/null and b/.mvn/wrapper/maven-wrapper.jar differ diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000..642d572 --- /dev/null +++ b/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,2 @@ +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip +wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar diff --git a/ele-admin-api.log b/ele-admin-api.log new file mode 100644 index 0000000..5e4ea32 --- /dev/null +++ b/ele-admin-api.log @@ -0,0 +1,1303 @@ +2022-08-26 00:03:25.142 WARN 37477 --- [http-nio-8081-exec-4] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 159770 +2022-08-26 00:03:25.168 WARN 37477 --- [http-nio-8081-exec-4] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 176309 +2022-08-26 00:03:25.197 WARN 37477 --- [http-nio-8081-exec-4] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 176502 +2022-08-26 00:03:25.233 WARN 37477 --- [http-nio-8081-exec-4] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 177409 +2022-08-26 00:05:57.690 WARN 37477 --- [http-nio-8081-exec-4] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 97439 +2022-08-26 00:05:57.713 WARN 37477 --- [http-nio-8081-exec-4] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 97790 +2022-08-26 00:05:57.736 WARN 37477 --- [http-nio-8081-exec-4] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 99437 +2022-08-26 00:05:57.759 WARN 37477 --- [http-nio-8081-exec-4] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 114329 +2022-08-26 00:05:57.778 WARN 37477 --- [http-nio-8081-exec-4] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 114467 +2022-08-26 00:07:36.759 WARN 37477 --- [http-nio-8081-exec-8] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 66229 +2022-08-26 00:07:36.760 WARN 37477 --- [http-nio-8081-exec-1] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 66301 +2022-08-26 00:07:36.763 WARN 37477 --- [http-nio-8081-exec-7] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 66344 +2022-08-26 00:09:40.600 WARN 37477 --- [http-nio-8081-exec-2] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 118232 +2022-08-26 00:09:40.606 WARN 37477 --- [http-nio-8081-exec-4] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 118045 +2022-08-26 00:09:40.611 WARN 37477 --- [http-nio-8081-exec-5] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 118163 +2022-08-26 00:09:40.621 WARN 37477 --- [http-nio-8081-exec-2] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 118305 +2022-08-26 00:11:52.233 WARN 37477 --- [http-nio-8081-exec-1] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 114754 +2022-08-26 00:11:52.264 WARN 37477 --- [http-nio-8081-exec-1] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 130815 +2022-08-26 00:11:52.322 WARN 37477 --- [http-nio-8081-exec-1] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 130841 +2022-08-26 00:11:52.356 WARN 37477 --- [http-nio-8081-exec-1] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 130895 +2022-08-26 00:14:26.561 WARN 38605 --- [restartedMain] com.alibaba.druid.pool.DruidDataSource : removeAbandoned is true, not use in production. +2022-08-26 00:14:30.026 WARN 38605 --- [restartedMain] d.s.r.o.OperationImplicitParameterReader : Unable to interpret the implicit parameter configuration with dataType: string, dataTypeClass: class java.lang.Void +2022-08-26 00:14:30.028 WARN 38605 --- [restartedMain] d.s.r.o.OperationImplicitParameterReader : Unable to interpret the implicit parameter configuration with dataType: string, dataTypeClass: class java.lang.Void +2022-08-26 00:14:30.029 WARN 38605 --- [restartedMain] d.s.r.o.OperationImplicitParameterReader : Unable to interpret the implicit parameter configuration with dataType: string, dataTypeClass: class java.lang.Void +2022-08-26 00:14:30.208 WARN 38605 --- [restartedMain] d.s.r.o.OperationImplicitParameterReader : Unable to interpret the implicit parameter configuration with dataType: string, dataTypeClass: class java.lang.Void +2022-08-26 00:14:55.884 WARN 38615 --- [restartedMain] com.alibaba.druid.pool.DruidDataSource : removeAbandoned is true, not use in production. +2022-08-26 00:14:59.406 WARN 38615 --- [restartedMain] d.s.r.o.OperationImplicitParameterReader : Unable to interpret the implicit parameter configuration with dataType: string, dataTypeClass: class java.lang.Void +2022-08-26 00:14:59.408 WARN 38615 --- [restartedMain] d.s.r.o.OperationImplicitParameterReader : Unable to interpret the implicit parameter configuration with dataType: string, dataTypeClass: class java.lang.Void +2022-08-26 00:14:59.409 WARN 38615 --- [restartedMain] d.s.r.o.OperationImplicitParameterReader : Unable to interpret the implicit parameter configuration with dataType: string, dataTypeClass: class java.lang.Void +2022-08-26 00:14:59.592 WARN 38615 --- [restartedMain] d.s.r.o.OperationImplicitParameterReader : Unable to interpret the implicit parameter configuration with dataType: string, dataTypeClass: class java.lang.Void +2022-08-26 00:18:00.049 WARN 38615 --- [http-nio-8081-exec-9] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 74849 +2022-08-26 00:18:00.078 WARN 38615 --- [http-nio-8081-exec-9] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 77544 +2022-08-26 00:18:00.103 WARN 38615 --- [http-nio-8081-exec-9] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 77807 +2022-08-26 00:18:00.122 WARN 38615 --- [http-nio-8081-exec-9] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 78196 +2022-08-26 00:18:00.147 WARN 38615 --- [http-nio-8081-exec-9] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 116014 +2022-08-26 00:18:00.170 WARN 38615 --- [http-nio-8081-exec-9] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 116074 +2022-08-26 00:21:10.150 WARN 38615 --- [http-nio-8081-exec-5] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 118709 +2022-08-26 00:21:10.173 WARN 38615 --- [http-nio-8081-exec-5] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 181683 +2022-08-26 00:21:10.193 WARN 38615 --- [http-nio-8081-exec-5] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 181689 +2022-08-26 00:21:10.224 WARN 38615 --- [http-nio-8081-exec-5] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 181783 +2022-08-26 00:21:10.253 WARN 38615 --- [http-nio-8081-exec-5] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 181860 +2022-08-26 00:24:43.873 WARN 38615 --- [http-nio-8081-exec-1] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 135884 +2022-08-26 00:24:43.898 WARN 38615 --- [http-nio-8081-exec-1] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 149816 +2022-08-26 00:24:43.917 WARN 38615 --- [http-nio-8081-exec-1] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 155120 +2022-08-26 00:24:43.952 WARN 38615 --- [http-nio-8081-exec-1] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 155239 +2022-08-26 00:24:43.980 WARN 38615 --- [http-nio-8081-exec-1] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 155350 +2022-08-26 00:26:45.776 WARN 38615 --- [http-nio-8081-exec-2] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 70341 +2022-08-26 00:26:45.778 WARN 38615 --- [http-nio-8081-exec-10] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 70348 +2022-08-26 00:26:45.796 WARN 38615 --- [http-nio-8081-exec-2] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 70385 +2022-08-26 00:29:50.904 WARN 38615 --- [http-nio-8081-exec-9] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 102471 +2022-08-26 00:29:50.928 WARN 38615 --- [http-nio-8081-exec-9] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 102575 +2022-08-26 00:29:50.954 WARN 38615 --- [http-nio-8081-exec-9] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 102695 +2022-08-26 00:29:50.997 WARN 38615 --- [http-nio-8081-exec-9] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 102797 +2022-08-26 00:29:51.795 WARN 38615 --- [http-nio-8081-exec-5] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 107609 +2022-08-26 00:29:51.821 WARN 38615 --- [http-nio-8081-exec-5] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 107656 +2022-08-26 00:31:42.631 WARN 38615 --- [http-nio-8081-exec-4] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 75432 +2022-08-26 00:31:42.656 WARN 38615 --- [http-nio-8081-exec-4] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 107693 +2022-08-26 00:31:42.675 WARN 38615 --- [http-nio-8081-exec-4] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 107735 +2022-08-26 00:31:42.699 WARN 38615 --- [http-nio-8081-exec-4] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 107880 +2022-08-26 00:31:42.726 WARN 38615 --- [http-nio-8081-exec-4] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 107961 +2022-08-26 00:34:29.517 WARN 38615 --- [http-nio-8081-exec-9] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 60372 +2022-08-26 00:34:29.518 WARN 38615 --- [http-nio-8081-exec-6] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 60098 +2022-08-26 00:34:29.521 WARN 38615 --- [http-nio-8081-exec-7] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 60170 +2022-08-26 00:34:29.521 WARN 38615 --- [http-nio-8081-exec-10] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 60327 +2022-08-26 00:34:29.522 WARN 38615 --- [http-nio-8081-exec-4] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 60270 +2022-08-26 00:38:23.209 WARN 38615 --- [http-nio-8081-exec-9] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 73466 +2022-08-26 00:38:23.231 WARN 38615 --- [http-nio-8081-exec-9] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 73713 +2022-08-26 00:38:23.258 WARN 38615 --- [http-nio-8081-exec-9] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 160941 +2022-08-26 00:38:23.283 WARN 38615 --- [http-nio-8081-exec-9] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 160996 +2022-08-26 00:38:23.310 WARN 38615 --- [http-nio-8081-exec-9] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 161051 +2022-08-26 00:38:23.335 WARN 38615 --- [http-nio-8081-exec-9] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 178443 +2022-08-26 00:38:23.355 WARN 38615 --- [http-nio-8081-exec-9] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 178522 +2022-08-26 00:39:59.927 WARN 38615 --- [http-nio-8081-exec-1] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 93440 +2022-08-26 00:39:59.929 WARN 38615 --- [http-nio-8081-exec-10] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 93737 +2022-08-26 00:39:59.951 WARN 38615 --- [http-nio-8081-exec-10] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 94557 +2022-08-26 00:39:59.953 WARN 38615 --- [http-nio-8081-exec-1] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 93785 +2022-08-26 00:43:49.028 WARN 38615 --- [http-nio-8081-exec-7] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 115549 +2022-08-26 00:43:49.056 WARN 38615 --- [http-nio-8081-exec-7] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 117878 +2022-08-26 00:43:49.080 WARN 38615 --- [http-nio-8081-exec-7] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 118029 +2022-08-26 00:43:49.100 WARN 38615 --- [http-nio-8081-exec-7] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 118066 +2022-08-26 00:43:49.120 WARN 38615 --- [http-nio-8081-exec-7] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 118118 +2022-08-26 00:47:59.752 WARN 38615 --- [http-nio-8081-exec-7] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 194843 +2022-08-26 00:47:59.776 WARN 38615 --- [http-nio-8081-exec-7] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 194879 +2022-08-26 00:47:59.798 WARN 38615 --- [http-nio-8081-exec-7] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 194913 +2022-08-26 01:00:21.278 WARN 38615 --- [http-nio-8081-exec-10] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 224622 +2022-08-26 01:00:21.316 WARN 38615 --- [http-nio-8081-exec-10] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 224821 +2022-08-26 01:00:21.338 WARN 38615 --- [http-nio-8081-exec-10] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 224934 +2022-08-26 01:00:21.358 WARN 38615 --- [http-nio-8081-exec-10] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 224989 +2022-08-26 01:00:21.383 WARN 38615 --- [http-nio-8081-exec-10] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 225019 +2022-08-26 01:00:21.406 WARN 38615 --- [http-nio-8081-exec-10] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 241166 +2022-08-26 01:00:21.427 WARN 38615 --- [http-nio-8081-exec-10] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 241219 +2022-08-26 01:03:08.252 WARN 38615 --- [http-nio-8081-exec-10] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 136296 +2022-08-26 01:03:08.293 WARN 38615 --- [http-nio-8081-exec-10] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 136574 +2022-08-26 01:03:08.313 WARN 38615 --- [http-nio-8081-exec-10] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 136599 +2022-08-26 01:03:08.335 WARN 38615 --- [http-nio-8081-exec-10] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 136659 +2022-08-26 01:03:08.356 WARN 38615 --- [http-nio-8081-exec-10] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 136684 +2022-08-26 01:03:08.379 WARN 38615 --- [http-nio-8081-exec-10] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 154363 +2022-08-26 01:10:39.319 WARN 38615 --- [http-nio-8081-exec-8] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 336248 +2022-08-26 01:10:39.350 WARN 38615 --- [http-nio-8081-exec-8] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 336747 +2022-08-26 01:10:39.373 WARN 38615 --- [http-nio-8081-exec-8] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 342880 +2022-08-26 01:10:39.406 WARN 38615 --- [http-nio-8081-exec-8] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 342941 +2022-08-26 01:10:39.436 WARN 38615 --- [http-nio-8081-exec-8] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 343023 +2022-08-26 01:13:31.004 WARN 38615 --- [http-nio-8081-exec-4] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 80175 +2022-08-26 01:13:31.010 WARN 38615 --- [http-nio-8081-exec-1] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 89789 +2022-08-26 01:13:31.016 WARN 38615 --- [http-nio-8081-exec-5] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 89694 +2022-08-26 01:15:54.111 WARN 38615 --- [http-nio-8081-exec-3] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 142227 +2022-08-26 01:15:54.133 WARN 38615 --- [http-nio-8081-exec-3] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 142204 +2022-08-26 01:15:54.155 WARN 38615 --- [http-nio-8081-exec-3] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 142324 +2022-08-26 01:15:54.182 WARN 38615 --- [http-nio-8081-exec-3] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 142369 +2022-08-26 01:18:22.877 WARN 38615 --- [http-nio-8081-exec-1] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 146534 +2022-08-26 01:18:22.899 WARN 38615 --- [http-nio-8081-exec-1] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 146719 +2022-08-26 01:18:22.921 WARN 38615 --- [http-nio-8081-exec-1] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 146719 +2022-08-26 01:18:22.947 WARN 38615 --- [http-nio-8081-exec-1] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 146783 +2022-08-26 01:19:41.518 WARN 38615 --- [http-nio-8081-exec-10] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 76497 +2022-08-26 01:19:41.521 WARN 38615 --- [http-nio-8081-exec-9] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 76527 +2022-08-26 01:21:16.241 WARN 38615 --- [http-nio-8081-exec-5] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 80436 +2022-08-26 01:21:16.261 WARN 38615 --- [http-nio-8081-exec-5] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 80633 +2022-08-26 01:21:16.289 WARN 38615 --- [http-nio-8081-exec-5] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 80685 +2022-08-26 01:22:18.254 WARN 38615 --- [http-nio-8081-exec-1] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 142696 +2022-08-26 01:22:18.262 WARN 38615 --- [http-nio-8081-exec-2] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 142687 +2022-08-26 01:26:22.854 WARN 38615 --- [http-nio-8081-exec-2] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 73542 +2022-08-26 01:26:22.895 WARN 38615 --- [http-nio-8081-exec-2] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 213842 +2022-08-26 01:26:22.922 WARN 38615 --- [http-nio-8081-exec-2] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 213888 +2022-08-26 01:26:22.943 WARN 38615 --- [http-nio-8081-exec-2] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 214002 +2022-08-26 01:26:22.967 WARN 38615 --- [http-nio-8081-exec-2] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 214051 +2022-08-26 01:27:39.258 ERROR 38615 --- [http-nio-8081-exec-6] c.e.c.c.e.GlobalExceptionHandler : java.io.IOException: Broken pipe + +org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe + at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:353) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.connector.OutputBuffer.flushByteBuffer(OutputBuffer.java:783) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.connector.OutputBuffer.append(OutputBuffer.java:688) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:388) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:366) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:96) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.springframework.security.web.util.OnCommittedResponseWrapper$SaveContextServletOutputStream.write(OnCommittedResponseWrapper.java:638) ~[spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.util.StreamUtils$NonClosingOutputStream.write(StreamUtils.java:287) ~[spring-core-5.3.9.jar:5.3.9] + at com.fasterxml.jackson.core.json.UTF8JsonGenerator._flushBuffer(UTF8JsonGenerator.java:2177) ~[jackson-core-2.12.4.jar:2.12.4] + at com.fasterxml.jackson.core.json.UTF8JsonGenerator._writeStringSegments(UTF8JsonGenerator.java:1319) ~[jackson-core-2.12.4.jar:2.12.4] + at com.fasterxml.jackson.core.json.UTF8JsonGenerator.writeString(UTF8JsonGenerator.java:517) ~[jackson-core-2.12.4.jar:2.12.4] + at com.fasterxml.jackson.databind.ser.std.StringSerializer.serialize(StringSerializer.java:41) ~[jackson-databind-2.12.4.jar:2.12.4] + at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728) ~[jackson-databind-2.12.4.jar:2.12.4] + at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:770) ~[jackson-databind-2.12.4.jar:2.12.4] + at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178) ~[jackson-databind-2.12.4.jar:2.12.4] + at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serializeContents(IndexedListSerializer.java:119) ~[jackson-databind-2.12.4.jar:2.12.4] + at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serialize(IndexedListSerializer.java:79) ~[jackson-databind-2.12.4.jar:2.12.4] + at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serialize(IndexedListSerializer.java:18) ~[jackson-databind-2.12.4.jar:2.12.4] + at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728) ~[jackson-databind-2.12.4.jar:2.12.4] + at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:770) ~[jackson-databind-2.12.4.jar:2.12.4] + at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178) ~[jackson-databind-2.12.4.jar:2.12.4] + at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:480) ~[jackson-databind-2.12.4.jar:2.12.4] + at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:319) ~[jackson-databind-2.12.4.jar:2.12.4] + at com.fasterxml.jackson.databind.ObjectWriter$Prefetch.serialize(ObjectWriter.java:1514) ~[jackson-databind-2.12.4.jar:2.12.4] + at com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:1006) ~[jackson-databind-2.12.4.jar:2.12.4] + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:454) ~[spring-web-5.3.9.jar:5.3.9] + at org.springframework.http.converter.AbstractGenericHttpMessageConverter.write(AbstractGenericHttpMessageConverter.java:104) ~[spring-web-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:290) ~[spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:183) ~[spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:78) ~[spring-web-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:124) ~[spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1064) ~[spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) ~[spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) [spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) [spring-webmvc-5.3.9.jar:5.3.9] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:655) [tomcat-embed-core-9.0.52.jar:4.0.FR] + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) [spring-webmvc-5.3.9.jar:5.3.9] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) [tomcat-embed-core-9.0.52.jar:4.0.FR] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) [tomcat-embed-websocket-9.0.52.jar:9.0.52] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113) [spring-web-5.3.9.jar:5.3.9] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:121) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at com.eleadmin.common.core.security.JwtAuthenticationFilter.doFilterInternal(JwtAuthenticationFilter.java:82) [classes/:na] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) [spring-web-5.3.9.jar:5.3.9] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1726) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.52.jar:9.0.52] + at java.lang.Thread.run(Thread.java:750) [na:1.8.0_322] + Suppressed: org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe + at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:353) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.connector.OutputBuffer.flushByteBuffer(OutputBuffer.java:783) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.connector.OutputBuffer.append(OutputBuffer.java:688) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:388) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:366) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:96) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.springframework.security.web.util.OnCommittedResponseWrapper$SaveContextServletOutputStream.write(OnCommittedResponseWrapper.java:638) ~[spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.util.StreamUtils$NonClosingOutputStream.write(StreamUtils.java:287) ~[spring-core-5.3.9.jar:5.3.9] + at com.fasterxml.jackson.core.json.UTF8JsonGenerator._flushBuffer(UTF8JsonGenerator.java:2177) ~[jackson-core-2.12.4.jar:2.12.4] + at com.fasterxml.jackson.core.json.UTF8JsonGenerator.close(UTF8JsonGenerator.java:1220) ~[jackson-core-2.12.4.jar:2.12.4] + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:458) ~[spring-web-5.3.9.jar:5.3.9] + ... 89 common frames omitted + Caused by: java.io.IOException: Broken pipe + at sun.nio.ch.FileDispatcherImpl.write0(Native Method) + at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47) + at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93) + at sun.nio.ch.IOUtil.write(IOUtil.java:65) + at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:470) + at org.apache.tomcat.util.net.NioChannel.write(NioChannel.java:135) + at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.doWrite(NioEndpoint.java:1363) + at org.apache.tomcat.util.net.SocketWrapperBase.doWrite(SocketWrapperBase.java:766) + at org.apache.tomcat.util.net.SocketWrapperBase.writeBlocking(SocketWrapperBase.java:586) + at org.apache.tomcat.util.net.SocketWrapperBase.write(SocketWrapperBase.java:530) + at org.apache.coyote.http11.Http11OutputBuffer$SocketOutputBuffer.doWrite(Http11OutputBuffer.java:547) + at org.apache.coyote.http11.filters.ChunkedOutputFilter.doWrite(ChunkedOutputFilter.java:110) + at org.apache.coyote.http11.Http11OutputBuffer.doWrite(Http11OutputBuffer.java:194) + at org.apache.coyote.Response.doWrite(Response.java:615) + at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:340) + ... 99 common frames omitted +Caused by: java.io.IOException: Broken pipe + at sun.nio.ch.FileDispatcherImpl.write0(Native Method) ~[na:1.8.0_322] + at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47) ~[na:1.8.0_322] + at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93) ~[na:1.8.0_322] + at sun.nio.ch.IOUtil.write(IOUtil.java:65) ~[na:1.8.0_322] + at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:470) ~[na:1.8.0_322] + at org.apache.tomcat.util.net.NioChannel.write(NioChannel.java:135) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.doWrite(NioEndpoint.java:1363) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.util.net.SocketWrapperBase.doWrite(SocketWrapperBase.java:766) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.util.net.SocketWrapperBase.writeBlocking(SocketWrapperBase.java:586) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.util.net.SocketWrapperBase.write(SocketWrapperBase.java:530) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.coyote.http11.Http11OutputBuffer$SocketOutputBuffer.doWrite(Http11OutputBuffer.java:547) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.coyote.http11.filters.ChunkedOutputFilter.doWrite(ChunkedOutputFilter.java:112) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.coyote.http11.Http11OutputBuffer.doWrite(Http11OutputBuffer.java:194) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.coyote.Response.doWrite(Response.java:615) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:340) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + ... 114 common frames omitted + +2022-08-26 01:27:39.261 WARN 38615 --- [http-nio-8081-exec-6] .m.m.a.ExceptionHandlerExceptionResolver : Failure in @ExceptionHandler com.eleadmin.common.core.exception.GlobalExceptionHandler#exceptionHandler(Throwable, HttpServletResponse) + +org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe + at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:353) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.connector.OutputBuffer.flushByteBuffer(OutputBuffer.java:783) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.connector.OutputBuffer.append(OutputBuffer.java:688) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:388) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:366) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:96) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.springframework.security.web.util.OnCommittedResponseWrapper$SaveContextServletOutputStream.write(OnCommittedResponseWrapper.java:638) ~[spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.util.StreamUtils$NonClosingOutputStream.write(StreamUtils.java:287) ~[spring-core-5.3.9.jar:5.3.9] + at com.fasterxml.jackson.core.json.UTF8JsonGenerator._flushBuffer(UTF8JsonGenerator.java:2177) ~[jackson-core-2.12.4.jar:2.12.4] + at com.fasterxml.jackson.core.json.UTF8JsonGenerator.flush(UTF8JsonGenerator.java:1190) ~[jackson-core-2.12.4.jar:2.12.4] + at com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:1008) ~[jackson-databind-2.12.4.jar:2.12.4] + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:454) ~[spring-web-5.3.9.jar:5.3.9] + at org.springframework.http.converter.AbstractGenericHttpMessageConverter.write(AbstractGenericHttpMessageConverter.java:104) ~[spring-web-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:290) ~[spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:183) ~[spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:78) ~[spring-web-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:124) ~[spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver.doResolveHandlerMethodException(ExceptionHandlerExceptionResolver.java:428) ~[spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.handler.AbstractHandlerMethodExceptionResolver.doResolveException(AbstractHandlerMethodExceptionResolver.java:75) [spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver.resolveException(AbstractHandlerExceptionResolver.java:141) [spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.handler.HandlerExceptionResolverComposite.resolveException(HandlerExceptionResolverComposite.java:80) [spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.DispatcherServlet.processHandlerException(DispatcherServlet.java:1324) [spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1135) [spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1081) [spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) [spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) [spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) [spring-webmvc-5.3.9.jar:5.3.9] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:655) [tomcat-embed-core-9.0.52.jar:4.0.FR] + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) [spring-webmvc-5.3.9.jar:5.3.9] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) [tomcat-embed-core-9.0.52.jar:4.0.FR] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) [tomcat-embed-websocket-9.0.52.jar:9.0.52] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113) [spring-web-5.3.9.jar:5.3.9] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:121) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at com.eleadmin.common.core.security.JwtAuthenticationFilter.doFilterInternal(JwtAuthenticationFilter.java:82) [classes/:na] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) [spring-web-5.3.9.jar:5.3.9] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1726) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.52.jar:9.0.52] + at java.lang.Thread.run(Thread.java:750) [na:1.8.0_322] +Caused by: java.io.IOException: Broken pipe + at sun.nio.ch.FileDispatcherImpl.write0(Native Method) ~[na:1.8.0_322] + at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47) ~[na:1.8.0_322] + at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93) ~[na:1.8.0_322] + at sun.nio.ch.IOUtil.write(IOUtil.java:65) ~[na:1.8.0_322] + at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:470) ~[na:1.8.0_322] + at org.apache.tomcat.util.net.NioChannel.write(NioChannel.java:135) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.doWrite(NioEndpoint.java:1363) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.util.net.SocketWrapperBase.doWrite(SocketWrapperBase.java:766) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.util.net.SocketWrapperBase.writeBlocking(SocketWrapperBase.java:586) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.util.net.SocketWrapperBase.write(SocketWrapperBase.java:530) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.coyote.http11.Http11OutputBuffer$SocketOutputBuffer.doWrite(Http11OutputBuffer.java:547) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.coyote.http11.filters.ChunkedOutputFilter.doWrite(ChunkedOutputFilter.java:110) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.coyote.http11.Http11OutputBuffer.doWrite(Http11OutputBuffer.java:194) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.coyote.Response.doWrite(Response.java:615) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:340) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + ... 103 common frames omitted + +2022-08-26 01:29:02.854 WARN 38615 --- [http-nio-8081-exec-9] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 72011 +2022-08-26 01:29:02.881 WARN 38615 --- [http-nio-8081-exec-9] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 72130 +2022-08-26 01:29:02.905 WARN 38615 --- [http-nio-8081-exec-9] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 72339 +2022-08-26 01:29:02.927 WARN 38615 --- [http-nio-8081-exec-9] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 72396 +2022-08-26 01:29:02.948 WARN 38615 --- [http-nio-8081-exec-9] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 72474 +2022-08-26 01:31:37.595 WARN 38615 --- [http-nio-8081-exec-5] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 72148 +2022-08-26 01:31:37.631 WARN 38615 --- [http-nio-8081-exec-5] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 134676 +2022-08-26 01:31:37.652 WARN 38615 --- [http-nio-8081-exec-5] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 134689 +2022-08-26 01:31:37.675 WARN 38615 --- [http-nio-8081-exec-5] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 134716 +2022-08-26 01:32:59.286 WARN 38615 --- [http-nio-8081-exec-4] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 68122 +2022-08-26 01:32:59.309 WARN 38615 --- [http-nio-8081-exec-4] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 68285 +2022-08-26 01:32:59.337 WARN 38615 --- [http-nio-8081-exec-4] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 68333 +2022-08-26 01:33:00.199 WARN 38615 --- [http-nio-8081-exec-6] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 69243 +2022-08-26 01:36:07.067 WARN 38615 --- [http-nio-8081-exec-5] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 152205 +2022-08-26 01:36:07.090 WARN 38615 --- [http-nio-8081-exec-5] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 164473 +2022-08-26 01:36:07.115 WARN 38615 --- [http-nio-8081-exec-5] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 164528 +2022-08-26 01:36:07.141 WARN 38615 --- [http-nio-8081-exec-5] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 164590 +2022-08-26 01:36:07.161 WARN 38615 --- [http-nio-8081-exec-5] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 186279 +2022-08-26 01:42:30.212 WARN 38615 --- [http-nio-8081-exec-4] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 203170 +2022-08-26 01:42:30.235 WARN 38615 --- [http-nio-8081-exec-4] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 270213 +2022-08-26 01:42:30.261 WARN 38615 --- [http-nio-8081-exec-4] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 270388 +2022-08-26 01:42:30.281 WARN 38615 --- [http-nio-8081-exec-4] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 270453 +2022-08-26 01:42:30.324 WARN 38615 --- [http-nio-8081-exec-4] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 270526 +2022-08-26 01:51:13.146 WARN 38615 --- [http-nio-8081-exec-2] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 90171 +2022-08-26 01:51:13.146 WARN 38615 --- [http-nio-8081-exec-7] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 89987 +2022-08-26 01:51:13.147 WARN 38615 --- [http-nio-8081-exec-8] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 90983 +2022-08-26 01:51:13.155 WARN 38615 --- [http-nio-8081-exec-4] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 90684 +2022-08-26 01:54:18.139 WARN 38615 --- [http-nio-8081-exec-5] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 104452 +2022-08-26 01:54:18.169 WARN 38615 --- [http-nio-8081-exec-5] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 104817 +2022-08-26 01:54:18.202 WARN 38615 --- [http-nio-8081-exec-5] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 105151 +2022-08-26 01:54:18.224 WARN 38615 --- [http-nio-8081-exec-5] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 105223 +2022-08-26 01:54:18.242 WARN 38615 --- [http-nio-8081-exec-5] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 105258 +2022-08-26 01:54:18.268 WARN 38615 --- [http-nio-8081-exec-5] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 105364 +2022-08-26 01:54:18.290 WARN 38615 --- [http-nio-8081-exec-5] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 105492 +2022-08-26 01:58:03.380 WARN 38615 --- [http-nio-8081-exec-2] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 179438 +2022-08-26 01:58:03.385 WARN 38615 --- [http-nio-8081-exec-4] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 179530 +2022-08-26 01:58:03.385 WARN 38615 --- [http-nio-8081-exec-3] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 179304 +2022-08-26 01:58:03.386 WARN 38615 --- [http-nio-8081-exec-5] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 179559 +2022-08-26 01:58:03.388 WARN 38615 --- [http-nio-8081-exec-1] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 179516 +2022-08-26 01:58:03.405 WARN 38615 --- [http-nio-8081-exec-2] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 186386 +2022-08-26 02:00:13.041 ERROR 38615 --- [http-nio-8081-exec-6] c.e.c.c.e.GlobalExceptionHandler : java.io.IOException: Broken pipe + +org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe + at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:353) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.connector.OutputBuffer.flushByteBuffer(OutputBuffer.java:783) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.connector.OutputBuffer.append(OutputBuffer.java:688) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:388) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:366) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:96) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.springframework.security.web.util.OnCommittedResponseWrapper$SaveContextServletOutputStream.write(OnCommittedResponseWrapper.java:638) ~[spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.util.StreamUtils$NonClosingOutputStream.write(StreamUtils.java:287) ~[spring-core-5.3.9.jar:5.3.9] + at com.fasterxml.jackson.core.json.UTF8JsonGenerator._flushBuffer(UTF8JsonGenerator.java:2177) ~[jackson-core-2.12.4.jar:2.12.4] + at com.fasterxml.jackson.core.json.UTF8JsonGenerator._writeStringSegments(UTF8JsonGenerator.java:1319) ~[jackson-core-2.12.4.jar:2.12.4] + at com.fasterxml.jackson.core.json.UTF8JsonGenerator.writeString(UTF8JsonGenerator.java:517) ~[jackson-core-2.12.4.jar:2.12.4] + at com.fasterxml.jackson.databind.ser.std.StringSerializer.serialize(StringSerializer.java:41) ~[jackson-databind-2.12.4.jar:2.12.4] + at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728) ~[jackson-databind-2.12.4.jar:2.12.4] + at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:770) ~[jackson-databind-2.12.4.jar:2.12.4] + at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178) ~[jackson-databind-2.12.4.jar:2.12.4] + at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serializeContents(IndexedListSerializer.java:119) ~[jackson-databind-2.12.4.jar:2.12.4] + at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serialize(IndexedListSerializer.java:79) ~[jackson-databind-2.12.4.jar:2.12.4] + at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serialize(IndexedListSerializer.java:18) ~[jackson-databind-2.12.4.jar:2.12.4] + at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728) ~[jackson-databind-2.12.4.jar:2.12.4] + at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:770) ~[jackson-databind-2.12.4.jar:2.12.4] + at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178) ~[jackson-databind-2.12.4.jar:2.12.4] + at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:480) ~[jackson-databind-2.12.4.jar:2.12.4] + at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:319) ~[jackson-databind-2.12.4.jar:2.12.4] + at com.fasterxml.jackson.databind.ObjectWriter$Prefetch.serialize(ObjectWriter.java:1514) ~[jackson-databind-2.12.4.jar:2.12.4] + at com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:1006) ~[jackson-databind-2.12.4.jar:2.12.4] + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:454) ~[spring-web-5.3.9.jar:5.3.9] + at org.springframework.http.converter.AbstractGenericHttpMessageConverter.write(AbstractGenericHttpMessageConverter.java:104) ~[spring-web-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:290) ~[spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:183) ~[spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:78) ~[spring-web-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:124) ~[spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1064) ~[spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) ~[spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) [spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) [spring-webmvc-5.3.9.jar:5.3.9] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:655) [tomcat-embed-core-9.0.52.jar:4.0.FR] + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) [spring-webmvc-5.3.9.jar:5.3.9] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) [tomcat-embed-core-9.0.52.jar:4.0.FR] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) [tomcat-embed-websocket-9.0.52.jar:9.0.52] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113) [spring-web-5.3.9.jar:5.3.9] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:121) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at com.eleadmin.common.core.security.JwtAuthenticationFilter.doFilterInternal(JwtAuthenticationFilter.java:82) [classes/:na] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) [spring-web-5.3.9.jar:5.3.9] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1726) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.52.jar:9.0.52] + at java.lang.Thread.run(Thread.java:750) [na:1.8.0_322] + Suppressed: org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe + at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:353) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.connector.OutputBuffer.flushByteBuffer(OutputBuffer.java:783) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.connector.OutputBuffer.append(OutputBuffer.java:688) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:388) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:366) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:96) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.springframework.security.web.util.OnCommittedResponseWrapper$SaveContextServletOutputStream.write(OnCommittedResponseWrapper.java:638) ~[spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.util.StreamUtils$NonClosingOutputStream.write(StreamUtils.java:287) ~[spring-core-5.3.9.jar:5.3.9] + at com.fasterxml.jackson.core.json.UTF8JsonGenerator._flushBuffer(UTF8JsonGenerator.java:2177) ~[jackson-core-2.12.4.jar:2.12.4] + at com.fasterxml.jackson.core.json.UTF8JsonGenerator.close(UTF8JsonGenerator.java:1220) ~[jackson-core-2.12.4.jar:2.12.4] + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:458) ~[spring-web-5.3.9.jar:5.3.9] + ... 89 common frames omitted + Caused by: java.io.IOException: Broken pipe + at sun.nio.ch.FileDispatcherImpl.write0(Native Method) + at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47) + at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93) + at sun.nio.ch.IOUtil.write(IOUtil.java:65) + at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:470) + at org.apache.tomcat.util.net.NioChannel.write(NioChannel.java:135) + at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.doWrite(NioEndpoint.java:1363) + at org.apache.tomcat.util.net.SocketWrapperBase.doWrite(SocketWrapperBase.java:766) + at org.apache.tomcat.util.net.SocketWrapperBase.writeBlocking(SocketWrapperBase.java:586) + at org.apache.tomcat.util.net.SocketWrapperBase.write(SocketWrapperBase.java:530) + at org.apache.coyote.http11.Http11OutputBuffer$SocketOutputBuffer.doWrite(Http11OutputBuffer.java:547) + at org.apache.coyote.http11.filters.ChunkedOutputFilter.doWrite(ChunkedOutputFilter.java:110) + at org.apache.coyote.http11.Http11OutputBuffer.doWrite(Http11OutputBuffer.java:194) + at org.apache.coyote.Response.doWrite(Response.java:615) + at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:340) + ... 99 common frames omitted +Caused by: java.io.IOException: Broken pipe + at sun.nio.ch.FileDispatcherImpl.write0(Native Method) ~[na:1.8.0_322] + at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47) ~[na:1.8.0_322] + at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93) ~[na:1.8.0_322] + at sun.nio.ch.IOUtil.write(IOUtil.java:65) ~[na:1.8.0_322] + at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:470) ~[na:1.8.0_322] + at org.apache.tomcat.util.net.NioChannel.write(NioChannel.java:135) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.doWrite(NioEndpoint.java:1363) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.util.net.SocketWrapperBase.doWrite(SocketWrapperBase.java:766) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.util.net.SocketWrapperBase.writeBlocking(SocketWrapperBase.java:586) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.util.net.SocketWrapperBase.write(SocketWrapperBase.java:530) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.coyote.http11.Http11OutputBuffer$SocketOutputBuffer.doWrite(Http11OutputBuffer.java:547) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.coyote.http11.filters.ChunkedOutputFilter.doWrite(ChunkedOutputFilter.java:112) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.coyote.http11.Http11OutputBuffer.doWrite(Http11OutputBuffer.java:194) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.coyote.Response.doWrite(Response.java:615) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:340) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + ... 114 common frames omitted + +2022-08-26 02:00:13.044 WARN 38615 --- [http-nio-8081-exec-6] .m.m.a.ExceptionHandlerExceptionResolver : Failure in @ExceptionHandler com.eleadmin.common.core.exception.GlobalExceptionHandler#exceptionHandler(Throwable, HttpServletResponse) + +org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe + at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:353) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.connector.OutputBuffer.flushByteBuffer(OutputBuffer.java:783) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.connector.OutputBuffer.append(OutputBuffer.java:688) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:388) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:366) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:96) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.springframework.security.web.util.OnCommittedResponseWrapper$SaveContextServletOutputStream.write(OnCommittedResponseWrapper.java:638) ~[spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.util.StreamUtils$NonClosingOutputStream.write(StreamUtils.java:287) ~[spring-core-5.3.9.jar:5.3.9] + at com.fasterxml.jackson.core.json.UTF8JsonGenerator._flushBuffer(UTF8JsonGenerator.java:2177) ~[jackson-core-2.12.4.jar:2.12.4] + at com.fasterxml.jackson.core.json.UTF8JsonGenerator.flush(UTF8JsonGenerator.java:1190) ~[jackson-core-2.12.4.jar:2.12.4] + at com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:1008) ~[jackson-databind-2.12.4.jar:2.12.4] + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:454) ~[spring-web-5.3.9.jar:5.3.9] + at org.springframework.http.converter.AbstractGenericHttpMessageConverter.write(AbstractGenericHttpMessageConverter.java:104) ~[spring-web-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:290) ~[spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:183) ~[spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:78) ~[spring-web-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:124) ~[spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver.doResolveHandlerMethodException(ExceptionHandlerExceptionResolver.java:428) ~[spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.handler.AbstractHandlerMethodExceptionResolver.doResolveException(AbstractHandlerMethodExceptionResolver.java:75) [spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver.resolveException(AbstractHandlerExceptionResolver.java:141) [spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.handler.HandlerExceptionResolverComposite.resolveException(HandlerExceptionResolverComposite.java:80) [spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.DispatcherServlet.processHandlerException(DispatcherServlet.java:1324) [spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1135) [spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1081) [spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) [spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) [spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) [spring-webmvc-5.3.9.jar:5.3.9] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:655) [tomcat-embed-core-9.0.52.jar:4.0.FR] + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) [spring-webmvc-5.3.9.jar:5.3.9] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) [tomcat-embed-core-9.0.52.jar:4.0.FR] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) [tomcat-embed-websocket-9.0.52.jar:9.0.52] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113) [spring-web-5.3.9.jar:5.3.9] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:121) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at com.eleadmin.common.core.security.JwtAuthenticationFilter.doFilterInternal(JwtAuthenticationFilter.java:82) [classes/:na] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) [spring-web-5.3.9.jar:5.3.9] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1726) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.52.jar:9.0.52] + at java.lang.Thread.run(Thread.java:750) [na:1.8.0_322] +Caused by: java.io.IOException: Broken pipe + at sun.nio.ch.FileDispatcherImpl.write0(Native Method) ~[na:1.8.0_322] + at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47) ~[na:1.8.0_322] + at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93) ~[na:1.8.0_322] + at sun.nio.ch.IOUtil.write(IOUtil.java:65) ~[na:1.8.0_322] + at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:470) ~[na:1.8.0_322] + at org.apache.tomcat.util.net.NioChannel.write(NioChannel.java:135) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.doWrite(NioEndpoint.java:1363) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.util.net.SocketWrapperBase.doWrite(SocketWrapperBase.java:766) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.util.net.SocketWrapperBase.writeBlocking(SocketWrapperBase.java:586) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.util.net.SocketWrapperBase.write(SocketWrapperBase.java:530) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.coyote.http11.Http11OutputBuffer$SocketOutputBuffer.doWrite(Http11OutputBuffer.java:547) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.coyote.http11.filters.ChunkedOutputFilter.doWrite(ChunkedOutputFilter.java:110) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.coyote.http11.Http11OutputBuffer.doWrite(Http11OutputBuffer.java:194) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.coyote.Response.doWrite(Response.java:615) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:340) ~[tomcat-embed-core-9.0.52.jar:9.0.52] + ... 103 common frames omitted + +2022-08-26 02:02:26.490 WARN 38615 --- [http-nio-8081-exec-6] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 106354 +2022-08-26 02:02:26.499 WARN 38615 --- [http-nio-8081-exec-3] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 106792 +2022-08-26 02:02:26.499 WARN 38615 --- [http-nio-8081-exec-7] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 106493 +2022-08-26 02:02:26.500 WARN 38615 --- [http-nio-8081-exec-4] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 106793 +2022-08-26 02:02:26.502 WARN 38615 --- [http-nio-8081-exec-5] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 106733 +2022-08-26 02:02:26.517 WARN 38615 --- [http-nio-8081-exec-6] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 133542 +2022-08-26 02:02:26.519 WARN 38615 --- [http-nio-8081-exec-3] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 180972 +2022-08-26 02:04:15.321 WARN 38615 --- [http-nio-8081-exec-1] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 63219 +2022-08-26 02:04:15.324 WARN 38615 --- [http-nio-8081-exec-4] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 63422 +2022-08-26 02:04:15.326 WARN 38615 --- [http-nio-8081-exec-8] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 63422 +2022-08-26 02:04:15.327 WARN 38615 --- [http-nio-8081-exec-7] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 63155 +2022-08-26 02:04:15.328 WARN 38615 --- [http-nio-8081-exec-2] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 63351 +2022-08-26 02:05:50.763 WARN 38615 --- [http-nio-8081-exec-9] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 93650 +2022-08-26 02:05:50.798 WARN 38615 --- [http-nio-8081-exec-5] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 94267 +2022-08-26 02:05:50.800 WARN 38615 --- [http-nio-8081-exec-10] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 93878 +2022-08-26 02:05:50.798 WARN 38615 --- [http-nio-8081-exec-3] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 94397 +2022-08-26 02:07:09.207 WARN 38615 --- [http-nio-8081-exec-6] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 61630 +2022-08-26 02:07:09.210 WARN 38615 --- [http-nio-8081-exec-8] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 61823 +2022-08-26 02:07:09.211 WARN 38615 --- [http-nio-8081-exec-2] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 62068 +2022-08-26 02:07:09.212 WARN 38615 --- [http-nio-8081-exec-4] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 61960 +2022-08-26 02:07:09.213 WARN 38615 --- [http-nio-8081-exec-1] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 61377 +2022-08-26 02:07:09.224 WARN 38615 --- [http-nio-8081-exec-6] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 62111 +2022-08-26 02:10:18.836 WARN 38615 --- [http-nio-8081-exec-1] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 157089 +2022-08-26 02:10:18.838 WARN 38615 --- [http-nio-8081-exec-4] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 157179 +2022-08-26 02:10:18.839 WARN 38615 --- [http-nio-8081-exec-6] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 157251 +2022-08-26 02:10:18.841 WARN 38615 --- [http-nio-8081-exec-5] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 157270 +2022-08-26 02:10:18.842 WARN 38615 --- [http-nio-8081-exec-2] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 157191 +2022-08-26 02:11:40.167 WARN 38615 --- [http-nio-8081-exec-9] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 67382 +2022-08-26 02:11:40.243 WARN 38615 --- [http-nio-8081-exec-9] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 67517 +2022-08-26 02:14:20.598 WARN 38615 --- [http-nio-8081-exec-1] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 68736 +2022-08-26 02:14:20.628 WARN 38615 --- [http-nio-8081-exec-1] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 68784 +2022-08-26 02:14:20.653 WARN 38615 --- [http-nio-8081-exec-1] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 68827 +2022-08-26 02:14:20.712 WARN 38615 --- [http-nio-8081-exec-1] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 85290 +2022-08-26 02:14:20.732 WARN 38615 --- [http-nio-8081-exec-1] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 85368 +2022-08-26 02:15:51.360 WARN 38615 --- [http-nio-8081-exec-5] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 64590 +2022-08-26 02:15:51.365 WARN 38615 --- [http-nio-8081-exec-8] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 64559 +2022-08-26 02:15:51.367 WARN 38615 --- [http-nio-8081-exec-10] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 64273 +2022-08-26 02:15:51.380 WARN 38615 --- [http-nio-8081-exec-5] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 64622 +2022-08-26 02:15:51.384 WARN 38615 --- [http-nio-8081-exec-8] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 87019 +2022-08-26 02:20:19.017 WARN 39188 --- [main] com.alibaba.druid.pool.DruidDataSource : removeAbandoned is true, not use in production. +2022-08-26 02:20:23.143 WARN 39188 --- [main] d.s.r.o.OperationImplicitParameterReader : Unable to interpret the implicit parameter configuration with dataType: string, dataTypeClass: class java.lang.Void +2022-08-26 02:20:23.145 WARN 39188 --- [main] d.s.r.o.OperationImplicitParameterReader : Unable to interpret the implicit parameter configuration with dataType: string, dataTypeClass: class java.lang.Void +2022-08-26 02:20:23.147 WARN 39188 --- [main] d.s.r.o.OperationImplicitParameterReader : Unable to interpret the implicit parameter configuration with dataType: string, dataTypeClass: class java.lang.Void +2022-08-26 02:20:23.363 WARN 39188 --- [main] d.s.r.o.OperationImplicitParameterReader : Unable to interpret the implicit parameter configuration with dataType: string, dataTypeClass: class java.lang.Void +2022-08-26 08:56:20.744 WARN 38615 --- [http-nio-8081-exec-6] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 109209 +2022-08-26 08:56:20.772 WARN 38615 --- [http-nio-8081-exec-6] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 109429 +2022-08-26 08:56:20.799 WARN 38615 --- [http-nio-8081-exec-6] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 109577 +2022-08-26 08:56:20.820 WARN 38615 --- [http-nio-8081-exec-6] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 109657 +2022-08-26 08:56:20.844 WARN 38615 --- [http-nio-8081-exec-6] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 109719 +2022-08-26 08:58:04.091 WARN 38615 --- [http-nio-8081-exec-6] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 101195 +2022-08-26 08:58:04.115 WARN 38615 --- [http-nio-8081-exec-6] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 101384 +2022-08-26 08:58:04.137 WARN 38615 --- [http-nio-8081-exec-6] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 101445 +2022-08-26 09:00:54.934 WARN 38615 --- [http-nio-8081-exec-9] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 133212 +2022-08-26 09:00:54.962 WARN 38615 --- [http-nio-8081-exec-9] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 134877 +2022-08-26 09:51:31.233 WARN 38615 --- [http-nio-8081-exec-2] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 60166 +2022-08-26 09:54:24.846 WARN 38615 --- [http-nio-8081-exec-7] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 86369 +2022-08-26 09:54:24.870 WARN 38615 --- [http-nio-8081-exec-7] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 95522 +2022-08-26 09:54:24.895 WARN 38615 --- [http-nio-8081-exec-7] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 95591 +2022-08-26 09:54:24.917 WARN 38615 --- [http-nio-8081-exec-7] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 95641 +2022-08-26 09:59:00.155 WARN 38615 --- [http-nio-8081-exec-2] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 194164 +2022-08-26 09:59:00.178 WARN 38615 --- [http-nio-8081-exec-2] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 202790 +2022-08-26 09:59:00.197 WARN 38615 --- [http-nio-8081-exec-2] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 203123 +2022-08-26 09:59:00.219 WARN 38615 --- [http-nio-8081-exec-2] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 218827 +2022-08-26 10:02:32.171 WARN 38615 --- [http-nio-8081-exec-6] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 86998 +2022-08-26 10:02:32.173 WARN 38615 --- [http-nio-8081-exec-10] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 86973 +2022-08-26 10:02:32.205 WARN 38615 --- [http-nio-8081-exec-6] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 87031 +2022-08-26 10:04:49.511 WARN 38615 --- [http-nio-8081-exec-10] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 84845 +2022-08-26 10:04:49.541 WARN 38615 --- [http-nio-8081-exec-10] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 101729 +2022-08-26 10:04:49.561 WARN 38615 --- [http-nio-8081-exec-10] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 101868 +2022-08-26 10:06:22.982 WARN 38615 --- [http-nio-8081-exec-4] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 63248 +2022-08-26 10:06:22.984 WARN 38615 --- [http-nio-8081-exec-8] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 63279 +2022-08-26 10:06:22.984 WARN 38615 --- [http-nio-8081-exec-5] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 63248 +2022-08-26 10:06:23.011 WARN 38615 --- [http-nio-8081-exec-8] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 89582 +2022-08-26 10:09:45.135 WARN 38615 --- [http-nio-8081-exec-7] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 81917 +2022-08-26 10:09:48.566 WARN 38615 --- [http-nio-8081-exec-10] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 85407 +2022-08-26 10:09:48.592 WARN 38615 --- [http-nio-8081-exec-10] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 85434 +2022-08-26 10:09:48.619 WARN 38615 --- [http-nio-8081-exec-10] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 191920 +2022-08-26 10:11:37.382 WARN 38615 --- [http-nio-8081-exec-1] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 108046 +2022-08-26 10:11:37.412 WARN 38615 --- [http-nio-8081-exec-1] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 108282 +2022-08-26 10:11:37.431 WARN 38615 --- [http-nio-8081-exec-1] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 108358 +2022-08-26 10:13:12.895 WARN 38615 --- [http-nio-8081-exec-5] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 76720 +2022-08-26 10:13:12.928 WARN 38615 --- [http-nio-8081-exec-3] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 78694 +2022-08-26 10:13:12.929 WARN 38615 --- [http-nio-8081-exec-5] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 78697 +2022-08-26 10:13:12.947 WARN 38615 --- [http-nio-8081-exec-3] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 78732 +2022-08-26 10:15:33.928 WARN 38615 --- [http-nio-8081-exec-12] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 73586 +2022-08-26 10:18:37.130 WARN 38615 --- [http-nio-8081-exec-11] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 119140 +2022-08-26 10:18:37.157 WARN 38615 --- [http-nio-8081-exec-11] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 127511 +2022-08-26 10:18:37.181 WARN 38615 --- [http-nio-8081-exec-11] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 127724 +2022-08-26 10:18:37.210 WARN 38615 --- [http-nio-8081-exec-11] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 127757 +2022-08-26 10:18:37.229 WARN 38615 --- [http-nio-8081-exec-11] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 127900 +2022-08-26 10:20:31.141 WARN 38615 --- [http-nio-8081-exec-4] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 97828 +2022-08-26 10:20:31.175 WARN 38615 --- [http-nio-8081-exec-4] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 109307 +2022-08-26 10:20:31.198 WARN 38615 --- [http-nio-8081-exec-4] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 109366 +2022-08-26 10:20:31.234 WARN 38615 --- [http-nio-8081-exec-4] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 109483 +2022-08-26 10:20:31.255 WARN 38615 --- [http-nio-8081-exec-4] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 109505 +2022-08-26 10:24:58.398 WARN 38615 --- [http-nio-8081-exec-10] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 132482 +2022-08-26 10:24:58.422 WARN 38615 --- [http-nio-8081-exec-10] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 165658 +2022-08-26 10:24:58.451 WARN 38615 --- [http-nio-8081-exec-10] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 165721 +2022-08-26 10:24:58.480 WARN 38615 --- [http-nio-8081-exec-10] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 165795 +2022-08-26 10:24:58.507 WARN 38615 --- [http-nio-8081-exec-10] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 165844 +2022-08-26 10:28:10.927 WARN 38615 --- [http-nio-8081-exec-9] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 136346 +2022-08-26 10:29:40.797 WARN 38615 --- [http-nio-8081-exec-9] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 62004 +2022-08-26 10:29:40.820 WARN 38615 --- [http-nio-8081-exec-9] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 83562 +2022-08-26 10:29:40.845 WARN 38615 --- [http-nio-8081-exec-9] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 83946 +2022-08-26 10:29:40.868 WARN 38615 --- [http-nio-8081-exec-9] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 84061 +2022-08-26 10:29:40.912 WARN 38615 --- [http-nio-8081-exec-9] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 84148 +2022-08-26 10:31:16.713 WARN 38615 --- [http-nio-8081-exec-9] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 85424 +2022-08-26 10:34:32.977 WARN 38615 --- [http-nio-8081-exec-4] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 195294 +2022-08-26 10:34:33.000 WARN 38615 --- [http-nio-8081-exec-4] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 195519 +2022-08-26 10:37:37.139 WARN 38615 --- [http-nio-8081-exec-10] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 134835 +2022-08-26 10:37:37.162 WARN 38615 --- [http-nio-8081-exec-10] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 159839 +2022-08-26 10:37:37.186 WARN 38615 --- [http-nio-8081-exec-10] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 159863 +2022-08-26 10:37:37.208 WARN 38615 --- [http-nio-8081-exec-10] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 160048 +2022-08-26 10:37:37.235 WARN 38615 --- [http-nio-8081-exec-10] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 160126 +2022-08-26 10:44:42.725 WARN 38615 --- [http-nio-8081-exec-2] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 103091 +2022-08-26 10:44:42.728 WARN 38615 --- [http-nio-8081-exec-6] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 324429 +2022-08-26 10:44:42.733 WARN 38615 --- [http-nio-8081-exec-4] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 262693 +2022-08-26 10:44:42.733 WARN 38615 --- [http-nio-8081-exec-1] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 324589 +2022-08-26 10:44:42.742 WARN 38615 --- [http-nio-8081-exec-10] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 324627 +2022-08-26 10:46:21.785 WARN 38615 --- [http-nio-8081-exec-7] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 93166 +2022-08-26 10:46:21.812 WARN 38615 --- [http-nio-8081-exec-7] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 93776 +2022-08-26 10:46:21.835 WARN 38615 --- [http-nio-8081-exec-7] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 93846 +2022-08-26 10:46:21.858 WARN 38615 --- [http-nio-8081-exec-7] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 93887 +2022-08-26 10:48:54.783 WARN 38615 --- [http-nio-8081-exec-9] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 93642 +2022-08-26 10:48:54.809 WARN 38615 --- [http-nio-8081-exec-9] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 93683 +2022-08-26 10:48:54.844 WARN 38615 --- [http-nio-8081-exec-9] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 93731 +2022-08-26 10:51:13.177 WARN 38615 --- [http-nio-8081-exec-1] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 93883 +2022-08-26 10:51:13.210 WARN 38615 --- [http-nio-8081-exec-1] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 105953 +2022-08-26 13:09:00.525 WARN 40740 --- [restartedMain] com.alibaba.druid.pool.DruidDataSource : removeAbandoned is true, not use in production. +2022-08-26 13:09:03.823 WARN 40740 --- [restartedMain] d.s.r.o.OperationImplicitParameterReader : Unable to interpret the implicit parameter configuration with dataType: string, dataTypeClass: class java.lang.Void +2022-08-26 13:09:03.825 WARN 40740 --- [restartedMain] d.s.r.o.OperationImplicitParameterReader : Unable to interpret the implicit parameter configuration with dataType: string, dataTypeClass: class java.lang.Void +2022-08-26 13:09:03.826 WARN 40740 --- [restartedMain] d.s.r.o.OperationImplicitParameterReader : Unable to interpret the implicit parameter configuration with dataType: string, dataTypeClass: class java.lang.Void +2022-08-26 13:09:04.002 WARN 40740 --- [restartedMain] d.s.r.o.OperationImplicitParameterReader : Unable to interpret the implicit parameter configuration with dataType: string, dataTypeClass: class java.lang.Void +2022-08-26 13:23:06.030 WARN 40740 --- [http-nio-8081-exec-3] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 91373 +2022-08-26 13:23:06.052 WARN 40740 --- [http-nio-8081-exec-3] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 91751 +2022-08-26 13:27:08.170 WARN 40740 --- [http-nio-8081-exec-5] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 138213 +2022-08-26 13:27:08.208 WARN 40740 --- [http-nio-8081-exec-5] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 209501 +2022-08-26 13:27:08.268 WARN 40740 --- [http-nio-8081-exec-5] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 210873 +2022-08-26 13:28:12.850 WARN 40740 --- [http-nio-8081-exec-9] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 63774 +2022-08-26 13:30:01.082 WARN 40740 --- [http-nio-8081-exec-4] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 105478 +2022-08-26 13:30:01.151 WARN 40740 --- [http-nio-8081-exec-4] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 105582 +2022-08-26 13:31:05.605 ERROR 40740 --- [http-nio-8081-exec-7] c.e.c.c.e.GlobalExceptionHandler : +### Error updating database. Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 'introduction' at row 1 +### The error may exist in com/eleadmin/common/system/mapper/UserMapper.java (best guess) +### The error may involve com.eleadmin.common.system.mapper.UserMapper.updateById-Inline +### The error occurred while setting parameters +### SQL: UPDATE sys_user SET nickname = ?, avatar = ?, sex = ?, phone = ?, email = ?, birthday = ?, address = ?, introduction = ?, organization_id = ? WHERE tenant_id = 5 AND user_id = ? AND deleted = 0 +### Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 'introduction' at row 1 +; Data truncation: Data too long for column 'introduction' at row 1; nested exception is com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 'introduction' at row 1 + +org.springframework.dao.DataIntegrityViolationException: +### Error updating database. Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 'introduction' at row 1 +### The error may exist in com/eleadmin/common/system/mapper/UserMapper.java (best guess) +### The error may involve com.eleadmin.common.system.mapper.UserMapper.updateById-Inline +### The error occurred while setting parameters +### SQL: UPDATE sys_user SET nickname = ?, avatar = ?, sex = ?, phone = ?, email = ?, birthday = ?, address = ?, introduction = ?, organization_id = ? WHERE tenant_id = 5 AND user_id = ? AND deleted = 0 +### Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 'introduction' at row 1 +; Data truncation: Data too long for column 'introduction' at row 1; nested exception is com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 'introduction' at row 1 + at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:104) ~[spring-jdbc-5.3.9.jar:5.3.9] + at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70) ~[spring-jdbc-5.3.9.jar:5.3.9] + at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:79) ~[spring-jdbc-5.3.9.jar:5.3.9] + at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:79) ~[spring-jdbc-5.3.9.jar:5.3.9] + at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:88) ~[mybatis-spring-2.0.5.jar:2.0.5] + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:440) ~[mybatis-spring-2.0.5.jar:2.0.5] + at com.sun.proxy.$Proxy100.update(Unknown Source) ~[na:na] + at org.mybatis.spring.SqlSessionTemplate.update(SqlSessionTemplate.java:287) ~[mybatis-spring-2.0.5.jar:2.0.5] + at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:65) ~[mybatis-plus-core-3.4.1.jar:3.4.1] + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148) ~[mybatis-plus-core-3.4.1.jar:3.4.1] + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) ~[mybatis-plus-core-3.4.1.jar:3.4.1] + at com.sun.proxy.$Proxy109.updateById(Unknown Source) ~[na:na] + at com.eleadmin.common.system.service.impl.UserServiceImpl.updateUser(UserServiceImpl.java:143) ~[classes/:na] + at com.eleadmin.common.system.service.impl.UserServiceImpl$$FastClassBySpringCGLIB$$641f98e1.invoke() ~[classes/:na] + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.9.jar:5.3.9] + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779) ~[spring-aop-5.3.9.jar:5.3.9] + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.3.9.jar:5.3.9] + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) ~[spring-aop-5.3.9.jar:5.3.9] + at com.alibaba.druid.support.spring.stat.DruidStatInterceptor.invoke(DruidStatInterceptor.java:73) ~[druid-1.2.6.jar:1.2.6] + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.9.jar:5.3.9] + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) ~[spring-aop-5.3.9.jar:5.3.9] + at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) ~[spring-tx-5.3.9.jar:5.3.9] + at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) ~[spring-tx-5.3.9.jar:5.3.9] + at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) ~[spring-tx-5.3.9.jar:5.3.9] + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.9.jar:5.3.9] + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) ~[spring-aop-5.3.9.jar:5.3.9] + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692) ~[spring-aop-5.3.9.jar:5.3.9] + at com.eleadmin.common.system.service.impl.UserServiceImpl$$EnhancerBySpringCGLIB$$9df3ddd.updateUser() ~[classes/:na] + at com.eleadmin.common.system.controller.UserController.update(UserController.java:102) ~[classes/:na] + at com.eleadmin.common.system.controller.UserController$$FastClassBySpringCGLIB$$629aac6d.invoke() ~[classes/:na] + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.9.jar:5.3.9] + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779) ~[spring-aop-5.3.9.jar:5.3.9] + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.3.9.jar:5.3.9] + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) ~[spring-aop-5.3.9.jar:5.3.9] + at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:64) ~[spring-aop-5.3.9.jar:5.3.9] + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175) ~[spring-aop-5.3.9.jar:5.3.9] + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) ~[spring-aop-5.3.9.jar:5.3.9] + at org.springframework.aop.framework.adapter.AfterReturningAdviceInterceptor.invoke(AfterReturningAdviceInterceptor.java:57) ~[spring-aop-5.3.9.jar:5.3.9] + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175) ~[spring-aop-5.3.9.jar:5.3.9] + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) ~[spring-aop-5.3.9.jar:5.3.9] + at org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:58) ~[spring-aop-5.3.9.jar:5.3.9] + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175) ~[spring-aop-5.3.9.jar:5.3.9] + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) ~[spring-aop-5.3.9.jar:5.3.9] + at org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:61) ~[spring-security-core-5.5.2.jar:5.5.2] + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.9.jar:5.3.9] + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) ~[spring-aop-5.3.9.jar:5.3.9] + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) ~[spring-aop-5.3.9.jar:5.3.9] + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.9.jar:5.3.9] + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) ~[spring-aop-5.3.9.jar:5.3.9] + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692) ~[spring-aop-5.3.9.jar:5.3.9] + at com.eleadmin.common.system.controller.UserController$$EnhancerBySpringCGLIB$$ee6b9d11.update() ~[classes/:na] + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_322] + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_322] + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_322] + at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_322] + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197) ~[spring-web-5.3.9.jar:5.3.9] + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141) ~[spring-web-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1064) ~[spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) ~[spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) [spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.FrameworkServlet.doPut(FrameworkServlet.java:920) [spring-webmvc-5.3.9.jar:5.3.9] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:684) [tomcat-embed-core-9.0.52.jar:4.0.FR] + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) [spring-webmvc-5.3.9.jar:5.3.9] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) [tomcat-embed-core-9.0.52.jar:4.0.FR] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) [tomcat-embed-websocket-9.0.52.jar:9.0.52] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113) [spring-web-5.3.9.jar:5.3.9] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:121) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at com.eleadmin.common.core.security.JwtAuthenticationFilter.doFilterInternal(JwtAuthenticationFilter.java:82) [classes/:na] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) [spring-web-5.3.9.jar:5.3.9] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1726) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.52.jar:9.0.52] + at java.lang.Thread.run(Thread.java:750) [na:1.8.0_322] +Caused by: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 'introduction' at row 1 + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:104) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:370) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3461) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.wall.WallFilter.preparedStatement_execute(WallFilter.java:660) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3459) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:440) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3459) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.execute(PreparedStatementProxyImpl.java:167) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:497) ~[druid-1.2.6.jar:1.2.6] + at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:47) ~[mybatis-3.5.6.jar:3.5.6] + at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:74) ~[mybatis-3.5.6.jar:3.5.6] + at sun.reflect.GeneratedMethodAccessor416.invoke(Unknown Source) ~[na:na] + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_322] + at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_322] + at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:63) ~[mybatis-3.5.6.jar:3.5.6] + at com.sun.proxy.$Proxy197.update(Unknown Source) ~[na:na] + at com.baomidou.mybatisplus.core.executor.MybatisSimpleExecutor.doUpdate(MybatisSimpleExecutor.java:56) ~[mybatis-plus-core-3.4.1.jar:3.4.1] + at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117) ~[mybatis-3.5.6.jar:3.5.6] + at com.baomidou.mybatisplus.core.executor.MybatisCachingExecutor.update(MybatisCachingExecutor.java:85) ~[mybatis-plus-core-3.4.1.jar:3.4.1] + at sun.reflect.GeneratedMethodAccessor415.invoke(Unknown Source) ~[na:na] + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_322] + at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_322] + at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49) ~[mybatis-3.5.6.jar:3.5.6] + at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:83) ~[mybatis-plus-extension-3.4.1.jar:3.4.1] + at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) ~[mybatis-3.5.6.jar:3.5.6] + at com.sun.proxy.$Proxy196.update(Unknown Source) ~[na:na] + at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197) ~[mybatis-3.5.6.jar:3.5.6] + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_322] + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_322] + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_322] + at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_322] + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:426) ~[mybatis-spring-2.0.5.jar:2.0.5] + ... 136 common frames omitted + +2022-08-26 13:31:05.607 WARN 40740 --- [http-nio-8081-exec-7] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.dao.DataIntegrityViolationException: +### Error updating database. Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 'introduction' at row 1 +### The error may exist in com/eleadmin/common/system/mapper/UserMapper.java (best guess) +### The error may involve com.eleadmin.common.system.mapper.UserMapper.updateById-Inline +### The error occurred while setting parameters +### SQL: UPDATE sys_user SET nickname = ?, avatar = ?, sex = ?, phone = ?, email = ?, birthday = ?, address = ?, introduction = ?, organization_id = ? WHERE tenant_id = 5 AND user_id = ? AND deleted = 0 +### Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 'introduction' at row 1 +; Data truncation: Data too long for column 'introduction' at row 1; nested exception is com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 'introduction' at row 1] +2022-08-26 13:31:41.824 ERROR 40740 --- [http-nio-8081-exec-6] c.e.c.c.e.GlobalExceptionHandler : +### Error updating database. Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 'introduction' at row 1 +### The error may exist in com/eleadmin/common/system/mapper/UserMapper.java (best guess) +### The error may involve com.eleadmin.common.system.mapper.UserMapper.updateById-Inline +### The error occurred while setting parameters +### SQL: UPDATE sys_user SET nickname = ?, avatar = ?, sex = ?, phone = ?, email = ?, birthday = ?, address = ?, introduction = ?, organization_id = ? WHERE tenant_id = 5 AND user_id = ? AND deleted = 0 +### Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 'introduction' at row 1 +; Data truncation: Data too long for column 'introduction' at row 1; nested exception is com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 'introduction' at row 1 + +org.springframework.dao.DataIntegrityViolationException: +### Error updating database. Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 'introduction' at row 1 +### The error may exist in com/eleadmin/common/system/mapper/UserMapper.java (best guess) +### The error may involve com.eleadmin.common.system.mapper.UserMapper.updateById-Inline +### The error occurred while setting parameters +### SQL: UPDATE sys_user SET nickname = ?, avatar = ?, sex = ?, phone = ?, email = ?, birthday = ?, address = ?, introduction = ?, organization_id = ? WHERE tenant_id = 5 AND user_id = ? AND deleted = 0 +### Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 'introduction' at row 1 +; Data truncation: Data too long for column 'introduction' at row 1; nested exception is com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 'introduction' at row 1 + at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:104) ~[spring-jdbc-5.3.9.jar:5.3.9] + at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70) ~[spring-jdbc-5.3.9.jar:5.3.9] + at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:79) ~[spring-jdbc-5.3.9.jar:5.3.9] + at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:79) ~[spring-jdbc-5.3.9.jar:5.3.9] + at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:88) ~[mybatis-spring-2.0.5.jar:2.0.5] + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:440) ~[mybatis-spring-2.0.5.jar:2.0.5] + at com.sun.proxy.$Proxy100.update(Unknown Source) ~[na:na] + at org.mybatis.spring.SqlSessionTemplate.update(SqlSessionTemplate.java:287) ~[mybatis-spring-2.0.5.jar:2.0.5] + at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:65) ~[mybatis-plus-core-3.4.1.jar:3.4.1] + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148) ~[mybatis-plus-core-3.4.1.jar:3.4.1] + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) ~[mybatis-plus-core-3.4.1.jar:3.4.1] + at com.sun.proxy.$Proxy109.updateById(Unknown Source) ~[na:na] + at com.eleadmin.common.system.service.impl.UserServiceImpl.updateUser(UserServiceImpl.java:143) ~[classes/:na] + at com.eleadmin.common.system.service.impl.UserServiceImpl$$FastClassBySpringCGLIB$$641f98e1.invoke() ~[classes/:na] + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.9.jar:5.3.9] + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779) ~[spring-aop-5.3.9.jar:5.3.9] + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.3.9.jar:5.3.9] + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) ~[spring-aop-5.3.9.jar:5.3.9] + at com.alibaba.druid.support.spring.stat.DruidStatInterceptor.invoke(DruidStatInterceptor.java:73) ~[druid-1.2.6.jar:1.2.6] + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.9.jar:5.3.9] + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) ~[spring-aop-5.3.9.jar:5.3.9] + at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) ~[spring-tx-5.3.9.jar:5.3.9] + at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) ~[spring-tx-5.3.9.jar:5.3.9] + at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) ~[spring-tx-5.3.9.jar:5.3.9] + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.9.jar:5.3.9] + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) ~[spring-aop-5.3.9.jar:5.3.9] + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692) ~[spring-aop-5.3.9.jar:5.3.9] + at com.eleadmin.common.system.service.impl.UserServiceImpl$$EnhancerBySpringCGLIB$$9df3ddd.updateUser() ~[classes/:na] + at com.eleadmin.common.system.controller.UserController.update(UserController.java:102) ~[classes/:na] + at com.eleadmin.common.system.controller.UserController$$FastClassBySpringCGLIB$$629aac6d.invoke() ~[classes/:na] + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.9.jar:5.3.9] + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779) ~[spring-aop-5.3.9.jar:5.3.9] + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.3.9.jar:5.3.9] + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) ~[spring-aop-5.3.9.jar:5.3.9] + at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:64) ~[spring-aop-5.3.9.jar:5.3.9] + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175) ~[spring-aop-5.3.9.jar:5.3.9] + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) ~[spring-aop-5.3.9.jar:5.3.9] + at org.springframework.aop.framework.adapter.AfterReturningAdviceInterceptor.invoke(AfterReturningAdviceInterceptor.java:57) ~[spring-aop-5.3.9.jar:5.3.9] + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175) ~[spring-aop-5.3.9.jar:5.3.9] + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) ~[spring-aop-5.3.9.jar:5.3.9] + at org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:58) ~[spring-aop-5.3.9.jar:5.3.9] + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175) ~[spring-aop-5.3.9.jar:5.3.9] + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) ~[spring-aop-5.3.9.jar:5.3.9] + at org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:61) ~[spring-security-core-5.5.2.jar:5.5.2] + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.9.jar:5.3.9] + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) ~[spring-aop-5.3.9.jar:5.3.9] + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) ~[spring-aop-5.3.9.jar:5.3.9] + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.9.jar:5.3.9] + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) ~[spring-aop-5.3.9.jar:5.3.9] + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692) ~[spring-aop-5.3.9.jar:5.3.9] + at com.eleadmin.common.system.controller.UserController$$EnhancerBySpringCGLIB$$ee6b9d11.update() ~[classes/:na] + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_322] + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_322] + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_322] + at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_322] + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197) ~[spring-web-5.3.9.jar:5.3.9] + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141) ~[spring-web-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1064) ~[spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) ~[spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) [spring-webmvc-5.3.9.jar:5.3.9] + at org.springframework.web.servlet.FrameworkServlet.doPut(FrameworkServlet.java:920) [spring-webmvc-5.3.9.jar:5.3.9] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:684) [tomcat-embed-core-9.0.52.jar:4.0.FR] + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) [spring-webmvc-5.3.9.jar:5.3.9] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) [tomcat-embed-core-9.0.52.jar:4.0.FR] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) [tomcat-embed-websocket-9.0.52.jar:9.0.52] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113) [spring-web-5.3.9.jar:5.3.9] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:121) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at com.eleadmin.common.core.security.JwtAuthenticationFilter.doFilterInternal(JwtAuthenticationFilter.java:82) [classes/:na] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) [spring-security-web-5.5.2.jar:5.5.2] + at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) [spring-web-5.3.9.jar:5.3.9] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) [spring-web-5.3.9.jar:5.3.9] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1726) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) [tomcat-embed-core-9.0.52.jar:9.0.52] + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.52.jar:9.0.52] + at java.lang.Thread.run(Thread.java:750) [na:1.8.0_322] +Caused by: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 'introduction' at row 1 + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:104) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:370) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3461) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.wall.WallFilter.preparedStatement_execute(WallFilter.java:660) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3459) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:440) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3459) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.execute(PreparedStatementProxyImpl.java:167) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:497) ~[druid-1.2.6.jar:1.2.6] + at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:47) ~[mybatis-3.5.6.jar:3.5.6] + at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:74) ~[mybatis-3.5.6.jar:3.5.6] + at sun.reflect.GeneratedMethodAccessor416.invoke(Unknown Source) ~[na:na] + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_322] + at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_322] + at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:63) ~[mybatis-3.5.6.jar:3.5.6] + at com.sun.proxy.$Proxy197.update(Unknown Source) ~[na:na] + at com.baomidou.mybatisplus.core.executor.MybatisSimpleExecutor.doUpdate(MybatisSimpleExecutor.java:56) ~[mybatis-plus-core-3.4.1.jar:3.4.1] + at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117) ~[mybatis-3.5.6.jar:3.5.6] + at com.baomidou.mybatisplus.core.executor.MybatisCachingExecutor.update(MybatisCachingExecutor.java:85) ~[mybatis-plus-core-3.4.1.jar:3.4.1] + at sun.reflect.GeneratedMethodAccessor415.invoke(Unknown Source) ~[na:na] + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_322] + at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_322] + at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49) ~[mybatis-3.5.6.jar:3.5.6] + at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:83) ~[mybatis-plus-extension-3.4.1.jar:3.4.1] + at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) ~[mybatis-3.5.6.jar:3.5.6] + at com.sun.proxy.$Proxy196.update(Unknown Source) ~[na:na] + at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197) ~[mybatis-3.5.6.jar:3.5.6] + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_322] + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_322] + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_322] + at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_322] + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:426) ~[mybatis-spring-2.0.5.jar:2.0.5] + ... 136 common frames omitted + +2022-08-26 13:31:41.829 WARN 40740 --- [http-nio-8081-exec-6] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.dao.DataIntegrityViolationException: +### Error updating database. Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 'introduction' at row 1 +### The error may exist in com/eleadmin/common/system/mapper/UserMapper.java (best guess) +### The error may involve com.eleadmin.common.system.mapper.UserMapper.updateById-Inline +### The error occurred while setting parameters +### SQL: UPDATE sys_user SET nickname = ?, avatar = ?, sex = ?, phone = ?, email = ?, birthday = ?, address = ?, introduction = ?, organization_id = ? WHERE tenant_id = 5 AND user_id = ? AND deleted = 0 +### Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 'introduction' at row 1 +; Data truncation: Data too long for column 'introduction' at row 1; nested exception is com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 'introduction' at row 1] +2022-08-26 13:34:02.391 WARN 40740 --- [http-nio-8081-exec-9] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 72287 +2022-08-26 13:34:02.433 WARN 40740 --- [http-nio-8081-exec-9] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 195271 +2022-08-26 13:34:02.499 WARN 40740 --- [http-nio-8081-exec-9] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 195467 +2022-08-26 13:34:02.539 WARN 40740 --- [http-nio-8081-exec-9] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 239879 +2022-08-26 13:35:41.940 WARN 40740 --- [http-nio-8081-exec-4] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 97038 +2022-08-26 13:37:56.487 WARN 40740 --- [http-nio-8081-exec-1] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 133791 +2022-08-26 13:39:07.031 WARN 40740 --- [http-nio-8081-exec-6] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 69233 +2022-08-26 13:41:35.709 WARN 40740 --- [http-nio-8081-exec-2] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [com.eleadmin.common.core.exception.BusinessException: 手机号已存在] +2022-08-26 13:41:50.517 WARN 40740 --- [http-nio-8081-exec-5] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [com.eleadmin.common.core.exception.BusinessException: 手机号已存在] diff --git a/mvnw b/mvnw new file mode 100644 index 0000000..a16b543 --- /dev/null +++ b/mvnw @@ -0,0 +1,310 @@ +#!/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 +# +# https://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 /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="`which 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/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + else + jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.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" + else + wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$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 \ + -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..c8d4337 --- /dev/null +++ b/mvnw.cmd @@ -0,0 +1,182 @@ +@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 https://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 "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\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/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + +FOR /F "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%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.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 "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\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% + +exit /B %ERROR_CODE% diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..e7dfaee --- /dev/null +++ b/pom.xml @@ -0,0 +1,224 @@ + + + 4.0.0 + + com.eleadmin + ele-admin-api + 1.5.0 + + ele-admin-api + EleAdminApi project for Spring Boot + + + org.springframework.boot + spring-boot-starter-parent + 2.5.4 + + + + + 1.8 + UTF-8 + UTF-8 + + + + + + org.springframework.boot + spring-boot-devtools + runtime + true + + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + org.springframework.boot + spring-boot-starter-web + + + + + org.springframework.boot + spring-boot-starter-aop + + + + + org.springframework.boot + spring-boot-configuration-processor + true + + + + + org.projectlombok + lombok + true + + + + + mysql + mysql-connector-java + runtime + + + + + com.alibaba + druid-spring-boot-starter + 1.2.6 + + + + + com.baomidou + mybatis-plus-boot-starter + 3.4.3.3 + + + + + com.baomidou + mybatis-plus-generator + 3.4.1 + + + + + cn.hutool + hutool-core + 5.7.11 + + + cn.hutool + hutool-extra + 5.7.11 + + + cn.hutool + hutool-http + 5.7.11 + + + cn.hutool + hutool-crypto + 5.7.11 + + + + + cn.afterturn + easypoi-base + 4.4.0 + + + + + org.apache.tika + tika-core + 2.1.0 + + + + + com.github.livesense + jodconverter-core + 1.0.5 + + + + + org.springframework.boot + spring-boot-starter-mail + + + + + com.ibeetl + beetl + 3.6.1.RELEASE + + + + + io.springfox + springfox-boot-starter + 3.0.0 + + + + + org.springframework.boot + spring-boot-starter-security + + + + + io.jsonwebtoken + jjwt-impl + 0.11.2 + + + io.jsonwebtoken + jjwt-jackson + 0.11.2 + + + + + com.github.whvcse + easy-captcha + 1.6.2 + + + + + + + + src/main/java + + **/*Mapper.xml + + + + src/main/resources + + ** + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + org.projectlombok + lombok + + + + + + + + + + aliYunMaven + https://maven.aliyun.com/repository/public + + + + diff --git a/src/.DS_Store b/src/.DS_Store new file mode 100644 index 0000000..dda5682 Binary files /dev/null and b/src/.DS_Store differ diff --git a/src/main/.DS_Store b/src/main/.DS_Store new file mode 100644 index 0000000..5ddc54c Binary files /dev/null and b/src/main/.DS_Store differ diff --git a/src/main/java/.DS_Store b/src/main/java/.DS_Store new file mode 100644 index 0000000..35a54bf Binary files /dev/null and b/src/main/java/.DS_Store differ diff --git a/src/main/java/com/.DS_Store b/src/main/java/com/.DS_Store new file mode 100644 index 0000000..2ccc1ef Binary files /dev/null and b/src/main/java/com/.DS_Store differ diff --git a/src/main/java/com/eleadmin/.DS_Store b/src/main/java/com/eleadmin/.DS_Store new file mode 100644 index 0000000..7eca007 Binary files /dev/null and b/src/main/java/com/eleadmin/.DS_Store differ diff --git a/src/main/java/com/eleadmin/Application.java b/src/main/java/com/eleadmin/Application.java new file mode 100644 index 0000000..032e284 --- /dev/null +++ b/src/main/java/com/eleadmin/Application.java @@ -0,0 +1,26 @@ +package com.eleadmin; + +import com.eleadmin.common.core.config.ConfigProperties; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +/** + * 启动类 + * Created by EleAdmin on 2018-02-22 11:29:03 + */ +@EnableAsync +@EnableTransactionManagement +@MapperScan("com.eleadmin.**.mapper") +@EnableConfigurationProperties(ConfigProperties.class) +@SpringBootApplication +public class Application { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } + +} diff --git a/src/main/java/com/eleadmin/common/.DS_Store b/src/main/java/com/eleadmin/common/.DS_Store new file mode 100644 index 0000000..3b86988 Binary files /dev/null and b/src/main/java/com/eleadmin/common/.DS_Store differ diff --git a/src/main/java/com/eleadmin/common/core/.DS_Store b/src/main/java/com/eleadmin/common/core/.DS_Store new file mode 100644 index 0000000..88cb348 Binary files /dev/null and b/src/main/java/com/eleadmin/common/core/.DS_Store differ diff --git a/src/main/java/com/eleadmin/common/core/Constants.java b/src/main/java/com/eleadmin/common/core/Constants.java new file mode 100644 index 0000000..a0eecd9 --- /dev/null +++ b/src/main/java/com/eleadmin/common/core/Constants.java @@ -0,0 +1,93 @@ +package com.eleadmin.common.core; + +/** + * 系统常量 + * Created by EleAdmin on 2019-10-29 15:55 + */ +public class Constants { + /** + * 默认成功码 + */ + public static final int RESULT_OK_CODE = 0; + + /** + * 默认失败码 + */ + public static final int RESULT_ERROR_CODE = 1; + + /** + * 默认成功信息 + */ + public static final String RESULT_OK_MSG = "操作成功"; + + /** + * 默认失败信息 + */ + public static final String RESULT_ERROR_MSG = "操作失败"; + + /** + * 无权限错误码 + */ + public static final int UNAUTHORIZED_CODE = 403; + + /** + * 无权限提示信息 + */ + public static final String UNAUTHORIZED_MSG = "没有访问权限"; + + /** + * 未认证错误码 + */ + public static final int UNAUTHENTICATED_CODE = 401; + + /** + * 未认证提示信息 + */ + public static final String UNAUTHENTICATED_MSG = "请先登录"; + + /** + * 登录过期错误码 + */ + public static final int TOKEN_EXPIRED_CODE = 401; + + /** + * 登录过期提示信息 + */ + public static final String TOKEN_EXPIRED_MSG = "登录已过期"; + + /** + * 非法token错误码 + */ + public static final int BAD_CREDENTIALS_CODE = 401; + + /** + * 非法token提示信息 + */ + public static final String BAD_CREDENTIALS_MSG = "请退出重新登录"; + + /** + * 表示升序的值 + */ + public static final String ORDER_ASC_VALUE = "asc"; + + /** + * 表示降序的值 + */ + public static final String ORDER_DESC_VALUE = "desc"; + + /** + * token通过header传递的名称 + */ + public static final String TOKEN_HEADER_NAME = "Authorization"; + + /** + * token通过参数传递的名称 + */ + public static final String TOKEN_PARAM_NAME = "access_token"; + + /** + * token认证类型 + */ + public static final String TOKEN_TYPE = "Bearer"; + +} diff --git a/src/main/java/com/eleadmin/common/core/annotation/OperationLog.java b/src/main/java/com/eleadmin/common/core/annotation/OperationLog.java new file mode 100644 index 0000000..05bb33a --- /dev/null +++ b/src/main/java/com/eleadmin/common/core/annotation/OperationLog.java @@ -0,0 +1,41 @@ +package com.eleadmin.common.core.annotation; + +import java.lang.annotation.*; + +/** + * 操作日志记录注解 + * + * @author EleAdmin + * @since 2020-03-21 17:03:08 + */ +@Documented +@Target({ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +public @interface OperationLog { + + /** + * 操作功能 + */ + String value() default ""; + + /** + * 操作模块 + */ + String module() default ""; + + /** + * 备注 + */ + String comments() default ""; + + /** + * 是否记录请求参数 + */ + boolean param() default true; + + /** + * 是否记录返回结果 + */ + boolean result() default true; + +} diff --git a/src/main/java/com/eleadmin/common/core/annotation/OperationModule.java b/src/main/java/com/eleadmin/common/core/annotation/OperationModule.java new file mode 100644 index 0000000..56aa532 --- /dev/null +++ b/src/main/java/com/eleadmin/common/core/annotation/OperationModule.java @@ -0,0 +1,21 @@ +package com.eleadmin.common.core.annotation; + +import java.lang.annotation.*; + +/** + * 操作日志模块注解 + * + * @author EleAdmin + * @since 2021-09-01 20:48:16 + */ +@Documented +@Target({ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +public @interface OperationModule { + + /** + * 模块名称 + */ + String value(); + +} diff --git a/src/main/java/com/eleadmin/common/core/annotation/QueryField.java b/src/main/java/com/eleadmin/common/core/annotation/QueryField.java new file mode 100644 index 0000000..fe9470b --- /dev/null +++ b/src/main/java/com/eleadmin/common/core/annotation/QueryField.java @@ -0,0 +1,22 @@ +package com.eleadmin.common.core.annotation; + +import java.lang.annotation.*; + +/** + * 查询条件注解 + * + * @author EleAdmin + * @since 2021-09-01 20:48:16 + */ +@Documented +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.FIELD, ElementType.ANNOTATION_TYPE}) +public @interface QueryField { + + // 字段名称 + String value() default ""; + + // 查询方式 + QueryType type() default QueryType.LIKE; + +} diff --git a/src/main/java/com/eleadmin/common/core/annotation/QueryType.java b/src/main/java/com/eleadmin/common/core/annotation/QueryType.java new file mode 100644 index 0000000..a6de06e --- /dev/null +++ b/src/main/java/com/eleadmin/common/core/annotation/QueryType.java @@ -0,0 +1,42 @@ +package com.eleadmin.common.core.annotation; + +/** + * 查询方式 + * + * @author EleAdmin + * @since 2021-09-01 20:48:16 + */ +public enum QueryType { + // 等于 + EQ, + // 不等于 + NE, + // 大于 + GT, + // 大于等于 + GE, + // 小于 + LT, + // 小于等于 + LE, + // 包含 + LIKE, + // 不包含 + NOT_LIKE, + // 结尾等于 + LIKE_LEFT, + // 开头等于 + LIKE_RIGHT, + // 为NULL + IS_NULL, + // 不为空 + IS_NOT_NULL, + // IN + IN, + // NOT IN + NOT_IN, + // IN条件解析逗号分割 + IN_STR, + // NOT IN条件解析逗号分割 + NOT_IN_STR +} diff --git a/src/main/java/com/eleadmin/common/core/aspect/OperationLogAspect.java b/src/main/java/com/eleadmin/common/core/aspect/OperationLogAspect.java new file mode 100644 index 0000000..431eed4 --- /dev/null +++ b/src/main/java/com/eleadmin/common/core/aspect/OperationLogAspect.java @@ -0,0 +1,210 @@ +package com.eleadmin.common.core.aspect; + +import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.extra.servlet.ServletUtil; +import cn.hutool.http.useragent.UserAgent; +import cn.hutool.http.useragent.UserAgentUtil; +import com.eleadmin.common.core.annotation.OperationLog; +import com.eleadmin.common.core.annotation.OperationModule; +import com.eleadmin.common.core.utils.JSONUtil; +import com.eleadmin.common.system.entity.OperationRecord; +import com.eleadmin.common.system.entity.User; +import com.eleadmin.common.system.service.OperationRecordService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.*; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.lang.reflect.Method; +import java.util.Map; + +/** + * 操作日志记录 + * + * @author EleAdmin + * @since 2020-03-21 16:58:16:05 + */ +@Aspect +@Component +public class OperationLogAspect { + @Resource + private OperationRecordService operationRecordService; + // 参数、返回结果、错误信息等最大保存长度 + private static final int MAX_LENGTH = 1000; + // 用于记录请求耗时 + private final ThreadLocal startTime = new ThreadLocal<>(); + + @Pointcut("@annotation(com.eleadmin.common.core.annotation.OperationLog)") + public void operationLog() { + } + + @Before("operationLog()") + public void doBefore(JoinPoint joinPoint) throws Throwable { + startTime.set(System.currentTimeMillis()); + } + + @AfterReturning(pointcut = "operationLog()", returning = "result") + public void doAfterReturning(JoinPoint joinPoint, Object result) { + saveLog(joinPoint, result, null); + } + + @AfterThrowing(value = "operationLog()", throwing = "e") + public void doAfterThrowing(JoinPoint joinPoint, Exception e) { + saveLog(joinPoint, null, e); + } + + /** + * 保存操作记录 + */ + private void saveLog(JoinPoint joinPoint, Object result, Exception e) { + OperationRecord record = new OperationRecord(); + // 记录操作耗时 + if (startTime.get() != null) { + record.setSpendTime(System.currentTimeMillis() - startTime.get()); + } + // 记录当前登录用户id、租户id + User user = getLoginUser(); + if (user != null) { + record.setUserId(user.getUserId()); + record.setTenantId(user.getTenantId()); + } + // 记录请求地址、请求方式、ip + ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + HttpServletRequest request = (attributes == null ? null : attributes.getRequest()); + if (request != null) { + record.setUrl(request.getRequestURI()); + record.setRequestMethod(request.getMethod()); + UserAgent ua = UserAgentUtil.parse(ServletUtil.getHeaderIgnoreCase(request, "User-Agent")); + record.setOs(ua.getPlatform().toString()); + record.setDevice(ua.getOs().toString()); + record.setBrowser(ua.getBrowser().toString()); + record.setIp(ServletUtil.getClientIP(request)); + } + // 记录异常信息 + if (e != null) { + record.setStatus(1); + record.setError(StrUtil.sub(e.toString(), 0, MAX_LENGTH)); + } + // 记录模块名、操作功能、请求方法、请求参数、返回结果 + MethodSignature signature = (MethodSignature) joinPoint.getSignature(); + record.setMethod(joinPoint.getTarget().getClass().getName() + "." + signature.getName()); + Method method = signature.getMethod(); + if (method != null) { + OperationLog ol = method.getAnnotation(OperationLog.class); + if (ol != null) { + // 记录操作功能 + record.setDescription(getDescription(method, ol)); + // 记录操作模块 + record.setModule(getModule(joinPoint, ol)); + // 记录备注 + if (StrUtil.isNotEmpty(ol.comments())) { + record.setComments(ol.comments()); + } + // 记录请求参数 + if (ol.param() && request != null) { + record.setParams(StrUtil.sub(getParams(joinPoint, request), 0, MAX_LENGTH)); + } + // 记录请求结果 + if (ol.result() && result != null) { + record.setResult(StrUtil.sub(JSONUtil.toJSONString(result), 0, MAX_LENGTH)); + } + } + } + operationRecordService.saveAsync(record); + } + + /** + * 获取当前登录用户 + */ + private User getLoginUser() { + Authentication subject = SecurityContextHolder.getContext().getAuthentication(); + if (subject != null) { + Object object = subject.getPrincipal(); + if (object instanceof User) { + return (User) object; + } + } + return null; + } + + /** + * 获取请求参数 + * + * @param joinPoint JoinPoint + * @param request HttpServletRequest + * @return String + */ + private String getParams(JoinPoint joinPoint, HttpServletRequest request) { + String params; + Map paramsMap = ServletUtil.getParamMap(request); + if (paramsMap.keySet().size() > 0) { + params = JSONUtil.toJSONString(paramsMap); + } else { + StringBuilder sb = new StringBuilder(); + for (Object arg : joinPoint.getArgs()) { + if (ObjectUtil.isNull(arg) + || arg instanceof MultipartFile + || arg instanceof HttpServletRequest + || arg instanceof HttpServletResponse) { + continue; + } + sb.append(JSONUtil.toJSONString(arg)).append(" "); + } + params = sb.toString(); + } + return params; + } + + /** + * 获取操作模块 + * + * @param joinPoint JoinPoint + * @param ol OperationLog + * @return String + */ + private String getModule(JoinPoint joinPoint, OperationLog ol) { + if (StrUtil.isNotEmpty(ol.module())) { + return ol.module(); + } + OperationModule om = joinPoint.getTarget().getClass().getAnnotation(OperationModule.class); + if (om != null && StrUtil.isNotEmpty(om.value())) { + return om.value(); + } + Api api = joinPoint.getTarget().getClass().getAnnotation(Api.class); + if (api != null && api.tags() != null) { + return ArrayUtil.join(api.tags(), ","); + } + return null; + } + + /** + * 获取操作功能 + * + * @param method Method + * @param ol OperationLog + * @return String + */ + private String getDescription(Method method, OperationLog ol) { + if (StrUtil.isNotEmpty(ol.value())) { + return ol.value(); + } + ApiOperation ao = method.getAnnotation(ApiOperation.class); + if (ao != null && StrUtil.isNotEmpty(ao.value())) { + return ao.value(); + } + return null; + } + +} diff --git a/src/main/java/com/eleadmin/common/core/config/ConfigProperties.java b/src/main/java/com/eleadmin/common/core/config/ConfigProperties.java new file mode 100644 index 0000000..9659b47 --- /dev/null +++ b/src/main/java/com/eleadmin/common/core/config/ConfigProperties.java @@ -0,0 +1,81 @@ +package com.eleadmin.common.core.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; + +/** + * 系统配置属性 + * + * @author EleAdmin + * @since 2021-08-30 17:58:16 + */ +@Data +@ConfigurationProperties(prefix = "config") +public class ConfigProperties { + /** + * 文件上传磁盘位置 + */ + private Integer uploadLocation = 0; + + /** + * 文件上传是否使用uuid命名 + */ + private Boolean uploadUuidName = true; + + /** + * 文件上传生成缩略图的大小(kb) + */ + private Integer thumbnailSize = 60; + + /** + * OpenOffice的安装目录 + */ + private String openOfficeHome; + + /** + * swagger扫描包 + */ + private String swaggerBasePackage; + + /** + * swagger文档标题 + */ + private String swaggerTitle; + + /** + * swagger文档描述 + */ + private String swaggerDescription; + + /** + * swagger文档版本号 + */ + private String swaggerVersion; + + /** + * swagger地址 + */ + private String swaggerHost; + + /** + * token过期时间, 单位秒 + */ + private Long tokenExpireTime = 60 * 60 * 24L; + + /** + * token快要过期自动刷新时间, 单位分钟 + */ + private int tokenRefreshTime = 30; + + /** + * 生成token的密钥Key的base64字符 + */ + private String tokenKey; + + // 文件上传目录 + private String uploadPath; + + // 图片服务器域名 + private String pictureServer; + +} diff --git a/src/main/java/com/eleadmin/common/core/config/MybatisPlusConfig.java b/src/main/java/com/eleadmin/common/core/config/MybatisPlusConfig.java new file mode 100644 index 0000000..cd1db72 --- /dev/null +++ b/src/main/java/com/eleadmin/common/core/config/MybatisPlusConfig.java @@ -0,0 +1,77 @@ +package com.eleadmin.common.core.config; + +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler; +import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor; +import com.eleadmin.common.system.entity.User; +import net.sf.jsqlparser.expression.Expression; +import net.sf.jsqlparser.expression.LongValue; +import net.sf.jsqlparser.expression.NullValue; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; + +import java.util.Arrays; + +/** + * MybatisPlus配置 + * + * @author EleAdmin + * @since 2018-02-22 11:29:28 + */ +@Configuration +public class MybatisPlusConfig { + + @Bean + public MybatisPlusInterceptor mybatisPlusInterceptor() { + MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); + + // 多租户插件配置 + TenantLineHandler tenantLineHandler = new TenantLineHandler() { + @Override + public Expression getTenantId() { + return getLoginUserTenantId(); + } + + @Override + public boolean ignoreTable(String tableName) { + return Arrays.asList( + "sys_tenant", + "sys_dictionary", + "sys_dictionary_data" + ).contains(tableName); + } + }; + TenantLineInnerInterceptor tenantLineInnerInterceptor = new TenantLineInnerInterceptor(tenantLineHandler); + interceptor.addInnerInterceptor(tenantLineInnerInterceptor); + + // 分页插件配置 + PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(); + interceptor.addInnerInterceptor(paginationInnerInterceptor); + + return interceptor; + } + + /** + * 获取当前登录用户的租户id + * + * @return Integer + */ + public Expression getLoginUserTenantId() { + try { + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + if (authentication != null) { + Object object = authentication.getPrincipal(); + if (object instanceof User) { + return new LongValue(((User) object).getTenantId()); + } + } + } catch (Exception e) { + System.out.println(e.getMessage()); + } + return new NullValue(); + } + +} diff --git a/src/main/java/com/eleadmin/common/core/config/SwaggerConfig.java b/src/main/java/com/eleadmin/common/core/config/SwaggerConfig.java new file mode 100644 index 0000000..d090493 --- /dev/null +++ b/src/main/java/com/eleadmin/common/core/config/SwaggerConfig.java @@ -0,0 +1,72 @@ +package com.eleadmin.common.core.config; + +import cn.hutool.core.util.StrUtil; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.oas.annotations.EnableOpenApi; +import springfox.documentation.service.*; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spi.service.contexts.SecurityContext; +import springfox.documentation.spring.web.plugins.Docket; + +import javax.annotation.Resource; +import java.util.Collections; +import java.util.List; + +/** + * Swagger配置 + * + * @author EleAdmin + * @since 2018-02-22 11:29:05 + */ +@EnableOpenApi +@Configuration +public class SwaggerConfig { + @Resource + private ConfigProperties config; + + @Bean + public Docket createRestApi() { + Docket docket = new Docket(DocumentationType.OAS_30); + if (StrUtil.isNotBlank(config.getSwaggerHost())) { + docket.host(config.getSwaggerHost()); + } + return docket + .apiInfo(apiInfo()) + .select() + .apis(RequestHandlerSelectors.basePackage(config.getSwaggerBasePackage())) + .paths(PathSelectors.any()) + .build() + .securitySchemes(securitySchemes()) + .securityContexts(securityContexts()); + } + + private ApiInfo apiInfo() { + return new ApiInfoBuilder() + .title(config.getSwaggerTitle()) + .description(config.getSwaggerDescription()) + .version(config.getSwaggerVersion()) + .termsOfServiceUrl("") + .build(); + } + + private List securitySchemes() { + return Collections.singletonList( + new ApiKey("Authorization", "Authorization", "header") + ); + } + + private List securityContexts() { + AuthorizationScope[] scopes = {new AuthorizationScope("global", "accessEverything")}; + List references = Collections.singletonList( + new SecurityReference("Authorization", scopes) + ); + return Collections.singletonList(SecurityContext.builder() + .securityReferences(references) + .build()); + } + +} diff --git a/src/main/java/com/eleadmin/common/core/config/WebMvcConfig.java b/src/main/java/com/eleadmin/common/core/config/WebMvcConfig.java new file mode 100644 index 0000000..cdee50e --- /dev/null +++ b/src/main/java/com/eleadmin/common/core/config/WebMvcConfig.java @@ -0,0 +1,31 @@ +package com.eleadmin.common.core.config; + +import com.eleadmin.common.core.Constants; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +/** + * WebMvc配置, 拦截器、资源映射等都在此配置 + * + * @author EleAdmin + * @since 2019-06-12 10:11:16 + */ +@Configuration +public class WebMvcConfig implements WebMvcConfigurer { + + /** + * 支持跨域访问 + */ + @Override + public void addCorsMappings(CorsRegistry registry) { + registry.addMapping("/**") + .allowedOriginPatterns("*") + .allowedHeaders("*") + .exposedHeaders(Constants.TOKEN_HEADER_NAME) + .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS", "PATCH") + .allowCredentials(true) + .maxAge(3600); + } + +} diff --git a/src/main/java/com/eleadmin/common/core/exception/BusinessException.java b/src/main/java/com/eleadmin/common/core/exception/BusinessException.java new file mode 100644 index 0000000..5a27d96 --- /dev/null +++ b/src/main/java/com/eleadmin/common/core/exception/BusinessException.java @@ -0,0 +1,48 @@ +package com.eleadmin.common.core.exception; + +import com.eleadmin.common.core.Constants; + +/** + * 自定义业务异常 + * + * @author EleAdmin + * @since 2018-02-22 11:29:28 + */ +public class BusinessException extends RuntimeException { + private static final long serialVersionUID = 1L; + + private Integer code; + + public BusinessException() { + this(Constants.RESULT_ERROR_MSG); + } + + public BusinessException(String message) { + this(Constants.RESULT_ERROR_CODE, message); + } + + public BusinessException(Integer code, String message) { + super(message); + this.code = code; + } + + public BusinessException(Integer code, String message, Throwable cause) { + super(message, cause); + this.code = code; + } + + public BusinessException(Integer code, String message, Throwable cause, + boolean enableSuppression, boolean writableStackTrace) { + super(message, cause, enableSuppression, writableStackTrace); + this.code = code; + } + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + +} diff --git a/src/main/java/com/eleadmin/common/core/exception/GlobalExceptionHandler.java b/src/main/java/com/eleadmin/common/core/exception/GlobalExceptionHandler.java new file mode 100644 index 0000000..faa10fd --- /dev/null +++ b/src/main/java/com/eleadmin/common/core/exception/GlobalExceptionHandler.java @@ -0,0 +1,56 @@ +package com.eleadmin.common.core.exception; + +import com.eleadmin.common.core.Constants; +import com.eleadmin.common.core.utils.CommonUtil; +import com.eleadmin.common.core.web.ApiResult; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.security.access.AccessDeniedException; +import org.springframework.web.HttpRequestMethodNotSupportedException; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletResponse; + +/** + * 全局异常处理器 + * + * @author EleAdmin + * @since 2018-02-22 11:29:30 + */ +@ControllerAdvice +public class GlobalExceptionHandler { + private final Logger logger = LoggerFactory.getLogger(getClass()); + + @ResponseBody + @ExceptionHandler(HttpRequestMethodNotSupportedException.class) + public ApiResult methodNotSupportedExceptionHandler(HttpRequestMethodNotSupportedException e, + HttpServletResponse response) { + CommonUtil.addCrossHeaders(response); + return new ApiResult<>(Constants.RESULT_ERROR_CODE, "请求方式不正确").setError(e.toString()); + } + + @ResponseBody + @ExceptionHandler(AccessDeniedException.class) + public ApiResult accessDeniedExceptionHandler(AccessDeniedException e, HttpServletResponse response) { + CommonUtil.addCrossHeaders(response); + return new ApiResult<>(Constants.UNAUTHORIZED_CODE, Constants.UNAUTHORIZED_MSG).setError(e.toString()); + } + + @ResponseBody + @ExceptionHandler(BusinessException.class) + public ApiResult businessExceptionHandler(BusinessException e, HttpServletResponse response) { + CommonUtil.addCrossHeaders(response); + return new ApiResult<>(e.getCode(), e.getMessage()); + } + + @ResponseBody + @ExceptionHandler(Throwable.class) + public ApiResult exceptionHandler(Throwable e, HttpServletResponse response) { + logger.error(e.getMessage(), e); + CommonUtil.addCrossHeaders(response); + return new ApiResult<>(Constants.RESULT_ERROR_CODE, Constants.RESULT_ERROR_MSG).setError(e.toString()); + } + +} diff --git a/src/main/java/com/eleadmin/common/core/security/JwtAccessDeniedHandler.java b/src/main/java/com/eleadmin/common/core/security/JwtAccessDeniedHandler.java new file mode 100644 index 0000000..2c1d4d9 --- /dev/null +++ b/src/main/java/com/eleadmin/common/core/security/JwtAccessDeniedHandler.java @@ -0,0 +1,29 @@ +package com.eleadmin.common.core.security; + +import com.eleadmin.common.core.Constants; +import com.eleadmin.common.core.utils.CommonUtil; +import org.springframework.security.access.AccessDeniedException; +import org.springframework.security.web.access.AccessDeniedHandler; +import org.springframework.stereotype.Component; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +/** + * 没有访问权限异常处理 + * + * @author EleAdmin + * @since 2020-03-25 00:35:03 + */ +@Component +public class JwtAccessDeniedHandler implements AccessDeniedHandler { + + @Override + public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException e) + throws IOException, ServletException { + CommonUtil.responseError(response, Constants.UNAUTHORIZED_CODE, Constants.UNAUTHORIZED_MSG, e.getMessage()); + } + +} diff --git a/src/main/java/com/eleadmin/common/core/security/JwtAuthenticationEntryPoint.java b/src/main/java/com/eleadmin/common/core/security/JwtAuthenticationEntryPoint.java new file mode 100644 index 0000000..4cc1657 --- /dev/null +++ b/src/main/java/com/eleadmin/common/core/security/JwtAuthenticationEntryPoint.java @@ -0,0 +1,30 @@ +package com.eleadmin.common.core.security; + +import com.eleadmin.common.core.Constants; +import com.eleadmin.common.core.utils.CommonUtil; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.web.AuthenticationEntryPoint; +import org.springframework.stereotype.Component; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +/** + * 没有登录异常处理 + * + * @author EleAdmin + * @since 2020-03-25 00:35:03 + */ +@Component +public class JwtAuthenticationEntryPoint implements AuthenticationEntryPoint { + + @Override + public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException e) + throws IOException, ServletException { + CommonUtil.responseError(response, Constants.UNAUTHENTICATED_CODE, Constants.UNAUTHENTICATED_MSG, + e.getMessage()); + } + +} diff --git a/src/main/java/com/eleadmin/common/core/security/JwtAuthenticationFilter.java b/src/main/java/com/eleadmin/common/core/security/JwtAuthenticationFilter.java new file mode 100644 index 0000000..5242a44 --- /dev/null +++ b/src/main/java/com/eleadmin/common/core/security/JwtAuthenticationFilter.java @@ -0,0 +1,85 @@ +package com.eleadmin.common.core.security; + +import cn.hutool.core.util.StrUtil; +import com.eleadmin.common.core.Constants; +import com.eleadmin.common.core.config.ConfigProperties; +import com.eleadmin.common.core.utils.CommonUtil; +import com.eleadmin.common.system.entity.LoginRecord; +import com.eleadmin.common.system.entity.Menu; +import com.eleadmin.common.system.entity.User; +import com.eleadmin.common.system.service.LoginRecordService; +import com.eleadmin.common.system.service.UserService; +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.ExpiredJwtException; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.stereotype.Component; +import org.springframework.web.filter.OncePerRequestFilter; + +import javax.annotation.Resource; +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 处理携带token的请求过滤器 + * + * @author EleAdmin + * @since 2020-03-30 20:48:05 + */ +@Component +public class JwtAuthenticationFilter extends OncePerRequestFilter { + @Resource + private ConfigProperties configProperties; + @Resource + private UserService userService; + @Resource + private LoginRecordService loginRecordService; + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) + throws ServletException, IOException { + String access_token = JwtUtil.getAccessToken(request); + if (StrUtil.isNotBlank(access_token)) { + try { + // 解析token + Claims claims = JwtUtil.parseToken(access_token, configProperties.getTokenKey()); + JwtSubject jwtSubject = JwtUtil.getJwtSubject(claims); + User user = userService.getByUsername(jwtSubject.getUsername(), jwtSubject.getTenantId()); + if (user == null) { + throw new UsernameNotFoundException("Username not found"); + } + List authorities = user.getAuthorities().stream() + .filter(m -> StrUtil.isNotBlank(m.getAuthority())).collect(Collectors.toList()); + UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken( + user, null, authorities); + SecurityContextHolder.getContext().setAuthentication(authentication); + // token将要过期签发新token, 防止突然退出登录 + long expiration = (claims.getExpiration().getTime() - new Date().getTime()) / 1000 / 60; + if (expiration < configProperties.getTokenRefreshTime()) { + String token = JwtUtil.buildToken(jwtSubject, configProperties.getTokenExpireTime(), + configProperties.getTokenKey()); + response.addHeader(Constants.TOKEN_HEADER_NAME, token); + loginRecordService.saveAsync(user.getUsername(), LoginRecord.TYPE_REFRESH, null, + user.getTenantId(), request); + } + } catch (ExpiredJwtException e) { + CommonUtil.responseError(response, Constants.TOKEN_EXPIRED_CODE, Constants.TOKEN_EXPIRED_MSG, + e.getMessage()); + return; + } catch (Exception e) { + CommonUtil.responseError(response, Constants.BAD_CREDENTIALS_CODE, Constants.BAD_CREDENTIALS_MSG, + e.toString()); + return; + } + } + chain.doFilter(request, response); + } + +} diff --git a/src/main/java/com/eleadmin/common/core/security/JwtSubject.java b/src/main/java/com/eleadmin/common/core/security/JwtSubject.java new file mode 100644 index 0000000..af4725d --- /dev/null +++ b/src/main/java/com/eleadmin/common/core/security/JwtSubject.java @@ -0,0 +1,31 @@ +package com.eleadmin.common.core.security; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * Jwt载体 + * + * @author EleAdmin + * @since 2021-09-03 00:11:12 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class JwtSubject implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 账号 + */ + private String username; + + /** + * 租户id + */ + private Integer tenantId; + +} diff --git a/src/main/java/com/eleadmin/common/core/security/JwtUtil.java b/src/main/java/com/eleadmin/common/core/security/JwtUtil.java new file mode 100644 index 0000000..858c7e5 --- /dev/null +++ b/src/main/java/com/eleadmin/common/core/security/JwtUtil.java @@ -0,0 +1,141 @@ +package com.eleadmin.common.core.security; + +import cn.hutool.core.util.StrUtil; +import cn.hutool.extra.servlet.ServletUtil; +import com.eleadmin.common.core.Constants; +import com.eleadmin.common.core.utils.JSONUtil; +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.SignatureAlgorithm; +import io.jsonwebtoken.io.Decoders; +import io.jsonwebtoken.io.Encoders; +import io.jsonwebtoken.security.Keys; + +import javax.servlet.http.HttpServletRequest; +import java.security.Key; +import java.util.Date; + +/** + * JWT工具类 + * + * @author EleAdmin + * @since 2018-01-21 16:30:59 + */ +public class JwtUtil { + + /** + * 获取请求中的access_token + * + * @param request HttpServletRequest + * @return String + */ + public static String getAccessToken(HttpServletRequest request) { + String access_token = ServletUtil.getHeaderIgnoreCase(request, Constants.TOKEN_HEADER_NAME); + if (StrUtil.isNotBlank(access_token)) { + if (access_token.startsWith(Constants.TOKEN_TYPE)) { + access_token = StrUtil.removePrefix(access_token, Constants.TOKEN_TYPE).trim(); + } + } else { + access_token = request.getParameter(Constants.TOKEN_PARAM_NAME); + } + return access_token; + } + + /** + * 生成token + * + * @param subject 载体 + * @param expire 过期时间 + * @param base64EncodedKey base64编码的Key + * @return token + */ + public static String buildToken(JwtSubject subject, Long expire, String base64EncodedKey) { + return buildToken(JSONUtil.toJSONString(subject), expire, decodeKey(base64EncodedKey)); + } + + /** + * 生成token + * + * @param subject 载体 + * @param expire 过期时间 + * @param key 密钥 + * @return token + */ + public static String buildToken(String subject, Long expire, Key key) { + Date expireDate = new Date(new Date().getTime() + 1000 * expire); + return Jwts.builder() + .setSubject(subject) + .setExpiration(expireDate) + .setIssuedAt(new Date()) + .signWith(key) + .compact(); + } + + /** + * 解析token + * + * @param token token + * @param base64EncodedKey base64编码的Key + * @return Claims + */ + public static Claims parseToken(String token, String base64EncodedKey) { + return parseToken(token, decodeKey(base64EncodedKey)); + } + + /** + * 解析token + * + * @param token token + * @param key 密钥 + * @return Claims + */ + public static Claims parseToken(String token, Key key) { + return Jwts.parserBuilder() + .setSigningKey(key) + .build() + .parseClaimsJws(token) + .getBody(); + } + + /** + * 获取JwtSubject + * + * @param claims Claims + * @return JwtSubject + */ + public static JwtSubject getJwtSubject(Claims claims) { + return JSONUtil.parseObject(claims.getSubject(), JwtSubject.class); + } + + /** + * 生成Key + * + * @return Key + */ + public static Key randomKey() { + return Keys.secretKeyFor(SignatureAlgorithm.HS256); + } + + /** + * base64编码key + * + * @return String + */ + public static String encodeKey(Key key) { + return Encoders.BASE64.encode(key.getEncoded()); + } + + /** + * base64编码Key + * + * @param base64EncodedKey base64编码的key + * @return Key + */ + public static Key decodeKey(String base64EncodedKey) { + if (StrUtil.isBlank(base64EncodedKey)) { + return null; + } + return Keys.hmacShaKeyFor(Decoders.BASE64.decode(base64EncodedKey)); + } + +} diff --git a/src/main/java/com/eleadmin/common/core/security/SecurityConfig.java b/src/main/java/com/eleadmin/common/core/security/SecurityConfig.java new file mode 100644 index 0000000..5ac12b2 --- /dev/null +++ b/src/main/java/com/eleadmin/common/core/security/SecurityConfig.java @@ -0,0 +1,81 @@ +package com.eleadmin.common.core.security; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.HttpMethod; +import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; + +import javax.annotation.Resource; + +/** + * Spring Security配置 + * + * @author EleAdmin + * @since 2020-03-23 18:04:52 + */ +@Configuration +@EnableWebSecurity +@EnableGlobalMethodSecurity(prePostEnabled = true) +public class SecurityConfig extends WebSecurityConfigurerAdapter { + @Resource + private JwtAccessDeniedHandler jwtAccessDeniedHandler; + @Resource + private JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint; + @Resource + private JwtAuthenticationFilter jwtAuthenticationFilter; + + @Override + protected void configure(HttpSecurity http) throws Exception { + http.authorizeRequests() + .antMatchers(HttpMethod.OPTIONS, "/**") + .permitAll() + .antMatchers(HttpMethod.GET, "/api/file/**", "/api/captcha", "/") + .permitAll() + .antMatchers( + "/api/login", + "/druid/**", + "/swagger-ui.html", + "/swagger-resources/**", + "/webjars/**", + "/v2/api-docs", + "/v3/api-docs", + "/swagger-ui/**", + "/api/cashier", + "/api/customer-apply/**" + ) + .permitAll() + .anyRequest() + .authenticated() + .and() + .sessionManagement() + .sessionCreationPolicy(SessionCreationPolicy.STATELESS) + .and() + .csrf() + .disable() + .cors() + .and() + .logout() + .disable() + .headers() + .frameOptions() + .disable() + .and() + .exceptionHandling() + .accessDeniedHandler(jwtAccessDeniedHandler) + .authenticationEntryPoint(jwtAuthenticationEntryPoint) + .and() + .addFilterBefore(jwtAuthenticationFilter, UsernamePasswordAuthenticationFilter.class); + } + + @Bean + public BCryptPasswordEncoder bCryptPasswordEncoder() { + return new BCryptPasswordEncoder(); + } + +} diff --git a/src/main/java/com/eleadmin/common/core/utils/CommonUtil.java b/src/main/java/com/eleadmin/common/core/utils/CommonUtil.java new file mode 100644 index 0000000..6b89b7a --- /dev/null +++ b/src/main/java/com/eleadmin/common/core/utils/CommonUtil.java @@ -0,0 +1,174 @@ +package com.eleadmin.common.core.utils; + +import cn.hutool.core.util.ObjectUtil; +import com.eleadmin.common.core.Constants; +import com.eleadmin.common.core.web.ApiResult; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; +import java.util.function.BiConsumer; +import java.util.function.Consumer; +import java.util.function.Function; + +/** + * 常用工具方法 + * + * @author EleAdmin + * @since 2017-06-10 10:10:22 + */ +public class CommonUtil { + // 生成uuid的字符 + private static final String[] chars = new String[]{ + "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", + "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", + "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", + "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", + "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" + }; + + /** + * 生成8位uuid + * + * @return String + */ + public static String randomUUID8() { + StringBuilder sb = new StringBuilder(); + String uuid = UUID.randomUUID().toString().replace("-", ""); + for (int i = 0; i < 8; i++) { + String str = uuid.substring(i * 4, i * 4 + 4); + int x = Integer.parseInt(str, 16); + sb.append(chars[x % 0x3E]); + } + return sb.toString(); + } + + /** + * 生成16位uuid + * + * @return String + */ + public static String randomUUID16() { + StringBuilder sb = new StringBuilder(); + String uuid = UUID.randomUUID().toString().replace("-", ""); + for (int i = 0; i < 16; i++) { + String str = uuid.substring(i * 2, i * 2 + 2); + int x = Integer.parseInt(str, 16); + sb.append(chars[x % 0x3E]); + } + return sb.toString(); + } + + /** + * 检查List是否有重复元素 + * + * @param list List + * @param mapper 获取需要检查的字段的Function + * @param 数据的类型 + * @param 需要检查的字段的类型 + * @return boolean + */ + public static boolean checkRepeat(List list, Function mapper) { + for (int i = 0; i < list.size(); i++) { + for (int j = 0; j < list.size(); j++) { + if (i != j && mapper.apply(list.get(i)).equals(mapper.apply(list.get(j)))) { + return true; + } + } + } + return false; + } + + /** + * List转为树形结构 + * + * @param data List + * @param parentId 顶级的parentId + * @param parentIdMapper 获取parentId的Function + * @param idMapper 获取id的Function + * @param consumer 赋值children的Consumer + * @param 数据的类型 + * @param parentId的类型 + * @return List + */ + public static List toTreeData(List data, R parentId, + Function parentIdMapper, + Function idMapper, + BiConsumer> consumer) { + List result = new ArrayList<>(); + for (T d : data) { + R dParentId = parentIdMapper.apply(d); + if (ObjectUtil.equals(parentId, dParentId)) { + R dId = idMapper.apply(d); + List children = toTreeData(data, dId, parentIdMapper, idMapper, consumer); + consumer.accept(d, children); + result.add(d); + } + } + return result; + } + + /** + * 遍历树形结构数据 + * + * @param data List + * @param consumer 回调 + * @param mapper 获取children的Function + * @param 数据的类型 + */ + public static void eachTreeData(List data, Consumer consumer, Function> mapper) { + for (T d : data) { + consumer.accept(d); + List children = mapper.apply(d); + if (children != null && children.size() > 0) { + eachTreeData(children, consumer, mapper); + } + } + } + + /** + * 获取集合中的第一条数据 + * + * @param records 集合 + * @return 第一条数据 + */ + public static T listGetOne(List records) { + return records == null || records.size() == 0 ? null : records.get(0); + } + + /** + * 支持跨域 + * + * @param response HttpServletResponse + */ + public static void addCrossHeaders(HttpServletResponse response) { + response.setHeader("Access-Control-Max-Age", "3600"); + response.setHeader("Access-Control-Allow-Origin", "*"); + response.setHeader("Access-Control-Allow-Methods", "*"); + response.setHeader("Access-Control-Allow-Headers", "*"); + response.setHeader("Access-Control-Expose-Headers", Constants.TOKEN_HEADER_NAME); + } + + /** + * 输出错误信息 + * + * @param response HttpServletResponse + * @param code 错误码 + * @param message 提示信息 + * @param error 错误信息 + */ + public static void responseError(HttpServletResponse response, Integer code, String message, String error) { + response.setContentType("application/json;charset=UTF-8"); + try { + PrintWriter out = response.getWriter(); + out.write(JSONUtil.toJSONString(new ApiResult<>(code, message, null, error))); + out.flush(); + } catch (IOException e) { + e.printStackTrace(); + } + } + +} diff --git a/src/main/java/com/eleadmin/common/core/utils/FileServerUtil.java b/src/main/java/com/eleadmin/common/core/utils/FileServerUtil.java new file mode 100644 index 0000000..932ea37 --- /dev/null +++ b/src/main/java/com/eleadmin/common/core/utils/FileServerUtil.java @@ -0,0 +1,394 @@ +package com.eleadmin.common.core.utils; + +import cn.hutool.core.img.ImgUtil; +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.IORuntimeException; +import cn.hutool.core.io.IoUtil; +import cn.hutool.core.util.StrUtil; +import org.apache.tika.Tika; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.net.MalformedURLException; +import java.net.URLEncoder; +import java.text.SimpleDateFormat; +import java.util.*; + +/** + * 文件上传下载工具类 + * + * @author EleAdmin + * @since 2018-12-14 08:38:53 + */ +public class FileServerUtil { + // 除 text/* 外也需要设置输出编码的 content-type + private final static List SET_CHARSET_CONTENT_TYPES = Arrays.asList( + "application/json", + "application/javascript" + ); + + /** + * 上传文件 + * + * @param file MultipartFile + * @param directory 文件保存的目录 + * @param uuidName 是否用uuid命名 + * @return File + */ + public static File upload(MultipartFile file, String directory, boolean uuidName) + throws IOException, IllegalStateException { + File outFile = getUploadFile(file.getOriginalFilename(), directory, uuidName); + if (!outFile.getParentFile().exists()) { + if (!outFile.getParentFile().mkdirs()) { + throw new RuntimeException("make directory fail"); + } + } + file.transferTo(outFile); + return outFile; + } + + /** + * 上传base64格式文件 + * + * @param base64 base64编码字符 + * @param fileName 文件名称, 为空使用uuid命名 + * @param directory 文件保存的目录 + * @return File + */ + public static File upload(String base64, String fileName, String directory) + throws FileNotFoundException, IORuntimeException { + if (StrUtil.isBlank(base64) || !base64.startsWith("data:image/") || !base64.contains(";base64,")) { + throw new RuntimeException("base64 data error"); + } + String suffix = "." + base64.substring(11, base64.indexOf(";")); // 获取文件后缀 + boolean uuidName = StrUtil.isBlank(fileName); + File outFile = getUploadFile(uuidName ? suffix : fileName, directory, uuidName); + byte[] bytes = Base64.getDecoder().decode(base64.substring(base64.indexOf(";") + 8).getBytes()); + IoUtil.write(new FileOutputStream(outFile), true, bytes); + return outFile; + } + + /** + * 获取上传文件位置 + * + * @param name 文件名称 + * @param directory 上传目录 + * @param uuidName 是否使用uuid命名 + * @return File + */ + public static File getUploadFile(String name, String directory, boolean uuidName) { + // 当前日期作为上传子目录 + String dir = new SimpleDateFormat("yyyyMMdd/").format(new Date()); + // 获取文件后缀 + String suffix = (name == null || !name.contains(".")) ? "" : name.substring(name.lastIndexOf(".")); + // 使用uuid命名 + if (uuidName || name == null) { + String uuid = UUID.randomUUID().toString().replaceAll("-", ""); + return new File(directory, dir + uuid + suffix); + } + // 使用原名称, 存在相同则加(1) + File file = new File(directory, dir + name); + String prefix = StrUtil.removeSuffix(name, suffix); + int sameSize = 2; + while (file.exists()) { + file = new File(directory, dir + prefix + "(" + sameSize + ")" + suffix); + sameSize++; + } + return file; + } + + /** + * 查看文件, 支持断点续传 + * + * @param file 文件 + * @param pdfDir office转pdf输出目录 + * @param officeHome openOffice安装目录 + * @param response HttpServletResponse + * @param request HttpServletRequest + */ + public static void preview(File file, String pdfDir, String officeHome, + HttpServletResponse response, HttpServletRequest request) { + preview(file, false, null, pdfDir, officeHome, response, request); + } + + /** + * 查看文件, 支持断点续传 + * + * @param file 文件 + * @param forceDownload 是否强制下载 + * @param fileName 强制下载的文件名称 + * @param pdfDir office转pdf输出目录 + * @param officeHome openOffice安装目录 + * @param response HttpServletResponse + * @param request HttpServletRequest + */ + public static void preview(File file, boolean forceDownload, String fileName, String pdfDir, String officeHome, + HttpServletResponse response, HttpServletRequest request) { + CommonUtil.addCrossHeaders(response); + if (file == null || !file.exists()) { + outNotFund(response); + return; + } + if (forceDownload) { + setDownloadHeader(response, StrUtil.isBlank(fileName) ? file.getName() : fileName); + } else { + // office转pdf预览 + if (OpenOfficeUtil.canConverter(file.getName())) { + File pdfFile = OpenOfficeUtil.converterToPDF(file.getAbsolutePath(), pdfDir, officeHome); + if (pdfFile != null) { + file = pdfFile; + } + } + // 获取文件类型 + String contentType = getContentType(file); + if (contentType != null) { + response.setContentType(contentType); + // 设置编码 + if (contentType.startsWith("text/") || SET_CHARSET_CONTENT_TYPES.contains(contentType)) { + try { + String charset = JChardetFacadeUtil.detectCodepage(file.toURI().toURL()); + if (charset != null) { + response.setCharacterEncoding(charset); + } + } catch (MalformedURLException e) { + e.printStackTrace(); + } + } + } else { + setDownloadHeader(response, file.getName()); + } + } + response.setHeader("Cache-Control", "public"); + output(file, response, request); + } + + /** + * 查看缩略图 + * + * @param file 原文件 + * @param thumbnail 缩略图文件 + * @param size 缩略图文件的最大值(kb) + * @param response HttpServletResponse + * @param request HttpServletRequest + */ + public static void previewThumbnail(File file, File thumbnail, Integer size, + HttpServletResponse response, HttpServletRequest request) { + // 如果是图片并且缩略图不存在则生成 + if (!thumbnail.exists() && isImage(file)) { + long fileSize = file.length(); + if ((fileSize / 1024) > size) { + try { + if (thumbnail.getParentFile().mkdirs()) { + ImgUtil.scale(file, thumbnail, size / (fileSize / 1024f)); + if (thumbnail.exists() && thumbnail.length() > file.length()) { + FileUtil.copy(file, thumbnail, true); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } else { + preview(file, null, null, response, request); + return; + } + } + preview(thumbnail.exists() ? thumbnail : file, null, null, response, request); + } + + /** + * 输出文件流, 支持断点续传 + * + * @param file 文件 + * @param response HttpServletResponse + * @param request HttpServletRequest + */ + public static void output(File file, HttpServletResponse response, HttpServletRequest request) { + long length = file.length(); // 文件总大小 + long start = 0, to = length - 1; // 开始读取位置, 结束读取位置 + long lastModified = file.lastModified(); // 文件修改时间 + response.setHeader("Accept-Ranges", "bytes"); + response.setHeader("ETag", "\"" + length + "-" + lastModified + "\""); + response.setHeader("Last-Modified", new Date(lastModified).toString()); + String range = request.getHeader("Range"); + if (range != null) { + response.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT); + String[] ranges = range.replace("bytes=", "").split("-"); + start = Long.parseLong(ranges[0].trim()); + if (ranges.length > 1) { + to = Long.parseLong(ranges[1].trim()); + } + response.setHeader("Content-Range", "bytes " + start + "-" + to + "/" + length); + } + response.setHeader("Content-Length", String.valueOf(to - start + 1)); + try { + output(file, response.getOutputStream(), 2048, start, to); + } catch (IOException e) { + e.printStackTrace(); + } + } + + /** + * 输出文件流 + * + * @param file 文件 + * @param os 输出流 + */ + public static void output(File file, OutputStream os) { + output(file, os, null); + } + + /** + * 输出文件流 + * + * @param file 文件 + * @param os 输出流 + * @param size 读取缓冲区大小 + */ + public static void output(File file, OutputStream os, Integer size) { + output(file, os, size, null, null); + } + + /** + * 输出文件流, 支持分片 + * + * @param file 文件 + * @param os 输出流 + * @param size 读取缓冲区大小 + * @param start 开始位置 + * @param to 结束位置 + */ + public static void output(File file, OutputStream os, Integer size, Long start, Long to) { + BufferedInputStream is = null; + try { + is = new BufferedInputStream(new FileInputStream(file)); + if (start != null) { + long skip = is.skip(start); + if (skip < start) { + System.out.println("ERROR: skip fail[ skipped=" + skip + ", start= " + start + " ]"); + } + to = to - start + 1; + } + byte[] bytes = new byte[size == null ? 2048 : size]; + int len; + if (to == null) { + while ((len = is.read(bytes)) != -1) { + os.write(bytes, 0, len); + } + } else { + while (to > 0 && (len = is.read(bytes)) != -1) { + os.write(bytes, 0, to < len ? (int) ((long) to) : len); + to -= len; + } + } + os.flush(); + } catch (IOException ignored) { + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (os != null) { + try { + os.close(); + } catch (IOException ignored) { + } + } + if (is != null) { + try { + is.close(); + } catch (IOException e) { + System.out.println(e.getMessage()); + } + } + } + } + + /** + * 获取文件类型 + * + * @param file 文件 + * @return String + */ + public static String getContentType(File file) { + String contentType = null; + if (file.exists()) { + try { + contentType = new Tika().detect(file); + } catch (IOException e) { + e.printStackTrace(); + } + } + return contentType; + } + + /** + * 判断文件是否是图片类型 + * + * @param file 文件 + * @return boolean + */ + public static boolean isImage(File file) { + return isImage(getContentType(file)); + } + + /** + * 判断文件是否是图片类型 + * + * @param contentType 文件类型 + * @return boolean + */ + public static boolean isImage(String contentType) { + return contentType != null && contentType.startsWith("image/"); + } + + /** + * 设置下载文件的header + * + * @param response HttpServletResponse + * @param fileName 文件名称 + */ + public static void setDownloadHeader(HttpServletResponse response, String fileName) { + response.setContentType("application/force-download"); + try { + fileName = URLEncoder.encode(fileName, "utf-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + response.setHeader("Content-Disposition", "attachment;fileName=" + fileName); + } + + /** + * 输出404错误页面 + * + * @param response HttpServletResponse + */ + public static void outNotFund(HttpServletResponse response) { + response.setStatus(HttpServletResponse.SC_NOT_FOUND); + outMessage("404 Not Found", null, response); + } + + /** + * 输出错误页面 + * + * @param title 标题 + * @param message 内容 + * @param response HttpServletResponse + */ + public static void outMessage(String title, String message, HttpServletResponse response) { + response.setContentType("text/html;charset=UTF-8"); + try { + PrintWriter writer = response.getWriter(); + writer.write(""); + writer.write("" + title + ""); + writer.write("

" + title + "

"); + if (message != null) { + writer.write(message); + } + writer.write("

EleAdmin File Server

"); + writer.flush(); + } catch (IOException e) { + e.printStackTrace(); + } + } + +} diff --git a/src/main/java/com/eleadmin/common/core/utils/JChardetFacadeUtil.java b/src/main/java/com/eleadmin/common/core/utils/JChardetFacadeUtil.java new file mode 100644 index 0000000..6bcbbb9 --- /dev/null +++ b/src/main/java/com/eleadmin/common/core/utils/JChardetFacadeUtil.java @@ -0,0 +1,2025 @@ +package com.eleadmin.common.core.utils; + +import java.io.*; +import java.net.URL; +import java.nio.charset.Charset; +import java.nio.charset.UnsupportedCharsetException; + +/** + * 文件编码检测工具, 核心代码来自 cpDetector 和 jChardet, 可以检测大多数文件的编码 + * + * @author EleAdmin + * @since 2020-09-15 09:24:20 + */ +public class JChardetFacadeUtil { + + public static String detectCodepage(URL url) { + try { + Charset ret = JChardetFacade.getInstance().detectCodepage(url); + return ret == null ? null : ret.name(); + } catch (Exception ignored) { + } + return null; + } + + /** + * 下面代码来自: https://github.com/r91987/cpdetector + */ + public static class JChardetFacade extends AbstractCodepageDetector implements nsICharsetDetectionObserver { + private static JChardetFacade instance = null; + private static nsDetector det; + private byte[] buf = new byte[4096]; + private Charset codpage = null; + private boolean m_guessing = true; + private int amountOfVerifiers = 0; + + private JChardetFacade() { + det = new nsDetector(0); + det.Init(this); + this.amountOfVerifiers = det.getProbableCharsets().length; + } + + public static JChardetFacade getInstance() { + if (instance == null) { + instance = new JChardetFacade(); + } + + return instance; + } + + public synchronized Charset detectCodepage(InputStream in, int length) throws IOException { + this.Reset(); + int read = 0; + boolean done = false; + boolean isAscii = true; + Charset ret = null; + + int len; + do { + len = in.read(this.buf, 0, Math.min(this.buf.length, length - read)); + if (len > 0) { + read += len; + } + + if (!done) { + done = det.DoIt(this.buf, len, false); + } + } while (len > 0 && !done); + + det.DataEnd(); + if (this.codpage == null) { + if (this.m_guessing) { + ret = this.guess(); + } + } else { + ret = this.codpage; + } + return ret; + } + + private Charset guess() { + Charset ret = null; + String[] possibilities = det.getProbableCharsets(); + if (possibilities.length == this.amountOfVerifiers) { + ret = Charset.forName("US-ASCII"); + } else { + String check = possibilities[0]; + if (!check.equalsIgnoreCase("nomatch")) { + for (int i = 0; ret == null && i < possibilities.length; ++i) { + try { + ret = Charset.forName(possibilities[i]); + } catch (UnsupportedCharsetException ignored) { + } + } + } + } + return ret; + } + + public void Notify(String charset) { + this.codpage = Charset.forName(charset); + } + + public void Reset() { + det.Reset(); + this.codpage = null; + } + + public boolean isGuessing() { + return this.m_guessing; + } + + public synchronized void setGuessing(boolean guessing) { + this.m_guessing = guessing; + } + } + + /** + * + */ + public static abstract class AbstractCodepageDetector implements ICodepageDetector { + public AbstractCodepageDetector() { + } + + public Charset detectCodepage(URL url) throws IOException { + BufferedInputStream in = new BufferedInputStream(url.openStream()); + Charset result = this.detectCodepage(in, 2147483647); + in.close(); + return result; + } + + public final Reader open(URL url) throws IOException { + Reader ret = null; + Charset cs = this.detectCodepage(url); + if (cs != null) { + ret = new InputStreamReader(new BufferedInputStream(url.openStream()), cs); + } + + return ret; + } + + public int compareTo(Object o) { + String other = o.getClass().getName(); + String mine = this.getClass().getName(); + return mine.compareTo(other); + } + } + + /** + * + */ + interface ICodepageDetector extends Serializable, Comparable { + Reader open(URL var1) throws IOException; + + Charset detectCodepage(URL var1) throws IOException; + + Charset detectCodepage(InputStream var1, int var2) throws IOException; + } + + /** + * 以下代码开始是由Mozilla组织提供的JChardet, 它可以检测大多数文件的编码 + * http://jchardet.sourceforge.net/ + */ + public static class nsDetector extends nsPSMDetector implements nsICharsetDetector { + nsICharsetDetectionObserver mObserver = null; + + public nsDetector() { + } + + public nsDetector(int var1) { + super(var1); + } + + public void Init(nsICharsetDetectionObserver var1) { + this.mObserver = var1; + } + + public boolean DoIt(byte[] var1, int var2, boolean var3) { + if (var1 != null && !var3) { + this.HandleData(var1, var2); + return this.mDone; + } else { + return false; + } + } + + public void Done() { + this.DataEnd(); + } + + public void Report(String var1) { + if (this.mObserver != null) { + this.mObserver.Notify(var1); + } + + } + + public boolean isAscii(byte[] var1, int var2) { + for (int var3 = 0; var3 < var2; ++var3) { + if ((128 & var1[var3]) != 0) { + return false; + } + } + + return true; + } + } + + /** + * + */ + public static abstract class nsPSMDetector { + public static final int ALL = 0; + public static final int JAPANESE = 1; + public static final int CHINESE = 2; + public static final int SIMPLIFIED_CHINESE = 3; + public static final int TRADITIONAL_CHINESE = 4; + public static final int KOREAN = 5; + public static final int NO_OF_LANGUAGES = 6; + public static final int MAX_VERIFIERS = 16; + nsVerifier[] mVerifier; + nsEUCStatistics[] mStatisticsData; + nsEUCSampler mSampler = new nsEUCSampler(); + byte[] mState = new byte[16]; + int[] mItemIdx = new int[16]; + int mItems; + int mClassItems; + boolean mDone; + boolean mRunSampler; + boolean mClassRunSampler; + + public nsPSMDetector() { + this.initVerifiers(0); + this.Reset(); + } + + public nsPSMDetector(int var1) { + this.initVerifiers(var1); + this.Reset(); + } + + public nsPSMDetector(int var1, nsVerifier[] var2, nsEUCStatistics[] var3) { + this.mClassRunSampler = var3 != null; + this.mStatisticsData = var3; + this.mVerifier = var2; + this.mClassItems = var1; + this.Reset(); + } + + public void Reset() { + this.mRunSampler = this.mClassRunSampler; + this.mDone = false; + this.mItems = this.mClassItems; + + for (int var1 = 0; var1 < this.mItems; this.mItemIdx[var1] = var1++) { + this.mState[var1] = 0; + } + + this.mSampler.Reset(); + } + + protected void initVerifiers(int var1) { + boolean var2 = false; + int var3; + if (var1 >= 0 && var1 < 6) { + var3 = var1; + } else { + var3 = 0; + } + + this.mVerifier = null; + this.mStatisticsData = null; + if (var3 == 4) { + this.mVerifier = new nsVerifier[]{new nsUTF8Verifier(), new nsBIG5Verifier(), new nsISO2022CNVerifier(), new nsEUCTWVerifier(), new nsCP1252Verifier(), new nsUCS2BEVerifier(), new nsUCS2LEVerifier()}; + this.mStatisticsData = new nsEUCStatistics[]{null, new Big5Statistics(), null, new EUCTWStatistics(), null, null, null}; + } else if (var3 == 5) { + this.mVerifier = new nsVerifier[]{new nsUTF8Verifier(), new nsEUCKRVerifier(), new nsISO2022KRVerifier(), new nsCP1252Verifier(), new nsUCS2BEVerifier(), new nsUCS2LEVerifier()}; + } else if (var3 == 3) { + this.mVerifier = new nsVerifier[]{new nsUTF8Verifier(), new nsGB2312Verifier(), new nsGB18030Verifier(), new nsISO2022CNVerifier(), new nsHZVerifier(), new nsCP1252Verifier(), new nsUCS2BEVerifier(), new nsUCS2LEVerifier()}; + } else if (var3 == 1) { + this.mVerifier = new nsVerifier[]{new nsUTF8Verifier(), new nsSJISVerifier(), new nsEUCJPVerifier(), new nsISO2022JPVerifier(), new nsCP1252Verifier(), new nsUCS2BEVerifier(), new nsUCS2LEVerifier()}; + } else if (var3 == 2) { + this.mVerifier = new nsVerifier[]{new nsUTF8Verifier(), new nsGB2312Verifier(), new nsGB18030Verifier(), new nsBIG5Verifier(), new nsISO2022CNVerifier(), new nsHZVerifier(), new nsEUCTWVerifier(), new nsCP1252Verifier(), new nsUCS2BEVerifier(), new nsUCS2LEVerifier()}; + this.mStatisticsData = new nsEUCStatistics[]{null, new GB2312Statistics(), null, new Big5Statistics(), null, null, new EUCTWStatistics(), null, null, null}; + } else if (var3 == 0) { + this.mVerifier = new nsVerifier[]{new nsUTF8Verifier(), new nsSJISVerifier(), new nsEUCJPVerifier(), new nsISO2022JPVerifier(), new nsEUCKRVerifier(), new nsISO2022KRVerifier(), new nsBIG5Verifier(), new nsEUCTWVerifier(), new nsGB2312Verifier(), new nsGB18030Verifier(), new nsISO2022CNVerifier(), new nsHZVerifier(), new nsCP1252Verifier(), new nsUCS2BEVerifier(), new nsUCS2LEVerifier()}; + this.mStatisticsData = new nsEUCStatistics[]{null, null, new EUCJPStatistics(), null, new EUCKRStatistics(), null, new Big5Statistics(), new EUCTWStatistics(), new GB2312Statistics(), null, null, null, null, null, null}; + } + + this.mClassRunSampler = this.mStatisticsData != null; + this.mClassItems = this.mVerifier.length; + } + + public abstract void Report(String var1); + + public boolean HandleData(byte[] var1, int var2) { + for (int var3 = 0; var3 < var2; ++var3) { + byte var5 = var1[var3]; + int var4 = 0; + + while (var4 < this.mItems) { + byte var6 = nsVerifier.getNextState(this.mVerifier[this.mItemIdx[var4]], var5, this.mState[var4]); + if (var6 == 2) { + this.Report(this.mVerifier[this.mItemIdx[var4]].charset()); + this.mDone = true; + return this.mDone; + } + + if (var6 == 1) { + --this.mItems; + if (var4 < this.mItems) { + this.mItemIdx[var4] = this.mItemIdx[this.mItems]; + this.mState[var4] = this.mState[this.mItems]; + } + } else { + this.mState[var4++] = var6; + } + } + + if (this.mItems <= 1) { + if (1 == this.mItems) { + this.Report(this.mVerifier[this.mItemIdx[0]].charset()); + } + + this.mDone = true; + return this.mDone; + } + + int var7 = 0; + int var8 = 0; + + for (var4 = 0; var4 < this.mItems; ++var4) { + if (!this.mVerifier[this.mItemIdx[var4]].isUCS2() && !this.mVerifier[this.mItemIdx[var4]].isUCS2()) { + ++var7; + var8 = var4; + } + } + + if (1 == var7) { + this.Report(this.mVerifier[this.mItemIdx[var8]].charset()); + this.mDone = true; + return this.mDone; + } + } + + if (this.mRunSampler) { + this.Sample(var1, var2); + } + + return this.mDone; + } + + public void DataEnd() { + if (!this.mDone) { + if (this.mItems == 2) { + if (this.mVerifier[this.mItemIdx[0]].charset().equals("GB18030")) { + this.Report(this.mVerifier[this.mItemIdx[1]].charset()); + this.mDone = true; + } else if (this.mVerifier[this.mItemIdx[1]].charset().equals("GB18030")) { + this.Report(this.mVerifier[this.mItemIdx[0]].charset()); + this.mDone = true; + } + } + + if (this.mRunSampler) { + this.Sample((byte[]) null, 0, true); + } + + } + } + + public void Sample(byte[] var1, int var2) { + this.Sample(var1, var2, false); + } + + public void Sample(byte[] var1, int var2, boolean var3) { + int var4 = 0; + int var6 = 0; + + int var5; + for (var5 = 0; var5 < this.mItems; ++var5) { + if (null != this.mStatisticsData[this.mItemIdx[var5]]) { + ++var6; + } + + if (!this.mVerifier[this.mItemIdx[var5]].isUCS2() && !this.mVerifier[this.mItemIdx[var5]].charset().equals("GB18030")) { + ++var4; + } + } + + this.mRunSampler = var6 > 1; + if (this.mRunSampler) { + this.mRunSampler = this.mSampler.Sample(var1, var2); + if ((var3 && this.mSampler.GetSomeData() || this.mSampler.EnoughData()) && var6 == var4) { + this.mSampler.CalFreq(); + int var7 = -1; + int var8 = 0; + float var9 = 0.0F; + + for (var5 = 0; var5 < this.mItems; ++var5) { + if (null != this.mStatisticsData[this.mItemIdx[var5]] && !this.mVerifier[this.mItemIdx[var5]].charset().equals("Big5")) { + float var10 = this.mSampler.GetScore(this.mStatisticsData[this.mItemIdx[var5]].mFirstByteFreq(), this.mStatisticsData[this.mItemIdx[var5]].mFirstByteWeight(), this.mStatisticsData[this.mItemIdx[var5]].mSecondByteFreq(), this.mStatisticsData[this.mItemIdx[var5]].mSecondByteWeight()); + if (0 == var8++ || var9 > var10) { + var9 = var10; + var7 = var5; + } + } + } + + if (var7 >= 0) { + this.Report(this.mVerifier[this.mItemIdx[var7]].charset()); + this.mDone = true; + } + } + } + + } + + public String[] getProbableCharsets() { + String[] var1; + if (this.mItems <= 0) { + var1 = new String[]{"nomatch"}; + return var1; + } else { + var1 = new String[this.mItems]; + + for (int var2 = 0; var2 < this.mItems; ++var2) { + var1[var2] = this.mVerifier[this.mItemIdx[var2]].charset(); + } + + return var1; + } + } + } + + /** + * + */ + public static interface nsICharsetDetectionObserver { + void Notify(String var1); + } + + /** + * + */ + public static interface nsICharsetDetector { + void Init(nsICharsetDetectionObserver var1); + + boolean DoIt(byte[] var1, int var2, boolean var3); + + void Done(); + } + + /** + * + */ + public static abstract class nsVerifier { + static final byte eStart = 0; + static final byte eError = 1; + static final byte eItsMe = 2; + static final int eidxSft4bits = 3; + static final int eSftMsk4bits = 7; + static final int eBitSft4bits = 2; + static final int eUnitMsk4bits = 15; + + nsVerifier() { + } + + public abstract String charset(); + + public abstract int stFactor(); + + public abstract int[] cclass(); + + public abstract int[] states(); + + public abstract boolean isUCS2(); + + public static byte getNextState(nsVerifier var0, byte var1, byte var2) { + return (byte) (255 & var0.states()[(var2 * var0.stFactor() + (var0.cclass()[(var1 & 255) >> 3] >> ((var1 & 7) << 2) & 15) & 255) >> 3] >> ((var2 * var0.stFactor() + (var0.cclass()[(var1 & 255) >> 3] >> ((var1 & 7) << 2) & 15) & 255 & 7) << 2) & 15); + } + } + + /** + * + */ + public static class nsEUCSampler { + int mTotal = 0; + int mThreshold = 200; + int mState = 0; + public int[] mFirstByteCnt = new int[94]; + public int[] mSecondByteCnt = new int[94]; + public float[] mFirstByteFreq = new float[94]; + public float[] mSecondByteFreq = new float[94]; + + public nsEUCSampler() { + this.Reset(); + } + + public void Reset() { + this.mTotal = 0; + this.mState = 0; + + for (int var1 = 0; var1 < 94; ++var1) { + this.mFirstByteCnt[var1] = this.mSecondByteCnt[var1] = 0; + } + + } + + boolean EnoughData() { + return this.mTotal > this.mThreshold; + } + + boolean GetSomeData() { + return this.mTotal > 1; + } + + boolean Sample(byte[] var1, int var2) { + if (this.mState == 1) { + return false; + } else { + int var3 = 0; + + for (int var4 = 0; var4 < var2 && 1 != this.mState; ++var3) { + int var10002; + switch (this.mState) { + case 0: + if ((var1[var3] & 128) != 0) { + if (255 != (255 & var1[var3]) && 161 <= (255 & var1[var3])) { + ++this.mTotal; + var10002 = this.mFirstByteCnt[(255 & var1[var3]) - 161]++; + this.mState = 2; + } else { + this.mState = 1; + } + } + case 1: + break; + case 2: + if ((var1[var3] & 128) != 0) { + if (255 != (255 & var1[var3]) && 161 <= (255 & var1[var3])) { + ++this.mTotal; + var10002 = this.mSecondByteCnt[(255 & var1[var3]) - 161]++; + this.mState = 0; + } else { + this.mState = 1; + } + } else { + this.mState = 1; + } + break; + default: + this.mState = 1; + } + + ++var4; + } + + return 1 != this.mState; + } + } + + void CalFreq() { + for (int var1 = 0; var1 < 94; ++var1) { + this.mFirstByteFreq[var1] = (float) this.mFirstByteCnt[var1] / (float) this.mTotal; + this.mSecondByteFreq[var1] = (float) this.mSecondByteCnt[var1] / (float) this.mTotal; + } + + } + + float GetScore(float[] var1, float var2, float[] var3, float var4) { + return var2 * this.GetScore(var1, this.mFirstByteFreq) + var4 * this.GetScore(var3, this.mSecondByteFreq); + } + + float GetScore(float[] var1, float[] var2) { + float var4 = 0.0F; + + for (int var5 = 0; var5 < 94; ++var5) { + float var3 = var1[var5] - var2[var5]; + var4 += var3 * var3; + } + + return (float) Math.sqrt((double) var4) / 94.0F; + } + } + + /** + * + */ + public static abstract class nsEUCStatistics { + public abstract float[] mFirstByteFreq(); + + public abstract float mFirstByteStdDev(); + + public abstract float mFirstByteMean(); + + public abstract float mFirstByteWeight(); + + public abstract float[] mSecondByteFreq(); + + public abstract float mSecondByteStdDev(); + + public abstract float mSecondByteMean(); + + public abstract float mSecondByteWeight(); + + public nsEUCStatistics() { + } + } + + /** + * + */ + public static class EUCJPStatistics extends nsEUCStatistics { + static float[] mFirstByteFreq; + static float mFirstByteStdDev; + static float mFirstByteMean; + static float mFirstByteWeight; + static float[] mSecondByteFreq; + static float mSecondByteStdDev; + static float mSecondByteMean; + static float mSecondByteWeight; + + public float[] mFirstByteFreq() { + return mFirstByteFreq; + } + + public float mFirstByteStdDev() { + return mFirstByteStdDev; + } + + public float mFirstByteMean() { + return mFirstByteMean; + } + + public float mFirstByteWeight() { + return mFirstByteWeight; + } + + public float[] mSecondByteFreq() { + return mSecondByteFreq; + } + + public float mSecondByteStdDev() { + return mSecondByteStdDev; + } + + public float mSecondByteMean() { + return mSecondByteMean; + } + + public float mSecondByteWeight() { + return mSecondByteWeight; + } + + public EUCJPStatistics() { + mFirstByteFreq = new float[]{0.364808F, 0.0F, 0.0F, 0.145325F, 0.304891F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.001835F, 0.010771F, 0.006462F, 0.001157F, 0.002114F, 0.003231F, 0.001356F, 0.00742F, 0.004189F, 0.003231F, 0.003032F, 0.03319F, 0.006303F, 0.006064F, 0.009973F, 0.002354F, 0.00367F, 0.009135F, 0.001675F, 0.002792F, 0.002194F, 0.01472F, 0.011928F, 8.78E-4F, 0.013124F, 0.001077F, 0.009295F, 0.003471F, 0.002872F, 0.002433F, 9.57E-4F, 0.001636F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 8.0E-5F, 2.79E-4F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 8.0E-5F, 0.0F}; + mFirstByteStdDev = 0.050407F; + mFirstByteMean = 0.010638F; + mFirstByteWeight = 0.640871F; + mSecondByteFreq = new float[]{0.002473F, 0.039134F, 0.152745F, 0.009694F, 3.59E-4F, 0.02218F, 7.58E-4F, 0.004308F, 1.6E-4F, 0.002513F, 0.003072F, 0.001316F, 0.00383F, 0.001037F, 0.00359F, 9.57E-4F, 1.6E-4F, 2.39E-4F, 0.006462F, 0.001596F, 0.031554F, 0.001316F, 0.002194F, 0.016555F, 0.003271F, 6.78E-4F, 5.98E-4F, 0.206438F, 7.18E-4F, 0.001077F, 0.00371F, 0.001356F, 0.001356F, 4.39E-4F, 0.004388F, 0.005704F, 8.78E-4F, 0.010172F, 0.007061F, 0.01468F, 6.38E-4F, 0.02573F, 0.002792F, 7.18E-4F, 0.001795F, 0.091551F, 7.58E-4F, 0.003909F, 5.58E-4F, 0.031195F, 0.007061F, 0.001316F, 0.022579F, 0.006981F, 0.00726F, 0.001117F, 2.39E-4F, 0.012127F, 8.78E-4F, 0.00379F, 0.001077F, 7.58E-4F, 0.002114F, 0.002234F, 6.78E-4F, 0.002992F, 0.003311F, 0.023416F, 0.001237F, 0.002753F, 0.005146F, 0.002194F, 0.007021F, 0.008497F, 0.013763F, 0.011768F, 0.006303F, 0.001915F, 6.38E-4F, 0.008776F, 9.18E-4F, 0.003431F, 0.057603F, 4.39E-4F, 4.39E-4F, 7.58E-4F, 0.002872F, 0.001675F, 0.01105F, 0.0F, 2.79E-4F, 0.012127F, 7.18E-4F, 0.00738F}; + mSecondByteStdDev = 0.028247F; + mSecondByteMean = 0.010638F; + mSecondByteWeight = 0.359129F; + } + } + + /** + * + */ + public static class nsEUCJPVerifier extends nsVerifier { + static int[] cclass; + static int[] states; + static int stFactor; + static String charset; + + public int[] cclass() { + return cclass; + } + + public int[] states() { + return states; + } + + public int stFactor() { + return stFactor; + } + + public String charset() { + return charset; + } + + public nsEUCJPVerifier() { + cclass = new int[32]; + cclass[0] = 1145324612; + cclass[1] = 1430537284; + cclass[2] = 1145324612; + cclass[3] = 1145328708; + cclass[4] = 1145324612; + cclass[5] = 1145324612; + cclass[6] = 1145324612; + cclass[7] = 1145324612; + cclass[8] = 1145324612; + cclass[9] = 1145324612; + cclass[10] = 1145324612; + cclass[11] = 1145324612; + cclass[12] = 1145324612; + cclass[13] = 1145324612; + cclass[14] = 1145324612; + cclass[15] = 1145324612; + cclass[16] = 1431655765; + cclass[17] = 827675989; + cclass[18] = 1431655765; + cclass[19] = 1431655765; + cclass[20] = 572662309; + cclass[21] = 572662306; + cclass[22] = 572662306; + cclass[23] = 572662306; + cclass[24] = 572662306; + cclass[25] = 572662306; + cclass[26] = 572662306; + cclass[27] = 572662306; + cclass[28] = 0; + cclass[29] = 0; + cclass[30] = 0; + cclass[31] = 1342177280; + states = new int[5]; + states[0] = 286282563; + states[1] = 572657937; + states[2] = 286265378; + states[3] = 319885329; + states[4] = 4371; + charset = "EUC-JP"; + stFactor = 6; + } + + public boolean isUCS2() { + return false; + } + } + + /** + * + */ + public static class EUCKRStatistics extends nsEUCStatistics { + static float[] mFirstByteFreq; + static float mFirstByteStdDev; + static float mFirstByteMean; + static float mFirstByteWeight; + static float[] mSecondByteFreq; + static float mSecondByteStdDev; + static float mSecondByteMean; + static float mSecondByteWeight; + + public float[] mFirstByteFreq() { + return mFirstByteFreq; + } + + public float mFirstByteStdDev() { + return mFirstByteStdDev; + } + + public float mFirstByteMean() { + return mFirstByteMean; + } + + public float mFirstByteWeight() { + return mFirstByteWeight; + } + + public float[] mSecondByteFreq() { + return mSecondByteFreq; + } + + public float mSecondByteStdDev() { + return mSecondByteStdDev; + } + + public float mSecondByteMean() { + return mSecondByteMean; + } + + public float mSecondByteWeight() { + return mSecondByteWeight; + } + + public EUCKRStatistics() { + mFirstByteFreq = new float[]{0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 4.12E-4F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.057502F, 0.033182F, 0.002267F, 0.016076F, 0.014633F, 0.032976F, 0.004122F, 0.011336F, 0.058533F, 0.024526F, 0.025969F, 0.054411F, 0.01958F, 0.063273F, 0.113974F, 0.029885F, 0.150041F, 0.059151F, 0.002679F, 0.009893F, 0.014839F, 0.026381F, 0.015045F, 0.069456F, 0.08986F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F}; + mFirstByteStdDev = 0.025593F; + mFirstByteMean = 0.010638F; + mFirstByteWeight = 0.647437F; + mSecondByteFreq = new float[]{0.016694F, 0.0F, 0.012778F, 0.030091F, 0.002679F, 0.006595F, 0.001855F, 8.24E-4F, 0.005977F, 0.00474F, 0.003092F, 8.24E-4F, 0.01958F, 0.037304F, 0.008244F, 0.014633F, 0.001031F, 0.0F, 0.003298F, 0.002061F, 0.006183F, 0.005977F, 8.24E-4F, 0.021847F, 0.014839F, 0.052968F, 0.017312F, 0.007626F, 4.12E-4F, 8.24E-4F, 0.011129F, 0.0F, 4.12E-4F, 0.001649F, 0.005977F, 0.065746F, 0.020198F, 0.021434F, 0.014633F, 0.004122F, 0.001649F, 8.24E-4F, 8.24E-4F, 0.051937F, 0.01958F, 0.023289F, 0.026381F, 0.040396F, 0.009068F, 0.001443F, 0.00371F, 0.00742F, 0.001443F, 0.01319F, 0.002885F, 4.12E-4F, 0.003298F, 0.025969F, 4.12E-4F, 4.12E-4F, 0.006183F, 0.003298F, 0.066983F, 0.002679F, 0.002267F, 0.011129F, 4.12E-4F, 0.010099F, 0.015251F, 0.007626F, 0.043899F, 0.00371F, 0.002679F, 0.001443F, 0.010923F, 0.002885F, 0.009068F, 0.019992F, 4.12E-4F, 0.00845F, 0.005153F, 0.0F, 0.010099F, 0.0F, 0.001649F, 0.01216F, 0.011542F, 0.006595F, 0.001855F, 0.010923F, 4.12E-4F, 0.023702F, 0.00371F, 0.001855F}; + mSecondByteStdDev = 0.013937F; + mSecondByteMean = 0.010638F; + mSecondByteWeight = 0.352563F; + } + } + + /** + * + */ + public static class nsEUCKRVerifier extends nsVerifier { + static int[] cclass; + static int[] states; + static int stFactor; + static String charset; + + public int[] cclass() { + return cclass; + } + + public int[] states() { + return states; + } + + public int stFactor() { + return stFactor; + } + + public String charset() { + return charset; + } + + public nsEUCKRVerifier() { + cclass = new int[32]; + cclass[0] = 286331153; + cclass[1] = 1118481; + cclass[2] = 286331153; + cclass[3] = 286327057; + cclass[4] = 286331153; + cclass[5] = 286331153; + cclass[6] = 286331153; + cclass[7] = 286331153; + cclass[8] = 286331153; + cclass[9] = 286331153; + cclass[10] = 286331153; + cclass[11] = 286331153; + cclass[12] = 286331153; + cclass[13] = 286331153; + cclass[14] = 286331153; + cclass[15] = 286331153; + cclass[16] = 0; + cclass[17] = 0; + cclass[18] = 0; + cclass[19] = 0; + cclass[20] = 572662304; + cclass[21] = 858923554; + cclass[22] = 572662306; + cclass[23] = 572662306; + cclass[24] = 572662306; + cclass[25] = 572662322; + cclass[26] = 572662306; + cclass[27] = 572662306; + cclass[28] = 572662306; + cclass[29] = 572662306; + cclass[30] = 572662306; + cclass[31] = 35791394; + states = new int[2]; + states[0] = 286331649; + states[1] = 1122850; + charset = "EUC-KR"; + stFactor = 4; + } + + public boolean isUCS2() { + return false; + } + } + + /** + * + */ + public static class EUCTWStatistics extends nsEUCStatistics { + static float[] mFirstByteFreq; + static float mFirstByteStdDev; + static float mFirstByteMean; + static float mFirstByteWeight; + static float[] mSecondByteFreq; + static float mSecondByteStdDev; + static float mSecondByteMean; + static float mSecondByteWeight; + + public float[] mFirstByteFreq() { + return mFirstByteFreq; + } + + public float mFirstByteStdDev() { + return mFirstByteStdDev; + } + + public float mFirstByteMean() { + return mFirstByteMean; + } + + public float mFirstByteWeight() { + return mFirstByteWeight; + } + + public float[] mSecondByteFreq() { + return mSecondByteFreq; + } + + public float mSecondByteStdDev() { + return mSecondByteStdDev; + } + + public float mSecondByteMean() { + return mSecondByteMean; + } + + public float mSecondByteWeight() { + return mSecondByteWeight; + } + + public EUCTWStatistics() { + mFirstByteFreq = new float[]{0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.119286F, 0.052233F, 0.044126F, 0.052494F, 0.045906F, 0.019038F, 0.032465F, 0.026252F, 0.025502F, 0.015963F, 0.052493F, 0.019256F, 0.015137F, 0.031782F, 0.01737F, 0.018494F, 0.015575F, 0.016621F, 0.007444F, 0.011642F, 0.013916F, 0.019159F, 0.016445F, 0.007851F, 0.011079F, 0.022842F, 0.015513F, 0.010033F, 0.00995F, 0.010347F, 0.013103F, 0.015371F, 0.012502F, 0.007436F, 0.018253F, 0.014134F, 0.008907F, 0.005411F, 0.00957F, 0.013598F, 0.006092F, 0.007409F, 0.008432F, 0.005816F, 0.009349F, 0.005472F, 0.00717F, 0.00742F, 0.003681F, 0.007523F, 0.00461F, 0.006154F, 0.003348F, 0.005074F, 0.005922F, 0.005254F, 0.004682F, 0.002093F, 0.0F}; + mFirstByteStdDev = 0.016681F; + mFirstByteMean = 0.010638F; + mFirstByteWeight = 0.715599F; + mSecondByteFreq = new float[]{0.028933F, 0.011371F, 0.011053F, 0.007232F, 0.010192F, 0.004093F, 0.015043F, 0.011752F, 0.022387F, 0.00841F, 0.012448F, 0.007473F, 0.003594F, 0.007139F, 0.018912F, 0.006083F, 0.003302F, 0.010215F, 0.008791F, 0.024236F, 0.014107F, 0.014108F, 0.010303F, 0.009728F, 0.007877F, 0.009719F, 0.007952F, 0.021028F, 0.005764F, 0.009341F, 0.006591F, 0.012517F, 0.005921F, 0.008982F, 0.008771F, 0.012802F, 0.005926F, 0.008342F, 0.003086F, 0.006843F, 0.007576F, 0.004734F, 0.016404F, 0.008803F, 0.008071F, 0.005349F, 0.008566F, 0.01084F, 0.015401F, 0.031904F, 0.00867F, 0.011479F, 0.010936F, 0.007617F, 0.008995F, 0.008114F, 0.008658F, 0.005934F, 0.010452F, 0.009142F, 0.004519F, 0.008339F, 0.007476F, 0.007027F, 0.006025F, 0.021804F, 0.024248F, 0.015895F, 0.003768F, 0.010171F, 0.010007F, 0.010178F, 0.008316F, 0.006832F, 0.006364F, 0.009141F, 0.009148F, 0.012081F, 0.011914F, 0.004464F, 0.014257F, 0.006907F, 0.011292F, 0.018622F, 0.008149F, 0.004636F, 0.006612F, 0.013478F, 0.012614F, 0.005186F, 0.048285F, 0.006816F, 0.006743F, 0.008671F}; + mSecondByteStdDev = 0.00663F; + mSecondByteMean = 0.010638F; + mSecondByteWeight = 0.284401F; + } + } + + /** + * + */ + public static class nsEUCTWVerifier extends nsVerifier { + static int[] cclass; + static int[] states; + static int stFactor; + static String charset; + + public int[] cclass() { + return cclass; + } + + public int[] states() { + return states; + } + + public int stFactor() { + return stFactor; + } + + public String charset() { + return charset; + } + + public nsEUCTWVerifier() { + cclass = new int[32]; + cclass[0] = 572662306; + cclass[1] = 2236962; + cclass[2] = 572662306; + cclass[3] = 572654114; + cclass[4] = 572662306; + cclass[5] = 572662306; + cclass[6] = 572662306; + cclass[7] = 572662306; + cclass[8] = 572662306; + cclass[9] = 572662306; + cclass[10] = 572662306; + cclass[11] = 572662306; + cclass[12] = 572662306; + cclass[13] = 572662306; + cclass[14] = 572662306; + cclass[15] = 572662306; + cclass[16] = 0; + cclass[17] = 100663296; + cclass[18] = 0; + cclass[19] = 0; + cclass[20] = 1145324592; + cclass[21] = 286331221; + cclass[22] = 286331153; + cclass[23] = 286331153; + cclass[24] = 858985233; + cclass[25] = 858993459; + cclass[26] = 858993459; + cclass[27] = 858993459; + cclass[28] = 858993459; + cclass[29] = 858993459; + cclass[30] = 858993459; + cclass[31] = 53687091; + states = new int[6]; + states[0] = 338898961; + states[1] = 571543825; + states[2] = 269623842; + states[3] = 286330880; + states[4] = 1052949; + states[5] = 16; + charset = "x-euc-tw"; + stFactor = 7; + } + + public boolean isUCS2() { + return false; + } + } + + /** + * + */ + public static class Big5Statistics extends nsEUCStatistics { + static float[] mFirstByteFreq; + static float mFirstByteStdDev; + static float mFirstByteMean; + static float mFirstByteWeight; + static float[] mSecondByteFreq; + static float mSecondByteStdDev; + static float mSecondByteMean; + static float mSecondByteWeight; + + public float[] mFirstByteFreq() { + return mFirstByteFreq; + } + + public float mFirstByteStdDev() { + return mFirstByteStdDev; + } + + public float mFirstByteMean() { + return mFirstByteMean; + } + + public float mFirstByteWeight() { + return mFirstByteWeight; + } + + public float[] mSecondByteFreq() { + return mSecondByteFreq; + } + + public float mSecondByteStdDev() { + return mSecondByteStdDev; + } + + public float mSecondByteMean() { + return mSecondByteMean; + } + + public float mSecondByteWeight() { + return mSecondByteWeight; + } + + public Big5Statistics() { + mFirstByteFreq = new float[]{0.0F, 0.0F, 0.0F, 0.114427F, 0.061058F, 0.075598F, 0.048386F, 0.063966F, 0.027094F, 0.095787F, 0.029525F, 0.031331F, 0.036915F, 0.021805F, 0.019349F, 0.037496F, 0.018068F, 0.01276F, 0.030053F, 0.017339F, 0.016731F, 0.019501F, 0.01124F, 0.032973F, 0.016658F, 0.015872F, 0.021458F, 0.012378F, 0.017003F, 0.020802F, 0.012454F, 0.009239F, 0.012829F, 0.007922F, 0.010079F, 0.009815F, 0.010104F, 0.0F, 0.0F, 0.0F, 5.3E-5F, 3.5E-5F, 1.05E-4F, 3.1E-5F, 8.8E-5F, 2.7E-5F, 2.7E-5F, 2.6E-5F, 3.5E-5F, 2.4E-5F, 3.4E-5F, 3.75E-4F, 2.5E-5F, 2.8E-5F, 2.0E-5F, 2.4E-5F, 2.8E-5F, 3.1E-5F, 5.9E-5F, 4.0E-5F, 3.0E-5F, 7.9E-5F, 3.7E-5F, 4.0E-5F, 2.3E-5F, 3.0E-5F, 2.7E-5F, 6.4E-5F, 2.0E-5F, 2.7E-5F, 2.5E-5F, 7.4E-5F, 1.9E-5F, 2.3E-5F, 2.1E-5F, 1.8E-5F, 1.7E-5F, 3.5E-5F, 2.1E-5F, 1.9E-5F, 2.5E-5F, 1.7E-5F, 3.7E-5F, 1.8E-5F, 1.8E-5F, 1.9E-5F, 2.2E-5F, 3.3E-5F, 3.2E-5F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F}; + mFirstByteStdDev = 0.020606F; + mFirstByteMean = 0.010638F; + mFirstByteWeight = 0.675261F; + mSecondByteFreq = new float[]{0.020256F, 0.003293F, 0.045811F, 0.01665F, 0.007066F, 0.004146F, 0.009229F, 0.007333F, 0.003296F, 0.005239F, 0.008282F, 0.003791F, 0.006116F, 0.003536F, 0.004024F, 0.016654F, 0.009334F, 0.005429F, 0.033392F, 0.006121F, 0.008983F, 0.002801F, 0.004221F, 0.010357F, 0.014695F, 0.077937F, 0.006314F, 0.00402F, 0.007331F, 0.00715F, 0.005341F, 0.009195F, 0.00535F, 0.005698F, 0.004472F, 0.007242F, 0.004039F, 0.011154F, 0.016184F, 0.004741F, 0.012814F, 0.007679F, 0.008045F, 0.016631F, 0.009451F, 0.016487F, 0.007287F, 0.012688F, 0.017421F, 0.013205F, 0.03148F, 0.003404F, 0.009149F, 0.008921F, 0.007514F, 0.008683F, 0.008203F, 0.031403F, 0.011733F, 0.015617F, 0.015306F, 0.004004F, 0.010899F, 0.009961F, 0.008388F, 0.01092F, 0.003925F, 0.008585F, 0.009108F, 0.015546F, 0.004659F, 0.006934F, 0.007023F, 0.020252F, 0.005387F, 0.024704F, 0.006963F, 0.002625F, 0.009512F, 0.002971F, 0.008233F, 0.01F, 0.011973F, 0.010553F, 0.005945F, 0.006349F, 0.009401F, 0.008577F, 0.008186F, 0.008159F, 0.005033F, 0.008714F, 0.010614F, 0.006554F}; + mSecondByteStdDev = 0.009909F; + mSecondByteMean = 0.010638F; + mSecondByteWeight = 0.324739F; + } + } + + /** + * + */ + public static class nsBIG5Verifier extends nsVerifier { + static int[] cclass; + static int[] states; + static int stFactor; + static String charset; + + public int[] cclass() { + return cclass; + } + + public int[] states() { + return states; + } + + public int stFactor() { + return stFactor; + } + + public String charset() { + return charset; + } + + public nsBIG5Verifier() { + cclass = new int[32]; + cclass[0] = 286331153; + cclass[1] = 1118481; + cclass[2] = 286331153; + cclass[3] = 286327057; + cclass[4] = 286331153; + cclass[5] = 286331153; + cclass[6] = 286331153; + cclass[7] = 286331153; + cclass[8] = 572662306; + cclass[9] = 572662306; + cclass[10] = 572662306; + cclass[11] = 572662306; + cclass[12] = 572662306; + cclass[13] = 572662306; + cclass[14] = 572662306; + cclass[15] = 304226850; + cclass[16] = 1145324612; + cclass[17] = 1145324612; + cclass[18] = 1145324612; + cclass[19] = 1145324612; + cclass[20] = 858993460; + cclass[21] = 858993459; + cclass[22] = 858993459; + cclass[23] = 858993459; + cclass[24] = 858993459; + cclass[25] = 858993459; + cclass[26] = 858993459; + cclass[27] = 858993459; + cclass[28] = 858993459; + cclass[29] = 858993459; + cclass[30] = 858993459; + cclass[31] = 53687091; + states = new int[3]; + states[0] = 286339073; + states[1] = 304226833; + states[2] = 1; + charset = "Big5"; + stFactor = 5; + } + + public boolean isUCS2() { + return false; + } + } + + /** + * + */ + public static class GB2312Statistics extends nsEUCStatistics { + static float[] mFirstByteFreq; + static float mFirstByteStdDev; + static float mFirstByteMean; + static float mFirstByteWeight; + static float[] mSecondByteFreq; + static float mSecondByteStdDev; + static float mSecondByteMean; + static float mSecondByteWeight; + + public float[] mFirstByteFreq() { + return mFirstByteFreq; + } + + public float mFirstByteStdDev() { + return mFirstByteStdDev; + } + + public float mFirstByteMean() { + return mFirstByteMean; + } + + public float mFirstByteWeight() { + return mFirstByteWeight; + } + + public float[] mSecondByteFreq() { + return mSecondByteFreq; + } + + public float mSecondByteStdDev() { + return mSecondByteStdDev; + } + + public float mSecondByteMean() { + return mSecondByteMean; + } + + public float mSecondByteWeight() { + return mSecondByteWeight; + } + + public GB2312Statistics() { + mFirstByteFreq = new float[]{0.011628F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.011628F, 0.012403F, 0.009302F, 0.003876F, 0.017829F, 0.037209F, 0.008527F, 0.010078F, 0.01938F, 0.054264F, 0.010078F, 0.041085F, 0.02093F, 0.018605F, 0.010078F, 0.013178F, 0.016279F, 0.006202F, 0.009302F, 0.017054F, 0.011628F, 0.008527F, 0.004651F, 0.006202F, 0.017829F, 0.024806F, 0.020155F, 0.013953F, 0.032558F, 0.035659F, 0.068217F, 0.010853F, 0.036434F, 0.117054F, 0.027907F, 0.100775F, 0.010078F, 0.017829F, 0.062016F, 0.012403F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.00155F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F}; + mFirstByteStdDev = 0.020081F; + mFirstByteMean = 0.010638F; + mFirstByteWeight = 0.586533F; + mSecondByteFreq = new float[]{0.006202F, 0.031008F, 0.005426F, 0.003101F, 0.00155F, 0.003101F, 0.082171F, 0.014729F, 0.006977F, 0.00155F, 0.013953F, 0.0F, 0.013953F, 0.010078F, 0.008527F, 0.006977F, 0.004651F, 0.003101F, 0.003101F, 0.003101F, 0.008527F, 0.003101F, 0.005426F, 0.005426F, 0.005426F, 0.003101F, 0.00155F, 0.006202F, 0.014729F, 0.010853F, 0.0F, 0.011628F, 0.0F, 0.031783F, 0.013953F, 0.030233F, 0.039535F, 0.008527F, 0.015504F, 0.0F, 0.003101F, 0.008527F, 0.016279F, 0.005426F, 0.00155F, 0.013953F, 0.013953F, 0.044961F, 0.003101F, 0.004651F, 0.006977F, 0.00155F, 0.005426F, 0.012403F, 0.00155F, 0.015504F, 0.0F, 0.006202F, 0.00155F, 0.0F, 0.007752F, 0.006977F, 0.00155F, 0.009302F, 0.011628F, 0.004651F, 0.010853F, 0.012403F, 0.017829F, 0.005426F, 0.024806F, 0.0F, 0.006202F, 0.0F, 0.082171F, 0.015504F, 0.004651F, 0.0F, 0.006977F, 0.004651F, 0.0F, 0.008527F, 0.012403F, 0.004651F, 0.003876F, 0.003101F, 0.022481F, 0.024031F, 0.00155F, 0.047287F, 0.009302F, 0.00155F, 0.005426F, 0.017054F}; + mSecondByteStdDev = 0.014156F; + mSecondByteMean = 0.010638F; + mSecondByteWeight = 0.413467F; + } + } + + /** + * + */ + public static class nsGB2312Verifier extends nsVerifier { + static int[] cclass; + static int[] states; + static int stFactor; + static String charset; + + public int[] cclass() { + return cclass; + } + + public int[] states() { + return states; + } + + public int stFactor() { + return stFactor; + } + + public String charset() { + return charset; + } + + public nsGB2312Verifier() { + cclass = new int[32]; + cclass[0] = 286331153; + cclass[1] = 1118481; + cclass[2] = 286331153; + cclass[3] = 286327057; + cclass[4] = 286331153; + cclass[5] = 286331153; + cclass[6] = 286331153; + cclass[7] = 286331153; + cclass[8] = 286331153; + cclass[9] = 286331153; + cclass[10] = 286331153; + cclass[11] = 286331153; + cclass[12] = 286331153; + cclass[13] = 286331153; + cclass[14] = 286331153; + cclass[15] = 286331153; + cclass[16] = 0; + cclass[17] = 0; + cclass[18] = 0; + cclass[19] = 0; + cclass[20] = 572662304; + cclass[21] = 858993442; + cclass[22] = 572662306; + cclass[23] = 572662306; + cclass[24] = 572662306; + cclass[25] = 572662306; + cclass[26] = 572662306; + cclass[27] = 572662306; + cclass[28] = 572662306; + cclass[29] = 572662306; + cclass[30] = 572662306; + cclass[31] = 35791394; + states = new int[2]; + states[0] = 286331649; + states[1] = 1122850; + charset = "GB2312"; + stFactor = 4; + } + + public boolean isUCS2() { + return false; + } + } + + /** + * + */ + public static class nsGB18030Verifier extends nsVerifier { + static int[] cclass; + static int[] states; + static int stFactor; + static String charset; + + public int[] cclass() { + return cclass; + } + + public int[] states() { + return states; + } + + public int stFactor() { + return stFactor; + } + + public String charset() { + return charset; + } + + public nsGB18030Verifier() { + cclass = new int[32]; + cclass[0] = 286331153; + cclass[1] = 1118481; + cclass[2] = 286331153; + cclass[3] = 286327057; + cclass[4] = 286331153; + cclass[5] = 286331153; + cclass[6] = 858993459; + cclass[7] = 286331187; + cclass[8] = 572662306; + cclass[9] = 572662306; + cclass[10] = 572662306; + cclass[11] = 572662306; + cclass[12] = 572662306; + cclass[13] = 572662306; + cclass[14] = 572662306; + cclass[15] = 1109533218; + cclass[16] = 1717986917; + cclass[17] = 1717986918; + cclass[18] = 1717986918; + cclass[19] = 1717986918; + cclass[20] = 1717986918; + cclass[21] = 1717986918; + cclass[22] = 1717986918; + cclass[23] = 1717986918; + cclass[24] = 1717986918; + cclass[25] = 1717986918; + cclass[26] = 1717986918; + cclass[27] = 1717986918; + cclass[28] = 1717986918; + cclass[29] = 1717986918; + cclass[30] = 1717986918; + cclass[31] = 107374182; + states = new int[6]; + states[0] = 318767105; + states[1] = 571543825; + states[2] = 17965602; + states[3] = 286326804; + states[4] = 303109393; + states[5] = 17; + charset = "GB18030"; + stFactor = 7; + } + + public boolean isUCS2() { + return false; + } + } + + /** + * + */ + public static class nsISO2022CNVerifier extends nsVerifier { + static int[] cclass; + static int[] states; + static int stFactor; + static String charset; + + public int[] cclass() { + return cclass; + } + + public int[] states() { + return states; + } + + public int stFactor() { + return stFactor; + } + + public String charset() { + return charset; + } + + public nsISO2022CNVerifier() { + cclass = new int[32]; + cclass[0] = 2; + cclass[1] = 0; + cclass[2] = 0; + cclass[3] = 4096; + cclass[4] = 0; + cclass[5] = 48; + cclass[6] = 0; + cclass[7] = 0; + cclass[8] = 16384; + cclass[9] = 0; + cclass[10] = 0; + cclass[11] = 0; + cclass[12] = 0; + cclass[13] = 0; + cclass[14] = 0; + cclass[15] = 0; + cclass[16] = 572662306; + cclass[17] = 572662306; + cclass[18] = 572662306; + cclass[19] = 572662306; + cclass[20] = 572662306; + cclass[21] = 572662306; + cclass[22] = 572662306; + cclass[23] = 572662306; + cclass[24] = 572662306; + cclass[25] = 572662306; + cclass[26] = 572662306; + cclass[27] = 572662306; + cclass[28] = 572662306; + cclass[29] = 572662306; + cclass[30] = 572662306; + cclass[31] = 572662306; + states = new int[8]; + states[0] = 304; + states[1] = 286331152; + states[2] = 572662289; + states[3] = 336663074; + states[4] = 286335249; + states[5] = 286331237; + states[6] = 286335249; + states[7] = 18944273; + charset = "ISO-2022-CN"; + stFactor = 9; + } + + public boolean isUCS2() { + return false; + } + } + + /** + * + */ + public static class nsISO2022JPVerifier extends nsVerifier { + static int[] cclass; + static int[] states; + static int stFactor; + static String charset; + + public int[] cclass() { + return cclass; + } + + public int[] states() { + return states; + } + + public int stFactor() { + return stFactor; + } + + public String charset() { + return charset; + } + + public nsISO2022JPVerifier() { + cclass = new int[32]; + cclass[0] = 2; + cclass[1] = 570425344; + cclass[2] = 0; + cclass[3] = 4096; + cclass[4] = 458752; + cclass[5] = 3; + cclass[6] = 0; + cclass[7] = 0; + cclass[8] = 1030; + cclass[9] = 1280; + cclass[10] = 0; + cclass[11] = 0; + cclass[12] = 0; + cclass[13] = 0; + cclass[14] = 0; + cclass[15] = 0; + cclass[16] = 572662306; + cclass[17] = 572662306; + cclass[18] = 572662306; + cclass[19] = 572662306; + cclass[20] = 572662306; + cclass[21] = 572662306; + cclass[22] = 572662306; + cclass[23] = 572662306; + cclass[24] = 572662306; + cclass[25] = 572662306; + cclass[26] = 572662306; + cclass[27] = 572662306; + cclass[28] = 572662306; + cclass[29] = 572662306; + cclass[30] = 572662306; + cclass[31] = 572662306; + states = new int[6]; + states[0] = 304; + states[1] = 286331153; + states[2] = 572662306; + states[3] = 1091653905; + states[4] = 303173905; + states[5] = 287445265; + charset = "ISO-2022-JP"; + stFactor = 8; + } + + public boolean isUCS2() { + return false; + } + } + + /** + * + */ + public static class nsISO2022KRVerifier extends nsVerifier { + static int[] cclass; + static int[] states; + static int stFactor; + static String charset; + + public int[] cclass() { + return cclass; + } + + public int[] states() { + return states; + } + + public int stFactor() { + return stFactor; + } + + public String charset() { + return charset; + } + + public nsISO2022KRVerifier() { + cclass = new int[32]; + cclass[0] = 2; + cclass[1] = 0; + cclass[2] = 0; + cclass[3] = 4096; + cclass[4] = 196608; + cclass[5] = 64; + cclass[6] = 0; + cclass[7] = 0; + cclass[8] = 20480; + cclass[9] = 0; + cclass[10] = 0; + cclass[11] = 0; + cclass[12] = 0; + cclass[13] = 0; + cclass[14] = 0; + cclass[15] = 0; + cclass[16] = 572662306; + cclass[17] = 572662306; + cclass[18] = 572662306; + cclass[19] = 572662306; + cclass[20] = 572662306; + cclass[21] = 572662306; + cclass[22] = 572662306; + cclass[23] = 572662306; + cclass[24] = 572662306; + cclass[25] = 572662306; + cclass[26] = 572662306; + cclass[27] = 572662306; + cclass[28] = 572662306; + cclass[29] = 572662306; + cclass[30] = 572662306; + cclass[31] = 572662306; + states = new int[5]; + states[0] = 285212976; + states[1] = 572657937; + states[2] = 289476898; + states[3] = 286593297; + states[4] = 8465; + charset = "ISO-2022-KR"; + stFactor = 6; + } + + public boolean isUCS2() { + return false; + } + } + + /** + * + */ + public static class nsUCS2BEVerifier extends nsVerifier { + static int[] cclass; + static int[] states; + static int stFactor; + static String charset; + + public int[] cclass() { + return cclass; + } + + public int[] states() { + return states; + } + + public int stFactor() { + return stFactor; + } + + public String charset() { + return charset; + } + + public nsUCS2BEVerifier() { + cclass = new int[32]; + cclass[0] = 0; + cclass[1] = 2097408; + cclass[2] = 0; + cclass[3] = 12288; + cclass[4] = 0; + cclass[5] = 3355440; + cclass[6] = 0; + cclass[7] = 0; + cclass[8] = 0; + cclass[9] = 0; + cclass[10] = 0; + cclass[11] = 0; + cclass[12] = 0; + cclass[13] = 0; + cclass[14] = 0; + cclass[15] = 0; + cclass[16] = 0; + cclass[17] = 0; + cclass[18] = 0; + cclass[19] = 0; + cclass[20] = 0; + cclass[21] = 0; + cclass[22] = 0; + cclass[23] = 0; + cclass[24] = 0; + cclass[25] = 0; + cclass[26] = 0; + cclass[27] = 0; + cclass[28] = 0; + cclass[29] = 0; + cclass[30] = 0; + cclass[31] = 1409286144; + states = new int[7]; + states[0] = 288626549; + states[1] = 572657937; + states[2] = 291923490; + states[3] = 1713792614; + states[4] = 393569894; + states[5] = 1717659269; + states[6] = 1140326; + charset = "UTF-16BE"; + stFactor = 6; + } + + public boolean isUCS2() { + return true; + } + } + + /** + * + */ + public static class nsUCS2LEVerifier extends nsVerifier { + static int[] cclass; + static int[] states; + static int stFactor; + static String charset; + + public int[] cclass() { + return cclass; + } + + public int[] states() { + return states; + } + + public int stFactor() { + return stFactor; + } + + public String charset() { + return charset; + } + + public nsUCS2LEVerifier() { + cclass = new int[32]; + cclass[0] = 0; + cclass[1] = 2097408; + cclass[2] = 0; + cclass[3] = 12288; + cclass[4] = 0; + cclass[5] = 3355440; + cclass[6] = 0; + cclass[7] = 0; + cclass[8] = 0; + cclass[9] = 0; + cclass[10] = 0; + cclass[11] = 0; + cclass[12] = 0; + cclass[13] = 0; + cclass[14] = 0; + cclass[15] = 0; + cclass[16] = 0; + cclass[17] = 0; + cclass[18] = 0; + cclass[19] = 0; + cclass[20] = 0; + cclass[21] = 0; + cclass[22] = 0; + cclass[23] = 0; + cclass[24] = 0; + cclass[25] = 0; + cclass[26] = 0; + cclass[27] = 0; + cclass[28] = 0; + cclass[29] = 0; + cclass[30] = 0; + cclass[31] = 1409286144; + states = new int[7]; + states[0] = 288647014; + states[1] = 572657937; + states[2] = 303387938; + states[3] = 1712657749; + states[4] = 357927015; + states[5] = 1427182933; + states[6] = 1381717; + charset = "UTF-16LE"; + stFactor = 6; + } + + public boolean isUCS2() { + return true; + } + } + + /** + * + */ + public static class nsCP1252Verifier extends nsVerifier { + static int[] cclass; + static int[] states; + static int stFactor; + static String charset; + + public int[] cclass() { + return cclass; + } + + public int[] states() { + return states; + } + + public int stFactor() { + return stFactor; + } + + public String charset() { + return charset; + } + + public nsCP1252Verifier() { + cclass = new int[32]; + cclass[0] = 572662305; + cclass[1] = 2236962; + cclass[2] = 572662306; + cclass[3] = 572654114; + cclass[4] = 572662306; + cclass[5] = 572662306; + cclass[6] = 572662306; + cclass[7] = 572662306; + cclass[8] = 572662306; + cclass[9] = 572662306; + cclass[10] = 572662306; + cclass[11] = 572662306; + cclass[12] = 572662306; + cclass[13] = 572662306; + cclass[14] = 572662306; + cclass[15] = 572662306; + cclass[16] = 572662274; + cclass[17] = 16851234; + cclass[18] = 572662304; + cclass[19] = 285286690; + cclass[20] = 572662306; + cclass[21] = 572662306; + cclass[22] = 572662306; + cclass[23] = 572662306; + cclass[24] = 286331153; + cclass[25] = 286331153; + cclass[26] = 554766609; + cclass[27] = 286331153; + cclass[28] = 286331153; + cclass[29] = 286331153; + cclass[30] = 554766609; + cclass[31] = 286331153; + states = new int[3]; + states[0] = 571543601; + states[1] = 340853778; + states[2] = 65; + charset = "windows-1252"; + stFactor = 3; + } + + public boolean isUCS2() { + return false; + } + } + + /** + * + */ + public static class nsHZVerifier extends nsVerifier { + static int[] cclass; + static int[] states; + static int stFactor; + static String charset; + + public int[] cclass() { + return cclass; + } + + public int[] states() { + return states; + } + + public int stFactor() { + return stFactor; + } + + public String charset() { + return charset; + } + + public nsHZVerifier() { + cclass = new int[32]; + cclass[0] = 1; + cclass[1] = 0; + cclass[2] = 0; + cclass[3] = 4096; + cclass[4] = 0; + cclass[5] = 0; + cclass[6] = 0; + cclass[7] = 0; + cclass[8] = 0; + cclass[9] = 0; + cclass[10] = 0; + cclass[11] = 0; + cclass[12] = 0; + cclass[13] = 0; + cclass[14] = 0; + cclass[15] = 38813696; + cclass[16] = 286331153; + cclass[17] = 286331153; + cclass[18] = 286331153; + cclass[19] = 286331153; + cclass[20] = 286331153; + cclass[21] = 286331153; + cclass[22] = 286331153; + cclass[23] = 286331153; + cclass[24] = 286331153; + cclass[25] = 286331153; + cclass[26] = 286331153; + cclass[27] = 286331153; + cclass[28] = 286331153; + cclass[29] = 286331153; + cclass[30] = 286331153; + cclass[31] = 286331153; + states = new int[6]; + states[0] = 285213456; + states[1] = 572657937; + states[2] = 335548706; + states[3] = 341120533; + states[4] = 336872468; + states[5] = 36; + charset = "HZ-GB-2312"; + stFactor = 6; + } + + public boolean isUCS2() { + return false; + } + } + + /** + * + */ + public static class nsSJISVerifier extends nsVerifier { + static int[] cclass; + static int[] states; + static int stFactor; + static String charset; + + public int[] cclass() { + return cclass; + } + + public int[] states() { + return states; + } + + public int stFactor() { + return stFactor; + } + + public String charset() { + return charset; + } + + public nsSJISVerifier() { + cclass = new int[32]; + cclass[0] = 286331152; + cclass[1] = 1118481; + cclass[2] = 286331153; + cclass[3] = 286327057; + cclass[4] = 286331153; + cclass[5] = 286331153; + cclass[6] = 286331153; + cclass[7] = 286331153; + cclass[8] = 572662306; + cclass[9] = 572662306; + cclass[10] = 572662306; + cclass[11] = 572662306; + cclass[12] = 572662306; + cclass[13] = 572662306; + cclass[14] = 572662306; + cclass[15] = 304226850; + cclass[16] = 858993459; + cclass[17] = 858993459; + cclass[18] = 858993459; + cclass[19] = 858993459; + cclass[20] = 572662308; + cclass[21] = 572662306; + cclass[22] = 572662306; + cclass[23] = 572662306; + cclass[24] = 572662306; + cclass[25] = 572662306; + cclass[26] = 572662306; + cclass[27] = 572662306; + cclass[28] = 858993459; + cclass[29] = 1145393971; + cclass[30] = 1145324612; + cclass[31] = 279620; + states = new int[3]; + states[0] = 286339073; + states[1] = 572657937; + states[2] = 4386; + charset = "Shift_JIS"; + stFactor = 6; + } + + public boolean isUCS2() { + return false; + } + } + + /** + * + */ + public static class nsUTF8Verifier extends nsVerifier { + static int[] cclass; + static int[] states; + static int stFactor; + static String charset; + + public int[] cclass() { + return cclass; + } + + public int[] states() { + return states; + } + + public int stFactor() { + return stFactor; + } + + public String charset() { + return charset; + } + + public nsUTF8Verifier() { + cclass = new int[32]; + cclass[0] = 286331153; + cclass[1] = 1118481; + cclass[2] = 286331153; + cclass[3] = 286327057; + cclass[4] = 286331153; + cclass[5] = 286331153; + cclass[6] = 286331153; + cclass[7] = 286331153; + cclass[8] = 286331153; + cclass[9] = 286331153; + cclass[10] = 286331153; + cclass[11] = 286331153; + cclass[12] = 286331153; + cclass[13] = 286331153; + cclass[14] = 286331153; + cclass[15] = 286331153; + cclass[16] = 858989090; + cclass[17] = 1145324612; + cclass[18] = 1145324612; + cclass[19] = 1145324612; + cclass[20] = 1431655765; + cclass[21] = 1431655765; + cclass[22] = 1431655765; + cclass[23] = 1431655765; + cclass[24] = 1717986816; + cclass[25] = 1717986918; + cclass[26] = 1717986918; + cclass[27] = 1717986918; + cclass[28] = -2004318073; + cclass[29] = -2003269496; + cclass[30] = -1145324614; + cclass[31] = 16702940; + states = new int[26]; + states[0] = -1408167679; + states[1] = 878082233; + states[2] = 286331153; + states[3] = 286331153; + states[4] = 572662306; + states[5] = 572662306; + states[6] = 290805009; + states[7] = 286331153; + states[8] = 290803985; + states[9] = 286331153; + states[10] = 293041937; + states[11] = 286331153; + states[12] = 293015825; + states[13] = 286331153; + states[14] = 295278865; + states[15] = 286331153; + states[16] = 294719761; + states[17] = 286331153; + states[18] = 298634257; + states[19] = 286331153; + states[20] = 297865489; + states[21] = 286331153; + states[22] = 287099921; + states[23] = 286331153; + states[24] = 285212689; + states[25] = 286331153; + charset = "UTF-8"; + stFactor = 16; + } + + public boolean isUCS2() { + return false; + } + } + +} diff --git a/src/main/java/com/eleadmin/common/core/utils/JSONUtil.java b/src/main/java/com/eleadmin/common/core/utils/JSONUtil.java new file mode 100644 index 0000000..7fa3f0f --- /dev/null +++ b/src/main/java/com/eleadmin/common/core/utils/JSONUtil.java @@ -0,0 +1,69 @@ +package com.eleadmin.common.core.utils; + +import cn.hutool.core.util.StrUtil; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectWriter; + +/** + * JSON解析工具类 + * + * @author EleAdmin + * @since 2017-06-10 10:10:39 + */ +public class JSONUtil { + private static final ObjectMapper objectMapper = new ObjectMapper(); + private static final ObjectWriter objectWriter = objectMapper.writerWithDefaultPrettyPrinter(); + + /** + * 对象转json字符串 + * + * @param value 对象 + * @return String + */ + public static String toJSONString(Object value) { + return toJSONString(value, false); + } + + /** + * 对象转json字符串 + * + * @param value 对象 + * @param pretty 是否格式化输出 + * @return String + */ + public static String toJSONString(Object value, boolean pretty) { + if (value != null) { + if (value instanceof String) { + return (String) value; + } + try { + if (pretty) { + return objectWriter.writeValueAsString(value); + } + return objectMapper.writeValueAsString(value); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + + /** + * json字符串转对象 + * + * @param json String + * @param clazz Class + * @return T + */ + public static T parseObject(String json, Class clazz) { + if (StrUtil.isNotBlank(json) && clazz != null) { + try { + return objectMapper.readValue(json, clazz); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + +} diff --git a/src/main/java/com/eleadmin/common/core/utils/OpenOfficeUtil.java b/src/main/java/com/eleadmin/common/core/utils/OpenOfficeUtil.java new file mode 100644 index 0000000..f54ebb5 --- /dev/null +++ b/src/main/java/com/eleadmin/common/core/utils/OpenOfficeUtil.java @@ -0,0 +1,124 @@ +package com.eleadmin.common.core.utils; + +import cn.hutool.core.util.StrUtil; +import org.artofsolving.jodconverter.OfficeDocumentConverter; +import org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration; +import org.artofsolving.jodconverter.office.OfficeManager; + +import java.io.File; +import java.util.Arrays; +import java.util.Base64; + +/** + * OpenOfficeUtil + * + * @author EleAdmin + * @since 2018-12-14 08:38:19 + */ +public class OpenOfficeUtil { + // 支持转换pdf的文件后缀列表 + private static final String[] CAN_CONVERTER_FILES = new String[]{ + "doc", "docx", "xls", "xlsx", "ppt", "pptx" + }; + + /** + * 文件转pdf + * + * @param filePath 源文件路径 + * @param outDir 输出目录 + * @param officeHome OpenOffice安装路径 + * @return File + */ + public static File converterToPDF(String filePath, String outDir, String officeHome) { + return converterToPDF(filePath, outDir, officeHome, true); + } + + /** + * 文件转pdf + * + * @param filePath 源文件路径 + * @param outDir 输出目录 + * @param officeHome OpenOffice安装路径 + * @param cache 是否使用上次转换过的文件 + * @return File + */ + public static File converterToPDF(String filePath, String outDir, String officeHome, boolean cache) { + if (StrUtil.isBlank(filePath)) { + return null; + } + File srcFile = new File(filePath); + if (!srcFile.exists()) { + return null; + } + // 是否转换过 + String outPath = Base64.getEncoder().encodeToString(filePath.getBytes()) + .replace("/", "-").replace("+", "-"); + File outFile = new File(outDir, outPath + ".pdf"); + if (cache && outFile.exists()) { + return outFile; + } + // 转换 + OfficeManager officeManager = null; + try { + officeManager = getOfficeManager(officeHome); + OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager); + return converterFile(srcFile, outFile, converter); + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (officeManager != null) { + officeManager.stop(); + } + } + return null; + } + + /** + * 转换文件 + * + * @param inFile 源文件 + * @param outFile 输出文件 + * @param converter OfficeDocumentConverter + * @return File + */ + public static File converterFile(File inFile, File outFile, OfficeDocumentConverter converter) { + if (!outFile.getParentFile().exists()) { + if (!outFile.getParentFile().mkdirs()) { + return outFile; + } + } + converter.convert(inFile, outFile); + return outFile; + } + + /** + * 判断文件后缀是否可以转换pdf + * + * @param path 文件路径 + * @return boolean + */ + public static boolean canConverter(String path) { + try { + String suffix = path.substring(path.lastIndexOf(".") + 1); + return Arrays.asList(CAN_CONVERTER_FILES).contains(suffix); + } catch (Exception e) { + return false; + } + } + + /** + * 连接并启动OpenOffice + * + * @param officeHome OpenOffice安装路径 + * @return OfficeManager + */ + public static OfficeManager getOfficeManager(String officeHome) { + if (officeHome == null || officeHome.trim().isEmpty()) return null; + DefaultOfficeManagerConfiguration config = new DefaultOfficeManagerConfiguration(); + config.setOfficeHome(officeHome); // 设置OpenOffice安装目录 + OfficeManager officeManager = config.buildOfficeManager(); + officeManager.start(); // 启动OpenOffice服务 + return officeManager; + } + +} diff --git a/src/main/java/com/eleadmin/common/core/web/ApiResult.java b/src/main/java/com/eleadmin/common/core/web/ApiResult.java new file mode 100644 index 0000000..f95a55d --- /dev/null +++ b/src/main/java/com/eleadmin/common/core/web/ApiResult.java @@ -0,0 +1,88 @@ +package com.eleadmin.common.core.web; + +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModelProperty; + +import java.io.Serializable; + +/** + * 返回结果 + * + * @author EleAdmin + * @since 2017-06-10 10:10:50 + */ +@JsonInclude(JsonInclude.Include.NON_NULL) +public class ApiResult implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "状态码") + private Integer code; + + @ApiModelProperty(value = "状态信息") + private String message; + + @ApiModelProperty(value = "返回数据") + private T data; + + @ApiModelProperty(value = "错误信息") + private String error; + + public ApiResult() { + } + + public ApiResult(Integer code) { + this(code, null); + } + + public ApiResult(Integer code, String message) { + this(code, message, null); + } + + public ApiResult(Integer code, String message, T data) { + this(code, message, data, null); + } + + public ApiResult(Integer code, String message, T data, String error) { + setCode(code); + setMessage(message); + setData(data); + setError(error); + } + + public Integer getCode() { + return this.code; + } + + public ApiResult setCode(Integer code) { + this.code = code; + return this; + } + + public String getMessage() { + return this.message; + } + + public ApiResult setMessage(String message) { + this.message = message; + return this; + } + + public T getData() { + return this.data; + } + + public ApiResult setData(T data) { + this.data = data; + return this; + } + + public String getError() { + return this.error; + } + + public ApiResult setError(String error) { + this.error = error; + return this; + } + +} diff --git a/src/main/java/com/eleadmin/common/core/web/BaseController.java b/src/main/java/com/eleadmin/common/core/web/BaseController.java new file mode 100644 index 0000000..ef0da8d --- /dev/null +++ b/src/main/java/com/eleadmin/common/core/web/BaseController.java @@ -0,0 +1,160 @@ +package com.eleadmin.common.core.web; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.eleadmin.common.core.Constants; +import com.eleadmin.common.system.entity.User; +import org.springframework.beans.propertyeditors.StringTrimmerEditor; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.web.bind.WebDataBinder; +import org.springframework.web.bind.annotation.InitBinder; + +import java.util.List; + +/** + * Controller基类 + * + * @author EleAdmin + * @since 2017-06-10 10:10:19 + */ +public class BaseController { + + /** + * 获取当前登录的user + * + * @return User + */ + public User getLoginUser() { + try { + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + if (authentication != null) { + Object object = authentication.getPrincipal(); + if (object instanceof User) { + return (User) object; + } + } + } catch (Exception e) { + System.out.println(e.getMessage()); + } + return null; + } + + /** + * 获取当前登录的userId + * + * @return userId + */ + public Integer getLoginUserId() { + User loginUser = getLoginUser(); + return loginUser == null ? null : loginUser.getUserId(); + } + + /** + * 返回成功 + * + * @return ApiResult + */ + public ApiResult success() { + return new ApiResult<>(Constants.RESULT_OK_CODE, Constants.RESULT_OK_MSG); + } + + /** + * 返回成功 + * + * @param message 状态信息 + * @return ApiResult + */ + public ApiResult success(String message) { + return success().setMessage(message); + } + + /** + * 返回成功 + * + * @param data 返回数据 + * @return ApiResult + */ + public ApiResult success(T data) { + return new ApiResult<>(Constants.RESULT_OK_CODE, Constants.RESULT_OK_MSG, data); + } + + /** + * 返回成功 + * + * @param message 状态信息 + * @return ApiResult + */ + public ApiResult success(String message, T data) { + return success(data).setMessage(message); + } + + /** + * 返回分页查询数据 + * + * @param list 当前页数据 + * @param count 总数量 + * @return ApiResult + */ + public ApiResult> success(List list, Long count) { + return success(new PageResult<>(list, count)); + } + + /** + * 返回分页查询数据 + * + * @param iPage IPage + * @return ApiResult + */ + public ApiResult> success(IPage iPage) { + return success(iPage.getRecords(), iPage.getTotal()); + } + + /** + * 返回失败 + * + * @return ApiResult + */ + public ApiResult fail() { + return new ApiResult<>(Constants.RESULT_ERROR_CODE, Constants.RESULT_ERROR_MSG); + } + + /** + * 返回失败 + * + * @param message 状态信息 + * @return ApiResult + */ + public ApiResult fail(String message) { + return fail().setMessage(message); + } + + /** + * 返回失败 + * + * @param data 返回数据 + * @return ApiResult + */ + public ApiResult fail(T data) { + return fail(Constants.RESULT_ERROR_MSG, data); + } + + /** + * 返回失败 + * + * @param message 状态信息 + * @param data 返回数据 + * @return ApiResult + */ + public ApiResult fail(String message, T data) { + return new ApiResult<>(Constants.RESULT_ERROR_CODE, message, data); + } + + /** + * 请求参数的空字符串转为null + */ + @InitBinder + public void initBinder(WebDataBinder binder) { + binder.registerCustomEditor(String.class, new StringTrimmerEditor(true)); + } + +} diff --git a/src/main/java/com/eleadmin/common/core/web/BaseParam.java b/src/main/java/com/eleadmin/common/core/web/BaseParam.java new file mode 100644 index 0000000..03f3156 --- /dev/null +++ b/src/main/java/com/eleadmin/common/core/web/BaseParam.java @@ -0,0 +1,59 @@ +package com.eleadmin.common.core.web; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.eleadmin.common.core.annotation.QueryField; +import com.eleadmin.common.core.annotation.QueryType; +import com.eleadmin.common.core.utils.CommonUtil; +import lombok.Data; +import io.swagger.annotations.ApiModelProperty; + +import java.io.Serializable; +import java.util.List; + +/** + * 查询参数基本字段 + * + * @author EleAdmin + * @since 2021-08-26 22:14:43 + */ +@Data +public class BaseParam implements Serializable { + private static final long serialVersionUID = 1L; + + @TableField(exist = false) + @ApiModelProperty("分页查询页码") + private Long page; + + @TableField(exist = false) + @ApiModelProperty("分页查询每页数量") + private Long limit; + + @TableField(exist = false) + @ApiModelProperty(value = "排序字段", notes = "排序字段或sql, 如果是sql则order字段无用, 如: `id asc, name desc`") + private String sort; + + @TableField(exist = false) + @ApiModelProperty(value = "排序方式", notes = "sort是字段名称时对应的排序方式, asc升序, desc降序") + private String order; + + @QueryField(value = "create_time", type = QueryType.GE) + @TableField(exist = false) + @ApiModelProperty("创建时间起始值") + private String createTimeStart; + + @QueryField(value = "create_time", type = QueryType.LE) + @TableField(exist = false) + @ApiModelProperty("创建时间结束值") + private String createTimeEnd; + + /** + * 获取集合中的第一条数据 + * + * @param records 集合 + * @return 第一条数据 + */ + public T getOne(List records) { + return CommonUtil.listGetOne(records); + } + +} diff --git a/src/main/java/com/eleadmin/common/core/web/BatchParam.java b/src/main/java/com/eleadmin/common/core/web/BatchParam.java new file mode 100644 index 0000000..ed9e83e --- /dev/null +++ b/src/main/java/com/eleadmin/common/core/web/BatchParam.java @@ -0,0 +1,57 @@ +package com.eleadmin.common.core.web; + +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.toolkit.support.SFunction; +import com.baomidou.mybatisplus.extension.service.IService; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * 批量修改通用参数 + * + * @author EleAdmin + * @since 2020-03-13 00:11:06 + */ +@Data +public class BatchParam implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "需要修改的数据id集合") + private List ids; + + @ApiModelProperty(value = "需要修改的字段和值") + private T data; + + /** + * 通用批量修改方法 + * + * @param service IService + * @param idField id字段名称 + * @return boolean + */ + public boolean update(IService service, String idField) { + if (this.data == null) { + return false; + } + return service.update(this.data, new UpdateWrapper().in(idField, this.ids)); + } + + /** + * 通用批量修改方法 + * + * @param service IService + * @param idField id字段名称 + * @return boolean + */ + public boolean update(IService service, SFunction idField) { + if (this.data == null) { + return false; + } + return service.update(this.data, new LambdaUpdateWrapper().in(idField, this.ids)); + } + +} diff --git a/src/main/java/com/eleadmin/common/core/web/ExistenceParam.java b/src/main/java/com/eleadmin/common/core/web/ExistenceParam.java new file mode 100644 index 0000000..a4f9586 --- /dev/null +++ b/src/main/java/com/eleadmin/common/core/web/ExistenceParam.java @@ -0,0 +1,96 @@ +package com.eleadmin.common.core.web; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.support.SFunction; +import com.baomidou.mybatisplus.extension.service.IService; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * 检查是否存在通用参数 + * + * @author EleAdmin + * @since 2021-09-07 22:24:39 + */ +@Data +public class ExistenceParam implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "检查的字段") + private String field; + + @ApiModelProperty(value = "字段的值") + private String value; + + @ApiModelProperty(value = "修改时的主键") + private Integer id; + + /** + * 检查是否存在 + * + * @param service IService + * @param idField 修改时的主键字段 + * @return boolean + */ + public boolean isExistence(IService service, String idField) { + return isExistence(service, idField, true); + } + + /** + * 检查是否存在 + * + * @param service IService + * @param idField 修改时的主键字段 + * @param isToUnderlineCase 是否需要把field转为下划线格式 + * @return boolean + */ + public boolean isExistence(IService service, String idField, boolean isToUnderlineCase) { + if (StrUtil.hasBlank(this.field, this.value)) { + return false; + } + String fieldName = isToUnderlineCase ? StrUtil.toUnderlineCase(field) : field; + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq(fieldName, value); + if (id != null) { + wrapper.ne(idField, id); + } + return service.count(wrapper) > 0; + } + + /** + * 检查是否存在 + * + * @param service IService + * @param idField 修改时的主键字段 + * @return boolean + */ + public boolean isExistence(IService service, SFunction idField) { + return isExistence(service, idField, true); + } + + /** + * 检查是否存在 + * + * @param service IService + * @param idField 修改时的主键字段 + * @param isToUnderlineCase 是否需要把field转为下划线格式 + * @return boolean + */ + public boolean isExistence(IService service, SFunction idField, boolean isToUnderlineCase) { + if (StrUtil.hasBlank(this.field, this.value)) { + return false; + } + String fieldName = isToUnderlineCase ? StrUtil.toUnderlineCase(field) : field; + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.apply(fieldName + " = {0}", value); + if (id != null) { + wrapper.ne(idField, id); + } + return service.count(wrapper) > 0; + } + +} diff --git a/src/main/java/com/eleadmin/common/core/web/PageParam.java b/src/main/java/com/eleadmin/common/core/web/PageParam.java new file mode 100644 index 0000000..90e1270 --- /dev/null +++ b/src/main/java/com/eleadmin/common/core/web/PageParam.java @@ -0,0 +1,343 @@ +package com.eleadmin.common.core.web; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.ReflectUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableLogic; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.OrderItem; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.eleadmin.common.core.Constants; +import com.eleadmin.common.core.annotation.QueryField; +import com.eleadmin.common.core.annotation.QueryType; +import com.eleadmin.common.core.utils.CommonUtil; + +import java.lang.reflect.Field; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * 分页、排序、搜索参数封装 + * + * @author EleAdmin + * @since 2019-04-26 10:34:35 + */ +public class PageParam extends Page { + private static final long serialVersionUID = 1L; + + /** + * 租户id字段名称 + */ + private static final String TENANT_ID_FIELD = "tenantId"; + + /** + * 查询条件 + */ + private final U where; + + /** + * 是否把字段名称驼峰转下划线 + */ + private final boolean isToUnderlineCase; + + public PageParam() { + this(null); + } + + public PageParam(U where) { + this(where, true); + } + + public PageParam(U where, boolean isToUnderlineCase) { + super(); + this.where = where; + this.isToUnderlineCase = isToUnderlineCase; + if (where != null) { + // 获取分页页码 + if (where.getPage() != null) { + setCurrent(where.getPage()); + } + // 获取分页每页数量 + if (where.getLimit() != null) { + setSize(where.getLimit()); + } + // 获取排序方式 + if (where.getSort() != null) { + if (sortIsSQL(where.getSort())) { + setOrders(parseOrderSQL(where.getSort())); + } else { + List orderItems = new ArrayList<>(); + String column = this.isToUnderlineCase ? StrUtil.toUnderlineCase(where.getSort()) : where.getSort(); + boolean asc = !Constants.ORDER_DESC_VALUE.equals(where.getOrder()); + orderItems.add(new OrderItem(column, asc)); + setOrders(orderItems); + } + } + } + } + + /** + * 排序字段是否是sql + */ + private boolean sortIsSQL(String sort) { + return sort != null && (sort.contains(",") || sort.trim().contains(" ")); + } + + /** + * 解析排序sql + */ + private List parseOrderSQL(String orderSQL) { + List orders = new ArrayList<>(); + if (StrUtil.isNotBlank(orderSQL)) { + for (String item : orderSQL.split(",")) { + String[] temp = item.trim().split(" "); + if (!temp[0].isEmpty()) { + String column = this.isToUnderlineCase ? StrUtil.toUnderlineCase(temp[0]) : temp[0]; + boolean asc = temp.length == 1 || !temp[temp.length - 1].equals(Constants.ORDER_DESC_VALUE); + orders.add(new OrderItem(column, asc)); + } + } + } + return orders; + } + + /** + * 设置默认排序方式 + * + * @param orderItems 排序方式 + * @return PageParam + */ + public PageParam setDefaultOrder(List orderItems) { + if (orders() == null || orders().size() == 0) { + setOrders(orderItems); + } + return this; + } + + /** + * 设置默认排序方式 + * + * @param orderSQL 排序方式 + * @return PageParam + */ + public PageParam setDefaultOrder(String orderSQL) { + setDefaultOrder(parseOrderSQL(orderSQL)); + return this; + } + + /** + * 获取查询条件 + * + * @param excludes 不包含的字段 + * @return QueryWrapper + */ + public QueryWrapper getWrapper(String... excludes) { + return buildWrapper(null, Arrays.asList(excludes)); + } + + /** + * 获取查询条件 + * + * @param columns 只包含的字段 + * @return QueryWrapper + */ + public QueryWrapper getWrapperWith(String... columns) { + return buildWrapper(Arrays.asList(columns), null); + } + + /** + * 构建QueryWrapper + * + * @param columns 包含的字段 + * @param excludes 排除的字段 + * @return QueryWrapper + */ + private QueryWrapper buildWrapper(List columns, List excludes) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + Map map = BeanUtil.beanToMap(where, false, true); + for (String fieldName : map.keySet()) { + Object fieldValue = map.get(fieldName); + Field field = ReflectUtil.getField(where.getClass(), fieldName); + + // 过滤不包含的字段 + if (columns != null && !columns.contains(fieldName)) { + continue; + } + + // 过滤排除的字段 + if (excludes != null && excludes.contains(fieldName)) { + continue; + } + + // 过滤逻辑删除字段 + if (field.getAnnotation(TableLogic.class) != null) { + continue; + } + + // 过滤租户id字段 + if (fieldName.equals(TENANT_ID_FIELD)) { + continue; + } + + // 获取注解指定的查询字段及查询方式 + QueryType queryType = QueryType.LIKE; + QueryField queryField = field.getAnnotation(QueryField.class); + if (queryField != null) { + if (StrUtil.isNotEmpty(queryField.value())) { + fieldName = queryField.value(); + } + if (queryField.type() != null) { + queryType = queryField.type(); + } + } else { + // 过滤非本表的字段 + TableField tableField = field.getAnnotation(TableField.class); + if (tableField != null && !tableField.exist()) { + continue; + } + } + + // 字段名驼峰转下划线 + if (this.isToUnderlineCase) { + fieldName = StrUtil.toUnderlineCase(fieldName); + } + + // + switch (queryType) { + case EQ: + queryWrapper.eq(fieldName, fieldValue); + break; + case NE: + queryWrapper.ne(fieldName, fieldValue); + break; + case GT: + queryWrapper.gt(fieldName, fieldValue); + break; + case GE: + queryWrapper.ge(fieldName, fieldValue); + break; + case LT: + queryWrapper.lt(fieldName, fieldValue); + break; + case LE: + queryWrapper.le(fieldName, fieldValue); + break; + case LIKE: + queryWrapper.like(fieldName, fieldValue); + break; + case NOT_LIKE: + queryWrapper.notLike(fieldName, fieldValue); + break; + case LIKE_LEFT: + queryWrapper.likeLeft(fieldName, fieldValue); + break; + case LIKE_RIGHT: + queryWrapper.likeRight(fieldName, fieldValue); + break; + case IS_NULL: + queryWrapper.isNull(fieldName); + break; + case IS_NOT_NULL: + queryWrapper.isNotNull(fieldName); + break; + case IN: + queryWrapper.in(fieldName, fieldValue); + break; + case NOT_IN: + queryWrapper.notIn(fieldName, fieldValue); + break; + case IN_STR: + if (fieldValue instanceof String) { + queryWrapper.in(fieldName, Arrays.asList(((String) fieldValue).split(","))); + } + break; + case NOT_IN_STR: + if (fieldValue instanceof String) { + queryWrapper.notIn(fieldName, Arrays.asList(((String) fieldValue).split(","))); + } + break; + } + } + return queryWrapper; + } + + /** + * 获取包含排序的查询条件 + * + * @return 包含排序的QueryWrapper + */ + public QueryWrapper getOrderWrapper() { + return getOrderWrapper(getWrapper()); + } + + /** + * 获取包含排序的查询条件 + * + * @param queryWrapper 不含排序的QueryWrapper + * @return 包含排序的QueryWrapper + */ + public QueryWrapper getOrderWrapper(QueryWrapper queryWrapper) { + if (queryWrapper == null) { + queryWrapper = new QueryWrapper<>(); + } + for (OrderItem orderItem : orders()) { + if (orderItem.isAsc()) { + queryWrapper.orderByAsc(orderItem.getColumn()); + } else { + queryWrapper.orderByDesc(orderItem.getColumn()); + } + } + return queryWrapper; + } + + /** + * 获取集合中的第一条数据 + * + * @param records 集合 + * @return 第一条数据 + */ + public T getOne(List records) { + return CommonUtil.listGetOne(records); + } + + /** + * 代码排序集合 + * + * @param records 集合 + * @return 排序后的集合 + */ + public List sortRecords(List records) { + List orderItems = orders(); + if (records == null || records.size() < 2 || orderItems == null || orderItems.size() == 0) { + return records; + } + Comparator comparator = null; + for (OrderItem item : orderItems) { + if (item.getColumn() == null) { + continue; + } + String field = this.isToUnderlineCase ? StrUtil.toCamelCase(item.getColumn()) : item.getColumn(); + Function keyExtractor = t -> ReflectUtil.getFieldValue(t, field); + if (comparator == null) { + if (item.isAsc()) { + comparator = Comparator.comparing(keyExtractor); + } else { + comparator = Comparator.comparing(keyExtractor, Comparator.reverseOrder()); + } + } else { + if (item.isAsc()) { + comparator.thenComparing(keyExtractor); + } else { + comparator.thenComparing(keyExtractor, Comparator.reverseOrder()); + } + } + } + if (comparator != null) { + return records.stream().sorted(comparator).collect(Collectors.toList()); + } + return records; + } + +} diff --git a/src/main/java/com/eleadmin/common/core/web/PageResult.java b/src/main/java/com/eleadmin/common/core/web/PageResult.java new file mode 100644 index 0000000..35f7b91 --- /dev/null +++ b/src/main/java/com/eleadmin/common/core/web/PageResult.java @@ -0,0 +1,51 @@ +package com.eleadmin.common.core.web; + +import io.swagger.annotations.ApiModelProperty; + +import java.io.Serializable; +import java.util.List; + +/** + * 分页查询返回结果 + * + * @author EleAdmin + * @since 2017-06-10 10:10:02 + */ +public class PageResult implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "当前页数据") + private List list; + + @ApiModelProperty(value = "总数量") + private Long count; + + public PageResult() { + } + + public PageResult(List list) { + this(list, null); + } + + public PageResult(List list, Long count) { + setList(list); + setCount(count); + } + + public List getList() { + return this.list; + } + + public void setList(List list) { + this.list = list; + } + + public Long getCount() { + return this.count; + } + + public void setCount(Long count) { + this.count = count; + } + +} diff --git a/src/main/java/com/eleadmin/common/system/.DS_Store b/src/main/java/com/eleadmin/common/system/.DS_Store new file mode 100644 index 0000000..c838bd6 Binary files /dev/null and b/src/main/java/com/eleadmin/common/system/.DS_Store differ diff --git a/src/main/java/com/eleadmin/common/system/controller/DictionaryController.java b/src/main/java/com/eleadmin/common/system/controller/DictionaryController.java new file mode 100644 index 0000000..08aede6 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/controller/DictionaryController.java @@ -0,0 +1,152 @@ +package com.eleadmin.common.system.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.eleadmin.common.core.annotation.OperationLog; +import com.eleadmin.common.core.utils.CommonUtil; +import com.eleadmin.common.core.web.*; +import com.eleadmin.common.system.entity.Dictionary; +import com.eleadmin.common.system.param.DictionaryParam; +import com.eleadmin.common.system.service.DictionaryService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 字典控制器 + * + * @author EleAdmin + * @since 2020-03-14 11:29:03 + */ +@Api(tags = "字典管理") +@RestController +@RequestMapping("/api/system/dictionary") +public class DictionaryController extends BaseController { + @Resource + private DictionaryService dictionaryService; + + @PreAuthorize("hasAuthority('sys:dict:list')") + @OperationLog + @ApiOperation("分页查询字典") + @GetMapping("/page") + public ApiResult> page(DictionaryParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("sort_number"); + return success(dictionaryService.page(page, page.getWrapper())); + } + + @PreAuthorize("hasAuthority('sys:dict:list')") + @OperationLog + @ApiOperation("查询全部字典") + @GetMapping() + public ApiResult> list(DictionaryParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("sort_number"); + return success(dictionaryService.list(page.getOrderWrapper())); + } + + @PreAuthorize("hasAuthority('sys:dict:list')") + @OperationLog + @ApiOperation("根据id查询字典") + @GetMapping("/{id}") + public ApiResult get(@PathVariable("id") Integer id) { + return success(dictionaryService.getById(id)); + } + + @PreAuthorize("hasAuthority('sys:dict:save')") + @ApiOperation("添加字典") + @PostMapping() + public ApiResult add(@RequestBody Dictionary dictionary) { + if (dictionaryService.count(new LambdaQueryWrapper() + .eq(Dictionary::getDictCode, dictionary.getDictCode())) > 0) { + return fail("字典标识已存在"); + } + if (dictionaryService.count(new LambdaQueryWrapper() + .eq(Dictionary::getDictName, dictionary.getDictName())) > 0) { + return fail("字典名称已存在"); + } + if (dictionaryService.save(dictionary)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @PreAuthorize("hasAuthority('sys:dict:update')") + @OperationLog + @ApiOperation("修改字典") + @PutMapping() + public ApiResult update(@RequestBody Dictionary dictionary) { + if (dictionaryService.count(new LambdaQueryWrapper() + .eq(Dictionary::getDictCode, dictionary.getDictCode()) + .ne(Dictionary::getDictId, dictionary.getDictId())) > 0) { + return fail("字典标识已存在"); + } + if (dictionaryService.count(new LambdaQueryWrapper() + .eq(Dictionary::getDictName, dictionary.getDictName()) + .ne(Dictionary::getDictId, dictionary.getDictId())) > 0) { + return fail("字典名称已存在"); + } + if (dictionaryService.updateById(dictionary)) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @PreAuthorize("hasAuthority('sys:dict:remove')") + @OperationLog + @ApiOperation("删除字典") + @DeleteMapping("/{id}") + public ApiResult remove(@PathVariable("id") Integer id) { + if (dictionaryService.removeById(id)) { + return success("删除成功"); + } + return fail("删除失败"); + } + + @PreAuthorize("hasAuthority('sys:dict:save')") + @OperationLog + @ApiOperation("批量添加字典") + @PostMapping("/batch") + public ApiResult> saveBatch(@RequestBody List list) { + if (CommonUtil.checkRepeat(list, Dictionary::getDictCode)) { + return fail("字典标识不能重复", null); + } + if (CommonUtil.checkRepeat(list, Dictionary::getDictName)) { + return fail("字典名称不能重复", null); + } + List codeExists = dictionaryService.list(new LambdaQueryWrapper() + .in(Dictionary::getDictCode, list.stream().map(Dictionary::getDictCode) + .collect(Collectors.toList()))); + if (codeExists.size() > 0) { + return fail("字典标识已存在", codeExists.stream().map(Dictionary::getDictCode) + .collect(Collectors.toList())).setCode(2); + } + List nameExists = dictionaryService.list(new LambdaQueryWrapper() + .in(Dictionary::getDictName, list.stream().map(Dictionary::getDictCode) + .collect(Collectors.toList()))); + if (nameExists.size() > 0) { + return fail("字典名称已存在", nameExists.stream().map(Dictionary::getDictName) + .collect(Collectors.toList())).setCode(3); + } + if (dictionaryService.saveBatch(list)) { + return success("添加成功", null); + } + return fail("添加失败", null); + } + + @PreAuthorize("hasAuthority('sys:dict:remove')") + @OperationLog + @ApiOperation("批量删除字典") + @DeleteMapping("/batch") + public ApiResult removeBatch(@RequestBody List ids) { + if (dictionaryService.removeByIds(ids)) { + return success("删除成功"); + } + return fail("删除失败"); + } + +} diff --git a/src/main/java/com/eleadmin/common/system/controller/DictionaryDataController.java b/src/main/java/com/eleadmin/common/system/controller/DictionaryDataController.java new file mode 100644 index 0000000..ad4e2a6 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/controller/DictionaryDataController.java @@ -0,0 +1,131 @@ +package com.eleadmin.common.system.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.eleadmin.common.core.annotation.OperationLog; +import com.eleadmin.common.core.web.*; +import com.eleadmin.common.system.entity.DictionaryData; +import com.eleadmin.common.system.param.DictionaryDataParam; +import com.eleadmin.common.system.service.DictionaryDataService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 字典数据控制器 + * + * @author EleAdmin + * @since 2020-03-14 11:29:04 + */ +@Api(tags = "字典数据管理") +@RestController +@RequestMapping("/api/system/dictionary-data") +public class DictionaryDataController extends BaseController { + @Resource + private DictionaryDataService dictionaryDataService; + + @PreAuthorize("hasAuthority('sys:dict:list')") + @OperationLog + @ApiOperation("分页查询字典数据") + @GetMapping("/page") + public ApiResult> page(DictionaryDataParam param) { + return success(dictionaryDataService.pageRel(param)); + } + + @PreAuthorize("hasAuthority('sys:dict:list')") + @OperationLog + @ApiOperation("查询全部字典数据") + @GetMapping() + public ApiResult> list(DictionaryDataParam param) { + return success(dictionaryDataService.listRel(param)); + } + + @PreAuthorize("hasAuthority('sys:dict:list')") + @OperationLog + @ApiOperation("根据id查询字典数据") + @GetMapping("/{id}") + public ApiResult get(@PathVariable("id") Integer id) { + return success(dictionaryDataService.getByIdRel(id)); + } + + @PreAuthorize("hasAuthority('sys:dict:save')") + @OperationLog + @ApiOperation("添加字典数据") + @PostMapping() + public ApiResult add(@RequestBody DictionaryData dictionaryData) { + if (dictionaryDataService.count(new LambdaQueryWrapper() + .eq(DictionaryData::getDictId, dictionaryData.getDictId()) + .eq(DictionaryData::getDictDataName, dictionaryData.getDictDataName())) > 0) { + return fail("字典数据名称已存在"); + } + if (dictionaryDataService.count(new LambdaQueryWrapper() + .eq(DictionaryData::getDictId, dictionaryData.getDictId()) + .eq(DictionaryData::getDictDataCode, dictionaryData.getDictDataCode())) > 0) { + return fail("字典数据标识已存在"); + } + if (dictionaryDataService.save(dictionaryData)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @PreAuthorize("hasAuthority('sys:dict:update')") + @OperationLog + @ApiOperation("修改字典数据") + @PutMapping() + public ApiResult update(@RequestBody DictionaryData dictionaryData) { + if (dictionaryDataService.count(new LambdaQueryWrapper() + .eq(DictionaryData::getDictId, dictionaryData.getDictId()) + .eq(DictionaryData::getDictDataName, dictionaryData.getDictDataName()) + .ne(DictionaryData::getDictDataId, dictionaryData.getDictDataId())) > 0) { + return fail("字典数据名称已存在"); + } + if (dictionaryDataService.count(new LambdaQueryWrapper() + .eq(DictionaryData::getDictId, dictionaryData.getDictId()) + .eq(DictionaryData::getDictDataCode, dictionaryData.getDictDataCode()) + .ne(DictionaryData::getDictDataId, dictionaryData.getDictDataId())) > 0) { + return fail("字典数据标识已存在"); + } + if (dictionaryDataService.updateById(dictionaryData)) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @PreAuthorize("hasAuthority('sys:dict:remove')") + @OperationLog + @ApiOperation("删除字典数据") + @DeleteMapping("/{id}") + public ApiResult remove(@PathVariable("id") Integer id) { + if (dictionaryDataService.removeById(id)) { + return success("删除成功"); + } + return fail("删除失败"); + } + + @PreAuthorize("hasAuthority('sys:dict:save')") + @OperationLog + @ApiOperation("批量添加字典数据") + @PostMapping("/batch") + public ApiResult saveBatch(@RequestBody List dictDataList) { + if (dictionaryDataService.saveBatch(dictDataList)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @PreAuthorize("hasAuthority('sys:dict:remove')") + @OperationLog + @ApiOperation("批量删除字典数据") + @DeleteMapping("/batch") + public ApiResult removeBatch(@RequestBody List ids) { + if (dictionaryDataService.removeByIds(ids)) { + return success("删除成功"); + } + return fail("删除失败"); + } + +} diff --git a/src/main/java/com/eleadmin/common/system/controller/EmailController.java b/src/main/java/com/eleadmin/common/system/controller/EmailController.java new file mode 100644 index 0000000..3346fa2 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/controller/EmailController.java @@ -0,0 +1,49 @@ +package com.eleadmin.common.system.controller; + +import com.eleadmin.common.core.annotation.OperationLog; +import com.eleadmin.common.core.web.ApiResult; +import com.eleadmin.common.core.web.BaseController; +import com.eleadmin.common.system.entity.EmailRecord; +import com.eleadmin.common.system.service.EmailRecordService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.mail.MessagingException; + +/** + * 邮件功能控制器 + * + * @author EleAdmin + * @since 2020-03-21 00:37:11 + */ +@Api(tags = "邮件功能") +@RestController +@RequestMapping("/api/system/email") +public class EmailController extends BaseController { + @Resource + private EmailRecordService emailRecordService; + + @PreAuthorize("hasAuthority('sys:email:send')") + @OperationLog + @ApiOperation("发送邮件") + @PostMapping() + public ApiResult send(@RequestBody EmailRecord emailRecord) { + try { + emailRecordService.sendFullTextEmail(emailRecord.getTitle(), emailRecord.getContent(), + emailRecord.getReceiver().split(",")); + emailRecord.setCreateUserId(getLoginUserId()); + emailRecordService.save(emailRecord); + return success("发送成功"); + } catch (MessagingException e) { + e.printStackTrace(); + } + return fail("发送失败"); + } + +} diff --git a/src/main/java/com/eleadmin/common/system/controller/FileController.java b/src/main/java/com/eleadmin/common/system/controller/FileController.java new file mode 100644 index 0000000..53f400c --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/controller/FileController.java @@ -0,0 +1,250 @@ +package com.eleadmin.common.system.controller; + +import cn.hutool.core.util.StrUtil; +import com.eleadmin.common.core.annotation.OperationLog; +import com.eleadmin.common.core.config.ConfigProperties; +import com.eleadmin.common.core.utils.FileServerUtil; +import com.eleadmin.common.core.web.ApiResult; +import com.eleadmin.common.core.web.BaseController; +import com.eleadmin.common.core.web.PageResult; +import com.eleadmin.common.system.entity.FileRecord; +import com.eleadmin.common.system.param.FileRecordParam; +import com.eleadmin.common.system.service.FileRecordService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * 文件上传下载控制器 + * + * @author EleAdmin + * @since 2018-12-24 16:10:24 + */ +@Api(tags = "文件上传下载") +@RestController +@RequestMapping("/api/file") +public class FileController extends BaseController { + @Resource + private ConfigProperties config; + @Resource + private FileRecordService fileRecordService; + + @PreAuthorize("hasAuthority('sys:file:upload')") + @OperationLog + @ApiOperation("上传文件") + @PostMapping("/upload") + public ApiResult upload(@RequestParam MultipartFile file, HttpServletRequest request) { + FileRecord result = null; + try { + String dir = getUploadDir(); + File upload = FileServerUtil.upload(file, dir, config.getUploadUuidName()); + String path = upload.getAbsolutePath().replace("\\", "/").substring(dir.length() - 1); + String requestURL = StrUtil.removeSuffix(request.getRequestURL(), "/upload"); + String originalName = file.getOriginalFilename(); + result = new FileRecord(); + result.setCreateUserId(getLoginUserId()); + result.setName(StrUtil.isBlank(originalName) ? upload.getName() : originalName); + result.setLength(upload.length()); + result.setPath(path); + result.setUrl(requestURL + "/" + path); + String contentType = FileServerUtil.getContentType(upload); + result.setContentType(contentType); + if (FileServerUtil.isImage(contentType)) { + result.setThumbnail(requestURL + "/thumbnail/" + path); + } + result.setDownloadUrl(requestURL + "/download/" + path); + fileRecordService.save(result); + return success(result); + } catch (Exception e) { + e.printStackTrace(); + return fail("上传失败", result).setError(e.toString()); + } + } + + @PreAuthorize("hasAuthority('sys:file:upload')") + @OperationLog + @ApiOperation("上传base64文件") + @ApiImplicitParams({ + @ApiImplicitParam(name = "base64", value = "base64", required = true, dataType = "string"), + @ApiImplicitParam(name = "fileName", value = "文件名称", dataType = "string") + }) + @PostMapping("/upload/base64") + public ApiResult uploadBase64(String base64, String fileName, HttpServletRequest request) { + FileRecord result = null; + try { + String dir = getUploadDir(); + File upload = FileServerUtil.upload(base64, fileName, getUploadDir()); + String path = upload.getAbsolutePath().substring(dir.length()).replace("\\", "/"); + String requestURL = StrUtil.removeSuffix(request.getRequestURL(), "/upload/base64"); + result = new FileRecord(); + result.setCreateUserId(getLoginUserId()); + result.setName(StrUtil.isBlank(fileName) ? upload.getName() : fileName); + result.setLength(upload.length()); + result.setPath(path); + result.setUrl(requestURL + path); + result.setThumbnail(FileServerUtil.isImage(upload) ? (requestURL + "/thumbnail" + path) : null); + fileRecordService.save(result); + return success(result); + } catch (Exception e) { + e.printStackTrace(); + return fail("上传失败", result).setError(e.toString()); + } + } + + @ApiOperation("查看原文件") + @GetMapping("/{dir}/{name:.+}") + public void preview(@PathVariable("dir") String dir, @PathVariable("name") String name, + HttpServletResponse response, HttpServletRequest request) { + File file = new File(getUploadDir(), dir + "/" + name); + FileServerUtil.preview(file, getPdfOutDir(), config.getOpenOfficeHome(), response, request); + } + + @ApiOperation("下载原文件") + @GetMapping("/download/{dir}/{name:.+}") + public void download(@PathVariable("dir") String dir, @PathVariable("name") String name, + HttpServletResponse response, HttpServletRequest request) { + String path = dir + "/" + name; + FileRecord record = fileRecordService.getByIdPath(path); + File file = new File(getUploadDir(), path); + String fileName = record == null ? file.getName() : record.getName(); + FileServerUtil.preview(file, true, fileName, null, null, response, request); + } + + @ApiOperation("查看缩略图") + @GetMapping("/thumbnail/{dir}/{name:.+}") + public void thumbnail(@PathVariable("dir") String dir, @PathVariable("name") String name, + HttpServletResponse response, HttpServletRequest request) { + File file = new File(getUploadDir(), dir + "/" + name); + File thumbnail = new File(getUploadSmDir(), dir + "/" + name); + FileServerUtil.previewThumbnail(file, thumbnail, config.getThumbnailSize(), response, request); + } + + @PreAuthorize("hasAuthority('sys:file:remove')") + @OperationLog + @ApiOperation("删除文件") + @DeleteMapping("/remove/{id}") + public ApiResult remove(@PathVariable("id") Integer id) { + FileRecord record = fileRecordService.getById(id); + if (fileRecordService.removeById(id)) { + if (StrUtil.isNotBlank(record.getPath())) { + fileRecordService.deleteFileAsync(Arrays.asList( + new File(getUploadDir(), record.getPath()), + new File(getUploadSmDir(), record.getPath()) + )); + } + return success("删除成功"); + } + return fail("删除失败"); + } + + @PreAuthorize("hasAuthority('sys:file:remove')") + @OperationLog + @ApiOperation("批量删除文件") + @ApiImplicitParams({ + @ApiImplicitParam(name = "ids", value = "id数组", required = true, dataType = "string") + }) + @DeleteMapping("/remove/batch") + public ApiResult deleteBatch(@RequestBody List ids) { + List fileRecords = fileRecordService.listByIds(ids); + if (fileRecordService.removeByIds(ids)) { + List files = new ArrayList<>(); + for (FileRecord record : fileRecords) { + if (StrUtil.isNotBlank(record.getPath())) { + files.add(new File(getUploadDir(), record.getPath())); + files.add(new File(getUploadSmDir(), record.getPath())); + } + } + fileRecordService.deleteFileAsync(files); + return success("删除成功"); + } + return fail("删除失败"); + } + + @PreAuthorize("hasAuthority('sys:file:list')") + @OperationLog + @ApiOperation("分页查询文件") + @GetMapping("/page") + public ApiResult> page(FileRecordParam param, HttpServletRequest request) { + PageResult result = fileRecordService.pageRel(param); + String requestURL = StrUtil.removeSuffix(request.getRequestURL(), "/page"); + for (FileRecord record : result.getList()) { + if (StrUtil.isNotBlank(record.getPath())) { + record.setUrl(requestURL + "/" + record.getPath()); + if (FileServerUtil.isImage(record.getContentType())) { + record.setThumbnail(requestURL + "/thumbnail/" + record.getPath()); + } + record.setDownloadUrl(requestURL + "/download/" + record.getPath()); + } + } + return success(result); + } + + @PreAuthorize("hasAuthority('sys:file:list')") + @OperationLog + @ApiOperation("查询全部文件") + @GetMapping("/list") + public ApiResult> list(FileRecordParam param, HttpServletRequest request) { + List records = fileRecordService.listRel(param); + String requestURL = StrUtil.removeSuffix(request.getRequestURL(), "/list"); + for (FileRecord record : records) { + if (StrUtil.isNotBlank(record.getPath())) { + record.setUrl(requestURL + "/" + record.getPath()); + if (FileServerUtil.isImage(record.getContentType())) { + record.setThumbnail(requestURL + "/thumbnail/" + record.getPath()); + } + record.setDownloadUrl(requestURL + "/download/" + record.getPath()); + } + } + return success(records); + } + + /** + * 文件上传基目录 + */ + private String getUploadBaseDir() { + return File.listRoots()[config.getUploadLocation()].getAbsolutePath() + .replace("\\", "/") + "/upload/"; + } + + /** + * 文件上传位置(服务器) + */ + private String getUploadDir() { + return config.getUploadPath() + "file/"; +// return getUploadBaseDir() + "file/"; + } + + /** + * 文件上传位置(本地) + */ +// private String getUploadDir() { +// return "/Users/gxwebsoft/Documents/uploads/"; +// } + + /** + * 缩略图生成位置 + */ + private String getUploadSmDir() { + return getUploadBaseDir() + "thumbnail/"; + } + + /** + * office转pdf输出位置 + */ + private String getPdfOutDir() { + return getUploadBaseDir() + "pdf/"; + } + +} diff --git a/src/main/java/com/eleadmin/common/system/controller/LoginRecordController.java b/src/main/java/com/eleadmin/common/system/controller/LoginRecordController.java new file mode 100644 index 0000000..fa1a971 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/controller/LoginRecordController.java @@ -0,0 +1,58 @@ +package com.eleadmin.common.system.controller; + +import com.eleadmin.common.core.annotation.OperationLog; +import com.eleadmin.common.core.web.ApiResult; +import com.eleadmin.common.core.web.BaseController; +import com.eleadmin.common.core.web.PageResult; +import com.eleadmin.common.system.entity.LoginRecord; +import com.eleadmin.common.system.param.LoginRecordParam; +import com.eleadmin.common.system.service.LoginRecordService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 登录日志控制器 + * + * @author EleAdmin + * @since 2018-12-24 16:10:31 + */ +@Api(tags = "登录日志") +@RestController +@RequestMapping("/api/system/login-record") +public class LoginRecordController extends BaseController { + @Resource + private LoginRecordService loginRecordService; + + @PreAuthorize("hasAuthority('sys:login-record:list')") + @OperationLog + @ApiOperation("分页查询登录日志") + @GetMapping("/page") + public ApiResult> page(LoginRecordParam param) { + return success(loginRecordService.pageRel(param)); + } + + @PreAuthorize("hasAuthority('sys:login-record:list')") + @OperationLog + @ApiOperation("查询全部登录日志") + @GetMapping() + public ApiResult> list(LoginRecordParam param) { + return success(loginRecordService.listRel(param)); + } + + @PreAuthorize("hasAuthority('sys:login-record:list')") + @OperationLog + @ApiOperation("根据id查询登录日志") + @GetMapping("/{id}") + public ApiResult get(@PathVariable("id") Integer id) { + return success(loginRecordService.getByIdRel(id)); + } + +} diff --git a/src/main/java/com/eleadmin/common/system/controller/MainController.java b/src/main/java/com/eleadmin/common/system/controller/MainController.java new file mode 100644 index 0000000..4c60e70 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/controller/MainController.java @@ -0,0 +1,140 @@ +package com.eleadmin.common.system.controller; + +import cn.hutool.core.util.StrUtil; +import com.eleadmin.common.core.annotation.OperationLog; +import com.eleadmin.common.core.config.ConfigProperties; +import com.eleadmin.common.core.security.JwtSubject; +import com.eleadmin.common.core.security.JwtUtil; +import com.eleadmin.common.core.utils.CommonUtil; +import com.eleadmin.common.core.web.ApiResult; +import com.eleadmin.common.core.web.BaseController; +import com.eleadmin.common.system.entity.LoginRecord; +import com.eleadmin.common.system.entity.Menu; +import com.eleadmin.common.system.entity.User; +import com.eleadmin.common.system.result.CaptchaResult; +import com.eleadmin.common.system.param.LoginParam; +import com.eleadmin.common.system.result.LoginResult; +import com.eleadmin.common.system.param.UpdatePasswordParam; +import com.eleadmin.common.system.service.LoginRecordService; +import com.eleadmin.common.system.service.RoleMenuService; +import com.eleadmin.common.system.service.UserService; +import com.wf.captcha.SpecCaptcha; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.*; + +/** + * 登录认证控制器 + * + * @author EleAdmin + * @since 2018-12-24 16:10:11 + */ +@Api(tags = "登录认证") +@RestController +@RequestMapping("/api") +public class MainController extends BaseController { + @Resource + private ConfigProperties configProperties; + @Resource + private UserService userService; + @Resource + private RoleMenuService roleMenuService; + @Resource + private LoginRecordService loginRecordService; + + @ApiOperation("用户登录") + @PostMapping("/login") + public ApiResult login(@RequestBody LoginParam param, HttpServletRequest request) { + String username = param.getUsername(); + Integer tenantId = param.getTenantId(); + User user = userService.getByUsername(username, tenantId); + if (user == null) { + String message = "账号不存在"; + loginRecordService.saveAsync(username, LoginRecord.TYPE_ERROR, message, tenantId, request); + return fail(message, null); + } + if (!user.getStatus().equals(0)) { + String message = "账号被冻结"; + loginRecordService.saveAsync(username, LoginRecord.TYPE_ERROR, message, tenantId, request); + return fail(message, null); + } + if (!userService.comparePassword(user.getPassword(), param.getPassword())) { + String message = "密码错误"; + loginRecordService.saveAsync(username, LoginRecord.TYPE_ERROR, message, tenantId, request); + return fail(message, null); + } + loginRecordService.saveAsync(username, LoginRecord.TYPE_LOGIN, null, tenantId, request); + // 签发token + String access_token = JwtUtil.buildToken(new JwtSubject(username, tenantId), + configProperties.getTokenExpireTime(), configProperties.getTokenKey()); + return success("登录成功", new LoginResult(access_token, user)); + } + + @ApiOperation("获取登录用户信息") + @GetMapping("/auth/user") + public ApiResult userInfo() { + return success(userService.getByIdRel(getLoginUserId())); + } + + @ApiOperation("获取登录用户菜单") + @GetMapping("/auth/menu") + public ApiResult> userMenu() { + List menus = roleMenuService.listMenuByUserId(getLoginUserId(), Menu.TYPE_MENU); + return success(CommonUtil.toTreeData(menus, 0, Menu::getParentId, Menu::getMenuId, Menu::setChildren)); + } + + @PreAuthorize("hasAuthority('sys:auth:user')") + @OperationLog + @ApiOperation("修改个人信息") + @PutMapping("/auth/user") + public ApiResult updateInfo(@RequestBody User user) { + user.setUserId(getLoginUserId()); + // 不能修改的字段 + user.setUsername(null); + user.setPassword(null); + user.setEmailVerified(null); + user.setOrganizationId(null); + user.setStatus(null); + if (userService.updateById(user)) { + return success(userService.getByIdRel(user.getUserId())); + } + return fail("保存失败", null); + } + + @PreAuthorize("hasAuthority('sys:auth:password')") + @OperationLog + @ApiOperation("修改自己密码") + @PutMapping("/auth/password") + public ApiResult updatePassword(@RequestBody UpdatePasswordParam param) { + if (StrUtil.hasBlank(param.getOldPassword(), param.getPassword())) { + return fail("参数不能为空"); + } + Integer userId = getLoginUserId(); + if (userId == null) { + return fail("未登录"); + } + if (!userService.comparePassword(userService.getById(userId).getPassword(), param.getOldPassword())) { + return fail("原密码输入不正确"); + } + User user = new User(); + user.setUserId(userId); + user.setPassword(userService.encodePassword(param.getPassword())); + if (userService.updateById(user)) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @ApiOperation("图形验证码") + @GetMapping("/captcha") + public ApiResult captcha() { + SpecCaptcha specCaptcha = new SpecCaptcha(130, 48, 5); + return success(new CaptchaResult(specCaptcha.toBase64(), specCaptcha.text().toLowerCase())); + } + +} diff --git a/src/main/java/com/eleadmin/common/system/controller/MenuController.java b/src/main/java/com/eleadmin/common/system/controller/MenuController.java new file mode 100644 index 0000000..a3ddd9d --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/controller/MenuController.java @@ -0,0 +1,126 @@ +package com.eleadmin.common.system.controller; + +import com.eleadmin.common.core.annotation.OperationLog; +import com.eleadmin.common.core.web.*; +import com.eleadmin.common.system.entity.Menu; +import com.eleadmin.common.system.param.MenuParam; +import com.eleadmin.common.system.service.MenuService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 菜单控制器 + * + * @author EleAdmin + * @since 2018-12-24 16:10:23 + */ +@Api(tags = "菜单管理") +@RestController +@RequestMapping("/api/system/menu") +public class MenuController extends BaseController { + @Resource + private MenuService menuService; + + @PreAuthorize("hasAuthority('sys:menu:list')") + @OperationLog + @ApiOperation("分页查询菜单") + @GetMapping("/page") + public ApiResult> page(MenuParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("sort_number"); + return success(menuService.page(page, page.getWrapper())); + } + + @PreAuthorize("hasAuthority('sys:menu:list')") + @OperationLog + @ApiOperation("查询全部菜单") + @GetMapping() + public ApiResult> list(MenuParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("sort_number"); + return success(menuService.list(page.getOrderWrapper())); + } + + @PreAuthorize("hasAuthority('sys:menu:list')") + @OperationLog + @ApiOperation("根据id查询菜单") + @GetMapping("/{id}") + public ApiResult get(@PathVariable("id") Integer id) { + return success(menuService.getById(id)); + } + + @PreAuthorize("hasAuthority('sys:menu:save')") + @OperationLog + @ApiOperation("添加菜单") + @PostMapping() + public ApiResult add(@RequestBody Menu menu) { + if (menu.getParentId() == null) { + menu.setParentId(0); + } + if (menuService.save(menu)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @PreAuthorize("hasAuthority('sys:menu:update')") + @OperationLog + @ApiOperation("修改菜单") + @PutMapping() + public ApiResult update(@RequestBody Menu menu) { + if (menuService.updateById(menu)) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @PreAuthorize("hasAuthority('sys:menu:remove')") + @OperationLog + @ApiOperation("删除菜单") + @DeleteMapping("/{id}") + public ApiResult remove(@PathVariable("id") Integer id) { + if (menuService.removeById(id)) { + return success("删除成功"); + } + return fail("删除失败"); + } + + @PreAuthorize("hasAuthority('sys:menu:save')") + @OperationLog + @ApiOperation("批量添加菜单") + @PostMapping("/batch") + public ApiResult saveBatch(@RequestBody List menus) { + if (menuService.saveBatch(menus)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @PreAuthorize("hasAuthority('sys:menu:update')") + @OperationLog + @ApiOperation("批量修改菜单") + @PutMapping("/batch") + public ApiResult updateBatch(@RequestBody BatchParam batchParam) { + if (batchParam.update(menuService, "menu_id")) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @PreAuthorize("hasAuthority('sys:menu:remove')") + @OperationLog + @ApiOperation("批量删除菜单") + @DeleteMapping("/batch") + public ApiResult removeBatch(@RequestBody List ids) { + if (menuService.removeByIds(ids)) { + return success("删除成功"); + } + return fail("删除失败"); + } + +} diff --git a/src/main/java/com/eleadmin/common/system/controller/OperationRecordController.java b/src/main/java/com/eleadmin/common/system/controller/OperationRecordController.java new file mode 100644 index 0000000..b399664 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/controller/OperationRecordController.java @@ -0,0 +1,62 @@ +package com.eleadmin.common.system.controller; + +import com.eleadmin.common.core.annotation.OperationLog; +import com.eleadmin.common.core.web.ApiResult; +import com.eleadmin.common.core.web.BaseController; +import com.eleadmin.common.core.web.PageResult; +import com.eleadmin.common.system.entity.OperationRecord; +import com.eleadmin.common.system.param.OperationRecordParam; +import com.eleadmin.common.system.service.OperationRecordService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 操作日志控制器 + * + * @author EleAdmin + * @since 2018-12-24 16:10:12 + */ +@Api(tags = "操作日志") +@RestController +@RequestMapping("/api/system/operation-record") +public class OperationRecordController extends BaseController { + @Resource + private OperationRecordService operationRecordService; + + /** + * 分页查询操作日志 + */ + @PreAuthorize("hasAuthority('sys:operation-record:list')") + @ApiOperation("分页查询操作日志") + @GetMapping("/page") + public ApiResult> page(OperationRecordParam param) { + return success(operationRecordService.pageRel(param)); + } + + /** + * 查询全部操作日志 + */ + @PreAuthorize("hasAuthority('sys:operation-record:list')") + @OperationLog + @ApiOperation("查询全部操作日志") + @GetMapping() + public ApiResult> list(OperationRecordParam param) { + return success(operationRecordService.listRel(param)); + } + + /** + * 根据id查询操作日志 + */ + @PreAuthorize("hasAuthority('sys:operation-record:list')") + @ApiOperation("根据id查询操作日志") + @GetMapping("/{id}") + public ApiResult get(@PathVariable("id") Integer id) { + return success(operationRecordService.getByIdRel(id)); + } + +} diff --git a/src/main/java/com/eleadmin/common/system/controller/OrganizationController.java b/src/main/java/com/eleadmin/common/system/controller/OrganizationController.java new file mode 100644 index 0000000..21dec4b --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/controller/OrganizationController.java @@ -0,0 +1,139 @@ +package com.eleadmin.common.system.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.eleadmin.common.core.annotation.OperationLog; +import com.eleadmin.common.core.web.*; +import com.eleadmin.common.system.entity.Organization; +import com.eleadmin.common.system.param.OrganizationParam; +import com.eleadmin.common.system.service.OrganizationService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 组织机构控制器 + * + * @author EleAdmin + * @since 2020-03-14 11:29:04 + */ +@Api(tags = "组织机构管理") +@RestController +@RequestMapping("/api/system/organization") +public class OrganizationController extends BaseController { + @Resource + private OrganizationService organizationService; + + @PreAuthorize("hasAuthority('sys:org:list')") + @OperationLog + @ApiOperation("分页查询组织机构") + @GetMapping("/page") + public ApiResult> page(OrganizationParam param) { + return success(organizationService.pageRel(param)); + } + + @PreAuthorize("hasAuthority('sys:org:list')") + @OperationLog + @ApiOperation("查询全部组织机构") + @GetMapping() + public ApiResult> list(OrganizationParam param) { + return success(organizationService.listRel(param)); + } + + @PreAuthorize("hasAuthority('sys:org:list')") + @OperationLog + @ApiOperation("根据id查询组织机构") + @GetMapping("/{id}") + public ApiResult get(@PathVariable("id") Integer id) { + return success(organizationService.getByIdRel(id)); + } + + @PreAuthorize("hasAuthority('sys:org:save')") + @OperationLog + @ApiOperation("添加组织机构") + @PostMapping() + public ApiResult add(@RequestBody Organization organization) { + if (organization.getParentId() == null) { + organization.setParentId(0); + } + if (organizationService.count(new LambdaQueryWrapper() + .eq(Organization::getOrganizationName, organization.getOrganizationName()) + .eq(Organization::getParentId, organization.getParentId())) > 0) { + return fail("机构名称已存在"); + } + if (organizationService.save(organization)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @PreAuthorize("hasAuthority('sys:org:update')") + @OperationLog + @ApiOperation("修改组织机构") + @PutMapping() + public ApiResult update(@RequestBody Organization organization) { + if (organization.getOrganizationName() != null) { + if (organization.getParentId() == null) { + organization.setParentId(0); + } + if (organizationService.count(new LambdaQueryWrapper() + .eq(Organization::getOrganizationName, organization.getOrganizationName()) + .eq(Organization::getParentId, organization.getParentId()) + .ne(Organization::getOrganizationId, organization.getOrganizationId())) > 0) { + return fail("机构名称已存在"); + } + } + if (organizationService.updateById(organization)) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @PreAuthorize("hasAuthority('sys:org:remove')") + @OperationLog + @ApiOperation("删除组织机构") + @DeleteMapping("/{id}") + public ApiResult remove(@PathVariable("id") Integer id) { + if (organizationService.removeById(id)) { + return success("删除成功"); + } + return fail("删除失败"); + } + + @PreAuthorize("hasAuthority('sys:org:save')") + @OperationLog + @ApiOperation("批量添加组织机构") + @PostMapping("/batch") + public ApiResult saveBatch(@RequestBody List organizationList) { + if (organizationService.saveBatch(organizationList)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @PreAuthorize("hasAuthority('sys:org:update')") + @OperationLog + @ApiOperation("批量修改组织机构") + @PutMapping("/batch") + public ApiResult updateBatch(@RequestBody BatchParam batchParam) { + if (batchParam.update(organizationService, Organization::getOrganizationId)) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @PreAuthorize("hasAuthority('sys:org:remove')") + @OperationLog + @ApiOperation("批量删除组织机构") + @DeleteMapping("/batch") + public ApiResult removeBatch(@RequestBody List ids) { + if (organizationService.removeByIds(ids)) { + return success("删除成功"); + } + return fail("删除失败"); + } + +} diff --git a/src/main/java/com/eleadmin/common/system/controller/RoleController.java b/src/main/java/com/eleadmin/common/system/controller/RoleController.java new file mode 100644 index 0000000..3575a08 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/controller/RoleController.java @@ -0,0 +1,152 @@ +package com.eleadmin.common.system.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.eleadmin.common.core.annotation.OperationLog; +import com.eleadmin.common.core.utils.CommonUtil; +import com.eleadmin.common.core.web.ApiResult; +import com.eleadmin.common.core.web.BaseController; +import com.eleadmin.common.core.web.PageParam; +import com.eleadmin.common.core.web.PageResult; +import com.eleadmin.common.system.entity.Role; +import com.eleadmin.common.system.param.RoleParam; +import com.eleadmin.common.system.service.RoleService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 角色控制器 + * + * @author EleAdmin + * @since 2018-12-24 16:10:02 + */ +@Api(tags = "角色管理") +@RestController +@RequestMapping("/api/system/role") +public class RoleController extends BaseController { + @Resource + private RoleService roleService; + + @PreAuthorize("hasAuthority('sys:role:list')") + @OperationLog + @ApiOperation("分页查询角色") + @GetMapping("/page") + public ApiResult> page(RoleParam param) { + PageParam page = new PageParam<>(param); + return success(roleService.page(page, page.getWrapper())); + } + + @PreAuthorize("hasAuthority('sys:role:list')") + @OperationLog + @ApiOperation("查询全部角色") + @GetMapping() + public ApiResult> list(RoleParam param) { + PageParam page = new PageParam<>(param); + return success(roleService.list(page.getOrderWrapper())); + } + + @PreAuthorize("hasAuthority('sys:role:list')") + @OperationLog + @ApiOperation("根据id查询角色") + @GetMapping("/{id}") + public ApiResult get(@PathVariable("id") Integer id) { + return success(roleService.getById(id)); + } + + @PreAuthorize("hasAuthority('sys:role:save')") + @OperationLog + @ApiOperation("添加角色") + @PostMapping() + public ApiResult save(@RequestBody Role role) { + if (roleService.count(new LambdaQueryWrapper().eq(Role::getRoleCode, role.getRoleCode())) > 0) { + return fail("角色标识已存在"); + } + if (roleService.count(new LambdaQueryWrapper().eq(Role::getRoleName, role.getRoleName())) > 0) { + return fail("角色名称已存在"); + } + if (roleService.save(role)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @PreAuthorize("hasAuthority('sys:role:update')") + @OperationLog + @ApiOperation("修改角色") + @PutMapping() + public ApiResult update(@RequestBody Role role) { + if (role.getRoleCode() != null && roleService.count(new LambdaQueryWrapper() + .eq(Role::getRoleCode, role.getRoleCode()) + .ne(Role::getRoleId, role.getRoleId())) > 0) { + return fail("角色标识已存在"); + } + if (role.getRoleName() != null && roleService.count(new LambdaQueryWrapper() + .eq(Role::getRoleName, role.getRoleName()) + .ne(Role::getRoleId, role.getRoleId())) > 0) { + return fail("角色名称已存在"); + } + if (roleService.updateById(role)) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @PreAuthorize("hasAuthority('sys:role:remove')") + @OperationLog + @ApiOperation("删除角色") + @DeleteMapping("/{id}") + public ApiResult remove(@PathVariable("id") Integer id) { + if (roleService.removeById(id)) { + return success("删除成功"); + } + return fail("删除失败"); + } + + @PreAuthorize("hasAuthority('sys:role:save')") + @OperationLog + @ApiOperation("批量添加角色") + @PostMapping("/batch") + public ApiResult> saveBatch(@RequestBody List list) { + // 校验是否重复 + if (CommonUtil.checkRepeat(list, Role::getRoleName)) { + return fail("角色名称存在重复", null); + } + if (CommonUtil.checkRepeat(list, Role::getRoleCode)) { + return fail("角色标识存在重复", null); + } + // 校验是否存在 + List codeExists = roleService.list(new LambdaQueryWrapper().in(Role::getRoleCode, + list.stream().map(Role::getRoleCode).collect(Collectors.toList()))); + if (codeExists.size() > 0) { + return fail("角色标识已存在", codeExists.stream().map(Role::getRoleCode) + .collect(Collectors.toList())).setCode(2); + } + List nameExists = roleService.list(new LambdaQueryWrapper().in(Role::getRoleName, + list.stream().map(Role::getRoleCode).collect(Collectors.toList()))); + if (nameExists.size() > 0) { + return fail("角色标识已存在", nameExists.stream().map(Role::getRoleCode) + .collect(Collectors.toList())).setCode(3); + } + if (roleService.saveBatch(list)) { + return success("添加成功", null); + } + return fail("添加失败", null); + } + + @PreAuthorize("hasAuthority('sys:role:remove')") + @OperationLog + @ApiOperation("批量删除角色") + @DeleteMapping("/batch") + public ApiResult removeBatch(@RequestBody List ids) { + if (roleService.removeByIds(ids)) { + return success("删除成功"); + } + return fail("删除失败"); + } + +} diff --git a/src/main/java/com/eleadmin/common/system/controller/RoleMenuController.java b/src/main/java/com/eleadmin/common/system/controller/RoleMenuController.java new file mode 100644 index 0000000..d2f39f3 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/controller/RoleMenuController.java @@ -0,0 +1,100 @@ +package com.eleadmin.common.system.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.eleadmin.common.core.annotation.OperationLog; +import com.eleadmin.common.core.web.ApiResult; +import com.eleadmin.common.core.web.BaseController; +import com.eleadmin.common.core.exception.BusinessException; +import com.eleadmin.common.system.entity.Menu; +import com.eleadmin.common.system.entity.RoleMenu; +import com.eleadmin.common.system.service.MenuService; +import com.eleadmin.common.system.service.RoleMenuService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; + +/** + * 角色菜单控制器 + * + * @author EleAdmin + * @since 2018-12-24 16:10:01 + */ +@Api(tags = "角色菜单管理") +@RestController +@RequestMapping("/api/system/role-menu") +public class RoleMenuController extends BaseController { + @Resource + private RoleMenuService roleMenuService; + @Resource + private MenuService menuService; + + @PreAuthorize("hasAuthority('sys:role:list')") + @OperationLog + @ApiOperation("查询角色菜单") + @GetMapping("/{id}") + public ApiResult> list(@PathVariable("id") Integer roleId) { + List menus = menuService.list(new LambdaQueryWrapper().orderByAsc(Menu::getSortNumber)); + List roleMenus = roleMenuService.list(new LambdaQueryWrapper() + .eq(RoleMenu::getRoleId, roleId)); + for (Menu menu : menus) { + menu.setChecked(roleMenus.stream().anyMatch((d) -> d.getMenuId().equals(menu.getMenuId()))); + } + return success(menus); + } + + @Transactional(rollbackFor = {Exception.class}) + @PreAuthorize("hasAuthority('sys:role:update')") + @OperationLog + @ApiOperation("修改角色菜单") + @PutMapping("/{id}") + public ApiResult update(@PathVariable("id") Integer roleId, @RequestBody List menuIds) { + roleMenuService.remove(new LambdaUpdateWrapper().eq(RoleMenu::getRoleId, roleId)); + if (menuIds != null && menuIds.size() > 0) { + List roleMenuList = new ArrayList<>(); + for (Integer menuId : menuIds) { + RoleMenu roleMenu = new RoleMenu(); + roleMenu.setRoleId(roleId); + roleMenu.setMenuId(menuId); + roleMenuList.add(roleMenu); + } + if (!roleMenuService.saveBatch(roleMenuList)) { + throw new BusinessException("保存失败"); + } + } + return success("保存成功"); + } + + @PreAuthorize("hasAuthority('sys:role:update')") + @OperationLog + @ApiOperation("添加角色菜单") + @PostMapping("/{id}") + public ApiResult addRoleAuth(@PathVariable("id") Integer roleId, @RequestBody Integer menuId) { + RoleMenu roleMenu = new RoleMenu(); + roleMenu.setRoleId(roleId); + roleMenu.setMenuId(menuId); + if (roleMenuService.save(roleMenu)) { + return success(); + } + return fail(); + } + + @PreAuthorize("hasAuthority('sys:role:update')") + @OperationLog + @ApiOperation("移除角色菜单") + @DeleteMapping("/{id}") + public ApiResult remove(@PathVariable("id") Integer roleId, @RequestBody Integer menuId) { + if (roleMenuService.remove(new LambdaUpdateWrapper() + .eq(RoleMenu::getRoleId, roleId).eq(RoleMenu::getMenuId, menuId))) { + return success(); + } + return fail(); + } + +} diff --git a/src/main/java/com/eleadmin/common/system/controller/UserController.java b/src/main/java/com/eleadmin/common/system/controller/UserController.java new file mode 100644 index 0000000..b783433 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/controller/UserController.java @@ -0,0 +1,298 @@ +package com.eleadmin.common.system.controller; + +import cn.afterturn.easypoi.excel.ExcelImportUtil; +import cn.afterturn.easypoi.excel.entity.ImportParams; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.eleadmin.common.core.annotation.OperationLog; +import com.eleadmin.common.core.utils.CommonUtil; +import com.eleadmin.common.core.web.*; +import com.eleadmin.common.system.entity.DictionaryData; +import com.eleadmin.common.system.entity.Organization; +import com.eleadmin.common.system.entity.Role; +import com.eleadmin.common.system.entity.User; +import com.eleadmin.common.system.param.UserImportParam; +import com.eleadmin.common.system.param.UserParam; +import com.eleadmin.common.system.service.DictionaryDataService; +import com.eleadmin.common.system.service.OrganizationService; +import com.eleadmin.common.system.service.RoleService; +import com.eleadmin.common.system.service.UserService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 用户控制器 + * + * @author EleAdmin + * @since 2018-12-24 16:10:41 + */ +@Api(tags = "用户管理") +@RestController +@RequestMapping("/api/system/user") +public class UserController extends BaseController { + @Resource + private UserService userService; + @Resource + private RoleService roleService; + @Resource + private OrganizationService organizationService; + @Resource + private DictionaryDataService dictionaryDataService; + + @PreAuthorize("hasAuthority('sys:user:list')") + @OperationLog + @ApiOperation("分页查询用户") + @GetMapping("/page") + public ApiResult> page(UserParam param) { + return success(userService.pageRel(param)); + } + + @PreAuthorize("hasAuthority('sys:user:list')") + @OperationLog + @ApiOperation("查询全部用户") + @GetMapping() + public ApiResult> list(UserParam param) { + return success(userService.listRel(param)); + } + + @PreAuthorize("hasAuthority('sys:user:list')") + @OperationLog + @ApiOperation("根据id查询用户") + @GetMapping("/{id}") + public ApiResult get(@PathVariable("id") Integer id) { + return success(userService.getByIdRel(id)); + } + + @PreAuthorize("hasAuthority('sys:user:save')") + @OperationLog + @ApiOperation("添加用户") + @PostMapping() + public ApiResult add(@RequestBody User user) { + user.setStatus(0); + user.setPassword(userService.encodePassword(user.getPassword())); + if (userService.saveUser(user)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @PreAuthorize("hasAuthority('sys:user:update')") + @OperationLog + @ApiOperation("修改用户") + @PutMapping() + public ApiResult update(@RequestBody User user) { + user.setStatus(null); + user.setUsername(null); + user.setPassword(null); + if (userService.updateUser(user)) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @PreAuthorize("hasAuthority('sys:user:remove')") + @OperationLog + @ApiOperation("删除用户") + @DeleteMapping("/{id}") + public ApiResult remove(@PathVariable("id") Integer id) { + if (userService.removeById(id)) { + return success("删除成功"); + } + return fail("删除失败"); + } + + @PreAuthorize("hasAuthority('sys:user:update')") + @OperationLog + @ApiOperation("批量修改用户") + @PutMapping("/batch") + public ApiResult removeBatch(@RequestBody BatchParam batchParam) { + if (batchParam.update(userService, User::getUserId)) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @PreAuthorize("hasAuthority('sys:user:remove')") + @OperationLog + @ApiOperation("批量删除用户") + @ApiImplicitParams({ + @ApiImplicitParam(name = "ids", value = "id数组", required = true, dataType = "string") + }) + @DeleteMapping("/batch") + public ApiResult deleteBatch(@RequestBody List ids) { + if (userService.removeByIds(ids)) { + return success("删除成功"); + } + return fail("删除失败"); + } + + @PreAuthorize("hasAuthority('sys:user:update')") + @OperationLog + @ApiOperation("修改用户状态") + @PutMapping("/status") + public ApiResult updateStatus(@RequestBody User user) { + if (user.getUserId() == null || user.getStatus() == null || !Arrays.asList(0, 1).contains(user.getStatus())) { + return fail("参数不正确"); + } + User u = new User(); + u.setUserId(user.getUserId()); + u.setStatus(user.getStatus()); + if (userService.updateById(u)) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @PreAuthorize("hasAuthority('sys:user:update')") + @OperationLog + @ApiOperation("批量修改用户状态") + @PutMapping("/status/batch") + public ApiResult updateStatusBatch(@RequestBody BatchParam batchParam) { + if (!Arrays.asList(0, 1).contains(batchParam.getData())) { + return fail("状态值不正确"); + } + if (userService.update(new LambdaUpdateWrapper() + .in(User::getUserId, batchParam.getIds()) + .set(User::getStatus, batchParam.getData()))) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @PreAuthorize("hasAuthority('sys:user:update')") + @OperationLog + @ApiOperation("重置密码") + @PutMapping("/password") + public ApiResult resetPassword(@RequestBody User user) { + if (user.getUserId() == null || StrUtil.isBlank(user.getPassword())) { + return fail("参数不正确"); + } + User u = new User(); + u.setUserId(user.getUserId()); + u.setPassword(userService.encodePassword(user.getPassword())); + if (userService.updateById(u)) { + return success("重置成功"); + } else { + return fail("重置失败"); + } + } + + @PreAuthorize("hasAuthority('sys:user:update')") + @OperationLog + @ApiOperation("批量重置密码") + @PutMapping("/password/batch") + public ApiResult resetPasswordBatch(@RequestBody BatchParam batchParam) { + if (batchParam.getIds() == null || batchParam.getIds().size() == 0) { + return fail("请选择用户"); + } + if (batchParam.getData() == null) { + return fail("请输入密码"); + } + if (userService.update(new LambdaUpdateWrapper() + .in(User::getUserId, batchParam.getIds()) + .set(User::getPassword, userService.encodePassword(batchParam.getData())))) { + return success("重置成功"); + } else { + return fail("重置失败"); + } + } + + @PreAuthorize("hasAuthority('sys:user:list')") + @OperationLog + @ApiOperation("检查用户是否存在") + @GetMapping("/existence") + public ApiResult existence(ExistenceParam param) { + if (param.isExistence(userService, User::getUserId)) { + return success(param.getValue() + "已存在"); + } + return fail(param.getValue() + "不存在"); + } + + /** + * excel导入用户 + */ + @PreAuthorize("hasAuthority('sys:user:save')") + @OperationLog + @ApiOperation("导入用户") + @Transactional(rollbackFor = {Exception.class}) + @PostMapping("/import") + public ApiResult> importBatch(MultipartFile file) { + ImportParams importParams = new ImportParams(); + try { + List list = ExcelImportUtil.importExcel(file.getInputStream(), + UserImportParam.class, importParams); + // 校验是否重复 + if (CommonUtil.checkRepeat(list, UserImportParam::getUsername)) { + return fail("账号存在重复", null); + } + if (CommonUtil.checkRepeat(list, UserImportParam::getPhone)) { + return fail("手机号存在重复", null); + } + // 校验是否存在 + List usernameExists = userService.list(new LambdaQueryWrapper().in(User::getUsername, + list.stream().map(UserImportParam::getUsername).collect(Collectors.toList()))); + if (usernameExists.size() > 0) { + return fail("账号已经存在", + usernameExists.stream().map(User::getUsername).collect(Collectors.toList())); + } + List phoneExists = userService.list(new LambdaQueryWrapper().in(User::getPhone, + list.stream().map(UserImportParam::getPhone).collect(Collectors.toList()))); + if (phoneExists.size() > 0) { + return fail("手机号已经存在", + phoneExists.stream().map(User::getPhone).collect(Collectors.toList())); + } + // 添加 + List users = new ArrayList<>(); + for (UserImportParam one : list) { + User u = new User(); + u.setStatus(0); + u.setUsername(one.getUsername()); + u.setPassword(userService.encodePassword(one.getPassword())); + u.setNickname(one.getNickname()); + u.setPhone(one.getPhone()); + Role role = roleService.getOne(new QueryWrapper() + .eq("role_name", one.getRoleName()), false); + if (role == null) { + return fail("角色不存在", Collections.singletonList(one.getRoleName())); + } else { + u.setRoles(Collections.singletonList(role)); + } + Organization organization = organizationService.getOne(new QueryWrapper() + .eq("organization_full_name", one.getOrganizationName()), false); + if (organization == null) { + return fail("机构不存在", Collections.singletonList(one.getOrganizationName())); + } else { + u.setOrganizationId(organization.getOrganizationId()); + } + DictionaryData sex = dictionaryDataService.getByDictCodeAndName("sex", one.getSexName()); + if (sex == null) { + return fail("性别不存在", Collections.singletonList(one.getSexName())); + } else { + u.setSex(sex.getDictDataCode()); + } + } + if (userService.saveBatch(users)) { + return success("导入成功", null); + } + } catch (Exception e) { + e.printStackTrace(); + } + return fail("导入失败", null); + } + +} diff --git a/src/main/java/com/eleadmin/common/system/controller/UserFileController.java b/src/main/java/com/eleadmin/common/system/controller/UserFileController.java new file mode 100644 index 0000000..0184124 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/controller/UserFileController.java @@ -0,0 +1,164 @@ +package com.eleadmin.common.system.controller; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.eleadmin.common.core.utils.FileServerUtil; +import com.eleadmin.common.core.web.BaseController; +import com.eleadmin.common.system.service.UserFileService; +import com.eleadmin.common.system.entity.UserFile; +import com.eleadmin.common.system.param.UserFileParam; +import com.eleadmin.common.core.web.ApiResult; +import com.eleadmin.common.core.web.PageResult; +import com.eleadmin.common.core.web.PageParam; +import com.eleadmin.common.core.annotation.OperationLog; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.List; + +/** + * 用户文件控制器 + * + * @author EleAdmin + * @since 2022-07-21 14:34:40 + */ +@Api(tags = "用户文件管理") +@RestController +@RequestMapping("/api/system/user-file") +public class UserFileController extends BaseController { + @Resource + private UserFileService userFileService; + + @OperationLog + @ApiOperation("分页查询用户文件") + @GetMapping("/page") + public ApiResult> page(UserFileParam param, HttpServletRequest request) { + param.setUserId(getLoginUserId()); + PageParam page = new PageParam<>(param); + page.setDefaultOrder("is_directory desc"); + PageParam result = userFileService.page(page, page.getWrapper()); + List records = result.getRecords(); + String requestURL = StrUtil.removeSuffix(request.getRequestURL(), "/system/user-file") + "/file"; + for (UserFile record : records) { + if (StrUtil.isNotBlank(record.getPath())) { + record.setUrl(requestURL + "/" + record.getPath()); + if (FileServerUtil.isImage(record.getContentType())) { + record.setThumbnail(requestURL + "/thumbnail/" + record.getPath()); + } + record.setDownloadUrl(requestURL + "/download/" + record.getPath()); + } + } + return success(records, result.getTotal()); + } + + @OperationLog + @ApiOperation("查询全部用户文件") + @GetMapping() + public ApiResult> list(UserFileParam param, HttpServletRequest request) { + param.setUserId(getLoginUserId()); + PageParam page = new PageParam<>(param); + page.setDefaultOrder("is_directory desc"); + List records = userFileService.list(page.getOrderWrapper()); + String requestURL = StrUtil.removeSuffix(request.getRequestURL(), "/system/user-file") + "/file"; + for (UserFile record : records) { + if (StrUtil.isNotBlank(record.getPath())) { + record.setUrl(requestURL + "/" + record.getPath()); + if (FileServerUtil.isImage(record.getContentType())) { + record.setThumbnail(requestURL + "/thumbnail/" + record.getPath()); + } + record.setDownloadUrl(requestURL + "/download/" + record.getPath()); + } + } + return success(records); + } + + @PreAuthorize("hasAuthority('sys:auth:user')") + @OperationLog + @ApiOperation("添加用户文件") + @PostMapping() + public ApiResult save(@RequestBody UserFile userFile) { + userFile.setUserId(getLoginUserId()); + if (userFile.getParentId() == null) { + userFile.setParentId(0); + } + if (userFile.getIsDirectory() != null && userFile.getIsDirectory().equals(1)) { + if (userFileService.count(new LambdaQueryWrapper() + .eq(UserFile::getName, userFile.getName()) + .eq(UserFile::getParentId, userFile.getParentId()) + .eq(UserFile::getUserId, userFile.getUserId())) > 0) { + return fail("文件夹名称已存在"); + } + } + if (userFileService.save(userFile)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @PreAuthorize("hasAuthority('sys:auth:user')") + @OperationLog + @ApiOperation("修改用户文件") + @PutMapping() + public ApiResult update(@RequestBody UserFile userFile) { + Integer loginUserId = getLoginUserId(); + UserFile old = userFileService.getById(userFile.getId()); + UserFile entity = new UserFile(); + if (StrUtil.isNotBlank(userFile.getName())) { + entity.setName(userFile.getName()); + } + if (userFile.getParentId() != null) { + entity.setParentId(userFile.getParentId()); + } + if (!old.getUserId().equals(loginUserId) || + (entity.getName() == null && entity.getParentId() == null)) { + return fail("修改失败"); + } + if (old.getIsDirectory() != null && old.getIsDirectory().equals(1)) { + if (userFileService.count(new LambdaQueryWrapper() + .eq(UserFile::getName, entity.getName() == null ? old.getName() : entity.getName()) + .eq(UserFile::getParentId, entity.getParentId() == null ? old.getParentId() : entity.getParentId()) + .eq(UserFile::getUserId, loginUserId) + .ne(UserFile::getId, old.getId())) > 0) { + return fail("文件夹名称已存在"); + } + } + if (userFileService.update(entity, new LambdaUpdateWrapper() + .eq(UserFile::getId, userFile.getId()) + .eq(UserFile::getUserId, loginUserId))) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @PreAuthorize("hasAuthority('sys:auth:user')") + @OperationLog + @ApiOperation("删除用户文件") + @DeleteMapping("/{id}") + public ApiResult remove(@PathVariable("id") Integer id) { + if (userFileService.remove(new LambdaUpdateWrapper() + .eq(UserFile::getId, id) + .eq(UserFile::getUserId, getLoginUserId()))) { + return success("删除成功"); + } + return fail("删除失败"); + } + + @PreAuthorize("hasAuthority('sys:auth:user')") + @OperationLog + @ApiOperation("批量删除用户文件") + @DeleteMapping("/batch") + public ApiResult removeBatch(@RequestBody List ids) { + if (userFileService.remove(new LambdaUpdateWrapper() + .in(UserFile::getId, ids) + .eq(UserFile::getUserId, getLoginUserId()))) { + return success("删除成功"); + } + return fail("删除失败"); + } + +} diff --git a/src/main/java/com/eleadmin/common/system/entity/Dictionary.java b/src/main/java/com/eleadmin/common/system/entity/Dictionary.java new file mode 100644 index 0000000..058db6e --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/entity/Dictionary.java @@ -0,0 +1,53 @@ +package com.eleadmin.common.system.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableLogic; + +import java.util.Date; +import java.io.Serializable; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 字典 + * + * @author EleAdmin + * @since 2020-03-14 11:29:03 + */ +@Data +@ApiModel(description = "字典") +@TableName("sys_dictionary") +public class Dictionary implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "字典id") + @TableId(type = IdType.AUTO) + private Integer dictId; + + @ApiModelProperty(value = "字典标识") + private String dictCode; + + @ApiModelProperty(value = "字典名称") + private String dictName; + + @ApiModelProperty(value = "排序号") + private Integer sortNumber; + + @ApiModelProperty(value = "备注") + private String comments; + + @ApiModelProperty(value = "是否删除, 0否, 1是") + @TableLogic + private Integer deleted; + + @ApiModelProperty(value = "创建时间") + private Date createTime; + + @ApiModelProperty(value = "修改时间") + private Date updateTime; + +} diff --git a/src/main/java/com/eleadmin/common/system/entity/DictionaryData.java b/src/main/java/com/eleadmin/common/system/entity/DictionaryData.java new file mode 100644 index 0000000..0108863 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/entity/DictionaryData.java @@ -0,0 +1,61 @@ +package com.eleadmin.common.system.entity; + +import com.baomidou.mybatisplus.annotation.*; + +import java.util.Date; +import java.io.Serializable; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 字典数据 + * + * @author EleAdmin + * @since 2020-03-14 11:29:04 + */ +@Data +@ApiModel(description = "字典数据") +@TableName("sys_dictionary_data") +public class DictionaryData implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "字典数据id") + @TableId(type = IdType.AUTO) + private Integer dictDataId; + + @ApiModelProperty(value = "字典id") + private Integer dictId; + + @ApiModelProperty(value = "字典数据标识") + private String dictDataCode; + + @ApiModelProperty(value = "字典数据名称") + private String dictDataName; + + @ApiModelProperty(value = "排序号") + private Integer sortNumber; + + @ApiModelProperty(value = "备注") + private String comments; + + @ApiModelProperty(value = "是否删除, 0否, 1是") + @TableLogic + private Integer deleted; + + @ApiModelProperty(value = "创建时间") + private Date createTime; + + @ApiModelProperty(value = "修改时间") + private Date updateTime; + + @ApiModelProperty(value = "字典代码") + @TableField(exist = false) + private String dictCode; + + @ApiModelProperty(value = "字典名称") + @TableField(exist = false) + private String dictName; + +} diff --git a/src/main/java/com/eleadmin/common/system/entity/EmailRecord.java b/src/main/java/com/eleadmin/common/system/entity/EmailRecord.java new file mode 100644 index 0000000..e24bc2c --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/entity/EmailRecord.java @@ -0,0 +1,56 @@ +package com.eleadmin.common.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 邮件发送记录 + * + * @author EleAdmin + * @since 2021-08-29 12:36:35 + */ +@Data +@ApiModel(description = "邮件发送记录") +@TableName("sys_email_record") +public class EmailRecord implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId(type = IdType.AUTO) + private Integer id; + + @ApiModelProperty("邮件标题") + private String title; + + @ApiModelProperty("邮件内容") + private String content; + + @ApiModelProperty("收件邮箱") + private String receiver; + + @ApiModelProperty("发件邮箱") + private String sender; + + @ApiModelProperty("创建人") + private Integer createUserId; + + @ApiModelProperty("备注") + private String comments; + + @ApiModelProperty(value = "租户id") + private Integer tenantId; + + @ApiModelProperty("创建时间") + private Date createTime; + + @ApiModelProperty("修改时间") + private Date updateTime; + +} diff --git a/src/main/java/com/eleadmin/common/system/entity/FileRecord.java b/src/main/java/com/eleadmin/common/system/entity/FileRecord.java new file mode 100644 index 0000000..6a4d42d --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/entity/FileRecord.java @@ -0,0 +1,78 @@ +package com.eleadmin.common.system.entity; + +import com.baomidou.mybatisplus.annotation.*; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 文件上传记录 + * + * @author EleAdmin + * @since 2021-08-29 12:36:32 + */ +@Data +@ApiModel(description = "文件上传记录") +@TableName("sys_file_record") +public class FileRecord implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId(type = IdType.AUTO) + private Integer id; + + @ApiModelProperty("文件名称") + private String name; + + @ApiModelProperty("文件存储路径") + private String path; + + @ApiModelProperty("文件大小") + private Long length; + + @ApiModelProperty("文件类型") + private String contentType; + + @ApiModelProperty("备注") + private String comments; + + @ApiModelProperty("创建人") + private Integer createUserId; + + @ApiModelProperty("是否删除, 0否, 1是") + @TableLogic + private Integer deleted; + + @ApiModelProperty(value = "租户id") + private Integer tenantId; + + @ApiModelProperty("创建时间") + private Date createTime; + + @ApiModelProperty("修改时间") + private Date updateTime; + + @ApiModelProperty("文件访问地址") + @TableField(exist = false) + private String url; + + @ApiModelProperty("文件缩略图访问地址") + @TableField(exist = false) + private String thumbnail; + + @ApiModelProperty("文件下载地址") + @TableField(exist = false) + private String downloadUrl; + + @ApiModelProperty("创建人账号") + @TableField(exist = false) + private String createUsername; + + @ApiModelProperty("创建人名称") + @TableField(exist = false) + private String createNickname; + +} diff --git a/src/main/java/com/eleadmin/common/system/entity/LoginRecord.java b/src/main/java/com/eleadmin/common/system/entity/LoginRecord.java new file mode 100644 index 0000000..8e9d0aa --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/entity/LoginRecord.java @@ -0,0 +1,72 @@ +package com.eleadmin.common.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 登录日志 + * + * @author EleAdmin + * @since 2018-12-24 16:10:41 + */ +@Data +@ApiModel(description = "登录日志") +@TableName("sys_login_record") +public class LoginRecord implements Serializable { + private static final long serialVersionUID = 1L; + public static final int TYPE_LOGIN = 0; // 登录成功 + public static final int TYPE_ERROR = 1; // 登录失败 + public static final int TYPE_LOGOUT = 2; // 退出登录 + public static final int TYPE_REFRESH = 3; // 续签token + + @ApiModelProperty("主键id") + @TableId(type = IdType.AUTO) + private Integer id; + + @ApiModelProperty("用户账号") + private String username; + + @ApiModelProperty("操作系统") + private String os; + + @ApiModelProperty("设备名称") + private String device; + + @ApiModelProperty("浏览器类型") + private String browser; + + @ApiModelProperty("ip地址") + private String ip; + + @ApiModelProperty("操作类型, 0登录成功, 1登录失败, 2退出登录, 3续签token") + private Integer loginType; + + @ApiModelProperty("备注") + private String comments; + + @ApiModelProperty(value = "租户id") + private Integer tenantId; + + @ApiModelProperty("操作时间") + private Date createTime; + + @ApiModelProperty("修改时间") + private Date updateTime; + + @ApiModelProperty("用户id") + @TableField(exist = false) + private Integer userId; + + @ApiModelProperty("用户昵称") + @TableField(exist = false) + private String nickname; + +} diff --git a/src/main/java/com/eleadmin/common/system/entity/Menu.java b/src/main/java/com/eleadmin/common/system/entity/Menu.java new file mode 100644 index 0000000..29c9be9 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/entity/Menu.java @@ -0,0 +1,81 @@ +package com.eleadmin.common.system.entity; + +import com.baomidou.mybatisplus.annotation.*; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.security.core.GrantedAuthority; + +import java.util.Date; +import java.util.List; + +/** + * 菜单 + * + * @author EleAdmin + * @since 2018-12-24 16:10:17 + */ +@Data +@ApiModel(description = "菜单") +@TableName("sys_menu") +public class Menu implements GrantedAuthority { + private static final long serialVersionUID = 1L; + public static final int TYPE_MENU = 0; // 菜单类型 + public static final int TYPE_BTN = 1; // 按钮类型 + + @ApiModelProperty("菜单id") + @TableId(type = IdType.AUTO) + private Integer menuId; + + @ApiModelProperty("上级id, 0是顶级") + private Integer parentId; + + @ApiModelProperty("菜单名称") + private String title; + + @ApiModelProperty("菜单路由地址") + private String path; + + @ApiModelProperty("菜单组件地址") + private String component; + + @ApiModelProperty("菜单类型, 0菜单, 1按钮") + private Integer menuType; + + @ApiModelProperty("排序号") + private Integer sortNumber; + + @ApiModelProperty("权限标识") + private String authority; + + @ApiModelProperty("菜单图标") + private String icon; + + @ApiModelProperty("是否隐藏, 0否, 1是(仅注册路由不显示左侧菜单)") + private Integer hide; + + @ApiModelProperty("路由元信息") + private String meta; + + @ApiModelProperty("是否删除, 0否, 1是") + @TableLogic + private Integer deleted; + + @ApiModelProperty(value = "租户id") + private Integer tenantId; + + @ApiModelProperty("创建时间") + private Date createTime; + + @ApiModelProperty("修改时间") + private Date updateTime; + + @ApiModelProperty("子菜单") + @TableField(exist = false) + private List children; + + @ApiModelProperty("角色权限树选中状态") + @TableField(exist = false) + private Boolean checked; + +} diff --git a/src/main/java/com/eleadmin/common/system/entity/OperationRecord.java b/src/main/java/com/eleadmin/common/system/entity/OperationRecord.java new file mode 100644 index 0000000..7b217a5 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/entity/OperationRecord.java @@ -0,0 +1,95 @@ +package com.eleadmin.common.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 操作日志 + * + * @author EleAdmin + * @since 2018-12-24 16:10:33 + */ +@Data +@ApiModel(description = "操作日志") +@TableName("sys_operation_record") +public class OperationRecord implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId(type = IdType.AUTO) + private Integer id; + + @ApiModelProperty("用户id") + private Integer userId; + + @ApiModelProperty("操作模块") + private String module; + + @ApiModelProperty("操作功能") + private String description; + + @ApiModelProperty("请求地址") + private String url; + + @ApiModelProperty("请求方式") + private String requestMethod; + + @ApiModelProperty("调用方法") + private String method; + + @ApiModelProperty("请求参数") + private String params; + + @ApiModelProperty("返回结果") + private String result; + + @ApiModelProperty("异常信息") + private String error; + + @ApiModelProperty("备注") + private String comments; + + @ApiModelProperty("消耗时间, 单位毫秒") + private Long spendTime; + + @ApiModelProperty("操作系统") + private String os; + + @ApiModelProperty("设备名称") + private String device; + + @ApiModelProperty("浏览器类型") + private String browser; + + @ApiModelProperty("ip地址") + private String ip; + + @ApiModelProperty("状态, 0成功, 1异常") + private Integer status; + + @ApiModelProperty(value = "租户id") + private Integer tenantId; + + @ApiModelProperty("操作时间") + private Date createTime; + + @ApiModelProperty("修改时间") + private Date updateTime; + + @ApiModelProperty("用户昵称") + @TableField(exist = false) + private String nickname; + + @ApiModelProperty("用户账号") + @TableField(exist = false) + private String username; + +} diff --git a/src/main/java/com/eleadmin/common/system/entity/Organization.java b/src/main/java/com/eleadmin/common/system/entity/Organization.java new file mode 100644 index 0000000..1cceb1f --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/entity/Organization.java @@ -0,0 +1,77 @@ +package com.eleadmin.common.system.entity; + +import com.baomidou.mybatisplus.annotation.*; + +import java.util.Date; +import java.io.Serializable; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 组织机构 + * + * @author EleAdmin + * @since 2020-03-14 11:29:04 + */ +@Data +@ApiModel(description = "组织机构") +@TableName("sys_organization") +public class Organization implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "机构id") + @TableId(type = IdType.AUTO) + private Integer organizationId; + + @ApiModelProperty(value = "上级id, 0是顶级") + private Integer parentId; + + @ApiModelProperty(value = "机构名称") + private String organizationName; + + @ApiModelProperty(value = "机构全称") + private String organizationFullName; + + @ApiModelProperty(value = "机构代码") + private String organizationCode; + + @ApiModelProperty(value = "机构类型, 字典标识") + private String organizationType; + + @ApiModelProperty(value = "负责人id") + private Integer leaderId; + + @ApiModelProperty(value = "排序号") + private Integer sortNumber; + + @ApiModelProperty(value = "备注") + private String comments; + + @ApiModelProperty(value = "是否删除, 0否, 1是") + @TableLogic + private Integer deleted; + + @ApiModelProperty(value = "租户id") + private Integer tenantId; + + @ApiModelProperty(value = "创建时间") + private Date createTime; + + @ApiModelProperty(value = "修改时间") + private Date updateTime; + + @ApiModelProperty(value = "机构类型名称") + @TableField(exist = false) + private String organizationTypeName; + + @ApiModelProperty(value = "负责人姓名") + @TableField(exist = false) + private String leaderNickname; + + @ApiModelProperty(value = "负责人账号") + @TableField(exist = false) + private String leaderUsername; + +} diff --git a/src/main/java/com/eleadmin/common/system/entity/Role.java b/src/main/java/com/eleadmin/common/system/entity/Role.java new file mode 100644 index 0000000..a06d447 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/entity/Role.java @@ -0,0 +1,53 @@ +package com.eleadmin.common.system.entity; + +import com.baomidou.mybatisplus.annotation.*; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 角色 + * + * @author EleAdmin + * @since 2018-12-24 16:10:01 + */ +@Data +@ApiModel(description = "角色") +@TableName("sys_role") +public class Role implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("角色id") + @TableId(type = IdType.AUTO) + private Integer roleId; + + @ApiModelProperty("角色标识") + private String roleCode; + + @ApiModelProperty("角色名称") + private String roleName; + + @ApiModelProperty("备注") + private String comments; + + @ApiModelProperty("是否删除, 0否, 1是") + @TableLogic + private Integer deleted; + + @ApiModelProperty(value = "租户id") + private Integer tenantId; + + @ApiModelProperty("创建时间") + private Date createTime; + + @ApiModelProperty("修改时间") + private Date updateTime; + + @ApiModelProperty(hidden = true) + @TableField(exist = false) + private Integer userId; + +} diff --git a/src/main/java/com/eleadmin/common/system/entity/RoleMenu.java b/src/main/java/com/eleadmin/common/system/entity/RoleMenu.java new file mode 100644 index 0000000..bc057f6 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/entity/RoleMenu.java @@ -0,0 +1,44 @@ +package com.eleadmin.common.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 角色菜单 + * + * @author EleAdmin + * @since 2018-12-24 16:10:54 + */ +@Data +@ApiModel(description = "角色权限") +@TableName("sys_role_menu") +public class RoleMenu implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId(type = IdType.AUTO) + private Integer id; + + @ApiModelProperty("角色id") + private Integer roleId; + + @ApiModelProperty("菜单id") + private Integer menuId; + + @ApiModelProperty(value = "租户id") + private Integer tenantId; + + @ApiModelProperty("创建时间") + private Date createTime; + + @ApiModelProperty("修改时间") + private Date updateTime; + +} diff --git a/src/main/java/com/eleadmin/common/system/entity/Tenant.java b/src/main/java/com/eleadmin/common/system/entity/Tenant.java new file mode 100644 index 0000000..dc8208b --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/entity/Tenant.java @@ -0,0 +1,46 @@ +package com.eleadmin.common.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableLogic; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 租户 + * + * @author EleAdmin + * @since 2021-08-28 11:31:06 + */ +@Data +@ApiModel(description = "租户") +@TableName("sys_tenant") +public class Tenant implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("租户id") + @TableId(type = IdType.AUTO) + private Integer tenantId; + + @ApiModelProperty("租户名称") + private String tenantName; + + @ApiModelProperty("备注") + private String comments; + + @ApiModelProperty("是否删除, 0否, 1是") + @TableLogic + private Integer deleted; + + @ApiModelProperty("创建时间") + private Date createTime; + + @ApiModelProperty("修改时间") + private Date updateTime; + +} diff --git a/src/main/java/com/eleadmin/common/system/entity/User.java b/src/main/java/com/eleadmin/common/system/entity/User.java new file mode 100644 index 0000000..9de8b87 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/entity/User.java @@ -0,0 +1,124 @@ +package com.eleadmin.common.system.entity; + +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.security.core.userdetails.UserDetails; + +import java.util.Date; +import java.util.List; + +/** + * 用户 + * + * @author EleAdmin + * @since 2018-12-24 16:10:13 + */ +@Data +@ApiModel(description = "用户") +@TableName("sys_user") +public class User implements UserDetails { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("用户id") + @TableId(type = IdType.AUTO) + private Integer userId; + + @ApiModelProperty("账号") + private String username; + + @ApiModelProperty("密码") + private String password; + + @ApiModelProperty("昵称") + private String nickname; + + @ApiModelProperty("头像") + private String avatar; + + @ApiModelProperty("性别, 字典标识") + private String sex; + + @ApiModelProperty("手机号") + private String phone; + + @ApiModelProperty("邮箱") + private String email; + + @ApiModelProperty("邮箱是否验证, 0否, 1是") + private Integer emailVerified; + + @ApiModelProperty("真实姓名") + private String realName; + + @ApiModelProperty("身份证号") + private String idCard; + + @ApiModelProperty("出生日期") + @JsonFormat(pattern = "yyyy-MM-dd") + private Date birthday; + + @ApiModelProperty("街道地址") + private String address; + + @ApiModelProperty("个人简介") + private String introduction; + + @ApiModelProperty("机构id") + private Integer organizationId; + + @ApiModelProperty("状态, 0正常, 1冻结") + private Integer status; + + @ApiModelProperty("是否删除, 0否, 1是") + @TableLogic + private Integer deleted; + + @ApiModelProperty(value = "租户id") + private Integer tenantId; + + @ApiModelProperty("注册时间") + private Date createTime; + + @ApiModelProperty("修改时间") + private Date updateTime; + + @ApiModelProperty("机构名称") + @TableField(exist = false) + private String organizationName; + + @ApiModelProperty("性别名称") + @TableField(exist = false) + private String sexName; + + @ApiModelProperty("角色列表") + @TableField(exist = false) + private List roles; + + @ApiModelProperty("权限列表") + @TableField(exist = false) + private List authorities; + + @Override + public boolean isAccountNonExpired() { + return true; + } + + @Override + public boolean isAccountNonLocked() { + return this.status != null && this.status == 0; + } + + @Override + public boolean isCredentialsNonExpired() { + return true; + } + + @Override + public boolean isEnabled() { + return true; + } + +} diff --git a/src/main/java/com/eleadmin/common/system/entity/UserFile.java b/src/main/java/com/eleadmin/common/system/entity/UserFile.java new file mode 100644 index 0000000..3b3a12f --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/entity/UserFile.java @@ -0,0 +1,76 @@ +package com.eleadmin.common.system.entity; + +import com.baomidou.mybatisplus.annotation.*; + +import java.io.Serializable; +import java.util.Date; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 用户文件 + * + * @author EleAdmin + * @since 2022-07-21 14:34:40 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value = "UserFile对象", description = "用户文件") +@TableName("sys_user_file") +public class UserFile implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键id") + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @ApiModelProperty(value = "用户id") + private Integer userId; + + @ApiModelProperty(value = "文件名称") + private String name; + + @ApiModelProperty(value = "是否是文件夹, 0否, 1是") + private Integer isDirectory; + + @ApiModelProperty(value = "上级id") + private Integer parentId; + + @ApiModelProperty(value = "文件路径") + private String path; + + @ApiModelProperty(value = "文件大小") + private Integer length; + + @ApiModelProperty("文件类型") + private String contentType; + + @ApiModelProperty(value = "是否删除, 0否, 1是") + @TableLogic + private Integer deleted; + + @ApiModelProperty(value = "租户id") + private Integer tenantId; + + @ApiModelProperty(value = "创建时间") + private Date createTime; + + @ApiModelProperty(value = "修改时间") + private Date updateTime; + + @ApiModelProperty("文件访问地址") + @TableField(exist = false) + private String url; + + @ApiModelProperty("文件缩略图访问地址") + @TableField(exist = false) + private String thumbnail; + + @ApiModelProperty("文件下载地址") + @TableField(exist = false) + private String downloadUrl; + +} diff --git a/src/main/java/com/eleadmin/common/system/entity/UserRole.java b/src/main/java/com/eleadmin/common/system/entity/UserRole.java new file mode 100644 index 0000000..c7b5551 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/entity/UserRole.java @@ -0,0 +1,46 @@ +package com.eleadmin.common.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 用户角色 + * + * @author EleAdmin + * @since 2018-12-24 16:10:23 + */ +@Data +@ApiModel(description = "用户角色") +@TableName("sys_user_role") +public class UserRole implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId(type = IdType.AUTO) + private Integer id; + + @ApiModelProperty("用户id") + private Integer userId; + + @ApiModelProperty("角色id") + private Integer roleId; + + @ApiModelProperty("创建时间") + private Date createTime; + + @ApiModelProperty("修改时间") + private Date updateTime; + + @ApiModelProperty("角色名称") + @TableField(exist = false) + private String roleName; + +} diff --git a/src/main/java/com/eleadmin/common/system/mapper/DictionaryDataMapper.java b/src/main/java/com/eleadmin/common/system/mapper/DictionaryDataMapper.java new file mode 100644 index 0000000..999cedc --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/mapper/DictionaryDataMapper.java @@ -0,0 +1,47 @@ +package com.eleadmin.common.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.eleadmin.common.system.entity.DictionaryData; +import com.eleadmin.common.system.param.DictionaryDataParam; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 字典数据Mapper + * + * @author EleAdmin + * @since 2020-03-14 11:29:04 + */ +public interface DictionaryDataMapper extends BaseMapper { + + /** + * 分页查询 + * + * @param page 分页对象 + * @param param 查询参数 + * @return List + */ + List selectPageRel(@Param("page") IPage page, + @Param("param") DictionaryDataParam param); + + /** + * 查询全部 + * + * @param param 查询参数 + * @return List + */ + List selectListRel(@Param("param") DictionaryDataParam param); + + /** + * 根据dictCode和dictDataName查询 + * + * @param dictCode 字典标识 + * @param dictDataName 字典项名称 + * @return List + */ + List getByDictCodeAndName(@Param("dictCode") String dictCode, + @Param("dictDataName") String dictDataName); + +} diff --git a/src/main/java/com/eleadmin/common/system/mapper/DictionaryMapper.java b/src/main/java/com/eleadmin/common/system/mapper/DictionaryMapper.java new file mode 100644 index 0000000..873c133 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/mapper/DictionaryMapper.java @@ -0,0 +1,14 @@ +package com.eleadmin.common.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.eleadmin.common.system.entity.Dictionary; + +/** + * 字典Mapper + * + * @author EleAdmin + * @since 2020-03-14 11:29:03 + */ +public interface DictionaryMapper extends BaseMapper { + +} diff --git a/src/main/java/com/eleadmin/common/system/mapper/EmailRecordMapper.java b/src/main/java/com/eleadmin/common/system/mapper/EmailRecordMapper.java new file mode 100644 index 0000000..1da32b7 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/mapper/EmailRecordMapper.java @@ -0,0 +1,14 @@ +package com.eleadmin.common.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.eleadmin.common.system.entity.EmailRecord; + +/** + * 邮件记录Mapper + * + * @author EleAdmin + * @since 2020-03-14 11:29:04 + */ +public interface EmailRecordMapper extends BaseMapper { + +} diff --git a/src/main/java/com/eleadmin/common/system/mapper/FileRecordMapper.java b/src/main/java/com/eleadmin/common/system/mapper/FileRecordMapper.java new file mode 100644 index 0000000..5adf180 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/mapper/FileRecordMapper.java @@ -0,0 +1,47 @@ +package com.eleadmin.common.system.mapper; + +import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.eleadmin.common.system.entity.FileRecord; +import com.eleadmin.common.system.param.FileRecordParam; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 文件上传记录Mapper + * + * @author EleAdmin + * @since 2021-08-30 11:18:04 + */ +public interface FileRecordMapper extends BaseMapper { + + /** + * 分页查询 + * + * @param page 分页对象 + * @param param 查询参数 + * @return List + */ + List selectPageRel(@Param("page") IPage page, + @Param("param") FileRecordParam param); + + /** + * 查询全部 + * + * @param param 查询参数 + * @return List + */ + List selectListRel(@Param("param") FileRecordParam param); + + /** + * 根据path查询 + * + * @param path 文件路径 + * @return FileRecord + */ + @InterceptorIgnore(tenantLine = "true") + List getByIdPath(@Param("path") String path); + +} diff --git a/src/main/java/com/eleadmin/common/system/mapper/LoginRecordMapper.java b/src/main/java/com/eleadmin/common/system/mapper/LoginRecordMapper.java new file mode 100644 index 0000000..b17e651 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/mapper/LoginRecordMapper.java @@ -0,0 +1,48 @@ +package com.eleadmin.common.system.mapper; + +import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.eleadmin.common.system.entity.LoginRecord; +import com.eleadmin.common.system.param.LoginRecordParam; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 登录日志Mapper + * + * @author EleAdmin + * @since 2018-12-24 16:10:11 + */ +public interface LoginRecordMapper extends BaseMapper { + + /** + * 添加, 排除租户拦截 + * + * @param entity LoginRecord + * @return int + */ + @Override + @InterceptorIgnore(tenantLine = "true") + int insert(LoginRecord entity); + + /** + * 分页查询 + * + * @param page 分页对象 + * @param param 查询参数 + * @return List + */ + List selectPageRel(@Param("page") IPage page, + @Param("param") LoginRecordParam param); + + /** + * 查询全部 + * + * @param param 查询参数 + * @return List + */ + List selectListRel(@Param("param") LoginRecordParam param); + +} diff --git a/src/main/java/com/eleadmin/common/system/mapper/MenuMapper.java b/src/main/java/com/eleadmin/common/system/mapper/MenuMapper.java new file mode 100644 index 0000000..9758257 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/mapper/MenuMapper.java @@ -0,0 +1,14 @@ +package com.eleadmin.common.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.eleadmin.common.system.entity.Menu; + +/** + * 菜单Mapper + * + * @author EleAdmin + * @since 2018-12-24 16:10:32 + */ +public interface MenuMapper extends BaseMapper { + +} diff --git a/src/main/java/com/eleadmin/common/system/mapper/OperationRecordMapper.java b/src/main/java/com/eleadmin/common/system/mapper/OperationRecordMapper.java new file mode 100644 index 0000000..af6394a --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/mapper/OperationRecordMapper.java @@ -0,0 +1,48 @@ +package com.eleadmin.common.system.mapper; + +import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.eleadmin.common.system.entity.OperationRecord; +import com.eleadmin.common.system.param.OperationRecordParam; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 操作日志Mapper + * + * @author EleAdmin + * @since 2018-12-24 16:10:03 + */ +public interface OperationRecordMapper extends BaseMapper { + + /** + * 添加, 排除租户拦截 + * + * @param entity OperationRecord + * @return int + */ + @Override + @InterceptorIgnore(tenantLine = "true") + int insert(OperationRecord entity); + + /** + * 分页查询 + * + * @param page 分页参数 + * @param param 查询参数 + * @return List + */ + List selectPageRel(@Param("page") IPage page, + @Param("param") OperationRecordParam param); + + /** + * 查询全部 + * + * @param param 查询参数 + * @return List + */ + List selectListRel(@Param("param") OperationRecordParam param); + +} diff --git a/src/main/java/com/eleadmin/common/system/mapper/OrganizationMapper.java b/src/main/java/com/eleadmin/common/system/mapper/OrganizationMapper.java new file mode 100644 index 0000000..965cc05 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/mapper/OrganizationMapper.java @@ -0,0 +1,37 @@ +package com.eleadmin.common.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.eleadmin.common.system.entity.Organization; +import com.eleadmin.common.system.param.OrganizationParam; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 组织机构Mapper + * + * @author EleAdmin + * @since 2020-03-14 11:29:04 + */ +public interface OrganizationMapper extends BaseMapper { + + /** + * 分页查询 + * + * @param page 分页对象 + * @param param 查询参数 + * @return List + */ + List selectPageRel(@Param("page") IPage page, + @Param("param") OrganizationParam param); + + /** + * 查询全部 + * + * @param param 查询参数 + * @return List + */ + List selectListRel(@Param("param") OrganizationParam param); + +} diff --git a/src/main/java/com/eleadmin/common/system/mapper/RoleMapper.java b/src/main/java/com/eleadmin/common/system/mapper/RoleMapper.java new file mode 100644 index 0000000..d551e11 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/mapper/RoleMapper.java @@ -0,0 +1,14 @@ +package com.eleadmin.common.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.eleadmin.common.system.entity.Role; + +/** + * 角色Mapper + * + * @author EleAdmin + * @since 2018-12-24 16:10:44 + */ +public interface RoleMapper extends BaseMapper { + +} diff --git a/src/main/java/com/eleadmin/common/system/mapper/RoleMenuMapper.java b/src/main/java/com/eleadmin/common/system/mapper/RoleMenuMapper.java new file mode 100644 index 0000000..784482e --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/mapper/RoleMenuMapper.java @@ -0,0 +1,39 @@ +package com.eleadmin.common.system.mapper; + +import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.eleadmin.common.system.entity.Menu; +import com.eleadmin.common.system.entity.RoleMenu; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 角色菜单Mapper + * + * @author EleAdmin + * @since 2018-12-24 16:10:21 + */ +public interface RoleMenuMapper extends BaseMapper { + + /** + * 查询用户的菜单 + * + * @param userId 用户id + * @param menuType 菜单类型 + * @return List + */ + @InterceptorIgnore(tenantLine = "true") + List listMenuByUserId(@Param("userId") Integer userId, @Param("menuType") Integer menuType); + + /** + * 根据角色id查询菜单 + * + * @param roleIds 角色id + * @param menuType 菜单类型 + * @return List + */ + @InterceptorIgnore(tenantLine = "true") + List listMenuByRoleIds(@Param("roleIds") List roleIds, @Param("menuType") Integer menuType); + +} diff --git a/src/main/java/com/eleadmin/common/system/mapper/UserFileMapper.java b/src/main/java/com/eleadmin/common/system/mapper/UserFileMapper.java new file mode 100644 index 0000000..2d3a3fa --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/mapper/UserFileMapper.java @@ -0,0 +1,14 @@ +package com.eleadmin.common.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.eleadmin.common.system.entity.UserFile; + +/** + * 用户文件Mapper + * + * @author EleAdmin + * @since 2022-07-21 14:34:40 + */ +public interface UserFileMapper extends BaseMapper { + +} diff --git a/src/main/java/com/eleadmin/common/system/mapper/UserMapper.java b/src/main/java/com/eleadmin/common/system/mapper/UserMapper.java new file mode 100644 index 0000000..9d07ad2 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/mapper/UserMapper.java @@ -0,0 +1,48 @@ +package com.eleadmin.common.system.mapper; + +import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.eleadmin.common.system.entity.User; +import com.eleadmin.common.system.param.UserParam; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 用户Mapper + * + * @author EleAdmin + * @since 2018-12-24 16:10:14 + */ +public interface UserMapper extends BaseMapper { + + /** + * 分页查询 + * + * @param page 分页对象 + * @param param 查询参数 + * @return List + */ + List selectPageRel(@Param("page") IPage page, + @Param("param") UserParam param); + + /** + * 查询全部 + * + * @param param 查询参数 + * @return List + */ + List selectListRel(@Param("param") UserParam param); + + /** + * 根据账号查询 + * + * @param username 账号 + * @param tenantId 租户id + * @return User + */ + @InterceptorIgnore(tenantLine = "true") + User selectByUsername(@Param("username") String username, @Param("tenantId") Integer tenantId); + +} diff --git a/src/main/java/com/eleadmin/common/system/mapper/UserRoleMapper.java b/src/main/java/com/eleadmin/common/system/mapper/UserRoleMapper.java new file mode 100644 index 0000000..b9ad78c --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/mapper/UserRoleMapper.java @@ -0,0 +1,45 @@ +package com.eleadmin.common.system.mapper; + +import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.eleadmin.common.system.entity.Role; +import com.eleadmin.common.system.entity.UserRole; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 用户角色Mapper + * + * @author EleAdmin + * @since 2018-12-24 16:10:02 + */ +public interface UserRoleMapper extends BaseMapper { + + /** + * 批量添加用户角色 + * + * @param userId 用户id + * @param roleIds 角色id集合 + * @return int + */ + int insertBatch(@Param("userId") Integer userId, @Param("roleIds") List roleIds); + + /** + * 根据用户id查询角色 + * + * @param userId 用户id + * @return List + */ + @InterceptorIgnore(tenantLine = "true") + List selectByUserId(@Param("userId") Integer userId); + + /** + * 批量根据用户id查询角色 + * + * @param userIds 用户id集合 + * @return List + */ + List selectByUserIds(@Param("userIds") List userIds); + +} diff --git a/src/main/java/com/eleadmin/common/system/mapper/xml/DictionaryDataMapper.xml b/src/main/java/com/eleadmin/common/system/mapper/xml/DictionaryDataMapper.xml new file mode 100644 index 0000000..dc0ff9e --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/mapper/xml/DictionaryDataMapper.xml @@ -0,0 +1,71 @@ + + + + + + + SELECT a.*, + b.dict_code, + b.dict_name + FROM sys_dictionary_data a + LEFT JOIN sys_dictionary b ON a.dict_id = b.dict_id + + AND a.deleted = 0 + + AND a.dict_data_id = #{param.dictDataId} + + + AND a.dict_id = #{param.dictId} + + + AND a.dict_data_code LIKE CONCAT('%', #{param.dictDataCode}, '%') + + + AND a.dict_data_name LIKE CONCAT('%', #{param.dictDataName}, '%') + + + AND a.comments LIKE CONCAT('%', #{param.comments}, '%') + + + AND a.create_time >= #{param.createTimeStart} + + + AND a.create_time <= #{param.createTimeEnd} + + + AND b.dict_code = #{param.dictCode} + + + AND b.dict_name = #{param.dictName} + + + AND ( + a.dict_data_code LIKE CONCAT('%', #{param.keywords}, '%') + OR a.dict_data_name LIKE CONCAT('%', #{param.keywords}, '%') + ) + + + + + + + + + + + + + + diff --git a/src/main/java/com/eleadmin/common/system/mapper/xml/DictionaryMapper.xml b/src/main/java/com/eleadmin/common/system/mapper/xml/DictionaryMapper.xml new file mode 100644 index 0000000..bd5f10f --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/mapper/xml/DictionaryMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/java/com/eleadmin/common/system/mapper/xml/EmailRecordMapper.xml b/src/main/java/com/eleadmin/common/system/mapper/xml/EmailRecordMapper.xml new file mode 100644 index 0000000..b1fe884 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/mapper/xml/EmailRecordMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/java/com/eleadmin/common/system/mapper/xml/FileRecordMapper.xml b/src/main/java/com/eleadmin/common/system/mapper/xml/FileRecordMapper.xml new file mode 100644 index 0000000..454d7ab --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/mapper/xml/FileRecordMapper.xml @@ -0,0 +1,66 @@ + + + + + + + SELECT a.*, + b.username create_username, + b.nickname create_nickname + FROM sys_file_record a + LEFT JOIN sys_user b ON a.create_user_id = b.user_id + + + AND a.id = #{param.id} + + + AND a.`name` LIKE CONCAT('%', #{param.name}, '%') + + + AND a.path LIKE CONCAT('%', #{param.path}, '%') + + + AND a.create_user_id = #{param.createUserId} + + + AND a.comments LIKE CONCAT('%', #{param.comments}, '%') + + + AND a.create_time >= #{param.createTimeStart} + + + AND a.create_time <= #{param.createTimeEnd} + + + AND a.deleted = #{param.deleted} + + + AND a.deleted = 0 + + + AND b.username = #{param.createUsername} + + + AND b.nickname LIKE CONCAT('%', #{param.createNickname}, '%') + + + + + + + + + + + + + + diff --git a/src/main/java/com/eleadmin/common/system/mapper/xml/LoginRecordMapper.xml b/src/main/java/com/eleadmin/common/system/mapper/xml/LoginRecordMapper.xml new file mode 100644 index 0000000..1cacef8 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/mapper/xml/LoginRecordMapper.xml @@ -0,0 +1,62 @@ + + + + + + + SELECT a.*, + b.user_id, + b.nickname + FROM sys_login_record a + LEFT JOIN sys_user b ON a.username = b.username + + + AND a.id = #{param.id} + + + AND a.username LIKE CONCAT('%', #{param.username}, '%') + + + AND a.os LIKE CONCAT('%', #{param.os}, '%') + + + AND a.device LIKE CONCAT('%', #{param.device}, '%') + + + AND a.browser LIKE CONCAT('%', #{param.browser}, '%') + + + AND a.ip LIKE CONCAT('%', #{param.ip}, '%') + + + AND a.login_type LIKE CONCAT('%', #{param.loginType}, '%') + + + AND a.comments LIKE CONCAT('%', #{param.comments}, '%') + + + AND a.create_time >= #{param.createTimeStart} + + + AND a.create_time <= #{param.createTimeEnd} + + + AND b.user_id = #{param.userId} + + + AND b.nickname LIKE CONCAT('%', #{param.nickname}, '%') + + + + + + + + + + + diff --git a/src/main/java/com/eleadmin/common/system/mapper/xml/MenuMapper.xml b/src/main/java/com/eleadmin/common/system/mapper/xml/MenuMapper.xml new file mode 100644 index 0000000..227011c --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/mapper/xml/MenuMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/java/com/eleadmin/common/system/mapper/xml/OperationRecordMapper.xml b/src/main/java/com/eleadmin/common/system/mapper/xml/OperationRecordMapper.xml new file mode 100644 index 0000000..dfe84b9 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/mapper/xml/OperationRecordMapper.xml @@ -0,0 +1,71 @@ + + + + + + + SELECT a.*, + b.nickname, + b.username + FROM sys_operation_record a + LEFT JOIN sys_user b ON a.user_id = b.user_id + + + AND a.id = #{param.id} + + + AND a.user_id = #{param.userId} + + + AND a.module LIKE CONCAT('%', #{param.module}, '%') + + + AND a.description LIKE CONCAT('%', #{param.description}, '%') + + + AND a.url LIKE CONCAT('%', #{param.url}, '%') + + + AND a.request_method = #{param.requestMethod} + + + AND a.method LIKE CONCAT('%', #{param.method}, '%') + + + AND a.description LIKE CONCAT('%', #{param.description}, '%') + + + AND a.ip LIKE CONCAT('%', #{param.ip}, '%') + + + AND a.comments LIKE CONCAT('%', #{param.comments}, '%') + + + AND a.`status` = #{param.status} + + + AND a.create_time >= #{param.createTimeStart} + + + AND a.create_time <= #{param.createTimeEnd} + + + AND b.username LIKE CONCAT('%', #{param.username}, '%') + + + AND b.nickname LIKE CONCAT('%', #{param.nickname}, '%') + + + + + + + + + + + diff --git a/src/main/java/com/eleadmin/common/system/mapper/xml/OrganizationMapper.xml b/src/main/java/com/eleadmin/common/system/mapper/xml/OrganizationMapper.xml new file mode 100644 index 0000000..95f7ed5 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/mapper/xml/OrganizationMapper.xml @@ -0,0 +1,81 @@ + + + + + + + SELECT ta.* + FROM sys_dictionary_data ta + LEFT JOIN sys_dictionary tb + ON ta.dict_id = tb.dict_id + AND tb.deleted = 0 + WHERE ta.deleted = 0 + AND tb.dict_code = 'organization_type' + + + + + SELECT a.*, + b.dict_data_name organization_type_name, + c.nickname leader_nickname, + c.username leader_username + FROM sys_organization a + LEFT JOIN ( + + ) b ON a.organization_type = b.dict_data_code + LEFT JOIN sys_user c ON a.leader_id = c.user_id + + AND a.deleted = 0 + + AND a.organization_id = #{param.organizationId} + + + AND a.parent_id = #{param.parentId} + + + AND a.organization_name LIKE CONCAT('%', #{param.organizationName}, '%') + + + AND a.organization_full_name LIKE CONCAT('%', #{param.organizationFullName}, '%') + + + AND a.organization_code LIKE CONCAT('%', #{param.organizationCode}, '%') + + + AND a.organization_type = #{param.organizationType} + + + AND a.leader_id = #{param.leaderId} + + + AND a.comments LIKE CONCAT('%', #{param.comments}, '%') + + + AND a.create_time >= #{param.createTimeStart} + + + AND a.create_time <= #{param.createTimeEnd} + + + AND b.dict_data_name LIKE CONCAT('%', #{param.organizationTypeName}, '%') + + + AND c.nickname LIKE CONCAT('%', #{param.leaderNickname}, '%') + + + AND c.username LIKE CONCAT('%', #{param.leaderUsername}, '%') + + + + + + + + + + + diff --git a/src/main/java/com/eleadmin/common/system/mapper/xml/RoleMapper.xml b/src/main/java/com/eleadmin/common/system/mapper/xml/RoleMapper.xml new file mode 100644 index 0000000..aa5223d --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/mapper/xml/RoleMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/java/com/eleadmin/common/system/mapper/xml/RoleMenuMapper.xml b/src/main/java/com/eleadmin/common/system/mapper/xml/RoleMenuMapper.xml new file mode 100644 index 0000000..1d2b6ac --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/mapper/xml/RoleMenuMapper.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + diff --git a/src/main/java/com/eleadmin/common/system/mapper/xml/UserFileMapper.xml b/src/main/java/com/eleadmin/common/system/mapper/xml/UserFileMapper.xml new file mode 100644 index 0000000..6f9693c --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/mapper/xml/UserFileMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/java/com/eleadmin/common/system/mapper/xml/UserMapper.xml b/src/main/java/com/eleadmin/common/system/mapper/xml/UserMapper.xml new file mode 100644 index 0000000..354bb87 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/mapper/xml/UserMapper.xml @@ -0,0 +1,140 @@ + + + + + + + SELECT ta.* + FROM sys_dictionary_data ta + LEFT JOIN sys_dictionary tb + ON ta.dict_id = tb.dict_id + AND tb.deleted = 0 + WHERE ta.deleted = 0 + AND tb.dict_code = 'sex' + + + + + SELECT a.user_id, + GROUP_CONCAT(b.role_name) role_name + FROM sys_user_role a + LEFT JOIN sys_role b ON a.role_id = b.role_id + GROUP BY a.user_id + + + + + SELECT a.*, + b.organization_name, + c.dict_data_name sex_name + FROM sys_user a + LEFT JOIN sys_organization b ON a.organization_id = b.organization_id + LEFT JOIN ( + + ) c ON a.sex = c.dict_data_code + LEFT JOIN( + + ) d ON a.user_id = d.user_id + + + AND a.user_id = #{param.userId} + + + AND a.username LIKE CONCAT('%', #{param.username}, '%') + + + AND a.nickname LIKE CONCAT('%', #{param.nickname}, '%') + + + AND a.sex = #{param.sex} + + + AND a.phone LIKE CONCAT('%', #{param.phone}, '%') + + + AND a.email LIKE CONCAT('%', #{param.email}, '%') + + + AND a.email_verified = #{param.emailVerified} + + + AND a.real_name LIKE CONCAT('%', #{param.realName}, '%') + + + AND a.id_card LIKE CONCAT('%', #{param.idCard}, '%') + + + AND a.birthday LIKE CONCAT('%', #{param.birthday}, '%') + + + AND a.organization_id = #{param.organizationId} + + + AND a.`status` = #{param.status} + + + AND a.create_time >= #{param.createTimeStart} + + + AND a.create_time <= #{param.createTimeEnd} + + + AND a.deleted = #{param.deleted} + + + AND a.deleted = 0 + + + AND a.user_id IN (SELECT user_id FROM sys_user_role WHERE role_id=#{param.roleId}) + + + AND b.organization_name LIKE CONCAT('%', #{param.organizationName}, '%') + + + AND c.dict_data_name = #{param.sexName} + + + AND ( + a.username LIKE CONCAT('%', #{param.keywords}, '%') + OR a.nickname LIKE CONCAT('%', #{param.keywords}, '%') + OR b.organization_name LIKE CONCAT('%', #{param.keywords}, '%') + OR c.dict_data_name LIKE CONCAT('%', #{param.keywords}, '%') + OR d.role_name LIKE CONCAT('%', #{param.keywords}, '%') + ) + + + + + + + + + + + + + + diff --git a/src/main/java/com/eleadmin/common/system/mapper/xml/UserRoleMapper.xml b/src/main/java/com/eleadmin/common/system/mapper/xml/UserRoleMapper.xml new file mode 100644 index 0000000..e93ff5d --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/mapper/xml/UserRoleMapper.xml @@ -0,0 +1,34 @@ + + + + + + INSERT INTO sys_user_role(user_id, role_id) VALUES + + (#{userId}, #{roleId}) + + + + + + + + diff --git a/src/main/java/com/eleadmin/common/system/param/DictionaryDataParam.java b/src/main/java/com/eleadmin/common/system/param/DictionaryDataParam.java new file mode 100644 index 0000000..233c6cb --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/param/DictionaryDataParam.java @@ -0,0 +1,55 @@ +package com.eleadmin.common.system.param; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.eleadmin.common.core.annotation.QueryField; +import com.eleadmin.common.core.annotation.QueryType; +import com.eleadmin.common.core.web.BaseParam; +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 字典数据查询参数 + * + * @author EleAdmin + * @since 2021-08-28 22:12:02 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(description = "字典数据查询参数") +public class DictionaryDataParam extends BaseParam { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "字典数据id") + @QueryField(type = QueryType.EQ) + private Integer dictDataId; + + @ApiModelProperty(value = "字典id") + @QueryField(type = QueryType.EQ) + private Integer dictId; + + @ApiModelProperty(value = "字典数据标识") + private String dictDataCode; + + @ApiModelProperty(value = "字典数据名称") + private String dictDataName; + + @ApiModelProperty(value = "备注") + private String comments; + + @ApiModelProperty(value = "字典代码") + @TableField(exist = false) + private String dictCode; + + @ApiModelProperty(value = "字典名称") + @TableField(exist = false) + private String dictName; + + @ApiModelProperty(value = "字典数据代码或字典数据名称") + @TableField(exist = false) + private String keywords; + +} diff --git a/src/main/java/com/eleadmin/common/system/param/DictionaryParam.java b/src/main/java/com/eleadmin/common/system/param/DictionaryParam.java new file mode 100644 index 0000000..ab147ce --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/param/DictionaryParam.java @@ -0,0 +1,38 @@ +package com.eleadmin.common.system.param; + +import com.eleadmin.common.core.annotation.QueryField; +import com.eleadmin.common.core.annotation.QueryType; +import com.eleadmin.common.core.web.BaseParam; +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 字典查询参数 + * + * @author EleAdmin + * @since 2021-08-28 22:12:01 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(description = "字典查询参数") +public class DictionaryParam extends BaseParam { + private static final long serialVersionUID = 1L; + + @QueryField(type = QueryType.EQ) + @ApiModelProperty(value = "字典id") + private Integer dictId; + + @ApiModelProperty(value = "字典标识") + private String dictCode; + + @ApiModelProperty(value = "字典名称") + private String dictName; + + @ApiModelProperty(value = "备注") + private String comments; + +} diff --git a/src/main/java/com/eleadmin/common/system/param/FileRecordParam.java b/src/main/java/com/eleadmin/common/system/param/FileRecordParam.java new file mode 100644 index 0000000..f46809b --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/param/FileRecordParam.java @@ -0,0 +1,56 @@ +package com.eleadmin.common.system.param; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableLogic; +import com.eleadmin.common.core.annotation.QueryField; +import com.eleadmin.common.core.annotation.QueryType; +import com.eleadmin.common.core.web.BaseParam; +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 文件上传记录查询参数 + * + * @author EleAdmin + * @since 2021-08-30 11:29:31 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(description = "文件上传记录查询参数") +public class FileRecordParam extends BaseParam { + private static final long serialVersionUID = 1L; + + @QueryField(type = QueryType.EQ) + @ApiModelProperty("主键id") + private Integer id; + + @ApiModelProperty("文件名称") + private String name; + + @ApiModelProperty("文件存储路径") + private String path; + + @QueryField(type = QueryType.EQ) + @ApiModelProperty("创建人") + private Integer createUserId; + + @ApiModelProperty("备注") + private String comments; + + @ApiModelProperty("是否删除, 0否, 1是") + @TableLogic + private Integer deleted; + + @ApiModelProperty("创建人账号") + @TableField(exist = false) + private String createUsername; + + @ApiModelProperty("创建人名称") + @TableField(exist = false) + private String createNickname; + +} diff --git a/src/main/java/com/eleadmin/common/system/param/LoginParam.java b/src/main/java/com/eleadmin/common/system/param/LoginParam.java new file mode 100644 index 0000000..aaff43b --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/param/LoginParam.java @@ -0,0 +1,31 @@ +package com.eleadmin.common.system.param; + +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * 登录参数 + * + * @author EleAdmin + * @since 2021-08-30 17:35:16 + */ +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(description = "登录参数") +public class LoginParam implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("账号") + private String username; + + @ApiModelProperty("密码") + private String password; + + @ApiModelProperty(value = "租户id") + private Integer tenantId; + +} diff --git a/src/main/java/com/eleadmin/common/system/param/LoginRecordParam.java b/src/main/java/com/eleadmin/common/system/param/LoginRecordParam.java new file mode 100644 index 0000000..2805e15 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/param/LoginRecordParam.java @@ -0,0 +1,60 @@ +package com.eleadmin.common.system.param; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.eleadmin.common.core.annotation.QueryField; +import com.eleadmin.common.core.annotation.QueryType; +import com.eleadmin.common.core.web.BaseParam; +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 登录日志查询参数 + * + * @author EleAdmin + * @since 2021-08-29 19:09:23 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(description = "登录日志查询参数") +public class LoginRecordParam extends BaseParam { + private static final long serialVersionUID = 1L; + + @QueryField(type = QueryType.EQ) + @ApiModelProperty("主键id") + private Integer id; + + @ApiModelProperty("用户账号") + private String username; + + @ApiModelProperty("操作系统") + private String os; + + @ApiModelProperty("设备名") + private String device; + + @ApiModelProperty("浏览器类型") + private String browser; + + @ApiModelProperty("ip地址") + private String ip; + + @QueryField(type = QueryType.EQ) + @ApiModelProperty("操作类型, 0登录成功, 1登录失败, 2退出登录, 3续签token") + private Integer loginType; + + @ApiModelProperty("备注") + private String comments; + + @ApiModelProperty("用户id") + @TableField(exist = false) + private Integer userId; + + @ApiModelProperty("用户昵称") + @TableField(exist = false) + private String nickname; + +} diff --git a/src/main/java/com/eleadmin/common/system/param/MenuParam.java b/src/main/java/com/eleadmin/common/system/param/MenuParam.java new file mode 100644 index 0000000..63ca8b6 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/param/MenuParam.java @@ -0,0 +1,56 @@ +package com.eleadmin.common.system.param; + +import com.eleadmin.common.core.annotation.QueryField; +import com.eleadmin.common.core.annotation.QueryType; +import com.eleadmin.common.core.web.BaseParam; +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 菜单查询参数 + * + * @author EleAdmin + * @since 2021-08-29 19:36:10 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(description = "菜单查询参数") +public class MenuParam extends BaseParam { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("菜单id") + @QueryField(type = QueryType.EQ) + private Integer menuId; + + @ApiModelProperty("上级id, 0是顶级") + @QueryField(type = QueryType.EQ) + private Integer parentId; + + @ApiModelProperty("菜单名称") + private String title; + + @ApiModelProperty("菜单路由关键字") + private String path; + + @ApiModelProperty("菜单组件地址") + private String component; + + @ApiModelProperty("菜单类型, 0菜单, 1按钮") + @QueryField(type = QueryType.EQ) + private Integer menuType; + + @ApiModelProperty("权限标识") + private String authority; + + @ApiModelProperty("菜单图标") + private String icon; + + @ApiModelProperty("是否隐藏, 0否, 1是(仅注册路由不显示左侧菜单)") + @QueryField(type = QueryType.EQ) + private Integer hide; + +} diff --git a/src/main/java/com/eleadmin/common/system/param/OperationRecordParam.java b/src/main/java/com/eleadmin/common/system/param/OperationRecordParam.java new file mode 100644 index 0000000..8cf7d31 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/param/OperationRecordParam.java @@ -0,0 +1,67 @@ +package com.eleadmin.common.system.param; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.eleadmin.common.core.annotation.QueryField; +import com.eleadmin.common.core.annotation.QueryType; +import com.eleadmin.common.core.web.BaseParam; +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 操作日志参数 + * + * @author EleAdmin + * @since 2021-08-29 20:35:09 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(description = "操作日志参数") +public class OperationRecordParam extends BaseParam { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @QueryField(type = QueryType.EQ) + private Integer id; + + @ApiModelProperty("用户id") + @QueryField(type = QueryType.EQ) + private Integer userId; + + @ApiModelProperty("操作模块") + private String module; + + @ApiModelProperty("操作功能") + private String description; + + @ApiModelProperty("请求地址") + private String url; + + @ApiModelProperty("请求方式") + private String requestMethod; + + @ApiModelProperty("调用方法") + private String method; + + @ApiModelProperty("ip地址") + private String ip; + + @ApiModelProperty("备注") + private String comments; + + @ApiModelProperty("状态, 0成功, 1异常") + @QueryField(type = QueryType.EQ) + private Integer status; + + @ApiModelProperty("用户账号") + @TableField(exist = false) + private String username; + + @ApiModelProperty("用户昵称") + @TableField(exist = false) + private String nickname; + +} diff --git a/src/main/java/com/eleadmin/common/system/param/OrganizationParam.java b/src/main/java/com/eleadmin/common/system/param/OrganizationParam.java new file mode 100644 index 0000000..f3166c6 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/param/OrganizationParam.java @@ -0,0 +1,65 @@ +package com.eleadmin.common.system.param; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.eleadmin.common.core.annotation.QueryField; +import com.eleadmin.common.core.annotation.QueryType; +import com.eleadmin.common.core.web.BaseParam; +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 组织机构查询参数 + * + * @author EleAdmin + * @since 2021-08-29 20:35:09 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(description = "组织机构查询参数") +public class OrganizationParam extends BaseParam { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "机构id") + @QueryField(type = QueryType.EQ) + private Integer organizationId; + + @ApiModelProperty(value = "上级id, 0是顶级") + @QueryField(type = QueryType.EQ) + private Integer parentId; + + @ApiModelProperty(value = "机构名称") + private String organizationName; + + @ApiModelProperty(value = "机构全称") + private String organizationFullName; + + @ApiModelProperty(value = "机构代码") + private String organizationCode; + + @ApiModelProperty(value = "机构类型(字典代码)") + private String organizationType; + + @ApiModelProperty(value = "负责人id") + @QueryField(type = QueryType.EQ) + private Integer leaderId; + + @ApiModelProperty(value = "备注") + private String comments; + + @ApiModelProperty(value = "机构类型名称") + @TableField(exist = false) + private String organizationTypeName; + + @ApiModelProperty(value = "负责人姓名") + @TableField(exist = false) + private String leaderNickname; + + @ApiModelProperty(value = "负责人账号") + @TableField(exist = false) + private String leaderUsername; + +} diff --git a/src/main/java/com/eleadmin/common/system/param/RoleParam.java b/src/main/java/com/eleadmin/common/system/param/RoleParam.java new file mode 100644 index 0000000..900fb76 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/param/RoleParam.java @@ -0,0 +1,38 @@ +package com.eleadmin.common.system.param; + +import com.eleadmin.common.core.annotation.QueryField; +import com.eleadmin.common.core.annotation.QueryType; +import com.eleadmin.common.core.web.BaseParam; +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 角色查询参数 + * + * @author EleAdmin + * @since 2021-08-29 20:35:09 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(description = "角色查询参数") +public class RoleParam extends BaseParam { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("角色id") + @QueryField(type = QueryType.EQ) + private Integer roleId; + + @ApiModelProperty("角色标识") + private String roleCode; + + @ApiModelProperty("角色名称") + private String roleName; + + @ApiModelProperty("备注") + private String comments; + +} diff --git a/src/main/java/com/eleadmin/common/system/param/UpdatePasswordParam.java b/src/main/java/com/eleadmin/common/system/param/UpdatePasswordParam.java new file mode 100644 index 0000000..d0e9b33 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/param/UpdatePasswordParam.java @@ -0,0 +1,28 @@ +package com.eleadmin.common.system.param; + +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * 修改密码参数 + * + * @author EleAdmin + * @since 2021-08-30 17:35:16 + */ +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(description = "修改密码参数") +public class UpdatePasswordParam implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("原始密码") + private String oldPassword; + + @ApiModelProperty("新密码") + private String password; + +} diff --git a/src/main/java/com/eleadmin/common/system/param/UserFileParam.java b/src/main/java/com/eleadmin/common/system/param/UserFileParam.java new file mode 100644 index 0000000..715a390 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/param/UserFileParam.java @@ -0,0 +1,40 @@ +package com.eleadmin.common.system.param; + +import com.eleadmin.common.core.annotation.QueryField; +import com.eleadmin.common.core.annotation.QueryType; +import com.eleadmin.common.core.web.BaseParam; +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 用户文件查询参数 + * + * @author EleAdmin + * @since 2022-07-21 14:34:40 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(value = "UserFileParam对象", description = "用户文件查询参数") +public class UserFileParam extends BaseParam { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键id") + @QueryField(type = QueryType.EQ) + private Integer id; + + @ApiModelProperty(value = "用户id") + @QueryField(type = QueryType.EQ) + private Integer userId; + + @ApiModelProperty(value = "文件名称") + private String name; + + @ApiModelProperty(value = "上级id") + @QueryField(type = QueryType.EQ) + private Integer parentId; + +} diff --git a/src/main/java/com/eleadmin/common/system/param/UserImportParam.java b/src/main/java/com/eleadmin/common/system/param/UserImportParam.java new file mode 100644 index 0000000..219fa27 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/param/UserImportParam.java @@ -0,0 +1,42 @@ +package com.eleadmin.common.system.param; + +import cn.afterturn.easypoi.excel.annotation.Excel; +import lombok.Data; + +import java.io.Serializable; + +/** + * 用户导入参数 + * + * @author EleAdmin + * @since 2011-10-15 17:33:34 + */ +@Data +public class UserImportParam implements Serializable { + private static final long serialVersionUID = 1L; + + @Excel(name = "账号") + private String username; + + @Excel(name = "密码") + private String password; + + @Excel(name = "昵称") + private String nickname; + + @Excel(name = "手机号") + private String phone; + + @Excel(name = "邮箱") + private String email; + + @Excel(name = "组织机构") + private String organizationName; + + @Excel(name = "性别") + private String sexName; + + @Excel(name = "角色") + private String roleName; + +} diff --git a/src/main/java/com/eleadmin/common/system/param/UserParam.java b/src/main/java/com/eleadmin/common/system/param/UserParam.java new file mode 100644 index 0000000..e684eed --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/param/UserParam.java @@ -0,0 +1,88 @@ +package com.eleadmin.common.system.param; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableLogic; +import com.eleadmin.common.core.annotation.QueryField; +import com.eleadmin.common.core.annotation.QueryType; +import com.eleadmin.common.core.web.BaseParam; +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 用户查询参数 + * + * @author EleAdmin + * @since 2021-08-29 20:35:09 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(description = "用户查询参数") +public class UserParam extends BaseParam { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("用户id") + @QueryField(type = QueryType.EQ) + private Integer userId; + + @ApiModelProperty("账号") + private String username; + + @ApiModelProperty("昵称") + private String nickname; + + @ApiModelProperty("性别(字典)") + @QueryField(type = QueryType.EQ) + private String sex; + + @ApiModelProperty("手机号") + private String phone; + + @ApiModelProperty("邮箱") + private String email; + + @ApiModelProperty("邮箱是否验证, 0否, 1是") + @QueryField(type = QueryType.EQ) + private Integer emailVerified; + + @ApiModelProperty("真实姓名") + private String realName; + + @ApiModelProperty("身份证号") + private String idCard; + + @ApiModelProperty("出生日期") + private String birthday; + + @ApiModelProperty("机构id") + @QueryField(type = QueryType.EQ) + private Integer organizationId; + + @ApiModelProperty("状态, 0正常, 1冻结") + @QueryField(type = QueryType.EQ) + private Integer status; + + @ApiModelProperty("是否删除, 0否, 1是") + @TableLogic + private Integer deleted; + + @ApiModelProperty("角色id") + @TableField(exist = false) + private Integer roleId; + + @ApiModelProperty("机构名称") + @TableField(exist = false) + private String organizationName; + + @ApiModelProperty("性别名称") + @TableField(exist = false) + private String sexName; + + @ApiModelProperty("搜索关键字") + @TableField(exist = false) + private String keywords; + +} diff --git a/src/main/java/com/eleadmin/common/system/result/CaptchaResult.java b/src/main/java/com/eleadmin/common/system/result/CaptchaResult.java new file mode 100644 index 0000000..53c4d72 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/result/CaptchaResult.java @@ -0,0 +1,30 @@ +package com.eleadmin.common.system.result; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 验证码返回结果 + * + * @author EleAdmin + * @since 2021-08-30 17:35:16 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@ApiModel(description = "验证码返回结果") +public class CaptchaResult implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("图形验证码base64数据") + private String base64; + + @ApiModelProperty("验证码文本") + private String text; + +} diff --git a/src/main/java/com/eleadmin/common/system/result/LoginResult.java b/src/main/java/com/eleadmin/common/system/result/LoginResult.java new file mode 100644 index 0000000..e910b24 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/result/LoginResult.java @@ -0,0 +1,31 @@ +package com.eleadmin.common.system.result; + +import com.eleadmin.common.system.entity.User; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 登录返回结果 + * + * @author EleAdmin + * @since 2021-08-30 17:35:16 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@ApiModel(description = "登录返回结果") +public class LoginResult implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("access_token") + private String access_token; + + @ApiModelProperty("用户信息") + private User user; + +} diff --git a/src/main/java/com/eleadmin/common/system/service/DictionaryDataService.java b/src/main/java/com/eleadmin/common/system/service/DictionaryDataService.java new file mode 100644 index 0000000..e9df6ea --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/service/DictionaryDataService.java @@ -0,0 +1,51 @@ +package com.eleadmin.common.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.eleadmin.common.core.web.PageResult; +import com.eleadmin.common.system.entity.DictionaryData; +import com.eleadmin.common.system.param.DictionaryDataParam; + +import java.util.List; + +/** + * 字典数据Service + * + * @author EleAdmin + * @since 2020-03-14 11:29:04 + */ +public interface DictionaryDataService extends IService { + + /** + * 关联分页查询 + * + * @param param 查询参数 + * @return PageResult + */ + PageResult pageRel(DictionaryDataParam param); + + /** + * 关联查询全部 + * + * @param param 查询参数 + * @return List + */ + List listRel(DictionaryDataParam param); + + /** + * 根据id查询 + * + * @param dictDataId 字典数据id + * @return DictionaryData + */ + DictionaryData getByIdRel(Integer dictDataId); + + /** + * 根据dictCode和dictDataName查询 + * + * @param dictCode 字典标识 + * @param dictDataName 字典项名称 + * @return DictionaryData + */ + DictionaryData getByDictCodeAndName(String dictCode, String dictDataName); + +} diff --git a/src/main/java/com/eleadmin/common/system/service/DictionaryService.java b/src/main/java/com/eleadmin/common/system/service/DictionaryService.java new file mode 100644 index 0000000..5821649 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/service/DictionaryService.java @@ -0,0 +1,14 @@ +package com.eleadmin.common.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.eleadmin.common.system.entity.Dictionary; + +/** + * 字典Service + * + * @author EleAdmin + * @since 2020-03-14 11:29:03 + */ +public interface DictionaryService extends IService { + +} diff --git a/src/main/java/com/eleadmin/common/system/service/EmailRecordService.java b/src/main/java/com/eleadmin/common/system/service/EmailRecordService.java new file mode 100644 index 0000000..5cd5d95 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/service/EmailRecordService.java @@ -0,0 +1,50 @@ +package com.eleadmin.common.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.eleadmin.common.system.entity.EmailRecord; + +import javax.mail.MessagingException; +import java.io.IOException; +import java.util.Map; + +/** + * 邮件发送记录Service + * + * @author EleAdmin + * @since 2019-06-19 04:07:02 + */ +public interface EmailRecordService extends IService { + + /** + * 发送普通邮件 + * + * @param title 标题 + * @param content 内容 + * @param toEmails 收件人 + */ + void sendTextEmail(String title, String content, String[] toEmails); + + /** + * 发送富文本邮件 + * + * @param title 标题 + * @param html 富文本 + * @param toEmails 收件人 + * @throws MessagingException MessagingException + */ + void sendFullTextEmail(String title, String html, String[] toEmails) throws MessagingException; + + /** + * 发送模板邮件 + * + * @param title 标题 + * @param path 模板路径 + * @param map 填充数据 + * @param toEmails 收件人 + * @throws MessagingException MessagingException + * @throws IOException IOException + */ + void sendHtmlEmail(String title, String path, Map map, String[] toEmails) + throws MessagingException, IOException; + +} diff --git a/src/main/java/com/eleadmin/common/system/service/FileRecordService.java b/src/main/java/com/eleadmin/common/system/service/FileRecordService.java new file mode 100644 index 0000000..d3f8637 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/service/FileRecordService.java @@ -0,0 +1,58 @@ +package com.eleadmin.common.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.eleadmin.common.core.web.PageResult; +import com.eleadmin.common.system.entity.FileRecord; +import com.eleadmin.common.system.param.FileRecordParam; + +import java.io.File; +import java.util.List; + +/** + * 文件上传记录Service + * + * @author EleAdmin + * @since 2021-08-30 11:20:15 + */ +public interface FileRecordService extends IService { + + /** + * 关联分页查询 + * + * @param param 查询参数 + * @return PageResult + */ + PageResult pageRel(FileRecordParam param); + + /** + * 关联查询全部 + * + * @param param 查询参数 + * @return List + */ + List listRel(FileRecordParam param); + + /** + * 根据id查询 + * + * @param id id + * @return FileRecord + */ + FileRecord getByIdRel(Integer id); + + /** + * 根据path查询 + * + * @param path 文件路径 + * @return FileRecord + */ + FileRecord getByIdPath(String path); + + /** + * 异步删除文件 + * + * @param files 文件数组 + */ + void deleteFileAsync(List files); + +} diff --git a/src/main/java/com/eleadmin/common/system/service/LoginRecordService.java b/src/main/java/com/eleadmin/common/system/service/LoginRecordService.java new file mode 100644 index 0000000..1dfe4dc --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/service/LoginRecordService.java @@ -0,0 +1,54 @@ +package com.eleadmin.common.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.eleadmin.common.core.web.PageResult; +import com.eleadmin.common.system.entity.LoginRecord; +import com.eleadmin.common.system.param.LoginRecordParam; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; + +/** + * 登录日志Service + * + * @author EleAdmin + * @since 2018-12-24 16:10:41 + */ +public interface LoginRecordService extends IService { + + /** + * 关联分页查询 + * + * @param param 查询参数 + * @return PageResult + */ + PageResult pageRel(LoginRecordParam param); + + /** + * 关联查询全部 + * + * @param param 查询参数 + * @return List + */ + List listRel(LoginRecordParam param); + + /** + * 根据id查询 + * + * @param id id + * @return LoginRecord + */ + LoginRecord getByIdRel(Integer id); + + /** + * 异步添加 + * + * @param username 用户账号 + * @param type 操作类型 + * @param comments 备注 + * @param tenantId 租户id + * @param request HttpServletRequest + */ + void saveAsync(String username, Integer type, String comments, Integer tenantId, HttpServletRequest request); + +} diff --git a/src/main/java/com/eleadmin/common/system/service/MenuService.java b/src/main/java/com/eleadmin/common/system/service/MenuService.java new file mode 100644 index 0000000..4a4808c --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/service/MenuService.java @@ -0,0 +1,14 @@ +package com.eleadmin.common.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.eleadmin.common.system.entity.Menu; + +/** + * 菜单Service + * + * @author EleAdmin + * @since 2018-12-24 16:10:31 + */ +public interface MenuService extends IService { + +} diff --git a/src/main/java/com/eleadmin/common/system/service/OperationRecordService.java b/src/main/java/com/eleadmin/common/system/service/OperationRecordService.java new file mode 100644 index 0000000..5e9068c --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/service/OperationRecordService.java @@ -0,0 +1,49 @@ +package com.eleadmin.common.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.eleadmin.common.core.web.PageResult; +import com.eleadmin.common.system.entity.OperationRecord; +import com.eleadmin.common.system.param.OperationRecordParam; + +import java.util.List; + +/** + * 操作日志Service + * + * @author EleAdmin + * @since 2018-12-24 16:10:01 + */ +public interface OperationRecordService extends IService { + + /** + * 关联分页查询 + * + * @param param 查询参数 + * @return PageResult + */ + PageResult pageRel(OperationRecordParam param); + + /** + * 关联查询全部 + * + * @param param 查询参数 + * @return List + */ + List listRel(OperationRecordParam param); + + /** + * 根据id查询 + * + * @param id id + * @return OperationRecord + */ + OperationRecord getByIdRel(Integer id); + + /** + * 异步添加 + * + * @param operationRecord OperationRecord + */ + void saveAsync(OperationRecord operationRecord); + +} diff --git a/src/main/java/com/eleadmin/common/system/service/OrganizationService.java b/src/main/java/com/eleadmin/common/system/service/OrganizationService.java new file mode 100644 index 0000000..16e8688 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/service/OrganizationService.java @@ -0,0 +1,42 @@ +package com.eleadmin.common.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.eleadmin.common.core.web.PageResult; +import com.eleadmin.common.system.entity.Organization; +import com.eleadmin.common.system.param.OrganizationParam; + +import java.util.List; + +/** + * 组织机构Service + * + * @author EleAdmin + * @since 2020-03-14 11:29:04 + */ +public interface OrganizationService extends IService { + + /** + * 关联分页查询 + * + * @param param 查询参数 + * @return PageResult + */ + PageResult pageRel(OrganizationParam param); + + /** + * 关联查询全部 + * + * @param param 查询参数 + * @return List + */ + List listRel(OrganizationParam param); + + /** + * 根据id查询 + * + * @param organizationId 机构id + * @return Organization + */ + Organization getByIdRel(Integer organizationId); + +} diff --git a/src/main/java/com/eleadmin/common/system/service/RoleMenuService.java b/src/main/java/com/eleadmin/common/system/service/RoleMenuService.java new file mode 100644 index 0000000..912178c --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/service/RoleMenuService.java @@ -0,0 +1,35 @@ +package com.eleadmin.common.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.eleadmin.common.system.entity.Menu; +import com.eleadmin.common.system.entity.RoleMenu; + +import java.util.List; + +/** + * 角色菜单Service + * + * @author EleAdmin + * @since 2018-12-24 16:10:44 + */ +public interface RoleMenuService extends IService { + + /** + * 查询用户对应的菜单 + * + * @param userId 用户id + * @param menuType 菜单类型 + * @return List + */ + List listMenuByUserId(Integer userId, Integer menuType); + + /** + * 查询用户对应的菜单 + * + * @param roleIds 角色id + * @param menuType 菜单类型 + * @return List + */ + List listMenuByRoleIds(List roleIds, Integer menuType); + +} diff --git a/src/main/java/com/eleadmin/common/system/service/RoleService.java b/src/main/java/com/eleadmin/common/system/service/RoleService.java new file mode 100644 index 0000000..1bc45d4 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/service/RoleService.java @@ -0,0 +1,14 @@ +package com.eleadmin.common.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.eleadmin.common.system.entity.Role; + +/** + * 角色Service + * + * @author EleAdmin + * @since 2018-12-24 16:10:32 + */ +public interface RoleService extends IService { + +} diff --git a/src/main/java/com/eleadmin/common/system/service/UserFileService.java b/src/main/java/com/eleadmin/common/system/service/UserFileService.java new file mode 100644 index 0000000..a4a3039 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/service/UserFileService.java @@ -0,0 +1,14 @@ +package com.eleadmin.common.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.eleadmin.common.system.entity.UserFile; + +/** + * 用户文件Service + * + * @author EleAdmin + * @since 2022-07-21 14:34:40 + */ +public interface UserFileService extends IService { + +} diff --git a/src/main/java/com/eleadmin/common/system/service/UserRoleService.java b/src/main/java/com/eleadmin/common/system/service/UserRoleService.java new file mode 100644 index 0000000..71f7598 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/service/UserRoleService.java @@ -0,0 +1,42 @@ +package com.eleadmin.common.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.eleadmin.common.system.entity.Role; +import com.eleadmin.common.system.entity.UserRole; + +import java.util.List; + +/** + * 用户角色Service + * + * @author EleAdmin + * @since 2018-12-24 16:10:35 + */ +public interface UserRoleService extends IService { + + /** + * 批量添加用户角色 + * + * @param userId 用户id + * @param roleIds 角色id集合 + * @return int + */ + int saveBatch(Integer userId, List roleIds); + + /** + * 根据用户id查询角色 + * + * @param userId 用户id + * @return List + */ + List listByUserId(Integer userId); + + /** + * 批量根据用户id查询角色 + * + * @param userIds 用户id集合 + * @return List + */ + List listByUserIds(List userIds); + +} diff --git a/src/main/java/com/eleadmin/common/system/service/UserService.java b/src/main/java/com/eleadmin/common/system/service/UserService.java new file mode 100644 index 0000000..81eb179 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/service/UserService.java @@ -0,0 +1,93 @@ +package com.eleadmin.common.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.eleadmin.common.core.web.PageResult; +import com.eleadmin.common.system.entity.User; +import com.eleadmin.common.system.param.UserParam; +import org.springframework.security.core.userdetails.UserDetailsService; + +import java.util.List; + +/** + * 用户Service + * + * @author EleAdmin + * @since 2018-12-24 16:10:52 + */ +public interface UserService extends IService, UserDetailsService { + + /** + * 关联分页查询用户 + * + * @param param 查询参数 + * @return PageResult + */ + PageResult pageRel(UserParam param); + + /** + * 关联查询全部用户 + * + * @param param 查询参数 + * @return List + */ + List listRel(UserParam param); + + /** + * 根据id查询用户 + * + * @param userId 用户id + * @return User + */ + User getByIdRel(Integer userId); + + /** + * 根据账号查询用户 + * + * @param username 账号 + * @return User + */ + User getByUsername(String username); + + /** + * 根据账号查询用户 + * + * @param username 账号 + * @param tenantId 租户id + * @return User + */ + User getByUsername(String username, Integer tenantId); + + /** + * 添加用户 + * + * @param user 用户信息 + * @return boolean + */ + boolean saveUser(User user); + + /** + * 修改用户 + * + * @param user 用户信息 + * @return boolean + */ + boolean updateUser(User user); + + /** + * 比较用户密码 + * + * @param dbPassword 数据库存储的密码 + * @param inputPassword 用户输入的密码 + * @return boolean + */ + boolean comparePassword(String dbPassword, String inputPassword); + + /** + * md5加密用户密码 + * + * @param password 密码明文 + * @return 密文 + */ + String encodePassword(String password); + +} diff --git a/src/main/java/com/eleadmin/common/system/service/impl/DictionaryDataServiceImpl.java b/src/main/java/com/eleadmin/common/system/service/impl/DictionaryDataServiceImpl.java new file mode 100644 index 0000000..a9e114d --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/service/impl/DictionaryDataServiceImpl.java @@ -0,0 +1,52 @@ +package com.eleadmin.common.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.eleadmin.common.core.utils.CommonUtil; +import com.eleadmin.common.core.web.PageParam; +import com.eleadmin.common.core.web.PageResult; +import com.eleadmin.common.system.entity.DictionaryData; +import com.eleadmin.common.system.mapper.DictionaryDataMapper; +import com.eleadmin.common.system.param.DictionaryDataParam; +import com.eleadmin.common.system.service.DictionaryDataService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 字典数据Service实现 + * + * @author EleAdmin + * @since 2020-03-14 11:29:04 + */ +@Service +public class DictionaryDataServiceImpl extends ServiceImpl + implements DictionaryDataService { + + @Override + public PageResult pageRel(DictionaryDataParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("sort_number"); + return new PageResult<>(baseMapper.selectPageRel(page, param), page.getTotal()); + } + + @Override + public List listRel(DictionaryDataParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("sort_number"); + return page.sortRecords(baseMapper.selectListRel(param)); + } + + @Override + public DictionaryData getByIdRel(Integer dictDataId) { + DictionaryDataParam param = new DictionaryDataParam(); + param.setDictDataId(dictDataId); + return param.getOne(baseMapper.selectListRel(param)); + } + + @Override + public DictionaryData getByDictCodeAndName(String dictCode, String dictDataName) { + List list = baseMapper.getByDictCodeAndName(dictCode, dictDataName); + return CommonUtil.listGetOne(list); + } + +} diff --git a/src/main/java/com/eleadmin/common/system/service/impl/DictionaryServiceImpl.java b/src/main/java/com/eleadmin/common/system/service/impl/DictionaryServiceImpl.java new file mode 100644 index 0000000..75aacfc --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/service/impl/DictionaryServiceImpl.java @@ -0,0 +1,18 @@ +package com.eleadmin.common.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.eleadmin.common.system.entity.Dictionary; +import com.eleadmin.common.system.mapper.DictionaryMapper; +import com.eleadmin.common.system.service.DictionaryService; +import org.springframework.stereotype.Service; + +/** + * 字典Service实现 + * + * @author EleAdmin + * @since 2020-03-14 11:29:03 + */ +@Service +public class DictionaryServiceImpl extends ServiceImpl implements DictionaryService { + +} diff --git a/src/main/java/com/eleadmin/common/system/service/impl/EmailRecordServiceImpl.java b/src/main/java/com/eleadmin/common/system/service/impl/EmailRecordServiceImpl.java new file mode 100644 index 0000000..d05342b --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/service/impl/EmailRecordServiceImpl.java @@ -0,0 +1,72 @@ +package com.eleadmin.common.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.eleadmin.common.system.entity.EmailRecord; +import com.eleadmin.common.system.mapper.EmailRecordMapper; +import com.eleadmin.common.system.service.EmailRecordService; +import org.beetl.core.Configuration; +import org.beetl.core.GroupTemplate; +import org.beetl.core.Template; +import org.beetl.core.resource.ClasspathResourceLoader; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.mail.SimpleMailMessage; +import org.springframework.mail.javamail.JavaMailSender; +import org.springframework.mail.javamail.MimeMessageHelper; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import javax.mail.MessagingException; +import javax.mail.internet.MimeMessage; +import java.io.IOException; +import java.util.Map; + +/** + * 邮件发送记录Service实现 + * + * @author EleAdmin + * @since 2019-06-19 04:07:54 + */ +@Service +public class EmailRecordServiceImpl extends ServiceImpl + implements EmailRecordService { + // 发件邮箱 + @Value("${spring.mail.username}") + private String formEmail; + @Resource + private JavaMailSender mailSender; + + @Override + public void sendTextEmail(String title, String content, String[] toEmails) { + SimpleMailMessage message = new SimpleMailMessage(); + message.setFrom(formEmail); + message.setTo(toEmails); + message.setSubject(title); + message.setText(content); + mailSender.send(message); + } + + @Override + public void sendFullTextEmail(String title, String html, String[] toEmails) throws MessagingException { + MimeMessage mimeMessage = mailSender.createMimeMessage(); + MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true); + helper.setFrom(formEmail); + helper.setTo(toEmails); + helper.setSubject(title); + // 发送邮件 + helper.setText(html, true); + mailSender.send(mimeMessage); + } + + @Override + public void sendHtmlEmail(String title, String path, Map map, String[] toEmails) + throws MessagingException, IOException { + ClasspathResourceLoader resourceLoader = new ClasspathResourceLoader("templates/"); + Configuration cfg = Configuration.defaultConfiguration(); + GroupTemplate gt = new GroupTemplate(resourceLoader, cfg); + Template t = gt.getTemplate(path); // 加载html模板 + t.binding(map); // 填充数据 + String html = t.render(); // 获得渲染后的html + sendFullTextEmail(title, html, toEmails); // 发送邮件 + } + +} diff --git a/src/main/java/com/eleadmin/common/system/service/impl/FileRecordServiceImpl.java b/src/main/java/com/eleadmin/common/system/service/impl/FileRecordServiceImpl.java new file mode 100644 index 0000000..ee73e2b --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/service/impl/FileRecordServiceImpl.java @@ -0,0 +1,64 @@ +package com.eleadmin.common.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.eleadmin.common.core.utils.CommonUtil; +import com.eleadmin.common.core.web.PageParam; +import com.eleadmin.common.core.web.PageResult; +import com.eleadmin.common.system.entity.FileRecord; +import com.eleadmin.common.system.mapper.FileRecordMapper; +import com.eleadmin.common.system.param.FileRecordParam; +import com.eleadmin.common.system.service.FileRecordService; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import java.io.File; +import java.util.List; + +/** + * 文件上传记录Service实现 + * + * @author EleAdmin + * @since 2021-08-30 11:21:01 + */ +@Service +public class FileRecordServiceImpl extends ServiceImpl implements FileRecordService { + + @Override + public PageResult pageRel(FileRecordParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("create_time desc"); + return new PageResult<>(baseMapper.selectPageRel(page, param), page.getTotal()); + } + + @Override + public List listRel(FileRecordParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("create_time desc"); + return page.sortRecords(baseMapper.selectListRel(param)); + } + + @Override + public FileRecord getByIdRel(Integer id) { + FileRecordParam param = new FileRecordParam(); + param.setId(id); + return param.getOne(baseMapper.selectListRel(param)); + } + + @Override + public FileRecord getByIdPath(String path) { + return CommonUtil.listGetOne(baseMapper.getByIdPath(path)); + } + + @Async + @Override + public void deleteFileAsync(List files) { + for (File file : files) { + try { + file.delete(); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + +} diff --git a/src/main/java/com/eleadmin/common/system/service/impl/LoginRecordServiceImpl.java b/src/main/java/com/eleadmin/common/system/service/impl/LoginRecordServiceImpl.java new file mode 100644 index 0000000..bf003dd --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/service/impl/LoginRecordServiceImpl.java @@ -0,0 +1,78 @@ +package com.eleadmin.common.system.service.impl; + +import cn.hutool.extra.servlet.ServletUtil; +import cn.hutool.http.useragent.UserAgent; +import cn.hutool.http.useragent.UserAgentUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.eleadmin.common.core.web.PageParam; +import com.eleadmin.common.core.web.PageResult; +import com.eleadmin.common.system.entity.LoginRecord; +import com.eleadmin.common.system.mapper.LoginRecordMapper; +import com.eleadmin.common.system.param.LoginRecordParam; +import com.eleadmin.common.system.service.LoginRecordService; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; + +/** + * 登录日志Service实现 + * + * @author EleAdmin + * @since 2018-12-24 16:10:14 + */ +@Service +public class LoginRecordServiceImpl extends ServiceImpl + implements LoginRecordService { + + @Override + public PageResult pageRel(LoginRecordParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("create_time desc"); + return new PageResult<>(baseMapper.selectPageRel(page, param), page.getTotal()); + } + + @Override + public List listRel(LoginRecordParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("create_time desc"); + return page.sortRecords(baseMapper.selectListRel(param)); + } + + @Override + public LoginRecord getByIdRel(Integer id) { + LoginRecordParam param = new LoginRecordParam(); + param.setId(id); + return param.getOne(baseMapper.selectListRel(param)); + } + + @Async + @Override + public void saveAsync(String username, Integer type, String comments, Integer tenantId, + HttpServletRequest request) { + if (username == null) { + return; + } + LoginRecord loginRecord = new LoginRecord(); + loginRecord.setUsername(username); + loginRecord.setLoginType(type); + loginRecord.setComments(comments); + loginRecord.setTenantId(tenantId); + UserAgent ua = UserAgentUtil.parse(ServletUtil.getHeaderIgnoreCase(request, "User-Agent")); + if (ua != null) { + if (ua.getPlatform() != null) { + loginRecord.setOs(ua.getPlatform().toString()); + } + if (ua.getOs() != null) { + loginRecord.setDevice(ua.getOs().toString()); + } + if (ua.getBrowser() != null) { + loginRecord.setBrowser(ua.getBrowser().toString()); + } + } + loginRecord.setIp(ServletUtil.getClientIP(request)); + baseMapper.insert(loginRecord); + } + +} diff --git a/src/main/java/com/eleadmin/common/system/service/impl/MenuServiceImpl.java b/src/main/java/com/eleadmin/common/system/service/impl/MenuServiceImpl.java new file mode 100644 index 0000000..2e1dc8e --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/service/impl/MenuServiceImpl.java @@ -0,0 +1,18 @@ +package com.eleadmin.common.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.eleadmin.common.system.entity.Menu; +import com.eleadmin.common.system.mapper.MenuMapper; +import com.eleadmin.common.system.service.MenuService; +import org.springframework.stereotype.Service; + +/** + * 菜单Service实现 + * + * @author EleAdmin + * @since 2018-12-24 16:10:10 + */ +@Service +public class MenuServiceImpl extends ServiceImpl implements MenuService { + +} diff --git a/src/main/java/com/eleadmin/common/system/service/impl/OperationRecordServiceImpl.java b/src/main/java/com/eleadmin/common/system/service/impl/OperationRecordServiceImpl.java new file mode 100644 index 0000000..f2c89d3 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/service/impl/OperationRecordServiceImpl.java @@ -0,0 +1,52 @@ +package com.eleadmin.common.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.eleadmin.common.core.web.PageParam; +import com.eleadmin.common.core.web.PageResult; +import com.eleadmin.common.system.entity.OperationRecord; +import com.eleadmin.common.system.mapper.OperationRecordMapper; +import com.eleadmin.common.system.param.OperationRecordParam; +import com.eleadmin.common.system.service.OperationRecordService; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 操作日志Service实现 + * + * @author EleAdmin + * @since 2018-12-24 16:10:02 + */ +@Service +public class OperationRecordServiceImpl extends ServiceImpl + implements OperationRecordService { + + @Override + public PageResult pageRel(OperationRecordParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("create_time desc"); + return new PageResult<>(baseMapper.selectPageRel(page, param), page.getTotal()); + } + + @Override + public List listRel(OperationRecordParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("create_time desc"); + return page.sortRecords(baseMapper.selectListRel(param)); + } + + @Override + public OperationRecord getByIdRel(Integer id) { + OperationRecordParam param = new OperationRecordParam(); + param.setId(id); + return param.getOne(baseMapper.selectListRel(param)); + } + + @Async + @Override + public void saveAsync(OperationRecord operationRecord) { + baseMapper.insert(operationRecord); + } + +} diff --git a/src/main/java/com/eleadmin/common/system/service/impl/OrganizationServiceImpl.java b/src/main/java/com/eleadmin/common/system/service/impl/OrganizationServiceImpl.java new file mode 100644 index 0000000..82c0e7f --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/service/impl/OrganizationServiceImpl.java @@ -0,0 +1,45 @@ +package com.eleadmin.common.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.eleadmin.common.core.web.PageParam; +import com.eleadmin.common.core.web.PageResult; +import com.eleadmin.common.system.entity.Organization; +import com.eleadmin.common.system.mapper.OrganizationMapper; +import com.eleadmin.common.system.param.OrganizationParam; +import com.eleadmin.common.system.service.OrganizationService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 组织机构Service实现 + * + * @author EleAdmin + * @since 2020-03-14 11:29:04 + */ +@Service +public class OrganizationServiceImpl extends ServiceImpl + implements OrganizationService { + + @Override + public PageResult pageRel(OrganizationParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("sort_number"); + return new PageResult<>(baseMapper.selectPageRel(page, param), page.getTotal()); + } + + @Override + public List listRel(OrganizationParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("sort_number"); + return page.sortRecords(baseMapper.selectListRel(param)); + } + + @Override + public Organization getByIdRel(Integer organizationId) { + OrganizationParam param = new OrganizationParam(); + param.setOrganizationId(organizationId); + return param.getOne(baseMapper.selectListRel(param)); + } + +} diff --git a/src/main/java/com/eleadmin/common/system/service/impl/RoleMenuServiceImpl.java b/src/main/java/com/eleadmin/common/system/service/impl/RoleMenuServiceImpl.java new file mode 100644 index 0000000..c4bceac --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/service/impl/RoleMenuServiceImpl.java @@ -0,0 +1,31 @@ +package com.eleadmin.common.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.eleadmin.common.system.entity.Menu; +import com.eleadmin.common.system.entity.RoleMenu; +import com.eleadmin.common.system.mapper.RoleMenuMapper; +import com.eleadmin.common.system.service.RoleMenuService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 角色菜单Service实现 + * + * @author EleAdmin + * @since 2018-12-24 16:10:12 + */ +@Service +public class RoleMenuServiceImpl extends ServiceImpl implements RoleMenuService { + + @Override + public List listMenuByUserId(Integer userId, Integer menuType) { + return baseMapper.listMenuByUserId(userId, menuType); + } + + @Override + public List listMenuByRoleIds(List roleIds, Integer menuType) { + return baseMapper.listMenuByRoleIds(roleIds, menuType); + } + +} diff --git a/src/main/java/com/eleadmin/common/system/service/impl/RoleServiceImpl.java b/src/main/java/com/eleadmin/common/system/service/impl/RoleServiceImpl.java new file mode 100644 index 0000000..bea1c22 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/service/impl/RoleServiceImpl.java @@ -0,0 +1,18 @@ +package com.eleadmin.common.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.eleadmin.common.system.entity.Role; +import com.eleadmin.common.system.mapper.RoleMapper; +import com.eleadmin.common.system.service.RoleService; +import org.springframework.stereotype.Service; + +/** + * 角色服务实现类 + * + * @author EleAdmin + * @since 2018-12-24 16:10:11 + */ +@Service +public class RoleServiceImpl extends ServiceImpl implements RoleService { + +} diff --git a/src/main/java/com/eleadmin/common/system/service/impl/UserFileServiceImpl.java b/src/main/java/com/eleadmin/common/system/service/impl/UserFileServiceImpl.java new file mode 100644 index 0000000..585e1e3 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/service/impl/UserFileServiceImpl.java @@ -0,0 +1,18 @@ +package com.eleadmin.common.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.eleadmin.common.system.mapper.UserFileMapper; +import com.eleadmin.common.system.service.UserFileService; +import com.eleadmin.common.system.entity.UserFile; +import org.springframework.stereotype.Service; + +/** + * 用户文件Service实现 + * + * @author EleAdmin + * @since 2022-07-21 14:34:40 + */ +@Service +public class UserFileServiceImpl extends ServiceImpl implements UserFileService { + +} diff --git a/src/main/java/com/eleadmin/common/system/service/impl/UserRoleServiceImpl.java b/src/main/java/com/eleadmin/common/system/service/impl/UserRoleServiceImpl.java new file mode 100644 index 0000000..1a99e4a --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/service/impl/UserRoleServiceImpl.java @@ -0,0 +1,37 @@ +package com.eleadmin.common.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.eleadmin.common.system.entity.Role; +import com.eleadmin.common.system.entity.UserRole; +import com.eleadmin.common.system.mapper.UserRoleMapper; +import com.eleadmin.common.system.service.UserRoleService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 用户角色Service实现 + * + * @author EleAdmin + * @since 2018-12-24 16:10:36 + */ +@Service +public class UserRoleServiceImpl extends ServiceImpl implements UserRoleService { + + + @Override + public int saveBatch(Integer userId, List roleIds) { + return baseMapper.insertBatch(userId, roleIds); + } + + @Override + public List listByUserId(Integer userId) { + return baseMapper.selectByUserId(userId); + } + + @Override + public List listByUserIds(List userIds) { + return baseMapper.selectByUserIds(userIds); + } + +} diff --git a/src/main/java/com/eleadmin/common/system/service/impl/UserServiceImpl.java b/src/main/java/com/eleadmin/common/system/service/impl/UserServiceImpl.java new file mode 100644 index 0000000..5eaf7b5 --- /dev/null +++ b/src/main/java/com/eleadmin/common/system/service/impl/UserServiceImpl.java @@ -0,0 +1,181 @@ +package com.eleadmin.common.system.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.eleadmin.common.core.web.PageParam; +import com.eleadmin.common.core.exception.BusinessException; +import com.eleadmin.common.core.web.PageResult; +import com.eleadmin.common.system.mapper.UserMapper; +import com.eleadmin.common.system.entity.Role; +import com.eleadmin.common.system.entity.User; +import com.eleadmin.common.system.entity.UserRole; +import com.eleadmin.common.system.param.UserParam; +import com.eleadmin.common.system.service.RoleMenuService; +import com.eleadmin.common.system.service.UserRoleService; +import com.eleadmin.common.system.service.UserService; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Isolation; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 用户Service实现 + * + * @author EleAdmin + * @since 2018-12-24 16:10:14 + */ +@Service +public class UserServiceImpl extends ServiceImpl implements UserService { + @Resource + private UserRoleService userRoleService; + @Resource + private RoleMenuService roleMenuService; + @Resource + private BCryptPasswordEncoder bCryptPasswordEncoder; + + @Override + public PageResult pageRel(UserParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("create_time desc"); + List list = baseMapper.selectPageRel(page, param); + // 查询用户的角色 + selectUserRoles(list); + return new PageResult<>(list, page.getTotal()); + } + + @Override + public List listRel(UserParam param) { + List list = baseMapper.selectListRel(param); + // 查询用户的角色 + selectUserRoles(list); + // 排序 + PageParam page = new PageParam<>(param); + page.setDefaultOrder("create_time desc"); + return page.sortRecords(list); + } + + @Override + public User getByIdRel(Integer userId) { + UserParam param = new UserParam(); + param.setUserId(userId); + User user = param.getOne(baseMapper.selectListRel(param)); + if (user != null) { + user.setRoles(userRoleService.listByUserId(user.getUserId())); + user.setAuthorities(roleMenuService.listMenuByUserId(user.getUserId(), null)); + } + return user; + } + + @Override + public User getByUsername(String username) { + return getByUsername(username, null); + } + + @Override + public User getByUsername(String username, Integer tenantId) { + if (StrUtil.isBlank(username)) { + return null; + } + User user = baseMapper.selectByUsername(username, tenantId); + if (user != null) { + user.setRoles(userRoleService.listByUserId(user.getUserId())); + user.setAuthorities(roleMenuService.listMenuByUserId(user.getUserId(), null)); + } + return user; + } + + @Override + public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { + return getByUsername(username); + } + + @Transactional(rollbackFor = {Exception.class}, isolation = Isolation.SERIALIZABLE) + @Override + public boolean saveUser(User user) { + if (StrUtil.isNotEmpty(user.getUsername()) && baseMapper.selectCount(new LambdaQueryWrapper() + .eq(User::getUsername, user.getUsername())) > 0) { + throw new BusinessException("账号已存在"); + } + if (StrUtil.isNotEmpty(user.getPhone()) && baseMapper.selectCount(new LambdaQueryWrapper() + .eq(User::getPhone, user.getPhone())) > 0) { + throw new BusinessException("手机号已存在"); + } + if (StrUtil.isNotEmpty(user.getEmail()) && baseMapper.selectCount(new LambdaQueryWrapper() + .eq(User::getEmail, user.getEmail())) > 0) { + throw new BusinessException("邮箱已存在"); + } + boolean result = baseMapper.insert(user) > 0; + if (result && user.getRoles() != null && user.getRoles().size() > 0) { + List roleIds = user.getRoles().stream().map(Role::getRoleId).collect(Collectors.toList()); + if (userRoleService.saveBatch(user.getUserId(), roleIds) < roleIds.size()) { + throw new BusinessException("用户角色添加失败"); + } + } + return result; + } + + @Transactional(rollbackFor = {Exception.class}) + @Override + public boolean updateUser(User user) { + if (StrUtil.isNotEmpty(user.getUsername()) && baseMapper.selectCount(new LambdaQueryWrapper() + .eq(User::getUsername, user.getUsername()) + .ne(User::getUserId, user.getUserId())) > 0) { + throw new BusinessException("账号已存在"); + } + if (StrUtil.isNotEmpty(user.getPhone()) && baseMapper.selectCount(new LambdaQueryWrapper() + .eq(User::getPhone, user.getPhone()) + .ne(User::getUserId, user.getUserId())) > 0) { + throw new BusinessException("手机号已存在"); + } + if (StrUtil.isNotEmpty(user.getEmail()) && baseMapper.selectCount(new LambdaQueryWrapper() + .eq(User::getEmail, user.getEmail()) + .ne(User::getUserId, user.getUserId())) > 0) { + throw new BusinessException("邮箱已存在"); + } + boolean result = baseMapper.updateById(user) > 0; + if (result && user.getRoles() != null && user.getRoles().size() > 0) { + userRoleService.remove(new LambdaUpdateWrapper().eq(UserRole::getUserId, user.getUserId())); + List roleIds = user.getRoles().stream().map(Role::getRoleId).collect(Collectors.toList()); + if (userRoleService.saveBatch(user.getUserId(), roleIds) < roleIds.size()) { + throw new BusinessException("用户角色添加失败"); + } + } + return result; + } + + @Override + public boolean comparePassword(String dbPassword, String inputPassword) { + return bCryptPasswordEncoder.matches(inputPassword, dbPassword); + } + + @Override + public String encodePassword(String password) { + return password == null ? null : bCryptPasswordEncoder.encode(password); + } + + /** + * 批量查询用户的角色 + * + * @param users 用户集合 + */ + private void selectUserRoles(List users) { + if (users != null && users.size() > 0) { + List userIds = users.stream().map(User::getUserId).collect(Collectors.toList()); + List userRoles = userRoleService.listByUserIds(userIds); + for (User user : users) { + List roles = userRoles.stream().filter(d -> user.getUserId().equals(d.getUserId())) + .collect(Collectors.toList()); + user.setRoles(roles); + } + } + } + +} diff --git a/src/main/java/com/eleadmin/oa/controller/AppController.java b/src/main/java/com/eleadmin/oa/controller/AppController.java new file mode 100644 index 0000000..06fdc4e --- /dev/null +++ b/src/main/java/com/eleadmin/oa/controller/AppController.java @@ -0,0 +1,114 @@ +package com.eleadmin.oa.controller; + +import com.eleadmin.common.core.annotation.OperationLog; +import com.eleadmin.common.core.web.ApiResult; +import com.eleadmin.common.core.web.BaseController; +import com.eleadmin.common.core.web.PageParam; +import com.eleadmin.common.core.web.PageResult; +import com.eleadmin.oa.entity.App; +import com.eleadmin.oa.param.LinkParam; +import com.eleadmin.oa.server.AppService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 应用控制器 + * + * @author gxwebsoft.com + * @since 2020-03-14 11:29:03 + */ +@Api(tags = "应用管理") +@RestController +@RequestMapping("/api/app") +public class AppController extends BaseController { + @Resource + private AppService appService; + + @PreAuthorize("hasAuthority('sys:app:list')") + @OperationLog + @ApiOperation("分页查询应用") + @GetMapping("/page") + public ApiResult> page(LinkParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("sort_number, clicks desc"); + return success(appService.page(page, page.getWrapper())); + } + + @PreAuthorize("hasAuthority('sys:app:list')") + @OperationLog + @ApiOperation("查询全部应用") + @GetMapping() + public ApiResult> list(LinkParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("sort_number, clicks desc"); + return success(appService.list(page.getOrderWrapper())); + } + + @PreAuthorize("hasAuthority('sys:app:list')") + @OperationLog + @ApiOperation("根据id查询应用") + @GetMapping("/{id}") + public ApiResult get(@PathVariable("id") Integer id) { + return success(appService.getById(id)); + } + + @PreAuthorize("hasAuthority('sys:app:save')") + @ApiOperation("添加应用") + @PostMapping() + public ApiResult add(@RequestBody App app) { + if (appService.save(app)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @PreAuthorize("hasAuthority('sys:app:update')") + @OperationLog + @ApiOperation("修改应用") + @PutMapping() + public ApiResult update(@RequestBody App app) { + if (appService.updateById(app)) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @PreAuthorize("hasAuthority('sys:app:remove')") + @OperationLog + @ApiOperation("删除应用") + @DeleteMapping("/{id}") + public ApiResult remove(@PathVariable("id") Integer id) { + if (appService.removeById(id)) { + return success("删除成功"); + } + return fail("删除失败"); + } + + @PreAuthorize("hasAuthority('sys:app:save')") + @OperationLog + @ApiOperation("批量添加应用") + @PostMapping("/batch") + public ApiResult> saveBatch(@RequestBody List list) { + if (appService.saveBatch(list)) { + return success("添加成功", null); + } + return fail("添加失败", null); + } + + @PreAuthorize("hasAuthority('sys:app:remove')") + @OperationLog + @ApiOperation("批量删除应用") + @DeleteMapping("/batch") + public ApiResult removeBatch(@RequestBody List ids) { + if (appService.removeByIds(ids)) { + return success("删除成功"); + } + return fail("删除失败"); + } + +} diff --git a/src/main/java/com/eleadmin/oa/controller/AssetsController.java b/src/main/java/com/eleadmin/oa/controller/AssetsController.java new file mode 100644 index 0000000..59e755b --- /dev/null +++ b/src/main/java/com/eleadmin/oa/controller/AssetsController.java @@ -0,0 +1,152 @@ +package com.eleadmin.oa.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.eleadmin.common.core.annotation.OperationLog; +import com.eleadmin.common.core.utils.CommonUtil; +import com.eleadmin.common.core.web.*; +import com.eleadmin.oa.entity.Assets; +import com.eleadmin.oa.param.AssetsParam; +import com.eleadmin.oa.server.AssetsService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 资产控制器 + * + * @author gxwebsoft.com + * @since 2020-03-14 11:29:03 + */ +@Api(tags = "资产管理") +@RestController +@RequestMapping("/api/assets") +public class AssetsController extends BaseController { + @Resource + private AssetsService assetsService; + + @PreAuthorize("hasAuthority('sys:assets:list')") + @OperationLog + @ApiOperation("分页查询资产") + @GetMapping("/page") + public ApiResult> page(AssetsParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("sort_number"); + return success(assetsService.page(page, page.getWrapper())); + } + + @PreAuthorize("hasAuthority('sys:assets:list')") + @OperationLog + @ApiOperation("查询全部资产") + @GetMapping() + public ApiResult> list(AssetsParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("sort_number"); + return success(assetsService.list(page.getOrderWrapper())); + } + + @PreAuthorize("hasAuthority('sys:assets:list')") + @OperationLog + @ApiOperation("根据id查询资产") + @GetMapping("/{id}") + public ApiResult get(@PathVariable("id") Integer id) { + return success(assetsService.getById(id)); + } + + @PreAuthorize("hasAuthority('sys:assets:save')") + @ApiOperation("添加资产") + @PostMapping() + public ApiResult add(@RequestBody Assets assets) { + if (assetsService.count(new LambdaQueryWrapper() + .eq(Assets::getCode, assets.getCode())) > 0) { + return fail("资产标识已存在"); + } + if (assetsService.count(new LambdaQueryWrapper() + .eq(Assets::getName, assets.getName())) > 0) { + return fail("资产名称已存在"); + } + if (assetsService.save(assets)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @PreAuthorize("hasAuthority('sys:assets:update')") + @OperationLog + @ApiOperation("修改资产") + @PutMapping() + public ApiResult update(@RequestBody Assets assets) { + if (assetsService.count(new LambdaQueryWrapper() + .eq(Assets::getCode, assets.getCode()) + .ne(Assets::getAssetsId, assets.getAssetsId())) > 0) { + return fail("资产标识已存在"); + } + if (assetsService.count(new LambdaQueryWrapper() + .eq(Assets::getName, assets.getName()) + .ne(Assets::getAssetsId, assets.getAssetsId())) > 0) { + return fail("资产名称已存在"); + } + if (assetsService.updateById(assets)) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @PreAuthorize("hasAuthority('sys:assets:remove')") + @OperationLog + @ApiOperation("删除资产") + @DeleteMapping("/{id}") + public ApiResult remove(@PathVariable("id") Integer id) { + if (assetsService.removeById(id)) { + return success("删除成功"); + } + return fail("删除失败"); + } + + @PreAuthorize("hasAuthority('sys:assets:save')") + @OperationLog + @ApiOperation("批量添加资产") + @PostMapping("/batch") + public ApiResult> saveBatch(@RequestBody List list) { + if (CommonUtil.checkRepeat(list, Assets::getAssetsId)) { + return fail("资产标识不能重复", null); + } + if (CommonUtil.checkRepeat(list, Assets::getName)) { + return fail("资产名称不能重复", null); + } + List codeExists = assetsService.list(new LambdaQueryWrapper() + .in(Assets::getCode, list.stream().map(Assets::getCode) + .collect(Collectors.toList()))); + if (codeExists.size() > 0) { + return fail("资产标识已存在", codeExists.stream().map(Assets::getCode) + .collect(Collectors.toList())).setCode(2); + } + List nameExists = assetsService.list(new LambdaQueryWrapper() + .in(Assets::getName, list.stream().map(Assets::getName) + .collect(Collectors.toList()))); + if (nameExists.size() > 0) { + return fail("资产名称已存在", nameExists.stream().map(Assets::getName) + .collect(Collectors.toList())).setCode(3); + } + if (assetsService.saveBatch(list)) { + return success("添加成功", null); + } + return fail("添加失败", null); + } + + @PreAuthorize("hasAuthority('sys:assets:remove')") + @OperationLog + @ApiOperation("批量删除资产") + @DeleteMapping("/batch") + public ApiResult removeBatch(@RequestBody List ids) { + if (assetsService.removeByIds(ids)) { + return success("删除成功"); + } + return fail("删除失败"); + } + +} diff --git a/src/main/java/com/eleadmin/oa/controller/AssetsDataController.java b/src/main/java/com/eleadmin/oa/controller/AssetsDataController.java new file mode 100644 index 0000000..55849ee --- /dev/null +++ b/src/main/java/com/eleadmin/oa/controller/AssetsDataController.java @@ -0,0 +1,133 @@ +package com.eleadmin.oa.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.eleadmin.common.core.annotation.OperationLog; +import com.eleadmin.common.core.web.ApiResult; +import com.eleadmin.common.core.web.BaseController; +import com.eleadmin.common.core.web.PageResult; +import com.eleadmin.oa.entity.AssetsData; +import com.eleadmin.oa.param.AssetsDataParam; +import com.eleadmin.oa.server.AssetsDataService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 资产项控制器 + * + * @author gxwebsoft.com + * @since 2020-03-14 11:29:04 + */ +@Api(tags = "资产项管理") +@RestController +@RequestMapping("/api/assets-data") +public class AssetsDataController extends BaseController { + @Resource + private AssetsDataService assetsDataService; + + @PreAuthorize("hasAuthority('sys:assets:list')") + @OperationLog + @ApiOperation("分页查询资产项") + @GetMapping("/page") + public ApiResult> page(AssetsDataParam param) { + return success(assetsDataService.pageRel(param)); + } + + @PreAuthorize("hasAuthority('sys:assets:list')") + @OperationLog + @ApiOperation("查询全部资产项") + @GetMapping() + public ApiResult> list(AssetsDataParam param) { + return success(assetsDataService.listRel(param)); + } + + @PreAuthorize("hasAuthority('sys:assets:list')") + @OperationLog + @ApiOperation("根据id查询资产项") + @GetMapping("/{id}") + public ApiResult get(@PathVariable("id") Integer id) { + return success(assetsDataService.getByIdRel(id)); + } + + @PreAuthorize("hasAuthority('sys:assets:save')") + @OperationLog + @ApiOperation("添加资产项") + @PostMapping() + public ApiResult add(@RequestBody AssetsData assetsData) { + if (assetsDataService.count(new LambdaQueryWrapper() + .eq(AssetsData::getAssetsDataId, assetsData.getAssetsDataId()) + .eq(AssetsData::getAssetsDataName, assetsData.getAssetsDataName())) > 0) { + return fail("资产项名称已存在"); + } + if (assetsDataService.count(new LambdaQueryWrapper() + .eq(AssetsData::getAssetsDataId, assetsData.getAssetsDataId()) + .eq(AssetsData::getAssetsDataCode, assetsData.getAssetsDataCode())) > 0) { + return fail("资产项标识已存在"); + } + if (assetsDataService.save(assetsData)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @PreAuthorize("hasAuthority('sys:assets:update')") + @OperationLog + @ApiOperation("修改资产项") + @PutMapping() + public ApiResult update(@RequestBody AssetsData assetsData) { + if (assetsDataService.count(new LambdaQueryWrapper() + .eq(AssetsData::getAssetsDataId, assetsData.getAssetsDataId()) + .eq(AssetsData::getAssetsDataName, assetsData.getAssetsDataName()) + .ne(AssetsData::getAssetsDataId, assetsData.getAssetsDataId())) > 0) { + return fail("资产项名称已存在"); + } + if (assetsDataService.count(new LambdaQueryWrapper() + .eq(AssetsData::getAssetsDataId, assetsData.getAssetsDataId()) + .eq(AssetsData::getAssetsDataCode, assetsData.getAssetsDataCode()) + .ne(AssetsData::getAssetsDataId, assetsData.getAssetsDataId())) > 0) { + return fail("资产项标识已存在"); + } + if (assetsDataService.updateById(assetsData)) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @PreAuthorize("hasAuthority('sys:assets:remove')") + @OperationLog + @ApiOperation("删除资产项") + @DeleteMapping("/{id}") + public ApiResult remove(@PathVariable("id") Integer id) { + if (assetsDataService.removeById(id)) { + return success("删除成功"); + } + return fail("删除失败"); + } + + @PreAuthorize("hasAuthority('sys:assets:save')") + @OperationLog + @ApiOperation("批量添加资产项") + @PostMapping("/batch") + public ApiResult saveBatch(@RequestBody List assetsDataList) { + if (assetsDataService.saveBatch(assetsDataList)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @PreAuthorize("hasAuthority('sys:assets:remove')") + @OperationLog + @ApiOperation("批量删除资产项") + @DeleteMapping("/batch") + public ApiResult removeBatch(@RequestBody List ids) { + if (assetsDataService.removeByIds(ids)) { + return success("删除成功"); + } + return fail("删除失败"); + } + +} diff --git a/src/main/java/com/eleadmin/oa/controller/CustomerApplyController.java b/src/main/java/com/eleadmin/oa/controller/CustomerApplyController.java new file mode 100644 index 0000000..e4b6294 --- /dev/null +++ b/src/main/java/com/eleadmin/oa/controller/CustomerApplyController.java @@ -0,0 +1,44 @@ +package com.eleadmin.oa.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.eleadmin.common.core.web.ApiResult; +import com.eleadmin.common.core.web.BaseController; +import com.eleadmin.oa.entity.Customer; +import com.eleadmin.oa.entity.CustomerApply; +import com.eleadmin.oa.server.CustomerApplyService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +/** + * 申请免费体验 + * + * @author gxwebsoft.com + * @since 2020-03-14 11:29:03 + */ +@Api(tags = "申请免费体验") +@RestController +@RequestMapping("/api/customer-apply") +public class CustomerApplyController extends BaseController { + @Resource + private CustomerApplyService customerApplyService; + + @PreAuthorize("hasAuthority('sys:customer:apply')") + @ApiOperation("申请免费体验") + @PostMapping() + public ApiResult apply(@RequestBody CustomerApply customerApply) { + customerApply.setCustomerType("1"); + if (customerApplyService.count(new LambdaQueryWrapper() + .eq(CustomerApply::getCustomerName, customerApply.getCustomerName())) > 0) { + return fail("客户名称已存在"); + } + if (customerApplyService.save(customerApply)) { + return success("申请成功,请耐心等待工作人员与您联系!"); + } + return fail("申请失败"); + } + +} diff --git a/src/main/java/com/eleadmin/oa/controller/CustomerController.java b/src/main/java/com/eleadmin/oa/controller/CustomerController.java new file mode 100644 index 0000000..8f13c27 --- /dev/null +++ b/src/main/java/com/eleadmin/oa/controller/CustomerController.java @@ -0,0 +1,157 @@ +package com.eleadmin.oa.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.eleadmin.common.core.annotation.OperationLog; +import com.eleadmin.common.core.utils.CommonUtil; +import com.eleadmin.common.core.web.ApiResult; +import com.eleadmin.common.core.web.BaseController; +import com.eleadmin.common.core.web.PageParam; +import com.eleadmin.common.core.web.PageResult; +import com.eleadmin.oa.entity.Customer; +import com.eleadmin.oa.param.CustomerParam; +import com.eleadmin.oa.server.CustomerService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 客户控制器 + * + * @author gxwebsoft.com + * @since 2020-03-14 11:29:03 + */ +@Api(tags = "客户管理") +@RestController +@RequestMapping("/api/customer") +public class CustomerController extends BaseController { + @Resource + private CustomerService customerService; + + @PreAuthorize("hasAuthority('sys:customer:list')") + @OperationLog + @ApiOperation("分页查询客户") + @GetMapping("/page") + public ApiResult> page(CustomerParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("sort_number,create_time desc"); + return success(customerService.page(page, page.getWrapper())); + } + + @PreAuthorize("hasAuthority('sys:customer:list')") + @OperationLog + @ApiOperation("查询全部客户") + @GetMapping() + public ApiResult> list(CustomerParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("sort_number,create_time desc"); + return success(customerService.list(page.getOrderWrapper())); + } + + @PreAuthorize("hasAuthority('sys:customer:list')") + @OperationLog + @ApiOperation("根据id查询客户") + @GetMapping("/{id}") + public ApiResult get(@PathVariable("id") Integer id) { + return success(customerService.getById(id)); + } + + @PreAuthorize("hasAuthority('sys:customer:save')") + @ApiOperation("添加客户") + @PostMapping() + public ApiResult add(@RequestBody Customer customer) { + if (customerService.count(new LambdaQueryWrapper() + .eq(Customer::getCustomerCode, customer.getCustomerCode())) > 0) { + return fail("客户标识已存在"); + } + if (customerService.count(new LambdaQueryWrapper() + .eq(Customer::getCustomerName, customer.getCustomerName())) > 0) { + return fail("客户名称已存在"); + } + customer.setCustomerId(getLoginUserId()); + if (customerService.save(customer)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @PreAuthorize("hasAuthority('sys:customer:update')") + @OperationLog + @ApiOperation("修改客户") + @PutMapping() + public ApiResult update(@RequestBody Customer customer) { + if (customerService.count(new LambdaQueryWrapper() + .eq(Customer::getCustomerCode, customer.getCustomerCode()) + .ne(Customer::getCustomerId, customer.getCustomerId())) > 0) { + return fail("客户标识已存在"); + } + if (customerService.count(new LambdaQueryWrapper() + .eq(Customer::getCustomerName, customer.getCustomerName()) + .ne(Customer::getCustomerId, customer.getCustomerId())) > 0) { + return fail("客户名称已存在"); + } +// customer.setCustomerId(getLoginUserId()); + if (customerService.updateById(customer)) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @PreAuthorize("hasAuthority('sys:customer:remove')") + @OperationLog + @ApiOperation("删除客户") + @DeleteMapping("/{id}") + public ApiResult remove(@PathVariable("id") Integer id) { + if (customerService.removeById(id)) { + return success("删除成功"); + } + return fail("删除失败"); + } + + @PreAuthorize("hasAuthority('sys:customer:save')") + @OperationLog + @ApiOperation("批量添加客户") + @PostMapping("/batch") + public ApiResult> saveBatch(@RequestBody List list) { + if (CommonUtil.checkRepeat(list, Customer::getCustomerId)) { + return fail("客户标识不能重复", null); + } + if (CommonUtil.checkRepeat(list, Customer::getCustomerName)) { + return fail("客户名称不能重复", null); + } + List codeExists = customerService.list(new LambdaQueryWrapper() + .in(Customer::getCustomerCode, list.stream().map(Customer::getCustomerCode) + .collect(Collectors.toList()))); + if (codeExists.size() > 0) { + return fail("客户标识已存在", codeExists.stream().map(Customer::getCustomerCode) + .collect(Collectors.toList())).setCode(2); + } + List nameExists = customerService.list(new LambdaQueryWrapper() + .in(Customer::getCustomerName, list.stream().map(Customer::getCustomerName) + .collect(Collectors.toList()))); + if (nameExists.size() > 0) { + return fail("客户名称已存在", nameExists.stream().map(Customer::getCustomerName) + .collect(Collectors.toList())).setCode(3); + } + if (customerService.saveBatch(list)) { + return success("添加成功", null); + } + return fail("添加失败", null); + } + + @PreAuthorize("hasAuthority('sys:customer:remove')") + @OperationLog + @ApiOperation("批量删除客户") + @DeleteMapping("/batch") + public ApiResult removeBatch(@RequestBody List ids) { + if (customerService.removeByIds(ids)) { + return success("删除成功"); + } + return fail("删除失败"); + } + +} diff --git a/src/main/java/com/eleadmin/oa/controller/DemoController.java b/src/main/java/com/eleadmin/oa/controller/DemoController.java new file mode 100644 index 0000000..e206c8d --- /dev/null +++ b/src/main/java/com/eleadmin/oa/controller/DemoController.java @@ -0,0 +1,139 @@ +package com.eleadmin.oa.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.eleadmin.common.core.annotation.OperationLog; +import com.eleadmin.common.core.utils.CommonUtil; +import com.eleadmin.common.core.web.ApiResult; +import com.eleadmin.common.core.web.BaseController; +import com.eleadmin.common.core.web.PageParam; +import com.eleadmin.common.core.web.PageResult; +import com.eleadmin.oa.entity.Demo; +import com.eleadmin.oa.param.DemoParam; +import com.eleadmin.oa.server.DemoService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 测试控制器 + * + * @author gxwebsoft.com + * @since 2020-03-14 11:29:03 + */ +@Api(tags = "测试管理") +@RestController +@RequestMapping("/api/demo") +public class DemoController extends BaseController { + @Resource + private DemoService demoService; + + @PreAuthorize("hasAuthority('sys:demo:list')") + @OperationLog + @ApiOperation("分页查询测试") + @GetMapping("/page") + public ApiResult> page(DemoParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("sort_number,create_time desc"); + return success(demoService.page(page, page.getWrapper())); + } + + @PreAuthorize("hasAuthority('sys:demo:list')") + @OperationLog + @ApiOperation("查询全部测试") + @GetMapping() + public ApiResult> list(DemoParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("sort_number,create_time desc"); + return success(demoService.list(page.getOrderWrapper())); + } + + @PreAuthorize("hasAuthority('sys:demo:list')") + @OperationLog + @ApiOperation("根据id查询测试") + @GetMapping("/{id}") + public ApiResult get(@PathVariable("id") Integer id) { + return success(demoService.getById(id)); + } + + @PreAuthorize("hasAuthority('sys:demo:save')") + @ApiOperation("添加测试") + @PostMapping() + public ApiResult add(@RequestBody Demo demo) { + if (demoService.count(new LambdaQueryWrapper() + .eq(Demo::getDemoName, demo.getDemoName())) > 0) { + return fail("测试名称已存在"); + } + if (demoService.save(demo)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @PreAuthorize("hasAuthority('sys:demo:update')") + @OperationLog + @ApiOperation("修改测试") + @PutMapping() + public ApiResult update(@RequestBody Demo demo) { + if (demoService.count(new LambdaQueryWrapper() + .eq(Demo::getDemoName, demo.getDemoName()) + .ne(Demo::getDemoId, demo.getDemoId())) > 0) { + return fail("测试名称已存在"); + } + if (demoService.updateById(demo)) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @PreAuthorize("hasAuthority('sys:demo:remove')") + @OperationLog + @ApiOperation("删除测试") + @DeleteMapping("/{id}") + public ApiResult remove(@PathVariable("id") Integer id) { + if (demoService.removeById(id)) { + return success("删除成功"); + } + return fail("删除失败"); + } + + @PreAuthorize("hasAuthority('sys:demo:save')") + @OperationLog + @ApiOperation("批量添加测试") + @PostMapping("/batch") + public ApiResult> saveBatch(@RequestBody List list) { + if (CommonUtil.checkRepeat(list, Demo::getDemoId)) { + return fail("测试标识不能重复", null); + } + if (CommonUtil.checkRepeat(list, Demo::getDemoName)) { + return fail("测试名称不能重复", null); + } + List nameExists = demoService.list(new LambdaQueryWrapper() + .in(Demo::getDemoName, list.stream().map(Demo::getDemoName) + .collect(Collectors.toList()))); + if (nameExists.size() > 0) { + return fail("测试名称已存在", nameExists.stream().map(Demo::getDemoName) + .collect(Collectors.toList())).setCode(3); + } + if (demoService.saveBatch(list)) { + return success("添加成功", null); + } + return fail("添加失败", null); + } + + @PreAuthorize("hasAuthority('sys:demo:remove')") + @OperationLog + @ApiOperation("批量删除测试") + @DeleteMapping("/batch") + public ApiResult removeBatch(@RequestBody List ids) { + if (demoService.removeByIds(ids)) { + return success("删除成功"); + } + return fail("删除失败"); + } + +} diff --git a/src/main/java/com/eleadmin/oa/controller/ItemsController.java b/src/main/java/com/eleadmin/oa/controller/ItemsController.java new file mode 100644 index 0000000..c7d4150 --- /dev/null +++ b/src/main/java/com/eleadmin/oa/controller/ItemsController.java @@ -0,0 +1,155 @@ +package com.eleadmin.oa.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.eleadmin.common.core.annotation.OperationLog; +import com.eleadmin.common.core.utils.CommonUtil; +import com.eleadmin.common.core.web.ApiResult; +import com.eleadmin.common.core.web.BaseController; +import com.eleadmin.common.core.web.PageParam; +import com.eleadmin.common.core.web.PageResult; +import com.eleadmin.oa.entity.Items; +import com.eleadmin.oa.param.ItemsParam; +import com.eleadmin.oa.server.ItemsService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 项目控制器 + * + * @author gxwebsoft.com + * @since 2020-03-14 11:29:03 + */ +@Api(tags = "项目管理") +@RestController +@RequestMapping("/api/items") +public class ItemsController extends BaseController { + @Resource + private ItemsService itemsService; + + @PreAuthorize("hasAuthority('sys:items:list')") + @OperationLog + @ApiOperation("分页查询项目") + @GetMapping("/page") + public ApiResult> page(ItemsParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("sort_number,items_id desc"); + return success(itemsService.page(page, page.getWrapper())); + } + + @PreAuthorize("hasAuthority('sys:items:list')") + @OperationLog + @ApiOperation("查询全部项目") + @GetMapping() + public ApiResult> list(ItemsParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("sort_number,items_id desc"); + return success(itemsService.list(page.getOrderWrapper())); + } + + @PreAuthorize("hasAuthority('sys:items:list')") + @OperationLog + @ApiOperation("根据id查询项目") + @GetMapping("/{id}") + public ApiResult get(@PathVariable("id") Integer id) { + return success(itemsService.getById(id)); + } + + @PreAuthorize("hasAuthority('sys:items:save')") + @ApiOperation("添加项目") + @PostMapping() + public ApiResult add(@RequestBody Items items) { + if (itemsService.count(new LambdaQueryWrapper() + .eq(Items::getItemsCode, items.getItemsCode())) > 0) { + return fail("项目标识已存在"); + } + if (itemsService.count(new LambdaQueryWrapper() + .eq(Items::getItemsName, items.getItemsName())) > 0) { + return fail("项目名称已存在"); + } + if (itemsService.save(items)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @PreAuthorize("hasAuthority('sys:items:update')") + @OperationLog + @ApiOperation("修改项目") + @PutMapping() + public ApiResult update(@RequestBody Items items) { + if (itemsService.count(new LambdaQueryWrapper() + .eq(Items::getItemsCode, items.getItemsCode()) + .ne(Items::getItemsId, items.getItemsId())) > 0) { + return fail("项目标识已存在"); + } + if (itemsService.count(new LambdaQueryWrapper() + .eq(Items::getItemsName, items.getItemsName()) + .ne(Items::getItemsId, items.getItemsId())) > 0) { + return fail("项目名称已存在"); + } + if (itemsService.updateById(items)) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @PreAuthorize("hasAuthority('sys:items:remove')") + @OperationLog + @ApiOperation("删除项目") + @DeleteMapping("/{id}") + public ApiResult remove(@PathVariable("id") Integer id) { + if (itemsService.removeById(id)) { + return success("删除成功"); + } + return fail("删除失败"); + } + + @PreAuthorize("hasAuthority('sys:items:save')") + @OperationLog + @ApiOperation("批量添加项目") + @PostMapping("/batch") + public ApiResult> saveBatch(@RequestBody List list) { + if (CommonUtil.checkRepeat(list, Items::getItemsId)) { + return fail("项目标识不能重复", null); + } + if (CommonUtil.checkRepeat(list, Items::getItemsName)) { + return fail("项目名称不能重复", null); + } + List codeExists = itemsService.list(new LambdaQueryWrapper() + .in(Items::getItemsCode, list.stream().map(Items::getItemsCode) + .collect(Collectors.toList()))); + if (codeExists.size() > 0) { + return fail("项目标识已存在", codeExists.stream().map(Items::getItemsCode) + .collect(Collectors.toList())).setCode(2); + } + List nameExists = itemsService.list(new LambdaQueryWrapper() + .in(Items::getItemsName, list.stream().map(Items::getItemsName) + .collect(Collectors.toList()))); + if (nameExists.size() > 0) { + return fail("项目名称已存在", nameExists.stream().map(Items::getItemsName) + .collect(Collectors.toList())).setCode(3); + } + if (itemsService.saveBatch(list)) { + return success("添加成功", null); + } + return fail("添加失败", null); + } + + @PreAuthorize("hasAuthority('sys:items:remove')") + @OperationLog + @ApiOperation("批量删除项目") + @DeleteMapping("/batch") + public ApiResult removeBatch(@RequestBody List ids) { + if (itemsService.removeByIds(ids)) { + return success("删除成功"); + } + return fail("删除失败"); + } + +} diff --git a/src/main/java/com/eleadmin/oa/controller/LinkController.java b/src/main/java/com/eleadmin/oa/controller/LinkController.java new file mode 100644 index 0000000..602f4c1 --- /dev/null +++ b/src/main/java/com/eleadmin/oa/controller/LinkController.java @@ -0,0 +1,115 @@ +package com.eleadmin.oa.controller; + +import com.eleadmin.common.core.annotation.OperationLog; +import com.eleadmin.common.core.web.ApiResult; +import com.eleadmin.common.core.web.BaseController; +import com.eleadmin.common.core.web.PageParam; +import com.eleadmin.common.core.web.PageResult; +import com.eleadmin.common.system.entity.User; +import com.eleadmin.oa.entity.Link; +import com.eleadmin.oa.param.LinkParam; +import com.eleadmin.oa.server.LinkService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 链接控制器 + * + * @author gxwebsoft.com + * @since 2020-03-14 11:29:03 + */ +@Api(tags = "链接管理") +@RestController +@RequestMapping("/api/link") +public class LinkController extends BaseController { + @Resource + private LinkService linkService; + + @PreAuthorize("hasAuthority('sys:link:list')") + @OperationLog + @ApiOperation("分页查询链接") + @GetMapping("/page") + public ApiResult> page(LinkParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("sort_number, clicks desc"); + return success(linkService.page(page, page.getWrapper())); + } + + @PreAuthorize("hasAuthority('sys:link:list')") + @OperationLog + @ApiOperation("查询全部链接") + @GetMapping() + public ApiResult> list(LinkParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("sort_number, clicks desc"); + return success(linkService.list(page.getOrderWrapper())); + } + + @PreAuthorize("hasAuthority('sys:link:list')") + @OperationLog + @ApiOperation("根据id查询链接") + @GetMapping("/{id}") + public ApiResult get(@PathVariable("id") Integer id) { + return success(linkService.getById(id)); + } + + @PreAuthorize("hasAuthority('sys:link:save')") + @ApiOperation("添加链接") + @PostMapping() + public ApiResult add(@RequestBody Link link) { + if (linkService.save(link)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @PreAuthorize("hasAuthority('sys:link:update')") + @OperationLog + @ApiOperation("修改链接") + @PutMapping() + public ApiResult update(@RequestBody Link link) { + if (linkService.updateById(link)) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @PreAuthorize("hasAuthority('sys:link:remove')") + @OperationLog + @ApiOperation("删除链接") + @DeleteMapping("/{id}") + public ApiResult remove(@PathVariable("id") Integer id) { + if (linkService.removeById(id)) { + return success("删除成功"); + } + return fail("删除失败"); + } + + @PreAuthorize("hasAuthority('sys:link:save')") + @OperationLog + @ApiOperation("批量添加链接") + @PostMapping("/batch") + public ApiResult> saveBatch(@RequestBody List list) { + if (linkService.saveBatch(list)) { + return success("添加成功", null); + } + return fail("添加失败", null); + } + + @PreAuthorize("hasAuthority('sys:link:remove')") + @OperationLog + @ApiOperation("批量删除链接") + @DeleteMapping("/batch") + public ApiResult removeBatch(@RequestBody List ids) { + if (linkService.removeByIds(ids)) { + return success("删除成功"); + } + return fail("删除失败"); + } + +} diff --git a/src/main/java/com/eleadmin/oa/controller/TenantController.java b/src/main/java/com/eleadmin/oa/controller/TenantController.java new file mode 100644 index 0000000..790cfa1 --- /dev/null +++ b/src/main/java/com/eleadmin/oa/controller/TenantController.java @@ -0,0 +1,131 @@ +package com.eleadmin.oa.controller; + +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.eleadmin.common.core.annotation.OperationLog; +import com.eleadmin.common.core.web.ApiResult; +import com.eleadmin.common.core.web.BaseController; +import com.eleadmin.common.core.web.PageParam; +import com.eleadmin.common.core.web.PageResult; +import com.eleadmin.common.system.entity.User; +import com.eleadmin.common.system.service.UserService; +import com.eleadmin.oa.entity.Tenant; +import com.eleadmin.oa.param.TenantParam; +import com.eleadmin.oa.server.TenantService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 租户控制器 + * + * @author gxwebsoft.com + * @since 2020-03-14 11:29:03 + */ +@Api(tags = "租户管理") +@RestController +@RequestMapping("/api/tenant") +public class TenantController extends BaseController { + @Resource + private TenantService tenantService; + + @Resource + private UserService userService; + + @PreAuthorize("hasAuthority('sys:tenant:list')") + @OperationLog + @ApiOperation("分页查询租户") + @GetMapping("/page") + public ApiResult> page(TenantParam param) { + PageParam page = new PageParam<>(param); + return success(tenantService.page(page, page.getWrapper())); + } + + @PreAuthorize("hasAuthority('sys:tenant:list')") + @OperationLog + @ApiOperation("查询全部租户") + @GetMapping() + public ApiResult> list(TenantParam param) { + PageParam page = new PageParam<>(param); + return success(tenantService.list(page.getOrderWrapper())); + } + + @PreAuthorize("hasAuthority('sys:tenant:list')") + @OperationLog + @ApiOperation("根据id查询租户") + @GetMapping("/{id}") + public ApiResult get(@PathVariable("id") Integer id) { + return success(tenantService.getById(id)); + } + + @PreAuthorize("hasAuthority('sys:tenant:save')") + @ApiOperation("添加租户") + @PostMapping() + public ApiResult add(@RequestBody Tenant tenant) { + if (tenantService.saveTenant(tenant)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @PreAuthorize("hasAuthority('sys:tenant:update')") + @OperationLog + @ApiOperation("修改租户") + @PutMapping() + public ApiResult update(@RequestBody Tenant tenant) { + if (tenantService.updateById(tenant)) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @PreAuthorize("hasAuthority('sys:tenant:remove')") + @OperationLog + @ApiOperation("删除租户") + @DeleteMapping("/{id}") + public ApiResult remove(@PathVariable("id") Integer id) { + if (tenantService.removeById(id)) { + return success("删除成功"); + } + return fail("删除失败"); + } + + @PreAuthorize("hasAuthority('sys:tenant:save')") + @OperationLog + @ApiOperation("批量添加租户") + @PostMapping("/batch") + public ApiResult> saveBatch(@RequestBody List list) { + if (tenantService.saveBatch(list)) { + return success("添加成功", null); + } + return fail("添加失败", null); + } + + @PreAuthorize("hasAuthority('sys:tenant:remove')") + @OperationLog + @ApiOperation("批量删除租户") + @DeleteMapping("/batch") + public ApiResult removeBatch(@RequestBody List ids) { + if (tenantService.removeByIds(ids)) { + return success("删除成功"); + } + return fail("删除失败"); + } + + @PreAuthorize("hasAuthority('sys:tenant:update')") + @OperationLog + @ApiOperation("重置密码") + @PutMapping("/password") + public ApiResult resetPassword(@RequestBody Tenant tenant) { + if (userService.update(new LambdaUpdateWrapper() + .eq(User::getUsername, "admin") + .eq(User::getTenantId, tenant.getTenantId()) + .set(User::getPassword, userService.encodePassword(tenant.getPassword())))) { + return success("操作成功"); + } + return fail("操作失败"); + } +} diff --git a/src/main/java/com/eleadmin/oa/entity/App.java b/src/main/java/com/eleadmin/oa/entity/App.java new file mode 100644 index 0000000..c400370 --- /dev/null +++ b/src/main/java/com/eleadmin/oa/entity/App.java @@ -0,0 +1,73 @@ +package com.eleadmin.oa.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableLogic; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 应用 + * + * @author gxwebsoft.com + * @since 2020-03-14 11:29:04 + */ +@Data +@ApiModel(description = "应用中心") +@TableName("oa_app") +public class App implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("ID") + @TableId(type = IdType.AUTO) + private Integer appId; + + @ApiModelProperty(value = "应用名称") + private String appName; + + @ApiModelProperty(value = "应用标识") + private String appCode; + + @ApiModelProperty(value = "包名") + private String packageName; + + @ApiModelProperty(value = "应用地址") + private String appUrl; + + @ApiModelProperty(value = "下载地址") + private String downUrl; + + @ApiModelProperty(value = "应用类型") + private String type; + + @ApiModelProperty(value = "应用图标") + private String appIcon; + + @ApiModelProperty(value = "点击次数") + private Integer clicks; + + @ApiModelProperty(value = "状态, 0正常, 1冻结") + private String status; + + @ApiModelProperty(value = "备注") + private String comments; + + @ApiModelProperty(value = "排序号") + private Integer sortNumber; + + @ApiModelProperty(value = "是否删除, 0否, 1是") + @TableLogic + private Integer deleted; + + @ApiModelProperty(value = "创建时间") + private Date createTime; + + @ApiModelProperty(value = "修改时间") + private Date updateTime; + +} diff --git a/src/main/java/com/eleadmin/oa/entity/Assets.java b/src/main/java/com/eleadmin/oa/entity/Assets.java new file mode 100644 index 0000000..b3c83c4 --- /dev/null +++ b/src/main/java/com/eleadmin/oa/entity/Assets.java @@ -0,0 +1,122 @@ +package com.eleadmin.oa.entity; + +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +/** + * 资产 + * + * @author gxwebsoft.com + * @since 2020-03-14 11:29:04 + */ +@Data +@ApiModel(description = "资产") +@TableName("oa_assets") +public class Assets implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("ID") + @TableId(type = IdType.AUTO) + private Integer assetsId; + + @ApiModelProperty(value = "资产名称") + private String name; + + @ApiModelProperty(value = "资产标识") + private String code; + + @ApiModelProperty(value = "资产类型") + private String type; + + @ApiModelProperty(value = "品牌厂商") + private String brand; + + @ApiModelProperty(value = "购买时间") + @JsonFormat(pattern = "yyyy-MM-dd") + private Date startTime; + + @ApiModelProperty(value = "到期时间") + @JsonFormat(pattern = "yyyy-MM-dd") + private Date endTime; + + @ApiModelProperty(value = "宝塔面板") + private String panel; + + @ApiModelProperty(value = "宝塔账号") + private String panelAccount; + + @ApiModelProperty(value = "宝塔面板密码") + private String panelPassword; + + @ApiModelProperty(value = "服务器root账号") + private String account; + + @ApiModelProperty(value = "服务器root密码") + private String password; + + @ApiModelProperty(value = "(阿里云/腾讯云)登录账号") + private String brandAccount; + + @ApiModelProperty(value = "(阿里云/腾讯云)登录密码") + private String brandPassword; + + @ApiModelProperty(value = "开发端口") + private String openPort; + + @ApiModelProperty(value = "服务器配置") + private String configuration; + + @ApiModelProperty(value = "合同金额") + @JsonFormat(shape = JsonFormat.Shape.STRING) + private BigDecimal financeAmount; + + @ApiModelProperty(value = "购买年限") + private String financeYears; + + @ApiModelProperty(value = "续费金额") + @JsonFormat(shape = JsonFormat.Shape.STRING) + private BigDecimal financeRenew; + + @ApiModelProperty(value = "客户Id") + private Integer customerId; + + @ApiModelProperty(value = "客户名称") + private String customerName; + + @ApiModelProperty(value = "客户名称") + @TableField(exist = false) + private String financeCustomerName; + + @ApiModelProperty(value = "客户联系人") + private String financeCustomerContact; + + @ApiModelProperty(value = "客户联系电话") + private String financeCustomerPhone; + + @ApiModelProperty(value = "备注") + private String comments; + + @ApiModelProperty(value = "状态, 0正常, 1过期, 2废弃") + private String status; + + @ApiModelProperty(value = "排序号") + private Integer sortNumber; + + @ApiModelProperty(value = "是否删除, 0否, 1是") + @TableLogic + private Integer deleted; + + @ApiModelProperty(value = "创建时间") + private Date createTime; + + @ApiModelProperty(value = "修改时间") + private Date updateTime; + +} diff --git a/src/main/java/com/eleadmin/oa/entity/AssetsData.java b/src/main/java/com/eleadmin/oa/entity/AssetsData.java new file mode 100644 index 0000000..57a29de --- /dev/null +++ b/src/main/java/com/eleadmin/oa/entity/AssetsData.java @@ -0,0 +1,51 @@ +package com.eleadmin.oa.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableLogic; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 资产项 + * + * @author gxwebsoft.com + * @since 2020-03-14 11:29:04 + */ +@Data +@ApiModel(description = "资产项") +@TableName("oa_assets_data") +public class AssetsData implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("ID") + @TableId(type = IdType.AUTO) + private Integer assetsDataId; + + @ApiModelProperty(value = "资产项名称") + private String assetsDataName; + + @ApiModelProperty(value = "资产项标识") + private String assetsDataCode; + + @ApiModelProperty(value = "排序号") + private Integer sortNumber; + + @ApiModelProperty(value = "备注") + private String comments; + + @ApiModelProperty(value = "是否删除, 0否, 1是") + @TableLogic + private Integer deleted; + + @ApiModelProperty(value = "创建时间") + private Date createTime; + + @ApiModelProperty(value = "修改时间") + private Date updateTime; +} diff --git a/src/main/java/com/eleadmin/oa/entity/Customer.java b/src/main/java/com/eleadmin/oa/entity/Customer.java new file mode 100644 index 0000000..79fac9d --- /dev/null +++ b/src/main/java/com/eleadmin/oa/entity/Customer.java @@ -0,0 +1,83 @@ +package com.eleadmin.oa.entity; + +import com.baomidou.mybatisplus.annotation.*; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 客户 + * + * @author gxwebsoft.com + * @since 2020-03-14 11:29:04 + */ +@Data +@ApiModel(description = "客户") +@TableName("oa_customer") +public class Customer implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("ID") + @TableId(type = IdType.AUTO) + private Integer customerId; + + @ApiModelProperty(value = "客户名称") + private String customerName; + + @ApiModelProperty(value = "客户标识") + private String customerCode; + + @ApiModelProperty(value = "客户类型") + private String customerType; + + @ApiModelProperty(value = "客户来源") + private String customerSource; + + @ApiModelProperty(value = "客户头像") + private String customerAvatar; + + @ApiModelProperty(value = "座机电话") + private String customerPhone; + + @ApiModelProperty(value = "手机号码") + private String customerMobile; + + @ApiModelProperty(value = "联系人") + private String customerContacts; + + @ApiModelProperty(value = "联系地址") + private String customerAddress; + + @ApiModelProperty(value = "跟进状态") + private String progress; + + @ApiModelProperty(value = "用户ID") + private Integer userId; + + @ApiModelProperty(value = "用户昵称") + @TableField(exist = false) + private String userName; + + @ApiModelProperty(value = "状态, 0正常, 1冻结") + private String status; + + @ApiModelProperty(value = "备注") + private String comments; + + @ApiModelProperty(value = "排序号") + private Integer sortNumber; + + @ApiModelProperty(value = "是否删除, 0否, 1是") + @TableLogic + private Integer deleted; + + @ApiModelProperty(value = "创建时间") + private Date createTime; + + @ApiModelProperty(value = "修改时间") + private Date updateTime; + +} diff --git a/src/main/java/com/eleadmin/oa/entity/CustomerApply.java b/src/main/java/com/eleadmin/oa/entity/CustomerApply.java new file mode 100644 index 0000000..2cae484 --- /dev/null +++ b/src/main/java/com/eleadmin/oa/entity/CustomerApply.java @@ -0,0 +1,73 @@ +package com.eleadmin.oa.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableLogic; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 客户 + * + * @author gxwebsoft.com + * @since 2020-03-14 11:29:04 + */ +@Data +@ApiModel(description = "申请免费体验") +@TableName("oa_customer_apply") +public class CustomerApply implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("ID") + @TableId(type = IdType.AUTO) + private Integer customerId; + + @ApiModelProperty(value = "客户名称") + private String customerName; + + @ApiModelProperty(value = "客户标识") + private String customerCode; + + @ApiModelProperty(value = "客户类型") + private String customerType; + + @ApiModelProperty(value = "客户头像") + private String customerAvatar; + + @ApiModelProperty(value = "座机电话") + private String customerPhone; + + @ApiModelProperty(value = "手机号码") + private String customerMobile; + + @ApiModelProperty(value = "联系人") + private String customerContacts; + + @ApiModelProperty(value = "联系地址") + private String customerAddress; + + @ApiModelProperty(value = "状态, 0正常, 1冻结") + private String status; + + @ApiModelProperty(value = "备注") + private String comments; + + @ApiModelProperty(value = "排序号") + private Integer sortNumber; + + @ApiModelProperty(value = "是否删除, 0否, 1是") + @TableLogic + private Integer deleted; + + @ApiModelProperty(value = "创建时间") + private Date createTime; + + @ApiModelProperty(value = "修改时间") + private Date updateTime; + +} diff --git a/src/main/java/com/eleadmin/oa/entity/Demo.java b/src/main/java/com/eleadmin/oa/entity/Demo.java new file mode 100644 index 0000000..3311347 --- /dev/null +++ b/src/main/java/com/eleadmin/oa/entity/Demo.java @@ -0,0 +1,55 @@ +package com.eleadmin.oa.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableLogic; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 测试 + * + * @author gxwebsoft.com + * @since 2020-03-14 11:29:04 + */ +@Data +@ApiModel(description = "测试") +@TableName("oa_demo") +public class Demo implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("ID") + @TableId(type = IdType.AUTO) + private Integer demoId; + + @ApiModelProperty(value = "测试名称") + private String demoName; + + @ApiModelProperty(value = "测试类型") + private String demoType; + + @ApiModelProperty(value = "状态, 0正常, 1冻结") + private String status; + + @ApiModelProperty(value = "备注") + private String comments; + + @ApiModelProperty(value = "排序号") + private Integer sortNumber; + + @ApiModelProperty(value = "是否删除, 0否, 1是") + @TableLogic + private Integer deleted; + + @ApiModelProperty(value = "创建时间") + private Date createTime; + + @ApiModelProperty(value = "修改时间") + private Date updateTime; + +} diff --git a/src/main/java/com/eleadmin/oa/entity/Items.java b/src/main/java/com/eleadmin/oa/entity/Items.java new file mode 100644 index 0000000..ca89611 --- /dev/null +++ b/src/main/java/com/eleadmin/oa/entity/Items.java @@ -0,0 +1,117 @@ +package com.eleadmin.oa.entity; + +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.xml.soap.Text; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +/** + * 项目管理 + * + * @author gxwebsoft.com + * @since 2020-03-14 11:29:04 + */ +@Data +@ApiModel(description = "项目") +@TableName("oa_items") +public class Items implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("ID") + @TableId(type = IdType.AUTO) + private Integer itemsId; + + @ApiModelProperty(value = "项目名称") + private String itemsName; + + @ApiModelProperty(value = "项目标识") + private String itemsCode; + + @ApiModelProperty(value = "项目分类") + private String itemsCategory; + + @ApiModelProperty(value = "项目类型") + @TableField(exist = false) + private String itemsType; + + @ApiModelProperty(value = "项目图标") + private String itemsAvatar; + + @ApiModelProperty(value = "项目链接") + private String url; + + @ApiModelProperty(value = "开发环境地址") + private String urlDev; + + @ApiModelProperty(value = "后台管理地址") + private String urlAdmin; + + @ApiModelProperty(value = "默认登录账号密码") + private String account; + + @ApiModelProperty(value = "项目金额") + @JsonFormat(shape = JsonFormat.Shape.STRING) + private BigDecimal money; + + @ApiModelProperty(value = "实际合同金额") + @JsonFormat(shape = JsonFormat.Shape.STRING) + private BigDecimal realMoney; + + @ApiModelProperty(value = "续费金额") + @JsonFormat(shape = JsonFormat.Shape.STRING) + private BigDecimal annualFee; + + @ApiModelProperty(value = "项目详情") + private String content; + + @ApiModelProperty(value = "开发参数") + private String param; + + @ApiModelProperty(value = "二维码") + private String qrcode; + + @ApiModelProperty(value = "客户名称") + private String customerName; + + @ApiModelProperty(value = "项目进度") + private String progress; + + @ApiModelProperty(value = "项目浏览数") + private String views; + + @ApiModelProperty(value = "是否精选") + private Number isCase; + + @ApiModelProperty(value = "关联客户") + private Integer customerId; + + @ApiModelProperty(value = "用户ID") + private Integer userId; + + @ApiModelProperty(value = "状态, 0上架, 1下架") + private String status; + + @ApiModelProperty(value = "备注") + private String comments; + + @ApiModelProperty(value = "排序号") + private Integer sortNumber; + + @ApiModelProperty(value = "是否删除, 0否, 1是") + @TableLogic + private Integer deleted; + + @ApiModelProperty(value = "创建时间") + private Date createTime; + + @ApiModelProperty(value = "修改时间") + private Date updateTime; + +} diff --git a/src/main/java/com/eleadmin/oa/entity/Link.java b/src/main/java/com/eleadmin/oa/entity/Link.java new file mode 100644 index 0000000..4bad23b --- /dev/null +++ b/src/main/java/com/eleadmin/oa/entity/Link.java @@ -0,0 +1,79 @@ +package com.eleadmin.oa.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableLogic; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 链接 + * + * @author gxwebsoft.com + * @since 2020-03-14 11:29:04 + */ +@Data +@ApiModel(description = "链接") +@TableName("oa_link") +public class Link implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("ID") + @TableId(type = IdType.AUTO) + private Integer linkId; + + @ApiModelProperty(value = "链接名称") + private String linkName; + + @ApiModelProperty(value = "链接地址") + private String linkUrl; + + @ApiModelProperty(value = "下载地址") + private String linkDown; + + @ApiModelProperty(value = "路由地址") + private String linkPath; + + @ApiModelProperty(value = "路径路径") + private String linkComponent; + + @ApiModelProperty(value = "链接类型") + private String type; + + @ApiModelProperty(value = "链接类别") + private String category; + + @ApiModelProperty(value = "链接图标") + private String linkIcon; + + @ApiModelProperty(value = "访问账号") + private String linkAccount; + + @ApiModelProperty(value = "访问密码") + private String linkPassword; + + @ApiModelProperty(value = "点击次数") + private Integer clicks; + + @ApiModelProperty(value = "备注") + private String comments; + + @ApiModelProperty(value = "排序号") + private Integer sortNumber; + + @ApiModelProperty(value = "是否删除, 0否, 1是") + @TableLogic + private Integer deleted; + + @ApiModelProperty(value = "创建时间") + private Date createTime; + + @ApiModelProperty(value = "修改时间") + private Date updateTime; + +} diff --git a/src/main/java/com/eleadmin/oa/entity/Tenant.java b/src/main/java/com/eleadmin/oa/entity/Tenant.java new file mode 100644 index 0000000..af77842 --- /dev/null +++ b/src/main/java/com/eleadmin/oa/entity/Tenant.java @@ -0,0 +1,47 @@ +package com.eleadmin.oa.entity; + +import com.baomidou.mybatisplus.annotation.*; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 租户 + * + * @author gxwebsoft.com + * @since 2021-08-28 11:31:06 + */ +@Data +@ApiModel(description = "租户") +@TableName("sys_tenant") +public class Tenant implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("租户id") + @TableId(type = IdType.AUTO) + private Integer tenantId; + + @ApiModelProperty("租户名称") + private String tenantName; + + @ApiModelProperty("管理员密码") + @TableField(exist = false) + private String password; + + @ApiModelProperty("备注") + private String comments; + + @ApiModelProperty("是否删除, 0否, 1是") + @TableLogic + private Integer deleted; + + @ApiModelProperty("创建时间") + private Date createTime; + + @ApiModelProperty("修改时间") + private Date updateTime; + +} diff --git a/src/main/java/com/eleadmin/oa/mapper/AppMapper.java b/src/main/java/com/eleadmin/oa/mapper/AppMapper.java new file mode 100644 index 0000000..8f64c18 --- /dev/null +++ b/src/main/java/com/eleadmin/oa/mapper/AppMapper.java @@ -0,0 +1,14 @@ +package com.eleadmin.oa.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.eleadmin.oa.entity.App; + +/** + * 应用Mapper + * + * @author gxwebsoft.com + * @since 2020-03-14 11:29:03 + */ +public interface AppMapper extends BaseMapper { + +} diff --git a/src/main/java/com/eleadmin/oa/mapper/AssetsDataMapper.java b/src/main/java/com/eleadmin/oa/mapper/AssetsDataMapper.java new file mode 100644 index 0000000..718cb91 --- /dev/null +++ b/src/main/java/com/eleadmin/oa/mapper/AssetsDataMapper.java @@ -0,0 +1,47 @@ +package com.eleadmin.oa.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.eleadmin.oa.entity.AssetsData; +import com.eleadmin.oa.param.AssetsDataParam; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 资产数据Mapper + * + * @author gxwebsoft.com + * @since 2020-03-14 11:29:04 + */ +public interface AssetsDataMapper extends BaseMapper { + + /** + * 分页查询 + * + * @param page 分页对象 + * @param param 查询参数 + * @return List + */ + List selectPageRel(@Param("page") IPage page, + @Param("param") AssetsDataParam param); + + /** + * 查询全部 + * + * @param param 查询参数 + * @return List + */ + List selectListRel(@Param("param") AssetsDataParam param); + + /** + * 根据assetsCode和assetsDataName查询 + * + * @param assetsCode 资产标识 + * @param assetsDataName 资产项名称 + * @return List + */ + List getByAssetsCodeAndName(@Param("assetsCode") String assetsCode, + @Param("assetsDataName") String assetsDataName); + +} diff --git a/src/main/java/com/eleadmin/oa/mapper/AssetsMapper.java b/src/main/java/com/eleadmin/oa/mapper/AssetsMapper.java new file mode 100644 index 0000000..07c8e3c --- /dev/null +++ b/src/main/java/com/eleadmin/oa/mapper/AssetsMapper.java @@ -0,0 +1,14 @@ +package com.eleadmin.oa.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.eleadmin.oa.entity.Assets; + +/** + * 资产Mapper + * + * @author gxwebsoft.com + * @since 2020-03-14 11:29:03 + */ +public interface AssetsMapper extends BaseMapper { + +} diff --git a/src/main/java/com/eleadmin/oa/mapper/CustomerApplyMapper.java b/src/main/java/com/eleadmin/oa/mapper/CustomerApplyMapper.java new file mode 100644 index 0000000..6e19d7a --- /dev/null +++ b/src/main/java/com/eleadmin/oa/mapper/CustomerApplyMapper.java @@ -0,0 +1,14 @@ +package com.eleadmin.oa.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.eleadmin.oa.entity.CustomerApply; + +/** + * 项目Mapper + * + * @author gxwebsoft.com + * @since 2020-03-14 11:29:03 + */ +public interface CustomerApplyMapper extends BaseMapper { + +} diff --git a/src/main/java/com/eleadmin/oa/mapper/CustomerMapper.java b/src/main/java/com/eleadmin/oa/mapper/CustomerMapper.java new file mode 100644 index 0000000..9c95bd9 --- /dev/null +++ b/src/main/java/com/eleadmin/oa/mapper/CustomerMapper.java @@ -0,0 +1,14 @@ +package com.eleadmin.oa.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.eleadmin.oa.entity.Customer; + +/** + * 项目Mapper + * + * @author gxwebsoft.com + * @since 2020-03-14 11:29:03 + */ +public interface CustomerMapper extends BaseMapper { + +} diff --git a/src/main/java/com/eleadmin/oa/mapper/DemoMapper.java b/src/main/java/com/eleadmin/oa/mapper/DemoMapper.java new file mode 100644 index 0000000..46bf7fb --- /dev/null +++ b/src/main/java/com/eleadmin/oa/mapper/DemoMapper.java @@ -0,0 +1,14 @@ +package com.eleadmin.oa.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.eleadmin.oa.entity.Demo; + +/** + * 项目Mapper + * + * @author gxwebsoft.com + * @since 2020-03-14 11:29:03 + */ +public interface DemoMapper extends BaseMapper { + +} diff --git a/src/main/java/com/eleadmin/oa/mapper/ItemsMapper.java b/src/main/java/com/eleadmin/oa/mapper/ItemsMapper.java new file mode 100644 index 0000000..893fcdc --- /dev/null +++ b/src/main/java/com/eleadmin/oa/mapper/ItemsMapper.java @@ -0,0 +1,14 @@ +package com.eleadmin.oa.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.eleadmin.oa.entity.Items; + +/** + * 项目Mapper + * + * @author gxwebsoft.com + * @since 2020-03-14 11:29:03 + */ +public interface ItemsMapper extends BaseMapper { + +} diff --git a/src/main/java/com/eleadmin/oa/mapper/LinkMapper.java b/src/main/java/com/eleadmin/oa/mapper/LinkMapper.java new file mode 100644 index 0000000..13c1201 --- /dev/null +++ b/src/main/java/com/eleadmin/oa/mapper/LinkMapper.java @@ -0,0 +1,14 @@ +package com.eleadmin.oa.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.eleadmin.oa.entity.Link; + +/** + * 链接Mapper + * + * @author gxwebsoft.com + * @since 2020-03-14 11:29:03 + */ +public interface LinkMapper extends BaseMapper { + +} diff --git a/src/main/java/com/eleadmin/oa/mapper/TenantMapper.java b/src/main/java/com/eleadmin/oa/mapper/TenantMapper.java new file mode 100644 index 0000000..b9a551f --- /dev/null +++ b/src/main/java/com/eleadmin/oa/mapper/TenantMapper.java @@ -0,0 +1,14 @@ +package com.eleadmin.oa.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.eleadmin.oa.entity.Tenant; + +/** + * 租户Mapper + * + * @author gxwebsoft.com + * @since 2020-03-14 11:29:03 + */ +public interface TenantMapper extends BaseMapper { + +} diff --git a/src/main/java/com/eleadmin/oa/mapper/xml/AppMapper.xml b/src/main/java/com/eleadmin/oa/mapper/xml/AppMapper.xml new file mode 100644 index 0000000..087e52a --- /dev/null +++ b/src/main/java/com/eleadmin/oa/mapper/xml/AppMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/java/com/eleadmin/oa/mapper/xml/CustomerApplyMapper.xml b/src/main/java/com/eleadmin/oa/mapper/xml/CustomerApplyMapper.xml new file mode 100644 index 0000000..7463bdd --- /dev/null +++ b/src/main/java/com/eleadmin/oa/mapper/xml/CustomerApplyMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/java/com/eleadmin/oa/mapper/xml/CustomerMapper.xml b/src/main/java/com/eleadmin/oa/mapper/xml/CustomerMapper.xml new file mode 100644 index 0000000..2f9de90 --- /dev/null +++ b/src/main/java/com/eleadmin/oa/mapper/xml/CustomerMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/java/com/eleadmin/oa/mapper/xml/DemoMapper.xml b/src/main/java/com/eleadmin/oa/mapper/xml/DemoMapper.xml new file mode 100644 index 0000000..aac106c --- /dev/null +++ b/src/main/java/com/eleadmin/oa/mapper/xml/DemoMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/java/com/eleadmin/oa/mapper/xml/DictionaryDataMapper.xml b/src/main/java/com/eleadmin/oa/mapper/xml/DictionaryDataMapper.xml new file mode 100644 index 0000000..b133fbb --- /dev/null +++ b/src/main/java/com/eleadmin/oa/mapper/xml/DictionaryDataMapper.xml @@ -0,0 +1,71 @@ + + + + + + + SELECT a.*, + b.assets_code, + b.assets_name + FROM sys_assets_data a + LEFT JOIN sys_assets b ON a.assets_id = b.assets_id + + AND a.deleted = 0 + + AND a.assets_data_id = #{param.assetsDataId} + + + AND a.assets_id = #{param.assetsId} + + + AND a.assets_data_code LIKE CONCAT('%', #{param.assetsDataCode}, '%') + + + AND a.assets_data_name LIKE CONCAT('%', #{param.assetsDataName}, '%') + + + AND a.comments LIKE CONCAT('%', #{param.comments}, '%') + + + AND a.create_time >= #{param.createTimeStart} + + + AND a.create_time <= #{param.createTimeEnd} + + + AND b.assets_code = #{param.assetsCode} + + + AND b.assets_name = #{param.assetsName} + + + AND ( + a.assets_data_code LIKE CONCAT('%', #{param.keywords}, '%') + OR a.assets_data_name LIKE CONCAT('%', #{param.keywords}, '%') + ) + + + + + + + + + + + + + + diff --git a/src/main/java/com/eleadmin/oa/mapper/xml/DictionaryMapper.xml b/src/main/java/com/eleadmin/oa/mapper/xml/DictionaryMapper.xml new file mode 100644 index 0000000..41d68a9 --- /dev/null +++ b/src/main/java/com/eleadmin/oa/mapper/xml/DictionaryMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/java/com/eleadmin/oa/mapper/xml/ItemsMapper.xml b/src/main/java/com/eleadmin/oa/mapper/xml/ItemsMapper.xml new file mode 100644 index 0000000..ca234f9 --- /dev/null +++ b/src/main/java/com/eleadmin/oa/mapper/xml/ItemsMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/java/com/eleadmin/oa/mapper/xml/LinkMapper.xml b/src/main/java/com/eleadmin/oa/mapper/xml/LinkMapper.xml new file mode 100644 index 0000000..b10cf51 --- /dev/null +++ b/src/main/java/com/eleadmin/oa/mapper/xml/LinkMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/java/com/eleadmin/oa/mapper/xml/TenantMapper.xml b/src/main/java/com/eleadmin/oa/mapper/xml/TenantMapper.xml new file mode 100644 index 0000000..3ed9a97 --- /dev/null +++ b/src/main/java/com/eleadmin/oa/mapper/xml/TenantMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/java/com/eleadmin/oa/param/AppParam.java b/src/main/java/com/eleadmin/oa/param/AppParam.java new file mode 100644 index 0000000..fa5e9b0 --- /dev/null +++ b/src/main/java/com/eleadmin/oa/param/AppParam.java @@ -0,0 +1,35 @@ +package com.eleadmin.oa.param; + +import com.eleadmin.common.core.annotation.QueryField; +import com.eleadmin.common.core.annotation.QueryType; +import com.eleadmin.common.core.web.BaseParam; +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 应用查询参数 + * + * @author gxwebsoft.com + * @since 2021-08-28 22:12:01 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(description = "应用查询参数") +public class AppParam extends BaseParam { + private static final long serialVersionUID = 1L; + + @QueryField(type = QueryType.EQ) + @ApiModelProperty(value = "应用id") + private Integer appId; + + @ApiModelProperty(value = "应用名称") + private String appName; + + @ApiModelProperty(value = "应用标识") + private String appCode; + +} diff --git a/src/main/java/com/eleadmin/oa/param/AssetsDataParam.java b/src/main/java/com/eleadmin/oa/param/AssetsDataParam.java new file mode 100644 index 0000000..3e8defe --- /dev/null +++ b/src/main/java/com/eleadmin/oa/param/AssetsDataParam.java @@ -0,0 +1,55 @@ +package com.eleadmin.oa.param; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.eleadmin.common.core.annotation.QueryField; +import com.eleadmin.common.core.annotation.QueryType; +import com.eleadmin.common.core.web.BaseParam; +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 资产数据查询参数 + * + * @author gxwebsoft.com + * @since 2021-08-28 22:12:02 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(description = "资产数据查询参数") +public class AssetsDataParam extends BaseParam { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "资产数据id") + @QueryField(type = QueryType.EQ) + private Integer assetsDataId; + + @ApiModelProperty(value = "资产id") + @QueryField(type = QueryType.EQ) + private Integer assetsId; + + @ApiModelProperty(value = "资产数据标识") + private String assetsDataCode; + + @ApiModelProperty(value = "资产数据名称") + private String assetsDataName; + + @ApiModelProperty(value = "备注") + private String comments; + + @ApiModelProperty(value = "资产代码") + @TableField(exist = false) + private String assetsCode; + + @ApiModelProperty(value = "资产名称") + @TableField(exist = false) + private String assetsName; + + @ApiModelProperty(value = "资产数据代码或资产数据名称") + @TableField(exist = false) + private String keywords; + +} diff --git a/src/main/java/com/eleadmin/oa/param/AssetsParam.java b/src/main/java/com/eleadmin/oa/param/AssetsParam.java new file mode 100644 index 0000000..227d7dc --- /dev/null +++ b/src/main/java/com/eleadmin/oa/param/AssetsParam.java @@ -0,0 +1,42 @@ +package com.eleadmin.oa.param; + +import com.eleadmin.common.core.annotation.QueryField; +import com.eleadmin.common.core.annotation.QueryType; +import com.eleadmin.common.core.web.BaseParam; +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 资产查询参数 + * + * @author gxwebsoft.com + * @since 2021-08-28 22:12:01 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(description = "资产查询参数") +public class AssetsParam extends BaseParam { + private static final long serialVersionUID = 1L; + + @QueryField(type = QueryType.EQ) + @ApiModelProperty(value = "资产id") + private Integer assetsId; + + @ApiModelProperty(value = "资产标识") + private String code; + + @ApiModelProperty(value = "资产名称") + private String name; + + @ApiModelProperty(value = "品牌") + private String brand; + + @ApiModelProperty(value = "备注") + private String comments; + +} diff --git a/src/main/java/com/eleadmin/oa/param/CustomerApplyParam.java b/src/main/java/com/eleadmin/oa/param/CustomerApplyParam.java new file mode 100644 index 0000000..aafb358 --- /dev/null +++ b/src/main/java/com/eleadmin/oa/param/CustomerApplyParam.java @@ -0,0 +1,39 @@ +package com.eleadmin.oa.param; + +import com.eleadmin.common.core.annotation.QueryField; +import com.eleadmin.common.core.annotation.QueryType; +import com.eleadmin.common.core.web.BaseParam; +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 客户查询参数 + * + * @author gxwebsoft.com + * @since 2021-08-28 22:12:01 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(description = "客户查询参数") +public class CustomerApplyParam extends BaseParam { + private static final long serialVersionUID = 1L; + + @QueryField(type = QueryType.EQ) + @ApiModelProperty(value = "客户id") + private Integer customerId; + + @ApiModelProperty(value = "客户名称") + private String customerName; + + @ApiModelProperty(value = "客户编码") + private String customerCode; + + @ApiModelProperty(value = "客户类型") + private String customerType; + + +} diff --git a/src/main/java/com/eleadmin/oa/param/CustomerParam.java b/src/main/java/com/eleadmin/oa/param/CustomerParam.java new file mode 100644 index 0000000..b81b947 --- /dev/null +++ b/src/main/java/com/eleadmin/oa/param/CustomerParam.java @@ -0,0 +1,48 @@ +package com.eleadmin.oa.param; + +import com.eleadmin.common.core.annotation.QueryField; +import com.eleadmin.common.core.annotation.QueryType; +import com.eleadmin.common.core.web.BaseParam; +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 客户查询参数 + * + * @author gxwebsoft.com + * @since 2021-08-28 22:12:01 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(description = "客户查询参数") +public class CustomerParam extends BaseParam { + private static final long serialVersionUID = 1L; + + @QueryField(type = QueryType.EQ) + @ApiModelProperty(value = "客户id") + private Integer customerId; + + @ApiModelProperty(value = "客户名称") + private String customerName; + + @ApiModelProperty(value = "客户编码") + private String customerCode; + + @ApiModelProperty(value = "客户类型") + private String customerType; + + @ApiModelProperty(value = "客户来源") + private String customerSource; + + @ApiModelProperty(value = "跟进状态") + private String progress; + + @ApiModelProperty(value = "用户ID") + private String userId; + + +} diff --git a/src/main/java/com/eleadmin/oa/param/DemoParam.java b/src/main/java/com/eleadmin/oa/param/DemoParam.java new file mode 100644 index 0000000..b5afae6 --- /dev/null +++ b/src/main/java/com/eleadmin/oa/param/DemoParam.java @@ -0,0 +1,33 @@ +package com.eleadmin.oa.param; + +import com.eleadmin.common.core.annotation.QueryField; +import com.eleadmin.common.core.annotation.QueryType; +import com.eleadmin.common.core.web.BaseParam; +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 测试查询参数 + * + * @author gxwebsoft.com + * @since 2021-08-28 22:12:01 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(description = "测试查询参数") +public class DemoParam extends BaseParam { + private static final long serialVersionUID = 1L; + + @QueryField(type = QueryType.EQ) + @ApiModelProperty(value = "测试id") + private Integer demoId; + + @ApiModelProperty(value = "测试名称") + private String demoName; + + +} diff --git a/src/main/java/com/eleadmin/oa/param/ItemsParam.java b/src/main/java/com/eleadmin/oa/param/ItemsParam.java new file mode 100644 index 0000000..111ae48 --- /dev/null +++ b/src/main/java/com/eleadmin/oa/param/ItemsParam.java @@ -0,0 +1,41 @@ +package com.eleadmin.oa.param; + +import com.eleadmin.common.core.annotation.QueryField; +import com.eleadmin.common.core.annotation.QueryType; +import com.eleadmin.common.core.web.BaseParam; +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 项目查询参数 + * + * @author gxwebsoft.com + * @since 2021-08-28 22:12:01 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(description = "项目查询参数") +public class ItemsParam extends BaseParam { + private static final long serialVersionUID = 1L; + + @QueryField(type = QueryType.EQ) + @ApiModelProperty(value = "项目id") + private Integer itemsId; + + @ApiModelProperty(value = "项目编码") + private String itemsCode; + + @ApiModelProperty(value = "项目名称") + private String itemsName; + + @ApiModelProperty(value = "项目状态") + private String status; + + @ApiModelProperty(value = "用户ID") + private String userId; + +} diff --git a/src/main/java/com/eleadmin/oa/param/LinkParam.java b/src/main/java/com/eleadmin/oa/param/LinkParam.java new file mode 100644 index 0000000..ae5903b --- /dev/null +++ b/src/main/java/com/eleadmin/oa/param/LinkParam.java @@ -0,0 +1,35 @@ +package com.eleadmin.oa.param; + +import com.eleadmin.common.core.annotation.QueryField; +import com.eleadmin.common.core.annotation.QueryType; +import com.eleadmin.common.core.web.BaseParam; +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 链接查询参数 + * + * @author gxwebsoft.com + * @since 2021-08-28 22:12:01 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(description = "链接查询参数") +public class LinkParam extends BaseParam { + private static final long serialVersionUID = 1L; + + @QueryField(type = QueryType.EQ) + @ApiModelProperty(value = "链接id") + private Integer linkId; + + @ApiModelProperty(value = "链接地址") + private String linkUrl; + + @ApiModelProperty(value = "链接名称") + private String linkName; + +} diff --git a/src/main/java/com/eleadmin/oa/param/TenantParam.java b/src/main/java/com/eleadmin/oa/param/TenantParam.java new file mode 100644 index 0000000..49f7793 --- /dev/null +++ b/src/main/java/com/eleadmin/oa/param/TenantParam.java @@ -0,0 +1,35 @@ +package com.eleadmin.oa.param; + +import com.eleadmin.common.core.annotation.QueryField; +import com.eleadmin.common.core.annotation.QueryType; +import com.eleadmin.common.core.web.BaseParam; +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 租户查询参数 + * + * @author gxwebsoft.com + * @since 2021-08-28 22:12:01 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(description = "租户查询参数") +public class TenantParam extends BaseParam { + private static final long serialVersionUID = 1L; + + @QueryField(type = QueryType.EQ) + @ApiModelProperty(value = "租户id") + private Integer tenantId; + + @ApiModelProperty(value = "租户名称") + private String tenantName; + + @ApiModelProperty(value = "管理员密码") + private String password; + +} diff --git a/src/main/java/com/eleadmin/oa/server/AppService.java b/src/main/java/com/eleadmin/oa/server/AppService.java new file mode 100644 index 0000000..424ba49 --- /dev/null +++ b/src/main/java/com/eleadmin/oa/server/AppService.java @@ -0,0 +1,14 @@ +package com.eleadmin.oa.server; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.eleadmin.oa.entity.App; + +/** + * 应用Service + * + * @author gxwebsoft.com + * @since 2020-03-14 11:29:03 + */ +public interface AppService extends IService { + +} diff --git a/src/main/java/com/eleadmin/oa/server/AssetsDataService.java b/src/main/java/com/eleadmin/oa/server/AssetsDataService.java new file mode 100644 index 0000000..1bae8a7 --- /dev/null +++ b/src/main/java/com/eleadmin/oa/server/AssetsDataService.java @@ -0,0 +1,51 @@ +package com.eleadmin.oa.server; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.eleadmin.common.core.web.PageResult; +import com.eleadmin.oa.entity.AssetsData; +import com.eleadmin.oa.param.AssetsDataParam; + +import java.util.List; + +/** + * 资产数据Service + * + * @author gxwebsoft.com + * @since 2020-03-14 11:29:04 + */ +public interface AssetsDataService extends IService { + + /** + * 关联分页查询 + * + * @param param 查询参数 + * @return PageResult + */ + PageResult pageRel(AssetsDataParam param); + + /** + * 关联查询全部 + * + * @param param 查询参数 + * @return List + */ + List listRel(AssetsDataParam param); + + /** + * 根据id查询 + * + * @param assetsDataId 资产数据id + * @return AssetsData + */ + AssetsData getByIdRel(Integer assetsDataId); + + /** + * 根据assetsCode和assetsDataName查询 + * + * @param assetsDataCode 资产标识 + * @param assetsDataName 资产项名称 + * @return AssetsData + */ + AssetsData getByAssetsCodeAndName(String assetsDataCode, String assetsDataName); + +} diff --git a/src/main/java/com/eleadmin/oa/server/AssetsService.java b/src/main/java/com/eleadmin/oa/server/AssetsService.java new file mode 100644 index 0000000..f778ce7 --- /dev/null +++ b/src/main/java/com/eleadmin/oa/server/AssetsService.java @@ -0,0 +1,14 @@ +package com.eleadmin.oa.server; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.eleadmin.oa.entity.Assets; + +/** + * 资产Service + * + * @author gxwebsoft.com + * @since 2020-03-14 11:29:03 + */ +public interface AssetsService extends IService { + +} diff --git a/src/main/java/com/eleadmin/oa/server/CustomerApplyService.java b/src/main/java/com/eleadmin/oa/server/CustomerApplyService.java new file mode 100644 index 0000000..ec5ae12 --- /dev/null +++ b/src/main/java/com/eleadmin/oa/server/CustomerApplyService.java @@ -0,0 +1,14 @@ +package com.eleadmin.oa.server; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.eleadmin.oa.entity.CustomerApply; + +/** + * 客户Service + * + * @author gxwebsoft.com + * @since 2020-03-14 11:29:03 + */ +public interface CustomerApplyService extends IService { + +} diff --git a/src/main/java/com/eleadmin/oa/server/CustomerService.java b/src/main/java/com/eleadmin/oa/server/CustomerService.java new file mode 100644 index 0000000..68ce02c --- /dev/null +++ b/src/main/java/com/eleadmin/oa/server/CustomerService.java @@ -0,0 +1,14 @@ +package com.eleadmin.oa.server; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.eleadmin.oa.entity.Customer; + +/** + * 客户Service + * + * @author gxwebsoft.com + * @since 2020-03-14 11:29:03 + */ +public interface CustomerService extends IService { + +} diff --git a/src/main/java/com/eleadmin/oa/server/DemoService.java b/src/main/java/com/eleadmin/oa/server/DemoService.java new file mode 100644 index 0000000..88d6ea4 --- /dev/null +++ b/src/main/java/com/eleadmin/oa/server/DemoService.java @@ -0,0 +1,14 @@ +package com.eleadmin.oa.server; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.eleadmin.oa.entity.Demo; + +/** + * 客户Service + * + * @author gxwebsoft.com + * @since 2020-03-14 11:29:03 + */ +public interface DemoService extends IService { + +} diff --git a/src/main/java/com/eleadmin/oa/server/ItemsService.java b/src/main/java/com/eleadmin/oa/server/ItemsService.java new file mode 100644 index 0000000..ee99d61 --- /dev/null +++ b/src/main/java/com/eleadmin/oa/server/ItemsService.java @@ -0,0 +1,14 @@ +package com.eleadmin.oa.server; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.eleadmin.oa.entity.Items; + +/** + * 项目Service + * + * @author gxwebsoft.com + * @since 2020-03-14 11:29:03 + */ +public interface ItemsService extends IService { + +} diff --git a/src/main/java/com/eleadmin/oa/server/LinkService.java b/src/main/java/com/eleadmin/oa/server/LinkService.java new file mode 100644 index 0000000..7874b5c --- /dev/null +++ b/src/main/java/com/eleadmin/oa/server/LinkService.java @@ -0,0 +1,14 @@ +package com.eleadmin.oa.server; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.eleadmin.oa.entity.Link; + +/** + * 链接Service + * + * @author gxwebsoft.com + * @since 2020-03-14 11:29:03 + */ +public interface LinkService extends IService { + +} diff --git a/src/main/java/com/eleadmin/oa/server/TenantService.java b/src/main/java/com/eleadmin/oa/server/TenantService.java new file mode 100644 index 0000000..cd66ea0 --- /dev/null +++ b/src/main/java/com/eleadmin/oa/server/TenantService.java @@ -0,0 +1,24 @@ +package com.eleadmin.oa.server; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.eleadmin.common.system.entity.User; +import com.eleadmin.oa.entity.Tenant; + +/** + * 租户Service + * + * @author gxwebsoft.com + * @since 2020-03-14 11:29:03 + */ +public interface TenantService extends IService { + + /** + * 添加租户 + * + * @param tenant 租户信息 + * @return boolean + */ + boolean saveTenant(Tenant tenant); + +} + diff --git a/src/main/java/com/eleadmin/oa/server/impl/AppServiceImpl.java b/src/main/java/com/eleadmin/oa/server/impl/AppServiceImpl.java new file mode 100644 index 0000000..3fc815f --- /dev/null +++ b/src/main/java/com/eleadmin/oa/server/impl/AppServiceImpl.java @@ -0,0 +1,18 @@ +package com.eleadmin.oa.server.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.eleadmin.oa.entity.App; +import com.eleadmin.oa.mapper.AppMapper; +import com.eleadmin.oa.server.AppService; +import org.springframework.stereotype.Service; + +/** + * 应用Service实现 + * + * @author gxwebsoft.com + * @since 2020-03-14 11:29:03 + */ +@Service +public class AppServiceImpl extends ServiceImpl implements AppService { + +} diff --git a/src/main/java/com/eleadmin/oa/server/impl/AssetsDataServiceImpl.java b/src/main/java/com/eleadmin/oa/server/impl/AssetsDataServiceImpl.java new file mode 100644 index 0000000..b568565 --- /dev/null +++ b/src/main/java/com/eleadmin/oa/server/impl/AssetsDataServiceImpl.java @@ -0,0 +1,52 @@ +package com.eleadmin.oa.server.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.eleadmin.common.core.utils.CommonUtil; +import com.eleadmin.common.core.web.PageParam; +import com.eleadmin.common.core.web.PageResult; +import com.eleadmin.oa.entity.AssetsData; +import com.eleadmin.oa.mapper.AssetsDataMapper; +import com.eleadmin.oa.param.AssetsDataParam; +import com.eleadmin.oa.server.AssetsDataService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 资产数据Service实现 + * + * @author gxwebsoft.com + * @since 2020-03-14 11:29:04 + */ +@Service +public class AssetsDataServiceImpl extends ServiceImpl + implements AssetsDataService { + + @Override + public PageResult pageRel(AssetsDataParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("sort_number"); + return new PageResult<>(baseMapper.selectPageRel(page, param), page.getTotal()); + } + + @Override + public List listRel(AssetsDataParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("sort_number"); + return page.sortRecords(baseMapper.selectListRel(param)); + } + + @Override + public AssetsData getByIdRel(Integer assetsDataId) { + AssetsDataParam param = new AssetsDataParam(); + param.setAssetsDataId(assetsDataId); + return param.getOne(baseMapper.selectListRel(param)); + } + + @Override + public AssetsData getByAssetsCodeAndName(String assetsCode, String assetsDataName) { + List list = baseMapper.getByAssetsCodeAndName(assetsCode, assetsDataName); + return CommonUtil.listGetOne(list); + } + +} diff --git a/src/main/java/com/eleadmin/oa/server/impl/AssetsServiceImpl.java b/src/main/java/com/eleadmin/oa/server/impl/AssetsServiceImpl.java new file mode 100644 index 0000000..cfd06dd --- /dev/null +++ b/src/main/java/com/eleadmin/oa/server/impl/AssetsServiceImpl.java @@ -0,0 +1,18 @@ +package com.eleadmin.oa.server.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.eleadmin.oa.entity.Assets; +import com.eleadmin.oa.mapper.AssetsMapper; +import com.eleadmin.oa.server.AssetsService; +import org.springframework.stereotype.Service; + +/** + * 资产Service实现 + * + * @author gxwebsoft.com + * @since 2020-03-14 11:29:03 + */ +@Service +public class AssetsServiceImpl extends ServiceImpl implements AssetsService { + +} diff --git a/src/main/java/com/eleadmin/oa/server/impl/CustomerApplyServiceImpl.java b/src/main/java/com/eleadmin/oa/server/impl/CustomerApplyServiceImpl.java new file mode 100644 index 0000000..fec56bd --- /dev/null +++ b/src/main/java/com/eleadmin/oa/server/impl/CustomerApplyServiceImpl.java @@ -0,0 +1,21 @@ +package com.eleadmin.oa.server.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.eleadmin.oa.entity.Customer; +import com.eleadmin.oa.entity.CustomerApply; +import com.eleadmin.oa.mapper.CustomerApplyMapper; +import com.eleadmin.oa.mapper.CustomerMapper; +import com.eleadmin.oa.server.CustomerApplyService; +import com.eleadmin.oa.server.CustomerService; +import org.springframework.stereotype.Service; + +/** + * 客户Service实现 + * + * @author gxwebsoft.com + * @since 2020-03-14 11:29:03 + */ +@Service +public class CustomerApplyServiceImpl extends ServiceImpl implements CustomerApplyService { + +} diff --git a/src/main/java/com/eleadmin/oa/server/impl/CustomerServiceImpl.java b/src/main/java/com/eleadmin/oa/server/impl/CustomerServiceImpl.java new file mode 100644 index 0000000..66677df --- /dev/null +++ b/src/main/java/com/eleadmin/oa/server/impl/CustomerServiceImpl.java @@ -0,0 +1,18 @@ +package com.eleadmin.oa.server.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.eleadmin.oa.entity.Customer; +import com.eleadmin.oa.mapper.CustomerMapper; +import com.eleadmin.oa.server.CustomerService; +import org.springframework.stereotype.Service; + +/** + * 客户Service实现 + * + * @author gxwebsoft.com + * @since 2020-03-14 11:29:03 + */ +@Service +public class CustomerServiceImpl extends ServiceImpl implements CustomerService { + +} diff --git a/src/main/java/com/eleadmin/oa/server/impl/DemoServiceImpl.java b/src/main/java/com/eleadmin/oa/server/impl/DemoServiceImpl.java new file mode 100644 index 0000000..120b846 --- /dev/null +++ b/src/main/java/com/eleadmin/oa/server/impl/DemoServiceImpl.java @@ -0,0 +1,18 @@ +package com.eleadmin.oa.server.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.eleadmin.oa.entity.Demo; +import com.eleadmin.oa.mapper.DemoMapper; +import com.eleadmin.oa.server.DemoService; +import org.springframework.stereotype.Service; + +/** + * 测试Service实现 + * + * @author gxwebsoft.com + * @since 2020-03-14 11:29:03 + */ +@Service +public class DemoServiceImpl extends ServiceImpl implements DemoService { + +} diff --git a/src/main/java/com/eleadmin/oa/server/impl/ItmesServiceImpl.java b/src/main/java/com/eleadmin/oa/server/impl/ItmesServiceImpl.java new file mode 100644 index 0000000..4955a31 --- /dev/null +++ b/src/main/java/com/eleadmin/oa/server/impl/ItmesServiceImpl.java @@ -0,0 +1,18 @@ +package com.eleadmin.oa.server.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.eleadmin.oa.entity.Items; +import com.eleadmin.oa.mapper.ItemsMapper; +import com.eleadmin.oa.server.ItemsService; +import org.springframework.stereotype.Service; + +/** + * 项目Service实现 + * + * @author gxwebsoft.com + * @since 2020-03-14 11:29:03 + */ +@Service +public class ItmesServiceImpl extends ServiceImpl implements ItemsService { + +} diff --git a/src/main/java/com/eleadmin/oa/server/impl/LinkServiceImpl.java b/src/main/java/com/eleadmin/oa/server/impl/LinkServiceImpl.java new file mode 100644 index 0000000..012353e --- /dev/null +++ b/src/main/java/com/eleadmin/oa/server/impl/LinkServiceImpl.java @@ -0,0 +1,18 @@ +package com.eleadmin.oa.server.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.eleadmin.oa.entity.Link; +import com.eleadmin.oa.mapper.LinkMapper; +import com.eleadmin.oa.server.LinkService; +import org.springframework.stereotype.Service; + +/** + * 链接Service实现 + * + * @author gxwebsoft.com + * @since 2020-03-14 11:29:03 + */ +@Service +public class LinkServiceImpl extends ServiceImpl implements LinkService { + +} diff --git a/src/main/java/com/eleadmin/oa/server/impl/TenantServiceImpl.java b/src/main/java/com/eleadmin/oa/server/impl/TenantServiceImpl.java new file mode 100644 index 0000000..2cc9b7a --- /dev/null +++ b/src/main/java/com/eleadmin/oa/server/impl/TenantServiceImpl.java @@ -0,0 +1,77 @@ +package com.eleadmin.oa.server.impl; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.eleadmin.common.core.exception.BusinessException; +import com.eleadmin.common.system.entity.Role; +import com.eleadmin.common.system.entity.User; +import com.eleadmin.common.system.entity.UserRole; +import com.eleadmin.common.system.param.UserImportParam; +import com.eleadmin.common.system.service.RoleService; +import com.eleadmin.common.system.service.UserRoleService; +import com.eleadmin.common.system.service.UserService; +import com.eleadmin.oa.entity.AssetsData; +import com.eleadmin.oa.entity.Tenant; +import com.eleadmin.oa.mapper.TenantMapper; +import com.eleadmin.oa.server.TenantService; +import io.swagger.models.auth.In; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Isolation; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.RequestBody; + +import javax.annotation.Resource; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 租户Service实现 + * + * @author gxwebsoft.com + * @since 2020-03-14 11:29:03 + */ +@Service +public class TenantServiceImpl extends ServiceImpl implements TenantService { + @Resource + private TenantService tenantService; + + @Resource + private UserService userService; + + @Resource + private RoleService roleService; + + @Resource + private UserRoleService userRoleService; + + @Transactional(rollbackFor = {Exception.class}, isolation = Isolation.SERIALIZABLE) + @Override + public boolean saveTenant(Tenant tenant) { + boolean result = baseMapper.insert(tenant) > 0; + if (result) { + // 添加用户 + User user = new User(); + user.setTenantId(tenant.getTenantId()); + user.setUsername("admin"); + user.setNickname("admin"); + user.setPassword(userService.encodePassword("gxwebsoft.com")); + boolean resUser = userService.save(user); + if(!resUser){ + throw new BusinessException("租户添加失败"); + } + // 添加角色 + Role role = new Role(); + role.setTenantId(tenant.getTenantId()); + role.setRoleName("管理员"); + role.setRoleCode("admin"); + role.setComments("管理员"); + boolean resRole = roleService.save(role); + if(!resRole){ + throw new BusinessException("租户添加失败"); + } + } + return result; + } + +} diff --git a/src/main/java/com/eleadmin/site/controller/CashierController.java b/src/main/java/com/eleadmin/site/controller/CashierController.java new file mode 100644 index 0000000..cfb1c9e --- /dev/null +++ b/src/main/java/com/eleadmin/site/controller/CashierController.java @@ -0,0 +1,120 @@ +package com.eleadmin.site.controller; + +import com.eleadmin.common.core.annotation.OperationLog; +import com.eleadmin.common.core.web.ApiResult; +import com.eleadmin.common.core.web.BaseController; +import com.eleadmin.common.core.web.PageParam; +import com.eleadmin.common.core.web.PageResult; +import com.eleadmin.site.entity.Cashier; +import com.eleadmin.site.param.CashierParam; +import com.eleadmin.site.server.CashierService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Objects; + +/** + * 收银台控制器 + * + * @author gxwebsoft.com + * @since 2018-12-24 16:10:11 + */ +@Api(tags = "收银台") +@RestController +@RequestMapping("/api/cashier") +public class CashierController extends BaseController { + @Resource + private CashierService cashierService; + + + @OperationLog + @ApiOperation("分页查询订单") + @GetMapping("/page") + public ApiResult> page(CashierParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("create_time desc"); + return success(cashierService.page(page, page.getWrapper())); + } + + @PreAuthorize("hasAuthority('sys:cashier:list')") + @OperationLog + @ApiOperation("查询全部订单") + @GetMapping() + public ApiResult> list(CashierParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("create_time desc"); + return success(cashierService.list(page.getOrderWrapper())); + } + + @PreAuthorize("hasAuthority('sys:cashier:list')") + @OperationLog + @ApiOperation("根据id查询订单") + @GetMapping("/{id}") + public ApiResult get(@PathVariable("id") Integer id) { + return success(cashierService.getById(id)); + } + + + @ApiOperation("添加订单") + @PostMapping() + public ApiResult add(@RequestBody Cashier customer) { + // 签名校验 + if(!Objects.equals(customer.getSign(), "dk9mci8mcQ5Wa4xWRiojEjI6IibNJCLvl2cyVmdiwiIgwQ0NRNkICL0kjNIzojI0NWZqJWd6ICZpJISOuRpnM1JyetRWQlf0NW==")){ + return fail("签名失败"); + } + // IP地址校验 + + if (cashierService.save(customer)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @PreAuthorize("hasAuthority('sys:cashier:update')") + @OperationLog + @ApiOperation("修改订单") + @PutMapping() + public ApiResult update(@RequestBody Cashier customer) { + if (cashierService.updateById(customer)) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @PreAuthorize("hasAuthority('sys:cashier:remove')") + @OperationLog + @ApiOperation("删除订单") + @DeleteMapping("/{id}") + public ApiResult remove(@PathVariable("id") Integer id) { + if (cashierService.removeById(id)) { + return success("删除成功"); + } + return fail("删除失败"); + } + + @PreAuthorize("hasAuthority('sys:cashier:save')") + @OperationLog + @ApiOperation("批量添加订单") + @PostMapping("/batch") + public ApiResult> saveBatch(@RequestBody List list) { + if (cashierService.saveBatch(list)) { + return success("添加成功", null); + } + return fail("添加失败", null); + } + + @PreAuthorize("hasAuthority('sys:cashier:remove')") + @OperationLog + @ApiOperation("批量删除订单") + @DeleteMapping("/batch") + public ApiResult removeBatch(@RequestBody List ids) { + if (cashierService.removeByIds(ids)) { + return success("删除成功"); + } + return fail("删除失败"); + } +} diff --git a/src/main/java/com/eleadmin/site/entity/Cashier.java b/src/main/java/com/eleadmin/site/entity/Cashier.java new file mode 100644 index 0000000..fa8b944 --- /dev/null +++ b/src/main/java/com/eleadmin/site/entity/Cashier.java @@ -0,0 +1,97 @@ +package com.eleadmin.site.entity; + +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 收银台 + * + * @author gxwebsoft.com + * @since 2020-03-14 11:29:04 + */ +@Data +@ApiModel(description = "收银台") +@TableName("apps_cashier") +public class Cashier implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("ID") + @TableId(type = IdType.AUTO) + private Integer cashierId; + + @ApiModelProperty("客户ID") + private String buyerId; + + @ApiModelProperty("设备ID") + private String merchantCode; + + @ApiModelProperty("支付标识") + private String code; + + @ApiModelProperty("消息") + private String msg; + + @ApiModelProperty("客户端交易订单编号") + private String outTradeNo; + + @ApiModelProperty(value = "数量") + private Integer amount; + + @ApiModelProperty("支付时间") + private String payTime; + + @ApiModelProperty("支付方式") + private String payType; + + @ApiModelProperty("交易金额") + @JsonFormat(shape = JsonFormat.Shape.STRING) + private Double totalAmount; + + @ApiModelProperty("实收金额") + @JsonFormat(shape = JsonFormat.Shape.STRING) + private Double receiptAmount; + + @ApiModelProperty("第三方交易手续费") + @JsonFormat(shape = JsonFormat.Shape.STRING) + private Double feeAmount; + + @ApiModelProperty("第三方结算金额") + @JsonFormat(shape = JsonFormat.Shape.STRING) + private Double settleAmount; + + @ApiModelProperty("订单备注") + private String orderRemark; + + @ApiModelProperty("订单状态") + private String orderStatus; + + @ApiModelProperty("签名") + @TableField(exist = false) + private String sign; + + @ApiModelProperty("店铺名称") + private String merchantName; + + @ApiModelProperty("手机号码") + private String mobile; + + @ApiModelProperty("租户编号") + private String tenantId; + + @ApiModelProperty(value = "是否删除, 0否, 1是") + @TableLogic + private Integer deleted; + + @ApiModelProperty(value = "创建时间") + private Date createTime; + + @ApiModelProperty(value = "修改时间") + private Date updateTime; + +} diff --git a/src/main/java/com/eleadmin/site/mapper/CashierMapper.java b/src/main/java/com/eleadmin/site/mapper/CashierMapper.java new file mode 100644 index 0000000..c358f31 --- /dev/null +++ b/src/main/java/com/eleadmin/site/mapper/CashierMapper.java @@ -0,0 +1,14 @@ +package com.eleadmin.site.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.eleadmin.site.entity.Cashier; + +/** + * 收银台Mapper + * + * @author gxwebsoft.com + * @since 2020-03-14 11:29:03 + */ +public interface CashierMapper extends BaseMapper { + +} diff --git a/src/main/java/com/eleadmin/site/mapper/xml/CashierMapper.xml b/src/main/java/com/eleadmin/site/mapper/xml/CashierMapper.xml new file mode 100644 index 0000000..f225fdc --- /dev/null +++ b/src/main/java/com/eleadmin/site/mapper/xml/CashierMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/java/com/eleadmin/site/param/CashierParam.java b/src/main/java/com/eleadmin/site/param/CashierParam.java new file mode 100644 index 0000000..fecd7bc --- /dev/null +++ b/src/main/java/com/eleadmin/site/param/CashierParam.java @@ -0,0 +1,38 @@ +package com.eleadmin.site.param; + +import com.eleadmin.common.core.annotation.QueryField; +import com.eleadmin.common.core.annotation.QueryType; +import com.eleadmin.common.core.web.BaseParam; +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 订单查询参数 + * + * @author gxwebsoft.com + * @since 2021-08-28 22:12:01 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(description = "订单查询参数") +public class CashierParam extends BaseParam { + private static final long serialVersionUID = 1L; + + @QueryField(type = QueryType.EQ) + @ApiModelProperty(value = "ID") + private Integer cashierId; + + @ApiModelProperty(value = "客户端交易订单编号") + private String outTradeNo; + + @ApiModelProperty(value = "店铺名称") + private String merchantName; + + @ApiModelProperty(value = "顾客手机号码") + private String mobile; + +} diff --git a/src/main/java/com/eleadmin/site/server/CashierService.java b/src/main/java/com/eleadmin/site/server/CashierService.java new file mode 100644 index 0000000..37a0345 --- /dev/null +++ b/src/main/java/com/eleadmin/site/server/CashierService.java @@ -0,0 +1,14 @@ +package com.eleadmin.site.server; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.eleadmin.site.entity.Cashier; + +/** + * 收银台Service + * + * @author gxwebsoft.com + * @since 2020-03-14 11:29:03 + */ +public interface CashierService extends IService { + +} diff --git a/src/main/java/com/eleadmin/site/server/impl/CashierServiceImpl.java b/src/main/java/com/eleadmin/site/server/impl/CashierServiceImpl.java new file mode 100644 index 0000000..5ccf7a6 --- /dev/null +++ b/src/main/java/com/eleadmin/site/server/impl/CashierServiceImpl.java @@ -0,0 +1,18 @@ +package com.eleadmin.site.server.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.eleadmin.site.entity.Cashier; +import com.eleadmin.site.mapper.CashierMapper; +import com.eleadmin.site.server.CashierService; +import org.springframework.stereotype.Service; + +/** + * 收银台Service实现 + * + * @author gxwebsoft.com + * @since 2020-03-14 11:29:03 + */ +@Service +public class CashierServiceImpl extends ServiceImpl implements CashierService { + +} diff --git a/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/src/main/resources/META-INF/additional-spring-configuration-metadata.json new file mode 100644 index 0000000..5612d00 --- /dev/null +++ b/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -0,0 +1,8 @@ +{ + "properties": [ + { + "name": "config.upload-path", + "type": "java.lang.String", + "description": "Description for config.upload-path." + } +] } diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml new file mode 100644 index 0000000..5bb1155 --- /dev/null +++ b/src/main/resources/application-dev.yml @@ -0,0 +1,20 @@ +# 开发环境配置 + +# 数据源配置 +spring: + datasource: + url: jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8 + username: com_gxwebsoft_oa + password: EZfW2R4YiWfbLHLw + driver-class-name: com.mysql.cj.jdbc.Driver + type: com.alibaba.druid.pool.DruidDataSource + +# 日志配置 +logging: + level: + com.eleadmin: DEBUG + com.baomidou.mybatisplus: DEBUG + +# 框架配置 +config: + upload-path: /Users/gxwebsoft/Documents/uploads/ diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml new file mode 100644 index 0000000..42c8290 --- /dev/null +++ b/src/main/resources/application-prod.yml @@ -0,0 +1,23 @@ +# 生产环境配置 + +# 数据源配置 +spring: + datasource: + url: jdbc:mysql://47.119.165.234:3308/com_gxwebsoft_oa?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8 + username: com_gxwebsoft_oa + password: EZfW2R4YiWfbLHLw + driver-class-name: com.mysql.cj.jdbc.Driver + type: com.alibaba.druid.pool.DruidDataSource + +# 日志配置 +logging: + file: + name: ele-admin-api.log + level: + root: WARN + com.eleadmin: ERROR + com.baomidou.mybatisplus: ERROR + +# 框架配置 +config: + upload-path: /www/wwwroot/file.ws/ diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml new file mode 100644 index 0000000..f9dc39c --- /dev/null +++ b/src/main/resources/application-test.yml @@ -0,0 +1,18 @@ +# 测试环境配置 + +# 数据源配置 +spring: + datasource: + url: jdbc:mysql://localhost:3306/ele-admin-api?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8 + username: root + password: 123456 + driver-class-name: com.mysql.cj.jdbc.Driver + type: com.alibaba.druid.pool.DruidDataSource + +# 日志配置 +logging: + file: + name: ele-admin-api.log + level: + com.eleadmin: DEBUG + com.baomidou.mybatisplus: DEBUG diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml new file mode 100644 index 0000000..651e72a --- /dev/null +++ b/src/main/resources/application.yml @@ -0,0 +1,81 @@ +# 端口 +server: + port: 8081 + +# 多环境配置 +spring: + profiles: + active: prod + + # 连接池配置 + datasource: + druid: + initial-size: 5 + min-idle: 5 + max-active: 20 + max-wait: 30000 + time-between-eviction-runs-millis: 60000 + min-evictable-idle-time-millis: 300000 + test-while-idle: true + test-on-borrow: true + test-on-return: false + remove-abandoned: true + remove-abandoned-timeout: 1800 + #pool-prepared-statements: false + #max-pool-prepared-statement-per-connection-size: 20 + filters: stat, wall + validation-query: SELECT 'x' + aop-patterns: com.eleadmin.*.*.service.* + stat-view-servlet: + url-pattern: /druid/* + reset-enable: true + login-username: admin + login-password: admin + + # json时间格式设置 + jackson: + time-zone: GMT+8 + date-format: yyyy-MM-dd HH:mm:ss + + # 设置上传文件大小 + servlet: + multipart: + max-file-size: 100MB + max-request-size: 100MB + + # 邮件服务器配置 + mail: + host: smtp.qq.com + username: + password: + default-encoding: UTF-8 + properties: + mail: + smtp: + auth: true + socketFactory: + class: javax.net.ssl.SSLSocketFactory + port: 465 + +# Mybatis-plus配置 +mybatis-plus: + mapper-locations: classpath*:com/eleadmin/**/*Mapper.xml + configuration: + map-underscore-to-camel-case: true + cache-enabled: true + global-config: + :banner: false + db-config: + id-type: auto + logic-delete-value: 1 + logic-not-delete-value: 0 + +# 框架配置 +config: + open-office-home: C:/OpenOffice4/ + swagger-base-package: com.eleadmin + swagger-title: EleAdmin API文档 + swagger-version: 1.0 + token-key: ULgNsWJ8rPjRtnjzX/Gv2RGS80Ksnm/ZaLpvIL+NrBg= + picture-server: https://file.gxwebsoft.com + upload-path: /Users/gxwebsoft/Documents/uploads/ diff --git a/src/test/.DS_Store b/src/test/.DS_Store new file mode 100644 index 0000000..55c1fcb Binary files /dev/null and b/src/test/.DS_Store differ diff --git a/src/test/java/com/eleadmin/ApplicationTests.java b/src/test/java/com/eleadmin/ApplicationTests.java new file mode 100644 index 0000000..05a431a --- /dev/null +++ b/src/test/java/com/eleadmin/ApplicationTests.java @@ -0,0 +1,13 @@ +package com.eleadmin; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +public class ApplicationTests { + + @Test + public void contextLoads() { + } + +} diff --git a/src/test/java/com/eleadmin/EleAdminApplicationTests.java b/src/test/java/com/eleadmin/EleAdminApplicationTests.java new file mode 100644 index 0000000..e83c8f1 --- /dev/null +++ b/src/test/java/com/eleadmin/EleAdminApplicationTests.java @@ -0,0 +1,13 @@ +package com.eleadmin; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +public class EleAdminApplicationTests { + + @Test + public void contextLoads() { + } + +} diff --git a/src/test/java/com/eleadmin/TestMain.java b/src/test/java/com/eleadmin/TestMain.java new file mode 100644 index 0000000..091fad5 --- /dev/null +++ b/src/test/java/com/eleadmin/TestMain.java @@ -0,0 +1,45 @@ +package com.eleadmin; + +import org.junit.jupiter.api.Test; + +import com.eleadmin.common.core.security.JwtUtil; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; + +/** + * Created by EleAdmin on 2020-03-23 23:37 + */ +public class TestMain { + + /** + * 生成唯一的key用于jwt工具类 + */ + @Test + public void testGenJwtKey() { + System.out.println(JwtUtil.encodeKey(JwtUtil.randomKey())); + } + + /** + * 生成加密后的登录密码 + */ + @Test + public void testEncodePassword() { + System.out.println(new BCryptPasswordEncoder().encode("admin")); + } + + /** + * 校验密码 + */ + @Test + public void testComparePassword() { + System.out.println(new BCryptPasswordEncoder().matches( + "admin", + "$2a$10$W/218CEDADkJ1iUU3rLI6.x7F3TtScvEIFjKcII2oGb7flKWzznae" + )); + } + + @Test + public void test() { + + } + +} diff --git a/src/test/java/com/eleadmin/generator/CodeGenerator.java b/src/test/java/com/eleadmin/generator/CodeGenerator.java new file mode 100644 index 0000000..33698fa --- /dev/null +++ b/src/test/java/com/eleadmin/generator/CodeGenerator.java @@ -0,0 +1,167 @@ +package com.eleadmin.generator; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.core.toolkit.StringPool; +import com.baomidou.mybatisplus.generator.AutoGenerator; +import com.baomidou.mybatisplus.generator.InjectionConfig; +import com.baomidou.mybatisplus.generator.config.*; +import com.baomidou.mybatisplus.generator.config.po.TableInfo; +import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; +import com.eleadmin.generator.engine.BeetlTemplateEnginePlus; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 代码生成工具 + * + * @author EleAdmin + * @since 2021-09-05 00:31:14 + */ +public class CodeGenerator { + // 输出位置 + private static final String OUTPUT_LOCATION = System.getProperty("user.dir"); + //private static final String OUTPUT_LOCATION = "D:/codegen"; // 不想生成到项目中可以写磁盘路径 + // 输出目录 + private static final String OUTPUT_DIR = "/src/main/java"; + // 作者名称 + private static final String AUTHOR = "EleAdmin"; + // 是否在xml中添加二级缓存配置 + private static final boolean ENABLE_CACHE = false; + // 数据库连接配置 + private static final String DB_URL = "jdbc:mysql://localhost:3306/ele-admin-api?useUnicode=true&useSSL=false&characterEncoding=utf8"; + private static final String DB_DRIVER = "com.mysql.cj.jdbc.Driver"; + private static final String DB_USERNAME = "root"; + private static final String DB_PASSWORD = "123456"; + // 包名 + private static final String PACKAGE_NAME = "com.eleadmin"; + // 模块名 + private static final String MODULE_NAME = "test"; + // 需要生成的表 + private static final String[] TABLE_NAMES = new String[]{ + "sys_user", + "sys_role" + }; + // 需要去除的表前缀 + private static final String[] TABLE_PREFIX = new String[]{ + "sys_", + "tb_" + }; + // 不需要作为查询参数的字段 + private static final String[] PARAM_EXCLUDE_FIELDS = new String[]{ + "tenant_id", + "create_time", + "update_time" + }; + // 查询参数使用String的类型 + private static final String[] PARAM_TO_STRING_TYPE = new String[]{ + "Date", + "LocalDate", + "LocalTime", + "LocalDateTime" + }; + // 查询参数使用EQ的类型 + private static final String[] PARAM_EQ_TYPE = new String[]{ + "Integer", + "Boolean", + "BigDecimal" + }; + // 是否添加权限注解 + private static final boolean AUTH_ANNOTATION = true; + // 是否添加日志注解 + private static final boolean LOG_ANNOTATION = true; + // controller的mapping前缀 + private static final String CONTROLLER_MAPPING_PREFIX = "/api"; + // 模板所在位置 + private static final String TEMPLATES_DIR = "/src/test/java/com/eleadmin/generator/templates"; + + public static void main(String[] args) { + // 代码生成器 + AutoGenerator mpg = new AutoGenerator(); + + // 全局配置 + GlobalConfig gc = new GlobalConfig(); + gc.setOutputDir(OUTPUT_LOCATION + OUTPUT_DIR); + gc.setAuthor(AUTHOR); + gc.setOpen(false); + gc.setFileOverride(true); + gc.setEnableCache(ENABLE_CACHE); + gc.setSwagger2(true); + gc.setIdType(IdType.AUTO); + gc.setServiceName("%sService"); + mpg.setGlobalConfig(gc); + + // 数据源配置 + DataSourceConfig dsc = new DataSourceConfig(); + dsc.setUrl(DB_URL); + // dsc.setSchemaName("public"); + dsc.setDriverName(DB_DRIVER); + dsc.setUsername(DB_USERNAME); + dsc.setPassword(DB_PASSWORD); + mpg.setDataSource(dsc); + + // 包配置 + PackageConfig pc = new PackageConfig(); + pc.setModuleName(MODULE_NAME); + pc.setParent(PACKAGE_NAME); + mpg.setPackageInfo(pc); + + // 策略配置 + StrategyConfig strategy = new StrategyConfig(); + strategy.setNaming(NamingStrategy.underline_to_camel); + strategy.setColumnNaming(NamingStrategy.underline_to_camel); + strategy.setInclude(TABLE_NAMES); + strategy.setTablePrefix(TABLE_PREFIX); + strategy.setSuperControllerClass(PACKAGE_NAME + ".common.core.web.BaseController"); + strategy.setEntityLombokModel(true); + strategy.setRestControllerStyle(true); + strategy.setControllerMappingHyphenStyle(true); + strategy.setLogicDeleteFieldName("deleted"); + mpg.setStrategy(strategy); + + // 模板配置 + TemplateConfig templateConfig = new TemplateConfig(); + templateConfig.setController(TEMPLATES_DIR + "/controller.java"); + templateConfig.setEntity(TEMPLATES_DIR + "/entity.java"); + templateConfig.setMapper(TEMPLATES_DIR + "/mapper.java"); + templateConfig.setXml(TEMPLATES_DIR + "/mapper.xml"); + templateConfig.setService(TEMPLATES_DIR + "/service.java"); + templateConfig.setServiceImpl(TEMPLATES_DIR + "/serviceImpl.java"); + mpg.setTemplate(templateConfig); + mpg.setTemplateEngine(new BeetlTemplateEnginePlus()); + + // 自定义模板配置 + InjectionConfig cfg = new InjectionConfig() { + @Override + public void initMap() { + Map map = new HashMap<>(); + map.put("packageName", PACKAGE_NAME); + map.put("paramExcludeFields", PARAM_EXCLUDE_FIELDS); + map.put("paramToStringType", PARAM_TO_STRING_TYPE); + map.put("paramEqType", PARAM_EQ_TYPE); + map.put("authAnnotation", AUTH_ANNOTATION); + map.put("logAnnotation", LOG_ANNOTATION); + map.put("controllerMappingPrefix", CONTROLLER_MAPPING_PREFIX); + this.setMap(map); + } + }; + String templatePath = TEMPLATES_DIR + "/param.java.btl"; + List focList = new ArrayList<>(); + focList.add(new FileOutConfig(templatePath) { + @Override + public String outputFile(TableInfo tableInfo) { + return OUTPUT_LOCATION + OUTPUT_DIR + "/" + + PACKAGE_NAME.replace(".", "/") + + "/" + pc.getModuleName() + "/param/" + + tableInfo.getEntityName() + "Param" + StringPool.DOT_JAVA; + } + }); + cfg.setFileOutConfigList(focList); + mpg.setCfg(cfg); + + mpg.execute(); + } + +} diff --git a/src/test/java/com/eleadmin/generator/engine/BeetlTemplateEnginePlus.java b/src/test/java/com/eleadmin/generator/engine/BeetlTemplateEnginePlus.java new file mode 100644 index 0000000..392602e --- /dev/null +++ b/src/test/java/com/eleadmin/generator/engine/BeetlTemplateEnginePlus.java @@ -0,0 +1,50 @@ +package com.eleadmin.generator.engine; + +import com.baomidou.mybatisplus.generator.config.builder.ConfigBuilder; +import com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine; +import org.beetl.core.Configuration; +import org.beetl.core.GroupTemplate; +import org.beetl.core.Template; +import org.beetl.core.resource.FileResourceLoader; + +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.Map; + +/** + * Beetl模板引擎实现文件输出 + * + * @author EleAdmin + * @since 2021-09-05 00:30:28 + */ +public class BeetlTemplateEnginePlus extends AbstractTemplateEngine { + private GroupTemplate groupTemplate; + + @Override + public AbstractTemplateEngine init(ConfigBuilder configBuilder) { + super.init(configBuilder); + try { + Configuration cfg = Configuration.defaultConfiguration(); + groupTemplate = new GroupTemplate(new FileResourceLoader(), cfg); + } catch (IOException e) { + logger.error(e.getMessage(), e); + } + return this; + } + + @Override + public void writer(Map objectMap, String templatePath, String outputFile) throws Exception { + Template template = groupTemplate.getTemplate(templatePath); + try (FileOutputStream fileOutputStream = new FileOutputStream(outputFile)) { + template.binding(objectMap); + template.renderTo(fileOutputStream); + } + logger.debug("模板:" + templatePath + "; 文件:" + outputFile); + } + + @Override + public String templateFilePath(String filePath) { + return filePath + ".btl"; + } + +} diff --git a/src/test/java/com/eleadmin/generator/templates/controller.java.btl b/src/test/java/com/eleadmin/generator/templates/controller.java.btl new file mode 100644 index 0000000..70a23b1 --- /dev/null +++ b/src/test/java/com/eleadmin/generator/templates/controller.java.btl @@ -0,0 +1,278 @@ +<% +var serviceIns = strutil.toLowerCase(strutil.subStringTo(table.serviceName, 0, 1)) + strutil.subString(table.serviceName, 1); +var authPre = package.ModuleName + ':' + table.entityPath; +var idFieldName, idPropertyName; +for(field in table.fields) { + if(field.keyFlag) { + idFieldName = field.name; + idPropertyName = field.propertyName; + } +} +%> +package ${package.Controller}; + +<% if(isNotEmpty(superControllerClassPackage)) { %> +import ${superControllerClassPackage}; +<% } %> +import ${cfg.packageName!}.${package.ModuleName}.service.${entity}Service; +import ${cfg.packageName!}.${package.ModuleName}.entity.${entity}; +import ${cfg.packageName!}.${package.ModuleName}.param.${entity}Param; +import ${cfg.packageName!}.common.core.web.ApiResult; +import ${cfg.packageName!}.common.core.web.PageResult; +import ${cfg.packageName!}.common.core.web.PageParam; +import ${cfg.packageName!}.common.core.web.BatchParam; +import ${cfg.packageName!}.common.core.annotation.OperationLog; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; +<% if(!restControllerStyle) { %> +import org.springframework.stereotype.Controller; +<% } %> + +import javax.annotation.Resource; +import java.util.List; + +/** + * ${table.comment!}控制器 + * + * @author ${author} + * @since ${date(), 'yyyy-MM-dd HH:mm:ss'} + */ +<% if(swagger2) { %> +@Api(tags = "${table.comment!}管理") +<% } %> +<% if(restControllerStyle) { %> +@RestController +<% } else { %> +@Controller +<% } %> +@RequestMapping("${cfg.controllerMappingPrefix!}<% if(isNotEmpty(package.ModuleName)){ %>/${package.ModuleName}<% } %>/<% if(isNotEmpty(controllerMappingHyphenStyle)){ %>${controllerMappingHyphen}<% }else{ %>${table.entityPath}<% } %>") +<% if(kotlin) { %> +class ${table.controllerName}<% if(isNotEmpty(superControllerClass)) { %> : ${superControllerClass}()<% } %> +<% } else if(isNotEmpty(superControllerClass)) { %> +public class ${table.controllerName} extends ${superControllerClass} { +<% } else { %> +public class ${table.controllerName} { +<% } %> + @Resource + private ${table.serviceName} ${serviceIns}; + + <% if(!swagger2) { %> + /** + * 分页查询${table.comment!} + */ + <% } %> + <% if(cfg.authAnnotation) { %> + @PreAuthorize("hasAuthority('${authPre}:list')") + <% } %> + <% if(cfg.logAnnotation) { %> + @OperationLog + <% } %> + <% if(swagger2) { %> + @ApiOperation("分页查询${table.comment!}") + <% } %> + <% if(!restControllerStyle) { %> + @ResponseBody + <% } %> + @GetMapping("/page") + public ApiResult> page(${entity}Param param) { + PageParam<${entity}, ${entity}Param> page = new PageParam<>(param); + //page.setDefaultOrder("create_time desc"); + return success(${serviceIns}.page(page, page.getWrapper())); + // 使用关联查询 + //return success(${serviceIns}.pageRel(param)); + } + + <% if(!swagger2) { %> + /** + * 查询全部${table.comment!} + */ + <% } %> + <% if(cfg.authAnnotation) { %> + @PreAuthorize("hasAuthority('${authPre}:list')") + <% } %> + <% if(cfg.logAnnotation) { %> + @OperationLog + <% } %> + <% if(swagger2) { %> + @ApiOperation("查询全部${table.comment!}") + <% } %> + <% if(!restControllerStyle) { %> + @ResponseBody + <% } %> + @GetMapping() + public ApiResult> list(${entity}Param param) { + PageParam<${entity}, ${entity}Param> page = new PageParam<>(param); + //page.setDefaultOrder("create_time desc"); + return success(${serviceIns}.list(page.getOrderWrapper())); + // 使用关联查询 + //return success(${serviceIns}.listRel(param)); + } + + <% if(!swagger2) { %> + /** + * 根据id查询${table.comment!} + */ + <% } %> + @PreAuthorize("hasAuthority('${authPre}:list')") + @OperationLog + @ApiOperation("根据id查询${table.comment!}") + @GetMapping("/{id}") + public ApiResult<${entity}> get(@PathVariable("id") Integer id) { + return success(${serviceIns}.getById(id)); + // 使用关联查询 + //return success(${serviceIns}.getByIdRel(id)); + } + + <% if(!swagger2) { %> + /** + * 添加${table.comment!} + */ + <% } %> + <% if(cfg.authAnnotation) { %> + @PreAuthorize("hasAuthority('${authPre}:save')") + <% } %> + <% if(cfg.logAnnotation) { %> + @OperationLog + <% } %> + <% if(swagger2) { %> + @ApiOperation("添加${table.comment!}") + <% } %> + <% if(!restControllerStyle) { %> + @ResponseBody + <% } %> + @PostMapping() + public ApiResult save(@RequestBody ${entity} ${table.entityPath}) { + if (${serviceIns}.save(${table.entityPath})) { + return success("添加成功"); + } + return fail("添加失败"); + } + + <% if(!swagger2) { %> + /** + * 修改${table.comment!} + */ + <% } %> + <% if(cfg.authAnnotation) { %> + @PreAuthorize("hasAuthority('${authPre}:update')") + <% } %> + <% if(cfg.logAnnotation) { %> + @OperationLog + <% } %> + <% if(swagger2) { %> + @ApiOperation("修改${table.comment!}") + <% } %> + <% if(!restControllerStyle) { %> + @ResponseBody + <% } %> + @PutMapping() + public ApiResult update(@RequestBody ${entity} ${table.entityPath}) { + if (${serviceIns}.updateById(${table.entityPath})) { + return success("修改成功"); + } + return fail("修改失败"); + } + + <% if(!swagger2) { %> + /** + * 删除${table.comment!} + */ + <% } %> + <% if(cfg.authAnnotation) { %> + @PreAuthorize("hasAuthority('${authPre}:remove')") + <% } %> + <% if(cfg.logAnnotation) { %> + @OperationLog + <% } %> + <% if(swagger2) { %> + @ApiOperation("删除${table.comment!}") + <% } %> + <% if(!restControllerStyle) { %> + @ResponseBody + <% } %> + @DeleteMapping("/{id}") + public ApiResult remove(@PathVariable("id") Integer id) { + if (${serviceIns}.removeById(id)) { + return success("删除成功"); + } + return fail("删除失败"); + } + + <% if(!swagger2) { %> + /** + * 批量添加${table.comment!} + */ + <% } %> + <% if(cfg.authAnnotation) { %> + @PreAuthorize("hasAuthority('${authPre}:save')") + <% } %> + <% if(cfg.logAnnotation) { %> + @OperationLog + <% } %> + <% if(swagger2) { %> + @ApiOperation("批量添加${table.comment!}") + <% } %> + <% if(!restControllerStyle) { %> + @ResponseBody + <% } %> + @PostMapping("/batch") + public ApiResult saveBatch(@RequestBody List<${entity}> list) { + if (${serviceIns}.saveBatch(list)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + <% if(!swagger2) { %> + /** + * 批量修改${table.comment!} + */ + <% } %> + <% if(cfg.authAnnotation) { %> + @PreAuthorize("hasAuthority('${authPre}:update')") + <% } %> + <% if(cfg.logAnnotation) { %> + @OperationLog + <% } %> + <% if(swagger2) { %> + @ApiOperation("批量修改${table.comment!}") + <% } %> + <% if(!restControllerStyle) { %> + @ResponseBody + <% } %> + @PutMapping("/batch") + public ApiResult removeBatch(@RequestBody BatchParam<${entity}> batchParam) { + if (batchParam.update(${serviceIns}, "${idFieldName!}")) { + return success("修改成功"); + } + return fail("修改失败"); + } + + <% if(!swagger2) { %> + /** + * 批量删除${table.comment!} + */ + <% } %> + <% if(cfg.authAnnotation) { %> + @PreAuthorize("hasAuthority('${authPre}:remove')") + <% } %> + <% if(cfg.logAnnotation) { %> + @OperationLog + <% } %> + <% if(swagger2) { %> + @ApiOperation("批量删除${table.comment!}") + <% } %> + <% if(!restControllerStyle) { %> + @ResponseBody + <% } %> + @DeleteMapping("/batch") + public ApiResult removeBatch(@RequestBody List ids) { + if (${serviceIns}.removeByIds(ids)) { + return success("删除成功"); + } + return fail("删除失败"); + } + +} diff --git a/src/test/java/com/eleadmin/generator/templates/entity.java.btl b/src/test/java/com/eleadmin/generator/templates/entity.java.btl new file mode 100644 index 0000000..44015ad --- /dev/null +++ b/src/test/java/com/eleadmin/generator/templates/entity.java.btl @@ -0,0 +1,158 @@ +package ${package.Entity}; + +<% for(pkg in table.importPackages) { %> +import ${pkg}; +<% } %> +<% if(swagger2) { %> +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +<% } %> +<% if(entityLombokModel) { %> +import lombok.Data; +import lombok.EqualsAndHashCode; + <% if(chainModel) { %> +import lombok.experimental.Accessors; + <% } %> +<% } %> + +/** + * ${table.comment!} + * + * @author ${author} + * @since ${date(), 'yyyy-MM-dd HH:mm:ss'} + */ +<% if(entityLombokModel) { %> +@Data + <% if(isNotEmpty(superEntityClass)) { %> +@EqualsAndHashCode(callSuper = true) + <% } else { %> +@EqualsAndHashCode(callSuper = false) + <% } %> + <% if(chainModel) { %> +@Accessors(chain = true) + <% } %> +<% } %> +<% if(swagger2) { %> +@ApiModel(value = "${entity}对象", description = "${table.comment!''}") +<% } %> +<% if(table.convert) { %> +@TableName("${table.name}") +<% } %> +<% if(isNotEmpty(superEntityClass)) { %> +public class ${entity} extends ${superEntityClass}<% if(activeRecord) { %><${entity}><% } %>{ +<% } else if(activeRecord) { %> +public class ${entity} extends Model<${entity}> { +<% } else { %> +public class ${entity} implements Serializable { +<% } %> +<% if(entitySerialVersionUID) { %> + private static final long serialVersionUID = 1L; +<% } %> +<% /** -----------BEGIN 字段循环遍历----------- **/ %> +<% for(field in table.fields) { %> + <% + var keyPropertyName; + if(field.keyFlag) { + keyPropertyName = field.propertyName; + } + %> + + <% if(isNotEmpty(field.comment)) { %> + <% if(swagger2) { %> + @ApiModelProperty(value = "${field.comment}") + <% }else{ %> + /** + * ${field.comment} + */ + <% } %> + <% } %> + <% /* 主键 */ %> + <% if(field.keyFlag) { %> + <% if(field.keyIdentityFlag) { %> + @TableId(value = "${field.annotationColumnName}", type = IdType.AUTO) + <% } else if(isNotEmpty(idType)) { %> + @TableId(value = "${field.annotationColumnName}", type = IdType.${idType}) + <% } else if(field.convert) { %> + @TableId("${field.annotationColumnName}") + <% } %> + <% /* 普通字段 */ %> + <% } else if(isNotEmpty(field.fill)) { %> + <% if(field.convert){ %> + @TableField(value = "${field.annotationColumnName}", fill = FieldFill.${field.fill}) + <% }else{ %> + @TableField(fill = FieldFill.${field.fill}) + <% } %> + <% } else if(field.convert) { %> + @TableField("${field.annotationColumnName}") + <% } %> + <% /* 乐观锁注解 */ %> + <% if(versionFieldName!'' == field.name) { %> + @Version + <% } %> + <% /* 逻辑删除注解 */ %> + <% if(logicDeleteFieldName!'' == field.name) { %> + @TableLogic + <% } %> + private ${field.propertyType} ${field.propertyName}; +<% } %> +<% /** -----------END 字段循环遍历----------- **/ %> + +<% if(!entityLombokModel) { %> + <% for(field in table.fields) { %> + <% + var getprefix = ''; + if(field.propertyType == 'boolean') { + getprefix = 'is'; + } else { + getprefix = 'get'; + } + %> + public ${field.propertyType} ${getprefix}${field.capitalName}() { + return ${field.propertyName}; + } + + <% if(chainModel) { %> + public ${entity} set${field.capitalName}(${field.propertyType} ${field.propertyName}) { + <% } else { %> + public void set${field.capitalName}(${field.propertyType} ${field.propertyName}) { + <% } %> + this.${field.propertyName} = ${field.propertyName}; + <% if(chainModel){ %> + return this; + <% } %> + } + + <% } %> +<% } %> +<% if(entityColumnConstant) { %> + <% for(field in table.fields) { %> + public static final String ${strutil.toUpperCase(field.name)} = "${field.name}"; + + <% } %> +<% } %> +<% if(activeRecord) { %> + @Override + protected Serializable pkVal() { + <% if(isNotEmpty(keyPropertyName)){ %> + return this.${keyPropertyName}; + <% }else{ %> + return null; + <% } %> + } + +<% } %> +<% if(!entityLombokModel){ %> + @Override + public String toString() { + return "${entity}{" + + <% for(field in table.fields){ %> + <% if(fieldLP.index==0){ %> + "${field.propertyName}=" + ${field.propertyName} + + <% }else{ %> + ", ${field.propertyName}=" + ${field.propertyName} + + <% } %> + <% } %> + "}"; + } +<% } %> +} diff --git a/src/test/java/com/eleadmin/generator/templates/mapper.java.btl b/src/test/java/com/eleadmin/generator/templates/mapper.java.btl new file mode 100644 index 0000000..54e41a9 --- /dev/null +++ b/src/test/java/com/eleadmin/generator/templates/mapper.java.btl @@ -0,0 +1,41 @@ +package ${package.Mapper}; + +import ${superMapperClassPackage}; +import com.baomidou.mybatisplus.core.metadata.IPage; +import ${package.Entity}.${entity}; +import ${cfg.packageName!}.${package.ModuleName}.param.${entity}Param; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * ${table.comment!}Mapper + * + * @author ${author} + * @since ${date(), 'yyyy-MM-dd HH:mm:ss'} + */ +<% if(kotlin){ %> +interface ${table.mapperName} : ${superMapperClass}<${entity}> +<% }else{ %> +public interface ${table.mapperName} extends ${superMapperClass}<${entity}> { + + /** + * 分页查询 + * + * @param page 分页对象 + * @param param 查询参数 + * @return List<${entity}> + */ + List<${entity}> selectPageRel(@Param("page") IPage<${entity}> page, + @Param("param") ${entity}Param param); + + /** + * 查询全部 + * + * @param param 查询参数 + * @return List + */ + List<${entity}> selectListRel(@Param("param") ${entity}Param param); + +} +<% } %> diff --git a/src/test/java/com/eleadmin/generator/templates/mapper.xml.btl b/src/test/java/com/eleadmin/generator/templates/mapper.xml.btl new file mode 100644 index 0000000..6786c0d --- /dev/null +++ b/src/test/java/com/eleadmin/generator/templates/mapper.xml.btl @@ -0,0 +1,96 @@ + + + +<% if(enableCache) { %> + + + +<% } %> +<% if(baseResultMap) { %> + + + + <% /** 生成主键排在第一位 **/ %> + <% for(field in table.fields) { %> + <% if(field.keyFlag){ %> + + <% } %> + <% } %> + <% /** 生成公共字段 **/ %> + <% for(field in table.commonFields) { %> + + <% } %> + <% /** 生成普通字段 **/ %> + <% for(field in table.fields) { %> + <% if(!field.keyFlag) { %> + + <% } %> + <% } %> + +<% } %> +<% if(baseColumnList) { %> + + + + <% for(field in table.commonFields) { %> + ${field.columnName}, + <% } %> + ${table.fieldNames} + +<% } %> + + + + SELECT a.* + FROM ${table.name} a + +<% for(field in table.fields) { %> + <% if(field.keyFlag) { %> + <% /** 主键字段 **/ %> + + AND a.${field.name} = #{param.${field.propertyName}} + + <% } else if(field.name == logicDeleteFieldName) { %> + <% /** 逻辑删除字段 **/ %> + + AND a.deleted = #{param.deleted} + + + AND a.deleted = 0 + + <% } else if(field.name == 'create_time') { %> + <% /** 创建时间字段 **/ %> + + AND a.create_time >= #{param.createTimeStart} + + + AND a.create_time <= #{param.createTimeEnd} + + <% } else if(array.contain(cfg.paramExcludeFields, field.name)) { %> + <% /** 排除的字段 **/ %> + <% } else if(array.contain(cfg.paramEqType, field.propertyType)) { %> + <% /** 使用EQ的字段 **/ %> + + AND a.${field.name} = #{param.${field.propertyName}} + + <% } else { %> + <% /** 其它类型使用LIKE **/ %> + + AND a.${field.name} LIKE CONCAT('%', #{param.${field.propertyName}}, '%') + + <% } %> +<% } %> + + + + + + + + + + diff --git a/src/test/java/com/eleadmin/generator/templates/param.java.btl b/src/test/java/com/eleadmin/generator/templates/param.java.btl new file mode 100644 index 0000000..9c30504 --- /dev/null +++ b/src/test/java/com/eleadmin/generator/templates/param.java.btl @@ -0,0 +1,146 @@ +package ${cfg.packageName!}.${package.ModuleName}.param; + +import ${cfg.packageName!}.common.core.annotation.QueryField; +import ${cfg.packageName!}.common.core.annotation.QueryType; +import ${cfg.packageName!}.common.core.web.BaseParam; +import com.fasterxml.jackson.annotation.JsonInclude; +<% if(swagger2) { %> +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +<% } %> +<% if(entityLombokModel) { %> +import lombok.Data; +import lombok.EqualsAndHashCode; + <% if(chainModel) { %> +import lombok.experimental.Accessors; + <% } %> +<% } %> + +/** + * ${table.comment!}查询参数 + * + * @author ${author} + * @since ${date(), 'yyyy-MM-dd HH:mm:ss'} + */ +<% if(entityLombokModel) { %> +@Data + <% if(isNotEmpty(superEntityClass)) { %> +@EqualsAndHashCode(callSuper = true) + <% } else { %> +@EqualsAndHashCode(callSuper = false) + <% } %> + <% if(chainModel) { %> +@Accessors(chain = true) + <% } %> +<% } %> +@JsonInclude(JsonInclude.Include.NON_NULL) +<% if(swagger2) { %> +@ApiModel(value = "${entity}Param对象", description = "${table.comment!''}查询参数") +<% } %> +public class ${entity}Param extends BaseParam { +<% if(entitySerialVersionUID) { %> + private static final long serialVersionUID = 1L; +<% } %> +<% /** -----------BEGIN 字段循环遍历----------- **/ %> +<% for(field in table.fields) { %> + <% + var keyPropertyName; + if(field.keyFlag) { + keyPropertyName = field.propertyName; + } + // 排除的字段 + if(array.contain(cfg.paramExcludeFields, field.name)) { + continue; + } + %> + + <% if(isNotEmpty(field.comment)) { %> + <% if(swagger2) { %> + @ApiModelProperty(value = "${field.comment}") + <% }else{ %> + /** + * ${field.comment} + */ + <% } %> + <% } %> + <% /* 主键 */ %> + <% if(field.keyFlag) { %> + @QueryField(type = QueryType.EQ) + <% /* 使用EQ的字段 */ %> + <% } else if(array.contain(cfg.paramEqType, field.propertyType)) { %> + @QueryField(type = QueryType.EQ) + <% } %> + <% /* 使用String类型的字段 */ %> + <% if(array.contain(cfg.paramToStringType, field.propertyType)) { %> + private String ${field.propertyName}; + <% } else { %> + <% /* 普通字段 */ %> + private ${field.propertyType} ${field.propertyName}; + <% } %> +<% } %> +<% /** -----------END 字段循环遍历----------- **/ %> + +<% if(!entityLombokModel) { %> + <% for(field in table.fields) { %> + <% + var getprefix = ''; + if(field.propertyType == 'boolean') { + getprefix = 'is'; + } else { + getprefix = 'get'; + } + // 排除的字段 + if(array.contain(cfg.paramExcludeFields, field.name)) { + continue; + } + %> + <% if(array.contain(cfg.paramToStringType, field.propertyType)) { %> + public String ${getprefix}${field.capitalName}() { + <% } else { %> + public ${field.propertyType} ${getprefix}${field.capitalName}() { + <% } %> + return ${field.propertyName}; + } + + <% if(chainModel) { %> + <% if(array.contain(cfg.paramToStringType, field.propertyType)) { %> + public ${entity} set${field.capitalName}(String ${field.propertyName}) { + <% } else { %> + public ${entity} set${field.capitalName}(${field.propertyType} ${field.propertyName}) { + <% } %> + <% } else { %> + <% if(array.contain(cfg.paramToStringType, field.propertyType)) { %> + public void set${field.capitalName}(String ${field.propertyName}) { + <% } else { %> + public void set${field.capitalName}(${field.propertyType} ${field.propertyName}) { + <% } %> + <% } %> + this.${field.propertyName} = ${field.propertyName}; + <% if(chainModel){ %> + return this; + <% } %> + } + + <% } %> +<% } %> +<% if(!entityLombokModel) { %> + @Override + public String toString() { + return "${entity}{" + + <% for(field in table.fields) { %> + <% + // 排除的字段 + if(array.contain(cfg.paramExcludeFields, field.name)) { + continue; + } + %> + <% if(fieldLP.index == 0) { %> + "${field.propertyName}=" + ${field.propertyName} + + <% } else { %> + ", ${field.propertyName}=" + ${field.propertyName} + + <% } %> + <% } %> + "}"; + } +<% } %> +} diff --git a/src/test/java/com/eleadmin/generator/templates/service.java.btl b/src/test/java/com/eleadmin/generator/templates/service.java.btl new file mode 100644 index 0000000..67efe6a --- /dev/null +++ b/src/test/java/com/eleadmin/generator/templates/service.java.btl @@ -0,0 +1,55 @@ +<% +var idPropertyName, idComment; +for(field in table.fields) { + if(field.keyFlag) { + idPropertyName = field.propertyName; + idComment = field.comment; + } +} +%> +package ${package.Service}; + +import ${superServiceClassPackage}; +import ${cfg.packageName!}.common.core.web.PageResult; +import ${package.Entity}.${entity}; +import ${cfg.packageName!}.${package.ModuleName}.param.${entity}Param; + +import java.util.List; + +/** + * ${table.comment!}Service + * + * @author ${author} + * @since ${date(), 'yyyy-MM-dd HH:mm:ss'} + */ +<% if(kotlin){ %> +interface ${table.serviceName} : ${superServiceClass}<${entity}> +<% }else{ %> +public interface ${table.serviceName} extends ${superServiceClass}<${entity}> { + + /** + * 分页关联查询 + * + * @param param 查询参数 + * @return PageResult<${entity}> + */ + PageResult<${entity}> pageRel(${entity}Param param); + + /** + * 关联查询全部 + * + * @param param 查询参数 + * @return List<${entity}> + */ + List<${entity}> listRel(${entity}Param param); + + /** + * 根据id查询 + * + * @param ${idPropertyName!} ${idComment!} + * @return ${entity} + */ + ${entity} getByIdRel(Integer ${idPropertyName!}); + +} +<% } %> diff --git a/src/test/java/com/eleadmin/generator/templates/serviceImpl.java.btl b/src/test/java/com/eleadmin/generator/templates/serviceImpl.java.btl new file mode 100644 index 0000000..e63a0b9 --- /dev/null +++ b/src/test/java/com/eleadmin/generator/templates/serviceImpl.java.btl @@ -0,0 +1,62 @@ +<% +var idPropertyName, idCapitalName; +for(field in table.fields) { + if(field.keyFlag) { + idPropertyName = field.propertyName; + idCapitalName = field.capitalName; + } +} +%> +package ${package.ServiceImpl}; + +import ${superServiceImplClassPackage}; +import ${package.Mapper}.${table.mapperName}; +import ${package.Service}.${table.serviceName}; +import ${package.Entity}.${entity}; +import ${cfg.packageName!}.${package.ModuleName}.param.${entity}Param; +import ${cfg.packageName!}.common.core.web.PageParam; +import ${cfg.packageName!}.common.core.web.PageResult; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * ${table.comment!}Service实现 + * + * @author ${author} + * @since ${date(), 'yyyy-MM-dd HH:mm:ss'} + */ +@Service +<% if(kotlin){ %> +open class ${table.serviceImplName} : ${superServiceImplClass}<${table.mapperName}, ${entity}>(), ${table.serviceName} { + +} +<% }else{ %> +public class ${table.serviceImplName} extends ${superServiceImplClass}<${table.mapperName}, ${entity}> implements ${table.serviceName} { + + @Override + public PageResult<${entity}> pageRel(${entity}Param param) { + PageParam<${entity}, ${entity}Param> page = new PageParam<>(param); + //page.setDefaultOrder("create_time desc"); + List<${entity}> list = baseMapper.selectPageRel(page, param); + return new PageResult<>(list, page.getTotal()); + } + + @Override + public List<${entity}> listRel(${entity}Param param) { + List<${entity}> list = baseMapper.selectListRel(param); + // 排序 + PageParam<${entity}, ${entity}Param> page = new PageParam<>(); + //page.setDefaultOrder("create_time desc"); + return page.sortRecords(list); + } + + @Override + public ${entity} getByIdRel(Integer ${idPropertyName!}) { + ${entity}Param param = new ${entity}Param(); + param.set${idCapitalName!}(${idPropertyName!}); + return param.getOne(baseMapper.selectListRel(param)); + } + +} +<% } %> diff --git a/数据库脚本/com_gxwebsoft_oa.sql b/数据库脚本/com_gxwebsoft_oa.sql new file mode 100644 index 0000000..8ee76c6 --- /dev/null +++ b/数据库脚本/com_gxwebsoft_oa.sql @@ -0,0 +1,2280 @@ +/* + Navicat Premium Data Transfer + + Source Server : com-gxwebsoft-oa + Source Server Type : MySQL + Source Server Version : 50733 + Source Host : 47.119.165.234:3308 + Source Schema : com_gxwebsoft_oa + + Target Server Type : MySQL + Target Server Version : 50733 + File Encoding : 65001 + + Date: 09/08/2022 20:27:51 +*/ + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for apps_cashier +-- ---------------------------- +DROP TABLE IF EXISTS `apps_cashier`; +CREATE TABLE `apps_cashier` ( + `cashier_id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID', + `buyer_id` varchar(100) NOT NULL DEFAULT '' COMMENT '客户ID', + `code` varchar(100) NOT NULL DEFAULT '' COMMENT '支付标识', + `msg` varchar(300) NOT NULL COMMENT '返回消息', + `out_trade_no` varchar(300) NOT NULL COMMENT '客户端交易订单编号', + `amount` varchar(100) NOT NULL COMMENT '数量', + `pay_time` varchar(100) NOT NULL DEFAULT '' COMMENT '支付时间', + `pay_type` varchar(100) NOT NULL DEFAULT '' COMMENT '支付方式', + `total_amount` decimal(10,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '交易金额', + `receipt_amount` decimal(10,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '实收金额', + `fee_amount` decimal(10,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '第三方交易手续费', + `settle_amount` decimal(10,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '第三方结算金额', + `merchant_name` varchar(100) NOT NULL DEFAULT '' COMMENT '店铺名称', + `mobile` varchar(100) NOT NULL DEFAULT '' COMMENT '手机号码', + `order_remark` varchar(300) NOT NULL DEFAULT '' COMMENT '订单备注', + `order_status` varchar(100) NOT NULL DEFAULT '0' COMMENT '订单状态', + `deleted` int(1) NOT NULL DEFAULT '0' COMMENT '是否删除, 0否, 1是', + `tenant_id` int(11) NOT NULL DEFAULT '1' COMMENT '租户id', + `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '注册时间', + `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', + PRIMARY KEY (`cashier_id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=10112 DEFAULT CHARSET=utf8 COMMENT='常用链接推荐记录表'; + +-- ---------------------------- +-- Table structure for oa_app +-- ---------------------------- +DROP TABLE IF EXISTS `oa_app`; +CREATE TABLE `oa_app` ( + `app_id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '应用ID', + `app_name` varchar(100) NOT NULL DEFAULT '' COMMENT '应用名称', + `app_code` varchar(100) NOT NULL DEFAULT '' COMMENT '应用标识', + `app_url` varchar(300) DEFAULT NULL COMMENT '链接地址', + `down_url` varchar(300) DEFAULT NULL COMMENT '下载地址', + `app_icon` varchar(300) DEFAULT NULL COMMENT '应用图标', + `package_name` varchar(100) DEFAULT '' COMMENT '应用包名', + `type` varchar(50) DEFAULT '' COMMENT '应用类型', + `clicks` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '下载次数', + `comments` varchar(300) NOT NULL DEFAULT '' COMMENT '备注', + `sort_number` int(11) unsigned NOT NULL DEFAULT '100' COMMENT '排序(数字越小越靠前)', + `status` int(1) NOT NULL DEFAULT '0' COMMENT '状态, 0正常, 1冻结', + `deleted` int(1) NOT NULL DEFAULT '0' COMMENT '是否删除, 0否, 1是', + `tenant_id` int(11) NOT NULL DEFAULT '1' COMMENT '租户id', + `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '注册时间', + `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', + PRIMARY KEY (`app_id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=10097 DEFAULT CHARSET=utf8 COMMENT='应用管理记录表'; + +-- ---------------------------- +-- Records of oa_app +-- ---------------------------- +BEGIN; +INSERT INTO `oa_app` VALUES (10094, '玄维', 'IK8lLh', NULL, NULL, NULL, '', '1', 0, '', 100, 0, 0, 5, '2022-08-01 00:45:20', '2022-08-04 12:55:37'); +INSERT INTO `oa_app` VALUES (10095, '飞亿金融', 'gOobtI', NULL, NULL, NULL, '', '1', 0, '', 100, 0, 0, 5, '2022-08-01 00:45:47', '2022-08-04 12:55:14'); +COMMIT; + +-- ---------------------------- +-- Table structure for oa_assets +-- ---------------------------- +DROP TABLE IF EXISTS `oa_assets`; +CREATE TABLE `oa_assets` ( + `assets_id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '资产ID', + `name` varchar(100) NOT NULL DEFAULT '' COMMENT '资产名称', + `code` varchar(100) NOT NULL COMMENT '资产标识', + `type` varchar(100) NOT NULL DEFAULT '' COMMENT '资产类型', + `brand` varchar(100) NOT NULL COMMENT '服务器厂商', + `configuration` mediumtext NOT NULL COMMENT '服务器配置', + `account` varchar(100) NOT NULL COMMENT '初始账号', + `password` varchar(100) NOT NULL COMMENT '初始密码', + `brand_account` varchar(100) NOT NULL COMMENT '(阿里云/腾讯云)登录账号', + `brand_password` varchar(100) NOT NULL COMMENT '(阿里云/腾讯云)登录密码', + `panel` varchar(200) NOT NULL COMMENT '宝塔面板', + `panel_account` varchar(100) NOT NULL COMMENT '宝塔面板账号', + `panel_password` varchar(100) NOT NULL COMMENT '宝塔面板密码', + `finance_amount` decimal(10,2) NOT NULL COMMENT '财务信息-合同金额', + `finance_years` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '购买年限', + `finance_renew` decimal(10,2) NOT NULL COMMENT '续费金额', + `finance_customer_name` varchar(100) NOT NULL COMMENT '客户名称', + `finance_customer_contact` varchar(100) NOT NULL COMMENT '客户联系人', + `finance_customer_phone` varchar(100) NOT NULL COMMENT '客户联系电话', + `customer_id` int(11) unsigned DEFAULT '0' COMMENT '客户ID', + `open_port` varchar(200) DEFAULT NULL COMMENT '开放端口', + `content` longtext COMMENT '详情内容', + `start_time` date DEFAULT NULL COMMENT '购买时间', + `end_time` date DEFAULT NULL COMMENT '到期时间', + `is_top` varchar(50) NOT NULL DEFAULT '-' COMMENT '置顶状态', + `sort_number` int(11) unsigned NOT NULL DEFAULT '100' COMMENT '文章排序(数字越小越靠前)', + `comments` varchar(300) NOT NULL DEFAULT '' COMMENT '描述', + `status` int(1) NOT NULL DEFAULT '0' COMMENT '状态, 0正常, 1冻结', + `deleted` int(1) NOT NULL DEFAULT '0' COMMENT '是否删除, 0否, 1是', + `tenant_id` int(11) NOT NULL DEFAULT '1' COMMENT '租户id', + `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '注册时间', + `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', + PRIMARY KEY (`assets_id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=10057 DEFAULT CHARSET=utf8 COMMENT='服务器资产记录表'; + +-- ---------------------------- +-- Table structure for oa_assets_data +-- ---------------------------- +DROP TABLE IF EXISTS `oa_assets_data`; +CREATE TABLE `oa_assets_data` ( + `assets_data_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '资产项ID', + `assets_id` int(11) NOT NULL COMMENT '项ID', + `assets_data_code` varchar(100) NOT NULL COMMENT '标识', + `assets_data_name` varchar(200) NOT NULL COMMENT '名称', + `sort_number` int(11) NOT NULL DEFAULT '1' COMMENT '排序号', + `comments` varchar(400) DEFAULT NULL COMMENT '备注', + `deleted` int(1) NOT NULL DEFAULT '0' COMMENT '是否删除, 0否, 1是', + `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', + PRIMARY KEY (`assets_data_id`) USING BTREE, + KEY `dict_id` (`assets_id`) USING BTREE, + CONSTRAINT `oa_assets_data_ibfk_1` FOREIGN KEY (`assets_id`) REFERENCES `sys_dictionary` (`dict_id`) ON DELETE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='字典项'; + +-- ---------------------------- +-- Records of oa_assets_data +-- ---------------------------- +BEGIN; +COMMIT; + +-- ---------------------------- +-- Table structure for oa_customer +-- ---------------------------- +DROP TABLE IF EXISTS `oa_customer`; +CREATE TABLE `oa_customer` ( + `customer_id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '客户ID', + `customer_name` varchar(100) NOT NULL DEFAULT '' COMMENT '客户名称', + `customer_code` varchar(100) NOT NULL COMMENT '客户标识', + `customer_avatar` varchar(100) DEFAULT NULL COMMENT '头像', + `customer_type` varchar(100) DEFAULT '' COMMENT '客户类型', + `customer_phone` varchar(100) DEFAULT '' COMMENT '公司座机', + `customer_mobile` varchar(100) DEFAULT '' COMMENT '手机号码', + `customer_contacts` varchar(100) DEFAULT '' COMMENT '联系人', + `customer_province` varchar(200) DEFAULT '' COMMENT '所在省份', + `customer_city` varchar(200) DEFAULT '' COMMENT '所在城市', + `customer_region` varchar(200) DEFAULT '' COMMENT '所在地区', + `customer_address` varchar(200) DEFAULT '' COMMENT '所在地址', + `sort_number` int(11) unsigned NOT NULL DEFAULT '100' COMMENT '排序(数字越小越靠前)', + `comments` varchar(300) DEFAULT '' COMMENT '备注', + `status` int(1) NOT NULL DEFAULT '0' COMMENT '状态, 0正常, 1冻结', + `deleted` int(1) NOT NULL DEFAULT '0' COMMENT '是否删除, 0否, 1是', + `tenant_id` int(11) NOT NULL DEFAULT '1' COMMENT '租户id', + `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '注册时间', + `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', + PRIMARY KEY (`customer_id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=10091 DEFAULT CHARSET=utf8 COMMENT='客户管理记录表'; + +-- ---------------------------- +-- Records of oa_customer +-- ---------------------------- +BEGIN; +INSERT INTO `oa_customer` VALUES (10057, '南宁市网宿信息科技有限公司', 'gxwebsoft', 'https://www.wangsucn.com/img/ws-logo.ea1bcab5.svg', '0', '0771-5386339', '13800138001', '科技小王子', '', '', '', '五象大道401号五象航洋城1号楼1226室', 100, '备注', 0, 0, 5, '2022-07-31 18:44:48', '2022-08-04 12:11:07'); +INSERT INTO `oa_customer` VALUES (10085, '3', '3', '3', '2', '', '', '', '', '', '', '', 3, '3', 0, 1, 5, '2022-08-04 11:14:27', '2022-08-04 12:56:10'); +INSERT INTO `oa_customer` VALUES (10086, '4', '4', '4', '1', '4', '4', '4', '', '', '', '', 4, '4', 0, 1, 5, '2022-08-04 11:37:49', '2022-08-04 12:56:10'); +INSERT INTO `oa_customer` VALUES (10087, '广西玄道文化科技有限公司', '20227614150', '', '0', '2', '', '', '', '', '', '', 100, '', 0, 0, 5, '2022-08-06 12:53:05', '2022-08-09 06:58:05'); +INSERT INTO `oa_customer` VALUES (10088, '南职阿桂惠农', '20227614219', '', '0', '', '', '', '', '', '', '', 100, '', 0, 0, 5, '2022-08-06 13:56:50', '2022-08-06 14:30:59'); +INSERT INTO `oa_customer` VALUES (10089, '广西南宁智诚建科科技发展有限公司', '20227816449', '', '0', '', '', '赖总', '', '', '', '', 100, '', 0, 0, 5, '2022-08-08 16:04:12', '2022-08-08 16:04:12'); +INSERT INTO `oa_customer` VALUES (10090, '广西星通百达供应链管理有限公司', '20227819850', '', '0', '', '', '罗易', '', '', '', '', 100, '', 0, 0, 5, '2022-08-08 19:41:32', '2022-08-08 19:41:32'); +COMMIT; + +-- ---------------------------- +-- Table structure for oa_demo +-- ---------------------------- +DROP TABLE IF EXISTS `oa_demo`; +CREATE TABLE `oa_demo` ( + `demo_id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '测试ID', + `demo_name` varchar(100) NOT NULL DEFAULT '' COMMENT '名称', + `demo_type` varchar(100) NOT NULL DEFAULT '' COMMENT '类型', + `sort_number` int(11) unsigned NOT NULL DEFAULT '100' COMMENT '排序(数字越小越靠前)', + `comments` varchar(300) DEFAULT '' COMMENT '备注', + `status` int(1) NOT NULL DEFAULT '0' COMMENT '状态, 0正常, 1冻结', + `deleted` int(1) NOT NULL DEFAULT '0' COMMENT '是否删除, 0否, 1是', + `tenant_id` int(11) NOT NULL DEFAULT '1' COMMENT '租户id', + `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '注册时间', + `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', + PRIMARY KEY (`demo_id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=10089 DEFAULT CHARSET=utf8 COMMENT='客户管理记录表'; + +-- ---------------------------- +-- Records of oa_demo +-- ---------------------------- +BEGIN; +INSERT INTO `oa_demo` VALUES (10057, '南宁市网宿信息科技有限公司222', 'php', 100, '备注', 0, 0, 5, '2022-07-31 18:44:48', '2022-08-04 22:22:06'); +INSERT INTO `oa_demo` VALUES (10085, '3', '', 3, '3', 0, 1, 5, '2022-08-04 11:14:27', '2022-08-04 12:56:10'); +INSERT INTO `oa_demo` VALUES (10086, '4', '', 4, '4', 0, 1, 5, '2022-08-04 11:37:49', '2022-08-04 12:56:10'); +INSERT INTO `oa_demo` VALUES (10087, '22', '', 100, '22', 0, 1, 5, '2022-08-04 22:17:44', '2022-08-04 22:18:13'); +INSERT INTO `oa_demo` VALUES (10088, '9', '', 99, '', 0, 1, 5, '2022-08-04 22:18:23', '2022-08-04 22:18:27'); +COMMIT; + +-- ---------------------------- +-- Table structure for oa_items +-- ---------------------------- +DROP TABLE IF EXISTS `oa_items`; +CREATE TABLE `oa_items` ( + `items_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '项目ID', + `items_name` varchar(100) NOT NULL DEFAULT '' COMMENT '项目名称', + `items_code` varchar(100) NOT NULL DEFAULT '' COMMENT '项目标识', + `items_category` varchar(100) DEFAULT '0' COMMENT '商品分类', + `items_avatar` varchar(100) NOT NULL DEFAULT '' COMMENT '项目商标', + `url` varchar(100) NOT NULL DEFAULT '' COMMENT '项目域名', + `url_dev` varchar(100) NOT NULL DEFAULT '' COMMENT '开发版域名', + `url_admin` varchar(100) NOT NULL DEFAULT '' COMMENT '后台管理地址', + `account` varchar(100) NOT NULL DEFAULT '' COMMENT '默认账号密码', + `money` decimal(11,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '项目金额', + `real_money` decimal(10,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '实际金额', + `annual_fee` decimal(11,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '年费', + `content` longtext COMMENT '项目详情', + `param` text COMMENT '开发参数(json)', + `qrcode` varchar(250) DEFAULT NULL COMMENT '二维码', + `customer_name` varchar(100) NOT NULL COMMENT '客户名称', + `progress` tinyint(4) NOT NULL DEFAULT '10' COMMENT '项目进度(10待安排 20策划设计 30功能开发 40待验收 50完成)', + `views` int(11) NOT NULL DEFAULT '66' COMMENT '初始浏览数', + `status` tinyint(4) NOT NULL DEFAULT '10' COMMENT '状态(10上架 20下架)', + `sort_number` int(11) NOT NULL DEFAULT '100' COMMENT '排序(数字越小越靠前)', + `is_case` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否精选客户案例', + `customer_id` int(11) unsigned NOT NULL COMMENT '项目归属者', + `comments` text NOT NULL COMMENT '项目描述', + `deleted` int(1) NOT NULL DEFAULT '0' COMMENT '是否删除, 0否, 1是', + `tenant_id` int(11) NOT NULL DEFAULT '1' COMMENT '租户id', + `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '注册时间', + `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', + PRIMARY KEY (`items_id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=250 DEFAULT CHARSET=utf8 COMMENT='项目管理表'; + +INSERT INTO `oa_items` VALUES (249, '项目啊', 'X20227617262', '微信小程序', 'https://developer-1251422153.cos.ap-guangzhou.myqcloud.com/20220803182119460a62034.jpg', '', '', '', '', 0.00, 0.00, 0.00, '
\n
载入模板
\n
通用型后台管理模板,界面美观、开箱即用,拥有丰富的组件和模板
\n
\n

阿斯蒂芬lajsdfsdfsdfsdf

', NULL, NULL, '', 10, 66, 2, 100, 0, 10057, '', 0, 5, '2022-08-06 17:07:41', '2022-08-08 20:01:34'); +COMMIT; + +-- ---------------------------- +-- Table structure for oa_link +-- ---------------------------- +DROP TABLE IF EXISTS `oa_link`; +CREATE TABLE `oa_link` ( + `link_id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '链接ID', + `link_name` varchar(100) NOT NULL DEFAULT '' COMMENT '链接名称', + `link_url` varchar(300) NOT NULL COMMENT '链接地址', + `link_icon` varchar(300) NOT NULL COMMENT '链接图标', + `link_down` varchar(300) DEFAULT NULL COMMENT '链接地址', + `link_path` varchar(300) DEFAULT NULL COMMENT '路由地址', + `link_component` varchar(300) DEFAULT NULL COMMENT '组件路径', + `link_account` varchar(100) DEFAULT NULL COMMENT '访问账号', + `link_password` varchar(100) DEFAULT NULL COMMENT '访问密码', + `type` varchar(50) NOT NULL DEFAULT '0' COMMENT '链接类型', + `category` varchar(50) DEFAULT '0' COMMENT '链接类别', + `clicks` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '点击次数', + `comments` varchar(300) NOT NULL DEFAULT '' COMMENT '推荐理由', + `sort_number` int(11) unsigned NOT NULL DEFAULT '100' COMMENT '文章排序(数字越小越靠前)', + `status` int(1) NOT NULL DEFAULT '0' COMMENT '状态, 0正常, 1冻结', + `deleted` int(1) NOT NULL DEFAULT '0' COMMENT '是否删除, 0否, 1是', + `tenant_id` int(11) NOT NULL DEFAULT '1' COMMENT '租户id', + `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '注册时间', + `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', + PRIMARY KEY (`link_id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=10109 DEFAULT CHARSET=utf8 COMMENT='常用链接推荐记录表'; + +-- ---------------------------- +-- Records of oa_link +-- ---------------------------- +BEGIN; +INSERT INTO `oa_link` VALUES (10056, '网宿软件', 'https://www.gxwebsoft.com', 'https://www.gxwebsoft.com/assets/logo.7ccfefb9.svg', NULL, NULL, NULL, NULL, NULL, '1', '网站案例', 0, '公司官网', 100, 0, 0, 5, '2022-07-28 20:50:53', '2022-08-04 16:45:59'); +INSERT INTO `oa_link` VALUES (10057, 'Git私有仓库', 'http://git.gxwebsoft.com', 'http://git.gxwebsoft.com/assets/img/logo.svg', NULL, NULL, NULL, NULL, NULL, '1', '开发工具', 12, '推荐理由: 私有源码仓库', 1, 0, 0, 5, '2022-07-28 20:50:53', '2022-08-06 11:07:55'); +INSERT INTO `oa_link` VALUES (10058, 'WEBSHOP 开发文档', 'http://docs.gxwebsoft.com/#/', 'https://docsify.js.org/_media/icon.svg', NULL, NULL, NULL, NULL, NULL, '1', '知识文档', 0, '推荐理由: 使用编程手册', 100, 0, 0, 5, '2022-07-29 22:17:23', '2022-08-04 16:48:10'); +INSERT INTO `oa_link` VALUES (10059, 'eleAdmin', 'https://eleadmin.com/doc/eleadminpro/#/', 'https://pro.eleadmin.com/assets/logo.a4245709.svg', 'http://git.gxwebsoft.com/gxwebsoft/com.gxwebsoft.oa.git', NULL, NULL, '', '', '1', '前端框架', 0, '推荐理由: 基于Antd 封装的优秀前端框架', 100, 0, 0, 5, '2022-07-29 22:17:23', '2022-08-04 21:03:33'); +INSERT INTO `oa_link` VALUES (10060, 'ele-admin-api', 'https://eleadmin.com/doc/oauth2/#/', 'https://pro.eleadmin.com/assets/logo.a4245709.svg', 'http://git.gxwebsoft.com/gxwebsoft/ele-admin-api.git', NULL, NULL, '', '', '1', '后端框架', 0, '推荐理由: eleadmin配套java后端程序', 100, 0, 0, 5, '2022-07-29 22:57:53', '2022-08-04 21:04:08'); +INSERT INTO `oa_link` VALUES (10061, '萤火商城', 'https://www.yiovo.com/doc', 'http://static.website.yiovo.com/assets/index/picture/qrcode.png', 'http://47.119.165.234:16805/%E8%90%A4%E7%81%AB%E5%95%86%E5%9F%8E-%E5%AE%8C%E6%95%B4%E5%8C%85-v.2.2.0.tar.gz', NULL, NULL, NULL, NULL, '1', '整套源码', 0, '推荐理由: PHP小程序商城', 100, 0, 0, 5, '2022-07-29 22:57:53', '2022-08-06 11:56:24'); +INSERT INTO `oa_link` VALUES (10062, 'ant design vue', 'https://www.antdv.com/components/overview-cn', 'https://www.antdv.com/assets/logo.1ef800a8.svg', NULL, NULL, NULL, NULL, NULL, '1', '前端框架', 0, '推荐理由: 蚂蚁金服旗下出品的前端框架', 100, 0, 0, 5, '2022-07-29 22:57:53', '2022-08-04 16:37:06'); +INSERT INTO `oa_link` VALUES (10063, 'fir.im飞机网', 'https://www.betaqr.com/apps', '', NULL, NULL, NULL, NULL, NULL, '1', '开发工具', 0, '别名:飞机网,一款app包的托管平台', 100, 0, 0, 5, '2022-07-29 22:57:53', '2022-08-04 16:39:55'); +INSERT INTO `oa_link` VALUES (10064, 'uniapp', 'https://uniapp.dcloud.net.cn/', 'https://img.cdn.aliyun.dcloud.net.cn/guide/uniapp/gh_33446d7f7a26_430.jpg', '', NULL, '', '', '', '1', '前端框架', 39, '一套代码编译到Android版、iOS版、微信小程序等多端应用的前端开发工具', 100, 0, 0, 5, '2022-07-29 23:21:43', '2022-08-04 16:54:55'); +INSERT INTO `oa_link` VALUES (10065, '腾讯文档', 'https://docs.qq.com/desktop/', 'https://docs.gtimg.com/docs-design-resources/pc/svg/list_logo-27e58348b7.svg', NULL, NULL, NULL, NULL, NULL, '1', '办公协同', 0, '多人协同文档编辑', 100, 0, 0, 5, '2022-07-29 23:36:48', '2022-08-04 16:38:04'); +INSERT INTO `oa_link` VALUES (10066, '墨刀', 'https://modao.cc/dashboard', 'https://allstatics.wondershare.cn/neveragain/2019/assets/icon/logo/modao-zh-horizontal-text-white.svg', NULL, NULL, NULL, 'ip170@163.com', 'zzlpink004', '1', '开发工具', 0, '软件策划工具', 100, 0, 0, 5, '2022-07-29 23:57:59', '2022-08-06 11:57:32'); +INSERT INTO `oa_link` VALUES (10099, '海牛收银台', '/appstore/cashier', '', NULL, NULL, '/appstore/cashier', NULL, NULL, '0', '前端框架', 0, '租户编号:6', 100, 0, 0, 5, '2022-08-03 14:09:30', '2022-08-04 17:32:26'); +INSERT INTO `oa_link` VALUES (10106, 'uView2.0', 'https://www.uviewui.com/', 'https://www.uviewui.com/common/logo.png', '', NULL, NULL, '', '', '1', '前端框架', 0, 'uView UI,是全面兼容nvue的uni-app生态框架,全面的组件和便捷的工具会让您信手拈来,如鱼得水', 100, 0, 0, 5, '2022-08-04 17:01:02', '2022-08-04 17:01:02'); +COMMIT; + +-- ---------------------------- +-- Table structure for sys_dictionary +-- ---------------------------- +DROP TABLE IF EXISTS `sys_dictionary`; +CREATE TABLE `sys_dictionary` ( + `dict_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '字典id', + `dict_code` varchar(100) NOT NULL COMMENT '字典标识', + `dict_name` varchar(200) NOT NULL COMMENT '字典名称', + `sort_number` int(11) NOT NULL DEFAULT '1' COMMENT '排序号', + `comments` varchar(400) DEFAULT NULL COMMENT '备注', + `deleted` int(1) NOT NULL DEFAULT '0' COMMENT '是否删除, 0否, 1是', + `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', + PRIMARY KEY (`dict_id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='字典'; + +-- ---------------------------- +-- Records of sys_dictionary +-- ---------------------------- +BEGIN; +INSERT INTO `sys_dictionary` VALUES (1, 'sex', '性别', 1, '1男 2女', 0, '2020-03-15 13:04:39', '2022-08-01 10:43:53'); +INSERT INTO `sys_dictionary` VALUES (2, 'organization_type', '机构类型', 3, NULL, 0, '2020-03-16 00:32:36', '2022-08-01 00:29:40'); +INSERT INTO `sys_dictionary` VALUES (3, 'serverStatus', '服务器运行状态', 5, '', 0, '2022-07-25 11:43:16', '2022-08-01 00:29:53'); +INSERT INTO `sys_dictionary` VALUES (4, 'serverBrand', '服务器厂商', 4, '服务器厂商', 0, '2022-07-25 12:49:12', '2022-08-01 00:29:46'); +INSERT INTO `sys_dictionary` VALUES (5, 'a01', '测试', 1, '', 1, '2022-07-25 15:47:15', '2022-07-25 18:24:23'); +INSERT INTO `sys_dictionary` VALUES (6, 'serverYears', '服务器购买年限', 6, '1', 0, '2022-07-28 18:46:30', '2022-08-01 00:30:00'); +INSERT INTO `sys_dictionary` VALUES (7, 'serverConfiguration', '服务器配置', 7, '', 0, '2022-07-29 10:30:05', '2022-08-01 00:30:07'); +INSERT INTO `sys_dictionary` VALUES (8, 'serverOpenPort', '服务器_常用端口', 8, '', 0, '2022-07-29 10:51:42', '2022-08-01 00:30:19'); +INSERT INTO `sys_dictionary` VALUES (9, 'linkType', '链接类型', 9, '', 0, '2022-07-29 21:25:53', '2022-08-03 11:56:32'); +INSERT INTO `sys_dictionary` VALUES (10, 'status', '状态', 2, '', 0, '2022-07-31 19:54:23', '2022-08-01 00:29:35'); +INSERT INTO `sys_dictionary` VALUES (11, 'appType', '应用类型', 10, '', 0, '2022-08-01 00:29:13', '2022-08-01 00:29:13'); +INSERT INTO `sys_dictionary` VALUES (12, 'appTag', '应用标签', 11, '', 0, '2022-08-01 10:28:22', '2022-08-01 10:49:38'); +INSERT INTO `sys_dictionary` VALUES (13, 'developmentLanguage', '开发语言', 12, '', 0, '2022-08-01 10:54:44', '2022-08-01 10:54:44'); +INSERT INTO `sys_dictionary` VALUES (14, 'developmentTool', '开发工具', 13, '', 0, '2022-08-01 10:59:54', '2022-08-01 10:59:54'); +INSERT INTO `sys_dictionary` VALUES (15, 'itemsCategory', '项目分类', 14, '', 0, '2022-08-01 19:21:29', '2022-08-01 19:21:29'); +INSERT INTO `sys_dictionary` VALUES (16, 'customerType', '客户类型', 15, '', 0, '2022-08-04 11:09:59', '2022-08-04 11:09:59'); +INSERT INTO `sys_dictionary` VALUES (17, 'linkCategory', '链接分类', 9, '', 0, '2022-08-04 15:21:49', '2022-08-04 15:33:49'); +INSERT INTO `sys_dictionary` VALUES (18, 'itemsStatus', '项目状态', 17, '', 0, '2022-08-08 18:50:15', '2022-08-08 18:50:15'); +COMMIT; + +-- ---------------------------- +-- Table structure for sys_dictionary_data +-- ---------------------------- +DROP TABLE IF EXISTS `sys_dictionary_data`; +CREATE TABLE `sys_dictionary_data` ( + `dict_data_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '字典项id', + `dict_id` int(11) NOT NULL COMMENT '字典id', + `dict_data_code` varchar(100) NOT NULL COMMENT '字典项标识', + `dict_data_name` varchar(200) NOT NULL COMMENT '字典项名称', + `sort_number` int(11) NOT NULL DEFAULT '1' COMMENT '排序号', + `comments` varchar(400) DEFAULT NULL COMMENT '备注', + `deleted` int(1) NOT NULL DEFAULT '0' COMMENT '是否删除, 0否, 1是', + `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', + PRIMARY KEY (`dict_data_id`) USING BTREE, + KEY `dict_id` (`dict_id`) USING BTREE, + CONSTRAINT `sys_dictionary_data_ibfk_1` FOREIGN KEY (`dict_id`) REFERENCES `sys_dictionary` (`dict_id`) ON DELETE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=96 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='字典项'; + +-- ---------------------------- +-- Records of sys_dictionary_data +-- ---------------------------- +BEGIN; +INSERT INTO `sys_dictionary_data` VALUES (1, 1, '1', '男', 1, NULL, 0, '2020-03-15 13:07:28', '2022-03-11 22:46:24'); +INSERT INTO `sys_dictionary_data` VALUES (2, 1, '2', '女', 2, NULL, 0, '2020-03-15 13:07:41', '2022-03-11 22:46:25'); +INSERT INTO `sys_dictionary_data` VALUES (3, 2, '1', '公司', 1, NULL, 0, '2020-03-16 00:34:32', '2022-03-11 22:46:27'); +INSERT INTO `sys_dictionary_data` VALUES (4, 2, '2', '子公司', 2, NULL, 0, '2020-03-16 00:35:02', '2022-03-11 22:46:28'); +INSERT INTO `sys_dictionary_data` VALUES (5, 2, '3', '部门', 3, NULL, 0, '2020-03-16 00:35:18', '2022-03-11 22:46:30'); +INSERT INTO `sys_dictionary_data` VALUES (6, 2, '4', '小组', 4, NULL, 0, '2020-03-16 00:35:36', '2022-03-11 22:46:31'); +INSERT INTO `sys_dictionary_data` VALUES (7, 4, '阿里云', '阿里云', 1, '', 0, '2022-07-28 15:02:51', '2022-07-28 15:12:41'); +INSERT INTO `sys_dictionary_data` VALUES (8, 4, '腾讯云', '腾讯云', 2, '', 0, '2022-07-28 15:03:23', '2022-07-28 15:12:47'); +INSERT INTO `sys_dictionary_data` VALUES (9, 4, '华为云', '华为云', 3, '', 0, '2022-07-28 15:03:41', '2022-07-28 15:12:54'); +INSERT INTO `sys_dictionary_data` VALUES (10, 4, '西部数码', '西部数码', 4, '', 0, '2022-07-28 15:04:05', '2022-07-28 15:13:00'); +INSERT INTO `sys_dictionary_data` VALUES (11, 4, '其他', '其他', 5, '', 0, '2022-07-28 15:04:16', '2022-07-28 15:13:05'); +INSERT INTO `sys_dictionary_data` VALUES (12, 3, '0', '正常', 1, '', 1, '2022-07-28 15:22:03', '2022-07-28 15:27:49'); +INSERT INTO `sys_dictionary_data` VALUES (13, 3, '1', '过期', 2, '', 1, '2022-07-28 15:22:20', '2022-07-28 15:27:51'); +INSERT INTO `sys_dictionary_data` VALUES (14, 3, '0', '正常', 1, '', 0, '2022-07-28 15:27:59', '2022-07-28 16:27:30'); +INSERT INTO `sys_dictionary_data` VALUES (15, 3, '1', '过期', 2, '', 0, '2022-07-28 15:28:09', '2022-07-28 16:27:35'); +INSERT INTO `sys_dictionary_data` VALUES (16, 3, '2', '不再续', 3, '', 1, '2022-07-28 16:27:22', '2022-07-28 19:07:36'); +INSERT INTO `sys_dictionary_data` VALUES (17, 6, '1', '1年', 1, '', 0, '2022-07-28 18:54:45', '2022-07-28 18:54:45'); +INSERT INTO `sys_dictionary_data` VALUES (18, 6, '2', '2年', 2, '', 0, '2022-07-28 18:54:56', '2022-07-28 18:54:56'); +INSERT INTO `sys_dictionary_data` VALUES (19, 6, '3', '3年', 3, '', 0, '2022-07-28 18:55:04', '2022-07-28 18:55:04'); +INSERT INTO `sys_dictionary_data` VALUES (20, 6, '4', '4年', 4, '', 0, '2022-07-28 18:55:12', '2022-07-28 18:55:12'); +INSERT INTO `sys_dictionary_data` VALUES (21, 6, '5', '5年', 5, '', 0, '2022-07-28 18:55:19', '2022-07-28 18:55:19'); +INSERT INTO `sys_dictionary_data` VALUES (22, 6, '10', '10年', 10, '', 0, '2022-07-28 18:55:28', '2022-07-28 18:55:28'); +INSERT INTO `sys_dictionary_data` VALUES (23, 7, '4核/8G/200G/10M', '4核/8G/200G/10M', 1, '', 0, '2022-07-29 10:31:07', '2022-07-29 10:31:07'); +INSERT INTO `sys_dictionary_data` VALUES (24, 7, '8核/16G/200G/10M', '8核/16G/200G/10M', 2, '', 0, '2022-07-29 10:31:20', '2022-07-29 10:31:28'); +INSERT INTO `sys_dictionary_data` VALUES (25, 7, '2核/8G/100G/5M', '2核/8G/100G/5M', 3, '', 0, '2022-07-29 10:31:55', '2022-07-29 10:31:55'); +INSERT INTO `sys_dictionary_data` VALUES (26, 8, '80', '80', 1, '', 0, '2022-07-29 10:51:51', '2022-07-29 10:51:51'); +INSERT INTO `sys_dictionary_data` VALUES (27, 8, '443', '443', 20, '', 0, '2022-07-29 10:52:13', '2022-08-08 16:12:03'); +INSERT INTO `sys_dictionary_data` VALUES (28, 8, '8080', '8080', 21, '', 0, '2022-07-29 10:52:36', '2022-08-08 16:12:08'); +INSERT INTO `sys_dictionary_data` VALUES (29, 8, '21888', '21888', 2, 'ftp', 0, '2022-07-29 10:52:59', '2022-08-08 16:14:12'); +INSERT INTO `sys_dictionary_data` VALUES (30, 8, '22888', '22888', 3, 'ssh', 0, '2022-07-29 10:53:12', '2022-08-08 16:14:15'); +INSERT INTO `sys_dictionary_data` VALUES (31, 8, '39000/40000', '39000/40000', 6, 'FTP被动端口', 0, '2022-07-29 10:53:31', '2022-07-29 10:53:50'); +INSERT INTO `sys_dictionary_data` VALUES (32, 8, '3308', '3308', 4, '数据库端口', 0, '2022-07-29 10:54:18', '2022-08-08 16:15:14'); +INSERT INTO `sys_dictionary_data` VALUES (33, 8, '3000', '3000', 22, 'gitea', 0, '2022-07-29 10:54:44', '2022-08-08 16:12:18'); +INSERT INTO `sys_dictionary_data` VALUES (34, 8, '56379', '56379', 24, 'redis', 0, '2022-07-29 10:55:23', '2022-08-08 16:12:27'); +INSERT INTO `sys_dictionary_data` VALUES (35, 8, '30620', '30620', 8, '宝塔面板端口', 0, '2022-07-29 10:55:52', '2022-08-08 16:15:37'); +INSERT INTO `sys_dictionary_data` VALUES (36, 8, '465/465', '465/465', 25, '邮件发送', 0, '2022-07-29 10:56:21', '2022-08-08 16:12:39'); +INSERT INTO `sys_dictionary_data` VALUES (37, 8, '9000/9003', '9000/9003', 26, '宝塔面板', 0, '2022-07-29 10:57:05', '2022-08-08 16:12:49'); +INSERT INTO `sys_dictionary_data` VALUES (38, 8, '9009', '9009', 23, 'minio', 0, '2022-07-29 10:57:44', '2022-08-08 16:13:09'); +INSERT INTO `sys_dictionary_data` VALUES (39, 8, '16801/16899', '16801/16899', 10, '开放100个应用端口', 0, '2022-07-29 10:58:27', '2022-08-08 16:15:55'); +INSERT INTO `sys_dictionary_data` VALUES (40, 8, '888', '888', 9, 'phpmyadmin', 0, '2022-07-29 10:58:53', '2022-08-08 16:16:01'); +INSERT INTO `sys_dictionary_data` VALUES (41, 9, '0', '应用组件', 0, '', 0, '2022-07-29 21:27:59', '2022-08-04 13:21:15'); +INSERT INTO `sys_dictionary_data` VALUES (42, 9, '1', '外部链接', 1, '', 0, '2022-07-29 21:28:26', '2022-08-04 13:21:53'); +INSERT INTO `sys_dictionary_data` VALUES (43, 9, '2', '开发文档', 2, '', 1, '2022-07-29 21:29:04', '2022-08-04 13:21:44'); +INSERT INTO `sys_dictionary_data` VALUES (44, 9, '3', '协同工作', 3, '', 1, '2022-07-29 21:30:52', '2022-08-04 13:21:44'); +INSERT INTO `sys_dictionary_data` VALUES (45, 9, '6', '客户案例', 6, '', 1, '2022-07-30 01:10:16', '2022-08-04 13:21:44'); +INSERT INTO `sys_dictionary_data` VALUES (46, 9, '6', '参考网站', 6, '', 1, '2022-07-30 01:10:47', '2022-07-30 01:10:54'); +INSERT INTO `sys_dictionary_data` VALUES (47, 10, '0', '正常', 0, '', 0, '2022-07-31 19:55:03', '2022-07-31 20:16:37'); +INSERT INTO `sys_dictionary_data` VALUES (48, 10, '1', '禁用', 1, '', 0, '2022-07-31 19:55:09', '2022-07-31 20:16:45'); +INSERT INTO `sys_dictionary_data` VALUES (49, 11, '0', '基础应用', 0, '', 0, '2022-08-01 00:31:29', '2022-08-01 00:31:29'); +INSERT INTO `sys_dictionary_data` VALUES (50, 11, '1', '移动应用', 1, '移动应用', 0, '2022-08-01 00:32:08', '2022-08-01 00:32:08'); +INSERT INTO `sys_dictionary_data` VALUES (51, 12, 'weapp', '微信小程序', 1, '', 0, '2022-08-01 10:50:20', '2022-08-01 10:51:15'); +INSERT INTO `sys_dictionary_data` VALUES (52, 12, 'android', '安卓', 2, '', 0, '2022-08-01 10:51:53', '2022-08-01 11:04:53'); +INSERT INTO `sys_dictionary_data` VALUES (53, 12, 'ios', '苹果', 3, '', 0, '2022-08-01 10:52:16', '2022-08-01 10:52:16'); +INSERT INTO `sys_dictionary_data` VALUES (54, 12, 'java', 'java版', 4, '', 0, '2022-08-01 10:53:00', '2022-08-01 10:53:00'); +INSERT INTO `sys_dictionary_data` VALUES (55, 12, 'php', 'php版', 5, '', 0, '2022-08-01 10:53:14', '2022-08-01 10:53:14'); +INSERT INTO `sys_dictionary_data` VALUES (56, 12, 'website', '网站建设', 6, '', 0, '2022-08-01 10:53:33', '2022-08-01 10:53:33'); +INSERT INTO `sys_dictionary_data` VALUES (57, 12, 'system', '系统开发', 7, '', 0, '2022-08-01 10:53:46', '2022-08-01 10:58:51'); +INSERT INTO `sys_dictionary_data` VALUES (58, 13, 'java', 'java', 1, '', 0, '2022-08-01 10:54:58', '2022-08-01 10:54:58'); +INSERT INTO `sys_dictionary_data` VALUES (59, 13, 'php', 'php', 2, '', 0, '2022-08-01 10:55:04', '2022-08-01 10:55:04'); +INSERT INTO `sys_dictionary_data` VALUES (60, 13, 'golang', 'golang', 3, '', 0, '2022-08-01 10:55:18', '2022-08-01 10:55:18'); +INSERT INTO `sys_dictionary_data` VALUES (61, 13, 'vue', 'vue', 4, '', 0, '2022-08-01 10:55:28', '2022-08-01 10:55:28'); +INSERT INTO `sys_dictionary_data` VALUES (62, 12, 'vue', 'vue', 8, '', 1, '2022-08-01 10:57:46', '2022-08-01 10:59:08'); +INSERT INTO `sys_dictionary_data` VALUES (63, 12, 'h5版', '手机版', 9, '', 0, '2022-08-01 10:58:12', '2022-08-01 11:05:20'); +INSERT INTO `sys_dictionary_data` VALUES (64, 14, '1', 'PhpStorm', 1, '', 0, '2022-08-01 11:00:38', '2022-08-01 11:01:19'); +INSERT INTO `sys_dictionary_data` VALUES (65, 14, '2', 'HbuilerX', 1, '', 0, '2022-08-01 11:00:57', '2022-08-01 11:00:57'); +INSERT INTO `sys_dictionary_data` VALUES (66, 14, '3', 'WebStorm', 3, '', 0, '2022-08-01 11:01:46', '2022-08-01 11:01:46'); +INSERT INTO `sys_dictionary_data` VALUES (67, 14, '4', 'IntelliJ IDEA', 4, '', 0, '2022-08-01 11:02:57', '2022-08-01 11:02:57'); +INSERT INTO `sys_dictionary_data` VALUES (68, 14, '5', 'Navicat Premium', 5, '', 0, '2022-08-01 11:03:37', '2022-08-01 11:03:37'); +INSERT INTO `sys_dictionary_data` VALUES (69, 15, '微信小程序', '微信小程序', 0, '', 0, '2022-08-01 19:23:01', '2022-08-06 19:11:46'); +INSERT INTO `sys_dictionary_data` VALUES (70, 15, 'APP开发', 'APP开发', 1, '', 0, '2022-08-01 19:23:19', '2022-08-06 19:11:53'); +INSERT INTO `sys_dictionary_data` VALUES (71, 15, '网站建设', '网站建设', 2, '', 0, '2022-08-01 19:23:33', '2022-08-06 19:12:00'); +INSERT INTO `sys_dictionary_data` VALUES (72, 15, '公众号开发', '公众号开发', 3, '', 0, '2022-08-01 19:23:41', '2022-08-06 19:12:08'); +INSERT INTO `sys_dictionary_data` VALUES (73, 15, '软件开发', '软件开发', 4, '', 0, '2022-08-01 19:24:04', '2022-08-06 19:12:18'); +INSERT INTO `sys_dictionary_data` VALUES (74, 9, '5', '开发框架2', 5, '', 1, '2022-08-03 13:45:31', '2022-08-04 13:21:44'); +INSERT INTO `sys_dictionary_data` VALUES (75, 11, '2', '网站应用', 2, '', 0, '2022-08-03 18:10:56', '2022-08-03 18:10:56'); +INSERT INTO `sys_dictionary_data` VALUES (76, 16, '0', '正式客户', 0, '', 0, '2022-08-04 11:10:23', '2022-08-04 11:10:23'); +INSERT INTO `sys_dictionary_data` VALUES (77, 16, '1', '潜在客户', 1, '', 0, '2022-08-04 11:10:31', '2022-08-04 11:10:31'); +INSERT INTO `sys_dictionary_data` VALUES (78, 16, '2', '流失客户', 2, '', 0, '2022-08-04 11:10:43', '2022-08-04 11:10:43'); +INSERT INTO `sys_dictionary_data` VALUES (79, 17, '前端框架', '前端框架', 0, '', 0, '2022-08-04 15:22:24', '2022-08-04 16:31:43'); +INSERT INTO `sys_dictionary_data` VALUES (80, 17, '开发工具', '开发工具', 1, '', 0, '2022-08-04 16:28:12', '2022-08-04 16:31:49'); +INSERT INTO `sys_dictionary_data` VALUES (81, 17, '知识文档', '知识文档', 2, '', 0, '2022-08-04 16:29:05', '2022-08-04 16:31:53'); +INSERT INTO `sys_dictionary_data` VALUES (82, 17, '网站案例', '网站案例', 3, '', 0, '2022-08-04 16:31:30', '2022-08-04 16:34:10'); +INSERT INTO `sys_dictionary_data` VALUES (83, 17, '公司官网', '公司官网', 4, '', 0, '2022-08-04 16:33:50', '2022-08-04 16:33:50'); +INSERT INTO `sys_dictionary_data` VALUES (84, 17, '后端框架', '后端框架', 5, '', 0, '2022-08-04 16:34:47', '2022-08-04 16:34:47'); +INSERT INTO `sys_dictionary_data` VALUES (85, 17, '办公协同', '办公协同', 6, '', 0, '2022-08-04 16:37:52', '2022-08-04 16:37:52'); +INSERT INTO `sys_dictionary_data` VALUES (86, 17, '整套源码', '整套源码', 7, '', 0, '2022-08-04 16:43:40', '2022-08-04 16:43:40'); +INSERT INTO `sys_dictionary_data` VALUES (87, 17, '开发软件', '开发软件', 8, '', 0, '2022-08-04 16:46:41', '2022-08-04 16:46:41'); +INSERT INTO `sys_dictionary_data` VALUES (88, 8, '3318', '3318', 5, '数据库端口', 0, '2022-08-08 16:11:18', '2022-08-08 16:15:42'); +INSERT INTO `sys_dictionary_data` VALUES (89, 8, '8888', '8888', 7, '宝塔默认端口', 0, '2022-08-08 16:13:53', '2022-08-08 16:15:32'); +INSERT INTO `sys_dictionary_data` VALUES (90, 8, '10000/10500', '10000/10500', 27, '应用端口', 0, '2022-08-08 16:40:35', '2022-08-08 16:40:35'); +INSERT INTO `sys_dictionary_data` VALUES (91, 18, '0', '已结束', 0, 'default', 0, '2022-08-08 18:50:44', '2022-08-08 19:32:48'); +INSERT INTO `sys_dictionary_data` VALUES (92, 18, '1', '进行中', 1, 'green', 0, '2022-08-08 18:51:13', '2022-08-08 19:16:48'); +INSERT INTO `sys_dictionary_data` VALUES (93, 18, '未开始', '未开始', 0, '', 1, '2022-08-08 18:51:33', '2022-08-08 18:52:51'); +INSERT INTO `sys_dictionary_data` VALUES (94, 18, '2', '未开始', 2, 'orange', 0, '2022-08-08 18:53:21', '2022-08-08 19:32:44'); +INSERT INTO `sys_dictionary_data` VALUES (95, 18, '3', '已延期', 3, 'red', 0, '2022-08-08 18:53:37', '2022-08-08 19:16:59'); +COMMIT; + +-- ---------------------------- +-- Table structure for sys_email_record +-- ---------------------------- +DROP TABLE IF EXISTS `sys_email_record`; +CREATE TABLE `sys_email_record` ( + `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id', + `title` varchar(200) DEFAULT NULL COMMENT '邮件标题', + `content` text COMMENT '邮件内容', + `receiver` varchar(200) DEFAULT NULL COMMENT '收件邮箱', + `sender` varchar(200) DEFAULT NULL COMMENT '发件邮箱', + `create_user_id` int(11) DEFAULT NULL COMMENT '创建人', + `comments` varchar(400) DEFAULT NULL COMMENT '备注', + `tenant_id` int(11) NOT NULL DEFAULT '1' COMMENT '租户id', + `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', + PRIMARY KEY (`id`) USING BTREE, + KEY `create_user_id` (`create_user_id`) USING BTREE, + KEY `tenant_id` (`tenant_id`) USING BTREE, + CONSTRAINT `sys_email_record_ibfk_1` FOREIGN KEY (`create_user_id`) REFERENCES `sys_user` (`user_id`) ON DELETE CASCADE, + CONSTRAINT `sys_email_record_ibfk_2` FOREIGN KEY (`tenant_id`) REFERENCES `sys_tenant` (`tenant_id`) ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='邮件记录'; + +-- ---------------------------- +-- Records of sys_email_record +-- ---------------------------- +BEGIN; +COMMIT; + +-- ---------------------------- +-- Table structure for sys_file_record +-- ---------------------------- +DROP TABLE IF EXISTS `sys_file_record`; +CREATE TABLE `sys_file_record` ( + `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id', + `name` varchar(200) DEFAULT NULL COMMENT '文件名称', + `path` varchar(200) DEFAULT NULL COMMENT '文件存储路径', + `length` int(11) DEFAULT NULL COMMENT '文件大小', + `content_type` varchar(80) DEFAULT NULL COMMENT '文件类型', + `comments` varchar(400) DEFAULT NULL COMMENT '备注', + `create_user_id` int(11) DEFAULT NULL COMMENT '创建人', + `deleted` int(1) NOT NULL DEFAULT '0' COMMENT '是否删除, 0否, 1是', + `tenant_id` int(11) NOT NULL DEFAULT '1' COMMENT '租户id', + `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', + PRIMARY KEY (`id`) USING BTREE, + KEY `create_user_id` (`create_user_id`) USING BTREE, + KEY `tenant_id` (`tenant_id`) USING BTREE, + CONSTRAINT `sys_file_record_ibfk_1` FOREIGN KEY (`create_user_id`) REFERENCES `sys_user` (`user_id`) ON DELETE CASCADE, + CONSTRAINT `sys_file_record_ibfk_2` FOREIGN KEY (`tenant_id`) REFERENCES `sys_tenant` (`tenant_id`) ON DELETE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='文件列表'; + +-- ---------------------------- +-- Records of sys_file_record +-- ---------------------------- +BEGIN; +INSERT INTO `sys_file_record` VALUES (34, 'v2-3766da4429c82c0a6c2721d11141c398_r.jpeg', '/20220809/6b4c4c077caa48a688741f4408c7e72c.jpeg', 4390877, 'image/jpeg', NULL, 14, 0, 5, '2022-08-09 20:25:28', '2022-08-09 20:25:28'); +COMMIT; + +-- ---------------------------- +-- Table structure for sys_login_record +-- ---------------------------- +DROP TABLE IF EXISTS `sys_login_record`; +CREATE TABLE `sys_login_record` ( + `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', + `username` varchar(128) NOT NULL COMMENT '用户账号', + `os` varchar(200) DEFAULT NULL COMMENT '操作系统', + `device` varchar(200) DEFAULT NULL COMMENT '设备名', + `browser` varchar(200) DEFAULT NULL COMMENT '浏览器类型', + `ip` varchar(200) DEFAULT NULL COMMENT 'ip地址', + `login_type` int(11) NOT NULL COMMENT '操作类型, 0登录成功, 1登录失败, 2退出登录, 3续签token', + `comments` varchar(400) DEFAULT NULL COMMENT '备注', + `tenant_id` int(11) NOT NULL DEFAULT '1' COMMENT '租户id', + `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '操作时间', + `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', + PRIMARY KEY (`id`) USING BTREE, + KEY `tenant_id` (`tenant_id`) USING BTREE, + CONSTRAINT `sys_login_record_ibfk_1` FOREIGN KEY (`tenant_id`) REFERENCES `sys_tenant` (`tenant_id`) ON DELETE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=304 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='登录日志'; + +-- ---------------------------- +-- Records of sys_login_record +-- ---------------------------- +BEGIN; +INSERT INTO `sys_login_record` VALUES (1, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-25 11:40:00', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (2, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-25 11:42:14', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (3, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-25 12:15:46', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (4, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-25 17:45:38', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (5, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-25 17:49:06', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (6, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-25 18:01:17', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (7, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-25 18:02:47', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (8, 'admin', 'Mac', 'OSX', 'Chrome', '113.16.57.155', 1, '账号不存在', 5, '2022-07-25 18:25:03', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (9, 'admin', 'Mac', 'OSX', 'Chrome', '113.16.57.155', 1, '账号不存在', 5, '2022-07-25 18:25:07', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (10, 'admin', 'Mac', 'OSX', 'Chrome', '113.16.57.155', 1, '账号不存在', 5, '2022-07-25 18:25:42', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (11, 'admin', 'Mac', 'OSX', 'Chrome', '113.16.57.155', 0, NULL, 5, '2022-07-25 18:26:04', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (12, '赵忠林', 'Mac', 'OSX', 'Chrome', '113.16.57.155', 0, NULL, 5, '2022-07-25 18:30:15', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (13, 'admin', 'Mac', 'OSX', 'Chrome', '113.16.57.155', 0, NULL, 5, '2022-07-25 20:47:35', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (14, 'admin', 'Mac', 'OSX', 'Chrome', '113.16.57.155', 0, NULL, 5, '2022-07-25 23:11:22', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (15, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-25 23:11:56', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (16, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-25 23:15:15', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (17, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-25 23:15:45', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (18, 'admin', NULL, NULL, NULL, NULL, 0, NULL, 5, '2022-07-25 23:26:22', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (19, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-25 23:26:29', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (20, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-27 01:21:18', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (21, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-27 01:21:45', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (22, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-27 02:10:36', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (23, '南宁网宿科技OA', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 1, '账号不存在', 5, '2022-07-27 02:10:58', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (24, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-27 02:11:05', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (25, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-27 08:42:46', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (26, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-27 08:53:16', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (27, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-27 08:58:47', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (28, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-27 09:02:05', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (29, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-27 09:03:19', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (30, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-27 10:51:08', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (31, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-27 10:57:36', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (32, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-27 11:00:05', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (33, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-27 11:00:38', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (34, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-27 11:05:36', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (35, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-27 16:31:01', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (36, '赵忠林', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 1, '密码错误', 5, '2022-07-27 16:31:39', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (37, '赵忠林', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-27 16:31:46', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (38, '市场部001', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-27 16:35:14', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (39, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-27 16:49:17', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (40, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-27 17:01:50', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (41, '赵忠林', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-27 18:20:06', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (42, '赵忠林', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-27 18:22:46', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (43, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-27 18:23:00', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (44, '市场部001', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-27 18:23:13', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (45, 'admin', 'Mac', 'OSX', 'Firefox', '127.0.0.1', 0, NULL, 5, '2022-07-27 18:27:14', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (46, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-27 18:32:43', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (47, '市场部001', 'Mac', 'OSX', 'Firefox', '127.0.0.1', 1, '密码错误', 5, '2022-07-27 18:32:56', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (48, '市场部001', 'Mac', 'OSX', 'Firefox', '127.0.0.1', 0, NULL, 5, '2022-07-27 18:33:01', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (49, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-27 18:38:39', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (50, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-27 19:00:55', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (51, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-28 17:26:34', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (52, '市场部001', 'Mac', 'OSX', 'Firefox', '127.0.0.1', 3, NULL, 5, '2022-07-28 18:27:54', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (53, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-28 20:42:50', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (54, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-29 13:39:44', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (55, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-29 14:18:03', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (56, '132', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 1, '账号不存在', 5, '2022-07-29 14:34:56', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (57, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-29 14:35:07', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (58, '13737128880', 'Mac', 'OSX', 'Firefox', '127.0.0.1', 1, '账号不存在', 5, '2022-07-29 14:44:23', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (59, '南宁网宿科技OA', 'Mac', 'OSX', 'Firefox', '127.0.0.1', 1, '账号不存在', 5, '2022-07-29 14:44:40', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (60, '南宁网宿科技OA', 'Mac', 'OSX', 'Firefox', '127.0.0.1', 1, '账号不存在', 5, '2022-07-29 14:44:48', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (61, '南宁网宿科技OA', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 1, '账号不存在', 5, '2022-07-29 14:45:06', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (62, '南宁网宿科技OA', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 1, '账号不存在', 5, '2022-07-29 14:45:07', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (63, '南宁网宿科技OA', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 1, '账号不存在', 5, '2022-07-29 14:45:22', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (64, '赵忠林', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 1, '密码错误', 5, '2022-07-29 14:45:53', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (65, '市场部001', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-29 14:46:36', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (66, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-29 14:47:35', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (67, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 1, '密码错误', 1, '2022-07-29 15:07:19', '2022-07-29 15:07:19'); +INSERT INTO `sys_login_record` VALUES (68, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 1, '密码错误', 1, '2022-07-29 15:07:26', '2022-07-29 15:07:26'); +INSERT INTO `sys_login_record` VALUES (69, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 1, '2022-07-29 15:07:34', '2022-07-29 15:07:34'); +INSERT INTO `sys_login_record` VALUES (70, '赵忠林', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 1, '密码错误', 5, '2022-07-29 15:38:38', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (71, '赵忠林', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 1, '密码错误', 5, '2022-07-29 15:38:44', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (72, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-29 15:39:02', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (73, '赵忠林', 'Mac', 'OSX', 'Firefox', '127.0.0.1', 0, NULL, 5, '2022-07-29 15:53:44', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (74, '市场部001', 'Mac', 'OSX', 'Firefox', '127.0.0.1', 0, NULL, 5, '2022-07-29 15:55:07', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (75, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-29 16:10:03', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (76, '赵忠林', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-29 19:38:54', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (77, '赵忠林', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-29 19:40:11', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (78, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 1, '密码错误', 3, '2022-07-29 19:41:52', '2022-07-29 19:41:52'); +INSERT INTO `sys_login_record` VALUES (79, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 3, '2022-07-29 19:41:58', '2022-07-29 19:41:58'); +INSERT INTO `sys_login_record` VALUES (80, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 1, '2022-07-29 19:42:49', '2022-07-29 19:42:49'); +INSERT INTO `sys_login_record` VALUES (81, '邓莉莉', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-29 19:45:15', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (82, '赵忠林', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-29 19:49:45', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (83, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-29 19:55:06', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (84, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-29 19:56:41', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (85, '赵忠林', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-29 19:57:02', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (86, '赵忠林', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-29 19:58:03', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (87, '赵忠林', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-29 20:15:31', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (88, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 1, '密码错误', 5, '2022-07-29 22:10:47', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (89, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-29 22:10:54', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (90, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-29 22:10:54', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (91, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-29 22:14:05', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (92, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-29 22:15:33', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (93, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-29 22:20:35', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (94, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-29 22:21:33', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (95, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-29 22:22:23', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (96, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-29 22:33:09', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (97, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-29 22:35:55', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (98, 'admin', 'Mac', 'OSX', 'Firefox', '127.0.0.1', 0, NULL, 5, '2022-07-29 22:37:46', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (99, 'admin', 'Mac', 'OSX', 'Firefox', '127.0.0.1', 0, NULL, 5, '2022-07-29 22:39:58', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (100, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-29 22:40:49', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (101, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-29 22:44:16', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (102, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-29 22:46:49', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (103, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-29 22:48:59', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (104, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-29 22:50:40', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (105, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-29 22:52:01', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (106, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-29 22:52:53', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (107, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-29 23:05:55', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (108, '赵忠林', 'Mac', 'OSX', 'Firefox', '127.0.0.1', 1, '密码错误', 5, '2022-07-29 23:07:14', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (109, '赵忠林', 'Mac', 'OSX', 'Firefox', '127.0.0.1', 0, NULL, 5, '2022-07-29 23:07:29', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (110, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-29 23:13:21', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (111, '赵忠林', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 1, '密码错误', 5, '2022-07-30 00:17:01', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (112, '赵忠林', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-30 00:17:09', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (113, '普通用户001', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-30 00:26:14', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (114, '普通用户001', 'Mac', 'OSX', 'Chrome', '0:0:0:0:0:0:0:1', 0, NULL, 5, '2022-07-30 02:09:50', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (115, '赵忠林', 'Mac', 'OSX', 'Chrome', '0:0:0:0:0:0:0:1', 0, NULL, 5, '2022-07-30 02:10:13', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (116, '赵忠林', 'Android', 'Android', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-30 04:11:24', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (117, '赵忠林', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-30 09:41:26', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (118, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 1, '密码错误', 5, '2022-07-30 09:58:56', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (119, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 1, '密码错误', 5, '2022-07-30 09:59:10', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (120, '赵忠林', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 1, '密码错误', 5, '2022-07-30 09:59:50', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (121, '邓莉莉', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-30 10:00:31', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (122, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-30 10:00:59', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (123, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-30 12:10:12', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (124, '赵忠林', 'Windows', 'Windows 10 or Windows Server 2016', 'Chrome', '0:0:0:0:0:0:0:1', 0, NULL, 5, '2022-07-30 14:16:39', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (125, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-31 12:31:45', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (126, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-31 16:37:22', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (127, '赵忠林', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-31 16:38:02', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (128, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-31 16:40:23', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (129, '普通用户001', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 1, '密码错误', 5, '2022-07-31 16:40:54', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (130, '普通用户001', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 1, '密码错误', 5, '2022-07-31 16:41:02', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (131, '普通用户001', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-31 16:41:16', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (132, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-31 17:07:11', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (133, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-31 18:40:23', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (134, '普通用户001', NULL, NULL, NULL, NULL, 1, '密码错误', 5, '2022-07-31 20:35:16', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (135, '普通用户001', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-31 20:35:29', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (136, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-31 20:35:39', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (137, '赵忠林', 'Mac', 'OSX', 'Chrome', '0:0:0:0:0:0:0:1', 0, NULL, 5, '2022-07-31 21:12:12', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (138, '赵忠林', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-31 21:16:59', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (139, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 1, '密码错误', 5, '2022-07-31 21:17:15', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (140, 'admin', 'Mac', 'OSX', 'Chrome', '0:0:0:0:0:0:0:1', 1, '密码错误', 5, '2022-07-31 21:17:38', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (141, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 1, '密码错误', 5, '2022-07-31 21:17:43', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (142, 'admin', 'Mac', 'OSX', 'Chrome', '0:0:0:0:0:0:0:1', 1, '密码错误', 5, '2022-07-31 21:17:48', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (143, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-07-31 21:17:52', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (144, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-01 00:48:40', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (145, '普通用户001', 'Mac', 'OSX', 'Chrome', '0:0:0:0:0:0:0:1', 0, NULL, 5, '2022-08-01 00:51:38', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (146, 'admin', 'Mac', 'OSX', 'Chrome', '0:0:0:0:0:0:0:1', 0, NULL, 5, '2022-08-01 00:56:37', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (147, '赵忠林', NULL, NULL, NULL, NULL, 1, '密码错误', 5, '2022-08-01 10:05:56', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (148, '赵忠林', 'Mac', 'OSX', 'Firefox', '127.0.0.1', 0, NULL, 5, '2022-08-01 10:06:09', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (149, '翟灵', 'Windows', 'Windows 10 or Windows Server 2016', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-01 10:30:35', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (150, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-01 11:24:19', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (151, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-02 11:30:03', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (152, '翟灵', 'Windows', 'Windows 10 or Windows Server 2016', 'Chrome', '0:0:0:0:0:0:0:1', 0, NULL, 5, '2022-08-02 11:40:55', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (153, 'ylx_admin', NULL, NULL, NULL, NULL, 1, '账号不存在', 5, '2022-08-02 16:52:48', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (154, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-02 16:52:54', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (155, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-02 18:13:10', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (156, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-02 18:17:40', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (157, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-02 19:30:43', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (158, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-02 22:57:50', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (159, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-02 23:05:44', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (160, '普通用户001', NULL, NULL, NULL, NULL, 1, '密码错误', 5, '2022-08-02 23:14:43', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (161, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-02 23:14:56', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (162, '普通用户001', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-02 23:15:08', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (163, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-02 23:19:10', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (164, '普通用户001', 'Mac', 'OSX', 'Chrome', '0:0:0:0:0:0:0:1', 0, NULL, 5, '2022-08-02 23:19:39', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (165, '邓莉莉', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-02 23:20:42', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (166, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-03 08:44:41', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (167, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-03 10:54:05', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (168, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-03 10:58:44', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (169, 'admin', NULL, NULL, NULL, NULL, 1, '账号不存在', 4, '2022-08-03 12:34:58', '2022-08-03 12:34:58'); +INSERT INTO `sys_login_record` VALUES (170, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 1, '账号不存在', 4, '2022-08-03 12:40:24', '2022-08-03 12:40:24'); +INSERT INTO `sys_login_record` VALUES (171, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-03 12:40:36', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (173, '原料星', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 4, '2022-08-03 12:42:34', '2022-08-03 12:42:34'); +INSERT INTO `sys_login_record` VALUES (174, '翟灵', 'Windows', 'Windows 10 or Windows Server 2016', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-03 13:22:02', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (175, '翟灵', 'Windows', 'Windows 10 or Windows Server 2016', 'Chrome', '0:0:0:0:0:0:0:1', 0, NULL, 5, '2022-08-03 13:23:24', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (176, '邓莉莉', 'Mac', 'OSX', 'Chrome', '0:0:0:0:0:0:0:1', 0, NULL, 5, '2022-08-03 13:27:44', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (177, '原料星', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 4, '2022-08-03 13:30:11', '2022-08-03 13:30:11'); +INSERT INTO `sys_login_record` VALUES (178, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-03 13:30:31', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (179, '赵忠林', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 1, '密码错误', 5, '2022-08-03 13:31:19', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (180, '赵忠林', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 1, '密码错误', 5, '2022-08-03 13:31:29', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (181, '赵忠林', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 1, '密码错误', 5, '2022-08-03 13:31:37', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (182, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-03 13:31:42', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (183, '赵忠林', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-03 13:32:33', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (184, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-03 13:47:43', '2022-08-03 13:56:17'); +INSERT INTO `sys_login_record` VALUES (185, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-03 13:57:05', '2022-08-03 13:57:05'); +INSERT INTO `sys_login_record` VALUES (186, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-03 14:08:00', '2022-08-03 14:08:00'); +INSERT INTO `sys_login_record` VALUES (187, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-03 14:27:50', '2022-08-03 14:27:50'); +INSERT INTO `sys_login_record` VALUES (188, '邓莉莉', NULL, NULL, NULL, NULL, 1, '账号不存在', 2, '2022-08-03 14:31:14', '2022-08-03 14:31:14'); +INSERT INTO `sys_login_record` VALUES (189, '邓莉莉', 'Mac', 'OSX', 'Chrome', NULL, 1, '账号不存在', 2, '2022-08-03 14:31:25', '2022-08-03 14:31:25'); +INSERT INTO `sys_login_record` VALUES (190, '邓莉莉', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-03 14:31:48', '2022-08-03 14:31:48'); +INSERT INTO `sys_login_record` VALUES (191, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-03 18:07:26', '2022-08-03 18:07:26'); +INSERT INTO `sys_login_record` VALUES (192, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-03 18:07:53', '2022-08-03 18:07:53'); +INSERT INTO `sys_login_record` VALUES (193, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-03 18:16:36', '2022-08-03 18:16:36'); +INSERT INTO `sys_login_record` VALUES (194, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 10, '2022-08-03 20:28:08', '2022-08-03 20:28:08'); +INSERT INTO `sys_login_record` VALUES (195, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 1, '密码错误', 5, '2022-08-03 20:29:29', '2022-08-03 20:29:29'); +INSERT INTO `sys_login_record` VALUES (196, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 1, '密码错误', 5, '2022-08-03 20:29:38', '2022-08-03 20:29:38'); +INSERT INTO `sys_login_record` VALUES (197, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 1, '密码错误', 5, '2022-08-03 20:29:47', '2022-08-03 20:29:47'); +INSERT INTO `sys_login_record` VALUES (198, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 1, '密码错误', 5, '2022-08-03 20:30:07', '2022-08-03 20:30:07'); +INSERT INTO `sys_login_record` VALUES (199, '赵忠林', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 1, '密码错误', 5, '2022-08-03 20:30:39', '2022-08-03 20:30:39'); +INSERT INTO `sys_login_record` VALUES (200, '邓莉莉', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-03 20:30:53', '2022-08-03 20:30:53'); +INSERT INTO `sys_login_record` VALUES (201, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-03 20:31:15', '2022-08-03 20:31:15'); +INSERT INTO `sys_login_record` VALUES (202, '邓莉莉', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-03 21:04:29', '2022-08-03 21:04:29'); +INSERT INTO `sys_login_record` VALUES (203, '邓莉莉', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-03 21:06:03', '2022-08-03 21:06:03'); +INSERT INTO `sys_login_record` VALUES (204, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-03 21:44:11', '2022-08-03 21:44:11'); +INSERT INTO `sys_login_record` VALUES (205, 'gzhl', 'Mac', 'OSX', 'Chrome', '0:0:0:0:0:0:0:1', 0, NULL, 5, '2022-08-04 12:52:51', '2022-08-04 12:52:51'); +INSERT INTO `sys_login_record` VALUES (206, '翟灵', 'Windows', 'Windows 10 or Windows Server 2016', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-04 13:12:32', '2022-08-04 13:12:32'); +INSERT INTO `sys_login_record` VALUES (207, '赵忠林', NULL, NULL, NULL, NULL, 1, '密码错误', 5, '2022-08-04 17:13:10', '2022-08-04 17:13:10'); +INSERT INTO `sys_login_record` VALUES (208, '赵忠林', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-04 17:13:25', '2022-08-04 17:13:25'); +INSERT INTO `sys_login_record` VALUES (209, 'gzhl', 'Mac', 'OSX', 'Chrome', '0:0:0:0:0:0:0:1', 0, NULL, 5, '2022-08-04 17:20:36', '2022-08-04 17:20:36'); +INSERT INTO `sys_login_record` VALUES (210, 'gzhl', 'Windows', 'Windows 10 or Windows Server 2016', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-04 17:36:34', '2022-08-04 17:36:34'); +INSERT INTO `sys_login_record` VALUES (211, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 1, '密码错误', 5, '2022-08-04 19:06:48', '2022-08-04 19:06:48'); +INSERT INTO `sys_login_record` VALUES (212, 'admin', 'Mac', 'OSX', 'Chrome', '0:0:0:0:0:0:0:1', 1, '密码错误', 5, '2022-08-04 19:06:57', '2022-08-04 19:06:57'); +INSERT INTO `sys_login_record` VALUES (213, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-04 19:07:50', '2022-08-04 19:07:50'); +INSERT INTO `sys_login_record` VALUES (214, 'admin', 'Mac', 'OSX', 'Chrome', '0:0:0:0:0:0:0:1', 0, NULL, 5, '2022-08-04 19:53:18', '2022-08-04 19:53:18'); +INSERT INTO `sys_login_record` VALUES (215, 'admin', 'Mac', 'OSX', 'Chrome', NULL, 1, '账号不存在', 2, '2022-08-04 19:54:12', '2022-08-04 19:54:12'); +INSERT INTO `sys_login_record` VALUES (216, 'admin', NULL, NULL, NULL, NULL, 1, '账号不存在', 2, '2022-08-04 19:55:11', '2022-08-04 19:55:11'); +INSERT INTO `sys_login_record` VALUES (217, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-04 19:55:39', '2022-08-04 19:55:39'); +INSERT INTO `sys_login_record` VALUES (218, 'admin', 'Mac', 'OSX', 'Chrome', '0:0:0:0:0:0:0:1', 1, '账号不存在', 2, '2022-08-04 20:01:56', '2022-08-04 20:01:56'); +INSERT INTO `sys_login_record` VALUES (219, 'admin', 'Mac', 'OSX', 'Chrome', '0:0:0:0:0:0:0:1', 1, '密码错误', 5, '2022-08-04 20:03:10', '2022-08-04 20:03:10'); +INSERT INTO `sys_login_record` VALUES (220, 'admin', 'Mac', 'OSX', 'Chrome', '0:0:0:0:0:0:0:1', 0, NULL, 5, '2022-08-04 20:04:20', '2022-08-04 20:04:20'); +INSERT INTO `sys_login_record` VALUES (221, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-04 20:06:02', '2022-08-04 20:06:02'); +INSERT INTO `sys_login_record` VALUES (222, 'admin', NULL, NULL, NULL, NULL, 1, '密码错误', 2, '2022-08-04 20:41:31', '2022-08-04 20:41:31'); +INSERT INTO `sys_login_record` VALUES (223, 'admin', 'Mac', 'OSX', 'Chrome', '0:0:0:0:0:0:0:1', 0, NULL, 2, '2022-08-04 20:41:36', '2022-08-04 20:41:36'); +INSERT INTO `sys_login_record` VALUES (224, 'admin', 'Mac', 'OSX', 'Chrome', '0:0:0:0:0:0:0:1', 1, '密码错误', 2, '2022-08-04 20:50:40', '2022-08-04 20:50:40'); +INSERT INTO `sys_login_record` VALUES (225, 'admin', 'Mac', 'OSX', 'Chrome', '0:0:0:0:0:0:0:1', 0, NULL, 2, '2022-08-04 20:50:45', '2022-08-04 20:50:45'); +INSERT INTO `sys_login_record` VALUES (226, 'admin', 'Mac', 'OSX', 'Chrome', '0:0:0:0:0:0:0:1', 0, NULL, 5, '2022-08-04 20:51:24', '2022-08-04 20:51:24'); +INSERT INTO `sys_login_record` VALUES (227, 'admin', 'Mac', 'OSX', 'Chrome', NULL, 0, NULL, 5, '2022-08-04 20:59:18', '2022-08-04 20:59:18'); +INSERT INTO `sys_login_record` VALUES (228, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-04 22:06:53', '2022-08-04 22:06:53'); +INSERT INTO `sys_login_record` VALUES (229, 'admin', 'Mac', 'OSX', 'Chrome', '0:0:0:0:0:0:0:1', 0, NULL, 5, '2022-08-04 22:09:19', '2022-08-04 22:09:19'); +INSERT INTO `sys_login_record` VALUES (230, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-04 22:10:07', '2022-08-04 22:10:07'); +INSERT INTO `sys_login_record` VALUES (231, '赵忠林', 'Windows', 'Windows 10 or Windows Server 2016', 'Chrome', '127.0.0.1', 1, '密码错误', 5, '2022-08-05 07:34:42', '2022-08-05 07:34:42'); +INSERT INTO `sys_login_record` VALUES (232, '赵忠林', 'Windows', 'Windows 10 or Windows Server 2016', 'Chrome', NULL, 1, '密码错误', 5, '2022-08-05 07:35:20', '2022-08-05 07:35:20'); +INSERT INTO `sys_login_record` VALUES (233, 'gzhl', 'Windows', 'Windows 10 or Windows Server 2016', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-05 07:35:33', '2022-08-05 07:35:33'); +INSERT INTO `sys_login_record` VALUES (234, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 1, '密码错误', 5, '2022-08-05 12:21:05', '2022-08-05 12:21:05'); +INSERT INTO `sys_login_record` VALUES (235, '赵忠林', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 1, '密码错误', 5, '2022-08-05 12:21:18', '2022-08-05 12:21:18'); +INSERT INTO `sys_login_record` VALUES (236, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 1, '密码错误', 5, '2022-08-05 12:21:30', '2022-08-05 12:21:30'); +INSERT INTO `sys_login_record` VALUES (237, '邓莉莉', 'Mac', 'OSX', 'Chrome', '0:0:0:0:0:0:0:1', 0, NULL, 5, '2022-08-05 12:21:39', '2022-08-05 12:21:39'); +INSERT INTO `sys_login_record` VALUES (238, '邓莉莉', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-05 13:07:08', '2022-08-05 13:07:08'); +INSERT INTO `sys_login_record` VALUES (239, '邓莉莉', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-05 13:07:42', '2022-08-05 13:07:42'); +INSERT INTO `sys_login_record` VALUES (240, '邓莉莉', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-05 13:14:01', '2022-08-05 13:14:01'); +INSERT INTO `sys_login_record` VALUES (241, '邓莉莉', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-05 13:14:18', '2022-08-05 13:14:18'); +INSERT INTO `sys_login_record` VALUES (242, '邓莉莉', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-05 13:14:55', '2022-08-05 13:14:55'); +INSERT INTO `sys_login_record` VALUES (243, '邓莉莉', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-05 13:15:19', '2022-08-05 13:15:19'); +INSERT INTO `sys_login_record` VALUES (244, '邓莉莉', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-05 13:15:39', '2022-08-05 13:15:39'); +INSERT INTO `sys_login_record` VALUES (245, '邓莉莉', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-05 13:15:49', '2022-08-05 13:15:49'); +INSERT INTO `sys_login_record` VALUES (246, '邓莉莉', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-05 13:21:03', '2022-08-05 13:21:03'); +INSERT INTO `sys_login_record` VALUES (247, '邓莉莉', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-05 13:21:04', '2022-08-05 13:21:04'); +INSERT INTO `sys_login_record` VALUES (248, '邓莉莉', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-05 13:23:08', '2022-08-05 13:23:08'); +INSERT INTO `sys_login_record` VALUES (249, '邓莉莉', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-05 13:24:21', '2022-08-05 13:24:21'); +INSERT INTO `sys_login_record` VALUES (250, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 1, '密码错误', 5, '2022-08-05 13:26:53', '2022-08-05 13:26:53'); +INSERT INTO `sys_login_record` VALUES (251, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 1, '密码错误', 5, '2022-08-05 13:27:05', '2022-08-05 13:27:05'); +INSERT INTO `sys_login_record` VALUES (252, '邓莉莉', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-05 13:27:12', '2022-08-05 13:27:12'); +INSERT INTO `sys_login_record` VALUES (253, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-05 13:27:44', '2022-08-05 13:27:44'); +INSERT INTO `sys_login_record` VALUES (254, '原料星', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 1, '账号不存在', 5, '2022-08-05 15:42:30', '2022-08-05 15:42:30'); +INSERT INTO `sys_login_record` VALUES (255, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 1, '密码错误', 5, '2022-08-05 15:48:25', '2022-08-05 15:48:25'); +INSERT INTO `sys_login_record` VALUES (256, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 1, '密码错误', 5, '2022-08-05 15:50:52', '2022-08-05 15:50:52'); +INSERT INTO `sys_login_record` VALUES (260, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 1, '密码错误', 5, '2022-08-05 15:57:37', '2022-08-05 15:57:37'); +INSERT INTO `sys_login_record` VALUES (262, 'admin', NULL, NULL, NULL, NULL, 1, '账号不存在', 6, '2022-08-05 15:58:05', '2022-08-05 15:58:05'); +INSERT INTO `sys_login_record` VALUES (263, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 1, '密码错误', 1, '2022-08-05 15:59:42', '2022-08-05 15:59:42'); +INSERT INTO `sys_login_record` VALUES (264, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 1, '2022-08-05 15:59:57', '2022-08-05 15:59:57'); +INSERT INTO `sys_login_record` VALUES (265, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 2, '2022-08-05 16:00:33', '2022-08-05 16:00:33'); +INSERT INTO `sys_login_record` VALUES (266, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 1, '密码错误', 5, '2022-08-05 16:01:07', '2022-08-05 16:01:07'); +INSERT INTO `sys_login_record` VALUES (267, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-05 16:01:20', '2022-08-05 16:01:20'); +INSERT INTO `sys_login_record` VALUES (268, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 1, '账号不存在', 6, '2022-08-05 18:17:50', '2022-08-05 18:17:50'); +INSERT INTO `sys_login_record` VALUES (269, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 1, '账号不存在', 6, '2022-08-05 18:18:30', '2022-08-05 18:18:30'); +INSERT INTO `sys_login_record` VALUES (270, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 1, '密码错误', 11, '2022-08-05 18:19:20', '2022-08-05 18:19:20'); +INSERT INTO `sys_login_record` VALUES (271, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 1, '密码错误', 11, '2022-08-05 18:19:43', '2022-08-05 18:19:43'); +INSERT INTO `sys_login_record` VALUES (272, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 1, '密码错误', 11, '2022-08-05 18:19:47', '2022-08-05 18:19:47'); +INSERT INTO `sys_login_record` VALUES (273, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 11, '2022-08-05 18:20:07', '2022-08-05 18:20:07'); +INSERT INTO `sys_login_record` VALUES (274, '邓莉莉', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-05 18:22:13', '2022-08-05 18:22:13'); +INSERT INTO `sys_login_record` VALUES (275, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-05 18:23:51', '2022-08-05 18:23:51'); +INSERT INTO `sys_login_record` VALUES (276, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 11, '2022-08-05 18:24:09', '2022-08-05 18:24:09'); +INSERT INTO `sys_login_record` VALUES (277, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 11, '2022-08-05 18:28:24', '2022-08-05 18:28:24'); +INSERT INTO `sys_login_record` VALUES (278, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 11, '2022-08-05 18:53:17', '2022-08-05 18:53:17'); +INSERT INTO `sys_login_record` VALUES (279, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-05 18:56:14', '2022-08-05 18:56:14'); +INSERT INTO `sys_login_record` VALUES (280, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 11, '2022-08-05 18:56:25', '2022-08-05 18:56:25'); +INSERT INTO `sys_login_record` VALUES (281, 'admin', NULL, NULL, NULL, NULL, 1, '密码错误', 5, '2022-08-05 23:01:33', '2022-08-05 23:01:33'); +INSERT INTO `sys_login_record` VALUES (282, 'admin', 'Mac', 'OSX', 'Chrome', NULL, 1, '密码错误', 5, '2022-08-05 23:02:05', '2022-08-05 23:02:05'); +INSERT INTO `sys_login_record` VALUES (283, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-05 23:02:13', '2022-08-05 23:02:13'); +INSERT INTO `sys_login_record` VALUES (284, '邓莉莉', 'Mac', 'OSX', 'Chrome', '0:0:0:0:0:0:0:1', 3, NULL, 5, '2022-08-06 18:21:57', '2022-08-06 18:21:57'); +INSERT INTO `sys_login_record` VALUES (285, '邓莉莉', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-06 20:17:29', '2022-08-06 20:17:29'); +INSERT INTO `sys_login_record` VALUES (286, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-06 20:19:41', '2022-08-06 20:19:41'); +INSERT INTO `sys_login_record` VALUES (287, 'gzhl', 'Windows', 'Windows 10 or Windows Server 2016', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-07 14:17:39', '2022-08-07 14:17:39'); +INSERT INTO `sys_login_record` VALUES (288, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-08 00:25:35', '2022-08-08 00:25:35'); +INSERT INTO `sys_login_record` VALUES (289, '邓莉莉', 'Mac', 'OSX', 'Chrome', '0:0:0:0:0:0:0:1', 0, NULL, 5, '2022-08-08 02:39:19', '2022-08-08 02:39:19'); +INSERT INTO `sys_login_record` VALUES (290, '邓莉莉', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-08 12:33:30', '2022-08-08 12:33:30'); +INSERT INTO `sys_login_record` VALUES (291, '邓莉莉', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-08 21:58:45', '2022-08-08 21:58:45'); +INSERT INTO `sys_login_record` VALUES (292, '邓莉莉', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-08 21:59:14', '2022-08-08 21:59:14'); +INSERT INTO `sys_login_record` VALUES (293, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-08 22:18:51', '2022-08-08 22:18:51'); +INSERT INTO `sys_login_record` VALUES (294, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-08 22:19:23', '2022-08-08 22:19:23'); +INSERT INTO `sys_login_record` VALUES (295, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 11, '2022-08-08 22:44:31', '2022-08-08 22:44:31'); +INSERT INTO `sys_login_record` VALUES (296, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-08 23:12:47', '2022-08-08 23:12:47'); +INSERT INTO `sys_login_record` VALUES (297, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 11, '2022-08-08 23:12:59', '2022-08-08 23:12:59'); +INSERT INTO `sys_login_record` VALUES (298, 'admin', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-08 23:16:04', '2022-08-08 23:16:04'); +INSERT INTO `sys_login_record` VALUES (299, '邓莉莉', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-09 06:57:53', '2022-08-09 06:57:53'); +INSERT INTO `sys_login_record` VALUES (300, '邓莉莉', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-09 10:31:34', '2022-08-09 10:31:34'); +INSERT INTO `sys_login_record` VALUES (301, '翟灵', 'Windows', 'Windows 10 or Windows Server 2016', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-09 12:46:57', '2022-08-09 12:46:57'); +INSERT INTO `sys_login_record` VALUES (302, '邓莉莉', 'Mac', 'OSX', 'Chrome', '127.0.0.1', 0, NULL, 5, '2022-08-09 17:11:28', '2022-08-09 17:11:28'); +INSERT INTO `sys_login_record` VALUES (303, 'admin', 'iPhone', 'iPhone', 'Safari', '127.0.0.1', 0, NULL, 5, '2022-08-09 20:18:55', '2022-08-09 20:18:55'); +COMMIT; + +-- ---------------------------- +-- Table structure for sys_menu +-- ---------------------------- +DROP TABLE IF EXISTS `sys_menu`; +CREATE TABLE `sys_menu` ( + `menu_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '菜单id', + `parent_id` int(11) NOT NULL DEFAULT '0' COMMENT '上级id, 0是顶级', + `title` varchar(200) NOT NULL COMMENT '菜单名称', + `path` varchar(200) DEFAULT NULL COMMENT '菜单路由地址', + `component` varchar(200) DEFAULT NULL COMMENT '菜单组件地址, 目录可为空', + `menu_type` int(11) DEFAULT '0' COMMENT '类型, 0菜单, 1按钮', + `sort_number` int(11) NOT NULL DEFAULT '1' COMMENT '排序号', + `authority` varchar(200) DEFAULT NULL COMMENT '权限标识', + `target` varchar(200) DEFAULT '_self' COMMENT '打开位置', + `icon` varchar(200) DEFAULT NULL COMMENT '菜单图标', + `color` varchar(200) DEFAULT NULL COMMENT '图标颜色', + `hide` int(11) NOT NULL DEFAULT '0' COMMENT '是否隐藏, 0否, 1是(仅注册路由不显示在左侧菜单)', + `active` varchar(200) DEFAULT NULL COMMENT '菜单侧栏选中的path', + `meta` varchar(800) DEFAULT NULL COMMENT '其它路由元信息', + `deleted` int(1) NOT NULL DEFAULT '0' COMMENT '是否删除, 0否, 1是', + `tenant_id` int(11) NOT NULL DEFAULT '1' COMMENT '租户id', + `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', + PRIMARY KEY (`menu_id`) USING BTREE, + KEY `tenant_id` (`tenant_id`) USING BTREE, + CONSTRAINT `sys_menu_ibfk_1` FOREIGN KEY (`tenant_id`) REFERENCES `sys_tenant` (`tenant_id`) ON DELETE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=361 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='菜单'; + +-- ---------------------------- +-- Records of sys_menu +-- ---------------------------- +BEGIN; +INSERT INTO `sys_menu` VALUES (1, 0, '系统管理', '/system', NULL, 0, 1, NULL, '_self', 'el-icon-setting', NULL, 0, NULL, '{\"badge\": \"New\", \"badgeColor\": \"warning\"}', 0, 1, '2020-02-26 12:51:23', '2022-03-11 16:46:28'); +INSERT INTO `sys_menu` VALUES (2, 1, '用户管理', '/system/user', '/system/user', 0, 1, NULL, '_self', 'el-icon-_user-group', NULL, 0, NULL, NULL, 0, 1, '2020-02-26 12:51:55', '2021-05-21 17:56:28'); +INSERT INTO `sys_menu` VALUES (3, 2, '查询用户', NULL, NULL, 1, 1, 'sys:user:list', '_self', NULL, NULL, 0, NULL, NULL, 0, 1, '2020-02-26 12:52:06', '2020-09-16 11:05:35'); +INSERT INTO `sys_menu` VALUES (4, 2, '添加用户', NULL, NULL, 1, 2, 'sys:user:save', '_self', NULL, NULL, 0, NULL, NULL, 0, 1, '2020-02-26 12:52:26', '2020-03-21 18:45:29'); +INSERT INTO `sys_menu` VALUES (5, 2, '修改用户', NULL, NULL, 1, 3, 'sys:user:update', '_self', NULL, NULL, 0, NULL, NULL, 0, 1, '2020-02-26 12:52:50', '2020-03-21 18:45:30'); +INSERT INTO `sys_menu` VALUES (6, 2, '删除用户', NULL, NULL, 1, 4, 'sys:user:remove', '_self', NULL, NULL, 0, NULL, NULL, 0, 1, '2020-02-26 12:53:13', '2020-03-21 18:45:32'); +INSERT INTO `sys_menu` VALUES (7, 1, '角色管理', '/system/role', '/system/role', 0, 2, NULL, '_self', 'el-icon-postcard', NULL, 0, NULL, NULL, 0, 1, '2020-03-13 13:29:08', '2021-05-21 17:56:34'); +INSERT INTO `sys_menu` VALUES (8, 7, '查询角色', NULL, NULL, 1, 1, 'sys:role:list', '_self', NULL, NULL, 0, NULL, NULL, 0, 1, '2020-03-13 13:30:41', '2020-03-21 18:45:34'); +INSERT INTO `sys_menu` VALUES (9, 7, '添加角色', NULL, NULL, 1, 2, 'sys:role:save', '_self', NULL, NULL, 0, NULL, NULL, 0, 1, '2020-03-15 13:02:07', '2020-03-21 18:45:35'); +INSERT INTO `sys_menu` VALUES (10, 7, '修改角色', NULL, NULL, 1, 3, 'sys:role:update', '_self', NULL, NULL, 0, NULL, NULL, 0, 1, '2020-03-15 13:02:49', '2020-03-21 18:45:36'); +INSERT INTO `sys_menu` VALUES (11, 7, '删除角色', NULL, NULL, 1, 4, 'sys:role:remove', '_self', NULL, NULL, 0, NULL, NULL, 0, 1, '2020-03-20 17:58:51', '2020-03-21 18:45:38'); +INSERT INTO `sys_menu` VALUES (12, 1, '菜单管理', '/system/menu', '/system/menu', 0, 3, NULL, '_self', 'el-icon-s-operation', NULL, 0, NULL, NULL, 0, 1, '2020-03-21 01:07:13', '2021-05-21 17:56:39'); +INSERT INTO `sys_menu` VALUES (13, 12, '查询菜单', NULL, NULL, 1, 1, 'sys:menu:list', '_self', NULL, NULL, 0, NULL, NULL, 0, 1, '2020-03-21 16:43:30', '2020-03-21 18:45:40'); +INSERT INTO `sys_menu` VALUES (14, 12, '添加菜单', NULL, NULL, 1, 2, 'sys:menu:save', '_self', NULL, NULL, 0, NULL, NULL, 0, 1, '2020-03-21 16:43:54', '2020-03-21 18:45:41'); +INSERT INTO `sys_menu` VALUES (15, 12, '修改菜单', NULL, NULL, 1, 3, 'sys:menu:update', '_self', NULL, NULL, 0, NULL, NULL, 0, 1, '2020-03-21 18:24:17', '2020-03-21 18:45:43'); +INSERT INTO `sys_menu` VALUES (16, 12, '删除菜单', NULL, NULL, 1, 4, 'sys:menu:remove', '_self', NULL, NULL, 0, NULL, NULL, 0, 1, '2020-03-21 18:24:18', '2020-03-21 18:45:44'); +INSERT INTO `sys_menu` VALUES (17, 1, '机构管理', '/system/organization', '/system/organization', 0, 4, NULL, '_self', 'el-icon-office-building', NULL, 0, NULL, NULL, 0, 1, '2020-03-21 18:24:20', '2021-11-05 16:13:26'); +INSERT INTO `sys_menu` VALUES (18, 17, '查询机构', NULL, NULL, 1, 1, 'sys:org:list', '_self', NULL, NULL, 0, NULL, NULL, 0, 1, '2020-03-21 18:24:21', '2020-03-21 18:44:36'); +INSERT INTO `sys_menu` VALUES (19, 17, '添加机构', NULL, NULL, 1, 2, 'sys:org:save', '_self', NULL, NULL, 0, NULL, NULL, 0, 1, '2020-03-21 18:24:22', '2020-03-21 18:45:51'); +INSERT INTO `sys_menu` VALUES (20, 17, '修改机构', NULL, NULL, 1, 3, 'sys:org:update', '_self', NULL, NULL, 0, NULL, NULL, 0, 1, '2020-03-21 18:24:24', '2020-03-21 18:45:52'); +INSERT INTO `sys_menu` VALUES (21, 17, '删除机构', NULL, NULL, 1, 4, 'sys:org:remove', '_self', NULL, NULL, 0, NULL, NULL, 0, 1, '2020-03-21 18:24:25', '2020-03-21 18:45:54'); +INSERT INTO `sys_menu` VALUES (22, 1, '字典管理', '/system/dictionary', '/system/dictionary', 0, 5, NULL, '_self', 'el-icon-notebook-2', NULL, 0, NULL, NULL, 0, 1, '2020-03-21 18:24:26', '2021-11-05 16:13:30'); +INSERT INTO `sys_menu` VALUES (23, 22, '查询字典', NULL, NULL, 1, 1, 'sys:dict:list', '_self', NULL, NULL, 0, NULL, NULL, 0, 1, '2020-03-21 18:24:27', '2020-03-21 18:44:42'); +INSERT INTO `sys_menu` VALUES (24, 22, '添加字典', NULL, NULL, 1, 2, 'sys:dict:save', '_self', NULL, NULL, 0, NULL, NULL, 0, 1, '2020-03-21 18:24:28', '2020-03-21 18:45:59'); +INSERT INTO `sys_menu` VALUES (25, 22, '修改字典', NULL, NULL, 1, 3, 'sys:dict:update', '_self', NULL, NULL, 0, NULL, NULL, 0, 1, '2020-03-21 18:24:29', '2020-03-21 18:46:01'); +INSERT INTO `sys_menu` VALUES (26, 22, '删除字典', NULL, NULL, 1, 4, 'sys:dict:remove', '_self', NULL, NULL, 0, NULL, NULL, 0, 1, '2020-03-21 18:24:31', '2020-03-21 18:46:02'); +INSERT INTO `sys_menu` VALUES (27, 1, '登录日志', '/system/login-record', '/system/login-record', 0, 7, 'sys:login-record:view', '_self', 'el-icon-date', NULL, 0, NULL, NULL, 0, 1, '2020-03-21 18:24:33', '2021-11-05 17:28:53'); +INSERT INTO `sys_menu` VALUES (28, 1, '操作日志', '/system/operation-record', '/system/operation-record', 0, 8, 'sys:operation-record:view', '_self', 'el-icon-_retrieve', NULL, 0, NULL, NULL, 0, 1, '2020-03-21 18:24:34', '2021-11-05 17:28:56'); +INSERT INTO `sys_menu` VALUES (29, 1, '文件管理', '/system/file', '/system/file', 0, 6, NULL, '_self', 'el-icon-folder', NULL, 1, NULL, NULL, 0, 1, '2020-09-17 23:19:43', '2022-03-11 22:13:53'); +INSERT INTO `sys_menu` VALUES (30, 29, '查看记录', NULL, NULL, 1, 1, 'sys:file:list', '_self', NULL, NULL, 0, NULL, NULL, 0, 1, '2020-09-17 23:20:29', '2022-03-11 15:33:31'); +INSERT INTO `sys_menu` VALUES (31, 29, '上传文件', NULL, NULL, 1, 2, 'sys:file:upload', '_self', NULL, NULL, 0, NULL, NULL, 0, 1, '2020-09-17 23:21:04', '2021-11-05 17:55:16'); +INSERT INTO `sys_menu` VALUES (32, 29, '删除文件', NULL, NULL, 1, 3, 'sys:file:remove', '_self', NULL, NULL, 0, NULL, NULL, 0, 1, '2020-09-17 23:21:53', '2021-11-05 17:55:17'); +INSERT INTO `sys_menu` VALUES (33, 1, '修改个人密码', NULL, NULL, 1, 10, 'sys:auth:password', '_self', NULL, NULL, 0, NULL, NULL, 0, 1, '2020-09-17 23:22:45', '2021-11-05 16:44:05'); +INSERT INTO `sys_menu` VALUES (34, 1, '修改个人资料', NULL, NULL, 1, 11, 'sys:auth:user', '_self', NULL, NULL, 0, NULL, NULL, 0, 1, '2020-09-17 23:23:24', '2021-11-05 16:44:08'); +INSERT INTO `sys_menu` VALUES (35, 1, '用户信息', '/system/user-info', '/system/user-info', 0, 9, NULL, '_self', 'el-icon-user', NULL, 1, NULL, '{\"active\": \"/system/user\"}', 0, 1, '2021-05-21 11:07:54', '2022-03-11 16:49:49'); +INSERT INTO `sys_menu` VALUES (36, 0, 'Dashboard', '/dashboard', NULL, 0, 0, NULL, '_self', 'el-icon-house', NULL, 0, NULL, NULL, 0, 1, '2021-02-02 20:00:34', '2021-11-05 16:37:00'); +INSERT INTO `sys_menu` VALUES (37, 36, '工作台', '/dashboard/workplace', '/dashboard/workplace', 0, 1, NULL, '_self', 'el-icon-monitor', NULL, 0, NULL, NULL, 0, 1, '2021-02-02 20:00:37', '2021-11-05 16:36:59'); +INSERT INTO `sys_menu` VALUES (38, 36, '分析页', '/dashboard/analysis', '/dashboard/analysis', 0, 2, NULL, '_self', 'el-icon-data-analysis', NULL, 0, NULL, '{\"badge\": 1}', 0, 1, '2021-02-02 20:00:40', '2022-03-11 16:45:44'); +INSERT INTO `sys_menu` VALUES (39, 36, '监控页', '/dashboard/monitor', '/dashboard/monitor', 0, 3, NULL, '_self', 'el-icon-odometer', NULL, 0, NULL, NULL, 0, 1, '2021-02-02 20:03:12', '2021-11-05 16:36:56'); +INSERT INTO `sys_menu` VALUES (40, 0, '表单页面', '/form', NULL, 0, 2, NULL, '_self', 'el-icon-tickets', NULL, 0, NULL, NULL, 0, 1, '2021-02-02 20:03:28', '2021-11-05 16:36:54'); +INSERT INTO `sys_menu` VALUES (41, 40, '基础表单', '/form/basic', '/form/basic', 0, 1, NULL, '_self', 'el-icon-_feedback', NULL, 0, NULL, NULL, 0, 1, '2021-02-02 20:03:51', '2021-11-05 16:36:53'); +INSERT INTO `sys_menu` VALUES (42, 40, '复杂表单', '/form/advanced', '/form/advanced', 0, 2, NULL, '_self', 'el-icon-_visa', NULL, 0, NULL, NULL, 0, 1, '2021-02-02 20:03:56', '2021-11-05 16:36:52'); +INSERT INTO `sys_menu` VALUES (43, 40, '分步表单', '/form/step', '/form/step', 0, 3, NULL, '_self', 'el-icon-c-scale-to-original', NULL, 0, NULL, NULL, 0, 1, '2021-02-02 20:04:06', '2021-11-05 16:36:50'); +INSERT INTO `sys_menu` VALUES (44, 0, '列表页面', '/list', NULL, 0, 3, NULL, '_self', 'el-icon-_table', NULL, 0, NULL, NULL, 0, 1, '2021-02-02 20:05:07', '2021-11-05 16:36:49'); +INSERT INTO `sys_menu` VALUES (45, 44, '基础列表', '/list/basic', '/list/basic', 0, 1, NULL, '_self', 'el-icon-document', NULL, 0, NULL, NULL, 0, 1, '2021-02-02 20:05:10', '2021-11-05 16:36:48'); +INSERT INTO `sys_menu` VALUES (46, 44, '复杂列表', '/list/advanced', '/list/advanced', 0, 2, NULL, '_self', 'el-icon-_cols', NULL, 0, NULL, NULL, 0, 1, '2021-02-02 20:05:26', '2021-11-05 16:36:47'); +INSERT INTO `sys_menu` VALUES (47, 44, '卡片列表', '/list/card', '/list/card', 0, 3, NULL, '_self', 'el-icon-_menu', NULL, 0, NULL, NULL, 0, 1, '2021-02-02 20:05:30', '2021-11-05 16:36:45'); +INSERT INTO `sys_menu` VALUES (48, 47, '项目列表', '/list/card/project', '/list/card/project', 0, 1, NULL, '_self', 'el-icon-_menu', NULL, 0, NULL, NULL, 0, 1, '2021-02-02 20:06:35', '2021-11-05 16:36:44'); +INSERT INTO `sys_menu` VALUES (49, 47, '应用列表', '/list/card/application', '/list/card/application', 0, 2, NULL, '_self', 'el-icon-_menu', NULL, 0, NULL, NULL, 0, 1, '2021-02-02 20:06:39', '2021-11-05 16:36:42'); +INSERT INTO `sys_menu` VALUES (50, 47, '文章列表', '/list/card/article', '/list/card/article', 0, 3, NULL, '_self', 'el-icon-_menu', NULL, 0, NULL, NULL, 0, 1, '2021-02-02 20:06:48', '2021-11-05 16:36:41'); +INSERT INTO `sys_menu` VALUES (51, 0, '结果页面', '/result', NULL, 0, 4, NULL, '_self', 'el-icon-circle-check', NULL, 0, NULL, NULL, 0, 1, '2021-02-02 20:07:33', '2021-11-05 16:36:40'); +INSERT INTO `sys_menu` VALUES (52, 51, '成功页', '/result/success', '/result/success', 0, 1, NULL, '_self', 'el-icon-circle-check', NULL, 0, NULL, NULL, 0, 1, '2021-02-02 20:07:40', '2021-11-05 16:36:38'); +INSERT INTO `sys_menu` VALUES (53, 51, '失败页', '/result/fail', '/result/fail', 0, 2, NULL, '_self', 'el-icon-circle-close', NULL, 0, NULL, NULL, 0, 1, '2021-02-02 20:07:41', '2021-11-05 16:36:37'); +INSERT INTO `sys_menu` VALUES (54, 0, '异常页面', '/exception', NULL, 0, 5, NULL, '_self', 'el-icon-document-delete', NULL, 0, NULL, NULL, 0, 1, '2021-02-02 20:08:44', '2021-11-05 16:36:36'); +INSERT INTO `sys_menu` VALUES (55, 54, '403', '/exception/403', '/exception/403', 0, 1, NULL, '_self', 'el-icon-document-checked', NULL, 0, NULL, NULL, 0, 1, '2021-02-02 20:08:47', '2021-11-05 16:36:35'); +INSERT INTO `sys_menu` VALUES (56, 54, '404', '/exception/404', '/exception/404', 0, 2, NULL, '_self', 'el-icon-document-remove', NULL, 0, NULL, NULL, 0, 1, '2021-02-02 20:08:49', '2021-11-05 16:36:34'); +INSERT INTO `sys_menu` VALUES (57, 54, '500', '/exception/500', '/exception/500', 0, 3, NULL, '_self', 'el-icon-document-delete', NULL, 0, NULL, NULL, 0, 1, '2021-02-02 20:08:52', '2021-11-05 16:36:33'); +INSERT INTO `sys_menu` VALUES (58, 0, '个人中心', '/user', NULL, 0, 6, NULL, '_self', 'el-icon-set-up', NULL, 0, NULL, NULL, 0, 1, '2021-02-02 20:09:54', '2021-11-05 16:36:31'); +INSERT INTO `sys_menu` VALUES (59, 58, '个人资料', '/user/profile', '/user/profile', 0, 1, NULL, '_self', 'el-icon-user', NULL, 0, NULL, NULL, 0, 1, '2021-02-02 20:09:58', '2021-11-05 16:36:30'); +INSERT INTO `sys_menu` VALUES (60, 58, '我的消息', '/user/message', '/user/message', 0, 2, NULL, '_self', 'el-icon-chat-dot-round', NULL, 0, NULL, NULL, 0, 1, '2021-02-02 20:10:03', '2021-11-05 16:36:27'); +INSERT INTO `sys_menu` VALUES (61, 0, '扩展组件', '/extension', NULL, 0, 7, NULL, '_self', 'el-icon-open', NULL, 0, NULL, NULL, 0, 1, '2021-02-02 20:10:52', '2021-11-05 16:36:26'); +INSERT INTO `sys_menu` VALUES (62, 61, '图标扩展', '/extension/icon', '/extension/icon', 0, 1, NULL, '_self', 'el-icon-_heart', NULL, 0, NULL, NULL, 0, 1, '2021-02-02 20:10:55', '2022-03-11 21:36:27'); +INSERT INTO `sys_menu` VALUES (63, 61, '文件列表', '/extension/file', '/extension/file', 0, 4, NULL, '_self', 'el-icon-folder', NULL, 0, NULL, NULL, 0, 1, '2021-02-02 20:10:58', '2022-03-11 21:37:16'); +INSERT INTO `sys_menu` VALUES (64, 61, '打印插件', '/extension/printer', '/extension/printer', 0, 8, NULL, '_self', 'el-icon-printer', NULL, 0, NULL, NULL, 0, 1, '2021-02-02 20:11:00', '2022-03-11 21:38:39'); +INSERT INTO `sys_menu` VALUES (65, 61, 'excel插件', '/extension/excel', '/extension/excel', 0, 9, NULL, '_self', 'el-icon-_table', NULL, 0, NULL, NULL, 0, 1, '2021-02-02 20:11:03', '2022-03-11 21:38:44'); +INSERT INTO `sys_menu` VALUES (66, 61, '拖拽排序', '/extension/dragsort', '/extension/dragsort', 0, 5, NULL, '_self', 'el-icon-rank', NULL, 0, NULL, NULL, 0, 1, '2021-02-02 20:11:48', '2021-11-05 16:36:20'); +INSERT INTO `sys_menu` VALUES (67, 61, '地图组件', '/extension/map', '/extension/map', 0, 17, NULL, '_self', 'el-icon-map-location', NULL, 0, NULL, NULL, 0, 1, '2021-02-02 20:11:49', '2022-03-11 21:40:34'); +INSERT INTO `sys_menu` VALUES (68, 61, '视频播放', '/extension/player', '/extension/player', 0, 16, NULL, '_self', 'el-icon-_video', NULL, 0, NULL, NULL, 0, 1, '2021-02-02 20:13:49', '2022-03-11 21:40:30'); +INSERT INTO `sys_menu` VALUES (69, 61, '富文本框', '/extension/editor', '/extension/editor', 0, 19, NULL, '_self', 'el-icon-_font-family', NULL, 0, NULL, NULL, 0, 1, '2021-02-02 20:13:57', '2022-03-11 21:41:12'); +INSERT INTO `sys_menu` VALUES (70, 61, '城市选择', '/extension/regions', '/extension/regions', 0, 7, NULL, '_self', 'el-icon-office-building', NULL, 0, NULL, NULL, 0, 1, '2021-10-05 11:25:15', '2022-03-11 21:44:18'); +INSERT INTO `sys_menu` VALUES (71, 61, '弹窗扩展', '/extension/dialog', '/extension/dialog', 0, 3, NULL, '_self', 'el-icon-copy-document', NULL, 0, NULL, NULL, 0, 1, '2021-10-05 11:32:12', '2022-03-11 21:42:52'); +INSERT INTO `sys_menu` VALUES (72, 0, '常用实例', '/example', NULL, 0, 8, NULL, '_self', 'el-icon-_integral', NULL, 0, NULL, NULL, 0, 1, '2021-02-02 20:15:01', '2021-11-05 16:52:47'); +INSERT INTO `sys_menu` VALUES (73, 72, '表格实例', '/example/table', '/example/table', 0, 1, NULL, '_self', 'el-icon-_table', NULL, 0, NULL, NULL, 0, 1, '2021-10-06 22:26:55', '2022-03-11 21:53:34'); +INSERT INTO `sys_menu` VALUES (74, 72, '案卷调整', '/example/document', '/example/document', 0, 3, NULL, '_self', 'el-icon-files', NULL, 0, NULL, NULL, 0, 1, '2021-02-02 20:15:03', '2022-03-11 21:53:27'); +INSERT INTO `sys_menu` VALUES (75, 72, '批量选择', '/example/choose', '/example/choose', 0, 4, NULL, '_self', 'el-icon-finished', NULL, 0, NULL, NULL, 0, 1, '2021-02-02 20:15:11', '2022-03-11 21:53:29'); +INSERT INTO `sys_menu` VALUES (76, 72, '内嵌页面', '/example/eleadmin', 'https://www.eleadmin.com', 0, 5, NULL, '_self', 'el-icon-connection', NULL, 0, NULL, NULL, 0, 1, '2021-05-21 11:11:57', '2022-03-11 21:53:31'); +INSERT INTO `sys_menu` VALUES (77, 0, '获取授权1', 'https://eleadmin.com/goods/8', NULL, 0, 9, NULL, '_self', 'el-icon-_prerogative', NULL, 0, NULL, NULL, 0, 1, '2021-02-02 20:15:18', '2022-07-25 17:45:17'); +INSERT INTO `sys_menu` VALUES (78, 61, '消息提示', '/extension/message', '/extension/message', 0, 6, NULL, '_self', 'el-icon-chat-line-square', NULL, 0, NULL, NULL, 0, 1, '2021-10-05 11:14:28', '2022-03-11 21:43:01'); +INSERT INTO `sys_menu` VALUES (79, 61, '步骤条', '/extension/steps', '/extension/steps', 0, 12, NULL, '_self', 'el-icon-_timeline', NULL, 0, NULL, NULL, 0, 1, '2021-10-05 11:16:39', '2022-03-11 21:52:14'); +INSERT INTO `sys_menu` VALUES (80, 61, '菜单导航', '/extension/menu', '/extension/menu', 0, 13, NULL, '_self', 'el-icon-s-operation', NULL, 0, NULL, NULL, 0, 1, '2021-10-05 11:18:35', '2022-03-11 21:52:16'); +INSERT INTO `sys_menu` VALUES (81, 61, '空状态', '/extension/empty', '/extension/empty', 0, 11, NULL, '_self', 'el-icon-receiving', NULL, 0, NULL, NULL, 0, 1, '2021-10-05 11:20:35', '2022-03-11 21:44:22'); +INSERT INTO `sys_menu` VALUES (82, 61, '标签组件', '/extension/tag', '/extension/tag', 0, 2, NULL, '_self', 'el-icon-price-tag', NULL, 0, NULL, NULL, 0, 1, '2021-10-05 11:13:35', '2022-03-11 21:42:50'); +INSERT INTO `sys_menu` VALUES (83, 61, '滚动数字', '/extension/count-up', '/extension/count-up', 0, 10, NULL, '_self', 'el-icon-more', NULL, 0, NULL, NULL, 0, 1, '2021-10-05 11:29:03', '2022-03-11 21:44:20'); +INSERT INTO `sys_menu` VALUES (84, 61, '二维码', '/extension/qr-code', '/extension/qr-code', 0, 18, NULL, '_self', 'el-icon-_qrcode', NULL, 0, NULL, NULL, 0, 1, '2021-10-05 11:29:56', '2022-03-11 21:52:22'); +INSERT INTO `sys_menu` VALUES (85, 61, '树形下拉', '/extension/tree-select', '/extension/tree-select', 0, 14, NULL, '_self', 'el-icon-_condition', NULL, 0, NULL, NULL, 0, 1, '2021-10-10 16:21:12', '2022-03-11 21:52:17'); +INSERT INTO `sys_menu` VALUES (86, 61, '表格下拉', '/extension/table-select', '/extension/table-select', 0, 15, NULL, '_self', 'el-icon-_table', NULL, 0, NULL, NULL, 0, 1, '2021-10-10 16:21:45', '2022-03-11 21:52:19'); +INSERT INTO `sys_menu` VALUES (87, 44, '用户信息', '/list/user-info/:id', '/list/user-info', 0, 4, NULL, '_self', 'el-icon-user', NULL, 0, NULL, '{\"active\": \"/list/basic\"}', 1, 1, '2022-03-11 21:56:38', '2022-03-11 21:56:38'); +INSERT INTO `sys_menu` VALUES (88, 72, '菜单徽章', '/example/menu-badge', '/example/menu-badge', 0, 2, NULL, '_self', 'el-icon-_menu', NULL, 0, NULL, NULL, 1, 1, '2022-03-11 21:57:35', '2022-03-11 21:57:47'); +INSERT INTO `sys_menu` VALUES (89, 61, 'markdown', '/extension/markdown', '/extension/markdown', 0, 20, NULL, '_self', 'el-icon-_feedback', NULL, 0, NULL, NULL, 1, 1, '2022-03-11 21:58:13', '2022-03-11 21:59:06'); +INSERT INTO `sys_menu` VALUES (101, 0, '系统管理', '/system', NULL, 0, 999, NULL, '_self', 'setting-outlined', NULL, 0, NULL, '', 0, 5, '2020-02-26 12:51:23', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (102, 101, '用户管理', '/system/user', '/system/user', 0, 1, NULL, '_self', 'team-outlined', NULL, 0, NULL, NULL, 0, 5, '2020-02-26 12:51:55', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (103, 102, '查询用户', NULL, NULL, 1, 1, 'sys:user:list', '_self', NULL, NULL, 0, NULL, NULL, 0, 5, '2020-02-26 12:52:06', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (104, 102, '添加用户', NULL, NULL, 1, 2, 'sys:user:save', '_self', NULL, NULL, 0, NULL, NULL, 0, 5, '2020-02-26 12:52:26', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (105, 102, '修改用户', NULL, NULL, 1, 3, 'sys:user:update', '_self', NULL, NULL, 0, NULL, NULL, 0, 5, '2020-02-26 12:52:50', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (106, 102, '删除用户', NULL, NULL, 1, 4, 'sys:user:remove', '_self', NULL, NULL, 0, NULL, NULL, 0, 5, '2020-02-26 12:53:13', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (107, 101, '角色管理', '/system/role', '/system/role', 0, 2, NULL, '_self', 'idcard-outlined', NULL, 0, NULL, NULL, 0, 5, '2020-03-13 13:29:08', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (108, 107, '查询角色', NULL, NULL, 1, 1, 'sys:role:list', '_self', NULL, NULL, 0, NULL, NULL, 0, 5, '2020-03-13 13:30:41', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (109, 107, '添加角色', NULL, NULL, 1, 2, 'sys:role:save', '_self', NULL, NULL, 0, NULL, NULL, 0, 5, '2020-03-15 13:02:07', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (110, 107, '修改角色', NULL, NULL, 1, 3, 'sys:role:update', '_self', NULL, NULL, 0, NULL, NULL, 0, 5, '2020-03-15 13:02:49', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (111, 107, '删除角色', NULL, NULL, 1, 4, 'sys:role:remove', '_self', NULL, NULL, 0, NULL, NULL, 0, 5, '2020-03-20 17:58:51', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (112, 101, '菜单管理', '/system/menu', '/system/menu', 0, 3, NULL, '_self', 'appstore-outlined', NULL, 0, NULL, NULL, 0, 5, '2020-03-21 01:07:13', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (113, 112, '查询菜单', NULL, NULL, 1, 1, 'sys:menu:list', '_self', NULL, NULL, 0, NULL, NULL, 0, 5, '2020-03-21 16:43:30', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (114, 112, '添加菜单', NULL, NULL, 1, 2, 'sys:menu:save', '_self', NULL, NULL, 0, NULL, NULL, 0, 5, '2020-03-21 16:43:54', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (115, 112, '修改菜单', NULL, NULL, 1, 3, 'sys:menu:update', '_self', NULL, NULL, 0, NULL, NULL, 0, 5, '2020-03-21 18:24:17', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (116, 112, '删除菜单', NULL, NULL, 1, 4, 'sys:menu:remove', '_self', NULL, NULL, 0, NULL, NULL, 0, 5, '2020-03-21 18:24:18', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (117, 101, '机构管理', '/system/organization', '/system/organization', 0, 5, NULL, '_self', 'bank-outlined', NULL, 0, NULL, NULL, 0, 5, '2020-03-21 18:24:20', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (118, 117, '查询机构', NULL, NULL, 1, 1, 'sys:org:list', '_self', NULL, NULL, 0, NULL, NULL, 0, 5, '2020-03-21 18:24:21', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (119, 117, '添加机构', NULL, NULL, 1, 2, 'sys:org:save', '_self', NULL, NULL, 0, NULL, NULL, 0, 5, '2020-03-21 18:24:22', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (120, 117, '修改机构', NULL, NULL, 1, 3, 'sys:org:update', '_self', NULL, NULL, 0, NULL, NULL, 0, 5, '2020-03-21 18:24:24', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (121, 117, '删除机构', NULL, NULL, 1, 4, 'sys:org:remove', '_self', NULL, NULL, 0, NULL, NULL, 0, 5, '2020-03-21 18:24:25', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (122, 101, '字典管理', '/system/dictionary', '/system/dictionary', 0, 4, NULL, '_self', 'profile-outlined', NULL, 0, NULL, NULL, 0, 5, '2020-03-21 18:24:26', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (123, 122, '查询字典', NULL, NULL, 1, 1, 'sys:dict:list', '_self', NULL, NULL, 0, NULL, NULL, 0, 5, '2020-03-21 18:24:27', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (124, 122, '添加字典', NULL, NULL, 1, 2, 'sys:dict:save', '_self', NULL, NULL, 0, NULL, NULL, 0, 5, '2020-03-21 18:24:28', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (125, 122, '修改字典', NULL, NULL, 1, 3, 'sys:dict:update', '_self', NULL, NULL, 0, NULL, NULL, 0, 5, '2020-03-21 18:24:29', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (126, 122, '删除字典', NULL, NULL, 1, 4, 'sys:dict:remove', '_self', NULL, NULL, 0, NULL, NULL, 0, 5, '2020-03-21 18:24:31', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (127, 101, '登录日志', '/system/login-record', '/system/login-record', 0, 7, 'sys:login-record:view', '_self', 'calendar-outlined', NULL, 0, NULL, NULL, 0, 5, '2020-03-21 18:24:33', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (128, 101, '操作日志', '/system/operation-record', '/system/operation-record', 0, 8, 'sys:operation-record:view', '_self', 'file-search-outlined', NULL, 0, NULL, NULL, 0, 5, '2020-03-21 18:24:34', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (129, 101, '文件管理', '/system/file', '/system/file', 0, 6, NULL, '_self', 'folder-outlined', NULL, 0, NULL, NULL, 0, 5, '2020-09-17 23:19:43', '2022-08-04 10:38:12'); +INSERT INTO `sys_menu` VALUES (130, 129, '查看记录', NULL, NULL, 1, 1, 'sys:file:list', '_self', NULL, NULL, 0, NULL, NULL, 0, 5, '2020-09-17 23:20:29', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (131, 129, '上传文件', NULL, NULL, 1, 2, 'sys:file:upload', '_self', NULL, NULL, 0, NULL, NULL, 0, 5, '2020-09-17 23:21:04', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (132, 129, '删除文件', NULL, NULL, 1, 3, 'sys:file:remove', '_self', NULL, NULL, 0, NULL, NULL, 0, 5, '2020-09-17 23:21:53', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (133, 101, '修改个人密码', NULL, NULL, 1, 10, 'sys:auth:password', '_self', NULL, NULL, 0, NULL, NULL, 0, 5, '2020-09-17 23:22:45', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (134, 101, '修改个人资料', NULL, NULL, 1, 11, 'sys:auth:user', '_self', NULL, NULL, 0, NULL, NULL, 0, 5, '2020-09-17 23:23:24', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (135, 101, '用户信息', '/system/user-info', '/system/user-info', 0, 9, NULL, '_self', 'team-outlined', NULL, 1, NULL, '{\"active\": \"/system/user\"}', 0, 5, '2021-05-21 11:07:54', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (136, 0, '控制台', '/dashboard/workplace', '/dashboard/workplace', 0, 0, NULL, '_self', 'home-outlined', NULL, 1, NULL, NULL, 0, 5, '2021-02-02 20:00:34', '2022-08-04 17:11:01'); +INSERT INTO `sys_menu` VALUES (137, 136, '工作台', '/dashboard/workplace', '/dashboard/workplace', 0, 2, NULL, '_self', 'desktop-outlined', NULL, 1, NULL, NULL, 0, 5, '2021-02-02 20:00:37', '2022-08-03 16:22:10'); +INSERT INTO `sys_menu` VALUES (138, 136, '分析页', '/dashboard/analysis', '/dashboard/analysis', 0, 3, NULL, '_self', 'bar-chart-outlined', NULL, 1, NULL, '{\"badge\": 1}', 1, 5, '2021-02-02 20:00:40', '2022-08-03 13:58:29'); +INSERT INTO `sys_menu` VALUES (139, 136, '监控页', '/dashboard/monitor', '/dashboard/monitor', 0, 4, NULL, '_self', 'dashboard-outlined', NULL, 1, NULL, NULL, 1, 5, '2021-02-02 20:03:12', '2022-08-03 13:58:31'); +INSERT INTO `sys_menu` VALUES (140, 0, '表单页面', '/form', NULL, 0, 2, NULL, '_self', 'file-text-outlined', NULL, 1, NULL, NULL, 1, 5, '2021-02-02 20:03:28', '2022-08-03 13:58:46'); +INSERT INTO `sys_menu` VALUES (141, 140, '基础表单', '/form/basic', '/form/basic', 0, 1, NULL, '_self', 'file-text-outlined', NULL, 0, NULL, NULL, 1, 5, '2021-02-02 20:03:51', '2022-08-03 13:58:43'); +INSERT INTO `sys_menu` VALUES (142, 140, '复杂表单', '/form/advanced', '/form/advanced', 0, 2, NULL, '_self', 'audit-outlined', NULL, 0, NULL, NULL, 1, 5, '2021-02-02 20:03:56', '2022-08-03 13:58:41'); +INSERT INTO `sys_menu` VALUES (143, 140, '分步表单', '/form/step', '/form/step', 0, 3, NULL, '_self', 'one-to-one-outlined', NULL, 0, NULL, NULL, 1, 5, '2021-02-02 20:04:06', '2022-08-03 13:58:38'); +INSERT INTO `sys_menu` VALUES (144, 0, '列表页面', '/list', NULL, 0, 3, NULL, '_self', 'table-outlined', NULL, 1, NULL, NULL, 1, 5, '2021-02-02 20:05:07', '2022-08-03 13:59:21'); +INSERT INTO `sys_menu` VALUES (145, 144, '基础列表', '/list/basic', '/list/basic', 0, 1, NULL, '_self', 'table-outlined', NULL, 0, NULL, NULL, 1, 5, '2021-02-02 20:05:10', '2022-08-03 13:59:18'); +INSERT INTO `sys_menu` VALUES (146, 144, '复杂列表', '/list/advanced', '/list/advanced', 0, 2, NULL, '_self', 'profile-outlined', NULL, 0, NULL, NULL, 1, 5, '2021-02-02 20:05:26', '2022-08-03 13:59:16'); +INSERT INTO `sys_menu` VALUES (147, 144, '卡片列表', '/list/card', '/list/card', 0, 3, NULL, '_self', 'appstore-outlined', NULL, 0, NULL, NULL, 1, 5, '2021-02-02 20:05:30', '2022-08-03 13:59:11'); +INSERT INTO `sys_menu` VALUES (148, 147, '项目列表', '/list/card/project', '/list/card/project', 0, 1, NULL, '_self', 'appstore-outlined', NULL, 0, NULL, NULL, 1, 5, '2021-02-02 20:06:35', '2022-08-03 13:58:59'); +INSERT INTO `sys_menu` VALUES (149, 147, '应用列表', '/list/card/application', '/list/card/application', 0, 2, NULL, '_self', 'appstore-outlined', NULL, 0, NULL, NULL, 1, 5, '2021-02-02 20:06:39', '2022-08-03 13:59:02'); +INSERT INTO `sys_menu` VALUES (150, 147, '文章列表', '/list/card/article', '/list/card/article', 0, 3, NULL, '_self', 'appstore-outlined', NULL, 0, NULL, NULL, 1, 5, '2021-02-02 20:06:48', '2022-08-03 13:59:04'); +INSERT INTO `sys_menu` VALUES (151, 0, '结果页面', '/result', NULL, 0, 4, NULL, '_self', 'check-circle-outlined', NULL, 1, NULL, NULL, 1, 5, '2021-02-02 20:07:33', '2022-08-03 13:59:34'); +INSERT INTO `sys_menu` VALUES (152, 151, '成功页', '/result/success', '/result/success', 0, 1, NULL, '_self', 'check-circle-outlined', NULL, 0, NULL, NULL, 1, 5, '2021-02-02 20:07:40', '2022-08-03 13:59:31'); +INSERT INTO `sys_menu` VALUES (153, 151, '失败页', '/result/fail', '/result/fail', 0, 2, NULL, '_self', 'close-circle-outlined', NULL, 0, NULL, NULL, 1, 5, '2021-02-02 20:07:41', '2022-08-03 13:59:29'); +INSERT INTO `sys_menu` VALUES (154, 0, '异常页面', '/exception', NULL, 0, 5, NULL, '_self', 'warning-outlined', NULL, 1, NULL, NULL, 1, 5, '2021-02-02 20:08:44', '2022-08-03 13:59:45'); +INSERT INTO `sys_menu` VALUES (155, 154, '403', '/exception/403', '/exception/403', 0, 1, NULL, '_self', 'exclamation-circle-outlined', NULL, 0, NULL, NULL, 1, 5, '2021-02-02 20:08:47', '2022-08-03 13:59:42'); +INSERT INTO `sys_menu` VALUES (156, 154, '404', '/exception/404', '/exception/404', 0, 2, NULL, '_self', 'question-circle-outlined', NULL, 0, NULL, NULL, 1, 5, '2021-02-02 20:08:49', '2022-08-03 13:59:40'); +INSERT INTO `sys_menu` VALUES (157, 154, '500', '/exception/500', '/exception/500', 0, 3, NULL, '_self', 'close-circle-outlined', NULL, 0, NULL, NULL, 1, 5, '2021-02-02 20:08:52', '2022-08-03 13:59:38'); +INSERT INTO `sys_menu` VALUES (158, 0, '个人中心', '/user', NULL, 0, 888, NULL, '_self', 'control-outlined', NULL, 1, NULL, NULL, 0, 5, '2021-02-02 20:09:54', '2022-08-04 12:33:23'); +INSERT INTO `sys_menu` VALUES (159, 158, '个人资料', '/user/profile', '/user/profile', 0, 1, NULL, '_self', 'user-outlined', NULL, 0, NULL, NULL, 0, 5, '2021-02-02 20:09:58', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (160, 158, '我的消息', '/user/message', '/user/message', 0, 2, NULL, '_self', 'sound-outlined', NULL, 0, NULL, NULL, 0, 5, '2021-02-02 20:10:03', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (161, 0, '扩展组件', '/extension', '/extension', 0, 888, NULL, '_self', 'appstore-add-outlined', NULL, 1, NULL, NULL, 0, 5, '2021-02-02 20:10:52', '2022-08-04 12:32:23'); +INSERT INTO `sys_menu` VALUES (162, 161, '预留', NULL, NULL, 0, 17, NULL, '_self', NULL, NULL, 0, NULL, NULL, 1, 5, '2021-02-02 20:10:55', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (163, 161, '文件列表', '/extension/file', '/extension/file', 0, 3, NULL, '_self', 'folder-outlined', NULL, 0, NULL, NULL, 0, 5, '2021-02-02 20:10:58', '2022-08-03 21:42:58'); +INSERT INTO `sys_menu` VALUES (164, 161, '打印插件', '/extension/printer', '/extension/printer', 0, 7, NULL, '_self', 'printer-outlined', NULL, 0, NULL, NULL, 1, 5, '2021-02-02 20:11:00', '2022-08-03 14:00:51'); +INSERT INTO `sys_menu` VALUES (165, 161, 'excel插件', '/extension/excel', '/extension/excel', 0, 8, NULL, '_self', 'table-outlined', NULL, 0, NULL, NULL, 1, 5, '2021-02-02 20:11:03', '2022-08-03 14:00:49'); +INSERT INTO `sys_menu` VALUES (166, 161, '拖拽排序', '/extension/dragsort', '/extension/dragsort', 0, 4, NULL, '_self', 'drag-outlined', NULL, 0, NULL, NULL, 1, 5, '2021-02-02 20:11:48', '2022-08-03 14:00:56'); +INSERT INTO `sys_menu` VALUES (167, 161, '地图组件', '/extension/map', '/extension/map', 0, 11, NULL, '_self', 'environment-outlined', NULL, 0, NULL, NULL, 1, 5, '2021-02-02 20:11:49', '2022-08-03 14:00:43'); +INSERT INTO `sys_menu` VALUES (168, 161, '视频播放', '/extension/player', '/extension/player', 0, 10, NULL, '_self', 'youtube-outlined', NULL, 0, NULL, NULL, 1, 5, '2021-02-02 20:13:49', '2022-08-03 14:00:45'); +INSERT INTO `sys_menu` VALUES (169, 161, '富文本框', '/extension/editor', '/extension/editor', 0, 12, NULL, '_self', 'font-size-outlined', NULL, 0, NULL, NULL, 1, 5, '2021-02-02 20:13:57', '2022-08-03 14:00:41'); +INSERT INTO `sys_menu` VALUES (170, 161, '城市选择', '/extension/regions', '/extension/regions', 0, 6, NULL, '_self', 'apartment-outlined', NULL, 0, NULL, NULL, 1, 5, '2021-10-05 11:25:15', '2022-08-03 14:00:52'); +INSERT INTO `sys_menu` VALUES (171, 161, '弹窗扩展', '/extension/dialog', '/extension/dialog', 0, 2, NULL, '_self', 'block-outlined', NULL, 0, NULL, NULL, 1, 5, '2021-10-05 11:32:12', '2022-08-03 14:01:00'); +INSERT INTO `sys_menu` VALUES (172, 0, '常用实例33', '/example', NULL, 0, 8, NULL, '_self', 'compass-outlined', NULL, 1, NULL, NULL, 1, 5, '2021-02-02 20:15:01', '2022-08-03 14:00:15'); +INSERT INTO `sys_menu` VALUES (173, 172, '表格实例', '/example/table', '/example/table', 0, 1, NULL, '_self', 'table-outlined', NULL, 0, NULL, NULL, 1, 5, '2021-10-06 22:26:55', '2022-08-03 13:59:59'); +INSERT INTO `sys_menu` VALUES (174, 172, '案卷调整', '/example/document', '/example/document', 0, 3, NULL, '_self', 'interaction-outlined', NULL, 0, NULL, NULL, 1, 5, '2021-02-02 20:15:03', '2022-08-03 14:00:04'); +INSERT INTO `sys_menu` VALUES (175, 172, '批量选择', '/example/choose', '/example/choose', 0, 4, NULL, '_self', 'check-square-outlined', NULL, 0, NULL, NULL, 1, 5, '2021-02-02 20:15:11', '2022-08-03 14:00:10'); +INSERT INTO `sys_menu` VALUES (176, 172, '内嵌页面', '/example/eleadmin', 'https://www.eleadmin.com', 0, 5, NULL, '_self', 'youtube-outlined', NULL, 0, NULL, NULL, 1, 5, '2021-05-21 11:11:57', '2022-08-03 14:00:13'); +INSERT INTO `sys_menu` VALUES (177, 0, '获取授权233', 'https://eleadmin.com/goods/9', NULL, 0, 9, NULL, '_self', 'sketch-outlined', NULL, 0, NULL, NULL, 1, 5, '2021-02-02 20:15:18', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (178, 161, '预留', NULL, NULL, 0, 16, NULL, '_self', NULL, NULL, 0, NULL, NULL, 1, 5, '2021-10-05 11:14:28', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (179, 161, '颜色选择', '/extension/color-picker', '/extension/color-picker', 0, 5, NULL, '_self', 'bg-colors-outlined', NULL, 0, NULL, NULL, 1, 5, '2021-10-05 11:16:39', '2022-08-03 14:00:54'); +INSERT INTO `sys_menu` VALUES (180, 161, '预留', NULL, NULL, 0, 18, NULL, '_self', NULL, NULL, 0, NULL, NULL, 1, 5, '2021-10-05 11:18:35', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (181, 161, '预留', NULL, NULL, 0, 19, NULL, '_self', NULL, NULL, 0, NULL, NULL, 1, 5, '2021-10-05 11:20:35', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (182, 161, '标签组件', '/extension/tag', '/extension/tag', 0, 1, NULL, '_self', 'tag-outlined', NULL, 0, NULL, NULL, 1, 5, '2021-10-05 11:13:35', '2022-08-03 14:01:02'); +INSERT INTO `sys_menu` VALUES (183, 161, '滚动数字', '/extension/count-up', '/extension/count-up', 0, 9, NULL, '_self', 'ellipsis-outlined', NULL, 0, NULL, NULL, 1, 5, '2021-10-05 11:29:03', '2022-08-03 14:00:47'); +INSERT INTO `sys_menu` VALUES (184, 161, '二维码', '/extension/qr-code', '/extension/qr-code', 0, 15, NULL, '_self', 'qrcode-outlined', NULL, 0, NULL, NULL, 1, 5, '2021-10-05 11:29:56', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (185, 161, '预留', NULL, NULL, 0, 20, NULL, '_self', NULL, NULL, 0, NULL, NULL, 1, 5, '2021-10-10 16:21:12', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (186, 161, '表格下拉', '/extension/table-select', '/extension/table-select', 0, 14, NULL, '_self', 'table-outlined', NULL, 0, NULL, NULL, 1, 5, '2021-10-10 16:21:45', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (187, 144, '用户信息', '/list/user-info/:id', '/list/user-info', 0, 4, NULL, '_self', 'team-outlined', NULL, 1, NULL, '{\"active\": \"/list/basic\"}', 1, 5, '2021-02-02 20:05:26', '2022-08-03 13:59:14'); +INSERT INTO `sys_menu` VALUES (188, 172, '菜单徽章', '/example/menu-badge', '/example/menu-badge', 0, 2, NULL, '_self', 'appstore-outlined', NULL, 0, NULL, NULL, 1, 5, '2021-02-02 20:05:26', '2022-08-03 14:00:02'); +INSERT INTO `sys_menu` VALUES (189, 161, 'markdown', '/extension/markdown', '/extension/markdown', 0, 13, NULL, '_self', 'picLeft-outlined', NULL, 0, NULL, NULL, 1, 5, '2021-10-10 16:21:45', '2022-08-03 14:00:37'); +INSERT INTO `sys_menu` VALUES (201, 0, '系统管理', 'javascript:;', NULL, 0, 1, NULL, '_self', 'layui-icon layui-icon-set', NULL, 0, NULL, NULL, 0, 3, '2020-02-26 12:51:23', '2022-03-11 13:11:06'); +INSERT INTO `sys_menu` VALUES (202, 201, '用户管理', '#/system/user', NULL, 0, 1, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2020-02-26 12:51:55', '2022-03-11 13:12:19'); +INSERT INTO `sys_menu` VALUES (203, 202, '查询用户', NULL, NULL, 1, 1, 'sys:user:list', '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2020-02-26 12:52:06', '2022-03-11 13:12:24'); +INSERT INTO `sys_menu` VALUES (204, 202, '添加用户', NULL, NULL, 1, 2, 'sys:user:save', '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2020-02-26 12:52:26', '2022-03-11 13:12:25'); +INSERT INTO `sys_menu` VALUES (205, 202, '修改用户', NULL, NULL, 1, 3, 'sys:user:update', '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2020-02-26 12:52:50', '2022-03-11 13:12:26'); +INSERT INTO `sys_menu` VALUES (206, 202, '删除用户', NULL, NULL, 1, 4, 'sys:user:remove', '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2020-02-26 12:53:13', '2022-03-11 13:12:26'); +INSERT INTO `sys_menu` VALUES (207, 201, '角色管理', '#/system/role', NULL, 0, 2, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2020-03-13 13:29:08', '2022-03-11 13:13:39'); +INSERT INTO `sys_menu` VALUES (208, 207, '查询角色', NULL, NULL, 1, 1, 'sys:role:list', '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2020-03-13 13:30:41', '2022-03-11 13:12:53'); +INSERT INTO `sys_menu` VALUES (209, 207, '添加角色', NULL, NULL, 1, 2, 'sys:role:save', '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2020-03-15 13:02:07', '2022-03-11 13:12:54'); +INSERT INTO `sys_menu` VALUES (210, 207, '修改角色', NULL, NULL, 1, 3, 'sys:role:update', '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2020-03-15 13:02:49', '2022-03-11 13:12:55'); +INSERT INTO `sys_menu` VALUES (211, 207, '删除角色', NULL, NULL, 1, 4, 'sys:role:remove', '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2020-03-20 17:58:51', '2022-03-11 13:12:55'); +INSERT INTO `sys_menu` VALUES (212, 201, '菜单管理', '#/system/authorities', NULL, 0, 3, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2020-03-21 01:07:13', '2022-03-11 13:13:40'); +INSERT INTO `sys_menu` VALUES (213, 212, '查询菜单', NULL, NULL, 1, 1, 'sys:menu:list', '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2020-03-21 16:43:30', '2022-03-11 13:12:57'); +INSERT INTO `sys_menu` VALUES (214, 212, '添加菜单', NULL, NULL, 1, 2, 'sys:menu:save', '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2020-03-21 16:43:54', '2022-03-11 13:12:58'); +INSERT INTO `sys_menu` VALUES (215, 212, '修改菜单', NULL, NULL, 1, 3, 'sys:menu:update', '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2020-03-21 18:24:17', '2022-03-11 13:12:58'); +INSERT INTO `sys_menu` VALUES (216, 212, '删除菜单', NULL, NULL, 1, 4, 'sys:menu:remove', '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2020-03-21 18:24:18', '2022-03-11 13:12:59'); +INSERT INTO `sys_menu` VALUES (217, 201, '机构管理', '#/system/organization', NULL, 0, 4, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2020-03-21 18:24:20', '2022-03-11 13:13:42'); +INSERT INTO `sys_menu` VALUES (218, 217, '查询机构', NULL, NULL, 1, 1, 'sys:org:list', '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2020-03-21 18:24:21', '2022-03-11 13:13:01'); +INSERT INTO `sys_menu` VALUES (219, 217, '添加机构', NULL, NULL, 1, 2, 'sys:org:save', '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2020-03-21 18:24:22', '2022-03-11 13:13:02'); +INSERT INTO `sys_menu` VALUES (220, 217, '修改机构', NULL, NULL, 1, 3, 'sys:org:update', '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2020-03-21 18:24:24', '2022-03-11 13:13:02'); +INSERT INTO `sys_menu` VALUES (221, 217, '删除机构', NULL, NULL, 1, 4, 'sys:org:remove', '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2020-03-21 18:24:25', '2022-03-11 13:13:03'); +INSERT INTO `sys_menu` VALUES (222, 201, '字典管理', '#/system/dictionary', NULL, 0, 5, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2020-03-21 18:24:26', '2022-03-11 13:13:43'); +INSERT INTO `sys_menu` VALUES (223, 222, '查询字典', NULL, NULL, 1, 1, 'sys:dict:list', '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2020-03-21 18:24:27', '2022-03-11 13:13:05'); +INSERT INTO `sys_menu` VALUES (224, 222, '添加字典', NULL, NULL, 1, 2, 'sys:dict:save', '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2020-03-21 18:24:28', '2022-03-11 13:13:05'); +INSERT INTO `sys_menu` VALUES (225, 222, '修改字典', NULL, NULL, 1, 3, 'sys:dict:update', '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2020-03-21 18:24:29', '2022-03-11 13:13:06'); +INSERT INTO `sys_menu` VALUES (226, 222, '删除字典', NULL, NULL, 1, 4, 'sys:dict:remove', '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2020-03-21 18:24:31', '2022-03-11 13:13:07'); +INSERT INTO `sys_menu` VALUES (227, 201, '登录日志', '#/system/login-record', NULL, 0, 7, 'sys:login-record:view', '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2020-03-21 18:24:33', '2022-03-11 13:12:36'); +INSERT INTO `sys_menu` VALUES (228, 201, '操作日志', '#/system/oper-record', NULL, 0, 8, 'sys:operation-record:view', '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2020-03-21 18:24:34', '2022-03-11 13:12:37'); +INSERT INTO `sys_menu` VALUES (229, 201, '文件管理', '#/system/file', NULL, 0, 6, NULL, '_self', NULL, NULL, 1, NULL, NULL, 0, 3, '2020-09-17 23:19:43', '2022-03-11 15:33:23'); +INSERT INTO `sys_menu` VALUES (230, 229, '查看记录', NULL, NULL, 1, 1, 'sys:file:list', '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2020-09-17 23:20:29', '2022-03-11 15:33:21'); +INSERT INTO `sys_menu` VALUES (231, 229, '上传文件', NULL, NULL, 1, 2, 'sys:file:upload', '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2020-09-17 23:21:04', '2022-03-11 13:13:12'); +INSERT INTO `sys_menu` VALUES (232, 229, '删除文件', NULL, NULL, 1, 3, 'sys:file:remove', '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2020-09-17 23:21:53', '2022-03-11 13:13:13'); +INSERT INTO `sys_menu` VALUES (233, 201, '修改个人密码', NULL, NULL, 1, 10, 'sys:auth:password', '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2020-09-17 23:22:45', '2022-03-11 13:12:40'); +INSERT INTO `sys_menu` VALUES (234, 201, '修改个人资料', NULL, NULL, 1, 11, 'sys:auth:user', '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2020-09-17 23:23:24', '2022-03-11 13:12:41'); +INSERT INTO `sys_menu` VALUES (235, 201, '用户信息', '#/system/user-info', NULL, 0, 9, NULL, '_self', NULL, NULL, 1, NULL, NULL, 0, 3, '2021-05-21 11:07:54', '2022-03-11 13:12:47'); +INSERT INTO `sys_menu` VALUES (236, 0, 'Dashboard', 'javascript:;', NULL, 0, 0, NULL, '_self', 'layui-icon layui-icon-home', NULL, 0, NULL, NULL, 0, 3, '2021-02-02 20:00:34', '2022-03-11 13:11:23'); +INSERT INTO `sys_menu` VALUES (237, 236, '工作台', '#/console/workplace', NULL, 0, 1, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-02-02 20:00:37', '2022-03-11 13:16:13'); +INSERT INTO `sys_menu` VALUES (238, 236, '控制台', '#/console/console', NULL, 0, 2, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-02-02 20:00:40', '2022-03-11 13:16:14'); +INSERT INTO `sys_menu` VALUES (239, 236, '分析页', '#/console/dashboard', NULL, 0, 3, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-02-02 20:03:12', '2022-03-11 13:16:15'); +INSERT INTO `sys_menu` VALUES (240, 0, '模板页面', 'javascript:;', NULL, 0, 2, NULL, '_self', 'layui-icon layui-icon-template', NULL, 0, NULL, NULL, 0, 3, '2021-02-02 20:03:12', '2022-03-11 13:19:11'); +INSERT INTO `sys_menu` VALUES (241, 240, '表单页', 'javascript:;', NULL, 0, 1, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-02-02 20:03:28', '2022-03-11 13:19:17'); +INSERT INTO `sys_menu` VALUES (242, 241, '基础表单', '#/template/form/form-basic', NULL, 0, 1, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-02-02 20:03:51', '2022-03-11 13:19:34'); +INSERT INTO `sys_menu` VALUES (243, 241, '复杂表单', '#/template/form/form-advance', NULL, 0, 2, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-02-02 20:03:56', '2022-03-11 13:19:34'); +INSERT INTO `sys_menu` VALUES (244, 241, '分步表单', '#/template/form/form-step', NULL, 0, 3, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-02-02 20:04:06', '2022-03-11 13:19:35'); +INSERT INTO `sys_menu` VALUES (245, 240, '表格页', 'javascript:;', NULL, 0, 2, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-02-02 20:05:07', '2022-03-11 13:19:19'); +INSERT INTO `sys_menu` VALUES (246, 245, '数据表格', '#/template/table/table-basic', NULL, 0, 1, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-02-02 20:05:10', '2022-03-11 13:19:37'); +INSERT INTO `sys_menu` VALUES (247, 245, '复杂表格', '#/template/table/table-advance', NULL, 0, 2, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-02-02 20:05:26', '2022-03-11 13:19:38'); +INSERT INTO `sys_menu` VALUES (248, 245, '图片表格', '#/template/table/table-img', NULL, 0, 3, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-02-02 20:05:30', '2022-03-11 13:19:38'); +INSERT INTO `sys_menu` VALUES (249, 245, '卡片列表', '#/template/table/table-card', NULL, 0, 4, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-02-02 20:06:35', '2022-03-11 13:19:39'); +INSERT INTO `sys_menu` VALUES (250, 240, '错误页', 'javascript:;', NULL, 0, 3, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-02-02 20:08:44', '2022-03-11 13:19:20'); +INSERT INTO `sys_menu` VALUES (251, 250, '500', '#/template/error/error-500', NULL, 0, 1, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-02-02 20:08:47', '2022-03-11 13:19:41'); +INSERT INTO `sys_menu` VALUES (252, 250, '404', '#/template/error/error-404', NULL, 0, 2, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-02-02 20:08:49', '2022-03-11 13:19:42'); +INSERT INTO `sys_menu` VALUES (253, 250, '403', '#/template/error/error-403', NULL, 0, 3, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-02-02 20:08:52', '2022-03-11 13:19:42'); +INSERT INTO `sys_menu` VALUES (254, 240, '登录页', 'javascript:;', NULL, 0, 4, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-02-02 20:09:54', '2022-03-11 13:19:25'); +INSERT INTO `sys_menu` VALUES (255, 254, '登录页', 'login.html', NULL, 0, 1, NULL, '_blank', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-02-02 20:09:58', '2022-03-11 13:26:56'); +INSERT INTO `sys_menu` VALUES (256, 254, '注册页', 'components/template/login/reg.html', NULL, 0, 2, NULL, '_blank', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-02-02 20:10:03', '2022-03-11 13:26:54'); +INSERT INTO `sys_menu` VALUES (257, 254, '忘记密码', 'components/template/login/forget.html', NULL, 0, 3, NULL, '_blank', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-02-02 20:06:39', '2022-03-11 13:26:52'); +INSERT INTO `sys_menu` VALUES (258, 240, '个人中心', '#/template/user-info', NULL, 0, 5, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-02-02 20:06:48', '2022-03-11 13:19:27'); +INSERT INTO `sys_menu` VALUES (259, 0, '扩展组件', 'javascript:;', NULL, 0, 3, NULL, '_self', 'layui-icon layui-icon-component', NULL, 0, NULL, NULL, 0, 3, '2021-02-02 20:10:52', '2022-03-11 13:20:43'); +INSERT INTO `sys_menu` VALUES (260, 259, '常用组件', 'javascript:;', NULL, 0, 1, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-02-02 20:10:55', '2022-03-11 13:20:49'); +INSERT INTO `sys_menu` VALUES (261, 260, '弹窗扩展', '#/plugin/basic/dialog', NULL, 0, 1, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-02-02 20:10:58', '2022-03-11 13:24:20'); +INSERT INTO `sys_menu` VALUES (262, 260, '下拉菜单', '#/plugin/basic/dropdown', NULL, 0, 2, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-02-02 20:11:00', '2022-03-11 13:24:21'); +INSERT INTO `sys_menu` VALUES (263, 260, '消息通知', '#/plugin/basic/notice', NULL, 0, 3, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-02-02 20:11:03', '2022-03-11 13:24:22'); +INSERT INTO `sys_menu` VALUES (264, 260, '标签输入', '#/plugin/basic/tagsInput', NULL, 0, 4, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-02-02 20:11:48', '2022-03-11 13:24:23'); +INSERT INTO `sys_menu` VALUES (265, 260, '级联选择', '#/plugin/basic/cascader', NULL, 0, 5, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-02-02 20:11:49', '2022-03-11 13:24:26'); +INSERT INTO `sys_menu` VALUES (266, 260, '步骤条', '#/plugin/basic/steps', NULL, 0, 6, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-02-02 20:13:49', '2022-03-11 13:24:27'); +INSERT INTO `sys_menu` VALUES (267, 259, '进阶组件', 'javascript:;', NULL, 0, 2, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-02-02 20:13:57', '2022-03-11 13:24:29'); +INSERT INTO `sys_menu` VALUES (268, 267, '打印插件', '#/plugin/advance/printer', NULL, 0, 1, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-10-05 11:25:15', '2022-03-11 13:28:43'); +INSERT INTO `sys_menu` VALUES (269, 267, '分割面板', '#/plugin/advance/split', NULL, 0, 2, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-10-05 11:32:12', '2022-03-11 13:28:44'); +INSERT INTO `sys_menu` VALUES (270, 267, '表单扩展', '#/plugin/advance/formX', NULL, 0, 3, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-02-02 20:15:01', '2022-03-11 13:24:33'); +INSERT INTO `sys_menu` VALUES (271, 267, '表格扩展', '#/plugin/advance/tableX', NULL, 0, 4, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-10-06 22:26:55', '2022-03-11 13:28:45'); +INSERT INTO `sys_menu` VALUES (272, 267, '数据列表', '#/plugin/advance/dataGrid', NULL, 0, 5, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-02-02 20:15:03', '2022-03-11 13:24:36'); +INSERT INTO `sys_menu` VALUES (273, 267, '鼠标右键', '#/plugin/advance/contextMenu', NULL, 0, 6, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-02-02 20:15:11', '2022-03-11 13:24:37'); +INSERT INTO `sys_menu` VALUES (274, 259, '其他组件', 'javascript:;', NULL, 0, 3, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-05-21 11:11:57', '2022-03-11 13:24:44'); +INSERT INTO `sys_menu` VALUES (275, 274, '圆形进度条', '#/plugin/other/circleProgress', '', 0, 1, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-02-02 20:15:18', '2022-03-11 13:24:45'); +INSERT INTO `sys_menu` VALUES (276, 274, '富文本编辑', '#/plugin/other/editor', NULL, 0, 2, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-10-05 11:14:28', '2022-03-11 13:28:47'); +INSERT INTO `sys_menu` VALUES (277, 274, '鼠标滚轮', '#/plugin/other/mousewheel', NULL, 0, 3, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-10-05 11:16:39', '2022-03-11 13:28:51'); +INSERT INTO `sys_menu` VALUES (278, 274, '更多组件', '#/plugin/other/other', NULL, 0, 4, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-10-05 11:18:35', '2022-03-11 13:28:53'); +INSERT INTO `sys_menu` VALUES (279, 259, '更多扩展', '#/plugin/more', NULL, 0, 4, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-10-05 11:20:35', '2022-03-11 13:28:54'); +INSERT INTO `sys_menu` VALUES (280, 0, '经典实例', 'javascript:;', NULL, 0, 4, NULL, '_self', 'layui-icon layui-icon-app', NULL, 0, NULL, NULL, 0, 3, '2021-10-05 11:13:35', '2022-03-11 13:28:56'); +INSERT INTO `sys_menu` VALUES (281, 280, '弹窗实例', '#/example/dialog', NULL, 0, 1, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-10-05 11:29:03', '2022-03-11 13:28:57'); +INSERT INTO `sys_menu` VALUES (282, 280, '课程管理', '#/example/course', NULL, 0, 2, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-10-05 11:29:56', '2022-03-11 13:28:59'); +INSERT INTO `sys_menu` VALUES (283, 280, '排课管理', '#/example/calendar', NULL, 0, 3, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-10-10 16:21:12', '2022-03-11 13:29:01'); +INSERT INTO `sys_menu` VALUES (284, 280, '添加试题', '#/example/question', NULL, 0, 4, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-10-10 16:21:45', '2022-03-11 13:29:02'); +INSERT INTO `sys_menu` VALUES (285, 280, '文件管理', '#/example/file', NULL, 0, 5, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-10-10 16:21:45', '2022-03-11 13:29:04'); +INSERT INTO `sys_menu` VALUES (286, 280, '表格CRUD', '#/example/table-crud', NULL, 0, 6, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-10-10 16:21:45', '2022-03-11 13:29:06'); +INSERT INTO `sys_menu` VALUES (287, 280, '路由传参', '#/example/router-demo', NULL, 0, 7, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-10-10 16:21:45', '2022-03-11 13:29:07'); +INSERT INTO `sys_menu` VALUES (288, 280, '多系统模式', 'side-more.html', NULL, 0, 8, NULL, '_blank', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-10-10 16:21:45', '2022-03-11 13:29:09'); +INSERT INTO `sys_menu` VALUES (289, 0, 'LayUI组件', 'javascript:;', NULL, 0, 5, NULL, '_self', 'layui-icon layui-icon-release', NULL, 0, NULL, NULL, 0, 3, '2021-10-05 11:13:35', '2022-03-11 13:29:11'); +INSERT INTO `sys_menu` VALUES (290, 289, '组件演示', '#/plugin/other/layui', NULL, 0, 1, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-10-05 11:29:03', '2022-03-11 13:29:12'); +INSERT INTO `sys_menu` VALUES (291, 289, 'layui文档', '#/layui/doc', 'https://www.layuion.com/doc/element/button.html#use', 0, 2, NULL, '_self', NULL, NULL, 0, NULL, NULL, 1, 3, '2021-10-05 11:29:56', '2022-03-11 16:19:31'); +INSERT INTO `sys_menu` VALUES (292, 0, '多级菜单', 'javascript:;', NULL, 0, 6, NULL, '_self', 'layui-icon layui-icon-unlink', NULL, 0, NULL, NULL, 0, 3, '2021-10-10 16:21:45', '2022-03-11 13:29:19'); +INSERT INTO `sys_menu` VALUES (293, 292, '二级菜单', 'javascript:;', NULL, 0, 1, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-10-10 16:21:45', '2022-03-11 14:07:48'); +INSERT INTO `sys_menu` VALUES (294, 293, '三级菜单', 'javascript:;', NULL, 0, 1, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-10-10 16:21:45', '2022-03-11 13:29:22'); +INSERT INTO `sys_menu` VALUES (295, 294, '四级菜单', 'javascript:;', NULL, 0, 1, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-10-10 16:21:45', '2022-03-11 13:29:45'); +INSERT INTO `sys_menu` VALUES (296, 295, '五级菜单', '#/eleadmin2', 'https://www.eleadmin.com', 0, 1, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 3, '2021-10-10 16:21:45', '2022-03-11 14:09:25'); +INSERT INTO `sys_menu` VALUES (297, 0, '一级菜单', '#/eleadmin', 'https://www.eleadmin.com', 0, 7, NULL, '_self', 'layui-icon layui-icon-unlink', NULL, 0, NULL, NULL, 0, 3, '2021-10-05 11:13:35', '2022-03-11 14:08:58'); +INSERT INTO `sys_menu` VALUES (298, 0, '路由传参', '#/example/router-param', NULL, 0, 8, NULL, '_self', NULL, NULL, 1, NULL, NULL, 0, 3, '2021-10-05 11:13:35', '2022-03-11 13:29:52'); +INSERT INTO `sys_menu` VALUES (299, 0, '开发管理(开发中)', '/assets', '', 0, 1000, '', '_self', 'audit-outlined', NULL, 1, NULL, '', 0, 5, '2022-07-27 02:11:41', '2022-08-03 17:34:48'); +INSERT INTO `sys_menu` VALUES (300, 0, '服务器管理', '/assets/server', '/assets/server', 0, 3, '', '_self', 'audit-outlined', NULL, 0, NULL, '', 0, 5, '2022-07-27 08:52:25', '2022-08-06 11:58:31'); +INSERT INTO `sys_menu` VALUES (301, 300, '查询', '', '', 1, 100, 'sys:assets:list', '_self', '', NULL, 0, NULL, '', 0, 5, '2022-07-27 08:55:10', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (302, 101, '系统设置', '/system/setting', '/system/setting', 0, 100, '', '_self', 'setting-outlined', NULL, 0, NULL, '', 0, 5, '2022-07-27 09:48:30', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (303, 0, '开发学堂(未)', '/college', '', 0, 14, '', '_self', 'interaction-outlined', NULL, 1, NULL, '', 0, 5, '2022-07-27 10:28:32', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (304, 303, '技术分享', '/college/sharing', '/college/sharing', 0, 0, '', '_self', 'interaction-outlined', NULL, 0, NULL, '', 0, 5, '2022-07-27 10:39:58', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (305, 304, '文章列表', '', '', 1, 100, 'sys:college:list', '_self', '', NULL, 0, NULL, '', 0, 5, '2022-07-27 10:50:46', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (306, 299, '链接链接', '/college/link', '/college/link', 0, 2, '', '_self', 'appstore-add-outlined', NULL, 0, NULL, '', 0, 5, '2022-07-27 10:55:34', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (307, 300, '修改', '', '', 1, 100, 'sys:assets:update', '_self', '', NULL, 0, NULL, '', 0, 5, '2022-07-27 18:36:25', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (308, 300, '删除', '', '', 1, 100, 'sys:assets:remove', '_self', '', NULL, 0, NULL, '', 0, 5, '2022-07-27 18:37:28', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (309, 300, '添加', '', '', 1, 100, 'sys:assets:save', '_self', '', NULL, 0, NULL, '', 0, 5, '2022-07-27 18:37:53', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (310, 306, '查询', '', '', 1, 100, 'sys:link:list', '_self', '', NULL, 0, NULL, '', 0, 5, '2022-07-28 20:42:26', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (311, 306, '添加', '', '', 1, 100, 'sys:link:save', '_self', '', NULL, 0, NULL, '', 0, 5, '2022-07-29 22:11:41', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (312, 306, '修改', '', '', 1, 100, 'sys:link:update', '_self', '', NULL, 0, NULL, '', 0, 5, '2022-07-29 22:12:54', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (313, 306, '删除', '', '', 1, 100, 'sys:link:remove', '_self', '', NULL, 0, NULL, '', 0, 5, '2022-07-29 22:13:31', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (314, 0, '网址导航', '/link', '/link', 0, 1, '', '_self', 'tag-outlined', NULL, 0, NULL, '', 0, 5, '2022-07-29 22:35:01', '2022-08-04 12:44:03'); +INSERT INTO `sys_menu` VALUES (315, 0, '客户管理', '/customer', '/customer/index', 0, 4, '', '_self', 'team-outlined', NULL, 0, NULL, '', 0, 5, '2022-07-30 00:12:54', '2022-08-04 12:43:15'); +INSERT INTO `sys_menu` VALUES (316, 0, '应用中心', '/appstore', '/appstore', 0, 15, '', '_self', 'appstore-outlined', NULL, 1, NULL, '', 0, 5, '2022-07-30 00:14:42', '2022-08-06 08:38:41'); +INSERT INTO `sys_menu` VALUES (317, 314, '查询权限', '', '', 1, 0, 'sys:link:list', '_self', '', NULL, 0, NULL, '', 1, 5, '2022-07-30 00:52:25', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (318, 299, '代码管理(未)', '/college/code', '/college/code', 0, 3, '', '_self', 'block-outlined', NULL, 0, NULL, '', 0, 5, '2022-07-30 02:28:18', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (319, 136, '应用商店', '/dashboard/appstore', '/dashboard/appstore', 0, 1, '', '_self', 'appstore-outlined', NULL, 0, NULL, '', 1, 5, '2022-07-31 13:52:42', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (320, 315, '查询', '', '', 1, 0, 'sys:customer:list', '_self', '', NULL, 0, NULL, '', 0, 5, '2022-07-31 18:41:22', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (321, 315, '修改', '', '', 1, 0, 'sys:customer:update', '_self', '', NULL, 0, NULL, '', 0, 5, '2022-07-31 18:41:45', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (322, 315, '添加', '', '', 1, 0, 'sys:customer:save', '_self', '', NULL, 0, NULL, '', 0, 5, '2022-07-31 18:42:23', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (323, 315, '删除', '', '', 1, 0, 'sys:customer:remove', '_self', '', NULL, 0, NULL, '', 0, 5, '2022-07-31 18:42:58', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (324, 299, '应用管理', '/assets/application', '/assets/application', 0, 2, '', '_self', 'appstore-outlined', NULL, 0, NULL, '', 0, 5, '2022-07-31 23:34:37', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (325, 324, '查询', '', '', 1, 0, 'sys:app:list', '_self', '', NULL, 0, NULL, '', 0, 5, '2022-07-31 23:49:20', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (326, 324, '添加', '', '', 1, 0, 'sys:app:save', '_self', '', NULL, 0, NULL, '', 0, 5, '2022-07-31 23:49:44', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (327, 324, '修改', '', '', 1, 0, 'sys:app:update', '_self', '', NULL, 0, NULL, '', 0, 5, '2022-07-31 23:50:09', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (328, 324, '删除', '', '', 1, 0, 'sys:app:remove', '_self', '', NULL, 0, NULL, '', 0, 5, '2022-07-31 23:50:25', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (329, 0, '项目管理', '/items', '/items', 0, 2, '', '_self', 'appstore-outlined', NULL, 0, NULL, '', 0, 5, '2022-08-01 11:21:02', '2022-08-06 11:58:25'); +INSERT INTO `sys_menu` VALUES (330, 0, '查询', '', '', 1, 0, 'sys:items:list', '_self', '', NULL, 0, NULL, '', 1, 5, '2022-08-01 11:21:46', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (331, 329, '查询', '', '', 1, 0, 'sys:items:list', '_self', '', NULL, 0, NULL, '', 0, 5, '2022-08-01 11:22:50', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (332, 329, '添加', '', '', 1, 0, 'sys:items:save', '_self', '', NULL, 0, NULL, '', 0, 5, '2022-08-01 11:23:15', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (333, 329, '修改', '', '', 1, 0, 'sys:items:update', '_self', '', NULL, 0, NULL, '', 0, 5, '2022-08-01 11:23:35', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (334, 329, '删除', '', '', 1, 0, 'sys:items:remove', '_self', '', NULL, 0, NULL, '', 0, 5, '2022-08-01 11:23:50', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (335, 329, '项目详情', '/assets/items/info', '/assets/items/info', 0, 0, '', '_self', '', NULL, 1, NULL, '', 0, 5, '2022-08-02 14:05:07', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (336, 316, '收银台', '/cashier', '', 0, 0, '', '_self', '', NULL, 0, NULL, '', 1, 5, '2022-08-02 17:21:53', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (337, 316, '海牛收银台', '/appstore/cashier', '/appstore/cashier', 0, 0, '', '_self', '', NULL, 1, NULL, '', 0, 5, '2022-08-02 17:37:51', '2022-08-03 17:14:42'); +INSERT INTO `sys_menu` VALUES (338, 337, '查询', '', '', 1, 0, 'sys:cashier:list', '_self', '', NULL, 0, NULL, '', 0, 5, '2022-08-02 19:29:18', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (339, 337, '添加', '', '', 1, 0, 'sys:cashier:save', '_self', '', NULL, 0, NULL, '', 0, 5, '2022-08-02 19:29:35', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (340, 337, '修改', '', '', 1, 0, 'sys:cashier:update', '_self', '', NULL, 0, NULL, '', 0, 5, '2022-08-02 19:29:54', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (341, 337, '删除', '', '', 1, 0, 'sys:cashier:remove', '_self', '', NULL, 0, NULL, '', 0, 5, '2022-08-02 19:30:09', '2022-08-03 13:56:06'); +INSERT INTO `sys_menu` VALUES (342, 101, '租户管理', '/system/tenant', '/system/tenant', 0, 12, '', '_self', 'team-outlined', NULL, 0, NULL, '', 0, 5, '2022-08-03 12:05:05', '2022-08-04 12:34:00'); +INSERT INTO `sys_menu` VALUES (343, 342, '查询', '', '', 1, 0, 'sys:tenant:list', '_self', '', NULL, 0, NULL, '', 0, 5, '2022-08-03 18:36:54', '2022-08-03 18:36:54'); +INSERT INTO `sys_menu` VALUES (344, 342, '添加', '', '', 1, 0, 'sys:tenant:save', '_self', '', NULL, 0, NULL, '', 0, 5, '2022-08-03 18:37:13', '2022-08-03 18:37:13'); +INSERT INTO `sys_menu` VALUES (345, 342, '修改', '', '', 1, 0, 'sys:tenant:update', '_self', '', NULL, 0, NULL, '', 0, 5, '2022-08-03 18:37:37', '2022-08-03 18:37:37'); +INSERT INTO `sys_menu` VALUES (346, 342, '删除', '', '', 1, 0, 'sys:tenant:remove', '_self', '', NULL, 0, NULL, '', 0, 5, '2022-08-03 18:38:12', '2022-08-03 18:38:12'); +INSERT INTO `sys_menu` VALUES (347, 314, '查询', '', '', 1, 0, 'sys:link:list', '_self', '', NULL, 0, NULL, '', 0, 5, '2022-08-04 12:49:55', '2022-08-04 12:49:55'); +INSERT INTO `sys_menu` VALUES (348, 314, '添加', '', '', 1, 0, 'sys:save', '_self', '', NULL, 0, NULL, '', 0, 5, '2022-08-04 12:50:10', '2022-08-04 12:50:10'); +INSERT INTO `sys_menu` VALUES (349, 314, '修改', '', '', 1, 0, 'sys:update', '_self', '', NULL, 0, NULL, '', 0, 5, '2022-08-04 12:50:25', '2022-08-04 12:50:25'); +INSERT INTO `sys_menu` VALUES (350, 314, '删除', '', '', 1, 0, 'sys:link:remove', '_self', '', NULL, 0, NULL, '', 0, 5, '2022-08-04 12:50:40', '2022-08-04 12:50:40'); +INSERT INTO `sys_menu` VALUES (351, 314, '字典', '', '', 1, 0, 'sys:dict:list', '_self', '', NULL, 0, NULL, '', 0, 5, '2022-08-04 13:14:08', '2022-08-04 13:14:08'); +INSERT INTO `sys_menu` VALUES (352, 299, '测试模块', '/demo', '/demo', 0, 0, '', '_self', 'home-outlined', NULL, 1, NULL, '', 0, 5, '2022-08-04 22:03:52', '2022-08-05 14:20:27'); +INSERT INTO `sys_menu` VALUES (353, 352, '查询', '', '', 1, 0, 'sys:demo:list', '_self', '', NULL, 0, NULL, '', 0, 5, '2022-08-04 22:05:24', '2022-08-04 22:05:24'); +INSERT INTO `sys_menu` VALUES (354, 352, '添加', '', '', 1, 0, 'sys:demo:save', '_self', '', NULL, 0, NULL, '', 0, 5, '2022-08-04 22:05:39', '2022-08-04 22:05:39'); +INSERT INTO `sys_menu` VALUES (355, 352, '修改', '', '', 1, 0, 'sys:demo:update', '_self', '', NULL, 0, NULL, '', 0, 5, '2022-08-04 22:05:56', '2022-08-04 22:05:56'); +INSERT INTO `sys_menu` VALUES (356, 352, '删除', '', '', 1, 0, 'sys:demo:remove', '_self', '', NULL, 0, NULL, '', 0, 5, '2022-08-04 22:06:17', '2022-08-04 22:06:17'); +INSERT INTO `sys_menu` VALUES (357, 0, '网址导航', '/link', '/link', 0, 1, '', '_self', 'tag-outlined', NULL, 0, NULL, '', 0, 11, '2022-07-29 22:35:01', '2022-08-04 12:44:03'); +INSERT INTO `sys_menu` VALUES (358, 161, 'markdown', '/extension/markdown', '/extension/markdown', 0, 19, '', '_self', 'picLeft-outlined', NULL, 0, NULL, '', 0, 5, '2022-08-08 18:10:37', '2022-08-08 18:10:37'); +INSERT INTO `sys_menu` VALUES (359, 0, '系统管理', '/system', NULL, 0, 1, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 11, '2020-02-26 12:51:23', '2022-03-11 16:47:36'); +INSERT INTO `sys_menu` VALUES (360, 0, '用户管理', '/system/user', NULL, 0, 1, NULL, '_self', NULL, NULL, 0, NULL, NULL, 0, 11, '2020-02-26 12:51:23', '2022-03-11 16:47:36'); +COMMIT; + +-- ---------------------------- +-- Table structure for sys_operation_record +-- ---------------------------- +DROP TABLE IF EXISTS `sys_operation_record`; +CREATE TABLE `sys_operation_record` ( + `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', + `user_id` int(11) DEFAULT NULL COMMENT '用户id', + `module` varchar(200) DEFAULT NULL COMMENT '操作模块', + `description` varchar(200) DEFAULT NULL COMMENT '操作功能', + `url` varchar(200) DEFAULT NULL COMMENT '请求地址', + `request_method` varchar(200) DEFAULT NULL COMMENT '请求方式', + `method` varchar(200) DEFAULT NULL COMMENT '调用方法', + `params` varchar(1000) DEFAULT NULL COMMENT '请求参数', + `result` varchar(1000) DEFAULT NULL COMMENT '返回结果', + `error` varchar(1000) DEFAULT NULL COMMENT '异常信息', + `comments` varchar(400) DEFAULT NULL COMMENT '备注', + `spend_time` int(11) DEFAULT NULL COMMENT '消耗时间, 单位毫秒', + `os` varchar(50) DEFAULT NULL COMMENT '操作系统', + `device` varchar(50) DEFAULT NULL COMMENT '设备名称', + `browser` varchar(50) DEFAULT NULL COMMENT '浏览器类型', + `ip` varchar(200) DEFAULT NULL COMMENT 'ip地址', + `status` int(11) NOT NULL DEFAULT '0' COMMENT '状态, 0成功, 1异常', + `tenant_id` int(11) NOT NULL DEFAULT '1' COMMENT '租户id', + `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '操作时间', + `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', + PRIMARY KEY (`id`) USING BTREE, + KEY `user_id` (`user_id`) USING BTREE, + KEY `tenant_id` (`tenant_id`) USING BTREE, + CONSTRAINT `sys_operation_record_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `sys_user` (`user_id`) ON DELETE CASCADE, + CONSTRAINT `sys_operation_record_ibfk_2` FOREIGN KEY (`tenant_id`) REFERENCES `sys_tenant` (`tenant_id`) ON DELETE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=13598 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='操作日志'; + + +-- ---------------------------- +-- Table structure for sys_organization +-- ---------------------------- +DROP TABLE IF EXISTS `sys_organization`; +CREATE TABLE `sys_organization` ( + `organization_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '机构id', + `parent_id` int(11) NOT NULL DEFAULT '0' COMMENT '上级id, 0是顶级', + `organization_name` varchar(200) NOT NULL COMMENT '机构名称', + `organization_full_name` varchar(200) DEFAULT NULL COMMENT '机构全称', + `organization_code` varchar(100) DEFAULT NULL COMMENT '机构代码', + `organization_type` varchar(100) NOT NULL COMMENT '机构类型', + `leader_id` int(11) DEFAULT NULL COMMENT '负责人id', + `sort_number` int(11) NOT NULL DEFAULT '1' COMMENT '排序号', + `comments` varchar(400) DEFAULT NULL COMMENT '备注', + `deleted` int(1) NOT NULL DEFAULT '0' COMMENT '是否删除, 0否, 1是', + `tenant_id` int(11) NOT NULL DEFAULT '1' COMMENT '租户id', + `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', + PRIMARY KEY (`organization_id`) USING BTREE, + KEY `leader_id` (`leader_id`) USING BTREE, + KEY `tenant_id` (`tenant_id`) USING BTREE, + CONSTRAINT `sys_organization_ibfk_1` FOREIGN KEY (`leader_id`) REFERENCES `sys_user` (`user_id`) ON DELETE SET NULL, + CONSTRAINT `sys_organization_ibfk_2` FOREIGN KEY (`tenant_id`) REFERENCES `sys_tenant` (`tenant_id`) ON DELETE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=43 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='组织机构'; + +-- ---------------------------- +-- Records of sys_organization +-- ---------------------------- +BEGIN; +INSERT INTO `sys_organization` VALUES (1, 0, 'XXX公司', '武汉易云智科技有限公司', '91420111MA49EPRW0A', '1', NULL, 1, NULL, 0, 1, '2020-03-15 13:14:55', '2022-03-11 22:47:18'); +INSERT INTO `sys_organization` VALUES (2, 1, '研发部', '研发部', NULL, '3', NULL, 2, NULL, 0, 1, '2020-03-15 13:15:16', '2022-03-11 22:47:19'); +INSERT INTO `sys_organization` VALUES (3, 2, '高教组', '高等教育行业项目组', NULL, '4', NULL, 3, NULL, 0, 1, '2020-03-15 13:15:45', '2022-03-11 22:47:21'); +INSERT INTO `sys_organization` VALUES (4, 2, '政务组', '政务行业项目组', NULL, '4', NULL, 4, NULL, 0, 1, '2020-03-15 13:16:15', '2022-03-11 22:47:22'); +INSERT INTO `sys_organization` VALUES (5, 2, '制造组', '生产制造行业项目组', NULL, '4', NULL, 5, NULL, 0, 1, '2020-03-15 13:16:37', '2022-03-11 22:47:23'); +INSERT INTO `sys_organization` VALUES (6, 2, '仿真组', '虚拟仿真行业项目组', NULL, '4', NULL, 6, NULL, 0, 1, '2020-03-15 13:16:57', '2022-03-11 22:47:25'); +INSERT INTO `sys_organization` VALUES (7, 1, '测试部', '测试部', NULL, '3', NULL, 7, NULL, 0, 1, '2020-03-15 13:17:19', '2022-03-11 22:47:27'); +INSERT INTO `sys_organization` VALUES (8, 1, '设计部', 'UI设计部门', NULL, '3', NULL, 8, NULL, 0, 1, '2020-03-15 13:17:56', '2022-03-11 22:47:28'); +INSERT INTO `sys_organization` VALUES (9, 1, '市场部', '市场部', NULL, '3', NULL, 9, NULL, 0, 1, '2020-03-15 13:18:15', '2022-03-11 22:47:30'); +INSERT INTO `sys_organization` VALUES (10, 1, '运维部', '运维部', NULL, '3', NULL, 10, NULL, 0, 1, '2021-10-15 16:34:05', '2021-10-15 16:34:05'); +INSERT INTO `sys_organization` VALUES (11, 0, '南宁网宿科技', '南宁市网宿信息科技有限公司', NULL, '1', NULL, 1, NULL, 0, 5, '2020-03-15 13:14:55', '2022-08-03 13:55:49'); +INSERT INTO `sys_organization` VALUES (12, 11, '技术部', '技术部', NULL, '3', NULL, 2, NULL, 0, 5, '2020-03-15 13:15:16', '2022-08-03 13:55:49'); +INSERT INTO `sys_organization` VALUES (13, 12, '高教组', '高等教育行业项目组', NULL, '4', NULL, 3, NULL, 1, 5, '2020-03-15 13:15:45', '2022-08-03 13:55:49'); +INSERT INTO `sys_organization` VALUES (14, 12, '政务组', '政务行业项目组', NULL, '4', NULL, 4, NULL, 1, 5, '2020-03-15 13:16:15', '2022-08-03 13:55:49'); +INSERT INTO `sys_organization` VALUES (15, 12, '制造组', '生产制造行业项目组', NULL, '4', NULL, 5, NULL, 1, 5, '2020-03-15 13:16:37', '2022-08-03 13:55:49'); +INSERT INTO `sys_organization` VALUES (16, 12, '仿真组', '虚拟仿真行业项目组', NULL, '4', NULL, 6, NULL, 1, 5, '2020-03-15 13:16:57', '2022-08-03 13:55:49'); +INSERT INTO `sys_organization` VALUES (17, 11, '测试部', '测试部', NULL, '3', NULL, 7, NULL, 1, 5, '2020-03-15 13:17:19', '2022-08-03 13:55:49'); +INSERT INTO `sys_organization` VALUES (18, 11, '设计部', '设计部', NULL, '3', NULL, 8, NULL, 1, 5, '2020-03-15 13:17:56', '2022-08-03 13:55:49'); +INSERT INTO `sys_organization` VALUES (19, 11, '市场部', '市场部', NULL, '3', NULL, 9, NULL, 0, 5, '2020-03-15 13:18:15', '2022-08-03 13:55:49'); +INSERT INTO `sys_organization` VALUES (20, 11, '运维部', '运维部', NULL, '3', NULL, 10, NULL, 1, 5, '2021-10-15 16:35:15', '2022-08-03 13:55:49'); +INSERT INTO `sys_organization` VALUES (21, 0, 'XXX公司', '武汉易云智科技有限公司', '91420111MA49EPRW0A', '1', NULL, 1, NULL, 0, 3, '2020-03-15 13:14:55', '2022-03-11 22:47:50'); +INSERT INTO `sys_organization` VALUES (22, 21, '研发部', '研发部', NULL, '3', NULL, 2, NULL, 0, 3, '2020-03-15 13:15:16', '2022-03-11 22:47:52'); +INSERT INTO `sys_organization` VALUES (23, 22, '高教组', '高等教育行业项目组', NULL, '4', NULL, 3, NULL, 0, 3, '2020-03-15 13:15:45', '2022-03-11 22:47:53'); +INSERT INTO `sys_organization` VALUES (24, 22, '政务组', '政务行业项目组', NULL, '4', NULL, 4, NULL, 0, 3, '2020-03-15 13:16:15', '2022-03-11 22:47:54'); +INSERT INTO `sys_organization` VALUES (25, 22, '制造组', '生产制造行业项目组', NULL, '4', NULL, 5, NULL, 0, 3, '2020-03-15 13:16:37', '2022-03-11 22:47:58'); +INSERT INTO `sys_organization` VALUES (26, 22, '仿真组', '虚拟仿真行业项目组', NULL, '4', NULL, 6, NULL, 0, 3, '2020-03-15 13:16:57', '2022-03-11 22:47:56'); +INSERT INTO `sys_organization` VALUES (27, 21, '测试部', '测试部', NULL, '3', NULL, 7, NULL, 0, 3, '2020-03-15 13:17:19', '2022-03-11 22:48:02'); +INSERT INTO `sys_organization` VALUES (28, 21, '设计部', 'UI设计部门', NULL, '3', NULL, 8, NULL, 0, 3, '2020-03-15 13:17:56', '2022-03-11 22:48:03'); +INSERT INTO `sys_organization` VALUES (29, 21, '市场部', '市场部', NULL, '3', NULL, 9, NULL, 0, 3, '2020-03-15 13:18:15', '2022-03-11 22:48:04'); +INSERT INTO `sys_organization` VALUES (30, 21, '运维部', '运维部', NULL, '3', NULL, 10, NULL, 0, 3, '2021-10-15 16:34:05', '2021-10-15 16:34:05'); +INSERT INTO `sys_organization` VALUES (31, 21, '测试部', '测试部', NULL, '3', NULL, 7, NULL, 0, 3, '2020-03-15 13:17:19', '2021-10-15 16:34:16'); +INSERT INTO `sys_organization` VALUES (32, 11, '财务部', '财务部', '', '3', NULL, 10, '', 0, 5, '2022-07-29 19:36:16', '2022-08-03 13:55:49'); +INSERT INTO `sys_organization` VALUES (33, 0, 'XXX公司', '武汉易云智科技有限公司', NULL, '1', NULL, 1, NULL, 0, 2, '2020-03-15 13:14:55', '2022-03-11 22:47:32'); +INSERT INTO `sys_organization` VALUES (34, 11, '研发部', '研发部', NULL, '3', NULL, 2, NULL, 0, 2, '2020-03-15 13:15:16', '2022-03-11 22:47:35'); +INSERT INTO `sys_organization` VALUES (35, 12, '研发一组', '研发一组', NULL, '4', NULL, 3, NULL, 0, 2, '2020-03-15 13:15:45', '2022-07-20 15:11:06'); +INSERT INTO `sys_organization` VALUES (36, 12, '研发二组', '研发二组', NULL, '4', NULL, 4, NULL, 0, 2, '2020-03-15 13:16:15', '2022-07-20 15:11:10'); +INSERT INTO `sys_organization` VALUES (37, 12, '研发三组', '研发三组', NULL, '4', NULL, 5, NULL, 0, 2, '2020-03-15 13:16:37', '2022-07-20 15:11:13'); +INSERT INTO `sys_organization` VALUES (38, 12, '研发四组', '研发四组', NULL, '4', NULL, 6, NULL, 0, 2, '2020-03-15 13:16:57', '2022-07-20 15:11:16'); +INSERT INTO `sys_organization` VALUES (39, 11, '测试部', '测试部', NULL, '3', NULL, 7, NULL, 0, 2, '2020-03-15 13:17:19', '2022-03-11 22:47:43'); +INSERT INTO `sys_organization` VALUES (40, 11, '设计部', '设计部', NULL, '3', NULL, 8, NULL, 0, 2, '2020-03-15 13:17:56', '2022-03-11 22:47:44'); +INSERT INTO `sys_organization` VALUES (41, 11, '市场部', '市场部', NULL, '3', NULL, 9, NULL, 0, 2, '2020-03-15 13:18:15', '2022-03-11 22:47:46'); +INSERT INTO `sys_organization` VALUES (42, 11, '运维部', '运维部', NULL, '3', NULL, 10, NULL, 0, 2, '2021-10-15 16:35:15', '2022-03-11 22:47:49'); +COMMIT; + +-- ---------------------------- +-- Table structure for sys_role +-- ---------------------------- +DROP TABLE IF EXISTS `sys_role`; +CREATE TABLE `sys_role` ( + `role_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '角色id', + `role_name` varchar(200) NOT NULL COMMENT '角色名称', + `role_code` varchar(200) NOT NULL COMMENT '角色标识', + `comments` varchar(400) DEFAULT NULL COMMENT '备注', + `deleted` int(1) NOT NULL DEFAULT '0' COMMENT '是否删除, 0否, 1是', + `tenant_id` int(11) NOT NULL DEFAULT '1' COMMENT '租户id', + `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', + PRIMARY KEY (`role_id`) USING BTREE, + KEY `tenant_id` (`tenant_id`) USING BTREE, + CONSTRAINT `sys_role_ibfk_1` FOREIGN KEY (`tenant_id`) REFERENCES `sys_tenant` (`tenant_id`) ON DELETE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='角色'; + +-- ---------------------------- +-- Records of sys_role +-- ---------------------------- +BEGIN; +INSERT INTO `sys_role` VALUES (1, '管理员', 'admin', '管理员', 0, 1, '2020-02-26 15:18:37', '2020-03-21 15:15:54'); +INSERT INTO `sys_role` VALUES (2, '普通用户', 'user', '普通用户', 0, 1, '2020-02-26 15:18:52', '2020-03-21 15:16:02'); +INSERT INTO `sys_role` VALUES (3, '游客', 'guest', '游客', 0, 1, '2020-02-26 15:19:49', '2020-03-21 15:16:57'); +INSERT INTO `sys_role` VALUES (4, '超级管理员', 'superadmin', '超级管理员', 1, 5, '2020-02-26 15:18:37', '2022-08-03 13:55:33'); +INSERT INTO `sys_role` VALUES (5, '公司职员', 'user', '普通用户', 0, 5, '2020-02-26 15:18:52', '2022-08-04 12:47:41'); +INSERT INTO `sys_role` VALUES (6, '游客', 'guest', '游客', 0, 5, '2020-02-26 15:19:49', '2022-08-03 13:55:33'); +INSERT INTO `sys_role` VALUES (7, '管理员', 'admin', '管理员', 0, 3, '2020-02-26 15:18:37', '2020-03-21 15:15:54'); +INSERT INTO `sys_role` VALUES (8, '普通用户', 'user', '普通用户', 0, 3, '2020-02-26 15:18:52', '2020-03-21 15:16:02'); +INSERT INTO `sys_role` VALUES (9, '游客', 'guest', '游客', 0, 3, '2020-02-26 15:19:49', '2020-03-21 15:16:57'); +INSERT INTO `sys_role` VALUES (10, '财务', 'finance', '财务', 1, 5, '2022-07-27 21:25:19', '2022-08-03 13:55:33'); +INSERT INTO `sys_role` VALUES (11, '管理员', 'admin', '管理员', 0, 5, '2022-07-29 16:05:11', '2022-08-03 13:55:33'); +INSERT INTO `sys_role` VALUES (12, '开发人员', 'dev', '开发人员', 0, 5, '2022-07-30 00:15:26', '2022-08-03 13:55:33'); +INSERT INTO `sys_role` VALUES (13, '管理员', 'admin', '管理员', 0, 1, '2020-02-26 15:18:37', '2020-03-21 15:15:54'); +INSERT INTO `sys_role` VALUES (14, '普通用户', 'user', '普通用户', 0, 1, '2020-02-26 15:18:52', '2020-03-21 15:16:02'); +INSERT INTO `sys_role` VALUES (15, '游客', 'guest', '游客', 0, 1, '2020-02-26 15:19:49', '2020-03-21 15:16:57'); +INSERT INTO `sys_role` VALUES (16, '管理员', 'admin', '管理员', 0, 2, '2020-02-26 15:18:37', '2020-03-21 15:15:54'); +INSERT INTO `sys_role` VALUES (17, '普通用户', 'user', '普通用户', 0, 2, '2020-02-26 15:18:52', '2020-03-21 15:16:02'); +INSERT INTO `sys_role` VALUES (18, '游客', 'guest', '游客', 0, 2, '2020-02-26 15:19:49', '2020-03-21 15:16:57'); +INSERT INTO `sys_role` VALUES (19, '管理员', 'admin', '管理员', 0, 3, '2020-02-26 15:18:37', '2020-03-21 15:15:54'); +INSERT INTO `sys_role` VALUES (20, '普通用户', 'user', '普通用户', 0, 3, '2020-02-26 15:18:52', '2020-03-21 15:16:02'); +INSERT INTO `sys_role` VALUES (21, '游客', 'guest', '游客', 0, 3, '2020-02-26 15:19:49', '2020-03-21 15:16:57'); +INSERT INTO `sys_role` VALUES (22, '管理员', 'admin', '管理员', 0, 11, '2022-08-05 18:23:31', '2022-08-05 18:23:36'); +COMMIT; + +-- ---------------------------- +-- Table structure for sys_role_menu +-- ---------------------------- +DROP TABLE IF EXISTS `sys_role_menu`; +CREATE TABLE `sys_role_menu` ( + `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id', + `role_id` int(11) NOT NULL COMMENT '角色id', + `menu_id` int(11) NOT NULL COMMENT '菜单id', + `tenant_id` int(11) NOT NULL DEFAULT '1' COMMENT '租户id', + `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', + PRIMARY KEY (`id`) USING BTREE, + KEY `FK_sys_role_permission_role` (`role_id`) USING BTREE, + KEY `menu_id` (`menu_id`) USING BTREE, + KEY `tenant_id` (`tenant_id`) USING BTREE, + CONSTRAINT `sys_role_menu_ibfk_1` FOREIGN KEY (`role_id`) REFERENCES `sys_role` (`role_id`) ON DELETE CASCADE, + CONSTRAINT `sys_role_menu_ibfk_2` FOREIGN KEY (`menu_id`) REFERENCES `sys_menu` (`menu_id`) ON DELETE CASCADE, + CONSTRAINT `sys_role_menu_ibfk_3` FOREIGN KEY (`tenant_id`) REFERENCES `sys_tenant` (`tenant_id`) ON DELETE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=5192 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='角色权限'; + +-- ---------------------------- +-- Records of sys_role_menu +-- ---------------------------- +BEGIN; +INSERT INTO `sys_role_menu` VALUES (1, 1, 1, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (2, 1, 2, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (3, 1, 3, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (4, 1, 4, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (5, 1, 5, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (6, 1, 6, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (7, 1, 7, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (8, 1, 8, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (9, 1, 9, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (10, 1, 10, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (11, 1, 11, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (12, 1, 12, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (13, 1, 13, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (14, 1, 14, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (15, 1, 15, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (16, 1, 16, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (17, 1, 17, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (18, 1, 18, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (19, 1, 19, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (20, 1, 20, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (21, 1, 21, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (22, 1, 22, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (23, 1, 23, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (24, 1, 24, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (25, 1, 25, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (26, 1, 26, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (27, 1, 27, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (28, 1, 28, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (29, 1, 29, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (30, 1, 30, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (31, 1, 31, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (32, 1, 32, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (33, 1, 33, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (34, 1, 34, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (35, 1, 35, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (36, 1, 36, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (37, 1, 37, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (38, 1, 38, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (39, 1, 39, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (40, 1, 40, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (41, 1, 41, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (42, 1, 42, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (43, 1, 43, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (44, 1, 44, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (45, 1, 45, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (46, 1, 46, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (47, 1, 47, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (48, 1, 48, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (49, 1, 49, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (50, 1, 50, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (51, 1, 51, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (52, 1, 52, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (53, 1, 53, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (54, 1, 54, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (55, 1, 55, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (56, 1, 56, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (57, 1, 57, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (58, 1, 58, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (59, 1, 59, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (60, 1, 60, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (61, 1, 61, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (62, 1, 62, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (63, 1, 63, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (64, 1, 64, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (65, 1, 65, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (66, 1, 66, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (67, 1, 67, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (68, 1, 68, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (69, 1, 69, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (70, 1, 70, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (71, 1, 71, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (72, 1, 72, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (73, 1, 73, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (74, 1, 74, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (75, 1, 75, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (76, 1, 76, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (77, 1, 77, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (78, 1, 78, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (79, 1, 79, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (80, 1, 80, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (81, 1, 81, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (82, 1, 82, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (83, 1, 83, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (84, 1, 84, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (85, 1, 85, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (86, 1, 86, 1, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (87, 1, 87, 1, '2022-03-11 22:49:38', '2022-03-11 22:49:38'); +INSERT INTO `sys_role_menu` VALUES (88, 1, 88, 1, '2022-03-11 22:49:43', '2022-03-11 22:49:43'); +INSERT INTO `sys_role_menu` VALUES (89, 1, 89, 1, '2022-03-11 22:49:48', '2022-03-11 22:49:48'); +INSERT INTO `sys_role_menu` VALUES (201, 7, 201, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (202, 7, 202, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (203, 7, 203, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (204, 7, 204, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (205, 7, 205, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (206, 7, 206, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (207, 7, 207, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (208, 7, 208, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (209, 7, 209, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (210, 7, 210, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (211, 7, 211, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (212, 7, 212, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (213, 7, 213, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (214, 7, 214, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (215, 7, 215, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (216, 7, 216, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (217, 7, 217, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (218, 7, 218, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (219, 7, 219, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (220, 7, 220, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (221, 7, 221, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (222, 7, 222, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (223, 7, 223, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (224, 7, 224, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (225, 7, 225, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (226, 7, 226, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (227, 7, 227, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (228, 7, 228, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (229, 7, 229, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (230, 7, 230, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (231, 7, 231, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (232, 7, 232, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (233, 7, 233, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (234, 7, 234, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (235, 7, 235, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (236, 7, 236, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (237, 7, 237, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (238, 7, 238, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (239, 7, 239, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (240, 7, 240, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (241, 7, 241, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (242, 7, 242, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (243, 7, 243, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (244, 7, 244, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (245, 7, 245, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (246, 7, 246, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (247, 7, 247, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (248, 7, 248, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (249, 7, 249, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (250, 7, 250, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (251, 7, 251, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (252, 7, 252, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (253, 7, 253, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (254, 7, 254, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (255, 7, 255, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (256, 7, 256, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (257, 7, 257, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (258, 7, 258, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (259, 7, 259, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (260, 7, 260, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (261, 7, 261, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (262, 7, 262, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (263, 7, 263, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (264, 7, 264, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (265, 7, 265, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (266, 7, 266, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (267, 7, 267, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (268, 7, 268, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (269, 7, 269, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (270, 7, 270, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (271, 7, 271, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (272, 7, 272, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (273, 7, 273, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (274, 7, 274, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (275, 7, 275, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (276, 7, 276, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (277, 7, 277, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (278, 7, 278, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (279, 7, 279, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (280, 7, 280, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (281, 7, 281, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (282, 7, 282, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (283, 7, 283, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (284, 7, 284, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (285, 7, 285, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (286, 7, 286, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (287, 7, 287, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (288, 7, 288, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (289, 7, 289, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (290, 7, 290, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (291, 7, 291, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (292, 7, 292, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (293, 7, 293, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (294, 7, 294, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (295, 7, 295, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (296, 7, 296, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (297, 7, 297, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (298, 7, 298, 3, '2021-11-05 17:45:05', '2021-11-05 17:45:05'); +INSERT INTO `sys_role_menu` VALUES (2041, 4, 314, 5, '2022-07-31 13:55:01', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2042, 4, 136, 5, '2022-07-31 13:55:01', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2043, 4, 317, 5, '2022-07-31 13:55:02', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2044, 4, 319, 5, '2022-07-31 13:55:02', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2045, 4, 158, 5, '2022-07-31 13:55:02', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2046, 4, 159, 5, '2022-07-31 13:55:02', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2047, 4, 160, 5, '2022-07-31 13:55:02', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2048, 4, 299, 5, '2022-07-31 13:55:02', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2049, 4, 318, 5, '2022-07-31 13:55:02', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2050, 4, 300, 5, '2022-07-31 13:55:02', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2051, 4, 301, 5, '2022-07-31 13:55:02', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2052, 4, 307, 5, '2022-07-31 13:55:02', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2053, 4, 308, 5, '2022-07-31 13:55:02', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2054, 4, 309, 5, '2022-07-31 13:55:02', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2055, 4, 303, 5, '2022-07-31 13:55:02', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2056, 4, 304, 5, '2022-07-31 13:55:02', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2057, 4, 305, 5, '2022-07-31 13:55:02', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2058, 4, 306, 5, '2022-07-31 13:55:02', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2059, 4, 310, 5, '2022-07-31 13:55:02', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2060, 4, 311, 5, '2022-07-31 13:55:02', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2061, 4, 312, 5, '2022-07-31 13:55:02', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2062, 4, 313, 5, '2022-07-31 13:55:02', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2063, 4, 102, 5, '2022-07-31 13:55:02', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2064, 4, 101, 5, '2022-07-31 13:55:02', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2065, 4, 103, 5, '2022-07-31 13:55:02', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2066, 4, 104, 5, '2022-07-31 13:55:02', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2067, 4, 105, 5, '2022-07-31 13:55:02', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2068, 4, 106, 5, '2022-07-31 13:55:02', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2069, 4, 108, 5, '2022-07-31 13:55:02', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2070, 4, 107, 5, '2022-07-31 13:55:02', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2071, 4, 113, 5, '2022-07-31 13:55:02', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2072, 4, 112, 5, '2022-07-31 13:55:02', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2073, 4, 122, 5, '2022-07-31 13:55:02', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2074, 4, 123, 5, '2022-07-31 13:55:02', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2075, 4, 124, 5, '2022-07-31 13:55:02', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2076, 4, 125, 5, '2022-07-31 13:55:02', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2077, 4, 126, 5, '2022-07-31 13:55:02', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2078, 4, 117, 5, '2022-07-31 13:55:02', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2079, 4, 118, 5, '2022-07-31 13:55:02', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2080, 4, 119, 5, '2022-07-31 13:55:02', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2081, 4, 120, 5, '2022-07-31 13:55:02', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2082, 4, 121, 5, '2022-07-31 13:55:02', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2083, 4, 129, 5, '2022-07-31 13:55:02', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2084, 4, 130, 5, '2022-07-31 13:55:02', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2085, 4, 131, 5, '2022-07-31 13:55:02', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2086, 4, 132, 5, '2022-07-31 13:55:02', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2087, 4, 127, 5, '2022-07-31 13:55:02', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2088, 4, 128, 5, '2022-07-31 13:55:03', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2089, 4, 135, 5, '2022-07-31 13:55:03', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2090, 4, 133, 5, '2022-07-31 13:55:03', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2091, 4, 134, 5, '2022-07-31 13:55:03', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (2092, 4, 302, 5, '2022-07-31 13:55:03', '2022-08-03 13:55:39'); +INSERT INTO `sys_role_menu` VALUES (4669, 6, 351, 5, '2022-08-04 13:14:41', '2022-08-04 13:14:41'); +INSERT INTO `sys_role_menu` VALUES (4670, 6, 314, 5, '2022-08-04 13:14:41', '2022-08-04 13:14:41'); +INSERT INTO `sys_role_menu` VALUES (4671, 6, 158, 5, '2022-08-04 13:14:41', '2022-08-04 13:14:41'); +INSERT INTO `sys_role_menu` VALUES (4672, 6, 159, 5, '2022-08-04 13:14:41', '2022-08-04 13:14:41'); +INSERT INTO `sys_role_menu` VALUES (4673, 6, 160, 5, '2022-08-04 13:14:41', '2022-08-04 13:14:41'); +INSERT INTO `sys_role_menu` VALUES (4727, 5, 347, 5, '2022-08-04 17:11:52', '2022-08-04 17:11:52'); +INSERT INTO `sys_role_menu` VALUES (4728, 5, 314, 5, '2022-08-04 17:11:52', '2022-08-04 17:11:52'); +INSERT INTO `sys_role_menu` VALUES (4729, 5, 351, 5, '2022-08-04 17:11:52', '2022-08-04 17:11:52'); +INSERT INTO `sys_role_menu` VALUES (4730, 5, 301, 5, '2022-08-04 17:11:52', '2022-08-04 17:11:52'); +INSERT INTO `sys_role_menu` VALUES (4731, 5, 300, 5, '2022-08-04 17:11:52', '2022-08-04 17:11:52'); +INSERT INTO `sys_role_menu` VALUES (4732, 5, 331, 5, '2022-08-04 17:11:52', '2022-08-04 17:11:52'); +INSERT INTO `sys_role_menu` VALUES (4733, 5, 329, 5, '2022-08-04 17:11:52', '2022-08-04 17:11:52'); +INSERT INTO `sys_role_menu` VALUES (4734, 5, 332, 5, '2022-08-04 17:11:52', '2022-08-04 17:11:52'); +INSERT INTO `sys_role_menu` VALUES (4735, 5, 333, 5, '2022-08-04 17:11:53', '2022-08-04 17:11:53'); +INSERT INTO `sys_role_menu` VALUES (4736, 5, 335, 5, '2022-08-04 17:11:53', '2022-08-04 17:11:53'); +INSERT INTO `sys_role_menu` VALUES (4737, 5, 303, 5, '2022-08-04 17:11:53', '2022-08-04 17:11:53'); +INSERT INTO `sys_role_menu` VALUES (4738, 5, 304, 5, '2022-08-04 17:11:53', '2022-08-04 17:11:53'); +INSERT INTO `sys_role_menu` VALUES (4739, 5, 305, 5, '2022-08-04 17:11:53', '2022-08-04 17:11:53'); +INSERT INTO `sys_role_menu` VALUES (4740, 5, 158, 5, '2022-08-04 17:11:53', '2022-08-04 17:11:53'); +INSERT INTO `sys_role_menu` VALUES (4741, 5, 159, 5, '2022-08-04 17:11:53', '2022-08-04 17:11:53'); +INSERT INTO `sys_role_menu` VALUES (4742, 5, 160, 5, '2022-08-04 17:11:53', '2022-08-04 17:11:53'); +INSERT INTO `sys_role_menu` VALUES (4743, 5, 310, 5, '2022-08-04 17:11:53', '2022-08-04 17:11:53'); +INSERT INTO `sys_role_menu` VALUES (4744, 5, 299, 5, '2022-08-04 17:11:53', '2022-08-04 17:11:53'); +INSERT INTO `sys_role_menu` VALUES (4745, 5, 306, 5, '2022-08-04 17:11:53', '2022-08-04 17:11:53'); +INSERT INTO `sys_role_menu` VALUES (4829, 4, 101, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4830, 4, 102, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4831, 4, 103, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4832, 4, 104, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4833, 4, 105, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4834, 4, 106, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4835, 4, 107, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4836, 4, 108, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4837, 4, 109, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4838, 4, 110, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4839, 4, 111, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4840, 4, 112, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4841, 4, 113, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4842, 4, 114, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4843, 4, 115, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4844, 4, 116, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4845, 4, 117, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4846, 4, 118, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4847, 4, 119, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4848, 4, 120, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4849, 4, 121, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4850, 4, 122, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4851, 4, 123, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4852, 4, 124, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4853, 4, 125, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4854, 4, 126, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4855, 4, 127, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4856, 4, 128, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4857, 4, 129, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4858, 4, 130, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4859, 4, 131, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4860, 4, 132, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4861, 4, 133, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4862, 4, 134, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4863, 4, 135, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4864, 4, 136, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4865, 4, 137, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4866, 4, 138, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4867, 4, 139, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4868, 4, 140, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4869, 4, 141, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4870, 4, 142, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4871, 4, 143, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4872, 4, 144, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4873, 4, 145, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4874, 4, 146, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4875, 4, 147, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4876, 4, 148, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4877, 4, 149, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4878, 4, 150, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4879, 4, 151, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4880, 4, 152, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4881, 4, 153, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4882, 4, 154, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4883, 4, 155, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4884, 4, 156, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4885, 4, 157, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4886, 4, 158, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4887, 4, 159, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4888, 4, 160, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4889, 4, 161, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4890, 4, 162, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4891, 4, 163, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4892, 4, 164, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4893, 4, 165, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4894, 4, 166, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4895, 4, 167, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4896, 4, 168, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4897, 4, 169, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4898, 4, 170, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4899, 4, 171, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4900, 4, 172, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4901, 4, 173, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4902, 4, 174, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4903, 4, 175, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4904, 4, 176, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4905, 4, 177, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4906, 4, 178, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4907, 4, 179, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4908, 4, 180, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4909, 4, 181, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4910, 4, 182, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4911, 4, 183, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4912, 4, 184, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4913, 4, 185, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4914, 4, 186, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4915, 4, 187, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4916, 4, 188, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (4917, 4, 189, 2, '2022-07-20 16:29:45', '2022-07-20 16:29:45'); +INSERT INTO `sys_role_menu` VALUES (5010, 12, 352, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5011, 12, 353, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5012, 12, 354, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5013, 12, 355, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5014, 12, 356, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5015, 12, 136, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5016, 12, 137, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5017, 12, 314, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5018, 12, 347, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5019, 12, 348, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5020, 12, 349, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5021, 12, 350, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5022, 12, 351, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5023, 12, 300, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5024, 12, 301, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5025, 12, 307, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5026, 12, 308, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5027, 12, 309, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5028, 12, 329, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5029, 12, 331, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5030, 12, 332, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5031, 12, 333, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5032, 12, 334, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5033, 12, 335, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5034, 12, 315, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5035, 12, 320, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5036, 12, 321, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5037, 12, 322, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5038, 12, 323, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5039, 12, 303, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5040, 12, 304, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5041, 12, 305, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5042, 12, 316, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5043, 12, 337, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5044, 12, 338, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5045, 12, 339, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5046, 12, 340, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5047, 12, 341, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5048, 12, 158, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5049, 12, 159, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5050, 12, 160, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5051, 12, 161, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5052, 12, 163, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5053, 12, 101, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5054, 12, 102, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5055, 12, 103, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5056, 12, 104, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5057, 12, 105, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5058, 12, 106, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5059, 12, 107, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5060, 12, 108, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5061, 12, 109, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5062, 12, 110, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5063, 12, 111, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5064, 12, 112, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5065, 12, 113, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5066, 12, 114, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5067, 12, 115, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5068, 12, 116, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5069, 12, 122, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5070, 12, 123, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5071, 12, 124, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5072, 12, 125, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5073, 12, 126, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5074, 12, 117, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5075, 12, 118, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5076, 12, 119, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5077, 12, 120, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5078, 12, 121, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5079, 12, 129, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5080, 12, 130, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5081, 12, 131, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5082, 12, 132, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5083, 12, 127, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5084, 12, 128, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5085, 12, 135, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5086, 12, 133, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5087, 12, 134, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5088, 12, 342, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5089, 12, 343, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5090, 12, 344, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5091, 12, 345, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5092, 12, 346, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5093, 12, 302, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5094, 12, 299, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5095, 12, 306, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5096, 12, 310, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5097, 12, 311, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5098, 12, 312, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5099, 12, 313, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5100, 12, 324, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5101, 12, 325, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5102, 12, 326, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5103, 12, 327, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5104, 12, 328, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5105, 12, 318, 5, '2022-08-04 22:06:33', '2022-08-04 22:06:33'); +INSERT INTO `sys_role_menu` VALUES (5106, 22, 357, 11, '2022-08-05 18:58:56', '2022-08-05 18:58:58'); +INSERT INTO `sys_role_menu` VALUES (5107, 11, 136, 5, '2022-08-08 21:59:05', '2022-08-08 21:59:05'); +INSERT INTO `sys_role_menu` VALUES (5108, 11, 137, 5, '2022-08-08 21:59:05', '2022-08-08 21:59:05'); +INSERT INTO `sys_role_menu` VALUES (5109, 11, 347, 5, '2022-08-08 21:59:05', '2022-08-08 21:59:05'); +INSERT INTO `sys_role_menu` VALUES (5110, 11, 314, 5, '2022-08-08 21:59:05', '2022-08-08 21:59:05'); +INSERT INTO `sys_role_menu` VALUES (5111, 11, 348, 5, '2022-08-08 21:59:05', '2022-08-08 21:59:05'); +INSERT INTO `sys_role_menu` VALUES (5112, 11, 349, 5, '2022-08-08 21:59:05', '2022-08-08 21:59:05'); +INSERT INTO `sys_role_menu` VALUES (5113, 11, 351, 5, '2022-08-08 21:59:05', '2022-08-08 21:59:05'); +INSERT INTO `sys_role_menu` VALUES (5114, 11, 329, 5, '2022-08-08 21:59:05', '2022-08-08 21:59:05'); +INSERT INTO `sys_role_menu` VALUES (5115, 11, 331, 5, '2022-08-08 21:59:05', '2022-08-08 21:59:05'); +INSERT INTO `sys_role_menu` VALUES (5116, 11, 332, 5, '2022-08-08 21:59:05', '2022-08-08 21:59:05'); +INSERT INTO `sys_role_menu` VALUES (5117, 11, 333, 5, '2022-08-08 21:59:05', '2022-08-08 21:59:05'); +INSERT INTO `sys_role_menu` VALUES (5118, 11, 334, 5, '2022-08-08 21:59:05', '2022-08-08 21:59:05'); +INSERT INTO `sys_role_menu` VALUES (5119, 11, 335, 5, '2022-08-08 21:59:05', '2022-08-08 21:59:05'); +INSERT INTO `sys_role_menu` VALUES (5120, 11, 300, 5, '2022-08-08 21:59:05', '2022-08-08 21:59:05'); +INSERT INTO `sys_role_menu` VALUES (5121, 11, 301, 5, '2022-08-08 21:59:05', '2022-08-08 21:59:05'); +INSERT INTO `sys_role_menu` VALUES (5122, 11, 307, 5, '2022-08-08 21:59:05', '2022-08-08 21:59:05'); +INSERT INTO `sys_role_menu` VALUES (5123, 11, 308, 5, '2022-08-08 21:59:05', '2022-08-08 21:59:05'); +INSERT INTO `sys_role_menu` VALUES (5124, 11, 309, 5, '2022-08-08 21:59:05', '2022-08-08 21:59:05'); +INSERT INTO `sys_role_menu` VALUES (5125, 11, 315, 5, '2022-08-08 21:59:05', '2022-08-08 21:59:05'); +INSERT INTO `sys_role_menu` VALUES (5126, 11, 320, 5, '2022-08-08 21:59:05', '2022-08-08 21:59:05'); +INSERT INTO `sys_role_menu` VALUES (5127, 11, 321, 5, '2022-08-08 21:59:05', '2022-08-08 21:59:05'); +INSERT INTO `sys_role_menu` VALUES (5128, 11, 322, 5, '2022-08-08 21:59:05', '2022-08-08 21:59:05'); +INSERT INTO `sys_role_menu` VALUES (5129, 11, 323, 5, '2022-08-08 21:59:05', '2022-08-08 21:59:05'); +INSERT INTO `sys_role_menu` VALUES (5130, 11, 303, 5, '2022-08-08 21:59:05', '2022-08-08 21:59:05'); +INSERT INTO `sys_role_menu` VALUES (5131, 11, 304, 5, '2022-08-08 21:59:05', '2022-08-08 21:59:05'); +INSERT INTO `sys_role_menu` VALUES (5132, 11, 305, 5, '2022-08-08 21:59:05', '2022-08-08 21:59:05'); +INSERT INTO `sys_role_menu` VALUES (5133, 11, 338, 5, '2022-08-08 21:59:05', '2022-08-08 21:59:05'); +INSERT INTO `sys_role_menu` VALUES (5134, 11, 316, 5, '2022-08-08 21:59:05', '2022-08-08 21:59:05'); +INSERT INTO `sys_role_menu` VALUES (5135, 11, 337, 5, '2022-08-08 21:59:05', '2022-08-08 21:59:05'); +INSERT INTO `sys_role_menu` VALUES (5136, 11, 158, 5, '2022-08-08 21:59:05', '2022-08-08 21:59:05'); +INSERT INTO `sys_role_menu` VALUES (5137, 11, 159, 5, '2022-08-08 21:59:05', '2022-08-08 21:59:05'); +INSERT INTO `sys_role_menu` VALUES (5138, 11, 160, 5, '2022-08-08 21:59:05', '2022-08-08 21:59:05'); +INSERT INTO `sys_role_menu` VALUES (5139, 11, 101, 5, '2022-08-08 21:59:05', '2022-08-08 21:59:05'); +INSERT INTO `sys_role_menu` VALUES (5140, 11, 102, 5, '2022-08-08 21:59:05', '2022-08-08 21:59:05'); +INSERT INTO `sys_role_menu` VALUES (5141, 11, 103, 5, '2022-08-08 21:59:05', '2022-08-08 21:59:05'); +INSERT INTO `sys_role_menu` VALUES (5142, 11, 104, 5, '2022-08-08 21:59:06', '2022-08-08 21:59:06'); +INSERT INTO `sys_role_menu` VALUES (5143, 11, 105, 5, '2022-08-08 21:59:06', '2022-08-08 21:59:06'); +INSERT INTO `sys_role_menu` VALUES (5144, 11, 106, 5, '2022-08-08 21:59:06', '2022-08-08 21:59:06'); +INSERT INTO `sys_role_menu` VALUES (5145, 11, 107, 5, '2022-08-08 21:59:06', '2022-08-08 21:59:06'); +INSERT INTO `sys_role_menu` VALUES (5146, 11, 108, 5, '2022-08-08 21:59:06', '2022-08-08 21:59:06'); +INSERT INTO `sys_role_menu` VALUES (5147, 11, 109, 5, '2022-08-08 21:59:06', '2022-08-08 21:59:06'); +INSERT INTO `sys_role_menu` VALUES (5148, 11, 110, 5, '2022-08-08 21:59:06', '2022-08-08 21:59:06'); +INSERT INTO `sys_role_menu` VALUES (5149, 11, 111, 5, '2022-08-08 21:59:06', '2022-08-08 21:59:06'); +INSERT INTO `sys_role_menu` VALUES (5150, 11, 112, 5, '2022-08-08 21:59:06', '2022-08-08 21:59:06'); +INSERT INTO `sys_role_menu` VALUES (5151, 11, 113, 5, '2022-08-08 21:59:06', '2022-08-08 21:59:06'); +INSERT INTO `sys_role_menu` VALUES (5152, 11, 114, 5, '2022-08-08 21:59:06', '2022-08-08 21:59:06'); +INSERT INTO `sys_role_menu` VALUES (5153, 11, 115, 5, '2022-08-08 21:59:06', '2022-08-08 21:59:06'); +INSERT INTO `sys_role_menu` VALUES (5154, 11, 116, 5, '2022-08-08 21:59:06', '2022-08-08 21:59:06'); +INSERT INTO `sys_role_menu` VALUES (5155, 11, 122, 5, '2022-08-08 21:59:06', '2022-08-08 21:59:06'); +INSERT INTO `sys_role_menu` VALUES (5156, 11, 123, 5, '2022-08-08 21:59:06', '2022-08-08 21:59:06'); +INSERT INTO `sys_role_menu` VALUES (5157, 11, 124, 5, '2022-08-08 21:59:06', '2022-08-08 21:59:06'); +INSERT INTO `sys_role_menu` VALUES (5158, 11, 125, 5, '2022-08-08 21:59:06', '2022-08-08 21:59:06'); +INSERT INTO `sys_role_menu` VALUES (5159, 11, 126, 5, '2022-08-08 21:59:06', '2022-08-08 21:59:06'); +INSERT INTO `sys_role_menu` VALUES (5160, 11, 117, 5, '2022-08-08 21:59:06', '2022-08-08 21:59:06'); +INSERT INTO `sys_role_menu` VALUES (5161, 11, 118, 5, '2022-08-08 21:59:06', '2022-08-08 21:59:06'); +INSERT INTO `sys_role_menu` VALUES (5162, 11, 119, 5, '2022-08-08 21:59:06', '2022-08-08 21:59:06'); +INSERT INTO `sys_role_menu` VALUES (5163, 11, 120, 5, '2022-08-08 21:59:06', '2022-08-08 21:59:06'); +INSERT INTO `sys_role_menu` VALUES (5164, 11, 121, 5, '2022-08-08 21:59:06', '2022-08-08 21:59:06'); +INSERT INTO `sys_role_menu` VALUES (5165, 11, 129, 5, '2022-08-08 21:59:06', '2022-08-08 21:59:06'); +INSERT INTO `sys_role_menu` VALUES (5166, 11, 130, 5, '2022-08-08 21:59:06', '2022-08-08 21:59:06'); +INSERT INTO `sys_role_menu` VALUES (5167, 11, 131, 5, '2022-08-08 21:59:06', '2022-08-08 21:59:06'); +INSERT INTO `sys_role_menu` VALUES (5168, 11, 132, 5, '2022-08-08 21:59:06', '2022-08-08 21:59:06'); +INSERT INTO `sys_role_menu` VALUES (5169, 11, 127, 5, '2022-08-08 21:59:06', '2022-08-08 21:59:06'); +INSERT INTO `sys_role_menu` VALUES (5170, 11, 128, 5, '2022-08-08 21:59:06', '2022-08-08 21:59:06'); +INSERT INTO `sys_role_menu` VALUES (5171, 11, 135, 5, '2022-08-08 21:59:06', '2022-08-08 21:59:06'); +INSERT INTO `sys_role_menu` VALUES (5172, 11, 133, 5, '2022-08-08 21:59:06', '2022-08-08 21:59:06'); +INSERT INTO `sys_role_menu` VALUES (5173, 11, 134, 5, '2022-08-08 21:59:06', '2022-08-08 21:59:06'); +INSERT INTO `sys_role_menu` VALUES (5174, 11, 342, 5, '2022-08-08 21:59:06', '2022-08-08 21:59:06'); +INSERT INTO `sys_role_menu` VALUES (5175, 11, 343, 5, '2022-08-08 21:59:06', '2022-08-08 21:59:06'); +INSERT INTO `sys_role_menu` VALUES (5176, 11, 344, 5, '2022-08-08 21:59:06', '2022-08-08 21:59:06'); +INSERT INTO `sys_role_menu` VALUES (5177, 11, 345, 5, '2022-08-08 21:59:06', '2022-08-08 21:59:06'); +INSERT INTO `sys_role_menu` VALUES (5178, 11, 346, 5, '2022-08-08 21:59:06', '2022-08-08 21:59:06'); +INSERT INTO `sys_role_menu` VALUES (5179, 11, 302, 5, '2022-08-08 21:59:06', '2022-08-08 21:59:06'); +INSERT INTO `sys_role_menu` VALUES (5180, 11, 306, 5, '2022-08-08 21:59:06', '2022-08-08 21:59:06'); +INSERT INTO `sys_role_menu` VALUES (5181, 11, 299, 5, '2022-08-08 21:59:06', '2022-08-08 21:59:06'); +INSERT INTO `sys_role_menu` VALUES (5182, 11, 310, 5, '2022-08-08 21:59:06', '2022-08-08 21:59:06'); +INSERT INTO `sys_role_menu` VALUES (5183, 11, 311, 5, '2022-08-08 21:59:06', '2022-08-08 21:59:06'); +INSERT INTO `sys_role_menu` VALUES (5184, 11, 312, 5, '2022-08-08 21:59:06', '2022-08-08 21:59:06'); +INSERT INTO `sys_role_menu` VALUES (5185, 11, 313, 5, '2022-08-08 21:59:06', '2022-08-08 21:59:06'); +INSERT INTO `sys_role_menu` VALUES (5186, 11, 324, 5, '2022-08-08 21:59:07', '2022-08-08 21:59:07'); +INSERT INTO `sys_role_menu` VALUES (5187, 11, 325, 5, '2022-08-08 21:59:07', '2022-08-08 21:59:07'); +INSERT INTO `sys_role_menu` VALUES (5188, 11, 326, 5, '2022-08-08 21:59:07', '2022-08-08 21:59:07'); +INSERT INTO `sys_role_menu` VALUES (5189, 11, 327, 5, '2022-08-08 21:59:07', '2022-08-08 21:59:07'); +INSERT INTO `sys_role_menu` VALUES (5190, 11, 328, 5, '2022-08-08 21:59:07', '2022-08-08 21:59:07'); +INSERT INTO `sys_role_menu` VALUES (5191, 11, 318, 5, '2022-08-08 21:59:07', '2022-08-08 21:59:07'); +COMMIT; + +-- ---------------------------- +-- Table structure for sys_tenant +-- ---------------------------- +DROP TABLE IF EXISTS `sys_tenant`; +CREATE TABLE `sys_tenant` ( + `tenant_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '租户id', + `tenant_name` varchar(200) NOT NULL COMMENT '租户名称', + `comments` varchar(400) DEFAULT NULL COMMENT '备注', + `status` int(1) NOT NULL DEFAULT '0' COMMENT '状态', + `deleted` int(1) NOT NULL DEFAULT '0' COMMENT '是否删除, 0否, 1是', + `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', + PRIMARY KEY (`tenant_id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='租户'; + +-- ---------------------------- +-- Records of sys_tenant +-- ---------------------------- +BEGIN; +INSERT INTO `sys_tenant` VALUES (1, '演示站点1', '1', 0, 0, '2021-08-25 13:33:33', '2022-08-03 19:04:30'); +INSERT INTO `sys_tenant` VALUES (2, '演示站点2', NULL, 0, 0, '2021-10-13 21:44:59', '2022-08-03 13:49:18'); +INSERT INTO `sys_tenant` VALUES (3, '演示站点3', NULL, 0, 0, '2022-03-11 10:03:00', '2022-08-03 13:49:26'); +INSERT INTO `sys_tenant` VALUES (4, '演示站点4', NULL, 0, 0, '2022-08-03 12:31:58', '2022-08-03 13:49:30'); +INSERT INTO `sys_tenant` VALUES (5, '办公OA系统', NULL, 0, 0, '2022-08-03 12:31:58', '2022-08-03 13:49:49'); +INSERT INTO `sys_tenant` VALUES (6, '海牛生鲜馆', NULL, 0, 0, '2022-08-03 13:50:56', '2022-08-03 13:51:07'); +INSERT INTO `sys_tenant` VALUES (7, '原料星', NULL, 0, 0, '2022-08-03 13:51:13', '2022-08-03 13:51:13'); +INSERT INTO `sys_tenant` VALUES (8, '测试租户8', '111', 1, 0, '2022-08-03 20:23:28', '2022-08-03 20:33:30'); +INSERT INTO `sys_tenant` VALUES (9, '测试租户9', '1111', 1, 0, '2022-08-03 20:24:41', '2022-08-03 20:33:37'); +INSERT INTO `sys_tenant` VALUES (10, '测试租户10', '10', 1, 0, '2022-08-03 20:26:01', '2022-08-03 20:33:41'); +INSERT INTO `sys_tenant` VALUES (11, '测试租户11', '', 0, 0, '2022-08-03 20:32:51', '2022-08-03 20:33:32'); +COMMIT; + +-- ---------------------------- +-- Table structure for sys_user +-- ---------------------------- +DROP TABLE IF EXISTS `sys_user`; +CREATE TABLE `sys_user` ( + `user_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户id', + `username` varchar(100) NOT NULL COMMENT '账号', + `password` varchar(200) NOT NULL COMMENT '密码', + `nickname` varchar(200) NOT NULL COMMENT '昵称', + `avatar` varchar(200) DEFAULT NULL COMMENT '头像', + `sex` int(11) DEFAULT NULL COMMENT '性别', + `phone` varchar(200) DEFAULT NULL COMMENT '手机号', + `email` varchar(200) DEFAULT NULL COMMENT '邮箱', + `email_verified` int(1) NOT NULL DEFAULT '0' COMMENT '邮箱是否验证, 0否, 1是', + `real_name` varchar(200) DEFAULT NULL COMMENT '真实姓名', + `id_card` varchar(200) DEFAULT NULL COMMENT '身份证号', + `birthday` date DEFAULT NULL COMMENT '出生日期', + `introduction` varchar(200) DEFAULT NULL COMMENT '个人简介', + `organization_id` int(11) DEFAULT NULL COMMENT '机构id', + `status` int(1) NOT NULL DEFAULT '0' COMMENT '状态, 0正常, 1冻结', + `deleted` int(1) NOT NULL DEFAULT '0' COMMENT '是否删除, 0否, 1是', + `tenant_id` int(11) NOT NULL DEFAULT '1' COMMENT '租户id', + `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '注册时间', + `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', + PRIMARY KEY (`user_id`) USING BTREE, + KEY `organization_id` (`organization_id`) USING BTREE, + KEY `tenant_id` (`tenant_id`) USING BTREE, + CONSTRAINT `sys_user_ibfk_1` FOREIGN KEY (`organization_id`) REFERENCES `sys_organization` (`organization_id`) ON DELETE SET NULL, + CONSTRAINT `sys_user_ibfk_2` FOREIGN KEY (`tenant_id`) REFERENCES `sys_tenant` (`tenant_id`) ON DELETE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=74 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='用户'; + +-- ---------------------------- +-- Records of sys_user +-- ---------------------------- +BEGIN; +INSERT INTO `sys_user` VALUES (1, 'admin', '$2a$10$sWH.qQmf/dHMURzE4kN0puBOdB7VWwcDFB2NvwpMaHYz6OFZwQGBy', '管理员', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 1, '12345678901', '', 0, NULL, NULL, '2021-05-21', '遗其欲,则心静!', 1, 0, 0, 1, '2020-01-13 14:43:52', '2022-07-25 18:25:27'); +INSERT INTO `sys_user` VALUES (2, 'user01', '$2a$10$y3j0Bnn4cMOErMLv31LUw.Drs/xs1peDQwT7YYHJbFX6xGDQcXUaK', '用户一', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 2, '12345678902', NULL, 0, NULL, NULL, NULL, NULL, 1, 0, 0, 1, '2020-09-15 17:49:37', '2021-03-15 19:47:23'); +INSERT INTO `sys_user` VALUES (3, 'user02', '$2a$10$fF2qbzA1.zIOUZpedxtvoubQ9doxlSNSunGQLwYxnvSqM8Wx6AeGC', '用户二', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 1, '12345678903', NULL, 0, NULL, NULL, NULL, NULL, 1, 0, 0, 1, '2020-09-15 17:50:20', '2021-03-15 19:47:24'); +INSERT INTO `sys_user` VALUES (4, 'user03', '$2a$10$iP1vojXrDgjTaU6ZY3dGfefXGmyftJbPhTuU7cWBxkNI3w20WwZOW', '用户三', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 2, '12345678904', NULL, 0, NULL, NULL, NULL, NULL, 1, 0, 0, 1, '2020-09-15 17:50:51', '2021-03-15 19:47:24'); +INSERT INTO `sys_user` VALUES (5, 'user04', '$2a$10$iMsEmh.rPlzwy/SVe6KW3.62vlwqMJpibhCF9jYN.fMqxdqymzMzu', '用户四', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 1, '12345678905', NULL, 0, NULL, NULL, NULL, NULL, 2, 0, 0, 1, '2020-09-15 17:51:50', '2021-03-15 19:47:25'); +INSERT INTO `sys_user` VALUES (6, 'user05', '$2a$10$6bdw9kiSq6cefcwN1nvcyOyWxgKxNipVsR7M1QvmG9pPZ4ggldr4a', '用户五', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 2, '12345678906', NULL, 0, NULL, NULL, NULL, NULL, 2, 0, 0, 1, '2020-09-15 17:52:22', '2021-03-15 19:47:26'); +INSERT INTO `sys_user` VALUES (7, 'user06', '$2a$10$fKDoXZPU43tiFxXyzPXcu.kCpiv9ACtlgkxFeB/NBl4ti7GqI.EE.', '用户六', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 1, '12345678907', NULL, 0, NULL, NULL, NULL, NULL, 2, 0, 0, 1, '2020-09-15 17:53:31', '2021-03-15 19:47:25'); +INSERT INTO `sys_user` VALUES (8, 'user07', '$2a$10$R4JW6t3GK7fz3B830WsRI.uoW5LZq9EG.VAopRyKXVemXDkpybYni', '用户七', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 1, '12345678908', NULL, 0, NULL, NULL, NULL, NULL, 3, 0, 0, 1, '2020-10-20 23:28:40', '2021-03-15 19:47:26'); +INSERT INTO `sys_user` VALUES (9, 'user08', '$2a$10$EhZLneJiZjVd3qWXpiUXV.OC3mtTMNLepIjhUyQzgPqtvpBclMCm2', '用户八', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 2, '12345678909', NULL, 0, NULL, NULL, NULL, NULL, 3, 1, 0, 1, '2020-10-20 23:29:03', '2022-03-11 22:33:16'); +INSERT INTO `sys_user` VALUES (10, 'user09', '$2a$10$jP8jv8A.uVSfKFzVpoNgmetdTK9pMAMjJh5wEQLH.sFVdMDILaXMS', '用户九', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 2, '12345678910', NULL, 0, NULL, NULL, NULL, NULL, 4, 0, 0, 1, '2020-10-20 23:29:30', '2021-03-15 19:47:27'); +INSERT INTO `sys_user` VALUES (11, 'user10', '$2a$10$R/2v6h8bRhYsgryPwzgv8eFBl3jnALsqJ/O7DRHzLxuU/.T/JqO96', '用户十', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 1, '12345678911', NULL, 0, NULL, NULL, NULL, NULL, 4, 1, 0, 1, '2020-10-20 23:29:55', '2022-03-11 22:33:23'); +INSERT INTO `sys_user` VALUES (12, 'user11', '$2a$10$mR4uT3Qley1UkXm6zJ4zd.OMXzUovwCYX52eFVC80FwCrkDeFwYl6', '用户十一', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 1, '12345678912', NULL, 0, NULL, NULL, NULL, NULL, 5, 0, 0, 1, '2020-10-20 23:30:28', '2021-03-15 19:47:29'); +INSERT INTO `sys_user` VALUES (13, 'user12', '$2a$10$UveBloenMd4weP/6fHIkeeYZqPWNS6Y0NRxRGwXA1KzmwycklSAqa', '用户十二412', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 2, '12345678913', NULL, 0, NULL, NULL, NULL, NULL, 6, 0, 0, 1, '2020-10-20 23:30:53', '2022-07-25 11:40:30'); +INSERT INTO `sys_user` VALUES (14, 'admin', '$2a$10$CF9TozS03QJWxMjVp2b.COr3/O46L9L2NEv.pRe63fzX4RqQqx22O', '管理员', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 1, '12345678901', '', 0, NULL, NULL, '2021-05-21', '遗其欲,则心静!', 11, 0, 0, 5, '2020-01-13 14:43:52', '2022-08-05 13:28:04'); +INSERT INTO `sys_user` VALUES (15, 'user01', '$2a$10$y3j0Bnn4cMOErMLv31LUw.Drs/xs1peDQwT7YYHJbFX6xGDQcXUaK', '用户一', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 2, '12345678902', NULL, 0, NULL, NULL, NULL, NULL, 11, 0, 1, 5, '2020-09-15 17:49:37', '2022-08-03 13:55:03'); +INSERT INTO `sys_user` VALUES (16, 'user02', '$2a$10$fF2qbzA1.zIOUZpedxtvoubQ9doxlSNSunGQLwYxnvSqM8Wx6AeGC', '用户二', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 1, '12345678903', NULL, 0, NULL, NULL, NULL, NULL, 11, 0, 1, 5, '2020-09-15 17:50:20', '2022-08-03 13:55:03'); +INSERT INTO `sys_user` VALUES (17, 'user03', '$2a$10$iP1vojXrDgjTaU6ZY3dGfefXGmyftJbPhTuU7cWBxkNI3w20WwZOW', '用户三', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 2, '12345678904', NULL, 0, NULL, NULL, NULL, NULL, 11, 0, 1, 5, '2020-09-15 17:50:51', '2022-08-03 13:55:03'); +INSERT INTO `sys_user` VALUES (18, 'user04', '$2a$10$iMsEmh.rPlzwy/SVe6KW3.62vlwqMJpibhCF9jYN.fMqxdqymzMzu', '用户四', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 1, '12345678905', NULL, 0, NULL, NULL, NULL, NULL, 12, 0, 1, 5, '2020-09-15 17:51:50', '2022-08-03 13:55:03'); +INSERT INTO `sys_user` VALUES (19, 'user05', '$2a$10$6bdw9kiSq6cefcwN1nvcyOyWxgKxNipVsR7M1QvmG9pPZ4ggldr4a', '用户五', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 2, '12345678906', NULL, 0, NULL, NULL, NULL, NULL, 12, 0, 1, 5, '2020-09-15 17:52:22', '2022-08-03 13:55:03'); +INSERT INTO `sys_user` VALUES (20, 'user06', '$2a$10$fKDoXZPU43tiFxXyzPXcu.kCpiv9ACtlgkxFeB/NBl4ti7GqI.EE.', '用户六', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 1, '12345678907', NULL, 0, NULL, NULL, NULL, NULL, 12, 0, 1, 5, '2020-09-15 17:53:31', '2022-08-03 13:55:03'); +INSERT INTO `sys_user` VALUES (21, 'user07', '$2a$10$R4JW6t3GK7fz3B830WsRI.uoW5LZq9EG.VAopRyKXVemXDkpybYni', '用户七', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 1, '12345678908', NULL, 0, NULL, NULL, NULL, NULL, 13, 0, 1, 5, '2020-10-20 23:28:40', '2022-08-03 13:55:03'); +INSERT INTO `sys_user` VALUES (22, 'user08', '$2a$10$EhZLneJiZjVd3qWXpiUXV.OC3mtTMNLepIjhUyQzgPqtvpBclMCm2', '用户八', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 2, '12345678909', NULL, 0, NULL, NULL, NULL, NULL, 13, 1, 1, 5, '2020-10-20 23:29:03', '2022-08-03 13:55:03'); +INSERT INTO `sys_user` VALUES (23, 'user09', '$2a$10$jP8jv8A.uVSfKFzVpoNgmetdTK9pMAMjJh5wEQLH.sFVdMDILaXMS', '用户九', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 2, '12345678910', NULL, 0, NULL, NULL, NULL, NULL, 14, 0, 1, 5, '2020-10-20 23:29:30', '2022-08-03 13:55:03'); +INSERT INTO `sys_user` VALUES (24, 'user10', '$2a$10$R/2v6h8bRhYsgryPwzgv8eFBl3jnALsqJ/O7DRHzLxuU/.T/JqO96', '用户十', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 1, '12345678911', NULL, 0, NULL, NULL, NULL, NULL, 14, 1, 1, 5, '2020-10-20 23:29:55', '2022-08-03 13:55:03'); +INSERT INTO `sys_user` VALUES (25, 'user11', '$2a$10$mR4uT3Qley1UkXm6zJ4zd.OMXzUovwCYX52eFVC80FwCrkDeFwYl6', '用户十一', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 1, '12345678912', NULL, 0, NULL, NULL, NULL, NULL, 15, 0, 1, 5, '2020-10-20 23:30:28', '2022-08-03 13:55:03'); +INSERT INTO `sys_user` VALUES (26, 'user12', '$2a$10$UveBloenMd4weP/6fHIkeeYZqPWNS6Y0NRxRGwXA1KzmwycklSAqa', '用户十二44', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 2, '12345678913', NULL, 0, NULL, NULL, NULL, NULL, 16, 0, 1, 5, '2020-10-20 23:30:53', '2022-08-03 13:55:03'); +INSERT INTO `sys_user` VALUES (27, 'admin', '$2a$10$sWH.qQmf/dHMURzE4kN0puBOdB7VWwcDFB2NvwpMaHYz6OFZwQGBy', '管理员', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 1, '12345678901', '', 0, NULL, NULL, '2021-05-21', '遗其欲,则心静!', 21, 0, 0, 3, '2020-01-13 14:43:52', '2022-03-11 16:18:45'); +INSERT INTO `sys_user` VALUES (28, 'user01', '$2a$10$y3j0Bnn4cMOErMLv31LUw.Drs/xs1peDQwT7YYHJbFX6xGDQcXUaK', '用户一', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 2, '12345678902', NULL, 0, NULL, NULL, NULL, NULL, 21, 0, 0, 3, '2020-09-15 17:49:37', '2022-03-11 16:18:44'); +INSERT INTO `sys_user` VALUES (29, 'user02', '$2a$10$fF2qbzA1.zIOUZpedxtvoubQ9doxlSNSunGQLwYxnvSqM8Wx6AeGC', '用户二', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 1, '12345678903', NULL, 0, NULL, NULL, NULL, NULL, 21, 0, 0, 3, '2020-09-15 17:50:20', '2022-03-11 16:18:42'); +INSERT INTO `sys_user` VALUES (30, 'user03', '$2a$10$iP1vojXrDgjTaU6ZY3dGfefXGmyftJbPhTuU7cWBxkNI3w20WwZOW', '用户三', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 2, '12345678904', NULL, 0, NULL, NULL, NULL, NULL, 21, 0, 0, 3, '2020-09-15 17:50:51', '2022-03-11 16:18:41'); +INSERT INTO `sys_user` VALUES (31, 'user04', '$2a$10$iMsEmh.rPlzwy/SVe6KW3.62vlwqMJpibhCF9jYN.fMqxdqymzMzu', '用户四', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 1, '12345678905', NULL, 0, NULL, NULL, NULL, NULL, 22, 0, 0, 3, '2020-09-15 17:51:50', '2022-03-11 16:18:39'); +INSERT INTO `sys_user` VALUES (32, 'user05', '$2a$10$6bdw9kiSq6cefcwN1nvcyOyWxgKxNipVsR7M1QvmG9pPZ4ggldr4a', '用户五', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 2, '12345678906', NULL, 0, NULL, NULL, NULL, NULL, 22, 0, 0, 3, '2020-09-15 17:52:22', '2022-03-11 16:18:36'); +INSERT INTO `sys_user` VALUES (33, 'user06', '$2a$10$fKDoXZPU43tiFxXyzPXcu.kCpiv9ACtlgkxFeB/NBl4ti7GqI.EE.', '用户六', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 1, '12345678907', NULL, 0, NULL, NULL, NULL, NULL, 22, 0, 0, 3, '2020-09-15 17:53:31', '2022-03-11 16:18:34'); +INSERT INTO `sys_user` VALUES (34, 'user07', '$2a$10$R4JW6t3GK7fz3B830WsRI.uoW5LZq9EG.VAopRyKXVemXDkpybYni', '用户七', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 1, '12345678908', NULL, 0, NULL, NULL, NULL, NULL, 23, 0, 0, 3, '2020-10-20 23:28:40', '2022-03-11 16:18:32'); +INSERT INTO `sys_user` VALUES (35, 'user08', '$2a$10$EhZLneJiZjVd3qWXpiUXV.OC3mtTMNLepIjhUyQzgPqtvpBclMCm2', '用户八', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 2, '12345678909', NULL, 0, NULL, NULL, NULL, NULL, 23, 1, 0, 3, '2020-10-20 23:29:03', '2022-03-11 22:33:34'); +INSERT INTO `sys_user` VALUES (36, 'user09', '$2a$10$jP8jv8A.uVSfKFzVpoNgmetdTK9pMAMjJh5wEQLH.sFVdMDILaXMS', '用户九', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 2, '12345678910', NULL, 0, NULL, NULL, NULL, NULL, 24, 0, 0, 3, '2020-10-20 23:29:30', '2022-03-11 16:18:29'); +INSERT INTO `sys_user` VALUES (37, 'user10', '$2a$10$R/2v6h8bRhYsgryPwzgv8eFBl3jnALsqJ/O7DRHzLxuU/.T/JqO96', '用户十', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 1, '12345678911', NULL, 0, NULL, NULL, NULL, NULL, 24, 1, 0, 3, '2020-10-20 23:29:55', '2022-03-11 22:33:35'); +INSERT INTO `sys_user` VALUES (38, 'user11', '$2a$10$mR4uT3Qley1UkXm6zJ4zd.OMXzUovwCYX52eFVC80FwCrkDeFwYl6', '用户十一', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 1, '12345678912', NULL, 0, NULL, NULL, NULL, NULL, 25, 0, 0, 3, '2020-10-20 23:30:28', '2022-03-11 16:18:25'); +INSERT INTO `sys_user` VALUES (39, 'user12', '$2a$10$UveBloenMd4weP/6fHIkeeYZqPWNS6Y0NRxRGwXA1KzmwycklSAqa', '用户十二33', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 2, '12345678913', NULL, 0, NULL, NULL, NULL, NULL, 26, 0, 0, 3, '2020-10-20 23:30:53', '2022-07-25 17:40:29'); +INSERT INTO `sys_user` VALUES (40, '123', '$2a$10$8SbySxV7NvOz.WUm9l1NCubuYY9d8lMw.xTDogk0RO8V0ThtDKU2q', '123444', NULL, 1, '13312312312', '', 0, NULL, NULL, '2022-07-25', '12312312', NULL, 0, 1, 5, '2022-07-25 17:40:13', '2022-08-03 13:55:03'); +INSERT INTO `sys_user` VALUES (41, '333333', '$2a$10$h2TALQrrLqT0OZo9O2MeROCy4RG2mmzAT/y1SoBGmi2Sb17kthW4K', '3333', NULL, 1, '13333333333', '', 0, NULL, NULL, NULL, '', 20, 0, 1, 5, '2022-07-25 17:41:55', '2022-08-03 13:55:03'); +INSERT INTO `sys_user` VALUES (42, '赵忠林', '$2a$10$bJG9N6J6tFBba5kMLH3FVe5YWW4o9z8TxFcynwTT3HeFsSK1sirl2', '赵忠林', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 1, '13737128880', '', 0, NULL, NULL, NULL, '', 12, 0, 0, 5, '2022-07-25 18:30:01', '2022-08-08 22:31:36'); +INSERT INTO `sys_user` VALUES (43, '邓莉莉', '$2a$10$5oOEznxNdvysXwAoq3S.5ugUxD4mcrQBvw87ePmOkuAGieroqxBFy', '邓莉莉', '', 2, '15878179339', '603684184@qq.com', 0, NULL, NULL, NULL, '一个字:懒!', NULL, 0, 1, 5, '2022-07-27 09:43:57', '2022-08-08 22:32:57'); +INSERT INTO `sys_user` VALUES (44, '市场部001', '$2a$10$WAF0RypkJsxXgMwA.JJ22u.slg/ESMc690mye3Bgv8m0zVNDRSfGa', '市场部001', NULL, 1, '13800138010', '', 0, NULL, NULL, NULL, '', 19, 0, 1, 5, '2022-07-27 16:34:34', '2022-08-03 13:55:03'); +INSERT INTO `sys_user` VALUES (45, '翟灵', '$2a$10$KAh0W3SnxrQvh5p7ziLd7ewpF7mk2reHYZ7LIXsEEKayqrCcU9/1G', '翟灵', NULL, 1, '19525894431', '', 0, NULL, NULL, NULL, '', 19, 0, 0, 5, '2022-07-29 19:35:01', '2022-08-03 13:55:03'); +INSERT INTO `sys_user` VALUES (46, '邓莉莉', '$2a$10$0t5cCQaPVCVuYMpu/5lrqeErnVpgkdiDyG8anc7iAefgmXAYFI2ia', '邓莉莉', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 2, '15878179339', '', 0, NULL, NULL, NULL, '', 32, 0, 0, 5, '2022-07-29 19:37:27', '2022-08-08 22:33:30'); +INSERT INTO `sys_user` VALUES (47, '赵忠林', '$2a$10$gDVK3OPd0IOVGl1JNx3DvO9gVtUsEBsJKxBAxHwGtc/vOzM/7c.GO', '关羽', NULL, 1, '13800138002', '', 0, NULL, NULL, NULL, '', 7, 0, 1, 1, '2022-07-29 19:43:34', '2022-07-29 19:44:35'); +INSERT INTO `sys_user` VALUES (48, '普通用户001', '$2a$10$RrTf0cyBxqfh8QdoMajxz.i.gG6gHPepGp9o/Vzo0vIA2wbleb8li', '普通用户001', NULL, 1, '', '', 0, NULL, NULL, NULL, '', NULL, 0, 0, 5, '2022-07-30 00:26:00', '2022-08-04 17:01:45'); +INSERT INTO `sys_user` VALUES (58, 'admin', '$2a$10$CF9TozS03QJWxMjVp2b.COr3/O46L9L2NEv.pRe63fzX4RqQqx22O', 'admin', NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, 0, 0, 11, '2022-08-03 20:32:51', '2022-08-05 18:19:56'); +INSERT INTO `sys_user` VALUES (59, 'gzhl', '$2a$10$GSbiutKejeeuS1YoxH3Yhu2KgP/uAzKWw6oi5YmEONsiOP1arZTS.', '郭树新', NULL, 1, '', '', 0, NULL, NULL, NULL, '', NULL, 0, 0, 5, '2022-08-04 12:52:31', '2022-08-04 12:52:31'); +INSERT INTO `sys_user` VALUES (60, 'admin', '$2a$10$sWH.qQmf/dHMURzE4kN0puBOdB7VWwcDFB2NvwpMaHYz6OFZwQGBy', '管理员', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 1, '12345678901', '', 0, NULL, NULL, '2021-05-21', '遗其欲,则心静!', 11, 0, 0, 2, '2020-01-13 14:43:52', '2021-11-11 22:16:51'); +INSERT INTO `sys_user` VALUES (61, 'user01', '$2a$10$y3j0Bnn4cMOErMLv31LUw.Drs/xs1peDQwT7YYHJbFX6xGDQcXUaK', '用户一', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 2, '12345678902', NULL, 0, NULL, NULL, NULL, NULL, 11, 0, 0, 2, '2020-09-15 17:49:37', '2021-11-11 22:16:52'); +INSERT INTO `sys_user` VALUES (62, 'user02', '$2a$10$fF2qbzA1.zIOUZpedxtvoubQ9doxlSNSunGQLwYxnvSqM8Wx6AeGC', '用户二', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 1, '12345678903', NULL, 0, NULL, NULL, NULL, NULL, 11, 0, 0, 2, '2020-09-15 17:50:20', '2021-11-11 22:16:54'); +INSERT INTO `sys_user` VALUES (63, 'user03', '$2a$10$iP1vojXrDgjTaU6ZY3dGfefXGmyftJbPhTuU7cWBxkNI3w20WwZOW', '用户三', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 2, '12345678904', NULL, 0, NULL, NULL, NULL, NULL, 11, 0, 0, 2, '2020-09-15 17:50:51', '2021-11-11 22:16:55'); +INSERT INTO `sys_user` VALUES (64, 'user04', '$2a$10$iMsEmh.rPlzwy/SVe6KW3.62vlwqMJpibhCF9jYN.fMqxdqymzMzu', '用户四', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 1, '12345678905', NULL, 0, NULL, NULL, NULL, NULL, 12, 0, 0, 2, '2020-09-15 17:51:50', '2021-11-11 22:16:56'); +INSERT INTO `sys_user` VALUES (65, 'user05', '$2a$10$6bdw9kiSq6cefcwN1nvcyOyWxgKxNipVsR7M1QvmG9pPZ4ggldr4a', '用户五', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 2, '12345678906', NULL, 0, NULL, NULL, NULL, NULL, 12, 0, 0, 2, '2020-09-15 17:52:22', '2021-11-11 22:16:57'); +INSERT INTO `sys_user` VALUES (66, 'user06', '$2a$10$fKDoXZPU43tiFxXyzPXcu.kCpiv9ACtlgkxFeB/NBl4ti7GqI.EE.', '用户六', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 1, '12345678907', NULL, 0, NULL, NULL, NULL, NULL, 12, 0, 0, 2, '2020-09-15 17:53:31', '2021-11-11 22:16:59'); +INSERT INTO `sys_user` VALUES (67, 'user07', '$2a$10$R4JW6t3GK7fz3B830WsRI.uoW5LZq9EG.VAopRyKXVemXDkpybYni', '用户七', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 1, '12345678908', NULL, 0, NULL, NULL, NULL, NULL, 13, 0, 0, 2, '2020-10-20 23:28:40', '2021-11-11 22:17:00'); +INSERT INTO `sys_user` VALUES (68, 'user08', '$2a$10$EhZLneJiZjVd3qWXpiUXV.OC3mtTMNLepIjhUyQzgPqtvpBclMCm2', '用户八', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 2, '12345678909', NULL, 0, NULL, NULL, NULL, NULL, 13, 1, 0, 2, '2020-10-20 23:29:03', '2022-03-11 22:33:26'); +INSERT INTO `sys_user` VALUES (69, 'user09', '$2a$10$jP8jv8A.uVSfKFzVpoNgmetdTK9pMAMjJh5wEQLH.sFVdMDILaXMS', '用户九', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 2, '12345678910', NULL, 0, NULL, NULL, NULL, NULL, 14, 0, 0, 2, '2020-10-20 23:29:30', '2021-11-11 22:17:02'); +INSERT INTO `sys_user` VALUES (70, 'user10', '$2a$10$R/2v6h8bRhYsgryPwzgv8eFBl3jnALsqJ/O7DRHzLxuU/.T/JqO96', '用户十', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 1, '12345678911', NULL, 0, NULL, NULL, NULL, NULL, 14, 1, 0, 2, '2020-10-20 23:29:55', '2022-03-11 22:33:31'); +INSERT INTO `sys_user` VALUES (71, 'user11', '$2a$10$mR4uT3Qley1UkXm6zJ4zd.OMXzUovwCYX52eFVC80FwCrkDeFwYl6', '用户十一', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 1, '12345678912', NULL, 0, NULL, NULL, NULL, NULL, 15, 0, 0, 2, '2020-10-20 23:30:28', '2021-11-11 22:17:05'); +INSERT INTO `sys_user` VALUES (72, 'user12', '$2a$10$UveBloenMd4weP/6fHIkeeYZqPWNS6Y0NRxRGwXA1KzmwycklSAqa', '用户十二', 'https://cdn.eleadmin.com/20200610/avatar.jpg', 2, '12345678913', NULL, 0, NULL, NULL, NULL, NULL, 16, 0, 0, 2, '2020-10-20 23:30:53', '2021-11-11 22:17:09'); +INSERT INTO `sys_user` VALUES (73, 'weicw', '$2a$10$NwRGdW6auh/tO.WKPaVBu.5kA2zYdnXAlp8MmUWZnhL.42NiMWuiC', '韦创卫', NULL, 1, '', '', 0, NULL, NULL, NULL, '', NULL, 0, 0, 5, '2022-08-04 21:24:37', '2022-08-04 21:24:37'); +COMMIT; + +-- ---------------------------- +-- Table structure for sys_user_file +-- ---------------------------- +DROP TABLE IF EXISTS `sys_user_file`; +CREATE TABLE `sys_user_file` ( + `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id', + `user_id` int(11) NOT NULL COMMENT '用户id', + `name` varchar(200) DEFAULT NULL COMMENT '文件名称', + `is_directory` int(11) DEFAULT NULL COMMENT '是否是文件夹', + `parent_id` int(11) DEFAULT NULL COMMENT '上级id', + `path` varchar(400) DEFAULT NULL COMMENT '文件路径', + `length` int(11) DEFAULT NULL COMMENT '文件大小', + `content_type` varchar(80) DEFAULT NULL COMMENT '文件类型', + `deleted` int(11) NOT NULL DEFAULT '0' COMMENT '是否删除, 0否, 1是', + `tenant_id` int(11) NOT NULL DEFAULT '1' COMMENT '租户id', + `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=105 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='用户文件'; + +-- ---------------------------- +-- Records of sys_user_file +-- ---------------------------- +BEGIN; +INSERT INTO `sys_user_file` VALUES (1, 1, '我的图片', 1, 0, NULL, NULL, NULL, 0, 1, '2022-07-22 11:28:02', '2022-07-22 16:08:28'); +INSERT INTO `sys_user_file` VALUES (2, 1, '我的文件', 1, 0, NULL, NULL, NULL, 0, 1, '2022-07-22 11:28:09', '2022-07-22 16:08:30'); +INSERT INTO `sys_user_file` VALUES (3, 1, 'avatar.jpg', 0, 0, '20220722/19b623b787514f8eb7d1e8edf2e9ff15.jpg', 12805, 'image/jpeg', 0, 1, '2022-07-22 11:28:16', '2022-07-22 16:08:31'); +INSERT INTO `sys_user_file` VALUES (4, 1, 'logo.svg', 0, 0, '20220722/e77995c100de46409cce84e848a63f7d.svg', 1605, 'image/svg+xml', 0, 1, '2022-07-22 11:28:21', '2022-07-22 16:08:32'); +INSERT INTO `sys_user_file` VALUES (5, 1, 'favicon.ico', 0, 0, '20220722/acb31ddb5ce44530933c48741c3bbfe2.ico', 4286, 'image/vnd.microsoft.icon', 0, 1, '2022-07-22 11:29:11', '2022-07-22 16:08:32'); +INSERT INTO `sys_user_file` VALUES (6, 1, '用户导入模板.xlsx', 0, 0, '20220722/b4fa501bf6084f2e8bed971e68462ce3.xlsx', 10221, 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 0, 1, '2022-07-22 11:29:24', '2022-07-22 16:08:35'); +INSERT INTO `sys_user_file` VALUES (7, 1, 'classes.json', 0, 0, '20220722/8d59c7d48453444d9ee84bd2b4c27a12.json', 6789, 'application/json', 0, 1, '2022-07-22 11:29:28', '2022-07-22 16:08:34'); +INSERT INTO `sys_user_file` VALUES (8, 1, '壁纸', 1, 1, NULL, NULL, NULL, 0, 1, '2022-07-22 11:30:58', '2022-07-22 16:08:36'); +INSERT INTO `sys_user_file` VALUES (9, 1, '头像', 1, 1, NULL, NULL, NULL, 0, 1, '2022-07-22 11:31:02', '2022-07-22 16:08:37'); +INSERT INTO `sys_user_file` VALUES (10, 1, 'pro202012301.png', 0, 1, '20220722/4cbac74d9c5c45858854b24ee5db8e87.png', 59257, 'image/png', 0, 1, '2022-07-22 11:34:39', '2022-07-22 16:08:37'); +INSERT INTO `sys_user_file` VALUES (11, 1, 'pro202012302.png', 0, 1, '20220722/24ba2b0906f64394ae0fb5e8f813cb30.png', 64832, 'image/png', 0, 1, '2022-07-22 11:34:43', '2022-07-22 16:08:38'); +INSERT INTO `sys_user_file` VALUES (12, 1, 'pro202012303.png', 0, 1, '20220722/9d269d1fe7294ea4b5ca6f11c6ac8a95.png', 74518, 'image/png', 0, 1, '2022-07-22 11:34:47', '2022-07-22 16:08:39'); +INSERT INTO `sys_user_file` VALUES (13, 1, 'eleadmin20201020172822.png', 0, 1, '20220722/45c686ab54264822963bc40716222591.png', 103558, 'image/png', 0, 1, '2022-07-22 13:02:52', '2022-07-22 16:08:39'); +INSERT INTO `sys_user_file` VALUES (14, 1, 'RZ8FQmZfHkcffMlTBCJllBFjEhEsObVo.jpg', 0, 8, '20220722/099d2f77dfad41c7af776ad81af7aab5.jpg', 38206, 'image/jpeg', 0, 1, '2022-07-22 13:34:41', '2022-07-22 16:08:40'); +INSERT INTO `sys_user_file` VALUES (15, 1, 'WLXm7gp1EbLDtvVQgkeQeyq5OtDm00Jd.jpg', 0, 8, '20220722/faf7fec118824f309fb66961866d9712.jpg', 60365, 'image/jpeg', 0, 1, '2022-07-22 13:34:49', '2022-07-22 16:08:41'); +INSERT INTO `sys_user_file` VALUES (16, 1, '4Z0QR2L0J1XStxBh99jVJ8qLfsGsOgjU.jpg', 0, 8, '20220722/d845f1a4e91143dc81ec9fa96ce6f074.jpg', 50118, 'image/jpeg', 0, 1, '2022-07-22 13:34:54', '2022-07-22 16:08:42'); +INSERT INTO `sys_user_file` VALUES (17, 1, 'ttkIjNPlVDuv4lUTvRX8GIlM2QqSe0jg.jpg', 0, 8, '20220722/4fc98decedcb4029bc954369c5e8c294.jpg', 29948, 'image/jpeg', 0, 1, '2022-07-22 13:35:03', '2022-07-22 16:08:42'); +INSERT INTO `sys_user_file` VALUES (18, 1, 'fAenQ8nvRjL7x0i0jEfuDBZHvJfHf3v6.jpg', 0, 8, '20220722/9787d2f5b37d4813a48b72e950d00395.jpg', 48228, 'image/jpeg', 0, 1, '2022-07-22 13:35:08', '2022-07-22 16:08:43'); +INSERT INTO `sys_user_file` VALUES (19, 1, 'LrCTN2j94lo9N7wEql7cBr1Ux4rHMvmZ.jpg', 0, 8, '20220722/9dacd9d48efa483ab204ae8ad0b60864.jpg', 37320, 'image/jpeg', 0, 1, '2022-07-22 13:35:12', '2022-07-22 16:08:43'); +INSERT INTO `sys_user_file` VALUES (20, 1, 'yeKvhT20lMU0f1T3Y743UlGEOLLnZSnp.jpg', 0, 8, '20220722/f74da7fd19524bc0a4e75e6159d041ac.jpg', 29040, 'image/jpeg', 0, 1, '2022-07-22 13:35:17', '2022-07-22 16:08:44'); +INSERT INTO `sys_user_file` VALUES (21, 1, 'CyrCNmTJfv7D6GFAg39bjT3eRkkRm5dI.jpg', 0, 8, '20220722/7539f0f90c4749cbbb56b111e2b8d6af.jpg', 39560, 'image/jpeg', 0, 1, '2022-07-22 13:35:26', '2022-07-22 16:08:45'); +INSERT INTO `sys_user_file` VALUES (22, 1, 'faa0202700ee455b90fe77d8bef98bc0.jpg', 0, 9, '20220722/5079a6bc43b64bf2b86b87275dfaf7a2.jpg', 10250, 'image/jpeg', 0, 1, '2022-07-22 13:36:21', '2022-07-22 16:08:45'); +INSERT INTO `sys_user_file` VALUES (23, 1, 'fe9196dd091e438fba115205c1003ee7.jpg', 0, 9, '20220722/db6740d4bb6e4938a8ce502a6af4554d.jpg', 10726, 'image/jpeg', 0, 1, '2022-07-22 13:36:34', '2022-07-22 16:08:46'); +INSERT INTO `sys_user_file` VALUES (24, 1, '21222950dc174485b2ec5088435a46a3.jpg', 0, 9, '20220722/ef84d66c378549e7807b98b64282d222.jpg', 15201, 'image/jpeg', 0, 1, '2022-07-22 13:37:49', '2022-07-22 16:08:47'); +INSERT INTO `sys_user_file` VALUES (25, 1, 'adb3ad5e05614fd2a59cf886ffc37f74.jpg', 0, 9, '20220722/c326e31373084a83a99387ac7929ecc7.jpg', 12782, 'image/jpeg', 0, 1, '2022-07-22 13:37:53', '2022-07-22 16:08:47'); +INSERT INTO `sys_user_file` VALUES (26, 1, 'b3ce64e10db7497b8b9f5a31df1b4eb2.jpg', 0, 9, '20220722/2f5d639d26e0478ea50935edde4fd229.jpg', 13086, 'image/jpeg', 0, 1, '2022-07-22 13:37:56', '2022-07-22 16:08:48'); +INSERT INTO `sys_user_file` VALUES (27, 1, 'b6a811873e704db49db994053a5019b2.jpg', 0, 9, '20220722/8da9136eed1f41cb8d4907cb77199ca5.jpg', 12591, 'image/jpeg', 0, 1, '2022-07-22 13:38:00', '2022-07-22 16:08:49'); +INSERT INTO `sys_user_file` VALUES (28, 1, 'be7dc0c24fc342fda44e12a2c2a2b7bb.jpg', 0, 9, '20220722/2576207113104107935e743b5d5cd52a.jpg', 13554, 'image/jpeg', 0, 1, '2022-07-22 13:38:09', '2022-07-22 16:08:49'); +INSERT INTO `sys_user_file` VALUES (29, 1, 'c184eef391ae48dba87e3057e70238fb.jpg', 0, 9, '20220722/15528efcdd1042ad8fce23d0f36905df.jpg', 17857, 'image/jpeg', 0, 1, '2022-07-22 13:38:15', '2022-07-22 16:08:50'); +INSERT INTO `sys_user_file` VALUES (30, 1, 'd3519518b00d42d3936b2ab5ce3a4cc3.jpg', 0, 9, '20220722/6b8cfc0ee93144d680375a5c588da1e4.jpg', 10333, 'image/jpeg', 0, 1, '2022-07-22 13:38:22', '2022-07-22 16:08:51'); +INSERT INTO `sys_user_file` VALUES (31, 1, '8931360b593040238d894a542c9037bc.jpg', 0, 9, '20220722/0e88d170dc284263898422dba5de257c.jpg', 10377, 'image/jpeg', 0, 1, '2022-07-22 13:38:26', '2022-07-22 16:08:52'); +INSERT INTO `sys_user_file` VALUES (32, 1, 'e36594e7423147748b2592ccb720ae9e.jpg', 0, 9, '20220722/14a5f30c639b450c9ac7c01bb18b26b5.jpg', 12451, 'image/jpeg', 0, 1, '2022-07-22 13:39:16', '2022-07-22 16:08:58'); +INSERT INTO `sys_user_file` VALUES (33, 1, 'f6bc05af944a4f738b54128717952107.jpg', 0, 9, '20220722/d67c079e3f41407c826ef9a110145d49.jpg', 11724, 'image/jpeg', 0, 1, '2022-07-22 13:39:20', '2022-07-22 16:08:59'); +INSERT INTO `sys_user_file` VALUES (34, 1, '0568caaf0a7e41dda2d901d4ac2f3243.jpg', 0, 9, '20220722/b8f43e929d6048a7b6354b0fe4fae440.jpg', 24290, 'image/jpeg', 0, 1, '2022-07-22 13:39:24', '2022-07-22 16:08:59'); +INSERT INTO `sys_user_file` VALUES (35, 1, '0bfaa58e801b47fb9f56dcb128206d94.jpg', 0, 9, '20220722/ebc5a81452694c6787b4e77ea579a12f.jpg', 4578, 'image/jpeg', 0, 1, '2022-07-22 13:39:28', '2022-07-22 16:09:00'); +INSERT INTO `sys_user_file` VALUES (36, 1, '12b3d575a2a24e0789a014bd6ce7585b.jpg', 0, 9, '20220722/1ba37747d5014a5e9f6f0de5771326c9.jpg', 20909, 'image/jpeg', 0, 1, '2022-07-22 13:39:32', '2022-07-22 16:09:01'); +INSERT INTO `sys_user_file` VALUES (37, 1, '2d98970a51b34b6b859339c96b240dcd.jpg', 0, 9, '20220722/6389dd41857b499a93ce3c5ce050da45.jpg', 11855, 'image/jpeg', 0, 1, '2022-07-22 13:39:36', '2022-07-22 16:09:02'); +INSERT INTO `sys_user_file` VALUES (38, 1, '3cc0f65fefbe448191aa728d80f6b97e.jpg', 0, 9, '20220722/bc90af738f2641abb497092781055030.jpg', 15237, 'image/jpeg', 0, 1, '2022-07-22 13:39:40', '2022-07-22 16:09:02'); +INSERT INTO `sys_user_file` VALUES (39, 1, '41d81834e87546f49d3ff48c3806ea92.jpg', 0, 9, '20220722/d08de988712a40e2b315ddbff750e730.jpg', 10983, 'image/jpeg', 0, 1, '2022-07-22 13:39:45', '2022-07-22 16:09:03'); +INSERT INTO `sys_user_file` VALUES (40, 1, '4e60a84551fa48439bf42ecdb9673331.jpg', 0, 9, '20220722/5f5d6d56e4a74744906c542685770c28.jpg', 12075, 'image/jpeg', 0, 1, '2022-07-22 13:39:49', '2022-07-22 16:09:04'); +INSERT INTO `sys_user_file` VALUES (41, 1, '66e6f6c60cfa44b288d6343027b544d0.jpg', 0, 9, '20220722/da9cb7ee91c04dedb462aebaa9321e15.jpg', 8346, 'image/jpeg', 0, 1, '2022-07-22 13:39:53', '2022-07-22 16:09:04'); +INSERT INTO `sys_user_file` VALUES (42, 1, 'd6442cfa99b64b51aabfc470055b05dc.jpg', 0, 9, '20220722/b4fa02e6f1834586a05cede521394960.jpg', 14678, 'image/jpeg', 0, 1, '2022-07-22 13:39:58', '2022-07-22 16:09:05'); +INSERT INTO `sys_user_file` VALUES (43, 1, '948344a2a77c47a7a7b332fe12ff749a.jpg', 0, 9, '20220722/a9e7971f1b084cf1a69544ae984ee9f7.jpg', 14334, 'image/jpeg', 0, 1, '2022-07-22 13:40:04', '2022-07-22 16:09:05'); +INSERT INTO `sys_user_file` VALUES (44, 1, '20200708230820.png', 0, 2, '20220722/530578a3237745d791106053856f162f.png', 3799, 'image/png', 0, 1, '2022-07-22 13:52:55', '2022-07-22 16:09:06'); +INSERT INTO `sys_user_file` VALUES (45, 1, 'china-provinces.geo.json', 0, 2, '20220722/74fc77a305f341f0a40d2448efaa047d.json', 54238, 'application/json', 0, 1, '2022-07-22 13:55:46', '2022-07-22 16:09:07'); +INSERT INTO `sys_user_file` VALUES (46, 1, 'word.geo.json', 0, 2, '20220722/6f4b5f19e7754120868c810c5fcbeeb6.json', 1504924, 'application/json', 0, 1, '2022-07-22 13:55:51', '2022-07-22 16:09:08'); +INSERT INTO `sys_user_file` VALUES (47, 1, '20200708224450.pdf', 0, 2, '20220722/21a93c2641b5486aae6d29b46a353073.pdf', 839977, 'application/pdf', 0, 1, '2022-07-22 13:55:55', '2022-07-22 16:09:10'); +INSERT INTO `sys_user_file` VALUES (48, 1, '20200708224450.docx', 0, 2, '20220722/4a4f2df9ba4249e9b00df0427691ce57.docx', 2586229, 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 0, 1, '2022-07-22 13:55:58', '2022-07-22 16:09:10'); +INSERT INTO `sys_user_file` VALUES (49, 1, 'document.json', 0, 2, '20220722/e988a1140259460095dd154a0ab54ff0.json', 1675, 'application/json', 0, 1, '2022-07-22 13:57:16', '2022-07-22 16:09:11'); +INSERT INTO `sys_user_file` VALUES (50, 1, 'archive.json', 0, 2, '20220722/fab7f40d28c44000b104205bd6d9e227.json', 1998, 'application/json', 0, 1, '2022-07-22 13:57:19', '2022-07-22 16:09:13'); +INSERT INTO `sys_user_file` VALUES (51, 1, 'eleadmin-copyright.jpg', 0, 2, '20220722/881ef0f83ef347a18177ee26ccb33d1a.jpg', 79297, 'image/jpeg', 0, 1, '2022-07-22 13:57:23', '2022-07-22 16:09:14'); +INSERT INTO `sys_user_file` VALUES (52, 1, 'eleadmin-pro-copyright.jpg', 0, 2, '20220722/b7bac0f9abdb4b0f94b911940a77ad3b.jpg', 151976, 'image/jpeg', 0, 1, '2022-07-22 13:57:25', '2022-07-22 16:09:16'); +INSERT INTO `sys_user_file` VALUES (53, 14, '我的图片', 1, 0, NULL, NULL, NULL, 0, 2, '2022-07-22 11:28:02', '2022-07-22 11:28:02'); +INSERT INTO `sys_user_file` VALUES (54, 14, '我的文件', 1, 0, NULL, NULL, NULL, 0, 2, '2022-07-22 11:28:09', '2022-07-22 11:28:09'); +INSERT INTO `sys_user_file` VALUES (55, 14, 'avatar.jpg', 0, 0, '20220722/19b623b787514f8eb7d1e8edf2e9ff15.jpg', 12805, 'image/jpeg', 0, 2, '2022-07-22 11:28:16', '2022-07-22 11:28:16'); +INSERT INTO `sys_user_file` VALUES (56, 14, 'logo.svg', 0, 0, '20220722/e77995c100de46409cce84e848a63f7d.svg', 1605, 'image/svg+xml', 0, 2, '2022-07-22 11:28:21', '2022-07-22 11:28:21'); +INSERT INTO `sys_user_file` VALUES (57, 14, 'favicon.ico', 0, 0, '20220722/acb31ddb5ce44530933c48741c3bbfe2.ico', 4286, 'image/vnd.microsoft.icon', 0, 2, '2022-07-22 11:29:11', '2022-07-22 11:29:11'); +INSERT INTO `sys_user_file` VALUES (58, 14, '用户导入模板.xlsx', 0, 0, '20220722/b4fa501bf6084f2e8bed971e68462ce3.xlsx', 10221, 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 0, 2, '2022-07-22 11:29:24', '2022-07-22 11:29:24'); +INSERT INTO `sys_user_file` VALUES (59, 14, 'classes.json', 0, 0, '20220722/8d59c7d48453444d9ee84bd2b4c27a12.json', 6789, 'application/json', 0, 2, '2022-07-22 11:29:28', '2022-07-22 11:29:28'); +INSERT INTO `sys_user_file` VALUES (60, 14, '壁纸', 1, 53, NULL, NULL, NULL, 0, 2, '2022-07-22 11:30:58', '2022-07-22 16:10:42'); +INSERT INTO `sys_user_file` VALUES (61, 14, '头像', 1, 53, NULL, NULL, NULL, 0, 2, '2022-07-22 11:31:02', '2022-07-22 16:10:43'); +INSERT INTO `sys_user_file` VALUES (62, 14, 'pro202012301.png', 0, 53, '20220722/4cbac74d9c5c45858854b24ee5db8e87.png', 59257, 'image/png', 0, 2, '2022-07-22 11:34:39', '2022-07-22 16:10:44'); +INSERT INTO `sys_user_file` VALUES (63, 14, 'pro202012302.png', 0, 53, '20220722/24ba2b0906f64394ae0fb5e8f813cb30.png', 64832, 'image/png', 0, 2, '2022-07-22 11:34:43', '2022-07-22 16:10:44'); +INSERT INTO `sys_user_file` VALUES (64, 14, 'pro202012303.png', 0, 53, '20220722/9d269d1fe7294ea4b5ca6f11c6ac8a95.png', 74518, 'image/png', 0, 2, '2022-07-22 11:34:47', '2022-07-22 16:10:45'); +INSERT INTO `sys_user_file` VALUES (65, 14, 'eleadmin20201020172822.png', 0, 53, '20220722/45c686ab54264822963bc40716222591.png', 103558, 'image/png', 0, 2, '2022-07-22 13:02:52', '2022-07-22 16:10:46'); +INSERT INTO `sys_user_file` VALUES (66, 14, 'RZ8FQmZfHkcffMlTBCJllBFjEhEsObVo.jpg', 0, 60, '20220722/099d2f77dfad41c7af776ad81af7aab5.jpg', 38206, 'image/jpeg', 0, 2, '2022-07-22 13:34:41', '2022-07-22 16:10:55'); +INSERT INTO `sys_user_file` VALUES (67, 14, 'WLXm7gp1EbLDtvVQgkeQeyq5OtDm00Jd.jpg', 0, 60, '20220722/faf7fec118824f309fb66961866d9712.jpg', 60365, 'image/jpeg', 0, 2, '2022-07-22 13:34:49', '2022-07-22 16:10:56'); +INSERT INTO `sys_user_file` VALUES (68, 14, '4Z0QR2L0J1XStxBh99jVJ8qLfsGsOgjU.jpg', 0, 60, '20220722/d845f1a4e91143dc81ec9fa96ce6f074.jpg', 50118, 'image/jpeg', 0, 2, '2022-07-22 13:34:54', '2022-07-22 16:10:57'); +INSERT INTO `sys_user_file` VALUES (69, 14, 'ttkIjNPlVDuv4lUTvRX8GIlM2QqSe0jg.jpg', 0, 60, '20220722/4fc98decedcb4029bc954369c5e8c294.jpg', 29948, 'image/jpeg', 0, 2, '2022-07-22 13:35:03', '2022-07-22 16:10:57'); +INSERT INTO `sys_user_file` VALUES (70, 14, 'fAenQ8nvRjL7x0i0jEfuDBZHvJfHf3v6.jpg', 0, 60, '20220722/9787d2f5b37d4813a48b72e950d00395.jpg', 48228, 'image/jpeg', 0, 2, '2022-07-22 13:35:08', '2022-07-22 16:10:58'); +INSERT INTO `sys_user_file` VALUES (71, 14, 'LrCTN2j94lo9N7wEql7cBr1Ux4rHMvmZ.jpg', 0, 60, '20220722/9dacd9d48efa483ab204ae8ad0b60864.jpg', 37320, 'image/jpeg', 0, 2, '2022-07-22 13:35:12', '2022-07-22 16:10:59'); +INSERT INTO `sys_user_file` VALUES (72, 14, 'yeKvhT20lMU0f1T3Y743UlGEOLLnZSnp.jpg', 0, 60, '20220722/f74da7fd19524bc0a4e75e6159d041ac.jpg', 29040, 'image/jpeg', 0, 2, '2022-07-22 13:35:17', '2022-07-22 16:10:59'); +INSERT INTO `sys_user_file` VALUES (73, 14, 'CyrCNmTJfv7D6GFAg39bjT3eRkkRm5dI.jpg', 0, 60, '20220722/7539f0f90c4749cbbb56b111e2b8d6af.jpg', 39560, 'image/jpeg', 0, 2, '2022-07-22 13:35:26', '2022-07-22 16:11:00'); +INSERT INTO `sys_user_file` VALUES (74, 14, 'faa0202700ee455b90fe77d8bef98bc0.jpg', 0, 61, '20220722/5079a6bc43b64bf2b86b87275dfaf7a2.jpg', 10250, 'image/jpeg', 0, 2, '2022-07-22 13:36:21', '2022-07-22 16:11:04'); +INSERT INTO `sys_user_file` VALUES (75, 14, 'fe9196dd091e438fba115205c1003ee7.jpg', 0, 61, '20220722/db6740d4bb6e4938a8ce502a6af4554d.jpg', 10726, 'image/jpeg', 0, 2, '2022-07-22 13:36:34', '2022-07-22 16:11:05'); +INSERT INTO `sys_user_file` VALUES (76, 14, '21222950dc174485b2ec5088435a46a3.jpg', 0, 61, '20220722/ef84d66c378549e7807b98b64282d222.jpg', 15201, 'image/jpeg', 0, 2, '2022-07-22 13:37:49', '2022-07-22 16:11:06'); +INSERT INTO `sys_user_file` VALUES (77, 14, 'adb3ad5e05614fd2a59cf886ffc37f74.jpg', 0, 61, '20220722/c326e31373084a83a99387ac7929ecc7.jpg', 12782, 'image/jpeg', 0, 2, '2022-07-22 13:37:53', '2022-07-22 16:11:06'); +INSERT INTO `sys_user_file` VALUES (78, 14, 'b3ce64e10db7497b8b9f5a31df1b4eb2.jpg', 0, 61, '20220722/2f5d639d26e0478ea50935edde4fd229.jpg', 13086, 'image/jpeg', 0, 2, '2022-07-22 13:37:56', '2022-07-22 16:11:07'); +INSERT INTO `sys_user_file` VALUES (79, 14, 'b6a811873e704db49db994053a5019b2.jpg', 0, 61, '20220722/8da9136eed1f41cb8d4907cb77199ca5.jpg', 12591, 'image/jpeg', 0, 2, '2022-07-22 13:38:00', '2022-07-22 16:11:08'); +INSERT INTO `sys_user_file` VALUES (80, 14, 'be7dc0c24fc342fda44e12a2c2a2b7bb.jpg', 0, 61, '20220722/2576207113104107935e743b5d5cd52a.jpg', 13554, 'image/jpeg', 0, 2, '2022-07-22 13:38:09', '2022-07-22 16:11:09'); +INSERT INTO `sys_user_file` VALUES (81, 14, 'c184eef391ae48dba87e3057e70238fb.jpg', 0, 61, '20220722/15528efcdd1042ad8fce23d0f36905df.jpg', 17857, 'image/jpeg', 0, 2, '2022-07-22 13:38:15', '2022-07-22 16:11:09'); +INSERT INTO `sys_user_file` VALUES (82, 14, 'd3519518b00d42d3936b2ab5ce3a4cc3.jpg', 0, 61, '20220722/6b8cfc0ee93144d680375a5c588da1e4.jpg', 10333, 'image/jpeg', 0, 2, '2022-07-22 13:38:22', '2022-07-22 16:11:10'); +INSERT INTO `sys_user_file` VALUES (83, 14, '8931360b593040238d894a542c9037bc.jpg', 0, 61, '20220722/0e88d170dc284263898422dba5de257c.jpg', 10377, 'image/jpeg', 0, 2, '2022-07-22 13:38:26', '2022-07-22 16:11:11'); +INSERT INTO `sys_user_file` VALUES (84, 14, 'e36594e7423147748b2592ccb720ae9e.jpg', 0, 61, '20220722/14a5f30c639b450c9ac7c01bb18b26b5.jpg', 12451, 'image/jpeg', 0, 2, '2022-07-22 13:39:16', '2022-07-22 16:11:12'); +INSERT INTO `sys_user_file` VALUES (85, 14, 'f6bc05af944a4f738b54128717952107.jpg', 0, 61, '20220722/d67c079e3f41407c826ef9a110145d49.jpg', 11724, 'image/jpeg', 0, 2, '2022-07-22 13:39:20', '2022-07-22 16:11:13'); +INSERT INTO `sys_user_file` VALUES (86, 14, '0568caaf0a7e41dda2d901d4ac2f3243.jpg', 0, 61, '20220722/b8f43e929d6048a7b6354b0fe4fae440.jpg', 24290, 'image/jpeg', 0, 2, '2022-07-22 13:39:24', '2022-07-22 16:11:19'); +INSERT INTO `sys_user_file` VALUES (87, 14, '0bfaa58e801b47fb9f56dcb128206d94.jpg', 0, 61, '20220722/ebc5a81452694c6787b4e77ea579a12f.jpg', 4578, 'image/jpeg', 0, 2, '2022-07-22 13:39:28', '2022-07-22 16:11:20'); +INSERT INTO `sys_user_file` VALUES (88, 14, '12b3d575a2a24e0789a014bd6ce7585b.jpg', 0, 61, '20220722/1ba37747d5014a5e9f6f0de5771326c9.jpg', 20909, 'image/jpeg', 0, 2, '2022-07-22 13:39:32', '2022-07-22 16:11:20'); +INSERT INTO `sys_user_file` VALUES (89, 14, '2d98970a51b34b6b859339c96b240dcd.jpg', 0, 61, '20220722/6389dd41857b499a93ce3c5ce050da45.jpg', 11855, 'image/jpeg', 0, 2, '2022-07-22 13:39:36', '2022-07-22 16:11:21'); +INSERT INTO `sys_user_file` VALUES (90, 14, '3cc0f65fefbe448191aa728d80f6b97e.jpg', 0, 61, '20220722/bc90af738f2641abb497092781055030.jpg', 15237, 'image/jpeg', 0, 2, '2022-07-22 13:39:40', '2022-07-22 16:11:21'); +INSERT INTO `sys_user_file` VALUES (91, 14, '41d81834e87546f49d3ff48c3806ea92.jpg', 0, 61, '20220722/d08de988712a40e2b315ddbff750e730.jpg', 10983, 'image/jpeg', 0, 2, '2022-07-22 13:39:45', '2022-07-22 16:11:22'); +INSERT INTO `sys_user_file` VALUES (92, 14, '4e60a84551fa48439bf42ecdb9673331.jpg', 0, 61, '20220722/5f5d6d56e4a74744906c542685770c28.jpg', 12075, 'image/jpeg', 0, 2, '2022-07-22 13:39:49', '2022-07-22 16:11:23'); +INSERT INTO `sys_user_file` VALUES (93, 14, '66e6f6c60cfa44b288d6343027b544d0.jpg', 0, 61, '20220722/da9cb7ee91c04dedb462aebaa9321e15.jpg', 8346, 'image/jpeg', 0, 2, '2022-07-22 13:39:53', '2022-07-22 16:11:24'); +INSERT INTO `sys_user_file` VALUES (94, 14, 'd6442cfa99b64b51aabfc470055b05dc.jpg', 0, 61, '20220722/b4fa02e6f1834586a05cede521394960.jpg', 14678, 'image/jpeg', 0, 2, '2022-07-22 13:39:58', '2022-07-22 16:11:24'); +INSERT INTO `sys_user_file` VALUES (95, 14, '948344a2a77c47a7a7b332fe12ff749a.jpg', 0, 61, '20220722/a9e7971f1b084cf1a69544ae984ee9f7.jpg', 14334, 'image/jpeg', 0, 2, '2022-07-22 13:40:04', '2022-07-22 16:11:25'); +INSERT INTO `sys_user_file` VALUES (96, 14, '20200708230820.png', 0, 54, '20220722/530578a3237745d791106053856f162f.png', 3799, 'image/png', 0, 2, '2022-07-22 13:52:55', '2022-07-22 16:11:32'); +INSERT INTO `sys_user_file` VALUES (97, 14, 'china-provinces.geo.json', 0, 54, '20220722/74fc77a305f341f0a40d2448efaa047d.json', 54238, 'application/json', 0, 2, '2022-07-22 13:55:46', '2022-07-22 16:11:32'); +INSERT INTO `sys_user_file` VALUES (98, 14, 'word.geo.json', 0, 54, '20220722/6f4b5f19e7754120868c810c5fcbeeb6.json', 1504924, 'application/json', 0, 2, '2022-07-22 13:55:51', '2022-07-22 16:11:33'); +INSERT INTO `sys_user_file` VALUES (99, 14, '20200708224450.pdf', 0, 54, '20220722/21a93c2641b5486aae6d29b46a353073.pdf', 839977, 'application/pdf', 0, 2, '2022-07-22 13:55:55', '2022-07-22 16:11:33'); +INSERT INTO `sys_user_file` VALUES (100, 14, '20200708224450.docx', 0, 54, '20220722/4a4f2df9ba4249e9b00df0427691ce57.docx', 2586229, 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 0, 2, '2022-07-22 13:55:58', '2022-07-22 16:11:34'); +INSERT INTO `sys_user_file` VALUES (101, 14, 'document.json', 0, 54, '20220722/e988a1140259460095dd154a0ab54ff0.json', 1675, 'application/json', 0, 2, '2022-07-22 13:57:16', '2022-07-22 16:11:35'); +INSERT INTO `sys_user_file` VALUES (102, 14, 'archive.json', 0, 54, '20220722/fab7f40d28c44000b104205bd6d9e227.json', 1998, 'application/json', 0, 2, '2022-07-22 13:57:19', '2022-07-22 16:11:36'); +INSERT INTO `sys_user_file` VALUES (103, 14, 'eleadmin-copyright.jpg', 0, 54, '20220722/881ef0f83ef347a18177ee26ccb33d1a.jpg', 79297, 'image/jpeg', 0, 2, '2022-07-22 13:57:23', '2022-07-22 16:11:36'); +INSERT INTO `sys_user_file` VALUES (104, 14, 'eleadmin-pro-copyright.jpg', 0, 54, '20220722/b7bac0f9abdb4b0f94b911940a77ad3b.jpg', 151976, 'image/jpeg', 0, 2, '2022-07-22 13:57:25', '2022-07-22 16:11:37'); +COMMIT; + +-- ---------------------------- +-- Table structure for sys_user_role +-- ---------------------------- +DROP TABLE IF EXISTS `sys_user_role`; +CREATE TABLE `sys_user_role` ( + `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id', + `user_id` int(11) NOT NULL COMMENT '用户id', + `role_id` int(11) NOT NULL COMMENT '角色id', + `tenant_id` int(11) NOT NULL DEFAULT '1' COMMENT '租户id', + `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', + PRIMARY KEY (`id`) USING BTREE, + KEY `FK_sys_user_role` (`user_id`) USING BTREE, + KEY `FK_sys_user_role_role` (`role_id`) USING BTREE, + KEY `tenant_id` (`tenant_id`) USING BTREE, + CONSTRAINT `sys_user_role_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `sys_user` (`user_id`) ON DELETE CASCADE, + CONSTRAINT `sys_user_role_ibfk_2` FOREIGN KEY (`role_id`) REFERENCES `sys_role` (`role_id`) ON DELETE CASCADE, + CONSTRAINT `sys_user_role_ibfk_3` FOREIGN KEY (`tenant_id`) REFERENCES `sys_tenant` (`tenant_id`) ON DELETE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=87 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='用户角色'; + +-- ---------------------------- +-- Records of sys_user_role +-- ---------------------------- +BEGIN; +INSERT INTO `sys_user_role` VALUES (1, 1, 1, 1, '2021-05-21 15:23:41', '2021-10-13 21:45:16'); +INSERT INTO `sys_user_role` VALUES (2, 2, 2, 1, '2021-05-21 15:23:41', '2021-10-13 21:45:16'); +INSERT INTO `sys_user_role` VALUES (3, 3, 2, 1, '2021-05-21 15:23:41', '2021-10-13 21:45:16'); +INSERT INTO `sys_user_role` VALUES (4, 4, 2, 1, '2021-10-18 02:29:46', '2021-10-18 02:29:46'); +INSERT INTO `sys_user_role` VALUES (5, 5, 2, 1, '2021-05-21 15:23:41', '2021-10-18 02:29:00'); +INSERT INTO `sys_user_role` VALUES (6, 6, 2, 1, '2021-05-21 15:23:41', '2021-10-13 21:45:16'); +INSERT INTO `sys_user_role` VALUES (7, 7, 2, 1, '2021-10-18 02:31:12', '2021-10-18 02:31:12'); +INSERT INTO `sys_user_role` VALUES (8, 8, 2, 1, '2021-05-21 15:23:41', '2021-10-13 21:45:16'); +INSERT INTO `sys_user_role` VALUES (9, 9, 2, 1, '2021-05-21 15:23:41', '2021-10-13 21:45:16'); +INSERT INTO `sys_user_role` VALUES (10, 10, 2, 1, '2021-05-21 15:23:41', '2021-10-13 21:45:16'); +INSERT INTO `sys_user_role` VALUES (11, 11, 2, 1, '2021-05-21 15:23:41', '2021-10-13 21:45:16'); +INSERT INTO `sys_user_role` VALUES (12, 12, 2, 1, '2021-05-21 15:23:41', '2021-10-13 21:45:16'); +INSERT INTO `sys_user_role` VALUES (13, 13, 2, 1, '2021-10-18 02:29:56', '2021-10-18 02:29:56'); +INSERT INTO `sys_user_role` VALUES (15, 15, 5, 5, '2021-05-21 15:23:41', '2022-08-03 13:55:09'); +INSERT INTO `sys_user_role` VALUES (16, 16, 5, 5, '2021-05-21 15:23:41', '2022-08-03 13:55:09'); +INSERT INTO `sys_user_role` VALUES (17, 17, 5, 5, '2021-05-21 15:23:41', '2022-08-03 13:55:09'); +INSERT INTO `sys_user_role` VALUES (18, 18, 5, 5, '2021-05-21 15:23:41', '2022-08-03 13:55:09'); +INSERT INTO `sys_user_role` VALUES (19, 19, 5, 5, '2021-05-21 15:23:41', '2022-08-03 13:55:09'); +INSERT INTO `sys_user_role` VALUES (20, 20, 5, 5, '2021-05-21 15:23:41', '2022-08-03 13:55:09'); +INSERT INTO `sys_user_role` VALUES (21, 21, 5, 5, '2021-05-21 15:23:41', '2022-08-03 13:55:09'); +INSERT INTO `sys_user_role` VALUES (22, 22, 5, 5, '2021-05-21 15:23:41', '2022-08-03 13:55:09'); +INSERT INTO `sys_user_role` VALUES (23, 23, 5, 5, '2021-05-21 15:23:41', '2022-08-03 13:55:09'); +INSERT INTO `sys_user_role` VALUES (24, 24, 5, 5, '2021-05-21 15:23:41', '2022-08-03 13:55:09'); +INSERT INTO `sys_user_role` VALUES (25, 25, 5, 5, '2021-05-21 15:23:41', '2022-08-03 13:55:09'); +INSERT INTO `sys_user_role` VALUES (26, 26, 5, 5, '2021-05-21 15:23:41', '2022-08-03 13:55:09'); +INSERT INTO `sys_user_role` VALUES (27, 27, 7, 3, '2021-05-21 15:23:41', '2021-10-13 21:45:16'); +INSERT INTO `sys_user_role` VALUES (28, 28, 8, 3, '2021-05-21 15:23:41', '2021-10-13 21:45:16'); +INSERT INTO `sys_user_role` VALUES (29, 29, 8, 3, '2021-05-21 15:23:41', '2021-10-13 21:45:16'); +INSERT INTO `sys_user_role` VALUES (30, 30, 8, 3, '2021-05-21 15:23:41', '2021-10-13 21:45:16'); +INSERT INTO `sys_user_role` VALUES (31, 31, 8, 3, '2021-05-21 15:23:41', '2021-10-13 21:45:16'); +INSERT INTO `sys_user_role` VALUES (32, 32, 8, 3, '2021-05-21 15:23:41', '2021-10-13 21:45:16'); +INSERT INTO `sys_user_role` VALUES (33, 33, 8, 3, '2021-05-21 15:23:41', '2021-10-13 21:45:16'); +INSERT INTO `sys_user_role` VALUES (34, 34, 8, 3, '2021-05-21 15:23:41', '2021-10-13 21:45:16'); +INSERT INTO `sys_user_role` VALUES (35, 35, 8, 3, '2021-05-21 15:23:41', '2021-10-13 21:45:16'); +INSERT INTO `sys_user_role` VALUES (36, 36, 8, 3, '2021-05-21 15:23:41', '2021-10-13 21:45:16'); +INSERT INTO `sys_user_role` VALUES (37, 37, 8, 3, '2021-05-21 15:23:41', '2021-10-13 21:45:16'); +INSERT INTO `sys_user_role` VALUES (38, 38, 8, 3, '2021-05-21 15:23:41', '2021-10-13 21:45:16'); +INSERT INTO `sys_user_role` VALUES (39, 39, 8, 3, '2021-05-21 15:23:41', '2021-10-13 21:45:16'); +INSERT INTO `sys_user_role` VALUES (40, 40, 4, 5, '2022-07-25 17:40:13', '2022-08-03 13:55:09'); +INSERT INTO `sys_user_role` VALUES (41, 41, 4, 5, '2022-07-25 17:41:55', '2022-08-03 13:55:09'); +INSERT INTO `sys_user_role` VALUES (44, 43, 4, 5, '2022-07-27 09:43:57', '2022-08-03 13:55:09'); +INSERT INTO `sys_user_role` VALUES (49, 44, 5, 5, '2022-07-29 11:19:56', '2022-08-03 13:55:09'); +INSERT INTO `sys_user_role` VALUES (50, 44, 6, 5, '2022-07-29 11:19:56', '2022-08-03 13:55:09'); +INSERT INTO `sys_user_role` VALUES (55, 47, 1, 1, '2022-07-29 19:44:30', '2022-07-29 19:44:30'); +INSERT INTO `sys_user_role` VALUES (58, 48, 5, 5, '2022-07-30 00:26:00', '2022-08-03 13:55:09'); +INSERT INTO `sys_user_role` VALUES (61, 46, 11, 5, '2022-07-31 18:38:50', '2022-08-03 13:55:09'); +INSERT INTO `sys_user_role` VALUES (62, 45, 11, 5, '2022-07-31 18:38:57', '2022-08-03 13:55:09'); +INSERT INTO `sys_user_role` VALUES (65, 14, 12, 5, '2022-07-31 18:39:11', '2022-08-03 13:55:09'); +INSERT INTO `sys_user_role` VALUES (66, 14, 11, 5, '2022-07-31 18:39:11', '2022-08-03 13:55:09'); +INSERT INTO `sys_user_role` VALUES (69, 42, 11, 5, '2022-08-03 13:33:04', '2022-08-03 13:55:09'); +INSERT INTO `sys_user_role` VALUES (70, 59, 5, 5, '2022-08-04 12:52:31', '2022-08-04 12:52:31'); +INSERT INTO `sys_user_role` VALUES (71, 15, 5, 2, '2021-05-21 15:23:41', '2021-10-13 21:45:16'); +INSERT INTO `sys_user_role` VALUES (72, 16, 5, 2, '2021-05-21 15:23:41', '2021-10-13 21:45:16'); +INSERT INTO `sys_user_role` VALUES (73, 17, 5, 2, '2021-05-21 15:23:41', '2021-10-13 21:45:16'); +INSERT INTO `sys_user_role` VALUES (74, 18, 5, 2, '2021-05-21 15:23:41', '2021-10-13 21:45:16'); +INSERT INTO `sys_user_role` VALUES (75, 19, 5, 2, '2021-05-21 15:23:41', '2021-10-13 21:45:16'); +INSERT INTO `sys_user_role` VALUES (76, 20, 5, 2, '2021-05-21 15:23:41', '2021-10-13 21:45:16'); +INSERT INTO `sys_user_role` VALUES (77, 21, 5, 2, '2021-05-21 15:23:41', '2021-10-13 21:45:16'); +INSERT INTO `sys_user_role` VALUES (78, 22, 5, 2, '2021-05-21 15:23:41', '2021-10-13 21:45:16'); +INSERT INTO `sys_user_role` VALUES (79, 23, 5, 2, '2021-05-21 15:23:41', '2021-10-13 21:45:16'); +INSERT INTO `sys_user_role` VALUES (80, 24, 5, 2, '2021-05-21 15:23:41', '2021-10-13 21:45:16'); +INSERT INTO `sys_user_role` VALUES (81, 25, 5, 2, '2021-05-21 15:23:41', '2021-10-13 21:45:16'); +INSERT INTO `sys_user_role` VALUES (82, 26, 5, 2, '2021-05-21 15:23:41', '2021-10-13 21:45:16'); +INSERT INTO `sys_user_role` VALUES (83, 73, 12, 5, '2022-08-04 21:24:37', '2022-08-04 21:24:37'); +INSERT INTO `sys_user_role` VALUES (84, 73, 5, 5, '2022-08-04 21:24:37', '2022-08-04 21:24:37'); +INSERT INTO `sys_user_role` VALUES (86, 58, 22, 11, '2022-08-05 18:26:09', '2022-08-05 18:52:57'); +COMMIT; + +SET FOREIGN_KEY_CHECKS = 1;