commit 8a59fcaf8df23c5b3df0f9ae40ee32a2c034674d Author: F嘉阳 Date: Fri Jun 22 19:34:56 2018 +0800 ES操作测试通过 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..82eca33 --- /dev/null +++ b/.gitignore @@ -0,0 +1,25 @@ +/target/ +!.mvn/wrapper/maven-wrapper.jar + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/build/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ \ No newline at end of file diff --git a/.mvn/wrapper/maven-wrapper.jar b/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000..9cc84ea 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..b573bb5 --- /dev/null +++ b/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1 @@ +distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.5.3/apache-maven-3.5.3-bin.zip diff --git a/README.md b/README.md new file mode 100644 index 0000000..9992b7e --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +### 配置 +运行前配置:运行前必须先进行用户表的单元测试,以写入测试用户数据 \ No newline at end of file diff --git a/mvnw b/mvnw new file mode 100644 index 0000000..5bf251c --- /dev/null +++ b/mvnw @@ -0,0 +1,225 @@ +#!/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 +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven2 Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + export JAVA_HOME="`/usr/libexec/java_home`" + else + export JAVA_HOME="/Library/Java/Home" + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Migwn, 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)`" + # TODO classpath? +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=`cd "$wdir/.."; pwd` + fi + # end of workaround + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=`find_maven_basedir "$(pwd)"` +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +echo $MAVEN_PROJECTBASEDIR +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 + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/mvnw.cmd b/mvnw.cmd new file mode 100644 index 0000000..019bd74 --- /dev/null +++ b/mvnw.cmd @@ -0,0 +1,143 @@ +@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 http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven2 Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" + +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..988037f --- /dev/null +++ b/pom.xml @@ -0,0 +1,71 @@ + + + 4.0.0 + + top.fjy8018 + estest + 0.0.1-SNAPSHOT + jar + + estest + Demo Elasticsearch project for Spring Data Jpa + + + org.springframework.boot + spring-boot-starter-parent + 2.0.3.RELEASE + + + + + UTF-8 + UTF-8 + 1.8 + + + + + mysql + mysql-connector-java + + + org.springframework.boot + spring-boot-starter-data-jpa + + + org.springframework.boot + spring-boot-starter-data-elasticsearch + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-thymeleaf + + + + org.projectlombok + lombok + true + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + diff --git a/sql.sql b/sql.sql new file mode 100644 index 0000000..4697546 --- /dev/null +++ b/sql.sql @@ -0,0 +1,71 @@ +DROP DATABASE db_fileupload; +DROP DATABASE db_sysdemo1; +DROP DATABASE db_sysdemo2; +CREATE DATABASE db_fileupload DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; + +CREATE TABLE db_fileupload.file_info ( + file_id VARCHAR(32) NOT NULL PRIMARY KEY, + user_id VARCHAR(32), + create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP + COMMENT '创建时间', + file_name VARCHAR(255), + file_size VARCHAR(32), + file_path VARCHAR(128) +) + COMMENT = '文件表' + ENGINE = InnoDB; + +CREATE DATABASE db_sysdemo1 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; +CREATE TABLE db_sysdemo1.user_info ( + user_id VARCHAR(32) NOT NULL, + username VARCHAR(32) NOT NULL, + password VARCHAR(32) NOT NULL, + create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP + COMMENT '创建时间', + update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE current_timestamp + COMMENT '更新时间', + PRIMARY KEY (user_id) +) + COMMENT '系统A用户信息表'; + +CREATE TABLE db_sysdemo1.admin_info +( + admin_id VARCHAR(32) NOT NULL PRIMARY KEY , + user_id VARCHAR(32) NOT NULL, + create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP + COMMENT '创建时间', + update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE current_timestamp + COMMENT '更新时间', + CONSTRAINT FK_adminuser FOREIGN KEY (user_id) REFERENCES user_info (user_id) +) + COMMENT = '管理员表'; + +CREATE DATABASE db_sysdemo2 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; +CREATE TABLE db_sysdemo2.user_info ( + user_id VARCHAR(32) NOT NULL, + username VARCHAR(32) NOT NULL, + password VARCHAR(32) NOT NULL, + create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP + COMMENT '创建时间', + update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE current_timestamp + COMMENT '更新时间', + PRIMARY KEY (user_id) +) + COMMENT '系统B用户信息表'; + +CREATE TABLE db_sysdemo2.admin_info +( + admin_id VARCHAR(32) NOT NULL PRIMARY KEY , + user_id VARCHAR(32) NOT NULL, + create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP + COMMENT '创建时间', + update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE current_timestamp + COMMENT '更新时间', + CONSTRAINT FK_adminuser FOREIGN KEY (user_id) REFERENCES user_info (user_id) +) + COMMENT = '管理员表'; + +GRANT ALL ON db_fileupload.* TO trs@localhost IDENTIFIED BY 'fileupload'; +GRANT ALL ON db_sysdemo1.* TO trs@localhost IDENTIFIED BY 'fileupload'; +GRANT ALL ON db_sysdemo2.* TO trs@localhost IDENTIFIED BY 'fileupload'; +flush privileges; \ No newline at end of file diff --git a/src/main/java/top/fjy8018/fileupload/EstestApplication.java b/src/main/java/top/fjy8018/fileupload/EstestApplication.java new file mode 100644 index 0000000..0a6a56a --- /dev/null +++ b/src/main/java/top/fjy8018/fileupload/EstestApplication.java @@ -0,0 +1,12 @@ +package top.fjy8018.fileupload; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class EstestApplication { + + public static void main(String[] args) { + SpringApplication.run(EstestApplication.class, args); + } +} diff --git a/src/main/java/top/fjy8018/fileupload/VO/ResultVO.java b/src/main/java/top/fjy8018/fileupload/VO/ResultVO.java new file mode 100644 index 0000000..49eb20b --- /dev/null +++ b/src/main/java/top/fjy8018/fileupload/VO/ResultVO.java @@ -0,0 +1,25 @@ +package top.fjy8018.fileupload.VO; + +import lombok.Data; + +import java.io.Serializable; + +/** + * http请求返回的最外层对象 ViewObject + * @author F嘉阳 + * @date 2018-06-22 09:34 + */ +@Data +public class ResultVO implements Serializable{ + + private static final long serialVersionUID = 2015767657112436515L; + + /** 错误码. **/ + private Integer code; + + /** 提示信息. **/ + private String msg; + + /** 返回的内容. **/ + private T data; +} diff --git a/src/main/java/top/fjy8018/fileupload/config/ServerPropertiesConfig.java b/src/main/java/top/fjy8018/fileupload/config/ServerPropertiesConfig.java new file mode 100644 index 0000000..b9a53fd --- /dev/null +++ b/src/main/java/top/fjy8018/fileupload/config/ServerPropertiesConfig.java @@ -0,0 +1,20 @@ +package top.fjy8018.fileupload.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * @author F嘉阳 + * @date 2018-06-22 09:42 + */ +@Data +@Component +@ConfigurationProperties(prefix = "serverproperties") +public class ServerPropertiesConfig { + + private String portNum; + + private String filePath; + +} diff --git a/src/main/java/top/fjy8018/fileupload/dataobject/AdminInfo.java b/src/main/java/top/fjy8018/fileupload/dataobject/AdminInfo.java new file mode 100644 index 0000000..5147d16 --- /dev/null +++ b/src/main/java/top/fjy8018/fileupload/dataobject/AdminInfo.java @@ -0,0 +1,25 @@ +package top.fjy8018.fileupload.dataobject; + +import lombok.Data; +import org.hibernate.annotations.DynamicUpdate; + +import javax.persistence.Entity; +import javax.persistence.Id; + +/** + * @author F嘉阳 + * @date 2018-06-22 10:49 + */ +@Data +@Entity +@DynamicUpdate +public class AdminInfo { + @Id + private String adminId; + + private String userId; + + private String createTime; + + private String updateTime; +} diff --git a/src/main/java/top/fjy8018/fileupload/dataobject/FileInfo.java b/src/main/java/top/fjy8018/fileupload/dataobject/FileInfo.java new file mode 100644 index 0000000..f6ffcd1 --- /dev/null +++ b/src/main/java/top/fjy8018/fileupload/dataobject/FileInfo.java @@ -0,0 +1,32 @@ +package top.fjy8018.fileupload.dataobject; + +import lombok.Data; +import org.hibernate.annotations.DynamicUpdate; + +import javax.persistence.Id; +import java.util.Date; + +/** + * 文件表 + * @author F嘉阳 + * @date 2018-06-22 10:43 + */ +@Data +/*@Entity*/ +@DynamicUpdate +public class FileInfo { + + @Id + private String fileId; + + private String userId; + + private Date createTime; + + private String fileName; + + private String fileSize; + + private String filePath; + +} diff --git a/src/main/java/top/fjy8018/fileupload/dataobject/UserInfo.java b/src/main/java/top/fjy8018/fileupload/dataobject/UserInfo.java new file mode 100644 index 0000000..27250a2 --- /dev/null +++ b/src/main/java/top/fjy8018/fileupload/dataobject/UserInfo.java @@ -0,0 +1,31 @@ +package top.fjy8018.fileupload.dataobject; + +import lombok.Data; +import org.hibernate.annotations.DynamicUpdate; + +import javax.persistence.Entity; +import javax.persistence.Id; +import java.util.Date; + +/** + * 系统A用户表 + * @author F嘉阳 + * @date 2018-06-22 10:46 + */ +@Data +@Entity +@DynamicUpdate +public class UserInfo { + + @Id + private String userId; + + private String username; + + private String password; + + private Date createTime; + + private Date updateTime; + +} diff --git a/src/main/java/top/fjy8018/fileupload/dataobject/es/EsFileInfo.java b/src/main/java/top/fjy8018/fileupload/dataobject/es/EsFileInfo.java new file mode 100644 index 0000000..a6e49d9 --- /dev/null +++ b/src/main/java/top/fjy8018/fileupload/dataobject/es/EsFileInfo.java @@ -0,0 +1,50 @@ +package top.fjy8018.fileupload.dataobject.es; + +import lombok.Data; +import org.springframework.data.annotation.Id; +import org.springframework.data.elasticsearch.annotations.Document; + +import java.io.Serializable; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.concurrent.TimeUnit; + +/** + * @author F嘉阳 + * @date 2018-06-22 11:34 + */ +@Data +@Document(indexName = "file",type = "file") +public class EsFileInfo implements Serializable { + + private static final long serialVersionUID = 3216398036847369019L; + + @Id + private String fileId; + + private String userId; + + private String createTime = currentTimeString(); + + private String fileName; + + private String fileSize; + + private String filePath; + + protected EsFileInfo() { + } + + public EsFileInfo(String userId, String fileName, String fileSize, String filePath) { + this.userId = userId; + this.fileName = fileName; + this.fileSize = fileSize; + this.filePath = filePath; + } + + public String currentTimeString(){ + Date date = new Date(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + return sdf.format(date); + } +} diff --git a/src/main/java/top/fjy8018/fileupload/enums/CodeEnum.java b/src/main/java/top/fjy8018/fileupload/enums/CodeEnum.java new file mode 100644 index 0000000..c6ec33c --- /dev/null +++ b/src/main/java/top/fjy8018/fileupload/enums/CodeEnum.java @@ -0,0 +1,6 @@ +package top.fjy8018.fileupload.enums; + +public interface CodeEnum { + T getCode(); + T getMsg(); +} diff --git a/src/main/java/top/fjy8018/fileupload/enums/ResultVOEnum.java b/src/main/java/top/fjy8018/fileupload/enums/ResultVOEnum.java new file mode 100644 index 0000000..0b6dc8b --- /dev/null +++ b/src/main/java/top/fjy8018/fileupload/enums/ResultVOEnum.java @@ -0,0 +1,38 @@ +package top.fjy8018.fileupload.enums; + +/** + * 异常枚举类 + * @author F嘉阳 + * @date 2018-06-22 09:28 + */ +public enum ResultVOEnum implements CodeEnum { + UPLOAD_SUCCESS(0,"上传成功"), + UPLOAD_FAIL(-1,"上传失败"), + ; + + private Integer code; + private String msg; + + ResultVOEnum(Integer code, String msg) { + this.code = code; + this.msg = msg; + } + + @Override + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + @Override + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } +} diff --git a/src/main/java/top/fjy8018/fileupload/exception/FileUploadException.java b/src/main/java/top/fjy8018/fileupload/exception/FileUploadException.java new file mode 100644 index 0000000..52e16fd --- /dev/null +++ b/src/main/java/top/fjy8018/fileupload/exception/FileUploadException.java @@ -0,0 +1,25 @@ +package top.fjy8018.fileupload.exception; + +import lombok.Getter; +import top.fjy8018.fileupload.enums.ResultVOEnum; + +/** + * 文件上传异常类 + * @author F嘉阳 + * @date 2018-06-22 09:27 + */ +@Getter +public class FileUploadException extends RuntimeException { + + private Integer code; + + /** + * Constructs a new runtime exception with {@code null} as its + * detail message. The cause is not initialized, and may subsequently be + * initialized by a call to {@link #initCause}. + */ + public FileUploadException(ResultVOEnum resultVOEnum) { + super(resultVOEnum.getMsg()); + this.code = resultVOEnum.getCode(); + } +} diff --git a/src/main/java/top/fjy8018/fileupload/handler/ExceptionHandle.java b/src/main/java/top/fjy8018/fileupload/handler/ExceptionHandle.java new file mode 100644 index 0000000..5e2a078 --- /dev/null +++ b/src/main/java/top/fjy8018/fileupload/handler/ExceptionHandle.java @@ -0,0 +1,25 @@ +package top.fjy8018.fileupload.handler; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; +import top.fjy8018.fileupload.VO.ResultVO; +import top.fjy8018.fileupload.exception.FileUploadException; +import top.fjy8018.fileupload.util.ResultVOUtil; + +/** + * 异常处理 + * @author F嘉阳 + * @date 2018-06-22 09:32 + */ +@Slf4j +@ControllerAdvice +public class ExceptionHandle { + + @ResponseBody + @ExceptionHandler(value = FileUploadException.class) + public ResultVO handle(FileUploadException e){ + return ResultVOUtil.error(e.getCode(),e.getMessage()); + } +} diff --git a/src/main/java/top/fjy8018/fileupload/repository/AdminInfoRepository.java b/src/main/java/top/fjy8018/fileupload/repository/AdminInfoRepository.java new file mode 100644 index 0000000..d241e2d --- /dev/null +++ b/src/main/java/top/fjy8018/fileupload/repository/AdminInfoRepository.java @@ -0,0 +1,7 @@ +package top.fjy8018.fileupload.repository; + +import org.springframework.data.jpa.repository.JpaRepository; +import top.fjy8018.fileupload.dataobject.AdminInfo; + +public interface AdminInfoRepository extends JpaRepository { +} diff --git a/src/main/java/top/fjy8018/fileupload/repository/FileInfoRepository.java b/src/main/java/top/fjy8018/fileupload/repository/FileInfoRepository.java new file mode 100644 index 0000000..0aaad11 --- /dev/null +++ b/src/main/java/top/fjy8018/fileupload/repository/FileInfoRepository.java @@ -0,0 +1,11 @@ + +package top.fjy8018.fileupload.repository; +/* +import org.springframework.data.jpa.repository.JpaRepository; +import top.fjy8018.fileupload.dataobject.FileInfo; + +public interface FileInfoRepository extends JpaRepository { +} +*/ +public interface FileInfoRepository { +} diff --git a/src/main/java/top/fjy8018/fileupload/repository/UserInfoRepository.java b/src/main/java/top/fjy8018/fileupload/repository/UserInfoRepository.java new file mode 100644 index 0000000..dc28f82 --- /dev/null +++ b/src/main/java/top/fjy8018/fileupload/repository/UserInfoRepository.java @@ -0,0 +1,7 @@ +package top.fjy8018.fileupload.repository; + +import org.springframework.data.jpa.repository.JpaRepository; +import top.fjy8018.fileupload.dataobject.UserInfo; + +public interface UserInfoRepository extends JpaRepository { +} diff --git a/src/main/java/top/fjy8018/fileupload/repository/es/EsFileInfoRepository.java b/src/main/java/top/fjy8018/fileupload/repository/es/EsFileInfoRepository.java new file mode 100644 index 0000000..436184b --- /dev/null +++ b/src/main/java/top/fjy8018/fileupload/repository/es/EsFileInfoRepository.java @@ -0,0 +1,27 @@ +package top.fjy8018.fileupload.repository.es; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; +import top.fjy8018.fileupload.dataobject.es.EsFileInfo; + +public interface EsFileInfoRepository extends ElasticsearchRepository { + /** + * 通过文件名查找,并去除重复 + * fileName包含即可,非精确匹配 + * @param pageable + * @param fileName + * @return + */ + Page findDistinctByFileNameContains(Pageable pageable, String fileName); + + /** + * 通过用户号查询,并去除重复 + * @param pageable + * @param userId + * @return + */ + Page findDistinctByUserId(Pageable pageable, String userId); + + Page findByFileName(Pageable pageable, String fileName); +} diff --git a/src/main/java/top/fjy8018/fileupload/util/KeyUtil.java b/src/main/java/top/fjy8018/fileupload/util/KeyUtil.java new file mode 100644 index 0000000..23482f8 --- /dev/null +++ b/src/main/java/top/fjy8018/fileupload/util/KeyUtil.java @@ -0,0 +1,27 @@ +package top.fjy8018.fileupload.util; + +import java.util.Random; + +/** + * 自动生成键(主键、外键等) + * + * @author F嘉阳 + * @date 2018-05-27 19:32 + */ +public class KeyUtil { + + /** + * 生成唯一主键 + * 格式:时间+随机数 + * + * @return + */ + public static synchronized String genUniqueKey() { + Random random = new Random(); + + // 生成6位随机数 + Integer number = random.nextInt(900000) + 100000; + + return System.currentTimeMillis()+String.valueOf(number); + } +} diff --git a/src/main/java/top/fjy8018/fileupload/util/ResultVOUtil.java b/src/main/java/top/fjy8018/fileupload/util/ResultVOUtil.java new file mode 100644 index 0000000..d1444a0 --- /dev/null +++ b/src/main/java/top/fjy8018/fileupload/util/ResultVOUtil.java @@ -0,0 +1,45 @@ +package top.fjy8018.fileupload.util; + +import top.fjy8018.fileupload.VO.ResultVO; +import top.fjy8018.fileupload.enums.ResultVOEnum; + +/** + * @author F嘉阳 + * @date 2018-06-22 09:37 + */ +public class ResultVOUtil { + + public static ResultVO success(Object object){ + ResultVO resultVO = new ResultVO(); + + resultVO.setCode(ResultVOEnum.UPLOAD_SUCCESS.getCode()); + resultVO.setMsg(ResultVOEnum.UPLOAD_SUCCESS.getMsg()); + resultVO.setData(object); + return resultVO; + } + + public static ResultVO success(){ + ResultVO resultVO = new ResultVO(); + + resultVO.setCode(ResultVOEnum.UPLOAD_SUCCESS.getCode()); + resultVO.setMsg(ResultVOEnum.UPLOAD_SUCCESS.getMsg()); + resultVO.setData(null); + return resultVO; + } + + public static ResultVO error(String msg){ + ResultVO resultVO = new ResultVO(); + + resultVO.setCode(ResultVOEnum.UPLOAD_FAIL.getCode()); + resultVO.setMsg(msg); + return resultVO; + } + + public static ResultVO error(Integer code,String msg){ + ResultVO resultVO = new ResultVO(); + + resultVO.setCode(code); + resultVO.setMsg(msg); + return resultVO; + } +} diff --git a/src/main/java/top/fjy8018/fileupload/util/TimeUtil.java b/src/main/java/top/fjy8018/fileupload/util/TimeUtil.java new file mode 100644 index 0000000..83bde71 --- /dev/null +++ b/src/main/java/top/fjy8018/fileupload/util/TimeUtil.java @@ -0,0 +1,17 @@ +package top.fjy8018.fileupload.util; + +import java.text.SimpleDateFormat; +import java.util.Date; + +/** + * @author F嘉阳 + * @date 2018-06-22 18:19 + */ +public class TimeUtil { + + public static String currentTimeString(){ + Date date = new Date(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + return sdf.format(date); + } +} diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml new file mode 100644 index 0000000..61adfa4 --- /dev/null +++ b/src/main/resources/application-dev.yml @@ -0,0 +1,36 @@ +#开发环境配置文件 +server: + servlet: + context-path: /fileupload + port: 8080 +serverproperties: + portNum: 8080 + filePath: F:\JAVA Workspace\Temp\ +spring: + thymeleaf: + prefix: classpath:/templates/ + cache: false + check-template: true + + servlet: + multipart: + max-file-size: 100Mb + max-request-size: 100Mb + datasource: + driver-class-name: com.mysql.jdbc.Driver + url: jdbc:mysql://localhost:3306/db_sysdemo1?useUnicode=true&characterEncoding=utf-8&useSSL=true + username: trs + password: fileupload + jpa: + hibernate: + ddl-auto: update + show-sql: true + data: + elasticsearch: + cluster-name: Fjiayang + cluster-nodes: 127.0.0.1:9300 + + + #resources: + # static-locations: classpath:/templates/ +debug: true diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml new file mode 100644 index 0000000..3d7808a --- /dev/null +++ b/src/main/resources/application.yml @@ -0,0 +1,3 @@ +spring: + profiles: + active: dev diff --git a/src/test/java/top/fjy8018/fileupload/EstestApplicationTests.java b/src/test/java/top/fjy8018/fileupload/EstestApplicationTests.java new file mode 100644 index 0000000..66767b4 --- /dev/null +++ b/src/test/java/top/fjy8018/fileupload/EstestApplicationTests.java @@ -0,0 +1,16 @@ +package top.fjy8018.fileupload; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class EstestApplicationTests { + + @Test + public void contextLoads() { + } + +} diff --git a/src/test/java/top/fjy8018/fileupload/repository/es/EsFileInfoRepositoryTest.java b/src/test/java/top/fjy8018/fileupload/repository/es/EsFileInfoRepositoryTest.java new file mode 100644 index 0000000..6e089a0 --- /dev/null +++ b/src/test/java/top/fjy8018/fileupload/repository/es/EsFileInfoRepositoryTest.java @@ -0,0 +1,69 @@ +package top.fjy8018.fileupload.repository.es; + +import lombok.extern.slf4j.Slf4j; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.stereotype.Component; +import top.fjy8018.fileupload.EstestApplicationTests; +import top.fjy8018.fileupload.dataobject.es.EsFileInfo; +import top.fjy8018.fileupload.util.KeyUtil; + +@Slf4j +@Component +public class EsFileInfoRepositoryTest extends EstestApplicationTests { + + @Autowired + private EsFileInfoRepository repository; + + private PageRequest pageRequest = PageRequest.of(0,2); + + /** + * 测试数据 + */ + public void initRpositoryData(){ + // 清除所有数据 + repository.deleteAll(); + String userId = KeyUtil.genUniqueKey(); + String fileName = "测试虚拟文件"; + String fileSize = "3Mb"; + String filePath = "/www/temp"; + EsFileInfo fileInfo = new EsFileInfo(userId,fileName,fileSize,filePath); + log.info("【fileInfo】{}",fileInfo.toString()); + repository.save(fileInfo); + } + + @Test + public void init(){ + repository.deleteAll(); + } + + @Test + public void add(){ + String userId = KeyUtil.genUniqueKey(); + String fileName = "测试虚拟5"; + String fileSize = "31Mb"; + String filePath = "/www/文件"; + EsFileInfo fileInfo = new EsFileInfo(userId,fileName,fileSize,filePath); + log.info("【fileInfo】{}",fileInfo.toString()); + repository.save(fileInfo); + } + + @Test + public void findByFileName() { + String fileName = "文件"; + Page res = repository.findByFileName(pageRequest,fileName); + log.info("【查询结果】{},数量{}",res.getContent(),res.getTotalElements()); + Assert.assertNotEquals(0,res.getTotalElements()); + } + + @Test + public void findDistinctByUserId() { + Page res = repository.findDistinctByUserId(pageRequest,"1529662030753140607"); + log.info("【查询结果】{}",res.getContent()); + Assert.assertNotEquals(0,res.getTotalElements()); + } +} \ No newline at end of file diff --git a/系统架构.vsdx b/系统架构.vsdx new file mode 100644 index 0000000..86db641 Binary files /dev/null and b/系统架构.vsdx differ