Ver Fonte

面单识别平台,初次提交

jessie há 5 anos atrás
commit
257ec71e5e
40 ficheiros alterados com 2707 adições e 0 exclusões
  1. 0 0
      logs/dev.log
  2. BIN
      logs/dev.log.2019-12-30.0.gz
  3. BIN
      logs/dev.log.2019-12-31.0.gz
  4. BIN
      logs/dev.log.2020-01-02.0.gz
  5. BIN
      logs/dev.log.2020-01-13.0.gz
  6. 310 0
      mvnw
  7. 182 0
      mvnw.cmd
  8. 164 0
      pom.xml
  9. 28 0
      src/main/java/com/pavis/rec/ocrrec/OcrRecApplication.java
  10. 30 0
      src/main/java/com/pavis/rec/ocrrec/common/config/CorsFilterConfig.java
  11. 56 0
      src/main/java/com/pavis/rec/ocrrec/common/config/OcrRecConstants.java
  12. 38 0
      src/main/java/com/pavis/rec/ocrrec/common/config/Swagger2Config.java
  13. 29 0
      src/main/java/com/pavis/rec/ocrrec/common/config/WebMvcConfig.java
  14. 16 0
      src/main/java/com/pavis/rec/ocrrec/common/config/properties/Dir.java
  15. 15 0
      src/main/java/com/pavis/rec/ocrrec/common/config/properties/Download.java
  16. 20 0
      src/main/java/com/pavis/rec/ocrrec/common/config/properties/OcrRecProperties.java
  17. 14 0
      src/main/java/com/pavis/rec/ocrrec/common/config/properties/Saved.java
  18. 14 0
      src/main/java/com/pavis/rec/ocrrec/common/config/properties/Upload.java
  19. 15 0
      src/main/java/com/pavis/rec/ocrrec/common/config/properties/Url.java
  20. 4 0
      src/main/java/com/pavis/rec/ocrrec/common/http/BaseRes.java
  21. 41 0
      src/main/java/com/pavis/rec/ocrrec/common/http/JsonRes.java
  22. 39 0
      src/main/java/com/pavis/rec/ocrrec/common/http/ResUtils.java
  23. 66 0
      src/main/java/com/pavis/rec/ocrrec/common/utils/AipOcrUtils.java
  24. 40 0
      src/main/java/com/pavis/rec/ocrrec/common/utils/TransApiUtils.java
  25. 18 0
      src/main/java/com/pavis/rec/ocrrec/common/utils/test/LegalInfo.java
  26. 36 0
      src/main/java/com/pavis/rec/ocrrec/common/utils/test/SkuTrans.java
  27. 166 0
      src/main/java/com/pavis/rec/ocrrec/common/utils/translate/HttpGet.java
  28. 121 0
      src/main/java/com/pavis/rec/ocrrec/common/utils/translate/MD5.java
  29. 281 0
      src/main/java/com/pavis/rec/ocrrec/common/utils/translate/ResUtils.java
  30. 42 0
      src/main/java/com/pavis/rec/ocrrec/common/utils/translate/TransApi.java
  31. 156 0
      src/main/java/com/pavis/rec/ocrrec/controller/OcrRecController.java
  32. 27 0
      src/main/java/com/pavis/rec/ocrrec/dto/ResRecInfo.java
  33. 14 0
      src/main/java/com/pavis/rec/ocrrec/mapper/MailTypesMapper.java
  34. 23 0
      src/main/java/com/pavis/rec/ocrrec/model/MailTypes.java
  35. 21 0
      src/main/java/com/pavis/rec/ocrrec/service/OcrRecService.java
  36. 243 0
      src/main/java/com/pavis/rec/ocrrec/service/impl/OcrRecServiceImpl.java
  37. 29 0
      src/main/resources/application-dev.yml
  38. 29 0
      src/main/resources/application-prod.yml
  39. 14 0
      src/main/resources/application.yml
  40. 366 0
      src/test/java/com/pavis/rec/ocrrec/OcrRecApplicationTests.java

Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
logs/dev.log


BIN
logs/dev.log.2019-12-30.0.gz


BIN
logs/dev.log.2019-12-31.0.gz


BIN
logs/dev.log.2020-01-02.0.gz


BIN
logs/dev.log.2020-01-13.0.gz


+ 310 - 0
mvnw

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

+ 182 - 0
mvnw.cmd

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

+ 164 - 0
pom.xml

@@ -0,0 +1,164 @@
+<?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.1.10.RELEASE</version>
+        <relativePath/> <!-- lookup parent from repository -->
+    </parent>
+    <groupId>com.pavis.rec</groupId>
+    <artifactId>ocr-rec</artifactId>
+    <version>1.0</version>
+    <name>ocr-rec</name>
+    <description>OCR BILL RECOGNITION</description>
+
+    <properties>
+        <java.version>1.8</java.version>
+        <swagger2.version>2.9.2</swagger2.version>
+        <mysql-version>5.1.34</mysql-version>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-aop</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-configuration-processor</artifactId>
+            <optional>true</optional>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <version>${mysql-version}</version>
+            <scope>runtime</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-boot-starter</artifactId>
+            <version>3.2.0</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+            <version>2.8.5</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.junit.vintage</groupId>
+                    <artifactId>junit-vintage-engine</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-swagger2</artifactId>
+            <version>${swagger2.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-swagger-ui</artifactId>
+            <version>${swagger2.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.github.xiaoymin</groupId>
+            <artifactId>swagger-bootstrap-ui</artifactId>
+                        <version>1.9.2</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>1.2.47</version>
+        </dependency>
+
+        <dependency>
+            <groupId>joda-time</groupId>
+            <artifactId>joda-time</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>commons-collections</groupId>
+            <artifactId>commons-collections</artifactId>
+            <version>3.2.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-tx</artifactId>
+            <version>5.1.11.RELEASE</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.baidu.aip</groupId>
+            <artifactId>java-sdk</artifactId>
+            <version>4.12.0</version>
+        </dependency>
+
+
+        <dependency>
+            <groupId>com.baidubce</groupId>
+            <artifactId>bce-java-sdk</artifactId>
+            <version>0.10.78</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>ch.qos.logback</groupId>
+                    <artifactId>logback-classic</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>slf4j-log4j12</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>

+ 28 - 0
src/main/java/com/pavis/rec/ocrrec/OcrRecApplication.java

@@ -0,0 +1,28 @@
+package com.pavis.rec.ocrrec;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+// @SpringBootApplication(exclude={DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
+@MapperScan("com.pavis.rec.ocrrec.mapper")
+@EnableAsync
+@SpringBootApplication
+public class OcrRecApplication implements WebMvcConfigurer {
+
+    public static void main(String[] args) {
+        SpringApplication.run(OcrRecApplication.class, args);
+    }
+
+    @Override
+    public void addResourceHandlers(ResourceHandlerRegistry registry) {
+        registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/");
+        registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
+    }
+
+}

+ 30 - 0
src/main/java/com/pavis/rec/ocrrec/common/config/CorsFilterConfig.java

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

+ 56 - 0
src/main/java/com/pavis/rec/ocrrec/common/config/OcrRecConstants.java

@@ -0,0 +1,56 @@
+package com.pavis.rec.ocrrec.common.config;
+
+/**
+ * @author guanhuijuan
+ * @create 2019-12-30 15:21
+ * @desc OcrRecConstants
+ **/
+public class OcrRecConstants {
+    /**
+     * AK
+     */
+    public static final String ACCESS_KEY = "586d2b8ac25045b88edecda8bd9ad07a";
+
+    /**
+     * SK
+     */
+    public static final String SECRET_KEY = "2bbb5de5c63444a7b18709e03d5fb60a";
+
+    /**
+     * mail type
+     */
+    public static final String Priority_Mail = "Priority Mail";
+    public static final String Postnl_EMS = "Postnl EMS";
+    public static final String Postal_Parcel = "Postal Parcel";
+    public static final String CN23 = "Custom Declaration(CN23)invoice";
+    public static final String EMS_Chung_Hwa = "EMS-ChungHwa";
+    public static final String EMS_Korea = "EMS-Korea";
+    public static final String EMS_Malaysia = "EMS-Malaysia";
+    public static final String CN22 = "CN22 customs declaration";
+    public static final String Royal_Mail = "Royal Mail";
+
+
+
+    // public static final String ZhongHuaYouZheng = "中华邮政";
+    // public static final String EMS_EK = "EMS-EK";
+    // public static final String EMS_Japan = "EMS-Japan";
+    // public static final String EMS_Japan_Post = "EMS-Japan Post";
+
+    /**
+     *  mail template sign
+     */
+    public static final String Priority_Mail_SIGN = "5aab7664cc5497d2f6f75ce99f1b133b";
+    public static final String Postnl_EMS_SIGN = "65a4199c4aac3a5e44a0e1136e5363bd";
+    public static final String Postal_Parcel_SIGN = "0a45766a1631ed036d1fe2cedd132441";
+    public static final String CN23_SIGN = "5af006d11cf6a9e4e1c74c9f5a5bcc6b";
+    public static final String EMS_Chung_Hwa_SIGN = "dd9d33c2ffd0f9274bbc2c34f32381f8";
+    public static final String EMS_Korea_SIGN = "3d525376652201c85447e1dc7493f125";
+    public static final String EMS_Malaysia_SIGN = "24438b7e24cd36140b43716eeeba1640";
+    public static final String CN22_SIGN = "afde88ff9a57ec5b0d655565e9e43c1b";
+    public static final String Royal_Mail_SIGN = "7a885f21e663967f5948a6eab0dc3bc6";
+
+    // public static final String ZhongHuaYouZheng_SIGN = "";
+    // public static final String EMS_EK_SIGN = "";
+    // public static final String EMS_Japan_SIGN = "";
+    // public static final String getEMS_Japan_Post_SIGN = "";
+}

+ 38 - 0
src/main/java/com/pavis/rec/ocrrec/common/config/Swagger2Config.java

@@ -0,0 +1,38 @@
+package com.pavis.rec.ocrrec.common.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.service.ApiInfo;
+import springfox.documentation.service.Contact;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spring.web.plugins.Docket;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+@Configuration
+@EnableSwagger2
+public class Swagger2Config {
+    @Bean
+    public Docket createRestApi() {
+        return new Docket(DocumentationType.SWAGGER_2)
+                .apiInfo(apiInfo())
+                .select()
+                .apis(RequestHandlerSelectors.basePackage("com.pavis.rec.ocrrec.controller"))
+                // .paths(PathSelectors.any())
+                .paths(PathSelectors.regex("/.*"))
+                .build();
+    }
+
+    private ApiInfo apiInfo() {
+        return new ApiInfoBuilder()
+                .title("OCR 面单识别demo平台")
+                .description("接口文档说明")
+                .termsOfServiceUrl("http://192.168.1.73:10080/")
+                .contact(new Contact("", "", ""))
+                .version("1.0")
+                .build();
+    }
+}
+

+ 29 - 0
src/main/java/com/pavis/rec/ocrrec/common/config/WebMvcConfig.java

@@ -0,0 +1,29 @@
+package com.pavis.rec.ocrrec.common.config;
+
+import com.pavis.rec.ocrrec.common.config.properties.OcrRecProperties;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+
+@Configuration
+public class WebMvcConfig implements WebMvcConfigurer {
+
+    @Autowired
+    private OcrRecProperties ocrRecProperties;
+
+    @Override
+    public void addResourceHandlers(ResourceHandlerRegistry registry) {
+        // 对已上传的文件地址做映射访问
+        registry.addResourceHandler("/export/rec/**").addResourceLocations("file:" + ocrRecProperties.getDir().getUpload().getRec());
+        // registry.addResourceHandler("swagger-ui.html")
+        //         .addResourceLocations("classpath:/META-INF/resources/");
+        // registry.addResourceHandler("/webjars/**")
+        //         .addResourceLocations("classpath:/META-INF/resources/webjars/");
+        // registry.addResourceHandler("doc.html")
+        //         .addResourceLocations("classpath:/META-INF/resources/");
+    }
+
+
+}

+ 16 - 0
src/main/java/com/pavis/rec/ocrrec/common/config/properties/Dir.java

@@ -0,0 +1,16 @@
+package com.pavis.rec.ocrrec.common.config.properties;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
+public class Dir {
+    private String base;
+    private Upload upload;
+    private Saved saved;
+}

+ 15 - 0
src/main/java/com/pavis/rec/ocrrec/common/config/properties/Download.java

@@ -0,0 +1,15 @@
+package com.pavis.rec.ocrrec.common.config.properties;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
+public class Download {
+    private String rec;
+    private String export;
+}

+ 20 - 0
src/main/java/com/pavis/rec/ocrrec/common/config/properties/OcrRecProperties.java

@@ -0,0 +1,20 @@
+package com.pavis.rec.ocrrec.common.config.properties;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
+@ConfigurationProperties(prefix = "ocr.config")
+@Component
+public class OcrRecProperties {
+    private Dir dir;
+    private Url url;
+}

+ 14 - 0
src/main/java/com/pavis/rec/ocrrec/common/config/properties/Saved.java

@@ -0,0 +1,14 @@
+package com.pavis.rec.ocrrec.common.config.properties;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
+public class Saved {
+    private String rec;
+}

+ 14 - 0
src/main/java/com/pavis/rec/ocrrec/common/config/properties/Upload.java

@@ -0,0 +1,14 @@
+package com.pavis.rec.ocrrec.common.config.properties;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
+public class Upload {
+    private String rec;
+}

+ 15 - 0
src/main/java/com/pavis/rec/ocrrec/common/config/properties/Url.java

@@ -0,0 +1,15 @@
+package com.pavis.rec.ocrrec.common.config.properties;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
+public class Url {
+    private String base;
+    private String rec;
+}

+ 4 - 0
src/main/java/com/pavis/rec/ocrrec/common/http/BaseRes.java

@@ -0,0 +1,4 @@
+package com.pavis.rec.ocrrec.common.http;
+
+public interface BaseRes {
+}

+ 41 - 0
src/main/java/com/pavis/rec/ocrrec/common/http/JsonRes.java

@@ -0,0 +1,41 @@
+package com.pavis.rec.ocrrec.common.http;
+
+public class JsonRes implements BaseRes {
+
+    private Boolean success;
+    private String message;
+    private Object data;
+
+    public JsonRes() {
+    }
+
+    public JsonRes(Boolean success, String message, Object data) {
+        this.success = success;
+        this.message = message;
+        this.data = data;
+    }
+
+    public Boolean getSuccess() {
+        return success;
+    }
+
+    public void setSuccess(Boolean success) {
+        this.success = success;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+
+    public Object getData() {
+        return data;
+    }
+
+    public void setData(Object data) {
+        this.data = data;
+    }
+}

+ 39 - 0
src/main/java/com/pavis/rec/ocrrec/common/http/ResUtils.java

@@ -0,0 +1,39 @@
+package com.pavis.rec.ocrrec.common.http;
+
+public class ResUtils {
+
+    private final static String OK_MESSAGE = "操作成功";
+    private final static String ERROR_MESSAGE = "操作失败";
+
+    public static BaseRes ok() {
+        return ok(null);
+    }
+
+    public static BaseRes ok(String message) {
+        return ok(message, null);
+    }
+
+    public static BaseRes ok(Object data) {
+        return ok(OK_MESSAGE, data);
+    }
+
+    public static BaseRes ok(String message, Object data) {
+        return new JsonRes(true, message, data);
+    }
+
+    public static BaseRes error() {
+        return error(null);
+    }
+
+    public static BaseRes error(String message) {
+        return error(message, null);
+    }
+
+    public static BaseRes error(Object data) {
+        return error(ERROR_MESSAGE, data);
+    }
+
+    public static BaseRes error(String message, Object data) {
+        return new JsonRes(false, message, data);
+    }
+}

+ 66 - 0
src/main/java/com/pavis/rec/ocrrec/common/utils/AipOcrUtils.java

@@ -0,0 +1,66 @@
+package com.pavis.rec.ocrrec.common.utils;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.baidu.aip.ocr.AipOcr;
+import com.pavis.rec.ocrrec.common.config.OcrRecConstants;
+import com.pavis.rec.ocrrec.dto.ResRecInfo;
+import lombok.extern.slf4j.Slf4j;
+import org.json.JSONObject;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * @author guanhuijuan
+ * @create 2019-12-30 16:38
+ * @desc AipOcrUtils
+ **/
+@Slf4j
+public class AipOcrUtils {
+
+    public static AipOcr initAipOcr(){
+        return new AipOcr("10573741", OcrRecConstants.ACCESS_KEY,OcrRecConstants.SECRET_KEY);
+    }
+
+    public static JSONObject rec(AipOcr client,HashMap<String, String> options,String imgPath) {
+        // JSONObject res = client.custom(imgPath, templateSign, options);
+        JSONObject res = client.custom(imgPath, options);
+        log.info("error_msg: " + res.get("error_msg"));
+        log.info("error_code: " + res.get("error_code"));
+        // // 参数为本地图片二进制数组
+        // byte[] file = readImageFile(image);
+        // res = client.custom(file, templateSign, options);
+        // System.out.println(res.toString(2));
+        return res;
+    }
+
+    public static JSONObject sample(AipOcr client,String imgPath) {
+        // 传入可选参数调用接口
+        HashMap<String, String> options = new HashMap<String, String>();
+        options.put("language_type", "CHN_ENG");
+        options.put("detect_direction", "true");
+        options.put("detect_language", "true");
+        options.put("probability", "true");
+
+
+        // 参数为本地图片路径
+        // String image = "test.jpg";
+        JSONObject res = client.basicGeneral(imgPath, options);
+        System.out.println(res.toString(2));
+
+        // // 参数为本地图片二进制数组
+        // byte[] file = readImageFile(image);
+        // res = client.basicGeneral(file, options);
+        // System.out.println(res.toString(2));
+
+
+        // 通用文字识别, 图片参数为远程url图片
+        // JSONObject res = client.basicGeneralUrl(imgPath, options);
+        // System.out.println(res.toString(2));
+        System.err.println("》》》"+res.toString());
+        return res;
+
+    }
+}

+ 40 - 0
src/main/java/com/pavis/rec/ocrrec/common/utils/TransApiUtils.java

@@ -0,0 +1,40 @@
+package com.pavis.rec.ocrrec.common.utils;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.pavis.rec.ocrrec.common.utils.translate.TransApi;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * @author guanhuijuan
+ * @create 2019-12-31 10:55
+ * @desc TransApiUtils
+ **/
+@Slf4j
+public class TransApiUtils {
+
+    private static final String APP_ID = "20191231000371450";
+    private static final String SECURITY_KEY = "F1uaElrpH8ai8bMCU_0_";
+
+    public static String transEnToZh(String query){
+        TransApi api = new TransApi(APP_ID, SECURITY_KEY);
+        String transRes = api.getTransResult(query, "auto", "zh");
+        while (transRes.contains("54003")) {
+            transRes = api.getTransResult(query, "auto", "zh");
+        }
+        return toTrans(transRes,query);
+        // return "";
+    }
+
+    public static String toTrans(String transRes,String query){
+        if (transRes.contains("error_msg: ") || transRes.contains("error_code")){
+            return query;
+        }else {
+            com.alibaba.fastjson.JSONObject resJson = com.alibaba.fastjson.JSONObject.parseObject(transRes);
+            log.info("transRes: " + resJson);
+            JSONArray resArr = JSONArray.parseArray(resJson.get("trans_result").toString());
+            com.alibaba.fastjson.JSONObject res = JSONObject.parseObject(resArr.get(0).toString());
+            return res.get("dst").toString();
+        }
+    }
+}

+ 18 - 0
src/main/java/com/pavis/rec/ocrrec/common/utils/test/LegalInfo.java

@@ -0,0 +1,18 @@
+package com.pavis.rec.ocrrec.common.utils.test;
+
+import lombok.*;
+
+/**
+ * @author guanhuijuan
+ * @create 2020-02-20 6:44
+ * @desc LegalText
+ **/
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class LegalInfo {
+    private String type;
+    private String info;
+}

+ 36 - 0
src/main/java/com/pavis/rec/ocrrec/common/utils/test/SkuTrans.java

@@ -0,0 +1,36 @@
+package com.pavis.rec.ocrrec.common.utils.test;
+
+import lombok.*;
+
+import java.util.List;
+
+/**
+ * @author guanhuijuan
+ * @create 2020-02-17 16:20
+ * @desc SkuTransfer
+ **/
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class SkuTrans {
+
+    private String actionType;
+
+    private String kwpId;
+
+    private String catCode;
+
+    private String brandName;
+
+    private String productFullName;
+
+    private String productDescription;
+
+    private String weightCapacity;
+
+    private List<String> imgs;
+
+    private String remark;
+}

+ 166 - 0
src/main/java/com/pavis/rec/ocrrec/common/utils/translate/HttpGet.java

@@ -0,0 +1,166 @@
+package com.pavis.rec.ocrrec.common.utils.translate;
+
+import lombok.extern.slf4j.Slf4j;
+
+import java.io.BufferedReader;
+import java.io.Closeable;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
+import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLEncoder;
+import java.security.KeyManagementException;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+import java.util.Map;
+
+import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+
+@Slf4j
+class HttpGet {
+    protected static final int SOCKET_TIMEOUT = 10000;
+    // 10S
+    protected static final String GET = "GET";
+
+    public static String get(String host, Map<String, String> params) {
+        try {
+            // 设置SSLContext
+            SSLContext sslcontext = SSLContext.getInstance("TLS");
+            sslcontext.init(null, new TrustManager[] { myX509TrustManager }, null);
+
+            String sendUrl = getUrlWithQueryString(host, params);
+            URL uri = new URL(sendUrl);
+            // 创建URL对象
+            HttpURLConnection conn = (HttpURLConnection) uri.openConnection();
+            if (conn instanceof HttpsURLConnection) {
+                ((HttpsURLConnection) conn).setSSLSocketFactory(sslcontext.getSocketFactory());
+            }
+
+            conn.setConnectTimeout(SOCKET_TIMEOUT);
+            // 设置相应超时
+            conn.setRequestMethod(GET);
+            int statusCode = conn.getResponseCode();
+            if (statusCode != HttpURLConnection.HTTP_OK) {
+                log.info("Http错误码:" + statusCode);
+            }
+
+            // 读取服务器的数据
+            InputStream is = conn.getInputStream();
+            BufferedReader br = new BufferedReader(new InputStreamReader(is));
+            StringBuilder builder = new StringBuilder();
+            String line = null;
+            while ((line = br.readLine()) != null) {
+                builder.append(line);
+            }
+
+            String text = builder.toString();
+
+            close(br);
+            // 关闭数据流
+            close(is);
+            // 关闭数据流
+            conn.disconnect();
+            // 断开连接
+
+            return text;
+        } catch (MalformedURLException e) {
+            e.printStackTrace();
+        } catch (IOException e) {
+            e.printStackTrace();
+        } catch (KeyManagementException e) {
+            e.printStackTrace();
+        } catch (NoSuchAlgorithmException e) {
+            e.printStackTrace();
+        }
+
+        return null;
+    }
+
+    public static String getUrlWithQueryString(String url, Map<String, String> params) {
+        if (params == null) {
+            return url;
+        }
+
+        StringBuilder builder = new StringBuilder(url);
+        if (url.contains("?")) {
+            builder.append("&");
+        } else {
+            builder.append("?");
+        }
+
+        int i = 0;
+        for (String key : params.keySet()) {
+            String value = params.get(key);
+            if (value == null) {
+                // 过滤空的key
+                continue;
+            }
+
+            if (i != 0) {
+                builder.append('&');
+            }
+
+            builder.append(key);
+            builder.append('=');
+            builder.append(encode(value));
+
+            i++;
+        }
+
+        return builder.toString();
+    }
+
+    protected static void close(Closeable closeable) {
+        if (closeable != null) {
+            try {
+                closeable.close();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    /**
+     * 对输入的字符串进行URL编码, 即转换为%20这种形式
+     * 
+     * @param input 原文
+     * @return URL编码. 如果编码失败, 则返回原文
+     */
+    public static String encode(String input) {
+        if (input == null) {
+            return "";
+        }
+
+        try {
+            return URLEncoder.encode(input, "utf-8");
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+
+        return input;
+    }
+
+    private static TrustManager myX509TrustManager = new X509TrustManager() {
+
+        @Override
+        public X509Certificate[] getAcceptedIssuers() {
+            return null;
+        }
+
+        @Override
+        public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
+        }
+
+        @Override
+        public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
+        }
+    };
+
+}

+ 121 - 0
src/main/java/com/pavis/rec/ocrrec/common/utils/translate/MD5.java

@@ -0,0 +1,121 @@
+package com.pavis.rec.ocrrec.common.utils.translate;
+
+import java.io.*;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+/**
+ * MD5编码相关的类
+ * 
+ * @author wangjingtao
+ * 
+ */
+public class MD5 {
+
+    // 首先初始化一个字符数组,用来存放每个16进制字符
+    private static final char[] hexDigits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd',
+            'e', 'f' };
+
+    /**
+     * 获得一个字符串的MD5值
+     * 
+     * @param input 输入的字符串
+     * @return 输入字符串的MD5值
+     * 
+     */
+    public static String md5(String input) {
+        if (input == null) {
+            return null;
+        }
+
+        try {
+            // 拿到一个MD5转换器(如果想要SHA1参数换成”SHA1”)
+            MessageDigest messageDigest = MessageDigest.getInstance("MD5");
+            // 输入的字符串转换成字节数组
+            byte[] inputByteArray = input.getBytes("utf-8");
+            // inputByteArray是输入字符串转换得到的字节数组
+            messageDigest.update(inputByteArray);
+            // 转换并返回结果,也是字节数组,包含16个元素
+            byte[] resultByteArray = messageDigest.digest();
+            // 字符数组转换成字符串返回
+            return byteArrayToHex(resultByteArray);
+        } catch (NoSuchAlgorithmException e) {
+            return null;
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    /**
+     * 获取文件的MD5值
+     * 
+     * @param file
+     * @return
+     */
+    public static String md5(File file) {
+        try {
+            if (!file.isFile()) {
+                return null;
+            }
+
+            FileInputStream in = new FileInputStream(file);
+
+            String result = md5(in);
+
+            in.close();
+
+            return result;
+
+        } catch (FileNotFoundException e) {
+            e.printStackTrace();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+
+        return null;
+    }
+
+    public static String md5(InputStream in) {
+
+        try {
+            MessageDigest messagedigest = MessageDigest.getInstance("MD5");
+
+            byte[] buffer = new byte[1024];
+            int read = 0;
+            while ((read = in.read(buffer)) != -1) {
+                messagedigest.update(buffer, 0, read);
+            }
+
+            in.close();
+
+            String result = byteArrayToHex(messagedigest.digest());
+
+            return result;
+        } catch (NoSuchAlgorithmException e) {
+            e.printStackTrace();
+        } catch (FileNotFoundException e) {
+            e.printStackTrace();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+
+        return null;
+    }
+
+    private static String byteArrayToHex(byte[] byteArray) {
+        // new一个字符数组,这个就是用来组成结果字符串的(解释一下:一个byte是八位二进制,也就是2位十六进制字符(2的8次方等于16的2次方))
+        char[] resultCharArray = new char[byteArray.length * 2];
+        // 遍历字节数组,通过位运算(位运算效率高),转换成字符放到字符数组中去
+        int index = 0;
+        for (byte b : byteArray) {
+            resultCharArray[index++] = hexDigits[b >>> 4 & 0xf];
+            resultCharArray[index++] = hexDigits[b & 0xf];
+        }
+
+        // 字符数组组合成字符串返回
+        return new String(resultCharArray);
+
+    }
+
+}

+ 281 - 0
src/main/java/com/pavis/rec/ocrrec/common/utils/translate/ResUtils.java

@@ -0,0 +1,281 @@
+package com.pavis.rec.ocrrec.common.utils.translate;
+
+import com.pavis.rec.ocrrec.common.utils.TransApiUtils;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author guanhuijuan
+ * @create 2020-01-09 9:59
+ * @desc ResUtils
+ **/
+public class ResUtils {
+
+
+    public static Map<String,Object> resMap(String fromName,String fromZhName,String fromTel,String fromAddr,String fromZhAddr,
+                                            String toName,String toZhName,String toTel,String toAddr,String toZhAddr){
+        Map<String,Object> resMap = new HashMap<>();
+        resMap.put("fromName",fromName);
+        resMap.put("fromZhName",fromZhName);
+        resMap.put("fromTel",fromTel);
+        resMap.put("fromInfo",fromAddr);
+        resMap.put("fromZhAddr",fromZhAddr);
+        resMap.put("toName",toName);
+        resMap.put("toZhName",toZhName);
+        resMap.put("toTel",toTel);
+        resMap.put("toInfo",toAddr);
+        resMap.put("toZhAddr",toZhAddr);
+        return resMap;
+    }
+
+    /**
+     * priority mail 结果处理:
+     * @param
+     * @return map
+     */
+    public static Map<String,Object> priorityMailRes(String fromName,String fromTel,String fromAddrMap,
+                                                     String fromInfo,String toName,String toTel,String toInfo,String toAddrMap,String toZhAddrMap){
+
+        String fromZhName = TransApiUtils.transEnToZh(fromName);
+        String toZhName = TransApiUtils.transEnToZh(toName);
+
+        String fromAddr = getFromAddrByFromAddr(fromAddrMap,fromInfo,fromName,fromTel);
+        String fromZhAddr = StringUtils.isEmpty(fromAddr) ? fromAddr : TransApiUtils.transEnToZh(fromAddr);
+
+        String toAddr = getToAddrByToAddr(toAddrMap,toZhAddrMap,toInfo,toName,toTel);
+        String toZhAddr = StringUtils.isEmpty(toAddrMap) ? toAddr : StringUtils.isEmpty(toZhAddrMap) ? TransApiUtils.transEnToZh(toAddr) :
+                StringUtils.remove(StringUtils.remove(toZhAddrMap,toZhName),toTel);
+
+        return resMap(fromName,fromZhName,fromTel,fromAddr,fromZhAddr,
+                toName,toZhName,toTel,toAddr,toZhAddr);
+    }
+
+    /**
+     * postal parcel mail 结果处理:
+     * @param
+     * @return map
+     */
+    public static Map<String,Object> postalParcelMailRes(String fromName,String fromTel,String fromAddrMap,
+                                                         String fromInfo,String toName,String toTel,String toInfo,String toAddrMap){
+        String fromZhName = TransApiUtils.transEnToZh(fromName);
+        String toZhName = TransApiUtils.transEnToZh(toName);
+
+        String fromAddr = getFromAddrByFromInfo(fromAddrMap,fromInfo,fromName,fromTel);
+        String toAddr = getToAddrByToInfo(toAddrMap,toAddrMap,toInfo,toName,toTel);
+
+        String fromZhAddr = StringUtils.isEmpty(fromAddr) ? fromAddr : TransApiUtils.transEnToZh(fromAddr);
+        String toZhAddr = StringUtils.isEmpty(toAddr) ? toAddr : TransApiUtils.transEnToZh(toAddr);
+
+        Map<String,Object> map = stripperTypingMap(fromName,fromAddr,toAddr,toZhName,toName,toTel,toInfo,toZhAddr);
+        fromName = map.get("fromName").toString();
+        fromAddr = map.get("fromAddr").toString();
+        toAddr = map.get("toAddr").toString();
+        toName = map.get("toName").toString();
+        toZhName = map.get("toZhName").toString();
+        toInfo = map.get("toInfo").toString();
+        toTel = map.get("toTel").toString();
+        toZhAddr = map.get("toZhAddr").toString();
+
+        return resMap(resPostalParcelMailRemove(fromName),resPostalParcelMailRemove(fromZhName),resPostalParcelMailRemove(fromTel),
+                resPostalParcelMailRemove(fromAddr),resPostalParcelMailRemove(fromZhAddr),resPostalParcelMailRemove(
+                toName),resPostalParcelMailRemove(toZhName),resPostalParcelMailRemove(toTel),resPostalParcelMailRemove(toAddr),
+                resPostalParcelMailRemove(toZhAddr));
+    }
+
+    public static Map<String,Object> stripperTypingMap(String fromName,String fromAddr,String toAddr,
+                                                       String toZhName,String toName,String toTel,String toInfo,String toZhAddr){
+        Map<String,Object> map = new HashMap<>();
+        if (fromName.contains("市") || fromName.contains("号")){
+            String fName = fromName;
+            fromName = fromAddr;
+            fromAddr = fName;
+
+        }
+        if (fromName.contains("省") ||fromName.contains("市") || fromName.contains("号") || toName.contains("区") || toName.contains("弄") || toName.contains("室") || toName.contains("镇")){
+            String tName = toName;
+            toName = StringUtils.remove(StringUtils.remove(toInfo,toName),toTel);
+            toAddr = tName;
+            toZhName = TransApiUtils.transEnToZh(toName);
+            toZhAddr = TransApiUtils.transEnToZh(toAddr);
+        }
+        map.put("fromName",fromName);
+        map.put("fromAddr",fromAddr);
+        map.put("toAddr",toAddr);
+        map.put("toName",toName);
+        map.put("toZhName",toZhName);
+        map.put("toInfo",toInfo);
+        map.put("toTel",toTel);
+        map.put("toZhAddr",toZhAddr);
+        return map;
+    }
+
+
+
+    public static String resPostalParcelMailRemove(String name){
+        return  StringUtils.remove(StringUtils.remove(StringUtils.remove(StringUtils.remove(StringUtils.remove(StringUtils.remove(StringUtils.remove(StringUtils.remove(
+                StringUtils.remove(StringUtils.remove(StringUtils.remove(StringUtils.remove(StringUtils.remove(
+                StringUtils.remove(StringUtils.remove(StringUtils.remove(StringUtils.remove(StringUtils.remove(StringUtils.remove(name,"City:"),"Name:"),
+                "Address:"),"Postcode:"),"Postcode:"),"AName:"),"Name"),"Address"),"便番号"),"(国名)c"),
+                "City"),"ats:t"),"话便番号"),"For account risk of Messers:"),"Gyeong g-do(Korea)"),"account risk of Messers: "
+                ),"account risf"),"tel.no.Full Name ol"),"FrOM ");
+    }
+
+    /**
+     * postnl ems mail 结果处理:
+     * @param
+     * @return map
+     */
+    public static Map<String,Object> postnlEmsMailRes(String fromName,String fromTel,String fromAddrMap,
+                                                      String fromInfo,String toName,String toTel,String toInfo,String toAddrMap){
+        String fromZhName = TransApiUtils.transEnToZh(fromName);
+        String toZhName = TransApiUtils.transEnToZh(toName);
+
+        String fromAddr = getFromAddrByFromAddr(fromAddrMap,fromInfo,fromName,fromTel);
+        String fromZhAddr = StringUtils.isEmpty(fromAddr) ? fromAddr : TransApiUtils.transEnToZh(fromAddr);
+
+        String toAddr =getToAddrByToInfo(toAddrMap,toAddrMap,toInfo,toName,toTel);
+        String toZhAddr = StringUtils.isEmpty(toAddr) ? toAddr : TransApiUtils.transEnToZh(toAddr);
+
+        return resMap(fromName,fromZhName,fromTel,fromAddr,fromZhAddr,
+                toName,toZhName,toTel,toAddr,toZhAddr);
+    }
+
+    /**
+     * ems mail 结果处理:
+     * @param
+     * @return map
+     */
+    public static Map<String,Object> emsKoreaMailRes(String fromName,String fromTel,String fromAddrMap,
+                                                String fromInfo,String toName,String toTel,String toInfo,String toAddrMap,String toZhAddrMap){
+        String fromZhName = TransApiUtils.transEnToZh(fromName);
+        String fromAddr = getFromAddrByFromAddr(fromAddrMap,fromInfo,fromName,fromTel);
+        String toAddr = getToAddrByToAddr(toAddrMap,toZhAddrMap,toInfo,toName,toTel);
+
+        String fromZhAddr = StringUtils.isEmpty(fromAddr) ? fromAddr : TransApiUtils.transEnToZh(fromAddr);
+        String toZhName = TransApiUtils.transEnToZh(toName);
+        String toZhAddr = StringUtils.isEmpty(toAddrMap) ? toAddr : StringUtils.isEmpty(toZhAddrMap) ? TransApiUtils.transEnToZh(toAddr) :
+                StringUtils.remove(StringUtils.remove(toZhAddrMap,toZhName),toTel);
+        return resMap(resEmsKoreaMailRemove(fromName),resEmsKoreaMailRemove(fromZhName),resEmsKoreaMailRemove(fromTel),resEmsKoreaMailRemove(fromAddr),
+                resEmsKoreaMailRemove(fromZhAddr), resEmsKoreaMailRemove(toName),resEmsKoreaMailRemove(toZhName),resEmsKoreaMailRemove(toTel),
+                        resEmsKoreaMailRemove(toAddr),resEmsKoreaMailRemove(toZhAddr));
+    }
+
+    public static String resEmsKoreaMailRemove(String name){
+        return  StringUtils.remove(StringUtils.remove(name,"tel.no.Full Name ol"),"lno.Full Naammee( ");
+    }
+
+    /**
+     * cn23 结果处理:
+     * @param
+     * @return map
+     */
+    public static Map<String,Object> cnMailRes(String fromName,String fromTel,String fromAddrMap,
+                                               String fromInfo,String toName,String toTel,String toInfo,String toAddrMap,String toZhAddrMap){
+        String fromZhName = TransApiUtils.transEnToZh(fromName);
+        String toZhName = TransApiUtils.transEnToZh(toName);
+
+        String fromAddr = getFromAddrByFromAddr(fromAddrMap,fromInfo,fromName,fromTel);
+        String fromZhAddr = StringUtils.isEmpty(fromAddr) ? fromAddr : TransApiUtils.transEnToZh(fromAddr);
+
+        String toAddr = StringUtils.isEmpty(toAddrMap) ? "" : toAddrMap;
+        String toZhAddr = StringUtils.isEmpty(toAddrMap) ? toAddr : StringUtils.isEmpty(toZhAddrMap) ? TransApiUtils.transEnToZh(toAddr) :
+                StringUtils.remove(StringUtils.remove(toZhAddrMap,toZhName),toTel);
+
+        return resMap(resPostalParcelMailRemove(fromName),resPostalParcelMailRemove(fromZhName),resPostalParcelMailRemove(fromTel),
+                resPostalParcelMailRemove(fromAddr),resPostalParcelMailRemove(fromZhAddr),
+                        resPostalParcelMailRemove(toName),resPostalParcelMailRemove(toZhName),resPostalParcelMailRemove(toTel),
+                resPostalParcelMailRemove(toAddr), resPostalParcelMailRemove(toZhAddr));
+    }
+
+    /**
+     * EMS_Chung_Hwa_SIGN 结果处理:
+     * @param
+     * @return map
+     */
+    public static Map<String,Object> emsChungHwaMailRes(String fromName,String fromTel,String fromAddrMap,
+                                               String fromInfo,String toName,String toTel,String toInfo,String toAddrMap,String toZhAddrMap){
+
+
+        String fromAddr = getFromAddrByFromAddr(fromAddrMap,fromInfo,fromName,fromTel);
+        String fromZhAddr = StringUtils.isEmpty(fromAddr) ? fromAddr : TransApiUtils.transEnToZh(fromAddr);
+
+        String fromZhName = TransApiUtils.transEnToZh(fromName);
+        String toZhName = TransApiUtils.transEnToZh(toName);
+
+        String toAddr = StringUtils.isEmpty(toAddrMap) ? "" : toAddrMap;
+        String toZhAddr = StringUtils.isEmpty(toAddrMap) ? toAddr : StringUtils.isEmpty(toZhAddrMap) ? TransApiUtils.transEnToZh(toAddr) :
+                StringUtils.remove(StringUtils.remove(toZhAddrMap,toZhName),toTel);
+
+        Map<String,Object> map = stripperTypingMap(fromName,fromAddr,toAddr,toZhName,toName,toTel,toInfo,toZhAddr);
+
+        fromName = map.get("fromName").toString();
+        fromAddr = map.get("fromAddr").toString();
+        toName = map.get("toName").toString();
+        toAddr = map.get("toAddr").toString();
+        toZhName = map.get("toZhName").toString();
+        toTel = map.get("toTel").toString();
+        toZhAddr = map.get("toZhAddr").toString();
+        toInfo = map.get("toInfo").toString();
+
+        return resMap(fromName,fromZhName,fromTel,fromAddr,fromZhAddr,
+                toName,toZhName,toTel,toAddr,toZhAddr);
+    }
+
+    /**
+     * EMS_Chung_Hwa_SIGN 结果处理:
+     * @param
+     * @return map
+     */
+    public static Map<String,Object> emsMalaysiaMailRes(String fromName,String fromTel,String fromAddrMap,
+                                                        String fromInfo,String toName,String toTel,String toInfo,String toAddrMap,String toZhAddrMap){
+        String fromZhName = TransApiUtils.transEnToZh(fromName);
+        String toZhName = TransApiUtils.transEnToZh(toName);
+
+        String fromAddr = getFromAddrByFromAddr(fromAddrMap,fromInfo,fromName,fromTel);
+        String toAddr = StringUtils.isEmpty(toAddrMap) ? "" : toAddrMap;
+
+        String toZhAddr = StringUtils.isEmpty(toAddrMap) ? toAddr : StringUtils.isEmpty(toZhAddrMap) ? TransApiUtils.transEnToZh(toAddr) :
+                StringUtils.remove(StringUtils.remove(toZhAddrMap,toZhName),toTel);
+        String fromZhAddr = StringUtils.isEmpty(fromAddr) ? fromAddr : TransApiUtils.transEnToZh(fromAddr);
+
+
+        return resMap(fromName,fromZhName,fromTel,fromAddr,fromZhAddr,
+                toName,toZhName,toTel,toAddr,toZhAddr);
+    }
+
+    /**
+     * EMS_Chung_Hwa_SIGN 结果处理:
+     * @param
+     * @return map
+     */
+    public static Map<String,Object> royalMailRes(String fromName,String fromTel,String fromAddrMap,
+                                                        String fromInfo,String toName,String toTel,String toInfo,String toAddrMap,String toZhAddrMap){
+        String toZhName = TransApiUtils.transEnToZh(toName);
+
+        String toZhAddr = StringUtils.isEmpty(toAddrMap) ? toAddrMap : StringUtils.isEmpty(toZhAddrMap) ? TransApiUtils.transEnToZh(toAddrMap) :
+                StringUtils.remove(StringUtils.remove(toZhAddrMap,toName),toTel);
+        return resMap("","",fromTel,"","",
+                toName,toZhName,toTel,toAddrMap,toZhAddr);
+    }
+
+    public static String getFromAddrByFromAddr(String fromAddrMap,String fromInfo,String fromName,String fromTel){
+        return StringUtils.isEmpty(fromAddrMap) ? StringUtils.isEmpty(fromInfo) ? fromInfo : StringUtils.remove(StringUtils.remove(fromInfo,fromName),fromTel)
+                : fromAddrMap;
+    }
+    public static String getFromAddrByFromInfo(String fromAddrMap,String fromInfo,String fromName,String fromTel){
+        return StringUtils.isEmpty(fromInfo) ?
+                StringUtils.isEmpty(fromAddrMap) ? fromInfo : StringUtils.remove(StringUtils.remove(fromAddrMap,fromName),fromTel):
+                StringUtils.remove(StringUtils.remove(fromInfo,fromName),fromTel);
+    }
+    public static String getToAddrByToAddr(String toAddrMap,String toZhAddrMap,String toInfo,String toName,String toTel){
+        return StringUtils.equals(toAddrMap,toZhAddrMap) ? StringUtils.remove(StringUtils.remove(toInfo,toName),toTel):
+                StringUtils.remove(StringUtils.remove(StringUtils.remove(toInfo,toName),toTel),toZhAddrMap);
+    }
+    public static String getToAddrByToInfo(String toAddrMap,String toZhAddrMap,String toInfo,String toName,String toTel){
+        return StringUtils.isEmpty(toInfo) ?
+                StringUtils.isEmpty(toAddrMap) ? toInfo : StringUtils.remove(StringUtils.remove(toAddrMap,toName),toTel) :
+                StringUtils.remove(StringUtils.remove(toInfo,toName),toTel);
+    }
+}

+ 42 - 0
src/main/java/com/pavis/rec/ocrrec/common/utils/translate/TransApi.java

@@ -0,0 +1,42 @@
+package com.pavis.rec.ocrrec.common.utils.translate;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class TransApi {
+    private static final String TRANS_API_HOST = "http://api.fanyi.baidu.com/api/trans/vip/translate";
+
+    private String appid;
+    private String securityKey;
+
+    public TransApi(String appid, String securityKey) {
+        this.appid = appid;
+        this.securityKey = securityKey;
+    }
+
+    public String getTransResult(String query, String from, String to) {
+        Map<String, String> params = buildParams(query, from, to);
+        return HttpGet.get(TRANS_API_HOST, params);
+    }
+
+    private Map<String, String> buildParams(String query, String from, String to) {
+        Map<String, String> params = new HashMap<String, String>();
+        params.put("q", query);
+        params.put("from", from);
+        params.put("to", to);
+
+        params.put("appid", appid);
+
+        // 随机数
+        String salt = String.valueOf(System.currentTimeMillis());
+        params.put("salt", salt);
+
+        // 签名
+        String src = appid + query + salt + securityKey;
+        // 加密前的原文
+        params.put("sign", MD5.md5(src));
+
+        return params;
+    }
+
+}

+ 156 - 0
src/main/java/com/pavis/rec/ocrrec/controller/OcrRecController.java

@@ -0,0 +1,156 @@
+package com.pavis.rec.ocrrec.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.pavis.rec.ocrrec.common.http.BaseRes;
+import com.pavis.rec.ocrrec.common.http.ResUtils;
+import com.pavis.rec.ocrrec.common.utils.test.LegalInfo;
+import com.pavis.rec.ocrrec.common.utils.test.SkuTrans;
+import com.pavis.rec.ocrrec.dto.ResRecInfo;
+import com.pavis.rec.ocrrec.service.OcrRecService;
+import io.swagger.annotations.*;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+
+import java.util.List;
+import java.util.Random;
+
+/**
+ * @author guanhuijuan
+ * @create 2019-12-30 15:27
+ * @desc RecController
+ **/
+@Slf4j
+@RestController
+@RequestMapping("/api")
+public class OcrRecController {
+
+    public static final String JPG = ".jpg";
+    public static final String JPEG = ".jpeg";
+    public static final String PNG = ".png";
+
+    @Autowired
+    private OcrRecService ocrRecService;
+
+    @ApiOperation("mail类型")
+    @GetMapping("/mails")
+    public BaseRes mails(){
+        List<String> mails = ocrRecService.mails();
+        if (mails.size() > 0){
+            return ResUtils.ok(mails);
+        }else {
+            return ResUtils.ok("数据为空。");
+        }
+
+    }
+
+    @ApiOperation("ocr面单识别generalRecognition")
+    @PostMapping("/img/generalRecognition")
+    public BaseRes generalRecognition(@RequestParam @ApiParam(value = "快件类型",required = true) String mailType,@RequestParam("file") @ApiParam(value = "面单图片,支持jpg/png/jpeg",required = true) MultipartFile file) throws ServletException {
+        if (!file.isEmpty()){
+            String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
+            if (suffix.equals(JPG) || suffix.equals(JPEG) || suffix.equals(PNG)){
+                ResRecInfo resRecInfo = ocrRecService.generalRecognition(mailType,file);
+                return ResUtils.ok(resRecInfo);
+                // if (StringUtils.isEmpty(resRecInfo.getImgUrl())){
+                //     return ResUtils.ok("未识别出面单数据,请上传清晰的面单文件后再次尝试。");
+                // }else {
+                //     return ResUtils.ok("识别成功。",resRecInfo);
+                // }
+            }else {
+                return ResUtils.error("文件格式有误,请上传(jpg/jpeg/png)格式的面单文件再试。");
+            }
+        }else {
+            if (file.getOriginalFilename().contains(JPG)|| file.getOriginalFilename().equals(JPEG) || file.getOriginalFilename().equals(PNG)){
+                return ResUtils.error("请勿上传空面单文件!");
+            }else {
+                return ResUtils.error("文件格式有误,请上传(jpg/jpeg/png)格式的面单文件再试。");
+            }
+        }
+    }
+
+
+    @ApiOperation("ocr面单识别")
+    @PostMapping("/img/put")
+    public BaseRes put(@RequestParam @ApiParam(value = "快件类型",required = true) String mailType,@RequestParam("file") @ApiParam(value = "面单图片,支持jpg/png/jpeg",required = true) MultipartFile file) throws ServletException {
+        if (!file.isEmpty()){
+            String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
+            if (suffix.equals(JPG) || suffix.equals(JPEG) || suffix.equals(PNG)){
+                ResRecInfo resRecInfo = ocrRecService.put(mailType,file);
+                if (StringUtils.isEmpty(resRecInfo.getImgUrl())){
+                    return ResUtils.ok("未识别出面单数据,请上传清晰的面单文件后再次尝试。");
+                }else {
+                    return ResUtils.ok("识别成功。",resRecInfo);
+                }
+            }else {
+                return ResUtils.error("文件格式有误,请上传(jpg/jpeg/png)格式的面单文件再试。");
+            }
+        }else {
+            if (file.getOriginalFilename().contains(JPG)|| file.getOriginalFilename().equals(JPEG) || file.getOriginalFilename().equals(PNG)){
+                return ResUtils.error("请勿上传空面单文件!");
+            }else {
+                return ResUtils.error("文件格式有误,请上传(jpg/jpeg/png)格式的面单文件再试。");
+            }
+        }
+    }
+
+    @ApiOperation("测试")
+    @PostMapping("/legal2")
+    public BaseRes testLegal2(@RequestBody LegalInfo legalInfo, HttpServletRequest request){
+        System.err.println("mes> "+JSON.toJSONString(legalInfo));
+        JSONObject js = new JSONObject();
+        js.put("timestamp",new Random().nextInt(24 - 2 + 1) + 2);
+        return ResUtils.ok(js);
+    }
+
+    @ApiOperation("测试")
+    @PostMapping("/legal")
+    public BaseRes testLegal(@RequestBody LegalInfo legalInfo, HttpServletRequest request){
+        // public BaseRes test(@RequestBody Map<String, Object> map,HttpServletRequest request){
+
+        System.err.println("向梦婷发送请求,接收参数见下方...");
+        System.err.println(JSON.toJSONString(legalInfo));
+
+        // Map<String,String[]> map = request.getParameterMap();
+        // System.err.println(JSON.toJSONString(map));
+
+
+        JSONObject js = new JSONObject();
+        js.put("success",true);
+        js.put("code","1");
+        js.put("msg","SUCC");
+        js.put("timestamp",System.currentTimeMillis());
+        js.put("result",legalInfo.getType().equals("0") ? "测试案件类型" : "测试案件类别");
+        return ResUtils.ok(js);
+    }
+
+    @ApiOperation("测试")
+    @PostMapping("/test")
+    public BaseRes test(@RequestBody SkuTrans skuTrans,HttpServletRequest request){
+    // public BaseRes test(@RequestBody Map<String, Object> map,HttpServletRequest request){
+
+        System.err.println("向百度发送请求,接收参数见下方...");
+        System.out.println(skuTrans.getActionType());
+        System.out.println(skuTrans.getKwpId());
+        System.out.println(skuTrans.getImgs());
+        System.err.println(JSON.toJSONString(skuTrans));
+
+        // Map<String,String[]> map = request.getParameterMap();
+        // System.err.println(JSON.toJSONString(map));
+        return ResUtils.ok("SUCC");
+    }
+
+    // @ApiOperation("测试")
+    // @PostMapping("/test")
+    // public BaseRes test(@RequestParam @ApiParam(value = "mailTypes",required = true) String mailTypes,@RequestBody @ApiParam(value = "'imgUrl':'图片url','fromName':'寄件人名称','toName':'收件人名称'",required = true) ResRecInfo resRecInfo){
+    //     System.err.println(JSON.toJSONString(mailTypes));
+    //     System.err.println(JSON.toJSONString(resRecInfo));
+    //     return ResUtils.ok("SUCC");
+    // }
+}

+ 27 - 0
src/main/java/com/pavis/rec/ocrrec/dto/ResRecInfo.java

@@ -0,0 +1,27 @@
+package com.pavis.rec.ocrrec.dto;
+
+import lombok.*;
+
+/**
+ * @author guanhuijuan
+ * @create 2019-12-31 9:14
+ * @desc ResRecInfo
+ **/
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class ResRecInfo {
+    private String imgUrl;
+    private String fromName;
+    private String fromZhName;
+    private String fromTel;
+    private String fromInfo;
+    private String fromZhAddr;
+    private String toName;
+    private String toZhName;
+    private String toTel;
+    private String toInfo;
+    private String toZhAddr;
+}

+ 14 - 0
src/main/java/com/pavis/rec/ocrrec/mapper/MailTypesMapper.java

@@ -0,0 +1,14 @@
+package com.pavis.rec.ocrrec.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.pavis.rec.ocrrec.model.MailTypes;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author guanhuijuan
+ * @create 2020-01-13 13:56
+ * @desc MailTypesMapper
+ **/
+@Component
+public interface MailTypesMapper extends BaseMapper<MailTypes> {
+}

+ 23 - 0
src/main/java/com/pavis/rec/ocrrec/model/MailTypes.java

@@ -0,0 +1,23 @@
+package com.pavis.rec.ocrrec.model;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.*;
+
+/**
+ * @author guanhuijuan
+ * @create 2020-01-13 13:53
+ * @desc MailTypes
+ **/
+@Getter
+@Setter
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class MailTypes {
+    @TableId(type = IdType.ID_WORKER_STR)
+    private String id;
+
+    private String mailType;
+    private String isUsed;
+}

+ 21 - 0
src/main/java/com/pavis/rec/ocrrec/service/OcrRecService.java

@@ -0,0 +1,21 @@
+package com.pavis.rec.ocrrec.service;
+
+import com.pavis.rec.ocrrec.dto.ResRecInfo;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+
+/**
+ * @author guanhuijuan
+ * @create 2019-12-30 15:28
+ * @desc OcrRecService
+ **/
+public interface OcrRecService {
+
+    List<String> mails();
+
+    ResRecInfo put(String mailType,MultipartFile file);
+
+    ResRecInfo generalRecognition(String mailType,MultipartFile file);
+}

+ 243 - 0
src/main/java/com/pavis/rec/ocrrec/service/impl/OcrRecServiceImpl.java

@@ -0,0 +1,243 @@
+package com.pavis.rec.ocrrec.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.pavis.rec.ocrrec.common.config.OcrRecConstants;
+import com.pavis.rec.ocrrec.common.config.properties.OcrRecProperties;
+import com.pavis.rec.ocrrec.common.utils.AipOcrUtils;
+import com.pavis.rec.ocrrec.common.utils.translate.ResUtils;
+import com.pavis.rec.ocrrec.dto.ResRecInfo;
+import com.pavis.rec.ocrrec.mapper.MailTypesMapper;
+import com.pavis.rec.ocrrec.model.MailTypes;
+import com.pavis.rec.ocrrec.service.OcrRecService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.json.JSONObject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author guanhuijuan
+ * @create 2019-12-30 15:28
+ * @desc OcrRecServiceImpl
+ **/
+@Slf4j
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class OcrRecServiceImpl implements OcrRecService {
+
+    @Autowired
+    private OcrRecProperties ocrRecProperties;
+
+    @Autowired
+    private MailTypesMapper mailTypesMapper;
+
+    @Override
+    public List<String> mails() {
+        QueryWrapper<MailTypes> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda()
+                .eq(MailTypes::getIsUsed,"1");
+        List<MailTypes> mailTypes = mailTypesMapper.selectList(queryWrapper);
+        List<String> mails = new ArrayList<>();
+        for (MailTypes mailType : mailTypes) {
+            mails.add(mailType.getMailType());
+        }
+        return mails;
+    }
+
+    @Override
+    public ResRecInfo put(String mailType,MultipartFile file) {
+        String fileUrl = ocrRecProperties.getDir().getUpload().getRec();
+        String parsedFilePath = fileUrl + file.getOriginalFilename();
+        try {
+            file.transferTo(new File(parsedFilePath));
+        } catch (IllegalStateException e) {
+            e.printStackTrace();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+
+        // 传入可选参数调用接口
+        HashMap<String, String> options = new HashMap<String, String>();
+        // String templateSign = "b7bfd701206d66e5942a56a9fa67532d";
+        // String templateSign = "c3594200371d365734ba337c6868ab7c";
+        String templateSign = "";
+        if (mailType.equals(OcrRecConstants.Priority_Mail)){
+           templateSign = OcrRecConstants.Priority_Mail_SIGN;
+        }else if (mailType.equals(OcrRecConstants.EMS_Korea)){
+            templateSign = OcrRecConstants.EMS_Korea_SIGN;
+        }else if (mailType.equals(OcrRecConstants.Postnl_EMS)){
+            templateSign = OcrRecConstants.Postnl_EMS_SIGN;
+        }else if (mailType.equals(OcrRecConstants.Postal_Parcel)){
+            templateSign = OcrRecConstants.Postal_Parcel_SIGN;
+        }else if (mailType.equals(OcrRecConstants.CN23)){
+            templateSign = OcrRecConstants.CN23_SIGN;
+        }else if (mailType.equals(OcrRecConstants.EMS_Chung_Hwa)){
+            templateSign = OcrRecConstants.EMS_Chung_Hwa_SIGN;
+        }else if (mailType.equals(OcrRecConstants.EMS_Malaysia)){
+            templateSign = OcrRecConstants.EMS_Malaysia_SIGN;
+        }else if (mailType.equals(OcrRecConstants.CN22)){
+            templateSign = OcrRecConstants.CN22_SIGN;
+        }else if (mailType.equals(OcrRecConstants.Royal_Mail)){
+            templateSign = OcrRecConstants.Royal_Mail_SIGN;
+        }
+        options.put("templateSign", templateSign);
+        JSONObject res = AipOcrUtils.rec(AipOcrUtils.initAipOcr(), options, parsedFilePath);
+
+        AipOcrUtils.sample(AipOcrUtils.initAipOcr(), parsedFilePath);
+        if (StringUtils.isEmpty(res.get("error_msg").toString()) && res.get("error_code").equals(0)) {
+            return res(res, file.getOriginalFilename(),mailType);
+        } else {
+            return new ResRecInfo();
+        }
+    }
+
+    @Override
+    public ResRecInfo generalRecognition(String mailType, MultipartFile file) {
+        String fileUrl = ocrRecProperties.getDir().getUpload().getRec();
+        String parsedFilePath = fileUrl + file.getOriginalFilename();
+        try {
+            file.transferTo(new File(parsedFilePath));
+        } catch (IllegalStateException e) {
+            e.printStackTrace();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        JSONObject res = AipOcrUtils.sample(AipOcrUtils.initAipOcr(),  parsedFilePath);
+        return null;
+    }
+
+    public ResRecInfo res(JSONObject res, String fileName,String mailType) {
+        JSONArray resArr = JSON.parseArray(com.alibaba.fastjson.JSONObject.parseObject(res.get("data").toString()).get("ret").toString());
+        Map<String,Object> map = resMap(resArr,mailType);
+        if (null != map && map.containsKey("fromName")){
+            ResRecInfo resRecInfo = ResRecInfo.builder()
+                    .imgUrl(ocrRecProperties.getUrl().getRec() + fileName)
+                    .fromName(map.get("fromName").toString())
+                    .fromZhName(map.get("fromZhName").toString())
+                    .fromTel(map.get("fromTel").toString())
+                    .fromInfo(map.get("fromInfo").toString())
+                    .fromZhAddr(map.get("fromZhAddr").toString())
+                    .toName(map.get("toName").toString())
+                    .toZhName(map.get("toZhName").toString())
+                    .toTel(map.get("toTel").toString())
+                    .toInfo(map.get("toInfo").toString())
+                    .toZhAddr(map.get("toZhAddr").toString())
+                    .build();
+            return resRecInfo;
+        }
+
+        return new ResRecInfo();
+    }
+
+    public Map<String,Object> resMap(JSONArray resArr,String mailType){
+        Map<String,Object> map = new HashMap<>();
+        for (Object o : resArr) {
+            com.alibaba.fastjson.JSONObject j = (com.alibaba.fastjson.JSONObject)o;
+            if (j.get("word_name").equals("from_addr")){
+                map.put("from_addr",StringUtils.isEmpty(j.get("word").toString()) ? "" : j.get("word"));
+            }
+
+            if (j.get("word_name").equals("from_tel")){
+                map.put("from_tel",StringUtils.isEmpty(j.get("word").toString()) ? "" : j.get("word"));
+            }
+
+            if (j.get("word_name").equals("to_addr")){
+                map.put("to_addr",StringUtils.isEmpty(j.get("word").toString()) ? "" : j.get("word"));
+            }
+
+            if (j.get("word_name").equals("to_zh")){
+                map.put("to_zh",StringUtils.isEmpty(j.get("word").toString()) ? "" : j.get("word"));
+            }
+
+            if (j.get("word_name").equals("to_name")){
+                map.put("to_name",StringUtils.isEmpty(j.get("word").toString()) ? "" : j.get("word"));
+            }
+
+            if (j.get("word_name").equals("from_info")){
+                map.put("from_info",StringUtils.isEmpty(j.get("word").toString()) ? "" : j.get("word"));
+            }
+
+            if (j.get("word_name").equals("to_info")){
+                map.put("to_info",StringUtils.isEmpty(j.get("word").toString()) ? "" : j.get("word"));
+            }
+
+            if (j.get("word_name").equals("from_name")){
+                map.put("from_name",StringUtils.isEmpty(j.get("word").toString()) ? "" : j.get("word"));
+            }
+
+            if (j.get("word_name").equals("to_tel")){
+                map.put("to_tel",StringUtils.isEmpty(j.get("word").toString()) ? "" : j.get("word"));
+            }
+        }
+
+        // 处理识别信息:
+        String fromName = map.containsKey("from_name") ? map.get("from_name").toString() : "";
+        String fromTel = map.containsKey("from_tel") ? map.get("from_tel").toString() : "";
+        String fromAddrMap = map.containsKey("from_addr") ? map.get("from_addr").toString() : "";
+        String fromInfo = map.containsKey("from_info") ? map.get("from_info").toString() : "";
+
+        String toName = map.containsKey("to_name") ? map.get("to_name").toString() : "";
+        String toTel = map.containsKey("to_tel") ? map.get("to_tel").toString() : "";
+        String toInfo = map.containsKey("to_info") ? map.get("to_info").toString() : "";
+        String toAddrMap = map.containsKey("to_addr") ? map.get("to_addr").toString() : "";
+        String toZhAddrMap = map.containsKey("to_zh") ? map.get("to_zh").toString() : "";
+
+        Map<String,Object> resMap = new HashMap<>();
+        switch (mailType){
+            case (OcrRecConstants.Priority_Mail):
+                resMap = ResUtils.priorityMailRes(fromName,fromTel,fromAddrMap,
+                        fromInfo,toName,toTel,toInfo,toAddrMap,toZhAddrMap);
+                break;
+            case (OcrRecConstants.Postal_Parcel):
+                resMap = ResUtils.postalParcelMailRes(fromName,fromTel,fromAddrMap,
+                        fromInfo,toName,toTel,toInfo,toAddrMap);
+                break;
+            case (OcrRecConstants.Postnl_EMS):
+                resMap = ResUtils.postnlEmsMailRes(fromName,fromTel,fromAddrMap,
+                        fromInfo,toName,toTel,toInfo,toAddrMap);
+                break;
+            case (OcrRecConstants.EMS_Korea):
+                resMap = ResUtils.emsKoreaMailRes(fromName,fromTel,fromAddrMap,
+                        fromInfo,toName,toTel,toInfo,toAddrMap,toZhAddrMap);
+                break;
+            case (OcrRecConstants.CN23):
+                resMap = ResUtils.cnMailRes(fromName,fromTel,fromAddrMap,
+                        fromInfo,toName,toTel,toInfo,toAddrMap,toZhAddrMap);
+                break;
+            case (OcrRecConstants.EMS_Chung_Hwa):
+                resMap = ResUtils.emsChungHwaMailRes(fromName,fromTel,fromAddrMap,
+                        fromInfo,toName,toTel,toInfo,toAddrMap,toZhAddrMap);
+                break;
+            case (OcrRecConstants.EMS_Malaysia):
+                resMap = ResUtils.emsMalaysiaMailRes(fromName,fromTel,fromAddrMap,
+                        fromInfo,toName,toTel,toInfo,toAddrMap,toZhAddrMap);
+                break;
+            case (OcrRecConstants.CN22):
+                resMap = ResUtils.emsMalaysiaMailRes(fromName,fromTel,fromAddrMap,
+                        fromInfo,toName,toTel,toInfo,toAddrMap,toZhAddrMap);
+                break;
+            case (OcrRecConstants.Royal_Mail):
+                resMap = ResUtils.royalMailRes(fromName,fromTel,fromAddrMap,
+                        fromInfo,toName,toTel,toInfo,toAddrMap,toZhAddrMap);
+                break;
+            default:
+                resMap = map;
+        }
+        return resMap;
+    }
+
+
+
+
+}

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

@@ -0,0 +1,29 @@
+spring:
+  datasource:
+    url: jdbc:mysql://192.168.1.73/ocr_rec?useSSL=false&autoReconnect=true&failOverReadOnly=false&allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&tinyInt1isBit=false
+    driver-class-name: com.mysql.jdbc.Driver
+    username: root
+    password: root
+logging:
+  file: logs/dev.log
+  level:
+    org.springframework.cloud: debug
+    org.springframework.boot: debug
+    com.pavis.ai.kwp.imp.service: trace
+ocr:
+  config:
+    dir:
+      # 文件存储根目录
+      base: D:\proooject\prooooject\home\privacy\projects\ocr\upload\rec
+      # 上传文件存储目录
+      upload:
+        # faq上传文件存储目录
+        rec: ${ocr.config.dir.base}\upload\
+      # 转储文件目录
+      saved:
+        # faq文件转储目录
+        rec: ${ocr.config.dir.base}\saved\
+    url:
+      # ip
+      base: http://192.168.1.73:10080
+      rec: ${ocr.config.url.base}/export/rec/

+ 29 - 0
src/main/resources/application-prod.yml

@@ -0,0 +1,29 @@
+spring:
+  datasource:
+    url: jdbc:mysql://180.76.146.227:3306/ocr_rec?useSSL=false&allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&tinyInt1isBit=false
+    driver-class-name: com.mysql.jdbc.Driver
+    username: root
+    password: Semi.1001
+logging:
+  file: logs/dev.log
+  level:
+    org.springframework.cloud: debug
+    org.springframework.boot: debug
+    com.pavis.ai.kwp.imp.service: trace
+ocr:
+  config:
+    dir:
+      # 文件存储根目录
+      base: /home/semi/projects/ocr/rec
+      # 上传文件存储目录
+      upload:
+        # faq上传文件存储目录
+        rec: ${ocr.config.dir.base}/upload/
+      # 转储文件目录
+      saved:
+        # faq文件转储目录
+        rec: ${ocr.config.dir.base}/saved/
+    url:
+      # ip
+      base: http://180.76.146.227:10080
+      rec: ${ocr.config.url.base}/export/rec/

+ 14 - 0
src/main/resources/application.yml

@@ -0,0 +1,14 @@
+server:
+#  port: 8087
+  port: 10080
+spring:
+  servlet:
+    multipart:
+      max-file-size: 50MB
+      max-request-size: 50MB
+  profiles:
+    active: dev
+#    active: prod
+mybatis-plus:
+  mapper-locations: classpath*:/mapper/*Mapper.xml
+  typeAliasesPackage: com.pavis.rec.ocrrec.model

+ 366 - 0
src/test/java/com/pavis/rec/ocrrec/OcrRecApplicationTests.java

@@ -0,0 +1,366 @@
+// package com.pavis.rec.ocrrec;
+//
+// import com.alibaba.fastjson.JSON;
+// import com.alibaba.fastjson.JSONArray;
+// import com.alibaba.fastjson.JSONObject;
+// import com.pavis.rec.ocrrec.common.config.OcrRecConstants;
+// import com.pavis.rec.ocrrec.common.utils.AipOcrUtils;
+// import com.pavis.rec.ocrrec.common.utils.TransApiUtils;
+// import com.pavis.rec.ocrrec.dto.ResRecInfo;
+// import com.pavis.rec.ocrrec.mapper.MailTypesMapper;
+// import com.pavis.rec.ocrrec.model.MailTypes;
+// import com.pavis.rec.ocrrec.service.OcrRecService;
+// import lombok.extern.slf4j.Slf4j;
+// import org.apache.commons.lang3.StringUtils;
+// import org.junit.Test;
+// import org.junit.runner.RunWith;
+// import org.springframework.beans.factory.annotation.Autowired;
+// import org.springframework.boot.test.context.SpringBootTest;
+// import org.springframework.test.context.junit4.SpringRunner;
+//
+// import java.util.ArrayList;
+// import java.util.HashMap;
+// import java.util.List;
+// import java.util.Map;
+//
+// @Slf4j
+// @RunWith(SpringRunner.class)
+// @SpringBootTest
+// public class OcrRecApplicationTests {
+//
+//     @Autowired
+//     private MailTypesMapper mailTypesMapper;
+//
+//     @Autowired
+//     private OcrRecService ocrRecService;
+//
+//     @Test
+//     public void testMail(){
+//         // List<String> strs = ocrRecService.mails();
+//         // List<String> strs = new ArrayList<>();
+//         // strs.add("Priority Mail");
+//         // strs.add("Postal Parcel");
+//         // strs.add("Custom Declaration(CN23)invoice");
+//         // strs.add("Postnl EMS");
+//         // strs.add("EMS-ChungHwa");
+//         // strs.add("EMS-EK");
+//         // strs.add("EMS-Japan");
+//         // strs.add("EMS-Japan Post");
+//         // strs.add("EMS-Korea");
+//         // strs.add("EMS-Malaysia");
+//         // strs.add("CN22 customs declaration");
+//         // strs.add("中华邮政");
+//         // strs.add("Royal Mail");
+//         // for (String str : strs) {
+//         //     MailTypes mailTypes = MailTypes.builder()
+//         //             .mailType(str)
+//         //             .isUsed("0")
+//         //             .build();
+//         //     mailTypesMapper.insert(mailTypes);
+//         // }
+//
+//
+//         // MailTypes mailTypes = mailTypesMapper.selectById("1216603053680066562");
+//         // System.err.println(JSON.toJSONString(mailTypes));
+//
+//     }
+//
+//     @Test
+//     public void testRec(){
+//         // AipOcrUtils.rec(AipOcrUtils.initAipOcr());
+//         String result = getResult();
+//         JSONObject jsonObject = JSONObject.parseObject(result);
+//         JSONArray jsonArray = JSONArray.parseArray(JSONObject.parseObject(jsonObject.get("data").toString()).get("ret").toString());
+//         System.out.println(JSON.toJSONString(jsonArray));
+//         List<ResRecInfo> resRecInfos = new ArrayList<>();
+//         ResRecInfo resRecInfo;
+//         resRecInfo = ResRecInfo.builder()
+//                 .fromInfo(JSONObject.parseObject(jsonArray.get(0).toString()).get("word").toString())
+//                 .toInfo(JSONObject.parseObject(jsonArray.get(1).toString()).get("word").toString())
+//                 .build();
+//         System.err.println(JSON.toJSONString(resRecInfo));
+//     }
+//
+//     public String getResult(){
+//         return "{\n" +
+//                 "  \"log_id\": \"157775667218958\",\n" +
+//                 "  \"error_msg\": \"\",\n" +
+//                 "  \"data\": {\n" +
+//                 "    \"ret\": [\n" +
+//                 "      {\n" +
+//                 "        \"probability\": {\n" +
+//                 "          \"average\": 1,\n" +
+//                 "          \"min\": 1,\n" +
+//                 "          \"variance\": 0\n" +
+//                 "        },\n" +
+//                 "        \"location\": {\n" +
+//                 "          \"top\": 180,\n" +
+//                 "          \"left\": 1171,\n" +
+//                 "          \"width\": 255,\n" +
+//                 "          \"height\": 682\n" +
+//                 "        },\n" +
+//                 "        \"word_name\": \"from_info\",\n" +
+//                 "        \"word\": \"626-455-0558SUNING U1N23I0T  DS ANTA ANITE AVE OUTH EL MONTE CA 91733 SUnited States\"\n" +
+//                 "      },\n" +
+//                 "      {\n" +
+//                 "        \"probability\": {\n" +
+//                 "          \"average\": 1,\n" +
+//                 "          \"min\": 1,\n" +
+//                 "          \"variance\": 0\n" +
+//                 "        },\n" +
+//                 "        \"location\": {\n" +
+//                 "          \"top\": 264,\n" +
+//                 "          \"left\": 98,\n" +
+//                 "          \"width\": 206,\n" +
+//                 "          \"height\": 947\n" +
+//                 "        },\n" +
+//                 "        \"word_name\": \"to_info\",\n" +
+//                 "        \"word\": \"BGang Xu 13512111418ei Ai Lu 1200 Nong 3 Hao 502 Shi SN10685467617 Shang Hai Shi Shang Hai 201210 CHINA\"\n" +
+//                 "      }\n" +
+//                 "    ],\n" +
+//                 "    \"templateSign\": \"b7bfd701206d66e5942a56a9fa67532d\",\n" +
+//                 "    \"templateName\": \"20190624_014052\",\n" +
+//                 "    \"scores\": 1,\n" +
+//                 "    \"isStructured\": true,\n" +
+//                 "    \"logId\": \"157775667218958\",\n" +
+//                 "    \"templateMatchDegree\": 0.9748448714269653,\n" +
+//                 "    \"clockwiseAngle\": 269.83\n" +
+//                 "  },\n" +
+//                 "  \"error_code\": 0\n" +
+//                 "}";
+//     }
+//
+//     @Test
+//     public void testTranslate(){
+//         JSONObject resJson = JSONObject.parseObject(TransApiUtils.transEnToZh("hello"));
+//         JSONArray resArr = JSONArray.parseArray(resJson.get("trans_result").toString());
+//         JSONObject res = JSONObject.parseObject(resArr.get(0).toString());
+//         System.out.println(res.get("dst"));
+//     }
+//
+//     @Test
+//     public void testStr(){
+//         String name = "Gang Xu";
+//         String tel = "13512111418";
+//         String info = "Gang Xu 13512111418120 0 Nong Hao 502 BSehii ASiN 1L0u6 85467617 Shang Hai Shi Shang Hai 201210 CHINAS Form 2976-A-";
+//         String[] repeat = {name,tel};
+//         // System.err.println(StringUtils.replaceEachRepeatedly(info,repeat,repeat));
+//         System.err.println(StringUtils.remove(StringUtils.remove(info,name),tel));
+//
+//     }
+//
+//     @Test
+//     public void testResP(){
+//         JSONObject jsonObject = JSONObject.parseObject(getResultP());
+//         System.err.println(jsonObject);
+//         JSONArray resArr = JSON.parseArray(JSONObject.parseObject(jsonObject.get("data").toString()).get("ret").toString());
+//         Map<String,Object> map = new HashMap<>();
+//         for (Object o : resArr) {
+//             JSONObject j = (JSONObject)o;
+//             if (j.get("word_name").equals("from_addr")){
+//                 map.put("from_addr",j.get("word"));
+//             }
+//
+//             if (j.get("word_name").equals("from_tel")){
+//                 map.put("from_tel",j.get("word"));
+//             }
+//
+//             if (j.get("word_name").equals("to_addr")){
+//                 map.put("to_addr",j.get("word"));
+//             }
+//
+//             if (j.get("word_name").equals("to_zh")){
+//                 map.put("to_zh",j.get("word"));
+//             }
+//
+//             if (j.get("word_name").equals("to_name")){
+//                 map.put("to_name",j.get("word"));
+//             }
+//
+//             if (j.get("word_name").equals("from_info")){
+//                 map.put("from_info",j.get("word"));
+//             }
+//
+//             if (j.get("word_name").equals("to_info")){
+//                 map.put("to_info",j.get("word"));
+//             }
+//
+//             if (j.get("word_name").equals("from_name")){
+//                 map.put("from_name",j.get("word"));
+//             }
+//
+//             if (j.get("word_name").equals("to_tel")){
+//                 map.put("to_tel",j.get("word"));
+//             }
+//         }
+//         ResRecInfo resRecInfo = ResRecInfo.builder()
+//                 .imgUrl("hhtp:***.***.***.***/rec/1.jpg")
+//                 .fromName(map.get("from_name").toString())
+//                 .fromZhName(map.get("from_name").toString())
+//                 .fromTel(map.get("from_tel").toString())
+//                 .fromInfo(map.get("from_info").toString())
+//                 .fromZhAddr(StringUtils.remove(StringUtils.remove(map.get("from_info").toString(),map.get("from_name").toString()),map.get("from_tel").toString()))
+//                 .toName(map.get("to_name").toString())
+//                 .toZhName(map.get("to_name").toString())
+//                 .toTel(map.get("to_tel").toString())
+//                 .toInfo(StringUtils.remove(StringUtils.remove(map.get("to_info").toString(),map.get("to_name").toString()),map.get("to_tel").toString()))
+//                 .toZhAddr(map.get("to_info").toString())
+//                 .build();
+//         System.err.println(JSON.toJSONString(resRecInfo));
+//     }
+//
+//     public String getResultP(){
+//         return "{\n" +
+//                 "  \"log_id\": \"157777134713797\",\n" +
+//                 "  \"error_msg\": \"\",\n" +
+//                 "  \"data\": {\n" +
+//                 "    \"ret\": [\n" +
+//                 "      {\n" +
+//                 "        \"probability\": {\n" +
+//                 "          \"average\": 1,\n" +
+//                 "          \"min\": 1,\n" +
+//                 "          \"variance\": 0\n" +
+//                 "        },\n" +
+//                 "        \"location\": {\n" +
+//                 "          \"top\": 196,\n" +
+//                 "          \"left\": 1215,\n" +
+//                 "          \"width\": 115,\n" +
+//                 "          \"height\": 525\n" +
+//                 "        },\n" +
+//                 "        \"word_name\": \"from_addr\",\n" +
+//                 "        \"word\": \"70 TURNBULL CANYON RD ITY OF INDUSTRY CA 91745-1009 United States\"\n" +
+//                 "      },\n" +
+//                 "      {\n" +
+//                 "        \"probability\": {\n" +
+//                 "          \"average\": 1,\n" +
+//                 "          \"min\": 1,\n" +
+//                 "          \"variance\": 0\n" +
+//                 "        },\n" +
+//                 "        \"location\": {\n" +
+//                 "          \"top\": 282,\n" +
+//                 "          \"left\": 79,\n" +
+//                 "          \"width\": 203,\n" +
+//                 "          \"height\": 587\n" +
+//                 "        },\n" +
+//                 "        \"word_name\": \"to_addr\",\n" +
+//                 "        \"word\": \"Room 303, Building 2, Lane 76 Yuzhong Road, Xiqiao Town, Qingpu District,Shanghai, China Shanghai Shanghai 200000 CHINA\"\n" +
+//                 "      },\n" +
+//                 "      {\n" +
+//                 "        \"probability\": {\n" +
+//                 "          \"average\": 0.985547,\n" +
+//                 "          \"min\": 0.889448,\n" +
+//                 "          \"variance\": 9.97E-4\n" +
+//                 "        },\n" +
+//                 "        \"location\": {\n" +
+//                 "          \"top\": 604,\n" +
+//                 "          \"left\": 1390,\n" +
+//                 "          \"width\": 50,\n" +
+//                 "          \"height\": 276\n" +
+//                 "        },\n" +
+//                 "        \"word_name\": \"from_tel\",\n" +
+//                 "        \"word\": \"626-855-3088\"\n" +
+//                 "      },\n" +
+//                 "      {\n" +
+//                 "        \"probability\": {\n" +
+//                 "          \"average\": 0.996893,\n" +
+//                 "          \"min\": 0.961107,\n" +
+//                 "          \"variance\": 7.8E-5\n" +
+//                 "        },\n" +
+//                 "        \"location\": {\n" +
+//                 "          \"top\": 277,\n" +
+//                 "          \"left\": 320,\n" +
+//                 "          \"width\": 104,\n" +
+//                 "          \"height\": 931\n" +
+//                 "        },\n" +
+//                 "        \"word_name\": \"to_zh\",\n" +
+//                 "        \"word\": \"上海上海市青浦区西岑镇岑中路76弄2号楼303室青浦区西岑镇中路76弄2号楼303室\"\n" +
+//                 "      },\n" +
+//                 "      {\n" +
+//                 "        \"probability\": {\n" +
+//                 "          \"average\": 1,\n" +
+//                 "          \"min\": 1,\n" +
+//                 "          \"variance\": 0\n" +
+//                 "        },\n" +
+//                 "        \"location\": {\n" +
+//                 "          \"top\": 276,\n" +
+//                 "          \"left\": 265,\n" +
+//                 "          \"width\": 43,\n" +
+//                 "          \"height\": 189\n" +
+//                 "        },\n" +
+//                 "        \"word_name\": \"to_name\",\n" +
+//                 "        \"word\": \"Song Luo.\"\n" +
+//                 "      },\n" +
+//                 "      {\n" +
+//                 "        \"probability\": {\n" +
+//                 "          \"average\": 1,\n" +
+//                 "          \"min\": 1,\n" +
+//                 "          \"variance\": 0\n" +
+//                 "        },\n" +
+//                 "        \"location\": {\n" +
+//                 "          \"top\": 192,\n" +
+//                 "          \"left\": 1215,\n" +
+//                 "          \"width\": 227,\n" +
+//                 "          \"height\": 688\n" +
+//                 "        },\n" +
+//                 "        \"word_name\": \"from_info\",\n" +
+//                 "        \"word\": \"626-855-3088W7ORLD CPS INC I0 TURNBULL CANYON RD TY OF INDUSTRY CA 91745-1009 United States\"\n" +
+//                 "      },\n" +
+//                 "      {\n" +
+//                 "        \"probability\": {\n" +
+//                 "          \"average\": 1,\n" +
+//                 "          \"min\": 1,\n" +
+//                 "          \"variance\": 0\n" +
+//                 "        },\n" +
+//                 "        \"location\": {\n" +
+//                 "          \"top\": 276,\n" +
+//                 "          \"left\": 78,\n" +
+//                 "          \"width\": 346,\n" +
+//                 "          \"height\": 932\n" +
+//                 "        },\n" +
+//                 "        \"word_name\": \"to_info\",\n" +
+//                 "        \"word\": \"上海上海市青浦区西岑镇岑中路76弄2号楼303室青浦区西岑镇中路76弄2号楼303室Song Luo. 1366189944Room 303, Building 2, Lane 76 Yuzhong Road, Xiqiao Town, Qingpu District,Shanghai, China Shanghai Shanghai 200000 CHINA\"\n" +
+//                 "      },\n" +
+//                 "      {\n" +
+//                 "        \"probability\": {\n" +
+//                 "          \"average\": 1,\n" +
+//                 "          \"min\": 1,\n" +
+//                 "          \"variance\": 0\n" +
+//                 "        },\n" +
+//                 "        \"location\": {\n" +
+//                 "          \"top\": 209,\n" +
+//                 "          \"left\": 1320,\n" +
+//                 "          \"width\": 42,\n" +
+//                 "          \"height\": 234\n" +
+//                 "        },\n" +
+//                 "        \"word_name\": \"from_name\",\n" +
+//                 "        \"word\": \"ORLD CPS INC\"\n" +
+//                 "      },\n" +
+//                 "      {\n" +
+//                 "        \"probability\": {\n" +
+//                 "          \"average\": 0.997706,\n" +
+//                 "          \"min\": 0.986069,\n" +
+//                 "          \"variance\": 1.7E-5\n" +
+//                 "        },\n" +
+//                 "        \"location\": {\n" +
+//                 "          \"top\": 967,\n" +
+//                 "          \"left\": 284,\n" +
+//                 "          \"width\": 47,\n" +
+//                 "          \"height\": 223\n" +
+//                 "        },\n" +
+//                 "        \"word_name\": \"to_tel\",\n" +
+//                 "        \"word\": \"1366189944\"\n" +
+//                 "      }\n" +
+//                 "    ],\n" +
+//                 "    \"templateSign\": \"5aab7664cc5497d2f6f75ce99f1b133b\",\n" +
+//                 "    \"templateName\": \"20190622_105813\",\n" +
+//                 "    \"scores\": 1,\n" +
+//                 "    \"isStructured\": true,\n" +
+//                 "    \"logId\": \"157777134713797\",\n" +
+//                 "    \"templateMatchDegree\": 0.9929515290405418,\n" +
+//                 "    \"clockwiseAngle\": 269.81\n" +
+//                 "  },\n" +
+//                 "  \"error_code\": 0\n" +
+//                 "}";
+//     }
+//
+// }

Alguns ficheiros não foram mostrados porque muitos ficheiros mudaram neste diff