提交张林浩的代码

master
zhanglinhao 1 year ago
parent ad3e007dfa
commit 49bf7c57d7

@ -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.9.6/apache-maven-3.9.6-bin.zip
wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar

Binary file not shown.

After

Width:  |  Height:  |  Size: 447 B

308
src/后端/mvnw vendored

@ -0,0 +1,308 @@
#!/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.
# ----------------------------------------------------------------------------
# ----------------------------------------------------------------------------
# Apache Maven Wrapper startup batch script, version 3.2.0
#
# Required ENV vars:
# ------------------
# JAVA_HOME - location of a JDK home dir
#
# Optional ENV vars
# -----------------
# 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
JAVA_HOME="$(/usr/libexec/java_home)"; export JAVA_HOME
else
JAVA_HOME="/Library/Java/Home"; export JAVA_HOME
fi
fi
;;
esac
if [ -z "$JAVA_HOME" ] ; then
if [ -r /etc/gentoo-release ] ; then
JAVA_HOME=$(java-config --jre-home)
fi
fi
# For Cygwin, ensure paths are in UNIX format before anything is touched
if $cygwin ; then
[ -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 "$JAVA_HOME" ] && [ -d "$JAVA_HOME" ] &&
JAVA_HOME="$(cd "$JAVA_HOME" || (echo "cannot cd into $JAVA_HOME."; exit 1); 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 2>/dev/null; \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
# 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/.." || exit 1; pwd)
fi
# end of workaround
done
printf '%s' "$(cd "$basedir" || exit 1; pwd)"
}
# concatenates all lines of a file
concat_lines() {
if [ -f "$1" ]; then
# Remove \r in case we run on Windows within Git Bash
# and check out the repository with auto CRLF management
# enabled. Otherwise, we may read lines that are delimited with
# \r\n and produce $'-Xarg\r' rather than -Xarg due to word
# splitting rules.
tr -s '\r\n' ' ' < "$1"
fi
}
log() {
if [ "$MVNW_VERBOSE" = true ]; then
printf '%s\n' "$1"
fi
}
BASE_DIR=$(find_maven_basedir "$(dirname "$0")")
if [ -z "$BASE_DIR" ]; then
exit 1;
fi
MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}; export MAVEN_PROJECTBASEDIR
log "$MAVEN_PROJECTBASEDIR"
##########################################################################################
# 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.
##########################################################################################
wrapperJarPath="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar"
if [ -r "$wrapperJarPath" ]; then
log "Found $wrapperJarPath"
else
log "Couldn't find $wrapperJarPath, downloading it ..."
if [ -n "$MVNW_REPOURL" ]; then
wrapperUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
else
wrapperUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
fi
while IFS="=" read -r key value; do
# Remove '\r' from value to allow usage on windows as IFS does not consider '\r' as a separator ( considers space, tab, new line ('\n'), and custom '=' )
safeValue=$(echo "$value" | tr -d '\r')
case "$key" in (wrapperUrl) wrapperUrl="$safeValue"; break ;;
esac
done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties"
log "Downloading from: $wrapperUrl"
if $cygwin; then
wrapperJarPath=$(cygpath --path --windows "$wrapperJarPath")
fi
if command -v wget > /dev/null; then
log "Found wget ... using wget"
[ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--quiet"
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
wget $QUIET "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
else
wget $QUIET --http-user="$MVNW_USERNAME" --http-password="$MVNW_PASSWORD" "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
fi
elif command -v curl > /dev/null; then
log "Found curl ... using curl"
[ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--silent"
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
curl $QUIET -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath"
else
curl $QUIET --user "$MVNW_USERNAME:$MVNW_PASSWORD" -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath"
fi
else
log "Falling back to using Java to download"
javaSource="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.java"
javaClass="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.class"
# For Cygwin, switch paths to Windows format before running javac
if $cygwin; then
javaSource=$(cygpath --path --windows "$javaSource")
javaClass=$(cygpath --path --windows "$javaClass")
fi
if [ -e "$javaSource" ]; then
if [ ! -e "$javaClass" ]; then
log " - Compiling MavenWrapperDownloader.java ..."
("$JAVA_HOME/bin/javac" "$javaSource")
fi
if [ -e "$javaClass" ]; then
log " - Running MavenWrapperDownloader.java ..."
("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$wrapperUrl" "$wrapperJarPath") || rm -f "$wrapperJarPath"
fi
fi
fi
fi
##########################################################################################
# End of extension
##########################################################################################
# If specified, validate the SHA-256 sum of the Maven wrapper jar file
wrapperSha256Sum=""
while IFS="=" read -r key value; do
case "$key" in (wrapperSha256Sum) wrapperSha256Sum=$value; break ;;
esac
done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties"
if [ -n "$wrapperSha256Sum" ]; then
wrapperSha256Result=false
if command -v sha256sum > /dev/null; then
if echo "$wrapperSha256Sum $wrapperJarPath" | sha256sum -c > /dev/null 2>&1; then
wrapperSha256Result=true
fi
elif command -v shasum > /dev/null; then
if echo "$wrapperSha256Sum $wrapperJarPath" | shasum -a 256 -c > /dev/null 2>&1; then
wrapperSha256Result=true
fi
else
echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available."
echo "Please install either command, or disable validation by removing 'wrapperSha256Sum' from your maven-wrapper.properties."
exit 1
fi
if [ $wrapperSha256Result = false ]; then
echo "Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised." >&2
echo "Investigate or delete $wrapperJarPath to attempt a clean download." >&2
echo "If you updated your Maven version, you need to update the specified wrapperSha256Sum property." >&2
exit 1
fi
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 "$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
# shellcheck disable=SC2086 # safe args
exec "$JAVACMD" \
$MAVEN_OPTS \
$MAVEN_DEBUG_OPTS \
-classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
"-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"

205
src/后端/mvnw.cmd vendored

@ -0,0 +1,205 @@
@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 Apache Maven Wrapper startup batch script, version 3.2.0
@REM
@REM Required ENV vars:
@REM JAVA_HOME - location of a JDK home dir
@REM
@REM Optional ENV vars
@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 WRAPPER_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
IF "%%A"=="wrapperUrl" SET WRAPPER_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 WRAPPER_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
)
if "%MVNW_VERBOSE%" == "true" (
echo Couldn't find %WRAPPER_JAR%, downloading it ...
echo Downloading from: %WRAPPER_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('%WRAPPER_URL%', '%WRAPPER_JAR%')"^
"}"
if "%MVNW_VERBOSE%" == "true" (
echo Finished downloading %WRAPPER_JAR%
)
)
@REM End of extension
@REM If specified, validate the SHA-256 sum of the Maven wrapper jar file
SET WRAPPER_SHA_256_SUM=""
FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
IF "%%A"=="wrapperSha256Sum" SET WRAPPER_SHA_256_SUM=%%B
)
IF NOT %WRAPPER_SHA_256_SUM%=="" (
powershell -Command "&{"^
"$hash = (Get-FileHash \"%WRAPPER_JAR%\" -Algorithm SHA256).Hash.ToLower();"^
"If('%WRAPPER_SHA_256_SUM%' -ne $hash){"^
" Write-Output 'Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised.';"^
" Write-Output 'Investigate or delete %WRAPPER_JAR% to attempt a clean download.';"^
" Write-Output 'If you updated your Maven version, you need to update the specified wrapperSha256Sum property.';"^
" exit 1;"^
"}"^
"}"
if ERRORLEVEL 1 goto error
)
@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,160 @@
<?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>3.2.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!--打包名称-->
<groupId>com.SoftEgg</groupId>
<artifactId>FreeToGo</artifactId>
<version>0.0.5-SNAPSHOT</version>
<!--打包名称-->
<name>FreeToGo</name>
<description>FreeToGo</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</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>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter-test</artifactId>
<version>3.0.3</version>
<scope>test</scope>
</dependency>
<!-- <dependency>-->
<!-- <groupId>com.baomidou</groupId>-->
<!-- <artifactId>mybatis-plus-boot-starter</artifactId>-->
<!-- <version>3.5.2</version>-->
<!-- </dependency>-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>3.2.5</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>3.2.5</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>5.0.0-alpha.3</version>
</dependency>
<dependency>
<groupId>com.github.whvcse</groupId>
<artifactId>easy-captcha</artifactId>
<version>1.6.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.4.14</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>com.ramostear</groupId>
<artifactId>Happy-Captcha</artifactId>
<version>1.0.1</version>
</dependency>
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1.1</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,30 @@
package com.softegg.freetogo.Api.authencation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.IOException;
/**
* @description:
* @author: zhanglinhao
* @date: 2024/5/23 15:47
*/
@RestController
@RequestMapping("/api")
public class authenticationController {
@Autowired
com.softegg.freetogo.Api.authencation.authenticationService authenticationService;
/**
* @description:
* @author: zhanglinhao
* @date: 2024/5/29 14:54
*/
@GetMapping("authenticate")
public boolean authenticate(String idc, String phone, String name) throws IOException {
return authenticationService.authenticate(idc, phone, name);
}
}

@ -0,0 +1,58 @@
package com.softegg.freetogo.Api.authencation;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
/**
* @description: api
* @author: zhanglinhao
* @date: 2024/5/23 15:12
*/
@Service
public class authenticationService {
public Boolean authenticate(String idc, String phone, String name) throws IOException {
String url = "https://mobile3elements.shumaidata.com/mobile/verify_real_name";
String appCode = "15704c321ae8459bb36fcadd888d67c4";
Map<String, String> params = new HashMap<>();
params.put("idcard", idc);
params.put("mobile", phone);
params.put("name", name);
Boolean result = postForm(appCode, url, params);
System.out.println(result);
return result;
}
/**
* HTTPokhttp 3.13.1
* <dependency>
* <groupId>com.squareup.okhttp3</groupId>
* <artifactId>okhttp</artifactId>
* <version>3.13.1</version>
* </dependency>
*/
public static Boolean postForm(String appCode, String url, Map<String, String> params) throws IOException {
OkHttpClient client = new OkHttpClient.Builder().build();
FormBody.Builder formbuilder = new FormBody.Builder();
Iterator<String> it = params.keySet().iterator();
while (it.hasNext()) {
String key = it.next();
formbuilder.add(key, params.get(key));
}
FormBody body = formbuilder.build();
Request request = new Request.Builder().url(url).addHeader("Authorization", "APPCODE " + appCode).post(body).build();
Response response = client.newCall(request).execute();
System.out.println("返回状态码" + response.code() + ",message:" + response.message());
// String result = response.body().string();
// return result;
return response.code() == 200;
}
}

@ -0,0 +1,316 @@
package com.softegg.freetogo.Api.phoneVerification;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import org.apache.commons.lang.StringUtils;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpDelete;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
/**
* @description: http
* @author: aliyun
* @date: 2024/5/29 15:36
*/
public class HttpUtils {
/**
* get
*
* @param host
* @param path
* @param method
* @param headers
* @param querys
* @return
* @throws Exception
*/
public static HttpResponse doGet(String host, String path, String method,
Map<String, String> headers,
Map<String, String> querys)
throws Exception {
HttpClient httpClient = wrapClient(host);
HttpGet request = new HttpGet(buildUrl(host, path, querys));
for (Map.Entry<String, String> e : headers.entrySet()) {
request.addHeader(e.getKey(), e.getValue());
}
return httpClient.execute(request);
}
/**
* post form
*
* @param host
* @param path
* @param method
* @param headers
* @param querys
* @param bodys
* @return
* @throws Exception
*/
public static HttpResponse doPost(String host, String path, String method,
Map<String, String> headers,
Map<String, String> querys,
Map<String, String> bodys)
throws Exception {
HttpClient httpClient = wrapClient(host);
HttpPost request = new HttpPost(buildUrl(host, path, querys));
for (Map.Entry<String, String> e : headers.entrySet()) {
request.addHeader(e.getKey(), e.getValue());
}
if (bodys != null) {
List<NameValuePair> nameValuePairList = new ArrayList<NameValuePair>();
for (String key : bodys.keySet()) {
nameValuePairList.add(new BasicNameValuePair(key, bodys.get(key)));
}
UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(nameValuePairList, "utf-8");
formEntity.setContentType("application/x-www-form-urlencoded; charset=UTF-8");
request.setEntity(formEntity);
}
return httpClient.execute(request);
}
/**
* Post String
*
* @param host
* @param path
* @param method
* @param headers
* @param querys
* @param body
* @return
* @throws Exception
*/
public static HttpResponse doPost(String host, String path, String method,
Map<String, String> headers,
Map<String, String> querys,
String body)
throws Exception {
HttpClient httpClient = wrapClient(host);
HttpPost request = new HttpPost(buildUrl(host, path, querys));
for (Map.Entry<String, String> e : headers.entrySet()) {
request.addHeader(e.getKey(), e.getValue());
}
if (StringUtils.isNotBlank(body)) {
request.setEntity(new StringEntity(body, "utf-8"));
}
return httpClient.execute(request);
}
/**
* Post stream
*
* @param host
* @param path
* @param method
* @param headers
* @param querys
* @param body
* @return
* @throws Exception
*/
public static HttpResponse doPost(String host, String path, String method,
Map<String, String> headers,
Map<String, String> querys,
byte[] body)
throws Exception {
HttpClient httpClient = wrapClient(host);
HttpPost request = new HttpPost(buildUrl(host, path, querys));
for (Map.Entry<String, String> e : headers.entrySet()) {
request.addHeader(e.getKey(), e.getValue());
}
if (body != null) {
request.setEntity(new ByteArrayEntity(body));
}
return httpClient.execute(request);
}
/**
* Put String
* @param host
* @param path
* @param method
* @param headers
* @param querys
* @param body
* @return
* @throws Exception
*/
public static HttpResponse doPut(String host, String path, String method,
Map<String, String> headers,
Map<String, String> querys,
String body)
throws Exception {
HttpClient httpClient = wrapClient(host);
HttpPut request = new HttpPut(buildUrl(host, path, querys));
for (Map.Entry<String, String> e : headers.entrySet()) {
request.addHeader(e.getKey(), e.getValue());
}
if (StringUtils.isNotBlank(body)) {
request.setEntity(new StringEntity(body, "utf-8"));
}
return httpClient.execute(request);
}
/**
* Put stream
* @param host
* @param path
* @param method
* @param headers
* @param querys
* @param body
* @return
* @throws Exception
*/
public static HttpResponse doPut(String host, String path, String method,
Map<String, String> headers,
Map<String, String> querys,
byte[] body)
throws Exception {
HttpClient httpClient = wrapClient(host);
HttpPut request = new HttpPut(buildUrl(host, path, querys));
for (Map.Entry<String, String> e : headers.entrySet()) {
request.addHeader(e.getKey(), e.getValue());
}
if (body != null) {
request.setEntity(new ByteArrayEntity(body));
}
return httpClient.execute(request);
}
/**
* Delete
*
* @param host
* @param path
* @param method
* @param headers
* @param querys
* @return
* @throws Exception
*/
public static HttpResponse doDelete(String host, String path, String method,
Map<String, String> headers,
Map<String, String> querys)
throws Exception {
HttpClient httpClient = wrapClient(host);
HttpDelete request = new HttpDelete(buildUrl(host, path, querys));
for (Map.Entry<String, String> e : headers.entrySet()) {
request.addHeader(e.getKey(), e.getValue());
}
return httpClient.execute(request);
}
private static String buildUrl(String host, String path, Map<String, String> querys) throws UnsupportedEncodingException {
StringBuilder sbUrl = new StringBuilder();
sbUrl.append(host);
if (!StringUtils.isBlank(path)) {
sbUrl.append(path);
}
if (null != querys) {
StringBuilder sbQuery = new StringBuilder();
for (Map.Entry<String, String> query : querys.entrySet()) {
if (0 < sbQuery.length()) {
sbQuery.append("&");
}
if (StringUtils.isBlank(query.getKey()) && !StringUtils.isBlank(query.getValue())) {
sbQuery.append(query.getValue());
}
if (!StringUtils.isBlank(query.getKey())) {
sbQuery.append(query.getKey());
if (!StringUtils.isBlank(query.getValue())) {
sbQuery.append("=");
sbQuery.append(URLEncoder.encode(query.getValue(), "utf-8"));
}
}
}
if (0 < sbQuery.length()) {
sbUrl.append("?").append(sbQuery);
}
}
return sbUrl.toString();
}
private static HttpClient wrapClient(String host) {
HttpClient httpClient = new DefaultHttpClient();
if (host.startsWith("https://")) {
sslClient(httpClient);
}
return httpClient;
}
private static void sslClient(HttpClient httpClient) {
try {
SSLContext ctx = SSLContext.getInstance("TLS");
X509TrustManager tm = new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(X509Certificate[] xcs, String str) {
}
public void checkServerTrusted(X509Certificate[] xcs, String str) {
}
};
ctx.init(null, new TrustManager[] { tm }, null);
SSLSocketFactory ssf = new SSLSocketFactory(ctx);
ssf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
ClientConnectionManager ccm = httpClient.getConnectionManager();
SchemeRegistry registry = ccm.getSchemeRegistry();
registry.register(new Scheme("https", 443, ssf));
} catch (KeyManagementException ex) {
throw new RuntimeException(ex);
} catch (NoSuchAlgorithmException ex) {
throw new RuntimeException(ex);
}
}
}

@ -0,0 +1,48 @@
package com.softegg.freetogo.Api.phoneVerification;
import org.apache.http.HttpResponse;
import java.util.HashMap;
import java.util.Map;
/**
* @description:
* @author: zhanglinhao
* @date: 2024/5/29 15:11
*/
public class phoneVerification {
public void sendVerificationCode(String phone) {
String host = "https://gyytz.market.alicloudapi.com";
String path = "/sms/smsSend";
String method = "POST";
String appcode = "15704c321ae8459bb36fcadd888d67c4";
Map<String, String> headers = new HashMap<String, String>();
//最后在header中的格式(中间是英文空格)为Authorization:APPCODE 83359fd73fe94948385f570e3c139105
headers.put("Authorization", "APPCODE " + appcode);
Map<String, String> querys = new HashMap<String, String>();
querys.put("mobile", phone);
querys.put("param", "**code**:12345,**minute**:5");
//smsSignId短信前缀和templateId短信模板可登录国阳云控制台自助申请。参考文档http://help.guoyangyun.com/Problem/Qm.html
querys.put("smsSignId", "2e65b1bb3d054466b82f0c9d125465e2");
querys.put("templateId", "908e94ccf08b4476ba6c876d13f084ad");
Map<String, String> bodys = new HashMap<String, String>();
try {
/**
* :
* HttpUtils\r\n\t \t* https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/src/main/java/com/aliyun/api/gateway/demo/util/HttpUtils.java\r\n\t \t* 下载
*
*
* https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/pom.xml
*/
HttpResponse response = HttpUtils.doPost(host, path, method, headers, querys, bodys);
System.out.println(response.toString());
//获取response的body
//System.out.println(EntityUtils.toString(response.getEntity()));
} catch (Exception e) {
e.printStackTrace();
}
}
}

@ -0,0 +1,118 @@
package com.softegg.freetogo.Api.weather;
import com.google.gson.*;
import com.softegg.freetogo.Debug.utils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @description:
* @author: zhanglinhao
* @date: 2024/5/28 21:13
*/
@RestController
@RequestMapping("/api")
public class weatherController {
private static final String weatherApiForWeek = "https://v1.yiketianqi.com/free/week?appid=84598529&appsecret=Z1hFDcbI&unescape=1&city=";
private static final String weatherApiForMonth = "https://v1.yiketianqi.com/free/month?appid=84598529&appsecret=Z1hFDcbI&unescape=1&city=";
private final utils util = new utils();
/**
* @description:
* @author: zhanglinhao
* @date: 2024/5/29 14:49
*/
private static int dateGap(String now, String expect) {
String[] nowList = now.split("-");
String[] expectList = expect.split("-");
LocalDate dateNow = LocalDate.of(Integer.parseInt(nowList[0]), Integer.parseInt(nowList[1]), Integer.parseInt(nowList[2]));
LocalDate dateExpect = LocalDate.of(Integer.parseInt(expectList[0]), Integer.parseInt(expectList[1]), Integer.parseInt(expectList[2]));
return (int) ChronoUnit.DAYS.between(dateNow, dateExpect);
}
@GetMapping("weather")
public String weatherForecast(String begin, String end, String city) {
int nowToBegin = dateGap(util.getToday(), begin);
int nowToEnd = dateGap(util.getToday(), end);
Pattern patternP = Pattern.compile("\\[(.*?)\\]");
String json = getWeather(begin, end, city);
Matcher matcher = patternP.matcher(getWeather(begin, end, city));
List<String> matches = new ArrayList<>();
while (matcher.find()) {
matches.add(matcher.group(1)); // 捕获组1是我们想要的内部字符串
}
// 使用Gson解析JSON字符串
JsonParser parser = new JsonParser();
JsonArray jsonArray = parser.parse('[' + matches.get(0) + ']').getAsJsonArray();
// 创建一个Gson实例用于将JsonElement对象转换为Java对象
Gson gson = new GsonBuilder().setPrettyPrinting().create();
List<String> cleanedWeatherData = new ArrayList<>();
for (JsonElement element : jsonArray) {
// 简单地将每个元素转换为字符串并添加到列表中
cleanedWeatherData.add(gson.toJson(element));
}
// 判断天气情况
for (String data : cleanedWeatherData) {
if (nowToBegin <= 0 && nowToEnd >= 0) {
if (data.contains("雨"))
return "旅行期间有雨";
}
nowToBegin--;
nowToEnd--;
}
return "天气不错,适合出行";
}
/**
* @description: 730
* @author: zhanglinhao
* @date: 2024/5/29 14:48
*/
private String getWeather(String begin, String end, String city) {
try {
String today = util.getToday();
StringBuilder response = new StringBuilder();
URL url;
//如果结束日期距离今日小于7天使用未来7天天气预报否则使用未来30天天气预报
if (dateGap(today, end) <= 7) {
url = new URL(weatherApiForWeek + city);
} else {
url = new URL(weatherApiForMonth + city);
}
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
util.printInfo("Response Code : " + responseCode);
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
util.printInfo(response.toString());
return response.toString();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}

@ -0,0 +1,27 @@
package com.softegg.freetogo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* @description:http使
* @author:zhanglinhao
* @date:2024/5/9 15:20
*/
@Configuration
public class Configurer implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
//是否发送Cookie
.allowCredentials(true)
//放行哪些原始域
.allowedOriginPatterns("*")
.allowedMethods("GET", "POST", "PUT", "DELETE")
.allowedHeaders("*")
.exposedHeaders("*");
// registry.addMapping("/**").allowedOrigins("http://106.52.218.118:8090");
}
}

@ -0,0 +1,37 @@
package com.softegg.freetogo.Debug;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @description:
* @author: zhanglinhao
* @date: 2024/5/29 8:41
*/
public class utils {
/**
* @description:
* @author: zhanglinhao
* @date: 2024/5/29 14:52
*/
public <T> void printInfo(T text){
Date currentDate = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd|HH:mm:ss");
StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
StackTraceElement element = stackTrace[2]; // 获取调用printFileAndLine方法的方法的堆栈信息
String fileName = element.getFileName();
int lineNumber = element.getLineNumber();
System.out.println("["+sdf.format(currentDate)+"]"+"File: " + fileName + ", Line: " + lineNumber + ", Info: "+ text);
}
/**
* @description:
* @author: zhanglinhao
* @date: 2024/5/29 14:52
*/
public String getToday(){
Date currentDate = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.format(currentDate);
}
}

@ -0,0 +1,15 @@
package com.softegg.freetogo.Evaluate.Dao;
import com.softegg.freetogo.Evaluate.bean.Evaluations;
import org.springframework.data.jpa.repository.JpaRepository;
/**
* @description: Jpa
* @author: zhanglinhao
* @date: 2024/5/10 9:27
*/
public interface EvaluateRepository extends JpaRepository<Evaluations, Integer> {
// List<Evaluations> findByEditorPhone(String phone);
// List<Evaluations> findByEditedPhone(String phone);
}

@ -0,0 +1,31 @@
package com.softegg.freetogo.Evaluate.bean;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
/**
* @description:
* @author:zhanglinhao
* @date:2024/5/10 9:07
*/
@Entity
@Table(name = "evaluation")
@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
public class Evaluations {
@Id
private int eid;//评价id
@Column(name = "createtime")
private String ct;//创建日期
@Column(name = "modifytime")
private String mt;//编辑日期
@Column
private String ebody;//评价本体
@Column
private int satisfaction;//满意度整数1-5
}

@ -0,0 +1,125 @@
package com.softegg.freetogo.Evaluate.controller;
import com.softegg.freetogo.Debug.utils;
import com.softegg.freetogo.Evaluate.bean.Evaluations;
import com.softegg.freetogo.Evaluate.service.EvaluateService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.swing.text.html.parser.Entity;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
/**
* @description:
* @author: zhanglinhao
* @date: 2024/5/11 17:33
*/
@RestController
@RequestMapping("/evaluate")
public class EvaluationController {
private final static utils util = new utils();
@Autowired
EvaluateService evaluateService;
/**
* @description:
* @param: null
* @return: java.util.List<com.softegg.freetogo.Evaluate.bean.Evaluations>
* @author: zhanglinhao
* @date: 2024/5/12 0:11
*/
@GetMapping("findAllEvaluation")
public List<Evaluations> findAllEvaluation() {
return evaluateService.evaluationList();
}
/**
* @description:
* @param: ebody
* @return: void
* @author: zhanglinhao
* @date: 2024/5/12 0:28
*/
@PostMapping("addEvaluation")
public int addEvaluation(@RequestBody Map<String, String> ebody) {
LocalDateTime currentTime = LocalDateTime.now();
Evaluations evaluation = new Evaluations();
System.out.println(Integer.parseInt(ebody.get("did")));
evaluation.setEid(Integer.parseInt(ebody.get("did")));
evaluation.setEbody(ebody.get("ebody"));
evaluation.setSatisfaction(Integer.parseInt(ebody.get("satisfaction")));
evaluation.setCt(currentTime.toString());
evaluation.setMt(currentTime.toString());
evaluateService.addEvaluation(evaluation);
return 1;
}
/**
* @description:
* @param: phone
* @return: java.util.List<com.softegg.freetogo.Evaluate.bean.Evaluations>
* @author: zhanglinhao
* @date: 2024/5/12 0:30
*/
// @GetMapping("evaluationByPhone")
// public List<Evaluations> evaluationByPhone(String phone) {
// return evaluateService.getEListByPhone(phone);
// }
@GetMapping("getEvaluation")
public Evaluations getEvaluation(int eid) {
try{
return evaluateService.getEvaluationById(eid);}
catch (Exception e){
return new Evaluations();
}
}
/**
* @description:
* @param: eid
* @param: ebody
* @return: void
* @author: zhanglinhao
* @date: 2024/5/12 13:31
*/
@PostMapping("editEvaluation")
public void editEvaluation(@RequestBody Map<String, String> ebody) {
util.printInfo("接收的json:" + ebody);
LocalDateTime currentTime = LocalDateTime.now();
Evaluations evaluation = new Evaluations(Integer.parseInt(ebody.get("eid")), ebody.get("ct"), currentTime.toString(), ebody.get("ebody"), Integer.parseInt(ebody.get("satisfaction")));
evaluateService.editEvaluation(evaluation);
}
/**
* @description:
* @param: eid
* @return: void
* @author: zhanglinhao
* @date: 2024/5/12 13:32
*/
@GetMapping("deleteEvaluation")
public void deleteEvaluation(int eid) {
evaluateService.deleteEvaluation(eid);
}
/**
* @description:
* @param: phone
* @return: int
* @author: zhanglinhao
* @date: 2024/5/12 13:39
*/
// @GetMapping("getSatisfaction")
// public String getSatisfaction(String phone) {
// List<Evaluations> elist = evaluateService.getEvaluatedByPhone(phone);
// float sumOfSatisfaction = 0;
// for (Evaluations evaluation : elist) {
// sumOfSatisfaction += evaluation.getSatisfaction();
// }
// util.printInfo("查询满意度:"+ sumOfSatisfaction);
// return Float.toString(sumOfSatisfaction /elist.size());
// }
}

@ -0,0 +1,27 @@
package com.softegg.freetogo.Evaluate.service;
import com.softegg.freetogo.Evaluate.bean.Evaluations;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @description:
* @author:zhanglinhao
* @date:2024/5/10 8:52
*/
@Service
public interface EvaluateService {
List<Evaluations> evaluationList();//获取所有评论
// List<Evaluations> getEListByPhone(String phone);//根据电话筛选评价
// List<Evaluations> getEvaluatedByPhone(String phone);
Evaluations getEvaluationById(int eid);//根据id获取评论
void addEvaluation(Evaluations evaluation);//添加评论
void editEvaluation(Evaluations evaluation);//编辑评论
void deleteEvaluation(int eid);//删除评论
}

@ -0,0 +1,114 @@
package com.softegg.freetogo.Evaluate.service;
import com.softegg.freetogo.Debug.utils;
import com.softegg.freetogo.Evaluate.Dao.EvaluateRepository;
import com.softegg.freetogo.Evaluate.bean.Evaluations;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* @description:
* @author:zhanglinhao
* @date:2024/5/10 9:25
*/
@Component
public class EvaluateServiceImpl implements EvaluateService {
private final static utils util = new utils();
@Autowired
EvaluateRepository evaluateRepository;
/**
* @description:
* @param: null
* @return: void
* @author: zhanglinhao
* @date: 2024/5/10 9:25
*/
@Override
public List<Evaluations> evaluationList() {
util.printInfo("查询评论");
return evaluateRepository.findAll();
}
/**
* @description: id
* @param: eid
* @return: com.softegg.freetogo.Evaluate.bean.Evaluations
* @author: zhanglinhao
* @date: 2024/5/15 8:13
*/
@Override
public Evaluations getEvaluationById(int eid) {
return evaluateRepository.findById(eid).get();
}
/**
* @description:
* @param: phone
* @return: java.util.List<com.softegg.freetogo.Evaluate.bean.Evaluations>
* @author: zhanglinhao
* @date: 2024/5/11 16:28
*/
// @Override
// public List<Evaluations> getEListByPhone(String phone) {
// util.printInfo("查询" + phone + "的评论");
// return evaluateRepository.findByEditorPhone(phone);
// }
/**
* @description:
* @param: phone
* @return: java.util.List<com.softegg.freetogo.Evaluate.bean.Evaluations>
* @author: zhanglinhao
* @date: 2024/5/12 21:21
*/
// @Override
// public List<Evaluations> getEvaluatedByPhone(String phone) {
// return evaluateRepository.findByEditedPhone(phone);
// }
/**
* @description:
* @param: evaluation
* @return: void
* @author: zhanglinhao
* @date: 2024/5/10 21:20
*/
@Override
public void addEvaluation(Evaluations evaluation) {
evaluateRepository.save(evaluation);
util.printInfo("添加评论:" + evaluation.getEbody());
}
/**
* @description:
* @param: eid
* @return: void
* @author: zhanglinhao
* @date: 2024/5/11 17:10
*/
@Override
public void editEvaluation(Evaluations evaluation) {
int eid = evaluation.getEid();
util.printInfo("编辑评论:" + eid);
evaluateRepository.save(evaluation);
util.printInfo("编辑成功:" + eid);
}
/**
* @description:
* @param: eid
* @return: void
* @author: zhanglinhao
* @date: 2024/5/11 17:28
*/
@Override
public void deleteEvaluation(int eid) {
evaluateRepository.deleteById(eid);
util.printInfo("删除评论:" + eid);
}
}

@ -0,0 +1,13 @@
package com.softegg.freetogo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class FreeToGoApplication {
public static void main(String[] args) {
SpringApplication.run(FreeToGoApplication.class, args);
}
}

@ -0,0 +1,119 @@
package com.softegg.freetogo.Login.controller;
import com.softegg.freetogo.Debug.utils;
import com.softegg.freetogo.Login.service.LoginService;
import com.softegg.freetogo.User.Dao.GuidesRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Map;
/**
* @description:
* @author:zhanglinhao
* @date:2024/5/9 9:35
*/
@RestController
//@CrossOrigin(origins = "*")
@RequestMapping("/Login")
public class LoginController {
private final static utils util = new utils();
@Autowired
LoginService loginService;
@Autowired
GuidesRepository guidesRepository;
/**
* @description:
* @param: map
* @return: java.lang.String
* @author: zhanglinhao
* @date: 2024/5/9 22:44
*/
@PostMapping("login")
public int Login(@RequestBody Map<String, Object> map) {
util.printInfo(map);
util.printInfo("phone:" + map.get("phone").toString());
util.printInfo("password" + map.get("password").toString());
int tag = loginService.loginAccount(map.get("phone").toString(), map.get("password").toString());
util.printInfo("LoginTag:" + tag);
return switch (tag) {
case 1000 -> 1;//登陆成功
case 1001 -> 2;//密码或账号错误
case 1002 -> 3;//该账户未注册
case 1005 -> 6;//未输入账号密码
case 1006 -> 7;//未输入账号
case 1007 -> 8;//未输入密码
default -> 0;
};
}
/**
* @description:
* @param: map
* @return: java.lang.String
* @author: zhanglinhao
* @date: 2024/5/9 22:45
*/
@PostMapping("register")
public int Register(@RequestBody Map<String, Object> map) {
try {
// 创建URL对象
// URL url = new URL("http://localhost:9000/api/authenticate?idc="+ map.get("IDCard") +"&name="+map.get("name")+"&phone="+map.get("phone"));
String baseURL = "http://localhost:9000/api/authenticate";
String name=URLEncoder.encode(map.get("name").toString(), StandardCharsets.UTF_8);;
String phone=URLEncoder.encode(map.get("phone").toString(), StandardCharsets.UTF_8);
String idc = URLEncoder.encode(map.get("IDCard").toString(), StandardCharsets.UTF_8);
URL url = new URL(baseURL+ "?idc="+idc +"&name="+name+"&phone="+phone);
// 打开连接
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
// 设置请求方法
connection.setRequestMethod("GET");
// 获取响应码
int responseCode = connection.getResponseCode();
System.out.println("响应码: " + responseCode);
// 读取响应内容
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuilder content = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
content.append(inputLine);
}
// 关闭连接
in.close();
connection.disconnect();
// 输出响应内容
System.out.println("响应内容: " + content);
if(content.toString().equals("false"))
return 14;
} catch (Exception e) {
e.printStackTrace();
}
util.printInfo(map);
int tag = loginService.registerAccount((String) map.get("name"), (String) map.get("password"), (String) map.get("phone"), (String) map.get("nickname"), (String) map.get("IDCard"));
util.printInfo("RegisterTag:" + tag);
return switch (tag) {
case 1003 -> 4;//该账户已经注册
case 1004 -> 5;//注册成功
case 1008 -> 9;//身份证输入错误18位
case 1010 -> 11;//手机号输入错误11位
case 1011 -> 12;//密码过短最少8位
case 1012 -> 13;//姓名未输入
default -> 0;
};
}
}

@ -0,0 +1,21 @@
package com.softegg.freetogo.Login.service;
import org.springframework.stereotype.Service;
/**
* @description:
* @author:zhanglinhao
* @date:2024/5/9 8:37
*/
@Service
public interface LoginService {
int loginAccount(String phone, String password);//登录
// int registerAccount(String phone, String password);
int registerAccount(String name,
String password,
String phone,
String nickname,
String IDCard);//注册
}

@ -0,0 +1,98 @@
package com.softegg.freetogo.Login.service;
import com.softegg.freetogo.User.Dao.GuidesRepository;
import com.softegg.freetogo.User.bean.Users;
import com.softegg.freetogo.User.service.UsersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
/**
* @description:
* @author:zhanglinhao
* @date:2024/5/9 9:33
*/
@Component
public class LoginServiceImpl implements LoginService {
@Autowired
UsersService usersService;
@Autowired
GuidesRepository guidesRepository;
/**
* @description:
* @param: phone
* @param: password
* @return: int
* @author: zhanglinhao
* @date: 2024/5/9 22:46
*/
@Override
public int loginAccount(String phone, String password) {
if (phone.isEmpty() && password.isEmpty())
return 1005;//未输入账号密码
else if (phone.isEmpty())
return 1006;//未输入账号
else if (password.isEmpty())
return 1007;//未输入密码
if (usersService.isRegister(phone)) {
if (usersService.getUserByPhone(phone).getPassword().equals(password))
return 1000;//登录成功
else
return 1001;//密码或账号错误
} else
return 1002;//该账户未注册
}
/**
* @description:
* @param: name
* @param: password
* @param: phone
* @param: nickname
* @param: IDCard
* @return: int
* @author: zhanglinhao
* @date: 2024/5/11 15:57
*/
@Override
public int registerAccount(String name,
String password,
String phone,
String nickname,
String IDCard) {
if (usersService.isRegister(phone))
return 1003;//该账户已经注册
else if(name.isEmpty())
return 1012;//姓名未输入
else if (IDCard.length() != 18)
return 1008;//身份证输入错误
else if (phone.length() != 11)
return 1010;//手机号输入错误
else if (password.length() < 8)
return 1011;//密码过于简单
else {
LocalDateTime currentTime = LocalDateTime.now();
System.out.println("注册信息:姓名:" + name + "密码:" + password + "电话:" + phone + "昵称:" + nickname + "身份证:" + IDCard);
Users user = new Users();
user.setPhone(phone);
user.setPassword(password);
user.setNickname(nickname);
user.setIdcard(IDCard);
user.setName(name);
user.setCreatetime((currentTime.getYear() + "-" + currentTime.getMonthValue() + "-" + currentTime.getDayOfMonth()));
user.setGender(isMale(IDCard));
user.setStatus(0);
user.setReputation(60);
user.setMembertype(false);
usersService.add(user);
return 1004;//注册成功
}
}
boolean isMale(String IDCard) {
System.out.println("根据身份证判断性别:" + IDCard + " 第17位:" + IDCard.charAt(16));
return (int) IDCard.charAt(16) % 2 != 0;
}
}

@ -0,0 +1,13 @@
1000->1 登录成功
1001->2 密码或账号错误
1002->3 该账户未注册
1003->4 该账户已经注册
1004->5 注册成功
1005->6 未输入账号密码
1006->7 未输入账号
1007->8 身份证输入错误
1008->9 成功注册导游
1009->10 已是导游
1010->11 手机号输入错误
1011->12 密码过短
1012->13 未输入姓名

@ -0,0 +1,12 @@
package com.softegg.freetogo.User.Dao;
import com.softegg.freetogo.User.bean.Guides;
import org.springframework.data.jpa.repository.JpaRepository;
/**
* @description: Jpa
* @author: zhanglinhao
* @date: 2024/5/16 10:44
*/
public interface GuidesRepository extends JpaRepository<Guides, Integer> {
}

@ -0,0 +1,13 @@
package com.softegg.freetogo.User.Dao;
import com.softegg.freetogo.User.bean.Users;
import org.springframework.data.jpa.repository.JpaRepository;
/**
* @description:Jpa
* @author:zhanglinhao
* @date:2024/5/8 8:50
*/
public interface UsersRepository extends JpaRepository<Users, Integer> {
Users findByPhone(String phone);//自定义函数,根据手机号进行查找返回对应对象
}

@ -0,0 +1,31 @@
package com.softegg.freetogo.User.bean;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
/**
* @description:
* @author: zhanglinhao
* @date: 2024/5/16 10:33
*/
@Entity
@Table(name = "guides")
@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class Guides {
@Id
private Integer uid;
@Column(name = "residence")
private String rsd;
@Column(name = "familiarareas")
private String fa;
@Column(name = "synopsis")
private String syns;
@Column(name = "experance")
private boolean re;
}

@ -0,0 +1,60 @@
package com.softegg.freetogo.User.bean;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
/**
* @description:users
* @author:zhanglinhao
* @date:2024/5/7 15:36
*/
@Entity
@Table(name = "users")
@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class Users {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer uid;
@Column
private String name;
@Column
private String email;
@Column
private String password;
@Column
private String createtime;
@Column(name="IDCard")
private String idcard;
@Column
private int reputation;
@Column
private boolean gender;//ture:male, false:female
@Column
private boolean membertype;//true:guide, false:visitor
@Column
private String phone;
@Column
private String nickname;
@Column
private int status;
public Users(String name, String email, String psw, String ct, int rpt, String phone, String nkn, String idc, boolean gender, boolean type, int status) {
this.name = name;
this.email = email;
this.password = psw;
this.createtime = ct;
this.reputation = rpt;
this.phone = phone;
this.nickname = nkn;
this.idcard = idc;
this.gender = gender;
this.membertype = type;
this.status = status;
}
}

@ -0,0 +1,249 @@
package com.softegg.freetogo.User.controller;
import com.softegg.freetogo.Debug.utils;
import com.softegg.freetogo.User.bean.Guides;
import com.softegg.freetogo.User.bean.Users;
import com.softegg.freetogo.User.service.GuidesService;
import com.softegg.freetogo.User.service.UsersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
/**
* @description:Users
* @author:zhanglinhao
* @date:2024/5/8 8:28
*/
@RestController
//@CrossOrigin(origins = "*")
@RequestMapping("/users")
public class UsersController {
private final static utils util = new utils();
@Autowired
UsersService usersService;
@Autowired
GuidesService guidesService;
/**
* @description: users
* @param: null
* @return: java.util.List<com.softegg.freetogo.User.bean.Users>
* @author: zhanglinhao
* @date: 2024/5/10 8:16
*/
@GetMapping("findAll")
public List<Users> findAll() {
util.printInfo("响应查找所有数据");
return usersService.findAll();
}
/**
* @description:
* @author: zhanglinhao
* @date: 2024/5/10 8:17
*/
@GetMapping("add")
public String add(String name,
String email,
String password,
String createtime,
int reputation,
String phone,
String nickname,
String IDCard,
boolean gender,
boolean type,
int status) {
Users user = new Users(name, email, password, createtime, reputation, phone, nickname, IDCard, gender, type, status);
usersService.add(user);
util.printInfo("添加用户");
return "添加成功";
}
/**
* @description: id
* @param: id
* @return: java.lang.String
* @author: zhanglinhao
* @date: 2024/5/10 8:17
*/
@GetMapping("delbyid")
public String delById(int id) {
usersService.deleteById(id);
util.printInfo("通过id删除用户");
return "删除成功";
}
/**
* @description: id
* @param: id
* @return: com.softegg.freetogo.User.bean.Users
* @author: zhanglinhao
* @date: 2024/5/10 8:17
*/
@GetMapping("findbyid")
public Users getUserById(int id) {
util.printInfo("通过id获取用户数据");
return usersService.getUserById(id);
}
/**
* @description: 使GET
* @author: zhanglinhao
* @date: 2024/5/10 8:17
*/
@GetMapping("update")
public String update(String name,
String email,
String password,
String createtime,
int reputation,
String phone,
String nickname,
String IDCard,
boolean gender,
boolean type,
int status) {
Users User = usersService.getUserByPhone(phone);
util.printInfo(User);
setUsers(name, email, password, createtime, reputation, phone, nickname, IDCard, gender, type, status, User);
usersService.update(User);
util.printInfo("更新用户信息:" + User);
return "更新成功";
}
/**
* @description: 使POST
* @param: user
* @return: void
* @author: zhanglinhao
* @date: 2024/5/10 19:45
*/
@PostMapping("pupdate")
public boolean pupdate(@RequestBody Map<String, Map<String, Object>> user) {
Map<String, Object> ubody = user.get("user");
util.printInfo(ubody);
// util.printInfo(ubody.get("uid"));
Users User = new Users((int) ubody.get("uid"), (String) ubody.get("name"), (String) ubody.get("email"), (String) ubody.get("password"), (String) ubody.get("createtime"), (String) ubody.get("idcard"), (int) ubody.get("reputation"), (boolean) ubody.get("gender"), (boolean) ubody.get("membertype"), (String) ubody.get("phone"), (String) ubody.get("nickname"), (int) ubody.get("status"));
usersService.update(User);
return true;
}
@PostMapping("Pupdate")
public boolean Pupdate(@RequestBody Map<String, Users> user) {
Users ubody = user.get("user");
util.printInfo(ubody);
// util.printInfo(ubody.get("uid"));
Users User = new Users(ubody.getUid(), ubody.getName(), ubody.getEmail(), ubody.getPassword(), ubody.getCreatetime(), ubody.getIdcard(), ubody.getReputation(), ubody.isGender(), ubody.isMembertype(), ubody.getPhone(), ubody.getNickname(), ubody.getStatus());
usersService.update(User);
return true;
}
/**
* @description:
* @param: phone
* @return: com.softegg.freetogo.User.bean.Users
* @author: zhanglinhao
* @date: 2024/5/10 8:17
*/
@GetMapping("getByPhone")
public Users getByPhone(String phone) {
util.printInfo("根据手机号获取用户信息:" + phone);
util.printInfo(usersService.getUserByPhone(phone));
return usersService.getUserByPhone(phone);
}
/**
* @description:
* @param: phone
* @return: boolean
* @author: zhanglinhao
* @date: 2024/5/15 20:03
*/
@GetMapping("isGuide")
public boolean isGuide(String phone) {
util.printInfo("查寻是否是导游:" + phone);
return usersService.isGuide(phone);
}
/**
* @description: id
* @param: phone
* @return: int
* @author: zhanglinhao
* @date: 2024/5/16 11:13
*/
@GetMapping("getUid")
public int getUid(String phone) {
util.printInfo("搜索uid使用的电话:" + phone);
return usersService.getIdByPhone(phone);
}
/**
* @description:
* @param: guide
* @return: int
* @author: zhanglinhao
* @date: 2024/5/16 10:15
*/
// @PostMapping("registerToGuide")
// public int registerToGuide(@RequestBody Map<String,Map<String,String>> grequesting) {//Map<String, Map<String, Object>> gbody) {
// util.printInfo("接收的注册请求:"+grequesting);
// Map<String,String> gbody = grequesting.get("registerToGuide");
// util.printInfo("处理后的注册请求:"+gbody);
// Guides guide = new Guides();
// guide.setUid(Integer.parseInt(gbody.get("uid")));
// guide.setRsd(gbody.get("rsd"));
// guide.setFa(gbody.get("fa"));
// guide.setSyns(gbody.get("syns"));
// guide.setRe(Boolean.parseBoolean(gbody.get("re")));
// if(guidesService.registerToGuide(guide))
// return 1;
// else
// return 0;
// }
@PostMapping("registerToGuide")
public int registerToGuide(@RequestBody Map<String,Guides> grequesting) {//Map<String, Map<String, Object>> gbody) {
util.printInfo(grequesting);
Guides guide = grequesting.get("registerToGuide");
util.printInfo(guide);
if(guidesService.registerToGuide(guide))
return 1;
else
return 0;
}
/**
* @description: user
* @author: zhanglinhao
* @date: 2024/5/10 8:18
*/
private void setUsers(String name,
String email,
String psw,
String ct,
int rpt,
String phone,
String nkn,
String idc,
boolean gender,
boolean type,
int status,
Users user) {
user.setName(name);
user.setGender(gender);
user.setPassword(psw);
user.setEmail(email);
user.setReputation(rpt);
user.setMembertype(type);
user.setCreatetime(ct);
user.setPhone(phone);
user.setNickname(nkn);
user.setIdcard(idc);
user.setStatus(status);
}
}

@ -0,0 +1,14 @@
package com.softegg.freetogo.User.service;
import com.softegg.freetogo.User.bean.Guides;
import org.springframework.stereotype.Service;
/**
* @description:
* @author: zhanglinhao
* @date: 2024/5/16 10:45
*/
@Service
public interface GuidesService {
boolean registerToGuide(Guides guide);//注册成为导游,将导游注册信息入库
}

@ -0,0 +1,51 @@
package com.softegg.freetogo.User.service;
import com.softegg.freetogo.Debug.utils;
import com.softegg.freetogo.User.Dao.GuidesRepository;
import com.softegg.freetogo.User.bean.Guides;
import com.softegg.freetogo.User.bean.Users;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @description:
* @author: zhanglinhao
* @date: 2024/5/16 10:46
*/
@Component
public class GuidesServiceImpl implements GuidesService {
private final static utils util = new utils();
@Autowired
GuidesRepository guidesRepository;
@Autowired
UsersService usersService;
//
// @Override
// public void registerToGuide(Guides guide) {
// guidesRepository.save(guide);
// util.printInfo("成功保存注册导游信息!");
// }
/**
* @description:
* @param: guide
* @return: int
* @author: zhanglinhao
* @date: 2024/5/15 21:19
*/
@Override
public boolean registerToGuide(Guides guide) {
util.printInfo("注册成为导游id:" + guide.getUid());
Users user = usersService.getUserById(guide.getUid());
user.setMembertype(true);
guidesRepository.save(guide);
if (user.isMembertype()) {
util.printInfo("注册成功!");
return true;
}else{
util.printInfo("注册失败!");
return false;
}
}
}

@ -0,0 +1,171 @@
package com.softegg.freetogo.User.service;
import com.softegg.freetogo.Debug.utils;
import com.softegg.freetogo.User.Dao.UsersRepository;
import com.softegg.freetogo.User.bean.Users;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* @description:
* @author: zhanglinhao
* @date: 2024/5/8 8:50
*/
@Component
public class UserServiceImpl implements UsersService {
private final static utils util = new utils();
@Autowired
private UsersRepository usersRepository;
/**
* @description:
* @param: null
* @return: java.util.List<com.softegg.freetogo.User.Bean.Users>
* @author: zhanglinhao
* @date: 2024/5/9 22:52
*/
public List<Users> findAll() {
util.printInfo("查询成功");
return usersRepository.findAll();
}
/**
* @description: user
* @param: user
* @return: void
* @author: zhanglinhao
* @date: 2024/5/9 22:53
*/
public void add(Users user) {
usersRepository.save(user);
util.printInfo("添加成功:" + user);
}
/**
* @description: id
* @param: id
* @return: void
* @author: zhanglinhao
* @date: 2024/5/9 22:53
*/
public void deleteById(int id) {
usersRepository.deleteById(id);
util.printInfo("删除成功:" + id);
}
/**
* @description: id
* @param: id
* @return: com.softegg.freetogo.User.Bean.Users
* @author: zhanglinhao
* @date: 2024/5/9 22:54
*/
public Users getUserById(int id) {
return usersRepository.findById(id).orElse(null);
}
/**
* @description:
* @param: user
* @return: void
* @author: zhanglinhao
* @date: 2024/5/9 22:54
*/
public void update(Users user) {
usersRepository.save(user);
util.printInfo("更新成功:");
showInfo(user);
}
/**
* @description:
* @param: phone
* @return: boolean
* @author: zhanglinhao
* @date: 2024/5/9 22:54
*/
public boolean isRegister(String phone) {
Users users = usersRepository.findByPhone(phone);
util.printInfo("正在验证用户是否注册:" + users);
if (users == null) {
util.printInfo("用户未注册");
return false;
} else {
util.printInfo("用户已注册");
return true;
}
}
/**
* @description:
* @param: phone
* @return: com.softegg.freetogo.User.Bean.Users
* @author: zhanglinhao
* @date: 2024/5/9 22:55
*/
public Users getUserByPhone(String phone) {
util.printInfo("通过手机号查找用户:" + phone);
return usersRepository.findByPhone(phone);
}
/**
* @description:
* @param: phone
* @return: boolean
* @author: zhanglinhao
* @date: 2024/5/15 21:32
*/
@Override
public boolean isGuide(String phone) {
util.printInfo("判断是不是导游:" + phone);
Users user = getUserByPhone(phone);
if (user.isMembertype()) {
util.printInfo("是导游:" + phone);
return true;
} else {
util.printInfo("不是导游:" + phone);
return false;
}
}
/**
* @description: uid
* @param: phone
* @return: int
* @author: zhanglinhao
* @date: 2024/5/16 10:54
*/
@Override
public int getIdByPhone(String phone) {
Users user = usersRepository.findByPhone(phone);
if (user == null) {
util.printInfo("该电话号码未注册");
return -1;
} else {
util.printInfo("查询到的id:" + user.getUid());
return user.getUid();
}
}
/**
* @description:
* @author: zhanglinhao
* @date: 2024/5/16 15:55
*/
@Override
public void showInfo(Users user) {
util.printInfo(user.getUid());
util.printInfo(user.getName());
util.printInfo(user.getPhone());
util.printInfo(user.getPassword());
util.printInfo(user.getNickname());
util.printInfo(user.getCreatetime());
util.printInfo(user.getIdcard());
util.printInfo(user.getReputation());
util.printInfo(user.getStatus());
util.printInfo(user.isGender());
util.printInfo(user.isMembertype());
}
}

@ -0,0 +1,33 @@
package com.softegg.freetogo.User.service;
import com.softegg.freetogo.User.bean.Users;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @description:
* @author:zhanglinhaon
* @date:2024/5/7 16:06
*/
@Service
public interface UsersService {
List<Users> findAll();//查找所有用户
void add(Users user);//以user为用户入库
void deleteById(int id);//删除对应id用户
Users getUserById(int id);//获得对应id用户
void update(Users user);//更新用户信息
boolean isRegister(String phone);//判断该手机号(账号)是否已经入库
Users getUserByPhone(String phone);//根据手机号获得用户
boolean isGuide(String phone);//查询是否是导游
int getIdByPhone(String phone);//查找uid
void showInfo(Users user);//打印所有信息
}

@ -0,0 +1,6 @@
spring.application.name=FreeToGo
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/freetogo?useSSL=false&useUnicode=true&characterEncoding=utf-8&allowPublicKeyRetrieval=true
spring.datasource.username=root
spring.datasource.password=zlh1260788704
server.port=9000

@ -0,0 +1,26 @@
spring:
jpa:
hibernate:
ddl-auto: update
show-sql: true
datasource:
username: root
password: zlh1260788704
url: jdbc:mysql://localhost:3306/freetogo?useSSL=false&useUnicode=true&characterEncoding=utf-8
driverClassName: com.mysql.jdbc.Driver
# data:
# redis:
# host: localhost
# port: 6379
# #password: 123456
# database: 0 #操作的是0号数据库
# jedis:
# #Redis连接池配置
# pool:
# max-active: 8 #最大连接数
# max-wait: 1ms #连接池最大阻塞等待时间
# max-idle: 4 #连接池中的最大空闲连接
# min-idle: 0 #连接池中的最小空闲连接
logging:
level:
com.softegg.freetogo.Api.alipay: debug

File diff suppressed because one or more lines are too long

@ -0,0 +1,29 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户登录</title>
<!--引入jQuery -->
<script type="text/javascript" src="/js/jquery-1.8.3.min.js"></script>
</head>
<body>
<h2>用户登录</h2>
<form action="/login" method="post">
用户名:<input type="text" name="username"><br><br>
密码 :<input type="password" name="password"><br><br>
验证码:<input id="identify-input" type="text" name="identifyCode">
<img id="identify-img" src="/identifyImage"><br><br>
<input type="submit" value="登录">
</form>
<!--绑定点击事件 -->
<script>
$("#identify-img").on('click',function (){
// 点击验证码那个图片的时候,我们输入的验证码那个框就会清空
$('#identify-input').val('')
//而且我们点击验证码的时候,希望它可以改变验证码内容,其实是通过发送新请求来改变验证码内容
$('#identify-img').attr('src','/identifyImage?'+Math.random())
})
</script>
</body>
</html>
Loading…
Cancel
Save