19266 1 anno fa
commit
6ffdd9861d
27 ha cambiato i file con 2973 aggiunte e 0 eliminazioni
  1. 33 0
      .gitignore
  2. BIN
      .mvn/wrapper/maven-wrapper.jar
  3. 18 0
      .mvn/wrapper/maven-wrapper.properties
  4. 316 0
      mvnw
  5. 188 0
      mvnw.cmd
  6. 73 0
      pom.xml
  7. 13 0
      src/main/java/com/data/datarepo/DataRepoApplication.java
  8. 105 0
      src/main/java/com/data/datarepo/controller/DataController.java
  9. 50 0
      src/main/java/com/data/datarepo/domain/DataRepoTable.java
  10. 41 0
      src/main/java/com/data/datarepo/services/DataAllService.java
  11. 129 0
      src/main/java/com/data/datarepo/services/DataCenterService.java
  12. 24 0
      src/main/java/com/data/datarepo/services/DataDeleteService.java
  13. 80 0
      src/main/java/com/data/datarepo/services/DataListService.java
  14. 40 0
      src/main/java/com/data/datarepo/services/DataLoadService.java
  15. 150 0
      src/main/java/com/data/datarepo/services/DataService.java
  16. 43 0
      src/main/java/com/data/datarepo/utils/DataSource.java
  17. 74 0
      src/main/java/com/data/datarepo/utils/DataSourceOra.java
  18. 55 0
      src/main/java/com/data/datarepo/utils/EquipmentNo.java
  19. 350 0
      src/main/java/com/data/datarepo/utils/SM4.java
  20. 154 0
      src/main/java/com/data/datarepo/utils/SM4Utils.java
  21. 17 0
      src/main/java/com/data/datarepo/utils/SM4_Context.java
  22. 662 0
      src/main/java/com/data/datarepo/utils/Util.java
  23. 1 0
      src/main/resources/application.properties
  24. 121 0
      src/main/resources/templates/dataList.html
  25. 106 0
      src/main/resources/templates/dataRepo.html
  26. 117 0
      src/main/resources/templates/dataResult.html
  27. 13 0
      src/test/java/com/data/datarepo/DataRepoApplicationTests.java

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

BIN
.mvn/wrapper/maven-wrapper.jar


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

@@ -0,0 +1,18 @@
+# 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.
+distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.7/apache-maven-3.8.7-bin.zip
+wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar

+ 316 - 0
mvnw

@@ -0,0 +1,316 @@
+#!/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 /usr/local/etc/mavenrc ] ; then
+    . /usr/local/etc/mavenrc
+  fi
+
+  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="`\\unset -f command; \\command -v 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/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
+    else
+      jarUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.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" || rm -f "$wrapperJarPath"
+        else
+            wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" || rm -f "$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 \
+  $MAVEN_DEBUG_OPTS \
+  -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
+  "-Dmaven.home=${M2_HOME}" \
+  "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
+  ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"

+ 188 - 0
mvnw.cmd

@@ -0,0 +1,188 @@
+@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 "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %*
+if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\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/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
+
+FOR /F "usebackq 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%/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.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 "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat"
+if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\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%
+
+cmd /C exit /B %ERROR_CODE%

+ 73 - 0
pom.xml

@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.7.10</version>
+        <relativePath/> <!-- lookup parent from repository -->
+    </parent>
+    <groupId>com.data</groupId>
+    <artifactId>data-repo</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <name>data-repo</name>
+    <description>data-repo</description>
+    <properties>
+        <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-thymeleaf</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <version>8.0.19</version>
+        </dependency>
+        <dependency>
+            <groupId>com.oracle</groupId>
+            <artifactId>ojdbc14</artifactId>
+            <version>10.2.0.2.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.mchange</groupId>
+            <artifactId>c3p0</artifactId>
+            <version>0.9.5.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>druid</artifactId>
+            <version>1.2.16</version>
+        </dependency>
+        <dependency>
+            <groupId>io.swagger</groupId>
+            <artifactId>swagger-annotations</artifactId>
+            <version>1.6.2</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>

+ 13 - 0
src/main/java/com/data/datarepo/DataRepoApplication.java

@@ -0,0 +1,13 @@
+package com.data.datarepo;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class DataRepoApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(DataRepoApplication.class, args);
+    }
+
+}

+ 105 - 0
src/main/java/com/data/datarepo/controller/DataController.java

@@ -0,0 +1,105 @@
+package com.data.datarepo.controller;
+
+import com.data.datarepo.domain.DataRepoTable;
+import com.data.datarepo.services.DataAllService;
+import com.data.datarepo.services.DataListService;
+import com.data.datarepo.services.DataLoadService;
+import com.data.datarepo.services.DataService;
+import com.mysql.cj.util.StringUtils;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+@Controller
+@RequestMapping("/data")
+public class DataController {
+
+    DataService dataService=new DataService();
+    DataAllService dataAllService=new DataAllService();
+
+    DataListService dataListService=new DataListService();
+
+    @RequestMapping("/list")
+    public String dataList(HttpServletRequest request, HttpServletResponse response) throws SQLException {
+        List<DataRepoTable> DataRepoTableList=new ArrayList<DataRepoTable>();
+        String num=request.getParameter("num");
+        if(StringUtils.isNullOrEmpty(num)){
+            DataRepoTableList=dataListService.getDataList();
+            request.setAttribute("DataRepoTableList",DataRepoTableList);
+            return "dataList";
+        }else {
+            DataRepoTableList=dataListService.getDataNumList(num);
+            request.setAttribute("DataRepoTableList",DataRepoTableList);
+            return "dataResult";
+        }
+    }
+
+    @RequestMapping("/repoResult")
+    public String datarepoResult(String[] repo_name,HttpServletRequest request, HttpServletResponse response) throws SQLException {
+        DataRepoTable dataRepoTable=new DataRepoTable();
+        List<DataRepoTable> tableList=new ArrayList<DataRepoTable>();
+        String[]  value1 = new String[repo_name.length];
+        String[] value2 = new String[repo_name.length];
+        if(repo_name!=null){
+            for(int i=0;i<repo_name.length;i++){
+                String temp = repo_name[i];
+                String[] itempsplit = temp.split("-");
+                value1[i]=itempsplit[0];
+                value2[i]=itempsplit[1];
+                dataRepoTable=dataService.testSelectResult(value1[i],value2[i]);
+                tableList.add(dataRepoTable);
+                System.out.println("表:"+repo_name[i]+"加载完成:100%");
+            }
+        }
+        request.setAttribute("DataRepoTableList",tableList);
+        return "dataRepo";
+    }
+
+    @RequestMapping("/repo")
+    public String datarepo(String[] repo_name,HttpServletRequest request, HttpServletResponse response) throws SQLException {
+        DataRepoTable dataRepoTable=new DataRepoTable();
+        List<DataRepoTable> tableList=new ArrayList<DataRepoTable>();
+        if(repo_name!=null){
+            for(int i=0;i<repo_name.length;i++){
+                dataRepoTable=dataService.testSelect(repo_name[i]);
+                tableList.add(dataRepoTable);
+                System.out.println("表:"+repo_name[i]+"加载完成:100%");
+            }
+        }
+        request.setAttribute("DataRepoTableList",tableList);
+        return "dataRepo";
+    }
+
+    @RequestMapping("/repoBJ")
+    public String datarepoBJ(String[] repo_name,HttpServletRequest request, HttpServletResponse response) throws SQLException {
+        DataRepoTable dataRepoTable=new DataRepoTable();
+        List<DataRepoTable> tableList=new ArrayList<DataRepoTable>();
+        if(repo_name!=null){
+            for(int i=0;i<repo_name.length;i++){
+                String[]  value1 = new String[repo_name.length];
+                String[] value2 = new String[repo_name.length];
+                String[]  value3 = new String[repo_name.length];
+                String[] value4 = new String[repo_name.length];
+                String temp = repo_name[i];
+                String[] itempsplit = temp.split("-");
+                value1[i]=itempsplit[0];
+                value2[i]=itempsplit[1];
+                value3[i]=itempsplit[2];
+                value4[i]=itempsplit[3];
+                dataRepoTable=dataService.testSelectBJ(value1[i],value2[i],value3[i],value4[i]);
+                tableList.add(dataRepoTable);
+                System.out.println("表:"+value1[i]+"加载完成:100%");
+            }
+        }
+        request.setAttribute("DataRepoTableList",tableList);
+        return "dataList";
+    }
+
+}

+ 50 - 0
src/main/java/com/data/datarepo/domain/DataRepoTable.java

@@ -0,0 +1,50 @@
+package com.data.datarepo.domain;
+
+public class DataRepoTable {
+
+    private String table_id;
+    private String table_name;
+    private String repo_name;
+    private String table_comment;
+    private String up_num;
+
+    public String getTable_id() {
+        return table_id;
+    }
+
+    public void setTable_id(String table_id) {
+        this.table_id = table_id;
+    }
+
+    public String getUp_num() {
+        return up_num;
+    }
+
+    public void setUp_num(String up_num) {
+        this.up_num = up_num;
+    }
+
+    public String getTable_name() {
+        return table_name;
+    }
+
+    public void setTable_name(String table_name) {
+        this.table_name = table_name;
+    }
+
+    public String getRepo_name() {
+        return repo_name;
+    }
+
+    public void setRepo_name(String repo_name) {
+        this.repo_name = repo_name;
+    }
+
+    public String getTable_comment() {
+        return table_comment;
+    }
+
+    public void setTable_comment(String table_comment) {
+        this.table_comment = table_comment;
+    }
+}

+ 41 - 0
src/main/java/com/data/datarepo/services/DataAllService.java

@@ -0,0 +1,41 @@
+package com.data.datarepo.services;
+
+import com.data.datarepo.utils.DataSource;
+import com.mysql.cj.jdbc.MysqlDataSource;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+public class DataAllService {
+    DataService dataService=new DataService();
+    public void selectAll() throws SQLException {
+
+        Connection connection = null;
+        String selectSQL = "select repo_name from data_sync_table";
+        PreparedStatement prepStmt = null;
+        try {
+            MysqlDataSource basicDS = DataSource.getInstance().getMySqlDS();
+            connection = basicDS.getConnection();
+            prepStmt = connection.prepareStatement(selectSQL);
+            ResultSet rs = prepStmt.executeQuery();
+            while(rs.next()){
+                dataService.testSelect(rs.getString("repo_name"));
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+        }finally {
+            if (prepStmt != null) {
+                prepStmt.close();
+            }
+            if (connection != null) {
+                connection.close();
+            }
+
+        }
+    }
+
+}

+ 129 - 0
src/main/java/com/data/datarepo/services/DataCenterService.java

@@ -0,0 +1,129 @@
+package com.data.datarepo.services;
+
+import com.data.datarepo.domain.DataRepoTable;
+import com.data.datarepo.utils.DataSource;
+import com.data.datarepo.utils.DataSourceOra;
+import com.mysql.cj.jdbc.MysqlDataSource;
+import oracle.jdbc.pool.OracleDataSource;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+
+public class DataCenterService extends DataSourceOra{
+
+    public void insertData(List nameList, String repo_name, List valueList) throws SQLException {
+        Connection connection = null;
+//        String selectSQL = "insert into "+repo_name+"("+name+")values ("+value+")";
+        StringBuilder sb=new StringBuilder();
+        sb.append("INSERT ALL ");
+        for (int i=0;i<valueList.size();i++){
+
+            sb.append(" INTO "+repo_name+"_OLD ("+nameList.get(i)+") values ("+valueList.get(i)+")");
+        }
+        sb.append("select * from dual");
+//        String selectSQL = "insert into "+repo_name+" select * from "+table_name+"";
+        String selectSQL=sb.toString();
+        System.out.println(selectSQL);
+        PreparedStatement prepStmt = null;
+        try {
+//            OracleDataSource basicDS = DataSourceOra.getInstance().getOds();
+            connection = this.getConn();
+            prepStmt = connection.prepareStatement(selectSQL);
+            prepStmt.execute();
+        }catch (Exception e){
+            e.printStackTrace();
+
+        }finally {
+            if (connection != null) {
+                connection.commit();
+                connection.close();
+            }
+            if (prepStmt != null) {
+                prepStmt.close();
+            }
+
+        }
+    }
+
+    public void updateData(String num, String repo_name) throws SQLException {
+        Connection connection = null;
+        String selectSQL = "update data_sync_table set equipmentNo='"+num+"'where repo_name='"+repo_name+"'";
+        PreparedStatement prepStmt = null;
+        try {
+            MysqlDataSource basicDS = DataSource.getInstance().getMySqlDS();
+            connection = basicDS.getConnection();
+            prepStmt = connection.prepareStatement(selectSQL);
+            prepStmt.executeUpdate();
+        }catch (Exception e){
+            e.printStackTrace();
+
+        }finally {
+            if (prepStmt != null) {
+                prepStmt.close();
+            }
+            if (connection != null) {
+                connection.close();
+            }
+        }
+    }
+
+    public void insertUpnum(DataRepoTable dataRepoTable) throws SQLException {
+        Connection connection = null;
+        String selectSQL = "insert into data_sync_upnum(table_name,repo_name,table_comment,equipmentNo)values (?,?,?,?)";
+        PreparedStatement prepStmt = null;
+        try {
+            MysqlDataSource basicDS = DataSource.getInstance().getMySqlDS();
+            connection = basicDS.getConnection();
+            prepStmt = connection.prepareStatement(selectSQL);
+            prepStmt.setString(1,dataRepoTable.getTable_name());
+            prepStmt.setString(2,dataRepoTable.getRepo_name());
+            prepStmt.setString(3,dataRepoTable.getTable_comment());
+            prepStmt.setString(4,dataRepoTable.getUp_num());
+            prepStmt.executeUpdate();
+        }catch (Exception e){
+            e.printStackTrace();
+
+        }finally {
+            if (prepStmt != null) {
+                prepStmt.close();
+            }
+            if (connection != null) {
+                connection.close();
+            }
+        }
+    }
+
+    public String selectState(String resname, String resvalue, String repo_name) throws SQLException {
+
+        Connection connection = null;
+        String selectSQL = "select * from "+repo_name+" where "+resname+"='"+resvalue+"'";
+        PreparedStatement prepStmt = null;
+        String state="";
+        try {
+//            MysqlDataSource basicDS = DataSource.getInstance().getMySqlDS();
+            connection = this.getConn();
+            prepStmt = connection.prepareStatement(selectSQL);
+            ResultSet rs =prepStmt.executeQuery();
+            if(rs.next()){
+                state="U";
+            }else {
+                state="I";
+            }
+
+        }catch (Exception e){
+            e.printStackTrace();
+
+        }finally {
+            if (prepStmt != null) {
+                prepStmt.close();
+            }
+            if (connection != null) {
+                connection.close();
+            }
+        }
+        return state;
+    }
+}

+ 24 - 0
src/main/java/com/data/datarepo/services/DataDeleteService.java

@@ -0,0 +1,24 @@
+package com.data.datarepo.services;
+
+import com.data.datarepo.utils.DataSourceOra;
+import oracle.jdbc.pool.OracleDataSource;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+
+public class DataDeleteService extends DataSourceOra {
+
+    public void DataDelete(String repo_name) {
+        try {
+
+            Connection conn = this.getConn();
+            String sesql = "delete from " + repo_name;
+            PreparedStatement ps2 = conn.prepareStatement(sesql);
+            ps2.executeUpdate();
+            ps2.close();
+            conn.close();
+        } catch (Exception e) {
+            System.out.println(e.getMessage());
+        }
+    }
+}

+ 80 - 0
src/main/java/com/data/datarepo/services/DataListService.java

@@ -0,0 +1,80 @@
+package com.data.datarepo.services;
+
+import com.data.datarepo.domain.DataRepoTable;
+import com.data.datarepo.utils.DataSource;
+import com.mysql.cj.jdbc.MysqlDataSource;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+public class DataListService {
+
+    public List<DataRepoTable> getDataList() throws SQLException {
+        Connection connection = null;
+        String selectSQL = "Select * from data_sync_table";
+        PreparedStatement prepStmt = null;
+        List<DataRepoTable> dataRepoTableList = new ArrayList<DataRepoTable>();
+        try {
+            MysqlDataSource basicDS = DataSource.getInstance().getMySqlDS();
+            connection = basicDS.getConnection();
+            prepStmt = connection.prepareStatement(selectSQL);
+            ResultSet rs = prepStmt.executeQuery();
+            while(rs.next()){
+                DataRepoTable dataRepoTable=new DataRepoTable();
+                dataRepoTable.setRepo_name(rs.getString("repo_name"));
+
+                dataRepoTable.setTable_comment(rs.getString("table_comment"));
+                dataRepoTable.setTable_name(rs.getString("table_name"));
+                dataRepoTable.setUp_num(rs.getString("equipmentNo"));
+                dataRepoTableList.add(dataRepoTable);
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+        }finally {
+            if (prepStmt != null) {
+                prepStmt.close();
+            }
+            if (connection != null) {
+                connection.close();
+            }
+
+        }
+        return dataRepoTableList;
+    }
+
+    public List<DataRepoTable> getDataNumList(String num) throws SQLException {
+        Connection connection = null;
+        String selectSQL = "Select * from data_sync_upnum where equipmentNo like'%"+num+"%'";
+        PreparedStatement prepStmt = null;
+        List<DataRepoTable> dataRepoTableList = new ArrayList<DataRepoTable>();
+        try {
+            MysqlDataSource basicDS = DataSource.getInstance().getMySqlDS();
+            connection = basicDS.getConnection();
+            prepStmt = connection.prepareStatement(selectSQL);
+            ResultSet rs = prepStmt.executeQuery();
+            while(rs.next()){
+                DataRepoTable dataRepoTable=new DataRepoTable();
+                dataRepoTable.setRepo_name(rs.getString("repo_name"));
+                dataRepoTable.setTable_comment(rs.getString("table_comment"));
+                dataRepoTable.setTable_name(rs.getString("table_name"));
+                dataRepoTable.setUp_num(rs.getString("equipmentNo"));
+                dataRepoTableList.add(dataRepoTable);
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+        }finally {
+            if (prepStmt != null) {
+                prepStmt.close();
+            }
+            if (connection != null) {
+                connection.close();
+            }
+
+        }
+        return dataRepoTableList;
+    }
+}

+ 40 - 0
src/main/java/com/data/datarepo/services/DataLoadService.java

@@ -0,0 +1,40 @@
+package com.data.datarepo.services;
+
+import com.data.datarepo.utils.DataSource;
+import com.data.datarepo.utils.DataSourceOra;
+import oracle.jdbc.pool.OracleDataSource;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+
+public class DataLoadService extends DataSourceOra{
+    public void testLoad(String repo_name,String up_num) throws SQLException {
+        Connection conn=null;
+        PreparedStatement ps=null;
+        try{
+            conn=this.getConn();
+            String insql="insert into "+repo_name+" select * from "+repo_name+"_OLD where UP_NUM='"+up_num+"'";
+            System.out.println(insql);
+            ps=conn.prepareStatement(insql);
+            ps.execute();
+        }
+        catch(Exception e)
+        {
+            System.out.println(e.getMessage());
+        }finally {
+            if(conn!=null){
+                conn.commit();
+                conn.close();
+            }
+            if(ps!=null){
+                ps.close();
+            }
+        }
+    }
+
+
+
+
+
+
+}

+ 150 - 0
src/main/java/com/data/datarepo/services/DataService.java

@@ -0,0 +1,150 @@
+package com.data.datarepo.services;
+
+import com.data.datarepo.domain.DataRepoTable;
+import com.data.datarepo.utils.DataSource;
+import com.data.datarepo.utils.EquipmentNo;
+import com.data.datarepo.utils.SM4Utils;
+import com.mysql.cj.jdbc.MysqlDataSource;
+import com.mysql.cj.util.StringUtils;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+
+
+public class DataService {
+
+    DataLoadService dataLoadService=new DataLoadService();
+    EquipmentNo equipmentNo =new EquipmentNo();
+    DataCenterService dataCenterService=new DataCenterService();
+    DataDeleteService dataDeleteService=new DataDeleteService();
+    public DataRepoTable testSelect(String repo_name) throws SQLException {
+        List valueList=new ArrayList();
+        List nameList=new ArrayList();
+        Connection connection = null;
+        DataRepoTable dataRepoTable=new DataRepoTable();
+        String selectSQL2 = "Select * from data_sync_table where repo_name = ?";
+
+//        String selectSQL2 = "Select * from data_sync_table where table_name = v_report_yljg_yg_cyjl";
+        PreparedStatement prepStmt = null;
+        PreparedStatement prepStmt2 = null;
+        String table_name="";
+        String table_comment="";
+        String num=equipmentNo.getNewEquipmentNo(repo_name);
+        String state="";
+//        String num="";
+
+        try {
+            MysqlDataSource basicDS = DataSource.getInstance().getMySqlDS();
+            connection = basicDS.getConnection();
+            prepStmt2 = connection.prepareStatement(selectSQL2);
+            prepStmt2.setString(1,repo_name);
+            ResultSet rs2 = prepStmt2.executeQuery();
+            rs2.next();
+            table_name=rs2.getString("table_name");
+            table_comment=rs2.getString("table_comment");
+            String selectSQL = "select * from "+table_name+"";
+            prepStmt = connection.prepareStatement(selectSQL);
+            ResultSet rs = prepStmt.executeQuery();
+            while(rs.next()){
+                String resname="";
+                String resvalue="";
+
+                for(int i=1;i<=rs.getMetaData().getColumnCount();i++){
+                    String name2=rs.getMetaData().getColumnName(i);
+                    String value2= rs.getString(i);
+                    if(i==1){
+                        state= dataCenterService.selectState(name2,value2,repo_name);
+                    }
+                    if(StringUtils.isNullOrEmpty(value2)){
+                        continue;
+                    }else if(name2.equals("AXCP0005")||name2.equals("AHDX6129")
+                            ||name2.equals("AXCP0002")||name2.equals("AHAP0026")||name2.equals("AHAP1026")
+                            ||name2.equals("AXZX0001")||name2.equals("AHAP0028")||name2.equals("AHAP0029")
+                            ||name2.equals("AXZX0010")||name2.equals("AXZX0011")||name2.equals("AHAX1326")
+                            ||name2.equals("AHAX1328")||name2.equals("AHAX1324")||name2.equals("AHBX3102")
+                            ||name2.equals("AHBX3116")||name2.equals("AHBX3115")||name2.equals("AXZX0002")
+                            ||name2.equals("AHDP5010")||name2.equals("AHDP5011")||name2.equals("AHDP5020")
+                            ||name2.equals("AHDP5021")||name2.equals("AHDP5052")||name2.equals("AHDP5055")
+                            ||name2.equals("AHDP5057")||name2.equals("AHDP5058")||name2.equals("AHDP5063")
+                            ||name2.equals("AHDP5330")||name2.equals("AHDP5098")||name2.equals("AHDP5099")
+                            ||name2.equals("AHDP5110")||name2.equals("AHAX1325") ||name2.equals("AHAE2327")
+                            ||name2.equals("AXBE0013")||name2.equals("AXBE0021")||name2.equals("AHAE0012")
+                            ||name2.equals("AXBE0018")||name2.equals("AHAE5004")||name2.equals("AHAE5026")
+                            ||name2.equals("AHAE5027")||name2.equals("AHAE5029")){
+
+                        SM4Utils sm4 = new SM4Utils();
+                        sm4.secretKey = "1234567887654321";
+                        value2=sm4.decryptData_ECB(value2);
+
+                    }else if(name2.equals("AXBE9001")||name2.equals("UPDATETIME")||name2.equals("AHDX6145")
+                            ||name2.equals("AHDX6146")||name2.equals("AHDX6158")||name2.equals("AHDX6177")
+                            ||name2.equals("AHDX6165")||name2.equals("AHDX6174")||name2.equals("AHDX6159")
+                            ||name2.equals("AHAE2493")||name2.equals("AHDX6020")||name2.equals("AXCP0039")
+                            ||name2.equals("AHDP5070")||name2.equals("AHDP5071")||name2.equals("AHDP5112")
+                            ||name2.equals("AHDP5082")||name2.equals("AHDP5102")||name2.equals("AHDP5039")
+                            ||name2.equals("AHDP5040")||name2.equals("AHAE2325")||name2.equals("AHAE2328")
+                            ||name2.equals("AHAE2349")||name2.equals("AXBE0017")||name2.equals("AHAE0041")
+                            ||name2.equals("AHAE5024")||name2.equals("AHAE5024")){
+
+                        resname+=name2+",";
+                        resvalue+="to_date("+value2+",'yyyymmdd')"+",";
+                        continue;
+                    }
+                        resname+=name2+",";
+                        resvalue+="'"+value2+"'"+",";
+
+                }
+                resname=resname+"UP_NUM"+",DATA_STATE";
+                resvalue=resvalue+"'"+num+"'"+","+"'"+state+"'";
+                nameList.add(resname);
+                valueList.add(resvalue);
+            }
+            dataCenterService.insertData(nameList,repo_name,valueList);
+            dataCenterService.updateData(num,repo_name);
+            dataDeleteService.DataDelete(repo_name);//清除oracle中数据
+            dataRepoTable.setTable_name(table_name);
+            dataRepoTable.setTable_comment(table_comment);
+            dataRepoTable.setRepo_name(repo_name);
+            dataRepoTable.setUp_num(num);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }finally {
+            if (prepStmt2 != null) {
+                prepStmt2.close();
+            }
+            if (connection != null) {
+                connection.close();
+            }
+        }
+        return dataRepoTable;
+    }
+
+
+
+    public DataRepoTable testSelectBJ(String repo_name,String up_num,String table_name,String table_comment) throws SQLException {
+        DataRepoTable dataRepoTable =new DataRepoTable();
+        dataRepoTable.setRepo_name(repo_name);
+        dataRepoTable.setUp_num(up_num);
+        dataRepoTable.setTable_name(table_name);
+        dataRepoTable.setTable_comment(table_comment);
+        dataLoadService.testLoad(repo_name,up_num);
+        dataCenterService.insertUpnum(dataRepoTable);
+        return dataRepoTable;
+    }
+
+    public DataRepoTable testSelectResult(String repo_name,String up_num) throws SQLException {
+            DataRepoTable dataRepoTable=new DataRepoTable();
+            dataCenterService.updateData(up_num,repo_name);
+            dataRepoTable.setRepo_name(repo_name);
+            dataRepoTable.setUp_num(up_num);
+        return dataRepoTable;
+
+    }
+}

+ 43 - 0
src/main/java/com/data/datarepo/utils/DataSource.java

@@ -0,0 +1,43 @@
+package com.data.datarepo.utils;
+
+
+import com.mysql.cj.jdbc.MysqlDataSource;
+
+public class DataSource {
+
+    private static final String DRIVER_CLASS = "com.mysql.cj.jdbc.Driver";
+//    private static final String DB_CONNECTION_URL = "jdbc:mysql://19.135.92.130:56612/mz-cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8";
+    private static final String DB_CONNECTION_URL = "jdbc:mysql://121.36.73.159:56612/mz-cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8";
+//    private static final String DB_USER = "dev";
+//    private static final String DB_PWD = "sckj2022@123";
+    private static final String DB_USER = "dev";
+    private static final String DB_PWD = "sckj2022@123";
+    private static DataSource ds;
+    private MysqlDataSource mySqlDS = new MysqlDataSource();
+
+    //private constructor
+    private DataSource() {
+        //mySqlDS.setDriverClassName(DRIVER_CLASS);
+        mySqlDS.setUrl(DB_CONNECTION_URL);
+        mySqlDS.setUser(DB_USER);
+        mySqlDS.setPassword(DB_PWD);
+    }
+
+    /**
+     * static method for getting instance.
+     */
+    public static DataSource getInstance() {
+        if (ds == null) {
+            ds = new DataSource();
+        }
+        return ds;
+    }
+
+    public MysqlDataSource getMySqlDS() {
+        return mySqlDS;
+    }
+
+    public void setMySqlDS(MysqlDataSource mySqlDS) {
+        this.mySqlDS = mySqlDS;
+    }
+}

+ 74 - 0
src/main/java/com/data/datarepo/utils/DataSourceOra.java

@@ -0,0 +1,74 @@
+package com.data.datarepo.utils;
+
+
+import com.mysql.cj.jdbc.MysqlDataSource;
+import oracle.jdbc.pool.OracleDataSource;
+
+import java.sql.*;
+
+public class DataSourceOra {
+
+//    private static final String DB_DRIVERTYPE="thin";
+//    private static final String DB_NetworkProtocol="tcp";
+//    private static final String DB_ServerName="10.16.4.7";
+//    private static final String DB_DatabaseName="helowin";
+//    private static final int DB_PortNumber=1521;
+//    private static final String DB_USER = "ylxt";
+//    private static final String DB_PWD = "ylxt";
+    public static final String DRIVER="oracle.jdbc.driver.OracleDriver";
+    public static final String URL="jdbc:oracle:thin:@10.16.4.7:1521:helowin";
+    public static final String UID="ylxt";
+    public static final String PWD="ylxt";
+
+    /***
+     * 加载驱动,打开数据库连接
+     * @return
+     */
+    public Connection getConn(){
+        try {
+            Class.forName(DRIVER);
+            System.out.println("数据库驱动加载成功");
+        } catch (ClassNotFoundException e) {
+            System.out.println("找不到数据库驱动");
+            e.printStackTrace();
+        }
+        try {
+            Connection conn= DriverManager.getConnection(URL,UID,PWD);
+            System.out.println("连接数据库成功");
+            return conn;
+        } catch (SQLException e) {
+            System.out.println("连接数据库失败");
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    /***
+     * 关闭连接释放所有资源
+     * @param conn
+     * @param pstmt
+     * @param rs
+     * @throws SQLException
+     */
+    public void closeAll(Connection conn, PreparedStatement pstmt, ResultSet rs) throws SQLException
+    {
+        if(rs!=null)rs.close();
+        if(pstmt!=null)pstmt.close();
+        if(conn!=null)conn.close();
+    }
+
+    public int executeSql(String preParedSql,String[] param) throws SQLException
+    {
+        Connection conn=this.getConn();
+        PreparedStatement pstmt=null;
+        pstmt=conn.prepareStatement(preParedSql);
+        if(param!=null)
+        {
+            for(int i=1;i<=param.length;i++)
+                pstmt.setString(i, param[i-1]);
+        }
+        int num=pstmt.executeUpdate();
+        this.closeAll(conn, pstmt, null);
+        return num;
+    }
+}

+ 55 - 0
src/main/java/com/data/datarepo/utils/EquipmentNo.java

@@ -0,0 +1,55 @@
+package com.data.datarepo.utils;
+
+import com.mysql.cj.jdbc.MysqlDataSource;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+public class EquipmentNo extends DataSourceOra{
+
+    public String getNewEquipmentNo(String equipmentType) throws SQLException {
+
+        SimpleDateFormat f = new SimpleDateFormat("yyyyMMdd");//设置日期格式
+        String date = f.format(new Date(System.currentTimeMillis()));
+        Connection connection = null;
+        String selectSQL = "select up_num from "+equipmentType+"_OLD where up_num like '220000000000_"+equipmentType+"_"+date+"%' order by up_num desc";
+        PreparedStatement prepStmt = null;
+        String Number="";
+        try {
+//            MysqlDataSource basicDS = DataSource.getInstance().getMySqlDS();
+            connection = this.getConn();
+            prepStmt = connection.prepareStatement(selectSQL);
+            ResultSet rs = prepStmt.executeQuery();
+            if(rs.next()){
+                String n =rs.getString("up_num");
+                int intNumber = Integer.parseInt(n.substring(n.length()-2));
+                intNumber++;
+                Number = String.valueOf(intNumber);
+                for (int i = 0; i < 2; i++){
+                    Number = Number.length() < 2 ? "0" + Number : Number;
+                }
+                Number = "220000000000_"+equipmentType+"_" + date+"_" + Number;
+            }else{
+                Number = "220000000000_"+equipmentType+"_" + date+"_" + "01";
+            }
+
+        }catch (Exception e){
+            e.printStackTrace();
+        }finally {
+            if (prepStmt != null) {
+                prepStmt.close();
+            }
+            if (connection != null) {
+                connection.close();
+            }
+
+        }
+        return Number;
+
+    }
+
+}

+ 350 - 0
src/main/java/com/data/datarepo/utils/SM4.java

@@ -0,0 +1,350 @@
+package com.data.datarepo.utils;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+
+public class SM4
+{
+    public static final int SM4_ENCRYPT = 1;
+
+    public static final int SM4_DECRYPT = 0;
+
+    private int GET_ULONG_BE(byte[] b, int i)
+    {
+        int n = (int)(b[i] & 0xff) << 24 | (int)((b[i + 1] & 0xff) << 16) | (int)((b[i + 2] & 0xff) << 8) | (int)(b[i + 3] & 0xff) & 0xffffffff;
+        return n;
+    }
+
+    private void PUT_ULONG_BE(int n, byte[] b, int i)
+    {
+        b[i] = (byte)(int)(0xFF & n >> 24);
+        b[i + 1] = (byte)(int)(0xFF & n >> 16);
+        b[i + 2] = (byte)(int)(0xFF & n >> 8);
+        b[i + 3] = (byte)(int)(0xFF & n);
+    }
+
+    private int SHL(int x, int n)
+    {
+        return (x & 0xFFFFFFFF) << n;
+    }
+
+    private int ROTL(int x, int n)
+    {
+        return SHL(x, n) | x >> (32 - n);
+    }
+
+    public static final byte[] SboxTable = { (byte) 0xd6, (byte) 0x90, (byte) 0xe9, (byte) 0xfe,
+            (byte) 0xcc, (byte) 0xe1, 0x3d, (byte) 0xb7, 0x16, (byte) 0xb6,
+            0x14, (byte) 0xc2, 0x28, (byte) 0xfb, 0x2c, 0x05, 0x2b, 0x67,
+            (byte) 0x9a, 0x76, 0x2a, (byte) 0xbe, 0x04, (byte) 0xc3,
+            (byte) 0xaa, 0x44, 0x13, 0x26, 0x49, (byte) 0x86, 0x06,
+            (byte) 0x99, (byte) 0x9c, 0x42, 0x50, (byte) 0xf4, (byte) 0x91,
+            (byte) 0xef, (byte) 0x98, 0x7a, 0x33, 0x54, 0x0b, 0x43,
+            (byte) 0xed, (byte) 0xcf, (byte) 0xac, 0x62, (byte) 0xe4,
+            (byte) 0xb3, 0x1c, (byte) 0xa9, (byte) 0xc9, 0x08, (byte) 0xe8,
+            (byte) 0x95, (byte) 0x80, (byte) 0xdf, (byte) 0x94, (byte) 0xfa,
+            0x75, (byte) 0x8f, 0x3f, (byte) 0xa6, 0x47, 0x07, (byte) 0xa7,
+            (byte) 0xfc, (byte) 0xf3, 0x73, 0x17, (byte) 0xba, (byte) 0x83,
+            0x59, 0x3c, 0x19, (byte) 0xe6, (byte) 0x85, 0x4f, (byte) 0xa8,
+            0x68, 0x6b, (byte) 0x81, (byte) 0xb2, 0x71, 0x64, (byte) 0xda,
+            (byte) 0x8b, (byte) 0xf8, (byte) 0xeb, 0x0f, 0x4b, 0x70, 0x56,
+            (byte) 0x9d, 0x35, 0x1e, 0x24, 0x0e, 0x5e, 0x63, 0x58, (byte) 0xd1,
+            (byte) 0xa2, 0x25, 0x22, 0x7c, 0x3b, 0x01, 0x21, 0x78, (byte) 0x87,
+            (byte) 0xd4, 0x00, 0x46, 0x57, (byte) 0x9f, (byte) 0xd3, 0x27,
+            0x52, 0x4c, 0x36, 0x02, (byte) 0xe7, (byte) 0xa0, (byte) 0xc4,
+            (byte) 0xc8, (byte) 0x9e, (byte) 0xea, (byte) 0xbf, (byte) 0x8a,
+            (byte) 0xd2, 0x40, (byte) 0xc7, 0x38, (byte) 0xb5, (byte) 0xa3,
+            (byte) 0xf7, (byte) 0xf2, (byte) 0xce, (byte) 0xf9, 0x61, 0x15,
+            (byte) 0xa1, (byte) 0xe0, (byte) 0xae, 0x5d, (byte) 0xa4,
+            (byte) 0x9b, 0x34, 0x1a, 0x55, (byte) 0xad, (byte) 0x93, 0x32,
+            0x30, (byte) 0xf5, (byte) 0x8c, (byte) 0xb1, (byte) 0xe3, 0x1d,
+            (byte) 0xf6, (byte) 0xe2, 0x2e, (byte) 0x82, 0x66, (byte) 0xca,
+            0x60, (byte) 0xc0, 0x29, 0x23, (byte) 0xab, 0x0d, 0x53, 0x4e, 0x6f,
+            (byte) 0xd5, (byte) 0xdb, 0x37, 0x45, (byte) 0xde, (byte) 0xfd,
+            (byte) 0x8e, 0x2f, 0x03, (byte) 0xff, 0x6a, 0x72, 0x6d, 0x6c, 0x5b,
+            0x51, (byte) 0x8d, 0x1b, (byte) 0xaf, (byte) 0x92, (byte) 0xbb,
+            (byte) 0xdd, (byte) 0xbc, 0x7f, 0x11, (byte) 0xd9, 0x5c, 0x41,
+            0x1f, 0x10, 0x5a, (byte) 0xd8, 0x0a, (byte) 0xc1, 0x31,
+            (byte) 0x88, (byte) 0xa5, (byte) 0xcd, 0x7b, (byte) 0xbd, 0x2d,
+            0x74, (byte) 0xd0, 0x12, (byte) 0xb8, (byte) 0xe5, (byte) 0xb4,
+            (byte) 0xb0, (byte) 0x89, 0x69, (byte) 0x97, 0x4a, 0x0c,
+            (byte) 0x96, 0x77, 0x7e, 0x65, (byte) 0xb9, (byte) 0xf1, 0x09,
+            (byte) 0xc5, 0x6e, (byte) 0xc6, (byte) 0x84, 0x18, (byte) 0xf0,
+            0x7d, (byte) 0xec, 0x3a, (byte) 0xdc, 0x4d, 0x20, 0x79,
+            (byte) 0xee, 0x5f, 0x3e, (byte) 0xd7, (byte) 0xcb, 0x39, 0x48 };
+
+    public static final int[] FK = { 0xa3b1bac6, 0x56aa3350, 0x677d9197, 0xb27022dc };
+
+    public static final int[] CK = { 0x00070e15,0x1c232a31,0x383f464d,0x545b6269,
+            0x70777e85,0x8c939aa1,0xa8afb6bd,0xc4cbd2d9,
+            0xe0e7eef5,0xfc030a11,0x181f262d,0x343b4249,
+            0x50575e65,0x6c737a81,0x888f969d,0xa4abb2b9,
+            0xc0c7ced5,0xdce3eaf1,0xf8ff060d,0x141b2229,
+            0x30373e45,0x4c535a61,0x686f767d,0x848b9299,
+            0xa0a7aeb5,0xbcc3cad1,0xd8dfe6ed,0xf4fb0209,
+            0x10171e25,0x2c333a41,0x484f565d,0x646b7279 };
+
+    private byte sm4Sbox(byte inch)
+    {
+        int i = inch & 0xFF;
+        byte retVal = SboxTable[i];
+        return retVal;
+    }
+
+    private int sm4Lt(int ka)
+    {
+        int bb = 0;
+        int c = 0;
+        byte[] a = new byte[4];
+        byte[] b = new byte[4];
+        PUT_ULONG_BE(ka, a, 0);
+        b[0] = sm4Sbox(a[0]);
+        b[1] = sm4Sbox(a[1]);
+        b[2] = sm4Sbox(a[2]);
+        b[3] = sm4Sbox(a[3]);
+        bb = GET_ULONG_BE(b, 0);
+        c = bb ^ ROTL(bb, 2) ^ ROTL(bb, 10) ^ ROTL(bb, 18) ^ ROTL(bb, 24);
+        return c;
+    }
+
+    private int sm4F(int x0, int x1, int x2, int x3, int rk)
+    {
+        return x0 ^ sm4Lt(x1 ^ x2 ^ x3 ^ rk);
+    }
+
+    private int sm4CalciRK(int ka)
+    {
+        int bb = 0;
+        int rk = 0;
+        byte[] a = new byte[4];
+        byte[] b = new byte[4];
+        PUT_ULONG_BE(ka, a, 0);
+        b[0] = sm4Sbox(a[0]);
+        b[1] = sm4Sbox(a[1]);
+        b[2] = sm4Sbox(a[2]);
+        b[3] = sm4Sbox(a[3]);
+        bb = GET_ULONG_BE(b, 0);
+        rk = bb ^ ROTL(bb, 13) ^ ROTL(bb, 23);
+        return rk;
+    }
+
+    private void sm4_setkey(int[] SK, byte[] key)
+    {
+        int[] MK = new int[4];
+        int[] k = new int[36];
+        int i = 0;
+        MK[0] = GET_ULONG_BE(key, 0);
+        MK[1] = GET_ULONG_BE(key, 4);
+        MK[2] = GET_ULONG_BE(key, 8);
+        MK[3] = GET_ULONG_BE(key, 12);
+        k[0] = MK[0] ^ (int) FK[0];
+        k[1] = MK[1] ^ (int) FK[1];
+        k[2] = MK[2] ^ (int) FK[2];
+        k[3] = MK[3] ^ (int) FK[3];
+        for (; i < 32; i++)
+        {
+            k[(i + 4)] = (k[i] ^ sm4CalciRK(k[(i + 1)] ^ k[(i + 2)] ^ k[(i + 3)] ^ (int) CK[i]));
+            SK[i] = k[(i + 4)];
+        }
+    }
+
+    private void sm4_one_round(int[] sk, byte[] input, byte[] output)
+    {
+        int i = 0;
+        int[] ulbuf = new int[36];
+        ulbuf[0] = GET_ULONG_BE(input, 0);
+        ulbuf[1] = GET_ULONG_BE(input, 4);
+        ulbuf[2] = GET_ULONG_BE(input, 8);
+        ulbuf[3] = GET_ULONG_BE(input, 12);
+        while (i < 32)
+        {
+            ulbuf[(i + 4)] = sm4F(ulbuf[i], ulbuf[(i + 1)], ulbuf[(i + 2)], ulbuf[(i + 3)], sk[i]);
+            i++;
+        }
+        PUT_ULONG_BE(ulbuf[35], output, 0);
+        PUT_ULONG_BE(ulbuf[34], output, 4);
+        PUT_ULONG_BE(ulbuf[33], output, 8);
+        PUT_ULONG_BE(ulbuf[32], output, 12);
+    }
+
+    private byte[] padding(byte[] input, int mode)
+    {
+        if (input == null)
+        {
+            return null;
+        }
+
+        byte[] ret = (byte[]) null;
+        if (mode == SM4_ENCRYPT)
+        {
+            int p = 16 - input.length % 16;
+            ret = new byte[input.length + p];
+            System.arraycopy(input, 0, ret, 0, input.length);
+            for (int i = 0; i < p; i++)
+            {
+                ret[input.length + i] = (byte) p;
+            }
+        }
+        else
+        {
+            int p = input[input.length - 1];
+            ret = new byte[input.length - p];
+            System.arraycopy(input, 0, ret, 0, input.length - p);
+        }
+        return ret;
+    }
+
+    public void sm4_setkey_enc(SM4_Context ctx, byte[] key) throws Exception
+    {
+        if (ctx == null)
+        {
+            throw new Exception("ctx is null!");
+        }
+
+        if (key == null || key.length != 16)
+        {
+            throw new Exception("key error!");
+        }
+
+        ctx.mode = SM4_ENCRYPT;
+        sm4_setkey(ctx.sk, key);
+    }
+
+
+    public byte[] sm4_crypt_ecb(SM4_Context ctx, byte[] input) throws Exception
+    {
+        if (input == null)
+        {
+            throw new Exception("input is null!");
+        }
+
+        if ((ctx.isPadding) && (ctx.mode == SM4_ENCRYPT))
+        {
+            input = padding(input, SM4_ENCRYPT);
+        }
+
+        int length = input.length;
+        ByteArrayInputStream bins = new ByteArrayInputStream(input);
+        ByteArrayOutputStream bous = new ByteArrayOutputStream();
+        for(; length > 0; length -= 16)
+        {
+            byte[] in = new byte[16];
+            byte[] out = new byte[16];
+            bins.read(in);
+            sm4_one_round(ctx.sk, in, out);
+            bous.write(out);
+        }
+
+        byte[] output = bous.toByteArray();
+        if (ctx.isPadding && ctx.mode == SM4_DECRYPT)
+        {
+            output = padding(output, SM4_DECRYPT);
+        }
+        bins.close();
+        bous.close();
+        return output;
+    }
+
+
+    public void sm4_setkey_dec(SM4_Context ctx, byte[] key) throws Exception
+    {
+        if (ctx == null)
+        {
+            throw new Exception("ctx is null!");
+        }
+
+        if (key == null || key.length != 16)
+        {
+            throw new Exception("key error!");
+        }
+
+        int i = 0;
+        ctx.mode = SM4_DECRYPT;
+        sm4_setkey(ctx.sk, key);
+        for (i = 0; i < 16; i++)
+        {
+            SWAP(ctx.sk, i);
+        }
+    }
+
+
+
+    private void SWAP(int[] sk, int i)
+    {
+        int t = sk[i];
+        sk[i] = sk[(31 - i)];
+        sk[(31 - i)] = t;
+    }
+
+
+
+
+    public byte[] sm4_crypt_cbc(SM4_Context ctx, byte[] iv, byte[] input) throws Exception
+    {
+        if (iv == null || iv.length != 16)
+        {
+            throw new Exception("iv error!");
+        }
+
+        if (input == null)
+        {
+            throw new Exception("input is null!");
+        }
+
+        if (ctx.isPadding && ctx.mode == SM4_ENCRYPT)
+        {
+            input = padding(input, SM4_ENCRYPT);
+        }
+
+        int i = 0;
+        int length = input.length;
+        ByteArrayInputStream bins = new ByteArrayInputStream(input);
+        ByteArrayOutputStream bous = new ByteArrayOutputStream();
+        if (ctx.mode == SM4_ENCRYPT)
+        {
+            for(; length > 0; length -= 16)
+            {
+                byte[] in = new byte[16];
+                byte[] out = new byte[16];
+                byte[] out1 = new byte[16];
+
+                bins.read(in);
+                for (i = 0; i < 16; i++)
+                {
+                    out[i] = ((byte) (in[i] ^ iv[i]));
+                }
+                sm4_one_round(ctx.sk, out, out1);
+                System.arraycopy(out1, 0, iv, 0, 16);
+                bous.write(out1);
+            }
+        }
+        else
+        {
+            byte[] temp = new byte[16];
+            for(; length > 0; length -= 16)
+            {
+                byte[] in = new byte[16];
+                byte[] out = new byte[16];
+                byte[] out1 = new byte[16];
+
+                bins.read(in);
+                System.arraycopy(in, 0, temp, 0, 16);
+                sm4_one_round(ctx.sk, in, out);
+                for (i = 0; i < 16; i++)
+                {
+                    out1[i] = ((byte) (out[i] ^ iv[i]));
+                }
+                System.arraycopy(temp, 0, iv, 0, 16);
+                bous.write(out1);
+            }
+        }
+        byte[] output = bous.toByteArray();
+        if (ctx.isPadding && ctx.mode == SM4_DECRYPT)
+        {
+            output = padding(output, SM4_DECRYPT);
+        }
+        bins.close();
+        bous.close();
+        return output;
+    }
+}

+ 154 - 0
src/main/java/com/data/datarepo/utils/SM4Utils.java

@@ -0,0 +1,154 @@
+package com.data.datarepo.utils;
+
+import java.io.IOException;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.Base64;
+
+public class SM4Utils
+{
+    public String secretKey = "";
+    public String iv = "";
+    private boolean hexString = false;
+    private  Base64.Encoder base64Encoder = Base64.getEncoder();
+    private  Base64.Decoder base64Decoder = Base64.getDecoder();
+    public SM4Utils()
+    {
+    }
+
+    public String encryptData_ECB(String plainText)
+    {
+        try
+        {
+            SM4_Context ctx = new SM4_Context();
+            ctx.isPadding = true;
+            ctx.mode = SM4.SM4_ENCRYPT;
+            byte[] keyBytes;
+            keyBytes = secretKey.getBytes();
+            SM4 sm4 = new SM4();
+            sm4.sm4_setkey_enc(ctx, keyBytes);
+            byte[] encrypted = sm4.sm4_crypt_ecb(ctx, plainText.getBytes("UTF-8"));
+            String cipherText = base64Encoder.encodeToString(encrypted);
+            if (cipherText != null && cipherText.trim().length() > 0)
+            {
+                Pattern p = Pattern.compile("\\s*|\t|\r|\n");
+                Matcher m = p.matcher(cipherText);
+                cipherText = m.replaceAll("");
+            }
+            return cipherText;
+        }
+        catch (Exception e)
+        {
+//            e.printStackTrace();
+            return null;
+        }
+    }
+
+    public String decryptData_ECB(String cipherText)
+    {
+        try
+        {
+            SM4_Context ctx = new SM4_Context();
+            ctx.isPadding = true;
+            ctx.mode = SM4.SM4_DECRYPT;
+            byte[] keyBytes;
+            keyBytes = secretKey.getBytes();
+            SM4 sm4 = new SM4();
+            sm4.sm4_setkey_dec(ctx, keyBytes);
+            byte[] decrypted = sm4.sm4_crypt_ecb(ctx, base64Decoder.decode(cipherText));
+            return new String(decrypted, "UTF-8");
+        }
+        catch (Exception e)
+        {
+            //e.printStackTrace();
+            return null;
+        }
+    }
+
+    public String encryptData_CBC(String plainText){
+        try{
+            SM4_Context ctx = new SM4_Context();
+            ctx.isPadding = true;
+            ctx.mode = SM4.SM4_ENCRYPT;
+
+            byte[] keyBytes;
+            byte[] ivBytes;
+
+            keyBytes = secretKey.getBytes();
+            ivBytes = iv.getBytes();
+
+            SM4 sm4 = new SM4();
+            sm4.sm4_setkey_enc(ctx, keyBytes);
+            byte[] encrypted = sm4.sm4_crypt_cbc(ctx, ivBytes, plainText.getBytes("UTF-8"));
+            String cipherText = base64Encoder.encodeToString(encrypted);
+            if (cipherText != null && cipherText.trim().length() > 0)
+            {
+                Pattern p = Pattern.compile("\\s*|\t|\r|\n");
+                Matcher m = p.matcher(cipherText);
+                cipherText = m.replaceAll("");
+            }
+            return cipherText;
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    public String decryptData_CBC(String cipherText)
+    {
+        try
+        {
+            SM4_Context ctx = new SM4_Context();
+            ctx.isPadding = true;
+            ctx.mode = SM4.SM4_DECRYPT;
+
+            byte[] keyBytes;
+            byte[] ivBytes;
+            if (hexString)
+            {
+                keyBytes = Util.hexStringToBytes(secretKey);
+                ivBytes = Util.hexStringToBytes(iv);
+            }
+            else
+            {
+                keyBytes = secretKey.getBytes();
+                ivBytes = iv.getBytes();
+            }
+
+            SM4 sm4 = new SM4();
+            sm4.sm4_setkey_dec(ctx, keyBytes);
+            byte[] decrypted = sm4.sm4_crypt_cbc(ctx, ivBytes, base64Decoder.decode(cipherText));
+            return new String(decrypted, "UTF-8");
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+
+    public static void main(String[] args) throws IOException
+    {
+        String plainText ="Keep自律给我自由!321";
+        SM4Utils sm4 = new SM4Utils();
+        sm4.secretKey = "1234567887654321";
+        // plainText.getBytes("UTF-8");
+        System.out.println("ECB模式");
+        String cipherText = sm4.encryptData_ECB(plainText);
+        System.out.println("密文:" + cipherText);
+        plainText = sm4.decryptData_ECB("PLgyMzK8KMMD/eJL3V3aQckTAvBimNHgu0lUR6esnxn/3XpBXdd7o4bN4VZXC8hx");
+        System.out.println("明文:" + plainText);
+
+        System.out.println("CBC模式");
+        sm4.iv = "ed32fb5d34388842";
+        cipherText = sm4.encryptData_CBC(plainText);
+        System.out.println("密文:" + cipherText);
+
+        plainText = sm4.decryptData_CBC(cipherText);
+        System.out.println("明文:" + plainText);
+
+    }
+}

+ 17 - 0
src/main/java/com/data/datarepo/utils/SM4_Context.java

@@ -0,0 +1,17 @@
+package com.data.datarepo.utils;
+
+public class SM4_Context
+{
+    public int mode;
+
+    public int[] sk;
+
+    public boolean isPadding;
+
+    public SM4_Context()
+    {
+        this.mode = 1;
+        this.isPadding = true;
+        this.sk = new int[32];
+    }
+}

+ 662 - 0
src/main/java/com/data/datarepo/utils/Util.java

@@ -0,0 +1,662 @@
+package com.data.datarepo.utils;
+
+import java.math.BigInteger;
+
+public class Util
+{
+    /**
+     * 整形转换成网络传输的字节流(字节数组)型数据
+     *
+     * @param num 一个整型数据
+     * @return 4个字节的自己数组
+     */
+    public static byte[] intToBytes(int num)
+    {
+        byte[] bytes = new byte[4];
+        bytes[0] = (byte) (0xff & (num >> 0));
+        bytes[1] = (byte) (0xff & (num >> 8));
+        bytes[2] = (byte) (0xff & (num >> 16));
+        bytes[3] = (byte) (0xff & (num >> 24));
+        return bytes;
+    }
+
+    /**
+     * 四个字节的字节数据转换成一个整形数据
+     *
+     * @param bytes 4个字节的字节数组
+     * @return 一个整型数据
+     */
+    public static int byteToInt(byte[] bytes)
+    {
+        int num = 0;
+        int temp;
+        temp = (0x000000ff & (bytes[0])) << 0;
+        num = num | temp;
+        temp = (0x000000ff & (bytes[1])) << 8;
+        num = num | temp;
+        temp = (0x000000ff & (bytes[2])) << 16;
+        num = num | temp;
+        temp = (0x000000ff & (bytes[3])) << 24;
+        num = num | temp;
+        return num;
+    }
+
+    /**
+     * 长整形转换成网络传输的字节流(字节数组)型数据
+     *
+     * @param num 一个长整型数据
+     * @return 4个字节的自己数组
+     */
+    public static byte[] longToBytes(long num)
+    {
+        byte[] bytes = new byte[8];
+        for (int i = 0; i < 8; i++)
+        {
+            bytes[i] = (byte) (0xff & (num >> (i * 8)));
+        }
+
+        return bytes;
+    }
+
+    /**
+     * 大数字转换字节流(字节数组)型数据
+     *
+     * @param n
+     * @return
+     */
+    public static byte[] byteConvert32Bytes(BigInteger n)
+    {
+        byte tmpd[] = (byte[])null;
+        if(n == null)
+        {
+            return null;
+        }
+
+        if(n.toByteArray().length == 33)
+        {
+            tmpd = new byte[32];
+            System.arraycopy(n.toByteArray(), 1, tmpd, 0, 32);
+        }
+        else if(n.toByteArray().length == 32)
+        {
+            tmpd = n.toByteArray();
+        }
+        else
+        {
+            tmpd = new byte[32];
+            for(int i = 0; i < 32 - n.toByteArray().length; i++)
+            {
+                tmpd[i] = 0;
+            }
+            System.arraycopy(n.toByteArray(), 0, tmpd, 32 - n.toByteArray().length, n.toByteArray().length);
+        }
+        return tmpd;
+    }
+
+    /**
+     * 换字节流(字节数组)型数据转大数字
+     *
+     * @param b
+     * @return
+     */
+    public static BigInteger byteConvertInteger(byte[] b)
+    {
+        if (b[0] < 0)
+        {
+            byte[] temp = new byte[b.length + 1];
+            temp[0] = 0;
+            System.arraycopy(b, 0, temp, 1, b.length);
+            return new BigInteger(temp);
+        }
+        return new BigInteger(b);
+    }
+
+    /**
+     * 根据字节数组获得值(十六进制数字)
+     *
+     * @param bytes
+     * @return
+     */
+    public static String getHexString(byte[] bytes)
+    {
+        return getHexString(bytes, true);
+    }
+
+    /**
+     * 根据字节数组获得值(十六进制数字)
+     *
+     * @param bytes
+     * @param upperCase
+     * @return
+     */
+    public static String getHexString(byte[] bytes, boolean upperCase)
+    {
+        String ret = "";
+        for (int i = 0; i < bytes.length; i++)
+        {
+            ret += Integer.toString((bytes[i] & 0xff) + 0x100, 16).substring(1);
+        }
+        return upperCase ? ret.toUpperCase() : ret;
+    }
+
+    /**
+     * 打印十六进制字符串
+     *
+     * @param bytes
+     */
+    public static void printHexString(byte[] bytes)
+    {
+        for (int i = 0; i < bytes.length; i++)
+        {
+            String hex = Integer.toHexString(bytes[i] & 0xFF);
+            if (hex.length() == 1)
+            {
+                hex = '0' + hex;
+            }
+            System.out.print("0x" + hex.toUpperCase() + ",");
+        }
+        System.out.println("");
+    }
+
+    /**
+     * Convert hex string to byte[]
+     *
+     * @param hexString
+     *            the hex string
+     * @return byte[]
+     */
+    public static byte[] hexStringToBytes(String hexString)
+    {
+        if (hexString == null || hexString.equals(""))
+        {
+            return null;
+        }
+
+        hexString = hexString.toUpperCase();
+        int length = hexString.length() / 2;
+        char[] hexChars = hexString.toCharArray();
+        byte[] d = new byte[length];
+        for (int i = 0; i < length; i++)
+        {
+            int pos = i * 2;
+            d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));
+        }
+        return d;
+    }
+
+    /**
+     * Convert char to byte
+     *
+     * @param c
+     *            char
+     * @return byte
+     */
+    public static byte charToByte(char c)
+    {
+        return (byte) "0123456789ABCDEF".indexOf(c);
+    }
+
+    /**
+     * 用于建立十六进制字符的输出的小写字符数组
+     */
+    private static final char[] DIGITS_LOWER = {'0', '1', '2', '3', '4', '5',
+            '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
+
+    /**
+     * 用于建立十六进制字符的输出的大写字符数组
+     */
+    private static final char[] DIGITS_UPPER = {'0', '1', '2', '3', '4', '5',
+            '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
+
+    /**
+     * 将字节数组转换为十六进制字符数组
+     *
+     * @param data byte[]
+     * @return 十六进制char[]
+     */
+    public static char[] encodeHex(byte[] data) {
+        return encodeHex(data, true);
+    }
+
+    /**
+     * 将字节数组转换为十六进制字符数组
+     *
+     * @param data        byte[]
+     * @param toLowerCase <code>true</code> 传换成小写格式 , <code>false</code> 传换成大写格式
+     * @return 十六进制char[]
+     */
+    public static char[] encodeHex(byte[] data, boolean toLowerCase) {
+        return encodeHex(data, toLowerCase ? DIGITS_LOWER : DIGITS_UPPER);
+    }
+
+    /**
+     * 将字节数组转换为十六进制字符数组
+     *
+     * @param data     byte[]
+     * @param toDigits 用于控制输出的char[]
+     * @return 十六进制char[]
+     */
+    protected static char[] encodeHex(byte[] data, char[] toDigits) {
+        int l = data.length;
+        char[] out = new char[l << 1];
+        // two characters form the hex value.
+        for (int i = 0, j = 0; i < l; i++) {
+            out[j++] = toDigits[(0xF0 & data[i]) >>> 4];
+            out[j++] = toDigits[0x0F & data[i]];
+        }
+        return out;
+    }
+
+    /**
+     * 将字节数组转换为十六进制字符串
+     *
+     * @param data byte[]
+     * @return 十六进制String
+     */
+    public static String encodeHexString(byte[] data) {
+        return encodeHexString(data, true);
+    }
+
+    /**
+     * 将字节数组转换为十六进制字符串
+     *
+     * @param data        byte[]
+     * @param toLowerCase <code>true</code> 传换成小写格式 , <code>false</code> 传换成大写格式
+     * @return 十六进制String
+     */
+    public static String encodeHexString(byte[] data, boolean toLowerCase) {
+        return encodeHexString(data, toLowerCase ? DIGITS_LOWER : DIGITS_UPPER);
+    }
+
+    /**
+     * 将字节数组转换为十六进制字符串
+     *
+     * @param data     byte[]
+     * @param toDigits 用于控制输出的char[]
+     * @return 十六进制String
+     */
+    protected static String encodeHexString(byte[] data, char[] toDigits) {
+        return new String(encodeHex(data, toDigits));
+    }
+
+    /**
+     * 将十六进制字符数组转换为字节数组
+     *
+     * @param data 十六进制char[]
+     * @return byte[]
+     * @throws RuntimeException 如果源十六进制字符数组是一个奇怪的长度,将抛出运行时异常
+     */
+    public static byte[] decodeHex(char[] data) {
+        int len = data.length;
+
+        if ((len & 0x01) != 0) {
+            throw new RuntimeException("Odd number of characters.");
+        }
+
+        byte[] out = new byte[len >> 1];
+
+        // two characters form the hex value.
+        for (int i = 0, j = 0; j < len; i++) {
+            int f = toDigit(data[j], j) << 4;
+            j++;
+            f = f | toDigit(data[j], j);
+            j++;
+            out[i] = (byte) (f & 0xFF);
+        }
+
+        return out;
+    }
+
+    /**
+     * 将十六进制字符转换成一个整数
+     *
+     * @param ch    十六进制char
+     * @param index 十六进制字符在字符数组中的位置
+     * @return 一个整数
+     * @throws RuntimeException 当ch不是一个合法的十六进制字符时,抛出运行时异常
+     */
+    protected static int toDigit(char ch, int index) {
+        int digit = Character.digit(ch, 16);
+        if (digit == -1) {
+            throw new RuntimeException("Illegal hexadecimal character " + ch
+                    + " at index " + index);
+        }
+        return digit;
+    }
+
+    /**
+     * 数字字符串转ASCII码字符串
+     *
+     *
+     *            字符串
+     * @return ASCII字符串
+     */
+    public static String StringToAsciiString(String content) {
+        String result = "";
+        int max = content.length();
+        for (int i = 0; i < max; i++) {
+            char c = content.charAt(i);
+            String b = Integer.toHexString(c);
+            result = result + b;
+        }
+        return result;
+    }
+
+    /**
+     * 十六进制转字符串
+     *
+     * @param hexString
+     *            十六进制字符串
+     * @param encodeType
+     *            编码类型4:Unicode,2:普通编码
+     * @return 字符串
+     */
+    public static String hexStringToString(String hexString, int encodeType) {
+        String result = "";
+        int max = hexString.length() / encodeType;
+        for (int i = 0; i < max; i++) {
+            char c = (char) hexStringToAlgorism(hexString
+                    .substring(i * encodeType, (i + 1) * encodeType));
+            result += c;
+        }
+        return result;
+    }
+
+    /**
+     * 十六进制字符串装十进制
+     *
+     * @param hex
+     *            十六进制字符串
+     * @return 十进制数值
+     */
+    public static int hexStringToAlgorism(String hex) {
+        hex = hex.toUpperCase();
+        int max = hex.length();
+        int result = 0;
+        for (int i = max; i > 0; i--) {
+            char c = hex.charAt(i - 1);
+            int algorism = 0;
+            if (c >= '0' && c <= '9') {
+                algorism = c - '0';
+            } else {
+                algorism = c - 55;
+            }
+            result += Math.pow(16, max - i) * algorism;
+        }
+        return result;
+    }
+
+    /**
+     * 十六转二进制
+     *
+     * @param hex
+     *            十六进制字符串
+     * @return 二进制字符串
+     */
+    public static String hexStringToBinary(String hex) {
+        hex = hex.toUpperCase();
+        String result = "";
+        int max = hex.length();
+        for (int i = 0; i < max; i++) {
+            char c = hex.charAt(i);
+            switch (c) {
+                case '0':
+                    result += "0000";
+                    break;
+                case '1':
+                    result += "0001";
+                    break;
+                case '2':
+                    result += "0010";
+                    break;
+                case '3':
+                    result += "0011";
+                    break;
+                case '4':
+                    result += "0100";
+                    break;
+                case '5':
+                    result += "0101";
+                    break;
+                case '6':
+                    result += "0110";
+                    break;
+                case '7':
+                    result += "0111";
+                    break;
+                case '8':
+                    result += "1000";
+                    break;
+                case '9':
+                    result += "1001";
+                    break;
+                case 'A':
+                    result += "1010";
+                    break;
+                case 'B':
+                    result += "1011";
+                    break;
+                case 'C':
+                    result += "1100";
+                    break;
+                case 'D':
+                    result += "1101";
+                    break;
+                case 'E':
+                    result += "1110";
+                    break;
+                case 'F':
+                    result += "1111";
+                    break;
+            }
+        }
+        return result;
+    }
+
+    /**
+     * ASCII码字符串转数字字符串
+     *
+     *
+     *            ASCII字符串
+     * @return 字符串
+     */
+    public static String AsciiStringToString(String content) {
+        String result = "";
+        int length = content.length() / 2;
+        for (int i = 0; i < length; i++) {
+            String c = content.substring(i * 2, i * 2 + 2);
+            int a = hexStringToAlgorism(c);
+            char b = (char) a;
+            String d = String.valueOf(b);
+            result += d;
+        }
+        return result;
+    }
+
+    /**
+     * 将十进制转换为指定长度的十六进制字符串
+     *
+     * @param algorism
+     *            int 十进制数字
+     * @param maxLength
+     *            int 转换后的十六进制字符串长度
+     * @return String 转换后的十六进制字符串
+     */
+    public static String algorismToHexString(int algorism, int maxLength) {
+        String result = "";
+        result = Integer.toHexString(algorism);
+
+        if (result.length() % 2 == 1) {
+            result = "0" + result;
+        }
+        return patchHexString(result.toUpperCase(), maxLength);
+    }
+
+    /**
+     * 字节数组转为普通字符串(ASCII对应的字符)
+     *
+     * @param bytearray
+     *            byte[]
+     * @return String
+     */
+    public static String byteToString(byte[] bytearray) {
+        String result = "";
+        char temp;
+
+        int length = bytearray.length;
+        for (int i = 0; i < length; i++) {
+            temp = (char) bytearray[i];
+            result += temp;
+        }
+        return result;
+    }
+
+    /**
+     * 二进制字符串转十进制
+     *
+     * @param binary
+     *            二进制字符串
+     * @return 十进制数值
+     */
+    public static int binaryToAlgorism(String binary) {
+        int max = binary.length();
+        int result = 0;
+        for (int i = max; i > 0; i--) {
+            char c = binary.charAt(i - 1);
+            int algorism = c - '0';
+            result += Math.pow(2, max - i) * algorism;
+        }
+        return result;
+    }
+
+    /**
+     * 十进制转换为十六进制字符串
+     *
+     * @param algorism
+     *            int 十进制的数字
+     * @return String 对应的十六进制字符串
+     */
+    public static String algorismToHEXString(int algorism) {
+        String result = "";
+        result = Integer.toHexString(algorism);
+
+        if (result.length() % 2 == 1) {
+            result = "0" + result;
+
+        }
+        result = result.toUpperCase();
+
+        return result;
+    }
+
+    /**
+     * HEX字符串前补0,主要用于长度位数不足。
+     *
+     * @param str
+     *            String 需要补充长度的十六进制字符串
+     * @param maxLength
+     *            int 补充后十六进制字符串的长度
+     * @return 补充结果
+     */
+    static public String patchHexString(String str, int maxLength) {
+        String temp = "";
+        for (int i = 0; i < maxLength - str.length(); i++) {
+            temp = "0" + temp;
+        }
+        str = (temp + str).substring(0, maxLength);
+        return str;
+    }
+
+    /**
+     * 将一个字符串转换为int
+     *
+     * @param s
+     *            String 要转换的字符串
+     * @param defaultInt
+     *            int 如果出现异常,默认返回的数字
+     * @param radix
+     *            int 要转换的字符串是什么进制的,如16 8 10.
+     * @return int 转换后的数字
+     */
+    public static int parseToInt(String s, int defaultInt, int radix) {
+        int i = 0;
+        try {
+            i = Integer.parseInt(s, radix);
+        } catch (NumberFormatException ex) {
+            i = defaultInt;
+        }
+        return i;
+    }
+
+    /**
+     * 将一个十进制形式的数字字符串转换为int
+     *
+     * @param s
+     *            String 要转换的字符串
+     * @param defaultInt
+     *            int 如果出现异常,默认返回的数字
+     * @return int 转换后的数字
+     */
+    public static int parseToInt(String s, int defaultInt) {
+        int i = 0;
+        try {
+            i = Integer.parseInt(s);
+        } catch (NumberFormatException ex) {
+            i = defaultInt;
+        }
+        return i;
+    }
+
+    /**
+     * 十六进制串转化为byte数组
+     *
+     * @return the array of byte
+     */
+    public static byte[] hexToByte(String hex)
+            throws IllegalArgumentException {
+        if (hex.length() % 2 != 0) {
+            throw new IllegalArgumentException();
+        }
+        char[] arr = hex.toCharArray();
+        byte[] b = new byte[hex.length() / 2];
+        for (int i = 0, j = 0, l = hex.length(); i < l; i++, j++) {
+            String swap = "" + arr[i++] + arr[i];
+            int byteint = Integer.parseInt(swap, 16) & 0xFF;
+            b[j] = new Integer(byteint).byteValue();
+        }
+        return b;
+    }
+
+    /**
+     * 字节数组转换为十六进制字符串
+     *
+     * @param b
+     *            byte[] 需要转换的字节数组
+     * @return String 十六进制字符串
+     */
+    public static String byteToHex(byte b[]) {
+        if (b == null) {
+            throw new IllegalArgumentException(
+                    "Argument b ( byte array ) is null! ");
+        }
+        String hs = "";
+        String stmp = "";
+        for (int n = 0; n < b.length; n++) {
+            stmp = Integer.toHexString(b[n] & 0xff);
+            if (stmp.length() == 1) {
+                hs = hs + "0" + stmp;
+            } else {
+                hs = hs + stmp;
+            }
+        }
+        return hs.toUpperCase();
+    }
+
+    public static byte[] subByte(byte[] input, int startIndex, int length) {
+        byte[] bt = new byte[length];
+        for (int i = 0; i < length; i++) {
+            bt[i] = input[i + startIndex];
+        }
+        return bt;
+    }
+}

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

@@ -0,0 +1 @@
+

+ 121 - 0
src/main/resources/templates/dataList.html

@@ -0,0 +1,121 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>数据库上报</title>
+</head>
+<body>
+
+<table align="center" border="1">
+
+    <form action="/data/list">
+        <tr>
+            <td>批次:</td>
+            <td><input type="text" name="num"/></td>
+            <td>
+                <input type="submit" value="按批次查询" />
+            </td>
+        </tr>
+    </form>
+
+    <tr>
+        <td><input type="checkbox" id="box" onclick="checkAll()"/>全选</td>
+        <td>视图名</td>
+        <td>上报表名</td>
+        <td>表描述</td>
+        <td>批次</td>
+    </tr>
+    <form action="/data/repo">
+        <th:block th:each="item:${DataRepoTableList}">
+            <tr>
+                <td>
+                    <input type="checkbox" onclick="check()" name="repo_name" th:value="${item.repo_name}" />
+
+                </td>
+                <td th:text="${item.table_name}"></td>
+                <td th:text="${item.repo_name}"></td>
+                <td th:text="${item.table_comment}"></td>
+                <td th:text="${item.up_num}"></td>
+            </tr>
+        </th:block>
+        <tr>
+            <td>
+                <input type="hidden" name="isAuto" id="autoValue" value="0">
+                <input type="submit" value="提交到中间库" onclick="return sub()"/>
+            </td>
+
+        </tr>
+
+    </form>
+</table>
+<script type="text/javascript">
+
+
+    function sub(){
+        var checkNum=document.getElementsByName("repo_name");
+        var n = checkNum.length;
+        var k = 0;
+        for (var i=0;i<n;i++){
+            if(checkNum[i].checked){
+                k = 1;
+            }
+        }
+        if(k==0){
+            alert("请至少选择一个上报表!");
+            return false;
+        }
+    }
+
+    //checkbox 全选/取消全选
+    function checkAll(){
+        //1.获取编号前面的复选框
+        var checkAllEle = document.getElementById("box");
+        //2.对编号前面复选框的状态进行判断
+        if(checkAllEle.checked==true){
+            //3.获取下面所有的复选框
+            var repo_names = document.getElementsByName("repo_name");
+            //4.对获取的所有复选框进行遍历
+            for(var i=0;i<repo_names.length;i++){
+                //5.拿到每一个复选框,并将其状态置为选中
+                repo_names[i].checked=true;
+            }
+        }else{
+            //6.获取下面所有的复选框
+            var repo_names = document.getElementsByName("repo_name");
+            //7.对获取的所有复选框进行遍历
+            for(var i=0;i<repo_names.length;i++){
+                //8.拿到每一个复选框,并将其状态置为未选中
+                repo_names[i].checked=false;
+            }
+        }
+    }
+    function check(){
+        //1.获取编号前面的复选框
+        var repo_names = document.getElementsByName("repo_name");
+        //2.设置一个计数器
+        var a=0;
+        //3.获取全选框的状态
+        var checkAllEle = document.getElementById("box");
+        //4.获取下面所有的复选框
+        for(var i=0;i<repo_names.length;i++){
+            //5.如果复选框的状态是未选中
+            if(repo_names[i].checked==false){
+                //6.设置全选框的状态为未选中
+                checkAllEle.checked=false;
+                //7.执行完毕关闭循环
+                break;
+            }
+            //8.如果循环条件不成立,计数器加一
+            a++;
+        }
+
+        //9.判断计数器是否与复选框的的数量相等
+        if(a==repo_names.length){
+            //10.如果相等则设置全选框的状态为已选中
+            checkAllEle.checked=true;
+        }
+    }
+
+</script>
+</body>
+</html>

+ 106 - 0
src/main/resources/templates/dataRepo.html

@@ -0,0 +1,106 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <title>数据库上报</title>
+</head>
+<body>
+
+<table align="center" border="1">
+
+  <tr>
+    <td><input type="checkbox" id="box" onclick="checkAll()"/>全选</td>
+    <td>视图名</td>
+    <td>上报表名</td>
+    <td>表描述</td>
+    <td>批次</td>
+  </tr>
+  <form action="/data/repoBJ">
+    <th:block th:each="item:${DataRepoTableList}">
+      <tr>
+        <td>
+          <input type="checkbox" onclick="check()" name="repo_name" th:value="${item.repo_name}+'-'+${item.up_num}+'-'+${item.table_name}+'-'+${item.table_comment}"/>
+        </td>
+        <td th:text="${item.table_name}"></td>
+        <td th:text="${item.repo_name}"></td>
+        <td th:text="${item.table_comment}"></td>
+        <td th:text="${item.up_num}"></td>
+      </tr>
+    </th:block>
+    <tr>
+      <td>
+        <input type="submit" value="提交到oracle" onclick="return sub()"/>
+      </td>
+
+    </tr>
+
+  </form>
+</table>
+<script type="text/javascript">
+  function sub(){
+    var checkNum=document.getElementsByName("repo_name");
+    var n = checkNum.length;
+    var k = 0;
+    for (var i=0;i<n;i++){
+      if(checkNum[i].checked){
+        k = 1;
+      }
+    }
+    if(k==0){
+      alert("请至少选择一个上报表!");
+      return false;
+    }
+  }
+
+  //checkbox 全选/取消全选
+  function checkAll(){
+    //1.获取编号前面的复选框
+    var checkAllEle = document.getElementById("box");
+    //2.对编号前面复选框的状态进行判断
+    if(checkAllEle.checked==true){
+      //3.获取下面所有的复选框
+      var repo_names = document.getElementsByName("repo_name");
+      //4.对获取的所有复选框进行遍历
+      for(var i=0;i<repo_names.length;i++){
+        //5.拿到每一个复选框,并将其状态置为选中
+        repo_names[i].checked=true;
+      }
+    }else{
+      //6.获取下面所有的复选框
+      var repo_names = document.getElementsByName("repo_name");
+      //7.对获取的所有复选框进行遍历
+      for(var i=0;i<repo_names.length;i++){
+        //8.拿到每一个复选框,并将其状态置为未选中
+        repo_names[i].checked=false;
+      }
+    }
+  }
+  function check(){
+    //1.获取编号前面的复选框
+    var repo_names = document.getElementsByName("repo_name");
+    //2.设置一个计数器
+    var a=0;
+    //3.获取全选框的状态
+    var checkAllEle = document.getElementById("box");
+    //4.获取下面所有的复选框
+    for(var i=0;i<repo_names.length;i++){
+      //5.如果复选框的状态是未选中
+      if(repo_names[i].checked==false){
+        //6.设置全选框的状态为未选中
+        checkAllEle.checked=false;
+        //7.执行完毕关闭循环
+        break;
+      }
+      //8.如果循环条件不成立,计数器加一
+      a++;
+    }
+    //9.判断计数器是否与复选框的的数量相等
+    if(a==repo_names.length){
+      //10.如果相等则设置全选框的状态为已选中
+      checkAllEle.checked=true;
+    }
+  }
+
+</script>
+</body>
+</html>

+ 117 - 0
src/main/resources/templates/dataResult.html

@@ -0,0 +1,117 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>数据库上报</title>
+</head>
+<body>
+
+<table align="center" border="1">
+
+    <form action="/data/list">
+        <tr>
+            <td>批次:</td>
+            <td><input type="text" name="num"/></td>
+            <td>
+                <input type="submit" value="按批次查询" />
+            </td>
+        </tr>
+    </form>
+
+    <tr>
+        <td><input type="checkbox" id="box" onclick="checkAll()"/>全选</td>
+        <td>视图名</td>
+        <td>上报表名</td>
+        <td>表描述</td>
+        <td>批次</td>
+    </tr>
+    <form action="/data/repoResult">
+        <th:block th:each="item:${DataRepoTableList}">
+            <tr>
+                <td>
+                    <input type="checkbox" onclick="check()" name="repo_name" th:value="${item.repo_name}+'-'+${item.up_num}" />
+                </td>
+                <td th:text="${item.table_name}"></td>
+                <td th:text="${item.repo_name}"></td>
+                <td th:text="${item.table_comment}"></td>
+                <td th:text="${item.up_num}"></td>
+            </tr>
+        </th:block>
+        <tr>
+            <td>
+                <input type="submit" value="提交到中间库"  onclick="return sub()"/>
+            </td>
+
+        </tr>
+
+    </form>
+</table>
+<script type="text/javascript">
+
+    function sub(){
+        var checkNum=document.getElementsByName("repo_name");
+        var n = checkNum.length;
+        var k = 0;
+        for (var i=0;i<n;i++){
+            if(checkNum[i].checked){
+                k = 1;
+            }
+        }
+        if(k==0){
+            alert("请至少选择一个上报表!");
+            return false;
+        }
+    }
+
+    //checkbox 全选/取消全选
+    function checkAll(){
+        //1.获取编号前面的复选框
+        var checkAllEle = document.getElementById("box");
+        //2.对编号前面复选框的状态进行判断
+        if(checkAllEle.checked==true){
+            //3.获取下面所有的复选框
+            var repo_names = document.getElementsByName("repo_name");
+            //4.对获取的所有复选框进行遍历
+            for(var i=0;i<repo_names.length;i++){
+                //5.拿到每一个复选框,并将其状态置为选中
+                repo_names[i].checked=true;
+            }
+        }else{
+            //6.获取下面所有的复选框
+            var repo_names = document.getElementsByName("repo_name");
+            //7.对获取的所有复选框进行遍历
+            for(var i=0;i<repo_names.length;i++){
+                //8.拿到每一个复选框,并将其状态置为未选中
+                repo_names[i].checked=false;
+            }
+        }
+    }
+    function check(){
+        //1.获取编号前面的复选框
+        var repo_names = document.getElementsByName("repo_name");
+        //2.设置一个计数器
+        var a=0;
+        //3.获取全选框的状态
+        var checkAllEle = document.getElementById("box");
+        //4.获取下面所有的复选框
+        for(var i=0;i<repo_names.length;i++){
+            //5.如果复选框的状态是未选中
+            if(repo_names[i].checked==false){
+                //6.设置全选框的状态为未选中
+                checkAllEle.checked=false;
+                //7.执行完毕关闭循环
+                break;
+            }
+            //8.如果循环条件不成立,计数器加一
+            a++;
+        }
+        //9.判断计数器是否与复选框的的数量相等
+        if(a==repo_names.length){
+            //10.如果相等则设置全选框的状态为已选中
+            checkAllEle.checked=true;
+        }
+    }
+
+</script>
+</body>
+</html>

+ 13 - 0
src/test/java/com/data/datarepo/DataRepoApplicationTests.java

@@ -0,0 +1,13 @@
+package com.data.datarepo;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class DataRepoApplicationTests {
+
+    @Test
+    void contextLoads() {
+    }
+
+}