koul vor 5 Jahren
Commit
63e51a2f04
100 geänderte Dateien mit 12632 neuen und 0 gelöschten Zeilen
  1. 33 0
      .gitignore
  2. 118 0
      .mvn/wrapper/MavenWrapperDownloader.java
  3. BIN
      .mvn/wrapper/maven-wrapper.jar
  4. 2 0
      .mvn/wrapper/maven-wrapper.properties
  5. BIN
      lib/ojdbc7.jar
  6. 310 0
      mvnw
  7. 182 0
      mvnw.cmd
  8. 201 0
      pom.xml
  9. 23 0
      src/main/java/com/uas/UasFbApplication.java
  10. 63 0
      src/main/java/com/uas/core/WebAppConfig.java
  11. 39 0
      src/main/java/com/uas/core/config/AsyncConfig.java
  12. 102 0
      src/main/java/com/uas/core/config/DruidDBConfig.java
  13. 25 0
      src/main/java/com/uas/core/config/DynamicDataSource.java
  14. 175 0
      src/main/java/com/uas/core/config/DynamicDataSourceRegister.java
  15. 38 0
      src/main/java/com/uas/core/config/SpObserver.java
  16. 30 0
      src/main/java/com/uas/core/support/DataSourceInterceptor.java
  17. 48 0
      src/main/java/com/uas/core/support/GetProperties.java
  18. 82 0
      src/main/java/com/uas/core/support/LoginInterceptor.java
  19. 46 0
      src/main/java/com/uas/core/support/SpringDynamicCronTask.java
  20. 16 0
      src/main/java/com/uas/core/support/TokenHandler.java
  21. 19 0
      src/main/java/com/uas/core/support/TokenPropertiesListener.java
  22. 607 0
      src/main/java/com/uas/dao/BaseDao.java
  23. 13 0
      src/main/java/com/uas/dao/BusinessChangeDao.java
  24. 12 0
      src/main/java/com/uas/dao/BusinessDao.java
  25. 12 0
      src/main/java/com/uas/dao/BusinessDetailDao.java
  26. 13 0
      src/main/java/com/uas/dao/CpwsDao.java
  27. 13 0
      src/main/java/com/uas/dao/CpwsDetailDao.java
  28. 12 0
      src/main/java/com/uas/dao/CustomerDao.java
  29. 12 0
      src/main/java/com/uas/dao/DanBaoDao.java
  30. 12 0
      src/main/java/com/uas/dao/DcdyDao.java
  31. 12 0
      src/main/java/com/uas/dao/DcdyDetailDao.java
  32. 12 0
      src/main/java/com/uas/dao/ExecutedPersonDao.java
  33. 12 0
      src/main/java/com/uas/dao/GqczDao.java
  34. 12 0
      src/main/java/com/uas/dao/InvestorDao.java
  35. 13 0
      src/main/java/com/uas/dao/InvestorRJDetailDao.java
  36. 12 0
      src/main/java/com/uas/dao/InvestorSJDetailDao.java
  37. 12 0
      src/main/java/com/uas/dao/JyycDao.java
  38. 13 0
      src/main/java/com/uas/dao/KtggDao.java
  39. 12 0
      src/main/java/com/uas/dao/KtggDetailDao.java
  40. 12 0
      src/main/java/com/uas/dao/MemberDao.java
  41. 12 0
      src/main/java/com/uas/dao/QsjlDao.java
  42. 36 0
      src/main/java/com/uas/dao/RowConvert.java
  43. 12 0
      src/main/java/com/uas/dao/SfxzDao.java
  44. 471 0
      src/main/java/com/uas/dao/SqlMap.java
  45. 431 0
      src/main/java/com/uas/dao/SqlRowList.java
  46. 12 0
      src/main/java/com/uas/dao/SsggDao.java
  47. 12 0
      src/main/java/com/uas/dao/SswfDao.java
  48. 12 0
      src/main/java/com/uas/dao/SxbzxrDao.java
  49. 54 0
      src/main/java/com/uas/entity/Action.java
  50. 24 0
      src/main/java/com/uas/entity/ActionConfig.java
  51. 528 0
      src/main/java/com/uas/entity/Business.java
  52. 106 0
      src/main/java/com/uas/entity/BusinessChange.java
  53. 118 0
      src/main/java/com/uas/entity/BusinessDetail.java
  54. 185 0
      src/main/java/com/uas/entity/Cpws.java
  55. 205 0
      src/main/java/com/uas/entity/CpwsDetail.java
  56. 145 0
      src/main/java/com/uas/entity/Customer.java
  57. 264 0
      src/main/java/com/uas/entity/DanBao.java
  58. 187 0
      src/main/java/com/uas/entity/Dcdy.java
  59. 117 0
      src/main/java/com/uas/entity/DcdyDetail.java
  60. 54 0
      src/main/java/com/uas/entity/ErrorMsg.java
  61. 127 0
      src/main/java/com/uas/entity/ExecutedPerson.java
  62. 157 0
      src/main/java/com/uas/entity/Gqcz.java
  63. 43 0
      src/main/java/com/uas/entity/Group.java
  64. 116 0
      src/main/java/com/uas/entity/Investor.java
  65. 99 0
      src/main/java/com/uas/entity/InvestorRJDetail.java
  66. 99 0
      src/main/java/com/uas/entity/InvestorSJDetail.java
  67. 116 0
      src/main/java/com/uas/entity/Jyyc.java
  68. 204 0
      src/main/java/com/uas/entity/Ktgg.java
  69. 114 0
      src/main/java/com/uas/entity/KtggDetail.java
  70. 76 0
      src/main/java/com/uas/entity/Member.java
  71. 136 0
      src/main/java/com/uas/entity/Qsjl.java
  72. 197 0
      src/main/java/com/uas/entity/Sfxz.java
  73. 107 0
      src/main/java/com/uas/entity/Ssgg.java
  74. 136 0
      src/main/java/com/uas/entity/Sswf.java
  75. 196 0
      src/main/java/com/uas/entity/Sxbzxr.java
  76. 58 0
      src/main/java/com/uas/exception/ExceptionHandlerAdvice.java
  77. 48 0
      src/main/java/com/uas/exception/SystemException.java
  78. 54 0
      src/main/java/com/uas/service/CustomerService.java
  79. 741 0
      src/main/java/com/uas/service/Impl/CustomerServiceImpl.java
  80. 41 0
      src/main/java/com/uas/task/ScheduleTask.java
  81. 148 0
      src/main/java/com/uas/utils/BaseUtil.java
  82. 343 0
      src/main/java/com/uas/utils/CollectionUtil.java
  83. 132 0
      src/main/java/com/uas/utils/Constant.java
  84. 84 0
      src/main/java/com/uas/utils/ContextUtil.java
  85. 566 0
      src/main/java/com/uas/utils/DateUtil.java
  86. 58 0
      src/main/java/com/uas/utils/FlexJsonUtil.java
  87. 40 0
      src/main/java/com/uas/utils/Hex.java
  88. 99 0
      src/main/java/com/uas/utils/HmacEncoder.java
  89. 9 0
      src/main/java/com/uas/utils/HmacSHA256Encoder.java
  90. 46 0
      src/main/java/com/uas/utils/HmacUtils.java
  91. 979 0
      src/main/java/com/uas/utils/HttpUtil.java
  92. 86 0
      src/main/java/com/uas/utils/JSONUtil.java
  93. 174 0
      src/main/java/com/uas/utils/JacksonUtil.java
  94. 53 0
      src/main/java/com/uas/utils/JwtUtil.java
  95. 69 0
      src/main/java/com/uas/utils/MD5Util.java
  96. 14 0
      src/main/java/com/uas/utils/MapKeyComparator.java
  97. 270 0
      src/main/java/com/uas/utils/NumberUtil.java
  98. 858 0
      src/main/java/com/uas/utils/SqlUtil.java
  99. 324 0
      src/main/java/com/uas/utils/StringUtil.java
  100. 50 0
      src/main/resources/application-dev.yml

+ 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/

+ 118 - 0
.mvn/wrapper/MavenWrapperDownloader.java

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

BIN
.mvn/wrapper/maven-wrapper.jar


+ 2 - 0
.mvn/wrapper/maven-wrapper.properties

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

BIN
lib/ojdbc7.jar


+ 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%

+ 201 - 0
pom.xml

@@ -0,0 +1,201 @@
+<?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>1.5.14.RELEASE</version>
+        <relativePath/> <!-- lookup parent from repository -->
+    </parent>
+    <groupId>com.uas</groupId>
+    <artifactId>uas-fb</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <name>uas-fb</name>
+    <description>Demo project for Spring Boot</description>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+        <java.version>1.8</java.version>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-jdbc</artifactId>
+        </dependency>
+
+        <!-- <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-devtools</artifactId>
+        </dependency> -->
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-jpa</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>log4j</groupId>
+            <artifactId>log4j</artifactId>
+            <version>1.2.17</version>
+        </dependency>
+
+        <dependency>
+            <groupId>net.sf.json-lib</groupId>
+            <artifactId>json-lib</artifactId>
+            <version>2.4</version>
+            <classifier>jdk15</classifier>
+        </dependency>
+
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>1.2.15</version>
+        </dependency>
+
+        <dependency>
+            <groupId>io.jsonwebtoken</groupId>
+            <artifactId>jjwt</artifactId>
+            <version>0.6.0</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.codehaus.jackson</groupId>
+            <artifactId>jackson-core-asl</artifactId>
+            <version>1.9.13</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.codehaus.jackson</groupId>
+            <artifactId>jackson-mapper-asl</artifactId>
+            <version>1.9.13</version>
+        </dependency>
+
+        <dependency>
+            <groupId>net.sf.flexjson</groupId>
+            <artifactId>flexjson</artifactId>
+            <version>2.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-cache</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpcore</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpmime</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.oracle</groupId>
+            <artifactId>oracle</artifactId>
+            <version>1.0.0</version>
+            <scope>system</scope>
+            <systemPath>${project.basedir}/lib/ojdbc7.jar</systemPath>
+        </dependency>
+
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>druid</artifactId>
+            <version>1.0.26</version>
+        </dependency>
+
+        <!--<dependency>
+            <groupId>org.samba.jcifs</groupId>
+            <artifactId>jcifs</artifactId>
+            <version>1.3.3</version>
+        </dependency>-->
+
+        <!--<dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi</artifactId>
+            <version>3.14</version>
+        </dependency>-->
+
+    </dependencies>
+
+    <build>
+        <finalName>${artifactId}</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <configuration>
+                    <!-- 指定SpringBoot程序的main函数入口类 -->
+                    <mainClass>com.uas.UasFbApplication</mainClass>
+                </configuration>
+
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+
+            <plugin>
+
+                <groupId>org.apache.maven.plugins</groupId>
+
+                <artifactId>maven-compiler-plugin</artifactId>
+
+                <configuration>
+
+                    <source>8</source>
+                    <target>8</target>
+
+                    <compilerArguments>
+                        <!-- 打包本地jar包 -->
+                        <extdirs>${project.basedir}/lib</extdirs>
+                    </compilerArguments>
+                </configuration>
+
+            </plugin>
+
+        </plugins>
+
+
+        <!-- 打包所有jar包 -->
+        <resources>
+            <resource>
+                <directory>lib</directory>
+                <targetPath>BOOT-INF/lib/</targetPath>
+                <includes>
+                    <include>**/*.jar</include>
+                </includes>
+            </resource>
+
+            <!-- 某些情况下,打包后运行不起来需要打开注释 -->
+            <resource>
+                <directory>src/main/resources</directory>
+                <!-- <targetPath>BOOT-INF/classes/</targetPath>-->
+            </resource>
+
+
+        </resources>
+
+    </build>
+</project>

+ 23 - 0
src/main/java/com/uas/UasFbApplication.java

@@ -0,0 +1,23 @@
+package com.uas;
+
+import com.uas.core.config.DynamicDataSourceRegister;
+import com.uas.core.support.TokenPropertiesListener;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cache.annotation.EnableCaching;
+import org.springframework.context.annotation.Import;
+import org.springframework.scheduling.annotation.EnableScheduling;
+
+@SpringBootApplication
+@EnableCaching
+@EnableScheduling
+@Import({DynamicDataSourceRegister.class})
+public class UasFbApplication {
+
+    public static void main(String[] args) {
+        SpringApplication application = new SpringApplication(UasFbApplication.class);
+        application.addListeners(new TokenPropertiesListener("http.properties"));
+        application.run(args);
+    }
+
+}

+ 63 - 0
src/main/java/com/uas/core/WebAppConfig.java

@@ -0,0 +1,63 @@
+package com.uas.core;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.uas.core.support.DataSourceInterceptor;
+import com.uas.core.support.LoginInterceptor;
+import com.uas.core.support.LoginInterceptor;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.converter.HttpMessageConverter;
+import org.springframework.http.converter.StringHttpMessageConverter;
+import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
+import org.springframework.web.servlet.config.annotation.ContentNegotiationConfigurer;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
+
+import java.nio.charset.Charset;
+import java.text.SimpleDateFormat;
+import java.util.List;
+
+@Configuration
+public class WebAppConfig extends WebMvcConfigurationSupport {
+
+	@Bean
+	public LoginInterceptor loginInterceptor(){
+		return new LoginInterceptor();
+	}
+	
+	public void addInterceptors(InterceptorRegistry registry){
+		registry.addInterceptor(loginInterceptor()).addPathPatterns("/**")
+				.excludePathPatterns("/EIS/login")
+				.excludePathPatterns("/test/*")
+				.excludePathPatterns("/favicon.ico")
+				.excludePathPatterns("/error");
+		registry.addInterceptor(new DataSourceInterceptor()).addPathPatterns("/*/**");
+	}
+	
+	@Bean
+    public HttpMessageConverter<String> responseBodyConverter() {
+        StringHttpMessageConverter converter = new StringHttpMessageConverter(Charset.forName("UTF-8"));
+        return converter;
+    }
+
+	@Bean
+	public MappingJackson2HttpMessageConverter MappingJacksonHttpMessageConverter(){
+		MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
+		ObjectMapper objectMapper = new ObjectMapper();
+		objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
+		converter.setObjectMapper(objectMapper);
+		return converter;
+	}
+	
+    @Override
+    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
+        super.configureMessageConverters(converters);
+        converters.add(responseBodyConverter());
+        converters.add(MappingJacksonHttpMessageConverter());
+    }
+
+    @Override
+    public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
+        configurer.favorPathExtension(false);
+    }
+}

+ 39 - 0
src/main/java/com/uas/core/config/AsyncConfig.java

@@ -0,0 +1,39 @@
+package com.uas.core.config;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import java.util.concurrent.Executor;
+import java.util.concurrent.ThreadPoolExecutor;
+
+/**
+ * @Author: zhouy
+ * @Date: 2020/5/22 13:43
+ */
+@Configuration
+@EnableAsync  // 启用异步任务
+public class AsyncConfig{
+    // 声明一个线程池(并指定线程池的名字)
+    @Bean("taskExecutor")
+    public Executor asyncExecutor() {
+        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
+        //核心线程数10:线程池创建时候初始化的线程数
+        executor.setCorePoolSize(2);
+        //最大线程数20:线程池最大的线程数,只有在缓冲队列满了之后才会申请超过核心线程数的线程
+        executor.setMaxPoolSize(20);
+        //缓冲队列500:用来缓冲执行任务的队列
+        executor.setQueueCapacity(1000);
+        //允许线程的空闲时间60秒:当超过了核心线程出之外的线程在空闲时间到达之后会被销毁
+        executor.setKeepAliveSeconds(60);
+        //线程池名的前缀:设置好了之后可以方便我们定位处理任务所在的线程池
+        executor.setThreadNamePrefix("DailyAsync-");
+        //所有任务处理完毕开始关闭线程池
+        executor.setWaitForTasksToCompleteOnShutdown(true);
+        // rejection-policy:当pool已经达到max size的时候,如何处理新任务
+        // CALLER_RUNS:不在新线程中执行任务,而是有调用者所在的线程来执行
+        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
+        executor.initialize();
+        return executor;
+    }
+}

+ 102 - 0
src/main/java/com/uas/core/config/DruidDBConfig.java

@@ -0,0 +1,102 @@
+package com.uas.core.config;
+
+import com.alibaba.druid.pool.DruidDataSource;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+
+import javax.sql.DataSource;
+import java.sql.SQLException;
+
+
+@Configuration
+public class DruidDBConfig {
+
+    @Value("${spring.datasource.url}")
+    private String dbUrl;
+
+    @Value("${spring.datasource.username}")
+    private String username;
+
+    @Value("${spring.datasource.password}")
+    private String password;
+
+    @Value("${spring.datasource.driverClassName}")
+    private String driverClassName;
+
+    @Value("${spring.datasource.initialSize}")
+    private int initialSize;
+
+    @Value("${spring.datasource.minIdle}")
+    private int minIdle;
+
+    @Value("${spring.datasource.maxActive}")
+    private int maxActive;
+
+    @Value("${spring.datasource.maxWait}")
+    private int maxWait;
+
+    @Value("${spring.datasource.timeBetweenEvictionRunsMillis}")
+    private int timeBetweenEvictionRunsMillis;
+
+    @Value("${spring.datasource.minEvictableIdleTimeMillis}")
+    private int minEvictableIdleTimeMillis;
+
+    @Value("${spring.datasource.validationQuery}")
+    private String validationQuery;
+
+    @Value("${spring.datasource.testWhileIdle}")
+    private boolean testWhileIdle;
+
+    @Value("${spring.datasource.testOnBorrow}")
+    private boolean testOnBorrow;
+
+    @Value("${spring.datasource.testOnReturn}")
+    private boolean testOnReturn;
+
+    @Value("${spring.datasource.poolPreparedStatements}")
+    private boolean poolPreparedStatements;
+
+    @Value("${spring.datasource.maxPoolPreparedStatementPerConnectionSize}")
+    private int maxPoolPreparedStatementPerConnectionSize;
+
+    @Value("${spring.datasource.filters}")
+    private String filters;
+
+    @Value("{spring.datasource.connectionProperties}")
+    private String connectionProperties;
+
+    @Bean     //声明其为Bean实例
+    @Primary  //在同样的DataSource中,首先使用被标注的DataSource
+    public DataSource dataSource(){
+        DruidDataSource datasource = new DruidDataSource();
+
+        datasource.setUrl(this.dbUrl);
+        datasource.setUsername(username);
+        datasource.setPassword(password);
+        datasource.setDriverClassName(driverClassName);
+
+        //configuration
+        datasource.setInitialSize(initialSize);
+        datasource.setMinIdle(minIdle);
+        datasource.setMaxActive(maxActive);
+        datasource.setMaxWait(maxWait);
+        datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
+        datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
+        datasource.setValidationQuery(validationQuery);
+        datasource.setTestWhileIdle(testWhileIdle);
+        datasource.setTestOnBorrow(testOnBorrow);
+        datasource.setTestOnReturn(testOnReturn);
+        datasource.setPoolPreparedStatements(poolPreparedStatements);
+        datasource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
+        try {
+            datasource.setFilters(filters);
+        } catch (SQLException e) {
+            e.printStackTrace();
+        }
+        datasource.setConnectionProperties(connectionProperties);
+
+        return datasource;
+    }
+}

+ 25 - 0
src/main/java/com/uas/core/config/DynamicDataSource.java

@@ -0,0 +1,25 @@
+package com.uas.core.config;
+
+import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
+
+/**
+ * 动态数据源
+ *
+ */
+public class DynamicDataSource extends AbstractRoutingDataSource {
+	/**
+     * 代码中的determineCurrentLookupKey方法取得一个字符串,
+     * 该字符串将与配置文件中的相应字符串进行匹配以定位数据源,配置文件,即applicationContext.xml文件中需要要如下代码:(non-Javadoc)
+     * @see org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource#determineCurrentLookupKey()
+     */
+	@Override
+	protected Object determineCurrentLookupKey() {
+		 /*
+	      * DynamicDataSourceManage代码中使用setDataSourceType
+	      * 设置当前的数据源,在路由类中使用getDataSourceType进行获取,
+	      *  交给AbstractRoutingDataSource进行注入使用。
+	      */
+		return SpObserver.getSp();
+	}
+
+}

+ 175 - 0
src/main/java/com/uas/core/config/DynamicDataSourceRegister.java

@@ -0,0 +1,175 @@
+package com.uas.core.config;
+
+import org.springframework.beans.MutablePropertyValues;
+import org.springframework.beans.PropertyValues;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.support.BeanDefinitionRegistry;
+import org.springframework.beans.factory.support.GenericBeanDefinition;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
+import org.springframework.boot.bind.RelaxedDataBinder;
+import org.springframework.boot.bind.RelaxedPropertyResolver;
+import org.springframework.context.EnvironmentAware;
+import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
+import org.springframework.core.convert.ConversionService;
+import org.springframework.core.convert.support.DefaultConversionService;
+import org.springframework.core.env.Environment;
+import org.springframework.core.type.AnnotationMetadata;
+import org.springframework.jdbc.core.JdbcTemplate;
+
+import javax.sql.DataSource;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 动态数据源注册;
+ */
+public class DynamicDataSourceRegister  implements ImportBeanDefinitionRegistrar, EnvironmentAware {
+   
+	@Autowired
+    JdbcTemplate jdbcTemplate;
+	
+    //如配置文件中未指定数据源类型,使用该默认值
+    private static final Object DATASOURCE_TYPE_DEFAULT = "com.alibaba.druid.pool.DruidDataSource";
+    private ConversionService conversionService = new DefaultConversionService();
+    private PropertyValues dataSourcePropertyValues;
+   
+    // 默认数据源
+    private DataSource defaultDataSource;
+   
+    private Map<String, DataSource> customDataSources = new HashMap<String, DataSource>();
+   
+    /**
+     * 加载多数据源配置
+     */
+    @Override
+    public void setEnvironment(Environment environment) {
+    	initDefaultDataSource(environment);
+    	initCustomDataSources(environment);
+    }
+   
+    /**
+     * 加载主数据源配置.
+     * @param env
+     */
+    private void initDefaultDataSource(Environment env){
+    	// 读取主数据源
+    	RelaxedPropertyResolver propertyResolver = new RelaxedPropertyResolver(env, "spring.datasource.");
+       
+        Map<String, Object> dsMap = new HashMap<String, Object>();
+        dsMap.put("type", propertyResolver.getProperty("type"));
+        dsMap.put("driverClassName", propertyResolver.getProperty("driverClassName"));
+        dsMap.put("url", propertyResolver.getProperty("url"));
+        dsMap.put("username", propertyResolver.getProperty("username"));
+        dsMap.put("password", propertyResolver.getProperty("password"));
+        
+        //创建数据源;
+        defaultDataSource = buildDataSource(dsMap);
+        dataBinder(defaultDataSource, env);
+        customDataSources.put(propertyResolver.getProperty("username"), defaultDataSource);
+    }
+   
+    /**
+     * 初始化更多数据源
+     *
+     */
+    private void initCustomDataSources(Environment env) {
+        // 读取配置文件获取更多数据源,也可以通过defaultDataSource读取数据库获取更多数据源
+    	/*DynamicDataSourceManage.setDataSourceType("UAS_DEV");
+    	List<Map<String , Object>> master = jdbcTemplate.queryForList("select MA_USER,MA_PWD from master");
+    	System.out.println(master);*/
+    	JdbcTemplate jdbcTemplate = new JdbcTemplate(defaultDataSource);
+    	List<Map<String , Object>> master = jdbcTemplate.queryForList("select MA_USER,MS_PWD from master");
+    	// 读取主数据源
+        RelaxedPropertyResolver propertyResolver = new RelaxedPropertyResolver(env, "spring.datasource.");
+    	for(Map<String , Object> map : master){
+    		String ma_user = (String)map.get("MA_USER");
+    		Map<String, Object> dsMap = new HashMap<>();
+    		dsMap.put("type", propertyResolver.getProperty("type"));
+            dsMap.put("driverClassName", propertyResolver.getProperty("driverClassName"));
+            dsMap.put("url", propertyResolver.getProperty("url"));
+            dsMap.put("password", propertyResolver.getProperty("password"));
+            dsMap.put("username", ma_user);
+            DataSource ds = buildDataSource(dsMap);
+            customDataSources.put(ma_user, ds);
+            dataBinder(ds, env);
+    	}
+        /*RelaxedPropertyResolver propertyResolver = new RelaxedPropertyResolver(env, "custom.datasource.");
+        String dsPrefixs = propertyResolver.getProperty("names");
+        for (String dsPrefix : dsPrefixs.split(",")) {// 多个数据源
+            Map<String, Object> dsMap = propertyResolver.getSubProperties(dsPrefix + ".");
+            DataSource ds = buildDataSource(dsMap);
+            customDataSources.put(dsPrefix, ds);
+            dataBinder(ds, env);
+        }*/
+    }
+   
+    /**
+     * 创建datasource.
+     * @param dsMap
+     * @return
+     */
+    @SuppressWarnings("unchecked")
+    public DataSource buildDataSource(Map<String, Object> dsMap) {
+    	Object type = dsMap.get("type");
+        if (type == null){
+            type = DATASOURCE_TYPE_DEFAULT;// 默认DataSource
+        }
+        Class<? extends DataSource> dataSourceType;
+       
+       try {
+           	dataSourceType = (Class<? extends DataSource>) Class.forName((String) type);
+           	String driverClassName = dsMap.get("driverClassName").toString();
+            String url = dsMap.get("url").toString();
+            String username = dsMap.get("username").toString();
+            String password = dsMap.get("password").toString();
+            DataSourceBuilder factory =   DataSourceBuilder.create().driverClassName(driverClassName).url(url).username(username).password(password).type(dataSourceType);
+            return factory.build();
+       } catch (ClassNotFoundException e) {
+           e.printStackTrace();
+       }
+       return null;
+    }
+   
+    /**
+     * 为DataSource绑定更多数据
+     * @param dataSource
+     * @param env
+     */
+    private void dataBinder(DataSource dataSource, Environment env){
+    	RelaxedDataBinder dataBinder = new RelaxedDataBinder(dataSource);
+    	dataBinder.setConversionService(conversionService);
+    	dataBinder.setIgnoreNestedProperties(false);//false
+        dataBinder.setIgnoreInvalidFields(false);//false
+        dataBinder.setIgnoreUnknownFields(true);//true
+       
+        if(dataSourcePropertyValues == null){
+            Map<String, Object> values = new HashMap<>();
+            dataSourcePropertyValues = new MutablePropertyValues(values);
+        }
+        dataBinder.bind(dataSourcePropertyValues);
+       
+    }
+   
+ 
+    @Override
+    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
+       	Map<Object, Object> targetDataSources = new HashMap<Object, Object>();
+       	// 将主数据源添加到更多数据源中
+        /*targetDataSources.put("dataSource", defaultDataSource);
+        DynamicDataSourceManage.dataSourceIds.add("dataSource");*/
+        // 添加更多数据源
+        targetDataSources.putAll(customDataSources);
+        // 创建DynamicDataSource
+        GenericBeanDefinition beanDefinition = new GenericBeanDefinition();
+        beanDefinition.setBeanClass(DynamicDataSource.class);
+       
+        beanDefinition.setSynthetic(true);
+        MutablePropertyValues mpv = beanDefinition.getPropertyValues();
+        //添加属性:AbstractRoutingDataSource.defaultTargetDataSource
+        mpv.addPropertyValue("defaultTargetDataSource", defaultDataSource);
+        mpv.addPropertyValue("targetDataSources", targetDataSources);
+        registry.registerBeanDefinition("dataSource", beanDefinition);
+    }
+ 
+}

+ 38 - 0
src/main/java/com/uas/core/config/SpObserver.java

@@ -0,0 +1,38 @@
+package com.uas.core.config;
+
+/**
+ * 
+ */
+public class SpObserver {
+
+	private static ThreadLocal<String> prev = new InheritableThreadLocal<String>();
+	private static ThreadLocal<String> local = new InheritableThreadLocal<String>();
+
+	/**
+	 * 切换数据源
+	 * 
+	 * @param sp
+	 *            dbsource name
+	 */
+	public static void putSp(String sp) {
+		prev.set(getSp());
+		local.set(sp);
+	}
+
+	public static String getSp() {
+		return (String) local.get();
+	}
+
+	public static void clear() {
+		prev.set(null);
+		local.set(null);
+	}
+
+	/**
+	 * 切换回之前数据源
+	 */
+	public static void back() {
+		local.set(prev.get());
+		prev.set(null);
+	}
+}

+ 30 - 0
src/main/java/com/uas/core/support/DataSourceInterceptor.java

@@ -0,0 +1,30 @@
+package com.uas.core.support;
+
+import com.uas.core.config.SpObserver;
+import org.springframework.web.servlet.HandlerInterceptor;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+public class DataSourceInterceptor implements HandlerInterceptor {
+	@Override
+	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+		String master = request.getParameter("master");
+		if(master != null)
+			SpObserver.putSp(master);
+		return true;
+	}
+
+	@Override
+	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
+                           ModelAndView modelAndView) throws Exception {
+	}
+
+	@Override
+	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
+                                Exception ex) throws Exception {
+		SpObserver.clear();
+	}
+
+}

+ 48 - 0
src/main/java/com/uas/core/support/GetProperties.java

@@ -0,0 +1,48 @@
+package com.uas.core.support;
+
+import org.springframework.beans.BeansException;
+import org.springframework.core.io.support.PropertiesLoaderUtils;
+
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+public class GetProperties {
+	
+	public static Map<String, String> propertiesMap = new HashMap<>();
+
+    private static void processProperties(Properties props) throws BeansException {
+        propertiesMap = new HashMap<String, String>();
+        for (Object key : props.keySet()) {
+            String keyStr = key.toString();
+            try {
+                // PropertiesLoaderUtils的默认编码是ISO-8859-1,在这里转码一下
+                propertiesMap.put(keyStr, new String(props.getProperty(keyStr).getBytes("ISO-8859-1"), "utf-8"));
+            } catch (UnsupportedEncodingException e) {
+                e.printStackTrace();
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    public static void loadAllProperties(String propertyFileName) {
+        try {
+            Properties properties = PropertiesLoaderUtils.loadAllProperties(propertyFileName);
+            processProperties(properties);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static String getProperty(String name) {
+        return propertiesMap.get(name).toString();
+    }
+
+    public static Map<String, String> getAllProperty() {
+        return propertiesMap;
+    }
+
+}

+ 82 - 0
src/main/java/com/uas/core/support/LoginInterceptor.java

@@ -0,0 +1,82 @@
+package com.uas.core.support;
+
+import com.uas.entity.ErrorMsg;
+import com.uas.exception.SystemException;
+import io.jsonwebtoken.Claims;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.servlet.HandlerInterceptor;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Date;
+
+public class LoginInterceptor implements HandlerInterceptor {
+
+	@Override
+	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+/*		String token = request.getParameter("token");
+		Claims claims = parseToken(token); // 验证并解析token
+		String username = (String) claims.get("username");
+		String password = (String) claims.get("password");
+		checkUser(username, password); // 验证用户是否合法
+		String actionUrl = request.getRequestURI();
+		checkActionAccess(username, actionUrl); // 验证请求权限*/
+		return true;
+	}
+
+	@Override
+	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
+                           ModelAndView modelAndView) throws Exception {
+	}
+
+	@Override
+	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
+                                Exception ex) throws Exception {
+	}
+	
+	private Claims parseToken(String token) {
+		if(token == null || token.isEmpty()) {
+			throw new SystemException(ErrorMsg.NULL_TOKEN);
+		}
+		Claims claims = TokenHandler.parseToken(token);
+		if(claims == null) {
+			throw new SystemException(ErrorMsg.INVALID_TOKEN);
+		}
+		Date now = new Date();
+		Date start = claims.getNotBefore();
+		Date end = claims.getExpiration();
+		
+		if (now.after(start) && now.before(end)) {
+			return claims;
+		}else {
+			throw new SystemException(ErrorMsg.EXPIRED_TOKEN);
+		}
+	}
+	
+	private boolean checkUser(String username, String password) {
+		boolean enable = false;
+		if(username != null && password != null) {
+			if(username.equals("uas") && password.equals("123")) {
+				enable = true;
+			}else {
+				/*enable = userService.checkUser(username, password);*/
+			}
+		}
+		if(!enable) {
+			throw new SystemException(ErrorMsg.INVALID_USER);
+		}
+		return enable;
+	}
+	
+	private boolean checkActionAccess(String username, String action) {
+		if(username.equals("uas")) {
+			return true;
+		}
+		boolean enable =true; /*userService.checkAction(username, action);*/
+		if(!enable) {
+			throw new SystemException(ErrorMsg.PERMISSION_DENIED_REQUEST);
+		}
+		return enable;
+	}
+}

+ 46 - 0
src/main/java/com/uas/core/support/SpringDynamicCronTask.java

@@ -0,0 +1,46 @@
+package com.uas.core.support;
+
+
+import com.uas.task.ScheduleTask;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.env.Environment;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.SchedulingConfigurer;
+import org.springframework.scheduling.config.ScheduledTaskRegistrar;
+import org.springframework.stereotype.Component;
+
+import java.lang.reflect.Method;
+@Configuration
+@EnableScheduling
+@Component
+public class SpringDynamicCronTask implements SchedulingConfigurer {
+
+	private final Logger logger = LoggerFactory.getLogger(this.getClass());
+
+
+	@Autowired
+	private Environment env;
+
+	@Autowired
+	private ScheduleTask scheduleTask;
+
+	@Override
+	public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
+		String activeProFiles = env.getActiveProfiles()[0];
+		if(!"dev".equals(activeProFiles)) {
+			logger.info(String.format("运行环境:%s;注册TASK:%s",activeProFiles,env.getProperty("Task.Method")));
+			taskRegistrar.addCronTask(() -> {
+				//业务逻辑
+				try {
+					Method method = scheduleTask.getClass().getMethod(env.getProperty("Task.Method"));
+					method.invoke(scheduleTask);
+				}catch (Exception e){
+					e.printStackTrace();
+				}
+			}, env.getProperty("Task.Cron"));
+		}
+	}
+}

+ 16 - 0
src/main/java/com/uas/core/support/TokenHandler.java

@@ -0,0 +1,16 @@
+package com.uas.core.support;
+
+import com.uas.utils.JwtUtil;
+import io.jsonwebtoken.Claims;
+
+public class TokenHandler {
+	
+	public static String createToken(String username, String password) {
+		return JwtUtil.createJWT(username, password);
+	}
+	
+	public static Claims parseToken(String token) {
+		Claims claim = JwtUtil.parseJWT(token);
+		return claim;
+	}
+}

+ 19 - 0
src/main/java/com/uas/core/support/TokenPropertiesListener.java

@@ -0,0 +1,19 @@
+package com.uas.core.support;
+
+import org.springframework.boot.context.event.ApplicationStartedEvent;
+import org.springframework.context.ApplicationListener;
+
+public class TokenPropertiesListener implements ApplicationListener<ApplicationStartedEvent> {
+
+	private String propertyFileName;
+	
+	public TokenPropertiesListener(String propertyFileName) {
+        this.propertyFileName = propertyFileName;
+    }
+	
+	@Override
+	public void onApplicationEvent(ApplicationStartedEvent arg0) {
+		GetProperties.loadAllProperties(this.propertyFileName);
+	}
+
+}

+ 607 - 0
src/main/java/com/uas/dao/BaseDao.java

@@ -0,0 +1,607 @@
+package com.uas.dao;
+
+import com.uas.utils.BaseUtil;
+import com.uas.utils.Constant;
+import com.uas.utils.DateUtil;
+import net.sf.json.JSONObject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.dao.DataAccessException;
+import org.springframework.dao.EmptyResultDataAccessException;
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
+import org.springframework.jdbc.core.CallableStatementCallback;
+import org.springframework.jdbc.core.CallableStatementCreator;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.stereotype.Repository;
+
+import java.sql.CallableStatement;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.sql.Timestamp;
+import java.util.*;
+
+@Repository
+public class BaseDao {
+
+	static final String CREATE_SEQ = "CREATE SEQUENCE ?" + // 创建序列
+			" MINVALUE 1 MAXVALUE 99999999999 INCREMENT BY 1 START WITH 3000 CACHE 20 NOORDER NOCYCLE ";
+
+
+	@Autowired
+	private JdbcTemplate jdbcTemplate;
+	
+	public JdbcTemplate getJdbcTemplate() {
+		return jdbcTemplate;
+	}
+
+	public int getSeqId(String seq) {
+		try {
+			String sql = "select " + seq + ".nextval from dual";
+			SqlRowList rs = queryForRowSet(sql);
+			if (rs.next()) {
+				return rs.getInt(1);
+			} else {// 如果不存在就创建序列
+				int count = getCountByCondition("user_sequences", "Sequence_Name='" + seq.toUpperCase() + "'");
+				if (count == 0)
+					getJdbcTemplate().execute(CREATE_SEQ.replace("?", seq));
+				return getSeqId(seq);
+			}
+		} catch (Exception e) {
+			int count = getCountByCondition("user_sequences", "Sequence_Name='" + seq.toUpperCase() + "'");
+			if (count == 0)
+				getJdbcTemplate().execute(CREATE_SEQ.replace("?", seq));
+			return getSeqId(seq);
+		}
+	}
+
+	public List<Map<String, Object>> queryForList(String sql) {
+		try {
+			return jdbcTemplate.queryForList(sql);
+		} catch (EmptyResultDataAccessException e) {
+			e.printStackTrace();
+			return null;
+		}
+	}
+
+	public <T> List<T> queryForList(String sql, Class<T> elementType) {
+		try {
+			return jdbcTemplate.queryForList(sql, elementType);
+		} catch (EmptyResultDataAccessException e) {
+			return null;
+		}
+	}
+	
+	public List<Map<String, Object>> queryForList(String sql, Object... args) {
+		try {
+			return jdbcTemplate.queryForList(sql, args);
+		} catch (EmptyResultDataAccessException e) {
+			return null;
+		}
+	}
+
+	public <T> List<T> queryForList(String sql, Object[] args, Class<T> elementType) {
+		try {
+			return jdbcTemplate.queryForList(sql, args, elementType);
+		} catch (EmptyResultDataAccessException e) {
+			return null;
+		}
+	}
+
+	public <T> List<T> queryForList(String sql, Class<T> elementType, Object... args) {
+		try {
+			return jdbcTemplate.queryForList(sql, elementType, args);
+		} catch (EmptyResultDataAccessException e) {
+			return null;
+		}
+	}
+	
+	public <T> List<T> query(String sql, Object[] args, Class<T> elementType) {
+		try {
+			return jdbcTemplate.query(sql, args, new BeanPropertyRowMapper<T>(elementType));
+		} catch (EmptyResultDataAccessException e) {
+			return null;
+		}
+	}
+
+	public <T> List<T> query(String sql, Class<T> elementType) {
+		try {
+			return jdbcTemplate.query(sql, new BeanPropertyRowMapper<T>(elementType));
+		} catch (EmptyResultDataAccessException e) {
+			return null;
+		}
+	}
+
+	public <T> List<T> query(String sql, Class<T> elementType, Object... args) {
+		try {
+			return jdbcTemplate.query(sql, new BeanPropertyRowMapper<T>(elementType), args);
+		} catch (EmptyResultDataAccessException e) {
+			return null;
+		}
+	}
+
+	public <T> T queryForObject(String sql, Class<T> elementType, Object... args) {
+		try {
+			return jdbcTemplate.queryForObject(sql, elementType, args);
+		} catch (EmptyResultDataAccessException e) {
+			return null;
+		}
+	}
+	
+	public void execute(String sql) {
+		jdbcTemplate.execute(sql);
+	}
+
+	public synchronized boolean execute(String sql, Object... objs) {
+		try {
+			jdbcTemplate.update(sql, objs);
+			return true;
+		} catch (Exception e) {
+			return false;
+		}
+	}
+
+	public void execute(List<String> sqls) {
+		if (sqls.size() > 0) {
+			StringBuffer sb = new StringBuffer("begin ");
+			for (String sql : sqls) {
+				sb.append("execute immediate '").append(sql.replace("'", "''")).append("';");
+			}
+			sb.append("end;");
+			jdbcTemplate.execute(sb.toString());
+		}
+	}
+	
+	/**
+	 * 批量执行Sql
+	 * 
+	 * @param sqls
+	 * @param callbackSqls
+	 */
+	public void batchExecute(List<SqlMap> sqls, List<String> callbackSqls) {
+		if (sqls.size() > 0) {
+			StringBuffer sb = new StringBuffer("begin ");
+			for (SqlMap sql : sqls) {
+				sb.append("execute immediate '").append(sql.getSql(false).replace("'", "''")).append("';");
+			}
+			for (String sql : callbackSqls) {
+				sb.append("execute immediate '").append(sql.replace("'", "''")).append("';");
+			}
+			sb.append("end;");
+			jdbcTemplate.execute(sb.toString());
+		}
+	}
+	
+	public void deleteById(String tablename, String keyField, long id) {
+		deleteByCondition(tablename, keyField + "=" + id);
+	}
+
+	public void deleteByCondition(String tablename, String condition, Object... params) {
+		StringBuffer sb = new StringBuffer();
+		sb.append("DELETE FROM ");
+		sb.append(tablename);
+		sb.append(" WHERE ");
+		sb.append(condition);
+		execute(sb.toString(), params);
+	}
+	
+	/**
+	 * 一个字段,一条结果
+	 * 
+	 * @param tableName
+	 *            对应要查询的表
+	 * @param field
+	 *            要查询的字段
+	 * @param condition
+	 *            查询条件
+	 * @return field对应的数据
+	 */
+	public Object getFieldDataByCondition(String tableName, String field, String condition) {
+		StringBuffer sql = new StringBuffer("SELECT ");
+		sql.append(field);
+		sql.append(" FROM ");
+		sql.append(tableName);
+		sql.append(" WHERE ");
+		sql.append(condition);
+		SqlRowList srs = queryForRowSet(sql.toString());
+		if (srs.next()) {
+			return srs.getObject(1);
+		} else {
+			return null;
+		}
+	}
+	
+	/**
+	 * 一个字段,多条结果
+	 * 
+	 * @param tableName
+	 *            对应要查询的表
+	 * @param field
+	 *            要查询的字段
+	 * @param condition
+	 *            查询条件
+	 * @return field对应的数据
+	 */
+	public List<Object> getFieldDatasByCondition(String tableName, String field, String condition) {
+		StringBuffer sb = new StringBuffer("SELECT ");
+		sb.append(field);
+		sb.append(" FROM ");
+		sb.append(tableName);
+		sb.append(((condition == null || "".equals(condition)) ? "" : (" WHERE " + condition)));
+		SqlRowList srs = queryForRowSet(sb.toString());
+		List<Object> list = new ArrayList<Object>();
+		while (srs.next()) {
+			list.add(srs.getObject(1));
+		}
+		return list;
+	}
+
+	/**
+	 * 多个字段,<=1条结果
+	 * 
+	 * @param tableName
+	 *            对应要查询的表
+	 * @param fields
+	 *            要查询的字段,用逗号隔开
+	 * @param condition
+	 *            查询条件
+	 * @return fields对应的数据
+	 */
+	public Object[] getFieldsDataByCondition(String tableName, String fields, String condition) {
+		StringBuffer sql = new StringBuffer("SELECT ");
+		sql.append(fields);
+		sql.append(" FROM ");
+		sql.append(tableName);
+		sql.append(" WHERE ");
+		sql.append(condition);
+		String[] strs = fields.split(",");
+		int length = strs.length;
+		List<Map<String, Object>> list = jdbcTemplate.queryForList(sql.toString());
+		Iterator<Map<String, Object>> iter = list.iterator();
+		Object[] results = new Object[length];
+		Object value = null;
+		if (iter.hasNext()) {
+			Map<String, Object> m = iter.next();
+			for (int i = 0; i < length; i++) {
+				value = m.get(strs[i].toUpperCase());
+				if (value != null && value.getClass().getSimpleName().toUpperCase().equals("TIMESTAMP")) {
+					Timestamp time = (Timestamp) value;
+					try {
+						value = DateUtil.parseDateToString(new Date(time.getTime()), Constant.YMD_HMS);
+					} catch (Exception e) {
+						e.printStackTrace();
+					}
+				}
+				results[i] = value;
+			}
+			return results;
+		}
+		return null;
+	}
+	
+	/**
+	 * 多个字段,多条结果
+	 * 
+	 * @param tableName
+	 *            对应要查询的表
+	 * @param fields
+	 *            要查询的字段集合
+	 * @param condition
+	 *            查询条件
+	 * @return fields对应的数据
+	 */
+	public List<Object[]> getFieldsDatasByCondition(String tableName, String[] fields, String condition) {
+		StringBuffer sql = new StringBuffer("SELECT ");
+		sql.append(BaseUtil.parseArray2Str(fields, ","));
+		sql.append(" FROM ");
+		sql.append(tableName);
+		sql.append(" WHERE ");
+		sql.append(condition);
+		List<Map<String, Object>> list = getJdbcTemplate().queryForList(sql.toString());
+		Iterator<Map<String, Object>> iter = list.iterator();
+		List<Object[]> datas = new ArrayList<Object[]>();
+		Object value = null;
+		Map<String, Object> m = null;
+		Object[] results = null;
+		int length = fields.length;
+		while (iter.hasNext()) {
+			results = new Object[length];
+			m = iter.next();
+			for (int i = 0; i < length; i++) {
+				value = m.get(fields[i].toUpperCase());
+				if (value != null && value.getClass().getSimpleName().toUpperCase().equals("TIMESTAMP")) {
+					Timestamp time = (Timestamp) value;
+					try {
+						value = DateUtil.parseDateToString(new Date(time.getTime()), Constant.YMD_HMS);
+					} catch (Exception e) {
+						e.printStackTrace();
+					}
+				}
+				results[i] = value;
+			}
+			datas.add(results);
+		}
+		return datas;
+	}
+	
+	/**
+	 * if resultSet is null return true
+	 */
+	public boolean checkByCondition(String caller, String condition) {
+		int count = getCountByCondition(caller, condition);
+		if (count == 0) {
+			return true;
+		}
+		return false;
+	}
+	
+	/**
+	 * if resultSet not null return true
+	 */
+	public boolean checkIf(String table, String condition) {
+		int count = getCountByCondition(table, condition);
+		if (count > 0) {
+			return true;
+		}
+		return false;
+	}
+	
+	/**
+	 * 修改操作
+	 * 
+	 * @param tableName
+	 *            表
+	 * @param update
+	 *            修改内容
+	 * @param condition
+	 *            条件语句
+	 */
+	public void updateByCondition(String tableName, String update, String condition) {
+		StringBuffer sb = new StringBuffer("UPDATE ");
+		sb.append(tableName);
+		sb.append(" SET ");
+		sb.append(update);
+		sb.append(" WHERE ");
+		sb.append(condition);
+		execute(sb.toString());
+	}
+	
+	/**
+	 * 调用存储过程 无返回值
+	 * 
+	 * @param procedureName
+	 *            存储过程名称
+	 * @param args
+	 *            参数
+	 */
+	public void procedure(String procedureName, Object[] args) {
+		StringBuffer sql = new StringBuffer("{call ").append(procedureName).append("(");
+		for (int i = 0; i < args.length; i++) {
+			if (i > 0) {
+				sql.append(",");
+			}
+			sql.append("?");
+		}
+		sql.append(")}");
+		jdbcTemplate.update(sql.toString(), args);
+	}
+
+	/**
+	 * 调用存储过程
+	 * 
+	 * @param procedureName
+	 *            存储过程名称
+	 * @param args
+	 *            参数
+	 * @return varchar类型结果
+	 */
+	public List<String> callProcedureWithOut(final String procedureName, final Object[] args, final Integer[] inIndex,
+			final Integer[] outIndex) {
+
+		StringBuffer sql = new StringBuffer("{call " + procedureName + "(");
+
+		for (int i = 0; i < inIndex.length + outIndex.length; i++) {
+			if (sql.toString().contains("?")) {
+				sql.append(",?");
+			} else {
+				sql.append("?");
+			}
+		}
+		sql.append(")}");
+
+		List<String> listR = jdbcTemplate.execute(sql.toString(), new CallableStatementCallback<List<String>>() {
+
+			@Override
+			public List<String> doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException {
+				for (int i = 0; i < inIndex.length; i++) {
+					cs.setObject(inIndex[i], args[i]);
+				}
+
+				for (int i = 0; i < outIndex.length; i++) {
+					cs.registerOutParameter(outIndex[i], java.sql.Types.VARCHAR);
+				}
+
+				cs.execute();
+				List<String> list = new ArrayList<String>();
+				for (int i = 0; i < outIndex.length; i++) {
+
+					list.add(cs.getString(outIndex[i]));
+				}
+
+				return list;
+			}
+		});
+		return listR;
+
+	}
+
+	/**
+	 * 调用存储过程
+	 * 
+	 * @param procedureName
+	 *            存储过程名称
+	 * @param args
+	 *            参数
+	 * @return varchar类型结果
+	 */
+	public String callProcedure(final String procedureName, final Object... args) {
+		try {
+			return jdbcTemplate.execute(new CallableStatementCreator() {
+				@Override
+				public CallableStatement createCallableStatement(Connection conn) throws SQLException {
+					StringBuffer storedProcName = new StringBuffer("{call ");
+					int i = 0;
+					storedProcName.append(procedureName + "(");
+					for (i = 0; i < args.length; i++) {
+						if (storedProcName.toString().contains("?")) {
+							storedProcName.append(",");
+						}
+						storedProcName.append("?");
+					}
+					if (storedProcName.toString().contains("?")) {
+						storedProcName.append(",");
+					}
+					storedProcName.append("?");
+					storedProcName.append(")}");
+					CallableStatement cs = conn.prepareCall(storedProcName.toString());
+					for (i = 0; i < args.length; i++) {
+						cs.setObject(i + 1, args[i]);
+					}
+					cs.registerOutParameter(args.length + 1, java.sql.Types.VARCHAR);
+					return cs;
+				}
+			}, new CallableStatementCallback<String>() {
+				@Override
+				public String doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException {
+					cs.execute();
+					return cs.getString(args.length + 1);
+				}
+
+			});
+		} catch (Exception e) {
+			BaseUtil.showError(e.getMessage());
+		}
+		return null;
+	}
+
+	/**
+	 * 调用存储过程
+	 * 
+	 * @param procedureName
+	 *            存储过程名称
+	 * @param cls
+	 *            返回结果java类型
+	 * @param sqlType
+	 *            返回结果的sql类型
+	 * @param args
+	 *            参数
+	 * @return varchar类型结果
+	 */
+	public <T> T callbackProcedure(final String procedureName, final Class<T> cls, final int sqlType, final Object... args) {
+		try {
+			return jdbcTemplate.execute(new CallableStatementCreator() {
+				@Override
+				public CallableStatement createCallableStatement(Connection conn) throws SQLException {
+					StringBuffer storedProcName = new StringBuffer("{call ");
+					int i = 0;
+					storedProcName.append(procedureName + "(");
+					for (i = 0; i < args.length; i++) {
+						if (storedProcName.toString().contains("?")) {
+							storedProcName.append(",");
+						}
+						storedProcName.append("?");
+					}
+					if (storedProcName.toString().contains("?")) {
+						storedProcName.append(",");
+					}
+					storedProcName.append("?");
+					storedProcName.append(")}");
+					CallableStatement cs = conn.prepareCall(storedProcName.toString());
+					for (i = 0; i < args.length; i++) {
+						cs.setObject(i + 1, args[i]);
+					}
+					cs.registerOutParameter(args.length + 1, sqlType);
+					return cs;
+				}
+			}, new CallableStatementCallback<T>() {
+				@SuppressWarnings("unchecked")
+				@Override
+				public T doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException {
+					cs.execute();
+					// do not use method: getObject(paramInt, paramClass)
+					return (T) cs.getObject(args.length + 1);
+				}
+
+			});
+		} catch (Exception e) {
+			e.printStackTrace();
+			BaseUtil.showError(e.getMessage());
+		}
+		return null;
+	}
+
+	/**
+	 * 查询结果集
+	 * 
+	 * @param sql
+	 *            查询语句
+	 */
+	public SqlRowList queryForRowSet(String sql) {
+		SqlRowList rs = new SqlRowList();
+		rs.setResultList(jdbcTemplate.queryForList(sql));
+		return rs;
+	}
+	
+	/**
+	 * @param tableName
+	 *            对应要查询的表
+	 * @param condition
+	 *            查询条件
+	 * @return Count
+	 */
+	public int getCountByCondition(String tableName, String condition) {
+		StringBuffer sql = new StringBuffer("SELECT count(1) FROM ");
+		sql.append(tableName);
+		sql.append(" WHERE ");
+		sql.append(condition);
+		SqlRowList srs = queryForRowSet(sql.toString());
+		if (srs.next()) {
+			return srs.getInt(1);
+		} else {
+			try {
+				throw new Exception("Condition:" + condition + " is wrong!");
+			} catch (Exception e) {
+				return -1;
+			}
+		}
+	}
+	
+	public List<JSONObject> getFieldsJSONDatasByCondition(String tableName, String[] fields, String condition) {
+		StringBuffer sql = new StringBuffer("SELECT ");
+		sql.append(BaseUtil.parseArray2Str(fields, ","));
+		sql.append(" FROM ");
+		sql.append(tableName);
+		sql.append(" WHERE ");
+		sql.append(condition);
+		List<JSONObject> datas = new ArrayList<JSONObject>();
+		JSONObject obj = null;
+		Object value = null;
+		SqlRowList sl = queryForRowSet(sql.toString());
+		while (sl.next()) {
+			obj = new JSONObject();
+			for (int i = 0; i < fields.length; i++) {
+				value = sl.getObject(i + 1);
+				if (value != null && "TIMESTAMP".equals(value.getClass().getSimpleName().toUpperCase())) {
+					Timestamp time = (Timestamp) value;
+					value = DateUtil.parseDateToString(new Date(time.getTime()), "yyyy-MM-dd HH:mm:ss");
+				}
+				obj.put(fields[i], value);
+			}
+			datas.add(obj);
+		}
+		return datas;
+	}
+
+	public List<String> getAllTyshxycode() {
+		return query("select fcu_tyshxycode from fbcustomer where fcu_status=1", String.class);
+	}
+	
+}

+ 13 - 0
src/main/java/com/uas/dao/BusinessChangeDao.java

@@ -0,0 +1,13 @@
+package com.uas.dao;
+
+
+import com.uas.entity.BusinessChange;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-10-27 8:49
+ */
+public interface BusinessChangeDao extends JpaRepository<BusinessChange,Long> {
+}

+ 12 - 0
src/main/java/com/uas/dao/BusinessDao.java

@@ -0,0 +1,12 @@
+package com.uas.dao;
+
+import com.uas.entity.Business;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-10-27 8:49
+ */
+public interface BusinessDao extends JpaRepository<Business,Long> {
+}

+ 12 - 0
src/main/java/com/uas/dao/BusinessDetailDao.java

@@ -0,0 +1,12 @@
+package com.uas.dao;
+
+import com.uas.entity.BusinessDetail;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-10-27 8:49
+ */
+public interface BusinessDetailDao extends JpaRepository<BusinessDetail,Long> {
+}

+ 13 - 0
src/main/java/com/uas/dao/CpwsDao.java

@@ -0,0 +1,13 @@
+package com.uas.dao;
+
+import com.uas.entity.Cpws;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-10-27 8:49
+ * 裁判文书
+ */
+public interface CpwsDao extends JpaRepository<Cpws,Long> {
+}

+ 13 - 0
src/main/java/com/uas/dao/CpwsDetailDao.java

@@ -0,0 +1,13 @@
+package com.uas.dao;
+
+import com.uas.entity.CpwsDetail;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-10-27 8:49
+ * 裁判文书明细
+ */
+public interface CpwsDetailDao extends JpaRepository<CpwsDetail,Long> {
+}

+ 12 - 0
src/main/java/com/uas/dao/CustomerDao.java

@@ -0,0 +1,12 @@
+package com.uas.dao;
+
+import com.uas.entity.Customer;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-10-27 8:49
+ */
+public interface CustomerDao extends JpaRepository<Customer,Long> {
+}

+ 12 - 0
src/main/java/com/uas/dao/DanBaoDao.java

@@ -0,0 +1,12 @@
+package com.uas.dao;
+
+import com.uas.entity.DanBao;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-11-12 9:40
+ */
+public interface DanBaoDao extends JpaRepository<DanBao,Long> {
+}

+ 12 - 0
src/main/java/com/uas/dao/DcdyDao.java

@@ -0,0 +1,12 @@
+package com.uas.dao;
+
+import com.uas.entity.Dcdy;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-11-02 14:10
+ */
+public interface DcdyDao extends JpaRepository<Dcdy,Long> {
+}

+ 12 - 0
src/main/java/com/uas/dao/DcdyDetailDao.java

@@ -0,0 +1,12 @@
+package com.uas.dao;
+
+import com.uas.entity.DcdyDetail;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-11-02 14:07
+ */
+public interface DcdyDetailDao extends JpaRepository<DcdyDetail,Long> {
+}

+ 12 - 0
src/main/java/com/uas/dao/ExecutedPersonDao.java

@@ -0,0 +1,12 @@
+package com.uas.dao;
+
+import com.uas.entity.ExecutedPerson;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-10-29 18:13
+ */
+public interface ExecutedPersonDao extends JpaRepository<ExecutedPerson,Long> {
+}

+ 12 - 0
src/main/java/com/uas/dao/GqczDao.java

@@ -0,0 +1,12 @@
+package com.uas.dao;
+
+import com.uas.entity.Gqcz;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-11-02 14:33
+ */
+public interface GqczDao extends JpaRepository<Gqcz,Long> {
+}

+ 12 - 0
src/main/java/com/uas/dao/InvestorDao.java

@@ -0,0 +1,12 @@
+package com.uas.dao;
+
+import com.uas.entity.Investor;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-10-27 8:49
+ */
+public interface InvestorDao extends JpaRepository<Investor,Long> {
+}

+ 13 - 0
src/main/java/com/uas/dao/InvestorRJDetailDao.java

@@ -0,0 +1,13 @@
+package com.uas.dao;
+
+
+import com.uas.entity.InvestorRJDetail;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-10-27 8:49
+ */
+public interface InvestorRJDetailDao extends JpaRepository<InvestorRJDetail,Long> {
+}

+ 12 - 0
src/main/java/com/uas/dao/InvestorSJDetailDao.java

@@ -0,0 +1,12 @@
+package com.uas.dao;
+
+import com.uas.entity.InvestorSJDetail;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-10-27 8:49
+ */
+public interface InvestorSJDetailDao extends JpaRepository<InvestorSJDetail,Long> {
+}

+ 12 - 0
src/main/java/com/uas/dao/JyycDao.java

@@ -0,0 +1,12 @@
+package com.uas.dao;
+
+import com.uas.entity.Jyyc;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-11-02 10:07
+ */
+public interface JyycDao extends JpaRepository<Jyyc,Long> {
+}

+ 13 - 0
src/main/java/com/uas/dao/KtggDao.java

@@ -0,0 +1,13 @@
+package com.uas.dao;
+
+import com.uas.entity.Ktgg;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-10-27 8:49
+ * 开庭公告
+ */
+public interface KtggDao extends JpaRepository<Ktgg,Long> {
+}

+ 12 - 0
src/main/java/com/uas/dao/KtggDetailDao.java

@@ -0,0 +1,12 @@
+package com.uas.dao;
+
+import com.uas.entity.KtggDetail;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-10-27 8:49
+ */
+public interface KtggDetailDao extends JpaRepository<KtggDetail,Long> {
+}

+ 12 - 0
src/main/java/com/uas/dao/MemberDao.java

@@ -0,0 +1,12 @@
+package com.uas.dao;
+
+import com.uas.entity.Member;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-10-27 8:49
+ */
+public interface MemberDao extends JpaRepository<Member,Long> {
+}

+ 12 - 0
src/main/java/com/uas/dao/QsjlDao.java

@@ -0,0 +1,12 @@
+package com.uas.dao;
+
+import com.uas.entity.Qsjl;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-11-02 11:22
+ */
+public interface QsjlDao extends JpaRepository<Qsjl,Long> {
+}

+ 36 - 0
src/main/java/com/uas/dao/RowConvert.java

@@ -0,0 +1,36 @@
+package com.uas.dao;
+
+import org.springframework.util.NumberUtils;
+
+public class RowConvert<T>{
+
+	private Class<T> requiredType;
+
+	public RowConvert(Class<T> requiredType) {
+		this.requiredType = requiredType;
+	}
+
+	@SuppressWarnings("unchecked")
+	protected Object convertValueToRequiredType(Object value, @SuppressWarnings("rawtypes") Class requiredType) {
+		if (String.class.equals(requiredType)) {
+			return value.toString();
+		}
+		if (Number.class.isAssignableFrom(requiredType)) {
+			if (value instanceof Number) {
+				return NumberUtils.convertNumberToTargetClass((Number) value, requiredType);
+			}
+			return NumberUtils.parseNumber(value.toString(), requiredType);
+		}
+		throw new IllegalArgumentException(
+				"Value [" + value + "] is of type [" + value.getClass().getName() +
+						"] and cannot be converted to required type [" + requiredType.getName() + "]");
+	}
+
+	@SuppressWarnings("unchecked")
+	public T convert(Object value) {
+		if (value != null && this.requiredType != null && !this.requiredType.isInstance(value)) {
+			return (T) convertValueToRequiredType(value, this.requiredType);
+		}
+		return (T) value;
+	}
+}

+ 12 - 0
src/main/java/com/uas/dao/SfxzDao.java

@@ -0,0 +1,12 @@
+package com.uas.dao;
+
+import com.uas.entity.Sfxz;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-11-02 14:51
+ */
+public interface SfxzDao extends JpaRepository<Sfxz,Long> {
+}

+ 471 - 0
src/main/java/com/uas/dao/SqlMap.java

@@ -0,0 +1,471 @@
+package com.uas.dao;
+
+import com.uas.utils.ContextUtil;
+import com.uas.utils.DateUtil;
+import com.uas.utils.BaseUtil;
+import com.uas.utils.Constant;
+import org.springframework.dao.DataAccessException;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.core.support.AbstractLobCreatingPreparedStatementCallback;
+import org.springframework.jdbc.support.lob.LobCreator;
+import org.springframework.jdbc.support.lob.LobHandler;
+import org.springframework.util.StringUtils;
+
+import java.io.Serializable;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+import java.util.*;
+
+/**
+ * 封装sql操作,提供对特殊类型的值的灵活处理
+ * 
+ * @author yingp
+ * 
+ * @since 2015-11-26
+ *        <p>
+ *        增加更新功能,参考构造函数;增加对lob数据的处理
+ *        </p>
+ * 
+ */
+public class SqlMap implements Serializable {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 7665440776209042811L;
+
+	/**
+	 * 如果sysdate,getdate()等符合该正则表达式的字符串不需要特殊处理<br>
+	 * 就调用set(String, Object, boolean)方法,第三个参数为false
+	 */
+	private static final String REG_SPECIAL = "(?:sysdate|getdate\\(\\))";
+
+	private static final int longStringBytes = 4000;// 字符串最长字节数,超过了就得使用lob类型
+
+	private String table;
+
+	/**
+	 * 主键
+	 */
+	private String primaryKey;
+	/**
+	 * 主键值
+	 */
+	private Object primaryValue;
+
+	private boolean isNew = true;
+
+	private List<String> fields;
+
+	private Object[] values;
+
+	private Set<String> specialKeys;
+
+	public SqlMap() {
+		fields = new ArrayList<String>();
+		values = new Object[] {};
+		specialKeys = new HashSet<String>();
+	}
+
+	/**
+	 * 新增模式
+	 * 
+	 * @param table
+	 *            待插入的表
+	 */
+	public SqlMap(String table) {
+		this();
+		this.table = table;
+	}
+
+	/**
+	 * 修改模式
+	 * 
+	 * @param table
+	 *            待插入的表
+	 * @param primaryKey
+	 *            主键
+	 */
+	public SqlMap(String table, String primaryKey) {
+		this(table);
+		this.primaryKey = primaryKey;
+		isNew = false;
+	}
+
+	/**
+	 * 修改模式
+	 * 
+	 * @param table
+	 *            待插入的表
+	 * @param primaryKey
+	 *            主键
+	 * @param primaryValue
+	 *            主键值
+	 */
+	public SqlMap(String table, String primaryKey, Object primaryValue) {
+		this(table);
+		this.primaryKey = primaryKey;
+		this.primaryValue = primaryValue;
+		isNew = false;
+	}
+
+	/**
+	 * 添加要插入的字段
+	 * 
+	 * @param field
+	 *            toSql字段
+	 * @param value
+	 *            字段的值
+	 */
+	public void set(String field, Object value) {
+		if (!isNew && field.equals(primaryKey)) {
+			primaryValue = value;
+		} else {
+			if (isSpecial(value)) {
+				setSpecial(field, value);
+			} else {
+				if (value != null) {
+					if (value.toString().matches(Constant.REG_DATE)) {
+						setDate(field, value.toString(), Constant.YMD);
+					} else if (value.toString().matches(Constant.REG_DATETIME)) {
+						setDate(field, value.toString(), Constant.YMD_HMS);
+					} else {
+						setObject(field, value);
+					}
+				} else {
+					setObject(field, value);
+				}
+			}
+		}
+	}
+
+	public void setObject(String field, Object value) {
+		if (fields.contains(field)) {
+			int index = fields.indexOf(field);
+			values[index] = value;
+		} else {
+			fields.add(field);
+			values = Arrays.copyOf(values, values.length + 1);
+			values[values.length - 1] = value;
+		}
+	}
+
+	/**
+	 * 添加要插入的字段
+	 * 
+	 * @param field
+	 *            toSql字段
+	 * @param value
+	 *            字段的值
+	 * @param special
+	 *            是否是特殊字符,比如调用数据库函数,参数等
+	 */
+	public void set(String field, Object value, boolean special) {
+		if (!isNew && field.equals(primaryKey)) {
+			primaryValue = value;
+		} else {
+			if (special) {
+				setSpecial(field, value);
+			} else {
+				if (value != null) {
+					if (value.toString().matches(Constant.REG_DATE)) {
+						setDate(field, value.toString(), Constant.YMD);
+					} else if (value.toString().matches(Constant.REG_DATETIME)) {
+						setDate(field, value.toString(), Constant.YMD_HMS);
+					} else {
+						setObject(field, value);
+					}
+				} else {
+					setObject(field, value);
+				}
+			}
+		}
+	}
+
+	/**
+	 * 添加要插入的字段
+	 * 
+	 * @param field
+	 *            toSql字段
+	 * @param value
+	 *            字段的值
+	 */
+	public void setSpecial(String field, Object value) {
+		if (!isNew && field.equals(primaryKey)) {
+			primaryValue = value;
+		} else {
+			setObject(field, value);
+			specialKeys.add(field);
+		}
+	}
+
+	/**
+	 * 添加要插入的字段 <b>字段值为空</b>
+	 * 
+	 * @param field
+	 *            toSql字段
+	 *
+	 */
+	public void setNull(String field) {
+		setSpecial(field, "null");
+	}
+
+	/**
+	 * 添加要插入的字段<b>Double型</b>
+	 * 
+	 * @param field
+	 *            toSql字段
+	 * @param value
+	 *            {Double}字段的值
+	 */
+	public void setDouble(String field, Double value) {
+		value = value == null ? 0 : value;
+		setSpecial(field, value);
+	}
+
+	/**
+	 * 添加要插入的字段<b>日期型</b>
+	 * 
+	 * @param field
+	 *            toSql字段
+	 * @param value
+	 *            {Date}字段的值
+	 */
+	public void setDate(String field, Date value) {
+		setDate(field, value, Constant.YMD_HMS);
+	}
+
+	/**
+	 * 添加要插入的字段<b>日期型</b>
+	 * 
+	 * @param field
+	 *            toSql字段
+	 * @param value
+	 *            {Date}字段的值
+	 * @param format
+	 *            格式
+	 */
+	public void setDate(String field, Date value, String format) {
+		if (value == null) {
+            setNull(field);
+        }else {
+            setSpecial(field, DateUtil.parseDateToOracleString(format, value));
+        }
+	}
+
+	/**
+	 * 添加要插入的字段<b>日期型</b>
+	 * 
+	 * @param field
+	 *            toSql字段
+	 * @param value
+	 *            {Date}字段的值
+	 */
+	public void setDate(String field, String value) {
+		setDate(field, value, Constant.YMD_HMS);
+	}
+
+	/**
+	 * 添加要插入的字段<b>日期型</b>
+	 * 
+	 * @param field
+	 *            toSql字段
+	 * @param value
+	 *            {Date}字段的值
+	 * @param format
+	 *            格式
+	 */
+	public void setDate(String field, String value, String format) {
+		if (value == null) {
+            setNull(field);
+        }else {
+            setSpecial(field, DateUtil.parseDateToOracleString(format, value));
+        }
+	}
+
+	private static boolean isSpecial(Object value) {
+		if (value != null) {
+			return value.toString().matches(REG_SPECIAL);
+		}
+		return false;
+	}
+
+	/**
+	 * 是否lob类型
+	 * 
+	 * @param value
+	 * @return
+	 */
+	private static boolean isLob(Object value) {
+		return value != null && value.toString().getBytes().length > longStringBytes;
+	}
+
+	/**
+	 * insert语句
+	 * 
+	 * @param mark
+	 *            {true: value以参数形式传入}
+	 * @return
+	 */
+	public String getInsertSql(boolean mark) {
+		StringBuffer sb = new StringBuffer();
+		sb.append("INSERT INTO ").append(table).append("(").append(BaseUtil.parseList2Str(fields, ",", true)).append(") VALUES (")
+				.append(getEnd(mark)).append(")");
+		return sb.toString();
+	}
+
+	/**
+	 * update语句
+	 * 
+	 * @param mark
+	 *            {true: value以参数形式传入}
+	 * @return
+	 */
+	public String getUpdateSql(boolean mark) {
+		StringBuffer sb = new StringBuffer();
+		sb.append("UPDATE ").append(table).append(" SET ").append(getEnd(mark));
+		return sb.toString();
+	}
+
+	/**
+	 * 行复制语句
+	 * 
+	 * @param condition
+	 *            {true: value以参数形式传入}
+	 * @return
+	 */
+	public String getCopySql(String condition) {
+		StringBuffer sb = new StringBuffer("begin ");
+		sb.append("for rs in (select * from ");
+		sb.append(table);
+		if (!StringUtils.isEmpty(condition)) {
+            sb.append(" where ").append(condition);
+        } else if (primaryValue != null) {
+            sb.append(" where ").append(primaryKey).append("=").append(primaryValue);
+        }
+		sb.append(") loop");
+		int i = 0;
+		for (String f : fields) {
+			sb.append(" rs.");
+			sb.append(f);
+			sb.append(":=");
+			if (specialKeys.contains(f)) {
+				sb.append(values[i++]);
+			} else {
+				sb.append("'").append(values[i++]).append("'");
+			}
+			sb.append(";");
+		}
+		sb.append(" insert into ");
+		sb.append(table);
+		sb.append(" values rs;");
+		sb.append(" end loop; ");
+		sb.append(" end;");
+		return sb.toString();
+	}
+
+	/**
+	 * insertOrUpdate语句
+	 * 
+	 * @param mark
+	 *            {true: value以参数形式传入}
+	 * @return
+	 */
+	public String getSql(boolean mark) {
+		return isNew ? getInsertSql(mark) : getUpdateSql(mark);
+	}
+
+	/**
+	 * 执行sql
+	 */
+	public void execute() {
+		BaseDao baseDao = (BaseDao) ContextUtil.getBean("baseDao");
+		baseDao.getJdbcTemplate().update(getSql(true), values);
+	}
+
+	/**
+	 * 执行sql
+	 */
+	public void executeCopy(String condition) {
+		BaseDao baseDao = (BaseDao) ContextUtil.getBean("baseDao");
+		baseDao.getJdbcTemplate().update(getCopySql(condition));
+	}
+
+	/**
+	 * 执行sql
+	 * 
+	 * @param jdbcTemplate
+	 */
+	public void execute(JdbcTemplate jdbcTemplate, LobHandler lobHandler) {
+		jdbcTemplate.execute(getSql(true), new AbstractLobCreatingPreparedStatementCallback(lobHandler) {
+			@Override
+			protected void setValues(PreparedStatement ps, LobCreator lob) throws SQLException, DataAccessException {
+				/*int j=1;
+				for (int i=0;i<values.length-1 ;i++) {
+					if(!specialKeys.contains(fields.get(i))){
+						if (isLob(values[i]))
+							lob.setClobAsString(ps, j, values[i].toString());
+						else
+							ps.setObject(j, values[i]);
+						j++;
+					}		
+				}
+				ps.setObject(j, primaryValue);*/
+				int i = 0;
+				for (Object value : values) {
+					i++;
+					if (isLob(value)) {
+                        lob.setClobAsString(ps, i, value.toString());
+                    }else {
+                        ps.setObject(i, value);
+                    }
+				}
+			}
+		});
+	}	
+	/**
+	 * @param mark
+	 *            {true: value以参数形式传入}
+	 * @return
+	 */
+	private String getEnd(boolean mark) {
+		int len = fields.size();
+		StringBuffer sb = new StringBuffer();
+		String field = null;
+		Object[] tmp = new Object[values.length -specialKeys.size()];
+        int k=0;
+		for (int i = 0; i < len; i++) {
+			if (sb.length() > 0) {
+                sb.append(",");
+            }
+			field = fields.get(i);
+			if (!isNew) {
+                sb.append(field).append("=");
+            }
+			if (specialKeys.contains(field)) {
+				sb.append(values[i]);				
+			} else {
+				tmp[k]=values[i];
+				k++;
+				if (mark) {
+                    sb.append("?");
+                }else {
+                    sb.append("'").append(values[i]).append("'");
+                }
+			}
+		}
+		if (!isNew) {
+			sb.append(" WHERE ").append(primaryKey).append("=");
+			if (mark) {
+				sb.append("?");
+				tmp=Arrays.copyOf(tmp, tmp.length+1);
+				tmp[tmp.length-1]=primaryValue;
+			} else {
+				sb.append("'").append(primaryValue).append("'");
+			}
+		}
+		values=Arrays.copyOf(tmp, tmp.length);
+		return sb.toString();
+	}
+
+}

+ 431 - 0
src/main/java/com/uas/dao/SqlRowList.java

@@ -0,0 +1,431 @@
+package com.uas.dao;
+
+import com.alibaba.fastjson.JSONObject;
+import com.uas.utils.Constant;
+import com.uas.utils.NumberUtil;
+import com.uas.utils.DateUtil;
+
+import java.math.BigDecimal;
+import java.sql.Timestamp;
+import java.util.*;
+
+/**
+ * org.springframework.jdbc.support.rowset.SqlRowSet有jdk版本问题
+ * 
+ * @author yingp 2013-1-10 11:50:08
+ */
+public class SqlRowList {
+
+	private List<Map<String, Object>> resultList;// 结果集
+	private Iterator<Map<String, Object>> iterator;
+	private Map<String, Object> currentMap;// 当前Map
+	private int currentIndex = -1;// 当前index,从0开始
+	private List<String> keys;// 字段名集
+
+	public SqlRowList() {
+		this.resultList = new ArrayList<Map<String, Object>>();
+	}
+
+	public List<Map<String, Object>> getResultList() {
+		return resultList;
+	}
+
+	public int size() {
+		return getResultList().size();
+	}
+
+	public void setResultList(List<Map<String, Object>> resultList) {
+		this.resultList = resultList;
+	}
+
+	public Map<String, Object> getCurrentMap() {
+		return currentMap;
+	}
+
+	public void setCurrentMap(Map<String, Object> currentMap) {
+		this.currentMap = currentMap;
+	}
+
+	public int getCurrentIndex() {
+		return currentIndex;
+	}
+
+	public void setCurrentIndex(int currentIndex) {
+		this.currentIndex = currentIndex;
+	}
+
+	public List<String> getKeys() {
+		if (this.keys == null) {
+			this.keys = new ArrayList<String>();
+			if (this.resultList != null) {
+				Iterator<Map<String, Object>> iterator = resultList.iterator();
+				if (iterator.hasNext()) {
+					Map<String, Object> map = iterator.next();
+					Iterator<String> fields = map.keySet().iterator();
+					while (fields.hasNext()) {
+						this.keys.add(fields.next());
+					}
+				}
+			}
+		}
+		return keys;
+	}
+
+	public void setKeys(List<String> keys) {
+		this.keys = keys;
+	}
+
+	/**
+	 * 取ResultSet的第index条Map
+	 * 
+	 * @param index
+	 * @return
+	 */
+	public Map<String, Object> getAt(int index) {
+		if (this.resultList != null) {
+			Iterator<Map<String, Object>> iterator = resultList.iterator();
+			Map<String, Object> map = null;
+			int idx = 0;
+			while (iterator.hasNext() && (map = iterator.next()) != null) {
+				if (index == idx)
+					return map;
+				idx++;
+			}
+		}
+		return null;
+	}
+
+	public <T> List<T> queryForList(String field, Class<T> requiredType) {
+		if (this.resultList != null) {
+			Iterator<Map<String, Object>> iterator = resultList.iterator();
+			Map<String, Object> map = null;
+			List<T> list = new ArrayList<T>();
+			RowConvert<T> convert = new RowConvert<T>(requiredType);
+			field = field.toUpperCase();
+			while (iterator.hasNext() && (map = iterator.next()) != null) {
+				Object result = map.get(field);
+				if (result != null) {
+					list.add(convert.convert(result));
+				}
+			}
+			return list;
+		}
+		return null;
+	}
+
+	public <T> Set<T> queryForSet(String field, Class<T> requiredType) {
+		if (this.resultList != null) {
+			Iterator<Map<String, Object>> iterator = resultList.iterator();
+			Map<String, Object> map = null;
+			Set<T> set = new java.util.HashSet<T>();
+			RowConvert<T> convert = new RowConvert<T>(requiredType);
+			field = field.toUpperCase();
+			while (iterator.hasNext() && (map = iterator.next()) != null) {
+				Object result = map.get(field);
+				if (result != null) {
+					set.add(convert.convert(result));
+				}
+			}
+			return set;
+		}
+		return null;
+	}
+
+	public boolean hasNext() {
+		if (this.resultList != null) {
+			if (this.iterator == null) {
+				this.iterator = resultList.iterator();
+			}
+			if (this.iterator.hasNext()) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	public boolean next(int count) {
+		for (int i = 0; i < count; i++) {
+			if (!next())
+				return false;
+		}
+		return true;
+	}
+
+	public boolean next() {
+		if (this.resultList != null) {
+			if (this.iterator == null) {
+				this.iterator = resultList.iterator();
+				this.currentIndex = -1;
+			}
+			if (this.iterator.hasNext()) {
+				this.currentMap = iterator.next();
+				this.currentIndex += 1;
+				if (this.keys == null) {
+					this.keys = new ArrayList<String>();
+					Iterator<String> fields = currentMap.keySet().iterator();
+					while (fields.hasNext()) {
+						this.keys.add(fields.next());
+					}
+				}
+				return true;
+			}
+		}
+		return false;
+	}
+
+	public int getInt(int index) {
+		Object obj = getObject(index);
+		return obj == null ? -1 : Integer.parseInt(obj.toString());
+	}
+
+	public int getInt(String field) {
+		Object obj = getObject(field);
+		return obj == null ? -1 : Integer.parseInt(obj.toString());
+	}
+
+	public int getGeneralInt(int index) {
+		Object obj = getObject(index);
+		return obj == null ? 0 : Integer.parseInt(obj.toString());
+	}
+
+	public int getGeneralInt(String field) {
+		Object obj = getObject(field);
+		return obj == null ? 0 : Integer.parseInt(obj.toString());
+	}
+
+	public float getFloat(int index) {
+		Object obj = getObject(index);
+		return obj == null ? -1 : Float.parseFloat(obj.toString());
+	}
+
+	public float getFloat(String field) {
+		Object obj = getObject(field);
+		return obj == null ? -1 : Float.parseFloat(obj.toString());
+	}
+
+	public float getGeneralFloat(int index) {
+		Object obj = getObject(index);
+		return obj == null ? 0 : Float.parseFloat(obj.toString());
+	}
+
+	public float getGeneralFloat(String field) {
+		Object obj = getObject(field);
+		return obj == null ? 0 : Float.parseFloat(obj.toString());
+	}
+
+	public double getDouble(int index) {
+		Object obj = getObject(index);
+		return obj == null ? -1 : Double.parseDouble(obj.toString());
+	}
+
+	public double getDouble(String field) {
+		Object obj = getObject(field);
+		return obj == null ? -1 : Double.parseDouble(obj.toString());
+	}
+
+	public BigDecimal getBigDecimal(int index) {
+		Object obj = getObject(index);
+		return obj == null ? null : BigDecimal.valueOf(Double.parseDouble(obj.toString()));
+	}
+
+	public BigDecimal getBigDecimal(String field) {
+		Object obj = getObject(field);
+		return obj == null ? null : BigDecimal.valueOf(Double.parseDouble(obj.toString()));
+	}
+
+	public double getGeneralDouble(int index) {
+		Object obj = getObject(index);
+		return obj == null ? 0 : Double.parseDouble(obj.toString());
+	}
+
+	/**
+	 * @param index
+	 * @param sub
+	 *            保留小数位数
+	 * @return
+	 */
+	public double getGeneralDouble(int index, int sub) {
+		return NumberUtil.formatDouble(getGeneralDouble(index), sub);
+	}
+
+	public double getGeneralDouble(String field) {
+		Object obj = getObject(field);
+		return obj == null || String.valueOf(obj).trim().equals("") ? 0 : Double.parseDouble(String.valueOf(obj).trim());
+	}
+
+	/**
+	 * @param field
+	 * @param sub
+	 *            保留小数位数
+	 * @return
+	 */
+	public double getGeneralDouble(String field, int sub) {
+		return NumberUtil.formatDouble(getGeneralDouble(field), sub);
+	}
+
+	public BigDecimal getGeneralBigDecimal(int index) {
+		Object obj = getObject(index);
+		return obj == null ? new BigDecimal(0) : BigDecimal.valueOf(Double.parseDouble(obj.toString()));
+	}
+
+	public BigDecimal getGeneralBigDecimal(String field) {
+		Object obj = getObject(field);
+		return obj == null ? new BigDecimal(0) : BigDecimal.valueOf(Double.parseDouble(obj.toString()));
+	}
+
+	public long getLong(int index) {
+		Object obj = getObject(index);
+		return obj == null ? -1 : Long.parseLong(obj.toString());
+	}
+
+	public long getLong(String field) {
+		Object obj = getObject(field);
+		return obj == null ? -1 : Long.parseLong(obj.toString());
+	}
+
+	public long getGeneralLong(int index) {
+		Object obj = getObject(index);
+		return obj == null ? 0 : Long.parseLong(obj.toString());
+	}
+
+	public long getGeneralLong(String field) {
+		Object obj = getObject(field);
+		return obj == null ? 0 : Long.parseLong(obj.toString());
+	}
+
+	public String getString(int index) {
+		Object obj = getObject(index);
+		return obj == null ? null : obj.toString();
+	}
+
+	public String getString(String field) {
+		Object obj = getObject(field);
+		return obj == null ? null : obj.toString();
+	}
+
+	public String getGeneralString(int index) {
+		Object obj = getObject(index);
+		return obj == null ? "" : obj.toString();
+	}
+
+	public String getGeneralString(String field) {
+		Object obj = getObject(field);
+		return obj == null ? "" : obj.toString();
+	}
+
+	public Object getObject(int index) {
+		if (this.iterator == null || this.currentMap == null || this.keys == null || index <= 0 || index > this.keys.size()) {
+			return null;
+		}
+		return this.currentMap.get(this.keys.get(index - 1));
+	}
+
+	public Object getObject(String field) {
+		if (this.iterator == null || this.currentMap == null) {
+			return null;
+		}
+		return this.currentMap.get(field.toUpperCase());
+	}
+
+	/**
+	 * currentMap的JSON格式
+	 */
+	public JSONObject getJSONObject() {
+		if (this.iterator == null || this.currentMap == null) {
+			return null;
+		}
+		JSONObject json = new JSONObject();
+		Object value = null;
+		for (String k : this.keys) {
+			value = parseValue(this.getObject(k));
+			json.put(k, value);
+		}
+		return json;
+	}
+
+	public static Object parseValue(Object value) {
+		if (value != null) {
+			// 以字符串格式表示时间
+			if ("TIMESTAMP".equals(value.getClass().getSimpleName().toUpperCase())) {
+				Timestamp time = (Timestamp) value;
+				value = DateUtil.parseDateToString(new Date(time.getTime()), Constant.YMD_HMS);
+			}
+			// 科学计数法改为js处理
+		}
+		return value;
+	}
+
+	/**
+	 * currentMap的JSONString格式
+	 */
+	public String getJSON() {
+		if (this.iterator == null || this.currentMap == null) {
+			return null;
+		}
+		return getJSONObject().toString();
+	}
+
+	public Date getDate(int index) {
+		Object obj = getObject(index);
+		return obj == null ? null : (Date) obj;
+	}
+
+	public Date getDate(String field) {
+		Object obj = getObject(field);
+		return obj == null ? null : (Date) obj;
+	}
+
+	public Timestamp getTimestamp(int index) {
+		Object obj = getObject(index);
+		return obj == null ? null : (Timestamp) obj;
+	}
+
+	public Timestamp getTimestamp(String field) {
+		Object obj = getObject(field);
+		return obj == null ? null : (Timestamp) obj;
+	}
+
+	public String getGeneralTimestamp(int index, String format) {
+		Timestamp time = getTimestamp(index);
+		if (time != null)
+			return DateUtil.parseDateToString(new Date(time.getTime()), format);
+		return "";
+	}
+
+	public String getGeneralTimestamp(int index) {
+		return getGeneralTimestamp(index, Constant.YMD_HMS);
+	}
+
+	public String getGeneralTimestamp(String field, String format) {
+		Timestamp time = getTimestamp(field);
+		if (time != null)
+			return DateUtil.parseDateToString(new Date(time.getTime()), format);
+		return "";
+	}
+
+	public String getGeneralTimestamp(String field) {
+		return getGeneralTimestamp(field, Constant.YMD_HMS);
+	}
+
+	public double getSummary(String field) {
+		if (hasNext()) {
+			Iterator<Map<String, Object>> iterator = resultList.iterator();
+			Map<String, Object> map = null;
+			double sum = 0;
+			Object obj = null;
+			while ((map = iterator.next()) != null) {
+				obj = map.get(field.toUpperCase());
+				sum += obj == null ? 0 : Double.parseDouble(obj.toString());
+			}
+			return sum;
+		}
+		return 0;
+	}
+
+	public double getSummary(int index) {
+		if (index <= 0 || index > this.getKeys().size()) {
+			return 0;
+		}
+		return getSummary(this.keys.get(index - 1));
+	}
+}

+ 12 - 0
src/main/java/com/uas/dao/SsggDao.java

@@ -0,0 +1,12 @@
+package com.uas.dao;
+
+import com.uas.entity.Ssgg;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-11-02 14:59
+ */
+public interface SsggDao extends JpaRepository<Ssgg,Long> {
+}

+ 12 - 0
src/main/java/com/uas/dao/SswfDao.java

@@ -0,0 +1,12 @@
+package com.uas.dao;
+
+import com.uas.entity.Sswf;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-11-02 10:52
+ */
+public interface SswfDao extends JpaRepository<Sswf,Long> {
+}

+ 12 - 0
src/main/java/com/uas/dao/SxbzxrDao.java

@@ -0,0 +1,12 @@
+package com.uas.dao;
+
+import com.uas.entity.Sxbzxr;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-10-29 18:38
+ */
+public interface SxbzxrDao extends JpaRepository<Sxbzxr,Long> {
+}

+ 54 - 0
src/main/java/com/uas/entity/Action.java

@@ -0,0 +1,54 @@
+package com.uas.entity;
+
+import java.util.List;
+
+/**
+ * 接口信息类
+ * @author zhuth
+ * @time 2018年4月4日
+ */
+public class Action {
+	private int id; // id
+	private String code; // 编号
+	private String name; // 名称
+	private String path; // 路由地址
+	private int enable; // 是否启用
+	private List<String> roles; // 分配角色
+	
+	public int getId() {
+		return id;
+	}
+	public void setId(int id) {
+		this.id = id;
+	}
+	public String getCode() {
+		return code;
+	}
+	public void setCode(String code) {
+		this.code = code;
+	}
+	public String getName() {
+		return name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+	public String getPath() {
+		return path;
+	}
+	public void setPath(String path) {
+		this.path = path;
+	}
+	public int getEnable() {
+		return enable;
+	}
+	public void setEnable(int enable) {
+		this.enable = enable;
+	}
+	public List<String> getRoles() {
+		return roles;
+	}
+	public void setRoles(List<String> roles) {
+		this.roles = roles;
+	}
+}

+ 24 - 0
src/main/java/com/uas/entity/ActionConfig.java

@@ -0,0 +1,24 @@
+package com.uas.entity;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Component
+@ConfigurationProperties(prefix = "action")
+public class ActionConfig {
+	private String apiAction;
+	private String[] publicActions;
+	
+	public String getApiAction() {
+		return apiAction == null ? "" : apiAction;
+	}
+	public void setApiAction(String apiAction) {
+		this.apiAction = apiAction;
+	}
+	public String[] getPublicActions() {
+		return publicActions == null ? new String[]{} : publicActions;
+	}
+	public void setPublicActions(String[] publicActions) {
+		this.publicActions = publicActions;
+	}
+}

+ 528 - 0
src/main/java/com/uas/entity/Business.java

@@ -0,0 +1,528 @@
+package com.uas.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+
+import javax.persistence.*;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-10-26 9:20
+ * 工商资料
+ */
+@Entity
+@Table(name = "FBBUSINESS")
+public class Business {
+    @Id
+    @SequenceGenerator(name="FBBUSINESS_SEQ", sequenceName="FBBUSINESS_SEQ", allocationSize=1)
+    @GeneratedValue(strategy= GenerationType.SEQUENCE, generator="FBBUSINESS_SEQ")
+    private Long fb_id;
+    @JSONField(name = "A级纳税人评价年度")
+    private String fb_evaluation;
+    @JSONField(name = "业务主管单位")
+    private String fb_organizer;
+    @JSONField(name = "原注册号")
+    private String fb_oldcode;
+    @JSONField(name = "发照日期")
+    private String fb_issuedate;
+    @JSONField(name = "发证机关")
+    private String fb_issueorgan;
+    @JSONField(name = "吊销原因")
+    private String fb_dxreason;
+    @JSONField(name = "吊销日期")
+    private String fb_dxdate;
+    @JSONField(name = "名称")
+    private String fb_name;
+    @JSONField(name = "地址")
+    private String fb_address;
+    @JSONField(name = "多证合一")
+    private String fb_dzhy;
+    @JSONField(name = "实收资本")
+    private String fb_paidamount;
+    @JSONField(name = "成立日期")
+    private String fb_cldate;
+    @JSONField(name = "执行事务合伙人")
+    private String fb_zxswhhr;
+    @JSONField(name = "执行事务合伙人(委派代表)")
+    private String fb_zxswhhrdb;
+    @JSONField(name = "投资人")
+    private String fb_investors;
+    @JSONField(name = "曾用名")
+    private String fb_oldname;
+    @JSONField(name = "标准化名称")
+    private String fb_bzhname;
+    @JSONField(name = "核准日期")
+    private String fb_approveddate;
+    @JSONField(name = "法代/执行")
+    private String fb_execution;
+    @JSONField(name = "法定代表人")
+    private String fb_legalrepresentative;
+    @JSONField(name = "注册号")
+    private String fb_code;
+    @JSONField(name = "注册日期")
+    private String fb_date;
+    @JSONField(name = "注册资本币种")
+    private String fb_currency;
+    @JSONField(name = "注册资本(万元)")
+    private Float fb_amount;
+    @JSONField(name = "注吊销日期")
+    private String fb_zdxdate;
+    @JSONField(name = "注销原因")
+    private String fb_zxreason;
+    @JSONField(name = "注销日期")
+    private String fb_zxdate;
+    @JSONField(name = "派出企业名称")
+    private String fb_companyname;
+    @JSONField(name = "电子邮箱")
+    private String fb_email;
+    @JSONField(name = "登记时间")
+    private String fb_djdate;
+    @JSONField(name = "登记机关")
+    private String fb_djorgan;
+    @JSONField(name = "登记状态")
+    private String fb_djstatus;
+    @JSONField(name = "省市")
+    private String fb_province;
+    @JSONField(name = "类型")
+    private String fb_type;
+    @JSONField(name = "类型代码")
+    private String fb_typecode;
+    @JSONField(name = "组成形式")
+    private String fb_formation;
+    @JSONField(name = "经济性质")
+    private String fb_economicnature;
+    @JSONField(name = "经营场所")
+    private String fb_place;
+    @JSONField(name = "经营期限自")
+    private String fb_jyqxfrom;
+    @JSONField(name = "经营期限至")
+    private String fb_jyqxto;
+    @JSONField(name = "经营者")
+    private String fb_operators;
+    @JSONField(name = "经营范围")
+    private String fb_businessscope;
+    @JSONField(name = "统一社会信用代码")
+    private String fb_tyshxycode;
+    @JSONField(name = "联系电话")
+    private String fb_contactnumber;
+    @JSONField(name = "设备价款")
+    private String fb_equipmentamount;
+    @JSONField(name = "评估等级")
+    private String fb_level;
+    @JSONField(name = "负责人")
+    private String fb_principal;
+    @JSONField(name = "迁入地工商局")
+    private String fb_qrdgsj;
+    @JSONField(name = "首席代表")
+    private String fb_chiefrepresentative;
+
+   /* private FBBusinessDetail 注册地;
+
+    public FBBusinessDetail get注册地() {
+        return 注册地;
+    }
+
+    public void set注册地(FBBusinessDetail 注册地) {
+        this.注册地 = 注册地;
+    }*/
+
+    public Long getFb_id() {
+        return fb_id;
+    }
+
+    public void setFb_id(Long fb_id) {
+        this.fb_id = fb_id;
+    }
+
+    public String getFb_evaluation() {
+        return fb_evaluation;
+    }
+
+    public void setFb_evaluation(String fb_evaluation) {
+        this.fb_evaluation = fb_evaluation;
+    }
+
+    public String getFb_organizer() {
+        return fb_organizer;
+    }
+
+    public void setFb_organizer(String fb_organizer) {
+        this.fb_organizer = fb_organizer;
+    }
+
+    public String getFb_oldcode() {
+        return fb_oldcode;
+    }
+
+    public void setFb_oldcode(String fb_oldcode) {
+        this.fb_oldcode = fb_oldcode;
+    }
+
+    public String getFb_issuedate() {
+        return fb_issuedate;
+    }
+
+    public void setFb_issuedate(String fb_issuedate) {
+        this.fb_issuedate = fb_issuedate;
+    }
+
+    public String getFb_issueorgan() {
+        return fb_issueorgan;
+    }
+
+    public void setFb_issueorgan(String fb_issueorgan) {
+        this.fb_issueorgan = fb_issueorgan;
+    }
+
+    public String getFb_dxreason() {
+        return fb_dxreason;
+    }
+
+    public void setFb_dxreason(String fb_dxreason) {
+        this.fb_dxreason = fb_dxreason;
+    }
+
+    public String getFb_dxdate() {
+        return fb_dxdate;
+    }
+
+    public void setFb_dxdate(String fb_dxdate) {
+        this.fb_dxdate = fb_dxdate;
+    }
+
+    public String getFb_name() {
+        return fb_name;
+    }
+
+    public void setFb_name(String fb_name) {
+        this.fb_name = fb_name;
+    }
+
+    public String getFb_address() {
+        return fb_address;
+    }
+
+    public void setFb_address(String fb_address) {
+        this.fb_address = fb_address;
+    }
+
+    public String getFb_dzhy() {
+        return fb_dzhy;
+    }
+
+    public void setFb_dzhy(String fb_dzhy) {
+        this.fb_dzhy = fb_dzhy;
+    }
+
+    public String getFb_paidamount() {
+        return fb_paidamount;
+    }
+
+    public void setFb_paidamount(String fb_paidamount) {
+        this.fb_paidamount = fb_paidamount;
+    }
+
+    public String getFb_cldate() {
+        return fb_cldate;
+    }
+
+    public void setFb_cldate(String fb_cldate) {
+        this.fb_cldate = fb_cldate;
+    }
+
+    public String getFb_zxswhhr() {
+        return fb_zxswhhr;
+    }
+
+    public void setFb_zxswhhr(String fb_zxswhhr) {
+        this.fb_zxswhhr = fb_zxswhhr;
+    }
+
+    public String getFb_zxswhhrdb() {
+        return fb_zxswhhrdb;
+    }
+
+    public void setFb_zxswhhrdb(String fb_zxswhhrdb) {
+        this.fb_zxswhhrdb = fb_zxswhhrdb;
+    }
+
+    public String getFb_investors() {
+        return fb_investors;
+    }
+
+    public void setFb_investors(String fb_investors) {
+        this.fb_investors = fb_investors;
+    }
+
+    public String getFb_oldname() {
+        return fb_oldname;
+    }
+
+    public void setFb_oldname(String fb_oldname) {
+        this.fb_oldname = fb_oldname;
+    }
+
+    public String getFb_bzhname() {
+        return fb_bzhname;
+    }
+
+    public void setFb_bzhname(String fb_bzhname) {
+        this.fb_bzhname = fb_bzhname;
+    }
+
+    public String getFb_approveddate() {
+        return fb_approveddate;
+    }
+
+    public void setFb_approveddate(String fb_approveddate) {
+        this.fb_approveddate = fb_approveddate;
+    }
+
+    public String getFb_execution() {
+        return fb_execution;
+    }
+
+    public void setFb_execution(String fb_execution) {
+        this.fb_execution = fb_execution;
+    }
+
+    public String getFb_legalrepresentative() {
+        return fb_legalrepresentative;
+    }
+
+    public void setFb_legalrepresentative(String fb_legalrepresentative) {
+        this.fb_legalrepresentative = fb_legalrepresentative;
+    }
+
+    public String getFb_code() {
+        return fb_code;
+    }
+
+    public void setFb_code(String fb_code) {
+        this.fb_code = fb_code;
+    }
+
+    public String getFb_date() {
+        return fb_date;
+    }
+
+    public void setFb_date(String fb_date) {
+        this.fb_date = fb_date;
+    }
+
+    public String getFb_currency() {
+        return fb_currency;
+    }
+
+    public void setFb_currency(String fb_currency) {
+        this.fb_currency = fb_currency;
+    }
+
+    public Float getFb_amount() {
+        return fb_amount;
+    }
+
+    public void setFb_amount(Float fb_amount) {
+        this.fb_amount = fb_amount;
+    }
+
+    public String getFb_zdxdate() {
+        return fb_zdxdate;
+    }
+
+    public void setFb_zdxdate(String fb_zdxdate) {
+        this.fb_zdxdate = fb_zdxdate;
+    }
+
+    public String getFb_zxreason() {
+        return fb_zxreason;
+    }
+
+    public void setFb_zxreason(String fb_zxreason) {
+        this.fb_zxreason = fb_zxreason;
+    }
+
+    public String getFb_zxdate() {
+        return fb_zxdate;
+    }
+
+    public void setFb_zxdate(String fb_zxdate) {
+        this.fb_zxdate = fb_zxdate;
+    }
+
+    public String getFb_companyname() {
+        return fb_companyname;
+    }
+
+    public void setFb_companyname(String fb_companyname) {
+        this.fb_companyname = fb_companyname;
+    }
+
+    public String getFb_email() {
+        return fb_email;
+    }
+
+    public void setFb_email(String fb_email) {
+        this.fb_email = fb_email;
+    }
+
+    public String getFb_djdate() {
+        return fb_djdate;
+    }
+
+    public void setFb_djdate(String fb_djdate) {
+        this.fb_djdate = fb_djdate;
+    }
+
+    public String getFb_djorgan() {
+        return fb_djorgan;
+    }
+
+    public void setFb_djorgan(String fb_djorgan) {
+        this.fb_djorgan = fb_djorgan;
+    }
+
+    public String getFb_djstatus() {
+        return fb_djstatus;
+    }
+
+    public void setFb_djstatus(String fb_djstatus) {
+        this.fb_djstatus = fb_djstatus;
+    }
+
+    public String getFb_province() {
+        return fb_province;
+    }
+
+    public void setFb_province(String fb_province) {
+        this.fb_province = fb_province;
+    }
+
+    public String getFb_type() {
+        return fb_type;
+    }
+
+    public void setFb_type(String fb_type) {
+        this.fb_type = fb_type;
+    }
+
+    public String getFb_typecode() {
+        return fb_typecode;
+    }
+
+    public void setFb_typecode(String fb_typecode) {
+        this.fb_typecode = fb_typecode;
+    }
+
+    public String getFb_formation() {
+        return fb_formation;
+    }
+
+    public void setFb_formation(String fb_formation) {
+        this.fb_formation = fb_formation;
+    }
+
+    public String getFb_economicnature() {
+        return fb_economicnature;
+    }
+
+    public void setFb_economicnature(String fb_economicnature) {
+        this.fb_economicnature = fb_economicnature;
+    }
+
+    public String getFb_place() {
+        return fb_place;
+    }
+
+    public void setFb_place(String fb_place) {
+        this.fb_place = fb_place;
+    }
+
+    public String getFb_jyqxfrom() {
+        return fb_jyqxfrom;
+    }
+
+    public void setFb_jyqxfrom(String fb_jyqxfrom) {
+        this.fb_jyqxfrom = fb_jyqxfrom;
+    }
+
+    public String getFb_jyqxto() {
+        return fb_jyqxto;
+    }
+
+    public void setFb_jyqxto(String fb_jyqxto) {
+        this.fb_jyqxto = fb_jyqxto;
+    }
+
+    public String getFb_operators() {
+        return fb_operators;
+    }
+
+    public void setFb_operators(String fb_operators) {
+        this.fb_operators = fb_operators;
+    }
+
+    public String getFb_businessscope() {
+        return fb_businessscope;
+    }
+
+    public void setFb_businessscope(String fb_businessscope) {
+        this.fb_businessscope = fb_businessscope;
+    }
+
+    public String getFb_tyshxycode() {
+        return fb_tyshxycode;
+    }
+
+    public void setFb_tyshxycode(String fb_tyshxycode) {
+        this.fb_tyshxycode = fb_tyshxycode;
+    }
+
+    public String getFb_contactnumber() {
+        return fb_contactnumber;
+    }
+
+    public void setFb_contactnumber(String fb_contactnumber) {
+        this.fb_contactnumber = fb_contactnumber;
+    }
+
+    public String getFb_equipmentamount() {
+        return fb_equipmentamount;
+    }
+
+    public void setFb_equipmentamount(String fb_equipmentamount) {
+        this.fb_equipmentamount = fb_equipmentamount;
+    }
+
+    public String getFb_level() {
+        return fb_level;
+    }
+
+    public void setFb_level(String fb_level) {
+        this.fb_level = fb_level;
+    }
+
+    public String getFb_principal() {
+        return fb_principal;
+    }
+
+    public void setFb_principal(String fb_principal) {
+        this.fb_principal = fb_principal;
+    }
+
+    public String getFb_qrdgsj() {
+        return fb_qrdgsj;
+    }
+
+    public void setFb_qrdgsj(String fb_qrdgsj) {
+        this.fb_qrdgsj = fb_qrdgsj;
+    }
+
+    public String getFb_chiefrepresentative() {
+        return fb_chiefrepresentative;
+    }
+
+    public void setFb_chiefrepresentative(String fb_chiefrepresentative) {
+        this.fb_chiefrepresentative = fb_chiefrepresentative;
+    }
+}

+ 106 - 0
src/main/java/com/uas/entity/BusinessChange.java

@@ -0,0 +1,106 @@
+package com.uas.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+
+import javax.persistence.*;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-10-28 9:26
+ * 工商变更
+ */
+@Entity
+@Table(name = "FBBUSINESSCHANGE")
+public class BusinessChange{
+    @Id
+    @SequenceGenerator(name="FBBUSINESSCHANGE_SEQ", sequenceName="FBBUSINESSCHANGE_SEQ", allocationSize=1)
+    @GeneratedValue(strategy= GenerationType.SEQUENCE, generator="FBBUSINESSCHANGE_SEQ")
+    private Long fbc_id;
+    @JSONField(name = "变更事项")
+    private String fbc_changes;
+    @JSONField(name = "变更事项详情")
+    private String fbc_changesdetail;
+    @JSONField(name = "变更前")
+    private String fbc_changesbefore;
+    @JSONField(name = "变更后")
+    private String fbc_changesafter;
+    @JSONField(name = "变更日期")
+    private String fbc_changesdate;
+    @JSONField(name = "统一社会信用代码")
+    private String fbc_tyshxycode;
+    private int fbc_detno;
+    private Long fbc_fbid;
+
+    public Long getFbc_fbid() {
+        return fbc_fbid;
+    }
+
+    public void setFbc_fbid(Long fbc_fbid) {
+        this.fbc_fbid = fbc_fbid;
+    }
+
+    public Long getFbc_id() {
+        return fbc_id;
+    }
+
+    public void setFbc_id(Long fbc_id) {
+        this.fbc_id = fbc_id;
+    }
+
+    public String getFbc_changes() {
+        return fbc_changes;
+    }
+
+    public void setFbc_changes(String fbc_changes) {
+        this.fbc_changes = fbc_changes;
+    }
+
+    public String getFbc_changesdetail() {
+        return fbc_changesdetail;
+    }
+
+    public void setFbc_changesdetail(String fbc_changesdetail) {
+        this.fbc_changesdetail = fbc_changesdetail;
+    }
+
+    public String getFbc_changesbefore() {
+        return fbc_changesbefore;
+    }
+
+    public void setFbc_changesbefore(String fbc_changesbefore) {
+        this.fbc_changesbefore = fbc_changesbefore;
+    }
+
+    public String getFbc_changesafter() {
+        return fbc_changesafter;
+    }
+
+    public void setFbc_changesafter(String fbc_changesafter) {
+        this.fbc_changesafter = fbc_changesafter;
+    }
+
+    public String getFbc_changesdate() {
+        return fbc_changesdate;
+    }
+
+    public void setFbc_changesdate(String fbc_changesdate) {
+        this.fbc_changesdate = fbc_changesdate;
+    }
+
+    public String getFbc_tyshxycode() {
+        return fbc_tyshxycode;
+    }
+
+    public void setFbc_tyshxycode(String fbc_tyshxycode) {
+        this.fbc_tyshxycode = fbc_tyshxycode;
+    }
+
+    public int getFbc_detno() {
+        return fbc_detno;
+    }
+
+    public void setFbc_detno(int fbc_detno) {
+        this.fbc_detno = fbc_detno;
+    }
+}

+ 118 - 0
src/main/java/com/uas/entity/BusinessDetail.java

@@ -0,0 +1,118 @@
+package com.uas.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+
+import javax.persistence.*;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-10-28 8:46
+ * 工商资料明细
+ */
+@Entity
+@Table(name = "FBBUSINESSDETAIL")
+public class BusinessDetail {
+    @Id
+    @SequenceGenerator(name="FBBUSINESSDETAIL_SEQ", sequenceName="FBBUSINESSDETAIL_SEQ", allocationSize=1)
+    @GeneratedValue(strategy= GenerationType.SEQUENCE, generator="FBBUSINESSDETAIL_SEQ")
+    private Long fbd_id;
+    private Integer fbd_detno;
+    /**
+     * 注册地/经营地/股票
+     */
+    private String fbd_type;
+    @JSONField(name = "code")
+    private String fbd_code;
+    @JSONField(name = "区县")
+    private String fbd_district;
+    @JSONField(name = "市")
+    private String fbd_city;
+    @JSONField(name = "省")
+    private String fbd_province;
+    @JSONField(name = "简称")
+    private String fbd_abbreviation;
+    private Long fbd_fbid;
+    @JSONField(name = "代码")
+    private String fbd_gpcode;
+
+    public String getFbd_gpcode() {
+        return fbd_gpcode;
+    }
+
+    public void setFbd_gpcode(String fbd_gpcode) {
+        this.fbd_gpcode = fbd_gpcode;
+    }
+
+    public Long getFbd_id() {
+        return fbd_id;
+    }
+
+    public void setFbd_id(Long fbd_id) {
+        this.fbd_id = fbd_id;
+    }
+
+    public Integer getFbd_detno() {
+        return fbd_detno;
+    }
+
+    public void setFbd_detno(Integer fbd_detno) {
+        this.fbd_detno = fbd_detno;
+    }
+
+    public String getFbd_type() {
+        return fbd_type;
+    }
+
+    public void setFbd_type(String fbd_type) {
+        this.fbd_type = fbd_type;
+    }
+
+    public String getFbd_code() {
+        return fbd_code;
+    }
+
+    public void setFbd_code(String fbd_code) {
+        this.fbd_code = fbd_code;
+    }
+
+    public String getFbd_district() {
+        return fbd_district;
+    }
+
+    public void setFbd_district(String fbd_district) {
+        this.fbd_district = fbd_district;
+    }
+
+    public String getFbd_city() {
+        return fbd_city;
+    }
+
+    public void setFbd_city(String fbd_city) {
+        this.fbd_city = fbd_city;
+    }
+
+    public String getFbd_province() {
+        return fbd_province;
+    }
+
+    public void setFbd_province(String fbd_province) {
+        this.fbd_province = fbd_province;
+    }
+
+    public String getFbd_abbreviation() {
+        return fbd_abbreviation;
+    }
+
+    public void setFbd_abbreviation(String fbd_abbreviation) {
+        this.fbd_abbreviation = fbd_abbreviation;
+    }
+
+    public Long getFbd_fbid() {
+        return fbd_fbid;
+    }
+
+    public void setFbd_fbid(Long fbd_fbid) {
+        this.fbd_fbid = fbd_fbid;
+    }
+}

+ 185 - 0
src/main/java/com/uas/entity/Cpws.java

@@ -0,0 +1,185 @@
+package com.uas.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+
+import javax.persistence.*;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-10-29 15:59
+ * 裁判文书
+ */
+@Entity
+@Table(name = "FBCPWS")
+public class Cpws {
+    @Id
+    @SequenceGenerator(name = "FBCPWS_SEQ",sequenceName = "FBCPWS_SEQ",allocationSize = 1)
+    @GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "FBCPWS_SEQ")
+    private Long fc_id;
+    private int fc_detno;
+    @JSONField(name = "url")
+    private String fc_url;
+    @JSONField(name = "判决总金额")
+    private String fc_pjqmount;
+    @JSONField(name = "判决时间")
+    private String fc_pjdate;
+    @JSONField(name = "发布时间")
+    private String fc_fbdate;
+    @JSONField(name = "文书类型")
+    private String fc_type;
+    @JSONField(name = "标题")
+    private String fc_title;
+    @JSONField(name = "案号")
+    private String fc_casenumber;
+    @JSONField(name = "案由")
+    private String fc_summary;
+    @JSONField(name = "法院")
+    private String fc_court;
+    @JSONField(name = "诉讼费")
+    private String fc_ssamount;
+    private String fc_tyshxycode;
+    @JSONField(name = "法官")
+    private String fc_judge;
+    @JSONField(name = "案件类型")
+    private String fc_casetype;
+    @JSONField(name = "不公开理由")
+    private String fc_bgkreason;
+    private Long fc_fbid;
+
+    public Long getFc_fbid() {
+        return fc_fbid;
+    }
+
+    public void setFc_fbid(Long fc_fbid) {
+        this.fc_fbid = fc_fbid;
+    }
+
+    public Long getFc_id() {
+        return fc_id;
+    }
+
+    public void setFc_id(Long fc_id) {
+        this.fc_id = fc_id;
+    }
+
+    public int getFc_detno() {
+        return fc_detno;
+    }
+
+    public void setFc_detno(int fc_detno) {
+        this.fc_detno = fc_detno;
+    }
+
+    public String getFc_url() {
+        return fc_url;
+    }
+
+    public void setFc_url(String fc_url) {
+        this.fc_url = fc_url;
+    }
+
+    public String getFc_pjqmount() {
+        return fc_pjqmount;
+    }
+
+    public void setFc_pjqmount(String fc_pjqmount) {
+        this.fc_pjqmount = fc_pjqmount;
+    }
+
+    public String getFc_pjdate() {
+        return fc_pjdate;
+    }
+
+    public void setFc_pjdate(String fc_pjdate) {
+        this.fc_pjdate = fc_pjdate;
+    }
+
+    public String getFc_fbdate() {
+        return fc_fbdate;
+    }
+
+    public void setFc_fbdate(String fc_fbdate) {
+        this.fc_fbdate = fc_fbdate;
+    }
+
+    public String getFc_type() {
+        return fc_type;
+    }
+
+    public void setFc_type(String fc_type) {
+        this.fc_type = fc_type;
+    }
+
+    public String getFc_title() {
+        return fc_title;
+    }
+
+    public void setFc_title(String fc_title) {
+        this.fc_title = fc_title;
+    }
+
+    public String getFc_casenumber() {
+        return fc_casenumber;
+    }
+
+    public void setFc_casenumber(String fc_casenumber) {
+        this.fc_casenumber = fc_casenumber;
+    }
+
+    public String getFc_summary() {
+        return fc_summary;
+    }
+
+    public void setFc_summary(String fc_summary) {
+        this.fc_summary = fc_summary;
+    }
+
+    public String getFc_court() {
+        return fc_court;
+    }
+
+    public void setFc_court(String fc_court) {
+        this.fc_court = fc_court;
+    }
+
+    public String getFc_ssamount() {
+        return fc_ssamount;
+    }
+
+    public void setFc_ssamount(String fc_ssamount) {
+        this.fc_ssamount = fc_ssamount;
+    }
+
+    public String getFc_tyshxycode() {
+        return fc_tyshxycode;
+    }
+
+    public void setFc_tyshxycode(String fc_tyshxycode) {
+        this.fc_tyshxycode = fc_tyshxycode;
+    }
+
+    public String getFc_judge() {
+        return fc_judge;
+    }
+
+    public void setFc_judge(String fc_judge) {
+        this.fc_judge = fc_judge;
+    }
+
+    public String getFc_casetype() {
+        return fc_casetype;
+    }
+
+    public void setFc_casetype(String fc_casetype) {
+        this.fc_casetype = fc_casetype;
+    }
+
+    public String getFc_bgkreason() {
+        return fc_bgkreason;
+    }
+
+    public void setFc_bgkreason(String fc_bgkreason) {
+        this.fc_bgkreason = fc_bgkreason;
+    }
+}

+ 205 - 0
src/main/java/com/uas/entity/CpwsDetail.java

@@ -0,0 +1,205 @@
+package com.uas.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+
+import javax.persistence.*;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-10-29 17:00
+ * 裁判文书明细
+ */
+@Entity
+@Table(name = "FBCPWSDETAIL")
+public class CpwsDetail {
+    @Id
+    @SequenceGenerator(name = "FBCPWSDETAIL_SEQ",sequenceName = "FBCPWSDETAIL_SEQ",allocationSize = 1)
+    @GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "FBCPWSDETAIL_SEQ")
+    private Long fcd_id;
+    private int fcd_detno;
+    private String fcd_type;
+    @JSONField(name = "标签")
+    private String fcd_title;
+    @JSONField(name = "内容")
+    private String fcd_content;
+    @JSONField(name = "其他角色")
+    private String fcd_otherroles;
+    @JSONField(name = "判决结果")
+    private String fcd_verdictresult;
+    @JSONField(name = "类型")
+    private String fcd_kind;
+    @JSONField(name = "角色")
+    private String fcd_role;
+    @JSONField(name = "法定代表人")
+    private String fcd_legalrepresentative;
+    private Long fcd_fcid;
+    @JSONField(name = "给付方")
+    private String fcd_payer;
+    @JSONField(name = "给付金额")
+    private String fcd_payamount;
+    @JSONField(name = "公司名")
+    private String fcd_companyname;
+    @JSONField(name = "曾用名")
+    private String fcd_oldname;
+    @JSONField(name = "组织名")
+    private String fcd_groupname;
+    @JSONField(name = "名字")
+    private String fcd_name;
+    @JSONField(name = "省")
+    private String fcd_province;
+    @JSONField(name = "市")
+    private String fcd_city;
+
+    public Long getFcd_id() {
+        return fcd_id;
+    }
+
+    public void setFcd_id(Long fcd_id) {
+        this.fcd_id = fcd_id;
+    }
+
+    public int getFcd_detno() {
+        return fcd_detno;
+    }
+
+    public void setFcd_detno(int fcd_detno) {
+        this.fcd_detno = fcd_detno;
+    }
+
+    public String getFcd_type() {
+        return fcd_type;
+    }
+
+    public void setFcd_type(String fcd_type) {
+        this.fcd_type = fcd_type;
+    }
+
+    public String getFcd_title() {
+        return fcd_title;
+    }
+
+    public void setFcd_title(String fcd_title) {
+        this.fcd_title = fcd_title;
+    }
+
+    public String getFcd_content() {
+        return fcd_content;
+    }
+
+    public void setFcd_content(String fcd_content) {
+        this.fcd_content = fcd_content;
+    }
+
+    public String getFcd_otherroles() {
+        return fcd_otherroles;
+    }
+
+    public void setFcd_otherroles(String fcd_otherroles) {
+        this.fcd_otherroles = fcd_otherroles;
+    }
+
+    public String getFcd_verdictresult() {
+        return fcd_verdictresult;
+    }
+
+    public void setFcd_verdictresult(String fcd_verdictresult) {
+        this.fcd_verdictresult = fcd_verdictresult;
+    }
+
+    public String getFcd_kind() {
+        return fcd_kind;
+    }
+
+    public void setFcd_kind(String fcd_kind) {
+        this.fcd_kind = fcd_kind;
+    }
+
+    public String getFcd_role() {
+        return fcd_role;
+    }
+
+    public void setFcd_role(String fcd_role) {
+        this.fcd_role = fcd_role;
+    }
+
+    public String getFcd_legalrepresentative() {
+        return fcd_legalrepresentative;
+    }
+
+    public void setFcd_legalrepresentative(String fcd_legalrepresentative) {
+        this.fcd_legalrepresentative = fcd_legalrepresentative;
+    }
+
+    public Long getFcd_fcid() {
+        return fcd_fcid;
+    }
+
+    public void setFcd_fcid(Long fcd_fcid) {
+        this.fcd_fcid = fcd_fcid;
+    }
+
+    public String getFcd_payer() {
+        return fcd_payer;
+    }
+
+    public void setFcd_payer(String fcd_payer) {
+        this.fcd_payer = fcd_payer;
+    }
+
+    public String getFcd_payamount() {
+        return fcd_payamount;
+    }
+
+    public void setFcd_payamount(String fcd_payamount) {
+        this.fcd_payamount = fcd_payamount;
+    }
+
+    public String getFcd_companyname() {
+        return fcd_companyname;
+    }
+
+    public void setFcd_companyname(String fcd_companyname) {
+        this.fcd_companyname = fcd_companyname;
+    }
+
+    public String getFcd_oldname() {
+        return fcd_oldname;
+    }
+
+    public void setFcd_oldname(String fcd_oldname) {
+        this.fcd_oldname = fcd_oldname;
+    }
+
+    public String getFcd_groupname() {
+        return fcd_groupname;
+    }
+
+    public void setFcd_groupname(String fcd_groupname) {
+        this.fcd_groupname = fcd_groupname;
+    }
+
+    public String getFcd_name() {
+        return fcd_name;
+    }
+
+    public void setFcd_name(String fcd_name) {
+        this.fcd_name = fcd_name;
+    }
+
+    public String getFcd_province() {
+        return fcd_province;
+    }
+
+    public void setFcd_province(String fcd_province) {
+        this.fcd_province = fcd_province;
+    }
+
+    public String getFcd_city() {
+        return fcd_city;
+    }
+
+    public void setFcd_city(String fcd_city) {
+        this.fcd_city = fcd_city;
+    }
+}

+ 145 - 0
src/main/java/com/uas/entity/Customer.java

@@ -0,0 +1,145 @@
+package com.uas.entity;
+
+
+import com.alibaba.fastjson.annotation.JSONField;
+
+import javax.persistence.*;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-10-26 8:53
+ * 风报客户基本资料
+ */
+@Entity
+@Table(name = "FBCUSTOMER")
+public class Customer {
+    @Id
+    @SequenceGenerator(name="FBCUSTOMER_SEQ", sequenceName="FBCUSTOMER_SEQ", allocationSize=1)
+    @GeneratedValue(strategy= GenerationType.SEQUENCE, generator="FBCUSTOMER_SEQ")
+    private Long fcu_id;
+    /**
+     * 编号
+     */
+    private String fcu_code;
+    /**
+     * 名称
+     */
+    @JSONField(name = "名称")
+    private String fcu_name;
+    /**
+     * 曾用名
+     */
+    @JSONField(name = "曾用名")
+    private String fcu_oldname;
+    /**
+     * 核准日期
+     */
+    @JSONField(name = "核准日期")
+    private String fcu_approveddate;
+    /**
+     * 注册号
+     */
+    @JSONField(name = "注册号")
+    private String fcu_registnumber;
+    /**
+     * 登记机关
+     */
+    @JSONField(name = "登记机关")
+    private String fcu_registauthority;
+    /**
+     * 登记状态
+     */
+    @JSONField(name = "登记状态")
+    private String fcu_registstatus;
+    /**
+     * 统一社会信用代码
+     */
+    @JSONField(name = "统一社会信用代码")
+    private String fcu_tyshxycode;
+
+    /**
+     * 0未关注/1关注
+     */
+    private int fcu_status;
+
+    public int getFcu_status() {
+        return fcu_status;
+    }
+
+    public void setFcu_status(int fcu_status) {
+        this.fcu_status = fcu_status;
+    }
+
+    public Long getFcu_id() {
+        return fcu_id;
+    }
+
+    public void setFcu_id(Long fcu_id) {
+        this.fcu_id = fcu_id;
+    }
+
+    public String getFcu_code() {
+        return fcu_code;
+    }
+
+    public void setFcu_code(String fcu_code) {
+        this.fcu_code = fcu_code;
+    }
+
+    public String getFcu_name() {
+        return fcu_name;
+    }
+
+    public void setFcu_name(String fcu_name) {
+        this.fcu_name = fcu_name;
+    }
+
+    public String getFcu_oldname() {
+        return fcu_oldname;
+    }
+
+    public void setFcu_oldname(String fcu_oldname) {
+        this.fcu_oldname = fcu_oldname;
+    }
+
+    public String getFcu_approveddate() {
+        return fcu_approveddate;
+    }
+
+    public void setFcu_approveddate(String fcu_approveddate) {
+        this.fcu_approveddate = fcu_approveddate;
+    }
+
+    public String getFcu_registnumber() {
+        return fcu_registnumber;
+    }
+
+    public void setFcu_registnumber(String fcu_registnumber) {
+        this.fcu_registnumber = fcu_registnumber;
+    }
+
+    public String getFcu_registauthority() {
+        return fcu_registauthority;
+    }
+
+    public void setFcu_registauthority(String fcu_registauthority) {
+        this.fcu_registauthority = fcu_registauthority;
+    }
+
+    public String getFcu_registstatus() {
+        return fcu_registstatus;
+    }
+
+    public void setFcu_registstatus(String fcu_registstatus) {
+        this.fcu_registstatus = fcu_registstatus;
+    }
+
+    public String getFcu_tyshxycode() {
+        return fcu_tyshxycode;
+    }
+
+    public void setFcu_tyshxycode(String fcu_tyshxycode) {
+        this.fcu_tyshxycode = fcu_tyshxycode;
+    }
+}

+ 264 - 0
src/main/java/com/uas/entity/DanBao.java

@@ -0,0 +1,264 @@
+package com.uas.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+
+import javax.persistence.*;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-11-12 9:31
+ */
+@Entity
+@Table(name = "FBDANBAO")
+public class DanBao {
+    @Id
+    @SequenceGenerator(name="FBDANBAO_SEQ", sequenceName="FBDANBAO_SEQ", allocationSize=1)
+    @GeneratedValue(strategy= GenerationType.SEQUENCE, generator="FBDANBAO_SEQ")
+    private Long fd_id;
+    private int fd_detno;
+    @JSONField(name = "url")
+    private String fd_url;
+    @JSONField(name = "事件时间")
+    private String fd_sjdate;
+    @JSONField(name = "交易日期")
+    private String fd_jydate;
+    @JSONField(name = "公告方")
+    private String fd_announcer;
+    @JSONField(name = "公告日期")
+    private String fd_ggdate;
+    @JSONField(name = "当事人")
+    private String fd_party;
+    @JSONField(name = "报告期")
+    private String fd_bgdate;
+    @JSONField(name = "报告类型")
+    private String fd_bgtype;
+    @JSONField(name = "担保事件说明")
+    private String fd_event;
+    @JSONField(name = "担保方")
+    private String fd_guarantor;
+    @JSONField(name = "担保方式")
+    private String fd_dbmethod;
+    @JSONField(name = "担保期限")
+    private String fd_dbperiod;
+    @JSONField(name = "担保类型")
+    private String fd_dbtype;
+    @JSONField(name = "担保起止日期")
+    private String fd_dbindate;
+    @JSONField(name = "担保金额")
+    private String fd_dbamount;
+    @JSONField(name = "是否关联交易")
+    private String fd_isgljy;
+    @JSONField(name = "是否关联担保")
+    private String fd_isgldb;
+    @JSONField(name = "是否履行完毕")
+    private String fd_islxwb;
+    @JSONField(name = "标题")
+    private String fd_title;
+    @JSONField(name = "被担保方")
+    private String fd_bparty;
+    @JSONField(name = "详情")
+    private String fd_detail;
+    private Long fd_fbid;
+    private String fd_tyshxycode;
+
+    public Long getFd_id() {
+        return fd_id;
+    }
+
+    public void setFd_id(Long fd_id) {
+        this.fd_id = fd_id;
+    }
+
+    public int getFd_detno() {
+        return fd_detno;
+    }
+
+    public void setFd_detno(int fd_detno) {
+        this.fd_detno = fd_detno;
+    }
+
+    public String getFd_url() {
+        return fd_url;
+    }
+
+    public void setFd_url(String fd_url) {
+        this.fd_url = fd_url;
+    }
+
+    public String getFd_sjdate() {
+        return fd_sjdate;
+    }
+
+    public void setFd_sjdate(String fd_sjdate) {
+        this.fd_sjdate = fd_sjdate;
+    }
+
+    public String getFd_jydate() {
+        return fd_jydate;
+    }
+
+    public void setFd_jydate(String fd_jydate) {
+        this.fd_jydate = fd_jydate;
+    }
+
+    public String getFd_announcer() {
+        return fd_announcer;
+    }
+
+    public void setFd_announcer(String fd_announcer) {
+        this.fd_announcer = fd_announcer;
+    }
+
+    public String getFd_ggdate() {
+        return fd_ggdate;
+    }
+
+    public void setFd_ggdate(String fd_ggdate) {
+        this.fd_ggdate = fd_ggdate;
+    }
+
+    public String getFd_party() {
+        return fd_party;
+    }
+
+    public void setFd_party(String fd_party) {
+        this.fd_party = fd_party;
+    }
+
+    public String getFd_bgdate() {
+        return fd_bgdate;
+    }
+
+    public void setFd_bgdate(String fd_bgdate) {
+        this.fd_bgdate = fd_bgdate;
+    }
+
+    public String getFd_bgtype() {
+        return fd_bgtype;
+    }
+
+    public void setFd_bgtype(String fd_bgtype) {
+        this.fd_bgtype = fd_bgtype;
+    }
+
+    public String getFd_event() {
+        return fd_event;
+    }
+
+    public void setFd_event(String fd_event) {
+        this.fd_event = fd_event;
+    }
+
+    public String getFd_guarantor() {
+        return fd_guarantor;
+    }
+
+    public void setFd_guarantor(String fd_guarantor) {
+        this.fd_guarantor = fd_guarantor;
+    }
+
+    public String getFd_dbmethod() {
+        return fd_dbmethod;
+    }
+
+    public void setFd_dbmethod(String fd_dbmethod) {
+        this.fd_dbmethod = fd_dbmethod;
+    }
+
+    public String getFd_dbperiod() {
+        return fd_dbperiod;
+    }
+
+    public void setFd_dbperiod(String fd_dbperiod) {
+        this.fd_dbperiod = fd_dbperiod;
+    }
+
+    public String getFd_dbtype() {
+        return fd_dbtype;
+    }
+
+    public void setFd_dbtype(String fd_dbtype) {
+        this.fd_dbtype = fd_dbtype;
+    }
+
+    public String getFd_dbindate() {
+        return fd_dbindate;
+    }
+
+    public void setFd_dbindate(String fd_dbindate) {
+        this.fd_dbindate = fd_dbindate;
+    }
+
+    public String getFd_dbamount() {
+        return fd_dbamount;
+    }
+
+    public void setFd_dbamount(String fd_dbamount) {
+        this.fd_dbamount = fd_dbamount;
+    }
+
+    public String getFd_isgljy() {
+        return fd_isgljy;
+    }
+
+    public void setFd_isgljy(String fd_isgljy) {
+        this.fd_isgljy = fd_isgljy;
+    }
+
+    public String getFd_isgldb() {
+        return fd_isgldb;
+    }
+
+    public void setFd_isgldb(String fd_isgldb) {
+        this.fd_isgldb = fd_isgldb;
+    }
+
+    public String getFd_islxwb() {
+        return fd_islxwb;
+    }
+
+    public void setFd_islxwb(String fd_islxwb) {
+        this.fd_islxwb = fd_islxwb;
+    }
+
+    public String getFd_title() {
+        return fd_title;
+    }
+
+    public void setFd_title(String fd_title) {
+        this.fd_title = fd_title;
+    }
+
+    public String getFd_bparty() {
+        return fd_bparty;
+    }
+
+    public void setFd_bparty(String fd_bparty) {
+        this.fd_bparty = fd_bparty;
+    }
+
+    public String getFd_detail() {
+        return fd_detail;
+    }
+
+    public void setFd_detail(String fd_detail) {
+        this.fd_detail = fd_detail;
+    }
+
+    public Long getFd_fbid() {
+        return fd_fbid;
+    }
+
+    public void setFd_fbid(Long fd_fbid) {
+        this.fd_fbid = fd_fbid;
+    }
+
+    public String getFd_tyshxycode() {
+        return fd_tyshxycode;
+    }
+
+    public void setFd_tyshxycode(String fd_tyshxycode) {
+        this.fd_tyshxycode = fd_tyshxycode;
+    }
+}

+ 187 - 0
src/main/java/com/uas/entity/Dcdy.java

@@ -0,0 +1,187 @@
+package com.uas.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+
+import javax.persistence.*;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-11-02 11:37
+ * 动产抵押
+ */
+@Entity
+@Table(name = "FBDCDY")
+public class Dcdy {
+    @Id
+    @SequenceGenerator(name="FBDCDY_SEQ", sequenceName="FBDCDY_SEQ", allocationSize=1)
+    @GeneratedValue(strategy= GenerationType.SEQUENCE, generator="FBDCDY_SEQ")
+    private Long fd_id;
+    @JSONField(name = "交易业务类型")
+    private String fd_type;
+    @JSONField(name = "债务人")
+    private String fd_debtor;
+    @JSONField(name = "债权数额")
+    private Float fd_debtamount;
+    @JSONField(name = "债权种类")
+    private String pd_debtkind;
+    @JSONField(name = "发布时间")
+    private String fd_releasetime;
+    @JSONField(name = "备注")
+    private String fd_remark;
+    @JSONField(name = "履行期限")
+    private String fd_deadline;
+    @JSONField(name = "担保范围")
+    private String fd_dbscope;
+    @JSONField(name = "注销原因")
+    private String fd_zxreason;
+    @JSONField(name = "注销日期")
+    private String fd_zxdate;
+    @JSONField(name = "登记日期")
+    private String fd_djdate;
+    @JSONField(name = "登记机关")
+    private String fd_djauthority;
+    @JSONField(name = "登记种类")
+    private String fd_djkind;
+    @JSONField(name = "登记编号")
+    private String fd_djcode;
+    @JSONField(name = "统一社会信用编号")
+    private String fd_tyshxycode;
+    private Long fd_fbid;
+
+    public Long getFd_fbid() {
+        return fd_fbid;
+    }
+
+    public void setFd_fbid(Long fd_fbid) {
+        this.fd_fbid = fd_fbid;
+    }
+
+    public Long getFd_id() {
+        return fd_id;
+    }
+
+    public void setFd_id(Long fd_id) {
+        this.fd_id = fd_id;
+    }
+
+    public String getFd_type() {
+        return fd_type;
+    }
+
+    public void setFd_type(String fd_type) {
+        this.fd_type = fd_type;
+    }
+
+    public String getFd_debtor() {
+        return fd_debtor;
+    }
+
+    public void setFd_debtor(String fd_debtor) {
+        this.fd_debtor = fd_debtor;
+    }
+
+    public Float getFd_debtamount() {
+        return fd_debtamount;
+    }
+
+    public void setFd_debtamount(Float fd_debtamount) {
+        this.fd_debtamount = fd_debtamount;
+    }
+
+    public String getPd_debtkind() {
+        return pd_debtkind;
+    }
+
+    public void setPd_debtkind(String pd_debtkind) {
+        this.pd_debtkind = pd_debtkind;
+    }
+
+    public String getFd_releasetime() {
+        return fd_releasetime;
+    }
+
+    public void setFd_releasetime(String fd_releasetime) {
+        this.fd_releasetime = fd_releasetime;
+    }
+
+    public String getFd_remark() {
+        return fd_remark;
+    }
+
+    public void setFd_remark(String fd_remark) {
+        this.fd_remark = fd_remark;
+    }
+
+    public String getFd_deadline() {
+        return fd_deadline;
+    }
+
+    public void setFd_deadline(String fd_deadline) {
+        this.fd_deadline = fd_deadline;
+    }
+
+    public String getFd_dbscope() {
+        return fd_dbscope;
+    }
+
+    public void setFd_dbscope(String fd_dbscope) {
+        this.fd_dbscope = fd_dbscope;
+    }
+
+    public String getFd_zxreason() {
+        return fd_zxreason;
+    }
+
+    public void setFd_zxreason(String fd_zxreason) {
+        this.fd_zxreason = fd_zxreason;
+    }
+
+    public String getFd_zxdate() {
+        return fd_zxdate;
+    }
+
+    public void setFd_zxdate(String fd_zxdate) {
+        this.fd_zxdate = fd_zxdate;
+    }
+
+    public String getFd_djdate() {
+        return fd_djdate;
+    }
+
+    public void setFd_djdate(String fd_djdate) {
+        this.fd_djdate = fd_djdate;
+    }
+
+    public String getFd_djauthority() {
+        return fd_djauthority;
+    }
+
+    public void setFd_djauthority(String fd_djauthority) {
+        this.fd_djauthority = fd_djauthority;
+    }
+
+    public String getFd_djkind() {
+        return fd_djkind;
+    }
+
+    public void setFd_djkind(String fd_djkind) {
+        this.fd_djkind = fd_djkind;
+    }
+
+    public String getFd_djcode() {
+        return fd_djcode;
+    }
+
+    public void setFd_djcode(String fd_djcode) {
+        this.fd_djcode = fd_djcode;
+    }
+
+    public String getFd_tyshxycode() {
+        return fd_tyshxycode;
+    }
+
+    public void setFd_tyshxycode(String fd_tyshxycode) {
+        this.fd_tyshxycode = fd_tyshxycode;
+    }
+}

+ 117 - 0
src/main/java/com/uas/entity/DcdyDetail.java

@@ -0,0 +1,117 @@
+package com.uas.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+
+import javax.persistence.*;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-11-02 13:55
+ * 动产抵押明细
+ */
+@Entity
+@Table(name = "FBDCDYDETAIL")
+public class DcdyDetail {
+    @Id
+    @SequenceGenerator(name="FBDCDYDETAIL_SEQ", sequenceName="FBDCDYDETAIL_SEQ", allocationSize=1)
+    @GeneratedValue(strategy= GenerationType.SEQUENCE, generator="FBDCDYDETAIL_SEQ")
+    private Long fdd_id;
+    @JSONField(name = "序号")
+    private int fdd_detno;
+    private Long fdd_fdid;
+    @JSONField(name = "名字")
+    private String fdd_name;
+    @JSONField(name = "角色")
+    private String fdd_role;
+    @JSONField(name = "名称")
+    private String fdd_dyname;
+    @JSONField(name = "当事人/抵押物概况")
+    private String fdd_type;
+    @JSONField(name = "备注")
+    private String fdd_remark;
+    @JSONField(name = "所有权归属")
+    private String fdd_syqgs;
+    @JSONField(name = "数量、质量、状况、所在地等情况")
+    private String fdd_detail;
+
+    public Long getFdd_id() {
+        return fdd_id;
+    }
+
+    public void setFdd_id(Long fdd_id) {
+        this.fdd_id = fdd_id;
+    }
+
+    public int getFdd_detno() {
+        return fdd_detno;
+    }
+
+    public void setFdd_detno(int fdd_detno) {
+        this.fdd_detno = fdd_detno;
+    }
+
+    public Long getFdd_fdid() {
+        return fdd_fdid;
+    }
+
+    public void setFdd_fdid(Long fdd_fdid) {
+        this.fdd_fdid = fdd_fdid;
+    }
+
+    public String getFdd_name() {
+        return fdd_name;
+    }
+
+    public void setFdd_name(String fdd_name) {
+        this.fdd_name = fdd_name;
+    }
+
+    public String getFdd_role() {
+        return fdd_role;
+    }
+
+    public void setFdd_role(String fdd_role) {
+        this.fdd_role = fdd_role;
+    }
+
+    public String getFdd_dyname() {
+        return fdd_dyname;
+    }
+
+    public void setFdd_dyname(String fdd_dyname) {
+        this.fdd_dyname = fdd_dyname;
+    }
+
+    public String getFdd_type() {
+        return fdd_type;
+    }
+
+    public void setFdd_type(String fdd_type) {
+        this.fdd_type = fdd_type;
+    }
+
+    public String getFdd_remark() {
+        return fdd_remark;
+    }
+
+    public void setFdd_remark(String fdd_remark) {
+        this.fdd_remark = fdd_remark;
+    }
+
+    public String getFdd_syqgs() {
+        return fdd_syqgs;
+    }
+
+    public void setFdd_syqgs(String fdd_syqgs) {
+        this.fdd_syqgs = fdd_syqgs;
+    }
+
+    public String getFdd_detail() {
+        return fdd_detail;
+    }
+
+    public void setFdd_detail(String fdd_detail) {
+        this.fdd_detail = fdd_detail;
+    }
+}

+ 54 - 0
src/main/java/com/uas/entity/ErrorMsg.java

@@ -0,0 +1,54 @@
+package com.uas.entity;
+
+/**
+ * Created by luhg on 2018/4/20.
+ * 异常处理返回信息
+ */
+public enum ErrorMsg {
+    NULL_TOKEN(10001,"token not found","缺失token,请把token做为参数传入"),
+    INVALID_TOKEN(10002,"invalid token","无效的token,请重新申请token"),
+    EXPIRED_TOKEN(10003,"expired token","token已过期,请重新申请token"),
+    INVALID_USER(10003,"invalid user","无效用户"),
+    PERMISSION_DENIED_REQUEST(10004,"request permission denied","受限的接口请求"),
+    BAD_USERINFO(10005,"bad userinfo","账户名或密码错误"),
+    NULL_QUERY_CODE(10006,"query code not found","查询方案编号不能为空"),
+    PARAM_AMOUNT_ERROR(10007,"param amount error","查询方案编号不能为空"),
+    PARAM_NAME_ERROR(10007,"param name error","查询方案编号不能为空"),
+    PARAM_FORMAT_ERROR(10008,"param format error","参数格式不正确");
+
+
+
+    private int errCode;
+    private String errMsg;
+    private String errDesc;
+
+    ErrorMsg(int  errCode, String errMsg, String errDesc){
+        this.errCode = errCode;
+        this.errMsg = errMsg;
+        this.errDesc = errDesc;
+    }
+
+    public int getErrCode() {
+        return errCode;
+    }
+
+    public void setErrCode(int errCode) {
+        this.errCode = errCode;
+    }
+
+    public String getErrMsg() {
+        return errMsg;
+    }
+
+    public void setErrMsg(String errMsg) {
+        this.errMsg = errMsg;
+    }
+
+    public String getErrDesc() {
+        return errDesc;
+    }
+
+    public void setErrDesc(String errDesc) {
+        this.errDesc = errDesc;
+    }
+}

+ 127 - 0
src/main/java/com/uas/entity/ExecutedPerson.java

@@ -0,0 +1,127 @@
+package com.uas.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+
+import javax.persistence.*;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-10-29 18:00
+ * 被执行人
+ */
+@Entity
+@Table(name = "FBEXECUTEDPERSON")
+public class ExecutedPerson {
+    @Id
+    @SequenceGenerator(name = "FBEXECUTEDPERSON_SEQ",sequenceName = "FBEXECUTEDPERSON_SEQ",allocationSize = 1)
+    @GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "FBEXECUTEDPERSON_SEQ")
+    private Long fep_id;
+    @JSONField(name = "entities")
+    private String fep_entities;
+    @JSONField(name = "发布时间")
+    private String fep_releasetime;
+    @JSONField(name = "执行标的")
+    private String fep_zxbd;
+    @JSONField(name = "执行法院")
+    private String fep_zxcourt;
+    @JSONField(name = "案件状态")
+    private String fep_casestatus;
+    @JSONField(name = "案号")
+    private String fep_casenumber;
+    @JSONField(name = "立案时间")
+    private String fep_filingtime;
+    @JSONField(name = "被执行人姓名/名称")
+    private String fep_bzxr;
+    @JSONField(name = "统一社会信用编号")
+    private String fep_tyshxycode;
+    private Long fep_fbid;
+
+    public Long getFep_fbid() {
+        return fep_fbid;
+    }
+
+    public void setFep_fbid(Long fep_fbid) {
+        this.fep_fbid = fep_fbid;
+    }
+
+    public Long getFep_id() {
+        return fep_id;
+    }
+
+    public void setFep_id(Long fep_id) {
+        this.fep_id = fep_id;
+    }
+
+    public String getFep_entities() {
+        return fep_entities;
+    }
+
+    public void setFep_entities(String fep_entities) {
+        this.fep_entities = fep_entities;
+    }
+
+    public String getFep_releasetime() {
+        return fep_releasetime;
+    }
+
+    public void setFep_releasetime(String fep_releasetime) {
+        this.fep_releasetime = fep_releasetime;
+    }
+
+    public String getFep_zxbd() {
+        return fep_zxbd;
+    }
+
+    public void setFep_zxbd(String fep_zxbd) {
+        this.fep_zxbd = fep_zxbd;
+    }
+
+    public String getFep_zxcourt() {
+        return fep_zxcourt;
+    }
+
+    public void setFep_zxcourt(String fep_zxcourt) {
+        this.fep_zxcourt = fep_zxcourt;
+    }
+
+    public String getFep_casestatus() {
+        return fep_casestatus;
+    }
+
+    public void setFep_casestatus(String fep_casestatus) {
+        this.fep_casestatus = fep_casestatus;
+    }
+
+    public String getFep_casenumber() {
+        return fep_casenumber;
+    }
+
+    public void setFep_casenumber(String fep_casenumber) {
+        this.fep_casenumber = fep_casenumber;
+    }
+
+    public String getFep_filingtime() {
+        return fep_filingtime;
+    }
+
+    public void setFep_filingtime(String fep_filingtime) {
+        this.fep_filingtime = fep_filingtime;
+    }
+
+    public String getFep_bzxr() {
+        return fep_bzxr;
+    }
+
+    public void setFep_bzxr(String fep_bzxr) {
+        this.fep_bzxr = fep_bzxr;
+    }
+
+    public String getFep_tyshxycode() {
+        return fep_tyshxycode;
+    }
+
+    public void setFep_tyshxycode(String fep_tyshxycode) {
+        this.fep_tyshxycode = fep_tyshxycode;
+    }
+}

+ 157 - 0
src/main/java/com/uas/entity/Gqcz.java

@@ -0,0 +1,157 @@
+package com.uas.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+
+import javax.persistence.*;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-11-02 14:26
+ * 股权出质
+ */
+@Entity
+@Table(name = "FBGQCZ")
+public class Gqcz {
+    @Id
+    @SequenceGenerator(name="FBGQCZ_SEQ", sequenceName="FBGQCZ_SEQ", allocationSize=1)
+    @GeneratedValue(strategy= GenerationType.SEQUENCE, generator="FBGQCZ_SEQ")
+    private Long fg_id;
+    @JSONField(name = "出质人")
+    private String fg_pledger;
+    @JSONField(name = "出质标的")
+    private String fg_subject;
+    @JSONField(name = "出质股权数额")
+    private String fg_amount;
+    @JSONField(name = "发布时间")
+    private String fg_releasetime;
+    @JSONField(name = "发布时间")
+    private String fg_remark;
+    @JSONField(name = "注销原因")
+    private String fg_zxreason;
+    @JSONField(name = "注销日期")
+    private String fg_zxdate;
+    @JSONField(name = "状态")
+    private String fg_status;
+    @JSONField(name = "登记日期")
+    private String fg_djdate;
+    @JSONField(name = "登记编号")
+    private String fg_djcode;
+    @JSONField(name = "质权人")
+    private String fg_pledgee;
+    @JSONField(name = "统一社会信用编号")
+    private String fg_tyshxycode;
+    private Long fg_fbid;
+
+    public Long getFg_fbid() {
+        return fg_fbid;
+    }
+
+    public void setFg_fbid(Long fg_fbid) {
+        this.fg_fbid = fg_fbid;
+    }
+
+    public Long getFg_id() {
+        return fg_id;
+    }
+
+    public void setFg_id(Long fg_id) {
+        this.fg_id = fg_id;
+    }
+
+    public String getFg_pledger() {
+        return fg_pledger;
+    }
+
+    public void setFg_pledger(String fg_pledger) {
+        this.fg_pledger = fg_pledger;
+    }
+
+    public String getFg_subject() {
+        return fg_subject;
+    }
+
+    public void setFg_subject(String fg_subject) {
+        this.fg_subject = fg_subject;
+    }
+
+    public String getFg_amount() {
+        return fg_amount;
+    }
+
+    public void setFg_amount(String fg_amount) {
+        this.fg_amount = fg_amount;
+    }
+
+    public String getFg_releasetime() {
+        return fg_releasetime;
+    }
+
+    public void setFg_releasetime(String fg_releasetime) {
+        this.fg_releasetime = fg_releasetime;
+    }
+
+    public String getFg_remark() {
+        return fg_remark;
+    }
+
+    public void setFg_remark(String fg_remark) {
+        this.fg_remark = fg_remark;
+    }
+
+    public String getFg_zxreason() {
+        return fg_zxreason;
+    }
+
+    public void setFg_zxreason(String fg_zxreason) {
+        this.fg_zxreason = fg_zxreason;
+    }
+
+    public String getFg_zxdate() {
+        return fg_zxdate;
+    }
+
+    public void setFg_zxdate(String fg_zxdate) {
+        this.fg_zxdate = fg_zxdate;
+    }
+
+    public String getFg_status() {
+        return fg_status;
+    }
+
+    public void setFg_status(String fg_status) {
+        this.fg_status = fg_status;
+    }
+
+    public String getFg_djdate() {
+        return fg_djdate;
+    }
+
+    public void setFg_djdate(String fg_djdate) {
+        this.fg_djdate = fg_djdate;
+    }
+
+    public String getFg_djcode() {
+        return fg_djcode;
+    }
+
+    public void setFg_djcode(String fg_djcode) {
+        this.fg_djcode = fg_djcode;
+    }
+
+    public String getFg_pledgee() {
+        return fg_pledgee;
+    }
+
+    public void setFg_pledgee(String fg_pledgee) {
+        this.fg_pledgee = fg_pledgee;
+    }
+
+    public String getFg_tyshxycode() {
+        return fg_tyshxycode;
+    }
+
+    public void setFg_tyshxycode(String fg_tyshxycode) {
+        this.fg_tyshxycode = fg_tyshxycode;
+    }
+}

+ 43 - 0
src/main/java/com/uas/entity/Group.java

@@ -0,0 +1,43 @@
+package com.uas.entity;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-10-28 13:49
+ */
+@Entity
+@Table(name = "FBGROUP")
+public class Group {
+    private String created_at;
+    @Id
+    private Long id;
+    private String name;
+
+    public String getCreated_at() {
+        return created_at;
+    }
+
+    public void setCreated_at(String created_at) {
+        this.created_at = created_at;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+}

+ 116 - 0
src/main/java/com/uas/entity/Investor.java

@@ -0,0 +1,116 @@
+package com.uas.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+
+import javax.persistence.*;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-10-26 9:54
+ *工商登记股东信息
+ */
+@Entity
+@Table(name = "FBINVESTOR")
+public class Investor {
+    @Id
+    @SequenceGenerator(name="FBINVESTOR_SEQ", sequenceName="FBINVESTOR_SEQ", allocationSize=1)
+    @GeneratedValue(strategy= GenerationType.SEQUENCE, generator="FBINVESTOR_SEQ")
+    private Long fi_id;
+    @JSONField(name ="实缴额")
+    private Float fi_sjamount;
+    @JSONField(name ="持股比")
+    private Float fi_cgproprotion;
+    @JSONField(name ="股东")
+    private String fi_investor;
+    @JSONField(name ="股东类型")
+    private String fi_type;
+    @JSONField(name ="认缴额")
+    private String fi_rjamount;
+    @JSONField(name ="责任形式")
+    private String fi_zrxs;
+    @JSONField(name ="统一社会信用代码")
+    private String fi_tyshxycode;
+    private int fi_detno;
+    private Long fi_fbid;
+
+    public Long getFi_fbid() {
+        return fi_fbid;
+    }
+
+    public void setFi_fbid(Long fi_fbid) {
+        this.fi_fbid = fi_fbid;
+    }
+
+    public Long getFi_id() {
+        return fi_id;
+    }
+
+    public void setFi_id(Long fi_id) {
+        this.fi_id = fi_id;
+    }
+
+    public Float getFi_sjamount() {
+        return fi_sjamount;
+    }
+
+    public void setFi_sjamount(Float fi_sjamount) {
+        this.fi_sjamount = fi_sjamount;
+    }
+
+    public Float getFi_cgproprotion() {
+        return fi_cgproprotion;
+    }
+
+    public void setFi_cgproprotion(Float fi_cgproprotion) {
+        this.fi_cgproprotion = fi_cgproprotion;
+    }
+
+    public String getFi_investor() {
+        return fi_investor;
+    }
+
+    public void setFi_investor(String fi_investor) {
+        this.fi_investor = fi_investor;
+    }
+
+    public String getFi_type() {
+        return fi_type;
+    }
+
+    public void setFi_type(String fi_type) {
+        this.fi_type = fi_type;
+    }
+
+    public String getFi_rjamount() {
+        return fi_rjamount;
+    }
+
+    public void setFi_rjamount(String fi_rjamount) {
+        this.fi_rjamount = fi_rjamount;
+    }
+
+    public String getFi_zrxs() {
+        return fi_zrxs;
+    }
+
+    public void setFi_zrxs(String fi_zrxs) {
+        this.fi_zrxs = fi_zrxs;
+    }
+
+    public String getFi_tyshxycode() {
+        return fi_tyshxycode;
+    }
+
+    public void setFi_tyshxycode(String fi_tyshxycode) {
+        this.fi_tyshxycode = fi_tyshxycode;
+    }
+
+    public int getFi_detno() {
+        return fi_detno;
+    }
+
+    public void setFi_detno(int fi_detno) {
+        this.fi_detno = fi_detno;
+    }
+}

+ 99 - 0
src/main/java/com/uas/entity/InvestorRJDetail.java

@@ -0,0 +1,99 @@
+package com.uas.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+
+import javax.persistence.*;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-10-28 9:40
+ * 工商登记股东信息明细
+ */
+@Entity
+@Table(name = "FBINVESTORDETAIL")
+public class InvestorRJDetail {
+    @Id
+    @SequenceGenerator(name="FBINVESTORDETAIL_SEQ", sequenceName="FBINVESTORDETAIL_SEQ", allocationSize=1)
+    @GeneratedValue(strategy= GenerationType.SEQUENCE, generator="FBINVESTORDETAIL_SEQ")
+    private Long fid_id;
+    private int fid_detno;
+    @JSONField(name = "认缴出资币种")
+    private String fid_currency;
+    @JSONField(name = "认缴出资方式")
+    private String fid_investtype;
+    @JSONField(name = "认缴出资日期")
+    private String fid_investdate;
+    @JSONField(name = "认缴出资额")
+    private String fid_investamount;
+    private Long fid_fiid;
+    /**
+     * 实缴明细/认缴明细
+     */
+    @JSONField(name = "认缴明细")
+    private String fid_type;
+
+    public Long getFid_id() {
+        return fid_id;
+    }
+
+    public void setFid_id(Long fid_id) {
+        this.fid_id = fid_id;
+    }
+
+    public int getFid_detno() {
+        return fid_detno;
+    }
+
+    public void setFid_detno(int fid_detno) {
+        this.fid_detno = fid_detno;
+    }
+
+    public String getFid_currency() {
+        return fid_currency;
+    }
+
+    public void setFid_currency(String fid_currency) {
+        this.fid_currency = fid_currency;
+    }
+
+    public String getFid_investtype() {
+        return fid_investtype;
+    }
+
+    public void setFid_investtype(String fid_investtype) {
+        this.fid_investtype = fid_investtype;
+    }
+
+    public String getFid_investdate() {
+        return fid_investdate;
+    }
+
+    public void setFid_investdate(String fid_investdate) {
+        this.fid_investdate = fid_investdate;
+    }
+
+    public String getFid_investamount() {
+        return fid_investamount;
+    }
+
+    public void setFid_investamount(String fid_investamount) {
+        this.fid_investamount = fid_investamount;
+    }
+
+    public Long getFid_fiid() {
+        return fid_fiid;
+    }
+
+    public void setFid_fiid(Long fid_fiid) {
+        this.fid_fiid = fid_fiid;
+    }
+
+    public String getFid_type() {
+        return fid_type;
+    }
+
+    public void setFid_type(String fid_type) {
+        this.fid_type = fid_type;
+    }
+}

+ 99 - 0
src/main/java/com/uas/entity/InvestorSJDetail.java

@@ -0,0 +1,99 @@
+package com.uas.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+
+import javax.persistence.*;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-10-28 9:40
+ * 工商登记股东信息明细
+ */
+@Entity
+@Table(name = "FBINVESTORDETAIL")
+public class InvestorSJDetail {
+    @Id
+    @SequenceGenerator(name="FBINVESTORDETAIL_SEQ", sequenceName="FBINVESTORDETAIL_SEQ", allocationSize=1)
+    @GeneratedValue(strategy= GenerationType.SEQUENCE, generator="FBINVESTORDETAIL_SEQ")
+    private Long fid_id;
+    private int fid_detno;
+    @JSONField(name = "实缴出资币种")
+    private String fid_currency;
+    @JSONField(name = "实缴出资方式")
+    private String fid_investtype;
+    @JSONField(name = "实缴出资日期")
+    private String fid_investdate;
+    @JSONField(name = "实缴出资额")
+    private String fid_investamount;
+    private Long fid_fiid;
+    /**
+     * 实缴明细/认缴明细
+     */
+    @JSONField(name = "认缴明细")
+    private String fid_type;
+
+    public Long getFid_id() {
+        return fid_id;
+    }
+
+    public void setFid_id(Long fid_id) {
+        this.fid_id = fid_id;
+    }
+
+    public int getFid_detno() {
+        return fid_detno;
+    }
+
+    public void setFid_detno(int fid_detno) {
+        this.fid_detno = fid_detno;
+    }
+
+    public String getFid_currency() {
+        return fid_currency;
+    }
+
+    public void setFid_currency(String fid_currency) {
+        this.fid_currency = fid_currency;
+    }
+
+    public String getFid_investtype() {
+        return fid_investtype;
+    }
+
+    public void setFid_investtype(String fid_investtype) {
+        this.fid_investtype = fid_investtype;
+    }
+
+    public String getFid_investdate() {
+        return fid_investdate;
+    }
+
+    public void setFid_investdate(String fid_investdate) {
+        this.fid_investdate = fid_investdate;
+    }
+
+    public String getFid_investamount() {
+        return fid_investamount;
+    }
+
+    public void setFid_investamount(String fid_investamount) {
+        this.fid_investamount = fid_investamount;
+    }
+
+    public Long getFid_fiid() {
+        return fid_fiid;
+    }
+
+    public void setFid_fiid(Long fid_fiid) {
+        this.fid_fiid = fid_fiid;
+    }
+
+    public String getFid_type() {
+        return fid_type;
+    }
+
+    public void setFid_type(String fid_type) {
+        this.fid_type = fid_type;
+    }
+}

+ 116 - 0
src/main/java/com/uas/entity/Jyyc.java

@@ -0,0 +1,116 @@
+package com.uas.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+
+import javax.persistence.*;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-11-02 10:01
+ */
+@Entity
+@Table(name = "FBJYYC")
+public class Jyyc {
+    @Id
+    @SequenceGenerator(name="FBJYYC_SEQ", sequenceName="FBJYYC_SEQ", allocationSize=1)
+    @GeneratedValue(strategy= GenerationType.SEQUENCE, generator="FBJYYC_SEQ")
+    private Long fj_id;
+    @JSONField(name = "作出决定机关")
+    private String fj_organ;
+    @JSONField(name = "作出决定机关(列入)")
+    private String fj_lrorgan;
+    @JSONField(name = "作出决定机关(移出)")
+    private String fj_ycorgan;
+    @JSONField(name = "列入日期")
+    private String fj_lrdate;
+    @JSONField(name = "异常原因")
+    private String fj_abnormal;
+    @JSONField(name = "移出原因")
+    private String fj_ycreason;
+    @JSONField(name = "移出日期")
+    private String fj_ycdate;
+    @JSONField(name = "统一社会信用代码")
+    private String fj_tyshxycode;
+    private Long fj_fbid;
+
+    public Long getFj_fbid() {
+        return fj_fbid;
+    }
+
+    public void setFj_fbid(Long fj_fbid) {
+        this.fj_fbid = fj_fbid;
+    }
+
+    public Long getFj_id() {
+        return fj_id;
+    }
+
+    public void setFj_id(Long fj_id) {
+        this.fj_id = fj_id;
+    }
+
+    public String getFj_organ() {
+        return fj_organ;
+    }
+
+    public void setFj_organ(String fj_organ) {
+        this.fj_organ = fj_organ;
+    }
+
+    public String getFj_lrorgan() {
+        return fj_lrorgan;
+    }
+
+    public void setFj_lrorgan(String fj_lrorgan) {
+        this.fj_lrorgan = fj_lrorgan;
+    }
+
+    public String getFj_ycorgan() {
+        return fj_ycorgan;
+    }
+
+    public void setFj_ycorgan(String fj_ycorgan) {
+        this.fj_ycorgan = fj_ycorgan;
+    }
+
+    public String getFj_lrdate() {
+        return fj_lrdate;
+    }
+
+    public void setFj_lrdate(String fj_lrdate) {
+        this.fj_lrdate = fj_lrdate;
+    }
+
+    public String getFj_abnormal() {
+        return fj_abnormal;
+    }
+
+    public void setFj_abnormal(String fj_abnormal) {
+        this.fj_abnormal = fj_abnormal;
+    }
+
+    public String getFj_ycreason() {
+        return fj_ycreason;
+    }
+
+    public void setFj_ycreason(String fj_ycreason) {
+        this.fj_ycreason = fj_ycreason;
+    }
+
+    public String getFj_ycdate() {
+        return fj_ycdate;
+    }
+
+    public void setFj_ycdate(String fj_ycdate) {
+        this.fj_ycdate = fj_ycdate;
+    }
+
+    public String getFj_tyshxycode() {
+        return fj_tyshxycode;
+    }
+
+    public void setFj_tyshxycode(String fj_tyshxycode) {
+        this.fj_tyshxycode = fj_tyshxycode;
+    }
+}

+ 204 - 0
src/main/java/com/uas/entity/Ktgg.java

@@ -0,0 +1,204 @@
+package com.uas.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+
+import javax.persistence.*;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-10-29 9:57
+ */
+@Entity
+@Table(name = "FBKTGG")
+public class Ktgg {
+    @Id
+    @SequenceGenerator(name = "FBKTGG_SEQ",sequenceName = "FBKTGG_SEQ",allocationSize = 1)
+    @GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "FBKTGG_SEQ")
+    private Long fk_id;
+    private int fk_detno;
+    @JSONField(name = "发布时间")
+    private String fk_fbdate;
+    @JSONField(name = "开庭时间")
+    private String fk_ktdate;
+    @JSONField(name = "案号")
+    private String fk_casenumber;
+    @JSONField(name = "法庭")
+    private String fk_tribunal;
+    @JSONField(name = "法院")
+    private String fk_court;
+    private String fk_tyshxycode;
+    @JSONField(name = "entities")
+    private String fk_entities;
+    @JSONField(name = "其他角色")
+    private String fk_otherroles;
+    @JSONField(name = "原告/上诉人")
+    private String fk_plaintif;
+    @JSONField(name = "当事人")
+    private String fk_party;
+    @JSONField(name = "被告/被上诉人")
+    private String fk_defendant;
+    @JSONField(name = "标题")
+    private String fk_title;
+    @JSONField(name = "案件类型")
+    private String fk_casetype;
+    @JSONField(name = "案由")
+    private String fk_brief;
+    @JSONField(name = "正文")
+    private String fk_text;
+    @JSONField(name = "法官")
+    private String fk_judge;
+    private Long fk_fbid;
+
+    public Long getFk_fbid() {
+        return fk_fbid;
+    }
+
+    public void setFk_fbid(Long fk_fbid) {
+        this.fk_fbid = fk_fbid;
+    }
+
+    public Long getFk_id() {
+        return fk_id;
+    }
+
+    public void setFk_id(Long fk_id) {
+        this.fk_id = fk_id;
+    }
+
+    public int getFk_detno() {
+        return fk_detno;
+    }
+
+    public void setFk_detno(int fk_detno) {
+        this.fk_detno = fk_detno;
+    }
+
+    public String getFk_fbdate() {
+        return fk_fbdate;
+    }
+
+    public void setFk_fbdate(String fk_fbdate) {
+        this.fk_fbdate = fk_fbdate;
+    }
+
+    public String getFk_ktdate() {
+        return fk_ktdate;
+    }
+
+    public void setFk_ktdate(String fk_ktdate) {
+        this.fk_ktdate = fk_ktdate;
+    }
+
+    public String getFk_casenumber() {
+        return fk_casenumber;
+    }
+
+    public void setFk_casenumber(String fk_casenumber) {
+        this.fk_casenumber = fk_casenumber;
+    }
+
+    public String getFk_tribunal() {
+        return fk_tribunal;
+    }
+
+    public void setFk_tribunal(String fk_tribunal) {
+        this.fk_tribunal = fk_tribunal;
+    }
+
+    public String getFk_court() {
+        return fk_court;
+    }
+
+    public void setFk_court(String fk_court) {
+        this.fk_court = fk_court;
+    }
+
+    public String getFk_tyshxycode() {
+        return fk_tyshxycode;
+    }
+
+    public void setFk_tyshxycode(String fk_tyshxycode) {
+        this.fk_tyshxycode = fk_tyshxycode;
+    }
+
+    public String getFk_entities() {
+        return fk_entities;
+    }
+
+    public void setFk_entities(String fk_entities) {
+        this.fk_entities = fk_entities;
+    }
+
+    public String getFk_otherroles() {
+        return fk_otherroles;
+    }
+
+    public void setFk_otherroles(String fk_otherroles) {
+        this.fk_otherroles = fk_otherroles;
+    }
+
+    public String getFk_plaintif() {
+        return fk_plaintif;
+    }
+
+    public void setFk_plaintif(String fk_plaintif) {
+        this.fk_plaintif = fk_plaintif;
+    }
+
+    public String getFk_party() {
+        return fk_party;
+    }
+
+    public void setFk_party(String fk_party) {
+        this.fk_party = fk_party;
+    }
+
+    public String getFk_defendant() {
+        return fk_defendant;
+    }
+
+    public void setFk_defendant(String fk_defendant) {
+        this.fk_defendant = fk_defendant;
+    }
+
+    public String getFk_title() {
+        return fk_title;
+    }
+
+    public void setFk_title(String fk_title) {
+        this.fk_title = fk_title;
+    }
+
+    public String getFk_casetype() {
+        return fk_casetype;
+    }
+
+    public void setFk_casetype(String fk_casetype) {
+        this.fk_casetype = fk_casetype;
+    }
+
+    public String getFk_brief() {
+        return fk_brief;
+    }
+
+    public void setFk_brief(String fk_brief) {
+        this.fk_brief = fk_brief;
+    }
+
+    public String getFk_text() {
+        return fk_text;
+    }
+
+    public void setFk_text(String fk_text) {
+        this.fk_text = fk_text;
+    }
+
+    public String getFk_judge() {
+        return fk_judge;
+    }
+
+    public void setFk_judge(String fk_judge) {
+        this.fk_judge = fk_judge;
+    }
+}

+ 114 - 0
src/main/java/com/uas/entity/KtggDetail.java

@@ -0,0 +1,114 @@
+package com.uas.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+
+import javax.persistence.*;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-10-29 15:10
+ */
+@Entity
+@Table(name = "FBKTGGDETAIL")
+public class KtggDetail {
+    @Id
+    @SequenceGenerator(name = "FBKTGGDETAIL_SEQ",sequenceName = "FBKTGGDETAIL_SEQ",allocationSize = 1)
+    @GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "FBKTGGDETAIL_SEQ")
+    private Long fkd_id;
+    private int fkd_detno;
+    @JSONField(name = "省")
+    private String fkd_province;
+    private Long fkd_fkid;
+    private String fkd_type;
+    @JSONField(name = "其他角色")
+    private String fkd_otherroles;
+    @JSONField(name = "角色")
+    private String fkd_role;
+    @JSONField(name = "类型")
+    private String fkd_kind;
+    @JSONField(name = "市")
+    private String fkd_city;
+    @JSONField(name = "名字")
+    private String fkd_name;
+
+    public Long getFkd_id() {
+        return fkd_id;
+    }
+
+    public void setFkd_id(Long fkd_id) {
+        this.fkd_id = fkd_id;
+    }
+
+    public int getFkd_detno() {
+        return fkd_detno;
+    }
+
+    public void setFkd_detno(int fkd_detno) {
+        this.fkd_detno = fkd_detno;
+    }
+
+    public String getFkd_province() {
+        return fkd_province;
+    }
+
+    public void setFkd_province(String fkd_province) {
+        this.fkd_province = fkd_province;
+    }
+
+    public Long getFkd_fkid() {
+        return fkd_fkid;
+    }
+
+    public void setFkd_fkid(Long fkd_fkid) {
+        this.fkd_fkid = fkd_fkid;
+    }
+
+    public String getFkd_type() {
+        return fkd_type;
+    }
+
+    public void setFkd_type(String fkd_type) {
+        this.fkd_type = fkd_type;
+    }
+
+    public String getFkd_otherroles() {
+        return fkd_otherroles;
+    }
+
+    public void setFkd_otherroles(String fkd_otherroles) {
+        this.fkd_otherroles = fkd_otherroles;
+    }
+
+    public String getFkd_role() {
+        return fkd_role;
+    }
+
+    public void setFkd_role(String fkd_role) {
+        this.fkd_role = fkd_role;
+    }
+
+    public String getFkd_kind() {
+        return fkd_kind;
+    }
+
+    public void setFkd_kind(String fkd_kind) {
+        this.fkd_kind = fkd_kind;
+    }
+
+    public String getFkd_city() {
+        return fkd_city;
+    }
+
+    public void setFkd_city(String fkd_city) {
+        this.fkd_city = fkd_city;
+    }
+
+    public String getFkd_name() {
+        return fkd_name;
+    }
+
+    public void setFkd_name(String fkd_name) {
+        this.fkd_name = fkd_name;
+    }
+}

+ 76 - 0
src/main/java/com/uas/entity/Member.java

@@ -0,0 +1,76 @@
+package com.uas.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+
+import javax.persistence.*;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-10-29 8:45
+ * 主要成员
+ */
+@Entity
+@Table(name = "FBMEMBER")
+public class Member {
+    @Id
+    @SequenceGenerator(name = "FBMEMBER_SEQ",sequenceName = "FBMEMBER_SEQ",allocationSize = 1)
+    @GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "FBMEMBER_SEQ")
+    private Long fm_id;
+    @JSONField(name = "序号")
+    private int fm_detno;
+    @JSONField(name = "成员")
+    private String fm_member;
+    @JSONField(name = "职务")
+    private String fm_position;
+    private String fm_tyshxycode;
+    private Long fm_fbid;
+
+    public Long getFm_fbid() {
+        return fm_fbid;
+    }
+
+    public void setFm_fbid(Long fm_fbid) {
+        this.fm_fbid = fm_fbid;
+    }
+
+    public Long getFm_id() {
+        return fm_id;
+    }
+
+    public void setFm_id(Long fm_id) {
+        this.fm_id = fm_id;
+    }
+
+    public int getFm_detno() {
+        return fm_detno;
+    }
+
+    public void setFm_detno(int fm_detno) {
+        this.fm_detno = fm_detno;
+    }
+
+    public String getFm_member() {
+        return fm_member;
+    }
+
+    public void setFm_member(String fm_member) {
+        this.fm_member = fm_member;
+    }
+
+    public String getFm_position() {
+        return fm_position;
+    }
+
+    public void setFm_position(String fm_position) {
+        this.fm_position = fm_position;
+    }
+
+    public String getFm_tyshxycode() {
+        return fm_tyshxycode;
+    }
+
+    public void setFm_tyshxycode(String fm_tyshxycode) {
+        this.fm_tyshxycode = fm_tyshxycode;
+    }
+}

+ 136 - 0
src/main/java/com/uas/entity/Qsjl.java

@@ -0,0 +1,136 @@
+package com.uas.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+
+import javax.persistence.*;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-11-02 11:18
+ */
+@Entity
+@Table(name = "FBQSJL")
+public class Qsjl {
+    @Id
+    @SequenceGenerator(name="FBQSJL_SEQ", sequenceName="FBQSJL_SEQ", allocationSize=1)
+    @GeneratedValue(strategy= GenerationType.SEQUENCE, generator="FBQSJL_SEQ")
+    private Long fq_id;
+    @JSONField(name = "发布时间")
+    private String fq_releasetime;
+    @JSONField(name = "名称")
+    private String fq_name;
+    @JSONField(name = "法定代表人姓名")
+    private String fq_representative;
+    @JSONField(name = "税务机关")
+    private String fq_taxauthorities;
+    @JSONField(name = "税种")
+    private String fq_tax;
+    @JSONField(name = "经营地址")
+    private String fq_address;
+    @JSONField(name = "识别号")
+    private String fq_identifier;
+    @JSONField(name = "金额")
+    private Float fq_amount;
+    @JSONField(name = "高级税务机关")
+    private String fq_gjswjg;
+    @JSONField(name = "统一社会信用编号")
+    private String fq_tyshxycode;
+    private Long fq_fbid;
+
+    public Long getFq_fbid() {
+        return fq_fbid;
+    }
+
+    public void setFq_fbid(Long fq_fbid) {
+        this.fq_fbid = fq_fbid;
+    }
+
+    public Long getFq_id() {
+        return fq_id;
+    }
+
+    public void setFq_id(Long fq_id) {
+        this.fq_id = fq_id;
+    }
+
+    public String getFq_releasetime() {
+        return fq_releasetime;
+    }
+
+    public void setFq_releasetime(String fq_releasetime) {
+        this.fq_releasetime = fq_releasetime;
+    }
+
+    public String getFq_name() {
+        return fq_name;
+    }
+
+    public void setFq_name(String fq_name) {
+        this.fq_name = fq_name;
+    }
+
+    public String getFq_representative() {
+        return fq_representative;
+    }
+
+    public void setFq_representative(String fq_representative) {
+        this.fq_representative = fq_representative;
+    }
+
+    public String getFq_taxauthorities() {
+        return fq_taxauthorities;
+    }
+
+    public void setFq_taxauthorities(String fq_taxauthorities) {
+        this.fq_taxauthorities = fq_taxauthorities;
+    }
+
+    public String getFq_tax() {
+        return fq_tax;
+    }
+
+    public void setFq_tax(String fq_tax) {
+        this.fq_tax = fq_tax;
+    }
+
+    public String getFq_address() {
+        return fq_address;
+    }
+
+    public void setFq_address(String fq_address) {
+        this.fq_address = fq_address;
+    }
+
+    public String getFq_identifier() {
+        return fq_identifier;
+    }
+
+    public void setFq_identifier(String fq_identifier) {
+        this.fq_identifier = fq_identifier;
+    }
+
+    public Float getFq_amount() {
+        return fq_amount;
+    }
+
+    public void setFq_amount(Float fq_amount) {
+        this.fq_amount = fq_amount;
+    }
+
+    public String getFq_gjswjg() {
+        return fq_gjswjg;
+    }
+
+    public void setFq_gjswjg(String fq_gjswjg) {
+        this.fq_gjswjg = fq_gjswjg;
+    }
+
+    public String getFq_tyshxycode() {
+        return fq_tyshxycode;
+    }
+
+    public void setFq_tyshxycode(String fq_tyshxycode) {
+        this.fq_tyshxycode = fq_tyshxycode;
+    }
+}

+ 197 - 0
src/main/java/com/uas/entity/Sfxz.java

@@ -0,0 +1,197 @@
+package com.uas.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+
+import javax.persistence.*;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-11-02 14:43
+ * 司法协助
+ */
+@Entity
+@Table(name = "FBSFXZ")
+public class Sfxz {
+    @Id
+    @SequenceGenerator(name="FBSFXZ_SEQ", sequenceName="FBSFXZ_SEQ", allocationSize=1)
+    @GeneratedValue(strategy= GenerationType.SEQUENCE, generator="FBSFXZ_SEQ")
+    private Long ff_id;
+    @JSONField(name = "公示日期")
+    private String ff_publicitydate;
+    @JSONField(name = "冻结期限自")
+    private String ff_djfrom;
+    @JSONField(name = "冻结期限至")
+    private String ff_djto;
+    @JSONField(name = "受让人")
+    private String ff_assignee;
+    @JSONField(name = "执行事项")
+    private String ff_zxitem;
+    @JSONField(name = "执行法院")
+    private String ff_zxcourt;
+    @JSONField(name = "执行裁定书文号")
+    private String ff_zxcdws;
+    @JSONField(name = "执行通知书文号")
+    private String ff_zxtzws;
+    @JSONField(name = "续行冻结期限自")
+    private String ff_xxdjfrom;
+    @JSONField(name = "续行冻结期限至")
+    private String ff_xxdjto;
+    @JSONField(name = "股权所在企业名称")
+    private String ff_incompany;
+    @JSONField(name = "股权数额")
+    private String ff_amount;
+    @JSONField(name = "被执行人")
+    private String ff_executed;
+    @JSONField(name = "被执行人证件种类")
+    private String ff_executeddoc;
+    @JSONField(name = "解除冻结期限")
+    private String ff_unfreeze;
+    @JSONField(name = "统一社会信用编号")
+    private String ff_tyshxycode;
+    private Long ff_fbid;
+
+    public Long getFf_fbid() {
+        return ff_fbid;
+    }
+
+    public void setFf_fbid(Long ff_fbid) {
+        this.ff_fbid = ff_fbid;
+    }
+
+    public Long getFf_id() {
+        return ff_id;
+    }
+
+    public void setFf_id(Long ff_id) {
+        this.ff_id = ff_id;
+    }
+
+    public String getFf_publicitydate() {
+        return ff_publicitydate;
+    }
+
+    public void setFf_publicitydate(String ff_publicitydate) {
+        this.ff_publicitydate = ff_publicitydate;
+    }
+
+    public String getFf_djfrom() {
+        return ff_djfrom;
+    }
+
+    public void setFf_djfrom(String ff_djfrom) {
+        this.ff_djfrom = ff_djfrom;
+    }
+
+    public String getFf_djto() {
+        return ff_djto;
+    }
+
+    public void setFf_djto(String ff_djto) {
+        this.ff_djto = ff_djto;
+    }
+
+    public String getFf_assignee() {
+        return ff_assignee;
+    }
+
+    public void setFf_assignee(String ff_assignee) {
+        this.ff_assignee = ff_assignee;
+    }
+
+    public String getFf_zxitem() {
+        return ff_zxitem;
+    }
+
+    public void setFf_zxitem(String ff_zxitem) {
+        this.ff_zxitem = ff_zxitem;
+    }
+
+    public String getFf_zxcourt() {
+        return ff_zxcourt;
+    }
+
+    public void setFf_zxcourt(String ff_zxcourt) {
+        this.ff_zxcourt = ff_zxcourt;
+    }
+
+    public String getFf_zxcdws() {
+        return ff_zxcdws;
+    }
+
+    public void setFf_zxcdws(String ff_zxcdws) {
+        this.ff_zxcdws = ff_zxcdws;
+    }
+
+    public String getFf_zxtzws() {
+        return ff_zxtzws;
+    }
+
+    public void setFf_zxtzws(String ff_zxtzws) {
+        this.ff_zxtzws = ff_zxtzws;
+    }
+
+    public String getFf_xxdjfrom() {
+        return ff_xxdjfrom;
+    }
+
+    public void setFf_xxdjfrom(String ff_xxdjfrom) {
+        this.ff_xxdjfrom = ff_xxdjfrom;
+    }
+
+    public String getFf_xxdjto() {
+        return ff_xxdjto;
+    }
+
+    public void setFf_xxdjto(String ff_xxdjto) {
+        this.ff_xxdjto = ff_xxdjto;
+    }
+
+    public String getFf_incompany() {
+        return ff_incompany;
+    }
+
+    public void setFf_incompany(String ff_incompany) {
+        this.ff_incompany = ff_incompany;
+    }
+
+    public String getFf_amount() {
+        return ff_amount;
+    }
+
+    public void setFf_amount(String ff_amount) {
+        this.ff_amount = ff_amount;
+    }
+
+    public String getFf_executed() {
+        return ff_executed;
+    }
+
+    public void setFf_executed(String ff_executed) {
+        this.ff_executed = ff_executed;
+    }
+
+    public String getFf_executeddoc() {
+        return ff_executeddoc;
+    }
+
+    public void setFf_executeddoc(String ff_executeddoc) {
+        this.ff_executeddoc = ff_executeddoc;
+    }
+
+    public String getFf_unfreeze() {
+        return ff_unfreeze;
+    }
+
+    public void setFf_unfreeze(String ff_unfreeze) {
+        this.ff_unfreeze = ff_unfreeze;
+    }
+
+    public String getFf_tyshxycode() {
+        return ff_tyshxycode;
+    }
+
+    public void setFf_tyshxycode(String ff_tyshxycode) {
+        this.ff_tyshxycode = ff_tyshxycode;
+    }
+}

+ 107 - 0
src/main/java/com/uas/entity/Ssgg.java

@@ -0,0 +1,107 @@
+package com.uas.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+
+import javax.persistence.*;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-11-02 14:55
+ * 涉诉公告
+ */
+@Entity
+@Table(name = "FBSSGG")
+public class Ssgg {
+    @Id
+    @SequenceGenerator(name="FBSSGG_SEQ", sequenceName="FBSSGG_SEQ", allocationSize=1)
+    @GeneratedValue(strategy= GenerationType.SEQUENCE, generator="FBSSGG_SEQ")
+    private Long fss_id;
+    @JSONField(name = "entities")
+    private String fss_entities;
+    @JSONField(name = "公告人")
+    private String fss_announcer;
+    @JSONField(name = "公告时间")
+    private String fss_date;
+    @JSONField(name = "公告类型")
+    private String fss_type;
+    @JSONField(name = "当事人")
+    private String fss_party;
+    @JSONField(name = "正文")
+    private String fss_text;
+    @JSONField(name = "统一社会信用编号")
+    private String fss_tyshxycode;
+    private Long fss_fbid;
+
+    public Long getFss_fbid() {
+        return fss_fbid;
+    }
+
+    public void setFss_fbid(Long fss_fbid) {
+        this.fss_fbid = fss_fbid;
+    }
+
+    public Long getFss_id() {
+        return fss_id;
+    }
+
+    public void setFss_id(Long fss_id) {
+        this.fss_id = fss_id;
+    }
+
+    public String getFss_entities() {
+        return fss_entities;
+    }
+
+    public void setFss_entities(String fss_entities) {
+        this.fss_entities = fss_entities;
+    }
+
+    public String getFss_announcer() {
+        return fss_announcer;
+    }
+
+    public void setFss_announcer(String fss_announcer) {
+        this.fss_announcer = fss_announcer;
+    }
+
+    public String getFss_date() {
+        return fss_date;
+    }
+
+    public void setFss_date(String fss_date) {
+        this.fss_date = fss_date;
+    }
+
+    public String getFss_type() {
+        return fss_type;
+    }
+
+    public void setFss_type(String fss_type) {
+        this.fss_type = fss_type;
+    }
+
+    public String getFss_party() {
+        return fss_party;
+    }
+
+    public void setFss_party(String fss_party) {
+        this.fss_party = fss_party;
+    }
+
+    public String getFss_text() {
+        return fss_text;
+    }
+
+    public void setFss_text(String fss_text) {
+        this.fss_text = fss_text;
+    }
+
+    public String getFss_tyshxycode() {
+        return fss_tyshxycode;
+    }
+
+    public void setFss_tyshxycode(String fss_tyshxycode) {
+        this.fss_tyshxycode = fss_tyshxycode;
+    }
+}

+ 136 - 0
src/main/java/com/uas/entity/Sswf.java

@@ -0,0 +1,136 @@
+package com.uas.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+
+import javax.persistence.*;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-11-02 10:15
+ */
+@Entity
+@Table(name = "FBSSWF")
+public class Sswf {
+    @Id
+    @SequenceGenerator(name="FBSSWF_SEQ", sequenceName="FBSSWF_SEQ", allocationSize=1)
+    @GeneratedValue(strategy= GenerationType.SEQUENCE, generator="FBSSWF_SEQ")
+    private Long fs_id;
+    @JSONField(name = "主要违法事实")
+    private String fs_illegal;
+    @JSONField(name = "事件时间")
+    private String fs_eventtime;
+    @JSONField(name = "发布时间")
+    private String fs_releasetime;
+    @JSONField(name = "案件上报期")
+    private String fs_reporttime;
+    @JSONField(name = "案件性质")
+    private String fs_nature;
+    @JSONField(name = "相关法律依据及税务处理处罚情况")
+    private String fs_detail;
+    @JSONField(name = "纳税人名称")
+    private String fs_taxpayername;
+    @JSONField(name = "纳税人识别码")
+    private String fs_taxpayercode;
+    @JSONField(name = "组织机构代码")
+    private String fs_organizationcode;
+    @JSONField(name = "统一社会信用编号")
+    private String fs_tyshxycode;
+    private Long fs_fbid;
+
+    public Long getFs_fbid() {
+        return fs_fbid;
+    }
+
+    public void setFs_fbid(Long fs_fbid) {
+        this.fs_fbid = fs_fbid;
+    }
+
+    public Long getFs_id() {
+        return fs_id;
+    }
+
+    public void setFs_id(Long fs_id) {
+        this.fs_id = fs_id;
+    }
+
+    public String getFs_illegal() {
+        return fs_illegal;
+    }
+
+    public void setFs_illegal(String fs_illegal) {
+        this.fs_illegal = fs_illegal;
+    }
+
+    public String getFs_eventtime() {
+        return fs_eventtime;
+    }
+
+    public void setFs_eventtime(String fs_eventtime) {
+        this.fs_eventtime = fs_eventtime;
+    }
+
+    public String getFs_releasetime() {
+        return fs_releasetime;
+    }
+
+    public void setFs_releasetime(String fs_releasetime) {
+        this.fs_releasetime = fs_releasetime;
+    }
+
+    public String getFs_reporttime() {
+        return fs_reporttime;
+    }
+
+    public void setFs_reporttime(String fs_reporttime) {
+        this.fs_reporttime = fs_reporttime;
+    }
+
+    public String getFs_nature() {
+        return fs_nature;
+    }
+
+    public void setFs_nature(String fs_nature) {
+        this.fs_nature = fs_nature;
+    }
+
+    public String getFs_detail() {
+        return fs_detail;
+    }
+
+    public void setFs_detail(String fs_detail) {
+        this.fs_detail = fs_detail;
+    }
+
+    public String getFs_taxpayername() {
+        return fs_taxpayername;
+    }
+
+    public void setFs_taxpayername(String fs_taxpayername) {
+        this.fs_taxpayername = fs_taxpayername;
+    }
+
+    public String getFs_taxpayercode() {
+        return fs_taxpayercode;
+    }
+
+    public void setFs_taxpayercode(String fs_taxpayercode) {
+        this.fs_taxpayercode = fs_taxpayercode;
+    }
+
+    public String getFs_organizationcode() {
+        return fs_organizationcode;
+    }
+
+    public void setFs_organizationcode(String fs_organizationcode) {
+        this.fs_organizationcode = fs_organizationcode;
+    }
+
+    public String getFs_tyshxycode() {
+        return fs_tyshxycode;
+    }
+
+    public void setFs_tyshxycode(String fs_tyshxycode) {
+        this.fs_tyshxycode = fs_tyshxycode;
+    }
+}

+ 196 - 0
src/main/java/com/uas/entity/Sxbzxr.java

@@ -0,0 +1,196 @@
+package com.uas.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+
+import javax.persistence.*;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-10-29 18:33
+ */
+@Entity
+@Table(name = "FBSXBZXR")
+public class Sxbzxr {
+    @Id
+    @SequenceGenerator(name = "FBSXBZXR_SEQ",sequenceName = "FBSXBZXR_SEQ",allocationSize = 1)
+    @GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "FBSXBZXR_SEQ")
+    private Long fsx_id;
+    @JSONField(name = "做出执行依据单位")
+    private String fsx_zczxyjdw;
+    @JSONField(name = "发布时间")
+    private String fsx_releasetime;
+    @JSONField(name = "失信被执行人行为具体情形")
+    private String fsx_sxbzxr;
+    @JSONField(name = "已履行")
+    private String fsx_executed;
+    @JSONField(name = "年龄")
+    private int fsx_age;
+    @JSONField(name = "执行依据文号")
+    private String fsx_docno;
+    @JSONField(name = "执行法院")
+    private String fsx_court;
+    @JSONField(name = "未履行")
+    private String fsx_unfulfilled;
+    @JSONField(name = "案号")
+    private String fsx_casenumber;
+    @JSONField(name = "法定代表人或者负责人姓名")
+    private String fsx_principal;
+    @JSONField(name = "生效法律文书确定的义务")
+    private String fsx_obligation;
+    @JSONField(name = "省份")
+    private String fsx_province;
+    @JSONField(name = "立案时间")
+    private String fsx_filingtime;
+    @JSONField(name = "被执行人姓名/名称")
+    private String fsx_bzxr;
+    @JSONField(name = "被执行人的履行情况")
+    private String fsx_performance;
+    @JSONField(name = "统一社会信用编号")
+    private String fsx_tyshxycode;
+    private Long fsx_fbid;
+
+    public Long getFsx_fbid() {
+        return fsx_fbid;
+    }
+
+    public void setFsx_fbid(Long fsx_fbid) {
+        this.fsx_fbid = fsx_fbid;
+    }
+
+    public Long getFsx_id() {
+        return fsx_id;
+    }
+
+    public void setFsx_id(Long fsx_id) {
+        this.fsx_id = fsx_id;
+    }
+
+    public String getFsx_zczxyjdw() {
+        return fsx_zczxyjdw;
+    }
+
+    public void setFsx_zczxyjdw(String fsx_zczxyjdw) {
+        this.fsx_zczxyjdw = fsx_zczxyjdw;
+    }
+
+    public String getFsx_releasetime() {
+        return fsx_releasetime;
+    }
+
+    public void setFsx_releasetime(String fsx_releasetime) {
+        this.fsx_releasetime = fsx_releasetime;
+    }
+
+    public String getFsx_sxbzxr() {
+        return fsx_sxbzxr;
+    }
+
+    public void setFsx_sxbzxr(String fsx_sxbzxr) {
+        this.fsx_sxbzxr = fsx_sxbzxr;
+    }
+
+    public String getFsx_executed() {
+        return fsx_executed;
+    }
+
+    public void setFsx_executed(String fsx_executed) {
+        this.fsx_executed = fsx_executed;
+    }
+
+    public int getFsx_age() {
+        return fsx_age;
+    }
+
+    public void setFsx_age(int fsx_age) {
+        this.fsx_age = fsx_age;
+    }
+
+    public String getFsx_docno() {
+        return fsx_docno;
+    }
+
+    public void setFsx_docno(String fsx_docno) {
+        this.fsx_docno = fsx_docno;
+    }
+
+    public String getFsx_court() {
+        return fsx_court;
+    }
+
+    public void setFsx_court(String fsx_court) {
+        this.fsx_court = fsx_court;
+    }
+
+    public String getFsx_unfulfilled() {
+        return fsx_unfulfilled;
+    }
+
+    public void setFsx_unfulfilled(String fsx_unfulfilled) {
+        this.fsx_unfulfilled = fsx_unfulfilled;
+    }
+
+    public String getFsx_casenumber() {
+        return fsx_casenumber;
+    }
+
+    public void setFsx_casenumber(String fsx_casenumber) {
+        this.fsx_casenumber = fsx_casenumber;
+    }
+
+    public String getFsx_principal() {
+        return fsx_principal;
+    }
+
+    public void setFsx_principal(String fsx_principal) {
+        this.fsx_principal = fsx_principal;
+    }
+
+    public String getFsx_obligation() {
+        return fsx_obligation;
+    }
+
+    public void setFsx_obligation(String fsx_obligation) {
+        this.fsx_obligation = fsx_obligation;
+    }
+
+    public String getFsx_province() {
+        return fsx_province;
+    }
+
+    public void setFsx_province(String fsx_province) {
+        this.fsx_province = fsx_province;
+    }
+
+    public String getFsx_filingtime() {
+        return fsx_filingtime;
+    }
+
+    public void setFsx_filingtime(String fsx_filingtime) {
+        this.fsx_filingtime = fsx_filingtime;
+    }
+
+    public String getFsx_bzxr() {
+        return fsx_bzxr;
+    }
+
+    public void setFsx_bzxr(String fsx_bzxr) {
+        this.fsx_bzxr = fsx_bzxr;
+    }
+
+    public String getFsx_performance() {
+        return fsx_performance;
+    }
+
+    public void setFsx_performance(String fsx_performance) {
+        this.fsx_performance = fsx_performance;
+    }
+
+    public String getFsx_tyshxycode() {
+        return fsx_tyshxycode;
+    }
+
+    public void setFsx_tyshxycode(String fsx_tyshxycode) {
+        this.fsx_tyshxycode = fsx_tyshxycode;
+    }
+}

+ 58 - 0
src/main/java/com/uas/exception/ExceptionHandlerAdvice.java

@@ -0,0 +1,58 @@
+package com.uas.exception;
+
+import com.uas.entity.ErrorMsg;
+import org.apache.log4j.Logger;
+import org.springframework.http.HttpStatus;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.ResponseStatus;
+
+import javax.servlet.http.HttpServletRequest;
+
+@ControllerAdvice
+public class ExceptionHandlerAdvice {
+
+	private final static Logger logger = Logger.getLogger(ExceptionHandlerAdvice.class);
+	
+	/**
+	 * 处理未被发现处理的运行时抛出异常
+	 * 
+	 * @param ex
+	 * @return
+	 */
+	@ExceptionHandler(RuntimeException.class)
+	@ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR)
+	@ResponseBody
+	public ModelMap handleUnexpectedServerError(RuntimeException ex, HttpServletRequest request) {
+		logger.error("error",ex);
+
+		ModelMap map = new ModelMap();
+		ex.printStackTrace();
+		map.put("errCode", -1);
+		map.put("errMsg", "server error");
+		map.put("errDesc",ex.getMessage());
+		return map;
+	}
+	
+	/**
+	 * 处理通过BaseUtil.showError抛出的异常
+	 * 
+	 * @param ex
+	 * @return
+	 */
+	@ExceptionHandler(SystemException.class)
+	@ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR)
+	@ResponseBody
+	public ModelMap handleSystemError(SystemException ex, HttpServletRequest request) {
+		logger.error("error",ex);
+
+		ModelMap map = new ModelMap();
+		ErrorMsg errorMsg = ex.getErrorMsg();
+		map.put("errCode", errorMsg.getErrCode());
+		map.put("errMsg", errorMsg.getErrMsg());
+		map.put("errDesc",errorMsg.getErrDesc());
+		return map;
+	}
+}

+ 48 - 0
src/main/java/com/uas/exception/SystemException.java

@@ -0,0 +1,48 @@
+package com.uas.exception;
+
+import com.uas.entity.ErrorMsg;
+
+/**
+ * 系统程序执行异常
+ * 
+ * @author yingp
+ * 
+ */
+public class SystemException extends RuntimeException {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 4218425517031998401L;
+	
+	private ErrorMsg errorMsg;
+
+	public SystemException() {
+	}
+
+	public SystemException(String paramString) {
+		super(paramString);
+	}
+	
+	public SystemException(ErrorMsg errorMsg) {
+		super(errorMsg.getErrDesc());
+		this.errorMsg = errorMsg;
+	}
+
+	public SystemException(ErrorMsg errorMsg, Throwable paramThrowable) {
+		super(errorMsg.getErrDesc(), paramThrowable);
+		this.errorMsg = errorMsg;
+	}
+
+	public SystemException(Throwable paramThrowable) {
+		super(paramThrowable);
+	}
+
+	public ErrorMsg getErrorMsg() {
+		return errorMsg;
+	}
+
+	public void setErrorMsg(ErrorMsg errorMsg) {
+		this.errorMsg = errorMsg;
+	}
+}

+ 54 - 0
src/main/java/com/uas/service/CustomerService.java

@@ -0,0 +1,54 @@
+package com.uas.service;
+
+
+import com.uas.entity.Group;
+
+import java.util.List;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-10-27 9:00
+ */
+public interface CustomerService {
+    /**
+     * 获取所有群组资料
+     * @return
+     */
+   /* List<Group> getGroupAll();*/
+
+    List<String> getFollowingByGroup ();
+
+    void saveBusiness(String company_id);
+
+    /*void saveBusinessChange(String company_id);
+
+    void saveInvestor(String company_id);
+
+    void saveMember(String company_id);
+
+    void saveKtgg(String company_id);
+
+    void saveCpws(String company_id);
+
+    void saveExecutedPerson(String company_id);
+
+    void saveSxbzxr(String company_id);
+
+    void saveJyyc(String company_id);
+
+    void saveSswf(String company_id);
+
+    void saveQsjl(String company_id);
+
+    void saveDcdy(String company_id);
+
+    void saveGqcz(String company_id);
+
+    void saveSfxz(String company_id);
+
+    void saveSsgg(String company_id);*/
+
+     void deleteAll();
+
+}

+ 741 - 0
src/main/java/com/uas/service/Impl/CustomerServiceImpl.java

@@ -0,0 +1,741 @@
+package com.uas.service.Impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.uas.core.support.GetProperties;
+import com.uas.dao.*;
+import com.uas.entity.*;
+import com.uas.service.CustomerService;
+import com.uas.utils.HttpUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-10-27 9:03
+ */
+@Service
+public class CustomerServiceImpl implements CustomerService {
+
+    private static Map<String,String> httpConfig = GetProperties.getAllProperty();
+    private static String url = httpConfig.get("URL");
+    private static String apikey = httpConfig.get("APIKEY");
+    private static String company = httpConfig.get("company");
+    private final Logger logger = LoggerFactory.getLogger(getClass());
+    private final static int size=50;
+    private final static HashMap hender = new HashMap() {{
+        put(httpConfig.get("henderKey"), httpConfig.get("henderValue"));
+    }};
+    private final static Map<String, String> params = new HashMap<String, String>(){{
+        put("apikey",apikey);
+        put("from",Integer.toString(0));
+        put("size",Integer.toString(size));
+    }};
+
+
+    @Autowired
+    private BusinessDao businessDao;
+    @Autowired
+    private BusinessDetailDao businessDetailDao;
+    @Autowired
+    private BusinessChangeDao businessChangeDao;
+    @Autowired
+    private InvestorDao investorDao;
+    @Autowired
+    private InvestorRJDetailDao investorRJDetailDao;
+    @Autowired
+    private InvestorSJDetailDao investorSJDetailDao;
+    @Autowired
+    private MemberDao memberDao;
+    @Autowired
+    private KtggDao ktggDao;
+    @Autowired
+    private KtggDetailDao ktggDetailDao;
+    @Autowired
+    private CpwsDao cpwsDao;
+    @Autowired
+    private CpwsDetailDao cpwsDetailDao;
+    @Autowired
+    private ExecutedPersonDao executedPersonDao;
+    @Autowired
+    private SxbzxrDao sxbzxrDao;
+    @Autowired
+    private JyycDao jyycDao;
+    @Autowired
+    private SswfDao sswfDao;
+    @Autowired
+    private QsjlDao qsjlDao;
+    @Autowired
+    private DcdyDao dcdyDao;
+    @Autowired
+    private DcdyDetailDao dcdyDetailDao;
+    @Autowired
+    private GqczDao gqczDao;
+    @Autowired
+    private SfxzDao sfxzDao;
+    @Autowired
+    private SsggDao ssggDao;
+    @Autowired
+    private DanBaoDao danBaoDao;
+
+    /**
+     * 获取所有分组
+     * @return
+     */
+    private List<Group> getGroupAll(){
+        Map<String, String> param = new HashMap<>();
+        param.put("apikey",apikey);
+        String group = httpResponse(url + httpConfig.get("group"), hender, param);
+        if (group != null && !"[]".equals(group)) {
+            return JSON.parseArray(group, Group.class);
+        }
+        return null;
+    }
+
+    /**
+     * 获取所有客户统一信用编码
+     * @return
+     */
+    @Override
+    public List<String> getFollowingByGroup() {
+        Map<String, String> param = new HashMap<>();
+        param.put("apikey",apikey);
+        param.put("from",Integer.toString(0));
+        param.put("size",Integer.toString(1000));
+        List<Group> groupAll = getGroupAll();
+        if (groupAll!=null){
+            List<String> list = new ArrayList<>();
+            for (Group group:groupAll) {
+                param.put("group_id",Long.toString(group.getId()));
+                JSONArray following = httpResponseBySize(url + httpConfig.get("following"), apikey, 1000, hender, param);
+                if (following!=null){
+                    List<String> strings = JSON.parseArray(following.toString(), String.class);
+                    list.addAll(strings);
+                }
+            }
+            return list;
+        }
+        return null;
+    }
+
+
+    /**
+     * 保存工商资料
+     * @param company_id
+     */
+    @Async("taskExecutor")
+    @Override
+    public void saveBusiness(String company_id) {
+        Map<String, String> param = new HashMap<>();
+        param.put("apikey",apikey);
+        String s = httpResponse(url + company + "/" + company_id, hender, param);
+        if (s!=null){
+            Business business = JSON.parseObject(s, Business.class);
+            business.setFb_evaluation(stringArraytoString(business.getFb_evaluation()));
+            business.setFb_oldname(stringArraytoString(business.getFb_oldname()));
+            Business save = businessDao.save(business);
+            Long fb_id = save.getFb_id();
+            JSONObject jsonObject = JSONObject.parseObject(s);
+            Object objzcd = jsonObject.get("注册地");
+            if (objzcd!=null) {
+                BusinessDetail zcd = JSON.parseObject(objzcd.toString(), BusinessDetail.class);
+                zcd.setFbd_fbid(fb_id);
+                zcd.setFbd_type("注册地");
+                zcd.setFbd_detno(1);
+                businessDetailDao.save(zcd);
+            }
+            Object objjyd = jsonObject.get("经营地");
+            if (objjyd!=null) {
+                BusinessDetail zcd = JSON.parseObject(objjyd.toString(), BusinessDetail.class);
+                zcd.setFbd_fbid(fb_id);
+                zcd.setFbd_type("经营地");
+                zcd.setFbd_detno(1);
+                businessDetailDao.save(zcd);
+            }
+            Object objgp = jsonObject.get("股票");
+            if (objgp!=null&&!"[]".equals(objgp.toString())) {
+                List<BusinessDetail> gps = JSON.parseArray(objgp.toString(),
+                        BusinessDetail.class);
+                int detno=1;
+                for (BusinessDetail gp:gps) {
+                    gp.setFbd_fbid(fb_id);
+                    gp.setFbd_type("股票");
+                    gp.setFbd_detno(detno);
+                    detno=detno+1;
+                }
+                businessDetailDao.save(gps);
+            }
+            saveBusinessChange(company_id,fb_id);
+            saveInvestor(company_id,fb_id);
+            saveMember(company_id,fb_id);
+            saveKtgg(company_id,fb_id);
+            saveCpws(company_id,fb_id);
+            saveExecutedPerson(company_id,fb_id);
+            saveSxbzxr(company_id,fb_id);
+            saveJyyc(company_id,fb_id);
+            saveSswf(company_id,fb_id);
+            saveQsjl(company_id,fb_id);
+            saveDcdy(company_id,fb_id);
+            saveGqcz(company_id,fb_id);
+            saveSfxz(company_id,fb_id);
+            saveSsgg(company_id,fb_id);
+            saveDanbao(company_id,fb_id);
+        }
+    }
+
+    /**
+     * 保存工商变更
+     * @param company_id
+     */
+   /*@Async("taskExecutor")*/
+    private void saveBusinessChange(String company_id,Long id) {
+        JSONArray gsbg = httpResponseBySize(url + company + "/" + company_id + "/" + httpConfig.get("gsbg"),
+                apikey, size, hender, params);
+        if(gsbg!=null) {
+            List<BusinessChange> businessChanges = JSON.parseArray(gsbg.toString(), BusinessChange.class);
+            if (businessChanges != null && businessChanges.size() > 0) {
+                int detno = 1;
+                for (BusinessChange fbc : businessChanges) {
+                    fbc.setFbc_detno(detno);
+                    fbc.setFbc_tyshxycode(company_id);
+                    fbc.setFbc_fbid(id);
+                    detno = detno + 1;
+                }
+                businessChangeDao.save(businessChanges);
+            }
+        }
+    }
+
+    /**
+     * 保存工商登记股东信息
+     * @param company_id
+     */
+    private void saveInvestor(String company_id,Long id) {
+        JSONArray objects = httpResponseBySize(url + company + "/" + company_id + "/" + httpConfig.get("investor")
+                , apikey, size, hender, params);
+        if (objects!=null) {
+            int det=1;
+            for (Object obj:objects) {
+                JSONObject jsonObject = JSON.parseObject(obj.toString());
+                Investor investor = JSON.parseObject(obj.toString(), Investor.class);
+                investor.setFi_detno(det);
+                investor.setFi_tyshxycode(company_id);
+                investor.setFi_fbid(id);
+                Investor save = investorDao.save(investor);
+                det=det+1;
+                Long fi_id = save.getFi_id();
+                Object sjmx = jsonObject.get("实缴明细");
+                if (sjmx!=null&&!"[]".equals(sjmx.toString())) {
+                    List<InvestorSJDetail> sjDetails = JSON.parseArray(sjmx.toString(),
+                            InvestorSJDetail.class);
+                    int detno=1;
+                    for (InvestorSJDetail investorSJDetail:sjDetails) {
+                        investorSJDetail.setFid_detno(detno);
+                        investorSJDetail.setFid_fiid(fi_id);
+                        investorSJDetail.setFid_type("实缴明细");
+                        detno=detno+1;
+                    }
+                    investorSJDetailDao.save(sjDetails);
+                }
+                Object rjmx = jsonObject.get("认缴明细");
+                if (rjmx!=null&&!"[]".equals(rjmx.toString())) {
+                    List<InvestorRJDetail> rjDetails = JSON.parseArray(rjmx.toString(),InvestorRJDetail.class);
+                    int no=1;
+                    for (InvestorRJDetail investorRJDetail:rjDetails) {
+                        investorRJDetail.setFid_detno(no);
+                        investorRJDetail.setFid_fiid(fi_id);
+                        investorRJDetail.setFid_type("认缴明细");
+                        no=no+1;
+                    }
+                    investorRJDetailDao.save(rjDetails);
+                }
+            }
+        }
+    }
+
+    /**
+     * 保存主要成员
+     * @param company_id
+     */
+    private void saveMember(String company_id,Long id) {
+        JSONArray jsonArray = httpResponseBySize(url + company + "/" + company_id + "/" + httpConfig.get("member")
+                , apikey, size, hender, params);
+        if (jsonArray!=null) {
+                List<Member> members = JSON.parseArray(jsonArray.toString(), Member.class);
+                for (Member member:members) {
+                    member.setFm_tyshxycode(company_id);
+                    member.setFm_fbid(id);
+                }
+                memberDao.save(members);
+        }
+    }
+
+    /**
+     * 保存开庭公告
+     * @param company_id
+     */
+    private void saveKtgg(String company_id,Long id) {
+        JSONArray jsonArray = httpResponseBySize(url + company + "/" + company_id + "/" + httpConfig.get("ktgg")
+                , apikey, size, hender, params);
+        if (jsonArray!=null) {
+            int detno=1;
+            for (Object obj:jsonArray) {
+                JSONObject jsonObject = JSON.parseObject(obj.toString());
+                Ktgg ktgg = JSON.parseObject(obj.toString(), Ktgg.class);
+                ktgg.setFk_tyshxycode(company_id);
+                ktgg.setFk_fbid(id);
+                ktgg.setFk_entities(stringArraytoString(ktgg.getFk_entities()));
+                ktgg.setFk_otherroles(stringArraytoString(ktgg.getFk_otherroles()));
+                ktgg.setFk_plaintif(stringArraytoString(ktgg.getFk_plaintif()));
+                ktgg.setFk_party(stringArraytoString(ktgg.getFk_party()));
+                ktgg.setFk_defendant(stringArraytoString(ktgg.getFk_defendant()));
+                ktgg.setFk_detno(detno);
+                Ktgg save = ktggDao.save(ktgg);
+                detno=detno+1;
+                Long fk_id = save.getFk_id();
+                Object dsrDetail = jsonObject.get("当事人详情");
+                if (dsrDetail != null && !"[]".equals(dsrDetail.toString())) {
+                    List<KtggDetail> ktggDetails = JSON.parseArray(dsrDetail.toString(), KtggDetail.class);
+                    int det=1;
+                    for (KtggDetail ktggdetail:ktggDetails) {
+                        ktggdetail.setFkd_fkid(fk_id);
+                        ktggdetail.setFkd_detno(det);
+                        ktggdetail.setFkd_type("当事人详情");
+                        ktggdetail.setFkd_otherroles(stringArraytoString(ktggdetail.getFkd_otherroles()));
+                        det=det+1;
+                    }
+                    ktggDetailDao.save(ktggDetails);
+                }
+                Object ssdq = jsonObject.get("所属地区");
+                if (ssdq!=null){
+                    KtggDetail ktggDetail = JSON.parseObject(ssdq.toString(), KtggDetail.class);
+                    ktggDetail.setFkd_fkid(fk_id);
+                    ktggDetail.setFkd_type("所属地区");
+                    ktggDetailDao.save(ktggDetail);
+                }
+
+            }
+        }
+    }
+
+    /**
+     * 保存裁判文书
+     * @param company_id
+     */
+   private void saveCpws(String company_id,Long id) {
+        JSONArray jsonArray = httpResponseBySize(url + company + "/" + company_id + "/" + httpConfig.get("cpws"), apikey, size, hender, params);
+        if (jsonArray!=null) {
+            int detno=1;
+            for (Object obj:jsonArray) {
+                JSONObject jsonObject = JSON.parseObject(obj.toString());
+                Cpws cpws = JSON.parseObject(obj.toString(), Cpws.class);
+                cpws.setFc_tyshxycode(company_id);
+                cpws.setFc_detno(detno);
+                cpws.setFc_fbid(id);
+                Cpws save = cpwsDao.save(cpws);
+                detno=detno+1;
+                Long fc_id = save.getFc_id();
+                Object ssdq = jsonObject.get("所属地区");
+                if (ssdq!=null){
+                    CpwsDetail cpwsDetail = JSON.parseObject(ssdq.toString(), CpwsDetail.class);
+                    cpwsDetail.setFcd_fcid(fc_id);
+                    cpwsDetail.setFcd_type("所属地区");
+                    cpwsDetail.setFcd_detno(1);
+                    cpwsDetailDao.save(cpwsDetail);
+                }
+                Object dls = jsonObject.get("段落");
+                if (dls != null && !"[]".equals(dls.toString())) {
+                    List<CpwsDetail> cpwsDetails = JSON.parseArray(dls.toString(), CpwsDetail.class);
+                    int det=1;
+                    for (CpwsDetail cpwsDetail:cpwsDetails) {
+                        cpwsDetail.setFcd_fcid(fc_id);
+                        cpwsDetail.setFcd_type("段落");
+                        cpwsDetail.setFcd_detno(det);
+                        det=det+1;
+                    }
+                    cpwsDetailDao.save(cpwsDetails);
+                }
+                Object dsrs = jsonObject.get("当事人");
+                if (dsrs != null && !"[]".equals(dsrs.toString())) {
+                    List<CpwsDetail> cpwsDetails = JSON.parseArray(dsrs.toString(),CpwsDetail.class);
+                    int det=1;
+                    for (CpwsDetail cpwsDetail:cpwsDetails) {
+                        cpwsDetail.setFcd_fcid(fc_id);
+                        cpwsDetail.setFcd_type("当事人");
+                        cpwsDetail.setFcd_detno(det);
+                        cpwsDetail.setFcd_otherroles(stringArraytoString(cpwsDetail.getFcd_otherroles()));
+                        cpwsDetail.setFcd_oldname(stringArraytoString(cpwsDetail.getFcd_oldname()));
+                        cpwsDetail.setFcd_role(stringArraytoString(cpwsDetail.getFcd_role()));
+                        cpwsDetail.setFcd_legalrepresentative(stringArraytoString(cpwsDetail.getFcd_legalrepresentative()));
+                        det=det+1;
+                    }
+                    cpwsDetailDao.save(cpwsDetails);
+                }
+                Object cpjes = jsonObject.get("判决金额");
+                if (cpjes != null && !"[]".equals(cpjes.toString())) {
+                    List<CpwsDetail> cpwsDetails = JSON.parseArray(cpjes.toString(),CpwsDetail.class);
+                    int det=1;
+                    for (CpwsDetail cpwsDetail:cpwsDetails) {
+                        cpwsDetail.setFcd_fcid(fc_id);
+                        cpwsDetail.setFcd_type("判决金额");
+                        cpwsDetail.setFcd_detno(det);
+                        cpwsDetail.setFcd_payer(stringArraytoString(cpwsDetail.getFcd_payer()));
+                        det=det+1;
+                    }
+                    cpwsDetailDao.save(cpwsDetails);
+                }
+            }
+        }
+    }
+
+    /**
+     * 保存被执行人
+     * @param company_id
+     */
+    private void saveExecutedPerson(String company_id,Long id) {
+        JSONArray zhixing = httpResponseBySize(url + company + "/" + company_id + "/" + httpConfig.get("zhixing"), apikey, size, hender, params);
+        if (zhixing!=null) {
+            List<ExecutedPerson> executedPersonList = JSON.parseArray(zhixing.toString(), ExecutedPerson.class);
+            for (ExecutedPerson executedPerson:executedPersonList) {
+               executedPerson.setFep_entities(stringArraytoString(executedPerson.getFep_entities()));
+               executedPerson.setFep_tyshxycode(company_id);
+               executedPerson.setFep_fbid(id);
+            }
+           executedPersonDao.save(executedPersonList);
+        }
+    }
+
+    /**
+     * 保存失信被执行人
+     * @param company_id
+     */
+    private void saveSxbzxr(String company_id,Long id) {
+        JSONArray shixin = httpResponseBySize(url + company + "/" + company_id + "/" + httpConfig.get("shixin"), apikey, size, hender, params);
+        if (shixin!=null) {
+            List<Sxbzxr> sxbzxrs = JSON.parseArray(shixin.toString(), Sxbzxr.class);
+            for (Sxbzxr sxbzxr:sxbzxrs) {
+                sxbzxr.setFsx_tyshxycode(company_id);
+                sxbzxr.setFsx_fbid(id);
+            }
+            sxbzxrDao.save(sxbzxrs);
+        }
+    }
+
+    /**
+     * 保存经营异常
+     * @param company_id
+     */
+    private void saveJyyc(String company_id,Long id) {
+        JSONArray jsonArray = httpResponseBySize(url + company + "/" + company_id + "/" + httpConfig.get("jyyc"),
+                apikey, size, hender, params);
+        if (jsonArray!=null) {
+            List<Jyyc> jyycs = JSON.parseArray(jsonArray.toString(), Jyyc.class);
+            for (Jyyc jyyc:jyycs) {
+                jyyc.setFj_tyshxycode(company_id);
+                jyyc.setFj_fbid(id);
+            }
+            jyycDao.save(jyycs);
+        }
+    }
+
+    /**
+     * 保存重大税收违法
+     * @param company_id
+     */
+    private void saveSswf(String company_id,Long id) {
+        JSONArray jsonArray = httpResponseBySize(url + company + "/" + company_id + "/" + httpConfig.get("sswf"),
+                apikey, size, hender, params);
+        if (jsonArray!=null) {
+            List<Sswf> sswfs = JSON.parseArray(jsonArray.toString(), Sswf.class);
+            for (Sswf sswf:sswfs) {
+                sswf.setFs_taxpayercode(company_id);
+                sswf.setFs_fbid(id);
+            }
+            sswfDao.save(sswfs);
+        }
+    }
+
+    /**
+     * 保存催缴/欠税
+     * @param company_id
+     */
+    private void saveQsjl(String company_id,Long id) {
+        JSONArray jsonArray = httpResponseBySize(url + company + "/" + company_id + "/" + httpConfig.get("qsjl"),
+                apikey, size, hender, params);
+        if (jsonArray!=null) {
+            List<Qsjl> qsjls = JSON.parseArray(jsonArray.toString(), Qsjl.class);
+            for (Qsjl qsjl:qsjls) {
+                qsjl.setFq_tyshxycode(company_id);
+                qsjl.setFq_fbid(id);
+            }
+            qsjlDao.save(qsjls);
+        }
+    }
+
+    /**
+     * 保存动产抵押
+     * @param company_id
+     */
+    private void saveDcdy(String company_id,Long id) {
+        JSONArray jsonArray = httpResponseBySize(url + company + "/" + company_id + "/" + httpConfig.get("dcdy"),
+                apikey, size, hender, params);
+        if (jsonArray!=null) {
+            for (Object obj:jsonArray) {
+                JSONObject jsonObject = JSON.parseObject(obj.toString());
+                Dcdy dcdy = JSON.parseObject(obj.toString(), Dcdy.class);
+                dcdy.setFd_tyshxycode(company_id);
+                dcdy.setFd_fbid(id);
+                Dcdy save = dcdyDao.save(dcdy);
+                Long fd_id = save.getFd_id();
+                Object dsrs = jsonObject.get("当事人");
+                if (dsrs != null && !"[]".equals(dsrs.toString())) {
+                    List<DcdyDetail> dcdyDetails = JSON.parseArray(dsrs.toString(), DcdyDetail.class);
+                    for (DcdyDetail dsr:dcdyDetails) {
+                        dsr.setFdd_fdid(fd_id);
+                        dsr.setFdd_type("当事人");
+                    }
+                    dcdyDetailDao.save(dcdyDetails);
+                }
+                Object dywgks = jsonObject.get("抵押物概况");
+                if (dywgks != null && !"[]".equals(dywgks.toString())) {
+                    List<DcdyDetail> dcdyDetails = JSON.parseArray(dywgks.toString(), DcdyDetail.class);
+                    for (DcdyDetail dywgk:dcdyDetails) {
+                        dywgk.setFdd_fdid(fd_id);
+                        dywgk.setFdd_type("抵押物概况");
+                    }
+                    dcdyDetailDao.save(dcdyDetails);
+                }
+            }
+        }
+    }
+
+    /**
+     * 保存股权出质
+     * @param company_id
+     */
+    private void saveGqcz(String company_id,Long id) {
+        JSONArray jsonArray = httpResponseBySize(url + company + "/" + company_id + "/" + httpConfig.get("gqcz"),
+                apikey, size, hender, params);
+        if (jsonArray!=null) {
+            List<Gqcz> gqczs = JSON.parseArray(jsonArray.toString(), Gqcz.class);
+            for (Gqcz gqcz:gqczs) {
+                gqcz.setFg_tyshxycode(company_id);
+                gqcz.setFg_fbid(id);
+            }
+            gqczDao.save(gqczs);
+        }
+    }
+
+    /**
+     * 保存司法协助
+     * @param company_id
+     */
+    private void saveSfxz(String company_id,Long id) {
+        JSONArray jsonArray = httpResponseBySize(url + company + "/" + company_id + "/" + httpConfig.get("sfxz"),
+                apikey, size, hender, params);
+        if (jsonArray!=null) {
+            List<Sfxz> sfxzs = JSON.parseArray(jsonArray.toString(), Sfxz.class);
+            for (Sfxz sfxz:sfxzs) {
+                sfxz.setFf_tyshxycode(company_id);
+                sfxz.setFf_fbid(id);
+            }
+            sfxzDao.save(sfxzs);
+        }
+    }
+
+    /**
+     * 保存涉诉公告
+     * @param company_id
+     */
+    private void saveSsgg(String company_id,Long id) {
+        JSONArray jsonArray = httpResponseBySize(url + company + "/" + company_id + "/" + httpConfig.get("ssgg"),
+                apikey, size, hender, params);
+        if (jsonArray!=null) {
+            List<Ssgg> ssggs = JSON.parseArray(jsonArray.toString(), Ssgg.class);
+            for (Ssgg ssgg:ssggs) {
+                ssgg.setFss_entities(stringArraytoString(ssgg.getFss_entities()));
+                ssgg.setFss_party(stringArraytoString(ssgg.getFss_party()));
+                ssgg.setFss_tyshxycode(company_id);
+                ssgg.setFss_fbid(id);
+            }
+            ssggDao.save(ssggs);
+        }
+    }
+
+    /**
+     * 保存担保
+     * @param company_id
+     */
+    private void saveDanbao(String company_id,Long id) {
+        JSONArray jsonArray = httpResponseBySize(url + company + "/" + company_id + "/" + httpConfig.get("danbao"),
+                apikey, size, hender, params);
+        if (jsonArray!=null) {
+            List<DanBao> danBaos = JSON.parseArray(jsonArray.toString(), DanBao.class);
+            int detno=1;
+            for (DanBao danBao:danBaos) {
+                danBao.setFd_party(stringArraytoString(danBao.getFd_party()));
+                danBao.setFd_guarantor(stringArraytoString(danBao.getFd_guarantor()));
+                danBao.setFd_dbmethod(stringArraytoString(danBao.getFd_dbmethod()));
+                danBao.setFd_bparty(stringArraytoString(danBao.getFd_bparty()));
+                danBao.setFd_detail(stringArraytoString(danBao.getFd_detail()));
+                danBao.setFd_tyshxycode(company_id);
+                danBao.setFd_fbid(id);
+                danBao.setFd_detno(detno);
+                detno=detno+1;
+            }
+            danBaoDao.save(danBaos);
+        }
+    }
+
+
+    /**
+     * 清除所有相关表中数据
+     */
+    @Override
+    public void deleteAll() {
+        //清除工商资料明细
+        businessDetailDao.deleteAll();
+        //清除工商资料
+        businessDao.deleteAll();
+        //清除工商变更
+        businessChangeDao.deleteAll();
+        //清除工商登记股东信息明细
+        investorRJDetailDao.deleteAll();
+        //清除工商登记股东信息
+        investorDao.deleteAll();
+        //清除主要成员
+        memberDao.deleteAll();
+        //清除开庭公告明细
+        ktggDetailDao.deleteAll();
+        //清除开庭公告
+        ktggDao.deleteAll();
+        //清除裁判文书明细
+        cpwsDetailDao.deleteAll();
+        //清除裁判文书
+        cpwsDao.deleteAll();
+        //清除被执行人
+        executedPersonDao.deleteAll();
+        //清除失信被执行人
+        sxbzxrDao.deleteAll();
+        //清除经营异常
+        jyycDao.deleteAll();
+        //清除重大税收违法
+        sswfDao.deleteAll();
+        //清除催缴/欠税
+        qsjlDao.deleteAll();
+        //清除动产抵押明细
+        dcdyDetailDao.deleteAll();
+        //清除动产抵押
+        dcdyDao.deleteAll();
+        //清除股权出质
+        gqczDao.deleteAll();
+        //清除司法协助
+        sfxzDao.deleteAll();
+        //清除涉诉公告
+        ssggDao.deleteAll();
+        danBaoDao.deleteAll();
+
+    }
+
+    /**
+     * 接口结果简单处理
+     * @param url
+     * @param hend
+     * @param param
+     * @return
+     */
+    private String httpResponse(String url,HashMap<String,String> hend,Map<String,String> param){
+        logger.info(url +"?apikey="+apikey+"  参数:"+param.toString());
+        try {
+            HttpUtil.Response response = HttpUtil.sendGetRequest(url, hend, param);
+            int statusCode = response.getStatusCode();
+            logger.info(Integer.toString(statusCode));
+            if (statusCode==200) {
+                return response.getResponseText();
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    /**
+     * 接口结果分页处理
+     * @param url
+     * @param hend
+     * @param param
+     * @return
+     */
+    private JSONArray httpResponseBySize(String url,String apikey,int size,HashMap<String,String> hend, Map<String,
+            String> param){
+        logger.info(url +"?apikey="+apikey+"  参数:"+param.toString());
+        JSONArray jsonArray=null;
+        try {
+            HttpUtil.Response response = HttpUtil.sendGetRequest(url, hend, param);
+            int statusCode = response.getStatusCode();
+            logger.info(Integer.toString(statusCode));
+            if (statusCode==200) {
+                String responseText = response.getResponseText();
+                if (responseText != null) {
+                    JSONObject jsonObject = JSON.parseObject(responseText);
+                    int total = Integer.parseInt(jsonObject.get("total").toString());
+                    if (total>0) {
+                        Object hits = jsonObject.get("hits");
+                        jsonArray = JSON.parseArray(hits.toString());
+                        if (total > size) {
+                            Map<String, String> map = new HashMap<>();
+                            map.put("apikey", apikey);
+                            for (int i = size; i < total; i += size) {
+                                map.put("from", Integer.toString(i));
+                                map.put("size", Integer.toString(size));
+                                HttpUtil.Response response1 = HttpUtil.sendGetRequest(url, hend, map);
+                                int status = response1.getStatusCode();
+                                if (status == 200) {
+                                    String s = response1.getResponseText();
+                                    if (s != null) {
+                                        Object hits1 = JSON.parseObject(s).get("hits");
+                                        JSONArray array = JSON.parseArray(hits1.toString());
+                                        jsonArray.addAll(array);
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return jsonArray;
+    }
+
+    /**
+     * 数组形式处理/分割
+     * @param stringArray
+     * @return
+     */
+    private String stringArraytoString(String stringArray){
+        if ("[]".equals(stringArray)||stringArray==null){
+            return null;
+        }
+    List<String> strings = JSON.parseArray(stringArray, String.class);
+        String str="";
+    for (String string:strings) {
+        str=str+string+"/";
+    }
+    return str.substring(0,str.length()-1);
+}
+
+
+
+}

+ 41 - 0
src/main/java/com/uas/task/ScheduleTask.java

@@ -0,0 +1,41 @@
+package com.uas.task;
+
+import com.uas.entity.Group;
+import com.uas.service.CustomerService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2020-10-27 15:42
+ */
+@Component("scheduleTask")
+public class ScheduleTask {
+    private final Logger logger = LoggerFactory.getLogger(this.getClass());
+
+    @Autowired
+    private CustomerService customerService;
+
+    /**
+     * 保存客户资料
+     */
+    public void saveFbCustomer() {
+
+        logger.info("保存客户资料开始");
+        Date date = new Date();
+        List<String> following = customerService.getFollowingByGroup();
+        if (following != null) {
+            customerService.deleteAll();
+            for (String s : following) {
+                customerService.saveBusiness(s);
+            }
+        }
+        logger.info("保存客户资料结束:用时" + ((System.currentTimeMillis() - date.getTime()) / 1000));
+    }
+}

+ 148 - 0
src/main/java/com/uas/utils/BaseUtil.java

@@ -0,0 +1,148 @@
+package com.uas.utils;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.uas.entity.ErrorMsg;
+import com.uas.exception.SystemException;
+import net.sf.json.JSONArray;
+
+import java.util.*;
+
+
+public class BaseUtil {
+
+	
+	
+	/**
+	 * 以抛出异常的方式将信息交给MyExceptionHandler MyExceptionHandler会捕捉信息并传给前台
+	 * 前台捕捉错误信息,并显示给用户
+	 * 
+	 * @param error
+	 *            要在前台显示的信息
+	 */
+	public static void showError(String error) {
+		if (error != null && error.length() > 0)
+			throw new SystemException(error);
+	}
+
+	public static void showError(ErrorMsg errorMsg) {
+		if(errorMsg!=null){
+			throw new SystemException(errorMsg);
+		}
+	}
+
+	public static void showError(ErrorMsg errorMsg,String extraMsg) {
+		if(errorMsg!=null){
+			if (StringUtil.hasText(extraMsg)){
+				errorMsg.setErrMsg(extraMsg);
+			}
+			throw new SystemException(errorMsg);
+		}
+	}
+
+	/**
+	 * List集合转化成字符串, null和空字符自动去掉
+	 * 
+	 * @param list
+	 *            待转化集合
+	 * @param ch
+	 *            分割符
+	 * @param repeat
+	 *            是否去重 {true-是、false-否}
+	 */
+	public static String parseList2Str(List<?> list, String ch, boolean repeat) {
+		StringBuffer sb = new StringBuffer();
+		for (Object s : list) {
+			if (s != null && !s.toString().trim().equals("")) {
+				if (repeat) {
+					if (!sb.toString().contains(s + ch)) {
+						sb.append(s);
+						sb.append(ch);
+					}
+				} else {
+					sb.append(s);
+					sb.append(ch);
+				}
+			}
+		}
+		if (sb.length() > 0 && ch.length() > 0) {
+			return sb.substring(0, sb.lastIndexOf(ch));
+		}
+		return sb.toString();
+	}
+	
+	/**
+	 * 将gridStore解析成maps
+	 * 
+	 * @param gridStore
+	 *            字符串形式的grid数据
+	 * @return map形式的grid数据
+	 */
+	public static List<Map<Object, Object>> parseGridStoreToMaps(String gridStore) {
+		List<Map<Object, Object>> list = new ArrayList<Map<Object, Object>>();
+		try {
+			if (!gridStore.startsWith("[")) {
+				gridStore = "[" + gridStore + "]";
+			}
+			if (gridStore.length() > 409600) {
+				list = JacksonUtil.fromJsonArray(gridStore);
+			} else {
+				list = FlexJsonUtil.fromJsonArray(gridStore, HashMap.class);
+			}
+		} catch (Exception e) {
+			list = JSONUtil.toMapList(gridStore);
+		}
+		return list;
+	}
+	
+	/**
+	 * 数组转化成字符串, null和空字符自动去掉
+	 * 
+	 * @param arr
+	 *            待转化数组
+	 * @param ch
+	 *            分割符
+	 */
+	public static String parseArray2Str(Object[] arr, String ch) {
+		StringBuffer sb = new StringBuffer();
+		for (Object s : arr) {
+			if (s != null && !s.toString().trim().equals("")) {
+				sb.append(s);
+				sb.append(ch);
+			}
+		}
+		if (sb.length() > 0 && ch.length() > 0) {
+			return sb.substring(0, sb.lastIndexOf(ch));
+		}
+		return sb.toString();
+	}
+	
+	
+	/**
+	 * 数据转换,将传入的数据转成需要调用接口规定的数据格式
+	 * @param jsonStr	传入的数据
+	 * @param keyMap	UAS与外部系统的键 映射
+	 * @return
+	 */
+	public static Map<String, Object> jsonToMap(String jsonStr, Map<String, String> keyMap){
+		Map<String, Object> map = new HashMap<String, Object>();
+		Map<String, Object> jsonMap = JSONObject.parseObject(jsonStr);
+		Set<String> set = jsonMap.keySet();
+		Iterator<String> it = set.iterator();
+		while(it.hasNext()){
+			String key = it.next();
+			if(keyMap.containsKey(key)){
+				map.put(keyMap.get(key), jsonMap.get(key));
+			}
+		}
+		return map;
+	}
+	
+	public static String parseDataToJson(Map<String, Object> formMap,List<Map<String, Object>> gridList){
+		JSONObject json = new JSONObject();
+		json.put("form", JSON.toJSON(formMap));
+		json.put("grid", JSONArray.fromObject(gridList));
+		return json.toString();
+	}
+	
+}

+ 343 - 0
src/main/java/com/uas/utils/CollectionUtil.java

@@ -0,0 +1,343 @@
+package com.uas.utils;
+
+import net.sf.json.JSONArray;
+import net.sf.json.JSONObject;
+import org.springframework.util.StringUtils;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.*;
+import java.util.function.Function;
+
+public class CollectionUtil {
+
+	public static final int EXCLUDE = 0;
+	public static final int INCLUDE = 1;
+
+	/**
+	 * 取List里面的field的值
+	 */
+	public static Object[] pluck(List<Map<Object, Object>> list, String field) {
+		Object[] d = new Object[list.size()];
+		int index = 0;
+		for (Map<Object, Object> m : list) {
+			if (m.containsKey(field)) {
+				d[index++] = m.get(field);
+			}
+		}
+		return d;
+	}
+
+	public static Object[] pluck(ArrayList<HashMap<Object, Object>> list, String field) {
+		Object[] d = new Object[list.size()];
+		int index = 0;
+		for (Map<Object, Object> m : list) {
+			if (m.containsKey(field)) {
+				d[index++] = m.get(field);
+			}
+		}
+		return d;
+	}
+
+	/**
+	 * 过滤List
+	 */
+	public static List<Map<Object, Object>> filter(List<Map<Object, Object>> list, int type, Object... field) {
+		int i = 1, len = field.length;
+		if (len % 2 != 0) {
+			try {
+				throw new Exception("参数个数有误!");
+			} catch (Exception e) {
+
+			}
+		}
+		List<Map<Object, Object>> d = new ArrayList<Map<Object, Object>>();
+		if (type == CollectionUtil.INCLUDE) {
+			for (Map<Object, Object> m : list) {
+				i = 0;
+				for (Object f : field) {
+					if (i % 2 == 0) {
+						if (field[i + 1] != m.get(f) && !(field[i + 1]).equals(m.get(f))) {
+							break;
+						}
+					}
+					i++;
+					if (i == len) {
+						d.add(m);
+					}
+				}
+			}
+		} else {
+			for (Map<Object, Object> m : list) {
+				i = 0;
+				for (Object f : field) {
+					if (i % 2 == 0) {
+						if (field[i + 1] == m.get(f) || (field[i + 1]).equals(m.get(f))) {
+							break;
+						}
+					}
+					i++;
+					if (i == len) {
+						d.add(m);
+					}
+				}
+			}
+		}
+		return d;
+	}
+
+	public static Map<String, Object> findRecord(List<Map<String, Object>> list, String field, Object value) {
+		if (value != null) {
+			for (Map<String, Object> m : list) {
+				if (value.equals(m.get(field))) {
+					return m;
+				}
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * 字段{field}的值是否重复
+	 * 
+	 * @param list
+	 * @param field
+	 * @return
+	 */
+	public static boolean isUnique(Collection<? extends Map<?, Object>> list, String field) {
+		if (list != null) {
+			Set<Object> objects = new HashSet<Object>();
+			Object object = null;
+			for (Map<?, Object> m : list) {
+				object = m.get(field);
+				if (object != null) {
+					if (objects.contains(object))
+						return false;
+					objects.add(object);
+				}
+			}
+		}
+		return true;
+	}
+
+	/**
+	 * 取字段{field}的重复项
+	 * 
+	 * @param list
+	 * @param field
+	 * @return
+	 */
+	public static String getRepeats(Collection<? extends Map<?, Object>> list, String field) {
+		if (list != null) {
+			Set<Object> objects = new HashSet<Object>();
+			Object object = null;
+			StringBuffer sb = new StringBuffer();
+			for (Map<?, Object> m : list) {
+				object = m.get(field);
+				if (object != null) {
+					if (objects.contains(object))
+						sb.append(object).append(" ");
+					objects.add(object);
+				}
+			}
+			if (sb.length() > 0)
+				return sb.toString();
+		}
+		return null;
+	}
+
+	public static String toString(List<Map<Object, Object>> list) {
+		JSONArray arr = new JSONArray();
+		JSONObject obj = null;
+		for (Map<Object, Object> map : list) {
+			if (map != null) {
+				obj = new JSONObject();
+				for (Object key : map.keySet()) {
+					obj.put(key, map.get(key));
+				}
+				arr.add(obj);
+			}
+		}
+		return arr.toString();
+	}
+
+	public static String toJSONString(Map<String, ?> map) {
+		return JSONObject.fromObject(map).toString();
+	}
+
+	public static String toString(Map<String, ?> map) {
+		Set<String> keys = map.keySet();
+		StringBuffer sb = new StringBuffer();
+		for (String k : keys) {
+			if (sb.length() > 0)
+				sb.append(",");
+			if (StringUtil.hasText(k))
+				sb.append(k).append(":");
+			Object value = map.get(k);
+			if (value instanceof Double) {
+				value = NumberUtil.parseBigDecimal(Double.parseDouble(String.valueOf(value)));
+			}
+			sb.append(value);
+		}
+		return sb.toString();
+	}
+
+	public static String toString(Collection<String> paramArray) {
+		return toString(paramArray, ",");
+	}
+
+	public static String toString(Object[] strs) {
+		StringBuffer sb = new StringBuffer();
+		for (Object k : strs) {
+			if (!StringUtils.isEmpty(k)) {
+				if (sb.length() > 0)
+					sb.append(",");
+				sb.append(k);
+			}
+		}
+		return sb.toString();
+	}
+
+	public static String toString(Collection<String> paramArray, String separator) {
+		StringBuffer sb = new StringBuffer();
+		for (String k : paramArray) {
+			if (!StringUtils.isEmpty(k)) {
+				if (sb.length() > 0)
+					sb.append(separator);
+				sb.append(k);
+			}
+		}
+		return sb.toString();
+	}
+
+	/**
+	 * 用类<T>的变量key的get方法取变量key的值,并用separator连接成字符串
+	 * 
+	 * @param paramArray
+	 * @param key
+	 * @param separator
+	 * @return
+	 */
+	public static <T> String getParamString(Collection<T> paramArray, String key, String separator) {
+		StringBuffer sb = new StringBuffer();
+		if (!isEmpty(paramArray)) {
+			String methodGet = "get" + StringUtils.capitalize(key);
+			Method method = null;
+			for (T param : paramArray) {
+				try {
+					if (method == null)
+						method = param.getClass().getMethod(methodGet, new Class[] {});
+					Object val = method.invoke(param, new Object[] {});
+					if (val != null) {
+						if (sb.length() > 0)
+							sb.append(separator);
+						sb.append(val);
+					}
+				} catch (NoSuchMethodException e) {
+					e.printStackTrace();
+				} catch (SecurityException e) {
+					e.printStackTrace();
+				} catch (IllegalAccessException e) {
+					e.printStackTrace();
+				} catch (IllegalArgumentException e) {
+					e.printStackTrace();
+				} catch (InvocationTargetException e) {
+					e.printStackTrace();
+				}
+			}
+		}
+		return sb.toString();
+	}
+
+
+	public static String toSqlString(Set<String> strs) {
+		StringBuffer sb = new StringBuffer();
+		for (String k : strs) {
+			if (sb.length() > 0)
+				sb.append(",");
+			sb.append("'").append(k).append("'");
+		}
+		return sb.toString();
+	}
+
+	public static String toSqlString(String[] strs) {
+		StringBuffer sb = new StringBuffer();
+		for (String k : strs) {
+			if (sb.length() > 0)
+				sb.append(",");
+			sb.append("'").append(k).append("'");
+		}
+		return sb.toString();
+	}
+
+	public static String pluckSqlString(Collection<? extends Map<?, Object>> list, String field) {
+		StringBuffer sb = new StringBuffer();
+		for (Map<?, Object> m : list) {
+			if (m.containsKey(field)) {
+				if (sb.length() > 0)
+					sb.append(",");
+				sb.append("'").append(m.get(field).toString().replaceAll("'","''")).append("'");
+			}
+		}
+		return sb.toString();
+	}
+
+	/**
+	 * 按给定size切割
+	 * 
+	 * @param paramList
+	 * @param paramSize
+	 * @return
+	 */
+	public static <T> List<List<T>> split(List<T> paramList, int paramSize) {
+		List<List<T>> lists = new ArrayList<List<T>>();
+		for (int j = 0, l = paramList.size(), i = l / paramSize; j <= i; j++) {
+			lists.add(paramList.subList(j * paramSize, Math.min((j + 1) * paramSize, l)));
+		}
+		return lists;
+	}
+
+	/**
+	 * 按给定size切割
+	 * 
+	 * @param paramArray
+	 * @param paramSize
+	 * @return
+	 */
+	public static Object[] split(Object[] paramArray, int paramSize) {
+		int len = paramArray.length;
+		Object[] arrays = new Object[(int) Math.ceil((double) len / paramSize)];
+		for (int j = 0, l = arrays.length; j < l; j++) {
+			arrays[j] = Arrays.copyOfRange(paramArray, j * paramSize, Math.min((j + 1) * paramSize, len));
+		}
+		return arrays;
+	}
+
+	public static boolean isEmpty(Collection<?> paramArray) {
+		return (paramArray == null) || (paramArray.size() == 0);
+	}
+
+	/**
+	 * 给list倒序
+	 * */
+	public static <T> List<T> reverse(List<T> lists) {
+		Collections.reverse(lists);
+		return lists;
+	}
+	public static <K, V> Map<K, List<V>> groupBy(List<V> sources, Function<V, K> keyGetter) {
+		Map<K, List<V>> map = new LinkedHashMap<>(1);
+		if (!isEmpty(sources)) {
+			sources.forEach(source -> {
+				K key = keyGetter.apply(source);
+				if (map.containsKey(key)) {
+					map.get(key).add(source);
+				} else {
+					List<V> childList = new ArrayList<>();
+					childList.add(source);
+					map.put(key, childList);
+				}
+			});
+		}
+		return map;
+	}
+}

+ 132 - 0
src/main/java/com/uas/utils/Constant.java

@@ -0,0 +1,132 @@
+package com.uas.utils;
+
+/**
+ * 系统常量
+ * 
+ * @author yingp
+ * 
+ */
+public class Constant {
+
+	// 日期格式
+
+	public final static String YM = "yyyy-MM";
+
+	public final static String ym = "yyyyMM";
+
+	public final static String YMD = "yyyy-MM-dd";
+
+	public final static String YMD_HM = "yyyy-MM-dd HH:mm";
+
+	public final static String YMDHM = "yyyy-MM-dd-HH-mm";
+
+	public final static String YMD_HMS = "yyyy-MM-dd HH:mm:ss";
+
+
+
+	public final static String ORACLE_YMD = "yyyy-MM-dd";
+
+	public final static String ORACLE_YMD_HMS = "yyyy-MM-dd HH24:mi:ss";
+
+	public static final String REGEXP_MOBILE = "^[1|8][3-8]\\d{9}$|^([6|9])\\d{7}$|^[0][9]\\d{8}$|^[6]([8|6])\\d{5}$|^(886|0)[9]\\d{8}$";
+
+	public static final String REGEXP_EMAIL = "^([\\w-])+(\\.\\w+)*@([\\w-])+((\\.\\w{2,3}){1,3})$";
+
+	/**
+	 * 求和
+	 * */
+	public final static String SUMMARY_SUM = "sum";
+
+	/**
+	 * 最大值
+	 * */
+	public final static String SUMMARY_MAX = "max";
+	/**
+	 * 最小值
+	 * */
+	public final static String SUMMARY_MIN = "min";
+	/**
+	 * 平均值
+	 * */
+	public final static String SUMMARY_AVERAGE = "average";
+
+	/**
+	 * 是
+	 */
+	public static final short YES = 1;
+	/**
+	 * 是
+	 */
+	public static final short yes = -1;
+	/**
+	 * 是
+	 */
+	public static final String TRUE = "T";
+	/**
+	 * 否
+	 */
+	public static final short NO = 0;
+	/**
+	 * 否
+	 */
+	public static final String FALSE = "F";
+
+	public static final int ORACLE_MAX_TABLE_SIZE = 999;
+
+	/**
+	 * 优软云
+	 * */
+	public static final String UAS_CLOUD = "CLOUD";
+
+	/**
+	 * 类型--"是否"字段
+	 */
+	public static final String TYPE_YN = "yn";
+
+	/**
+	 * 类型--"下拉框"
+	 */
+	public static final String TYPE_COMBO = "combo";
+
+	/**
+	 * 正则表达式:数字
+	 */
+	public static final String REG_NUM = "^-?[0-9]+(.[0-9]+)?";
+
+	/**
+	 * 正则表达式:日期
+	 */
+	public static final String REG_DATE = "\\d{2,4}-\\d{1,2}-\\d{1,2}";
+
+	/**
+	 * 正则表达式:时间
+	 */
+	public static final String REG_DATETIME = "\\d{2,4}-\\d{1,2}-\\d{1,2} \\d{1,2}:\\d{1,2}:\\d{1,2}";
+
+	/**
+	 * excel导出阈值
+	 */
+	public static final int EXCEL_LG_SIZE = 5000;
+
+	/**
+	 * excel导出最大条数
+	 */
+	public static final int EXCEL_MAX_SIZE = 100000;
+
+	/**
+	 * 正则表达式:ipv4
+	 */
+	public static final String REG_IPV4 = "((?:(?:25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))\\.){3}(?:25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d))))";
+	
+	/**
+	 * 临时表名称
+	 */
+	public static final String TEMP_TABLE_NAME = "TEMP_TABLE";
+
+	/**
+	 * 云顶对接app_key和app_secrect
+	 */
+	public static final String yundingAppKey = "uruan-udc";
+	public static final String yundingAppSecret = "uas123456";
+
+}

+ 84 - 0
src/main/java/com/uas/utils/ContextUtil.java

@@ -0,0 +1,84 @@
+package com.uas.utils;
+
+import org.springframework.beans.BeansException;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationEvent;
+
+public class ContextUtil {
+	private static ApplicationContext applicationContext;
+	public static void setApplicationContext(ApplicationContext applicationContext) {
+		synchronized (ContextUtil.class) {
+			ContextUtil.applicationContext = applicationContext;
+			ContextUtil.class.notifyAll();
+		}
+	}
+
+	public static ApplicationContext getApplicationContext() {
+		synchronized (ContextUtil.class) {
+			while (applicationContext == null) {
+				try {
+					ContextUtil.class.wait(6000);
+				} catch (InterruptedException ex) {
+					ex.printStackTrace();
+				}
+			}
+			return applicationContext;
+		}
+	}
+
+	/**
+	 * 获取bean
+	 * 
+	 * @param name
+	 * @return
+	 */
+	public static Object getBean(String name) {
+		try {
+			return getApplicationContext().getBean(name);
+		} catch (Exception e) {
+			e.printStackTrace();
+			return null;
+		}
+		
+	}
+
+	/**
+	 * 获取bean
+	 * 
+	 * @param cls
+	 * @return
+	 */
+	public static <T> T getBean(Class<T> cls) {
+		return getApplicationContext().getBean(cls);
+	}
+
+	/**
+	 * 动态注册bean
+	 * 
+	 * @param beanName
+	 *            bean组件名称
+	 * @param className
+	 *            类名
+	 */
+	public static void registerBean(String beanName, String className) {
+		try {
+			getApplicationContext().getAutowireCapableBeanFactory().createBean(Class.forName(className));
+		} catch (BeansException e) {
+			BaseUtil.showError("组件注册失败");
+		} catch (IllegalStateException e) {
+			BaseUtil.showError("组件注册失败");
+		} catch (ClassNotFoundException e) {
+			BaseUtil.showError("组件注册失败");
+		}
+	}
+
+	/**
+	 * 触发事件
+	 * 
+	 * @param event
+	 */
+	public static void publishEvent(ApplicationEvent event) {
+		getApplicationContext().publishEvent(event);
+	}
+
+}

+ 566 - 0
src/main/java/com/uas/utils/DateUtil.java

@@ -0,0 +1,566 @@
+package com.uas.utils;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+public class DateUtil {
+	static final SimpleDateFormat ym = new SimpleDateFormat("yyyyMM");
+	static final SimpleDateFormat YM = new SimpleDateFormat("yyyy-MM");
+	static final SimpleDateFormat YMD = new SimpleDateFormat("yyyy-MM-dd");
+	static final SimpleDateFormat YMD_HMS = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+	public static String format(Date date, String f) {
+		if (date == null) {
+			date = new Date();
+		}
+		if (f == null) {
+			return YMD.format(date);
+		}
+		SimpleDateFormat sdf = new SimpleDateFormat(f);
+		return sdf.format(date);
+	}
+
+	public static String format(java.sql.Date date, String f) {
+		if (date == null) {
+			return currentDateString(f);
+		} else {
+			if (f == null) {
+				return YMD.format(date);
+			}
+			SimpleDateFormat sdf = new SimpleDateFormat(f);
+			return sdf.format(date);
+		}
+	}
+
+	public static Date parse(String date, String f) {
+		if (date == null) {
+			return new Date();
+		}
+		if (f == null) {
+			try {
+				return date.contains(" ") ? YMD_HMS.parse(date) : YMD.parse(date);
+			} catch (ParseException e) {
+				return new Date();
+			}
+		}
+		SimpleDateFormat sdf = new SimpleDateFormat(f);
+		try {
+			return sdf.parse(date);
+		} catch (ParseException e) {
+			return new Date();
+		}
+	}
+
+	/**
+	 * 获取日期年份
+	 * 
+	 * @param date
+	 * @return
+	 * @throws ParseException
+	 */
+	public static int getYear(String date) throws ParseException {
+		date = date == null ? format(null, null) : date;
+		Calendar calendar = Calendar.getInstance();
+		calendar.setTime(YMD.parse(date));
+		return calendar.get(Calendar.YEAR);
+	}
+
+	/**
+	 * 获取日期年份
+	 * 
+	 * @param date
+	 * @return
+	 * @throws ParseException
+	 */
+	public static int getYear(Date date) throws ParseException {
+		date = date == null ? parse(null, null) : date;
+		Calendar calendar = Calendar.getInstance();
+		calendar.setTime(date);
+		return calendar.get(Calendar.YEAR);
+	}
+
+	/**
+	 * 获取日期月份
+	 * 
+	 * @param date
+	 * @return
+	 * @throws ParseException
+	 */
+	public static int getMonth(String date) throws ParseException {
+		date = date == null ? format(null, null) : date;
+		Calendar calendar = Calendar.getInstance();
+		calendar.setTime(YMD.parse(date));
+		return (calendar.get(Calendar.MONTH) + 1);
+	}
+
+	/**
+	 * 获取日期月份
+	 * 
+	 * @param date
+	 * @return
+	 * @throws ParseException
+	 */
+	public static int getMonth(Date date) throws ParseException {
+		date = date == null ? parse(null, null) : date;
+		Calendar calendar = Calendar.getInstance();
+		calendar.setTime(date);
+		return (calendar.get(Calendar.MONTH) + 1);
+	}
+
+	/**
+	 * 获取日期号
+	 * 
+	 * @param date
+	 * @return
+	 * @throws ParseException
+	 */
+	public static int getDay(String date) throws ParseException {
+		date = date == null ? format(null, null) : date;
+		Calendar calendar = Calendar.getInstance();
+		calendar.setTime(YMD.parse(date));
+		return calendar.get(Calendar.DAY_OF_MONTH);
+	}
+
+	/**
+	 * 获取日期号
+	 * 
+	 * @param date
+	 * @return
+	 * @throws ParseException
+	 */
+	public static int getDay(Date date) throws ParseException {
+		date = date == null ? parse(null, null) : date;
+		Calendar calendar = Calendar.getInstance();
+		calendar.setTime(date);
+		return calendar.get(Calendar.DAY_OF_MONTH);
+	}
+
+	/**
+	 * 获取日期前一年日期
+	 * 
+	 * @param date
+	 * @return
+	 * @throws ParseException
+	 */
+	public static String getLastYearDay(String date) throws ParseException {
+		date = date == null ? format(null, null) : date;
+		Calendar calendar = Calendar.getInstance();
+		try {
+			calendar.setTime(YMD.parse(date));
+		} catch (ParseException e) {
+			calendar.setTime(new Date());
+		}
+		calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR) - 1);
+		return YMD.format(calendar.getTime());
+
+	}
+
+	/**
+	 * 获取月份起始日期
+	 * 
+	 * @param date
+	 * @return
+	 * @throws ParseException
+	 */
+	public static String getMinMonthDate(String date) {
+		date = date == null ? format(null, null) : date;
+		Calendar calendar = Calendar.getInstance();
+		try {
+			calendar.setTime(YMD.parse(date));
+		} catch (ParseException e) {
+			calendar.setTime(new Date());
+		}
+		calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
+		return YMD.format(calendar.getTime());
+	}
+
+	/**
+	 * 获取月份起始日期
+	 * 
+	 * @param date
+	 * @return
+	 * @throws ParseException
+	 */
+	public static String getMinMonthDate(Date date) {
+		date = date == null ? parse(null, null) : date;
+		Calendar calendar = Calendar.getInstance();
+		calendar.setTime(date);
+		calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
+		return YMD.format(calendar.getTime());
+	}
+
+	/**
+	 * 获取月份最后日期
+	 * 
+	 * @param date
+	 * @return
+	 * @throws ParseException
+	 */
+	public static String getMaxMonthDate(String date) {
+		date = date == null ? format(null, null) : date;
+		Calendar calendar = Calendar.getInstance();
+		try {
+			calendar.setTime(YMD.parse(date));
+		} catch (ParseException e) {
+			calendar.setTime(new Date());
+		}
+		calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
+		return YMD.format(calendar.getTime());
+	}
+
+	/**
+	 * 获取月份最后日期
+	 * 
+	 * @param date
+	 * @return
+	 * @throws ParseException
+	 */
+	public static String getMaxMonthDate(Date date) {
+		date = date == null ? parse(null, null) : date;
+		Calendar calendar = Calendar.getInstance();
+		calendar.setTime(date);
+		calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
+		return YMD.format(calendar.getTime());
+	}
+
+	/**
+	 * 当前时间
+	 * 
+	 * @return <h3>String</h3>
+	 */
+	public static String getCurrentDate() {
+		return format(new Date(), null);
+	}
+
+	/**
+	 * 截取指定日期的年月
+	 * 
+	 * @param date
+	 * @return
+	 */
+	public static Integer getYearmonth(Date date) {
+		if (date == null) {
+			date = new Date();
+		}
+		return Integer.parseInt(ym.format(date));
+	}
+
+	/**
+	 * 截取指定日期的年月
+	 * 
+	 * @param date
+	 * @return
+	 */
+	public static Integer getYearmonth(String date) {
+		return Integer.parseInt(ym.format(parse(date, null)));
+	}
+
+	/**
+	 * 获取当前年月
+	 * 
+	 * @return
+	 */
+	public static Integer getYearmonth() {
+		return Integer.parseInt(ym.format(new Date()));
+	}
+
+	public static int compare(String date1, String date2) {
+		try {
+			Date dt1 = YMD.parse(date1);
+			Date dt2 = YMD.parse(date2);
+			if (dt1.getTime() > dt2.getTime()) {
+				return 1;
+			} else if (dt1.getTime() < dt2.getTime()) {
+				return -1;
+			} else {
+				return 0;
+			}
+		} catch (Exception exception) {
+			exception.printStackTrace();
+		}
+		return 0;
+	}
+
+	/**
+	 * 获取特定日期是星期几
+	 * 
+	 * @return
+	 */
+	public static String getWeekDay(String DateStr) {
+		SimpleDateFormat formatYMD = new SimpleDateFormat("yyyy-MM-dd");// formatYMD表示的是yyyy-MM-dd格式
+		SimpleDateFormat formatD = new SimpleDateFormat("E");// "E"表示"day in week"
+		Date d = null;
+		String weekDay = "";
+		try {
+			d = formatYMD.parse(DateStr);// 将String 转换为符合格式的日期
+			weekDay = formatD.format(d);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		// System.out.println("日期:"+DateStr+" : "+weekDay);
+		return weekDay;
+	}
+
+	public static int getWeekDay1(String DateStr) {// 返回日期对应数字
+		SimpleDateFormat formatYMD = new SimpleDateFormat("yyyy-MM-dd");// formatYMD表示的是yyyy-MM-dd格式
+		Date d = null;
+		int weekDay = 0;
+		try {
+			d = formatYMD.parse(DateStr);// 将String 转换为符合格式的日期
+			Calendar calendar = Calendar.getInstance();
+			calendar.setTime(d);
+			weekDay = calendar.get(Calendar.DAY_OF_WEEK) - 1;
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		return weekDay;
+	}
+
+	/**
+	 * 获取特定时间段内有哪几日
+	 * 
+	 * @return
+	 */
+	public static List<Object> findDates(String start_time, String end_time) throws ParseException {
+		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
+		Date date1 = df.parse(start_time);
+		Date date2 = df.parse(end_time);
+		int s = (int) ((date2.getTime() - date1.getTime()) / (24 * 60 * 60 * 1000));
+		List<Object> objects = new ArrayList<Object>();
+		String value = "";
+		if (s + 1 > 0) {
+			for (int i = 0; i <= s; i++) {
+				long todayDate = date1.getTime() + (long) i * 24 * 60 * 60 * 1000;
+				Date tmDate = new Date(todayDate);
+				value = new SimpleDateFormat("yyyy-MM-dd").format(tmDate);
+				objects.add(value);
+			}
+		}
+		return objects;
+	}
+
+	/**
+	 * 获取特定时间段内有多少天
+	 * 
+	 * @return
+	 */
+	public static int countDates(String start_time, String end_time) throws ParseException {
+		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
+		Date date1 = df.parse(start_time);
+		Date date2 = df.parse(end_time);
+		int s = (int) ((date2.getTime() - date1.getTime()) / (24 * 60 * 60 * 1000));
+		return s;
+	}
+
+	/**
+	 * 日期转化成oracle格式to_date('2012-12-12', 'yyyy-MM-dd')
+	 * 
+	 * @param format
+	 *            format type,for example: 'yyyy-MM-dd', 'yyyy-MM-dd HH:mm:ss'
+	 * @param date
+	 *            date{type=java.util.Date}
+	 */
+	public static String parseDateToOracleString(String format, Date date) {
+		if (format == null) {
+			format = Constant.YMD;
+		}
+		SimpleDateFormat sdf = new SimpleDateFormat(format);
+		if (date == null) {
+			date = new Date();
+		}
+		if (Constant.YMD_HMS.toUpperCase().equals(format.toUpperCase())) {
+			format = Constant.ORACLE_YMD_HMS;
+		} else {
+			format = Constant.ORACLE_YMD;
+		}
+		return "to_date('" + sdf.format(date) + "','" + format + "')";
+	}
+
+	/**
+	 * 日期转化成oracle格式to_date('2012-12-12', 'yyyy-MM-dd')
+	 * 
+	 * @param format
+	 *            format type,for example: 'yyyy-MM-dd', 'yyyy-MM-dd HH:mm:ss'
+	 * @param dateString
+	 *            date{type=string}
+	 */
+	public static String parseDateToOracleString(String format, String dateString) {
+		if (format == null) {
+			format = Constant.YMD;
+		}
+		if (dateString == null || "".equals(dateString) || "null".equals(dateString)) {
+			SimpleDateFormat sdf = new SimpleDateFormat(format);
+			dateString = sdf.format(new Date());
+		}
+		if (Constant.YMD_HMS.toUpperCase().equals(format.toUpperCase())) {
+			format = Constant.ORACLE_YMD_HMS;
+		} else {
+			format = Constant.ORACLE_YMD;
+		}
+		return "to_date('" + dateString + "','" + format + "')";
+	}
+
+	/**
+	 * Date转化成字符串格式
+	 * 
+	 * @param f
+	 *            format格式;若为空,则默认为yyyy-MM-dd
+	 */
+	public static String parseDateToString(Date date, String f) {
+		if (f == null) {
+			f = Constant.YMD;
+		}
+		SimpleDateFormat sdf = new SimpleDateFormat(f);
+		if (date == null) {
+			date = new Date();
+		}
+		return sdf.format(date);
+	}
+
+	/**
+	 * 形如{2012-12-21}或{2012-12-21 12:12:12}字符串格式的日期转化成java.util.Date类型
+	 * 
+	 * @param date
+	 *            string日期;若为空或格式错误,则返回当前时间
+	 * @param f
+	 *            format格式;若为空,则默认为yyyy-MM-dd
+	 * @return java.util.Date类型日期
+	 */
+	public static Date parseStringToDate(String date, String f) {
+		if (f == null) {
+			f = Constant.YMD;
+		}
+		SimpleDateFormat sdf = new SimpleDateFormat(f);
+		if (date == null) {
+			return new Date();
+		}
+		try {
+			return sdf.parse(date);
+		} catch (ParseException e) {
+			return new Date();
+		}
+	}
+
+	/**
+	 * 当前时间的字符串格式
+	 * 
+	 * @param f
+	 *            format格式;若为空,则默认为yyyy-MM-dd
+	 */
+	public static String currentDateString(String f) {
+		if (f == null) {
+			f = Constant.YMD;
+		}
+		SimpleDateFormat sdf = new SimpleDateFormat(f);
+		return sdf.format(new Date());
+	}
+
+	/**
+	 * 借贷合同月份处理
+	 */
+	public static int getMonthSpace(Date date1, Date date2) throws ParseException {
+		int iMonth = 0;
+		int flag = 0;
+		try {
+			Calendar objCalendarDate1 = Calendar.getInstance();
+			objCalendarDate1.setTime(date1);
+
+			Calendar objCalendarDate2 = Calendar.getInstance();
+			objCalendarDate2.setTime(date2);
+
+			if (objCalendarDate2.equals(objCalendarDate1))
+				return 0;
+			if (objCalendarDate1.after(objCalendarDate2)) {
+				Calendar temp = objCalendarDate1;
+				objCalendarDate1 = objCalendarDate2;
+				objCalendarDate2 = temp;
+			}
+			if (objCalendarDate2.get(Calendar.DAY_OF_MONTH) > objCalendarDate1.get(Calendar.DAY_OF_MONTH))
+				flag = 1;
+
+			if (objCalendarDate2.get(Calendar.YEAR) > objCalendarDate1.get(Calendar.YEAR)) {
+				iMonth = ((objCalendarDate2.get(Calendar.YEAR) - objCalendarDate1.get(Calendar.YEAR)) * 12
+						+ objCalendarDate2.get(Calendar.MONTH) + flag)
+						- objCalendarDate1.get(Calendar.MONTH);
+			} else {
+				iMonth = objCalendarDate2.get(Calendar.MONTH) + flag - objCalendarDate1.get(Calendar.MONTH);
+			}
+
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		return iMonth;
+	}
+
+	/**
+	 * 月份往前或往后n天
+	 */
+	public static Date overDate(Date date, int num) {
+		date = date == null ? new Date() : date;
+		Calendar calendar = new GregorianCalendar();
+		calendar.setTime(date);
+		calendar.add(Calendar.DATE, num);
+		date = calendar.getTime();
+		return date;
+	}
+
+	/**
+	 * 月份加减
+	 * 
+	 * @param date
+	 * @param increase
+	 * @return
+	 */
+	public static Integer addMonth(Date date, int increase) {
+		if (date == null)
+			date = new Date();
+		Calendar calendar = new GregorianCalendar();
+		calendar.setTime(date);
+		calendar.add(Calendar.MONTH, increase);
+		return getYearmonth(calendar.getTime());
+	}
+
+	/**
+	 * 月份加减
+	 * 
+	 * @param month
+	 * @param increase
+	 * @return
+	 */
+	public static Integer addMonth(Integer month, int increase) {
+		Calendar calendar = new GregorianCalendar();
+		try {
+			calendar.setTime(ym.parse(String.valueOf(month)));
+		} catch (ParseException e) {
+			e.printStackTrace();
+		}
+		calendar.add(Calendar.MONTH, increase);
+		return getYearmonth(calendar.getTime());
+	}
+
+	/**
+	 * 时间添加小时数
+	 * */
+	public static Date addHours(Date date, float hours) {
+		Calendar ca = Calendar.getInstance();
+		ca.setTime(date);
+		ca.add(Calendar.MINUTE, (int) (hours * 60));
+		return ca.getTime();
+	}
+
+	/**
+	 * 判断日期是否合法
+	 */
+	public static boolean isValidDate(String dateString, String f) {
+		SimpleDateFormat sdf = new SimpleDateFormat(f);
+		sdf.setLenient(false);
+		try {
+			sdf.parse(dateString);
+		} catch (ParseException e) {
+			e.printStackTrace();
+			return false;
+		}
+		return true;
+	}
+}

+ 58 - 0
src/main/java/com/uas/utils/FlexJsonUtil.java

@@ -0,0 +1,58 @@
+package com.uas.utils;
+
+import flexjson.JSONDeserializer;
+import flexjson.JSONSerializer;
+
+import java.util.*;
+
+/**
+ * <h1>flexjson</h1><br>
+ * 1.序列化json字符串时较快,优于jackson<br>
+ * 2.但是数据量较大时,序列化有问题<br>
+ * 3.反序列化较慢
+ * 
+ * @author yingp
+ * 
+ */
+public class FlexJsonUtil {
+
+	public static <T> T fromJson(String json, Class<?> cls) {
+		return new JSONDeserializer<T>().use(null, cls).deserialize(json);
+	}
+
+	public static <K, V> Map<K, V> fromJson(String json) {
+		if (json != null) {
+			Map<K, V> map = new HashMap<K, V>();
+			return new JSONDeserializer<Map<K, V>>().use(null, map.getClass()).deserialize(json);
+		}
+		return null;
+	}
+
+	public String toJson() {
+		return new JSONSerializer().exclude("*.class").serialize(this);
+	}
+
+	public static String toJson(Object obj) {
+		if (obj == null)
+			return null;
+		return new JSONSerializer().exclude("*.class").serialize(obj);
+	}
+
+	public static String toJsonDeep(Object obj) {
+		if (obj == null)
+			return null;
+		return new JSONSerializer().exclude("*.class").deepSerialize(obj);
+	}
+
+	public static <T> String toJsonArray(Collection<?> collection) {
+		return new JSONSerializer().exclude("*.class").serialize(collection);
+	}
+
+	public static <T> String toJsonArrayDeep(Collection<?> collection) {
+		return new JSONSerializer().exclude("*.class").deepSerialize(collection);
+	}
+
+	public static <T> List<T> fromJsonArray(String json, Class<?> cls) {
+		return new JSONDeserializer<List<T>>().use(null, ArrayList.class).use("values", cls).deserialize(json);
+	}
+}

+ 40 - 0
src/main/java/com/uas/utils/Hex.java

@@ -0,0 +1,40 @@
+package com.uas.utils;
+
+public final class Hex {
+	private static final char[] HEX = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
+
+	public static char[] encode(byte[] bytes) {
+		int nBytes = bytes.length;
+		char[] result = new char[2 * nBytes];
+
+		int j = 0;
+		for (int i = 0; i < nBytes; ++i) {
+			result[(j++)] = HEX[((0xF0 & bytes[i]) >>> 4)];
+
+			result[(j++)] = HEX[(0xF & bytes[i])];
+		}
+
+		return result;
+	}
+
+	public static byte[] decode(CharSequence s) {
+		int nChars = s.length();
+
+		if (nChars % 2 != 0) {
+			throw new IllegalArgumentException("Hex-encoded string must have an even number of characters");
+		}
+
+		byte[] result = new byte[nChars / 2];
+
+		for (int i = 0; i < nChars; i += 2) {
+			int msb = Character.digit(s.charAt(i), 16);
+			int lsb = Character.digit(s.charAt(i + 1), 16);
+
+			if ((msb < 0) || (lsb < 0)) {
+				throw new IllegalArgumentException("Non-hex character in input: " + s);
+			}
+			result[(i / 2)] = (byte) (msb << 4 | lsb);
+		}
+		return result;
+	}
+}

+ 99 - 0
src/main/java/com/uas/utils/HmacEncoder.java

@@ -0,0 +1,99 @@
+package com.uas.utils;
+
+import javax.crypto.KeyGenerator;
+import javax.crypto.Mac;
+import javax.crypto.SecretKey;
+import javax.crypto.spec.SecretKeySpec;
+import java.security.InvalidKeyException;
+import java.security.Key;
+import java.security.NoSuchAlgorithmException;
+
+/**
+ * Hash-based message authentication code,利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出
+ * 
+ * @author yingp
+ *
+ */
+public class HmacEncoder {
+
+	private final String algorithm;
+
+	public HmacEncoder(String algorithm) {
+		this.algorithm = algorithm;
+	}
+
+	/**
+	 * 根据给定密钥生成算法创建密钥
+	 * 
+	 * @param algorithm
+	 *            密钥算法
+	 * @return 密钥
+	 * @throws RuntimeException
+	 *             当 {@link NoSuchAlgorithmException} 发生时
+	 */
+	public byte[] getKey() {
+		// 初始化KeyGenerator
+		KeyGenerator keyGenerator = null;
+		try {
+			keyGenerator = KeyGenerator.getInstance(algorithm);
+		} catch (NoSuchAlgorithmException e) {
+			throw new RuntimeException(e.getMessage());
+		}
+		// 产生密钥
+		SecretKey secretKey = keyGenerator.generateKey();
+		// 获得密钥
+		return secretKey.getEncoded();
+	}
+
+	/**
+	 * 转换密钥
+	 * 
+	 * @param key
+	 *            二进制密钥
+	 * @param algorithm
+	 *            密钥算法
+	 * @return 密钥
+	 */
+	private static Key toKey(byte[] key, String algorithm) {
+		// 生成密钥
+		return new SecretKeySpec(key, algorithm);
+	}
+
+	/**
+	 * 使用指定消息摘要算法计算消息摘要
+	 * 
+	 * @param data
+	 *            做消息摘要的数据
+	 * @param key
+	 *            密钥
+	 * @return 消息摘要(长度为16的字节数组)
+	 */
+	public byte[] encode(byte[] data, Key key) {
+		Mac mac = null;
+		try {
+			mac = Mac.getInstance(algorithm);
+			mac.init(key);
+		} catch (NoSuchAlgorithmException e) {
+			e.printStackTrace();
+			return new byte[0];
+		} catch (InvalidKeyException e) {
+			e.printStackTrace();
+			return new byte[0];
+		}
+		return mac.doFinal(data);
+	}
+
+	/**
+	 * 使用指定消息摘要算法计算消息摘要
+	 * 
+	 * @param data
+	 *            做消息摘要的数据
+	 * @param key
+	 *            密钥
+	 * @return 消息摘要(长度为16的字节数组)
+	 */
+	public byte[] encode(byte[] data, byte[] key) {
+		return encode(data, toKey(key, algorithm));
+	}
+
+}

+ 9 - 0
src/main/java/com/uas/utils/HmacSHA256Encoder.java

@@ -0,0 +1,9 @@
+package com.uas.utils;
+
+public class HmacSHA256Encoder extends HmacEncoder {
+
+	public HmacSHA256Encoder() {
+		super("HmacSHA256");
+	}
+
+}

+ 46 - 0
src/main/java/com/uas/utils/HmacUtils.java

@@ -0,0 +1,46 @@
+package com.uas.utils;
+
+/**
+ * Hmac加密工具
+ * 
+ * @author yingp
+ *
+ */
+public class HmacUtils {
+
+	private static HmacEncoder hmacEncoder;
+
+	// 默认约定密钥
+	private final static byte[] key = { 104, 116, 116, 112, 58, 47, 47, 119, 119, 119, 46, 117, 98, 116, 111, 98, 46, 99, 111, 109, 47,
+			101, 114, 112, 47, 115, 97, 108, 101, 47, 111, 114, 100, 101, 114, 115, 63, 115, 111, 109, 101, 116, 104, 105, 110, 103 };
+
+	static {
+		// default algorithm: HmacSHA256
+		hmacEncoder = new HmacSHA256Encoder();
+	}
+
+	/**
+	 * 
+	 * @param message
+	 *            明文
+	 * @return 16进制密文
+	 */
+	public static String encode(Object message) {
+		byte[] encodeData = hmacEncoder.encode(String.valueOf(message).getBytes(), key);
+		return new String(Hex.encode(encodeData));
+	}
+
+	/**
+	 * 
+	 * @param message
+	 *            明文
+	 * @param key
+	 *            密钥
+	 * @return 16进制密文
+	 */
+	public static String encode(Object message, String key) {
+		byte[] encodeData = hmacEncoder.encode(String.valueOf(message).getBytes(), key.getBytes());
+		return new String(Hex.encode(encodeData));
+	}
+
+}

+ 979 - 0
src/main/java/com/uas/utils/HttpUtil.java

@@ -0,0 +1,979 @@
+package com.uas.utils;
+
+import org.apache.http.Consts;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.NameValuePair;
+import org.apache.http.client.ClientProtocolException;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.*;
+import org.apache.http.config.Registry;
+import org.apache.http.config.RegistryBuilder;
+import org.apache.http.conn.socket.ConnectionSocketFactory;
+import org.apache.http.conn.socket.PlainConnectionSocketFactory;
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
+import org.apache.http.entity.ContentType;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.entity.mime.MultipartEntityBuilder;
+import org.apache.http.entity.mime.content.FileBody;
+import org.apache.http.entity.mime.content.InputStreamBody;
+import org.apache.http.entity.mime.content.StringBody;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.protocol.HTTP;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+import java.io.*;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.net.URLEncoder;
+import java.security.KeyManagementException;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.CertificateException;
+import java.util.*;
+import java.util.Map.Entry;
+
+
+/**
+ * HTTP工具类,封装http请求
+ * 
+ * @author suntg
+ * @date 2015年3月5日14:20:40
+ */
+@SuppressWarnings("deprecation")
+public class HttpUtil {
+
+	/** 
+	 * 绕过验证 
+	 *   
+	 * @return 
+	 * @throws NoSuchAlgorithmException  
+	 * @throws KeyManagementException  
+	 */  
+	public static SSLContext createIgnoreVerifySSL() throws NoSuchAlgorithmException, KeyManagementException {  
+	    SSLContext sc = SSLContext.getInstance("SSLv3");  
+	  
+	    // 实现一个X509TrustManager接口,用于绕过验证,不用修改里面的方法  
+	    X509TrustManager trustManager = new X509TrustManager() {  
+	        @Override  
+	        public void checkClientTrusted(  
+	                java.security.cert.X509Certificate[] paramArrayOfX509Certificate,  
+	                String paramString) throws CertificateException {  
+	        }  
+	  
+	        @Override  
+	        public void checkServerTrusted(  
+	                java.security.cert.X509Certificate[] paramArrayOfX509Certificate,  
+	                String paramString) throws CertificateException {  
+	        }  
+	  
+	        @Override  
+	        public java.security.cert.X509Certificate[] getAcceptedIssuers() {  
+	            return null;  
+	        }  
+	    };  
+	  
+	    sc.init(null, new TrustManager[] { trustManager }, null);  
+	    return sc;  
+	}  
+
+	/**
+	 * 发送GET请求
+	 * 
+	 * @param url
+	 * @param params
+	 * @return
+	 * @throws Exception
+	 */
+	public static Response sendGetRequest(String url, HashMap<String, String> header, Map<String, String> params) throws Exception {
+		return sendGetRequest(url, header, params, false, null);
+	}
+
+	/**
+	 * 发送GET请求
+	 * 
+	 * @param url
+	 * @param params
+	 * @param sign
+	 *            是否发送签名
+	 * @return
+	 * @throws Exception
+	 */
+	public static Response sendGetRequest(String url, HashMap<String, String> header, Map<String, String> params, boolean sign, String signKey) throws Exception {
+		return sendRequest(RequestMethod.GET, url, header, params, sign, signKey);
+	}
+
+	/**
+	 * 发送GET请求
+	 * 
+	 * @param url
+	 * @param params
+	 * @param sign
+	 *            是否发送签名
+	 * @return
+	 * @throws Exception
+	 */
+	public static Response sendGetRequest(String url, HashMap<String, String> header, Map<String, String> params, boolean sign) throws Exception {
+		return sendRequest(RequestMethod.GET, url, header, params, sign, null);
+	}
+
+	/**
+	 * 发送POST请求
+	 * 
+	 * @param url
+	 * @param params
+	 * @return
+	 * @throws Exception
+	 */
+	public static Response sendPostRequest(String url, HashMap<String, String> header, Map<String, String> params) throws Exception {
+		return sendPostRequest(url, header, params, false, null);
+	}
+
+	/**
+	 * 发送POST请求
+	 * 
+	 * @param url
+	 * @return
+	 * @throws Exception
+	 */
+	public static Response sendPostRequest(String url, List<?> datas) throws Exception {
+		return sendPostRequest(url, datas, false, null);
+	}
+
+	/**
+	 * 发送POST请求
+	 * 
+	 * @param url
+	 * @param params
+	 * @param sign
+	 *            是否发送签名
+	 * @return
+	 * @throws Exception
+	 */
+	public static Response sendPostRequest(String url, HashMap<String, String> header, Map<String, String> params, boolean sign, String signKey) throws Exception {
+		return sendRequest(RequestMethod.POST, url, header, params, sign, signKey);
+	}
+
+	/**
+	 * 发送POST请求
+	 * 
+	 * @param url
+	 * @param datas
+	 * @param sign
+	 *            是否发送签名
+	 * @return
+	 * @throws Exception
+	 */
+	public static Response sendPostRequest(String url, List<?> datas, boolean sign, String signKey) throws Exception {
+		return sendRequest(RequestMethod.POST, url, datas, sign, signKey);
+	}
+
+	/**
+	 * 发送POST请求
+	 * 
+	 * <pre>
+	 * 使用默认密钥
+	 * </pre>
+	 * 
+	 * @param url
+	 * @param params
+	 * @param sign
+	 *            是否发送签名
+	 * @return
+	 * @throws Exception
+	 */
+	public static Response sendPostRequest(String url, HashMap<String, String> header, Map<String, String> params, boolean sign) throws Exception {
+		return sendRequest(RequestMethod.POST, url, header, params, sign, null);
+	}
+
+	/**
+	 * 发送POST请求
+	 * 
+	 * <pre>
+	 * 使用默认密钥
+	 * </pre>
+	 * 
+	 * @param url
+	 * @param sign
+	 *            是否发送签名
+	 * @return
+	 * @throws Exception
+	 */
+	public static Response sendPostRequest(String url, List<?> datas, boolean sign) throws Exception {
+		return sendRequest(RequestMethod.POST, url, datas, sign, null);
+	}
+
+	/**
+	 * 发送post请求
+	 * 
+	 * @param postUrl
+	 * @param formData
+	 * @return
+	 * @throws Exception
+	 */
+	public static Response doPost(String postUrl, String formData,  boolean sign, String signKey) throws Exception {
+        CloseableHttpClient httpClient = HttpClients.createDefault();
+        postUrl = getUrl(postUrl, sign, signKey);
+        HttpPost post = new HttpPost(postUrl);
+        StringEntity postingString = new StringEntity(formData, HTTP.UTF_8);
+        post.setEntity(postingString);
+        post.setHeader("Content-type", "application/json");
+        CloseableHttpResponse response = httpClient.execute(post);
+        return Response.getResponse(response);
+    }
+
+	/*云顶传输数据*/
+	public static Response doPostToYunding(String url,String data,String timestamp) throws Exception{
+		url = getUrlToYunding(url,data,timestamp);
+		String extraParam =  "data=" + data;
+		return doPost(url,extraParam,false,null,30000); //默认30s超时
+	}
+
+	public static Response doPost(String postUrl, String formData,  boolean sign, String signKey, int timeout) throws Exception {
+		URL url = new URL(postUrl);
+		HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
+		try {
+			urlConn.setDoOutput(true);
+			urlConn.setDoInput(true);
+			urlConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
+			urlConn.setUseCaches(false);
+			urlConn.setInstanceFollowRedirects(true);
+			urlConn.setRequestMethod("POST");
+			urlConn.setConnectTimeout(timeout);
+			urlConn.setReadTimeout(timeout);
+			if (null != formData) {
+				OutputStreamWriter osw = new OutputStreamWriter(urlConn.getOutputStream(), "UTF-8");
+				osw.write(formData);
+				osw.flush();
+				osw.close();
+			}
+			return new Response(urlConn.getResponseCode() == 200, streamToString(urlConn.getInputStream()));
+		} catch (Exception e) {
+			return new Response(false, e.getMessage());
+		} finally {
+			if (urlConn != null) {
+				urlConn.disconnect();
+			}
+		}
+    }
+
+	private static String getUrlToYunding(String url,String data,String timestamp){
+		if(url==null){
+			return null;
+		}
+		if(url.length()==0){
+			return url;
+		}
+
+		String sign = MD5Util.MD5(Constant.yundingAppKey + timestamp + data + Constant.yundingAppSecret );
+		sign = sign.toUpperCase();
+
+		if (url.indexOf("?")>-1){
+			url += "&sign=" + sign;
+		}else {
+			url += "?sign=" + sign;
+		}
+		return url;
+	}
+
+	public static String streamToString(InputStream in) throws Exception {
+		BufferedReader reader = new BufferedReader(new InputStreamReader(in));
+		StringBuilder buf = new StringBuilder();
+
+		try {
+			char[] chars = new char[2048];
+			for (;;) {
+				int len = reader.read(chars, 0, chars.length);
+				if (len < 0) {
+					break;
+				}
+				buf.append(chars, 0, len);
+			}
+		} catch (Exception ex) {
+			throw new Exception("read string from reader error", ex);
+		}
+
+		return buf.toString();
+	}
+
+	/**
+	 * 封装加密
+	 * 
+	 * @param sign
+	 * @param signKey
+	 * @return
+	 */
+	private static String getUrl(String url, boolean sign, String signKey) {
+		StringBuilder buf = new StringBuilder(url);
+		if (sign) {
+			// 加时间戳,保持相同请求每次签名均不一样
+			buf.append("&_timestamp=").append(System.currentTimeMillis());
+			String message = buf.toString();
+			// 对请求串进行签名
+			buf.append("&_signature=").append(HmacUtils.encode(message, signKey));
+		} else
+			buf.deleteCharAt(buf.length() - 1);
+		return buf.toString();
+	}
+
+	/**
+	 * 发送PUT请求
+	 * 
+	 * <pre>
+	 * 使用默认密钥
+	 * </pre>
+	 * 
+	 * @param url
+	 * @param sign
+	 *            是否发送签名
+	 * @return
+	 * @throws Exception
+	 */
+	public static Response sendPutRequest(String url, List<?> datas, boolean sign) throws Exception {
+		return sendRequest(RequestMethod.PUT, url, datas, sign, null);
+	}
+
+	/**
+	 * 发送PUT请求
+	 * 
+	 * <pre>
+	 * 使用默认密钥
+	 * </pre>
+	 * 
+	 * @param url
+	 * @param params
+	 * @param sign
+	 *            是否发送签名
+	 * @return
+	 * @throws Exception
+	 */
+	public static Response sendPutRequest(String url, HashMap<String, String> header, Map<String, String> params, boolean sign) throws Exception {
+		return sendRequest(RequestMethod.PUT, url, header, params, sign, null);
+	}
+
+	/**
+	 * 发送PUT请求
+	 * 
+	 * @param url
+	 * @param datas
+	 * @param sign
+	 *            是否发送签名
+	 * @return
+	 * @throws Exception
+	 */
+	public static Response sendPutRequest(String url, List<?> datas, boolean sign, String signKey) throws Exception {
+		return sendRequest(RequestMethod.PUT, url, datas, sign, signKey);
+	}
+
+	/**
+	 * 发送PUT请求
+	 * 
+	 * @param url
+	 * @return
+	 * @throws Exception
+	 */
+	public static Response sendPutRequest(String url, List<?> datas) throws Exception {
+		return sendPutRequest(url, datas, false, null);
+	}
+
+	/**
+	 * 发送DELETE请求
+	 * 
+	 * @param url
+	 * @param params
+	 * 
+	 * @return
+	 * @throws Exception
+	 */
+	public static Response sendDeleteRequest(String url, HashMap<String, String> header, Map<String, String> params) throws Exception {
+		return sendDeleteRequest(url, header, params, false, null);
+	}
+
+	/**
+	 * 发送DELETE请求
+	 * 
+	 * @param url
+	 * @param params
+	 * @param sign
+	 *            是否发送签名
+	 * @return
+	 * @throws Exception
+	 */
+	public static Response sendDeleteRequest(String url, HashMap<String, String> header, Map<String, String> params, boolean sign, String signKey) throws Exception {
+		return sendRequest(RequestMethod.DELETE, url, header, params, sign, signKey);
+	}
+
+	/**
+	 * 发送DELETE请求
+	 * 
+	 * @param url
+	 * @param params
+	 * @param sign
+	 *            是否发送签名
+	 * @return
+	 * @throws Exception
+	 */
+	public static Response sendDeleteRequest(String url, HashMap<String, String> header, Map<String, String> params, boolean sign) throws Exception {
+		return sendRequest(RequestMethod.DELETE, url, header, params, sign, null);
+	}
+
+	/**
+	 * 发起http请求
+	 * 
+	 * @param method
+	 *            请求方法GET、POST、PUT、DELETE
+	 * @param url
+	 *            请求链接
+	 * @param params
+	 *            参数
+	 *            
+	 * @param sign
+	 *            是否签名
+	 * @return
+	 * @throws Exception
+	 */
+	public static Response sendRequest(RequestMethod method, String url, HashMap<String, String> header, Map<String, String> params, boolean sign, String signKey)
+			throws Exception {
+		
+		switch (method) {
+		case GET: {
+			HttpRequestBase request = new HttpGet(getRequestUrl(url, params, sign, signKey));
+			for (Entry<String, String> entry : header.entrySet()) {
+				request.setHeader(entry.getKey(), entry.getValue());
+			}
+			return sendHttpUriRequest(request);
+		}
+		case POST: {
+			HttpPost request = new HttpPost(getRequestUrl(url, sign, signKey));
+			for (Entry<String, String> entry : header.entrySet()) {
+				request.setHeader(entry.getKey(), entry.getValue());
+			}
+			return sendHttpEntityEnclosingRequest(request, params);
+		}
+		case PUT: {
+			HttpPut request = new HttpPut(getRequestUrl(url, sign, signKey));
+			for (Entry<String, String> entry : header.entrySet()) {
+				request.setHeader(entry.getKey(), entry.getValue());
+			}
+			return sendHttpEntityEnclosingRequest(request, params);
+		}
+		case DELETE: {
+			HttpDelete request = new HttpDelete(getRequestUrl(url, params, sign, signKey));
+			for (Entry<String, String> entry : header.entrySet()) {
+				request.setHeader(entry.getKey(), entry.getValue());
+			}
+			return sendHttpUriRequest(request);
+		}
+		default: {
+			HttpGet request = new HttpGet(getRequestUrl(url, params, sign, signKey));
+			for (Entry<String, String> entry : header.entrySet()) {
+				request.setHeader(entry.getKey(), entry.getValue());
+			}
+			return sendHttpUriRequest(request);
+		}
+		}
+	}
+
+	/**
+	 * 发起http请求
+	 *
+	 * @param method
+	 *            请求方法POST、PUT
+	 * @param url
+	 *            请求链接
+	 * @param datas
+	 *            参数
+	 * @param sign
+	 *            是否签名
+	 * @return
+	 * @throws Exception
+	 */
+	public static Response sendRequest(RequestMethod method, String url, List<?> datas, boolean sign, String signKey) throws Exception {
+		switch (method) {
+		case POST:
+			return sendHttpEntityEnclosingRequest(new HttpPost(getRequestUrl(url, sign, signKey)), datas);
+		case PUT:
+			return sendHttpEntityEnclosingRequest(new HttpPut(getRequestUrl(url, sign, signKey)), datas);
+		default:
+			return sendHttpEntityEnclosingRequest(new HttpPost(getRequestUrl(url, sign, signKey)), datas);
+		}
+	}
+
+	/**
+	 * 发起GET、DELETE请求
+	 *
+	 * @param request
+	 * @return
+	 * @throws Exception
+	 */
+	private static Response sendHttpUriRequest(HttpRequestBase request) throws Exception {
+		//采用绕过验证的方式处理https请求
+	    SSLContext sslcontext = createIgnoreVerifySSL();
+
+	    // 设置协议http和https对应的处理socket链接工厂的对象
+	    Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
+           .register("http", PlainConnectionSocketFactory.INSTANCE)
+           .register("https", new SSLConnectionSocketFactory(sslcontext))
+           .build();
+       	PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
+       	HttpClients.custom().setConnectionManager(connManager);
+
+       	//创建自定义的httpclient对象
+        CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(connManager).build();
+		//CloseableHttpClient httpClient = HttpClients.createDefault();
+		CloseableHttpResponse response = null;
+		try {
+			response = httpClient.execute(request);
+			return Response.getResponse(response);
+		} finally {
+			try {
+				httpClient.close();
+			} catch (IOException e) {
+			}
+			if (response != null) {
+				try {
+					response.close();
+				} catch (IOException e) {
+				}
+			}
+		}
+	}
+
+	/**
+	 * 发起POST、PUT请求
+	 *
+	 * @param request
+	 * @param params
+	 * @return
+	 * @throws Exception
+	 */
+	private static Response sendHttpEntityEnclosingRequest(HttpEntityEnclosingRequestBase request, Map<String, String> params)
+			throws Exception {
+		//采用绕过验证的方式处理https请求
+	    SSLContext sslcontext = createIgnoreVerifySSL();
+
+	    // 设置协议http和https对应的处理socket链接工厂的对象
+	    Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
+           .register("http", PlainConnectionSocketFactory.INSTANCE)
+           .register("https", new SSLConnectionSocketFactory(sslcontext))
+           .build();
+       	PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
+       	HttpClients.custom().setConnectionManager(connManager);
+
+       	//创建自定义的httpclient对象
+        CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(connManager).build();
+		//CloseableHttpClient httpClient = HttpClients.createDefault();
+		CloseableHttpResponse response = null;
+		try {
+			List<NameValuePair> nvps = new ArrayList<NameValuePair>();
+			if (params != null && !params.isEmpty()) {
+				Set<Entry<String, String>> entrys = params.entrySet();
+				for (Entry<String, String> entry : entrys) {
+					nvps.add(new BasicNameValuePair(entry.getKey(), URLEncoder.encode(entry.getValue(), "UTF-8")));
+				}
+			}
+			request.setEntity(new UrlEncodedFormEntity(nvps));
+			response = httpClient.execute(request);
+			System.out.println(request);
+			return Response.getResponse(response);
+		} finally {
+			request.releaseConnection();
+			try {
+				httpClient.close();
+			} catch (IOException e) {
+			}
+			if (response != null) {
+				try {
+					response.close();
+				} catch (IOException e) {
+				}
+			}
+		}
+	}
+
+	/**
+	 * 发起POST、PUT请求
+	 *
+	 * @param request
+	 * @param datas
+	 * @return
+	 * @throws Exception
+	 */
+	private static Response sendHttpEntityEnclosingRequest(HttpEntityEnclosingRequestBase request, List<?> datas) throws Exception {
+		//采用绕过验证的方式处理https请求
+	    SSLContext sslcontext = createIgnoreVerifySSL();
+
+	    // 设置协议http和https对应的处理socket链接工厂的对象
+	    Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
+           .register("http", PlainConnectionSocketFactory.INSTANCE)
+           .register("https", new SSLConnectionSocketFactory(sslcontext))
+           .build();
+       	PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
+       	HttpClients.custom().setConnectionManager(connManager);
+
+       	//创建自定义的httpclient对象
+        CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(connManager).build();
+		//CloseableHttpClient httpClient = HttpClients.createDefault();
+		CloseableHttpResponse response = null;
+		try {
+			if (datas != null && !datas.isEmpty()) {
+				request.setEntity(new StringEntity(FlexJsonUtil.toJsonArrayDeep(datas), ContentType.create("text/plain", Consts.UTF_8)));
+			}
+			response = httpClient.execute(request);
+			return Response.getResponse(response);
+		} finally {
+			request.releaseConnection();
+			try {
+				httpClient.close();
+			} catch (IOException e) {
+			}
+			if (response != null) {
+				try {
+					response.close();
+				} catch (IOException e) {
+				}
+			}
+		}
+	}
+
+	/**
+	 * 将请求参数添加到链接中
+	 *
+	 * @param url
+	 * @param params
+	 * @param sign
+	 *            是否签名
+	 * @return
+	 * @throws UnsupportedEncodingException
+	 */
+	public static String getRequestUrl(String url, Map<String, String> params, boolean sign) throws UnsupportedEncodingException {
+		StringBuilder buf = new StringBuilder(url);
+		if (url.indexOf("?") == -1)
+			buf.append("?");
+		else if (!url.endsWith("&"))
+			buf.append("&");
+		// 如果是GET请求,则请求参数在URL中
+		if (params != null && !params.isEmpty()) {
+			Set<Entry<String, String>> entrys = params.entrySet();
+			for (Entry<String, String> entry : entrys) {
+				buf.append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue(), "UTF-8")).append("&");
+			}
+		}
+		if (sign) {
+			// 加时间戳,保持相同请求每次签名均不一样
+			buf.append("_timestamp=").append(System.currentTimeMillis());
+			String message = buf.toString();
+			// 对请求串进行签名
+			buf.append("&_signature=").append(HmacUtils.encode(message));
+		} else
+			buf.deleteCharAt(buf.length() - 1);
+		return buf.toString();
+	}
+
+	/**
+	 * 将请求参数添加到链接中
+	 *
+	 * @param url
+	 * @param params
+	 * @param sign
+	 *            是否签名
+	 * @param signKey
+	 *            签名密钥
+	 * @return
+	 * @throws UnsupportedEncodingException
+	 */
+	public static String getRequestUrl(String url, Map<String, String> params, boolean sign, String signKey)
+			throws UnsupportedEncodingException {
+		if (sign && signKey == null)
+			return getRequestUrl(url, params, sign);
+		StringBuilder buf = new StringBuilder(url);
+		if (url.indexOf("?") == -1)
+			buf.append("?");
+		else if (!url.endsWith("&"))
+			buf.append("&");
+		// 如果是GET请求,则请求参数在URL中
+		if (params != null && !params.isEmpty()) {
+			Set<Entry<String, String>> entrys = params.entrySet();
+			for (Entry<String, String> entry : entrys) {
+				buf.append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue(), "UTF-8")).append("&");
+			}
+		}
+		if (sign) {
+			// 加时间戳,保持相同请求每次签名均不一样
+			buf.append("_timestamp=").append(System.currentTimeMillis());
+			String message = buf.toString();
+			// 对请求串进行签名
+			buf.append("&_signature=").append(HmacUtils.encode(message, signKey));
+		} else
+			buf.deleteCharAt(buf.length() - 1);
+		return buf.toString();
+	}
+
+	/**
+	 * 将签名信息添加到链接中
+	 * 
+	 * @param url
+	 * @param sign
+	 *            是否签名
+	 * @return
+	 * @throws UnsupportedEncodingException
+	 */
+	private static String getRequestUrl(String url, boolean sign, String signKey) throws UnsupportedEncodingException {
+		return getRequestUrl(url, null, sign, signKey);
+	}
+
+	/**
+	 * 将输入流转为字节数组
+	 * 
+	 * @param inStream
+	 * @return
+	 * @throws Exception
+	 */
+	public static byte[] read2Byte(InputStream inStream) throws Exception {
+		ByteArrayOutputStream outSteam = new ByteArrayOutputStream();
+		byte[] buffer = new byte[1024];
+		int len = 0;
+		while ((len = inStream.read(buffer)) != -1) {
+			outSteam.write(buffer, 0, len);
+		}
+		outSteam.close();
+		inStream.close();
+		return outSteam.toByteArray();
+	}
+
+	/**
+	 * 将输入流转为字符串
+	 * 
+	 * @param inStream
+	 * @return
+	 * @throws Exception
+	 */
+	public static String read2String(InputStream inStream) throws Exception {
+		ByteArrayOutputStream outSteam = new ByteArrayOutputStream();
+		byte[] buffer = new byte[1024];
+		int len = 0;
+		while ((len = inStream.read(buffer)) != -1) {
+			outSteam.write(buffer, 0, len);
+		}
+		try {
+			outSteam.close();
+			inStream.close();
+		} catch (Exception e) {
+
+		}
+		return new String(outSteam.toByteArray(), "UTF-8");
+	}
+
+	/**
+	 * 发送xml数据
+	 * 
+	 * @param path
+	 *            请求地址
+	 * @param xml
+	 *            xml数据
+	 * @param encoding
+	 *            编码
+	 * @return
+	 * @throws Exception
+	 */
+	public static byte[] postXml(String path, String xml, String encoding) throws Exception {
+		byte[] data = xml.getBytes(encoding);
+		URL url = new URL(path);
+		HttpURLConnection conn = (HttpURLConnection) url.openConnection();
+		conn.setRequestMethod("POST");
+		conn.setDoOutput(true);
+		conn.setRequestProperty("Content-Type", "text/xml; charset=" + encoding);
+		conn.setRequestProperty("Content-Length", String.valueOf(data.length));
+		conn.setConnectTimeout(5 * 1000);
+		OutputStream outStream = conn.getOutputStream();
+		outStream.write(data);
+		outStream.flush();
+		outStream.close();
+		if (conn.getResponseCode() == HttpStatus.OK.value()) {
+			return read2Byte(conn.getInputStream());
+		}
+		return null;
+	}
+
+	/**
+	 * http上传文件
+	 * 
+	 * @param postUrl
+	 *            请求地址
+	 * @param filePath
+	 *            附件路径
+	 * @param params
+	 *            参数
+	 * @return
+	 * @throws Exception
+	 * @throws IOException
+	 * @throws IllegalStateException
+	 */
+	public static Response upload(String postUrl, String filePath, Map<String, String> params, boolean sign, String signKey)
+			throws IllegalStateException, IOException, Exception {
+		CloseableHttpClient httpClient = null;
+		CloseableHttpResponse response = null;
+		try {
+			httpClient = HttpClients.createDefault();
+			HttpPost httpPost = new HttpPost(getRequestUrl(postUrl, sign, signKey));
+			FileBody fileBody = new FileBody(new File(filePath));
+			MultipartEntityBuilder builder = MultipartEntityBuilder.create();
+			builder.addPart("file", fileBody);
+			if (params != null) {
+				for (String paramKey : params.keySet()) {
+					StringBody body = new StringBody(params.get(paramKey), ContentType.create("text/plain", Consts.UTF_8));
+					builder.addPart(paramKey, body);
+				}
+			}
+			HttpEntity reqEntity = builder.build();
+			httpPost.setEntity(reqEntity);
+			response = httpClient.execute(httpPost);
+		} finally {
+			try {
+				if (response != null) {
+					response.close();
+				}
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+			try {
+				if (httpClient != null) {
+					httpClient.close();
+				}
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+		}
+		return Response.getResponse(response);
+	}
+
+	/**
+	 * http上传文件
+	 * 
+	 * @param postUrl
+	 *            请求地址
+	 * @param file
+	 *            附件
+	 * @param params
+	 *            参数
+	 * @return
+	 * @throws Exception
+	 * @throws IOException
+	 * @throws IllegalStateException
+	 */
+	public static Response upload(String postUrl, MultipartFile file, Map<String, String> params, boolean sign, String signKey)
+			throws IllegalStateException, IOException, Exception {
+		CloseableHttpClient httpClient = null;
+		CloseableHttpResponse response = null;
+		try {
+			httpClient = HttpClients.createDefault();
+			HttpPost httpPost = new HttpPost(getRequestUrl(postUrl, sign, signKey));
+			InputStreamBody sbody = new InputStreamBody(file.getInputStream(), file.getOriginalFilename());
+			MultipartEntityBuilder builder = MultipartEntityBuilder.create();
+			builder.addPart("file", sbody);
+			if (params != null) {
+				for (String paramKey : params.keySet()) {
+					StringBody body = new StringBody(params.get(paramKey), ContentType.create("text/plain", Consts.UTF_8));
+					builder.addPart(paramKey, body);
+				}
+			}
+			HttpEntity reqEntity = builder.build();
+			httpPost.setEntity(reqEntity);
+			response = httpClient.execute(httpPost);
+		} finally {
+			try {
+				if (response != null) {
+					response.close();
+				}
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+			try {
+				if (httpClient != null) {
+					httpClient.close();
+				}
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+		}
+		return Response.getResponse(response);
+	}
+
+	/**
+	 * 下载
+	 * 
+	 * @param postUrl
+	 * @return
+	 * @throws ClientProtocolException
+	 * @throws IOException
+	 * @throws NoSuchAlgorithmException 
+	 * @throws KeyManagementException 
+	 */
+	public static InputStream download(String postUrl) throws ClientProtocolException, IOException, KeyManagementException, NoSuchAlgorithmException {
+		//采用绕过验证的方式处理https请求  
+	    SSLContext sslcontext = createIgnoreVerifySSL();  
+	      
+	    // 设置协议http和https对应的处理socket链接工厂的对象  
+	    Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
+           .register("http", PlainConnectionSocketFactory.INSTANCE)
+           .register("https", new SSLConnectionSocketFactory(sslcontext))
+           .build();  
+       	PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
+       	HttpClients.custom().setConnectionManager(connManager);
+       	
+       	//创建自定义的httpclient对象  
+        CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(connManager).build();
+		//CloseableHttpClient httpClient = HttpClients.createDefault();
+		HttpGet httpGet = new HttpGet(postUrl);
+		CloseableHttpResponse response = httpClient.execute(httpGet);
+		return response.getEntity().getContent();
+	}
+
+	public static class Response {
+		private int statusCode;
+		private String responseText;
+
+		public int getStatusCode() {
+			return statusCode;
+		}
+
+		public void setStatusCode(int statusCode) {
+			this.statusCode = statusCode;
+		}
+
+		public String getResponseText() {
+			return responseText;
+		}
+
+		public void setResponseText(String responseText) {
+			this.responseText = responseText;
+		}
+
+		public Response() {
+		}
+
+		public Response(boolean success, String content) {
+			super();
+			this.statusCode = success ? 200 : 404;
+			this.responseText = content;
+		}
+		
+		public Response(HttpResponse response) throws IllegalStateException, IOException, Exception {
+			this.statusCode = response.getStatusLine().getStatusCode();
+			this.responseText = HttpUtil.read2String(response.getEntity().getContent());
+		}
+
+		public static Response getResponse(HttpResponse response) throws IllegalStateException, IOException, Exception {
+			if (response != null)
+				return new Response(response);
+			return null;
+		}
+	}
+}

+ 86 - 0
src/main/java/com/uas/utils/JSONUtil.java

@@ -0,0 +1,86 @@
+package com.uas.utils;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class JSONUtil {
+
+	static final String Unicode_Pattern = "(\\\\u(\\p{XDigit}{4}))";
+
+	public static String decodeUnicode(String jsonStr) {
+		if (jsonStr != null) {
+			// unicode格式的转化成汉字
+			Pattern pattern = Pattern.compile(Unicode_Pattern);
+			Matcher matcher = pattern.matcher(jsonStr);
+			char ch;
+			while (matcher.find()) {
+				ch = (char) Integer.parseInt(matcher.group(2), 16);
+				jsonStr = jsonStr.replace(matcher.group(1), ch + "");
+			}
+		}
+		return jsonStr;
+	}
+
+	public static Map<Object, Object> toMap(String jsonStr) {
+		jsonStr = decodeUnicode(jsonStr);
+		jsonStr = jsonStr.substring(jsonStr.indexOf("{") + 1, jsonStr.lastIndexOf("}"));
+		String[] strs;
+		if(jsonStr.indexOf("\",\"")>0) strs = jsonStr.split(",\"");
+		else  strs = jsonStr.split(","); //字段名前没有引号的jsonStr ,类似bom校验:{bo_version:"V1.0",bo_mothercode:"BS00012",bo_ispast:"否",}
+		String field = null;
+		String value = null;
+		Map<Object, Object> map = new HashMap<Object, Object>();
+		for (String str : strs) {
+			if (str.indexOf(":") > 0) {
+				field = str.substring(0, str.indexOf(":"));
+				if (field != null) {
+					if (field.startsWith("\"")) {
+						field = field.substring(1, field.length());
+					}
+					if (field.endsWith("\"")) {
+						field = field.substring(0, field.lastIndexOf("\""));
+					}
+				}
+				value = str.substring(str.indexOf(":") + 1);
+				if (value != null) {
+					if (value.startsWith("\"")) {
+						value = value.substring(1, value.length());
+					}
+					if (value.endsWith("\"")) {
+						value = value.substring(0, value.lastIndexOf("\""));
+					}
+				}
+				map.put(field, value);
+			}
+		}
+		return map;
+	}
+	
+	public static List<Map<Object, Object>> toMapList(String jsonStr) {
+		if (jsonStr != null) {
+			if (jsonStr.startsWith("[")) {
+				jsonStr = jsonStr.substring(1, jsonStr.length());
+			}
+			if (jsonStr.endsWith("]")) {
+				jsonStr = jsonStr.substring(0, jsonStr.lastIndexOf("]"));
+			}
+			List<Map<Object, Object>> list = new ArrayList<Map<Object, Object>>();
+			if (jsonStr.indexOf("},") > -1) {
+				String[] js = jsonStr.split("},");
+				for (String j : js) {
+					if (!j.endsWith("}"))
+						j = j + "}";
+					list.add(toMap(j));
+				}
+			} else if (jsonStr.indexOf("{") > -1 && jsonStr.indexOf("}") > -1) {
+				list.add(toMap(jsonStr));
+			}
+			return list;
+		}
+		return null;
+	}
+}

+ 174 - 0
src/main/java/com/uas/utils/JacksonUtil.java

@@ -0,0 +1,174 @@
+package com.uas.utils;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import org.codehaus.jackson.JsonGenerationException;
+import org.codehaus.jackson.JsonParseException;
+import org.codehaus.jackson.JsonParser.Feature;
+import org.codehaus.jackson.map.JsonMappingException;
+import org.codehaus.jackson.map.ObjectMapper;
+
+import java.io.IOException;
+import java.util.*;
+
+/**
+ * <h1>jackson</h1><br>
+ * 建议反序列化采用和序列化同一util,不要jackson和flexjson混着用,否则消耗会加大很多
+ * 
+ * @author yingp
+ * 
+ */
+public class JacksonUtil {
+	private static com.fasterxml.jackson.databind.ObjectMapper objectMapper;
+
+	@SuppressWarnings("unchecked")
+	public static <T> List<T> fromJsonArray(String json) {
+		ObjectMapper mapper = getObjectMapper();
+		try {
+			return mapper.readValue(json, List.class);
+		} catch (JsonParseException e) {
+			e.printStackTrace();
+		} catch (JsonMappingException e) {
+			e.printStackTrace();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+
+	/**
+	 * 字段必须是有引号的,形如{"a":"1","b":2}<br>
+	 * 如果格式是{a:"1",b:2}是无法解析的
+	 * 
+	 * @param json
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	public static <K, V> HashMap<K, V> fromJson(String json) {
+		ObjectMapper mapper = getObjectMapper();
+		try {
+			return mapper.readValue(json, HashMap.class);
+		} catch (JsonParseException e) {
+			e.printStackTrace();
+		} catch (JsonMappingException e) {
+			e.printStackTrace();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+
+	public static String toJson(Map<?, ?> map) {
+		ObjectMapper mapper = getObjectMapper();
+		try {
+			return mapper.writeValueAsString(map);
+		} catch (JsonGenerationException e) {
+			e.printStackTrace();
+		} catch (JsonMappingException e) {
+			e.printStackTrace();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+
+	public static String toJsonArray(Collection<?> collection) {
+		ObjectMapper mapper = getObjectMapper();
+		try {
+			return mapper.writeValueAsString(collection);
+		} catch (JsonGenerationException e) {
+			e.printStackTrace();
+		} catch (JsonMappingException e) {
+			e.printStackTrace();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+
+	private static ObjectMapper getObjectMapper() {
+		ObjectMapper mapper = new ObjectMapper();
+		mapper.configure(Feature.ALLOW_SINGLE_QUOTES, true);
+		mapper.configure(Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true);
+		return mapper;
+	}
+
+	/**
+	 * 使用 Map按key进行排序
+	 * @param map
+	 * @return
+	 */
+	public static Map<String, Object> sortMapByKey(Map<String, Object> map) {
+		if (map == null || map.isEmpty()) {
+			return null;
+		}
+
+		Map<String, Object> sortMap = new TreeMap<String, Object>(
+				new MapKeyComparator());
+
+		sortMap.putAll(map);
+
+		return sortMap;
+	}
+
+	public static String toSortJson(Map<String, Object> map) {
+		map = sortMapByKey(map);
+		ObjectMapper mapper = getObjectMapper();
+		try {
+			return mapper.writeValueAsString(map);
+		} catch (JsonGenerationException e) {
+			e.printStackTrace();
+		} catch (JsonMappingException e) {
+			e.printStackTrace();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+
+	/**
+	 * 把JSON文本parse为JavaBean.
+	 */
+	public static <T> T fromJson(String text, Class<T> clazz) {
+		if (objectMapper == null) {
+			objectMapper = new com.fasterxml.jackson.databind.ObjectMapper();
+		}
+
+		try {
+			return objectMapper.readValue(text, clazz);
+		} catch (IOException e) {
+			throw new RuntimeException("转换Java对象失败", e);
+		}
+	}
+
+	/**
+	 * 把JSON文本parse为JavaBean.
+	 */
+	public static <T> T fromJson(Map<?,?> map, Class<T> clazz) {
+		String text = toJson(map);
+		if (objectMapper == null) {
+			objectMapper = new com.fasterxml.jackson.databind.ObjectMapper();
+		}
+
+		try {
+			return objectMapper.readValue(text, clazz);
+		} catch (IOException e) {
+			e.printStackTrace();
+			throw new RuntimeException("转换Java对象失败", e);
+		}
+	}
+
+	/**
+	 * 将JavaBean序列化为JSON文本.
+	 */
+	public static String toJson(Object object) {
+		if (objectMapper == null) {
+			objectMapper = new com.fasterxml.jackson.databind.ObjectMapper();
+		}
+
+		try {
+			return objectMapper.writeValueAsString(object);
+		} catch (JsonProcessingException e) {
+			throw new RuntimeException("序列化成Json失败", e);
+		}
+	}
+}

+ 53 - 0
src/main/java/com/uas/utils/JwtUtil.java

@@ -0,0 +1,53 @@
+package com.uas.utils;
+
+import com.uas.core.support.GetProperties;
+import io.jsonwebtoken.Claims;
+import io.jsonwebtoken.JwtBuilder;
+import io.jsonwebtoken.Jwts;
+import io.jsonwebtoken.SignatureAlgorithm;
+
+import javax.crypto.spec.SecretKeySpec;
+import javax.xml.bind.DatatypeConverter;
+import java.security.Key;
+import java.util.Date;
+import java.util.Map;
+
+public class JwtUtil {
+	private static Map<String,String> tokenConfig = GetProperties.getAllProperty();
+	private static String base64Security = tokenConfig.get("SECURITY_KEY");
+	
+	public static String createJWT(String username, String password) {
+		SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
+
+		long nowMillis = System.currentTimeMillis();
+		Date now = new Date(nowMillis);
+
+		// 生成签名密钥
+		byte[] apiKeySecretBytes = DatatypeConverter.parseBase64Binary(base64Security);
+		Key signingKey = new SecretKeySpec(apiKeySecretBytes, signatureAlgorithm.getJcaName());
+
+		// 添加构成JWT的参数
+		JwtBuilder builder = Jwts.builder().setHeaderParam("typ", "JWT")
+				.claim("username", username)
+				.claim("password", password)
+				.signWith(signatureAlgorithm, signingKey);
+		
+		// 添加Token过期时间
+		long expMillis = nowMillis + Long.parseLong(tokenConfig.get("KEEP"));
+		Date exp = new Date(expMillis);
+		builder.setExpiration(exp).setNotBefore(now);
+
+		// 生成JWT
+		return builder.compact();
+	}
+
+	public static Claims parseJWT(String jsonWebToken) {
+		try {
+			Claims claims = Jwts.parser().setSigningKey(DatatypeConverter.parseBase64Binary(base64Security))
+					.parseClaimsJws(jsonWebToken).getBody();
+			return claims;
+		} catch (Exception ex) {
+			return null;
+		}
+	}
+}

+ 69 - 0
src/main/java/com/uas/utils/MD5Util.java

@@ -0,0 +1,69 @@
+package com.uas.utils;
+
+import java.io.UnsupportedEncodingException;
+import java.math.BigInteger;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+public class MD5Util {
+
+	public static String MD5(String plainText) {
+		try {
+			MessageDigest md = MessageDigest.getInstance("MD5");
+			try {
+				md.update(plainText.getBytes("UTF8"));
+			} catch (UnsupportedEncodingException e) {
+				e.printStackTrace();
+			}
+			byte b[] = md.digest();
+			int i;
+			StringBuffer buf = new StringBuffer(200);
+			for (int offset = 0; offset < b.length; offset++) {
+				i = b[offset] & 0xff;
+				if (i < 16) buf.append("0");
+				buf.append(Integer.toHexString(i));
+			}
+			return buf.toString();
+		} catch (NoSuchAlgorithmException e) {
+			throw new RuntimeException("MD5加密出现错误");
+		}
+	}
+
+	public static String getMD5(String str) {
+		try {
+			MessageDigest md = MessageDigest.getInstance("MD5");
+			md.update(str.getBytes());
+			return new BigInteger(1, md.digest()).toString(16);
+		} catch (Exception e) {
+			throw new RuntimeException("MD5加密出现错误");
+		}
+	}
+
+	/**
+	 * MD5加密
+	 * @param message
+	 * @return
+	 */
+	public static String getEncryption(String message){
+		String result = "";
+		if(message != null){
+			try {
+				MessageDigest md = MessageDigest.getInstance("MD5");		//指定加密方式
+				//加密
+				byte[] bytes = md.digest(message.getBytes());
+				for(int i = 0; i < bytes.length; i++){
+					// 将整数转换成十六进制形式的字符串 这里与0xff进行与运算的原因是保证转换结果为32位
+					String str = Integer.toHexString(bytes[i] & 0xFF);
+					if(str.length() == 1){
+						str += "F";
+					}
+					result += str;
+				}
+			} catch (NoSuchAlgorithmException e) {
+				e.printStackTrace();
+			}	
+		}
+		return result;
+		
+	}
+}

+ 14 - 0
src/main/java/com/uas/utils/MapKeyComparator.java

@@ -0,0 +1,14 @@
+package com.uas.utils;
+
+import java.util.Comparator;
+
+/**
+ * Created by luhg on 2018/4/25.
+ * 比较器
+ */
+public class MapKeyComparator implements Comparator<String> {
+    @Override
+    public int compare(String str1, String str2) {
+        return str1.compareTo(str2);
+    }
+}

+ 270 - 0
src/main/java/com/uas/utils/NumberUtil.java

@@ -0,0 +1,270 @@
+package com.uas.utils;
+
+import java.math.BigDecimal;
+import java.text.DecimalFormat;
+
+/**
+ * 数值处理工具
+ * 
+ * @author yingp
+ * 
+ */
+public class NumberUtil {
+
+	/**
+	 * 是否为空、0
+	 * 
+	 * @param numberObj
+	 * @return
+	 */
+	public static boolean isEmpty(Object numberObj) {
+		try {
+			return numberObj == null || "0".equals(String.valueOf(numberObj)) || Integer.parseInt(numberObj.toString()) == 0;
+		} catch (Exception e) {
+			return false;
+		}
+	}
+
+	/**
+	 * format double类型
+	 * 
+	 * @param number
+	 *            需要format的数据
+	 * @param f
+	 *            保留f位的小数
+	 * @return format之后的double类型的数据
+	 */
+	public static double formatDouble(double number, int f) {
+		if (f > 0) {
+			BigDecimal b = new BigDecimal(Double.toString(number));
+			BigDecimal one = new BigDecimal("1");
+			return b.divide(one, f, BigDecimal.ROUND_HALF_UP).doubleValue();
+		} else {
+			return Math.floor(number);
+		}
+	}
+
+	/**
+	 * format double类型
+	 * 
+	 * @param number
+	 *            需要format的数据
+	 * @param f
+	 *            保留f位的小数
+	 * @return format之后的double类型的数据
+	 */
+	public static double formatDouble(String number, int f) {
+		double n = Double.parseDouble(number);
+		if (f > 0) {
+			BigDecimal b = new BigDecimal(number);
+			BigDecimal one = new BigDecimal("1");
+			return b.divide(one, f, BigDecimal.ROUND_HALF_UP).doubleValue();
+		} else {
+			return Math.floor(n);
+		}
+	}
+
+	/**
+	 * 浮点型转成BigDecimal
+	 * 
+	 * @param number
+	 * @return
+	 */
+	public static String parseBigDecimal(double number) {
+		int scale = BigDecimal.valueOf(number).scale();
+		if (scale == -1) {
+			scale = 0;
+		}
+		return String.valueOf(BigDecimal.valueOf(number).setScale(scale, BigDecimal.ROUND_HALF_UP));
+	}
+
+	/**
+	 * 数字格式化
+	 * 
+	 * @param number
+	 * @param f
+	 * @return
+	 */
+	public static String formatNumber(Object number, int f) {
+		if ("0".equals(String.valueOf(number)))
+			return "0";
+		if (number instanceof String)
+			number = Double.parseDouble(number.toString());
+		DecimalFormat df = (DecimalFormat) DecimalFormat.getInstance();
+		df.setGroupingSize(3);
+		int len = number.toString().length();
+		if (number.toString().indexOf(".") > 0)
+			len = number.toString().indexOf(".");
+		String pattern = len > 3 ? "0,000" : "0";
+		for (int i = 0; i < f; i++) {
+			if (i == 0)
+				pattern += ".";
+			pattern += "0";
+		}
+		df.applyPattern(pattern);
+		try {
+			return df.format(number);
+		} catch (Exception e) {
+			return null;
+		}
+	}
+
+	/**
+	 * 设置小数点保留位数
+	 * */
+	public static float subFloat(float f, int length) {
+		String fStr = String.valueOf(f);
+		int i = fStr.indexOf(".");
+		String returnStr = null;
+		if (fStr.length() > i + 1 + length) {
+			returnStr = fStr.substring(0, i + 1 + length);
+		} else
+			returnStr = fStr;
+		float returnf = (Float.valueOf(returnStr)).floatValue();
+		return returnf;
+	}
+
+	/**
+	 * int数组转化成Integer数组
+	 */
+	public static Integer[] toIntegerArray(int[] arr) {
+		int n = arr.length;
+		Integer[] iarr = new Integer[n];
+		for (int i = 0; i < n; i++) {
+			iarr[i] = new Integer(arr[i]);
+		}
+		return iarr;
+	}
+
+	public static Number nvl(Number number, Number ifNullNumber) {
+		return number == null ? ifNullNumber : number;
+	}
+
+	public static int compare(Double paramDouble1, Double paramDouble2) {
+		if (paramDouble1 == null)
+			paramDouble1 = 0.0;
+		if (paramDouble2 == null)
+			paramDouble2 = 0.0;
+		return Double.compare(paramDouble1, paramDouble2);
+	}
+
+	/**
+	 * Double型加法运算
+	 * 
+	 * @param d1
+	 *            第一个加数
+	 * @param ds
+	 *            若干个加数
+	 * @return 相加的结果
+	 * @author suntg
+	 */
+	public static double add(Double d1, Double... ds) {
+		BigDecimal bd = new BigDecimal(Double.toString(d1));
+		for (Double d : ds) {
+			bd = bd.add(new BigDecimal(Double.toString(d)));
+		}
+		return bd.doubleValue();
+	}
+
+	/**
+	 * Double型加法运算
+	 * 
+	 * @param d1
+	 *            第一个加数
+	 * @param ds
+	 *            若干个加数
+	 * @return 相加的结果
+	 * @author suntg
+	 */
+	public static double add(String ds1, String... dss) {
+		BigDecimal bd = new BigDecimal(ds1);
+		for (String ds : dss) {
+			bd = bd.add(new BigDecimal(ds));
+		}
+		return bd.doubleValue();
+	}
+
+	/**
+	 * Double型减法运算
+	 * 
+	 * @param d1
+	 *            被减数
+	 * @param d2
+	 *            减数
+	 * @return 运算结果
+	 * @author suntg
+	 */
+	public static double sub(Double d1, Double d2) {
+		BigDecimal b1 = new BigDecimal(Double.toString(d1));
+		BigDecimal b2 = new BigDecimal(Double.toString(d2));
+		return b1.subtract(b2).doubleValue();
+	}
+
+	/**
+	 * Double 型乘法运算
+	 * 
+	 * @param d1
+	 *            第一个乘数
+	 * @param d2
+	 *            第二个乘数
+	 * @return 运算结果
+	 * @author suntg
+	 */
+	public static double mul(Double d1, Double d2) {
+		BigDecimal b1 = new BigDecimal(Double.toString(d1));
+		BigDecimal b2 = new BigDecimal(Double.toString(d2));
+		return b1.multiply(b2).doubleValue();
+	}
+
+	/**
+	 * Double 型除法运算
+	 * 
+	 * @param d1
+	 *            被除数
+	 * @param d2
+	 *            除数
+	 * @param scale
+	 *            小数点四舍五入精度
+	 * @return 运算结果
+	 * @author suntg
+	 */
+	public static double div(Double d1, Double d2, int scale) {
+		if (scale < 0) {
+			throw new IllegalArgumentException("四舍五入精度必须大于0");
+		}
+		if (d2.doubleValue() == 0) {
+			throw new IllegalArgumentException("被除数不能为0");
+		}
+		BigDecimal b1 = new BigDecimal(Double.toString(d1));
+		BigDecimal b2 = new BigDecimal(Double.toString(d2));
+		return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
+	}
+
+	/**
+	 * 默认小数点四舍五入精度为6的Double型除法运算
+	 * 
+	 * @param d1
+	 *            被除数
+	 * @param d2
+	 *            除数
+	 * @return 运算结果
+	 * @author suntg
+	 */
+	public static double div(Double d1, Double d2) {
+		return div(d1, d2, 6);
+	}
+
+	/**
+	 * 比较浮点型数值
+	 * 
+	 * @param paramDouble1
+	 * @param paramDouble2
+	 * @param paramInt
+	 *            精度
+	 * @return
+	 */
+	public static int compare(double paramDouble1, double paramDouble2, int paramInt) {
+		return Double.compare(formatDouble(paramDouble1, paramInt), formatDouble(paramDouble2, paramInt));
+	}
+
+}

+ 858 - 0
src/main/java/com/uas/utils/SqlUtil.java

@@ -0,0 +1,858 @@
+package com.uas.utils;
+
+import com.uas.dao.SqlMap;
+import oracle.jdbc.OracleConnection;
+
+import java.io.Writer;
+import java.lang.reflect.Method;
+import java.sql.Clob;
+import java.sql.Connection;
+import java.util.*;
+
+
+/**
+ * 处理一些拼sql的工具包
+ * 
+ * @author yingp
+ * @date 2012-08-02 10:22:17
+ * 
+ * @since 2015-11-26
+ *        <p>
+ *        增加对SqlMap的操作方法
+ *        </p>
+ */
+public class SqlUtil {
+
+	public final static String REG_D = "\\d{4}-\\d{2}-\\d{2}";
+	public final static String REG_DT = "\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}";
+	public final static String REG_TS = "\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}.\\d{1}";
+
+
+	public static String getFullTableName(String tabName, String masterCode) {
+		String[] strs = tabName.split("left join ");
+		StringBuffer sb = new StringBuffer();
+		for (int i = 0, len = strs.length; i < len; i++) {
+			sb.append(masterCode).append(".").append(strs[i]);
+			if (i != len - 1)
+				sb.append("left join ");
+		}
+		return sb.toString();
+	}
+
+
+	/**
+	 * @param map
+	 *            formStore解析成的map
+	 */
+	public static String getInsertSqlByFormStore(Map<?, Object> map, String table, String[] otherFields, Object[] otherValues) {
+		StringBuffer sb1 = new StringBuffer("INSERT into " + table + " (");
+		StringBuffer sb2 = new StringBuffer(" ");
+		Set<?> keys = map.keySet();
+		for (Object key : keys) {
+			String field = (String) key;
+			Object value = map.get(key);
+			for (int i = 0; i < otherFields.length; i++) {
+				if (field.equals(otherFields[i])) {// 字段重复了哦
+					value = otherValues[i];// 优先选用传递过来的value
+				}
+			}
+			sb1.append(field);
+			sb1.append(",");
+			if (value != null) {
+				String val = value.toString();
+				if (value.toString().matches(REG_D)) {// 判断是否是形如yyyy-mm-dd格式的日期类型数据
+					sb2.append(DateUtil.parseDateToOracleString(Constant.YMD, val));
+				} else if (value.toString().matches(REG_DT)) {
+					sb2.append(DateUtil.parseDateToOracleString(Constant.YMD_HMS, val));
+				} else if (value.toString().matches(REG_TS)) {
+					sb2.append(DateUtil.parseDateToOracleString(Constant.YMD_HMS, val.substring(0, val.lastIndexOf("."))));
+				} else if (value.toString().equals("null")) {
+					sb2.append("null");
+				} else if (val.contains("%n")) {
+					sb2.append("'" + val.replaceAll("%n", "\n") + "'");
+				} else if (val.contains("'")) {
+					sb2.append("'" + value.toString().replaceAll("'", "''") + "'");
+				} else {
+					sb2.append("'" + value + "'");
+				}
+			} else {
+				sb2.append("null");
+			}
+			sb2.append(",");
+		}
+		for (int i = 0; i < otherFields.length; i++) {
+			if (!sb1.toString().contains(otherFields[i])) {
+				sb1.append(otherFields[i]);
+				sb1.append(",");
+				sb2.append("'" + otherValues[i] + "'");
+				sb2.append(",");
+			}
+		}
+		return sb1.substring(0, sb1.length() - 1) + ") VALUES (" + sb2.substring(0, sb2.length() - 1) + ")";
+	}
+
+
+	public static List<String> getInsertSqlbyGridStore(List<Map<Object, Object>> maps, String table) {
+		List<String> sqls = new ArrayList<String>();
+		StringBuffer sb1 = null;
+		StringBuffer sb2 = null;
+		for (Map<Object, Object> map : maps) {
+			Set<Object> keys = map.keySet();
+			sb1 = new StringBuffer("INSERT into " + table + " (");
+			sb2 = new StringBuffer(" ");
+			for (Object key : keys) {
+				String field = (String) key;
+				Object value = map.get(key);
+				sb1.append(field);
+				sb1.append(",");
+				if (value != null) {
+					String val = value.toString();
+					if (val.matches(REG_D)) {// 判断是否是形如yyyy-mm-dd格式的日期类型数据
+						sb2.append(DateUtil.parseDateToOracleString(Constant.YMD, val));
+					} else if (val.matches(REG_DT)) {
+						sb2.append(DateUtil.parseDateToOracleString(Constant.YMD_HMS, val));
+					} else if (val.matches(REG_TS)) {
+						sb2.append(DateUtil.parseDateToOracleString(Constant.YMD_HMS, val.substring(0, val.lastIndexOf("."))));
+					} else if (value.toString().equals("null")) {
+						sb2.append("null");
+					} else if (val.contains("%n")) {
+						sb2.append("'" + val.replaceAll("%n", "\n") + "'");
+					} else if (val.contains("'")) {
+						sb2.append("'" + value.toString().replaceAll("'", "''") + "'");
+					} else {
+						sb2.append("'" + value + "'");
+					}
+				} else {
+					sb2.append("null");
+				}
+				sb2.append(",");
+			}
+			sqls.add(sb1.substring(0, sb1.length() - 1) + ") VALUES (" + sb2.substring(0, sb2.length() - 1) + ")");
+		}
+		return sqls;
+	}
+
+	public static List<String> getInsertSqlbyGridStoreWithoutDate(List<Map<Object, Object>> maps, String table) {
+		List<String> sqls = new ArrayList<String>();
+		StringBuffer sb1 = null;
+		StringBuffer sb2 = null;
+		for (Map<Object, Object> map : maps) {
+			Set<Object> keys = map.keySet();
+			sb1 = new StringBuffer("INSERT into " + table + " (");
+			sb2 = new StringBuffer(" ");
+			for (Object key : keys) {
+				String field = (String) key;
+				Object value = map.get(key);
+				sb1.append(field);
+				sb1.append(",");
+				if (value != null) {
+					if (value.toString().equals("null")) {
+						sb2.append("null");
+					} else {
+						sb2.append("'" + value + "'");
+					}
+				} else {
+					sb2.append("null");
+				}
+				sb2.append(",");
+			}
+			sqls.add(sb1.substring(0, sb1.length() - 1) + ") VALUES (" + sb2.substring(0, sb2.length() - 1) + ")");
+		}
+		return sqls;
+	}
+
+	public static List<String> getInsertSqlbyList(List<Map<Object, Object>> maps, String table, String prif) {
+		List<String> sqls = new ArrayList<String>();
+		if (maps != null) {
+			for (Map<Object, Object> map : maps) {
+				sqls.add(getInsertSql(map, table, prif));
+			}
+		}
+		return sqls;
+	}
+
+	/**
+	 * 从map集合格式的数据中解析出insert语句
+	 */
+	public static String getInsertSqlByMap(Map<?, Object> map, String table, String[] otherFields, Object[] otherValues) {
+		StringBuffer sb1 = new StringBuffer("INSERT into " + table + " (");
+		StringBuffer sb2 = new StringBuffer(" ");
+		Object value = null;
+		for (Object field : map.keySet()) {
+			value = map.get(field);
+			if (otherFields != null) {
+				for (int i = 0; i < otherFields.length; i++) {
+					if (field.equals(otherFields[i])) {// 字段重复了哦
+						value = otherValues[i];// 优先选用传递过来的value
+					}
+				}
+			}
+			sb1.append(field);
+			sb1.append(",");
+			if (value != null) {
+				String val = value.toString();
+				if (val.matches(REG_D)) {// 判断是否是形如yyyy-mm-dd格式的日期类型数据
+					sb2.append(DateUtil.parseDateToOracleString(Constant.YMD, val));
+				} else if (val.matches(REG_DT)) {
+					sb2.append(DateUtil.parseDateToOracleString(Constant.YMD_HMS, val));
+				} else if (val.matches(REG_TS)) {
+					sb2.append(DateUtil.parseDateToOracleString(Constant.YMD_HMS, val.substring(0, val.lastIndexOf("."))));
+				} else if (val.equals("null")) {
+					sb2.append("null");
+				} else if (val.contains("%n")) {
+					sb2.append("'" + val.replaceAll("%n", "\n") + "'");
+				} else if (val.contains("'")) {
+					sb2.append("'" + val.replaceAll("'", "''") + "'");
+				} else {
+					sb2.append("'" + value + "'");
+				}
+			} else {
+				sb2.append("null");
+			}
+			sb2.append(",");
+		}
+		if (otherFields != null) {
+			for (int i = 0; i < otherFields.length; i++) {
+				if (!sb1.toString().contains(otherFields[i])) {
+					sb1.append(otherFields[i]);
+					sb1.append(",");
+					sb2.append("'" + otherValues[i] + "'");
+					sb2.append(",");
+				}
+			}
+		}
+		return sb1.substring(0, sb1.length() - 1) + ") VALUES (" + sb2.substring(0, sb2.length() - 1) + ")";
+	}
+
+	public static String getInsertSqlByMap(Map<?, Object> map, String table) {
+		StringBuffer sb1 = new StringBuffer("INSERT into ");
+		sb1.append(table);
+		sb1.append(" (");
+		StringBuffer sb2 = new StringBuffer(" ");
+		Object value = null;
+		for (Object field : map.keySet()) {
+			value = map.get(field);
+			sb1.append(field);
+			sb1.append(",");
+			if (value != null) {
+				String val = value.toString();
+				if (val.matches(REG_D)) {// 判断是否是形如yyyy-mm-dd格式的日期类型数据
+					sb2.append(DateUtil.parseDateToOracleString(Constant.YMD, val));
+				} else if (val.matches(REG_DT)) {
+					sb2.append(DateUtil.parseDateToOracleString(Constant.YMD_HMS, val));
+				} else if (val.matches(REG_TS)) {
+					sb2.append(DateUtil.parseDateToOracleString(Constant.YMD_HMS, val.substring(0, val.lastIndexOf("."))));
+				} else if (val.equals("null")) {
+					sb2.append("null");
+				} else {
+					if (val.contains("'")) {
+						val = val.replaceAll("'", "''");
+					} else if (val.contains("%n")) {
+						val = val.replaceAll("%n", "\n");
+					}
+					// 针对较长字段,比如clob类型,防止ORA-01704的简单处理:切割成多个字符串连接起来
+					if (val.length() > 2000) {
+						sb2.append("''");
+					} else if (val.length() > 1000) {
+						sb2.append(StringUtil.splitAndConcat(val, 1333, "'", "'", "||"));
+					} else {
+						sb2.append("'" + val + "'");
+					}
+				}
+			} else {
+				sb2.append("null");
+			}
+			sb2.append(",");
+		}
+		return sb1.substring(0, sb1.length() - 1) + ") VALUES (" + sb2.substring(0, sb2.length() - 1) + ")";
+	}
+
+	public static String getInsertSql(Map<?, Object> map, String table, String keyField) {
+		StringBuffer sb1 = new StringBuffer("INSERT into ");
+		sb1.append(table);
+		sb1.append(" (");
+		StringBuffer sb2 = new StringBuffer(" ");
+		Object value = null;
+		for (Object field : map.keySet()) {
+			value = map.get(field);
+			sb1.append(field);
+			sb1.append(",");
+			if (field.equals(keyField)) {
+				sb2.append(table).append("_seq.nextval,");
+				continue;
+			}
+			if (value != null) {
+				String val = value.toString();
+				if (val.matches(REG_D)) {// 判断是否是形如yyyy-mm-dd格式的日期类型数据
+					sb2.append(DateUtil.parseDateToOracleString(Constant.YMD, val));
+				} else if (val.matches(REG_DT)) {
+					sb2.append(DateUtil.parseDateToOracleString(Constant.YMD_HMS, val));
+				} else if (val.matches(REG_TS)) {
+					sb2.append(DateUtil.parseDateToOracleString(Constant.YMD_HMS, val.substring(0, val.lastIndexOf("."))));
+				} else if (value.toString().equals("null")) {
+					sb2.append("null");
+				} else if (val.contains("'")) {
+					sb2.append("'" + value.toString().replaceAll("'", "''") + "'");
+				} else if (val.contains("%n")) {
+					sb2.append("'" + val.replaceAll("%n", "\n") + "'");
+				} else {
+					sb2.append("'" + value + "'");
+				}
+			} else {
+				sb2.append("null");
+			}
+			sb2.append(",");
+		}
+		return sb1.substring(0, sb1.length() - 1) + ") VALUES (" + sb2.substring(0, sb2.length() - 1) + ")";
+	}
+
+	public static String getDeleteSql(String tablename, String condition) {
+		StringBuffer sb = new StringBuffer("DELETE FROM ");
+		sb.append(tablename);
+		if (condition != null) {
+			sb.append(" WHERE ");
+			sb.append(condition);
+		}
+		return sb.toString();
+	}
+
+	/**
+	 * 生成更新SQL
+	 * 
+	 * @param map
+	 * @param table
+	 * @param keyField
+	 * @param prefix
+	 *            字段前缀
+	 * @return
+	 */
+	public static String getUpdateSqlByFormStore(Map<Object, Object> map, String table, String keyField, String prefix) {
+		Set<Object> keys = map.keySet();
+		StringBuffer sb1 = new StringBuffer("UPDATE " + table + " SET ");
+		Object keyValue = "";
+		for (Object key : keys) {
+			String field = (String) key;
+			if (null != prefix && !field.startsWith(prefix)) {
+				continue;
+			}
+			Object value = map.get(key);
+			if (field.equals(keyField)) {// 找到了需要的字段哦
+				keyValue = value;
+			}
+			sb1.append(field);
+			sb1.append("=");
+			if (value != null) {
+				String val = value.toString();
+				if (val.matches(REG_D)) {// 判断是否是形如yyyy-mm-dd格式的日期类型数据
+					sb1.append(DateUtil.parseDateToOracleString(Constant.YMD, val));
+				} else if (val.matches(REG_DT)) {
+					sb1.append(DateUtil.parseDateToOracleString(Constant.YMD_HMS, val));
+				} else if (val.matches(REG_TS)) {
+					sb1.append(DateUtil.parseDateToOracleString(Constant.YMD_HMS, val.substring(0, val.lastIndexOf("."))));
+				} else if (val.equals("null")) {
+					sb1.append("null");
+				} else {
+					if (val.contains("'")) {
+						val = val.replaceAll("'", "''");
+					} else if (val.contains("%n")) {
+						val = val.replaceAll("%n", "\n");
+					}
+					// 针对较长字段,比如clob类型,防止ORA-01704的简单处理:切割成多个字符串连接起来
+					if (val.length() > 2000) {
+						sb1.append("''");
+					} else if (val.length() > 1000) {
+						sb1.append(StringUtil.splitAndConcat(val, 666, "'", "'", "||"));
+					} else {
+						sb1.append("'" + val + "'");
+					}
+				}
+			} else {
+				sb1.append("null");
+			}
+			sb1.append(",");
+		}
+		return sb1.substring(0, sb1.length() - 1) + " WHERE " + keyField + "='" + keyValue + "'";
+	}
+
+	public static String getUpdateSqlByFormStore(Map<Object, Object> map, String table, String keyField) {
+		return getUpdateSqlByFormStore(map, table, keyField, null);
+	}
+
+	/**
+	 * 将HashMap的字段及值,转到SqlMap
+	 * 
+	 * @param sql
+	 * @param map
+	 */
+	private static void getSqlMap(SqlMap sql, Map<Object, Object> map) {
+		Object value = null;
+		for (Object field : map.keySet()) {
+			String key = field.toString();
+			value = map.get(field);
+			if (value != null) {
+				String val = value.toString();
+				if (val.matches(REG_D)) {// 判断是否是形如yyyy-mm-dd格式的日期类型数据
+					sql.setDate(key, val, Constant.YMD);
+				} else if (val.matches(REG_DT)) {
+					sql.setDate(key, val);
+				} else if (val.matches(REG_TS)) {
+					sql.setDate(key, val.substring(0, val.lastIndexOf(".")));
+				} else if (val.equals("null")) {
+					sql.setNull(key);
+				} else {
+					if (val.contains("'")) {
+						val = val.replaceAll("'", "''");
+					} else if (val.contains("%n")) {
+						val = val.replaceAll("%n", "\n");
+					}
+					sql.set(key, val);
+				}
+			} else {
+				sql.setNull(key);
+			}
+		}
+	}
+
+	/**
+	 * 多类型sql新增操作
+	 * 
+	 * @param map
+	 * @param table
+	 * @return
+	 */
+	public static SqlMap getSqlMap(Map<Object, Object> map, String table) {
+		SqlMap sql = new SqlMap(table);
+		getSqlMap(sql, map);
+		return sql;
+	}
+
+	/**
+	 * 多类型sql更新操作
+	 * 
+	 * @param map
+	 * @param table
+	 * @param keyField
+	 * @return
+	 */
+	public static SqlMap getSqlMap(Map<Object, Object> map, String table, String keyField) {
+		SqlMap sql = new SqlMap(table, keyField);
+		getSqlMap(sql, map);
+		return sql;
+	}
+
+	/**
+	 * 修改detail数据 将grid数据从字符串形式拼成sql,
+	 * 
+	 * @param
+	 */
+	public static List<String> getUpdateSqlbyGridStore(String gridStore, String table, String keyField) {
+		List<Map<Object, Object>> maps = BaseUtil.parseGridStoreToMaps(gridStore);
+		List<String> sqls = new ArrayList<String>();
+		for (Map<Object, Object> map : maps) {
+			Set<Object> keys = map.keySet();
+			StringBuffer sb1 = new StringBuffer("UPDATE " + table + " SET ");
+			Object keyValue = "";
+			for (Object key : keys) {
+				String field = (String) key;
+				Object value = map.get(key);
+				if (field.equals(keyField)) {
+					// value不为空,即为已存在数据
+					if (value != null && !value.equals("") && !value.equals("null")) {
+						keyValue = value;
+					} else {// 否则,为新添加的数据
+						sb1 = null;
+						break;
+					}
+				}
+				sb1.append(field);
+				sb1.append("=");
+				if (value != null) {
+					String val = value.toString();
+					if (val.matches(REG_D)) {// 判断是否是形如yyyy-mm-dd格式的日期类型数据
+						sb1.append(DateUtil.parseDateToOracleString(Constant.YMD, val));
+					} else if (val.matches(REG_DT)) {
+						sb1.append(DateUtil.parseDateToOracleString(Constant.YMD_HMS, val));
+					} else if (val.matches(REG_TS)) {
+						sb1.append(DateUtil.parseDateToOracleString(Constant.YMD_HMS, val.substring(0, val.lastIndexOf("."))));
+					} else if (value.toString().equals("null")) {
+						sb1.append("null");
+					} else if (val.contains("%n")) {
+						sb1.append("'" + val.replaceAll("%n", "\n") + "'");
+					} else if (val.contains("'")) {
+						sb1.append("'" + value.toString().replaceAll("'", "''") + "'");
+					} else {
+						sb1.append("'" + value + "'");
+					}
+				} else {
+					sb1.append("null");
+				}
+				sb1.append(",");
+			}
+			if (sb1 != null)
+				sqls.add(sb1.substring(0, sb1.length() - 1) + " WHERE " + keyField + "='" + keyValue + "'");
+		}
+
+		return CollectionUtil.reverse(sqls);
+	}
+
+	/**
+	 * get update_sql by GridStore
+	 * 
+	 * @param maps
+	 * @param table
+	 * @param keyField
+	 * @return
+	 */
+	public static List<String> getUpdateSqlbyGridStore(List<Map<Object, Object>> maps, String table, String keyField) {
+		List<String> sqls = new ArrayList<String>();
+		if (maps != null) {
+			for (Map<Object, Object> map : maps) {
+				Set<Object> keys = map.keySet();
+				StringBuffer sb1 = new StringBuffer("UPDATE " + table + " SET ");
+				Object keyValue = "";
+				for (Object key : keys) {
+					String field = (String) key;
+					Object value = map.get(key);
+					if (field.equals(keyField)) {
+						// value不为空,即为已存在数据
+						if (value != null && !value.equals("") && !value.equals("null") && Integer.parseInt(value.toString()) > 0) {
+							keyValue = value;
+						} else {// 否则,为新添加的数据
+							sb1 = null;
+							break;
+						}
+					}
+					sb1.append(field);
+					sb1.append("=");
+					if (value != null) {
+						String val = value.toString();
+						if (val.matches(REG_D)) {// 判断是否是形如yyyy-mm-dd格式的日期类型数据
+							sb1.append(DateUtil.parseDateToOracleString(Constant.YMD, val));
+						} else if (val.matches(REG_DT)) {
+							sb1.append(DateUtil.parseDateToOracleString(Constant.YMD_HMS, val));
+						} else if (val.matches(REG_TS)) {
+							sb1.append(DateUtil.parseDateToOracleString(Constant.YMD_HMS, val.substring(0, val.lastIndexOf("."))));
+						} else if (value.toString().equals("null")) {
+							sb1.append("null");
+						} else if (val.contains("%n")) {
+							sb1.append("'" + val.replaceAll("%n", "\n") + "'");
+						} else if (val.contains("'")) {
+							sb1.append("'" + value.toString().replaceAll("'", "''") + "'");
+						} else {
+							sb1.append("'" + value + "'");
+						}
+					} else {
+						sb1.append("null");
+					}
+					sb1.append(",");
+				}
+				if (sb1 != null) {
+					sqls.add(sb1.substring(0, sb1.length() - 1) + " WHERE " + keyField + "='" + keyValue + "'");
+				}
+			}
+		}
+		return CollectionUtil.reverse(sqls);
+	}
+
+	/**
+	 * get update_sql by GridStore
+	 * 
+	 * @param maps
+	 * @param table
+	 * @param keyField
+	 * @return
+	 */
+	public static List<String> getUpdateSqlbyGridStoreWithoutDate(List<Map<Object, Object>> maps, String table, String keyField) {
+		List<String> sqls = new ArrayList<String>();
+		for (Map<Object, Object> map : maps) {
+			Set<Object> keys = map.keySet();
+			StringBuffer sb1 = new StringBuffer("UPDATE " + table + " SET ");
+			Object keyValue = "";
+			for (Object key : keys) {
+				String field = (String) key;
+				Object value = map.get(key);
+				if (field.equals(keyField)) {
+					// value不为空,即为已存在数据
+					if (value != null && !value.equals("") && !value.equals("null") && Integer.parseInt(value.toString()) > 0) {
+						keyValue = value;
+					} else {// 否则,为新添加的数据
+						sb1 = null;
+						break;
+					}
+				}
+				sb1.append(field);
+				sb1.append("=");
+				if (value != null) {
+					String val = value.toString();
+					if (value.toString().equals("null")) {
+						sb1.append("null");
+					} else if (val.contains("%n")) {
+						sb1.append("'" + val.replaceAll("%n", "\n") + "'");
+					} else if (val.contains("'")) {
+						sb1.append("'" + value.toString().replaceAll("'", "''") + "'");
+					} else {
+						sb1.append("'" + value + "'");
+					}
+				} else {
+					sb1.append("null");
+				}
+				sb1.append(",");
+			}
+			if (sb1 != null) {
+				sqls.add(sb1.substring(0, sb1.length() - 1) + " WHERE " + keyField + "='" + keyValue + "'");
+			}
+		}
+		return CollectionUtil.reverse(sqls);
+	}
+
+	/**
+	 * notice that trigger must be defined
+	 * 
+	 * @param maps
+	 * @param table
+	 * @param keyField
+	 * @return
+	 */
+	public static List<String> getInsertOrUpdateSqlbyGridStore(List<Map<Object, Object>> maps, String table, String keyField) {
+		List<String> sqls = new ArrayList<String>();
+		for (Map<Object, Object> map : maps) {
+			if (map.get(keyField) == null || "".equals(map.get(keyField)) || "null".equals(map.get(keyField))
+					|| Integer.parseInt(String.valueOf(map.get(keyField))) <= 0) {
+				sqls.add(getInsertSql(map, table, keyField));
+				continue;
+			}
+			Set<Object> keys = map.keySet();
+			StringBuffer sb1 = new StringBuffer("UPDATE " + table + " SET ");
+			Object keyValue = "";
+			for (Object key : keys) {
+				String field = (String) key;
+				Object value = map.get(key);
+				if (field.equals(keyField)) {
+					// value不为空,即为已存在数据
+					if (value != null && !value.equals("") && !value.equals("null") && Integer.parseInt(value.toString()) > 0) {
+						keyValue = value;
+					} else {// 否则,为新添加的数据
+						sb1 = null;
+						break;
+					}
+				}
+				sb1.append(field);
+				sb1.append("=");
+				if (value != null) {
+					String val = value.toString();
+					if (val.matches(REG_D)) {// 判断是否是形如yyyy-mm-dd格式的日期类型数据
+						sb1.append(DateUtil.parseDateToOracleString(Constant.YMD, val));
+					} else if (val.matches(REG_DT)) {
+						sb1.append(DateUtil.parseDateToOracleString(Constant.YMD_HMS, val));
+					} else if (val.matches(REG_TS)) {
+						sb1.append(DateUtil.parseDateToOracleString(Constant.YMD_HMS, val.substring(0, val.lastIndexOf("."))));
+					} else if (value.toString().equals("null")) {
+						sb1.append("null");
+					} else if (val.contains("%n")) {
+						sb1.append("'" + val.replaceAll("%n", "\n") + "'");
+					} else if (val.contains("'")) {
+						sb1.append("'" + value.toString().replaceAll("'", "''") + "'");
+					} else {
+						sb1.append("'" + value + "'");
+					}
+				} else {
+					sb1.append("null");
+				}
+				sb1.append(",");
+			}
+			if (sb1 != null)
+				sqls.add(sb1.substring(0, sb1.length() - 1) + " WHERE " + keyField + "='" + keyValue + "'");
+		}
+		return sqls;
+	}
+
+	public static List<String> getInsertOrUpdateSqlbyGridStoreWithoutDate(List<Map<Object, Object>> maps, String table, String keyField) {
+		List<String> sqls = new ArrayList<String>();
+		for (Map<Object, Object> map : maps) {
+			if (map.get(keyField) == null || "".equals(map.get(keyField)) || "null".equals(map.get(keyField))
+					|| Integer.parseInt(String.valueOf(map.get(keyField))) <= 0) {
+				sqls.add(getInsertSql(map, table, keyField));
+				continue;
+			}
+			Set<Object> keys = map.keySet();
+			StringBuffer sb1 = new StringBuffer("UPDATE " + table + " SET ");
+			Object keyValue = "";
+			for (Object key : keys) {
+				String field = (String) key;
+				Object value = map.get(key);
+				if (field.equals(keyField)) {
+					// value不为空,即为已存在数据
+					if (value != null && !value.equals("") && !value.equals("null") && Integer.parseInt(value.toString()) > 0) {
+						keyValue = value;
+					} else {// 否则,为新添加的数据
+						sb1 = null;
+						break;
+					}
+				}
+				sb1.append(field);
+				sb1.append("=");
+				if (value != null) {
+					String val = value.toString();
+					if (value.toString().equals("null")) {
+						sb1.append("null");
+					} else if (val.contains("%n")) {
+						sb1.append("'" + val.replaceAll("%n", "\n") + "'");
+					} else if (val.contains("'")) {
+						sb1.append("'" + value.toString().replaceAll("'", "''") + "'");
+					} else {
+						sb1.append("'" + value + "'");
+					}
+				} else {
+					sb1.append("null");
+				}
+				sb1.append(",");
+			}
+			if (sb1 != null)
+				sqls.add(sb1.substring(0, sb1.length() - 1) + " WHERE " + keyField + "='" + keyValue + "'");
+		}
+		return sqls;
+	}
+
+	public static List<String> getInsertOrUpdateSql(List<Map<Object, Object>> maps, String table, String keyField) {
+		List<String> sqls = new ArrayList<String>();
+		if (maps != null) {
+			for (Map<Object, Object> map : maps) {
+				if (map.get(keyField) == null || "".equals(map.get(keyField)) || "null".equals(map.get(keyField))
+						|| Integer.parseInt(String.valueOf(map.get(keyField))) <= 0) {
+					sqls.add(getInsertSql(map, table, keyField));
+					continue;
+				}
+				Set<Object> keys = map.keySet();
+				StringBuffer sb1 = new StringBuffer("UPDATE " + table + " SET ");
+				Object keyValue = "";
+				for (Object key : keys) {
+					String field = (String) key;
+					Object value = map.get(key);
+					if (field.equals(keyField)) {
+						// value不为空,即为已存在数据
+						if (value != null && !value.equals("") && !value.equals("null") && Integer.parseInt(value.toString()) > 0) {
+							keyValue = value;
+						} else {// 否则,为新添加的数据
+							sb1 = null;
+							break;
+						}
+					}
+					sb1.append(field);
+					sb1.append("=");
+					if (value != null) {
+						String val = value.toString();
+						if (val.matches(REG_D)) {// 判断是否是形如yyyy-mm-dd格式的日期类型数据
+							sb1.append(DateUtil.parseDateToOracleString(Constant.YMD, val));
+						} else if (val.matches(REG_DT)) {
+							sb1.append(DateUtil.parseDateToOracleString(Constant.YMD_HMS, val));
+						} else if (val.matches(REG_TS)) {
+							sb1.append(DateUtil.parseDateToOracleString(Constant.YMD_HMS, val.substring(0, val.lastIndexOf("."))));
+						} else if (value.toString().equals("null")) {
+							sb1.append("null");
+						} else if (val.contains("'")) {
+							sb1.append("'" + val.replaceAll("'", "''") + "'");
+						} else if (val.contains("%n")) {
+							sb1.append("'" + val.replaceAll("%n", "\n") + "'");
+						} else {
+							sb1.append("'" + value + "'");
+						}
+					} else {
+						sb1.append("null");
+					}
+					sb1.append(",");
+				}
+				if (sb1 != null)
+					sqls.add(sb1.substring(0, sb1.length() - 1) + " WHERE " + keyField + "='" + keyValue + "'");
+			}
+		}
+		return sqls;
+	}
+
+	public static Object createOracleLob(OracleConnection conn, String lobClassName) throws Exception {
+		@SuppressWarnings("rawtypes")
+		Class lobClass = conn.getClass().getClassLoader().loadClass(lobClassName);
+		final Integer DURATION_SESSION = new Integer(lobClass.getField("DURATION_SESSION").getInt(null));
+		final Integer MODE_READWRITE = new Integer(lobClass.getField("MODE_READWRITE").getInt(null));
+		@SuppressWarnings("unchecked")
+		Method createTemporary = lobClass.getMethod("createTemporary", new Class[] { Connection.class, boolean.class, int.class });
+		Object lob = createTemporary.invoke(null, new Object[] { conn, false, DURATION_SESSION });
+		@SuppressWarnings("unchecked")
+		Method open = lobClass.getMethod("open", new Class[] { int.class });
+		open.invoke(lob, new Object[] { MODE_READWRITE });
+		return lob;
+	}
+
+	public static String oracleClob2Str(Clob clob) throws Exception {
+		return (clob != null ? clob.getSubString(1, (int) clob.length()) : null);
+	}
+
+	public static Clob oracleStr2Clob(String str, Clob lob) throws Exception {
+		Method methodToInvoke = lob.getClass().getMethod("getCharacterOutputStream", (Class[]) null);
+		Writer writer = (Writer) methodToInvoke.invoke(lob, (Object[]) null);
+		writer.write(str);
+		writer.close();
+		return lob;
+	}
+
+	public static Map<String, String> splitCondition(String condition, String... fields) {
+		if (condition != null && condition.length() > 0) {
+			String[] strs = condition.toUpperCase().split(" AND ");
+			Map<String, String> ns = new HashMap<String, String>();
+			int i = 0;
+			int j = 0;
+			int len = condition.length();
+			for (String s : strs) {
+				i = j;
+				j += s.length();
+				if (i > 0 && j < len) {
+					i += 5;
+					j += 5;
+				}
+				if (s.trim().length() > 0) {
+					for (String field : fields) {
+						if (s.contains(field.toUpperCase()) && s.contains("=")) {
+							String[] su = condition.substring(i, j).split("=");
+							ns.put(field, su[1]);
+							break;
+						}
+					}
+				}
+			}
+			return ns;
+		}
+		return null;
+	}
+
+	/**
+	 * 拆分condition 拆出来的条件还是带单引号的
+	 * 
+	 * @param condition
+	 * @return
+	 */
+	public static Map<String, String> splitCondition(String condition) {
+		if (condition != null && condition.length() > 0) {
+			String[] strs = condition.toUpperCase().split(" AND ");
+			Map<String, String> ns = new HashMap<String, String>();
+			int i = 0;
+			int j = 0;
+			int len = condition.length();
+			for (String s : strs) {
+				i = j;
+				j += s.length();
+				if (i > 0 && j < len) {
+					i += 5;
+					j += 5;
+				}
+				if (s.trim().length() > 0) {
+					if (s.contains("=")) {
+						String[] su = condition.substring(i, j).split("=");
+						ns.put(su[0], su[1]);
+					}
+				}
+			}
+			return ns;
+		}
+		return null;
+	}
+
+}

+ 324 - 0
src/main/java/com/uas/utils/StringUtil.java

@@ -0,0 +1,324 @@
+package com.uas.utils;
+
+import org.springframework.util.StringUtils;
+import sun.misc.BASE64Decoder;
+import sun.misc.BASE64Encoder;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.HashSet;
+import java.util.Random;
+import java.util.Set;
+import java.util.regex.Pattern;
+
+/**
+ * 字符串操作工具
+ * 
+ * @author yingp
+ * 
+ */
+public class StringUtil {
+
+	/**
+	 * 查找字符串重复项
+	 * 
+	 * @param str
+	 * @param ch
+	 * @return
+	 */
+	public static String getRepeats(String str, String ch) {
+		Set<String> set = new HashSet<String>();
+		String[] datas = str.split(ch);
+		StringBuffer repeat = new StringBuffer();
+		for (String s : datas) {
+			if (s != null && !s.trim().equals("")) {
+				if (!set.contains(s)) {
+					set.add(s);
+				} else {
+					if (repeat.length() > 0) {
+						repeat.append(",");
+					}
+					repeat.append(s);
+				}
+			}
+		}
+		return repeat.toString();
+	}
+
+	/**
+	 * 去掉字符串重复项
+	 * 
+	 * @param str
+	 * @param ch
+	 * @return
+	 */
+	public static String deleteRepeats(String str, String ch) {
+		Set<String> set = new HashSet<String>();
+		String[] datas = str.split(ch);
+		StringBuffer repeat = new StringBuffer();
+		for (String s : datas) {
+			if (s != null && !s.trim().equals("")) {
+				if (!set.contains(s)) {
+					set.add(s);
+					repeat.append(s + ch);
+				}
+			}
+		}
+		return repeat.toString().substring(0, repeat.toString().length() - 1);
+	}
+
+	/**
+	 * InputStream转成字符串
+	 * 
+	 * @param in
+	 * @return
+	 */
+	public static String parserInputStream(InputStream in) {
+		BufferedReader br = new BufferedReader(new InputStreamReader(in));
+		StringBuffer buffer = new StringBuffer();
+		String line = null;
+		try {
+			while ((line = br.readLine()) != null) {
+				buffer.append(line);
+			}
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return buffer.toString();
+	}
+
+	/**
+	 * 字符串是否在数组里面
+	 */
+	public static boolean isInArray(String[] objs, String str) {
+		boolean bool = false;
+		for (String obj : objs) {
+			if (obj.equals(str)) {
+				bool = true;
+				break;
+			}
+		}
+		return bool;
+	}
+
+	/**
+	 * 判断参数是否为空、空字符串、空白格
+	 * 
+	 * @param object
+	 * @return
+	 */
+	public static boolean hasText(Object object) {
+		return object == null ? false : StringUtils.hasText(object.toString());
+	}
+
+	/**
+	 * @param object
+	 * @return 字符串
+	 */
+	public static String valueOf(Object object) {
+		return (object == null) ? null : object.toString();
+	}
+
+	/**
+	 * 当object为空时,返回nvlValue,否则返回object
+	 * 
+	 * @param object
+	 * @param nvlValue
+	 * @return
+	 */
+	public static String nvl(Object object, String nvlValue) {
+		return !hasText(object) ? nvlValue : object.toString();
+	}
+
+	/**
+	 * 当object为空时,返回nvlValue,否则返回value
+	 * 
+	 * @param object
+	 * @param value
+	 * @param nvlValue
+	 * @return
+	 */
+	public static String nvl2(Object object, String value, String nvlValue) {
+		return !hasText(object) ? nvlValue : value;
+	}
+
+	/**
+	 * 类似于String.format的逆运算
+	 * 
+	 * @param paramString
+	 *            待解析字符串
+	 * @param pattern
+	 *            表达式
+	 * @return
+	 */
+	public static String[] parse(String paramString, String pattern) {
+		String[] patternArray = pattern.split("%s");
+		int i = 0;
+		int strLen = paramString.length();
+		int len = patternArray.length;
+		int startIndex = 0;
+		int endIndex = 0;
+		String macher = null;
+		String temp = paramString;
+		String[] macherArray = new String[pattern.endsWith("%s") ? len : (len - 1)];
+		for (String patternStr : patternArray) {
+			startIndex += patternStr.length();
+			if (startIndex == strLen)
+				break;
+			temp = paramString.substring(startIndex);
+			if (i < len - 1)
+				endIndex = startIndex + temp.indexOf(patternArray[i + 1]);
+			else
+				endIndex = paramString.length();
+			macher = paramString.substring(startIndex, endIndex);
+			macherArray[i++] = macher;
+			if (i == macherArray.length)
+				break;
+			else
+				startIndex = endIndex;
+		}
+		return macherArray;
+	}
+
+	/**
+	 * 判断是否包含汉字
+	 * 
+	 * @param paramString
+	 * @return
+	 */
+	public static boolean hasChinese(String paramString) {
+		String regExp = "[\\u4e00-\\u9fa5]";
+		Pattern p = Pattern.compile(regExp);
+		return p.matcher(paramString).find();
+	}
+
+	final static char[] numbersAndLettersCharArray = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g',
+			'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5',
+			'6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U',
+			'V', 'W', 'X', 'Y', 'Z' };
+
+	/**
+	 * 产生给定长度的随机字符串
+	 * 
+	 * @param length
+	 * @return
+	 */
+	public static String getRandomString(int length) {
+		if (length < 1) {
+			return null;
+		}
+		Random randGen = new Random();
+		char[] randBuffer = new char[length];
+		for (int i = 0; i < randBuffer.length; i++) {
+			randBuffer[i] = numbersAndLettersCharArray[randGen.nextInt(71)];
+		}
+		return new String(randBuffer);
+	}
+
+	/**
+	 * 按长度分割字符串
+	 *
+	 * @param str
+	 *            原字符串
+	 * @param length
+	 */
+	public static String[] split(String str, int length) {
+		int strLen = str.length();
+		int len = (int) Math.ceil((double) strLen / length);
+		String[] strArray = new String[len];
+		for (int i = 0; i < len; i++) {
+			strArray[i] = str.substring(i * length, i < len - 1 ? (i + 1) * length : strLen);
+		}
+		return strArray;
+	}
+
+	/**
+	 * 按长度分割字符串
+	 * 
+	 * @param str
+	 *            原字符串
+	 * @param length
+	 *            切割长度
+	 * @param prevStr
+	 *            前置字符串
+	 * @param subStr
+	 *            后置字符串
+	 * @param concatStr
+	 *            连接字符串
+	 * @return
+	 */
+	public static String splitAndConcat(String str, int length, String prevStr, String subStr, String concatStr) {
+		int strLen = str.length();
+		int len = (int) Math.ceil((double) strLen / length);
+		StringBuffer buffer = new StringBuffer();
+		for (int i = 0; i < len; i++) {
+			if (i > 0)
+				buffer.append(concatStr);
+			buffer.append(prevStr).append(str.substring(i * length, i < len - 1 ? (i + 1) * length : strLen)).append(subStr);
+		}
+		return buffer.toString();
+	}
+
+	/**
+	 * 将String[] 数组转为 String
+	 * 
+	 * @param Str
+	 * @return
+	 */
+	public static String ArraysToString(String[] str) {
+		StringBuffer sb = new StringBuffer();
+		for (int i = 0; i < str.length; i++) {
+			sb.append(str[i]);
+		}
+		return sb.toString();
+	}
+
+	/**
+	 * 清除换行空格等
+	 * 
+	 * @param str
+	 * @return
+	 */
+	public static String trimBlankChars(String str) {
+		if (null != str) {
+			Pattern p = Pattern.compile("\\s*|\t|\r|\n");
+			return p.matcher(str).replaceAll("");
+		}
+		return null;
+	}
+
+	/**
+	 * 字节数组转base64字符串
+	 * 
+	 * @param bytes
+	 * @return
+	 */
+	public static String encodeBase64(byte[] bytes) {
+		if (null != bytes) {
+			BASE64Encoder encoder = new BASE64Encoder();
+			return encoder.encode(bytes);
+		}
+		return null;
+	}
+
+	/**
+	 * base64字符串转字节数组
+	 * 
+	 * @param data
+	 * @return
+	 */
+	public static byte[] decodeBase64(String data) {
+		if (null != data) {
+			BASE64Decoder decoder = new BASE64Decoder();
+			try {
+				return decoder.decodeBuffer(data);
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+		}
+		return null;
+	}
+
+}

+ 50 - 0
src/main/resources/application-dev.yml

@@ -0,0 +1,50 @@
+spring:
+    datasource:
+        type: com.alibaba.druid.pool.DruidDataSource
+        driverClassName: oracle.jdbc.OracleDriver
+        username: YITOA_DATACENTER
+        password: select!#%*(
+        url: jdbc:oracle:thin:@10.10.100.39:1521:orcl
+        initialSize: 10
+        maxActive: 80
+        minIdle: 10
+        maxWait: 60000
+        testOnBorrow: true
+        testOnReturn: false
+        testWhileIdle: true
+        validationQuery: SELECT 1 FROM DUAL
+        timeBetweenEvictionRunsMillis: 60000
+        minEvictableIdleTimeMillis: 300000
+        poolPreparedStatements: true
+        maxPoolPreparedStatementPerConnectionSize: 80
+        filters: stat
+        removeAbandoned: true
+        removeAbandonedTimeout: 1800
+    http:
+        encoding:
+            force: true
+            charset: UTF-8
+            enabled: true
+    message:
+        encoding: UTF-8
+    jpa:
+      show-sql: false
+      hibernate:
+        ddl-auto: update
+      database: oracle
+
+server:
+    tomcat:
+        uri_encoding: UTF-8
+    port: 8008
+    context-path: /uas_fbcustomer
+logging:
+  level:
+    org:
+      hibernate:
+        type: trace
+Task:
+    Method: saveFbCustomer
+    Cron: 0 55 15 * * ?
+
+

Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.