Commit 3d76350edd87d84910d57ca9591eabd0a094c369

Authored by baishou_zjx
1 parent fc4c9918
Exists in master

robot inerface

Showing 42 changed files with 2882 additions and 0 deletions   Show diff stats
springboot/morning-check/.gitignore 0 → 100644
... ... @@ -0,0 +1,31 @@
  1 +HELP.md
  2 +target/
  3 +!.mvn/wrapper/maven-wrapper.jar
  4 +!**/src/main/**
  5 +!**/src/test/**
  6 +
  7 +### STS ###
  8 +.apt_generated
  9 +.classpath
  10 +.factorypath
  11 +.project
  12 +.settings
  13 +.springBeans
  14 +.sts4-cache
  15 +
  16 +### IntelliJ IDEA ###
  17 +.idea
  18 +*.iws
  19 +*.iml
  20 +*.ipr
  21 +
  22 +### NetBeans ###
  23 +/nbproject/private/
  24 +/nbbuild/
  25 +/dist/
  26 +/nbdist/
  27 +/.nb-gradle/
  28 +build/
  29 +
  30 +### VS Code ###
  31 +.vscode/
... ...
springboot/morning-check/.mvn/wrapper/MavenWrapperDownloader.java 0 → 100644
... ... @@ -0,0 +1,114 @@
  1 +/*
  2 +Licensed to the Apache Software Foundation (ASF) under one
  3 +or more contributor license agreements. See the NOTICE file
  4 +distributed with this work for additional information
  5 +regarding copyright ownership. The ASF licenses this file
  6 +to you under the Apache License, Version 2.0 (the
  7 +"License"); you may not use this file except in compliance
  8 +with the License. You may obtain a copy of the License at
  9 +
  10 + https://www.apache.org/licenses/LICENSE-2.0
  11 +
  12 +Unless required by applicable law or agreed to in writing,
  13 +software distributed under the License is distributed on an
  14 +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  15 +KIND, either express or implied. See the License for the
  16 +specific language governing permissions and limitations
  17 +under the License.
  18 +*/
  19 +
  20 +import java.io.File;
  21 +import java.io.FileInputStream;
  22 +import java.io.FileOutputStream;
  23 +import java.io.IOException;
  24 +import java.net.URL;
  25 +import java.nio.channels.Channels;
  26 +import java.nio.channels.ReadableByteChannel;
  27 +import java.util.Properties;
  28 +
  29 +public class MavenWrapperDownloader {
  30 +
  31 + /**
  32 + * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided.
  33 + */
  34 + private static final String DEFAULT_DOWNLOAD_URL =
  35 + "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar";
  36 +
  37 + /**
  38 + * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to
  39 + * use instead of the default one.
  40 + */
  41 + private static final String MAVEN_WRAPPER_PROPERTIES_PATH =
  42 + ".mvn/wrapper/maven-wrapper.properties";
  43 +
  44 + /**
  45 + * Path where the maven-wrapper.jar will be saved to.
  46 + */
  47 + private static final String MAVEN_WRAPPER_JAR_PATH =
  48 + ".mvn/wrapper/maven-wrapper.jar";
  49 +
  50 + /**
  51 + * Name of the property which should be used to override the default download url for the wrapper.
  52 + */
  53 + private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl";
  54 +
  55 + public static void main(String args[]) {
  56 + System.out.println("- Downloader started");
  57 + File baseDirectory = new File(args[0]);
  58 + System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath());
  59 +
  60 + // If the maven-wrapper.properties exists, read it and check if it contains a custom
  61 + // wrapperUrl parameter.
  62 + File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH);
  63 + String url = DEFAULT_DOWNLOAD_URL;
  64 + if (mavenWrapperPropertyFile.exists()) {
  65 + FileInputStream mavenWrapperPropertyFileInputStream = null;
  66 + try {
  67 + mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile);
  68 + Properties mavenWrapperProperties = new Properties();
  69 + mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream);
  70 + url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url);
  71 + } catch (IOException e) {
  72 + System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'");
  73 + } finally {
  74 + try {
  75 + if (mavenWrapperPropertyFileInputStream != null) {
  76 + mavenWrapperPropertyFileInputStream.close();
  77 + }
  78 + } catch (IOException e) {
  79 + // Ignore ...
  80 + }
  81 + }
  82 + }
  83 + System.out.println("- Downloading from: : " + url);
  84 +
  85 + File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH);
  86 + if (!outputFile.getParentFile().exists()) {
  87 + if (!outputFile.getParentFile().mkdirs()) {
  88 + System.out.println(
  89 + "- ERROR creating output direcrory '" + outputFile.getParentFile().getAbsolutePath() + "'");
  90 + }
  91 + }
  92 + System.out.println("- Downloading to: " + outputFile.getAbsolutePath());
  93 + try {
  94 + downloadFileFromURL(url, outputFile);
  95 + System.out.println("Done");
  96 + System.exit(0);
  97 + } catch (Throwable e) {
  98 + System.out.println("- Error downloading");
  99 + e.printStackTrace();
  100 + System.exit(1);
  101 + }
  102 + }
  103 +
  104 + private static void downloadFileFromURL(String urlString, File destination) throws Exception {
  105 + URL website = new URL(urlString);
  106 + ReadableByteChannel rbc;
  107 + rbc = Channels.newChannel(website.openStream());
  108 + FileOutputStream fos = new FileOutputStream(destination);
  109 + fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
  110 + fos.close();
  111 + rbc.close();
  112 + }
  113 +
  114 +}
... ...
springboot/morning-check/.mvn/wrapper/maven-wrapper.jar 0 → 100644
No preview for this file type
springboot/morning-check/.mvn/wrapper/maven-wrapper.properties 0 → 100644
... ... @@ -0,0 +1 @@
  1 +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.0/apache-maven-3.6.0-bin.zip
... ...
springboot/morning-check/mvnw 0 → 100644
... ... @@ -0,0 +1,286 @@
  1 +#!/bin/sh
  2 +# ----------------------------------------------------------------------------
  3 +# Licensed to the Apache Software Foundation (ASF) under one
  4 +# or more contributor license agreements. See the NOTICE file
  5 +# distributed with this work for additional information
  6 +# regarding copyright ownership. The ASF licenses this file
  7 +# to you under the Apache License, Version 2.0 (the
  8 +# "License"); you may not use this file except in compliance
  9 +# with the License. You may obtain a copy of the License at
  10 +#
  11 +# https://www.apache.org/licenses/LICENSE-2.0
  12 +#
  13 +# Unless required by applicable law or agreed to in writing,
  14 +# software distributed under the License is distributed on an
  15 +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  16 +# KIND, either express or implied. See the License for the
  17 +# specific language governing permissions and limitations
  18 +# under the License.
  19 +# ----------------------------------------------------------------------------
  20 +
  21 +# ----------------------------------------------------------------------------
  22 +# Maven2 Start Up Batch script
  23 +#
  24 +# Required ENV vars:
  25 +# ------------------
  26 +# JAVA_HOME - location of a JDK home dir
  27 +#
  28 +# Optional ENV vars
  29 +# -----------------
  30 +# M2_HOME - location of maven2's installed home dir
  31 +# MAVEN_OPTS - parameters passed to the Java VM when running Maven
  32 +# e.g. to debug Maven itself, use
  33 +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
  34 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
  35 +# ----------------------------------------------------------------------------
  36 +
  37 +if [ -z "$MAVEN_SKIP_RC" ] ; then
  38 +
  39 + if [ -f /etc/mavenrc ] ; then
  40 + . /etc/mavenrc
  41 + fi
  42 +
  43 + if [ -f "$HOME/.mavenrc" ] ; then
  44 + . "$HOME/.mavenrc"
  45 + fi
  46 +
  47 +fi
  48 +
  49 +# OS specific support. $var _must_ be set to either true or false.
  50 +cygwin=false;
  51 +darwin=false;
  52 +mingw=false
  53 +case "`uname`" in
  54 + CYGWIN*) cygwin=true ;;
  55 + MINGW*) mingw=true;;
  56 + Darwin*) darwin=true
  57 + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
  58 + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
  59 + if [ -z "$JAVA_HOME" ]; then
  60 + if [ -x "/usr/libexec/java_home" ]; then
  61 + export JAVA_HOME="`/usr/libexec/java_home`"
  62 + else
  63 + export JAVA_HOME="/Library/Java/Home"
  64 + fi
  65 + fi
  66 + ;;
  67 +esac
  68 +
  69 +if [ -z "$JAVA_HOME" ] ; then
  70 + if [ -r /etc/gentoo-release ] ; then
  71 + JAVA_HOME=`java-config --jre-home`
  72 + fi
  73 +fi
  74 +
  75 +if [ -z "$M2_HOME" ] ; then
  76 + ## resolve links - $0 may be a link to maven's home
  77 + PRG="$0"
  78 +
  79 + # need this for relative symlinks
  80 + while [ -h "$PRG" ] ; do
  81 + ls=`ls -ld "$PRG"`
  82 + link=`expr "$ls" : '.*-> \(.*\)$'`
  83 + if expr "$link" : '/.*' > /dev/null; then
  84 + PRG="$link"
  85 + else
  86 + PRG="`dirname "$PRG"`/$link"
  87 + fi
  88 + done
  89 +
  90 + saveddir=`pwd`
  91 +
  92 + M2_HOME=`dirname "$PRG"`/..
  93 +
  94 + # make it fully qualified
  95 + M2_HOME=`cd "$M2_HOME" && pwd`
  96 +
  97 + cd "$saveddir"
  98 + # echo Using m2 at $M2_HOME
  99 +fi
  100 +
  101 +# For Cygwin, ensure paths are in UNIX format before anything is touched
  102 +if $cygwin ; then
  103 + [ -n "$M2_HOME" ] &&
  104 + M2_HOME=`cygpath --unix "$M2_HOME"`
  105 + [ -n "$JAVA_HOME" ] &&
  106 + JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
  107 + [ -n "$CLASSPATH" ] &&
  108 + CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
  109 +fi
  110 +
  111 +# For Mingw, ensure paths are in UNIX format before anything is touched
  112 +if $mingw ; then
  113 + [ -n "$M2_HOME" ] &&
  114 + M2_HOME="`(cd "$M2_HOME"; pwd)`"
  115 + [ -n "$JAVA_HOME" ] &&
  116 + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
  117 + # TODO classpath?
  118 +fi
  119 +
  120 +if [ -z "$JAVA_HOME" ]; then
  121 + javaExecutable="`which javac`"
  122 + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
  123 + # readlink(1) is not available as standard on Solaris 10.
  124 + readLink=`which readlink`
  125 + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
  126 + if $darwin ; then
  127 + javaHome="`dirname \"$javaExecutable\"`"
  128 + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
  129 + else
  130 + javaExecutable="`readlink -f \"$javaExecutable\"`"
  131 + fi
  132 + javaHome="`dirname \"$javaExecutable\"`"
  133 + javaHome=`expr "$javaHome" : '\(.*\)/bin'`
  134 + JAVA_HOME="$javaHome"
  135 + export JAVA_HOME
  136 + fi
  137 + fi
  138 +fi
  139 +
  140 +if [ -z "$JAVACMD" ] ; then
  141 + if [ -n "$JAVA_HOME" ] ; then
  142 + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
  143 + # IBM's JDK on AIX uses strange locations for the executables
  144 + JAVACMD="$JAVA_HOME/jre/sh/java"
  145 + else
  146 + JAVACMD="$JAVA_HOME/bin/java"
  147 + fi
  148 + else
  149 + JAVACMD="`which java`"
  150 + fi
  151 +fi
  152 +
  153 +if [ ! -x "$JAVACMD" ] ; then
  154 + echo "Error: JAVA_HOME is not defined correctly." >&2
  155 + echo " We cannot execute $JAVACMD" >&2
  156 + exit 1
  157 +fi
  158 +
  159 +if [ -z "$JAVA_HOME" ] ; then
  160 + echo "Warning: JAVA_HOME environment variable is not set."
  161 +fi
  162 +
  163 +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
  164 +
  165 +# traverses directory structure from process work directory to filesystem root
  166 +# first directory with .mvn subdirectory is considered project base directory
  167 +find_maven_basedir() {
  168 +
  169 + if [ -z "$1" ]
  170 + then
  171 + echo "Path not specified to find_maven_basedir"
  172 + return 1
  173 + fi
  174 +
  175 + basedir="$1"
  176 + wdir="$1"
  177 + while [ "$wdir" != '/' ] ; do
  178 + if [ -d "$wdir"/.mvn ] ; then
  179 + basedir=$wdir
  180 + break
  181 + fi
  182 + # workaround for JBEAP-8937 (on Solaris 10/Sparc)
  183 + if [ -d "${wdir}" ]; then
  184 + wdir=`cd "$wdir/.."; pwd`
  185 + fi
  186 + # end of workaround
  187 + done
  188 + echo "${basedir}"
  189 +}
  190 +
  191 +# concatenates all lines of a file
  192 +concat_lines() {
  193 + if [ -f "$1" ]; then
  194 + echo "$(tr -s '\n' ' ' < "$1")"
  195 + fi
  196 +}
  197 +
  198 +BASE_DIR=`find_maven_basedir "$(pwd)"`
  199 +if [ -z "$BASE_DIR" ]; then
  200 + exit 1;
  201 +fi
  202 +
  203 +##########################################################################################
  204 +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
  205 +# This allows using the maven wrapper in projects that prohibit checking in binary data.
  206 +##########################################################################################
  207 +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
  208 + if [ "$MVNW_VERBOSE" = true ]; then
  209 + echo "Found .mvn/wrapper/maven-wrapper.jar"
  210 + fi
  211 +else
  212 + if [ "$MVNW_VERBOSE" = true ]; then
  213 + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
  214 + fi
  215 + jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar"
  216 + while IFS="=" read key value; do
  217 + case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
  218 + esac
  219 + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
  220 + if [ "$MVNW_VERBOSE" = true ]; then
  221 + echo "Downloading from: $jarUrl"
  222 + fi
  223 + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
  224 +
  225 + if command -v wget > /dev/null; then
  226 + if [ "$MVNW_VERBOSE" = true ]; then
  227 + echo "Found wget ... using wget"
  228 + fi
  229 + wget "$jarUrl" -O "$wrapperJarPath"
  230 + elif command -v curl > /dev/null; then
  231 + if [ "$MVNW_VERBOSE" = true ]; then
  232 + echo "Found curl ... using curl"
  233 + fi
  234 + curl -o "$wrapperJarPath" "$jarUrl"
  235 + else
  236 + if [ "$MVNW_VERBOSE" = true ]; then
  237 + echo "Falling back to using Java to download"
  238 + fi
  239 + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
  240 + if [ -e "$javaClass" ]; then
  241 + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
  242 + if [ "$MVNW_VERBOSE" = true ]; then
  243 + echo " - Compiling MavenWrapperDownloader.java ..."
  244 + fi
  245 + # Compiling the Java class
  246 + ("$JAVA_HOME/bin/javac" "$javaClass")
  247 + fi
  248 + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
  249 + # Running the downloader
  250 + if [ "$MVNW_VERBOSE" = true ]; then
  251 + echo " - Running MavenWrapperDownloader.java ..."
  252 + fi
  253 + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
  254 + fi
  255 + fi
  256 + fi
  257 +fi
  258 +##########################################################################################
  259 +# End of extension
  260 +##########################################################################################
  261 +
  262 +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
  263 +if [ "$MVNW_VERBOSE" = true ]; then
  264 + echo $MAVEN_PROJECTBASEDIR
  265 +fi
  266 +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
  267 +
  268 +# For Cygwin, switch paths to Windows format before running java
  269 +if $cygwin; then
  270 + [ -n "$M2_HOME" ] &&
  271 + M2_HOME=`cygpath --path --windows "$M2_HOME"`
  272 + [ -n "$JAVA_HOME" ] &&
  273 + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
  274 + [ -n "$CLASSPATH" ] &&
  275 + CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
  276 + [ -n "$MAVEN_PROJECTBASEDIR" ] &&
  277 + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
  278 +fi
  279 +
  280 +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
  281 +
  282 +exec "$JAVACMD" \
  283 + $MAVEN_OPTS \
  284 + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
  285 + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
  286 + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
... ...
springboot/morning-check/mvnw.cmd 0 → 100644
... ... @@ -0,0 +1,161 @@
  1 +@REM ----------------------------------------------------------------------------
  2 +@REM Licensed to the Apache Software Foundation (ASF) under one
  3 +@REM or more contributor license agreements. See the NOTICE file
  4 +@REM distributed with this work for additional information
  5 +@REM regarding copyright ownership. The ASF licenses this file
  6 +@REM to you under the Apache License, Version 2.0 (the
  7 +@REM "License"); you may not use this file except in compliance
  8 +@REM with the License. You may obtain a copy of the License at
  9 +@REM
  10 +@REM https://www.apache.org/licenses/LICENSE-2.0
  11 +@REM
  12 +@REM Unless required by applicable law or agreed to in writing,
  13 +@REM software distributed under the License is distributed on an
  14 +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  15 +@REM KIND, either express or implied. See the License for the
  16 +@REM specific language governing permissions and limitations
  17 +@REM under the License.
  18 +@REM ----------------------------------------------------------------------------
  19 +
  20 +@REM ----------------------------------------------------------------------------
  21 +@REM Maven2 Start Up Batch script
  22 +@REM
  23 +@REM Required ENV vars:
  24 +@REM JAVA_HOME - location of a JDK home dir
  25 +@REM
  26 +@REM Optional ENV vars
  27 +@REM M2_HOME - location of maven2's installed home dir
  28 +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
  29 +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending
  30 +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
  31 +@REM e.g. to debug Maven itself, use
  32 +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
  33 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
  34 +@REM ----------------------------------------------------------------------------
  35 +
  36 +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
  37 +@echo off
  38 +@REM set title of command window
  39 +title %0
  40 +@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on'
  41 +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
  42 +
  43 +@REM set %HOME% to equivalent of $HOME
  44 +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
  45 +
  46 +@REM Execute a user defined script before this one
  47 +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
  48 +@REM check for pre script, once with legacy .bat ending and once with .cmd ending
  49 +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
  50 +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
  51 +:skipRcPre
  52 +
  53 +@setlocal
  54 +
  55 +set ERROR_CODE=0
  56 +
  57 +@REM To isolate internal variables from possible post scripts, we use another setlocal
  58 +@setlocal
  59 +
  60 +@REM ==== START VALIDATION ====
  61 +if not "%JAVA_HOME%" == "" goto OkJHome
  62 +
  63 +echo.
  64 +echo Error: JAVA_HOME not found in your environment. >&2
  65 +echo Please set the JAVA_HOME variable in your environment to match the >&2
  66 +echo location of your Java installation. >&2
  67 +echo.
  68 +goto error
  69 +
  70 +:OkJHome
  71 +if exist "%JAVA_HOME%\bin\java.exe" goto init
  72 +
  73 +echo.
  74 +echo Error: JAVA_HOME is set to an invalid directory. >&2
  75 +echo JAVA_HOME = "%JAVA_HOME%" >&2
  76 +echo Please set the JAVA_HOME variable in your environment to match the >&2
  77 +echo location of your Java installation. >&2
  78 +echo.
  79 +goto error
  80 +
  81 +@REM ==== END VALIDATION ====
  82 +
  83 +:init
  84 +
  85 +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
  86 +@REM Fallback to current working directory if not found.
  87 +
  88 +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
  89 +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
  90 +
  91 +set EXEC_DIR=%CD%
  92 +set WDIR=%EXEC_DIR%
  93 +:findBaseDir
  94 +IF EXIST "%WDIR%"\.mvn goto baseDirFound
  95 +cd ..
  96 +IF "%WDIR%"=="%CD%" goto baseDirNotFound
  97 +set WDIR=%CD%
  98 +goto findBaseDir
  99 +
  100 +:baseDirFound
  101 +set MAVEN_PROJECTBASEDIR=%WDIR%
  102 +cd "%EXEC_DIR%"
  103 +goto endDetectBaseDir
  104 +
  105 +:baseDirNotFound
  106 +set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
  107 +cd "%EXEC_DIR%"
  108 +
  109 +:endDetectBaseDir
  110 +
  111 +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
  112 +
  113 +@setlocal EnableExtensions EnableDelayedExpansion
  114 +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
  115 +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
  116 +
  117 +:endReadAdditionalConfig
  118 +
  119 +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
  120 +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
  121 +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
  122 +
  123 +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar"
  124 +FOR /F "tokens=1,2 delims==" %%A IN (%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties) DO (
  125 + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
  126 +)
  127 +
  128 +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
  129 +@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
  130 +if exist %WRAPPER_JAR% (
  131 + echo Found %WRAPPER_JAR%
  132 +) else (
  133 + echo Couldn't find %WRAPPER_JAR%, downloading it ...
  134 + echo Downloading from: %DOWNLOAD_URL%
  135 + powershell -Command "(New-Object Net.WebClient).DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"
  136 + echo Finished downloading %WRAPPER_JAR%
  137 +)
  138 +@REM End of extension
  139 +
  140 +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
  141 +if ERRORLEVEL 1 goto error
  142 +goto end
  143 +
  144 +:error
  145 +set ERROR_CODE=1
  146 +
  147 +:end
  148 +@endlocal & set ERROR_CODE=%ERROR_CODE%
  149 +
  150 +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
  151 +@REM check for post script, once with legacy .bat ending and once with .cmd ending
  152 +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
  153 +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
  154 +:skipRcPost
  155 +
  156 +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
  157 +if "%MAVEN_BATCH_PAUSE%" == "on" pause
  158 +
  159 +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
  160 +
  161 +exit /B %ERROR_CODE%
... ...
springboot/morning-check/pom.xml 0 → 100644
... ... @@ -0,0 +1,129 @@
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3 + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4 + <modelVersion>4.0.0</modelVersion>
  5 + <parent>
  6 + <groupId>org.springframework.boot</groupId>
  7 + <artifactId>spring-boot-starter-parent</artifactId>
  8 + <version>2.1.6.RELEASE</version>
  9 + <relativePath/> <!-- lookup parent from repository -->
  10 + </parent>
  11 + <groupId>com.sincere</groupId>
  12 + <artifactId>morning-check</artifactId>
  13 + <version>0.0.1-SNAPSHOT</version>
  14 + <name>Morning-Check</name>
  15 + <description>MorningCheckMachine project for Spring Boot</description>
  16 +
  17 + <properties>
  18 + <java.version>1.8</java.version>
  19 + </properties>
  20 +
  21 + <dependencies>
  22 + <dependency>
  23 + <groupId>org.springframework.boot</groupId>
  24 + <artifactId>spring-boot-starter-web</artifactId>
  25 + </dependency>
  26 +
  27 + <dependency>
  28 + <groupId>org.springframework.boot</groupId>
  29 + <artifactId>spring-boot-starter-test</artifactId>
  30 + <scope>test</scope>
  31 + </dependency>
  32 +
  33 + <dependency>
  34 + <groupId>org.json</groupId>
  35 + <artifactId>json</artifactId>
  36 + <version>20180813</version>
  37 + </dependency>
  38 +
  39 + <!--API文档配置-->
  40 + <dependency>
  41 + <groupId>io.springfox</groupId>
  42 + <artifactId>springfox-swagger-ui</artifactId>
  43 + <version>2.9.2</version>
  44 + </dependency>
  45 +
  46 + <dependency>
  47 + <groupId>io.springfox</groupId>
  48 + <artifactId>springfox-swagger2</artifactId>
  49 + <version>2.9.2</version>
  50 + </dependency>
  51 + <!--常用工具的使用-->
  52 + <dependency>
  53 + <groupId>org.apache.commons</groupId>
  54 + <artifactId>commons-lang3</artifactId>
  55 + <!--<scope>runtime</scope>-->
  56 + </dependency>
  57 +
  58 + <dependency>
  59 + <groupId>org.projectlombok</groupId>
  60 + <artifactId>lombok</artifactId>
  61 + <version>1.16.18</version>
  62 + </dependency>
  63 + <!--模拟http请求包-->
  64 + <dependency>
  65 + <groupId>org.apache.httpcomponents</groupId>
  66 + <artifactId>httpclient</artifactId>
  67 + <version>4.5.3</version>
  68 + </dependency>
  69 + <!--HttpMime是HttpClient类库包中的一部分,配合HttpClient一起使用能够解决multipart/form-data等类型上传数据的需求-->
  70 + <dependency>
  71 + <groupId>org.apache.httpcomponents</groupId>
  72 + <artifactId>httpmime</artifactId>
  73 + <version>4.5.6</version>
  74 + </dependency>
  75 + <!--Json格式的字符串序列化和反序列化 fastjson-->
  76 + <dependency>
  77 + <groupId>com.alibaba</groupId>
  78 + <artifactId>fastjson</artifactId>
  79 + <version>1.2.58</version>
  80 + </dependency>
  81 + <!--开启 cache 缓存-->
  82 + <dependency>
  83 + <groupId>org.springframework.boot</groupId>
  84 + <artifactId>spring-boot-starter-cache</artifactId>
  85 + </dependency>
  86 + <!-- ehcache 缓存 -->
  87 + <dependency>
  88 + <groupId>net.sf.ehcache</groupId>
  89 + <artifactId>ehcache</artifactId>
  90 + </dependency>
  91 +
  92 + <!-- 文件上传组件 -->
  93 + <dependency>
  94 + <groupId>commons-fileupload</groupId>
  95 + <artifactId>commons-fileupload</artifactId>
  96 + <version>1.3.1</version>
  97 + </dependency>
  98 + <!-- 图片处理类,例如压缩、旋转之类的 -->
  99 + <dependency>
  100 + <groupId>net.coobird</groupId>
  101 + <artifactId>thumbnailator</artifactId>
  102 + <version>0.4.8</version>
  103 + </dependency>
  104 +
  105 +
  106 + <dependency>
  107 + <groupId>com.microsoft.sqlserver</groupId>
  108 + <artifactId>mssql-jdbc</artifactId>
  109 + <scope>runtime</scope>
  110 + </dependency>
  111 +
  112 + <dependency>
  113 + <groupId>org.mybatis.spring.boot</groupId>
  114 + <artifactId>mybatis-spring-boot-starter</artifactId>
  115 + <version>2.0.0</version>
  116 + </dependency>
  117 +
  118 + </dependencies>
  119 +
  120 + <build>
  121 + <plugins>
  122 + <plugin>
  123 + <groupId>org.springframework.boot</groupId>
  124 + <artifactId>spring-boot-maven-plugin</artifactId>
  125 + </plugin>
  126 + </plugins>
  127 + </build>
  128 +
  129 +</project>
... ...
springboot/morning-check/src/main/java/com/sincere/morningcheck/MorningCheckApplication.java 0 → 100644
... ... @@ -0,0 +1,35 @@
  1 +package com.sincere.morningcheck;
  2 +
  3 +import org.mybatis.spring.annotation.MapperScan;
  4 +import org.springframework.boot.SpringApplication;
  5 +import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
  6 +import org.springframework.boot.autoconfigure.SpringBootApplication;
  7 +import org.springframework.boot.autoconfigure.web.servlet.MultipartAutoConfiguration;
  8 +import org.springframework.context.annotation.Bean;
  9 +import org.springframework.web.multipart.MultipartResolver;
  10 +import org.springframework.web.multipart.commons.CommonsMultipartResolver;
  11 +
  12 +//exclude表示自动配置时不包括Multipart配置
  13 +//@EnableAutoConfiguration(exclude = {MultipartAutoConfiguration.class}),这样写法会有警告,改成下面的写法
  14 +@SpringBootApplication(exclude = {MultipartAutoConfiguration.class})
  15 +public class MorningCheckApplication {
  16 +
  17 +
  18 + public static void main(String[] args) {
  19 + SpringApplication.run(MorningCheckApplication.class, args);
  20 + }
  21 +
  22 + /**
  23 + * 显示声明CommonsMultipartResolver为mutipartResolver
  24 + */
  25 + @Bean(name = "multipartResolver")
  26 + public MultipartResolver multipartResolver() {
  27 + CommonsMultipartResolver resolver = new CommonsMultipartResolver();
  28 + //resolver.setDefaultEncoding("UTF-8");
  29 + //resolveLazily属性启用是为了推迟文件解析,以在在UploadAction中捕获文件大小异常
  30 + resolver.setResolveLazily(true);
  31 + resolver.setMaxInMemorySize(40960);
  32 + resolver.setMaxUploadSize(50 * 1024 * 1024);//上传文件大小 50 10*1024*1024
  33 + return resolver;
  34 + }
  35 +}
... ...
springboot/morning-check/src/main/java/com/sincere/morningcheck/common/EhcacheUtil.java 0 → 100644
... ... @@ -0,0 +1,230 @@
  1 +package com.sincere.morningcheck.common;
  2 +
  3 +import com.alibaba.fastjson.JSON;
  4 +import net.sf.ehcache.CacheException;
  5 +import net.sf.ehcache.CacheManager;
  6 +import net.sf.ehcache.Ehcache;
  7 +import net.sf.ehcache.Element;
  8 +
  9 +import java.io.IOException;
  10 +import java.io.InputStream;
  11 +
  12 +public class EhcacheUtil {
  13 +
  14 + /**
  15 + * CacheManage是Ehcache框架的核心接口和类,负责管理一个或多个Cache对象
  16 + */
  17 + private static final CacheManager CACHE_MANAGER = createCacheManager();
  18 +
  19 + /**
  20 + * 描 述: 根据ehcache.xml,创建CacheManager生产器
  21 + * 参 数:
  22 + * 返回值: net.sf.ehcache.CacheManager
  23 + * 创建时间: 2018/5/23
  24 + */
  25 + private static CacheManager createCacheManager() {
  26 + CacheManager cacheManager;
  27 + InputStream input = EhcacheUtil.class.getResourceAsStream("/ehcache.xml");
  28 +
  29 + if (input != null) {
  30 + try {
  31 + cacheManager = CacheManager.create(input);
  32 + } catch (Throwable t) {
  33 + cacheManager = CacheManager.create();
  34 + } finally {
  35 + try {
  36 + input.close();
  37 + } catch (IOException e) {
  38 + }
  39 + }
  40 + } else {
  41 + cacheManager = CacheManager.create();
  42 + }
  43 +
  44 + return cacheManager;
  45 + }
  46 +
  47 + /**
  48 + * The cache id. 缓存所在的位置标识
  49 + */
  50 + private final String id;
  51 +
  52 + /**
  53 + * 创建EhCache
  54 + */
  55 + public EhcacheUtil(){
  56 + this.id = this.getClass().getName();
  57 + if (!CACHE_MANAGER.cacheExists(this.id)) {
  58 + CACHE_MANAGER.addCache(this.id);
  59 + }
  60 + }
  61 +
  62 + /**
  63 + * 得到当前缓存
  64 + * @return
  65 + */
  66 + private Ehcache getCache() {
  67 + return CACHE_MANAGER.getCache(this.id);
  68 + }
  69 +
  70 + /**
  71 + * 写入EhCache,当前实例对象T,同时转成Json格式
  72 + * @param key
  73 + * @param value
  74 + * @param <T>
  75 + */
  76 + public <T> void set(String key, T value){
  77 + setObject(key, JSON.toJSONString(value));
  78 + }
  79 +
  80 + /**
  81 + * 写入EhCache,字符串对象
  82 + * @param key
  83 + * @param value
  84 + */
  85 + public void set(String key, String value){
  86 + setObject(key,value);
  87 + }
  88 +
  89 + /**
  90 + * 写入EhCache,当前实例对象T, 同时转成Json格式,并设置失效时间
  91 + * @param key
  92 + * @param value
  93 + * @param time
  94 + * @param <T>
  95 + */
  96 + public <T> void setex(String key, T value, int time){
  97 + setexObject(key, JSON.toJSONString(value),time);
  98 + }
  99 +
  100 + /**
  101 + * 写入EhCache,字符串对象,并设置失效时间
  102 + * @param key
  103 + * @param value
  104 + * @param time
  105 + */
  106 + public void setex(String key, String value, int time){
  107 + setexObject(key,value,time);
  108 + }
  109 +
  110 + /**
  111 + * 存入EhCache缓存
  112 + * @param key
  113 + * @param value
  114 + */
  115 + public void setObject(String key, Object value) {
  116 + try {
  117 + this.getCache().put(new Element(key, value));
  118 + } catch (Throwable t) {
  119 + throw new CacheException(t.getMessage(),t);
  120 + }
  121 + }
  122 +
  123 + /**
  124 + * 存入EhCache缓存,并设置失效时间
  125 + * @param key
  126 + * @param value
  127 + * @param time
  128 + */
  129 + public void setexObject(String key, Object value, int time) {
  130 + Element element = new Element(key, value);
  131 + element.setTimeToLive(time);
  132 + try {
  133 + this.getCache().put(element);
  134 + } catch (Throwable t) {
  135 + throw new CacheException(t.getMessage(),t);
  136 + }
  137 + }
  138 +
  139 + /**
  140 + * 获取EhCache对象,字符串对象
  141 + * @param key
  142 + * @return
  143 + */
  144 + public String get(String key){
  145 + Object value = getObject(key);
  146 + return value == null ? "" : value.toString();
  147 + }
  148 +
  149 + /**
  150 + * 获取EhCache对象,当前实例对象T
  151 + * @param key
  152 + * @param clazz
  153 + * @param <T>
  154 + * @return
  155 + */
  156 + public <T> T get(String key, Class<T> clazz){
  157 + Object obj = getObject(key);
  158 + if(obj == null){
  159 + return null;
  160 + }
  161 + return JSON.parseObject(getObject(key).toString(),clazz);
  162 + }
  163 +
  164 + /**
  165 + * 根据Key获取缓存对象
  166 + * @param key
  167 + * @return
  168 + */
  169 + public Object getObject(String key) {
  170 + try {
  171 + Element cachedElement = this.getCache().get(key);
  172 + if (cachedElement == null) {
  173 + return null;
  174 + }
  175 + return cachedElement.getObjectValue();
  176 + } catch (Exception t) {
  177 + throw new CacheException(t.getMessage(),t);
  178 + }
  179 + }
  180 +
  181 + /**
  182 + * 删除当前Cache的key
  183 + * @param key
  184 + */
  185 + public void remove(String key) {
  186 + try {
  187 + this.getCache().remove(key);
  188 + } catch (Throwable t) {
  189 + throw new CacheException(t.getMessage(),t);
  190 + }
  191 + }
  192 +
  193 + /**
  194 + * 获取当前Cache的数目
  195 + * @return
  196 + */
  197 + public Long dbSize() {
  198 + try {
  199 + return Long.valueOf(this.getCache().getSize());
  200 + } catch (Throwable t) {
  201 + throw new CacheException(t.getMessage(),t);
  202 + }
  203 + }
  204 +
  205 + /**
  206 + * 清空当前Cache的所有缓存
  207 + */
  208 + public void flushDB() {
  209 + this.getCache().removeAll();
  210 + }
  211 +
  212 +
  213 + /**
  214 + * 重写hashCode
  215 + * @return
  216 + */
  217 + @Override
  218 + public int hashCode() {
  219 + return this.id.hashCode();
  220 + }
  221 +
  222 + /**
  223 + * 重写toString
  224 + * @return
  225 + */
  226 + @Override
  227 + public String toString() {
  228 + return "EHCache {" + this.id + "}";
  229 + }
  230 +}
... ...
springboot/morning-check/src/main/java/com/sincere/morningcheck/common/Encript.java 0 → 100644
... ... @@ -0,0 +1,45 @@
  1 +package com.sincere.morningcheck.common;
  2 +
  3 +import javax.crypto.Mac;
  4 +import javax.crypto.spec.SecretKeySpec;
  5 +
  6 +public class Encript {
  7 +
  8 + /**
  9 + * 将加密后的字节数组转换成字符串(原始64位)
  10 + *
  11 + * @param b 字节数组
  12 + * @return 字符串
  13 + */
  14 + public static String byteArrayToHexString(byte[] b) {
  15 + StringBuilder hs = new StringBuilder();
  16 + String stmp;
  17 + for (int n = 0; b!=null && n < b.length; n++) {
  18 + stmp = Integer.toHexString(b[n] & 0XFF);
  19 + if (stmp.length() == 1)
  20 + hs.append('0');
  21 + hs.append(stmp);
  22 + }
  23 + return hs.toString().toLowerCase();
  24 + }
  25 +
  26 + /**
  27 + * sha256_HMAC加密
  28 + * @param message 消息
  29 + * @param secret 秘钥
  30 + * @return 加密后字符串
  31 + * */
  32 + public static String sha256_HMAC(String message, String secret) {
  33 + String hash = "";
  34 + try {
  35 + Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
  36 + SecretKeySpec secret_key = new SecretKeySpec(secret.getBytes(), "HmacSHA256");
  37 + sha256_HMAC.init(secret_key);
  38 + byte[] bytes = sha256_HMAC.doFinal(message.getBytes());
  39 + hash = byteArrayToHexString(bytes);
  40 + } catch (Exception e) {
  41 + System.out.println("Error HmacSHA256 ===========" + e.getMessage());
  42 + }
  43 + return hash;
  44 + }
  45 +}
... ...
springboot/morning-check/src/main/java/com/sincere/morningcheck/common/ImgType.java 0 → 100644
... ... @@ -0,0 +1,31 @@
  1 +package com.sincere.morningcheck.common;
  2 +
  3 +public enum ImgType {
  4 +
  5 + // hand
  6 + // 口部图片类型名:mouth
  7 + // 眼部图片类型名: face
  8 + // 接送图片类型名: card
  9 +
  10 + hand(0,"hand"),
  11 + mouth(1,"mouth"),
  12 + face(2,"face"),
  13 + card(3,"card");
  14 +
  15 + private final int type;
  16 + private final String value;
  17 +
  18 +
  19 + ImgType(int type, String value) {
  20 + this.type = type;
  21 + this.value = value;
  22 + }
  23 +
  24 + public int getType() {
  25 + return type;
  26 + }
  27 +
  28 + public String getValue() {
  29 + return value;
  30 + }
  31 +}
... ...
springboot/morning-check/src/main/java/com/sincere/morningcheck/common/MD5.java 0 → 100644
... ... @@ -0,0 +1,40 @@
  1 +package com.sincere.morningcheck.common;
  2 +
  3 +import org.apache.commons.codec.digest.DigestUtils;
  4 +
  5 +public class MD5 {
  6 +
  7 + /**
  8 + * MD5方法
  9 + *
  10 + * @param text 明文
  11 + * @param key 密钥
  12 + * @return 密文
  13 + * @throws Exception
  14 + */
  15 + public static String md5(String text, String key) throws Exception {
  16 + //加密后的字符串
  17 + String encodeStr= DigestUtils.md5Hex(text + key);
  18 + return encodeStr;
  19 + }
  20 +
  21 + /**
  22 + * MD5验证方法
  23 + *
  24 + * @param text 明文
  25 + * @param key 密钥
  26 + * @param md5 密文
  27 + * @return true/false
  28 + * @throws Exception
  29 + */
  30 + public static boolean verify(String text, String key, String md5) throws Exception {
  31 + //根据传入的密钥进行验证
  32 + String md5Text = md5(text, key);
  33 + if(md5Text.equalsIgnoreCase(md5))
  34 + {
  35 + return true;
  36 + }
  37 +
  38 + return false;
  39 + }
  40 +}
... ...
springboot/morning-check/src/main/java/com/sincere/morningcheck/common/ResponseCode.java 0 → 100644
... ... @@ -0,0 +1,29 @@
  1 +package com.sincere.morningcheck.common;
  2 +
  3 +/**
  4 + * Created by Ziv
  5 + */
  6 +public enum ResponseCode {
  7 +
  8 + SUCCESS(1, "SUCCESS"),
  9 + ERROR(0, "ERROR");
  10 +
  11 +
  12 + private final int code;
  13 + private final String desc;
  14 +
  15 +
  16 + ResponseCode(int code, String desc) {
  17 + this.code = code;
  18 + this.desc = desc;
  19 + }
  20 +
  21 + public int getCode() {
  22 + return code;
  23 + }
  24 +
  25 + public String getDesc() {
  26 + return desc;
  27 + }
  28 +
  29 +}
... ...
springboot/morning-check/src/main/java/com/sincere/morningcheck/common/ServerResponse.java 0 → 100644
... ... @@ -0,0 +1,105 @@
  1 +package com.sincere.morningcheck.common;
  2 +
  3 +import com.fasterxml.jackson.annotation.JsonIgnore;
  4 +import com.fasterxml.jackson.annotation.JsonInclude;
  5 +
  6 +
  7 +import java.io.Serializable;
  8 +
  9 +/**
  10 + * Created by Ziv
  11 + */
  12 +@JsonInclude(JsonInclude.Include.NON_EMPTY)
  13 +
  14 +public class ServerResponse<T> implements Serializable {
  15 +
  16 + /**
  17 + * 操作状态码
  18 + */
  19 + private int code;
  20 + /**
  21 + * 状态信息
  22 + */
  23 + private String message;
  24 + /**
  25 + * 返回的数据包
  26 + */
  27 + private T data;
  28 +
  29 + private ServerResponse(int code) {
  30 + this.code = code;
  31 + }
  32 +
  33 + private ServerResponse(int code, T data) {
  34 + this.code = code;
  35 + this.data = data;
  36 + }
  37 +
  38 +
  39 + private ServerResponse(int code, String message, T data) {
  40 + this.code = code;
  41 + this.message = message;
  42 + this.data = data;
  43 + }
  44 + private ServerResponse(int code, String message) {
  45 + this.code = code;
  46 + this.message = message;
  47 + }
  48 +
  49 + @JsonIgnore
  50 + //使之不在json序列化结果当中
  51 + public boolean isSuccess() {
  52 + return this.code == ResponseCode.SUCCESS.getCode();
  53 + }
  54 +
  55 + public int getCode() {
  56 + return code;
  57 + }
  58 +
  59 + public T getData() {
  60 + return data;
  61 + }
  62 +
  63 + public String getMessage() {
  64 + return message;
  65 + }
  66 +
  67 +
  68 + public static <T> ServerResponse<T> createBySuccess() {
  69 + return new ServerResponse<T>(ResponseCode.SUCCESS.getCode());
  70 + }
  71 +
  72 + /*
  73 + 该方法对应的是private ServerResponse(int code,String msg)的构造方法
  74 + */
  75 + public static <T> ServerResponse<T> createBySuccessMessage(String message) {
  76 + return new ServerResponse<T>(ResponseCode.SUCCESS.getCode(), message);
  77 + }
  78 +
  79 + /*
  80 + 该方法对应的是private ServerResponse(int code,T data)构造方法
  81 + */
  82 + public static <T> ServerResponse<T> createBySuccess(T data) {
  83 + return new ServerResponse<T>(ResponseCode.SUCCESS.getCode(), data);
  84 + }
  85 +
  86 + public static <T> ServerResponse<T> createBySuccess(String message, T data) {
  87 + return new ServerResponse<T>(ResponseCode.SUCCESS.getCode(), message, data);
  88 + }
  89 +
  90 +
  91 +
  92 + public static <T> ServerResponse<T> createByError() {
  93 + return new ServerResponse<T>(ResponseCode.ERROR.getCode(), ResponseCode.ERROR.getDesc());
  94 + }
  95 +
  96 +
  97 + public static <T> ServerResponse<T> createByErrorMessage(String errorMessage) {
  98 + return new ServerResponse<T>(ResponseCode.ERROR.getCode(), errorMessage);
  99 + }
  100 +
  101 + public static <T> ServerResponse<T> createByErrorCodeMessage(int errorCode, String errorMessage) {
  102 + return new ServerResponse<T>(errorCode, errorMessage);
  103 + }
  104 +
  105 +}
... ...
springboot/morning-check/src/main/java/com/sincere/morningcheck/config/MessageProperties.java 0 → 100644
... ... @@ -0,0 +1,52 @@
  1 +package com.sincere.morningcheck.config;
  2 +
  3 +import org.springframework.boot.context.properties.ConfigurationProperties;
  4 +import org.springframework.context.annotation.PropertySource;
  5 +import org.springframework.stereotype.Component;
  6 +
  7 +@Component
  8 +@ConfigurationProperties(prefix="message")
  9 +@PropertySource("classpath:file-message.properties")
  10 +public class MessageProperties {
  11 +
  12 + private long fileSize; //压缩大小
  13 +
  14 + private double scaleRatio; //压缩比例
  15 +
  16 + private String upPath; //保存路径
  17 +
  18 + private String imageType; //图片类型
  19 +
  20 + public long getFileSize() {
  21 + return fileSize;
  22 + }
  23 +
  24 + public void setFileSize(long fileSize) {
  25 + this.fileSize = fileSize;
  26 + }
  27 +
  28 + public double getScaleRatio() {
  29 + return scaleRatio;
  30 + }
  31 +
  32 + public void setScaleRatio(double scaleRatio) {
  33 + this.scaleRatio = scaleRatio;
  34 + }
  35 +
  36 + public String getUpPath() {
  37 + return upPath;
  38 + }
  39 +
  40 + public void setUpPath(String upPath) {
  41 + this.upPath = upPath;
  42 + }
  43 +
  44 + public String getImageType() {
  45 + return imageType;
  46 + }
  47 +
  48 + public void setImageType(String imageType) {
  49 + this.imageType = imageType;
  50 + }
  51 +
  52 +}
... ...
springboot/morning-check/src/main/java/com/sincere/morningcheck/config/Swagger2.java 0 → 100644
... ... @@ -0,0 +1,38 @@
  1 +package com.sincere.morningcheck.config;
  2 +
  3 +import org.springframework.context.annotation.Bean;
  4 +import org.springframework.context.annotation.Configuration;
  5 +import springfox.documentation.builders.ApiInfoBuilder;
  6 +import springfox.documentation.builders.PathSelectors;
  7 +import springfox.documentation.builders.RequestHandlerSelectors;
  8 +import springfox.documentation.service.ApiInfo;
  9 +import springfox.documentation.service.Contact;
  10 +import springfox.documentation.spi.DocumentationType;
  11 +import springfox.documentation.spring.web.plugins.Docket;
  12 +import springfox.documentation.swagger2.annotations.EnableSwagger2;
  13 +
  14 +@Configuration
  15 +@EnableSwagger2
  16 +public class Swagger2 {
  17 +
  18 + @Bean
  19 + public Docket createRestApi() {
  20 + return new Docket(DocumentationType.SWAGGER_2)
  21 + .apiInfo(apiInfo())
  22 + .select()
  23 + .apis(RequestHandlerSelectors.basePackage("com.sincere.morningcheck.controller"))
  24 + .paths(PathSelectors.any())
  25 + .build();
  26 + }
  27 +
  28 + private ApiInfo apiInfo() {
  29 + return new ApiInfoBuilder()
  30 + .title("晨检机使用的WebApi说明文档")
  31 + .contact(new Contact("Ziv","localhost:8080/swagger-ui.html",""))
  32 + .description("")
  33 + .termsOfServiceUrl("")
  34 + .version("2.0")
  35 + .build();
  36 + }
  37 +
  38 +}
... ...
springboot/morning-check/src/main/java/com/sincere/morningcheck/controller/MorningCheckController.java 0 → 100644
... ... @@ -0,0 +1,407 @@
  1 +package com.sincere.morningcheck.controller;
  2 +
  3 +import com.sincere.morningcheck.common.EhcacheUtil;
  4 +import com.sincere.morningcheck.common.MD5;
  5 +import com.sincere.morningcheck.common.ServerResponse;
  6 +import com.sincere.morningcheck.model.School;
  7 +import com.sincere.morningcheck.model.Student;
  8 +import com.sincere.morningcheck.model.User;
  9 +import com.sincere.morningcheck.service.FileUpAndDownService;
  10 +import com.sincere.morningcheck.service.StudentService;
  11 +import com.sincere.morningcheck.service.UserServer;
  12 +import com.sincere.morningcheck.service.impl.FileUpAndDownServiceImpl;
  13 +import com.sincere.morningcheck.utils.DataConvertHelper;
  14 +import com.sincere.morningcheck.utils.LogUtil;
  15 +import io.swagger.annotations.Api;
  16 +import io.swagger.annotations.ApiImplicitParam;
  17 +import io.swagger.annotations.ApiImplicitParams;
  18 +import io.swagger.annotations.ApiOperation;
  19 +import org.apache.commons.lang3.StringUtils;
  20 +import org.springframework.beans.factory.annotation.Autowired;
  21 +import org.springframework.beans.factory.annotation.Value;
  22 +import org.springframework.web.bind.annotation.*;
  23 +import org.springframework.web.multipart.MultipartFile;
  24 +
  25 +import java.text.ParseException;
  26 +import java.text.SimpleDateFormat;
  27 +import java.util.Calendar;
  28 +import java.util.Date;
  29 +import java.util.HashMap;
  30 +import java.util.Map;
  31 +
  32 +@RestController
  33 +@RequestMapping("user")
  34 +@Api(value = "MorningCheckController", tags = "晨检机晨检接口说明")
  35 +public class MorningCheckController {
  36 +
  37 + private String token = "CESHI651BB2B8AEBBF0DB2FFC9B4EAD5F04E2";
  38 +
  39 + @Value("${salt}")
  40 + private String salt;
  41 +
  42 + EhcacheUtil ehcacheUtil = new EhcacheUtil();
  43 + @Autowired
  44 + UserServer userServer;
  45 +
  46 + @Autowired
  47 + StudentService studentService;
  48 +
  49 + @Autowired
  50 + FileUpAndDownService fileUpAndDownService;
  51 +
  52 + @ApiOperation("设备请求登陆接口")
  53 + @ApiImplicitParams ({
  54 + @ApiImplicitParam(name = "deviceNo", value = "设备号", dataType = "String",required = true,paramType = "query"),
  55 + @ApiImplicitParam(name = "password", value = "密码", dataType = "String",required = true,paramType = "query"),
  56 + @ApiImplicitParam(name = "authSign", value = "签名", dataType = "String",required = true,paramType = "query"),
  57 + })
  58 + @PostMapping("login")
  59 + public ServerResponse login(@RequestParam String deviceNo, @RequestParam String password,@RequestParam String authSign){
  60 +
  61 +// System.out.println("传入的参数:设备号"+deviceNo+",密码:"+password+",签名"+authSign);
  62 + ServerResponse serverResponse = null;
  63 +
  64 + Map map = new HashMap();
  65 + map.put("password", password);
  66 + map.put("deviceNo", deviceNo);
  67 +
  68 + String queryUrl = DataConvertHelper.mapAscSortToUrl(map);
  69 + System.out.println(queryUrl);
  70 + try {
  71 + String signUrl = queryUrl.replace("&","");
  72 + System.out.println(signUrl);
  73 +// String md5 = MD5.md5(signUrl, salt);
  74 + boolean verify = MD5.verify(signUrl,salt,authSign);
  75 + System.out.println("签名是否正确"+verify);
  76 +
  77 + if(verify) {
  78 +
  79 + User user = userServer.getDeviceUser(deviceNo);
  80 + user.setParameter("0");
  81 + user.setToken(token);
  82 + ehcacheUtil.set("deviceId",user.getDeviceId());
  83 + serverResponse = ServerResponse.createBySuccess("success",user);
  84 +
  85 + }else{
  86 +
  87 + serverResponse = ServerResponse.createByErrorMessage("签名校验失败");
  88 + LogUtil.printInfoLog("签名校验失败");
  89 +
  90 + }
  91 + }
  92 + catch (Exception ex){
  93 + ex.printStackTrace();
  94 + serverResponse = ServerResponse.createByErrorMessage(ex.getMessage());
  95 + }
  96 +
  97 + return serverResponse;
  98 + }
  99 +
  100 + @ApiOperation("获取学生、卡号信息")
  101 + @ApiImplicitParams ({
  102 + @ApiImplicitParam(name = "token", value = "令牌", dataType = "String",required = true,paramType = "query"),
  103 + @ApiImplicitParam(name = "schoolId", value = "学校ID", dataType = "String",required = true,paramType = "query"),
  104 + @ApiImplicitParam(name = "authSign", value = "签名", dataType = "String",required = true,paramType = "query")
  105 + })
  106 + @PostMapping("getStudents")
  107 + public ServerResponse getStudents(@RequestParam String token,@RequestParam Integer schoolId,@RequestParam String authSign){
  108 +
  109 + ServerResponse serverResponse = null;
  110 +
  111 + Map map = new HashMap();
  112 + map.put("token", token);
  113 + map.put("schoolId", String.valueOf(schoolId));
  114 +
  115 + String queryUrl = DataConvertHelper.mapAscSortToUrl(map);
  116 + try {
  117 + String signUrl = queryUrl.replace("&","");
  118 + //验证签名,看签名是否正确
  119 + boolean verify = MD5.verify(signUrl,salt,authSign);
  120 +// boolean verify = true;
  121 + System.out.println("签名是否正确"+verify);
  122 + if(verify) {
  123 +
  124 + School school = userServer.getSchoolById(schoolId);
  125 + serverResponse = ServerResponse.createBySuccess("success",school);
  126 + }
  127 + else{
  128 +
  129 + serverResponse = ServerResponse.createByErrorMessage("签名校验失败");
  130 + }
  131 + }
  132 + catch (Exception ex){
  133 + ex.printStackTrace();
  134 + serverResponse = ServerResponse.createByErrorMessage(ex.getMessage());
  135 + }
  136 +
  137 + return serverResponse;
  138 + }
  139 +
  140 +
  141 + @ApiOperation("刷卡签到")
  142 + @ApiImplicitParams ({
  143 + @ApiImplicitParam(name = "token", value = "令牌", dataType = "String",required = true,paramType = "query"),
  144 + @ApiImplicitParam(name = "cardNo", value = "十进制卡号", dataType = "String",required = true,paramType = "query"),
  145 + @ApiImplicitParam(name = "imageId", value = "接送图像类型对应的photoId", dataType = "String",required = true,paramType = "query"),
  146 + @ApiImplicitParam(name = "authSign", value = "签名", dataType = "String",required = true,paramType = "query"),
  147 + @ApiImplicitParam(name = "date", value = "晨检日期(上传历史签到数据才有这个参数,不是当天的签到)\n" +
  148 + "时间格式为 : yyyy-MM-dd-HH-mm-ss", dataType = "String",paramType = "query")
  149 + })
  150 + @PostMapping("signByCard")
  151 + public ServerResponse swipeCard(@RequestParam String token,@RequestParam String cardNo,@RequestParam Integer imageId,@RequestParam String authSign,@RequestParam(required = false) String date){
  152 +
  153 +// System.out.println("刷卡签到传入的参数:卡号"+cardNo+",图片ID:"+imageId+",签名"+authSign);
  154 + LogUtil.printInfoLog("刷卡签到传入的参数:卡号"+cardNo+",图片ID:"+imageId+",签名"+authSign);
  155 + ServerResponse serverResponse = null;
  156 +
  157 + String card = DataConvertHelper.distToX(Long.valueOf(cardNo));
  158 +
  159 + Map<String,String> map = new HashMap();
  160 + map.put("token", token);
  161 + map.put("cardNo", cardNo);//传入的是10进制的卡号
  162 + map.put("imageId",String.valueOf(imageId));
  163 +
  164 + Date dateIn = null;
  165 + if(StringUtils.isBlank(date)){
  166 + Calendar calendar= Calendar.getInstance();
  167 +// SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
  168 +// date = dateFormat.format(calendar.getTime());
  169 + dateIn= calendar.getTime();
  170 +
  171 + }else{
  172 + map.put("date",date);//当date存在的时候再传
  173 + try {
  174 + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
  175 + dateIn = dateFormat.parse(date);
  176 + System.out.println(date);//2019-07-30-10-43-41
  177 + }catch (ParseException px){
  178 + px.printStackTrace();
  179 + }
  180 + }
  181 + String queryUrl = DataConvertHelper.mapAscSortToUrl(map);
  182 + try {
  183 + String signUrl = queryUrl.replace("&","");
  184 +// boolean verify = true;
  185 + boolean verify = MD5.verify(signUrl,salt,authSign);
  186 + System.out.println("签名是否正确"+verify);
  187 + if(verify) {
  188 + int index = imageId -1;
  189 + if(FileUpAndDownServiceImpl.globalFileEntities.size()>0) {
  190 + System.out.println("对应图像地址:" + FileUpAndDownServiceImpl.globalFileEntities.get(index).getImgObPath());
  191 + }
  192 + //卡号,图片,刷卡时间(如果没有, 当前时间),设备号
  193 + System.out.println("卡号:"+cardNo+",图片ID"+imageId+",设备标识:"+ehcacheUtil.get("deviceId")+",当前时间"+date+",刷进设备的卡号是:"+card);
  194 +
  195 + Map<String,Object> hashMap = new HashMap<>();
  196 + //设备编号
  197 + hashMap.put("att_id",ehcacheUtil.get("deviceId"));
  198 + hashMap.put("card_num",card);
  199 + hashMap.put("func_no","08");
  200 + hashMap.put("flag",0);
  201 + hashMap.put("intime",dateIn);
  202 + System.out.println(dateIn);
  203 +
  204 + studentService.swipeCard(hashMap);
  205 + System.out.println("集合数量:"+hashMap.size());
  206 + System.out.println(hashMap.get("arr"));
  207 + System.out.println(hashMap.get("iscuccess"));
  208 +
  209 + //message: 学生姓名你好
  210 + Student student = studentService.getStudentByCardNo(card);
  211 + String msg = String.format("学生%s你好",student.getStuName());
  212 + serverResponse = ServerResponse.createBySuccessMessage(msg);
  213 + } else{
  214 +
  215 + serverResponse = ServerResponse.createByErrorMessage("签名校验失败");
  216 + }
  217 + }
  218 + catch (Exception ex){
  219 + ex.printStackTrace();
  220 + serverResponse = ServerResponse.createByErrorMessage(ex.getMessage());
  221 + }
  222 +
  223 + return serverResponse;
  224 + }
  225 +
  226 +
  227 + @ApiOperation("离园签到")
  228 + @ApiImplicitParams ({
  229 + @ApiImplicitParam(name = "token", value = "令牌", dataType = "String",required = true,paramType = "query"),
  230 + @ApiImplicitParam(name = "cardNo", value = "卡号", dataType = "String",required = true,paramType = "query"),
  231 + @ApiImplicitParam(name = "imageId", value = "接送图像类型对应的photoId", dataType = "String",required = true,paramType = "query"),
  232 + @ApiImplicitParam(name = "authSign", value = "签名", dataType = "String",required = true,paramType = "query")
  233 + })
  234 + @PostMapping("signOutByCard")
  235 + public ServerResponse signOutByCard(@RequestParam String token,@RequestParam String cardNo,@RequestParam Integer imageId,@RequestParam String authSign){
  236 +
  237 +// System.out.println("离园签到传入的参数:卡号"+cardNo+",图片ID:"+imageId+",签名"+authSign);
  238 + ServerResponse serverResponse = null;
  239 + LogUtil.printInfoLog("离园签到传入的参数:卡号"+cardNo+",图片ID:"+imageId+",签名"+authSign);
  240 +
  241 + String card = DataConvertHelper.distToX(Long.valueOf(cardNo));
  242 +
  243 + Map<String,String> map = new HashMap();
  244 + map.put("token", token);
  245 + map.put("cardNo", cardNo);//传入的是10进制的卡号
  246 + map.put("imageId",String.valueOf(imageId));
  247 +
  248 + String queryUrl = DataConvertHelper.mapAscSortToUrl(map);
  249 + try {
  250 + String signUrl = queryUrl.replace("&","");
  251 + boolean verify = MD5.verify(signUrl,salt,authSign);
  252 + System.out.println("签名是否正确"+verify);
  253 + if(verify) {
  254 +
  255 + int index = imageId -1;
  256 + if(FileUpAndDownServiceImpl.globalFileEntities.size()>0) {
  257 + System.out.println("对应图像地址:" + FileUpAndDownServiceImpl.globalFileEntities.get(index).getImgObPath());
  258 + }
  259 + //卡号,图片,刷卡时间(如果没有, 当前时间),设备号
  260 + System.out.println("卡号:"+cardNo+",图片ID"+imageId+",设备标识:"+ehcacheUtil.get("deviceId")+",刷进设备的卡号是:"+card);
  261 + Map<String,Object> hashMap = new HashMap<>();
  262 + hashMap.put("att_id",ehcacheUtil.get("deviceId"));
  263 + hashMap.put("card_num",card);
  264 + hashMap.put("func_no","08");
  265 + hashMap.put("flag",0);
  266 + hashMap.put("intime",new Date());
  267 + studentService.swipeCard(hashMap);
  268 + System.out.println(hashMap.get("arr"));
  269 + System.out.println(hashMap.get("iscuccess"));
  270 + //message: 学生姓名你好
  271 + Student student = studentService.getStudentByCardNo(card);
  272 + String msg = String.format("学生%s你好",student.getStuName());
  273 + serverResponse = ServerResponse.createBySuccessMessage(msg);
  274 + }else{
  275 +
  276 + serverResponse = ServerResponse.createByErrorMessage("签名失败");
  277 + }
  278 + }
  279 + catch (Exception ex){
  280 + ex.printStackTrace();
  281 + serverResponse = ServerResponse.createByErrorMessage(ex.getMessage());
  282 + }
  283 +
  284 + return serverResponse;
  285 + }
  286 + @RequestMapping(value = "/uploadImg", method = RequestMethod.POST)
  287 + @ApiOperation("上传多个文件")
  288 + @ApiImplicitParams ({
  289 + @ApiImplicitParam(name = "token", value = "令牌", dataType = "String",required = true,paramType = "query"),
  290 + @ApiImplicitParam(name = "file", value = "文件列表", dataType = "String",required = true,paramType = "query"),
  291 + @ApiImplicitParam(name = "type", value = "图像类型", dataType = "String",required = true,paramType = "query"),
  292 + @ApiImplicitParam(name = "authSign", value = "签名", dataType = "String",required = true,paramType = "query")
  293 + })
  294 + public ServerResponse moreFileUpload(@RequestParam(value = "file", required = false) MultipartFile[] file, @RequestParam(value = "token") String token, @RequestParam(value="type") String type,@RequestParam String authSign) {
  295 +
  296 +
  297 + LogUtil.printInfoLog("上传多个文件传入的类型:"+type+",签名:"+authSign);
  298 +// System.out.println("上传多个文件传入的类型:"+type+",签名:"+authSign);
  299 +
  300 + System.out.println("文件数量:"+file.length);
  301 +
  302 + ServerResponse serverResponse = null;
  303 + Map map = new HashMap();
  304 + map.put("token", token);
  305 + map.put("type", type);
  306 +
  307 + String[] fileNames = type.split("_");
  308 + if(fileNames.length != file.length){
  309 + System.out.println("类型数量和文件数量不一致,程序中断");
  310 + return ServerResponse.createByErrorMessage("类型数量和文件数量不一致,程序中断");
  311 + }else {
  312 + System.out.println("类型数量和文件数量一致,文件已经上传");
  313 + }
  314 + String queryUrl = DataConvertHelper.mapAscSortToUrl(map);
  315 + try {
  316 + String signUrl = queryUrl.replace("&","");
  317 +// String md5 = MD5.md5(signUrl, salt);
  318 + boolean verify = MD5.verify(signUrl,salt,authSign);
  319 + System.out.println("签名是否正确"+verify);
  320 + if(verify) {
  321 + try {
  322 + serverResponse = fileUpAndDownService.uploadPicture(file,fileNames);
  323 + } catch (Exception e) {
  324 + System.out.println(">>>>>>图片上传异常,ex="+e.getMessage());
  325 + serverResponse = ServerResponse.createByErrorMessage(String.format(">>>>>>图片上传异常,e=%s", e.getMessage()));
  326 + }
  327 + }
  328 + }
  329 + catch (Exception ex){
  330 + ex.printStackTrace();
  331 + serverResponse = ServerResponse.createByErrorMessage(ex.getMessage());
  332 + }
  333 +
  334 + return serverResponse;
  335 + }
  336 +
  337 +
  338 + @ApiOperation("晨检报告")
  339 + @ApiImplicitParams ({
  340 + @ApiImplicitParam(name = "token", value = "令牌", dataType = "String",required = true,paramType = "query"),
  341 + @ApiImplicitParam(name = "cardNo", value = "卡号", dataType = "String",required = true,paramType = "query"),
  342 + @ApiImplicitParam(name = "result", value = "检查结果,32位字符串", dataType = "String",required = true,paramType = "query"),
  343 + @ApiImplicitParam(name="robotResult",value = "晨检机器判断结果。3位字符串",dataType = "String",required = true,paramType = "query"),
  344 + @ApiImplicitParam(name="access",value = "入园许可。 Y : 入园 N:离园",dataType = "String",required = true,paramType = "query"),
  345 + @ApiImplicitParam(name="temperature",value = "体温(小于35.2时显示LOW;大于42.2时,显示HIGH)",dataType = "String",required = true,paramType = "query"),
  346 + @ApiImplicitParam(name="handImgId",value = "手部异常图像ID",dataType = "String",paramType = "query"),
  347 + @ApiImplicitParam(name = "mouthImgId", value = "嘴部异常头像ID", dataType = "String",paramType = "query"),
  348 + @ApiImplicitParam(name = "eyeImgId", value = "眼部异常头像ID", dataType = "String",paramType = "query"),
  349 + @ApiImplicitParam(name = "authSign", value = "签名", dataType = "String",required = true,paramType = "query"),
  350 + })
  351 + @PostMapping("uploadCheckReport")
  352 + public ServerResponse uploadCheckReport(@RequestParam String token,@RequestParam String cardNo,@RequestParam String result,@RequestParam String robotResult,@RequestParam String access,@RequestParam String temperature,@RequestParam(required = false) String handImgId,@RequestParam(required = false) String mouthImgId,@RequestParam(required = false) String eyeImgId,@RequestParam String authSign){
  353 +
  354 +// System.out.println("传入的参数:卡号"+cardNo+",检查结果:"+result+",检查机判断结果:"+robotResult+",签名"+authSign);
  355 + LogUtil.printInfoLog("传入的参数:卡号"+cardNo+",检查结果:"+result+",检查机判断结果:"+robotResult+",签名"+authSign);
  356 + System.out.println("嘴部异常图片ID:"+mouthImgId);
  357 + System.out.println("手部异常图片ID:"+handImgId);
  358 + System.out.println("眼部异常图片ID:"+eyeImgId);
  359 + System.out.println("入园许可。 Y : 入园 N:离园:入园情况:"+access);
  360 +
  361 + ServerResponse serverResponse = null;
  362 +
  363 + String card = DataConvertHelper.distToX(Long.valueOf(cardNo));
  364 +
  365 + Map<String,String> map = new HashMap();
  366 + map.put("token", token);
  367 + map.put("cardNo", cardNo);//传入的是10进制的卡号
  368 + map.put("result",result);
  369 + map.put("robotResult",robotResult);
  370 + map.put("access",access);
  371 + map.put("temperature",temperature);
  372 + map.put("handImgId",handImgId);
  373 + map.put("mouthImgId",mouthImgId);
  374 + map.put("eyeImgId",eyeImgId);
  375 +
  376 + String queryUrl = DataConvertHelper.mapAscSortToUrl(map);
  377 + try {
  378 + String signUrl = queryUrl.replace("&","");
  379 + boolean verify = MD5.verify(signUrl,salt,authSign);
  380 + System.out.println("签名是否正确"+verify);
  381 + if(verify) {
  382 +
  383 +// int index = handImgId -1;
  384 +// System.out.println("手部异常图像地址:"+FileUpAndDownServiceImpl.globalFileEntities.get(index).getImgObPath());
  385 +// index = mouthImgId -1;
  386 +// System.out.println("嘴部异常图像地址:"+FileUpAndDownServiceImpl.globalFileEntities.get(index).getImgObPath());
  387 +// index = eyeImgId -1;
  388 +// System.out.println("眼部异常图像地址:"+FileUpAndDownServiceImpl.globalFileEntities.get(index).getImgObPath());
  389 + //卡号,图片,刷卡时间(如果没有, 当前时间),设备号
  390 + System.out.println("卡号:"+cardNo+",图片ID"+handImgId+",设备标识:"+ehcacheUtil.get("deviceId")+",刷进设备的卡号是:"+card);
  391 + //message: 学生姓名你好
  392 + Student student = studentService.getStudentByCardNo(card);
  393 + String msg = String.format("学生%s你好,你的晨检报告已经自动生成",student.getStuName());
  394 + serverResponse = ServerResponse.createBySuccessMessage(msg);
  395 + }else{
  396 +
  397 + serverResponse = ServerResponse.createByErrorMessage("签名校验失败");
  398 + }
  399 + }
  400 + catch (Exception ex){
  401 + ex.printStackTrace();
  402 + serverResponse = ServerResponse.createByErrorMessage(ex.getMessage());
  403 + }
  404 +
  405 + return serverResponse;
  406 + }
  407 +}
... ...
springboot/morning-check/src/main/java/com/sincere/morningcheck/dao/StudentDao.java 0 → 100644
... ... @@ -0,0 +1,25 @@
  1 +package com.sincere.morningcheck.dao;
  2 +
  3 +
  4 +import com.sincere.morningcheck.model.Student;
  5 +import org.apache.ibatis.annotations.Mapper;
  6 +import org.apache.ibatis.annotations.Param;
  7 +import org.springframework.stereotype.Repository;
  8 +
  9 +import java.util.List;
  10 +import java.util.Map;
  11 +
  12 +@Mapper
  13 +@Repository
  14 +public interface StudentDao {
  15 +
  16 + List<Student> getStudents(@Param("schoolId") Integer schoolId);
  17 +
  18 + Student getStudentByCardNo(@Param("cardNo") String cardNo);
  19 +
  20 + /**
  21 + * 传入的参数和返回的结果都在map集合参数params中
  22 + * @param params
  23 + */
  24 + void swipeCard(Map<String, Object> params);
  25 +}
... ...
springboot/morning-check/src/main/java/com/sincere/morningcheck/dao/UserDao.java 0 → 100644
... ... @@ -0,0 +1,22 @@
  1 +package com.sincere.morningcheck.dao;
  2 +
  3 +import com.sincere.morningcheck.model.School;
  4 +import com.sincere.morningcheck.model.User;
  5 +
  6 +
  7 +import org.apache.ibatis.annotations.Mapper;
  8 +import org.apache.ibatis.annotations.Param;
  9 +import org.springframework.stereotype.Repository;
  10 +
  11 +@Mapper
  12 +@Repository
  13 +public interface UserDao {
  14 +
  15 + User getUser(@Param("deviceNo") String deviceNo);
  16 +
  17 + School getSchoolById(@Param("schoolId") Integer schoolId);
  18 +
  19 +// boolean register(@Param("username") String username, @Param("password") String password);
  20 +
  21 +// User isExit(@Param("username") String username);
  22 +}
... ...
springboot/morning-check/src/main/java/com/sincere/morningcheck/model/FileEntity.java 0 → 100644
... ... @@ -0,0 +1,29 @@
  1 +package com.sincere.morningcheck.model;
  2 +
  3 +import com.sincere.morningcheck.common.ImgType;
  4 +import lombok.Data;
  5 +
  6 +@Data
  7 +public class FileEntity {
  8 +
  9 + /**
  10 + * 头像ID(自增)
  11 + */
  12 + private Integer photoId;
  13 + /**
  14 + * 头像存储的位置(绝对路径)
  15 + */
  16 + private String imgObPath;
  17 + /**
  18 + * 文件新名称
  19 + */
  20 + private String fileName;
  21 + /**
  22 + * 文件储存的类型
  23 + */
  24 + private ImgType imgType;
  25 + /**
  26 + * 文件旧名称
  27 + */
  28 + private String oldFileName;
  29 +}
... ...
springboot/morning-check/src/main/java/com/sincere/morningcheck/model/Photo.java 0 → 100644
... ... @@ -0,0 +1,9 @@
  1 +package com.sincere.morningcheck.model;
  2 +
  3 +import lombok.Data;
  4 +
  5 +@Data
  6 +public class Photo {
  7 +
  8 + private Integer photoId;
  9 +}
... ...
springboot/morning-check/src/main/java/com/sincere/morningcheck/model/School.java 0 → 100644
... ... @@ -0,0 +1,15 @@
  1 +package com.sincere.morningcheck.model;
  2 +
  3 +import lombok.Data;
  4 +
  5 +import java.util.List;
  6 +
  7 +@Data
  8 +public class School {
  9 +
  10 + private Integer schoolId;
  11 +
  12 + private String schoolName;
  13 +
  14 + private List<Student> students;
  15 +}
... ...
springboot/morning-check/src/main/java/com/sincere/morningcheck/model/Student.java 0 → 100644
... ... @@ -0,0 +1,14 @@
  1 +package com.sincere.morningcheck.model;
  2 +
  3 +
  4 +import lombok.Data;
  5 +
  6 +@Data
  7 +public class Student {
  8 +
  9 + private Integer classId;
  10 + private Integer stuId;
  11 + private String stuName;
  12 + private String className;
  13 + private String cardNos;
  14 +}
... ...
springboot/morning-check/src/main/java/com/sincere/morningcheck/model/User.java 0 → 100644
... ... @@ -0,0 +1,13 @@
  1 +package com.sincere.morningcheck.model;
  2 +
  3 +import lombok.Data;
  4 +
  5 +@Data
  6 +public class User {
  7 +
  8 + private Integer schoolId;
  9 + private String parameter;
  10 + private String schoolName;
  11 + private String deviceId;
  12 + private String token;
  13 +}
0 14 \ No newline at end of file
... ...
springboot/morning-check/src/main/java/com/sincere/morningcheck/platform/MorningCheckResult.java 0 → 100644
... ... @@ -0,0 +1,15 @@
  1 +package com.sincere.morningcheck.platform;
  2 +
  3 +import com.fasterxml.jackson.annotation.JsonInclude;
  4 +import lombok.Data;
  5 +
  6 +@Data
  7 +@JsonInclude(JsonInclude.Include.NON_EMPTY)
  8 +public class MorningCheckResult<T> {
  9 +
  10 + private String code;
  11 +
  12 + private String message;
  13 +
  14 + private T data;
  15 +}
... ...
springboot/morning-check/src/main/java/com/sincere/morningcheck/service/FileUpAndDownService.java 0 → 100644
... ... @@ -0,0 +1,10 @@
  1 +package com.sincere.morningcheck.service;
  2 +
  3 +import com.sincere.morningcheck.common.ServerResponse;
  4 +import org.springframework.web.multipart.MultipartFile;
  5 +
  6 +
  7 +public interface FileUpAndDownService {
  8 +
  9 + ServerResponse uploadPicture(MultipartFile[] file, String[] file_Types) throws Exception;
  10 +}
... ...
springboot/morning-check/src/main/java/com/sincere/morningcheck/service/StudentService.java 0 → 100644
... ... @@ -0,0 +1,15 @@
  1 +package com.sincere.morningcheck.service;
  2 +
  3 +import com.sincere.morningcheck.model.Student;
  4 +
  5 +import java.util.List;
  6 +import java.util.Map;
  7 +
  8 +public interface StudentService {
  9 +
  10 + List<Student> getStudents(Integer schoolId);
  11 +
  12 + Student getStudentByCardNo(String cardNo);
  13 +
  14 + void swipeCard(Map<String, Object> params);
  15 +}
... ...
springboot/morning-check/src/main/java/com/sincere/morningcheck/service/UserServer.java 0 → 100644
... ... @@ -0,0 +1,15 @@
  1 +package com.sincere.morningcheck.service;
  2 +
  3 +import com.sincere.morningcheck.model.School;
  4 +import com.sincere.morningcheck.model.User;
  5 +import org.apache.ibatis.annotations.Param;
  6 +
  7 +
  8 +public interface UserServer {
  9 +
  10 + User getDeviceUser(String deviceNo);
  11 +
  12 + School getSchoolById(Integer schoolId);
  13 +
  14 + User isExit(String username);
  15 +}
0 16 \ No newline at end of file
... ...
springboot/morning-check/src/main/java/com/sincere/morningcheck/service/impl/FileUpAndDownServiceImpl.java 0 → 100644
... ... @@ -0,0 +1,115 @@
  1 +package com.sincere.morningcheck.service.impl;
  2 +
  3 +import com.sincere.morningcheck.common.ImgType;
  4 +import com.sincere.morningcheck.common.ServerResponse;
  5 +import com.sincere.morningcheck.config.MessageProperties;
  6 +import com.sincere.morningcheck.model.FileEntity;
  7 +import com.sincere.morningcheck.model.Photo;
  8 +import com.sincere.morningcheck.service.FileUpAndDownService;
  9 +import net.coobird.thumbnailator.Thumbnails;
  10 +import org.apache.commons.lang3.StringUtils;
  11 +import org.springframework.beans.factory.annotation.Autowired;
  12 +import org.springframework.stereotype.Service;
  13 +import org.springframework.web.multipart.MultipartFile;
  14 +
  15 +import java.io.File;
  16 +import java.text.SimpleDateFormat;
  17 +import java.util.*;
  18 +
  19 +@Service
  20 +public class FileUpAndDownServiceImpl implements FileUpAndDownService {
  21 + @Autowired
  22 + private MessageProperties config; //用来获取file-message.properties配置文件中的信息
  23 +
  24 + static Integer photoId = 0;
  25 + public static List<FileEntity> globalFileEntities = new LinkedList<>();
  26 + @Override
  27 + public ServerResponse uploadPicture(MultipartFile[] files, String[] file_types) throws Exception {
  28 +
  29 + System.out.println("进入上传文件方法。");
  30 + List<FileEntity> fileEntities = new LinkedList<>();
  31 + int i = 0;
  32 + for(MultipartFile file : files) {
  33 + System.out.println(file.getOriginalFilename());
  34 +
  35 + try {
  36 + photoId++; //每进一次方法自增一次,模拟主键自增
  37 + Map<String, Object> resMap = new HashMap<>();
  38 + String[] IMAGE_TYPE = config.getImageType().split(",");
  39 + String path = null;
  40 + boolean flag = false;
  41 + for (String type : IMAGE_TYPE) {
  42 + if (StringUtils.endsWithIgnoreCase(file.getOriginalFilename(), type)) {
  43 + flag = true;
  44 + break;
  45 + }
  46 + }
  47 + if (flag) {
  48 +
  49 + // 获得文件类型
  50 + String fileType = file.getContentType();
  51 + // 原名称
  52 + String oldFileName = file.getOriginalFilename();
  53 + // 获得文件后缀名称
  54 + String suffix = oldFileName.substring(oldFileName.lastIndexOf("."));//带逗号,不带逗号加1
  55 + // 新名称
  56 + String imgType = file_types[i];
  57 + String newFileName = imgType + "_photoId"+photoId+suffix;
  58 + i++;
  59 + // 年月日文件夹
  60 + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
  61 + String basedir = sdf.format(new Date());
  62 + // 进行压缩(大于4M)
  63 + if (file.getSize() > config.getFileSize()) {
  64 + path = config.getUpPath() + "/" + basedir + "/" + newFileName;
  65 + // 如果目录不存在则创建目录
  66 + File oldFile = new File(path);
  67 + if (!oldFile.exists()) {
  68 + oldFile.mkdirs();
  69 + }
  70 + file.transferTo(oldFile);
  71 + // 压缩图片
  72 + Thumbnails.of(oldFile).scale(config.getScaleRatio()).toFile(path);
  73 +
  74 + } else {
  75 + path = config.getUpPath() + "/" + basedir + "/" + newFileName;
  76 + // 如果目录不存在则创建目录
  77 + File uploadFile = new File(path);
  78 + if (!uploadFile.exists()) {
  79 + uploadFile.mkdirs();
  80 + }
  81 + file.transferTo(uploadFile);
  82 + }
  83 +
  84 + FileEntity fileEntity = new FileEntity();
  85 + fileEntity.setPhotoId(photoId);
  86 + fileEntity.setFileName(newFileName);
  87 + fileEntity.setImgObPath(path);
  88 + fileEntity.setOldFileName(oldFileName);
  89 + fileEntity.setImgType(ImgType.valueOf(imgType));
  90 +
  91 + fileEntities.add(fileEntity);
  92 +
  93 + } else {
  94 + System.out.println("result:图片格式不正确,支持png|jpg|jpeg");
  95 + return ServerResponse.createByErrorMessage("result:图片格式不正确,支持png|jpg|jpeg");
  96 + }
  97 + } catch (Exception e) {
  98 + e.printStackTrace();
  99 + throw new Exception(e.getMessage());
  100 + }
  101 + }
  102 + globalFileEntities.addAll(fileEntities);
  103 + Map<String,Object> map = new HashMap<>();
  104 +
  105 + List<Photo> photoIds = new ArrayList<>();
  106 +
  107 + for (FileEntity fileEntity : fileEntities){
  108 + Photo photo = new Photo();
  109 + photo.setPhotoId(fileEntity.getPhotoId());
  110 + photoIds.add(photo);
  111 + }
  112 + map.put("photoIds",photoIds);
  113 + return ServerResponse.createBySuccess(map);
  114 + }
  115 +}
... ...
springboot/morning-check/src/main/java/com/sincere/morningcheck/service/impl/StudentServiceImpl.java 0 → 100644
... ... @@ -0,0 +1,34 @@
  1 +package com.sincere.morningcheck.service.impl;
  2 +
  3 +import com.sincere.morningcheck.dao.StudentDao;
  4 +import com.sincere.morningcheck.model.Student;
  5 +import com.sincere.morningcheck.service.StudentService;
  6 +import org.springframework.beans.factory.annotation.Autowired;
  7 +import org.springframework.stereotype.Service;
  8 +
  9 +import java.util.List;
  10 +import java.util.Map;
  11 +
  12 +@Service
  13 +public class StudentServiceImpl implements StudentService {
  14 +
  15 + @Autowired
  16 + StudentDao studentDao;
  17 +
  18 +
  19 + @Override
  20 + public List<Student> getStudents(Integer schoolId) {
  21 + return studentDao.getStudents(schoolId);
  22 + }
  23 +
  24 + @Override
  25 + public Student getStudentByCardNo(String cardNo) {
  26 + return studentDao.getStudentByCardNo(cardNo);
  27 + }
  28 +
  29 + @Override
  30 + public void swipeCard(Map<String, Object> params) {
  31 +
  32 + studentDao.swipeCard(params);
  33 + }
  34 +}
... ...
springboot/morning-check/src/main/java/com/sincere/morningcheck/service/impl/UserServerImp.java 0 → 100644
... ... @@ -0,0 +1,63 @@
  1 +package com.sincere.morningcheck.service.impl;
  2 +
  3 +import com.sincere.morningcheck.dao.UserDao;
  4 +import com.sincere.morningcheck.model.School;
  5 +import com.sincere.morningcheck.model.Student;
  6 +import com.sincere.morningcheck.model.User;
  7 +import com.sincere.morningcheck.service.StudentService;
  8 +import com.sincere.morningcheck.service.UserServer;
  9 +
  10 +import com.sincere.morningcheck.utils.DataConvertHelper;
  11 +import org.springframework.beans.factory.annotation.Autowired;
  12 +import org.springframework.stereotype.Service;
  13 +
  14 +import java.util.List;
  15 +
  16 +
  17 +@Service
  18 +public class UserServerImp implements UserServer {
  19 +
  20 + @Autowired
  21 + UserDao userDao;
  22 +
  23 + @Autowired
  24 + StudentService studentService;
  25 +
  26 + @Override
  27 + public User getDeviceUser(String deviceNo) {
  28 + return userDao.getUser(deviceNo);
  29 + }
  30 +
  31 + @Override
  32 + public School getSchoolById(Integer schoolId) {
  33 +
  34 + School school = userDao.getSchoolById(schoolId);
  35 +
  36 + List<Student> students = studentService.getStudents(schoolId);
  37 +
  38 + for (Student student : students){
  39 +
  40 + if(student.getCardNos().contains(",")) {
  41 +
  42 + String[] cards = student.getCardNos().split(",");
  43 + String distCards = "";
  44 + for(String card:cards){
  45 +
  46 + distCards +=DataConvertHelper.XToDist(card).toString()+",";
  47 + }
  48 + student.setCardNos(distCards.substring(0,distCards.length()-1));
  49 + }else {
  50 + student.setCardNos(DataConvertHelper.XToDist(student.getCardNos()).toString());
  51 + }
  52 +
  53 + }
  54 + school.setStudents(students);
  55 +
  56 + return school;
  57 + }
  58 +
  59 + @Override
  60 + public User isExit(String username) {
  61 + return null;
  62 + }
  63 +}
... ...
springboot/morning-check/src/main/java/com/sincere/morningcheck/utils/ApiHelper.java 0 → 100644
... ... @@ -0,0 +1,297 @@
  1 +package com.sincere.morningcheck.utils;
  2 +
  3 +import org.apache.http.HttpEntity;
  4 +import org.apache.http.NameValuePair;
  5 +import org.apache.http.client.ClientProtocolException;
  6 +import org.apache.http.client.config.RequestConfig;
  7 +import org.apache.http.client.entity.UrlEncodedFormEntity;
  8 +import org.apache.http.client.methods.CloseableHttpResponse;
  9 +import org.apache.http.client.methods.HttpDelete;
  10 +import org.apache.http.client.methods.HttpGet;
  11 +import org.apache.http.client.methods.HttpPost;
  12 +import org.apache.http.entity.ContentType;
  13 +import org.apache.http.entity.StringEntity;
  14 +import org.apache.http.entity.mime.HttpMultipartMode;
  15 +import org.apache.http.entity.mime.MultipartEntityBuilder;
  16 +import org.apache.http.entity.mime.content.FileBody;
  17 +import org.apache.http.impl.client.CloseableHttpClient;
  18 +import org.apache.http.impl.client.HttpClients;
  19 +import org.apache.http.message.BasicNameValuePair;
  20 +import org.apache.http.util.EntityUtils;
  21 +import org.springframework.web.multipart.MultipartFile;
  22 +
  23 +import java.io.File;
  24 +import java.io.IOException;
  25 +import java.io.UnsupportedEncodingException;
  26 +import java.util.*;
  27 +
  28 +public class ApiHelper {
  29 +
  30 + public static String doGet(String url,Map<String, String> headerParamMap) {
  31 + CloseableHttpClient httpClient = null;
  32 + CloseableHttpResponse response = null;
  33 + String result = "";
  34 + try {
  35 + // 通过址默认配置创建一个httpClient实例
  36 + httpClient = HttpClients.createDefault();
  37 + // 创建httpGet远程连接实例
  38 + HttpGet httpGet = new HttpGet(url);
  39 + // 设置请求头信息,
  40 + for (Map.Entry<String, String> entry : headerParamMap.entrySet()) {
  41 + httpGet.setHeader(entry.getKey(),entry.getValue());
  42 + }
  43 +
  44 + // 设置配置请求参数
  45 + RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(35000)// 连接主机服务超时时间
  46 + .setConnectionRequestTimeout(35000)// 请求超时时间
  47 + .setSocketTimeout(60000)// 数据读取超时时间
  48 + .build();
  49 + // 为httpGet实例设置配置
  50 + httpGet.setConfig(requestConfig);
  51 + // 执行get请求得到返回对象
  52 + response = httpClient.execute(httpGet);
  53 + // 通过返回对象获取返回数据
  54 + HttpEntity entity = response.getEntity();
  55 + // 通过EntityUtils中的toString方法将结果转换为字符串
  56 + result = EntityUtils.toString(entity);
  57 + } catch (ClientProtocolException e) {
  58 + e.printStackTrace();
  59 + } catch (IOException e) {
  60 + e.printStackTrace();
  61 + } finally {
  62 + // 关闭资源
  63 + if (null != response) {
  64 + try {
  65 + response.close();
  66 + } catch (IOException e) {
  67 + e.printStackTrace();
  68 + }
  69 + }
  70 + if (null != httpClient) {
  71 + try {
  72 + httpClient.close();
  73 + } catch (IOException e) {
  74 + e.printStackTrace();
  75 + }
  76 + }
  77 + }
  78 + return result;
  79 + }
  80 +
  81 +
  82 + public static String doDelete(String url,Map<String, String> headerParamMap) {
  83 + CloseableHttpClient httpClient = null;
  84 + CloseableHttpResponse response = null;
  85 + String result = "";
  86 + try {
  87 + // 通过址默认配置创建一个httpClient实例
  88 + httpClient = HttpClients.createDefault();
  89 + // 创建HttpDelete远程连接实例
  90 + HttpDelete httpDelete = new HttpDelete(url);
  91 + // 设置请求头信息,
  92 + for (Map.Entry<String, String> entry : headerParamMap.entrySet()) {
  93 + httpDelete.setHeader(entry.getKey(),entry.getValue());
  94 + }
  95 +
  96 + // 设置配置请求参数
  97 + RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(35000)// 连接主机服务超时时间
  98 + .setConnectionRequestTimeout(35000)// 请求超时时间
  99 + .setSocketTimeout(60000)// 数据读取超时时间
  100 + .build();
  101 + // 为httpGet实例设置配置
  102 + httpDelete.setConfig(requestConfig);
  103 + // 执行get请求得到返回对象
  104 + response = httpClient.execute(httpDelete);
  105 + // 通过返回对象获取返回数据
  106 + HttpEntity entity = response.getEntity();
  107 + // 通过EntityUtils中的toString方法将结果转换为字符串
  108 + result = EntityUtils.toString(entity);
  109 + } catch (ClientProtocolException e) {
  110 + e.printStackTrace();
  111 + } catch (IOException e) {
  112 + e.printStackTrace();
  113 + } finally {
  114 + // 关闭资源
  115 + if (null != response) {
  116 + try {
  117 + response.close();
  118 + } catch (IOException e) {
  119 + e.printStackTrace();
  120 + }
  121 + }
  122 + if (null != httpClient) {
  123 + try {
  124 + httpClient.close();
  125 + } catch (IOException e) {
  126 + e.printStackTrace();
  127 + }
  128 + }
  129 + }
  130 + return result;
  131 + }
  132 +
  133 + /**
  134 + * 表单格式的post请求
  135 + *
  136 + * @param url 接口地址
  137 + * @param headerParamMap 设置请求头
  138 + * @param paramMap 设置请求值,表单格式的请求值
  139 + * @return
  140 + */
  141 + public static String doPost(String url, Map<String, String> headerParamMap, Map<String, Object> paramMap) {
  142 + CloseableHttpClient httpClient;
  143 + String result;
  144 + // 创建httpClient实例
  145 + httpClient = HttpClients.createDefault();
  146 + // 创建httpPost远程连接实例
  147 + HttpPost httpPost = new HttpPost(url);
  148 + // 设置请求头
  149 + httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded");
  150 + for (Map.Entry<String, String> entry : headerParamMap.entrySet()) {
  151 + httpPost.setHeader(entry.getKey(), entry.getValue());
  152 + }
  153 + // 配置请求参数实例
  154 + RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(35000)// 设置连接主机服务超时时间
  155 + .setConnectionRequestTimeout(35000)// 设置连接请求超时时间
  156 + .setSocketTimeout(60000)// 设置读取数据连接超时时间
  157 + .build();
  158 + // 为httpPost实例设置配置
  159 + httpPost.setConfig(requestConfig);
  160 +
  161 + // 封装post请求参数
  162 + if (null != paramMap && paramMap.size() > 0) {
  163 + List<NameValuePair> nvps = new ArrayList<NameValuePair>();
  164 + // 通过map集成entrySet方法获取entity
  165 + Set<Map.Entry<String, Object>> entrySet = paramMap.entrySet();
  166 + // 循环遍历,获取迭代器
  167 + Iterator<Map.Entry<String, Object>> iterator = entrySet.iterator();
  168 + while (iterator.hasNext()) {
  169 + Map.Entry<String, Object> mapEntry = iterator.next();
  170 + nvps.add(new BasicNameValuePair(mapEntry.getKey(), mapEntry.getValue().toString()));
  171 + }
  172 +
  173 + // 为httpPost设置封装好的请求参数
  174 + try {
  175 + UrlEncodedFormEntity entity = new UrlEncodedFormEntity(nvps, "UTF-8");
  176 + httpPost.setEntity(entity);
  177 + } catch (UnsupportedEncodingException e) {
  178 + e.printStackTrace();
  179 + }
  180 + }
  181 + result = closeHttpAndResult(httpClient, httpPost);
  182 + return result;
  183 + }
  184 + /**
  185 + * post请求,内容体比较灵活,任意字符串格式的内容
  186 + * @param url
  187 + * @param headerParamMap
  188 + * @param jsonParam
  189 + * @return
  190 + */
  191 + public static String doPost(String url, Map<String, String> headerParamMap, String jsonParam) {
  192 + CloseableHttpClient httpClient;
  193 +// CloseableHttpResponse httpResponse = null;
  194 + String result;
  195 + // 创建httpClient实例
  196 + httpClient = HttpClients.createDefault();
  197 + // 创建httpPost远程连接实例
  198 + HttpPost httpPost = new HttpPost(url);
  199 + // 设置请求头
  200 + httpPost.addHeader("Content-Type", "application/json");
  201 + for (Map.Entry<String, String> entry : headerParamMap.entrySet()) {
  202 + httpPost.setHeader(entry.getKey(),entry.getValue());
  203 + }
  204 + // 配置请求参数实例
  205 + RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(35000)// 设置连接主机服务超时时间
  206 + .setConnectionRequestTimeout(35000)// 设置连接请求超时时间
  207 + .setSocketTimeout(60000)// 设置读取数据连接超时时间
  208 + .build();
  209 + // 为httpPost实例设置配置
  210 + httpPost.setConfig(requestConfig);
  211 + StringEntity stringEntity = new StringEntity(jsonParam, ContentType.create("application/json","UTF-8"));
  212 + httpPost.setEntity(stringEntity);
  213 + result = closeHttpAndResult(httpClient,httpPost);
  214 + return result;
  215 + }
  216 +
  217 +
  218 + public static String doPost(String url, Map<String, String> headerParamMap, List<String> files) {
  219 + CloseableHttpClient httpClient;
  220 +
  221 + String result;
  222 + // 创建httpClient实例
  223 + httpClient = HttpClients.createDefault();
  224 + // 创建httpPost远程连接实例
  225 + HttpPost httpPost = new HttpPost(url);
  226 + // 设置请求头
  227 + httpPost.addHeader("Content-Type", "multipart/form-data");
  228 + httpPost.setHeader("Accept-Encoding","gzip");
  229 + httpPost.setHeader("charset", "utf-8");
  230 +
  231 +
  232 + if(headerParamMap != null) {
  233 + for (Map.Entry<String, String> entry : headerParamMap.entrySet()) {
  234 + httpPost.setHeader(entry.getKey(), entry.getValue());
  235 + }
  236 + }
  237 + // 配置请求参数实例
  238 + RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(35000)// 设置连接主机服务超时时间
  239 + .setConnectionRequestTimeout(35000)// 设置连接请求超时时间
  240 + .setSocketTimeout(60000)// 设置读取数据连接超时时间
  241 + .build();
  242 + // 为httpPost实例设置配置
  243 + httpPost.setConfig(requestConfig);
  244 + //创建Mime类型的类
  245 + MultipartEntityBuilder builder = MultipartEntityBuilder.create();
  246 +
  247 + /* example for setting a HttpMultipartMode */
  248 + builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
  249 +
  250 + /* example for adding an image part */
  251 + FileBody fileBody = new FileBody(new File(files.get(0))); //image should be a String
  252 + builder.addPart("file", fileBody);
  253 +
  254 + HttpEntity entity = builder.build();
  255 +
  256 + httpPost.setEntity(entity);
  257 + httpPost.setEntity(entity);
  258 +
  259 + result = closeHttpAndResult(httpClient,httpPost);
  260 + return result;
  261 + }
  262 +
  263 + private static String closeHttpAndResult(CloseableHttpClient httpClient,HttpPost httpPost){
  264 + CloseableHttpResponse httpResponse = null;
  265 + String result = null;
  266 + try {
  267 + // httpClient对象执行post请求,并返回响应参数对象
  268 + httpResponse = httpClient.execute(httpPost);
  269 + // 从响应对象中获取响应内容
  270 + HttpEntity entity = httpResponse.getEntity();
  271 + result = EntityUtils.toString(entity);
  272 + } catch (ClientProtocolException e) {
  273 + e.printStackTrace();
  274 + } catch (IOException e) {
  275 + e.printStackTrace();
  276 + } finally {
  277 + // 关闭资源
  278 + if (null != httpResponse) {
  279 + try {
  280 + httpResponse.close();
  281 + } catch (IOException e) {
  282 + e.printStackTrace();
  283 + }
  284 + }
  285 + if (null != httpClient) {
  286 + try {
  287 + httpClient.close();
  288 + } catch (IOException e) {
  289 + e.printStackTrace();
  290 + }
  291 + }
  292 + }
  293 +
  294 + return result;
  295 + }
  296 +}
  297 +
... ...
springboot/morning-check/src/main/java/com/sincere/morningcheck/utils/DataConvertHelper.java 0 → 100644
... ... @@ -0,0 +1,87 @@
  1 +package com.sincere.morningcheck.utils;
  2 +
  3 +import org.apache.commons.lang3.StringUtils;
  4 +
  5 +import java.math.BigInteger;
  6 +import java.util.*;
  7 +
  8 +public class DataConvertHelper {
  9 +
  10 + /**
  11 + * key-value集合转换为url键值对字符串
  12 + * @param keyValues
  13 + * @return
  14 + */
  15 + private static String keyValueToString(List<Map.Entry<String,String>> keyValues) {
  16 +
  17 + StringBuffer buff = new StringBuffer();
  18 + for (Map.Entry<String, String> entry : keyValues) {
  19 + if (buff.length() > 0) {
  20 + buff.append("&");
  21 + }
  22 + buff.append(entry.getKey()).append("=").append(entry.getValue());
  23 + }
  24 + return buff.toString();
  25 +
  26 + }
  27 +
  28 + public static String mapAscSortToUrl(Map<String,String> aMap){
  29 +
  30 + Set<Map.Entry<String,String>> set=aMap.entrySet();
  31 +
  32 + List<Map.Entry<String,String>> aList=new LinkedList<>(set);
  33 +
  34 + //o1在前是升序,反之是降序
  35 + Collections.sort(aList,(o1,o2)-> { return o1.getKey().compareTo(o2.getKey()); });
  36 +
  37 + return keyValueToString(aList);
  38 + }
  39 +
  40 +
  41 + /**
  42 + * 8位16进制的卡号转为10进制卡号
  43 + * @param cardNo
  44 + * @return
  45 + */
  46 + public static BigInteger XToDist(String cardNo){
  47 + String newCard = "";
  48 + BigInteger card = new BigInteger("0");
  49 + try {
  50 +
  51 + if (StringUtils.isNotBlank(cardNo) && cardNo.length() == 8) {
  52 +
  53 + newCard += cardNo.substring(6, 8);
  54 + newCard += cardNo.substring(4, 6);
  55 + newCard += cardNo.substring(2, 4);
  56 + newCard += cardNo.substring(0, 2);
  57 + card = new BigInteger(newCard, 16);
  58 + }
  59 + }catch (Exception e){
  60 + e.printStackTrace();
  61 + }
  62 + return card;
  63 + }
  64 +
  65 + public static String distToX(Long num) {
  66 + String newCard = "";
  67 + try {
  68 + Long valueTen = num;
  69 + //将十六进制格式化8位输出
  70 + String cardNo = String.format("%08x", valueTen).toUpperCase();
  71 + System.out.println(valueTen + " [十进制]---->[十六进制] " + cardNo);
  72 +
  73 + newCard += cardNo.substring(6, 8);
  74 + newCard += cardNo.substring(4, 6);
  75 + newCard += cardNo.substring(2, 4);
  76 + newCard += cardNo.substring(0, 2);
  77 +
  78 + System.out.println("两两换位之后的新卡号:"+newCard);
  79 +
  80 + }catch (Exception e){
  81 + newCard = "00000000";
  82 + e.printStackTrace();
  83 + }
  84 +
  85 + return newCard;
  86 + }
  87 +}
... ...
springboot/morning-check/src/main/java/com/sincere/morningcheck/utils/FileUtils.java 0 → 100644
... ... @@ -0,0 +1,90 @@
  1 +package com.sincere.morningcheck.utils;
  2 +
  3 +import org.springframework.web.multipart.MultipartFile;
  4 +import sun.misc.BASE64Decoder;
  5 +import sun.misc.BASE64Encoder;
  6 +
  7 +import javax.imageio.stream.FileImageInputStream;
  8 +import java.io.*;
  9 +import java.util.HashMap;
  10 +import java.util.Map;
  11 +
  12 +public class FileUtils {
  13 +
  14 +
  15 + /**
  16 + * @param imgStr base64编码字符串
  17 + * @param path 图片路径-具体到文件
  18 + * @return
  19 + * @Description: 将base64编码字符串转换为图片
  20 + * @Author:
  21 + * @CreateTime:
  22 + */
  23 + public static boolean generateImage(String imgStr, String path) {
  24 + if (imgStr == null)
  25 + return false;
  26 + BASE64Decoder decoder = new BASE64Decoder();
  27 + try {
  28 +// 解密
  29 + byte[] b = decoder.decodeBuffer(imgStr);
  30 +// 处理数据
  31 + for (int i = 0; i < b.length; ++i) {
  32 + if (b[i] < 0) {
  33 + b[i] += 256;
  34 + }
  35 + }
  36 + OutputStream out = new FileOutputStream(path);
  37 + out.write(b);
  38 + out.flush();
  39 + out.close();
  40 + return true;
  41 + } catch (Exception e) {
  42 + return false;
  43 + }
  44 + }
  45 +
  46 + /**
  47 + * @return
  48 + * @Description: 根据图片地址转换为base64编码字符串
  49 + * @Author:
  50 + * @CreateTime:
  51 + */
  52 + public static String getImageStr(String imgFile) {
  53 + InputStream inputStream = null;
  54 + byte[] data = null;
  55 + try {
  56 + inputStream = new FileInputStream(imgFile);
  57 + data = new byte[inputStream.available()];
  58 + inputStream.read(data);
  59 + inputStream.close();
  60 + } catch (IOException e) {
  61 + e.printStackTrace();
  62 + }
  63 + // 加密
  64 + BASE64Encoder encoder = new BASE64Encoder();
  65 + return encoder.encode(data);
  66 + }
  67 +
  68 + //图片到byte数组
  69 + public static byte[] image2byte(String path) {
  70 + byte[] data = null;
  71 + FileImageInputStream input = null;
  72 + try {
  73 + input = new FileImageInputStream(new File(path));
  74 + ByteArrayOutputStream output = new ByteArrayOutputStream();
  75 + byte[] buf = new byte[1024];
  76 + int numBytesRead = 0;
  77 + while ((numBytesRead = input.read(buf)) != -1) {
  78 + output.write(buf, 0, numBytesRead);
  79 + }
  80 + data = output.toByteArray();
  81 + output.close();
  82 + input.close();
  83 + } catch (FileNotFoundException ex1) {
  84 + ex1.printStackTrace();
  85 + } catch (IOException ex1) {
  86 + ex1.printStackTrace();
  87 + }
  88 + return data;
  89 + }
  90 +}
... ...
springboot/morning-check/src/main/java/com/sincere/morningcheck/utils/LogUtil.java 0 → 100644
... ... @@ -0,0 +1,45 @@
  1 +package com.sincere.morningcheck.utils;
  2 +
  3 +import org.slf4j.Logger;
  4 +import org.slf4j.LoggerFactory;
  5 +
  6 +/**
  7 + * @Description: 日志工具类
  8 + * @Author: Ziv
  9 + */
  10 +public class LogUtil {
  11 +
  12 + /**
  13 + * 将信息打印到自定义日志(my_info.log)中
  14 + * @param message 需要被打印的信息
  15 + */
  16 + public static void printInfoLog(String message){
  17 + Logger logger = LoggerFactory.getLogger("my_info");
  18 + logger.info(message);
  19 + }
  20 +
  21 + /**
  22 + * 将信息打印到自定义日志(system_error.log)中
  23 + * @param e 异常信息
  24 + */
  25 + public static void printErrorLog(Exception e, Class<?> clazz){
  26 + Logger logger = LoggerFactory.getLogger(clazz);
  27 +
  28 + StringBuffer logOut = new StringBuffer();
  29 + logOut.append(e.toString());
  30 +
  31 +
  32 + StackTraceElement[] errorList = e.getStackTrace();
  33 + for (StackTraceElement stackTraceElement : errorList) {
  34 + logOut.append(stackTraceElement.toString());
  35 + logOut.append("\n");
  36 + }
  37 +
  38 + logger.error(logOut.toString());
  39 + }
  40 +
  41 + public static void printErrorLog(Class<?> clazz,String message){
  42 + Logger logger = LoggerFactory.getLogger(clazz);
  43 + logger.error(message);
  44 + }
  45 +}
... ...
springboot/morning-check/src/main/resources/application.properties 0 → 100644
... ... @@ -0,0 +1,14 @@
  1 +salt = sincere
  2 +
  3 +server.port=8999
  4 +
  5 +spring.datasource.username=szjxtuser
  6 +spring.datasource.password=RQminVCJota3H1u8bBYH
  7 +spring.datasource.url=jdbc:sqlserver://116.62.155.137:33419;database=smartcampus
  8 +spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
  9 +
  10 +mybatis.mapper-locations=classpath:/mapper/*.xml
  11 +mybatis.type-aliases-package=com.sincere.morningcheck.model
  12 +
  13 +# springboot ²¿Êð»·¾³µÄѡȡ
  14 +spring.profiles.active=dev
... ...
springboot/morning-check/src/main/resources/file-message.properties 0 → 100644
... ... @@ -0,0 +1,8 @@
  1 +#文件压缩大小(大于5兆压缩)
  2 +message.fileSize=5242880
  3 +#图片保存路径
  4 +message.upPath=D:\\MorningRobot\\UploadData\\images
  5 +#压缩比例
  6 +message.scaleRatio=0.90f
  7 +#图片类型
  8 +message.imageType=png,jpg,jpeg
0 9 \ No newline at end of file
... ...
springboot/morning-check/src/main/resources/logback.xml 0 → 100644
... ... @@ -0,0 +1,100 @@
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<configuration debug="false">
  3 + <!-- 项目名称 -->
  4 + <property name="PROJECT_NAME" value="authjwt" />
  5 +
  6 + <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径,不要写E:\logs,否则识别不出来,\是转义字符,需要\\才能正确识别-->
  7 + <property name="LOG_HOME" value="E:\\logs" />
  8 +
  9 + <!-- 控制台输出 -->
  10 + <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
  11 + <!--withJansi表示是否启用彩色日志,默认是不启用
  12 + 启用彩色日志后如果报:Failed to instantiate type org.fusesource.jansi.WindowsAnsiOutputStream
  13 + 是因为系统缺少 Microsoft Visual C++ 2008 SP1 Redistributable 可忽视
  14 + 强迫症请跳转:http://www.mcbbs.net/forum.php?mod=viewthread&tid=548550&highlight=out&page=1
  15 + -->
  16 + <!--<withJansi>false</withJansi>-->
  17 + <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
  18 + <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
  19 + <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] %highlight([%-5level] %logger{50} - %msg%n)</pattern>
  20 + <charset>UTF-8</charset>
  21 + </encoder>
  22 + </appender>
  23 +
  24 + <!-- 系统错误日志文件 -->
  25 + <appender name="SYSTEM_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
  26 + <!-- 过滤器,只打印ERROR级别的日志 -->
  27 + <filter class="ch.qos.logback.classic.filter.LevelFilter">
  28 + <!--配置 onMatch,onMismatch 可实现只输出单个级别-->
  29 + <level>ERROR</level>
  30 + <onMatch>ACCEPT</onMatch>
  31 + <onMismatch>DENY</onMismatch>
  32 + </filter>
  33 + <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
  34 + <!--日志文件输出的文件名 -->
  35 + <FileNamePattern>${LOG_HOME}/${PROJECT_NAME}.system_error.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
  36 + <!--日志文件保留天数-->
  37 + <MaxHistory>15</MaxHistory>
  38 + <!--日志文件最大的大小-->
  39 + <MaxFileSize>10MB</MaxFileSize>
  40 + </rollingPolicy>
  41 +
  42 + <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
  43 + <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
  44 + <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%-5level] %logger{50} - %msg%n</pattern>
  45 + <charset>UTF-8</charset>
  46 + </encoder>
  47 + </appender>
  48 + <!--<logger name="system_error" additivity="true">-->
  49 + <!--<appender-ref ref="SYSTEM_FILE"/>-->
  50 + <!--</logger>-->
  51 +
  52 + <!-- 自己打印的日志文件,用于记录重要日志信息 -->
  53 + <appender name="MY_INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
  54 + <!-- 过滤器,只打印INFOR级别的日志 -->
  55 + <filter class="ch.qos.logback.classic.filter.LevelFilter">
  56 + <level>INFO</level>
  57 + <onMatch>ACCEPT</onMatch>
  58 + <onMismatch>DENY</onMismatch>
  59 + </filter>
  60 + <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
  61 + <!--日志文件输出的文件名-->
  62 + <FileNamePattern>${LOG_HOME}\authjwt.my_info.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
  63 + <!--日志文件保留天数-->
  64 + <MaxHistory>15</MaxHistory>
  65 + <!--日志文件最大的大小-->
  66 + <MaxFileSize>10MB</MaxFileSize>
  67 + </rollingPolicy>
  68 +
  69 + <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
  70 + <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
  71 + <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%-5level] %logger{50} - %msg%n</pattern>
  72 + <charset>UTF-8</charset>
  73 + </encoder>
  74 + </appender>
  75 + <logger name="my_info" additivity="false" level="info">
  76 + <appender-ref ref="MY_INFO_FILE"/>
  77 + </logger>
  78 +
  79 +
  80 + <!--name用来指定受此 logger 约束的某个包或者某个具体的类-->
  81 + <!--<logger name="my_info" additivity="true" level="debug">-->
  82 + <!--<appender-ref ref="CONSOLE"/>-->
  83 + <!--</logger>-->
  84 + <!-- 开发环境下的日志配置 -->
  85 + <springProfile name="dev">
  86 + <root level="info">
  87 + <appender-ref ref="CONSOLE"/>
  88 + <appender-ref ref="SYSTEM_FILE" />
  89 + <appender-ref ref="MY_INFO_FILE" />
  90 + </root>
  91 + </springProfile>
  92 +
  93 + <!-- 生产环境下的日志配置 -->
  94 + <springProfile name="prod">
  95 + <root level="INFO">
  96 + <appender-ref ref="SYSTEM_FILE" />
  97 + <appender-ref ref="MY_INFO_FILE" />
  98 + </root>
  99 + </springProfile>
  100 +</configuration>
0 101 \ No newline at end of file
... ...
springboot/morning-check/src/main/resources/mapper/studentmapper.xml 0 → 100644
... ... @@ -0,0 +1,47 @@
  1 +<?xml version="1.0" encoding="UTF-8" ?>
  2 +<!DOCTYPE mapper
  3 + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4 + "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5 +<mapper namespace="com.sincere.morningcheck.dao.StudentDao">
  6 +
  7 + <!--声明返回结果参数-->
  8 + <resultMap id="BaseResultMap" type="com.sincere.morningcheck.model.Student">
  9 + <result column="student_id" property="stuId" jdbcType="INTEGER" javaType="java.lang.Integer"/>
  10 + <result column="name" property="stuName" jdbcType="VARCHAR" javaType="java.lang.String"/>
  11 + <result column="class_id" property="classId" jdbcType="INTEGER" javaType="java.lang.Integer"/>
  12 + <result column="class_name" property="className" jdbcType="VARCHAR" javaType="java.lang.String"/>
  13 + <result column="Cards" property="cardNos" jdbcType="VARCHAR" javaType="java.lang.String"/>
  14 + </resultMap>
  15 +
  16 +
  17 + <select id="getStudents" resultMap="BaseResultMap">
  18 + select class_id,student_id,name,class_name,(student_num+
  19 + case when
  20 + (select dbo.StringJoin(distinct a.CardNum) from HS_StudentCards a where a.State=1 and a.CardNum is not null and len(a.CardNum)=8 and a.StudentId=vs.student_id)!=''
  21 + then
  22 + ','+(select dbo.StringJoin( a.CardNum) from HS_StudentCards a where a.State=1 and a.CardNum is not null and len(a.CardNum)=8 and a.StudentId=vs.student_id)
  23 + else
  24 + ''
  25 + end
  26 + ) as Cards
  27 + from SZ_V_School_Student vs where vs.role_state=1 and vs.school_id=#{schoolId} and vs.student_num is not null and LEN(vs.student_num)=8
  28 + </select>
  29 +
  30 + <select id="getStudentByCardNo" resultMap="BaseResultMap">
  31 + select top 1 vs.name,vs.student_id,vs.class_id,vs.class_name from SZ_V_School_Student vs
  32 + inner join SZ_V_Card b on b.type=2 and vs.student_id=b.user_id and b.num=#{cardNo}
  33 + where vs.role_state=1
  34 + </select>
  35 +
  36 + <select id="swipeCard" statementType="CALLABLE" resultType="java.util.Map">
  37 + {call xiaoan.dbo.AttendanceService(
  38 + #{att_id, mode=IN},
  39 + #{card_num, mode=IN},
  40 + #{func_no, mode=IN},
  41 + #{flag, mode=IN},
  42 + #{intime, mode=IN},
  43 + #{arr, mode=OUT, jdbcType=VARCHAR},
  44 + #{iscuccess,mode=OUT,jdbcType=INTEGER}
  45 + )}
  46 + </select>
  47 +</mapper>
0 48 \ No newline at end of file
... ...
springboot/morning-check/src/main/resources/mapper/usermapper.xml 0 → 100644
... ... @@ -0,0 +1,34 @@
  1 +<?xml version="1.0" encoding="UTF-8" ?>
  2 +<!DOCTYPE mapper
  3 + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4 + "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5 +<mapper namespace="com.sincere.morningcheck.dao.UserDao">
  6 +
  7 + <!--声明返回结果参数-->
  8 + <resultMap id="BaseResultJoinMap" type="com.sincere.morningcheck.model.User">
  9 + <!-- id:指定查询列中的唯 一标识,即主键,可配置多个-->
  10 + <id column="pid" property="id" jdbcType="INTEGER" javaType="java.lang.Integer"/>
  11 + <result column="school_name" property="schoolName" jdbcType="VARCHAR" javaType="java.lang.String"/>
  12 + <result column="school_id" property="schoolId" jdbcType="INTEGER" javaType="java.lang.Integer"/>
  13 + <result column="clint_id" property="deviceId" jdbcType="VARCHAR" javaType="java.lang.String"/>
  14 + </resultMap>
  15 +
  16 + <resultMap id="BaseResultMap" type="com.sincere.morningcheck.model.School">
  17 + <result column="school_name" property="schoolName" jdbcType="VARCHAR" javaType="java.lang.String"/>
  18 + <result column="school_id" property="schoolId" jdbcType="INTEGER" javaType="java.lang.Integer"/>
  19 + </resultMap>
  20 +
  21 + <!--声明参数类型 一般不推荐使用ParameterMap,推荐使用parameterType-->
  22 + <!--<parameterMap id="User" type="com.sincere.morningcheck.model.User"/>-->
  23 +
  24 +
  25 + <select id="getUser" resultMap="BaseResultJoinMap">
  26 + select a.clint_id,s.school_name,s.school_id from SZ_Attendance a join SZ_School s on a.school_id = s.school_id
  27 +where a.state=1 and a.clint_type = 21 and a.clint_id=#{deviceNo}
  28 + </select>
  29 +
  30 + <select id="getSchoolById" resultMap="BaseResultMap">
  31 + select school_name,school_id from SZ_School where school_id=#{schoolId}
  32 + </select>
  33 +
  34 +</mapper>
0 35 \ No newline at end of file
... ...
springboot/morning-check/src/test/java/com/sincere/morningcheck/MorningCheckApplicationTests.java 0 → 100644
... ... @@ -0,0 +1,16 @@
  1 +package com.sincere.morningcheck;
  2 +
  3 +import org.junit.Test;
  4 +import org.junit.runner.RunWith;
  5 +import org.springframework.boot.test.context.SpringBootTest;
  6 +import org.springframework.test.context.junit4.SpringRunner;
  7 +
  8 +@RunWith(SpringRunner.class)
  9 +@SpringBootTest
  10 +public class MorningCheckApplicationTests {
  11 +
  12 + @Test
  13 + public void contextLoads() {
  14 + }
  15 +
  16 +}
... ...
springboot/morning-check/src/test/java/com/sincere/morningcheck/MorningCheckControllerApplicationTests.java 0 → 100644
... ... @@ -0,0 +1,16 @@
  1 +package com.sincere.morningcheck;
  2 +
  3 +import org.junit.Test;
  4 +import org.junit.runner.RunWith;
  5 +import org.springframework.boot.test.context.SpringBootTest;
  6 +import org.springframework.test.context.junit4.SpringRunner;
  7 +
  8 +@RunWith(SpringRunner.class)
  9 +@SpringBootTest
  10 +public class MorningCheckControllerApplicationTests {
  11 +
  12 + @Test
  13 + public void contextLoads() {
  14 + }
  15 +
  16 +}
... ...