diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..29d4027
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,37 @@
+# Created by .ignore support plugin (hsz.mobi)
+HELP.md
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**
+!**/src/test/**
+**/target/
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+*.class
+*.log
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+
+### VS Code ###
+.vscode/
+assets/
+logs/
diff --git a/mvnw b/mvnw
new file mode 100644
index 0000000..a16b543
--- /dev/null
+++ b/mvnw
@@ -0,0 +1,310 @@
+#!/bin/sh
+# ----------------------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+# ----------------------------------------------------------------------------
+
+# ----------------------------------------------------------------------------
+# Maven Start Up Batch script
+#
+# Required ENV vars:
+# ------------------
+# JAVA_HOME - location of a JDK home dir
+#
+# Optional ENV vars
+# -----------------
+# M2_HOME - location of maven2's installed home dir
+# MAVEN_OPTS - parameters passed to the Java VM when running Maven
+# e.g. to debug Maven itself, use
+# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+# ----------------------------------------------------------------------------
+
+if [ -z "$MAVEN_SKIP_RC" ] ; then
+
+ if [ -f /etc/mavenrc ] ; then
+ . /etc/mavenrc
+ fi
+
+ if [ -f "$HOME/.mavenrc" ] ; then
+ . "$HOME/.mavenrc"
+ fi
+
+fi
+
+# OS specific support. $var _must_ be set to either true or false.
+cygwin=false;
+darwin=false;
+mingw=false
+case "`uname`" in
+ CYGWIN*) cygwin=true ;;
+ MINGW*) mingw=true;;
+ Darwin*) darwin=true
+ # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
+ # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
+ if [ -z "$JAVA_HOME" ]; then
+ if [ -x "/usr/libexec/java_home" ]; then
+ export JAVA_HOME="`/usr/libexec/java_home`"
+ else
+ export JAVA_HOME="/Library/Java/Home"
+ fi
+ fi
+ ;;
+esac
+
+if [ -z "$JAVA_HOME" ] ; then
+ if [ -r /etc/gentoo-release ] ; then
+ JAVA_HOME=`java-config --jre-home`
+ fi
+fi
+
+if [ -z "$M2_HOME" ] ; then
+ ## resolve links - $0 may be a link to maven's home
+ PRG="$0"
+
+ # need this for relative symlinks
+ while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG="`dirname "$PRG"`/$link"
+ fi
+ done
+
+ saveddir=`pwd`
+
+ M2_HOME=`dirname "$PRG"`/..
+
+ # make it fully qualified
+ M2_HOME=`cd "$M2_HOME" && pwd`
+
+ cd "$saveddir"
+ # echo Using m2 at $M2_HOME
+fi
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched
+if $cygwin ; then
+ [ -n "$M2_HOME" ] &&
+ M2_HOME=`cygpath --unix "$M2_HOME"`
+ [ -n "$JAVA_HOME" ] &&
+ JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+ [ -n "$CLASSPATH" ] &&
+ CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
+fi
+
+# For Mingw, ensure paths are in UNIX format before anything is touched
+if $mingw ; then
+ [ -n "$M2_HOME" ] &&
+ M2_HOME="`(cd "$M2_HOME"; pwd)`"
+ [ -n "$JAVA_HOME" ] &&
+ JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
+fi
+
+if [ -z "$JAVA_HOME" ]; then
+ javaExecutable="`which javac`"
+ if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
+ # readlink(1) is not available as standard on Solaris 10.
+ readLink=`which readlink`
+ if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
+ if $darwin ; then
+ javaHome="`dirname \"$javaExecutable\"`"
+ javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
+ else
+ javaExecutable="`readlink -f \"$javaExecutable\"`"
+ fi
+ javaHome="`dirname \"$javaExecutable\"`"
+ javaHome=`expr "$javaHome" : '\(.*\)/bin'`
+ JAVA_HOME="$javaHome"
+ export JAVA_HOME
+ fi
+ fi
+fi
+
+if [ -z "$JAVACMD" ] ; then
+ if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ else
+ JAVACMD="`which java`"
+ fi
+fi
+
+if [ ! -x "$JAVACMD" ] ; then
+ echo "Error: JAVA_HOME is not defined correctly." >&2
+ echo " We cannot execute $JAVACMD" >&2
+ exit 1
+fi
+
+if [ -z "$JAVA_HOME" ] ; then
+ echo "Warning: JAVA_HOME environment variable is not set."
+fi
+
+CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
+
+# traverses directory structure from process work directory to filesystem root
+# first directory with .mvn subdirectory is considered project base directory
+find_maven_basedir() {
+
+ if [ -z "$1" ]
+ then
+ echo "Path not specified to find_maven_basedir"
+ return 1
+ fi
+
+ basedir="$1"
+ wdir="$1"
+ while [ "$wdir" != '/' ] ; do
+ if [ -d "$wdir"/.mvn ] ; then
+ basedir=$wdir
+ break
+ fi
+ # workaround for JBEAP-8937 (on Solaris 10/Sparc)
+ if [ -d "${wdir}" ]; then
+ wdir=`cd "$wdir/.."; pwd`
+ fi
+ # end of workaround
+ done
+ echo "${basedir}"
+}
+
+# concatenates all lines of a file
+concat_lines() {
+ if [ -f "$1" ]; then
+ echo "$(tr -s '\n' ' ' < "$1")"
+ fi
+}
+
+BASE_DIR=`find_maven_basedir "$(pwd)"`
+if [ -z "$BASE_DIR" ]; then
+ exit 1;
+fi
+
+##########################################################################################
+# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
+# This allows using the maven wrapper in projects that prohibit checking in binary data.
+##########################################################################################
+if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo "Found .mvn/wrapper/maven-wrapper.jar"
+ fi
+else
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
+ fi
+ if [ -n "$MVNW_REPOURL" ]; then
+ jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
+ else
+ jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
+ fi
+ while IFS="=" read key value; do
+ case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
+ esac
+ done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo "Downloading from: $jarUrl"
+ fi
+ wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
+ if $cygwin; then
+ wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"`
+ fi
+
+ if command -v wget > /dev/null; then
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo "Found wget ... using wget"
+ fi
+ if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
+ wget "$jarUrl" -O "$wrapperJarPath"
+ else
+ wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath"
+ fi
+ elif command -v curl > /dev/null; then
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo "Found curl ... using curl"
+ fi
+ if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
+ curl -o "$wrapperJarPath" "$jarUrl" -f
+ else
+ curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f
+ fi
+
+ else
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo "Falling back to using Java to download"
+ fi
+ javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
+ # For Cygwin, switch paths to Windows format before running javac
+ if $cygwin; then
+ javaClass=`cygpath --path --windows "$javaClass"`
+ fi
+ if [ -e "$javaClass" ]; then
+ if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo " - Compiling MavenWrapperDownloader.java ..."
+ fi
+ # Compiling the Java class
+ ("$JAVA_HOME/bin/javac" "$javaClass")
+ fi
+ if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
+ # Running the downloader
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo " - Running MavenWrapperDownloader.java ..."
+ fi
+ ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
+ fi
+ fi
+ fi
+fi
+##########################################################################################
+# End of extension
+##########################################################################################
+
+export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
+if [ "$MVNW_VERBOSE" = true ]; then
+ echo $MAVEN_PROJECTBASEDIR
+fi
+MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin; then
+ [ -n "$M2_HOME" ] &&
+ M2_HOME=`cygpath --path --windows "$M2_HOME"`
+ [ -n "$JAVA_HOME" ] &&
+ JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
+ [ -n "$CLASSPATH" ] &&
+ CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
+ [ -n "$MAVEN_PROJECTBASEDIR" ] &&
+ MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
+fi
+
+# Provide a "standardized" way to retrieve the CLI args that will
+# work with both Windows and non-Windows executions.
+MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
+export MAVEN_CMD_LINE_ARGS
+
+WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+exec "$JAVACMD" \
+ $MAVEN_OPTS \
+ -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
+ "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
+ ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
diff --git a/mvnw.cmd b/mvnw.cmd
new file mode 100644
index 0000000..c8d4337
--- /dev/null
+++ b/mvnw.cmd
@@ -0,0 +1,182 @@
+@REM ----------------------------------------------------------------------------
+@REM Licensed to the Apache Software Foundation (ASF) under one
+@REM or more contributor license agreements. See the NOTICE file
+@REM distributed with this work for additional information
+@REM regarding copyright ownership. The ASF licenses this file
+@REM to you under the Apache License, Version 2.0 (the
+@REM "License"); you may not use this file except in compliance
+@REM with the License. You may obtain a copy of the License at
+@REM
+@REM https://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing,
+@REM software distributed under the License is distributed on an
+@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+@REM KIND, either express or implied. See the License for the
+@REM specific language governing permissions and limitations
+@REM under the License.
+@REM ----------------------------------------------------------------------------
+
+@REM ----------------------------------------------------------------------------
+@REM Maven Start Up Batch script
+@REM
+@REM Required ENV vars:
+@REM JAVA_HOME - location of a JDK home dir
+@REM
+@REM Optional ENV vars
+@REM M2_HOME - location of maven2's installed home dir
+@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
+@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
+@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
+@REM e.g. to debug Maven itself, use
+@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+@REM ----------------------------------------------------------------------------
+
+@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
+@echo off
+@REM set title of command window
+title %0
+@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
+@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
+
+@REM set %HOME% to equivalent of $HOME
+if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
+
+@REM Execute a user defined script before this one
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
+@REM check for pre script, once with legacy .bat ending and once with .cmd ending
+if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
+if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
+:skipRcPre
+
+@setlocal
+
+set ERROR_CODE=0
+
+@REM To isolate internal variables from possible post scripts, we use another setlocal
+@setlocal
+
+@REM ==== START VALIDATION ====
+if not "%JAVA_HOME%" == "" goto OkJHome
+
+echo.
+echo Error: JAVA_HOME not found in your environment. >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+:OkJHome
+if exist "%JAVA_HOME%\bin\java.exe" goto init
+
+echo.
+echo Error: JAVA_HOME is set to an invalid directory. >&2
+echo JAVA_HOME = "%JAVA_HOME%" >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+@REM ==== END VALIDATION ====
+
+:init
+
+@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
+@REM Fallback to current working directory if not found.
+
+set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
+IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
+
+set EXEC_DIR=%CD%
+set WDIR=%EXEC_DIR%
+:findBaseDir
+IF EXIST "%WDIR%"\.mvn goto baseDirFound
+cd ..
+IF "%WDIR%"=="%CD%" goto baseDirNotFound
+set WDIR=%CD%
+goto findBaseDir
+
+:baseDirFound
+set MAVEN_PROJECTBASEDIR=%WDIR%
+cd "%EXEC_DIR%"
+goto endDetectBaseDir
+
+:baseDirNotFound
+set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
+cd "%EXEC_DIR%"
+
+:endDetectBaseDir
+
+IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
+
+@setlocal EnableExtensions EnableDelayedExpansion
+for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
+@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
+
+:endReadAdditionalConfig
+
+SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
+set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
+set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
+
+FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
+ IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
+)
+
+@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
+@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
+if exist %WRAPPER_JAR% (
+ if "%MVNW_VERBOSE%" == "true" (
+ echo Found %WRAPPER_JAR%
+ )
+) else (
+ if not "%MVNW_REPOURL%" == "" (
+ SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
+ )
+ if "%MVNW_VERBOSE%" == "true" (
+ echo Couldn't find %WRAPPER_JAR%, downloading it ...
+ echo Downloading from: %DOWNLOAD_URL%
+ )
+
+ powershell -Command "&{"^
+ "$webclient = new-object System.Net.WebClient;"^
+ "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
+ "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
+ "}"^
+ "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^
+ "}"
+ if "%MVNW_VERBOSE%" == "true" (
+ echo Finished downloading %WRAPPER_JAR%
+ )
+)
+@REM End of extension
+
+@REM Provide a "standardized" way to retrieve the CLI args that will
+@REM work with both Windows and non-Windows executions.
+set MAVEN_CMD_LINE_ARGS=%*
+
+%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
+if ERRORLEVEL 1 goto error
+goto end
+
+:error
+set ERROR_CODE=1
+
+:end
+@endlocal & set ERROR_CODE=%ERROR_CODE%
+
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
+@REM check for post script, once with legacy .bat ending and once with .cmd ending
+if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
+if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
+:skipRcPost
+
+@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
+if "%MAVEN_BATCH_PAUSE%" == "on" pause
+
+if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
+
+exit /B %ERROR_CODE%
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..24e53cc
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,296 @@
+
+
+ 4.0.0
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.1.7.RELEASE
+
+
+ com.subsidy
+ subsidy
+ 0.0.1
+ subsidy
+ Demo project for Spring Boot
+
+
+ UTF-8
+ UTF-8
+ 1.8
+ 3.3.0
+ 3.3.2
+ 2.9.2
+ 1.2.58
+ 2.0.0
+ 3.13
+ 1.1.0
+ 4.4.6
+ 3.9
+ 1.1.22
+ 5.2.0
+ 5.4.1
+ 3.10.3
+ 3.3.0
+ 3.2.2
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter
+
+
+
+ org.freemarker
+ freemarker
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ org.springframework.boot
+ spring-boot-starter-aop
+
+
+
+ com.belerweb
+ pinyin4j
+ 2.5.1
+
+
+
+
+ com.tencentcloudapi
+ tencentcloud-sdk-java
+ 3.1.322
+
+
+
+ com.qcloud
+ vod_api
+ 2.1.2
+
+
+
+ org.springframework.boot
+ spring-boot-configuration-processor
+ true
+
+
+
+ mysql
+ mysql-connector-java
+ runtime
+
+
+
+ com.alibaba
+ druid-spring-boot-starter
+ ${druid.version}
+
+
+
+ org.springframework.boot
+ spring-boot-starter-jdbc
+
+
+
+ org.projectlombok
+ lombok
+
+
+
+
+ com.baomidou
+ mybatis-plus-boot-starter
+ ${mybatis-plus.version}
+
+
+
+ com.baomidou
+ mybatis-plus-generator
+ ${generator.version}
+
+
+
+ com.alibaba
+ fastjson
+ ${fastjson.version}
+
+
+
+ io.springfox
+ springfox-swagger2
+ ${swagger2.version}
+
+
+
+ io.springfox
+ springfox-swagger-ui
+ ${swagger2.version}
+
+
+
+
+
+
+
+
+
+ org.apache.poi
+ poi-ooxml
+ ${poi-ooxml.version}
+
+
+
+ com.aliyun
+ aliyun-java-sdk-dysmsapi
+ ${dysmsapi.version}
+
+
+ com.aliyun
+ aliyun-java-sdk-core
+ ${sdk-core.version}
+
+
+ org.apache.commons
+ commons-lang3
+ ${lang3.version}
+
+
+
+ com.itextpdf
+ itext-asian
+ ${itext-asian.version}
+
+
+
+ com.itextpdf
+ itextpdf
+ ${itextpdf.version}
+
+
+
+ com.auth0
+ java-jwt
+ ${java-jwt.version}
+
+
+
+ net.sf.json-lib
+ json-lib
+ 2.4
+ jdk15
+
+
+
+ org.scilab.forge
+ jlatexmath
+ 1.0.7
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-redis
+
+
+
+ org.springframework.boot
+ spring-boot-starter-quartz
+
+
+
+ redis.clients
+ jedis
+ ${jedis.version}
+
+
+
+ commons-collections
+ commons-collections
+ ${collections.version}
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
+
+
+ org.java-websocket
+ Java-WebSocket
+ 1.5.1
+
+
+
+ cn.hutool
+ hutool-all
+ 5.5.2
+
+
+
+ org.springframework.boot
+ spring-boot-starter-cache
+
+
+
+ net.sf.ehcache
+ ehcache
+
+
+
+ net.polyv
+ polyv-java-live-sdk
+ 2.0.4
+
+
+
+
+ com.aliyun.oss
+ aliyun-sdk-oss
+ 3.15.0
+
+
+
+ com.squareup.okhttp3
+ okhttp
+ 3.10.0
+
+
+ com.squareup.okio
+ okio
+ 1.13.0
+
+
+
+ com.google.code.gson
+ gson
+ 2.8.6
+
+
+
+
+ subsidy-mate
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+ 2.2.6.RELEASE
+
+
+
+ org.projectlombok
+ lombok
+
+
+
+
+
+
+
+
diff --git a/src/main/java/com/subsidy/MeishuApplication.java b/src/main/java/com/subsidy/MeishuApplication.java
new file mode 100644
index 0000000..f84e999
--- /dev/null
+++ b/src/main/java/com/subsidy/MeishuApplication.java
@@ -0,0 +1,25 @@
+package com.subsidy;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@SpringBootApplication
+@MapperScan(basePackages = {"com.subsidy.mapper"})
+@EnableScheduling
+//@EnableCaching
+@EnableAsync
+@EnableTransactionManagement
+public class MeishuApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(MeishuApplication.class, args);
+ }
+
+
+}
diff --git a/src/main/java/com/subsidy/common/constant/AttendanceConstant.java b/src/main/java/com/subsidy/common/constant/AttendanceConstant.java
new file mode 100644
index 0000000..1305fc9
--- /dev/null
+++ b/src/main/java/com/subsidy/common/constant/AttendanceConstant.java
@@ -0,0 +1,29 @@
+package com.subsidy.common.constant;
+
+public class AttendanceConstant {
+
+ /**
+ * 创建预约api
+ */
+ public static final String CREATE_TOPIC_URL = "https://open.api.roomis.com.cn/api/my/booking/spaces/{spaceId}/events";
+
+ /**
+ * 考勤api
+ */
+ public static final String GET_ATTENDANCE_URL = "https://open.api.roomis.com.cn/api/attendance/{id}";
+
+ /**
+ * 创建人ID
+ */
+ public static Long organizerId = 200000222L;
+
+ /**
+ * 开始时间
+ */
+ public static String startTime = "07:00:00";
+
+ /**
+ * 结束时间
+ */
+ public static String endTime = "21:00:00";
+}
diff --git a/src/main/java/com/subsidy/common/constant/Code.java b/src/main/java/com/subsidy/common/constant/Code.java
new file mode 100644
index 0000000..fbe57a0
--- /dev/null
+++ b/src/main/java/com/subsidy/common/constant/Code.java
@@ -0,0 +1,33 @@
+package com.subsidy.common.constant;
+
+import lombok.Getter;
+
+@Getter
+public enum Code {
+
+ USERNAMENOTFOUND(1001, "用户不存在"),
+ BADCREDENTIALS(1002,"账户或者密码错误"),
+ ACCOUNTEXPIRED(1003,"账户过期"),
+ LOCKEDEXCEPTION(1004, "账户已锁定"),
+ DISABLEDEXCEPTION(1005,"账户已禁用"),
+ ACCESSDENIED(1006,"无权限访问"),
+ AUTHENTICATION(1007,"身份验证异常"),
+ NOHANDLERFOUND(1008,"找不到相应的视图处理器"),
+ PARAM_INVALID(1009, "参数不合法"),
+ TOKEN_EXCEPTION(1010, "无效的令牌"),
+ TOKEN_EXPIRED(1011, "当前账户已在其他设备登录"),
+ TOKEN_VERIFICATION_FAILED(1013, "令牌验证失败"),
+ OSS_ERROR(1012, "OSS文件上传异常"),
+ Network_ERROR(9000, "网络请求失败"),
+ SERVER_INTERNAL_ERROR(99999, "服务器内部错误"),
+ ;
+
+ private Integer code;
+
+ private String message;
+
+ Code(Integer code, String message) {
+ this.code = code;
+ this.message = message;
+ }
+}
diff --git a/src/main/java/com/subsidy/common/constant/CourseNotification.java b/src/main/java/com/subsidy/common/constant/CourseNotification.java
new file mode 100644
index 0000000..0111f35
--- /dev/null
+++ b/src/main/java/com/subsidy/common/constant/CourseNotification.java
@@ -0,0 +1,8 @@
+package com.subsidy.common.constant;
+
+public class CourseNotification {
+
+ public static final String UNSENT = "待发送";
+
+ public static final String SENT = "已发送";
+}
diff --git a/src/main/java/com/subsidy/common/constant/SmsCode.java b/src/main/java/com/subsidy/common/constant/SmsCode.java
new file mode 100644
index 0000000..aef2eb2
--- /dev/null
+++ b/src/main/java/com/subsidy/common/constant/SmsCode.java
@@ -0,0 +1,23 @@
+package com.subsidy.common.constant;
+
+import lombok.Getter;
+
+@Getter
+public enum SmsCode {
+
+ SIGN_IN("SMS_234409992", "签到通知"),
+ TEST("SMS_234414789", "测试通知"),
+ CLASS_START("SMS_228137810", "开课通知"),
+ ALL("SMS_228137810", "全部成员"),
+ NOT_SIGNED_IN("SMS_234409992","未签到成员"),
+ UNFINISHED("SMS_234414789","未完课成员");
+
+ private String type;
+
+ private String code;
+
+ SmsCode(String code, String type) {
+ this.code = code;
+ this.type = type;
+ }
+}
diff --git a/src/main/java/com/subsidy/common/constant/VodConstant.java b/src/main/java/com/subsidy/common/constant/VodConstant.java
new file mode 100644
index 0000000..12fe119
--- /dev/null
+++ b/src/main/java/com/subsidy/common/constant/VodConstant.java
@@ -0,0 +1,31 @@
+package com.subsidy.common.constant;
+
+import lombok.Getter;
+
+@Getter
+public class VodConstant {
+
+ /* 流量 */
+ public final static String FLUX = "Flux";
+
+ /* 带宽 */
+ public final static String BANDWIDTH = "Bandwidth";
+
+ /* 请求数 */
+ public final static String REQUESTS = "Requests";
+
+ /* 请求命中率 */
+ public final static String HITRATE = "Hitrate";
+
+ /* IP访问次数 */
+ public final static String IP_VISITS = "Ip_visits";
+
+ /* 带宽缓存key */
+ public final static String BANDWIDTH_CACHE_KEY = "CDNStatBandwidthCache";
+
+ /* 流量缓存key */
+ public final static String FLUX_CACHE_KEY = "CDNStatFluxCache";
+
+ /* 自定义缓存名称(ehcache.xml中的自定义规则名称) */
+ public final static String CDN_STAT_DETAILS_CACHE_NAME = "CDNStatDetails";
+}
diff --git a/src/main/java/com/subsidy/common/constant/WxConstant.java b/src/main/java/com/subsidy/common/constant/WxConstant.java
new file mode 100644
index 0000000..41ed23a
--- /dev/null
+++ b/src/main/java/com/subsidy/common/constant/WxConstant.java
@@ -0,0 +1,35 @@
+package com.subsidy.common.constant;
+
+public class WxConstant {
+
+ /**
+ * app id
+ */
+ public static final String APPID = "wx75ec06e9ce50ef73";
+
+ /**
+ * 秘钥
+ */
+ public static final String SECRENT = "c039d32804278503474dfcf7cb3944b9";
+
+ /**
+ * 获取访问用户身份
+ */
+ public static final String GETUSERINFO = "https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token={access_token}&code={code}";
+
+ /**
+ * 读取成员
+ */
+ public static final String GET = "https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token={access_token}&userid={userid}";
+
+ /**
+ * 获取access_token
+ */
+ public static final String GET_SUITE_TOKEN = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={appid}&secret={secret}";
+
+
+ /**
+ * 扫码登陆回调地址
+ */
+ public static final String QR_REDIRECT_URL = "http://massadmin.youkehulian.com";
+}
diff --git a/src/main/resources/application-dev.properties b/src/main/resources/application-dev.properties
new file mode 100644
index 0000000..ac73d71
--- /dev/null
+++ b/src/main/resources/application-dev.properties
@@ -0,0 +1,69 @@
+# 本地环境配置
+spring.server.port=23502
+
+# 数据源配置
+#spring.datasource.url=jdbc:mysql://116.62.57.92:3306/subsidy_test?autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
+##spring.datasource.url=jdbc:mysql://rm-uf6rab73w0qg843opxo.mysql.rds.aliyuncs.com:3306/subsidy_test?autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
+#spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
+#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
+##spring.datasource.username=ykadmin_new
+##spring.datasource.password=youkedb608@good
+#spring.datasource.username=devloper
+#spring.datasource.password=dev@1553$
+
+# 数据源配置
+spring.datasource.url=jdbc:mysql://139.224.253.21:3306/subsidy?autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
+spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
+spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
+spring.datasource.username=root
+spring.datasource.password=ykhladmin302
+
+spring.datasource.druid.initialSize=5
+spring.datasource.druid.minIdle=5
+spring.datasource.druid.maxActive=200
+spring.datasource.druid.maxWait=60000
+spring.datasource.druid.timeBetweenEvictionRunsMillis=60000
+spring.datasource.druid.minEvictableIdleTimeMillis=300000
+spring.datasource.druid.validationQuery=SELECT 1 FROM DUAL
+spring.datasource.druid.testWhileIdle=true
+spring.datasource.druid.testOnBorrow=false
+spring.datasource.druid.testOnReturn=false
+spring.datasource.druid.poolPreparedStatements=true
+spring.datasource.druid.maxPoolPreparedStatementPerConnectionSize=20
+spring.datasource.druid.useGlobalDataSourceStat=true
+
+# 控制台日志打印
+mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
+
+#spring.redis.host=r-uf6meywj6ysuehg148pd.redis.rds.aliyuncs.com
+#spring.redis.password=r-uf6meywj6ysuehg148:Ykhl@208
+#spring.redis.port=6379
+#spring.redis.lettuce.pool.max-idle=16
+#spring.redis.lettuce.pool.max-active=32
+#spring.redis.lettuce.pool.min-idle=8
+
+#spring.application.name=spring-boot-mongodb
+## mongodb
+##spring.data.mongodb.uri=mongodb://47.97.19.66:27017/subsidy
+#spring.data.mongodb.username=root
+#spring.data.mongodb.password=123456
+##spring.data.mongodb.authentication-database=subsidy
+#spring.data.mongodb.database=subsidy
+#spring.data.mongodb.host=47.97.19.66
+#spring.data.mongodb.port=27017
+
+spring.redis.host=47.97.19.66
+spring.redis.password=Ykhl@208
+spring.redis.port=6389
+spring.redis.lettuce.pool.max-idle=16
+spring.redis.lettuce.pool.max-active=32
+spring.redis.lettuce.pool.min-idle=8
+
+qxueyou.appId=qxywz5nnWMI77CM3Tx
+qxueyou.securityKey=626737T1-65K0-5xC2-0Y0V-2Aq95qxy
+qxueyou.url=https://dev.qxueyou.com/auth/user/token
+
+renshe.url = https://test.shzypxy.com
+renshe.secretKey = ad927f0b-6a39-43a7-bac7-163baef1fff7
+renshe.putuo = http://180.167.195.117:18015/ddproject
+
diff --git a/src/main/resources/application-prod.properties b/src/main/resources/application-prod.properties
new file mode 100644
index 0000000..ba56839
--- /dev/null
+++ b/src/main/resources/application-prod.properties
@@ -0,0 +1,53 @@
+# 生产环境配置
+spring.server.port=23502
+
+# 数据源配置
+spring.datasource.url=jdbc:mysql://rm-uf69w46mo6agw0ahao.mysql.rds.aliyuncs.com:3306/subsidy?autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
+spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
+spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
+spring.datasource.username=ykadmin_new
+spring.datasource.password=youkedb608@good
+
+spring.datasource.druid.initialSize=5
+spring.datasource.druid.minIdle=5
+spring.datasource.druid.maxActive=20
+spring.datasource.druid.maxWait=60000
+spring.datasource.druid.timeBetweenEvictionRunsMillis=60000
+spring.datasource.druid.minEvictableIdleTimeMillis=300000
+spring.datasource.druid.validationQuery=SELECT 1 FROM DUAL
+spring.datasource.druid.testWhileIdle=true
+spring.datasource.druid.testOnBorrow=false
+spring.datasource.druid.testOnReturn=false
+spring.datasource.druid.poolPreparedStatements=true
+spring.datasource.druid.maxPoolPreparedStatementPerConnectionSize=20
+spring.datasource.druid.useGlobalDataSourceStat=true
+spring.datasource.druid.kill-when-socket-read-timeout=true
+# 控制台日志打印
+mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
+
+#wechat.appId= wx7785293ff5e31f14
+#wechat.appSecret= 25d57cad61fc1b45b3afa46d4c35e8f6
+#wechat.msgUrl= https://teachai.youkehulian.com/login
+#wechat.templateId= Z1HNPLOrKiHEjfR1KMP-cC-uH3BWqDJIHv365Ev20yQ
+
+#spring.redis.cluster.nodes=47.97.19.66:6377,47.97.19.66:6378,47.97.16.66:6379
+#spring.redis.password=Ykhl@208
+#spring.redis.lettuce.pool.max-idle=16
+#spring.redis.lettuce.pool.max-active=32
+#spring.redis.lettuce.pool.min-idle=8
+
+spring.redis.host=sh-crs-hq5xbrsq.sql.tencentcdb.com
+spring.redis.password=Ykhl@302
+spring.redis.port=20260
+spring.redis.lettuce.pool.max-idle=16
+spring.redis.lettuce.pool.max-active=32
+spring.redis.lettuce.pool.min-idle=8
+
+qxueyou.appId=qxy1a2n6h16012nJ6x
+qxueyou.securityKey=44420Tlu-P463-9041-2h1q-29Z59qxy
+qxueyou.url=https://www.qxueyou.com/auth/user/token
+
+renshe.url = https://api.shzypxy.com
+#renshe.url = http://trial.shzypxy.com/api
+renshe.secretKey = ad927f0b-6a39-43a7-bac7-163baef1fff7
+renshe.putuo = http://180.167.195.117:18025/ddproject
\ No newline at end of file
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
new file mode 100644
index 0000000..8f767e5
--- /dev/null
+++ b/src/main/resources/application.properties
@@ -0,0 +1,84 @@
+# 环境配置 服务端
+spring.profiles.active=prod
+#和CPU数
+spring.server.acceptorThreadCount=600
+spring.server.minSpareThreads=100
+spring.server.maxSpareThreads=500
+spring.server.maxThreads=500
+spring.server.maxConnections=1000
+#10秒超时
+spring.server.connectionTimeout=20000
+spring.server.protocol=org.apache.coyote.http11.Http11AprProtocol
+spring.server.redirectPort=8443
+spring.server.compression=on
+#文件请求大小
+spring.server.MaxFileSize=300MB
+spring.server.MaxRequestSize=500MB
+spring.servlet.multipart.max-file-size=100MB
+spring.servlet.multipart.max-request-size=50MB
+# 文件编码 UTF8
+spring.mandatory-file-encoding=UTF-8
+spring.jackson.time-zone=GMT+8
+# 404 交给异常处理器处理
+spring.mvc.throw-exception-if-no-handler-found=true
+# 关闭静态资源的映射
+spring.resources.add-mappings=false
+# 关闭banner打印
+mybatis-plus.global-config.banner=false
+# mybatis-plus相关配置
+mybatis-plus.mapper-locations=classpath:mapper/*.xml
+# 是否开启自动驼峰命名规则映射
+mybatis-plus.configuration.map-underscore-to-camel-case=true
+# 如果查询结果中包含空值的列,则 MyBatis 在映射的时候,不会映射这个字段
+mybatis-plus.configuration.call-setters-on-nulls=true
+# 逻辑删除
+mybatis-plus.global-config.db-config.logic-delete-value=NOW()
+mybatis-plus.global-config.db-config.logic-not-delete-value=NULL
+#日志配置
+logging.config=classpath:logback-spring.xml
+#ehcache缓存配置
+spring.cache.type=ehcache
+spring.cache.ehcache.config=classpath:ehcache.xml
+# 阿里云短信
+sms.product=Dysmsapi
+sms.domain=dysmsapi.aliyuncs.com
+sms.accessKeyId=LTAI5tPAH7P7WQVeowo517BE
+sms.accessKeySecret=0ueqhIfdAZyw5lWlBVSLpAxTtx37RY
+#wechat.app-id=wx7785293ff5e31f14
+#wechat.app-secret=25d57cad61fc1b45b3afa46d4c35e8f6
+#wechat.agentId=1000008
+vod.appId=1302252447
+vod.secretId=AKIDOcePHvZ2C5VeYHQGSO5aqtlNxJQLqfz2
+vod.secretKey=vjHYRmrfDbw0rWxA7oFcj7F8lDPKCm8E
+vod.api=vod.tencentcloudapi.com
+vod.region=ap-shanghai
+vod.classId=848920
+# quartz
+# 数据持久化方式
+spring.quartz.job-store-type=jdbc
+# 初始化后是否自动启动计划程序
+spring.quartz.auto-startup=true
+# 初始化完成后启动计划程序的延迟时间
+spring.quartz.startup-delay=10s
+# 配置的作业是否应覆盖现有的作业定义
+spring.quartz.overwrite-existing-jobs=false
+# 自动建表,如果已经存在表请勿使用,会覆盖数据表
+#spring.quartz.jdbc.initialize-schema=always
+#spring.datasource.initialization-mode=embedded
+#spring.redis.host=r-uf6m4cpkjrgpzywjm3pd.redis.rds.aliyuncs.com
+#spring.redis.port=6379
+#spring.redis.password=r-uf6m4cpkjrgpzywjm3:Ykhl@208
+wechat=
+#pro
+appId=wx5e1ecb9c9bd33451
+appSecret=4f5e1abb6fb4f68f5273820b6295ec6b
+
+#保利威视
+polyv.userId=b8f2d3bfdc
+polyv.appId=g3lrxnzd75
+polyv.appSecret=ef9cdcbbb9184b61aca301ba8114d570
+polyv.secretKey=03sqxr97fo
+
+subsidy.appId=qxywz5nnWMI7ABCS
+subsidy.securityKey=626737T1-65K0-5xC2-0Y0V-2Aq9QUAJ
+subsidy.url=http://subsidy.youkehulian.cn/auth/user/token
\ No newline at end of file
diff --git a/src/main/resources/code.properties b/src/main/resources/code.properties
new file mode 100644
index 0000000..fae04f0
--- /dev/null
+++ b/src/main/resources/code.properties
@@ -0,0 +1,87 @@
+meishu.code-message[0]=成功
+
+meishu.code-message[1010]=无效的令牌
+meishu.code-message[1011]=当前账户已在其他设备登录
+meishu.code-message[1012]=你已掉线,请重新登录
+
+meishu.code-message[10003]=验证码错误
+meishu.code-message[10004]=账号或密码错误
+meishu.code-message[10010]=学生信息不存在
+meishu.code-message[10011]=成员信息不存在
+meishu.code-message[10012]=该账号不存在
+meishu.code-message[10013]=账户已冻结,请联系账户管理员
+meishu.code-message[10014]=该成员已存在,请勿重复添加
+meishu.code-message[10015]=首次登录请使用验证码登录
+meishu.code-message[10016]=密码输入错误,请稍后再试
+meishu.code-message[10017]=该公司不存在该员工
+meishu.code-message[10021]=密码输入错误,您还可以输入1次密码
+meishu.code-message[10022]=密码输入错误,您还可以输入2次密码
+meishu.code-message[10023]=密码输入错误,您还可以输入3次密码
+meishu.code-message[10024]=密码输入错误,您还可以输入4次密码
+meishu.code-message[10025]=身份证识别错误
+meishu.code-message[10026]=姓名或身份证号格式不正确
+meishu.code-message[10027]=该手机号已注册
+meishu.code-message[10028]=该成员已在其他公司入职
+meishu.code-message[10029]=密码输入错误
+meishu.code-message[10030]=该账号未被授权
+
+
+meishu.code-message[20001]=该课程已存在
+meishu.code-message[20002]=该成员已存在
+
+meishu.code-message[30001]=该部门已存在
+
+meishu.code-message[40001]=该目录已存在
+
+meishu.code-message[50001]=该试卷已存在
+
+meishu.code-message[60001]=已超过最大测试次数
+
+
+meishu.code-message[70010]=验证码错误
+meishu.code-message[70011]=验证码发送频繁
+meishu.code-message[70012]=手机号未注册
+meishu.code-message[70013]=您今天已报名了同类型的场次
+meishu.code-message[70014]=取消报名失败
+
+meishu.code-message[80001]=uuid已过期
+meishu.code-message[80002]=uuid验证失败
+
+meishu.code-message[90001]=该类目已存在
+
+meishu.code-message[10001]=导入失败
+
+meishu.code-message[11001]=该行业已存在
+
+meishu.code-message[70001]=添加通知失败,通知时间不能小于一小时
+meishu.code-message[70002]=定时任务创建失败
+meishu.code-message[70003]=定时任务删除失败
+
+meishu.code-message[12001]=该职级已存在
+
+meishu.code-message[13001]=已达到当日最大时长
+
+meishu.code-message[14001]=认证失败,签名不通过
+meishu.code-message[14002]=认证失败,签名已过期
+
+meishu.code-message[15001]=类型已存在
+meishu.code-message[15002]=类型已存在证书,删除失败
+
+meishu.code-message[16001]=该条件已存在
+
+
+meishu.code-message[17001]=系统不支持23:30:00~06:00:00学习
+
+
+meishu.code-message[18001]=已超过当日验证次数上线
+
+
+meishu.code-message[19001]=验证失败
+
+meishu.code-message[20003]=提交时间过短,请稍后尝试
+
+meishu.code-message[30002]=该产品已存在
+meishu.code-message[31001]=该类别已存在
+meishu.code-message[31002]=该项目已存在
+meishu.code-message[31003]=该群组已存在
+meishu.code-message[31004]=该群组下还有成员,无法删除
\ No newline at end of file
diff --git a/src/main/resources/ehcache.xml b/src/main/resources/ehcache.xml
new file mode 100644
index 0000000..7a297bc
--- /dev/null
+++ b/src/main/resources/ehcache.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml
new file mode 100644
index 0000000..0006c90
--- /dev/null
+++ b/src/main/resources/logback-spring.xml
@@ -0,0 +1,74 @@
+
+
+
+
+ ${APP_NAME}
+
+
+
+
+ info
+
+
+ %d [%t] %5p %c:%L - %m%n
+ UTF-8
+
+
+
+ ${LOG_PATH}${APP_NAME}-info.log
+
+ %d [%t] %5p %c:%L - %m%n
+
+
+
+ 100MB
+
+ ${LOG_PATH}${APP_NAME}/info/%d{yyyy-MM-dd}-%i.log.gz
+
+ 30
+
+
+
+ ${LOG_PATH}${APP_NAME}-error.log
+
+ error
+
+
+ %d [%t] %5p %c:%L - %m%n
+
+
+
+ 256MB
+
+ ${LOG_PATH}${APP_NAME}/error/%d{yyyy-MM-dd}-%i.log.gz
+
+ 180
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/mapper/AdministerLaborMappingMapper.xml b/src/main/resources/mapper/AdministerLaborMappingMapper.xml
new file mode 100644
index 0000000..6851515
--- /dev/null
+++ b/src/main/resources/mapper/AdministerLaborMappingMapper.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ create_date,
+ update_date,
+ delete_date,
+ id, administer_id, labor_id
+
+
+
diff --git a/src/main/resources/mapper/AdministerMapper.xml b/src/main/resources/mapper/AdministerMapper.xml
new file mode 100644
index 0000000..31f61b5
--- /dev/null
+++ b/src/main/resources/mapper/AdministerMapper.xml
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/mapper/GroupMemberMappingMapper.xml b/src/main/resources/mapper/GroupMemberMappingMapper.xml
new file mode 100644
index 0000000..dd4645f
--- /dev/null
+++ b/src/main/resources/mapper/GroupMemberMappingMapper.xml
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/mapper/LaborGroupDictMapper.xml b/src/main/resources/mapper/LaborGroupDictMapper.xml
new file mode 100644
index 0000000..1502c27
--- /dev/null
+++ b/src/main/resources/mapper/LaborGroupDictMapper.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/mapper/LaborServiceDictMapper.xml b/src/main/resources/mapper/LaborServiceDictMapper.xml
new file mode 100644
index 0000000..fc31369
--- /dev/null
+++ b/src/main/resources/mapper/LaborServiceDictMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/main/resources/mapper/MemberMapper.xml b/src/main/resources/mapper/MemberMapper.xml
new file mode 100644
index 0000000..a023f99
--- /dev/null
+++ b/src/main/resources/mapper/MemberMapper.xml
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/mapper/ProductDictMapper.xml b/src/main/resources/mapper/ProductDictMapper.xml
new file mode 100644
index 0000000..d05bace
--- /dev/null
+++ b/src/main/resources/mapper/ProductDictMapper.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
diff --git a/src/main/resources/mapper/ProjectMapper.xml b/src/main/resources/mapper/ProjectMapper.xml
new file mode 100644
index 0000000..7d9def8
--- /dev/null
+++ b/src/main/resources/mapper/ProjectMapper.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ create_date,
+ update_date,
+ delete_date,
+ id, project_name, company_id, labor_service_id, salary_date, start_date, end_date
+
+
+
diff --git a/src/main/resources/mapper/ProjectMemberMappingMapper.xml b/src/main/resources/mapper/ProjectMemberMappingMapper.xml
new file mode 100644
index 0000000..d7d17f4
--- /dev/null
+++ b/src/main/resources/mapper/ProjectMemberMappingMapper.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/src/main/resources/mapper/ProjectSalaryHistoryMapper.xml b/src/main/resources/mapper/ProjectSalaryHistoryMapper.xml
new file mode 100644
index 0000000..c397f2f
--- /dev/null
+++ b/src/main/resources/mapper/ProjectSalaryHistoryMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/main/resources/mapper/ServiceAdministerMappingMapper.xml b/src/main/resources/mapper/ServiceAdministerMappingMapper.xml
new file mode 100644
index 0000000..fdeff34
--- /dev/null
+++ b/src/main/resources/mapper/ServiceAdministerMappingMapper.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ create_date,
+ update_date,
+ delete_date,
+ id, administer_id, service_id
+
+
+
diff --git a/src/main/resources/mapper/ServiceDictMapper.xml b/src/main/resources/mapper/ServiceDictMapper.xml
new file mode 100644
index 0000000..2417566
--- /dev/null
+++ b/src/main/resources/mapper/ServiceDictMapper.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ create_date,
+ update_date,
+ delete_date,
+ id, service_name
+
+
+
diff --git a/src/main/resources/mapper/SmsVerifyCodeMapper.xml b/src/main/resources/mapper/SmsVerifyCodeMapper.xml
new file mode 100644
index 0000000..76cd02e
--- /dev/null
+++ b/src/main/resources/mapper/SmsVerifyCodeMapper.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/src/main/resources/mybatis-plus.properties b/src/main/resources/mybatis-plus.properties
new file mode 100644
index 0000000..bb9710a
--- /dev/null
+++ b/src/main/resources/mybatis-plus.properties
@@ -0,0 +1,12 @@
+# 此处为本项目src所在路径(代码生成器输出路径)
+outputDir=/src/main/java
+author=Tuyp
+# 父的包名
+setParent=com.subsidy
+# mapper.xml文件生成路径
+mapperPath=/src/main/resources/mapper/
+# 数据库地址
+url=jdbc:mysql://139.224.253.21:3306/subsidy?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false&allowMultiQueries=true&useAffectedRows=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
+driverName=com.mysql.cj.jdbc.Driver
+userName=root
+password=ykhladmin302
\ No newline at end of file
diff --git a/src/main/resources/mybatis.xml b/src/main/resources/mybatis.xml
new file mode 100644
index 0000000..f4495b4
--- /dev/null
+++ b/src/main/resources/mybatis.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/templates/controller.java.ftl b/src/main/resources/templates/controller.java.ftl
new file mode 100644
index 0000000..28e7070
--- /dev/null
+++ b/src/main/resources/templates/controller.java.ftl
@@ -0,0 +1,41 @@
+package ${package.Controller};
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+<#if restControllerStyle>
+import org.springframework.web.bind.annotation.RestController;
+<#else>
+import org.springframework.stereotype.Controller;
+#if>
+<#if superControllerClassPackage??>
+import ${superControllerClassPackage};
+#if>
+import io.swagger.annotations.Api;
+
+/**
+ *
+ * ${table.comment!} 前端控制器
+ *
+ *
+ * @author ${author}
+ * @since ${date}
+ */
+<#if restControllerStyle>
+@RestController
+@Api(tags = "${table.comment!}")
+<#else>
+@Controller
+#if>
+@RequestMapping("<#if package.ModuleName?? && package.ModuleName != "">/${package.ModuleName}#if>/<#if controllerMappingHyphenStyle??>${controllerMappingHyphen}<#else>${table.entityPath}#if>")
+<#if kotlin>
+class ${table.controllerName}<#if superControllerClass??> : ${superControllerClass}()#if>
+<#else>
+<#if superControllerClass??>
+public class ${table.controllerName} extends ${superControllerClass} {
+<#else>
+public class ${table.controllerName} {
+#if>
+
+}
+#if>
diff --git a/src/main/resources/templates/entity.java.ftl b/src/main/resources/templates/entity.java.ftl
new file mode 100644
index 0000000..c63bcc4
--- /dev/null
+++ b/src/main/resources/templates/entity.java.ftl
@@ -0,0 +1,156 @@
+package ${package.Entity};
+
+<#list table.importPackages as pkg>
+import ${pkg};
+#list>
+<#if swagger2>
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+#if>
+<#if entityLombokModel>
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+ <#if chainModel>
+import lombok.experimental.Accessors;
+ #if>
+#if>
+
+/**
+ *
+ * ${table.comment!}
+ *
+ *
+ * @author ${author}
+ * @since ${date}
+ */
+<#if entityLombokModel>
+@Data
+ <#if superEntityClass??>
+@EqualsAndHashCode(callSuper = true)
+ <#else>
+@EqualsAndHashCode(callSuper = false)
+ #if>
+ <#if chainModel>
+@Accessors(chain = true)
+ #if>
+#if>
+<#if table.convert>
+@TableName("${table.name}")
+#if>
+<#if swagger2>
+@ApiModel(value="${entity}对象", description="${table.comment!}")
+#if>
+<#if superEntityClass??>
+public class ${entity} extends ${superEntityClass}<#if activeRecord><${entity}>#if> {
+<#elseif activeRecord>
+public class ${entity} extends Model<${entity}> {
+<#else>
+public class ${entity} implements Serializable {
+#if>
+
+<#if entitySerialVersionUID>
+ private static final long serialVersionUID = 1L;
+#if>
+<#-- ---------- BEGIN 字段循环遍历 ---------->
+<#list table.fields as field>
+ <#if field.keyFlag>
+ <#assign keyPropertyName="${field.propertyName}"/>
+ #if>
+
+ <#if field.comment!?length gt 0>
+ <#if swagger2>
+ @ApiModelProperty(value = "${field.comment}")
+ <#else>
+ /**
+ * ${field.comment}
+ */
+ #if>
+ #if>
+ <#if field.keyFlag>
+ <#-- 主键 -->
+ <#if field.keyIdentityFlag>
+ @TableId(value = "${field.annotationColumnName}", type = IdType.AUTO)
+ <#elseif idType??>
+ @TableId(value = "${field.annotationColumnName}", type = IdType.${idType})
+ <#elseif field.convert>
+ @TableId("${field.annotationColumnName}")
+ #if>
+ <#-- 普通字段 -->
+ <#elseif field.fill??>
+ <#-- ----- 存在字段填充设置 ----->
+ <#if field.convert>
+ @TableField(value = "${field.annotationColumnName}", fill = FieldFill.${field.fill})
+ <#else>
+ @TableField(fill = FieldFill.${field.fill})
+ #if>
+ <#elseif field.convert>
+ @TableField("${field.annotationColumnName}")
+ #if>
+ <#-- 乐观锁注解 -->
+ <#if (versionFieldName!"") == field.name>
+ @Version
+ #if>
+ <#-- 逻辑删除注解 -->
+ <#if (logicDeleteFieldName!"") == field.name>
+ @TableLogic
+ #if>
+ private ${field.propertyType} ${field.propertyName};
+#list>
+<#------------ END 字段循环遍历 ---------->
+
+<#if !entityLombokModel>
+ <#list table.fields as field>
+ <#if field.propertyType == "boolean">
+ <#assign getprefix="is"/>
+ <#else>
+ <#assign getprefix="get"/>
+ #if>
+ public ${field.propertyType} ${getprefix}${field.capitalName}() {
+ return ${field.propertyName};
+ }
+
+ <#if chainModel>
+ public ${entity} set${field.capitalName}(${field.propertyType} ${field.propertyName}) {
+ <#else>
+ public void set${field.capitalName}(${field.propertyType} ${field.propertyName}) {
+ #if>
+ this.${field.propertyName} = ${field.propertyName};
+ <#if chainModel>
+ return this;
+ #if>
+ }
+ #list>
+#if>
+
+<#if entityColumnConstant>
+ <#list table.fields as field>
+ public static final String ${field.name?upper_case} = "${field.name}";
+
+ #list>
+#if>
+<#if activeRecord>
+ @Override
+ protected Serializable pkVal() {
+ <#if keyPropertyName??>
+ return this.${keyPropertyName};
+ <#else>
+ return null;
+ #if>
+ }
+
+#if>
+<#if !entityLombokModel>
+ @Override
+ public String toString() {
+ return "${entity}{" +
+ <#list table.fields as field>
+ <#if field_index==0>
+ "${field.propertyName}=" + ${field.propertyName} +
+ <#else>
+ ", ${field.propertyName}=" + ${field.propertyName} +
+ #if>
+ #list>
+ "}";
+ }
+#if>
+}
diff --git a/src/main/resources/templates/mapper.java.ftl b/src/main/resources/templates/mapper.java.ftl
new file mode 100644
index 0000000..be08c59
--- /dev/null
+++ b/src/main/resources/templates/mapper.java.ftl
@@ -0,0 +1,22 @@
+package ${package.Mapper};
+
+import ${package.Entity}.${entity};
+import ${superMapperClassPackage};
+import org.springframework.stereotype.Repository;
+
+/**
+ *
+ * ${table.comment!} Mapper 接口
+ *
+ *
+ * @author ${author}
+ * @since ${date}
+ */
+<#if kotlin>
+interface ${table.mapperName} : ${superMapperClass}<${entity}>
+<#else>
+ @Repository
+public interface ${table.mapperName} extends ${superMapperClass}<${entity}> {
+
+}
+#if>
diff --git a/src/main/resources/templates/mapper.xml.ftl b/src/main/resources/templates/mapper.xml.ftl
new file mode 100644
index 0000000..04c2359
--- /dev/null
+++ b/src/main/resources/templates/mapper.xml.ftl
@@ -0,0 +1,39 @@
+
+
+
+
+<#if enableCache>
+
+
+
+#if>
+<#if baseResultMap>
+
+
+<#list table.fields as field>
+<#if field.keyFlag><#--生成主键排在第一位-->
+
+#if>
+#list>
+<#list table.commonFields as field><#--生成公共字段 -->
+
+#list>
+<#list table.fields as field>
+<#if !field.keyFlag><#--生成普通字段 -->
+
+#if>
+#list>
+
+
+#if>
+<#if baseColumnList>
+
+
+<#list table.commonFields as field>
+ ${field.columnName},
+#list>
+ ${table.fieldNames}
+
+
+#if>
+
diff --git a/src/main/resources/templates/service.java.ftl b/src/main/resources/templates/service.java.ftl
new file mode 100644
index 0000000..e3232f3
--- /dev/null
+++ b/src/main/resources/templates/service.java.ftl
@@ -0,0 +1,20 @@
+package ${package.Service};
+
+import ${package.Entity}.${entity};
+import ${superServiceClassPackage};
+
+/**
+ *
+ * ${table.comment!} 服务类
+ *
+ *
+ * @author ${author}
+ * @since ${date}
+ */
+<#if kotlin>
+interface ${table.serviceName} : ${superServiceClass}<${entity}>
+<#else>
+public interface ${table.serviceName} extends ${superServiceClass}<${entity}> {
+
+}
+#if>
diff --git a/src/main/resources/templates/serviceImpl.java.ftl b/src/main/resources/templates/serviceImpl.java.ftl
new file mode 100644
index 0000000..aeebd14
--- /dev/null
+++ b/src/main/resources/templates/serviceImpl.java.ftl
@@ -0,0 +1,26 @@
+package ${package.ServiceImpl};
+
+import ${package.Entity}.${entity};
+import ${package.Mapper}.${table.mapperName};
+import ${package.Service}.${table.serviceName};
+import ${superServiceImplClassPackage};
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ * ${table.comment!} 服务实现类
+ *
+ *
+ * @author ${author}
+ * @since ${date}
+ */
+@Service
+<#if kotlin>
+open class ${table.serviceImplName} : ${superServiceImplClass}<${table.mapperName}, ${entity}>(), ${table.serviceName} {
+
+}
+<#else>
+public class ${table.serviceImplName} extends ${superServiceImplClass}<${table.mapperName}, ${entity}> implements ${table.serviceName} {
+
+}
+#if>