Bladeren bron

1、first commit.

guanzi 3 jaren geleden
commit
b639d069cd
42 gewijzigde bestanden met toevoegingen van 2237 en 0 verwijderingen
  1. 33 0
      ghj-es-api/.gitignore
  2. 117 0
      ghj-es-api/.mvn/wrapper/MavenWrapperDownloader.java
  3. BIN
      ghj-es-api/.mvn/wrapper/maven-wrapper.jar
  4. 2 0
      ghj-es-api/.mvn/wrapper/maven-wrapper.properties
  5. 310 0
      ghj-es-api/mvnw
  6. 182 0
      ghj-es-api/mvnw.cmd
  7. 189 0
      ghj-es-api/pom.xml
  8. 16 0
      ghj-es-api/src/main/java/com/pavis/ghjesapi/GhjEsApiApplication.java
  9. 67 0
      ghj-es-api/src/main/java/com/pavis/ghjesapi/aop/AopSaveLog.java
  10. 11 0
      ghj-es-api/src/main/java/com/pavis/ghjesapi/aop/PreSaveLog.java
  11. 14 0
      ghj-es-api/src/main/java/com/pavis/ghjesapi/common/Constant.java
  12. 31 0
      ghj-es-api/src/main/java/com/pavis/ghjesapi/config/CorsFilterConfig.java
  13. 28 0
      ghj-es-api/src/main/java/com/pavis/ghjesapi/config/ElasticSearchConfig.java
  14. 15 0
      ghj-es-api/src/main/java/com/pavis/ghjesapi/config/FeignConfig.java
  15. 21 0
      ghj-es-api/src/main/java/com/pavis/ghjesapi/config/MybatisPlusConfig.java
  16. 37 0
      ghj-es-api/src/main/java/com/pavis/ghjesapi/config/Swagger2Config.java
  17. 40 0
      ghj-es-api/src/main/java/com/pavis/ghjesapi/controller/EsController.java
  18. 10 0
      ghj-es-api/src/main/java/com/pavis/ghjesapi/dao/EsObjMapper.java
  19. 19 0
      ghj-es-api/src/main/java/com/pavis/ghjesapi/exception/AccessDeniedException.java
  20. 19 0
      ghj-es-api/src/main/java/com/pavis/ghjesapi/exception/AccountExpiredException.java
  21. 19 0
      ghj-es-api/src/main/java/com/pavis/ghjesapi/exception/AlertException.java
  22. 19 0
      ghj-es-api/src/main/java/com/pavis/ghjesapi/exception/AuthException.java
  23. 19 0
      ghj-es-api/src/main/java/com/pavis/ghjesapi/exception/BadCredentialsException.java
  24. 37 0
      ghj-es-api/src/main/java/com/pavis/ghjesapi/exception/BaseException.java
  25. 19 0
      ghj-es-api/src/main/java/com/pavis/ghjesapi/exception/CheckException.java
  26. 94 0
      ghj-es-api/src/main/java/com/pavis/ghjesapi/exception/GlobalExceptionHandler.java
  27. 19 0
      ghj-es-api/src/main/java/com/pavis/ghjesapi/exception/LoginException.java
  28. 19 0
      ghj-es-api/src/main/java/com/pavis/ghjesapi/exception/OpException.java
  29. 19 0
      ghj-es-api/src/main/java/com/pavis/ghjesapi/exception/OrgException.java
  30. 30 0
      ghj-es-api/src/main/java/com/pavis/ghjesapi/form/Player.java
  31. 88 0
      ghj-es-api/src/main/java/com/pavis/ghjesapi/http/ErrorCode.java
  32. 153 0
      ghj-es-api/src/main/java/com/pavis/ghjesapi/http/ResultBody.java
  33. 31 0
      ghj-es-api/src/main/java/com/pavis/ghjesapi/pojo/EsObj.java
  34. 10 0
      ghj-es-api/src/main/java/com/pavis/ghjesapi/service/EsService.java
  35. 172 0
      ghj-es-api/src/main/java/com/pavis/ghjesapi/service/impl/EsDemoServiceImpl.java
  36. 19 0
      ghj-es-api/src/main/java/com/pavis/ghjesapi/utils/DateUtils.java
  37. 14 0
      ghj-es-api/src/main/java/com/pavis/ghjesapi/utils/HttpContextUtils.java
  38. 28 0
      ghj-es-api/src/main/java/com/pavis/ghjesapi/utils/QaUtils.java
  39. 10 0
      ghj-es-api/src/main/resources/application-dev.yml
  40. 11 0
      ghj-es-api/src/main/resources/application.yml
  41. 18 0
      ghj-es-api/src/main/resources/error.properties
  42. 228 0
      ghj-es-api/src/test/java/com/pavis/ghjesapi/GhjEsApiApplicationTests.java

+ 33 - 0
ghj-es-api/.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/

+ 117 - 0
ghj-es-api/.mvn/wrapper/MavenWrapperDownloader.java

@@ -0,0 +1,117 @@
+/*
+ * Copyright 2007-present the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import java.net.*;
+import java.io.*;
+import java.nio.channels.*;
+import java.util.Properties;
+
+public class MavenWrapperDownloader {
+
+    private static final String WRAPPER_VERSION = "0.5.6";
+    /**
+     * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided.
+     */
+    private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/"
+        + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar";
+
+    /**
+     * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to
+     * use instead of the default one.
+     */
+    private static final String MAVEN_WRAPPER_PROPERTIES_PATH =
+            ".mvn/wrapper/maven-wrapper.properties";
+
+    /**
+     * Path where the maven-wrapper.jar will be saved to.
+     */
+    private static final String MAVEN_WRAPPER_JAR_PATH =
+            ".mvn/wrapper/maven-wrapper.jar";
+
+    /**
+     * Name of the property which should be used to override the default download url for the wrapper.
+     */
+    private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl";
+
+    public static void main(String args[]) {
+        System.out.println("- Downloader started");
+        File baseDirectory = new File(args[0]);
+        System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath());
+
+        // If the maven-wrapper.properties exists, read it and check if it contains a custom
+        // wrapperUrl parameter.
+        File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH);
+        String url = DEFAULT_DOWNLOAD_URL;
+        if(mavenWrapperPropertyFile.exists()) {
+            FileInputStream mavenWrapperPropertyFileInputStream = null;
+            try {
+                mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile);
+                Properties mavenWrapperProperties = new Properties();
+                mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream);
+                url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url);
+            } catch (IOException e) {
+                System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'");
+            } finally {
+                try {
+                    if(mavenWrapperPropertyFileInputStream != null) {
+                        mavenWrapperPropertyFileInputStream.close();
+                    }
+                } catch (IOException e) {
+                    // Ignore ...
+                }
+            }
+        }
+        System.out.println("- Downloading from: " + url);
+
+        File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH);
+        if(!outputFile.getParentFile().exists()) {
+            if(!outputFile.getParentFile().mkdirs()) {
+                System.out.println(
+                        "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'");
+            }
+        }
+        System.out.println("- Downloading to: " + outputFile.getAbsolutePath());
+        try {
+            downloadFileFromURL(url, outputFile);
+            System.out.println("Done");
+            System.exit(0);
+        } catch (Throwable e) {
+            System.out.println("- Error downloading");
+            e.printStackTrace();
+            System.exit(1);
+        }
+    }
+
+    private static void downloadFileFromURL(String urlString, File destination) throws Exception {
+        if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) {
+            String username = System.getenv("MVNW_USERNAME");
+            char[] password = System.getenv("MVNW_PASSWORD").toCharArray();
+            Authenticator.setDefault(new Authenticator() {
+                @Override
+                protected PasswordAuthentication getPasswordAuthentication() {
+                    return new PasswordAuthentication(username, password);
+                }
+            });
+        }
+        URL website = new URL(urlString);
+        ReadableByteChannel rbc;
+        rbc = Channels.newChannel(website.openStream());
+        FileOutputStream fos = new FileOutputStream(destination);
+        fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
+        fos.close();
+        rbc.close();
+    }
+
+}

BIN
ghj-es-api/.mvn/wrapper/maven-wrapper.jar


+ 2 - 0
ghj-es-api/.mvn/wrapper/maven-wrapper.properties

@@ -0,0 +1,2 @@
+distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.2/apache-maven-3.8.2-bin.zip
+wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar

+ 310 - 0
ghj-es-api/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
ghj-es-api/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%

+ 189 - 0
ghj-es-api/pom.xml

@@ -0,0 +1,189 @@
+<?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.5.5</version>
+		<relativePath/> <!-- lookup parent from repository -->
+	</parent>
+	<groupId>com.pavis</groupId>
+	<artifactId>ghj-es-api</artifactId>
+	<version>0.0.1-SNAPSHOT</version>
+	<name>ghj-es-api</name>
+	<description>Demo project for Spring Boot es</description>
+	<properties>
+		<java.version>1.8</java.version>
+		<spring-cloud.version>2020.0.4</spring-cloud.version>
+		<elasticsearch.version>7.6.1</elasticsearch.version>
+	</properties>
+	<dependencies>
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-data-jdbc</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-web</artifactId>
+		</dependency>
+
+<!--		<dependency>-->
+<!--			<groupId>org.springframework.cloud</groupId>-->
+<!--			<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>-->
+<!--		</dependency>-->
+		<dependency>
+			<groupId>org.springframework.cloud</groupId>
+			<artifactId>spring-cloud-starter-openfeign</artifactId>
+		</dependency>
+
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-devtools</artifactId>
+			<scope>runtime</scope>
+			<optional>true</optional>
+		</dependency>
+		<dependency>
+			<groupId>mysql</groupId>
+			<artifactId>mysql-connector-java</artifactId>
+			<scope>runtime</scope>
+		</dependency>
+		<dependency>
+			<groupId>com.baomidou</groupId>
+			<artifactId>mybatis-plus-boot-starter</artifactId>
+			<version>3.2.0</version>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-configuration-processor</artifactId>
+			<optional>true</optional>
+		</dependency>
+		<dependency>
+			<groupId>org.projectlombok</groupId>
+			<artifactId>lombok</artifactId>
+			<optional>true</optional>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-test</artifactId>
+			<scope>test</scope>
+		</dependency>
+
+
+		<dependency>
+			<groupId>io.springfox</groupId>
+			<artifactId>springfox-swagger2</artifactId>
+			<version>2.9.2</version>
+		</dependency>
+		<dependency>
+			<groupId>io.springfox</groupId>
+			<artifactId>springfox-swagger-ui</artifactId>
+			<version>2.9.2</version>
+		</dependency>
+
+		<!-- https://mvnrepository.com/artifact/com.github.xiaoymin/knife4j-spring-ui -->
+		<dependency>
+			<groupId>com.github.xiaoymin</groupId>
+			<artifactId>knife4j-spring-ui</artifactId>
+			<version>2.0.2</version>
+		</dependency>
+
+		<dependency>
+			<groupId>com.github.xiaoymin</groupId>
+			<artifactId>knife4j-spring-boot-starter</artifactId>
+			<!--在引用时请在maven中央仓库搜索最新版本号-->
+			<version>2.0.2</version>
+		</dependency>
+
+		<dependency>
+			<groupId>com.google.guava</groupId>
+			<artifactId>guava</artifactId>
+			<version>27.0.1-jre</version>
+		</dependency>
+
+		<dependency>
+			<groupId>com.alibaba</groupId>
+			<artifactId>fastjson</artifactId>
+			<version>1.2.73</version>
+		</dependency>
+
+		<!--        <dependency>-->
+		<!--            <groupId>joda-time</groupId>-->
+		<!--            <artifactId>joda-time</artifactId>-->
+		<!--        </dependency>-->
+
+		<dependency>
+			<groupId>org.apache.commons</groupId>
+			<artifactId>commons-lang3</artifactId>
+		</dependency>
+
+		<dependency>
+			<groupId>commons-collections</groupId>
+			<artifactId>commons-collections</artifactId>
+			<version>3.2.2</version>
+		</dependency>
+
+		<dependency>
+			<groupId>commons-codec</groupId>
+			<artifactId>commons-codec</artifactId>
+			<version>1.14</version>
+		</dependency>
+
+		<dependency>
+			<groupId>org.apache.commons</groupId>
+			<artifactId>commons-text</artifactId>
+			<version>1.8</version>
+		</dependency>
+
+		<dependency>
+			<groupId>commons-beanutils</groupId>
+			<artifactId>commons-beanutils</artifactId>
+			<version>1.9.4</version>
+		</dependency>
+
+		<dependency>
+			<groupId>org.aspectj</groupId>
+			<artifactId>aspectjweaver</artifactId>
+			<version>1.8.8</version>
+		</dependency>
+		<dependency>
+			<groupId>com.alibaba</groupId>
+			<artifactId>druid-spring-boot-starter</artifactId>
+			<version>1.1.9</version>
+		</dependency>
+	</dependencies>
+
+	<dependencyManagement>
+		<dependencies>
+			<dependency>
+				<groupId>org.springframework.cloud</groupId>
+				<artifactId>spring-cloud-dependencies</artifactId>
+				<version>${spring-cloud.version}</version>
+				<type>pom</type>
+				<scope>import</scope>
+			</dependency>
+		</dependencies>
+	</dependencyManagement>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.springframework.boot</groupId>
+				<artifactId>spring-boot-maven-plugin</artifactId>
+				<configuration>
+					<excludes>
+						<exclude>
+							<groupId>org.projectlombok</groupId>
+							<artifactId>lombok</artifactId>
+						</exclude>
+					</excludes>
+				</configuration>
+			</plugin>
+		</plugins>
+	</build>
+
+</project>

+ 16 - 0
ghj-es-api/src/main/java/com/pavis/ghjesapi/GhjEsApiApplication.java

@@ -0,0 +1,16 @@
+package com.pavis.ghjesapi;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+
+@MapperScan("com.pavis.ghjesapi.dao")
+@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})
+public class GhjEsApiApplication {
+
+	public static void main(String[] args) {
+		SpringApplication.run(GhjEsApiApplication.class, args);
+	}
+
+}

+ 67 - 0
ghj-es-api/src/main/java/com/pavis/ghjesapi/aop/AopSaveLog.java

@@ -0,0 +1,67 @@
+package com.pavis.ghjesapi.aop;
+
+import com.alibaba.fastjson.JSON;
+import com.pavis.ghjesapi.utils.HttpContextUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.http.HttpServletRequest;
+import java.lang.reflect.Method;
+
+@Slf4j
+@Aspect
+@Component
+public class AopSaveLog {
+    /**
+     * 切入点
+     */
+    @Pointcut("@annotation(com.pavis.ghjesapi.aop.PreSaveLog)")
+    public void pointCut() {
+    }
+
+    /**
+     * 环绕操作
+     *
+     * @param point 切入点
+     * @return 原方法返回值
+     * @throws Throwable 异常信息
+     */
+    @Around("pointCut()")
+    public Object around(ProceedingJoinPoint point) throws Throwable {
+        HttpServletRequest request = HttpContextUtils.getHttpServletRequest();
+        long start = System.currentTimeMillis();
+        // OpLog opLog = new OpLog();
+        // opLog.setOpName(getAnnotation(point));
+        // opLog.setOpUrl(request.getRequestURL().toString());
+        // opLog.setOpIp(request.getRemoteAddr());
+        // opLog.setOpClazz(point.getSignature().getDeclaringTypeName());
+        // opLog.setOpMethod(point.getSignature().getName());
+        // opLog.setOpParams(JSON.toJSONString(request.getParameterMap()));
+        // Object result = point.proceed();
+        // opLog.setOpResult(JSON.toJSONString(result));
+        // opLog.setOpConsume(System.currentTimeMillis() - start);
+        // log.info("op log:{}", JSON.toJSONString(opLog));
+        // return result;
+        return null;
+    }
+
+    /**
+     * 获取注解名称
+     *
+     * @param point 切入点
+     * @return 注解值
+     */
+    private String getAnnotation(JoinPoint point) {
+        MethodSignature signature = (MethodSignature) point.getSignature();
+        Method method = signature.getMethod();
+        PreSaveLog annotation = method.getAnnotation(PreSaveLog.class);
+        return annotation.value();
+    }
+
+}

+ 11 - 0
ghj-es-api/src/main/java/com/pavis/ghjesapi/aop/PreSaveLog.java

@@ -0,0 +1,11 @@
+package com.pavis.ghjesapi.aop;
+
+import java.lang.annotation.*;
+
+@Target({ElementType.METHOD, ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+@Inherited
+@Documented
+public @interface PreSaveLog {
+    String value() default "";
+}

+ 14 - 0
ghj-es-api/src/main/java/com/pavis/ghjesapi/common/Constant.java

@@ -0,0 +1,14 @@
+package com.pavis.ghjesapi.common;
+
+/**
+ * @program: saas-test
+ * @description:
+ * @author: Guanzi
+ * @created: 2021/10/15 15:51
+ */
+public class Constant {
+    // 索引
+    public static final String ES_INDEX = "table_tennis";
+
+    public static final String DEFAULT_DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
+}

+ 31 - 0
ghj-es-api/src/main/java/com/pavis/ghjesapi/config/CorsFilterConfig.java

@@ -0,0 +1,31 @@
+package com.pavis.ghjesapi.config;
+
+import org.springframework.core.Ordered;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.*;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+@Component
+@Order(Ordered.HIGHEST_PRECEDENCE)
+public class CorsFilterConfig implements Filter {
+
+    @Override
+    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
+        HttpServletResponse httpServletResponse = (HttpServletResponse) response;
+        HttpServletRequest httpServletRequest = (HttpServletRequest) request;
+        httpServletResponse.setHeader("Access-Control-Allow-Origin", "*");
+        httpServletResponse.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
+        httpServletResponse.setHeader("Access-Control-Max-Age", "3600");
+        httpServletResponse.setHeader("Access-Control-Allow-Credentials", "true");
+        httpServletResponse.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");
+        if ("OPTIONS".equalsIgnoreCase(httpServletRequest.getMethod())) {
+            httpServletResponse.setStatus(HttpServletResponse.SC_OK);
+        } else {
+            chain.doFilter(httpServletRequest, httpServletResponse);
+        }
+    }
+}

+ 28 - 0
ghj-es-api/src/main/java/com/pavis/ghjesapi/config/ElasticSearchConfig.java

@@ -0,0 +1,28 @@
+package com.pavis.ghjesapi.config;
+
+import org.apache.http.HttpHost;
+import org.elasticsearch.client.RestClient;
+import org.elasticsearch.client.RestHighLevelClient;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @program: test-es
+ * @description: ElasticSearchConfig
+ * @author: Guanzi
+ * @created: 2021/09/30 16:55
+ */
+@Configuration
+public class ElasticSearchConfig {
+
+    // 注册 rest高级客户端
+    @Bean
+    public RestHighLevelClient restHighLevelClient(){
+        RestHighLevelClient client = new RestHighLevelClient(
+                RestClient.builder(
+                        new HttpHost("127.0.0.1",9200,"http")
+                )
+        );
+        return client;
+    }
+}

+ 15 - 0
ghj-es-api/src/main/java/com/pavis/ghjesapi/config/FeignConfig.java

@@ -0,0 +1,15 @@
+package com.pavis.ghjesapi.config;
+
+import feign.Logger;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class FeignConfig {
+
+    @Bean
+    public Logger.Level logger() {
+        return Logger.Level.FULL;
+    }
+
+}

+ 21 - 0
ghj-es-api/src/main/java/com/pavis/ghjesapi/config/MybatisPlusConfig.java

@@ -0,0 +1,21 @@
+package com.pavis.ghjesapi.config;
+
+import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+
+@Configuration
+@EnableTransactionManagement
+public class MybatisPlusConfig {
+
+    @Bean
+    public PaginationInterceptor paginationInterceptor() {
+        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
+        // 设置请求的页面大于最大页后操作,true调回到首页,false 继续请求  默认false
+        paginationInterceptor.setOverflow(false);
+        // 设置最大单页限制数量,默认 500 条,-1 不受限制
+        paginationInterceptor.setLimit(-1);
+        return paginationInterceptor;
+    }
+}

+ 37 - 0
ghj-es-api/src/main/java/com/pavis/ghjesapi/config/Swagger2Config.java

@@ -0,0 +1,37 @@
+package com.pavis.ghjesapi.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.service.ApiInfo;
+import springfox.documentation.service.Contact;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spring.web.plugins.Docket;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+@Configuration
+@EnableSwagger2
+public class Swagger2Config {
+
+    @Bean
+    public Docket createRestApi() {
+        return new Docket(DocumentationType.SWAGGER_2)
+                .apiInfo(apiInfo())
+                .select()
+                .apis(RequestHandlerSelectors.basePackage("com.pavis.ghjesapi.controller"))
+                .paths(PathSelectors.any())
+                .build();
+    }
+
+    private ApiInfo apiInfo() {
+        return new ApiInfoBuilder()
+                .title("elasticsearch接口说明")
+                .description("接口文档说明")
+                .contact(new Contact("", "", ""))
+                .version("v1.0")
+                .build();
+    }
+}
+

+ 40 - 0
ghj-es-api/src/main/java/com/pavis/ghjesapi/controller/EsController.java

@@ -0,0 +1,40 @@
+package com.pavis.ghjesapi.controller;
+
+import com.pavis.ghjesapi.aop.PreSaveLog;
+import com.pavis.ghjesapi.http.ResultBody;
+import com.pavis.ghjesapi.service.EsService;
+import com.pavis.ghjesapi.utils.HttpContextUtils;
+import io.swagger.annotations.Api;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+
+/**
+ * @program: 01-SpringBoot-ES-Local
+ * @description:
+ * @author: Guanzi
+ * @created: 2021/10/14 15:56
+ */
+@Slf4j
+@Api(value = "es-test")
+@RestController
+@RequestMapping("/api")
+public class EsController {
+
+    @Autowired
+    private EsService esService;
+
+    @PreSaveLog("获取权限列表")
+    @GetMapping("/import/es")
+    public ResultBody testSqlBos() throws IOException {
+        HttpServletRequest request = HttpContextUtils.getHttpServletRequest();
+        String uri = request.getRequestURI();
+        return ResultBody.ok().path(uri).data(null);
+    }
+}

+ 10 - 0
ghj-es-api/src/main/java/com/pavis/ghjesapi/dao/EsObjMapper.java

@@ -0,0 +1,10 @@
+package com.pavis.ghjesapi.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.pavis.ghjesapi.pojo.EsObj;
+import org.springframework.stereotype.Component;
+
+@Component
+public interface EsObjMapper extends BaseMapper<EsObj> {
+
+}

+ 19 - 0
ghj-es-api/src/main/java/com/pavis/ghjesapi/exception/AccessDeniedException.java

@@ -0,0 +1,19 @@
+package com.pavis.ghjesapi.exception;
+
+public class AccessDeniedException extends BaseException {
+
+    public AccessDeniedException() {
+    }
+
+    public AccessDeniedException(String msg) {
+        super(msg);
+    }
+
+    public AccessDeniedException(int code, String msg) {
+        super(code, msg);
+    }
+
+    public AccessDeniedException(int code, String msg, Throwable cause) {
+        super(code, msg, cause);
+    }
+}

+ 19 - 0
ghj-es-api/src/main/java/com/pavis/ghjesapi/exception/AccountExpiredException.java

@@ -0,0 +1,19 @@
+package com.pavis.ghjesapi.exception;
+
+
+import com.pavis.ghjesapi.http.ErrorCode;
+
+public class AccountExpiredException extends BaseException {
+
+    public AccountExpiredException() {
+        this(ErrorCode.ACCOUNT_EXPIRED.getCode(), ErrorCode.ACCOUNT_EXPIRED.getMessage());
+    }
+
+    public AccountExpiredException(String msg) {
+        this(ErrorCode.ACCOUNT_EXPIRED.getCode(), msg);
+    }
+
+    public AccountExpiredException(int code, String msg) {
+        super(code, msg);
+    }
+}

+ 19 - 0
ghj-es-api/src/main/java/com/pavis/ghjesapi/exception/AlertException.java

@@ -0,0 +1,19 @@
+package com.pavis.ghjesapi.exception;
+
+public class AlertException extends BaseException {
+
+    public AlertException() {
+    }
+
+    public AlertException(String msg) {
+        super(msg);
+    }
+
+    public AlertException(int code, String msg) {
+        super(code, msg);
+    }
+
+    public AlertException(int code, String msg, Throwable cause) {
+        super(code, msg, cause);
+    }
+}

+ 19 - 0
ghj-es-api/src/main/java/com/pavis/ghjesapi/exception/AuthException.java

@@ -0,0 +1,19 @@
+package com.pavis.ghjesapi.exception;
+
+
+import com.pavis.ghjesapi.http.ErrorCode;
+
+public class AuthException extends BaseException {
+
+    public AuthException() {
+        this(ErrorCode.ACCOUNT_EXPIRED.getCode(), ErrorCode.ACCOUNT_EXPIRED.getMessage());
+    }
+
+    public AuthException(String msg) {
+        this(ErrorCode.ACCOUNT_EXPIRED.getCode(), msg);
+    }
+
+    public AuthException(int code, String msg) {
+        super(code, msg);
+    }
+}

+ 19 - 0
ghj-es-api/src/main/java/com/pavis/ghjesapi/exception/BadCredentialsException.java

@@ -0,0 +1,19 @@
+package com.pavis.ghjesapi.exception;
+
+public class BadCredentialsException extends BaseException {
+
+    public BadCredentialsException() {
+    }
+
+    public BadCredentialsException(String msg) {
+        super(msg);
+    }
+
+    public BadCredentialsException(int code, String msg) {
+        super(code, msg);
+    }
+
+    public BadCredentialsException(int code, String msg, Throwable cause) {
+        super(code, msg, cause);
+    }
+}

+ 37 - 0
ghj-es-api/src/main/java/com/pavis/ghjesapi/exception/BaseException.java

@@ -0,0 +1,37 @@
+package com.pavis.ghjesapi.exception;
+
+
+import com.pavis.ghjesapi.http.ErrorCode;
+
+/**
+ * 基础错误异常
+ */
+public class BaseException extends RuntimeException {
+
+    private int code = ErrorCode.ERROR.getCode();
+
+    public BaseException() {
+    }
+
+    public BaseException(String msg) {
+        super(msg);
+    }
+
+    public BaseException(int code, String msg) {
+        super(msg);
+        this.code = code;
+    }
+
+    public BaseException(int code, String msg, Throwable cause) {
+        super(msg, cause);
+        this.code = code;
+    }
+
+    public int getCode() {
+        return code;
+    }
+
+    public void setCode(int code) {
+        this.code = code;
+    }
+}

+ 19 - 0
ghj-es-api/src/main/java/com/pavis/ghjesapi/exception/CheckException.java

@@ -0,0 +1,19 @@
+package com.pavis.ghjesapi.exception;
+
+
+import com.pavis.ghjesapi.http.ErrorCode;
+
+public class CheckException extends BaseException {
+
+    public CheckException() {
+        this(ErrorCode.ACCOUNT_EXPIRED.getCode(), ErrorCode.ACCOUNT_EXPIRED.getMessage());
+    }
+
+    public CheckException(String msg) {
+        this(ErrorCode.ACCOUNT_EXPIRED.getCode(), msg);
+    }
+
+    public CheckException(int code, String msg) {
+        super(code, msg);
+    }
+}

+ 94 - 0
ghj-es-api/src/main/java/com/pavis/ghjesapi/exception/GlobalExceptionHandler.java

@@ -0,0 +1,94 @@
+package com.pavis.ghjesapi.exception;
+
+
+import com.pavis.ghjesapi.http.ErrorCode;
+import com.pavis.ghjesapi.http.ResultBody;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.HttpStatus;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.MethodArgumentNotValidException;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Objects;
+
+/**
+ * 统一异常处理器
+ */
+@Slf4j
+@RestControllerAdvice
+public class GlobalExceptionHandler {
+
+    /**
+     * 其他异常
+     */
+    @ExceptionHandler(Exception.class)
+    public static ResultBody exception(Exception ex, HttpServletRequest request, HttpServletResponse response) {
+        ResultBody resultBody = resolveException(ex, request.getRequestURI());
+        response.setStatus(resultBody.getHttpStatus());
+        return resultBody;
+    }
+
+    /**
+     * 静态解析异常,可以直接调用
+     */
+    public static ResultBody resolveException(Exception ex, String path) {
+        ErrorCode code = ErrorCode.ERROR;
+        int httpStatus = HttpStatus.OK.value();
+        String className = ex.getClass().getName();
+        if (className.contains("BadCredentialsException")) {
+            code = ErrorCode.BAD_CREDENTIALS;
+        } else if (className.contains("AccountExpiredException")) {
+            code = ErrorCode.ACCOUNT_EXPIRED;
+        } else if (className.contains("AccessDeniedException")) {
+            code = ErrorCode.ACCESS_DENIED;
+        } else if (className.contains("HttpMessageNotReadableException")
+                || className.contains("TypeMismatchException")
+                || className.contains("MissingServletRequestParameterException")) {
+            code = ErrorCode.BAD_REQUEST;
+        } else if (className.contains("NoHandlerFoundException")) {
+            code = ErrorCode.NOT_FOUND;
+        } else if (className.contains("HttpRequestMethodNotSupportedException")) {
+            code = ErrorCode.METHOD_NOT_ALLOWED;
+        } else if (className.contains("HttpMediaTypeNotAcceptableException")) {
+            code = ErrorCode.MEDIA_TYPE_NOT_ACCEPTABLE;
+        } else if (className.contains("MethodArgumentNotValidException")) {
+            BindingResult bindingResult = ((MethodArgumentNotValidException) ex).getBindingResult();
+            code = ErrorCode.ALERT;
+            return ResultBody.failed().code(code.getCode()).msg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+        } else if (className.contains("IllegalArgumentException")) {
+            code = ErrorCode.ALERT;
+        } else if (className.contains("AlertException")) {
+            code = ErrorCode.ALERT;
+        } else if (className.contains("CheckException")) {
+            code = ErrorCode.AUTHENTICATION_FAILED;
+        } else if (className.contains("LoginException")) {
+            code = ErrorCode.LOGIN_FAILURE;
+        } else if (className.contains("OrgException")) {
+            code = ErrorCode.REQUEST_ORG_FAILED;
+        } else if (className.contains("AuthException")) {
+            code = ErrorCode.IS_RELATION_EXIST;
+        } else if (className.contains("OpException")) {
+            code = ErrorCode.FAIL;
+        } else if (className.contains("RestClientException")) {
+            code = ErrorCode.QA_NO_RESPONSE;
+        } else if (className.contains("NumberFormatException")) {
+            code = ErrorCode.ILLEGAL_ARGUMENT;
+        }
+        return buildBody(ex, code, path, httpStatus);
+    }
+
+    /**
+     * 构建返回结果对象
+     */
+    private static ResultBody buildBody(Exception exception, ErrorCode resultCode, String path, int httpStatus) {
+        exception.printStackTrace();
+        if (resultCode == null) {
+            resultCode = ErrorCode.ERROR;
+        }
+        return ResultBody.failed().code(resultCode.getCode()).msg(exception.getMessage()).path(path).httpStatus(httpStatus);
+    }
+
+}

+ 19 - 0
ghj-es-api/src/main/java/com/pavis/ghjesapi/exception/LoginException.java

@@ -0,0 +1,19 @@
+package com.pavis.ghjesapi.exception;
+
+
+import com.pavis.ghjesapi.http.ErrorCode;
+
+public class LoginException extends BaseException {
+
+    public LoginException() {
+        this(ErrorCode.ACCOUNT_EXPIRED.getCode(), ErrorCode.ACCOUNT_EXPIRED.getMessage());
+    }
+
+    public LoginException(String msg) {
+        this(ErrorCode.ACCOUNT_EXPIRED.getCode(), msg);
+    }
+
+    public LoginException(int code, String msg) {
+        super(code, msg);
+    }
+}

+ 19 - 0
ghj-es-api/src/main/java/com/pavis/ghjesapi/exception/OpException.java

@@ -0,0 +1,19 @@
+package com.pavis.ghjesapi.exception;
+
+
+import com.pavis.ghjesapi.http.ErrorCode;
+
+public class OpException extends BaseException {
+
+    public OpException() {
+        this(ErrorCode.ACCOUNT_EXPIRED.getCode(), ErrorCode.ACCOUNT_EXPIRED.getMessage());
+    }
+
+    public OpException(String msg) {
+        this(ErrorCode.ACCOUNT_EXPIRED.getCode(), msg);
+    }
+
+    public OpException(int code, String msg) {
+        super(code, msg);
+    }
+}

+ 19 - 0
ghj-es-api/src/main/java/com/pavis/ghjesapi/exception/OrgException.java

@@ -0,0 +1,19 @@
+package com.pavis.ghjesapi.exception;
+
+
+import com.pavis.ghjesapi.http.ErrorCode;
+
+public class OrgException extends BaseException {
+
+    public OrgException() {
+        this(ErrorCode.ACCOUNT_EXPIRED.getCode(), ErrorCode.ACCOUNT_EXPIRED.getMessage());
+    }
+
+    public OrgException(String msg) {
+        this(ErrorCode.ACCOUNT_EXPIRED.getCode(), msg);
+    }
+
+    public OrgException(int code, String msg) {
+        super(code, msg);
+    }
+}

+ 30 - 0
ghj-es-api/src/main/java/com/pavis/ghjesapi/form/Player.java

@@ -0,0 +1,30 @@
+package com.pavis.ghjesapi.form;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.*;
+
+import java.io.Serializable;
+
+/**
+ * @program: tiaoshui
+ * @description: 教练信息DTO
+ * @author: Lyon
+ * @create: 2021-04-15 16:15
+ */
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class Player implements Serializable {
+
+    /**
+     * 姓名
+     */
+    private String name;
+    /**
+     * 年龄
+     */
+    private int age;
+}

+ 88 - 0
ghj-es-api/src/main/java/com/pavis/ghjesapi/http/ErrorCode.java

@@ -0,0 +1,88 @@
+package com.pavis.ghjesapi.http;
+
+/**
+ * 自定义返回码
+ */
+public enum ErrorCode {
+
+    /**
+     * 基本响应码
+     */
+    OK(0, "success"),
+    FAIL(1000, "fail"),
+    ALERT(1001, "alert"),
+
+
+    /**
+     * 权限控制
+     */
+    ACCESS_DENIED(4003, "access_denied"),
+
+    /**
+     * 账号错误
+     */
+    BAD_CREDENTIALS(3000, "bad_credentials"),
+    ACCOUNT_EXPIRED(3001, "account_expired"),
+    // ghj
+    AUTHENTICATION_FAILED(3002, "authentication_failed"),
+    GET_USER_INFO_FAILED(3003, "get_user_info_failed"),
+    LOGIN_FAILURE(3004, "login_failure"),
+
+    /**
+     * 请求错误
+     */
+    BAD_REQUEST(4000, "bad_request"),
+    NOT_FOUND(4004, "not_found"),
+    METHOD_NOT_ALLOWED(4005, "method_not_allowed"),
+    MEDIA_TYPE_NOT_ACCEPTABLE(4006, "media_type_not_acceptable"),
+    TOO_MANY_REQUESTS(4029, "too_many_requests"),
+    // ghj
+    REQUEST_ORG_FAILED(4030, "request_org_failed"),
+    IS_RELATION_EXIST(4031, "is_relation_exist"),
+
+    QA_NO_RESPONSE(4032, "qa_no_response"),
+    ILLEGAL_ARGUMENT(4034, "illegal_argument"),
+
+
+    /**
+     * 系统错误
+     */
+    ERROR(5000, "error");
+
+    private int code;
+    private String message;
+
+    ErrorCode() {
+    }
+
+    ErrorCode(int code, String message) {
+        this.code = code;
+        this.message = message;
+    }
+
+    public static ErrorCode getResultEnum(int code) {
+        for (ErrorCode type : ErrorCode.values()) {
+            if (type.getCode() == code) {
+                return type;
+            }
+        }
+        return ERROR;
+    }
+
+    public static ErrorCode getResultEnum(String message) {
+        for (ErrorCode type : ErrorCode.values()) {
+            if (type.getMessage().equals(message)) {
+                return type;
+            }
+        }
+        return ERROR;
+    }
+
+    public int getCode() {
+        return code;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+}

+ 153 - 0
ghj-es-api/src/main/java/com/pavis/ghjesapi/http/ResultBody.java

@@ -0,0 +1,153 @@
+package com.pavis.ghjesapi.http;
+
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.google.common.collect.Maps;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.Map;
+import java.util.ResourceBundle;
+
+@ApiModel(value = "响应结果")
+public class ResultBody {
+
+    /**
+     * 响应编码
+     */
+    @ApiModelProperty(value = "响应编码:0-请求处理成功")
+    private int code = 0;
+
+    /**
+     * 提示消息
+     */
+    @ApiModelProperty(value = "提示消息")
+    private String message;
+
+    /**
+     * 请求路径
+     */
+    @ApiModelProperty(value = "请求路径")
+    private String path;
+
+    /**
+     * 响应数据
+     */
+    @ApiModelProperty(value = "响应数据")
+    private Object data;
+
+    /**
+     * http状态码
+     */
+    private int httpStatus;
+
+    /**
+     * 附加数据
+     */
+    @ApiModelProperty(value = "附加数据")
+    private Map<String, Object> extra;
+
+    /**
+     * 响应时间
+     */
+    @ApiModelProperty(value = "响应时间")
+    private final long timestamp = System.currentTimeMillis();
+
+    public ResultBody() {
+    }
+
+    public int getCode() {
+        return code;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+
+    public String getPath() {
+        return path;
+    }
+
+    public Object getData() {
+        return data;
+    }
+
+    public Map<String, Object> getExtra() {
+        return extra;
+    }
+
+    public long getTimestamp() {
+        return timestamp;
+    }
+
+    @JSONField(serialize = false, deserialize = false)
+    @JsonIgnore
+    public int getHttpStatus() {
+        return httpStatus;
+    }
+
+    @JSONField(serialize = false, deserialize = false)
+    @JsonIgnore
+    public boolean isOk() {
+        return this.code == ErrorCode.OK.getCode();
+    }
+
+
+    public static ResultBody ok() {
+        return new ResultBody().code(ErrorCode.OK.getCode()).msg(ErrorCode.OK.getMessage());
+    }
+
+    public static ResultBody failed() {
+        return new ResultBody().code(ErrorCode.FAIL.getCode()).msg(ErrorCode.FAIL.getMessage());
+    }
+
+    public ResultBody code(int code) {
+        this.code = code;
+        return this;
+    }
+
+    public ResultBody msg(String message) {
+        this.message = i18n(ErrorCode.getResultEnum(this.code).getMessage(), message);
+        return this;
+    }
+
+    public ResultBody data(Object data) {
+        this.data = data;
+        return this;
+    }
+
+    public ResultBody path(String path) {
+        this.path = path;
+        return this;
+    }
+
+    public ResultBody httpStatus(int httpStatus) {
+        this.httpStatus = httpStatus;
+        return this;
+    }
+
+    public ResultBody put(String key, Object value) {
+        if (this.extra == null) {
+            this.extra = Maps.newHashMap();
+        }
+        this.extra.put(key, value);
+        return this;
+    }
+
+    /**
+     * 错误信息配置
+     */
+    @JSONField(serialize = false, deserialize = false)
+    @JsonIgnore
+    private static final ResourceBundle resourceBundle = ResourceBundle.getBundle("error");
+
+    /**
+     * 提示信息国际化
+     */
+    @JSONField(serialize = false, deserialize = false)
+    @JsonIgnore
+    private static String i18n(String message, String defaultMessage) {
+        return resourceBundle.containsKey(message) ? resourceBundle.getString(message) : defaultMessage;
+    }
+}

+ 31 - 0
ghj-es-api/src/main/java/com/pavis/ghjesapi/pojo/EsObj.java

@@ -0,0 +1,31 @@
+package com.pavis.ghjesapi.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.*;
+
+import java.io.Serializable;
+
+/**
+ * @program: tiaoshui
+ * @description: 教练信息DTO
+ * @author: Lyon
+ * @create: 2021-04-15 16:15
+ */
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class EsObj implements Serializable {
+
+    @TableId(type = IdType.ID_WORKER_STR)
+    private String id;
+    private String title;
+    private String subTitle;
+    private String source;
+    private String type;
+    private String url;
+    private String content;
+    private String date;
+}

+ 10 - 0
ghj-es-api/src/main/java/com/pavis/ghjesapi/service/EsService.java

@@ -0,0 +1,10 @@
+package com.pavis.ghjesapi.service;
+
+
+import java.io.IOException;
+import java.util.Map;
+
+public interface EsService {
+
+    Map<String,Object> importMysqlDataToEs() throws IOException;
+}

+ 172 - 0
ghj-es-api/src/main/java/com/pavis/ghjesapi/service/impl/EsDemoServiceImpl.java

@@ -0,0 +1,172 @@
+package com.pavis.ghjesapi.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.pavis.ghjesapi.dao.EsObjMapper;
+import com.pavis.ghjesapi.pojo.EsObj;
+import com.pavis.ghjesapi.service.EsService;
+import lombok.extern.slf4j.Slf4j;
+import org.elasticsearch.action.bulk.BulkRequest;
+import org.elasticsearch.action.bulk.BulkResponse;
+import org.elasticsearch.action.search.SearchRequest;
+import org.elasticsearch.action.search.SearchResponse;
+import org.elasticsearch.action.update.UpdateRequest;
+import org.elasticsearch.client.RequestOptions;
+import org.elasticsearch.client.RestHighLevelClient;
+import org.elasticsearch.common.unit.TimeValue;
+import org.elasticsearch.common.xcontent.XContentType;
+import org.elasticsearch.index.query.QueryBuilders;
+import org.elasticsearch.index.query.TermQueryBuilder;
+import org.elasticsearch.search.SearchHit;
+import org.elasticsearch.search.builder.SearchSourceBuilder;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @program: 01-SpringBoot-ES-Local
+ * @description: EsDemoServiceImpl
+ * @author: Guanzi
+ * @created: 2021/10/14 15:31
+ */
+@Slf4j
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class EsDemoServiceImpl implements EsService {
+
+    @Autowired
+    private EsObjMapper esObjMapper;
+
+    @Autowired
+    @Qualifier("restHighLevelClient")
+    private RestHighLevelClient client;
+
+    @Override
+    public Map<String, Object> importMysqlDataToEs() throws IOException {
+        QueryWrapper<EsObj> esDemoQueryWrapper = new QueryWrapper<>();
+        esDemoQueryWrapper.lambda()
+                .isNotNull(true, EsObj::getId);
+        List<EsObj> esObjs = esObjMapper.selectList(esDemoQueryWrapper);
+
+        // 批量导入es库。
+        BulkRequest bulkRequest = new BulkRequest();
+        bulkRequest.timeout("10s");
+
+        // 批量删除
+        // SearchResponse searchResp = searchByParam("source","能");
+        // System.out.println(searchResp.getHits().getTotalHits().value);
+        // for(SearchHit hit : searchResp.getHits()){
+        //     String id = hit.getId();
+        //     System.out.println("id:" + id);
+        //     // 批量删除
+        //     // bulkRequest.add(
+        //     //         new DeleteRequest("es_test_demo")
+        //     //         .id(id)
+        //     // );
+        // }
+
+        // 批量更新
+        // for (int i = 0; i < demos.size(); i++) {
+        //     SearchResponse searchUpResp = searchByParam("title", demos.get(i).getTitle());
+        //     for (SearchHit hit : searchUpResp.getHits()) {
+        //         String id = hit.getId();
+        //         Map<String,Object> map = hit.getSourceAsMap();
+        //         System.out.println(JSON.toJSONString(map));
+        //         // 批量更新
+        //         bulkRequest.add(
+        //                 new UpdateRequest()
+        //                         .index("es_test_demo")
+        //                         .id(id)
+        //                 .upsert(JSON.toJSONString(demos.get(i)),XContentType.JSON)
+        //         );
+        //     }
+        //
+        // }
+
+        // SearchResponse searchUpResp = searchByParam("title", demos.get(0).getTitle());
+        SearchResponse searchUpResp = searchByParam("title", "铁");
+        for (SearchHit hit : searchUpResp.getHits()) {
+            Map<String,Object> map = hit.getSourceAsMap();
+            // System.out.println(JSON.toJSONString(map));
+            // EsDemo esDemo = JSON.parseObject(JSON.toJSONString(map),EsDemo.class);
+            Map<String,Object> selMap = new HashMap<>();
+            selMap.put("title",map.get("title"));
+            System.out.println(map.get("content"));
+            System.err.println(map.get("title"));
+            List<EsObj> esObjLists = esObjMapper.selectByMap(selMap);
+            if (esObjLists.size() > 0){
+                System.out.println("2:" + esObjLists.get(0).getContent());
+                map.put("content","eeeeeeeeee" + esObjLists.get(0).getContent());
+                System.out.println("2:" + map.get("content"));
+            }
+
+            System.out.println("3:" + map.get("content"));
+            System.err.println("33:" + map.get("id"));
+            System.err.println("333:" + hit.getId());
+            // 批量更新
+            bulkRequest.add(
+                    new UpdateRequest()
+                    .index("es_test_demo")
+                            .id(hit.getId())
+                            .doc(XContentType.JSON, "content", map.get("content").toString()).upsert()
+            );
+        }
+
+
+        // 批处理请求。
+        // for (int i = 0; i < demos.size(); i++) {
+        //
+        //
+        //     bulkRequest.add(
+        //             new IndexRequest("es_test_demo")
+        //                     .source(JSON.toJSONString(demos.get(i)), XContentType.JSON)
+        //     );
+        // }
+        BulkResponse bulkResp = client.bulk(bulkRequest, RequestOptions.DEFAULT);
+        System.err.println(bulkResp.hasFailures()); // 是否失败,返回false 代表成功。
+
+        // 返回信息。
+        Map<String,Object> map = new HashMap<>();
+        if (false == bulkResp.hasFailures()){
+            map.put("mes","SUCC");
+        }else {
+            map.put("mes","fail");
+        }
+        return map;
+    }
+
+    public SearchResponse searchByParam(String key,String val) throws IOException {
+        log.info("key:{},val:{}",key,val);
+        SearchRequest searchRequest = new SearchRequest("es_test_demo");
+        // SearchRequest searchRequest = new SearchRequest("es_dome");
+        // 构建搜索条件
+        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
+
+        // 查询条件,用QueryBuilders实现
+        // QueryBuilders.termQuery 精确查找
+        TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery(key,val);
+
+        // QueryBuilders.matchAllQuery() 匹配所有。
+        // MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();
+        Integer page = 1;
+        // Integer rows = 3568;
+        Integer rows = 3;
+        searchSourceBuilder.from((page - 1) * rows);
+        searchSourceBuilder.size(rows);
+
+        searchSourceBuilder.query(termQueryBuilder);
+        searchSourceBuilder.timeout(new TimeValue(600, TimeUnit.SECONDS));
+
+        searchRequest.source(searchSourceBuilder);
+
+        SearchResponse searchResp = client.search(searchRequest, RequestOptions.DEFAULT);
+        System.out.println("search total:" + searchResp.getHits().getTotalHits().value);
+        return searchResp;
+    }
+}

+ 19 - 0
ghj-es-api/src/main/java/com/pavis/ghjesapi/utils/DateUtils.java

@@ -0,0 +1,19 @@
+package com.pavis.ghjesapi.utils;
+
+
+import com.pavis.ghjesapi.common.Constant;
+import org.joda.time.DateTime;
+
+import java.util.Date;
+
+public class DateUtils {
+
+
+    public static String now() {
+        return DateTime.now().toString(Constant.DEFAULT_DATETIME_FORMAT);
+    }
+
+    public static String dateToStr(Date date, String format) {
+        return new DateTime(date).toString(format);
+    }
+}

+ 14 - 0
ghj-es-api/src/main/java/com/pavis/ghjesapi/utils/HttpContextUtils.java

@@ -0,0 +1,14 @@
+package com.pavis.ghjesapi.utils;
+
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Objects;
+
+public class HttpContextUtils {
+
+    public static HttpServletRequest getHttpServletRequest() {
+        return ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
+    }
+}

+ 28 - 0
ghj-es-api/src/main/java/com/pavis/ghjesapi/utils/QaUtils.java

@@ -0,0 +1,28 @@
+// package com.pavis.ghjesapi.utils;
+//
+// import com.alibaba.fastjson.JSON;
+// import com.pavis.app.zhqa.model.AlgQaResult;
+// import lombok.extern.slf4j.Slf4j;
+// import org.springframework.web.client.RestTemplate;
+//
+// import java.util.HashMap;
+// import java.util.Map;
+//
+// @Slf4j
+// public class QaUtils {
+//
+//     /**
+//      * 调用算法问答接口
+//      */
+//     public static AlgQaResult getAlgQaResult(String host, String qaId, Integer type, String question) {
+//         RestTemplate restTemplate = new RestTemplate();
+//         Map<String, Object> params = new HashMap<>();
+//         params.put("host", host);
+//         params.put("qaId", qaId);
+//         params.put("type", type);
+//         params.put("question", question);
+//         AlgQaResult algQaResult = restTemplate.getForObject("http://{host}:9955/alg/qa?qaId={qaId}&type={type}&question={question}", AlgQaResult.class, params);
+//         log.info("alg qa result:{}", JSON.toJSONString(algQaResult));
+//         return algQaResult;
+//     }
+// }

+ 10 - 0
ghj-es-api/src/main/resources/application-dev.yml

@@ -0,0 +1,10 @@
+spring:
+  datasource:
+    url: jdbc:mysql://192.168.1.111:3306/es_demo?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT
+    driver-class-name: com.mysql.cj.jdbc.Driver
+    username: root
+    password: root
+# es配置
+elasticsearch:
+  hostname: 127.0.0.1
+  port: 9200

+ 11 - 0
ghj-es-api/src/main/resources/application.yml

@@ -0,0 +1,11 @@
+server:
+  port: 8077
+spring:
+  profiles:
+    active: dev
+  thymeleaf:
+    cache: false
+    mode: HTML5
+    prefix: classpath:/templates/
+mybatis-plus:
+  mapper-locations: classpath*:/mapper/**/*.xml

+ 18 - 0
ghj-es-api/src/main/resources/error.properties

@@ -0,0 +1,18 @@
+success=\u64CD\u4F5C\u6210\u529F
+fail=\u64CD\u4F5C\u5931\u8D25
+access_denied=\u65E0\u6743\u9650,\u62D2\u7EDD\u8BBF\u95EE!
+bad_credentials=\u8D26\u53F7\u6216\u5BC6\u7801\u9519\u8BEF!
+account_expired=\u8D26\u53F7\u5DF2\u8FC7\u671F!
+bad_request=\u65E0\u6548\u7684\u8BF7\u6C42,\u8BF7\u68C0\u67E5\u53C2\u6570!
+not_found=\u65E0\u6548\u7684\u8BBF\u95EE\u5730\u5740!
+method_not_allowed=\u8BF7\u6C42\u65B9\u5F0F\u4E0D\u652F\u6301!
+media_type_not_acceptable=\u5A92\u4F53\u7C7B\u578B\u4E0D\u652F\u6301!
+too_many_requests=\u8BBF\u95EE\u592A\u8FC7\u9891\u7E41\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5!
+error=\u670D\u52A1\u5668\u7E41\u5FD9,\u8BF7\u7A0D\u540E\u518D\u8BD5!
+authentication_failed=\u767B\u5F55\u5931\u8D25\uFF0C\u8BA4\u8BC1\u5931\u8D25!
+get_user_info_failed=\u767B\u5F55\u5931\u8D25\uFF0C\u7528\u6237\u4FE1\u606F\u83B7\u53D6\u5931\u8D25\u3002
+login_failure=\u767B\u5F55\u5931\u6548\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55\u3002
+request_org_failed=\u7EC4\u7EC7\u5217\u8868\u83B7\u53D6\u5931\u8D25\u3002
+is_relation_exist=\u6743\u9650\u5DF2\u5B58\u5728\uFF0C\u8BF7\u52FF\u91CD\u590D\u6DFB\u52A0\u3002
+qa_no_response=\u95EE\u7B54\u65E0\u54CD\u5E94,\u7B97\u6CD5\u51FA\u9519\uFF01
+illegal_argument=\u53C2\u6570\u4E0D\u5408\u6CD5!

+ 228 - 0
ghj-es-api/src/test/java/com/pavis/ghjesapi/GhjEsApiApplicationTests.java

@@ -0,0 +1,228 @@
+package com.pavis.ghjesapi;
+
+import com.alibaba.fastjson.JSON;
+import com.pavis.ghjesapi.common.Constant;
+import com.pavis.ghjesapi.form.Player;
+import lombok.extern.slf4j.Slf4j;
+import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
+import org.elasticsearch.action.bulk.BulkRequest;
+import org.elasticsearch.action.bulk.BulkResponse;
+import org.elasticsearch.action.delete.DeleteRequest;
+import org.elasticsearch.action.delete.DeleteResponse;
+import org.elasticsearch.action.get.GetRequest;
+import org.elasticsearch.action.get.GetResponse;
+import org.elasticsearch.action.index.IndexRequest;
+import org.elasticsearch.action.index.IndexResponse;
+import org.elasticsearch.action.search.SearchRequest;
+import org.elasticsearch.action.search.SearchResponse;
+import org.elasticsearch.action.support.master.AcknowledgedResponse;
+import org.elasticsearch.action.update.UpdateRequest;
+import org.elasticsearch.action.update.UpdateResponse;
+import org.elasticsearch.client.RequestOptions;
+import org.elasticsearch.client.RestHighLevelClient;
+import org.elasticsearch.client.indices.CreateIndexRequest;
+import org.elasticsearch.client.indices.CreateIndexResponse;
+import org.elasticsearch.client.indices.GetIndexRequest;
+import org.elasticsearch.common.unit.TimeValue;
+import org.elasticsearch.common.xcontent.XContentType;
+import org.elasticsearch.index.query.QueryBuilders;
+import org.elasticsearch.index.query.TermQueryBuilder;
+import org.elasticsearch.search.SearchHit;
+import org.elasticsearch.search.builder.SearchSourceBuilder;
+import org.elasticsearch.search.fetch.subphase.FetchSourceContext;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.boot.test.context.SpringBootTest;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+@Slf4j
+@SpringBootTest
+class GhjEsApiApplicationTests {
+
+	@Autowired
+	@Qualifier("restHighLevelClient")
+	private RestHighLevelClient client;
+
+	// 创建索引
+	@Test
+	void createIndex() throws IOException {
+		// 1.创建索引
+		CreateIndexRequest request = new CreateIndexRequest(Constant.ES_INDEX);
+		// 2.执行客户端请求,获取响应。
+		CreateIndexResponse response = client.indices()
+				.create(request, RequestOptions.DEFAULT);
+		log.info("create index response:{}",response);
+	}
+
+	// 获取索引,判断是否存在。
+	@Test
+	void testEixstIndex() throws IOException {
+		GetIndexRequest request = new GetIndexRequest(Constant.ES_INDEX);
+		Boolean exists = client.indices().exists(request,RequestOptions.DEFAULT);
+		log.info("index exists:{}",exists);
+	}
+
+	// 删除索引
+	@Test
+	void delIndex() throws IOException {
+		DeleteIndexRequest request = new DeleteIndexRequest("table_tennis2");
+		// 删除
+		AcknowledgedResponse response = client.indices().delete(request,RequestOptions.DEFAULT);
+		log.info("del reponse:{}", JSON.toJSONString(response));
+		log.info("delete status:{}",response.isAcknowledged());
+	}
+
+	// 添加文档
+	@Test
+	void testAddDoc() throws IOException {
+		// 创建对象
+		Player player = new Player("wmy",21);
+		// 创建请求
+		IndexRequest request = new IndexRequest(Constant.ES_INDEX);
+		// 规则 put /table_tennis/_doc/1
+		request.id("1");
+		request.timeout(TimeValue.timeValueSeconds(1));
+		request.timeout("1s");
+
+		// 将我们得数据放入请求,json
+		request.source(JSON.toJSONString(player), XContentType.JSON);
+
+		// 客户端发送请求
+		IndexResponse response = client.index(request, RequestOptions.DEFAULT);
+		System.err.println(response.toString());
+		// 对应我们命令返回得状态
+		System.err.println(response.status());
+	}
+
+	// 获取文档前,先判断是否存在
+	@Test
+	void testExistDoc() throws IOException {
+		GetRequest getReq = new GetRequest(Constant.ES_INDEX, "1");
+		// 不获取返回得_source得上下文了。
+		getReq.fetchSourceContext(new FetchSourceContext(false));
+		getReq.storedFields("_none_");
+
+		boolean exists = client.exists(getReq, RequestOptions.DEFAULT);
+		System.err.println(exists);
+	}
+
+	// 获取文档
+	@Test
+	void testGetDoc() throws IOException {
+		GetRequest getReq = new GetRequest(Constant.ES_INDEX, "1");
+		GetResponse getResp = client.get(getReq, RequestOptions.DEFAULT);
+		// 打印文档得内容
+		System.err.println(getResp.getSourceAsString());
+		// 返回得内容和命令是一样得。
+		System.out.println(getResp);
+	}
+
+	// 更新文档信息
+	@Test
+	void testUpdateDoc() throws IOException {
+		UpdateRequest upReq = new UpdateRequest(Constant.ES_INDEX, "1");
+		upReq.timeout("1s");
+
+		Player player = new Player("wmyu",21);
+		upReq.doc(JSON.toJSONString(player),XContentType.JSON);
+
+		UpdateResponse upResp = client.update(upReq, RequestOptions.DEFAULT);
+		System.out.println(upResp);
+		System.out.println(upResp.status());
+	}
+
+	// 删除文档信息
+	@Test
+	void testDelDoc() throws IOException {
+		DeleteRequest delReq = new DeleteRequest(Constant.ES_INDEX, "1");
+		delReq.timeout("1s");
+		DeleteResponse delResp = client.delete(delReq, RequestOptions.DEFAULT);
+		System.out.println(delResp);
+		System.out.println(delResp.status());
+	}
+
+	// 批量添加
+	@Test
+	void testBulkReq() throws IOException {
+		BulkRequest bulkRequest = new BulkRequest();
+		bulkRequest.timeout("10s");
+
+		List<Player> players = new ArrayList<>();
+		players.add(new Player("wmy",21));
+		players.add(new Player("sys",20));
+		players.add(new Player("cm",23));
+		players.add(new Player("lsw",24));
+
+		// 批处理请求
+		for (int i = 0; i < players.size(); i++) {
+			bulkRequest.add(
+					new IndexRequest("table_tennis")
+							.id(""+(i+1))
+							.source(JSON.toJSONString(players.get(i)),XContentType.JSON)
+			);
+		}
+		BulkResponse bulkResp = client.bulk(bulkRequest, RequestOptions.DEFAULT);
+		System.err.println(bulkResp.hasFailures()); // 是否失败,返回false 代表成功。
+	}
+
+	// 查询
+	// SearchRequest 搜索请求
+	// SearchSourceBuilder 条件构造
+	// HighlightBuilder 构建高亮
+	// TermQueryBuilder 精确查询
+	// MatchAllQueryBuilder 匹配所有
+	// xxx QueryBuilder 对应我们得命令。
+	@Test
+	void testSearch() throws IOException {
+		SearchRequest searchRequest = new SearchRequest(Constant.ES_INDEX);
+		// 构建搜索条件
+		SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
+
+		// 查询条件,用QueryBuilders实现
+		// QueryBuilders.termQuery 精确查找
+		TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name","wmy");
+
+		// QueryBuilders.matchAllQuery() 匹配所有。
+		// MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();
+
+		searchSourceBuilder.query(termQueryBuilder);
+		searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
+
+		searchRequest.source(searchSourceBuilder);
+
+		SearchResponse searchResp = client.search(searchRequest, RequestOptions.DEFAULT);
+		System.out.println(JSON.toJSONString(searchResp.getHits()));
+		System.out.println("=========================================");
+		for (SearchHit hit : searchResp.getHits()) {
+			System.out.println(hit.getSourceAsMap());
+		}
+
+
+	}
+
+	// 删除文档信息
+	@Test
+	void testDelDocByName() throws IOException {
+		DeleteRequest delReq = new DeleteRequest("table_tennis", "1");
+		delReq.timeout("1s");
+
+		SearchRequest searchRequest = new SearchRequest(Constant.ES_INDEX);
+		SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
+		TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name","wmy");
+		searchSourceBuilder.query(termQueryBuilder);
+		searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
+
+		searchRequest.source(searchSourceBuilder);
+
+		SearchResponse searchResp = client.search(searchRequest, RequestOptions.DEFAULT);
+		DeleteResponse delResp = client.delete(delReq, RequestOptions.DEFAULT);
+		System.out.println(delResp);
+		System.out.println(delResp.status());
+	}
+
+}