diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..269c122 --- /dev/null +++ b/.classpath @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.gitignore b/.gitignore index 09bdfea..b58d38f 100644 --- a/.gitignore +++ b/.gitignore @@ -13,9 +13,7 @@ target/ ### STS ### .apt_generated -.classpath .factorypath -.project .settings .springBeans diff --git a/.mvn/wrapper/maven-wrapper.jar b/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000..01e6799 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..7179346 --- /dev/null +++ b/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1 @@ +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.5.4/apache-maven-3.5.4-bin.zip diff --git a/.project b/.project new file mode 100644 index 0000000..df6375e --- /dev/null +++ b/.project @@ -0,0 +1,23 @@ + + + blueland-plateform + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + diff --git a/README.md b/README.md new file mode 100644 index 0000000..8f3be38 --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +### 工程模块说明 ### +1. model:实例类 +2. core:核心类,其他工程共享 +3. web: 应用、模块、模型、自定义表单数据服务 +4. render:静态页面渲染、物理表模型及数据处理 \ No newline at end of file diff --git a/mvnw b/mvnw new file mode 100644 index 0000000..5551fde --- /dev/null +++ b/mvnw @@ -0,0 +1,286 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven2 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)`" + # TODO classpath? +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 + jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar" + 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 command -v wget > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + wget "$jarUrl" -O "$wrapperJarPath" + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + curl -o "$wrapperJarPath" "$jarUrl" + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + 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 + +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..e5cfb0a --- /dev/null +++ b/mvnw.cmd @@ -0,0 +1,161 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven2 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 key stroke 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 my 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.4.2/maven-wrapper-0.4.2.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% ( + echo Found %WRAPPER_JAR% +) else ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + powershell -Command "(New-Object Net.WebClient).DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')" + echo Finished downloading %WRAPPER_JAR% +) +@REM End of extension + +%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..985143b --- /dev/null +++ b/pom.xml @@ -0,0 +1,101 @@ + + + 4.0.0 + com.blueland + blueland-plateform + 1.0-SNAPSHOT + blueland-plateform + 快速开发平台 + + + 1.8 + 2.5.6 + + + 2.0.0 + 1.1.21 + 5.4.2.Final + 1.2.56 + UTF-8 + 5.1.10 + + 2.3.5.RELEASE + 2.1.3.RELEASE + 3.8.0 + 2.5.0 + 3.3.2 + + 3.2 + 27.1-jre + + 2.9.7 + 3.6.0 + 1.2 + + 4.1.0 + 4.1.0 + 4.1.0 + 3.4.3.4 + 2.9.2 + 3.0.3 + + + + + + + org.springframework.boot + spring-boot-dependencies + ${spring.boot.version} + pom + import + + + + com.baomidou + mybatis-plus-boot-starter + ${mybatis-plus.version} + + + com.baomidou + mybatis-plus-extension + ${mybatis-plus.version} + + + + + pom + + usm-web + usm-model + usm-core + usm-render + + + + + public + aliyun nexus + https://maven.aliyun.com/repository/public/ + + true + + + + + + + public + aliyun nexus + https://maven.aliyun.com/repository/public/ + + true + + + false + + + + \ No newline at end of file diff --git a/usm-core/.checkstyle b/usm-core/.checkstyle new file mode 100644 index 0000000..5783bc0 --- /dev/null +++ b/usm-core/.checkstyle @@ -0,0 +1,7 @@ + + + + + + + diff --git a/usm-core/.classpath b/usm-core/.classpath new file mode 100644 index 0000000..e33daad --- /dev/null +++ b/usm-core/.classpath @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/usm-core/.gitignore b/usm-core/.gitignore new file mode 100644 index 0000000..4295891 --- /dev/null +++ b/usm-core/.gitignore @@ -0,0 +1,25 @@ +### Java template +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar +target/ +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + diff --git a/usm-core/.project b/usm-core/.project new file mode 100644 index 0000000..d90c796 --- /dev/null +++ b/usm-core/.project @@ -0,0 +1,35 @@ + + + blueland-plateform-core + + + + + + org.eclipse.wst.common.project.facet.core.builder + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + com.genuitec.eclipse.springframework.springbuilder + + + + + + com.genuitec.eclipse.springframework.springnature + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + org.eclipse.wst.common.project.facet.core.nature + + diff --git a/usm-core/pom.xml b/usm-core/pom.xml new file mode 100644 index 0000000..9888013 --- /dev/null +++ b/usm-core/pom.xml @@ -0,0 +1,201 @@ + + + 4.0.0 + + com.blueland + blueland-plateform + 1.0-SNAPSHOT + + usm-core + usm-core + http://maven.apache.org + + UTF-8 + + + + org.springframework.boot + spring-boot-starter-data-redis + 2.5.6 + + + cn.hutool + hutool-all + 5.7.14 + + + org.projectlombok + lombok + provided + + + com.blueland + usm-model + 1.0-SNAPSHOT + + + + + com.blueland + doc-cloud-sdk + ${sdk.version} + + + + + + + + org.springframework.boot + spring-boot-starter + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-tomcat + + + org.springframework.boot + spring-boot-starter-jdbc + + + org.springframework.boot + spring-boot-starter-aop + + + + com.alibaba + easyexcel + 2.1.4 + + + + + + + + com.alibaba + druid-spring-boot-starter + ${druid.version} + + + + + + + + + + + + + org.springframework.boot + spring-boot-starter-freemarker + + + org.springframework.boot + spring-boot-starter-tomcat + + + + + mysql + mysql-connector-java + + + org.springframework.boot + spring-boot-starter-test + test + + + com.alibaba + fastjson + ${fastjson.version} + + + + + + + + + + + + + com.github.xiaoymin + knife4j-spring-boot-starter + ${knife4j.version} + + + org.springframework.boot + spring-boot-devtools + true + + + + + org.apache.commons + commons-lang3 + + + ognl + ognl + ${ognl.version} + + + com.google.guava + guava + ${guava.version} + + + + + + + com.squareup.okhttp3 + okhttp + ${okhttp.version} + + + + + org.springframework.boot + spring-boot-starter-quartz + + + + org.apache.shardingsphere + sharding-jdbc-spring-boot-starter + 4.0.0-RC1 + + + + com.baomidou + mybatis-plus-boot-starter + + + com.baomidou + mybatis-plus-extension + + + + + + maven-compiler-plugin + + 1.8 + 1.8 + + + + + diff --git a/usm-core/src/main/java/com/blueland/annotation/ApiVersion.java b/usm-core/src/main/java/com/blueland/annotation/ApiVersion.java new file mode 100644 index 0000000..db66c2d --- /dev/null +++ b/usm-core/src/main/java/com/blueland/annotation/ApiVersion.java @@ -0,0 +1,22 @@ +package com.blueland.annotation; + + +import com.blueland.enums.Version; + +import java.lang.annotation.*; + +/** + * @program: crm + * @description: + * @author: bigtian + * @create: 2022-01-02 10:17 + */ + +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.TYPE, ElementType.METHOD}) +@Documented +public @interface ApiVersion { + + Version[] groups(); + +} diff --git a/usm-core/src/main/java/com/blueland/annotation/Log.java b/usm-core/src/main/java/com/blueland/annotation/Log.java new file mode 100644 index 0000000..a8b2d9b --- /dev/null +++ b/usm-core/src/main/java/com/blueland/annotation/Log.java @@ -0,0 +1,49 @@ +package com.blueland.annotation; + +import com.blueland.constant.CommonConstant; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * @program: usm + * @description: 日志记录 + * 支持获取path参数,以及@RequestBody参数, + * 如果是@RequestBody参数,则放置在第一个参数位 + * @author: bigtian + * @create: 2021-12-30 10:04 + */ +@Target({ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +public @interface Log { + /** + * 租户 + * + * @return + */ +// String appId() default "sys"; + + /** + * 日志类型 + */ + CommonConstant.LogType logType() default CommonConstant.LogType.OPERATE; + + /** + * 业务类型 + */ + String busiType() default "日志记录"; + + /** + * 操作类型 + */ + String opType() default ""; + + /** + * 系统类型 web app render job export + */ + String type() default ""; + + +} diff --git a/usm-core/src/main/java/com/blueland/aop/LogAspect.java b/usm-core/src/main/java/com/blueland/aop/LogAspect.java new file mode 100644 index 0000000..56c2317 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/aop/LogAspect.java @@ -0,0 +1,199 @@ +package com.blueland.aop; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.blueland.annotation.Log; +import com.blueland.constant.CommonConstant; +import com.blueland.core.util.AccessUtil; +import com.blueland.core.util.StringUtil; +import com.blueland.core.util.UserUtils; +import com.blueland.bo.SysOplogEntity; +import com.blueland.bo.SysPvlogEntity; +import com.blueland.model.TPfSysOplog; +import com.blueland.model.TPfSysPvlog; +import com.blueland.service.impl.SysOplogServiceImpl; +import com.blueland.service.impl.SysPvlogServiceImpl; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.AfterReturning; +import org.aspectj.lang.annotation.AfterThrowing; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletRequest; +import java.lang.reflect.Method; +import java.util.Date; + +/** + * @description: 日志记录 + * @author: bigTian + * @create: 2021-10-28 14:48 + */ +@Aspect +@Component +@Slf4j +public class LogAspect { + private final String expCheckPoint = "@annotation(com.blueland.annotation.Log)"; + private final static String prefix = "执行方法:"; + + @Autowired + private SysOplogServiceImpl sysOplogService; + + @Autowired + private SysPvlogServiceImpl sysPvlogService; + + /** + * 配置切点 + */ + @Pointcut(expCheckPoint) + public void expCheckPoint() { + } + + + /** + * 抛出异常后 + * + * @param point + * @param ex + */ + @AfterThrowing(pointcut = "expCheckPoint()", throwing = "ex") + public void doAfterThrowing(JoinPoint point, Exception ex) throws Exception { + log(point, false); + } + + private void log(JoinPoint point, boolean isSuccess) throws Exception { + MethodSignature signature = (MethodSignature) point.getSignature(); + Method currentMhd = signature.getMethod(); + String currentMethodName = point.getTarget().getClass().getSimpleName() + "." + currentMhd.getName(); + Log logs = currentMhd.getAnnotation(Log.class); + String code = logs.logType().getCode(); + //操作日志 + if (CommonConstant.LogType.OPERATE.getCode().equals(code)) { + operate(point, isSuccess, logs, currentMethodName); + } else if (CommonConstant.LogType.PAGEVIEW.getCode().equals(code)) { + // 浏览日志 + pageView(point, logs, currentMethodName); + } + } + + private void pageView(JoinPoint point, Log logs, String currentMtdName) throws Exception { + HttpServletRequest request = UserUtils.getRequest(); + String aceessIp = AccessUtil.getAccessIp(request); + String aceessUrl = AccessUtil.getAccessUrl(request); + String aceessSource = AccessUtil.getAccessSource(request); + String aceessDevice = AccessUtil.getAccessDevice(request); + String aceessBrowse = AccessUtil.getAccessBrowse(request); + //获取请求头的 iv_user + String ivUser = UserUtils.getIvUser(); + TPfSysPvlog pvlog = new TPfSysPvlog(); + pvlog.setUserId(StringUtil.notEmpty(ivUser) ? ivUser : "unknown"); + pvlog.setUserName(StringUtil.notEmpty(ivUser) ? ivUser : "unknown"); + pvlog.setBizId(getBusiId(point, logs)); + pvlog.setBizType(currentMtdName); + pvlog.setAceessTitle(logs.busiType()); + pvlog.setAceessIp(aceessIp); + pvlog.setAceessUrl(aceessUrl); + pvlog.setAceessTime(new Date()); + pvlog.setAceessSource(aceessSource); + pvlog.setAceessDevice(aceessDevice); + pvlog.setAceessBrowse(aceessBrowse); + pvlog.setAppId(ObjectUtil.isNotEmpty(UserUtils.getTenantId())?UserUtils.getTenantId():"sys"); + pvlog.setRemark(prefix + point.getSignature().getName()); + try { + sysPvlogService.save(pvlog); + }catch (Exception e) { + System.out.println(e); + } + } + + + /** + * 操作日志 + * + * @param point + * @param isSuccess + * @param logs + */ + private void operate(JoinPoint point, boolean isSuccess, Log logs, String currentMethodName) throws Exception { + String ivUser = UserUtils.getIvUser(); + String type = logs.type(); + HttpServletRequest request = UserUtils.getRequest(); + String aceessIp = AccessUtil.getAccessIp(request); + String aceessBrowse = AccessUtil.getAccessBrowse(request); + TPfSysOplog oplog = new TPfSysOplog(); + oplog.setAceessIp(aceessIp); + oplog.setAceessBrowse(aceessBrowse); + oplog.setCreateTime(new Date()); + oplog.setBizId(getBusiId(point, logs)); + oplog.setBizType(currentMethodName); + String str = JSONUtil.toJsonStr(point.getArgs()); + if (str.length() > 4000) { + str = StrUtil.sub(str, 0, 3900); + } + oplog.setContent(str); + oplog.setStatus(isSuccess ? CommonConstant.RESULT_SUCCESS : CommonConstant.RESULT_FAILED); + oplog.setType(type); + oplog.setUserId(StringUtil.notEmpty(ivUser) ? ivUser : "unknown"); + oplog.setUserName(StringUtil.notEmpty(ivUser) ? ivUser : "unknown"); + oplog.setRemark(prefix + point.getSignature().getName()); + oplog.setAppId(ObjectUtil.isNotEmpty(UserUtils.getTenantId())?UserUtils.getTenantId():"sys"); + try { + sysOplogService.save(oplog); + } catch (Exception e) { + System.out.println(e); + } + } + + private static String getSysId(Object[] objects) { + // 从请求参数中获取租户id + if (ObjectUtil.isNotEmpty(objects) && objects.length > 1) { + JSONObject jsonObject = JSONUtil.parseObj(objects[1]); + if (ObjectUtil.isNotEmpty(jsonObject) && ObjectUtil.isNotEmpty(jsonObject.get("appId"))) { + return jsonObject.get("appId").toString(); + } else { + return "sys"; + } + } + return "sys"; + } + + /** + * 正常执行 + * + * @param point + */ + @AfterReturning("expCheckPoint()") + public void successLog(JoinPoint point) throws Exception { + log(point, true); + } + + /** + * 获取BusiId + * + * @param point + * @param logs + * @return + * @throws Exception + */ + public String getBusiId(JoinPoint point, Log logs) throws Exception { + Object[] args = point.getArgs(); + String busiId = ""; + if(ObjectUtil.isNotEmpty(args)) { + if (args.length > 1) { + busiId = JSONUtil.toJsonStr(args[1]); + } else { + busiId = JSONUtil.toJsonStr(args[0]); + } + if (busiId.length() > 400) { + busiId = StrUtil.sub(busiId, 0, 399); + } + } + return busiId; + } + +} diff --git a/usm-core/src/main/java/com/blueland/config/Default2PreciseShardingAlgorithm.java b/usm-core/src/main/java/com/blueland/config/Default2PreciseShardingAlgorithm.java new file mode 100644 index 0000000..02ce6f9 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/config/Default2PreciseShardingAlgorithm.java @@ -0,0 +1,34 @@ +package com.blueland.config; + +import cn.hutool.core.date.DateUtil; +import org.apache.shardingsphere.api.sharding.standard.PreciseShardingAlgorithm; +import org.apache.shardingsphere.api.sharding.standard.PreciseShardingValue; + +import java.util.Collection; +import java.util.Date; + +/** + * @author leijie.gao + * @since 2020-05-27 + */ +public class Default2PreciseShardingAlgorithm implements PreciseShardingAlgorithm { + + /** + * @param targetTableNames sharding 逻辑表 分表规则 + * @param shardingVal PreciseShardingValue(logicTableName=真实表, columnName=company_id, value=company_id_value) + * @return {{@link String}} + */ + @Override + public String doSharding(Collection targetTableNames, PreciseShardingValue shardingVal) { + /** + * tableNames 对应分片库中所有分片表的集合 + * shardingValue 为分片属性,其中 logicTableName 为逻辑表,columnName 分片健(字段),value 为从 SQL 中解析出的分片健的值 + */ + /** + * 取模算法,分片健 % 表数量 + */ + Integer month = DateUtil.month(new Date()) + 1; + + return "t_pf_sys_pvlog_" + month; + } +} \ No newline at end of file diff --git a/usm-core/src/main/java/com/blueland/config/DefaultPreciseShardingAlgorithm.java b/usm-core/src/main/java/com/blueland/config/DefaultPreciseShardingAlgorithm.java new file mode 100644 index 0000000..cc4cc7f --- /dev/null +++ b/usm-core/src/main/java/com/blueland/config/DefaultPreciseShardingAlgorithm.java @@ -0,0 +1,34 @@ +package com.blueland.config; + +import cn.hutool.core.date.DateUtil; +import org.apache.shardingsphere.api.sharding.standard.PreciseShardingAlgorithm; +import org.apache.shardingsphere.api.sharding.standard.PreciseShardingValue; + +import java.util.Collection; +import java.util.Date; + +/** + * @author leijie.gao + * @since 2020-05-27 + */ +public class DefaultPreciseShardingAlgorithm implements PreciseShardingAlgorithm { + + /** + * @param targetTableNames sharding 逻辑表 分表规则 + * @param shardingVal PreciseShardingValue(logicTableName=真实表, columnName=company_id, value=company_id_value) + * @return {{@link String}} + */ + @Override + public String doSharding(Collection targetTableNames, PreciseShardingValue shardingVal) { + /** + * tableNames 对应分片库中所有分片表的集合 + * shardingValue 为分片属性,其中 logicTableName 为逻辑表,columnName 分片健(字段),value 为从 SQL 中解析出的分片健的值 + */ + /** + * 取模算法,分片健 % 表数量 + */ + Integer month = DateUtil.month(new Date()) + 1; + + return "t_pf_sys_oplog_" + month; + } +} \ No newline at end of file diff --git a/usm-core/src/main/java/com/blueland/config/RedisConfig.java b/usm-core/src/main/java/com/blueland/config/RedisConfig.java new file mode 100644 index 0000000..f29bfc1 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/config/RedisConfig.java @@ -0,0 +1,108 @@ +package com.blueland.config; + +import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; +import com.fasterxml.jackson.annotation.PropertyAccessor; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper.DefaultTyping; +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.cache.annotation.CachingConfigurerSupport; +import org.springframework.cache.interceptor.KeyGenerator; +import org.springframework.context.annotation.Bean; +import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.RedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.lang.reflect.Method; + + +@Data +@Component +@ConfigurationProperties(prefix = "spring.redis") +public class RedisConfig extends CachingConfigurerSupport{ + + @Resource + private LettuceConnectionFactory lettuceConnectionFactory; + + private String host; + private int port; + private int timeout; + private String password; + private int maxActive; + private int maxWait; + private int maxIdle; + private int minIdle; + + + @Bean + public KeyGenerator wiselyKeyGenerator(){ + return new KeyGenerator() { + @Override + public Object generate(Object target, Method method, Object... params) { + StringBuilder sb = new StringBuilder(); + sb.append(target.getClass().getName()); + sb.append(method.getName()); + for (Object obj : params) { + sb.append(obj.toString()); + } + return sb.toString(); + } + }; + } + + + /** + * RedisTemplate配置 + * + * @param lettuceConnectionFactory + * @return + */ + @Bean + public RedisTemplate redisTemplate(LettuceConnectionFactory lettuceConnectionFactory) { + // 设置序列化 + Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); + ObjectMapper om = new ObjectMapper(); + om.setVisibility(PropertyAccessor.ALL, Visibility.ANY); + om.enableDefaultTyping(DefaultTyping.NON_FINAL); + jackson2JsonRedisSerializer.setObjectMapper(om); + // 配置redisTemplate + RedisTemplate redisTemplate = new RedisTemplate(); + redisTemplate.setConnectionFactory(lettuceConnectionFactory); + RedisSerializer stringSerializer = new StringRedisSerializer(); + // key序列化 + redisTemplate.setKeySerializer(stringSerializer); + // value序列化 + redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); + // Hash key序列化 + redisTemplate.setHashKeySerializer(stringSerializer); + // Hash value序列化 + redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer); + redisTemplate.afterPropertiesSet(); + return redisTemplate; + } + + +// @Bean +// public CacheManager cacheManager(LettuceConnectionFactory factory) { +// // 配置序列化(缓存默认有效期 6小时) +// RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofHours(6)); +// RedisCacheConfiguration redisCacheConfiguration = config.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer())) +// .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer())); +// +// // 以锁写入的方式创建RedisCacheWriter对象 +// //RedisCacheWriter writer = RedisCacheWriter.lockingRedisCacheWriter(factory); +// // 创建默认缓存配置对象 +// /* 默认配置,设置缓存有效期 1小时*/ +// //RedisCacheConfiguration defaultCacheConfig = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofHours(1)); +// /* 自定义配置test:demo 的超时时间为 5分钟*/ +// RedisCacheManager cacheManager = RedisCacheManager.builder(RedisCacheWriter.lockingRedisCacheWriter(factory)).cacheDefaults(redisCacheConfiguration) +// .withInitialCacheConfigurations(singletonMap("test:demo", RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofMinutes(5)).disableCachingNullValues())) +// .transactionAware().build(); +// return cacheManager; +// } + +} diff --git a/usm-core/src/main/java/com/blueland/config/SwaggerDocumentationPluginsManager.java b/usm-core/src/main/java/com/blueland/config/SwaggerDocumentationPluginsManager.java new file mode 100644 index 0000000..69e637e --- /dev/null +++ b/usm-core/src/main/java/com/blueland/config/SwaggerDocumentationPluginsManager.java @@ -0,0 +1,150 @@ +package com.blueland.config; + + +import com.blueland.annotation.ApiVersion; +import com.blueland.enums.Version; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.annotation.AnnotationAwareOrderComparator; +import org.springframework.plugin.core.OrderAwarePluginRegistry; +import org.springframework.plugin.core.PluginRegistry; +import springfox.documentation.RequestHandler; +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.service.ApiInfo; +import springfox.documentation.service.Contact; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spi.service.DocumentationPlugin; +import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.spring.web.plugins.DocumentationPluginsManager; + +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.StreamSupport; + +/** + * Swagger3Config + * + * @author bigtian + * @date 2021/4/16 16:50 + */ +@Primary //自动装配时当出现多个Bean候选者时,被注解为@Primary的Bean将作为首选者,否则将抛出异常。(只对接口的多个实现生效)覆盖swagger自己的配置 +@Configuration //定义配置类 +//@EnableKnife4j //开启Knife4j +public class SwaggerDocumentationPluginsManager extends DocumentationPluginsManager { + + @Override + public Collection documentationPlugins() throws IllegalStateException { + List plugins = registry().getPlugins(); + ensureNoDuplicateGroups(plugins); + return plugins.isEmpty() ? Collections.singleton(this.defaultDocumentationPlugin()) : plugins; + } + + private void ensureNoDuplicateGroups(List allPlugins) throws IllegalStateException { + Map> plugins = allPlugins.stream().collect(Collectors.groupingBy((input) -> { + return Optional.ofNullable(input.getGroupName()).orElse("default"); + }, LinkedHashMap::new, Collectors.toList())); + Iterable duplicateGroups = plugins.entrySet().stream().filter((input) -> { + return (input.getValue()).size() > 1; + }).map(Map.Entry::getKey).collect(Collectors.toList()); + if (StreamSupport.stream(duplicateGroups.spliterator(), false).count() > 0L) { + throw new IllegalStateException(String.format("Multiple Dockets with the same group name are not supported. The following duplicate groups were discovered. %s", String.join(",", duplicateGroups))); + } + } + + private DocumentationPlugin defaultDocumentationPlugin() { + return new Docket(DocumentationType.OAS_30); + } + + private SwaggerPluginRegistry registry() { + List list = new ArrayList<>(); + list.add(createRestApi()); + Version[] versions = Version.values(); + if (versions.length > 0) { + for (Version version : versions) { + Docket docket = new Docket(DocumentationType.OAS_30) + // 指定构建api文档的详细信息的方法:apiInfo() + .apiInfo(apiInfo(version.getVersion())) + .groupName(version.getVersion()) + .select() + .apis(requestHandler -> { + //获取rest上的注解 + Optional controllerAnnotation = requestHandler.findControllerAnnotation(ApiVersion.class); + // 如果rest上有ApiVersion注解,则不扫描类中方法,否则扫描类中方法 + if (!controllerAnnotation.isPresent()) { + return findMehotds(version, requestHandler); + } + boolean flag = Arrays.asList(controllerAnnotation.get().groups()).contains(version); + if (!flag) { + return findMehotds(version, requestHandler); + } + return flag; + }) + .paths(PathSelectors.any()) + .build(); + list.add(docket); + } + } + return new SwaggerPluginRegistry(list, new AnnotationAwareOrderComparator()); + } + + private boolean findMehotds(Version version, RequestHandler requestHandler) { + Optional apiVersion = requestHandler.findAnnotation(ApiVersion.class); + if (!apiVersion.isPresent()) { + return false; + } + return Arrays.asList(apiVersion.get().groups()).contains(version); + } + + public Docket createRestApi() { + return new Docket(DocumentationType.OAS_30) + .apiInfo(apiInfo()) + .groupName("All API") + .select() + .apis(RequestHandlerSelectors.basePackage("com.blueland")) + .paths(PathSelectors.any()) + .build(); + } + + private ApiInfo apiInfo(String version) { + return new ApiInfoBuilder() + .contact(new Contact("sys", null, null)) + // 设置页面标题 + .title("USM接口文档") + .version(version) + // 设置接口描述 + .description("通用框架接口") + // 设置联系方式 + .build(); + } + + private ApiInfo apiInfo() { + return new ApiInfoBuilder() + .contact(new Contact("sys", null, null)) + // 设置页面标题 + .title("USM接口文档") + // 设置接口描述 + .description("通用框架接口") + // 设置联系方式 + .build(); + } +} + +/** + * SwaggerPluginRegistry + * + * @author bigtian + * @date 2021/4/16 16:55 + */ +class SwaggerPluginRegistry extends OrderAwarePluginRegistry implements PluginRegistry { + + protected SwaggerPluginRegistry(List plugins, Comparator comparator) { + super(plugins, comparator); + } + + @Override + public List getPlugins() { + return super.getPlugins(); + } +} diff --git a/usm-core/src/main/java/com/blueland/constant/CommonConstant.java b/usm-core/src/main/java/com/blueland/constant/CommonConstant.java new file mode 100644 index 0000000..b799f4e --- /dev/null +++ b/usm-core/src/main/java/com/blueland/constant/CommonConstant.java @@ -0,0 +1,67 @@ +package com.blueland.constant; + +/** + * @auther xcy + * @create 2022-04-08 8:57 + */ +public class CommonConstant { + + /** + * 日志类型 + */ + public enum LogType { + OPERATE("操作日志", "operate"), + AUDIT("审计日志", "audit"), + BUSI("业务日志", "busi"), + INTERFACE("接口日志", "interface"), + PAGEVIEW("浏览日志", "pageview"); + private String name; + private String code; + + LogType(String name, String code) { + this.name = name; + this.code = code; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + } + + /** + * 对接结果 + */ + public static String RESULT_SUCCESS = "success";//成功 + public static String RESULT_FAILED = "failed";//失败 + public static String RESULT_PROCESSED = "processed";//处理中 + + /** + * 操作类型 + */ + + public static final String SAVE = "save"; // 新增 + + public static final String UPDATE = "update"; // 修改 + + public static final String DELETE = "delete"; // 删除 + + public static final String SEARCH = "search"; // 查询 + + public static final String EXPORT = "export"; // 导入导出 + + public static final String JOB = "job"; // 暂停 + + +} diff --git a/usm-core/src/main/java/com/blueland/constant/Constant.java b/usm-core/src/main/java/com/blueland/constant/Constant.java new file mode 100644 index 0000000..3f35403 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/constant/Constant.java @@ -0,0 +1,31 @@ +package com.blueland.constant; + +public class Constant { + /** + * 组织编辑类型 + */ + public static final String ORGWORKTYPE_OTHER = "other"; // 其他 + public static final String ORGWORKTYPE_SELL = "sell"; // 销售组织 + + /** + * 租户 + */ + public static final String TENANTID_BIO = "BIO"; // 生科 + public static final String TENANTID_IVD = "IVD"; // 医疗 + + public static final String QY = "QY"; // 启用 + public static final String JY = "JY"; // 禁用 + + public static final String MAIN = "main"; // 主岗 + public static final String PART_TIME = "parttime"; //兼岗 + + /** + * ERP配置前缀 + */ + public static final String ERP = "ERP_"; + /** + * 部门配置前缀 + */ + public static final String ORG_APP = "ORG_APP"; + +} diff --git a/usm-core/src/main/java/com/blueland/constant/RedisConstant.java b/usm-core/src/main/java/com/blueland/constant/RedisConstant.java new file mode 100644 index 0000000..38a2311 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/constant/RedisConstant.java @@ -0,0 +1,57 @@ +package com.blueland.constant; + +/** + * @description: redis定义key + * @author: bigTian + * @create: 2021-11-18 09:28 + */ +public class RedisConstant { + /** + * 数据字典 + */ + public static final String SYS_DICT_CACHE = "crm:dict:cache"; + + /** + * 通配符 + */ + public static final String WILDCARD = "*"; + /** + * 分割符 + */ + public static final String DIVISION = ":"; + /** + * 部门 + */ + public static final String SYS_DEPT = "SYS:DEPT"; + + /** + * 任岗编码 -> 员工信息 + */ + public static final String SYS_STAFF = "SYS:STAFF"; + + /** + * 租户id:菜单类型type:菜单id -> 菜单实体 + */ + public static final String SYS_MENU = "SYS:MENU"; + + /** + * usm redis前缀 + */ + public static final String SYS = "SYS"; + + /** + * 字典key + */ + public static final String SYS_DICT = "SYS:DICT"; + + /** + * 角色key + */ + public static final String SYS_ROLE = "SYS:ROLE"; + + /** + * 租户id:角色id -> List<菜单redisKey(租户id:菜单类型type:菜单id)> + */ + public static final String SYS_MENU_ID = "SYS:MENU_ID"; + +} diff --git a/usm-core/src/main/java/com/blueland/constant/ResponseConstant.java b/usm-core/src/main/java/com/blueland/constant/ResponseConstant.java new file mode 100644 index 0000000..0bc86f5 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/constant/ResponseConstant.java @@ -0,0 +1,12 @@ +package com.blueland.constant; + +/** + * @auther xcy + * @create 2022-05-25 10:03 + */ +public class ResponseConstant { + public static final String RESULT_CODE_SUCCESS_MSG = "操作成功!"; + public static final int RESULT_CODE_SUCCESS_CODE = 200; + public static final int RESULT_CODE_ERROR_CODE = 400; + public static final int RESULT_SERVER_ERR_CODE = 500; +} diff --git a/usm-core/src/main/java/com/blueland/core/util/AccessUtil.java b/usm-core/src/main/java/com/blueland/core/util/AccessUtil.java new file mode 100644 index 0000000..bf28a6e --- /dev/null +++ b/usm-core/src/main/java/com/blueland/core/util/AccessUtil.java @@ -0,0 +1,263 @@ +package com.blueland.core.util; + +import cn.hutool.http.useragent.Browser; +import cn.hutool.http.useragent.UserAgent; +import cn.hutool.http.useragent.UserAgentUtil; +import lombok.extern.slf4j.Slf4j; + +import javax.servlet.http.HttpServletRequest; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.InetAddress; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.UnknownHostException; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +@Slf4j +public class AccessUtil { + /** + * 获取当前网络ip + * @param request + * @return + */ + public static String getAccessIp2(HttpServletRequest request) { + String ipAddress = request.getHeader("x-forwarded-for"); + if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { + ipAddress = request.getHeader("Proxy-Client-IP"); + } + if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { + ipAddress = request.getHeader("WL-Proxy-Client-IP"); + } + if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { + ipAddress = request.getRemoteAddr(); + if (ipAddress.equals("127.0.0.1") || ipAddress.equals("0:0:0:0:0:0:0:1")) { + //根据网卡取本机配置的IP + InetAddress inet = null; + try { + inet = InetAddress.getLocalHost(); + } catch (UnknownHostException e) { + e.printStackTrace(); + } + ipAddress = inet.getHostAddress(); + } + } + //对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割 + //"***.***.***.***".length() = 15 + if (ipAddress != null && ipAddress.length() > 15) { + if (ipAddress.indexOf(",") > 0) { + ipAddress = ipAddress.substring(0, ipAddress.indexOf(",")); + } + } + return ipAddress; + } + + public static String getAccessIp(HttpServletRequest request) { + String ip = request.getHeader("x-forwarded-for"); + if (ip != null && ip.length() != 0 && !"unknown".equalsIgnoreCase(ip)) { + // 多次反向代理后会有多个ip值,第一个ip才是真实ip + if (ip.indexOf(",") != -1) { + ip = ip.split(",")[0]; + } + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("X-Forwarded-For"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("WL-Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_X_FORWARDED_FOR"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_X_FORWARDED"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_X_CLUSTER_CLIENT_IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_CLIENT_IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_FORWARDED_FOR"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_FORWARDED"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_VIA"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("REMOTE_ADDR"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("X-Real-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getRemoteAddr(); + } + if (ip.equals("0:0:0:0:0:0:0:1")) { + ip = "本地"; + } + return ip; + } + + /** + * 获取网页url + * @param request + * @return + */ + public static String getAccessUrl(HttpServletRequest request) { + String url = ""; + url = request.getScheme() + "://" + request.getServerName() + + ":" + request.getServerPort() + + request.getServletPath(); + if (request.getQueryString() != null) { + url += "?" + request.getQueryString(); + } + return url; + } + + /** + * 获取网页标题 + * @param request + * @return + */ + public static String getAccessTitle(HttpServletRequest request){ + //获取htmlUrl网址网页的源码 + String htmlSource = getHtmlSource(getAccessUrl(request)); + if (StringUtil.isEmpty(htmlSource)){ + return "该url为接口调用,无标题"; + } + return getTitle(htmlSource); + } + + /** + * 获取访问来源 + * @param request + * @return + */ + public static String getAccessSource(HttpServletRequest request){ + /** + * android : 所有android设备 + * mac os : iphone ipad + * windows phone:Nokia等windows系统的手机 + */ + String[] deviceArray = new String[]{"android","mac os","windows phone"}; + //获取http头信息 + String requestHeader = request.getHeader("User-Agent"); + if (requestHeader == null){ + return "unknown"; + } + requestHeader = requestHeader.toLowerCase(); + for(int i=0;i0){ + return "APP"; + } + } + return "PC"; + } + + /** + * 获取访问设备 + * @param request + * @return + */ + public static String getAccessDevice(HttpServletRequest request){ + String agent= request.getHeader("User-Agent"); + if (StringUtil.isEmpty(agent)){ + return "unknown"; + } + //安卓系统 + if(agent.contains("Android")){ + return "android"; + }else if(agent.contains("iPhone")||agent.contains("iPod")||agent.contains("iPad")){ + return "ios"; + } + return "Others"; + } + + /** + * 获取浏览器信息 + * @param request + * @return + */ + public static String getAccessBrowse(HttpServletRequest request){ + String agent = request.getHeader("User-Agent"); + if (StringUtil.isEmpty(agent)){ + return "type:unknown;version:unknown"; + } + //解析agent字符串 + UserAgent userAgent = UserAgentUtil.parse(agent); + //获取浏览器对象 + Browser browser = userAgent.getBrowser(); + return "type:"+browser.getName()+";version:"+userAgent.getVersion(); + } + + /** + * 根据网址返回网页的源码 + * @param htmlUrl + * @return + */ + public static String getHtmlSource(String htmlUrl){ + URL url; + StringBuffer sb = new StringBuffer(); + try{ + url = new URL(htmlUrl); + //读取网页全部内容 + BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(), "utf-8")); + String temp; + while ((temp = in.readLine()) != null) + { + sb.append(temp); + } + in.close(); + }catch (MalformedURLException e) { +// log.error("URL格式有问题!"); + }catch (IOException e) { + e.printStackTrace(); + } + return sb.toString(); + } + + /** + * 从html源码(字符串)中获取标题 + * @param htmlSource + * @return + */ + public static String getTitle(String htmlSource){ + List list = new ArrayList(); + String title = ""; + //Pattern pa = Pattern.compile(".*?", Pattern.CANON_EQ);也可以 + //源码中标题正则表达式 + Pattern pa = Pattern.compile(".*?"); + Matcher ma = pa.matcher(htmlSource); + while (ma.find())//寻找符合el的字串 + { + list.add(ma.group());//将符合el的字串加入到list中 + } + for (int i = 0; i < list.size(); i++) + { + title = title + list.get(i); + } + return outTag(title); + } + + /** + * 去掉html源码中的标签 + * @param s + * @return + */ + public static String outTag(String s) + { + return s.replaceAll("<.*?>", ""); + } + +} diff --git a/usm-core/src/main/java/com/blueland/core/util/Apigateway.java b/usm-core/src/main/java/com/blueland/core/util/Apigateway.java new file mode 100644 index 0000000..e130acc --- /dev/null +++ b/usm-core/src/main/java/com/blueland/core/util/Apigateway.java @@ -0,0 +1,177 @@ +//package com.blueland.core.util; +// +//import java.security.interfaces.RSAKey; +//import java.time.Duration; +//import java.time.Instant; +//import java.util.Map; +// +//import org.apache.http.HttpHeaders; +//import org.apache.http.client.methods.HttpGet; +//import org.apache.http.client.methods.HttpPost; +//import org.apache.http.entity.StringEntity; +//import org.apache.http.message.BasicHeader; +//import org.apache.http.protocol.HTTP; +//import com.alibaba.fastjson.JSONArray; +//import gateway.api.*; +// +//import lombok.extern.slf4j.Slf4j; +// +//@Slf4j +//// @Service +//public class Apigateway { +// +// // KEY +// private static final String TestAppToken = "5Zaex1VJp1LiXHV54bvoQtam3SAcKbbL"; +// +// // 应用RSA私钥(PEM格式) +// private final String TestPrivatePem = "-----BEGIN RSA PRIVATE KEY-----\n" +// + "MIICXAIBAAKBgQDYjFY9ceLar5FJqtkey3YqWnp5jyjulqRj1L4wM8RFqJ68LdqQ\n" +// + "q3bkjg/EROJIrqFH+QIcql2X4+XDxHjxElJm/rbr4aVJVWP96gd2dlQE42rijAyh\n" +// + "Sfe+1pOaWoHtO98qbs75wt7WqhBhqfApMLJHK5gtx2y5R/Klfcau2X/z1wIDAQAB\n" +// + "AoGAfSP0foO+9mO5UVojKPGpcuZgmrkJjX+OtoZt9kskJKFCQjs5cJs2FPSn1eN8\n" +// + "5UXNvFsBRnGJrsorsIts3NuatAw1TgmR2l4nYaQAQBzik2l+bPX9cn39DZwD8xRt\n" +// + "mB0kgwj0S4Pf2tC2hKRYEDGNUkRBTsNgkDDQyTOfP4298UkCQQD0K+vcrMv3idVa\n" +// + "TDO1Ihd7xbUi3Fob7OHxLWudaDZ7T/jnaMcsbJooJHD1WKLOEfCd63A0GviepbvH\n" +// + "lZGa+6Z1AkEA4wnYjwar4o4Yjy2OJEbi6DDBsJQ2h0bbBfSfmunXBEjd/GVgZSya\n" +// + "T6LOu8QBUJ2fPY7e1zxlTFu/8UCzRtIfmwJAZHD42lMeqFpDsJxuHNHEVT70Dz4T\n" +// + "ty8PlpV3kk2/M6SnIBJC9GxMUb0D1nk6p4hLsbqa8mQx55kHkMdfGSDxzQJBAJPJ\n" +// + "QPI5AYIDxPDOUoxCqElEE5CBqcz8zm1eAtawCIp9dCJrSwgQtJHKBJAs0j5Lm/BS\n" +// + "I7QvWDEQOC0uVIRxGqkCQC5kGzQqjdw0F8xsJcqdzTt9X29VdNrwJWl0IdBK8gXt\n" +// + "5HYkBZa3PSaeDz+YpVtYUt5HO25VbBM0PTZEpkuezLU=\n" + "-----END RSA PRIVATE KEY-----"; +// +// private volatile static Apigateway singleton = new Apigateway(); +// +// private Apigateway() { +// loadJwtContext(); +// } +// +// public static Apigateway getInstance() { +// return singleton; +// } +// +// private JwtContext jwtContext; +// private Instant createTime = Instant.now(); +// +// private void loadJwtContext() { +// jwtContext = JwtContext.create(TestAppToken, (RSAKey) RSAUtils.parsePrivateKeyFromPEM(TestPrivatePem), 1200); +// } +// +// private JwtToken createJwtToken() { +// // 生成的jwt令牌可多次使用,为安全起见请设置令牌过期时间。 +// Instant currDate = Instant.now(); +// if (Duration.between(currDate, createTime).getSeconds() >= 1100) { +// loadJwtContext(); +// } +// JwtToken jwt_token = jwtContext.createJwtToken(); +//// log.error("token:"+jwt_token.toAuthorizationString()); +// return jwt_token; +// } +// +// private final static String APPLICATION_JSON = "application/json"; +// public static final String CHARSET = "UTF-8"; +// +// /** +// * HTTP Get 获取内容 +// * +// * @param url请求的url地址 +// * ?之前的地址 +// * @param params请求的参数 +// * @param charset编码格式 +// * @return 页面内容 +// */ +// public String sendGet(String url, Map params) { +// String apiUrl = url; +// if (params != null && params.size() > 0) { +// StringBuffer param = new StringBuffer(); +// int i = 0; +// for (String key : params.keySet()) { +// if (i == 0) +// param.append("?"); +// else +// param.append("&"); +// param.append(key).append("=").append(params.get(key)); +// i++; +// } +// apiUrl += param; +// } +// HttpGet httpget = null; +// +// String result = null; +// try { +// +// httpget = new HttpGet(apiUrl); +// httpget.addHeader(HttpHeaders.AUTHORIZATION, createJwtToken().toAuthorizationString()); +// if (ViaGatewayUtlis.isAppRequestViaGateway()) { +// ViaGatewayUtlis.copyRequestChainForHttpClient(httpget); +// } else { +// ViaGatewayUtlis.firstRequestChainForHttpClient(httpget); +// } +// result = HttpClientHelper.requestExecute(httpget, HttpClientHelper.RESPONSE_STRING_EXTRACTOR); +// +// } catch (Exception e) { +// log.error("apigateway->sendget->请求出错: " + e.getMessage(), e); +// } +// return result; +// } +// +// /** +// * HTTP Post 获取内容 +// * +// * @param url请求的url地址 +// * ?之前的地址 +// * @param params请求的参数 +// * @param charset编码格式 +// * @return 页面内容 +// */ +// public String sendPost(String url, Map params) { +// String param = JSONArray.toJSON(params).toString(); +// +// return post(url, param); +// } +// +// public String post(String url, String postData) { +// String result = ""; +// HttpPost httppost = null; +// +// try { +// +// httppost = new HttpPost(url); +// httppost.addHeader(HttpHeaders.AUTHORIZATION, createJwtToken().toAuthorizationString()); +// if (ViaGatewayUtlis.isAppRequestViaGateway()) { +// ViaGatewayUtlis.copyRequestChainForHttpClient(httppost); +// } else { +// ViaGatewayUtlis.firstRequestChainForHttpClient(httppost); +// } +// httppost.addHeader(HTTP.CONTENT_TYPE, APPLICATION_JSON); +// StringEntity entity = new StringEntity(postData, "UTF-8"); +// entity.setContentType(APPLICATION_JSON); +// entity.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, APPLICATION_JSON)); +// httppost.setEntity(entity); +// result = HttpClientHelper.requestExecute(httppost, HttpClientHelper.RESPONSE_STRING_EXTRACTOR); +// } catch (Exception ex) { +// log.error("apigateway->sendget->请求出错: " + ex.getMessage(), ex); +// } +// return result; +// } +// +// public static void main(String[] args) { +// String url="https://crm.vazyme.com/blueland-plateform-render/staff/substaffs?staffType=VAZYME&orgId=40280c8164f445ff0164f47266dd005b&staffStatus=QY&queryStaff=&pageNum=1&pageSize=10"; +// String result=""; +// +// try { +// result=Apigateway.getInstance().sendGet(url, null); +// log.error("result:"+result); +// } catch (Exception e) { +// log.error("请求出错:" + e.getMessage(), e); +// } +//// try { +//// log.info(HttpClientHelper.requestExecute(new HttpGet("http://www.baidu.com"), +//// HttpClientHelper.RESPONSE_STRING_EXTRACTOR)); +//// } catch (Exception e) { +//// log.error("请求出错: " + e.getMessage(), e); +//// } finally { +//// HttpClientHelper.destorySingletonHttpClientObjects(); +//// } +// } +// +//} diff --git a/usm-core/src/main/java/com/blueland/core/util/BeanCopyUtils.java b/usm-core/src/main/java/com/blueland/core/util/BeanCopyUtils.java new file mode 100644 index 0000000..7011909 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/core/util/BeanCopyUtils.java @@ -0,0 +1,66 @@ +package com.blueland.core.util; + +import cn.hutool.core.bean.copier.BeanCopier; +import cn.hutool.core.bean.copier.CopyOptions; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.ReflectUtil; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * bean深拷贝工具 + * + * @author Lion Li + */ +public class BeanCopyUtils { + + /** + * 单对象基于class创建拷贝 + * + * @param source 数据来源实体 + * @param copyOptions copy条件 + * @param desc 描述对象 转换后的对象 + * @return desc + */ + public static V oneCopy(T source, CopyOptions copyOptions, Class desc) { + V v = ReflectUtil.newInstanceIfPossible(desc); + return oneCopy(source, copyOptions, v); + } + + /** + * 单对象基于对象创建拷贝 + * + * @param source 数据来源实体 + * @param copyOptions copy条件 + * @param desc 转换后的对象 + * @return desc + */ + public static V oneCopy(T source, CopyOptions copyOptions, V desc) { + if (ObjectUtil.isNull(source)) { + return null; + } + return BeanCopier.create(source, desc, copyOptions).copy(); + } + + /** + * 列表对象基于class创建拷贝 + * + * @param sourceList 数据来源实体列表 + * @param copyOptions copy条件 + * @param desc 描述对象 转换后的对象 + * @return desc + */ + public static List listCopy(List sourceList, CopyOptions copyOptions, Class desc) { + if (ObjectUtil.isNull(sourceList)) { + return null; + } + if (CollUtil.isEmpty(sourceList)) { + return CollUtil.newArrayList(); + } + return sourceList.stream() + .map(source -> oneCopy(source, copyOptions, desc)) + .collect(Collectors.toList()); + } +} diff --git a/usm-core/src/main/java/com/blueland/core/util/FreemarkerUtil.java b/usm-core/src/main/java/com/blueland/core/util/FreemarkerUtil.java new file mode 100644 index 0000000..c35f539 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/core/util/FreemarkerUtil.java @@ -0,0 +1,54 @@ +package com.blueland.core.util; + +import java.util.Map; +import java.util.Properties; + +import org.springframework.ui.freemarker.FreeMarkerConfigurationFactory; +import org.springframework.ui.freemarker.FreeMarkerTemplateUtils; +import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer; + +import freemarker.template.Template; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class FreemarkerUtil { + + static FreeMarkerConfigurer result = new FreeMarkerConfigurer(); + static { + initFreemarkerConfig(); + } + public static void initFreemarkerConfig() { + try { + FreeMarkerConfigurationFactory factory = new FreeMarkerConfigurationFactory(); + factory.setTemplateLoaderPaths("classpath:/ftl/"); + factory.setDefaultEncoding("UTF-8"); + freemarker.template.Configuration configuration = factory.createConfiguration(); + configuration.setClassicCompatible(true); + result.setConfiguration(configuration); + Properties settings = new Properties(); + settings.put("template_update_delay", "0"); + settings.put("default_encoding", "UTF-8"); + settings.put("number_format", "0.##########"); + settings.put("datetime_format", "yyyy-MM-dd HH:mm:ss"); + settings.put("classic_compatible", true); + settings.put("template_exception_handler", "ignore"); + result.setFreemarkerSettings(settings); + } + catch(Exception ex) { +// log.error("initFreemarkerConfig====",ex); + } + + } + + + + public static String processTemplateString(String templateName,Map model) { + try { + Template tpl = result.getConfiguration().getTemplate(templateName); + return FreeMarkerTemplateUtils.processTemplateIntoString(tpl, model); + }catch(Exception e) { +// log.error("processTemplateString====",e); + } + return ""; + } +} diff --git a/usm-core/src/main/java/com/blueland/core/util/HashUtil.java b/usm-core/src/main/java/com/blueland/core/util/HashUtil.java new file mode 100644 index 0000000..5741461 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/core/util/HashUtil.java @@ -0,0 +1,15 @@ +package com.blueland.core.util; + +public class HashUtil { + + public static int rsHash(String value) { + int one = 378551; + int two = 63689; + int hash = 0; + for (int i = 0; i < value.length(); i++) { + hash = hash * two + value.charAt(i); + two = two * one; + } + return (hash & 0x7FFFFFFF); + } +} diff --git a/usm-core/src/main/java/com/blueland/core/util/HttpUtils.java b/usm-core/src/main/java/com/blueland/core/util/HttpUtils.java new file mode 100644 index 0000000..348ed81 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/core/util/HttpUtils.java @@ -0,0 +1,124 @@ +package com.blueland.core.util; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.MediaType; +import org.springframework.web.client.RestTemplate; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class HttpUtils { + + + private static HttpUtils instance; + + private RestTemplate restTemplate = new RestTemplate(); + + private HttpUtils() { + } + + public static HttpUtils getInstance() { + if (null == instance) { + instance = new HttpUtils(); + } + return instance; + } + + public T postForObject(String url, Object requestParameter, + Map requestHeaders, Class responseType,String authorization) { + String result = exchange(url, HttpMethod.POST, requestParameter, requestHeaders, authorization); + + return JsonUtil.convertJsonStrToBean(result, responseType); + } + + public List postForList(String url, Object requestParameter, + Map requestHeaders, Class responseType,String authorization) { + String result = exchange(url, HttpMethod.POST, requestParameter, requestHeaders, authorization); + + return JsonUtil.convertJsonStrToList(result, responseType); + } + + public T putForObject(String url, Object requestParameter, + Map requestHeaders, Class responseType,String authorization) { + String result = exchange(url, HttpMethod.PUT, requestParameter, requestHeaders, authorization); + + return JsonUtil.convertJsonStrToBean(result, responseType); + } + + public T getForObject(String url, Map requestHeaders, Class responseType,String authorization) { + String result = exchange(url, HttpMethod.GET, null, requestHeaders, authorization); + + return JsonUtil.convertJsonStrToBean(result, responseType); + } + + public List getForList(String url, Map requestHeaders, + Class responseType,String authorization) { + String result = exchange(url, HttpMethod.GET, null, requestHeaders, authorization); + + return JsonUtil.convertJsonStrToList(result, responseType); + } + + private String exchange(String url, HttpMethod httpMethod, Object requestParameter, + Map requestHeaders,String authorization) { + String result = ""; + HttpHeaders httpHeaders = new HttpHeaders(); + ensureDefaultHeader(httpMethod, httpHeaders); + if (null != requestHeaders) { + for (Entry entry : requestHeaders.entrySet()) { + httpHeaders.add(entry.getKey(), entry.getValue()); + } + } + + if(StringUtil.notEmpty(authorization)) { + httpHeaders.add(HttpHeaders.AUTHORIZATION, "Bearer "+ authorization); + } + + HttpEntity httpEntity; + if (null != requestParameter) { + httpEntity = new HttpEntity(requestParameter, httpHeaders); + } else { + httpEntity = new HttpEntity(httpHeaders); + } + //System.setProperty("javax.net.debug", "all"); + System.out.println("url:"+url); + if(url.startsWith("https://")) { +// log.debug("https start,url=" + url); + restTemplate = new RestTemplate(new HttpsClientRequestFactory()); + result = restTemplate.exchange(url, httpMethod, httpEntity, String.class).getBody(); +// log.debug("https end,url=" + url); + }else { +// log.debug("http start,url=" + url); + restTemplate = new RestTemplate(); + result = restTemplate.exchange(url, httpMethod, httpEntity, String.class) + .getBody(); +// log.debug("http end,url=" + url); + } + + return result; + } + + private void ensureDefaultHeader(HttpMethod httpMethod, HttpHeaders httpHeaders) { + if (HttpMethod.POST == httpMethod) { + httpHeaders.setContentType(MediaType.APPLICATION_JSON_UTF8); + } + } + + public static void main(String []args){ + System.out.println("test"); + Map requestHeaders= new HashMap(1); + requestHeaders.put(HttpHeaders.AUTHORIZATION, "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJCQ0FuMkNIRGtvU0RKdjdJcDBrMFdqVkhVUm85NElTRiJ9.zzJtS7TYaaLy-VIANMU96SOw2r9driz-0Qxy-To9ko8"); +// String url2 = "https://crm.vazyme.com/blueland-plateform-render/role/BIO/role/leader/users/luob"; + String url2 = "http://47.100.56.159:38081/blueland-plateform-render/role/BIO/role/leader/users/luob"; +// String res = getInstance().getForObject(url2, requestHeaders, String.class,"Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJCQ0FuMkNIRGtvU0RKdjdJcDBrMFdqVkhVUm85NElTRiJ9.zzJtS7TYaaLy-VIANMU96SOw2r9driz-0Qxy-To9ko8"); + String res = getInstance().getForObject(url2, requestHeaders, String.class,""); + System.out.println(res); + + } +} diff --git a/usm-core/src/main/java/com/blueland/core/util/HttpsClientRequestFactory.java b/usm-core/src/main/java/com/blueland/core/util/HttpsClientRequestFactory.java new file mode 100644 index 0000000..40b9dd1 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/core/util/HttpsClientRequestFactory.java @@ -0,0 +1,130 @@ +package com.blueland.core.util; + +import java.io.IOException; +import java.net.HttpURLConnection; +import java.net.InetAddress; +import java.net.Socket; + +import javax.net.ssl.HostnameVerifier; +import javax.net.ssl.HttpsURLConnection; +import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLSession; +import javax.net.ssl.SSLSocket; +import javax.net.ssl.SSLSocketFactory; +import javax.net.ssl.TrustManager; + +import org.springframework.http.client.SimpleClientHttpRequestFactory; + +/** + * 声明:此代码摘录自https://blog.csdn.net/wltsysterm/article/details/80977455 + * 声明:关于Socket的相关知识,本人会在后面的闲暇时间进行学习整理,请持续关注博客更新 + * + * @author JustryDeng + * @DATE 2018年9月8日 下午4:34:02 + */ +public class HttpsClientRequestFactory extends SimpleClientHttpRequestFactory { + + @Override + protected void prepareConnection(HttpURLConnection connection, String httpMethod) { + try { + if (!(connection instanceof HttpsURLConnection)) { + throw new RuntimeException("An instance of HttpsURLConnection is expected"); + } + + HttpsURLConnection httpsConnection = (HttpsURLConnection) connection; + + TrustManager[] trustAllCerts = new TrustManager[]{ new MyX509TrustManager()}; + + System.setProperty("https.protocols", "TLSv1.2"); + SSLContext sslContext = SSLContext.getInstance("TLSv1.2"); + sslContext.init(null, trustAllCerts, new java.security.SecureRandom()); + httpsConnection.setSSLSocketFactory(new MyCustomSSLSocketFactory(sslContext.getSocketFactory())); + /* SSLContext sslContext = SSLContext.getInstance("TLSv1.2"); + sslContext.init(null,null,null); + SSLContext.setDefault(sslContext); */ + + httpsConnection.setHostnameVerifier(new HostnameVerifier() { + @Override + public boolean verify(String s, SSLSession sslSession) { + return true; + } + }); + + super.prepareConnection(httpsConnection, httpMethod); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * We need to invoke sslSocket.setEnabledProtocols(new String[] {"SSLv3"}); + * see http://www.oracle.com/technetwork/java/javase/documentation/cve-2014-3566-2342133.html (Java 8 section) + */ + // SSLSocketFactory用于创建 SSLSockets + private static class MyCustomSSLSocketFactory extends SSLSocketFactory { + + private final SSLSocketFactory delegate; + + public MyCustomSSLSocketFactory(SSLSocketFactory delegate) { + this.delegate = delegate; + } + + // 返回默认启用的密码套件。除非一个列表启用,对SSL连接的握手会使用这些密码套件。 + // 这些默认的服务的最低质量要求保密保护和服务器身份验证 + @Override + public String[] getDefaultCipherSuites() { + return delegate.getDefaultCipherSuites(); + } + + // 返回的密码套件可用于SSL连接启用的名字 + @Override + public String[] getSupportedCipherSuites() { + return delegate.getSupportedCipherSuites(); + } + + + @Override + public Socket createSocket(final Socket socket, final String host, final int port, + final boolean autoClose) throws IOException { + final Socket underlyingSocket = delegate.createSocket(socket, host, port, autoClose); + return overrideProtocol(underlyingSocket); + } + + + @Override + public Socket createSocket(final String host, final int port) throws IOException { + final Socket underlyingSocket = delegate.createSocket(host, port); + return overrideProtocol(underlyingSocket); + } + + @Override + public Socket createSocket(final String host, final int port, final InetAddress localAddress, + final int localPort) throws + IOException { + final Socket underlyingSocket = delegate.createSocket(host, port, localAddress, localPort); + return overrideProtocol(underlyingSocket); + } + + @Override + public Socket createSocket(final InetAddress host, final int port) throws IOException { + final Socket underlyingSocket = delegate.createSocket(host, port); + return overrideProtocol(underlyingSocket); + } + + @Override + public Socket createSocket(final InetAddress host, final int port, final InetAddress localAddress, + final int localPort) throws + IOException { + final Socket underlyingSocket = delegate.createSocket(host, port, localAddress, localPort); + return overrideProtocol(underlyingSocket); + } + + private Socket overrideProtocol(final Socket socket) { + if (!(socket instanceof SSLSocket)) { + throw new RuntimeException("An instance of SSLSocket is expected"); + } + ((SSLSocket) socket).setEnabledProtocols(new String[]{"TLSv1"}); + return socket; + } + } +} \ No newline at end of file diff --git a/usm-core/src/main/java/com/blueland/core/util/IPWhiteListUtil.java b/usm-core/src/main/java/com/blueland/core/util/IPWhiteListUtil.java new file mode 100644 index 0000000..74be14e --- /dev/null +++ b/usm-core/src/main/java/com/blueland/core/util/IPWhiteListUtil.java @@ -0,0 +1,197 @@ +package com.blueland.core.util; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.regex.Pattern; + +public class IPWhiteListUtil { + + // IP的正则 + private static Pattern pattern = Pattern + .compile("(1\\d{1,2}|2[0-4]\\d|25[0-5]|\\d{1,2})\\." + "(1\\d{1,2}|2[0-4]\\d|25[0-5]|\\d{1,2})\\." + + "(1\\d{1,2}|2[0-4]\\d|25[0-5]|\\d{1,2})\\." + "(1\\d{1,2}|2[0-4]\\d|25[0-5]|\\d{1,2})"); + + /** + * + * getAvaliIpList:(根据IP白名单设置获取可用的IP列表). + * + * @date 2017-4-17 下午02:50:20 + * @param ipConfig + * @return + */ + + private static Set getAvaliIpList(String allowIp) { + + Set ipList = new HashSet(); + for (String allow : allowIp.replaceAll("\\s", "").split(";")) { + if (allow.indexOf("*") > -1) { + String[] ips = allow.split("\\."); + String[] from = new String[] { "0", "0", "0", "0" }; + String[] end = new String[] { "255", "255", "255", "255" }; + List tem = new ArrayList(); + for (int i = 0; i < ips.length; i++) + if (ips[i].indexOf("*") > -1) { + tem = complete(ips[i]); + from[i] = null; + end[i] = null; + } else { + from[i] = ips[i]; + end[i] = ips[i]; + } + + StringBuffer fromIP = new StringBuffer(); + StringBuffer endIP = new StringBuffer(); + for (int i = 0; i < 4; i++) + if (from[i] != null) { + fromIP.append(from[i]).append("."); + endIP.append(end[i]).append("."); + } else { + fromIP.append("[*]."); + endIP.append("[*]."); + } + fromIP.deleteCharAt(fromIP.length() - 1); + endIP.deleteCharAt(endIP.length() - 1); + + for (String s : tem) { + String ip = fromIP.toString().replace("[*]", s.split(";")[0]) + "-" + + endIP.toString().replace("[*]", s.split(";")[1]); + if (validate(ip)) { + ipList.add(ip); + } + } + } else { + if (validate(allow)) { + ipList.add(allow); + } + } + + } + + return ipList; + } + + /** + * 对单个IP节点进行范围限定 + * + * @param arg + * @return 返回限定后的IP范围,格式为List[10;19, 100;199] + */ + private static List complete(String arg) { + List com = new ArrayList(); + if (arg.length() == 1) { + com.add("0;255"); + } else if (arg.length() == 2) { + String s1 = complete(arg, 1); + if (s1 != null) + com.add(s1); + String s2 = complete(arg, 2); + if (s2 != null) + com.add(s2); + } else { + String s1 = complete(arg, 1); + if (s1 != null) + com.add(s1); + } + return com; + } + + private static String complete(String arg, int length) { + String from = ""; + String end = ""; + if (length == 1) { + from = arg.replace("*", "0"); + end = arg.replace("*", "9"); + } else { + from = arg.replace("*", "00"); + end = arg.replace("*", "99"); + } + if (Integer.valueOf(from) > 255) + return null; + if (Integer.valueOf(end) > 255) + end = "255"; + return from + ";" + end; + } + + /** + * 在添加至白名单时进行格式校验 + * + * @param ip + * @return + */ + private static boolean validate(String ip) { + for (String s : ip.split("-")) + if (!pattern.matcher(s).matches()) { + return false; + } + return true; + } + + /** + * + * checkLoginIP:(根据IP,及可用Ip列表来判断ip是否包含在白名单之中). + * + * @date 2017-4-17 下午03:01:03 + * @param ip + * @param ipList + * @return + */ + private static boolean checkLoginIP(String ip, Set ipList) { + if (ipList.isEmpty() || ipList.contains(ip)) + return true; + else { + for (String allow : ipList) { + if (allow.indexOf("-") > -1) { + String[] from = allow.split("-")[0].split("\\."); + String[] end = allow.split("-")[1].split("\\."); + String[] tag = ip.split("\\."); + + // 对IP从左到右进行逐段匹配 + boolean check = true; + for (int i = 0; i < 4; i++) { + int s = Integer.valueOf(from[i]); + int t = Integer.valueOf(tag[i]); + int e = Integer.valueOf(end[i]); + if (!(s <= t && t <= e)) { + check = false; + break; + } + } + if (check) { + return true; + } + } + } + } + return false; + } + + /** + * + * checkLoginIP:(根据IP地址,及IP白名单设置规则判断IP是否包含在白名单). + * + * @date 2017-4-17 下午03:01:37 + * @param ip + * @param ipWhiteConfig + * @return + */ + public static boolean checkLoginIP(String ip, String ipWhiteConfig) { + Set ipList = getAvaliIpList(ipWhiteConfig); + return checkLoginIP(ip, ipList); + } + + public static void main(String[] args) { + + String ipWhilte = "10.158.1.*;"; // 设置一个IP范围 + boolean flag = IPWhiteListUtil.checkLoginIP("10.158.1.13", ipWhilte); + boolean flag2 = IPWhiteListUtil.checkLoginIP("192.168.1.2", ipWhilte); + boolean flag3 = IPWhiteListUtil.checkLoginIP("192.168.3.16", ipWhilte); + boolean flag4 = IPWhiteListUtil.checkLoginIP("192.168.3.17", ipWhilte); + System.out.println(flag); // true + System.out.println(flag2); // false + System.out.println(flag3); // false + System.out.println(flag4); // true + } + +} diff --git a/usm-core/src/main/java/com/blueland/core/util/IdentifierGenerator.java b/usm-core/src/main/java/com/blueland/core/util/IdentifierGenerator.java new file mode 100644 index 0000000..cb4f79a --- /dev/null +++ b/usm-core/src/main/java/com/blueland/core/util/IdentifierGenerator.java @@ -0,0 +1,75 @@ +package com.blueland.core.util; + +import java.util.Date; + + +import lombok.extern.slf4j.Slf4j; +@Slf4j +public class IdentifierGenerator { + + public static String CODE_TYPE_APPLY = "apply"; + /** + * 根据长度生成随机字符串 + * @param len + * @return + */ + public static String genRandStr(int len) + { + String rand = "" ; + int readomWordIndex = 0 ; + String[] readomWord = { "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","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" + }; + for(int i = 0 ; i < len ; i ++) + { + readomWordIndex = (int)(Math.random() * 52); + rand += readomWord[readomWordIndex]; + } + return rand ; + } + + /** + * 根据长度随机生成数字串 + * @param len + * @return + */ + public static String genRandNumber(int len) + { + String rand = "" ; + int readomWordIndex = 0 ; + String[] readomWord = { "0","1","2","3","4","5","6","7","8","9"}; + for(int i = 0 ; i < len ; i ++) + { + readomWordIndex = (int)(Math.random() * 10); + rand += readomWord[readomWordIndex]; + } + return rand ; + } + + public static String createPrimaryKeySeq () { + String currentTimeMillisStr = new Long(System.currentTimeMillis()).toString(); + return currentTimeMillisStr + genRandStr(25); + } + + public static String createCodeByType(String type){ + String result = ""; + if(CODE_TYPE_APPLY.equals(type)){ + result = "ZHSQ"+String.format("%tY% convertJsonStrToMap(String jsonStr){ + + Map map = JSON.parseObject( + jsonStr,new TypeReference>(){} ); + + return map; + } + + public static List convertJsonStrToMapArray(String jsonStr){ + return JSON.parseArray(jsonStr, Map.class); + } + + public static String mapToJson(Map map) { + String string = "{"; + for (Iterator it = map.entrySet().iterator(); it.hasNext();) { + Entry e = (Entry) it.next(); + string += "'" + e.getKey() + "':"; + string += "'" + e.getValue() + "',"; + } + string = string.substring(0, string.lastIndexOf(",")); + string += "}"; + return string; + } + + /** + * 功能描述:把JSON数据转换成指定的java对象 + * @param jsonData JSON数据 + * @param clazz 指定的java对象 + * @return 指定的java对象 + */ + public static T convertJsonStrToBean(String jsonData, Class clazz) { + return JSON.parseObject(jsonData, clazz); + } + + /** + * 功能描述:把java对象转换成JSON数据 + * @param object java对象 + * @return JSON数据 + */ + public static String convertBeanToJsonStr(Object object) { + return JSON.toJSONString(object); + } + + /** + * 功能描述:把JSON数据转换成指定的java对象列表 + * @param jsonData JSON数据 + * @param clazz 指定的java对象 + * @return List + */ + public static List convertJsonStrToList(String jsonData, Class clazz) { + return JSON.parseArray(jsonData, clazz); + } + +} diff --git a/usm-core/src/main/java/com/blueland/core/util/LogUtil.java b/usm-core/src/main/java/com/blueland/core/util/LogUtil.java new file mode 100644 index 0000000..e16c36b --- /dev/null +++ b/usm-core/src/main/java/com/blueland/core/util/LogUtil.java @@ -0,0 +1,220 @@ +package com.blueland.core.util; + +import javax.annotation.PostConstruct; +import javax.servlet.http.HttpServletRequest; + +import cn.hutool.core.util.ObjectUtil; +import com.blueland.model.TPfSysOplog; +import com.blueland.service.ISysOplogService; +import com.blueland.service.impl.SysOplogServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import com.blueland.bo.SysOplogEntity; + +import java.util.Date; + +/** + * 日志操作 + *@author zhengTao + * + */ +@Component +public class LogUtil { + + private static ISysOplogService sysOplogService; + + @Autowired + private ISysOplogService sysOplogService2; + + + @PostConstruct + public void beforeInit() { + sysOplogService = sysOplogService2; + } + + /** + * + * @param request 请求 + * @param bizId 业务ID + * @param bizType 业务类型 + * @param type 操作类型 + * @param content 操作内容 + * @param status 操作状态:成功:success,失败:failed + * @param remark 备注 + */ + public static void addSysOplog(HttpServletRequest request, String bizId, String bizType, String type, + String content, String status, String sys, String remark) { + TPfSysOplog oplog = new TPfSysOplog(); + if(null != request) { + String userAgent = request.getHeader("USER-AGENT"); + if(StringUtil.isEmpty(userAgent)) { + userAgent = request.getHeader("User-Agent"); + } + String userId = request.getHeader("iv-user"); + String aceessIp = getRemoteAddr(request); + String aceessBrowse = getBrowserName(userAgent); + oplog.setUserId(null!=userId?userId:""); + oplog.setUserName(""); + oplog.setAceessIp(aceessIp!=null?aceessIp:""); + oplog.setAceessBrowse(aceessBrowse!=null?aceessBrowse:""); + }else { + oplog.setUserId("admin"); + oplog.setUserName("管理员"); + oplog.setAceessIp(""); + oplog.setAceessBrowse(""); + } + oplog.setBizId(bizId); + oplog.setBizType(bizType); + oplog.setType(type); + oplog.setContent(content); + oplog.setStatus(status); + oplog.setCreateTime(new Date()); + oplog.setAppId("sys"); + oplog.setRemark(remark); + try { + sysOplogService.save(oplog); + } catch (Exception e) { + System.out.println(e); + } + } + + /** + * @param userId 操作人ID + * @param userName 操作人姓名 + * @param request 请求 + * @param bizId 业务ID + * @param bizType 业务类型 + * @param type 操作类型 + * @param content 操作内容 + * @param status 操作状态:成功:success,失败:failed + * @param remark 备注 + */ + public static void addSysOplog4Render(HttpServletRequest request, + String userId,String userName,String bizId, String bizType, String type, + String content, String status, String sys, String remark) { + TPfSysOplog oplog = new TPfSysOplog(); + if(null != request) { + String userAgent = request.getHeader("USER-AGENT"); + if(StringUtil.isEmpty(userAgent)) { + userAgent = request.getHeader("User-Agent"); + } + if(StringUtil.isEmpty(userId)) { + userId = request.getHeader("iv-user"); + } + String aceessIp = getRemoteAddr(request); + String aceessBrowse = getBrowserName(userAgent); + oplog.setUserName(userName); + oplog.setUserId(null!=userId?userId:""); + oplog.setAceessIp(aceessIp!=null?aceessIp:""); + oplog.setAceessBrowse(aceessBrowse!=null?aceessBrowse:""); + }else { + oplog.setUserId("admin"); + oplog.setUserName("管理员"); + oplog.setAceessIp("127.0.0.1"); + oplog.setAceessBrowse(""); + } + oplog.setCreateTime(new Date()); + oplog.setBizId(bizId); + oplog.setBizType(bizType); + oplog.setType(type); + oplog.setContent(content); + oplog.setStatus(status); + oplog.setAceessIp(sys); + oplog.setRemark(remark); + try { + sysOplogService.save(oplog); + } catch (Exception e) { + System.out.println(e); + } + } + + public static String getBrowserName(String agent) { + if(agent.indexOf("msie 7")>0){ + return "ie7"; + }else if(agent.indexOf("msie 8")>0){ + return "ie8"; + }else if(agent.indexOf("msie 9")>0){ + return "ie9"; + }else if(agent.indexOf("msie 10")>0){ + return "ie10"; + }else if(agent.indexOf("msie")>0){ + return "ie"; + }else if(agent.indexOf("opera")>0){ + return "opera"; + }else if(agent.indexOf("Chrome")>0){ + return "Chrome"; + }else if(agent.indexOf("firefox")>0 || agent.indexOf("Firefox") > 0){ + return "firefox"; + }else if(agent.indexOf("webkit")>0){ + return "webkit"; + }else if(agent.indexOf("QQBrowser")>0){ + return "QQBrowser"; + }else if(agent.indexOf("360SE")>0){ + return "360SE"; + }else if(agent.indexOf("gecko")>0 && agent.indexOf("rv:11")>0){ + return "ie11"; + }else{ + return "Others"; + } + } + + + /** + * 获取客户端ip地址(可以穿透代理) + * @param request + * @return + */ + public static String getRemoteAddr(HttpServletRequest request) { + String ip = request.getHeader("x-forwarded-for"); + if (ip != null && ip.length() != 0 && !"unknown".equalsIgnoreCase(ip)) { + // 多次反向代理后会有多个ip值,第一个ip才是真实ip + if (ip.indexOf(",") != -1) { + ip = ip.split(",")[0]; + } + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("X-Forwarded-For"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("WL-Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_X_FORWARDED_FOR"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_X_FORWARDED"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_X_CLUSTER_CLIENT_IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_CLIENT_IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_FORWARDED_FOR"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_FORWARDED"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_VIA"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("REMOTE_ADDR"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("X-Real-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getRemoteAddr(); + } + if (ip.equals("0:0:0:0:0:0:0:1")) { + ip = "本地"; + } + return ip; + } + +} diff --git a/usm-core/src/main/java/com/blueland/core/util/MapUtil.java b/usm-core/src/main/java/com/blueland/core/util/MapUtil.java new file mode 100644 index 0000000..450cdb3 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/core/util/MapUtil.java @@ -0,0 +1,80 @@ +package com.blueland.core.util; + +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class MapUtil { + /** + * javaBean 转 Map + * @param object object需要转换的javabean + * @return 转换结果map + * @throws Exception + */ + public static Map beanToMap(Object object) throws Exception { + Map map = new HashMap(); + Class cls = object.getClass(); + Field[] fields = cls.getDeclaredFields(); + for (Field field : fields) { + field.setAccessible(true); + map.put(field.getName(), field.get(object)); + } + return map; + } + + /** + * + * @param map 需要转换的map + * @param cls 目标javaBean的类对象 + * @return 目标类object + * @throws Exception + */ + public static Object mapToBean(Map map, Class cls) throws Exception { + Object object = cls.newInstance(); + for (String key : map.keySet()) { + Field temFiels = cls.getDeclaredField(key); + temFiels.setAccessible(true); + temFiels.set(object, map.get(key)); + } + return object; + } + + /** + * 将一个map组成的list转成实体类bean组成的list + * @param mapList 存了map对象的list + * @param clazz 需要将这些map转成哪个实体类对象 + * @return + */ + public static List convertMapListToBeanList(List mapList, Class clazz){ + List list=new ArrayList(); + for(Map map:mapList){ + try { + T obj=clazz.newInstance();//创建bean的实例对象 + for(Object o:map.keySet()){//遍历map的key + for(Method m:clazz.getMethods()){//遍历bean的类中的方法,找到set方法进行赋值 + if(m.getName().toLowerCase().equals("set"+o.toString().toLowerCase())){ + if(o.toString().indexOf("Time") != -1){ + continue; + }else{ + m.invoke(obj, map.get(o)); + } + } + } + } + list.add(obj); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } catch (InvocationTargetException e) { + e.printStackTrace(); + } catch (InstantiationException e) { + e.printStackTrace(); + } + } + return list; + } + +} diff --git a/usm-core/src/main/java/com/blueland/core/util/Md5Util.java b/usm-core/src/main/java/com/blueland/core/util/Md5Util.java new file mode 100644 index 0000000..63d586c --- /dev/null +++ b/usm-core/src/main/java/com/blueland/core/util/Md5Util.java @@ -0,0 +1,66 @@ +package com.blueland.core.util; + +import java.io.UnsupportedEncodingException; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class Md5Util { + /** + * String转MD5 + * @param psw + * @return + */ + private static Logger log = LoggerFactory.getLogger(Md5Util.class); + public static String StringToMd5(String psw) { + { + try { + MessageDigest md5 = MessageDigest.getInstance("MD5"); + md5.update(psw.getBytes("UTF-8")); + byte[] encryption = md5.digest(); + + StringBuffer strBuf = new StringBuffer(); + for (int i = 0; i < encryption.length; i++) { + if (Integer.toHexString(0xff & encryption[i]).length() == 1) { + strBuf.append("0").append(Integer.toHexString(0xff & encryption[i])); + } else { + strBuf.append(Integer.toHexString(0xff & encryption[i])); + } + } + + return strBuf.toString(); + } catch (NoSuchAlgorithmException e) { + return ""; + } catch (UnsupportedEncodingException e) { + return ""; + } + } + } + public static String getPhpMd5(byte[] buffer) { + String s = null; + MessageDigest md = null; + + char[] hexChars = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; + + try { + md = MessageDigest.getInstance("MD5"); + } catch (NoSuchAlgorithmException e) { + log.error("getPhpMd5:buffer="+buffer,e); + return null; + } + md.update(buffer); + byte[] datas = md.digest(); // 16个字节的长整数 + char[] str = new char[2 * 16]; + int k = 0; + for (int i = 0; i < 16; i++) { + byte b = datas[i]; + str[k++] = hexChars[b >>> 4 & 0xf];// 高4位 + str[k++] = hexChars[b & 0xf];// 低4位 + } + s = new String(str); + return s; + } + +} diff --git a/usm-core/src/main/java/com/blueland/core/util/MyX509TrustManager.java b/usm-core/src/main/java/com/blueland/core/util/MyX509TrustManager.java new file mode 100644 index 0000000..fdc2d97 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/core/util/MyX509TrustManager.java @@ -0,0 +1,32 @@ +package com.blueland.core.util; + +import java.security.cert.CertificateException; +import java.security.cert.X509Certificate; + +import javax.net.ssl.X509TrustManager; + +/** +* @author 59552 +* @version 创建时间:2019年6月27日 上午11:29:34 +* 类说明 +*/ +public class MyX509TrustManager implements X509TrustManager { + + @Override + public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { + // TODO Auto-generated method stub + + } + + @Override + public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { + // TODO Auto-generated method stub + + } + + @Override + public X509Certificate[] getAcceptedIssuers() { + // TODO Auto-generated method stub + return null; + } +} \ No newline at end of file diff --git a/usm-core/src/main/java/com/blueland/core/util/RedisUtils.java b/usm-core/src/main/java/com/blueland/core/util/RedisUtils.java new file mode 100644 index 0000000..88df517 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/core/util/RedisUtils.java @@ -0,0 +1,702 @@ +package com.blueland.core.util; + +import com.blueland.constant.RedisConstant; +import lombok.extern.slf4j.Slf4j; +import lombok.val; +import org.apache.poi.ss.formula.functions.T; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.Cursor; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.ScanOptions; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.TimeUnit; + +@Slf4j +@Component +public class RedisUtils { + + @Autowired + private RedisTemplate redisTemplate; + + + /** + * 指定缓存失效时间 + * + * @param key 键 + * @param time 时间(秒) + * @return + */ + public boolean expire(String key, long time) { + try { + if (time > 0) { + redisTemplate.expire(key, time, TimeUnit.SECONDS); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 根据key 获取过期时间 + * + * @param key 键 不能为null + * @return 时间(秒) 返回0代表为永久有效 + */ + public long getExpire(String key) { + return redisTemplate.getExpire(key, TimeUnit.SECONDS); + } + + /** + * 判断key是否存在 + * + * @param key 键 + * @return true 存在 false不存在 + */ + public boolean hasKey(String key) { + try { + return redisTemplate.hasKey(key); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 删除缓存 + * + * @param key 可以传一个值 或多个 + */ + @SuppressWarnings("unchecked") + public void del(String... key) { + if (key != null && key.length > 0) { + if (key.length == 1) { + redisTemplate.delete(key[0]); + } else { + redisTemplate.delete(CollectionUtils.arrayToList(key)); + } + } + } + + // ============================String============================= + + /** + * 普通缓存获取 + * + * @param key 键 + * @return 值 + */ + public Object get(String key) { + return key == null ? null : redisTemplate.opsForValue().get(key); + } + + /** + * 获取值 + * @param key + * @param claz + * @return + */ + public T get(String key, Class claz) { + return key == null ? null : (T) redisTemplate.opsForValue().get(key); + } + + /** + * 普通缓存放入 + * + * @param key 键 + * @param value 值 + * @return true成功 false失败 + */ + public boolean set(String key, Object value) { + try { + redisTemplate.opsForValue().set(key, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + + } + + /** + * 普通缓存放入并设置时间 + * + * @param key 键 + * @param value 值 + * @param time 时间(秒) time要大于0 如果time小于等于0 将设置无限期 + * @return true成功 false 失败 + */ + public boolean set(String key, Object value, long time) { + try { + if (time > 0) { + redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS); + } else { + set(key, value); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 递增 + * + * @param key 键 + * @param by 要增加几(大于0) + * @return + */ + public long incr(String key, long delta) { + if (delta < 0) { + throw new RuntimeException("递增因子必须大于0"); + } + return redisTemplate.opsForValue().increment(key, delta); + } + + /** + * 递增,默认加1 + * + * @param key 键 + * @return + */ + public long incr(String key) { + return redisTemplate.opsForValue().increment(key); + } + + /** + * 递减 + * + * @param key 键 + * @param by 要减少几(小于0) + * @return + */ + public long decr(String key, long delta) { + if (delta < 0) { + throw new RuntimeException("递减因子必须大于0"); + } + return redisTemplate.opsForValue().decrement(key, delta); + } + + /** + * 递减 + * + * @param key 键 + * @return + */ + public long decr(String key) { + return redisTemplate.opsForValue().decrement(key); + } + + // ================================Map================================= + + /** + * HashGet + * + * @param key 键 不能为null + * @param item 项 不能为null + * @return 值 + */ + public Object hget(String key, String item) { + return redisTemplate.opsForHash().get(key, item); + } + + public List multiGet(String key, List item, Class claz) { + return redisTemplate.opsForHash().multiGet(key, item); + } + + public T hget(String key,String item, Class claz) { + return (T) redisTemplate.opsForHash().get(key, item); + } + + /** + * 获取hashKey对应的所有键值 + * + * @param key 键 + * @return 对应的多个键值 + */ + public Map hmget(String key) { + return redisTemplate.opsForHash().entries(key); + } + + /** + * HashSet + * + * @param key 键 + * @param map 对应多个键值 + * @return true 成功 false 失败 + */ + public boolean hmset(String key, Map map) { + try { + redisTemplate.opsForHash().putAll(key, map); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * HashSet 并设置时间 + * + * @param key 键 + * @param map 对应多个键值 + * @param time 时间(秒) + * @return true成功 false失败 + */ + public boolean hmset(String key, Map map, long time) { + try { + redisTemplate.opsForHash().putAll(key, map); + if (time > 0) { + expire(key, time); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 向一张hash表中放入数据,如果不存在将创建 + * + * @param key 键 + * @param item 项 + * @param value 值 + * @return true 成功 false失败 + */ + public boolean hset(String key, String item, Object value) { + try { + redisTemplate.opsForHash().put(key, item, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 向一张hash表中放入数据,如果不存在将创建 + * + * @param key 键 + * @param item 项 + * @param value 值 + * @param time 时间(秒) 注意:如果已存在的hash表有时间,这里将会替换原有的时间 + * @return true 成功 false失败 + */ + public boolean hset(String key, String item, Object value, long time) { + try { + redisTemplate.opsForHash().put(key, item, value); + if (time > 0) { + expire(key, time); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 删除hash表中的值 + * + * @param key 键 不能为null + * @param item 项 可以使多个 不能为null + */ + public void hdel(String key, Object... item) { + redisTemplate.opsForHash().delete(key, item); + } + + /** + * 判断hash表中是否有该项的值 + * + * @param key 键 不能为null + * @param item 项 不能为null + * @return true 存在 false不存在 + */ + public boolean hHasKey(String key, String item) { + return redisTemplate.opsForHash().hasKey(key, item); + } + + /** + * hash递增 如果不存在,就会创建一个 并把新增后的值返回 + * + * @param key 键 + * @param item 项 + * @param by 要增加几(大于0) + * @return + */ + public double hincr(String key, String item, double by) { + return redisTemplate.opsForHash().increment(key, item, by); + } + + /** + * hash递减 + * + * @param key 键 + * @param item 项 + * @param by 要减少记(小于0) + * @return + */ + public double hdecr(String key, String item, double by) { + return redisTemplate.opsForHash().increment(key, item, -by); + } + + // ============================set============================= + + /** + * 根据key获取Set中的所有值 + * + * @param key 键 + * @return + */ + public Set sGet(String key) { + try { + return redisTemplate.opsForSet().members(key); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + /** + * 根据value从一个set中查询,是否存在 + * + * @param key 键 + * @param value 值 + * @return true 存在 false不存在 + */ + public boolean sHasKey(String key, Object value) { + try { + return redisTemplate.opsForSet().isMember(key, value); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 将数据放入set缓存 + * + * @param key 键 + * @param values 值 可以是多个 + * @return 成功个数 + */ + public long sSet(String key, Object... values) { + try { + return redisTemplate.opsForSet().add(key, values); + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + /** + * 将set数据放入缓存 + * + * @param key 键 + * @param time 时间(秒) + * @param values 值 可以是多个 + * @return 成功个数 + */ + public long sSetAndTime(String key, long time, Object... values) { + try { + Long count = redisTemplate.opsForSet().add(key, values); + if (time > 0) { + expire(key, time); + } + return count; + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + /** + * 获取set缓存的长度 + * + * @param key 键 + * @return + */ + public long sGetSetSize(String key) { + try { + return redisTemplate.opsForSet().size(key); + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + /** + * 移除值为value的 + * + * @param key 键 + * @param values 值 可以是多个 + * @return 移除的个数 + */ + public long setRemove(String key, Object... values) { + try { + Long count = redisTemplate.opsForSet().remove(key, values); + return count; + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + // ===============================list================================= + + /** + * 获取list缓存的内容 + * + * @param key 键 + * @param start 开始 + * @param end 结束 0 到 -1代表所有值 + * @return + */ + public List lGet(String key, long start, long end) { + try { + return redisTemplate.opsForList().range(key, start, end); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + /** + * 获取list缓存的长度 + * + * @param key 键 + * @return + */ + public long lGetListSize(String key) { + try { + return redisTemplate.opsForList().size(key); + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + /** + * 通过索引 获取list中的值 + * + * @param key 键 + * @param index 索引 index>=0时, 0 表头,1 第二个元素,依次类推;index<0时,-1,表尾,-2倒数第二个元素,依次类推 + * @return + */ + public Object lGetIndex(String key, long index) { + try { + return redisTemplate.opsForList().index(key, index); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + /** + * 将list放入缓存 + * + * @param key 键 + * @param value 值 + * @param time 时间(秒) + * @return + */ + public boolean lSet(String key, Object value) { + try { + redisTemplate.opsForList().rightPush(key, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 将list放入缓存 + * + * @param key 键 + * @param value 值 + * @param time 时间(秒) + * @return + */ + public boolean lSet(String key, Object value, long time) { + try { + redisTemplate.opsForList().rightPush(key, value); + if (time > 0) { + expire(key, time); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 将list放入缓存 + * + * @param key 键 + * @param value 值 + * @param time 时间(秒) + * @return + */ + public boolean lSet(String key, List value) { + try { + redisTemplate.opsForList().rightPushAll(key, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 将list放入缓存 + * + * @param key 键 + * @param value 值 + * @param time 时间(秒) + * @return + */ + public boolean lSet(String key, List value, long time) { + try { + redisTemplate.opsForList().rightPushAll(key, value); + if (time > 0) { + expire(key, time); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 根据索引修改list中的某条数据 + * + * @param key 键 + * @param index 索引 + * @param value 值 + * @return + */ + public boolean lUpdateIndex(String key, long index, Object value) { + try { + redisTemplate.opsForList().set(key, index, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 移除N个值为value + * + * @param key 键 + * @param count 移除多少个 + * @param value 值 + * @return 移除的个数 + */ + public long lRemove(String key, long count, Object value) { + try { + Long remove = redisTemplate.opsForList().remove(key, count, value); + return remove; + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + /** + * 获取数组中第一条数据 并移除redis中的值 + * + * @param key + * @return + */ + public Object getFirstList(String key) { + try { + return redisTemplate.opsForList().leftPop(key); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + /** + * 获取数组中最后一条数据 并移除redis中的值 + * + * @param key + * @return + */ + public Object getLastList(String key) { + try { + return redisTemplate.opsForList().rightPop(key); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + /** + * 游标获取相关key: + * + * @param key + */ + public Map hashEntries(String key) { + return redisTemplate.opsForHash().entries(key); + } + + /** + * 扫描key,支持模糊 + * + * @param key + * @param options + * @return + */ + public Cursor hashScan(String key, ScanOptions options) { + return redisTemplate.opsForHash().scan(key, options); + } + + /** + * 获取所有key + * + * @param key + * @return + */ + public Set getAllKey(String key) { + return key == null ? null : redisTemplate.keys(key); + } + + /** + * 获取hash所有values + */ + public List hValues(String key, Class claz) { + + return (List) redisTemplate.opsForHash().values(key); + } + + /** + * hash putAll + * + * @param key + * @param data + */ + public void hPutAll(String key, Map data) { + redisTemplate.opsForHash().putAll(key, data); + } + + /** + * 根据key 删除所有数据 + * @param key + */ + public void deleteAll(String key) { + redisTemplate.delete(key); + } +} diff --git a/usm-core/src/main/java/com/blueland/core/util/ReflectUtils.java b/usm-core/src/main/java/com/blueland/core/util/ReflectUtils.java new file mode 100644 index 0000000..fe1643a --- /dev/null +++ b/usm-core/src/main/java/com/blueland/core/util/ReflectUtils.java @@ -0,0 +1,52 @@ +package com.blueland.core.util; + +import cn.hutool.core.util.ReflectUtil; + +import java.lang.reflect.Method; + +/** + * 反射工具类. 提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class, 被AOP过的真实类等工具函数. + * + * @author Lion Li + */ +@SuppressWarnings("rawtypes") +public class ReflectUtils extends ReflectUtil { + + private static final String SETTER_PREFIX = "set"; + + private static final String GETTER_PREFIX = "get"; + + /** + * 调用Getter方法. + * 支持多级,如:对象名.对象名.方法 + */ + @SuppressWarnings("unchecked") + public static E invokeGetter(Object obj, String propertyName) { + Object object = obj; + for (String name : StringUtils.split(propertyName, ".")) { + String getterMethodName = GETTER_PREFIX + StringUtils.capitalize(name); + object = invoke(object, getterMethodName); + } + return (E) object; + } + + /** + * 调用Setter方法, 仅匹配方法名。 + * 支持多级,如:对象名.对象名.方法 + */ + public static void invokeSetter(Object obj, String propertyName, E value) { + Object object = obj; + String[] names = StringUtils.split(propertyName, "."); + for (int i = 0; i < names.length; i++) { + if (i < names.length - 1) { + String getterMethodName = GETTER_PREFIX + StringUtils.capitalize(names[i]); + object = invoke(object, getterMethodName); + } else { + String setterMethodName = SETTER_PREFIX + StringUtils.capitalize(names[i]); + Method method = getMethodByName(object.getClass(), setterMethodName); + invoke(object, method, value); + } + } + } + +} diff --git a/usm-core/src/main/java/com/blueland/core/util/RemoteDictUtils.java b/usm-core/src/main/java/com/blueland/core/util/RemoteDictUtils.java new file mode 100644 index 0000000..2fe22d7 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/core/util/RemoteDictUtils.java @@ -0,0 +1,167 @@ +package com.blueland.core.util; + +import cn.hutool.core.collection.CollUtil; +import com.blueland.constant.RedisConstant; +import com.blueland.bo.DictEntity; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.Cursor; +import org.springframework.data.redis.core.ScanOptions; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @description: 字典工具类型 + * @author: bigTian + * @create: 2021-10-28 09:36 + */ +@Component("remoteDictUtils") +@Slf4j +public class RemoteDictUtils { + @Autowired + private RedisUtils redisUtils; + + + /** + * 根据appid和字典父Code返回对应的子数据 + * + * @param parentCode 字典父Code + * @param appId 租户id + * @return + */ + public List getDictByParentCodeAndAppId(String appId, String parentCode) { + Map parentMap = getParentMap(appId, parentCode); + ArrayList list = new ArrayList<>(parentMap.values()); + if (CollUtil.isNotEmpty(list)) { + list.sort(Comparator.comparing(DictEntity::getSort)); + } + return list; + } + + /** + * 根据appid返回对应的子数据 + * + * @param appId 租户id + * @return + */ + public List getDictByAppId(String appId) { + Map parentMap = getAppMap(appId); + ArrayList list = new ArrayList<>(parentMap.values()); + if (CollUtil.isNotEmpty(list)) { + list.sort(Comparator.comparing(DictEntity::getSort)); + } + return list; + } + + /** + * excel导入,以名称为key + * + * @param parentCode 字典父Code + * @param appId 租户id + * @return + */ + public Map getDictByNames(String appId, String parentCode) { + Map parentMap = getParentMap(appId, parentCode); + parentMap = parentMap.values().stream().collect(Collectors.toMap(DictEntity::getDictName, el -> el)); + return parentMap; + } + + /** + * 返回所有的字典数据 + * + * @return + */ + public Map>> getDictMaps() { + return redisUtils.hashEntries(RedisConstant.SYS_DICT_CACHE); + } + + /** + * 根据父级code和字典code查询 + * + * @param parentCode 父级code + * @param code 需要查询的字典code + * @param appId 租户id + * @return + */ + public DictEntity getDict(String appId, String parentCode, String code) { + Map parentMap = getParentMap(appId, parentCode); + return parentMap.get(code); + } + + /** + * 根据租户id和父code查询相关字典 + * + * @param appId + * @param parentCode + * @return + */ + private Map getParentMap(String appId, String parentCode) { + Map appIdMaps = new HashMap<>(); + ScanOptions options = new ScanOptions.ScanOptionsBuilder() + .match(appId + RedisConstant.DIVISION + parentCode + RedisConstant.DIVISION + RedisConstant.WILDCARD) + .count(100) + .build(); + Cursor> cursor = redisUtils.hashScan(RedisConstant.SYS_DICT_CACHE, options); + Map.Entry entry = null; + DictEntity value = null; + while (cursor.hasNext()) { + entry = cursor.next(); + value = entry.getValue(); + appIdMaps.putIfAbsent(value.getDictCode(), value); + } + cursor.close(); + return appIdMaps; + } + + /** + * 根据租户id查询相关字典 + * + * @param appId + * @return + */ + private Map getAppMap(String appId) { + Map appIdMaps = new HashMap<>(); + ScanOptions options = new ScanOptions.ScanOptionsBuilder() + .match(appId + RedisConstant.DIVISION + RedisConstant.WILDCARD) + .count(100) + .build(); + Cursor> cursor = redisUtils.hashScan(RedisConstant.SYS_DICT_CACHE, options); + Map.Entry entry = null; + DictEntity value = null; + while (cursor.hasNext()) { + entry = cursor.next(); + value = entry.getValue(); + appIdMaps.putIfAbsent(value.getDictCode(), value); + } + cursor.close(); + return appIdMaps; + } + + /** + * 根据租户id和父code查询相关字典 + * + * @param appId + * @param code + * @return + */ + public Map getDict(String appId, String code) { + Map appIdMaps = new HashMap<>(); + ScanOptions options = new ScanOptions.ScanOptionsBuilder() + .match(appId + RedisConstant.DIVISION + RedisConstant.WILDCARD + RedisConstant.DIVISION + code) + .count(100) + .build(); + Cursor> cursor = redisUtils.hashScan(RedisConstant.SYS_DICT_CACHE, options); + Map.Entry entry = null; + DictEntity value = null; + while (cursor.hasNext()) { + entry = cursor.next(); + value = entry.getValue(); + appIdMaps.putIfAbsent(value.getDictCode(), value); + } + cursor.close(); + return appIdMaps; + } +} diff --git a/usm-core/src/main/java/com/blueland/core/util/StringUtil.java b/usm-core/src/main/java/com/blueland/core/util/StringUtil.java new file mode 100644 index 0000000..2b250bf --- /dev/null +++ b/usm-core/src/main/java/com/blueland/core/util/StringUtil.java @@ -0,0 +1,495 @@ +package com.blueland.core.util; + +import org.apache.commons.lang3.StringUtils; + +import java.io.Writer; +import java.lang.reflect.Method; +import java.math.RoundingMode; +import java.sql.Clob; +import java.sql.SQLException; +import java.text.NumberFormat; +import java.util.*; +import java.util.Map.Entry; + +/** + * + * @author luobo + * + */ +public class StringUtil { + + /** + * 检测字符串是否不为空(null,"","null") + * @param s + * @return 不为空则返回true,否则返回false + */ + public static boolean notEmpty(String s){ + return s!=null && !"".equals(s) && !"null".equals(s); + } + + /** + * 检测字符串是否为空(null,"","null") + * @param s + * @return 为空则返回true,不否则返回false + */ + public static boolean isEmpty(String s){ + return s==null || "".equals(s) || "null".equals(s); + } + + /** + * 字符串转换为字符串数组 + * @param str 字符串 + * @param splitRegex 分隔符 + * @return + */ + public static String[] str2StrArray(String str,String splitRegex){ + if(isEmpty(str)){ + return null; + } + return str.split(splitRegex); + } + + /** + * 用默认的分隔符(,)将字符串转换为字符串数组 + * @param str 字符串 + * @return + */ + public static String[] str2StrArray(String str){ + return str2StrArray(str,",\\s*"); + } + + /** + * 转换成整形,出现数字格式异常默认为defaultValue + * @param object + * @param defaultValue + * @return + */ + public static int toInt(Object object,int defaultValue){ + if(null == object){ + return defaultValue; + } + try { + return Integer.parseInt(""+object); + } catch (NumberFormatException notint) { + return defaultValue; + } + } + + /** + * 转换成整形,出现数字格式异常默认�? + * @param object + * @return + */ + public static int toInt(Object object){ + return toInt(object,0); + } + + + public static String toNumricStr(Integer num,Integer digits){ + String numstr = num.toString(); + while (numstr.length() < digits){ + numstr = "0"+numstr; + } + return numstr; + } + + + public static void main(String [] args){ + String str="一、卷包车间平面7台综合测试仪需要进行数据采集,要求:1、采集卷接生产过程进行在线质量检测的检测数据。2、将采集数据集成至工艺质量系统,对数据进行分析统计,生成相应报表。3、将采集到的数据集成至卷包数采系统,在卷包数采工控机数采终端能实时查询。\r\n二、检测仪器自动采集与数据应用升级改造:1、新进红外水分安装采集和分析模块,2、填充值采集模块,3、红外校准零点记录与跟踪,4、报表生成,5、对比分析模块,6、目前在用系统升级\r\n三、系统集成"; + } + + /** + * @方法名: handleTextArea + * @描述:处理一个实体中的属性,如果是String,则进行转义,以方便前台换行显示 + * @作者:高星 + * @时间:2015-8-7 上午9:51:57 + * @参数:@param obj + * @返回值:void + */ + public void handleTextArea(Object obj){ + if(obj!=null && obj instanceof Map){ + Map map=((Map)obj); + Set keySet=map.keySet(); + } + } + + + + /** + * 转换textarea 中提交的数据在页面中按照textarea中一样的格式进行换行显示 + * @param textarea + * @return + */ + public static String textarea2html(String textarea){ + if(null != textarea){ + return textarea.replaceAll("\n", "
").replace(" ", "  "); + } + return textarea; + } + + /** + * 将字符串中HTML字符转换成TEXT类型字符 + * @param text + * @return + */ + public static String textEncode(String text){ + if(text == null) + return ""; + text = text.replaceAll("
", "\r\n"); + text = text.replaceAll("", ""); + text = text.replaceAll("&", "&") ; + text = text.replaceAll(""", "\"") ; + text = text.replaceAll("<", "<") ; + text = text.replaceAll(">", ">") ; + text = text.replaceAll("’", "'") ; + text = text.replaceAll(" "," "); + text = text.replaceAll("    ","\t"); + return text; + } + /** + * 将字符串中TEXT类型字符转换成HTML字符 + * @param text + * @return + */ + public static String textDecode(String text){ + if(text == null) + return ""; + text = text.replaceAll("",""); + text = text.replaceAll("&","&") ; + text = text.replaceAll("\"",""") ; + text = text.replaceAll( "<","<"); + text = text.replaceAll(">",">"); + text = text.replaceAll("'","’") ; + text = text.replaceAll(" "," "); + text = text.replaceAll("\\\\t","    "); + text = text.replaceAll("\r\n","
"); + text = text.replaceAll("\\r\\n","
"); + text = text.replaceAll("\\\r\\\n","
"); + text = text.replaceAll("\\\\r\\\\n","
"); + return text; + } + + public static void handleText(Object obj){ + if(obj!=null && obj instanceof Map){ + Map map=(Map)obj; + Set keySet=map.keySet(); + for(String key:keySet){ + Object item=map.get(key); + if(item!=null && item instanceof String){ + map.put(key,StringUtil.textDecode((String)item)); + } + } + obj=map; + } + } + + /** + * 获取字符串的实际长度(按字节长度,如一个中文长度为2) + * + * @param str + * 待返回长度的字符串 + * @return 字符串的字节长度 + */ + public static int getStrRealLength(String str) { + + if (str == null) + return 0; + + int length = 0; + + char[] chars = str.toCharArray(); + + for (char ch : chars) { + + if (ch <= 127) { + length++; + + } else { + length += 2; + } + } + return length; + } + + //求两个字符串数组的并集,利用set的元素唯一性 + public static String[] union(String[] arr1, String[] arr2) { + Set set = new HashSet(); + for (String str : arr1) { + set.add(str); + } + for (String str : arr2) { + set.add(str); + } + String[] result = {}; + return set.toArray(result); + } + + //求两个数组的交集 + public static String[] intersect(String[] arr1, String[] arr2) { + Map map = new HashMap(); + LinkedList list = new LinkedList(); + for (String str : arr1) { + if (!map.containsKey(str)) { + map.put(str, Boolean.FALSE); + } + } + for (String str : arr2) { + if (map.containsKey(str)) { + map.put(str, Boolean.TRUE); + } + } + + for (Entry e : map.entrySet()) { + if (e.getValue().equals(Boolean.TRUE)) { + list.add(e.getKey()); + } + } + + String[] result = {}; + return list.toArray(result); + } + + //求两个数组的差集 + public static String[] minus(String[] arr1, String[] arr2) { + LinkedList list = new LinkedList(); + LinkedList history = new LinkedList(); + String[] longerArr = arr1; + String[] shorterArr = arr2; + //找出较长的数组来减较短的数组 + if (arr1.length > arr2.length) { + longerArr = arr2; + shorterArr = arr1; + } + for (String str : longerArr) { + if (!list.contains(str)) { + list.add(str); + } + } + for (String str : shorterArr) { + if (list.contains(str)) { + history.add(str); + list.remove(str); + } else { + if (!history.contains(str)) { + list.add(str); + } + } + } + + String[] result = {}; + return list.toArray(result); + } + + public static String convertToString(Object obj,String defaultValue){ + if(obj==null){ + return defaultValue; + }else{ + return obj.toString(); + } + } + /** + * @方法名: strToList + * @描述:将以特定分隔符分割的字符串转为为List + * @作者:高星 + * @时间:2014-10-13 上午9:51:08 + * @参数:@param ids + * @参数:@param seperator + * @参数:@return + * @返回值:List + */ + public static List strToList(String ids,String seperator){ + List idList=new ArrayList(); + if(StringUtils.isNotBlank(ids)){ + String[] idArr=ids.split(seperator); + for(String id:idArr){ + if(StringUtils.isNotBlank(id)){ + idList.add(id); + } + } + } + return idList; + } + /** + * @方法名: clobToStr + * @描述:将Clob字段转化为字符串 + * @作者:高星 + * @时间:2014-10-31 下午3:36:43 + * @参数:@param clob + * @参数:@return + * @返回值:String + */ + public static String clobToStr(Clob clob){ + String result=""; + try { + result= (clob != null ? clob.getSubString(1, (int) clob.length()) :""); + } catch (SQLException e) { + e.printStackTrace(); + } + return result; + } + + public static Clob strToClob(String str, Clob lob) throws Exception { + Method methodToInvoke = lob.getClass().getMethod( + "getCharacterOutputStream", (Class[]) null); + Writer writer = (Writer) methodToInvoke.invoke(lob, (Object[]) null); + writer.write(str); + writer.close(); + return lob; + } + + /** + * 功能: 按照指定字节长度截取字符串并选择在后面是否加... + * + * @param str + * 需要截取的字符串 + * @param offset + * 需要截取的字节长度,不包括追加的… + * @param addEllipsis + * 是否添加省略号… true 是 false 否 + * @return String 截取后的字符串 + */ + public static String getSubStr(String str,int offset,boolean addEllipsis) { + if (str == null) + return ""; + int realLength = getStrRealLength(str); + if (realLength <= offset) { + return str; + } + int length = 0; + StringBuilder sb = new StringBuilder(); + char[] chars = str.toCharArray(); + int ii = 0; + while (length < offset) { + char ch = chars[ii++]; + if (ch <= 127) { + length++; + } else { + length += 2; + } + sb.append(ch); + } + if(addEllipsis==true){ + sb.append("…"); + } + return sb.toString(); + } + + public static boolean contains(String str1,String str2,String separator){ + boolean b=false; + if(StringUtils.isNotBlank(str1) && StringUtils.isNotBlank(str2)){ + if(null!=separator){ + b=str1.indexOf(separator+str2+separator)>-1; + }else{ + b=str1.indexOf(str2)>-1; + } + } + return b; + } + + public static void handleMapListData(List> dataList){ + if(dataList!=null && dataList.size()>0){ + for(int i=0;i item=dataList.get(i); + Set keySet=item.keySet(); + for(String key:keySet){ + Object value=item.get(key); + String className=value.getClass().getSimpleName(); + if("clob".equals(className.toLowerCase())){ + item.put(key,StringUtil.clobToStr((Clob) item.get(key))); + } + } + } + } + } + + + public static Long handleDiscountMoney(Long discount){ + return Math.abs(discount)/100; + } + + //取类似10m 10gi 100s中的数字,特点都是数字开头最后是字符. add by wfz 2017-03-28 + public static int getNumber(String data){ + data=data.trim(); + if(isEmpty(data)) + { + return 0; + } + int index = 0; + for(int i = 0; i < data.length(); i++){ + if (!Character.isDigit(data.charAt(i))){ + index = i; + break; + } + } + String valueStr="0"; + String unitStr="m"; + if(index==0) + { + valueStr= data; + } + else + { + valueStr=data.substring(0,index);//计量数字 + unitStr=data.substring(index);//计量单位 mi m g gi + } + int intValue=Integer.valueOf(valueStr); + int result=intValue; + if(notEmpty(unitStr)) + { + unitStr=unitStr.toLowerCase(); + switch (unitStr) { + case "m": + case "mi": + result=intValue; + break; + case "g": + result=intValue*1024; + break; + case "gi": + result=intValue*1000; + break; + default: + break; + } + } + + + return result; + } + + /* + * 内存转换为g并取整 + * unit 转换单位1000或1024 + * divCount 除的次数 k转要除以2次 + * add by wfz 2017-07-13 + */ + public static String memoryCalc(double mem,Integer unit,Integer divCount ) + { + double result=mem; + for(int i=1;i<=divCount;i++) + { + result=result/unit; + } + + NumberFormat nf = NumberFormat.getNumberInstance(); + + + // 保留两位小数 + nf.setMaximumFractionDigits(2); + + + // 如果不需要四舍五入,可以使用RoundingMode.DOWN + nf.setRoundingMode(RoundingMode.UP); + + + return nf.format(result); + + } + + public static Date long2Date( long time ) + { + Calendar c = Calendar.getInstance(); + c.setTimeInMillis( time ); + return c.getTime(); + } +} diff --git a/usm-core/src/main/java/com/blueland/core/util/StringUtils.java b/usm-core/src/main/java/com/blueland/core/util/StringUtils.java new file mode 100644 index 0000000..e7d1f59 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/core/util/StringUtils.java @@ -0,0 +1,354 @@ +package com.blueland.core.util; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.lang.Validator; +import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.ReUtil; +import cn.hutool.core.util.StrUtil; + +import java.util.*; + +/** + * 字符串工具类 + * + * @author ruoyi + */ +public class StringUtils extends org.apache.commons.lang3.StringUtils { + + /** + * 获取参数不为空值 + * + * @param value defaultValue 要判断的value + * @return value 返回值 + */ + public static T nvl(T value, T defaultValue) { + return ObjectUtil.defaultIfNull(value, defaultValue); + } + + /** + * 获取参数不为空值 + * + * @param str defaultValue 要判断的value + * @return value 返回值 + */ + public static String blankToDefault(String str, String defaultValue) { + return StrUtil.blankToDefault(str, defaultValue); + } + + /** + * * 判断一个Collection是否为空, 包含List,Set,Queue + * + * @param coll 要判断的Collection + * @return true:为空 false:非空 + */ + public static boolean isEmpty(Collection coll) { + return CollUtil.isEmpty(coll); + } + + /** + * * 判断一个Collection是否非空,包含List,Set,Queue + * + * @param coll 要判断的Collection + * @return true:非空 false:空 + */ + public static boolean isNotEmpty(Collection coll) { + return !isEmpty(coll); + } + + /** + * * 判断一个对象数组是否为空 + * + * @param objects 要判断的对象数组 + * * @return true:为空 false:非空 + */ + public static boolean isEmpty(Object[] objects) { + return ArrayUtil.isEmpty(objects); + } + + /** + * * 判断一个对象数组是否非空 + * + * @param objects 要判断的对象数组 + * @return true:非空 false:空 + */ + public static boolean isNotEmpty(Object[] objects) { + return !isEmpty(objects); + } + + /** + * * 判断一个对象是否为空 + * + * @param object 要判断的对象数组 + * * @return true:为空 false:非空 + */ + public static boolean isEmpty(Object object) { + return ObjectUtil.isEmpty(object); + } + + /** + * * 判断一个对象是否非空 + * + * @param object 要判断的对象数组 + * @return true:非空 false:空 + */ + public static boolean isNotEmpty(Object object) { + return !isEmpty(object); + } + + /** + * * 判断一个Map是否为空 + * + * @param map 要判断的Map + * @return true:为空 false:非空 + */ + public static boolean isEmpty(Map map) { + return MapUtil.isEmpty(map); + } + + /** + * * 判断一个Map是否为空 + * + * @param map 要判断的Map + * @return true:非空 false:空 + */ + public static boolean isNotEmpty(Map map) { + return !isEmpty(map); + } + + /** + * * 判断一个字符串是否为空串 + * + * @param str String + * @return true:为空 false:非空 + */ + public static boolean isEmpty(String str) { + return StrUtil.isEmpty(str); + } + + /** + * * 判断一个字符串是否为非空串 + * + * @param str String + * @return true:非空串 false:空串 + */ + public static boolean isNotEmpty(String str) { + return !isEmpty(str); + } + + /** + * * 判断一个对象是否为空 + * + * @param object Object + * @return true:为空 false:非空 + */ + public static boolean isNull(Object object) { + return ObjectUtil.isNull(object); + } + + /** + * * 判断一个对象是否非空 + * + * @param object Object + * @return true:非空 false:空 + */ + public static boolean isNotNull(Object object) { + return !isNull(object); + } + + /** + * * 判断一个对象是否是数组类型(Java基本型别的数组) + * + * @param object 对象 + * @return true:是数组 false:不是数组 + */ + public static boolean isArray(Object object) { + return ArrayUtil.isArray(object); + } + + /** + * 去空格 + */ + public static String trim(String str) { + return StrUtil.trim(str); + } + + /** + * 截取字符串 + * + * @param str 字符串 + * @param start 开始 + * @return 结果 + */ + public static String substring(final String str, int start) { + return substring(str, start, str.length()); + } + + /** + * 截取字符串 + * + * @param str 字符串 + * @param start 开始 + * @param end 结束 + * @return 结果 + */ + public static String substring(final String str, int start, int end) { + return StrUtil.sub(str, start, end); + } + + /** + * 格式化文本, {} 表示占位符
+ * 此方法只是简单将占位符 {} 按照顺序替换为参数
+ * 如果想输出 {} 使用 \\转义 { 即可,如果想输出 {} 之前的 \ 使用双转义符 \\\\ 即可
+ * 例:
+ * 通常使用:format("this is {} for {}", "a", "b") -> this is a for b
+ * 转义{}: format("this is \\{} for {}", "a", "b") -> this is \{} for a
+ * 转义\: format("this is \\\\{} for {}", "a", "b") -> this is \a for b
+ * + * @param template 文本模板,被替换的部分用 {} 表示 + * @param params 参数值 + * @return 格式化后的文本 + */ + public static String format(String template, Object... params) { + return StrUtil.format(template, params); + } + + /** + * 是否为http(s)://开头 + * + * @param link 链接 + * @return 结果 + */ + public static boolean ishttp(String link) { + return Validator.isUrl(link); + } + + /** + * 字符串转set + * + * @param str 字符串 + * @param sep 分隔符 + * @return set集合 + */ + public static Set str2Set(String str, String sep) { + return new HashSet<>(str2List(str, sep, true, false)); + } + + /** + * 字符串转list + * + * @param str 字符串 + * @param sep 分隔符 + * @param filterBlank 过滤纯空白 + * @param trim 去掉首尾空白 + * @return list集合 + */ + public static List str2List(String str, String sep, boolean filterBlank, boolean trim) { + List list = new ArrayList<>(); + if (isEmpty(str)) { + return list; + } + + // 过滤空白字符串 + if (filterBlank && isBlank(str)) { + return list; + } + String[] split = str.split(sep); + for (String string : split) { + if (filterBlank && isBlank(string)) { + continue; + } + if (trim) { + string = trim(string); + } + list.add(string); + } + + return list; + } + + /** + * 查找指定字符串是否包含指定字符串列表中的任意一个字符串同时串忽略大小写 + * + * @param cs 指定字符串 + * @param searchCharSequences 需要检查的字符串数组 + * @return 是否包含任意一个字符串 + */ + public static boolean containsAnyIgnoreCase(CharSequence cs, CharSequence... searchCharSequences) { + return StrUtil.containsAnyIgnoreCase(cs, searchCharSequences); + } + + /** + * 驼峰转下划线命名 + */ + public static String toUnderScoreCase(String str) { + return StrUtil.toUnderlineCase(str); + } + + /** + * 是否包含字符串 + * + * @param str 验证字符串 + * @param strs 字符串组 + * @return 包含返回true + */ + public static boolean inStringIgnoreCase(String str, String... strs) { + return StrUtil.equalsAnyIgnoreCase(str, strs); + } + + /** + * 将下划线大写方式命名的字符串转换为驼峰式。如果转换前的下划线大写方式命名的字符串为空,则返回空字符串。 例如:HELLO_WORLD->HelloWorld + * + * @param name 转换前的下划线大写方式命名的字符串 + * @return 转换后的驼峰式命名的字符串 + */ + public static String convertToCamelCase(String name) { + return StrUtil.upperFirst(StrUtil.toCamelCase(name)); + } + + /** + * 驼峰式命名法 例如:user_name->userName + */ + public static String toCamelCase(String s) { + return StrUtil.toCamelCase(s); + } + + /** + * 查找指定字符串是否匹配指定字符串列表中的任意一个字符串 + * + * @param str 指定字符串 + * @param strs 需要检查的字符串数组 + * @return 是否匹配 + */ + public static boolean matches(String str, List strs) { + if (isEmpty(str) || isEmpty(strs)) { + return false; + } + for (String pattern : strs) { + if (isMatch(pattern, str)) { + return true; + } + } + return false; + } + + /** + * 判断url是否与规则配置: + * ? 表示单个字符; + * * 表示一层路径内的任意字符串,不可跨层级; + * ** 表示任意层路径; + * + * @param pattern 匹配规则 + * @param url 需要匹配的url + * @return + */ + public static boolean isMatch(String pattern, String url) { + return ReUtil.isMatch(pattern, url); + } + + @SuppressWarnings("unchecked") + public static T cast(Object obj) { + return (T) obj; + } +} diff --git a/usm-core/src/main/java/com/blueland/core/util/UserAgentUtils.java b/usm-core/src/main/java/com/blueland/core/util/UserAgentUtils.java new file mode 100644 index 0000000..5e23582 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/core/util/UserAgentUtils.java @@ -0,0 +1,132 @@ +package com.blueland.core.util; + +//import nl.bitwalker.useragentutils.Browser; +//import nl.bitwalker.useragentutils.DeviceType; +//import nl.bitwalker.useragentutils.UserAgent; + +/** + * 用户代理字符串识别工具 + * @author ThinkGem + * @version 2014-6-13 + */ +public class UserAgentUtils { +// /** +// * 获取用户代理对象 +// * @param request +// * @return +// */ +// public static UserAgent getUserAgent(HttpServletRequest request){ +// return UserAgent.parseUserAgentString(request.getHeader("User-Agent")); +// } +// /** +// * 获取设备类型 +// * @param request +// * @return +// */ +// public static DeviceType getDeviceType(HttpServletRequest request){ +// return getUserAgent(request).getOperatingSystem().getDeviceType(); +// } +// +// /** +// * 是否是PC +// * @param request +// * @return +// */ +// public static boolean isComputer(HttpServletRequest request){ +// return DeviceType.COMPUTER.equals(getDeviceType(request)); +// } +// +// /** +// * 是否是手机 +// * @param request +// * @return +// */ +// public static boolean isMobile(HttpServletRequest request){ +// return DeviceType.MOBILE.equals(getDeviceType(request)); +// } +// +// /** +// * 是否是平板 +// * @param request +// * @return +// */ +// public static boolean isTablet(HttpServletRequest request){ +// return DeviceType.TABLET.equals(getDeviceType(request)); +// } +// +// /** +// * 是否是手机和平板 +// * @param request +// * @return +// */ +// public static boolean isMobileOrTablet(HttpServletRequest request){ +// DeviceType deviceType = getDeviceType(request); +// return DeviceType.MOBILE.equals(deviceType) || DeviceType.TABLET.equals(deviceType); +// } +// +// /** +// * 获取浏览类型 +// * @param request +// * @return +// */ +// public static Browser getBrowser(HttpServletRequest request){ +// return getUserAgent(request).getBrowser(); +// } +// +// /** +// * 是否IE版本是否小于等于IE8 +// * @param request +// * @return +// */ +// public static boolean isLteIE8(HttpServletRequest request){ +// Browser browser = getBrowser(request); +// return Browser.IE5.equals(browser) || Browser.IE6.equals(browser) +// || Browser.IE7.equals(browser) || Browser.IE8.equals(browser); +// } +// +// /** +// * 获取当前用户 +// * @return 取不到返回 new User() +// */ +// public static PubUserEntity getUser(){ +// PubUserEntity user = getUsers(); +// if (user != null) { +// return user; +// } +// // 如果没有登录,则返回实例化空的User对象。 +// return new PubUserEntity(); +// } +// +// /** +// * 获取当前用户 +// * +// * @return 取不到返回 new User() +// */ +// public static PubUserEntity getUsers() { +// return (PubUserEntity) getHttpServletRequest().getSession().getAttribute("iv-user"); +// } +// +// /** +// * 获得当前的Servlet请求对象 +// * @return +// */ +// public static HttpServletRequest getHttpServletRequest() { +// ServletRequestAttributes sa = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); +// if (sa == null) return null; +// return sa.getRequest(); +// } +// +// /** +// * 获取当前用户 +// * @return 取不到返回 new User() +// */ +// public static PubUserEntity getUserByNull(){ +// PubUserEntity user = getUser(); +// if (user != null) { +// return user; +// } +// // 如果没有登录,则返回null +// return null; +// } +// +} diff --git a/usm-core/src/main/java/com/blueland/core/util/UserUtils.java b/usm-core/src/main/java/com/blueland/core/util/UserUtils.java new file mode 100644 index 0000000..23b9415 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/core/util/UserUtils.java @@ -0,0 +1,124 @@ +package com.blueland.core.util; + +import com.blueland.bo.TucStaffEntity; +import com.blueland.model.TUcStaff; +import com.blueland.service.ITucStaffService; +import com.blueland.service.impl.TucStaffServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.annotation.PostConstruct; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.Optional; + +/** + * @Description 用户工具类 + * @Date 2021/7/22 1:30 下午 + * @Created BigTian + */ +@Component +public class UserUtils { + private static ITucStaffService tucStaffServiceImpl; + + @Autowired + private ITucStaffService tucStaffServiceImpl2; + + public static String getEmpno() { + return getUser().getStaffNum(); + } + + + @PostConstruct + public void init() { + tucStaffServiceImpl = tucStaffServiceImpl2; + } + + /** + * 获取iv-userId + * @return + */ + public static String getIvUser() { + HttpServletRequest request = getRequest(); + return Optional.ofNullable(request) + .map(el -> el.getHeader("iv-user")) + .orElse("luob"); + //.orElseThrow(() -> new BusinessException("请求头中没有iv-user")); + } + + /** + * 获取租户id + * @return + */ + // tenantid + public static String getTenantId() { + HttpServletRequest request = getRequest(); + return Optional.ofNullable(request) + .map(el -> el.getHeader("tenantid")) + .orElseThrow(() -> new RuntimeException("请求头中没有tenantid")); + } + + /** + * 获取租户id + * @return + */ + public static String getAppId() { + HttpServletRequest request = getRequest(); + return Optional.ofNullable(request) + .map(el -> el.getHeader("tenantid")) + .orElse(""); + } + + /** + * 获取岗位id + * @return + */ + // staffPostCode + public static String getPostCode() { + HttpServletRequest request = getRequest(); + return Optional.ofNullable(request) + .map(el -> el.getHeader("staffPostCode")) + .orElseThrow(() -> new RuntimeException("请求头中没有staffPostCode")); + } + + /** + * 获取当前登录人信息 + * @return + */ + public static TUcStaff getUser() { + TucStaffEntity model = new TucStaffEntity(); + model.setStaffNum(getIvUser()); + return tucStaffServiceImpl.get(model); + } + + /** + * 获取请求属性 + * + * @return + */ + public static ServletRequestAttributes getRequestAttr() { + return (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + } + + /** + * 获取request + */ + public static HttpServletRequest getRequest() { + ServletRequestAttributes attributes = getRequestAttr(); + return Optional.ofNullable(attributes). + map(ServletRequestAttributes::getRequest) + .orElse(null); + } + + /** + * 获取response + */ + public static HttpServletResponse getResponse() { + ServletRequestAttributes attributes = getRequestAttr(); + return attributes.getResponse(); + } + + +} diff --git a/usm-core/src/main/java/com/blueland/dao/AdminUserDao.java b/usm-core/src/main/java/com/blueland/dao/AdminUserDao.java new file mode 100644 index 0000000..a81473c --- /dev/null +++ b/usm-core/src/main/java/com/blueland/dao/AdminUserDao.java @@ -0,0 +1,48 @@ +package com.blueland.dao; + +import java.util.List; +import java.util.Map; + +import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.blueland.model.TPfAdminUser; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import com.blueland.bo.AdminUserEntity; + + +@Mapper +public interface AdminUserDao extends BaseMapper { + /** + * 根据条件查询查询tagAdminUser列表 + */ + @InterceptorIgnore(tenantLine = "true") + public List findAdminUserListByParams(@Param("bo") Map tagAdminUser); + + /** + * 通过bizId 删除数据 + * @param bizId + * @return + */ + public int deleteAdminUserByBizId(String bizId); + + /** + * 批量插入 + * @param list + * @return + */ + public int insertBatchAdminUser(List list); + + public int batchDeleteByAppId(String[] appIds); + + @InterceptorIgnore(tenantLine = "true") + public List findAdminOrgListByParams(@Param("bo")Map params); + + public AdminUserEntity getByAppidAndUsercode(@Param(value="appId")String appId, @Param(value="userCode")String userCode); + + List findList(@Param("bo") AdminUserEntity entity); + + Page findPage(@Param("page") Page page,@Param("bo") AdminUserEntity entity); +} diff --git a/usm-core/src/main/java/com/blueland/dao/AppDao.java b/usm-core/src/main/java/com/blueland/dao/AppDao.java new file mode 100644 index 0000000..4dab715 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/dao/AppDao.java @@ -0,0 +1,19 @@ +package com.blueland.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Mapper; + +import com.blueland.bo.AppEntity; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + + +@Mapper +public interface AppDao extends BaseMapper { + + List findList(@Param("bo") AppEntity bo); + + Page findPage(@Param("page") Page page,@Param("bo") AppEntity entity); +} diff --git a/usm-core/src/main/java/com/blueland/dao/AppDatabaseDao.java b/usm-core/src/main/java/com/blueland/dao/AppDatabaseDao.java new file mode 100644 index 0000000..70b4834 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/dao/AppDatabaseDao.java @@ -0,0 +1,30 @@ +package com.blueland.dao; + +import java.util.List; +import java.util.Map; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.blueland.model.TPfApplicationDb; +import org.apache.ibatis.annotations.Mapper; + +import com.blueland.bo.AppDatabaseEntity; +import org.apache.ibatis.annotations.Param; + + +@Mapper +public interface AppDatabaseDao extends BaseMapper { + /** + * 通过appId 删除数据 + */ + int deleteAppDatabaseByAppId(String appId); + + AppDatabaseEntity findList(@Param("bo") Map params); + + int batchDeleteByAppId(String[] appIds); + + List findListNew(@Param("bo") AppDatabaseEntity bo); + + Page findPage(@Param("page") Page page, @Param("bo") AppDatabaseEntity bo); + +} diff --git a/usm-core/src/main/java/com/blueland/dao/ApplicationDao.java b/usm-core/src/main/java/com/blueland/dao/ApplicationDao.java new file mode 100644 index 0000000..bed5eb0 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/dao/ApplicationDao.java @@ -0,0 +1,37 @@ +package com.blueland.dao; + +import java.util.List; +import java.util.Map; + +import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.blueland.model.TPfApplication; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import com.blueland.bo.ApplicationEntity; + + +@Mapper +@InterceptorIgnore(tenantLine = "true") +public interface ApplicationDao extends BaseMapper { + /** + * 根据条件查询查询tagApplication列表 + */ + List findApplicationListByParams(@Param("bo") Map tagApplication); + + Page findApplicationPageByParams(@Param("page") Page page, @Param("bo") Map tagApplication); + + Integer batchDelete(String[] appIds); + + //应用关联模块所有数据 + List> appLinkModule(); + + //获取用户所有有权限的应用 + List findApplicationListByUser(@Param(value = "userId") String userId); + + List findList(@Param("bo") ApplicationEntity entity); + + Page findPage(@Param("page")Page page, @Param("bo") ApplicationEntity entity); +} diff --git a/usm-core/src/main/java/com/blueland/dao/AreaDao.java b/usm-core/src/main/java/com/blueland/dao/AreaDao.java new file mode 100644 index 0000000..c6e6010 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/dao/AreaDao.java @@ -0,0 +1,39 @@ +package com.blueland.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.blueland.bo.AreaEntity; +import com.blueland.model.TArea; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + + +@Mapper +public interface AreaDao extends BaseMapper { + + /*根据条件查询列表*/ + List getList(@Param("bo") Map area); + + Page findPage(@Param("page")Page page, @Param("bo") Map area); + + AreaEntity getbyid(String id); + + int updateArea(AreaEntity model); + + List queryArea(); + + int insetArea(AreaEntity areaEntity); + + void deleteArea(String id); + + //查询不含顶级的所有数据 + List queryall(); + + void saveBatch(@Param("list")List list); + + //查询所有数据 + List selectList(); +} diff --git a/usm-core/src/main/java/com/blueland/dao/AttachmentDao.java b/usm-core/src/main/java/com/blueland/dao/AttachmentDao.java new file mode 100644 index 0000000..22e102c --- /dev/null +++ b/usm-core/src/main/java/com/blueland/dao/AttachmentDao.java @@ -0,0 +1,30 @@ +package com.blueland.dao; + +/** + * @author 代码自动生成工具 + * @version 1.0 + * @since + */ + +import java.util.*; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.blueland.bo.*; + +import com.blueland.model.TPfAttachment; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + + +@Mapper +public interface AttachmentDao extends BaseMapper { + + void updateAttachment(AttachmentEntity atta); + + List findPageList(@Param("bo") AttachmentEntity attachmentEntity); + + Page findPage(@Param("page") Page page, @Param("bo")AttachmentEntity attachmentEntity); + + List findList(@Param("bo")AttachmentEntity attachmentEntity); +} diff --git a/usm-core/src/main/java/com/blueland/dao/AuthDao.java b/usm-core/src/main/java/com/blueland/dao/AuthDao.java new file mode 100644 index 0000000..5c03c3f --- /dev/null +++ b/usm-core/src/main/java/com/blueland/dao/AuthDao.java @@ -0,0 +1,33 @@ +package com.blueland.dao; + +import java.util.List; + +import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.blueland.model.TPfAuth; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import com.blueland.bo.AuthEntity; + + +@Mapper +public interface AuthDao extends BaseMapper { + + int findAuthByMenuIdRoleId(@Param("menuId")String menuId, @Param("roleId")String roleId); + + void deleteRole(@Param("roleId")String roleId, @Param("appId")String appId); + + List getListByRoleId(@Param("roleId")String roleId); + + List findList(@Param("bo") AuthEntity bo); + + Page findPage(@Param("page")Page page, @Param("bo") AuthEntity entity); + + @InterceptorIgnore(tenantLine = "true") + void deleteAuthByAppId(@Param("appId") String appId); + + @InterceptorIgnore(tenantLine = "true") + List findListByAppId(@Param("appId") String appId); +} diff --git a/usm-core/src/main/java/com/blueland/dao/DictDao.java b/usm-core/src/main/java/com/blueland/dao/DictDao.java new file mode 100644 index 0000000..3dd386d --- /dev/null +++ b/usm-core/src/main/java/com/blueland/dao/DictDao.java @@ -0,0 +1,87 @@ +package com.blueland.dao; + +/** + * @author 代码自动生成工具 + * @version 1.0 + * @since + */ + +import java.util.List; +import java.util.Map; + +import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.blueland.model.TPfDict; +import org.apache.ibatis.annotations.Mapper; + +import com.blueland.bo.DictEntity; +import org.apache.ibatis.annotations.Param; + + +@Mapper +public interface DictDao extends BaseMapper { + + /** + * 根据条件查询查询字典列表 + */ + List findDictPageListByParams(@Param("bo") Map dict); + + Page findDictPagePageByParams(@Param("page") Page page, @Param("bo") Map dict); + + /** + * 新增dict + * + * @param dict + * @return + */ + public int insertDict(DictEntity dict); + + /** + * 修改dict + * + * @param dict + * @return + */ + public int updateDict(DictEntity dict); + + /** + * 刪除dict + * + * @param id + * @return + */ + public int deleteDictById(String id); + + /** + * 刪除dict + * + * @param dictCode + * @return + */ + public int deleteDicts(String dictCode); + + @InterceptorIgnore(tenantLine = "true") + List getList(@Param("appId") String appId); + + @InterceptorIgnore(tenantLine = "true") + void deleteDictByAppId(@Param("appId")String appId); + + List getDictList(); + + List getDictListByCode(@Param("code") String code, @Param("parentCode") String parentCode); + + /** + * 根据ids获取字典 + * + * @param ids + * @return + */ + List findByIds(@Param("ids") String[] ids); + + List findDictPageListByAppId(@Param("appId") String appId); + + List findList(@Param("bo") DictEntity bo); + + Page findPage(@Param("page") Page page, @Param("bo") DictEntity entity); +} diff --git a/usm-core/src/main/java/com/blueland/dao/MenuDao.java b/usm-core/src/main/java/com/blueland/dao/MenuDao.java new file mode 100644 index 0000000..6fed27b --- /dev/null +++ b/usm-core/src/main/java/com/blueland/dao/MenuDao.java @@ -0,0 +1,99 @@ +package com.blueland.dao; + +/** + * @author 代码自动生成工具 + * @version 1.0 + * @since + */ + +import java.util.*; + +import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.blueland.bo.*; + +import com.blueland.model.TPfMenu; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + + + +@Mapper +public interface MenuDao extends BaseMapper { + + /** + * 查询所有数据列表 + * @param appId + * @param parentId + * @return + * 根据appId获取菜单 + */ + public List findAppIdMenuList(@Param("appId") String appId, @Param("parentId") String parentId); + + public List getMenu(@Param("appId")String appId,@Param("userId") String userId,@Param("menuType") String menuType, @Param("menuId")String menuId); + + public List getMenuIsOpenStatus(String appId); + + public List getMenuAll(@Param("appId")String appId, @Param("menuName")String menuName, @Param("parentName")String parentName,@Param("menuType")String menuType); + + public List getMenuTop(@Param("appId")String appId, @Param("menuName")String menuName, @Param("parentName")String parentName,@Param("menuType")String menuType); + + public List getMenuNoTop(@Param("appId")String appId, @Param("menuName")String menuName, @Param("parentName")String parentName,@Param("menuType")String menuType); + + public List> findListByPid(String pid); + + public List getParent(@Param("menuId")String menuId,@Param("appId") String appId); + + public List listRoleMenu(String appId); + + public List getParentRole(@Param("menuId")String menuId,@Param("appId") String appId,@Param("roleId") String roleId); + + public int getMenuLevel(String menuParentId); + + public List getMenuCode(@Param("menuCode")String menuCode, @Param("userId")String userId,@Param("appId")String appId,@Param("menuType")String menuType); + + public List getButtonByMenuCode(@Param("menuCode")String menuCode); + + public List getMenuByRoleIdAndAppId(@Param("appId") String appId,@Param("roleId") String roleId); + + /** + * 据staffcode和appid查询改员工的一级菜单、操作权限目录 + * @param appId + * @param staffCode + * @return + * @author hpp + * @Time 2021年5月18日 上午9:47:59 + */ + public List getMenuTopByStaffCode(@Param("appId") String appId, @Param("staffCode") String staffCode); + + /** + * 查看该员工所拥有的下家菜单、操作权限 + * @param menuId + * @param appId + * @param staffCode + * @return + * @author hpp + * @Time 2021年5月18日 上午10:29:10 + */ + public List getParentByStaffCode(@Param("menuId")String menuId, @Param("appId")String appId, @Param("staffCode")String staffCode); + + + @InterceptorIgnore(tenantLine = "true") + List findListRoleMenu(@Param("appId") String appId); + + @InterceptorIgnore(tenantLine = "true") + List findMenuList(@Param("appId") String appId); + + List findList( @Param("bo") MenuEntity bo); + + Page findPage(@Param("page")Page page, @Param("bo") MenuEntity entity); + // 6.0.0 + + List getMenuByPostCode(@Param("appId")String appId,@Param("postCode") String postCode,@Param("menuType") String menuType, @Param("menuId")String menuId); + + List getMenuBuCode(@Param("menuCode")String menuCode, @Param("postCode")String postCode,@Param("appId")String appId,@Param("menuType")String menuType); + + @InterceptorIgnore(tenantLine = "true") + void deleteMenuByAppId(@Param("appId") String appId); +} diff --git a/usm-core/src/main/java/com/blueland/dao/ModuleDao.java b/usm-core/src/main/java/com/blueland/dao/ModuleDao.java new file mode 100644 index 0000000..6b4bf3b --- /dev/null +++ b/usm-core/src/main/java/com/blueland/dao/ModuleDao.java @@ -0,0 +1,23 @@ +package com.blueland.dao; + +import java.util.List; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.blueland.model.TPfModule; +import org.apache.ibatis.annotations.Mapper; + +import com.blueland.bo.ModuleEntity; +import org.apache.ibatis.annotations.Param; + + +@Mapper +public interface ModuleDao extends BaseMapper { + + //根据appId查询模块列表 + List findModuleListByAppId(String appId); + + List findList(@Param("bo") ModuleEntity bo); + + Page findPage(@Param("page") Page page, @Param("bo") ModuleEntity entity); +} diff --git a/usm-core/src/main/java/com/blueland/dao/OrgDao.java b/usm-core/src/main/java/com/blueland/dao/OrgDao.java new file mode 100644 index 0000000..ad28666 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/dao/OrgDao.java @@ -0,0 +1,27 @@ +package com.blueland.dao; + +/** + * @author 代码自动生成工具 + * @version 1.0 + * @since + */ + +import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.blueland.bo.Org; +import com.blueland.bo.TreeEntity; +import com.blueland.model.TUcOrg; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@InterceptorIgnore(tenantLine = "true") +@Mapper +public interface OrgDao extends BaseMapper { + + + +} diff --git a/usm-core/src/main/java/com/blueland/dao/ParameterDao.java b/usm-core/src/main/java/com/blueland/dao/ParameterDao.java new file mode 100644 index 0000000..cb8336c --- /dev/null +++ b/usm-core/src/main/java/com/blueland/dao/ParameterDao.java @@ -0,0 +1,46 @@ +package com.blueland.dao; + +import java.util.List; +import java.util.Map; + +import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.blueland.model.TPfParameter; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import com.blueland.bo.ParameterEntity; +import com.blueland.bo.RoleEntity; + + +@Mapper +public interface ParameterDao extends BaseMapper { + + List findPageList(@Param("bo") Map queryParams); + + Page findPageListNew(@Param("page") Page page, @Param("bo") Map queryParams); + + List parameterListPage(@Param("bo") Map queryParams); + + Page parameterPage(@Param("page") Page page, @Param("bo") Map queryParams); + + //20190724 add + @InterceptorIgnore(tenantLine = "true") + ParameterEntity getByKey(@Param(value="key")String key); + + @InterceptorIgnore(tenantLine = "true") + String getValueByKey(@Param("key") String key); + /** + * 获取对象 + * @param obj + * @return + */ + ParameterEntity getObj(@Param("bo") ParameterEntity obj); + + @InterceptorIgnore(tenantLine = "true") + List findList(@Param("bo") ParameterEntity bo); + + Page findPage(@Param("page")Page page, @Param("bo") ParameterEntity entity); + +} diff --git a/usm-core/src/main/java/com/blueland/dao/PubOrgDao.java b/usm-core/src/main/java/com/blueland/dao/PubOrgDao.java new file mode 100644 index 0000000..9bd09d7 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/dao/PubOrgDao.java @@ -0,0 +1,28 @@ +package com.blueland.dao; + +/** + * @author 代码自动生成工具 + * @version 1.0 + * @since + */ + +import java.util.*; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Mapper; +import com.blueland.bo.Org; +import com.blueland.bo.PubOrgEntity; +import org.apache.ibatis.annotations.Param; + + +@Mapper +public interface PubOrgDao extends BaseMapper { + + List getListNoPage(@Param("bo") Org org); + + List findList(@Param("bo") PubOrgEntity bo); + + Page findPage(@Param("page") Page page, @Param("bo") PubOrgEntity entity); + +} diff --git a/usm-core/src/main/java/com/blueland/dao/PubUserDao.java b/usm-core/src/main/java/com/blueland/dao/PubUserDao.java new file mode 100644 index 0000000..c9d2fca --- /dev/null +++ b/usm-core/src/main/java/com/blueland/dao/PubUserDao.java @@ -0,0 +1,30 @@ +package com.blueland.dao; + +/** + * @author 代码自动生成工具 + * @version 1.0 + * @since + */ + +import java.util.*; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.blueland.model.TPubUser; +import org.apache.ibatis.annotations.Mapper; +import com.blueland.bo.PubUserEntity; +import com.blueland.bo.RoleUserRest; +import org.apache.ibatis.annotations.Param; + + +@Mapper +public interface PubUserDao extends BaseMapper { + + List getAppRoleUser(@Param("bo")Map params); + + Page getAppRoleUserPage(@Param("page") Page page, @Param("bo")Map params); + + List findList(@Param("bo")PubUserEntity bo); + + Page findPage(@Param("page") Page page, @Param("bo")PubUserEntity entity); +} diff --git a/usm-core/src/main/java/com/blueland/dao/Role2userDao.java b/usm-core/src/main/java/com/blueland/dao/Role2userDao.java new file mode 100644 index 0000000..eb3e9d3 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/dao/Role2userDao.java @@ -0,0 +1,24 @@ +package com.blueland.dao; + +import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.blueland.bo.AppIdUserIdAppIdRoleIdDTO; +import com.blueland.bo.Role2userEntity; +import com.blueland.model.TPfRole2user; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +public interface Role2userDao extends BaseMapper { + + @InterceptorIgnore(tenantLine = "true") + List findListRoleId(@Param("appId") String appId); + + @InterceptorIgnore(tenantLine = "true") + void deleteByAppId(@Param("appId") String appId); + + @InterceptorIgnore(tenantLine = "true") + List selectListByAppId(@Param("appId") String appId); +} diff --git a/usm-core/src/main/java/com/blueland/dao/RoleDao.java b/usm-core/src/main/java/com/blueland/dao/RoleDao.java new file mode 100644 index 0000000..2a73259 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/dao/RoleDao.java @@ -0,0 +1,67 @@ +package com.blueland.dao; + +/** + * @author 代码自动生成工具 + * @version 1.0 + * @since + */ +import java.util.List; +import java.util.Map; + +import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.blueland.model.TPfRole; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import com.blueland.bo.Role2userEntity; +import com.blueland.bo.RoleEntity; + + +@Mapper +public interface RoleDao extends BaseMapper { + + List getAppRole(Map map); + + Page getAppRolePage(@Param("page") Page page, @Param("bo") Map map); + + void deleteRole(Map queryParams); + + List findRoleUserBy(Map map); + + List findRolesByUser(@Param("appId")String appId, @Param("userId")String userId); + + int findUserId(RoleEntity model, String userId); + + int findUserId(@Param("appId")String appId, @Param("roleId")String roleId,@Param("userId")String userId); + + void saveUser(Role2userEntity role2user); + + int deleteUserId(@Param("appId")String appId, @Param("roleId")String roleId,@Param("userId")String userId); + + int findAppidByRoleId(@Param("appId")String appId, @Param("roleId")String roleId); + + void deluser(@Param("roleId")String roleId, @Param("appId")String appId); + + List findRoleTenantidByUserid(@Param("userId")String userId); + + List findList(@Param("bo")RoleEntity bo); + + Page findPage(@Param("page") Page page,@Param("bo") RoleEntity entity); + + @InterceptorIgnore(tenantLine = "true") + List findRolesByPostCode(@Param("appId")String appId, @Param("postCode")String postCode); + + List findRoleAllByPostCode(@Param("postCode")String postCode); + + List findRoleUserByCode(@Param("appId")String appId, @Param("roleId")String roleId, @Param("postCode")String postCode); + + int deleteByPostCode(@Param("appId")String appId, @Param("roleId")String roleId,@Param("postCode")String postCode); + + @InterceptorIgnore(tenantLine = "true") + void deleteByAppId(@Param("appId") String appId); + + @InterceptorIgnore(tenantLine = "true") + List findListByAppId(@Param("appId")String appId); +} diff --git a/usm-core/src/main/java/com/blueland/dao/StaffDao.java b/usm-core/src/main/java/com/blueland/dao/StaffDao.java new file mode 100644 index 0000000..4d485cf --- /dev/null +++ b/usm-core/src/main/java/com/blueland/dao/StaffDao.java @@ -0,0 +1,27 @@ +package com.blueland.dao; + +/** + * @author 代码自动生成工具 + * @version 1.0 + * @since + */ + +import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.blueland.bo.RoleUserRest; +import com.blueland.bo.TreeEntity; +import com.blueland.bo.TucStaffEntity; +import com.blueland.model.TUcStaff; +import com.blueland.vo.StaffPostVO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@InterceptorIgnore(tenantLine = "true") +@Mapper +public interface StaffDao extends BaseMapper { + +} diff --git a/usm-core/src/main/java/com/blueland/dao/SysOplogDao.java b/usm-core/src/main/java/com/blueland/dao/SysOplogDao.java new file mode 100644 index 0000000..946d6bc --- /dev/null +++ b/usm-core/src/main/java/com/blueland/dao/SysOplogDao.java @@ -0,0 +1,30 @@ +package com.blueland.dao; + +import java.util.List; +import java.util.Map; + +import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.blueland.model.TPfSysOplog; +import org.apache.ibatis.annotations.Mapper; + +import com.blueland.bo.SysOplogEntity; +import org.apache.ibatis.annotations.Param; + + +@Mapper +public interface SysOplogDao extends BaseMapper { + + + /** + * 根据条件查询查询列表 + */ + List findSysOplogListByParams(@Param("bo")Map tagSysOplog); + + Page findSysOplogPageByParams(@Param("page") Page page, @Param("bo")Map tagSysOplog); + + List findList(@Param("bo")SysOplogEntity bo); + + Page findPage(@Param("page") Page page, @Param("bo")SysOplogEntity entity); +} diff --git a/usm-core/src/main/java/com/blueland/dao/SysPvlogDao.java b/usm-core/src/main/java/com/blueland/dao/SysPvlogDao.java new file mode 100644 index 0000000..6fecf19 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/dao/SysPvlogDao.java @@ -0,0 +1,29 @@ +package com.blueland.dao; + +import java.util.List; +import java.util.Map; + +import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.blueland.model.TPfSysPvlog; +import org.apache.ibatis.annotations.Mapper; + +import com.blueland.bo.SysPvlogEntity; +import org.apache.ibatis.annotations.Param; + +@Mapper +public interface SysPvlogDao extends BaseMapper { + + + /** + * 根据条件查询查询列表 + */ + List findSysPvlogListByParams(@Param("bo") Map tagSysPvlog); + + Page findSysPvlogPageByParams(@Param("page") Page page, @Param("bo") Map tagSysPvlog); + + List findList(@Param("bo") SysPvlogEntity bo); + + Page findPage(@Param("page") Page page, @Param("bo") SysPvlogEntity entity); +} diff --git a/usm-core/src/main/java/com/blueland/dao/SysTimetaskDao.java b/usm-core/src/main/java/com/blueland/dao/SysTimetaskDao.java new file mode 100644 index 0000000..9698310 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/dao/SysTimetaskDao.java @@ -0,0 +1,26 @@ +package com.blueland.dao; + +import java.util.List; +import java.util.Map; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.blueland.bo.SysTimetaskEntity; +import com.blueland.model.TPfSysTimetask; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +@Mapper +public interface SysTimetaskDao extends BaseMapper { + + /** + * 根据条件查询查询列表 + */ + List findSysTimetaskListByParams(@Param("bo") Map tagSysTimetask); + + Page findSysTimetaskPageByParams(@Param("page") Page page, @Param("bo") Map tagSysTimetask); + + List findList(@Param("bo")SysTimetaskEntity bo); + + Page findPage(@Param("page") Page page, @Param("bo") SysTimetaskEntity entity); +} diff --git a/usm-core/src/main/java/com/blueland/dao/TucOrgDao.java b/usm-core/src/main/java/com/blueland/dao/TucOrgDao.java new file mode 100644 index 0000000..11b7f71 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/dao/TucOrgDao.java @@ -0,0 +1,85 @@ +package com.blueland.dao; + +/** + * @author 代码自动生成工具 + * @version 1.0 + * @since + */ + +import java.util.*; + +import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.blueland.bo.*; + + +import com.blueland.model.TUcOrg; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + + +@Mapper +public interface TucOrgDao extends BaseMapper { + + List getListNoPage(@Param("bo") Org entity); + + Page getOrgPage(@Param("page") Page page, @Param("bo") Org org); + + List getOrgChildLst(@Param("bo") Org org); + + Page getOrgChildPage(@Param("page") Page page, @Param("bo") Org org); + + List findOrgIdList(@Param("bo") Org org); + + List searchOrg(@Param("bo") Org org); + + List getChildLstByOrgId(@Param(value = "orgId") String orgId); + + /** + * 根据组织类型查询所有组织 + * @param startDeptcode + * @param + * @return + * @author hpp + * @Time 2020年12月7日 上午10:34:29 + */ + List> getOrgByWorktype(@Param(value = "startDeptcode") String startDeptcode, @Param(value = "orgworktype") String orgworktype); + + /** + * 只查询部门code和名称 + * @return + */ + @InterceptorIgnore(tenantLine = "true") + List list(@Param("appId") String appId); + + Org getOne(@Param("bo") Org org); + + @InterceptorIgnore(tenantLine = "true") + Org getByAppId(@Param("bo") Org org); + + @InterceptorIgnore(tenantLine = "true") + List findList(@Param("bo") Org org); + + Page findPage(@Param("page") Page page, @Param("bo") Org org); + + @InterceptorIgnore(tenantLine = "true") + Integer countOrgById(@Param("id") String id, @Param("appId") String appId); + + @InterceptorIgnore(tenantLine = "true") + void deleteOrgByAppId(@Param("appId") String appId); + + String getTopOrgId(); + + String getSellOrgId(@Param("deptCode") String deptCode); + + @InterceptorIgnore(tenantLine = "true") + String getAppIdByParentId(@Param("parentId") String parentId); + + @InterceptorIgnore(tenantLine = "true") + String getOrgIdByAppId(@Param("appId") String appId, @Param("deptId") String deptId); + + Org getByOgId(@Param("orgId") String orgId); + + Org getByOgIdAndType(@Param("orgId") String orgId, @Param("type") String type); +} diff --git a/usm-core/src/main/java/com/blueland/dao/TucStaffDao.java b/usm-core/src/main/java/com/blueland/dao/TucStaffDao.java new file mode 100644 index 0000000..fbf737f --- /dev/null +++ b/usm-core/src/main/java/com/blueland/dao/TucStaffDao.java @@ -0,0 +1,140 @@ +package com.blueland.dao; + +/** + * @author 代码自动生成工具 + * @version 1.0 + * @since + */ + +import java.util.*; + +import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.blueland.bo.TreeEntity; +import com.blueland.model.TUcStaff; +import com.blueland.vo.StaffNumVO; +import com.blueland.vo.StaffPostVO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import com.blueland.bo.RoleUserRest; +import com.blueland.bo.TucStaffEntity; + + +@Mapper +public interface TucStaffDao extends BaseMapper { + + List getStaffInfoByOrgTop(@Param("bo")TucStaffEntity staff); + + Page getStaffInfoByOrgTopPage(@Param("page") Page page, @Param("bo")TucStaffEntity staff); + + List getSubStaffs(@Param("bo")TucStaffEntity entity); + + Page getSubStaffsPage(@Param("page")Page page, @Param("bo")TucStaffEntity entity); + + void deleteByCode(String staffCode); + + void updateByCode(TucStaffEntity model); + + @InterceptorIgnore(tenantLine = "true") + void updateByNum(TucStaffEntity model); + + List getAppRoleUser(@Param("bo")Map params); + + Page getAppRoleUserPage(@Param("page") Page page, @Param("bo")Map params); + + Page getAppRoleUserPage2(@Param("page") Page page, @Param("bo")Map params); + + //20200728 add + List getAppRoleUserList(@Param("bo")Map params); + + List searchUser(@Param("bo")TucStaffEntity tucStaffEntity); + + List searchUser4deptId(@Param("bo")TucStaffEntity tucStaffEntity); + + List getStaffByOrgs(@Param("bo")TucStaffEntity entity); + + Page getStaffByOrgsPage(@Param("page") Page page, @Param("bo")TucStaffEntity entity); + + /** + * 根据顶级orgId条件查询人员 + * @param tucStaffEntity + * @return + */ + @InterceptorIgnore(tenantLine = "true") + List findListByName(@Param("bo")TucStaffEntity tucStaffEntity); + + //20200907 add + TucStaffEntity getByStaffCode(String staffCode); + + /** + * 根据 + * @param + * @return + * @author hpp + * @Time 2020年10月27日 下午5:55:10 + */ + List getByStaffcodes(@Param("staffcodes") List staffcodes); + + @InterceptorIgnore(tenantLine = "true") + void updateDeptnameByDeptid(@Param("deptname") String deptname, @Param("deptcode") String deptcode); + + /** + * 根据设备码来清空设备码 + * @param staffPhoneBak + */ + void updateByStaffPhoneBak(@Param("staffPhoneBak") String staffPhoneBak); + + /** + * 根据直接上级员工号查询直接上级 + * @param staffFax + * @return + */ + TucStaffEntity getByStaffFax(@Param("staffFax") String staffFax); + + + List getStaffList(@Param("name") String name); + + List getListByCodes(@Param("codes") List codes); + + List findListStaffCodeStaffNum(); + + @InterceptorIgnore(tenantLine = "true") + List findListQY(@Param("appId") String appId); + + @InterceptorIgnore(tenantLine = "true") + List findList(@Param("bo") TucStaffEntity bo); + + @InterceptorIgnore(tenantLine = "true") + List findListByRoleAndStaffCode(@Param("codes") List codes); + + Page findPage(@Param("page")Page page, @Param("bo")TucStaffEntity bo); + + @InterceptorIgnore(tenantLine = "true") + List findStaffPostList(@Param("staffCode") String staffCode); + + @InterceptorIgnore(tenantLine = "true") + List findStaffPostList2(@Param("staffCode") String staffCode); + + @InterceptorIgnore(tenantLine = "true") + void deleteByPostCode(@Param("postCode") String postCode); + + @InterceptorIgnore(tenantLine = "true") + TucStaffEntity getByPostCode(@Param("postCode") String postCode, @Param("appId") String appId); + + @InterceptorIgnore(tenantLine = "true") + TucStaffEntity selectStaffByNumAndDept(@Param("staffNum") String staffNum, @Param("deptId") String deptId); + + @InterceptorIgnore(tenantLine = "true") + TucStaffEntity selectStaffByNum(@Param("staffNum")String staffNum); + + @InterceptorIgnore(tenantLine = "true") + Integer countStaff(@Param("id") String id, @Param("appId") String appId); + + @InterceptorIgnore(tenantLine = "true") + Integer countStaffByNum(@Param("num") String num, @Param("appId") String appId); + + @InterceptorIgnore(tenantLine = "true") + void deleteStaffByAppId(@Param("appId") String appId); +} diff --git a/usm-core/src/main/java/com/blueland/enums/Version.java b/usm-core/src/main/java/com/blueland/enums/Version.java new file mode 100644 index 0000000..7a839d8 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/enums/Version.java @@ -0,0 +1,25 @@ +package com.blueland.enums; + +/** + * @program: crm + * @description: crm版本管理 + * @author: bigtian + * @create: 2022-01-04 10:46 + */ +public enum Version { + SIX("v6.0.0"); + private String version; + + Version(String version) { + this.version = version; + } + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + +} diff --git a/usm-core/src/main/java/com/blueland/handler/GlobalExceptionHandler.java b/usm-core/src/main/java/com/blueland/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000..cb42377 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/handler/GlobalExceptionHandler.java @@ -0,0 +1,81 @@ +package com.blueland.handler; + +import cn.hutool.core.exceptions.ValidateException; +import com.blueland.result.R; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +import javax.servlet.http.HttpServletRequest; + +import static com.blueland.constant.ResponseConstant.*; + +/** + * @author BigTian + * @Description 异常统一处理类 + * @Date 2021/10/20 10:45 上午 + */ +@Slf4j +@RestControllerAdvice +public class GlobalExceptionHandler { + + public static final String ERROR_MESSAGE = "访问路径:{},错误信息:{},错误行数:{}"; + + + /** + * 处理属性检验异常 + * + * @return + */ + @ExceptionHandler(ArithmeticException.class) + public R arithmeticExceptionHandler(HttpServletRequest request, ArithmeticException e) { + log.error(ERROR_MESSAGE, request.getRequestURI(), e.getMessage(), e.getStackTrace()[0]); + e.printStackTrace(); + return R.fail(RESULT_SERVER_ERR_CODE, e.getMessage()); + } + + /** + * 处理运行时异常 + * + * @return + */ + @ExceptionHandler(RuntimeException.class) + public R arithmeticExceptionHandler(HttpServletRequest request, RuntimeException e) { + log.error(ERROR_MESSAGE, request.getRequestURI(), e.getMessage(), e.getStackTrace()[0]); + e.printStackTrace(); + return R.fail(RESULT_SERVER_ERR_CODE, e.getMessage()); + } + + /** + * 空指针异常 + * @param request + * @param e + * @return + */ + @ExceptionHandler(NullPointerException.class) + public R nullPointerException(HttpServletRequest request, NullPointerException e) { + log.error(ERROR_MESSAGE, request.getRequestURI(), e.getMessage(), e.getStackTrace()[0]); + e.printStackTrace(); + return R.fail(RESULT_SERVER_ERR_CODE, "操作失败"); + } + + /** + * 有效验证异常 + * @param request + * @param e + * @return + */ + @ExceptionHandler(ValidateException.class) + public R validateException(HttpServletRequest request, ValidateException e) { + log.error(ERROR_MESSAGE, request.getRequestURI(), e.getMessage(), e.getStackTrace()[0]); + e.printStackTrace(); + return R.fail(RESULT_SERVER_ERR_CODE, "会话过期,请重新登录"); + } + + @ExceptionHandler(Exception.class) + public R exception(HttpServletRequest request, Exception e) { + log.error(ERROR_MESSAGE, request.getRequestURI(), e.getMessage(), e.getStackTrace()[0]); + e.printStackTrace(); + return R.fail(RESULT_SERVER_ERR_CODE, e.getMessage()); + } +} diff --git a/usm-core/src/main/java/com/blueland/mybatisplus/CommonTenantHandler.java b/usm-core/src/main/java/com/blueland/mybatisplus/CommonTenantHandler.java new file mode 100644 index 0000000..1f11a26 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/mybatisplus/CommonTenantHandler.java @@ -0,0 +1,55 @@ +package com.blueland.mybatisplus; + +import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler; +import com.blueland.core.util.UserUtils; +import lombok.AllArgsConstructor; +import net.sf.jsqlparser.expression.Expression; +import net.sf.jsqlparser.expression.StringValue; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + + +@AllArgsConstructor +public class CommonTenantHandler implements TenantLineHandler { + + /** + * 获取租户ID + * + * @return 租户ID + */ + @Override + public Expression getTenantId() { + try{ + return new StringValue(UserUtils.getTenantId()); + } + catch(Exception ex){ + return null; + } + } + + /** + * 获取租户字段名称 + * + * @return 租户字段名称 + */ + @Override + public String getTenantIdColumn() { + return TenantProperties.getInstance().getColumn(); + } + + /** + * 过滤租户表 + * + * @param tableName 表名 + * @return 是否进行过滤 返回true 表示不进行多租户处理 + */ + @Override + public boolean ignoreTable(String tableName) { + if (!TenantProperties.getInstance().getEnable()){ + return true; + } + return TenantProperties.getInstance().getIgnoreTables().contains(tableName); + } +} diff --git a/usm-core/src/main/java/com/blueland/mybatisplus/CreateAndUpdateMetaObjectHandler.java b/usm-core/src/main/java/com/blueland/mybatisplus/CreateAndUpdateMetaObjectHandler.java new file mode 100644 index 0000000..7d45f9e --- /dev/null +++ b/usm-core/src/main/java/com/blueland/mybatisplus/CreateAndUpdateMetaObjectHandler.java @@ -0,0 +1,44 @@ +package com.blueland.mybatisplus; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; +import com.blueland.core.util.UserUtils; +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.reflection.MetaObject; + +import java.util.Date; + +/** + * MP注入处理器 + * + * @author Lion Li + * @date 2021/4/25 + */ +@Slf4j +public class CreateAndUpdateMetaObjectHandler implements MetaObjectHandler { + + @Override + public void insertFill(MetaObject metaObject) { + try { + //根据属性名字设置要填充的值 + if (metaObject.hasGetter("appId") && ObjectUtil.isEmpty(metaObject.getValue("appId"))) { + this.setFieldValByName("appId", UserUtils.getAppId(), metaObject); + } + } catch (Exception e) { + throw new RuntimeException("自动注入异常 => " + e.getMessage()); + } + updateFill(metaObject); + } + + @Override + public void updateFill(MetaObject metaObject) { + try { + //根据属性名字设置要填充的值 + if (metaObject.hasGetter("appId") && ObjectUtil.isEmpty(metaObject.getValue("appId"))) { + this.setFieldValByName("appId", UserUtils.getAppId(), metaObject); + } + } catch (Exception e) { + throw new RuntimeException("自动注入异常 => " + e.getMessage()); + } + } +} diff --git a/usm-core/src/main/java/com/blueland/mybatisplus/MybatisPlusConfig.java b/usm-core/src/main/java/com/blueland/mybatisplus/MybatisPlusConfig.java new file mode 100644 index 0000000..2554cc0 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/mybatisplus/MybatisPlusConfig.java @@ -0,0 +1,95 @@ +package com.blueland.mybatisplus; + +import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler; +import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +/** + * mybatis-plus配置类(下方注释有插件介绍) + * + * @author Lion Li + */ +@EnableTransactionManagement +@Configuration +@MapperScan("com.blueland.dao") +public class MybatisPlusConfig { + + @Bean + public MybatisPlusInterceptor mybatisPlusInterceptor() { + MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); + // 多租户拦截插件 必须放在最前面,否则分页将不会根据租户过滤 + interceptor.addInnerInterceptor(tenantLineInnerInterceptor()); + // 分页插件 + interceptor.addInnerInterceptor(paginationInnerInterceptor()); + // 乐观锁插件 + interceptor.addInnerInterceptor(optimisticLockerInnerInterceptor()); + return interceptor; + } + + /** + * 分页插件,自动识别数据库类型 + */ + public PaginationInnerInterceptor paginationInnerInterceptor() { + PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(); + // 设置最大单页限制数量,默认 500 条,-1 不受限制 + paginationInnerInterceptor.setMaxLimit(-1L); + // 分页合理化 + paginationInnerInterceptor.setOverflow(true); + return paginationInnerInterceptor; + } + + /** + * 多租户拦截插件 + * @return + */ + public TenantLineInnerInterceptor tenantLineInnerInterceptor() { + TenantLineInnerInterceptor tenantLineInnerInterceptor = new TenantLineInnerInterceptor(); + TenantLineHandler myTenantLineHandler = new CommonTenantHandler(); + tenantLineInnerInterceptor.setTenantLineHandler(myTenantLineHandler); + return tenantLineInnerInterceptor; + } + + /** + * 乐观锁插件 + */ + public OptimisticLockerInnerInterceptor optimisticLockerInnerInterceptor() { + return new OptimisticLockerInnerInterceptor(); + } + + /** + * 元对象字段填充控制器 + */ + @Bean + public MetaObjectHandler metaObjectHandler() { + return new CreateAndUpdateMetaObjectHandler(); + } + + + /** + * PaginationInnerInterceptor 分页插件,自动识别数据库类型 + * https://baomidou.com/guide/interceptor-pagination.html + * OptimisticLockerInnerInterceptor 乐观锁插件 + * https://baomidou.com/guide/interceptor-optimistic-locker.html + * MetaObjectHandler 元对象字段填充控制器 + * https://baomidou.com/guide/auto-fill-metainfo.html + * ISqlInjector sql注入器 + * https://baomidou.com/guide/sql-injector.html + * BlockAttackInnerInterceptor 如果是对全表的删除或更新操作,就会终止该操作 + * https://baomidou.com/guide/interceptor-block-attack.html + * IllegalSQLInnerInterceptor sql性能规范插件(垃圾SQL拦截) + * IdentifierGenerator 自定义主键策略 + * https://baomidou.com/guide/id-generator.html + * TenantLineInnerInterceptor 多租户插件 + * https://baomidou.com/guide/interceptor-tenant-line.html + * DynamicTableNameInnerInterceptor 动态表名插件 + * https://baomidou.com/guide/interceptor-dynamic-table-name.html + */ + +} diff --git a/usm-core/src/main/java/com/blueland/mybatisplus/TenantProperties.java b/usm-core/src/main/java/com/blueland/mybatisplus/TenantProperties.java new file mode 100644 index 0000000..a3ed5e5 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/mybatisplus/TenantProperties.java @@ -0,0 +1,41 @@ +package com.blueland.mybatisplus; + +import lombok.Data; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + + +@Data +public class TenantProperties { + + private static TenantProperties instance; + + private Boolean enable = true; + + private String defaultTenantId = ""; + + /** + * 多租户字段名称 + */ + private String column = "app_id"; + + /** + * 多租户系统数据表 + */ + private List ignoreTables = new ArrayList<>(); + + + private TenantProperties() { + } + + public static TenantProperties getInstance() { + if (instance == null) { + instance = new TenantProperties(); + instance.getIgnoreTables().addAll(Arrays.asList("t_area","t_pf_application","t_pf_application_db", + "t_pf_attachment","t_pf_data_model_field","t_pf_group","t_pf_group2user","t_pf_operat","t_pf_portal_area")); + } + return instance; + } +} diff --git a/usm-core/src/main/java/com/blueland/result/R.java b/usm-core/src/main/java/com/blueland/result/R.java new file mode 100644 index 0000000..a566ac1 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/result/R.java @@ -0,0 +1,102 @@ +package com.blueland.result; + +import java.io.Serializable; + +/** + * 响应信息主体 + * + * @author sweet + */ +public class R implements Serializable +{ + private static final long serialVersionUID = 1L; + + /** 成功 */ + public static final int SUCCESS = 200; + + /** 失败 */ + public static final int FAIL = 500; + + private String resultMsg; + private int resultCode; + private T result; + + public static R ok() + { + return restResult(null, SUCCESS, "成功"); + } + + public static R ok(T data) + { + return restResult(data, SUCCESS, null); + } + + public static R ok(T data, String msg) + { + return restResult(data, SUCCESS, msg); + } + + public static R fail() + { + return restResult(null, FAIL, null); + } + + public static R fail(String msg) + { + return restResult(null, FAIL, msg); + } + + public static R fail(T data) + { + return restResult(data, FAIL, null); + } + + public static R fail(T data, String msg) + { + return restResult(data, FAIL, msg); + } + + public static R fail(int code, String msg) + { + return restResult(null, code, msg); + } + + private static R restResult(T result, int resultCode, String resultMsg) + { + R apiResult = new R<>(); + apiResult.setResultCode(resultCode); + apiResult.setResult(result); + apiResult.setResultMsg(resultMsg); + return apiResult; + } + + public int getResultCode() + { + return resultCode; + } + + public void setResultCode(int code) + { + this.resultCode = code; + } + + public String getResultMsg() + { + return resultMsg; + } + + public void setResultMsg(String msg) + { + this.resultMsg = msg; + } + + public T getResult() + { + return result; + } + + public void setResult(T data) + { + this.result = data; + } +} diff --git a/usm-core/src/main/java/com/blueland/service/IAdminUserService.java b/usm-core/src/main/java/com/blueland/service/IAdminUserService.java new file mode 100644 index 0000000..b9e5c64 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/service/IAdminUserService.java @@ -0,0 +1,23 @@ +package com.blueland.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.blueland.bo.AdminUserEntity; +import com.blueland.model.TPfAdminUser; + +import java.util.List; +import java.util.Map; + +/** + * @auther xcy + * @create 2022-05-07 15:56 + */ +public interface IAdminUserService extends IService { + List findTagAdminUserListByParams(Map tagAdminUser); + + int batchDeleteByAppId(String[] appIds); + + AdminUserEntity getByAppidAndUsercode(String appId, String userCode); + + Page findPage(AdminUserEntity adminUserEntry); +} diff --git a/usm-core/src/main/java/com/blueland/service/IAppDatabaseService.java b/usm-core/src/main/java/com/blueland/service/IAppDatabaseService.java new file mode 100644 index 0000000..129ce86 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/service/IAppDatabaseService.java @@ -0,0 +1,19 @@ +package com.blueland.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.blueland.bo.AppDatabaseEntity; +import com.blueland.model.TPfApplicationDb; + +/** + * @auther xcy + * @create 2022-05-07 17:21 + */ +public interface IAppDatabaseService extends IService { + + int batchDeleteByAppId(String[] appIds); + + Page findPage(AppDatabaseEntity pfAppDatabaseEntity); + + TPfApplicationDb queryOne(AppDatabaseEntity bo); +} diff --git a/usm-core/src/main/java/com/blueland/service/IAppService.java b/usm-core/src/main/java/com/blueland/service/IAppService.java new file mode 100644 index 0000000..152c2ba --- /dev/null +++ b/usm-core/src/main/java/com/blueland/service/IAppService.java @@ -0,0 +1,16 @@ +package com.blueland.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.blueland.bo.AppEntity; + +/** + * @auther xcy + * @create 2022-05-09 11:25 + */ +public interface IAppService extends IService { + + AppEntity get(AppEntity bo); + + Page findPage(AppEntity bo); +} diff --git a/usm-core/src/main/java/com/blueland/service/IApplicationService.java b/usm-core/src/main/java/com/blueland/service/IApplicationService.java new file mode 100644 index 0000000..88882ca --- /dev/null +++ b/usm-core/src/main/java/com/blueland/service/IApplicationService.java @@ -0,0 +1,42 @@ +package com.blueland.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.blueland.bo.ApplicationEntity; +import com.blueland.model.TPfApplication; + +import java.util.List; +import java.util.Map; + +/** + * @auther xcy + * @create 2022-05-09 9:16 + */ +public interface IApplicationService extends IService { + + Page findApplicationPageListByParams(Map tagApplication, int curPage, int pageSize); + + List findTagApplicationListByParams(Map tagApplication); + + boolean dealAppDatabase(Map appdatabaseMap, ApplicationEntity application); + + boolean dealAdminUser(List> detailMap, ApplicationEntity application); + + Integer batchDelete(String[] appIds); + + Boolean saveDate(Map params); + + Boolean updateDate(Map params); + + Boolean saveInformation(Map params); + + List> getCombinationTreeList(Map params); + + List findApplicationListByUser(String userId); + + TPfApplication get(ApplicationEntity entity); + + List findList(ApplicationEntity entity); + + Page findPage(ApplicationEntity entity); +} diff --git a/usm-core/src/main/java/com/blueland/service/IAreaService.java b/usm-core/src/main/java/com/blueland/service/IAreaService.java new file mode 100644 index 0000000..3ae7f6e --- /dev/null +++ b/usm-core/src/main/java/com/blueland/service/IAreaService.java @@ -0,0 +1,34 @@ +package com.blueland.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.blueland.bo.AreaEntity; +import com.blueland.bo.AreaExpEntity; +import com.blueland.model.TArea; + +import java.util.List; +import java.util.Map; + +/** + * @auther xcy + * @create 2022-05-09 9:37 + */ +public interface IAreaService extends IService { + + Page getList(Map area, int curPage, int pageSize); + + void importAreaData(List data); + + TArea getbyid(String id); + + int updateArea(AreaEntity model); + + List queryArea(); + + int insetArea(AreaEntity areaEntity); + + void deleteArea(String id); + + List> areaTree(); + +} diff --git a/usm-core/src/main/java/com/blueland/service/IAttachmentService.java b/usm-core/src/main/java/com/blueland/service/IAttachmentService.java new file mode 100644 index 0000000..5ac37df --- /dev/null +++ b/usm-core/src/main/java/com/blueland/service/IAttachmentService.java @@ -0,0 +1,24 @@ +package com.blueland.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.blueland.bo.AttachmentEntity; +import com.blueland.model.TPfAttachment; + +import javax.servlet.http.HttpServletRequest; +import java.util.Map; + +/** + * @auther xcy + * @create 2022-05-09 17:38 + */ +public interface IAttachmentService extends IService { + Map uploadFile(HttpServletRequest request, String childDir, String[] params, + Map values) throws Exception; + + void asynFileForSyy(String attId, String uploadDirUrl, boolean b); + + Page findPageList(AttachmentEntity attachmentEntity, Integer curPage, Integer curPageSize); + + TPfAttachment get(AttachmentEntity bo); +} diff --git a/usm-core/src/main/java/com/blueland/service/IAuthService.java b/usm-core/src/main/java/com/blueland/service/IAuthService.java new file mode 100644 index 0000000..60bc09f --- /dev/null +++ b/usm-core/src/main/java/com/blueland/service/IAuthService.java @@ -0,0 +1,33 @@ +package com.blueland.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.blueland.bo.AuthEntity; +import com.blueland.model.TPfAuth; + +import java.util.List; +import java.util.Map; + +/** + * @auther xcy + * @create 2022-05-09 11:45 + */ +public interface IAuthService extends IService { + + int findAuthByMenuIdRoleId(String menuId, String roleId); + + void deleteRole(String roleId,String appId); + + List getListByRoleId(String roleId); + + Map getMapByRoleId(String roleId); + + TPfAuth get(AuthEntity bo); + + Page findPage(AuthEntity bo); + + void deleteAuthByAppId(String appId); + + List findListByAppId(String appId); + +} diff --git a/usm-core/src/main/java/com/blueland/service/IDictService.java b/usm-core/src/main/java/com/blueland/service/IDictService.java new file mode 100644 index 0000000..6a0435b --- /dev/null +++ b/usm-core/src/main/java/com/blueland/service/IDictService.java @@ -0,0 +1,48 @@ +package com.blueland.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.blueland.bo.DictEntity; +import com.blueland.model.TPfDict; + +import java.util.List; +import java.util.Map; + +/** + * @auther xcy + * @create 2022-05-09 9:48 + */ +public interface IDictService extends IService { + + Page findDictPageListByParams(Map dict, int curPage, int pageSize); + + List findDictList(Map maps); + + int saveDict(DictEntity dict); + + int deleteDictById(String id); + + int deleteDicts(String dictCode); + + List findDictListByCache(String appId); + + List findchildListByCache(String appId, String dictParentId); + + DictEntity findByCache(DictEntity param); + + Map> findByParentcodesCache(String appId, List parentcodes); + + List findByIds(String[] ids); + + String splicing(DictEntity dictEntity); + + TPfDict get(DictEntity model); + + Page findPage(DictEntity model); + + List getDictList(); + + List getListByAppId(String appId); + + void deleteDictByAppId(String appId); +} diff --git a/usm-core/src/main/java/com/blueland/service/IMenuService.java b/usm-core/src/main/java/com/blueland/service/IMenuService.java new file mode 100644 index 0000000..04971bf --- /dev/null +++ b/usm-core/src/main/java/com/blueland/service/IMenuService.java @@ -0,0 +1,79 @@ +package com.blueland.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.blueland.bo.MenuEntity; +import com.blueland.model.TPfMenu; + +import java.util.List; +import java.util.Map; + +/** + * @auther xcy + * @create 2022-05-09 13:53 + */ +public interface IMenuService extends IService { + + List findAppIdMenuList(String appId); + + List getMenu(String appId, String userId, String menuType, + String menuId); + + List getMenuIsOpenStatus(String appId); + + List getMenuList(String appId, String menuName,String parentName, String menuType); + + List getMenuChildren(String appId, String menuName,String parentName, String menuType); + + List getMenuAll(String appId, String menuName,String parentName, String menuType); + + List getParent(String menuId,String appId); + + List listRoleMenu(String roleId,String appId); + + int getMenuLevel(String menuParentId); + + List getMenuCode(String menuCode, String userId,String appId,String menuType); + + Map getButton(String appId, String userId, String menuCode); + + List getMenuByRoleIdAndAppId(String appId,String roleId); + + List getMenuListByStaffcode(String appId, String staffCode); + + List getParentByStaffcode(String menuId, String appId, String staffCode); + + TPfMenu get(MenuEntity bo); + + Page findPage(MenuEntity bo); + + // 6.0.0 + + /** + * 根据岗位id获取菜单 + * @return + */ + List getMenuByPostCode(String appId, String postCode, String menuType, String menuId); + + /** + * 根据菜单ID、员工ID查询有权限访问的菜单列表资源 + * @param menuCode + * @param appId + * @param menuType + * @return + */ + List getMenuBuCode(String menuCode, String postCode,String appId,String menuType); + + /** + * 获取按钮资源 + * @param appId + * @param postCode + * @param menuCode + * @return + */ + Map getButtonByCode(String appId, String postCode, String menuCode); + + List getMenListByAppId(String appId); + + void deleteMenuByAppId(String appId); +} diff --git a/usm-core/src/main/java/com/blueland/service/IModuleService.java b/usm-core/src/main/java/com/blueland/service/IModuleService.java new file mode 100644 index 0000000..248cb97 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/service/IModuleService.java @@ -0,0 +1,21 @@ +package com.blueland.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.blueland.bo.ModuleEntity; +import com.blueland.model.TPfModule; + +import java.util.List; + +/** + * @auther xcy + * @create 2022-05-09 11:05 + */ +public interface IModuleService extends IService { + + Page findPage(ModuleEntity bo); + + List findList(ModuleEntity bo); + + TPfModule get(ModuleEntity bo); +} diff --git a/usm-core/src/main/java/com/blueland/service/IParameterService.java b/usm-core/src/main/java/com/blueland/service/IParameterService.java new file mode 100644 index 0000000..50a02cc --- /dev/null +++ b/usm-core/src/main/java/com/blueland/service/IParameterService.java @@ -0,0 +1,47 @@ +package com.blueland.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.blueland.bo.DictEntity; +import com.blueland.bo.ParameterEntity; +import com.blueland.model.TPfParameter; + +import java.util.List; +import java.util.Map; + +/** + * @auther xcy + * @create 2022-05-09 14:43 + */ +public interface IParameterService extends IService { + + Page findPageList(Map queryParams, int parseInt, int parseInt2); + + Page parameterListPage(Map queryParams, int curPageSize, int curPage); + + ParameterEntity getBykey(String key); + + String getValueByKey(String key); + + ParameterEntity getObj(ParameterEntity obj); + + TPfParameter get(ParameterEntity bo); + + Page findPage(ParameterEntity bo); + + List findList(ParameterEntity bo); + + /** + * 根据key查询配置 + * @param keys + * @return + */ + List selectConfigByKey(List keys); + + /** + * 根据value查询配置 + * @param values + * @return + */ + List selectConfigByValue(List values); +} diff --git a/usm-core/src/main/java/com/blueland/service/IPubOrgService.java b/usm-core/src/main/java/com/blueland/service/IPubOrgService.java new file mode 100644 index 0000000..daeb5cd --- /dev/null +++ b/usm-core/src/main/java/com/blueland/service/IPubOrgService.java @@ -0,0 +1,25 @@ +package com.blueland.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.blueland.bo.Org; +import com.blueland.bo.PubOrgEntity; + +import java.util.List; + +/** + * @auther xcy + * @create 2022-05-09 15:56 + */ +public interface IPubOrgService extends IService { + + PubOrgEntity findOrgById(String id); + + List getListNoPage(Org org); + + PubOrgEntity get(PubOrgEntity bo); + + Page findPage(PubOrgEntity bo); + + List findList(PubOrgEntity bo); +} diff --git a/usm-core/src/main/java/com/blueland/service/IPubUserService.java b/usm-core/src/main/java/com/blueland/service/IPubUserService.java new file mode 100644 index 0000000..a04ff54 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/service/IPubUserService.java @@ -0,0 +1,25 @@ +package com.blueland.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.blueland.bo.PubUserEntity; +import com.blueland.bo.RoleUserRest; +import com.blueland.model.TPubUser; + +import java.util.List; + +/** + * @auther xcy + * @create 2022-05-09 15:37 + */ +public interface IPubUserService extends IService { + + Page getAppRoleUser(String appId, String roleId, String companyId, String deptId, + String orgId, Integer curPage, Integer curPageSize); + + TPubUser get(PubUserEntity bo); + + List findList(PubUserEntity bo); + + Page findPage(PubUserEntity bo); +} diff --git a/usm-core/src/main/java/com/blueland/service/IRole2userService.java b/usm-core/src/main/java/com/blueland/service/IRole2userService.java new file mode 100644 index 0000000..0e82c9a --- /dev/null +++ b/usm-core/src/main/java/com/blueland/service/IRole2userService.java @@ -0,0 +1,30 @@ +package com.blueland.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.blueland.bo.AppIdUserIdAppIdRoleIdDTO; +import com.blueland.bo.Role2userEntity; +import com.blueland.model.TPfRole2user; + +import java.util.List; + +/** + * @auther xcy + * @create 2022-05-10 9:17 + */ +public interface IRole2userService extends IService { + + List findListRoleId(); + + /** + * 根据岗位编码判断用户是否拥有权限 + * @param appId + * @param roleId + * @param postCode + * @return + */ + Long selectRoleUserByCode(String appId, String roleId, String postCode); + + void deleteByAppId(String appId); + + List selectListByAppId(String appId); +} diff --git a/usm-core/src/main/java/com/blueland/service/IRoleService.java b/usm-core/src/main/java/com/blueland/service/IRoleService.java new file mode 100644 index 0000000..4557738 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/service/IRoleService.java @@ -0,0 +1,75 @@ +package com.blueland.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.blueland.bo.Role2userEntity; +import com.blueland.bo.RoleEntity; +import com.blueland.model.TPfRole; + +import java.util.List; +import java.util.Map; + +/** + * @auther xcy + * @create 2022-05-09 15:01 + */ +public interface IRoleService extends IService { + + Page getAppRole(Map map, Integer curPage, Integer curPageSize); + + void deleteRole(Map queryParams); + + List findRoleUserBy(Map map); + + List findRolesByUser(String appId, String userId); + + void saveUser(Role2userEntity role2user); + + int findUserId(String appId, String roleId, String userId); + + int findAppidByRoleId(String appId, String roleId); + + int deleteUserId(String appId, String roleId, String userId); + + void deluser(String roleId, String appId); + + List findRoleTenantidByUserid(String userId); + + Map saveRoles(RoleEntity model); + + TPfRole get(RoleEntity bo); + + Page findPage(RoleEntity bo); + + // 6.0.0 + + /** + * 根据岗位编码获取角色集合 区分租户 + * @param appId + * @param postCode + * @return + */ + List findRolesByPostCode(String appId, String postCode); + + /** + * 根据岗位编码获取角色集合 不区分租户 + * @return + */ + List findRoleAllByPostCode(String postCode); + + /** + * 根据岗位编号删除用户 + * @param appId + * @param roleId + * @param postCode + * @return + */ + int deleteByPostCode(String appId, String roleId, String postCode); + + List findRoleUserByCode(String appId, String roleId, String postCode); + + void deleteByAppId(String appId); + + List findListByAppId(String appId); + +} diff --git a/usm-core/src/main/java/com/blueland/service/ISysOplogService.java b/usm-core/src/main/java/com/blueland/service/ISysOplogService.java new file mode 100644 index 0000000..ae46aa6 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/service/ISysOplogService.java @@ -0,0 +1,21 @@ +package com.blueland.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.blueland.bo.SysOplogEntity; +import com.blueland.model.TPfSysOplog; + +import java.util.Map; + +/** + * @auther xcy + * @create 2022-05-09 10:09 + */ +public interface ISysOplogService extends IService { + + Page findSysOplogPageListByParams(Map tagSysOplog, int curPage, int pageSize); + + TPfSysOplog get(SysOplogEntity model); + + Page findPage(SysOplogEntity model); +} diff --git a/usm-core/src/main/java/com/blueland/service/ISysPvlogService.java b/usm-core/src/main/java/com/blueland/service/ISysPvlogService.java new file mode 100644 index 0000000..7da2cd6 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/service/ISysPvlogService.java @@ -0,0 +1,21 @@ +package com.blueland.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.blueland.bo.SysPvlogEntity; +import com.blueland.model.TPfSysPvlog; + +import java.util.Map; + +/** + * @auther xcy + * @create 2022-05-09 10:47 + */ +public interface ISysPvlogService extends IService { + + Page findSysPvlogPageListByParams(Map tagSysPvlog, int curPage, int pageSize); + + TPfSysPvlog get(SysPvlogEntity bo); + + Page findPage(SysPvlogEntity bo); +} diff --git a/usm-core/src/main/java/com/blueland/service/ITucOrgService.java b/usm-core/src/main/java/com/blueland/service/ITucOrgService.java new file mode 100644 index 0000000..a99a9d3 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/service/ITucOrgService.java @@ -0,0 +1,102 @@ +package com.blueland.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.blueland.bo.Org; +import com.blueland.bo.TreeEntity; +import com.blueland.model.TUcOrg; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @auther xcy + * @create 2022-05-09 16:18 + */ +public interface ITucOrgService extends IService { + + Page getOrgSubs(Org entity); + + List getTopOrg(String orgType); + + List getListNoPage(Org entity); + + Page getOrgPage(Org org); + + List getOrgChildLst(Org org); + + List getOrgChildLst(String orgId); + + List> handleTreeData(Org entity, List orgList); + + List findOrgIdList(Org org); + + Org findOrgById(String orgId); + + List searchOrg(Org org); + + List getTree(String orgType, String type, String id, String orgId, String staffName); + + List judgeLeaf(List list, String orgType); + + String getfulldeptname(String deptId); + + void syncDept2CRM(Org model); + + List> getAllSellorg(String tenantid); + + Org get(Org bo); + + Org getByAppId(Org bo); + + List findList(Org bo); + + Page findPage(Org bo); + + /** + * 根据部门id获取租户id + * @param deptId + * @return + */ + String getTenantId(String deptId); + + /** + * 根据部门id集合查询部门信息 + * @param deptIds + * @return + */ + List selectOrgByDeptIds(List deptIds); + + /** + * 根据ERP部门code集合查询部门信息 + * @param erpCodes + * @return + */ + List selectOrgByErpCodes(List erpCodes); + + Integer countOrgById(String id, String appId); + + List handleOrg(Org org); + + void deleteOrgByAppId(String appId); + + /** + * 获取顶级组织id + * @return + */ + String getTopOrgId(); + + /** + * 查询顶级销售组织id + * @param deptCode + * @return + */ + String getSellOrgId(String deptCode); + + String getAppIdByParentId(String parentId); + + Org getByOgId(String orgId); + + Org getByOgIdAndType(String orgId, String type); +} diff --git a/usm-core/src/main/java/com/blueland/service/ITucStaffService.java b/usm-core/src/main/java/com/blueland/service/ITucStaffService.java new file mode 100644 index 0000000..1bd4db7 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/service/ITucStaffService.java @@ -0,0 +1,143 @@ +package com.blueland.service; + +import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.blueland.bo.RoleUserRest; +import com.blueland.bo.TreeEntity; +import com.blueland.bo.TucStaffEntity; +import com.blueland.model.TUcStaff; +import com.blueland.vo.StaffNumVO; +import com.blueland.vo.StaffPostVO; + +import java.util.List; +import java.util.Map; + +/** + * @auther xcy + * @create 2022-05-09 16:51 + */ +public interface ITucStaffService extends IService { + + Page getStaffInfoByOrgTop(TucStaffEntity staff); + + Page getSubStaffs(TucStaffEntity entity); + + Page getStaffByOrgs(TucStaffEntity entity); + + void deleteBycode(String staffCode); + + void updateByNum(TucStaffEntity model); + + void batchupdateStaffFax(List stafflist); + + TucStaffEntity getStaffByStaffId(String staffId); + + Page getAppRoleUser(String appId, String roleId, String companyId, String deptId, + String orgId, Integer curPage, Integer curPageSize); + + Page getAppRoleUser2(String appId, String roleId, String companyId, String deptId, + String orgId, Integer curPage, Integer curPageSize); + + List getAppRoleUserList(String appId, String roleId, String companyId, String deptId, + String orgId); + + List searchUser(TucStaffEntity tucStaffEntity); + + List findListByName(TucStaffEntity tucStaffEntity); + + List getByStaffcodes(List staffcodes); + + void updateDeptnameByDeptid(String orgName, String deptcode); + + void updateByStaffPhoneBak(String staffPhoneBak); + + void enablePassport(String staffId, String enableStatus); + + List getStaffList(String name); + + List getListByCodes(List codes); + + Page findPage(TucStaffEntity bo); + + TUcStaff get(TucStaffEntity bo); + + List findList(TucStaffEntity bo); + + // 6.0.0版本 + /** + * + * 查询岗位信息集合 + * @return + */ + List findStaffPostList(); + + /** + * 根据岗位编码判断用户是否存在 + * @param postCode + * @return + */ + Long selectUserCount(String postCode); + + /** + * 根据postCode删除员工 + * @param postCode + */ + void deleteByPostCode(String postCode); + + /** + * 根据postCode获取员工 + * @param postCode + * @return + */ + TucStaffEntity getStaffByPostCode(String postCode); + + /** + * 根据postCode批量修改员工上级人工号 + * @param stafflist + */ + void batchUpdateFaxByPostCode(List stafflist); + + /** + * 根据PostCodes查询员工 + * @param codes + * @return + */ + List getListByPostCodes(List codes); + + List getByStaffCode(String staffCode); + + TucStaffEntity getUserByCode(String staffCode); + + /** + * 根据岗位编码集合查询工号 + * @param postCodes + * @return + */ + List selectStaffByPostCodes(List postCodes); + + /** + * 根据工号和部门id获取员工信息 + * @param staffNum 工号 + * @param deptId 部门id + * @return + */ + TucStaffEntity selectStaffByNumAndDept(String staffNum, String deptId); + + /** + * 根据工号获取员工信息 + * @param staffNum 工号 + * @return + */ + TucStaffEntity selectStaffByNum(String staffNum); + + List handleStaff(TucStaffEntity staff); + + List handleStaffToPostCode(TUcStaff staff); + + Integer countStaff(String id, String appId); + + Integer countStaffByNum(String num, String appId); + + void deleteStaffByAppId(String appId); +} diff --git a/usm-core/src/main/java/com/blueland/service/IUserService.java b/usm-core/src/main/java/com/blueland/service/IUserService.java new file mode 100644 index 0000000..5fa9ffc --- /dev/null +++ b/usm-core/src/main/java/com/blueland/service/IUserService.java @@ -0,0 +1,12 @@ +package com.blueland.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.blueland.bo.PubUserEntity; +import com.blueland.model.TPubUser; + +/** + * @auther xcy + * @create 2022-05-10 9:21 + */ +public interface IUserService extends IService { +} diff --git a/usm-core/src/main/java/com/blueland/service/RedisInitService.java b/usm-core/src/main/java/com/blueland/service/RedisInitService.java new file mode 100644 index 0000000..2cf0a2f --- /dev/null +++ b/usm-core/src/main/java/com/blueland/service/RedisInitService.java @@ -0,0 +1,17 @@ +package com.blueland.service; + +import org.springframework.stereotype.Service; + +/** + * @auther xcy + * @create 2022-06-13 9:53 + * redis初始化接口 + */ +public interface RedisInitService { + + /** + * 初始化数据 + */ + void init(); + +} diff --git a/usm-core/src/main/java/com/blueland/service/RedisStrategyService.java b/usm-core/src/main/java/com/blueland/service/RedisStrategyService.java new file mode 100644 index 0000000..87334dd --- /dev/null +++ b/usm-core/src/main/java/com/blueland/service/RedisStrategyService.java @@ -0,0 +1,28 @@ +package com.blueland.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.Map; + +/** + * @auther xcy + * @create 2022-06-13 9:45 + * 策略工厂模式实现不同租户redis初始数据服务 + */ +@Service +public class RedisStrategyService { + + @Autowired + Map serviceMap = new HashMap<>(); + + public RedisInitService getService(String type) { + RedisInitService service = serviceMap.get(type); + if (service == null) { + throw new RuntimeException("没有找到对应的服务类:" + type); + } + return service; + } + +} diff --git a/usm-core/src/main/java/com/blueland/service/SysRedisService.java b/usm-core/src/main/java/com/blueland/service/SysRedisService.java new file mode 100644 index 0000000..a032c9e --- /dev/null +++ b/usm-core/src/main/java/com/blueland/service/SysRedisService.java @@ -0,0 +1,216 @@ +package com.blueland.service; + +import com.blueland.bo.DictEntity; +import com.blueland.bo.MenuEntity; +import com.blueland.bo.Org; +import com.blueland.bo.TucStaffEntity; +import com.blueland.model.TUcOrg; +import com.blueland.model.TUcStaff; + +import java.util.List; + +/** + * @auther xcy + * @create 2022-06-14 9:13 + * usm redis统一操作服务类 + */ +public interface SysRedisService { + + /** + * 初始化字典数据 + */ + void initDict(); + + /** + * 更新对应租户的字典数据 + */ + void flushDict(); + + /** + * 新增或更新对应缓存 + * + * @param model + */ + void saveOrUpdateDict(DictEntity model); + + /** + * 根据字典code,父级code获取数据,区分租户 + * + * @param code + * @return + */ + List getDictListByCode(String code); + + /** + * 根据父级code获取字典 + * @param parentCode + * @return + */ + List getDictListByParentCode(String parentCode); + + /** + * 获取字典集合 + * @return + */ + List getDictList(); + + /** + * 查询字典 + * @param code + * @param parentCode + * @return + */ + DictEntity getDict(String code, String parentCode); + + /** + * 根据redis key获取数据 + * + * @param key + * @return + */ + DictEntity getDictByRedisKey(String key); + + /** + * 初始化角色数据 + */ + void initRole(); + + /** + * 刷新角色数据 + */ + void flushRole(); + + /** + * 根据key删除缓存 + * + * @param userId + */ + void removeRoleByKey(String userId); + + /** + * 新增角色缓存 + */ + void saveRoleCache(String userId, String roleId); + + /** + * 初始化菜单数据 + */ + void initMenu(); + + /** + * 刷新菜单数据 + */ + void flushMenu(); + + /** + * 更新菜单缓存 + * @param model + */ + void saveOrUpdateMenu(MenuEntity model); + + /** + * 初始化菜单id数据 + */ + void initMenuId(); + + /** + * 刷新菜单id数据 + */ + void flushMenuId(); + + /** + * 初始化员工数据 + */ + void initStaff(); + + /** + * 刷新员工数据 + */ + void flushStaff(); + + /** + * 刷新员工数据 + */ + void flushStaff(List list); + + /** + * 新增员工数据 + * @param model + */ + void saveOrUpdateStaff(TucStaffEntity model); + + /** + * 移除员工数据 + * @param appId + * @param staffPostCode + */ + void removeStaff(String appId, String staffPostCode); + + /** + * 获取员工集合,区分租户 + * @return + */ + List getStaffList(); + + /** + * 获取员工 + * @param staffPostCode + * @return + */ + TucStaffEntity getStaff(String staffPostCode); + + /** + * 获取员工集合 + * @param staffPostCodes + * @return + */ + List getStaffList(List staffPostCodes); + + /** + * 初始化部门数据 + */ + void initDept(); + + /** + * 刷新部门数据 + */ + void flushDept(); + + /** + * 刷新部门数据 + */ + void flushDept(List list); + + /** + * 更新员工 + * @param org + */ + void saveOrUpdateDept(Org org); + + /** + * 删除部门数据 + * @param deptId + */ + void removeDeptByKey(String appId, String deptId); + + /** + * 查询部门集合 + * @param deptId + * @return + */ + Org getOrg(String deptId); + + /** + * 查询部门集合 + * @return + */ + List getOrgList(); + + /** + * 查询部门集合 + * @param deptIds + * @return + */ + List getOrgList(List deptIds); + +} diff --git a/usm-core/src/main/java/com/blueland/service/SysTimetaskService.java b/usm-core/src/main/java/com/blueland/service/SysTimetaskService.java new file mode 100644 index 0000000..5c978cd --- /dev/null +++ b/usm-core/src/main/java/com/blueland/service/SysTimetaskService.java @@ -0,0 +1,26 @@ +package com.blueland.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.blueland.bo.SysTimetaskEntity; +import com.blueland.model.TPfSysTimetask; + +import java.util.List; +import java.util.Map; + +/** + * @auther xcy + * @create 2022-05-09 15:28 + */ +public interface SysTimetaskService extends IService { + + Page findSysTimetaskPageListByParams(Map tagSysTimetask, int curPage, int pageSize); + + TPfSysTimetask get(SysTimetaskEntity bo); + + List findList(SysTimetaskEntity bo); + + Page findPage(SysTimetaskEntity bo); + + Long count(SysTimetaskEntity bo); +} diff --git a/usm-core/src/main/java/com/blueland/service/impl/AdminUserServiceImpl.java b/usm-core/src/main/java/com/blueland/service/impl/AdminUserServiceImpl.java new file mode 100644 index 0000000..ec8441a --- /dev/null +++ b/usm-core/src/main/java/com/blueland/service/impl/AdminUserServiceImpl.java @@ -0,0 +1,79 @@ +package com.blueland.service.impl; + + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.blueland.bo.AppDatabaseEntity; +import com.blueland.dao.AdminUserDao; +import com.blueland.bo.AdminUserEntity; +import com.blueland.model.TPfAdminUser; +import com.blueland.model.TPfApplicationDb; +import com.blueland.service.IAdminUserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Map; + +@Service +public class AdminUserServiceImpl extends ServiceImpl implements IAdminUserService { + @Autowired + //PfAdminUser对应的DAO类,主要用于数据库的增删改查等操作 + private AdminUserDao adminUserDao; + + /** + * 根据条件查询TagAdminUser列表(不分页) + */ + @Override + public List findTagAdminUserListByParams(Map tagAdminUser){ + List result=adminUserDao.findAdminUserListByParams(tagAdminUser); + return result; + }; + + /** + * 通过bizId 删除数据 + * @param + * @return + */ + @Override + @Transactional(readOnly = false, propagation = Propagation.REQUIRED) + public int batchDeleteByAppId(String[] appIds) { + if(appIds == null || appIds.length == 0) { + return 0; + } + return adminUserDao.batchDeleteByAppId(appIds); + } + + @Override + public AdminUserEntity getByAppidAndUsercode(String appId, String userCode) { + return adminUserDao.getByAppidAndUsercode(appId, userCode); + }; + + @Override + public Page findPage(AdminUserEntity bo) { + Page page = new Page<>(bo.getPageNum(), bo.getPageSize()); + return this.baseMapper.findPage(page, bo); + } + + private LambdaQueryWrapper buildQueryWrapper(AdminUserEntity bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(ObjectUtil.isNotEmpty(bo.getId()), TPfAdminUser:: getId, bo.getId()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getAppId()), TPfAdminUser:: getAppId, bo.getAppId()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getAdminType()), TPfAdminUser:: getAdminType, bo.getAdminType()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getUserCode()), TPfAdminUser:: getUserCode, bo.getUserCode()); + lqw.like(ObjectUtil.isNotEmpty(bo.getUserName()), TPfAdminUser:: getUserName, bo.getUserName()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getUserOrgId()), TPfAdminUser:: getUserOrgId, bo.getUserOrgId()); + lqw.like(ObjectUtil.isNotEmpty(bo.getUserOrgName()), TPfAdminUser:: getUserOrgName, bo.getUserOrgName()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getUserDeptId()), TPfAdminUser:: getUserDeptId, bo.getUserDeptId()); + lqw.like(ObjectUtil.isNotEmpty(bo.getUserDeptName()), TPfAdminUser:: getUserDeptName, bo.getUserDeptName()); + return lqw; + } + + +} diff --git a/usm-core/src/main/java/com/blueland/service/impl/AppDatabaseServiceImpl.java b/usm-core/src/main/java/com/blueland/service/impl/AppDatabaseServiceImpl.java new file mode 100644 index 0000000..f4279f4 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/service/impl/AppDatabaseServiceImpl.java @@ -0,0 +1,63 @@ +package com.blueland.service.impl; + + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.blueland.model.TPfApplicationDb; +import com.blueland.service.IAppDatabaseService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +import com.blueland.bo.AppDatabaseEntity; +import com.blueland.dao.AppDatabaseDao; + +import java.util.List; + +@Service +public class AppDatabaseServiceImpl extends ServiceImpl implements IAppDatabaseService { + @Autowired + //PfAppDatabase对应的DAO类,主要用于数据库的增删改查等操作 + private AppDatabaseDao pfAppDatabaseDao; + + /** + * 通过appId 删除数据 + * @param + * @return + */ + @Override + @Transactional(readOnly = false, propagation = Propagation.REQUIRED) + public int batchDeleteByAppId(String[] appIds) { + if(appIds == null || appIds.length == 0) { + return 0; + } + return pfAppDatabaseDao.batchDeleteByAppId(appIds); + } + + @Override + public Page findPage(AppDatabaseEntity bo) { + Page page = new Page<>(bo.getPageNum(), bo.getPageSize()); + return this.baseMapper.findPage(page, bo); + } + + @Override + public TPfApplicationDb queryOne(AppDatabaseEntity bo) { + return pfAppDatabaseDao.selectOne(buildQueryWrapper(bo)); + } + + private LambdaQueryWrapper buildQueryWrapper(AppDatabaseEntity bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery();; + lqw.eq(ObjectUtil.isNotEmpty(bo.getAppId()), TPfApplicationDb::getAppId, bo.getAppId()); + lqw.like(ObjectUtil.isNotEmpty(bo.getTypeName()), TPfApplicationDb::getTypeName, bo.getTypeName()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getUrl()), TPfApplicationDb::getUrl, bo.getUrl()); + lqw.like(ObjectUtil.isNotEmpty(bo.getInstanceName()), TPfApplicationDb::getInstanceName, bo.getInstanceName()); + lqw.like(ObjectUtil.isNotEmpty(bo.getUsername()), TPfApplicationDb::getUsername, bo.getUsername()); + lqw.like(ObjectUtil.isNotEmpty(bo.getDriverName()), TPfApplicationDb::getDriverName, bo.getDriverName()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getPassword()), TPfApplicationDb::getPassword, bo.getPassword()); + return lqw; + } +} diff --git a/usm-core/src/main/java/com/blueland/service/impl/AppServiceImpl.java b/usm-core/src/main/java/com/blueland/service/impl/AppServiceImpl.java new file mode 100644 index 0000000..aa20f81 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/service/impl/AppServiceImpl.java @@ -0,0 +1,45 @@ +package com.blueland.service.impl; + + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.blueland.service.IAppService; +import org.springframework.stereotype.Service; + +import com.blueland.bo.AppEntity; +import com.blueland.dao.AppDao; + +import java.util.List; + +@Service +public class AppServiceImpl extends ServiceImpl implements IAppService { + + @Override + public AppEntity get(AppEntity bo) { + return this.baseMapper.selectOne(buildQueryWrapper(bo)); + } + + @Override + public Page findPage(AppEntity bo) { + Page page = new Page(bo.getPageNum(), bo.getPageSize()); + return this.baseMapper.findPage(page, bo); + } + + private LambdaQueryWrapper buildQueryWrapper(AppEntity bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(ObjectUtil.isNotEmpty(bo.getAppId()), AppEntity::getAppId, bo.getAppId()); + lqw.like(ObjectUtil.isNotEmpty(bo.getAppName()), AppEntity::getAppName, bo.getAppName()); + lqw.like(ObjectUtil.isNotEmpty(bo.getAppDesc()), AppEntity::getAppDesc, bo.getAppDesc()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getAppVisitUrl()), AppEntity::getAppVisitUrl, bo.getAppVisitUrl()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getAppType()), AppEntity::getAppType, bo.getAppType()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getAppPriority()), AppEntity::getAppPriority, bo.getAppPriority()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getStatus()), AppEntity::getStatus, bo.getStatus()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getCreatorId()), AppEntity::getCreatorId, bo.getCreatorId()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getIsApply()), AppEntity::getIsApply, bo.getIsApply()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getIsSync()), AppEntity::getIsSync, bo.getIsSync()); + return lqw; + } +} diff --git a/usm-core/src/main/java/com/blueland/service/impl/ApplicationServiceImpl.java b/usm-core/src/main/java/com/blueland/service/impl/ApplicationServiceImpl.java new file mode 100644 index 0000000..fbd4261 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/service/impl/ApplicationServiceImpl.java @@ -0,0 +1,476 @@ +package com.blueland.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.blueland.core.util.IdentifierGenerator; +import com.blueland.bo.*; +import com.blueland.dao.AdminUserDao; +import com.blueland.dao.AppDatabaseDao; +import com.blueland.dao.ApplicationDao; +import com.blueland.dao.ModuleDao; +import com.blueland.model.TPfApplication; +import com.blueland.model.TPfApplicationDb; +import com.blueland.service.IApplicationService; +import com.google.common.collect.Maps; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Slf4j +@Service +public class ApplicationServiceImpl extends ServiceImpl implements IApplicationService { + + @Autowired + private ApplicationDao applicationDao; + @Resource + private AdminUserDao adminUserDao; + @Resource + private AppDatabaseDao appDatabaseDao; + @Resource + private ModuleDao moduleDao; + + /** + * 根据条件查询TagApplication列表(分页) + */ + @Override + public Page findApplicationPageListByParams(Map tagApplication, int curPage, int pageSize) { + Page page = new Page<>(curPage, pageSize); + Page list = applicationDao.findApplicationPageByParams(page, tagApplication); + //拿系统管理员和数据库相关数据放进list,用于查看详情展示 + if (ObjectUtil.isNotEmpty(list.getRecords())) { + for (ApplicationEntity applicationEntity : list.getRecords()) { + Map params = Maps.newHashMap(); + Map paramsOrg = Maps.newHashMap(); + params.put("appId", applicationEntity.getAppId()); + params.put("adminType", "YYGL"); + paramsOrg.put("appId", applicationEntity.getAppId()); + paramsOrg.put("adminType", "ORG"); + List userList = adminUserDao.findAdminUserListByParams(params); + AppDatabaseEntity appDatabaseList = appDatabaseDao.findList(params); + + List orgList = adminUserDao.findAdminOrgListByParams(paramsOrg); + if (orgList.size() > 0) { + String adminOrg = ""; + for (AdminUserEntity org : orgList) { + adminOrg = adminOrg + org.getUserOrgName() + "/" + org.getUserName() + ","; + } + adminOrg = adminOrg.substring(0, adminOrg.length() - 1); + applicationEntity.setAdminOrgName(adminOrg); + applicationEntity.setAdminOrgList(orgList); + } + + if (userList.size() > 0) { + String adminUser = ""; + for (AdminUserEntity pfAdminUserEntity : userList) { + adminUser = adminUser + pfAdminUserEntity.getUserOrgName() + "/" + pfAdminUserEntity.getUserName() + ","; + } + adminUser = adminUser.substring(0, adminUser.length() - 1); + applicationEntity.setAdminUserName(adminUser); + applicationEntity.setAdminUserList(userList); + } + applicationEntity.setAppDatabaseList(appDatabaseList); + } + } + return list; + } + + /** + * 根据条件查询TagApplication列表(不分页) + */ + @Override + public List findTagApplicationListByParams(Map tagApplication) { + return applicationDao.findApplicationListByParams(tagApplication); + } + + ; + + /** + * 处理应用相关数据库数据保存 + * + * @param appdatabaseMap + * @param application + * @return + */ + @Override + public boolean dealAppDatabase(Map appdatabaseMap, ApplicationEntity application) { + boolean flag = false; + //先删除数据库管理表数据(根据appId删) + appDatabaseDao.deleteAppDatabaseByAppId(application.getAppId()); + try { + TPfApplicationDb pfAppDatabase = new TPfApplicationDb(); + pfAppDatabase.setAppId(application.getAppId()); + if ("Y".equals(application.getIsService())) { + pfAppDatabase.setTypeName(appdatabaseMap.get("typeName").toString()); + pfAppDatabase.setUrl(appdatabaseMap.get("url").toString()); + pfAppDatabase.setInstanceName(appdatabaseMap.get("instanceName").toString()); + pfAppDatabase.setUsername(appdatabaseMap.get("username").toString()); + pfAppDatabase.setPassword(appdatabaseMap.get("password").toString()); + pfAppDatabase.setDriverName(appdatabaseMap.get("driverName").toString()); + } + int count = appDatabaseDao.insert(pfAppDatabase); + if (count > 0) { + flag = true; + } + + } catch (Exception e) { + log.error("pfApplicationService --> dealAdminUser,detailMap:" + appdatabaseMap + ",application:" + application + "," + e.getMessage()); + } + return flag; + } + + /** + * 处理组织数据保存 + * + * @param detailMap + * @param application + * @return + */ + private boolean dealAdminOrg(List> detailMap, ApplicationEntity application) { + boolean flag = false; + try { + List list = new ArrayList<>(); + //处理管理员用户数据 + for (Map map : detailMap) { + AdminUserEntity pfAdminUser = new AdminUserEntity(); + pfAdminUser.setId(IdentifierGenerator.createPrimaryKeySeq()); + pfAdminUser.setAppId(application.getAppId()); + pfAdminUser.setAdminType("ORG"); + pfAdminUser.setUserCode(map.get("deptId").toString()); + pfAdminUser.setUserName(map.get("userDeptName").toString()); + pfAdminUser.setUserOrgId(map.get("userOrgId").toString()); + pfAdminUser.setUserOrgName(map.get("userOrgName").toString()); + pfAdminUser.setUserDeptId(map.get("userDeptId").toString()); + pfAdminUser.setUserDeptName(map.get("userDeptName").toString()); + list.add(pfAdminUser); + } + int count = adminUserDao.insertBatchAdminUser(list); + if (count > 0) { + flag = true; + } + + } catch (Exception e) { + log.error("tagApplicationService --> dealAdminUser,detailMap:" + detailMap + ",application:" + application + "," + e.getMessage()); + } + return flag; + } + + /** + * 处理用户管理员数据保存 + * + * @param detailMap + * @param application + * @return + */ + @Override + public boolean dealAdminUser(List> detailMap, ApplicationEntity application) { + boolean flag = false; + //先删除 管理员用户表数据 + adminUserDao.deleteAdminUserByBizId(application.getAppId()); + try { + List list = new ArrayList<>(); + //处理管理员用户数据 + for (Map map : detailMap) { + AdminUserEntity pfAdminUser = new AdminUserEntity(); + pfAdminUser.setId(IdentifierGenerator.createPrimaryKeySeq()); + pfAdminUser.setAppId(application.getAppId()); + //应用管理 + pfAdminUser.setAdminType("YYGL"); + pfAdminUser.setUserCode(map.get("userCode").toString()); + pfAdminUser.setUserName(map.get("userName").toString()); + pfAdminUser.setUserOrgId(map.get("userOrgId").toString()); + pfAdminUser.setUserOrgName(map.get("userOrgName").toString()); + pfAdminUser.setUserDeptId(map.get("userDeptId").toString()); + pfAdminUser.setUserDeptName(map.get("userDeptName").toString()); + list.add(pfAdminUser); + } + int count = adminUserDao.insertBatchAdminUser(list); + if (count > 0) { + flag = true; + } + + } catch (Exception e) { + log.error("tagApplicationService --> dealAdminUser,detailMap:" + detailMap + ",application:" + application + "," + e.getMessage()); + } + return flag; + } + + /** + * 批量删除 + * + * @param + * @return + */ + @Transactional(propagation = Propagation.REQUIRED) + @Override + public Integer batchDelete(String[] appIds) { + if (appIds == null || appIds.length == 0) { + return 0; + } + return applicationDao.batchDelete(appIds); + } + + /** + * 保存数据 + * + * @param params + * @return + */ + @Transactional(propagation = Propagation.REQUIRED) + @Override + public Boolean saveDate(Map params) { + boolean flag = false; + if (!params.containsKey("application") && !params.containsKey("appDatabaseList") && !params.containsKey("adminUserList")) { + return false; + } + boolean status = saveInformation(params); + if (status) { + TPfApplication application = JSON.parseObject(JSON.toJSONString(params), TPfApplication.class); + if (ObjectUtil.isEmpty(application.getAppId())) { + throw new RuntimeException("应用编码不能为空"); + } + TPfApplication tPfApplication = applicationDao.selectById(application.getAppId()); + if (ObjectUtil.isNotEmpty(tPfApplication)) { + throw new RuntimeException("该应用已存在:" + application.getAppId()); + } + application.setCreateTime(new Date()); + int result = applicationDao.insert(application); + if (result > 0) { + flag = true; + } + } + return flag; + } + + /** + * 更新数据 + * + * @param params + * @return + */ + @Transactional(propagation = Propagation.REQUIRED) + @Override + public Boolean updateDate(Map params) { + boolean flag = false; + if (!params.containsKey("application") && !params.containsKey("appDatabaseList") && !params.containsKey("adminUserList")) { + return false; + } + boolean status = saveInformation(params); + if (status) { + TPfApplication application = JSON.parseObject(JSON.toJSONString(params), TPfApplication.class); + application.setUpdateTime(new Date()); + int result = applicationDao.updateById(application); + if (result > 0) { + flag = true; + } + } + return flag; + } + + /** + * 保存数据-数据库相关信息和应用管理员 + */ + @Override + public Boolean saveInformation(Map params) { + boolean status = false; + ApplicationEntity application = JSON.parseObject(JSON.toJSONString(params), ApplicationEntity.class); + List> detailMap = (List>) params.get("adminUserList"); + + Map appdatabaseMap = (Map) params.get("appDatabaseList"); + //处理用户管理员数据保存 + boolean flag = this.dealAdminUser(detailMap, application); + + if (params.containsKey("adminOrgList")) { + List> detailOrgMap = (List>) params.get("adminOrgList"); + if (detailOrgMap.size() > 0) { + boolean flagOrg = this.dealAdminOrg(detailOrgMap, application); + if (!flagOrg) { + return false; + } + } + } + + // 处理应用相关数据库数据保存 + boolean dataflag = true; + // 企业内部普通应用 + if ("QYNBPT".equals(application.getAppType())) { + dataflag = this.dealAppDatabase(appdatabaseMap, application); + } + + if (flag && dataflag) { + status = true; + } + return status; + } + + + /** + * 查询应用、模块、组合树 + * + * @param params + * @return + */ + @Override + public List> getCombinationTreeList(Map params) { + long startTime = System.currentTimeMillis(); + List> result = new ArrayList<>(); + // 查出所有应用 + List applicationList = applicationDao.findApplicationListByParams(params); + for (ApplicationEntity applicationEntity : applicationList) { + Map map = Maps.newHashMap(); + // 用于前台树上的唯一标识-id + map.put("id", applicationEntity.getAppId()); + // 用于前台页面展示名称 + map.put("name", applicationEntity.getAppName()); + map.put("appId", applicationEntity.getAppId()); + map.put("appName", applicationEntity.getAppName()); + map.put("appStatus", applicationEntity.getAppStatus()); + map.put("moduleId", ""); + map.put("moduleName", ""); + map.put("appType", applicationEntity.getAppType()); + //用于前端判断层级 + map.put("hierarchy", 0); + getTopNode(applicationEntity.getAppId(), map, applicationEntity.getAppType()); + result.add(map); + } + long endITme = System.currentTimeMillis(); + log.error("耗时" + (float) (endITme - startTime) / 1000 + "s"); + return result; + } + + /** + * 获取模块顶级节点后再查下面的子节点 + * + * @param appId + * @param map + * @param appType + * @return + */ + private Map getTopNode(String appId, Map map, String appType) { + //此appId下的所有模块 + List allModuleList = moduleDao.findModuleListByAppId(appId); + //获取模块一级分类数据 + List topModuleList = allModuleList.stream().filter(item -> (item.getHierarchy()) == 1).collect(Collectors.toList()); + List> children = new ArrayList<>(); + for (ModuleEntity topModuleEntity : topModuleList) { + Map child = Maps.newHashMap(); + // 用于前台树上的唯一标识-id + child.put("id", topModuleEntity.getModuleId()); + // 用于前台页面展示名称 + child.put("name", topModuleEntity.getName()); + child.put("appId", topModuleEntity.getAppId()); + child.put("appName", topModuleEntity.getAppName()); + child.put("moduleId", topModuleEntity.getModuleId()); + child.put("moduleName", topModuleEntity.getName()); + child.put("hierarchy", topModuleEntity.getHierarchy()); + child.put("appType", appType); + children.add(child); + } + if (children.size() > 0) { + map.put("children", children); + } + return map; + } + + /** + * 递归 根据父分类moduleId 查询子分类 + * + * @param appId + * @param map + * @param allModuleList + * @return + */ +// private Map findChildren(Map map, List allModuleList) { +// List> children = new ArrayList<>(); +// for (ModuleEntity moduleEntity : allModuleList) { +// // 模块下还有子模块 +// if (map.get("moduleId").toString().equals(moduleEntity.getParentId())) { +// Map child = Maps.newHashMap(); +// // 用于前台树上的唯一标识-id +// child.put("id", moduleEntity.getModuleId()); +// child.put("moduleId", moduleEntity.getModuleId()); +// child.put("code", moduleEntity.getCode()); +// child.put("name", moduleEntity.getName()); +// child.put("appId", moduleEntity.getAppId()); +// child.put("appName", moduleEntity.getAppName()); +// child.put("accessUrl", moduleEntity.getAccessUrl()); +// child.put("menuSys", moduleEntity.getMenuSys()); +// child.put("parentId", moduleEntity.getParentId()); +// child.put("parentName", moduleEntity.getParentName()); +// child.put("hierarchy", moduleEntity.getHierarchy()); +// child.put("status", moduleEntity.getStatus()); +// child.put("sort", moduleEntity.getSort()); +// child.put("remark", moduleEntity.getRemark()); +// child.put("createUserId", moduleEntity.getCreateUserId()); +// child.put("createUserName", moduleEntity.getCreateUserName()); +// child.put("updateUserId", moduleEntity.getUpdateUserId()); +// child.put("updateUserName", moduleEntity.getUpdateUserName()); +// child.put("createTime", moduleEntity.getCreateTime()); +// child.put("updateTime", moduleEntity.getUpdateTime()); +// children.add(child); +// this.findChildren(child, allModuleList); +// } +// } +// // 查询当前应用当前模块下且category字段值为"LIST"的表单列表 +// Map param = Maps.newHashMap(); +// param.put("category", "LIST"); +// param.put("moduleId", map.get("moduleId").toString()); +// param.put("sortColumns", "sort"); +// List customFormEntityList = customFormDao.findCustomFormListByParams(param); +// if (children.size() > 0) { +// map.put("children", children); +// } +// return map; +// } + + /** + * 获取用户所有应用 + * @param userId + * @return + */ + @Override + public List findApplicationListByUser(String userId){ + return applicationDao.findApplicationListByUser(userId); + } + + @Override + public TPfApplication get(ApplicationEntity entity){ + return applicationDao.selectOne(buildQueryWrapper(entity)); + } + + @Override + public List findList(ApplicationEntity entity){ + return applicationDao.findList(entity); + } + + @Override + public Page findPage(ApplicationEntity entity) { + Page page = new Page(entity.getPageNum(), entity.getPageSize()); + return applicationDao.findPage(page, entity); + } + + private LambdaQueryWrapper buildQueryWrapper(ApplicationEntity bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery();; + lqw.eq(ObjectUtil.isNotEmpty(bo.getAppId()), TPfApplication::getAppId, bo.getAppId()); + lqw.like(ObjectUtil.isNotEmpty(bo.getAppName()), TPfApplication::getAppName, bo.getAppName()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getAppStatus()), TPfApplication::getAppStatus, bo.getAppStatus()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getFrontPort()), TPfApplication::getFrontPort, bo.getFrontPort()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getRearPort()), TPfApplication::getRearPort, bo.getRearPort()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getAppType()), TPfApplication::getAppType, bo.getAppType()); + lqw.like(ObjectUtil.isNotEmpty(bo.getAppDescribe()), TPfApplication::getAppDescribe, bo.getAppDescribe()); + return lqw; + } +} diff --git a/usm-core/src/main/java/com/blueland/service/impl/AreaServiceImpl.java b/usm-core/src/main/java/com/blueland/service/impl/AreaServiceImpl.java new file mode 100644 index 0000000..1b21067 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/service/impl/AreaServiceImpl.java @@ -0,0 +1,191 @@ +package com.blueland.service.impl; + +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.blueland.bo.AreaEntity; +import com.blueland.bo.AreaExpEntity; +import com.blueland.dao.AreaDao; + +import com.blueland.model.TArea; +import com.blueland.service.IAreaService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import java.util.stream.Collectors; + +@Slf4j +@Service +public class AreaServiceImpl extends ServiceImpl implements IAreaService { + @Autowired + //Area对应的DAO类,主要用于数据库的增删改查等操作 + private AreaDao areaDao; + + + /*根据条件查询*/ + @Override + public Page getList(Map area, int curPage, int pageSize){ + Page page = new Page<>(curPage,pageSize); + Page list=areaDao.findPage(page, area); + return list; + } + + /** + * 导入数据 + * @param data + */ + @Transactional + @Override + public void importAreaData(List data){ + try { + List areaList = areaDao.selectList(); + // 核查两个数组对象里面是否有重复数据 + List tempList = areaList.stream() + .map(t -> data.stream().filter(s -> Objects.nonNull(t.getTid()) && Objects.nonNull(s.getTid()) && Objects.equals(t.getTid(), s.getTid())).findAny().orElse(null)) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + if(tempList.size()>0){ + System.err.println(JSON.toJSONString(tempList)); + throw new RuntimeException("数据库已存在行政编码,请核查数据再导入!"); + } + long count = data.stream().distinct().count(); + if(data.size() != count){ + throw new RuntimeException("导入的数据中有重复行政编码数据,请核查数据再导入!!"); + } + List firstLeve = data.stream().filter(o -> o.getTid().substring(2,6).equals("0000")).collect(Collectors.toList()); + List secondLeve = data.stream().filter(o -> o.getTid().substring(4, 6).equals("00") && o.getTid().length() == 6 && !o.getTid().substring(2, 6).equals("0000")).collect(Collectors.toList()); + List thirdLeve = data.stream().filter(o -> !o.getTid().substring(4, 6).equals("00") || o.getTid().length() > 6 ).collect(Collectors.toList()); + List list = new ArrayList(); + for (AreaExpEntity areaExcelEntity : firstLeve) { //处理省数据 + AreaEntity area = new AreaEntity(); + area.setPid("0"); + area.setCreateTime(new Date()); + area.setId(areaExcelEntity.getTid()); + area.setTid(areaExcelEntity.getTid()); + area.setAname(areaExcelEntity.getAname()); + list.add(area); + } + for (AreaExpEntity areaExcelEntity : secondLeve) { //处理市 + AreaEntity area = new AreaEntity(); + area.setPid(areaExcelEntity.getTid().substring(0,2)+"0000"); + area.setCreateTime(new Date()); + area.setId(areaExcelEntity.getTid()); + area.setTid(areaExcelEntity.getTid()); + area.setAname(areaExcelEntity.getAname()); + list.add(area); + } + for (AreaExpEntity areaExcelEntity : thirdLeve) { //处理区 + AreaEntity area = new AreaEntity(); + area.setPid(areaExcelEntity.getTid().substring(0,2)+"0000"); + area.setCreateTime(new Date()); + area.setId(areaExcelEntity.getTid()); + area.setTid(areaExcelEntity.getTid()); + area.setAname(areaExcelEntity.getAname()); + list.add(area); + } + areaDao.saveBatch(list); + } catch (Exception e) { + e.printStackTrace(); +// log.error("操作失败!异常 importAreaData: {}", e.getMessage()); + throw new RuntimeException("数据异常,请核查数据"); + } + } + + @Override + public TArea getbyid(String id) { + TArea areaEntity=areaDao.selectById(id); + return areaEntity; + } + + @Override + public int updateArea(AreaEntity model) { + int result=0; + if(model.getId() != null && !"".equals(model.getId())){ + result=areaDao.updateArea(model); + } + return result; + } + + @Override + public List queryArea() { + List list=areaDao.queryArea(); + return list; + } + + @Override + public int insetArea(AreaEntity areaEntity) { + int res= areaDao.insetArea(areaEntity); + return res; + } + + @Override + public void deleteArea(String id) { + areaDao.deleteById(id); + } + + @Override + public List> areaTree() { + List> list = new ArrayList>(); + List dataList=areaDao.queryall(); + List firstLeve = dataList.stream().filter(o -> o.getTid().substring(2,6).equals("0000")).collect(Collectors.toList()); + List secondLeve = dataList.stream().filter(o -> o.getTid().substring(4, 6).equals("00") && o.getTid().length() == 6 && !o.getTid().substring(2, 6).equals("0000")).collect(Collectors.toList()); + List thirdLeve = dataList.stream().filter(o -> !o.getTid().substring(4, 6).equals("00") || o.getTid().length() > 6).collect(Collectors.toList()); + list = appendTree(firstLeve,secondLeve,thirdLeve); + return list; + + } + private List> appendTree(List firstLeve, List secondLeve, + List thirdLeve) { + List> list = new ArrayList>(); + for (AreaEntity first : firstLeve) { // 一级 + Map map = new HashMap(); + map.put("value", first.getTid()); + map.put("label", first.getAname()); + map.put("children", this.appendChildTree(first,secondLeve,thirdLeve)); + list.add(map); + } + return list; + } + private List> appendChildTree(AreaEntity first, List secondLeve, List thirdLeve) { + List> list = new ArrayList>(); + if(first.getTid().equals("810000") || first.getTid().equals("820000")){//香港 澳门 + List thirdLeveList = thirdLeve.stream().filter(o -> o.getPid().equals(first.getId())).collect(Collectors.toList()); + for (AreaEntity areaEntity : thirdLeveList) { //二级 + Map map = new HashMap(); + map.put("value", areaEntity.getTid()); + map.put("label", areaEntity.getAname()); + list.add(map); + } + }else{ + List secondList = secondLeve.stream().filter(o -> o.getPid().equals(first.getId())).collect(Collectors.toList()); + for (AreaEntity areaEntity : secondList) { //二级 + Map map = new HashMap(); + map.put("value", areaEntity.getTid()); + map.put("label", areaEntity.getAname()); + map.put("children", this.appendThirdChildTree(areaEntity,thirdLeve)); + list.add(map); + } + } + + return list; + } + private Object appendThirdChildTree(AreaEntity areaEntity, List thirdLeve) { + List> list = new ArrayList>(); + List thirdList = new ArrayList(); + thirdList = thirdLeve.stream().filter(o -> areaEntity.getTid().equals(o.getTid().substring(0, 4)+"00")).collect(Collectors.toList()); + if(areaEntity.getTid().substring(0, 4).equals("6543") + || areaEntity.getTid().substring(0, 4).equals("4604")){ //处理特殊 阿勒泰地区:654300 儋州市:460400 + thirdList = thirdLeve.stream().filter(o -> areaEntity.getTid().equals(o.getTid().substring(0, 4)+"00") || o.getTid().substring(0, 4).equals("6590")).collect(Collectors.toList()); + } + for (AreaEntity third : thirdList) {// 三级 + Map map = new HashMap(); + map.put("value", third.getTid()); + map.put("label", third.getAname()); + list.add(map); + } + return list; + } +} diff --git a/usm-core/src/main/java/com/blueland/service/impl/AttachmentServiceImpl.java b/usm-core/src/main/java/com/blueland/service/impl/AttachmentServiceImpl.java new file mode 100644 index 0000000..e4788e9 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/service/impl/AttachmentServiceImpl.java @@ -0,0 +1,254 @@ +package com.blueland.service.impl; + + +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.text.SimpleDateFormat; + +/** + * @author 代码自动生成工具 + * @version 1.0 + * @since + */ + +import java.util.*; + +import javax.servlet.http.HttpServletRequest; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.blueland.bo.*; +import com.blueland.model.TPfAttachment; +import com.blueland.sdk.FileServiceHelper; +import com.blueland.sdk.bean.FileBean; +import com.blueland.sdk.bean.MessageBean; +import com.blueland.service.IAttachmentService; + +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import org.springframework.stereotype.Service; +import org.springframework.util.FileCopyUtils; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; + +import com.blueland.dao.AttachmentDao; + +@Slf4j +@Service +public class AttachmentServiceImpl extends ServiceImpl implements IAttachmentService { + + /** + * 文件上传的根目录,配置文件中可定义,是所有模块文件上传的父相对路径 + */ + @Autowired + //Attachment对应的DAO类,主要用于数据库的增删改查等操作 + private AttachmentDao attachmentDao; + + @Autowired + private ThreadPoolTaskExecutor executor; + + /** + * @方法名: uploadFile + * @描述:文件上传 + * @作者:高星 + * @时间:2014-5-7 上午9:53:10 + * @参数:@param request + * @参数:@param childDir 文件保存的子路径,个模块的文件上传到不同的子路径 + * @参数:@param params 扩展字段 用于添加自定义信息的键 + * @参数:@param values 扩展字段,用于添加自定义字段的值 + * @参数:@return Map 文件上传后返回的文件信息 + * @参数:@throws Exception + * @返回值:Map + */ + @Override + public Map uploadFile(HttpServletRequest request, String childDir, String[] params, + Map values) throws Exception { + Map map = new HashMap(); + MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest) request; + Map fileMap = mRequest.getFileMap(); + String relativeuplodUrl = ""; + if (StringUtils.isNotBlank(childDir)) { + relativeuplodUrl += childDir + "/"; + } + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); + String dateStr = sdf.format(new Date()); + relativeuplodUrl += dateStr + "/"; + String uploadDir = ""; + uploadDir = relativeuplodUrl.replace(File.separator, "/"); + File file = new File(uploadDir); + + if (!(file.exists() && file.isDirectory())) { + file.mkdirs(); + } + + String fileName = null; + int i = 0; + for (Iterator> it = fileMap.entrySet().iterator(); it.hasNext(); i++) { + + Map.Entry entry = it.next(); + MultipartFile mFile = entry.getValue(); + + fileName = mFile.getOriginalFilename();// 文件原名 + + String storeName = rename(fileName);// 文件保存名称 + + String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);// 文件名后缀 + + String uploadUrl = uploadDir + "/" + fileName;// 文件保存绝对路径 + + BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(uploadUrl)); + + int copiedBytes = FileCopyUtils.copy(mFile.getInputStream(), outputStream);// 返回值为已复制的字节数 + if (copiedBytes > 0) { + // 固定参数值对 + map.put("fileName", fileName); + map.put("fileSize", new File(uploadUrl).length()); + map.put("uploadUrl", relativeuplodUrl + fileName); + map.put("contentType", suffix); + map.put("result", "true");// 上传成功的标识 + } else { + map.put("result", "false");// 上传失败的标识 + } + // 自定义参数值对 + if (params != null) { + for (String param : params) { + map.put(param, values.get(param)[i]); + } + } + } + return map; + } + + public static String rename(String name) { + + // Long now = Long.parseLong(new SimpleDateFormat("yyyyMMddHHmmss") + // .format(new Date())); + // Long random = (long) (Math.random() * now); + + String fileName = String.valueOf(new Date().getTime()); + if (name.indexOf(".") != -1) { + fileName += name.substring(name.lastIndexOf(".")); + } + return fileName; + } + + /** + * 保存到私有云 + * + * @param attId + * @param uploadDirUrl + * @param b + */ + @Override + public void asynFileForSyy(String attId, String uploadDirUrl, boolean b) { +// executor.execute(new Runnable(){ +// @Override +// public void run() { +// +// } +// }); + + try { +// log.info("私有云存储文件---startTime:"+new Date()); +// log.info("私有云存储文件---fileId:"+attId+"&fileUrl:"+uploadDirUrl); + String fileIdSyy = upload(uploadDirUrl); + TPfAttachment atta = new TPfAttachment(); + atta.setAttId(attId); + atta.setSdkAppId(fileIdSyy); + attachmentDao.updateById(atta); +// log.info("私有云存储文件---endTime:"+new Date()); + } catch (Exception e) { +// log.error("存储私有云文档异常 ---fileId:"+attId+"&fileUrl:"+uploadDirUrl,e); + } + } + + + public final static String PRIVATE_KEY = + // "-----BEGIN RSA PRIVATE KEY-----\n" + + "MIICXgIBAAKBgQDWvkiXjub57S8exgionEzUBiGTuQWw27AJvp93at1sgMJl7d6q\n" + + "XA7syrzKkg1I9IkxerlqJLiwO6NUk5dAqk0+6rMuN6O4FCoPERRGP45QuTjTZGHl\n" + + "tdi80pxInNjcHlxHDkZ0Zs2rGOOHYdme4sSaaqKN7IbNRvJ+EM0aTEyq6wIDAQAB\n" + + "AoGBAJNNhYgI62HHFAp891WJmZ3a8s9dHI07tR6KFuMYd/jEvhSjPZkIeuhtDWG7\n" + + "G8fOjglV0LgBpnqk/h22/ArMhxz+g2lHTwvfSWw7k7Ovcq918FKEHx2h5Cntmltb\n" + + "TqiwibgP+cF9LzBIcsaDsedaP2d0oUbINRmTc2/eNZNx8vSxAkEA863/2gsp7phT\n" + + "EutwmVocNQf6BkR8QjfcrhpnuFcExCffqyp8fRiUa52K0ZcWkopuPHzjSmA8THJU\n" + + "H0ZAR+lYSQJBAOGZwQUSX20uw+Wa1rDD6JHhv61Fje/UFRBOmVeSZThsDy4Gf0d5\n" + + "6dtahvNayod12/RsM/eHu/a7Eo7NjUYhMZMCQQCjj1YdL8McgCe6mkeA10f5nHoI\n" + + "vO0+sSoxvk2CIP50/2KVDDZ07QuqVBt6ZNRk1f/6H8WcBY5TraWjPE8nNYvpAkEA\n" + + "kgG/gXfNmM0ubbhTgF2adGfFdO/SF8iLxV0JMzsFFYoiHOiJkYneh1/EfVViRF9L\n" + + "9pnc3DPVu66BKTjxWNT8zwJAcYoCCX5q8QKFF9v+LNykUc0hePZ1FE7Al9ESu7IB\n" + + "SZMQzKd2MMvbwNNvyLXwp81gLcTmWO8+otKchuIEFVNczA==\n"; + public final static String APP_ID = "HYCG_SYS"; + + public final static String PWD = "123456"; + + public final static String APP_TOKEN = "84214c10d7d64de7adce70a87cf4f55a"; + + public final static String FILE_URL = "http://192.168.1.168/doc-cloud-service/file"; + + /** + * 私有云文件上传 + * + * @param + * @return + */ + public static String upload(String filePath) { + try { + FileBean fileBean = new FileBean(); +// fileBean.setPrivateKey(PRIVATE_KEY); +// fileBean.setApptoken(APP_TOKEN); + fileBean.setAppId(APP_ID); + fileBean.setPwd(PWD); + fileBean.setFileServiceUrl(FILE_URL); + FileServiceHelper fileServiceHelper = new FileServiceHelper(fileBean); + //上传 + MessageBean mbupload = new MessageBean(); + mbupload = fileServiceHelper.upload(filePath); + String docSdkFileId = mbupload.getFileId(); + return docSdkFileId; + } catch (Exception e) { + e.fillInStackTrace(); +// throw new BaseException("存储私有云文档异常"); + return null; + } + } + + @Override + public Page findPageList(AttachmentEntity attachmentEntity, Integer curPage, Integer curPageSize) { + // TODO Auto-generated method stub + Page page = new Page<>(curPage, curPageSize); + Page result = attachmentDao.findPage(page, attachmentEntity); + return result; + } + + @Override + public TPfAttachment get(AttachmentEntity bo) { + return this.baseMapper.selectOne(buildQueryWrapper(bo)); + } + + private LambdaQueryWrapper buildQueryWrapper(AttachmentEntity bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(ObjectUtil.isNotEmpty(bo.getAttId()), TPfAttachment::getAttId, bo.getAttId()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getAppId()), TPfAttachment::getAppId, bo.getAppId()); + lqw.like(ObjectUtil.isNotEmpty(bo.getAttName()), TPfAttachment::getAttName, bo.getAttName()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getAttUrl()), TPfAttachment::getAttUrl, bo.getAttUrl()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getAttType()), TPfAttachment::getAttType, bo.getAttType()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getBizId()), TPfAttachment::getBizId, bo.getBizId()); + lqw.like(ObjectUtil.isNotEmpty(bo.getBizName()), TPfAttachment::getBizName, bo.getBizName()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getAttShow()), TPfAttachment::getAttShow, bo.getAttShow()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getCreateUserId()), TPfAttachment::getCreateUserId, bo.getCreateUserId()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getUpdateUserId()), TPfAttachment::getUpdateUserId, bo.getUpdateUserId()); + lqw.like(ObjectUtil.isNotEmpty(bo.getCreateUserName()), TPfAttachment::getCreateUserName, bo.getCreateUserName()); + lqw.like(ObjectUtil.isNotEmpty(bo.getUpdateUserName()), TPfAttachment::getUpdateUserName, bo.getUpdateUserName()); + lqw.like(ObjectUtil.isNotEmpty(bo.getAttRemark()), TPfAttachment::getAttRemark, bo.getAttRemark()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getSdkAppId()), TPfAttachment::getSdkAppId, bo.getSdkAppId()); + return lqw; + } + +} diff --git a/usm-core/src/main/java/com/blueland/service/impl/AuthServiceImpl.java b/usm-core/src/main/java/com/blueland/service/impl/AuthServiceImpl.java new file mode 100644 index 0000000..a2a734f --- /dev/null +++ b/usm-core/src/main/java/com/blueland/service/impl/AuthServiceImpl.java @@ -0,0 +1,99 @@ +package com.blueland.service.impl; + + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.blueland.model.TPfAuth; +import com.blueland.service.IAuthService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.blueland.bo.AuthEntity; +import com.blueland.dao.AuthDao; + +@Service +public class AuthServiceImpl extends ServiceImpl implements IAuthService { + @Autowired + //Auth对应的DAO类,主要用于数据库的增删改查等操作 + private AuthDao authDao; + + @Override + public int findAuthByMenuIdRoleId(String menuId, String roleId) { + int result = authDao.findAuthByMenuIdRoleId(menuId, roleId); + return result; + } + + @Override + public void deleteRole(String roleId,String appId) { + authDao.deleteRole(roleId,appId); + } + + /** + * 根据角色ID获取集合 + * @param roleId + * @return + */ + public List getListByRoleId(String roleId){ + return authDao.getListByRoleId(roleId); + } + + /** + * 根据角色ID获取MAP + * key---menuId + * @param roleId + * @return + */ + @Override + public Map getMapByRoleId(String roleId){ + Map authMap = new HashMap(); + List authList = authDao.getListByRoleId(roleId); + if(null != authList && authList.size() > 0) { + for(AuthEntity auth:authList) { + authMap.put(auth.getMenuId(), auth); + } + } + return authMap; + } + + @Override + public TPfAuth get(AuthEntity bo){ + return this.baseMapper.selectOne(buildQueryWrapper(bo)); + } + + @Override + public Page findPage(AuthEntity bo) { + Page page = new Page(bo.getPageNum(), bo.getPageSize()); + return this.baseMapper.findPage(page, bo); + } + + @Override + public void deleteAuthByAppId(String appId) { + this.baseMapper.deleteAuthByAppId(appId); + } + + @Override + public List findListByAppId(String appId) { + return this.baseMapper.findListByAppId(appId); + } + + private LambdaQueryWrapper buildQueryWrapper(AuthEntity bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(ObjectUtil.isNotEmpty(bo.getAuthId()), TPfAuth::getAuthId, bo.getAuthId()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getAuthType()), TPfAuth::getAuthType, bo.getAuthType()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getAppId()), TPfAuth::getAppId, bo.getAppId()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getMenuId()), TPfAuth::getMenuId, bo.getMenuId()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getStatus()), TPfAuth::getStatus, bo.getStatus()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getCreatorId()), TPfAuth::getCreatorId, bo.getCreatorId()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getUpdatorId()), TPfAuth::getUpdatorId, bo.getUpdatorId()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getRoleId()), TPfAuth::getRoleId, bo.getRoleId()); + return lqw; + } + +} diff --git a/usm-core/src/main/java/com/blueland/service/impl/BioRedisServiceImpl.java b/usm-core/src/main/java/com/blueland/service/impl/BioRedisServiceImpl.java new file mode 100644 index 0000000..583c232 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/service/impl/BioRedisServiceImpl.java @@ -0,0 +1,27 @@ +package com.blueland.service.impl; + +import com.blueland.core.util.RedisUtils; +import com.blueland.service.RedisInitService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Service; + +/** + * @auther xcy + * @create 2022-06-13 10:16 + * bio redis数据处理类 + */ +@Service +public class BioRedisServiceImpl implements RedisInitService { + + @Autowired + private RedisTemplate redisTemplate; + + @Autowired + private RedisUtils redisUtils; + + @Override + public void init() { + + } +} diff --git a/usm-core/src/main/java/com/blueland/service/impl/DictServiceImpl.java b/usm-core/src/main/java/com/blueland/service/impl/DictServiceImpl.java new file mode 100644 index 0000000..aea2805 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/service/impl/DictServiceImpl.java @@ -0,0 +1,273 @@ +package com.blueland.service.impl; + + +import java.util.*; + +/** + * @author 代码自动生成工具 + * @version 1.0 + * @since + */ + +import java.util.stream.Collectors; + +import javax.annotation.PostConstruct; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.blueland.constant.RedisConstant; +import com.blueland.core.util.RemoteDictUtils; +import com.blueland.core.util.UserUtils; +import com.blueland.model.TPfDict; +import com.blueland.service.IDictService; +import com.blueland.service.SysRedisService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Service; + +import com.blueland.core.util.IdentifierGenerator; +import com.blueland.core.util.StringUtil; +import com.blueland.bo.DictEntity; +import com.blueland.dao.DictDao; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Service +public class DictServiceImpl extends ServiceImpl implements IDictService { + @Autowired + //Dict对应的DAO类,主要用于数据库的增删改查等操作 + private DictDao dictDao; + + //key为 租户ID-父编码 +// private Map> dictMap = new HashMap>(); + +// @Autowired +// private RemoteDictUtils remoteDictUtils; + + @Autowired + SysRedisService sysRedisService; + + /** + * 根据条件查询dict列表(分页) + */ + @Override + public Page findDictPageListByParams(Map dict, int curPage, int pageSize) { + Page page = new Page<>(curPage, pageSize); + Page list = dictDao.findDictPagePageByParams(page, dict); + return list; + } + + /** + * 根据条件查询dict列表(不分页) + */ + @Override + public List findDictList(Map maps) { + return dictDao.findDictPageListByParams(maps); + } + + /** + * 新增或修改Dict + * + * @param dict + * @return + */ + @Override + public int saveDict(DictEntity dict) { + int result = 0; + String id = dict.getId(); + if (id != null && !"".equals(id)) { + dict.setUpdateDate(new Date()); + result = dictDao.updateDict(dict); + } else { + dict.setId(null); + dict.setCreateDate(new Date()); + dict.setUpdateDate(new Date()); + dict.setAppId(UserUtils.getTenantId()); + TPfDict tPfDict = BeanUtil.copyProperties(dict, TPfDict.class); + result = dictDao.insert(tPfDict); + } + return result; + } + + /** + * 根据ID删除对象(物理删除) + */ + @Override + public int deleteDictById(String id) { + //先获取 + int count = dictDao.deleteDictById(id); + return count; + } + + /** + * 根据编码删除对象(逻辑删除:修改状态) + */ + @Override + public int deleteDicts(String dictCode) { + int count = dictDao.deleteDicts(dictCode); + return count; + } + + + /** + * 20200428 add 优先查询缓存,没有再查询数据库 + */ + @Override + public List findDictListByCache(String appId) { + // 从redis中获取数据 + List dictList = sysRedisService.getDictList(); + //没有数据再查数据库 + if (dictList.size() == 0) { + dictList = dictDao.findDictPageListByAppId(appId); + } + return dictList; + } + + /** + * 20200428 add 优先查询缓存,没有再查询数据库 + * + * @return + */ + @Override + public List findchildListByCache(String appId, String dictParentId) { + // 从redis中获取数据 + List dictList = sysRedisService.getDictListByParentCode(dictParentId); + if (ObjectUtil.isEmpty(dictList)) { + DictEntity dictEntity = new DictEntity(); + dictEntity.setAppId(appId); + dictEntity.setDictParentId(dictParentId); + dictEntity.setStatus("Y"); + dictList = this.baseMapper.findList(dictEntity); + } + dictList = dictList.stream().sorted(Comparator.comparing(DictEntity:: getSort)).collect(Collectors.toList()); + return dictList; + } + + /** + * 20200428 add 优先查询缓存,没有再查询数据库 + * + * @return + */ + @Override + public DictEntity findByCache(DictEntity param) { + //20190808 modify 如果没传dictCode 也能返回结果,是有问题的,这里加上判断 + DictEntity dictEntity = null; + if (StringUtil.notEmpty(param.getDictCode())) { + String appId = param.getAppId(); + String dictParentId = param.getDictParentId(); + dictEntity = sysRedisService.getDict(param.getDictCode(), param.getDictParentId()); + if (ObjectUtil.isEmpty(dictEntity)) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().eq(TPfDict::getAppId, appId); + queryWrapper.lambda().eq(TPfDict::getDictParentId, dictParentId); + queryWrapper.lambda().eq(TPfDict::getDictCode, param.getDictCode()); + TPfDict dict = dictDao.selectOne(queryWrapper); + dictEntity = BeanUtil.toBean(dict, DictEntity.class); + } + } + return dictEntity; + } + + /** + * 20200908 add 根据父编码返回集合 + * + * @return + */ + @Override + public Map> findByParentcodesCache(String appId, List parentcodes) { + Map> resultMap = new HashMap<>(); + for (String parentcode : parentcodes) { + // 先从缓存中查询 + List dictList = sysRedisService.getDictListByParentCode(parentcode); + // 如果没有查到就去从数据库中查询 + if (ObjectUtil.isEmpty(dictList)) { + dictList = dictDao.getDictListByCode(null, parentcode); + } + // 有数据就行格式化 + if (ObjectUtil.isNotEmpty(dictList)) { + resultMap.put(parentcode, dictList.stream().filter(x -> x.getDictParentId().equals(parentcode)).collect(Collectors.toList())); + } + } + return resultMap; + } + + /** + * 获取所有字典 + * + * @return + */ + @Override + public List getDictList() { + List dictList = sysRedisService.getDictList(); + if (ObjectUtil.isEmpty(dictList)) { + dictList = dictDao.getDictList(); + } + return dictList; + } + + @Override + public List getListByAppId(String appId) { + return this.baseMapper.getList(appId); + } + + @Override + public void deleteDictByAppId(String appId) { + this.baseMapper.deleteDictByAppId(appId); + } + + /** + * 根据ids获取字典 + * + * @param ids + * @return + */ + @Override + public List findByIds(String[] ids) { + return dictDao.findByIds(ids); + } + + + /** + * 拼接key + */ + @Override + public String splicing(DictEntity dictEntity) { + if (ObjectUtil.isNull(dictEntity)) { + return ""; + } + return dictEntity.getAppId() + ":" + dictEntity.getDictParentId() + ":" + dictEntity.getDictCode(); + } + + @Override + public TPfDict get(DictEntity model) { + return dictDao.selectOne(buildQueryWrapper(model)); + } + + @Override + public Page findPage(DictEntity model) { + Page page = new Page(model.getPageNum(), model.getPageSize()); + return dictDao.findPage(page, model); + } + + + private LambdaQueryWrapper buildQueryWrapper(DictEntity bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(ObjectUtil.isNotEmpty(bo.getId()), TPfDict::getId, bo.getId()); + lqw.like(ObjectUtil.isNotEmpty(bo.getDictCode()), TPfDict::getDictCode, bo.getDictCode()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getDictParentId()), TPfDict::getDictParentId, bo.getDictParentId()); + lqw.like(ObjectUtil.isNotEmpty(bo.getDictName()), TPfDict::getDictName, bo.getDictName()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getStatus()), TPfDict::getStatus, bo.getStatus()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getCreatorId()), TPfDict::getCreatorId, bo.getCreatorId()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getUpdatorId()), TPfDict::getUpdatorId, bo.getUpdatorId()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getAppId()), TPfDict::getAppId, bo.getAppId()); + return lqw; + } +} diff --git a/usm-core/src/main/java/com/blueland/service/impl/MenuServiceImpl.java b/usm-core/src/main/java/com/blueland/service/impl/MenuServiceImpl.java new file mode 100644 index 0000000..aa82dc1 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/service/impl/MenuServiceImpl.java @@ -0,0 +1,524 @@ +package com.blueland.service.impl; + +import java.util.*; +import java.util.stream.Collectors; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.blueland.constant.RedisConstant; +import com.blueland.core.util.StringUtil; +import com.blueland.bo.*; +import com.blueland.dao.MenuDao; +import com.blueland.model.TPfMenu; +import com.blueland.service.IAuthService; +import com.blueland.service.IMenuService; +import com.google.common.base.Joiner; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Service; + +@Service +public class MenuServiceImpl extends ServiceImpl implements IMenuService { + + @Autowired + private MenuDao menuDao; + @Autowired + private IAuthService authService; + + @Override + public List findAppIdMenuList(String appId) { + return this.menuList(appId, ""); + } + + private List menuList(String appId, String parentId) { + List topMenuList = menuDao.findAppIdMenuList(appId, parentId); + if (topMenuList.isEmpty()) { + return topMenuList; + } + for (MenuEntity entity : topMenuList) { + List list = this.menuList(appId, entity.getMenuId()); + entity.setChildren(list); + } + return topMenuList; + } + + /** + * 根据应用ID、员工ID查询有权限访问的菜单列表 + * @param appId + * @param userId + * @param menuType + * @param + * @param + * @param menuId + * @return + */ + @Override + public List getMenu(String appId, String userId, String menuType, String menuId) { + // TODO Auto-generated method stub + List returnDatas = menuDao.getMenu(appId, userId, menuType, menuId); + return returnDatas; + } + + /** + * 获得应用下为启用的权限 + * @param appId + * @return + */ + @Override + public List getMenuIsOpenStatus(String appId) { + List returnDatas = menuDao.getMenuIsOpenStatus(appId); + return returnDatas; + } + + /** + * 获取一级菜单 + * @param appId + * @param menuName + * @param parentName + * @param menuType + * @return + */ + @Override + public List getMenuList(String appId, String menuName,String parentName, String menuType) { + List resultDate = new ArrayList<>(); + //根据应用ID获取菜单列表 + List resultList = menuDao.getMenuTop(appId, menuName, parentName, menuType); + for(MenuEntity menuList : resultList) { + MenuEntity menuEntity = new MenuEntity(); + List MenuEntity = menuDao.getParent(menuList.getMenuId(),menuList.getAppId()); + boolean isparent =false; + + if(MenuEntity.size()>0) { + isparent = true; + } + menuEntity.setMenuId(menuList.getMenuId()); + menuEntity.setMenuParentId(menuList.getMenuParentId()); + menuEntity.setMenuName(menuList.getMenuName()); + menuEntity.setAppId(menuList.getAppId()); + menuEntity.setIsParent(isparent); + menuEntity.setHasChildren(isparent); + menuEntity.setMenuType(menuList.getMenuType()); + menuEntity.setCreateDate(menuList.getCreateDate()); + menuEntity.setCreatorId(menuList.getCreatorId()); + menuEntity.setMenuCode(menuList.getMenuCode()); + menuEntity.setMenuIcon(menuList.getMenuIcon()); + menuEntity.setMenuLevel(menuList.getMenuLevel()); + menuEntity.setMenuUrl(menuList.getMenuUrl()); + menuEntity.setOpenStatus(menuList.getOpenStatus()); + menuEntity.setOpenType(menuList.getOpenType()); + menuEntity.setRemark(menuList.getRemark()); + menuEntity.setSort(menuList.getSort()); + menuEntity.setStatus(menuList.getStatus()); + menuEntity.setUpdateDate(menuList.getUpdateDate()); + menuEntity.setUpdatorId(menuList.getUpdatorId()); + resultDate.add(menuEntity); + } + return resultDate; + } + + @Override + public List getMenuChildren(String appId, String menuName,String parentName, String menuType) { +// List result = menuDao.getMenuAll(appId, menuName,parentName,menuType); + List resultDate = new ArrayList(); + List resultDateList = new ArrayList(); +// List topList = menuDao.getMenuTop(appId, menuName,parentName,menuType); +// List resultList = menuDao.getMenuNoTop(appId, menuName,parentName,menuType); + + List resultList = menuDao.getMenuTop(appId, menuName, parentName, menuType); + for(MenuEntity menuList : resultList) { + MenuEntity menuEntity = new MenuEntity(); + List menuentity = menuDao.getParent(menuList.getMenuId(),menuList.getAppId()); + boolean isparent =false; + + if(menuentity.size()>0) { + isparent = true; + getChild(menuEntity, menuentity); + } + menuEntity.setMenuId(menuList.getMenuId()); + menuEntity.setMenuParentId(menuList.getMenuParentId()); + menuEntity.setMenuName(menuList.getMenuName()); + menuEntity.setAppId(menuList.getAppId()); + menuEntity.setIsParent(isparent); + menuEntity.setHasChildren(isparent); + menuEntity.setMenuType(menuList.getMenuType()); + menuEntity.setCreateDate(menuList.getCreateDate()); + menuEntity.setCreatorId(menuList.getCreatorId()); + menuEntity.setMenuCode(menuList.getMenuCode()); + menuEntity.setMenuIcon(menuList.getMenuIcon()); + menuEntity.setMenuLevel(menuList.getMenuLevel()); + menuEntity.setMenuUrl(menuList.getMenuUrl()); + menuEntity.setOpenStatus(menuList.getOpenStatus()); + menuEntity.setOpenType(menuList.getOpenType()); + menuEntity.setRemark(menuList.getRemark()); + menuEntity.setSort(menuList.getSort()); + menuEntity.setStatus(menuList.getStatus()); + menuEntity.setUpdateDate(menuList.getUpdateDate()); + menuEntity.setUpdatorId(menuList.getUpdatorId()); + //menuEntity.setChildren(resultDateList); + resultDate.add(menuEntity); + } + return resultDate; + } + + + private void getChild(MenuEntity menuEntity,List menuList) { + menuEntity.setChildren(menuList); + for(MenuEntity mList : menuList) { + List menuEntityList = menuDao.getParent(mList.getMenuId(),mList.getAppId()); + if(menuEntityList.size()>0) { + menuEntity.setIsParent(true); + menuEntity.setHasChildren(true); + getChild(mList, menuEntityList); + }else { + menuEntity.setIsParent(false); + menuEntity.setHasChildren(false); + } + + } + } + + //20200330 add一个参数authMap ,优化查询速度 + private void getChildRole(MenuEntity menuEntity,List menuList,String roleId, Map authMap) { + menuEntity.setChildren(menuList); + for(MenuEntity mList : menuList) { + List menuEntityList = menuDao.getParent(mList.getMenuId(),mList.getAppId()); + List menuEntityList_new = new ArrayList<>(); + for(MenuEntity mList3:menuEntityList) { +// int flag2 = authService.findAuthByMenuIdRoleId(mList3.getMenuId(), roleId); +// if(flag2 > 0) { +// menuEntityList_new.add(mList3); +// } + // 20200330 modify TASK584 优化系统管理编辑角色的时候 权限查询速度 + if(authMap.containsKey(mList3.getMenuId())) { + menuEntityList_new.add(mList3); + } + } + if(menuEntityList_new.size()>0) { + menuEntity.setIsParent(true); + getChildRole(mList, menuEntityList_new, roleId, authMap); + }else { + menuEntity.setIsParent(false); + } + } + } + + @Override + public List getMenuAll(String appId, String menuName,String parentName, String menuType) { + List result = menuDao.getMenuAll(appId, menuName,parentName,menuType); + return result; + } + + @Override + public List getParent(String menuId,String appId) { + // TODO Auto-generated method stub + List resultDate = new ArrayList(); + List result = menuDao.getParent(menuId,appId); + + for(MenuEntity menuList : result) { + MenuEntity menuEntity = new MenuEntity(); + List MenuEntity = menuDao.getParent(menuList.getMenuId(),menuList.getAppId()); + boolean isparent =false; + if(MenuEntity.size()>0) { + isparent = true; + } + menuEntity.setMenuId(menuList.getMenuId()); + menuEntity.setMenuParentId(menuList.getMenuParentId()); + menuEntity.setMenuName(menuList.getMenuName()); + menuEntity.setAppId(menuList.getAppId()); + menuEntity.setIsParent(isparent); + menuEntity.setHasChildren(isparent); + menuEntity.setMenuType(menuList.getMenuType()); + menuEntity.setCreateDate(menuList.getCreateDate()); + menuEntity.setCreatorId(menuList.getCreatorId()); + menuEntity.setMenuCode(menuList.getMenuCode()); + menuEntity.setMenuIcon(menuList.getMenuIcon()); + menuEntity.setMenuLevel(menuList.getMenuLevel()); + menuEntity.setMenuUrl(menuList.getMenuUrl()); + menuEntity.setOpenStatus(menuList.getOpenStatus()); + menuEntity.setOpenType(menuList.getOpenType()); + menuEntity.setRemark(menuList.getRemark()); + menuEntity.setSort(menuList.getSort()); + menuEntity.setStatus(menuList.getStatus()); + menuEntity.setUpdateDate(menuList.getUpdateDate()); + menuEntity.setUpdatorId(menuList.getUpdatorId()); + resultDate.add(menuEntity); + } + return resultDate; + } + + @Override + public List listRoleMenu(String roleId,String appId) { + List resultDate = new ArrayList<>(); + List resultList = menuDao.listRoleMenu(appId); + if(StringUtils.isNotBlank(roleId)) { + // 20200330 modify TASK584 优化系统管理编辑角色的时候 权限查询速度 + Map authMap = authService.getMapByRoleId(roleId); + for(MenuEntity mList:resultList ) { +// int flag0 = authService.findAuthByMenuIdRoleId(mList.getMenuId(), roleId); +// if(flag0>0 && StringUtils.isNotBlank(roleId)) { + if(authMap.containsKey(mList.getMenuId())) { + MenuEntity menuEntity = new MenuEntity(); + List menuList = menuDao.getParentRole(mList.getMenuId(),mList.getAppId(),roleId); + List menuList_new = new ArrayList<>(); + for(MenuEntity mList2:menuList) { +// int flag1 = authService.findAuthByMenuIdRoleId(mList2.getMenuId(), roleId); +// if(flag1 > 0) { +// menuList_new.add(mList2); +// } + // 20200330 modify TASK584 优化系统管理编辑角色的时候 权限查询速度 + if(authMap.containsKey(mList2.getMenuId())) { + menuList_new.add(mList2); + } + } + + boolean isparent =false; + if(menuList_new.size()>0) { + isparent = true; + getChildRole(menuEntity, menuList_new, roleId, authMap); + } + menuEntity.setMenuId(mList.getMenuId()); + menuEntity.setMenuParentId(mList.getMenuParentId()); + menuEntity.setMenuName(mList.getMenuName()); + menuEntity.setAppId(mList.getAppId()); + menuEntity.setIsParent(isparent); + menuEntity.setMenuType(mList.getMenuType()); + menuEntity.setCreateDate(mList.getCreateDate()); + menuEntity.setCreatorId(mList.getCreatorId()); + menuEntity.setMenuCode(mList.getMenuCode()); + menuEntity.setMenuIcon(mList.getMenuIcon()); + menuEntity.setMenuLevel(mList.getMenuLevel()); + menuEntity.setMenuUrl(mList.getMenuUrl()); + menuEntity.setOpenStatus(mList.getOpenStatus()); + menuEntity.setOpenType(mList.getOpenType()); + menuEntity.setRemark(mList.getRemark()); + menuEntity.setSort(mList.getSort()); + menuEntity.setStatus(mList.getStatus()); + menuEntity.setUpdateDate(mList.getUpdateDate()); + menuEntity.setUpdatorId(mList.getUpdatorId()); + resultDate.add(menuEntity); + } + } + } + return resultDate; + } + + @Override + public int getMenuLevel(String menuParentId) { + return menuDao.getMenuLevel(menuParentId); + } + + @Override + public List getMenuCode(String menuCode, String userId,String appId,String menuType) { + // TODO Auto-generated method stub + List list = menuDao.getMenuCode(menuCode,userId,appId,menuType); + return list; + } + + @Override + public Map getButton(String appId,String userId,String menuCode){ + HashMap rs = Maps.newHashMap(); + //有权限操作的按钮 + List operationButtonlist = menuDao.getMenuCode(menuCode,userId,appId,"button"); + //当前菜单下所有按钮 + List buttonList = menuDao.getButtonByMenuCode(menuCode); + for (MenuEntity menuEntity: + buttonList) { + rs.put(menuEntity.getMenuCode(),false); + for (MenuEntity opreationMenuEntity: + operationButtonlist) { + if(StringUtil.notEmpty(opreationMenuEntity.getMenuCode()) && + StringUtil.notEmpty(menuEntity.getMenuCode()) && + opreationMenuEntity.getMenuCode().equals(menuEntity.getMenuCode()) + ){ + rs.put(menuEntity.getMenuCode(),true); + continue; + } + } + } + return rs; + } + + @Override + public List getMenuByRoleIdAndAppId(String appId,String roleId){ + return menuDao.getMenuByRoleIdAndAppId(appId, roleId); + } + + /** + * 根据staffcode和appid查询改员工的一级菜单、操作权限目录 + * @param appId + * @param staffCode + * @return + * @author hpp + * @Time 2021年5月18日 上午9:45:43 + */ + @Override + public List getMenuListByStaffcode(String appId, String staffCode) { + List resultDate = new ArrayList<>(); + //根据应用ID获取菜单列表 + List resultList = menuDao.getMenuTopByStaffCode(appId, staffCode); + for(MenuEntity menuList : resultList) { + MenuEntity menuEntity = new MenuEntity(); + List MenuEntity = menuDao.getParentByStaffCode(menuList.getMenuId(),menuList.getAppId(), staffCode); + boolean isparent =false; + if(MenuEntity.size()>0) { + isparent = true; + } + menuEntity.setMenuId(menuList.getMenuId()); + menuEntity.setMenuParentId(menuList.getMenuParentId()); + menuEntity.setMenuName(menuList.getMenuName()); + menuEntity.setAppId(menuList.getAppId()); + menuEntity.setIsParent(isparent); + menuEntity.setHasChildren(isparent); + menuEntity.setMenuType(menuList.getMenuType()); + menuEntity.setCreateDate(menuList.getCreateDate()); + menuEntity.setCreatorId(menuList.getCreatorId()); + menuEntity.setMenuCode(menuList.getMenuCode()); + menuEntity.setMenuIcon(menuList.getMenuIcon()); + menuEntity.setMenuLevel(menuList.getMenuLevel()); + menuEntity.setMenuUrl(menuList.getMenuUrl()); + menuEntity.setOpenStatus(menuList.getOpenStatus()); + menuEntity.setOpenType(menuList.getOpenType()); + menuEntity.setRemark(menuList.getRemark()); + menuEntity.setSort(menuList.getSort()); + menuEntity.setStatus(menuList.getStatus()); + menuEntity.setUpdateDate(menuList.getUpdateDate()); + menuEntity.setUpdatorId(menuList.getUpdatorId()); + resultDate.add(menuEntity); + } + return resultDate; + } + + /** + * 查看该员工所拥有的下家菜单、操作权限 + * @param menuId + * @param appId + * @param staffCode + * @return + * @author hpp + * @Time 2021年5月18日 上午10:27:06 + */ + @Override + public List getParentByStaffcode(String menuId, String appId, String staffCode) { + List resultDate = new ArrayList<>(); + List result = menuDao.getParentByStaffCode(menuId,appId, staffCode); + for(MenuEntity menuList : result) { + MenuEntity menuEntity = new MenuEntity(); + List MenuEntity = menuDao.getParentByStaffCode(menuList.getMenuId(),menuList.getAppId(), staffCode); + boolean isparent =false; + if(MenuEntity.size()>0) { + isparent = true; + } + menuEntity.setMenuId(menuList.getMenuId()); + menuEntity.setMenuParentId(menuList.getMenuParentId()); + menuEntity.setMenuName(menuList.getMenuName()); + menuEntity.setAppId(menuList.getAppId()); + menuEntity.setIsParent(isparent); + menuEntity.setHasChildren(isparent); + menuEntity.setMenuType(menuList.getMenuType()); + menuEntity.setCreateDate(menuList.getCreateDate()); + menuEntity.setCreatorId(menuList.getCreatorId()); + menuEntity.setMenuCode(menuList.getMenuCode()); + menuEntity.setMenuIcon(menuList.getMenuIcon()); + menuEntity.setMenuLevel(menuList.getMenuLevel()); + menuEntity.setMenuUrl(menuList.getMenuUrl()); + menuEntity.setOpenStatus(menuList.getOpenStatus()); + menuEntity.setOpenType(menuList.getOpenType()); + menuEntity.setRemark(menuList.getRemark()); + menuEntity.setSort(menuList.getSort()); + menuEntity.setStatus(menuList.getStatus()); + menuEntity.setUpdateDate(menuList.getUpdateDate()); + menuEntity.setUpdatorId(menuList.getUpdatorId()); + resultDate.add(menuEntity); + } + return resultDate; + } + + @Autowired + private RedisTemplate redisTemplate; + + @Override + public TPfMenu get(MenuEntity bo) { + return this.baseMapper.selectOne(buildQueryWrapper(bo)); + } + + @Override + public Page findPage(MenuEntity bo) { + Page page = new Page(bo.getPageNum(), bo.getPageSize()); + return this.baseMapper.findPage(page, bo); + } + + // 6.0.0 + + @Override + public List getMenuByPostCode(String appId, String postCode, String menuType, String menuId) { + List list = menuDao.getMenuByPostCode(appId, postCode, menuType, menuId); + return list; + } + + @Override + public List getMenuBuCode(String menuCode, String postCode,String appId,String menuType) { + List list = menuDao.getMenuCode(menuCode,postCode,appId,menuType); + return list; + } + + @Override + public Map getButtonByCode(String appId, String postCode, String menuCode) { + HashMap rs = Maps.newHashMap(); + //有权限操作的按钮 + List operationButtonlist = menuDao.getMenuBuCode(menuCode,postCode,appId,"button"); + //当前菜单下所有按钮 + List buttonList = menuDao.getButtonByMenuCode(menuCode); + for (MenuEntity menuEntity: + buttonList) { + rs.put(menuEntity.getMenuCode(),false); + for (MenuEntity opreationMenuEntity: + operationButtonlist) { + if(StringUtil.notEmpty(opreationMenuEntity.getMenuCode()) && + StringUtil.notEmpty(menuEntity.getMenuCode()) && + opreationMenuEntity.getMenuCode().equals(menuEntity.getMenuCode()) + ){ + rs.put(menuEntity.getMenuCode(),true); + continue; + } + } + } + return rs; + } + + @Override + public List getMenListByAppId(String appId) { + return this.baseMapper.findMenuList(appId); + } + + @Override + public void deleteMenuByAppId(String appId) { + this.baseMapper.deleteMenuByAppId(appId); + } + + private LambdaQueryWrapper buildQueryWrapper(MenuEntity bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(ObjectUtil.isNotEmpty(bo.getMenuId()), TPfMenu::getMenuId, bo.getMenuId()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getAppId()), TPfMenu::getAppId, bo.getAppId()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getMenuParentId()), TPfMenu::getMenuParentId, bo.getMenuParentId()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getMenuCode()), TPfMenu::getMenuCode, bo.getMenuCode()); + lqw.like(ObjectUtil.isNotEmpty(bo.getMenuName()), TPfMenu::getMenuName, bo.getMenuName()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getMenuType()), TPfMenu::getMenuType, bo.getMenuType()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getMenuIcon()), TPfMenu::getMenuIcon, bo.getMenuIcon()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getMenuUrl()), TPfMenu::getMenuUrl, bo.getMenuUrl()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getStatus()), TPfMenu::getStatus, bo.getStatus()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getCreatorId()), TPfMenu::getCreatorId, bo.getCreatorId()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getUpdatorId()), TPfMenu::getUpdatorId, bo.getUpdatorId()); + lqw.like(ObjectUtil.isNotEmpty(bo.getRemark()), TPfMenu::getRemark, bo.getRemark()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getMenuLevel()), TPfMenu::getMenuLevel, bo.getMenuLevel()); + return lqw; + } + +} diff --git a/usm-core/src/main/java/com/blueland/service/impl/ModuleServiceImpl.java b/usm-core/src/main/java/com/blueland/service/impl/ModuleServiceImpl.java new file mode 100644 index 0000000..b75cb63 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/service/impl/ModuleServiceImpl.java @@ -0,0 +1,57 @@ +package com.blueland.service.impl; + + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.blueland.model.TPfModule; +import com.blueland.service.IModuleService; +import org.springframework.stereotype.Service; + +import com.blueland.bo.ModuleEntity; +import com.blueland.dao.ModuleDao; + +import java.util.List; + +@Service +public class ModuleServiceImpl extends ServiceImpl implements IModuleService { + + @Override + public Page findPage(ModuleEntity bo){ + Page page = new Page(bo.getPageNum(), bo.getPageSize()); + return this.baseMapper.findPage(page, bo); + } + + @Override + public List findList(ModuleEntity bo) { + return this.baseMapper.findList(bo); + } + + @Override + public TPfModule get(ModuleEntity bo){ + return this.baseMapper.selectOne(buildQueryWrapper(bo)); + } + + private LambdaQueryWrapper buildQueryWrapper(ModuleEntity bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(ObjectUtil.isNotEmpty(bo.getModuleId()), TPfModule::getModuleId, bo.getModuleId()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getCode()), TPfModule::getCode, bo.getCode()); + lqw.like(ObjectUtil.isNotEmpty(bo.getName()), TPfModule::getName, bo.getName()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getAppId()), TPfModule::getAppId, bo.getAppId()); + lqw.like(ObjectUtil.isNotEmpty(bo.getAppName()), TPfModule::getAppName, bo.getAppName()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getAccessUrl()), TPfModule::getAccessUrl, bo.getAccessUrl()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getMenuSys()), TPfModule::getMenuSys, bo.getMenuSys()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getParentId()), TPfModule::getParentId, bo.getParentId()); + lqw.like(ObjectUtil.isNotEmpty(bo.getParentName()), TPfModule::getParentName, bo.getParentName()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getHierarchy()), TPfModule::getHierarchy, bo.getHierarchy()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getStatus()), TPfModule::getStatus, bo.getStatus()); + lqw.like(ObjectUtil.isNotEmpty(bo.getRemark()), TPfModule::getRemark, bo.getRemark()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getCreateUserId()), TPfModule::getCreateUserId, bo.getCreateUserId()); + lqw.like(ObjectUtil.isNotEmpty(bo.getCreateUserName()), TPfModule::getCreateUserName, bo.getCreateUserName()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getUpdateUserId()), TPfModule::getUpdateUserId, bo.getUpdateUserId()); + lqw.like(ObjectUtil.isNotEmpty(bo.getUpdateUserName()), TPfModule::getUpdateUserName, bo.getUpdateUserName()); + return lqw; + } +} diff --git a/usm-core/src/main/java/com/blueland/service/impl/ParameterServiceImpl.java b/usm-core/src/main/java/com/blueland/service/impl/ParameterServiceImpl.java new file mode 100644 index 0000000..f6d319d --- /dev/null +++ b/usm-core/src/main/java/com/blueland/service/impl/ParameterServiceImpl.java @@ -0,0 +1,103 @@ +package com.blueland.service.impl; + + +import java.util.List; +import java.util.Map; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.blueland.model.TPfParameter; +import com.blueland.service.IParameterService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.blueland.bo.DictEntity; +import com.blueland.bo.ParameterEntity; +import com.blueland.bo.RoleEntity; +import com.blueland.dao.ParameterDao; + +@Service +public class ParameterServiceImpl extends ServiceImpl implements IParameterService { + @Autowired + //Parameter对应的DAO类,主要用于数据库的增删改查等操作 + private ParameterDao parameterDao; + + @Override + public Page findPageList(Map queryParams, int parseInt, int parseInt2) { + // TODO Auto-generated method stub + Page page = new Page<>(parseInt, parseInt2); + Page result = parameterDao.findPageListNew(page, queryParams); + return result; + } + + @Override + public Page parameterListPage(Map queryParams, int curPageSize, int curPage) { + Page page = new Page<>(curPage, curPageSize); + Page result = parameterDao.parameterPage(page, queryParams); + return result; + } + + @Override + public ParameterEntity getBykey(String key) { + return parameterDao.getByKey(key); + } + + @Override + public String getValueByKey(String key) { + return parameterDao.getValueByKey(key); + } + + @Override + public ParameterEntity getObj(ParameterEntity obj) { + // TODO Auto-generated method stub + return parameterDao.getObj(obj); + } + + @Override + public TPfParameter get(ParameterEntity bo) { + return this.baseMapper.selectOne(buildQueryWrapper(bo)); + } + + @Override + public Page findPage(ParameterEntity bo) { + Page page = new Page(bo.getPageNum(), bo.getPageSize()); + return this.baseMapper.findPage(page, bo); + } + + @Override + public List findList(ParameterEntity bo) { + return this.baseMapper.findList(bo); + } + + @Override + public List selectConfigByKey(List keys) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().in(TPfParameter::getPkey, keys); + List list = this.baseMapper.selectList(queryWrapper); + return list; + } + + @Override + public List selectConfigByValue(List values) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().in(TPfParameter::getPvalue, values); + List list = this.baseMapper.selectList(queryWrapper); + return list; + } + + + private LambdaQueryWrapper buildQueryWrapper(ParameterEntity bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(ObjectUtil.isNotEmpty(bo.getPid()), TPfParameter::getPid, bo.getPid()); + lqw.like(ObjectUtil.isNotEmpty(bo.getDescription()), TPfParameter::getDescription, bo.getDescription()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getPkey()), TPfParameter::getPkey, bo.getPkey()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getPvalue()), TPfParameter::getPvalue, bo.getPvalue()); + lqw.like(ObjectUtil.isNotEmpty(bo.getAppId()), TPfParameter::getAppId, bo.getAppId()); + return lqw; + } + +} diff --git a/usm-core/src/main/java/com/blueland/service/impl/PubOrgServiceImpl.java b/usm-core/src/main/java/com/blueland/service/impl/PubOrgServiceImpl.java new file mode 100644 index 0000000..3eec729 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/service/impl/PubOrgServiceImpl.java @@ -0,0 +1,78 @@ +package com.blueland.service.impl; + + +import java.util.List; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.blueland.service.IPubOrgService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.blueland.bo.Org; +import com.blueland.bo.PubOrgEntity; +import com.blueland.dao.PubOrgDao; + +@Service +public class PubOrgServiceImpl extends ServiceImpl implements IPubOrgService { + @Autowired + //TpubOrg对应的DAO类,主要用于数据库的增删改查等操作 + private PubOrgDao pubOrgDao; + + @Override + public PubOrgEntity findOrgById(String id) { + return pubOrgDao.selectById(id); + } + + @Override + public List getListNoPage(Org org) { + // TODO Auto-generated method stub + return pubOrgDao.getListNoPage(org); + } + + @Override + public PubOrgEntity get(PubOrgEntity bo) { + return this.baseMapper.selectOne(buildQueryWrapper(bo)); + } + + @Override + public Page findPage(PubOrgEntity bo) { + Page page = new Page(bo.getPageNum(), bo.getPageSize()); + return this.baseMapper.findPage(page, bo); + } + + @Override + public List findList(PubOrgEntity bo) { + return this.baseMapper.findList(bo); + } + + private LambdaQueryWrapper buildQueryWrapper(PubOrgEntity bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(ObjectUtil.isNotEmpty(bo.getOrgId()), PubOrgEntity::getOrgId, bo.getOrgId()); + lqw.like(ObjectUtil.isNotEmpty(bo.getOrgName()), PubOrgEntity::getOrgName, bo.getOrgName()); + lqw.like(ObjectUtil.isNotEmpty(bo.getOrgFullName()), PubOrgEntity::getOrgFullName, bo.getOrgFullName()); + lqw.like(ObjectUtil.isNotEmpty(bo.getOrgFullPathName()), PubOrgEntity::getOrgFullPathName, bo.getOrgFullPathName()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getOrgFullPathId()), PubOrgEntity::getOrgFullPathId, bo.getOrgFullPathId()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getOrgParentId()), PubOrgEntity::getOrgParentId, bo.getOrgParentId()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getOrgType()), PubOrgEntity::getOrgType, bo.getOrgType()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getOrgLevel()), PubOrgEntity::getOrgLevel, bo.getOrgLevel()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getOrgAreaType()), PubOrgEntity::getOrgAreaType, bo.getOrgAreaType()); + lqw.like(ObjectUtil.isNotEmpty(bo.getOrgWorkAddress()), PubOrgEntity::getOrgWorkAddress, bo.getOrgWorkAddress()); + lqw.like(ObjectUtil.isNotEmpty(bo.getOrgWorkPhone()), PubOrgEntity::getOrgWorkPhone, bo.getOrgWorkPhone()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getOrgPrincipal()), PubOrgEntity::getOrgPrincipal, bo.getOrgPrincipal()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getOrgStatus()), PubOrgEntity::getOrgStatus, bo.getOrgStatus()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getFundCode()), PubOrgEntity::getFundCode, bo.getFundCode()); + lqw.like(ObjectUtil.isNotEmpty(bo.getFundName()), PubOrgEntity::getFundName, bo.getFundName()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getCompanyId()), PubOrgEntity::getCompanyId, bo.getCompanyId()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getOrgBranchLeader()), PubOrgEntity::getOrgBranchLeader, bo.getOrgBranchLeader()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getDeptId()), PubOrgEntity::getDeptId, bo.getDeptId()); + lqw.like(ObjectUtil.isNotEmpty(bo.getRemark()), PubOrgEntity::getRemark, bo.getRemark()); + lqw.like(ObjectUtil.isNotEmpty(bo.getDeptName()), PubOrgEntity::getDeptName, bo.getDeptName()); + lqw.like(ObjectUtil.isNotEmpty(bo.getCompanyName()), PubOrgEntity::getCompanyName, bo.getCompanyName()); + return lqw; + } + +} diff --git a/usm-core/src/main/java/com/blueland/service/impl/PubUserServiceImpl.java b/usm-core/src/main/java/com/blueland/service/impl/PubUserServiceImpl.java new file mode 100644 index 0000000..def3380 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/service/impl/PubUserServiceImpl.java @@ -0,0 +1,103 @@ +package com.blueland.service.impl; + + +import java.util.List; +import java.util.Map; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.blueland.model.TPubUser; +import com.blueland.service.IPubUserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.blueland.bo.PubUserEntity; +import com.blueland.bo.RoleUserRest; +import com.blueland.dao.PubUserDao; +import com.google.common.collect.Maps; + +@Service +public class PubUserServiceImpl extends ServiceImpl implements IPubUserService { + + @Autowired + private PubUserDao pubUserDao; + + /** + * + * @param appId + * @param roleId + * @param companyId + * @param deptId + * @param orgId + * @param curPage + * @param curPageSize + * @return + * @author gaoc + */ + @Override + public Page getAppRoleUser(String appId, String roleId, String companyId, String deptId, + String orgId, Integer curPage, Integer curPageSize) { + // TODO Auto-generated method stub + Map params = Maps.newHashMap(); + Page page = new Page<>(curPage, curPageSize); + params.put("appId", appId); + params.put("roleId", roleId); + params.put("companyId", companyId); + params.put("deptId", deptId); + params.put("orgId", orgId); + Page result = pubUserDao.getAppRoleUserPage(page, params); + return result; + } + + + @Override + public TPubUser get(PubUserEntity bo) { + return this.baseMapper.selectOne(buildQueryWrapper(bo)); + } + + @Override + public List findList(PubUserEntity bo) { + return this.baseMapper.findList(bo); + } + + @Override + public Page findPage(PubUserEntity bo) { + Page page = new Page(bo.getPageNum(), bo.getPageSize()); + return this.baseMapper.findPage(page, bo); + } + + private LambdaQueryWrapper buildQueryWrapper(PubUserEntity bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(ObjectUtil.isNotEmpty(bo.getUserId()), TPubUser::getUserId, bo.getUserId()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getUserCode()), TPubUser::getUserCode, bo.getUserCode()); + lqw.like(ObjectUtil.isNotEmpty(bo.getUserName()), TPubUser::getUserName, bo.getUserName()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getUserSex()), TPubUser::getUserSex, bo.getUserSex()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getUserAge()), TPubUser::getUserAge, bo.getUserAge()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getCompanyId()), TPubUser::getCompanyId, bo.getCompanyId()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getOrgId()), TPubUser::getOrgId, bo.getOrgId()); + lqw.like(ObjectUtil.isNotEmpty(bo.getUserMobile()), TPubUser::getUserMobile, bo.getUserMobile()); + lqw.like(ObjectUtil.isNotEmpty(bo.getUserMail()), TPubUser::getUserMail, bo.getUserMail()); + lqw.like(ObjectUtil.isNotEmpty(bo.getUserHomeAddree()), TPubUser::getUserHomeAddree, bo.getUserHomeAddree()); + lqw.like(ObjectUtil.isNotEmpty(bo.getUserWorkAddress()), TPubUser::getUserWorkAddress, bo.getUserWorkAddress()); + lqw.like(ObjectUtil.isNotEmpty(bo.getUserHomePhone()), TPubUser::getUserHomePhone, bo.getUserHomePhone()); + lqw.like(ObjectUtil.isNotEmpty(bo.getUserWorkPhone()), TPubUser::getUserWorkPhone, bo.getUserWorkPhone()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getPositionId()), TPubUser::getPositionId, bo.getPositionId()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getPluralityPositionId()), TPubUser::getPluralityPositionId, bo.getPluralityPositionId()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getTitleId()), TPubUser::getTitleId, bo.getTitleId()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getPluralityTitleId()), TPubUser::getPluralityTitleId, bo.getPluralityTitleId()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getUserStatus()), TPubUser::getUserStatus, bo.getUserStatus()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getSalt()), TPubUser::getSalt, bo.getSalt()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getPassword()), TPubUser::getPassword, bo.getPassword()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getUserCreator()), TPubUser::getUserCreator, bo.getUserCreator()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getDeptId()), TPubUser::getDeptId, bo.getDeptId()); + lqw.like(ObjectUtil.isNotEmpty(bo.getRemark()), TPubUser::getRemark, bo.getRemark()); + lqw.like(ObjectUtil.isNotEmpty(bo.getDeptName()), TPubUser::getDeptName, bo.getDeptName()); + lqw.like(ObjectUtil.isNotEmpty(bo.getCompanyName()), TPubUser::getCompanyName, bo.getCompanyName()); + lqw.like(ObjectUtil.isNotEmpty(bo.getOrgName()), TPubUser::getOrgName, bo.getOrgName()); + return lqw; + } + +} diff --git a/usm-core/src/main/java/com/blueland/service/impl/Role2userServiceImpl.java b/usm-core/src/main/java/com/blueland/service/impl/Role2userServiceImpl.java new file mode 100644 index 0000000..cde1e0c --- /dev/null +++ b/usm-core/src/main/java/com/blueland/service/impl/Role2userServiceImpl.java @@ -0,0 +1,46 @@ +package com.blueland.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.blueland.bo.AppIdUserIdAppIdRoleIdDTO; +import com.blueland.bo.Role2userEntity; +import com.blueland.constant.Constant; +import com.blueland.dao.Role2userDao; +import com.blueland.model.TPfRole2user; +import com.blueland.service.IRole2userService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class Role2userServiceImpl extends ServiceImpl implements IRole2userService { + + @Autowired + private Role2userDao role2userDao; + + @Override + public List findListRoleId() { + return role2userDao.findListRoleId(""); + } + + @Override + public Long selectRoleUserByCode(String appId, String roleId, String postCode) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().eq(TPfRole2user:: getAppId, appId); + queryWrapper.lambda().eq(TPfRole2user:: getRoleId, roleId); + queryWrapper.lambda().eq(TPfRole2user:: getSTATUS, "Y"); + queryWrapper.lambda().eq(TPfRole2user:: getStaffPostCode, postCode); + return this.baseMapper.selectCount(queryWrapper); + } + + @Override + public void deleteByAppId(String appId) { + this.baseMapper.deleteByAppId(appId); + } + + @Override + public List selectListByAppId(String appId) { + return this.baseMapper.selectListByAppId(appId); + } +} diff --git a/usm-core/src/main/java/com/blueland/service/impl/RoleServiceImpl.java b/usm-core/src/main/java/com/blueland/service/impl/RoleServiceImpl.java new file mode 100644 index 0000000..3c70cb4 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/service/impl/RoleServiceImpl.java @@ -0,0 +1,229 @@ +package com.blueland.service.impl; + + +/** + * @author 代码自动生成工具 + * @version 1.0 + * @since + */ + +import java.util.*; +import java.util.stream.Collectors; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.blueland.constant.RedisConstant; +import com.blueland.bo.*; +import com.blueland.dao.RoleDao; +import com.blueland.model.TPfRole; +import com.blueland.model.TPfRole2user; +import com.blueland.model.TUcStaff; +import com.blueland.service.IRole2userService; +import com.blueland.service.IRoleService; + +import com.blueland.service.SysRedisService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import static com.blueland.constant.ResponseConstant.*; + + +@Service +@Slf4j +public class RoleServiceImpl extends ServiceImpl implements IRoleService { + @Autowired + //Role对应的DAO类,主要用于数据库的增删改查等操作 + private RoleDao roleDao; + + @Autowired + private TucStaffServiceImpl pubUserService; + + @Autowired + IRole2userService role2UserServiceImpl; + + @Autowired + private SysRedisService sysRedisService; + + /** + * 根据应用ID查询角色列表 + * @param + * @param curPage + * @param curPageSize + * @return + */ + @Override + public Page getAppRole(Map map, Integer curPage, Integer curPageSize) { + // TODO Auto-generated method stub + Page page = new Page<>(curPage, curPageSize); + Page result = roleDao.getAppRolePage(page, map); + return result; + } + + @Override + public void deleteRole(Map queryParams) { + // TODO Auto-generated method stub + roleDao.deleteRole(queryParams); + } + + @Override + public List findRoleUserBy(Map map) { + List result = roleDao.findRoleUserBy(map); + return result; + } + + @Override + public List findRolesByUser(String appId, String userId) { + return roleDao.findRolesByUser(appId, userId); + } + + @Override + public void saveUser(Role2userEntity role2user) { + // TODO Auto-generated method stub + roleDao.saveUser(role2user); + } + + @Override + public int findUserId(String appId, String roleId, String userId) { + int result = roleDao.findUserId(appId, roleId,userId); + return result; + } + + @Override + public int findAppidByRoleId(String appId, String roleId) { + int result = roleDao.findAppidByRoleId(appId, roleId); + return result; + } + + @Override + public int deleteUserId(String appId, String roleId, String userId) { + // 从redis中删除对应缓存 + try { + sysRedisService.removeRoleByKey(userId); + } catch (Exception e) { + log.info("删除reids数据失败,userId:" + userId); + } + int result = roleDao.deleteUserId(appId, roleId,userId); + return result; + } + + @Override + public void deluser(String roleId, String appId) { + roleDao.deluser(roleId,appId); + } + + @Override + public List findRoleTenantidByUserid(String userId) { + return roleDao.findRoleTenantidByUserid(userId); + } + + @Transactional + @Override + public Map saveRoles(RoleEntity model) { + Map result = new HashMap<>(); + String[] userIds = model.getUserId(); + roleDao.deluser(model.getRoleId(),model.getAppId()); + if(userIds.length>0) { + List codes= Arrays.asList(userIds); + List userlist = pubUserService.getListByPostCodes(codes); + Map userMap = new HashMap<>(); + for (TUcStaff tucStaff : userlist) { + userMap.put(tucStaff.getStaffPostCode(), tucStaff); + } + for(int i=0;i findPage(RoleEntity bo) { + Page page = new Page(bo.getPageNum(), bo.getPageSize()); + return this.baseMapper.findPage(page, bo); + } + + @Override + public List findRolesByPostCode(String appId, String postCode) { + return this.baseMapper.findRolesByPostCode(appId, postCode); + } + + @Override + public List findRoleAllByPostCode(String postCode) { + return roleDao.findRoleAllByPostCode(postCode); + } + + @Override + public int deleteByPostCode(String appId, String roleId, String postCode) { + int result = roleDao.deleteByPostCode(appId, roleId,postCode); + return result; + } + + @Override + public List findRoleUserByCode(String appId, String roleId, String postCode) { + return roleDao.findRoleUserByCode(appId, roleId, postCode); + } + + @Override + public void deleteByAppId(String appId) { + this.baseMapper.deleteByAppId(appId); + } + + @Override + public List findListByAppId(String appId) { + return this.baseMapper.findListByAppId(appId); + } + + private LambdaQueryWrapper buildQueryWrapper(RoleEntity bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(ObjectUtil.isNotEmpty(bo.getRoleId()), TPfRole::getRoleId, bo.getRoleId()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getAppId()), TPfRole::getAppId, bo.getAppId()); + lqw.like(ObjectUtil.isNotEmpty(bo.getRoleName()), TPfRole::getRoleName, bo.getRoleName()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getRoleType()), TPfRole::getRoleType, bo.getRoleType()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getRoleModule()), TPfRole::getRoleModule, bo.getRoleModule()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getOrgId()), TPfRole::getOrgId, bo.getOrgId()); + lqw.like(ObjectUtil.isNotEmpty(bo.getRemark()), TPfRole::getRemark, bo.getRemark()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getStatus()), TPfRole::getStatus, bo.getStatus()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getCreatorId()), TPfRole::getCreatorId, bo.getCreatorId()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getUpdatorId()), TPfRole::getUpdatorId, bo.getUpdatorId()); + return lqw; + } +} diff --git a/usm-core/src/main/java/com/blueland/service/impl/SysOplogServiceImpl.java b/usm-core/src/main/java/com/blueland/service/impl/SysOplogServiceImpl.java new file mode 100644 index 0000000..b79adbc --- /dev/null +++ b/usm-core/src/main/java/com/blueland/service/impl/SysOplogServiceImpl.java @@ -0,0 +1,63 @@ +package com.blueland.service.impl; + + +import java.util.List; +import java.util.Map; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.blueland.model.TPfSysOplog; +import com.blueland.service.ISysOplogService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.blueland.bo.SysOplogEntity; +import com.blueland.dao.SysOplogDao; + +@Service +public class SysOplogServiceImpl extends ServiceImpl implements ISysOplogService { + @Autowired + //SysOplog对应的DAO类,主要用于数据库的增删改查等操作 + private SysOplogDao sysOplogDao; + + /** + * 根据条件查询列表(分页) + */ + @Override + public Page findSysOplogPageListByParams(Map tagSysOplog,int curPage,int pageSize){ + Page page = new Page<>(curPage, pageSize); + Page list = sysOplogDao.findSysOplogPageByParams(page, tagSysOplog); + + return list; + } + + @Override + public TPfSysOplog get(SysOplogEntity model) { + return sysOplogDao.selectOne(buildQueryWrapper(model)); + } + + @Override + public Page findPage(SysOplogEntity model) { + Page page = new Page(model.getPageNum(), model.getPageSize()); + return this.baseMapper.findPage(page, model); + } + + private LambdaQueryWrapper buildQueryWrapper(SysOplogEntity bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(ObjectUtil.isNotEmpty(bo.getId()), TPfSysOplog::getId, bo.getId()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getUserId()), TPfSysOplog::getUserId, bo.getUserId()); + lqw.like(ObjectUtil.isNotEmpty(bo.getUserName()), TPfSysOplog::getUserName, bo.getUserName()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getBizId()), TPfSysOplog::getBizId, bo.getBizId()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getBizType()), TPfSysOplog::getBizType, bo.getBizType()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getType()), TPfSysOplog::getType, bo.getType()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getStatus()), TPfSysOplog::getStatus, bo.getStatus()); + lqw.like(ObjectUtil.isNotEmpty(bo.getContent()), TPfSysOplog::getContent, bo.getContent()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getAceessIp()), TPfSysOplog::getAceessIp, bo.getAceessIp()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getAceessBrowse()), TPfSysOplog::getAceessBrowse, bo.getAceessBrowse()); + lqw.like(ObjectUtil.isNotEmpty(bo.getRemark()), TPfSysOplog::getRemark, bo.getRemark()); + return lqw; + } +} diff --git a/usm-core/src/main/java/com/blueland/service/impl/SysPvlogServiceImpl.java b/usm-core/src/main/java/com/blueland/service/impl/SysPvlogServiceImpl.java new file mode 100644 index 0000000..bfba968 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/service/impl/SysPvlogServiceImpl.java @@ -0,0 +1,63 @@ +package com.blueland.service.impl; + + +import java.util.List; +import java.util.Map; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.blueland.model.TPfSysPvlog; +import com.blueland.service.ISysPvlogService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.blueland.bo.SysPvlogEntity; +import com.blueland.dao.SysPvlogDao; + +@Service +public class SysPvlogServiceImpl extends ServiceImpl implements ISysPvlogService { + @Autowired + //SysPvlog对应的DAO类,主要用于数据库的增删改查等操作 + private SysPvlogDao sysPvlogDao; + + /** + * 根据条件查询列表(分页) + */ + @Override + public Page findSysPvlogPageListByParams(Map tagSysPvlog,int curPage,int pageSize){ + Page page = new Page<>(curPage,pageSize); + Page list = sysPvlogDao.findSysPvlogPageByParams(page, tagSysPvlog); + + return list; + } + + @Override + public TPfSysPvlog get(SysPvlogEntity bo){ + return sysPvlogDao.selectOne(buildQueryWrapper(bo)); + } + + @Override + public Page findPage(SysPvlogEntity bo) { + Page page = new Page(bo.getPageNum(), bo.getPageSize()); + return this.baseMapper.findPage(page, bo); + } + + private LambdaQueryWrapper buildQueryWrapper(SysPvlogEntity bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(ObjectUtil.isNotEmpty(bo.getId()), TPfSysPvlog::getId, bo.getId()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getUserId()), TPfSysPvlog::getUserId, bo.getUserId()); + lqw.like(ObjectUtil.isNotEmpty(bo.getUserName()), TPfSysPvlog::getUserName, bo.getUserName()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getBizId()), TPfSysPvlog::getBizId, bo.getBizId()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getBizType()), TPfSysPvlog::getBizType, bo.getBizType()); + lqw.like(ObjectUtil.isNotEmpty(bo.getAceessTitle()), TPfSysPvlog::getAceessTitle, bo.getAceessTitle()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getAceessUrl()), TPfSysPvlog::getAceessUrl, bo.getAceessUrl()); + lqw.like(ObjectUtil.isNotEmpty(bo.getAceessSource()), TPfSysPvlog::getAceessSource, bo.getAceessSource()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getAceessIp()), TPfSysPvlog::getAceessIp, bo.getAceessIp()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getAceessBrowse()), TPfSysPvlog::getAceessBrowse, bo.getAceessBrowse()); + lqw.like(ObjectUtil.isNotEmpty(bo.getRemark()), TPfSysPvlog::getRemark, bo.getRemark()); + return lqw; + } +} diff --git a/usm-core/src/main/java/com/blueland/service/impl/SysRedisServiceImpl.java b/usm-core/src/main/java/com/blueland/service/impl/SysRedisServiceImpl.java new file mode 100644 index 0000000..3743a68 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/service/impl/SysRedisServiceImpl.java @@ -0,0 +1,542 @@ +package com.blueland.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import com.blueland.bo.*; +import com.blueland.constant.RedisConstant; +import com.blueland.core.util.RedisUtils; +import com.blueland.core.util.UserUtils; +import com.blueland.dao.*; +import com.blueland.model.TUcOrg; +import com.blueland.model.TUcStaff; +import com.blueland.service.ITucStaffService; +import com.blueland.service.SysRedisService; +import com.google.common.base.Joiner; +import com.google.common.collect.Lists; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.Cursor; +import org.springframework.data.redis.core.ScanOptions; +import org.springframework.stereotype.Service; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * @auther xcy + * @create 2022-06-14 9:16 + */ +@Service +public class SysRedisServiceImpl implements SysRedisService { + + private static final Logger log = LoggerFactory.getLogger(SysRedisServiceImpl.class); + + @Autowired + private DictDao dictDao; + + @Autowired + private Role2userDao role2userDao; + + @Autowired + private MenuDao menuDao; + + @Autowired + private TucStaffDao tucStaffDao; + + @Autowired + private TucOrgDao tucOrgDao; + + @Autowired + RedisUtils redisUtils; + + /** + * 初始化字典数据 + */ + @Override + public void initDict() { + try { + // 查询所有字典数据,不区分租户 + List list = dictDao.getList(""); + if (CollUtil.isNotEmpty(list)) { + // 获取所有租户编码集合 + List appIds = list.stream().map(x -> x.getAppId()). + collect(Collectors.toList()).stream().distinct().collect(Collectors.toList()); + for (String appId : appIds) { + // 删除所有key + redisUtils.deleteAll(appId + ":" + RedisConstant.SYS_DICT); + List cacheList = list.stream().filter(x -> x.getAppId().equals(appId)).collect(Collectors.toList()); + if (ObjectUtil.isNotEmpty(cacheList)) { + Map dictMap = cacheList + .stream() + .collect(Collectors.toMap(el -> el.getDictParentId() + ":" + el.getDictCode(), e -> e)); + redisUtils.hPutAll(appId + ":" + RedisConstant.SYS_DICT, dictMap); + } + } + } + } catch (Exception e) { + log.error("字典初始化失败:" + e.getMessage()); + } + } + + /** + * 更新对应租户的字典数据 + */ + @Override + public void flushDict() { + try { + // 根据租户查询对应的数据进行更新 + String appId = UserUtils.getTenantId(); + List list = dictDao.getList(appId); + if (CollUtil.isNotEmpty(list)) { + redisUtils.deleteAll(appId + ":" + RedisConstant.SYS_DICT); + Map dictMap = list + .stream() + .collect(Collectors.toMap(el -> el.getDictParentId() + ":" + el.getDictCode(), e -> e)); + redisUtils.hPutAll(appId + ":" + RedisConstant.SYS_DICT, dictMap); + } + } catch (Exception e) { + log.error("字典刷新失败:" + e.getMessage()); + } + } + + @Override + public void saveOrUpdateDict(DictEntity model) { + try { + String appId = UserUtils.getTenantId(); + String item = model.getDictParentId() + ":" + model.getDictCode(); + if ("Y".equals(model.getStatus())) { + redisUtils.hset(appId + ":" + RedisConstant.SYS_DICT, item, model); + } else { + redisUtils.hdel(appId + ":" + RedisConstant.SYS_DICT, item); + } + } catch (Exception e) { + log.error("字典刷新失败:" + e.getMessage()); + } + } + + @Override + public List getDictListByCode(String code) { + String appId = UserUtils.getTenantId(); + List list = new ArrayList<>(); + ScanOptions options = new ScanOptions.ScanOptionsBuilder() + .match(RedisConstant.WILDCARD + code) + .count(100) + .build(); + Cursor> cursor = redisUtils.hashScan(appId + ":" + RedisConstant.SYS_DICT, options); + Map.Entry entry = null; + while (cursor.hasNext()) { + entry = cursor.next(); + list.add(entry.getValue()); + } + cursor.close(); + return list; + } + + @Override + public List getDictListByParentCode(String parentCode) { + String appId = UserUtils.getTenantId(); + List list = new ArrayList<>(); + ScanOptions options = new ScanOptions.ScanOptionsBuilder() + .match(parentCode + RedisConstant.DIVISION + RedisConstant.WILDCARD) + .count(100) + .build(); + Cursor> cursor = redisUtils.hashScan(appId + ":" + RedisConstant.SYS_DICT, options); + Map.Entry entry = null; + while (cursor.hasNext()) { + entry = cursor.next(); + list.add(entry.getValue()); + } + cursor.close(); + return list; + } + + @Override + public List getDictList() { + String appId = UserUtils.getTenantId(); + List list = redisUtils.hValues(appId + ":" + RedisConstant.SYS_DICT, DictEntity.class); + return list; + } + + public DictEntity getDict(String code, String parentCode) { + String appId = UserUtils.getTenantId(); + DictEntity dict = redisUtils.hget(appId + ":" + RedisConstant.SYS_DICT, parentCode + ":" + code, DictEntity.class); + return dict; + } + + @Override + public DictEntity getDictByRedisKey(String item) { + String appId = UserUtils.getTenantId(); + String key = appId + ":" + RedisConstant.SYS_DICT; + DictEntity dict = redisUtils.hget(key, item, DictEntity.class); + return dict; + } + + /** + * 加载租户id:员工编码 对应 List<租户id:角色id>的redis数据 + */ + @Override + public void initRole() { + try { + List list = role2userDao.findListRoleId(""); + if (CollUtil.isNotEmpty(list)) { + // 获取所有租户编码集合 + List appIds = list.stream().map(x -> x.getAppId()). + collect(Collectors.toList()).stream().distinct().collect(Collectors.toList()); + for (String appId : appIds) { + // 删除所有key + redisUtils.deleteAll(appId + ":" + RedisConstant.SYS_ROLE); + List roleList = list.stream().filter(x -> x.getAppId().equals(appId)).collect(Collectors.toList()); + + Map> roleMap = roleList.stream() + .collect(Collectors.toMap(e1 -> Joiner.on(":").join(Lists.newArrayList(e1.getAppId(), e1.getUserId())), e2 -> e2.getList())); + redisUtils.hPutAll(appId + ":" + RedisConstant.SYS_ROLE, roleMap); + } + } + } catch (Exception e) { + log.error("角色加载失败:" + e.getMessage()); + } + } + + @Override + public void flushRole() { + try { + // 根据租户查询对应的数据进行更新 + String appId = UserUtils.getTenantId(); + List list = role2userDao.findListRoleId(appId); + if (ObjectUtil.isNotEmpty(list)) { + // 删除所有key + redisUtils.deleteAll(appId + ":" + RedisConstant.SYS_ROLE); + //重新缓存新的数据 + Map> roleMap = list.stream() + .collect(Collectors.toMap(e1 -> Joiner.on(":").join(Lists.newArrayList(e1.getAppId(), e1.getUserId())), e2 -> e2.getList())); + redisUtils.hPutAll(appId + ":" + RedisConstant.SYS_ROLE, roleMap); + } + } catch (Exception e) { + log.error("角色刷新失败:" + e.getMessage()); + } + } + + @Override + public void removeRoleByKey(String userId) { + try { + String appId = UserUtils.getTenantId(); + redisUtils.hdel(appId + ":" + RedisConstant.SYS_ROLE, appId + ":" + userId); + } catch (Exception e) { + log.error("删除角色失败:" + e.getMessage()); + } + } + + @Override + public void saveRoleCache(String userId, String roleId) { + try { + String appId = UserUtils.getTenantId(); + List list = (List) redisUtils.hget(appId + ":" + RedisConstant.SYS_ROLE, appId + ":" + userId); + if (ObjectUtil.isEmpty(list)) { + list = new ArrayList<>(); + } + if (!list.contains(appId + ":" + roleId)) { + list.add(appId + ":" + roleId); + } + redisUtils.hset(appId + ":" + RedisConstant.SYS_ROLE, appId + ":" + userId, list); + } catch (Exception e) { + log.error("保存角色失败:" + e.getMessage()); + } + } + + /** + * 加载租户id:菜单类型type:菜单id对应菜单实体的redis数据 + */ + @Override + public void initMenu() { + try { + List list = menuDao.findMenuList(""); + if (CollUtil.isNotEmpty(list)) { + // 获取所有租户编码集合 + List appIds = list.stream().map(x -> x.getAppId()). + collect(Collectors.toList()).stream().distinct().collect(Collectors.toList()); + for (String appId : appIds) { + // 删除所有key + redisUtils.deleteAll(appId + ":" + RedisConstant.SYS_MENU); + List menuList = list.stream().filter(x -> x.getAppId().equals(appId)).collect(Collectors.toList()); + Map menuMap = menuList.stream() + .collect(Collectors.toMap(e1 -> Joiner.on(":").join(Lists.newArrayList(e1.getMenuType(), e1.getMenuId())), e2 -> e2)); + + redisUtils.hPutAll(appId + ":" + RedisConstant.SYS_MENU, menuMap); + } + } + } catch (Exception e) { + log.error("加载菜单失败:" + e.getMessage()); + } + } + + @Override + public void flushMenu() { + try { + // 根据租户查询对应的数据进行更新 + String appId = UserUtils.getTenantId(); + List list = menuDao.findMenuList(appId); + if (ObjectUtil.isNotEmpty(list)) { + // 删除所有key + redisUtils.deleteAll(appId + ":" + RedisConstant.SYS_MENU); + Map menuMap = list.stream() + .collect(Collectors.toMap(e1 -> Joiner.on(":").join(Lists.newArrayList(e1.getMenuType(), e1.getMenuId())), e2 -> e2)); + + redisUtils.hPutAll(appId + ":" + RedisConstant.SYS_MENU, menuMap); + } + } catch (Exception e) { + log.error("刷新菜单失败:" + e.getMessage()); + } + } + + @Override + public void saveOrUpdateMenu(MenuEntity model) { + try { + String appId = UserUtils.getTenantId(); + redisUtils.hset(appId + ":" + RedisConstant.SYS_MENU, model.getMenuType() + ":" + model.getMenuId(), model); + } catch (Exception e) { + log.error("新增菜单失败:" + e.getMessage()); + } + } + + /** + * 加载租户id:角色id对应List<租户id:菜单类型type:菜单id>的redis数据 + */ + @Override + public void initMenuId() { + try { + List list = menuDao.findListRoleMenu(""); + if (CollUtil.isNotEmpty(list)) { + // 获取所有租户编码集合 + List appIds = list.stream().map(x -> x.getAppId()). + collect(Collectors.toList()).stream().distinct().collect(Collectors.toList()); + for (String appId : appIds) { + // 删除所有key + redisUtils.deleteAll(appId + ":" + RedisConstant.SYS_MENU_ID); + List roleMenuRedisList = list.stream().filter(x -> x.getAppId().equals(appId)).collect(Collectors.toList()); + Map> dataMap = roleMenuRedisList.stream() + .collect(Collectors.toMap(e1 -> e1.getRoleId(), e2 -> e2.getList())); + + redisUtils.hPutAll(appId + ":" + RedisConstant.SYS_MENU_ID, dataMap); + } + } + } catch (Exception e) { + log.error("加载菜单id失败:" + e.getMessage()); + } + } + + @Override + public void flushMenuId() { + try { + // 根据租户查询对应的数据进行更新 + String appId = UserUtils.getTenantId(); + List list = menuDao.findListRoleMenu(appId); + if (ObjectUtil.isNotEmpty(list)) { + redisUtils.deleteAll(appId + ":" + RedisConstant.SYS_MENU_ID); + Map> dataMap = list.stream() + .collect(Collectors.toMap(e1 -> e1.getRoleId(), e2 -> e2.getList())); + + redisUtils.hPutAll(appId + ":" + RedisConstant.SYS_MENU_ID, dataMap); + } + } catch (Exception e) { + log.error("刷新菜单id失败:" + e.getMessage()); + } + } + + @Override + public void initStaff() { + try { + List list = tucStaffDao.findListQY(""); + if (CollUtil.isNotEmpty(list)) { + // 获取所有租户编码集合 + List appIds = list.stream().map(x -> x.getAppId()). + collect(Collectors.toList()).stream().distinct().collect(Collectors.toList()); + for (String appId : appIds) { + redisUtils.deleteAll(appId + ":" + RedisConstant.SYS_STAFF); + List staffList = list.stream().filter(x -> x.getAppId().equals(appId)).collect(Collectors.toList()); + Map dataMap = staffList.stream() + .collect(Collectors.toMap(e1 -> e1.getStaffPostCode(), e2 -> e2, (last, next) -> next)); + redisUtils.hPutAll(appId + ":" + RedisConstant.SYS_STAFF, dataMap); + } + } + } catch (Exception e) { + log.error("加载员工失败:" + e.getMessage()); + } + } + + @Override + public void flushStaff() { + try { + // 根据租户查询对应的数据进行更新 + String appId = UserUtils.getTenantId(); + List list = tucStaffDao.findListQY(appId); + if (CollUtil.isNotEmpty(list)) { + redisUtils.deleteAll(appId + ":" + RedisConstant.SYS_STAFF); + Map dataMap = list.stream() + .collect(Collectors.toMap(e1 -> e1.getStaffPostCode(), e2 -> e2)); + redisUtils.hPutAll(appId + ":" + RedisConstant.SYS_STAFF, dataMap); + } + } catch (Exception e) { + log.error("刷新员工失败:" + e.getMessage()); + } + } + + @Override + public void flushStaff(List list) { + try { + if (ObjectUtil.isNotEmpty(list)) { + for (TUcStaff staff : list) { + TucStaffEntity entity = BeanUtil.copyProperties(staff, TucStaffEntity.class); + if (Objects.equals("QY", entity.getStaffStatus())) { + redisUtils.hset(entity.getAppId() + ":" + RedisConstant.SYS_STAFF, entity.getStaffPostCode(), entity); + } + } + } + } catch (Exception e) { + log.error("刷新员工数据失败:" + e.getMessage()); + } + } + + @Override + public void saveOrUpdateStaff(TucStaffEntity model) { + try { + if ("QY".equals(model.getStaffStatus())) { + redisUtils.hset(model.getAppId() + ":" + RedisConstant.SYS_STAFF, model.getStaffPostCode(), model); + } else { + redisUtils.hdel(model.getAppId() + ":" + RedisConstant.SYS_STAFF, model.getStaffPostCode()); + } + } catch (Exception e) { + log.error("新增员工失败:" + e.getMessage()); + } + } + + @Override + public void removeStaff(String appId, String staffPostCode) { + try { + redisUtils.hdel(appId + ":" + RedisConstant.SYS_STAFF, staffPostCode); + } catch (Exception e) { + log.error("移除员工失败:" + e.getMessage()); + } + } + + @Override + public List getStaffList() { + String appId = UserUtils.getAppId(); + List list = redisUtils.hValues(appId + ":" + RedisConstant.SYS_STAFF, TucStaffEntity.class); + return list; + } + + @Override + public TucStaffEntity getStaff(String staffPostCode) { + String appId = UserUtils.getAppId(); + TucStaffEntity staff = redisUtils.hget(appId + ":" + RedisConstant.SYS_DICT, staffPostCode, TucStaffEntity.class); + return staff; + } + + @Override + public List getStaffList(List staffPostCodes) { + String appId = UserUtils.getTenantId(); + List list = + redisUtils.multiGet(appId + ":" + RedisConstant.SYS_STAFF, staffPostCodes, TucStaffEntity.class); + return list; + } + + @Override + public void initDept() { + try { + List list = tucOrgDao.list(""); + if (CollUtil.isNotEmpty(list)) { + // 获取所有租户编码集合 + List appIds = list.stream().map(x -> x.getAppId()). + collect(Collectors.toList()).stream().distinct().collect(Collectors.toList()); + for (String appId : appIds) { + redisUtils.deleteAll(appId + ":" + RedisConstant.SYS_DEPT); + List orgList = list.stream().filter(x -> x.getAppId().equals(appId)).collect(Collectors.toList()); + Map dataMap = orgList.stream() + .collect(Collectors.toMap(e1 -> e1.getDeptId(), e2 -> e2, (next, last) -> next)); + redisUtils.hPutAll(appId + ":" + RedisConstant.SYS_DEPT, dataMap); + } + } + } catch (Exception e) { + log.error("加载部门失败:" + e.getMessage()); + } + } + + @Override + public void flushDept() { + try { + // 根据租户查询对应的数据进行更新 + String appId = UserUtils.getTenantId(); + List list = tucOrgDao.list(appId); + if (CollUtil.isNotEmpty(list)) { + redisUtils.deleteAll(appId + ":" + RedisConstant.SYS_DEPT); + Map dataMap = list.stream() + .collect(Collectors.toMap(e1 -> e1.getDeptId(), e2 -> e2)); + redisUtils.hPutAll(appId + ":" + RedisConstant.SYS_DEPT, dataMap); + } + } catch (Exception e) { + log.error("刷新部门失败:" + e.getMessage()); + } + } + + @Override + public void flushDept(List list) { + try { + if (ObjectUtil.isNotEmpty(list)) { + for (TUcOrg org : list) { + if ("QY".equals(org.getOrgStatus())) { + Org o = BeanUtil.copyProperties(org, Org.class); + redisUtils.hset(org.getAppId() + ":" + RedisConstant.SYS_DEPT, org.getDeptId(), o); + } + } + } + } catch (Exception e) { + log.error("刷新部门数据失败:" + e.getMessage()); + } + } + + @Override + public void saveOrUpdateDept(Org org) { + try { + if ("QY".equals(org.getOrgStatus())) { + redisUtils.hset(org.getAppId() + ":" + RedisConstant.SYS_DEPT, org.getDeptId(), org); + } else { + redisUtils.hdel(org.getAppId() + ":" + RedisConstant.SYS_DEPT, org.getDeptId()); + } + } catch (Exception e) { + log.error("新增部门失败:" + e.getMessage()); + } + } + + @Override + public void removeDeptByKey(String appId, String deptId) { + try { + redisUtils.hdel(appId + ":" + RedisConstant.SYS_DEPT, deptId); + } catch (Exception e) { + log.error("移除部门失败:" + e.getMessage()); + } + } + + @Override + public Org getOrg(String deptId) { + String appId = UserUtils.getTenantId(); + Org org = redisUtils.hget(appId + ":" + RedisConstant.SYS_DEPT, deptId, Org.class); + return org; + } + + @Override + public List getOrgList() { + String appId = UserUtils.getTenantId(); + List list = redisUtils.hValues(appId + ":" + RedisConstant.SYS_DEPT, Org.class); + return list; + } + + @Override + public List getOrgList(List deptIds) { + String appId = UserUtils.getTenantId(); + List list = + redisUtils.multiGet(appId + ":" + RedisConstant.SYS_DEPT, deptIds, Org.class); + return list; + } +} diff --git a/usm-core/src/main/java/com/blueland/service/impl/SysTimetaskServiceImpl.java b/usm-core/src/main/java/com/blueland/service/impl/SysTimetaskServiceImpl.java new file mode 100644 index 0000000..3bfc667 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/service/impl/SysTimetaskServiceImpl.java @@ -0,0 +1,74 @@ +package com.blueland.service.impl; + + +import java.util.List; +import java.util.Map; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.blueland.model.TPfSysTimetask; +import com.blueland.service.SysTimetaskService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.blueland.bo.SysTimetaskEntity; +import com.blueland.dao.SysTimetaskDao; + +@Service +public class SysTimetaskServiceImpl extends ServiceImpl implements SysTimetaskService { + @Autowired + //SysTimetask对应的DAO类,主要用于数据库的增删改查等操作 + private SysTimetaskDao sysTimetaskDao; + + /** + * 根据条件查询列表(分页) + */ + @Override + public Page findSysTimetaskPageListByParams(Map tagSysTimetask, int curPage, int pageSize) { + Page page = new Page<>(curPage, pageSize); + Page list = sysTimetaskDao.findSysTimetaskPageByParams(page, tagSysTimetask); + + return list; + } + + @Override + public TPfSysTimetask get(SysTimetaskEntity bo) { + return this.baseMapper.selectOne(buildQueryWrapper(bo)); + } + + @Override + public List findList(SysTimetaskEntity bo) { + return this.baseMapper.findList(bo); + } + + @Override + public Page findPage(SysTimetaskEntity bo) { + Page page = new Page(bo.getPageNum(), bo.getPageSize()); + return this.baseMapper.findPage(page, bo); + } + + @Override + public Long count(SysTimetaskEntity bo) { + return this.baseMapper.selectCount(buildQueryWrapper(bo)); + } + + private LambdaQueryWrapper buildQueryWrapper(SysTimetaskEntity bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(ObjectUtil.isNotEmpty(bo.getId()), TPfSysTimetask::getId, bo.getId()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getTaskType()), TPfSysTimetask::getTaskType, bo.getTaskType()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getTaskCode()), TPfSysTimetask::getTaskCode, bo.getTaskCode()); + lqw.like(ObjectUtil.isNotEmpty(bo.getDescription()), TPfSysTimetask::getDescription, bo.getDescription()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getCronExp()), TPfSysTimetask::getCronExp, bo.getCronExp()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getAction()), TPfSysTimetask::getAction, bo.getAction()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getStatus()), TPfSysTimetask::getStatus, bo.getStatus()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getAppId()), TPfSysTimetask::getAppId, bo.getAppId()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getCreateId()), TPfSysTimetask::getCreateId, bo.getCreateId()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getUpdateId()), TPfSysTimetask::getUpdateId, bo.getUpdateId()); + lqw.like(ObjectUtil.isNotEmpty(bo.getRemark()), TPfSysTimetask::getRemark, bo.getRemark()); + return lqw; + } + +} diff --git a/usm-core/src/main/java/com/blueland/service/impl/TucOrgServiceImpl.java b/usm-core/src/main/java/com/blueland/service/impl/TucOrgServiceImpl.java new file mode 100644 index 0000000..2518f87 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/service/impl/TucOrgServiceImpl.java @@ -0,0 +1,577 @@ +package com.blueland.service.impl; + + +/** + * @author 代码自动生成工具 + * @version 1.0 + * @since + */ + +import java.util.*; +import java.util.stream.Collectors; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +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.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.blueland.constant.RedisConstant; +import com.blueland.core.util.RedisUtils; +import com.blueland.bo.*; +import com.blueland.core.util.StringUtil; +import com.blueland.dao.TucStaffDao; + +import com.blueland.model.TUcOrg; +import com.blueland.service.IParameterService; +import com.blueland.service.ITucOrgService; +import com.blueland.service.SysRedisService; +import lombok.extern.slf4j.Slf4j; + +import org.apache.commons.lang3.StringUtils; +import org.apache.ibatis.annotations.Param; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import com.blueland.dao.TucOrgDao; +import com.blueland.constant.Constant; +import com.blueland.core.util.HttpUtils; +import com.blueland.core.util.JsonUtil; + +@Service +@Slf4j +public class TucOrgServiceImpl extends ServiceImpl implements ITucOrgService { + @Autowired + //TucOrg对应的DAO类,主要用于数据库的增删改查等操作 + private TucOrgDao tucOrgDao; + @Autowired + private TucStaffDao tucStaffDao; + @Autowired + private IParameterService iParameterService; + + @Autowired + private SysRedisService sysRedisService; + + + @Override + public Page getOrgSubs(Org entity) { + if (null == entity || StringUtils.isEmpty(entity.getOrgId())) { + throw new RuntimeException("组织ID不能为空"); + } + Page pageInfo = null; + if (entity.getPageNum() == null) { + entity.setPageNum(1); + } + if (entity.getPageSize() == null) { + entity.setPageSize(5); + } + if (StringUtil.isEmpty(entity.getOrgType())) { + entity.setOrgType(entity.getOrgType()); + } + //不能加此逻辑,前端要求将禁用数据也查询出来 + /*if(StringUtil.isEmpty(entity.getOrgStatus())) { + entity.setOrgStatus(UserCenterConsts.ZT_STATUS_QY); + }*/ + Org org = new Org(); + org.setQueryOrg(entity.getQueryOrg()); + List topOrgList = getTopOrg(entity.getOrgType()); + + boolean topFlag = false; + for (Org topOrg : topOrgList) { + if (entity.getOrgId().equals(topOrg.getOrgId())) { + topFlag = true; + } + } + if (topFlag) { + org.setOrgType(entity.getOrgType()); + org.setOrgSubType(entity.getOrgType()); + org.setOrgName(entity.getOrgName()); + org.setOrgFullName(entity.getOrgFullName()); + org.setOrgStatus(entity.getOrgStatus()); + org.setPageNum(entity.getPageNum()); + org.setPageSize(entity.getPageSize()); + org.setSortColumns(entity.getSortColumns()); + org.setOrgWorkType(entity.getOrgWorkType()); + Page page = new Page<>(entity.getPageNum(), entity.getPageSize()); + Page list = tucOrgDao.findPage(page, org); + return list; + } else { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().eq(TUcOrg::getOrgId, entity.getOrgId()); + queryWrapper.lambda().eq(TUcOrg::getOrgType, entity.getOrgType()); + queryWrapper.lambda().eq(TUcOrg::getOrgStatus, entity.getOrgStatus()); + TUcOrg exsitsOrg = tucOrgDao.selectOne(queryWrapper); + if (null != exsitsOrg && 1 == exsitsOrg.getOrgLevel()) { + org.setCompanyId(entity.getOrgId()); + org.setOrgType(entity.getOrgType()); + org.setOrgName(entity.getOrgName()); + org.setOrgFullName(entity.getOrgFullName()); + org.setOrgStatus(entity.getOrgStatus()); + org.setPageNum(entity.getPageNum()); + org.setPageSize(entity.getPageSize()); + org.setSortColumns(entity.getSortColumns()); + org.setOrgWorkType(entity.getOrgWorkType()); + Page page = new Page<>(entity.getPageNum(), entity.getPageSize()); + Page list = tucOrgDao.findPage(page, org); + return list; + } else { + Page page = new Page<>(entity.getPageNum(), entity.getPageSize()); + pageInfo = tucOrgDao.getOrgChildPage(page, org); + } + } + return pageInfo; + } + + /*** + * 获取组织顶级节点(前端用) + * @param orgType 组织类型 + * @return + */ + @Override + public List getTopOrg(String orgType) { +// if(StringUtil.isEmpty(orgType)) { +// throw new ServiceException("组织类型不能为空"); +// } + Org topOrg = new Org(); + topOrg.setOrgParentId("0"); + topOrg.setOrgStatus("QY"); + topOrg.setOrgType(orgType); + return getListNoPage(topOrg); + } + + /*** + * 没有分页的组织列表(前端用) + */ + @Override + public List getListNoPage(Org entity) { + return tucOrgDao.getListNoPage(entity); + } + + @Override + public Page getOrgPage(Org org) { + Page page = new Page<>(org.getPageNum(), org.getPageSize()); + return this.baseMapper.getOrgPage(page, org); + } + + + /*** + * 查询组织,往下遍历(前端用) + */ + @Override + public List getOrgChildLst(Org org) { + if (null == org || StringUtils.isEmpty(org.getOrgId())) { + throw new RuntimeException("组织ID不能为空"); + } + if (StringUtil.isEmpty(org.getOrgType())) { + org.setOrgType(org.getOrgType()); + } + //不能加此逻辑,前端需要查询禁用数据 + /*if(StringUtil.isEmpty(org.getOrgStatus())) { + org.setOrgStatus(UserCenterConsts.ZT_STATUS_QY); + }*/ + return tucOrgDao.getOrgChildLst(org); + } + + /** + * 根据组织ID获取下级组织 + * + * @param orgId + * @return + */ + @Override + public List getOrgChildLst(String orgId) { + if (StringUtil.isEmpty(orgId)) { + return new ArrayList(); + } + return tucOrgDao.getChildLstByOrgId(orgId); + } + + @Override + public List> handleTreeData(Org entity, List orgList) { + List> result = new ArrayList>(); + if (ObjectUtil.isNotEmpty(entity.getOrgId())) { + Org org = this.baseMapper.getByOgId(entity.getOrgId()); + if (ObjectUtil.isNotEmpty(org)) { + Map map = new HashMap(); + map = new HashMap(); + map.put("id", org.getOrgId()); + map.put("name", org.getOrgName()); + map.put("parentId", org.getOrgParentId()); + map.put("type", "org"); + this.getSonTree(org.getOrgId(), map, orgList); + result.add(map); + } + } else { + List topOrgList = getTopOrg(entity.getOrgType()); + for (Org topOrg : topOrgList) { + Map map = new HashMap(); + map = new HashMap(); + map.put("id", topOrg.getOrgId()); + map.put("name", topOrg.getOrgName()); + map.put("parentId", topOrg.getOrgParentId()); + map.put("type", "org"); + this.getSonTree(topOrg.getOrgId(), map, orgList); + result.add(map); + } + } + return result; + } + + private Map getSonTree(String orgid, Map map, List itemList) { + List> children = new ArrayList>(); + for (Org item : itemList) { + if (map.get("id").toString().equals(item.getOrgParentId().toString())) { + Map child = new HashMap(); + child.put("id", item.getOrgId()); + child.put("name", item.getOrgName()); + child.put("parentId", item.getOrgParentId()); + child.put("type", "org"); + children.add(child); + this.getSonTree(orgid, child, itemList); + } + } + map.put("children", children); + return map; + } + + @Override + public List findOrgIdList(Org org) { + // TODO Auto-generated method stub + List orgList = tucOrgDao.findOrgIdList(org); + return orgList; + } + + + @Override + public Org findOrgById(String orgId) { + Org org = tucOrgDao.getByOgId(orgId); + return org; + } + + @Override + public List searchOrg(Org org) { + return tucOrgDao.searchOrg(org); + } + + /** + * 功能描述:获取点击节点下一层级数据 + * + * @param: [orgType 组织类型, type 选人组件类型, id 父id, orgId 组织id] + * @return: java.util.List + * @auther: lg 540923947@qq.com + * @date: 2019/5/9 17:17 + */ + @Override + public List getTree(String orgType, String type, String id, String orgId, String staffName) { + Org org = new Org(); + org.setOrgStatus("QY"); + org.setSortColumns("org_sort"); + org.setOrgType(orgType); + /** + * 如果传了指定的部门id就取指定部门 + * 否则默顶级节点认为0 + */ + if (ObjectUtil.isNotEmpty(orgId)) { + org.setOrgId(orgId); + } else { + if (StringUtil.isEmpty(id)) { + org.setOrgParentId("0"); + } else { + org.setOrgParentId(id); + } + } + List list = tucOrgDao.searchOrg(org); + if ("org".equals(type)) { + list = this.judgeLeaf(list, orgType); + } else if (("staff".equals(type) || "all".equals(type)) + && (ObjectUtil.isNotEmpty(staffName) || ObjectUtil.isNotEmpty(id))) { +// if (Objects.equals("staff", type)) { +// list = new ArrayList<>(); +// } + TucStaffEntity tucStaffEntity = new TucStaffEntity(); + tucStaffEntity.setStaffStatus("QY"); + if (ObjectUtil.isNotEmpty(id)) { + tucStaffEntity.setOrgId(id); + } + if (ObjectUtil.isNotEmpty(staffName)) { + tucStaffEntity.setStaffName(staffName); + } + List staffTreeList = tucStaffDao.searchUser(tucStaffEntity); + list.addAll(staffTreeList); + } + return list; + } + + /** + * 判断获取的组织下是否还存在组织(数据是否是叶节点) + * + * @param list + * @return + */ + @Override + public List judgeLeaf(List list, String orgType) { + Org org = new Org(); + org.setOrgStatus("QY"); + org.setOrgType(orgType); + for (TreeEntity treeEntity : list) { + org.setOrgParentId(treeEntity.getId()); + List tempList = tucOrgDao.findList(org); + if (!tempList.isEmpty() && tempList.size() > 0) { + treeEntity.setLeaf(false); + } else { + treeEntity.setLeaf(true); + } + } + return list; + } + + /** + * 20200827 add + * 获取 当前员工部门全名称 + * + * @return + */ + @Override + public String getfulldeptname(String deptId) { + String fulldeptname = ""; + if (ObjectUtil.isNotEmpty(deptId)) { + Org org = new Org(); + org.setOrgStatus("QY"); + org.setDeptId(deptId); + List dborgList = tucOrgDao.findList(org); + Org dborg = null; + if (null != dborgList && dborgList.size() > 0) { + dborg = dborgList.get(0); + } + if (dborg != null) { + String parentId = dborg.getOrgParentId(); + fulldeptname = dborg.getDeptName(); + if (deptId.length() <= 9) { + return fulldeptname; + } else { + while (true) { + Org parent = tucOrgDao.getByOgId(parentId); + if (null != parent) { + parentId = parent.getOrgParentId(); + fulldeptname = parent.getDeptName() + ">" + fulldeptname; + if (parent.getDeptId().length() == 9) { + break; + } + } else { + break; + } + } + } + } + } + return fulldeptname; + } + + /** + * 同步部门数据到CRM + * + * @param model + * @author hpp + * @Time 2020年12月3日 上午11:11:49 + */ + @Async + @Override + public void syncDept2CRM(Org model) { + try { + String deptcode = model.getDeptId(); + Map params = new HashMap(); + params.put("deptcode", deptcode); + params.put("deptname", model.getDeptName()); + if (deptcode.startsWith("A01A01")) { + params.put("tenantid", "BIO"); + } else { + params.put("tenantid", "IVD"); + } + ParameterEntity parameter = iParameterService.getBykey("crm_token"); + ParameterEntity crmUrl = iParameterService.getBykey("crmrender_url"); + System.out.println(JsonUtil.convertBeanToJsonStr(params)); + Map result = HttpUtils.getInstance().postForObject( + crmUrl.getPvalue() + "/api/deptduty/syncdept", JsonUtil.convertBeanToJsonStr(params), null, + Map.class, parameter.getPvalue()); +// log.info(JsonUtil.convertBeanToJsonStr(result)); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 获取所有销售办事处 + * + * @return + * @author hpp + * @Time 2020年12月7日 上午10:10:31 + */ + @Override + public List> getAllSellorg(String tenantid) { + String startDeptcode = ""; + if (Constant.TENANTID_BIO.equals(tenantid)) { + startDeptcode = "A01A01"; + } + return tucOrgDao.getOrgByWorktype(startDeptcode, Constant.ORGWORKTYPE_SELL); + + } + + @Override + public Org get(Org bo) { + return this.baseMapper.getOne(bo); + } + + @Override + public Org getByAppId(Org bo) { + return this.baseMapper.getByAppId(bo); + } + + @Override + public List findList(Org bo) { + return this.baseMapper.findList(bo); + } + + @Override + public Page findPage(Org bo) { + Page page = new Page(bo.getPageNum(), bo.getPageSize()); + return this.baseMapper.findPage(page, bo); + } + + @Override + public String getTenantId(String deptId) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().eq(TUcOrg::getDeptId, deptId); + queryWrapper.lambda().eq(TUcOrg::getOrgStatus, Constant.QY); + List list = this.baseMapper.selectList(queryWrapper); + String appId = ""; + if (ObjectUtil.isNotEmpty(list) && ObjectUtil.isNotEmpty(list.get(0).getAppId())) { + appId = list.get(0).getAppId(); + } + return appId; + } + + @Override + public List selectOrgByDeptIds(List deptIds) { + List list = sysRedisService.getOrgList(deptIds); + if (ObjectUtil.isEmpty(list)) { + Org bo = new Org(); + bo.setOrgStatus(Constant.QY); + bo.setDeptIds(deptIds); + list = this.baseMapper.findList(bo); + } + return list; + } + + @Override + public List selectOrgByErpCodes(List erpCodes) { + Org bo = new Org(); + bo.setOrgStatus(Constant.QY); + bo.setErpCodes(erpCodes); + List list = this.baseMapper.findList(bo); + return list; + } + + @Override + public Integer countOrgById(String id, String appId) { + return this.baseMapper.countOrgById(id, appId); + } + + @Override + public List handleOrg(Org org) { + List addList = new ArrayList<>(); + if (ObjectUtil.isNotEmpty(org)) { +// String appId = this.baseMapper.getAppIdByParentId(org.getOrgParentId()); + ParameterEntity bo = new ParameterEntity(); + bo.setPkey(Constant.ORG_APP); + List configList = iParameterService.findList(bo); + if (ObjectUtil.isNotEmpty(configList)) { + for (ParameterEntity entity : configList) { + // 部门id长度小于配置的长度,直接跳出当次循环 + if (org.getDeptId().length() < entity.getPvalue().length()) { + continue; + } + // 截取和配置一样的长度进行匹配 + String deptId = StrUtil.sub(org.getDeptId(), 0, entity.getPvalue().length()); + // 判断部门和租户的关系,如果对应多个则每个租户都新增一条数据 + if (Objects.equals(entity.getPvalue(), deptId) && this.baseMapper.countOrgById(org.getDeptId(), entity.getAppId()) <= 0) { + TUcOrg model = BeanUtil.copyProperties(org, TUcOrg.class); +// if (ObjectUtil.isNotEmpty(org.getDeptId()) && org.getDeptId().length() > 3) { +//// String code = StrUtil.sub(org.getDeptId(), 0, org.getDeptId().length() - 3); +// String parentId = this.baseMapper.getOrgIdByAppId(entity.getAppId(), org.getOrgParentId()); +// model.setOrgParentId(parentId); +// } + model.setId(null); + model.setAppId(entity.getAppId()); + model.setOrgCreateTime(new Date()); + org.setAppId(entity.getAppId()); + addList.add(model); + } + } + } + } + return addList; + } + + @Override + public void deleteOrgByAppId(String appId) { + this.baseMapper.deleteOrgByAppId(appId); + } + + @Override + public String getTopOrgId() { + return this.baseMapper.getTopOrgId(); + } + + @Override + public String getSellOrgId(String deptCode) { + return this.baseMapper.getSellOrgId(deptCode); + } + + @Override + public String getAppIdByParentId(String parentId) { + return this.baseMapper.getAppIdByParentId(parentId); + } + + @Override + public Org getByOgId(String orgId) { + return this.baseMapper.getByOgId(orgId); + } + + @Override + public Org getByOgIdAndType(String orgId, String type) { + return this.baseMapper.getByOgIdAndType(orgId, type); + } + + private LambdaQueryWrapper buildQueryWrapper(Org bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(ObjectUtil.isNotEmpty(bo.getOrgId()), TUcOrg::getOrgId, bo.getOrgId()); + lqw.like(ObjectUtil.isNotEmpty(bo.getOrgName()), TUcOrg::getOrgName, bo.getOrgName()); + lqw.like(ObjectUtil.isNotEmpty(bo.getOrgFullName()), TUcOrg::getOrgFullName, bo.getOrgFullName()); + lqw.like(ObjectUtil.isNotEmpty(bo.getOrgSpells()), TUcOrg::getOrgSpells, bo.getOrgSpells()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getOrgFullSpells()), TUcOrg::getOrgFullSpells, bo.getOrgFullSpells()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getOrgParentId()), TUcOrg::getOrgParentId, bo.getOrgParentId()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getOrgType()), TUcOrg::getOrgType, bo.getOrgType()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getOrgLevel()), TUcOrg::getOrgLevel, bo.getOrgLevel()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getOrgMgrType()), TUcOrg::getOrgMgrType, bo.getOrgMgrType()); + lqw.like(ObjectUtil.isNotEmpty(bo.getOrgWorkAddress()), TUcOrg::getOrgWorkAddress, bo.getOrgWorkAddress()); + lqw.like(ObjectUtil.isNotEmpty(bo.getOrgWorkPhone()), TUcOrg::getOrgWorkPhone, bo.getOrgWorkPhone()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getOrgWorkType()), TUcOrg::getOrgWorkType, bo.getOrgWorkType()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getOrgStatus()), TUcOrg::getOrgStatus, bo.getOrgStatus()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getOrgParentId()), TUcOrg::getOrgParentId, bo.getOrgParentId()); + lqw.like(ObjectUtil.isNotEmpty(bo.getOrgParentName()), TUcOrg::getOrgParentName, bo.getOrgParentName()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getCompanyId()), TUcOrg::getCompanyId, bo.getCompanyId()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getOrgBranchLeader()), TUcOrg::getOrgBranchLeader, bo.getOrgBranchLeader()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getDeptId()), TUcOrg::getDeptId, bo.getDeptId()); + lqw.like(ObjectUtil.isNotEmpty(bo.getOrgSubType()), TUcOrg::getOrgSubType, bo.getOrgSubType()); + lqw.like(ObjectUtil.isNotEmpty(bo.getDeptName()), TUcOrg::getDeptName, bo.getDeptName()); + lqw.like(ObjectUtil.isNotEmpty(bo.getCompanyName()), TUcOrg::getCompanyName, bo.getCompanyName()); + lqw.like(ObjectUtil.isNotEmpty(bo.getOrgBranchLeaderName()), TUcOrg::getOrgBranchLeaderName, bo.getOrgBranchLeaderName()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getOrgCreator()), TUcOrg::getOrgCreator, bo.getOrgCreator()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getOrgUpdator()), TUcOrg::getOrgUpdator, bo.getOrgUpdator()); + return lqw; + } +} diff --git a/usm-core/src/main/java/com/blueland/service/impl/TucStaffServiceImpl.java b/usm-core/src/main/java/com/blueland/service/impl/TucStaffServiceImpl.java new file mode 100644 index 0000000..9d4a633 --- /dev/null +++ b/usm-core/src/main/java/com/blueland/service/impl/TucStaffServiceImpl.java @@ -0,0 +1,632 @@ +package com.blueland.service.impl; + + +/** + * @author 代码自动生成工具 + * @version 1.0 + * @since + */ + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.blueland.bo.*; +import com.blueland.constant.Constant; +import com.blueland.constant.RedisConstant; +import com.blueland.core.util.UserUtils; +import com.blueland.dao.TucStaffDao; +import com.blueland.model.TUcOrg; +import com.blueland.model.TUcStaff; +import com.blueland.service.IParameterService; +import com.blueland.service.ITucOrgService; +import com.blueland.service.ITucStaffService; +import com.blueland.service.SysRedisService; +import com.blueland.vo.StaffNumVO; +import com.blueland.vo.StaffPostVO; +import com.blueland.vo.TUcStaffVO; +import com.google.common.collect.Maps; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Service; + +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +@Service +public class TucStaffServiceImpl extends ServiceImpl implements ITucStaffService { + @Autowired + //TucStaff对应的DAO类,主要用于数据库的增删改查等操作 + private TucStaffDao tucStaffDao; + @Autowired + private ITucOrgService tucOrgServiceImpl; + + @Autowired + private SysRedisService sysRedisService; + + @Autowired + private IParameterService iParameterService; + + @Override + public Page getStaffInfoByOrgTop(TucStaffEntity staff) { + Page pageInfo = null; + if (staff.getPageNum() == null) { + staff.setPageNum(1); + } + if (staff.getPageSize() == null) { + staff.setPageSize(5); + } + Page page = new Page(staff.getPageNum(), staff.getPageSize()); + pageInfo = tucStaffDao.getStaffInfoByOrgTopPage(page, staff); + return pageInfo; + } + + @Override + public Page getSubStaffs(TucStaffEntity entity) { + if (null == entity || StringUtils.isEmpty(entity.getOrgId())) { + throw new RuntimeException("组织ID不能为空"); + } + Page pageInfo = null; + if (entity.getPageNum() == null) { + entity.setPageNum(1); + } + if (entity.getPageSize() == null) { + entity.setPageSize(5); + } + TucStaffEntity staff = new TucStaffEntity(); + + String orgId = entity.getOrgId(); +// Org qOrg = new Org(); +// qOrg.setOrgId(orgId); +// qOrg.setOrgType(entity.getStaffType()); + // qOrg.setOrgStatus(entity.getStaffStatus()); + Org exsitsOrg = tucOrgServiceImpl.getByOgIdAndType(orgId, entity.getStaffType()); + if (null != exsitsOrg.getOrgLevel() && 1 == exsitsOrg.getOrgLevel()) { + staff.setCompanyId(orgId); + staff.setStaffId(entity.getStaffId()); + staff.setStaffName(entity.getStaffName()); + staff.setStaffType(entity.getStaffType()); + staff.setStaffStatus(entity.getStaffStatus()); + staff.setPageNum(entity.getPageNum()); + staff.setPageSize(entity.getPageSize()); + staff.setSortColumns(entity.getSortColumns()); + staff.setMainIdentityStaff(entity.getMainIdentityStaff()); + if (ObjectUtil.isNotEmpty(entity.getOrgId())) { + staff.setQueryOrgId(entity.getOrgId()); + } + Page page = new Page(staff.getPageNum(), staff.getPageSize()); + return tucStaffDao.findPage(page, staff); + } else { + Page page = new Page(entity.getPageNum(), entity.getPageSize()); + Page subStaffs = tucStaffDao.getSubStaffsPage(page, entity); + if (ObjectUtil.isNotEmpty(subStaffs) && ObjectUtil.isNotEmpty(subStaffs.getRecords())) { + for (TucStaffEntity tucStaffEntity : subStaffs.getRecords()) { + String staffFax = tucStaffEntity.getStaffFax(); + TucStaffEntity byStaffFax = tucStaffDao.getByStaffFax(staffFax); + if (byStaffFax != null) { + tucStaffEntity.setStaffFax(byStaffFax.getStaffName()); + } + } + } + + pageInfo = subStaffs; + } + return pageInfo; + } + + @Override + public Page getStaffByOrgs(TucStaffEntity entity) { + if (entity.getPageNum() == null) { + entity.setPageNum(1); + } + if (entity.getPageSize() == null) { + entity.setPageSize(5); + } + TucStaffEntity staff = new TucStaffEntity(); + String[] orgIds = entity.getOrgId().split(","); + entity.setOrgIds(orgIds); + Page page = new Page(entity.getPageNum(), entity.getPageSize()); + return tucStaffDao.getStaffByOrgsPage(page, entity); + } + + @Override + public void deleteBycode(String staffCode) { + tucStaffDao.deleteByCode(staffCode); + } + + @Override + public void updateByNum(TucStaffEntity model) { + //20200907 add TASK1227 crm系统管理 对接HR 用户接口调整 + tucStaffDao.updateByNum(model); + } + + public List getByStaffNum(String staffNum) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().eq(TUcStaff::getStaffStatus, Constant.QY); + queryWrapper.lambda().eq(TUcStaff::getStaffNum, staffNum); + return this.baseMapper.selectList(queryWrapper); + } + + //20210202 add 批量更新上级人工号 + @Override + public void batchupdateStaffFax(List stafflist) { + for (TucStaffEntity model : stafflist) { + String staffCode = model.getStaffCode(); + if (StringUtils.isNotEmpty(staffCode)) { + TucStaffEntity dbmodel = tucStaffDao.getByStaffCode(staffCode); + if (null != dbmodel) { + TUcStaff tUcStaff = BeanUtil.copyProperties(dbmodel, TUcStaff.class); + tUcStaff.setStaffFax(model.getStaffFax()); + tucStaffDao.updateById(tUcStaff); + } + } + } + } + + @Override + public TucStaffEntity getStaffByStaffId(String staffId) { + if (!StringUtils.isNotEmpty(staffId)) { + throw new RuntimeException("staffId不能为空"); + } + TucStaffEntity staff = new TucStaffEntity(); +// staff.setStaffCode(staffId); +// staff.setStaffStatus("QY"); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().eq(TUcStaff::getStaffCode, staffId); + queryWrapper.lambda().eq(TUcStaff::getStaffStatus, "QY"); + List list = tucStaffDao.selectList(queryWrapper); + if (ObjectUtil.isNotEmpty(list)) { + TUcStaff tUcStaff = list.get(0); + staff = BeanUtil.copyProperties(tUcStaff, TucStaffEntity.class); + } + if (staff == null) { + return null; + } + //20200827 add + String fulldeptname = tucOrgServiceImpl.getfulldeptname(staff.getDeptId()); + staff.setFulldeptname(fulldeptname); + + return staff; + } + + @Override + public Page getAppRoleUser(String appId, String roleId, String companyId, String deptId, + String orgId, Integer curPage, Integer curPageSize) { + Map params = Maps.newHashMap(); + Page page = new Page<>(curPage, curPageSize); + params.put("appId", appId); + params.put("roleId", roleId); + params.put("companyId", companyId); + params.put("deptId", deptId); + params.put("orgId", orgId); + Page result = tucStaffDao.getAppRoleUserPage(page, params); + return result; + } + + @Override + public Page getAppRoleUser2(String appId, String roleId, String companyId, String deptId, + String orgId, Integer curPage, Integer curPageSize) { + Map params = Maps.newHashMap(); + Page page = new Page<>(curPage, curPageSize); + params.put("appId", appId); + params.put("roleId", roleId); + params.put("companyId", companyId); + params.put("deptId", deptId); + params.put("orgId", orgId); + Page result = tucStaffDao.getAppRoleUserPage2(page, params); + return result; + } + + /** + * 20200728 add 获取某租户某角色 或某部门下的用户 + * + * @param appId + * @param roleId + * @param companyId + * @param deptId + * @param orgId + * @return + */ + @Override + public List getAppRoleUserList(String appId, String roleId, String companyId, String deptId, + String orgId) { + Map params = Maps.newHashMap(); + params.put("appId", appId); + params.put("roleId", roleId); + params.put("companyId", companyId); + params.put("deptId", deptId); + params.put("orgId", orgId); + return tucStaffDao.getAppRoleUserList(params); + } + + @Override + public List searchUser(TucStaffEntity tucStaffEntity) { + //20200423 modify 改为 用 部门编码like 查询 + if (ObjectUtil.isNotEmpty(tucStaffEntity.getQueryOrgId())) { + //根据orgid查询组织 + Org org = tucOrgServiceImpl.getByOgId(tucStaffEntity.getQueryOrgId()); + if (null != org) { + tucStaffEntity.setQueryOrgId(null); + tucStaffEntity.setQueryDeptId(org.getDeptId()); + return tucStaffDao.searchUser4deptId(tucStaffEntity); + } else { + return tucStaffDao.searchUser(tucStaffEntity); + } + } + + return tucStaffDao.searchUser(tucStaffEntity); + } + + /** + * 根据顶级orgId条件查询人员 + * + * @param tucStaffEntity + * @return + */ + @Override + public List findListByName(TucStaffEntity tucStaffEntity) { + // TODO Auto-generated method stub + return tucStaffDao.findListByName(tucStaffEntity); + } + + /** + * 根据用户 + * + * @param + * @return + * @author hpp + * @Time 2020年10月27日 下午5:53:18 + */ + @Override + public List getByStaffcodes(List staffcodes) { + return tucStaffDao.getByStaffcodes(staffcodes); + } + + /** + * 根据hr部门编码更新销售的部门名称 + * + * @param orgName + * @param deptcode + * @author hpp + * @Time 2020年12月2日 下午5:05:21 + */ + @Override + public void updateDeptnameByDeptid(String orgName, String deptcode) { + tucStaffDao.updateDeptnameByDeptid(orgName, deptcode); + } + + /** + * 根据设备码来清空设备码 + * + * @param + */ + @Override + public void updateByStaffPhoneBak(String staffPhoneBak) { + tucStaffDao.updateByStaffPhoneBak(staffPhoneBak); + + } + + @Override + public void enablePassport(String staffId, String enableStatus) { + TUcStaff user = tucStaffDao.selectById(staffId); + user.setStaffPassport(enableStatus); + tucStaffDao.updateById(user); + } + + //根据名称模糊查询列表 + @Override + public List getStaffList(String name) { + List list = tucStaffDao.getStaffList(name); + return list; + } + + /** + * 批量查询员工 + * + * @param codes + * @return + */ + @Override + public List getListByCodes(List codes) { + List list = sysRedisService.getStaffList(codes); + if (ObjectUtil.isEmpty(list)) { + list = tucStaffDao.getListByCodes(codes); + } + return list; + } + + + @Override + public Page findPage(TucStaffEntity bo) { + Page page = new Page<>(bo.getPageNum(), bo.getPageSize()); + return this.baseMapper.findPage(page, bo); + } + + @Override + public TUcStaff get(TucStaffEntity bo) { + return this.baseMapper.selectOne(buildQueryWrapper(bo)); + } + + @Override + public List findList(TucStaffEntity bo) { + return this.baseMapper.findList(bo); + } + + @Override + public List findStaffPostList() { + List list = this.baseMapper.findStaffPostList(UserUtils.getIvUser()); + if (ObjectUtil.isNotEmpty(list)) { + List codes = list.stream().map(x -> x.getStaffCode()).distinct().collect(Collectors.toList()); +// TucStaffEntity bo = new TucStaffEntity(); +// bo.setStaffStatus(Constant.QY); +// bo.setStaffCodes(codes); + List staffList = this.baseMapper.findListByRoleAndStaffCode(codes); + if (ObjectUtil.isNotEmpty(staffList)) { + for (StaffPostVO vo : list) { + List staffs = staffList.stream(). + filter(x -> x.getStaffCode().equals(vo.getStaffCode()) && + x.getAppId().equals(vo.getTenantId())) + .collect(Collectors.toList()); + vo.setStaffList(staffs); + } + } + } + list = list.stream().filter(x -> ObjectUtil.isNotEmpty(x.getStaffList())).collect(Collectors.toList()); + return list; + } + + @Override + public Long selectUserCount(String postCode) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().eq(TUcStaff::getStaffPostCode, postCode); + queryWrapper.lambda().eq(TUcStaff::getStaffStatus, Constant.QY); + return tucStaffDao.selectCount(queryWrapper); + } + + @Override + public void deleteByPostCode(String postCode) { + this.baseMapper.deleteByPostCode(postCode); + } + + @Override + public TucStaffEntity getStaffByPostCode(String postCode) { + if (!StringUtils.isNotEmpty(postCode)) { + throw new RuntimeException("postCode不能为空"); + } + TucStaffEntity staff = sysRedisService.getStaff(postCode); + String appId = UserUtils.getTenantId(); + if (ObjectUtil.isEmpty(staff)) { + staff = tucStaffDao.getByPostCode(postCode, appId); + } + if (staff == null) { + return null; + } + //20200827 add + String fulldeptname = tucOrgServiceImpl.getfulldeptname(staff.getDeptId()); + staff.setFulldeptname(fulldeptname); + + return staff; + } + + @Override + public void batchUpdateFaxByPostCode(List stafflist) { + for (TucStaffEntity model : stafflist) { + if (StringUtils.isNotEmpty(model.getStaffCode())) { + TucStaffEntity dbmodel = tucStaffDao.getByStaffCode(model.getStaffCode()); + if (null != dbmodel) { + TUcStaff tUcStaff = BeanUtil.copyProperties(dbmodel, TUcStaff.class); + tUcStaff.setStaffFax(model.getStaffFax()); + tucStaffDao.updateById(tUcStaff); + } + } + } + } + + @Override + public List getListByPostCodes(List codes) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().in(TUcStaff::getStaffPostCode, codes); + return this.baseMapper.selectList(queryWrapper); + } + + @Override + public TucStaffEntity getUserByCode(String postCode) { + TucStaffEntity staff = sysRedisService.getStaff(postCode); + if (ObjectUtil.isEmpty(staff)) { + String appId = UserUtils.getTenantId(); + staff = tucStaffDao.getByPostCode(postCode, appId); + } + return staff; + } + + @Override + public List selectStaffByPostCodes(List postCodes) { + List list = sysRedisService.getStaffList(postCodes); + if (ObjectUtil.isEmpty(list)) { + TucStaffEntity bo = new TucStaffEntity(); + String appId = UserUtils.getTenantId(); + bo.setAppId(appId); + bo.setStaffStatus(Constant.QY); + bo.setPostCodes(postCodes); + list = this.baseMapper.findList(bo); + } + return list; + } + + @Override + public TucStaffEntity selectStaffByNumAndDept(String staffNum, String deptId) { + return this.baseMapper.selectStaffByNumAndDept(staffNum, deptId); + } + + @Override + public TucStaffEntity selectStaffByNum(String staffNum) { + return this.baseMapper.selectStaffByNum(staffNum); + } + + private LambdaQueryWrapper buildQueryWrapper(TucStaffEntity bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.like(StringUtils.isNotBlank(bo.getStaffName()), TUcStaff::getStaffName, bo.getStaffName()); + lqw.like(StringUtils.isNotBlank(bo.getStaffEnName()), TUcStaff::getStaffEnName, bo.getStaffEnName()); + lqw.eq(StringUtils.isNotBlank(bo.getOrgId()), TUcStaff::getOrgId, bo.getOrgId()); + lqw.like(StringUtils.isNotBlank(bo.getOrgName()), TUcStaff::getOrgName, bo.getOrgName()); + lqw.eq(StringUtils.isNotBlank(bo.getStaffSpells()), TUcStaff::getStaffSpells, bo.getStaffSpells()); + lqw.eq(StringUtils.isNotBlank(bo.getStaffShortSpells()), TUcStaff::getStaffShortSpells, bo.getStaffShortSpells()); + lqw.eq(StringUtils.isNotBlank(bo.getStaffNum()), TUcStaff::getStaffNum, bo.getStaffNum()); + lqw.eq(StringUtils.isNotBlank(bo.getStaffShortNum()), TUcStaff::getStaffShortNum, bo.getStaffShortNum()); + lqw.eq(StringUtils.isNotBlank(bo.getPositionId()), TUcStaff::getPositionId, bo.getPositionId()); + lqw.like(StringUtils.isNotBlank(bo.getPositionName()), TUcStaff::getPositionName, bo.getPositionName()); + lqw.eq(StringUtils.isNotBlank(bo.getStaffSex()), TUcStaff::getStaffSex, bo.getStaffSex()); + lqw.eq(bo.getStaffAge() != null, TUcStaff::getStaffAge, bo.getStaffAge()); + lqw.eq(StringUtils.isNotBlank(bo.getStaffPaperworkType()), TUcStaff::getStaffPaperworkType, bo.getStaffPaperworkType()); + lqw.eq(StringUtils.isNotBlank(bo.getStaffPaperworkNum()), TUcStaff::getStaffPaperworkNum, bo.getStaffPaperworkNum()); + lqw.eq(StringUtils.isNotBlank(bo.getStaffMail()), TUcStaff::getStaffMail, bo.getStaffMail()); + lqw.eq(StringUtils.isNotBlank(bo.getStaffMobile()), TUcStaff::getStaffMobile, bo.getStaffMobile()); + lqw.eq(StringUtils.isNotBlank(bo.getStaffMobileBak()), TUcStaff::getStaffMobileBak, bo.getStaffMobileBak()); + lqw.eq(StringUtils.isNotBlank(bo.getStaffFax()), TUcStaff::getStaffFax, bo.getStaffFax()); + lqw.eq(StringUtils.isNotBlank(bo.getStaffShortFax()), TUcStaff::getStaffShortFax, bo.getStaffShortFax()); + lqw.eq(StringUtils.isNotBlank(bo.getStaffWechart()), TUcStaff::getStaffWechart, bo.getStaffWechart()); + lqw.eq(StringUtils.isNotBlank(bo.getStaffHomeAddress()), TUcStaff::getStaffHomeAddress, bo.getStaffHomeAddress()); + lqw.eq(StringUtils.isNotBlank(bo.getStaffHomePhone()), TUcStaff::getStaffHomePhone, bo.getStaffHomePhone()); + lqw.eq(StringUtils.isNotBlank(bo.getStaffWorkAddress()), TUcStaff::getStaffWorkAddress, bo.getStaffWorkAddress()); + lqw.eq(StringUtils.isNotBlank(bo.getStaffWorkPhone()), TUcStaff::getStaffWorkPhone, bo.getStaffWorkPhone()); + lqw.eq(StringUtils.isNotBlank(bo.getStaffPassport()), TUcStaff::getStaffPassport, bo.getStaffPassport()); + lqw.eq(StringUtils.isNotBlank(bo.getStaffNation()), TUcStaff::getStaffNation, bo.getStaffNation()); + lqw.eq(StringUtils.isNotBlank(bo.getStaffPoliticalStatus()), TUcStaff::getStaffPoliticalStatus, bo.getStaffPoliticalStatus()); + lqw.eq(StringUtils.isNotBlank(bo.getStaffNativePlace()), TUcStaff::getStaffNativePlace, bo.getStaffNativePlace()); + lqw.eq(bo.getStaffSort() != null, TUcStaff::getStaffSort, bo.getStaffSort()); + lqw.eq(StringUtils.isNotBlank(bo.getStaffStatus()), TUcStaff::getStaffStatus, bo.getStaffStatus()); + lqw.eq(StringUtils.isNotBlank(bo.getStaffType()), TUcStaff::getStaffType, bo.getStaffType()); + lqw.eq(StringUtils.isNotBlank(bo.getStaffSubType()), TUcStaff::getStaffSubType, bo.getStaffSubType()); + lqw.eq(StringUtils.isNotBlank(bo.getStaffCreator()), TUcStaff::getStaffCreator, bo.getStaffCreator()); + lqw.eq(bo.getStaffCreateTime() != null, TUcStaff::getStaffCreateTime, bo.getStaffCreateTime()); + lqw.eq(StringUtils.isNotBlank(bo.getStaffUpdator()), TUcStaff::getStaffUpdator, bo.getStaffUpdator()); + lqw.eq(bo.getStaffLastupdateTime() != null, TUcStaff::getStaffLastupdateTime, bo.getStaffLastupdateTime()); + lqw.eq(StringUtils.isNotBlank(bo.getStaffWorkType()), TUcStaff::getStaffWorkType, bo.getStaffWorkType()); + lqw.eq(StringUtils.isNotBlank(bo.getCompanyId()), TUcStaff::getCompanyId, bo.getCompanyId()); + lqw.like(StringUtils.isNotBlank(bo.getCompanyName()), TUcStaff::getCompanyName, bo.getCompanyName()); + lqw.eq(StringUtils.isNotBlank(bo.getDeptId()), TUcStaff::getDeptId, bo.getDeptId()); + lqw.like(StringUtils.isNotBlank(bo.getDeptName()), TUcStaff::getDeptName, bo.getDeptName()); + lqw.eq(StringUtils.isNotBlank(bo.getStaffHrId()), TUcStaff::getStaffHrId, bo.getStaffHrId()); + lqw.eq(StringUtils.isNotBlank(bo.getStaffCode()), TUcStaff::getStaffCode, bo.getStaffCode()); +// lqw.eq(bo.getStaffBirthday() != null, TUcStaff::getStaffBirthday, bo.getStaffBirthday()); + lqw.eq(StringUtils.isNotBlank(bo.getStaffEducation()), TUcStaff::getStaffEducation, bo.getStaffEducation()); + lqw.eq(bo.getStaffRetiredTime() != null, TUcStaff::getStaffRetiredTime, bo.getStaffRetiredTime()); + lqw.eq(StringUtils.isNotBlank(bo.getStaffJobStatus()), TUcStaff::getStaffJobStatus, bo.getStaffJobStatus()); + lqw.eq(StringUtils.isNotBlank(bo.getStaffAccountType()), TUcStaff::getStaffAccountType, bo.getStaffAccountType()); + lqw.eq(StringUtils.isNotBlank(bo.getStaffPhoneBak()), TUcStaff::getStaffPhoneBak, bo.getStaffPhoneBak()); + return lqw; + } + + @Override + public List getByStaffCode(String staffCode) { + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery() + .eq(TUcStaff::getStaffCode, staffCode); + return list(wrapper); + } + + @Override + public List handleStaff(TucStaffEntity staff) { + List addList = new ArrayList<>(); + if (ObjectUtil.isNotEmpty(staff)) { + ParameterEntity bo = new ParameterEntity(); + bo.setPkey(Constant.ORG_APP); + List configList = iParameterService.findList(bo); + if (ObjectUtil.isNotEmpty(configList)) { + for (ParameterEntity entity : configList) { + // 部门id长度小于配置的长度,直接跳出当次循环 + if (staff.getDeptId().length() < entity.getPvalue().length()) { + continue; + } + // 截取和配置一样的长度进行匹配 + String deptId = StrUtil.sub(staff.getDeptId(), 0, entity.getPvalue().length()); + // 判断部门和租户的关系,如果对应多个则每个租户都新增一条数据 + if (Objects.equals(entity.getPvalue(), deptId) && this.baseMapper.countStaffByNum(staff.getStaffNum(), entity.getAppId()) <= 0) { + TUcStaffVO vo = BeanUtil.copyProperties(staff, TUcStaffVO.class); + TUcStaff model = BeanUtil.copyProperties(vo, TUcStaff.class); +// TUcStaff model = BeanUtil.copyProperties(staff, TUcStaff.class); + if (ObjectUtil.isNotEmpty(staff.getStaffBirthday())) { + model.setStaffBirthday(new Date(Long.valueOf(staff.getStaffBirthday()))); + } + if (ObjectUtil.isNotEmpty(staff.getStaffId())) { + model.setStaffId(staff.getStaffId()+entity.getAppId()); + } + model.setAppId(entity.getAppId()); + model.setStaffCreateTime(new Date()); + staff.setAppId(entity.getAppId()); + // 如果没传岗位编码,就取员工编码,岗位类型就为主岗 + if (ObjectUtil.isEmpty(model.getStaffPostCode())) { + model.setStaffPostCode(model.getStaffCode()); + model.setStaffPostType("main"); + } + addList.add(model); + } + } + } + } + return addList; + } + + @Override + public List handleStaffToPostCode(TUcStaff staff) { + List addList = new ArrayList<>(); + if (ObjectUtil.isNotEmpty(staff)) { + ParameterEntity bo = new ParameterEntity(); + bo.setPkey(Constant.ORG_APP); + List configList = iParameterService.findList(bo); + if (ObjectUtil.isNotEmpty(configList)) { + for (ParameterEntity entity : configList) { + // 部门id长度小于配置的长度,直接跳出当次循环 + if (staff.getDeptId().length() < entity.getPvalue().length()) { + continue; + } + // 截取和配置一样的长度进行匹配 + String deptId = StrUtil.sub(staff.getDeptId(), 0, entity.getPvalue().length()); + // 判断部门和租户的关系,如果对应多个则每个租户都新增一条数据 + if (Objects.equals(entity.getPvalue(), deptId) && !Objects.equals(staff.getStaffPostType(), "main")) { + TUcStaff model = BeanUtil.copyProperties(staff, TUcStaff.class); + if (ObjectUtil.isNotEmpty(model.getStaffId())) { + model.setStaffId(model.getStaffId()+entity.getAppId()); + } + model.setAppId(entity.getAppId()); + model.setStaffCreateTime(new Date()); + // 如果没传岗位编码,就取员工编码,岗位类型就为主岗 + if (ObjectUtil.isEmpty(model.getStaffPostCode())) { + model.setStaffPostCode(model.getStaffCode()); + model.setStaffPostType("main"); + } + addList.add(model); + } + } + } + } + return addList; + } + + @Override + public Integer countStaff(String id, String appId) { + return this.baseMapper.countStaff(id, appId); + } + + + @Override + public Integer countStaffByNum(String num, String appId) { + return this.baseMapper.countStaffByNum(num, appId); + } + + @Override + public void deleteStaffByAppId(String appId) { + this.baseMapper.deleteStaffByAppId(appId); + } + +} diff --git a/usm-core/src/main/java/com/blueland/service/impl/UserServiceImpl.java b/usm-core/src/main/java/com/blueland/service/impl/UserServiceImpl.java new file mode 100644 index 0000000..d9e4a9c --- /dev/null +++ b/usm-core/src/main/java/com/blueland/service/impl/UserServiceImpl.java @@ -0,0 +1,16 @@ +package com.blueland.service.impl; + + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.blueland.model.TPubUser; +import com.blueland.service.IUserService; +import org.springframework.stereotype.Service; + +import com.blueland.bo.PubUserEntity; +import com.blueland.dao.PubUserDao; + +@Service +public class UserServiceImpl extends ServiceImpl implements IUserService { + + +} diff --git a/usm-core/src/main/resources/com/blueland/mapper/AdminUserMapper.xml b/usm-core/src/main/resources/com/blueland/mapper/AdminUserMapper.xml new file mode 100644 index 0000000..ba52c00 --- /dev/null +++ b/usm-core/src/main/resources/com/blueland/mapper/AdminUserMapper.xml @@ -0,0 +1,184 @@ + + + + + + + + + + + + + + + + + + id, + app_id, + admin_type, + user_code, + user_name, + user_org_id, + user_org_name, + user_dept_id, + user_dept_name + + + + id, + app_id, + admin_type, + user_code, + user_name, + user_org_id, + user_org_name, + user_dept_id, + user_dept_name + + + + INSERT INTO t_pf_admin_user () VALUES ( + #{id,jdbcType=VARCHAR}, + #{appId,jdbcType=VARCHAR}, + #{adminType,jdbcType=VARCHAR}, + #{userCode,jdbcType=VARCHAR}, + #{userName,jdbcType=VARCHAR}, + #{userOrgId,jdbcType=VARCHAR}, + #{userOrgName,jdbcType=VARCHAR}, + #{userDeptId,jdbcType=VARCHAR}, + #{userDeptName,jdbcType=VARCHAR} + ) + + + + + + + + + + + + + + + + AND id = #{bo.id,jdbcType=VARCHAR} + + + AND app_id = #{bo.appId,jdbcType=VARCHAR} + + + AND admin_type = #{bo.adminType,jdbcType=VARCHAR} + + + AND user_code = #{bo.userCode,jdbcType=VARCHAR} + + + AND user_name = #{bo.userName,jdbcType=VARCHAR} + + + AND user_org_id = #{bo.userOrgId,jdbcType=VARCHAR} + + + AND user_org_name = #{bo.userOrgName,jdbcType=VARCHAR} + + + AND user_dept_id = #{bo.userDeptId,jdbcType=VARCHAR} + + + AND user_dept_name = #{bo.userDeptName,jdbcType=VARCHAR} + + + + + + + T1.id = #{bo.id} + and T1.app_id = #{bo.appId} + and T1.admin_type = #{bo.adminType} + and T1.user_code = #{bo.userCode} + and T1.user_name = #{bo.userName} + and T1.user_org_id = #{bo.userOrgId} + and T1.user_org_name = #{bo.userOrgName} + and T1.user_dept_id = #{bo.userDeptId} + and T1.user_dept_name = #{bo.userDeptName} + + + + + + + + + + + DELETE FROM t_pf_admin_user WHERE app_id=#{appId,jdbcType=VARCHAR} + + + + + insert into t_pf_admin_user() values + + (#{item.id,jdbcType=VARCHAR}, + #{item.appId,jdbcType=VARCHAR}, + #{item.adminType,jdbcType=VARCHAR}, + #{item.userCode,jdbcType=VARCHAR}, + #{item.userName,jdbcType=VARCHAR}, + #{item.userOrgId,jdbcType=VARCHAR}, + #{item.userOrgName,jdbcType=VARCHAR}, + #{item.userDeptId,jdbcType=VARCHAR}, + #{item.userDeptName,jdbcType=VARCHAR}) + + + + + + delete from t_pf_admin_user where app_id in + + #{appId} + + + + + + + diff --git a/usm-core/src/main/resources/com/blueland/mapper/AppDatabaseMapper.xml b/usm-core/src/main/resources/com/blueland/mapper/AppDatabaseMapper.xml new file mode 100644 index 0000000..073911c --- /dev/null +++ b/usm-core/src/main/resources/com/blueland/mapper/AppDatabaseMapper.xml @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + app_id, + type_name, + url, + instance_name, + username, + password, + driver_name + + + + app_id, + type_name, + url, + instance_name, + username, + password, + driver_name + + + + INSERT INTO t_pf_application_db () VALUES ( + #{appId,jdbcType=VARCHAR}, + #{typeName,jdbcType=VARCHAR}, + #{url,jdbcType=VARCHAR}, + #{instanceName,jdbcType=VARCHAR}, + #{username,jdbcType=VARCHAR}, + #{password,jdbcType=VARCHAR}, + #{driverName,jdbcType=VARCHAR} + ) + + + + + + + + + + + + + + + + + AND app_id = #{bo.appId,jdbcType=VARCHAR} + + + AND type_name = #{bo.typeName,jdbcType=VARCHAR} + + + AND url = #{bo.url,jdbcType=VARCHAR} + + + AND instance_name = #{bo.instanceName,jdbcType=VARCHAR} + + + AND username = #{bo.username,jdbcType=VARCHAR} + + + AND password = #{bo.password,jdbcType=VARCHAR} + + + AND driver_name = #{bo.driverName,jdbcType=VARCHAR} + + + + + + + DELETE FROM t_pf_application_db WHERE app_id=#{appId,jdbcType=VARCHAR} + + + + + delete from t_pf_application_db where app_id in + + #{appId} + + + + + diff --git a/usm-core/src/main/resources/com/blueland/mapper/AppMapper.xml b/usm-core/src/main/resources/com/blueland/mapper/AppMapper.xml new file mode 100644 index 0000000..1f4a7c5 --- /dev/null +++ b/usm-core/src/main/resources/com/blueland/mapper/AppMapper.xml @@ -0,0 +1,149 @@ + + + + + + + + + + + + + + + + + + + + + + APP_ID, + APP_NAME, + APP_DESC, + APP_VISIT_URL, + APP_TYPE, + APP_PRIORITY, + STATUS, + CREATOR_ID, + CREATE_DATE, + UPDATOR_ID, + UPDATE_DATE, + IS_APPLY, + IS_SYNC + + + + APP_ID, + APP_NAME, + APP_DESC, + APP_VISIT_URL, + APP_TYPE, + APP_PRIORITY, + STATUS, + CREATOR_ID, + CREATE_DATE, + UPDATOR_ID, + UPDATE_DATE, + IS_APPLY, + IS_SYNC + + + + INSERT INTO t_pf_app () VALUES ( + #{appId,jdbcType=VARCHAR}, + #{appName,jdbcType=VARCHAR}, + #{appDesc,jdbcType=VARCHAR}, + #{appVisitUrl,jdbcType=VARCHAR}, + #{appType,jdbcType=VARCHAR}, + #{appPriority,jdbcType=INTEGER}, + #{status,jdbcType=VARCHAR}, + #{creatorId,jdbcType=VARCHAR}, + #{createDate,jdbcType=TIMESTAMP}, + #{updatorId,jdbcType=VARCHAR}, + #{updateDate,jdbcType=TIMESTAMP}, + #{isApply,jdbcType=VARCHAR}, + #{isSync,jdbcType=VARCHAR} + ) + + + + + + + + + + + + + + + + AND APP_ID = #{bo.appId,jdbcType=VARCHAR} + + + AND APP_NAME = #{bo.appName,jdbcType=VARCHAR} + + + AND APP_DESC = #{bo.appDesc,jdbcType=VARCHAR} + + + AND APP_VISIT_URL = #{bo.appVisitUrl,jdbcType=VARCHAR} + + + AND APP_TYPE = #{bo.appType,jdbcType=VARCHAR} + + + AND APP_PRIORITY = #{bo.appPriority,jdbcType=INTEGER} + + + AND STATUS = #{bo.status,jdbcType=VARCHAR} + + + AND CREATOR_ID = #{bo.creatorId,jdbcType=VARCHAR} + + + + AND UPDATOR_ID = #{bo.updatorId,jdbcType=VARCHAR} + + + + AND IS_APPLY = #{bo.isApply,jdbcType=VARCHAR} + + + AND IS_SYNC = #{bo.isSync,jdbcType=VARCHAR} + + + + + + + diff --git a/usm-core/src/main/resources/com/blueland/mapper/ApplicationMapper.xml b/usm-core/src/main/resources/com/blueland/mapper/ApplicationMapper.xml new file mode 100644 index 0000000..b9e4fce --- /dev/null +++ b/usm-core/src/main/resources/com/blueland/mapper/ApplicationMapper.xml @@ -0,0 +1,277 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + app_id, + app_name, + app_status, + front_port, + rear_port, + app_type, + app_describe, + is_deploy, + is_service, + sort, + remark, + create_user_code, + create_user_name, + update_user_code, + update_user_name, + create_time, + update_time, + index_url, + busi_type + + + + app_id, + app_name, + app_status, + front_port, + rear_port, + app_type, + app_describe, + is_deploy, + is_service, + sort, + remark, + create_user_code, + create_user_name, + update_user_code, + update_user_name, + create_time, + update_time, + index_url, + busi_type + + + + T1.app_id, + T1.app_name, + T1.app_status, + T1.front_port, + T1.rear_port, + T1.app_type, + T1.app_describe, + T1.is_deploy, + T1.is_service, + T1.sort, + T1.remark, + T1.create_user_code, + T1.create_user_name, + T1.update_user_code, + T1.update_user_name, + T1.create_time, + T1.update_time, + T1.index_url, + T1.busi_type + + + + INSERT INTO t_pf_application () VALUES ( + #{appId,jdbcType=VARCHAR}, + #{appName,jdbcType=VARCHAR}, + #{appStatus,jdbcType=VARCHAR}, + #{frontPort,jdbcType=VARCHAR}, + #{rearPort,jdbcType=VARCHAR}, + #{appType,jdbcType=VARCHAR}, + #{appDescribe,jdbcType=VARCHAR}, + #{isDeploy,jdbcType=VARCHAR}, + #{isService,jdbcType=VARCHAR}, + #{sort,jdbcType=INTEGER}, + #{remark,jdbcType=VARCHAR}, + #{createUserCode,jdbcType=VARCHAR}, + #{createUserName,jdbcType=VARCHAR}, + #{updateUserCode,jdbcType=VARCHAR}, + #{updateUserName,jdbcType=VARCHAR}, + #{createTime,jdbcType=TIMESTAMP}, + #{updateTime,jdbcType=TIMESTAMP}, + #{indexUrl,jdbcType=VARCHAR}, + #{busiType,jdbcType=VARCHAR} + ) + + + + + + + + + + + + + + AND app_id = #{bo.appId,jdbcType=VARCHAR} + + + AND app_name = #{bo.appName,jdbcType=VARCHAR} + + + AND app_status = #{bo.appStatus,jdbcType=VARCHAR} + + + AND front_port = #{bo.frontPort,jdbcType=VARCHAR} + + + AND rear_port = #{bo.rearPort,jdbcType=VARCHAR} + + + AND app_type = #{bo.appType,jdbcType=VARCHAR} + + + AND app_describe = #{bo.appDescribe,jdbcType=VARCHAR} + + + AND is_deploy = #{bo.isDeploy,jdbcType=VARCHAR} + + + AND is_service = #{bo.isService,jdbcType=VARCHAR} + + + AND sort = #{bo.sort,jdbcType=INTEGER} + + + AND remark = #{bo.remark,jdbcType=VARCHAR} + + + AND create_user_code = #{bo.createUserCode,jdbcType=VARCHAR} + + + AND create_user_name = #{bo.createUserName,jdbcType=VARCHAR} + + + AND update_user_code = #{bo.updateUserCode,jdbcType=VARCHAR} + + + AND update_user_name = #{bo.updateUserName,jdbcType=VARCHAR} + + + AND index_url = #{bo.indexUrl,jdbcType=VARCHAR} + + + AND busi_type = #{bo.busiType,jdbcType=VARCHAR} + + + + + + + + T1.app_Id = #{bo.appId} + and T1.app_name like CONCAT('%',#{bo.appName},'%') + and T1.app_status = #{bo.appStatus} + and T1.front_port = #{bo.frontPort} + and T1.rear_port = #{bo.rearPort} + and T1.app_type = #{bo.appType} + and T1.app_describe = #{bo.appDescribe} + and T1.is_deploy = #{bo.isDeploy,jdbcType=VARCHAR} + and T1.is_service = #{bo.isService,jdbcType=VARCHAR} + and T1.sort = #{bo.sort} + and T1.remark = #{bo.remark} + and T1.create_user_code = #{bo.createUserCode} + and T1.create_user_name = #{bo.createUserName} + and T1.update_user_code = #{bo.updateUserCode} + and T1.update_user_name = #{bo.updateUserName} + and T1.create_time = #{bo.createTime} + and T1.update_time = #{bo.updateTime} + and T1.index_url = #{bo.indexUrl} + and T1.busi_type = #{bo.busiType} + + + + + + + + + + + delete from t_pf_application where app_id in + + #{appId} + + + + + + + + + + + diff --git a/usm-core/src/main/resources/com/blueland/mapper/AreaEntityMapper.xml b/usm-core/src/main/resources/com/blueland/mapper/AreaEntityMapper.xml new file mode 100644 index 0000000..d00a4a8 --- /dev/null +++ b/usm-core/src/main/resources/com/blueland/mapper/AreaEntityMapper.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + id, aname, pid, tid, create_time as value + + + id, aname, pid, tid, create_time + + + + aname LIKE CONCAT('%',#{bo.aname},'%') + and tid LIKE CONCAT('%',#{bo.tid},'%') + + + + + + + + + + + + + + + + + insert into t_area() values ( + #{id,jdbcType=VARCHAR}, + #{aname,jdbcType=VARCHAR}, + #{pid,jdbcType=VARCHAR}, + #{tid,jdbcType=VARCHAR}, + #{createTime} + ) + + + + update t_area + + aname=#{aname,jdbcType=VARCHAR}, + pid=#{pid,jdbcType=VARCHAR}, + tid=#{tid,jdbcType=VARCHAR}, + + where id=#{id} + + + + DELETE FROM t_area WHERE + id = #{id,jdbcType=VARCHAR} + + + + INSERT INTO t_area () VALUES + + ( + #{item.id,jdbcType=VARCHAR}, + #{item.aname,jdbcType=VARCHAR}, + #{item.pid,jdbcType=VARCHAR}, + #{item.tid,jdbcType=VARCHAR}, + #{item.createTime,jdbcType=TIMESTAMP} + ) + + + diff --git a/usm-core/src/main/resources/com/blueland/mapper/AttachmentMapper.xml b/usm-core/src/main/resources/com/blueland/mapper/AttachmentMapper.xml new file mode 100644 index 0000000..c8e5aa2 --- /dev/null +++ b/usm-core/src/main/resources/com/blueland/mapper/AttachmentMapper.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + att_id, + app_id, + att_name, + att_url, + att_type, + biz_id, + biz_name, + att_show, + create_time, + create_user_id, + create_user_name, + update_time, + update_user_id, + update_user_name, + att_remark, + sdk_app_id + + + + att_id, + app_id, + att_name, + att_url, + att_type, + biz_id, + biz_name, + att_show, + create_time, + create_user_id, + create_user_name, + update_time, + update_user_id, + update_user_name, + att_remark, + sdk_app_id + + + + INSERT INTO t_pf_attachment () VALUES ( + #{attId,jdbcType=VARCHAR}, + #{appId,jdbcType=VARCHAR}, + #{attName,jdbcType=VARCHAR}, + #{attUrl,jdbcType=VARCHAR}, + #{attType,jdbcType=VARCHAR}, + #{bizId,jdbcType=VARCHAR}, + #{bizName,jdbcType=VARCHAR}, + #{attShow,jdbcType=VARCHAR}, + #{createTime,jdbcType=TIMESTAMP}, + #{createUserId,jdbcType=VARCHAR}, + #{createUserName,jdbcType=VARCHAR}, + #{updateTime,jdbcType=TIMESTAMP}, + #{updateUserId,jdbcType=VARCHAR}, + #{updateUserName,jdbcType=VARCHAR}, + #{attRemark,jdbcType=VARCHAR}, + #{sdkAppId,jdbcType=VARCHAR} + ) + + + + + + + + + + + + + + + + AND att_id = #{bo.attId,jdbcType=VARCHAR} + + + AND app_id = #{bo.appId,jdbcType=VARCHAR} + + + AND att_name = #{bo.attName,jdbcType=VARCHAR} + + + AND att_url = #{bo.attUrl,jdbcType=VARCHAR} + + + AND att_type = #{bo.attType,jdbcType=VARCHAR} + + + AND biz_id = #{bo.bizId,jdbcType=VARCHAR} + + + AND biz_name = #{bo.bizName,jdbcType=VARCHAR} + + + AND att_show = #{bo.attShow,jdbcType=VARCHAR} + + + + AND create_user_id = #{bo.createUserId,jdbcType=VARCHAR} + + + AND create_user_name = #{bo.createUserName,jdbcType=VARCHAR} + + + + AND update_user_id = #{bo.updateUserId,jdbcType=VARCHAR} + + + AND update_user_name = #{bo.updateUserName,jdbcType=VARCHAR} + + + AND att_remark = #{bo.attRemark,jdbcType=VARCHAR} + + + AND sdk_app_id = #{bo.sdkAppId,jdbcType=VARCHAR} + + + + + + + diff --git a/usm-core/src/main/resources/com/blueland/mapper/AuthMapper.xml b/usm-core/src/main/resources/com/blueland/mapper/AuthMapper.xml new file mode 100644 index 0000000..7606148 --- /dev/null +++ b/usm-core/src/main/resources/com/blueland/mapper/AuthMapper.xml @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + AUTH_ID, + AUTH_TYPE, + MENU_ID, + APP_ID, + STATUS, + CREATOR_ID, + CREATE_DATE, + UPDATOR_ID, + UPDATE_DATE, + ROLE_ID + + + + AUTH_ID, + AUTH_TYPE, + MENU_ID, + APP_ID, + STATUS, + CREATOR_ID, + CREATE_DATE, + UPDATOR_ID, + UPDATE_DATE, + ROLE_ID + + + + INSERT INTO t_pf_auth () VALUES ( + #{authId,jdbcType=VARCHAR}, + #{authType,jdbcType=VARCHAR}, + #{menuId,jdbcType=VARCHAR}, + #{appId,jdbcType=VARCHAR}, + #{status,jdbcType=VARCHAR}, + #{creatorId,jdbcType=VARCHAR}, + #{createDate,jdbcType=TIMESTAMP}, + #{updatorId,jdbcType=VARCHAR}, + #{updateDate,jdbcType=TIMESTAMP}, + #{roleId,jdbcType=VARCHAR} + ) + + + + DELETE FROM t_pf_auth WHERE + role_id = #{roleId,jdbcType=VARCHAR} + AND app_id = #{appId,jdbcType=VARCHAR} + + + + + + + + + + + + + + + + AND AUTH_ID = #{bo.authId,jdbcType=VARCHAR} + + + AND AUTH_TYPE = #{bo.authType,jdbcType=VARCHAR} + + + AND MENU_ID = #{bo.menuId,jdbcType=VARCHAR} + + + AND APP_ID = #{bo.appId,jdbcType=VARCHAR} + + + AND STATUS = #{bo.status,jdbcType=VARCHAR} + + + AND CREATOR_ID = #{bo.creatorId,jdbcType=VARCHAR} + + + + AND UPDATOR_ID = #{bo.updatorId,jdbcType=VARCHAR} + + + + AND ROLE_ID = #{bo.roleId,jdbcType=VARCHAR} + + + + + + + + + delete from t_pf_auth where app_id = #{appId} + + + + + + diff --git a/usm-core/src/main/resources/com/blueland/mapper/DictEntryMapper.xml b/usm-core/src/main/resources/com/blueland/mapper/DictEntryMapper.xml new file mode 100644 index 0000000..3fdbf1f --- /dev/null +++ b/usm-core/src/main/resources/com/blueland/mapper/DictEntryMapper.xml @@ -0,0 +1,332 @@ + + + + + + + + + + + + + + + + + + + + ID, + DICT_CODE, + DICT_PARENT_ID, + DICT_NAME, + SORT, + STATUS, + CREATOR_ID, + CREATE_DATE, + UPDATOR_ID, + UPDATE_DATE, + APP_ID + + + T1.ID, + T1.DICT_CODE, + T1.DICT_PARENT_ID, + T1.DICT_NAME, + T1.SORT, + T1.STATUS, + T1.CREATOR_ID, + T1.CREATE_DATE, + T1.UPDATOR_ID, + T1.UPDATE_DATE, + T1.APP_ID, + T1.DICT_NAME as value + + + + + + T1.DICT_CODE =#{bo.dictCode} + + + and T1.DICT_NAME LIKE CONCAT('%',#{bo.dictName},'%') + + + and T1.SORT=#{bo.sort} + + + and T1.STATUS=#{bo.status} + + + and T1.DICT_PARENT_ID=#{bo.dictParentId} + + + and T1.APP_ID=#{bo.appId} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select replace(uuid(), '-', '') + from dual + + insert into t_pf_dict() + values (#{id,jdbcType=VARCHAR}, + #{dictCode,jdbcType=VARCHAR}, + #{dictParentId,jdbcType=VARCHAR}, + #{dictName,jdbcType=VARCHAR}, + #{sort,jdbcType=INTEGER}, + #{status,jdbcType=VARCHAR}, + #{creatorId,jdbcType=VARCHAR}, + #{createDate,jdbcType=TIMESTAMP}, + #{updatorId,jdbcType=VARCHAR}, + #{updateDate,jdbcType=TIMESTAMP}, + #{appId,jdbcType=VARCHAR}) + + + + + update t_pf_dict + + + DICT_CODE=#{dictCode,jdbcType=VARCHAR}, + + + DICT_NAME=#{dictName,jdbcType=VARCHAR}, + + + APP_ID=#{appId,jdbcType=VARCHAR}, + + + DICT_PARENT_ID = #{dictParentId,jdbcType=VARCHAR}, + + + SORT = #{sort,jdbcType=INTEGER}, + + + STATUS = #{status,jdbcType=VARCHAR}, + + + UPDATOR_ID = #{updatorId,jdbcType=VARCHAR}, + + + UPDATE_DATE = #{updateDate,jdbcType=TIMESTAMP} + + + where ID = #{id} + + + + + UPDATE t_pf_dict + SET STATUS = 'N' + WHERE DICT_CODE = #{dictCode} + OR DICT_PARENT_ID = #{dictCode} + + + + DELETE + FROM t_pf_dict + WHERE ID = #{id,jdbcType=VARCHAR} + + + + + + + + + + + delete from t_pf_dict where app_id = #{appId} + + + + + + + + diff --git a/usm-core/src/main/resources/com/blueland/mapper/MenuMapper.xml b/usm-core/src/main/resources/com/blueland/mapper/MenuMapper.xml new file mode 100644 index 0000000..50e2c11 --- /dev/null +++ b/usm-core/src/main/resources/com/blueland/mapper/MenuMapper.xml @@ -0,0 +1,658 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + MENU_ID, + APP_ID, + MENU_PARENT_ID, + MENU_CODE, + MENU_NAME, + MENU_TYPE, + MENU_ICON, + MENU_URL, + SORT, + REMARK, + STATUS, + CREATOR_ID, + CREATE_DATE, + UPDATOR_ID, + UPDATE_DATE, + MENU_LEVEL, + OPEN_TYPE, + PAGE_CODE, + OPEN_STATUS + + + + MENU_ID, + APP_ID, + MENU_PARENT_ID, + MENU_CODE, + MENU_NAME, + MENU_TYPE, + MENU_ICON, + MENU_URL, + SORT, + REMARK, + STATUS, + CREATOR_ID, + CREATE_DATE, + UPDATOR_ID, + UPDATE_DATE, + MENU_LEVEL, + OPEN_TYPE, + PAGE_CODE, + OPEN_STATUS + + + + INSERT INTO t_pf_menu () VALUES ( + #{menuId,jdbcType=VARCHAR}, + #{appId,jdbcType=VARCHAR}, + #{menuParentId,jdbcType=VARCHAR}, + #{menuCode,jdbcType=VARCHAR}, + #{menuName,jdbcType=VARCHAR}, + #{menuType,jdbcType=VARCHAR}, + #{menuIcon,jdbcType=VARCHAR}, + #{menuUrl,jdbcType=VARCHAR}, + #{sort,jdbcType=INTEGER}, + #{remark,jdbcType=VARCHAR}, + #{status,jdbcType=VARCHAR}, + #{creatorId,jdbcType=VARCHAR}, + #{createDate,jdbcType=TIMESTAMP}, + #{updatorId,jdbcType=VARCHAR}, + #{updateDate,jdbcType=TIMESTAMP}, + #{menuLevel,jdbcType=INTEGER}, + #{openType,jdbcType=VARCHAR}, + #{pageCode,jdbcType=VARCHAR}, + #{openStatus,jdbcType=VARCHAR} + ) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AND MENU_ID = #{bo.menuId,jdbcType=VARCHAR} + + + AND APP_ID = #{bo.appId,jdbcType=VARCHAR} + + + AND MENU_PARENT_ID = #{bo.menuParentId,jdbcType=VARCHAR} + + + AND MENU_CODE = #{bo.menuCode,jdbcType=VARCHAR} + + + AND MENU_NAME = #{bo.menuName,jdbcType=VARCHAR} + + + AND MENU_TYPE = #{bo.menuType,jdbcType=VARCHAR} + + + AND MENU_ICON = #{bo.menuIcon,jdbcType=VARCHAR} + + + AND MENU_URL = #{bo.menuUrl,jdbcType=VARCHAR} + + + AND SORT = #{bo.sort,jdbcType=INTEGER} + + + AND REMARK = #{bo.remark,jdbcType=VARCHAR} + + + AND STATUS = #{bo.status,jdbcType=VARCHAR} + + + AND CREATOR_ID = #{bo.creatorId,jdbcType=VARCHAR} + + + + AND UPDATOR_ID = #{bo.updatorId,jdbcType=VARCHAR} + + + + AND MENU_LEVEL = #{bo.menuLevel,jdbcType=INTEGER} + + + AND OPEN_TYPE = #{bo.openType,jdbcType=VARCHAR} + + + AND PAGE_CODE = #{bo.pageCode,jdbcType=VARCHAR} + + + AND OPEN_STATUS = #{bo.openStatus,jdbcType=VARCHAR} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + delete from t_pf_menu where app_id = #{appId} + + + diff --git a/usm-core/src/main/resources/com/blueland/mapper/ModuleMapper.xml b/usm-core/src/main/resources/com/blueland/mapper/ModuleMapper.xml new file mode 100644 index 0000000..b4b24c8 --- /dev/null +++ b/usm-core/src/main/resources/com/blueland/mapper/ModuleMapper.xml @@ -0,0 +1,195 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + module_id, + code, + name, + app_id, + app_name, + access_url, + menu_sys, + parent_id, + parent_name, + hierarchy, + status, + sort, + remark, + create_user_id, + create_user_name, + update_user_id, + update_user_name, + create_time, + update_time + + + + module_id, + code, + name, + app_id, + app_name, + access_url, + menu_sys, + parent_id, + parent_name, + hierarchy, + status, + sort, + remark, + create_user_id, + create_user_name, + update_user_id, + update_user_name, + create_time, + update_time + + + + INSERT INTO t_pf_module () VALUES ( + #{moduleId,jdbcType=VARCHAR}, + #{code,jdbcType=VARCHAR}, + #{name,jdbcType=VARCHAR}, + #{appId,jdbcType=VARCHAR}, + #{appName,jdbcType=VARCHAR}, + #{accessUrl,jdbcType=VARCHAR}, + #{menuSys,jdbcType=VARCHAR}, + #{parentId,jdbcType=VARCHAR}, + #{parentName,jdbcType=VARCHAR}, + #{hierarchy,jdbcType=INTEGER}, + #{status,jdbcType=VARCHAR}, + #{sort,jdbcType=INTEGER}, + #{remark,jdbcType=VARCHAR}, + #{createUserId,jdbcType=VARCHAR}, + #{createUserName,jdbcType=VARCHAR}, + #{updateUserId,jdbcType=VARCHAR}, + #{updateUserName,jdbcType=VARCHAR}, + #{createTime,jdbcType=TIMESTAMP}, + #{updateTime,jdbcType=TIMESTAMP} + ) + + + + + + + + + + + + + + + AND module_id = #{bo.moduleId,jdbcType=VARCHAR} + + + AND code = #{bo.code,jdbcType=VARCHAR} + + + AND name = #{bo.name,jdbcType=VARCHAR} + + + AND app_id = #{bo.appId,jdbcType=VARCHAR} + + + AND app_name = #{bo.appName,jdbcType=VARCHAR} + + + AND access_url = #{bo.accessUrl,jdbcType=VARCHAR} + + + AND menu_sys = #{bo.menuSys,jdbcType=VARCHAR} + + + AND parent_id = #{bo.parentId,jdbcType=VARCHAR} + + + AND parent_name = #{bo.parentName,jdbcType=VARCHAR} + + + AND hierarchy = #{bo.hierarchy,jdbcType=INTEGER} + + + AND status = #{bo.status,jdbcType=VARCHAR} + + + AND sort = #{bo.sort,jdbcType=INTEGER} + + + AND remark = #{bo.remark,jdbcType=VARCHAR} + + + AND create_user_id = #{bo.createUserId,jdbcType=VARCHAR} + + + AND create_user_name = #{bo.createUserName,jdbcType=VARCHAR} + + + AND update_user_id = #{bo.updateUserId,jdbcType=VARCHAR} + + + AND update_user_name = #{bo.updateUserName,jdbcType=VARCHAR} + + + + + + + + + + + diff --git a/usm-core/src/main/resources/com/blueland/mapper/OrgMapper.xml b/usm-core/src/main/resources/com/blueland/mapper/OrgMapper.xml new file mode 100644 index 0000000..f893399 --- /dev/null +++ b/usm-core/src/main/resources/com/blueland/mapper/OrgMapper.xml @@ -0,0 +1,480 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, + org_id, + org_full_name, + org_name, + org_full_spells, + org_spells, + org_type, + org_level, + org_parent_id, + org_parent_name, + company_id, + org_branch_leader, + org_branch_leader_name, + org_work_address, + org_work_phone, + org_status, + org_sort, + org_create_time, + org_creator, + org_update_time, + org_updator, + company_name, + org_mgr_type, + dept_id, + dept_name, + org_sub_type, + org_hr_id, + staffing, + org_work_type, + app_id + + + + id, + org_id, + org_full_name, + org_name, + org_full_spells, + org_spells, + org_type, + org_level, + org_parent_id, + org_parent_name, + company_id, + org_branch_leader, + org_branch_leader_name, + org_work_address, + org_work_phone, + org_status, + org_sort, + org_create_time, + org_creator, + org_update_time, + org_updator, + company_name, + org_mgr_type, + dept_id, + dept_name, + org_sub_type, + org_hr_id, + staffing, + org_work_type, + app_id + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AND id = #{bo.id,jdbcType=VARCHAR} + + + AND org_id = #{bo.orgId,jdbcType=VARCHAR} + + + AND org_full_name = #{bo.orgFullName,jdbcType=VARCHAR} + + + AND org_name = #{bo.orgName,jdbcType=VARCHAR} + + + AND org_full_spells = #{bo.orgFullSpells,jdbcType=VARCHAR} + + + AND org_spells = #{bo.orgSpells,jdbcType=VARCHAR} + + + AND org_type = #{bo.orgType,jdbcType=VARCHAR} + + + AND org_level = #{bo.orgLevel,jdbcType=INTEGER} + + + AND org_parent_id = #{bo.orgParentId,jdbcType=VARCHAR} + + + AND org_parent_name = #{bo.orgParentName,jdbcType=VARCHAR} + + + AND (company_id = #{bo.companyId,jdbcType=VARCHAR} + OR dept_id like concat(#{bo.companyId},'%')) + + + AND org_branch_leader = #{bo.orgBranchLeader,jdbcType=VARCHAR} + + + AND org_branch_leader_name = #{bo.orgBranchLeaderName,jdbcType=VARCHAR} + + + AND org_work_address = #{bo.orgWorkAddress,jdbcType=VARCHAR} + + + AND org_work_phone = #{bo.orgWorkPhone,jdbcType=VARCHAR} + + + AND org_status = #{bo.orgStatus,jdbcType=VARCHAR} + + + AND org_sort = #{bo.orgSort,jdbcType=INTEGER} + + + + AND org_creator = #{bo.orgCreator,jdbcType=VARCHAR} + + + + AND org_updator = #{bo.orgUpdator,jdbcType=VARCHAR} + + + AND company_name = #{bo.companyName,jdbcType=VARCHAR} + + + AND org_mgr_type = #{bo.orgMgrType,jdbcType=VARCHAR} + + + AND dept_id = #{bo.deptId} + + + AND dept_id like concat('%', #{bo.likeDeptId}, '%') + + + AND dept_name = #{bo.deptName,jdbcType=VARCHAR} + + + AND org_sub_type = #{bo.orgSubType,jdbcType=VARCHAR} + + + AND org_hr_id = #{bo.orgHrId,jdbcType=VARCHAR} + + + AND staffing = #{bo.staffing,jdbcType=VARCHAR} + + + AND org_work_type = #{bo.orgWorkType,jdbcType=VARCHAR} + + + AND (org_name like concat('%',#{bo.queryOrg},'%') OR org_id = #{bo.queryOrg} ) + + + and app_id = #{bo.appId,jdbcType=VARCHAR} + + + and dept_id in + + #{id} + + + + and org_spells in + + #{code} + + + + + + + + + + + + + + + + + + + + + + + + delete from t_uc_org WHERE app_id = #{appId} + + + + + + + + + + + + + + + + diff --git a/usm-core/src/main/resources/com/blueland/mapper/ParameterMapper.xml b/usm-core/src/main/resources/com/blueland/mapper/ParameterMapper.xml new file mode 100644 index 0000000..5493704 --- /dev/null +++ b/usm-core/src/main/resources/com/blueland/mapper/ParameterMapper.xml @@ -0,0 +1,163 @@ + + + + + + + + + + + + + + P_ID, + DESCRIPTION, + P_KEY, + P_VALUE, + APP_ID + + + + P_ID, + DESCRIPTION, + P_KEY, + P_VALUE, + APP_ID + + + + INSERT INTO t_pf_parameter () VALUES ( + #{pid,jdbcType=VARCHAR}, + #{description,jdbcType=VARCHAR}, + #{pkey,jdbcType=VARCHAR}, + #{pvalue,jdbcType=VARCHAR}, + #{appId,jdbcType=VARCHAR} + ) + + + + + + + + + + + + + + + + + + + + + + + + + AND P_ID = #{bo.pid,jdbcType=VARCHAR} + + + AND DESCRIPTION = #{bo.description,jdbcType=VARCHAR} + + + AND P_KEY = #{bo.pkey,jdbcType=VARCHAR} + + + AND P_VALUE = #{bo.pvalue,jdbcType=VARCHAR} + + + AND APP_ID = #{bo.appId,jdbcType=VARCHAR} + + + + + + + + + + diff --git a/usm-core/src/main/resources/com/blueland/mapper/PubOrgMapper.xml b/usm-core/src/main/resources/com/blueland/mapper/PubOrgMapper.xml new file mode 100644 index 0000000..40f0a84 --- /dev/null +++ b/usm-core/src/main/resources/com/blueland/mapper/PubOrgMapper.xml @@ -0,0 +1,219 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ORG_ID, + ORG_NAME, + ORG_FULL_NAME, + ORG_FULL_PATH_NAME, + ORG_FULL_PATH_ID, + ORG_PARENT_ID, + ORG_TYPE, + ORG_LEVEL, + ORG_AREA_TYPE, + ORG_SORT, + ORG_WORK_PHONE, + ORG_WORK_ADDRESS, + ORG_PRINCIPAL, + ORG_STATUS, + ORG_CREATE_TIME, + REMARK, + FUND_CODE, + FUND_NAME, + COMPANY_ID, + DEPT_ID, + DEPT_NAME, + COMPANY_NAME, + ORG_BRANCH_LEADER + + + + ORG_ID, + ORG_NAME, + ORG_FULL_NAME, + ORG_FULL_PATH_NAME, + ORG_FULL_PATH_ID, + ORG_PARENT_ID, + ORG_TYPE, + ORG_LEVEL, + ORG_AREA_TYPE, + ORG_SORT, + ORG_WORK_PHONE, + ORG_WORK_ADDRESS, + ORG_PRINCIPAL, + ORG_STATUS, + ORG_CREATE_TIME, + REMARK, + FUND_CODE, + FUND_NAME, + COMPANY_ID, + DEPT_ID, + DEPT_NAME, + COMPANY_NAME, + ORG_BRANCH_LEADER + + + + INSERT INTO t_pub_org () VALUES ( + #{orgId,jdbcType=VARCHAR}, + #{orgName,jdbcType=VARCHAR}, + #{orgFullName,jdbcType=VARCHAR}, + #{orgFullPathName,jdbcType=VARCHAR}, + #{orgFullPathId,jdbcType=VARCHAR}, + #{orgParentId,jdbcType=VARCHAR}, + #{orgType,jdbcType=VARCHAR}, + #{orgLevel,jdbcType=INTEGER}, + #{orgAreaType,jdbcType=VARCHAR}, + #{orgSort,jdbcType=INTEGER}, + #{orgWorkPhone,jdbcType=VARCHAR}, + #{orgWorkAddress,jdbcType=VARCHAR}, + #{orgPrincipal,jdbcType=VARCHAR}, + #{orgStatus,jdbcType=VARCHAR}, + #{orgCreateTime,jdbcType=TIMESTAMP}, + #{remark,jdbcType=VARCHAR}, + #{fundCode,jdbcType=VARCHAR}, + #{fundName,jdbcType=VARCHAR}, + #{companyId,jdbcType=VARCHAR}, + #{deptId,jdbcType=VARCHAR}, + #{deptName,jdbcType=VARCHAR}, + #{companyName,jdbcType=VARCHAR}, + #{orgBranchLeader,jdbcType=VARCHAR} + ) + + + + + + + + + + + + + + AND ORG_ID = #{bo.orgId,jdbcType=VARCHAR} + + + AND ORG_NAME = #{bo.orgName,jdbcType=VARCHAR} + + + AND ORG_FULL_NAME = #{bo.orgFullName,jdbcType=VARCHAR} + + + AND ORG_FULL_PATH_NAME = #{bo.orgFullPathName,jdbcType=VARCHAR} + + + AND ORG_FULL_PATH_ID = #{bo.orgFullPathId,jdbcType=VARCHAR} + + + AND ORG_PARENT_ID = #{bo.orgParentId,jdbcType=VARCHAR} + + + AND ORG_TYPE = #{bo.orgType,jdbcType=VARCHAR} + + + AND ORG_LEVEL = #{bo.orgLevel,jdbcType=INTEGER} + + + AND ORG_AREA_TYPE = #{bo.orgAreaType,jdbcType=VARCHAR} + + + AND ORG_SORT = #{bo.orgSort,jdbcType=INTEGER} + + + AND ORG_WORK_PHONE = #{bo.orgWorkPhone,jdbcType=VARCHAR} + + + AND ORG_WORK_ADDRESS = #{bo.orgWorkAddress,jdbcType=VARCHAR} + + + AND ORG_PRINCIPAL = #{bo.orgPrincipal,jdbcType=VARCHAR} + + + AND ORG_STATUS = #{bo.orgStatus,jdbcType=VARCHAR} + + + + AND REMARK = #{bo.remark,jdbcType=VARCHAR} + + + AND FUND_CODE = #{bo.fundCode,jdbcType=VARCHAR} + + + AND FUND_NAME = #{bo.fundName,jdbcType=VARCHAR} + + + AND COMPANY_ID = #{bo.companyId,jdbcType=VARCHAR} + + + AND DEPT_ID = #{bo.deptId,jdbcType=VARCHAR} + + + AND DEPT_NAME = #{bo.deptName,jdbcType=VARCHAR} + + + AND COMPANY_NAME = #{bo.companyName,jdbcType=VARCHAR} + + + AND ORG_BRANCH_LEADER = #{bo.orgBranchLeader,jdbcType=VARCHAR} + + + + + + + diff --git a/usm-core/src/main/resources/com/blueland/mapper/PubUserMapper.xml b/usm-core/src/main/resources/com/blueland/mapper/PubUserMapper.xml new file mode 100644 index 0000000..e9689a5 --- /dev/null +++ b/usm-core/src/main/resources/com/blueland/mapper/PubUserMapper.xml @@ -0,0 +1,311 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + USER_ID, + USER_CODE, + USER_NAME, + USER_SEX, + USER_AGE, + COMPANY_ID, + ORG_ID, + USER_MOBILE, + USER_MAIL, + USER_WORK_ADDRESS, + USER_WORK_PHONE, + USER_HOME_ADDREE, + USER_HOME_PHONE, + POSITION_ID, + PLURALITY_POSITION_ID, + TITLE_ID, + PLURALITY_TITLE_ID, + USER_TYPE, + USER_STATUS, + USER_SORT, + PASSWORD, + SALT, + USER_CREATE_TIME, + USER_UPDATE_TIME, + USER_CREATOR, + REMARK, + DEPT_ID, + COMPANY_NAME, + DEPT_NAME, + ORG_NAME + + + + USER_ID, + USER_CODE, + USER_NAME, + USER_SEX, + USER_AGE, + COMPANY_ID, + ORG_ID, + USER_MOBILE, + USER_MAIL, + USER_WORK_ADDRESS, + USER_WORK_PHONE, + USER_HOME_ADDREE, + USER_HOME_PHONE, + POSITION_ID, + PLURALITY_POSITION_ID, + TITLE_ID, + PLURALITY_TITLE_ID, + USER_TYPE, + USER_STATUS, + USER_SORT, + PASSWORD, + SALT, + USER_CREATE_TIME, + USER_UPDATE_TIME, + USER_CREATOR, + REMARK, + DEPT_ID, + COMPANY_NAME, + DEPT_NAME, + ORG_NAME + + + + INSERT INTO t_pub_user () VALUES ( + #{userId,jdbcType=VARCHAR}, + #{userCode,jdbcType=VARCHAR}, + #{userName,jdbcType=VARCHAR}, + #{userSex,jdbcType=VARCHAR}, + #{userAge,jdbcType=INTEGER}, + #{companyId,jdbcType=VARCHAR}, + #{orgId,jdbcType=VARCHAR}, + #{userMobile,jdbcType=VARCHAR}, + #{userMail,jdbcType=VARCHAR}, + #{userWorkAddress,jdbcType=VARCHAR}, + #{userWorkPhone,jdbcType=VARCHAR}, + #{userHomeAddree,jdbcType=VARCHAR}, + #{userHomePhone,jdbcType=VARCHAR}, + #{positionId,jdbcType=VARCHAR}, + #{pluralityPositionId,jdbcType=VARCHAR}, + #{titleId,jdbcType=VARCHAR}, + #{pluralityTitleId,jdbcType=VARCHAR}, + #{userType,jdbcType=VARCHAR}, + #{userStatus,jdbcType=VARCHAR}, + #{userSort,jdbcType=INTEGER}, + #{password,jdbcType=VARCHAR}, + #{salt,jdbcType=VARCHAR}, + #{userCreateTime,jdbcType=TIMESTAMP}, + #{userUpdateTime,jdbcType=TIMESTAMP}, + #{userCreator,jdbcType=VARCHAR}, + #{remark,jdbcType=VARCHAR}, + #{deptId,jdbcType=VARCHAR}, + #{companyName,jdbcType=VARCHAR}, + #{deptName,jdbcType=VARCHAR}, + #{orgName,jdbcType=VARCHAR} + ) + + + + + + + + + + + + + + + + + AND USER_ID = #{bo.userId,jdbcType=VARCHAR} + + + AND USER_CODE = #{bo.userCode,jdbcType=VARCHAR} + + + AND USER_NAME = #{bo.userName,jdbcType=VARCHAR} + + + AND USER_SEX = #{bo.userSex,jdbcType=VARCHAR} + + + AND USER_AGE = #{bo.userAge,jdbcType=INTEGER} + + + AND COMPANY_ID = #{bo.companyId,jdbcType=VARCHAR} + + + AND ORG_ID = #{bo.orgId,jdbcType=VARCHAR} + + + AND USER_MOBILE = #{bo.userMobile,jdbcType=VARCHAR} + + + AND USER_MAIL = #{bo.userMail,jdbcType=VARCHAR} + + + AND USER_WORK_ADDRESS = #{bo.userWorkAddress,jdbcType=VARCHAR} + + + AND USER_WORK_PHONE = #{bo.userWorkPhone,jdbcType=VARCHAR} + + + AND USER_HOME_ADDREE = #{bo.userHomeAddree,jdbcType=VARCHAR} + + + AND USER_HOME_PHONE = #{bo.userHomePhone,jdbcType=VARCHAR} + + + AND POSITION_ID = #{bo.positionId,jdbcType=VARCHAR} + + + AND PLURALITY_POSITION_ID = #{bo.pluralityPositionId,jdbcType=VARCHAR} + + + AND TITLE_ID = #{bo.titleId,jdbcType=VARCHAR} + + + AND PLURALITY_TITLE_ID = #{bo.pluralityTitleId,jdbcType=VARCHAR} + + + AND USER_TYPE = #{bo.userType,jdbcType=VARCHAR} + + + AND USER_STATUS = #{bo.userStatus,jdbcType=VARCHAR} + + + AND USER_SORT = #{bo.userSort,jdbcType=INTEGER} + + + AND PASSWORD = #{bo.password,jdbcType=VARCHAR} + + + AND SALT = #{bo.salt,jdbcType=VARCHAR} + + + + + AND USER_CREATOR = #{bo.userCreator,jdbcType=VARCHAR} + + + AND REMARK = #{bo.remark,jdbcType=VARCHAR} + + + AND DEPT_ID = #{bo.deptId,jdbcType=VARCHAR} + + + AND COMPANY_NAME = #{bo.companyName,jdbcType=VARCHAR} + + + AND DEPT_NAME = #{bo.deptName,jdbcType=VARCHAR} + + + AND ORG_NAME = #{bo.orgName,jdbcType=VARCHAR} + + + + + + + diff --git a/usm-core/src/main/resources/com/blueland/mapper/Role2userMapper.xml b/usm-core/src/main/resources/com/blueland/mapper/Role2userMapper.xml new file mode 100644 index 0000000..4d8103b --- /dev/null +++ b/usm-core/src/main/resources/com/blueland/mapper/Role2userMapper.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + delete from t_pf_role2user where app_id = #{appId} + + + + + + diff --git a/usm-core/src/main/resources/com/blueland/mapper/RoleMapper.xml b/usm-core/src/main/resources/com/blueland/mapper/RoleMapper.xml new file mode 100644 index 0000000..a3be372 --- /dev/null +++ b/usm-core/src/main/resources/com/blueland/mapper/RoleMapper.xml @@ -0,0 +1,422 @@ + + + + + + + + + + + + + + + + + + + + + + ROLE_ID, + APP_ID, + ROLE_NAME, + ROLE_TYPE, + ROLE_MODULE, + ORG_ID, + SORT, + REMARK, + STATUS, + CREATOR_ID, + CREATE_DATE, + UPDATOR_ID, + UPDATE_DATE + + + + role_id, + app_id, + role_name, + role_type, + role_module, + org_id, + sort, + remark, + status, + creator_id, + create_date, + updator_id, + update_date + + + + INSERT INTO t_pf_role () VALUES ( + #{roleId,jdbcType=VARCHAR}, + #{appId,jdbcType=VARCHAR}, + #{roleName,jdbcType=VARCHAR}, + #{roleType,jdbcType=VARCHAR}, + #{roleModule,jdbcType=VARCHAR}, + #{orgId,jdbcType=VARCHAR}, + #{sort,jdbcType=INTEGER}, + #{remark,jdbcType=VARCHAR}, + #{status,jdbcType=VARCHAR}, + #{creatorId,jdbcType=VARCHAR}, + #{createDate,jdbcType=TIMESTAMP}, + #{updatorId,jdbcType=VARCHAR}, + #{updateDate,jdbcType=TIMESTAMP} + ) + + + + DELETE FROM t_pf_role2user WHERE + role_id = #{roleId,jdbcType=VARCHAR} AND + app_id = #{appId,jdbcType=VARCHAR} + + + + DELETE FROM t_pf_role WHERE + role_id = #{roleId,jdbcType=VARCHAR} AND + app_id = #{appId,jdbcType=VARCHAR} + + + + + + + + + + + + + + + + + + + + insert into t_pf_role2user (role_id, user_id,status,creator_id,create_date,updator_id,update_date,org_id,org_name,title_id,app_id) values ( + #{roleId,jdbcType=VARCHAR}, + #{userId,jdbcType=VARCHAR}, + 'Y', + #{creatorId,jdbcType=VARCHAR}, + #{createDate,jdbcType=TIMESTAMP}, + #{updatorId,jdbcType=VARCHAR}, + #{updateDate,jdbcType=TIMESTAMP}, + #{orgId,jdbcType=VARCHAR}, + #{orgName,jdbcType=VARCHAR}, + #{titleId,jdbcType=VARCHAR}, + #{appId,jdbcType=VARCHAR} + ) + + + delete from t_pf_role2user where app_id =#{appId,jdbcType=VARCHAR} + and role_id=#{roleId,jdbcType=VARCHAR} + and user_id=#{userId,jdbcType=VARCHAR} + + + + + + + + + + + + AND ROLE_ID = #{bo.roleId,jdbcType=VARCHAR} + + + AND APP_ID = #{bo.appId,jdbcType=VARCHAR} + + + AND ROLE_NAME = #{bo.roleName,jdbcType=VARCHAR} + + + AND ROLE_TYPE = #{bo.roleType,jdbcType=VARCHAR} + + + AND ROLE_MODULE = #{bo.roleModule,jdbcType=VARCHAR} + + + AND ORG_ID = #{bo.orgId,jdbcType=VARCHAR} + + + AND SORT = #{bo.sort,jdbcType=INTEGER} + + + AND REMARK = #{bo.remark,jdbcType=VARCHAR} + + + AND STATUS = #{bo.status,jdbcType=VARCHAR} + + + AND CREATOR_ID = #{bo.creatorId,jdbcType=VARCHAR} + + + + AND UPDATOR_ID = #{bo.updatorId,jdbcType=VARCHAR} + + + + + + + + + + + + + + delete from t_pf_role2user + where app_id =#{appId,jdbcType=VARCHAR} + and role_id=#{roleId,jdbcType=VARCHAR} + and staff_post_code=#{postCode,jdbcType=VARCHAR} + + + + + + delete from t_pf_role where app_id = #{appId} + + + + + diff --git a/usm-core/src/main/resources/com/blueland/mapper/SysOplogMapper.xml b/usm-core/src/main/resources/com/blueland/mapper/SysOplogMapper.xml new file mode 100644 index 0000000..9d384d1 --- /dev/null +++ b/usm-core/src/main/resources/com/blueland/mapper/SysOplogMapper.xml @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + id, + user_id, + user_name, + biz_id, + biz_type, + type, + content, + status, + aceess_ip, + create_time, + aceess_browse, + app_id, + remark + + + + id, + user_id, + user_name, + biz_id, + biz_type, + type, + content, + status, + aceess_ip, + create_time, + aceess_browse, + app_id, + remark + + + + + + + + + + + + + + + AND id = #{bo.id,jdbcType=VARCHAR} + + + AND user_id = #{bo.userId,jdbcType=VARCHAR} + + + AND user_name like CONCAT('%',#{bo.userName,jdbcType=VARCHAR},'%') + + + AND biz_id like CONCAT('%',#{bo.bizId,jdbcType=VARCHAR},'%') + + + AND biz_type like CONCAT('%',#{bo.bizType,jdbcType=VARCHAR},'%') + + + AND type = #{bo.type,jdbcType=VARCHAR} + + + AND content like CONCAT('%',#{bo.content,jdbcType=VARCHAR},'%') + + + AND status = #{bo.status,jdbcType=CHAR} + + + AND aceess_ip = #{bo.aceessIp,jdbcType=VARCHAR} + + + + AND aceess_browse = #{bo.aceessBrowse,jdbcType=VARCHAR} + + + AND app_id = #{bo.appId,jdbcType=VARCHAR} + + + AND remark = #{bo.remark,jdbcType=VARCHAR} + + + AND DATE_FORMAT( create_time, '%Y-%m-%d' ) = DATE_FORMAT( #{bo.createTime}, '%Y-%m-%d' ) + + + + + + + + + + diff --git a/usm-core/src/main/resources/com/blueland/mapper/SysPvlogMapper.xml b/usm-core/src/main/resources/com/blueland/mapper/SysPvlogMapper.xml new file mode 100644 index 0000000..67ddc92 --- /dev/null +++ b/usm-core/src/main/resources/com/blueland/mapper/SysPvlogMapper.xml @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + id, + user_id, + user_name, + biz_id, + biz_type, + aceess_title, + aceess_ip, + aceess_url, + aceess_time, + aceess_source, + aceess_device, + aceess_browse, + app_id, + remark + + + + id, + user_id, + user_name, + biz_id, + biz_type, + aceess_title, + aceess_ip, + aceess_url, + aceess_time, + aceess_source, + aceess_device, + aceess_browse, + app_id, + remark + + + + + + + + + + + + + + AND id = #{bo.id,jdbcType=VARCHAR} + + + AND user_id = #{bo.userId,jdbcType=VARCHAR} + + + AND user_name like CONCAT('%',#{bo.userName,jdbcType=VARCHAR},'%') + + + AND biz_id = #{bo.bizId,jdbcType=VARCHAR} + + + AND biz_type = #{bo.bizType,jdbcType=VARCHAR} + + + AND aceess_title = #{bo.aceessTitle,jdbcType=VARCHAR} + + + AND aceess_ip = #{bo.aceessIp,jdbcType=VARCHAR} + + + AND aceess_url = #{bo.aceessUrl,jdbcType=VARCHAR} + + + + AND aceess_source = #{bo.aceessSource,jdbcType=VARCHAR} + + + AND aceess_device = #{bo.aceessDevice,jdbcType=VARCHAR} + + + AND aceess_browse = #{bo.aceessBrowse,jdbcType=VARCHAR} + + + AND app_id = #{bo.appId,jdbcType=VARCHAR} + + + AND remark = #{bo.remark,jdbcType=VARCHAR} + + + + + + + + + + diff --git a/usm-core/src/main/resources/com/blueland/mapper/SysTimetaskMapper.xml b/usm-core/src/main/resources/com/blueland/mapper/SysTimetaskMapper.xml new file mode 100644 index 0000000..5452da4 --- /dev/null +++ b/usm-core/src/main/resources/com/blueland/mapper/SysTimetaskMapper.xml @@ -0,0 +1,161 @@ + + + + + + + + + + + + + + + + + + + + + + id, + task_type, + task_code, + description, + cron_exp, + action, + status, + app_id, + create_id, + create_time, + update_id, + update_time, + remark + + + + id, + task_type, + task_code, + description, + cron_exp, + action, + status, + app_id, + create_id, + create_time, + update_id, + update_time, + remark + + + + INSERT INTO t_pf_sys_timetask () VALUES ( + #{id,jdbcType=VARCHAR}, + #{taskType,jdbcType=VARCHAR}, + #{taskCode,jdbcType=VARCHAR}, + #{description,jdbcType=VARCHAR}, + #{cronExp,jdbcType=VARCHAR}, + #{action,jdbcType=VARCHAR}, + #{status,jdbcType=VARCHAR}, + #{appId,jdbcType=VARCHAR}, + #{createId,jdbcType=VARCHAR}, + #{createTime,jdbcType=TIMESTAMP}, + #{updateId,jdbcType=VARCHAR}, + #{updateTime,jdbcType=TIMESTAMP}, + #{remark,jdbcType=VARCHAR} + ) + + + + + + + + + + + + + + + + AND id = #{bo.id,jdbcType=VARCHAR} + + + AND task_type = #{bo.taskType,jdbcType=VARCHAR} + + + AND task_code = #{bo.taskCode,jdbcType=VARCHAR} + + + AND description = #{bo.description,jdbcType=VARCHAR} + + + AND cron_exp = #{bo.cronExp,jdbcType=VARCHAR} + + + AND action = #{bo.action,jdbcType=VARCHAR} + + + AND status = #{bo.status,jdbcType=VARCHAR} + + + AND app_id = #{bo.appId,jdbcType=VARCHAR} + + + AND create_id = #{bo.createId,jdbcType=VARCHAR} + + + + AND update_id = #{bo.updateId,jdbcType=VARCHAR} + + + + AND remark = #{bo.remark,jdbcType=VARCHAR} + + + + + + + + + + + diff --git a/usm-core/src/main/resources/com/blueland/mapper/TucStaffMapper.xml b/usm-core/src/main/resources/com/blueland/mapper/TucStaffMapper.xml new file mode 100644 index 0000000..9d59470 --- /dev/null +++ b/usm-core/src/main/resources/com/blueland/mapper/TucStaffMapper.xml @@ -0,0 +1,1322 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + staff_id, + staff_name, + staff_en_name, + org_id, + org_name, + staff_spells, + staff_short_spells, + staff_num, + staff_short_num, + position_id, + position_name, + staff_sex, + staff_age, + staff_paperwork_type, + staff_paperwork_num, + staff_mail, + staff_mobile, + staff_mobile_bak, + staff_fax, + staff_short_fax, + staff_wechart, + staff_home_address, + staff_home_phone, + staff_work_address, + staff_work_phone, + staff_passport, + staff_nation, + staff_political_status, + staff_native_place, + staff_sort, + staff_status, + staff_type, + staff_sub_type, + staff_creator, + staff_create_time, + staff_updator, + staff_lastupdate_time, + staff_work_type, + company_id, + company_name, + dept_id, + dept_name, + staff_hr_id, + staff_code, + staff_birthday, + staff_education, + staff_retired_time, + staff_job_status, + staff_account_type, + staff_phone_bak, + staff_post_code, + staff_post_type, + app_id + + + + staff_id, + staff_name, + staff_en_name, + org_id, + org_name, + staff_spells, + staff_short_spells, + staff_num, + staff_short_num, + position_id, + position_name, + staff_sex, + staff_age, + staff_paperwork_type, + staff_paperwork_num, + staff_mail, + staff_mobile, + staff_mobile_bak, + staff_fax, + staff_short_fax, + staff_wechart, + staff_home_address, + staff_home_phone, + staff_work_address, + staff_work_phone, + staff_passport, + staff_nation, + staff_political_status, + staff_native_place, + staff_sort, + staff_status, + staff_type, + staff_sub_type, + staff_creator, + staff_create_time, + staff_updator, + staff_lastupdate_time, + staff_work_type, + company_id, + company_name, + dept_id, + dept_name, + staff_hr_id, + staff_code, + staff_birthday, + staff_education, + staff_retired_time, + staff_job_status, + staff_account_type, + staff_phone_bak, + staff_post_code, + staff_post_type, + app_id + + + + INSERT INTO t_uc_staff ( + + ) + VALUES (#{staffId,jdbcType=VARCHAR}, + #{staffName,jdbcType=VARCHAR}, + #{staffEnName,jdbcType=VARCHAR}, + #{orgId,jdbcType=VARCHAR}, + #{orgName,jdbcType=VARCHAR}, + #{staffSpells,jdbcType=VARCHAR}, + #{staffShortSpells,jdbcType=VARCHAR}, + #{staffNum,jdbcType=VARCHAR}, + #{staffShortNum,jdbcType=VARCHAR}, + #{positionId,jdbcType=VARCHAR}, + #{positionName,jdbcType=VARCHAR}, + #{staffSex,jdbcType=VARCHAR}, + #{staffAge,jdbcType=INTEGER}, + #{staffPaperworkType,jdbcType=VARCHAR}, + #{staffPaperworkNum,jdbcType=VARCHAR}, + #{staffMail,jdbcType=VARCHAR}, + #{staffMobile,jdbcType=VARCHAR}, + #{staffMobileBak,jdbcType=VARCHAR}, + #{staffFax,jdbcType=VARCHAR}, + #{staffShortFax,jdbcType=VARCHAR}, + #{staffWechart,jdbcType=VARCHAR}, + #{staffHomeAddress,jdbcType=VARCHAR}, + #{staffHomePhone,jdbcType=VARCHAR}, + #{staffWorkAddress,jdbcType=VARCHAR}, + #{staffWorkPhone,jdbcType=VARCHAR}, + #{staffPassport,jdbcType=VARCHAR}, + #{staffNation,jdbcType=VARCHAR}, + #{staffPoliticalStatus,jdbcType=VARCHAR}, + #{staffNativePlace,jdbcType=VARCHAR}, + #{staffSort,jdbcType=INTEGER}, + #{staffStatus,jdbcType=VARCHAR}, + #{staffType,jdbcType=VARCHAR}, + #{staffSubType,jdbcType=VARCHAR}, + #{staffCreator,jdbcType=VARCHAR}, + #{staffCreateTime,jdbcType=TIMESTAMP}, + #{staffUpdator,jdbcType=VARCHAR}, + #{staffLastupdateTime,jdbcType=TIMESTAMP}, + #{staffWorkType,jdbcType=VARCHAR}, + #{companyId,jdbcType=VARCHAR}, + #{companyName,jdbcType=VARCHAR}, + #{deptId,jdbcType=VARCHAR}, + #{deptName,jdbcType=VARCHAR}, + #{staffHrId,jdbcType=VARCHAR}, + #{staffCode,jdbcType=VARCHAR}, + #{staffBirthday,jdbcType=TIMESTAMP}, + #{staffEducation,jdbcType=VARCHAR}, + #{staffRetiredTime,jdbcType=TIMESTAMP}, + #{staffJobStatus,jdbcType=VARCHAR}, + #{staffAccountType,jdbcType=VARCHAR}, + #{staffPhoneBak,jdbcType=VARCHAR}, + #{staffPostCode,jdbcType=VARCHAR}, + #{staffPostType,jdbcType=VARCHAR}, + #{appId,jdbcType=VARCHAR}) + + + + UPDATE t_uc_staff + + + staff_name = #{staffName,jdbcType=VARCHAR}, + + + staff_en_name = #{staffEnName,jdbcType=VARCHAR}, + + + org_id = #{orgId,jdbcType=VARCHAR}, + + + org_name = #{orgName,jdbcType=VARCHAR}, + + + staff_spells = #{staffSpells,jdbcType=VARCHAR}, + + + staff_short_spells = + #{staffShortSpells,jdbcType=VARCHAR}, + + + staff_num = #{staffNum,jdbcType=VARCHAR}, + + + staff_short_num = #{staffShortNum,jdbcType=VARCHAR}, + + + position_id = #{positionId,jdbcType=VARCHAR}, + + + position_name = #{positionName,jdbcType=VARCHAR}, + + + staff_sex = #{staffSex,jdbcType=VARCHAR}, + + + staff_age = #{staffAge,jdbcType=INTEGER}, + + + staff_paperwork_type = + #{staffPaperworkType,jdbcType=VARCHAR}, + + + staff_paperwork_num = + #{staffPaperworkNum,jdbcType=VARCHAR}, + + + staff_mail = #{staffMail,jdbcType=VARCHAR}, + + + staff_mobile = #{staffMobile,jdbcType=VARCHAR}, + + + staff_mobile_bak = #{staffMobileBak,jdbcType=VARCHAR}, + + + staff_fax = #{staffFax,jdbcType=VARCHAR}, + + + staff_short_fax = #{staffShortFax,jdbcType=VARCHAR}, + + + staff_wechart = #{staffWechart,jdbcType=VARCHAR}, + + + staff_home_address = + #{staffHomeAddress,jdbcType=VARCHAR}, + + + staff_home_phone = #{staffHomePhone,jdbcType=VARCHAR}, + + + staff_work_address = + #{staffWorkAddress,jdbcType=VARCHAR}, + + + staff_work_phone = #{staffWorkPhone,jdbcType=VARCHAR}, + + + staff_passport = #{staffPassport,jdbcType=VARCHAR}, + + + staff_nation = #{staffNation,jdbcType=VARCHAR}, + + + staff_political_status = + #{staffPoliticalStatus,jdbcType=VARCHAR}, + + + staff_native_place = + #{staffNativePlace,jdbcType=VARCHAR}, + + + staff_sort = #{staffSort,jdbcType=INTEGER}, + + + staff_status = #{staffStatus,jdbcType=VARCHAR}, + + + staff_type = #{staffType,jdbcType=VARCHAR}, + + + staff_sub_type = #{staffSubType,jdbcType=VARCHAR}, + + + staff_creator = #{staffCreator,jdbcType=VARCHAR}, + + + staff_create_time = + #{staffCreateTime,jdbcType=TIMESTAMP}, + + + staff_updator = #{staffUpdator,jdbcType=VARCHAR}, + + + staff_lastupdate_time = + #{staffLastupdateTime,jdbcType=TIMESTAMP}, + + + staff_work_type = #{staffWorkType,jdbcType=VARCHAR}, + + + company_id = #{companyId,jdbcType=VARCHAR}, + + + company_name = #{companyName,jdbcType=VARCHAR}, + + + dept_id = #{deptId,jdbcType=VARCHAR}, + + + dept_name = #{deptName,jdbcType=VARCHAR}, + + + staff_hr_id = #{staffHrId,jdbcType=VARCHAR}, + + + staff_code = #{staffCode,jdbcType=VARCHAR}, + + + staff_birthday = #{staffBirthday,jdbcType=TIMESTAMP}, + + + staff_education = #{staffEducation,jdbcType=VARCHAR}, + + + staff_retired_time = + #{staffRetiredTime,jdbcType=TIMESTAMP}, + + + staff_job_status = #{staffJobStatus,jdbcType=VARCHAR}, + + + staff_account_type = #{staffAccountType,jdbcType=VARCHAR}, + + + staff_phone_bak = #{staffPhoneBak,jdbcType=VARCHAR}, + + + staff_post_code = #{staffPostCode,jdbcType=VARCHAR}, + + + staff_post_type = #{staffPostType,jdbcType=VARCHAR}, + + + app_id = #{appId,jdbcType=VARCHAR} + + + WHERE staff_code = #{staffCode,jdbcType=VARCHAR} + + + + UPDATE t_uc_staff + + + staff_name = #{staffName,jdbcType=VARCHAR}, + + + staff_en_name = #{staffEnName,jdbcType=VARCHAR}, + + + org_id = #{orgId,jdbcType=VARCHAR}, + + + org_name = #{orgName,jdbcType=VARCHAR}, + + + staff_spells = #{staffSpells,jdbcType=VARCHAR}, + + + staff_short_spells = + #{staffShortSpells,jdbcType=VARCHAR}, + + + staff_num = #{staffNum,jdbcType=VARCHAR}, + + + staff_short_num = #{staffShortNum,jdbcType=VARCHAR}, + + + position_id = #{positionId,jdbcType=VARCHAR}, + + + position_name = #{positionName,jdbcType=VARCHAR}, + + + staff_sex = #{staffSex,jdbcType=VARCHAR}, + + + staff_age = #{staffAge,jdbcType=INTEGER}, + + + staff_paperwork_type = + #{staffPaperworkType,jdbcType=VARCHAR}, + + + staff_paperwork_num = + #{staffPaperworkNum,jdbcType=VARCHAR}, + + + staff_mail = #{staffMail,jdbcType=VARCHAR}, + + + staff_mobile = #{staffMobile,jdbcType=VARCHAR}, + + + staff_mobile_bak = #{staffMobileBak,jdbcType=VARCHAR}, + + + staff_fax = #{staffFax,jdbcType=VARCHAR}, + + + staff_short_fax = #{staffShortFax,jdbcType=VARCHAR}, + + + staff_wechart = #{staffWechart,jdbcType=VARCHAR}, + + + staff_home_address = + #{staffHomeAddress,jdbcType=VARCHAR}, + + + staff_home_phone = #{staffHomePhone,jdbcType=VARCHAR}, + + + staff_work_address = + #{staffWorkAddress,jdbcType=VARCHAR}, + + + staff_work_phone = #{staffWorkPhone,jdbcType=VARCHAR}, + + + staff_passport = #{staffPassport,jdbcType=VARCHAR}, + + + staff_nation = #{staffNation,jdbcType=VARCHAR}, + + + staff_political_status = + #{staffPoliticalStatus,jdbcType=VARCHAR}, + + + staff_native_place = + #{staffNativePlace,jdbcType=VARCHAR}, + + + staff_sort = #{staffSort,jdbcType=INTEGER}, + + + staff_status = #{staffStatus,jdbcType=VARCHAR}, + + + staff_type = #{staffType,jdbcType=VARCHAR}, + + + staff_sub_type = #{staffSubType,jdbcType=VARCHAR}, + + + staff_creator = #{staffCreator,jdbcType=VARCHAR}, + + + staff_create_time = + #{staffCreateTime,jdbcType=TIMESTAMP}, + + + staff_updator = #{staffUpdator,jdbcType=VARCHAR}, + + + staff_lastupdate_time = + #{staffLastupdateTime,jdbcType=TIMESTAMP}, + + + staff_work_type = #{staffWorkType,jdbcType=VARCHAR}, + + + company_id = #{companyId,jdbcType=VARCHAR}, + + + company_name = #{companyName,jdbcType=VARCHAR}, + + + dept_id = #{deptId,jdbcType=VARCHAR}, + + + dept_name = #{deptName,jdbcType=VARCHAR}, + + + staff_hr_id = #{staffHrId,jdbcType=VARCHAR}, + + + staff_code = #{staffCode,jdbcType=VARCHAR}, + + + staff_birthday = #{staffBirthday,jdbcType=TIMESTAMP}, + + + staff_education = #{staffEducation,jdbcType=VARCHAR}, + + + staff_retired_time = + #{staffRetiredTime,jdbcType=TIMESTAMP}, + + + staff_job_status = #{staffJobStatus,jdbcType=VARCHAR}, + + + staff_account_type = #{staffAccountType,jdbcType=VARCHAR}, + + + staff_phone_bak = #{staffPhoneBak,jdbcType=VARCHAR}, + + + staff_post_code = #{staffPostCode,jdbcType=VARCHAR}, + + + staff_post_type = #{staffPostType,jdbcType=VARCHAR}, + + + app_id = #{appId,jdbcType=VARCHAR} + + + WHERE staff_num = #{staffNum,jdbcType=VARCHAR} + + + + DELETE + FROM t_uc_staff + WHERE staff_code = + #{staffId,jdbcType=VARCHAR} + + + + + + + + + + + + + + + + AND staff_id = #{bo.staffId,jdbcType=VARCHAR} + + + AND staff_name = #{bo.staffName,jdbcType=VARCHAR} + + + AND staff_en_name = #{bo.staffEnName,jdbcType=VARCHAR} + + + AND org_id = #{bo.orgId,jdbcType=VARCHAR} + + + AND org_name = #{bo.orgName,jdbcType=VARCHAR} + + + AND staff_spells = #{bo.staffSpells,jdbcType=VARCHAR} + + + AND staff_short_spells = + #{bo.staffShortSpells,jdbcType=VARCHAR} + + + AND staff_num = #{bo.staffNum,jdbcType=VARCHAR} + + + AND staff_short_num = #{bo.staffShortNum,jdbcType=VARCHAR} + + + AND position_id = #{bo.positionId,jdbcType=VARCHAR} + + + AND position_name = #{bo.positionName,jdbcType=VARCHAR} + + + AND staff_sex = #{bo.staffSex,jdbcType=VARCHAR} + + + AND staff_age = #{bo.staffAge,jdbcType=INTEGER} + + + AND staff_paperwork_type = + #{bo.staffPaperworkType,jdbcType=VARCHAR} + + + AND staff_paperwork_num = + #{bo.staffPaperworkNum,jdbcType=VARCHAR} + + + AND staff_mail = #{bo.staffMail,jdbcType=VARCHAR} + + + AND staff_mobile = #{bo.staffMobile,jdbcType=VARCHAR} + + + AND staff_mobile_bak = #{bo.staffMobileBak,jdbcType=VARCHAR} + + + AND staff_fax = #{bo.staffFax,jdbcType=VARCHAR} + + + AND staff_short_fax = #{bo.staffShortFax,jdbcType=VARCHAR} + + + AND staff_wechart = #{bo.staffWechart,jdbcType=VARCHAR} + + + AND staff_home_address = + #{bo.staffHomeAddress,jdbcType=VARCHAR} + + + AND staff_home_phone = #{bo.staffHomePhone,jdbcType=VARCHAR} + + + AND staff_work_address = + #{bo.staffWorkAddress,jdbcType=VARCHAR} + + + AND staff_work_phone = #{bo.staffWorkPhone,jdbcType=VARCHAR} + + + AND staff_passport = #{bo.staffPassport,jdbcType=VARCHAR} + + + AND staff_nation = #{bo.staffNation,jdbcType=VARCHAR} + + + AND staff_political_status = + #{bo.staffPoliticalStatus,jdbcType=VARCHAR} + + + AND staff_native_place = + #{bo.staffNativePlace,jdbcType=VARCHAR} + + + AND staff_sort = #{bo.staffSort,jdbcType=INTEGER} + + + AND staff_status = #{bo.staffStatus,jdbcType=VARCHAR} + + + AND staff_type = #{bo.staffType,jdbcType=VARCHAR} + + + AND staff_sub_type = #{bo.staffSubType,jdbcType=VARCHAR} + + + AND staff_creator = #{bo.staffCreator,jdbcType=VARCHAR} + + + + AND staff_updator = #{bo.staffUpdator,jdbcType=VARCHAR} + + + + AND staff_work_type = #{bo.staffWorkType,jdbcType=VARCHAR} + + + AND company_id = #{bo.companyId,jdbcType=VARCHAR} + + + AND company_name = #{bo.companyName,jdbcType=VARCHAR} + + + AND dept_id = #{bo.deptId,jdbcType=VARCHAR} + + + AND dept_id like concat('%', #{bo.likeDeptId}, '%') + + + AND dept_name = #{bo.deptName,jdbcType=VARCHAR} + + + AND staff_hr_id = #{bo.staffHrId,jdbcType=VARCHAR} + + + AND staff_code = #{bo.staffCode,jdbcType=VARCHAR} + + + + AND staff_education = #{bo.staffEducation,jdbcType=VARCHAR} + + + + AND staff_job_status = #{bo.staffJobStatus,jdbcType=VARCHAR} + + + AND staff_account_type = + #{bo.staffAccountType,jdbcType=VARCHAR} + + + AND staff_phone_bak = #{bo.staffPhoneBak,jdbcType=VARCHAR} + + + AND FIND_IN_SET(org_id, getOrgChildLst(#{bo.queryOrgId},#{bo.staffType})) + + + AND (staff_name like CONCAT('%',#{bo.queryStaff},'%' ) OR staff_code = #{bo.queryStaff} OR staff_num = + #{bo.queryStaff} OR staff_mobile = #{bo.queryStaff}) + + + AND dept_id like CONCAT(#{bo.queryDeptId},'%') + + + and staff_post_code = #{bo.staffPostCode} + + + and staff_post_type = #{bo.staffPostType} + + + and app_id = #{bo.appId,jdbcType=VARCHAR} + + + and staff_post_code in + + #{code} + + + + and staff_code in + + #{code} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + UPDATE t_uc_staff + + staff_phone_bak = '' + + where staff_phone_bak = #{staffPhoneBak,jdbcType=VARCHAR} + + + + UPDATE t_uc_staff + SET dept_name = #{deptname}, + org_name = #{deptname} + WHERE dept_id = #{deptcode} + + + + + + + + + + + + + + + + + + + + + + + DELETE + FROM t_uc_staff + WHERE staff_post_code = #{postCode} + + + + + + + + + + + + + + delete from t_uc_staff where app_id = #{appId} + + + diff --git a/usm-model/.checkstyle b/usm-model/.checkstyle new file mode 100644 index 0000000..5783bc0 --- /dev/null +++ b/usm-model/.checkstyle @@ -0,0 +1,7 @@ + + + + + + + diff --git a/usm-model/.classpath b/usm-model/.classpath new file mode 100644 index 0000000..f3872e6 --- /dev/null +++ b/usm-model/.classpath @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/usm-model/.project b/usm-model/.project new file mode 100644 index 0000000..f0dbd35 --- /dev/null +++ b/usm-model/.project @@ -0,0 +1,35 @@ + + + blueland-plateform-model + + + + + + org.eclipse.wst.common.project.facet.core.builder + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + com.genuitec.eclipse.springframework.springbuilder + + + + + + com.genuitec.eclipse.springframework.springnature + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + org.eclipse.wst.common.project.facet.core.nature + + diff --git a/usm-model/pom.xml b/usm-model/pom.xml new file mode 100644 index 0000000..9da03d7 --- /dev/null +++ b/usm-model/pom.xml @@ -0,0 +1,79 @@ + + + 4.0.0 + + com.blueland + blueland-plateform + 1.0-SNAPSHOT + + usm-model + usm-model + http://maven.apache.org + + UTF-8 + + + + org.projectlombok + lombok + provided + + + + + + + + + org.hibernate + hibernate-validator + ${hibernate-validator.version} + provided + + + com.alibaba + fastjson + ${fastjson.version} + provided + + + ch.qos.logback + logback-classic + 1.2.3 + compile + + + cn.afterturn + easypoi-base + ${easypoi-base.version} + + + cn.afterturn + easypoi-web + ${easypoi-web.version} + + + cn.afterturn + easypoi-annotation + ${easypoi-annotation.version} + + + com.alibaba + easyexcel + 2.1.4 + compile + + + com.baomidou + mybatis-plus-annotation + 3.4.3.4 + compile + + + io.swagger + swagger-annotations + 1.5.24 + + + diff --git a/usm-model/src/main/java/com/blueland/bo/AdminUserEntity.java b/usm-model/src/main/java/com/blueland/bo/AdminUserEntity.java new file mode 100644 index 0000000..e0c78f5 --- /dev/null +++ b/usm-model/src/main/java/com/blueland/bo/AdminUserEntity.java @@ -0,0 +1,74 @@ +package com.blueland.bo; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.blueland.model.Query; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import lombok.experimental.Accessors; +import org.apache.poi.ss.formula.functions.T; +import org.hibernate.validator.constraints.Length; +import org.hibernate.validator.constraints.NotBlank; +@Data +@EqualsAndHashCode(callSuper=false) +@Accessors(chain = true) +@TableName("abnorrmal_fault") +public class AdminUserEntity extends Query { + private static final long serialVersionUID = 1L; + //alias + public static final String TABLE_ALIAS = "PfAdminUser"; + + + //可以直接使用: @Length(max=50,message="用户名长度不能大于50")显示错误消息 + //columns START + /** + * id db_column: id + */ + @Length(max=50) + @TableId(value = "id", type = IdType.AUTO) + private String id; + /** + * 业务ID db_column: app_id + */ + @NotBlank @Length(max=50) + private String appId; + /** + * 类型(应用管理:YYGL,业务域:YWY) db_column: admin_type + */ + @NotBlank @Length(max=100) + private String adminType; + /** + * 用户code db_column: user_code + */ + @NotBlank @Length(max=50) + private String userCode; + /** + * 用户名称 db_column: user_name + */ + @NotBlank @Length(max=100) + private String userName; + /** + * 用户组织id db_column: user_org_id + */ + @NotBlank @Length(max=50) + private String userOrgId; + /** + * 用户组织名称 db_column: user_org_name + */ + @NotBlank @Length(max=100) + private String userOrgName; + /** + * 用户部门id db_column: user_dept_id + */ + @NotBlank @Length(max=50) + private String userDeptId; + /** + * 用户部门Name db_column: user_dept_name + */ + @NotBlank @Length(max=100) + private String userDeptName; + //columns END +} + diff --git a/usm-model/src/main/java/com/blueland/bo/AppDatabaseEntity.java b/usm-model/src/main/java/com/blueland/bo/AppDatabaseEntity.java new file mode 100644 index 0000000..ad74308 --- /dev/null +++ b/usm-model/src/main/java/com/blueland/bo/AppDatabaseEntity.java @@ -0,0 +1,56 @@ +package com.blueland.bo; + +import com.blueland.model.Query; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.hibernate.validator.constraints.Length; +import org.hibernate.validator.constraints.NotBlank; + +@Data @EqualsAndHashCode(callSuper=false) +public class AppDatabaseEntity extends Query { + private static final long serialVersionUID = 1L; + //alias + public static final String TABLE_ALIAS = "PfAppDatabase"; + + + //可以直接使用: @Length(max=50,message="用户名长度不能大于50")显示错误消息 + //columns START + /** + * 应用id db_column: app_id + */ + @NotBlank @Length(max=50) + private String appId; + /** + * 数据库类型(mysql;oracle;h2) db_column: type_name + */ + @Length(max=20) + private String typeName; + /** + * 数据库地址 db_column: url + */ + @Length(max=200) + private String url; + /** + * 数据库实例名称 db_column: instance_name + */ + @Length(max=50) + private String instanceName; + /** + * 数据库账号 db_column: username + */ + @Length(max=50) + private String username; + /** + * 数据库密码 db_column: password + */ + @Length(max=50) + private String password; + /** + * 数据库驱动名称 db_column: driver_name + */ + @Length(max=60) + private String driverName; + //columns END + +} + diff --git a/usm-model/src/main/java/com/blueland/bo/AppEntity.java b/usm-model/src/main/java/com/blueland/bo/AppEntity.java new file mode 100644 index 0000000..a82b3d6 --- /dev/null +++ b/usm-model/src/main/java/com/blueland/bo/AppEntity.java @@ -0,0 +1,92 @@ +package com.blueland.bo; + +import java.util.*; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.blueland.model.Query; +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.validation.constraints.NotNull; +import org.hibernate.validator.constraints.Length; +import org.hibernate.validator.constraints.NotBlank; +@Data @EqualsAndHashCode(callSuper=false) +@TableName("t_pf_app") +public class AppEntity extends Query { + private static final long serialVersionUID = 1L; + //alias + public static final String TABLE_ALIAS = "App"; + + + //可以直接使用: @Length(max=50,message="用户名长度不能大于50")显示错误消息 + //columns START + /** + * 应用ID db_column: APP_ID + */ + @TableId("app_id") + @Length(max=50) + private String appId; + /** + * 应用名称 db_column: APP_NAME + */ + @NotBlank @Length(max=50) + private String appName; + /** + * 应用描述 db_column: APP_DESC + */ + @Length(max=65535) + private String appDesc; + /** + * 访问地址 db_column: APP_VISIT_URL + */ + @Length(max=65535) + private String appVisitUrl; + /** + * 应用类型 Y:三方管理 N:平台自管理 db_column: APP_TYPE + */ + @NotBlank @Length(max=2) + private String appType; + /** + * 优先级 db_column: APP_PRIORITY + */ + + private Integer appPriority; + /** + * 状态 Y:启用 N:禁用 db_column: STATUS + */ + @NotBlank @Length(max=2) + private String status; + /** + * 创建人 db_column: CREATOR_ID + */ + @Length(max=50) + private String creatorId; + /** + * 创建时间 db_column: CREATE_DATE + */ + @NotNull + private Date createDate; + /** + * 更新人 db_column: UPDATOR_ID + */ + @Length(max=50) + private String updatorId; + /** + * 更新时间 db_column: UPDATE_DATE + */ + @NotNull + private Date updateDate; + /** + * 是否可以进行权限申请 Y: 是 N: 否 db_column: IS_APPLY + */ + @Length(max=2) + private String isApply; + /** + * 是否开启同步 Y: 是 N: 否 db_column: IS_SYNC + */ + @Length(max=2) + private String isSync; + //columns END + +} + diff --git a/usm-model/src/main/java/com/blueland/bo/AppIdUserIdAppIdRoleIdDTO.java b/usm-model/src/main/java/com/blueland/bo/AppIdUserIdAppIdRoleIdDTO.java new file mode 100644 index 0000000..702489d --- /dev/null +++ b/usm-model/src/main/java/com/blueland/bo/AppIdUserIdAppIdRoleIdDTO.java @@ -0,0 +1,16 @@ +package com.blueland.bo; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +@Data +@EqualsAndHashCode(callSuper=false) +public class AppIdUserIdAppIdRoleIdDTO { + private String appId; + + private String userId; + + private List list; +} diff --git a/usm-model/src/main/java/com/blueland/bo/ApplicationEntity.java b/usm-model/src/main/java/com/blueland/bo/ApplicationEntity.java new file mode 100644 index 0000000..2e1af8c --- /dev/null +++ b/usm-model/src/main/java/com/blueland/bo/ApplicationEntity.java @@ -0,0 +1,143 @@ +package com.blueland.bo; + +import java.util.Date; +import java.util.List; + +import com.blueland.model.Query; +import org.hibernate.validator.constraints.Length; +import org.hibernate.validator.constraints.NotBlank; + + +import lombok.Data; +import lombok.EqualsAndHashCode; +@Data +@EqualsAndHashCode(callSuper=false) +public class ApplicationEntity extends Query { + private static final long serialVersionUID = 1L; + //alias + public static final String TABLE_ALIAS = "PfApplication"; + + + //可以直接使用: @Length(max=50,message="用户名长度不能大于50")显示错误消息 + //columns START + /** + * 应用标识-英文 db_column: app_id + */ + @NotBlank @Length(max=50) + private String appId; + /** + * 应用名称 db_column: app_name + */ + @NotBlank @Length(max=200) + private String appName; + /** + * 状态,启用:QY 禁用: JY db_column: app_status + */ + @NotBlank @Length(max=30) + private String appStatus; + /** + * 前端端口 db_column: front_port + */ + @NotBlank @Length(max=50) + private String frontPort; + /** + * 后端端口 db_column: rear_port + */ + @NotBlank @Length(max=50) + private String rearPort; + /** + * 营销:YX db_column: app_type + */ + @NotBlank @Length(max=30) + private String appType; + /** + * 应用描述 db_column: app_describe + */ + @Length(max=2000) + private String appDescribe; + /** + * 是否独立部署(是:Y;否:N) db_column: is_deploy + */ + @NotBlank @Length(max=10) + private String isDeploy; + /** + * 是否生成后端服务(是:Y;否:N) db_column: is_service + */ + @NotBlank @Length(max=10) + private String isService; + /** + * 排序 db_column: sort + */ + + private Integer sort; + /** + * 备注 db_column: remark + */ + @Length(max=500) + private String remark; + /** + * 创建人code db_column: create_user_code + */ + @NotBlank @Length(max=50) + private String createUserCode; + /** + * 创建人姓名 db_column: create_user_name + */ + @Length(max=100) + private String createUserName; + /** + * 更新人code db_column: update_user_code + */ + @Length(max=50) + private String updateUserCode; + /** + * 更新人姓名 db_column: update_user_name + */ + @Length(max=100) + private String updateUserName; + /** + * 创建时间 db_column: create_time + */ + + private Date createTime; + /** + * 更新时间 db_column: update_time + */ + + private Date updateTime; + /** + * 首页地址 db_column: index_url + */ + @Length(max=100) + private String indexUrl; + /** + * 更新时间 db_column: busi_type + */ + + private String busiType; + //columns END + + private List adminUserList; + + private List adminOrgList; + + private AppDatabaseEntity appDatabaseList; + + private String adminUserName; + + private String adminOrgName; + + private String notAppType; + + public ApplicationEntity(){ + } + + public ApplicationEntity( + String appId + ){ + this.appId = appId; + } + + +} + diff --git a/usm-model/src/main/java/com/blueland/bo/AreaEntity.java b/usm-model/src/main/java/com/blueland/bo/AreaEntity.java new file mode 100644 index 0000000..70a0a5d --- /dev/null +++ b/usm-model/src/main/java/com/blueland/bo/AreaEntity.java @@ -0,0 +1,29 @@ +package com.blueland.bo; + +import com.blueland.model.Query; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; + +@Data +@EqualsAndHashCode(callSuper=false) +public class AreaEntity extends Query { + private static final long serialVersionUID = 1L; + + //主键id + private String id; + //名称 + private String aname; + + //父id + private String pid; + + //省份编码 + private String tid; + + //创建时间 + private Date createTime; + + +} diff --git a/usm-model/src/main/java/com/blueland/bo/AreaExpEntity.java b/usm-model/src/main/java/com/blueland/bo/AreaExpEntity.java new file mode 100644 index 0000000..edaea5d --- /dev/null +++ b/usm-model/src/main/java/com/blueland/bo/AreaExpEntity.java @@ -0,0 +1,18 @@ +package com.blueland.bo; + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +/** + * @Desc 导入行政信息 + */ +@Data +public class AreaExpEntity { + + @ExcelProperty("行政编码") + private String tid; + + @ExcelProperty("名称") + private String aname; + +} \ No newline at end of file diff --git a/usm-model/src/main/java/com/blueland/bo/AttachmentEntity.java b/usm-model/src/main/java/com/blueland/bo/AttachmentEntity.java new file mode 100644 index 0000000..40c72f5 --- /dev/null +++ b/usm-model/src/main/java/com/blueland/bo/AttachmentEntity.java @@ -0,0 +1,102 @@ +package com.blueland.bo; + +import java.util.Date; + +import com.blueland.model.Query; +import org.hibernate.validator.constraints.Length; + +import lombok.Data; +import lombok.EqualsAndHashCode; +@Data @EqualsAndHashCode(callSuper=false) +public class AttachmentEntity extends Query { + private static final long serialVersionUID = 1L; + //alias + public static final String TABLE_ALIAS = "Attachment"; + + + //可以直接使用: @Length(max=50,message="用户名长度不能大于50")显示错误消息 + //columns START + /** + * id db_column: att_id + */ + @Length(max=50) + private String attId; + /** + * 应用ID db_column: app_id + */ + @Length(max=50) + private String appId; + /** + * 附件名称 db_column: att_name + */ + @Length(max=255) + private String attName; + /** + * 附件路径 db_column: att_url + */ + @Length(max=255) + private String attUrl; + /** + * 附件类型 db_column: att_type + */ + @Length(max=20) + private String attType; + /** + * 业务id db_column: biz_id + */ + @Length(max=50) + private String bizId; + /** + * 业务name db_column: biz_name + */ + @Length(max=255) + private String bizName; + /** + * 是否可见,y:可见,n:不可见 db_column: att_show + */ + @Length(max=10) + private String attShow; + /** + * 创建时间 db_column: create_time + */ + + private Date createTime; + /** + * createUserId db_column: create_user_id + */ + @Length(max=50) + private String createUserId; + /** + * createUserName db_column: create_user_name + */ + @Length(max=50) + private String createUserName; + /** + * 更新时间 db_column: update_time + */ + + private Date updateTime; + /** + * 更新用户id db_column: update_user_id + */ + @Length(max=50) + private String updateUserId; + /** + * 更新用户名称 db_column: update_user_name + */ + @Length(max=50) + private String updateUserName; + /** + * 备注 db_column: att_remark + */ + @Length(max=255) + private String attRemark; + /** + * 文档云id db_column: sdk_app_id + */ + @Length(max=50) + private String sdkAppId; + //columns END + +} + diff --git a/usm-model/src/main/java/com/blueland/bo/AuthEntity.java b/usm-model/src/main/java/com/blueland/bo/AuthEntity.java new file mode 100644 index 0000000..9b046e5 --- /dev/null +++ b/usm-model/src/main/java/com/blueland/bo/AuthEntity.java @@ -0,0 +1,74 @@ +package com.blueland.bo; + +import java.util.*; + +import com.blueland.model.Query; +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.validation.constraints.NotNull; +import org.hibernate.validator.constraints.Length; +import org.hibernate.validator.constraints.NotBlank; +@Data @EqualsAndHashCode(callSuper=false) +public class AuthEntity extends Query { + private static final long serialVersionUID = 1L; + //alias + public static final String TABLE_ALIAS = "Auth"; + + + //可以直接使用: @Length(max=50,message="用户名长度不能大于50")显示错误消息 + //columns START + /** + * 权限ID db_column: AUTH_ID + */ + @Length(max=50) + private String authId; + /** + * 权限类型 备用 db_column: AUTH_TYPE + */ + @Length(max=20) + private String authType; + /** + * 资源ID db_column: MENU_ID + */ + @NotBlank @Length(max=100) + private String menuId; + /** + * 系统标识 db_column: APP_ID + */ + @NotBlank @Length(max=50) + private String appId; + /** + * 状态 Y:启用 N;禁用 db_column: STATUS + */ + @NotBlank @Length(max=2) + private String status; + /** + * 创建人 db_column: CREATOR_ID + */ + @Length(max=50) + private String creatorId; + /** + * 创建时间 db_column: CREATE_DATE + */ + @NotNull + private Date createDate; + /** + * 更新人 db_column: UPDATOR_ID + */ + @Length(max=50) + private String updatorId; + /** + * 更新时间 db_column: UPDATE_DATE + */ + @NotNull + private Date updateDate; + /** + * 角色ID db_column: ROLE_ID + */ + @NotBlank @Length(max=100) + private String roleId; + //columns END + + +} + diff --git a/usm-model/src/main/java/com/blueland/bo/CommonRedisDTO.java b/usm-model/src/main/java/com/blueland/bo/CommonRedisDTO.java new file mode 100644 index 0000000..6e73950 --- /dev/null +++ b/usm-model/src/main/java/com/blueland/bo/CommonRedisDTO.java @@ -0,0 +1,16 @@ +package com.blueland.bo; + +import lombok.Data; + +/** + * @program: crm + * @description: redis 通用对象 + * @author: bigtian + * @create: 2022-01-07 11:36 + */ +@Data +public class CommonRedisDTO { + private String code; + private String value; + private String status; +} diff --git a/usm-model/src/main/java/com/blueland/bo/DictEntity.java b/usm-model/src/main/java/com/blueland/bo/DictEntity.java new file mode 100644 index 0000000..0122bef --- /dev/null +++ b/usm-model/src/main/java/com/blueland/bo/DictEntity.java @@ -0,0 +1,85 @@ +package com.blueland.bo; + +import java.util.Date; + +import com.blueland.model.Query; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.NotNull; + +import org.hibernate.validator.constraints.Length; +import org.hibernate.validator.constraints.NotBlank; +@Data +@EqualsAndHashCode(callSuper=false) +public class DictEntity extends Query { + private static final long serialVersionUID = 1L; + //alias + public static final String TABLE_ALIAS = "Dict"; + + + //可以直接使用: @Length(max=50,message="用户名长度不能大于50")显示错误消息 + //columns START + /** + * 主键id db_column: ID + */ + @Length(max=50) + private String id; + /** + * 字典编码 db_column: DICT_CODE + */ + @NotBlank @Length(max=50) + private String dictCode; + /** + * 父编码 db_column: DICT_PARENT_ID + */ + @Length(max=50) + private String dictParentId; + /** + * 字典名称 db_column: DICT_NAME + */ + @NotBlank @Length(max=65535) + private String dictName; + /** + * 排序号 db_column: SORT + */ + + private Long sort; + /** + * 状态Y:启用 N:禁用 db_column: STATUS + */ + @NotBlank @Length(max=2) + private String status; + /** + * 创建人 db_column: CREATOR_ID + */ + @Length(max=50) + private String creatorId; + /** + * 创建时间 db_column: CREATE_DATE + */ + @NotNull + private Date createDate; + /** + * 最后更新人 db_column: UPDATOR_ID + */ + @Length(max=50) + private String updatorId; + /** + * 最后更新时间 db_column: UPDATE_DATE + */ + @NotNull + private Date updateDate; + /** + * 应用id db_column: APP_ID + */ + private String appId; + //columns END + + /** + * input组件远程获取数据必须有value + */ + private String value; + +} + diff --git a/usm-model/src/main/java/com/blueland/bo/MenuEntity.java b/usm-model/src/main/java/com/blueland/bo/MenuEntity.java new file mode 100644 index 0000000..3d68970 --- /dev/null +++ b/usm-model/src/main/java/com/blueland/bo/MenuEntity.java @@ -0,0 +1,135 @@ +package com.blueland.bo; + +import java.util.*; + +import com.blueland.model.Query; +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.validation.constraints.NotNull; +import org.hibernate.validator.constraints.Length; +import org.hibernate.validator.constraints.NotBlank; +@Data +@EqualsAndHashCode(callSuper=false) +public class MenuEntity extends Query { + private static final long serialVersionUID = 1L; + //alias + public static final String TABLE_ALIAS = "Menu"; + + + //可以直接使用: @Length(max=50,message="用户名长度不能大于50")显示错误消息 + //columns START + /** + * 资源ID db_column: MENU_ID + */ + @Length(max=50) + private String menuId; + /** + * 系统标识 db_column: APP_ID + */ + @NotBlank @Length(max=50) + private String appId; + /** + * 上级资源ID db_column: MENU_PARENT_ID + */ + @Length(max=50) + private String menuParentId; + /** + * 资源编码 db_column: MENU_CODE + */ + @Length(max=50) + private String menuCode; + /** + * 资源名称 db_column: MENU_NAME + */ + @Length(max=50) + private String menuName; + /** + * 类型 folder:目录 menu:菜单 button:按钮 db_column: MENU_TYPE + */ + @Length(max=20) + private String menuType; + /** + * 资源图标 db_column: MENU_ICON + */ + @Length(max=50) + private String menuIcon; + /** + * 菜单资源类型 form:表单,flowForm:流程表单,dataTable:数据表格,report:报表 db_column: RES_TYPE + */ + @Length(max=20) + private String resType; + /** + * 资源URL db_column: MENU_URL + */ + @Length(max=200) + private String menuUrl; + /** + * 排序 db_column: SORT + */ + + private Integer sort; + /** + * 备注 db_column: REMARK + */ + @Length(max=65535) + private String remark; + /** + * 状态 Y:启用 N:禁用 db_column: STATUS + */ + @Length(max=2) + private String status; + /** + * 创建人 db_column: CREATOR_ID + */ + @Length(max=50) + private String creatorId; + /** + * 创建时间 db_column: CREATE_DATE + */ + @NotNull + private Date createDate; + /** + * 更新人 db_column: UPDATOR_ID + */ + @Length(max=50) + private String updatorId; + /** + * 更新时间 db_column: UPDATE_DATE + */ + @NotNull + private Date updateDate; + /** + * 资源级别 db_column: MENU_LEVEL + */ + @NotNull + private Integer menuLevel; + /** + * 打开方式 2当前页面 1弹出页面 db_column: OPEN_TYPE + */ + @Length(max=10) + private String openType; + /** + * 页面编码 db_column: PAGE_CODE + */ + @Length(max=50) + private String pageCode; + /** + * 是否公开 1是 2否 db_column: OPEN_STATUS + */ + @Length(max=10) + private String openStatus; + + private Boolean isParent; + + private Boolean hasChildren; + + private String formId; + + private String modelId; + + + private List children; + //columns END + +} + diff --git a/usm-model/src/main/java/com/blueland/bo/ModuleEntity.java b/usm-model/src/main/java/com/blueland/bo/ModuleEntity.java new file mode 100644 index 0000000..e161a5b --- /dev/null +++ b/usm-model/src/main/java/com/blueland/bo/ModuleEntity.java @@ -0,0 +1,120 @@ +package com.blueland.bo; + +import java.util.*; + +import com.blueland.model.Query; +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.validation.constraints.NotNull; +import org.hibernate.validator.constraints.Length; +import org.hibernate.validator.constraints.NotBlank; +@Data +@EqualsAndHashCode(callSuper=false) +public class ModuleEntity extends Query { + private static final long serialVersionUID = 1L; + //alias + public static final String TABLE_ALIAS = "TpfModule"; + + + //可以直接使用: @Length(max=50,message="用户名长度不能大于50")显示错误消息 + //columns START + /** + * 模块主键 db_column: module_id + */ + @Length(max=50) + private String moduleId; + /** + * 模块标识-英文 db_column: code + */ + @NotBlank @Length(max=50) + private String code; + /** + * 模块名称 db_column: name + */ + @NotBlank @Length(max=200) + private String name; + /** + * 所属应用ID db_column: app_id + */ + @NotBlank @Length(max=50) + private String appId; + /** + * 所属应用名称 db_column: app_name + */ + @NotBlank @Length(max=100) + private String appName; + /** + * 模块访问URL db_column: access_url + */ + @Length(max=2000) + private String accessUrl; + /** + * 是否与菜单同步 db_column: menu_sys + */ + @Length(max=10) + private String menuSys; + /** + * 父模块ID db_column: parent_id + */ + @Length(max=50) + private String parentId; + /** + * 父模块名称 db_column: parent_name + */ + @Length(max=200) + private String parentName; + /** + * 层级 db_column: hierarchy + */ + @NotNull + private Integer hierarchy; + /** + * 状态,启用:QY 禁用: JY db_column: status + */ + @NotBlank @Length(max=10) + private String status; + /** + * 排序 db_column: sort + */ + @NotNull + private Integer sort; + /** + * 备注 db_column: remark + */ + @Length(max=500) + private String remark; + /** + * 创建人ID db_column: create_user_id + */ + @NotBlank @Length(max=50) + private String createUserId; + /** + * 创建人姓名 db_column: create_user_name + */ + @NotBlank @Length(max=100) + private String createUserName; + /** + * 更新人ID db_column: update_user_id + */ + @Length(max=50) + private String updateUserId; + /** + * 更新人姓名 db_column: update_user_name + */ + @Length(max=100) + private String updateUserName; + /** + * 创建时间 db_column: create_time + */ + + private Date createTime; + /** + * 更新时间 db_column: update_time + */ + + private Date updateTime; + //columns END + + +} + diff --git a/usm-model/src/main/java/com/blueland/bo/Org.java b/usm-model/src/main/java/com/blueland/bo/Org.java new file mode 100644 index 0000000..1c1e04e --- /dev/null +++ b/usm-model/src/main/java/com/blueland/bo/Org.java @@ -0,0 +1,206 @@ +package com.blueland.bo; + +import java.util.Date; +import java.util.List; + +import com.blueland.model.Query; +import org.hibernate.validator.constraints.Length; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 组织信息entity + * @作者 lw + * @创建时间 2017年11月15日 下午7:18:12 + * @版本 1.0 + */ +@Data +@EqualsAndHashCode(callSuper=false) +public class Org extends Query { + private static final long serialVersionUID = 1L; + //alias + public static final String TABLE_ALIAS = "Org"; + + private String id; + + + //可以直接使用: @Length(max=50,message="用户名长度不能大于50")显示错误消息 + //columns START + /** + * 组织ID-唯一标识组织对象id db_column: org_id + */ + @Length(max=100) + private String orgId; + /** + * 组织名称-组织名称 db_column: org_full_name + */ + @Length(max=1000) + private String orgFullName; + /** + * 组织短名称-组织短名称 db_column: org_name + */ + @Length(max=1000) + private String orgName; + /** + * 全拼- db_column: org_full_spells + */ + @Length(max=200) + private String orgFullSpells; + /** + * 简拼- db_column: org_spells + */ + @Length(max=200) + private String orgSpells; + + /** + * 组织联盟分类-工业公司、商业公司、零售户、供应商 db_column: org_type + */ + @Length(max=10) + private String orgType; + /** + * 组织管理类型-GS:公司BM:部门KS:科室QT:其他 + db_column: org_Mgr_type + */ + @Length(max=10) + private String orgMgrType; + + /** + * 组织级别-1、2、3、4层级 db_column: org_level + */ + + private Integer orgLevel; + /** + * 上级组织ID-上级组织UUID db_column: org_parent_id + */ + @Length(max=100) + private String orgParentId; + /** + * 上级组织名称-上级组织名称 db_column: org_parent_name + */ + @Length(max=100) + private String orgParentName; + /** + * 所属组织ID-所属组织UUID db_column: company_id + */ + @Length(max=100) + private String companyId; + + /** + * 所属组织ID-所属组织名称 db_column: company_id + */ + @Length(max=100) + private String companyName; + + /** + * 组织负责人ID-组织负责人UUID db_column: org_branch_leader + */ + @Length(max=100) + private String orgBranchLeader; + + /** + * 组织负责人ID-组织负责人姓名 db_column: org_branch_leader_name + */ + @Length(max=100) + private String orgBranchLeaderName; + + /** + * 办公地址-办公地址 db_column: org_work_address + */ + @Length(max=1000) + private String orgWorkAddress; + /** + * 办公电话-办公电话 db_column: org_work_phone + */ + @Length(max=100) + private String orgWorkPhone; + /** + * 组织状态-启用、禁用 db_column: org_status + */ + @Length(max=10) + private String orgStatus; + /** + * 组织排序-组织排序 db_column: org_sort + */ + + private Integer orgSort; + /** + * 删除标识-组织单元的删除标识 删除 : y、未删除: n db_column: org_del_status + */ + //@Length(max=10) + //private String orgDelStatus; + /** + * 创建时间-创建时间 db_column: org_create_time + */ + + private Date orgCreateTime; + /** + * 创建人-创建人ID db_column: org_creator + */ + @Length(max=100) + private String orgCreator; + /** + * 最近修改时间-最近修改时间 db_column: org_update_time + */ + + private Date orgUpdateTime; + /** + * 最近修改人-最近修改人ID db_column: org_updator + */ + @Length(max=100) + private String orgUpdator; + //columns END + /** + * 部门ID db_column: dept_id + */ + @Length(max=100) + private String deptId; + /** + * 部门名称 db_column: dept_name + */ + @Length(max=100) + private String deptName; + //组织子分类 + @Length(max=20) + private String orgSubType; + /** + * 组织编制类型 编制内:BZN,编制外:BZW db_column: org_work_type + */ + @Length(max=50) + private String orgWorkType; + + private Staff staffInfo; + //编制数量 + private String staffing; + + // 冗余字段(查询条件) + private String queryOrg; + //组织hrId + @Length(max=100) + private String orgHrId; + private List orgIdlist; + + private List companyIdList; + + //数据库不存在此字段,用来做权限判断 + private String orgBtn; + + /** + * 租户id + */ + private String appId; + + private String sortColumns; + + private List deptIds; + + private List erpCodes; + + private String likeDeptId; + + /** + * 上级部门code + */ + private String parentDeptCode; +} + diff --git a/usm-model/src/main/java/com/blueland/bo/ParameterEntity.java b/usm-model/src/main/java/com/blueland/bo/ParameterEntity.java new file mode 100644 index 0000000..d3c0b16 --- /dev/null +++ b/usm-model/src/main/java/com/blueland/bo/ParameterEntity.java @@ -0,0 +1,43 @@ +package com.blueland.bo; + +import com.blueland.model.Query; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.hibernate.validator.constraints.Length; + +@Data +@EqualsAndHashCode(callSuper=false) +public class ParameterEntity extends Query { + private static final long serialVersionUID = 1L; + //alias + public static final String TABLE_ALIAS = "Parameter"; + + + //可以直接使用: @Length(max=50,message="用户名长度不能大于50")显示错误消息 + //columns START + /** + * pid db_column: P_ID + */ + @Length(max=50) + private String pid; + /** + * description db_column: DESCRIPTION + */ + @Length(max=255) + private String description; + /** + * pkey db_column: P_KEY + */ + @Length(max=50) + private String pkey; + /** + * pvalue db_column: P_VALUE + */ + @Length(max=255) + private String pvalue; + + private String appId; + //columns END + +} + diff --git a/usm-model/src/main/java/com/blueland/bo/PositionInfoBo.java b/usm-model/src/main/java/com/blueland/bo/PositionInfoBo.java new file mode 100644 index 0000000..ab1394e --- /dev/null +++ b/usm-model/src/main/java/com/blueland/bo/PositionInfoBo.java @@ -0,0 +1,26 @@ +package com.blueland.bo; + +import lombok.Data; + +import java.util.Date; + +/** + * @auther xcy + * @create 2022-06-07 15:41 + */ +@Data +public class PositionInfoBo { + private String staffNum; + private String staffCode; + private String staffPostCode; + private String staffPostType; + private String deptCode; + private String deptName; + private String positionCode; + private String positionName; + private String status; + private String createUser; + private Date createTime; + private String updateUser; + private Date updateTime; +} diff --git a/usm-model/src/main/java/com/blueland/bo/PubOrgEntity.java b/usm-model/src/main/java/com/blueland/bo/PubOrgEntity.java new file mode 100644 index 0000000..eaed092 --- /dev/null +++ b/usm-model/src/main/java/com/blueland/bo/PubOrgEntity.java @@ -0,0 +1,144 @@ +package com.blueland.bo; + +import java.util.*; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.blueland.model.Query; +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.validation.constraints.NotNull; +import org.hibernate.validator.constraints.Length; +import org.hibernate.validator.constraints.NotBlank; +@Data +@EqualsAndHashCode(callSuper=false) +@TableName("t_pub_org") +public class PubOrgEntity extends Query { + private static final long serialVersionUID = 1L; + //alias + public static final String TABLE_ALIAS = "PubOrg"; + + + //可以直接使用: @Length(max=50,message="用户名长度不能大于50")显示错误消息 + //columns START + /** + * orgId db_column: ORG_ID + */ + @Length(max=50) + @TableId("org_id") + private String orgId; + /** + * orgName db_column: ORG_NAME + */ + @NotBlank @Length(max=200) + private String orgName; + /** + * orgFullName db_column: ORG_FULL_NAME + */ + @NotBlank @Length(max=65535) + private String orgFullName; + /** + * orgFullPathName db_column: ORG_FULL_PATH_NAME + */ + @Length(max=65535) + private String orgFullPathName; + /** + * orgFullPathId db_column: ORG_FULL_PATH_ID + */ + @Length(max=65535) + private String orgFullPathId; + /** + * orgParentId db_column: ORG_PARENT_ID + */ + @NotBlank @Length(max=50) + private String orgParentId; + /** + * orgType db_column: ORG_TYPE + */ + @NotBlank @Length(max=10) + private String orgType; + /** + * orgLevel db_column: ORG_LEVEL + */ + @NotNull + private Integer orgLevel; + /** + * orgAreaType db_column: ORG_AREA_TYPE + */ + @NotBlank @Length(max=10) + private String orgAreaType; + /** + * orgSort db_column: ORG_SORT + */ + + private Integer orgSort; + /** + * orgWorkPhone db_column: ORG_WORK_PHONE + */ + @Length(max=50) + private String orgWorkPhone; + /** + * orgWorkAddress db_column: ORG_WORK_ADDRESS + */ + @Length(max=65535) + private String orgWorkAddress; + /** + * orgPrincipal db_column: ORG_PRINCIPAL + */ + @Length(max=100) + private String orgPrincipal; + /** + * orgStatus db_column: ORG_STATUS + */ + @NotBlank @Length(max=10) + private String orgStatus; + /** + * orgCreateTime db_column: ORG_CREATE_TIME + */ + + private Date orgCreateTime; + /** + * remark db_column: REMARK + */ + @Length(max=65535) + private String remark; + /** + * fundCode db_column: FUND_CODE + */ + @Length(max=20) + private String fundCode; + /** + * fundName db_column: FUND_NAME + */ + @Length(max=100) + private String fundName; + /** + * companyId db_column: COMPANY_ID + */ + @Length(max=50) + private String companyId; + /** + * deptId db_column: DEPT_ID + */ + @Length(max=50) + private String deptId; + /** + * deptName db_column: DEPT_NAME + */ + @Length(max=100) + private String deptName; + /** + * companyName db_column: COMPANY_NAME + */ + @Length(max=100) + private String companyName; + /** + * orgBranchLeader db_column: ORG_BRANCH_LEADER + */ + @Length(max=100) + private String orgBranchLeader; + //columns END + + private String sortColumns; +} + diff --git a/usm-model/src/main/java/com/blueland/bo/PubUserEntity.java b/usm-model/src/main/java/com/blueland/bo/PubUserEntity.java new file mode 100644 index 0000000..ab9be42 --- /dev/null +++ b/usm-model/src/main/java/com/blueland/bo/PubUserEntity.java @@ -0,0 +1,174 @@ +package com.blueland.bo; + +import java.util.*; + +import com.blueland.model.Query; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.hibernate.validator.constraints.Length; +import org.hibernate.validator.constraints.NotBlank; +@Data +@EqualsAndHashCode(callSuper=false) +public class PubUserEntity extends Query { + private static final long serialVersionUID = 1L; + //alias + public static final String TABLE_ALIAS = "PubUser"; + + + //可以直接使用: @Length(max=50,message="用户名长度不能大于50")显示错误消息 + //columns START + /** + * userId db_column: USER_ID + */ + @Length(max=50) + private String userId; + /** + * userCode db_column: USER_CODE + */ + @NotBlank @Length(max=50) + private String userCode; + /** + * userName db_column: USER_NAME + */ + @NotBlank @Length(max=50) + private String userName; + /** + * userSex db_column: USER_SEX + */ + @Length(max=2) + private String userSex; + /** + * userAge db_column: USER_AGE + */ + + private Integer userAge; + /** + * companyId db_column: COMPANY_ID + */ + @NotBlank @Length(max=50) + private String companyId; + /** + * orgId db_column: ORG_ID + */ + @NotBlank @Length(max=50) + private String orgId; + /** + * userMobile db_column: USER_MOBILE + */ + @Length(max=50) + private String userMobile; + /** + * userMail db_column: USER_MAIL + */ + @Length(max=100) + private String userMail; + /** + * userWorkAddress db_column: USER_WORK_ADDRESS + */ + @Length(max=65535) + private String userWorkAddress; + /** + * userWorkPhone db_column: USER_WORK_PHONE + */ + @Length(max=100) + private String userWorkPhone; + /** + * userHomeAddree db_column: USER_HOME_ADDREE + */ + @Length(max=65535) + private String userHomeAddree; + /** + * userHomePhone db_column: USER_HOME_PHONE + */ + @Length(max=100) + private String userHomePhone; + /** + * positionId db_column: POSITION_ID + */ + @Length(max=50) + private String positionId; + /** + * pluralityPositionId db_column: PLURALITY_POSITION_ID + */ + @Length(max=50) + private String pluralityPositionId; + /** + * titleId db_column: TITLE_ID + */ + @Length(max=100) + private String titleId; + /** + * pluralityTitleId db_column: PLURALITY_TITLE_ID + */ + @Length(max=100) + private String pluralityTitleId; + /** + * userType db_column: USER_TYPE + */ + @Length(max=10) + private String userType; + /** + * userStatus db_column: USER_STATUS + */ + @NotBlank @Length(max=10) + private String userStatus; + /** + * userSort db_column: USER_SORT + */ + + private Integer userSort; + /** + * password db_column: PASSWORD + */ + @Length(max=100) + private String password; + /** + * salt db_column: SALT + */ + @Length(max=100) + private String salt; + /** + * userCreateTime db_column: USER_CREATE_TIME + */ + + private Date userCreateTime; + /** + * userUpdateTime db_column: USER_UPDATE_TIME + */ + + private Date userUpdateTime; + /** + * userCreator db_column: USER_CREATOR + */ + @Length(max=30) + private String userCreator; + /** + * remark db_column: REMARK + */ + @Length(max=65535) + private String remark; + /** + * deptId db_column: DEPT_ID + */ + @Length(max=50) + private String deptId; + /** + * companyName db_column: COMPANY_NAME + */ + @Length(max=100) + private String companyName; + /** + * deptName db_column: DEPT_NAME + */ + @Length(max=100) + private String deptName; + /** + * orgName db_column: ORG_NAME + */ + @Length(max=100) + private String orgName; + //columns END + + +} + diff --git a/usm-model/src/main/java/com/blueland/bo/Role2userEntity.java b/usm-model/src/main/java/com/blueland/bo/Role2userEntity.java new file mode 100644 index 0000000..746474e --- /dev/null +++ b/usm-model/src/main/java/com/blueland/bo/Role2userEntity.java @@ -0,0 +1,85 @@ +package com.blueland.bo; + +import java.util.*; + +import com.blueland.model.Query; +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.validation.constraints.NotNull; +import org.hibernate.validator.constraints.Length; +import org.hibernate.validator.constraints.NotBlank; +@Data +@EqualsAndHashCode(callSuper=false) +public class Role2userEntity extends Query { + private static final long serialVersionUID = 1L; + //alias + public static final String TABLE_ALIAS = "Role2user"; + + + //可以直接使用: @Length(max=50,message="用户名长度不能大于50")显示错误消息 + //columns START + /** + * 角色ID db_column: ROLE_ID + */ + @NotBlank @Length(max=50) + private String roleId; + /** + * 用户ID db_column: USER_ID + */ + @NotBlank @Length(max=50) + private String userId; + /** + * 状态Y:启用 N:禁用 db_column: STATUS + */ + @NotBlank @Length(max=2) + private String status; + /** + * 创建人 db_column: CREATOR_ID + */ + @Length(max=50) + private String creatorId; + /** + * 创建时间 db_column: CREATE_DATE + */ + @NotNull + private Date createDate; + /** + * 最后更新人 db_column: UPDATOR_ID + */ + @Length(max=50) + private String updatorId; + /** + * 最后更新时间 db_column: UPDATE_DATE + */ + @NotNull + private Date updateDate; + /** + * 部门id db_column: ORG_ID + */ + @Length(max=50) + private String orgId; + /** + * 部门名称 db_column: ORG_NAME + */ + @Length(max=100) + private String orgName; + /** + * titleId db_column: TITLE_ID + */ + @Length(max=100) + private String titleId; + /** + * 应用id db_column: APP_ID + */ + @Length(max=50) + private String appId; + + /** + * 岗位编码 + */ + private String staffPostCode; + //columns END + + +} + diff --git a/usm-model/src/main/java/com/blueland/bo/RoleEntity.java b/usm-model/src/main/java/com/blueland/bo/RoleEntity.java new file mode 100644 index 0000000..50d710f --- /dev/null +++ b/usm-model/src/main/java/com/blueland/bo/RoleEntity.java @@ -0,0 +1,100 @@ +package com.blueland.bo; + +import java.util.*; + +import com.blueland.model.Query; +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.validation.constraints.NotNull; +import org.hibernate.validator.constraints.Length; +import org.hibernate.validator.constraints.NotBlank; +@Data +@EqualsAndHashCode(callSuper=false) +public class RoleEntity extends Query { + private static final long serialVersionUID = 1L; + //alias + public static final String TABLE_ALIAS = "Role"; + + + //可以直接使用: @Length(max=50,message="用户名长度不能大于50")显示错误消息 + //columns START + /** + * 角色ID db_column: ROLE_ID + */ + @Length(max=50) + private String roleId; + /** + * 系统标识 db_column: APP_ID + */ + @Length(max=50) + private String appId; + /** + * 角色名称 db_column: ROLE_NAME + */ + @NotBlank @Length(max=65535) + private String roleName; + /** + * 角色类型 GLOBAL:全局角色 BIZ:业务角色 OTHER:其他角色 db_column: ROLE_TYPE + */ + @NotBlank @Length(max=20) + private String roleType; + /** + * 所属模块 db_column: ROLE_MODULE + */ + @Length(max=50) + private String roleModule; + /** + * 所属组织ID db_column: ORG_ID + */ + @Length(max=50) + private String orgId; + /** + * 排序 db_column: SORT + */ + + private Integer sort; + /** + * 备注 db_column: REMARK + */ + @Length(max=65535) + private String remark; + /** + * 状态 Y:启用 N:禁用 db_column: STATUS + */ + @NotBlank @Length(max=2) + private String status; + /** + * 创建人 db_column: CREATOR_ID + */ + @Length(max=50) + private String creatorId; + /** + * 创建时间 db_column: CREATE_DATE + */ + @NotNull + private Date createDate; + /** + * 更新人 db_column: UPDATOR_ID + */ + @Length(max=50) + private String updatorId; + /** + * 更新时间 db_column: UPDATE_DATE + */ + @NotNull + private Date updateDate; + + private String appName; + + private String[] authRole; + + private String[] userId; + + /** + * 岗位编码集合 + */ + private String[] postCodes; + //columns END + +} + diff --git a/usm-model/src/main/java/com/blueland/bo/RoleMenuRedisDTO.java b/usm-model/src/main/java/com/blueland/bo/RoleMenuRedisDTO.java new file mode 100644 index 0000000..60cbfd2 --- /dev/null +++ b/usm-model/src/main/java/com/blueland/bo/RoleMenuRedisDTO.java @@ -0,0 +1,14 @@ +package com.blueland.bo; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +@Data +@EqualsAndHashCode(callSuper=false) +public class RoleMenuRedisDTO { + private String appId; + private String roleId; + private List list; +} diff --git a/usm-model/src/main/java/com/blueland/bo/RoleUserRest.java b/usm-model/src/main/java/com/blueland/bo/RoleUserRest.java new file mode 100644 index 0000000..be29969 --- /dev/null +++ b/usm-model/src/main/java/com/blueland/bo/RoleUserRest.java @@ -0,0 +1,100 @@ +package com.blueland.bo; + + +public class RoleUserRest { + /** + * 角色对应用户 实体类 + */ + String roleId; + String userId; + String userName; + String orgId; + String orgName; + String appId; + String companyId; + String companyName; + String deptId; + String deptName; + + public String getUserName() { + return this.userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getCompanyId() { + return this.companyId; + } + + public void setCompanyId(String companyId) { + this.companyId = companyId; + } + + public String getCompanyName() { + return this.companyName; + } + + public void setCompanyName(String companyName) { + this.companyName = companyName; + } + + public String getDeptId() { + return this.deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return this.deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getRoleId() { + return this.roleId; + } + + public void setRoleId(String roleId) { + this.roleId = roleId; + } + + public String getUserId() { + return this.userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getOrgId() { + return this.orgId; + } + + public void setOrgId(String orgId) { + this.orgId = orgId; + } + + public String getOrgName() { + return this.orgName; + } + + public void setOrgName(String orgName) { + this.orgName = orgName; + } + + public String getAppId() { + return this.appId; + } + + public void setAppId(String appId) { + this.appId = appId; + } + +} + diff --git a/usm-model/src/main/java/com/blueland/bo/Staff.java b/usm-model/src/main/java/com/blueland/bo/Staff.java new file mode 100644 index 0000000..03416b6 --- /dev/null +++ b/usm-model/src/main/java/com/blueland/bo/Staff.java @@ -0,0 +1,308 @@ +package com.blueland.bo; + +import java.util.Date; + +import javax.validation.constraints.NotNull; + +import com.blueland.model.Query; +import org.hibernate.validator.constraints.Length; +import org.springframework.util.StringUtils; + + +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = false) +public class Staff extends Query { + private static final long serialVersionUID = 1L; + // alias + public static final String TABLE_ALIAS = "Staff"; + + // 可以直接使用: @Length(max=50,message="用户名长度不能大于50")显示错误消息 + // columns START + /** + * 员工ID-唯一标识员工对象id db_column: staff_id + */ + @Length(max = 100) + private String staffId; + + /** + * 人资HR员工编号 db_column: staff_hr_id + */ + @Length(max = 100) + private String staffHrId; + + /** + * 姓名 db_column: staff_name + */ + @Length(max = 100) + private String staffName; + /** + * 英文名 db_column: staff_en_name + */ + @Length(max = 100) + private String staffEnName; + /** + * 组织机构UUID db_column: org_id + */ + @Length(max = 200) + private String orgId; + /** + * 组织机构名称 db_column: org_name + */ + @Length(max = 200) + private String orgName; + /** + * 员工姓名的全拼 db_column: staff_spells + */ + @Length(max = 100) + private String staffSpells; + /** + * 员工姓名的简拼 db_column: staff_short_spells + */ + @Length(max = 100) + private String staffShortSpells; + /** + * 员工号-遵循湖南中烟公司的编码规范 db_column: staff_num + */ + @Length(max = 100) + private String staffNum; + /** + * 员工号短号-用户员工号6位 db_column: staff_short_num + */ + @Length(max = 100) + private String staffShortNum; + /** + * 岗位UUID db_column: position_id + */ + @Length(max = 100) + private String positionId; + /** + * 岗位名称 db_column: position_name + */ + @Length(max = 200) + private String positionName; + /** + * 性别-N:男,V:女 db_column: staff_sex + */ + @Length(max = 100) + private String staffSex; + /** + * 年龄-年龄 db_column: staff_age + */ + + private Integer staffAge; + /** + * 证件类型,如:身份证,驾照,护照等 db_column: staff_paperwork_type + */ + @Length(max = 100) + private String staffPaperworkType; + /** + * 身份证号,遵循中国身份证标准 db_column: staff_paperwork_num + */ + @Length(max = 100) + private String staffPaperworkNum; + /** + * 邮件地址 db_column: staff_mail + */ + private String staffMail; + /** + * 常用手机 db_column: staff_mobile + */ + @Length(max = 100) + private String staffMobile; + /** + * 备用手机 db_column: staff_mobile_bak + */ + @Length(max = 100) + private String staffMobileBak; + /** + * 传真 db_column: staff_fax + */ + @Length(max = 100) + private String staffFax; + /** + * 短号码 db_column: staff_short_fax + */ + @Length(max = 100) + private String staffShortFax; + /** + * 微信号码 db_column: staff_wechart + */ + @Length(max = 200) + private String staffWechart; + /** + * 家庭住址 db_column: staff_home_address + */ + @Length(max = 1000) + private String staffHomeAddress; + /** + * 家庭电话 db_column: staff_home_phone + */ + @Length(max = 100) + private String staffHomePhone; + /** + * 办公地址 db_column: staff_work_address + */ + @Length(max = 1000) + private String staffWorkAddress; + /** + * 办公电话 db_column: staff_work_phone + */ + @Length(max = 100) + private String staffWorkPhone; + /** + * 护照号 db_column: staff_passport + */ + @Length(max = 100) + private String staffPassport; + /** + * 民族 db_column: staff_nation + */ + @Length(max = 100) + private String staffNation; + /** + * 政治面貌 db_column: staff_political_status + */ + @Length(max = 100) + private String staffPoliticalStatus; + /** + * 籍贯 db_column: staff_native_place + */ + @Length(max = 200) + private String staffNativePlace; + /** + * 排序 db_column: staff_sort + */ + + private Integer staffSort; + /** + * 员工状态-1、在职,2、离职,3、停职,4、退休 db_column: staff_status + */ + @Length(max = 11) + private String staffStatus; + /** + * 员工类型-1、编制内员工 2、编制外员工 db_column: staff_work_type + */ + @Length(max = 20) + private String staffWorkType; + /** + * 是否临时账号-正常:ZC,临时:LS db_column: staff_account_type + */ + @Length(max = 20) + private String staffAccountType; + /** + * 员工类型,GYGS:工业公司, ,SYGS:商业公司, LSH:零售户(场所) ,XFZ:消费者 ,GYS:供应商 db_column: + * staff_type + */ + @Length(max = 100) + private String staffType; + + /** + * 员工类型,GYGS:工业公司, ,SYGS:商业公司, LSH:零售户(场所) ,XFZ:消费者 ,GYS:供应商 db_column: + * staff_type + */ + @Length(max = 100) + private String staffSubType; + /** + * 创建人 db_column: staff_creator + */ + @Length(max = 100) + private String staffCreator; + /** + * 创建时间 db_column: staff_create_time + */ + @NotNull + private Date staffCreateTime; + /** + * 修改人 db_column: staff_updator + */ + @Length(max = 100) + private String staffUpdator; + /** + * 最后修改时间 db_column: staff_lastupdate_time + */ + private Date staffLastupdateTime; + + /** + * 职位HrId db_column: position_hr_id + */ + @Length(max = 100) + private String positionHrId; + + /** + * 是否是主身份,Y 是、N 否 冗余字段 + */ + private String mainIdentityStatus; + + /** + * 是否是当前身份,Y 是、N 否 冗余字段 + */ + private String currentIdentityStatus; + /** + * 公司ID + */ + private String companyId; + /** + * 公司名称 + */ + private String companyName; + /** + * 部门ID + */ + private String deptId; + /** + * 部门名称 + */ + private String deptName; + // columns END + // 零售户名称 + private String retailName; + // 省编号 + private String provinceId; + // 市编号 + private String cityId; + // 区编号 + private String areaId; + // 员工登录账号,主账号 + private String staffCode; + // 人员生日 + private Date staffBirthday; + // 员工状态 db_column: staff_job_status + @Length(max = 100) + private String staffJobStatus; + /** + * 学历 db_column: staff_education 11-研究生教育 12-博士研究生 13-硕士研究生 14-研究生班 15-研究生课程班 + * 16-中央党校研究生 17-省(区、市)委党校研究生 18-本科 19-大学 20-大专及以下 21-大学普通班 22-第二学士学位班 23-中央党校大学 + * 24-省(区、市)委党校大学 25-中央党校大专 26-省(区、市)委党校大专 27-大专专业证书 28-中等职业学校 29-中专 30-职高 31-技校 + * 32-普通高中 33-普通高中 34-初中 35-初中 36-小学 + */ + private String staffEducation; + + /** + * 退休时间 db_column: staff_retired_time + */ + private Date staffRetiredTime; + + /** + * 查询条件,冗余字段,数据库中不存在 Y代表投资公司的员工,N或者空代表非投资公司员工 + */ + private String isTzgs; + + // 是否已经创建标识 + private String isCreate; + + // 冗余字段(查询条件),只查询该组织下主身份的员工 + private String mainIdentityStaff; + + // 冗余字段(查询条件) + private String queryStaff ; + + private String queryOrgId;////轮询查询 + // 冗余字段(当前员工的职位) + private String currentPositionId; + + + +} diff --git a/usm-model/src/main/java/com/blueland/bo/SysOplogEntity.java b/usm-model/src/main/java/com/blueland/bo/SysOplogEntity.java new file mode 100644 index 0000000..dc562ea --- /dev/null +++ b/usm-model/src/main/java/com/blueland/bo/SysOplogEntity.java @@ -0,0 +1,87 @@ +package com.blueland.bo; + +import java.util.*; + +import com.blueland.model.Query; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.hibernate.validator.constraints.Length; +import org.hibernate.validator.constraints.NotBlank; +@Data +@EqualsAndHashCode(callSuper=false) +public class SysOplogEntity extends Query { + private static final long serialVersionUID = 1L; + //alias + public static final String TABLE_ALIAS = "SysOplog"; + + + //可以直接使用: @Length(max=50,message="用户名长度不能大于50")显示错误消息 + //columns START + /** + * 唯一ID db_column: id + */ + @Length(max=50) + private String id; + /** + * 操作人id db_column: user_id + */ + @NotBlank @Length(max=50) + private String userId; + /** + * 操作人名称 db_column: user_name + */ + @NotBlank @Length(max=100) + private String userName; + /** + * 业务主键 db_column: biz_id + */ + @Length(max=50) + private String bizId; + /** + * 业务类型 db_column: biz_type + */ + @NotBlank @Length(max=10) + private String bizType; + /** + * 操作类型:登录:login;扫码登录:loginqrcode;新增:add;删除:delete;保存:save;上传:upload;下载:download; db_column: type + */ + @NotBlank @Length(max=10) + private String type; + /** + * 操作内容 db_column: content + */ + @NotBlank @Length(max=4000) + private String content; + /** + * 操作状态:成功:success,失败:failed db_column: status + */ + @NotBlank @Length(max=10) + private String status; + /** + * IP地址 db_column: aceess_ip + */ + @Length(max=100) + private String aceessIp; + /** + * 操作时间 db_column: create_time + */ + + private Date createTime; + /** + * 操作浏览器 db_column: aceess_browse + */ + @Length(max=200) + private String aceessBrowse; + /** + * 备注 db_column: remark + */ + @Length(max=200) + private String remark; + + private String appId; + //columns END + + private String sortColumns; + +} + diff --git a/usm-model/src/main/java/com/blueland/bo/SysPvlogEntity.java b/usm-model/src/main/java/com/blueland/bo/SysPvlogEntity.java new file mode 100644 index 0000000..663980b --- /dev/null +++ b/usm-model/src/main/java/com/blueland/bo/SysPvlogEntity.java @@ -0,0 +1,94 @@ +package com.blueland.bo; + +import java.util.*; + +import com.blueland.model.Query; +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.validation.constraints.NotNull; +import org.hibernate.validator.constraints.Length; +import org.hibernate.validator.constraints.NotBlank; +@Data +@EqualsAndHashCode(callSuper=false) +public class SysPvlogEntity extends Query { + private static final long serialVersionUID = 1L; + //alias + public static final String TABLE_ALIAS = "SysPvlog"; + + + //可以直接使用: @Length(max=50,message="用户名长度不能大于50")显示错误消息 + //columns START + /** + * 唯一ID db_column: id + */ + @Length(max=50) + private String id; + /** + * 用户ID db_column: user_id + */ + @NotBlank @Length(max=50) + private String userId; + /** + * 用户姓名 db_column: user_name + */ + @NotBlank @Length(max=100) + private String userName; + /** + * 业务主键 db_column: biz_id + */ + @NotBlank @Length(max=50) + private String bizId; + /** + * 业务类型,TASK:任务 db_column: biz_type + */ + @NotBlank @Length(max=10) + private String bizType; + /** + * 访问页面标题 db_column: aceess_title + */ + @Length(max=400) + private String aceessTitle; + /** + * IP地址 db_column: aceess_ip + */ + @Length(max=100) + private String aceessIp; + /** + * 访问页面标题 db_column: aceess_url + */ + @Length(max=100) + private String aceessUrl; + /** + * 访问时间 db_column: aceess_time + */ + @NotNull + private Date aceessTime; + /** + * 访问来源,手机端:APP、网页端:PC db_column: aceess_source + */ + @Length(max=100) + private String aceessSource; + /** + * 访问设备,仅针对手机端,如ios db_column: aceess_device + */ + @Length(max=100) + private String aceessDevice; + /** + * 访问浏览器 db_column: aceess_browse + */ + @Length(max=200) + private String aceessBrowse; + /** + * 所属系统 db_column: sys + */ + @NotBlank @Length(max=50) + private String appId; + /** + * 备注 db_column: remark + */ + @Length(max=200) + private String remark; + //columns END + +} + diff --git a/usm-model/src/main/java/com/blueland/bo/SysTimetaskEntity.java b/usm-model/src/main/java/com/blueland/bo/SysTimetaskEntity.java new file mode 100644 index 0000000..385f1ab --- /dev/null +++ b/usm-model/src/main/java/com/blueland/bo/SysTimetaskEntity.java @@ -0,0 +1,89 @@ +package com.blueland.bo; + +import java.util.*; + +import com.blueland.model.Query; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.hibernate.validator.constraints.Length; + +@Data +@EqualsAndHashCode(callSuper=false) +public class SysTimetaskEntity extends Query { + private static final long serialVersionUID = 1L; + //alias + public static final String TABLE_ALIAS = "SysTimetask"; + + + //可以直接使用: @Length(max=50,message="用户名长度不能大于50")显示错误消息 + //columns START + /** + * 唯一ID db_column: id + */ + @Length(max=50) + private String id; + /** + * 任务分类: 本地:local;远程:telnet; db_column: task_type + */ + @Length(max=50) + private String taskType; + /** + * 任务编码 db_column: task_code + */ + @Length(max=50) + private String taskCode; + /** + * 任务描述 db_column: description + */ + @Length(max=500) + private String description; + /** + * cron表达式 db_column: cron_exp + */ + @Length(max=50) + private String cronExp; + /** + * 任务类名;;根据分类进行判断;如果是local,是class名称;如果是telnet ,是url地址; db_column: action + */ + @Length(max=200) + private String action; + /** + * 任务状态:启用:Y;禁用:N; db_column: status + */ + @Length(max=10) + private String status; + /** + * 所属系统 db_column: sys + */ + @Length(max=20) + private String appId; + /** + * 创建人 db_column: create_id + */ + @Length(max=50) + private String createId; + /** + * 创建时间 db_column: create_time + */ + + private Date createTime; + /** + * 修改人 db_column: update_id + */ + @Length(max=50) + private String updateId; + /** + * 修改时间 db_column: update_time + */ + + private Date updateTime; + /** + * 备注 db_column: remark + */ + @Length(max=200) + private String remark; + //columns END + + +} + diff --git a/usm-model/src/main/java/com/blueland/bo/TreeEntity.java b/usm-model/src/main/java/com/blueland/bo/TreeEntity.java new file mode 100644 index 0000000..20c6c85 --- /dev/null +++ b/usm-model/src/main/java/com/blueland/bo/TreeEntity.java @@ -0,0 +1,71 @@ +package com.blueland.bo; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

Title:

+ *

Description:

+ * + * @author admin 540923947@qq.com + * @version 1.00 + * @createTime 2019/5/9 11:07 + * @updateLog
+ * 版本   修改人    修改时间    修改内容描述
+ * 
+ */ +@Data +@EqualsAndHashCode(callSuper=false) +public class TreeEntity { + /** + * el-tree 统一标识id + */ + private String id; + /** + * el-tree 统一标识name + */ + private String name; + + private String deptId; + + private String deptName; + + private String orgId; + + private String orgName; + + private String companyId; + + private String companyName; + + private String type; + + private String parentId; + /** + * 用于辨别是否是叶节点 + */ + private Boolean leaf; + + private String staffNum; + + private String staffCode; + + private String staffMobile; + + + /** + * 任岗编码 + */ + private String staffPostCode; + + /** + * 任岗类型 + */ + private String staffPostType; + + /** + * 租户id + */ + private String appId; + +} diff --git a/usm-model/src/main/java/com/blueland/bo/TucStaffEntity.java b/usm-model/src/main/java/com/blueland/bo/TucStaffEntity.java new file mode 100644 index 0000000..2815702 --- /dev/null +++ b/usm-model/src/main/java/com/blueland/bo/TucStaffEntity.java @@ -0,0 +1,317 @@ +package com.blueland.bo; + +import java.util.*; + +import com.blueland.model.Query; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.Email; + +import org.hibernate.validator.constraints.Length; +import org.springframework.format.annotation.DateTimeFormat; + +@Data +@EqualsAndHashCode(callSuper=true) +public class TucStaffEntity extends Query { + private static final long serialVersionUID = 1L; + //alias + public static final String TABLE_ALIAS = "TucStaff"; + + + //可以直接使用: @Length(max=50,message="用户名长度不能大于50")显示错误消息 + //columns START + /** + * 员工ID-唯一标识员工对象id db_column: staff_id + */ + @Length(max=100) + private String staffId; + /** + * 姓名 db_column: staff_name + */ + @Length(max=100) + private String staffName; + /** + * 英文名 db_column: staff_en_name + */ + @Length(max=100) + private String staffEnName; + /** + * 组织机构UUID db_column: org_id + */ + @Length(max=200) + private String orgId; + /** + * 组织机构名称 db_column: org_name + */ + @Length(max=200) + private String orgName; + /** + * 姓名的全拼 db_column: staff_spells + */ + @Length(max=100) + private String staffSpells; + /** + * 姓名的简拼 db_column: staff_short_spells + */ + @Length(max=100) + private String staffShortSpells; + /** + * 员工号-遵循湖南中烟公司的编码规范 db_column: staff_num + */ + @Length(max=100) + private String staffNum; + /** + * 员工号短号-员工号6位 db_column: staff_short_num + */ + @Length(max=100) + private String staffShortNum; + /** + * 岗位UUID db_column: position_id + */ + @Length(max=1000) + private String positionId; + /** + * 岗位名称 db_column: position_name + */ + @Length(max=1000) + private String positionName; + /** + * 性别-N:男,V:女 db_column: staff_sex + */ + @Length(max=100) + private String staffSex; + /** + * 年龄 db_column: staff_age + */ + + private Integer staffAge; + /** + * 证件类型,SFZ:身份证、JZ:驾照、HZ:护照 db_column: staff_paperwork_type + */ + @Length(max=100) + private String staffPaperworkType; + /** + * 证件号码 db_column: staff_paperwork_num + */ + @Length(max=100) + private String staffPaperworkNum; + /** + * 邮件地址 db_column: staff_mail + */ + @Email @Length(max=100) + private String staffMail; + /** + * 常用手机 db_column: staff_mobile + */ + @Length(max=100) + private String staffMobile; + /** + * 备用手机 db_column: staff_mobile_bak + */ + @Length(max=100) + private String staffMobileBak; + /** + * 传真 db_column: staff_fax + */ + @Length(max=100) + private String staffFax; + /** + * 短号码 db_column: staff_short_fax + */ + @Length(max=100) + private String staffShortFax; + /** + * 微信号码 db_column: staff_wechart + */ + @Length(max=200) + private String staffWechart; + /** + * 家庭住址 db_column: staff_home_address + */ + @Length(max=1000) + private String staffHomeAddress; + /** + * 家庭电话 db_column: staff_home_phone + */ + @Length(max=100) + private String staffHomePhone; + /** + * 办公地址 db_column: staff_work_address + */ + @Length(max=1000) + private String staffWorkAddress; + /** + * 办公电话 db_column: staff_work_phone + */ + @Length(max=100) + private String staffWorkPhone; + /** + * 护照号 db_column: staff_passport + */ + @Length(max=100) + private String staffPassport; + /** + * 民族 db_column: staff_nation + */ + @Length(max=100) + private String staffNation; + /** + * 政治面貌 db_column: staff_political_status + */ + @Length(max=100) + private String staffPoliticalStatus; + /** + * 籍贯 db_column: staff_native_place + */ + @Length(max=200) + private String staffNativePlace; + /** + * 排序 db_column: staff_sort + */ + + private Integer staffSort; + /** + * 员工状态-1、在职,2、离职,3、停职,4、退休 db_column: staff_status + */ + @Length(max=11) + private String staffStatus; + /** + * 员工类型,GYGS:工业公司,,SYGS:商业公司, LSH:零售户(场所) ,XFZ:消费者 ,GYS:供应商 db_column: staff_type + */ + @Length(max=100) + private String staffType; + /** + * 员工类型,GYGS:工业公司,,SYGS:商业公司, LSH:零售户(场所) ,XFZ:消费者 ,GYS:供应商 db_column: staff_sub_type + */ + @Length(max=100) + private String staffSubType; + /** + * 创建人-创建人 db_column: staff_creator + */ + @Length(max=100) + private String staffCreator; + /** + * 创建时间-创建时间 db_column: staff_create_time + */ + + private Date staffCreateTime; + /** + * 修改人-修改人 db_column: staff_updator + */ + @Length(max=100) + private String staffUpdator; + /** + * 最后修改时间-最后修改时间 db_column: staff_lastupdate_time + */ + + private Date staffLastupdateTime; + /** + * 员工类型-1、编制内员工 2、编制外员工 db_column: staff_work_type + */ + @Length(max=20) + private String staffWorkType; + /** + * 公司ID db_column: company_id + */ + @Length(max=100) + private String companyId; + /** + * 公司名称 db_column: company_name + */ + @Length(max=100) + private String companyName; + /** + * deptId db_column: dept_id + */ + @Length(max=32) + private String deptId; + /** + * deptName db_column: dept_name + */ + @Length(max=100) + private String deptName; + /** + * HR编码 db_column: staff_hr_id + */ + @Length(max=100) + private String staffHrId; + /** + * 员工编码--登录账号 db_column: staff_code + */ + @Length(max=100) + private String staffCode; + /** + * 人员生日 db_column: staff_birthday + */ + private String staffBirthday; + /** + * 11-研究生教育 12-博士研究生 13-硕士研究生 14-研究生班 15-研究生课程班 16-中央党校研究生 17-省(区、市)委党校研究生 18-本科 19-大学 20-大专及以下 21-大学普通班 22-第二学士学位班 23-中央党校大学 24-省(区、市)委党校大学 25-中央党校大专 26-省(区、市)委党校大专 27-大专专业证书 28-中等职业学校 29-中专 30-职高 31-技校 32-普通高中 33-普通高中 34-初中 35-初中 36-小学 db_column: staff_education + */ + @Length(max=500) + private String staffEducation; + /** + * 退休时间 db_column: staff_retired_time + */ + + private Date staffRetiredTime; + /** + * 员工状态 db_column: staff_job_status + */ + @Length(max=100) + private String staffJobStatus; + /** + * 账号类型,正常:ZC,临时:LS db_column: staff_account_type + */ + @Length(max=50) + private String staffAccountType; + /** + * 20200528 用作设备码 + * staffPhoneBak db_column: staff_phone_bak + */ + @Length(max=50) + private String staffPhoneBak; + + // 冗余字段(查询条件),只查询该组织下主身份的员工 + private String mainIdentityStaff; + + // 冗余字段(查询条件) + private String queryStaff ; + + // 冗余字段 + private String queryOrgId;////轮询查询 + // 冗余字段 + private String queryDeptId;//模糊查询 + + private String[] orgIds; + // 冗余字段(当前员工的职位) + private String currentPositionId; + + // 20200827 add 冗余字段(当前员工全部门) + private String fulldeptname; + + /** + * 任岗编码 + */ + private String staffPostCode; + + /** + * 任岗类型 + */ + private String staffPostType; + + /** + * 租户id + */ + private String appId; + //columns END + + private String sortColumns; + + private List postCodes; + + private List staffCodes; + + private String likeDeptId; +} + diff --git a/usm-model/src/main/java/com/blueland/bo/UpdatephtotEntity.java b/usm-model/src/main/java/com/blueland/bo/UpdatephtotEntity.java new file mode 100644 index 0000000..a06077f --- /dev/null +++ b/usm-model/src/main/java/com/blueland/bo/UpdatephtotEntity.java @@ -0,0 +1,19 @@ +package com.blueland.bo; + +import com.blueland.model.Query; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.hibernate.validator.constraints.Length; + +@Data +@EqualsAndHashCode(callSuper=true) +public class UpdatephtotEntity extends Query { + + + @Length(max=100) + private String staffId; + + @Length(max=500) + private String staffEducation; + +} diff --git a/usm-model/src/main/java/com/blueland/model/Query.java b/usm-model/src/main/java/com/blueland/model/Query.java new file mode 100644 index 0000000..7a5ec02 --- /dev/null +++ b/usm-model/src/main/java/com/blueland/model/Query.java @@ -0,0 +1,39 @@ +package com.blueland.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @auther xcy + * @create 2022-05-18 9:19 + */ +@Data +public class Query implements Serializable { + + @ApiModelProperty(value = "当前页", required = true) + @TableField(exist = false) + private Integer pageNum = 1; + + @ApiModelProperty(value = "每页大小", required = true) + @TableField(exist = false) + private Integer pageSize = 10; + + @ApiModelProperty(value = "排序规则") + @TableField(exist = false) + private String sortColumn; + + @ApiModelProperty(value = "指定条数") + @TableField(exist = false) + private Integer limitNumber; + + + @ApiModelProperty(value = "排序规则") + @TableField(exist = false) + private String sortColumns; + + @TableField(exist = false) + private String orderByColumns; +} diff --git a/usm-model/src/main/java/com/blueland/model/TArea.java b/usm-model/src/main/java/com/blueland/model/TArea.java new file mode 100644 index 0000000..3198a4e --- /dev/null +++ b/usm-model/src/main/java/com/blueland/model/TArea.java @@ -0,0 +1,60 @@ +package com.blueland.model; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.Date; + +/** + * 区域对象 t_area + * + * @author ruoyi + * @date 2022-05-10 + */ +@Data +@NoArgsConstructor +@Accessors(chain = true) +@TableName("t_area") +public class TArea implements Serializable { + + private static final long serialVersionUID=1L; + + + /** + * 唯一ID + */ + @TableId(value = "id") + private String id; + + /** + * 名称 + */ + @TableField("aname") + private String aname; + + /** + * 父ID + */ + @TableField("pid") + private String pid; + + /** + * 省份编码 + */ + @TableField("tid") + private String tid; + + /** + * 创建时间 + */ + + @TableField(value = "create_time",fill = FieldFill.INSERT) + private Date createTime; + +} diff --git a/usm-model/src/main/java/com/blueland/model/TPfAdminUser.java b/usm-model/src/main/java/com/blueland/model/TPfAdminUser.java new file mode 100644 index 0000000..c631a34 --- /dev/null +++ b/usm-model/src/main/java/com/blueland/model/TPfAdminUser.java @@ -0,0 +1,81 @@ +package com.blueland.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * 管理员用户对象 t_pf_admin_user + * + * @author ruoyi + * @date 2022-05-10 + */ +@Data +@NoArgsConstructor +@Accessors(chain = true) +@TableName("t_pf_admin_user") +public class TPfAdminUser implements Serializable { + + private static final long serialVersionUID=1L; + + + /** + * + */ + @TableId(value = "id") + private String id; + + /** + * 业务ID + */ + @TableField("app_id") + private String appId; + + /** + * 类型(应用管理:YYGL,业务域:YWY) + */ + @TableField("admin_type") + private String adminType; + + /** + * 用户code + */ + @TableField("user_code") + private String userCode; + + /** + * 用户名称 + */ + @TableField("user_name") + private String userName; + + /** + * 用户组织id + */ + @TableField("user_org_id") + private String userOrgId; + + /** + * 用户组织名称 + */ + @TableField("user_org_name") + private String userOrgName; + + /** + * 用户部门id + */ + @TableField("user_dept_id") + private String userDeptId; + + /** + * 用户部门Name + */ + @TableField("user_dept_name") + private String userDeptName; + +} diff --git a/usm-model/src/main/java/com/blueland/model/TPfApplication.java b/usm-model/src/main/java/com/blueland/model/TPfApplication.java new file mode 100644 index 0000000..d6e26e4 --- /dev/null +++ b/usm-model/src/main/java/com/blueland/model/TPfApplication.java @@ -0,0 +1,127 @@ +package com.blueland.model; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.Date; + +/** + * 应用管理对象 t_pf_application + * + * @author ruoyi + * @date 2022-05-10 + */ +@Data +@NoArgsConstructor +@Accessors(chain = true) +@TableName("t_pf_application") +public class TPfApplication implements Serializable { + + private static final long serialVersionUID=1L; + + + /** + * 应用标识-英文 + */ + @TableId(value = "app_id") + private String appId; + + /** + * 应用名称 + */ + private String appName; + + /** + * 状态,启用:QY 禁用: JY + */ + private String appStatus; + + /** + * 前端端口 + */ + private String frontPort; + + /** + * 后端端口 + */ + private String rearPort; + + /** + * 应用类型(内部普通应用:QYNBPT,内部流程应用:QYNBLC,外部应用:QYWB,虚拟应用:QYXN) + */ + private String appType; + + /** + * 应用描述 + */ + private String appDescribe; + + /** + * 是否独立部署(是:Y;否:N) + */ + private String isDeploy; + + /** + * 是否生成后端服务(是:Y;否:N) + */ + private String isService; + + /** + * 排序 + */ + private Long sort; + + /** + * 备注 + */ + private String remark; + + /** + * 创建人code + */ + private String createUserCode; + + /** + * 创建人姓名 + */ + private String createUserName; + + /** + * 更新人code + */ + private String updateUserCode; + + /** + * 更新人姓名 + */ + private String updateUserName; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + /** + * 更新时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; + + /** + * 首页地址 + */ + private String indexUrl; + + /** + * 业务类型(业务应用:YWYY、业务中台:YWZT、数据中台:SJZT、技术中台:JSZT) + */ + private String busiType; + +} diff --git a/usm-model/src/main/java/com/blueland/model/TPfApplicationDb.java b/usm-model/src/main/java/com/blueland/model/TPfApplicationDb.java new file mode 100644 index 0000000..2364819 --- /dev/null +++ b/usm-model/src/main/java/com/blueland/model/TPfApplicationDb.java @@ -0,0 +1,69 @@ +package com.blueland.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * 应用关联数据库对象 t_pf_application_db + * + * @author ruoyi + * @date 2022-05-10 + */ +@Data +@NoArgsConstructor +@Accessors(chain = true) +@TableName("t_pf_application_db") +public class TPfApplicationDb implements Serializable { + + private static final long serialVersionUID=1L; + + + /** + * 应用id + */ + @TableId(value = "app_id") + private String appId; + + /** + * 数据库类型(mysql;oracle;h2) + */ + @TableField("type_name") + private String typeName; + + /** + * 数据库地址 + */ + @TableField("url") + private String url; + + /** + * 数据库实例名称 + */ + @TableField("instance_name") + private String instanceName; + + /** + * 数据库账号 + */ + @TableField("username") + private String username; + + /** + * 数据库密码 + */ + @TableField("password") + private String password; + + /** + * 数据库驱动名称 + */ + @TableField("driver_name") + private String driverName; + +} diff --git a/usm-model/src/main/java/com/blueland/model/TPfAttachment.java b/usm-model/src/main/java/com/blueland/model/TPfAttachment.java new file mode 100644 index 0000000..0ea30ad --- /dev/null +++ b/usm-model/src/main/java/com/blueland/model/TPfAttachment.java @@ -0,0 +1,112 @@ +package com.blueland.model; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.Date; + +/** + * 附件对象 t_pf_attachment + * + * @author xcy + * @date 2022-05-10 + */ +@Data +@NoArgsConstructor +@Accessors(chain = true) +@TableName("t_pf_attachment") +public class TPfAttachment implements Serializable { + + private static final long serialVersionUID=1L; + + + /** + * id + */ + @TableId(value = "att_id") + private String attId; + + /** + * 应用ID + */ + private String appId; + + /** + * 附件名称 + */ + private String attName; + + /** + * 附件路径 + */ + private String attUrl; + + /** + * 附件类型 + */ + private String attType; + + /** + * 业务id + */ + private String bizId; + + /** + * 业务name + */ + private String bizName; + + /** + * 是否可见,y:可见,n:不可见 + */ + private String attShow; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + /** + * + */ + private String createUserId; + + /** + * + */ + private String createUserName; + + /** + * 更新时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; + + /** + * 更新用户id + */ + private String updateUserId; + + /** + * 更新用户名称 + */ + private String updateUserName; + + /** + * 备注 + */ + private String attRemark; + + /** + * 文档云id + */ + private String sdkAppId; + +} diff --git a/usm-model/src/main/java/com/blueland/model/TPfAuth.java b/usm-model/src/main/java/com/blueland/model/TPfAuth.java new file mode 100644 index 0000000..31a0398 --- /dev/null +++ b/usm-model/src/main/java/com/blueland/model/TPfAuth.java @@ -0,0 +1,89 @@ +package com.blueland.model; + +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 lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.Date; + +/** + * 权限对象 t_pf_auth + * + * @author ruoyi + * @date 2022-05-10 + */ +@Data +@NoArgsConstructor +@Accessors(chain = true) +@TableName("t_pf_auth") +public class TPfAuth implements Serializable { + + private static final long serialVersionUID=1L; + + + /** + * 权限ID + */ + @TableId(value = "AUTH_ID", type = IdType.ASSIGN_ID) + private String authId; + + /** + * 权限类型 备用 + */ + @TableField("AUTH_TYPE") + private String authType; + + /** + * 资源ID + */ + @TableField("MENU_ID") + private String menuId; + + /** + * 系统标识 + */ + @TableField("APP_ID") + private String appId; + + /** + * 状态 Y:启用 N;禁用 + */ + @TableField("STATUS") + private String status; + + /** + * 创建人 + */ + @TableField("CREATOR_ID") + private String creatorId; + + /** + * 创建时间 + */ + @TableField("CREATE_DATE") + private Date createDate; + + /** + * 更新人 + */ + @TableField("UPDATOR_ID") + private String updatorId; + + /** + * 更新时间 + */ + @TableField("UPDATE_DATE") + private Date updateDate; + + /** + * 角色ID + */ + @TableField("ROLE_ID") + private String roleId; + +} diff --git a/usm-model/src/main/java/com/blueland/model/TPfDict.java b/usm-model/src/main/java/com/blueland/model/TPfDict.java new file mode 100644 index 0000000..fe745db --- /dev/null +++ b/usm-model/src/main/java/com/blueland/model/TPfDict.java @@ -0,0 +1,95 @@ +package com.blueland.model; + +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 lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.Date; + +/** + * 字典对象 t_pf_dict + * + * @author ruoyi + * @date 2022-05-10 + */ +@Data +@NoArgsConstructor +@Accessors(chain = true) +@TableName("t_pf_dict") +public class TPfDict implements Serializable { + + private static final long serialVersionUID=1L; + + + /** + * 主键id + */ + @TableId(value = "ID", type = IdType.ASSIGN_UUID) + private String id; + + /** + * 字典编码 + */ + @TableField("DICT_CODE") + private String dictCode; + + /** + * 父编码 + */ + @TableField("DICT_PARENT_ID") + private String dictParentId; + + /** + * 字典名称 + */ + @TableField("DICT_NAME") + private String dictName; + + /** + * 排序号 + */ + @TableField("SORT") + private Long sort; + + /** + * 状态Y:启用 N:禁用 + */ + @TableField("STATUS") + private String status; + + /** + * 创建人 + */ + @TableField("CREATOR_ID") + private String creatorId; + + /** + * 创建时间 + */ + @TableField("CREATE_DATE") + private Date createDate; + + /** + * 最后更新人 + */ + @TableField("UPDATOR_ID") + private String updatorId; + + /** + * 最后更新时间 + */ + @TableField("UPDATE_DATE") + private Date updateDate; + + /** + * 应用id + */ + @TableField("APP_ID") + private String appId; + +} diff --git a/usm-model/src/main/java/com/blueland/model/TPfMenu.java b/usm-model/src/main/java/com/blueland/model/TPfMenu.java new file mode 100644 index 0000000..163fb10 --- /dev/null +++ b/usm-model/src/main/java/com/blueland/model/TPfMenu.java @@ -0,0 +1,143 @@ +package com.blueland.model; + +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 lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.Date; + +/** + * 资源对象 t_pf_menu + * + * @author ruoyi + * @date 2022-05-10 + */ +@Data +@NoArgsConstructor +@Accessors(chain = true) +@TableName("t_pf_menu") +public class TPfMenu implements Serializable { + + private static final long serialVersionUID=1L; + + + /** + * 资源ID + */ + @TableId(value = "MENU_ID", type = IdType.ASSIGN_ID) + private String menuId; + + /** + * 系统标识 + */ + @TableField("APP_ID") + private String appId; + + /** + * 上级资源ID + */ + @TableField("MENU_PARENT_ID") + private String menuParentId; + + /** + * 资源编码 + */ + @TableField("MENU_CODE") + private String menuCode; + + /** + * 资源名称 + */ + @TableField("MENU_NAME") + private String menuName; + + /** + * 类型 folder:目录 menu:菜单 button:按钮 + */ + @TableField("MENU_TYPE") + private String menuType; + + /** + * 资源图标 + */ + @TableField("MENU_ICON") + private String menuIcon; + + /** + * 资源URL + */ + @TableField("MENU_URL") + private String menuUrl; + + /** + * 排序 + */ + @TableField("SORT") + private Long sort; + + /** + * 备注 + */ + @TableField("REMARK") + private String remark; + + /** + * 状态 Y:启用 N:禁用 + */ + @TableField("STATUS") + private String status; + + /** + * 创建人 + */ + @TableField("CREATOR_ID") + private String creatorId; + + /** + * 创建时间 + */ + @TableField("CREATE_DATE") + private Date createDate; + + /** + * 更新人 + */ + @TableField("UPDATOR_ID") + private String updatorId; + + /** + * 更新时间 + */ + @TableField("UPDATE_DATE") + private Date updateDate; + + /** + * 资源级别 + */ + @TableField("MENU_LEVEL") + private Integer menuLevel; + + /** + * 打开方式 2当前页面 1弹出页面 + */ + @TableField("OPEN_TYPE") + private String openType; + + /** + * 页面编码 + */ + @TableField("PAGE_CODE") + private String pageCode; + + /** + * 是否公开 1是 2否 + */ + @TableField("OPEN_STATUS") + private String openStatus; + +} diff --git a/usm-model/src/main/java/com/blueland/model/TPfModule.java b/usm-model/src/main/java/com/blueland/model/TPfModule.java new file mode 100644 index 0000000..07e1084 --- /dev/null +++ b/usm-model/src/main/java/com/blueland/model/TPfModule.java @@ -0,0 +1,124 @@ +package com.blueland.model; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.Date; + +/** + * 模块管理对象 t_pf_module + * + * @author ruoyi + * @date 2022-05-10 + */ +@Data +@NoArgsConstructor +@Accessors(chain = true) +@TableName("t_pf_module") +public class TPfModule implements Serializable { + + private static final long serialVersionUID=1L; + + + /** + * 模块主键 + */ + @TableId(value = "module_id", type = IdType.ASSIGN_ID) + private String moduleId; + + /** + * 模块标识-英文 + */ + private String code; + + /** + * 模块名称 + */ + private String name; + + /** + * 所属应用ID + */ + private String appId; + + /** + * 所属应用名称 + */ + private String appName; + + /** + * 模块访问URL + */ + private String accessUrl; + + /** + * 是否与菜单同步 + */ + private String menuSys; + + /** + * 父模块ID + */ + private String parentId; + + /** + * 父模块名称 + */ + private String parentName; + + /** + * 层级 + */ + private Long hierarchy; + + /** + * 状态,启用:QY 禁用: JY + */ + private String status; + + /** + * 排序 + */ + private Long sort; + + /** + * 备注 + */ + private String remark; + + /** + * 创建人ID + */ + private String createUserId; + + /** + * 创建人姓名 + */ + private String createUserName; + + /** + * 更新人ID + */ + private String updateUserId; + + /** + * 更新人姓名 + */ + private String updateUserName; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + /** + * 更新时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; + +} diff --git a/usm-model/src/main/java/com/blueland/model/TPfParameter.java b/usm-model/src/main/java/com/blueland/model/TPfParameter.java new file mode 100644 index 0000000..c13b33c --- /dev/null +++ b/usm-model/src/main/java/com/blueland/model/TPfParameter.java @@ -0,0 +1,58 @@ +package com.blueland.model; + +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 lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * 参数对象 t_pf_parameter + * + * @author ruoyi + * @date 2022-05-10 + */ +@Data +@NoArgsConstructor +@Accessors(chain = true) +@TableName("t_pf_parameter") +public class TPfParameter implements Serializable { + + private static final long serialVersionUID=1L; + + + /** + * + */ + @TableId(value = "P_ID", type = IdType.ASSIGN_ID) + private String pid; + + /** + * + */ + @TableField("DESCRIPTION") + private String description; + + /** + * + */ + @TableField("P_KEY") + private String pkey; + + /** + * + */ + @TableField("P_VALUE") + private String pvalue; + + /** + * + */ + @TableField("APP_ID") + private String appId; + +} diff --git a/usm-model/src/main/java/com/blueland/model/TPfRole.java b/usm-model/src/main/java/com/blueland/model/TPfRole.java new file mode 100644 index 0000000..db533f6 --- /dev/null +++ b/usm-model/src/main/java/com/blueland/model/TPfRole.java @@ -0,0 +1,106 @@ +package com.blueland.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.Date; + +/** + * 角色对象 t_pf_role + * + * @author ruoyi + * @date 2022-05-10 + */ +@Data +@NoArgsConstructor +@Accessors(chain = true) +@TableName("t_pf_role") +public class TPfRole implements Serializable { + + private static final long serialVersionUID=1L; + + + /** + * 角色ID + */ + @TableId(value = "ROLE_ID") + private String roleId; + + /** + * 系统标识 + */ + @TableField("APP_ID") + private String appId; + + /** + * 角色名称 + */ + @TableField("ROLE_NAME") + private String roleName; + + /** + * 角色类型 GLOBAL:全局角色 BIZ:业务角色 OTHER:其他角色 + */ + @TableField("ROLE_TYPE") + private String roleType; + + /** + * 所属模块 + */ + @TableField("ROLE_MODULE") + private String roleModule; + + /** + * 所属组织ID + */ + @TableField("ORG_ID") + private String orgId; + + /** + * 排序 + */ + @TableField("SORT") + private Long sort; + + /** + * 备注 + */ + @TableField("REMARK") + private String remark; + + /** + * 状态 Y:启用 N:禁用 + */ + @TableField("STATUS") + private String status; + + /** + * 创建人 + */ + @TableField("CREATOR_ID") + private String creatorId; + + /** + * 创建时间 + */ + @TableField("CREATE_DATE") + private Date createDate; + + /** + * 更新人 + */ + @TableField("UPDATOR_ID") + private String updatorId; + + /** + * 更新时间 + */ + @TableField("UPDATE_DATE") + private Date updateDate; + +} diff --git a/usm-model/src/main/java/com/blueland/model/TPfRole2auth.java b/usm-model/src/main/java/com/blueland/model/TPfRole2auth.java new file mode 100644 index 0000000..72ba3ab --- /dev/null +++ b/usm-model/src/main/java/com/blueland/model/TPfRole2auth.java @@ -0,0 +1,76 @@ +package com.blueland.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.Date; + +/** + * 角色权限对象 t_pf_role2auth + * + * @author ruoyi + * @date 2022-05-10 + */ +@Data +@NoArgsConstructor +@Accessors(chain = true) +@TableName("t_pf_role2auth") +public class TPfRole2auth implements Serializable { + + private static final long serialVersionUID=1L; + + + /** + * 角色ID + */ + @TableField("AUTH_ID") + private String roleId; + + /** + * 权限ID + */ + @TableId("AUTH_ID") + private String authId; + + /** + * 状态Y:启用 N:禁用 + */ + @TableField("STATUS") + private String STATUS; + + /** + * 创建人 + */ + @TableField("CREATOR_ID") + private String creatorId; + + /** + * 创建时间 + */ + @TableField("CREATE_DATE") + private Date createDate; + + /** + * 最后更新人 + */ + @TableField("UPDATOR_ID") + private String updatorId; + + /** + * 最后更新时间 + */ + @TableField("UPDATE_DATE") + private Date updateDate; + + /** + * 租户id + */ + @TableField("app_id") + private String appId; + +} diff --git a/usm-model/src/main/java/com/blueland/model/TPfRole2user.java b/usm-model/src/main/java/com/blueland/model/TPfRole2user.java new file mode 100644 index 0000000..273be18 --- /dev/null +++ b/usm-model/src/main/java/com/blueland/model/TPfRole2user.java @@ -0,0 +1,99 @@ +package com.blueland.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.Date; + +/** + * 人员权限对象 t_pf_role2user + * + * @author ruoyi + * @date 2022-05-10 + */ +@Data +@NoArgsConstructor +@Accessors(chain = true) +@TableName("t_pf_role2user") +public class TPfRole2user implements Serializable { + + private static final long serialVersionUID=1L; + + + /** + * 角色ID + */ + @TableId("ROLE_ID") + private String roleId; + + /** + * 用户ID + */ + @TableField("USER_ID") + private String userId; + + /** + * 状态Y:启用 N:禁用 + */ + @TableField("STATUS") + private String STATUS; + + /** + * 创建人 + */ + @TableField("CREATOR_ID") + private String creatorId; + + /** + * 创建时间 + */ + @TableField("CREATE_DATE") + private Date createDate; + + /** + * 最后更新人 + */ + @TableField("UPDATOR_ID") + private String updatorId; + + /** + * 最后更新时间 + */ + @TableField("UPDATE_DATE") + private Date updateDate; + + /** + * 部门id + */ + @TableField("ORG_ID") + private String orgId; + + /** + * 部门名称 + */ + @TableField("ORG_NAME") + private String orgName; + + /** + * + */ + @TableField("TITLE_ID") + private String titleId; + + /** + * 应用id + */ + @TableField("APP_ID") + private String appId; + + /** + * 岗位编码 + */ + @TableField("staff_post_code") + private String staffPostCode; +} diff --git a/usm-model/src/main/java/com/blueland/model/TPfSysOplog.java b/usm-model/src/main/java/com/blueland/model/TPfSysOplog.java new file mode 100644 index 0000000..7dfe340 --- /dev/null +++ b/usm-model/src/main/java/com/blueland/model/TPfSysOplog.java @@ -0,0 +1,90 @@ +package com.blueland.model; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.Date; + +/** + * 用户操作日志对象 t_pf_sys_oplog + * + * @author ruoyi + * @date 2022-05-10 + */ +@Data +@NoArgsConstructor +@Accessors(chain = true) +@TableName("t_pf_sys_oplog") +public class TPfSysOplog implements Serializable { + + private static final long serialVersionUID=1L; + + + /** + * 唯一ID + */ + @TableId(value = "id", type = IdType.ASSIGN_ID) + private String id; + + /** + * 操作人id + */ + private String userId; + + /** + * 操作人名称 + */ + private String userName; + + /** + * 业务主键 + */ + private String bizId; + + /** + * 业务类型 + */ + private String bizType; + + /** + * 操作类型:登录:login;扫码登录:loginqrcode;新增:add;删除:delete;编辑:update;上传:upload;下载:download; + */ + private String type; + + /** + * 操作内容 + */ + private String content; + + /** + * 操作状态:成功:success,失败:faild + */ + private String status; + + /** + * IP地址 + */ + private String aceessIp; + + /** + * 操作时间 + */ + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + /** + * 操作浏览器 + */ + private String aceessBrowse; + + /** + * 备注 + */ + private String remark; + + private String appId; + +} diff --git a/usm-model/src/main/java/com/blueland/model/TPfSysPvlog.java b/usm-model/src/main/java/com/blueland/model/TPfSysPvlog.java new file mode 100644 index 0000000..c6f2971 --- /dev/null +++ b/usm-model/src/main/java/com/blueland/model/TPfSysPvlog.java @@ -0,0 +1,99 @@ +package com.blueland.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.Date; + +/** + * PV日志对象 t_pf_sys_pvlog + * + * @author ruoyi + * @date 2022-05-10 + */ +@Data +@NoArgsConstructor +@Accessors(chain = true) +@TableName("t_pf_sys_pvlog") +public class TPfSysPvlog implements Serializable { + + private static final long serialVersionUID=1L; + + + /** + * 唯一ID + */ + @TableId(value = "id", type = IdType.ASSIGN_ID) + private String id; + + /** + * 用户ID + */ + private String userId; + + /** + * 用户姓名 + */ + private String userName; + + /** + * 业务主键 + */ + private String bizId; + + /** + * 业务类型,TASK:任务 + */ + private String bizType; + + /** + * 访问页面标题 + */ + private String aceessTitle; + + /** + * IP地址 + */ + private String aceessIp; + + /** + * 访问页面标题 + */ + private String aceessUrl; + + /** + * 访问时间 + */ + private Date aceessTime; + + /** + * 访问来源,手机端:APP、网页端:PC + */ + private String aceessSource; + + /** + * 访问设备,仅针对手机端,如ios + */ + private String aceessDevice; + + /** + * 访问浏览器 + */ + private String aceessBrowse; + + /** + * 所属系统 + */ + private String appId; + + /** + * 备注 + */ + private String remark; + +} diff --git a/usm-model/src/main/java/com/blueland/model/TPfSysTimetask.java b/usm-model/src/main/java/com/blueland/model/TPfSysTimetask.java new file mode 100644 index 0000000..709ad35 --- /dev/null +++ b/usm-model/src/main/java/com/blueland/model/TPfSysTimetask.java @@ -0,0 +1,94 @@ +package com.blueland.model; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.Date; + +/** + * 任务调度对象 t_pf_sys_timetask + * + * @author ruoyi + * @date 2022-05-10 + */ +@Data +@NoArgsConstructor +@Accessors(chain = true) +@TableName("t_pf_sys_timetask") +public class TPfSysTimetask implements Serializable { + + private static final long serialVersionUID=1L; + + + /** + * 唯一ID + */ + @TableId(value = "id", type = IdType.ASSIGN_ID) + private String id; + + /** + * 任务分类: 本地:local;远程:telnet; + */ + private String taskType; + + /** + * 任务编码 + */ + private String taskCode; + + /** + * 任务描述 + */ + private String description; + + /** + * cron表达式 + */ + private String cronExp; + + /** + * 任务类名;;根据分类进行判断;如果是local,是class名称;如果是telnet ,是url地址; + */ + private String action; + + /** + * 任务状态:启用:Y;禁用:N; + */ + private String status; + + /** + * 所属系统 + */ + private String appId; + + /** + * 创建人 + */ + private String createId; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + /** + * 修改人 + */ + private String updateId; + + /** + * 修改时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; + + /** + * 备注 + */ + private String remark; + +} diff --git a/usm-model/src/main/java/com/blueland/model/TPubUser.java b/usm-model/src/main/java/com/blueland/model/TPubUser.java new file mode 100644 index 0000000..113bf5b --- /dev/null +++ b/usm-model/src/main/java/com/blueland/model/TPubUser.java @@ -0,0 +1,184 @@ +package com.blueland.model; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.Date; + +/** + * 公共用户对象 t_pub_user + * + * @author ruoyi + * @date 2022-05-10 + */ +@Data +@NoArgsConstructor +@Accessors(chain = true) +@TableName("t_pub_user") +public class TPubUser implements Serializable { + + private static final long serialVersionUID=1L; + + + /** + * 员工ID-唯一标识员工对象id + */ + @TableId("user_id") + private String userId; + + /** + * + */ + private String userCode; + + /** + * + */ + private String userName; + + /** + * + */ + private String userSex; + + /** + * 年龄 + */ + private Long userAge; + + /** + * + */ + private String companyId; + + /** + * + */ + private String orgId; + + /** + * + */ + private String userMobile; + + /** + * + */ + private String userMail; + + /** + * `办公地址 + */ + private String userWorkAddress; + + /** + * + */ + private String userWorkPhone; + + /** + * 办公地址 + */ + private String userHomeAddree; + + /** + * + */ + private String userHomePhone; + + /** + * + */ + private String positionId; + + /** + * + */ + private String pluralityPositionId; + + /** + * + */ + private String titleId; + + /** + * + */ + private String pluralityTitleId; + + /** + * + */ + private String userType; + + /** + * + */ + private String userStatus; + + /** + * + */ + private Long userSort; + + /** + * + */ + private String salt; + + /** + * + */ + private Date userCreateTime; + + /** + * + */ + private Date userUpdateTime; + + /** + * + */ + private String userCreator; + + /** + * + */ + private String remark; + + /** + * + */ + private String deptId; + + /** + * + */ + private String companyName; + + /** + * + */ + private String deptName; + + /** + * + */ + private String orgName; + + /** + * + */ + private String password; + + /** + * + */ + private Date passwordUpdateTime; + + +} diff --git a/usm-model/src/main/java/com/blueland/model/TUcOrg.java b/usm-model/src/main/java/com/blueland/model/TUcOrg.java new file mode 100644 index 0000000..74fc24f --- /dev/null +++ b/usm-model/src/main/java/com/blueland/model/TUcOrg.java @@ -0,0 +1,178 @@ +package com.blueland.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + * 组织对象 t_uc_org + * + * @author ruoyi + * @date 2022-05-10 + */ +@Data +@NoArgsConstructor +@Accessors(chain = true) +@TableName("t_uc_org") +public class TUcOrg implements Serializable { + + private static final long serialVersionUID=1L; + + @TableId(value = "id", type = IdType.ASSIGN_ID) + private String id; + + /** + * 组织ID-唯一标识组织对象id + */ + private String orgId; + + /** + * 组织名称 + */ + private String orgFullName; + + /** + * 组织短名称- + */ + private String orgName; + + /** + * 组织拼音全拼 + */ + private String orgFullSpells; + + /** + * 组织拼音简拼 + */ + private String orgSpells; + + /** + * 组织行政分类-GS:公司、BM:部门、KS:科室、QT:其他 + */ + private String orgType; + + /** + * 组织级别-1、2、3、4层级 + */ + private Long orgLevel; + + /** + * 上级组织ID + */ + private String orgParentId; + + /** + * 上级组织名称 + */ + private String orgParentName; + + /** + * 所属组织ID + */ + private String companyId; + + /** + * 组织负责人ID + */ + private String orgBranchLeader; + + /** + * 组织负责人名称 + */ + private String orgBranchLeaderName; + + /** + * 办公地址 + */ + private String orgWorkAddress; + + /** + * 办公电话 + */ + private String orgWorkPhone; + + /** + * 组织状态-启用:QY、禁用JY + */ + private String orgStatus; + + /** + * 组织排序 + */ + private Long orgSort; + + /** + * 创建时间 + */ + private Date orgCreateTime; + + /** + * 创建人 + */ + private String orgCreator; + + /** + * 最近修改时间 + */ + private Date orgUpdateTime; + + /** + * 最近修改人 + */ + private String orgUpdator; + + /** + * + */ + private String companyName; + + /** + * + */ + private String orgMgrType; + + /** + * + */ + private String deptId; + + /** + * + */ + private String deptName; + + /** + * 组织子分类 + */ + private String orgSubType; + + /** + * HR编码 + */ + private String orgHrId; + + /** + * 编制人数 + */ + private String staffing; + + /** + * 组织编制类型 编制内:BZN,编制外:BZW + */ + private String orgWorkType; + + /** + * 租户id + */ + private String appId; + + + +} diff --git a/usm-model/src/main/java/com/blueland/model/TUcStaff.java b/usm-model/src/main/java/com/blueland/model/TUcStaff.java new file mode 100644 index 0000000..111f286 --- /dev/null +++ b/usm-model/src/main/java/com/blueland/model/TUcStaff.java @@ -0,0 +1,294 @@ +package com.blueland.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.Date; + +/** + * 员工对象 t_uc_staff + * + * @author ruoyi + * @date 2022-05-10 + */ +@Data +@NoArgsConstructor +@Accessors(chain = true) +@TableName("t_uc_staff") +public class TUcStaff implements Serializable { + + private static final long serialVersionUID=1L; + + + /** + * 员工ID-唯一标识员工对象id + */ + @TableId(value = "staff_id", type = IdType.ASSIGN_ID) + private String staffId; + + /** + * 姓名 + */ + private String staffName; + + /** + * 英文名 + */ + private String staffEnName; + + /** + * 组织机构UUID + */ + private String orgId; + + /** + * 组织机构名称 + */ + private String orgName; + + /** + * 姓名的全拼 + */ + private String staffSpells; + + /** + * 姓名的简拼 + */ + private String staffShortSpells; + + /** + * 员工号-遵循湖南中烟公司的编码规范 + */ + private String staffNum; + + /** + * 员工号短号-员工号6位 + */ + private String staffShortNum; + + /** + * 岗位UUID + */ + private String positionId; + + /** + * 岗位名称 + */ + private String positionName; + + /** + * 性别-N:男,V:女 + */ + private String staffSex; + + /** + * 年龄 + */ + private Long staffAge; + + /** + * 证件类型,SFZ:身份证、JZ:驾照、HZ:护照 + */ + private String staffPaperworkType; + + /** + * 证件号码 + */ + private String staffPaperworkNum; + + /** + * 邮件地址 + */ + private String staffMail; + + /** + * 常用手机 + */ + private String staffMobile; + + /** + * 备用手机 + */ + private String staffMobileBak; + + /** + * 传真 + */ + private String staffFax; + + /** + * 短号码 + */ + private String staffShortFax; + + /** + * 微信号码 + */ + private String staffWechart; + + /** + * 家庭住址 + */ + private String staffHomeAddress; + + /** + * 家庭电话 + */ + private String staffHomePhone; + + /** + * 办公地址 + */ + private String staffWorkAddress; + + /** + * 办公电话 + */ + private String staffWorkPhone; + + /** + * 护照号 + */ + private String staffPassport; + + /** + * 民族 + */ + private String staffNation; + + /** + * 政治面貌 + */ + private String staffPoliticalStatus; + + /** + * 籍贯 + */ + private String staffNativePlace; + + /** + * 排序 + */ + private Long staffSort; + + /** + * 员工状态-1、在职,2、离职,3、停职,4、退休 + */ + private String staffStatus; + + /** + * 员工类型,GYGS:工业公司,,SYGS:商业公司, LSH:零售户(场所) ,XFZ:消费者 ,GYS:供应商 + */ + private String staffType; + + /** + * 员工类型,GYGS:工业公司,,SYGS:商业公司, LSH:零售户(场所) ,XFZ:消费者 ,GYS:供应商 + */ + private String staffSubType; + + /** + * 创建人-创建人 + */ + private String staffCreator; + + /** + * 创建时间-创建时间 + */ + private Date staffCreateTime; + + /** + * 修改人-修改人 + */ + private String staffUpdator; + + /** + * 最后修改时间-最后修改时间 + */ + private Date staffLastupdateTime; + + /** + * 员工类型-1、编制内员工 2、编制外员工 + */ + private String staffWorkType; + + /** + * 公司ID + */ + private String companyId; + + /** + * 公司名称 + */ + private String companyName; + + /** + * + */ + private String deptId; + + /** + * + */ + private String deptName; + + /** + * HR编码 + */ + private String staffHrId; + + /** + * 员工编码--登录账号 + */ + private String staffCode; + + /** + * 人员生日 + */ + private Date staffBirthday; + + /** + * 11-研究生教育 12-博士研究生 13-硕士研究生 14-研究生班 15-研究生课程班 16-中央党校研究生 17-省(区、市)委党校研究生 18-本科 19-大学 20-大专及以下 21-大学普通班 22-第二学士学位班 23-中央党校大学 24-省(区、市)委党校大学 25-中央党校大专 26-省(区、市)委党校大专 27-大专专业证书 28-中等职业学校 29-中专 30-职高 31-技校 32-普通高中 33-普通高中 34-初中 35-初中 36-小学(用于存储员工头像) + */ + private String staffEducation; + + /** + * 退休时间 + */ + private Date staffRetiredTime; + + /** + * 员工状态 + */ + private String staffJobStatus; + + /** + * 账号类型,正常:ZC,临时:LS + */ + private String staffAccountType; + + /** + * + */ + private String staffPhoneBak; + + /** + * 任岗编码 + */ + private String staffPostCode; + + /** + * 任岗类型 + */ + private String staffPostType; + + /** + * 租户id + */ + private String appId; + +} diff --git a/usm-model/src/main/java/com/blueland/vo/StaffNumVO.java b/usm-model/src/main/java/com/blueland/vo/StaffNumVO.java new file mode 100644 index 0000000..8e56761 --- /dev/null +++ b/usm-model/src/main/java/com/blueland/vo/StaffNumVO.java @@ -0,0 +1,20 @@ +package com.blueland.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @auther xcy + * @create 2022-05-30 9:52 + */ +@Data +public class StaffNumVO { + @ApiModelProperty("工号") + private String staffNum; + + @ApiModelProperty("岗位编码") + private String postCode; + + @ApiModelProperty("租户编码") + private String tenantId; +} diff --git a/usm-model/src/main/java/com/blueland/vo/StaffPostVO.java b/usm-model/src/main/java/com/blueland/vo/StaffPostVO.java new file mode 100644 index 0000000..1d4400d --- /dev/null +++ b/usm-model/src/main/java/com/blueland/vo/StaffPostVO.java @@ -0,0 +1,35 @@ +package com.blueland.vo; + +import com.blueland.bo.TucStaffEntity; +import com.blueland.model.TUcStaff; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.List; + +/** + * @auther xcy + * @create 2022-05-13 11:07 + */ +@Data +public class StaffPostVO { + + @ApiModelProperty("租户编码") + private String tenantId; + + @ApiModelProperty("租户名称") + private String tenantName; + + @ApiModelProperty("工号") + private String staffCode; + + @ApiModelProperty("应用地址") + private String appUrl; + + private String staffPostCode; + + @ApiModelProperty("员工信息集合") + private List staffList; + +} diff --git a/usm-model/src/main/java/com/blueland/vo/TUcStaffVO.java b/usm-model/src/main/java/com/blueland/vo/TUcStaffVO.java new file mode 100644 index 0000000..c72665e --- /dev/null +++ b/usm-model/src/main/java/com/blueland/vo/TUcStaffVO.java @@ -0,0 +1,293 @@ +package com.blueland.vo; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.Date; + +/** + * 员工对象 t_uc_staff + * + * @author ruoyi + * @date 2022-05-10 + */ +@Data +@NoArgsConstructor +@Accessors(chain = true) +public class TUcStaffVO implements Serializable { + + private static final long serialVersionUID=1L; + + + /** + * 员工ID-唯一标识员工对象id + */ + @TableId(value = "staff_id", type = IdType.ASSIGN_ID) + private String staffId; + + /** + * 姓名 + */ + private String staffName; + + /** + * 英文名 + */ + private String staffEnName; + + /** + * 组织机构UUID + */ + private String orgId; + + /** + * 组织机构名称 + */ + private String orgName; + + /** + * 姓名的全拼 + */ + private String staffSpells; + + /** + * 姓名的简拼 + */ + private String staffShortSpells; + + /** + * 员工号-遵循湖南中烟公司的编码规范 + */ + private String staffNum; + + /** + * 员工号短号-员工号6位 + */ + private String staffShortNum; + + /** + * 岗位UUID + */ + private String positionId; + + /** + * 岗位名称 + */ + private String positionName; + + /** + * 性别-N:男,V:女 + */ + private String staffSex; + + /** + * 年龄 + */ + private Long staffAge; + + /** + * 证件类型,SFZ:身份证、JZ:驾照、HZ:护照 + */ + private String staffPaperworkType; + + /** + * 证件号码 + */ + private String staffPaperworkNum; + + /** + * 邮件地址 + */ + private String staffMail; + + /** + * 常用手机 + */ + private String staffMobile; + + /** + * 备用手机 + */ + private String staffMobileBak; + + /** + * 传真 + */ + private String staffFax; + + /** + * 短号码 + */ + private String staffShortFax; + + /** + * 微信号码 + */ + private String staffWechart; + + /** + * 家庭住址 + */ + private String staffHomeAddress; + + /** + * 家庭电话 + */ + private String staffHomePhone; + + /** + * 办公地址 + */ + private String staffWorkAddress; + + /** + * 办公电话 + */ + private String staffWorkPhone; + + /** + * 护照号 + */ + private String staffPassport; + + /** + * 民族 + */ + private String staffNation; + + /** + * 政治面貌 + */ + private String staffPoliticalStatus; + + /** + * 籍贯 + */ + private String staffNativePlace; + + /** + * 排序 + */ + private Long staffSort; + + /** + * 员工状态-1、在职,2、离职,3、停职,4、退休 + */ + private String staffStatus; + + /** + * 员工类型,GYGS:工业公司,,SYGS:商业公司, LSH:零售户(场所) ,XFZ:消费者 ,GYS:供应商 + */ + private String staffType; + + /** + * 员工类型,GYGS:工业公司,,SYGS:商业公司, LSH:零售户(场所) ,XFZ:消费者 ,GYS:供应商 + */ + private String staffSubType; + + /** + * 创建人-创建人 + */ + private String staffCreator; + + /** + * 创建时间-创建时间 + */ + private Date staffCreateTime; + + /** + * 修改人-修改人 + */ + private String staffUpdator; + + /** + * 最后修改时间-最后修改时间 + */ + private Date staffLastupdateTime; + + /** + * 员工类型-1、编制内员工 2、编制外员工 + */ + private String staffWorkType; + + /** + * 公司ID + */ + private String companyId; + + /** + * 公司名称 + */ + private String companyName; + + /** + * + */ + private String deptId; + + /** + * + */ + private String deptName; + + /** + * HR编码 + */ + private String staffHrId; + + /** + * 员工编码--登录账号 + */ + private String staffCode; + + /** + * 人员生日 + */ + private Date staffBirthday1; + + /** + * 11-研究生教育 12-博士研究生 13-硕士研究生 14-研究生班 15-研究生课程班 16-中央党校研究生 17-省(区、市)委党校研究生 18-本科 19-大学 20-大专及以下 21-大学普通班 22-第二学士学位班 23-中央党校大学 24-省(区、市)委党校大学 25-中央党校大专 26-省(区、市)委党校大专 27-大专专业证书 28-中等职业学校 29-中专 30-职高 31-技校 32-普通高中 33-普通高中 34-初中 35-初中 36-小学(用于存储员工头像) + */ + private String staffEducation; + + /** + * 退休时间 + */ + private Date staffRetiredTime; + + /** + * 员工状态 + */ + private String staffJobStatus; + + /** + * 账号类型,正常:ZC,临时:LS + */ + private String staffAccountType; + + /** + * + */ + private String staffPhoneBak; + + /** + * 任岗编码 + */ + private String staffPostCode; + + /** + * 任岗类型 + */ + private String staffPostType; + + /** + * 租户id + */ + private String appId; + +} diff --git a/usm-render/.checkstyle b/usm-render/.checkstyle new file mode 100644 index 0000000..5783bc0 --- /dev/null +++ b/usm-render/.checkstyle @@ -0,0 +1,7 @@ + + + + + + + diff --git a/usm-render/.classpath b/usm-render/.classpath new file mode 100644 index 0000000..8e3603a --- /dev/null +++ b/usm-render/.classpath @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/usm-render/.project b/usm-render/.project new file mode 100644 index 0000000..684c10f --- /dev/null +++ b/usm-render/.project @@ -0,0 +1,35 @@ + + + blueland-plateform-render + + + + + + org.eclipse.wst.common.project.facet.core.builder + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + com.genuitec.eclipse.springframework.springbuilder + + + + + + com.genuitec.eclipse.springframework.springnature + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + org.eclipse.wst.common.project.facet.core.nature + + diff --git a/usm-render/Dockerfile b/usm-render/Dockerfile new file mode 100644 index 0000000..45d8d30 --- /dev/null +++ b/usm-render/Dockerfile @@ -0,0 +1,5 @@ +FROM REGISTRY_URL/jdk:8u151-jre-alpine +COPY ./target/usm-render-1.0-SNAPSHOT.jar / +WORKDIR / +EXPOSE 8080 +CMD ["java","-jar","usm-render-1.0-SNAPSHOT.jar"] \ No newline at end of file diff --git a/usm-render/Dockerfile.usm-render b/usm-render/Dockerfile.usm-render new file mode 100644 index 0000000..5fcf87b --- /dev/null +++ b/usm-render/Dockerfile.usm-render @@ -0,0 +1,13 @@ +FROM openjdk:8u181-jre-alpine + +ENV TIME_ZONE=Asia/Shanghai +RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/' /etc/apk/repositories +RUN apk update && apk add --no-cache tzdata curl\ +&& echo "${TIME_ZONE}" > /etc/timezone \ +&& ln -sf /usr/share/zoneinfo/${TIME_ZONE} /etc/localtime +COPY ./target/usm-render-1.0-SNAPSHOT.jar / +RUN mkdir /templates +WORKDIR / +HEALTHCHECK --interval=5s --timeout=3s CMD curl -fs http://localhost:38081/blueland-plateform-render/actuator/health || exit 1 +EXPOSE 38081 +CMD ["java", "-Xmx768m","-jar","usm-render-1.0-SNAPSHOT.jar"] \ No newline at end of file diff --git a/usm-render/Dockerfile_dev b/usm-render/Dockerfile_dev new file mode 100644 index 0000000..c8ca84b --- /dev/null +++ b/usm-render/Dockerfile_dev @@ -0,0 +1,7 @@ +FROM openjdk:8u181-jre-alpine + +RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone && apk add --no-cache curl +COPY ./target/usm-render-1.0-SNAPSHOT.jar / +WORKDIR / +EXPOSE 8080 +CMD ["java", "-jar","usm-render-1.0-SNAPSHOT.jar"] \ No newline at end of file diff --git a/usm-render/Dockerfile_gray b/usm-render/Dockerfile_gray new file mode 100644 index 0000000..c8ca84b --- /dev/null +++ b/usm-render/Dockerfile_gray @@ -0,0 +1,7 @@ +FROM openjdk:8u181-jre-alpine + +RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone && apk add --no-cache curl +COPY ./target/usm-render-1.0-SNAPSHOT.jar / +WORKDIR / +EXPOSE 8080 +CMD ["java", "-jar","usm-render-1.0-SNAPSHOT.jar"] \ No newline at end of file diff --git a/usm-render/Dockerfile_test b/usm-render/Dockerfile_test new file mode 100644 index 0000000..c8ca84b --- /dev/null +++ b/usm-render/Dockerfile_test @@ -0,0 +1,7 @@ +FROM openjdk:8u181-jre-alpine + +RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone && apk add --no-cache curl +COPY ./target/usm-render-1.0-SNAPSHOT.jar / +WORKDIR / +EXPOSE 8080 +CMD ["java", "-jar","usm-render-1.0-SNAPSHOT.jar"] \ No newline at end of file diff --git a/usm-render/pom.xml b/usm-render/pom.xml new file mode 100644 index 0000000..386a28d --- /dev/null +++ b/usm-render/pom.xml @@ -0,0 +1,133 @@ + + + 4.0.0 + + com.blueland + blueland-plateform + 1.0-SNAPSHOT + + usm-render + usm-render + http://maven.apache.org + + UTF-8 + 10.2.0.4.0 + + + + com.blueland + usm-model + 1.0-SNAPSHOT + + + com.blueland + usm-core + 1.0-SNAPSHOT + + + commons-collections4 + org.apache.commons + + + mybatis + org.mybatis + + + + + org.projectlombok + lombok + provided + + + org.springframework.boot + spring-boot-starter + + + org.springframework.boot + spring-boot-starter-data-redis + + + org.springframework.boot + spring-boot-starter-aop + + + org.springframework.boot + spring-boot-starter-test + test + + + org.springframework.boot + spring-boot-starter-actuator + + + + + + + + org.springframework.boot + spring-boot-devtools + true + + + + + com.github.mnadeem + sql-table-name-parser + 0.0.5 + + + com.alibaba + druid-spring-boot-starter + 1.1.18 + + + com.baomidou + mybatis-plus-boot-starter + + + com.baomidou + mybatis-plus-extension + + + + + + + + + + + maven-compiler-plugin + org.apache.maven.plugins + ${maven-compiler-plugin.version} + + 1.8 + 1.8 + true + + + + org.springframework.boot + spring-boot-maven-plugin + ${spring.boot.version} + + com.blueland.render.WebApp + + + + + repackage + + + + + + + diff --git a/usm-render/src/main/java/Ognl.java b/usm-render/src/main/java/Ognl.java new file mode 100644 index 0000000..2aac840 --- /dev/null +++ b/usm-render/src/main/java/Ognl.java @@ -0,0 +1,62 @@ + +import java.lang.reflect.Array; +import java.util.Collection; +import java.util.Map; + +import org.apache.commons.lang3.StringUtils; + + +public class Ognl +{ + public static boolean isEmpty(Object o) + throws IllegalArgumentException + { + if (o == null) { + return true; + } + if ((o instanceof String)) { + if (((String)o).length() == 0) + return true; + } + else if ((o instanceof Collection)) { + if (((Collection)o).isEmpty()) + return true; + } + else if (o.getClass().isArray()) { + if (Array.getLength(o) == 0) + return true; + } + else { + if (!(o instanceof Map)) { + return false; + } + + if (((Map)o).isEmpty()) { + return true; + } + } + + return false; + } + + public static boolean isNotEmpty(Object o) + { + return !isEmpty(o); + } + + public static boolean contains(String str, String subStr) { + boolean b = false; + if ((!StringUtils.isBlank(str)) && (!StringUtils.isBlank(subStr))) { + b = str.indexOf(subStr) >= 0; + } + return b; + } + + public static boolean isBlank(String s) { + return StringUtils.isBlank(s); + } + + public static boolean isNotBlank(String s) { + return StringUtils.isNotBlank(s); + } +} \ No newline at end of file diff --git a/usm-render/src/main/java/com/blueland/render/WebApp.java b/usm-render/src/main/java/com/blueland/render/WebApp.java new file mode 100644 index 0000000..f24accc --- /dev/null +++ b/usm-render/src/main/java/com/blueland/render/WebApp.java @@ -0,0 +1,64 @@ +package com.blueland.render; + +import javax.servlet.ServletContextEvent; +import javax.servlet.ServletContextListener; + +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.boot.context.properties.ConfigurationPropertiesScan; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.alibaba.druid.stat.DruidStatManagerFacade; + +import lombok.extern.slf4j.Slf4j; +import springfox.documentation.swagger2.annotations.EnableSwagger2; + +@Slf4j +@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) +@ConfigurationPropertiesScan +@EnableConfigurationProperties +@EnableAsync +@ComponentScan(basePackages = { "com.blueland", "org.blueland" }) +//@MapperScan(value = { "com.blueland" }, sqlSessionFactoryRef = "sqlSessionFactory") +public class WebApp { + +// @RestController +// public class DruidStatController { +// @GetMapping("/druid/stat") +// public Object druidStat() { +// // DruidStatManagerFacade#getDataSourceStatDataList 该方法可以获取所有数据源的监控数据,除此之外 +// // DruidStatManagerFacade 还提供了一些其他方法,你可以按需选择使用。 +// return DruidStatManagerFacade.getInstance().getDataSourceStatDataList(); +// } +// } + + @Bean + protected ServletContextListener listener() { + return new ServletContextListener() { + + @Override + public void contextInitialized(ServletContextEvent sce) { + log.info("ServletContext initialized"); + } + + @Override + public void contextDestroyed(ServletContextEvent sce) { + log.info("ServletContext destroyed"); + } + + }; + } + + public static void main(String[] args) { + SpringApplication.run(WebApp.class, args); + } + +} diff --git a/usm-render/src/main/java/com/blueland/render/config/CustomCORSConfiguration.java b/usm-render/src/main/java/com/blueland/render/config/CustomCORSConfiguration.java new file mode 100644 index 0000000..bfb1877 --- /dev/null +++ b/usm-render/src/main/java/com/blueland/render/config/CustomCORSConfiguration.java @@ -0,0 +1,25 @@ +package com.blueland.render.config; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +@Configuration +public class CustomCORSConfiguration { + private CorsConfiguration buildConfig() { + CorsConfiguration corsConfiguration = new CorsConfiguration(); + corsConfiguration.addAllowedOriginPattern("*"); + corsConfiguration.addAllowedHeader("*"); + corsConfiguration.addAllowedMethod("*"); + corsConfiguration.setAllowCredentials(true); + return corsConfiguration; + } + + @Bean + public CorsFilter corsFilter() { + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", buildConfig()); + return new CorsFilter(source); + } +} \ No newline at end of file diff --git a/usm-render/src/main/java/com/blueland/render/config/CustomConfig.java b/usm-render/src/main/java/com/blueland/render/config/CustomConfig.java new file mode 100644 index 0000000..c881d30 --- /dev/null +++ b/usm-render/src/main/java/com/blueland/render/config/CustomConfig.java @@ -0,0 +1,27 @@ +package com.blueland.render.config; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +import lombok.Data; + +@Data +@Component +@ConfigurationProperties(prefix = "my") +public class CustomConfig { + public static final String OTHER_SQL_SESSION_FACTORY = "otherSessionFactory"; + public static final String CACHE_DATABASE_KEY = "pf_database"; + /** + * 流程服务 + */ + private String workflowServiceUrl; + + private String authServer; + private String clientId; + private String clientSecret; + + /** + * 上传服务 + */ + private String upload; +} diff --git a/usm-render/src/main/java/com/blueland/render/config/SpringMvcConfigure.java b/usm-render/src/main/java/com/blueland/render/config/SpringMvcConfigure.java new file mode 100644 index 0000000..9c8893c --- /dev/null +++ b/usm-render/src/main/java/com/blueland/render/config/SpringMvcConfigure.java @@ -0,0 +1,70 @@ +package com.blueland.render.config; + +import java.nio.charset.Charset; +import java.util.Iterator; +import java.util.List; +import java.util.Properties; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.MediaType; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.converter.StringHttpMessageConverter; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.ui.freemarker.FreeMarkerConfigurationFactory; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer; + +import com.alibaba.fastjson.serializer.SerializerFeature; +import com.alibaba.fastjson.support.config.FastJsonConfig; +import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter; +import com.google.common.collect.Lists; + +@Configuration +public class SpringMvcConfigure implements WebMvcConfigurer { + + + @Override + public void configureMessageConverters(List> converters) { + Iterator> iterator = converters.iterator(); + while(iterator.hasNext()){ + HttpMessageConverter converter = iterator.next(); + if(converter instanceof MappingJackson2HttpMessageConverter){ + iterator.remove(); + } + } + FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter(); + FastJsonConfig config = new FastJsonConfig(); + config.setSerializerFeatures(SerializerFeature.QuoteFieldNames, + SerializerFeature.WriteEnumUsingToString, + /*SerializerFeature.WriteMapNullValue,*/ + SerializerFeature.WriteDateUseDateFormat, + SerializerFeature.DisableCircularReferenceDetect); + config.setCharset(Charset.forName("UTF-8")); + List supportedMediaTypes = Lists.newArrayList(); + supportedMediaTypes.add(MediaType.APPLICATION_JSON); + supportedMediaTypes.add(MediaType.APPLICATION_JSON_UTF8); + supportedMediaTypes.add(MediaType.APPLICATION_ATOM_XML); + supportedMediaTypes.add(MediaType.APPLICATION_FORM_URLENCODED); + supportedMediaTypes.add(MediaType.APPLICATION_OCTET_STREAM); + supportedMediaTypes.add(MediaType.APPLICATION_PDF); + supportedMediaTypes.add(MediaType.APPLICATION_RSS_XML); + supportedMediaTypes.add(MediaType.APPLICATION_XHTML_XML); + supportedMediaTypes.add(MediaType.APPLICATION_XML); + supportedMediaTypes.add(MediaType.IMAGE_GIF); + supportedMediaTypes.add(MediaType.IMAGE_JPEG); + supportedMediaTypes.add(MediaType.IMAGE_PNG); + supportedMediaTypes.add(MediaType.TEXT_EVENT_STREAM); + supportedMediaTypes.add(MediaType.TEXT_HTML); + supportedMediaTypes.add(MediaType.TEXT_MARKDOWN); + supportedMediaTypes.add(MediaType.TEXT_PLAIN); + supportedMediaTypes.add(MediaType.TEXT_XML); + fastJsonHttpMessageConverter.setSupportedMediaTypes(supportedMediaTypes); + fastJsonHttpMessageConverter.setFastJsonConfig(config); + converters.add(fastJsonHttpMessageConverter); + } + + + + +} diff --git a/usm-render/src/main/java/com/blueland/render/rest/AreaRest.java b/usm-render/src/main/java/com/blueland/render/rest/AreaRest.java new file mode 100644 index 0000000..19329dc --- /dev/null +++ b/usm-render/src/main/java/com/blueland/render/rest/AreaRest.java @@ -0,0 +1,29 @@ +package com.blueland.render.rest; + + +import com.blueland.result.R; +import com.blueland.service.IAreaService; +import io.swagger.annotations.Api; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; + +@Api(value = "areainterface") +@RestController +@RequestMapping(value = "/api/areainterface") +public class AreaRest { + + @Autowired + private IAreaService areaService; + + + @GetMapping("/areaTree") + @ResponseBody + public R>> areaTree() { + List> list = areaService.areaTree(); + return R.ok(list); + } + +} diff --git a/usm-render/src/main/java/com/blueland/render/rest/AttachmentRest.java b/usm-render/src/main/java/com/blueland/render/rest/AttachmentRest.java new file mode 100644 index 0000000..a22d25d --- /dev/null +++ b/usm-render/src/main/java/com/blueland/render/rest/AttachmentRest.java @@ -0,0 +1,192 @@ +package com.blueland.render.rest; + + +/** + * @author 代码自动生成工具 + * @version 1.0 + * @since + */ + +import java.util.*; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.blueland.annotation.Log; +import com.blueland.bo.*; +import com.blueland.model.TPfAttachment; +import com.blueland.render.config.CustomConfig; +import com.blueland.result.R; +import com.blueland.service.IAttachmentService; +import io.swagger.annotations.Api; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import static com.blueland.constant.CommonConstant.*; +import static com.blueland.constant.ResponseConstant.*; + + +@Api(value = "attachment") +@RestController +@RequestMapping(value = "/api/attachment") +public class AttachmentRest { + @Autowired + private IAttachmentService attachmentService; + @Autowired + private CustomConfig customConfig; + + + /** + * 上传方法 + * @param request + * @param response + */ + @RequestMapping("/uploadfiles") + @ResponseBody + public Map uploadFiles(HttpServletRequest request, HttpServletResponse response) { + Map result = new HashMap(); + String path = customConfig.getUpload();//上传路径 + String appId = request.getParameter("appId"); + try { + result = attachmentService.uploadFile(request, path, null, null); + if ("true".equals(result.get("result"))) { + TPfAttachment attachment = new TPfAttachment(); + String fileName = result.get("fileName").toString(); + attachment.setAttName(fileName); + attachment.setAttUrl(result.get("uploadUrl").toString()); + attachment.setAttType(result.get("contentType").toString()); + attachment.setCreateTime(new Date()); + attachment.setCreateUserId("czadmin"); + attachment.setUpdateUserId("czadmin"); + attachment.setAppId(appId); + attachment.setAttShow(request.getParameter("attShow")); + attachmentService.save(attachment); + String uploadDirUrl = attachment.getAttUrl(); + attachmentService.asynFileForSyy(attachment.getAttId(), uploadDirUrl, false); + result.put("fileId", attachment.getAttId());//回写数据库附件表文件id + result.put("fileName", attachment.getAttName());//回写数据库附件表文件id + attachment = attachmentService.getById(attachment.getAttId()); + result.put("attachment", attachment); + result.put("resultCode", RESULT_CODE_SUCCESS_CODE); + + } + } catch (Exception e) { + // TODO: handle exception + } + return result; + } + + /** + * 搜索对象 + **/ + @RequestMapping(value = "", method = RequestMethod.GET, produces = "application/json;charset=UTF-8") + @ResponseBody + @CrossOrigin + public Page list(AttachmentEntity attachmentEntity, Integer curPage, Integer curPageSize) { + if (curPageSize == null) { + curPageSize = 100; + } + if (curPage == null) { + curPage = 1; + } + Page page = this.attachmentService.findPageList(attachmentEntity, curPage, curPageSize); + return page; + } + + + /** + * 查看对象 + **/ + @RequestMapping(value = "/{attId}", method = RequestMethod.GET, produces = "application/json;charset=UTF-8") + @ResponseBody + @CrossOrigin + public R view(@PathVariable String attId) { + TPfAttachment attachmentEntity = attachmentService.getById(attId); + return R.ok(attachmentEntity); + } + + + /** + * 查看对象(支持多条件查询) + **/ + @RequestMapping(value = "get", method = RequestMethod.GET, produces = "application/json;charset=UTF-8") + @ResponseBody + @CrossOrigin + public R get(AttachmentEntity model) { + TPfAttachment attachmentEntity = attachmentService.get(model); + return R.ok(attachmentEntity); + } + + + /** + * 新增对象 + **/ + @Log(busiType = "新增附件", opType = SAVE, type = "render") + @RequestMapping(value = "", method = RequestMethod.POST, produces = "application/json;charset=UTF-8") + @ResponseBody + @CrossOrigin + public R save(@RequestBody AttachmentEntity model) { + TPfAttachment attachment = BeanUtil.copyProperties(model, TPfAttachment.class); + attachmentService.save(attachment); + return R.ok(model); + } + + + /** + * 更新对象 + * @return + **/ + @Log(busiType = "更新附件", opType = UPDATE, type = "render") + @RequestMapping(value = "", method = RequestMethod.PUT, produces = "application/json;charset=UTF-8") + @ResponseBody + @CrossOrigin + public R update(@RequestBody AttachmentEntity model) { + TPfAttachment attachment = BeanUtil.copyProperties(model, TPfAttachment.class); + attachmentService.updateById(attachment); + return R.ok(model); + } + + /** + * 删除对象 + * @return + **/ + @Log(busiType = "删除附件", opType = DELETE, type = "render") + @RequestMapping(value = "/{attId}", method = RequestMethod.DELETE, produces = "application/json;charset=UTF-8") + @ResponseBody + @CrossOrigin + public R delete(@PathVariable String attId) { + attachmentService.removeById(attId); + return R.ok(true); + } + + /** + * 批量删除对象 + * @return + **/ + @Log(busiType = "批量删除附件", opType = DELETE, type = "render") + @RequestMapping(value = "deleteBatch", method = RequestMethod.DELETE, produces = "application/json;charset=UTF-8") + @ResponseBody + @CrossOrigin + public R deleteBatch(String[] ids) { + if (ObjectUtil.isEmpty(ids)) { + throw new RuntimeException("id不能为空"); + } + for (int i = 0; i < ids.length; i++) { + attachmentService.removeById(ids[i]); + } + return R.ok(true); + } + +} + + + diff --git a/usm-render/src/main/java/com/blueland/render/rest/DictRest.java b/usm-render/src/main/java/com/blueland/render/rest/DictRest.java new file mode 100644 index 0000000..d79b762 --- /dev/null +++ b/usm-render/src/main/java/com/blueland/render/rest/DictRest.java @@ -0,0 +1,142 @@ +package com.blueland.render.rest; + + +/** + * @author 代码自动生成工具 + * @version 1.0 + * @since + */ + +import java.util.List; +import java.util.Map; + +import com.blueland.core.util.UserUtils; +import com.blueland.model.TPfApplication; +import com.blueland.model.TPfDict; +import com.blueland.result.R; +import com.blueland.service.IApplicationService; +import com.blueland.service.IDictService; +import com.blueland.service.SysRedisService; +import io.swagger.annotations.Api; + +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import com.blueland.bo.DictEntity; + + +@Api(value = "dict") +@RestController +@RequestMapping(value = "/dict") +public class DictRest { + @Autowired + private IDictService iDictService; + @Autowired + private IApplicationService applicationService; + + @Autowired + private SysRedisService sysRedisService; + + /** + * 根据应用ID查询字典数据 + * @return + **/ + @ApiOperation(value = "根据appId查询字典数据列表", notes = "根根据appId查询字典数据列表") + @ApiImplicitParams({ @ApiImplicitParam(name = "appId", value = "应用id", dataType = "string", paramType = "path", required = true)}) + @RequestMapping(value = "/findDictList",method = RequestMethod.GET,produces = "application/json;charset=UTF-8") + @ResponseBody + public R> findDictList() { + String appId = UserUtils.getTenantId(); + //先查询是否有该应用 + TPfApplication applicationEntry = applicationService.getById(appId); + //如果不存在直接返回 应用不存在 + if(applicationEntry==null){ + throw new RuntimeException("应用不存在!"); + } + //根据应用ID查询字典数据 +// List dictList = dictService.findDictList(params); + // 20200428 modify TASK816 系统管理 字典优化 + List dictList = iDictService.findDictListByCache(appId); + return R.ok(dictList); + } + + @ApiOperation(value = "根据appId,dictCode查询子字典数据", notes = "根据appId,dictCode查询子字典数据") + @ApiImplicitParams({ @ApiImplicitParam(name = "appId", value = "应用id", dataType = "string", paramType = "path"), + @ApiImplicitParam(name = "dictCode", value = "字典父编码", dataType = "string", paramType = "path") }) + @RequestMapping(value = "/{dictCode}",method = RequestMethod.GET,produces = "application/json;charset=UTF-8") + @ResponseBody + public R> findByParentId(@PathVariable String dictCode){ + String appId = UserUtils.getTenantId(); + // 20200428 modify TASK816 系统管理 字典优化 + List list = iDictService.findchildListByCache(appId, dictCode); + return R.ok(list); + } + + + /** + * 查找字典对象(支持多条件查询) + **/ + @ApiOperation(value="查找字典对象(支持多条件查询)", notes="查找字典对象(支持多条件查询)") + @RequestMapping(value = "",method = RequestMethod.GET,produces = "application/json;charset=UTF-8") + @ResponseBody + public R get(DictEntity model) { + // 20200428 modify TASK816 系统管理 字典优化 + DictEntity dictEntity = iDictService.findByCache(model); + return R.ok(dictEntity); + } + + /** + * 20200908 add 根据父编码集合获取字典集合 + **/ + @ApiOperation(value="根据父编码集合获取字典集合", notes="根据父编码集合获取字典集合") + @RequestMapping(value = "getByParentcodes",method = RequestMethod.POST,produces = "application/json;charset=UTF-8") + @ResponseBody + public R>> getByPrentcodes(@RequestBody Map map) { + List parentcodes = (List) map.get("parentcodes"); + String appId = UserUtils.getTenantId(); + Map> dictMap = iDictService.findByParentcodesCache(appId, parentcodes); + return R.ok(dictMap); + } + + /** + * 根据所有字典数据 + * @return + **/ + @ApiOperation(value = "根据所有字典数据", notes = "根据所有字典数据") + @RequestMapping(value = "/list",method = RequestMethod.GET,produces = "application/json;charset=UTF-8") + @ResponseBody + public R> findAllDict() { + List dictList = iDictService.getDictList(); + return R.ok(dictList); + } + + /** + * 重新加载字典数据 + * + * @return + */ + @ApiOperation(value = "/initDict", httpMethod = "GET", notes = "重新加载字典数据") + @GetMapping("/initDict") + public R loadDict() { + try { + sysRedisService.initDict(); + } catch (Exception e) { + return R.fail(e.getMessage()); + } + return R.ok(); + } + /** + * 对比修改缓存 + */ + @ApiOperation(value = "/update", httpMethod = "GET", notes = "重新加载字典数据") + @GetMapping("/update") + public R updateCached() { + sysRedisService.flushDict(); + return R.ok(); + } +} + + + diff --git a/usm-render/src/main/java/com/blueland/render/rest/MenuRest.java b/usm-render/src/main/java/com/blueland/render/rest/MenuRest.java new file mode 100644 index 0000000..b096e57 --- /dev/null +++ b/usm-render/src/main/java/com/blueland/render/rest/MenuRest.java @@ -0,0 +1,133 @@ +package com.blueland.render.rest; + + +import java.util.HashMap; +/** + * @author 代码自动生成工具 + * @version 1.0 + * @since + */ +import java.util.List; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import com.blueland.core.util.UserUtils; +import com.blueland.model.TPfApplication; +import com.blueland.result.R; +import com.blueland.service.*; +import io.swagger.annotations.ApiOperation; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import com.blueland.bo.MenuEntity; + +import io.swagger.annotations.Api; + +import static com.blueland.constant.ResponseConstant.*; + + +@Api(value = "menu") +@RestController +@RequestMapping(value = "/menu") +public class MenuRest { + @Autowired + private IMenuService iMenuService; + + @Autowired + private IApplicationService appService; + + @Autowired + private SysRedisService sysRedisService; + /** + * 查看父对象 + **/ + @RequestMapping(value = "/{menuId}/menuId/resource",method = RequestMethod.GET,produces = "application/json;charset=UTF-8") + @ResponseBody + @CrossOrigin + public Map viewParent(@PathVariable("menuId") String menuId) { + String appId = UserUtils.getTenantId(); + Map < String , Object > result = new HashMap< String , Object>(); + List menuEntryList = null; + try { + menuEntryList = iMenuService.getParent(menuId,appId); + result.put("resultCode", RESULT_CODE_SUCCESS_CODE); + result.put("resultMsg", "处理成功"); + result.put("result", menuEntryList); + } catch (Exception e) { + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "系统内部异常"); + e.printStackTrace(); + } + return result; + } + + /** + * 查看对象 + * 根据app_id获取资源 + **/ + @RequestMapping(value = "/resource",method = RequestMethod.GET,produces = "application/json;charset=UTF-8") + @ResponseBody + @CrossOrigin + public Map listMenuAll(@RequestParam Map queryParams,HttpServletRequest request,HttpServletResponse response) { + String appId = UserUtils.getTenantId(); + Map < String , Object > result = new HashMap< String , Object>(); + List menuEntryList = null; + + try { + if(StringUtils.isBlank(appId)){ + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "输入参数异常"); + }else{ + TPfApplication app = appService.getById(appId); + if(app==null){ + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "应用ID错误"); + }else{ + String menuName = null; + String parentName = null; + String menuType = null; + if(queryParams.containsKey("menuName")) { + menuName = queryParams.get("menuName").toString(); + } + if(queryParams.containsKey("parentName")) { + parentName = queryParams.get("parentName").toString(); + } + if(queryParams.containsKey("menuType")) { + menuType = queryParams.get("menuType").toString(); + } + + menuEntryList = iMenuService.getMenuChildren(appId,menuName,parentName,menuType); + result.put("resultCode", RESULT_CODE_SUCCESS_CODE); + result.put("resultMsg", "处理成功"); + result.put("result", menuEntryList); + } + } + } catch (Exception e) { + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "系统内部异常"); + e.printStackTrace(); + } + return result; + } + + @ApiOperation(value = "加载租户id:菜单类型type:菜单id对应菜单实体的redis数据") + @GetMapping("/initMenu") + public R initMenu(){ + sysRedisService.initMenu(); + return R.ok(); + } + + @ApiOperation(value = "加载租户id:角色id对应List<租户id:菜单类型type:菜单id>的redis数据") + @GetMapping("/initMenuId") + public R initMenuId(){ + sysRedisService.initMenuId(); + return R.ok(); + } + +} + + + diff --git a/usm-render/src/main/java/com/blueland/render/rest/OrgRest.java b/usm-render/src/main/java/com/blueland/render/rest/OrgRest.java new file mode 100644 index 0000000..b2a40bf --- /dev/null +++ b/usm-render/src/main/java/com/blueland/render/rest/OrgRest.java @@ -0,0 +1,418 @@ +package com.blueland.render.rest; + +import java.beans.BeanInfo; +import java.beans.IntrospectionException; +import java.beans.Introspector; +import java.beans.PropertyDescriptor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.*; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.json.JSON; +import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.blueland.annotation.ApiVersion; +import com.blueland.annotation.Log; +import com.blueland.constant.RedisConstant; +import com.blueland.core.util.RedisUtils; +import com.blueland.bo.*; + +import com.blueland.core.util.StringUtil; +import com.blueland.core.util.UserUtils; +import com.blueland.dao.OrgDao; +import com.blueland.enums.Version; +import com.blueland.model.TUcOrg; +import com.blueland.result.R; +import com.blueland.service.ITucOrgService; +import com.blueland.service.ITucStaffService; +import com.blueland.service.SysRedisService; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import com.blueland.constant.Constant; + +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; + +import javax.annotation.Resource; + +import static com.blueland.constant.CommonConstant.*; + + +@Slf4j +@RestController +@RequestMapping(value = "/org") +public class OrgRest { + @Autowired + private ITucOrgService iTucOrgService; + @Autowired + private ITucStaffService iTucStaffService; + + @Autowired + private SysRedisService sysRedisService; + + @Resource + OrgDao orgDao; + + /** + * 搜索对象 + **/ + @ApiOperation(value = "分页查询组织", notes = "分页查询组织") + @RequestMapping(value = "", method = RequestMethod.GET, produces = "application/json;charset=UTF-8") + @ResponseBody + public R> list(Org org) { + Page page = iTucOrgService.findPage(org); + return R.ok(page); + } + + /** + * 搜索对象 + **/ + @ApiOperation(value = "查询组织", notes = "查询组织") + @RequestMapping(value = "findlist", method = RequestMethod.GET, produces = "application/json;charset=UTF-8") + @ResponseBody + public R> findlist(Org org) { + org.setAppId(UserUtils.getTenantId()); + List list = iTucOrgService.findList(org); + return R.ok(list); + } + + /** + * 查看对象 + **/ + @ApiOperation(value = "根据orgId查询组织", notes = "根据orgId查询组织") + @RequestMapping(value = "/{orgId}", method = RequestMethod.GET, produces = "application/json;charset=UTF-8") + @ResponseBody + public R view(@PathVariable String orgId) { + Org org = iTucOrgService.getByOgId(orgId); + return R.ok(org); + } + + + /** + * 查看对象(支持多条件查询) + **/ + @ApiOperation(value = "查看组织(支持多条件查询)", notes = "查看对象(支持多条件查询)") + @RequestMapping(value = "get", method = RequestMethod.GET, produces = "application/json;charset=UTF-8") + @ResponseBody + public R get(Org model) { + Org tucOrgEntity = BeanUtil.copyProperties(model, Org.class); + Field[] field = model.getClass().getDeclaredFields(); + Map map = BeanUtil.beanToMap(model); + boolean result = false; + for (int i = 0; i < field.length; i++) { + String name = field[i].getName(); + if (map.get(name) != null) { + result = true; + break; + } + } + if (result) { + tucOrgEntity = iTucOrgService.get(model); + } + return R.ok(tucOrgEntity); + } + + + /** + * 新增对象 + **/ + @ApiOperation(value = "新增组织", notes = "新增组织") + @RequestMapping(value = "", method = RequestMethod.POST, produces = "application/json;charset=UTF-8") + @ResponseBody + public R save(@RequestBody Org model) { + String deptcode = model.getDeptId(); + if (deptcode == null) { + throw new RuntimeException("没有部门编码!"); + } + if (deptcode.startsWith("A01A01A08A05") || deptcode.startsWith("A01A01A15")) { + if (deptcode.length() > 15) { + deptcode = deptcode.substring(0, deptcode.length() - 3); + Org parentOrg = new Org(); + parentOrg.setDeptId(deptcode); + Org org = iTucOrgService.getByAppId(parentOrg); + model.setOrgFullName(org.getOrgFullName()); + } + model.setOrgWorkType(Constant.ORGWORKTYPE_SELL); + iTucOrgService.syncDept2CRM(model); + } else { + model.setOrgWorkType("other"); + } + List list = iTucOrgService.handleOrg(model); + if (ObjectUtil.isNotEmpty(list)) { + for (TUcOrg org : list) { + orgDao.insert(org); + } + // 更新缓存 + sysRedisService.flushDept(list); + } + return R.ok(model, "成功"); + } + + /** + * 批量新增对象 + **/ + @ApiOperation(value = "批量新增组织", notes = "批量新增组织") + @RequestMapping(value = "/batch", method = RequestMethod.POST, produces = "application/json;charset=UTF-8") + @ResponseBody + public R batchSave(@RequestBody List model) { + for (Org org : model) { + List list = iTucOrgService.handleOrg(org); + if (ObjectUtil.isNotEmpty(list)) { + iTucOrgService.saveBatch(list); + // 更新缓存 + sysRedisService.flushDept(list); + } + } + return R.ok(); + } + + + /** + * 更新对象 + * + * @return + **/ + @ApiOperation(value = "更新组织", notes = "更新组织") + @RequestMapping(value = "", method = RequestMethod.PUT, produces = "application/json;charset=UTF-8") + @ResponseBody + public R update(@RequestBody Org model) { + String deptcode = model.getDeptId(); + if (ObjectUtil.isEmpty(deptcode)) { + throw new RuntimeException("没有部门编码!"); + } + TUcOrg org = BeanUtil.copyProperties(model, TUcOrg.class); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().eq(TUcOrg:: getDeptId, deptcode); + orgDao.update(org, queryWrapper); + // 更新部门名称 + UpdateDeptName(model); + // 更新缓存 + sysRedisService.saveOrUpdateDept(model); + // 判断部门id是否发生过变化 +// if (!Objects.equals(old.getDeptId(), model.getDeptId())) { +// List list = iTucOrgService.handleOrg(model); +// if (ObjectUtil.isNotEmpty(list)) { +// for (TUcOrg org : list) { +// if (iTucOrgService.countOrgById(org.getOrgId(), org.getAppId()) > 0) { +// // 更新 +// QueryWrapper queryWrapper = new QueryWrapper<>(); +// queryWrapper.lambda().eq(TUcOrg:: getDeptId, deptcode); +// orgDao.update(org, queryWrapper); +// // 更新部门名称 +// UpdateDeptName(model); +// } else { +// // 新增 +// orgDao.insert(org); +// } +// } +// // 更新缓存 +// sysRedisService.flushDept(list); +// } +// } else { +// TUcOrg org1 = BeanUtil.copyProperties(model, TUcOrg.class); +// QueryWrapper queryWrapper = new QueryWrapper<>(); +// queryWrapper.lambda().eq(TUcOrg:: getDeptId, deptcode); +// orgDao.update(org1, queryWrapper); +// // 更新部门名称 +// UpdateDeptName(model); +// // 更新缓存 +// sysRedisService.saveOrUpdateDept(model); +// } + return R.ok(true,"成功"); + } + + private void UpdateDeptName(Org model) { + String deptcode = model.getDeptId(); + String parentdeptcode = deptcode.substring(0, deptcode.length() - 3); + Org parentOrg = new Org(); + parentOrg.setOrgSpells(model.getOrgSpells()); + parentOrg.setDeptId(parentdeptcode); + Org org = iTucOrgService.getByAppId(parentOrg); + if (org != null) { + model.setOrgFullName(org.getOrgFullName()); + } + if (ObjectUtil.isNotEmpty(model.getOrgName())) { + iTucStaffService.updateDeptnameByDeptid(model.getOrgName(), deptcode); + } + } + + /** + * 删除对象 + * + * @return + **/ + @ApiOperation(value = "根据orgId删除组织", notes = "根据orgId删除组织") + @RequestMapping(value = "/{orgId}", method = RequestMethod.DELETE, produces = "application/json;charset=UTF-8") + @ResponseBody + public R delete(@PathVariable String orgId) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().eq(TUcOrg:: getDeptId, orgId); + orgDao.delete(queryWrapper); + // 删除缓存 + sysRedisService.flushDept(); + return R.ok(); + } + + /** + * 子组织列表-内部抵用 + **/ + @ApiOperation(value = "获取子组织列表", notes = "获取子组织列表") + @RequestMapping(value = "/suborgs", method = RequestMethod.GET, produces = "application/json;charset=UTF-8") + @ResponseBody + public Page getSubOrgs(Org org) { + if (StringUtils.isEmpty(org.getOrgType())) { + throw new RuntimeException("非法参数"); + } + org.setSortColumns("org_sort"); + Page pageInfo = iTucOrgService.getOrgSubs(org); + return pageInfo; + } + + /** + * 组织列表-内部调用 + **/ + @ApiOperation(value = "分页获取组织列表", notes = "分页获取组织列表") + @RequestMapping(value = "listorg", method = RequestMethod.GET, produces = "application/json;charset=UTF-8") + @ResponseBody + public Page listOrg(Org org) { + if (StringUtils.isEmpty(org.getOrgType())) { + throw new RuntimeException("非法参数"); + } + return iTucOrgService.getOrgPage(org); + } + + @ApiOperation(value = "不分页获取组织列表", notes = "不分页获取组织列表") + @PostMapping("/listorgNew") + public R> selectOrgList(@RequestBody Org org) { + List list = iTucOrgService.getListNoPage(org); + return R.ok(list); + } + + + /** + * 通过类型将组织转换树 + */ + @ApiOperation(value = "通过orgType获取组织树", notes = "通过orgType获取组织树") + @RequestMapping(value = "tree", method = RequestMethod.GET, produces = "application/json;charset=UTF-8") + @ResponseBody + public List> getOrgTree(Org org) { + if (StringUtils.isEmpty(org.getOrgType())) { + throw new RuntimeException("非法参数"); + } + org.setSortColumns("org_sort"); + org.setOrgStatus("QY"); + + String oldOrgId = org.getOrgId(); + org.setOrgId(""); + List orgList = iTucOrgService.getListNoPage(org); + org.setOrgId(oldOrgId); + + List> resultList = new ArrayList>(); + if (orgList.size() > 0) { + resultList = iTucOrgService.handleTreeData(org, + orgList); + } + + return resultList; + } + + + /** + * 根据type和id直接出树 + */ + @ApiOperation(value = "根据type和id查询下一节点数据", notes = "根据type和id查询下一节点数据") + @RequestMapping(value = "get/{orgType}/{type}", method = RequestMethod.GET, produces = "application/json;charset=UTF-8") + @ResponseBody + public R> getOrgTreeGYGS(@PathVariable String orgType, + @PathVariable String type, + @RequestParam(required = false) String id, + @RequestParam(required = false) String orgId, + @RequestParam(required = false) String staffName) { + List treeEntitieList = iTucOrgService.getTree(orgType, type, id, orgId, staffName); + return R.ok(treeEntitieList); + } + + + /** + * 功能描述:搜索组织(选人组件用,勿动) + * + * @param: [orgName] + * @return: com.blueland.framework.model.ServiceResponse> + * @auther: lg 540923947@qq.com + * @date: 2019/5/9 11:44 + */ + @ApiOperation(value = "搜索组织", notes = "搜索组织") + @RequestMapping(value = "searchOrg", method = RequestMethod.GET, produces = "application/json;charset=UTF-8") + @ResponseBody + public R> searchOrg(String orgName, String companyId) { + Org org = new Org(); + org.setOrgStatus("QY"); + org.setSortColumns("org_sort"); + org.setQueryOrg(orgName); + org.setCompanyId(companyId); + List list = this.iTucOrgService.searchOrg(org); + return R.ok(list); + } + + /** + * 功能描述:搜索组织(选人组件用,勿动) + * + * @param: [orgName] + * @return: com.blueland.framework.model.ServiceResponse> + * @auther: lg 540923947@qq.com + * @date: 2019/5/9 11:44 + */ + @ApiOperation(value = "搜索组织和用户", notes = "搜索组织和用户") + @RequestMapping(value = "search/organduser", method = RequestMethod.GET, produces = "application/json;charset=UTF-8") + @ResponseBody + public R> searchOrgAndUser(String inputName, String companyId) { + Org org = new Org(); + org.setOrgStatus("QY"); + org.setSortColumns("org_sort"); + org.setQueryOrg(inputName); + org.setCompanyId(companyId); + List list = this.iTucOrgService.searchOrg(org); + TucStaffEntity tucStaffEntity = new TucStaffEntity(); + tucStaffEntity.setStaffStatus("QY"); + tucStaffEntity.setSortColumns("staff_sort"); + tucStaffEntity.setQueryStaff(inputName); + tucStaffEntity.setCompanyId(companyId); + List userList = iTucStaffService.searchUser(tucStaffEntity); + list.addAll(userList); + return R.ok(list); + } + + @ApiOperation(value = "更新redis部门数据", notes = "更新redis") + @GetMapping("/updateDept") + public R updateDeptData() { + sysRedisService.flushDept(); + return R.ok(); + } + + @ApiOperation(value = "缓存部门数据", notes = "初始化redis中的部门信息") + @GetMapping("/initDept") + public R initDept() { + sysRedisService.initDept(); + return R.ok(); + } + + @ApiVersion(groups = Version.SIX) + @ApiOperation("获取顶级组织id") + @GetMapping("/getTopOrgId") + public R getTopOrgId() { + return R.ok(iTucOrgService.getTopOrgId()); + } + + @ApiVersion(groups = Version.SIX) + @ApiOperation("根据部门code获取顶级销售组织id") + @GetMapping("/getSellOrgId/{deptCode}") + public R getSellOrgId(@PathVariable("deptCode") String deptCode) { + return R.ok(iTucOrgService.getSellOrgId(deptCode)); + } + +} diff --git a/usm-render/src/main/java/com/blueland/render/rest/ParameterRest.java b/usm-render/src/main/java/com/blueland/render/rest/ParameterRest.java new file mode 100644 index 0000000..63d944a --- /dev/null +++ b/usm-render/src/main/java/com/blueland/render/rest/ParameterRest.java @@ -0,0 +1,127 @@ +package com.blueland.render.rest; + + +import java.util.HashMap; +import java.util.Map; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.blueland.core.util.UserUtils; +import com.blueland.model.TPfApplication; +import com.blueland.model.TPfParameter; +import com.blueland.result.R; +import com.blueland.service.IApplicationService; +import com.blueland.service.IParameterService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; +import com.blueland.bo.ApplicationEntity; +import com.blueland.bo.DictEntity; +import com.blueland.bo.ParameterEntity; + +import io.swagger.annotations.Api; + +import static com.blueland.constant.ResponseConstant.*; + + +@Api(value = "parameter") +@RestController +@RequestMapping(value = "/parameter") +public class ParameterRest { + @Autowired + private IParameterService iParameterService; + @Autowired + private IApplicationService appService; + + + /** + * 根据应用ID获取参数列表(不提供单独查参数的功能)*/ + @ResponseBody + @RequestMapping(value="/page", method = RequestMethod.GET,produces = "application/json;charset=UTF-8") + public Map parameterListPage(@RequestParam Map queryParams){ + String appId = UserUtils.getTenantId(); + int curPageSize = 10; + int curPage = 1; + Map < String , Object > result = new HashMap< String , Object>(); + Page page = null; + if(queryParams.containsKey("curPageSize")){ + curPageSize =Integer.parseInt(queryParams.get("curPageSize").toString()); + } + if(queryParams.containsKey("curPage")){ + curPage =Integer.parseInt(queryParams.get("curPage").toString()); + } + queryParams.put("appId", appId); + TPfApplication appEntity = appService.getById(appId); + if(appEntity==null){ + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "应用ID错误"); + }else{ + page = iParameterService.parameterListPage(queryParams,curPageSize,curPage); + result.put("resultCode", RESULT_CODE_SUCCESS_CODE); + result.put("pageNum", page.getCurrent()); + result.put("pageSize", page.getSize()); + result.put("total", page.getTotal()); + result.put("pages", page.getPages()); + result.put("resultMsg", "处理成功"); + result.put("result", page.getRecords()); + } + + return result; + } + + /** + * 搜索对象 + **/ + @RequestMapping(value = "",method = RequestMethod.GET,produces = "application/json;charset=UTF-8") + @ResponseBody + @CrossOrigin + public R> list(ParameterEntity parameterEntity) { + Page page = this.iParameterService.findPage(parameterEntity); + return R.ok(page); + } + + @ResponseBody + @RequestMapping(value="/list", method = RequestMethod.GET,produces = "application/json;charset=UTF-8") + public Page listPage(@RequestParam Map queryParams){ + int curPageSize = 10; + int curPage = 1; + if(queryParams.containsKey("curPageSize")){ + curPageSize =Integer.parseInt(queryParams.get("curPageSize").toString()); + } + if(queryParams.containsKey("curPage")){ + curPage =Integer.parseInt(queryParams.get("curPage").toString()); + } + Page page = iParameterService.findPageList(queryParams,curPage,curPageSize); + return page; + } + + /** + * 查看对象 + **/ + @RequestMapping(value = "/{pid}",method = RequestMethod.GET,produces = "application/json;charset=UTF-8") + @ResponseBody + @CrossOrigin + public R view(@PathVariable String pid) { + TPfParameter parameterEntity = iParameterService.getById(pid); + return R.ok(parameterEntity); + } + + + /** + * 查看对象(支持多条件查询) + **/ + @RequestMapping(value = "get",method = RequestMethod.GET,produces = "application/json;charset=UTF-8") + @ResponseBody + @CrossOrigin + public R get(ParameterEntity model) { + TPfParameter parameterEntity = iParameterService.get(model); + return R.ok(parameterEntity); + } +} + + + diff --git a/usm-render/src/main/java/com/blueland/render/rest/PostCodeController.java b/usm-render/src/main/java/com/blueland/render/rest/PostCodeController.java new file mode 100644 index 0000000..93a8279 --- /dev/null +++ b/usm-render/src/main/java/com/blueland/render/rest/PostCodeController.java @@ -0,0 +1,139 @@ +package com.blueland.render.rest; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.blueland.bo.PositionInfoBo; +import com.blueland.bo.TucStaffEntity; +import com.blueland.constant.Constant; +import com.blueland.dao.OrgDao; +import com.blueland.dao.StaffDao; +import com.blueland.model.TUcOrg; +import com.blueland.model.TUcStaff; +import com.blueland.result.R; +import com.blueland.service.ITucOrgService; +import com.blueland.service.ITucStaffService; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Objects; + +/** + * @auther xcy + * @create 2022-06-07 15:38 + * 用户任岗同步接口 + */ +@RestController +@RequestMapping({"/userpost"}) +public class PostCodeController { + + @Autowired + private ITucStaffService itUcStaffService; + @Autowired + private ITucOrgService itUcOrgService; + + @Resource + StaffDao staffDao; + + @Resource + OrgDao orgDao; + + + @ApiOperation("主岗调岗") + @PostMapping({"/update"}) + public R mainPositionChange(@RequestBody PositionInfoBo positionInfo) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().eq(TUcStaff::getStaffNum, positionInfo.getStaffNum()); + queryWrapper.lambda().eq(TUcStaff::getStaffPostType, Constant.MAIN); + TUcStaff tUcStaff = new TUcStaff(); + this.initPositionInfo(tUcStaff, positionInfo); + Integer result = this.staffDao.update(tUcStaff, queryWrapper); + if (result > 0) { + return R.ok(true, "成功"); + } else { + return R.fail("主岗调岗信息不存在"); + } + } + + @ApiOperation("新增兼岗") + @PostMapping({""}) + public R addParttimePosition(@RequestBody PositionInfoBo positionInfo) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper(); + lqw.eq(TUcStaff::getStaffPostCode, positionInfo.getStaffPostCode()); + lqw.eq(TUcStaff::getStaffStatus, Constant.QY); + List list = this.staffDao.selectList(lqw); + if (ObjectUtil.isNotEmpty(list)) { + TUcStaff tUcStaff = new TUcStaff(); + this.initPositionInfo(tUcStaff, positionInfo); + this.staffDao.update(tUcStaff, lqw); + return R.ok(true, "成功"); + } else { + lqw = new LambdaQueryWrapper(); + lqw.eq(TUcStaff::getStaffNum, positionInfo.getStaffNum()); + lqw.eq(TUcStaff::getStaffPostType, Constant.MAIN); + List staffList = this.staffDao.selectList(lqw); + if (ObjectUtil.isEmpty(staffList)) { + return R.fail("新增兼岗时主岗信息不存在"); + } else { + TUcStaff staff = BeanUtil.copyProperties(staffList.get(0), TUcStaff.class); + this.initPositionInfo(staff, positionInfo); + List addList = itUcStaffService.handleStaffToPostCode(staff); + if (ObjectUtil.isNotEmpty(addList)) { + for (TUcStaff tUcStaff : addList) { + this.initPositionInfo(tUcStaff, positionInfo); + tUcStaff.setStaffId(null); + this.staffDao.insert(tUcStaff); + } + } + return R.ok(true, "成功"); + } + } + } + + @ApiOperation("删除兼岗") + @GetMapping({"/{staffPostCode}"}) + public R removeParttimePosition(@PathVariable String staffPostCode) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper(); + lqw.eq(TUcStaff::getStaffPostCode, staffPostCode); + List list = this.staffDao.selectList(lqw); + if (ObjectUtil.isNotEmpty(list)) { + for (TUcStaff tUcStaff : list) { + tUcStaff.setStaffStatus(Constant.JY); + this.staffDao.update(tUcStaff, lqw); + } + return R.ok(true, "成功"); + } else { + return R.fail("删除兼岗时兼岗信息不存在"); + } + } + + private void initPositionInfo(TUcStaff tUcStaff, PositionInfoBo positionInfo) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper(); + lqw.eq(TUcOrg::getDeptId, positionInfo.getDeptCode()); + List list = this.orgDao.selectList(lqw); + if (ObjectUtil.isNotEmpty(list)) { + TUcOrg tUcOrg = list.get(0); + tUcStaff.setOrgId(tUcOrg.getOrgId()); + tUcStaff.setOrgName(tUcOrg.getOrgName()); + } + tUcStaff.setStaffPostCode(positionInfo.getStaffPostCode()); + tUcStaff.setStaffPostType(positionInfo.getStaffPostType()); + tUcStaff.setDeptId(positionInfo.getDeptCode()); + tUcStaff.setDeptName(positionInfo.getDeptName()); + tUcStaff.setPositionId(positionInfo.getPositionCode()); + tUcStaff.setPositionName(positionInfo.getPositionName()); + tUcStaff.setStaffCreator(positionInfo.getCreateUser()); + tUcStaff.setStaffCreateTime(positionInfo.getCreateTime()); + tUcStaff.setStaffNum(positionInfo.getStaffNum()); + tUcStaff.setStaffCode(positionInfo.getStaffCode()); + tUcStaff.setStaffStatus(Constant.QY); + if (!Objects.equals(positionInfo.getStatus(), "enable")) { + tUcStaff.setStaffStatus(Constant.JY); + } + } + +} diff --git a/usm-render/src/main/java/com/blueland/render/rest/RedisCacheController.java b/usm-render/src/main/java/com/blueland/render/rest/RedisCacheController.java new file mode 100644 index 0000000..5528edb --- /dev/null +++ b/usm-render/src/main/java/com/blueland/render/rest/RedisCacheController.java @@ -0,0 +1,134 @@ +package com.blueland.render.rest; + +import com.blueland.bo.DictEntity; +import com.blueland.bo.Org; +import com.blueland.bo.TucStaffEntity; +import com.blueland.result.R; +import com.blueland.service.SysRedisService; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @auther xcy + * @create 2022-06-15 11:05 + */ +@RestController +@RequestMapping("/api/redis") +@ApiOperation("redis数据操作控制器") +public class RedisCacheController { + + @Autowired + SysRedisService sysRedisService; + + @ApiOperation("初始化字典数据") + @GetMapping("/initDict") + public R initDict() { + sysRedisService.initDict(); + return R.ok(); + } + + @ApiOperation("刷新字典数据") + @GetMapping("/flushDict") + public R flushDict() { + sysRedisService.flushDict(); + return R.ok(); + } + + @ApiOperation("根据字典code,父级code获取数据,区分租户") + @GetMapping("/getDictListByCode") + public R> getDictListByCode() { + return R.ok(sysRedisService.getDictList()); + } + + @ApiOperation("根据redis key获取字典数据") + @GetMapping("/getDictByRedisKey/{key}") + public R getDictByRedisKey(@PathVariable("key") String key) { + return R.ok(sysRedisService.getDictByRedisKey(key)); + } + + @ApiOperation("初始化角色数据") + @GetMapping("/initRole") + public R initRole() { + sysRedisService.initRole(); + return R.ok(); + } + + @ApiOperation("刷新角色数据") + @GetMapping("/flushRole") + public R flushRole() { + sysRedisService.flushRole(); + return R.ok(); + } + + @ApiOperation("初始化菜单数据") + @GetMapping("/initMenu") + public R initMenu() { + sysRedisService.initMenu(); + return R.ok(); + } + + @ApiOperation("刷新菜单数据") + @GetMapping("/flushMenu") + public R flushMenu() { + sysRedisService.flushMenu(); + return R.ok(); + } + + @ApiOperation("初始化菜单id数据") + @GetMapping("/initMenuId") + public R initMenuId() { + sysRedisService.initMenuId(); + return R.ok(); + } + + @ApiOperation("刷新菜单id数据") + @GetMapping("/flushMenuId") + public R flushMenuId() { + sysRedisService.flushMenuId(); + return R.ok(); + } + + @ApiOperation("初始化员工数据") + @GetMapping("/initStaff") + public R initStaff() { + sysRedisService.initStaff(); + return R.ok(); + } + + @ApiOperation("刷新员工数据") + @GetMapping("/flushStaff") + public R flushStaff() { + sysRedisService.flushStaff(); + return R.ok(); + } + + @ApiOperation("获取员工集合,区分租户") + @GetMapping("/getStaffList") + public R> getStaffList() { + return R.ok(sysRedisService.getStaffList()); + } + + @ApiOperation("初始化部门数据") + @GetMapping("/initDept") + public R initDept() { + sysRedisService.initDept(); + return R.ok(); + } + + @ApiOperation("刷新部门数据") + @GetMapping("/flushDept") + public R flushDept() { + sysRedisService.flushDept(); + return R.ok(); + } + + @ApiOperation("查询部门集合") + @GetMapping("/getOrgList") + public R> getOrgList() { + return R.ok(sysRedisService.getOrgList()); + } + +} diff --git a/usm-render/src/main/java/com/blueland/render/rest/RoleRest.java b/usm-render/src/main/java/com/blueland/render/rest/RoleRest.java new file mode 100644 index 0000000..6d8d7e9 --- /dev/null +++ b/usm-render/src/main/java/com/blueland/render/rest/RoleRest.java @@ -0,0 +1,847 @@ +package com.blueland.render.rest; + + +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.blueland.annotation.ApiVersion; +import com.blueland.core.util.UserUtils; +import com.blueland.enums.Version; +import com.blueland.model.TPfApplication; +import com.blueland.model.TPfRole; +import com.blueland.result.R; +import com.blueland.service.*; +import io.swagger.annotations.ApiOperation; +import com.blueland.annotation.Log; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import com.blueland.bo.MenuEntity; +import com.blueland.bo.Role2userEntity; +import com.blueland.bo.RoleEntity; +import com.blueland.bo.RoleUserRest; +import com.blueland.bo.TucStaffEntity; + +import io.swagger.annotations.Api; + +import static com.blueland.constant.CommonConstant.*; +import static com.blueland.constant.ResponseConstant.*; + + +@Api(value = "role") +@RestController +@RequestMapping(value = "/role") +public class RoleRest { + @Autowired + private IRoleService roleServiceImpl; + @Autowired + private ITucStaffService pubUserService; + @Autowired + private IApplicationService appService; + @Autowired + private IMenuService menuServiceImpl; + @Autowired + private IRole2userService iRole2userService; + + @Autowired + private SysRedisService sysRedisService; + + + /** + * 根据应用ID、员工ID查询有权限访问的菜单列表资源 + * @author changgao + * 2019年4月24日14:34:54 + */ + @RequestMapping(value = "/auth/{userId}/resource",method = RequestMethod.GET,produces = "application/json;charset=UTF-8") + @ResponseBody + public Map listMenuUser(@PathVariable("userId") String userId,String menuType,String menuId, + HttpServletRequest request,HttpServletResponse response){ + String appId = UserUtils.getTenantId(); + Map < String , Object > result = new HashMap< String , Object>(); + List menuEntryList = null; + try { + if(StringUtils.isBlank(appId)||StringUtils.isBlank(userId)){ + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "输入参数异常"); + }else{ + TucStaffEntity userEntry = pubUserService.getStaffByStaffId(userId); + TPfApplication appEntity = appService.getById(appId); + if(userEntry==null){ + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "用户ID错误"); + }else if(appEntity==null){ + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "应用ID错误"); + }else{ + menuEntryList = menuServiceImpl.getMenu(appId, userId, menuType,menuId); + //BUG9522 测试环境把黄鹃的账号与生科有关的全部角色移除后, + //使用黄鹃的账号依然可以看到很多菜单,以及有新建客户、订单的权限 + /*if(menuEntryList.isEmpty()){ + menuEntryList = menuService.getMenuIsOpenStatus(appId); + }*/ + result.put("resultCode", RESULT_CODE_SUCCESS_CODE); + result.put("resultMsg", "处理成功"); + result.put("result", menuEntryList); + } + } + } catch (Exception e) { + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "系统内部异常"); + e.printStackTrace(); + } + return result; + } + + /** + * 根据菜单ID、员工ID查询有权限访问的菜单列表资源 + * @author changgao + * 2019年4月24日14:34:54 + */ + @RequestMapping(value = "/{menuCode}/auth/{userId}/resource",method = RequestMethod.GET,produces = "application/json;charset=UTF-8") + @ResponseBody + public Map listMenuCode(@PathVariable("menuCode") String menuCode,@PathVariable("userId") String userId, + String menuType,HttpServletRequest request,HttpServletResponse response){ + String appId = UserUtils.getTenantId(); + Map < String , Object > result = new HashMap< String , Object>(); + List menuEntryList = null; + try { + if(menuType==null) { + menuType = "button"; + }else if(menuType.equals("all")) { + menuType = ""; + } + TucStaffEntity userEntry = pubUserService.getStaffByStaffId(userId); + if(userEntry==null){ + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "用户ID错误"); + }else{ + menuEntryList = menuServiceImpl.getMenuCode(menuCode, userId,appId,menuType); + result.put("resultCode", RESULT_CODE_SUCCESS_CODE); + result.put("resultMsg", "处理成功"); + result.put("result", menuEntryList); + } + } catch (Exception e) { + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "系统内部异常"); + e.printStackTrace(); + } + return result; + } + + /** + * 根据应用ID查询角色列表 + */ + @RequestMapping(value = "/listRole",produces = "application/json;charset=UTF-8",method = RequestMethod.GET) + @ResponseBody + @CrossOrigin + public Map listRole(@RequestParam Map queryParams,HttpServletRequest request,HttpServletResponse response) { + String appId = UserUtils.getTenantId(); + Map < String , Object > result = new HashMap< String , Object>(); + Page RoleRestList = null; + int curPageSize = 10; + int curPage = 1; + if(queryParams.containsKey("curPageSize")){ + curPageSize =Integer.parseInt(queryParams.get("curPageSize").toString()); + } + if(queryParams.containsKey("curPage")){ + curPage =Integer.parseInt(queryParams.get("curPage").toString()); + } + queryParams.put("appId", appId); + try { + if(StringUtils.isBlank(appId)){ + result.put("resultCode", "401"); + result.put("resultMsg", "输入参数异常"); + }else{ + TPfApplication appEntity = appService.getById(appId); + if(appEntity==null){ + result.put("resultCode", "401"); + result.put("resultMsg", "应用ID错误"); + }else{ + RoleRestList = roleServiceImpl.getAppRole(queryParams,curPage,curPageSize); + result.put("resultCode", RESULT_CODE_SUCCESS_CODE); + result.put("pageNum", RoleRestList.getCurrent()); + result.put("pageSize", RoleRestList.getSize()); + result.put("total", RoleRestList.getTotal()); + result.put("pages", RoleRestList.getPages()); + result.put("resultMsg", "处理成功"); + result.put("result", RoleRestList.getRecords()); + } + } + } catch (Exception e) { + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "系统内部异常"); + e.printStackTrace(); + } + return result; + } + + /** + * 成员管理 + * 角色里面有的成员(用户) + */ + @RequestMapping(value = "/{roleId}/users",produces = "application/json;charset=UTF-8",method = RequestMethod.GET) + @ResponseBody + @CrossOrigin + public Map listRoleUser(@PathVariable("roleId")String roleId, + String companyId,String deptId,String orgId, + Integer curPage,Integer curPageSize,HttpServletRequest request,HttpServletResponse response) { + String appId = UserUtils.getTenantId(); + Map < String , Object > result = new HashMap< String , Object>(); + Page RoleUserRestList = null; + if(curPageSize==null){ + curPageSize =10; + } + if(curPage==null){ + curPage =1; + } + try { + if(StringUtils.isBlank(appId)){ + result.put("resultCode", "401"); + result.put("resultMsg", "输入参数异常"); + }else{ + TPfApplication app = appService.getById(appId); + TPfRole role = roleServiceImpl.getById(roleId); + if(app==null){ + result.put("resultCode", "401"); + result.put("resultMsg", "应用ID错误"); + }else if(role==null){ + result.put("resultCode", "401"); + result.put("resultMsg", "角色ID错误"); + }else{ + RoleUserRestList = pubUserService.getAppRoleUser(appId,roleId,companyId,deptId,orgId,curPage,curPageSize); + result.put("resultCode", RESULT_CODE_SUCCESS_CODE); + result.put("pageNum", RoleUserRestList.getCurrent()); + result.put("pageSize", RoleUserRestList.getSize()); + result.put("total", RoleUserRestList.getTotal()); + result.put("pages", RoleUserRestList.getPages()); + result.put("resultMsg", "处理成功"); + result.put("result", RoleUserRestList.getRecords()); + } + } + } catch (Exception e) { + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "系统内部异常"); + e.printStackTrace(); + } + return result; + } + + /** + * 获取用户租户下面所有角色(区分租户) + * @param appId + * @param userId + * @param request + * @param response + * @return + */ + @RequestMapping(value = "/user/{userId}/roles",produces = "application/json;charset=UTF-8",method = RequestMethod.GET) + @ResponseBody + @CrossOrigin + public Map listUserRole(@PathVariable("userId")String userId, + HttpServletRequest request,HttpServletResponse response) { + String appId = UserUtils.getTenantId(); + Map < String , Object > result = new HashMap< String , Object>(); + try { + if(StringUtils.isBlank(appId) || StringUtils.isBlank(userId)){ + result.put("resultCode", "401"); + result.put("resultMsg", "输入参数异常"); + }else{ + TPfApplication app = appService.getById(appId); + TucStaffEntity user = pubUserService.getStaffByStaffId(userId); + if(app==null){ + result.put("resultCode", "401"); + result.put("resultMsg", "应用ID错误"); + }else if(user==null){ + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "用户ID错误"); + }else{ + List roleEntryList = roleServiceImpl.findRolesByUser(appId, userId); + result.put("resultCode", RESULT_CODE_SUCCESS_CODE); + result.put("resultMsg", "处理成功"); + result.put("result", roleEntryList); + } + } + } catch (Exception e) { + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "系统内部异常"); + e.printStackTrace(); + } + return result; + } + + /** + * + * 根据角色返回对应资源 + **/ + @RequestMapping(value = "/{roleId}/resource",produces = "application/json;charset=UTF-8",method = RequestMethod.GET) + @ResponseBody + @CrossOrigin + public Map listRoleMenu(@PathVariable("roleId") String roleId,HttpServletRequest request,HttpServletResponse response){ + String appId = UserUtils.getTenantId(); + List menuEntity = null; + Map < String , Object > result = new HashMap< String , Object>(); + try { + + if(StringUtils.isBlank(roleId)){ + result.put("resultCode", "401"); + result.put("resultMsg", "输入参数异常"); + }else{ + int rolecount = roleServiceImpl.findAppidByRoleId( appId,roleId); + if(rolecount <= 0){ + result.put("resultCode", "401"); + result.put("resultMsg", "查无此角色!"); + }else{ + menuEntity = menuServiceImpl.listRoleMenu(roleId,appId); + result.put("resultMsg", "处理成功"); + result.put("resultCode", RESULT_CODE_SUCCESS_CODE); + result.put("result", menuEntity); + } + } + } catch (Exception e) { + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "系统内部异常"); + e.printStackTrace(); + } + return result; + } + + + + /** + * 根据角色ID、用户ID判断用户是否属于该角色 + * gaoch + * 2019年4月29日 + */ + @RequestMapping(value = "/{roleId}/users/{userId}",method = RequestMethod.GET,produces = "application/json;charset=UTF-8") + @ResponseBody + @CrossOrigin + public Map findRoleUserBy(@PathVariable("roleId") String roleId, + @PathVariable("userId") String userId, + HttpServletRequest request,HttpServletResponse response) { + String appId = UserUtils.getTenantId(); + Map < String , Object > result = new HashMap< String , Object>(); + Map < String , Object > queryParams = new HashMap< String , Object>(); + List roleEntryList = null; + boolean isRole=false; + try { + if(StringUtils.isBlank(appId)){ + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "appId不能为空"); + }else if(StringUtils.isBlank(roleId)) { + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "roleId不能为空"); + }else if(StringUtils.isBlank(userId)) { + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "userId不能为空"); + }else{ + TPfApplication app = appService.getById(appId); + int role = roleServiceImpl.findAppidByRoleId(appId,roleId); + TucStaffEntity user = pubUserService.getStaffByStaffId(userId); + if(app==null){ + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "应用ID错误"); + }else if(role==0){ + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "角色ID错误"); + }else if(user == null) { + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "用户ID错误"); + }else{ + queryParams.put("appId", appId); + queryParams.put("roleId", roleId); + queryParams.put("userId", userId); + roleEntryList = roleServiceImpl.findRoleUserBy(queryParams); + if(roleEntryList.size()>0) { + isRole=true; + } + result.put("resultCode", RESULT_CODE_SUCCESS_CODE); + result.put("resultMsg", "处理成功"); + result.put("result", isRole); + } + } + } catch (Exception e) { + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "系统内部异常"); + e.printStackTrace(); + } + return result; + } + + /** + * 角色新增用户 + **/ + @Log(busiType = "角色新增用户", opType = SAVE, type = "render") + @RequestMapping(value = "/user",method = RequestMethod.POST,produces = "application/json;charset=UTF-8") + @ResponseBody + @CrossOrigin + public Map saveUser(@RequestBody RoleEntity model) { + Map < String , Object > result = new HashMap< String , Object>(); + if(StringUtils.isBlank(model.getRoleId())) { + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "角色ID不能为空"); + }else if(StringUtils.isBlank(model.getAppId())) { + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "应用ID不能为空"); + }else { + int role = roleServiceImpl.findAppidByRoleId(model.getAppId(),model.getRoleId()); + TPfApplication app = appService.getById(model.getAppId()); + if(role<0) { + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "角色ID错误"); + }else if(app==null) { + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "应用ID错误"); + }else { + try { + String[] userIds = model.getUserId(); + if (userIds.length > 0) { + for (int i = 0; i < userIds.length; i++) { + TucStaffEntity pubUser = pubUserService.getStaffByStaffId(userIds[i]); + int cout = roleServiceImpl.findUserId(model.getAppId(), model.getRoleId(), userIds[i]); + if (pubUser != null && cout == 0) { + Role2userEntity role2user = new Role2userEntity(); + role2user.setRoleId(model.getRoleId()); + role2user.setUserId(userIds[i]); + role2user.setStatus("Y"); + role2user.setCreatorId("czadmin"); + role2user.setUpdatorId("czadmin"); + role2user.setOrgId(pubUser.getOrgId()); + role2user.setOrgName(pubUser.getOrgName()); + role2user.setTitleId(null); + role2user.setCreateDate(new Date()); + role2user.setUpdateDate(new Date()); + role2user.setAppId(model.getAppId()); + roleServiceImpl.saveUser(role2user); + } + result.put("resultCode", RESULT_CODE_SUCCESS_CODE); + result.put("resultMsg", "处理成功"); + result.put("result", "true"); + } + } + } catch (Exception e) { + result.put("resultCode", RESULT_SERVER_ERR_CODE); + result.put("resultMsg", "处理失败" +e.getMessage()); + result.put("result", "false"); + e.printStackTrace(); + } + } + } + return result; + } + + /** + * 角色删除用户 + **/ + @Log(busiType = "角色删除用户", opType = DELETE, type = "render") + @RequestMapping(value = "/user",method = RequestMethod.DELETE,produces = "application/json;charset=UTF-8") + @ResponseBody + @CrossOrigin + public Map deleteUser(@RequestBody RoleEntity model) { + Map < String , Object > result = new HashMap< String , Object>(); + if(StringUtils.isBlank(model.getRoleId())) { + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "角色ID不能为空"); + }else if(StringUtils.isBlank(model.getAppId())) { + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "应用ID不能为空"); + }else { + int role = roleServiceImpl.findAppidByRoleId(model.getAppId(),model.getRoleId()); + TPfApplication app = appService.getById(model.getAppId()); + if(role<0) { + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "角色ID错误"); + }else if(app==null) { + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "应用ID错误"); + }else { + try { + String[] userIds = model.getUserId(); + if(userIds.length>0) { + for(int i=0;i> getOperationButton (@PathVariable String userId, @PathVariable String menuCode){ + String appId = UserUtils.getTenantId(); + Map rs = menuServiceImpl.getButton(appId, userId, menuCode); + return R.ok(rs); + } + + /** + * 获取用户下面所有角色(不区分租户) + * @param userId + * @param request + * @param response + * @return + */ + @RequestMapping(value = "/user/{userId}/rolesNoAppId",produces = "application/json;charset=UTF-8",method = RequestMethod.GET) + @ResponseBody + @CrossOrigin + public Map listRoleByUser( + @PathVariable("userId")String userId, + HttpServletRequest request,HttpServletResponse response) + { + Map < String , Object > result = new HashMap< String , Object>(); + try { + if(StringUtils.isBlank(userId)){ + result.put("resultCode", "401"); + result.put("resultMsg", "输入参数异常"); + }else{ + TucStaffEntity user = pubUserService.getStaffByStaffId(userId); + if(user==null){ + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "用户ID错误"); + }else{ + List roleEntryList = roleServiceImpl.findRoleTenantidByUserid(userId); + result.put("resultCode", RESULT_CODE_SUCCESS_CODE); + result.put("resultMsg", "处理成功"); + result.put("result", roleEntryList); + } + } + } catch (Exception e) { + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "系统内部异常"); + e.printStackTrace(); + } + return result; + } + + /** + * 成员管理200200728 add + * 角色里面有的成员(用户) + */ + @RequestMapping(value = "/{roleId}/userlist",produces = "application/json;charset=UTF-8",method = RequestMethod.GET) + @ResponseBody + @CrossOrigin + public Map listRoleUserlist(@PathVariable("roleId")String roleId, + String companyId,String deptId,String orgId, + HttpServletRequest request,HttpServletResponse response) + { + String appId = UserUtils.getTenantId(); + Map result = new HashMap(); + try { + if(StringUtils.isBlank(appId)){ + result.put("resultCode", "401"); + result.put("resultMsg", "输入参数异常"); + }else{ + TPfApplication app = appService.getById(appId); + int rolecount = roleServiceImpl.findAppidByRoleId(appId, roleId); + if(app==null){ + result.put("resultCode", "401"); + result.put("resultMsg", "应用ID错误"); + }else if(rolecount == 0){ + result.put("resultCode", "401"); + result.put("resultMsg", "角色ID错误"); + }else{ + List userlist =pubUserService.getAppRoleUserList(appId,roleId,companyId,deptId,orgId); + result.put("resultCode", RESULT_CODE_SUCCESS_CODE); + result.put("resultMsg", "处理成功"); + result.put("result", userlist); + } + } + } catch (Exception e) { + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "系统内部异常"); + e.printStackTrace(); + } + return result; + } + //租户id:用户编码 -> List<角色redisKey(租户id:角色id)> + @ApiOperation(value = "加载租户id:角色id对应List<租户id:菜单类型type:菜单id>的redis数据") + @GetMapping("/initRoleId") + public R initRoleId(){ + sysRedisService.initRole(); + return R.ok(); + } + + // 6.0.0 多租户多岗位 + + @ApiVersion(groups = Version.SIX) + @ApiOperation(value = "根据应用ID、员工岗位id查询有权限访问的菜单列表资源", notes = "根据应用ID、员工岗位id查询有权限访问的菜单列表资源") + @GetMapping("/auth/{postCode}/menuResource") + public Map listMenuByUser(@PathVariable("postCode") String postCode, + String menuType,String menuId) { + Map result = new HashMap<>(); + String appId = UserUtils.getTenantId(); + if(StringUtils.isBlank(appId)||StringUtils.isBlank(postCode)){ + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "输入参数异常"); + }else{ + Long userCount = pubUserService.selectUserCount(postCode); + TPfApplication appEntity = appService.getById(appId); + if(userCount<= 0){ + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "用户ID错误"); + }else if(appEntity==null){ + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "应用ID错误"); + }else{ + List menuEntryList = menuServiceImpl.getMenuByPostCode(appId, postCode, menuType,menuId); + result.put("resultCode", RESULT_CODE_SUCCESS_CODE); + result.put("resultMsg", "处理成功"); + result.put("result", menuEntryList); + } + } + return result; + } + + @ApiVersion(groups = Version.SIX) + @ApiOperation("根据菜单ID、员工ID查询有权限访问的菜单列表资源") + @GetMapping("/auth/{postCode}/menuResource/{menuCode}") + public Map listMenuByCode(@PathVariable("menuCode") String menuCode, + @PathVariable("postCode") String postCode,String menuType){ + String appId = UserUtils.getTenantId(); + Map result = new HashMap<>(); + if(menuType==null) { + menuType = "button"; + }else if("all".equals(menuType)) { + menuType = ""; + } + Long userCount = pubUserService.selectUserCount(postCode); + if(userCount <= 0){ + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "用户ID错误"); + }else{ + List menuEntryList = menuServiceImpl.getMenuBuCode(menuCode, postCode,appId,menuType); + result.put("resultCode", RESULT_CODE_SUCCESS_CODE); + result.put("resultMsg", "处理成功"); + result.put("result", menuEntryList); + } + return result; + } + + @ApiVersion(groups = Version.SIX) + @ApiOperation("获取用户租户下面所有角色(区分租户)") + @GetMapping("/user/{postCode}/rolesByCode") + @CrossOrigin + public Map listUserRoleByCode(@PathVariable("postCode")String postCode) { + String appId = UserUtils.getTenantId(); + Map result = new HashMap<>(); + if(StringUtils.isBlank(appId) || StringUtils.isBlank(postCode)){ + result.put("resultCode", "401"); + result.put("resultMsg", "输入参数异常"); + }else{ + TPfApplication app = appService.getById(appId); + Long userCount = pubUserService.selectUserCount(postCode); + if(app==null){ + result.put("resultCode", "401"); + result.put("resultMsg", "应用ID错误"); + }else if(userCount <= 0){ + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "用户ID错误"); + }else{ + List roleEntryList = roleServiceImpl.findRolesByPostCode(appId, postCode); + result.put("resultCode", RESULT_CODE_SUCCESS_CODE); + result.put("resultMsg", "处理成功"); + result.put("result", roleEntryList); + } + } + return result; + } + + @ApiVersion(groups = Version.SIX) + @ApiOperation("根据角色ID、用户岗位ID判断用户是否属于该角色") + @GetMapping("/usersByCode/{roleId}/{postCode}") + @CrossOrigin + public Map findRoleUserByCode(@PathVariable("roleId") String roleId, + @PathVariable("postCode") String postCode) { + String appId = UserUtils.getTenantId(); + Map result = new HashMap<>(); + if(StringUtils.isBlank(appId)){ + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "appId不能为空"); + }else if(StringUtils.isBlank(roleId)) { + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "roleId不能为空"); + }else if(StringUtils.isBlank(postCode)) { + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "postCode不能为空"); + }else{ + TPfApplication app = appService.getById(appId); + int role = roleServiceImpl.findAppidByRoleId(appId,roleId); + Long user = pubUserService.selectUserCount(postCode); + if(app==null){ + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "应用ID错误"); + }else if(role==0){ + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "角色ID错误"); + }else if(user <= 0) { + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "用户ID错误"); + }else{ + boolean isRole=false; + Long count = iRole2userService.selectRoleUserByCode(appId, roleId, postCode); + if(count > 0) { + isRole=true; + } + result.put("resultCode", RESULT_CODE_SUCCESS_CODE); + result.put("resultMsg", "处理成功"); + result.put("result", isRole); + } + } + return result; + } + + @ApiVersion(groups = Version.SIX) + @Log(busiType = "角色新增用户", opType = SAVE, type = "render") + @ApiOperation("角色新增用户") + @PostMapping("/user/new") + @CrossOrigin + public Map saveUserNew(@RequestBody RoleEntity model) { + Map result = new HashMap<>(); + if(StringUtils.isBlank(model.getRoleId())) { + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "角色ID不能为空"); + }else if(StringUtils.isBlank(model.getAppId())) { + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "应用ID不能为空"); + }else { + int role = roleServiceImpl.findAppidByRoleId(model.getAppId(),model.getRoleId()); + TPfApplication app = appService.getById(model.getAppId()); + if(role<0) { + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "角色ID错误"); + }else if(app==null) { + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "应用ID错误"); + }else { + String[] postCodes = model.getPostCodes(); + if (postCodes.length > 0) { + for (String postCode : postCodes) { + TucStaffEntity pubUser = pubUserService.getStaffByPostCode(postCode); + Long count = iRole2userService.selectRoleUserByCode(model.getAppId(), model.getRoleId(), postCode); + if (pubUser != null && count <= 0) { + Role2userEntity role2user = new Role2userEntity(); + role2user.setRoleId(model.getRoleId()); + role2user.setUserId(pubUser.getStaffCode()); + role2user.setStatus("Y"); + role2user.setCreatorId("czadmin"); + role2user.setUpdatorId("czadmin"); + role2user.setOrgId(pubUser.getOrgId()); + role2user.setOrgName(pubUser.getOrgName()); + role2user.setTitleId(null); + role2user.setCreateDate(new Date()); + role2user.setUpdateDate(new Date()); + role2user.setAppId(model.getAppId()); + role2user.setStaffPostCode(postCode); + roleServiceImpl.saveUser(role2user); + } + result.put("resultCode", RESULT_CODE_SUCCESS_CODE); + result.put("resultMsg", "处理成功"); + result.put("result", "true"); + } + } + } + } + return result; + } + + @ApiVersion(groups = Version.SIX) + @ApiOperation("获取用户下面所有角色(不区分租户)") + @GetMapping("/user/{postCode}/rolesByCodeNoAppId") + @CrossOrigin + public Map listUserRole(@PathVariable("postCode")String postCode) + { + Map result = new HashMap(); + if (StringUtils.isBlank(postCode)) { + result.put("resultCode", "401"); + result.put("resultMsg", "输入参数异常"); + } else { + Long user = pubUserService.selectUserCount(postCode); + if (user <= 0) { + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "用户ID错误"); + } else { + List roleEntryList = roleServiceImpl.findRoleAllByPostCode(postCode); + result.put("resultCode", RESULT_CODE_SUCCESS_CODE); + result.put("resultMsg", "处理成功"); + result.put("result", roleEntryList); + } + } + return result; + } + + + @Log(busiType = "角色删除用户", opType = DELETE, type = "render") + @ApiVersion(groups = Version.SIX) + @DeleteMapping("/user/new") + @CrossOrigin + public Map deleteUserByCode(@RequestBody RoleEntity model) { + Map < String , Object > result = new HashMap< String , Object>(); + if(StringUtils.isBlank(model.getRoleId())) { + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "角色ID不能为空"); + }else if(StringUtils.isBlank(model.getAppId())) { + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "应用ID不能为空"); + }else { + int role = roleServiceImpl.findAppidByRoleId(model.getAppId(),model.getRoleId()); + TPfApplication app = appService.getById(model.getAppId()); + if(role<0) { + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "角色ID错误"); + }else if(app==null) { + result.put("resultCode", RESULT_CODE_ERROR_CODE); + result.put("resultMsg", "应用ID错误"); + }else { + String[] postCodes = model.getPostCodes(); + if (ObjectUtil.isNotEmpty(postCodes)) { + for (String code : postCodes) { + TucStaffEntity pubUser = pubUserService.getStaffByPostCode(code); + if(pubUser!=null) { + roleServiceImpl.deleteByPostCode(model.getAppId(),model.getRoleId(),code); + } + result.put("resultCode", RESULT_CODE_SUCCESS_CODE); + result.put("resultMsg", "处理成功"); + result.put("result", "true"); + } + } + } + } + return result; + } + + @ApiVersion(groups = Version.SIX) + @ApiOperation("获取按钮资源") + @GetMapping("/operation/buttonByCode/{postCode}/{menuCode}") + @CrossOrigin + public R> getOperationButtonByCode (@PathVariable String postCode, + @PathVariable String menuCode){ + String appId = UserUtils.getTenantId(); + Map rs = menuServiceImpl.getButtonByCode(appId, postCode, menuCode); + return R.ok(rs); + } + +} + + + diff --git a/usm-render/src/main/java/com/blueland/render/rest/StaffRest.java b/usm-render/src/main/java/com/blueland/render/rest/StaffRest.java new file mode 100644 index 0000000..57403b2 --- /dev/null +++ b/usm-render/src/main/java/com/blueland/render/rest/StaffRest.java @@ -0,0 +1,576 @@ +package com.blueland.render.rest; + + +/** + * @author 代码自动生成工具 + * @version 1.0 + * @since + */ + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.druid.util.StringUtils; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.blueland.annotation.ApiVersion; +import com.blueland.annotation.Log; +import com.blueland.bo.Org; +import com.blueland.bo.TreeEntity; +import com.blueland.bo.TucStaffEntity; +import com.blueland.bo.UpdatephtotEntity; +import com.blueland.constant.RedisConstant; +import com.blueland.core.util.UserUtils; +import com.blueland.dao.StaffDao; +import com.blueland.enums.Version; +import com.blueland.model.TUcOrg; +import com.blueland.model.TUcStaff; +import com.blueland.result.R; +import com.blueland.service.ITucOrgService; +import com.blueland.service.ITucStaffService; +import com.blueland.service.SysRedisService; +import com.blueland.vo.StaffPostVO; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +import static com.blueland.constant.CommonConstant.*; +import static com.blueland.constant.ResponseConstant.*; + + +@Slf4j +@RestController +@RequestMapping(value = "/staff") +public class StaffRest { + @Autowired + private ITucStaffService tucStaffServiceImpl; + @Autowired + private ITucOrgService tucOrgServiceImpl; + + @Autowired + private SysRedisService sysRedisService; + + @Resource + StaffDao staffDao; + + /** + * 搜索对象 + **/ + @ApiOperation(value = "分页查询员工", notes = "分页查询员工") + @RequestMapping(value = "", method = RequestMethod.GET, produces = "application/json;charset=UTF-8") + @ResponseBody + public R> list(TucStaffEntity tucStaffEntity) { + Page page = this.tucStaffServiceImpl.findPage(tucStaffEntity); + return R.ok(page); + } + + + /** + * 搜索对象 + **/ + @ApiOperation(value = "不分页查询员工", notes = "不分页查询员工") + @RequestMapping(value = "/findlist", method = RequestMethod.GET, produces = "application/json;charset=UTF-8") + @ResponseBody + public R> findlist(TucStaffEntity tucStaffEntity) { + String appId = UserUtils.getTenantId(); + tucStaffEntity.setAppId(appId); + List page = this.tucStaffServiceImpl.findList(tucStaffEntity); + return R.ok(page); + } + + /** + * 查看对象 + **/ + @ApiOperation(value = "根据staffId查询员工", notes = "根据staffId查询员工") + @RequestMapping(value = "/{staffId}", method = RequestMethod.GET, produces = "application/json;charset=UTF-8") + @ResponseBody + public R view(@PathVariable String staffId) { + TUcStaff tucStaffEntity = tucStaffServiceImpl.getById(staffId); + return R.ok(tucStaffEntity); + } + + /** + * 查看对象(支持多条件查询) + **/ + @ApiOperation(value = "查看员工(支持多条件查询)", notes = "查看员工(支持多条件查询)") + @RequestMapping(value = "get", method = RequestMethod.GET, produces = "application/json;charset=UTF-8") + @ResponseBody + public R get(TucStaffEntity model) { + + TUcStaff tucStaffEntity = tucStaffServiceImpl.get(model); + return R.ok(tucStaffEntity); + } + + /** + * 根据多个staffCode查询用户信息 + **/ + @ApiOperation(value = "根据codes查询员工", notes = "根据codes查询员工") + @RequestMapping(value = "/getListByCodes", method = RequestMethod.POST, produces = "application/json;charset=UTF-8") + @ResponseBody + public R> getListByCodes(@RequestBody List codes) { + List list = tucStaffServiceImpl.getListByCodes(codes); + return R.ok(list); + } + + /** + * 新增对象 + **/ + @ApiOperation(value = "新增员工", notes = "新增员工") + @RequestMapping(value = "", method = RequestMethod.POST, produces = "application/json;charset=UTF-8") + @ResponseBody + public R save(@RequestBody TucStaffEntity model) { + if (ObjectUtil.isEmpty(model.getDeptId())) { + throw new RuntimeException("部门ID不能为空"); + } + List addList = tucStaffServiceImpl.handleStaff(model); + if (ObjectUtil.isNotEmpty(addList)) { + for (TUcStaff staff : addList) { + staffDao.insert(staff); + } + // 更新缓存 + sysRedisService.flushStaff(addList); + } + return R.ok(model, "成功"); + } + + /** + * 批量新增对象 + **/ + @ApiOperation(value = "批量新增员工", notes = "批量新增员工") + @RequestMapping(value = "/batch", method = RequestMethod.POST, produces = "application/json;charset=UTF-8") + @ResponseBody + public R batchSave(@RequestBody List model) { + for (TucStaffEntity staffEntity : model) { + if (ObjectUtil.isEmpty(staffEntity.getDeptId())) { + throw new RuntimeException("部门ID不能为空"); + } + List addList = tucStaffServiceImpl.handleStaff(staffEntity); + if (ObjectUtil.isNotEmpty(addList)) { + for (TUcStaff staff : addList) { + staffDao.insert(staff); + } + } + // 更新缓存 + sysRedisService.flushStaff(addList); + } + return R.ok(); + } + + + /** + * 更新对象 + * + * @return + **/ + @ApiOperation(value = "修改员工", notes = "修改员工") + @RequestMapping(value = "", method = RequestMethod.PUT, produces = "application/json;charset=UTF-8") + @ResponseBody + public R update(@RequestBody TucStaffEntity model) { + TUcStaff old = tucStaffServiceImpl.getById(model.getStaffId()); + if (ObjectUtil.isEmpty(old)) { + throw new RuntimeException("员工信息错误"); + } + if (!Objects.equals(old.getDeptId(), model.getDeptId())) { + List addList = tucStaffServiceImpl.handleStaff(model); + if (ObjectUtil.isNotEmpty(addList)) { + for (TUcStaff staff : addList) { + if (tucStaffServiceImpl.countStaffByNum(staff.getStaffId(), staff.getAppId()) > 0) { + // 更新 + if (ObjectUtil.isNotEmpty(staff.getStaffBirthday())) { + model.setStaffBirthday(DateUtil.format(staff.getStaffBirthday(), "yyyy-MM-dd")); + tucStaffServiceImpl.updateByNum(model); + } + } else { + // 新增 + staffDao.insert(staff); + } + } + // 更新缓存 + sysRedisService.flushStaff(addList); + } + } else { + TUcStaff staff = BeanUtil.copyProperties(model, TUcStaff.class); + staffDao.updateById(staff); + // 更新缓存 + sysRedisService.saveOrUpdateStaff(model); + } + return R.ok(true, "成功"); + } + + /** + * 更新对象 + * + * @return + **/ + @ApiOperation(value = "根据staffcode修改员工", notes = "根据staffcode修改员工") + @RequestMapping(value = "/update/code", method = RequestMethod.PUT, produces = "application/json;charset=UTF-8") + @ResponseBody + public R updateByCode(@RequestBody TucStaffEntity model) { +// List addList = tucStaffServiceImpl.handleStaff(model); +// if (ObjectUtil.isNotEmpty(addList)) { +// for (TUcStaff staff : addList) { +// if (tucStaffServiceImpl.countStaffByNum(staff.getStaffNum(), staff.getAppId()) > 0) { +// // 更新 +//// TUcStaff s = BeanUtil.copyProperties(staff, TUcStaff.class); +// model.setStaffBirthday(DateUtil.format(staff.getStaffBirthday(), "yyyy-MM-dd")); +// tucStaffServiceImpl.updateByNum(model); +// } else { +// // 新增 +// staffDao.insert(staff); +// } +// } +// // 更新缓存 +// sysRedisService.flushStaff(addList); +// } + if(ObjectUtil.isNotEmpty(model.getStaffBirthday())) { + Date date = new Date(Long.valueOf(model.getStaffBirthday())); + model.setStaffBirthday(DateUtil.format(date, "yyyy-MM-dd")); + } + tucStaffServiceImpl.updateByNum(model); + // 更新缓存 + sysRedisService.saveOrUpdateStaff(model); + return R.ok(true, "成功"); + } + + /** + * 20210202 add + * 批量更新员工上级工号(用于初始化员工上级人工号即staffFax字段) + * + * @return + **/ + @ApiOperation(value = "根据staffcode批量修改员工上级人工号", notes = "根据staffcode批量修改员工上级人工号") + @RequestMapping(value = "/batchupdate/staffFax", method = RequestMethod.PUT, produces = "application/json;charset=UTF-8") + @ResponseBody + public R> batchupdateStaffFax(@RequestBody List stafflist) { + if (null != stafflist && stafflist.size() > 0) { + tucStaffServiceImpl.batchupdateStaffFax(stafflist); + } + return R.ok(stafflist); + } + + /** + * 删除对象 + * + * @return + **/ + @ApiOperation(value = "根据staffId删除员工", notes = "根据staffId删除员工") + @RequestMapping(value = "/{staffId}", method = RequestMethod.DELETE, produces = "application/json;charset=UTF-8") + @ResponseBody + public R delete(@PathVariable String staffId) { + TUcStaff staff = staffDao.selectById(staffId); + staffDao.deleteById(staffId); + // 更新缓存 + sysRedisService.removeStaff(staff.getAppId(), staff.getStaffPostCode()); + return R.ok(); + } + + /** + * 删除对象 + * + * @return + **/ + @ApiOperation(value = "根据staffCode删除员工", notes = "根据staffCode删除员工") + @RequestMapping(value = "/delete/code/{staffCode}", method = RequestMethod.DELETE, produces = "application/json;charset=UTF-8") + @ResponseBody + public R deleteByCode(@PathVariable String staffCode) { + tucStaffServiceImpl.deleteBycode(staffCode); + List staffs = tucStaffServiceImpl.getByStaffCode(staffCode); + if (ObjectUtil.isNotEmpty(staffs)) { + for (TUcStaff staff : staffs) { + // 更新缓存 + sysRedisService.removeStaff(staff.getAppId(), staff.getStaffPostCode()); + } + } + return R.ok(); + } + + /** + * 组织下的所有用户-内部抵用 + **/ + @ApiOperation(value = "查询组织下的所有的员工", notes = "查询组织下的所有的员工") + @RequestMapping(value = "/substaffs", method = RequestMethod.POST, produces = "application/json;charset=UTF-8") + @ResponseBody + public Page subStaffs(@RequestBody TucStaffEntity staff) { + if (StringUtils.isEmpty(staff.getStaffType())) { + throw new RuntimeException("非法参数"); + } + boolean flag = false; + + if (ObjectUtil.isNotEmpty(staff.getOrgId())) { + //查询是否是顶级组织,如果是,用mysql函数递归肯定会丢失数据,所以这里就需要直接查询全部 + //获取组织顶级节点 + List topOrgList = tucOrgServiceImpl.getTopOrg(staff.getStaffType()); + for (Org org : topOrgList) { + if (staff.getOrgId().equals(org.getOrgId())) { + flag = true; + break; + } + } + if (flag) {//这里为什么不用sub_staff_type,因为暂时没有维护好这个字段,所以用org_sub_type字段 +// TUcOrg org = tucOrgServiceImpl.getById(staff.getOrgId()); + Page pageInfo = tucStaffServiceImpl.getStaffInfoByOrgTop(staff); + return pageInfo; + } + } + Page pageInfo = null; + if (staff.getOrgId().contains(",")) { + pageInfo = this.tucStaffServiceImpl.getStaffByOrgs(staff); + } else { + pageInfo = this.tucStaffServiceImpl.getSubStaffs(staff); + } + + return pageInfo; + + } + + /** + * 根据staffCode获取员工 + **/ + @ApiOperation(value = "根据ivuser获取员工", notes = "根据ivuser获取员工") + @RequestMapping(value = "/ivuser/{staffCode}", method = RequestMethod.GET, produces = "application/json;charset=UTF-8") + @ResponseBody + public R getByStaffId(@PathVariable String staffCode, + @RequestHeader(value = "iv-user", required = false) String ivUser) { + String params = ""; + if (!StringUtils.isEmpty(ivUser)) { + params = ivUser; + } else if (!StringUtils.isEmpty(staffCode)) { + params = staffCode; + } + TucStaffEntity tucStaffEntity = tucStaffServiceImpl.getStaffByStaffId(params); + return R.ok(tucStaffEntity); + } + + /** + * 功能描述:选择组件搜索人员(组件专用,勿动) + * + * @param: [tucStaffEntity] + * @return: com.blueland.framework.model.ServiceResponse> + * @auther: lg 540923947@qq.com + * @date: 2019/5/9 11:19 + */ + @ApiOperation(value = "选择组件搜索人员", notes = "选择组件搜索人员") + @RequestMapping(value = "searchUser", method = RequestMethod.GET, produces = "application/json;charset=UTF-8") + @ResponseBody + public R> searchUser(TucStaffEntity model) { + TucStaffEntity tucStaffEntity = new TucStaffEntity(); + tucStaffEntity.setStaffStatus("QY"); + tucStaffEntity.setSortColumns("staff_sort"); + tucStaffEntity.setQueryStaff(model.getStaffName()); + tucStaffEntity.setStaffType(model.getStaffType()); + tucStaffEntity.setQueryOrgId(model.getOrgId()); + List list = this.tucStaffServiceImpl.searchUser(tucStaffEntity); + return R.ok(list); + } + + + /** + * 根据staffCode或者staffNum 更新员工设备码 + **/ + @ApiOperation(value = "/updatedevicecode", notes = "根据staffCode或者staffNum 更新员工设备码") + @RequestMapping(value = "/updatedevicecode", method = RequestMethod.GET, produces = "application/json;charset=UTF-8") + @ResponseBody + public R update( + @RequestParam(value = "staffCode", required = false) String staffCode, + @RequestParam(value = "staffNum", required = false) String staffNum, + @RequestParam(value = "devicecode", required = true) String devicecode + ) { + String msg = RESULT_CODE_SUCCESS_MSG; + int code = RESULT_CODE_SUCCESS_CODE; + TUcStaff tucStaffEntity = null; + try { + if ((StringUtils.isEmpty(staffCode) && StringUtils.isEmpty(staffNum)) + || StringUtils.isEmpty(devicecode)) { + msg = "缺少必要参数"; + code = RESULT_CODE_ERROR_CODE; + } else { + TucStaffEntity param = new TucStaffEntity(); + if (!StringUtils.isEmpty(staffCode)) { + param.setStaffCode(staffCode); + param.setStaffStatus("QY"); + tucStaffEntity = tucStaffServiceImpl.get(param); + } else { + param.setStaffNum(staffNum); + param.setStaffStatus("QY"); + tucStaffEntity = tucStaffServiceImpl.get(param); + } + if (tucStaffEntity == null) { + msg = "用户不存在或者已被禁用"; + code = RESULT_CODE_ERROR_CODE; + } else { + tucStaffEntity.setStaffPhoneBak(devicecode); + tucStaffEntity.setStaffLastupdateTime(new Date()); + tucStaffServiceImpl.updateById(tucStaffEntity); + } + } + } catch (Exception e) { + e.printStackTrace(); + msg = "系统错误," + e.getMessage(); + code = RESULT_SERVER_ERR_CODE; + } + return R.ok(tucStaffEntity); + } + + /** + * 清空设备码 + **/ + @ApiOperation(value = "/clearDevicecode", notes = "清空设备码") + @RequestMapping(value = "/clearDevicecode", method = RequestMethod.GET, produces = "application/json;charset=UTF-8") + @ResponseBody + public R update( + @RequestParam(value = "devicecode", required = true) String devicecode + ) { + String msg = RESULT_CODE_SUCCESS_MSG; + int code = RESULT_CODE_SUCCESS_CODE; + TucStaffEntity tucStaffEntity = null; + try { + if (StringUtils.isEmpty(devicecode)) { + msg = "缺少必要参数"; + code = RESULT_CODE_ERROR_CODE; + } else { + tucStaffServiceImpl.updateByStaffPhoneBak(devicecode); + } + } catch (Exception e) { + e.printStackTrace(); + msg = "系统错误," + e.getMessage(); + code = RESULT_SERVER_ERR_CODE; + } + return R.ok(); + } + + /** + * 修改员工头像 + **/ + @ApiOperation(value = "/updatephoto", notes = "修改员工头像") + @RequestMapping(value = "/updatephoto", method = RequestMethod.POST, produces = "application/json;charset=UTF-8") + @ResponseBody + public R updatephoto( + @RequestBody UpdatephtotEntity updatephtotEntity + ) { + TUcStaff staff = null; + String msg = RESULT_CODE_SUCCESS_MSG; + int code = RESULT_CODE_SUCCESS_CODE; + try { + if (StringUtils.isEmpty(updatephtotEntity.getStaffEducation()) || StringUtils.isEmpty(updatephtotEntity.getStaffId())) { + msg = "缺少必要参数"; + code = RESULT_CODE_ERROR_CODE; + } else { + staff = new TUcStaff(); + staff.setStaffId(updatephtotEntity.getStaffId()); + staff.setStaffEducation(updatephtotEntity.getStaffEducation()); + staff.setStaffLastupdateTime(new Date()); + tucStaffServiceImpl.updateById(staff); + } + } catch (Exception e) { + e.printStackTrace(); + msg = "系统错误," + e.getMessage(); + code = RESULT_SERVER_ERR_CODE; + } + return R.ok(); + } + + /** + * 根据姓名查询列表 + */ + @ApiOperation(value = "/getStaffList", notes = "查询列表") + @RequestMapping(value = "/getStaffList", method = RequestMethod.GET, produces = "application/json;charset=UTF-8") + @ResponseBody + public R> getStaffList( + @RequestParam(value = "name", required = true) String name + ) { + List list = new ArrayList<>(); + if (StringUtils.isEmpty(name)) { + throw new RuntimeException("确实关键参数"); + } + list = tucStaffServiceImpl.getStaffList(name); + return R.ok(list); + } + + + @ApiOperation(value = "加载员工号对应员工信息redis数据") + @GetMapping("/initStaffNumStaff") + public R initStaffNumStaff() { + sysRedisService.initStaff(); + return R.ok(); + } + + // 6.0.0多租户多岗位版本 + + @ApiVersion(groups = Version.SIX) + @ApiOperation(value = "查询岗位信息集合") + @GetMapping("/findStaffPostList") + public List findStaffPostList() { + return tucStaffServiceImpl.findStaffPostList(); + } + + @ApiVersion(groups = Version.SIX) + @ApiOperation(value = "根据postCode删除员工", notes = "根据postCode删除员工") + @GetMapping("/delete/code/{postCode}") + public R deleteByPostCode(@PathVariable String postCode) { + tucStaffServiceImpl.deleteByPostCode(postCode); + // 更新缓存 + TucStaffEntity staff = tucStaffServiceImpl.getUserByCode(postCode); + sysRedisService.removeStaff(staff.getAppId(), staff.getStaffPostCode()); + return R.ok(); + } + + @ApiVersion(groups = Version.SIX) + @ApiOperation(value = "根据postCode获取员工", notes = "根据postCode获取员工") + @GetMapping("/postCode/{postCode}") + public R getByStaffId(@PathVariable String postCode) { + TucStaffEntity tucStaffEntity = tucStaffServiceImpl.getStaffByPostCode(postCode); + return R.ok(tucStaffEntity); + } + + @ApiVersion(groups = Version.SIX) + @ApiOperation(value = "根据postCode批量修改员工上级人工号", notes = "根据postCode批量修改员工上级人工号") + @PutMapping("/batchUpdateByPostCode/staffFax") + public R> batchUpdateFaxByPostCode(@RequestBody List stafflist) { + if (null != stafflist && stafflist.size() > 0) { + tucStaffServiceImpl.batchUpdateFaxByPostCode(stafflist); + } + return R.ok(stafflist); + } + + @ApiVersion(groups = Version.SIX) + @ApiOperation(value = "根据PostCodes查询员工", notes = "根据PostCodes查询员工") + @PostMapping("/getListByPostCodes") + public R> getListByPostCodes(@RequestBody List codes) { + List list = tucStaffServiceImpl.selectStaffByPostCodes(codes); + return R.ok(list); + } + + @ApiVersion(groups = Version.SIX) + @ApiOperation(value = "选择组件搜索人员", notes = "选择组件搜索人员") + @GetMapping("/searchUserNew") + public R> searchUserNew(TucStaffEntity model) { + TucStaffEntity tucStaffEntity = new TucStaffEntity(); + tucStaffEntity.setStaffStatus("QY"); + tucStaffEntity.setSortColumns("staff_sort"); + tucStaffEntity.setQueryOrgId(model.getOrgId()); + tucStaffEntity.setStaffPostCode(model.getStaffPostCode()); +// tucStaffEntity.setStaffPostType(model.getStaffPostType()); + List list = this.tucStaffServiceImpl.searchUser(tucStaffEntity); + return R.ok(list); + } + + @ApiVersion(groups = Version.SIX) + @ApiOperation(value = "根据岗位编码获取用户信息", notes = "根据岗位编码获取用户信息") + @GetMapping("/getUserByCode") + @CrossOrigin + public R getUserByCode(@RequestParam("code") String code) { + TucStaffEntity tucStaffEntity = tucStaffServiceImpl.getUserByCode(code); + return R.ok(tucStaffEntity); + } +} + + + diff --git a/usm-render/src/main/java/com/blueland/render/rest/SysOplogRest.java b/usm-render/src/main/java/com/blueland/render/rest/SysOplogRest.java new file mode 100644 index 0000000..4f53888 --- /dev/null +++ b/usm-render/src/main/java/com/blueland/render/rest/SysOplogRest.java @@ -0,0 +1,44 @@ +package com.blueland.render.rest; + +import javax.servlet.http.HttpServletRequest; + +import com.blueland.result.R; +import com.blueland.service.ISysOplogService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import com.blueland.core.util.LogUtil; +import com.blueland.bo.SysOplogEntity; + +import io.swagger.annotations.Api; + +@Api(value = "sysOplog") +@RestController +@RequestMapping(value = "/sysOplog") +public class SysOplogRest { + @Autowired + private ISysOplogService sysOplogService; + + /** + * 新增操作日志 + **/ + @RequestMapping(value = "",method = RequestMethod.POST,produces = "application/json;charset=UTF-8") + @ResponseBody + @CrossOrigin + public R save(HttpServletRequest request, @RequestBody SysOplogEntity model) { + LogUtil.addSysOplog4Render(request, model.getUserId(), model.getUserName(), model.getBizId(), + model.getBizType(), model.getType(), model.getContent(), + model.getStatus(), model.getAppId(), model.getRemark()); + return R.ok(model); + } + + +} + + + diff --git a/usm-render/src/main/java/com/blueland/render/rest/SysPvlogRest.java b/usm-render/src/main/java/com/blueland/render/rest/SysPvlogRest.java new file mode 100644 index 0000000..6595c87 --- /dev/null +++ b/usm-render/src/main/java/com/blueland/render/rest/SysPvlogRest.java @@ -0,0 +1,38 @@ +package com.blueland.render.rest; + + +import cn.hutool.core.bean.BeanUtil; +import com.blueland.bo.SysPvlogEntity; +import com.blueland.core.util.UserUtils; +import com.blueland.model.TPfSysPvlog; +import com.blueland.result.R; +import com.blueland.service.ISysPvlogService; +import io.swagger.annotations.Api; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + + +@Api(value = "sysPvlog") +@RestController +@RequestMapping(value = "/api/sysPvlog") +public class SysPvlogRest { + @Autowired + private ISysPvlogService sysPvlogService; + + /** + * 新增对象 + **/ + @RequestMapping(value = "save",method = RequestMethod.POST,produces = "application/json;charset=UTF-8") + @ResponseBody + @CrossOrigin + public R save(@RequestBody SysPvlogEntity model) { + TPfSysPvlog pvlog = BeanUtil.copyProperties(model, TPfSysPvlog.class); + pvlog.setAppId(UserUtils.getTenantId()); + sysPvlogService.save(pvlog); + return R.ok(model); + } + +} + + + diff --git a/usm-render/src/main/java/com/blueland/render/rest/UpdatedataRest.java b/usm-render/src/main/java/com/blueland/render/rest/UpdatedataRest.java new file mode 100644 index 0000000..48cca3b --- /dev/null +++ b/usm-render/src/main/java/com/blueland/render/rest/UpdatedataRest.java @@ -0,0 +1,47 @@ +package com.blueland.render.rest; + + +/** + * @author 代码自动生成工具 + * @version 1.0 + * @since + */ + + +import com.blueland.result.R; +import com.blueland.service.IDictService; +import com.blueland.service.SysRedisService; +import io.swagger.annotations.Api; + +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + + +@Api(value = "") +@RestController +@RequestMapping(value = "") +public class UpdatedataRest { + @Autowired + private SysRedisService sysRedisService; + + /** + * 更新字典缓存 + * @return + */ + @ApiOperation(value="WEB工程操作更新字典缓存", notes="WEB工程操作更新字典缓存") + @RequestMapping(value = "/cache/updatedict",method = RequestMethod.POST,produces = "application/json;charset=UTF-8") + @ResponseBody + public R updateDictMapCache(){ + sysRedisService.initDict(); + return R.ok(); + } + + +} + + + diff --git a/usm-render/src/main/java/com/blueland/render/rest/UsmErpController.java b/usm-render/src/main/java/com/blueland/render/rest/UsmErpController.java new file mode 100644 index 0000000..aa1fda2 --- /dev/null +++ b/usm-render/src/main/java/com/blueland/render/rest/UsmErpController.java @@ -0,0 +1,104 @@ +package com.blueland.render.rest; + + +/** + * @author usm to erp 数据查询控制器 + * @version 1.0 + * @since + */ +import cn.hutool.core.util.ObjectUtil; +import com.blueland.annotation.ApiVersion; +import com.blueland.bo.Org; +import com.blueland.bo.TucStaffEntity; +import com.blueland.constant.Constant; +import com.blueland.enums.Version; +import com.blueland.model.TPfParameter; +import com.blueland.model.TUcOrg; +import com.blueland.result.R; +import com.blueland.service.IParameterService; +import com.blueland.service.ITucOrgService; +import com.blueland.service.ITucStaffService; +import com.blueland.vo.StaffNumVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + + +@Api(value = "usm to erp 数据查询控制器") +@RestController +@RequestMapping(value = "/usmToErp") +public class UsmErpController { + + @Autowired + ITucOrgService iTucOrgService; + + @Autowired + ITucStaffService iTucStaffService; + + @Autowired + IParameterService parameterService; + + @ApiVersion(groups = Version.SIX) + @ApiOperation(value="根据部门id集合查询部门信息", notes="根据部门id集合查询部门信息") + @PostMapping("/selectOrgByDeptIds") + public R> selectOrgByDeptIds(@RequestBody List ids){ + List list = iTucOrgService.selectOrgByDeptIds(ids); + return R.ok(list); + } + + @ApiVersion(groups = Version.SIX) + @ApiOperation(value="根据部门id集合查询部门信息", notes="根据部门id集合查询部门信息") + @PostMapping("/selectOrgByErpCodes") + public R> selectOrgByErpCodes(@RequestBody List erpCodes){ + List list = iTucOrgService.selectOrgByErpCodes(erpCodes); + return R.ok(list); + } + + + @ApiVersion(groups = Version.SIX) + @ApiOperation(value="根据岗位编码集合查询工号", notes="根据岗位编码集合查询工号") + @PostMapping("/selectStaffNumByPostCodes") + public R> selectStaffNumByPostCodes(@RequestBody List postCodes){ + List list = iTucStaffService.selectStaffByPostCodes(postCodes); + return R.ok(list); + } + + @ApiVersion(groups = Version.SIX) + @ApiOperation(value="根据工号和部门id获取员工信息", notes="根据工号和部门id获取员工信息") + @GetMapping("/selectStaffByNumAndDept/{staffNum}/{deptId}") + public R selectStaffByNumAndDept(@PathVariable("staffNum") String staffNum, @PathVariable("deptId") String deptId) { + TucStaffEntity vo = iTucStaffService.selectStaffByNumAndDept(staffNum, deptId); + return R.ok(vo); + } + + @ApiVersion(groups = Version.SIX) + @ApiOperation(value="根据工号获取员工信息", notes="根据工号获取员工信息") + @GetMapping("/selectStaffByNum/{staffNum}") + public R selectStaffByNum(@PathVariable("staffNum") String staffNum) { + TucStaffEntity vo = iTucStaffService.selectStaffByNum(staffNum); + return R.ok(vo); + } + + + @ApiVersion(groups = Version.SIX) + @ApiOperation(value="根据key查询配置", notes="根据key查询配置") + @PostMapping("/selectConfigByKeys") + public R> selectConfigByKey(@RequestBody List keys) { + return R.ok(parameterService.selectConfigByKey(keys)); + } + + @ApiVersion(groups = Version.SIX) + @ApiOperation(value="根据value查询配置", notes="根据value查询配置") + @PostMapping("/selectConfigByValues") + public R> selectConfigByValue(@RequestBody List values) { + return R.ok(parameterService.selectConfigByValue(values)); + } + + +} + + + diff --git a/usm-render/src/main/resources/application-dev.yml b/usm-render/src/main/resources/application-dev.yml new file mode 100644 index 0000000..8b6826a --- /dev/null +++ b/usm-render/src/main/resources/application-dev.yml @@ -0,0 +1,67 @@ +log: + path: /appdata/logs/usm-test-render +logging: + level: + root: info +server: + compression: + enabled: true + min-response-size: 1 + connection-timeout: 5000 + port: 8081 + servlet: + context-path: /blueland-plateform-render + tomcat: + uri-encoding: UTF-8 +sharding-num: 30 +spring: + aop: + auto: true + http: + encoding: + charset: UTF-8 + enabled: true + force: true + redis: + database: 9 + host: 192.168.1.169 + jedis: + pool: + max-idle: 8 + max-wait: -1 + min-idle: 0 + password: '' + port: 6379 + timeout: 30000 + shardingsphere: + datasource: + d0: + connection-test-query: SELECT 1 + connection-timeout: 30000 + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://192.168.1.13:3306/fast_dev_pf?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8 + max-lifetime: 1200000 + max-pool-size: 64 + min-idle: 10 + max-active: 10 + password: crm@123 + type: com.alibaba.druid.pool.DruidDataSource + username: crm + names: d0 + props: + sql: + show: true + sharding: + tables: + t_pf_sys_oplog: + actual-data-nodes: d0.t_pf_sys_oplog_$->{1..12} + table-strategy: + standard: + precise-algorithm-class-name: com.blueland.config.DefaultPreciseShardingAlgorithm + sharding-column: id + t_pf_sys_pvlog: + actual-data-nodes: d0.t_pf_sys_pvlog_$->{1..12} + table-strategy: + standard: + precise-algorithm-class-name: com.blueland.config.Default2PreciseShardingAlgorithm + sharding-column: id diff --git a/usm-render/src/main/resources/application-gray.yml b/usm-render/src/main/resources/application-gray.yml new file mode 100644 index 0000000..bbac876 --- /dev/null +++ b/usm-render/src/main/resources/application-gray.yml @@ -0,0 +1,64 @@ +logging: + level: + root: ERROR +server: + compression: + enabled: true + min-response-size: 1 + connection-timeout: 5000 + port: 8080 + servlet: + context-path: /usm-render + tomcat: + uri-encoding: UTF-8 +sharding-num: 30 +spring: + aop: + auto: true + http: + encoding: + charset: UTF-8 + enabled: true + force: true + redis: + database: 7 + host: 192.168.21.31 + jedis: + pool: + max-idle: 8 + max-wait: -1 + min-idle: 0 + password: '' + port: 6379 + timeout: 30000 + shardingsphere: + datasource: + d0: + connection-test-query: SELECT 1 + connection-timeout: 30000 + driver-class-name: com.mysql.cj.jdbc.Driver + jdbc-url: jdbc:mysql://192.168.21.31:3307/usm?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8 + max-lifetime: 1200000 + max-pool-size: 64 + min-idle: 10 + password: crm@123 + type: com.zaxxer.hikari.HikariDataSource + username: crm + names: d0 + props: + sql: + show: true + sharding: + tables: + t_pf_sys_oplog: + actual-data-nodes: d0.t_pf_sys_oplog_$->{1..12} + table-strategy: + standard: + precise-algorithm-class-name: com.blueland.config.DefaultPreciseShardingAlgorithm + sharding-column: id + t_pf_sys_pvlog: + actual-data-nodes: d0.t_pf_sys_pvlog_$->{1..12} + table-strategy: + standard: + precise-algorithm-class-name: com.blueland.config.Default2PreciseShardingAlgorithm + sharding-column: id diff --git a/usm-render/src/main/resources/application-local.yml b/usm-render/src/main/resources/application-local.yml new file mode 100644 index 0000000..132ce69 --- /dev/null +++ b/usm-render/src/main/resources/application-local.yml @@ -0,0 +1,74 @@ +log: + path: ./logs/usm-render +logging: + level: + com: + blueland: ERROR + root: info +server: + compression: + enabled: true + min-response-size: 1 + connection-timeout: 5000 + port: 8083 + servlet: + context-path: /blueland-plateform-render + tomcat: + uri-encoding: UTF-8 +sharding-num: 30 +spring: + aop: + auto: true + http: + encoding: + charset: UTF-8 + enabled: true + force: true + redis: + database: 8 + host: 117.78.50.82 + jedis: + pool: + max-idle: 8 + max-wait: -1 + min-idle: 0 + password: blueland@123 + port: 16379 + timeout: 30000 + shardingsphere: + datasource: + d0: + connection-test-query: SELECT 1 + connection-timeout: 30000 + driver-class-name: com.mysql.cj.jdbc.Driver + jdbc-url: jdbc:mysql://117.78.50.82:13307/fast_dev_pf?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&zeroDateTimeBehavior=convertToNull + max-lifetime: 1200000 + max-pool-size: 64 + min-idle: 10 + password: crm@123 + type: com.zaxxer.hikari.HikariDataSource + username: crm + names: d0 + props: + sql: + show: true + sharding: + tables: + t_pf_sys_oplog: + actual-data-nodes: d0.t_pf_sys_oplog_$->{1..12} + table-strategy: + standard: + precise-algorithm-class-name: com.blueland.config.DefaultPreciseShardingAlgorithm + sharding-column: id + t_pf_sys_pvlog: + actual-data-nodes: d0.t_pf_sys_pvlog_$->{1..12} + table-strategy: + standard: + precise-algorithm-class-name: com.blueland.config.Default2PreciseShardingAlgorithm + sharding-column: id +hrapi: + apiPrefix: /blueland-plateform-render + strategy: + main-post-staff-id: staffHrId + main-post-code: staffCode + appApiPrefix: / \ No newline at end of file diff --git a/usm-render/src/main/resources/application-test.yml b/usm-render/src/main/resources/application-test.yml new file mode 100644 index 0000000..0aeba05 --- /dev/null +++ b/usm-render/src/main/resources/application-test.yml @@ -0,0 +1,66 @@ +log: + path: /appdata/logs/usm-test-render +logging: + level: + root: ERROR +server: + compression: + enabled: true + min-response-size: 1 + connection-timeout: 5000 + port: 8080 + servlet: + context-path: /blueland-plateform-render + tomcat: + uri-encoding: UTF-8 +sharding-num: 30 +spring: + aop: + auto: true + http: + encoding: + charset: UTF-8 + enabled: true + force: true + redis: + database: 8 + host: 192.168.1.168 + jedis: + pool: + max-idle: 8 + max-wait: -1 + min-idle: 0 + password: '' + port: 6379 + timeout: 30000 + shardingsphere: + datasource: + d0: + connection-test-query: SELECT 1 + connection-timeout: 30000 + driver-class-name: com.mysql.cj.jdbc.Driver + jdbc-url: jdbc:mysql://192.168.1.13:3308/fast_dev_pf?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8 + max-lifetime: 1200000 + max-pool-size: 64 + min-idle: 10 + password: crm@123 + type: com.zaxxer.hikari.HikariDataSource + username: crm + names: d0 + props: + sql: + show: true + sharding: + tables: + t_pf_sys_oplog: + actual-data-nodes: d0.t_pf_sys_oplog_$->{1..12} + table-strategy: + standard: + precise-algorithm-class-name: com.blueland.config.DefaultPreciseShardingAlgorithm + sharding-column: id + t_pf_sys_pvlog: + actual-data-nodes: d0.t_pf_sys_pvlog_$->{1..12} + table-strategy: + standard: + precise-algorithm-class-name: com.blueland.config.Default2PreciseShardingAlgorithm + sharding-column: id diff --git a/usm-render/src/main/resources/application-vazymeprod.yml b/usm-render/src/main/resources/application-vazymeprod.yml new file mode 100644 index 0000000..79fe7e2 --- /dev/null +++ b/usm-render/src/main/resources/application-vazymeprod.yml @@ -0,0 +1,65 @@ +log: + path: /appdata/logs/usm-render +logging: + level: + root: warn +server: + compression: + enabled: true + min-response-size: 1 + connection-timeout: 5000 + port: 38081 + servlet: + context-path: /blueland-plateform-render + tomcat: + uri-encoding: UTF-8 +sharding-num: 30 +spring: + aop: + auto: true + http: + encoding: + charset: UTF-8 + enabled: true + force: true + redis: + database: 8 + host: 192.168.0.52 + jedis: + pool: + max-idle: 8 + max-wait: -1 + min-idle: 0 + password: '' + port: 6378 + timeout: 10000 + shardingsphere: + datasource: + d0: + connection-timeout: 30000 + driver-class-name: com.mysql.cj.jdbc.Driver + jdbc-url: jdbc:mysql://rm-uf639ss0707unw5g6.mysql.rds.aliyuncs.com:3306/fast_dev_pf?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8 + max-lifetime: 1200000 + max-pool-size: 64 + min-idle: 10 + password: Vazyme@1234 + type: com.zaxxer.hikari.HikariDataSource + username: vazyme + names: d0 + props: + sql: + show: false + sharding: + tables: + t_pf_sys_oplog: + actual-data-nodes: d0.t_pf_sys_oplog_$->{1..12} + table-strategy: + standard: + precise-algorithm-class-name: com.blueland.config.DefaultPreciseShardingAlgorithm + sharding-column: id + t_pf_sys_pvlog: + actual-data-nodes: d0.t_pf_sys_pvlog_$->{1..12} + table-strategy: + standard: + precise-algorithm-class-name: com.blueland.config.Default2PreciseShardingAlgorithm + sharding-column: id diff --git a/usm-render/src/main/resources/application-vazymetest.yml b/usm-render/src/main/resources/application-vazymetest.yml new file mode 100644 index 0000000..51a09d1 --- /dev/null +++ b/usm-render/src/main/resources/application-vazymetest.yml @@ -0,0 +1,66 @@ +log: + path: /appdata/logs/usm-test-render +logging: + level: + root: ERROR +server: + compression: + enabled: true + min-response-size: 1 + connection-timeout: 5000 + port: 8081 + servlet: + context-path: /blueland-plateform-render + tomcat: + uri-encoding: UTF-8 +sharding-num: 30 +spring: + aop: + auto: true + http: + encoding: + charset: UTF-8 + enabled: true + force: true + redis: + database: 8 + host: 192.168.1.174 + jedis: + pool: + max-idle: 8 + max-wait: -1 + min-idle: 0 + password: blueland@123 + port: 6379 + timeout: 30000 + shardingsphere: + datasource: + d0: + connection-test-query: SELECT 1 + connection-timeout: 30000 + driver-class-name: com.mysql.cj.jdbc.Driver + jdbc-url: jdbc:mysql://192.168.1.50:3306/fast_dev_pf?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8 + max-lifetime: 1200000 + max-pool-size: 64 + min-idle: 10 + password: crm@123 + type: com.zaxxer.hikari.HikariDataSource + username: crm + names: d0 + props: + sql: + show: true + sharding: + tables: + t_pf_sys_oplog: + actual-data-nodes: d0.t_pf_sys_oplog_$->{1..12} + table-strategy: + standard: + precise-algorithm-class-name: com.blueland.config.DefaultPreciseShardingAlgorithm + sharding-column: id + t_pf_sys_pvlog: + actual-data-nodes: d0.t_pf_sys_pvlog_$->{1..12} + table-strategy: + standard: + precise-algorithm-class-name: com.blueland.config.Default2PreciseShardingAlgorithm + sharding-column: id diff --git a/usm-render/src/main/resources/application.yml b/usm-render/src/main/resources/application.yml new file mode 100644 index 0000000..7a1337a --- /dev/null +++ b/usm-render/src/main/resources/application.yml @@ -0,0 +1,64 @@ +logging: + level: + root: ERROR +management: + health: + db: + enabled: false +server: + compression: + enabled: true + min-response-size: 1 + connection-timeout: 5000 + servlet: + context-path: /blueland-plateform-render + tomcat: + uri-encoding: UTF-8 +spring: + aop: + auto: true + datasource: + druid: + driver-class: com.mysql.cj.jdbc.Driver + initial-size: 1 + max-active: 20 + min-idle: 1 + password: crm@123 + test-on-borrow: true + url: jdbc:mysql://192.168.21.31:3306/fast_dev_pf?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8 + username: crm + http: + encoding: + charset: UTF-8 + enabled: true + force: true + main: + allow-bean-definition-overriding: true + profiles: + active: dev +mybatis-plus: + mapperPackage: com.blueland.dao + mapperLocations: classpath*:com/blueland/mapper/*Mapper.xml + typeAliasesPackage: com.blueland + checkConfigLocation: false + executorType: SIMPLE + configuration: + mapUnderscoreToCamelCase: true + aggressiveLazyLoading: true + autoMappingBehavior: PARTIAL + autoMappingUnknownColumnBehavior: NONE + localCacheScope: SESSION + cacheEnabled: false + logImpl: org.apache.ibatis.logging.nologging.NoLoggingImpl + global-config: + banner: true + enableSqlRunner: false + dbConfig: + idType: AUTO + tableUnderline: true + capitalMode: false + logicDeleteValue: 2 + logicNotDeleteValue: 0 + insertStrategy: NOT_NULL + updateStrategy: NOT_NULL + where-strategy: NOT_NULL \ No newline at end of file diff --git a/usm-render/src/main/resources/logback.xml b/usm-render/src/main/resources/logback.xml new file mode 100644 index 0000000..2d00660 --- /dev/null +++ b/usm-render/src/main/resources/logback.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + ${log.pattern} + + + + + + ${log.path}/sys-info.log + + + + ${log.path}/sys-info.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + INFO + + ACCEPT + + DENY + + + + + ${log.path}/sys-error.log + + + + ${log.path}/sys-error.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + ERROR + + ACCEPT + + DENY + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/usm-render/src/main/resources/static/css/common.css b/usm-render/src/main/resources/static/css/common.css new file mode 100644 index 0000000..b62d258 --- /dev/null +++ b/usm-render/src/main/resources/static/css/common.css @@ -0,0 +1,4140 @@ +body { + font-family:arial, 'Microsoft Yahei', '微软雅黑' ; + color: #333 !important; + font-size: 14px !important; + word-wrap:break-word; + word-break:break-all; + margin: 0; + padding: 0; +} +body , div , ul, li, a, input, select, span, p, h{ + font-family:arial, 'Microsoft Yahei', '微软雅黑' !important; +} + + +.el-textarea__inner { + font-family:arial, 'Microsoft Yahei', '微软雅黑' !important; + resize:none !important; +} +.el-textarea__inner, a, body, div, h, input, li, p, select, span, ul { + font-family: arial, 'Microsoft Yahei', '微软雅黑' !important; +} +*{ + font-family: arial, 'Microsoft Yahei', '微软雅黑' !important; + outline: none; + resize:none; + word-wrap:break-word !important; + word-break:break-all !important; + } + +a { + color: #8c2d64 !important; + text-decoration: none; +} + +.header { + background: -webkit-linear-gradient(left, #6c2147, #ae3a82) !important; + background: -o-linear-gradient(left, #6c2147, #ae3a82) !important; + background: -moz-linear-gradient(left, #6c2147, #ae3a82) !important; + background: -ms-linear-gradient(left, #6c2147, #ae3a82) !important; + color: #2f3239 !important; + border-bottom:0; +} +.wrapper .header{ + position: relative; + box-sizing: border-box; + width: 100%; + height: 55px !important; + font-size: 22px; + line-height: 45px !important; + color: #fff; + background: #9d2a66 !important; +} +.wrapper .header .logo{ + float: left; + width: 300px; + font-size: 20.4px; + text-align: left; + height: 45px; + padding: 0 0 0 10px; +} +.wrapper .header .logo>img{ + margin-top:5px; +} +.header .user-info{ + float: right; + padding-right: 20px; + font-size: 16px; + color: #fff; +} +.header .user-info .el-dropdown-link{ + position: relative; + display: inline-block; + padding-left: 45px; + cursor: pointer; + vertical-align: middle; + color: #fff; + line-height: 45px; + margin: 5px 0 0 0; +} +.header .user-info .user-logo{ + position: absolute; + left:0; + top:7px !important; + width: 30px; + height:30px; + border-radius: 50%; +} + + +#app .content { + background: none repeat scroll 0 0 #fff; + position: absolute; + left: 160px !important; + right: 0; + top: 58px; + bottom: 0; + width: auto; + padding:10px; + box-sizing: border-box; + overflow-y: auto; +} + + + +.el-card .el-card__header{ + padding:2px 20px !important; + background: #f6f6f6 !important; + color: #8c2d64 !important; + font-weight: bold; +} +.el-card .el-card__body{ + padding:6px; +} +.el-card .el-card__header .clearfix .el-button { + background: none !important; + border: 1px solid transparent !important; + padding: 9px; + color: #8c2d64 !important; + font-family:arial, 'Microsoft Yahei', '微软雅黑' ; + border-radius: 2px; + font-size:14px !important; +} +.el-card .el-card__header .clearfix .el-button:hover { + border: 1px solid #8c2d64 !important; +} +.el-card .el-card__header .clearfix .el-button .el-dropdown-link{ + color: #8c2d64 !important; + font-family:arial, 'Microsoft Yahei', '微软雅黑' ; + font-size:14px !important; +} + + + +.el-breadcrumb { + font-size: 13px; + line-height: 1; + padding: 20px!important; + margin: -10px -10px 0; + background: #f6f8fb!important; + border-bottom: 1px solid #efeaea; + color: #4a4a4a; +} +.crumbs .el-breadcrumb .el-breadcrumb__item{ + color: #4a4a4a !important; +} +.crumbs .el-breadcrumb .el-breadcrumb__item .el-breadcrumb__inner{ + color: #4a4a4a !important; +} + + +.el-table { + overflow: hidden; + width: 100%; + max-width: 100%; + background-color: #fff; + border: 1px solid #dfe6ec; + font-size: 14px; + color: #333 !important; + padding:1px 0 0 0; + border-right: 1px solid #eaeaea !important; +} +.el-table th { + white-space: nowrap; + overflow: hidden; + background-color: #fff !important; + text-align: left; +} +.el-table__footer-wrapper thead div, .el-table__header-wrapper thead div { + background-color: #fff !important; + color: #1f2d3d; +} +.el-table td, .el-table th.is-leaf { + border-bottom: 1px solid #ddd !important; +} +.el-table--border td, .el-table--border th { + border-right: 1px solid #ddd !important; +} + + + +.el-button{ + font-family:arial, 'Microsoft Yahei', '微软雅黑' ; + background: none !important; + border: 1px solid transparent !important; + color: #8c2d64 !important; + border-radius:3px !important; + font-size:14px !important; +} +.el-button:hover{ + font-family:arial, 'Microsoft Yahei', '微软雅黑' ; + background: none !important; + border: 1px solid #8c2d64 !important; + color: #8c2d64 !important; + border-radius:3px !important; +} +.el-button.el-button--danger{ + color: #ff4949 !important; +} +.el-button.el-button--danger:hover{ + border: 1px solid #ff4949 !important; +} +.el-button.el-button-gray{ + font-family:arial, 'Microsoft Yahei', '微软雅黑' ; + background: #fff !important; + border: 1px solid #ddd !important; + color: #444 !important; + border-radius:3px !important; +} +.el-button.el-button-gray:hover{ + font-family:arial, 'Microsoft Yahei', '微软雅黑' ; + background: #fff !important; + border: 1px solid #8c2d64 !important; + color: #8c2d64 !important; + border-radius:3px !important; +} +.el-button.el-button-blue{ + font-family:arial, 'Microsoft Yahei', '微软雅黑' ; + background: #20a0ff !important; + border: 1px solid #20a0ff !important; + color: #fff !important; + border-radius:3px !important; +} +.el-button.el-button-blue:hover{ + font-family:arial, 'Microsoft Yahei', '微软雅黑' ; + background: #20a0ff !important; + border: 1px solid #20a0ff !important; + color: #fff !important; + border-radius:3px !important; +} + + + +.el-message-box .el-message-box__btns .el-button{ + font-family:arial, 'Microsoft Yahei', '微软雅黑' ; + background: #fff !important; + border: 1px solid #ddd !important; + color: #444 !important; + border-radius:3px !important; + font-size:14px !important; +} +.el-message-box .el-message-box__btns .el-button:hover{ + font-family:arial, 'Microsoft Yahei', '微软雅黑' ; + background: #fff !important; + border: 1px solid #8c2d64 !important; + color: #8c2d64 !important; + border-radius:3px !important; +} +.el-message-box .el-message-box__btns .el-button.el-button--primary{ + font-family:arial, 'Microsoft Yahei', '微软雅黑' ; + background: #20a0ff !important; + border: 1px solid #20a0ff !important; + color: #fff !important; + border-radius:3px !important; +} +.el-message-box .el-message-box__btns .el-button.el-button--primary:hover{ + font-family:arial, 'Microsoft Yahei', '微软雅黑' ; + background: #20a0ff !important; + border: 1px solid #20a0ff !important; + color: #fff !important; + border-radius:3px !important; +} +i{ + margin: 0 2px !important; +} +.login-wrap { + background: #dfe0e2 !important; +} +.login-wrap .ms-title[data-v-d6379896] { + font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif !important; + position: absolute; + top: 50%; + width: 100%; + margin-top: -210px; + text-align: center; + font-size: 32px; + color: #478fca !important; +} +.login-wrap .ms-login[data-v-d6379896] { + position: absolute; + left: 50%; + top: 50%; + width: 300px; + height: 160px; + margin: -150px 0 0 -190px; + padding: 40px; + border-radius: 5px; + background: #fff; + webkit-box-shadow: 0 0 2px 1px rgba(0, 0, 0, 0.12); + box-shadow: 0 0 2px 1px rgba(0, 0, 0, 0.12); + border: 1px solid #bbb; + border-bottom: 1px solid #aaa; +} + +a{ + color: #428bca; + text-decoration: none; +} +a:hover, a:focus { + color: #2a6496; + text-decoration: underline; +} +.el-card{ + margin-top: 10px !important; +} +.el-form .el-form-item { + margin-bottom: 2px; +} +.pagination { + margin: 6px 0 !important; + text-align: right; +} +.pagination .el-pagination { + white-space: nowrap; + padding: 2px 0px; + color: #48576a; +} +.crumbs .el-dropdown{ + background: none !important; + border: 1px solid #ddd !important; + padding:4px 9px ; + color: #444 !important; + font-family:arial, 'Microsoft Yahei', '微软雅黑' ; + border-radius: 2px; + font-size:14px !important; +} +.crumbs .el-dropdown .el-dropdown-link{ + color: #444 !important; + font-family:arial, 'Microsoft Yahei', '微软雅黑' ; + font-size:14px !important; +} +.crumbs .el-dropdown:hover{ + background: none !important; + border: 1px solid #8c2d64 !important; + padding:4px 9px ; + color: #8c2d64 !important; + font-family:arial, 'Microsoft Yahei', '微软雅黑' ; + border-radius: 2px; + font-size:14px !important; +} +.crumbs .el-dropdown:hover .el-dropdown-link{ + color: #8c2d64 !important; +} +.sidebar[data-v-0b4c4961] { + display: block; + position: absolute; + left: 0; + top: 46px !important; + bottom: 0; + background: #2E363F; +} + +.el-table .cell, .el-table th>div { + padding-left: 5px !important; + padding-right: 5px !important; +} + +.el-form.el-form-style .el-form-item{ + margin:0 0 20px 0 !important; +} + +.wrapper .sidebar{ + width: 160px !important; +} +.wrapper .sidebar ul.el-menu{ + background: #34485e; +} +.wrapper .sidebar ul.el-menu .el-submenu .el-menu { + background-color: #34485e; + border: none !important; +} +.wrapper .sidebar ul.el-menu .el-submenu .el-menu li { + font-size: 13px; +} +.wrapper .sidebar ul.el-menu .el-submenu .el-menu li:last-child{ + border-bottom:none; +} +.wrapper .sidebar .el-menu>li { + +} +.wrapper .sidebar .el-menu { + border-right: none; + list-style: none; + position: relative; + margin: 0; + padding-left: 0; + background-color: #fff; +} +.el-menu-item, .el-submenu__title { + color: #aaadb3 !important; + font-size:15px !important; +} +.sidebar .el-menu .el-menu-item.is-active{ + border-left: 4px solid #a72677; + color: #fff!important; + background: #2c3846!important; + padding-left: 16px!important; +} +.sidebar .el-menu li.el-menu-item.is-active:hover { + background: #2c3846 !important; +} +.sidebar .el-menu li.el-submenu.is-opened:hover{ + background:#2c3846 !important; +} +.sidebar .el-menu li .el-menu .el-menu-item.is-active{ + padding-left: 36px !important; +} +.sidebar .el-menu .el-submenu .el-menu .el-menu-item.is-active{ + padding-left: 45px !important; +} +.sidebar .el-menu .el-menu-item.is-active:after { + display: block; + content: ""; + position: absolute; + right: 0; + top: 17px; + border: 8px solid transparent; + border-width: 8px 8px; + border-right-color: #fff; +} +.el-submenu.is-opened .el-submenu__title{ + background-color: #2c3846!important; +} +.el-submenu.is-opened .el-submenu__title:hover{ + background-color: #2c3846!important; +} +/*#app .wrapper .content { + left: 180px !important; +}*/ +.el-button+.el-button { + margin-left: 2px !important; +} +.el-button { + padding: 10px 6px !important; +} +.mrxx-box { + border-bottom: 1px solid #e1e1e1; + background: #fafafa; + padding: 18px 10px; + margin: 0 -10px; +} +.mrxx-box .div-ys{ + display:inline; + margin:0 50px 0 0; +} +.mrxx-box .div-ys .title{ + color: #777777; + font-size: 12.8px; + padding-right: 5px; +} +.mrxx-box .div-ys .cont { + color: #777; + font-size: 12.8px; +} + +.search-box { + border-bottom:1px solid #eaeaea; + background: #fff; + padding:5px 10px; + margin: 0 -10px; +} +.search-box .el-button.common-btn { + background: #2c3846!important; +} +.search-box .el-form .el-form-item{ + margin-top:3px !important; + margin-bottom:3px !important; +} +.search-box .el-form .el-form-item .el-form-item__label { + color: #555; + line-height: 40px; +} +.search-box .el-form .el-form-item .el-form-item__content .el-cascader__label { + line-height: 32px; +} +.search-box .el-form .el-form-item .el-form-item__content input, +.search-box .el-form .el-form-item .el-form-item__content select, +.search-box .el-form .el-form-item .el-form-item__content textarea{ + border-color:#eaeaea !important; +} +.el-form .el-form-item .el-form-item__content input::-webkit-input-placeholder, +.el-form .el-form-item .el-form-item__content select::-webkit-input-placeholder, +.el-form .el-form-item .el-form-item__content textarea::-webkit-input-placeholder{ + color: #999 !important; +} +.el-form .el-form-item .el-form-item__content input:-moz-placeholder, +.el-form .el-form-item .el-form-item__content select:-moz-placeholder, +.el-form .el-form-item .el-form-item__content textarea:-moz-placeholder{ + color: #999 !important; +} +.el-form .el-form-item .el-form-item__content input::-moz-placeholder, +.el-form .el-form-item .el-form-item__content select::-moz-placeholder, +.el-form .el-form-item .el-form-item__content textarea::-moz-placeholder{ + color: #999 !important; +} +.el-form .el-form-item .el-form-item__content input::-ms-input-placeholder, +.el-form .el-form-item .el-form-item__content select::-ms-input-placeholder, +.el-form .el-form-item .el-form-item__content textarea::-ms-input-placeholder{ + color: #999 !important; +} + +.group-box .action-box{ + padding:5px 10px 5px 0; + margin-bottom: 10px; +} +.action-box { + width:100%; + display:table; + background: #fff; + padding:5px 10px; + margin: -10px -10px 0 -10px; + border-bottom:1px solid #eaeaea; + min-height:30px; +} +.action-box .cell_left{ + display:table-cell; + vertical-align:middle; + color:#333; + font-size:18px; +} +.action-box .cell_left .el-icon-arrow-left{ + cursor: pointer; + font-weight: bold; + color: #666; + font-size: 20px; +} +.group-box .action-box .cell_left .el-icon-arrow-left{ + padding: 0 0 0 4px; +} +.action-box .cell_right{ + display:table-cell; + vertical-align:middle; + text-align:right; +} +.action-box .cell_right .el-form .el-form-item{ + margin-right: 0; +} +.action-box+.el-table{ + margin-top:10px; +} +.el-button.common-btn{ + font-size:14px !important; + background:#8c2d64 !important; + color:#fff !important; + border:none !important; + padding:8px 10px !important; +} +.el-button.common-btn.cencel{ + background:#2c3846!important; +} +.el-button.danger-btn{ + font-size:14px !important; + background:#fc913f !important; + color:#fff !important; + border:none !important; + padding:8px 10px !important; +} +.el-button.noimpor-btn{ + font-size:14px !important; + background:#5d6782 !important; + color:#fff !important; + border:none !important; + padding:8px 10px !important; +} +.el-button.determine-btn{ + font-size: 14px !important; + background: #8c2d64 !important; + color: #fff !important; + border: none !important; + padding: 8px 10px !important; + +} + +.home-tree+.content .list .group-box+.el-tabs, +.home-tree+.content .list .yhxq_grxx+.el-tabs{ + margin-left: 290px !important; + margin-right: -10px !important; +} +.home-tree+.content .list>.crumbs+.group-box+div>.el-tabs{ + margin:0 -10px; +} +.home-tree+.content .list .group-box+.el-tabs .el-tabs__header .el-tabs__nav-scroll, +.home-tree+.content .list .yhxq_grxx+.el-tabs .el-tabs__header .el-tabs__nav-scroll, +.home-tree+.content .list>.crumbs+.group-box+div>.el-tabs .el-tabs__header .el-tabs__nav-scroll{ + padding: 0 10px; +} +.home-tree+.content .list .group-box+.el-tabs .el-tabs__content, +.home-tree+.content .list .yhxq_grxx+.el-tabs .el-tabs__content, +.home-tree+.content .list>.crumbs+.group-box+div>.el-tabs .el-tabs__content{ + padding: 0 10px; +} +.home-tree+.content .list .crumbs+.group-box{ + margin-left:288px !important; + padding-right: 0; +} +.content .list>.crumbs+.group-box, +.content .list>.group-box{ + padding-right: 0; +} +.home-tree+.content .list .crumbs+.group-box .box-title{ + margin-right:10px; +} +.home-tree+.content .list .crumbs+.group-box .box-body{ + margin-right:10px; +} +.group-box { + background: #fff; + padding: 0 10px; + margin: 0px 0 10px -10px; +} +.group-box .box-title{ + border-bottom: 1px solid #eaeaea; + color: #333!important; + padding: 6px 0; + font-size: 15px; + line-height: 33px; +} +.group-box .box-title:before, +.group-box .box-title:after{ + content:""; + display:table; +} +.group-box .box-title:after{ + clear:both; +} +.group-box .box-title .box_title_btn{ + display: inline-block; + float: right; + padding: 0 10px 0 0; +} +.group-box .box-title .box_title_btn .btn_a, +.group-box .box-title .box_title_btn .btn_a:hover{ + display: inline-block; + font-size: 13px; + padding: 8px 12px; + background: #8c2d64; + color: #fff!important; + border-radius: 2px; + margin: 0 0 0 10px; + cursor: pointer; + text-decoration: none; + line-height: 1.35; +} +.group-box .box-title:before{ + content: ""; + width: 4px; + height: 15px; + background: #8c2d64; + border-radius: 2px; + display: inline-block; + margin: 0px 8px -1px 0; +} +.group-box .box-title.box-title-new{ + border-bottom:0; +} +.group-box .box-title.box-title-new:before{ + content:none; +} +.group-box .box-body{ + padding:10px 0; +} +.group-box .box-body .group-line{ + width: 100%; + height: 1px; + margin: 10px 0; + border-bottom: 1px dotted #eaeaea!important; +} +.group-box .box-body .el-form .el-form-item{ + margin-top: 5px !important; + margin-bottom: 5px !important; +} +.el-form-item__error { + padding-top: 2px !important; +} +.group-box .box-body .el-form .el-form-item .el-form-item__label{ + color: #555; + font-size: 14px; +} +.group-box .box-body .el-form-item .el-form-item__label{ + color: #555; + font-size: 14px; +} +.group-box .box-body .el-form .el-form-item .el-form-item__content input, +.group-box .box-body .el-form .el-form-item .el-form-item__content select, +.group-box .box-body .el-form .el-form-item .el-form-item__content textarea{ + border-color:#eaeaea !important; +} +.group-box .box-body .el-form .el-form-item.is-error .el-form-item__content .el-input__inner, +.group-box .box-body .el-form .el-form-item.is-error .el-form-item__content .el-input__inner:focus, +.group-box .box-body .el-form .el-form-item.is-error .el-form-item__content .el-textarea__inner, +.group-box .box-body .el-form .el-form-item.is-error.el-form-item__content .el-textarea__inner:focus{ + border-color: #f56c6c !important; +} +.group-box.message .box-body .el-form .el-form-item{ + margin-top: 0 !important; + margin-bottom: 0 !important; +} +.group-box.message .box-body .el-form .el-form-item .el-form-item__label { + line-height: 1 !important; + color: #777777 !important; + padding: 8.5px 14px 8.5px 0 !important; + font-size: 12.8px; +} +.group-box.message .box-body .el-form .el-form-item .el-form-item__content { + line-height: 30px !important; + color: #000 !important; + font-size: 15px !important; +} +.user-info .el-dropdown-link[data-v-101f1fcc] { + color: #fff !important; +} +.search-box+.el-table{ + margin-top:5px !important; +} +.search-box+.el-tab-pane{ + margin-top:5px !important; +} +.choose-ul{ + margin:0; + padding:0; + width: 100%; + height: 300px; + border:1px solid #e1e1e1; +} +.choose-ul ul{ + margin:0; + padding:5px; +} +.choose-ul ul li{ + margin:0; + padding:5px 10px; + list-style:none; + color:#555555; + font-size:14px; +} +.choose-ul ul li i.el-icon-close{ + display:none; +} +.choose-ul ul li:hover{ + background:#f5f5f5; +} +.choose-ul ul li:hover i.el-icon-close{ + float:right; + display:inline; + cursor:pointer; + color:#949dba; + padding: 12px 0 0 0; + font-size: 12px; +} +.choose-ul .head{ + width:100%; + margin:0; + padding:0; + border-bottom:1px solid #e1e1e1; + display:table; +} +.choose-ul .head .left{ + display:table-cell; + padding:3px 10px; + vertical-align:middle; + color:#555; +} +.choose-ul .head .right{ + display:table-cell; + text-align:right; + padding:3px 10px; + vertical-align:middle; +} +.choose-ul .head .right .empty-btn{ + text-decoration:none !important; + background:none !important; + border:none !important; + color:#2977dc; + cursor:pointer; +} +.el-table__fixed-header-wrapper thead div { + background-color: #fff !important; + color: #1f2d3d; +} +.crumbs+.mrxx-box { + border-top: 1px solid #e1e1e1; + padding-top: 42px; +} +.crumbs { + position: fixed; + width: 100%; + z-index: 999; +} +.crumbs+div{ + padding-top: 45px; +} +.crumbs+.search-box{ + padding-top:40px; +} +.crumbs+div .el-tabs{ + margin-top:0px; +} +.crumbs+form{ + padding-top: 55px; +} +.crumbs+div.el-table { + padding-top: 0px !important; + top: 45px !important; +} +.crumbs+.mrxx-box:before { + content: ""; + display: block; + height: 1px; + background: #e1e1e1 !important; + margin: 0 -10px; +} +.crumbs+.mrxx-box .div-ys { + display: inline-block !important; + margin: 18px 35px 0 0 !important; +} +.el-form-item__label { + padding-right:5px !important; +} +.el-menu .apply-li{ + padding: 35px 0; + text-align: center; +} +.el-menu .apply-li .apply-a{ + padding: 13px 15.5px; + border-radius: 20px; + color: #aaadb3!important; + border: 1px solid #aaadb3!important; + text-decoration: none; + cursor: pointer; +} +.el-menu .apply-li .apply-a:hover{ + color:#fff!important; + border:1px solid #fff!important; + text-decoration:none; +} +.group-box .box-body .el-table--border .el-table__header th { + border-right: none !important; + background: #fafafa !important; +} +.group-box .box-body .el-table--border .el-table__header th .cell, +.group-box .box-body .el-table--border .el-table__header th>div{ + background: #fafafa !important; +} +.group-box .box-body .el-table tr td{ + padding: 8px 5px !important; + height: 30px; +} +.group-box .box-body .el-table tr th { + padding: 3px 5px !important; + height: 30px; +} +.el-table--fit { + border-right: 0 !important; + border-bottom: 0 !important; +} +.el-table tr td, .el-table tr th.is-leaf { + border-bottom: 1px solid #eaeaea!important; +} +.el-table { + border-color: #eaeaea !important; + padding:1px 0 0 0; + border-right: 1px solid #eaeaea !important; +} +.el-table::after, .el-table::before { + background-color: #eaeaea !important; +} +/* +.el-table .cell .el-button { + padding: 4px 8px !important; +} +*/ +.el-input__inner { + height:30px !important; +} +.action-box .el-form .el-form-item{ + margin-top: 0px !important; + margin-bottom: 0px !important; +} +.action-box .el-form .el-form-item .el-form-item__content{ + line-height: 1 !important; +} +.el-menu-item, .el-submenu__title { + height: 50px !important; + line-height: 50px !important; +} +.group-box .el-input__inner { + height: 36px !important; +} +.sidebar .el-menu li i.el-submenu__icon-arrow { + margin: 0 0 0 0 !important; +} +.el-submenu .el-menu-item { + min-width:160px !important; + width:160px; + height: 40px !important; + line-height: 40px !important; + padding-left: 50px !important; +} +.crumbs .el-breadcrumb { + padding: 15px 10px !important; +} +.search-box .el-button.common-btn, +.search-box .el-button.danger-btn, +.search-box .el-button.noimpor-btn, +.search-box .el-button.determine-btn{ + padding:8px 10px !important +} +.action-box .el-button.common-btn, +.action-box .el-button.danger-btn, +.action-box .el-button.noimpor-btn, +.action-box .el-button.determine-btn{ + padding:8px 10px !important +} +.el-dialog .el-dialog__body { + padding: 8px 20px !important; +} +.el-dialog .el-dialog__footer { + padding: 5px 20px 15px !important; +} +.ms-login .el-form .el-form-item{ + margin-bottom: 22px !important; +} +.el-form-item.paiche .el-form-item__label{ + padding-top:0px !important; +} +.el-form-item.paiche .el-form-item__content{ + line-height: 1 !important; +} + + + + + +/*左侧菜单折叠图标样式*/ +body .su-head.left { + z-index: 9999; + top: 100px; + width: 20px; + height: 28px; + line-height: 28px; + color: #4e91c5!important; + border-radius: 0 28px 28px 0; + background: #fff; + cursor: pointer; + border: 1px solid #e1e1e1; + position: absolute; +} + + +/*分页样式*/ +body .pagination .el-pagination .el-pager li.active { + color: #8c2d64; + cursor: default; +} +body .pagination .el-pagination .el-pager li:hover { + color: #8c2d64; +} + +/*内容距左侧距离 +.sidebar~.content{ + left: 180px !important; + }*/ + +/*框架tab页签样式*/ +body .el-tabs__nav .el-tabs__item{ + font-size: 15px; +} +body .el-tabs__item.is-active { + color: #8c2d64 !important; + font-weight:600; +} +body .el-tabs__item:hover{ + color: #8c2d64 !important; +} +body .el-tabs__active-bar { + background-color: #8c2d64 !important; +} +.el-tabs__content .search-box{ + padding: 0 10px 10px 10px; +} +.el-tabs .el-tabs__header .el-tabs__nav-wrap::after { + height: 1px; + background-color: #e3dcdc; +} + + + +/*面包屑文字颜色*/ +body .el-breadcrumb .el-breadcrumb__inner, +body .el-breadcrumb .el-breadcrumb__inner a, +body .el-breadcrumb .el-breadcrumb__inner u { + text-decoration:none; + color:#48576a !important; + font-weight:normal; +} +body .el-breadcrumb .el-breadcrumb__inner:hover, +body .el-breadcrumb .el-breadcrumb__inner:hover a, +body .el-breadcrumb .el-breadcrumb__inner:hover u { + font-weight: 700; + -webkit-transition: color .2s cubic-bezier(.645,.045,.355,1); + transition: color .2s cubic-bezier(.645,.045,.355,1); + color: #8c2d64 !important; +} +body .el-breadcrumb .el-breadcrumb__item:last-child .el-breadcrumb__inner, +body .el-breadcrumb .el-breadcrumb__item:last-child .el-breadcrumb__inner a, +body .el-breadcrumb .el-breadcrumb__item:last-child .el-breadcrumb__inner u { + text-decoration:none; + color:#4a4a4a !important; + font-weight:normal; +} +body .el-breadcrumb .el-breadcrumb__item:last-child .el-breadcrumb__inner:hover, +body .el-breadcrumb .el-breadcrumb__item:last-child .el-breadcrumb__inner:hover a, +body .el-breadcrumb .el-breadcrumb__item:last-child .el-breadcrumb__inner:hover u { + text-decoration:none; + color:#48576a !important; + font-weight:normal; +} + + +/*单选多选样式*/ +body .el-radio__input.is-checked .el-radio__inner { + border-color: #8c2d64; + background: #8c2d64; +} +body .el-radio__input.is-checked+.el-radio__label { + color: #8c2d64; +} +body .el-checkbox__inner:hover { + border-color: #8c2d64; +} +body .el-checkbox__input.is-checked .el-checkbox__inner, +body .el-checkbox__input.is-indeterminate .el-checkbox__inner { + background-color: #8c2d64; + border-color: #8c2d64; +} +body .el-checkbox__input.is-checked+.el-checkbox__label { + color: #8c2d64; +} +.group-box .el-input-number { + position: relative; + display: inline-block; + width: 180px; + line-height: 34px; +} + + + + +/*左侧树*/ +.el_col_left{ + width: 275px !important; + margin: 0 20px 0 0; + border: 1px solid #e1e1e1; + position: absolute; + height: calc(100% - 97px); +} +.el_col_left .el-tree-node>.el-tree-node__content+.el-tree-node__children { + overflow:inherit !important; +} +.el_col_right{ + width: calc(100% - 295px) !important; + margin: 0 0 0 295px; +} +.el_col_left .grid-content{ + background: #2c3448; +} +.el_col_left .grid-content .el-tree{ + background: #2c3448; + color:#fff; +} +.el_col_left .grid-content .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content { + background:#9399a3; + color: #fff; +} +.el_col_left .grid-content .el-tree--highlight-current .el-tree-node>.el-tree-node__content:hover { + background:#9399a3; + color: #fff; +} +.el_col_left .grid-content .el-tree .el-tree-node__label { + font-size: 15px; +} + + +/*home-tree*/ +.home-tree{ + background: #fff; + width: 295px; + position: absolute; + height: calc(100% - 140px); + left: 160px; + top: 140px; + margin: 0; + padding: 0; + border: 1px solid #e1e1e1; + z-index: 99; + border-top: 0; +} +.home-tree>.home-tree-box{ + background: #fff; + width: 100% !important; + overflow: auto !important; + height: 100% !important; + margin-left: 0 !important; + margin-top: 0 !important; + z-index: 1 !important; + position: inherit !important; + top: 0 !important; +} +.home-tree>.home-tree-box .grid-content{ + background: #fff; +} +.home-tree>.home-tree-box .grid-content .el-tree{ + background: #fff; + color:#333; +} +.home-tree .el-tree-node__expand-icon { + color: #a72677; + font-weight:bold; +} +.home-tree .el-tree-node__expand-icon.is-leaf { + color: transparent; + cursor: default; +} +.home-tree .el-tree-node:focus>.el-tree-node__content { + background-color: #fff; +} +.home-tree .el-tree-node__content { + border: 1px solid transparent; + height:32px; +} +.home-tree>.home-tree-box .grid-content .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content { + background: #fce5b2; + color: #333; + border: 1px solid #feddcb; +} +.home-tree>.home-tree-box .grid-content .el-tree--highlight-current .el-tree-node>.el-tree-node__content:hover { + background: #fce5b2; + color: #333; + border: 1px solid #feddcb; +} +.home-tree>.home-tree-box .grid-content .el-tree .el-tree-node__label { + font-size: 15px; +} +.home-tree>.home-tree-box .el-tree-node.is-expanded>.el-tree-node__children { + display: block; + overflow: inherit; +} +.home-tree>.home-tree-box .grid-content .el-tree .el-tree-node__content:hover .el-dropdown{ + display:inline; + } +.home-tree>.home-tree-box .grid-content .el-tree .el-dropdown{ + display:none; + position: absolute; + right: 0; + margin: -7px 0 0 0; + } +.home-tree>.home-tree-box .grid-content .el-tree .el-dropdown .el-button, +.home-tree>.home-tree-box .grid-content .el-tree .el-dropdown .el-button:hover { + padding: 5px 6px !important; + margin: 4px 0 0 0; + border-color:transparent !important; + } + + + +/*通讯录单独的树*/ +.el_col_left.el_col_left_new { + height: calc(100% - 10px); + margin-left: -10px; + width: 295px !important; +} +.el_col_left.el_col_left_new+.el-row{ + padding-top: 45px; +} +.el_col_left.el_col_left_new>.staffAddress{ + background: #fff; + width: 100%!important; + overflow: auto!important; + height: calc(100% - 40px)!important; + margin-left: 0!important; + margin-top: 0!important; + z-index: 1!important; + position: inherit!important; + top: 35px !important; +} +.el_col_left.el_col_left_new>.staffAddress .grid-content{ + background: #fff; +} +.el_col_left.el_col_left_new>.staffAddress .grid-content .el-tree{ + background: #fff; + color:#333; +} +.el_col_left.el_col_left_new>.staffAddress .el-tree-node__expand-icon { + color: #a72677; + font-weight:bold; +} +.el_col_left.el_col_left_new>.staffAddress .el-tree-node__expand-icon.is-leaf { + color: transparent; + cursor: default; +} +.el_col_left.el_col_left_new>.staffAddress .el-tree-node:focus>.el-tree-node__content { + background-color: #fff; +} +.el_col_left.el_col_left_new>.staffAddress .el-tree-node__content { + border: 1px solid transparent; + height:32px; +} +.el_col_left.el_col_left_new>.staffAddress .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content { + background: #fce5b2; + color: #333; + border: 1px solid #feddcb; +} +.el_col_left.el_col_left_new>.staffAddress .el-tree--highlight-current .el-tree-node>.el-tree-node__content:hover { + background: #fce5b2; + color: #333; + border: 1px solid #feddcb; +} +.el_col_left.el_col_left_new>.staffAddress ..el-tree .el-tree-node__label { + font-size: 15px; +} +.el_col_left.el_col_left_new>.staffAddress .el-tree-node.is-expanded>.el-tree-node__children { + display: block; + overflow: inherit; +} +.el_col_left.el_col_left_new>.staffAddress .el-icon-caret-right:before { + content: "\E62B"; +} +.el_col_left.el_col_left_new>.staffAddress .el-icon-caret-right.expanded:before { + content: "\E621"; +} +.el_col_left.el_col_left_new>.staffAddress .el-tree-node__expand-icon.expanded { + -webkit-transform: none; + transform: none; +} + + +/*去掉头部后距上面距离*/ +body #app .wrapper .header~.sidebar{ + top: 55px; +} +body #app .wrapper .header~.su-head.left{ + top: 100px; +} +body #app .wrapper .header~.content{ + top: 55px; +} +body #app .wrapper .sidebar{ + top: 0px; + position: absolute; + left: 0; + bottom: 0; + background: #34485e; + overflow:auto; + padding:0; +} +body #app .wrapper .su-head.left{ + top: 42px; +} +body #app .wrapper .content{ + top: 0px; +} + + +/*左侧菜单高度*/ +.sidebar > ul { + height:100%; +} + + +/*登录页面样式*/ +body #app .login-wrap{ + position: relative; + width:100%; + height:100%; + background: #eee !important; +} +body #app .ms-title{ + position: absolute; + top:50%; + width:100%; + margin-top: -230px; + text-align: center; + font-size:30px; + color: #333; +} +body #app .ms-login{ + position: absolute; + left:50%; + top:50%; + width:300px; + height:160px; + margin:-150px 0 0 -190px; + padding:40px; + border-radius: 5px; + background: #fff; + box-shadow: 0 0 14px rgba(0,0,0,.1); +} +body #app .login-btn{ + text-align: center; +} +body #app .login-btn button{ + width:100%; + height:36px; +} + + +/*表格样式*/ +.content .el-table__header-wrapper thead th { + border-left: 1px solid #eaeaea!important; + background: #f6f8fb !important; + color: #333; +} +.content .el-table__header-wrapper thead>tr>th:first-child { + border-left: 0px !important; +} +.content .el-table__header-wrapper thead th div { + color: #333!important; + font-weight: bold; + border-color: #eaeaea!important; + background: #f6f8fb !important; + font-size:14px; +} +.content .el-table .cell { + font-size:14px !important; +} + + +/*折叠树结构按钮样式*/ +body .vue-tree-list .vue-tree-item:hover .item-btn{ + padding:0 0 0 5px; +} +body .vue-tree-list .vue-tree-item .item-btn i{ + display:inline-block; + background:#409fff; + color:#fff; + padding:2px 5px; + border-radius:5px; + margin:0 5px 0 0; +} +body .vue-tree-list .vue-tree-item .item-btn i.fa-plus-square-o{ + background:#8c2d64; +} +body .vue-tree-list .vue-tree-item .item-btn i.fa-edit{ + background:#8c2d64; +} +body .vue-tree-list .vue-tree-item .item-btn i.fa-trash-o{ + background:#fc5454; +} +body .vue-tree-list .vue-tree-item .item-btn i:before{ + padding:0 5px 0 0; +} + + + +/*树形结构选中颜色*/ +body .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content { + background: #fce5b2; + color: #333; + border: 1px solid #feddcb; + } +body .el-tree--highlight-current .el-tree-node>.el-tree-node__content:hover { + background: #fce5b2; + color: #333; + border: 1px solid #feddcb; + } + + +/*框架下拉选择框颜色调整*/ +body .el-select .el-input.is-focus .el-input__inner { + border-color: #8c2d64; +} +body .el-select-dropdown__item.selected { + color: #8c2d64; +} +body .el-select .el-input__inner:focus { + border-color: #8c2d64; +} +body .el-select-dropdown__item.hover, +body .el-select-dropdown__item:hover { + background-color: #fef5fb; + color: #8c2d64; +} +body .el-dropdown-menu .el-dropdown-menu__item:hover{ + background: #fef5fb !important; + color: #8c2d64 !important; +} + +/*框架弹出框按钮样式*/ +body .el-message-box .el-message-box__btns .el-button.el-button--primary { + background: #8c2d64 !important; + border: 1px solid #8c2d64 !important; + color: #fff !important; +} +body .el-message-box .el-message-box__btns .el-button.el-button--primary:hover{ + background: #8c2d64 !important; + border: 1px solid #8c2d64 !important; + color: #fff !important; +} +body .el-message-box__headerbtn .el-message-box__close:hover{ + color: #8c2d64; +} +body .el-dialog .el-dialog__header .el-dialog__headerbtn:hover{ + color: #8c2d64; +} +body .el-dialog .el-dialog__header .el-dialog__headerbtn:hover i{ + color: #8c2d64; +} + + +/*yhxq_grxx*/ +.home-tree+.content .yhxq_grxx{ + margin: 0 -10px 0 287px; +} +.crumbs+.yhxq_grxx{ + padding-top: 60px; +} +.content .group-box+.yhxq_grxx{ + margin-top:-10px; +} +.group-box+.yhxq_grxx{ + margin-top:-10px; +} +.content .yhxq_grxx{ + margin:0 -10px 10px -10px; +} +.content .action-box+.yhxq_grxx{ + margin:10px -10px 10px -10px; +} +.yhxq_grxx{ + margin:0 0 10px 0; + padding:15px 10px; + background:#f4f6f9; +} +.yhxq_grxx:before,.yhxq_grxx:after{ + content:""; + display:table; +} +.yhxq_grxx:after{ + clear:both; +} +.yhxq_grxx .yhxq_ico{ + float:left; + display:inline-block; + width:30px; + height:30px; + background-size:30px; + margin:0 20px 0 0; + border-radius:5px; +} +.yhxq_grxx .grxx_list{ + float:left; + display:inline-block; + margin:0 40px 0 0; + font-size:15px; + color:#040404; + height: 30px; + line-height: 30px; +} +.yhxq_grxx .grxx_list .clum{ + font-size:15px; + color:#4a4a4a; + padding:0 5px 0 0; +} + +/*rigth_shmi*/ +.rigth_shmi{ + margin: 10px 0; + color: #999; + text-align: right; +} +.rigth_shmi>span{ + margin:0 0 0 10px; +} + +/*yhzt_index_page*/ +.content .yhzt_index_page{ + margin:-1px -10px 0 -10px; + width: calc(100% - 160px) !important; +} +.crumbs+.yhzt_index_page{ + padding-top: 10px; + height: calc(100% - 100px); + top: 100px; +} +.yhzt_index_page{ + background: #E7E8F0; + margin: 0; + padding: 10px 10px 10px 10px; + position: fixed; + width: 100%; + height: 100%; + overflow: auto; + box-sizing: border-box; +} +.yhzt_index_page:before,.yhzt_index_page:after{ + content:""; + display:table; +} +.yhzt_index_page:after{ + clear:both; +} +.yhzt_index_page .index_top{ + width:100%; + background:#fff; + float:left; + border-radius:5px; + padding:20px; + box-sizing: border-box; +} +.yhzt_index_page .index_left{ + width:calc(50% - 5px); + margin:10px 5px 0 0; + background:#fff; + float:left; + border-radius:5px; + padding:20px; + box-sizing: border-box; +} +.yhzt_index_page .index_right{ + width:calc(50% - 5px); + margin:10px 0 0 5px; + background:#fff; + float:left; + border-radius:5px; + padding:20px; + box-sizing: border-box; +} +.yhzt_index_page .index_top>.yhzt_box_1:last-child, +.yhzt_index_page .index_left>.yhzt_box_1:last-child, +.yhzt_index_page .index_right>.yhzt_box_1:last-child{ + margin-bottom:0; +} +.yhzt_box_1{ + margin:0 0 25px 0; + padding:0; +} +.yhzt_box_1 .box_head{ + display:table; + width:100%; + margin:0; + padding:0; +} +.yhzt_box_1 .box_head .cell_left{ + display:table-cell; + vertical-align:middle; + font-size:16px; + color:#333; +} +.yhzt_box_1 .box_head .cell_left>.title_te{ + font-size:16px; + color:#333; +} +.yhzt_box_1 .box_head .cell_left>.title_te:before { + content: ""; + width: 4px; + height: 18px; + background: #aa3b7a; + border-radius: 2px; + display: inline-block; + margin: 0px 10px -3px 0; +} +.yhzt_box_1 .box_head .cell_right{ + display:table-cell; + vertical-align:middle; + text-align:right; + font-size:14px; + color:#888; +} +.yhzt_box_1 .box_head .cell_right>a{ + font-size:14px; + color:#555!important; + cursor:pointer; + text-decoration:none; +} +.yhzt_box_1 .box_head .cell_right>a:hover{ + font-size:14px; + color:#8c2d64 !important; + cursor:pointer; + text-decoration:none; +} +.yhzt_box_1 .box_body{ + padding:5px 15px; +} +.yhzt_box_1 .box_body:before,.yhzt_box_1 .box_body:after{ + content:""; + display:table; +} +.yhzt_box_1 .box_body:after{ + clear:both; +} +.yhzt_box_1 .box_body>.zstj_list:last-child{ + margin-right:0; +} +.zstj_list{ + width:270px; + height:103px; + border-radius:5px; + background:#de69ea; + float:left; + margin:5px 20px 5px 0; + color:#fff; + box-sizing: border-box; + padding:25px 20px 0 90px; +} +.zstj_list.list_zyhs{ + background-size:270px; +} +.zstj_list.list_zzzs{ + background-size:270px; +} +.zstj_list.list_zzws{ + background-size:270px; +} +.zstj_list.list_zygs{ + background-size:270px; +} +.zstj_list>.p_1{ + color:#fff; + font-size:14px; + margin:0; + padding:0; +} +.zstj_list>.p_2{ + color:#fff; + font-size:26px; + margin:5px 0 0 0; + padding:0; +} +.yhzt_box_1 .box_body>.zstj_list_1:last-child{ + margin-right:0; +} +.zstj_list_1{ + display:table; + width:270px; + float:left; + margin:15px 20px 5px 0; + box-sizing: border-box; + padding:0 0; +} +.zstj_list_1 .cell_left{ + display:table-cell; + vertical-align:middle; + width:70px; +} +.zstj_list_1 .cell_left>img{ + width:60px; + height:60px; +} +.zstj_list_1 .cell_right{ + display:table-cell; + vertical-align:middle; +} +.zstj_list_1 .cell_right>.p_1{ + color:#6b6a6a; + font-size:14px; + margin:0; + padding:0; +} +.zstj_list_1 .cell_right>.p_2{ + color:#333; + font-size:26px; + margin:0; + padding:0; +} +.xxbg_list{ + display:table; + width:100%; + padding:10px 0; + border-bottom:1px dotted #dfdfdf; +} +.xxbg_list .cell_left{ + display:table-cell; + vertical-align:top; +} +.xxbg_list .cell_left .p_1{ + color:#444; + font-size:16px; + margin:0; + padding:0; +} +.xxbg_list .cell_left .p_2{ + color:#999; + font-size:14px; + margin:5px 0 0 0; + padding:0; +} +.xxbg_list .cell_left .p_2>span{ + margin:0 10px 0 0; +} +.xxbg_list .cell_right{ + display:table-cell; + vertical-align:top; + text-align:right; + font-size:14px; + color:#666; + width:120px; +} +.xxbg_list .cell_right .lab_dsh{ + color:#fdb032; +} +.xxbg_list .cell_right .lab_btg{ + color:#ff0000; +} +.xxbg_list .cell_right .lab_ywc{ + color:#999; +} + + +/*yhzt_login_page*/ +.yhzt_login_page{ + width:100%; + height:100%; + background:url(../images/yhzt_10.png) #7b1b49 no-repeat top center; + background-size:100%; + position:fixed; + } +.yhzt_login_page>.yhzt_login_bg{ + width:100%; + height:100%; + background:url(../images/yhzt_11.png) repeat-x left bottom; + background-size:1100px; + } +.yhzt_login_page>.yhzt_login_bg>.login_conts{ + display: inline-block; + width: auto; + margin: 0 auto; + position: fixed; + left: calc(50% - 200px); + top: calc(50% - 200px); + } +.yhzt_login_page>.yhzt_login_bg>.login_conts .title_box{ + display:table; + width:auto; + margin:0 auto 40px auto; + } +.yhzt_login_page>.yhzt_login_bg>.login_conts .title_box .cell_ico{ + display:table-cell; + vertical-align:middle; + width:45px; + } +.yhzt_login_page>.yhzt_login_bg>.login_conts .title_box .cell_ico>i{ + color:#fff; + font-size:40px; + } +.yhzt_login_page>.yhzt_login_bg>.login_conts .title_box .cell_ico>img{ + width:30px; + display: inherit; + } +.yhzt_login_page>.yhzt_login_bg>.login_conts .title_box .cell_text{ + font-size:30px; + color:#fff; + } +.yhzt_login_page>.yhzt_login_bg>.login_conts .tx_box{ + display: table; + width: 400px; + background: #fff7fc; + border-radius: 40px; + padding: 5px 20px; + margin: 30px auto; + box-shadow: 0 0 10px 0 rgba(0,0,0,0.1); + box-sizing: border-box; + } +.yhzt_login_page>.yhzt_login_bg>.login_conts .tx_box .cell_ico{ + display:table-cell; + vertical-align:middle; + width:25px; + } +.yhzt_login_page>.yhzt_login_bg>.login_conts .tx_box .cell_ico>img{ + width:15px; + display: inherit; + } +.yhzt_login_page>.yhzt_login_bg>.login_conts .tx_box .cell_input{ + display:table-cell; + vertical-align:middle; + } +.yhzt_login_page>.yhzt_login_bg>.login_conts .tx_box .cell_input>input{ + width:100%; + border:0; + color:#333; + font-size:14px; + outline: none; + resize:none; + height:40px ; + line-height:40px; + background:transparent; + } +.yhzt_login_page>.yhzt_login_bg>.login_conts .btn_box{ + width: 400px; + margin:30px auto 0 auto; + padding:0; + } +.yhzt_login_page>.yhzt_login_bg>.login_conts .btn_box>.btn_a, +.yhzt_login_page>.yhzt_login_bg>.login_conts .btn_box>.btn_a:hover{ + display:block; + width:100%; + height:52px; + line-height:52px; + text-align:center; + background: -webkit-linear-gradient(top, #e1a60a,#d9a51f, #e2a50b) !important; + border:0; + color:#fff !important; + font-size:18px; + padding:0; + border-radius: 40px; + box-shadow: 0 0 10px 0 rgba(0,0,0,0.1); + cursor:pointer; + text-decoration:none; + letter-spacing:2px; + } + +/*框架下拉框图标位置*/ +body .el-select .el-input .el-select__caret { + line-height: 20px; +} + + +/*表单详情展示*/ +.el-form.el_form_details .el-form-item, +.group-box .box-body .el-form.el_form_details .el-form-item{ + margin: 0 !important; + color: #000 !important; +} +.el-form.el_form_details .el-form-item .el-form-item__label, +.group-box .box-body .el-form.el_form_details .el-form-item .el-form-item__label{ + color: #52657b; + padding: 0 15px 0 0 !important; + line-height:34px; +} +.el-form.el_form_details .el-form-item .el-form-item__content, +.group-box .box-body .el-form.el_form_details .el-form-item .el-form-item__content{ + line-height:34px; +} + + +/*展开折叠树*/ +.home-tree .el-icon-caret-right:before { + content: "\E62B"; +} +.home-tree .el-icon-caret-right.expanded:before { + content: "\E621"; +} +.home-tree .el-tree-node__expand-icon.expanded { + -webkit-transform: none; + transform: none; +} + + +/*页签*/ +.el_tabs_new.el-tabs .el-tabs__header .el-tabs__nav-wrap .el-tabs__nav-scroll{ + position:relative; +} +.el_tabs_new.el-tabs .el-tabs__header .el-tabs__nav-wrap .el-tabs__nav-scroll .el-tabs__nav{ + float:none; +} +.el_tabs_new.el-tabs .el-tabs__header .el-tabs__nav-wrap .el-tabs__nav-scroll .el-tabs__nav #tab-back{ +} +.el_tabs_new.el-tabs .el-tabs__header .el-tabs__nav-wrap .el-tabs__nav-scroll .el-tabs__nav #tab-back .bank_btns{ + position: fixed; + right: 0; + top: 15px; + background: #2c3846; + color: #fff; + border-radius: 3px; + padding: 8px 10px; + height: auto; + line-height: 1; +} + + +/*菜单图标*/ +body .el-menu .el-menu-item i { + padding: 0 8px 0 0; + font-size: 21px !important; + float: left; + } + body .el-menu .el-menu-item i.icon-huaxiangfenxi{ + font-size: 24px !important; + font-weight: bold; + } +body .el-menu .el-submenu .el-submenu__title i:first-child{ + padding: 0 8px 0 0; + font-size: 21px !important; + float: left; + } +body .el-menu .el-submenu .el-submenu__title i.icon-fenleiguanli{ + font-size: 19px !important; + } + +/*处理过程*/ +body .update_log .update_log_ul li .text_top, +.box-body .update_log .update_log_ul li .text_top{ + color: #8c2d64 !important; +} +body .update_log .update_log_ul li .text_cont, +.box-body .update_log .update_log_ul li .text_cont{ + padding: 0 0 5px 0 !important; + position: inherit !important; +} +body .update_log .update_log_ul li .text_cont .texts_yj, +.box-body .update_log .update_log_ul li .text_cont .texts_yj{ + padding-right:500px !important; +} +body .update_log .update_log_ul li .text_cont .texts_name, +.box-body .update_log .update_log_ul li .text_cont .texts_name{ + position: absolute !important; + right: 5px !important; + top: 30px !important; +} + + + +/*ztree*/ +.ztree_box_new{ + height: 250px; + overflow: auto; +} +.ztree_box_new .ztree li span { + color:#333; + font-size:15px; +} +.ztree_box_new .ztree li:hover{ + text-decoration:none; + background: #fff; + color: #333; +} +.ztree_box_new .ztree li:hover a { + text-decoration:none; +} +.ztree_box_new .ztree li a.curSelectedNode { + padding-top: 0px; + background-color: #fff; + color: #333 !important; + height: 16px; + border: 0; + opacity: 1; +} +.ztree_box_new .ztree li span.button+a>span.button{ + display:none; +} + + +/*rzgl_box*/ +.rzgl_box{ + display:table; + width:100%; + table-layout:fixed; +} +.rzgl_box .cell_left{ + width:50%; + display:table-cell; + vertical-align:top; + padding:0 5px 0 0; + box-sizing: border-box; +} +.rzgl_box .cell_right{ + display:table-cell; + vertical-align:top; + padding:0 0 0 5px; + box-sizing: border-box; +} +.rzgl_box .rzgl_list{ + margin:0; + padding:0; + width:100%; + border: 1px solid #efeaea; +} +.rzgl_box .rzgl_list .list_head{ + background: #f6f8fb; + height:36px; + line-height:36px; + padding:0 10px; + color:#333; + font-size:15px; + box-sizing: border-box; +} +.rzgl_box .rzgl_list .list_body{ + background: #fff; + border-top: 1px solid #efeaea; + min-height:300px; + overflow:auto; + padding:10px; + box-sizing: border-box; +} +.el-form-item.inputLogItem .el-form-item__content{ + width:calc(100% - 160px); +} +.el-form-item.inputLogItem .el-form-item__content .inputLogSpan{ + width:100%; +} +.smoke_list{ + margin:0; + padding:10px 0 0 0; + } +.smoke_list:before, +.smoke_list:after{ + content:""; + display:table; + } +.smoke_list:after{ + clear:both; + } +.smoke_list>.list{ + float:left; + width:33.3333333333333333333%; + text-align:center; + } +.smoke_list>.list>img{ + height:84px; + max-width:100%; + width:auto; + margin:0 auto 5px auto; + } +.smoke_list>.list>p{ + text-align:center; + color:#333; + font-size:14px; + line-height:1.75; + } + + +/*按钮图标间距*/ +body .el-button [class*=el-icon-]+span { + margin-left: 0; +} + + +/*person-list 排序*/ +.person-list{ + margin:0 0 20px 0; + padding:0; +} +.person-list>li{ + list-style: none; + margin: 0; + padding: 6px 0; + border-bottom: 1px dotted #dfdfdf; + color: #333; + font-size: 14px; + cursor: move; +} +.table.table-condensed{ + width: 100%; + border: 0; + margin: 0 0 20px 0; + padding: 0; + border-collapse: collapse; +} +.table.table-condensed>thead>tr>th{ + font-size:14px; + color: #333; + font-weight: 700; + border:1px solid #eaeaea; + background: #f6f8fb; + text-align:left; + padding:5px; +} +.table.table-condensed>tbody>tr:nth-child(2n)>td{ + font-size:14px; + color: #333; + border:1px solid #eaeaea; + background: #f5f5f5; + text-align:left; + padding:5px; + font-weight:normal; +} +.table.table-condensed>tbody>tr:nth-child(2n+1)>td{ + font-size:14px; + color: #333; + border:1px solid #eaeaea; + background: #fff; + text-align:left; + padding:5px; + font-weight:normal; +} + + + +/*group-box-new*/ +.group-box.group-box-new{ + margin: 10px; + padding: 0; +} +.group-box.group-box-new .box-title{ + border-bottom: 1px solid #e6e6e6; + padding:0; + font-size: 12px; + line-height: 33px; + color: #000000; + font-weight: bold; +} +.group-box.group-box-new .box-title:before{ + content:none; +} +.group-box.group-box-new .box-title:after{ + content:none; +} +.group-box.group-box-new .box-title>.box-title-text{ + padding: 7px 0; + font-size: 12px; + line-height: 33px; + color: #000000; + font-weight: bold; +} +.group-box.group-box-new .box-title>.box-title-text:after { + content: ""; + height: 2px; + width: 48px; + display: block; + background: #7bc0e7; + margin: 0 0 -1px 0; +} +.group-box.group-box-new .box-body{ +} +.group-box.group-box-new .box-body .el-form .el-form-item .el-form-item__label { + color: #000; + font-size: 12px; + line-height: 27px; +} +.group-box.group-box-new .box-body .el-form .el-form-item .el-form-item__content input, +.group-box.group-box-new .box-body .el-form .el-form-item .el-form-item__content select, +.group-box.group-box-new .box-body .el-form .el-form-item .el-form-item__content textarea { + height: 27px !important; + border-color:#ccc !important; + border-radius: 0 !important; +} +.group-box.group-box-new .box-body .el-form .el-form-item { + margin-top: 4.5px !important; + margin-bottom: 4.5px !important; +} +.group-box.group-box-new .box-body .el-button.common-btn { + font-size: 12px !important; + background-image: linear-gradient(0deg, #dce2e6 0%, #FFFFFF 100%) !important; + color: #000 !important; + border: none !important; + padding: 5px 10px !important; + border: 1px solid #89a0b9 !important; +} + + +/*登录*/ +.login-container .login-box .login-contain{ + width: 400px !important; + } +.login-container .login-box .login-contain .login-form .el-input .el-input__prefix i{ + line-height: 1; + } +.login-container .login-box .login-contain .login-form .el-input .el-input__inner { + height: 50px !important; + border-radius: 40px !important; + border: 0 !important; + } +.login-container .login-box .login-contain .login-form .el-button.login, +.login-container .login-box .login-contain .login-form .el-button.login:hover{ + display: block; + text-align: center; + background: -webkit-linear-gradient(top, #e1a60a,#d9a51f, #e2a50b) !important; + background: -o-linear-gradient(top, #e1a60a,#d9a51f, #e2a50b) !important; + background: -moz-linear-gradient(top, #e1a60a,#d9a51f, #e2a50b) !important; + background: -ms-linear-gradient(top, #e1a60a,#d9a51f, #e2a50b) !important; + border: 0 !important; + color: #fff !important; + border-radius: 40px !important; + box-shadow: 0 0 10px 0 rgba(0,0,0,0.1); + cursor: pointer; + text-decoration: none; + letter-spacing: 2px; + padding: 16px !important; + font-size: 18px !important; + } + + +/*导航栏租户切换*/ +.sel_zh{ + float:inherit !important; + display: inline-block; + margin: 3px 0 0 0; + position: absolute; + right: 150px; + } +.sel_zh .el-select .el-input .el-input__inner{ + border-radius: 0; + border: 1px solid rgba(255,255,255,0.7); + background: rgba(255,255,255,0.15); + color: #fff; + box-shadow: 0 0 5px 0 rgba(255,255,255,0.2); + font-size: 14px; + width: auto !important; + } +body .sel_zh .el-select .el-input.is-focus .el-input__inner { + border-color: rgba(255,255,255,0.7); + } + +/*分类树的搜索栏*/ +.el_col_left.el_col_left_new>.staffAddress .el-form{ + text-align: center; + margin: -1px 0 0 0; + } +.el_col_left.el_col_left_new>.staffAddress .el-form .el-form-item{ + width: 100%; + margin: 0 !important; + } +.el_col_left.el_col_left_new>.staffAddress .el-form .el-form-item .el-form-item__content{ + width:100%; + } +.el_col_left.el_col_left_new>.staffAddress .el-form .el-form-item .el-form-item__content .el-select{ + width: 100%; + margin: 0 !important; + } +.el_col_left.el_col_left_new>.staffAddress .el-form .el-form-item .el-form-item__content .el-select .el-input.el-input--suffix{ + } +.el_col_left.el_col_left_new>.staffAddress .el-form .el-form-item .el-form-item__content .el-select .el-input.el-input--suffix .el-input__inner{ + height: 50px !important; + border-radius: 0; + border-left: 0; + border-right: 0; + border-bottom: 10px solid #efefef; + } +.el_col_left.el_col_left_new>.staffAddress .el-form .el-form-item .el-form-item__content .el-input.el-input--prefix{ + margin-bottom: 10px; + } +.el_col_left.el_col_left_new>.staffAddress .el-form .el-form-item .el-form-item__content .el-input.el-input--prefix .el-input__inner{ + height: 40px !important; + border-top: 0 !important; + border-left: 0 !important; + border-right: 0 !important; + border-bottom: 1px solid #ddd; + border-radius: 0px; + } +/*分类树的搜索栏*/ +.home-tree .home-tree-box .grid-content .el-form{ + text-align: center; + margin: -1px 0 0 0; + } +.home-tree .home-tree-box .grid-content .el-form .el-form-item{ + width: 100%; + margin: 0 !important; + } +.home-tree .home-tree-box .grid-content .el-form .el-form-item .el-form-item__content{ + width:100%; + } +.home-tree .home-tree-box .grid-content .el-form .el-form-item .el-form-item__content .el-select{ + width: 100%; + margin: 0 !important; + } +.home-tree .home-tree-box .grid-content .el-form .el-form-item .el-form-item__content .el-select .el-input.el-input--suffix{ + } +.home-tree .home-tree-box .grid-content .el-form .el-form-item .el-form-item__content .el-select .el-input.el-input--suffix .el-input__inner{ + height: 50px !important; + border-radius: 0; + border-left: 0; + border-right: 0; + border-bottom: 10px solid #efefef; + } +.home-tree .home-tree-box .grid-content .el-form .el-form-item .el-form-item__content .el-input.el-input--prefix{ + margin-bottom: 10px; + } +.home-tree .home-tree-box .grid-content .el-form .el-form-item .el-form-item__content .el-input.el-input--prefix .el-input__inner{ + height: 40px !important; + border-top: 0 !important; + border-left: 0 !important; + border-right: 0 !important; + border-bottom: 1px solid #ddd; + border-radius: 0px; + } + +/*弹出框页面调整*/ +.el_form_sj .el-row{ + margin-left:0px !important; + margin-right:0px !important; + } +.el_form_sj .el-col-10{ + padding-right:10px !important; + padding-left: 0px !important; + width: calc(50% - 45px); + } +.el_form_sj .el-col-4{ + width: 70px; + padding: 0 !important; + } +.el_form_sj .el-col-4+.el-col-10{ + padding-right:0px !important; + padding-left:10px !important; + width: calc(50% - 45px); + } +.el_form_sj .el-col-4 .choose-ul{ + } +.el_form_sj .el-col-4 .choose-ul .el-button{ + width: 70px !important; + text-align: center; + margin: 0 !important; + } +.el_form_sj .el-col-4 .choose-ul>.el-button:first-child{ + margin-top:100px !important; + } +.el_form_sj .sj_box_1{ + padding: 0 10px; + border-bottom: 1px dashed #dfdfdf; + margin: 0 0 10px 0; + } +.el_form_sj .sj_box_1>.title{ + color:#333; + font-size:13px; + padding:0 5px 0 0; + } +.el_form_sj .sj_box_1 select{ + min-width: 200px; + height: 30px; + border: 1px solid #e4e4e4; + border-radius: 3px; + } +.el_form_sj .sj_box_2{ + padding: 0 10px; + } +.el_form_sj .sj_box_2>.title{ + color: #333; + font-size: 13px; + display: block; + margin: 0; + padding: 0; + line-height: 1; + } +.el_form_sj .sj_box_2>.title:before{ + content: ""; + width: 4px; + height: 15px; + background: #8c2d64 !important; + border-radius: 2px; + display: inline-block; + margin: 0px 5px -2px 0; + } +.el_form_sj .sj_box_2 .el-checkbox-group{ + padding: 10px 0; + max-height: 160px; + overflow: auto; + } +.el_form_sj .sj_box_2 .el-checkbox-group .el-checkbox{ + display: block; + margin: 0; + height: 24px; + line-height: 24px; + } + +/*header_menu*/ +.header_menu{ + display:inline-block; + } +.header_menu>.menu_text{ + display: inline-block; + height: 55px; + line-height: 55px; + padding: 0 15px; + cursor: pointer; + text-decoration: none; + color: rgba(255,255,255,0.7) !important; + font-size: 16px; + } +.header_menu>.menu_text:after { + content: ""; + height: 2px; + width: auto; + display: block; + background: transparent; + margin: -4px auto 0 auto; + } +.header_menu>.menu_text.active, +.header_menu>.menu_text:hover{ + background: #891c56; + color: rgba(255,255,255,1) !important; + } +.header_menu>.menu_text.active:after, +.header_menu>.menu_text:hover:after { + background: #fff; + } + + + +/*yhzt_jsz*/ +.content .yhzt_jsz{ + margin:-1px -10px 0 -10px; + width: calc(100% - 160px) !important; + } +.crumbs+.yhzt_jsz{ + padding-top: 10px; + height: calc(100% - 100px); + top: 100px; + } +.yhzt_jsz{ + background:url(../images/yhzt_16.png) #f9f9f9 no-repeat center ; + background-size:596px; + margin: 0; + padding: 10px 10px 10px 10px; + position: fixed; + width: 100%; + height: 100%; + overflow: auto; + box-sizing: border-box; + } + +/*el_tabs_top*/ +.el_tabs_top{ + z-index: 99999; + padding-top: 35px !important; + } +.el_tabs_top>.el_tabs_new.el-tabs.el-tabs--top{ + margin-left: 0 !important; + } + + +/*gzjs_box*/ +.gzjs_box{ + display: inline-block; + width: auto; + padding: 0 20px 0 0; + border: 1px dashed #dfdfdf; + box-shadow: 0 0 6px 0 rgba(0,0,0,0.1); + position:relative; + margin:0 0 15px 0; + } +.gzjs_box>.btn_close, +.gzjs_box>.btn_close:hover{ + position: absolute; + right: 10px; + top: 10px; + display: inline-block; + width: 28px; + height: 28px; + border: 1px solid #ff0000; + border-radius: 100%; + text-align: center; + line-height: 30px; + cursor:pointer; + text-decoration:none; + font-size: 20px; + } +.gzjs_box>.btn_close>i{ + font-size: 20px; + color: #ff0000; + } +.group-box .box-body .gzjs_box .el-form>.el-form-item>.el-form-item__content>.gz_list_box>.el-form-item { + margin-top: 0 !important; + margin-bottom:10px !important; + } +.group-box .box-body .gzjs_box .el-form>.el-form-item>.el-form-item__content>.gz_list_box+.el-form-item { + margin-top: -5px !important; + } + +/*ranking_zw 暂无数据*/ +.ranking_zw{ + margin:0; + padding:12% 0 0 0; + text-align:center; + color: #999; + font-size: 14px; + line-height: 1.75; + letter-spacing: 1px; + } +.ranking_zw>img{ + width:250px; + height:auto; + margin:0 auto; + padding:0; + } +.ranking_zw>p{ + text-align: center; + color: #999; + font-size: 16px; + line-height: 1.75; + margin: 0.5rem 0 0 0; + letter-spacing: 1px; + } + + +/*data_cluster 数据分群*/ +.content .data_cluster{ + width: calc(100% - 160px); + } +.content .crumbs+.data_cluster{ + padding: 45px 10px 10px 10px; + margin: 0 -10px; + height: calc(100% - 65px); + } +.content .crumbs+.search-box+.data_cluster{ + padding: 10px 10px 10px 10px; + margin: 0 -10px; + height: calc(100% - 148px); + } +.data_cluster{ + position:fixed; + width:100%; + height:100%; + background:#f2f4f6; + overflow:auto; + box-sizing: border-box; + padding:10px; + margin:0; + } +.cluster_head{ + display:table; + width:100%; + height:33px; + margin:0 0 10px 0; + padding:0; + } +.cluster_head>.cell_title{ + display:table-cell; + vertical-align:middle; + color:#333; + font-size:18px; + } +.cluster_head>.cell_title>.titles{ + color:#333; + font-size:18px; + } +.cluster_head>.cell_title>.titles:before{ + content: ""; + width: 4px; + height: 20px; + background: #8c2d64; + border-radius: 2px; + display: inline-block; + margin: 0 8px -4px 0; + } +.cluster_head>.cell_btn{ + display:table-cell; + vertical-align:middle; + text-align:right; + } +.cluster_head>.cell_btn>.btn_a, +.cluster_head>.cell_btn>.btn_a:hover{ + display: inline-block; + font-size: 13px; + padding: 8px 12px; + background: #8c2d64; + color: #fff!important; + border-radius: 2px; + margin: 0 0 0 10px; + cursor: pointer; + text-decoration: none; + line-height: 1.35; + } +.cluster_body{ + width:calc(100% + 20px); + height:calc(100% - 43px); + overflow:auto; + margin:0 -10px; + } +.cluster_body:before, +.cluster_body:after{ + content:""; + display:table; + } +.cluster_body:after{ + clear:both; + } +.cluster_body::-webkit-scrollbar {/*滚动条整体样式*/ + width: 5px; /*高宽分别对应横竖滚动条的尺寸*/ + height: 5px; + } +.cluster_body::-webkit-scrollbar-thumb {/*滚动条里面小方块*/ + border-radius: 5px; + -webkit-box-shadow: inset 0 0 5px rgba(0,0,0,0.2); + background: rgba(0,0,0,0.2); + } +.cluster_body::-webkit-scrollbar-track {/*滚动条里面轨道*/ + -webkit-box-shadow: inset 0 0 5px rgba(0,0,0,0.2); + border-radius: 0; + background: rgba(0,0,0,0.1); + } +.cluster_list{ + float:left; + width:calc(20% - 20px); + height:280px; + margin:10px; + background:#fff; + } +@media (max-width: 1620px){ +.cluster_list{ + width:calc(25% - 20px); + } + } +@media (max-width: 1320px){ +.cluster_list{ + width:calc(33.3333333333333333% - 20px); + } + } +@media (max-width: 1020px){ +.cluster_list{ + width:calc(50% - 20px); + } + } +.cluster_list>.list_top{ + display:table; + width:100%; + height:60px; + background:#fff; + padding:0 15px; + box-sizing: border-box; + } +.cluster_list>.list_top>.cell_btn{ + display:table-cell; + vertical-align:middle; + } +.cluster_list>.list_top>.cell_btn>.btn_a, +.cluster_list>.list_top>.cell_btn>.btn_a:hover{ + color:#989195 !important; + font-size:16px; + margin:0 20px 0 0; + text-decoration:none; + cursor:pointer; + } +.cluster_list>.list_title{ + width: 100%; + height: 160px; + background: #7569b2; + color: #fff; + font-size: 20px; + padding: 15px; + line-height:1.75; + box-sizing: border-box; + } +.cluster_list.green_list>.list_title{ + background: #30c4a0; + } +.cluster_list.blue_list>.list_title{ + background: #40a4de; + } +.cluster_list.red_list>.list_title{ + background: #fc4f50; + } +.cluster_list>.list_bottom{ + display:table; + width:100%; + height:60px; + background:#fff; + padding:0 15px; + box-sizing: border-box; + } +.cluster_list>.list_bottom>.cell_left{ + display:table-cell; + vertical-align:middle; + text-align:left; + } +.cluster_list>.list_bottom>.cell_right{ + display:table-cell; + vertical-align:middle; + text-align:right; + } +.cluster_list>.list_bottom .btn_cy, +.cluster_list>.list_bottom .btn_cy:hover{ + color:#999 !important; + font-size:16px; + cursor:pointer; + text-decoration:none; + } +.cluster_list>.list_bottom .btn_cy>i{ + color:#999 !important; + font-size:20px; + padding:0 3px 0 0; + } +.cluster_list>.list_bottom .btn_fq, +.cluster_list>.list_bottom .btn_fq:hover{ + color:#a90765 !important; + font-size:16px; + cursor:pointer; + text-decoration:none; + } +.cluster_list>.list_bottom .btn_fq>i{ + color:#a90765 !important; + font-size:16px; + padding:0 3px 0 0; + } + + +/*tabs_group 数据分群结合组件样式调整*/ +.content>.list>.crumbs+.tabs_group{ + margin: 0 -10px; + padding-top: 34px !important; + } +.tabs_group>.data_cluster{ + padding: 0; + } +.tabs_group>.data_cluster>.el-tabs>.el-tabs__header{ + background: #fff; + margin:0; + } +.tabs_group>.data_cluster>.el-tabs>.el-tabs__header>.el-tabs__nav-wrap>.el-tabs__nav-scroll{ + padding:0 15px; + } +.tabs_group>.data_cluster>.el-tabs>.el-tabs__content>.el-tab-pane>.search-box{ + padding: 0; + margin: 0; + } +.tabs_group>.data_cluster>.el-tabs>.el-tabs__content>.el-tab-pane>.cluster_body{ + margin: 0; + width: calc(100% - 160px); + max-height: calc(100% - 185px); + position: fixed; + overflow: auto; + box-sizing: border-box; + } + + + +/*shop_details 店铺详情*/ +.wrapper>.content>.list>.crumbs+.el-tabs.el-tabs--top{ + padding-top: 35px; + } +.wrapper>.content>.list>.crumbs+.el-tabs.el-tabs--top>.el-tabs__header.is-top{ + margin-bottom: 0; + } +.wrapper>.content>.list>.crumbs+.el-tabs.el-tabs--top>.el-tabs__content>.el-tab-pane>.shop_details{ + width: calc(100% - 160px); + margin: 0 -10px; + height: calc(100% - 139px); + border-top:1px solid #e3dcdc; + } +.shop_details{ + position: fixed; + width: 100%; + height: 100%; + background: #f2f4f6; + overflow: auto; + box-sizing: border-box; + padding: 10px; + margin: 0; + } +.shop_details:before, +.shop_details:after{ + content:""; + display:table; + } +.shop_details:after{ + clear:both; + } +.shop_details::-webkit-scrollbar {/*滚动条整体样式*/ + width: 5px; /*高宽分别对应横竖滚动条的尺寸*/ + height: 5px; + } +.shop_details::-webkit-scrollbar-thumb {/*滚动条里面小方块*/ + border-radius: 5px; + -webkit-box-shadow: inset 0 0 5px rgba(0,0,0,0.2); + background: rgba(0,0,0,0.2); + } +.shop_details::-webkit-scrollbar-track {/*滚动条里面轨道*/ + -webkit-box-shadow: inset 0 0 5px rgba(0,0,0,0.2); + border-radius: 0; + background: rgba(0,0,0,0.1); + } +.shop_details>.shop_box{ + float:left; + background:#fff; + border:1px solid #eae6e6; + min-height:100px; + min-width:300px; + box-sizing: border-box; + } +.shop_details>.shop_box.box_1{ + width:390px; + margin:0 10px 10px 0; + height:360px; + } +.shop_details>.shop_box.box_2{ + width:calc(100% - 400px); + margin:0 0 10px 0; + height:360px; + } +.shop_details>.shop_box.box_2>.shop_body{ + height:312px; + overflow:auto; + } +.shop_details>.shop_box.box_3{ + width:100%; + min-height:calc(100% - 370px); + } +.shop_details>.shop_box>.shop_img{ + text-align:center; + margin:50px 0 10px 0; + padding:0; + } +.shop_details>.shop_box.shop_box_new>.shop_img{ + text-align:center; + margin:40px 0 10px 0; + padding:0; + } +.shop_details>.shop_box.shop_box_new>.shop_img>img{ + border-radius:100%; + } +.shop_details>.shop_box>.shop_img>img{ + width:110px; + height:110px; + margin:0; + padding:0; + } +.shop_box>.text{ + margin:0 0 50px 0; + padding:0; + line-height:1.75; + } +.shop_box.shop_box_new>.text{ + margin:0 0 35px 0; + padding:0; + line-height:1.75; + } +.shop_box>.text>.p_title{ + text-align: center; + color: #101010; + font-size: 24px; + margin: 0 auto; + padding: 0; + width: 370px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } +.shop_box>.text>.p_text{ + text-align:center; + color:#d1cccc; + font-size:14px; + margin:0 auto; + padding:0; + width: 370px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } +.shop_box>.labl{ + margin:0; + padding:0; + line-height:1.75; + text-align:center; + } +.shop_box>.labl>.labl_list{ + color:#101010; + font-size:16px; + margin:0 10px; + padding:0; + } +.shop_box>.labl>.labl_list>i{ + color:#101010; + font-size:18px; + margin:0; + padding:0 0 0 0; + } +.shop_box>.shop_head{ + display:table; + width:100%; + border-bottom:1px solid #e2e1e1; + padding:0 10px; + box-sizing: border-box; + } +.shop_box>.shop_head>.cell_left{ + display:table-cell; + vertical-align:middle; + } +.shop_box>.shop_head>.cell_left>.menu_tab, +.shop_box>.shop_head>.cell_left>.menu_tab:hover{ + display: inline-block; + width: auto; + min-width:72px; + height: 45px; + line-height: 45px; + color: #7a7777 !important; + font-size: 18px; + margin: 0 40px 0 0; + cursor: pointer; + text-decoration: none; + padding:0; + border-bottom: 3px solid #fff; + box-sizing: border-box; + text-align:center; + } +.shop_box>.shop_head>.cell_left>.menu_tab.active{ + color: #9d2a66 !important; + border-color: #9d2a66 !important; + } +.shop_box>.shop_head>.cell_right{ + display:table-cell; + vertical-align:middle; + text-align:right; + } +.shop_box>.shop_head>.cell_right>.btn_a, +.shop_box>.shop_head>.cell_right>.btn_a:hover{ + font-size:14px; + color:#7a7777 !important; + cursor:pointer; + text-decoration:none; + } +.shop_box>.shop_body{ + margin:0; + padding:10px; + box-sizing: border-box; + } +.shop_box>.shop_body:before, +.shop_box>.shop_body:after{ + content:""; + display:table; + } +.shop_box>.shop_body:after{ + clear:both; + } +.shop_box>.shop_body::-webkit-scrollbar {/*滚动条整体样式*/ + width: 5px; /*高宽分别对应横竖滚动条的尺寸*/ + height: 5px; + } +.shop_box>.shop_body::-webkit-scrollbar-thumb {/*滚动条里面小方块*/ + border-radius: 5px; + -webkit-box-shadow: inset 0 0 5px rgba(0,0,0,0.2); + background: rgba(0,0,0,0.2); + } +.shop_box>.shop_body::-webkit-scrollbar-track {/*滚动条里面轨道*/ + -webkit-box-shadow: inset 0 0 5px rgba(0,0,0,0.2); + border-radius: 0; + background: rgba(0,0,0,0.1); + } +.shop_box>.shop_body>.bq_lab{ + float:left; + width:calc(20% - 10px); + text-align:center; + background:#f8f8f8; + margin:5px; + line-height:1.75; + padding:6px 0; + } +.shop_box>.shop_body>.bq_lab.color_1{ + background:#F6F9FC; + } +.shop_box>.shop_body>.bq_lab.color_2{ + background:#F5FAF8; + } +.shop_box>.shop_body>.bq_lab.color_3{ + background:#fef7fb; + } +.shop_box>.shop_body>.bq_lab.color_4{ + background:#f2f1f8; + } +.shop_box>.shop_body>.bq_lab.color_5{ + background:#faf7f3; + } +.shop_box>.shop_body>.bq_lab p{ + color: rgba(59, 59, 62, 1); + font-size: 14px; + text-align: center; + margin:0; + padding:0 10px; + line-height:1.75; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } +.shop_box>.shop_body>.tj_time{ + color: rgba(151, 148, 148, 1); + font-size: 13px; + text-align: left; + } +.shop_box>.shop_body>.tj_time+.jhjl_table{ + margin-top:20px; + } +.shop_box>.shop_body>.jhjl_table{ + display:table; + width:100%; + height:auto; + min-height:100px; + } +.shop_box>.shop_body>.jhjl_table>.cell_left{ + display:table-cell; + vertical-align:top; + width:400px; + padding:0 20px 0 0; + border-right:1px solid #dfdfdf; + box-sizing: border-box; + } +.shop_box>.shop_body>.jhjl_table>.cell_right{ + display:table-cell; + vertical-align:top; + padding:0 0 0 20px; + box-sizing: border-box; + } +.shop_list{ + margin:0 0 25px 0; + padding:0; + } +.shop_list>.list_head{ + display: table; + width: 100%; + margin: 0 0 10px 0; + padding: 0; + } +.shop_list>.list_head>.cell_title{ + display: table-cell; + vertical-align: middle; + color: #333; + font-size: 16px; + } +.shop_list>.list_head>.cell_title>.titles{ + color: #333; + font-size: 16px; + } +.shop_list>.list_head>.cell_title>.titles:before{ + content: ""; + width: 4px; + height: 16px; + background: #8c2d64; + border-radius: 2px; + display: inline-block; + margin: 0 8px -2px 0; + } +.shop_list>.list_head>.cell_title>.btn_a, +.shop_list>.list_head>.cell_title>.btn_a:hover{ + color: #8c2d64 !important; + text-decoration: none; + font-size:14px; + cursor:pointer; + text-decoration:none; + margin:0 0 0 20px; + } +.shop_list>.list_head>.cell_btn{ + display: table-cell; + vertical-align: middle; + text-align: right; + } +.shop_list>.list_head>.cell_btn>select{ + width: auto; + height: 30px; + line-height: 30px; + padding: 0 10px; + border: 1px solid #8c2d64; + color: #8c2d64; + font-size: 14px; + } +.shop_list>.list_head>.cell_btn>.tab_a, +.shop_list>.list_head>.cell_btn>.tab_a:hover{ + background:#fff; + display: inline-block; + width: 45px; + text-align: center; + border: 1px solid #cfcbca; + color: #999 !important; + font-size: 13px; + height: 24px; + line-height: 26px; + margin: 0; + cursor:pointer; + text-decoration:none; + } +.shop_list>.list_head>.cell_btn>.tab_a.active{ + border: 1px solid #8c2d64 !important; + color: #8c2d64 !important; + } +.shop_list>.list_head>.cell_btn>.tab_a:first-child{ + border-right:0px; + } +.shop_list>.list_head>.cell_btn>.tab_a:last-child{ + border-left:0px; + } +.jhgk_table{ + margin:0; + padding:0; + width:100%; + border:0; + } +.jhgk_table>thead>tr>th{ + color:#737174; + font-size:14px; + font-weight:normal; + text-align:left; + vertical-align:middle; + border:0; + padding:0; + } +.jhgk_table>tbody>tr>td{ + color:#101010; + font-size:20px; + font-weight:normal; + text-align:left; + vertical-align:middle; + border:0; + padding:5px 0; + } +.cgcb_tjt{ + margin:0; + padding:0; + color:#333; + font-size:14px; + text-align:center; + } +.cgcb_tjt>img{ + width:auto; + max-width:100%; + margin:0 auto; + padding:0; + } + + +/*new_group*/ +.content .new_group{ + width: calc(100% - 160px); + } +.content .crumbs+.new_group{ + padding: 35px 10px 0 0; + margin: 0 -10px; + height: calc(100% - 65px); + } +.new_group{ + position:fixed; + width:100%; + height:100%; + background:#fff; + overflow:auto; + box-sizing: border-box; + padding: 0 0 0 0; + } +.new_group:before, +.new_group:after{ + content:""; + display:table; + } +.new_group:after{ + clear:both; + } +.new_group>.left_tree{ + float:left; + width:320px; + height:100%; + margin:0 10px 0 0; + box-sizing: border-box; + border-right: 1px solid #dfdfdf; + } +.tree_tab{ + display:table; + width:100%; + height:55px; + border-bottom:1px solid rgba(157, 42, 102,0.5); + margin:0; + padding:0; + box-sizing: border-box; + } +.tree_tab>.tab_menu, +.tree_tab>.tab_menu:hover{ + display:table-cell; + vertical-align:middle; + text-align:center; + color:#787272 !important; + font-size:16px; + border-right:1px solid #dfdfdf; + border-top:3px solid #fff; + padding:0 0 3px 0; + cursor:pointer; + text-decoration:none; + } +.tree_tab>.tab_menu:last-child{ + border-right:0; + } +.tree_tab>.tab_menu.active{ + background:rgba(157, 42, 102,0.03); + color:rgba(157, 42, 102,1) !important; + border-top:3px solid rgba(157, 42, 102,1); + } +.tree_selec{ + background:rgba(157, 42, 102,0.03); + border:0; + width:100%; + height:44px; + box-sizing: border-box; + padding:0 10px; + } +.tree_selec>select{ + background: transparent; + border:0; + width:100%; + height:44px; + line-height:44px; + font-size:16px; + color:#101010; + } +.tree_selec>.el-select{ + margin: 0; + width: 100%; + height: 44px; + border: 0; + } +.tree_selec>.el-select>.el-input{ + margin: 0; + width: 100%; + height: 44px; + border: 0; + } +.tree_selec>.el-select>.el-input>.el-input__inner{ + margin: 0; + width: 100%; + height: 44px !important; + border: 0; + background: transparent !important; + color: #333 !important; + } +.tree_selec>.el-select>.el-input>.el-input__suffix>.el-input__suffix-inner>i{ + color: #333 !important; + } +.tree_input{ + background:#FFFCFC; + border-top:1px solid rgba(241, 237, 237, 1); + border-bottom:1px solid rgba(241, 237, 237, 1); + height:42px; + box-sizing: border-box; + padding:4px 10px; + position:relative; + } +.tree_input>input{ + height:32px; + width:100%; + display:block; + border: 1px solid rgba(239, 233, 233, 1); + color:#333; + font-size:14px; + box-sizing: border-box; + border-radius:50px; + padding:0 10px 0 30px; + } +.tree_input>i{ + color: #D9D7D7; + font-size: 16px; + position: absolute; + left: 18px; + top: 10px; + } +.tree_title{ + border-bottom:1px solid rgba(241, 237, 237, 1); + height:30px; + line-height:30px; + width:100%; + background:#fff; + color:#101010; + font-size:14px; + padding:0 10px; + box-sizing: border-box; + } +.tree_title>.gray{ + color:#999; + font-size:12px; + padding:0 0 0 5px; + } +.tree_boxs{ + width: 100%; + max-height: calc(100% - 171px); + overflow: auto; + box-sizing: border-box; + padding:10px; + color:#333; + font-size:14px; + } +.tree_boxs::-webkit-scrollbar {/*滚动条整体样式*/ + width: 5px; /*高宽分别对应横竖滚动条的尺寸*/ + height: 5px; + } +.tree_boxs::-webkit-scrollbar-thumb {/*滚动条里面小方块*/ + border-radius: 5px; + -webkit-box-shadow: inset 0 0 5px rgba(0,0,0,0.2); + background: rgba(0,0,0,0.2); + } +.tree_boxs::-webkit-scrollbar-track {/*滚动条里面轨道*/ + -webkit-box-shadow: inset 0 0 5px rgba(0,0,0,0.2); + border-radius: 0; + background: rgba(0,0,0,0.1); + } +.new_group>.right_cont{ + float:left; + width:calc(100% - 330px); + height:100%; + margin:0 0 0 0; + box-sizing: border-box; + border-left: 1px solid #dfdfdf; + border-right: 1px solid #dfdfdf; + } +.group_list{ + margin:0; + padding:0; + height:calc(100% - 114px); + } +.group_list>.group_head{ + display: table; + width: 100%; + height: 55px; + margin: 0 0 0 0; + padding: 0; + border-bottom:1px solid #bbb; + padding:0 10px; + box-sizing: border-box; + } +.group_list>.group_head>.cell_title{ + display: table-cell; + vertical-align: middle; + color: #333; + font-size: 18px; + } +.group_list>.group_head>.cell_title>.titles{ + color: #333; + font-size: 18px; + } +.group_list>.group_head>.cell_title>.titles:before{ + content: ""; + width: 4px; + height: 20px; + background: #8c2d64; + border-radius: 2px; + display: inline-block; + margin: 0 8px -4px 0; + } +.group_list>.group_head>.cell_title>.titles .gray{ + color: #787272; + font-size: 14px; + padding:0 2px; + } +.group_list>.group_head>.cell_btn{ + display: table-cell; + vertical-align: middle; + text-align: right; + } +.group_list>.group_head>.cell_btn>.btn_a{ + display: inline-block; + font-size: 13px; + padding: 8px 12px; + background: #8c2d64; + color: #fff!important; + border-radius: 2px; + margin: 0 0 0 10px; + cursor: pointer; + text-decoration: none; + line-height: 1.35; + } +.group_list>.group_head>.cell_btn>select{ + width:auto; + height:30px; + line-height:30px; + padding:0 10px; + border:1px solid #8c2d64; + color:#8c2d64; + font-size:14px; + } +.group_list>.group_body{ + margin:0; + padding:0; + height:calc(100% - 55px); + overflow:auto; + } +.group_list>.group_body::-webkit-scrollbar {/*滚动条整体样式*/ + width: 5px; /*高宽分别对应横竖滚动条的尺寸*/ + height: 5px; + } +.group_list>.group_body::-webkit-scrollbar-thumb {/*滚动条里面小方块*/ + border-radius: 5px; + -webkit-box-shadow: inset 0 0 5px rgba(0,0,0,0.2); + background: rgba(0,0,0,0.2); + } +.group_list>.group_body::-webkit-scrollbar-track {/*滚动条里面轨道*/ + -webkit-box-shadow: inset 0 0 5px rgba(0,0,0,0.2); + border-radius: 0; + background: rgba(0,0,0,0.1); + } +.group_list>.group_body>.user_list:last-child{ + border-bottom:0; + } +.user_list{ + display:table; + width:100%; + margin:0; + padding:0 0 0 0; + border-bottom: 1px solid rgba(157, 42, 102,0.1); + } +.user_list>.cell_input{ + display:table-cell; + vertical-align:middle; + text-align:center; + width:50px; + padding:40px 0 0 0; + } +.user_list>.cell_title{ + display:table-cell; + vertical-align:middle; + width:50px; + color:rgba(157, 42, 102,1) !important; + font-size:32px; + padding:40px 0 0 0; + } +.user_list>.cell_cont{ + display:table-cell; + vertical-align:middle; + text-align:left; + color:#333; + font-size:14px; + } +.yxry_table{ + width:100%; + margin:0; + padding:0; + border:0; + } +.yxry_table>thead>tr>th{ + color:#555; + font-size:14px; + border-bottom: 1px dashed rgba(157, 42, 102,0.1); + padding:10px 0; + } +.yxry_table>tbody>tr>td{ + color:#101010; + font-size:14px; + font-weight:normal; + border-bottom: 1px dashed rgba(157, 42, 102,0.1); + padding:10px 0; + } +.yxry_table>tbody>tr:last-child>td{ + border-bottom: 0; + } +.yxry_table>tbody>tr>td.gray{ + color:#999; + } +.user_list>.cell_img{ + display:table-cell; + vertical-align:middle; + text-align:center; + width:80px; + color:#333; + font-size:14px; + position:relative; + } +.user_list>.cell_img>.lj_img{ + position: absolute; + width: 80px; + height: calc(100% - 35px); + top: 35px; + } +.user_list>.cell_img>.lj_img>.img_1{ + width:80px; + height:13px; + margin:0; + padding:0; + background:url(../images/yhzt_19.png) no-repeat center; + background-size:80px; + } +.user_list>.cell_img>.lj_img>.img_2{ + width:80px; + height:calc(100% - 26px); + margin:0; + padding:0; + background:url(../images/yhzt_21.png) repeat-y center; + background-size:80px; + } +.user_list>.cell_img>.lj_img>.img_3{ + width:80px; + height:13px; + margin:0; + padding:0; + background:url(../images/yhzt_20.png) no-repeat center; + background-size:80px; + } +.user_list>.cell_btn{ + display:table-cell; + vertical-align:middle; + text-align:left; + width:80px; + color:#333; + font-size:14px; + padding:40px 0 0 0; + } +.zhfs_box{ + display:table; + width:100%; + height:50px; + left: 602px; + background-color: rgba(239, 240, 244, 1); + border: 1px solid rgba(244, 241, 241, 1); + padding:0 10px; + box-sizing: border-box; + } +.zhfs_box .el-input--suffix .el-input__inner{ + border: 1px solid #8c2d64; + border-radius: 0; + color: #8c2d64; + padding: 0 10px; + } +.zhfs_box .el-input--suffix .el-input__suffix .el-input__suffix-inner>i{ + color: #8c2d64; + } +.zhfs_box>.cell_title{ + display:table-cell; + vertical-align:middle; + color:#333; + font-size:14px; + } +.zhfs_box>.cell_title>select { + width: auto; + height: 26px; + line-height: 26px; + padding: 0 5px; + border: 1px solid #8c2d64; + color: #8c2d64; + font-size: 14px; + margin:0 10px; + } +.zhfs_box>.cell_btn{ + display:table-cell; + vertical-align:middle; + text-align:right; + } +.zhfs_box>.cell_btn>.btn_a, +.zhfs_box>.cell_btn>.btn_a:hover{ + display: inline-block; + font-size: 13px; + padding: 8px 12px; + background: #8c2d64; + color: #fff!important; + border-radius: 2px; + margin: 0 0 0 10px; + cursor: pointer; + text-decoration: none; + line-height: 1.35; + } +.foot_btn_box{ + background:#fff; + text-align:center; + width:100%; + padding:10px; + box-sizing: border-box; + } +.foot_btn_box>.btn_a, +.foot_btn_box>.btn_a:hover{ + display: inline-block; + font-size: 16px; + width:140px; + text-align:center; + padding: 11.5px 0; + background: #fff; + color: #8c2d64!important; + margin: 0 5px; + cursor: pointer; + text-decoration: none; + line-height: 1.35; + } +.foot_btn_box>.btn_a.active, +.foot_btn_box>.btn_a.active:hover{ + background: #8c2d64; + color: #fff!important; + } +label.radio{ + display:block; + margin:5px 0; + } + + +/*bread_btn 面包屑返回按钮*/ +.bread_btn{ + display: inline-block; + position: absolute; + right: 190px; + top: -4px; + } + + +/*data_portrait 数据画像*/ +.content .crumbs+.data_portrait{ + padding: 45px 0 10px 0; + } +.data_portrait{ + padding:10px; + background:#fff; + } +.data_search{ + margin:20px auto 10px auto; + width:900px; + padding:0; + } +.data_search>.menu{ + width:100%; + margin:0; + padding:0; + } +.data_search>.menu:before, +.data_search>.menu:after{ + content:""; + display:table; + } +.data_search>.menu:after{ + clear:both; + } +.data_search>.menu>.btn_a, +.data_search>.menu>.btn_a:hover{ + float: left; + min-width: 90px; + height:45px; + text-align: center; + padding: 12px 5px; + color: rgba(125, 123, 123, 1) !important; + font-size: 16px; + cursor: pointer; + text-decoration: none; + box-sizing: border-box; + } +.data_search>.menu>.btn_a.active{ + color:#fff !important; + background:#8c2d64!important; + } +.data_search>.search{ + display:table; + width:100%; + margin:0; + padding:0; + position:relative; + } +.data_search>.search>.btn_more, +.data_search>.search>.btn_more:hover{ + position: absolute; + display: inline-block; + width: 80px; + text-align: center; + height: 60px; + line-height: 60px; + cursor: pointer; + text-decoration: none; + font-size: 14px; + color: #8c2d64 !important; + } +.data_search>.search>.cell_select{ + display:table-cell; + vertical-align:middle; + border:2px solid #8c2d64; + width:120px; + } +.data_search>.search>.cell_select>select{ + width:100%; + height:56px; + line-height:56px; + border:0; + padding:0; + font-size:16px; + color:#8c2d64; + box-sizing: border-box; + } +.data_search>.search>.cell_select+.cell_input{ + border-left:0 !important; + } +.data_search>.search>.cell_input{ + display:table-cell; + vertical-align:middle; + border:2px solid #8c2d64; + } +.data_search>.search>.cell_input>input{ + width:100%; + height:56px; + line-height:56px; + border:0; + padding:0 10px; + font-size:16px; + color:#8c2d64; + box-sizing: border-box; + } +.data_search>.search>.cell_btn{ + display:table-cell; + vertical-align:middle; + width:140px; + border:2px solid #8c2d64; + } +.data_search>.search>.cell_btn>.btn_a, +.data_search>.search>.cell_btn>.btn_a:hover{ + width: 100%; + height: 56px; + border: 0; + text-align: center; + background: #8c2d64; + color: #fff !important; + display: block; + line-height: 56px; + cursor: pointer; + text-decoration: none; + font-size:16px; + } +.rmss_box{ + margin:30px auto 10px auto; + width: 900px; + padding: 0; + } +.rmss_box>.head{ + color:#101010; + font-size:14px; + line-height:1.75; + padding:10px 0; + } +.rmss_box>.body{ + margin:0; + padding:0; + } +.rmss_box>.body:before, +.rmss_box>.body:after{ + content:""; + display:table; + } +.rmss_box>.body:after{ + clear:both; + } +.rmss_box>.body>.his_list, +.rmss_box>.body>.his_list:hover{ + float:left; + min-width: 96px; + background-color: rgba(239, 241, 248, 1); + color: rgba(68, 68, 68, 1) !important; + font-size: 14px; + text-align: center; + border: 1px solid rgba(255, 255, 255, 0); + cursor:pointer; + text-decoration:none; + margin:0 20px 20px 0; + padding:10px; + box-sizing: border-box; + } +.rmss_box>.body>.his_list.active{ + background:rgba(140, 45, 100,0.15); + color:rgb(169, 4, 100) !important; + } +.conditions_query{ + padding:10px; + background: #fafafa; + border:1px solid #ece8e8; + margin:20px 0; + } +.conditions_query>.query_list{ + display:table; + width:100%; + margin:0; + padding:0; + } +.conditions_query>.query_list>.cell_title{ + display:table-cell; + vertical-align:middle; + width:75px; + color: rgba(16, 16, 16, 1); + font-size: 14px; + text-align:right; + font-weight:bold; + padding:0 5px 0 0; + box-sizing: border-box; + } +.conditions_query>.query_list>.cell_link{ + display:table-cell; + vertical-align:middle; + } +.conditions_query>.query_list>.cell_link>.link_a, +.conditions_query>.query_list>.cell_link>.link_a:hover{ + display: inline-block; + color: rgba(16, 16, 16, 1) !important; + font-size: 14px; + padding:5px 10px; + box-sizing: border-box; + cursor:pointer; + text-decoration:none; + margin:7px 0; + } +.conditions_query>.query_list>.cell_link>.link_a.active{ + background:#8c2d64; + color:#fff !important; + } +.conditions_query>.query_list>.cell_link>.more_a, +.conditions_query>.query_list>.cell_link>.more_a:hover{ + display: inline-block; + color: #8c2d64 !important; + font-size: 14px; + padding:5px 10px; + box-sizing: border-box; + cursor:pointer; + text-decoration:none; + margin:7px 0; + } +.conditions_query>.more_a, +.conditions_query>.more_a:hover{ + display: inline-block; + color: #8c2d64 !important; + font-size: 14px; + padding:0 0; + box-sizing: border-box; + cursor:pointer; + text-decoration:none; + margin:7px 0; + } +.search_results{ + display:table; + width:100%; + padding:10px; + background: #fafafa; + border:1px solid #f2efef; + box-sizing: border-box; + } +.search_results>.cell_title{ + display:table-cell; + vertical-align:middle; + color:#2d3846; + font-size:14px; + } +.search_results>.cell_title>.lab_sz{ + color:#fea400; + } +.search_results>.cell_btn{ + display:table-cell; + vertical-align:middle; + text-align:right; + } +.search_results>.cell_btn>.btn_a, +.search_results>.cell_btn>.btn_a:hover{ + display: inline-block; + font-size: 13px; + padding: 8px 12px; + background: #8c2d64; + color: #fff!important; + border-radius: 2px; + margin: 0 0 0 10px; + cursor: pointer; + text-decoration: none; + line-height: 1.35; + } +.ss_table_box{ + width:100%; + box-sizing: border-box; + padding:0; + margin:10px 0; + background:#fff; + color:#333; + font-size:14px; + } + + +/*portrait_page 数据分群-群画像*/ +.content .crumbs+.portrait_page{ + padding: 45px 0 10px 0; + } +.portrait_page{ + padding:10px; + background:#fff; + overflow:auto; + } +.portrait_page>.portr_head{ + display:table; + width:100%; + } +.portrait_page>.portr_head>.cell_title{ + display:table-cell; + vertical-align:middle; + color:#101010; + font-size:24px; + } +.portrait_page>.portr_head>.cell_btn{ + display:table-cell; + vertical-align:middle; + text-align:right; + } +.portrait_page>.portr_head>.cell_btn>.btn_a, +.portrait_page>.portr_head>.cell_btn>.btn_a:hover{ + display: inline-block; + font-size: 13px; + padding: 8px 12px; + background: #8c2d64; + color: #fff!important; + border-radius: 2px; + margin: 0 0 0 10px; + cursor: pointer; + text-decoration: none; + line-height: 1.35; + } +.portrait_page>.portr_head>.cell_btn>.btn_a>i{ + font-size:13px; + padding:0 5px 0 0; + } +.portrait_page>.portr_seco{ + display:table; + width:100%; + } +.portrait_page>.portr_seco>.cell_title{ + display:table-cell; + vertical-align:middle; + color:#b6a9a9; + font-size:14px; + line-height:1.75; + } +.portrait_page>.portr_seco>.cell_title>p{ + color:#b6a9a9; + font-size:14px; + line-height:1.75; + margin:0; + padding:0; + } +.portrait_page>.portr_seco>.cell_text{ + display:table-cell; + vertical-align:middle; + text-align:right; + } +.portrait_page>.portr_seco>.cell_text>.p_1{ + color:#101010; + font-size:14px; + text-align:center; + line-height:1.75; + margin:0; + padding:0; + } +.portrait_page>.portr_seco>.cell_text>.p_2{ + color:#101010; + font-size:30px; + text-align:center; + line-height:1.75; + margin:0; + padding:0; + } +.portr_box{ + margin:20px 0 0 0; + padding:0; + } +.portr_box>.head{ + display:table; + width:100%; + border-bottom:1px solid #e2e1e1; + padding:0 10px; + box-sizing: border-box; + } +.portr_box>.head>.cell_left{ + display:table-cell; + vertical-align:middle; + } +.portr_box>.head>.cell_left>.menu_tab, +.portr_box>.head>.cell_left>.menu_tab:hover{ + display: inline-block; + width: auto; + min-width:72px; + height: 45px; + line-height: 45px; + color: #7a7777 !important; + font-size: 18px; + margin: 0 40px 0 0; + cursor: pointer; + text-decoration: none; + padding:0; + border-bottom: 3px solid #fff; + box-sizing: border-box; + text-align:center; + } +.portr_box>.head>.cell_left>.menu_tab.active{ + color: #9d2a66 !important; + border-color: #9d2a66 !important; + } +.portr_box>.head>.cell_right{ + display:table-cell; + vertical-align:middle; + text-align:right; + } +.portr_box>.head>.cell_right>.btn_a, +.portr_box>.head>.cell_right>.btn_a:hover{ + font-size:14px; + color:#7a7777 !important; + cursor:pointer; + text-decoration:none; + } +.portr_box>.body{ + margin:0; + padding:0; + } +.portr_box>.body:before, +.portr_box>.body:after{ + content:""; + display:table; + } +.portr_box>.body:after{ + clear:both; + } +.portr_box>.body>.shop_list_1{ + float:left; + margin:15px 15px 15px 0; + width:calc(50% - 15px); + border: 1px solid #ddd; + box-sizing: border-box; + padding: 10px; + } +.portr_box>.body>.shop_list_2{ + float:left; + margin:15px 0 15px 15px; + width:calc(50% - 15px); + border: 1px solid #ddd; + box-sizing: border-box; + padding: 10px; + } +.portr_box>.body>.shop_list_3{ + float:left; + margin:15px 0 15px 0; + width:100%; + border: 1px solid #ddd; + box-sizing: border-box; + padding: 10px; + } +.dyfb_table{ + display:table; + width:100%; + margin:0; + padding:0; + } +.dyfb_table>.cell_left{ + display:table-cell; + vertical-align:top; + text-align:center; + width:60%; + padding:0 20px 0 0; + } +.dyfb_table>.cell_right{ + display:table-cell; + vertical-align:top; + } +.table_1{ + border:1px solid #dfdfdf; + width:100%; + background:#fff; + } +.table_1>thead>tr>th{ + background-color: rgba(250, 241, 241, 1); + text-align: left; + color: rgba(16, 16, 16, 1); + font-size: 16px; + font-weight:normal; + padding:10px; + } +.table_1>tbody>tr>td{ + text-align: left; + color: rgba(16, 16, 16, 1); + font-size: 14px; + border-top:1px solid #dfdfdf; + padding:10px; + } +/*固定页签*/ +.el_fixed_tabs>.el_tabs_new>.el-tabs__header{ + position: fixed; + width: 100%; + background: #fff; + z-index: 999; + top: 99px; + } +.el_fixed_tabs>.el_tabs_new>.el-tabs__content{ + padding-top:45px; + } + + +/*表单里面单选高度*/ +.el-form-item.lab_redio_new .el-form-item__label{ + line-height: 20px !important; + } +.el-form-item.lab_redio_new .el-form-item__content{ + line-height: 20px !important; + } + + +/*灯泡滑过样式*/ +.el-tooltip.item:hover i{ + color:#f9a404 !important; + font-weight:bold; + } + + +/*yd_box 引导页*/ +.content .yd_box{ + width: calc(100% - 180px); + height: calc(100% - 75px); + } +.yd_box{ + display:table; + width:100%; + height:100%; + position:fixed; + background:#fff; + box-sizing: border-box; + } +.yd_box>.cont{ + display:table-cell; + text-align:center; + vertical-align:middle; + } +.yd_box>.cont>.title{ + color: #333; + font-size: 30px; + } +.yd_box>.cont>.btn_a, +.yd_box>.cont>.btn_a:hover{ + display: inline-block; + padding: 12px 10px; + color: #333 !important; + border: 1px solid #ccc; + margin: 30px 10px 0 10px; + border-radius: 3px; + text-align: center; + min-width: 110px; + font-size: 14px; + background: #f9f9f9 !important; + text-decoration:none !important; + cursor:pointer; + } +.yd_box>.cont>.btn_a.active, +.yd_box>.cont>.btn_a.active:hover{ + background: #8c2d64 !important; + color: #fff !important; + border-color: #8c2d64 !important; + text-decoration:none !important; + cursor:pointer; + } + + +/*列表里面只有图标的按钮样式*/ +.btn_icon, +.btn_icon:hover{ + padding: 0 !important; + border: 0 !important; + color: #ce1677 !important; + font-size: 18px !important; + margin-right: 10px !important; + } +.btn_icon.icon-icon-test{ + font-size: 20px !important; + } +.btn_icon.icon-renzhengshenhe_huaban{ + font-size: 20px !important; + } +.btn_icon.el-icon-caret-right{ + font-size: 22px !important; + } + + +/*bqsm_text*/ +.bqsm_text{ + background: rgba(173, 57, 118, 0.05); + padding: 12px 18px; + border: 1px dashed rgba(173, 57, 118, 0.5); + display: inline-block; + border-radius: 5px; + margin: 20px 0; + position: absolute; + color:#333; + font-size:14px; + line-height:1.75; + } +.bqsm_text .lab_sz{ + color: #d6148e !important; + font-size: 16px; + font-weight: bold; + padding: 0 3px; + } diff --git a/usm-render/src/main/resources/static/css/main.css b/usm-render/src/main/resources/static/css/main.css new file mode 100644 index 0000000..b1b00a7 --- /dev/null +++ b/usm-render/src/main/resources/static/css/main.css @@ -0,0 +1,167 @@ + +*{margin:0;padding:0;} +html,body,#app,.wrapper{ + width:100%; + height:100%; + overflow: hidden; +} +body{ + font-family:"Helvetica Neue",Helvetica, "microsoft yahei", arial, STHeiTi, sans-serif; +} +a{text-decoration: none} +.content{ + background: none repeat scroll 0 0 #fff; + position: absolute; + left: 250px; + right: 0; + top: 70px; + bottom:0; + width: auto; + padding:40px; + box-sizing: border-box; + overflow-y: scroll; +} +.crumbs { + margin-bottom: 0px; +} +.pagination{ + margin: 20px 0; + text-align: right; +} +.plugins-tips{ + padding:20px 10px; + margin-bottom: 20px; +} +.el-button+.el-tooltip { + margin-left: 10px; +} +.el-table tr td, .el-table tr th { + padding: 8px 5px; + height: 30px; +} +.el-table.el-table--enable-row-hover .el-table__body-wrapper .el-table__body tbody tr:hover, +.el-table.el-table--enable-row-hover .el-table__body-wrapper .el-table__body tbody tr:hover td, +.el-table.el-table--enable-row-hover .el-table__body-wrapper .el-table__body tbody tr:hover td .cell{ + background-color: #f5f5f5 ; +} +.mgb20{ + margin-bottom: 20px; +} + +.move-enter-active,.move-leave-active{ + transition: opacity .5s; +} +.move-enter,.move-leave{ + opacity: 0; +} +/*BaseForm*/ +.form-box{ + width:600px; +} +.form-box .line{ + text-align: center; +} +.el-time-panel__content::after, .el-time-panel__content::before { + margin-top: -7px; +} +/*Readme*/ +.ms-doc .el-checkbox__input.is-disabled+.el-checkbox__label{ + color: #333; + cursor: pointer; +} +/*Upload*/ +.pure-button{ + width:150px; + height:40px; + line-height: 40px; + text-align: center; + color: #fff; + border-radius: 3px; +} +.g-core-image-corp-container .info-aside{ + height:45px; +} +.el-upload--text { + background-color: #fff; + box-sizing: border-box; + text-align: center; + cursor: pointer; + position: relative; + overflow: hidden; +} +.el-upload--text .el-icon-upload { + font-size: 67px; + color: #97a8be; + margin: 40px 0 16px; + line-height: 50px; +} +.el-upload--text { + color: #97a8be; + font-size: 14px; + text-align: center; +} +.el-upload--text em { + font-style: normal; +} +/*VueEditor*/ +.ql-container{ + min-height: 400px; +} +.ql-snow .ql-tooltip{ + transform: translateX(117.5px) translateY(10px) ; +} +.editor-btn{ + margin-top: 20px; +} +.el-table th>.cell{ + +} +tbody{ + +} +.el-form+.el-table{ + margin-top: 10px ; +} +.el-table .el-table__empty-block { + min-height: 36px; +} +.el-form--inline .el-form-item { + + margin-right: 0px ; +} +.el-table--border .el-table__body,.el-table__header-wrapper thead{ + border-color: #eaeaea ; +} +.el-table--border .el-table__body td { + border-color: #eaeaea ; + color: #555 ; +} +.el-table--border .el-table__header th { + border-color: #eaeaea ; +} +.el-table__header-wrapper thead th div{ + color: #000 ; + /* font-weight: normal;*/ + border-color: #eaeaea ; +} +.el-table tr:hover{ + background-color: #f5f5f5 ; +} +.sidebar .el-menu li:hover{ + background:none ; +} +.sidebar .el-menu li.el-submenu:hover, +.sidebar .el-menu li.el-menu-item:hover{ + background:none ; +} +.sidebar .el-menu li.el-submenu:hover .el-submenu__title, + .sidebar .el-menu li.el-menu-item:hover .el-submenu__title{ + background:none ; + } +.sidebar .el-menu li.el-submenu.is-opened:hover .el-submenu__title, +.sidebar .el-menu li.el-menu-item.is-opened:hover .el-submenu__title{ + background:none ; +} +.el-submenu__icon-arrow { + top: 42% ; +} diff --git a/usm-render/src/main/resources/static/favicon.ico b/usm-render/src/main/resources/static/favicon.ico new file mode 100644 index 0000000..64105ac Binary files /dev/null and b/usm-render/src/main/resources/static/favicon.ico differ diff --git a/usm-render/src/main/resources/static/fonts/demo.css b/usm-render/src/main/resources/static/fonts/demo.css new file mode 100644 index 0000000..3d9cbe7 --- /dev/null +++ b/usm-render/src/main/resources/static/fonts/demo.css @@ -0,0 +1,370 @@ +*{margin: 0;padding: 0;list-style: none;} +/* +KISSY CSS Reset +理念:1. reset 的目的不是清除浏览器的默认样式,这仅是部分工作。清除和重置是紧密不可分的。 +2. reset 的目的不是让默认样式在所有浏览器下一致,而是减少默认样式有可能带来的问题。 +3. reset 期望提供一套普适通用的基础样式。但没有银弹,推荐根据具体需求,裁剪和修改后再使用。 +特色:1. 适应中文;2. 基于最新主流浏览器。 +维护:玉伯, 正淳 + */ + +/** 清除内外边距 **/ +body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, /* structural elements 结构元素 */ +dl, dt, dd, ul, ol, li, /* list elements 列表元素 */ +pre, /* text formatting elements 文本格式元素 */ +form, fieldset, legend, button, input, textarea, /* form elements 表单元素 */ +th, td /* table elements 表格元素 */ { + margin: 0; + padding: 0; +} + +/** 设置默认字体 **/ +body, +button, input, select, textarea /* for ie */ { + font: 12px/1.5 tahoma, arial, \5b8b\4f53, sans-serif; +} +h1, h2, h3, h4, h5, h6 { font-size: 100%; } +address, cite, dfn, em, var { font-style: normal; } /* 将斜体扶正 */ +code, kbd, pre, samp { font-family: courier new, courier, monospace; } /* 统一等宽字体 */ +small { font-size: 12px; } /* 小于 12px 的中文很难阅读,让 small 正常化 */ + +/** 重置列表元素 **/ +ul, ol { list-style: none; } + +/** 重置文本格式元素 **/ +a { text-decoration: none; } +a:hover { text-decoration: underline; } + + +/** 重置表单元素 **/ +legend { color: #000; } /* for ie6 */ +fieldset, img { border: 0; } /* img 搭车:让链接里的 img 无边框 */ +button, input, select, textarea { font-size: 100%; } /* 使得表单元素在 ie 下能继承字体大小 */ +/* 注:optgroup 无法扶正 */ + +/** 重置表格元素 **/ +table { border-collapse: collapse; border-spacing: 0; } + +/* 清除浮动 */ +.ks-clear:after, .clear:after { + content: '\20'; + display: block; + height: 0; + clear: both; +} +.ks-clear, .clear { + *zoom: 1; +} + +.main { + padding: 30px 100px; +width: 960px; +margin: 0 auto; +} +.main h1{font-size:36px; color:#333; text-align:left;margin-bottom:30px; border-bottom: 1px solid #eee;} + +.helps{margin-top:40px;} +.helps pre{ + padding:20px; + margin:10px 0; + border:solid 1px #e7e1cd; + background-color: #fffdef; + overflow: auto; +} + +.icon_lists{ + width: 100% !important; + +} + +.icon_lists li{ + float:left; + width: 100px; + height:180px; + text-align: center; + list-style: none !important; +} +.icon_lists .icon{ + font-size: 42px; + line-height: 100px; + margin: 10px 0; + color:#333; + -webkit-transition: font-size 0.25s ease-out 0s; + -moz-transition: font-size 0.25s ease-out 0s; + transition: font-size 0.25s ease-out 0s; + +} +.icon_lists .icon:hover{ + font-size: 100px; +} + + + +.markdown { + color: #666; + font-size: 14px; + line-height: 1.8; +} + +.highlight { + line-height: 1.5; +} + +.markdown img { + vertical-align: middle; + max-width: 100%; +} + +.markdown h1 { + color: #404040; + font-weight: 500; + line-height: 40px; + margin-bottom: 24px; +} + +.markdown h2, +.markdown h3, +.markdown h4, +.markdown h5, +.markdown h6 { + color: #404040; + margin: 1.6em 0 0.6em 0; + font-weight: 500; + clear: both; +} + +.markdown h1 { + font-size: 28px; +} + +.markdown h2 { + font-size: 22px; +} + +.markdown h3 { + font-size: 16px; +} + +.markdown h4 { + font-size: 14px; +} + +.markdown h5 { + font-size: 12px; +} + +.markdown h6 { + font-size: 12px; +} + +.markdown hr { + height: 1px; + border: 0; + background: #e9e9e9; + margin: 16px 0; + clear: both; +} + +.markdown p, +.markdown pre { + margin: 1em 0; +} + +.markdown > p, +.markdown > blockquote, +.markdown > .highlight, +.markdown > ol, +.markdown > ul { + width: 80%; +} + +.markdown ul > li { + list-style: circle; +} + +.markdown > ul li, +.markdown blockquote ul > li { + margin-left: 20px; + padding-left: 4px; +} + +.markdown > ul li p, +.markdown > ol li p { + margin: 0.6em 0; +} + +.markdown ol > li { + list-style: decimal; +} + +.markdown > ol li, +.markdown blockquote ol > li { + margin-left: 20px; + padding-left: 4px; +} + +.markdown code { + margin: 0 3px; + padding: 0 5px; + background: #eee; + border-radius: 3px; +} + +.markdown pre { + border-radius: 6px; + background: #f7f7f7; + padding: 20px; +} + +.markdown pre code { + border: none; + background: #f7f7f7; + margin: 0; +} + +.markdown strong, +.markdown b { + font-weight: 600; +} + +.markdown > table { + border-collapse: collapse; + border-spacing: 0px; + empty-cells: show; + border: 1px solid #e9e9e9; + width: 95%; + margin-bottom: 24px; +} + +.markdown > table th { + white-space: nowrap; + color: #333; + font-weight: 600; + +} + +.markdown > table th, +.markdown > table td { + border: 1px solid #e9e9e9; + padding: 8px 16px; + text-align: left; +} + +.markdown > table th { + background: #F7F7F7; +} + +.markdown blockquote { + font-size: 90%; + color: #999; + border-left: 4px solid #e9e9e9; + padding-left: 0.8em; + margin: 1em 0; + font-style: italic; +} + +.markdown blockquote p { + margin: 0; +} + +.markdown .anchor { + opacity: 0; + transition: opacity 0.3s ease; + margin-left: 8px; +} + +.markdown .waiting { + color: #ccc; +} + +.markdown h1:hover .anchor, +.markdown h2:hover .anchor, +.markdown h3:hover .anchor, +.markdown h4:hover .anchor, +.markdown h5:hover .anchor, +.markdown h6:hover .anchor { + opacity: 1; + display: inline-block; +} + +.markdown > br, +.markdown > p > br { + clear: both; +} + + +.hljs { + display: block; + background: white; + padding: 0.5em; + color: #333333; + overflow-x: auto; +} + +.hljs-comment, +.hljs-meta { + color: #969896; +} + +.hljs-string, +.hljs-variable, +.hljs-template-variable, +.hljs-strong, +.hljs-emphasis, +.hljs-quote { + color: #df5000; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-type { + color: #a71d5d; +} + +.hljs-literal, +.hljs-symbol, +.hljs-bullet, +.hljs-attribute { + color: #0086b3; +} + +.hljs-section, +.hljs-name { + color: #63a35c; +} + +.hljs-tag { + color: #333333; +} + +.hljs-title, +.hljs-attr, +.hljs-selector-id, +.hljs-selector-class, +.hljs-selector-attr, +.hljs-selector-pseudo { + color: #795da3; +} + +.hljs-addition { + color: #55a532; + background-color: #eaffea; +} + +.hljs-deletion { + color: #bd2c00; + background-color: #ffecec; +} + +.hljs-link { + text-decoration: underline; +} + +pre{ + background: #fff; +} + + + + + diff --git a/usm-render/src/main/resources/static/fonts/icon/demo.css b/usm-render/src/main/resources/static/fonts/icon/demo.css new file mode 100644 index 0000000..3d9cbe7 --- /dev/null +++ b/usm-render/src/main/resources/static/fonts/icon/demo.css @@ -0,0 +1,370 @@ +*{margin: 0;padding: 0;list-style: none;} +/* +KISSY CSS Reset +理念:1. reset 的目的不是清除浏览器的默认样式,这仅是部分工作。清除和重置是紧密不可分的。 +2. reset 的目的不是让默认样式在所有浏览器下一致,而是减少默认样式有可能带来的问题。 +3. reset 期望提供一套普适通用的基础样式。但没有银弹,推荐根据具体需求,裁剪和修改后再使用。 +特色:1. 适应中文;2. 基于最新主流浏览器。 +维护:玉伯, 正淳 + */ + +/** 清除内外边距 **/ +body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, /* structural elements 结构元素 */ +dl, dt, dd, ul, ol, li, /* list elements 列表元素 */ +pre, /* text formatting elements 文本格式元素 */ +form, fieldset, legend, button, input, textarea, /* form elements 表单元素 */ +th, td /* table elements 表格元素 */ { + margin: 0; + padding: 0; +} + +/** 设置默认字体 **/ +body, +button, input, select, textarea /* for ie */ { + font: 12px/1.5 tahoma, arial, \5b8b\4f53, sans-serif; +} +h1, h2, h3, h4, h5, h6 { font-size: 100%; } +address, cite, dfn, em, var { font-style: normal; } /* 将斜体扶正 */ +code, kbd, pre, samp { font-family: courier new, courier, monospace; } /* 统一等宽字体 */ +small { font-size: 12px; } /* 小于 12px 的中文很难阅读,让 small 正常化 */ + +/** 重置列表元素 **/ +ul, ol { list-style: none; } + +/** 重置文本格式元素 **/ +a { text-decoration: none; } +a:hover { text-decoration: underline; } + + +/** 重置表单元素 **/ +legend { color: #000; } /* for ie6 */ +fieldset, img { border: 0; } /* img 搭车:让链接里的 img 无边框 */ +button, input, select, textarea { font-size: 100%; } /* 使得表单元素在 ie 下能继承字体大小 */ +/* 注:optgroup 无法扶正 */ + +/** 重置表格元素 **/ +table { border-collapse: collapse; border-spacing: 0; } + +/* 清除浮动 */ +.ks-clear:after, .clear:after { + content: '\20'; + display: block; + height: 0; + clear: both; +} +.ks-clear, .clear { + *zoom: 1; +} + +.main { + padding: 30px 100px; +width: 960px; +margin: 0 auto; +} +.main h1{font-size:36px; color:#333; text-align:left;margin-bottom:30px; border-bottom: 1px solid #eee;} + +.helps{margin-top:40px;} +.helps pre{ + padding:20px; + margin:10px 0; + border:solid 1px #e7e1cd; + background-color: #fffdef; + overflow: auto; +} + +.icon_lists{ + width: 100% !important; + +} + +.icon_lists li{ + float:left; + width: 100px; + height:180px; + text-align: center; + list-style: none !important; +} +.icon_lists .icon{ + font-size: 42px; + line-height: 100px; + margin: 10px 0; + color:#333; + -webkit-transition: font-size 0.25s ease-out 0s; + -moz-transition: font-size 0.25s ease-out 0s; + transition: font-size 0.25s ease-out 0s; + +} +.icon_lists .icon:hover{ + font-size: 100px; +} + + + +.markdown { + color: #666; + font-size: 14px; + line-height: 1.8; +} + +.highlight { + line-height: 1.5; +} + +.markdown img { + vertical-align: middle; + max-width: 100%; +} + +.markdown h1 { + color: #404040; + font-weight: 500; + line-height: 40px; + margin-bottom: 24px; +} + +.markdown h2, +.markdown h3, +.markdown h4, +.markdown h5, +.markdown h6 { + color: #404040; + margin: 1.6em 0 0.6em 0; + font-weight: 500; + clear: both; +} + +.markdown h1 { + font-size: 28px; +} + +.markdown h2 { + font-size: 22px; +} + +.markdown h3 { + font-size: 16px; +} + +.markdown h4 { + font-size: 14px; +} + +.markdown h5 { + font-size: 12px; +} + +.markdown h6 { + font-size: 12px; +} + +.markdown hr { + height: 1px; + border: 0; + background: #e9e9e9; + margin: 16px 0; + clear: both; +} + +.markdown p, +.markdown pre { + margin: 1em 0; +} + +.markdown > p, +.markdown > blockquote, +.markdown > .highlight, +.markdown > ol, +.markdown > ul { + width: 80%; +} + +.markdown ul > li { + list-style: circle; +} + +.markdown > ul li, +.markdown blockquote ul > li { + margin-left: 20px; + padding-left: 4px; +} + +.markdown > ul li p, +.markdown > ol li p { + margin: 0.6em 0; +} + +.markdown ol > li { + list-style: decimal; +} + +.markdown > ol li, +.markdown blockquote ol > li { + margin-left: 20px; + padding-left: 4px; +} + +.markdown code { + margin: 0 3px; + padding: 0 5px; + background: #eee; + border-radius: 3px; +} + +.markdown pre { + border-radius: 6px; + background: #f7f7f7; + padding: 20px; +} + +.markdown pre code { + border: none; + background: #f7f7f7; + margin: 0; +} + +.markdown strong, +.markdown b { + font-weight: 600; +} + +.markdown > table { + border-collapse: collapse; + border-spacing: 0px; + empty-cells: show; + border: 1px solid #e9e9e9; + width: 95%; + margin-bottom: 24px; +} + +.markdown > table th { + white-space: nowrap; + color: #333; + font-weight: 600; + +} + +.markdown > table th, +.markdown > table td { + border: 1px solid #e9e9e9; + padding: 8px 16px; + text-align: left; +} + +.markdown > table th { + background: #F7F7F7; +} + +.markdown blockquote { + font-size: 90%; + color: #999; + border-left: 4px solid #e9e9e9; + padding-left: 0.8em; + margin: 1em 0; + font-style: italic; +} + +.markdown blockquote p { + margin: 0; +} + +.markdown .anchor { + opacity: 0; + transition: opacity 0.3s ease; + margin-left: 8px; +} + +.markdown .waiting { + color: #ccc; +} + +.markdown h1:hover .anchor, +.markdown h2:hover .anchor, +.markdown h3:hover .anchor, +.markdown h4:hover .anchor, +.markdown h5:hover .anchor, +.markdown h6:hover .anchor { + opacity: 1; + display: inline-block; +} + +.markdown > br, +.markdown > p > br { + clear: both; +} + + +.hljs { + display: block; + background: white; + padding: 0.5em; + color: #333333; + overflow-x: auto; +} + +.hljs-comment, +.hljs-meta { + color: #969896; +} + +.hljs-string, +.hljs-variable, +.hljs-template-variable, +.hljs-strong, +.hljs-emphasis, +.hljs-quote { + color: #df5000; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-type { + color: #a71d5d; +} + +.hljs-literal, +.hljs-symbol, +.hljs-bullet, +.hljs-attribute { + color: #0086b3; +} + +.hljs-section, +.hljs-name { + color: #63a35c; +} + +.hljs-tag { + color: #333333; +} + +.hljs-title, +.hljs-attr, +.hljs-selector-id, +.hljs-selector-class, +.hljs-selector-attr, +.hljs-selector-pseudo { + color: #795da3; +} + +.hljs-addition { + color: #55a532; + background-color: #eaffea; +} + +.hljs-deletion { + color: #bd2c00; + background-color: #ffecec; +} + +.hljs-link { + text-decoration: underline; +} + +pre{ + background: #fff; +} + + + + + diff --git a/usm-render/src/main/resources/static/fonts/icon/iconfont.css b/usm-render/src/main/resources/static/fonts/icon/iconfont.css new file mode 100644 index 0000000..937bfba --- /dev/null +++ b/usm-render/src/main/resources/static/fonts/icon/iconfont.css @@ -0,0 +1,106 @@ +@font-face {font-family: "iconfont"; + src: url('../fonts/iconfont.eot?t=1541488616418'); /* IE9*/ + src: url('../fonts/iconfont.eot?t=1541488616418#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAACogAAsAAAAAQ2gAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADMAAABCsP6z7U9TLzIAAAE8AAAARAAAAFY8yk2rY21hcAAAAYAAAAHDAAAE2tXbmh5nbHlmAAADRAAAIyMAADbUOC+DN2hlYWQAACZoAAAAMQAAADYTVgV6aGhlYQAAJpwAAAAgAAAAJAgGBClobXR4AAAmvAAAABwAAAC0tOn//2xvY2EAACbYAAAAXAAAAFwpVTYWbWF4cAAAJzQAAAAfAAAAIAFIAXNuYW1lAAAnVAAAAUUAAAJtPlT+fXBvc3QAACicAAABgQAAAmNH+pZ3eJxjYGRgYOBikGPQYWB0cfMJYeBgYGGAAJAMY05meiJQDMoDyrGAaQ4gZoOIAgCKIwNPAHicY2BkYWWcwMDKwMHUyXSGgYGhH0IzvmYwYuRgYGBiYGVmwAoC0lxTGByeMbzezNzwv4EhhrmR4QpQmBEkBwDvcAz1eJzV1L9OU2EcxvHvKW0FpX+sxVqqFivW2gIhJCQMDLKJMQ7GODgjF8BNIBv3ghOMTMzcANNzSLgEBvy9fUgTFlxYPG8+Tc972vec/n7PW6AETIWlUITCMVm8I/sTs9l4forH4/li9jvOP/ExvjOtTGVVVVdDTbXUUVc99TXQSCta1ZrWtaEtbWtXe9rXgU50qjOd6yLP8lq+mR9eXl8d3dyAUEmVyUrtyUpDLd9ZaedfKz3IkcUv/MwXvk7Gt8n4zo874+c9A15G7aq8pUeLOd4zpM4TnrEQFS1GTd/QZ8Air5mhw1NmmY+71yjToMkrHlHgHRU+ME07av6C53QZxSOWH+i3/s/HbHopLNyeLaUcWdQdZTaeL1n0ApUtuoIqFv1BVYtOobpFz1DDonuoadFH1DLSZ9sWvUXzFl1GHYt+o66lnaaepd2mvqUdpoFFLtDQSNdHRrq+bJEatGKRH7RqkSS0ZqT7r1ukC21Yqpy2jPS825Z2u3YsUoh+Galmu0aqx56R6rFvkVZ0YJFbdGKRYHRqkWV0ZqTan1vkG11YJJ08s8g8ec3Sv1S+abEPyA8tdgSX1xZ7g6sjY/QXgpbZAQB4nJ17C5wcVZlvfefUu6qrurqqu/ox3T3dNd09756enu7OTDKTQEIekIfkxSMkPCTBBDCCCgGyOKhEQBcMAspL4YoK5gfIcq+AG71hWZBVWNFVQL08XLjIT3ntrvhzZbq436nqSSYLQff2dJ93nTqP7/H/vnOGIxz37iAv0EHO4rIcJ8AUtIahYoCUAxfTCivAJBYMAy/4D5f6QHj+zm+9wPMvfGvJRaOwYGYvffDKqx7g+QeuuvLBK2Hh6IWLw9o7nxegv+z/I7ngygfpbBsOPwq+8wl6J+3iTC7PVbmF3BruVG4n9ynuGo4reUUxC05iPow2J2GsLDniABTLmGy26jmIlwphfb0Q1tP/koeDz09B53nJG2bJJnaZiLtH7j+oh05/biF8HmJf00xTY0HZ1BosjQG5we/RTVOH/8MK5qTbF79f88xf7OO2sJoFn+3UA5ha+lBzmDL1MdYeAzg/aEnK+uVBe9Y0aPeGqX+VtcHgs522+IITD/aHEcfJuP6P0O/To96z/hx4uNFx3O86bntjGOxw9SqNKQhWh35QPdudoB5Xb7Y+0alnq4v1dqUsmiA6ecwshOYYpstVKDcxnWBlcOK9QwsAaoP7hyYBptxseX+0h0Apd0+huOTIVbD33qH5h6ogx+qgnMWqoUsKJ3Tvzud3d6/uvjw///LI/MjuBHF2u7XEburQLCwYundokpDJoXuGJv1XhQmejFj3dHs9ef8GrPsO63ESmyzwX+Xn87Rq3dvtgZc/+wPq4EeX5AFfuKF7d7ecu7ywcdNnVVm7JDkavyQJ7iVkIfIAj3vwO/oUTQR8V8Bd4KBm4eIVcLUsXLwCLrJXiOOfhX+NQqke96AQ9xqdurhHn4Lu1MzPU92AMR3EeGLm57DQf5gO+g9jvGpiAgR/ZAJr4SlWC0v958PW8HoY753wn4fixMQ98NTevZ0iFAI4tmmeo9PcF7lbuDu5x7knkC9FKT6SxS1ycXdxDzGBuxZIhribcAMpgd94fYRxXmu02cINxQRub1BXbzWZYJli33pjZBIwM1auYB+YwP6CukalXAkkjYRV3sgAOGK8KEqsDHsLajxJlIK3tpoJF6lLLFfKTTeH3NwaqQ1DURS8OSvIhmZhvoDPWpgvjFVwEQsknc2qXY4kGKohmKJidAmWKsiOZiiOotqqIA2ByPM8JlXNYgWCKpqCkTV1EdS4IRAws8bhPSiGEvQg2AY+IAnYg6jaSsWIH3pawRR7+uFFZ+ny6qOC0IHKgl6A3gUV/4kXe2tI4b1ExziVsGBFs32guQIwBo76j5AD7UV3q8p7x6ZqHzy2//bsnC4Vs5JQPnxu+LxgXTA78qOWnHlNrlLJ5XpxuJ1RY/wazwtgh8MOhm8lSGoR0rzIhD99mLrcAMqck7lPcNPcF5DuUeLGrYMSuTmaOCSfp+BQrmGhtPcabI+l+MHYKggo/GuhtqpjK6SpsA7JVCo0W40xJKoiynhPLLIYSQZ7LGHTsTKWik6iNSdNb5/5fiQWi+yLxKKpaCzybiQG0SQm9hmWNXQu1FfV4eEgPJcK7ZskkZYzXWUCggwSD4NHDwLw8no4TgRSWwSEx6VsOYTwR40SuOpVQZKEV0VJEg+maCIWaQ+zN87To1F93uEp8rNIrD2cqtTrlVQYkuteFuXsICGDWVlU+IjhDQ97RoR/BcQ0JVVL06IjhKbFsyVVllXpDEmT8MtxKvL0bfRFegLKfJtzuQxKfo+r4E5UufqhPWBar4UMQ1HmCMgoFZQ67hFievPMz7KVSpYOZ8uAwnbmZ3S4/Rv4sr/9iiVLrjhCTDdWumZ+Gj5Aq12VmatpFYuDD4sX4y8gExzvu/SbNMuVuaXcaoYL4rOa3CuWQ4XTCHV2FuqjCTdugDcOEHC9AZWgZcEScUrNsDKQrG68gNQhFeieL+hKTtG/oOgAunJYpv0o3HPs6YTEwIpI7QTguxYTG8AGf/+K08k4eVM6SWz/at/1YfPrI0pO1a9XIhHlel3NKRFyHjnzuLeiKkCCHOf/XjoDacOImzKWknMmXj535TDlAOf3A3odPZpbiXMbwzFVvEazNUXGhknRIA7OAkcdaFMUsEy8NVAkthiNxwNwNhqI0wZCIiYYUeViAfLH8eS0FbcU8l4zl2suW7mMRV6+cMuK00hXGQaOGihlATYsuqU8CjBv/TyA0fItizYAZEtYB+WfELL8dLIYIubswywyIzj/05fzfH+2MDBQyPbz/MIN5BWhWemfN6+/0hReIRsWHqoN9u51+hAtIm0t4Y5BwAflooSjZDqfSeF6gk1kEvU+g3RZcNkkEDE0LDcxBeUKTSAmC5aEzR+3u2GXBIve7Z8sWZJ/skx1R56Anux9oPIygBw/WYsCqKL0eLZnXHZ0Ku+BaPorUHE/meiFy1JYOQxV+C00BcH/kWRbVBzwl6aRCClBkfwNkkKZqd0p8BogXabhoX6RWrbkb4kkb8x4AF7mxmQE/um5F/xxrqO7H6H/my7kYshFDW458o/o4CTqo6jkas1WE3VS0TUIRijOsMKtsPeXRakDfXCvULRhroilYy1otoIlSIhkvKfHHkoZppdKy1LMLW/dwbu5Li1aHIqp8psWP3/gd90LXP+qgYHn440FjTh80k1s9q9KTiWfd124wO1+y3KJRXRydnlrJRajcirjFRa4pauiriSrsaFiVMtM/X5gPh+lbsK/auiCoefjCUS9F7gLiv5VrvtcaioJFyTAIq71e6s7mGuIBU7k9nJf5e5lGBEJsTmGIy+auFmNUHRKcdTTrITNEBl1FmUnXImVJEYXYjIeSvIWUrrLSlgvTSZ+GdL2pAGQEAm4UoVFKOIrCB6kSotFXgMBxEKotFwWNeqo2PPQciUW1UsHzRXG4sVhMjZFRnPEMQj9zamR5GJFOUdNKYv7q7HIjYYF1b7Fako9R1EWJyOnMjH717QpTNUimuOunlrT71WqJ1Yr3sDqqdVJW4vs3IkVyTXvU+EvWnsOIeesDcP0cMm2S8NjYQSvVfsXKx8wDOMrRqzaf/TBUWwxYjFjy2wT9ehOk6/gC/vXTK12nQ8ayc45Y7/u4Igw9A8cGhKLGH0z++DruOebuUnuPO4y3Pfbufu4h7mfMoxahRruvxfAeLb9Ib5rlqu0HFA4/rk54o7jbjMZhnuMvI4auCbVJLEyLFTKmMddIwnWA9PFCOOwKW4rCSqgjqiuZqO0RoXfDFAc4mII9ROz8hgO8ATcchTxjVqoApiAZ2YcyzOZwvIfWE8/RLaAqpFoQQeRJihdNET1tKKBDiuorJDMSDQmG0CyY15Pf++Jg/19xMvYfFQQVkCxWFl57KKRFBBdzCaosBx7kEsC4UGtLdXTEZFmeNGUCGyB+HD8oZnHMj09GTqR6QHomdknaZpEJ2RVldsCRCNXRiwLAxRRf01aIStkKsga8Hw3kKFFIkq7WJ9FthBFBCOWcDN9A0MnHt/jZdIo6HXQUrGxuMifBijZ0tVFx64q9xTtPuxiM8iOlKGCZIBuLR2VeYHyZcrmACsSPaL/Zzg45AybAP28Ks88xkbNxv6NcFxsWPexQLcALP3vwuhgadgosPdRoR9NfomUZXFpxB2DKDWP4lZxJyFFDQeQzxErDH4xIEb/ihLEKyhakRqwkB4hDTGvWl2K8MjJZHrTaecDckT1P8nmBp+XVFU6QprUoboUn6pelunFpzL+rg/Ow480U1VNzX8HA0zOxgF//RJxcIWLoO03xNVwNcaR16YYEugIUw9ximcjKmNmyyzVU0f0cIKML9gU47RueeyHBpXn4i9OPq9K/y4rcDfZefc7M39MFRAPpaiaKhRSmtzukjVNJi/L2g+3b79rxw7/0e3bv7R9++mKpimrJyaoXUi1X2BNSSFVaD/EiuHP7BF/AEb9f4a9/s4LLvj5z0P78Cf0PlrjNESSVW4+tyzYx8qsq4jOkceAXMi0/ShjcsRlw4GLwYDSnJ2S5qSJtPNaSq/d+dEvUfqlj27eTcjuzUHoczzOrPBv31x9zaQEWlSa9+llN/w6RzRa8/9nMNiViq4rc9IwTq8+++yraRDCE2TXSSftIkE480/EkO98ijbqohUBoTpCv3+jrFygxzQtpnciLsBoD9Mf0ClEy4iQcQOYECowGqwXLEaIDasQ0Off+I+UWiX/kUyplIFJTMJkV08PHAiirv9aydiB4fHv02sR/+W4fq7FLebWcOdyn+du4G7ivoV0UBAPbbNVscYqRdx5j8lAF19uoz0bgvWxsovSsDOm0aYwm2Dq1Asa1VkjwWPWdWAW4cbMamfWkHlpBuCDaish7zFx6tZdT6jhfqHaR9GccGG///t8Npsn8/PZESAInRUCGEP8OX9jwDnfxhDjQzl/SZCyGGXNf5qln8Yk3FjdkuuBFsOkPdnNI7FUKgab7CRA0j5iTdsb87w0pLyWdtxtwIPof0MAEGCTiNgqlyePsKH516dgrUyp3J7EsZELQI8y2B7Vb5JRQun6dj3K4ssPlh/4jDrazZBt96j6mVRsGXshBu9f+kLa88aKqJ42f+R89u5lLMD9ZX7V/bRIF6G11YUsg0BPOrSlroWarzSaB6tgtZpUVOS33zZyUZ1oOnPTif4fFOlX/tAvpUXiffep0ShdzkzCmQctmb4t3Erebmu3CiEfvkKfpGm0kI7lNnFbufORTpmdUGh0MBVzfIQ4LB6k5gKlRiF+5CzzkiAbo6XFtDtToag1hU7BaEIIyCLQpMju21C4PXm/Zhiav42F9/tPquYQGmPLW63laGgMQWpo3vvnxtvfg23+Taugf/EAQCYpimle4N0uWAUDR2NJEBT7ocutJzOYBXe7HoFthv4KRhDByNiG0XZ1SZV1t7xVXaKu+bSGuWWELMOc9uk1c+rgl/f7Z3UPDnanyowkyqvyg4P5Yn//fAiK5HKqe5D5Kd79HP0T3YXWMePMD3EXc3uYBMD1GakFptYkBORvhazABEPgGmPW80gN7WcIXAqVDgceci+4BxPIli5jt/kBQApWMhHYD2OV4Q47drzwGNpznPD0H2b2M1HqGCDQJYzcZvYLQTbn0iVYA7mZZQdUw1APD/71UPo4NHMiKphS/lNr4UPT3WJU4BnW2bF0wTjZuW79TgKjA8d82N1L1i1auB5g/cJF6+gu7P8S1sElwTt3s/BClr8weKdLP+vm/N2RONuWeOTzOCD8flyLhCWX84JqgLHiBOztWIOwNx59ip1Y31y3k9Kd65obM6mtx8CO8G0L1xOyPvAXoYzcTRejnulCPXMMdxxKSW7uEQVFYgyAPgP9TeHgmkmB/sRlFMpjjIADIyyBaySJxQqj7lZitMWcGIRbuY2QbSuDMGpXx6olxymFEfyOf+b225/h4dxNySr8oZrcdG57Q7q+acHknskFm1IHU3Cv/5Qz9YWpW0dHoUK2rgp7XLUVARnrq1Fl6BqjzdgX9rjz3tErRvF7b2xqz65TUvg5Zf7k53Zhh+nUJv/lj7vu/xgN7S76W3oyN8F9grufez3UsAwQMD72QhqKHyl2ciQQ38ymRpLBBUIdMUwmIdAGFbSmZuOQTsP8APOo4DP4aI7ErSp7IwP68dCHX/ZCpB8WS4EadxKB5YqIPweBBTxFGN4fK0sBsSLwH2Y6P4iDvkPgX2RuDSmwhRn2H11I6rhHdTch0u+Zw9n2xalh27TSZiJhpt8b2uWBLrIHm9i2Em/IqqW2P4GBbJuua9rvDWVBsFSyhzVZd5agCGbRjKSkYssBwUyrBq+uw8LsiK1qgsKrKu8YObPcm3SGk8lhO9lXzpm2aJPjnR7TLtuVMsZuXu1SFZ5XhIIjrhKIWg4UD68kFxWVjIkoOi3iO6XTksO0brrg2PZwsuLmXPj44UE5OVzBaeCcya+SwzOvszGyCZVxXRLw8SA8lzU8B5NuRYkJihpMeOj1lQLPC7KqS6nkeJFS1VbtfvMsReQjsTiOwR6u4eCHnb5EJW8YtqAqkmqbTivO82cIEoAkqFkja9gVu8y+PWaiTxdPY71QKqi8IVvlyaxCBEorPL8q2sNxCInefZreRFNcCTHrQkR9G7gt3Fncx7iLuE8jdvlKSKPljmfeZYadEzjo2Z/EKAbrmP0ecjDSspMoVUJwKAXAkD3PRGGLlTKHVw6QUCiDh3/JInhPG2YiNgIyb6CA+r5XAdI7fMHQYHxK25gXeSA2oULxnM2LB2QwFeAzPZMra0cTOLpaW0KO9t/sGn/wo/XTh6J9J1W33gXGPb8VCvwvbnvCOmkrdGW6cjn4qMOsh0zG0S0rFY1+71AuaVm+hdm+dDqOmhsr4cdQKzEwWKrB5sRk30T/EFTHLu8Rek6M444ooMSiO5zo4sFJjZelWu+8lAFHjYwdRRbVRxc/a235CCST2UQCTm2v4l+957an+Xh27O6zxj48ZI2cM/6x/SQR2hwroyk2lnYROnk2lKQFXz4s24+DSEBPqwfDGsdJuK8P0sfpco5iWut4iLPM02PVK/grdeKWVbdomC80CnD1Sy+Nn3cebHz55fHzzz//JQxmXkbIPbMP/t0fH4cNL7WvGSfcSzMv0652lnx7fOb8cY6+++67n+M5ups7j7uOuxXf0azXRgNSSTAHLyOSBHMPjCGlINkEImxsmEi18kFnQSLPvEq1uBR4EJhMj0sOs5LKqJQZgTESC76kGTgoypUaI8EG9sk8kQYwnxTzPwX+iSq0ZuMEPjqGKiIkJbi275hSNp/oMp2kq6CccGQr0yURXssLUkTL5qqrNw1vuDFOgVCRF0i8ontDw+O6mV9gUgJujPCSGPEThCoxJIHJgb6ubFTQkbdyWEV5CkB1clnlrEpes+/U3JyuVHiSI7QStSjNAbGWl9fmy+udWqlUQ+O8qGiJrurkyYMbyoZuD/XpCVmmpplxZTkStao75p195cos8Ofd4fVGYzE3YZrigpoDasxJirzaU5GkM1Ml1+mPnSGKqixI6ZglyykpER+yKyOCrlu2YUR68rv8peVy99rSnXouoakViiKbjYhAjlJrhaPneredGiuNlkqjHV/RNNqy00g7dmANHsUt4ZZz6zjO9uJomzaYOmkE4BPzaNfWBc9i3njmxGc2az0eWjINdjYsMaeSGHiNoFnGjWkxj19NYp5v3HXnp3v3DgLy7h99NVce3Lt3L/nROObbJ/EiDO4dLOfIt3Jlc118Ku5fJ5DlQsp6VhJgpwPtH1TWjJ31+FlfOvsjOwSdX8/DsQvgCzdL8gLSn795wTkLLL8sybJ084IFN+f7CRaSmY0JkvB3COILVko4lgpwozvuRy86PrfjhbPvuHDHhTwIG3k9PNfq8I+AFr3FJbg0WnWIxNnRLTtJQbapM0BtISgpsOMTiaHrDcgYV4/PvIycMd7eCD/0x9lvHmz0vz2Ppcgt+2bOJy+1NyL7bCScP28e4fa9NO/8fcwJbeE7D9AD9KjABvcCK/xU7iPcdu6T3GVoQf4v7jHuZ9zz3Bvcm4yPGUUzEO+IrjcMs+nKHLtbmGuPz2lDmecauQIhLqrrgNtQatcZX44yZhxtsuO1juz1SnOelOa8FcIz2dCcDc4qDjuVDa9aeKVZ/zGT31Vozp6FkNGpAEzMomDkaGyHzVqNpsTkQrzmJJjrHRm8Qv59kxqJqJuUSCT3VZZiQV/7SXY+Q+qY9n/hv8nKwcKw8geWZIGjei7PO30TfQ7Puz2qTGRBBzqxfoKCLsgAn0I4kbVtA+7/GXvm8KB9jc68XTq5T7ciMTQk+/LtNXl2rpuHD7NXw8VSTCKStEGKmfJKMzt2zKpjxnK5ILpt6akAW5Yt20LIlr8jsgg8ezmfYWpBEhSQqAJmxMExRi6FiB3Brx9mPxVG051SuNbtUQjvTPT1TTg8qD1uPCHKoPW3Wv0ayGLiHLvLxq/TaT8dPu6jIRohdzAftH+HqusqnFIYBBgstINYV3hFj0o4+pi0UTTi8tUeDjobTgGj+WTLMjaDU5cu2/KfgNgCZ0DRBM8Qnk93MayhJhOKwDAtx9EY+SNySZEb4hZ1vH913FWkHWnEZschLZQDgdvXBDuB21xxW7S8EApuQrLZWf9CCE9V7MCBDF+SFEW6iLnqLhoT+Mc0eu2FkqzBLk2Wd3+Ras/wD9z/D9cQaZv/qzNE8q+6gBrj1Bd5zRD+TRSUiwhZB4qhQhC0H6AXSRF4/ELZAXDkC/15Eekieu2558KjqnTGGZLqPwCapJNMW4woov+mFCNF4EI7/Bd0Hx3o2ItruP0o/RwxPKac9WAHNzsa4YF2x1Ts8IAJdbYAAwGEQWsxcXg65EYIdaMUF0NlibBZrHSgVYu9hmHz8BTJTYT3M1irUG4GODtYr2EI0Fcl0IuM27ygl0Bj4uIzXVmuiAd0RsLzh8iSofksbu9nMSssZsiSDPN3ZNr7Md4wzXxuRwpgmaxoKhIANVLLjzs27miKrqVSa9euzlg8aIqWVLscRO1i1BSImAE7lnNF3lPiqpjNRrJpXnGyhuxQ5qghih4veiIlg7yoxbq8eQoarADEMBER81Qg17G3jgxOAEwMtneF8RArG0ozN2iaXBHGN7J54Pf6Q1E4tWMEVYuIjsxnepetXO1KBMcDRE5vWLu6VkSdrZpJydForlsvFtWE0iuk7JxGSVokPNF1MWLJVm9Sl+S4pGlxKkpK1CCQpUha3niW0kFEm905zY5JPAnPt39Cr6Qy10S7djXzEJUrwVngFLsYlSMmMMJgUCTEMkziseNDNzhKY9KWtWAcMdYRxQi1D6Hhv7dLpv+f2SwcF2/m3on35U3QIRl/Rbaj8v/NER356Z3+nP9dE7uN9kYNyTElw+z58ohXLFr91YGo5xVHuiqVVm/viGGiTb02h125+GA035t4J9eIvyKZjvRKrv8dtwA6YV31m/6fTTPCyg3TgNuh0LO5x8IPRoXv9jZ68Tt7vnQ7fY2e+T73z4507BNyiwdzr0cdfix0sP59nnf/wvOH6j/jv1aq1Upgl9hdFv9xJ512wHbSaNA5xMHKEYCREjg9c6odm1Xb7df//5+Fr0Otp1PT47+G8ZfT+ISdYXWOk/Y/coT6TFA9sy2oDl/gv14Kq18PX82G0Hn+yA1m9+Vz9O/pZVyS6+bqKMvm494snvXuB19pjs5uWQiv2TU1tK/suUcTwTGvVUKQw26tsROKSiem10aHUpmxeLlf9aOFIYChAnmOxebXUsXITbHeKxSx3S3KqEFesyMvtEfJ19ub4dV16/5m7dpL8btuHbkpUe9KDlnpGHt45hudTnZo/ZsS/fbNEW/m96KiiPRkUXnBiLVvuGzdzKVQ8X95111wh39K4Fd5in6VjiBm6gvOXjiGS0NqCEApow7EpXOnOQzBwbPLbsTYbBbHrV0bjQPEo+0dYbx2rVcFqHrkhiD2r701f+mleX87/MHXXx4cpCNDrPGyaCIRJQ/hI2j8ee1lnWce8qrtb9zafeml3S8PkuP9+WwvpECn7KcLEEsOclPccdwJ3IeRR7jDr7cxJcOuuQQKpHTw5DvOjr5noRMZY86XQLei3mQoWoTDwN4hmBaqmlbQG1z4RraCE8+SbdkyxLpj7ZveQLMCSG3D4rK3fN3pYTRSnKp2pcYWLF443JVKuwvfMpVdajytXag5/sX+k/hEFOoYPreNJVmwvshSLEiz3p8I3/JtVvjt9hjE8rHibPdLT6iOYAw3zr4Ao6lkOuXXsf90XN2lZuJkYyxv2/nYPvxhah/rAFgQ4PLw7kIO13AEV/FYbmNg1YZHJoEbLW55hx8tU1YQXjAbAEtix2sI4eOzN4wLEJ6uBEcu7pw0fbHbMtvTpnWbaXWblmXSAxju/A/VhBfB0eoHpqfpoplpVCoGYD1E2i/CNGvnB+GcNCwiQQenYf60ufVoBHBYfBpLTfv4B4tOCxrCtJWz8HsgjDo2yRt8H849inZZhuvhlgZ8bBKmVwhaVwxBIBBosRsX7GIFw94uAn2hw+HhekwBAva511JHE6LECycD+HeDQKN/WARPlU8vedDefMXGUwgMblj41gmPx2r20o1LY37DfyONYMFLkdPTHuRycMxY+2tjSwhZgvscs6wY+c4p2NNdaFxFp96Cx3vAK5/myzXsiQ5vOOrNjefHYktPWBYbTUEx3f5aqqcnBWssfNK/b+wYwN7I6RhjvwG/HKAiXYQcruCMU8Gt2hLOuETdIbBdW6IFdjFHKIpua6RekDzacs3gCgn+yDf9fz7vHZD8ga1vrf/VHhjoFZKO/xM0nMsocQtvdO3v3i/gT8MfORna/3H1F2PwU/DrF5LPfcXOA3Tb2sX+VX9MvX3G28m3N2Lc2YMn6TdpAbVciAxXcpuRg8VKiQnKVqnpCsGZaEmwhJKFmNZyJKxFNgzO1+oJV3AOphmkOFguscSoi2CwzA5uxGLnPC4ukppA/TsUBU5WZGhJvGyI/r/434VjYS3SruLfKqwB/RIGeVgwpu/SALRd+nWg7WGFezQ43kK1CHBVFPy3WMJCjQp0FMhPBA32quITongXbxg8/81/9D/7yCNwjIXboQlP0j+zrpYdHoB0MPkmWFdY+N0K0XXrotGt7LLA1mjn/wEepg/TJYFX8US0Yn8AR8NqOBm24WoFWiW4fh7cBw019yETssaAkesFshoJtobYB62FZp1dn3MQRjNA64XXUuLBlRR2xsK8gqyIydJys85OB5zWMDQb7FYTsn+AqoODeIPlg4sqccdNMMiVDX3emGdQG3sLsHhwrQmZpc7AWWOszDLBvxcYhN2MijNr1THDC18mwUKvyO63lUNTNpDNzOnRrDTKzNHOxoWPs0v07LZUo9lpwMR3PdFC87s+RVrBwN1gHPVEp9YJLWM3nkN4XC8VAgPrPafscy18EvMvNmKQsO61EhhCdyQW4GEYyPtfjhm/NilAfzfsQSztLyf014RQAuKvBXJ11BaFYkqWUsDHI15cluyo29XlGnFJdrsJeBlBjHd9HS1Zy7OSCId5STPtmpWRqRlVkpYnUIVSnRiWZYiSEDRSdIUQOWONRjMybwStLAG3wYq6YOdFKoiqRWmJV2lUNxBqgm3IpoPbospgahZV+R6ej/IETU9eNPUYD05O5HkCUpTHKnxMkkUBkD9McExRFFUdTEkUwdCjWFuiNKqh/U3FvAP+I/4N7DgTdmD4yXe5IM3CgRdZkgUxFOZ/sNxE9FbLRaVj+G8Htr7WPQBE/7Fhtx/BlK4qOjmd8j8iAPyPBf9xdkZui3JXr1hwDYudl+vD84Y+FhWAdLuZEvCFoTNnJ8+LYkRWLUMScYF40bAUOaqgbW2NWhmJNyw5ZXlRoFSmlK1j0IwttknDVVxq2jhVnO/cCYpEzCH2xPXkQdSiuKC4cFEecVe4MhFNEAVc1uBBymtylFd4fNRCw17AtbGB8DEtKhJKO/uh8Lgfs8sqPAdG3DTjxt8aCQO/f9vJcnP/tyDHFblhRJjL2W2HOHL1QQJtzL3jYrFLPVYhvAcuBv+nUwqLw0bC3Ax91v8QbHQTCXcGd8W1YJv/oWjSteh3MDc+cxs9rb3ccnt7XXCwuOhijBUYX3QXVCqAqbtcizzAHm2vsFzyQPtG+Jhr/dDFzw8t91+SUX9b0O9Nlovl/tNBpt9y2bzQqNtHpufcq+YY+m3UUT534gaG7GbPbJ55SBn6LHV+ZGDDLza8y2EALAX9G5/e+C7XPz3tPz09TTZg/Ivpafyyz77ZALh+f3qAfWbvpn4K1/eiwC/IEA8HIiclOLfJtcocLXMVTGBW5Ght7v96YVhjF1MDlwXmRfY/HZMd3D/reCP8s/5vkFnyzz4D3YLgv/jMY/6fBAHkxx4FGfN/OqOnH8jW41ZuJdBfWrWZQNTVgF56yqZLKYiWHoUt906sBFg5Mc5CepHo/+bZZ/wXsYvuZ56F/EwL+3r0sbCvxx71/wSPJldVV55JyJkrq6uS+T0nsHsQgL1hn8GtXR1O2DNIVo6PryRBiEvw/wAO7+naAHicY2BkYGAA4hSTPM54fpuvDNwsDCBwgz3hBYz+//+/DosmcyOQy8HABBIFABmWCvIAAAB4nGNgZGBgbvjfwBDDUv3/PwMDiyYDUAQF6AIAhRIFOHicY2FgYGBhBWIGWuP//0lSXw2lMzHlAOwAA5wAAAAAADoA+gG8AgoDNgP0BEwEvAUqBZoGEAcKCDIIugkaCY4JvAqsCt4LigxODMwOFg8CDzgQIBCiENwSNhKiE7wUOhUGFXgVzBZuFuwXZBeuGEIaOBqkGugbanicY2BkYGDQZUxnEGQAASYg5gJCBob/YD4DABi5Ab0AeJxlj01OwzAQhV/6B6QSqqhgh+QFYgEo/RGrblhUavdddN+mTpsqiSPHrdQDcB6OwAk4AtyAO/BIJ5s2lsffvHljTwDc4Acejt8t95E9XDI7cg0XuBeuU38QbpBfhJto41W4Rf1N2MczpsJtdGF5g9e4YvaEd2EPHXwI13CNT+E69S/hBvlbuIk7/Aq30PHqwj7mXle4jUcv9sdWL5xeqeVBxaHJIpM5v4KZXu+Sha3S6pxrW8QmU4OgX0lTnWlb3VPs10PnIhVZk6oJqzpJjMqt2erQBRvn8lGvF4kehCblWGP+tsYCjnEFhSUOjDFCGGSIyujoO1Vm9K+xQ8Jee1Y9zed0WxTU/3OFAQL0z1xTurLSeTpPgT1fG1J1dCtuy56UNJFezUkSskJe1rZUQuoBNmVXjhF6XNGJPyhnSP8ACVpuyAAAAHicbVALb9MwEM63rcnaJhkwxmO8n9uAIAoC8W8mB7nOda3d1TmR+NdzTmAICStSLN99z2QvGc8s+f+psId9HGCCFBkOMcUMc+QoUOIIt3Abd3CMuzjBPdzHAzzEKR7hMZ7gKZ7hOV7gJV7hNd7gLc5wjgu8w3t8QIWPSeode3YZW9LfvqiyJ2t6Z41hZdeUy8g3HBr6qeno39liZvRO247kSzcy6ihrSdkVqZR+ONub1DeOe31Yk3LXMsk7agW+1SSEp3Fn6Wwr98Au7oSG7afPX7+nS23XmiaivOI8Kjb8208EVSIZtI302m5pOry12reTEJ2WvayaG5vZxlmR3U2jdMd2zUXDqhM7Zhndz0PMFyEtl9fyH0YDdL6LRsf7JJCAB8lGF7GJrbgYepndMC+mf6Iu8jHDCC7ixopqNcQ82PEVn0h1QcjMyHgpDmplj2v2ZLX31UZZZfRG2zath1KzUazKWo4kVTpSlzGp9NcwBbkV/m+aS5eO3SXJL9iWvcEAAAA=') format('woff'), + url('../fonts/iconfont.ttf?t=1541488616418') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/ + url('../fonts/iconfont.svg?t=1541488616418#iconfont') format('svg'); /* iOS 4.1- */ +} + +.iconfont { + font-family:"iconfont" !important; + font-size:16px; + font-style:normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-sousuo:before { content: "\e649"; } + +.icon-unie63a:before { content: "\e6bb"; } + +.icon-yingyongguanli:before { content: "\e61f"; } + +.icon-suoshuzhiwei:before { content: "\e622"; } + +.icon-yingyongguanli1:before { content: "\e70f"; } + +.icon-gerenxinxi:before { content: "\e665"; } + +.icon-mingxi:before { content: "\e689"; } + +.icon-tianjia:before { content: "\e6e0"; } + +.icon-iconyg:before { content: "\e630"; } + +.icon-shouye:before { content: "\e626"; } + +.icon-biaoqian:before { content: "\e619"; } + +.icon-xitongpeizhi:before { content: "\e638"; } + +.icon-iconfontzhizuobiaozhun0258:before { content: "\e6c9"; } + +.icon-fenlei:before { content: "\e605"; } + +.icon-shuju:before { content: "\e664"; } + +.icon-yonghuguanli:before { content: "\e617"; } + +.icon-icon-xinzeng:before { content: "\e635"; } + +.icon-shenpi:before { content: "\e666"; } + +.icon-icon-test:before { content: "\e61a"; } + +.icon-zuzhi:before { content: "\e672"; } + +.icon-yuangongguanli:before { content: "\e610"; } + +.icon-monitor:before { content: "\e790"; } + +.icon-tongxunlu:before { content: "\e60e"; } + +.icon-huaxiangfenxi:before { content: "\e73c"; } + +.icon-zhuzhuangtu:before { content: "\e701"; } + +.icon-quanxianguanli:before { content: "\e641"; } + +.icon-rizhiguanli:before { content: "\e632"; } + +.icon-zixun:before { content: "\e600"; } + +.icon-shenhe:before { content: "\e687"; } + +.icon-yingpinzhiwei:before { content: "\e62e"; } + +.icon-tongxunlu1:before { content: "\e8fb"; } + +.icon-biaoqian1:before { content: "\e61b"; } + +.icon-fenleiguanli:before { content: "\e628"; } + +.icon-tongjibaobiao:before { content: "\e60d"; } + +.icon-ruku:before { content: "\e606"; } + +.icon-renzhengshenhe_huaban:before { content: "\e62d"; } + +.icon-business-management:before { content: "\e6c3"; } + +.icon-bianji:before { content: "\e62a"; } + +.icon-zhiwei-:before { content: "\e612"; } + +.icon-tubiao-:before { content: "\e62b"; } + +.icon-guanli:before { content: "\e6d3"; } + +.icon-gongzuohuizong:before { content: "\e614"; } + +.icon-shuzhuangtu_o:before { content: "\ebb3"; } + +.icon-yonghu:before { content: "\e601"; } + + + diff --git a/usm-render/src/main/resources/static/fonts/icon/iconfont.eot b/usm-render/src/main/resources/static/fonts/icon/iconfont.eot new file mode 100644 index 0000000..734244a Binary files /dev/null and b/usm-render/src/main/resources/static/fonts/icon/iconfont.eot differ diff --git a/usm-render/src/main/resources/static/fonts/icon/iconfont.js b/usm-render/src/main/resources/static/fonts/icon/iconfont.js new file mode 100644 index 0000000..b4f31e0 --- /dev/null +++ b/usm-render/src/main/resources/static/fonts/icon/iconfont.js @@ -0,0 +1 @@ +(function(window){var svgSprite='';var script=function(){var scripts=document.getElementsByTagName("script");return scripts[scripts.length-1]}();var shouldInjectCss=script.getAttribute("data-injectcss");var ready=function(fn){if(document.addEventListener){if(~["complete","loaded","interactive"].indexOf(document.readyState)){setTimeout(fn,0)}else{var loadFn=function(){document.removeEventListener("DOMContentLoaded",loadFn,false);fn()};document.addEventListener("DOMContentLoaded",loadFn,false)}}else if(document.attachEvent){IEContentLoaded(window,fn)}function IEContentLoaded(w,fn){var d=w.document,done=false,init=function(){if(!done){done=true;fn()}};var polling=function(){try{d.documentElement.doScroll("left")}catch(e){setTimeout(polling,50);return}init()};polling();d.onreadystatechange=function(){if(d.readyState=="complete"){d.onreadystatechange=null;init()}}}};var before=function(el,target){target.parentNode.insertBefore(el,target)};var prepend=function(el,target){if(target.firstChild){before(el,target.firstChild)}else{target.appendChild(el)}};function appendSvg(){var div,svg;div=document.createElement("div");div.innerHTML=svgSprite;svgSprite=null;svg=div.getElementsByTagName("svg")[0];if(svg){svg.setAttribute("aria-hidden","true");svg.style.position="absolute";svg.style.width=0;svg.style.height=0;svg.style.overflow="hidden";prepend(svg,document.body)}}if(shouldInjectCss&&!window.__iconfont__svg__cssinject__){window.__iconfont__svg__cssinject__=true;try{document.write("")}catch(e){console&&console.log(e)}}ready(appendSvg)})(window) \ No newline at end of file diff --git a/usm-render/src/main/resources/static/fonts/icon/iconfont.svg b/usm-render/src/main/resources/static/fonts/icon/iconfont.svg new file mode 100644 index 0000000..adefaf1 --- /dev/null +++ b/usm-render/src/main/resources/static/fonts/icon/iconfont.svg @@ -0,0 +1,158 @@ + + + + + +Created by iconfont + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/usm-render/src/main/resources/static/fonts/icon/iconfont.ttf b/usm-render/src/main/resources/static/fonts/icon/iconfont.ttf new file mode 100644 index 0000000..9464d7d Binary files /dev/null and b/usm-render/src/main/resources/static/fonts/icon/iconfont.ttf differ diff --git a/usm-render/src/main/resources/static/fonts/icon/iconfont.woff b/usm-render/src/main/resources/static/fonts/icon/iconfont.woff new file mode 100644 index 0000000..1912f73 Binary files /dev/null and b/usm-render/src/main/resources/static/fonts/icon/iconfont.woff differ diff --git a/usm-render/src/main/resources/static/fonts/iconfont.css b/usm-render/src/main/resources/static/fonts/iconfont.css new file mode 100644 index 0000000..8221f5a --- /dev/null +++ b/usm-render/src/main/resources/static/fonts/iconfont.css @@ -0,0 +1,301 @@ +@font-face {font-family: "iconfont"; + src: url('../fonts/iconfont.eot?t=1548143859040'); /* IE9 */ + src: url('../fonts/iconfont.eot?t=1548143859040#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAADX8AAsAAAAAY1wAADWqAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCNXAqBpVCBgHgBNgIkA4IgC4ESAAQgBYRtB4c3G6lPZQRsHACEY19JEVWraBTlVCjN/v9LgjwkJNULvtsR7kkjSAgSepcBPdJpYuq+3ku++idc2grqf0g4esTDPOUgd7hbdIcLWrZC7onD6i/NTSv23kOSosnD//v37899cJ+kgCqtD3P0v+xZNFlRU2RxqlUjH8WS03cfGxp9BHw2AndV0+xesKoGBBGFAL5ECwdsOmR9diq/2cpvQGA4kDhhQ4DI8uCcdnaaEI6U5IDsNnWoMwcLpAgC9tin+fn6EOlWs7tpu2m7CS0QSoK0GroggSQQShACidIkKAmHWBoJHqdEpNoObAfYYkewYD8FNep5WPAOGzZQ7KePIZ74183ltOzy144MyLVKP4VX+rP2raX12yufpL0iHoaDUABMAPv/05mN3nUzLXzDwoFlCnN/pe0AgxqplVq0vRAwCBZCIAjxnXF5fnnwvlEXagi5TYaTRQAP/N+r/Cj8xW9EcgIUozXez+gYm9Zy2dOwVKYSc/9/VfVXQMWl004rUnKYMuZ4WFLamG3EfSBFPjxS5gOpyI+QE4Fwg6AkBKjkEG6VTmVKrVNpeJQLIboQrmTK/2JKadOv2x//9odt8Yf/vT/Gne2fB7BpZqf8fkzlQzTtlod4GeDCcyYda1xjq9HvuMALrCTaBf34moRag+alfQeOnVOtkNyUkO7fuXVFtTekCCRJdbdS8WRRl35Rqs6+zR5j/Ey/n17EVpMlU+aSb526uf+6XY+tn8zLL43O58Lfw00gfooc8yjI36lcyl6TL1vzFGurfm6RHcBdu5RmH3sBAdOIl8Bhx5ELd0LefAUIFipcpBhx4iWp1qBVF6jbkClr9qIlNkRrmKIr+uKqcCe8CB/Cp/D7LyrqUuvTfz59aWOagBkOvERgSiF/QdlV6rTozDWR9/m/kMwkd3V4mHktvJW844NCH/kk+zNf+cZ3uX7K55d/icdBSzrN67NFrTWbzZiwy16DOozYoFCt1GJAu0122G2rFW0WDelxQJcFVZo02ynZZr9G01ZNGtevzrAxy+qtN2qjbq0y2/XK7dGgYk6NWVPW2UeqwP56yK+r9sHrd9WU18MBgCUCRidBwjxBRh9BwRYCRS3BwBrBxGaChRkCxwTBwS7CDnsJRwwSPHQQzhghXLCBcEdBCFBNCFESU9BCeGGA8EY74YtNhD92EAHYTQRhKxGMFSIUbUR4WyiNBIaIGPQQcThAxKOLSGqbIpUAVYQUTUQqmgk5dhJpSISibdg0C9hPKNFI5GKaUGGVmIFJYhbGiTL0E1rUEToME0swRjRhmWhBPbEB64lWjBImbCS60E2cRyvRh4y4iu3EDfQSvyIn7mEPMYYG4jUqPIEwxxM2angSj1metGKKp/9gHS9OnrIPHLKP/EL6i77vGP5T0s0ee7cyNeoeizfqZEp9WbWKWrlG2aNwSDFfxlrOVLUamiglxKxDrIpbFb29UK9KcVAeIrZ0iVW8kBcpz2eqpCFZlpEmbOmDVUhxIpmXirCKzEohld9MMXrEOdUU5hHbsGPR/I/1BqYTaW7q1mGSKZeYEyje229Y8hSGRIctBMyumcu7AqSIfRiSz6FZSEsuzdxnqZkSzfhYTCRa3Tr3vM8kedu0GikunRnyiXpbsC/V1CzEYKXew/tqNYeSoUziiZQMJfu6kGGaDHt8xBUNJExcKnwsmc5pLJVz+7Pn0/3UY299o6n09KO6y6b/60mYwEIqQKctKkR+/QntUHes55PT6gKfdemlSjHVB600uliZP1r7iBr5RKQVbbq25ToasZxKSfk4yUWQhLpHPwxuYKkFTAmvVFhAxUamPbnyxcRL/d5RRxZpVNfbHLgOByuVhHhd0V9xO72y7jFF/2OwRuA6a5s+W7h7D0fBx3ScSB1BYhCaWgIKs5TomEgzWskCqg10iGV18GvbczjvStXpdnoOJQbqu48GCpuWs5LHojmM28TFKHIdcDGRNtMGwU4SdJNR2wZs5RpZCLZ2oKlIRXtJa5bCo4MVZbZRmJwovT1aDra6BrEtRA6nkdce5m1+cShmJYU3rhVarHdf1xjIFaMRTxt7jEk/7muUMYDmYbEXt5ZElv7XwHwnSld7elzo9iYPVxMTpbAVN3mfQ7QhS1hunzxb0qk7RN2bo0/7jqAvF8LBwB2/p5QC9VkWDR/crR19cob6kYRO3cnku17Kbfm5QsdNkjxwYE7BZch3USCzDAjiRW4Hso8AjT46YxQXbM5KHU1QZ4vw02kJGWHui+ixRuT0cxsI0H35dwAUc15kMFRz6gx48FGl9i8Vs/jpIHwm4unAjzHCuT6uxqbSBZruxjHtxJo3l8f+6my3SIZjvrA0A3maoSa5ZtJ+nvKYkmisdXy5gINRoNqQdbwj1/LMU7pqCttsCZygo/k20aCwnaPgaDhTOj3UzoBAoJtiUmWKXqqbWbhFhLyUjW7SzPqgm+FXRVQQauvptA2a3SRdpuGX2zq+mFxhwXjc1kfVNkEhoGllRY1buMK0qeiNxoxTws3YlENNi957EoFJYiPZoE+rZJpdNgCXaeFLFdVuh03u/InA833wPUVjBhuhFqeF0IzU4BBZ6ep8efpgueWOFm7qiO6FYW32e2zwzg9quEjtzUG2dsmhWfyJmf2sQ0c8kwSZS7pzgi/iXLETooBInYLWsseIEeH4KEYtPtpmU8lMRk1MumL67BXTCBiaeq73gvT86SnePFvsVWnA4PyjgumY4ueNqWT0ZByK8LViLS8d5CUuoakfw3UvHJzDmr7w9hFRx4eCH9swv7C/QSc2QrEXp3tqGm6FBboEG9FMlbgFFPzPRomJxG01e1H4f7NCkBzVXcA8VJeNnQh6Yg/QRBKKhbr+YzLN6FY+U9jPgUUUSLi5rEbAbK1KpMnRWoQaKAyfgRkoHSOe5GsEgmpwYmoCZh3FHmab7IRiRoac/xrkiLIX2X2jRZFRbZlNCqIZGpPkNSyEsVU8lQaDQ610PwsJPUQayVLP+aV+/jWt+QrPKrlqkHyGxUkxdH2L8OZulpibgJS0MzfC/4V+nzu/pBG6LmtMIqAYplcMxbS07skusvPzD/6tzzjOxAQCS7s3UynDm0Xjzd1Xnnx4iVdtjk6Lz5B2WHn51/Uxd27PXXJrj+S+yAgJCYpYSTfPVW5DpSZNboe5fykiwdCMUWB29I70U3QNrpn+pmbS8lrHIDlGY2ohyhRwx04UltQqzgy/37oDBMmjwvRAM2I1BDzYVyMl1kI5jweyaPoNz+R80BbK3BuliAjcZ3t4hk073GWnSFM+NEUJZsDf+uNNSQhEb5bgam61xyr0nR7iV1wmb9HOGiD/YwDtAM1rGkcQUbZ6caGOgs31me/wH/qFbgzpD8RYzhQTYbyyNGNUOqXsahNecYjq0GAtQFXgUG0gKGuDlSnNF9yXdLte4xu0jYkGtyxL2kECiKwJmyd3Oqc+l7cMXpEUVhfhaHzxcfFLtaycRos3x2mKulqO2jWj7lfHVC7/cPCNf3DPjp6UpvpqMRoqiOZCc101bNjS/79g7Q+u/3ePhZ3AaAvJkf//9uFnC/r5nM0Pkl8jURuaxdFZGaoqWt3U0Y/UNFkYn3Guv5vnaltBxWfdoQqn7groVGT47C7vsKKBYiwXP6NZeGtwymkO1HjkFg+MxeGr0Z5nyk++UapUXy1htURreavlU1h+p/XmgzvSSXgNt4UPz0/7TQ8fJzIaa8VvLEHUePPx2DrjiXHuYULZKGmKnVeDsz4+bOtRUlfR3MtMu4EErJZoZbvRmKhD68n4xe6ko5atVb/Yie6qmBVBLa3ghiWysDT2BXZHg0/XovAwkQ6FpfXjYOHbIycRe5SeXxKhkfZ9ssZCGYCrm2LUQOa9cXsmYQ8IuXJu8Z00+NQf/Xj1g0Dw4ZWNjwevx3e/O3Y1QXrN4rJ7ojfCJz5b9whSeGh5w2Pxa8Fd74xeRXcBLwTCfiCOfB3NKfPxG+1VOCvPBC8lrERIDCfmKS0peqvhf5Yq1ofWVKoSVQyvdF8m+om50fkBySJ+seGTQXR5nVzR0QOFdmGApaW1K0OhbwHVLYy35kXNwrK26aOKKgQ6uQZ1EyzcU7UWO8+jgyCDG/PdSMg4DaHAkhN1pskQACLZkWfxfmUGhdYYwic0rTJQNibSO5wDVEPWeXlie6HB9q0o9L9rUJGO7Gq+4u06AT/wX8RULMJTQ9Z3ocRF++6kQCCHxMiDtInhUCz4IvLchCwV3LxCbghtoC756J6iSMIsbM+1AtnQnlrmN4wzhcj5kxDL2YdW4ugY8Cvt45u5Q4wJO1466NBVXed/UnHGXZUuDa60hMaWmCsiNUAOk4EcEu6YGJ7g8jRWoqOs7Q0X+710uch53BVcDskDK+QlTBO+3RI6JC5UzLIwMZNzgfce2sKZ0kDihw+TqPfBmS5uvLMGsg0jpGnUww3PSFS4UDlDulGZhmQnKsrmv60D1+yM5FGgWkKGnmOyiTpVR1IW+syLrZQl/jKKaQ1mp7VrH2pG+yLDHSWYlsivXkNhcob+B/LLIsEAgR1b6msgDVw+14VhDHly9DUObEM9UKNUaz43JxukM3v4CS8OPHV4ZcfFTzgVktmDQIEmMoqZ3jyIMBqzt9EVwFkN2jPGni+IuT10TBFtvCKr7OCsbb9MEFgjK4TZBmm+xhxzpW/SFMd0OVcvhExpRMQBA9gOvYTbvZsfdHdc2VE9xZfybSchBEiMyTILBXpdoWje8FCFNlyfZDk/LYRM07tluNp5adl76S1vEV/zyopqg4CkDtMuXZqkYEHwPgz8xkQuoP1872ZLb1X/SIdp532Adcr+RxrBfelFq0kvvXo5oMEbQVHi9TAo/errgRI+xdr3OuLNh2tyq/G4vxDdYsbjLkfmWh/4GeVQdvBcuHbZbiBWdnI99OzvGxm8iAHsPYxdCgMCnPcarbOFD5UF1vQb3/ALCX4g93H9z4eNv9JJFv/CN4E0uSjonuz1tHN10X/NVxjszyBQOmaSzovmin9SZzic9Pu+HI7XuTxwDgZazZaHXBgOMD269pLXE0FuybzOZuXLfL1ZQgzE9aMbdzIbviK59M0igavoN+duJbbewFnZgokKNStlnFyUpocCNkUdbLskbo7K4UWRMflMsDzcSj7t+tDgKwk459N9mVc2rU/Ik8nGbBIC4lezqBQf1jOSvnjhw+hBUZil9lPafZ5d2dh9zYdzqXfHmlPKNLRisRw6Ba6koHSasMve6STvvvIUqvdQqzEadoKTn77XXdj21SD7DW4ur8FGMqGqxZt8jMbg8z+VbsLFZd81xT8x/YVhTPYNyWDsdluYTV76qR1UZjUJqK3EmDOKoe+OdwacMqQSe9Jc2anIhuxqdcXc1z2JGv6SE9khW67aa4fn/o9gTyX9srjcmSYOfZ24dJJ4mzP7NJ6gmS2rnCUTBczPfqYDPVAImktCRCBx2Zj2aQX4Q2yz4XZnd3YK/uGwsWT8QqsVAxA4icGW35WvIsouE5j9QIJatL70FcFU7BQGox+gpO9RlK9rlg3Em8oCWumbDbfp9xZEYugeERxjMIegkVRLNSt/sONShAc/Xv+sou2fGoWCZNIlueZ0msUWejkLL3y26ZZeunrFLD/53aUMm6nPZUV6ffVLdXO/75WM7mpQfUrDHZY/Xb1ts8rt8ScL7q+Uktfsv5cAdQlai3Bk7QDBIfowDhBHucIcR4qnQZJQzPViYXs0/OiYUjSou7khtG52dP9SHL4QxWGMQRRbi4ValjA/UfC35DM5j/r0MAfmQ8P4tS0OPuYdW5+5StbLxKB0JYtry21xaD5cMxvv8ZSzlepoTtTlQrnkMxv1RGL8oLId/k2rWWrxZkUQyvFkpdJShyMvmRr3bd1xyjauwF2Istm2qUqKK0kj8KRRacmzQ15c6WJo8FTCsw/g4hmqmHwuVtaANm/Ya0eYGGCBE5rl+3owOdatxIHYL3lkYHNk6sB1lQYbNQ1UJYw3GYhZqOlGw40FcVTc1NhGbWcEkRjwpxnyHV4c+huiwOXHHBos4SGkz54fdDtexEnjkHSY29EjvPT/ulAqjVF6NgIeHGhMKfV3btoIyWqv8h6bd1XSNjtQfCRq41jiwsxGEksbpDVDwlMdqg0FSj9gp7098F8GASALKjT0gq2zyTopUfX0E+reKJpqaYROjgyvsyRxhQJ7WomzsD+6qCcNmQJvXyZ+JhH8VCMzqr28FiKUmeykom9ntCnUR9egR0fUVZt3s2Nk/h+Oo62D9WEkajdZnh8lXrU7tVsYiJo9Ydus3BGD57LGTL6kWjWo5rRXTHZlbUXCXT+sst2t/6ot3GN5pZmKOYarq/KngjS5yqQYdYxVKvAQ4+oH+nz4iK+j8HGfEMb0dP4XO7VG5XM+E4A188Me9565k4mg/jAfKNVUIB6Nx60oEyypjimzaa11XFkzZFpST/eubP1S2ebaHMkv5M2fV7wG5OERaV6wCHXyrrXH+FBjXrI8SoFP4sRiRHc1iDHomh/qF9N8lq10Ra7orX9xOlpn7v8p6SCnAuag4R/uNj18hK2817mLH7I60sTpquJ/Z/91buL1iqPd1ZrvXcPfrk9fU7YUjEzM/tuyU5VBmCTYCW972WKG8AXTLryDOchOUiCbqEOiDadGgGqXecopiD1tfVkfKJIlQME7Fd0Rxrft4MC2F+bsJN0o5bfiXC4sUcCb0gXMejXosnNUsi5VYY5WFSmXXLr65Nero/KjX4vnZW5PK4+Lw++9eplVfM2AZZ0zzIYgAGrITomgDioaAjWW3oT2pT22gCzxrIu/O7YtJ9SVrGYYu+niODPNk0w61bSB9zZtVK806KARMXegRvzwQgYLC5BD+ALcBnbwvD0ekTYFgqYY9YPxLjqTdzkQtwTkR3kdJSw8iSCuFJRKU0qnpSCedc68LwYrcRQr+mQYb7Y2VPNBGI+UQ6wdDIk5m9vyXeS4O5y9wj4sBCLwnMz2718N5zs1P32Ynj7QXX7hnUB37Eh+fT3iwsZs4cTs1MxQiJanwUiYFqZP7doSTu7aHG4MtvG45WVNFDf5iCA8IBvi24LgQwxzBxTfFXa5YNKyndrQk2PscHZOui0t6SR0h6roPQooBNq/M0HlaBNOD7opLMqgXj4ZZKBUcOunaz0J6jwf0WQi64noB+0F2mVWX2i6GHZpoJJk2knxd4lxOGMgtqSsGSSYyMsma/BSXtH+KMwX9CsxhZ5c88pcSWUU/gE9YDMmKevMyjuNaQmi+PQQS93kkbxy4FS6iWX+yeV0QcI0LakHN9OGjZLCU52G0MI6oWOXtQySLnpm1IOsBfbRVSspp0FBvdvYTVqmT04KOZu8krIdSsjVODFH+Eac+bRRoFoFrWJLYWLT4qay6bcBbSQJivAVeMZq7DJNNFAbs7oPPTd1lSVsAIDBV6SRp6wSOvong266COguZhaoa83MyEkNd2ZnMnmtUZDi2H8UCm7kJc6BvFc4us9B8vJ1j8hR14sU9GGu8A8nVrxIgSBFBhvK8WsREOCHNhYToFMf4iFxF6mt7YMZcomzsqvLLPaGxanamLUdNJG4zmXAF7b9uIAA7DCOgB5Mld1KO5enFipzHcH1SRM6J2SGcV46+38f6vlDKAoJ5D+G+ugmwB9dsvUsmNoEjqzk9o+IxOkLrpTt/RH4mYtuBlKhWW0LGBPnHKAVhaUh6qXfwHSkskgdX1ojzm6ZNi3JVw+SSQdGnx1EDiDPnqVNH3w2eoAkAdV+9lOnRv2uh5vPnm2GW+AzZ5FmpOXMmZbs1c+eAcSuXXQL3VCv1ZSIxHxTpAljC2+E4WUYIxUUSziew4hgINXfsLjrwt1vGA3d5W7RIRjd+WNAY+xkMBD1ea0eLhmBvi0zJsj0jnT56IGehw2iZ7BB7iB2Bh0sPMO4HOB9lgbEbVDhPLNgqKgQahND1AGHqXe0j9BBtJAlFAZ/p9Zxb3PUYrGWM8LVoTg62FrY2s/tx4K1I39OFOs4oxydOFHNHeQ+Jc+JLX9MuW+hMdoLu3wSLTO4Ixxt4wGdO7odVfuMxEzDQmoFpG1s1EJlUKdg7eNLr15IzDT27Z/wOlV6PCHlgkNlKbl36ha/LGURsF/teszcxzjGYBzvvzzIOMoYcXAk38jt/5SIH2Unux0VcN0lFUGhd1Zvv3nWMcbTSaSbx/0+DT/WBTjurXOFnrMHTUGenAKOeShdvQNvfPstSw2+1tRMqCaqLttx6n/19WPquIL61TcO3qz5dgYRYbPKgXqXgmkgAUoBQprN2EYb7SO54wLbEuMShYFCyzsRG3c0jvTrUFtcW0A80sUH92v9H/jfvx/wIKD2/tMqxQYlL6262S8APY8B7DxHlS9PlatWKkXmAOk28+Uqbne5q9vtXUqUmqPewTLVkdKELOoisKmG/Ycv+QVg3ZjYPwBclEWp0QhOF8Lpr+hzXk9AT61fgHuDCKU0fHVU+o5Fi8AhS3WB7b1DvCSkID94MduRHbxkNrck2Pog+EH66sjy8sg6kOYI5JGrRQDEcO69Ayrdmm+sKkgGDtGfOVjoh7ByoMe+oVvo70R0i8NH06g/uw8sA3mclP+zh+nwjC6uLs09w3gYN33RKSO8PL3ghIjz5VnoyLUuf7oO6E3LTM9QwDt843oQgCibToqw2WmPO4fSXubX3z+Xhm1WfMeeun+oJWL9ZkFr1jxWg0mxU/+3vDfvOMTcHLxFrtiWN5Z2f4B9soDZLnmUxkFf/8wa5IiGZ/WhtCmjs+0q02axiti5eu39rDg086M8tDpdUUOKm6v+0Cno4lqFTkxfNkWVKOZwNzB18XomAExDfLkodGwRoDKoYBGDvMZX55K4ZLk8W5xdKlks6wGEV7yTWWwGGZIl0Ukp6bQnVOJJnEGW7vjESVYNAJJEw2MuVqz6j/eEx9jeixm8y20vsD4aQevDbNlbKIHewgC4mO9kt7Pb+udm0c63vmi9ibK+wLoCUwdm7+P+35YDj8MRanLLDKrLchekbV4MFQ5//PP+/9x97LGOrVKooACSIuONi6uDqNIE+ij9uNlJAlVSHby4cRyBpAUFki91uuK4DhImwbwLsccew7DxbIyYpWLzjqDbnFgPCwpvEwq8M59HESqEFN5l+hzmbyZrX1HKKSCwcPfxQj5ENlBoc+JZ8IXkCzAzfmnum4xssjNCsKwQTIKhuOg42AKK2e4E4kxpmfsbWYeVk3+jlGM6cqkzma4D2ziIPakOdtXxQ1y15mCzihFCV0P3lgSHBLs1/SD9oUkidaliyzWKE5IDghhNz7otaJ/RzdiHblmH9tPc0D40Zv2omwF8hH2oG60fBSBu0dE0SDMHSre68wBh1sIZH+wpEaUPJbg3057lA0nlAd95La8n5lMyZgYpvQGvjpw00ofvYHUwePkCyDw0i25xstBnDZnHFshkTQ7AoUkqTfr8BOHModscbfTSrqg5HIRd6limT+MI62mmofUPrEnIoY33BTgran+UOENeqtmIiQEzTMhs1RRYwjtX66wIYKK/8Ce8KUIuBcYErRtMBAZTuEJSZA00eO/Y151dp0d3rnOgwrRu2gbzFcBUh6igyntgcGfKPXlJg46W9BmCW1EYbQUw9DkJ1TaUTCGfCY8CoPS7DXSLo4VuKZYcmQ4W0wYTfliyZDmM7SSExE4MBnFjO6hdDrCrfOfM/QkV8AF6xoEmfpV9VZPrlgL6ce67/G89FFmG5fBDWveis0EtWj+lcC33rt13mYqZOX0+d8nnfcAd2V+yP29Cz4OwJDqNU1wkfOx8y1lqguwQFhUJRIKJCcgZuIwTIolIqr0F4NqlokLhe94C58fCsypXRLx+Yyni8MIsE5xwLvCieMd6x6WrHReMWW0jrmcEC2Yf21B7qfENF170X/3tfNnFBFd/EIn/CsNQaolGDm2XgPFglWtKZhyjSnHNjK6/kOBxINkuh0o0UCrpZL4r6E7qFrimXUVYeXmftr/Ns6eghjwDSrHPe7v9U14eC7ma5ioIewLXfBB3593+yDKirA43emFveFXneTTSfBxsDKsmkfdD1UkFpq/0LhLSma25bo50PtdSFd4r1DfsZvzh3N6BzdZUZS/BOlbx/mCC60Ejwc8GQMzcSG2U4DKP9dKnGXQu0bjo8rQVLYm64bOHPgURQe6d31oS8A9x3Xvfs38/o62qOqw/PDoqlcXLpMuqdIVFgqoq/TT96Mg308qvurTWCRzS4fgH/BLwkCx/SHZzI3PWYTf3h6Rhkrt7lYfubsylN66RqFTST6RrE1+LYA2Q8Cz9CUT7ZbKgjLI56RWHpgSP5ZeZmulW1ACpwbW36BgdggtWrCgkDh91wYXQTKj3KwMC6uKGowFtGRk0WmbaVpENJJoynjOuWWnG82tZE1ONCiR0b3CpFEEMDjZ7w8ULalVEzslTBnunFcCmojn2sNr1WMj5cHuRWt1dJegK09s3F2vLyXqjodG+ejle9k2LlAXKnQW593PU7TqhobmcEw+u/pYC4swsdShAihEQmiu2bj+yJfrEU8IAioGByOWUix9qOQdXXHG/A7MXLf2PQdn73ZeLDJCUkVmTkeXOuvj52700BtMveiFJdnmludeOSZr96ugoDteW81wZzDjmFXo6k8HwmbGIIEaPXK0jgSltuZuMg8Sg0VqoffLCcSVjKW3eOHqbOMpTB7m3aAsqPzQwjRgv+WV5cnIzr6Wysp3XnJz8w3gJk2B2sCBGyXhTcnI7r72ysmU2efkvQ6x2FsFkXzypZeos1sWZsy7RkpwU2OOHaWG/HAivUGSNZim2es4dXzhz4fhcz4O+FPpy4YFfAKHQt1mKGT8IjzqgUORf2pQDVVZCFc+ZgDXX2xA735UGRQRJ70bQ/xcQCaGAKJYD6Ic98CT1PMj1LPEQ/Pur19lNa3fTeiF5saC6AT/y6YvDt48wPn+GKNsTgPDO5TP4va1rcf8ugWhSJgHyEgCccU0GLy3YFpLmlEnmHldenyGUphaBGZ769GS7KBZEbw2VycLObvpJ6bk/PO/FHBwUyyHZPRn4kRxnErnEuYhMogoWh4kic9dSD9HiaIeoOaWDxvl7H8NmXjObCbS9hWllHGdYJXiUAapMK/0E3SpBrjM0mckusjEAEe5hSZHwrEtotOv2FTrvAG5T0R+9sZbWye6graV2sDsppLW0DBzIr41mwBoN2kn9nbaGlnUkbmHcEfZJLsYDNAEN8KgWT8ADTiloN+01rRv9mybqov18vyK8oitsbtvcuNYKfcXGqor7Wh5cKjGyCD7Bshzm1zVMwoUwrxkSdL25KC11yOiwdYm7kmJAiVkAt62H50pqawE8H964lrDNv1UE1Rhu3fGZlBVBajw9kGjS4vVUj4PWX/fDWRsirmjBYWvZylUhqVvgJ/2u7Y5dIlyfifZwulGeep7TR6va9wLRd8wJCXxJtIS/TneRRktdfPkR0RGgj2I/dtv9qvug+1RTXPmnkgbD6FS0atGuohCO2o9UdS/ahm9bFOloB237GcC249swf1vfNzkqvp1G0A7jPbS4+mGONPg9eE/7pZDiusdhHmj5nTmHHXajqC6U08xJVW9JIbcaSoWquaGl/z5zFkaocUErZBREFdHTy03IYkDKLhSTUkniwmwSCNWI0arJXmvh4+e4nGFj0BkTdDl4p6RPomWPt3+59+XR9jIQijgAFxH9RtaHZod2RlK13cGTfYMucr7yfnw5i3xKukwNG7DNJhiIKnWsYIy3inQn6aOMt4wRU6dphOoYpZ/UiVrHGRU3YiQsSmqqRkMFCitacmM6r+5mdH5+SmkpCC95s443/UY048cZI5E90p3UZbazt0l62LT9BiXFmZRMKj+dmcnqSe5hQYeSD4E4fBubd7pcZNhPY/eAlMHb6XxVTY2KH5vjWK/1lc9rf88nWzIsZPrjqN8bB9NdakIu8dmt9ZNXtH/ge9nSbRP8D3N+jHfM0dbLfStajvLFXzO+inuPtAymq/g1NftiYx2z4yp+81p28r0n0ie8+TtbbpvgUkUyAM///vt5UGwetHAhVPG8CZDX82OheX8H58Pz4GPf/iV9stXdE8VWq1jMZosTQ7oW2Zb1voJ4z2qpZpQCQA02ajeK1ZDEUjGpHsRQWGigjGqCPvWU0alt9WZsxH6k1dwqNXSNeV/GVS+W0EewmvFPr0dI6G0MGpvvJl+pzgHQdFCb655WjJPDHrDJXH5SRaGMczomNwpSLlighHNh6oWU5DBVt9RpdpmDtLXCTZlrHcvNZbEy9eLTHQhcl2Vl0brxbmqWAu0mulFFFnU+m5aVpRu8r9IyQptxwi5aVOw+tsoyiFm4qk/EJw1adtTDlu3LeyPoA2+A2RvnpfklVhW7pNGnsYStspY432MAN/pKY2n5lK39llOXOX7A5p0BacugTChDq82AZlibjp2pLWMzBa8iXkmnRU6Tvox4SfnvixDT8LCJODIlvMGCeUcLwhybQsInw0OW9JY+vbuJHY3hhoLCH683Xv9xsDXbm/a6Cn680XjDs+CoSyh3yfC64e27w/1zAB6IsQMZvIZsAplJzbtv3MbdGOW9fPMMhptg6+6kZpAJb7p1LSrRI9PZDZvA3OjP09s50yMjtkoKrzp1pAmW1NIVWBpbpSy0U3qFYD3cHsya7O31qyAbpXW8RB6N8C5JTPPHztudx+RcorxhtI/bh2qiPCNbxn8bMHWvyDJsbuTdE75kOvk4s9Vu6jHnpfRJeTsFqffwG3l3hcFBrk+aFEguF1vUQcXWYdSORZg3d0znph3jLhWz5nPZgk6Z54+mY3N90MVSOYo1Nvz+3FOO6zKkqyWvHd/fojZTHb8JQ2Dy+40dd2N3KnXyBsngpynt3Vl1CWE7NkYn3Hv0Rr1yRcLdZcsfcZ0a8+9aPNVTSNzs0oioMY/rd1VRlBD/cfbbjae31kX6iDbIaFNVmSVpnA4lGUZIaQgr2lj1L79592sSDG+lSIhN1JLM2nugv8hrHo23fKQK/HLSrv7ePpWn24y8CBLi5OEkmC6oqOQWsZOTe77DXjVRQg9GX89ggiSxO5I/jRdhkkROeFIy/rA3pvhs+Xwg0jgO/Nsw0z6kDHTNYp44grx9RzoiQHbdf7ALuWXHmCkqOwx0ES6zD/c+d62MBQvn93HtHx8Bfxs3g8HmAZ6VZzv3Qotp4KRVy1YO9nscjduhW52sPFPvTT8SEDv0iqJFvQ5iANZ/ejXwqnmxSh/Ty9eLXzcvAUsWv+S/4se8XNK9JMwcG7thQ6wKTK7keStCoOzKyuynNA1ls3wUzvne8/dAOsAgXAgGCZn7/ea5SCXy/ZYicJ4HlS/YMzQtR55KprzY31tNqtzeITU1OgL69MLrxSfBN9gMk0quG/IwxpSWLAOhZCbEoF/aqLik3OF26g2T7fBqR35S6/ceZgHgeZJXyYDX9Q+qPkt8QaBjnnb9trvxMTXkg2dns93iDrxLnfer6RfXipjK4GZFRgF/COQh7Yvs9gp9cYjwVk3Lss/QnASQ3+V7TadfvT/51psKzeGRdBzSnPzLH6BSrwZe0+T/b+w2nh34M+X05vi7w+52UwNAqJDpP6wpwXSD8Zy2XDuB5Uw5eLDHTet2vkUXjj8jhDobgccozAGp8twc+scZutxZYWHScGlYXjgYSmuLb1sXuI0yg/T/+P/fyXffFhjfNq+o38Bjn0S5g6QZlNgeH7jNPf/OwdqfPusfpUp2R1a5RWqf+kzcTHqYNlu6oD2KljThXZ2VnaCrGHimm7txL5irL6+o0Et6I3JVIgaIVG7v4W/Y8CrmEJ/f3R0LYg8NDMQMgJ6BVwMG9RJ1dPdA7AD4xCrEBu3ew3TYDbqu2Nn6hibdidms73+iooqKQpr/SqKJrDTv2km0TXK4bVs9vwkTieKatbSaC60QbV1mTzGQezG/rXlb/bBesoFMXlnJFvKFrsZgneDebdl2V0Nr7/YpW9eisV4rYx/j05PEBiBmEXaL04cWgbVjx8dqwD5QMzbHeAsloXmm5WwdR0dUz1NpOR/tDRnrXyr4UpGUr4grRa5SheuavytOBs0qBilAVjwrJZNeXwAkg1KKi4//iS9Tg+gqfIkMiuoOW4208AFZJzaiwEnrWw82KjXNrBZqNdC0szrw+wEiOTn8WvWBwLYBvb58qanatNRQo/9+IPDAcHX4mbYT8y7P2/ATT6ct9S4tVfNeyHvTKYWls5yf/xvJ7GLJrLg6aVW1AAchnuS3R9+OrlGuOXsHnbz7+z0saN9PPT/3GNYBQAqTSmEkJ4WGTkJgh+iUMyeC0K2t6mQ7FTvnVNSl+S3bZnZbJJwuXORm3vYUqASlk4Wu9Q1uhcD3Q1irmU1TuDQ5o9xv6bYhN43AmTg0u6HBdVy9LLjxfo7L6grftGXn/mVShdkcqhvj3FNCK3CY7lrYUF/oBuqODv/1RbN50kJ1FX6M4U6ZjlLcAZBo0K2wvv6lCl7W0bkMhs3AGTDhQlivhwqhAoOhoEKQQa8wSjFgCB2SpN41uLQJ7eP00ULph8xS8yF6M9EgWsU20CAUN0lNONqMXF670XhIjHyyOVvbIcbQ4S1Fuqyle7tsDpXk/9ApJTUjXZHmkBJmqjtuWtWUw8vJU+Q4K0AYiXmk5ahh68m4JUEThZ9epNnPPEjy5YzOVYb5NSRtyrl169pga7QxeuCpPnqK/ubNSU7DGbl7UA6C94dTTE4XhNXrYM4tCLZ7/jG9ri3KMwk8d3eHD98Qfz801FVIxCvIxTJZMVkRTxSuGRq643mN70yXTZVPLU9n/rDaXeGgShbNBPmnOn/zyh053kJLywLnQ7gKC4VyW3k7PV2qvvM3Xfy95R2Z/jdzmfTNGz33q53+9ZtRHv1vCtD8TW8bTUuz+FvI5K++X0d0dhY73aglYavJ6sEt5oLWEJPVs9gTDznNL48sjzZEGkDCi5em1yUFTOOLlS+My3drYnkyBCyCdZHJYQiYng82N7s0T1g7nMN5HefOHWXVx4+eDQ7GrO4HdXvsxGCK3RQg5ooBYoeA6K12HXZ23M7ghnbAdkiHHfcHO7G18hGsYrvQIBgEgysQdfYw2Yt9ApvEJcW5A4fiYgh3Msm2DjXVziMIF8QKO79cWXswXpzf1moFj6BQiqNB52LvdxY08K50buMvoa22pzRTxijVlALRwPhzloD5fO5t497cve/+yV2Z+5230ke5okt5qKTvIPtyQcTJUGWQ0ipln2PL8K24jKjUureChwU+B1s8tsI2v2D79okVSX0TW19NBk6+yg68Fgj0PItZxxhk6LoFZjWjGyc8CLxbN2ixEu4EJAjLEyaneilLhXmpyUqvUm9Y5qUOCY2KQ9qFj171STYk5KTf7vHW/1Dx28Qge41B3/lmXZVDesMhl4gGlQgn3Dl4OzjuxEi3LlJxXT6b2y3sn1hVMTgQpId37oINkijXw+vi/zSwcRWkgUrBmkjiGLgU1rR6XylL6ipiM8X334e8Y3syJax3Q0JXT+a++0jpCFvkFr7AQcOSMjzZ/IH5/3NLv6IUQowKJsSquMrw0sE0SOzhwQZso6EaU9pr8hJmqmOBzWdsjKUZ07BC6SJwqdboFSIgo1HM1bBxVkNdw3SvbUTcDh/qBliXnC8CiJW9+YUAKNWw1MP2OSFx4teBXA1I9gIle/5oClWpCgsJ+EJe3jTxhEWtGlhMhAk+4qmulqUQ4TedOK0EWkrz5JU6p2M6uHOHmH7fmV8aKpFyS7nlHcrhMJk4+N0GNhw3iJYB4sTQ82Md0/T3ueWB7VOb4zDk+Qis94SGySgA4MiRY0tfvtK5Q/d5iZGfXe5D7rpXL8H+/DCwiPH3esr394myoQmQO/hY39AY4PND8srQUGBXqywAUJjHcotLVd+XP/smSaUZ/yPSmMr7CkAgTCwo/KWe3oY15N9qqIrqmpOw4l5u4P60q9+lXcm5IgMCMJ1eP3swOesvrLemF0u1NlEKvbfatJdnqu6lb6Is0ljJaTRh2RYAmoHQBGwps7Jz8Vy2kK0FIBIAbQggiMYb+LhOAkQcI1T4DqAGHmaCSUf7Of00Ort7rAIQT5/c/CiEEtid1ka0DwP8OM9qOJ5PbhCwB47cIlOektdH/ynIJuN1VeVrqZTQlNseYppG8GflhZh+h4XPpRpaqa0Tm+JCzpb0Bu2Zs1SRiDoBIXBCPz+InHfwPTeMMK3wfjNZ8slJvNYTqE/Ij/gwRoQT2HDufDGNB4TsRWjdiSYOZ4WJCMdNK6IeTHY2p8+a/RDbq+dvBxlLODYL8pVDxdvYnphQGn58+Lbz91rpG6bnEI0tYj2ANi4Fb7rZQiw8IhwT2UT2jtFQTAw0i93LjyNRyGzR0CzfxSFh5bY1VNSgOaFVS8tOhurroDes8DEKJWfTcQx/U6pUQg/OWes+Iqkn6mnrGRDjC80aE7HJUPzIXNOo/TP6XPoz+9Fl6wB91GGUbjX/dWOVbWPFIMG4vPeQWqMOfwahE+oI3aFeXE+cJXRErwGyx5zRlGvOLnRqDDjq9Y4DhI57FzfgnUywCrec+Hsg84H/fZXxgTHTwEjTegLyjf49auOwET7wsxnL6FdrDDDm+adt/gaIgR48LrofwIRntycBA+VjZJw6xTDiTRzAacK7RR13/bntdm9Z2zpsXzvOsd6/OHeOAsD46ScG6KbeH85ghIiDJEHzJiCtxj02cE1jPNWkpLxcvm0pKYuugm/KaH23SivLtjExFRrEPfBByCMqoFbS+mjWarBbaJxztDcOwmsdmuf3FuyqvIz5xhKDDusvT27iSy7Tr54Bibsu7bL57H8mgI9tUBfCB8C23Vkk/7j7qgtIUvcHQ4hDdzcjou4260XE/B1sSC0AACCXEUfBNxlDZgBgsyEHEFdhddqGzA2FBpAsa8Qd+ApCZ+HfR79oM5IMgO2jc4hwqtAlJLG7lgSQ5ZWMGUZWAQAACRr6TAAgyfBj/BjER4Vmw7vNXx1HwmBedhGZBu2CjUNq/YTbqL0n3jbrrduI82kIDSNLrCZ/ItVTapcRaZfsd4gEhgrESKF3SEH3sE6EZ/3oOiLH4GX4gc2tpgDkOw65zI2G4LyRRJI4jAP/Xw39A39ByJgakvVADxIATQJf3XbWgtCG0oxs0tptHCnbNqXvtBfYhuxEQruwfiQe4p8YhWaJH9fa6gNSOSWhnFZ8+7wngvNCPk0gtR7YeJoXHENmXkZEs60LJpCa/+/ZGuC7Bk2UsOO/CFn3NwOL/68+fifYLs2jepeDVg2uw+lQ/m8eVvZsUurYv/P0AB86YorSnB+JnKDbBoY3CDf2//yNl7fZZtvOjeMgnP3963lnGvncOvVQ0q7NDFCry4D/9Lm81f/zNNnBRhbTvEgczlC5hnM0U8SiMzBcoosIV9AkhmsF+LrrOlzOPqioAcz6LcIQ3J8wjOVSGIH7K5I6/4XJHHyEKfC0H8ao0+1fQOedqPb1NYSAizTbppRbLiyHk8U1v6GWCtxxD3X9Qudpcdprd/NXfkVGN4SPX+l+CEVaOFunX8SBYVXZtHG2xDy0TQjNvNMpqppo57beOSHhIBCghVRma+cmOYsV9xycFP7x3yBNVIALrPNg7l+Q49ErT/W0dRniV8KsdW6L21vR+oJkhdSs7Fi11BfJUKUtK9VUj1ZCuaDNdDAbcx15bQWXtE/dJ2uVJoRvva/7cAgIMASAoECDAQsE/+PD4Pf+8CCCRDKVzmRz+UKxVK5Ua/VGs9XudHv9wXA0nkxn88Vytd5sd8Bkr4+n8+V6uz+SkiXStYiWpcrTjHcq3ooXmwgTjgew27/YEuutZa0FuKKzlAreSDS0RjoVlt15DN1Bf6YKYCN0JT+vxxvg3MjgsmqN3qlGhxypIrAniG7onao6z/5sKAkEXBIkC2TdgE0aZL3jLC9e4lOjhMoQgabKYRDHqqvtbLXyxsoWj/Io6skwkmR1Xdp/GRAMORvFFuBHI9ztj/pnGwq2G4qE38Ai7qkqkCukw5HvvJTzaIDfgXKgBfBZS1HioEdna0MckftkITd0fLokoA9TyA4OIwH1CyMwGsq6YbohQmNBsUg/Kslvt7WkpLZMwbojkqi94+G+7Ea4kvPK6mnkC3rRgxznLSu6MXqxvJVzyHWqp26aEcQOI9UhD1EK5ZxPAw0xZ2PDzAwvRtcTzTtpuWLveotrycFGsdWgjliFFXsKN4114YxokbaU83JGSRnQ1XHg5F3uRQENMtI9futg+Qz4pCJviND7d5uJJ0bvWzUwaKyRg2JqrKXMOBlurpUEucu0VFeTL7Q9ijVC8bHs3JNGe7PHExleEmtFZOdBAZnsAAA=') format('woff2'), + url('../fonts/iconfont.woff?t=1548143859040') format('woff'), + url('../fonts/iconfont.ttf?t=1548143859040') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ + url('../fonts/iconfont.svg?t=1548143859040#iconfont') format('svg'); /* iOS 4.1- */ +} + +.iconfont { + font-family: "iconfont" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-sousuo:before { + content: "\e649"; +} + +.icon-unie63a:before { + content: "\e6bb"; +} + +.icon-2:before { + content: "\e6cf"; +} + +.icon-yingyongguanli:before { + content: "\e61f"; +} + +.icon-suoshuzhiwei:before { + content: "\e622"; +} + +.icon-iconset0329:before { + content: "\e6e4"; +} + +.icon-fanhui:before { + content: "\e643"; +} + +.icon-iconfontshanchu3:before { + content: "\e621"; +} + +.icon-yingyongguanli1:before { + content: "\e70f"; +} + +.icon-gerenziliao:before { + content: "\e609"; +} + +.icon-gerenxinxi:before { + content: "\e665"; +} + +.icon-mingxi:before { + content: "\e689"; +} + +.icon-tianjia:before { + content: "\e6e0"; +} + +.icon-dengpao:before { + content: "\e652"; +} + +.icon-fanhui1:before { + content: "\e644"; +} + +.icon-biaoqian5:before { + content: "\e647"; +} + +.icon-xiazai8:before { + content: "\e624"; +} + +.icon-return:before { + content: "\e6ba"; +} + +.icon-iconyg:before { + content: "\e630"; +} + +.icon-shouye:before { + content: "\e626"; +} + +.icon-biaoqian:before { + content: "\e619"; +} + +.icon-yonghu:before { + content: "\e602"; +} + +.icon-bianji2:before { + content: "\e63c"; +} + +.icon-iconfontzhizuobiaozhun0252:before { + content: "\e6a8"; +} + +.icon-xitongpeizhi:before { + content: "\e638"; +} + +.icon-iconfontzhizuobiaozhun0258:before { + content: "\e6c9"; +} + +.icon-fenlei:before { + content: "\e605"; +} + +.icon-shuju:before { + content: "\e664"; +} + +.icon-zhankaicaidan:before { + content: "\e625"; +} + +.icon-yonghuguanli:before { + content: "\e617"; +} + +.icon-icon-xinzeng:before { + content: "\e635"; +} + +.icon-shenpi:before { + content: "\e666"; +} + +.icon-icon-test:before { + content: "\e61a"; +} + +.icon-biaoqian3:before { + content: "\e690"; +} + +.icon-zuzhi:before { + content: "\e672"; +} + +.icon-huaxiangfenxi2:before { + content: "\e65e"; +} + +.icon-yuangongguanli:before { + content: "\e610"; +} + +.icon-jisuanqi:before { + content: "\e657"; +} + +.icon-monitor:before { + content: "\e790"; +} + +.icon-dengpao1:before { + content: "\e653"; +} + +.icon-tongxunlu:before { + content: "\e60e"; +} + +.icon-huaxiangfenxi:before { + content: "\e73c"; +} + +.icon-zhuzhuangtu:before { + content: "\e701"; +} + +.icon-chengyuan:before { + content: "\e604"; +} + +.icon-quanxianguanli:before { + content: "\e641"; +} + +.icon-rizhiguanli:before { + content: "\e632"; +} + +.icon-zixun:before { + content: "\e600"; +} + +.icon-shenhe:before { + content: "\e687"; +} + +.icon-yingpinzhiwei:before { + content: "\e62e"; +} + +.icon-biaoqian4:before { + content: "\e655"; +} + +.icon-yonghuhuaxiang:before { + content: "\e60c"; +} + +.icon-tongxunlu1:before { + content: "\e8fb"; +} + +.icon-yewucaozuoyingshe:before { + content: "\e68e"; +} + +.icon-biaoqian1:before { + content: "\e61b"; +} + +.icon-export:before { + content: "\e6a0"; +} + +.icon-fenleiguanli:before { + content: "\e628"; +} + +.icon-tongjibaobiao:before { + content: "\e60d"; +} + +.icon-ruku:before { + content: "\e606"; +} + +.icon-renzhengshenhe_huaban:before { + content: "\e62d"; +} + +.icon-lishishuju:before { + content: "\e64d"; +} + +.icon-business-management:before { + content: "\e6c3"; +} + +.icon-bianji:before { + content: "\e62a"; +} + +.icon-biaoqian6:before { + content: "\e648"; +} + +.icon-zhiwei-:before { + content: "\e612"; +} + +.icon-tubiao-:before { + content: "\e62b"; +} + +.icon-guanli:before { + content: "\e6d3"; +} + +.icon-gongzuohuizong:before { + content: "\e614"; +} + +.icon-shuzhuangtu_o:before { + content: "\ebb3"; +} + +.icon-xiangqing:before { + content: "\e64e"; +} + +.icon-jisuan:before { + content: "\e63a"; +} + +.icon-fabu:before { + content: "\e525"; +} + diff --git a/usm-render/src/main/resources/static/fonts/iconfont.eot b/usm-render/src/main/resources/static/fonts/iconfont.eot new file mode 100644 index 0000000..681db12 Binary files /dev/null and b/usm-render/src/main/resources/static/fonts/iconfont.eot differ diff --git a/usm-render/src/main/resources/static/fonts/iconfont.js b/usm-render/src/main/resources/static/fonts/iconfont.js new file mode 100644 index 0000000..b4f31e0 --- /dev/null +++ b/usm-render/src/main/resources/static/fonts/iconfont.js @@ -0,0 +1 @@ +(function(window){var svgSprite='';var script=function(){var scripts=document.getElementsByTagName("script");return scripts[scripts.length-1]}();var shouldInjectCss=script.getAttribute("data-injectcss");var ready=function(fn){if(document.addEventListener){if(~["complete","loaded","interactive"].indexOf(document.readyState)){setTimeout(fn,0)}else{var loadFn=function(){document.removeEventListener("DOMContentLoaded",loadFn,false);fn()};document.addEventListener("DOMContentLoaded",loadFn,false)}}else if(document.attachEvent){IEContentLoaded(window,fn)}function IEContentLoaded(w,fn){var d=w.document,done=false,init=function(){if(!done){done=true;fn()}};var polling=function(){try{d.documentElement.doScroll("left")}catch(e){setTimeout(polling,50);return}init()};polling();d.onreadystatechange=function(){if(d.readyState=="complete"){d.onreadystatechange=null;init()}}}};var before=function(el,target){target.parentNode.insertBefore(el,target)};var prepend=function(el,target){if(target.firstChild){before(el,target.firstChild)}else{target.appendChild(el)}};function appendSvg(){var div,svg;div=document.createElement("div");div.innerHTML=svgSprite;svgSprite=null;svg=div.getElementsByTagName("svg")[0];if(svg){svg.setAttribute("aria-hidden","true");svg.style.position="absolute";svg.style.width=0;svg.style.height=0;svg.style.overflow="hidden";prepend(svg,document.body)}}if(shouldInjectCss&&!window.__iconfont__svg__cssinject__){window.__iconfont__svg__cssinject__=true;try{document.write("")}catch(e){console&&console.log(e)}}ready(appendSvg)})(window) \ No newline at end of file diff --git a/usm-render/src/main/resources/static/fonts/iconfont.svg b/usm-render/src/main/resources/static/fonts/iconfont.svg new file mode 100644 index 0000000..9370d67 --- /dev/null +++ b/usm-render/src/main/resources/static/fonts/iconfont.svg @@ -0,0 +1,236 @@ + + + + + +Created by iconfont + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/usm-render/src/main/resources/static/fonts/iconfont.ttf b/usm-render/src/main/resources/static/fonts/iconfont.ttf new file mode 100644 index 0000000..47e9860 Binary files /dev/null and b/usm-render/src/main/resources/static/fonts/iconfont.ttf differ diff --git a/usm-render/src/main/resources/static/fonts/iconfont.woff b/usm-render/src/main/resources/static/fonts/iconfont.woff new file mode 100644 index 0000000..e884a5e Binary files /dev/null and b/usm-render/src/main/resources/static/fonts/iconfont.woff differ diff --git a/usm-render/src/main/resources/static/libs/SingleFileComponent.js b/usm-render/src/main/resources/static/libs/SingleFileComponent.js new file mode 100644 index 0000000..bbb4314 --- /dev/null +++ b/usm-render/src/main/resources/static/libs/SingleFileComponent.js @@ -0,0 +1,13 @@ +export default { + template: ` +
+

Single-file JavaScript Component

+

{{ message }}

+
+ `, + data() { + return { + message: 'Oh hai from the component' + } + } +}; \ No newline at end of file diff --git a/usm-render/src/main/resources/static/libs/element-ui/fonts/element-icons.ttf b/usm-render/src/main/resources/static/libs/element-ui/fonts/element-icons.ttf new file mode 100644 index 0000000..73bc90f Binary files /dev/null and b/usm-render/src/main/resources/static/libs/element-ui/fonts/element-icons.ttf differ diff --git a/usm-render/src/main/resources/static/libs/element-ui/fonts/element-icons.woff b/usm-render/src/main/resources/static/libs/element-ui/fonts/element-icons.woff new file mode 100644 index 0000000..28da65d Binary files /dev/null and b/usm-render/src/main/resources/static/libs/element-ui/fonts/element-icons.woff differ diff --git a/usm-render/src/main/resources/static/libs/element-ui/index.css b/usm-render/src/main/resources/static/libs/element-ui/index.css new file mode 100644 index 0000000..fe92a32 --- /dev/null +++ b/usm-render/src/main/resources/static/libs/element-ui/index.css @@ -0,0 +1 @@ +@charset "UTF-8";@font-face{font-family:element-icons;src:url(fonts/element-icons.woff) format("woff"),url(fonts/element-icons.ttf) format("truetype");font-weight:400;font-style:normal}[class*=" el-icon-"],[class^=el-icon-]{font-family:element-icons!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;vertical-align:baseline;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-icon-info:before{content:"\e61a"}.el-icon-error:before{content:"\e62c"}.el-icon-success:before{content:"\e62d"}.el-icon-warning:before{content:"\e62e"}.el-icon-question:before{content:"\e634"}.el-icon-back:before{content:"\e606"}.el-icon-arrow-left:before{content:"\e600"}.el-icon-arrow-down:before{content:"\e603"}.el-cascader-menu__item--extensible:after,.el-icon-arrow-right:before{content:"\e604"}.el-icon-arrow-up:before{content:"\e605"}.el-icon-caret-left:before{content:"\e60a"}.el-icon-caret-bottom:before{content:"\e60b"}.el-icon-caret-top:before{content:"\e60c"}.el-icon-caret-right:before{content:"\e60e"}.el-icon-d-arrow-left:before{content:"\e610"}.el-icon-d-arrow-right:before{content:"\e613"}.el-icon-minus:before{content:"\e621"}.el-icon-plus:before{content:"\e62b"}.el-icon-remove:before{content:"\e635"}.el-icon-circle-plus:before{content:"\e601"}.el-icon-remove-outline:before{content:"\e63c"}.el-icon-circle-plus-outline:before{content:"\e602"}.el-icon-close:before{content:"\e60f"}.el-icon-check:before{content:"\e611"}.el-icon-circle-close:before{content:"\e607"}.el-icon-circle-check:before{content:"\e639"}.el-icon-circle-close-outline:before{content:"\e609"}.el-icon-circle-check-outline:before{content:"\e63e"}.el-icon-zoom-out:before{content:"\e645"}.el-icon-zoom-in:before{content:"\e641"}.el-icon-d-caret:before{content:"\e615"}.el-icon-sort:before{content:"\e640"}.el-icon-sort-down:before{content:"\e630"}.el-icon-sort-up:before{content:"\e631"}.el-icon-tickets:before{content:"\e63f"}.el-icon-document:before{content:"\e614"}.el-icon-goods:before{content:"\e618"}.el-icon-sold-out:before{content:"\e63b"}.el-icon-news:before{content:"\e625"}.el-icon-message:before{content:"\e61b"}.el-icon-date:before{content:"\e608"}.el-icon-printer:before{content:"\e62f"}.el-icon-time:before{content:"\e642"}.el-icon-bell:before{content:"\e622"}.el-icon-mobile-phone:before{content:"\e624"}.el-icon-service:before{content:"\e63a"}.el-icon-view:before{content:"\e643"}.el-icon-menu:before{content:"\e620"}.el-icon-more:before{content:"\e646"}.el-icon-more-outline:before{content:"\e626"}.el-icon-star-on:before{content:"\e637"}.el-icon-star-off:before{content:"\e63d"}.el-icon-location:before{content:"\e61d"}.el-icon-location-outline:before{content:"\e61f"}.el-icon-phone:before{content:"\e627"}.el-icon-phone-outline:before{content:"\e628"}.el-icon-picture:before{content:"\e629"}.el-icon-picture-outline:before{content:"\e62a"}.el-icon-delete:before{content:"\e612"}.el-icon-search:before{content:"\e619"}.el-icon-edit:before{content:"\e61c"}.el-icon-edit-outline:before{content:"\e616"}.el-icon-rank:before{content:"\e632"}.el-icon-refresh:before{content:"\e633"}.el-icon-share:before{content:"\e636"}.el-icon-setting:before{content:"\e638"}.el-icon-upload:before{content:"\e60d"}.el-icon-upload2:before{content:"\e644"}.el-icon-download:before{content:"\e617"}.el-icon-loading:before{content:"\e61e"}.el-icon-loading{-webkit-animation:rotating 2s linear infinite;animation:rotating 2s linear infinite}.el-icon--right{margin-left:5px}.el-icon--left{margin-right:5px}@-webkit-keyframes rotating{0%{-webkit-transform:rotateZ(0);transform:rotateZ(0)}100%{-webkit-transform:rotateZ(360deg);transform:rotateZ(360deg)}}@keyframes rotating{0%{-webkit-transform:rotateZ(0);transform:rotateZ(0)}100%{-webkit-transform:rotateZ(360deg);transform:rotateZ(360deg)}}.el-pagination{white-space:nowrap;padding:2px 5px;color:#303133;font-weight:700}.el-pagination::after,.el-pagination::before{display:table;content:""}.el-pagination::after{clear:both}.el-pagination button,.el-pagination span:not([class*=suffix]){display:inline-block;font-size:13px;min-width:35.5px;height:28px;line-height:28px;vertical-align:top;-webkit-box-sizing:border-box;box-sizing:border-box}.el-pager li,.el-pagination__editor{-webkit-box-sizing:border-box;text-align:center}.el-pagination .el-input__inner{text-align:center;-moz-appearance:textfield;line-height:normal}.el-pagination .el-input__suffix{right:0;-webkit-transform:scale(.8);transform:scale(.8)}.el-pagination .el-select .el-input{width:100px;margin:0 5px}.el-pagination .el-select .el-input .el-input__inner{padding-right:25px;border-radius:3px}.el-pagination button{border:none;padding:0 6px;background:0 0}.el-pagination button:focus{outline:0}.el-pagination button:hover{color:#409EFF}.el-pagination button:disabled{color:#C0C4CC;background-color:#FFF;cursor:not-allowed}.el-pagination .btn-next,.el-pagination .btn-prev{background:center center no-repeat #FFF;background-size:16px;cursor:pointer;margin:0;color:#303133}.el-pagination .btn-next .el-icon,.el-pagination .btn-prev .el-icon{display:block;font-size:12px;font-weight:700}.el-pagination .btn-prev{padding-right:12px}.el-pagination .btn-next{padding-left:12px}.el-pagination .el-pager li.disabled{color:#C0C4CC;cursor:not-allowed}.el-pagination--small .btn-next,.el-pagination--small .btn-prev,.el-pagination--small .el-pager li,.el-pagination--small .el-pager li.btn-quicknext,.el-pagination--small .el-pager li.btn-quickprev,.el-pagination--small .el-pager li:last-child{border-color:transparent;font-size:12px;line-height:22px;height:22px;min-width:22px}.el-pagination--small .arrow.disabled{visibility:hidden}.el-pagination--small .more::before,.el-pagination--small li.more::before{line-height:24px}.el-pagination--small button,.el-pagination--small span:not([class*=suffix]){height:22px;line-height:22px}.el-pagination--small .el-pagination__editor,.el-pagination--small .el-pagination__editor.el-input .el-input__inner{height:22px}.el-pagination__sizes{margin:0 10px 0 0;font-weight:400;color:#606266}.el-pagination__sizes .el-input .el-input__inner{font-size:13px;padding-left:8px}.el-pagination__sizes .el-input .el-input__inner:hover{border-color:#409EFF}.el-pagination__total{margin-right:10px;font-weight:400;color:#606266}.el-pagination__jump{margin-left:24px;font-weight:400;color:#606266}.el-pagination__jump .el-input__inner{padding:0 3px}.el-pagination__rightwrapper{float:right}.el-pagination__editor{line-height:18px;padding:0 2px;height:28px;margin:0 2px;box-sizing:border-box;border-radius:3px}.el-pagination__editor.el-input{width:50px}.el-pagination__editor.el-input .el-input__inner{height:28px}.el-pagination__editor .el-input__inner::-webkit-inner-spin-button,.el-pagination__editor .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev,.el-pagination.is-background .el-pager li{margin:0 5px;background-color:#f4f4f5;color:#606266;min-width:30px;border-radius:2px}.el-pagination.is-background .btn-next.disabled,.el-pagination.is-background .btn-next:disabled,.el-pagination.is-background .btn-prev.disabled,.el-pagination.is-background .btn-prev:disabled,.el-pagination.is-background .el-pager li.disabled{color:#C0C4CC}.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev{padding:0}.el-pagination.is-background .el-pager li:not(.disabled):hover{color:#409EFF}.el-pagination.is-background .el-pager li:not(.disabled).active{background-color:#409EFF;color:#FFF}.el-pagination.is-background.el-pagination--small .btn-next,.el-pagination.is-background.el-pagination--small .btn-prev,.el-pagination.is-background.el-pagination--small .el-pager li{margin:0 3px;min-width:22px}.el-pager,.el-pager li{vertical-align:top;margin:0;display:inline-block}.el-pager{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;list-style:none;font-size:0;padding:0}.el-pager .more::before{line-height:30px}.el-pager li{padding:0 4px;background:#FFF;font-size:13px;min-width:35.5px;height:28px;line-height:28px;cursor:pointer;box-sizing:border-box}.el-pager li.btn-quicknext,.el-pager li.btn-quickprev{line-height:28px;color:#303133}.el-pager li.btn-quicknext.disabled,.el-pager li.btn-quickprev.disabled{color:#C0C4CC}.el-pager li.btn-quicknext:hover,.el-pager li.btn-quickprev:hover{cursor:pointer}.el-pager li.active+li{border-left:0}.el-pager li:hover{color:#409EFF}.el-pager li.active{color:#409EFF;cursor:default}@-webkit-keyframes v-modal-in{0%{opacity:0}}@-webkit-keyframes v-modal-out{100%{opacity:0}}.el-dialog{position:relative;margin:0 auto 50px;background:#FFF;border-radius:2px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.3);box-shadow:0 1px 3px rgba(0,0,0,.3);-webkit-box-sizing:border-box;box-sizing:border-box;width:50%}.el-dialog.is-fullscreen{width:100%;margin-top:0;margin-bottom:0;height:100%;overflow:auto}.el-dialog__wrapper{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto;margin:0}.el-dialog__header{padding:20px 20px 10px}.el-dialog__headerbtn{position:absolute;top:20px;right:20px;padding:0;background:0 0;border:none;outline:0;cursor:pointer;font-size:16px}.el-dialog__headerbtn .el-dialog__close{color:#909399}.el-dialog__headerbtn:focus .el-dialog__close,.el-dialog__headerbtn:hover .el-dialog__close{color:#409EFF}.el-dialog__title{line-height:24px;font-size:18px;color:#303133}.el-dialog__body{padding:30px 20px;color:#606266;font-size:14px}.el-dialog__footer{padding:10px 20px 20px;text-align:right;-webkit-box-sizing:border-box;box-sizing:border-box}.el-dialog--center{text-align:center}.el-dialog--center .el-dialog__body{text-align:initial;padding:25px 25px 30px}.el-dialog--center .el-dialog__footer{text-align:inherit}.dialog-fade-enter-active{-webkit-animation:dialog-fade-in .3s;animation:dialog-fade-in .3s}.dialog-fade-leave-active{-webkit-animation:dialog-fade-out .3s;animation:dialog-fade-out .3s}@-webkit-keyframes dialog-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@keyframes dialog-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@-webkit-keyframes dialog-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}@keyframes dialog-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}.el-autocomplete{position:relative;display:inline-block}.el-autocomplete-suggestion{margin:5px 0;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);border-radius:4px;border:1px solid #E4E7ED;-webkit-box-sizing:border-box;box-sizing:border-box;background-color:#FFF}.el-autocomplete-suggestion__wrap{max-height:280px;padding:10px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-autocomplete-suggestion__list{margin:0;padding:0}.el-autocomplete-suggestion li{padding:0 20px;margin:0;line-height:34px;cursor:pointer;color:#606266;font-size:14px;list-style:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.el-autocomplete-suggestion li.highlighted,.el-autocomplete-suggestion li:hover{background-color:#f5f7fa}.el-autocomplete-suggestion li.divider{margin-top:6px;border-top:1px solid #000}.el-autocomplete-suggestion li.divider:last-child{margin-bottom:-6px}.el-autocomplete-suggestion.is-loading li{text-align:center;height:100px;line-height:100px;font-size:20px;color:#999}.el-autocomplete-suggestion.is-loading li::after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-autocomplete-suggestion.is-loading li:hover{background-color:#FFF}.el-autocomplete-suggestion.is-loading .el-icon-loading{vertical-align:middle}.el-dropdown{display:inline-block;position:relative;color:#606266;font-size:14px}.el-dropdown .el-button-group{display:block}.el-dropdown .el-button-group .el-button{float:none}.el-dropdown .el-dropdown__caret-button{padding-left:5px;padding-right:5px;position:relative;border-left:none}.el-dropdown .el-dropdown__caret-button::before{content:'';position:absolute;display:block;width:1px;top:5px;bottom:5px;left:0;background:rgba(255,255,255,.5)}.el-dropdown .el-dropdown__caret-button:hover::before{top:0;bottom:0}.el-dropdown .el-dropdown__caret-button .el-dropdown__icon{padding-left:0}.el-dropdown__icon{font-size:12px;margin:0 3px}.el-dropdown .el-dropdown-selfdefine:focus:active,.el-dropdown .el-dropdown-selfdefine:focus:not(.focusing){outline-width:0}.el-dropdown-menu{position:absolute;top:0;left:0;z-index:10;padding:10px 0;margin:5px 0;background-color:#FFF;border:1px solid #EBEEF5;border-radius:4px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);max-height:400px;overflow:auto}.el-dropdown-menu__item{list-style:none;line-height:36px;padding:0 20px;margin:0;font-size:14px;color:#606266;cursor:pointer;outline:0}.el-dropdown-menu__item:focus,.el-dropdown-menu__item:not(.is-disabled):hover{background-color:#ecf5ff;color:#66b1ff}.el-dropdown-menu__item i{margin-right:5px}.el-dropdown-menu__item--divided{position:relative;margin-top:6px;border-top:1px solid #EBEEF5}.el-dropdown-menu__item--divided:before{content:'';height:6px;display:block;margin:0 -20px;background-color:#FFF}.el-dropdown-menu__item.is-disabled{cursor:default;color:#bbb;pointer-events:none}.el-dropdown-menu--medium{padding:6px 0}.el-dropdown-menu--medium .el-dropdown-menu__item{line-height:30px;padding:0 17px;font-size:14px}.el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:6px}.el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:6px;margin:0 -17px}.el-dropdown-menu--small{padding:6px 0}.el-dropdown-menu--small .el-dropdown-menu__item{line-height:27px;padding:0 15px;font-size:13px}.el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:4px}.el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:4px;margin:0 -15px}.el-dropdown-menu--mini{padding:3px 0}.el-dropdown-menu--mini .el-dropdown-menu__item{line-height:24px;padding:0 10px;font-size:12px}.el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:3px}.el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:3px;margin:0 -10px}.el-menu{border-right:solid 1px #e6e6e6;list-style:none;position:relative;margin:0;padding-left:0;background-color:#FFF}.el-menu--horizontal>.el-menu-item:not(.is-disabled):focus,.el-menu--horizontal>.el-menu-item:not(.is-disabled):hover,.el-menu--horizontal>.el-submenu .el-submenu__title:hover{background-color:#fff}.el-menu::after,.el-menu::before{display:table;content:""}.el-breadcrumb__item:last-child .el-breadcrumb__separator,.el-menu--collapse>.el-menu-item .el-submenu__icon-arrow,.el-menu--collapse>.el-submenu>.el-submenu__title .el-submenu__icon-arrow{display:none}.el-menu::after{clear:both}.el-menu.el-menu--horizontal{border-bottom:solid 1px #e6e6e6}.el-menu--horizontal{border-right:none}.el-menu--horizontal>.el-menu-item{float:left;height:60px;line-height:60px;margin:0;border-bottom:2px solid transparent;color:#909399}.el-menu--horizontal>.el-menu-item a,.el-menu--horizontal>.el-menu-item a:hover{color:inherit}.el-menu--horizontal>.el-submenu{float:left}.el-menu--horizontal>.el-submenu:focus,.el-menu--horizontal>.el-submenu:hover{outline:0}.el-menu--horizontal>.el-submenu:focus .el-submenu__title,.el-menu--horizontal>.el-submenu:hover .el-submenu__title{color:#303133}.el-menu--horizontal>.el-submenu.is-active .el-submenu__title{border-bottom:2px solid #409EFF;color:#303133}.el-menu--horizontal>.el-submenu .el-submenu__title{height:60px;line-height:60px;border-bottom:2px solid transparent;color:#909399}.el-menu--horizontal>.el-submenu .el-submenu__icon-arrow{position:static;vertical-align:middle;margin-left:8px;margin-top:-3px}.el-menu--horizontal .el-menu .el-menu-item,.el-menu--horizontal .el-menu .el-submenu__title{background-color:#FFF;float:none;height:36px;line-height:36px;padding:0 10px;color:#909399}.el-menu--horizontal .el-menu .el-menu-item.is-active,.el-menu--horizontal .el-menu .el-submenu.is-active>.el-submenu__title{color:#303133}.el-menu--horizontal .el-menu-item:not(.is-disabled):focus,.el-menu--horizontal .el-menu-item:not(.is-disabled):hover{outline:0;color:#303133}.el-menu--horizontal>.el-menu-item.is-active{border-bottom:2px solid #409EFF;color:#303133}.el-menu--collapse{width:64px}.el-menu--collapse>.el-menu-item [class^=el-icon-],.el-menu--collapse>.el-submenu>.el-submenu__title [class^=el-icon-]{margin:0;vertical-align:middle;width:24px;text-align:center}.el-menu--collapse>.el-menu-item span,.el-menu--collapse>.el-submenu>.el-submenu__title span{height:0;width:0;overflow:hidden;visibility:hidden;display:inline-block}.el-menu-item,.el-submenu__title{height:56px;line-height:56px;list-style:none}.el-menu--collapse>.el-menu-item.is-active i{color:inherit}.el-menu--collapse .el-menu .el-submenu{min-width:200px}.el-menu--collapse .el-submenu{position:relative}.el-menu--collapse .el-submenu .el-menu{position:absolute;margin-left:5px;top:0;left:100%;z-index:10;border:1px solid #E4E7ED;border-radius:2px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-menu--collapse .el-submenu.is-opened>.el-submenu__title .el-submenu__icon-arrow{-webkit-transform:none;transform:none}.el-menu--popup{z-index:100;min-width:200px;border:none;padding:5px 0;border-radius:2px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-menu--popup-bottom-start{margin-top:5px}.el-menu--popup-right-start{margin-left:5px;margin-right:5px}.el-menu-item{font-size:14px;color:#303133;padding:0 20px;cursor:pointer;position:relative;-webkit-transition:border-color .3s,background-color .3s,color .3s;transition:border-color .3s,background-color .3s,color .3s;-webkit-box-sizing:border-box;box-sizing:border-box;white-space:nowrap}.el-menu-item *{vertical-align:middle}.el-menu-item i{color:#909399}.el-menu-item:focus,.el-menu-item:hover{outline:0;background-color:#ecf5ff}.el-menu-item.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-radio,.el-submenu__title{cursor:pointer;position:relative;white-space:nowrap}.el-menu-item [class^=el-icon-]{margin-right:5px;width:24px;text-align:center;font-size:18px;vertical-align:middle}.el-menu-item.is-active{color:#409EFF}.el-menu-item.is-active i{color:inherit}.el-submenu{list-style:none;margin:0;padding-left:0}.el-submenu__title{font-size:14px;color:#303133;padding:0 20px;-webkit-transition:border-color .3s,background-color .3s,color .3s;transition:border-color .3s,background-color .3s,color .3s;-webkit-box-sizing:border-box;box-sizing:border-box}.el-submenu__title *{vertical-align:middle}.el-submenu__title i{color:#909399}.el-submenu__title:focus,.el-submenu__title:hover{outline:0;background-color:#ecf5ff}.el-submenu__title.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-submenu__title:hover{background-color:#ecf5ff}.el-submenu .el-menu{border:none}.el-submenu .el-menu-item{height:50px;line-height:50px;padding:0 45px;min-width:200px}.el-submenu__icon-arrow{position:absolute;top:50%;right:20px;margin-top:-7px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-size:12px}.el-submenu.is-active .el-submenu__title{border-bottom-color:#409EFF}.el-submenu.is-opened>.el-submenu__title .el-submenu__icon-arrow{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg)}.el-submenu.is-disabled .el-menu-item,.el-submenu.is-disabled .el-submenu__title{opacity:.25;cursor:not-allowed;background:0 0!important}.el-radio__input.is-disabled .el-radio__inner,.el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:#f5f7fa;border-color:#E4E7ED}.el-submenu [class^=el-icon-]{vertical-align:middle;margin-right:5px;width:24px;text-align:center;font-size:18px}.el-menu-item-group>ul{padding:0}.el-menu-item-group__title{padding:7px 0 7px 20px;line-height:normal;font-size:12px;color:#909399}.el-radio,.el-radio--medium.is-bordered .el-radio__label{font-size:14px}.horizontal-collapse-transition .el-submenu__title .el-submenu__icon-arrow{-webkit-transition:.2s;transition:.2s;opacity:0}.el-radio{color:#606266;font-weight:500;line-height:1;display:inline-block;outline:0;margin-right:30px;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.el-radio.is-bordered{padding:12px 20px 0 10px;border-radius:4px;border:1px solid #DCDFE6;-webkit-box-sizing:border-box;box-sizing:border-box;height:40px}.el-radio.is-bordered.is-checked{border-color:#409EFF}.el-radio.is-bordered.is-disabled{cursor:not-allowed;border-color:#EBEEF5}.el-radio.is-bordered+.el-radio.is-bordered{margin-left:10px}.el-radio--medium.is-bordered{padding:10px 20px 0 10px;border-radius:4px;height:36px}.el-radio--mini.is-bordered .el-radio__label,.el-radio--small.is-bordered .el-radio__label{font-size:12px}.el-radio--medium.is-bordered .el-radio__inner{height:14px;width:14px}.el-radio--small.is-bordered{padding:8px 15px 0 10px;border-radius:3px;height:32px}.el-radio--small.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio--mini.is-bordered{padding:6px 15px 0 10px;border-radius:3px;height:28px}.el-radio--mini.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio:last-child{margin-right:0}.el-radio__input{white-space:nowrap;cursor:pointer;outline:0;display:inline-block;line-height:1;position:relative;vertical-align:middle}.el-radio__input.is-disabled .el-radio__inner{cursor:not-allowed}.el-radio__input.is-disabled .el-radio__inner::after{cursor:not-allowed;background-color:#f5f7fa}.el-radio__input.is-disabled .el-radio__inner+.el-radio__label{cursor:not-allowed}.el-radio__input.is-disabled.is-checked .el-radio__inner::after{background-color:#C0C4CC}.el-radio__input.is-disabled+span.el-radio__label{color:#C0C4CC;cursor:not-allowed}.el-radio-button__inner,.el-radio__inner{-webkit-box-sizing:border-box;cursor:pointer}.el-radio__input.is-checked .el-radio__inner{border-color:#409EFF;background:#409EFF}.el-radio__input.is-checked .el-radio__inner::after{-webkit-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1)}.el-radio__input.is-checked+.el-radio__label{color:#409EFF}.el-radio__input.is-focus .el-radio__inner{border-color:#409EFF}.el-radio__inner{border:1px solid #DCDFE6;border-radius:100%;width:14px;height:14px;background-color:#FFF;position:relative;display:inline-block;box-sizing:border-box}.el-radio__inner:hover{border-color:#409EFF}.el-radio__inner::after{width:4px;height:4px;border-radius:100%;background-color:#FFF;content:"";position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%) scale(0);transform:translate(-50%,-50%) scale(0);-webkit-transition:-webkit-transform .15s ease-in;transition:-webkit-transform .15s ease-in;transition:transform .15s ease-in;transition:transform .15s ease-in,-webkit-transform .15s ease-in}.el-radio__original{opacity:0;outline:0;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.el-radio-button,.el-radio-button__inner{display:inline-block;position:relative;outline:0}.el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner{-webkit-box-shadow:0 0 2px 2px #409EFF;box-shadow:0 0 2px 2px #409EFF}.el-radio__label{font-size:14px;padding-left:10px}.el-radio-group{display:inline-block;line-height:1;vertical-align:middle;font-size:0}.el-radio-button__inner{line-height:1;white-space:nowrap;vertical-align:middle;background:#FFF;border:1px solid #DCDFE6;font-weight:500;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;box-sizing:border-box;margin:0;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);padding:12px 20px;font-size:14px;border-radius:0}.el-switch,.el-table .caret-wrapper{display:-webkit-inline-box;vertical-align:middle}.el-radio-button__inner.is-round{padding:12px 20px}.el-radio-button__inner:hover{color:#409EFF}.el-radio-button__inner [class*=el-icon-]{line-height:.9}.el-radio-button__inner [class*=el-icon-]+span{margin-left:5px}.el-radio-button:first-child .el-radio-button__inner{border-left:1px solid #DCDFE6;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-radio-button__orig-radio{opacity:0;outline:0;position:absolute;z-index:-1}.el-radio-button__orig-radio:checked+.el-radio-button__inner{color:#FFF;background-color:#409EFF;border-color:#409EFF;-webkit-box-shadow:-1px 0 0 0 #409EFF;box-shadow:-1px 0 0 0 #409EFF}.el-radio-button__orig-radio:disabled+.el-radio-button__inner{color:#C0C4CC;cursor:not-allowed;background-image:none;background-color:#FFF;border-color:#EBEEF5;-webkit-box-shadow:none;box-shadow:none}.el-radio-button__orig-radio:disabled:checked+.el-radio-button__inner{background-color:#F2F6FC}.el-radio-button:last-child .el-radio-button__inner{border-radius:0 4px 4px 0}.el-radio-button:first-child:last-child .el-radio-button__inner{border-radius:4px}.el-radio-button--medium .el-radio-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-radio-button--medium .el-radio-button__inner.is-round{padding:10px 20px}.el-radio-button--small .el-radio-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-radio-button--small .el-radio-button__inner.is-round{padding:9px 15px}.el-radio-button--mini .el-radio-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-radio-button--mini .el-radio-button__inner.is-round{padding:7px 15px}.el-radio-button:focus:not(.is-focus):not(:active):not(.is-disabled){-webkit-box-shadow:0 0 2px 2px #409EFF;box-shadow:0 0 2px 2px #409EFF}.el-switch{display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;font-size:14px;line-height:20px;height:20px}.el-switch__core,.el-switch__label{display:inline-block;cursor:pointer}.el-switch.is-disabled .el-switch__core,.el-switch.is-disabled .el-switch__label{cursor:not-allowed}.el-switch__label{-webkit-transition:.2s;transition:.2s;height:20px;font-size:14px;font-weight:500;vertical-align:middle;color:#303133}.el-switch__label.is-active{color:#409EFF}.el-switch__label--left{margin-right:10px}.el-switch__label--right{margin-left:10px}.el-switch__label *{line-height:1;font-size:14px;display:inline-block}.el-switch__input{position:absolute;width:0;height:0;opacity:0;margin:0}.el-switch__core{margin:0;position:relative;width:40px;height:20px;border:1px solid #DCDFE6;outline:0;border-radius:10px;-webkit-box-sizing:border-box;box-sizing:border-box;background:#DCDFE6;-webkit-transition:border-color .3s,background-color .3s;transition:border-color .3s,background-color .3s;vertical-align:middle}.el-switch__core:after{content:"";position:absolute;top:1px;left:1px;border-radius:100%;-webkit-transition:all .3s;transition:all .3s;width:16px;height:16px;background-color:#FFF}.el-switch.is-checked .el-switch__core{border-color:#409EFF;background-color:#409EFF}.el-switch.is-checked .el-switch__core::after{left:100%;margin-left:-17px}.el-switch.is-disabled{opacity:.6}.el-switch--wide .el-switch__label.el-switch__label--left span{left:10px}.el-switch--wide .el-switch__label.el-switch__label--right span{right:10px}.el-switch .label-fade-enter,.el-switch .label-fade-leave-active{opacity:0}.el-select-dropdown{position:absolute;z-index:1001;border:1px solid #E4E7ED;border-radius:4px;background-color:#FFF;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-box-sizing:border-box;box-sizing:border-box;margin:5px 0}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected{color:#409EFF;background-color:#FFF}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover{background-color:#f5f7fa}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after{position:absolute;right:20px;font-family:element-icons;content:"\E611";font-size:12px;font-weight:700;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown__empty{padding:10px 0;margin:0;text-align:center;color:#999;font-size:14px}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{list-style:none;padding:6px 0;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-select-dropdown__item{font-size:14px;padding:0 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#606266;height:34px;line-height:34px;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer}.el-select .el-tag,.el-table{-webkit-box-sizing:border-box}.el-select-dropdown__item.is-disabled{color:#C0C4CC;cursor:not-allowed}.el-select-dropdown__item.is-disabled:hover{background-color:#FFF}.el-select-dropdown__item.hover,.el-select-dropdown__item:hover{background-color:#f5f7fa}.el-select-dropdown__item.selected{color:#409EFF;font-weight:700}.el-select-group{margin:0;padding:0}.el-select-group__wrap{position:relative;list-style:none;margin:0;padding:0}.el-select-group__wrap:not(:last-of-type){padding-bottom:24px}.el-select-group__wrap:not(:last-of-type)::after{content:'';position:absolute;display:block;left:20px;right:20px;bottom:12px;height:1px;background:#E4E7ED}.el-select-group__title{padding-left:20px;font-size:12px;color:#909399;line-height:30px}.el-select-group .el-select-dropdown__item{padding-left:20px}.el-select{display:inline-block;position:relative}.el-select .el-select__tags>span{display:contents}.el-select:hover .el-input__inner{border-color:#C0C4CC}.el-select .el-input__inner{cursor:pointer;padding-right:35px}.el-select .el-input__inner:focus{border-color:#409EFF}.el-select .el-input .el-select__caret{color:#C0C4CC;font-size:14px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg);cursor:pointer}.el-select .el-input .el-select__caret.is-reverse{-webkit-transform:rotateZ(0);transform:rotateZ(0)}.el-select .el-input .el-select__caret.is-show-close{font-size:14px;text-align:center;-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg);border-radius:100%;color:#C0C4CC;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-select .el-input .el-select__caret.is-show-close:hover{color:#909399}.el-select .el-input.is-disabled .el-input__inner{cursor:not-allowed}.el-select .el-input.is-disabled .el-input__inner:hover{border-color:#E4E7ED}.el-range-editor.is-active,.el-range-editor.is-active:hover,.el-select .el-input.is-focus .el-input__inner{border-color:#409EFF}.el-select>.el-input{display:block}.el-select__input{border:none;outline:0;padding:0;margin-left:15px;color:#666;font-size:14px;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:28px;background-color:transparent}.el-select__input.is-mini{height:14px}.el-select__close{cursor:pointer;position:absolute;top:8px;z-index:1000;right:25px;color:#C0C4CC;line-height:18px;font-size:14px}.el-select__close:hover{color:#909399}.el-select__tags{position:absolute;line-height:normal;white-space:normal;z-index:1;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap}.el-select .el-tag__close{margin-top:-2px}.el-select .el-tag{box-sizing:border-box;border-color:transparent;margin:2px 0 2px 6px;background-color:#f0f2f5}.el-select .el-tag__close.el-icon-close{background-color:#C0C4CC;right:-7px;top:0;color:#FFF}.el-select .el-tag__close.el-icon-close:hover{background-color:#909399}.el-table,.el-table__expanded-cell{background-color:#FFF}.el-select .el-tag__close.el-icon-close::before{display:block;-webkit-transform:translate(0,.5px);transform:translate(0,.5px)}.el-table{position:relative;overflow:hidden;box-sizing:border-box;-webkit-box-flex:1;-ms-flex:1;flex:1;width:100%;max-width:100%;font-size:14px;color:#606266}.el-table__empty-block{min-height:60px;text-align:center;width:100%;height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-table__empty-text{line-height:60px;width:50%;color:#909399}.el-table__expand-column .cell{padding:0;text-align:center}.el-table__expand-icon{position:relative;cursor:pointer;color:#666;font-size:12px;-webkit-transition:-webkit-transform .2s ease-in-out;transition:-webkit-transform .2s ease-in-out;transition:transform .2s ease-in-out;transition:transform .2s ease-in-out,-webkit-transform .2s ease-in-out;height:20px}.el-table__expand-icon--expanded{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-table__expand-icon>.el-icon{position:absolute;left:50%;top:50%;margin-left:-5px;margin-top:-5px}.el-table__expanded-cell[class*=cell]{padding:20px 50px}.el-table__expanded-cell:hover{background-color:transparent!important}.el-table--fit{border-right:0;border-bottom:0}.el-table--fit td.gutter,.el-table--fit th.gutter{border-right-width:1px}.el-table--scrollable-x .el-table__body-wrapper{overflow-x:auto}.el-table--scrollable-y .el-table__body-wrapper{overflow-y:auto}.el-table thead{color:#909399;font-weight:500}.el-table thead.is-group th{background:#f5f7fa}.el-table th,.el-table tr{background-color:#FFF}.el-table td,.el-table th{padding:12px 0;min-width:0;-webkit-box-sizing:border-box;box-sizing:border-box;text-overflow:ellipsis;vertical-align:middle;position:relative;text-align:left}.el-table td.is-center,.el-table th.is-center{text-align:center}.el-table td.is-right,.el-table th.is-right{text-align:right}.el-table td.gutter,.el-table th.gutter{width:15px;border-right-width:0;border-bottom-width:0;padding:0}.el-table td.is-hidden>*,.el-table th.is-hidden>*{visibility:hidden}.el-table--medium td,.el-table--medium th{padding:10px 0}.el-table--small{font-size:12px}.el-table--small td,.el-table--small th{padding:8px 0}.el-table--mini{font-size:12px}.el-table--mini td,.el-table--mini th{padding:6px 0}.el-table .cell,.el-table th div{padding-right:10px;overflow:hidden;text-overflow:ellipsis;padding-left:10px}.el-table tr input[type=checkbox]{margin:0}.el-table td,.el-table th.is-leaf{border-bottom:1px solid #EBEEF5}.el-table th.is-sortable{cursor:pointer}.el-table th{white-space:nowrap;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-date-table,.el-slider__button-wrapper,.el-time-panel{-moz-user-select:none;-ms-user-select:none}.el-table th div{display:inline-block;line-height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;white-space:nowrap}.el-table th>.cell{position:relative;word-wrap:normal;text-overflow:ellipsis;display:inline-block;vertical-align:middle;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.el-table th>.cell.highlight{color:#409EFF}.el-table th.required>div::before{display:inline-block;content:"";width:8px;height:8px;border-radius:50%;background:#ff4d51;margin-right:5px;vertical-align:middle}.el-table td div{-webkit-box-sizing:border-box;box-sizing:border-box}.el-table td.gutter{width:0}.el-table .cell{-webkit-box-sizing:border-box;box-sizing:border-box;white-space:normal;word-break:break-all;line-height:23px}.el-table .cell.el-tooltip{white-space:nowrap;min-width:50px}.el-table--border,.el-table--group{border:1px solid #EBEEF5}.el-table--border::after,.el-table--group::after,.el-table::before{content:'';position:absolute;background-color:#EBEEF5;z-index:1}.el-table--border::after,.el-table--group::after{top:0;right:0;width:1px;height:100%}.el-table::before{left:0;bottom:0;width:100%;height:1px}.el-table--border{border-right:none;border-bottom:none}.el-table--border.el-loading-parent--relative{border-color:transparent}.el-table--border td,.el-table--border th,.el-table__body-wrapper .el-table--border.is-scrolling-left~.el-table__fixed{border-right:1px solid #EBEEF5}.el-table--border td:first-child .cell,.el-table--border th:first-child .cell{padding-left:10px}.el-table--border th.gutter:last-of-type{border-bottom:1px solid #EBEEF5;border-bottom-width:1px}.el-table--border th,.el-table__fixed-right-patch{border-bottom:1px solid #EBEEF5}.el-table--hidden{visibility:hidden}.el-table__fixed,.el-table__fixed-right{position:absolute;top:0;left:0;overflow-x:hidden;overflow-y:hidden;-webkit-box-shadow:0 0 10px rgba(0,0,0,.12);box-shadow:0 0 10px rgba(0,0,0,.12)}.el-table__fixed-right::before,.el-table__fixed::before{content:'';position:absolute;left:0;bottom:0;width:100%;height:1px;background-color:#EBEEF5;z-index:4}.el-table__fixed-right-patch{position:absolute;top:-1px;right:0;background-color:#FFF}.el-table__fixed-right{top:0;left:auto;right:0}.el-table__fixed-right .el-table__fixed-body-wrapper,.el-table__fixed-right .el-table__fixed-footer-wrapper,.el-table__fixed-right .el-table__fixed-header-wrapper{left:auto;right:0}.el-table__fixed-header-wrapper{position:absolute;left:0;top:0;z-index:3}.el-table__fixed-footer-wrapper{position:absolute;left:0;bottom:0;z-index:3}.el-table__fixed-footer-wrapper tbody td{border-top:1px solid #EBEEF5;background-color:#f5f7fa;color:#606266}.el-table__fixed-body-wrapper{position:absolute;left:0;top:37px;overflow:hidden;z-index:3}.el-table__body-wrapper,.el-table__footer-wrapper,.el-table__header-wrapper{width:100%}.el-table__footer-wrapper{margin-top:-1px}.el-table__footer-wrapper td{border-top:1px solid #EBEEF5}.el-table__body,.el-table__footer,.el-table__header{table-layout:fixed;border-collapse:separate}.el-table__footer-wrapper,.el-table__header-wrapper{overflow:hidden}.el-table__footer-wrapper tbody td,.el-table__header-wrapper tbody td{background-color:#f5f7fa;color:#606266}.el-table__body-wrapper{overflow:hidden;position:relative}.el-table__body-wrapper.is-scrolling-left~.el-table__fixed,.el-table__body-wrapper.is-scrolling-none~.el-table__fixed,.el-table__body-wrapper.is-scrolling-none~.el-table__fixed-right,.el-table__body-wrapper.is-scrolling-right~.el-table__fixed-right{-webkit-box-shadow:none;box-shadow:none}.el-table__body-wrapper .el-table--border.is-scrolling-right~.el-table__fixed-right{border-left:1px solid #EBEEF5}.el-table .caret-wrapper{display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:34px;width:24px;cursor:pointer;overflow:initial;position:relative}.el-table .sort-caret{width:0;height:0;border:5px solid transparent;position:absolute;left:7px}.el-table .sort-caret.ascending{border-bottom-color:#C0C4CC;top:5px}.el-table .sort-caret.descending{border-top-color:#C0C4CC;bottom:7px}.el-table .ascending .sort-caret.ascending{border-bottom-color:#409EFF}.el-table .descending .sort-caret.descending{border-top-color:#409EFF}.el-table .hidden-columns{visibility:hidden;position:absolute;z-index:-1}.el-table--striped .el-table__body tr.el-table__row--striped td{background:#FAFAFA}.el-table--striped .el-table__body tr.el-table__row--striped.current-row td,.el-table__body tr.current-row>td,.el-table__body tr.hover-row.current-row>td,.el-table__body tr.hover-row.el-table__row--striped.current-row>td,.el-table__body tr.hover-row.el-table__row--striped>td,.el-table__body tr.hover-row>td{background-color:#ecf5ff}.el-table__column-resize-proxy{position:absolute;left:200px;top:0;bottom:0;width:0;border-left:1px solid #EBEEF5;z-index:10}.el-table__column-filter-trigger{display:inline-block;line-height:34px;cursor:pointer}.el-table__column-filter-trigger i{color:#909399;font-size:12px;-webkit-transform:scale(.75);transform:scale(.75)}.el-table--enable-row-transition .el-table__body td{-webkit-transition:background-color .25s ease;transition:background-color .25s ease}.el-table--enable-row-hover .el-table__body tr:hover>td{background-color:#f5f7fa}.el-table--fluid-height .el-table__fixed,.el-table--fluid-height .el-table__fixed-right{bottom:0;overflow:hidden}.el-table-column--selection .cell{padding-left:14px;padding-right:14px}.el-table-filter{border:1px solid #EBEEF5;border-radius:2px;background-color:#FFF;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-box-sizing:border-box;box-sizing:border-box;margin:2px 0}.el-table-filter__list{padding:5px 0;margin:0;list-style:none;min-width:100px}.el-table-filter__list-item{line-height:36px;padding:0 10px;cursor:pointer;font-size:14px}.el-table-filter__list-item:hover{background-color:#ecf5ff;color:#66b1ff}.el-table-filter__list-item.is-active{background-color:#409EFF;color:#FFF}.el-table-filter__content{min-width:100px}.el-table-filter__bottom{border-top:1px solid #EBEEF5;padding:8px}.el-table-filter__bottom button{background:0 0;border:none;color:#606266;cursor:pointer;font-size:13px;padding:0 3px}.el-date-table td.in-range div,.el-date-table td.in-range div:hover,.el-date-table.is-week-mode .el-date-table__row.current div,.el-date-table.is-week-mode .el-date-table__row:hover div{background-color:#F2F6FC}.el-table-filter__bottom button:hover{color:#409EFF}.el-table-filter__bottom button:focus{outline:0}.el-table-filter__bottom button.is-disabled{color:#C0C4CC;cursor:not-allowed}.el-table-filter__wrap{max-height:280px}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{display:block;margin-right:5px;margin-bottom:8px;margin-left:5px}.el-table-filter__checkbox-group .el-checkbox:last-child{margin-bottom:0}.el-date-table{font-size:12px;-webkit-user-select:none;user-select:none}.el-date-table.is-week-mode .el-date-table__row:hover td.available:hover{color:#606266}.el-date-table.is-week-mode .el-date-table__row:hover td:first-child div{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.el-date-table.is-week-mode .el-date-table__row:hover td:last-child div{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.el-date-table td{width:32px;height:30px;padding:4px 0;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;cursor:pointer;position:relative}.el-date-table td div{height:30px;padding:3px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-date-table td span{width:24px;height:24px;display:block;margin:0 auto;line-height:24px;position:absolute;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);border-radius:50%}.el-month-table td .cell,.el-year-table td .cell{width:48px;height:32px;display:block;line-height:32px}.el-date-table td.next-month,.el-date-table td.prev-month{color:#C0C4CC}.el-date-table td.today{position:relative}.el-date-table td.today span{color:#409EFF;font-weight:700}.el-date-table td.today.end-date span,.el-date-table td.today.start-date span{color:#FFF}.el-date-table td.available:hover{color:#409EFF}.el-date-table td.current:not(.disabled) span{color:#FFF;background-color:#409EFF}.el-date-table td.end-date div,.el-date-table td.start-date div{color:#FFF}.el-date-table td.end-date span,.el-date-table td.start-date span{background-color:#409EFF}.el-date-table td.start-date div{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.el-date-table td.end-date div{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.el-date-table td.disabled div{background-color:#f5f7fa;opacity:1;cursor:not-allowed;color:#C0C4CC}.el-date-table td.selected div{margin-left:5px;margin-right:5px;background-color:#F2F6FC;border-radius:15px}.el-date-table td.selected div:hover{background-color:#F2F6FC}.el-date-table td.selected span{background-color:#409EFF;color:#FFF;border-radius:15px}.el-date-table td.week{font-size:80%;color:#606266}.el-date-table th{padding:5px;color:#606266;font-weight:400;border-bottom:solid 1px #EBEEF5}.el-date-picker__time-header,.el-date-range-picker__time-header{border-bottom:1px solid #e4e4e4;font-size:12px;-webkit-box-sizing:border-box}.el-month-table{font-size:12px;margin:-1px;border-collapse:collapse}.el-month-table td{text-align:center;padding:20px 3px;cursor:pointer}.el-month-table td.today .cell{color:#409EFF;font-weight:700}.el-month-table td.disabled .cell{background-color:#f5f7fa;cursor:not-allowed;color:#C0C4CC}.el-month-table td.disabled .cell:hover{color:#C0C4CC}.el-month-table td .cell{color:#606266;margin:0 auto}.el-month-table td .cell:hover,.el-month-table td.current:not(.disabled) .cell{color:#409EFF}.el-year-table{font-size:12px;margin:-1px;border-collapse:collapse}.el-year-table .el-icon{color:#303133}.el-year-table td{text-align:center;padding:20px 3px;cursor:pointer}.el-year-table td.today .cell{color:#409EFF;font-weight:700}.el-year-table td.disabled .cell{background-color:#f5f7fa;cursor:not-allowed;color:#C0C4CC}.el-year-table td.disabled .cell:hover{color:#C0C4CC}.el-year-table td .cell{color:#606266;margin:0 auto}.el-year-table td .cell:hover,.el-year-table td.current:not(.disabled) .cell{color:#409EFF}.el-date-range-picker{width:646px}.el-date-range-picker.has-sidebar{width:756px}.el-date-range-picker table{table-layout:fixed;width:100%}.el-date-range-picker .el-picker-panel__body{min-width:513px}.el-date-range-picker .el-picker-panel__content{margin:0}.el-date-range-picker__header{position:relative;text-align:center;height:28px}.el-date-range-picker__header [class*=arrow-left]{float:left}.el-date-range-picker__header [class*=arrow-right]{float:right}.el-date-range-picker__header div{font-size:16px;font-weight:500;margin-right:50px}.el-date-range-picker__content{float:left;width:50%;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:16px}.el-date-range-picker__content.is-left{border-right:1px solid #e4e4e4}.el-date-range-picker__content.is-right .el-date-range-picker__header div{margin-left:50px;margin-right:50px}.el-date-range-picker__editors-wrap{-webkit-box-sizing:border-box;box-sizing:border-box;display:table-cell}.el-date-range-picker__editors-wrap.is-right{text-align:right}.el-date-range-picker__time-header{position:relative;padding:8px 5px 5px;display:table;width:100%;box-sizing:border-box}.el-date-range-picker__time-header>.el-icon-arrow-right{font-size:20px;vertical-align:middle;display:table-cell;color:#303133}.el-date-range-picker__time-picker-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-range-picker__time-picker-wrap .el-picker-panel{position:absolute;top:13px;right:0;z-index:1;background:#FFF}.el-date-picker{width:322px}.el-date-picker.has-sidebar.has-time{width:434px}.el-date-picker.has-sidebar{width:438px}.el-date-picker.has-time .el-picker-panel__body-wrapper{position:relative}.el-date-picker .el-picker-panel__content{width:292px}.el-date-picker table{table-layout:fixed;width:100%}.el-date-picker__editor-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-picker__time-header{position:relative;padding:8px 5px 5px;display:table;width:100%;box-sizing:border-box}.el-date-picker__header{margin:12px;text-align:center}.el-date-picker__header--bordered{margin-bottom:0;padding-bottom:12px;border-bottom:solid 1px #EBEEF5}.el-date-picker__header--bordered+.el-picker-panel__content{margin-top:0}.el-date-picker__header-label{font-size:16px;font-weight:500;padding:0 5px;line-height:22px;text-align:center;cursor:pointer;color:#606266}.el-date-picker__header-label.active,.el-date-picker__header-label:hover{color:#409EFF}.el-date-picker__prev-btn{float:left}.el-date-picker__next-btn{float:right}.el-date-picker__time-wrap{padding:10px;text-align:center}.el-date-picker__time-label{float:left;cursor:pointer;line-height:30px;margin-left:10px}.time-select{margin:5px 0;min-width:0}.time-select .el-picker-panel__content{max-height:200px;margin:0}.time-select-item{padding:8px 10px;font-size:14px;line-height:20px}.time-select-item.selected:not(.disabled){color:#409EFF;font-weight:700}.time-select-item.disabled{color:#E4E7ED;cursor:not-allowed}.time-select-item:hover{background-color:#f5f7fa;font-weight:700;cursor:pointer}.el-date-editor{position:relative;display:inline-block;text-align:left}.el-date-editor.el-input,.el-date-editor.el-input__inner{width:220px}.el-date-editor--daterange.el-input,.el-date-editor--daterange.el-input__inner,.el-date-editor--timerange.el-input,.el-date-editor--timerange.el-input__inner{width:350px}.el-date-editor--datetimerange.el-input,.el-date-editor--datetimerange.el-input__inner{width:400px}.el-date-editor--dates .el-input__inner{text-overflow:ellipsis;white-space:nowrap}.el-date-editor .el-icon-circle-close{cursor:pointer}.el-date-editor .el-range__icon{font-size:14px;margin-left:-5px;color:#C0C4CC;float:left;line-height:32px}.el-date-editor .el-range-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;outline:0;display:inline-block;height:100%;margin:0;padding:0;width:39%;text-align:center;font-size:14px;color:#606266}.el-date-editor .el-range-input::-webkit-input-placeholder{color:#C0C4CC}.el-date-editor .el-range-input::-ms-input-placeholder{color:#C0C4CC}.el-date-editor .el-range-input::placeholder{color:#C0C4CC}.el-date-editor .el-range-separator{display:inline-block;height:100%;padding:0 5px;margin:0;text-align:center;line-height:32px;font-size:14px;width:5%;color:#303133}.el-date-editor .el-range__close-icon{font-size:14px;color:#C0C4CC;width:25px;display:inline-block;float:right;line-height:32px}.el-range-editor.el-input__inner{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:3px 10px}.el-range-editor .el-range-input{line-height:1}.el-range-editor--medium.el-input__inner{height:36px}.el-range-editor--medium .el-range-separator{line-height:28px;font-size:14px}.el-range-editor--medium .el-range-input{font-size:14px}.el-range-editor--medium .el-range__close-icon,.el-range-editor--medium .el-range__icon{line-height:28px}.el-range-editor--small.el-input__inner{height:32px}.el-range-editor--small .el-range-separator{line-height:24px;font-size:13px}.el-range-editor--small .el-range-input{font-size:13px}.el-range-editor--small .el-range__close-icon,.el-range-editor--small .el-range__icon{line-height:24px}.el-range-editor--mini.el-input__inner{height:28px}.el-range-editor--mini .el-range-separator{line-height:20px;font-size:12px}.el-range-editor--mini .el-range-input{font-size:12px}.el-range-editor--mini .el-range__close-icon,.el-range-editor--mini .el-range__icon{line-height:20px}.el-range-editor.is-disabled{background-color:#f5f7fa;border-color:#E4E7ED;color:#C0C4CC;cursor:not-allowed}.el-range-editor.is-disabled:focus,.el-range-editor.is-disabled:hover{border-color:#E4E7ED}.el-picker-panel,.el-time-panel{border:1px solid #E4E7ED;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-range-editor.is-disabled input{background-color:#f5f7fa;color:#C0C4CC;cursor:not-allowed}.el-range-editor.is-disabled input::-webkit-input-placeholder{color:#C0C4CC}.el-range-editor.is-disabled input::-ms-input-placeholder{color:#C0C4CC}.el-range-editor.is-disabled input::placeholder{color:#C0C4CC}.el-range-editor.is-disabled .el-range-separator{color:#C0C4CC}.el-picker-panel{color:#606266;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);background:#FFF;border-radius:4px;line-height:30px;margin:5px 0}.el-picker-panel__body-wrapper::after,.el-picker-panel__body::after{content:"";display:table;clear:both}.el-picker-panel__content{position:relative;margin:15px}.el-picker-panel__footer{border-top:1px solid #e4e4e4;padding:4px;text-align:right;background-color:#FFF;position:relative;font-size:0}.el-picker-panel__shortcut{display:block;width:100%;border:0;background-color:transparent;line-height:28px;font-size:14px;color:#606266;padding-left:12px;text-align:left;outline:0;cursor:pointer}.el-picker-panel__shortcut:hover{color:#409EFF}.el-picker-panel__shortcut.active{background-color:#e6f1fe;color:#409EFF}.el-picker-panel__btn{border:1px solid #dcdcdc;color:#333;line-height:24px;border-radius:2px;padding:0 20px;cursor:pointer;background-color:transparent;outline:0;font-size:12px}.el-picker-panel__btn[disabled]{color:#ccc;cursor:not-allowed}.el-picker-panel__icon-btn{font-size:12px;color:#303133;border:0;background:0 0;cursor:pointer;outline:0;margin-top:8px}.el-picker-panel__icon-btn:hover{color:#409EFF}.el-picker-panel__icon-btn.is-disabled{color:#bbb}.el-picker-panel__icon-btn.is-disabled:hover{cursor:not-allowed}.el-picker-panel__link-btn{vertical-align:middle}.el-picker-panel [slot=sidebar],.el-picker-panel__sidebar{position:absolute;top:0;bottom:0;width:110px;border-right:1px solid #e4e4e4;-webkit-box-sizing:border-box;box-sizing:border-box;padding-top:6px;background-color:#FFF;overflow:auto}.el-picker-panel [slot=sidebar]+.el-picker-panel__body,.el-picker-panel__sidebar+.el-picker-panel__body{margin-left:110px}.el-time-spinner.has-seconds .el-time-spinner__wrapper{width:33.3%}.el-time-spinner__wrapper{max-height:190px;overflow:auto;display:inline-block;width:50%;vertical-align:top;position:relative}.el-time-spinner__wrapper .el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default){padding-bottom:15px}.el-time-spinner__input.el-input .el-input__inner,.el-time-spinner__list{padding:0;text-align:center}.el-time-spinner__wrapper.is-arrow{-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;overflow:hidden}.el-time-spinner__wrapper.is-arrow .el-time-spinner__list{-webkit-transform:translateY(-32px);transform:translateY(-32px)}.el-time-spinner__wrapper.is-arrow .el-time-spinner__item:hover:not(.disabled):not(.active){background:#FFF;cursor:default}.el-time-spinner__arrow{font-size:12px;color:#909399;position:absolute;left:0;width:100%;z-index:1;text-align:center;height:30px;line-height:30px;cursor:pointer}.el-time-spinner__arrow:hover{color:#409EFF}.el-time-spinner__arrow.el-icon-arrow-up{top:10px}.el-time-spinner__arrow.el-icon-arrow-down{bottom:10px}.el-time-spinner__input.el-input{width:70%}.el-time-spinner__list{margin:0;list-style:none}.el-time-spinner__list::after,.el-time-spinner__list::before{content:'';display:block;width:100%;height:80px}.el-time-spinner__item{height:32px;line-height:32px;font-size:12px;color:#606266}.el-time-spinner__item:hover:not(.disabled):not(.active){background:#f5f7fa;cursor:pointer}.el-time-spinner__item.active:not(.disabled){color:#303133;font-weight:700}.el-time-spinner__item.disabled{color:#C0C4CC;cursor:not-allowed}.el-time-panel{margin:5px 0;background-color:#FFF;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);border-radius:2px;position:absolute;width:180px;left:0;z-index:1000;-webkit-user-select:none;user-select:none;-webkit-box-sizing:content-box;box-sizing:content-box}.el-time-panel__content{font-size:0;position:relative;overflow:hidden}.el-time-panel__content::after,.el-time-panel__content::before{content:"";top:50%;position:absolute;margin-top:-15px;height:32px;z-index:-1;left:0;right:0;-webkit-box-sizing:border-box;box-sizing:border-box;padding-top:6px;text-align:left;border-top:1px solid #E4E7ED;border-bottom:1px solid #E4E7ED}.el-time-panel__content::after{left:50%;margin-left:12%;margin-right:12%}.el-time-panel__content::before{padding-left:50%;margin-right:12%;margin-left:12%}.el-time-panel__content.has-seconds::after{left:calc(100% / 3 * 2)}.el-time-panel__content.has-seconds::before{padding-left:calc(100% / 3)}.el-time-panel__footer{border-top:1px solid #e4e4e4;padding:4px;height:36px;line-height:25px;text-align:right;-webkit-box-sizing:border-box;box-sizing:border-box}.el-time-panel__btn{border:none;line-height:28px;padding:0 5px;margin:0 5px;cursor:pointer;background-color:transparent;outline:0;font-size:12px;color:#303133}.el-time-panel__btn.confirm{font-weight:800;color:#409EFF}.el-time-range-picker{width:354px;overflow:visible}.el-time-range-picker__content{position:relative;text-align:center;padding:10px}.el-time-range-picker__cell{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:4px 7px 7px;width:50%;display:inline-block}.el-time-range-picker__header{margin-bottom:5px;text-align:center;font-size:14px}.el-popover__title,.el-tooltip__popper[x-placement^=top]{margin-bottom:12px}.el-time-range-picker__body{border-radius:2px;border:1px solid #E4E7ED}.el-popover{position:absolute;background:#FFF;min-width:150px;border-radius:4px;border:1px solid #EBEEF5;padding:12px;z-index:2000;color:#606266;line-height:1.4;text-align:justify;font-size:14px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);word-break:break-all}.el-card.is-always-shadow,.el-card.is-hover-shadow:focus,.el-card.is-hover-shadow:hover,.el-cascader-menus,.el-color-picker__panel,.el-message-box,.el-notification{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-popover--plain{padding:18px 20px}.el-popover__title{color:#303133;font-size:16px;line-height:1}.el-popover:focus,.el-popover:focus:active,.el-popover__reference:focus:hover,.el-popover__reference:focus:not(.focusing){outline-width:0}.v-modal-enter{-webkit-animation:v-modal-in .2s ease;animation:v-modal-in .2s ease}.v-modal-leave{-webkit-animation:v-modal-out .2s ease forwards;animation:v-modal-out .2s ease forwards}@keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-out{100%{opacity:0}}.v-modal{position:fixed;left:0;top:0;width:100%;height:100%;opacity:.5;background:#000}.el-popup-parent--hidden{overflow:hidden}.el-message-box{display:inline-block;width:420px;padding-bottom:10px;vertical-align:middle;background-color:#FFF;border-radius:4px;border:1px solid #EBEEF5;font-size:18px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);text-align:left;overflow:hidden;-webkit-backface-visibility:hidden;backface-visibility:hidden}.el-message-box__wrapper{position:fixed;top:0;bottom:0;left:0;right:0;text-align:center}.el-message-box__wrapper::after{content:"";display:inline-block;height:100%;width:0;vertical-align:middle}.el-message-box__header{position:relative;padding:15px 15px 10px}.el-message-box__title{padding-left:0;margin-bottom:0;font-size:18px;line-height:1;color:#303133}.el-message-box__headerbtn{position:absolute;top:15px;right:15px;padding:0;border:none;outline:0;background:0 0;font-size:16px;cursor:pointer}.el-form-item.is-error .el-input__inner,.el-form-item.is-error .el-input__inner:focus,.el-form-item.is-error .el-textarea__inner,.el-form-item.is-error .el-textarea__inner:focus,.el-message-box__input input.invalid,.el-message-box__input input.invalid:focus{border-color:#F56C6C}.el-message-box__headerbtn .el-message-box__close{color:#909399}.el-message-box__headerbtn:focus .el-message-box__close,.el-message-box__headerbtn:hover .el-message-box__close{color:#409EFF}.el-message-box__content{position:relative;padding:10px 15px;color:#606266;font-size:14px}.el-message-box__input{padding-top:15px}.el-message-box__status{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);font-size:24px!important}.el-message-box__status::before{padding-left:1px}.el-message-box__status+.el-message-box__message{padding-left:36px;padding-right:12px}.el-message-box__status.el-icon-success{color:#67C23A}.el-message-box__status.el-icon-info{color:#909399}.el-message-box__status.el-icon-warning{color:#E6A23C}.el-message-box__status.el-icon-error{color:#F56C6C}.el-message-box__message{margin:0}.el-message-box__message p{margin:0;line-height:24px}.el-message-box__errormsg{color:#F56C6C;font-size:12px;min-height:18px;margin-top:2px}.el-message-box__btns{padding:5px 15px 0;text-align:right}.el-message-box__btns button:nth-child(2){margin-left:10px}.el-message-box__btns-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.el-message-box--center{padding-bottom:30px}.el-message-box--center .el-message-box__header{padding-top:30px}.el-message-box--center .el-message-box__title{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-message-box--center .el-message-box__status{position:relative;top:auto;padding-right:5px;text-align:center;-webkit-transform:translateY(-1px);transform:translateY(-1px)}.el-message-box--center .el-message-box__message{margin-left:0}.el-message-box--center .el-message-box__btns,.el-message-box--center .el-message-box__content{text-align:center}.el-message-box--center .el-message-box__content{padding-left:27px;padding-right:27px}.msgbox-fade-enter-active{-webkit-animation:msgbox-fade-in .3s;animation:msgbox-fade-in .3s}.msgbox-fade-leave-active{-webkit-animation:msgbox-fade-out .3s;animation:msgbox-fade-out .3s}@-webkit-keyframes msgbox-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@keyframes msgbox-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@-webkit-keyframes msgbox-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}@keyframes msgbox-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}.el-breadcrumb{font-size:14px;line-height:1}.el-breadcrumb::after,.el-breadcrumb::before{display:table;content:""}.el-breadcrumb::after{clear:both}.el-breadcrumb__separator{margin:0 9px;font-weight:700;color:#C0C4CC}.el-breadcrumb__separator[class*=icon]{margin:0 6px;font-weight:400}.el-breadcrumb__item{float:left}.el-breadcrumb__inner{color:#606266}.el-breadcrumb__inner a,.el-breadcrumb__inner.is-link{font-weight:700;text-decoration:none;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1);color:#303133}.el-breadcrumb__inner a:hover,.el-breadcrumb__inner.is-link:hover{color:#409EFF;cursor:pointer}.el-breadcrumb__item:last-child .el-breadcrumb__inner,.el-breadcrumb__item:last-child .el-breadcrumb__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover,.el-breadcrumb__item:last-child .el-breadcrumb__inner:hover{font-weight:400;color:#606266;cursor:text}.el-form--label-left .el-form-item__label{text-align:left}.el-form--label-top .el-form-item__label{float:none;display:inline-block;text-align:left;padding:0 0 10px}.el-form--inline .el-form-item{display:inline-block;margin-right:10px;vertical-align:top}.el-form--inline .el-form-item__label{float:none;display:inline-block}.el-form--inline .el-form-item__content{display:inline-block;vertical-align:top}.el-form--inline.el-form--label-top .el-form-item__content{display:block}.el-form-item{margin-bottom:22px}.el-form-item::after,.el-form-item::before{display:table;content:""}.el-form-item::after{clear:both}.el-form-item .el-form-item{margin-bottom:0}.el-form-item--mini.el-form-item,.el-form-item--small.el-form-item{margin-bottom:18px}.el-form-item .el-input__validateIcon{display:none}.el-form-item--medium .el-form-item__content,.el-form-item--medium .el-form-item__label{line-height:36px}.el-form-item--small .el-form-item__content,.el-form-item--small .el-form-item__label{line-height:32px}.el-form-item--small .el-form-item__error{padding-top:2px}.el-form-item--mini .el-form-item__content,.el-form-item--mini .el-form-item__label{line-height:28px}.el-form-item--mini .el-form-item__error{padding-top:1px}.el-form-item__label{text-align:right;vertical-align:middle;float:left;font-size:14px;color:#606266;line-height:40px;padding:0 12px 0 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-form-item__content{line-height:40px;position:relative;font-size:14px}.el-form-item__content::after,.el-form-item__content::before{display:table;content:""}.el-form-item__content::after{clear:both}.el-form-item__content .el-input-group{vertical-align:middle}.el-form-item__error{color:#F56C6C;font-size:12px;line-height:1;padding-top:4px;position:absolute;top:100%;left:0}.el-form-item__error--inline{position:relative;top:auto;left:auto;display:inline-block;margin-left:10px}.el-form-item.is-required:not(.is-no-asterisk)>.el-form-item__label:before{content:'*';color:#F56C6C;margin-right:4px}.el-form-item.is-error .el-input-group__append .el-input__inner,.el-form-item.is-error .el-input-group__prepend .el-input__inner{border-color:transparent}.el-form-item.is-error .el-input__validateIcon{color:#F56C6C}.el-form-item.is-success .el-input__inner,.el-form-item.is-success .el-input__inner:focus,.el-form-item.is-success .el-textarea__inner,.el-form-item.is-success .el-textarea__inner:focus{border-color:#67C23A}.el-form-item.is-success .el-input-group__append .el-input__inner,.el-form-item.is-success .el-input-group__prepend .el-input__inner{border-color:transparent}.el-form-item.is-success .el-input__validateIcon{color:#67C23A}.el-form-item--feedback .el-input__validateIcon{display:inline-block}.el-tabs__header{padding:0;position:relative;margin:0 0 15px}.el-tabs__active-bar{position:absolute;bottom:0;left:0;height:2px;background-color:#409EFF;z-index:1;-webkit-transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1);list-style:none}.el-tabs__new-tab{float:right;border:1px solid #d3dce6;height:18px;width:18px;line-height:18px;margin:12px 0 9px 10px;border-radius:3px;text-align:center;font-size:12px;color:#d3dce6;cursor:pointer;-webkit-transition:all .15s;transition:all .15s}.el-tabs__new-tab .el-icon-plus{-webkit-transform:scale(.8,.8);transform:scale(.8,.8)}.el-tabs__new-tab:hover{color:#409EFF}.el-tabs__nav-wrap{overflow:hidden;margin-bottom:-1px;position:relative}.el-tabs__nav-wrap::after{content:"";position:absolute;left:0;bottom:0;width:100%;height:2px;background-color:#E4E7ED;z-index:1}.el-tabs--border-card>.el-tabs__header .el-tabs__nav-wrap::after,.el-tabs--card>.el-tabs__header .el-tabs__nav-wrap::after{content:none}.el-tabs__nav-wrap.is-scrollable{padding:0 20px;-webkit-box-sizing:border-box;box-sizing:border-box}.el-tabs__nav-scroll{overflow:hidden}.el-tabs__nav-next,.el-tabs__nav-prev{position:absolute;cursor:pointer;line-height:44px;font-size:12px;color:#909399}.el-tabs__nav-next{right:0}.el-tabs__nav-prev{left:0}.el-tabs__nav{white-space:nowrap;position:relative;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;float:left;z-index:2}.el-tabs__nav.is-stretch{min-width:100%;display:-webkit-box;display:-ms-flexbox;display:flex}.el-tabs__nav.is-stretch>*{-webkit-box-flex:1;-ms-flex:1;flex:1;text-align:center}.el-tabs__item{padding:0 20px;height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:40px;display:inline-block;list-style:none;font-size:14px;font-weight:500;color:#303133;position:relative}.el-tabs__item:focus,.el-tabs__item:focus:active{outline:0}.el-tabs__item:focus.is-active.is-focus:not(:active){-webkit-box-shadow:0 0 2px 2px #409eff inset;box-shadow:0 0 2px 2px #409eff inset;border-radius:3px}.el-tabs__item .el-icon-close{border-radius:50%;text-align:center;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);margin-left:5px}.el-tabs__item .el-icon-close:before{-webkit-transform:scale(.9);transform:scale(.9);display:inline-block}.el-tabs--card>.el-tabs__header .el-tabs__active-bar,.el-tabs--left.el-tabs--card .el-tabs__active-bar.is-left,.el-tabs--right.el-tabs--card .el-tabs__active-bar.is-right{display:none}.el-tabs__item .el-icon-close:hover{background-color:#C0C4CC;color:#FFF}.el-tabs__item.is-active{color:#409EFF}.el-tabs__item:hover{color:#409EFF;cursor:pointer}.el-tabs__item.is-disabled{color:#C0C4CC;cursor:default}.el-tabs__content{overflow:hidden;position:relative}.el-tabs--card>.el-tabs__header{border-bottom:1px solid #E4E7ED}.el-tabs--card>.el-tabs__header .el-tabs__nav{border:1px solid #E4E7ED;border-bottom:none;border-radius:4px 4px 0 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-tabs--card>.el-tabs__header .el-tabs__item .el-icon-close{position:relative;font-size:12px;width:0;height:14px;vertical-align:middle;line-height:15px;overflow:hidden;top:-1px;right:-2px;-webkit-transform-origin:100% 50%;transform-origin:100% 50%}.el-tabs--card>.el-tabs__header .el-tabs__item{border-bottom:1px solid transparent;border-left:1px solid #E4E7ED;-webkit-transition:color .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1);transition:color .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1)}.el-tabs--card>.el-tabs__header .el-tabs__item:first-child{border-left:none}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover{padding-left:13px;padding-right:13px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover .el-icon-close{width:14px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active{border-bottom-color:#FFF}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{padding-left:20px;padding-right:20px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable .el-icon-close{width:14px}.el-tabs--border-card{background:#FFF;border:1px solid #DCDFE6;-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04);box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04)}.el-tabs--border-card>.el-tabs__content{padding:15px}.el-tabs--border-card>.el-tabs__header{background-color:#f5f7fa;border-bottom:1px solid #E4E7ED;margin:0}.el-tabs--border-card>.el-tabs__header .el-tabs__item{-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);border:1px solid transparent;margin-top:-1px;color:#909399}.el-tabs--border-card>.el-tabs__header .el-tabs__item+.el-tabs__item,.el-tabs--border-card>.el-tabs__header .el-tabs__item:first-child{margin-left:-1px}.el-col-offset-0,.el-tabs--border-card>.el-tabs__header .is-scrollable .el-tabs__item:first-child{margin-left:0}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{color:#409EFF;background-color:#FFF;border-right-color:#DCDFE6;border-left-color:#DCDFE6}.el-tabs--border-card>.el-tabs__header .el-tabs__item:not(.is-disabled):hover{color:#409EFF}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:#C0C4CC}.el-tabs--bottom .el-tabs__item.is-bottom:nth-child(2),.el-tabs--bottom .el-tabs__item.is-top:nth-child(2),.el-tabs--top .el-tabs__item.is-bottom:nth-child(2),.el-tabs--top .el-tabs__item.is-top:nth-child(2){padding-left:0}.el-tabs--bottom .el-tabs__item.is-bottom:last-child,.el-tabs--bottom .el-tabs__item.is-top:last-child,.el-tabs--top .el-tabs__item.is-bottom:last-child,.el-tabs--top .el-tabs__item.is-top:last-child{padding-right:0}.el-tabs--bottom .el-tabs--left .el-tabs__item:nth-child(2),.el-tabs--bottom .el-tabs--right .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--border-card .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--left .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--right .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--border-card .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--bottom .el-tabs--left .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--right .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--border-card .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card .el-tabs__item:last-child,.el-tabs--top .el-tabs--left .el-tabs__item:last-child,.el-tabs--top .el-tabs--right .el-tabs__item:last-child,.el-tabs--top.el-tabs--border-card .el-tabs__item:last-child,.el-tabs--top.el-tabs--card .el-tabs__item:last-child{padding-right:20px}.el-tabs--bottom .el-tabs__header.is-bottom{margin-bottom:0;margin-top:10px}.el-tabs--bottom.el-tabs--border-card .el-tabs__header.is-bottom{border-bottom:0;border-top:1px solid #DCDFE6}.el-tabs--bottom.el-tabs--border-card .el-tabs__nav-wrap.is-bottom{margin-top:-1px;margin-bottom:0}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom:not(.is-active){border:1px solid transparent}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom{margin:0 -1px -1px}.el-tabs--left,.el-tabs--right{overflow:hidden}.el-tabs--left .el-tabs__header.is-left,.el-tabs--left .el-tabs__header.is-right,.el-tabs--left .el-tabs__nav-scroll,.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__header.is-left,.el-tabs--right .el-tabs__header.is-right,.el-tabs--right .el-tabs__nav-scroll,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{height:100%}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__active-bar.is-right,.el-tabs--right .el-tabs__active-bar.is-left,.el-tabs--right .el-tabs__active-bar.is-right{top:0;bottom:auto;width:2px;height:auto}.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{margin-bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{height:30px;line-height:30px;width:100%;text-align:center;cursor:pointer}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i{-webkit-transform:rotateZ(90deg);transform:rotateZ(90deg)}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next{right:auto;bottom:0}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__nav-wrap.is-left::after{right:0;left:auto}.el-tabs--left .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--left .el-tabs__nav-wrap.is-right.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-right.is-scrollable{padding:30px 0}.el-tabs--left .el-tabs__nav-wrap.is-left::after,.el-tabs--left .el-tabs__nav-wrap.is-right::after,.el-tabs--right .el-tabs__nav-wrap.is-left::after,.el-tabs--right .el-tabs__nav-wrap.is-right::after{height:100%;width:2px;bottom:auto;top:0}.el-tabs--left .el-tabs__nav.is-left,.el-tabs--left .el-tabs__nav.is-right,.el-tabs--right .el-tabs__nav.is-left,.el-tabs--right .el-tabs__nav.is-right{float:none}.el-tabs--left .el-tabs__item.is-left,.el-tabs--left .el-tabs__item.is-right,.el-tabs--right .el-tabs__item.is-left,.el-tabs--right .el-tabs__item.is-right{display:block}.el-tabs--left .el-tabs__header.is-left{float:left;margin-bottom:0;margin-right:10px}.el-button-group>.el-button:not(:last-child),.el-tabs--left .el-tabs__nav-wrap.is-left{margin-right:-1px}.el-tabs--left .el-tabs__item.is-left{text-align:right}.el-tabs--left.el-tabs--card .el-tabs__item.is-left{border-left:none;border-right:1px solid #E4E7ED;border-bottom:none;border-top:1px solid #E4E7ED}.el-tabs--left.el-tabs--card .el-tabs__item.is-left:first-child{border-right:1px solid #E4E7ED;border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active{border:1px solid #E4E7ED;border-right-color:#fff;border-left:none;border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:first-child{border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:last-child{border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__nav{border-radius:4px 0 0 4px;border-bottom:1px solid #E4E7ED;border-right:none}.el-tabs--left.el-tabs--card .el-tabs__new-tab{float:none}.el-tabs--left.el-tabs--border-card .el-tabs__header.is-left{border-right:1px solid #dfe4ed}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left{border:1px solid transparent;margin:-1px 0 -1px -1px}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active{border-color:#d1dbe5 transparent}.el-tabs--right .el-tabs__header.is-right{float:right;margin-bottom:0;margin-left:10px}.el-tabs--right .el-tabs__nav-wrap.is-right{margin-left:-1px}.el-tabs--right .el-tabs__nav-wrap.is-right::after{left:0;right:auto}.el-tabs--right .el-tabs__active-bar.is-right{left:0}.el-tag,.slideInLeft-transition,.slideInRight-transition{display:inline-block}.el-tabs--right.el-tabs--card .el-tabs__item.is-right{border-bottom:none;border-top:1px solid #E4E7ED}.el-tabs--right.el-tabs--card .el-tabs__item.is-right:first-child{border-left:1px solid #E4E7ED;border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active{border:1px solid #E4E7ED;border-left-color:#fff;border-right:none;border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:first-child{border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:last-child{border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__nav{border-radius:0 4px 4px 0;border-bottom:1px solid #E4E7ED;border-left:none}.el-tabs--right.el-tabs--border-card .el-tabs__header.is-right{border-left:1px solid #dfe4ed}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right{border:1px solid transparent;margin:-1px -1px -1px 0}.el-alert,.el-tag{border-radius:4px}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active{border-color:#d1dbe5 transparent}.slideInRight-enter{-webkit-animation:slideInRight-enter .3s;animation:slideInRight-enter .3s}.slideInRight-leave{position:absolute;left:0;right:0;-webkit-animation:slideInRight-leave .3s;animation:slideInRight-leave .3s}.slideInLeft-enter{-webkit-animation:slideInLeft-enter .3s;animation:slideInLeft-enter .3s}.slideInLeft-leave{position:absolute;left:0;right:0;-webkit-animation:slideInLeft-leave .3s;animation:slideInLeft-leave .3s}@-webkit-keyframes slideInRight-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes slideInRight-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes slideInRight-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}}@keyframes slideInRight-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}}@-webkit-keyframes slideInLeft-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes slideInLeft-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes slideInLeft-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%);opacity:0}}@keyframes slideInLeft-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%);opacity:0}}.el-tag{background-color:rgba(64,158,255,.1);padding:0 10px;height:32px;line-height:30px;font-size:12px;color:#409EFF;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid rgba(64,158,255,.2);white-space:nowrap}.el-tag .el-icon-close{border-radius:50%;text-align:center;position:relative;cursor:pointer;font-size:12px;height:16px;width:16px;line-height:16px;vertical-align:middle;top:-1px;right:-5px;color:#409EFF}.el-tag .el-icon-close::before{display:block}.el-tag .el-icon-close:hover{background-color:#409EFF;color:#FFF}.el-tag--info,.el-tag--info .el-tag__close{color:#909399}.el-tag--info{background-color:rgba(144,147,153,.1);border-color:rgba(144,147,153,.2)}.el-tag--info.is-hit{border-color:#909399}.el-tag--info .el-tag__close:hover{background-color:#909399;color:#FFF}.el-tag--success{background-color:rgba(103,194,58,.1);border-color:rgba(103,194,58,.2);color:#67C23A}.el-tag--success.is-hit{border-color:#67C23A}.el-tag--success .el-tag__close{color:#67C23A}.el-tag--success .el-tag__close:hover{background-color:#67C23A;color:#FFF}.el-tag--warning{background-color:rgba(230,162,60,.1);border-color:rgba(230,162,60,.2);color:#E6A23C}.el-tag--warning.is-hit{border-color:#E6A23C}.el-tag--warning .el-tag__close{color:#E6A23C}.el-tag--warning .el-tag__close:hover{background-color:#E6A23C;color:#FFF}.el-tag--danger{background-color:rgba(245,108,108,.1);border-color:rgba(245,108,108,.2);color:#F56C6C}.el-tag--danger.is-hit{border-color:#F56C6C}.el-tag--danger .el-tag__close{color:#F56C6C}.el-tag--danger .el-tag__close:hover{background-color:#F56C6C;color:#FFF}.el-tag--medium{height:28px;line-height:26px}.el-tag--medium .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--small{height:24px;padding:0 8px;line-height:22px}.el-tag--small .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--mini{height:20px;padding:0 5px;line-height:19px}.el-tag--mini .el-icon-close{margin-left:-3px;-webkit-transform:scale(.7);transform:scale(.7)}.el-tree{position:relative;cursor:default;background:#FFF;color:#606266}.el-tree__empty-block{position:relative;min-height:60px;text-align:center;width:100%;height:100%}.el-tree__empty-text{position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#909399}.el-tree__drop-indicator{position:absolute;left:0;right:0;height:1px;background-color:#409EFF}.el-tree-node{white-space:nowrap;outline:0}.el-tree-node:focus>.el-tree-node__content{background-color:#f5f7fa}.el-tree-node.is-drop-inner>.el-tree-node__content .el-tree-node__label{background-color:#409EFF;color:#fff}.el-tree-node__content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:26px;cursor:pointer}.el-tree-node__content>.el-tree-node__expand-icon{padding:6px}.el-tree-node__content>.el-checkbox{margin-right:8px}.el-tree-node__content:hover{background-color:#f5f7fa}.el-tree.is-dragging .el-tree-node__content{cursor:move}.el-tree.is-dragging .el-tree-node__content *{pointer-events:none}.el-tree.is-dragging.is-drop-not-allow .el-tree-node__content{cursor:not-allowed}.el-tree-node__expand-icon{cursor:pointer;color:#C0C4CC;font-size:12px;-webkit-transform:rotate(0);transform:rotate(0);-webkit-transition:-webkit-transform .3s ease-in-out;transition:-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out;transition:transform .3s ease-in-out,-webkit-transform .3s ease-in-out}.el-tree-node__expand-icon.expanded{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-tree-node__expand-icon.is-leaf{color:transparent;cursor:default}.el-tree-node__label{font-size:14px}.el-tree-node__loading-icon{margin-right:8px;font-size:14px;color:#C0C4CC}.el-tree-node>.el-tree-node__children{overflow:hidden;background-color:transparent}.el-tree-node.is-expanded>.el-tree-node__children{display:block}.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:#f0f7ff}.el-alert{width:100%;padding:8px 16px;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;background-color:#FFF;overflow:hidden;opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-transition:opacity .2s;transition:opacity .2s}.el-alert.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-alert--success{background-color:#f0f9eb;color:#67C23A}.el-alert--success .el-alert__description{color:#67C23A}.el-alert--info{background-color:#f4f4f5;color:#909399}.el-alert--info .el-alert__description{color:#909399}.el-alert--warning{background-color:#fdf6ec;color:#E6A23C}.el-alert--warning .el-alert__description{color:#E6A23C}.el-alert--error{background-color:#fef0f0;color:#F56C6C}.el-alert--error .el-alert__description{color:#F56C6C}.el-alert__content{display:table-cell;padding:0 8px}.el-alert__icon{font-size:16px;width:16px}.el-alert__icon.is-big{font-size:28px;width:28px}.el-alert__title{font-size:13px;line-height:18px}.el-alert__title.is-bold{font-weight:700}.el-alert .el-alert__description{font-size:12px;margin:5px 0 0}.el-alert__closebtn{font-size:12px;color:#C0C4CC;opacity:1;position:absolute;top:12px;right:15px;cursor:pointer}.el-alert__closebtn.is-customed{font-style:normal;font-size:13px;top:9px}.el-alert-fade-enter,.el-alert-fade-leave-active{opacity:0}.el-notification{display:-webkit-box;display:-ms-flexbox;display:flex;width:330px;padding:14px 26px 14px 13px;border-radius:8px;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #EBEEF5;position:fixed;background-color:#FFF;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-transition:opacity .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;transition:opacity .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;transition:opacity .3s,transform .3s,left .3s,right .3s,top .4s,bottom .3s;transition:opacity .3s,transform .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;overflow:hidden}.el-notification.right{right:16px}.el-notification.left{left:16px}.el-notification__group{margin-left:13px}.el-notification__title{font-weight:700;font-size:16px;color:#303133;margin:0}.el-notification__content{font-size:14px;line-height:21px;margin:6px 0 0;color:#606266;text-align:justify}.el-notification__content p{margin:0}.el-notification__icon{height:24px;width:24px;font-size:24px}.el-notification__closeBtn{position:absolute;top:18px;right:15px;cursor:pointer;color:#909399;font-size:16px}.el-notification__closeBtn:hover{color:#606266}.el-notification .el-icon-success{color:#67C23A}.el-notification .el-icon-error{color:#F56C6C}.el-notification .el-icon-info{color:#909399}.el-notification .el-icon-warning{color:#E6A23C}.el-notification-fade-enter.right{right:0;-webkit-transform:translateX(100%);transform:translateX(100%)}.el-notification-fade-enter.left{left:0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}.el-notification-fade-leave-active{opacity:0}.el-input-number{position:relative;display:inline-block;width:180px;line-height:38px}.el-input-number .el-input{display:block}.el-input-number .el-input__inner{-webkit-appearance:none;padding-left:50px;padding-right:50px;text-align:center}.el-input-number__decrease,.el-input-number__increase{position:absolute;z-index:1;top:1px;width:40px;height:auto;text-align:center;background:#f5f7fa;color:#606266;cursor:pointer;font-size:13px}.el-input-number__decrease:hover,.el-input-number__increase:hover{color:#409EFF}.el-input-number__decrease:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled),.el-input-number__increase:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled){border-color:#409EFF}.el-input-number__decrease.is-disabled,.el-input-number__increase.is-disabled{color:#C0C4CC;cursor:not-allowed}.el-input-number__increase{right:1px;border-radius:0 4px 4px 0;border-left:1px solid #DCDFE6}.el-input-number__decrease{left:1px;border-radius:4px 0 0 4px;border-right:1px solid #DCDFE6}.el-input-number.is-disabled .el-input-number__decrease,.el-input-number.is-disabled .el-input-number__increase{border-color:#E4E7ED;color:#E4E7ED}.el-input-number.is-disabled .el-input-number__decrease:hover,.el-input-number.is-disabled .el-input-number__increase:hover{color:#E4E7ED;cursor:not-allowed}.el-input-number--medium{width:200px;line-height:34px}.el-input-number--medium .el-input-number__decrease,.el-input-number--medium .el-input-number__increase{width:36px;font-size:14px}.el-input-number--medium .el-input__inner{padding-left:43px;padding-right:43px}.el-input-number--small{width:130px;line-height:30px}.el-input-number--small .el-input-number__decrease,.el-input-number--small .el-input-number__increase{width:32px;font-size:13px}.el-input-number--small .el-input-number__decrease [class*=el-icon],.el-input-number--small .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.9);transform:scale(.9)}.el-input-number--small .el-input__inner{padding-left:39px;padding-right:39px}.el-input-number--mini{width:130px;line-height:26px}.el-input-number--mini .el-input-number__decrease,.el-input-number--mini .el-input-number__increase{width:28px;font-size:12px}.el-input-number--mini .el-input-number__decrease [class*=el-icon],.el-input-number--mini .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.8);transform:scale(.8)}.el-input-number--mini .el-input__inner{padding-left:35px;padding-right:35px}.el-input-number.is-without-controls .el-input__inner{padding-left:15px;padding-right:15px}.el-input-number.is-controls-right .el-input__inner{padding-left:15px;padding-right:50px}.el-input-number.is-controls-right .el-input-number__decrease,.el-input-number.is-controls-right .el-input-number__increase{height:auto;line-height:19px}.el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon],.el-input-number.is-controls-right .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.8);transform:scale(.8)}.el-input-number.is-controls-right .el-input-number__increase{border-radius:0 4px 0 0;border-bottom:1px solid #DCDFE6}.el-input-number.is-controls-right .el-input-number__decrease{right:1px;bottom:1px;top:auto;left:auto;border-right:none;border-left:1px solid #DCDFE6;border-radius:0 0 4px}.el-input-number.is-controls-right[class*=medium] [class*=decrease],.el-input-number.is-controls-right[class*=medium] [class*=increase]{line-height:17px}.el-input-number.is-controls-right[class*=small] [class*=decrease],.el-input-number.is-controls-right[class*=small] [class*=increase]{line-height:15px}.el-input-number.is-controls-right[class*=mini] [class*=decrease],.el-input-number.is-controls-right[class*=mini] [class*=increase]{line-height:13px}.el-tooltip:focus:hover,.el-tooltip:focus:not(.focusing){outline-width:0}.el-tooltip__popper{position:absolute;border-radius:4px;padding:10px;z-index:2000;font-size:12px;line-height:1.2;min-width:10px;word-wrap:break-word}.el-tooltip__popper .popper__arrow,.el-tooltip__popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-tooltip__popper .popper__arrow{border-width:6px}.el-tooltip__popper .popper__arrow::after{content:" ";border-width:5px}.el-tooltip__popper[x-placement^=top] .popper__arrow{bottom:-6px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-5px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=bottom]{margin-top:12px}.el-tooltip__popper[x-placement^=bottom] .popper__arrow{top:-6px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-5px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=right]{margin-left:12px}.el-tooltip__popper[x-placement^=right] .popper__arrow{left:-6px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=right] .popper__arrow::after{bottom:-5px;left:1px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=left]{margin-right:12px}.el-tooltip__popper[x-placement^=left] .popper__arrow{right:-6px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-5px;margin-left:-5px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper.is-dark{background:#303133;color:#FFF}.el-tooltip__popper.is-light{background:#FFF;border:1px solid #303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow{border-top-color:#303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow::after{border-top-color:#FFF}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow{border-bottom-color:#303133}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow::after{border-bottom-color:#FFF}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow{border-left-color:#303133}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow::after{border-left-color:#FFF}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow{border-right-color:#303133}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow::after{border-right-color:#FFF}.el-slider::after,.el-slider::before{display:table;content:""}.el-slider::after{clear:both}.el-slider__runway{width:100%;height:6px;margin:16px 0;background-color:#E4E7ED;border-radius:3px;position:relative;cursor:pointer;vertical-align:middle}.el-slider__runway.show-input{margin-right:160px;width:auto}.el-slider__runway.disabled{cursor:default}.el-slider__runway.disabled .el-slider__bar{background-color:#C0C4CC}.el-slider__runway.disabled .el-slider__button{border-color:#C0C4CC}.el-slider__runway.disabled .el-slider__button-wrapper.dragging,.el-slider__runway.disabled .el-slider__button-wrapper.hover,.el-slider__runway.disabled .el-slider__button-wrapper:hover{cursor:not-allowed}.el-slider__runway.disabled .el-slider__button.dragging,.el-slider__runway.disabled .el-slider__button.hover,.el-slider__runway.disabled .el-slider__button:hover{-webkit-transform:scale(1);transform:scale(1);cursor:not-allowed}.el-slider__input{float:right;margin-top:3px;width:130px}.el-slider__input.el-input-number--mini{margin-top:5px}.el-slider__input.el-input-number--medium{margin-top:0}.el-slider__input.el-input-number--large{margin-top:-2px}.el-slider__bar{height:6px;background-color:#409EFF;border-top-left-radius:3px;border-bottom-left-radius:3px;position:absolute}.el-slider__button-wrapper{height:36px;width:36px;position:absolute;z-index:1001;top:-15px;-webkit-transform:translateX(-50%);transform:translateX(-50%);background-color:transparent;text-align:center;-webkit-user-select:none;user-select:none;line-height:normal}.el-button,.el-checkbox,.el-slider__button,.el-step__icon-inner{-moz-user-select:none}.el-button,.el-checkbox,.el-checkbox-button__inner,.el-slider__button,.el-step__icon-inner{-webkit-user-select:none;-ms-user-select:none}.el-slider__button-wrapper::after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-slider__button-wrapper .el-tooltip{vertical-align:middle;display:inline-block}.el-slider__button-wrapper.hover,.el-slider__button-wrapper:hover{cursor:-webkit-grab;cursor:grab}.el-slider__button-wrapper.dragging{cursor:-webkit-grabbing;cursor:grabbing}.el-slider__button{width:16px;height:16px;border:2px solid #409EFF;background-color:#FFF;border-radius:50%;-webkit-transition:.2s;transition:.2s;user-select:none}.el-slider__button.dragging,.el-slider__button.hover,.el-slider__button:hover{-webkit-transform:scale(1.2);transform:scale(1.2)}.el-slider__button.hover,.el-slider__button:hover{cursor:-webkit-grab;cursor:grab}.el-slider__button.dragging{cursor:-webkit-grabbing;cursor:grabbing}.el-slider__stop{position:absolute;height:6px;width:6px;border-radius:100%;background-color:#FFF;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.el-slider.is-vertical{position:relative}.el-slider.is-vertical .el-slider__runway{width:6px;height:100%;margin:0 16px}.el-slider.is-vertical .el-slider__bar{width:6px;height:auto;border-radius:0 0 3px 3px}.el-slider.is-vertical .el-slider__button-wrapper{top:auto;left:-15px;-webkit-transform:translateY(50%);transform:translateY(50%)}.el-slider.is-vertical .el-slider__stop{-webkit-transform:translateY(50%);transform:translateY(50%)}.el-slider.is-vertical.el-slider--with-input{padding-bottom:58px}.el-slider.is-vertical.el-slider--with-input .el-slider__input{overflow:visible;float:none;position:absolute;bottom:22px;width:36px;margin-top:15px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input__inner{text-align:center;padding-left:5px;padding-right:5px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase{top:32px;margin-top:-1px;border:1px solid #DCDFE6;line-height:20px;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease{width:18px;right:18px;border-bottom-left-radius:4px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase{width:19px;border-bottom-right-radius:4px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase~.el-input .el-input__inner{border-bottom-left-radius:0;border-bottom-right-radius:0}.el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__increase{border-color:#C0C4CC}.el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__increase{border-color:#409EFF}.el-loading-parent--relative{position:relative!important}.el-loading-parent--hidden{overflow:hidden!important}.el-loading-mask{position:absolute;z-index:2000;background-color:rgba(255,255,255,.9);margin:0;top:0;right:0;bottom:0;left:0;-webkit-transition:opacity .3s;transition:opacity .3s}.el-loading-mask.is-fullscreen{position:fixed}.el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:-25px}.el-loading-mask.is-fullscreen .el-loading-spinner .circular{height:50px;width:50px}.el-loading-spinner{top:50%;margin-top:-21px;width:100%;text-align:center;position:absolute}.el-col-pull-0,.el-col-pull-1,.el-col-pull-10,.el-col-pull-11,.el-col-pull-12,.el-col-pull-13,.el-col-pull-14,.el-col-pull-15,.el-col-pull-16,.el-col-pull-17,.el-col-pull-18,.el-col-pull-19,.el-col-pull-2,.el-col-pull-20,.el-col-pull-21,.el-col-pull-22,.el-col-pull-23,.el-col-pull-24,.el-col-pull-3,.el-col-pull-4,.el-col-pull-5,.el-col-pull-6,.el-col-pull-7,.el-col-pull-8,.el-col-pull-9,.el-col-push-0,.el-col-push-1,.el-col-push-10,.el-col-push-11,.el-col-push-12,.el-col-push-13,.el-col-push-14,.el-col-push-15,.el-col-push-16,.el-col-push-17,.el-col-push-18,.el-col-push-19,.el-col-push-2,.el-col-push-20,.el-col-push-21,.el-col-push-22,.el-col-push-23,.el-col-push-24,.el-col-push-3,.el-col-push-4,.el-col-push-5,.el-col-push-6,.el-col-push-7,.el-col-push-8,.el-col-push-9,.el-row,.el-upload-dragger,.el-upload-list__item{position:relative}.el-loading-spinner .el-loading-text{color:#409EFF;margin:3px 0;font-size:14px}.el-loading-spinner .circular{height:42px;width:42px;-webkit-animation:loading-rotate 2s linear infinite;animation:loading-rotate 2s linear infinite}.el-loading-spinner .path{-webkit-animation:loading-dash 1.5s ease-in-out infinite;animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:#409EFF;stroke-linecap:round}.el-loading-spinner i{color:#409EFF}.el-loading-fade-enter,.el-loading-fade-leave-active{opacity:0}@-webkit-keyframes loading-rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes loading-rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}100%{stroke-dasharray:90,150;stroke-dashoffset:-120px}}@keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}100%{stroke-dasharray:90,150;stroke-dashoffset:-120px}}.el-row{-webkit-box-sizing:border-box;box-sizing:border-box}.el-row::after,.el-row::before{display:table;content:""}.el-row::after{clear:both}.el-row--flex{display:-webkit-box;display:-ms-flexbox;display:flex}.el-col-0,.el-row--flex:after,.el-row--flex:before{display:none}.el-row--flex.is-justify-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-row--flex.is-justify-end{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.el-row--flex.is-justify-space-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.el-row--flex.is-justify-space-around{-ms-flex-pack:distribute;justify-content:space-around}.el-row--flex.is-align-middle{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-row--flex.is-align-bottom{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}[class*=el-col-]{float:left;-webkit-box-sizing:border-box;box-sizing:border-box}.el-col-0{width:0%}.el-col-pull-0{right:0}.el-col-push-0{left:0}.el-col-1{width:4.16667%}.el-col-offset-1{margin-left:4.16667%}.el-col-pull-1{right:4.16667%}.el-col-push-1{left:4.16667%}.el-col-2{width:8.33333%}.el-col-offset-2{margin-left:8.33333%}.el-col-pull-2{right:8.33333%}.el-col-push-2{left:8.33333%}.el-col-3{width:12.5%}.el-col-offset-3{margin-left:12.5%}.el-col-pull-3{right:12.5%}.el-col-push-3{left:12.5%}.el-col-4{width:16.66667%}.el-col-offset-4{margin-left:16.66667%}.el-col-pull-4{right:16.66667%}.el-col-push-4{left:16.66667%}.el-col-5{width:20.83333%}.el-col-offset-5{margin-left:20.83333%}.el-col-pull-5{right:20.83333%}.el-col-push-5{left:20.83333%}.el-col-6{width:25%}.el-col-offset-6{margin-left:25%}.el-col-pull-6{right:25%}.el-col-push-6{left:25%}.el-col-7{width:29.16667%}.el-col-offset-7{margin-left:29.16667%}.el-col-pull-7{right:29.16667%}.el-col-push-7{left:29.16667%}.el-col-8{width:33.33333%}.el-col-offset-8{margin-left:33.33333%}.el-col-pull-8{right:33.33333%}.el-col-push-8{left:33.33333%}.el-col-9{width:37.5%}.el-col-offset-9{margin-left:37.5%}.el-col-pull-9{right:37.5%}.el-col-push-9{left:37.5%}.el-col-10{width:41.66667%}.el-col-offset-10{margin-left:41.66667%}.el-col-pull-10{right:41.66667%}.el-col-push-10{left:41.66667%}.el-col-11{width:45.83333%}.el-col-offset-11{margin-left:45.83333%}.el-col-pull-11{right:45.83333%}.el-col-push-11{left:45.83333%}.el-col-12{width:50%}.el-col-offset-12{margin-left:50%}.el-col-pull-12{right:50%}.el-col-push-12{left:50%}.el-col-13{width:54.16667%}.el-col-offset-13{margin-left:54.16667%}.el-col-pull-13{right:54.16667%}.el-col-push-13{left:54.16667%}.el-col-14{width:58.33333%}.el-col-offset-14{margin-left:58.33333%}.el-col-pull-14{right:58.33333%}.el-col-push-14{left:58.33333%}.el-col-15{width:62.5%}.el-col-offset-15{margin-left:62.5%}.el-col-pull-15{right:62.5%}.el-col-push-15{left:62.5%}.el-col-16{width:66.66667%}.el-col-offset-16{margin-left:66.66667%}.el-col-pull-16{right:66.66667%}.el-col-push-16{left:66.66667%}.el-col-17{width:70.83333%}.el-col-offset-17{margin-left:70.83333%}.el-col-pull-17{right:70.83333%}.el-col-push-17{left:70.83333%}.el-col-18{width:75%}.el-col-offset-18{margin-left:75%}.el-col-pull-18{right:75%}.el-col-push-18{left:75%}.el-col-19{width:79.16667%}.el-col-offset-19{margin-left:79.16667%}.el-col-pull-19{right:79.16667%}.el-col-push-19{left:79.16667%}.el-col-20{width:83.33333%}.el-col-offset-20{margin-left:83.33333%}.el-col-pull-20{right:83.33333%}.el-col-push-20{left:83.33333%}.el-col-21{width:87.5%}.el-col-offset-21{margin-left:87.5%}.el-col-pull-21{right:87.5%}.el-col-push-21{left:87.5%}.el-col-22{width:91.66667%}.el-col-offset-22{margin-left:91.66667%}.el-col-pull-22{right:91.66667%}.el-col-push-22{left:91.66667%}.el-col-23{width:95.83333%}.el-col-offset-23{margin-left:95.83333%}.el-col-pull-23{right:95.83333%}.el-col-push-23{left:95.83333%}.el-col-24{width:100%}.el-col-offset-24{margin-left:100%}.el-col-pull-24{right:100%}.el-col-push-24{left:100%}@media only screen and (max-width:767px){.el-col-xs-0{display:none;width:0%}.el-col-xs-offset-0{margin-left:0}.el-col-xs-pull-0{position:relative;right:0}.el-col-xs-push-0{position:relative;left:0}.el-col-xs-1{width:4.16667%}.el-col-xs-offset-1{margin-left:4.16667%}.el-col-xs-pull-1{position:relative;right:4.16667%}.el-col-xs-push-1{position:relative;left:4.16667%}.el-col-xs-2{width:8.33333%}.el-col-xs-offset-2{margin-left:8.33333%}.el-col-xs-pull-2{position:relative;right:8.33333%}.el-col-xs-push-2{position:relative;left:8.33333%}.el-col-xs-3{width:12.5%}.el-col-xs-offset-3{margin-left:12.5%}.el-col-xs-pull-3{position:relative;right:12.5%}.el-col-xs-push-3{position:relative;left:12.5%}.el-col-xs-4{width:16.66667%}.el-col-xs-offset-4{margin-left:16.66667%}.el-col-xs-pull-4{position:relative;right:16.66667%}.el-col-xs-push-4{position:relative;left:16.66667%}.el-col-xs-5{width:20.83333%}.el-col-xs-offset-5{margin-left:20.83333%}.el-col-xs-pull-5{position:relative;right:20.83333%}.el-col-xs-push-5{position:relative;left:20.83333%}.el-col-xs-6{width:25%}.el-col-xs-offset-6{margin-left:25%}.el-col-xs-pull-6{position:relative;right:25%}.el-col-xs-push-6{position:relative;left:25%}.el-col-xs-7{width:29.16667%}.el-col-xs-offset-7{margin-left:29.16667%}.el-col-xs-pull-7{position:relative;right:29.16667%}.el-col-xs-push-7{position:relative;left:29.16667%}.el-col-xs-8{width:33.33333%}.el-col-xs-offset-8{margin-left:33.33333%}.el-col-xs-pull-8{position:relative;right:33.33333%}.el-col-xs-push-8{position:relative;left:33.33333%}.el-col-xs-9{width:37.5%}.el-col-xs-offset-9{margin-left:37.5%}.el-col-xs-pull-9{position:relative;right:37.5%}.el-col-xs-push-9{position:relative;left:37.5%}.el-col-xs-10{width:41.66667%}.el-col-xs-offset-10{margin-left:41.66667%}.el-col-xs-pull-10{position:relative;right:41.66667%}.el-col-xs-push-10{position:relative;left:41.66667%}.el-col-xs-11{width:45.83333%}.el-col-xs-offset-11{margin-left:45.83333%}.el-col-xs-pull-11{position:relative;right:45.83333%}.el-col-xs-push-11{position:relative;left:45.83333%}.el-col-xs-12{width:50%}.el-col-xs-offset-12{margin-left:50%}.el-col-xs-pull-12{position:relative;right:50%}.el-col-xs-push-12{position:relative;left:50%}.el-col-xs-13{width:54.16667%}.el-col-xs-offset-13{margin-left:54.16667%}.el-col-xs-pull-13{position:relative;right:54.16667%}.el-col-xs-push-13{position:relative;left:54.16667%}.el-col-xs-14{width:58.33333%}.el-col-xs-offset-14{margin-left:58.33333%}.el-col-xs-pull-14{position:relative;right:58.33333%}.el-col-xs-push-14{position:relative;left:58.33333%}.el-col-xs-15{width:62.5%}.el-col-xs-offset-15{margin-left:62.5%}.el-col-xs-pull-15{position:relative;right:62.5%}.el-col-xs-push-15{position:relative;left:62.5%}.el-col-xs-16{width:66.66667%}.el-col-xs-offset-16{margin-left:66.66667%}.el-col-xs-pull-16{position:relative;right:66.66667%}.el-col-xs-push-16{position:relative;left:66.66667%}.el-col-xs-17{width:70.83333%}.el-col-xs-offset-17{margin-left:70.83333%}.el-col-xs-pull-17{position:relative;right:70.83333%}.el-col-xs-push-17{position:relative;left:70.83333%}.el-col-xs-18{width:75%}.el-col-xs-offset-18{margin-left:75%}.el-col-xs-pull-18{position:relative;right:75%}.el-col-xs-push-18{position:relative;left:75%}.el-col-xs-19{width:79.16667%}.el-col-xs-offset-19{margin-left:79.16667%}.el-col-xs-pull-19{position:relative;right:79.16667%}.el-col-xs-push-19{position:relative;left:79.16667%}.el-col-xs-20{width:83.33333%}.el-col-xs-offset-20{margin-left:83.33333%}.el-col-xs-pull-20{position:relative;right:83.33333%}.el-col-xs-push-20{position:relative;left:83.33333%}.el-col-xs-21{width:87.5%}.el-col-xs-offset-21{margin-left:87.5%}.el-col-xs-pull-21{position:relative;right:87.5%}.el-col-xs-push-21{position:relative;left:87.5%}.el-col-xs-22{width:91.66667%}.el-col-xs-offset-22{margin-left:91.66667%}.el-col-xs-pull-22{position:relative;right:91.66667%}.el-col-xs-push-22{position:relative;left:91.66667%}.el-col-xs-23{width:95.83333%}.el-col-xs-offset-23{margin-left:95.83333%}.el-col-xs-pull-23{position:relative;right:95.83333%}.el-col-xs-push-23{position:relative;left:95.83333%}.el-col-xs-24{width:100%}.el-col-xs-offset-24{margin-left:100%}.el-col-xs-pull-24{position:relative;right:100%}.el-col-xs-push-24{position:relative;left:100%}}@media only screen and (min-width:768px){.el-col-sm-0{display:none;width:0%}.el-col-sm-offset-0{margin-left:0}.el-col-sm-pull-0{position:relative;right:0}.el-col-sm-push-0{position:relative;left:0}.el-col-sm-1{width:4.16667%}.el-col-sm-offset-1{margin-left:4.16667%}.el-col-sm-pull-1{position:relative;right:4.16667%}.el-col-sm-push-1{position:relative;left:4.16667%}.el-col-sm-2{width:8.33333%}.el-col-sm-offset-2{margin-left:8.33333%}.el-col-sm-pull-2{position:relative;right:8.33333%}.el-col-sm-push-2{position:relative;left:8.33333%}.el-col-sm-3{width:12.5%}.el-col-sm-offset-3{margin-left:12.5%}.el-col-sm-pull-3{position:relative;right:12.5%}.el-col-sm-push-3{position:relative;left:12.5%}.el-col-sm-4{width:16.66667%}.el-col-sm-offset-4{margin-left:16.66667%}.el-col-sm-pull-4{position:relative;right:16.66667%}.el-col-sm-push-4{position:relative;left:16.66667%}.el-col-sm-5{width:20.83333%}.el-col-sm-offset-5{margin-left:20.83333%}.el-col-sm-pull-5{position:relative;right:20.83333%}.el-col-sm-push-5{position:relative;left:20.83333%}.el-col-sm-6{width:25%}.el-col-sm-offset-6{margin-left:25%}.el-col-sm-pull-6{position:relative;right:25%}.el-col-sm-push-6{position:relative;left:25%}.el-col-sm-7{width:29.16667%}.el-col-sm-offset-7{margin-left:29.16667%}.el-col-sm-pull-7{position:relative;right:29.16667%}.el-col-sm-push-7{position:relative;left:29.16667%}.el-col-sm-8{width:33.33333%}.el-col-sm-offset-8{margin-left:33.33333%}.el-col-sm-pull-8{position:relative;right:33.33333%}.el-col-sm-push-8{position:relative;left:33.33333%}.el-col-sm-9{width:37.5%}.el-col-sm-offset-9{margin-left:37.5%}.el-col-sm-pull-9{position:relative;right:37.5%}.el-col-sm-push-9{position:relative;left:37.5%}.el-col-sm-10{width:41.66667%}.el-col-sm-offset-10{margin-left:41.66667%}.el-col-sm-pull-10{position:relative;right:41.66667%}.el-col-sm-push-10{position:relative;left:41.66667%}.el-col-sm-11{width:45.83333%}.el-col-sm-offset-11{margin-left:45.83333%}.el-col-sm-pull-11{position:relative;right:45.83333%}.el-col-sm-push-11{position:relative;left:45.83333%}.el-col-sm-12{width:50%}.el-col-sm-offset-12{margin-left:50%}.el-col-sm-pull-12{position:relative;right:50%}.el-col-sm-push-12{position:relative;left:50%}.el-col-sm-13{width:54.16667%}.el-col-sm-offset-13{margin-left:54.16667%}.el-col-sm-pull-13{position:relative;right:54.16667%}.el-col-sm-push-13{position:relative;left:54.16667%}.el-col-sm-14{width:58.33333%}.el-col-sm-offset-14{margin-left:58.33333%}.el-col-sm-pull-14{position:relative;right:58.33333%}.el-col-sm-push-14{position:relative;left:58.33333%}.el-col-sm-15{width:62.5%}.el-col-sm-offset-15{margin-left:62.5%}.el-col-sm-pull-15{position:relative;right:62.5%}.el-col-sm-push-15{position:relative;left:62.5%}.el-col-sm-16{width:66.66667%}.el-col-sm-offset-16{margin-left:66.66667%}.el-col-sm-pull-16{position:relative;right:66.66667%}.el-col-sm-push-16{position:relative;left:66.66667%}.el-col-sm-17{width:70.83333%}.el-col-sm-offset-17{margin-left:70.83333%}.el-col-sm-pull-17{position:relative;right:70.83333%}.el-col-sm-push-17{position:relative;left:70.83333%}.el-col-sm-18{width:75%}.el-col-sm-offset-18{margin-left:75%}.el-col-sm-pull-18{position:relative;right:75%}.el-col-sm-push-18{position:relative;left:75%}.el-col-sm-19{width:79.16667%}.el-col-sm-offset-19{margin-left:79.16667%}.el-col-sm-pull-19{position:relative;right:79.16667%}.el-col-sm-push-19{position:relative;left:79.16667%}.el-col-sm-20{width:83.33333%}.el-col-sm-offset-20{margin-left:83.33333%}.el-col-sm-pull-20{position:relative;right:83.33333%}.el-col-sm-push-20{position:relative;left:83.33333%}.el-col-sm-21{width:87.5%}.el-col-sm-offset-21{margin-left:87.5%}.el-col-sm-pull-21{position:relative;right:87.5%}.el-col-sm-push-21{position:relative;left:87.5%}.el-col-sm-22{width:91.66667%}.el-col-sm-offset-22{margin-left:91.66667%}.el-col-sm-pull-22{position:relative;right:91.66667%}.el-col-sm-push-22{position:relative;left:91.66667%}.el-col-sm-23{width:95.83333%}.el-col-sm-offset-23{margin-left:95.83333%}.el-col-sm-pull-23{position:relative;right:95.83333%}.el-col-sm-push-23{position:relative;left:95.83333%}.el-col-sm-24{width:100%}.el-col-sm-offset-24{margin-left:100%}.el-col-sm-pull-24{position:relative;right:100%}.el-col-sm-push-24{position:relative;left:100%}}@media only screen and (min-width:992px){.el-col-md-0{display:none;width:0%}.el-col-md-offset-0{margin-left:0}.el-col-md-pull-0{position:relative;right:0}.el-col-md-push-0{position:relative;left:0}.el-col-md-1{width:4.16667%}.el-col-md-offset-1{margin-left:4.16667%}.el-col-md-pull-1{position:relative;right:4.16667%}.el-col-md-push-1{position:relative;left:4.16667%}.el-col-md-2{width:8.33333%}.el-col-md-offset-2{margin-left:8.33333%}.el-col-md-pull-2{position:relative;right:8.33333%}.el-col-md-push-2{position:relative;left:8.33333%}.el-col-md-3{width:12.5%}.el-col-md-offset-3{margin-left:12.5%}.el-col-md-pull-3{position:relative;right:12.5%}.el-col-md-push-3{position:relative;left:12.5%}.el-col-md-4{width:16.66667%}.el-col-md-offset-4{margin-left:16.66667%}.el-col-md-pull-4{position:relative;right:16.66667%}.el-col-md-push-4{position:relative;left:16.66667%}.el-col-md-5{width:20.83333%}.el-col-md-offset-5{margin-left:20.83333%}.el-col-md-pull-5{position:relative;right:20.83333%}.el-col-md-push-5{position:relative;left:20.83333%}.el-col-md-6{width:25%}.el-col-md-offset-6{margin-left:25%}.el-col-md-pull-6{position:relative;right:25%}.el-col-md-push-6{position:relative;left:25%}.el-col-md-7{width:29.16667%}.el-col-md-offset-7{margin-left:29.16667%}.el-col-md-pull-7{position:relative;right:29.16667%}.el-col-md-push-7{position:relative;left:29.16667%}.el-col-md-8{width:33.33333%}.el-col-md-offset-8{margin-left:33.33333%}.el-col-md-pull-8{position:relative;right:33.33333%}.el-col-md-push-8{position:relative;left:33.33333%}.el-col-md-9{width:37.5%}.el-col-md-offset-9{margin-left:37.5%}.el-col-md-pull-9{position:relative;right:37.5%}.el-col-md-push-9{position:relative;left:37.5%}.el-col-md-10{width:41.66667%}.el-col-md-offset-10{margin-left:41.66667%}.el-col-md-pull-10{position:relative;right:41.66667%}.el-col-md-push-10{position:relative;left:41.66667%}.el-col-md-11{width:45.83333%}.el-col-md-offset-11{margin-left:45.83333%}.el-col-md-pull-11{position:relative;right:45.83333%}.el-col-md-push-11{position:relative;left:45.83333%}.el-col-md-12{width:50%}.el-col-md-offset-12{margin-left:50%}.el-col-md-pull-12{position:relative;right:50%}.el-col-md-push-12{position:relative;left:50%}.el-col-md-13{width:54.16667%}.el-col-md-offset-13{margin-left:54.16667%}.el-col-md-pull-13{position:relative;right:54.16667%}.el-col-md-push-13{position:relative;left:54.16667%}.el-col-md-14{width:58.33333%}.el-col-md-offset-14{margin-left:58.33333%}.el-col-md-pull-14{position:relative;right:58.33333%}.el-col-md-push-14{position:relative;left:58.33333%}.el-col-md-15{width:62.5%}.el-col-md-offset-15{margin-left:62.5%}.el-col-md-pull-15{position:relative;right:62.5%}.el-col-md-push-15{position:relative;left:62.5%}.el-col-md-16{width:66.66667%}.el-col-md-offset-16{margin-left:66.66667%}.el-col-md-pull-16{position:relative;right:66.66667%}.el-col-md-push-16{position:relative;left:66.66667%}.el-col-md-17{width:70.83333%}.el-col-md-offset-17{margin-left:70.83333%}.el-col-md-pull-17{position:relative;right:70.83333%}.el-col-md-push-17{position:relative;left:70.83333%}.el-col-md-18{width:75%}.el-col-md-offset-18{margin-left:75%}.el-col-md-pull-18{position:relative;right:75%}.el-col-md-push-18{position:relative;left:75%}.el-col-md-19{width:79.16667%}.el-col-md-offset-19{margin-left:79.16667%}.el-col-md-pull-19{position:relative;right:79.16667%}.el-col-md-push-19{position:relative;left:79.16667%}.el-col-md-20{width:83.33333%}.el-col-md-offset-20{margin-left:83.33333%}.el-col-md-pull-20{position:relative;right:83.33333%}.el-col-md-push-20{position:relative;left:83.33333%}.el-col-md-21{width:87.5%}.el-col-md-offset-21{margin-left:87.5%}.el-col-md-pull-21{position:relative;right:87.5%}.el-col-md-push-21{position:relative;left:87.5%}.el-col-md-22{width:91.66667%}.el-col-md-offset-22{margin-left:91.66667%}.el-col-md-pull-22{position:relative;right:91.66667%}.el-col-md-push-22{position:relative;left:91.66667%}.el-col-md-23{width:95.83333%}.el-col-md-offset-23{margin-left:95.83333%}.el-col-md-pull-23{position:relative;right:95.83333%}.el-col-md-push-23{position:relative;left:95.83333%}.el-col-md-24{width:100%}.el-col-md-offset-24{margin-left:100%}.el-col-md-pull-24{position:relative;right:100%}.el-col-md-push-24{position:relative;left:100%}}@media only screen and (min-width:1200px){.el-col-lg-0{display:none;width:0%}.el-col-lg-offset-0{margin-left:0}.el-col-lg-pull-0{position:relative;right:0}.el-col-lg-push-0{position:relative;left:0}.el-col-lg-1{width:4.16667%}.el-col-lg-offset-1{margin-left:4.16667%}.el-col-lg-pull-1{position:relative;right:4.16667%}.el-col-lg-push-1{position:relative;left:4.16667%}.el-col-lg-2{width:8.33333%}.el-col-lg-offset-2{margin-left:8.33333%}.el-col-lg-pull-2{position:relative;right:8.33333%}.el-col-lg-push-2{position:relative;left:8.33333%}.el-col-lg-3{width:12.5%}.el-col-lg-offset-3{margin-left:12.5%}.el-col-lg-pull-3{position:relative;right:12.5%}.el-col-lg-push-3{position:relative;left:12.5%}.el-col-lg-4{width:16.66667%}.el-col-lg-offset-4{margin-left:16.66667%}.el-col-lg-pull-4{position:relative;right:16.66667%}.el-col-lg-push-4{position:relative;left:16.66667%}.el-col-lg-5{width:20.83333%}.el-col-lg-offset-5{margin-left:20.83333%}.el-col-lg-pull-5{position:relative;right:20.83333%}.el-col-lg-push-5{position:relative;left:20.83333%}.el-col-lg-6{width:25%}.el-col-lg-offset-6{margin-left:25%}.el-col-lg-pull-6{position:relative;right:25%}.el-col-lg-push-6{position:relative;left:25%}.el-col-lg-7{width:29.16667%}.el-col-lg-offset-7{margin-left:29.16667%}.el-col-lg-pull-7{position:relative;right:29.16667%}.el-col-lg-push-7{position:relative;left:29.16667%}.el-col-lg-8{width:33.33333%}.el-col-lg-offset-8{margin-left:33.33333%}.el-col-lg-pull-8{position:relative;right:33.33333%}.el-col-lg-push-8{position:relative;left:33.33333%}.el-col-lg-9{width:37.5%}.el-col-lg-offset-9{margin-left:37.5%}.el-col-lg-pull-9{position:relative;right:37.5%}.el-col-lg-push-9{position:relative;left:37.5%}.el-col-lg-10{width:41.66667%}.el-col-lg-offset-10{margin-left:41.66667%}.el-col-lg-pull-10{position:relative;right:41.66667%}.el-col-lg-push-10{position:relative;left:41.66667%}.el-col-lg-11{width:45.83333%}.el-col-lg-offset-11{margin-left:45.83333%}.el-col-lg-pull-11{position:relative;right:45.83333%}.el-col-lg-push-11{position:relative;left:45.83333%}.el-col-lg-12{width:50%}.el-col-lg-offset-12{margin-left:50%}.el-col-lg-pull-12{position:relative;right:50%}.el-col-lg-push-12{position:relative;left:50%}.el-col-lg-13{width:54.16667%}.el-col-lg-offset-13{margin-left:54.16667%}.el-col-lg-pull-13{position:relative;right:54.16667%}.el-col-lg-push-13{position:relative;left:54.16667%}.el-col-lg-14{width:58.33333%}.el-col-lg-offset-14{margin-left:58.33333%}.el-col-lg-pull-14{position:relative;right:58.33333%}.el-col-lg-push-14{position:relative;left:58.33333%}.el-col-lg-15{width:62.5%}.el-col-lg-offset-15{margin-left:62.5%}.el-col-lg-pull-15{position:relative;right:62.5%}.el-col-lg-push-15{position:relative;left:62.5%}.el-col-lg-16{width:66.66667%}.el-col-lg-offset-16{margin-left:66.66667%}.el-col-lg-pull-16{position:relative;right:66.66667%}.el-col-lg-push-16{position:relative;left:66.66667%}.el-col-lg-17{width:70.83333%}.el-col-lg-offset-17{margin-left:70.83333%}.el-col-lg-pull-17{position:relative;right:70.83333%}.el-col-lg-push-17{position:relative;left:70.83333%}.el-col-lg-18{width:75%}.el-col-lg-offset-18{margin-left:75%}.el-col-lg-pull-18{position:relative;right:75%}.el-col-lg-push-18{position:relative;left:75%}.el-col-lg-19{width:79.16667%}.el-col-lg-offset-19{margin-left:79.16667%}.el-col-lg-pull-19{position:relative;right:79.16667%}.el-col-lg-push-19{position:relative;left:79.16667%}.el-col-lg-20{width:83.33333%}.el-col-lg-offset-20{margin-left:83.33333%}.el-col-lg-pull-20{position:relative;right:83.33333%}.el-col-lg-push-20{position:relative;left:83.33333%}.el-col-lg-21{width:87.5%}.el-col-lg-offset-21{margin-left:87.5%}.el-col-lg-pull-21{position:relative;right:87.5%}.el-col-lg-push-21{position:relative;left:87.5%}.el-col-lg-22{width:91.66667%}.el-col-lg-offset-22{margin-left:91.66667%}.el-col-lg-pull-22{position:relative;right:91.66667%}.el-col-lg-push-22{position:relative;left:91.66667%}.el-col-lg-23{width:95.83333%}.el-col-lg-offset-23{margin-left:95.83333%}.el-col-lg-pull-23{position:relative;right:95.83333%}.el-col-lg-push-23{position:relative;left:95.83333%}.el-col-lg-24{width:100%}.el-col-lg-offset-24{margin-left:100%}.el-col-lg-pull-24{position:relative;right:100%}.el-col-lg-push-24{position:relative;left:100%}}@media only screen and (min-width:1920px){.el-col-xl-0{display:none;width:0%}.el-col-xl-offset-0{margin-left:0}.el-col-xl-pull-0{position:relative;right:0}.el-col-xl-push-0{position:relative;left:0}.el-col-xl-1{width:4.16667%}.el-col-xl-offset-1{margin-left:4.16667%}.el-col-xl-pull-1{position:relative;right:4.16667%}.el-col-xl-push-1{position:relative;left:4.16667%}.el-col-xl-2{width:8.33333%}.el-col-xl-offset-2{margin-left:8.33333%}.el-col-xl-pull-2{position:relative;right:8.33333%}.el-col-xl-push-2{position:relative;left:8.33333%}.el-col-xl-3{width:12.5%}.el-col-xl-offset-3{margin-left:12.5%}.el-col-xl-pull-3{position:relative;right:12.5%}.el-col-xl-push-3{position:relative;left:12.5%}.el-col-xl-4{width:16.66667%}.el-col-xl-offset-4{margin-left:16.66667%}.el-col-xl-pull-4{position:relative;right:16.66667%}.el-col-xl-push-4{position:relative;left:16.66667%}.el-col-xl-5{width:20.83333%}.el-col-xl-offset-5{margin-left:20.83333%}.el-col-xl-pull-5{position:relative;right:20.83333%}.el-col-xl-push-5{position:relative;left:20.83333%}.el-col-xl-6{width:25%}.el-col-xl-offset-6{margin-left:25%}.el-col-xl-pull-6{position:relative;right:25%}.el-col-xl-push-6{position:relative;left:25%}.el-col-xl-7{width:29.16667%}.el-col-xl-offset-7{margin-left:29.16667%}.el-col-xl-pull-7{position:relative;right:29.16667%}.el-col-xl-push-7{position:relative;left:29.16667%}.el-col-xl-8{width:33.33333%}.el-col-xl-offset-8{margin-left:33.33333%}.el-col-xl-pull-8{position:relative;right:33.33333%}.el-col-xl-push-8{position:relative;left:33.33333%}.el-col-xl-9{width:37.5%}.el-col-xl-offset-9{margin-left:37.5%}.el-col-xl-pull-9{position:relative;right:37.5%}.el-col-xl-push-9{position:relative;left:37.5%}.el-col-xl-10{width:41.66667%}.el-col-xl-offset-10{margin-left:41.66667%}.el-col-xl-pull-10{position:relative;right:41.66667%}.el-col-xl-push-10{position:relative;left:41.66667%}.el-col-xl-11{width:45.83333%}.el-col-xl-offset-11{margin-left:45.83333%}.el-col-xl-pull-11{position:relative;right:45.83333%}.el-col-xl-push-11{position:relative;left:45.83333%}.el-col-xl-12{width:50%}.el-col-xl-offset-12{margin-left:50%}.el-col-xl-pull-12{position:relative;right:50%}.el-col-xl-push-12{position:relative;left:50%}.el-col-xl-13{width:54.16667%}.el-col-xl-offset-13{margin-left:54.16667%}.el-col-xl-pull-13{position:relative;right:54.16667%}.el-col-xl-push-13{position:relative;left:54.16667%}.el-col-xl-14{width:58.33333%}.el-col-xl-offset-14{margin-left:58.33333%}.el-col-xl-pull-14{position:relative;right:58.33333%}.el-col-xl-push-14{position:relative;left:58.33333%}.el-col-xl-15{width:62.5%}.el-col-xl-offset-15{margin-left:62.5%}.el-col-xl-pull-15{position:relative;right:62.5%}.el-col-xl-push-15{position:relative;left:62.5%}.el-col-xl-16{width:66.66667%}.el-col-xl-offset-16{margin-left:66.66667%}.el-col-xl-pull-16{position:relative;right:66.66667%}.el-col-xl-push-16{position:relative;left:66.66667%}.el-col-xl-17{width:70.83333%}.el-col-xl-offset-17{margin-left:70.83333%}.el-col-xl-pull-17{position:relative;right:70.83333%}.el-col-xl-push-17{position:relative;left:70.83333%}.el-col-xl-18{width:75%}.el-col-xl-offset-18{margin-left:75%}.el-col-xl-pull-18{position:relative;right:75%}.el-col-xl-push-18{position:relative;left:75%}.el-col-xl-19{width:79.16667%}.el-col-xl-offset-19{margin-left:79.16667%}.el-col-xl-pull-19{position:relative;right:79.16667%}.el-col-xl-push-19{position:relative;left:79.16667%}.el-col-xl-20{width:83.33333%}.el-col-xl-offset-20{margin-left:83.33333%}.el-col-xl-pull-20{position:relative;right:83.33333%}.el-col-xl-push-20{position:relative;left:83.33333%}.el-col-xl-21{width:87.5%}.el-col-xl-offset-21{margin-left:87.5%}.el-col-xl-pull-21{position:relative;right:87.5%}.el-col-xl-push-21{position:relative;left:87.5%}.el-col-xl-22{width:91.66667%}.el-col-xl-offset-22{margin-left:91.66667%}.el-col-xl-pull-22{position:relative;right:91.66667%}.el-col-xl-push-22{position:relative;left:91.66667%}.el-col-xl-23{width:95.83333%}.el-col-xl-offset-23{margin-left:95.83333%}.el-col-xl-pull-23{position:relative;right:95.83333%}.el-col-xl-push-23{position:relative;left:95.83333%}.el-col-xl-24{width:100%}.el-col-xl-offset-24{margin-left:100%}.el-col-xl-pull-24{position:relative;right:100%}.el-col-xl-push-24{position:relative;left:100%}}@-webkit-keyframes progress{0%{background-position:0 0}100%{background-position:32px 0}}.el-upload{display:inline-block;text-align:center;cursor:pointer;outline:0}.el-upload__input{display:none}.el-upload__tip{font-size:12px;color:#606266;margin-top:7px}.el-upload iframe{position:absolute;z-index:-1;top:0;left:0;opacity:0;filter:alpha(opacity=0)}.el-upload--picture-card{background-color:#fbfdff;border:1px dashed #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;width:148px;height:148px;cursor:pointer;line-height:146px;vertical-align:top}.el-upload--picture-card i{font-size:28px;color:#8c939d}.el-upload--picture-card:hover,.el-upload:focus{border-color:#409EFF;color:#409EFF}.el-upload:focus .el-upload-dragger{border-color:#409EFF}.el-upload-dragger{background-color:#fff;border:1px dashed #d9d9d9;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;width:360px;height:180px;text-align:center;cursor:pointer;overflow:hidden}.el-upload-dragger .el-icon-upload{font-size:67px;color:#C0C4CC;margin:40px 0 16px;line-height:50px}.el-upload-dragger+.el-upload__tip{text-align:center}.el-upload-dragger~.el-upload__files{border-top:1px solid #DCDFE6;margin-top:7px;padding-top:5px}.el-upload-dragger .el-upload__text{color:#606266;font-size:14px;text-align:center}.el-upload-dragger .el-upload__text em{color:#409EFF;font-style:normal}.el-upload-dragger:hover{border-color:#409EFF}.el-upload-dragger.is-dragover{background-color:rgba(32,159,255,.06);border:2px dashed #409EFF}.el-upload-list{margin:0;padding:0;list-style:none}.el-upload-list__item{-webkit-transition:all .5s cubic-bezier(.55,0,.1,1);transition:all .5s cubic-bezier(.55,0,.1,1);font-size:14px;color:#606266;line-height:1.8;margin-top:5px;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;width:100%}.el-upload-list__item .el-progress{position:absolute;top:20px;width:100%}.el-upload-list__item .el-progress__text{position:absolute;right:0;top:-13px}.el-upload-list__item .el-progress-bar{margin-right:0;padding-right:0}.el-upload-list__item:first-child{margin-top:10px}.el-upload-list__item .el-icon-upload-success{color:#67C23A}.el-upload-list__item .el-icon-close{display:none;position:absolute;top:5px;right:5px;cursor:pointer;opacity:.75;color:#606266}.el-upload-list__item .el-icon-close:hover{opacity:1}.el-upload-list__item .el-icon-close-tip{display:none;position:absolute;top:5px;right:5px;font-size:12px;cursor:pointer;opacity:1;color:#409EFF}.el-upload-list__item:hover{background-color:#f5f7fa}.el-upload-list__item:hover .el-icon-close{display:inline-block}.el-upload-list__item:hover .el-progress__text{display:none}.el-upload-list__item.is-success .el-upload-list__item-status-label{display:block}.el-upload-list__item.is-success .el-upload-list__item-name:focus,.el-upload-list__item.is-success .el-upload-list__item-name:hover{color:#409EFF;cursor:pointer}.el-upload-list__item.is-success:focus:not(:hover) .el-icon-close-tip{display:inline-block}.el-upload-list__item.is-success:active,.el-upload-list__item.is-success:not(.focusing):focus{outline-width:0}.el-upload-list__item.is-success:active .el-icon-close-tip,.el-upload-list__item.is-success:focus .el-upload-list__item-status-label,.el-upload-list__item.is-success:hover .el-upload-list__item-status-label,.el-upload-list__item.is-success:not(.focusing):focus .el-icon-close-tip{display:none}.el-upload-list.is-disabled .el-upload-list__item:hover .el-upload-list__item-status-label{display:block}.el-upload-list__item-name{color:#606266;display:block;margin-right:40px;overflow:hidden;padding-left:4px;text-overflow:ellipsis;-webkit-transition:color .3s;transition:color .3s;white-space:nowrap}.el-upload-list__item-name [class^=el-icon]{height:100%;margin-right:7px;color:#909399;line-height:inherit}.el-upload-list__item-status-label{position:absolute;right:5px;top:0;line-height:inherit;display:none}.el-upload-list__item-delete{position:absolute;right:10px;top:0;font-size:12px;color:#606266;display:none}.el-upload-list__item-delete:hover{color:#409EFF}.el-upload-list--picture-card{margin:0;display:inline;vertical-align:top}.el-upload-list--picture-card .el-upload-list__item{overflow:hidden;background-color:#fff;border:1px solid #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;width:148px;height:148px;margin:0 8px 8px 0;display:inline-block}.el-upload-list--picture-card .el-upload-list__item .el-icon-check,.el-upload-list--picture-card .el-upload-list__item .el-icon-circle-check{color:#FFF}.el-upload-list--picture-card .el-upload-list__item .el-icon-close,.el-upload-list--picture-card .el-upload-list__item:hover .el-upload-list__item-status-label{display:none}.el-upload-list--picture-card .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture-card .el-upload-list__item-name{display:none}.el-upload-list--picture-card .el-upload-list__item-thumbnail{width:100%;height:100%}.el-upload-list--picture-card .el-upload-list__item-status-label{position:absolute;right:-15px;top:-6px;width:40px;height:24px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 0 1pc 1px rgba(0,0,0,.2);box-shadow:0 0 1pc 1px rgba(0,0,0,.2)}.el-upload-list--picture-card .el-upload-list__item-status-label i{font-size:12px;margin-top:11px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.el-upload-list--picture-card .el-upload-list__item-actions{position:absolute;width:100%;height:100%;left:0;top:0;cursor:default;text-align:center;color:#fff;opacity:0;font-size:20px;background-color:rgba(0,0,0,.5);-webkit-transition:opacity .3s;transition:opacity .3s}.el-upload-list--picture-card .el-upload-list__item-actions::after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-upload-list--picture-card .el-upload-list__item-actions span{display:none;cursor:pointer}.el-upload-list--picture-card .el-upload-list__item-actions span+span{margin-left:15px}.el-upload-list--picture-card .el-upload-list__item-actions .el-upload-list__item-delete{position:static;font-size:inherit;color:inherit}.el-upload-list--picture-card .el-upload-list__item-actions:hover{opacity:1}.el-upload-list--picture-card .el-upload-list__item-actions:hover span{display:inline-block}.el-upload-list--picture-card .el-progress{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);bottom:auto;width:126px}.el-upload-list--picture-card .el-progress .el-progress__text{top:50%}.el-upload-list--picture .el-upload-list__item{overflow:hidden;z-index:0;background-color:#fff;border:1px solid #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;margin-top:10px;padding:10px 10px 10px 90px;height:92px}.el-upload-list--picture .el-upload-list__item .el-icon-check,.el-upload-list--picture .el-upload-list__item .el-icon-circle-check{color:#FFF}.el-upload-list--picture .el-upload-list__item:hover .el-upload-list__item-status-label{background:0 0;-webkit-box-shadow:none;box-shadow:none;top:-2px;right:-12px}.el-upload-list--picture .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name{line-height:70px;margin-top:0}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name i{display:none}.el-upload-list--picture .el-upload-list__item-thumbnail{vertical-align:middle;display:inline-block;width:70px;height:70px;float:left;position:relative;z-index:1;margin-left:-80px}.el-upload-list--picture .el-upload-list__item-name{display:block;margin-top:20px}.el-upload-list--picture .el-upload-list__item-name i{font-size:70px;line-height:1;position:absolute;left:9px;top:10px}.el-upload-list--picture .el-upload-list__item-status-label{position:absolute;right:-17px;top:-7px;width:46px;height:26px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 1px 1px #ccc;box-shadow:0 1px 1px #ccc}.el-upload-list--picture .el-upload-list__item-status-label i{font-size:12px;margin-top:12px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.el-upload-list--picture .el-progress{position:relative;top:-7px}.el-upload-cover{position:absolute;left:0;top:0;width:100%;height:100%;overflow:hidden;z-index:10;cursor:default}.el-upload-cover::after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-upload-cover img{display:block;width:100%;height:100%}.el-progress__text,.el-upload-cover__interact .btn,.el-upload-cover__progress{display:inline-block;vertical-align:middle}.el-upload-cover__label{position:absolute;right:-15px;top:-6px;width:40px;height:24px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 0 1pc 1px rgba(0,0,0,.2);box-shadow:0 0 1pc 1px rgba(0,0,0,.2)}.el-upload-cover__label i{font-size:12px;margin-top:11px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);color:#fff}.el-upload-cover__progress{position:static;width:243px}.el-upload-cover__progress+.el-upload__inner{opacity:0}.el-upload-cover__content{position:absolute;top:0;left:0;width:100%;height:100%}.el-upload-cover__interact{position:absolute;bottom:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.72);text-align:center}.el-upload-cover__interact .btn{color:#FFF;font-size:14px;cursor:pointer;-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);margin-top:60px}.el-upload-cover__interact .btn span{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.el-upload-cover__interact .btn:not(:first-child){margin-left:35px}.el-upload-cover__interact .btn:hover{-webkit-transform:translateY(-13px);transform:translateY(-13px)}.el-upload-cover__interact .btn:hover span{opacity:1}.el-upload-cover__interact .btn i{color:#FFF;display:block;font-size:24px;line-height:inherit;margin:0 auto 5px}.el-upload-cover__title{position:absolute;bottom:0;left:0;background-color:#FFF;height:36px;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:400;text-align:left;padding:0 10px;margin:0;line-height:36px;font-size:14px;color:#303133}.el-upload-cover+.el-upload__inner{opacity:0;position:relative;z-index:1}.el-progress{position:relative;line-height:1}.el-progress__text{font-size:14px;color:#606266;margin-left:10px;line-height:1}.el-progress__text i{vertical-align:middle;display:block}.el-progress--circle{display:inline-block}.el-progress--circle .el-progress__text{position:absolute;top:50%;left:0;width:100%;text-align:center;margin:0;-webkit-transform:translate(0,-50%);transform:translate(0,-50%)}.el-progress--circle .el-progress__text i{vertical-align:middle;display:inline-block}.el-progress--without-text .el-progress__text{display:none}.el-progress--without-text .el-progress-bar{padding-right:0;margin-right:0;display:block}.el-progress--text-inside .el-progress-bar{padding-right:0;margin-right:0}.el-progress.is-success .el-progress-bar__inner{background-color:#67C23A}.el-badge__content,.el-progress.is-exception .el-progress-bar__inner{background-color:#F56C6C}.el-progress.is-success .el-progress__text{color:#67C23A}.el-progress.is-exception .el-progress__text{color:#F56C6C}.el-progress-bar{padding-right:50px;display:inline-block;vertical-align:middle;width:100%;margin-right:-55px;-webkit-box-sizing:border-box;box-sizing:border-box}.el-card__header,.el-message,.el-step__icon{-webkit-box-sizing:border-box}.el-progress-bar__outer{height:6px;border-radius:100px;background-color:#EBEEF5;overflow:hidden;position:relative;vertical-align:middle}.el-progress-bar__inner{position:absolute;left:0;top:0;height:100%;background-color:#409EFF;text-align:right;border-radius:100px;line-height:1;white-space:nowrap;-webkit-transition:width .6s ease;transition:width .6s ease}.el-progress-bar__inner::after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-progress-bar__innerText{display:inline-block;vertical-align:middle;color:#FFF;font-size:12px;margin:0 5px}@keyframes progress{0%{background-position:0 0}100%{background-position:32px 0}}.el-time-spinner{width:100%;white-space:nowrap}.el-spinner{display:inline-block;vertical-align:middle}.el-spinner-inner{-webkit-animation:rotate 2s linear infinite;animation:rotate 2s linear infinite;width:50px;height:50px}.el-spinner-inner .path{stroke:#ececec;stroke-linecap:round;-webkit-animation:dash 1.5s ease-in-out infinite;animation:dash 1.5s ease-in-out infinite}@-webkit-keyframes rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}100%{stroke-dasharray:90,150;stroke-dashoffset:-124}}@keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}100%{stroke-dasharray:90,150;stroke-dashoffset:-124}}.el-message{min-width:380px;box-sizing:border-box;border-radius:4px;border-width:1px;border-style:solid;border-color:#EBEEF5;position:fixed;left:50%;top:20px;-webkit-transform:translateX(-50%);transform:translateX(-50%);background-color:#edf2fc;-webkit-transition:opacity .3s,-webkit-transform .4s;transition:opacity .3s,-webkit-transform .4s;transition:opacity .3s,transform .4s;transition:opacity .3s,transform .4s,-webkit-transform .4s;overflow:hidden;padding:15px 15px 15px 20px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-message.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-message.is-closable .el-message__content{padding-right:16px}.el-message p{margin:0}.el-message--info .el-message__content{color:#909399}.el-message--success{background-color:#f0f9eb;border-color:#e1f3d8}.el-message--success .el-message__content{color:#67C23A}.el-message--warning{background-color:#fdf6ec;border-color:#faecd8}.el-message--warning .el-message__content{color:#E6A23C}.el-message--error{background-color:#fef0f0;border-color:#fde2e2}.el-message--error .el-message__content{color:#F56C6C}.el-message__icon{margin-right:10px}.el-message__content{padding:0;font-size:14px;line-height:1}.el-message__content:focus{outline-width:0}.el-message__closeBtn{position:absolute;top:50%;right:15px;-webkit-transform:translateY(-50%);transform:translateY(-50%);cursor:pointer;color:#C0C4CC;font-size:16px}.el-message__closeBtn:focus{outline-width:0}.el-message__closeBtn:hover{color:#909399}.el-message .el-icon-success{color:#67C23A}.el-message .el-icon-error{color:#F56C6C}.el-message .el-icon-info{color:#909399}.el-message .el-icon-warning{color:#E6A23C}.el-message-fade-enter,.el-message-fade-leave-active{opacity:0;-webkit-transform:translate(-50%,-100%);transform:translate(-50%,-100%)}.el-badge{position:relative;vertical-align:middle;display:inline-block}.el-badge__content{border-radius:10px;color:#FFF;display:inline-block;font-size:12px;height:18px;line-height:18px;padding:0 6px;text-align:center;white-space:nowrap;border:1px solid #FFF}.el-badge__content.is-fixed{position:absolute;top:0;right:10px;-webkit-transform:translateY(-50%) translateX(100%);transform:translateY(-50%) translateX(100%)}.el-rate__icon,.el-rate__item{position:relative;display:inline-block}.el-badge__content.is-fixed.is-dot{right:5px}.el-badge__content.is-dot{height:8px;width:8px;padding:0;right:0;border-radius:50%}.el-badge__content--primary{background-color:#409EFF}.el-badge__content--success{background-color:#67C23A}.el-badge__content--warning{background-color:#E6A23C}.el-badge__content--info{background-color:#909399}.el-badge__content--danger{background-color:#F56C6C}.el-card{border-radius:4px;border:1px solid #EBEEF5;background-color:#FFF;overflow:hidden;color:#303133;-webkit-transition:.3s;transition:.3s}.el-card.is-always-shadow,.el-card.is-hover-shadow:focus,.el-card.is-hover-shadow:hover{box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-card__header{padding:18px 20px;border-bottom:1px solid #EBEEF5;box-sizing:border-box}.el-card__body{padding:20px}.el-rate{height:20px;line-height:1}.el-rate:active,.el-rate:focus{outline-width:0}.el-rate__item{font-size:0;vertical-align:middle}.el-rate__icon{font-size:18px;margin-right:6px;color:#C0C4CC;-webkit-transition:.3s;transition:.3s}.el-rate__decimal,.el-rate__icon .path2{position:absolute;top:0;left:0}.el-rate__icon.hover{-webkit-transform:scale(1.15);transform:scale(1.15)}.el-rate__decimal{display:inline-block;overflow:hidden}.el-step.is-vertical,.el-steps{display:-webkit-box;display:-ms-flexbox}.el-rate__text{font-size:14px;vertical-align:middle}.el-steps{display:flex}.el-steps--simple{padding:13px 8%;border-radius:4px;background:#f5f7fa}.el-steps--horizontal{white-space:nowrap}.el-steps--vertical{height:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column}.el-step{position:relative;-ms-flex-negative:1;flex-shrink:1}.el-step:last-of-type .el-step__line{display:none}.el-step:last-of-type.is-flex{-ms-flex-preferred-size:auto!important;flex-basis:auto!important;-ms-flex-negative:0;flex-shrink:0;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}.el-step:last-of-type .el-step__description,.el-step:last-of-type .el-step__main{padding-right:0}.el-step__head{position:relative;width:100%}.el-step__head.is-process{color:#303133;border-color:#303133}.el-step__head.is-wait{color:#C0C4CC;border-color:#C0C4CC}.el-step__head.is-success{color:#67C23A;border-color:#67C23A}.el-step__head.is-error{color:#F56C6C;border-color:#F56C6C}.el-step__head.is-finish{color:#409EFF;border-color:#409EFF}.el-step__icon{position:relative;z-index:1;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:24px;height:24px;font-size:14px;box-sizing:border-box;background:#FFF;-webkit-transition:.15s ease-out;transition:.15s ease-out}.el-step.is-horizontal,.el-step__icon-inner{display:inline-block}.el-cascader-menu,.el-cascader__label,.el-collapse-item__wrap,.el-step__line-inner{-webkit-box-sizing:border-box}.el-step__icon.is-text{border-radius:50%;border:2px solid;border-color:inherit}.el-step__icon.is-icon{width:40px}.el-step__icon-inner{user-select:none;text-align:center;font-weight:700;line-height:1;color:inherit}.el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:25px;font-weight:400}.el-step__icon-inner.is-status{-webkit-transform:translateY(1px);transform:translateY(1px)}.el-step__line{position:absolute;border-color:inherit;background-color:#C0C4CC}.el-step__line-inner{display:block;border-width:1px;border-style:solid;border-color:inherit;-webkit-transition:.15s ease-out;transition:.15s ease-out;box-sizing:border-box;width:0;height:0}.el-step__main{white-space:normal;text-align:left}.el-step__title{font-size:16px;line-height:38px}.el-step__title.is-process{font-weight:700;color:#303133}.el-step__title.is-wait{color:#C0C4CC}.el-step__title.is-success{color:#67C23A}.el-step__title.is-error{color:#F56C6C}.el-step__title.is-finish{color:#409EFF}.el-step__description{padding-right:10%;margin-top:-5px;font-size:12px;line-height:20px;font-weight:400}.el-step__description.is-process{color:#303133}.el-step__description.is-wait{color:#C0C4CC}.el-step__description.is-success{color:#67C23A}.el-step__description.is-error{color:#F56C6C}.el-step__description.is-finish{color:#409EFF}.el-step.is-horizontal .el-step__line{height:2px;top:11px;left:0;right:0}.el-step.is-vertical{display:flex}.el-step.is-vertical .el-step__head{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;width:24px}.el-step.is-vertical .el-step__main{padding-left:10px;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.el-step.is-vertical .el-step__title{line-height:24px;padding-bottom:8px}.el-step.is-vertical .el-step__line{width:2px;top:0;bottom:0;left:11px}.el-step.is-vertical .el-step__icon.is-icon{width:24px}.el-step.is-center .el-step__head,.el-step.is-center .el-step__main{text-align:center}.el-step.is-center .el-step__description{padding-left:20%;padding-right:20%}.el-step.is-center .el-step__line{left:50%;right:-50%}.el-step.is-simple{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-step.is-simple .el-step__head{width:auto;font-size:0;padding-right:10px}.el-step.is-simple .el-step__icon{background:0 0;width:16px;height:16px;font-size:12px}.el-step.is-simple .el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:18px}.el-step.is-simple .el-step__icon-inner.is-status{-webkit-transform:scale(.8) translateY(1px);transform:scale(.8) translateY(1px)}.el-step.is-simple .el-step__main{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.el-step.is-simple .el-step__title{font-size:16px;line-height:20px}.el-step.is-simple:not(:last-of-type) .el-step__title{max-width:50%;word-break:break-all}.el-step.is-simple .el-step__arrow{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-step.is-simple .el-step__arrow::after,.el-step.is-simple .el-step__arrow::before{content:'';display:inline-block;position:absolute;height:15px;width:1px;background:#C0C4CC}.el-step.is-simple .el-step__arrow::before{-webkit-transform:rotate(-45deg) translateY(-4px);transform:rotate(-45deg) translateY(-4px);-webkit-transform-origin:0 0;transform-origin:0 0}.el-step.is-simple .el-step__arrow::after{-webkit-transform:rotate(45deg) translateY(4px);transform:rotate(45deg) translateY(4px);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}.el-step.is-simple:last-of-type .el-step__arrow{display:none}.el-carousel{overflow-x:hidden;position:relative}.el-carousel__container{position:relative;height:300px}.el-carousel__arrow{border:none;outline:0;padding:0;margin:0;height:36px;width:36px;cursor:pointer;-webkit-transition:.3s;transition:.3s;border-radius:50%;background-color:rgba(31,45,61,.11);color:#FFF;position:absolute;top:50%;z-index:10;-webkit-transform:translateY(-50%);transform:translateY(-50%);text-align:center;font-size:12px}.el-carousel__arrow--left{left:16px}.el-carousel__arrow--right{right:16px}.el-carousel__arrow:hover{background-color:rgba(31,45,61,.23)}.el-carousel__arrow i{cursor:pointer}.el-carousel__indicators{position:absolute;list-style:none;bottom:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);margin:0;padding:0;z-index:2}.el-carousel__indicators--outside{bottom:26px;text-align:center;position:static;-webkit-transform:none;transform:none}.el-carousel__indicators--outside .el-carousel__indicator:hover button{opacity:.64}.el-carousel__indicators--outside button{background-color:#C0C4CC;opacity:.24}.el-carousel__indicators--labels{left:0;right:0;-webkit-transform:none;transform:none;text-align:center}.el-carousel__indicators--labels .el-carousel__button{height:auto;width:auto;padding:2px 18px;font-size:12px}.el-carousel__indicators--labels .el-carousel__indicator{padding:6px 4px}.el-carousel__indicator{display:inline-block;background-color:transparent;padding:12px 4px;cursor:pointer}.el-carousel__indicator:hover button{opacity:.72}.el-carousel__indicator.is-active button{opacity:1}.el-carousel__button{display:block;opacity:.48;width:30px;height:2px;background-color:#FFF;border:none;outline:0;padding:0;margin:0;cursor:pointer;-webkit-transition:.3s;transition:.3s}.carousel-arrow-left-enter,.carousel-arrow-left-leave-active{-webkit-transform:translateY(-50%) translateX(-10px);transform:translateY(-50%) translateX(-10px);opacity:0}.carousel-arrow-right-enter,.carousel-arrow-right-leave-active{-webkit-transform:translateY(-50%) translateX(10px);transform:translateY(-50%) translateX(10px);opacity:0}.el-scrollbar{overflow:hidden;position:relative}.el-scrollbar:active>.el-scrollbar__bar,.el-scrollbar:focus>.el-scrollbar__bar,.el-scrollbar:hover>.el-scrollbar__bar{opacity:1;-webkit-transition:opacity 340ms ease-out;transition:opacity 340ms ease-out}.el-scrollbar__wrap{overflow:scroll;height:100%}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(144,147,153,.3);-webkit-transition:.3s background-color;transition:.3s background-color}.el-scrollbar__thumb:hover{background-color:rgba(144,147,153,.5)}.el-scrollbar__bar{position:absolute;right:2px;bottom:2px;z-index:1;border-radius:4px;opacity:0;-webkit-transition:opacity 120ms ease-out;transition:opacity 120ms ease-out}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-carousel__item{position:absolute;top:0;left:0;width:100%;height:100%;display:inline-block;overflow:hidden;z-index:0}.el-carousel__item.is-active{z-index:2}.el-carousel__item.is-animating{-webkit-transition:-webkit-transform .4s ease-in-out;transition:-webkit-transform .4s ease-in-out;transition:transform .4s ease-in-out;transition:transform .4s ease-in-out,-webkit-transform .4s ease-in-out}.el-carousel__item--card{width:50%;-webkit-transition:-webkit-transform .4s ease-in-out;transition:-webkit-transform .4s ease-in-out;transition:transform .4s ease-in-out;transition:transform .4s ease-in-out,-webkit-transform .4s ease-in-out}.el-carousel__item--card.is-in-stage{cursor:pointer;z-index:1}.el-carousel__item--card.is-in-stage.is-hover .el-carousel__mask,.el-carousel__item--card.is-in-stage:hover .el-carousel__mask{opacity:.12}.el-carousel__item--card.is-active{z-index:2}.el-carousel__mask{position:absolute;width:100%;height:100%;top:0;left:0;background-color:#FFF;opacity:.24;-webkit-transition:.2s;transition:.2s}.fade-in-linear-enter-active,.fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.fade-in-linear-enter,.fade-in-linear-leave,.fade-in-linear-leave-active{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.el-fade-in-linear-enter,.el-fade-in-linear-leave,.el-fade-in-linear-leave-active{opacity:0}.el-fade-in-enter-active,.el-fade-in-leave-active{-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.el-fade-in-enter,.el-fade-in-leave-active{opacity:0}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.el-zoom-in-center-enter,.el-zoom-in-center-leave-active{opacity:0;-webkit-transform:scaleX(0);transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:center top;transform-origin:center top}.el-zoom-in-top-enter,.el-zoom-in-top-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:center bottom;transform-origin:center bottom}.el-zoom-in-bottom-enter,.el-zoom-in-bottom-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;-webkit-transform:scale(1,1);transform:scale(1,1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:top left;transform-origin:top left}.el-zoom-in-left-enter,.el-zoom-in-left-leave-active{opacity:0;-webkit-transform:scale(.45,.45);transform:scale(.45,.45)}.collapse-transition{-webkit-transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out;transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out}.horizontal-collapse-transition{-webkit-transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out;transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out}.el-list-enter-active,.el-list-leave-active{-webkit-transition:all 1s;transition:all 1s}.el-list-enter,.el-list-leave-active{opacity:0;-webkit-transform:translateY(-30px);transform:translateY(-30px)}.el-opacity-transition{-webkit-transition:opacity .3s cubic-bezier(.55,0,.1,1);transition:opacity .3s cubic-bezier(.55,0,.1,1)}.el-collapse{border-top:1px solid #EBEEF5;border-bottom:1px solid #EBEEF5}.el-collapse-item__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:48px;line-height:48px;background-color:#FFF;color:#303133;cursor:pointer;border-bottom:1px solid #EBEEF5;font-size:13px;font-weight:500;-webkit-transition:border-bottom-color .3s;transition:border-bottom-color .3s;outline:0}.el-collapse-item__arrow{margin:0 8px 0 auto;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-weight:300}.el-collapse-item__arrow.is-active{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-collapse-item__header.focusing:focus:not(:hover){color:#409EFF}.el-collapse-item__header.is-active{border-bottom-color:transparent}.el-collapse-item__wrap{will-change:height;background-color:#FFF;overflow:hidden;box-sizing:border-box;border-bottom:1px solid #EBEEF5}.el-collapse-item__content{padding-bottom:25px;font-size:13px;color:#303133;line-height:1.769230769230769}.el-collapse-item:last-child{margin-bottom:-1px}.el-popper .popper__arrow,.el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-popper .popper__arrow{border-width:6px;-webkit-filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03));filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03))}.el-popper .popper__arrow::after{content:" ";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#EBEEF5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#FFF;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#EBEEF5}.el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#FFF}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#EBEEF5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#FFF;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#EBEEF5}.el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#FFF}.el-cascader{display:inline-block;position:relative;font-size:14px;line-height:40px}.el-cascader .el-input,.el-cascader .el-input__inner{cursor:pointer}.el-cascader .el-input.is-focus .el-input__inner{border-color:#409EFF}.el-cascader .el-input__icon{-webkit-transition:none;transition:none}.el-cascader .el-icon-arrow-down{-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-size:14px}.el-cascader .el-icon-arrow-down.is-reverse{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg)}.el-cascader .el-icon-circle-close{z-index:2;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-cascader .el-icon-circle-close:hover{color:#909399}.el-cascader-menu__item,.el-cascader__label{color:#606266;white-space:nowrap;text-overflow:ellipsis}.el-cascader__clearIcon{z-index:2;position:relative}.el-cascader__label{position:absolute;left:0;top:0;height:100%;padding:0 25px 0 15px;width:100%;overflow:hidden;box-sizing:border-box;cursor:pointer;text-align:left;font-size:inherit}.el-cascader__label span{color:#000}.el-cascader--medium{font-size:14px;line-height:36px}.el-cascader--small{font-size:13px;line-height:32px}.el-cascader--mini{font-size:12px;line-height:28px}.el-cascader.is-disabled .el-cascader__label{z-index:2;color:#C0C4CC}.el-cascader-menus{white-space:nowrap;background:#fff;position:absolute;margin:5px 0;z-index:2;border:1px solid #E4E7ED;border-radius:2px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-color-picker__color.is-alpha,.el-color-predefine__color-selector.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-cascader-menu{display:inline-block;vertical-align:top;height:204px;overflow:auto;border-right:solid 1px #E4E7ED;background-color:#FFF;box-sizing:border-box;margin:0;padding:6px 0;min-width:160px}.el-cascader-menu:last-child{border-right:0}.el-cascader-menu__item{font-size:14px;padding:8px 20px;position:relative;overflow:hidden;height:34px;line-height:1.5;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;outline:0}.el-cascader-menu__item span{padding-right:10px}.el-cascader-menu__item--extensible:after{font-family:element-icons;font-size:14px;color:#bfcbd9;position:absolute;right:15px}.el-cascader-menu__item.is-disabled{color:#C0C4CC;background-color:#FFF;cursor:not-allowed}.el-cascader-menu__item.is-disabled:hover{background-color:#FFF}.el-cascader-menu__item.is-active{color:#409EFF}.el-cascader-menu__item:focus:not(:active),.el-cascader-menu__item:hover{background-color:#f5f7fa}.el-cascader-menu__item.selected{color:#FFF;background-color:#f5f7fa}.el-cascader-menu__item__keyword{font-weight:700}.el-cascader-menu--flexible{height:auto;max-height:180px;overflow:auto}.el-cascader-menu--flexible .el-cascader-menu__item{overflow:visible}.el-color-predefine{display:-webkit-box;display:-ms-flexbox;display:flex;font-size:12px;margin-top:8px;width:280px}.el-color-predefine__colors{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-wrap:wrap;flex-wrap:wrap}.el-color-predefine__color-selector{margin:0 0 8px 8px;width:20px;height:20px;border-radius:4px;cursor:pointer}.el-button-group>.el-button+.el-button,.el-color-predefine__color-selector:nth-child(10n+1){margin-left:0}.el-color-predefine__color-selector.selected{-webkit-box-shadow:0 0 3px 2px #409EFF;box-shadow:0 0 3px 2px #409EFF}.el-color-predefine__color-selector>div{display:-webkit-box;display:-ms-flexbox;display:flex;height:100%;border-radius:3px}.el-color-hue-slider{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;width:280px;height:12px;background-color:red;padding:0 2px}.el-color-hue-slider__bar{position:relative;background:-webkit-gradient(linear,left top,right top,from(red),color-stop(17%,#ff0),color-stop(33%,#0f0),color-stop(50%,#0ff),color-stop(67%,#00f),color-stop(83%,#f0f),to(red));background:linear-gradient(to right,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%);height:100%}.el-color-hue-slider__thumb{position:absolute;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;left:0;top:0;width:4px;height:100%;border-radius:1px;background:#fff;border:1px solid #f0f0f0;-webkit-box-shadow:0 0 2px rgba(0,0,0,.6);box-shadow:0 0 2px rgba(0,0,0,.6);z-index:1}.el-color-hue-slider.is-vertical{width:12px;height:180px;padding:2px 0}.el-color-hue-slider.is-vertical .el-color-hue-slider__bar{background:-webkit-gradient(linear,left top,left bottom,from(red),color-stop(17%,#ff0),color-stop(33%,#0f0),color-stop(50%,#0ff),color-stop(67%,#00f),color-stop(83%,#f0f),to(red));background:linear-gradient(to bottom,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%)}.el-color-hue-slider.is-vertical .el-color-hue-slider__thumb{left:0;top:0;width:100%;height:4px}.el-color-svpanel{position:relative;width:280px;height:180px}.el-color-svpanel__black,.el-color-svpanel__white{position:absolute;top:0;left:0;right:0;bottom:0}.el-color-svpanel__white{background:-webkit-gradient(linear,left top,right top,from(#fff),to(rgba(255,255,255,0)));background:linear-gradient(to right,#fff,rgba(255,255,255,0))}.el-color-svpanel__black{background:-webkit-gradient(linear,left bottom,left top,from(#000),to(rgba(0,0,0,0)));background:linear-gradient(to top,#000,rgba(0,0,0,0))}.el-color-svpanel__cursor{position:absolute}.el-color-svpanel__cursor>div{cursor:head;width:4px;height:4px;-webkit-box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px rgba(0,0,0,.3),0 0 1px 2px rgba(0,0,0,.4);box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px rgba(0,0,0,.3),0 0 1px 2px rgba(0,0,0,.4);border-radius:50%;-webkit-transform:translate(-2px,-2px);transform:translate(-2px,-2px)}.el-color-alpha-slider{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;width:280px;height:12px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-alpha-slider__bar{position:relative;background:-webkit-gradient(linear,left top,right top,from(rgba(255,255,255,0)),to(white));background:linear-gradient(to right,rgba(255,255,255,0) 0,#fff 100%);height:100%}.el-color-alpha-slider__thumb{position:absolute;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;left:0;top:0;width:4px;height:100%;border-radius:1px;background:#fff;border:1px solid #f0f0f0;-webkit-box-shadow:0 0 2px rgba(0,0,0,.6);box-shadow:0 0 2px rgba(0,0,0,.6);z-index:1}.el-color-alpha-slider.is-vertical{width:20px;height:180px}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__bar{background:-webkit-gradient(linear,left top,left bottom,from(rgba(255,255,255,0)),to(white));background:linear-gradient(to bottom,rgba(255,255,255,0) 0,#fff 100%)}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__thumb{left:0;top:0;width:100%;height:4px}.el-color-dropdown{width:300px}.el-color-dropdown__main-wrapper{margin-bottom:6px}.el-color-dropdown__main-wrapper::after{content:"";display:table;clear:both}.el-color-dropdown__btns{margin-top:6px;text-align:right}.el-color-dropdown__value{float:left;line-height:26px;font-size:12px;color:#000;width:160px}.el-color-dropdown__btn{border:1px solid #dcdcdc;color:#333;line-height:24px;border-radius:2px;padding:0 20px;cursor:pointer;background-color:transparent;outline:0;font-size:12px}.el-color-dropdown__btn[disabled]{color:#ccc;cursor:not-allowed}.el-color-dropdown__btn:hover{color:#409EFF;border-color:#409EFF}.el-color-dropdown__link-btn{cursor:pointer;color:#409EFF;text-decoration:none;padding:15px;font-size:12px}.el-color-dropdown__link-btn:hover{color:tint(#409EFF,20%)}.el-color-picker{display:inline-block;position:relative;line-height:normal;height:40px}.el-color-picker.is-disabled .el-color-picker__trigger{cursor:not-allowed}.el-color-picker--medium{height:36px}.el-color-picker--medium .el-color-picker__trigger{height:36px;width:36px}.el-color-picker--medium .el-color-picker__mask{height:34px;width:34px}.el-color-picker--small{height:32px}.el-color-picker--small .el-color-picker__trigger{height:32px;width:32px}.el-color-picker--small .el-color-picker__mask{height:30px;width:30px}.el-color-picker--small .el-color-picker__empty,.el-color-picker--small .el-color-picker__icon{-webkit-transform:translate3d(-50%,-50%,0) scale(.8);transform:translate3d(-50%,-50%,0) scale(.8)}.el-color-picker--mini{height:28px}.el-color-picker--mini .el-color-picker__trigger{height:28px;width:28px}.el-color-picker--mini .el-color-picker__mask{height:26px;width:26px}.el-color-picker--mini .el-color-picker__empty,.el-color-picker--mini .el-color-picker__icon{-webkit-transform:translate3d(-50%,-50%,0) scale(.8);transform:translate3d(-50%,-50%,0) scale(.8)}.el-color-picker__mask{height:38px;width:38px;border-radius:4px;position:absolute;top:1px;left:1px;z-index:1;cursor:not-allowed;background-color:rgba(255,255,255,.7)}.el-color-picker__trigger{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;height:40px;width:40px;padding:4px;border:1px solid #e6e6e6;border-radius:4px;font-size:0;position:relative;cursor:pointer}.el-color-picker__color{position:relative;display:block;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #999;border-radius:2px;width:100%;height:100%;text-align:center}.el-color-picker__color-inner{position:absolute;left:0;top:0;right:0;bottom:0}.el-color-picker__empty{font-size:12px;color:#999;position:absolute;top:50%;left:50%;-webkit-transform:translate3d(-50%,-50%,0);transform:translate3d(-50%,-50%,0)}.el-color-picker__icon{display:inline-block;position:absolute;width:100%;top:50%;left:50%;-webkit-transform:translate3d(-50%,-50%,0);transform:translate3d(-50%,-50%,0);color:#FFF;text-align:center;font-size:12px}.el-color-picker__panel{position:absolute;z-index:10;padding:6px;-webkit-box-sizing:content-box;box-sizing:content-box;background-color:#FFF;border:1px solid #EBEEF5;border-radius:4px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-input__inner,.el-textarea__inner{background-image:none;-webkit-box-sizing:border-box}.el-textarea{display:inline-block;width:100%;vertical-align:bottom;font-size:14px}.el-textarea__inner{display:block;resize:vertical;padding:5px 15px;line-height:1.5;box-sizing:border-box;width:100%;font-size:inherit;color:#606266;background-color:#FFF;border:1px solid #DCDFE6;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.el-textarea__inner::-webkit-input-placeholder{color:#C0C4CC}.el-textarea__inner::-ms-input-placeholder{color:#C0C4CC}.el-textarea__inner::placeholder{color:#C0C4CC}.el-textarea__inner:hover{border-color:#C0C4CC}.el-textarea__inner:focus{outline:0;border-color:#409EFF}.el-textarea.is-disabled .el-textarea__inner{background-color:#f5f7fa;border-color:#E4E7ED;color:#C0C4CC;cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#C0C4CC}.el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#C0C4CC}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:#C0C4CC}.el-input{position:relative;font-size:14px;display:inline-block;width:100%}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.el-input::-webkit-scrollbar-corner{background:#fff}.el-input::-webkit-scrollbar-track{background:#fff}.el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.el-input .el-input__clear{color:#C0C4CC;font-size:14px;line-height:16px;cursor:pointer;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-input .el-input__clear:hover{color:#909399}.el-input__inner{-webkit-appearance:none;background-color:#FFF;border-radius:4px;border:1px solid #DCDFE6;box-sizing:border-box;color:#606266;display:inline-block;font-size:inherit;height:40px;line-height:40px;outline:0;padding:0 15px;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%}.el-input__prefix,.el-input__suffix{position:absolute;top:0;-webkit-transition:all .3s;height:100%;color:#C0C4CC;text-align:center}.el-input__inner::-webkit-input-placeholder{color:#C0C4CC}.el-input__inner::-ms-input-placeholder{color:#C0C4CC}.el-input__inner::placeholder{color:#C0C4CC}.el-input__inner:hover{border-color:#C0C4CC}.el-input.is-active .el-input__inner,.el-input__inner:focus{border-color:#409EFF;outline:0}.el-input__suffix{right:5px;transition:all .3s;pointer-events:none}.el-input__suffix-inner{pointer-events:all}.el-input__prefix{left:5px;transition:all .3s}.el-input__icon{height:100%;width:25px;text-align:center;-webkit-transition:all .3s;transition:all .3s;line-height:40px}.el-input__icon:after{content:'';height:100%;width:0;display:inline-block;vertical-align:middle}.el-input__validateIcon{pointer-events:none}.el-input.is-disabled .el-input__inner{background-color:#f5f7fa;border-color:#E4E7ED;color:#C0C4CC;cursor:not-allowed}.el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#C0C4CC}.el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#C0C4CC}.el-input.is-disabled .el-input__inner::placeholder{color:#C0C4CC}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-input--suffix .el-input__inner{padding-right:30px}.el-input--prefix .el-input__inner{padding-left:30px}.el-input--medium{font-size:14px}.el-input--medium .el-input__inner{height:36px;line-height:36px}.el-input--medium .el-input__icon{line-height:36px}.el-input--small{font-size:13px}.el-input--small .el-input__inner{height:32px;line-height:32px}.el-input--small .el-input__icon{line-height:32px}.el-input--mini{font-size:12px}.el-input--mini .el-input__inner{height:28px;line-height:28px}.el-input--mini .el-input__icon{line-height:28px}.el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate;border-spacing:0}.el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.el-input-group__append,.el-input-group__prepend{background-color:#f5f7fa;color:#909399;vertical-align:middle;display:table-cell;position:relative;border:1px solid #DCDFE6;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.el-input-group--prepend .el-input__inner,.el-input-group__append{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--append .el-input__inner,.el-input-group__prepend{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:0}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:-10px -20px}.el-input-group__append button.el-button,.el-input-group__append div.el-select .el-input__inner,.el-input-group__append div.el-select:hover .el-input__inner,.el-input-group__prepend button.el-button,.el-input-group__prepend div.el-select .el-input__inner,.el-input-group__prepend div.el-select:hover .el-input__inner{border-color:transparent;background-color:transparent;color:inherit;border-top:0;border-bottom:0}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{border-right:0}.el-input-group__append{border-left:0}.el-input-group--append .el-select .el-input.is-focus .el-input__inner,.el-input-group--prepend .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input__inner::-ms-clear{display:none;width:0;height:0}.el-button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#FFF;border:1px solid #DCDFE6;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;-webkit-transition:.1s;transition:.1s;font-weight:500;padding:12px 20px;font-size:14px;border-radius:4px}.el-button+.el-button{margin-left:10px}.el-button:focus,.el-button:hover{color:#409EFF;border-color:#c6e2ff;background-color:#ecf5ff}.el-button:active{color:#3a8ee6;border-color:#3a8ee6;outline:0}.el-button::-moz-focus-inner{border:0}.el-button [class*=el-icon-]+span{margin-left:5px}.el-button.is-plain:focus,.el-button.is-plain:hover{background:#FFF;border-color:#409EFF;color:#409EFF}.el-button.is-active,.el-button.is-plain:active{color:#3a8ee6;border-color:#3a8ee6}.el-button.is-plain:active{background:#FFF;outline:0}.el-button.is-disabled,.el-button.is-disabled:focus,.el-button.is-disabled:hover{color:#C0C4CC;cursor:not-allowed;background-image:none;background-color:#FFF;border-color:#EBEEF5}.el-button.is-disabled.el-button--text{background-color:transparent}.el-button.is-disabled.is-plain,.el-button.is-disabled.is-plain:focus,.el-button.is-disabled.is-plain:hover{background-color:#FFF;border-color:#EBEEF5;color:#C0C4CC}.el-button.is-loading{position:relative;pointer-events:none}.el-button.is-loading:before{pointer-events:none;content:'';position:absolute;left:-1px;top:-1px;right:-1px;bottom:-1px;border-radius:inherit;background-color:rgba(255,255,255,.35)}.el-button.is-round{border-radius:20px;padding:12px 23px}.el-button.is-circle{border-radius:50%;padding:12px}.el-button--primary{color:#FFF;background-color:#409EFF;border-color:#409EFF}.el-button--primary:focus,.el-button--primary:hover{background:#66b1ff;border-color:#66b1ff;color:#FFF}.el-button--primary.is-active,.el-button--primary:active{background:#3a8ee6;border-color:#3a8ee6;color:#FFF}.el-button--primary:active{outline:0}.el-button--primary.is-disabled,.el-button--primary.is-disabled:active,.el-button--primary.is-disabled:focus,.el-button--primary.is-disabled:hover{color:#FFF;background-color:#a0cfff;border-color:#a0cfff}.el-button--primary.is-plain{color:#409EFF;background:#ecf5ff;border-color:#b3d8ff}.el-button--primary.is-plain:focus,.el-button--primary.is-plain:hover{background:#409EFF;border-color:#409EFF;color:#FFF}.el-button--primary.is-plain:active{background:#3a8ee6;border-color:#3a8ee6;color:#FFF;outline:0}.el-button--primary.is-plain.is-disabled,.el-button--primary.is-plain.is-disabled:active,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:hover{color:#8cc5ff;background-color:#ecf5ff;border-color:#d9ecff}.el-button--success{color:#FFF;background-color:#67C23A;border-color:#67C23A}.el-button--success:focus,.el-button--success:hover{background:#85ce61;border-color:#85ce61;color:#FFF}.el-button--success.is-active,.el-button--success:active{background:#5daf34;border-color:#5daf34;color:#FFF}.el-button--success:active{outline:0}.el-button--success.is-disabled,.el-button--success.is-disabled:active,.el-button--success.is-disabled:focus,.el-button--success.is-disabled:hover{color:#FFF;background-color:#b3e19d;border-color:#b3e19d}.el-button--success.is-plain{color:#67C23A;background:#f0f9eb;border-color:#c2e7b0}.el-button--success.is-plain:focus,.el-button--success.is-plain:hover{background:#67C23A;border-color:#67C23A;color:#FFF}.el-button--success.is-plain:active{background:#5daf34;border-color:#5daf34;color:#FFF;outline:0}.el-button--success.is-plain.is-disabled,.el-button--success.is-plain.is-disabled:active,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:hover{color:#a4da89;background-color:#f0f9eb;border-color:#e1f3d8}.el-button--warning{color:#FFF;background-color:#E6A23C;border-color:#E6A23C}.el-button--warning:focus,.el-button--warning:hover{background:#ebb563;border-color:#ebb563;color:#FFF}.el-button--warning.is-active,.el-button--warning:active{background:#cf9236;border-color:#cf9236;color:#FFF}.el-button--warning:active{outline:0}.el-button--warning.is-disabled,.el-button--warning.is-disabled:active,.el-button--warning.is-disabled:focus,.el-button--warning.is-disabled:hover{color:#FFF;background-color:#f3d19e;border-color:#f3d19e}.el-button--warning.is-plain{color:#E6A23C;background:#fdf6ec;border-color:#f5dab1}.el-button--warning.is-plain:focus,.el-button--warning.is-plain:hover{background:#E6A23C;border-color:#E6A23C;color:#FFF}.el-button--warning.is-plain:active{background:#cf9236;border-color:#cf9236;color:#FFF;outline:0}.el-button--warning.is-plain.is-disabled,.el-button--warning.is-plain.is-disabled:active,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:hover{color:#f0c78a;background-color:#fdf6ec;border-color:#faecd8}.el-button--danger{color:#FFF;background-color:#F56C6C;border-color:#F56C6C}.el-button--danger:focus,.el-button--danger:hover{background:#f78989;border-color:#f78989;color:#FFF}.el-button--danger.is-active,.el-button--danger:active{background:#dd6161;border-color:#dd6161;color:#FFF}.el-button--danger:active{outline:0}.el-button--danger.is-disabled,.el-button--danger.is-disabled:active,.el-button--danger.is-disabled:focus,.el-button--danger.is-disabled:hover{color:#FFF;background-color:#fab6b6;border-color:#fab6b6}.el-button--danger.is-plain{color:#F56C6C;background:#fef0f0;border-color:#fbc4c4}.el-button--danger.is-plain:focus,.el-button--danger.is-plain:hover{background:#F56C6C;border-color:#F56C6C;color:#FFF}.el-button--danger.is-plain:active{background:#dd6161;border-color:#dd6161;color:#FFF;outline:0}.el-button--danger.is-plain.is-disabled,.el-button--danger.is-plain.is-disabled:active,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:hover{color:#f9a7a7;background-color:#fef0f0;border-color:#fde2e2}.el-button--info{color:#FFF;background-color:#909399;border-color:#909399}.el-button--info:focus,.el-button--info:hover{background:#a6a9ad;border-color:#a6a9ad;color:#FFF}.el-button--info.is-active,.el-button--info:active{background:#82848a;border-color:#82848a;color:#FFF}.el-button--info:active{outline:0}.el-button--info.is-disabled,.el-button--info.is-disabled:active,.el-button--info.is-disabled:focus,.el-button--info.is-disabled:hover{color:#FFF;background-color:#c8c9cc;border-color:#c8c9cc}.el-button--info.is-plain{color:#909399;background:#f4f4f5;border-color:#d3d4d6}.el-button--info.is-plain:focus,.el-button--info.is-plain:hover{background:#909399;border-color:#909399;color:#FFF}.el-button--info.is-plain:active{background:#82848a;border-color:#82848a;color:#FFF;outline:0}.el-button--info.is-plain.is-disabled,.el-button--info.is-plain.is-disabled:active,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:hover{color:#bcbec2;background-color:#f4f4f5;border-color:#e9e9eb}.el-button--medium{padding:10px 20px;font-size:14px;border-radius:4px}.el-button--medium.is-round{padding:10px 20px}.el-button--medium.is-circle{padding:10px}.el-button--small{padding:9px 15px;font-size:12px;border-radius:3px}.el-button--small.is-round{padding:9px 15px}.el-button--small.is-circle{padding:9px}.el-button--mini,.el-button--mini.is-round{padding:7px 15px}.el-button--mini{font-size:12px;border-radius:3px}.el-button--mini.is-circle{padding:7px}.el-button--text{border-color:transparent;color:#409EFF;background:0 0;padding-left:0;padding-right:0}.el-button--text:focus,.el-button--text:hover{color:#66b1ff;border-color:transparent;background-color:transparent}.el-button--text:active{color:#3a8ee6;border-color:transparent;background-color:transparent}.el-button--text.is-disabled,.el-button--text.is-disabled:focus,.el-button--text.is-disabled:hover{border-color:transparent}.el-button-group .el-button--danger:last-child,.el-button-group .el-button--danger:not(:first-child):not(:last-child),.el-button-group .el-button--info:last-child,.el-button-group .el-button--info:not(:first-child):not(:last-child),.el-button-group .el-button--primary:last-child,.el-button-group .el-button--primary:not(:first-child):not(:last-child),.el-button-group .el-button--success:last-child,.el-button-group .el-button--success:not(:first-child):not(:last-child),.el-button-group .el-button--warning:last-child,.el-button-group .el-button--warning:not(:first-child):not(:last-child),.el-button-group>.el-dropdown>.el-button{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:first-child,.el-button-group .el-button--danger:not(:first-child):not(:last-child),.el-button-group .el-button--info:first-child,.el-button-group .el-button--info:not(:first-child):not(:last-child),.el-button-group .el-button--primary:first-child,.el-button-group .el-button--primary:not(:first-child):not(:last-child),.el-button-group .el-button--success:first-child,.el-button-group .el-button--success:not(:first-child):not(:last-child),.el-button-group .el-button--warning:first-child,.el-button-group .el-button--warning:not(:first-child):not(:last-child){border-right-color:rgba(255,255,255,.5)}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group::after,.el-button-group::before{display:table;content:""}.el-checkbox,.el-checkbox__input{cursor:pointer;display:inline-block;position:relative;white-space:nowrap}.el-button-group::after{clear:both}.el-button-group>.el-button{float:left;position:relative}.el-button-group>.el-button.is-disabled{z-index:1}.el-button-group>.el-button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.el-button-group>.el-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.el-button-group>.el-button:first-child:last-child{border-radius:4px}.el-button-group>.el-button:first-child:last-child.is-round{border-radius:20px}.el-button-group>.el-button:first-child:last-child.is-circle{border-radius:50%}.el-button-group>.el-button:not(:first-child):not(:last-child){border-radius:0}.el-button-group>.el-button.is-active,.el-button-group>.el-button:active,.el-button-group>.el-button:focus,.el-button-group>.el-button:hover{z-index:1}.el-button-group>.el-dropdown>.el-button{border-top-left-radius:0;border-bottom-left-radius:0}.el-checkbox{color:#606266;font-weight:500;font-size:14px;user-select:none;margin-right:30px}.el-checkbox.is-bordered{padding:9px 20px 9px 10px;border-radius:4px;border:1px solid #DCDFE6;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:normal;height:40px}.el-checkbox.is-bordered.is-checked{border-color:#409EFF}.el-checkbox.is-bordered.is-disabled{border-color:#EBEEF5;cursor:not-allowed}.el-checkbox.is-bordered+.el-checkbox.is-bordered{margin-left:10px}.el-checkbox.is-bordered.el-checkbox--medium{padding:7px 20px 7px 10px;border-radius:4px;height:36px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label{line-height:17px;font-size:14px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner{height:14px;width:14px}.el-checkbox.is-bordered.el-checkbox--small{padding:5px 15px 5px 10px;border-radius:3px;height:32px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{line-height:15px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox.is-bordered.el-checkbox--mini{padding:3px 15px 3px 10px;border-radius:3px;height:28px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label{line-height:12px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox__input{outline:0;line-height:1;vertical-align:middle}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:#edf2fc;border-color:#DCDFE6;cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner::after{cursor:not-allowed;border-color:#C0C4CC}.el-checkbox__input.is-disabled .el-checkbox__inner+.el-checkbox__label{cursor:not-allowed}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:#F2F6FC;border-color:#DCDFE6}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after{border-color:#C0C4CC}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:#F2F6FC;border-color:#DCDFE6}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before{background-color:#C0C4CC;border-color:#C0C4CC}.el-checkbox__input.is-checked .el-checkbox__inner,.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#409EFF;border-color:#409EFF}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:#C0C4CC;cursor:not-allowed}.el-checkbox__input.is-checked .el-checkbox__inner::after{-webkit-transform:rotate(45deg) scaleY(1);transform:rotate(45deg) scaleY(1)}.el-checkbox__input.is-checked+.el-checkbox__label{color:#409EFF}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#409EFF}.el-checkbox__input.is-indeterminate .el-checkbox__inner::before{content:'';position:absolute;display:block;background-color:#FFF;height:2px;-webkit-transform:scale(.5);transform:scale(.5);left:0;right:0;top:5px}.el-checkbox__input.is-indeterminate .el-checkbox__inner::after{display:none}.el-checkbox__inner{display:inline-block;position:relative;border:1px solid #DCDFE6;border-radius:2px;-webkit-box-sizing:border-box;box-sizing:border-box;width:14px;height:14px;background-color:#FFF;z-index:1;-webkit-transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46);transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46)}.el-checkbox__inner:hover{border-color:#409EFF}.el-checkbox__inner::after{-webkit-box-sizing:content-box;box-sizing:content-box;content:"";border:1px solid #FFF;border-left:0;border-top:0;height:7px;left:4px;position:absolute;top:1px;-webkit-transform:rotate(45deg) scaleY(0);transform:rotate(45deg) scaleY(0);width:3px;-webkit-transition:-webkit-transform .15s ease-in .05s;transition:-webkit-transform .15s ease-in .05s;transition:transform .15s ease-in .05s;transition:transform .15s ease-in .05s,-webkit-transform .15s ease-in .05s;-webkit-transform-origin:center;transform-origin:center}.el-checkbox__original{opacity:0;outline:0;position:absolute;margin:0;width:0;height:0;z-index:-1}.el-checkbox-button,.el-checkbox-button__inner{position:relative;display:inline-block}.el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.el-checkbox:last-child{margin-right:0}.el-checkbox-button__inner{line-height:1;font-weight:500;white-space:nowrap;vertical-align:middle;cursor:pointer;background:#FFF;border:1px solid #DCDFE6;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);-moz-user-select:none;padding:12px 20px;font-size:14px;border-radius:0}.el-checkbox-button__inner.is-round{padding:12px 20px}.el-checkbox-button__inner:hover{color:#409EFF}.el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.el-checkbox-button__original{opacity:0;outline:0;position:absolute;margin:0;z-index:-1}.el-checkbox-button.is-checked .el-checkbox-button__inner{color:#FFF;background-color:#409EFF;border-color:#409EFF;-webkit-box-shadow:-1px 0 0 0 #8cc5ff;box-shadow:-1px 0 0 0 #8cc5ff}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#409EFF}.el-checkbox-button.is-disabled .el-checkbox-button__inner{color:#C0C4CC;cursor:not-allowed;background-image:none;background-color:#FFF;border-color:#EBEEF5;-webkit-box-shadow:none;box-shadow:none}.el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner{border-left-color:#EBEEF5}.el-checkbox-button:first-child .el-checkbox-button__inner{border-left:1px solid #DCDFE6;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:#409EFF}.el-checkbox-button:last-child .el-checkbox-button__inner{border-radius:0 4px 4px 0}.el-checkbox-button--medium .el-checkbox-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-checkbox-button--medium .el-checkbox-button__inner.is-round{padding:10px 20px}.el-checkbox-button--small .el-checkbox-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:9px 15px}.el-checkbox-button--mini .el-checkbox-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-checkbox-button--mini .el-checkbox-button__inner.is-round{padding:7px 15px}.el-checkbox-group{font-size:0}.el-transfer{font-size:14px}.el-transfer__buttons{display:inline-block;vertical-align:middle;padding:0 30px}.el-transfer__button{display:block;margin:0 auto;padding:10px;border-radius:50%;color:#FFF;background-color:#409EFF;font-size:0}.el-transfer-panel__item+.el-transfer-panel__item,.el-transfer__button [class*=el-icon-]+span{margin-left:0}.el-timeline,.el-transfer__button i,.el-transfer__button span{font-size:14px}.el-transfer__button.is-with-texts{border-radius:4px}.el-transfer__button.is-disabled,.el-transfer__button.is-disabled:hover{border:1px solid #DCDFE6;background-color:#f5f7fa;color:#C0C4CC}.el-transfer__button:first-child{margin-bottom:10px}.el-transfer__button:nth-child(2){margin:0}.el-transfer-panel{border:1px solid #EBEEF5;border-radius:4px;overflow:hidden;background:#FFF;display:inline-block;vertical-align:middle;width:200px;max-height:100%;-webkit-box-sizing:border-box;box-sizing:border-box;position:relative}.el-transfer-panel__body{height:246px}.el-transfer-panel__body.is-with-footer{padding-bottom:40px}.el-transfer-panel__list{margin:0;padding:6px 0;list-style:none;height:246px;overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box}.el-transfer-panel__list.is-filterable{height:194px;padding-top:0}.el-transfer-panel__item{height:30px;line-height:30px;padding-left:15px;display:block}.el-transfer-panel__item.el-checkbox{color:#606266}.el-transfer-panel__item:hover{color:#409EFF}.el-transfer-panel__item.el-checkbox .el-checkbox__label{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:24px;line-height:30px}.el-transfer-panel__item .el-checkbox__input{position:absolute;top:8px}.el-transfer-panel__filter{text-align:center;margin:15px;-webkit-box-sizing:border-box;box-sizing:border-box;display:block;width:auto}.el-transfer-panel__filter .el-input__inner{height:32px;width:100%;font-size:12px;display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:16px;padding-right:10px;padding-left:30px}.el-transfer-panel__filter .el-input__icon{margin-left:5px}.el-transfer-panel__filter .el-icon-circle-close{cursor:pointer}.el-transfer-panel .el-transfer-panel__header{height:40px;line-height:40px;background:#f5f7fa;margin:0;padding-left:15px;border-bottom:1px solid #EBEEF5;-webkit-box-sizing:border-box;box-sizing:border-box;color:#000}.el-transfer-panel .el-transfer-panel__header .el-checkbox{display:block;line-height:40px}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label{font-size:16px;color:#303133;font-weight:400}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label span{position:absolute;right:15px;color:#909399;font-size:12px;font-weight:400}.el-transfer-panel .el-transfer-panel__footer{height:40px;background:#FFF;margin:0;padding:0;border-top:1px solid #EBEEF5;position:absolute;bottom:0;left:0;width:100%;z-index:1}.el-transfer-panel .el-transfer-panel__footer::after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-container,.el-timeline-item__node{display:-webkit-box;display:-ms-flexbox}.el-transfer-panel .el-transfer-panel__footer .el-checkbox{padding-left:20px;color:#606266}.el-transfer-panel .el-transfer-panel__empty{margin:0;height:30px;line-height:30px;padding:6px 15px 0;color:#909399;text-align:center}.el-transfer-panel .el-checkbox__label{padding-left:8px}.el-transfer-panel .el-checkbox__inner{height:14px;width:14px;border-radius:3px}.el-transfer-panel .el-checkbox__inner::after{height:6px;width:3px;left:4px}.el-container{display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;-webkit-box-sizing:border-box;box-sizing:border-box;min-width:0}.el-container.is-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.el-header{padding:0 20px;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-aside{overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-main{display:block;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box;padding:20px}.el-footer{padding:0 20px;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-timeline{margin:0;list-style:none}.el-timeline .el-timeline-item:last-child .el-timeline-item__tail{display:none}.el-timeline-item{position:relative;padding-bottom:20px}.el-timeline-item__wrapper{position:relative;padding-left:28px;top:-3px}.el-timeline-item__tail{position:absolute;left:4px;height:100%;border-left:2px solid #E4E7ED}.el-timeline-item__icon{color:#FFF;font-size:13px}.el-timeline-item__node{position:absolute;background-color:#E4E7ED;border-radius:50%;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-timeline-item__node--normal{left:-1px;width:12px;height:12px}.el-timeline-item__node--large{left:-2px;width:14px;height:14px}.el-timeline-item__node--primary{background-color:#409EFF}.el-timeline-item__node--success{background-color:#67C23A}.el-timeline-item__node--warning{background-color:#E6A23C}.el-timeline-item__node--danger{background-color:#F56C6C}.el-timeline-item__node--info{background-color:#909399}.el-timeline-item__dot{position:absolute;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-timeline-item__content{color:#303133}.el-timeline-item__timestamp{color:#909399;line-height:1;font-size:13px}.el-timeline-item__timestamp.is-top{margin-bottom:8px;padding-top:4px}.el-timeline-item__timestamp.is-bottom{margin-top:8px} \ No newline at end of file diff --git a/usm-render/src/main/resources/static/libs/element-ui/index.js b/usm-render/src/main/resources/static/libs/element-ui/index.js new file mode 100644 index 0000000..7244330 --- /dev/null +++ b/usm-render/src/main/resources/static/libs/element-ui/index.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("vue")):"function"==typeof define&&define.amd?define("ELEMENT",["vue"],t):"object"==typeof exports?exports.ELEMENT=t(require("vue")):e.ELEMENT=t(e.Vue)}("undefined"!=typeof self?self:this,function(e){return function(e){var t={};function i(n){if(t[n])return t[n].exports;var s=t[n]={i:n,l:!1,exports:{}};return e[n].call(s.exports,s,s.exports,i),s.l=!0,s.exports}return i.m=e,i.c=t,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var s in e)i.d(n,s,function(t){return e[t]}.bind(null,s));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="/dist/",i(i.s=48)}([function(t,i){t.exports=e},function(e,t,i){var n=i(22);e.exports=function(e,t,i){return void 0===i?n(e,t,!1):n(e,i,!1!==t)}},function(e,t,i){"use strict";t.__esModule=!0;var n=o(i(64)),s=o(i(76)),r="function"==typeof s.default&&"symbol"==typeof n.default?function(e){return typeof e}:function(e){return e&&"function"==typeof s.default&&e.constructor===s.default&&e!==s.default.prototype?"symbol":typeof e};function o(e){return e&&e.__esModule?e:{default:e}}t.default="function"==typeof s.default&&"symbol"===r(n.default)?function(e){return void 0===e?"undefined":r(e)}:function(e){return e&&"function"==typeof s.default&&e.constructor===s.default&&e!==s.default.prototype?"symbol":void 0===e?"undefined":r(e)}},function(e,t){var i=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=i)},function(e,t){var i={}.hasOwnProperty;e.exports=function(e,t){return i.call(e,t)}},function(e,t,i){"use strict";t.__esModule=!0;var n,s=i(55),r=(n=s)&&n.__esModule?n:{default:n};t.default=r.default||function(e){for(var t=1;t3?0:(e-e%10!=10)*e%10]}};var g={D:function(e){return e.getDay()},DD:function(e){return d(e.getDay())},Do:function(e,t){return t.DoFn(e.getDate())},d:function(e){return e.getDate()},dd:function(e){return d(e.getDate())},ddd:function(e,t){return t.dayNamesShort[e.getDay()]},dddd:function(e,t){return t.dayNames[e.getDay()]},M:function(e){return e.getMonth()+1},MM:function(e){return d(e.getMonth()+1)},MMM:function(e,t){return t.monthNamesShort[e.getMonth()]},MMMM:function(e,t){return t.monthNames[e.getMonth()]},yy:function(e){return String(e.getFullYear()).substr(2)},yyyy:function(e){return e.getFullYear()},h:function(e){return e.getHours()%12||12},hh:function(e){return d(e.getHours()%12||12)},H:function(e){return e.getHours()},HH:function(e){return d(e.getHours())},m:function(e){return e.getMinutes()},mm:function(e){return d(e.getMinutes())},s:function(e){return e.getSeconds()},ss:function(e){return d(e.getSeconds())},S:function(e){return Math.round(e.getMilliseconds()/100)},SS:function(e){return d(Math.round(e.getMilliseconds()/10),2)},SSS:function(e){return d(e.getMilliseconds(),3)},a:function(e,t){return e.getHours()<12?t.amPm[0]:t.amPm[1]},A:function(e,t){return e.getHours()<12?t.amPm[0].toUpperCase():t.amPm[1].toUpperCase()},ZZ:function(e){var t=e.getTimezoneOffset();return(t>0?"-":"+")+d(100*Math.floor(Math.abs(t)/60)+Math.abs(t)%60,4)}},b={d:[a,function(e,t){e.day=t}],M:[a,function(e,t){e.month=t-1}],yy:[a,function(e,t){var i=+(""+(new Date).getFullYear()).substr(0,2);e.year=""+(t>68?i-1:i)+t}],h:[a,function(e,t){e.hour=t}],m:[a,function(e,t){e.minute=t}],s:[a,function(e,t){e.second=t}],yyyy:[/\d{4}/,function(e,t){e.year=t}],S:[/\d/,function(e,t){e.millisecond=100*t}],SS:[/\d{2}/,function(e,t){e.millisecond=10*t}],SSS:[/\d{3}/,function(e,t){e.millisecond=t}],D:[a,u],ddd:[l,u],MMM:[l,h("monthNamesShort")],MMMM:[l,h("monthNames")],a:[l,function(e,t,i){var n=t.toLowerCase();n===i.amPm[0]?e.isPm=!1:n===i.amPm[1]&&(e.isPm=!0)}],ZZ:[/[\+\-]\d\d:?\d\d/,function(e,t){var i,n=(t+"").match(/([\+\-]|\d\d)/gi);n&&(i=60*n[1]+parseInt(n[2],10),e.timezoneOffset="+"===n[0]?i:-i)}]};b.DD=b.D,b.dddd=b.ddd,b.Do=b.dd=b.d,b.mm=b.m,b.hh=b.H=b.HH=b.h,b.MM=b.M,b.ss=b.s,b.A=b.a,r.masks={default:"ddd MMM dd yyyy HH:mm:ss",shortDate:"M/D/yy",mediumDate:"MMM d, yyyy",longDate:"MMMM d, yyyy",fullDate:"dddd, MMMM d, yyyy",shortTime:"HH:mm",mediumTime:"HH:mm:ss",longTime:"HH:mm:ss.SSS"},r.format=function(e,t,i){var n=i||r.i18n;if("number"==typeof e&&(e=new Date(e)),"[object Date]"!==Object.prototype.toString.call(e)||isNaN(e.getTime()))throw new Error("Invalid Date in fecha.format");return(t=r.masks[t]||t||r.masks.default).replace(o,function(t){return t in g?g[t](e,n):t.slice(1,t.length-1)})},r.parse=function(e,t,i){var n=i||r.i18n;if("string"!=typeof t)throw new Error("Invalid format in fecha.parse");if(t=r.masks[t]||t,e.length>1e3)return!1;var s=!0,a={};if(t.replace(o,function(t){if(b[t]){var i=b[t],r=e.search(i[0]);~r?e.replace(i[0],function(t){return i[1](a,t,n),e=e.substr(r+t.length),t}):s=!1}return b[t]?"":t.slice(1,t.length-1)}),!s)return!1;var l,u=new Date;return!0===a.isPm&&null!=a.hour&&12!=+a.hour?a.hour=+a.hour+12:!1===a.isPm&&12==+a.hour&&(a.hour=0),null!=a.timezoneOffset?(a.minute=+(a.minute||0)-+a.timezoneOffset,l=new Date(Date.UTC(a.year||u.getFullYear(),a.month||0,a.day||1,a.hour||0,a.minute||0,a.second||0,a.millisecond||0))):l=new Date(a.year||u.getFullYear(),a.month||0,a.day||1,a.hour||0,a.minute||0,a.second||0,a.millisecond||0),l},e.exports?e.exports=r:void 0===(n=function(){return r}.call(t,i,t,e))||(e.exports=n)}()},function(e,t,i){var n=i(12);e.exports=function(e){if(!n(e))throw TypeError(e+" is not an object!");return e}},function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t,i){var n=i(37),s=i(29);e.exports=Object.keys||function(e){return n(e,s)}},function(e,t){e.exports=!0},function(e,t){var i=0,n=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++i+n).toString(36))}},function(e,t){t.f={}.propertyIsEnumerable},function(e,t){e.exports=function(e,t,i,n){var s,r=0;return"boolean"!=typeof t&&(n=i,i=t,t=void 0),function(){var o=this,a=Number(new Date)-r,l=arguments;function u(){r=Number(new Date),i.apply(o,l)}n&&!s&&u(),s&&clearTimeout(s),void 0===n&&a>e?u():!0!==t&&(s=setTimeout(n?function(){s=void 0}:u,void 0===n?e-a:e))}}},function(e,t,i){var n=i(3),s=i(11),r=i(58),o=i(6),a=i(4),l=function(e,t,i){var u,c,h,d=e&l.F,p=e&l.G,f=e&l.S,m=e&l.P,v=e&l.B,g=e&l.W,b=p?s:s[t]||(s[t]={}),y=b.prototype,_=p?n:f?n[t]:(n[t]||{}).prototype;for(u in p&&(i=t),i)(c=!d&&_&&void 0!==_[u])&&a(b,u)||(h=c?_[u]:i[u],b[u]=p&&"function"!=typeof _[u]?i[u]:v&&c?r(h,n):g&&_[u]==h?function(e){var t=function(t,i,n){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,i)}return new e(t,i,n)}return e.apply(this,arguments)};return t.prototype=e.prototype,t}(h):m&&"function"==typeof h?r(Function.call,h):h,m&&((b.virtual||(b.virtual={}))[u]=h,e&l.R&&y&&!y[u]&&o(y,u,h)))};l.F=1,l.G=2,l.S=4,l.P=8,l.B=16,l.W=32,l.U=64,l.R=128,e.exports=l},function(e,t,i){var n=i(12);e.exports=function(e,t){if(!n(e))return e;var i,s;if(t&&"function"==typeof(i=e.toString)&&!n(s=i.call(e)))return s;if("function"==typeof(i=e.valueOf)&&!n(s=i.call(e)))return s;if(!t&&"function"==typeof(i=e.toString)&&!n(s=i.call(e)))return s;throw TypeError("Can't convert object to primitive value")}},function(e,t){e.exports=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e}},function(e,t){var i=Math.ceil,n=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?n:i)(e)}},function(e,t,i){var n=i(28)("keys"),s=i(20);e.exports=function(e){return n[e]||(n[e]=s(e))}},function(e,t,i){var n=i(11),s=i(3),r=s["__core-js_shared__"]||(s["__core-js_shared__"]={});(e.exports=function(e,t){return r[e]||(r[e]=void 0!==t?t:{})})("versions",[]).push({version:n.version,mode:i(19)?"pure":"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})},function(e,t){e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(e,t){t.f=Object.getOwnPropertySymbols},function(e,t){e.exports={}},function(e,t,i){var n=i(7).f,s=i(4),r=i(10)("toStringTag");e.exports=function(e,t,i){e&&!s(e=i?e:e.prototype,r)&&n(e,r,{configurable:!0,value:t})}},function(e,t,i){t.f=i(10)},function(e,t,i){var n=i(3),s=i(11),r=i(19),o=i(33),a=i(7).f;e.exports=function(e){var t=s.Symbol||(s.Symbol=r?{}:n.Symbol||{});"_"==e.charAt(0)||e in t||a(t,e,{value:o.f(e)})}},function(e,t,i){e.exports=!i(8)&&!i(13)(function(){return 7!=Object.defineProperty(i(36)("div"),"a",{get:function(){return 7}}).a})},function(e,t,i){var n=i(12),s=i(3).document,r=n(s)&&n(s.createElement);e.exports=function(e){return r?s.createElement(e):{}}},function(e,t,i){var n=i(4),s=i(9),r=i(61)(!1),o=i(27)("IE_PROTO");e.exports=function(e,t){var i,a=s(e),l=0,u=[];for(i in a)i!=o&&n(a,i)&&u.push(i);for(;t.length>l;)n(a,i=t[l++])&&(~r(u,i)||u.push(i));return u}},function(e,t,i){var n=i(39);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==n(e)?e.split(""):Object(e)}},function(e,t){var i={}.toString;e.exports=function(e){return i.call(e).slice(8,-1)}},function(e,t,i){var n=i(25);e.exports=function(e){return Object(n(e))}},function(e,t,i){"use strict";var n=i(19),s=i(23),r=i(42),o=i(6),a=i(31),l=i(68),u=i(32),c=i(71),h=i(10)("iterator"),d=!([].keys&&"next"in[].keys()),p=function(){return this};e.exports=function(e,t,i,f,m,v,g){l(i,t,f);var b,y,_,w=function(e){if(!d&&e in S)return S[e];switch(e){case"keys":case"values":return function(){return new i(this,e)}}return function(){return new i(this,e)}},x=t+" Iterator",C="values"==m,k=!1,S=e.prototype,$=S[h]||S["@@iterator"]||m&&S[m],E=$||w(m),D=m?C?w("entries"):E:void 0,T="Array"==t&&S.entries||$;if(T&&(_=c(T.call(new e)))!==Object.prototype&&_.next&&(u(_,x,!0),n||"function"==typeof _[h]||o(_,h,p)),C&&$&&"values"!==$.name&&(k=!0,E=function(){return $.call(this)}),n&&!g||!d&&!k&&S[h]||o(S,h,E),a[t]=E,a[x]=p,m)if(b={values:C?E:w("values"),keys:v?E:w("keys"),entries:D},g)for(y in b)y in S||r(S,y,b[y]);else s(s.P+s.F*(d||k),t,b);return b}},function(e,t,i){e.exports=i(6)},function(e,t,i){var n=i(16),s=i(69),r=i(29),o=i(27)("IE_PROTO"),a=function(){},l=function(){var e,t=i(36)("iframe"),n=r.length;for(t.style.display="none",i(70).appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("