Browse Source

初始化

jiayi 1 năm trước cách đây
mục cha
commit
e96f07dce3
100 tập tin đã thay đổi với 5144 bổ sung0 xóa
  1. 33 0
      .gitignore
  2. 310 0
      mvnw
  3. 182 0
      mvnw.cmd
  4. 374 0
      pom.xml
  5. BIN
      server.keystore
  6. 14 0
      src/main/java/com/zhou/SpringBootStartApplication.java
  7. 58 0
      src/main/java/com/zhou/SpringbootSsoLoginApplication.java
  8. 75 0
      src/main/java/com/zhou/actor/LocalActor.java
  9. 734 0
      src/main/java/com/zhou/controller/CloudOutboundController.java
  10. 200 0
      src/main/java/com/zhou/controller/HttpInterfacController.java
  11. 695 0
      src/main/java/com/zhou/controller/IndexController.java
  12. 563 0
      src/main/java/com/zhou/controller/SsoLogController.java
  13. 51 0
      src/main/java/com/zhou/mapper/CloudOutboundMapper.java
  14. 16 0
      src/main/java/com/zhou/mapper/HttpInterfaceMapper.java
  15. 26 0
      src/main/java/com/zhou/mapper/SsoLogDownloadMapper.java
  16. 32 0
      src/main/java/com/zhou/mapper/SsoLogMapper.java
  17. 53 0
      src/main/java/com/zhou/mapper/UsersMapper.java
  18. 34 0
      src/main/java/com/zhou/pojo/CloudOutbound.java
  19. 36 0
      src/main/java/com/zhou/pojo/CloudOutboundDTO.java
  20. 34 0
      src/main/java/com/zhou/pojo/CloudOutboundVo.java
  21. 13 0
      src/main/java/com/zhou/pojo/HttpInterface.java
  22. 37 0
      src/main/java/com/zhou/pojo/SsoLog.java
  23. 22 0
      src/main/java/com/zhou/pojo/SsoLogDTO.java
  24. 35 0
      src/main/java/com/zhou/pojo/SsoLogDownload.java
  25. 20 0
      src/main/java/com/zhou/pojo/SsoLogVo.java
  26. 22 0
      src/main/java/com/zhou/pojo/Users.java
  27. 25 0
      src/main/java/com/zhou/pojo/UsersDTO.java
  28. 23 0
      src/main/java/com/zhou/pojo/UsersVo.java
  29. 59 0
      src/main/java/com/zhou/tools/CryptorTest.java
  30. 46 0
      src/main/java/com/zhou/tools/CusAccessObjectUtil.java
  31. 148 0
      src/main/java/com/zhou/tools/DesUtils.java
  32. 111 0
      src/main/java/com/zhou/tools/FileURL.java
  33. 26 0
      src/main/java/com/zhou/tools/GlobalExceptionHandler.java
  34. 67 0
      src/main/java/com/zhou/tools/HttpClientUtil.java
  35. 22 0
      src/main/java/com/zhou/tools/IPUtil.java
  36. 49 0
      src/main/java/com/zhou/tools/MDCFilter.java
  37. 38 0
      src/main/java/com/zhou/tools/MsgUtil.java
  38. 24 0
      src/main/java/com/zhou/tools/PageHelperConfig.java
  39. 17 0
      src/main/java/com/zhou/tools/Parameter.java
  40. 69 0
      src/main/java/com/zhou/tools/PostHttp.java
  41. 87 0
      src/main/java/com/zhou/tools/SSLClient.java
  42. 35 0
      src/main/java/com/zhou/tools/StringUtil.java
  43. 105 0
      src/main/java/com/zhou/tools/tokens/AuthenticationInterceptor.java
  44. 38 0
      src/main/java/com/zhou/tools/tokens/CheckToken.java
  45. 77 0
      src/main/java/com/zhou/tools/tokens/IFToken.java
  46. 28 0
      src/main/java/com/zhou/tools/tokens/InterceptorConfig.java
  47. 35 0
      src/main/java/com/zhou/tools/tokens/PassToken.java
  48. 28 0
      src/main/java/com/zhou/tools/tokens/Token.java
  49. 40 0
      src/main/resources/application-CX.properties
  50. 42 0
      src/main/resources/application-dev.properties
  51. 42 0
      src/main/resources/application-pre.properties
  52. 42 0
      src/main/resources/application-prod.properties
  53. 40 0
      src/main/resources/application-test.properties
  54. 1 0
      src/main/resources/application.properties
  55. 1 0
      src/main/resources/fastjson.properties
  56. 91 0
      src/main/resources/logback.xml
  57. 12 0
      src/main/resources/static/env.html
  58. BIN
      src/main/resources/static/favicon.ico
  59. 0 0
      src/main/resources/static/index.html
  60. 0 0
      src/main/resources/static/static/css/app.04d0714f.css
  61. 0 0
      src/main/resources/static/static/css/app.155f5e05.css
  62. 0 0
      src/main/resources/static/static/css/app.4c39496f.css
  63. 0 0
      src/main/resources/static/static/css/chunk-003ceb06.0175c2f8.css
  64. 1 0
      src/main/resources/static/static/css/chunk-1ae2e04c.f59b1a74.css
  65. 0 0
      src/main/resources/static/static/css/chunk-369c9565.6a68d3f6.css
  66. 1 0
      src/main/resources/static/static/css/chunk-4ee2b43f.444c6587.css
  67. 0 0
      src/main/resources/static/static/css/chunk-57dc6a22.16365d9a.css
  68. 0 0
      src/main/resources/static/static/css/chunk-76cea4de.3c7f5ad9.css
  69. 0 0
      src/main/resources/static/static/css/chunk-79d1aace.5c78958d.css
  70. 1 0
      src/main/resources/static/static/css/chunk-988ebb7e.cb847a1d.css
  71. 0 0
      src/main/resources/static/static/css/chunk-e61ab9a6.7cc87bfd.css
  72. 0 0
      src/main/resources/static/static/css/chunk-elementUI.68c70ad5.css
  73. 0 0
      src/main/resources/static/static/css/chunk-ffc75ee0.879774b2.css
  74. 0 0
      src/main/resources/static/static/css/chunk-libs.3dfb7769.css
  75. BIN
      src/main/resources/static/static/fonts/element-icons.535877f5.woff
  76. BIN
      src/main/resources/static/static/fonts/element-icons.732389de.ttf
  77. BIN
      src/main/resources/static/static/img/404.a57b6f31.png
  78. BIN
      src/main/resources/static/static/img/404_cloud.0f4bc32b.png
  79. BIN
      src/main/resources/static/static/img/header2.9eb99c90.png
  80. BIN
      src/main/resources/static/static/img/logo3.d1b89e15.png
  81. BIN
      src/main/resources/static/static/img/main-bottom.6d3547d4.jpg
  82. BIN
      src/main/resources/static/static/img/main-top.e659a075.jpg
  83. BIN
      src/main/resources/static/static/img/portal.e07c145a.jpg
  84. BIN
      src/main/resources/static/static/img/sa.576f02fe.png
  85. 0 0
      src/main/resources/static/static/js/app.687ef117.js
  86. 0 0
      src/main/resources/static/static/js/app.83943732.js
  87. 0 0
      src/main/resources/static/static/js/app.c18355f9.js
  88. 0 0
      src/main/resources/static/static/js/app.c66e7b63.js
  89. 0 0
      src/main/resources/static/static/js/app.cb9738a3.js
  90. 0 0
      src/main/resources/static/static/js/app.f4296409.js
  91. 0 0
      src/main/resources/static/static/js/chunk-003ceb06.9f6d46d5.js
  92. 4 0
      src/main/resources/static/static/js/chunk-05d0609c.a09ab631.js
  93. 0 0
      src/main/resources/static/static/js/chunk-1ae2e04c.3c2faccc.js
  94. 0 0
      src/main/resources/static/static/js/chunk-1ae2e04c.703319ce.js
  95. 0 0
      src/main/resources/static/static/js/chunk-1ae2e04c.acd44047.js
  96. 0 0
      src/main/resources/static/static/js/chunk-369c9565.10d92217.js
  97. 0 0
      src/main/resources/static/static/js/chunk-369c9565.61ef6f4b.js
  98. 0 0
      src/main/resources/static/static/js/chunk-369c9565.f3989bd4.js
  99. 0 0
      src/main/resources/static/static/js/chunk-4ee2b43f.4de1ff4b.js
  100. 0 0
      src/main/resources/static/static/js/chunk-4ee2b43f.b0f5d21c.js

+ 33 - 0
.gitignore

@@ -0,0 +1,33 @@
+HELP.md
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/

+ 310 - 0
mvnw

@@ -0,0 +1,310 @@
+#!/bin/sh
+# ----------------------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#    https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+# ----------------------------------------------------------------------------
+
+# ----------------------------------------------------------------------------
+# Maven Start Up Batch script
+#
+# Required ENV vars:
+# ------------------
+#   JAVA_HOME - location of a JDK home dir
+#
+# Optional ENV vars
+# -----------------
+#   M2_HOME - location of maven2's installed home dir
+#   MAVEN_OPTS - parameters passed to the Java VM when running Maven
+#     e.g. to debug Maven itself, use
+#       set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+#   MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+# ----------------------------------------------------------------------------
+
+if [ -z "$MAVEN_SKIP_RC" ] ; then
+
+  if [ -f /etc/mavenrc ] ; then
+    . /etc/mavenrc
+  fi
+
+  if [ -f "$HOME/.mavenrc" ] ; then
+    . "$HOME/.mavenrc"
+  fi
+
+fi
+
+# OS specific support.  $var _must_ be set to either true or false.
+cygwin=false;
+darwin=false;
+mingw=false
+case "`uname`" in
+  CYGWIN*) cygwin=true ;;
+  MINGW*) mingw=true;;
+  Darwin*) darwin=true
+    # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
+    # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
+    if [ -z "$JAVA_HOME" ]; then
+      if [ -x "/usr/libexec/java_home" ]; then
+        export JAVA_HOME="`/usr/libexec/java_home`"
+      else
+        export JAVA_HOME="/Library/Java/Home"
+      fi
+    fi
+    ;;
+esac
+
+if [ -z "$JAVA_HOME" ] ; then
+  if [ -r /etc/gentoo-release ] ; then
+    JAVA_HOME=`java-config --jre-home`
+  fi
+fi
+
+if [ -z "$M2_HOME" ] ; then
+  ## resolve links - $0 may be a link to maven's home
+  PRG="$0"
+
+  # need this for relative symlinks
+  while [ -h "$PRG" ] ; do
+    ls=`ls -ld "$PRG"`
+    link=`expr "$ls" : '.*-> \(.*\)$'`
+    if expr "$link" : '/.*' > /dev/null; then
+      PRG="$link"
+    else
+      PRG="`dirname "$PRG"`/$link"
+    fi
+  done
+
+  saveddir=`pwd`
+
+  M2_HOME=`dirname "$PRG"`/..
+
+  # make it fully qualified
+  M2_HOME=`cd "$M2_HOME" && pwd`
+
+  cd "$saveddir"
+  # echo Using m2 at $M2_HOME
+fi
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched
+if $cygwin ; then
+  [ -n "$M2_HOME" ] &&
+    M2_HOME=`cygpath --unix "$M2_HOME"`
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+  [ -n "$CLASSPATH" ] &&
+    CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
+fi
+
+# For Mingw, ensure paths are in UNIX format before anything is touched
+if $mingw ; then
+  [ -n "$M2_HOME" ] &&
+    M2_HOME="`(cd "$M2_HOME"; pwd)`"
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
+fi
+
+if [ -z "$JAVA_HOME" ]; then
+  javaExecutable="`which javac`"
+  if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
+    # readlink(1) is not available as standard on Solaris 10.
+    readLink=`which readlink`
+    if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
+      if $darwin ; then
+        javaHome="`dirname \"$javaExecutable\"`"
+        javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
+      else
+        javaExecutable="`readlink -f \"$javaExecutable\"`"
+      fi
+      javaHome="`dirname \"$javaExecutable\"`"
+      javaHome=`expr "$javaHome" : '\(.*\)/bin'`
+      JAVA_HOME="$javaHome"
+      export JAVA_HOME
+    fi
+  fi
+fi
+
+if [ -z "$JAVACMD" ] ; then
+  if [ -n "$JAVA_HOME"  ] ; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+      # IBM's JDK on AIX uses strange locations for the executables
+      JAVACMD="$JAVA_HOME/jre/sh/java"
+    else
+      JAVACMD="$JAVA_HOME/bin/java"
+    fi
+  else
+    JAVACMD="`which java`"
+  fi
+fi
+
+if [ ! -x "$JAVACMD" ] ; then
+  echo "Error: JAVA_HOME is not defined correctly." >&2
+  echo "  We cannot execute $JAVACMD" >&2
+  exit 1
+fi
+
+if [ -z "$JAVA_HOME" ] ; then
+  echo "Warning: JAVA_HOME environment variable is not set."
+fi
+
+CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
+
+# traverses directory structure from process work directory to filesystem root
+# first directory with .mvn subdirectory is considered project base directory
+find_maven_basedir() {
+
+  if [ -z "$1" ]
+  then
+    echo "Path not specified to find_maven_basedir"
+    return 1
+  fi
+
+  basedir="$1"
+  wdir="$1"
+  while [ "$wdir" != '/' ] ; do
+    if [ -d "$wdir"/.mvn ] ; then
+      basedir=$wdir
+      break
+    fi
+    # workaround for JBEAP-8937 (on Solaris 10/Sparc)
+    if [ -d "${wdir}" ]; then
+      wdir=`cd "$wdir/.."; pwd`
+    fi
+    # end of workaround
+  done
+  echo "${basedir}"
+}
+
+# concatenates all lines of a file
+concat_lines() {
+  if [ -f "$1" ]; then
+    echo "$(tr -s '\n' ' ' < "$1")"
+  fi
+}
+
+BASE_DIR=`find_maven_basedir "$(pwd)"`
+if [ -z "$BASE_DIR" ]; then
+  exit 1;
+fi
+
+##########################################################################################
+# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
+# This allows using the maven wrapper in projects that prohibit checking in binary data.
+##########################################################################################
+if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
+    if [ "$MVNW_VERBOSE" = true ]; then
+      echo "Found .mvn/wrapper/maven-wrapper.jar"
+    fi
+else
+    if [ "$MVNW_VERBOSE" = true ]; then
+      echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
+    fi
+    if [ -n "$MVNW_REPOURL" ]; then
+      jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
+    else
+      jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
+    fi
+    while IFS="=" read key value; do
+      case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
+      esac
+    done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
+    if [ "$MVNW_VERBOSE" = true ]; then
+      echo "Downloading from: $jarUrl"
+    fi
+    wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
+    if $cygwin; then
+      wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"`
+    fi
+
+    if command -v wget > /dev/null; then
+        if [ "$MVNW_VERBOSE" = true ]; then
+          echo "Found wget ... using wget"
+        fi
+        if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
+            wget "$jarUrl" -O "$wrapperJarPath"
+        else
+            wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath"
+        fi
+    elif command -v curl > /dev/null; then
+        if [ "$MVNW_VERBOSE" = true ]; then
+          echo "Found curl ... using curl"
+        fi
+        if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
+            curl -o "$wrapperJarPath" "$jarUrl" -f
+        else
+            curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f
+        fi
+
+    else
+        if [ "$MVNW_VERBOSE" = true ]; then
+          echo "Falling back to using Java to download"
+        fi
+        javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
+        # For Cygwin, switch paths to Windows format before running javac
+        if $cygwin; then
+          javaClass=`cygpath --path --windows "$javaClass"`
+        fi
+        if [ -e "$javaClass" ]; then
+            if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
+                if [ "$MVNW_VERBOSE" = true ]; then
+                  echo " - Compiling MavenWrapperDownloader.java ..."
+                fi
+                # Compiling the Java class
+                ("$JAVA_HOME/bin/javac" "$javaClass")
+            fi
+            if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
+                # Running the downloader
+                if [ "$MVNW_VERBOSE" = true ]; then
+                  echo " - Running MavenWrapperDownloader.java ..."
+                fi
+                ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
+            fi
+        fi
+    fi
+fi
+##########################################################################################
+# End of extension
+##########################################################################################
+
+export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
+if [ "$MVNW_VERBOSE" = true ]; then
+  echo $MAVEN_PROJECTBASEDIR
+fi
+MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin; then
+  [ -n "$M2_HOME" ] &&
+    M2_HOME=`cygpath --path --windows "$M2_HOME"`
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
+  [ -n "$CLASSPATH" ] &&
+    CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
+  [ -n "$MAVEN_PROJECTBASEDIR" ] &&
+    MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
+fi
+
+# Provide a "standardized" way to retrieve the CLI args that will
+# work with both Windows and non-Windows executions.
+MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
+export MAVEN_CMD_LINE_ARGS
+
+WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+exec "$JAVACMD" \
+  $MAVEN_OPTS \
+  -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
+  "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
+  ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"

+ 182 - 0
mvnw.cmd

@@ -0,0 +1,182 @@
+@REM ----------------------------------------------------------------------------
+@REM Licensed to the Apache Software Foundation (ASF) under one
+@REM or more contributor license agreements.  See the NOTICE file
+@REM distributed with this work for additional information
+@REM regarding copyright ownership.  The ASF licenses this file
+@REM to you under the Apache License, Version 2.0 (the
+@REM "License"); you may not use this file except in compliance
+@REM with the License.  You may obtain a copy of the License at
+@REM
+@REM    https://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing,
+@REM software distributed under the License is distributed on an
+@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+@REM KIND, either express or implied.  See the License for the
+@REM specific language governing permissions and limitations
+@REM under the License.
+@REM ----------------------------------------------------------------------------
+
+@REM ----------------------------------------------------------------------------
+@REM Maven Start Up Batch script
+@REM
+@REM Required ENV vars:
+@REM JAVA_HOME - location of a JDK home dir
+@REM
+@REM Optional ENV vars
+@REM M2_HOME - location of maven2's installed home dir
+@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
+@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
+@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
+@REM     e.g. to debug Maven itself, use
+@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+@REM ----------------------------------------------------------------------------
+
+@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
+@echo off
+@REM set title of command window
+title %0
+@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
+@if "%MAVEN_BATCH_ECHO%" == "on"  echo %MAVEN_BATCH_ECHO%
+
+@REM set %HOME% to equivalent of $HOME
+if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
+
+@REM Execute a user defined script before this one
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
+@REM check for pre script, once with legacy .bat ending and once with .cmd ending
+if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
+if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
+:skipRcPre
+
+@setlocal
+
+set ERROR_CODE=0
+
+@REM To isolate internal variables from possible post scripts, we use another setlocal
+@setlocal
+
+@REM ==== START VALIDATION ====
+if not "%JAVA_HOME%" == "" goto OkJHome
+
+echo.
+echo Error: JAVA_HOME not found in your environment. >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+:OkJHome
+if exist "%JAVA_HOME%\bin\java.exe" goto init
+
+echo.
+echo Error: JAVA_HOME is set to an invalid directory. >&2
+echo JAVA_HOME = "%JAVA_HOME%" >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+@REM ==== END VALIDATION ====
+
+:init
+
+@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
+@REM Fallback to current working directory if not found.
+
+set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
+IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
+
+set EXEC_DIR=%CD%
+set WDIR=%EXEC_DIR%
+:findBaseDir
+IF EXIST "%WDIR%"\.mvn goto baseDirFound
+cd ..
+IF "%WDIR%"=="%CD%" goto baseDirNotFound
+set WDIR=%CD%
+goto findBaseDir
+
+:baseDirFound
+set MAVEN_PROJECTBASEDIR=%WDIR%
+cd "%EXEC_DIR%"
+goto endDetectBaseDir
+
+:baseDirNotFound
+set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
+cd "%EXEC_DIR%"
+
+:endDetectBaseDir
+
+IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
+
+@setlocal EnableExtensions EnableDelayedExpansion
+for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
+@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
+
+:endReadAdditionalConfig
+
+SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
+set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
+set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
+
+FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
+    IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
+)
+
+@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
+@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
+if exist %WRAPPER_JAR% (
+    if "%MVNW_VERBOSE%" == "true" (
+        echo Found %WRAPPER_JAR%
+    )
+) else (
+    if not "%MVNW_REPOURL%" == "" (
+        SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
+    )
+    if "%MVNW_VERBOSE%" == "true" (
+        echo Couldn't find %WRAPPER_JAR%, downloading it ...
+        echo Downloading from: %DOWNLOAD_URL%
+    )
+
+    powershell -Command "&{"^
+		"$webclient = new-object System.Net.WebClient;"^
+		"if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
+		"$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
+		"}"^
+		"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^
+		"}"
+    if "%MVNW_VERBOSE%" == "true" (
+        echo Finished downloading %WRAPPER_JAR%
+    )
+)
+@REM End of extension
+
+@REM Provide a "standardized" way to retrieve the CLI args that will
+@REM work with both Windows and non-Windows executions.
+set MAVEN_CMD_LINE_ARGS=%*
+
+%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
+if ERRORLEVEL 1 goto error
+goto end
+
+:error
+set ERROR_CODE=1
+
+:end
+@endlocal & set ERROR_CODE=%ERROR_CODE%
+
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
+@REM check for post script, once with legacy .bat ending and once with .cmd ending
+if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
+if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
+:skipRcPost
+
+@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
+if "%MAVEN_BATCH_PAUSE%" == "on" pause
+
+if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
+
+exit /B %ERROR_CODE%

+ 374 - 0
pom.xml

@@ -0,0 +1,374 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<groupId>org.springframework.boot</groupId>
+		<artifactId>spring-boot-starter-parent</artifactId>
+		<version>2.2.11.RELEASE</version>
+		<relativePath/>
+		<!--  lookup parent from repository  -->
+	</parent>
+	<groupId>com.lee</groupId>
+	<artifactId>springboot-sso-login</artifactId>
+	<version>0.0.1-SNAPSHOT</version>
+	<!--<packaging>war</packaging>-->
+	<name>springboot-sso-login</name>
+	<description>Demo project for Spring Boot</description>
+	<properties>
+		<java.version>1.8</java.version>
+		<tomcat.version>9.0.63</tomcat.version>
+		<log4j2.version>2.17.2</log4j2.version>
+	</properties>
+
+	<dependencies>
+		<!--&lt;!&ndash; 添加依赖 &#45;&#45;!>-->
+		<dependency>
+    		<groupId>org.apache.tomcat.embed</groupId>
+    		<artifactId>tomcat-embed-core</artifactId>
+    		<version>${tomcat.version}</version>
+		</dependency>
+		<!--MyBatis核心依赖-->
+		<!--<dependency>
+			<groupId>org.mybatis</groupId>
+			<artifactId>mybatis</artifactId>
+			<version>3.4.6</version>
+		</dependency>-->
+		<dependency>
+    		<groupId>org.apache.tomcat</groupId>
+    		<artifactId>tomcat-juli</artifactId>
+    		<version>${tomcat.version}</version>
+		</dependency>
+
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-web</artifactId>
+			  <exclusions>
+                 <exclusion>
+                     <groupId>org.springframework.boot</groupId>
+					 <artifactId>spring-boot-starter-tomcat</artifactId>
+                 </exclusion>
+              </exclusions>
+		</dependency>
+
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-thymeleaf</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.projectlombok</groupId>
+			<artifactId>lombok</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.mybatis.spring.boot</groupId>
+			<artifactId>mybatis-spring-boot-starter</artifactId>
+			<version>2.0.1</version>
+		</dependency>
+
+		<!-- <dependency>D
+                    <groupId>org.springframework.boot</groupId>
+                    <artifactId>spring-boot-devtools</artifactId>
+                    &lt;!&ndash;<scope>runtime</scope>
+                    <optional>true</optional>&ndash;&gt;
+            </dependency> -->
+		<dependency>
+			<groupId>mysql</groupId>
+			<artifactId>mysql-connector-java</artifactId>
+			<scope>runtime</scope>
+		</dependency>
+		<!--  tomcat的支持. -->
+		<dependency>
+			<groupId>org.apache.tomcat.embed</groupId>
+			<artifactId>tomcat-embed-jasper</artifactId>
+		</dependency>
+		<!--  pageHelper  用于分页  -->
+		<dependency>
+			<groupId>com.github.pagehelper</groupId>
+			<artifactId>pagehelper</artifactId>
+			<version>5.3.0</version>
+		</dependency>
+		<dependency>
+			<groupId>com.github.pagehelper</groupId>
+			<artifactId>pagehelper-spring-boot-starter</artifactId>
+			<version>1.3.0</version>
+		</dependency>
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<version>4.12</version>
+		</dependency>
+		<!--<dependency>
+			<groupId>com.alibaba</groupId>
+			<artifactId>fastjson</artifactId>
+			<version>2.0.1</version>
+		</dependency>-->
+		<dependency>
+			<groupId>com.alibaba</groupId>
+			<artifactId>fastjson</artifactId>
+			<version>1.2.83</version>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-test</artifactId>
+			<scope>test</scope>
+			<exclusions>
+				<exclusion>
+					<groupId>org.junit.vintage</groupId>
+					<artifactId>junit-vintage-engine</artifactId>
+				</exclusion>
+			</exclusions>
+		</dependency>
+		<dependency>
+			<groupId>javax.servlet</groupId>
+			<artifactId>javax.servlet-api</artifactId>
+			<version>3.1.0</version>
+		</dependency>
+		<dependency>
+			<groupId>javax.servlet</groupId>
+			<artifactId>jstl</artifactId>
+			<version>1.2</version>
+		</dependency>
+
+		<!--南航私有jar包-->
+		<dependency>
+			<groupId>com.trs.idm.client</groupId>
+			<artifactId>trsids-filter</artifactId>
+			<version>1.0</version>
+		</dependency>
+
+		<!--南航私有jar包-->
+		<dependency>
+			<groupId>com.trs.idm</groupId>
+			<artifactId>trsids-agent</artifactId>
+			<version>1.0</version>
+		</dependency>
+		<!-- <dependency>
+                    <groupId>commons-codec</groupId>
+                    <artifactId>commons-codec</artifactId>
+                    <version>1.3</version>
+                </dependency> -->
+		<dependency>
+			<groupId>commons-codec</groupId>
+			<artifactId>commons-codec</artifactId>
+			<version>1.10</version>
+		</dependency>
+		<!--  验证网络请求  -->
+		<dependency>
+			<groupId>commons-httpclient</groupId>
+			<artifactId>commons-httpclient</artifactId>
+			<version>3.1</version>
+		</dependency>
+
+		<!--<dependency>
+			<groupId>log4j</groupId>
+			<artifactId>log4j</artifactId>
+			<version>1.2.17</version>
+		</dependency>-->
+		<dependency>
+			<groupId>org.projectlombok</groupId>
+			<artifactId>lombok</artifactId>
+			<version>1.16.20</version>
+		</dependency>
+		<dependency>
+			<groupId>org.slf4j</groupId>
+			<artifactId>slf4j-api</artifactId>
+			<version>1.7.26</version>
+		</dependency>
+		<dependency>
+			<groupId>org.slf4j</groupId>
+			<artifactId>log4j-over-slf4j</artifactId>
+			<version>1.7.26</version>
+		</dependency>
+
+		<dependency>
+			<groupId>ch.qos.logback</groupId>
+			<artifactId>logback-core</artifactId>
+			<version>1.2.3</version>
+		</dependency>
+
+
+		<dependency>
+			<groupId>ch.qos.logback</groupId>
+			<artifactId>logback-classic</artifactId>
+			<version>1.2.3</version>
+		</dependency>
+
+		<!-- junit 单元测试 -->
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<version>4.12</version>
+		</dependency>
+
+		<dependency>
+			<groupId>commons-logging</groupId>
+			<artifactId>commons-logging</artifactId>
+			<version>1.2</version>
+		</dependency>
+		<dependency>
+			<groupId>jaxen</groupId>
+			<artifactId>jaxen</artifactId>
+			<version>1.1.6</version>
+		</dependency>
+		<dependency>
+			<groupId>org.dom4j</groupId>
+			<artifactId>dom4j</artifactId>
+			<version>2.1.3</version>
+		</dependency>
+		<!--  http  -->
+		<dependency>
+			<groupId>org.apache.httpcomponents</groupId>
+			<artifactId>httpclient</artifactId>
+			<version>4.5.2</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.httpcomponents</groupId>
+			<artifactId>httpcore</artifactId>
+			<version>4.4.4</version>
+		</dependency>
+
+		<dependency>
+			<groupId>org.apache.poi</groupId>
+			<artifactId>poi</artifactId>
+			<version>4.1.2</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.poi</groupId>
+			<artifactId>poi-ooxml</artifactId>
+			<version>4.1.2</version>
+		</dependency>
+		<!-- <dependency>
+                    <groupId>org.apache.commons</groupId>
+                    <artifactId>commons-lang3</artifactId>
+                    <version>2.6</version>
+                </dependency> -->
+		<dependency>
+			<groupId>cglib</groupId>
+			<artifactId>cglib</artifactId>
+			<version>3.1</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.commons</groupId>
+			<artifactId>commons-collections4</artifactId>
+			<version>4.1</version>
+		</dependency>
+		<dependency>
+			<groupId>commons-lang</groupId>
+			<artifactId>commons-lang</artifactId>
+			<version>2.4</version>
+		</dependency>
+		<dependency>
+			<groupId>com.github.jsqlparser</groupId>
+			<artifactId>jsqlparser</artifactId>
+			<version>3.1</version>
+		</dependency>
+		<dependency>
+			<groupId>com.alibaba</groupId>
+			<artifactId>easyexcel</artifactId>
+			<version>2.2.3</version>
+		</dependency>
+		<dependency>
+			<groupId>org.codehaus.jettison</groupId>
+			<artifactId>jettison</artifactId>
+			<version>1.3.7</version>
+		</dependency>
+		<dependency>
+			<groupId>com.auth0</groupId>
+			<artifactId>java-jwt</artifactId>
+			<version>3.4.0</version>
+		</dependency>
+		<dependency>
+			<groupId>net.logstash.logback</groupId>
+			<artifactId>logstash-logback-encoder</artifactId>
+			<version>4.11</version>
+		</dependency>
+		<!--<dependency>
+			<groupId>com.github.ulisesbocchio</groupId>
+			<artifactId>jasypt-spring-boot-starter</artifactId>
+			<version>1.8</version>
+		</dependency>-->
+
+	</dependencies>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.springframework.boot</groupId>
+				<artifactId>spring-boot-maven-plugin</artifactId>
+				<version>2.2.11.RELEASE</version>
+			</plugin>
+		</plugins>
+<!--		<resources>-->
+<!--			<resource>-->
+<!--				<directory>src/main/java</directory>&lt;!&ndash;所在的目录&ndash;&gt;-->
+<!--				<includes>&lt;!&ndash;包括目录下的.properties,.xml文件都会扫描到&ndash;&gt;-->
+<!--					<include>**/*.properties</include>-->
+<!--					<include>**/*.xml</include>-->
+<!--				</includes>-->
+<!--				<filtering>false</filtering>-->
+<!--			</resource>-->
+<!--		</resources>-->
+	</build>
+	<!--多环境配置信息 a-->
+	<profiles>
+		<profile>
+			<!--环境的唯一值-->
+			<id>dev</id>
+			<properties>
+				<!--定义环境的属性 此处的标签是自定义的。比如<env>dev</env> -->
+				<!--这个标签会在application.properties默认配置文件中用到-->
+				<spring.profiles.active>test</spring.profiles.active>
+			</properties>
+			<!--默认环境-->
+			<activation>
+				<activeByDefault>true</activeByDefault>
+			</activation>
+		</profile>
+		<!--测试环境-->
+		<profile>
+			<id>test</id>
+			<properties>
+				<profile.enviroment>test</profile.enviroment>
+			</properties>
+		</profile>
+		<!--预发环境-->
+		<profile>
+			<id>pre</id>
+			<properties>
+				<profile.enviroment>pre</profile.enviroment>
+			</properties>
+		</profile>
+		<!--生产环境-->
+		<profile>
+			<id>prod</id>
+			<properties>
+				<profile.enviroment>prod</profile.enviroment>
+			</properties>
+		</profile>
+		<profile>
+			<id>CX</id>
+			<properties>
+				<profile.enviroment>CX</profile.enviroment>
+			</properties>
+		</profile>
+	</profiles>
+	<!-- <build>
+            <plugins>
+                <plugin>
+                    <groupId>org.springframework.boot</groupId>
+                    <artifactId>spring-boot-maven-plugin</artifactId>
+                    <configuration>
+                        <fork>true</fork>&lt;!&ndash; 如果没有该配置,热部署的devtools不生效 &ndash;&gt;
+                        <excludes>
+                            <exclude>
+                                <groupId>org.projectlombok</groupId>
+                                <artifactId>lombok</artifactId>
+                            </exclude>
+                        </excludes>
+                    </configuration>
+                    <version>2.2.11.RELEASE</version>
+                </plugin>
+            </plugins>
+        </build> -->
+	<!--  打包方式  -->
+	<!--  <packaging>war</packaging>  -->
+</project>

BIN
server.keystore


+ 14 - 0
src/main/java/com/zhou/SpringBootStartApplication.java

@@ -0,0 +1,14 @@
+package com.zhou;
+
+/*
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
+
+public class SpringBootStartApplication extends SpringBootServletInitializer {
+    @Overridekk
+    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
+        //注意这里的参数要指向原先用main方法执行的Application启动类
+        return builder.sources(SpringbootSsoLoginApplication.class);
+    }
+}
+*/

+ 58 - 0
src/main/java/com/zhou/SpringbootSsoLoginApplication.java

@@ -0,0 +1,58 @@
+package com.zhou;
+
+
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.boot.web.servlet.FilterRegistrationBean;
+import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
+import org.springframework.boot.web.servlet.ServletRegistrationBean;
+import org.springframework.context.annotation.Bean;
+
+import com.trs.idm.client.filter.GeneralSSOFilter;
+import com.trs.idm.client.listener.CoSessionListener;
+import com.trs.idm.client.servlet.LoginProxyServlet;
+
+@SpringBootApplication//(exclude = {DataSourceAutoConfiguration.class})
+public class SpringbootSsoLoginApplication {
+
+	public static void main(String[] args) {
+		System.out.println("项目SSO启动");
+		SpringApplication.run(SpringbootSsoLoginApplication.class, args);
+	}
+	
+	@Bean
+	public ServletListenerRegistrationBean<CoSessionListener> getCossionListener(){
+		ServletListenerRegistrationBean<CoSessionListener> servletListenerRegistrationBean = new ServletListenerRegistrationBean<CoSessionListener>(new CoSessionListener());
+		return servletListenerRegistrationBean;
+	}
+	
+	@Bean
+	public FilterRegistrationBean<GeneralSSOFilter> getSSOLoginFilter(){
+		FilterRegistrationBean<GeneralSSOFilter> filterRegistrationBean = new FilterRegistrationBean<GeneralSSOFilter>(new GeneralSSOFilter());
+		filterRegistrationBean.addUrlPatterns("/*");
+		return filterRegistrationBean;
+	}
+	
+	
+	@Bean
+	public ServletRegistrationBean<LoginProxyServlet> getSSOProxyServlet(){
+		ServletRegistrationBean<LoginProxyServlet> servletRegistrationBean = 
+				new ServletRegistrationBean<LoginProxyServlet>(new LoginProxyServlet());
+		servletRegistrationBean.addUrlMappings("/TRSIdSSSOProxyServlet");
+		servletRegistrationBean.setLoadOnStartup(100);
+		return servletRegistrationBean;
+	}
+	
+	@Bean
+	public ServletRegistrationBean<LoginProxyServlet> getLongUrlServlet(){
+		ServletRegistrationBean<LoginProxyServlet> servletRegistrationBean = 
+				new ServletRegistrationBean<LoginProxyServlet>(new LoginProxyServlet());
+		servletRegistrationBean.addUrlMappings("/idsAgents/GetLongUrlServlet");
+		servletRegistrationBean.setLoadOnStartup(100);
+		return servletRegistrationBean;
+	}
+
+
+}

+ 75 - 0
src/main/java/com/zhou/actor/LocalActor.java

@@ -0,0 +1,75 @@
+package com.zhou.actor;
+
+import com.trs.idm.client.actor.ActorException;
+import com.trs.idm.client.actor.SSOUser;
+import com.trs.idm.client.actor.StdHttpSessionBasedActor;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+public class LocalActor extends StdHttpSessionBasedActor {
+
+    @Override
+    public boolean checkLocalLogin(HttpSession httpSession) throws ActorException {
+        String username = (String) httpSession.getAttribute("username");
+        return username != null && !"".equals(username);
+    }
+
+    @Override
+    public void logout(HttpSession httpSession) throws ActorException {
+    	System.out.println("aaaa收到IDS退出通知");
+        if (checkLocalLogin(httpSession)) {
+            httpSession.removeAttribute("username");
+        }
+    }
+
+    @Override
+    public void loadLoginUser(HttpServletRequest httpServletRequest, SSOUser ssoUser) throws ActorException {
+        HttpSession session = httpServletRequest.getSession();
+        String username = ssoUser.getUserName();
+        session.setAttribute("username", username);
+
+        //登录成功的操作
+    }
+
+    @Override
+    public boolean removeUser(SSOUser ssoUser, HttpServletRequest httpServletRequest) throws ActorException {
+        return true;
+    }
+
+    @Override
+    public boolean updateUser(SSOUser ssoUser, HttpServletRequest httpServletRequest) throws ActorException {
+        return true;
+    }
+
+    @Override
+    public boolean addUser(SSOUser ssoUser, HttpServletRequest httpServletRequest) throws ActorException {
+        return true;
+    }
+
+    @Override
+    public String extractUserPwd(HttpServletRequest httpServletRequest) throws ActorException {
+        return null;
+    }
+
+    @Override
+    public String extractUserName(HttpServletRequest httpServletRequest) throws ActorException {
+        return null;
+    }
+
+    @Override
+    public boolean userExist(SSOUser ssoUser) throws ActorException {
+        return false;
+    }
+
+    @Override
+    public boolean enableUser(SSOUser ssoUser) throws ActorException {
+        return false;
+    }
+
+    @Override
+    public boolean disableUser(SSOUser ssoUser) throws ActorException {
+        return false;
+    }
+}
+

+ 734 - 0
src/main/java/com/zhou/controller/CloudOutboundController.java

@@ -0,0 +1,734 @@
+package com.zhou.controller;
+import com.zhou.tools.PostHttp;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.zhou.mapper.CloudOutboundMapper;
+import com.zhou.mapper.HttpInterfaceMapper;
+import com.zhou.mapper.SsoLogMapper;
+import com.zhou.pojo.*;
+import com.zhou.tools.CusAccessObjectUtil;
+import com.zhou.tools.FileURL;
+import com.zhou.tools.HttpClientUtil;
+import com.zhou.tools.tokens.IFToken;
+import com.zhou.tools.tokens.Token;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.Date;
+import com.zhou.mapper.UsersMapper;
+
+//import org.slf4j.Logger;
+//import org.slf4j.LoggerFactory;
+
+@CrossOrigin
+@RestController
+/**
+ * 该功能现在未启用,代码处于保存状态
+ */
+public class CloudOutboundController {
+	/*//Logger logger  =  LoggerFactory.getLogger("SSOinfo");
+	private static final Logger logger = LoggerFactory.getLogger(CloudOutboundController.class);
+	@Value("${EXPIRE_TIME}")
+	private String EXPIRE_TIME;
+	@Value("${appId}")
+	private String appId;
+	@Value("${appSecret}")
+	private String appSecret;
+	@Value("${apiKey}")
+	private String apiKey;
+
+
+
+
+	@Resource
+	private CloudOutboundMapper cloudOutboundMapper;
+	@Resource
+	private UsersMapper usersMapper;
+	@Resource
+	private SsoLogMapper ssoLogMapper;
+	@Resource
+	private HttpInterfaceMapper httpInterfaceMapper;
+	@Value("/sso")
+	//@Value("/CloudOutbound")
+	private String contextpath;
+
+	//用户管理,模型训练平台,机器人后台,外呼机器人,技术支撑,云呼叫使用,云呼叫导入
+	//查找云外呼导入人
+	@RequestMapping("getAccountList")
+	public ResponseEntity<Object> getAccountList(HttpServletRequest request) throws Exception {
+		request.setCharacterEncoding("UTF-8");
+		String username = (String) request.getSession().getAttribute("username");
+		List<String> list=new ArrayList<String>();
+		int jurisdiction=0;
+		String message="当前用户没有权限";
+		String token = (String) request.getSession().getAttribute("token");
+		Map<String,Object >tokenMap = IFToken.typeTokne(username,token);
+		int tokenTYPE =(int)tokenMap.get("jurisdiction");
+		if(tokenTYPE==0){
+			jurisdiction=3;
+			message =(String)tokenMap.get("message");
+		}else {
+			Date expiresDate = new Date(System.currentTimeMillis() + Integer.valueOf(EXPIRE_TIME) * 60 * 1000);
+			List<Users> users = usersMapper.getUsersListByAccount(username);
+			String key = Token.getToken(users.get(0), expiresDate);
+			request.getSession().setAttribute("token", key);
+			try{
+				String userType =usersMapper.getPermissionList(username);
+				if(userType!=null&&userType.length()!=0){
+					String[] type = userType.split(",");
+					for(int i=0 ;userType.length()>i ; i++){
+						if(type[i].equals("云呼叫使用")||type[i].equals("云呼叫导入")){
+							list = usersMapper.getAccountList();
+							jurisdiction=1;
+							break;
+						}
+					}
+				}
+
+			}catch (Exception e){
+				message="系统异常:"+e.getMessage();
+				e.printStackTrace();
+				jurisdiction=2;
+			}
+		}
+
+		Map<String,Object> maps = new HashMap<>();
+		maps.put("Type", jurisdiction);
+		if(jurisdiction==1){
+			maps.put("Data", list);
+			return new ResponseEntity<>(maps, HttpStatus.OK);
+		}else {
+			maps.put("Data", message);
+			return new ResponseEntity<>(maps, HttpStatus.OK);
+		}
+
+	}
+
+
+	//查找云外呼数据集合
+	@RequestMapping("getCloudOutboundList")
+	public ResponseEntity<Object> getCloudOutboundList(HttpServletRequest request) throws Exception {
+		request.setCharacterEncoding("UTF-8");
+		String username = (String) request.getSession().getAttribute("username");
+		//List<String> list=new ArrayList<String>();
+		int jurisdiction=0;
+		String message="当前用户没有权限";
+		Map<String,Object> map = new HashMap<>();
+		String token = (String) request.getSession().getAttribute("token");
+		Map<String,Object >tokenMap = IFToken.typeTokne(username,token);
+		int tokenTYPE =(int)tokenMap.get("jurisdiction");
+		if(tokenTYPE==0){
+			jurisdiction=3;
+			message =(String)tokenMap.get("message");
+		}else {
+			Date expiresDate = new Date(System.currentTimeMillis() + Integer.valueOf(EXPIRE_TIME) * 60 * 1000);
+			List<Users> users = usersMapper.getUsersListByAccount(username);
+			String key = Token.getToken(users.get(0), expiresDate);
+			request.getSession().setAttribute("token", key);
+			try{
+				String userType =usersMapper.getPermissionList(username);
+				if(userType!=null&&userType.length()!=0){
+					String[] type = userType.split(",");
+					for(int i=0 ;userType.length()>i ; i++){
+						if(type[i].equals("云呼叫使用")||type[i].equals("云呼叫导入")){
+							JSONObject jsonParam = this.getJSONParam(request);
+							UsersDTO dto = new UsersDTO();
+							if(jsonParam!=null){
+								dto = JSON.parseObject(jsonParam.toJSONString(),UsersDTO.class);
+							}
+							CloudOutboundDTO co = new CloudOutboundDTO();
+							PageHelper.startPage(dto.getStart(), dto.getSize(), "C_ID asc");
+							List<CloudOutbound> CloudOutboundList = cloudOutboundMapper.getCloudOutboundList();
+							List<CloudOutboundVo> voList = new ArrayList<>();
+							for (CloudOutbound cobd:CloudOutboundList) {
+								CloudOutboundVo vo = cloudOutboundPoToVo(cobd);
+								voList.add(vo);
+							}
+							PageInfo page = new PageInfo(CloudOutboundList);
+							page.setList(voList);
+							map.put("pages", page);
+							map.put("account", dto.getAccount());
+							map.put("userName", dto.getUserName());
+							jurisdiction=1;
+							break;
+						}
+					}
+				}
+
+			}catch (Exception e){
+				message="系统异常:"+e.getMessage();
+				e.printStackTrace();
+				jurisdiction=2;
+			}
+		}
+
+		Map<String,Object> maps = new HashMap<>();
+		maps.put("Type", jurisdiction);
+		if(jurisdiction==1){
+			maps.put("Data", map);
+			return new ResponseEntity<>(maps, HttpStatus.OK);
+		}else {
+			maps.put("Data", message);
+			return new ResponseEntity<>(maps, HttpStatus.OK);
+		}
+	}
+
+	//查找云外呼数据集合条件查询
+	@RequestMapping("getCloudOutboundListS")
+	public ResponseEntity<Object> getCloudOutboundListS(HttpServletRequest request,String beginTime ,String endTime,String C_CREATOR) throws Exception {//,String beginTime ,String endTime
+		request.setCharacterEncoding("UTF-8");
+		SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-ddHH:mm:ss");
+		Date dbt =sd.parse(beginTime);
+		Date det =sd.parse(endTime);
+		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+		beginTime=sdf.format(dbt);
+		endTime=sdf.format(det);
+		String username = (String) request.getSession().getAttribute("username");
+		int jurisdiction=0;
+		String message="当前用户没有权限";
+		Map<String,Object> map = new HashMap<>();
+		String token = (String) request.getSession().getAttribute("token");
+		Map<String,Object >tokenMap = IFToken.typeTokne(username,token);
+		int tokenTYPE =(int)tokenMap.get("jurisdiction");
+		if(tokenTYPE==0){
+			jurisdiction=3;
+			message =(String)tokenMap.get("message");
+		}else {
+			Date expiresDate = new Date(System.currentTimeMillis() + Integer.valueOf(EXPIRE_TIME) * 60 * 1000);
+			List<Users> users = usersMapper.getUsersListByAccount(username);
+			String key = Token.getToken(users.get(0), expiresDate);
+			request.getSession().setAttribute("token", key);
+			try{
+				String userType =usersMapper.getPermissionList(username);
+				if(userType!=null&&userType.length()!=0){
+					String[] type = userType.split(",");
+					for(int i=0 ;userType.length()>i ; i++){
+						if(type[i].equals("云呼叫使用")||type[i].equals("云呼叫导入")){
+							JSONObject jsonParam = this.getJSONParam(request);
+							UsersDTO dto = new UsersDTO();
+							if(jsonParam!=null){
+								dto = JSON.parseObject(jsonParam.toJSONString(),UsersDTO.class);
+							}
+							CloudOutboundDTO co = new CloudOutboundDTO();
+							List<CloudOutbound> CloudOutboundList =new ArrayList<CloudOutbound>();
+							PageHelper.startPage(dto.getStart(), dto.getSize(), "C_ID asc");
+							if (C_CREATOR.length()>=1){
+								CloudOutboundList = cloudOutboundMapper.getCloudOutboundListS( beginTime, endTime , C_CREATOR);
+
+							}else {
+								CloudOutboundList = cloudOutboundMapper.getCloudOutboundListStwo( beginTime, endTime );
+							}
+							PageHelper.startPage(co.getStart(), co.getSize(), "C_ID asc");
+							List<CloudOutboundVo> voList = new ArrayList<>();
+							for (CloudOutbound cobd:CloudOutboundList) {
+								CloudOutboundVo vo = cloudOutboundPoToVo(cobd);
+								voList.add(vo);
+							}
+							PageInfo page = new PageInfo(CloudOutboundList);
+							page.setList(voList);
+							map.put("pages", page);
+							map.put("account", dto.getAccount());
+							map.put("userName", dto.getUserName());
+							jurisdiction=1;
+							break;
+						}
+					}
+				}
+
+			}catch (Exception e){
+				message="系统异常:"+e.getMessage();
+				e.printStackTrace();
+				jurisdiction=2;
+			}
+		}
+
+		Map<String,Object> maps = new HashMap<>();
+		maps.put("Type", jurisdiction);
+		if(jurisdiction==1){
+			maps.put("Data", map);
+			return new ResponseEntity<>(maps, HttpStatus.OK);
+		}else {
+			maps.put("Data", message);
+			return new ResponseEntity<>(maps, HttpStatus.OK);
+		}
+	}
+
+	//添加新的云外呼数据
+	@RequestMapping("addCloudOutbound")
+	public ResponseEntity<Object> addCloudOutbound(@RequestParam("file") MultipartFile file,HttpServletRequest request){
+		String username = (String) request.getSession().getAttribute("username");
+		int jurisdiction=0;
+		String message="当前用户没有权限";
+		try{
+			String userType =usersMapper.getPermissionList(username);
+			if(userType!=null&&userType.length()!=0){
+				String[] type = userType.split(",");
+				for(int i=0 ;userType.length()>i ; i++){
+					if(type[i].equals("云呼叫导入")){
+						//      获取文件的名称
+						String fileName = file.getOriginalFilename();
+						//System.out.println(fileName);
+						//      获取文件的后缀名
+						String pattern = fileName.substring(fileName.lastIndexOf(".") + 1);
+						//System.out.println(pattern);
+						List<List<String>> listContent = new ArrayList<>();
+						message = "导入失败";
+						if (file != null) {
+							//文件类型判断
+							if (!FileURL.isEXCEL(file)) {
+								message = "该文件不是Excel文件";
+							} else {
+								listContent = FileURL.readExcelContents(file, pattern);
+								//文件内容判断
+								if (listContent.isEmpty()) {
+									message = "表格内容为空";
+								} else {
+									//    循环遍历
+									for (int y = 0; y < listContent.size(); y++) {
+										CloudOutbound cod = new CloudOutbound();
+										//读取excel表格中的数据
+										Date d = new Date();
+										cod.setC_ID(getTimestamp(d)+"");
+										//赋值
+										cod.setC_CUSTOMER_NAME(listContent.get(y).get(0));
+										cod.setC_CUSTOMER_PHONE(listContent.get(y).get(1));
+										cod.setC_AGENT_NAME(listContent.get(y).get(2));
+										cod.setC_DEVICE_ID(listContent.get(y).get(3));
+										cod.setC_BIND_PHONE(listContent.get(y).get(4));
+										cod.setC_DISPLAY_ORIGIN(listContent.get(y).get(5));
+										cod.setC_CREATOR(username);
+										cod.setN_CONTACT(0);
+										cod.setN_CONNECT(0);
+										//      插入数据
+										cloudOutboundMapper.addCloudOutbound(cod);
+									}
+									message="云外呼清单导入成功";
+									SetSsoLog(request,"云外呼管理","导入云外呼清单");
+								}
+							}
+						} else {
+							message = "未选择文件";
+						}
+						jurisdiction=1;
+						break;
+					}
+				}
+			}
+
+		}catch (Exception e){
+			message="系统异常:"+e.getMessage();
+			e.printStackTrace();
+			jurisdiction=2;
+		}
+		Map<String,Object> map = new HashMap<>();
+		map.put("Type", jurisdiction);
+		map.put("Data", message);
+		return new ResponseEntity<>(map, HttpStatus.OK);
+
+	}
+
+	*//**
+	 获取精确到毫秒的时间戳
+	 * @param date
+	 * @return
+	 **//*
+	public static Long getTimestamp(Date date){
+		if (null == date) {
+			return (long) 0;
+		}
+		String timestamp = String.valueOf(date.getTime());
+		return Long.valueOf(timestamp);
+	}
+
+
+	//删除云外呼数据
+	@RequestMapping("delCloudOutbound")
+	public ResponseEntity<Object> delCloudOutbound(HttpServletRequest request,String C_ID) throws Exception {
+		request.setCharacterEncoding("UTF-8");
+		String username = (String) request.getSession().getAttribute("username");
+		int jurisdiction=0;
+		String message="当前用户没有权限";
+		String token = (String) request.getSession().getAttribute("token");
+		Map<String,Object >tokenMap = IFToken.typeTokne(username,token);
+		int tokenTYPE =(int)tokenMap.get("jurisdiction");
+		if(tokenTYPE==0){
+			jurisdiction=3;
+			message =(String)tokenMap.get("message");
+		}else {
+			Date expiresDate = new Date(System.currentTimeMillis() + Integer.valueOf(EXPIRE_TIME) * 60 * 1000);
+			List<Users> users = usersMapper.getUsersListByAccount(username);
+			String key = Token.getToken(users.get(0), expiresDate);
+			request.getSession().setAttribute("token", key);
+			try{
+				String userType =usersMapper.getPermissionList(username);
+				if(userType!=null&&userType.length()!=0){
+					String[] type = userType.split(",");
+					for(int i=0 ;userType.length()>i ; i++){
+						if(type[i].equals("云呼叫导入")){
+							String[] id = C_ID.split(",");
+							for (int y =0 ; id.length>y;y++ ){
+								cloudOutboundMapper.delCloudOutbound(id[y]);
+								message="删除成功";
+							}
+							SetSsoLog(request,"云外呼管理","删除云外呼清单");
+							jurisdiction=1;
+							break;
+						}
+					}
+				}
+
+			}catch (Exception e){
+				message="系统异常:"+e.getMessage();
+				e.printStackTrace();
+				jurisdiction=2;
+			}
+		}
+
+		Map<String,Object> map = new HashMap<>();
+		map.put("Type", jurisdiction);
+		map.put("Data", message);
+		return new ResponseEntity<>(map, HttpStatus.OK);
+	}
+
+	//根据云外呼ID修改该条数据是否联系状态:0否,1是
+	@RequestMapping("updateCloudOutboundContact")
+	public ResponseEntity<Object> updateCloudOutboundContact(HttpServletRequest request,String C_ID,String C_CUSTOMER_PHONE_S) throws Exception {
+		request.setCharacterEncoding("UTF-8");
+		String username = (String) request.getSession().getAttribute("username");
+		int jurisdiction=0;
+		String message="当前用户没有权限";
+		String token = (String) request.getSession().getAttribute("token");
+		Map<String,Object >tokenMap = IFToken.typeTokne(username,token);
+		int tokenTYPE =(int)tokenMap.get("jurisdiction");
+		if(tokenTYPE==0){
+			jurisdiction=3;
+			message =(String)tokenMap.get("message");
+		}else {
+			Date expiresDate = new Date(System.currentTimeMillis() + Integer.valueOf(EXPIRE_TIME) * 60 * 1000);
+			List<Users> users = usersMapper.getUsersListByAccount(username);
+			String key = Token.getToken(users.get(0), expiresDate);
+			request.getSession().setAttribute("token", key);
+			try{
+				String userType =usersMapper.getPermissionList(username);
+				if(userType!=null&&userType.length()!=0){
+					String[] type = userType.split(",");
+					for(int i=0 ;userType.length()>i ; i++){
+						if(type[i].equals("云呼叫使用")||type[i].equals("云呼叫导入")){
+							String cid = (String) request.getSession().getAttribute("C_ID");
+							cid=C_ID;
+							boolean flag = cloudOutboundMapper.updateCloudOutboundContact(cid) > 0;
+							if(flag){
+								SetSsoLog(request,"云外呼管理","已拨打:"+C_CUSTOMER_PHONE_S);
+								message="云外呼是否联系状态修改成功";
+							}else{
+								message="云外呼是否联系状态修改失败,请联系技术人员处理";
+							}
+							jurisdiction=1;
+							break;
+						}
+					}
+				}
+
+			}catch (Exception e){
+				message="系统异常:"+e.getMessage();
+				e.printStackTrace();
+				jurisdiction=2;
+			}
+		}
+
+		Map<String,Object> map = new HashMap<>();
+		map.put("Type", jurisdiction);
+		map.put("Data", message);
+		return new ResponseEntity<>(map, HttpStatus.OK);
+	}
+
+	////根据云外呼ID修改该条数据是否接通状态:0否,1是
+	@RequestMapping("updateCloudOutboundConnect")
+	public ResponseEntity<Object> updateCloudOutboundConnect(HttpServletRequest request,String C_ID) throws Exception {
+		request.setCharacterEncoding("UTF-8");
+		String username = (String) request.getSession().getAttribute("username");
+		int jurisdiction=0;
+		String message="当前用户没有权限";
+		String token = (String) request.getSession().getAttribute("token");
+		Map<String,Object >tokenMap = IFToken.typeTokne(username,token);
+		int tokenTYPE =(int)tokenMap.get("jurisdiction");
+		if(tokenTYPE==0){
+			jurisdiction=3;
+			message =(String)tokenMap.get("message");
+		}else {
+			Date expiresDate = new Date(System.currentTimeMillis() + Integer.valueOf(EXPIRE_TIME) * 60 * 1000);
+			List<Users> users = usersMapper.getUsersListByAccount(username);
+			String key = Token.getToken(users.get(0), expiresDate);
+			request.getSession().setAttribute("token", key);
+			try{
+				String userType =usersMapper.getPermissionList(username);
+				if(userType!=null&&userType.length()!=0){
+					String[] type = userType.split(",");
+					for(int i=0 ;userType.length()>i ; i++){
+						if(type[i].equals("云呼叫使用")||type[i].equals("云呼叫导入")){
+							String cid = (String) request.getSession().getAttribute("C_ID");
+							cid=C_ID;
+							boolean flag = cloudOutboundMapper.updateCloudOutboundConnect(cid) > 0;
+							if(flag){
+								message="云外呼是否接通状态修改成功";
+							}else{
+								message="云外呼是否接通状态修改失败,请联系技术人员处理";
+							}
+							jurisdiction=1;
+							break;
+						}
+					}
+				}
+
+			}catch (Exception e){
+				message="系统异常:"+e.getMessage();
+				e.printStackTrace();
+				jurisdiction=2;
+			}
+		}
+
+		Map<String,Object> map = new HashMap<>();
+		map.put("Type", jurisdiction);
+		map.put("Data", message);
+		return new ResponseEntity<>(map, HttpStatus.OK);
+
+	}
+
+	//根据云外呼ID修改该条数据是否联系状态:0否,1是
+	@RequestMapping("CloudOut")
+	public ResponseEntity<Object> CloudOut(HttpServletRequest request,String CloudOutValue) throws Exception {
+		request.setCharacterEncoding("UTF-8");
+		String username = (String) request.getSession().getAttribute("username");
+		int jurisdiction=0;
+		String message="当前用户没有权限";
+		String token = (String) request.getSession().getAttribute("token");
+		Map<String,Object >tokenMap = IFToken.typeTokne(username,token);
+		int tokenTYPE =(int)tokenMap.get("jurisdiction");
+		String post=null;
+		if(tokenTYPE==0){
+			jurisdiction=3;
+			message =(String)tokenMap.get("message");
+		}else {
+			Date expiresDate = new Date(System.currentTimeMillis() + Integer.valueOf(EXPIRE_TIME) * 60 * 1000);
+			List<Users> users = usersMapper.getUsersListByAccount(username);
+			String key = Token.getToken(users.get(0), expiresDate);
+			request.getSession().setAttribute("token", key);
+
+			try{
+				String userType =usersMapper.getPermissionList(username);
+				if(userType!=null&&userType.length()!=0){
+					String[] type = userType.split(",");
+					for(int i=0 ;userType.length()>i ; i++){
+						if(type[i].equals("云呼叫使用")||type[i].equals("云呼叫导入")){
+							String cid = (String) request.getSession().getAttribute("C_ID");
+							org.codehaus.jettison.json.JSONObject jsonObject1 = new org.codehaus.jettison.json.JSONObject();
+							*//*String appId = "41b79a8f-fce8-43e0-9809-e0d1848aad01";
+							String appSecret = "2D06BFE5-10B2-40BC-89A6-5C47AAD08472";
+							String apiKey = "kENe0S6cyYnqcHTtqLDwD3lwRFNVTyfd";*//*
+							jsonObject1.put("appId", appId);
+							jsonObject1.put("appSecret", appSecret);
+							jsonObject1.put("apiKey", apiKey);
+
+							List<HttpInterface> list = httpInterfaceMapper.getIpHttpInterface("云呼叫使用","Webpagetoken");
+							if(list.size()>0) {
+								HttpInterface hife =list.get(0);
+								String HTTPSTokenUrl=hife.getURL();
+								String[] split = HTTPSTokenUrl.split("https://");
+								String[] split2 = HTTPSTokenUrl.split("HTTPS://");
+								int utlSZ =split.length +split2.length;
+
+								if(utlSZ>=3){
+									System.out.println("---------------"+"https接口"+"---------------");
+									post= HttpClientUtil.doPost(HTTPSTokenUrl, jsonObject1, "utf-8");
+
+								}else {
+									System.out.println("---------------"+"http接口"+"---------------");
+									PostHttp postHttp =new PostHttp();
+									post =postHttp.send(HTTPSTokenUrl,jsonObject1);
+								}
+								if(post!=null&&!post.isEmpty()){
+									System.out.println("云外呼获取Token返回参数:"+post);
+									org.codehaus.jettison.json.JSONObject jsonToken = new  org.codehaus.jettison.json.JSONObject(post);
+									String access_token = (String) jsonToken.get("access_token");
+									if(access_token!=null && !access_token.isEmpty()){
+										List<HttpInterface> list2 = httpInterfaceMapper.getIpHttpInterface("云呼叫使用","Webpagecall");
+										if(list2.size()>0){
+											HttpInterface hife2 =list2.get(0);
+											String HTTPSCallUrl=hife2.getURL();
+											System.out.println(CloudOutValue);
+											org.codehaus.jettison.json.JSONObject jsonCloudOutValue = new  org.codehaus.jettison.json.JSONObject(CloudOutValue);
+											cid=(String)jsonCloudOutValue.get("C_ID");
+											System.out.println("cid:"+cid);
+											Object COValue = jsonCloudOutValue.get("data");
+											System.out.println("COValue:"+COValue.toString());
+											org.codehaus.jettison.json.JSONObject jsonCOV = new  org.codehaus.jettison.json.JSONObject(COValue.toString());
+											System.out.println("外呼CALL传参的Json:"+jsonCOV);
+
+											String[] split3 = HTTPSCallUrl.split("https://");
+											String[] split4 = HTTPSCallUrl.split("HTTPS://");
+											int utlSZs =split3.length +split4.length;
+
+											if(utlSZs>=3){
+												System.out.println("---------------"+"https接口"+"---------------");
+												//post= HttpClientUtil.doPost(HTTPSTokenUrl, jsonObject1, "utf-8");
+												//post = HttpClientUtil.doHeaderPost(HTTPSCallUrl,access_token,jsonCOV,"utf-8");
+												post=HttpClientUtil.doPost(hife.getURL(), jsonObject1, "utf-8");
+
+											}else {
+												System.out.println("---------------"+"http接口"+"---------------");
+												PostHttp postHttp =new PostHttp();
+												//post =postHttp.sendHeader(HTTPSTokenUrl,access_token,jsonObject1);
+												post =postHttp.send(hife.getURL(),jsonObject1);
+											}
+											//post = HttpClientUtil.doHeaderPost(HTTPSCallUrl,access_token,jsonCOV,"utf-8");
+											System.out.println("请求外呼call返回参数:"+post);
+											org.codehaus.jettison.json.JSONObject jsonGetV = new  org.codehaus.jettison.json.JSONObject(post);
+											message =(String)jsonGetV.get("callId");
+											String customerPhone = (String) jsonCOV.get("customerPhone");
+											StringBuilder sb = new StringBuilder(customerPhone);
+											sb.replace(4,7,"****");
+
+											System.out.println("加密手机号码:"+sb.toString());
+											if(!cid.equals("*")){
+												boolean flag = cloudOutboundMapper.updateCloudOutboundContact(cid) > 0;
+												if(flag){
+													System.out.println("云外呼是否联系状态修改成功");
+													//message="云外呼是否联系状态修改成功";
+												}else{
+													System.out.println("云外呼是否联系状态修改失败,请联系技术人员处理");
+													//message="云外呼是否联系状态修改失败,请联系技术人员处理";
+												}
+											}
+
+											SetSsoLog(request,"云外呼管理","已拨打:"+sb.toString());
+											jurisdiction=1;
+											break;
+										}else {
+											message="云外呼callIP地址数据库未获取到";
+										}
+
+									}else {
+										message="云外呼token值未获取到返回值access_token";
+									}
+								}
+							}else {
+								message="云外呼tokenIP地址数据库未获取到";
+							}
+
+						}
+					}
+				}
+
+			}catch (Exception e){
+				message="系统异常:"+e.getMessage();
+				e.printStackTrace();
+				jurisdiction=2;
+			}
+		}
+
+		Map<String,Object> map = new HashMap<>();
+		map.put("Type", jurisdiction);
+		map.put("Data", message);
+		return new ResponseEntity<>(map, HttpStatus.OK);
+	}
+
+	public CloudOutboundVo cloudOutboundPoToVo(CloudOutbound po){
+		CloudOutboundVo vo = new CloudOutboundVo();
+		vo.setC_ID(po.getC_ID());
+		vo.setC_CUSTOMER_NAME(po.getC_CUSTOMER_NAME());
+		vo.setC_CUSTOMER_PHONE(po.getC_CUSTOMER_PHONE());
+		vo.setC_AGENT_NAME(po.getC_AGENT_NAME());
+		vo.setC_DEVICE_ID(po.getC_DEVICE_ID());
+		vo.setC_BIND_PHONE(po.getC_BIND_PHONE());
+		vo.setC_DISPLAY_ORIGIN(po.getC_DISPLAY_ORIGIN());
+		vo.setT_CRT_TIME(po.getT_CRT_TIME());
+		vo.setC_CREATOR(po.getC_CREATOR());
+		vo.setN_CONTACT(po.getN_CONTACT());
+		vo.setN_CONNECT(po.getN_CONNECT());
+		vo.setC_CUSTOMER_PHONE_S(po.getC_CUSTOMER_PHONE_S());
+		String time =po.getT_CRT_TIME();
+		//System.out.println(time);
+		if(time.length()>19){
+			time=dealDateFormat(time);
+			vo.setT_CRT_TIME(time);
+		}
+		return vo;
+	}
+	public JSONObject getJSONParam(HttpServletRequest request){
+		JSONObject jsonParam = null;
+		try {
+			// 获取输入流
+			BufferedReader streamReader = new BufferedReader(new InputStreamReader(request.getInputStream(), "UTF-8"));
+
+			// 写入数据到Stringbuilder
+			StringBuilder sb = new StringBuilder();
+			String line = null;
+			while ((line = streamReader.readLine()) != null) {
+				sb.append(line);
+			}
+			jsonParam = JSONObject.parseObject(sb.toString());
+			// 直接将json信息打印出来
+			if(jsonParam!=null){
+				//logger.info(jsonParam.toJSONString());
+			}else{
+				//logger.info("请求JSON为空");
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		return jsonParam;
+	}
+	public static String dealDateFormat(String oldDate) {
+		Date date1 = null;
+		DateFormat df2 = null;
+		try {
+			DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
+			Date date = df.parse(oldDate);
+			SimpleDateFormat df1 = new SimpleDateFormat ("EEE MMM dd HH:mm:ss Z yyyy", Locale.UK);
+			date1 = df1.parse(date.toString());
+			df2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+		} catch (ParseException e) {
+			e.printStackTrace();
+		}
+		return df2.format(date1);
+	}
+	public void SetSsoLog(HttpServletRequest request,String C_OPERATE_MODULE,String C_OPERATE_CONTENT){
+		String username = (String) request.getSession().getAttribute("username");
+		SsoLog ssoLog = new SsoLog();
+		//获取id号码
+		Date dp = new Date();
+		ssoLog.setC_LOG_ID(getTimestamp(dp)+"");
+		//获取用户姓名
+		String uName = usersMapper.getUserName(username);
+		ssoLog.setC_OPERATE_USER(uName);
+		CusAccessObjectUtil caou =new CusAccessObjectUtil();
+		//获取客户端IP
+		String ip = caou.getIpAddr(request);
+		ssoLog.setC_IP(ip);
+		//获取用户操作模块
+		ssoLog.setC_OPERATE_MODULE(C_OPERATE_MODULE);
+		//获取用户操作内容
+		ssoLog.setC_OPERATE_CONTENT(C_OPERATE_CONTENT);
+		//插入数据库中
+		ssoLogMapper.addSsoLog(ssoLog);
+	}*/
+}

+ 200 - 0
src/main/java/com/zhou/controller/HttpInterfacController.java

@@ -0,0 +1,200 @@
+package com.zhou.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.zhou.mapper.HttpInterfaceMapper;
+import com.zhou.mapper.UsersMapper;
+import com.zhou.pojo.HttpInterface;
+import com.zhou.pojo.Users;
+import com.zhou.tools.MDCFilter;
+import com.zhou.tools.Parameter;
+import com.zhou.tools.tokens.IFToken;
+import com.zhou.tools.tokens.Token;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import org.slf4j.MDC;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@CrossOrigin
+@Slf4j
+@RestController
+public class HttpInterfacController {
+	@Value("${EXPIRE_TIME}")
+	private String EXPIRE_TIME;
+	@Resource
+	private UsersMapper usersMapper;
+	@Resource
+	private HttpInterfaceMapper httpInterfaceMapper;
+	@Value("/sso")
+	//@Value("/CloudOutbound")
+	private String contextpath;
+
+	private String  keyBytes = "rC3PEniq57QXiWk40BDw3inW";
+
+
+	/**
+	 * 子平台名称,token值 ,查询
+	 * @param request,name,method
+	 * @return MAP<String,Object></>
+	 * @throws Exception
+	 */
+	//查询相关IP地址
+	@RequestMapping("getIpHttpInterface")
+	public ResponseEntity<Object> getIpHttpInterface(HttpServletRequest request ,String name,String method) throws Exception {
+		request.setCharacterEncoding("UTF-8");
+		//获取用户操作账号
+		String username = (String) request.getSession().getAttribute("username");
+		log.info("方法被使用,账户:"+username+",平台:"+name+",参数:"+method);
+		//初始传参类
+		Parameter pmr =new Parameter();
+		pmr.setType(1);
+		pmr.setData("当前用户没有权限");
+		pmr.setUuid(MDC.get(MDCFilter.ProcessId_ID));
+
+		Map<String,Object> map = new HashMap<>();
+		//获取用户携带token
+		String token = (String) request.getSession().getAttribute("token");
+		//核对用户token
+		Map<String,Object >tokenMap = IFToken.typeTokne(username,token);
+		int tokenTYPE =(int)tokenMap.get("jurisdiction");
+		if(tokenTYPE==0){
+			pmr.setType(3);
+			pmr.setData((String)tokenMap.get("message"));
+		}else {
+			Date expiresDate = new Date(System.currentTimeMillis() + Integer.valueOf(EXPIRE_TIME) * 60 * 1000);
+			List<Users> users = usersMapper.getUsersListByAccount(username);
+			String key = Token.getToken(users.get(0), expiresDate);
+			request.getSession().setAttribute("token", key);
+			try{
+				String userType =usersMapper.getPermissionList(username);
+				if(userType!=null&&userType.length()!=0){
+					String[] type = userType.split(",");
+
+					for(int i=0 ;type.length>i ; i++){
+						if(type[i].equals(name)){
+							List<HttpInterface> list =httpInterfaceMapper.getIpHttpInterface(name,method);
+							if(list.size()>0){
+								HttpInterface hife =list.get(0);
+								System.out.println("getIpHttpInterface");
+								System.out.println(hife.getURL());
+								pmr.setType(1);
+								pmr.setData(hife.getURL());
+								break;
+							}else {
+								break;
+							}
+						}
+					}
+				}
+
+			}catch (Exception e){
+				pmr.setData("系统异常:"+e.getMessage());
+				pmr.setType(2);
+				log.error("方法出现错误,账户:"+username+",错误消息:"+e.getMessage()+",内容:"+e);
+
+			}
+		}
+		log.info("方法返回结果返回账户:"+username+",返回Type:"+pmr.getType()+",返回参数:"+pmr.getData(),",返回id:"+pmr.getUuid());
+		map.put("Type", pmr.getType());
+		map.put("Data", pmr.getData());
+		map.put("uuid", pmr.getUuid());
+		return new ResponseEntity<>(map, HttpStatus.OK);
+
+	}
+
+
+
+	public JSONObject getJSONParam(HttpServletRequest request){
+		JSONObject jsonParam = null;
+		try {
+			// 获取输入流
+			BufferedReader streamReader = new BufferedReader(new InputStreamReader(request.getInputStream(), "UTF-8"));
+
+			// 写入数据到Stringbuilder
+			StringBuilder sb = new StringBuilder();
+			String line = null;
+			while ((line = streamReader.readLine()) != null) {
+				sb.append(line);
+			}
+			jsonParam = JSONObject.parseObject(sb.toString());
+			// 直接将json信息打印出来
+			if(jsonParam!=null){
+				//logger.info(jsonParam.toJSONString());
+			}else{
+				//logger.info("请求JSON为空");
+			}
+		} catch (Exception e) {
+			log.error("方法出现错误,错误消息:"+e.getMessage()+",内容:"+e);
+
+		}
+		return jsonParam;
+	}
+
+	public static String dealDateFormat(String oldDate) {
+		Date date1 = null;
+		DateFormat df2 = null;
+		try {
+			DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
+			Date date = df.parse(oldDate);
+			SimpleDateFormat df1 = new SimpleDateFormat ("EEE MMM dd HH:mm:ss Z yyyy", Locale.UK);
+			date1 = df1.parse(date.toString());
+			df2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+		} catch (ParseException e) {
+			log.error("方法出现错误,错误消息:"+e.getMessage()+",内容:"+e);
+
+		}
+		return df2.format(date1);
+	}
+
+	/**
+	 获取精确到毫秒的时间戳
+	 * @param date
+	 * @return
+	 **/
+	public static Long getTimestamp(Date date){
+		if (null == date) {
+			return (long) 0;
+		}
+		String timestamp = String.valueOf(date.getTime());
+		return Long.valueOf(timestamp);
+	}
+
+	public String  doGet(HttpServletRequest request, HttpServletResponse response) {
+		response.setContentType("text/html;charset=utf-8");
+
+		//获取referer头的值
+		String referer = request.getHeader("referer");
+		//获取访问地址
+		String sitePart = "http://" + request.getServerName();
+		System.out.println("referer:" + referer);
+		System.out.println("sitePart:" + sitePart);
+		String x = null;
+		//判断referer头是否为空,这个头的首地址是否以sitePart开始的
+		if (referer != null && referer.startsWith(sitePart)) {
+			//处理正在下载的请求
+			System.out.println("abcd");
+			x = "1";
+			return x;
+		} else {
+			System.out.println("1234");
+			x = "0";
+			return x;
+		}
+
+	}
+}

+ 695 - 0
src/main/java/com/zhou/controller/IndexController.java

@@ -0,0 +1,695 @@
+package com.zhou.controller;
+
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.zhou.actor.LocalActor;
+import com.zhou.mapper.UsersMapper;
+import com.zhou.mapper.SsoLogMapper;
+import com.zhou.pojo.*;
+import com.zhou.tools.CusAccessObjectUtil;
+import com.zhou.tools.DesUtils;
+import com.zhou.tools.MDCFilter;
+import com.zhou.tools.Parameter;
+import com.zhou.tools.tokens.IFToken;
+import com.zhou.tools.tokens.Token;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.slf4j.MDC;
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+@CrossOrigin
+@Slf4j
+@RestController
+public class IndexController {
+
+
+	@Resource
+	private UsersMapper usersMapper;
+	@Resource
+	private SsoLogMapper ssoLogMapper;
+
+	@Value("${EXPIRE_TIME}")
+	private String EXPIRE_TIME;
+
+
+	@Value("${server.servlet.context-path}")
+	private String contextpath;
+
+	@RequestMapping({"/","login"})
+	public String index(HttpServletRequest request, HttpServletResponse response) throws Exception {
+		request.setCharacterEncoding("UTF-8");
+		String username = (String) request.getSession().getAttribute("username");
+		request.setAttribute("username", username);
+
+		if(username != null && !"".equals(username)){
+			List<Users> users = usersMapper.getUsersListByAccount(username);
+			if(users.size()>0){
+				SetSsoLog(request,"智能外呼平台","用户签入");
+				response.sendRedirect(contextpath+"/index.html");
+			}
+		}
+		return null;
+	}
+
+
+	/**
+	 * 查询全表
+	 * @param request
+	 * @return MAP<String,Object></>
+	 * @throws Exception
+	 */
+	@RequestMapping("listUser")
+	public ResponseEntity<Object> listUser(HttpServletRequest request) throws Exception {
+		request.setCharacterEncoding("UTF-8");
+		//获取用户
+		String username = (String) request.getSession().getAttribute("username");
+		//获取token
+		String token = (String) request.getSession().getAttribute("token");
+		log.info("方法被使用,账户:"+username);
+		//获取到JSONObject
+		JSONObject jsonParam = this.getJSONParam(request);
+		UsersDTO dto = new UsersDTO();
+		if(jsonParam!=null){
+			dto = JSON.parseObject(jsonParam.toJSONString(),UsersDTO.class);
+		}
+		PageHelper.startPage(dto.getStart(), dto.getSize(), "userId asc");
+		List<Users> userList = usersMapper.getUsersList(dto.getAccount(),dto.getUserName());
+		//System.out.println("获取到的token="+token);
+		Map<String,Object> map = new HashMap<>();
+		//初始传参类
+		Parameter pmr =new Parameter();
+		pmr.setType(1);
+		pmr.setData("当前用户没有权限");
+		pmr.setUuid(MDC.get(MDCFilter.ProcessId_ID));
+
+		Map<String,Object >tokenMap = IFToken.typeTokne(username,token);
+		int tokenTYPE =(int)tokenMap.get("jurisdiction");
+		if(tokenTYPE==0){
+			pmr.setType(3);
+			pmr.setData((String)tokenMap.get("message"));
+		}else{
+			Date expiresDate = new Date(System.currentTimeMillis()+Integer.valueOf(EXPIRE_TIME)*60*1000);
+			List<Users> users = usersMapper.getUsersListByAccount(username);
+			String key = Token.getToken(users.get(0),expiresDate);
+			request.getSession().setAttribute("token",key);
+
+			try{
+				String userType =usersMapper.getPermissionList(username);
+				if(userType!=null&&userType.length()!=0){
+					String[] type = userType.split(",");
+					for(int i=0 ;userType.length()>i ; i++){
+						if(type[i].equals("用户管理")){
+							request.setAttribute("username", username);
+							List<UsersVo> voList = new ArrayList<>();
+							for (Users user:userList) {
+								String  keyBytes = "rC3PEniq57QXiWk40BDw3inW";
+								DesUtils du =new DesUtils();
+								String email = du.decode(user.getEmail(),keyBytes);
+								user.setEmail(email);
+								UsersVo vo = usersPoToVo(user);
+								voList.add(vo);
+							}
+
+							PageInfo page = new PageInfo(userList);
+							//PageInfo page = new PageInfo(voList);
+							page.setList(voList);
+							map.put("pages", page);
+							map.put("account", dto.getAccount());
+							map.put("userName", dto.getUserName());
+
+							pmr.setType(1);
+							break;
+						}
+					}
+				}
+
+			}catch (Exception e){
+				pmr.setData("系统异常:"+e.getMessage());
+				pmr.setType(2);
+				log.error("方法出现错误,账户:"+username+",错误消息:"+e.getMessage()+",内容:"+e);
+
+
+			}
+		}
+		Map<String,Object> maps = new HashMap<>();
+		maps.put("Type", pmr.getType());
+		maps.put("Data", pmr.getData());
+		maps.put("uuid", pmr.getUuid());
+		if(pmr.getType()==1){
+			pmr.setData(map);
+			maps.put("Data", pmr.getData());
+			log.info("方法返回结果返回账户:"+username+",返回Type:"+pmr.getType()+",返回参数:"+pmr.getData(),",返回id:"+pmr.getUuid());
+			return new ResponseEntity<>(maps, HttpStatus.OK);
+		}else {
+			log.info("方法返回结果返回账户:"+username+",返回Type:"+pmr.getType()+",返回参数:"+pmr.getData(),",返回id:"+pmr.getUuid());
+			return new ResponseEntity<>(maps, HttpStatus.OK);
+		}
+
+	}
+
+	/**
+	 * 根据ID查询
+	 * @param request
+	 * @return MAP<String,Object></>
+	 * @throws Exception
+	 */
+	//查找(根据id查找)
+	@RequestMapping("findUser")
+	public ResponseEntity<Object> findUser(HttpServletRequest request) throws Exception {
+		request.setCharacterEncoding("UTF-8");
+		String username = (String) request.getSession().getAttribute("username");
+		//初始传参类
+		Parameter pmr =new Parameter();
+		pmr.setType(1);
+		pmr.setData("当前用户没有权限");
+		pmr.setUuid(MDC.get(MDCFilter.ProcessId_ID));
+		//Map<String,Object> map = new HashMap<>();
+		UsersVo vo =new UsersVo();
+		//获取用户携带token
+		String token = (String) request.getSession().getAttribute("token");
+		Map<String,Object >tokenMap = IFToken.typeTokne(username,token);
+		int tokenTYPE =(int)tokenMap.get("jurisdiction");
+		if(tokenTYPE==0){
+			pmr.setType(3);
+			pmr.setData((String)tokenMap.get("message"));
+		}else {
+			Date expiresDate = new Date(System.currentTimeMillis() + Integer.valueOf(EXPIRE_TIME) * 60 * 1000);
+			List<Users> users = usersMapper.getUsersListByAccount(username);
+			String key = Token.getToken(users.get(0), expiresDate);
+			request.getSession().setAttribute("token", key);
+			try{
+				String userType =usersMapper.getPermissionList(username);
+				if(userType!=null&&userType.length()!=0){
+					String[] type = userType.split(",");
+					for(int i=0 ;userType.length()>i ; i++){
+						if(type[i].equals("用户管理")){
+							//获取到JSONObject
+							JSONObject jsonParam = this.getJSONParam(request);
+							UsersDTO dto = new UsersDTO();
+							if(jsonParam!=null){
+								dto = JSON.parseObject(jsonParam.toJSONString(),UsersDTO.class);
+							}
+							//logger.info("userId="+dto.getUserId());
+							if(dto.getUserId()!=0){
+								Users userss = usersMapper.getUser(dto.getUserId());
+								log.info("方法被使用,账户:"+username+",参数:"+dto.toString());
+								DesUtils du =new DesUtils();
+								String  keyBytes = "rC3PEniq57QXiWk40BDw3inW";
+								String email = du.decode(userss.getEmail(),keyBytes);
+								userss.setEmail(email);
+								vo = usersPoToVo(userss);
+							}else {
+								pmr.setData("未传userId");
+							}
+							pmr.setType(1);
+							break;
+						}
+					}
+				}
+
+			}catch (Exception e){
+				pmr.setData("系统异常:"+e.getMessage());
+				pmr.setType(2);
+				log.error("方法出现错误,账户:"+username+",错误消息:"+e.getMessage()+",内容"+e);
+
+
+			}
+		}
+
+		Map<String,Object> maps = new HashMap<>();
+		maps.put("Type", pmr.getType());
+		maps.put("Data", pmr.getData());
+		maps.put("uuid", pmr.getUuid());
+		if(pmr.getType()==1){
+			pmr.setData(vo);
+			maps.put("Data", pmr.getData());
+			log.info("方法返回结果返回账户:"+username+",返回Type:"+pmr.getType()+",返回参数:"+pmr.getData(),",返回id:"+pmr.getUuid());
+			return new ResponseEntity<>(maps, HttpStatus.OK);
+		}else {
+			log.info("方法返回结果返回账户:"+username+",返回Type:"+pmr.getType()+",返回参数:"+pmr.getData(),",返回id:"+pmr.getUuid());
+			return new ResponseEntity<>(maps, HttpStatus.OK);
+		}
+
+	}
+
+	/**
+	 * 添加
+	 * @param request
+	 * @return MAP<String,Object></>
+	 * @throws Exception
+	 */
+	//添加
+	@RequestMapping("addUser")
+	public ResponseEntity<Object> addUser(HttpServletRequest request) throws Exception {
+		request.setCharacterEncoding("UTF-8");
+		String username = (String) request.getSession().getAttribute("username");
+		//初始传参类
+		Parameter pmr =new Parameter();
+		pmr.setType(1);
+		pmr.setData("当前用户没有权限");
+		pmr.setUuid(MDC.get(MDCFilter.ProcessId_ID));
+		//获取用户携带token
+		String token = (String) request.getSession().getAttribute("token");
+		//验证token
+		Map<String,Object >tokenMap = IFToken.typeTokne(username,token);
+		int tokenTYPE =(int)tokenMap.get("jurisdiction");
+		if(tokenTYPE==0){
+			pmr.setType(3);
+			pmr.setData((String)tokenMap.get("message"));
+		}else {
+			Date expiresDate = new Date(System.currentTimeMillis() + Integer.valueOf(EXPIRE_TIME) * 60 * 1000);
+			List<Users> users = usersMapper.getUsersListByAccount(username);
+			String key = Token.getToken(users.get(0), expiresDate);
+			request.getSession().setAttribute("token", key);
+			try{
+				String userType =usersMapper.getPermissionList(username);
+				if(userType!=null&&userType.length()!=0){
+					String[] type = userType.split(",");
+					//System.out.println(type.length);
+					for(int i=0 ;userType.length()>i ; i++){
+						//System.out.println(type[i]+"   "+i);
+						if(type[i].equals("用户管理")){
+							//获取到JSONObject
+							JSONObject jsonParam = this.getJSONParam(request);
+							UsersDTO dto = new UsersDTO();
+							if(jsonParam!=null){
+								dto = JSON.parseObject(jsonParam.toJSONString(),UsersDTO.class);
+							}
+							List<Users> user = usersMapper.getUsersListByAccount(dto.getAccount());
+							if(user.size()>0){
+								pmr.setData("账号重复");
+							}else{
+								Users userss = usersDtoToPo(dto);
+								userss.setCreateUser(username);
+								userss.setUpdateUser(username);
+								DesUtils du =new DesUtils();
+								String  keyBytes = "rC3PEniq57QXiWk40BDw3inW";
+								String email = du.encode(userss.getEmail(),keyBytes);
+								userss.setEmail(email);
+								boolean flag = usersMapper.add(userss) > 0;
+								log.info("方法被使用,账户:"+username+",参数:"+userss.toString());
+								if(flag){
+									pmr.setData("");
+									SetSsoLog(request,"用户管理","新增用户:"+userss.getUserName());
+								}else{
+									pmr.setData("");
+								}
+								pmr.setType(1);
+
+							}
+							break;
+						}
+					}
+				}
+
+			}catch (Exception e){
+				pmr.setData("系统异常:"+e.getMessage());
+				pmr.setType(2);
+				log.error("方法出现错误,账户:"+username+",错误消息:"+e.getMessage()+",内容:"+e);
+
+			}
+		}
+		log.info("方法返回结果返回账户:"+username+",返回Type:"+pmr.getType()+",返回参数:"+pmr.getData(),",返回id:"+pmr.getUuid());
+
+		Map<String,Object> maps = new HashMap<>();
+		maps.put("Type", pmr.getType());
+		maps.put("Data", pmr.getData());
+		maps.put("uuid", pmr.getUuid());
+		return new ResponseEntity<>(maps, HttpStatus.OK);
+
+	}
+
+	/**
+	 * 删除
+	 * @param request
+	 * @return MAP<String,Object></>
+	 * @throws Exception
+	 */
+	//删除
+	@RequestMapping("deleteUser")
+	public ResponseEntity<Object> deleteUser(HttpServletRequest request) throws Exception {
+		request.setCharacterEncoding("UTF-8");
+		String username = (String) request.getSession().getAttribute("username");
+		//初始传参类
+		Parameter pmr =new Parameter();
+		pmr.setType(1);
+		pmr.setData("当前用户没有权限");
+		pmr.setUuid(MDC.get(MDCFilter.ProcessId_ID));
+		//获取用户携带tonken
+		String token = (String) request.getSession().getAttribute("token");
+		//验证token
+		Map<String,Object >tokenMap = IFToken.typeTokne(username,token);
+		int tokenTYPE =(int)tokenMap.get("jurisdiction");
+		if(tokenTYPE==0){
+			pmr.setType(3);
+			pmr.setData((String)tokenMap.get("message"));
+		}else {
+			Date expiresDate = new Date(System.currentTimeMillis() + Integer.valueOf(EXPIRE_TIME) * 60 * 1000);
+			List<Users> users = usersMapper.getUsersListByAccount(username);
+			String key = Token.getToken(users.get(0), expiresDate);
+			request.getSession().setAttribute("token", key);
+			try{
+				String userType =usersMapper.getPermissionList(username);
+				if(userType!=null&&userType.length()!=0){
+					String[] type = userType.split(",");
+					for(int i=0 ;userType.length()>i ; i++){
+						if(type[i].equals("用户管理")){
+							//获取到JSONObject
+							JSONObject jsonParam = this.getJSONParam(request);
+							UsersDTO dto = new UsersDTO();
+							if(jsonParam!=null){
+								dto = JSON.parseObject(jsonParam.toJSONString(),UsersDTO.class);
+								log.info("方法被使用,账户:"+username+",参数:"+dto.toString());
+
+							}
+							if(dto.getUserId()==1001){
+								pmr.setData("admin用户不可删除");
+							}
+							String userNaame =usersMapper.getIdUserName(dto.getUserId());
+							SetSsoLog(request,"用户管理","删除用户:"+userNaame);
+							usersMapper.del(dto.getUserId());
+							pmr.setData("用户删除成功");
+							pmr.setType(1);
+							break;
+						}
+					}
+				}
+
+			}catch (Exception e){
+				pmr.setData("系统异常:"+e.getMessage());
+				pmr.setType(2);
+				log.error("方法出现错误,账户:"+username+",错误消息:"+e.getMessage()+",内容:"+e);
+
+
+			}
+		}
+
+		Map<String,Object> maps = new HashMap<>();
+		maps.put("Type", pmr.getType());
+		maps.put("Data", pmr.getData());
+		maps.put("uuid", pmr.getUuid());
+		log.info("方法返回结果返回账户:"+username+",返回Type:"+pmr.getType()+",返回参数:"+pmr.getData(),",返回id:"+pmr.getUuid());
+		return new ResponseEntity<>(maps, HttpStatus.OK);
+
+	}
+
+	/**
+	 * 修改
+	 * @param request
+	 * @return MAP<String,Object></>
+	 * @throws Exception
+	 */
+	//修改
+	@RequestMapping("updateUser")
+	public ResponseEntity<Object> updateUser(HttpServletRequest request) throws Exception {
+		request.setCharacterEncoding("UTF-8");
+		String username = (String) request.getSession().getAttribute("username");
+		//初始传参类
+		Parameter pmr =new Parameter();
+		pmr.setType(1);
+		pmr.setData("当前用户没有权限");
+		pmr.setUuid(MDC.get(MDCFilter.ProcessId_ID));
+		//获取用户携带token
+		String token = (String) request.getSession().getAttribute("token");
+		//验证token
+		Map<String,Object >tokenMap = IFToken.typeTokne(username,token);
+		int tokenTYPE =(int)tokenMap.get("jurisdiction");
+		if(tokenTYPE==0){
+			pmr.setType(3);
+			pmr.setData((String)tokenMap.get("message"));
+		}else {
+			Date expiresDate = new Date(System.currentTimeMillis() + Integer.valueOf(EXPIRE_TIME) * 60 * 1000);
+			List<Users> users = usersMapper.getUsersListByAccount(username);
+			String key = Token.getToken(users.get(0), expiresDate);
+			request.getSession().setAttribute("token", key);
+			try{
+				String userType =usersMapper.getPermissionList(username);
+				if(userType!=null&&userType.length()!=0){
+					String[] type = userType.split(",");
+					for(int i=0 ;userType.length()>i ; i++){
+						if(type[i].equals("用户管理")){
+							//获取到JSONObject
+							JSONObject jsonParam = this.getJSONParam(request);
+							UsersDTO dto = new UsersDTO();
+							if(jsonParam!=null){
+								dto = JSON.parseObject(jsonParam.toJSONString(),UsersDTO.class);
+							}
+							List<Users> user = usersMapper.getUsersListByAccount(dto.getAccount());
+							System.out.println(dto.toString());
+
+							if(user.size()==1&&user.get(0).getUserId()!=dto.getUserId()){
+								pmr.setData("账号重复");
+							}else{
+								Users userss = usersDtoToPo(dto);
+								userss.setCreateUser(username);
+								userss.setUpdateUser(username);
+
+								DesUtils du =new DesUtils();
+								String  keyBytes = "rC3PEniq57QXiWk40BDw3inW";
+								String email = du.encode(userss.getEmail(),keyBytes);
+								userss.setEmail(email);
+								boolean flag = usersMapper.update(userss) > 0;
+								log.info("方法被使用,账户:"+username+",参数:"+userss.toString());
+
+								if(flag){
+									pmr.setData("用户修改成功");
+									SetSsoLog(request,"用户管理","修改用户:"+userss.getUserName());
+								}else{
+									pmr.setData("用户修改失败,请联系技术人员处理");
+								}
+
+								pmr.setType(1);
+
+							}
+							break;
+						}
+					}
+				}
+
+			}catch (Exception e){
+				pmr.setData("系统异常:"+e.getMessage());
+				pmr.setType(2);
+				log.error("方法出现错误,账户:"+username+",错误消息:"+e.getMessage()+",内容:"+e);
+
+
+			}
+		}
+
+		Map<String,Object> maps = new HashMap<>();
+		maps.put("Type", pmr.getType());
+		maps.put("Data", pmr.getData());
+		maps.put("uuid", pmr.getUuid());
+		log.info("方法返回结果返回账户:"+username+",返回Type:"+pmr.getType()+",返回参数:"+pmr.getData(),",返回id:"+pmr.getUuid());
+
+		return new ResponseEntity<>(maps, HttpStatus.OK);
+
+	}
+
+	/**
+	 * 签入
+	 * @param request
+	 */
+	@RequestMapping("checkLogin")
+	public ResponseEntity<Object> checkLogin(HttpServletRequest request, HttpServletResponse response) throws Exception {
+
+		request.setCharacterEncoding("UTF-8");
+		String username = (String) request.getSession().getAttribute("username");
+		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+		log.info("方法被使用,账户:"+username+"登入");
+
+//		username="123456";
+		HttpSession session = request.getSession(true);
+		//设置失效时间为35 * 60秒(35分钟)
+		session.setMaxInactiveInterval(24 * 60 * 60);
+
+		request.getSession().setAttribute("username",username);
+		System.out.println("checkLogin"+username);
+		//logger.info("获取登录用户信息=="+username);
+		if(username != null && !"".equals(username)){
+			List<Users> users = usersMapper.getUsersListByAccount(username);
+			Date expiresDate = new Date(System.currentTimeMillis()+Integer.valueOf(EXPIRE_TIME)*60*1000);
+			if(users.size()>0){
+				String key = Token.getToken(users.get(0),expiresDate);
+				Users user = users.get(0);
+				UsersVo vo = usersPoToVo(user);
+				//用户token赋值
+				request.getSession().setAttribute("token",key);
+				log.info("方法返回结果,账户:"+username+",返回消息:有效用户登入");
+				return new ResponseEntity<>(vo, HttpStatus.OK);
+
+			}else {
+
+				log.info("方法返回结果,账户:"+username+"无效用户登入");
+				return new ResponseEntity<>("查询登录用户信息为空!!!!", HttpStatus.BAD_REQUEST);
+			}
+		}
+
+		//logger.info("查询登录用户信息为空!!!!");
+		log.info("方法返回结果,账户:"+username+"查询登录用户信息为空!!!!");
+
+		return new ResponseEntity<>("查询登录用户信息为空!!!!", HttpStatus.OK);
+	}
+
+	/**
+	 * 退出
+	 * @param request
+	 */
+	@RequestMapping("logout")
+	public String logOut(HttpServletRequest request, HttpServletResponse response) throws Exception {
+		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+		request.setCharacterEncoding("UTF-8");
+		String username = (String) request.getSession().getAttribute("username");
+		SetSsoLog(request,"智能外呼平台","用户签出");
+		log.info("方法被使用,账户:"+username+"用户签出");
+		HttpSession session = request.getSession();
+		session.removeAttribute("username");
+		session.invalidate();
+		response.sendRedirect(contextpath);
+		return null;
+	}
+
+
+	public Users usersDtoToPo(UsersDTO dto){
+		Users po = new Users();
+		po.setUserId(dto.getUserId());
+		po.setAccount(dto.getAccount());
+		po.setUserName(dto.getUserName());
+		po.setDomainName(dto.getDomainName());
+		po.setDepartment(dto.getDepartment());
+		po.setRole(dto.getRole());
+		String permission = "";
+		if(dto.getPermission()!=null && dto.getPermission().size()>0) {
+			List<String> permissions = dto.getPermission();
+			for (String p : permissions) {
+				permission += p + ",";
+			}
+			permission = permission.substring(0,permission.length()-1);
+		}
+		po.setPermission(permission);
+		po.setEmail(dto.getEmail());
+		return po;
+	}
+
+	public UsersVo usersPoToVo(Users po){
+		UsersVo vo = new UsersVo();
+		vo.setUserId(po.getUserId());
+		vo.setAccount(po.getAccount());
+		vo.setUserName(po.getUserName());
+		vo.setDomainName(po.getDomainName());
+		vo.setDepartment(po.getDepartment());
+		vo.setRole(po.getRole());
+		List<String> permissions = new ArrayList<>();
+		if(po.getPermission()!=null&&!"".equals(po.getPermission())){
+			String[] arr = po.getPermission().split(",");
+			for (String permission: arr) {
+				permissions.add(permission);
+			}
+		}
+		vo.setPermission(permissions);
+		vo.setEmail(po.getEmail());
+		vo.setCreateTime(po.getCreateTime());
+		vo.setCreateUser(po.getCreateUser());
+		vo.setUpdateTime(po.getUpdateTime());
+		vo.setUpdateUser(po.getUpdateUser());
+		return vo;
+	}
+
+	public JSONObject getJSONParam(HttpServletRequest request){
+		JSONObject jsonParam = null;
+		try {
+			// 获取输入流
+			BufferedReader streamReader = new BufferedReader(new InputStreamReader(request.getInputStream(), "UTF-8"));
+
+			// 写入数据到Stringbuilder
+			StringBuilder sb = new StringBuilder();
+			String line = null;
+			while ((line = streamReader.readLine()) != null) {
+				sb.append(line);
+			}
+			jsonParam = JSONObject.parseObject(sb.toString());
+			// 直接将json信息打印出来
+			if(jsonParam!=null){
+				//logger.info(jsonParam.toJSONString());
+			}else{
+				//logger.info("请求JSON为空");
+			}
+		} catch (Exception e) {
+			log.error("方法出现错误,消息:"+e.getMessage()+",内容:"+e);
+
+		}
+		return jsonParam;
+	}
+	public void SetSsoLog(HttpServletRequest request,String C_OPERATE_MODULE,String C_OPERATE_CONTENT){
+		String username = (String) request.getSession().getAttribute("username");
+		SsoLog ssoLog = new SsoLog();
+		//获取id号码
+		Date dp = new Date();
+		ssoLog.setC_LOG_ID(getTimestamp(dp)+"");
+		//获取用户姓名
+		String uName = usersMapper.getUserName(username);
+		ssoLog.setC_OPERATE_USER(uName);
+		CusAccessObjectUtil caou =new CusAccessObjectUtil();
+		//获取客户端IP
+		String ip = caou.getIpAddr(request);
+		ssoLog.setC_IP(ip);
+		//获取用户操作模块
+		ssoLog.setC_OPERATE_MODULE(C_OPERATE_MODULE);
+		//获取用户操作内容
+		ssoLog.setC_OPERATE_CONTENT(C_OPERATE_CONTENT);
+		//插入数据库中
+		ssoLogMapper.addSsoLog(ssoLog);
+	}
+
+	/**
+	 获取精确到毫秒的时间戳
+	 * @param date
+	 * @return
+	 **/
+	public static Long getTimestamp(Date date){
+		if (null == date) {
+			return (long) 0;
+		}
+		String timestamp = String.valueOf(date.getTime());
+		return Long.valueOf(timestamp);
+	}
+
+	public String  doGet(HttpServletRequest request, HttpServletResponse response) {
+		response.setContentType("text/html;charset=utf-8");
+
+		//获取referer头的值
+		String referer = request.getHeader("referer");
+		//获取访问地址
+		String sitePart = "https://" + request.getServerName();
+		System.out.println("referer:" + referer);
+		System.out.println("sitePart:" + sitePart);
+		String x = null;
+		//判断referer头是否为空,这个头的首地址是否以sitePart开始的
+		if (referer != null && referer.startsWith(sitePart)) {
+			//处理正在下载的请求
+			System.out.println("abcd");
+			x = "1";
+			return x;
+		} else {
+			System.out.println("1234");
+			x = "0";
+			return x;
+		}
+
+	}
+
+}

+ 563 - 0
src/main/java/com/zhou/controller/SsoLogController.java

@@ -0,0 +1,563 @@
+package com.zhou.controller;
+
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.zhou.mapper.HttpInterfaceMapper;
+import com.zhou.mapper.SsoLogMapper;
+import com.zhou.mapper.SsoLogDownloadMapper;
+import com.zhou.mapper.UsersMapper;
+import com.zhou.pojo.*;
+import com.zhou.tools.*;
+
+import java.net.URLEncoder;
+
+import com.zhou.tools.tokens.IFToken;
+import com.zhou.tools.tokens.Token;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+import org.slf4j.MDC;
+
+@CrossOrigin
+@Slf4j
+@RestController
+public class SsoLogController {
+
+    @Value("${EXPIRE_TIME}")
+    private String EXPIRE_TIME;
+    @Resource
+    private UsersMapper usersMapper;
+    @Resource
+    private SsoLogMapper ssoLogMapper;
+    @Resource
+    private SsoLogDownloadMapper ssoLogDownloadMapper;
+    @Resource
+    private HttpInterfaceMapper httpInterfaceMapper;
+    @Value("/sso")
+    //@Value("/CloudOutbound")
+    private String contextpath;
+
+
+    //查找日志管理数据集合
+
+    /**
+     * 无条件查询
+     *
+     * @param request
+     * @return MAP<String, Object></>
+     * @throws Exception
+     */
+    @RequestMapping("getSsoLogList")
+    public ResponseEntity<Object> getSsoLogList(HttpServletRequest request) throws Exception {
+        request.setCharacterEncoding("UTF-8");
+        String username = (String) request.getSession().getAttribute("username");
+        log.info("方法被使用账户:" + username);
+        //初始传参类
+        Parameter pmr = new Parameter();
+        pmr.setType(1);
+        pmr.setData("当前用户没有权限");
+        pmr.setUuid(MDC.get(MDCFilter.ProcessId_ID));
+        Map<String, Object> map = new HashMap<>();
+        //获取用户携带token
+        String token = (String) request.getSession().getAttribute("token");
+        //验证token
+        Map<String, Object> tokenMap = IFToken.typeTokne(username, token);
+        int tokenTYPE = (int) tokenMap.get("jurisdiction");
+        if (tokenTYPE == 0) {
+            pmr.setType(3);
+            pmr.setData((String) tokenMap.get("message"));
+        } else {
+            Date expiresDate = new Date(System.currentTimeMillis() + Integer.valueOf(EXPIRE_TIME) * 60 * 1000);
+            List<Users> users = usersMapper.getUsersListByAccount(username);
+            String key = Token.getToken(users.get(0), expiresDate);
+            request.getSession().setAttribute("token", key);
+            try {
+                String userType = usersMapper.getPermissionList(username);
+                if (userType != null && userType.length() != 0) {
+                    String[] type = userType.split(",");
+                    for (int i = 0; userType.length() > i; i++) {
+                        if (type[i].equals("用户管理")) {
+                            JSONObject jsonParam = this.getJSONParam(request);
+                            UsersDTO dto = new UsersDTO();
+                            if (jsonParam != null) {
+                                dto = JSON.parseObject(jsonParam.toJSONString(), UsersDTO.class);
+                            }
+                            SsoLogDTO co = new SsoLogDTO();
+                            PageHelper.startPage(dto.getStart(), dto.getSize(), "T_OPERATE_TIME desc");
+                            List<SsoLog> ssoLogList = ssoLogMapper.getSsoLogList();
+                            List<SsoLogVo> voList = new ArrayList<>();
+                            for (SsoLog solog : ssoLogList) {
+                                SsoLogVo vo = SsoLogListPoToVo(solog);
+                                voList.add(vo);
+                            }
+                            PageInfo page = new PageInfo(ssoLogList);
+                            page.setList(voList);
+                            map.put("pages", page);
+                            map.put("account", dto.getAccount());
+                            map.put("userName", dto.getUserName());
+                            pmr.setType(1);
+                            break;
+                        }
+                    }
+                }
+
+            } catch (Exception e) {
+                pmr.setData("系统异常:" + e.getMessage());
+                pmr.setType(2);
+                log.error("方法出现错误账户:" + username + ",错误段落:" + e + ",错误消息:" + e.getMessage());
+
+            }
+        }
+
+        Map<String, Object> maps = new HashMap<>();
+        maps.put("Type", pmr.getType());
+        maps.put("Data", pmr.getData());
+        maps.put("uuid", pmr.getUuid());
+        maps.put(MDCFilter.ProcessId_ID, MDC.get(MDCFilter.ProcessId_ID));
+        if (pmr.getType() == 1) {
+            pmr.setData(map);
+            maps.put("Data", map);
+            log.info("方法返回结果返回账户:" + username + ",返回Type:" + pmr.getType() + ",返回参数:" + pmr.getData(), ",返回id:" + pmr.getUuid());
+            return new ResponseEntity<>(maps, HttpStatus.OK);
+        }
+        log.info("方法返回结果返回账户:" + username + ",返回Type:" + pmr.getType() + ",返回参数:" + pmr.getData(), ",返回id:" + pmr.getUuid());
+        return new ResponseEntity<>(maps, HttpStatus.OK);
+
+    }
+
+
+    /**
+     * 开始时间,结束时间,人名查询
+     *
+     * @param request
+     * @return MAP<String, Object></>
+     * @throws Exception
+     */
+    //查找日志管理数据集合条件查询
+    @RequestMapping("getSsoLogListS")
+	public ResponseEntity<Object> getSsoLogListS(HttpServletRequest request,Integer currentPage,Integer pageSize,String beginTime ,String endTime ,String C_CREATOR) throws Exception {
+            request.setCharacterEncoding("UTF-8");
+            SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-ddHH:mm:ss");
+            Date dbt =sd.parse(beginTime);
+            Date det =sd.parse(endTime);
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            beginTime=sdf.format(dbt);
+            endTime=sdf.format(det);
+            String username = (String) request.getSession().getAttribute("username");
+            System.out.println("項目中返回的DATA"+currentPage+"-----"+pageSize);
+		log.info("S方法被使用账户:"+username+",开始时间:"+beginTime+",结束时间:"+endTime+",参数:"+C_CREATOR);
+		//初始传参类
+		Parameter pmr =new Parameter();
+		pmr.setType(1);
+		pmr.setData("当前用户没有权限");
+		pmr.setUuid(MDC.get(MDCFilter.ProcessId_ID));
+		Map<String,Object> map = new HashMap<>();
+		//获取用户携带token
+		String token = (String) request.getSession().getAttribute("token");
+		//验证token
+		Map<String,Object >tokenMap = IFToken.typeTokne(username,token);
+		int tokenTYPE =(int)tokenMap.get("jurisdiction");
+		if(tokenTYPE==0){
+			pmr.setType(3);
+			pmr.setData((String)tokenMap.get("message"));
+		}else {
+			Date expiresDate = new Date(System.currentTimeMillis() + Integer.valueOf(EXPIRE_TIME) * 60 * 1000);
+			List<Users> users = usersMapper.getUsersListByAccount(username);
+			String key = Token.getToken(users.get(0), expiresDate);
+			request.getSession().setAttribute("token", key);
+			try{
+				String userType =usersMapper.getPermissionList(username);
+				if(userType!=null&&userType.length()!=0){
+					String[] type = userType.split(",");
+					for(int i=0 ;userType.length()>i ; i++){
+						if(type[i].equals("用户管理")){
+							JSONObject jsonParam = this.getJSONParam(request);
+							UsersDTO dto = new UsersDTO();
+							if(jsonParam!=null){
+								dto = JSON.parseObject(jsonParam.toJSONString(),UsersDTO.class);
+							}
+							SsoLogDTO co = new SsoLogDTO();
+
+							List<SsoLog> SsoLogList =new ArrayList<SsoLog>();
+							if (C_CREATOR!=null&&C_CREATOR.length()>=1){
+								System.out.println(beginTime+"--"+endTime+"--"+C_CREATOR);
+								PageHelper.startPage(currentPage, pageSize);
+								SsoLogList = ssoLogMapper.getSsoLogListOne( beginTime, endTime , C_CREATOR);
+							}else {
+								PageHelper.startPage(currentPage, pageSize);
+								SsoLogList = ssoLogMapper.getSsoLogtwo( beginTime, endTime );
+							}
+
+
+							List<SsoLogVo> voList = new ArrayList<>();
+							for (SsoLog cobd:SsoLogList) {
+								SsoLogVo vo = SsoLogListPoToVo(cobd);
+								voList.add(vo);
+							}
+
+							PageInfo page = new PageInfo(SsoLogList);
+							page.setList(voList);
+							map.put("pages", page);
+							map.put("account", dto.getAccount());
+							map.put("userName", dto.getUserName());
+							pmr.setType(1);
+							break;
+						}
+					}
+				}
+
+			}catch (Exception e){
+				log.info("S方法出现错误账户:"+username+",错误段落:"+e+",错误消息:"+e.getMessage());
+				pmr.setData(e.getMessage());
+				pmr.setType(2);
+
+
+			}
+		}
+
+		Map<String,Object> maps = new HashMap<>();
+
+
+		map.put("Type", pmr.getType());
+		map.put("uuid", pmr.getUuid());
+
+		if(pmr.getType()==1){
+			pmr.setData(map);
+			maps.put("Data", pmr.getData());
+			log.info("方法返回结果返回账户:"+username+",返回Type:"+pmr.getType()+",返回参数:"+pmr.getData(),",返回id:"+pmr.getUuid());
+			return new ResponseEntity<>(maps, HttpStatus.OK);
+
+		}else {
+			maps.put("Data", pmr.getData());
+			log.info("方法返回结果返回账户:"+username+",返回Type:"+pmr.getType()+",返回参数:"+pmr.getData(),",返回id:"+pmr.getUuid());
+			return new ResponseEntity<>(maps, HttpStatus.OK);
+		}
+	}
+
+    /**
+     * 子平台名称,token值查询
+     *
+     * @param request
+     * @return MAP<String, Object></>
+     * @throws Exception
+     */
+    //查找日志管理数获取机器人后台token
+    @RequestMapping("tokenSsoLog")
+    public ResponseEntity<Object> tokenSsoLog(HttpServletRequest request, String name, String method) throws Exception {
+        request.setCharacterEncoding("UTF-8");
+        //获取用户操作账号
+        String username = (String) request.getSession().getAttribute("username");
+        log.info("方法被使用,调用账户:" + username + ",调用平台:" + name + ",调用参数:" + method);
+        //初始传参类
+        Parameter pmr = new Parameter();
+        pmr.setType(1);
+        pmr.setData("当前用户没有权限");
+        pmr.setUuid(MDC.get(MDCFilter.ProcessId_ID));
+
+
+        Map<String, Object> map = new HashMap<>();
+        //获取用户携带token
+        String token = (String) request.getSession().getAttribute("token");
+        //核对用户token
+        Map<String, Object> tokenMap = IFToken.typeTokne(username, token);
+        int tokenTYPE = (int) tokenMap.get("jurisdiction");
+        if (tokenTYPE == 0) {
+            pmr.setType(3);
+            pmr.setData((String) tokenMap.get("message"));
+
+        } else {
+            Date expiresDate = new Date(System.currentTimeMillis() + Integer.valueOf(EXPIRE_TIME) * 60 * 1000);
+            List<Users> users = usersMapper.getUsersListByAccount(username);
+            String key = Token.getToken(users.get(0), expiresDate);
+            //重置用户token
+            request.getSession().setAttribute("token", key);
+            try {
+                String userType = usersMapper.getPermissionList(username);
+                if (userType != null && userType.length() != 0) {
+                    String[] type = userType.split(",");
+                    String C_OPERATE_CONTENT = "用户登入";
+
+                    for (int i = 0; type.length > i; i++) {
+                        if (type[i].equals(name)) {
+                            System.out.println("tokenSsoLog");
+                            SetSsoLog(request, name, C_OPERATE_CONTENT);
+                            PostHttp postHttp = new PostHttp();
+                            List<HttpInterface> list = httpInterfaceMapper.getIpHttpInterface(name, method);
+                            List<Users> ulist = usersMapper.getUsersListByAccount(username);
+                            if (list.size() > 0 && ulist.size() > 0) {
+                                HttpInterface hife = list.get(0);
+                                org.codehaus.jettison.json.JSONObject jsonObject1 = new org.codehaus.jettison.json.JSONObject();
+                                if (type[i].equals("外呼机器人") || type[i].equals("技术支撑")) {
+                                    if (type[i].equals("技术支撑")) {
+                                        jsonObject1.put("email", "admin@welljoint.com");
+                                    } else {
+                                        DesUtils du = new DesUtils();
+                                        String keyBytes = "rC3PEniq57QXiWk40BDw3inW";
+                                        String email = du.decode(ulist.get(0).getEmail(), keyBytes);
+                                        ulist.get(0).setEmail(email);
+                                        jsonObject1.put("email", ulist.get(0).getEmail());
+                                    }
+
+                                } else {
+                                    jsonObject1.put("userName", username);
+                                }
+                                System.out.println(jsonObject1.toString());
+                                String post = null;
+                                String[] split = hife.getURL().split("https://");
+                                String[] split2 = hife.getURL().split("HTTPS://");
+                                int utlSZ = split.length + split2.length;
+                                if (utlSZ >= 3) {
+                                    System.out.println("---------------" + "https接口" + "---------------");
+                                    post = HttpClientUtil.doPost(hife.getURL(), jsonObject1, "utf-8");
+
+                                } else {
+                                    System.out.println("---------------" + "http接口" + "---------------");
+                                    post = postHttp.send(hife.getURL(), jsonObject1);
+                                }
+
+
+                                System.out.println(name + "接口返回:--" + post + "--");
+
+                                if (type[i].equals("外呼机器人") || type[i].equals("技术支撑")) {
+                                    org.codehaus.jettison.json.JSONObject jo = new org.codehaus.jettison.json.JSONObject(post);
+                                    String ssid = (String) jo.get("ssid");
+                                    post = ssid;
+                                    System.out.println(name + "接口返回:--" + ssid + "--");
+                                }
+                                pmr.setType(1);
+                                pmr.setData(post);
+                                break;
+                            } else {
+                                break;
+                            }
+                        }
+                    }
+                }
+
+            } catch (Exception e) {
+                log.error("方法出现错误账户:" + username + ",错误段落:" + e + ",错误消息:" + e.getMessage());
+                pmr.setType(1);
+                pmr.setData(e.getMessage());
+
+            }
+        }
+        log.info("方法返回结果返回账户:" + username + ",返回Type:" + pmr.getType() + ",返回参数:" + pmr.getData(), ",返回id:" + pmr.getUuid());
+        map.put("Type", pmr.getType());
+        map.put("Data", pmr.getData());
+        map.put("uuid", pmr.getUuid());
+        return new ResponseEntity<>(map, HttpStatus.OK);
+    }
+
+    /**
+     * 开始时间,结束时间,人名下载
+     *
+     * @param request
+     * @return MAP<String, Object></>
+     * @throws Exception
+     */
+    //查找日子管理数据集合条件查询下载
+    @RequestMapping("downloadSsoLog")
+    public void downloadSsoLog(HttpServletRequest request, HttpServletResponse response, String beginTime, String endTime, String C_CREATOR) throws Exception {
+        request.setCharacterEncoding("UTF-8");
+        SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-ddHH:mm:ss");
+        Date dbt = sd.parse(beginTime);
+        Date det = sd.parse(endTime);
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        beginTime = sdf.format(dbt);
+        endTime = sdf.format(det);
+        String username = (String) request.getSession().getAttribute("username");
+        log.info("方法被使用账户:" + username + ",开始时间:" + beginTime + ",结束时间:" + endTime + ",参数:" + C_CREATOR);
+        //初始传参类
+        Parameter pmr = new Parameter();
+        pmr.setType(1);
+        pmr.setData("当前用户没有权限");
+        pmr.setUuid(MDC.get(MDCFilter.ProcessId_ID));
+        Map<String, Object> map = new HashMap<>();
+        //验证用户携带token消息
+        String token = (String) request.getSession().getAttribute("token");
+
+        Map<String, Object> tokenMap = IFToken.typeTokne(username, token);
+        int tokenTYPE = (int) tokenMap.get("jurisdiction");
+        if (tokenTYPE == 0) {
+            pmr.setType(3);
+            pmr.setData((String) tokenMap.get("message"));
+
+        } else {
+            Date expiresDate = new Date(System.currentTimeMillis() + Integer.valueOf(EXPIRE_TIME) * 60 * 1000);
+            List<Users> users = usersMapper.getUsersListByAccount(username);
+            String key = Token.getToken(users.get(0), expiresDate);
+            request.getSession().setAttribute("token", key);
+            try {
+                String userType = usersMapper.getPermissionList(username);
+                if (userType != null && userType.length() != 0) {
+                    String[] type = userType.split(",");
+                    for (int i = 0; userType.length() > i; i++) {
+                        if (type[i].equals("用户管理")) {
+                            SsoLogDTO co = new SsoLogDTO();
+                            List<SsoLog> SsoLogList = new ArrayList<SsoLog>();
+
+                            try {
+                                String filename = "字典类型";
+                                String userAgent = request.getHeader("User-Agent");
+                                if (userAgent.contains("MSIE") || userAgent.contains("Trident")) {
+                                    filename = URLEncoder.encode(filename, "UTF-8");
+                                } else {
+                                    filename = new String(filename.getBytes("UTF-8"), "ISO-8859-1");
+                                }
+                                response.setContentType("application/json.ms-exce");
+                                response.setCharacterEncoding("utf-8");
+                                response.addHeader("Content-Disposition", "filename = " + filename + ".xlsx");
+                                List<SsoLogDownload> dictTypeList = new ArrayList<SsoLogDownload>();
+                                if (C_CREATOR != null && C_CREATOR.length() >= 1) {
+                                    dictTypeList = ssoLogDownloadMapper.getSsoLogDownloadListOne(beginTime, endTime, C_CREATOR);
+                                    System.out.println(dictTypeList.size());
+
+                                } else {
+                                    dictTypeList = ssoLogDownloadMapper.getSsoLogDownloadListtwo(beginTime, endTime);
+                                    System.out.println(dictTypeList.size());
+                                }
+
+                                EasyExcel.write(response.getOutputStream(), SsoLogDownload.class).sheet("sheet").doWrite(dictTypeList);
+                            } catch (Exception e) {
+                                pmr.setType(2);
+                                log.error("方法出现错误账户:" + username + ",错误段落:" + e + ",错误消息:" + e.getMessage());
+                                throw new RuntimeException(e);
+
+                            }
+                            pmr.setType(1);
+                            pmr.setData("导出成功");
+                            break;
+                        }
+                    }
+                }
+
+            } catch (Exception e) {
+                pmr.setType(2);
+                pmr.setData(e.getMessage());
+                log.error("方法出现错误账户:" + username + ",错误段落:" + e + ",错误消息:" + e.getMessage());
+
+            }
+        }
+        log.info("方法返回结果账户:" + username + ",开始时间:" + beginTime + ",结束时间:" + endTime + ",返回消息:" + pmr.getData());
+
+    }
+
+    public SsoLogVo SsoLogListPoToVo(SsoLog po) {
+        SsoLogVo vo = new SsoLogVo();
+        vo.setC_LOG_ID(po.getC_LOG_ID());
+        vo.setC_OPERATE_MODULE(po.getC_OPERATE_MODULE());
+        vo.setC_OPERATE_CONTENT(po.getC_OPERATE_CONTENT());
+        vo.setC_IP(po.getC_IP());
+        vo.setC_OPERATE_USER(po.getC_OPERATE_USER());
+        vo.setT_OPERATE_TIME(po.getT_OPERATE_TIME());
+        String time = po.getT_OPERATE_TIME();
+        //System.out.println(time);
+        if (time.length() > 19) {
+            time = dealDateFormat(time);
+            vo.setT_OPERATE_TIME(time);
+        }
+        return vo;
+    }
+
+
+    public JSONObject getJSONParam(HttpServletRequest request) {
+        JSONObject jsonParam = null;
+        try {
+            // 获取输入流
+            BufferedReader streamReader = new BufferedReader(new InputStreamReader(request.getInputStream(), "UTF-8"));
+
+            // 写入数据到Stringbuilder
+            StringBuilder sb = new StringBuilder();
+            String line = null;
+            while ((line = streamReader.readLine()) != null) {
+                sb.append(line);
+            }
+            jsonParam = JSONObject.parseObject(sb.toString());
+            // 直接将json信息打印出来
+            if (jsonParam != null) {
+                //logger.info(jsonParam.toJSONString());
+            } else {
+                //logger.info("请求JSON为空");
+            }
+        } catch (Exception e) {
+            log.error("方法出现错误" + ",错误段落:" + e + ",错误消息:" + e.getMessage());
+
+        }
+        return jsonParam;
+    }
+
+    public static String dealDateFormat(String oldDate) {
+        Date date1 = null;
+        DateFormat df2 = null;
+        try {
+            DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
+            Date date = df.parse(oldDate);
+            SimpleDateFormat df1 = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy", Locale.UK);
+            date1 = df1.parse(date.toString());
+            df2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        } catch (ParseException e) {
+            log.error("方法出现错误,错误段落:" + e + ",错误消息:" + e.getMessage());
+
+        }
+        return df2.format(date1);
+    }
+
+    /**
+     * 获取精确到毫秒的时间戳
+     *
+     * @param date
+     * @return
+     **/
+    public static Long getTimestamp(Date date) {
+        if (null == date) {
+            return (long) 0;
+        }
+        String timestamp = String.valueOf(date.getTime());
+        return Long.valueOf(timestamp);
+    }
+
+    /**
+     * 操作日志记录
+     *
+     * @param request,C_OPERATE_MODULE,C_OPERATE_CONTENT
+     * @return
+     **/
+    public void SetSsoLog(HttpServletRequest request, String C_OPERATE_MODULE, String C_OPERATE_CONTENT) {
+        String username = (String) request.getSession().getAttribute("username");
+        SsoLog ssoLog = new SsoLog();
+        //获取id号码
+        Date dp = new Date();
+        ssoLog.setC_LOG_ID(getTimestamp(dp) + "");
+        //获取用户姓名
+        String uName = usersMapper.getUserName(username);
+        ssoLog.setC_OPERATE_USER(uName);
+        //获取客户端IP
+        CusAccessObjectUtil caou = new CusAccessObjectUtil();
+        String ip = caou.getIpAddr(request);
+        ssoLog.setC_IP(ip);
+        //获取用户操作模块
+        ssoLog.setC_OPERATE_MODULE(C_OPERATE_MODULE);
+        //获取用户操作内容
+        ssoLog.setC_OPERATE_CONTENT(C_OPERATE_CONTENT);
+        //插入数据库中
+        ssoLogMapper.addSsoLog(ssoLog);
+    }
+}

+ 51 - 0
src/main/java/com/zhou/mapper/CloudOutboundMapper.java

@@ -0,0 +1,51 @@
+package com.zhou.mapper;
+import com.zhou.pojo.CloudOutbound;
+import org.apache.ibatis.annotations.*;
+
+import java.util.List;
+
+@Mapper
+public interface CloudOutboundMapper {
+
+    //查找云外呼数据集合
+    //@Select("select *,insert(C_CUSTOMER_NAME,4,4,'****')as C_CUSTOMER_PHONE_S from t_cloud_call_list order by T_CRT_TIME desc")
+    @Select("select *, concat(left(C_CUSTOMER_PHONE,3),'****') as C_CUSTOMER_PHONE_S from t_cloud_call_list ")
+    public List<CloudOutbound> getCloudOutboundList();
+
+    @Select("select *, concat(left(C_CUSTOMER_PHONE,3),'****') as C_CUSTOMER_PHONE_S from t_cloud_call_list  where C_ID= #{C_ID}  ")
+    public CloudOutbound getCloudOutboundListid(String C_ID);
+    //查找云外呼数据集合条件查询
+    @Select("select *, concat(left(C_CUSTOMER_PHONE,3),'****') as C_CUSTOMER_PHONE_S from t_cloud_call_list where  T_CRT_TIME>=#{beginTime} and T_CRT_TIME<#{endTime}  " +
+            "and (C_CREATOR=#{name } or C_CREATOR='') ")
+
+    public List<CloudOutbound> getCloudOutboundListS(String beginTime,String endTime ,String name);
+
+    //查找云外呼数据集合条件查询
+    @Select("select *, concat(left(C_CUSTOMER_PHONE,3),'****') as C_CUSTOMER_PHONE_S from t_cloud_call_list where  T_CRT_TIME>=#{beginTime} and T_CRT_TIME<#{endTime}  ")
+
+    public List<CloudOutbound> getCloudOutboundListStwo(String beginTime,String endTime );
+    //插入新的云外呼数据
+    @Insert("insert into t_cloud_call_list (C_ID , C_CUSTOMER_NAME , C_CUSTOMER_PHONE , C_AGENT_NAME , C_DEVICE_ID , C_BIND_PHONE , C_DISPLAY_ORIGIN , T_CRT_TIME , C_CREATOR , N_CONTACT , N_CONNECT  ) " +
+            "values (#{C_ID }, #{C_CUSTOMER_NAME }, #{C_CUSTOMER_PHONE }, #{C_AGENT_NAME }, #{C_DEVICE_ID },#{ C_BIND_PHONE }, #{C_DISPLAY_ORIGIN }, sysdate() , #{C_CREATOR }, #{N_CONTACT} , #{N_CONNECT} )")
+    public int addCloudOutbound(CloudOutbound cloudOutbound);
+
+    //根据云外呼ID删除该条数据
+    @Delete(" delete from t_cloud_call_list where   C_ID= #{C_ID} ; ")
+    public void delCloudOutbound(String C_ID);
+
+    @Delete(" delete from t_cloud_call_list where  C_ID= ‘1649334667196’  ")
+    public void delCloudOutboundList();
+
+    //根据云外呼ID修改该条数据是否联系状态:0否,1是
+    @Update("update t_cloud_call_list set " +
+            "N_CONTACT  = 1 " +
+            "where C_ID=#{C_ID} ")
+    public int updateCloudOutboundContact(String C_ID);
+
+    //根据云外呼ID修改该条数据是否接通状态:0否,1是
+    @Update("update t_cloud_call_list set " +
+            "N_CONNECT  = 1 " +
+            "where C_ID=#{C_ID} ")
+    public int updateCloudOutboundConnect(String C_ID);
+
+}

+ 16 - 0
src/main/java/com/zhou/mapper/HttpInterfaceMapper.java

@@ -0,0 +1,16 @@
+package com.zhou.mapper;
+
+import com.zhou.pojo.HttpInterface;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+
+@Mapper
+public interface HttpInterfaceMapper {
+
+    //查找日志管理条件查询
+    @Select("SELECT  * from t_httpinterface where  Name= #{Name } and  Method=#{Method } ")
+    public List<HttpInterface> getIpHttpInterface(String Name,String Method );
+
+}

+ 26 - 0
src/main/java/com/zhou/mapper/SsoLogDownloadMapper.java

@@ -0,0 +1,26 @@
+package com.zhou.mapper;
+
+import com.zhou.pojo.SsoLogDownload;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+
+@Mapper
+public interface SsoLogDownloadMapper {
+
+    //select * from table order by limit 0,100000;
+    //查找日志管理下载条件查询C_LOG_ID  as clogid ,
+    @Select("SELECT  C_OPERATE_MODULE as coperatemodule ,C_OPERATE_CONTENT as coperatecontent ,C_IP  as cip ,C_OPERATE_USER  as coperateuser ,T_OPERATE_TIME  as toperatetime from t_sso_log where  T_OPERATE_TIME>=#{beginTime} and T_OPERATE_TIME<#{endTime}  " +
+            "and C_OPERATE_USER like '%' #{name } '%'  order by toperatetime  desc limit 0,100000   ")
+    public List<SsoLogDownload> getSsoLogDownloadListOne(String beginTime,String endTime ,String name);
+
+    //查找日志管理下载条件查询C_LOG_ID  as clogid ,
+    @Select("SELECT  C_OPERATE_MODULE as coperatemodule ,C_OPERATE_CONTENT as coperatecontent ,C_IP  as cip ,C_OPERATE_USER  as coperateuser ,T_OPERATE_TIME  as toperatetime from t_sso_log where  T_OPERATE_TIME>=#{beginTime} and T_OPERATE_TIME<#{endTime}  order by toperatetime  desc limit 0,100000  ")
+    public List<SsoLogDownload> getSsoLogDownloadListtwo(String beginTime,String endTime );
+
+
+
+
+
+}

+ 32 - 0
src/main/java/com/zhou/mapper/SsoLogMapper.java

@@ -0,0 +1,32 @@
+package com.zhou.mapper;
+
+import com.zhou.pojo.SsoLog;
+import org.apache.ibatis.annotations.Insert;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Mapper
+public interface SsoLogMapper {
+
+    //查找日志管理所有日志
+    @Select("SELECT  * from t_sso_log ")
+    public List<SsoLog> getSsoLogList();
+
+    //查找日志管理条件查询
+    @Select("SELECT  * from t_sso_log where  T_OPERATE_TIME>=#{beginTime} and T_OPERATE_TIME<#{endTime}  and C_OPERATE_USER like '%' #{name} '%'  ")
+    public List<SsoLog> getSsoLogListOne(String beginTime,String endTime ,String name);
+
+    //查找日志管理条件查询
+    @Select("SELECT * from t_sso_log where  T_OPERATE_TIME >= #{beginTime} and T_OPERATE_TIME <= #{endTime}")
+    public List<SsoLog> getSsoLogtwo(String beginTime,String endTime );
+
+    //插入日志管理数据
+    @Insert("insert into t_sso_log (C_LOG_ID , C_OPERATE_MODULE , C_OPERATE_CONTENT , C_IP , C_OPERATE_USER , T_OPERATE_TIME  ) " +
+            "values (#{C_LOG_ID}, #{C_OPERATE_MODULE}, #{C_OPERATE_CONTENT}, #{C_IP}, #{C_OPERATE_USER},sysdate() )")
+    public int addSsoLog(SsoLog ssoLog);
+
+}

+ 53 - 0
src/main/java/com/zhou/mapper/UsersMapper.java

@@ -0,0 +1,53 @@
+package com.zhou.mapper;
+
+import com.zhou.pojo.Users;
+import org.apache.ibatis.annotations.*;
+
+import java.util.List;
+@Mapper
+public interface UsersMapper {
+
+    @Select("select * from userinfo where account like CONCAT('%',#{account},'%') and userName like CONCAT('%',#{userName},'%')")
+    public List<Users> getUsersList(String account,String userName);
+
+    //根据account查找
+    @Select("select * from userinfo where account = #{account}")
+    public List<Users> getUsersListByAccount(String account);
+
+    //获取account 清单
+    @Select("select account  from userinfo ")
+    public List<String> getAccountList();
+    //获取用户权限
+    @Select("select Permission  from userinfo where account = #{account}")
+    public String getPermissionList(String account);
+    //获取用户姓名
+    @Select("select UserName  from userinfo where account = #{account}")
+    public String getUserName(String account);
+
+    @Insert("insert into userinfo (account,userName,domainName,department,role,permission,email,createTime,createUser,updateTime,updateUser) " +
+            "values (#{account},#{userName},#{domainName},#{department},#{role},#{permission},#{email},sysdate(),#{createUser},sysdate(),#{updateUser})")
+    public int add(Users users);
+
+    @Delete(" delete from userinfo where userId= #{userId} ")
+    public void del(int userId);
+
+    @Select("select UserName  from userinfo where  userId= #{userId}")
+    public String getIdUserName(int userId);
+
+    @Select("select * from userinfo where userId= #{userId} ")
+    public Users getUser(int userId);
+
+    @Update("update userinfo set " +
+            "account = #{account}," +
+            "userName = #{userName}," +
+            "domainName = #{domainName}," +
+            "department = #{department}," +
+            "role = #{role} ," +
+            "permission = #{permission}, " +
+            "email = #{email}, " +
+            "updateTime = sysdate(), " +
+            "updateUser = #{updateUser} " +
+            "where userId=#{userId} ")
+    public int update(Users users);
+
+}

+ 34 - 0
src/main/java/com/zhou/pojo/CloudOutbound.java

@@ -0,0 +1,34 @@
+package com.zhou.pojo;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class CloudOutbound {
+    //主键ID
+    private String C_ID;
+    //客户姓名
+    private String C_CUSTOMER_NAME;
+    //客户号码
+    private String C_CUSTOMER_PHONE;
+    //坐席姓名
+    private String C_AGENT_NAME;
+    //坐席分机
+    private String C_DEVICE_ID;
+    //坐席手机
+    private String C_BIND_PHONE;
+    //外呼显示号码
+    private String C_DISPLAY_ORIGIN;
+    //名单导入时间
+    private String T_CRT_TIME;
+    //名单导入人
+    private String C_CREATOR;
+    //是否联系:0否,1是
+    private int N_CONTACT;
+    //是否接通:0否,1是
+    private int N_CONNECT;
+
+    //脱敏客户号码
+    private String C_CUSTOMER_PHONE_S;
+}

+ 36 - 0
src/main/java/com/zhou/pojo/CloudOutboundDTO.java

@@ -0,0 +1,36 @@
+package com.zhou.pojo;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class CloudOutboundDTO {
+    //主键ID
+    private String C_ID;
+    //客户姓名
+    private String C_CUSTOMER_NAME;
+    //客户号码
+    private String C_CUSTOMER_PHONE;
+    //坐席姓名
+    private String C_AGENT_NAME;
+    //坐席分机
+    private String C_DEVICE_ID;
+    //坐席手机
+    private String C_BIND_PHONE;
+    //外呼显示号码
+    private String C_DISPLAY_ORIGIN;
+    //名单导入时间
+    private String T_CRT_TIME;
+    //名单导入人
+    private String C_CREATOR;
+    //是否联系:0否,1是
+    private int N_CONTACT;
+    //是否接通:0否,1是
+    private int N_CONNECT;
+
+    //脱敏客户号码
+    private String C_CUSTOMER_PHONE_S;
+    private int start = 1;
+    private int size = 20;
+}

+ 34 - 0
src/main/java/com/zhou/pojo/CloudOutboundVo.java

@@ -0,0 +1,34 @@
+package com.zhou.pojo;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class CloudOutboundVo {
+    //主键ID
+    private String C_ID;
+    //客户姓名
+    private String C_CUSTOMER_NAME;
+    //客户号码
+    private String C_CUSTOMER_PHONE;
+    //坐席姓名
+    private String C_AGENT_NAME;
+    //坐席分机
+    private String C_DEVICE_ID;
+    //坐席手机
+    private String C_BIND_PHONE;
+    //外呼显示号码
+    private String C_DISPLAY_ORIGIN;
+    //名单导入时间
+    private String T_CRT_TIME;
+    //名单导入人
+    private String C_CREATOR;
+    //是否联系:0否,1是
+    private int N_CONTACT;
+    //是否接通:0否,1是
+    private int N_CONNECT;
+
+    //脱敏客户号码
+    private String C_CUSTOMER_PHONE_S;
+}

+ 13 - 0
src/main/java/com/zhou/pojo/HttpInterface.java

@@ -0,0 +1,13 @@
+package com.zhou.pojo;
+
+import lombok.Data;
+
+@Data
+public class HttpInterface {
+    //ip地址
+    private String URL;
+    //方法名称
+    private String Method;
+    //对应名称
+    private String Name;
+}

+ 37 - 0
src/main/java/com/zhou/pojo/SsoLog.java

@@ -0,0 +1,37 @@
+package com.zhou.pojo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+
+
+
+import lombok.Data;
+@ColumnWidth(20) //列宽
+@ContentRowHeight(20)//数据行高
+@HeadRowHeight(30)//表头高
+@Data
+@ExcelIgnoreUnannotated   //解决不加ExcelProperty注解的,也会出现在excel中
+
+public class SsoLog {
+    //ID主键
+    @ExcelProperty(value = "ID主键",index = 0)
+    private String C_LOG_ID ;
+    // 操作模块
+    @ExcelProperty(value = "操作模块",index = 1)
+    private String C_OPERATE_MODULE;
+    // 操作内容
+    @ExcelProperty(value = "操作内容",index = 2)
+    private String C_OPERATE_CONTENT;
+    //客户端IP
+    @ExcelProperty(value = "客户端IP",index = 3)
+    private String C_IP ;
+    //操作人
+    @ExcelProperty(value = "操作人",index = 4)
+    private String C_OPERATE_USER ;
+    // 操作时间
+    @ExcelProperty(value = "操作时间",index = 5)
+    private String T_OPERATE_TIME ;
+}

+ 22 - 0
src/main/java/com/zhou/pojo/SsoLogDTO.java

@@ -0,0 +1,22 @@
+package com.zhou.pojo;
+
+import lombok.Data;
+
+@Data
+public class SsoLogDTO {
+    //ID主键
+    private String C_LOG_ID ;
+    // 操作模块
+    private String C_OPERATE_MODULE;
+    // 操作内容
+    private String C_OPERATE_CONTENT;
+    //客户端IP
+    private String C_IP ;
+    //操作人
+    private String C_OPERATE_USER ;
+    // 操作时间
+    private String T_OPERATE_TIME ;
+
+    private int start = 1;
+    private int size = 20;
+}

+ 35 - 0
src/main/java/com/zhou/pojo/SsoLogDownload.java

@@ -0,0 +1,35 @@
+package com.zhou.pojo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import lombok.Data;
+
+@ColumnWidth(20) //列宽
+@ContentRowHeight(20)//数据行高
+@HeadRowHeight(30)//表头高
+@Data
+@ExcelIgnoreUnannotated   //解决不加ExcelProperty注解的,也会出现在excel中
+
+public class SsoLogDownload {
+    //ID主键
+   // @ExcelProperty(value = "ID主键",index = 0)
+    //private String clogid ;
+    // 操作模块
+    @ExcelProperty(value = "操作模块",index = 0)
+    private String coperatemodule;
+    // 操作内容
+    @ExcelProperty(value = "操作内容",index = 1)
+    private String coperatecontent;
+    //客户端IP
+    @ExcelProperty(value = "客户端IP",index = 2)
+    private String cip ;
+    //操作人
+    @ExcelProperty(value = "操作人",index = 3)
+    private String coperateuser ;
+    // 操作时间
+    @ExcelProperty(value = "操作时间",index = 4)
+    private String toperatetime ;
+}

+ 20 - 0
src/main/java/com/zhou/pojo/SsoLogVo.java

@@ -0,0 +1,20 @@
+package com.zhou.pojo;
+
+import lombok.Data;
+
+@Data
+public class SsoLogVo {
+    //ID主键
+    private String C_LOG_ID ;
+    // 操作模块
+    private String C_OPERATE_MODULE;
+    // 操作内容
+    private String C_OPERATE_CONTENT;
+    //客户端IP
+    private String C_IP ;
+    //操作人
+    private String C_OPERATE_USER ;
+    // 操作时间
+    private String T_OPERATE_TIME ;
+
+}

+ 22 - 0
src/main/java/com/zhou/pojo/Users.java

@@ -0,0 +1,22 @@
+package com.zhou.pojo;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class Users {
+    private int userId;
+    private String account;
+    private String userName;
+    private String domainName;
+    private String department;
+    private int role;
+    private String permission;
+    private String email;
+    private Date createTime;
+    private String createUser;
+    private Date updateTime;
+    private String updateUser;
+
+}

+ 25 - 0
src/main/java/com/zhou/pojo/UsersDTO.java

@@ -0,0 +1,25 @@
+package com.zhou.pojo;
+
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class UsersDTO {
+    private int userId;
+    private String account ="";
+    private String userName = "";
+    private String domainName;
+    private String department;
+    private int role;
+    private List<String> permission;
+    private String email;
+    private Date createTime;
+    private String createUser;
+    private Date updateTime;
+    private String updateUser;
+
+    private int start = 1;
+    private int size = 20;
+}

+ 23 - 0
src/main/java/com/zhou/pojo/UsersVo.java

@@ -0,0 +1,23 @@
+package com.zhou.pojo;
+
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class UsersVo {
+    private int userId;
+    private String account;
+    private String userName;
+    private String domainName;
+    private String department;
+    private int role;
+    private List<String> permission;
+    private String email;
+    private Date createTime;
+    private String createUser;
+    private Date updateTime;
+    private String updateUser;
+
+}

+ 59 - 0
src/main/java/com/zhou/tools/CryptorTest.java

@@ -0,0 +1,59 @@
+package com.zhou.tools;
+//import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
+//import org.jasypt.encryption.pbe.config.EnvironmentPBEConfig;
+
+/**
+ * Created By charmsongo 21:04 2018/11/30
+ */
+public class CryptorTest {
+
+    /**
+     * 加密方法
+     * @param plainText 需加密文本
+     */
+    public static void testEncrypt(String plainText) {
+        /*StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor();
+        EnvironmentPBEConfig config = new EnvironmentPBEConfig();
+
+        // 加密的算法,这个算法是默认的
+        config.setAlgorithm("PBEWithMD5AndDES");
+        //加密的密钥,自定义
+        config.setPassword("CSEbfYkitulv73I2p0mXI50JMXoaxZTKJ7");
+        //config.setPassword("welljcloudSSOadmin1234");
+        standardPBEStringEncryptor.setConfig(config);
+        String encryptedText = standardPBEStringEncryptor.encrypt(plainText);
+        System.out.println(encryptedText);*/
+    }
+
+    /**
+     * 解密方法
+     * @param encryptedText 需解密文本
+     */
+    public static void testDecrypt(String encryptedText) {
+        /*StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor();
+        EnvironmentPBEConfig config = new EnvironmentPBEConfig();
+
+        // 解密的算法,需同加密算法相同
+        config.setAlgorithm("PBEWithMD5AndDES");
+        //解密的密钥,需同加密密钥相同
+        config.setPassword("CSEbfYkitulv73I2p0mXI50JMXoaxZTKJ7");
+        //config.setPassword("welljcloudSSOadmin1234");
+        standardPBEStringEncryptor.setConfig(config);
+        String plainText = standardPBEStringEncryptor.decrypt(encryptedText);
+        System.out.println(plainText);*/
+    }
+
+//    public static void main(String[] args){
+//            //testEncrypt("root");
+//            //testEncrypt("wellcloud_mgr");
+//            testEncrypt("wellcloud_mgr*1");
+//            //testEncrypt("wellcloud_app");
+//            //testEncrypt("PeYl_#2021");
+//            //testDecrypt("ZmJ46MHlPwd9UkOsISlzmg==");
+//            //testDecrypt("fi7qf9A9bw9UxvevvZkCi+i6eD3qVJ25");
+//            testDecrypt("Nlm4tixTq/AlTb1ynRC/qCQOtYd84R4D");
+//            //testDecrypt("D42eehyQ51jApV92mInj2/c5Da0BeENY");
+//            //testDecrypt("f46xvu2pjhW+4LG2EzQ+B6XN9wvYFENK");
+//
+//    }
+}

+ 46 - 0
src/main/java/com/zhou/tools/CusAccessObjectUtil.java

@@ -0,0 +1,46 @@
+package com.zhou.tools;
+import lombok.extern.slf4j.Slf4j;
+
+import javax.servlet.http.HttpServletRequest;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+@Slf4j
+public class CusAccessObjectUtil {
+
+    /**
+     * 获取当前网络ip
+     * @param request
+     * @return
+     */
+    public String getIpAddr(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) {
+                    log.error("方法出现错误,错误消息:"+e.getMessage()+",内容:"+e);
+
+                }
+                ipAddress= inet.getHostAddress();
+            }
+        }
+        //对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
+        if(ipAddress!=null && ipAddress.length()>15){ //"***.***.***.***".length() = 15
+            if(ipAddress.indexOf(",")>0){
+                ipAddress = ipAddress.substring(0,ipAddress.indexOf(","));
+            }
+        }
+        return ipAddress;
+    }
+}
+

+ 148 - 0
src/main/java/com/zhou/tools/DesUtils.java

@@ -0,0 +1,148 @@
+package com.zhou.tools;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.codec.binary.Base64;
+
+import javax.crypto.Cipher;
+import javax.crypto.SecretKey;
+import javax.crypto.SecretKeyFactory;
+import javax.crypto.spec.DESedeKeySpec;
+import java.security.Key;
+import java.security.SecureRandom;
+@Slf4j
+public class DesUtils {
+
+/**
+
+* 3DES加密
+
+*
+
+* @param data
+
+*            数据
+
+* @param key
+
+*            密钥
+
+* @return
+
+*/
+
+	public static String encode(String data, String key) {
+
+		try {
+
+			DESedeKeySpec dks = new DESedeKeySpec(key.getBytes());
+
+			SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede");
+
+			Key secretKey = keyFactory.generateSecret(dks);
+
+			Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
+
+			cipher.init(Cipher.ENCRYPT_MODE, secretKey, new SecureRandom());
+
+			return Base64.encodeBase64String(cipher.doFinal(data.getBytes("utf-8")));
+
+		} catch (Exception e) {
+			log.error("方法出现错误,错误消息:"+e.getMessage()+",内容:"+e);
+
+
+		}
+
+		return null;
+
+	}
+
+
+/**
+
+* 3DES解密
+
+*
+
+* @param key
+
+*            密钥
+
+* @param data
+
+*            密文
+
+* @return
+
+*/
+
+	public static String decode(String data, String key) {
+
+		try {
+
+			Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
+
+			DESedeKeySpec dks = new DESedeKeySpec(key.getBytes());
+
+			SecretKey sk = SecretKeyFactory.getInstance("DESede").generateSecret(dks);
+
+			cipher.init(Cipher.DECRYPT_MODE, sk);
+
+			byte[] result = cipher.doFinal(Base64.decodeBase64(data));
+
+			return new String(result, "utf-8");
+
+		} catch (Exception e) {
+			log.error("方法出现错误,错误消息:"+e.getMessage()+",内容:"+e);
+
+
+		}
+
+		return null;
+
+	}
+
+	public static byte[] hexStringToByteArray(String text) {
+
+		if (text == null)
+
+			return null;
+
+		byte[] result = new byte[text.length() / 2];
+
+		for (int i = 0; i < result.length; ++i) {
+
+			int x = Integer.parseInt(text.substring(i * 2, i * 2 + 2), 16);
+
+			result[i] = x <= 127 ? (byte) x : (byte) (x - 256);
+
+		}
+
+		return result;
+
+	}
+
+	public static String byteArrayToHexString(byte data[]) {
+
+		String result = "";
+
+		for (int i = 0; i < data.length; i++) {
+
+			int v = data[i] & 0xFF;
+
+			String hv = Integer.toHexString(v);
+
+			if (hv.length() < 2) {
+
+				result += "0";
+
+			}
+
+			result += hv;
+
+		}
+
+		return result;
+
+	}
+
+}

+ 111 - 0
src/main/java/com/zhou/tools/FileURL.java

@@ -0,0 +1,111 @@
+package com.zhou.tools;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtils;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+@Slf4j
+public class FileURL {
+    /* 根据文档格式返回相应的文档对象
+     * @param file
+     * @param pattern 文档格式: xls, xlsx
+     * @return
+     */
+    public static Workbook readExcel(MultipartFile file, String pattern) {
+        //文档对象
+        Workbook workbook = null;
+        if (file != null) {
+            try {
+                //获取输入流
+                InputStream is = file.getInputStream();
+                if ("xls".equals(pattern)) {
+                    //2003版格式-xls
+                    return workbook = new HSSFWorkbook(is);
+                } else if ("xlsx".equals(pattern)) {
+                    //2007及以上版本格式-xlsx
+                    return workbook = new XSSFWorkbook(is);
+                } else {
+                    return null;
+                }
+            } catch (FileNotFoundException e) {
+                log.error("方法出现错误,错误消息:"+e.getMessage()+",内容:"+e);
+
+            } catch (IOException e) {
+                log.error("方法出现错误,错误消息:"+e.getMessage()+",内容:"+e);
+
+            }
+        }
+        return workbook;
+    }
+
+    /**
+     * 判断上传的文件是否是EXCEL文件
+     * @param file
+     * @return
+     */
+    public static Boolean isEXCEL(MultipartFile file) {
+        if (file != null) {
+            //文件名
+            String fileName = file.getOriginalFilename();
+            //文件后缀
+            String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
+            //转小写
+            suffix = suffix.toLowerCase();
+            if ("xls".equals(suffix) || "xlsx".equals(suffix)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public static List<List<String>> readExcelContents(MultipartFile file, String pattern) {
+        List<List<String>> listRow = new ArrayList<>();;
+        //文档对象
+        Workbook workbook = null;
+        //表格对象
+        Sheet sheet = null;
+        //非空和文件格式判断
+        if (isEXCEL(file)) {
+            workbook = readExcel(file, pattern);
+        }
+        if (workbook != null) {
+            //获取文档首个表格
+            sheet = workbook.getSheetAt(0);
+            //获取最大行数
+            int rowNum = sheet.getPhysicalNumberOfRows();
+            //行对象
+            Row row = null;
+            //单元格数据
+            String cellData = null;
+            //跳过第一行标题栏
+            for (int i = 1; i < rowNum; i++) {
+                row = sheet.getRow(i);
+                List<String> listCell = new ArrayList<>();
+                if (StringUtils.isBlank(row.getCell(0).toString())){
+                    break;
+                }
+//              ------------------------这边需要修改------------------------
+                //遍历列    --- ---   3列数据
+                for (int j = 0; j < 6; j++){
+                    cellData = row.getCell(j).toString();
+                    listCell.add(cellData);
+                }
+//               --------------------------------------------------------
+                listRow.add(listCell);
+            }
+        }
+        return listRow;
+    }
+
+
+}

+ 26 - 0
src/main/java/com/zhou/tools/GlobalExceptionHandler.java

@@ -0,0 +1,26 @@
+package com.zhou.tools;
+
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.ResponseBody;
+import java.util.Map;
+
+@ControllerAdvice
+@Slf4j
+public class GlobalExceptionHandler {
+
+
+    /**
+     * @author seven
+     */
+    @ExceptionHandler(Exception.class)
+    @ResponseBody
+    public Map<String,String> error(Exception e){
+        log.info("Spring全局异常捕获",e);
+        //return null;
+        return MsgUtil.fail();
+    }
+}
+

+ 67 - 0
src/main/java/com/zhou/tools/HttpClientUtil.java

@@ -0,0 +1,67 @@
+package com.zhou.tools;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.StatusLine;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.config.RequestConfig;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.message.BasicHeader;
+import org.apache.http.params.CoreConnectionPNames;
+import org.apache.http.protocol.HTTP;
+import org.apache.http.util.EntityUtils;
+//import org.apache.log4j.Logger;
+import org.codehaus.jettison.json.JSONObject;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+@Slf4j
+/**
+ * 利用HttpClient进行post请求的工具类
+ * @ClassName: HttpClientUtil
+ * @author seven
+ *  
+ */
+public class HttpClientUtil {
+	public static String doPost(String url,JSONObject jsonObject,String charset){
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        log.info("方法调用,接口类型:https,调用地址:"+url+",调用json"+jsonObject.toString());
+        HttpClient httpClient = null;
+        HttpPost httpPost = null;
+        String result = null;
+        try{
+            httpClient = new SSLClient();
+            httpPost = new HttpPost(url);
+            httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 4000);
+            httpPost.addHeader("Content-Type", "application/json");
+            StringEntity s = new StringEntity(jsonObject.toString(), "utf-8");
+            s.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,
+                    "application/json"));
+            //设置参数到请求对象中
+            httpPost.setEntity(s);
+            //接口等待时长
+            RequestConfig config = RequestConfig.custom().setConnectTimeout(5000).setConnectionRequestTimeout(3000).setSocketTimeout(3000).build();
+            //真对网络端口504做出以下两端代码处理CONNECTION_TIMEOUT,SO_TIMEOUT
+            httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT,5000);
+            httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT,4000);
+            httpPost.setConfig(config);
+            HttpResponse response = httpClient.execute(httpPost);
+            if(response != null){
+                HttpEntity resEntity = response.getEntity();
+                if(resEntity != null){
+                    result = EntityUtils.toString(resEntity,charset);
+                }
+            }
+        }catch(Exception e){
+            //System.out.println("----HttpClientUtil出现错误:   "+ex.getMessage()+"----");
+            log.error("方法出现错误,错误消息:"+e.getMessage()+",内容:"+e);
+
+        }
+        log.info("方法返回,接口类型:https,返回消息:"+result);
+
+        return result;
+    }
+
+}

+ 22 - 0
src/main/java/com/zhou/tools/IPUtil.java

@@ -0,0 +1,22 @@
+package com.zhou.tools;
+
+import java.net.InetAddress;
+
+import lombok.extern.slf4j.Slf4j;
+import ch.qos.logback.classic.pattern.ClassicConverter;
+import ch.qos.logback.classic.spi.ILoggingEvent;
+@Slf4j
+public class IPUtil extends ClassicConverter {
+
+    @Override
+    public String convert(ILoggingEvent event) {
+    String ip = null;
+     try {
+            ip= InetAddress.getLocalHost().getHostAddress();
+        } catch (Exception e) {
+        	log.error("获取ip异常",e);
+        	ip= "获取ip异常";
+        }
+        return  ip;
+    }
+}

+ 49 - 0
src/main/java/com/zhou/tools/MDCFilter.java

@@ -0,0 +1,49 @@
+package com.zhou.tools;
+import java.io.IOException;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+
+import org.slf4j.MDC;
+import org.springframework.stereotype.Component;
+
+ 
+/**
+ * 拦截请求 给请求添加唯一id
+ * @author Administrator
+ *
+ */
+@Component
+public class MDCFilter implements Filter {
+ 
+    public static final String ProcessId_ID = "processId";
+    
+    
+    public static final String Call_ID = "callId";
+    @Override
+    public void init(FilterConfig filterConfig) throws ServletException {
+    }
+ 
+    @Override
+    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
+    	
+    	String uuid =StringUtil.get32UUID();
+        MDC.put(ProcessId_ID, uuid);
+        try {
+            chain.doFilter(request, response);
+        } finally {
+            MDC.clear();
+        }
+    }
+ 
+    @Override
+    public void destroy() {
+    }
+ 
+ 
+}
+ 

+ 38 - 0
src/main/java/com/zhou/tools/MsgUtil.java

@@ -0,0 +1,38 @@
+package com.zhou.tools;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.slf4j.MDC;
+
+
+
+public class MsgUtil {
+	
+	public static Map<String, String> msg(int state,String strMsg,Map<String, String> result){
+		Map<String,String> msg = new HashMap<String, String>();
+		
+		msg.put("nanhang_business_code", state+"");
+		if(StringUtil.isEmpty(strMsg)){
+			msg.put("nanhang_business_msg", "无");
+		}else{
+			msg.put("nanhang_business_msg", strMsg);
+		}
+		msg.put(MDCFilter.ProcessId_ID, MDC.get(MDCFilter.ProcessId_ID));
+		
+		if(result!=null&&result.size()>0){
+			msg.putAll(result);
+		}
+		
+		return msg;
+	}
+
+	public static Map<String, String> fail() {
+		
+		Map<String,String> msg = new HashMap<String, String>();
+		msg.put("nanhang_business_code", "500");
+		msg.put("nanhang_business_msg", "系统异常");
+		msg.put(MDCFilter.ProcessId_ID, MDC.get(MDCFilter.ProcessId_ID));
+		return msg;
+	}
+}

+ 24 - 0
src/main/java/com/zhou/tools/PageHelperConfig.java

@@ -0,0 +1,24 @@
+package com.zhou.tools;
+
+import com.github.pagehelper.PageHelper;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.Properties;
+
+@Configuration
+public class PageHelperConfig {
+    @Bean
+    public PageHelper pageHelper() {
+        PageHelper pageHelper = new PageHelper();
+        Properties properties = new Properties();
+        properties.setProperty("offsetAsPageNum", "true");
+        properties.setProperty("rowBoundsWithCount", "true");
+        properties.setProperty("reasonable", "true");
+        properties.setProperty("dialect", "mysql");
+        pageHelper.setProperties(properties);
+
+        return pageHelper;
+
+    }
+}

+ 17 - 0
src/main/java/com/zhou/tools/Parameter.java

@@ -0,0 +1,17 @@
+package com.zhou.tools;
+
+import lombok.Data;
+
+/**
+ * 返回消息实体类
+ */
+
+@Data
+public class Parameter {
+    //状态代码
+    public int Type;
+    //回传消息(分实体类,或提示消息)
+    public Object Data;
+    //日志ID
+    public String uuid;
+}

+ 69 - 0
src/main/java/com/zhou/tools/PostHttp.java

@@ -0,0 +1,69 @@
+package com.zhou.tools;
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.http.HttpEntity;
+import org.apache.http.ParseException;
+import org.apache.http.client.config.RequestConfig;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.message.BasicHeader;
+import org.apache.http.protocol.HTTP;
+import org.apache.http.util.EntityUtils;
+import org.codehaus.jettison.json.JSONObject;
+
+@Slf4j
+/**
+ * 利用HttpClient进行post请求的工具类
+ * @ClassName: HttpClientUtil
+ * @author seven
+ *
+ */
+public class PostHttp {
+
+    public  String send(String url, JSONObject jsonObject ) throws ParseException, IOException{
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        log.info("方法调用,接口类型:http,调用地址:"+url+",调用json"+jsonObject.toString());
+
+        String body = "";
+
+        //创建httpclient对象
+        CloseableHttpClient client = HttpClients.createDefault();
+        //创建post方式请求对象
+        HttpPost httpPost = new HttpPost(url);
+
+        //装填参数
+        StringEntity s = new StringEntity(jsonObject.toString(), "utf-8");
+        s.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,
+                "application/json"));
+        //设置参数到请求对象中
+        httpPost.setEntity(s);
+        System.out.println("请求地址:"+url);
+
+        httpPost.setHeader("Content-type", "application/json");
+        httpPost.setHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
+        //构建超时等配置信息
+        RequestConfig config = RequestConfig.custom().setConnectTimeout(500).setConnectionRequestTimeout(500).setSocketTimeout(10 *500).setStaleConnectionCheckEnabled(true).build();
+        httpPost.setConfig(config);
+        //执行请求操作,并拿到结果(同步阻塞)
+        CloseableHttpResponse response = client.execute(httpPost);
+        //获取结果实体
+        HttpEntity entity = response.getEntity();
+        if (entity != null) {
+            //按指定编码转换结果实体为String类型
+            body = EntityUtils.toString(entity, "utf-8");
+            System.out.println("body===="+body);
+        }
+        EntityUtils.consume(entity);
+        //释放链接
+        response.close();
+        log.info("方法调用,接口类型:http,返回结果"+body);
+        return body;
+    }
+
+}

+ 87 - 0
src/main/java/com/zhou/tools/SSLClient.java

@@ -0,0 +1,87 @@
+package com.zhou.tools;
+import java.security.KeyManagementException;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+
+import org.apache.http.client.CookieStore;
+import org.apache.http.conn.ClientConnectionManager;
+import org.apache.http.conn.scheme.Scheme;
+import org.apache.http.conn.scheme.SchemeRegistry;
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
+import org.apache.http.conn.ssl.SSLContextBuilder;
+import org.apache.http.conn.ssl.SSLSocketFactory;
+import org.apache.http.conn.ssl.TrustStrategy;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.http.impl.client.HttpClients;
+//import org.apache.log4j.Logger;
+
+/**
+ * 用于进行Https请求的HttpClient 
+ * @ClassName: SSLClient 
+ * @Description: TODO
+ * @author Devin <xxx>
+ *  
+ */
+public class SSLClient extends DefaultHttpClient {
+	//private static Logger log = Logger.getLogger(SSLClient.class);
+	
+    public SSLClient() throws Exception{
+        super();
+        SSLContext ctx = SSLContext.getInstance("TLS");
+        X509TrustManager tm = new X509TrustManager() {
+                @Override
+                public void checkClientTrusted(X509Certificate[] chain,
+                        String authType) throws CertificateException {
+                }
+                @Override
+                public void checkServerTrusted(X509Certificate[] chain,
+                        String authType) throws CertificateException {
+                }
+                @Override
+                public X509Certificate[] getAcceptedIssuers() {
+                    return null;
+                }
+        };
+        ctx.init(null, new TrustManager[]{tm}, null);
+        SSLSocketFactory ssf = new SSLSocketFactory(ctx,SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
+        ClientConnectionManager ccm = this.getConnectionManager();
+        SchemeRegistry sr = ccm.getSchemeRegistry();
+        sr.register(new Scheme("https", 443, ssf));
+    }
+    
+    
+  /*  public static CloseableHttpClient createSSLClientDefault(CookieStore cookieStore) {
+
+        SSLContext sslContext;
+        try {
+            sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
+                //信任所有
+                @Override
+                public boolean isTrusted(X509Certificate[] xcs, String string){
+                    return true;
+                }
+            }).build();
+
+            SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext);
+            if(cookieStore == null){
+                return HttpClients.custom().setSSLSocketFactory(sslsf).build();
+            }else{
+                return HttpClients.custom().setSSLSocketFactory(sslsf).setDefaultCookieStore(cookieStore).build();
+            }
+        } catch (KeyStoreException ex) {
+        	log.info("SSLClient证书设置出现问题1:"+ex.getMessage());
+        } catch (NoSuchAlgorithmException ex) {
+        	log.info("SSLClient证书设置出现问题2:"+ex.getMessage());
+        } catch (KeyManagementException ex) {
+        	log.info("SSLClient证书设置出现问题3:"+ex.getMessage());
+        }
+
+        return HttpClients.createDefault();
+    }*/
+}

+ 35 - 0
src/main/java/com/zhou/tools/StringUtil.java

@@ -0,0 +1,35 @@
+package com.zhou.tools;
+
+import java.util.UUID;
+
+
+
+
+public class StringUtil {
+	
+	/**
+	 * 当字符串为null或者为空的时候返回true
+	 * @param str
+	 * @return
+	 */
+	public static boolean isEmpty(String str) {
+		if(str == null || "".equals(str.trim())) {
+			return true;
+		}
+		return false;
+	}
+	
+	/**
+	 * 获取32位UUID
+	 */
+	public static String get32UUID(){
+		return UUID.randomUUID().toString().replaceAll("-", "");
+	}
+	
+	
+
+	
+	
+	
+	
+}

+ 105 - 0
src/main/java/com/zhou/tools/tokens/AuthenticationInterceptor.java

@@ -0,0 +1,105 @@
+package com.zhou.tools.tokens;
+import com.auth0.jwt.JWT;
+import com.auth0.jwt.JWTVerifier;
+import com.auth0.jwt.algorithms.Algorithm;
+import com.auth0.jwt.exceptions.InvalidClaimException;
+import com.auth0.jwt.exceptions.JWTDecodeException;
+import com.auth0.jwt.exceptions.JWTVerificationException;
+import com.auth0.jwt.exceptions.TokenExpiredException;
+import com.zhou.mapper.UsersMapper;
+import com.zhou.pojo.Users;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.method.HandlerMethod;
+import org.springframework.web.servlet.HandlerInterceptor;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.lang.reflect.Method;
+import java.util.List;
+
+/**
+ * @Author : JCccc  登录拦截器,这里主要用于校验token
+ * @CreateTime : 2019/11/27
+ * @Description :
+ **/
+@Slf4j
+public class AuthenticationInterceptor implements HandlerInterceptor {
+    @Resource
+    UsersMapper usersMapper;
+
+    @Override
+    public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object object) throws Exception {
+        httpServletRequest.setCharacterEncoding("UTF-8");
+        String username = (String) httpServletRequest.getSession().getAttribute("username");
+        String token = httpServletRequest.getHeader("token");// 从 http 请求头中取出 token
+        // 如果不是映射到方法直接通过
+        if (!(object instanceof HandlerMethod)) {
+            return true;
+        }
+        HandlerMethod handlerMethod = (HandlerMethod) object;
+        Method method = handlerMethod.getMethod();
+        //检查是否有passToken注解,有则无需进行token校验
+        if (method.isAnnotationPresent(PassToken.class)) {
+            PassToken passToken = method.getAnnotation(PassToken.class);
+            if (passToken.required()) {
+                return true;
+            }
+        }
+        //检查有没有CheckToken的注解
+        if (method.isAnnotationPresent(CheckToken.class)) {
+            CheckToken CheckToken = method.getAnnotation(CheckToken.class);
+            if (CheckToken.required()) {
+                // 执行认证
+                if (token == null) {
+                    throw new RuntimeException("无token,请重新登录");
+                }
+                // 获取 token 中的 user id
+                String userId;
+                try {
+                    userId = JWT.decode(token).getAudience().get(0);
+                } catch (JWTDecodeException j) {
+                    log.error("方法出现错误,账户:"+username+",错误消息:"+j.getMessage()+",内容:"+j);
+                    throw new RuntimeException("您的token已坏掉了,请重新登录获取token");
+                }
+                List<Users> userList = usersMapper.getUsersListByAccount(username);
+                if (userList.size() == 0) {
+                    throw new RuntimeException("用户不存在,请重新登录");
+                }
+                // 验证 token
+                JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256(userList.get(0).getAccount())).build();
+                try {
+                    jwtVerifier.verify(token);
+
+                } catch (InvalidClaimException e) {
+                    log.error("方法出现错误,账户:"+username+",错误消息:"+e.getMessage()+",内容:"+e);
+                    throw new RuntimeException("无效token,请重新登录获取token");
+                } catch (TokenExpiredException e) {
+                    log.error("方法出现错误,账户:"+username+",错误消息:"+e.getMessage()+",内容:"+e);
+                    throw new RuntimeException("token已过期,请重新登录获取token");
+                } catch (JWTVerificationException e) {
+                    log.error("方法出现错误,账户:"+username+",错误消息:"+e.getMessage()+",内容:"+e);
+                    throw new RuntimeException(e.getMessage());
+                }
+                return true;
+            }
+        }
+        return true;
+    }
+
+    @Override
+    public void postHandle(HttpServletRequest httpServletRequest,
+                           HttpServletResponse httpServletResponse,
+                           Object o, ModelAndView modelAndView) throws Exception {
+
+    }
+
+    @Override
+    public void afterCompletion(HttpServletRequest httpServletRequest,
+                                HttpServletResponse httpServletResponse,
+                                Object o, Exception e) throws Exception {
+    }
+
+}

+ 38 - 0
src/main/java/com/zhou/tools/tokens/CheckToken.java

@@ -0,0 +1,38 @@
+package com.zhou.tools.tokens;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * @Author : JCccc
+ * @CreateTime : 2019/11/27
+ * @Description :
+ **/
+@Target({ElementType.METHOD, ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface CheckToken {
+    boolean required() default true;
+}
+
+
+
+/*
+@Target:注解的作用目标
+@Target(ElementType.TYPE)——接口、类、枚举、注解
+@Target(ElementType.FIELD)——字段、枚举的常量
+@Target(ElementType.METHOD)——方法
+@Target(ElementType.PARAMETER)——方法参数
+@Target(ElementType.CONSTRUCTOR) ——构造函数
+@Target(ElementType.LOCAL_VARIABLE)——局部变量
+@Target(ElementType.ANNOTATION_TYPE)——注解
+@Target(ElementType.PACKAGE)——包*/
+
+/*
+@Retention:注解的保留位置
+        RetentionPolicy.SOURCE:这种类型的Annotations只在源代码级别保留,编译时就会被忽略,在class字节码文件中不包含。
+        RetentionPolicy.CLASS:这种类型的Annotations编译时被保留,默认的保留策略,在class文件中存在,但JVM将会忽略,运行时无法获得。
+        RetentionPolicy.RUNTIME:这种类型的Annotations将被JVM保留,所以他们能在运行时被JVM或其他使用反射机制的代码所读取和使用。
+@Document:说明该注解将被包含在javadoc中
+@Inherited:说明子类可以继承父类中的该注解*/
+

+ 77 - 0
src/main/java/com/zhou/tools/tokens/IFToken.java

@@ -0,0 +1,77 @@
+package com.zhou.tools.tokens;
+import javax.servlet.http.HttpServletRequest;
+import com.auth0.jwt.JWT;
+import com.auth0.jwt.JWTVerifier;
+import com.auth0.jwt.algorithms.Algorithm;
+import com.auth0.jwt.exceptions.InvalidClaimException;
+import com.auth0.jwt.exceptions.JWTDecodeException;
+import com.auth0.jwt.exceptions.JWTVerificationException;
+import com.auth0.jwt.exceptions.TokenExpiredException;
+import com.github.pagehelper.PageHelper;
+import com.zhou.pojo.*;
+import lombok.extern.slf4j.Slf4j;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+@Slf4j
+public class IFToken {
+
+    /**
+     * 获取用户的token检测
+     * @author seven
+     * @param token
+     * @return
+     */
+    public static Map<String,Object >  typeTokne(String  username, String token)  {
+        //System.out.println("获取到的token="+token);
+        //初始化时间模板
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        log.info("方法被使用,调用账户:"+username+",token:"+token);
+        Map<String, Object> map = new HashMap<>();
+        //初始化返回消息
+        String message = "当前用户没有权限";
+        //初始化状态码
+        int jurisdiction = 0;
+        if (token == null) {
+            message = "无token,请重新登入";
+            log.info("检测,调用账户:"+username+",token:"+message);
+        }
+        String userID;
+        try {
+            userID = JWT.decode(token).getAudience().get(0);
+        } catch (JWTDecodeException j) {
+            message = "您的token已经损坏,请重新登入获取token";
+            log.error("检测,调用时间:"+format.format(new Date())+",调用账户:"+username+",token:"+message+",内容:"+j+",错误消息:"+j.getMessage());
+        }
+        if (username==null) {
+            message = "用户不存在,请重新登入";
+            log.info("检测,调用时间:"+format.format(new Date())+",调用账户:"+username+",token:"+message);
+        }
+        // 验证 token
+        JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256(username)).build();
+        try {
+            jwtVerifier.verify(token);
+            message = "有效的token";
+            System.out.println(message);
+            jurisdiction = 1;
+
+        } catch (InvalidClaimException e) {
+                message = "无效token,请重新登入获取token";
+                log.error("检测,调用时间:"+format.format(new Date())+",调用账户:"+username+",token:"+message);
+        } catch (TokenExpiredException e) {
+                message = "无效token,请重新登入获取token";
+                log.error("检测,调用时间:"+format.format(new Date())+",调用账户:"+username+",token:"+message+",内容:"+e+",错误消息:"+e.getMessage());
+        } catch (JWTVerificationException e) {
+                log.error("检测,调用时间:"+format.format(new Date())+",调用账户:"+username+",token:token错误"+e.getMessage()+",内容:"+e+",错误消息:"+e.getMessage());
+        }
+        map.put("jurisdiction", jurisdiction);
+        map.put("message", message);
+        log.info("方法返回,返回时间:"+format.format(new Date())+",返回账户:"+username+",返回主要消息:"+message);
+
+        return map;
+
+    }
+
+}

+ 28 - 0
src/main/java/com/zhou/tools/tokens/InterceptorConfig.java

@@ -0,0 +1,28 @@
+package com.zhou.tools.tokens;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+/**
+ * @Author : JCccc 拦截器手动配置类
+ * @CreateTime : 2019/11/27
+ * @Description :
+ **/
+@Configuration
+public class InterceptorConfig implements WebMvcConfigurer {
+
+    @Bean
+    public AuthenticationInterceptor authenticationInterceptor() {
+        return new AuthenticationInterceptor();
+    }
+
+
+    @Override
+    public void addInterceptors(InterceptorRegistry registry) {
+        registry.addInterceptor(authenticationInterceptor())
+                .addPathPatterns("/**");
+    }
+
+}

+ 35 - 0
src/main/java/com/zhou/tools/tokens/PassToken.java

@@ -0,0 +1,35 @@
+package com.zhou.tools.tokens;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * @Author : JCccc
+ * @CreateTime : 2019/11/27
+ * @Description :
+ **/
+@Target({ElementType.METHOD, ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface PassToken {
+    boolean required() default true;
+}
+
+
+/*
+@Target:注解的作用目标
+@Target(ElementType.TYPE)——接口、类、枚举、注解
+@Target(ElementType.FIELD)——字段、枚举的常量
+@Target(ElementType.METHOD)——方法
+@Target(ElementType.PARAMETER)——方法参数
+@Target(ElementType.CONSTRUCTOR) ——构造函数
+@Target(ElementType.LOCAL_VARIABLE)——局部变量
+@Target(ElementType.ANNOTATION_TYPE)——注解
+@Target(ElementType.PACKAGE)——包*/
+/*
+@Retention:注解的保留位置
+        RetentionPolicy.SOURCE:这种类型的Annotations只在源代码级别保留,编译时就会被忽略,在class字节码文件中不包含。
+        RetentionPolicy.CLASS:这种类型的Annotations编译时被保留,默认的保留策略,在class文件中存在,但JVM将会忽略,运行时无法获得。
+        RetentionPolicy.RUNTIME:这种类型的Annotations将被JVM保留,所以他们能在运行时被JVM或其他使用反射机制的代码所读取和使用。
+@Document:说明该注解将被包含在javadoc中
+@Inherited:说明子类可以继承父类中的该注解*/

+ 28 - 0
src/main/java/com/zhou/tools/tokens/Token.java

@@ -0,0 +1,28 @@
+package com.zhou.tools.tokens;
+
+import com.auth0.jwt.JWT;
+import com.auth0.jwt.algorithms.Algorithm;
+import com.zhou.pojo.Users;
+import org.springframework.stereotype.Service;
+import java.util.Date;
+
+/**
+ * @Author : JCccc
+ * @CreateTime : 2019/11/27
+ * @Description :
+ **/
+//@Service
+public class Token  {
+
+    //@Override
+    public static String  getToken(Users user, Date date) {
+        String token = "";
+
+        token = JWT.create()
+                .withAudience(String.valueOf(user.getAccount()))
+                .withExpiresAt(date) //过期时间配置
+                .sign(Algorithm.HMAC256(user.getAccount()));
+        return token;
+    }
+
+}

+ 40 - 0
src/main/resources/application-CX.properties

@@ -0,0 +1,40 @@
+server.ssl.key-store=server.keystore
+server.ssl.key-alias=tomcat
+server.ssl.enabled=true
+server.ssl.key-store-password=123456
+server.ssl.key-store-type=JKS
+server.port=8888
+server.servlet.context-path=/sso
+server.tomcat.max-threads=1200
+server.tomcat.max-connections=10000
+server.tomcat.accept-count=400
+server.tomcat.min-spare-threads=600
+server.connection-timeout=120000
+
+#thymeleaf dispose
+spring.thymeleaf.mode=HTML5
+spring.thymeleaf.encoding=UTF-8
+spring.thymeleaf.servlet.content-type=text/html
+spring.thymeleaf.cache=false
+
+#DBO dispose
+spring.datasource.url=jdbc:mysql://rm-7uqho6qdt6p2kabr5.mysql.rds.inner.y.csair.com:3306/wellcouldrobot?useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true
+spring.datasource.username=wellcloud_app
+spring.datasource.password=PeYl_#2021
+spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
+
+fastjson.parser.safeMode=true
+
+#Company_minute
+EXPIRE_TIME: 240
+
+
+#test_cloudOut
+appId : 41b79a8f-fce8-43e0-9809-e0d1848aad01
+appSecret : 2D06BFE5-10B2-40BC-89A6-5C47AAD08472
+apiKey : kENe0S6cyYnqcHTtqLDwD3lwRFNVTyfd
+
+
+#==================== 日志配合·标准  ============================
+#logging.config=classpath:logback-boot.xml
+logging.config=classpath\:logback.xml

+ 42 - 0
src/main/resources/application-dev.properties

@@ -0,0 +1,42 @@
+server.port=443
+server.ssl.key-store=server.keystore
+server.ssl.key-alias=tomcat
+server.ssl.enabled=true
+server.ssl.key-store-password=123456
+server.ssl.key-store-type=JKS
+
+server.servlet.context-path=/sso
+server.tomcat.max-threads=1200
+server.tomcat.max-connections=10000
+server.tomcat.accept-count=400
+server.tomcat.min-spare-threads=600
+server.connection-timeout=120000
+
+spring.thymeleaf.mode=HTML5
+spring.thymeleaf.encoding=UTF-8
+spring.thymeleaf.servlet.content-type=text/html
+spring.thymeleaf.cache=false
+
+#DBO dispose
+spring.datasource.url=jdbc:mysql://localhost:3306/wellcloudwdas?useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true
+spring.datasource.username=root
+spring.datasource.password=root
+spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
+
+fastjson.parser.safeMode=true
+
+#Company_minute
+EXPIRE_TIME: 240
+
+
+#cloudOut
+appId : 41b79a8f-fce8-43e0-9809-e0d1848aad01
+appSecret : 2D06BFE5-10B2-40BC-89A6-5C47AAD08472
+apiKey : kENe0S6cyYnqcHTtqLDwD3lwRFNVTyfd
+
+
+
+
+#==================== 日志配合·标准  ============================
+
+logging.config=classpath\:logback.xml

+ 42 - 0
src/main/resources/application-pre.properties

@@ -0,0 +1,42 @@
+
+server.ssl.key-store=server.keystore
+server.ssl.key-alias=tomcat
+server.ssl.enabled=true
+server.ssl.key-store-password=123456
+server.ssl.key-store-type=JKS
+server.port=8888
+server.servlet.context-path=/sso
+server.tomcat.max-threads=1200
+server.tomcat.max-connections=10000
+server.tomcat.accept-count=400
+server.tomcat.min-spare-threads=600
+server.connection-timeout=120000
+
+#thymeleaf dispose
+spring.thymeleaf.mode=HTML5
+spring.thymeleaf.encoding=UTF-8
+spring.thymeleaf.servlet.content-type=text/html
+spring.thymeleaf.cache=false
+
+#DBO dispose
+spring.datasource.url=jdbc:mysql://rm-7uqho6qdt6p2kabr5.mysql.rds.inner.y.csair.com:3306/wellcloudwdas?useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true
+spring.datasource.username=wellcloud_app
+spring.datasource.password=PeYl_#2021
+
+spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
+
+fastjson.parser.safeMode=true
+
+#Company_minute
+EXPIRE_TIME: 240
+
+
+#cloudOut
+appId : b0bae2a0-543e-4713-9e47-78cff76bf15d
+appSecret : F818B521-C320-4CF0-8CD5-FA7F1B4DFD4F
+apiKey : DL85JNogr4RhCLyIvCEhty2a8XSFdb0p
+
+
+#==================== 日志配合·标准  ============================
+#logging.config=classpath:logback-boot.xml
+logging.config=classpath\:logback.xml

+ 42 - 0
src/main/resources/application-prod.properties

@@ -0,0 +1,42 @@
+
+server.ssl.key-store=server.keystore
+server.ssl.key-alias=tomcat
+server.ssl.enabled=true
+server.ssl.key-store-password=123456
+server.ssl.key-store-type=JKS
+server.port=8888
+server.servlet.context-path=/sso
+server.tomcat.max-threads=1200
+server.tomcat.max-connections=10000
+server.tomcat.accept-count=400
+server.tomcat.min-spare-threads=600
+server.connection-timeout=120000
+
+#thymeleaf dispose
+spring.thymeleaf.mode=HTML5
+spring.thymeleaf.encoding=UTF-8
+spring.thymeleaf.servlet.content-type=text/html
+spring.thymeleaf.cache=false
+
+#DBO dispose
+spring.datasource.url=jdbc:mysql://rm-7uqho6qdt6p2kabr5.mysql.rds.inner.y.csair.com:3306/wellcloudwdas?useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true
+spring.datasource.username=wellcloud_app
+spring.datasource.password=PeYl_#2021
+
+spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
+
+fastjson.parser.safeMode=true
+
+#Company_minute
+EXPIRE_TIME: 240
+
+
+#cloudOut
+appId : b0bae2a0-543e-4713-9e47-78cff76bf15d
+appSecret : F818B521-C320-4CF0-8CD5-FA7F1B4DFD4F
+apiKey : DL85JNogr4RhCLyIvCEhty2a8XSFdb0p
+
+
+#==================== 日志配合·标准  ============================
+#logging.config=classpath:logback-boot.xml
+logging.config=classpath\:logback.xml

+ 40 - 0
src/main/resources/application-test.properties

@@ -0,0 +1,40 @@
+server.port=443
+server.ssl.key-store=server.keystore
+server.ssl.key-alias=tomcat
+server.ssl.enabled=true
+server.ssl.key-store-password=123456
+server.ssl.key-store-type=JKS
+server.servlet.context-path=/sso
+server.tomcat.max-threads=1200
+server.tomcat.max-connections=10000
+server.tomcat.accept-count=400
+server.tomcat.min-spare-threads=600
+server.connection-timeout=120000
+
+#thymeleaf dispose
+spring.thymeleaf.mode=HTML5
+spring.thymeleaf.encoding=UTF-8
+spring.thymeleaf.servlet.content-type=text/html
+spring.thymeleaf.cache=false
+
+#DBO dispose
+spring.datasource.url=jdbc:mysql://10.79.219.241:3306/wellcloudwdas?useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true
+spring.datasource.username=wellcloud_mgr
+spring.datasource.password=wellcloud_mgr*1
+spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
+
+fastjson.parser.safeMode=true
+
+#Company_minute
+EXPIRE_TIME: 240
+
+
+#test_cloudOut
+appId : 41b79a8f-fce8-43e0-9809-e0d1848aad01
+appSecret : 2D06BFE5-10B2-40BC-89A6-5C47AAD08472
+apiKey : kENe0S6cyYnqcHTtqLDwD3lwRFNVTyfd
+
+
+#==================== 日志配合·标准  ============================
+#logging.config=classpath:logback-boot.xml
+logging.config=classpath\:logback.xml

+ 1 - 0
src/main/resources/application.properties

@@ -0,0 +1 @@
+spring.profiles.active=CX

+ 1 - 0
src/main/resources/fastjson.properties

@@ -0,0 +1 @@
+fastjson.parser.safeMode=true

+ 91 - 0
src/main/resources/logback.xml

@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration scan="true" scanPeriod="60 seconds" debug="true">
+
+    <property name="LOG_HOME" value="./logs" />
+    <property name="APP_Name" value="CLIENT_SERVER" />
+    <contextName>${APP_Name}</contextName>
+
+    <conversionRule conversionWord="ip" converterClass="com.zhou.tools.IPUtil" />
+    <!--  控制台输出   -->
+    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
+        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+            <level>INFO</level>
+        </filter>
+        <encoder>
+            <pattern>SSO [%ip] %d{yyyy-MM-dd HH:mm:ss.SSS} [%level]  [RequestId : %X{processId}] [CallId : %X{callId}]   [class: %logger{50}.%M] [ line: %line]  : %msg%n</pattern>
+        </encoder>
+    </appender>
+    <!-- logger logfile -->
+    <appender name="logger-logfile" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>${LOG_HOME}/INFO_SYSTEM.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- rollover daily -->
+            <fileNamePattern>${LOG_HOME}/history/INFO_SYSTEM_%d{yyyyMMdd}.log.%i.gz</fileNamePattern>
+            <maxHistory>30</maxHistory>
+
+            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <maxFileSize>50MB</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+        </rollingPolicy>
+
+        <encoder>
+            <pattern>SSO [%ip] %d{yyyy-MM-dd HH:mm:ss.SSS} [%level]  [RequestId : %X{processId}] [CallId : %X{callId}]   [class: %logger{50}.%M] [ line: %line]  : %msg%n</pattern>
+        </encoder>
+    </appender>
+    <appender name ="async_logger-logfile" class= "ch.qos.logback.classic.AsyncAppender">
+        <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
+        <discardingThreshold >0</discardingThreshold>
+        <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
+        <queueSize>512</queueSize>
+        <!-- 添加附加的appender,最多只能添加一个 -->
+        <appender-ref ref ="logger-logfile"/>
+        <includeCallerData>true</includeCallerData>
+    </appender>
+
+
+
+
+
+    <!-- logfile-error -->
+    <appender name="logfile-error" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>${LOG_HOME}/ERROR.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <fileNamePattern>${LOG_HOME}/history/ERROR_%d{yyyyMMdd}.log.%i.gz</fileNamePattern>
+            <maxHistory>30</maxHistory>
+
+            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <maxFileSize>50MB</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+        </rollingPolicy>
+
+        <encoder>
+            <pattern>SSO [%ip] %d{yyyy-MM-dd HH:mm:ss.SSS} [%level]  [RequestId : %X{processId}] [CallId : %X{callId}]   [class: %logger{50}.%M] [ line: %line]  : %msg%n</pattern>
+        </encoder>
+        <filter class="ch.qos.logback.classic.filter.ThresholdFilter"><!-- 只打印ERROR日志 -->
+            <level>ERROR</level>
+        </filter>
+    </appender>
+
+    <appender name ="async_logfile-error" class= "ch.qos.logback.classic.AsyncAppender">
+        <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
+        <discardingThreshold >0</discardingThreshold>
+        <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
+        <queueSize>512</queueSize>
+        <!-- 添加附加的appender,最多只能添加一个 -->
+        <appender-ref ref ="logfile-error"/>
+        <includeCallerData>true</includeCallerData>
+    </appender>
+    <logger name="com.zhou" level="INFO" additivity="false">
+        <appender-ref ref="stdout" />
+    </logger>
+
+    <logger name="com.zhou" level="ERROR" additivity="false">
+        <appender-ref ref="async_logfile-error" />
+    </logger>
+
+    <logger name="com.zhou" level="INFO" additivity="false">
+        <appender-ref ref="async_logger-logfile" />
+    </logger>
+
+
+</configuration>

+ 12 - 0
src/main/resources/static/env.html

@@ -0,0 +1,12 @@
+{
+    "table" :"localhost",
+    "ssid" :"http://10.79.5.218:32025",
+     "robot" : "http://10.79.3.61:8080",
+     "robotlogout" : "http://10.79.3.61:8080",
+     "model" :  "http://10.79.3.103:8080",
+     "modellogout" :  "http://10.79.3.103:8080",
+     "openmodel" :  "http://10.79.3.103:7080",
+     "openrobot" :"https://10.79.3.104:7080",
+     "opentenement": "http://10.79.5.218:32004",
+     "opensupport" :"http://10.79.5.218:31080"
+}

BIN
src/main/resources/static/favicon.ico


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
src/main/resources/static/index.html


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
src/main/resources/static/static/css/app.04d0714f.css


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
src/main/resources/static/static/css/app.155f5e05.css


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
src/main/resources/static/static/css/app.4c39496f.css


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
src/main/resources/static/static/css/chunk-003ceb06.0175c2f8.css


+ 1 - 0
src/main/resources/static/static/css/chunk-1ae2e04c.f59b1a74.css

@@ -0,0 +1 @@
+[data-v-433e5fbe] .el-upload-list{display:none}.el-main .el-input[data-v-433e5fbe]{width:200px;margin-right:30px}.first[data-v-433e5fbe]{margin-bottom:50px}.time-picker[data-v-433e5fbe]{display:inline-block;margin-right:30px}.el-header[data-v-433e5fbe]{padding:0;height:50px;overflow:hidden;position:relative;background:-webkit-gradient(linear,left top,right top,from(#3d6df8),to(#5b8cff));background:linear-gradient(90deg,#3d6df8,#5b8cff);-webkit-box-shadow:0 1px 4px rgba(0,21,41,.08);box-shadow:0 1px 4px rgba(0,21,41,.08)}.el-header .title[data-v-433e5fbe]{display:-webkit-box;display:-ms-flexbox;display:flex;height:100%;float:left;font-size:18px;color:#fff;margin-left:15px;line-height:100%;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-header .title .return[data-v-433e5fbe]{cursor:pointer}.el-header .title div[data-v-433e5fbe]{-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-right:10px}.el-header .title span[data-v-433e5fbe]{font-size:14px;padding:8px;background-color:#84a9fe;border-radius:10px;margin-left:10px}

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
src/main/resources/static/static/css/chunk-369c9565.6a68d3f6.css


+ 1 - 0
src/main/resources/static/static/css/chunk-4ee2b43f.444c6587.css

@@ -0,0 +1 @@
+@supports(-webkit-mask:none) and (not (cater-color:#fff)){.login-container .el-input input{color:#fff}}.cerify-code-panel{margin:0 auto}.login-container{background-image:url(../../static/img/sa.576f02fe.png);background-position:0 0;background-repeat:no-repeat;background-size:cover}.login-container .el-input{display:inline-block;height:47px;width:85%}.login-container .el-input input{background:transparent;border:1px solid #c6e4f4;-webkit-appearance:none;border-radius:5px;padding:12px 5px 12px 15px;color:#409eff;height:47px;caret-color:#fff}.login-container .el-input input:-webkit-autofill{-webkit-box-shadow:0 0 0 1000px #283443 inset!important;box-shadow:inset 0 0 0 1000px #283443!important;-webkit-text-fill-color:#fff!important}.login-container .el-form-item{border:1px solid hsla(0,0%,100%,.1);background:hsla(0,0%,100%,.7);border-radius:5px;color:#454545}[data-v-d615753c] .login-container .el-input input{border:1px solid #c6e4f4}.login-container[data-v-d615753c]{min-height:100%;width:100%;background-color:#2d3a4b;overflow:hidden}.login-container .login-form[data-v-d615753c]{position:relative;width:520px;max-width:100%;padding:160px 35px 0;margin:10% 100px 100px 65%;overflow:hidden}.login-container .tips[data-v-d615753c]{font-size:14px;color:#fff;margin-bottom:10px}.login-container .tips span[data-v-d615753c]:first-of-type{margin-right:16px}.login-container .svg-container[data-v-d615753c]{padding:6px 5px 6px 15px;color:#889aa4;vertical-align:middle;display:inline-block}.login-container .title-container[data-v-d615753c]{position:relative}.login-container .title-container .title[data-v-d615753c]{font-size:26px;color:#c6e4f4;margin:0 auto 40px auto;text-align:center;font-weight:700}.login-container .show-pwd[data-v-d615753c]{position:absolute;right:10px;top:7px;font-size:16px;color:#889aa4;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
src/main/resources/static/static/css/chunk-57dc6a22.16365d9a.css


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
src/main/resources/static/static/css/chunk-76cea4de.3c7f5ad9.css


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
src/main/resources/static/static/css/chunk-79d1aace.5c78958d.css


+ 1 - 0
src/main/resources/static/static/css/chunk-988ebb7e.cb847a1d.css

@@ -0,0 +1 @@
+.el-button[data-v-1d81b92c]{color:#4a4a4a}[data-v-1d81b92c] .el-table__row .cell{color:#000}.el-card[data-v-36d1f116]{background:hsla(0,0%,100%,0);border:none}

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
src/main/resources/static/static/css/chunk-e61ab9a6.7cc87bfd.css


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
src/main/resources/static/static/css/chunk-elementUI.68c70ad5.css


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
src/main/resources/static/static/css/chunk-ffc75ee0.879774b2.css


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
src/main/resources/static/static/css/chunk-libs.3dfb7769.css


BIN
src/main/resources/static/static/fonts/element-icons.535877f5.woff


BIN
src/main/resources/static/static/fonts/element-icons.732389de.ttf


BIN
src/main/resources/static/static/img/404.a57b6f31.png


BIN
src/main/resources/static/static/img/404_cloud.0f4bc32b.png


BIN
src/main/resources/static/static/img/header2.9eb99c90.png


BIN
src/main/resources/static/static/img/logo3.d1b89e15.png


BIN
src/main/resources/static/static/img/main-bottom.6d3547d4.jpg


BIN
src/main/resources/static/static/img/main-top.e659a075.jpg


BIN
src/main/resources/static/static/img/portal.e07c145a.jpg


BIN
src/main/resources/static/static/img/sa.576f02fe.png


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
src/main/resources/static/static/js/app.687ef117.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
src/main/resources/static/static/js/app.83943732.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
src/main/resources/static/static/js/app.c18355f9.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
src/main/resources/static/static/js/app.c66e7b63.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
src/main/resources/static/static/js/app.cb9738a3.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
src/main/resources/static/static/js/app.f4296409.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
src/main/resources/static/static/js/chunk-003ceb06.9f6d46d5.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 4 - 0
src/main/resources/static/static/js/chunk-05d0609c.a09ab631.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
src/main/resources/static/static/js/chunk-1ae2e04c.3c2faccc.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
src/main/resources/static/static/js/chunk-1ae2e04c.703319ce.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
src/main/resources/static/static/js/chunk-1ae2e04c.acd44047.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
src/main/resources/static/static/js/chunk-369c9565.10d92217.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
src/main/resources/static/static/js/chunk-369c9565.61ef6f4b.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
src/main/resources/static/static/js/chunk-369c9565.f3989bd4.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
src/main/resources/static/static/js/chunk-4ee2b43f.4de1ff4b.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
src/main/resources/static/static/js/chunk-4ee2b43f.b0f5d21c.js


Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác