commit 92b683a7a4b99c05e02fbdb2858c71abb71d7100 Author: XinYi Song <2037158277@qq.com> Date: Sat Feb 12 08:48:57 2022 +0800 工业测量 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..549e00a --- /dev/null +++ b/.gitignore @@ -0,0 +1,33 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ diff --git a/.mvn/wrapper/maven-wrapper.jar b/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000..c1dd12f Binary files /dev/null and b/.mvn/wrapper/maven-wrapper.jar differ diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000..d8bc321 --- /dev/null +++ b/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,2 @@ +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.3/apache-maven-3.8.3-bin.zip +wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar diff --git a/mvnw b/mvnw new file mode 100644 index 0000000..8a8fb22 --- /dev/null +++ b/mvnw @@ -0,0 +1,316 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /usr/local/etc/mavenrc ] ; then + . /usr/local/etc/mavenrc + fi + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + export JAVA_HOME="`/usr/libexec/java_home`" + else + export JAVA_HOME="/Library/Java/Home" + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`\\unset -f command; \\command -v java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=`cd "$wdir/.."; pwd` + fi + # end of workaround + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=`find_maven_basedir "$(pwd)"` +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." + fi + if [ -n "$MVNW_REPOURL" ]; then + jarUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" + else + jarUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" + fi + while IFS="=" read key value; do + case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + esac + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Downloading from: $jarUrl" + fi + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + if $cygwin; then + wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` + fi + + if command -v wget > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" + else + wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" + fi + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl -o "$wrapperJarPath" "$jarUrl" -f + else + curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f + fi + + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + # For Cygwin, switch paths to Windows format before running javac + if $cygwin; then + javaClass=`cygpath --path --windows "$javaClass"` + fi + if [ -e "$javaClass" ]; then + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaClass") + fi + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + $MAVEN_DEBUG_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" \ + "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/mvnw.cmd b/mvnw.cmd new file mode 100644 index 0000000..1d8ab01 --- /dev/null +++ b/mvnw.cmd @@ -0,0 +1,188 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM https://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %* +if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %* +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" + +FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET DOWNLOAD_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% ^ + %JVM_CONFIG_MAVEN_PROPS% ^ + %MAVEN_OPTS% ^ + %MAVEN_DEBUG_OPTS% ^ + -classpath %WRAPPER_JAR% ^ + "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^ + %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat" +if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%"=="on" pause + +if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE% + +cmd /C exit /B %ERROR_CODE% diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..2458a4b --- /dev/null +++ b/pom.xml @@ -0,0 +1,171 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.6.2 + + + com.xkrs + WordAndExcel + 0.0.1-SNAPSHOT + WordAndExcel + Demo project for Spring Boot + + + 5.19 + 6.1.5.Final + 5.4.20.Final + UTF-8 + UTF-8 + 11 + 11 + 11 + 1.2.76 + 2.10.5 + 2.10.5 + 4.5.2 + 4.4.3 + + + + + org.springframework.boot + spring-boot-starter-aop + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-actuator + + + org.springframework.boot + spring-boot-devtools + true + + + org.springframework.boot + spring-boot-starter-data-jpa + + + org.springframework.boot + spring-boot-starter-webflux + + + org.springframework.boot + spring-boot-starter + + + org.springframework.boot + spring-boot-starter-logging + + + + + + org.springframework.boot + spring-boot-starter-log4j2 + + + org.apache.commons + commons-pool2 + + + + mysql + mysql-connector-java + + + nl.basjes.parse.useragent + yauaa + ${yauaa.version} + + + org.hibernate.validator + hibernate-validator + ${hibernate-validator.version} + + + org.hibernate + hibernate-spatial + ${hibernate-spatial.version} + + + com.alibaba + fastjson + ${fastjson.version} + + + + + io.springfox + springfox-swagger-ui + ${springfox-swagger-ui.version} + + + + io.springfox + springfox-swagger2 + ${springfox-swagger2.version} + + + + net.sf.json-lib + json-lib + 2.4 + jdk15 + + + org.apache.httpcomponents + httpclient + ${httpclient.version} + + + cn.hutool + hutool-all + ${hutool-all.version} + + + + + + net.sf.jxls + jxls-core + 1.0.3 + + + + + org.apache.tomcat + servlet-api + 6.0.35 + + + + + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/src/main/java/com/xkrs/WordAndExcelApplication.java b/src/main/java/com/xkrs/WordAndExcelApplication.java new file mode 100644 index 0000000..a11963d --- /dev/null +++ b/src/main/java/com/xkrs/WordAndExcelApplication.java @@ -0,0 +1,13 @@ +package com.xkrs; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class WordAndExcelApplication { + + public static void main(String[] args) { + SpringApplication.run(WordAndExcelApplication.class, args); + } + +} diff --git a/src/main/java/com/xkrs/config/CorsConfig.java b/src/main/java/com/xkrs/config/CorsConfig.java new file mode 100644 index 0000000..4ddeebe --- /dev/null +++ b/src/main/java/com/xkrs/config/CorsConfig.java @@ -0,0 +1,23 @@ +package com.xkrs.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +import javax.annotation.Resource; + +/** + * 系统跨域配置 + * @author tajochen + */ +@Configuration +public class CorsConfig implements WebMvcConfigurer { + + @Resource + private CorsInterceptor corsInterceptor; + + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(corsInterceptor); + } +} diff --git a/src/main/java/com/xkrs/config/CorsInterceptor.java b/src/main/java/com/xkrs/config/CorsInterceptor.java new file mode 100644 index 0000000..03b7d22 --- /dev/null +++ b/src/main/java/com/xkrs/config/CorsInterceptor.java @@ -0,0 +1,29 @@ +package com.xkrs.config; + +import org.springframework.stereotype.Component; +import org.springframework.web.servlet.HandlerInterceptor; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * 跨域处理 + * @author tajochen + */ +@Component +public class CorsInterceptor implements HandlerInterceptor { + + @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { + + //添加跨域CORS + response.setHeader("Access-Control-Allow-Origin", "*"); + response.setHeader("Access-Control-Allow-Credentials", "false"); + response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS"); + response.setHeader("Access-Control-Allow-Headers", "Content-Type , Authorization," + + "Accept,Origin,X-Requested-With"); + response.setHeader("Access-Control-Max-Age", "216000"); + response.setHeader("Content-Type","application/json;charset=UTF-8"); + return true; + } +} + diff --git a/src/main/java/com/xkrs/config/MvcConfig.java b/src/main/java/com/xkrs/config/MvcConfig.java new file mode 100644 index 0000000..b83b8e4 --- /dev/null +++ b/src/main/java/com/xkrs/config/MvcConfig.java @@ -0,0 +1,37 @@ +package com.xkrs.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.TaskScheduler; +import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +/** + * WebMVC配置 + * @author Tajochen + */ +@Configuration +public class MvcConfig implements WebMvcConfigurer { + + /** + * 放行跨域请求 + */ + @Override + public void addCorsMappings(CorsRegistry registry) { + registry.addMapping("/**") + .allowedOrigins("*") + .allowedMethods("*") + .allowedHeaders("*"); + } + + /** + * 定时任务线程池更改,防止多个任务并行 + */ + @Bean + public TaskScheduler taskScheduler() { + final ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler(); + scheduler.setPoolSize(5); + return scheduler; + } +} diff --git a/src/main/java/com/xkrs/controller/DataDictController.java b/src/main/java/com/xkrs/controller/DataDictController.java new file mode 100644 index 0000000..f1df2d8 --- /dev/null +++ b/src/main/java/com/xkrs/controller/DataDictController.java @@ -0,0 +1,87 @@ +package com.xkrs.controller; + +import com.xkrs.dao.DataDictDao; +import com.xkrs.encapsulation.PromptMessageEnum; +import com.xkrs.model.entity.DataDict; +import com.xkrs.model.qo.DataDictQo; +import com.xkrs.model.qo.DataDictUpdateQo; +import com.xkrs.service.DataDictService; +import com.xkrs.util.Query; +import org.springframework.context.i18n.LocaleContextHolder; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.transaction.Transactional; +import java.util.List; +import java.util.Locale; + +import static com.xkrs.encapsulation.OutputEncapsulation.outputEncapsulationObject; + +/** + * @Author: XinYi Song + * @Date: 2022/1/19 10:54 + */ +@RestController +public class DataDictController { + + @Resource + private DataDictService dataDictService; + + @Resource + private DataDictDao dataDictDao; + + @Resource + private Query query; + + /** + * 添加字典变量数据 + * @param dataDictQo + * @return + */ + @PostMapping("/insertDataDict") + public String insertDataDict(@RequestBody DataDictQo dataDictQo){ + return dataDictService.insertDataDict(dataDictQo); + } + + /** + * 动态多条件查询字典信息 + * @param dictChineseName + * @param dictEnglishName + * @return + */ + @GetMapping("/selectDataDict") + public String selectDataDict(@RequestParam("dictChineseName") String dictChineseName, + @RequestParam("dictEnglishName") String dictEnglishName){ + Locale locale = LocaleContextHolder.getLocale(); + List dataDict = query.selectDataDict(dictChineseName, dictEnglishName); + if(dataDict == null || dataDict.size() == 0){ + return outputEncapsulationObject(PromptMessageEnum.DATA_NONE,"暂时还没有该型号类型的字典信息!",locale); + } + return outputEncapsulationObject(PromptMessageEnum.SUCCESS,dataDict,locale); + } + + /** + * 根据id查询字典信息,用于数据回显,方便进行修改操作 + * @param id + * @return + */ + @GetMapping("/selectDataDictById") + public String selectDataDictById(@RequestParam("id") Integer id){ + Locale locale = LocaleContextHolder.getLocale(); + DataDict dataDict = dataDictDao.findById(id); + return outputEncapsulationObject(PromptMessageEnum.SUCCESS,dataDict,locale); + } + + /** + * 根据id修改字典信息 + * @param dataDictUpdateQo + * @return + */ + @PostMapping("/updateDict") + @Transactional(rollbackOn = Exception.class) + public String updateDict(@RequestBody DataDictUpdateQo dataDictUpdateQo){ + Locale locale = LocaleContextHolder.getLocale(); + dataDictDao.updateDict(dataDictUpdateQo.getId(),dataDictUpdateQo.getDictChineseName()); + return outputEncapsulationObject(PromptMessageEnum.SUCCESS,"修改成功!",locale); + } +} diff --git a/src/main/java/com/xkrs/controller/DataSourceController.java b/src/main/java/com/xkrs/controller/DataSourceController.java new file mode 100644 index 0000000..4a36e25 --- /dev/null +++ b/src/main/java/com/xkrs/controller/DataSourceController.java @@ -0,0 +1,74 @@ +package com.xkrs.controller; + +import com.xkrs.dao.DataSourceDao; +import com.xkrs.encapsulation.PromptMessageEnum; +import com.xkrs.model.qo.DataSourceQo; +import com.xkrs.service.DataSourceService; +import org.springframework.context.i18n.LocaleContextHolder; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +import static com.xkrs.encapsulation.OutputEncapsulation.outputEncapsulationObject; + +/** + * @Author: XinYi Song + * @Date: 2022/1/19 17:05 + */ +@RestController +public class DataSourceController { + + @Resource + private DataSourceService dataSourceService; + + @Resource + private DataSourceDao dataSourceDao; + + /** + * 添加测量数据 + * @param dataSourceQo + * @return + */ + @PostMapping("/insertDataSource") + public String insertDataSource(@RequestBody DataSourceQo dataSourceQo){ + return dataSourceService.insertDataSource(dataSourceQo); + } + + /** + * 查询某一产品的测量信息 + * @param dataModelNumber + * @param dataBatchNumber + * @param dataMachineCode + * @param productNumber + * @return + */ + @GetMapping("/selectDataSource") + public String selectDataSource(@RequestParam("dataModelNumber") String dataModelNumber, + @RequestParam("dataBatchNumber") String dataBatchNumber, + @RequestParam("dataMachineCode") String dataMachineCode, + @RequestParam("productNumber") String productNumber){ + Locale locale = LocaleContextHolder.getLocale(); + List> maps = dataSourceDao.selectDataSource(dataModelNumber, dataBatchNumber, dataMachineCode, productNumber); + if(maps == null || maps.size() == 0){ + return outputEncapsulationObject(PromptMessageEnum.DATA_NONE,"暂时没有该产品的测量信息!",locale); + } + return outputEncapsulationObject(PromptMessageEnum.SUCCESS,maps,locale); + } + + /** + * 查询全部的测量信息 + * @return + */ + @GetMapping("/selectAllSource") + public String selectAllSource(){ + Locale locale = LocaleContextHolder.getLocale(); + List> maps = dataSourceDao.selectAllSource(); + if(maps == null || maps.size() == 0){ + return outputEncapsulationObject(PromptMessageEnum.DATA_NONE,"暂时没有该产品的测量信息!",locale); + } + return outputEncapsulationObject(PromptMessageEnum.SUCCESS,maps,locale); + } +} diff --git a/src/main/java/com/xkrs/controller/FileController.java b/src/main/java/com/xkrs/controller/FileController.java new file mode 100644 index 0000000..ff66370 --- /dev/null +++ b/src/main/java/com/xkrs/controller/FileController.java @@ -0,0 +1,73 @@ +package com.xkrs.controller; + +import com.xkrs.dao.FileDao; +import com.xkrs.encapsulation.PromptMessageEnum; +import com.xkrs.model.qo.FileQo; +import com.xkrs.model.qo.FileUpdateQo; +import com.xkrs.service.FileService; +import com.xkrs.util.ExcelUploadUtil; +import org.apache.poi.openxml4j.exceptions.InvalidFormatException; +import org.springframework.context.i18n.LocaleContextHolder; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.transaction.Transactional; +import java.io.IOException; +import java.util.Locale; + +import static com.xkrs.encapsulation.OutputEncapsulation.outputEncapsulationObject; + +/** + * @Author: XinYi Song + * @Date: 2022/1/20 16:01 + */ +@RestController +public class FileController { + + @Resource + private FileService fileService; + + @Resource + private FileDao fileDao; + + /** + * 上传模板信息 + * @param fileQo + * @param fileExcel + * @return + * @throws IOException + */ + @PostMapping("/insertFileExcel") + public String insertFileExcel(FileQo fileQo, @RequestParam("fileExcel") MultipartFile fileExcel) throws IOException { + return fileService.insertFileExcel(fileQo,fileExcel); + } + + /** + * 修改上传的模板信息 + * @param fileUpdateQo + * @param fileExcel + * @return + * @throws IOException + */ + @PostMapping("/updateFileUploadPath") + @Transactional(rollbackOn = Exception.class) + public String updateFileUploadPath(FileUpdateQo fileUpdateQo,@RequestParam("fileExcel") MultipartFile fileExcel) throws IOException { + Locale locale = LocaleContextHolder.getLocale(); + String file = ExcelUploadUtil.memoryFile(fileExcel); + fileDao.updateFileUploadPath(fileUpdateQo.getFileModelNumber(),fileUpdateQo.getFileBatchNumber(),fileUpdateQo.getFileMachineCode(),fileUpdateQo.getFileProductNumber(),file); + return outputEncapsulationObject(PromptMessageEnum.SUCCESS,"修改成功!",locale); + } + + /** + * 导出excel + * + * @param fileQo + * @return + */ + @PostMapping("/exportExcel") + public String exportExcel(@RequestBody FileQo fileQo) throws IOException, InvalidFormatException { + return fileService.exportExcel(fileQo); + } +} diff --git a/src/main/java/com/xkrs/dao/DataDictDao.java b/src/main/java/com/xkrs/dao/DataDictDao.java new file mode 100644 index 0000000..e916427 --- /dev/null +++ b/src/main/java/com/xkrs/dao/DataDictDao.java @@ -0,0 +1,48 @@ +package com.xkrs.dao; + +import com.xkrs.model.entity.DataDict; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @Author: XinYi Song + * @Date: 2022/1/19 10:03 + */ +@Component +public interface DataDictDao extends JpaRepository, JpaSpecificationExecutor { + + /** + * 通过中文名称查询字典表数据 + * @param chineseName + * @return + */ + DataDict findByDictChineseName(String chineseName); + + /** + * 通过英文变量查询字典表的数据 + * @param englishName + * @return + */ + DataDict findByDictEnglishName(String englishName); + + /** + * 根据id查询字典信息 + * @param id + * @return + */ + DataDict findById(Integer id); + + /** + * 根据id修改字典的信息 + * @param id + * @param chineseName + */ + @Modifying(clearAutomatically=true) + @Query(value = "update data_dict set dict_chinese_name = ?2 where id = ?1",nativeQuery = true) + void updateDict(Integer id, String chineseName); +} diff --git a/src/main/java/com/xkrs/dao/DataSourceDao.java b/src/main/java/com/xkrs/dao/DataSourceDao.java new file mode 100644 index 0000000..1d41ab5 --- /dev/null +++ b/src/main/java/com/xkrs/dao/DataSourceDao.java @@ -0,0 +1,64 @@ +package com.xkrs.dao; + +import com.xkrs.model.entity.DataSource; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +/** + * @Author: XinYi Song + * @Date: 2022/1/19 16:41 + */ +@Component +public interface DataSourceDao extends JpaRepository, JpaSpecificationExecutor { + + /** + * 查询测量数据信息 + * @param dataModelNumber + * @param dataBatchNumber + * @param dataMachineCode + * @param productNumber + * @return + */ + @Query(value = "select ds.data_model_number datamodelnumber, ds.data_batch_number databatchnumber, " + + "ds.data_machine_code datamachinecode, ds.product_number productnumber, dd.dict_chinese_name chinesename, " + + "ds.data_name dataname,ds.numerical_value numericalvalue " + + "from data_dict dd,data_source ds where ds.data_name = dd.dict_english_name and " + + "ds.data_model_number = :dataModelNumber and ds.data_batch_number = :dataBatchNumber and " + + "ds.data_machine_code = :dataMachineCode and ds.product_number = :productNumber",nativeQuery = true) + List> selectDataSource(String dataModelNumber, String dataBatchNumber, String dataMachineCode, String productNumber); + + /** + * 查询测量信息变量和测量值,用于模板的导入 + * @param dataModelNumber + * @param dataBatchNumber + * @param dataMachineCode + * @param productNumber + * @return + */ + @Query(value = "select data_name dataname,numerical_value numericalvalue from data_source " + + "where data_model_number = :dataModelNumber and data_batch_number = :dataBatchNumber " + + "and data_machine_code = :dataMachineCode and product_number = :productNumber",nativeQuery = true) + List> selectDataNameAndData(String dataModelNumber, String dataBatchNumber, String dataMachineCode, String productNumber); + + /** + * 通过英文变量查询信息 + * @param dataname + * @return + */ + DataSource findByDataName(String dataname); + + /** + * 查询全部的测量信息 + * @return + */ + @Query(value = "select ds.data_model_number datamodelnumber, ds.data_batch_number databatchnumber, " + + "ds.data_machine_code datamachinecode, ds.product_number productnumber, dd.dict_chinese_name chinesename," + + "ds.data_name dataname,ds.numerical_value numericalvalue from data_dict dd,data_source ds " + + "where ds.data_name = dd.dict_english_name",nativeQuery = true) + List> selectAllSource(); +} diff --git a/src/main/java/com/xkrs/dao/FileDao.java b/src/main/java/com/xkrs/dao/FileDao.java new file mode 100644 index 0000000..96ca8e3 --- /dev/null +++ b/src/main/java/com/xkrs/dao/FileDao.java @@ -0,0 +1,52 @@ +package com.xkrs.dao; + +import com.xkrs.model.entity.FileEntity; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Component; + +/** + * @Author: XinYi Song + * @Date: 2022/1/20 15:23 + */ +@Component +public interface FileDao extends JpaRepository, JpaSpecificationExecutor { + + /** + * 根据机种号,批次号,机器号,产品号查询文件信息 + * @param fileModelNumber + * @param fileBatchNumber + * @param fileMachineCode + * @param fileProductNumber + * @return + */ + FileEntity findByFileModelNumberAndFileBatchNumberAndFileMachineCodeAndFileProductNumber(String fileModelNumber,String fileBatchNumber,String fileMachineCode,String fileProductNumber); + + /** + * 根据机种号,批次号,机器号,产品号修改模板上传信息 + * @param fileModelNumber + * @param fileBatchNumber + * @param fileMachineCode + * @param fileProductNumber + * @param fileUploadPath + */ + @Modifying(clearAutomatically=true) + @Query(value = "update file set file_upload_path = ?5 where file_model_number = ?1 and file_batch_number = ?2 and file_machine_code = ?3 and file_product_number = ?4",nativeQuery = true) + void updateFileUploadPath(String fileModelNumber,String fileBatchNumber,String fileMachineCode,String fileProductNumber,String fileUploadPath); + + /** + * 根据机种号,批次号,机器号,产品号修改模板下载信息 + * @param fileModelNumber + * @param fileBatchNumber + * @param fileMachineCode + * @param fileProductNumber + * @param fileDownloadPath + */ + @Modifying(clearAutomatically=true) + @Query(value = "update file set file_download_path = ?5 where file_model_number = ?1 and file_batch_number = ?2 and file_machine_code = ?3 and file_product_number = ?4",nativeQuery = true) + void updateFileDownloadPath(String fileModelNumber,String fileBatchNumber,String fileMachineCode,String fileProductNumber,String fileDownloadPath); + + +} diff --git a/src/main/java/com/xkrs/encapsulation/EncapsulationObejct.java b/src/main/java/com/xkrs/encapsulation/EncapsulationObejct.java new file mode 100644 index 0000000..3822e1a --- /dev/null +++ b/src/main/java/com/xkrs/encapsulation/EncapsulationObejct.java @@ -0,0 +1,59 @@ +package com.xkrs.encapsulation; + +import java.io.Serializable; + +/** + * 输出信息对象 + * @author tajochen + * @param + */ +public class EncapsulationObejct implements Serializable { + + /** + * 状态码 + */ + int status; + + /** + * 提示信息 + */ + String msg; + + /** + * 数据 + */ + T data; + + public int getStatus() { + return status; + } + + public void setStatus(int status) { + this.status = status; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public T getData() { + return data; + } + + public void setData(T data) { + this.data = data; + } + + @Override + public String toString() { + return "EncapsulationObejct{" + + "status=" + status + + ", msg='" + msg + '\'' + + ", data=" + data + + '}'; + } +} diff --git a/src/main/java/com/xkrs/encapsulation/OutputEncapsulation.java b/src/main/java/com/xkrs/encapsulation/OutputEncapsulation.java new file mode 100644 index 0000000..641e53f --- /dev/null +++ b/src/main/java/com/xkrs/encapsulation/OutputEncapsulation.java @@ -0,0 +1,96 @@ +package com.xkrs.encapsulation; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.MessageSource; +import org.springframework.context.support.ResourceBundleMessageSource; +import org.springframework.stereotype.Component; +import org.springframework.validation.FieldError; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; +import java.util.Properties; + +/** + * 输出信息封装 + * @author tajochen + */ +@Component +public class OutputEncapsulation { + + private static final Logger logger = LoggerFactory.getLogger(OutputEncapsulation.class); + + /** + * 读取多国语言文件 + * @return + */ + public static MessageSource messageSource() { + Properties properties = new Properties(); + // 使用ClassLoader加载properties配置文件生成对应的输入流 + InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("application.properties"); + // 使用properties对象加载输入流 + try { + properties.load(in); + } catch (IOException e) { + e.printStackTrace(); + } + ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); + messageSource.setBasename("i18n/messages"); + messageSource.setDefaultEncoding("UTF-8"); + return messageSource; + } + + /** + * 封装输出数据 + * @param promptMessageEnum + * @param obj + * @return + */ + public static String outputEncapsulationObject(PromptMessageEnum promptMessageEnum, Object obj, Locale locale) { + + EncapsulationObejct encapsulationObejct = new EncapsulationObejct(); + encapsulationObejct.setStatus(promptMessageEnum.getCode()); + encapsulationObejct.setMsg(messageSource().getMessage(promptMessageEnum.getText(),null,locale)); + encapsulationObejct.setData(obj); + + ObjectMapper objectMapper = new ObjectMapper(); + // 忽略无法转换的对象 + objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS,false); + // 忽略json字符串中不识别的属性 + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + // 解决jackson无法反序列化LocalDateTime的问题,引入jsr310标准 + JavaTimeModule javaTimeModule = new JavaTimeModule(); + objectMapper.registerModule(javaTimeModule); + objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); + String strByEo = ""; + try { + strByEo = objectMapper.writeValueAsString(encapsulationObejct); + } catch (JsonProcessingException e) { + e.printStackTrace(); + logger.warn(e.toString()); + } + return strByEo; + } + + /** + * 输出请求值检验错误信息 + * @param fieldErrors + * @return + */ + public static String outputEncapsulationErrorList(List fieldErrors, Locale locale){ + List errorMsg = new ArrayList<>(); + for (FieldError fieldError : fieldErrors) { + String errMessage = fieldError.getDefaultMessage().subSequence(1,fieldError.getDefaultMessage().length()-1).toString(); + errorMsg.add(messageSource().getMessage(errMessage,null,locale)); + } + return outputEncapsulationObject(PromptMessageEnum.PARAM_ILLEGAL,errorMsg,locale); + } +} diff --git a/src/main/java/com/xkrs/encapsulation/PromptMessageEnum.java b/src/main/java/com/xkrs/encapsulation/PromptMessageEnum.java new file mode 100644 index 0000000..79275a4 --- /dev/null +++ b/src/main/java/com/xkrs/encapsulation/PromptMessageEnum.java @@ -0,0 +1,65 @@ +package com.xkrs.encapsulation; + +/** + * 提示信息枚举 + * @author tajochen + */ +public enum PromptMessageEnum{ + + // 执行成功 + SUCCESS(0, "sys.message.success"), + + + // 用户权限错误或非法操作: 1001-1999 + USER_NOT_LOGGED(1001, "sys.message.user.not_logged_in"), + USER_LOGIN_ERROR(1002, "sys.message.user.login_error"), + USER_ACCOUNT_FORBIDDEN(1003, "sys.message.user.account_forbidden"), + USER_ACCOUNT_NOT_ACTIVATED(1004, "sys.message.user.account_not_activated"), + USER_HAS_OVERTIME(1005, "sys.message.user.overtime"), + USER_NO_PERMISSION(1006,"sys.message.user.no_permission"), + USER_ALREADY_LOGGED(1007, "sys.message.user.already_logged"), + + // 请求参数错误或非法:2001-2999 + PARAM_NULL(2001, "sys.message.param.null"), + PARAM_ILLEGAL(2002, "sys.message.param.illegal"), + + // 数据返回错误:3001-3999 + DATA_NONE(3001, "sys.message.data.none"), + + DATA_WRONG(3002, "sys.message.data.wrong"), + DATA_EXIT(3003,"sys.message.exit"), + + // 操作失败:4001-4999 + PROCESS_FAIL(4001,"sys.message.process.fail"), + PROCESS_OVERTIME(4002,"sys.message.process.overtime"), + FILE_EXISTS(4003,"sys.message.file.exists"), + FILE_WRITE_ERROR(4004,"sys.message.file.write.error"), + FILE_READ_ERROR(4005,"sys.message.file.read.error"), + + // 系统内部错误或异常:5001-5999 + SYSTEM_INNER_ERROR(5001,"sys.message.system.inner_error"), + SYSTEM_ABNORMAL(5002,"sys.message.system.abnormal"), + SYSTEM_BUSY(5003,"sys.message.system.busy"), + SYSTEM_MAINTAIN(5004,"sys.message.system.maintain"), + + // 数据库错误:6001-6999 + DATABASE_ERROR(6001,"sys.message.database.error"); + + private int code; + + private String text; + + private PromptMessageEnum(int code,String text) { + this.code = code; + this.text = text; + } + + public String getText() { + return this.text; + } + + public int getCode() { + return this.code; + } + +} diff --git a/src/main/java/com/xkrs/model/entity/DataDict.java b/src/main/java/com/xkrs/model/entity/DataDict.java new file mode 100644 index 0000000..0758159 --- /dev/null +++ b/src/main/java/com/xkrs/model/entity/DataDict.java @@ -0,0 +1,73 @@ +package com.xkrs.model.entity; + +import javax.persistence.*; + +/** + * @Author: XinYi Song + * @Date: 2022/1/19 9:26 + */ +@Entity +@Table(name = "data_dict") +public class DataDict { + /** + * 主键id + */ + @Id + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "data_dict_seq_gen") + @SequenceGenerator(name = "data_dict_seq_gen", sequenceName = "data_dict_id_seq",allocationSize = 1) + private Integer id; + + /** + * 中文名称 + */ + @Column(length = 65, columnDefinition = "varchar(65)") + private String dictChineseName; + + /** + * 英文变量值 + */ + @Column(length = 85, columnDefinition = "varchar(85)") + private String dictEnglishName; + + public DataDict() { + } + + public DataDict(Integer id, String dictChineseName, String dictEnglishName) { + this.id = id; + this.dictChineseName = dictChineseName; + this.dictEnglishName = dictEnglishName; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getDictChineseName() { + return dictChineseName; + } + + public void setDictChineseName(String dictChineseName) { + this.dictChineseName = dictChineseName; + } + + public String getDictEnglishName() { + return dictEnglishName; + } + + public void setDictEnglishName(String dictEnglishName) { + this.dictEnglishName = dictEnglishName; + } + + @Override + public String toString() { + return "DataDict{" + + "id=" + id + + ", dictChineseName='" + dictChineseName + '\'' + + ", dictEnglishName='" + dictEnglishName + '\'' + + '}'; + } +} diff --git a/src/main/java/com/xkrs/model/entity/DataSource.java b/src/main/java/com/xkrs/model/entity/DataSource.java new file mode 100644 index 0000000..1480bd7 --- /dev/null +++ b/src/main/java/com/xkrs/model/entity/DataSource.java @@ -0,0 +1,137 @@ +package com.xkrs.model.entity; + +import javax.persistence.*; + +/** + * @Author: XinYi Song + * @Date: 2022/1/19 14:08 + */ +@Entity +@Table(name = "data_source") +public class DataSource { + /** + * 主键id + */ + @Id + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "data_source_seq_gen") + @SequenceGenerator(name = "data_source_seq_gen", sequenceName = "data_source_id_seq",allocationSize = 1) + private Integer id; + + /** + * 机种号 + */ + @Column(length = 32, columnDefinition = "varchar(32)") + private String dataModelNumber; + + /** + * 批次号 + */ + @Column(length = 32, columnDefinition = "varchar(32)") + private String dataBatchNumber; + + /** + * 机器号 + */ + @Column(length = 32, columnDefinition = "varchar(32)") + private String dataMachineCode; + + /** + * 产品编号 + */ + @Column(length = 32, columnDefinition = "varchar(32)") + private String productNumber; + + /** + * 变量值 + */ + @Column(length = 85, columnDefinition = "varchar(85)") + private String dataName; + + /** + * 监测的数值 + */ + @Column(length = 85, columnDefinition = "varchar(85)") + private String numericalValue; + + public DataSource() { + } + + public DataSource(Integer id, String dataModelNumber, String dataBatchNumber, String dataMachineCode, String productNumber, String dataName, String numericalValue) { + this.id = id; + this.dataModelNumber = dataModelNumber; + this.dataBatchNumber = dataBatchNumber; + this.dataMachineCode = dataMachineCode; + this.productNumber = productNumber; + this.dataName = dataName; + this.numericalValue = numericalValue; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getDataModelNumber() { + return dataModelNumber; + } + + public void setDataModelNumber(String dataModelNumber) { + this.dataModelNumber = dataModelNumber; + } + + public String getDataBatchNumber() { + return dataBatchNumber; + } + + public void setDataBatchNumber(String dataBatchNumber) { + this.dataBatchNumber = dataBatchNumber; + } + + public String getDataMachineCode() { + return dataMachineCode; + } + + public void setDataMachineCode(String dataMachineCode) { + this.dataMachineCode = dataMachineCode; + } + + public String getProductNumber() { + return productNumber; + } + + public void setProductNumber(String productNumber) { + this.productNumber = productNumber; + } + + public String getDataName() { + return dataName; + } + + public void setDataName(String dataName) { + this.dataName = dataName; + } + + public String getNumericalValue() { + return numericalValue; + } + + public void setNumericalValue(String numericalValue) { + this.numericalValue = numericalValue; + } + + @Override + public String toString() { + return "DataSource{" + + "id=" + id + + ", dataModelNumber='" + dataModelNumber + '\'' + + ", dataBatchNumber='" + dataBatchNumber + '\'' + + ", dataMachineCode='" + dataMachineCode + '\'' + + ", productNumber='" + productNumber + '\'' + + ", dataName='" + dataName + '\'' + + ", numericalValue='" + numericalValue + '\'' + + '}'; + } +} diff --git a/src/main/java/com/xkrs/model/entity/FileEntity.java b/src/main/java/com/xkrs/model/entity/FileEntity.java new file mode 100644 index 0000000..df3beb0 --- /dev/null +++ b/src/main/java/com/xkrs/model/entity/FileEntity.java @@ -0,0 +1,135 @@ +package com.xkrs.model.entity; + +import javax.persistence.*; + +/** + * @Author: XinYi Song + * @Date: 2022/1/20 15:01 + */ +@Entity +@Table(name = "file") +public class FileEntity { + /** + * 主键id + */ + @Id + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "file_seq_gen") + @SequenceGenerator(name = "file_seq_gen", sequenceName = "file_id_seq",allocationSize = 1) + private Integer id; + + /** + * 机种号 + */ + @Column(length = 32, columnDefinition = "varchar(32)") + private String fileModelNumber; + + /** + * 批次号 + */ + @Column(length = 32, columnDefinition = "varchar(32)") + private String fileBatchNumber; + + /** + * 机器号 + */ + @Column(length = 32, columnDefinition = "varchar(32)") + private String fileMachineCode; + + /** + * 产品编号 + */ + @Column(length = 32, columnDefinition = "varchar(32)") + private String fileProductNumber; + + /** + * 上传模板的路径 + */ + private String fileUploadPath; + + /** + * 下载路径 + */ + private String fileDownloadPath; + + public FileEntity() { + } + + public FileEntity(Integer id, String fileModelNumber, String fileBatchNumber, String fileMachineCode, String fileProductNumber, String fileUploadPath, String fileDownloadPath) { + this.id = id; + this.fileModelNumber = fileModelNumber; + this.fileBatchNumber = fileBatchNumber; + this.fileMachineCode = fileMachineCode; + this.fileProductNumber = fileProductNumber; + this.fileUploadPath = fileUploadPath; + this.fileDownloadPath = fileDownloadPath; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getFileModelNumber() { + return fileModelNumber; + } + + public void setFileModelNumber(String fileModelNumber) { + this.fileModelNumber = fileModelNumber; + } + + public String getFileBatchNumber() { + return fileBatchNumber; + } + + public void setFileBatchNumber(String fileBatchNumber) { + this.fileBatchNumber = fileBatchNumber; + } + + public String getFileMachineCode() { + return fileMachineCode; + } + + public void setFileMachineCode(String fileMachineCode) { + this.fileMachineCode = fileMachineCode; + } + + public String getFileProductNumber() { + return fileProductNumber; + } + + public void setFileProductNumber(String fileProductNumber) { + this.fileProductNumber = fileProductNumber; + } + + public String getFileUploadPath() { + return fileUploadPath; + } + + public void setFileUploadPath(String fileUploadPath) { + this.fileUploadPath = fileUploadPath; + } + + public String getFileDownloadPath() { + return fileDownloadPath; + } + + public void setFileDownloadPath(String fileDownloadPath) { + this.fileDownloadPath = fileDownloadPath; + } + + @Override + public String toString() { + return "FileEntity{" + + "id=" + id + + ", fileModelNumber='" + fileModelNumber + '\'' + + ", fileBatchNumber='" + fileBatchNumber + '\'' + + ", fileMachineCode='" + fileMachineCode + '\'' + + ", fileProductNumber='" + fileProductNumber + '\'' + + ", fileUploadPath='" + fileUploadPath + '\'' + + ", fileDownloadPath='" + fileDownloadPath + '\'' + + '}'; + } +} diff --git a/src/main/java/com/xkrs/model/qo/DataDictQo.java b/src/main/java/com/xkrs/model/qo/DataDictQo.java new file mode 100644 index 0000000..e3b68a0 --- /dev/null +++ b/src/main/java/com/xkrs/model/qo/DataDictQo.java @@ -0,0 +1,39 @@ +package com.xkrs.model.qo; + +import com.xkrs.model.validation.DataDictQoInsert; +import javax.validation.constraints.NotBlank; + +/** + * @Author: XinYi Song + * @Date: 2022/1/19 10:14 + */ +public class DataDictQo { + + /** + * 中文名称 + */ + @NotBlank(message = "{DataDict.dictChineseName.blank}",groups={DataDictQoInsert.class}) + private String dictChineseName; + + /** + * 英文变量值 + */ + @NotBlank(message = "{DataDict.dictEnglishName.blank}",groups={DataDictQoInsert.class}) + private String dictEnglishName; + + public String getDictChineseName() { + return dictChineseName; + } + + public void setDictChineseName(String dictChineseName) { + this.dictChineseName = dictChineseName; + } + + public String getDictEnglishName() { + return dictEnglishName; + } + + public void setDictEnglishName(String dictEnglishName) { + this.dictEnglishName = dictEnglishName; + } +} diff --git a/src/main/java/com/xkrs/model/qo/DataDictUpdateQo.java b/src/main/java/com/xkrs/model/qo/DataDictUpdateQo.java new file mode 100644 index 0000000..a6ef452 --- /dev/null +++ b/src/main/java/com/xkrs/model/qo/DataDictUpdateQo.java @@ -0,0 +1,37 @@ +package com.xkrs.model.qo; + +import com.xkrs.model.validation.DataDictUpdateQoUpdate; + +import javax.validation.constraints.NotBlank; + +/** + * @Author: XinYi Song + * @Date: 2022/1/20 11:23 + */ +public class DataDictUpdateQo { + + @NotBlank(message = "{DataDict.id.blank}",groups={DataDictUpdateQoUpdate.class}) + private Integer id; + + /** + * 中文名称 + */ + @NotBlank(message = "{DataDict.dictChineseName.blank}",groups={DataDictUpdateQoUpdate.class}) + private String dictChineseName; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getDictChineseName() { + return dictChineseName; + } + + public void setDictChineseName(String dictChineseName) { + this.dictChineseName = dictChineseName; + } +} diff --git a/src/main/java/com/xkrs/model/qo/DataSourceQo.java b/src/main/java/com/xkrs/model/qo/DataSourceQo.java new file mode 100644 index 0000000..9128b99 --- /dev/null +++ b/src/main/java/com/xkrs/model/qo/DataSourceQo.java @@ -0,0 +1,97 @@ +package com.xkrs.model.qo; + +import com.xkrs.model.validation.DataDictQoInsert; +import com.xkrs.model.validation.DataSourceQoInsert; + +import javax.persistence.Column; +import javax.validation.constraints.NotBlank; + +/** + * @Author: XinYi Song + * @Date: 2022/1/19 16:37 + */ +public class DataSourceQo { + /** + * 机种号 + */ + @NotBlank(message = "{DataSource.dataModelNumber.blank}",groups={DataSourceQoInsert.class}) + private String dataModelNumber; + + /** + * 批次号 + */ + @NotBlank(message = "{DataSource.dataBatchNumber.blank}",groups={DataSourceQoInsert.class}) + private String dataBatchNumber; + + /** + * 机器号 + */ + @NotBlank(message = "{DataSource.dataMachineCode.blank}",groups={DataSourceQoInsert.class}) + private String dataMachineCode; + + /** + * 产品编号 + */ + @NotBlank(message = "{DataSource.productNumber.blank}",groups={DataSourceQoInsert.class}) + private String productNumber; + + /** + * 变量值 + */ + @NotBlank(message = "{DataSource.dataName.blank}",groups={DataSourceQoInsert.class}) + private String dataName; + + /** + * 监测的数值 + */ + @NotBlank(message = "{DataSource.numericalValue.blank}",groups={DataSourceQoInsert.class}) + private String numericalValue; + + public String getDataModelNumber() { + return dataModelNumber; + } + + public void setDataModelNumber(String dataModelNumber) { + this.dataModelNumber = dataModelNumber; + } + + public String getDataBatchNumber() { + return dataBatchNumber; + } + + public void setDataBatchNumber(String dataBatchNumber) { + this.dataBatchNumber = dataBatchNumber; + } + + public String getDataMachineCode() { + return dataMachineCode; + } + + public void setDataMachineCode(String dataMachineCode) { + this.dataMachineCode = dataMachineCode; + } + + public String getProductNumber() { + return productNumber; + } + + public void setProductNumber(String productNumber) { + this.productNumber = productNumber; + } + + public String getDataName() { + return dataName; + } + + public void setDataName(String dataName) { + this.dataName = dataName; + } + + public String getNumericalValue() { + return numericalValue; + } + + public void setNumericalValue(String numericalValue) { + this.numericalValue = numericalValue; + } +} diff --git a/src/main/java/com/xkrs/model/qo/FileQo.java b/src/main/java/com/xkrs/model/qo/FileQo.java new file mode 100644 index 0000000..88da44b --- /dev/null +++ b/src/main/java/com/xkrs/model/qo/FileQo.java @@ -0,0 +1,81 @@ +package com.xkrs.model.qo; + +import com.xkrs.model.validation.FileQoInsert; +import javax.validation.constraints.NotBlank; + +/** + * @Author: XinYi Song + * @Date: 2022/1/20 15:26 + */ +public class FileQo { + + /** + * 机种号 + */ + @NotBlank(message = "{FileEntity.fileModelNumber.blank}",groups={FileQoInsert.class}) + private String fileModelNumber; + + /** + * 批次号 + */ + @NotBlank(message = "{FileEntity.fileBatchNumber.blank}",groups={FileQoInsert.class}) + private String fileBatchNumber; + + /** + * 机器号 + */ + @NotBlank(message = "{FileEntity.fileMachineCode.blank}",groups={FileQoInsert.class}) + private String fileMachineCode; + + /** + * 产品编号 + */ + @NotBlank(message = "{FileEntity.fileProductNumber.blank}",groups={FileQoInsert.class}) + private String fileProductNumber; + + /** + * 上传模板的路径 + */ + @NotBlank(message = "{FileEntity.fileUploadPath.blank}",groups={FileQoInsert.class}) + private String fileUploadPath; + + public String getFileModelNumber() { + return fileModelNumber; + } + + public void setFileModelNumber(String fileModelNumber) { + this.fileModelNumber = fileModelNumber; + } + + public String getFileBatchNumber() { + return fileBatchNumber; + } + + public void setFileBatchNumber(String fileBatchNumber) { + this.fileBatchNumber = fileBatchNumber; + } + + public String getFileMachineCode() { + return fileMachineCode; + } + + public void setFileMachineCode(String fileMachineCode) { + this.fileMachineCode = fileMachineCode; + } + + public String getFileProductNumber() { + return fileProductNumber; + } + + public void setFileProductNumber(String fileProductNumber) { + this.fileProductNumber = fileProductNumber; + } + + public String getFileUploadPath() { + return fileUploadPath; + } + + public void setFileUploadPath(String fileUploadPath) { + this.fileUploadPath = fileUploadPath; + } +} diff --git a/src/main/java/com/xkrs/model/qo/FileUpdateQo.java b/src/main/java/com/xkrs/model/qo/FileUpdateQo.java new file mode 100644 index 0000000..9a33ca4 --- /dev/null +++ b/src/main/java/com/xkrs/model/qo/FileUpdateQo.java @@ -0,0 +1,69 @@ +package com.xkrs.model.qo; + + +import com.xkrs.model.validation.FileUpdateQoUpdate; + +import javax.validation.constraints.NotBlank; + +/** + * @Author: XinYi Song + * @Date: 2022/1/20 16:20 + */ +public class FileUpdateQo { + + /** + * 机种号 + */ + @NotBlank(message = "{FileEntity.fileModelNumber.blank}",groups={FileUpdateQoUpdate.class}) + private String fileModelNumber; + + /** + * 批次号 + */ + @NotBlank(message = "{FileEntity.fileBatchNumber.blank}",groups={FileUpdateQoUpdate.class}) + private String fileBatchNumber; + + /** + * 机器号 + */ + @NotBlank(message = "{FileEntity.fileMachineCode.blank}",groups={FileUpdateQoUpdate.class}) + private String fileMachineCode; + + /** + * 产品编号 + */ + @NotBlank(message = "{FileEntity.fileProductNumber.blank}",groups={FileUpdateQoUpdate.class}) + private String fileProductNumber; + + public String getFileModelNumber() { + return fileModelNumber; + } + + public void setFileModelNumber(String fileModelNumber) { + this.fileModelNumber = fileModelNumber; + } + + public String getFileBatchNumber() { + return fileBatchNumber; + } + + public void setFileBatchNumber(String fileBatchNumber) { + this.fileBatchNumber = fileBatchNumber; + } + + public String getFileMachineCode() { + return fileMachineCode; + } + + public void setFileMachineCode(String fileMachineCode) { + this.fileMachineCode = fileMachineCode; + } + + public String getFileProductNumber() { + return fileProductNumber; + } + + public void setFileProductNumber(String fileProductNumber) { + this.fileProductNumber = fileProductNumber; + } +} diff --git a/src/main/java/com/xkrs/model/validation/DataDictQoInsert.java b/src/main/java/com/xkrs/model/validation/DataDictQoInsert.java new file mode 100644 index 0000000..e6cfc40 --- /dev/null +++ b/src/main/java/com/xkrs/model/validation/DataDictQoInsert.java @@ -0,0 +1,8 @@ +package com.xkrs.model.validation; + +/** + * @Author: XinYi Song + * @Date: 2022/1/19 10:22 + */ +public interface DataDictQoInsert { +} diff --git a/src/main/java/com/xkrs/model/validation/DataDictUpdateQoUpdate.java b/src/main/java/com/xkrs/model/validation/DataDictUpdateQoUpdate.java new file mode 100644 index 0000000..c24b6e2 --- /dev/null +++ b/src/main/java/com/xkrs/model/validation/DataDictUpdateQoUpdate.java @@ -0,0 +1,8 @@ +package com.xkrs.model.validation; + +/** + * @Author: XinYi Song + * @Date: 2022/1/20 11:23 + */ +public interface DataDictUpdateQoUpdate { +} diff --git a/src/main/java/com/xkrs/model/validation/DataSourceQoInsert.java b/src/main/java/com/xkrs/model/validation/DataSourceQoInsert.java new file mode 100644 index 0000000..e15cd7d --- /dev/null +++ b/src/main/java/com/xkrs/model/validation/DataSourceQoInsert.java @@ -0,0 +1,8 @@ +package com.xkrs.model.validation; + +/** + * @Author: XinYi Song + * @Date: 2022/1/19 16:39 + */ +public interface DataSourceQoInsert { +} diff --git a/src/main/java/com/xkrs/model/validation/FileQoInsert.java b/src/main/java/com/xkrs/model/validation/FileQoInsert.java new file mode 100644 index 0000000..ec99981 --- /dev/null +++ b/src/main/java/com/xkrs/model/validation/FileQoInsert.java @@ -0,0 +1,8 @@ +package com.xkrs.model.validation; + +/** + * @Author: XinYi Song + * @Date: 2022/1/20 15:26 + */ +public interface FileQoInsert { +} diff --git a/src/main/java/com/xkrs/model/validation/FileUpdateQoUpdate.java b/src/main/java/com/xkrs/model/validation/FileUpdateQoUpdate.java new file mode 100644 index 0000000..912133c --- /dev/null +++ b/src/main/java/com/xkrs/model/validation/FileUpdateQoUpdate.java @@ -0,0 +1,8 @@ +package com.xkrs.model.validation; + +/** + * @Author: XinYi Song + * @Date: 2022/1/20 16:21 + */ +public interface FileUpdateQoUpdate { +} diff --git a/src/main/java/com/xkrs/service/DataDictService.java b/src/main/java/com/xkrs/service/DataDictService.java new file mode 100644 index 0000000..b233e12 --- /dev/null +++ b/src/main/java/com/xkrs/service/DataDictService.java @@ -0,0 +1,18 @@ +package com.xkrs.service; + +import com.xkrs.model.entity.DataDict; +import com.xkrs.model.qo.DataDictQo; + +/** + * @Author: XinYi Song + * @Date: 2022/1/19 10:10 + */ +public interface DataDictService { + + /** + * 添加字典数据 + * @param dataDictQo + * @return + */ + String insertDataDict(DataDictQo dataDictQo); +} diff --git a/src/main/java/com/xkrs/service/DataSourceService.java b/src/main/java/com/xkrs/service/DataSourceService.java new file mode 100644 index 0000000..d5aa9fe --- /dev/null +++ b/src/main/java/com/xkrs/service/DataSourceService.java @@ -0,0 +1,17 @@ +package com.xkrs.service; + +import com.xkrs.model.qo.DataSourceQo; + +/** + * @Author: XinYi Song + * @Date: 2022/1/19 16:42 + */ +public interface DataSourceService { + + /** + * 添加测量数据 + * @param dataSourceQo + * @return + */ + String insertDataSource(DataSourceQo dataSourceQo); +} diff --git a/src/main/java/com/xkrs/service/FileService.java b/src/main/java/com/xkrs/service/FileService.java new file mode 100644 index 0000000..367f056 --- /dev/null +++ b/src/main/java/com/xkrs/service/FileService.java @@ -0,0 +1,29 @@ +package com.xkrs.service; + +import com.xkrs.model.qo.FileQo; +import org.apache.poi.openxml4j.exceptions.InvalidFormatException; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +/** + * @Author: XinYi Song + * @Date: 2022/1/20 15:24 + */ +public interface FileService { + + /** + * 添加模板信息 + * @param fileQo + * @return + */ + String insertFileExcel(FileQo fileQo,MultipartFile fileExcel) throws IOException; + + /** + * 导出excel + * @param fileQo + * @return + */ + String exportExcel(FileQo fileQo) throws IOException, InvalidFormatException; +} diff --git a/src/main/java/com/xkrs/service/impl/DataDictServiceImpl.java b/src/main/java/com/xkrs/service/impl/DataDictServiceImpl.java new file mode 100644 index 0000000..6f22910 --- /dev/null +++ b/src/main/java/com/xkrs/service/impl/DataDictServiceImpl.java @@ -0,0 +1,50 @@ +package com.xkrs.service.impl; + +import com.xkrs.dao.DataDictDao; +import com.xkrs.encapsulation.PromptMessageEnum; +import com.xkrs.model.entity.DataDict; +import com.xkrs.model.qo.DataDictQo; +import com.xkrs.service.DataDictService; +import org.springframework.context.i18n.LocaleContextHolder; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Locale; + +import static com.xkrs.encapsulation.OutputEncapsulation.outputEncapsulationObject; + +/** + * @Author: XinYi Song + * @Date: 2022/1/19 10:28 + */ +@Service +public class DataDictServiceImpl implements DataDictService { + + @Resource + private DataDictDao dataDictDao; + + /** + * 添加字典数据 + * @param dataDictQo + * @return + */ + @Override + public String insertDataDict(DataDictQo dataDictQo) { + Locale locale = LocaleContextHolder.getLocale(); + //DataDict byDictChineseName = dataDictDao.findByDictChineseName(dataDictQo.getDictChineseName()); + /*DataDict chineseName = dataDictDao.findByModelNumberAndBatchNumberAndMachineCodeAndDictProductNumberAndDictChineseName(dataDictQo.getModelNumber(), dataDictQo.getBatchNumber(), dataDictQo.getMachineCode(), dataDictQo.getDictProductNumber(), dataDictQo.getDictChineseName()); + if(chineseName != null){ + return outputEncapsulationObject(PromptMessageEnum.DATA_EXIT,"该产品变量已存在,请勿重复添加!",locale); + }*/ + //DataDict byDictEnglishName = dataDictDao.findByDictEnglishName(dataDictQo.getDictEnglishName()); + DataDict englishName = dataDictDao.findByDictEnglishName(dataDictQo.getDictEnglishName()); + if(englishName != null){ + return outputEncapsulationObject(PromptMessageEnum.DATA_EXIT,"该产品变量已存在,请勿重复添加!",locale); + } + DataDict dataDict = new DataDict(); + dataDict.setDictChineseName(dataDictQo.getDictChineseName()); + dataDict.setDictEnglishName(dataDictQo.getDictEnglishName()); + dataDictDao.save(dataDict); + return outputEncapsulationObject(PromptMessageEnum.SUCCESS,"添加成功!",locale); + } +} diff --git a/src/main/java/com/xkrs/service/impl/DataSourceServiceImpl.java b/src/main/java/com/xkrs/service/impl/DataSourceServiceImpl.java new file mode 100644 index 0000000..8c775f5 --- /dev/null +++ b/src/main/java/com/xkrs/service/impl/DataSourceServiceImpl.java @@ -0,0 +1,57 @@ +package com.xkrs.service.impl; + +import com.xkrs.dao.DataDictDao; +import com.xkrs.dao.DataSourceDao; +import com.xkrs.encapsulation.PromptMessageEnum; +import com.xkrs.model.entity.DataDict; +import com.xkrs.model.entity.DataSource; +import com.xkrs.model.qo.DataSourceQo; +import com.xkrs.service.DataSourceService; +import org.springframework.context.i18n.LocaleContextHolder; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Locale; + +import static com.xkrs.encapsulation.OutputEncapsulation.outputEncapsulationObject; + +/** + * @Author: XinYi Song + * @Date: 2022/1/19 16:43 + */ +@Service +public class DataSourceServiceImpl implements DataSourceService { + + @Resource + private DataSourceDao dataSourceDao; + + @Resource + private DataDictDao dataDictDao; + + /** + * 添加测量数据 + * @param dataSourceQo + * @return + */ + @Override + public String insertDataSource(DataSourceQo dataSourceQo) { + Locale locale = LocaleContextHolder.getLocale(); + DataDict byDictEnglishName = dataDictDao.findByDictEnglishName(dataSourceQo.getDataName()); + if(byDictEnglishName == null){ + return outputEncapsulationObject(PromptMessageEnum.DATA_NONE,"不存在该字典类型!",locale); + } + /*DataSource byDataName = dataSourceDao.findByDataName(dataSourceQo.getDataName()); + if(byDataName != null){ + return outputEncapsulationObject(PromptMessageEnum.DATA_EXIT,"该字典类型数据已添加,请勿重复添加!",locale); + }*/ + DataSource dataSource = new DataSource(); + dataSource.setDataModelNumber(dataSourceQo.getDataModelNumber()); + dataSource.setDataBatchNumber(dataSourceQo.getDataBatchNumber()); + dataSource.setDataMachineCode(dataSourceQo.getDataMachineCode()); + dataSource.setProductNumber(dataSourceQo.getProductNumber()); + dataSource.setDataName(dataSourceQo.getDataName()); + dataSource.setNumericalValue(dataSourceQo.getNumericalValue()); + dataSourceDao.save(dataSource); + return outputEncapsulationObject(PromptMessageEnum.SUCCESS,"添加成功!",locale); + } +} diff --git a/src/main/java/com/xkrs/service/impl/FileServiceImpl.java b/src/main/java/com/xkrs/service/impl/FileServiceImpl.java new file mode 100644 index 0000000..f6705d3 --- /dev/null +++ b/src/main/java/com/xkrs/service/impl/FileServiceImpl.java @@ -0,0 +1,97 @@ +package com.xkrs.service.impl; + +import com.xkrs.dao.DataDictDao; +import com.xkrs.dao.DataSourceDao; +import com.xkrs.dao.FileDao; +import com.xkrs.encapsulation.PromptMessageEnum; +import com.xkrs.model.entity.FileEntity; +import com.xkrs.model.qo.FileQo; +import com.xkrs.service.FileService; +import com.xkrs.util.ExcelUploadUtil; +import com.xkrs.util.ExportExcel; +import org.apache.poi.openxml4j.exceptions.InvalidFormatException; +import org.springframework.context.i18n.LocaleContextHolder; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.transaction.Transactional; +import java.io.IOException; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +import static com.xkrs.encapsulation.OutputEncapsulation.outputEncapsulationObject; + +/** + * @Author: XinYi Song + * @Date: 2022/1/20 15:24 + */ +@Service +public class FileServiceImpl implements FileService { + + @Resource + private FileDao fileDao; + + @Resource + private DataDictDao dataDictDao; + + @Resource + private DataSourceDao dataSourceDao; + + /** + * 添加模板信息 + * @param fileQo + * @return + */ + @Override + public String insertFileExcel(FileQo fileQo, MultipartFile fileExcel) throws IOException { + Locale locale = LocaleContextHolder.getLocale(); + FileEntity fileEntity = fileDao.findByFileModelNumberAndFileBatchNumberAndFileMachineCodeAndFileProductNumber(fileQo.getFileModelNumber(), fileQo.getFileBatchNumber(), fileQo.getFileMachineCode(), fileQo.getFileProductNumber()); + if(fileEntity != null){ + return outputEncapsulationObject(PromptMessageEnum.DATA_EXIT,"已存在该产品的模板!",locale); + } + if(fileExcel == null){ + return outputEncapsulationObject(PromptMessageEnum.DATA_NONE,"模板不能为空!",locale); + } + String file = ExcelUploadUtil.memoryFile(fileExcel); + FileEntity fileEntity1 = new FileEntity(); + fileEntity1.setFileModelNumber(fileQo.getFileModelNumber()); + fileEntity1.setFileBatchNumber(fileQo.getFileBatchNumber()); + fileEntity1.setFileMachineCode(fileQo.getFileMachineCode()); + fileEntity1.setFileProductNumber(fileQo.getFileProductNumber()); + fileEntity1.setFileUploadPath(file); + + fileDao.save(fileEntity1); + return outputEncapsulationObject(PromptMessageEnum.SUCCESS,"添加成功!",locale); + } + + /** + * 导出excel + * @param fileQo + * @return + */ + @Transactional(rollbackOn = Exception.class) + @Override + public String exportExcel(FileQo fileQo) throws IOException, InvalidFormatException { + Locale locale = LocaleContextHolder.getLocale(); + FileEntity entity = fileDao.findByFileModelNumberAndFileBatchNumberAndFileMachineCodeAndFileProductNumber(fileQo.getFileModelNumber(), fileQo.getFileBatchNumber(), fileQo.getFileMachineCode(), fileQo.getFileProductNumber()); + if(entity == null){ + return outputEncapsulationObject(PromptMessageEnum.DATA_NONE,"暂时没有该产品的模板,请添加!",locale); + } + String fileUploadPath = entity.getFileUploadPath(); + List> maps = dataSourceDao.selectDataNameAndData(fileQo.getFileModelNumber(), fileQo.getFileBatchNumber(), fileQo.getFileMachineCode(), fileQo.getFileProductNumber()); + if(maps == null || maps.size() == 0){ + return outputEncapsulationObject(PromptMessageEnum.DATA_NONE,"暂时没有该产品的信息!",locale); + } + Map map = new HashMap(); + for(Map stringMap : maps){ + map.put(stringMap.get("dataname"),stringMap.get("numericalvalue")); + } + String fill = ExportExcel.exportToProveExcel(map,fileUploadPath); + fileDao.updateFileDownloadPath(fileQo.getFileModelNumber(), fileQo.getFileBatchNumber(), fileQo.getFileMachineCode(), fileQo.getFileProductNumber(),fill); + return outputEncapsulationObject(PromptMessageEnum.SUCCESS,fill,locale); + } +} diff --git a/src/main/java/com/xkrs/util/ExcelUploadUtil.java b/src/main/java/com/xkrs/util/ExcelUploadUtil.java new file mode 100644 index 0000000..d0096d5 --- /dev/null +++ b/src/main/java/com/xkrs/util/ExcelUploadUtil.java @@ -0,0 +1,191 @@ +package com.xkrs.util; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.UUID; + +/** + * @author XinYi Song + */ +public class ExcelUploadUtil { + + public static Logger log = LoggerFactory.getLogger(ExcelUploadUtil.class); + + /** + * 上传单张图片 + * @param fileExcel + * @return + * @throws IOException + */ + public static String memoryFile(MultipartFile fileExcel) throws IOException { + //String uploadPath = "http://139.199.98.175:2088/wfTaskImage/"; + String uploadPath = "http://192.168.2.9:2088/"; + //获取原始文件名 + String originalFilename = fileExcel.getOriginalFilename(); + if (originalFilename != null && !"".equals(originalFilename)) { + //找到 . 的位置 + int index = originalFilename.lastIndexOf("."); + //根据 . 的位置进行分割,拿到文件后缀名 + String suffix = originalFilename.substring(index); + //uuid生成新的文件名 + String newName = UUID.randomUUID().toString() + suffix; + + //将图片保存到本地/usr/etc/images/Folder + //File file = new File("E:/shoptest/"); + File file = new File("/home/sxy/server/industrial_measurement/excel/"); + if (!file.exists()) { + file.mkdirs(); + } + //String path = "E:/shoptest/" + newName; + String path = "/home/sxy/server/industrial_measurement/excel/" + newName; + String uploadsImage = uploadPath + newName; + //实现上传 + fileExcel.transferTo(new File(path)); + + + return path; + } + return null; + } + + /** + * 以文件形式,批量上传图片 + * @param files + * @return + * @throws IOException + */ + /*public static List uploadImage(MultipartFile[] files, String fireCode) throws IOException { + //String uploadPath = "http://139.199.98.175:2099/forestTaskImage/"; + String uploadPath = "http://118.24.27.47:2088/"; + String newName = ""; + String oldName = ""; + List fireTaskPhotos = new ArrayList<>(); + for(MultipartFile file : files){ + //获取file图片名称 + oldName = file.getOriginalFilename(); + //找到 . 的位置 + int index = oldName.lastIndexOf("."); + //根据 . 的位置进行分割,拿到文件后缀名 + String suffix = oldName.substring(index); + //uuid生成新的文件名 + newName = UUID.randomUUID().toString() + suffix; + //将图片保存到本地/usr/etc/images/Folder + File file1 = new File("/home/sxy/server/fire_point/firePointImage/"); + //File file1 = new File("E:/file/work/image/"); + if (!file1.exists()) { + file1.mkdirs(); + } + String path = "/home/sxy/server/fire_point/firePointImage/" + newName; + //String path = "E:/file/work/image/" + newName; + String uploadPaths = "/firePointImage/" + newName; + //实现上传 + file.transferTo(new File(path)); + FireTaskPhoto fireTaskPhoto = new FireTaskPhoto(); + fireTaskPhoto.setPhotoFireCode(fireCode); + fireTaskPhoto.setTaskPhoto(uploadPaths); + + fireTaskPhotos.add(fireTaskPhoto); + } + return fireTaskPhotos; + }*/ + + + + /** + * 删除本地或服务器储存的图片 + * @param path + * @return + */ + public static String delFile(String path){ + String resultInfo = null; + int lastIndexOf = path.lastIndexOf("/"); + String imgPath = path.substring(lastIndexOf + 1,path.length()); + System.out.println(imgPath); + imgPath = "/usr/local/etc/images/" + imgPath; +// img_path = "/usr/etc/images/Folder/" + img_path; + File file = new File(imgPath); + if(file.exists()){ + if(file.delete()){ + resultInfo = "删除成功!"; + }else { + resultInfo = "删除失败!"; + } + }else { + resultInfo = "文件不存在"; + } + return resultInfo; + } + + /** + * 通过图片路径解析 ,上传保存 + * @param listImgSrc + * @return + */ + public static List downloadImage(List listImgSrc) { + try { + List list = new ArrayList(); + //开始时间 + Date beginDate = new Date(); + for (String url : listImgSrc) { + //开始时间 + Date beginDate2 = new Date(); + String imageName = url.substring(url.lastIndexOf("/") + 1, url.length()); + URL uri = new URL(url); + InputStream in = uri.openStream(); + //String pathUpload = "E:/img/" + imageName; + String pathUpload = "/home/web/wf-fire-service/wfimage/" + imageName; + FileOutputStream fo = new FileOutputStream(new File(pathUpload)); + byte[] buf = new byte[1024]; + int length = 0; + log.info("-------开始下载:" + url); + while ((length = in.read(buf, 0, buf.length)) != -1) { + fo.write(buf, 0, length); + } + in.close(); + fo.close(); + list.add(imageName); + log.info(imageName + "------下载完成"); + //结束时间 + Date overDate2 = new Date(); + double time = overDate2.getTime() - beginDate2.getTime(); + log.info("-----耗时:" + time / 1000 + "s"); + } + Date overDate = new Date(); + double time = overDate.getTime() - beginDate.getTime(); + log.info("======总耗时:" + time / 1000 + "s"); + return list; + } catch (Exception e) { + log.info("++++++下载失败"); + } + return null; + } + + /** + * 删除本地文件夹图片 + * @param url + */ + public static void deleteImage(String url){ + File file=new File(url); + //判断file是否是文件目录 若是返回TRUE + if (file.isDirectory()){ + //name存储file文件夹中的文件名 + String[] name =file.list(); + for (int i=0; i map,String templateFileName) { + + + String s = System.currentTimeMillis() + ".xlsx"; + // 方案2 根据Map填充 + String fileName = "/usr/local/excel/" + s; + //String fileName = "E:\\shoptest\\" + s; + // 这里 会填充到第一个sheet, 然后文件流会自动关闭 + + ExcelWriterBuilder write = EasyExcel.write(fileName); + + ExcelWriterBuilder excelWriterBuilder = write.withTemplate(templateFileName); + + ExcelWriter build = excelWriterBuilder.build(); + WriteSheet writeSheet = EasyExcel.writerSheet().build(); + + build.fill(map,writeSheet); + build.finish(); + + //EasyExcel.write(fileName).withTemplate(templateFileName).sheet().doFill(map); + return "http://118.24.27.47:2088/excel/"+s; + //return "http://192.168.2.139/"+s; + }*/ + + + public static String exportToProveExcel(Map dataMap, String srcFilePath) throws IOException, InvalidFormatException { + String s = System.currentTimeMillis() + ".xlsx"; + //String path = "E:/shop/"+s; + String path = "/home/sxy/server/industrial_measurement/excel/" + s; + + // 开始转换。利用 transformer 转到Excel + XLSTransformer transformer = new XLSTransformer(); + // 参数:srcFilePath:模板源文件 cMap:需要导出的数据 destFile.getAbsolutePath():下载的目标文件 + transformer.transformXLS(srcFilePath, dataMap, path); + //return "http://192.168.2.139/"+s; + return "http://118.24.27.47:2088/excel/"+s; + } + + /*public static void main(String[] args) throws IOException, InvalidFormatException { + // 模板注意 用{} 来表示你要用的变量 如果本来就有"{","}" 特殊字符 用"\{","\}"代替 + String templateFileName = TestFileUtil.getPath() + "templates" + File.separator + "test.xlsx"; + Map map = new HashMap(); + map.put("name", "张三"); + map.put("sex", "男"); + //simpleFill(map,templateFileName); + HttpServletResponse response = null; + String s = exportToProveExcel(map); + System.out.println(s); + }*/ +} diff --git a/src/main/java/com/xkrs/util/Query.java b/src/main/java/com/xkrs/util/Query.java new file mode 100644 index 0000000..4c777d9 --- /dev/null +++ b/src/main/java/com/xkrs/util/Query.java @@ -0,0 +1,48 @@ +package com.xkrs.util; + +import com.xkrs.dao.DataDictDao; +import com.xkrs.model.entity.DataDict; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.RequestParam; + +import javax.annotation.Resource; +import javax.persistence.criteria.CriteriaBuilder; +import javax.persistence.criteria.CriteriaQuery; +import javax.persistence.criteria.Predicate; +import javax.persistence.criteria.Root; +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: XinYi Song + * @Date: 2022/1/19 13:56 + */ +@Component +public class Query { + + @Resource + private DataDictDao dataDictDao; + + /** + * 动态多条件查询字典信息 + * @return + */ + public List selectDataDict(String dictChineseName,String dictEnglishName) { + Specification specification = new Specification() { + @Override + public Predicate toPredicate(Root root, CriteriaQuery criteriaQuery, CriteriaBuilder criteriaBuilder) { + List list = new ArrayList<>(); + if(dictChineseName != null && !"".equals(dictChineseName)){ + list.add(criteriaBuilder.equal(root.get("dictChineseName").as(String.class), dictChineseName)); + } + if(dictEnglishName != null && !"".equals(dictEnglishName)){ + list.add(criteriaBuilder.equal(root.get("dictEnglishName").as(String.class), dictEnglishName)); + } + Predicate[] predicates = new Predicate[list.size()]; + return criteriaBuilder.and(list.toArray(predicates)); + } + }; + return dataDictDao.findAll(specification); + } +} diff --git a/src/main/java/com/xkrs/util/TestFileUtil.java b/src/main/java/com/xkrs/util/TestFileUtil.java new file mode 100644 index 0000000..f564dc8 --- /dev/null +++ b/src/main/java/com/xkrs/util/TestFileUtil.java @@ -0,0 +1,38 @@ +package com.xkrs.util; + +import java.io.File; +import java.io.InputStream; + +/** + * @Author: XinYi Song + * @Date: 2022/1/17 9:29 + */ +public class TestFileUtil { + public static InputStream getResourcesFileInputStream(String fileName) { + return Thread.currentThread().getContextClassLoader().getResourceAsStream("" + fileName); + } + + public static String getPath() { + return TestFileUtil.class.getResource("/").getPath(); + } + + public static File createNewFile(String pathName) { + File file = new File(getPath() + pathName); + if (file.exists()) { + file.delete(); + } else { + if (!file.getParentFile().exists()) { + file.getParentFile().mkdirs(); + } + } + return file; + } + + public static File readFile(String pathName) { + return new File(getPath() + pathName); + } + + public static File readUserHomeFile(String pathName) { + return new File(System.getProperty("user.home") + File.separator + pathName); + } +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties new file mode 100644 index 0000000..211d463 --- /dev/null +++ b/src/main/resources/application.properties @@ -0,0 +1,54 @@ +server.port = 6810 + +## 数据源配置 +#spring.datasource.url = jdbc:postgresql://localhost:5432/data_model +#spring.datasource.userName = postgres +#spring.datasource.password = 123456 +#spring.datasource.driverClassName = org.postgresql.Driver + +spring.datasource.url = jdbc:mysql://118.24.27.47:3306/data_model?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai +spring.datasource.userName = sxy +spring.datasource.password = sxy123 +spring.datasource.driverClassName = com.mysql.cj.jdbc.Driver + +server.tomcat.uri-encoding=UTF-8 + +# jackson 配置 +spring.jackson.serialization.write-date-keys-as-timestamps=false + +## Hikari连接池设置 +spring.datasource.hikari.auto-commit = true +spring.datasource.hikari.maximum-pool-size = 100 +spring.datasource.hikari.idle-timeout = 10000 +spring.datasource.hikari.minimum-idle = 5 +spring.datasource.hikari.validation-timeout = 3000 + +## Spring Data JPA 配置 +spring.jpa.database = mysql +spring.jpa.database-platform = org.hibernate.dialect.MySQL5InnoDBDialect +spring.jpa.show-sql = false +# 指定 ddl mode (none, validate, create, create-drop, update) +spring.jpa.hibernate.ddl-auto = update +# 命名策略 +spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy +#spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQL95Dialect +#spring.jpa.properties.hibernate.dialect = org.hibernate.spatial.dialect.postgis.PostgisDialect +spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults = false + +## Devtools配置 +spring.devtools.livereload.enabled = true + +## 多国语言配置 +spring.messages.basename = i18n/messages +spring.messages.encoding = UTF-8 + +# 上传文件配置 +spring.servlet.multipart.enabled=true +# 最大文件大小 +spring.servlet.multipart.max-file-size = 100MB +# 最大请求大小 +spring.servlet.multipart.max-request-size = 100MB + +spring.main.allow-bean-definition-overriding = true + + diff --git a/src/main/resources/i18n/messages.properties b/src/main/resources/i18n/messages.properties new file mode 100644 index 0000000..8cfedc5 --- /dev/null +++ b/src/main/resources/i18n/messages.properties @@ -0,0 +1,162 @@ +sys.message.success = 成功 +sys.message.null = 暂时还没有数据 +sys.message.exit = 已存在相关内容,请勿重复操作 +sys.message.user.not_logged_in = 用户未登录 +sys.message.user.login_error = 用户登陆失败 +sys.message.user.account_forbidden = 用户已被禁止 +sys.message.user.account_not_activated = 用户未激活 +sys.message.user.overtime = 用户登录超时 +sys.message.user.no_permission = 用户权限不足 +sys.message.user.already_logged = 用户已经登录 +sys.message.param.null = 参数为空 +sys.message.param.illegal = 参数非法 +sys.message.data.none = 数据为空 +sys.message.data.wrong = 数据错误 +sys.message.process.fail = 处理失败 +sys.message.process.overtime = 处理超时 +sys.message.system.inner_error = 系统内部错误 +sys.message.system.abnormal = 系统异常 +sys.message.system.busy = 系统正忙,请稍后 +sys.message.system.maintain = 系统维护中 +sys.message.database.error = 数据库错误 +sys.message.file.exists = 文件已存在 +sys.message.file.write.error = 文件写入失败 +sys.message.file.read.error = 文件读取失败 + +SysUser.id.blank = 用户id不能为空 +SysUser.userName.blank = 用户名不能为空 +SysUser.userName.length.illegal = 用户名长度不合法 +SysUser.userName.format.illegal = 用户名格式不合法 +SysUser.nickName.length.illegal = 用户昵称长度不合法 +SysUser.userCode.length.illegal = 用户编码长度不合法 +SysUser.userCode.format.illegal = 用户编码含有非法字符 +SysUser.password.blank = 用户密码不能为空 +SysUser.password.length.illegal = 用户密码长度不合法 +SysUser.password.format.illegal = 用户密码格式不合法 +SysUser.sex.num.null = 用户性别数字不能为空 +SysUser.sex.num.illegal = 用户性别数字不合法 +SysUser.telephone.format.illegal = 用户手机号码不合法 +SysUser.email.length.illegal = 用户邮箱长度不合法 +SysUser.email.format.illegal = 用户邮箱格式不合法 +SysUser.admCode.illegal = 用户行政区划代码不合法 +SysUser.address.length.illegal = 用户详细地址长度不合法 +SysUser.birthday.format.illegal = 用户出生日期必须是 yyyy-MM-dd +SysUser.personalSignature.length.illegal = 用户个性签名长度非法 +SysUser.portraitId.illegal = 用户头像id非法 +SysUser.statusCode.null = 用户当前状态编码为空 +SysUser.statusCode.illegal = 用户当前状态编码非法 +SysUser.deleteFlag.null = 用户删除标记不能是空 + +TrajectoryRecord.id.null = id 不能为空 +TrajectoryRecord.startTimeTs.null = startTimeTs 不能为空 + +SatelliteFirePoint.id.null = id 不能为空 +SatelliteFirePoint.fireCode.null = fireCode 不能为空 +SatelliteFirePoint.fireCode.length.illegal = fireCode 长度过长 +SatelliteFirePoint.countyCode.null = countyCode 不能为空 +SatelliteFirePoint.countyCode.length.illegal = countyCode 长度过长 +SatelliteFirePoint.countyName.null = countyName 不能为空 +SatelliteFirePoint.countyName.length.illegal = countyName 长度过长 +SatelliteFirePoint.satelliteType.null = satelliteType 不能为空 +SatelliteFirePoint.fireStatus.null = fireStatus 不能为空 +SatelliteFirePoint.verifyStatus.null = verifyStatus 不能为空 +SatelliteFirePoint.satelliteTimeTs.null = satelliteTimeTs 不能为空 + +PictureFirePoint.id.null = id 不能为空 +PictureFirePoint.fireCode.null = fireCode 不能为空 +PictureFirePoint.fireCode.length.illegal = fireCode 长度过长 +PictureFirePoint.pictureName.length.illegal = pictureName 长度过长 +PictureFirePoint.picturePath.null = picturePath 不能为空 +PictureFirePoint.picturePath.length.illegal = picturePath 长度过长 +PictureFirePoint.memo.length.illegal = memo 长度过长 +PictureFirePoint.size.length.illegal = size 长度过长 +PictureFirePoint.md5.null = md5 不能为空 +PictureFirePoint.md5.length.illegal = md5 长度过长 +PictureFirePoint.shootTimeTs.null = shootTimeTs 不能为空 + +PersonInvestigator.id.null = id 不能为空 +PersonInvestigator.name.null = name 不能为空 +PersonInvestigator.name.length.illegal = name 长度过长 +PersonInvestigator.code.length.illegal = code 长度过长 +PersonInvestigator.telephone.null = telephone 不能为空 +PersonInvestigator.telephone.format.illegal = telephone 格式非法 +PersonInvestigator.sex.null = sex 不能为空 +PersonInvestigator.sex.format.illegal = sex 格式非法 +PersonInvestigator.idCard.length.illegal = idCard 长度过长 +PersonInvestigator.memo.length.illegal = memo 长度过长 +PersonInvestigator.linkUserName.null = linkUserName 不能为空 +PersonInvestigator.linkUserName.format.illegal = linkUserName 格式非法 +PersonInvestigator.password.null = password 不能为空 +PersonInvestigator.password.format.illegal = password 格式非法 +InvestigateFirePoint.verifyTimeTs.null = verifyTimeTs 不能为空 + +InvestigateFirePoint.id.null = id 不能为空 +InvestigateFirePoint.fireCode.null = fireCode 不能为空 +InvestigateFirePoint.fireCode.length.illegal = fireCode 长度过长 +InvestigateFirePoint.countyCode.null = countyCode 不能为空 +InvestigateFirePoint.countyCode.length.illegal = countyCode 长度过长 +InvestigateFirePoint.countyName.null = countyName 不能为空 +InvestigateFirePoint.countyName.length.illegal = countyName 长度过长 +InvestigateFirePoint.address.null = address 不能为空 +InvestigateFirePoint.fireArea.null = fireArea 不能为空 +InvestigateFirePoint.verifyType.null = verifyType 不能为空 +InvestigateFirePoint.satelliteType.null = satelliteType 不能为空 +InvestigateFirePoint.satelliteType.length.illegal = satelliteType 长度过长 + +FileDocument.id.null = id 不能为空 +FileDocument.name.null = name 不能为空 +FileDocument.name.length.illegal = name 长度过长 +FileDocument.category.length.illegal = category 长度过长 +FileDocument.filePath.null = filePath 不能为空 +FileDocument.filePath.length.illegal = filePath 长度过长 +FileDocument.size.length.illegal = size 长度过长 +FileDocument.md5.null = md5 不能为空 +FileDocument.md5.length.illegal = md5 长度过长 +FileDocument.memo.length.illegal = memo 长度过长 +FileDocument.checkingToken.length.illegal = checkingToken 长度过长 + +AppFile.id.null = id 不能为空 +AppFile.name.null = name 不能为空 +AppFile.name.length.illegal = name 长度过长 +AppFile.appPath.null = appPath 不能为空 +AppFile.appPath.length.illegal = appPath 长度过长 +AppFile.versionNumber.null = versionNumber 不能为空 +AppFile.versionNumber.length.illegal = versionNumber 长度过长 +AppFile.versionNumber.format.illegal = versionNumber 格式不合法 +AppFile.size.null = size 不能为空 +AppFile.size.length.illegal = size 长度过长 +AppFile.md5.null = md5 不能为空 +AppFile.md5.length.illegal = md5 长度过长 +AppFile.memo.length.illegal = memo 长度过长 + +RealFirePoint.id.null = id 不能为空 +RealFirePoint.fireCode.null = fireCode 不能为空 +RealFirePoint.fireCode.length.illegal = fireCode 不合法 +RealFirePoint.countyCode.null = countyCode 不能为空 +RealFirePoint.countyCode.length.illegal = countyCode 不合法 +RealFirePoint.countyName.null = countyName 不能为空 +RealFirePoint.countyName.length.illegal = countyName 不合法 +RealFirePoint.address.null = address 不能为空 +RealFirePoint.address.length.illegal = address 不合法 +RealFirePoint.fireArea.null = fireArea 不能为空 +RealFirePoint.verifyTimeTs.null = verifyTimeTs 不能为空 +RealFirePoint.verifyType.null = verifyType 不能为空 + +InvestigationTeam.id.null = id 不能为空 +InvestigationTeam.teamName.null = teamName 不能为空 +InvestigationTeam.teamName.length.illegal = teamName 长度过长 +InvestigationTeam.memo.length.illegal = memo 长度过长 +InvestigationTeam.userName.null = userName 不能为空 +InvestigationTeam.userName.length.illegal = userName 长度过长 +InvestigationTeam.userRealName.null = userRealName 不能为空 +InvestigationTeam.userRealName.length.illegal = userRealName 长度过长 + +RelTeamInvestigator.id.null = id 不能为空 +RelTeamInvestigator.teamCode.null = teamCode 不能为空 +RelTeamInvestigator.teamCode.length.illegal = teamCode 长度过长 +RelTeamInvestigator.userName.null = userName 不能为空 +RelTeamInvestigator.userName.length.illegal = userName 长度过长 +RelTeamInvestigator.teamDeputy.null = teamDeputy 不能为空 +RelTeamInvestigator.memo.length.illegal = memo 长度过长 +RelTeamInvestigator.userRealName.null = userRealName 不能为空 +RelTeamInvestigator.userRealName.length.illegal = userRealName 长度过长 diff --git a/src/main/resources/i18n/messages_en_US.properties b/src/main/resources/i18n/messages_en_US.properties new file mode 100644 index 0000000..9b23e85 --- /dev/null +++ b/src/main/resources/i18n/messages_en_US.properties @@ -0,0 +1,162 @@ +sys.message.success = success +sys.message.null = null +sys.message.exit = data already exists +sys.message.user.not_logged_in = user not logged in +sys.message.user.login_error = user login failed +sys.message.user.account_forbidden = this account is forbidden +sys.message.user.account_not_activated = this account not activated +sys.message.user.overtime = user login timeout +sys.message.user.no_permission = user permission denied +sys.message.user.already_logged = user already logged +sys.message.param.null = parameter is null +sys.message.param.illegal = parameter is illegal +sys.message.data.none = data is none +sys.message.data.wrong = data is wrong +sys.message.process.fail = process fail +sys.message.process.overtime = process overtime +sys.message.system.inner_error = system inner error +sys.message.system.abnormal = system abnormal +sys.message.system.busy = system is busy +sys.message.system.maintain = system maintenance +sys.message.database.error = database error +sys.message.file.exists = file exists +sys.message.file.write.error = file write error +sys.message.file.read.error = file read error + +SysUser.id.blank = user id can't be blank +SysUser.userName.blank = user name can't be blank +SysUser.userName.length.illegal = user name length illegal +SysUser.userName.format.illegal = user name format illegal +SysUser.nickName.length.illegal = user nickname length illegal +SysUser.userCode.length.illegal = user code length illegal +SysUser.userCode.format.illegal = user code cantains illegal character +SysUser.password.blank = user password can't be blank +SysUser.password.length.illegal = user password length illegal +SysUser.password.format.illegal = user password format illegal +SysUser.sex.num.null = user sex num can't be blank +SysUser.sex.num.illegal = user sex num illegal +SysUser.telephone.format.illegal = user telephone format illegal +SysUser.email.length.illegal = user email length illegal +SysUser.email.format.illegal = user email format illegal +SysUser.admCode.illegal = user administrative area code illegal +SysUser.address.length.illegal = user address length illegal +SysUser.birthday.format.illegal = user birthday must be yyyy-MM-dd +SysUser.personalSignature.length.illegal = user personal signature length illegal +SysUser.portraitId.illegal = user portrait id illegal +SysUser.statusCode.null = user current status code can't be blank +SysUser.statusCode.illegal = user current status code illegal +SysUser.deleteFlag.null = user delete flag can't be null + +TrajectoryRecord.id.null = id can't be null +TrajectoryRecord.startTimeTs.null = startTimeTs can't be null + +SatelliteFirePoint.id.null = id can't be blank +SatelliteFirePoint.fireCode.null = fireCode can't be blank +SatelliteFirePoint.fireCode.length.illegal = fireCode length illegal +SatelliteFirePoint.countyCode.null = countyCode can't be blank +SatelliteFirePoint.countyCode.length.illegal = countyCode length illegal +SatelliteFirePoint.countyName.null = countyName can't be blank +SatelliteFirePoint.countyName.length.illegal = countyName length illegal +SatelliteFirePoint.satelliteType.null = satelliteType can't be blank +SatelliteFirePoint.fireStatus.null = fireStatus can't be blank +SatelliteFirePoint.verifyStatus.null = verifyStatus can't be blank +SatelliteFirePoint.satelliteTimeTs.null = satelliteTimeTs can't be blank + +PictureFirePoint.id.null = id can't be blank +PictureFirePoint.fireCode.null = fireCode can't be blank +PictureFirePoint.fireCode.length.illegal = fireCode length illegal +PictureFirePoint.pictureName.length.illegal = pictureName length illegal +PictureFirePoint.picturePath.null = picturePath can't be blank +PictureFirePoint.picturePath.length.illegal = picturePath length illegal +PictureFirePoint.memo.length.illegal = memo length illegal +PictureFirePoint.size.length.illegal = size length illegal +PictureFirePoint.md5.null = md5 can't be blank +PictureFirePoint.md5.length.illegal = md5 length illegal +PictureFirePoint.shootTimeTs.null = shootTimeTs can't be blank + +PersonInvestigator.id.null = id can't be blank +PersonInvestigator.name.null = name can't be blank +PersonInvestigator.name.length.illegal = name length illegal +PersonInvestigator.code.length.illegal = code length illegal +PersonInvestigator.telephone.null = telephone can't be blank +PersonInvestigator.telephone.format.illegal = telephone format illegal +PersonInvestigator.sex.null = sex format can't be blank +PersonInvestigator.sex.format.illegal = sex format illegal +PersonInvestigator.idCard.length.illegal = idCard length illegal +PersonInvestigator.memo.length.illegal = memo length illegal +PersonInvestigator.linkUserName.null = linkUserName can't be blank +PersonInvestigator.linkUserName.format.illegal = linkUserName format illegal +PersonInvestigator.password.null = password can't be blank +PersonInvestigator.password.format.illegal = password format +InvestigateFirePoint.verifyTimeTs.null = verifyTimeTs can't be blank + +InvestigateFirePoint.id.null = id can't be blank +InvestigateFirePoint.fireCode.null = fireCode can't be blank +InvestigateFirePoint.fireCode.length.illegal = fireCode length illegal +InvestigateFirePoint.countyCode.null = countyCode can't be blank +InvestigateFirePoint.countyCode.length.illegal = countyCode length illegal +InvestigateFirePoint.countyName.null = countyName can't be blank +InvestigateFirePoint.countyName.length.illegal = countyName length illegal +InvestigateFirePoint.address.null = address can't be blank +InvestigateFirePoint.fireArea.null = fireArea can't be blank +InvestigateFirePoint.verifyType.null = verifyType can't be blank +InvestigateFirePoint.satelliteType.null = satelliteType can't be blank +InvestigateFirePoint.satelliteType.length.illegal = satelliteType length illegal + +FileDocument.id.null = id can't be blank +FileDocument.name.null = name can't be blank +FileDocument.name.length.illegal = name length illegal +FileDocument.category.length.illegal = category length illegal +FileDocument.filePath.null = filePath can't be blank +FileDocument.filePath.length.illegal = filePath length illegal +FileDocument.size.length.illegal = size length illegal +FileDocument.md5.null = md5 can't be blank +FileDocument.md5.length.illegal = md5 length illegal +FileDocument.memo.length.illegal = memo length illegal +FileDocument.checkingToken.length.illegal = checkingToken length illegal + +AppFile.id.null = id can't be blank +AppFile.name.null = name can't be blank +AppFile.name.length.illegal = name length illegal +AppFile.appPath.null = appPath can't be blank +AppFile.appPath.length.illegal = appPath length illegal +AppFile.versionNumber.null = versionNumber can't be blank +AppFile.versionNumber.length.illegal = versionNumber length illegal +AppFile.versionNumber.format.illegal = versionNumber illegal +AppFile.size.null = size can't be blank +AppFile.size.length.illegal = size length illegal +AppFile.md5.null = md5 can't be blank +AppFile.md5.length.illegal = md5 length illegal +AppFile.memo.length.illegal = memo length illegal + +RealFirePoint.id.null = id can't be blank +RealFirePoint.fireCode.null = fireCode can't be blank +RealFirePoint.fireCode.length.illegal = fireCode illegal +RealFirePoint.countyCode.null = countyCode can't be blank +RealFirePoint.countyCode.length.illegal = countyCode +RealFirePoint.countyName.null = countyName can't be blank +RealFirePoint.countyName.length.illegal = countyName illegal +RealFirePoint.address.null = address can't be blank +RealFirePoint.address.length.illegal = address illegal +RealFirePoint.fireArea.null = fireArea can't be blank +RealFirePoint.verifyTimeTs.null = verifyTimeTs can't be blank +RealFirePoint.verifyType.null = verifyType can't be blank + +InvestigationTeam.id.null = id can't be blank +InvestigationTeam.teamName.null = teamName can't be blank +InvestigationTeam.teamName.length.illegal = teamName length illegal +InvestigationTeam.memo.length.illegal = memo length illegal +InvestigationTeam.userName.null = userName can't be blank +InvestigationTeam.userName.length.illegal = userName length illegal +InvestigationTeam.userRealName.null = userRealName can't be blank +InvestigationTeam.userRealName.length.illegal = userRealName length illegal + +RelTeamInvestigator.id.null = id can't be blank +RelTeamInvestigator.teamCode.null = teamCode can't be blank +RelTeamInvestigator.teamCode.length.illegal = teamCode length illegal +RelTeamInvestigator.userName.null = userName can't be blank +RelTeamInvestigator.userName.length.illegal = userName length illegal +RelTeamInvestigator.teamDeputy.null = teamDeputy can't be blank +RelTeamInvestigator.memo.length.illegal = memo length illegal +RelTeamInvestigator.userRealName.null = userRealName can't be blank +RelTeamInvestigator.userRealName.length.illegal = userRealName length illegal diff --git a/src/main/resources/i18n/messages_zh_CN.properties b/src/main/resources/i18n/messages_zh_CN.properties new file mode 100644 index 0000000..8cfedc5 --- /dev/null +++ b/src/main/resources/i18n/messages_zh_CN.properties @@ -0,0 +1,162 @@ +sys.message.success = 成功 +sys.message.null = 暂时还没有数据 +sys.message.exit = 已存在相关内容,请勿重复操作 +sys.message.user.not_logged_in = 用户未登录 +sys.message.user.login_error = 用户登陆失败 +sys.message.user.account_forbidden = 用户已被禁止 +sys.message.user.account_not_activated = 用户未激活 +sys.message.user.overtime = 用户登录超时 +sys.message.user.no_permission = 用户权限不足 +sys.message.user.already_logged = 用户已经登录 +sys.message.param.null = 参数为空 +sys.message.param.illegal = 参数非法 +sys.message.data.none = 数据为空 +sys.message.data.wrong = 数据错误 +sys.message.process.fail = 处理失败 +sys.message.process.overtime = 处理超时 +sys.message.system.inner_error = 系统内部错误 +sys.message.system.abnormal = 系统异常 +sys.message.system.busy = 系统正忙,请稍后 +sys.message.system.maintain = 系统维护中 +sys.message.database.error = 数据库错误 +sys.message.file.exists = 文件已存在 +sys.message.file.write.error = 文件写入失败 +sys.message.file.read.error = 文件读取失败 + +SysUser.id.blank = 用户id不能为空 +SysUser.userName.blank = 用户名不能为空 +SysUser.userName.length.illegal = 用户名长度不合法 +SysUser.userName.format.illegal = 用户名格式不合法 +SysUser.nickName.length.illegal = 用户昵称长度不合法 +SysUser.userCode.length.illegal = 用户编码长度不合法 +SysUser.userCode.format.illegal = 用户编码含有非法字符 +SysUser.password.blank = 用户密码不能为空 +SysUser.password.length.illegal = 用户密码长度不合法 +SysUser.password.format.illegal = 用户密码格式不合法 +SysUser.sex.num.null = 用户性别数字不能为空 +SysUser.sex.num.illegal = 用户性别数字不合法 +SysUser.telephone.format.illegal = 用户手机号码不合法 +SysUser.email.length.illegal = 用户邮箱长度不合法 +SysUser.email.format.illegal = 用户邮箱格式不合法 +SysUser.admCode.illegal = 用户行政区划代码不合法 +SysUser.address.length.illegal = 用户详细地址长度不合法 +SysUser.birthday.format.illegal = 用户出生日期必须是 yyyy-MM-dd +SysUser.personalSignature.length.illegal = 用户个性签名长度非法 +SysUser.portraitId.illegal = 用户头像id非法 +SysUser.statusCode.null = 用户当前状态编码为空 +SysUser.statusCode.illegal = 用户当前状态编码非法 +SysUser.deleteFlag.null = 用户删除标记不能是空 + +TrajectoryRecord.id.null = id 不能为空 +TrajectoryRecord.startTimeTs.null = startTimeTs 不能为空 + +SatelliteFirePoint.id.null = id 不能为空 +SatelliteFirePoint.fireCode.null = fireCode 不能为空 +SatelliteFirePoint.fireCode.length.illegal = fireCode 长度过长 +SatelliteFirePoint.countyCode.null = countyCode 不能为空 +SatelliteFirePoint.countyCode.length.illegal = countyCode 长度过长 +SatelliteFirePoint.countyName.null = countyName 不能为空 +SatelliteFirePoint.countyName.length.illegal = countyName 长度过长 +SatelliteFirePoint.satelliteType.null = satelliteType 不能为空 +SatelliteFirePoint.fireStatus.null = fireStatus 不能为空 +SatelliteFirePoint.verifyStatus.null = verifyStatus 不能为空 +SatelliteFirePoint.satelliteTimeTs.null = satelliteTimeTs 不能为空 + +PictureFirePoint.id.null = id 不能为空 +PictureFirePoint.fireCode.null = fireCode 不能为空 +PictureFirePoint.fireCode.length.illegal = fireCode 长度过长 +PictureFirePoint.pictureName.length.illegal = pictureName 长度过长 +PictureFirePoint.picturePath.null = picturePath 不能为空 +PictureFirePoint.picturePath.length.illegal = picturePath 长度过长 +PictureFirePoint.memo.length.illegal = memo 长度过长 +PictureFirePoint.size.length.illegal = size 长度过长 +PictureFirePoint.md5.null = md5 不能为空 +PictureFirePoint.md5.length.illegal = md5 长度过长 +PictureFirePoint.shootTimeTs.null = shootTimeTs 不能为空 + +PersonInvestigator.id.null = id 不能为空 +PersonInvestigator.name.null = name 不能为空 +PersonInvestigator.name.length.illegal = name 长度过长 +PersonInvestigator.code.length.illegal = code 长度过长 +PersonInvestigator.telephone.null = telephone 不能为空 +PersonInvestigator.telephone.format.illegal = telephone 格式非法 +PersonInvestigator.sex.null = sex 不能为空 +PersonInvestigator.sex.format.illegal = sex 格式非法 +PersonInvestigator.idCard.length.illegal = idCard 长度过长 +PersonInvestigator.memo.length.illegal = memo 长度过长 +PersonInvestigator.linkUserName.null = linkUserName 不能为空 +PersonInvestigator.linkUserName.format.illegal = linkUserName 格式非法 +PersonInvestigator.password.null = password 不能为空 +PersonInvestigator.password.format.illegal = password 格式非法 +InvestigateFirePoint.verifyTimeTs.null = verifyTimeTs 不能为空 + +InvestigateFirePoint.id.null = id 不能为空 +InvestigateFirePoint.fireCode.null = fireCode 不能为空 +InvestigateFirePoint.fireCode.length.illegal = fireCode 长度过长 +InvestigateFirePoint.countyCode.null = countyCode 不能为空 +InvestigateFirePoint.countyCode.length.illegal = countyCode 长度过长 +InvestigateFirePoint.countyName.null = countyName 不能为空 +InvestigateFirePoint.countyName.length.illegal = countyName 长度过长 +InvestigateFirePoint.address.null = address 不能为空 +InvestigateFirePoint.fireArea.null = fireArea 不能为空 +InvestigateFirePoint.verifyType.null = verifyType 不能为空 +InvestigateFirePoint.satelliteType.null = satelliteType 不能为空 +InvestigateFirePoint.satelliteType.length.illegal = satelliteType 长度过长 + +FileDocument.id.null = id 不能为空 +FileDocument.name.null = name 不能为空 +FileDocument.name.length.illegal = name 长度过长 +FileDocument.category.length.illegal = category 长度过长 +FileDocument.filePath.null = filePath 不能为空 +FileDocument.filePath.length.illegal = filePath 长度过长 +FileDocument.size.length.illegal = size 长度过长 +FileDocument.md5.null = md5 不能为空 +FileDocument.md5.length.illegal = md5 长度过长 +FileDocument.memo.length.illegal = memo 长度过长 +FileDocument.checkingToken.length.illegal = checkingToken 长度过长 + +AppFile.id.null = id 不能为空 +AppFile.name.null = name 不能为空 +AppFile.name.length.illegal = name 长度过长 +AppFile.appPath.null = appPath 不能为空 +AppFile.appPath.length.illegal = appPath 长度过长 +AppFile.versionNumber.null = versionNumber 不能为空 +AppFile.versionNumber.length.illegal = versionNumber 长度过长 +AppFile.versionNumber.format.illegal = versionNumber 格式不合法 +AppFile.size.null = size 不能为空 +AppFile.size.length.illegal = size 长度过长 +AppFile.md5.null = md5 不能为空 +AppFile.md5.length.illegal = md5 长度过长 +AppFile.memo.length.illegal = memo 长度过长 + +RealFirePoint.id.null = id 不能为空 +RealFirePoint.fireCode.null = fireCode 不能为空 +RealFirePoint.fireCode.length.illegal = fireCode 不合法 +RealFirePoint.countyCode.null = countyCode 不能为空 +RealFirePoint.countyCode.length.illegal = countyCode 不合法 +RealFirePoint.countyName.null = countyName 不能为空 +RealFirePoint.countyName.length.illegal = countyName 不合法 +RealFirePoint.address.null = address 不能为空 +RealFirePoint.address.length.illegal = address 不合法 +RealFirePoint.fireArea.null = fireArea 不能为空 +RealFirePoint.verifyTimeTs.null = verifyTimeTs 不能为空 +RealFirePoint.verifyType.null = verifyType 不能为空 + +InvestigationTeam.id.null = id 不能为空 +InvestigationTeam.teamName.null = teamName 不能为空 +InvestigationTeam.teamName.length.illegal = teamName 长度过长 +InvestigationTeam.memo.length.illegal = memo 长度过长 +InvestigationTeam.userName.null = userName 不能为空 +InvestigationTeam.userName.length.illegal = userName 长度过长 +InvestigationTeam.userRealName.null = userRealName 不能为空 +InvestigationTeam.userRealName.length.illegal = userRealName 长度过长 + +RelTeamInvestigator.id.null = id 不能为空 +RelTeamInvestigator.teamCode.null = teamCode 不能为空 +RelTeamInvestigator.teamCode.length.illegal = teamCode 长度过长 +RelTeamInvestigator.userName.null = userName 不能为空 +RelTeamInvestigator.userName.length.illegal = userName 长度过长 +RelTeamInvestigator.teamDeputy.null = teamDeputy 不能为空 +RelTeamInvestigator.memo.length.illegal = memo 长度过长 +RelTeamInvestigator.userRealName.null = userRealName 不能为空 +RelTeamInvestigator.userRealName.length.illegal = userRealName 长度过长 diff --git a/src/main/resources/templates/a.xlsx b/src/main/resources/templates/a.xlsx new file mode 100644 index 0000000..7d41989 Binary files /dev/null and b/src/main/resources/templates/a.xlsx differ diff --git a/src/main/resources/templates/test.xlsx b/src/main/resources/templates/test.xlsx new file mode 100644 index 0000000..6fa30ec Binary files /dev/null and b/src/main/resources/templates/test.xlsx differ