parent
1f94ae7e3f
commit
c3f5041264
124 changed files with 42673 additions and 0 deletions
@ -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/ |
Binary file not shown.
@ -0,0 +1,2 @@ |
||||
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.6/apache-maven-3.8.6-bin.zip |
||||
wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar |
@ -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 "$@" |
@ -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% |
@ -0,0 +1,72 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> |
||||
<modelVersion>4.0.0</modelVersion> |
||||
<parent> |
||||
<groupId>org.springframework.boot</groupId> |
||||
<artifactId>spring-boot-starter-parent</artifactId> |
||||
<version>2.7.4</version> |
||||
<relativePath/> <!-- lookup parent from repository --> |
||||
</parent> |
||||
<groupId>com.redis</groupId> |
||||
<artifactId>SpringDataRedisDemo</artifactId> |
||||
<version>0.0.1-SNAPSHOT</version> |
||||
<name>SpringDataRedisDemo</name> |
||||
<description>SpringDataRedisDemo</description> |
||||
<properties> |
||||
<java.version>1.8</java.version> |
||||
</properties> |
||||
<dependencies> |
||||
<!--SpringDataRedis--> |
||||
<dependency> |
||||
<groupId>org.apache.commons</groupId> |
||||
<artifactId>commons-pool2</artifactId> |
||||
<version>2.11.1</version> |
||||
</dependency> |
||||
|
||||
<dependency> |
||||
<groupId>org.springframework.boot</groupId> |
||||
<artifactId>spring-boot-starter-data-redis</artifactId> |
||||
</dependency> |
||||
|
||||
<!--lombok--> |
||||
<dependency> |
||||
<groupId>org.projectlombok</groupId> |
||||
<artifactId>lombok</artifactId> |
||||
<optional>true</optional> |
||||
</dependency> |
||||
<!--springboot--> |
||||
<dependency> |
||||
<groupId>org.springframework.boot</groupId> |
||||
<artifactId>spring-boot-starter-test</artifactId> |
||||
<scope>test</scope> |
||||
</dependency> |
||||
|
||||
<dependency> |
||||
<groupId>com.fasterxml.jackson.core</groupId> |
||||
<artifactId>jackson-databind</artifactId> |
||||
<version>2.14.0-rc1</version> |
||||
<scope>test</scope> |
||||
</dependency> |
||||
|
||||
|
||||
</dependencies> |
||||
|
||||
<build> |
||||
<plugins> |
||||
<plugin> |
||||
<groupId>org.springframework.boot</groupId> |
||||
<artifactId>spring-boot-maven-plugin</artifactId> |
||||
<configuration> |
||||
<excludes> |
||||
<exclude> |
||||
<groupId>org.projectlombok</groupId> |
||||
<artifactId>lombok</artifactId> |
||||
</exclude> |
||||
</excludes> |
||||
</configuration> |
||||
</plugin> |
||||
</plugins> |
||||
</build> |
||||
|
||||
</project> |
@ -0,0 +1,36 @@ |
||||
package com.redis.config; |
||||
|
||||
import org.springframework.context.annotation.Bean; |
||||
import org.springframework.context.annotation.Configuration; |
||||
import org.springframework.data.redis.connection.RedisConnectionFactory; |
||||
import org.springframework.data.redis.core.RedisTemplate; |
||||
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; |
||||
import org.springframework.data.redis.serializer.RedisSerializer; |
||||
|
||||
|
||||
@Configuration |
||||
public class RedisConfig { |
||||
|
||||
// connectionFactory报错
|
||||
@Bean |
||||
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory connectionFactory){ |
||||
// 1.创建RedisTemplate对象
|
||||
RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>(); |
||||
|
||||
// 2.设置连接工厂
|
||||
redisTemplate.setConnectionFactory(connectionFactory); |
||||
|
||||
// 3.创建序列化对象
|
||||
GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer(); |
||||
|
||||
// 4.设置key和hashKey采用String的序列化方式
|
||||
redisTemplate.setKeySerializer(RedisSerializer.string()); |
||||
redisTemplate.setHashKeySerializer(RedisSerializer.string()); |
||||
|
||||
// 4.设置value和hashValue采用json的序列化方式
|
||||
redisTemplate.setValueSerializer(jsonRedisSerializer); |
||||
redisTemplate.setHashValueSerializer(jsonRedisSerializer); |
||||
|
||||
return redisTemplate; |
||||
} |
||||
} |
@ -0,0 +1,13 @@ |
||||
package com.redis.pojo; |
||||
|
||||
import lombok.AllArgsConstructor; |
||||
import lombok.Data; |
||||
import lombok.NoArgsConstructor; |
||||
|
||||
@Data |
||||
@NoArgsConstructor |
||||
@AllArgsConstructor |
||||
public class User { |
||||
private String name; |
||||
private Integer age; |
||||
} |
@ -0,0 +1,13 @@ |
||||
package com.redis.springdataredisdemo; |
||||
|
||||
import org.springframework.boot.SpringApplication; |
||||
import org.springframework.boot.autoconfigure.SpringBootApplication; |
||||
|
||||
@SpringBootApplication |
||||
public class SpringDataRedisDemoApplication { |
||||
|
||||
public static void main(String[] args) { |
||||
SpringApplication.run(SpringDataRedisDemoApplication.class, args); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,11 @@ |
||||
spring: |
||||
redis: |
||||
host: 192.168.153.130 |
||||
password: admin |
||||
port: 6379 |
||||
lettuce: |
||||
pool: |
||||
max-active: 8 |
||||
max-idle: 8 |
||||
min-idle: 1 |
||||
max-wait: 100ms |
@ -0,0 +1,62 @@ |
||||
package com.redis.springdataredisdemo; |
||||
|
||||
import com.fasterxml.jackson.core.JsonProcessingException; |
||||
import com.fasterxml.jackson.databind.ObjectMapper; |
||||
import com.redis.pojo.User; |
||||
import org.junit.jupiter.api.Test; |
||||
import org.springframework.beans.factory.annotation.Autowired; |
||||
import org.springframework.boot.test.context.SpringBootTest; |
||||
import org.springframework.data.redis.core.StringRedisTemplate; |
||||
|
||||
import javax.management.ObjectName; |
||||
import java.util.HashMap; |
||||
import java.util.Map; |
||||
|
||||
@SpringBootTest |
||||
public class RedisStringTemplateTest { |
||||
@Autowired |
||||
private StringRedisTemplate redisTemplate; |
||||
|
||||
private static final ObjectMapper mapper = new ObjectMapper(); |
||||
|
||||
@Test |
||||
void testString() { |
||||
redisTemplate.opsForValue().set("name","李四"); |
||||
|
||||
String name = redisTemplate.opsForValue().get("name"); |
||||
System.out.println("name = " + name); |
||||
} |
||||
|
||||
@Test |
||||
void testUser() throws JsonProcessingException { |
||||
User user = new User("张三",15); |
||||
// 手动将对象序列化
|
||||
String JsonStr = mapper.writeValueAsString(user); |
||||
// 写入数据
|
||||
redisTemplate.opsForValue().set("User:1",JsonStr); |
||||
|
||||
// 获取数据
|
||||
String JsonUser = redisTemplate.opsForValue().get("User:1"); |
||||
// 手动反序列化
|
||||
User user1 = mapper.readValue(JsonUser,User.class); |
||||
System.out.println("user1 = " + user1); |
||||
} |
||||
|
||||
@Test |
||||
void testHash() { |
||||
redisTemplate.opsForHash().put("User:2","name","admin"); |
||||
redisTemplate.opsForHash().put("User:2","age","18"); |
||||
Map<Object,Object> map = new HashMap<>(); |
||||
map.put("name","zzz"); |
||||
map.put("age","18"); |
||||
redisTemplate.opsForHash().putAll("User:3",map); |
||||
|
||||
Map<Object, Object> user_2 = redisTemplate.opsForHash().entries("User:2"); |
||||
System.out.println("user_2 = " + user_2); |
||||
|
||||
|
||||
Map<Object, Object> user_3 = redisTemplate.opsForHash().entries("User:3"); |
||||
System.out.println("user_3 = " + user_3); |
||||
|
||||
} |
||||
} |
@ -0,0 +1,20 @@ |
||||
package com.redis.springdataredisdemo; |
||||
|
||||
import org.junit.jupiter.api.Test; |
||||
import org.springframework.beans.factory.annotation.Autowired; |
||||
import org.springframework.boot.test.context.SpringBootTest; |
||||
import org.springframework.data.redis.core.StringRedisTemplate; |
||||
|
||||
@SpringBootTest |
||||
class SpringDataRedisDemoApplicationTests { |
||||
@Autowired |
||||
private StringRedisTemplate redisTemplate; |
||||
|
||||
@Test |
||||
void testString() { |
||||
redisTemplate.opsForValue().set("name", "张三"); |
||||
|
||||
Object name = redisTemplate.opsForValue().get("name"); |
||||
System.out.println("name = " + name); |
||||
} |
||||
} |
@ -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/ |
@ -0,0 +1,79 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> |
||||
<modelVersion>4.0.0</modelVersion> |
||||
<parent> |
||||
<groupId>org.springframework.boot</groupId> |
||||
<artifactId>spring-boot-starter-parent</artifactId> |
||||
<version>2.3.12.RELEASE</version> |
||||
<relativePath/> <!-- lookup parent from repository --> |
||||
</parent> |
||||
<groupId>com.hmdp</groupId> |
||||
<artifactId>hm-dianping</artifactId> |
||||
<version>0.0.1-SNAPSHOT</version> |
||||
<name>hm-dianping</name> |
||||
<description>Demo project for Spring Boot</description> |
||||
<properties> |
||||
<java.version>1.8</java.version> |
||||
</properties> |
||||
<dependencies> |
||||
<dependency> |
||||
<groupId>org.springframework.boot</groupId> |
||||
<artifactId>spring-boot-starter-data-redis</artifactId> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>org.apache.commons</groupId> |
||||
<artifactId>commons-pool2</artifactId> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>org.springframework.boot</groupId> |
||||
<artifactId>spring-boot-starter-web</artifactId> |
||||
</dependency> |
||||
|
||||
<dependency> |
||||
<groupId>mysql</groupId> |
||||
<artifactId>mysql-connector-java</artifactId> |
||||
<scope>runtime</scope> |
||||
<version>5.1.47</version> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>org.projectlombok</groupId> |
||||
<artifactId>lombok</artifactId> |
||||
<optional>true</optional> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>org.springframework.boot</groupId> |
||||
<artifactId>spring-boot-starter-test</artifactId> |
||||
<scope>test</scope> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>com.baomidou</groupId> |
||||
<artifactId>mybatis-plus-boot-starter</artifactId> |
||||
<version>3.4.3</version> |
||||
</dependency> |
||||
<!--hutool--> |
||||
<dependency> |
||||
<groupId>cn.hutool</groupId> |
||||
<artifactId>hutool-all</artifactId> |
||||
<version>5.7.17</version> |
||||
</dependency> |
||||
</dependencies> |
||||
|
||||
<build> |
||||
<plugins> |
||||
<plugin> |
||||
<groupId>org.springframework.boot</groupId> |
||||
<artifactId>spring-boot-maven-plugin</artifactId> |
||||
<configuration> |
||||
<excludes> |
||||
<exclude> |
||||
<groupId>org.projectlombok</groupId> |
||||
<artifactId>lombok</artifactId> |
||||
</exclude> |
||||
</excludes> |
||||
</configuration> |
||||
</plugin> |
||||
</plugins> |
||||
</build> |
||||
|
||||
</project> |
@ -0,0 +1,15 @@ |
||||
package com.hmdp; |
||||
|
||||
import org.mybatis.spring.annotation.MapperScan; |
||||
import org.springframework.boot.SpringApplication; |
||||
import org.springframework.boot.autoconfigure.SpringBootApplication; |
||||
|
||||
@MapperScan("com.hmdp.mapper") |
||||
@SpringBootApplication |
||||
public class HmDianPingApplication { |
||||
|
||||
public static void main(String[] args) { |
||||
SpringApplication.run(HmDianPingApplication.class, args); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,17 @@ |
||||
package com.hmdp.config; |
||||
|
||||
import com.baomidou.mybatisplus.annotation.DbType; |
||||
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; |
||||
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; |
||||
import org.springframework.context.annotation.Bean; |
||||
import org.springframework.context.annotation.Configuration; |
||||
|
||||
@Configuration |
||||
public class MybatisConfig { |
||||
@Bean |
||||
public MybatisPlusInterceptor mybatisPlusInterceptor() { |
||||
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); |
||||
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); |
||||
return interceptor; |
||||
} |
||||
} |
@ -0,0 +1,17 @@ |
||||
package com.hmdp.config; |
||||
|
||||
import com.hmdp.dto.Result; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.springframework.web.bind.annotation.ExceptionHandler; |
||||
import org.springframework.web.bind.annotation.RestControllerAdvice; |
||||
|
||||
@Slf4j |
||||
@RestControllerAdvice |
||||
public class WebExceptionAdvice { |
||||
|
||||
@ExceptionHandler(RuntimeException.class) |
||||
public Result handleRuntimeException(RuntimeException e) { |
||||
log.error(e.toString(), e); |
||||
return Result.fail("服务器异常"); |
||||
} |
||||
} |
@ -0,0 +1,20 @@ |
||||
package com.hmdp.controller; |
||||
|
||||
|
||||
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
||||
import org.springframework.web.bind.annotation.RestController; |
||||
|
||||
/** |
||||
* <p> |
||||
* 前端控制器 |
||||
* </p> |
||||
* |
||||
* @author 虎哥 |
||||
* @since 2021-12-22 |
||||
*/ |
||||
@RestController |
||||
@RequestMapping("/blog-comments") |
||||
public class BlogCommentsController { |
||||
|
||||
} |
@ -0,0 +1,83 @@ |
||||
package com.hmdp.controller; |
||||
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
||||
import com.hmdp.dto.Result; |
||||
import com.hmdp.dto.UserDTO; |
||||
import com.hmdp.entity.Blog; |
||||
import com.hmdp.entity.User; |
||||
import com.hmdp.service.IBlogService; |
||||
import com.hmdp.service.IUserService; |
||||
import com.hmdp.utils.SystemConstants; |
||||
import com.hmdp.utils.UserHolder; |
||||
import org.springframework.web.bind.annotation.*; |
||||
|
||||
import javax.annotation.Resource; |
||||
import java.util.List; |
||||
|
||||
/** |
||||
* <p> |
||||
* 前端控制器 |
||||
* </p> |
||||
* |
||||
* @author 虎哥 |
||||
* @since 2021-12-22 |
||||
*/ |
||||
@RestController |
||||
@RequestMapping("/blog") |
||||
public class BlogController { |
||||
|
||||
@Resource |
||||
private IBlogService blogService; |
||||
@Resource |
||||
private IUserService userService; |
||||
|
||||
@PostMapping |
||||
public Result saveBlog(@RequestBody Blog blog) { |
||||
// 获取登录用户
|
||||
UserDTO user = UserHolder.getUser(); |
||||
blog.setUserId(user.getId()); |
||||
// 保存探店博文
|
||||
blogService.save(blog); |
||||
// 返回id
|
||||
return Result.ok(blog.getId()); |
||||
} |
||||
|
||||
@PutMapping("/like/{id}") |
||||
public Result likeBlog(@PathVariable("id") Long id) { |
||||
// 修改点赞数量
|
||||
blogService.update() |
||||
.setSql("liked = liked + 1").eq("id", id).update(); |
||||
return Result.ok(); |
||||
} |
||||
|
||||
@GetMapping("/of/me") |
||||
public Result queryMyBlog(@RequestParam(value = "current", defaultValue = "1") Integer current) { |
||||
// 获取登录用户
|
||||
UserDTO user = UserHolder.getUser(); |
||||
// 根据用户查询
|
||||
Page<Blog> page = blogService.query() |
||||
.eq("user_id", user.getId()).page(new Page<>(current, SystemConstants.MAX_PAGE_SIZE)); |
||||
// 获取当前页数据
|
||||
List<Blog> records = page.getRecords(); |
||||
return Result.ok(records); |
||||
} |
||||
|
||||
@GetMapping("/hot") |
||||
public Result queryHotBlog(@RequestParam(value = "current", defaultValue = "1") Integer current) { |
||||
// 根据用户查询
|
||||
Page<Blog> page = blogService.query() |
||||
.orderByDesc("liked") |
||||
.page(new Page<>(current, SystemConstants.MAX_PAGE_SIZE)); |
||||
// 获取当前页数据
|
||||
List<Blog> records = page.getRecords(); |
||||
// 查询用户
|
||||
records.forEach(blog ->{ |
||||
Long userId = blog.getUserId(); |
||||
User user = userService.getById(userId); |
||||
blog.setName(user.getNickName()); |
||||
blog.setIcon(user.getIcon()); |
||||
}); |
||||
return Result.ok(records); |
||||
} |
||||
} |
@ -0,0 +1,20 @@ |
||||
package com.hmdp.controller; |
||||
|
||||
|
||||
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
||||
import org.springframework.web.bind.annotation.RestController; |
||||
|
||||
/** |
||||
* <p> |
||||
* 前端控制器 |
||||
* </p> |
||||
* |
||||
* @author 虎哥 |
||||
* @since 2021-12-22 |
||||
*/ |
||||
@RestController |
||||
@RequestMapping("/follow") |
||||
public class FollowController { |
||||
|
||||
} |
@ -0,0 +1,101 @@ |
||||
package com.hmdp.controller; |
||||
|
||||
|
||||
import cn.hutool.core.util.StrUtil; |
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
||||
import com.hmdp.dto.Result; |
||||
import com.hmdp.entity.Shop; |
||||
import com.hmdp.service.IShopService; |
||||
import com.hmdp.utils.SystemConstants; |
||||
import org.springframework.web.bind.annotation.*; |
||||
|
||||
import javax.annotation.Resource; |
||||
|
||||
/** |
||||
* <p> |
||||
* 前端控制器 |
||||
* </p> |
||||
* |
||||
* @author 虎哥 |
||||
* @since 2021-12-22 |
||||
*/ |
||||
@RestController |
||||
@RequestMapping("/shop") |
||||
public class ShopController { |
||||
|
||||
@Resource |
||||
public IShopService shopService; |
||||
|
||||
/** |
||||
* 根据id查询商铺信息 |
||||
* @param id 商铺id |
||||
* @return 商铺详情数据 |
||||
*/ |
||||
@GetMapping("/{id}") |
||||
public Result queryShopById(@PathVariable("id") Long id) { |
||||
return Result.ok(shopService.getById(id)); |
||||
} |
||||
|
||||
/** |
||||
* 新增商铺信息 |
||||
* @param shop 商铺数据 |
||||
* @return 商铺id |
||||
*/ |
||||
@PostMapping |
||||
public Result saveShop(@RequestBody Shop shop) { |
||||
// 写入数据库
|
||||
shopService.save(shop); |
||||
// 返回店铺id
|
||||
return Result.ok(shop.getId()); |
||||
} |
||||
|
||||
/** |
||||
* 更新商铺信息 |
||||
* @param shop 商铺数据 |
||||
* @return 无 |
||||
*/ |
||||
@PutMapping |
||||
public Result updateShop(@RequestBody Shop shop) { |
||||
// 写入数据库
|
||||
shopService.updateById(shop); |
||||
return Result.ok(); |
||||
} |
||||
|
||||
/** |
||||
* 根据商铺类型分页查询商铺信息 |
||||
* @param typeId 商铺类型 |
||||
* @param current 页码 |
||||
* @return 商铺列表 |
||||
*/ |
||||
@GetMapping("/of/type") |
||||
public Result queryShopByType( |
||||
@RequestParam("typeId") Integer typeId, |
||||
@RequestParam(value = "current", defaultValue = "1") Integer current |
||||
) { |
||||
// 根据类型分页查询
|
||||
Page<Shop> page = shopService.query() |
||||
.eq("type_id", typeId) |
||||
.page(new Page<>(current, SystemConstants.DEFAULT_PAGE_SIZE)); |
||||
// 返回数据
|
||||
return Result.ok(page.getRecords()); |
||||
} |
||||
|
||||
/** |
||||
* 根据商铺名称关键字分页查询商铺信息 |
||||
* @param name 商铺名称关键字 |
||||
* @param current 页码 |
||||
* @return 商铺列表 |
||||
*/ |
||||
@GetMapping("/of/name") |
||||
public Result queryShopByName( |
||||
@RequestParam(value = "name", required = false) String name, |
||||
@RequestParam(value = "current", defaultValue = "1") Integer current |
||||
) { |
||||
// 根据类型分页查询
|
||||
Page<Shop> page = shopService.query() |
||||
.like(StrUtil.isNotBlank(name), "name", name) |
||||
.page(new Page<>(current, SystemConstants.MAX_PAGE_SIZE)); |
||||
// 返回数据
|
||||
return Result.ok(page.getRecords()); |
||||
} |
||||
} |
@ -0,0 +1,34 @@ |
||||
package com.hmdp.controller; |
||||
|
||||
|
||||
import com.hmdp.dto.Result; |
||||
import com.hmdp.entity.ShopType; |
||||
import com.hmdp.service.IShopTypeService; |
||||
import org.springframework.web.bind.annotation.GetMapping; |
||||
import org.springframework.web.bind.annotation.RequestMapping; |
||||
import org.springframework.web.bind.annotation.RestController; |
||||
|
||||
import javax.annotation.Resource; |
||||
import java.util.List; |
||||
|
||||
/** |
||||
* <p> |
||||
* 前端控制器 |
||||
* </p> |
||||
* |
||||
* @author 虎哥 |
||||
* @since 2021-12-22 |
||||
*/ |
||||
@RestController |
||||
@RequestMapping("/shop-type") |
||||
public class ShopTypeController { |
||||
@Resource |
||||
private IShopTypeService typeService; |
||||
|
||||
@GetMapping("list") |
||||
public Result queryTypeList() { |
||||
List<ShopType> typeList = typeService |
||||
.query().orderByAsc("sort").list(); |
||||
return Result.ok(typeList); |
||||
} |
||||
} |
@ -0,0 +1,63 @@ |
||||
package com.hmdp.controller; |
||||
|
||||
import cn.hutool.core.io.FileUtil; |
||||
import cn.hutool.core.util.StrUtil; |
||||
import com.hmdp.dto.Result; |
||||
import com.hmdp.utils.SystemConstants; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.springframework.web.bind.annotation.*; |
||||
import org.springframework.web.multipart.MultipartFile; |
||||
|
||||
import java.io.File; |
||||
import java.io.IOException; |
||||
import java.util.UUID; |
||||
|
||||
@Slf4j |
||||
@RestController |
||||
@RequestMapping("upload") |
||||
public class UploadController { |
||||
|
||||
@PostMapping("blog") |
||||
public Result uploadImage(@RequestParam("file") MultipartFile image) { |
||||
try { |
||||
// 获取原始文件名称
|
||||
String originalFilename = image.getOriginalFilename(); |
||||
// 生成新文件名
|
||||
String fileName = createNewFileName(originalFilename); |
||||
// 保存文件
|
||||
image.transferTo(new File(SystemConstants.IMAGE_UPLOAD_DIR, fileName)); |
||||
// 返回结果
|
||||
log.debug("文件上传成功,{}", fileName); |
||||
return Result.ok(fileName); |
||||
} catch (IOException e) { |
||||
throw new RuntimeException("文件上传失败", e); |
||||
} |
||||
} |
||||
|
||||
@GetMapping("/blog/delete") |
||||
public Result deleteBlogImg(@RequestParam("name") String filename) { |
||||
File file = new File(SystemConstants.IMAGE_UPLOAD_DIR, filename); |
||||
if (file.isDirectory()) { |
||||
return Result.fail("错误的文件名称"); |
||||
} |
||||
FileUtil.del(file); |
||||
return Result.ok(); |
||||
} |
||||
|
||||
private String createNewFileName(String originalFilename) { |
||||
// 获取后缀
|
||||
String suffix = StrUtil.subAfter(originalFilename, ".", true); |
||||
// 生成目录
|
||||
String name = UUID.randomUUID().toString(); |
||||
int hash = name.hashCode(); |
||||
int d1 = hash & 0xF; |
||||
int d2 = (hash >> 4) & 0xF; |
||||
// 判断目录是否存在
|
||||
File dir = new File(SystemConstants.IMAGE_UPLOAD_DIR, StrUtil.format("/blogs/{}/{}", d1, d2)); |
||||
if (!dir.exists()) { |
||||
dir.mkdirs(); |
||||
} |
||||
// 生成文件名
|
||||
return StrUtil.format("/blogs/{}/{}/{}.{}", d1, d2, name, suffix); |
||||
} |
||||
} |
@ -0,0 +1,82 @@ |
||||
package com.hmdp.controller; |
||||
|
||||
|
||||
import com.hmdp.dto.LoginFormDTO; |
||||
import com.hmdp.dto.Result; |
||||
import com.hmdp.entity.UserInfo; |
||||
import com.hmdp.service.IUserInfoService; |
||||
import com.hmdp.service.IUserService; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.springframework.web.bind.annotation.*; |
||||
|
||||
import javax.annotation.Resource; |
||||
import javax.servlet.http.HttpSession; |
||||
|
||||
/** |
||||
* <p> |
||||
* 前端控制器 |
||||
* </p> |
||||
* |
||||
* @author 虎哥 |
||||
* @since 2021-12-22 |
||||
*/ |
||||
@Slf4j |
||||
@RestController |
||||
@RequestMapping("/user") |
||||
public class UserController { |
||||
|
||||
@Resource |
||||
private IUserService userService; |
||||
|
||||
@Resource |
||||
private IUserInfoService userInfoService; |
||||
|
||||
/** |
||||
* 发送手机验证码 |
||||
*/ |
||||
@PostMapping("code") |
||||
public Result sendCode(@RequestParam("phone") String phone, HttpSession session) { |
||||
// TODO 发送短信验证码并保存验证码
|
||||
return Result.fail("功能未完成"); |
||||
} |
||||
|
||||
/** |
||||
* 登录功能 |
||||
* @param loginForm 登录参数,包含手机号、验证码;或者手机号、密码 |
||||
*/ |
||||
@PostMapping("/login") |
||||
public Result login(@RequestBody LoginFormDTO loginForm, HttpSession session){ |
||||
// TODO 实现登录功能
|
||||
return Result.fail("功能未完成"); |
||||
} |
||||
|
||||
/** |
||||
* 登出功能 |
||||
* @return 无 |
||||
*/ |
||||
@PostMapping("/logout") |
||||
public Result logout(){ |
||||
// TODO 实现登出功能
|
||||
return Result.fail("功能未完成"); |
||||
} |
||||
|
||||
@GetMapping("/me") |
||||
public Result me(){ |
||||
// TODO 获取当前登录的用户并返回
|
||||
return Result.fail("功能未完成"); |
||||
} |
||||
|
||||
@GetMapping("/info/{id}") |
||||
public Result info(@PathVariable("id") Long userId){ |
||||
// 查询详情
|
||||
UserInfo info = userInfoService.getById(userId); |
||||
if (info == null) { |
||||
// 没有详情,应该是第一次查看详情
|
||||
return Result.ok(); |
||||
} |
||||
info.setCreateTime(null); |
||||
info.setUpdateTime(null); |
||||
// 返回
|
||||
return Result.ok(info); |
||||
} |
||||
} |
@ -0,0 +1,57 @@ |
||||
package com.hmdp.controller; |
||||
|
||||
|
||||
import com.hmdp.dto.Result; |
||||
import com.hmdp.entity.Voucher; |
||||
import com.hmdp.service.IVoucherService; |
||||
import org.springframework.web.bind.annotation.*; |
||||
|
||||
import javax.annotation.Resource; |
||||
|
||||
/** |
||||
* <p> |
||||
* 前端控制器 |
||||
* </p> |
||||
* |
||||
* @author 虎哥 |
||||
* @since 2021-12-22 |
||||
*/ |
||||
@RestController |
||||
@RequestMapping("/voucher") |
||||
public class VoucherController { |
||||
|
||||
@Resource |
||||
private IVoucherService voucherService; |
||||
|
||||
/** |
||||
* 新增普通券 |
||||
* @param voucher 优惠券信息 |
||||
* @return 优惠券id |
||||
*/ |
||||
@PostMapping |
||||
public Result addVoucher(@RequestBody Voucher voucher) { |
||||
voucherService.save(voucher); |
||||
return Result.ok(voucher.getId()); |
||||
} |
||||
|
||||
/** |
||||
* 新增秒杀券 |
||||
* @param voucher 优惠券信息,包含秒杀信息 |
||||
* @return 优惠券id |
||||
*/ |
||||
@PostMapping("seckill") |
||||
public Result addSeckillVoucher(@RequestBody Voucher voucher) { |
||||
voucherService.addSeckillVoucher(voucher); |
||||
return Result.ok(voucher.getId()); |
||||
} |
||||
|
||||
/** |
||||
* 查询店铺的优惠券列表 |
||||
* @param shopId 店铺id |
||||
* @return 优惠券列表 |
||||
*/ |
||||
@GetMapping("/list/{shopId}") |
||||
public Result queryVoucherOfShop(@PathVariable("shopId") Long shopId) { |
||||
return voucherService.queryVoucherOfShop(shopId); |
||||
} |
||||
} |
@ -0,0 +1,25 @@ |
||||
package com.hmdp.controller; |
||||
|
||||
|
||||
import com.hmdp.dto.Result; |
||||
import org.springframework.web.bind.annotation.PathVariable; |
||||
import org.springframework.web.bind.annotation.PostMapping; |
||||
import org.springframework.web.bind.annotation.RequestMapping; |
||||
import org.springframework.web.bind.annotation.RestController; |
||||
|
||||
/** |
||||
* <p> |
||||
* 前端控制器 |
||||
* </p> |
||||
* |
||||
* @author 虎哥 |
||||
* @since 2021-12-22 |
||||
*/ |
||||
@RestController |
||||
@RequestMapping("/voucher-order") |
||||
public class VoucherOrderController { |
||||
@PostMapping("seckill/{id}") |
||||
public Result seckillVoucher(@PathVariable("id") Long voucherId) { |
||||
return Result.fail("功能未完成"); |
||||
} |
||||
} |
@ -0,0 +1,10 @@ |
||||
package com.hmdp.dto; |
||||
|
||||
import lombok.Data; |
||||
|
||||
@Data |
||||
public class LoginFormDTO { |
||||
private String phone; |
||||
private String code; |
||||
private String password; |
||||
} |
@ -0,0 +1,30 @@ |
||||
package com.hmdp.dto; |
||||
|
||||
import lombok.AllArgsConstructor; |
||||
import lombok.Data; |
||||
import lombok.NoArgsConstructor; |
||||
|
||||
import java.util.List; |
||||
|
||||
@Data |
||||
@NoArgsConstructor |
||||
@AllArgsConstructor |
||||
public class Result { |
||||
private Boolean success; |
||||
private String errorMsg; |
||||
private Object data; |
||||
private Long total; |
||||
|
||||
public static Result ok(){ |
||||
return new Result(true, null, null, null); |
||||
} |
||||
public static Result ok(Object data){ |
||||
return new Result(true, null, data, null); |
||||
} |
||||
public static Result ok(List<?> data, Long total){ |
||||
return new Result(true, null, data, total); |
||||
} |
||||
public static Result fail(String errorMsg){ |
||||
return new Result(false, errorMsg, null, null); |
||||
} |
||||
} |
@ -0,0 +1,12 @@ |
||||
package com.hmdp.dto; |
||||
|
||||
import lombok.Data; |
||||
|
||||
import java.util.List; |
||||
|
||||
@Data |
||||
public class ScrollResult { |
||||
private List<?> list; |
||||
private Long minTime; |
||||
private Integer offset; |
||||
} |
@ -0,0 +1,10 @@ |
||||
package com.hmdp.dto; |
||||
|
||||
import lombok.Data; |
||||
|
||||
@Data |
||||
public class UserDTO { |
||||
private Long id; |
||||
private String nickName; |
||||
private String icon; |
||||
} |
@ -0,0 +1,95 @@ |
||||
package com.hmdp.entity; |
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType; |
||||
import com.baomidou.mybatisplus.annotation.TableField; |
||||
import com.baomidou.mybatisplus.annotation.TableId; |
||||
import com.baomidou.mybatisplus.annotation.TableName; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
import lombok.experimental.Accessors; |
||||
|
||||
import java.io.Serializable; |
||||
import java.time.LocalDateTime; |
||||
|
||||
/** |
||||
* <p> |
||||
* |
||||
* </p> |
||||
* |
||||
* @author 虎哥 |
||||
* @since 2021-12-22 |
||||
*/ |
||||
@Data |
||||
@EqualsAndHashCode(callSuper = false) |
||||
@Accessors(chain = true) |
||||
@TableName("tb_blog") |
||||
public class Blog implements Serializable { |
||||
|
||||
private static final long serialVersionUID = 1L; |
||||
|
||||
/** |
||||
* 主键 |
||||
*/ |
||||
@TableId(value = "id", type = IdType.AUTO) |
||||
private Long id; |
||||
/** |
||||
* 商户id |
||||
*/ |
||||
private Long shopId; |
||||
/** |
||||
* 用户id |
||||
*/ |
||||
private Long userId; |
||||
/** |
||||
* 用户图标 |
||||
*/ |
||||
@TableField(exist = false) |
||||
private String icon; |
||||
/** |
||||
* 用户姓名 |
||||
*/ |
||||
@TableField(exist = false) |
||||
private String name; |
||||
/** |
||||
* 是否点赞过了 |
||||
*/ |
||||
@TableField(exist = false) |
||||
private Boolean isLike; |
||||
|
||||
/** |
||||
* 标题 |
||||
*/ |
||||
private String title; |
||||
|
||||
/** |
||||
* 探店的照片,最多9张,多张以","隔开 |
||||
*/ |
||||
private String images; |
||||
|
||||
/** |
||||
* 探店的文字描述 |
||||
*/ |
||||
private String content; |
||||
|
||||
/** |
||||
* 点赞数量 |
||||
*/ |
||||
private Integer liked; |
||||
|
||||
/** |
||||
* 评论数量 |
||||
*/ |
||||
private Integer comments; |
||||
|
||||
/** |
||||
* 创建时间 |
||||
*/ |
||||
private LocalDateTime createTime; |
||||
|
||||
/** |
||||
* 更新时间 |
||||
*/ |
||||
private LocalDateTime updateTime; |
||||
|
||||
|
||||
} |
@ -0,0 +1,81 @@ |
||||
package com.hmdp.entity; |
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType; |
||||
import com.baomidou.mybatisplus.annotation.TableId; |
||||
import com.baomidou.mybatisplus.annotation.TableName; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
import lombok.experimental.Accessors; |
||||
|
||||
import java.io.Serializable; |
||||
import java.time.LocalDateTime; |
||||
|
||||
/** |
||||
* <p> |
||||
* |
||||
* </p> |
||||
* |
||||
* @author 虎哥 |
||||
* @since 2021-12-22 |
||||
*/ |
||||
@Data |
||||
@EqualsAndHashCode(callSuper = false) |
||||
@Accessors(chain = true) |
||||
@TableName("tb_blog_comments") |
||||
public class BlogComments implements Serializable { |
||||
|
||||
private static final long serialVersionUID = 1L; |
||||
|
||||
/** |
||||
* 主键 |
||||
*/ |
||||
@TableId(value = "id", type = IdType.AUTO) |
||||
private Long id; |
||||
|
||||
/** |
||||
* 用户id |
||||
*/ |
||||
private Long userId; |
||||
|
||||
/** |
||||
* 探店id |
||||
*/ |
||||
private Long blogId; |
||||
|
||||
/** |
||||
* 关联的1级评论id,如果是一级评论,则值为0 |
||||
*/ |
||||
private Long parentId; |
||||
|
||||
/** |
||||
* 回复的评论id |
||||
*/ |
||||
private Long answerId; |
||||
|
||||
/** |
||||
* 回复的内容 |
||||
*/ |
||||
private String content; |
||||
|
||||
/** |
||||
* 点赞数 |
||||
*/ |
||||
private Integer liked; |
||||
|
||||
/** |
||||
* 状态,0:正常,1:被举报,2:禁止查看 |
||||
*/ |
||||
private Boolean status; |
||||
|
||||
/** |
||||
* 创建时间 |
||||
*/ |
||||
private LocalDateTime createTime; |
||||
|
||||
/** |
||||
* 更新时间 |
||||
*/ |
||||
private LocalDateTime updateTime; |
||||
|
||||
|
||||
} |
@ -0,0 +1,51 @@ |
||||
package com.hmdp.entity; |
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType; |
||||
import com.baomidou.mybatisplus.annotation.TableId; |
||||
import com.baomidou.mybatisplus.annotation.TableName; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
import lombok.experimental.Accessors; |
||||
|
||||
import java.io.Serializable; |
||||
import java.time.LocalDateTime; |
||||
|
||||
/** |
||||
* <p> |
||||
* |
||||
* </p> |
||||
* |
||||
* @author 虎哥 |
||||
* @since 2021-12-22 |
||||
*/ |
||||
@Data |
||||
@EqualsAndHashCode(callSuper = false) |
||||
@Accessors(chain = true) |
||||
@TableName("tb_follow") |
||||
public class Follow implements Serializable { |
||||
|
||||
private static final long serialVersionUID = 1L; |
||||
|
||||
/** |
||||
* 主键 |
||||
*/ |
||||
@TableId(value = "id", type = IdType.AUTO) |
||||
private Long id; |
||||
|
||||
/** |
||||
* 用户id |
||||
*/ |
||||
private Long userId; |
||||
|
||||
/** |
||||
* 关联的用户id |
||||
*/ |
||||
private Long followUserId; |
||||
|
||||
/** |
||||
* 创建时间 |
||||
*/ |
||||
private LocalDateTime createTime; |
||||
|
||||
|
||||
} |
@ -0,0 +1,61 @@ |
||||
package com.hmdp.entity; |
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType; |
||||
import com.baomidou.mybatisplus.annotation.TableId; |
||||
import com.baomidou.mybatisplus.annotation.TableName; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
import lombok.experimental.Accessors; |
||||
|
||||
import java.io.Serializable; |
||||
import java.time.LocalDateTime; |
||||
|
||||
/** |
||||
* <p> |
||||
* 秒杀优惠券表,与优惠券是一对一关系 |
||||
* </p> |
||||
* |
||||
* @author 虎哥 |
||||
* @since 2022-01-04 |
||||
*/ |
||||
@Data |
||||
@EqualsAndHashCode(callSuper = false) |
||||
@Accessors(chain = true) |
||||
@TableName("tb_seckill_voucher") |
||||
public class SeckillVoucher implements Serializable { |
||||
|
||||
private static final long serialVersionUID = 1L; |
||||
|
||||
/** |
||||
* 关联的优惠券的id |
||||
*/ |
||||
@TableId(value = "voucher_id", type = IdType.INPUT) |
||||
private Long voucherId; |
||||
|
||||
/** |
||||
* 库存 |
||||
*/ |
||||
private Integer stock; |
||||
|
||||
/** |
||||
* 创建时间 |
||||
*/ |
||||
private LocalDateTime createTime; |
||||
|
||||
/** |
||||
* 生效时间 |
||||
*/ |
||||
private LocalDateTime beginTime; |
||||
|
||||
/** |
||||
* 失效时间 |
||||
*/ |
||||
private LocalDateTime endTime; |
||||
|
||||
/** |
||||
* 更新时间 |
||||
*/ |
||||
private LocalDateTime updateTime; |
||||
|
||||
|
||||
} |
@ -0,0 +1,109 @@ |
||||
package com.hmdp.entity; |
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType; |
||||
import com.baomidou.mybatisplus.annotation.TableField; |
||||
import com.baomidou.mybatisplus.annotation.TableId; |
||||
import com.baomidou.mybatisplus.annotation.TableName; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
import lombok.experimental.Accessors; |
||||
|
||||
import java.io.Serializable; |
||||
import java.time.LocalDateTime; |
||||
|
||||
/** |
||||
* <p> |
||||
* |
||||
* </p> |
||||
* |
||||
* @author 虎哥 |
||||
* @since 2021-12-22 |
||||
*/ |
||||
@Data |
||||
@EqualsAndHashCode(callSuper = false) |
||||
@Accessors(chain = true) |
||||
@TableName("tb_shop") |
||||
public class Shop implements Serializable { |
||||
|
||||
private static final long serialVersionUID = 1L; |
||||
|
||||
/** |
||||
* 主键 |
||||
*/ |
||||
@TableId(value = "id", type = IdType.AUTO) |
||||
private Long id; |
||||
|
||||
/** |
||||
* 商铺名称 |
||||
*/ |
||||
private String name; |
||||
|
||||
/** |
||||
* 商铺类型的id |
||||
*/ |
||||
private Long typeId; |
||||
|
||||
/** |
||||
* 商铺图片,多个图片以','隔开 |
||||
*/ |
||||
private String images; |
||||
|
||||
/** |
||||
* 商圈,例如陆家嘴 |
||||
*/ |
||||
private String area; |
||||
|
||||
/** |
||||
* 地址 |
||||
*/ |
||||
private String address; |
||||
|
||||
/** |
||||
* 经度 |
||||
*/ |
||||
private Double x; |
||||
|
||||
/** |
||||
* 维度 |
||||
*/ |
||||
private Double y; |
||||
|
||||
/** |
||||
* 均价,取整数 |
||||
*/ |
||||
private Long avgPrice; |
||||
|
||||
/** |
||||
* 销量 |
||||
*/ |
||||
private Integer sold; |
||||
|
||||
/** |
||||
* 评论数量 |
||||
*/ |
||||
private Integer comments; |
||||
|
||||
/** |
||||
* 评分,1~5分,乘10保存,避免小数 |
||||
*/ |
||||
private Integer score; |
||||
|
||||
/** |
||||
* 营业时间,例如 10:00-22:00 |
||||
*/ |
||||
private String openHours; |
||||
|
||||
/** |
||||
* 创建时间 |
||||
*/ |
||||
private LocalDateTime createTime; |
||||
|
||||
/** |
||||
* 更新时间 |
||||
*/ |
||||
private LocalDateTime updateTime; |
||||
|
||||
|
||||
@TableField(exist = false) |
||||
private Double distance; |
||||
} |
@ -0,0 +1,64 @@ |
||||
package com.hmdp.entity; |
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType; |
||||
import com.baomidou.mybatisplus.annotation.TableId; |
||||
import com.baomidou.mybatisplus.annotation.TableName; |
||||
import com.fasterxml.jackson.annotation.JsonIgnore; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
import lombok.experimental.Accessors; |
||||
|
||||
import java.io.Serializable; |
||||
import java.time.LocalDateTime; |
||||
|
||||
/** |
||||
* <p> |
||||
* |
||||
* </p> |
||||
* |
||||
* @author 虎哥 |
||||
* @since 2021-12-22 |
||||
*/ |
||||
@Data |
||||
@EqualsAndHashCode(callSuper = false) |
||||
@Accessors(chain = true) |
||||
@TableName("tb_shop_type") |
||||
public class ShopType implements Serializable { |
||||
|
||||
private static final long serialVersionUID = 1L; |
||||
|
||||
/** |
||||
* 主键 |
||||
*/ |
||||
@TableId(value = "id", type = IdType.AUTO) |
||||
private Long id; |
||||
|
||||
/** |
||||
* 类型名称 |
||||
*/ |
||||
private String name; |
||||
|
||||
/** |
||||
* 图标 |
||||
*/ |
||||
private String icon; |
||||
|
||||
/** |
||||
* 顺序 |
||||
*/ |
||||
private Integer sort; |
||||
|
||||
/** |
||||
* 创建时间 |
||||
*/ |
||||
@JsonIgnore |
||||
private LocalDateTime createTime; |
||||
|
||||
/** |
||||
* 更新时间 |
||||
*/ |
||||
@JsonIgnore |
||||
private LocalDateTime updateTime; |
||||
|
||||
|
||||
} |
@ -0,0 +1,66 @@ |
||||
package com.hmdp.entity; |
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType; |
||||
import com.baomidou.mybatisplus.annotation.TableId; |
||||
import com.baomidou.mybatisplus.annotation.TableName; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
import lombok.experimental.Accessors; |
||||
|
||||
import java.io.Serializable; |
||||
import java.time.LocalDateTime; |
||||
|
||||
/** |
||||
* <p> |
||||
* |
||||
* </p> |
||||
* |
||||
* @author 虎哥 |
||||
* @since 2021-12-22 |
||||
*/ |
||||
@Data |
||||
@EqualsAndHashCode(callSuper = false) |
||||
@Accessors(chain = true) |
||||
@TableName("tb_user") |
||||
public class User implements Serializable { |
||||
|
||||
private static final long serialVersionUID = 1L; |
||||
|
||||
/** |
||||
* 主键 |
||||
*/ |
||||
@TableId(value = "id", type = IdType.AUTO) |
||||
private Long id; |
||||
|
||||
/** |
||||
* 手机号码 |
||||
*/ |
||||
private String phone; |
||||
|
||||
/** |
||||
* 密码,加密存储 |
||||
*/ |
||||
private String password; |
||||
|
||||
/** |
||||
* 昵称,默认是随机字符 |
||||
*/ |
||||
private String nickName; |
||||
|
||||
/** |
||||
* 用户头像 |
||||
*/ |
||||
private String icon = ""; |
||||
|
||||
/** |
||||
* 创建时间 |
||||
*/ |
||||
private LocalDateTime createTime; |
||||
|
||||
/** |
||||
* 更新时间 |
||||
*/ |
||||
private LocalDateTime updateTime; |
||||
|
||||
|
||||
} |
@ -0,0 +1,87 @@ |
||||
package com.hmdp.entity; |
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType; |
||||
import com.baomidou.mybatisplus.annotation.TableId; |
||||
import com.baomidou.mybatisplus.annotation.TableName; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
import lombok.experimental.Accessors; |
||||
|
||||
import java.io.Serializable; |
||||
import java.time.LocalDate; |
||||
import java.time.LocalDateTime; |
||||
|
||||
/** |
||||
* <p> |
||||
* |
||||
* </p> |
||||
* |
||||
* @author 虎哥 |
||||
* @since 2021-12-24 |
||||
*/ |
||||
@Data |
||||
@EqualsAndHashCode(callSuper = false) |
||||
@Accessors(chain = true) |
||||
@TableName("tb_user_info") |
||||
public class UserInfo implements Serializable { |
||||
|
||||
private static final long serialVersionUID = 1L; |
||||
|
||||
/** |
||||
* 主键,用户id |
||||
*/ |
||||
@TableId(value = "user_id", type = IdType.AUTO) |
||||
private Long userId; |
||||
|
||||
/** |
||||
* 城市名称 |
||||
*/ |
||||
private String city; |
||||
|
||||
/** |
||||
* 个人介绍,不要超过128个字符 |
||||
*/ |
||||
private String introduce; |
||||
|
||||
/** |
||||
* 粉丝数量 |
||||
*/ |
||||
private Integer fans; |
||||
|
||||
/** |
||||
* 关注的人的数量 |
||||
*/ |
||||
private Integer followee; |
||||
|
||||
/** |
||||
* 性别,0:男,1:女 |
||||
*/ |
||||
private Boolean gender; |
||||
|
||||
/** |
||||
* 生日 |
||||
*/ |
||||
private LocalDate birthday; |
||||
|
||||
/** |
||||
* 积分 |
||||
*/ |
||||
private Integer credits; |
||||
|
||||
/** |
||||
* 会员级别,0~9级,0代表未开通会员 |
||||
*/ |
||||
private Boolean level; |
||||
|
||||
/** |
||||
* 创建时间 |
||||
*/ |
||||
private LocalDateTime createTime; |
||||
|
||||
/** |
||||
* 更新时间 |
||||
*/ |
||||
private LocalDateTime updateTime; |
||||
|
||||
|
||||
} |
@ -0,0 +1,105 @@ |
||||
package com.hmdp.entity; |
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType; |
||||
import com.baomidou.mybatisplus.annotation.TableField; |
||||
import com.baomidou.mybatisplus.annotation.TableId; |
||||
import com.baomidou.mybatisplus.annotation.TableName; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
import lombok.experimental.Accessors; |
||||
|
||||
import java.io.Serializable; |
||||
import java.time.LocalDateTime; |
||||
|
||||
/** |
||||
* <p> |
||||
* |
||||
* </p> |
||||
* |
||||
* @author 虎哥 |
||||
* @since 2021-12-22 |
||||
*/ |
||||
@Data |
||||
@EqualsAndHashCode(callSuper = false) |
||||
@Accessors(chain = true) |
||||
@TableName("tb_voucher") |
||||
public class Voucher implements Serializable { |
||||
|
||||
private static final long serialVersionUID = 1L; |
||||
|
||||
/** |
||||
* 主键 |
||||
*/ |
||||
@TableId(value = "id", type = IdType.AUTO) |
||||
private Long id; |
||||
|
||||
/** |
||||
* 商铺id |
||||
*/ |
||||
private Long shopId; |
||||
|
||||
/** |
||||
* 代金券标题 |
||||
*/ |
||||
private String title; |
||||
|
||||
/** |
||||
* 副标题 |
||||
*/ |
||||
private String subTitle; |
||||
|
||||
/** |
||||
* 使用规则 |
||||
*/ |
||||
private String rules; |
||||
|
||||
/** |
||||
* 支付金额 |
||||
*/ |
||||
private Long payValue; |
||||
|
||||
/** |
||||
* 抵扣金额 |
||||
*/ |
||||
private Long actualValue; |
||||
|
||||
/** |
||||
* 优惠券类型 |
||||
*/ |
||||
private Integer type; |
||||
|
||||
/** |
||||
* 优惠券类型 |
||||
*/ |
||||
private Integer status; |
||||
/** |
||||
* 库存 |
||||
*/ |
||||
@TableField(exist = false) |
||||
private Integer stock; |
||||
|
||||
/** |
||||
* 生效时间 |
||||
*/ |
||||
@TableField(exist = false) |
||||
private LocalDateTime beginTime; |
||||
|
||||
/** |
||||
* 失效时间 |
||||
*/ |
||||
@TableField(exist = false) |
||||
private LocalDateTime endTime; |
||||
|
||||
/** |
||||
* 创建时间 |
||||
*/ |
||||
private LocalDateTime createTime; |
||||
|
||||
|
||||
/** |
||||
* 更新时间 |
||||
*/ |
||||
private LocalDateTime updateTime; |
||||
|
||||
|
||||
} |
@ -0,0 +1,81 @@ |
||||
package com.hmdp.entity; |
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType; |
||||
import com.baomidou.mybatisplus.annotation.TableId; |
||||
import com.baomidou.mybatisplus.annotation.TableName; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
import lombok.experimental.Accessors; |
||||
|
||||
import java.io.Serializable; |
||||
import java.time.LocalDateTime; |
||||
|
||||
/** |
||||
* <p> |
||||
* |
||||
* </p> |
||||
* |
||||
* @author 虎哥 |
||||
* @since 2021-12-22 |
||||
*/ |
||||
@Data |
||||
@EqualsAndHashCode(callSuper = false) |
||||
@Accessors(chain = true) |
||||
@TableName("tb_voucher_order") |
||||
public class VoucherOrder implements Serializable { |
||||
|
||||
private static final long serialVersionUID = 1L; |
||||
|
||||
/** |
||||
* 主键 |
||||
*/ |
||||
@TableId(value = "id", type = IdType.INPUT) |
||||
private Long id; |
||||
|
||||
/** |
||||
* 下单的用户id |
||||
*/ |
||||
private Long userId; |
||||
|
||||
/** |
||||
* 购买的代金券id |
||||
*/ |
||||
private Long voucherId; |
||||
|
||||
/** |
||||
* 支付方式 1:余额支付;2:支付宝;3:微信 |
||||
*/ |
||||
private Integer payType; |
||||
|
||||
/** |
||||
* 订单状态,1:未支付;2:已支付;3:已核销;4:已取消;5:退款中;6:已退款 |
||||
*/ |
||||
private Integer status; |
||||
|
||||
/** |
||||
* 下单时间 |
||||
*/ |
||||
private LocalDateTime createTime; |
||||
|
||||
/** |
||||
* 支付时间 |
||||
*/ |
||||
private LocalDateTime payTime; |
||||
|
||||
/** |
||||
* 核销时间 |
||||
*/ |
||||
private LocalDateTime useTime; |
||||
|
||||
/** |
||||
* 退款时间 |
||||
*/ |
||||
private LocalDateTime refundTime; |
||||
|
||||
/** |
||||
* 更新时间 |
||||
*/ |
||||
private LocalDateTime updateTime; |
||||
|
||||
|
||||
} |
@ -0,0 +1,16 @@ |
||||
package com.hmdp.mapper; |
||||
|
||||
import com.hmdp.entity.BlogComments; |
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
|
||||
/** |
||||
* <p> |
||||
* Mapper 接口 |
||||
* </p> |
||||
* |
||||
* @author 虎哥 |
||||
* @since 2021-12-22 |
||||
*/ |
||||
public interface BlogCommentsMapper extends BaseMapper<BlogComments> { |
||||
|
||||
} |
@ -0,0 +1,16 @@ |
||||
package com.hmdp.mapper; |
||||
|
||||
import com.hmdp.entity.Blog; |
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
|
||||
/** |
||||
* <p> |
||||
* Mapper 接口 |
||||
* </p> |
||||
* |
||||
* @author 虎哥 |
||||
* @since 2021-12-22 |
||||
*/ |
||||
public interface BlogMapper extends BaseMapper<Blog> { |
||||
|
||||
} |
@ -0,0 +1,16 @@ |
||||
package com.hmdp.mapper; |
||||
|
||||
import com.hmdp.entity.Follow; |
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
|
||||
/** |
||||
* <p> |
||||
* Mapper 接口 |
||||
* </p> |
||||
* |
||||
* @author 虎哥 |
||||
* @since 2021-12-22 |
||||
*/ |
||||
public interface FollowMapper extends BaseMapper<Follow> { |
||||
|
||||
} |
@ -0,0 +1,16 @@ |
||||
package com.hmdp.mapper; |
||||
|
||||
import com.hmdp.entity.SeckillVoucher; |
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
|
||||
/** |
||||
* <p> |
||||
* 秒杀优惠券表,与优惠券是一对一关系 Mapper 接口 |
||||
* </p> |
||||
* |
||||
* @author 虎哥 |
||||
* @since 2022-01-04 |
||||
*/ |
||||
public interface SeckillVoucherMapper extends BaseMapper<SeckillVoucher> { |
||||
|
||||
} |
@ -0,0 +1,16 @@ |
||||
package com.hmdp.mapper; |
||||
|
||||
import com.hmdp.entity.Shop; |
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
|
||||
/** |
||||
* <p> |
||||
* Mapper 接口 |
||||
* </p> |
||||
* |
||||
* @author 虎哥 |
||||
* @since 2021-12-22 |
||||
*/ |
||||
public interface ShopMapper extends BaseMapper<Shop> { |
||||
|
||||
} |
@ -0,0 +1,16 @@ |
||||
package com.hmdp.mapper; |
||||
|
||||
import com.hmdp.entity.ShopType; |
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
|
||||
/** |
||||
* <p> |
||||
* Mapper 接口 |
||||
* </p> |
||||
* |
||||
* @author 虎哥 |
||||
* @since 2021-12-22 |
||||
*/ |
||||
public interface ShopTypeMapper extends BaseMapper<ShopType> { |
||||
|
||||
} |
@ -0,0 +1,16 @@ |
||||
package com.hmdp.mapper; |
||||
|
||||
import com.hmdp.entity.UserInfo; |
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
|
||||
/** |
||||
* <p> |
||||
* Mapper 接口 |
||||
* </p> |
||||
* |
||||
* @author 虎哥 |
||||
* @since 2021-12-24 |
||||
*/ |
||||
public interface UserInfoMapper extends BaseMapper<UserInfo> { |
||||
|
||||
} |
@ -0,0 +1,16 @@ |
||||
package com.hmdp.mapper; |
||||
|
||||
import com.hmdp.entity.User; |
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
|
||||
/** |
||||
* <p> |
||||
* Mapper 接口 |
||||
* </p> |
||||
* |
||||
* @author 虎哥 |
||||
* @since 2021-12-22 |
||||
*/ |
||||
public interface UserMapper extends BaseMapper<User> { |
||||
|
||||
} |
@ -0,0 +1,20 @@ |
||||
package com.hmdp.mapper; |
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
import com.hmdp.entity.Voucher; |
||||
import org.apache.ibatis.annotations.Param; |
||||
|
||||
import java.util.List; |
||||
|
||||
/** |
||||
* <p> |
||||
* Mapper 接口 |
||||
* </p> |
||||
* |
||||
* @author 虎哥 |
||||
* @since 2021-12-22 |
||||
*/ |
||||
public interface VoucherMapper extends BaseMapper<Voucher> { |
||||
|
||||
List<Voucher> queryVoucherOfShop(@Param("shopId") Long shopId); |
||||
} |
@ -0,0 +1,16 @@ |
||||
package com.hmdp.mapper; |
||||
|
||||
import com.hmdp.entity.VoucherOrder; |
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
|
||||
/** |
||||
* <p> |
||||
* Mapper 接口 |
||||
* </p> |
||||
* |
||||
* @author 虎哥 |
||||
* @since 2021-12-22 |
||||
*/ |
||||
public interface VoucherOrderMapper extends BaseMapper<VoucherOrder> { |
||||
|
||||
} |
@ -0,0 +1,16 @@ |
||||
package com.hmdp.service; |
||||
|
||||
import com.hmdp.entity.BlogComments; |
||||
import com.baomidou.mybatisplus.extension.service.IService; |
||||
|
||||
/** |
||||
* <p> |
||||
* 服务类 |
||||
* </p> |
||||
* |
||||
* @author 虎哥 |
||||
* @since 2021-12-22 |
||||
*/ |
||||
public interface IBlogCommentsService extends IService<BlogComments> { |
||||
|
||||
} |
@ -0,0 +1,16 @@ |
||||
package com.hmdp.service; |
||||
|
||||
import com.hmdp.entity.Blog; |
||||
import com.baomidou.mybatisplus.extension.service.IService; |
||||
|
||||
/** |
||||
* <p> |
||||
* 服务类 |
||||
* </p> |
||||
* |
||||
* @author 虎哥 |
||||
* @since 2021-12-22 |
||||
*/ |
||||
public interface IBlogService extends IService<Blog> { |
||||
|
||||
} |
@ -0,0 +1,16 @@ |
||||
package com.hmdp.service; |
||||
|
||||
import com.hmdp.entity.Follow; |
||||
import com.baomidou.mybatisplus.extension.service.IService; |
||||
|
||||
/** |
||||
* <p> |
||||
* 服务类 |
||||
* </p> |
||||
* |
||||
* @author 虎哥 |
||||
* @since 2021-12-22 |
||||
*/ |
||||
public interface IFollowService extends IService<Follow> { |
||||
|
||||
} |
@ -0,0 +1,16 @@ |
||||
package com.hmdp.service; |
||||
|
||||
import com.hmdp.entity.SeckillVoucher; |
||||
import com.baomidou.mybatisplus.extension.service.IService; |
||||
|
||||
/** |
||||
* <p> |
||||
* 秒杀优惠券表,与优惠券是一对一关系 服务类 |
||||
* </p> |
||||
* |
||||
* @author 虎哥 |
||||
* @since 2022-01-04 |
||||
*/ |
||||
public interface ISeckillVoucherService extends IService<SeckillVoucher> { |
||||
|
||||
} |
@ -0,0 +1,16 @@ |
||||
package com.hmdp.service; |
||||
|
||||
import com.hmdp.entity.Shop; |
||||
import com.baomidou.mybatisplus.extension.service.IService; |
||||
|
||||
/** |
||||
* <p> |
||||
* 服务类 |
||||
* </p> |
||||
* |
||||
* @author 虎哥 |
||||
* @since 2021-12-22 |
||||
*/ |
||||
public interface IShopService extends IService<Shop> { |
||||
|
||||
} |
@ -0,0 +1,16 @@ |
||||
package com.hmdp.service; |
||||
|
||||
import com.hmdp.entity.ShopType; |
||||
import com.baomidou.mybatisplus.extension.service.IService; |
||||
|
||||
/** |
||||
* <p> |
||||
* 服务类 |
||||
* </p> |
||||
* |
||||
* @author 虎哥 |
||||
* @since 2021-12-22 |
||||
*/ |
||||
public interface IShopTypeService extends IService<ShopType> { |
||||
|
||||
} |
@ -0,0 +1,16 @@ |
||||
package com.hmdp.service; |
||||
|
||||
import com.hmdp.entity.UserInfo; |
||||
import com.baomidou.mybatisplus.extension.service.IService; |
||||
|
||||
/** |
||||
* <p> |
||||
* 服务类 |
||||
* </p> |
||||
* |
||||
* @author 虎哥 |
||||
* @since 2021-12-24 |
||||
*/ |
||||
public interface IUserInfoService extends IService<UserInfo> { |
||||
|
||||
} |
@ -0,0 +1,16 @@ |
||||
package com.hmdp.service; |
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService; |
||||
import com.hmdp.entity.User; |
||||
|
||||
/** |
||||
* <p> |
||||
* 服务类 |
||||
* </p> |
||||
* |
||||
* @author 虎哥 |
||||
* @since 2021-12-22 |
||||
*/ |
||||
public interface IUserService extends IService<User> { |
||||
|
||||
} |
@ -0,0 +1,16 @@ |
||||
package com.hmdp.service; |
||||
|
||||
import com.hmdp.entity.VoucherOrder; |
||||
import com.baomidou.mybatisplus.extension.service.IService; |
||||
|
||||
/** |
||||
* <p> |
||||
* 服务类 |
||||
* </p> |
||||
* |
||||
* @author 虎哥 |
||||
* @since 2021-12-22 |
||||
*/ |
||||
public interface IVoucherOrderService extends IService<VoucherOrder> { |
||||
|
||||
} |
@ -0,0 +1,20 @@ |
||||
package com.hmdp.service; |
||||
|
||||
import com.hmdp.dto.Result; |
||||
import com.hmdp.entity.Voucher; |
||||
import com.baomidou.mybatisplus.extension.service.IService; |
||||
|
||||
/** |
||||
* <p> |
||||
* 服务类 |
||||
* </p> |
||||
* |
||||
* @author 虎哥 |
||||
* @since 2021-12-22 |
||||
*/ |
||||
public interface IVoucherService extends IService<Voucher> { |
||||
|
||||
Result queryVoucherOfShop(Long shopId); |
||||
|
||||
void addSeckillVoucher(Voucher voucher); |
||||
} |
@ -0,0 +1,20 @@ |
||||
package com.hmdp.service.impl; |
||||
|
||||
import com.hmdp.entity.BlogComments; |
||||
import com.hmdp.mapper.BlogCommentsMapper; |
||||
import com.hmdp.service.IBlogCommentsService; |
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
||||
import org.springframework.stereotype.Service; |
||||
|
||||
/** |
||||
* <p> |
||||
* 服务实现类 |
||||
* </p> |
||||
* |
||||
* @author 虎哥 |
||||
* @since 2021-12-22 |
||||
*/ |
||||
@Service |
||||
public class BlogCommentsServiceImpl extends ServiceImpl<BlogCommentsMapper, BlogComments> implements IBlogCommentsService { |
||||
|
||||
} |
@ -0,0 +1,20 @@ |
||||
package com.hmdp.service.impl; |
||||
|
||||
import com.hmdp.entity.Blog; |
||||
import com.hmdp.mapper.BlogMapper; |
||||
import com.hmdp.service.IBlogService; |
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
||||
import org.springframework.stereotype.Service; |
||||
|
||||
/** |
||||
* <p> |
||||
* 服务实现类 |
||||
* </p> |
||||
* |
||||
* @author 虎哥 |
||||
* @since 2021-12-22 |
||||
*/ |
||||
@Service |
||||
public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IBlogService { |
||||
|
||||
} |
@ -0,0 +1,20 @@ |
||||
package com.hmdp.service.impl; |
||||
|
||||
import com.hmdp.entity.Follow; |
||||
import com.hmdp.mapper.FollowMapper; |
||||
import com.hmdp.service.IFollowService; |
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
||||
import org.springframework.stereotype.Service; |
||||
|
||||
/** |
||||
* <p> |
||||
* 服务实现类 |
||||
* </p> |
||||
* |
||||
* @author 虎哥 |
||||
* @since 2021-12-22 |
||||
*/ |
||||
@Service |
||||
public class FollowServiceImpl extends ServiceImpl<FollowMapper, Follow> implements IFollowService { |
||||
|
||||
} |
@ -0,0 +1,20 @@ |
||||
package com.hmdp.service.impl; |
||||
|
||||
import com.hmdp.entity.SeckillVoucher; |
||||
import com.hmdp.mapper.SeckillVoucherMapper; |
||||
import com.hmdp.service.ISeckillVoucherService; |
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
||||
import org.springframework.stereotype.Service; |
||||
|
||||
/** |
||||
* <p> |
||||
* 秒杀优惠券表,与优惠券是一对一关系 服务实现类 |
||||
* </p> |
||||
* |
||||
* @author 虎哥 |
||||
* @since 2022-01-04 |
||||
*/ |
||||
@Service |
||||
public class SeckillVoucherServiceImpl extends ServiceImpl<SeckillVoucherMapper, SeckillVoucher> implements ISeckillVoucherService { |
||||
|
||||
} |
@ -0,0 +1,20 @@ |
||||
package com.hmdp.service.impl; |
||||
|
||||
import com.hmdp.entity.Shop; |
||||
import com.hmdp.mapper.ShopMapper; |
||||
import com.hmdp.service.IShopService; |
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
||||
import org.springframework.stereotype.Service; |
||||
|
||||
/** |
||||
* <p> |
||||
* 服务实现类 |
||||
* </p> |
||||
* |
||||
* @author 虎哥 |
||||
* @since 2021-12-22 |
||||
*/ |
||||
@Service |
||||
public class ShopServiceImpl extends ServiceImpl<ShopMapper, Shop> implements IShopService { |
||||
|
||||
} |
@ -0,0 +1,20 @@ |
||||
package com.hmdp.service.impl; |
||||
|
||||
import com.hmdp.entity.ShopType; |
||||
import com.hmdp.mapper.ShopTypeMapper; |
||||
import com.hmdp.service.IShopTypeService; |
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
||||
import org.springframework.stereotype.Service; |
||||
|
||||
/** |
||||
* <p> |
||||
* 服务实现类 |
||||
* </p> |
||||
* |
||||
* @author 虎哥 |
||||
* @since 2021-12-22 |
||||
*/ |
||||
@Service |
||||
public class ShopTypeServiceImpl extends ServiceImpl<ShopTypeMapper, ShopType> implements IShopTypeService { |
||||
|
||||
} |
@ -0,0 +1,20 @@ |
||||
package com.hmdp.service.impl; |
||||
|
||||
import com.hmdp.entity.UserInfo; |
||||
import com.hmdp.mapper.UserInfoMapper; |
||||
import com.hmdp.service.IUserInfoService; |
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
||||
import org.springframework.stereotype.Service; |
||||
|
||||
/** |
||||
* <p> |
||||
* 服务实现类 |
||||
* </p> |
||||
* |
||||
* @author 虎哥 |
||||
* @since 2021-12-24 |
||||
*/ |
||||
@Service |
||||
public class UserInfoServiceImpl extends ServiceImpl<UserInfoMapper, UserInfo> implements IUserInfoService { |
||||
|
||||
} |
@ -0,0 +1,20 @@ |
||||
package com.hmdp.service.impl; |
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
||||
import com.hmdp.entity.User; |
||||
import com.hmdp.mapper.UserMapper; |
||||
import com.hmdp.service.IUserService; |
||||
import org.springframework.stereotype.Service; |
||||
|
||||
/** |
||||
* <p> |
||||
* 服务实现类 |
||||
* </p> |
||||
* |
||||
* @author 虎哥 |
||||
* @since 2021-12-22 |
||||
*/ |
||||
@Service |
||||
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService { |
||||
|
||||
} |
@ -0,0 +1,20 @@ |
||||
package com.hmdp.service.impl; |
||||
|
||||
import com.hmdp.entity.VoucherOrder; |
||||
import com.hmdp.mapper.VoucherOrderMapper; |
||||
import com.hmdp.service.IVoucherOrderService; |
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
||||
import org.springframework.stereotype.Service; |
||||
|
||||
/** |
||||
* <p> |
||||
* 服务实现类 |
||||
* </p> |
||||
* |
||||
* @author 虎哥 |
||||
* @since 2021-12-22 |
||||
*/ |
||||
@Service |
||||
public class VoucherOrderServiceImpl extends ServiceImpl<VoucherOrderMapper, VoucherOrder> implements IVoucherOrderService { |
||||
|
||||
} |
@ -0,0 +1,51 @@ |
||||
package com.hmdp.service.impl; |
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
||||
import com.hmdp.dto.Result; |
||||
import com.hmdp.entity.Voucher; |
||||
import com.hmdp.mapper.VoucherMapper; |
||||
import com.hmdp.entity.SeckillVoucher; |
||||
import com.hmdp.service.ISeckillVoucherService; |
||||
import com.hmdp.service.IVoucherService; |
||||
import org.springframework.stereotype.Service; |
||||
import org.springframework.transaction.annotation.Transactional; |
||||
|
||||
import javax.annotation.Resource; |
||||
import java.util.List; |
||||
|
||||
/** |
||||
* <p> |
||||
* 服务实现类 |
||||
* </p> |
||||
* |
||||
* @author 虎哥 |
||||
* @since 2021-12-22 |
||||
*/ |
||||
@Service |
||||
public class VoucherServiceImpl extends ServiceImpl<VoucherMapper, Voucher> implements IVoucherService { |
||||
|
||||
@Resource |
||||
private ISeckillVoucherService seckillVoucherService; |
||||
|
||||
@Override |
||||
public Result queryVoucherOfShop(Long shopId) { |
||||
// 查询优惠券信息
|
||||
List<Voucher> vouchers = getBaseMapper().queryVoucherOfShop(shopId); |
||||
// 返回结果
|
||||
return Result.ok(vouchers); |
||||
} |
||||
|
||||
@Override |
||||
@Transactional |
||||
public void addSeckillVoucher(Voucher voucher) { |
||||
// 保存优惠券
|
||||
save(voucher); |
||||
// 保存秒杀信息
|
||||
SeckillVoucher seckillVoucher = new SeckillVoucher(); |
||||
seckillVoucher.setVoucherId(voucher.getId()); |
||||
seckillVoucher.setStock(voucher.getStock()); |
||||
seckillVoucher.setBeginTime(voucher.getBeginTime()); |
||||
seckillVoucher.setEndTime(voucher.getEndTime()); |
||||
seckillVoucherService.save(seckillVoucher); |
||||
} |
||||
} |
@ -0,0 +1,34 @@ |
||||
package com.hmdp.utils; |
||||
|
||||
|
||||
import cn.hutool.core.util.RandomUtil; |
||||
import org.springframework.util.DigestUtils; |
||||
|
||||
import java.nio.charset.StandardCharsets; |
||||
|
||||
public class PasswordEncoder { |
||||
|
||||
public static String encode(String password) { |
||||
// 生成盐
|
||||
String salt = RandomUtil.randomString(20); |
||||
// 加密
|
||||
return encode(password,salt); |
||||
} |
||||
private static String encode(String password, String salt) { |
||||
// 加密
|
||||
return salt + "@" + DigestUtils.md5DigestAsHex((password + salt).getBytes(StandardCharsets.UTF_8)); |
||||
} |
||||
public static Boolean matches(String encodedPassword, String rawPassword) { |
||||
if (encodedPassword == null || rawPassword == null) { |
||||
return false; |
||||
} |
||||
if(!encodedPassword.contains("@")){ |
||||
throw new RuntimeException("密码格式不正确!"); |
||||
} |
||||
String[] arr = encodedPassword.split("@"); |
||||
// 获取盐
|
||||
String salt = arr[0]; |
||||
// 比较
|
||||
return encodedPassword.equals(encode(rawPassword, salt)); |
||||
} |
||||
} |
@ -0,0 +1,22 @@ |
||||
package com.hmdp.utils; |
||||
|
||||
public class RedisConstants { |
||||
public static final String LOGIN_CODE_KEY = "login:code:"; |
||||
public static final Long LOGIN_CODE_TTL = 2L; |
||||
public static final String LOGIN_USER_KEY = "login:token:"; |
||||
public static final Long LOGIN_USER_TTL = 36000L; |
||||
|
||||
public static final Long CACHE_NULL_TTL = 2L; |
||||
|
||||
public static final Long CACHE_SHOP_TTL = 30L; |
||||
public static final String CACHE_SHOP_KEY = "cache:shop:"; |
||||
|
||||
public static final String LOCK_SHOP_KEY = "lock:shop:"; |
||||
public static final Long LOCK_SHOP_TTL = 10L; |
||||
|
||||
public static final String SECKILL_STOCK_KEY = "seckill:stock:"; |
||||
public static final String BLOG_LIKED_KEY = "blog:liked:"; |
||||
public static final String FEED_KEY = "feed:"; |
||||
public static final String SHOP_GEO_KEY = "shop:geo:"; |
||||
public static final String USER_SIGN_KEY = "sign:"; |
||||
} |
@ -0,0 +1,11 @@ |
||||
package com.hmdp.utils; |
||||
|
||||
import lombok.Data; |
||||
|
||||
import java.time.LocalDateTime; |
||||
|
||||
@Data |
||||
public class RedisData { |
||||
private LocalDateTime expireTime; |
||||
private Object data; |
||||
} |
@ -0,0 +1,24 @@ |
||||
package com.hmdp.utils; |
||||
|
||||
/** |
||||
* @author 虎哥 |
||||
*/ |
||||
public abstract class RegexPatterns { |
||||
/** |
||||
* 手机号正则 |
||||
*/ |
||||
public static final String PHONE_REGEX = "^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\\d{8}$"; |
||||
/** |
||||
* 邮箱正则 |
||||
*/ |
||||
public static final String EMAIL_REGEX = "^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$"; |
||||
/** |
||||
* 密码正则。4~32位的字母、数字、下划线 |
||||
*/ |
||||
public static final String PASSWORD_REGEX = "^\\w{4,32}$"; |
||||
/** |
||||
* 验证码正则, 6位数字或字母 |
||||
*/ |
||||
public static final String VERIFY_CODE_REGEX = "^[a-zA-Z\\d]{6}$"; |
||||
|
||||
} |
@ -0,0 +1,42 @@ |
||||
package com.hmdp.utils; |
||||
|
||||
import cn.hutool.core.util.StrUtil; |
||||
|
||||
/** |
||||
* @author 虎哥 |
||||
*/ |
||||
public class RegexUtils { |
||||
/** |
||||
* 是否是无效手机格式 |
||||
* @param phone 要校验的手机号 |
||||
* @return true:符合,false:不符合 |
||||
*/ |
||||
public static boolean isPhoneInvalid(String phone){ |
||||
return mismatch(phone, RegexPatterns.PHONE_REGEX); |
||||
} |
||||
/** |
||||
* 是否是无效邮箱格式 |
||||
* @param email 要校验的邮箱 |
||||
* @return true:符合,false:不符合 |
||||
*/ |
||||
public static boolean isEmailInvalid(String email){ |
||||
return mismatch(email, RegexPatterns.EMAIL_REGEX); |
||||
} |
||||
|
||||
/** |
||||
* 是否是无效验证码格式 |
||||
* @param code 要校验的验证码 |
||||
* @return true:符合,false:不符合 |
||||
*/ |
||||
public static boolean isCodeInvalid(String code){ |
||||
return mismatch(code, RegexPatterns.VERIFY_CODE_REGEX); |
||||
} |
||||
|
||||
// 校验是否不符合正则格式
|
||||
private static boolean mismatch(String str, String regex){ |
||||
if (StrUtil.isBlank(str)) { |
||||
return true; |
||||
} |
||||
return !str.matches(regex); |
||||
} |
||||
} |
@ -0,0 +1,8 @@ |
||||
package com.hmdp.utils; |
||||
|
||||
public class SystemConstants { |
||||
public static final String IMAGE_UPLOAD_DIR = "D:\\lesson\\nginx-1.18.0\\html\\hmdp\\imgs\\"; |
||||
public static final String USER_NICK_NAME_PREFIX = "user_"; |
||||
public static final int DEFAULT_PAGE_SIZE = 5; |
||||
public static final int MAX_PAGE_SIZE = 10; |
||||
} |
@ -0,0 +1,19 @@ |
||||
package com.hmdp.utils; |
||||
|
||||
import com.hmdp.dto.UserDTO; |
||||
|
||||
public class UserHolder { |
||||
private static final ThreadLocal<UserDTO> tl = new ThreadLocal<>(); |
||||
|
||||
public static void saveUser(UserDTO user){ |
||||
tl.set(user); |
||||
} |
||||
|
||||
public static UserDTO getUser(){ |
||||
return tl.get(); |
||||
} |
||||
|
||||
public static void removeUser(){ |
||||
tl.remove(); |
||||
} |
||||
} |
@ -0,0 +1,27 @@ |
||||
server: |
||||
port: 8081 |
||||
spring: |
||||
application: |
||||
name: hmdp |
||||
datasource: |
||||
driver-class-name: com.mysql.jdbc.Driver |
||||
url: jdbc:mysql://192.168.153.130:3306/hmdp?useSSL=false&serverTimezone=UTC |
||||
username: root |
||||
password: zfp251217 |
||||
redis: |
||||
host: 192.168.153.130 |
||||
port: 6379 |
||||
password: admin |
||||
lettuce: |
||||
pool: |
||||
max-active: 10 |
||||
max-idle: 10 |
||||
min-idle: 1 |
||||
time-between-eviction-runs: 10s |
||||
jackson: |
||||
default-property-inclusion: non_null # JSON处理时忽略非空字段 |
||||
mybatis-plus: |
||||
type-aliases-package: com.hmdp.entity # 别名扫描包 |
||||
logging: |
||||
level: |
||||
com.hmdp: debug |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,13 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
||||
<mapper namespace="com.hmdp.mapper.VoucherMapper"> |
||||
|
||||
<select id="queryVoucherOfShop" resultType="com.hmdp.entity.Voucher" parameterType="java.lang.Long"> |
||||
SELECT |
||||
v.`id`, v.`shop_id`, v.`title`, v.`sub_title`, v.`rules`, v.`pay_value`, |
||||
v.`actual_value`, v.`type`, sv.`stock` , sv.begin_time , sv.end_time |
||||
FROM tb_voucher v |
||||
LEFT JOIN tb_seckill_voucher sv ON v.id = sv.voucher_id |
||||
WHERE v.shop_id = #{shopId} AND v.status = 1 |
||||
</select> |
||||
</mapper> |
@ -0,0 +1,9 @@ |
||||
package com.hmdp; |
||||
|
||||
import org.springframework.boot.test.context.SpringBootTest; |
||||
|
||||
@SpringBootTest |
||||
class HmDianPingApplicationTests { |
||||
|
||||
|
||||
} |
@ -0,0 +1,8 @@ |
||||
# Default ignored files |
||||
/shelf/ |
||||
/workspace.xml |
||||
# Editor-based HTTP Client requests |
||||
/httpRequests/ |
||||
# Datasource local storage ignored files |
||||
/dataSources/ |
||||
/dataSources.local.xml |
@ -0,0 +1,13 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<project version="4"> |
||||
<component name="CompilerConfiguration"> |
||||
<annotationProcessing> |
||||
<profile name="Maven default annotation processors profile" enabled="true"> |
||||
<sourceOutputDir name="target/generated-sources/annotations" /> |
||||
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" /> |
||||
<outputRelativeToContentRoot value="true" /> |
||||
<module name="jedis_demo" /> |
||||
</profile> |
||||
</annotationProcessing> |
||||
</component> |
||||
</project> |
@ -0,0 +1,7 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<project version="4"> |
||||
<component name="Encoding"> |
||||
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" /> |
||||
<file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" /> |
||||
</component> |
||||
</project> |
@ -0,0 +1,25 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<project version="4"> |
||||
<component name="RemoteRepositoriesConfiguration"> |
||||
<remote-repository> |
||||
<option name="id" value="central" /> |
||||
<option name="name" value="Central Repository" /> |
||||
<option name="url" value="https://repo.maven.apache.org/maven2" /> |
||||
</remote-repository> |
||||
<remote-repository> |
||||
<option name="id" value="central" /> |
||||
<option name="name" value="Maven Central repository" /> |
||||
<option name="url" value="https://repo1.maven.org/maven2" /> |
||||
</remote-repository> |
||||
<remote-repository> |
||||
<option name="id" value="jboss.community" /> |
||||
<option name="name" value="JBoss Community repository" /> |
||||
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" /> |
||||
</remote-repository> |
||||
<remote-repository> |
||||
<option name="id" value="central" /> |
||||
<option name="name" value="Central Repository" /> |
||||
<option name="url" value="https://maven.aliyun.com/repository/public" /> |
||||
</remote-repository> |
||||
</component> |
||||
</project> |
@ -0,0 +1,14 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<project version="4"> |
||||
<component name="ExternalStorageConfigurationManager" enabled="true" /> |
||||
<component name="MavenProjectsManager"> |
||||
<option name="originalFiles"> |
||||
<list> |
||||
<option value="$PROJECT_DIR$/pom.xml" /> |
||||
</list> |
||||
</option> |
||||
</component> |
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="corretto-1.8" project-jdk-type="JavaSDK"> |
||||
<output url="file://$PROJECT_DIR$/out" /> |
||||
</component> |
||||
</project> |
@ -0,0 +1,6 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<project version="4"> |
||||
<component name="VcsDirectoryMappings"> |
||||
<mapping directory="$PROJECT_DIR$/.." vcs="Git" /> |
||||
</component> |
||||
</project> |
@ -0,0 +1,37 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" |
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
||||
<modelVersion>4.0.0</modelVersion> |
||||
|
||||
<groupId>com.redis</groupId> |
||||
<artifactId>jedis_demo</artifactId> |
||||
<version>1.0-SNAPSHOT</version> |
||||
|
||||
<properties> |
||||
<maven.compiler.source>8</maven.compiler.source> |
||||
<maven.compiler.target>8</maven.compiler.target> |
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> |
||||
</properties> |
||||
|
||||
<dependencies> |
||||
<!--jedis依赖 --> |
||||
<dependency> |
||||
<groupId>redis.clients</groupId> |
||||
<artifactId>jedis</artifactId> |
||||
<version>4.2.3</version> |
||||
</dependency> |
||||
|
||||
<!--引入单元测试依赖--> |
||||
<dependency> |
||||
<groupId>org.junit.jupiter</groupId> |
||||
<artifactId>junit-jupiter</artifactId> |
||||
<version>5.9.0</version> |
||||
<scope>test</scope> |
||||
</dependency> |
||||
|
||||
|
||||
</dependencies> |
||||
|
||||
|
||||
</project> |
@ -0,0 +1,30 @@ |
||||
package com.redis; |
||||
|
||||
import redis.clients.jedis.Jedis; |
||||
import redis.clients.jedis.JedisPool; |
||||
import redis.clients.jedis.JedisPoolConfig; |
||||
|
||||
import java.time.Duration; |
||||
|
||||
public class JedisConnectionFactory { |
||||
private static final JedisPool jedisPool; |
||||
static { |
||||
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); |
||||
// 最大连接
|
||||
jedisPoolConfig.setMaxTotal(8); |
||||
// 最大空闲连接
|
||||
jedisPoolConfig.setMaxIdle(8); |
||||
// 最小空闲连接,常备一个空闲连接
|
||||
jedisPoolConfig.setMinIdle(1); |
||||
// 设置最长等待时间,200ms
|
||||
jedisPoolConfig.setMaxWait(Duration.ofMillis(200)); |
||||
|
||||
jedisPool = new JedisPool(jedisPoolConfig, "192.168.153.130", 6379, 1000, "admin"); |
||||
} |
||||
|
||||
// 获取jedis对象
|
||||
public static Jedis getJedis() { |
||||
return jedisPool.getResource(); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,53 @@ |
||||
package com.redis.test; |
||||
|
||||
import com.redis.JedisConnectionFactory; |
||||
import org.junit.jupiter.api.AfterEach; |
||||
import org.junit.jupiter.api.BeforeEach; |
||||
import org.junit.jupiter.api.Test; |
||||
import redis.clients.jedis.Jedis; |
||||
|
||||
import java.util.Map; |
||||
|
||||
public class JedisTest { |
||||
private Jedis jedis; |
||||
|
||||
@BeforeEach //被该注解修饰的方法每次执行其他方法前自动执行
|
||||
void setUp() { |
||||
// 建立redis连接
|
||||
// jedis = new Jedis("192.168.153.130",6379);
|
||||
// 使用连接池
|
||||
jedis = JedisConnectionFactory.getJedis(); |
||||
// 密码
|
||||
jedis.auth("admin"); |
||||
// 选择数据库
|
||||
jedis.select(0); |
||||
} |
||||
|
||||
@Test |
||||
void testString() { |
||||
String result = jedis.set("name","ooo"); |
||||
System.out.println("result: " + result); |
||||
|
||||
String name = jedis.get("name"); |
||||
System.out.println("name: " + name); |
||||
} |
||||
|
||||
@Test |
||||
void testHash() { |
||||
jedis.hset("project:user:4","id","4"); |
||||
jedis.hset("project:user:4","name","test"); |
||||
|
||||
|
||||
Map<String, String> map = jedis.hgetAll("project:user:4"); |
||||
System.out.println(map); |
||||
|
||||
|
||||
} |
||||
|
||||
@AfterEach //被该注解修饰的方法会在每次执行其他方法后执行
|
||||
void closerRedis() { |
||||
if (jedis != null) { |
||||
jedis.close(); // 关闭连接
|
||||
} |
||||
} |
||||
} |
Binary file not shown.
Binary file not shown.
@ -0,0 +1,26 @@ |
||||
|
||||
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; |
||||
fastcgi_param QUERY_STRING $query_string; |
||||
fastcgi_param REQUEST_METHOD $request_method; |
||||
fastcgi_param CONTENT_TYPE $content_type; |
||||
fastcgi_param CONTENT_LENGTH $content_length; |
||||
|
||||
fastcgi_param SCRIPT_NAME $fastcgi_script_name; |
||||
fastcgi_param REQUEST_URI $request_uri; |
||||
fastcgi_param DOCUMENT_URI $document_uri; |
||||
fastcgi_param DOCUMENT_ROOT $document_root; |
||||
fastcgi_param SERVER_PROTOCOL $server_protocol; |
||||
fastcgi_param REQUEST_SCHEME $scheme; |
||||
fastcgi_param HTTPS $https if_not_empty; |
||||
|
||||
fastcgi_param GATEWAY_INTERFACE CGI/1.1; |
||||
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; |
||||
|
||||
fastcgi_param REMOTE_ADDR $remote_addr; |
||||
fastcgi_param REMOTE_PORT $remote_port; |
||||
fastcgi_param SERVER_ADDR $server_addr; |
||||
fastcgi_param SERVER_PORT $server_port; |
||||
fastcgi_param SERVER_NAME $server_name; |
||||
|
||||
# PHP only, required if PHP was built with --enable-force-cgi-redirect |
||||
fastcgi_param REDIRECT_STATUS 200; |
@ -0,0 +1,25 @@ |
||||
|
||||
fastcgi_param QUERY_STRING $query_string; |
||||
fastcgi_param REQUEST_METHOD $request_method; |
||||
fastcgi_param CONTENT_TYPE $content_type; |
||||
fastcgi_param CONTENT_LENGTH $content_length; |
||||
|
||||
fastcgi_param SCRIPT_NAME $fastcgi_script_name; |
||||
fastcgi_param REQUEST_URI $request_uri; |
||||
fastcgi_param DOCUMENT_URI $document_uri; |
||||
fastcgi_param DOCUMENT_ROOT $document_root; |
||||
fastcgi_param SERVER_PROTOCOL $server_protocol; |
||||
fastcgi_param REQUEST_SCHEME $scheme; |
||||
fastcgi_param HTTPS $https if_not_empty; |
||||
|
||||
fastcgi_param GATEWAY_INTERFACE CGI/1.1; |
||||
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; |
||||
|
||||
fastcgi_param REMOTE_ADDR $remote_addr; |
||||
fastcgi_param REMOTE_PORT $remote_port; |
||||
fastcgi_param SERVER_ADDR $server_addr; |
||||
fastcgi_param SERVER_PORT $server_port; |
||||
fastcgi_param SERVER_NAME $server_name; |
||||
|
||||
# PHP only, required if PHP was built with --enable-force-cgi-redirect |
||||
fastcgi_param REDIRECT_STATUS 200; |
@ -0,0 +1,109 @@ |
||||
|
||||
# This map is not a full koi8-r <> utf8 map: it does not contain |
||||
# box-drawing and some other characters. Besides this map contains |
||||
# several koi8-u and Byelorussian letters which are not in koi8-r. |
||||
# If you need a full and standard map, use contrib/unicode2nginx/koi-utf |
||||
# map instead. |
||||
|
||||
charset_map koi8-r utf-8 { |
||||
|
||||
80 E282AC ; # euro |
||||
|
||||
95 E280A2 ; # bullet |
||||
|
||||
9A C2A0 ; # |
||||
|
||||
9E C2B7 ; # · |
||||
|
||||
A3 D191 ; # small yo |
||||
A4 D194 ; # small Ukrainian ye |
||||
|
||||
A6 D196 ; # small Ukrainian i |
||||
A7 D197 ; # small Ukrainian yi |
||||
|
||||
AD D291 ; # small Ukrainian soft g |
||||
AE D19E ; # small Byelorussian short u |
||||
|
||||
B0 C2B0 ; # ° |
||||
|
||||
B3 D081 ; # capital YO |
||||
B4 D084 ; # capital Ukrainian YE |
||||
|
||||
B6 D086 ; # capital Ukrainian I |
||||
B7 D087 ; # capital Ukrainian YI |
||||
|
||||
B9 E28496 ; # numero sign |
||||
|
||||
BD D290 ; # capital Ukrainian soft G |
||||
BE D18E ; # capital Byelorussian short U |
||||
|
||||
BF C2A9 ; # (C) |
||||
|
||||
C0 D18E ; # small yu |
||||
C1 D0B0 ; # small a |
||||
C2 D0B1 ; # small b |
||||
C3 D186 ; # small ts |
||||
C4 D0B4 ; # small d |
||||
C5 D0B5 ; # small ye |
||||
C6 D184 ; # small f |
||||
C7 D0B3 ; # small g |
||||
C8 D185 ; # small kh |
||||
C9 D0B8 ; # small i |
||||
CA D0B9 ; # small j |
||||
CB D0BA ; # small k |
||||
CC D0BB ; # small l |
||||
CD D0BC ; # small m |
||||
CE D0BD ; # small n |
||||
CF D0BE ; # small o |
||||
|
||||
D0 D0BF ; # small p |
||||
D1 D18F ; # small ya |
||||
D2 D180 ; # small r |
||||
D3 D181 ; # small s |
||||
D4 D182 ; # small t |
||||
D5 D183 ; # small u |
||||
D6 D0B6 ; # small zh |
||||
D7 D0B2 ; # small v |
||||
D8 D18C ; # small soft sign |
||||
D9 D18B ; # small y |
||||
DA D0B7 ; # small z |
||||
DB D188 ; # small sh |
||||
DC D18D ; # small e |
||||
DD D189 ; # small shch |
||||
DE D187 ; # small ch |
||||
DF D18A ; # small hard sign |
||||
|
||||
E0 D0AE ; # capital YU |
||||
E1 D090 ; # capital A |
||||
E2 D091 ; # capital B |
||||
E3 D0A6 ; # capital TS |
||||
E4 D094 ; # capital D |
||||
E5 D095 ; # capital YE |
||||
E6 D0A4 ; # capital F |
||||
E7 D093 ; # capital G |
||||
E8 D0A5 ; # capital KH |
||||
E9 D098 ; # capital I |
||||
EA D099 ; # capital J |
||||
EB D09A ; # capital K |
||||
EC D09B ; # capital L |
||||
ED D09C ; # capital M |
||||
EE D09D ; # capital N |
||||
EF D09E ; # capital O |
||||
|
||||
F0 D09F ; # capital P |
||||
F1 D0AF ; # capital YA |
||||
F2 D0A0 ; # capital R |
||||
F3 D0A1 ; # capital S |
||||
F4 D0A2 ; # capital T |
||||
F5 D0A3 ; # capital U |
||||
F6 D096 ; # capital ZH |
||||
F7 D092 ; # capital V |
||||
F8 D0AC ; # capital soft sign |
||||
F9 D0AB ; # capital Y |
||||
FA D097 ; # capital Z |
||||
FB D0A8 ; # capital SH |
||||
FC D0AD ; # capital E |
||||
FD D0A9 ; # capital SHCH |
||||
FE D0A7 ; # capital CH |
||||
FF D0AA ; # capital hard sign |
||||
} |
@ -0,0 +1,103 @@ |
||||
|
||||
charset_map koi8-r windows-1251 { |
||||
|
||||
80 88 ; # euro |
||||
|
||||
95 95 ; # bullet |
||||
|
||||
9A A0 ; # |
||||
|
||||
9E B7 ; # · |
||||
|
||||
A3 B8 ; # small yo |
||||
A4 BA ; # small Ukrainian ye |
||||
|
||||
A6 B3 ; # small Ukrainian i |
||||
A7 BF ; # small Ukrainian yi |
||||
|
||||
AD B4 ; # small Ukrainian soft g |
||||
AE A2 ; # small Byelorussian short u |
||||
|
||||
B0 B0 ; # ° |
||||
|
||||
B3 A8 ; # capital YO |
||||
B4 AA ; # capital Ukrainian YE |
||||
|
||||
B6 B2 ; # capital Ukrainian I |
||||
B7 AF ; # capital Ukrainian YI |
||||
|
||||
B9 B9 ; # numero sign |
||||
|
||||
BD A5 ; # capital Ukrainian soft G |
||||
BE A1 ; # capital Byelorussian short U |
||||
|
||||
BF A9 ; # (C) |
||||
|
||||
C0 FE ; # small yu |
||||
C1 E0 ; # small a |
||||
C2 E1 ; # small b |
||||
C3 F6 ; # small ts |
||||
C4 E4 ; # small d |
||||
C5 E5 ; # small ye |
||||
C6 F4 ; # small f |
||||
C7 E3 ; # small g |
||||
C8 F5 ; # small kh |
||||
C9 E8 ; # small i |
||||
CA E9 ; # small j |
||||
CB EA ; # small k |
||||
CC EB ; # small l |
||||
CD EC ; # small m |
||||
CE ED ; # small n |
||||
CF EE ; # small o |
||||
|
||||
D0 EF ; # small p |
||||
D1 FF ; # small ya |
||||
D2 F0 ; # small r |
||||
D3 F1 ; # small s |
||||
D4 F2 ; # small t |
||||
D5 F3 ; # small u |
||||
D6 E6 ; # small zh |
||||
D7 E2 ; # small v |
||||
D8 FC ; # small soft sign |
||||
D9 FB ; # small y |
||||
DA E7 ; # small z |
||||
DB F8 ; # small sh |
||||
DC FD ; # small e |
||||
DD F9 ; # small shch |
||||
DE F7 ; # small ch |
||||
DF FA ; # small hard sign |
||||
|
||||
E0 DE ; # capital YU |
||||
E1 C0 ; # capital A |
||||
E2 C1 ; # capital B |
||||
E3 D6 ; # capital TS |
||||
E4 C4 ; # capital D |
||||
E5 C5 ; # capital YE |
||||
E6 D4 ; # capital F |
||||
E7 C3 ; # capital G |
||||
E8 D5 ; # capital KH |
||||
E9 C8 ; # capital I |
||||
EA C9 ; # capital J |
||||
EB CA ; # capital K |
||||
EC CB ; # capital L |
||||
ED CC ; # capital M |
||||
EE CD ; # capital N |
||||
EF CE ; # capital O |
||||
|
||||
F0 CF ; # capital P |
||||
F1 DF ; # capital YA |
||||
F2 D0 ; # capital R |
||||
F3 D1 ; # capital S |
||||
F4 D2 ; # capital T |
||||
F5 D3 ; # capital U |
||||
F6 C6 ; # capital ZH |
||||
F7 C2 ; # capital V |
||||
F8 DC ; # capital soft sign |
||||
F9 DB ; # capital Y |
||||
FA C7 ; # capital Z |
||||
FB D8 ; # capital SH |
||||
FC DD ; # capital E |
||||
FD D9 ; # capital SHCH |
||||
FE D7 ; # capital CH |
||||
FF DA ; # capital hard sign |
||||
} |
@ -0,0 +1,97 @@ |
||||
|
||||
types { |
||||
text/html html htm shtml; |
||||
text/css css; |
||||
text/xml xml; |
||||
image/gif gif; |
||||
image/jpeg jpeg jpg; |
||||
application/javascript js; |
||||
application/atom+xml atom; |
||||
application/rss+xml rss; |
||||
|
||||
text/mathml mml; |
||||
text/plain txt; |
||||
text/vnd.sun.j2me.app-descriptor jad; |
||||
text/vnd.wap.wml wml; |
||||
text/x-component htc; |
||||
|
||||
image/png png; |
||||
image/svg+xml svg svgz; |
||||
image/tiff tif tiff; |
||||
image/vnd.wap.wbmp wbmp; |
||||
image/webp webp; |
||||
image/x-icon ico; |
||||
image/x-jng jng; |
||||
image/x-ms-bmp bmp; |
||||
|
||||
font/woff woff; |
||||
font/woff2 woff2; |
||||
|
||||
application/java-archive jar war ear; |
||||
application/json json; |
||||
application/mac-binhex40 hqx; |
||||
application/msword doc; |
||||
application/pdf pdf; |
||||
application/postscript ps eps ai; |
||||
application/rtf rtf; |
||||
application/vnd.apple.mpegurl m3u8; |
||||
application/vnd.google-earth.kml+xml kml; |
||||
application/vnd.google-earth.kmz kmz; |
||||
application/vnd.ms-excel xls; |
||||
application/vnd.ms-fontobject eot; |
||||
application/vnd.ms-powerpoint ppt; |
||||
application/vnd.oasis.opendocument.graphics odg; |
||||
application/vnd.oasis.opendocument.presentation odp; |
||||
application/vnd.oasis.opendocument.spreadsheet ods; |
||||
application/vnd.oasis.opendocument.text odt; |
||||
application/vnd.openxmlformats-officedocument.presentationml.presentation |
||||
pptx; |
||||
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet |
||||
xlsx; |
||||
application/vnd.openxmlformats-officedocument.wordprocessingml.document |
||||
docx; |
||||
application/vnd.wap.wmlc wmlc; |
||||
application/x-7z-compressed 7z; |
||||
application/x-cocoa cco; |
||||
application/x-java-archive-diff jardiff; |
||||
application/x-java-jnlp-file jnlp; |
||||
application/x-makeself run; |
||||
application/x-perl pl pm; |
||||
application/x-pilot prc pdb; |
||||
application/x-rar-compressed rar; |
||||
application/x-redhat-package-manager rpm; |
||||
application/x-sea sea; |
||||
application/x-shockwave-flash swf; |
||||
application/x-stuffit sit; |
||||
application/x-tcl tcl tk; |
||||
application/x-x509-ca-cert der pem crt; |
||||
application/x-xpinstall xpi; |
||||
application/xhtml+xml xhtml; |
||||
application/xspf+xml xspf; |
||||
application/zip zip; |
||||
|
||||
application/octet-stream bin exe dll; |
||||
application/octet-stream deb; |
||||
application/octet-stream dmg; |
||||
application/octet-stream iso img; |
||||
application/octet-stream msi msp msm; |
||||
|
||||
audio/midi mid midi kar; |
||||
audio/mpeg mp3; |
||||
audio/ogg ogg; |
||||
audio/x-m4a m4a; |
||||
audio/x-realaudio ra; |
||||
|
||||
video/3gpp 3gpp 3gp; |
||||
video/mp2t ts; |
||||
video/mp4 mp4; |
||||
video/mpeg mpeg mpg; |
||||
video/quicktime mov; |
||||
video/webm webm; |
||||
video/x-flv flv; |
||||
video/x-m4v m4v; |
||||
video/x-mng mng; |
||||
video/x-ms-asf asx asf; |
||||
video/x-ms-wmv wmv; |
||||
video/x-msvideo avi; |
||||
} |
@ -0,0 +1,51 @@ |
||||
|
||||
worker_processes 1; |
||||
|
||||
events { |
||||
worker_connections 1024; |
||||
} |
||||
|
||||
http { |
||||
include mime.types; |
||||
default_type application/json; |
||||
|
||||
sendfile on; |
||||
|
||||
keepalive_timeout 65; |
||||
|
||||
server { |
||||
listen 8080; |
||||
server_name localhost; |
||||
# 指定前端项目所在的位置 |
||||
location / { |
||||
root html/hmdp; |
||||
index index.html index.htm; |
||||
} |
||||
|
||||
error_page 500 502 503 504 /50x.html; |
||||
location = /50x.html { |
||||
root html; |
||||
} |
||||
|
||||
|
||||
location /api { |
||||
default_type application/json; |
||||
#internal; |
||||
keepalive_timeout 30s; |
||||
keepalive_requests 1000; |
||||
#支持keep-alive |
||||
proxy_http_version 1.1; |
||||
rewrite /api(/.*) $1 break; |
||||
proxy_pass_request_headers on; |
||||
#more_clear_input_headers Accept-Encoding; |
||||
proxy_next_upstream error timeout; |
||||
proxy_pass http://127.0.0.1:8081; |
||||
#proxy_pass http://backend; |
||||
} |
||||
} |
||||
|
||||
upstream backend { |
||||
server 127.0.0.1:8081 max_fails=5 fail_timeout=10s weight=1; |
||||
#server 127.0.0.1:8082 max_fails=5 fail_timeout=10s weight=1; |
||||
} |
||||
} |
@ -0,0 +1,17 @@ |
||||
|
||||
scgi_param REQUEST_METHOD $request_method; |
||||
scgi_param REQUEST_URI $request_uri; |
||||
scgi_param QUERY_STRING $query_string; |
||||
scgi_param CONTENT_TYPE $content_type; |
||||
|
||||
scgi_param DOCUMENT_URI $document_uri; |
||||
scgi_param DOCUMENT_ROOT $document_root; |
||||
scgi_param SCGI 1; |
||||
scgi_param SERVER_PROTOCOL $server_protocol; |
||||
scgi_param REQUEST_SCHEME $scheme; |
||||
scgi_param HTTPS $https if_not_empty; |
||||
|
||||
scgi_param REMOTE_ADDR $remote_addr; |
||||
scgi_param REMOTE_PORT $remote_port; |
||||
scgi_param SERVER_PORT $server_port; |
||||
scgi_param SERVER_NAME $server_name; |
@ -0,0 +1,17 @@ |
||||
|
||||
uwsgi_param QUERY_STRING $query_string; |
||||
uwsgi_param REQUEST_METHOD $request_method; |
||||
uwsgi_param CONTENT_TYPE $content_type; |
||||
uwsgi_param CONTENT_LENGTH $content_length; |
||||
|
||||
uwsgi_param REQUEST_URI $request_uri; |
||||
uwsgi_param PATH_INFO $document_uri; |
||||
uwsgi_param DOCUMENT_ROOT $document_root; |
||||
uwsgi_param SERVER_PROTOCOL $server_protocol; |
||||
uwsgi_param REQUEST_SCHEME $scheme; |
||||
uwsgi_param HTTPS $https if_not_empty; |
||||
|
||||
uwsgi_param REMOTE_ADDR $remote_addr; |
||||
uwsgi_param REMOTE_PORT $remote_port; |
||||
uwsgi_param SERVER_PORT $server_port; |
||||
uwsgi_param SERVER_NAME $server_name; |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue