项目
This commit is contained in:
commit
4f3e4e7271
33
project/jiaqingjiayi/.gitignore
vendored
Normal file
33
project/jiaqingjiayi/.gitignore
vendored
Normal file
|
@ -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/
|
259
project/jiaqingjiayi/mvnw
vendored
Normal file
259
project/jiaqingjiayi/mvnw
vendored
Normal file
|
@ -0,0 +1,259 @@
|
|||
#!/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.3.2
|
||||
#
|
||||
# Optional ENV vars
|
||||
# -----------------
|
||||
# JAVA_HOME - location of a JDK home dir, required when download maven via java source
|
||||
# MVNW_REPOURL - repo url base for downloading maven distribution
|
||||
# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven
|
||||
# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output
|
||||
# ----------------------------------------------------------------------------
|
||||
|
||||
set -euf
|
||||
[ "${MVNW_VERBOSE-}" != debug ] || set -x
|
||||
|
||||
# OS specific support.
|
||||
native_path() { printf %s\\n "$1"; }
|
||||
case "$(uname)" in
|
||||
CYGWIN* | MINGW*)
|
||||
[ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")"
|
||||
native_path() { cygpath --path --windows "$1"; }
|
||||
;;
|
||||
esac
|
||||
|
||||
# set JAVACMD and JAVACCMD
|
||||
set_java_home() {
|
||||
# For Cygwin and MinGW, ensure paths are in Unix format before anything is touched
|
||||
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"
|
||||
JAVACCMD="$JAVA_HOME/jre/sh/javac"
|
||||
else
|
||||
JAVACMD="$JAVA_HOME/bin/java"
|
||||
JAVACCMD="$JAVA_HOME/bin/javac"
|
||||
|
||||
if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then
|
||||
echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2
|
||||
echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
else
|
||||
JAVACMD="$(
|
||||
'set' +e
|
||||
'unset' -f command 2>/dev/null
|
||||
'command' -v java
|
||||
)" || :
|
||||
JAVACCMD="$(
|
||||
'set' +e
|
||||
'unset' -f command 2>/dev/null
|
||||
'command' -v javac
|
||||
)" || :
|
||||
|
||||
if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then
|
||||
echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# hash string like Java String::hashCode
|
||||
hash_string() {
|
||||
str="${1:-}" h=0
|
||||
while [ -n "$str" ]; do
|
||||
char="${str%"${str#?}"}"
|
||||
h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296))
|
||||
str="${str#?}"
|
||||
done
|
||||
printf %x\\n $h
|
||||
}
|
||||
|
||||
verbose() { :; }
|
||||
[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; }
|
||||
|
||||
die() {
|
||||
printf %s\\n "$1" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
trim() {
|
||||
# MWRAPPER-139:
|
||||
# Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds.
|
||||
# Needed for removing poorly interpreted newline sequences when running in more
|
||||
# exotic environments such as mingw bash on Windows.
|
||||
printf "%s" "${1}" | tr -d '[:space:]'
|
||||
}
|
||||
|
||||
# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties
|
||||
while IFS="=" read -r key value; do
|
||||
case "${key-}" in
|
||||
distributionUrl) distributionUrl=$(trim "${value-}") ;;
|
||||
distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;;
|
||||
esac
|
||||
done <"${0%/*}/.mvn/wrapper/maven-wrapper.properties"
|
||||
[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in ${0%/*}/.mvn/wrapper/maven-wrapper.properties"
|
||||
|
||||
case "${distributionUrl##*/}" in
|
||||
maven-mvnd-*bin.*)
|
||||
MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/
|
||||
case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in
|
||||
*AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;;
|
||||
:Darwin*x86_64) distributionPlatform=darwin-amd64 ;;
|
||||
:Darwin*arm64) distributionPlatform=darwin-aarch64 ;;
|
||||
:Linux*x86_64*) distributionPlatform=linux-amd64 ;;
|
||||
*)
|
||||
echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2
|
||||
distributionPlatform=linux-amd64
|
||||
;;
|
||||
esac
|
||||
distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip"
|
||||
;;
|
||||
maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;;
|
||||
*) MVN_CMD="mvn${0##*/mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;;
|
||||
esac
|
||||
|
||||
# apply MVNW_REPOURL and calculate MAVEN_HOME
|
||||
# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-<version>,maven-mvnd-<version>-<platform>}/<hash>
|
||||
[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}"
|
||||
distributionUrlName="${distributionUrl##*/}"
|
||||
distributionUrlNameMain="${distributionUrlName%.*}"
|
||||
distributionUrlNameMain="${distributionUrlNameMain%-bin}"
|
||||
MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}"
|
||||
MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")"
|
||||
|
||||
exec_maven() {
|
||||
unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || :
|
||||
exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD"
|
||||
}
|
||||
|
||||
if [ -d "$MAVEN_HOME" ]; then
|
||||
verbose "found existing MAVEN_HOME at $MAVEN_HOME"
|
||||
exec_maven "$@"
|
||||
fi
|
||||
|
||||
case "${distributionUrl-}" in
|
||||
*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;;
|
||||
*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;;
|
||||
esac
|
||||
|
||||
# prepare tmp dir
|
||||
if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then
|
||||
clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; }
|
||||
trap clean HUP INT TERM EXIT
|
||||
else
|
||||
die "cannot create temp dir"
|
||||
fi
|
||||
|
||||
mkdir -p -- "${MAVEN_HOME%/*}"
|
||||
|
||||
# Download and Install Apache Maven
|
||||
verbose "Couldn't find MAVEN_HOME, downloading and installing it ..."
|
||||
verbose "Downloading from: $distributionUrl"
|
||||
verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName"
|
||||
|
||||
# select .zip or .tar.gz
|
||||
if ! command -v unzip >/dev/null; then
|
||||
distributionUrl="${distributionUrl%.zip}.tar.gz"
|
||||
distributionUrlName="${distributionUrl##*/}"
|
||||
fi
|
||||
|
||||
# verbose opt
|
||||
__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR=''
|
||||
[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v
|
||||
|
||||
# normalize http auth
|
||||
case "${MVNW_PASSWORD:+has-password}" in
|
||||
'') MVNW_USERNAME='' MVNW_PASSWORD='' ;;
|
||||
has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;;
|
||||
esac
|
||||
|
||||
if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then
|
||||
verbose "Found wget ... using wget"
|
||||
wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl"
|
||||
elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then
|
||||
verbose "Found curl ... using curl"
|
||||
curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl"
|
||||
elif set_java_home; then
|
||||
verbose "Falling back to use Java to download"
|
||||
javaSource="$TMP_DOWNLOAD_DIR/Downloader.java"
|
||||
targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName"
|
||||
cat >"$javaSource" <<-END
|
||||
public class Downloader extends java.net.Authenticator
|
||||
{
|
||||
protected java.net.PasswordAuthentication getPasswordAuthentication()
|
||||
{
|
||||
return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() );
|
||||
}
|
||||
public static void main( String[] args ) throws Exception
|
||||
{
|
||||
setDefault( new Downloader() );
|
||||
java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() );
|
||||
}
|
||||
}
|
||||
END
|
||||
# For Cygwin/MinGW, switch paths to Windows format before running javac and java
|
||||
verbose " - Compiling Downloader.java ..."
|
||||
"$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java"
|
||||
verbose " - Running Downloader.java ..."
|
||||
"$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")"
|
||||
fi
|
||||
|
||||
# If specified, validate the SHA-256 sum of the Maven distribution zip file
|
||||
if [ -n "${distributionSha256Sum-}" ]; then
|
||||
distributionSha256Result=false
|
||||
if [ "$MVN_CMD" = mvnd.sh ]; then
|
||||
echo "Checksum validation is not supported for maven-mvnd." >&2
|
||||
echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2
|
||||
exit 1
|
||||
elif command -v sha256sum >/dev/null; then
|
||||
if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c >/dev/null 2>&1; then
|
||||
distributionSha256Result=true
|
||||
fi
|
||||
elif command -v shasum >/dev/null; then
|
||||
if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then
|
||||
distributionSha256Result=true
|
||||
fi
|
||||
else
|
||||
echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2
|
||||
echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2
|
||||
exit 1
|
||||
fi
|
||||
if [ $distributionSha256Result = false ]; then
|
||||
echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2
|
||||
echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# unzip and move
|
||||
if command -v unzip >/dev/null; then
|
||||
unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip"
|
||||
else
|
||||
tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar"
|
||||
fi
|
||||
printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/mvnw.url"
|
||||
mv -- "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME"
|
||||
|
||||
clean || :
|
||||
exec_maven "$@"
|
149
project/jiaqingjiayi/mvnw.cmd
vendored
Normal file
149
project/jiaqingjiayi/mvnw.cmd
vendored
Normal file
|
@ -0,0 +1,149 @@
|
|||
<# : batch portion
|
||||
@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.3.2
|
||||
@REM
|
||||
@REM Optional ENV vars
|
||||
@REM MVNW_REPOURL - repo url base for downloading maven distribution
|
||||
@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven
|
||||
@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output
|
||||
@REM ----------------------------------------------------------------------------
|
||||
|
||||
@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0)
|
||||
@SET __MVNW_CMD__=
|
||||
@SET __MVNW_ERROR__=
|
||||
@SET __MVNW_PSMODULEP_SAVE=%PSModulePath%
|
||||
@SET PSModulePath=
|
||||
@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @(
|
||||
IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B)
|
||||
)
|
||||
@SET PSModulePath=%__MVNW_PSMODULEP_SAVE%
|
||||
@SET __MVNW_PSMODULEP_SAVE=
|
||||
@SET __MVNW_ARG0_NAME__=
|
||||
@SET MVNW_USERNAME=
|
||||
@SET MVNW_PASSWORD=
|
||||
@IF NOT "%__MVNW_CMD__%"=="" (%__MVNW_CMD__% %*)
|
||||
@echo Cannot start maven from wrapper >&2 && exit /b 1
|
||||
@GOTO :EOF
|
||||
: end batch / begin powershell #>
|
||||
|
||||
$ErrorActionPreference = "Stop"
|
||||
if ($env:MVNW_VERBOSE -eq "true") {
|
||||
$VerbosePreference = "Continue"
|
||||
}
|
||||
|
||||
# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties
|
||||
$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl
|
||||
if (!$distributionUrl) {
|
||||
Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties"
|
||||
}
|
||||
|
||||
switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) {
|
||||
"maven-mvnd-*" {
|
||||
$USE_MVND = $true
|
||||
$distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip"
|
||||
$MVN_CMD = "mvnd.cmd"
|
||||
break
|
||||
}
|
||||
default {
|
||||
$USE_MVND = $false
|
||||
$MVN_CMD = $script -replace '^mvnw','mvn'
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
# apply MVNW_REPOURL and calculate MAVEN_HOME
|
||||
# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-<version>,maven-mvnd-<version>-<platform>}/<hash>
|
||||
if ($env:MVNW_REPOURL) {
|
||||
$MVNW_REPO_PATTERN = if ($USE_MVND) { "/org/apache/maven/" } else { "/maven/mvnd/" }
|
||||
$distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace '^.*'+$MVNW_REPO_PATTERN,'')"
|
||||
}
|
||||
$distributionUrlName = $distributionUrl -replace '^.*/',''
|
||||
$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$',''
|
||||
$MAVEN_HOME_PARENT = "$HOME/.m2/wrapper/dists/$distributionUrlNameMain"
|
||||
if ($env:MAVEN_USER_HOME) {
|
||||
$MAVEN_HOME_PARENT = "$env:MAVEN_USER_HOME/wrapper/dists/$distributionUrlNameMain"
|
||||
}
|
||||
$MAVEN_HOME_NAME = ([System.Security.Cryptography.MD5]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join ''
|
||||
$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME"
|
||||
|
||||
if (Test-Path -Path "$MAVEN_HOME" -PathType Container) {
|
||||
Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME"
|
||||
Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD"
|
||||
exit $?
|
||||
}
|
||||
|
||||
if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) {
|
||||
Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl"
|
||||
}
|
||||
|
||||
# prepare tmp dir
|
||||
$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile
|
||||
$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir"
|
||||
$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null
|
||||
trap {
|
||||
if ($TMP_DOWNLOAD_DIR.Exists) {
|
||||
try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null }
|
||||
catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" }
|
||||
}
|
||||
}
|
||||
|
||||
New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null
|
||||
|
||||
# Download and Install Apache Maven
|
||||
Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..."
|
||||
Write-Verbose "Downloading from: $distributionUrl"
|
||||
Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName"
|
||||
|
||||
$webclient = New-Object System.Net.WebClient
|
||||
if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) {
|
||||
$webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD)
|
||||
}
|
||||
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
|
||||
$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null
|
||||
|
||||
# If specified, validate the SHA-256 sum of the Maven distribution zip file
|
||||
$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum
|
||||
if ($distributionSha256Sum) {
|
||||
if ($USE_MVND) {
|
||||
Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties."
|
||||
}
|
||||
Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash
|
||||
if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) {
|
||||
Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property."
|
||||
}
|
||||
}
|
||||
|
||||
# unzip and move
|
||||
Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null
|
||||
Rename-Item -Path "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" -NewName $MAVEN_HOME_NAME | Out-Null
|
||||
try {
|
||||
Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null
|
||||
} catch {
|
||||
if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) {
|
||||
Write-Error "fail to move MAVEN_HOME"
|
||||
}
|
||||
} finally {
|
||||
try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null }
|
||||
catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" }
|
||||
}
|
||||
|
||||
Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD"
|
139
project/jiaqingjiayi/pom.xml
Normal file
139
project/jiaqingjiayi/pom.xml
Normal file
|
@ -0,0 +1,139 @@
|
|||
<?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.6.4</version>
|
||||
<relativePath/> <!-- lookup parent from repository -->
|
||||
</parent>
|
||||
<groupId>com.cj</groupId>
|
||||
<artifactId>jiaqingjiayi</artifactId>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
<name>jiaqingjiayi</name>
|
||||
<description>jiaqingjiayi</description>
|
||||
<url/>
|
||||
<licenses>
|
||||
<license/>
|
||||
</licenses>
|
||||
<developers>
|
||||
<developer/>
|
||||
</developers>
|
||||
<scm>
|
||||
<connection/>
|
||||
<developerConnection/>
|
||||
<tag/>
|
||||
<url/>
|
||||
</scm>
|
||||
<properties>
|
||||
<java.version>17</java.version>
|
||||
</properties>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.mybatis.spring.boot</groupId>
|
||||
<artifactId>mybatis-spring-boot-starter</artifactId>
|
||||
<version>2.2.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.baomidou</groupId>
|
||||
<artifactId>mybatis-plus-boot-starter</artifactId>
|
||||
<version>3.5.1</version>
|
||||
</dependency>
|
||||
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
|
||||
<dependency>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-lang3</artifactId>
|
||||
<version>3.12.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.alipay.sdk</groupId>
|
||||
<artifactId>alipay-sdk-java</artifactId>
|
||||
<version>4.38.0.ALL</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>cn.hutool</groupId>
|
||||
<artifactId>hutool-all</artifactId>
|
||||
<version>5.8.16</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-devtools</artifactId>
|
||||
<scope>runtime</scope>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>mysql</groupId>
|
||||
<artifactId>mysql-connector-java</artifactId>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-configuration-processor</artifactId>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-test</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<!-- 阿里云oss依赖 -->
|
||||
<dependency>
|
||||
<groupId>com.aliyun.oss</groupId>
|
||||
<artifactId>aliyun-sdk-oss</artifactId>
|
||||
<version>3.15.1</version>
|
||||
</dependency>
|
||||
<!--日期工具栏依赖-->
|
||||
<dependency>
|
||||
<groupId>joda-time</groupId>
|
||||
<artifactId>joda-time</artifactId>
|
||||
<version>2.10.1</version>
|
||||
</dependency>
|
||||
|
||||
<!-- https://doc.xiaominfo.com/knife4j/documentation/get_start.html-->
|
||||
<dependency>
|
||||
<groupId>com.github.xiaoymin</groupId>
|
||||
<artifactId>knife4j-spring-boot-starter</artifactId>
|
||||
<version>3.0.3</version>
|
||||
</dependency>
|
||||
<!-- https://mvnrepository.com/artifact/junit/junit -->
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>4.13.2</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.aspectj</groupId>
|
||||
<artifactId>aspectjtools</artifactId>
|
||||
<version>1.9.21</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<version>1.18.30</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>
|
188
project/jiaqingjiayi/sql/sql.sql
Normal file
188
project/jiaqingjiayi/sql/sql.sql
Normal file
|
@ -0,0 +1,188 @@
|
|||
create database jqjy;
|
||||
|
||||
use jqjy;
|
||||
|
||||
create table user
|
||||
(
|
||||
username varchar(256) null comment '用户昵称',
|
||||
id bigint auto_increment comment 'id'
|
||||
primary key,
|
||||
unionId varchar(256) null comment '支付宝开放平台id',
|
||||
openId varchar(256) null comment 'openId',
|
||||
userAccount varchar(256) null comment '账号',
|
||||
avatarUrl varchar(256) null comment '用户头像',
|
||||
gender tinyint null comment '性别',
|
||||
userPassword varchar(512) not null comment '密码',
|
||||
phone varchar(128) null comment '电话',
|
||||
email varchar(512) null comment '邮箱',
|
||||
userStatus int default 0 not null comment '状态 0 -正常',
|
||||
createTime datetime default CURRENT_TIMESTAMP null comment '创建时间',
|
||||
updateTime datetime default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP,
|
||||
isDelete tinyint default 0 not null comment '是否删除',
|
||||
userRole int default 0 not null comment '用户角色 0 - 普通用户 1 - 管理员 2 - 商家 3 - 美甲师',
|
||||
index idx_openId (openId)
|
||||
) comment '用户' collate = utf8mb4_unicode_ci;
|
||||
|
||||
-- 商品表
|
||||
create table if not exists commodities
|
||||
(
|
||||
id bigint auto_increment comment 'id' primary key,
|
||||
businessId bigint not null comment '商家id',
|
||||
commoditiesGroupId bigint not null comment '商品分组id',
|
||||
commoditiesName varchar(128) not null comment '商品名称',
|
||||
commoditiesImage varchar(1024) null comment '商品图片',
|
||||
commoditiesPrice double not null comment '商品价格',
|
||||
inventoryStatus int not null comment '库存数量',
|
||||
status varchar(20) default '上架' not null comment '商品状态:上架,下架',
|
||||
createTime datetime default CURRENT_TIMESTAMP not null comment '创建时间',
|
||||
updateTime datetime default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间',
|
||||
isDelete tinyint default 0 not null comment '是否删除',
|
||||
index idx_businessId (businessId)
|
||||
) comment '商品表' collate = utf8mb4_unicode_ci;
|
||||
|
||||
-- 商品分组表
|
||||
create table if not exists commodities_group
|
||||
(
|
||||
id bigint auto_increment comment 'id' primary key,
|
||||
businessId bigint not null comment '商家id',
|
||||
groupName varchar(128) not null comment '商品分组名称',
|
||||
isTopping tinyint default 0 not null comment '是否置顶:0不置顶,1置顶',
|
||||
createTime datetime default CURRENT_TIMESTAMP not null comment '创建时间',
|
||||
updateTime datetime default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间',
|
||||
isDelete tinyint default 0 not null comment '是否删除',
|
||||
index idx_businessId (businessId)
|
||||
) comment '商品分组表' collate = utf8mb4_unicode_ci;
|
||||
|
||||
-- 商家表
|
||||
create table if not exists business
|
||||
(
|
||||
id bigint auto_increment comment 'id' primary key,
|
||||
userId bigint not null comment '用户id',
|
||||
businessName varchar(512) not null comment '门店名称',
|
||||
businessAvatar varchar(1024) not null comment '门店头像',
|
||||
businessPhone varchar(64) not null comment '门店手机号',
|
||||
address varchar(512) not null comment '店铺详细地址',
|
||||
businessProfile varchar(512) null comment '门店简介',
|
||||
businessImages varchar(1024) null comment '商家相册',
|
||||
categoryId bigint null comment '分类id',
|
||||
startBusiness varchar(64) not null comment '开始营业时间',
|
||||
endBusiness varchar(64) not null comment '结束营业时间',
|
||||
state tinyint default 0 not null comment '状态:0审核中,1启用,2禁用',
|
||||
storeStatus tinyint default 0 not null comment '店铺状态:0休业,1营业',
|
||||
createTime datetime default CURRENT_TIMESTAMP not null comment '创建时间',
|
||||
updateTime datetime default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间',
|
||||
isDelete tinyint default 0 not null comment '是否删除',
|
||||
index idx_businessId (id),
|
||||
index idx_userId (userId)
|
||||
) comment '商家' collate = utf8mb4_unicode_ci;
|
||||
|
||||
-- 商家认证表
|
||||
create table if not exists business_auth
|
||||
(
|
||||
id bigint auto_increment comment 'id' primary key,
|
||||
businessId bigint not null comment '店铺id',
|
||||
shopkeeper varchar(64) not null comment '店主名',
|
||||
license varchar(1024) not null comment '营业执照',
|
||||
frontIdCard varchar(1024) not null comment '身份证正面',
|
||||
backIdCard varchar(1024) not null comment '身份证反面',
|
||||
bankCard varchar(64) not null comment '银行卡号',
|
||||
createTime datetime default CURRENT_TIMESTAMP not null comment '创建时间',
|
||||
updateTime datetime default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间',
|
||||
isDelete tinyint default 0 not null comment '是否删除',
|
||||
index idx_businessId (businessId)
|
||||
) comment '商家认证' collate = utf8mb4_unicode_ci;
|
||||
|
||||
-- 商品和规格的中间表
|
||||
create table if not exists specifications_commodities
|
||||
(
|
||||
id bigint auto_increment comment 'id' primary key,
|
||||
commoditiesId bigint not null comment '商品id',
|
||||
specificationsId bigint not null comment '规格id',
|
||||
createTime datetime default CURRENT_TIMESTAMP not null comment '创建时间',
|
||||
updateTime datetime default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间',
|
||||
isDelete tinyint default 0 not null comment '是否删除',
|
||||
index idx_dishesId (commoditiesId),
|
||||
index idx_specificationsId (specificationsId)
|
||||
) comment '商品和规格的中间表' collate = utf8mb4_unicode_ci;
|
||||
|
||||
-- 规格表
|
||||
create table if not exists specifications
|
||||
(
|
||||
id bigint auto_increment comment 'id' primary key,
|
||||
businessId bigint not null comment '商家id',
|
||||
specificationsName varchar(128) not null comment '规格名称',
|
||||
createTime datetime default CURRENT_TIMESTAMP not null comment '创建时间',
|
||||
updateTime datetime default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间',
|
||||
isDelete tinyint default 0 not null comment '是否删除',
|
||||
index idx_businessId (businessId)
|
||||
) comment '规格表' collate = utf8mb4_unicode_ci;
|
||||
|
||||
-- 属性表
|
||||
create table if not exists attribute
|
||||
(
|
||||
id bigint auto_increment comment 'id' primary key,
|
||||
businessId bigint not null comment '商家id',
|
||||
specificationsId bigint not null comment '规格id',
|
||||
attributeName varchar(128) not null comment '属性名称',
|
||||
attributeStatus tinyint default 0 not null comment '属性状态:0在售,1停售',
|
||||
createTime datetime default CURRENT_TIMESTAMP not null comment '创建时间',
|
||||
updateTime datetime default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间',
|
||||
index idx_businessId (businessId)
|
||||
) comment '属性表' collate = utf8mb4_unicode_ci;
|
||||
|
||||
-- 购物车表
|
||||
create table if not exists cart
|
||||
(
|
||||
id bigint auto_increment comment 'id' primary key,
|
||||
userId bigint not null comment '用户id',
|
||||
businessId bigint not null comment '商家id',
|
||||
createTime datetime default CURRENT_TIMESTAMP not null comment '加入购物车时间',
|
||||
updateTime datetime default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间',
|
||||
commoditiesId bigint null comment '商品id',
|
||||
quantity int default 1 not null comment '商品数量',
|
||||
price decimal(10, 2) not null comment '当前选择规格的价格',
|
||||
subtotal decimal(10, 2) as ((`price` * `quantity`)) stored comment '小计(单价 * 数量)',
|
||||
selectedOptions varchar(512) default '' not null comment '已选规格属性列表',
|
||||
isDelete tinyint default 0 not null comment '是否删除',
|
||||
index idx_userId (userId),
|
||||
index idx_businessId (businessId)
|
||||
) comment '购物车表' collate = utf8mb4_unicode_ci;
|
||||
|
||||
-- 美甲师表
|
||||
create table if not exists manicurist
|
||||
(
|
||||
id BIGINT AUTO_INCREMENT COMMENT '美甲师唯一标识(主键,自增)' PRIMARY KEY,
|
||||
userId BIGINT not null comment '用户ID(关联用户表)',
|
||||
businessId bigint not null comment '商家id',
|
||||
name VARCHAR(100) not null comment '美甲师姓名',
|
||||
gender tinyint null comment '性别',
|
||||
manicuristAvatar VARCHAR(255) COMMENT '美甲师头像文件的存储路径或链接',
|
||||
phone VARCHAR(20) COMMENT '美甲师联系电话',
|
||||
email VARCHAR(100) COMMENT '美甲师电子邮件',
|
||||
employment_date DATE COMMENT '美甲师入职日期',
|
||||
specialties VARCHAR(255) comment '美甲师的专长(如法式美甲、彩绘等)',
|
||||
rating DECIMAL(3, 2) comment '美甲师的服务评分',
|
||||
salary DECIMAL(10, 2) comment '美甲师的基本薪资',
|
||||
manStatus int DEFAULT 0 comment'美甲师状态 0 表示正常 1 表示禁用',
|
||||
isDeleted TINYINT DEFAULT 0 comment '逻辑删除标志,0 表示未删除,1 表示已删除',
|
||||
createTime DATETIME DEFAULT CURRENT_TIMESTAMP not null comment '记录创建时间',
|
||||
updateTime DATETIME DEFAULT CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '记录更新时间',
|
||||
INDEX idx_userId (userId)
|
||||
) comment ='美甲师表' COLLATE = utf8mb4_unicode_ci;
|
||||
|
||||
create table if not exists manicurist_auth
|
||||
(
|
||||
id BIGINT AUTO_INCREMENT COMMENT '认证唯一标识(主键,自增)' PRIMARY KEY,
|
||||
artistId BIGINT not null comment '美甲师ID(关联美甲师表)',
|
||||
certification_number VARCHAR(100) COMMENT '认证编号',
|
||||
issuing_authority VARCHAR(100) COMMENT '发证机构',
|
||||
certificate_path VARCHAR(255) COMMENT '证书文件的存储路径或链接',
|
||||
createTime DATETIME default CURRENT_TIMESTAMP not null comment '记录创建时间',
|
||||
updateTime DATETIME default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '记录更新时间',
|
||||
isDeleted TINYINT default 0 comment '逻辑删除标志,0 表示未删除,1 表示已删除',
|
||||
INDEX idx_artistId (artistId)
|
||||
) comment ='美甲师认证表' COLLATE = utf8mb4_unicode_ci;
|
||||
|
||||
|
||||
ALTER TABLE manicurist ADD COLUMN manStatus INT DEFAULT 0;
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
package com.cj.jiaqingjiayi;
|
||||
|
||||
|
||||
import org.mybatis.spring.annotation.MapperScan;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
|
||||
@MapperScan("com.cj.jiaqingjiayi.mapper")
|
||||
@SpringBootApplication
|
||||
public class JiaqingjiayiApplication {
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(JiaqingjiayiApplication.class, args);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,49 @@
|
|||
package com.cj.jiaqingjiayi.common;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
*通用返回类
|
||||
*
|
||||
* @author wssb
|
||||
*/
|
||||
@Data
|
||||
public class BaseResponse<T> implements Serializable {
|
||||
/**
|
||||
* 状态码
|
||||
*/
|
||||
private int code;
|
||||
/**
|
||||
* 数据
|
||||
*/
|
||||
private T data;
|
||||
/**
|
||||
* 消息
|
||||
*/
|
||||
private String message;
|
||||
/**
|
||||
* 描述
|
||||
*/
|
||||
private String description;
|
||||
|
||||
public BaseResponse(int code, T data, String message, String description) {
|
||||
this.code = code;
|
||||
this.data = data;
|
||||
this.message = message;
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
public BaseResponse(int code, T data, String message) {
|
||||
this(code, data, message, "");
|
||||
}
|
||||
|
||||
public BaseResponse(int code, T data) {
|
||||
this(code, data, "", "");
|
||||
}
|
||||
|
||||
public BaseResponse(ErrorCode errorCode) {
|
||||
this(errorCode.getCode(), null , errorCode.getMessage(), errorCode.getDescription());
|
||||
}
|
||||
}
|
|
@ -0,0 +1,48 @@
|
|||
package com.cj.jiaqingjiayi.common;
|
||||
|
||||
|
||||
/**
|
||||
* 错误码
|
||||
*/
|
||||
public enum ErrorCode {
|
||||
|
||||
SUCCESS(0, "ok", ""),
|
||||
PARAMS_ERROR(40000, "请求参数错误", ""),
|
||||
NULL_ERROR(40001, "请求数据为空", ""),
|
||||
NOT_LOGIN(40100, "未登录", ""),
|
||||
NO_AUTH(40101, "无权限", ""),
|
||||
NOT_FOUND_ERROR(40400,"请求数据不存在",""),
|
||||
SYSTEM_ERROR(50000, "系统内部异常", ""),
|
||||
OPERATION_ERROR(50001, "操作失败", "");
|
||||
|
||||
/**
|
||||
* 状态码
|
||||
*/
|
||||
private final int code;
|
||||
/**
|
||||
* 状态码信息
|
||||
*/
|
||||
private final String message;
|
||||
/**
|
||||
* 状态码的详细描述
|
||||
*/
|
||||
private final String description;
|
||||
|
||||
ErrorCode(int code, String message, String description) {
|
||||
this.code = code;
|
||||
this.message = message;
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
public int getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
public String getMessage() {
|
||||
return message;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,65 @@
|
|||
package com.cj.jiaqingjiayi.common;
|
||||
|
||||
/**
|
||||
* 返回工具类
|
||||
*/
|
||||
public class ResultUtils {
|
||||
/**
|
||||
* 成功
|
||||
*
|
||||
* @param data
|
||||
* @param <T>
|
||||
* @return
|
||||
*/
|
||||
public static <T> BaseResponse<T> success(T data) {
|
||||
return new BaseResponse<>(0, data, "ok");
|
||||
}
|
||||
|
||||
public static <T> BaseResponse<T> success(T data, String message) {
|
||||
return new BaseResponse<>(0, data, message);
|
||||
}
|
||||
|
||||
/**
|
||||
* 失败
|
||||
*
|
||||
* @param errorCode
|
||||
* @return
|
||||
*/
|
||||
public static BaseResponse error(ErrorCode errorCode) {
|
||||
return new BaseResponse<>(errorCode);
|
||||
}
|
||||
|
||||
/**
|
||||
* 失败
|
||||
*
|
||||
* @param code
|
||||
* @param message
|
||||
* @param description
|
||||
* @return
|
||||
*/
|
||||
public static BaseResponse error(int code, String message, String description) {
|
||||
return new BaseResponse(code, null, message, description);
|
||||
}
|
||||
|
||||
/**
|
||||
* 失败
|
||||
*
|
||||
* @param errorCode
|
||||
* @return
|
||||
*/
|
||||
public static BaseResponse error(ErrorCode errorCode, String message, String description) {
|
||||
return new BaseResponse(errorCode.getCode(), null, message, description);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 失败
|
||||
*
|
||||
* @param errorCode
|
||||
* @return
|
||||
*/
|
||||
public static BaseResponse error(ErrorCode errorCode, String description) {
|
||||
return new BaseResponse(errorCode.getCode(), errorCode.getMessage(), description);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
package com.cj.jiaqingjiayi.config;
|
||||
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.web.servlet.config.annotation.CorsRegistry;
|
||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||
|
||||
/**
|
||||
* 全局跨域配置
|
||||
*
|
||||
*
|
||||
* @author bsz
|
||||
*/
|
||||
@Configuration
|
||||
public class CorsConfig implements WebMvcConfigurer {
|
||||
|
||||
@Override
|
||||
public void addCorsMappings(CorsRegistry registry) {
|
||||
// 覆盖所有请求
|
||||
registry.addMapping("/**")
|
||||
// 允许发送 Cookie
|
||||
.allowCredentials(true)
|
||||
// 放行哪些域名(必须用 patterns,否则 * 会和 allowCredentials 冲突)
|
||||
.allowedOriginPatterns("*")
|
||||
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
|
||||
.allowedHeaders("*")
|
||||
.exposedHeaders("*");
|
||||
}
|
||||
}
|
|
@ -0,0 +1,53 @@
|
|||
package com.cj.jiaqingjiayi.config;
|
||||
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.Profile;
|
||||
import springfox.documentation.builders.ApiInfoBuilder;
|
||||
import springfox.documentation.builders.PathSelectors;
|
||||
import springfox.documentation.builders.RequestHandlerSelectors;
|
||||
import springfox.documentation.service.ApiInfo;
|
||||
import springfox.documentation.service.Contact;
|
||||
import springfox.documentation.spi.DocumentationType;
|
||||
import springfox.documentation.spring.web.plugins.Docket;
|
||||
import springfox.documentation.swagger2.annotations.EnableSwagger2;
|
||||
|
||||
/**
|
||||
* @author bsz
|
||||
* Knife4j 接口文档配置
|
||||
*
|
||||
* http://localhost:8080/api/doc.html 接口文档地址
|
||||
*/
|
||||
@Configuration
|
||||
@EnableSwagger2
|
||||
@Profile({"dev", "test"}) //版本控制访问
|
||||
public class Knife4jConfig {
|
||||
@Bean
|
||||
public Docket defaultApi2() {
|
||||
return new Docket(DocumentationType.SWAGGER_2)
|
||||
.apiInfo(apiInfo())
|
||||
.select()
|
||||
// 指定 Controller 扫描包路径
|
||||
.apis(RequestHandlerSelectors.basePackage("com.cj.jiaqingjiayi.controller"))
|
||||
.paths(PathSelectors.any())
|
||||
.build();
|
||||
}
|
||||
/**
|
||||
* 自定义接口文档信息
|
||||
* @return 接口文档
|
||||
*/
|
||||
private ApiInfo apiInfo() {
|
||||
return new ApiInfoBuilder()
|
||||
// 接口文档的标题
|
||||
.title("甲情甲意")
|
||||
// 接口文档的描述信息
|
||||
.description("甲情甲意的接口文档,进行测试")
|
||||
// 提供服务的是谁?可以填写你自己的地址因为是你自己提供的服务
|
||||
.termsOfServiceUrl("https://www.bilibili.com/video/BV1W2421w78j/?spm_id_from=333.337.search-card.all.click")
|
||||
.contact(new Contact("gaomu", "https://account.bilibili.com/account/face/upload?spm_id_from=333.999.0.0", "1929829500@qq.com"))
|
||||
// 版本
|
||||
.version("1.0")
|
||||
// 构建
|
||||
.build();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
package com.cj.jiaqingjiayi.config;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.DbType;
|
||||
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
|
||||
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
|
||||
import org.mybatis.spring.annotation.MapperScan;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
/**
|
||||
* MyBatis Plus 配置
|
||||
*/
|
||||
@Configuration
|
||||
public class MyBatisPlusConfig {
|
||||
|
||||
/**
|
||||
* 拦截器配置
|
||||
*/
|
||||
@Bean
|
||||
public MybatisPlusInterceptor mybatisPlusInterceptor() {
|
||||
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
|
||||
// 分页插件
|
||||
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
|
||||
return interceptor;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
package com.cj.jiaqingjiayi.contant;
|
||||
|
||||
/**
|
||||
* 通用常量
|
||||
*/
|
||||
public interface CommonConstant {
|
||||
|
||||
/**
|
||||
* 升序
|
||||
*/
|
||||
String SORT_ORDER_ASC = "ascend";
|
||||
|
||||
/**
|
||||
* 降序
|
||||
*/
|
||||
String SORT_ORDER_DESC = " descend";
|
||||
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
package com.cj.jiaqingjiayi.contant;
|
||||
|
||||
/**
|
||||
* 正则表达式常量
|
||||
*/
|
||||
@SuppressWarnings("all")
|
||||
public interface RegexConstant {
|
||||
/**
|
||||
* 手机号正则
|
||||
*/
|
||||
String PHONE_REGEX = "^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\\d{8}$";
|
||||
|
||||
/**
|
||||
* 邮箱正则
|
||||
*/
|
||||
String EMAIL_REGEX = "^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$";
|
||||
|
||||
/**
|
||||
* 18位身份证号正则
|
||||
*/
|
||||
String ID_CARD_REGEX = "^[1-9]\\d{5}(18|19|([23]\\d))\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9xX]$";
|
||||
|
||||
/**
|
||||
* 验证码正则, 6位数字或字母
|
||||
*/
|
||||
String VERIFY_CODE_REGEX = "^[a-zA-Z\\d]{6}$";
|
||||
|
||||
/**
|
||||
* 密码正则。4~32位的字母、数字、下划线
|
||||
*/
|
||||
String PASSWORD_REGEX = "^\\w{4,32}$";
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
package com.cj.jiaqingjiayi.contant;
|
||||
|
||||
/**
|
||||
* 用户常量
|
||||
*/
|
||||
public interface UserConstant {
|
||||
|
||||
/**
|
||||
* 用户登录态键
|
||||
*/
|
||||
String USER_LOGIN_STATE = "userLoginState";
|
||||
|
||||
/**
|
||||
* 盐值
|
||||
*/
|
||||
String USER_SALT = "yctf";
|
||||
|
||||
// ------- 权限 --------
|
||||
|
||||
/**
|
||||
* 默认权限
|
||||
*/
|
||||
int DEFAULT_ROLE = 0;
|
||||
|
||||
|
||||
/**
|
||||
* 管理员权限
|
||||
*/
|
||||
int ADMIN_ROLE = 1;
|
||||
|
||||
}
|
|
@ -0,0 +1,110 @@
|
|||
package com.cj.jiaqingjiayi.controller;
|
||||
|
||||
|
||||
import com.alipay.api.AlipayApiException;
|
||||
import com.alipay.api.AlipayClient;
|
||||
import com.alipay.api.AlipayConfig;
|
||||
import com.alipay.api.DefaultAlipayClient;
|
||||
import com.alipay.api.request.AlipaySystemOauthTokenRequest;
|
||||
import com.alipay.api.request.AlipayUserInfoShareRequest;
|
||||
import com.alipay.api.response.AlipaySystemOauthTokenResponse;
|
||||
import com.alipay.api.response.AlipayUserInfoShareResponse;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.cj.jiaqingjiayi.common.BaseResponse;
|
||||
import com.cj.jiaqingjiayi.common.ErrorCode;
|
||||
import com.cj.jiaqingjiayi.common.ResultUtils;
|
||||
import com.cj.jiaqingjiayi.contant.UserConstant;
|
||||
import com.cj.jiaqingjiayi.mapper.UserMapper;
|
||||
import com.cj.jiaqingjiayi.model.domain.User;
|
||||
import com.cj.jiaqingjiayi.utils.RandomNumberGenerator;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.PrintWriter;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/Alipay")
|
||||
public class AlipayController {
|
||||
|
||||
|
||||
@Value("${alipay.appId}")
|
||||
public String appId;
|
||||
|
||||
@Value("${alipay.appPrivateKey}")
|
||||
public String appPrivateKey;
|
||||
|
||||
@Value("${alipay.alipayPublicKey}")
|
||||
public String PublicKey;
|
||||
|
||||
@Resource
|
||||
private UserMapper userMapper;
|
||||
|
||||
@Resource
|
||||
private RandomNumberGenerator randomNumberGenerator;
|
||||
|
||||
private static String authToken;
|
||||
|
||||
|
||||
/**
|
||||
* 解析code获取open_id和token
|
||||
* @return aaa
|
||||
* @throws AlipayApiException 支付宝api异常
|
||||
*/
|
||||
@GetMapping("/parseCode")
|
||||
public BaseResponse<User> login(String authcode, HttpServletRequest req) throws AlipayApiException {
|
||||
String privateKey = appPrivateKey;
|
||||
String alipayPublicKey = PublicKey;
|
||||
AlipayConfig alipayConfig = new AlipayConfig();
|
||||
//沙箱网关
|
||||
alipayConfig.setServerUrl("https://openapi-sandbox.dl.alipaydev.com/gateway.do");
|
||||
//支付宝网关
|
||||
alipayConfig.setServerUrl("https://openapi.alipay.com/gateway.do");
|
||||
alipayConfig.setAppId(appId);
|
||||
alipayConfig.setPrivateKey(privateKey);
|
||||
alipayConfig.setFormat("json");
|
||||
alipayConfig.setAlipayPublicKey(alipayPublicKey);
|
||||
alipayConfig.setCharset("UTF-8");
|
||||
alipayConfig.setSignType("RSA2");
|
||||
AlipayClient alipayClient = new DefaultAlipayClient(alipayConfig);
|
||||
AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();
|
||||
request.setCode(authcode);
|
||||
request.setGrantType("authorization_code");
|
||||
AlipaySystemOauthTokenResponse response = alipayClient.execute(request);
|
||||
// System.out.println(response.getBody());打印所有响应
|
||||
authToken = response.getAccessToken();
|
||||
if (!response.isSuccess()) {
|
||||
return ResultUtils.error(ErrorCode.PARAMS_ERROR);
|
||||
}
|
||||
AlipayUserInfoShareRequest request1 = new AlipayUserInfoShareRequest();
|
||||
AlipayUserInfoShareResponse response1 = alipayClient.execute(request1, authToken);
|
||||
User oid = userMapper.selectOne(new LambdaQueryWrapper<User>().eq(User::getOpenId, response.getOpenId()));
|
||||
if (response1.isSuccess()) {
|
||||
if (oid == null) {
|
||||
User user = new User();
|
||||
user.setOpenId(response.getOpenId());
|
||||
user.setUsername(StringUtils.isAnyBlank(response1.getNickName()) ? "随机名字" + randomNumberGenerator.generateRandomNumber() : response1.getNickName());
|
||||
user.setUserPassword("123456");
|
||||
user.setAvatarUrl(StringUtils.isAnyBlank(response1.getAvatar()) ? "https://tfs.alipayobjects.com/images/partner/ATuihpR50zu7UAAAAAAAAAAAAADtl2AA" : response1.getAvatar());
|
||||
userMapper.insert(user);
|
||||
req.getSession().setAttribute(UserConstant.USER_LOGIN_STATE,user);
|
||||
return ResultUtils.success(user,"注册成功");
|
||||
}
|
||||
req.getSession().setAttribute(UserConstant.USER_LOGIN_STATE,oid);
|
||||
return ResultUtils.success(oid,"登录成功");
|
||||
}
|
||||
req.getSession().setAttribute(UserConstant.USER_LOGIN_STATE,oid);
|
||||
return ResultUtils.success(oid,"登录成功");
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,185 @@
|
|||
package com.cj.jiaqingjiayi.controller;
|
||||
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.cj.jiaqingjiayi.common.BaseResponse;
|
||||
import com.cj.jiaqingjiayi.common.ErrorCode;
|
||||
import com.cj.jiaqingjiayi.common.ResultUtils;
|
||||
import com.cj.jiaqingjiayi.exception.BusinessException;
|
||||
import com.cj.jiaqingjiayi.exception.ThrowUtils;
|
||||
import com.cj.jiaqingjiayi.model.domain.Business;
|
||||
import com.cj.jiaqingjiayi.model.domain.BusinessAuth;
|
||||
import com.cj.jiaqingjiayi.model.domain.User;
|
||||
import com.cj.jiaqingjiayi.model.request.business.BusinessAddRequest;
|
||||
import com.cj.jiaqingjiayi.model.request.business.BusinessQueryRequest;
|
||||
import com.cj.jiaqingjiayi.model.request.business.BusinessUpdateRequest;
|
||||
import com.cj.jiaqingjiayi.model.vo.BusinessAdminVO;
|
||||
import com.cj.jiaqingjiayi.model.vo.BusinessVO;
|
||||
import com.cj.jiaqingjiayi.service.BusinessAuthService;
|
||||
import com.cj.jiaqingjiayi.service.BusinessService;
|
||||
import com.cj.jiaqingjiayi.service.UserService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.util.DigestUtils;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static com.cj.jiaqingjiayi.contant.UserConstant.USER_SALT;
|
||||
|
||||
/**
|
||||
* 商家接口
|
||||
*/
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequestMapping("/business")
|
||||
public class BusinessController {
|
||||
|
||||
@Resource
|
||||
private UserService userService;
|
||||
|
||||
@Resource
|
||||
private BusinessService businessService;
|
||||
|
||||
@Resource
|
||||
private BusinessAuthService businessAuthService;
|
||||
|
||||
@PostMapping("/add")
|
||||
public BaseResponse<Long> addBusiness(@RequestBody BusinessAddRequest businessAddRequest) {
|
||||
ThrowUtils.throwIf(businessAddRequest == null, ErrorCode.PARAMS_ERROR);
|
||||
|
||||
User user = new User();
|
||||
BeanUtils.copyProperties(businessAddRequest, user);
|
||||
Business business = new Business();
|
||||
BeanUtils.copyProperties(businessAddRequest, business);
|
||||
BusinessAuth businessAuth = new BusinessAuth();
|
||||
BeanUtils.copyProperties(businessAddRequest, businessAuth);
|
||||
|
||||
//对每个应该校验的业务进行校验
|
||||
businessService.validUser(user, true);
|
||||
businessService.validBusiness(business, true);
|
||||
businessService.validBusinessAuth(businessAuth, true);
|
||||
|
||||
//加密
|
||||
String encryptPassword = DigestUtils.md5DigestAsHex((USER_SALT + user.getUserPassword()).getBytes());
|
||||
user.setUserPassword(encryptPassword);
|
||||
|
||||
//更改用户权限为商家
|
||||
user.setUserRole(2);
|
||||
|
||||
//往user表中补充商家信息
|
||||
user.setUsername(business.getBusinessName());
|
||||
user.setAvatarUrl(business.getBusinessAvatar());
|
||||
user.setPhone(business.getBusinessPhone());
|
||||
|
||||
//插入到表中
|
||||
businessService.addBusiness(user, business, businessAuth);
|
||||
|
||||
return ResultUtils.success(business.getId(),"添加商家成功");
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 管理员更新商家
|
||||
* @param businessUpdateRequest
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/update")
|
||||
public BaseResponse<Boolean> updateBusiness (@RequestBody BusinessUpdateRequest businessUpdateRequest, HttpServletRequest request) {
|
||||
//判断是否为管理员
|
||||
userService.isAdmin(request);
|
||||
|
||||
if (businessUpdateRequest == null || businessUpdateRequest.getId() == null) {
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR, "传入参数为空");
|
||||
}
|
||||
|
||||
Business business = new Business();
|
||||
|
||||
BeanUtils.copyProperties(businessUpdateRequest, business);
|
||||
//更新不添加 只需要判断修改符不符合逻辑
|
||||
businessService.validBusiness(business, false);
|
||||
|
||||
boolean updateById = businessService.updateById(business);
|
||||
|
||||
ThrowUtils.throwIf(!updateById, ErrorCode.OPERATION_ERROR);
|
||||
|
||||
return ResultUtils.success(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据id查询
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
@GetMapping("/getById")
|
||||
public BaseResponse<BusinessAdminVO> getBusinessById(long id, HttpServletRequest request) {
|
||||
//判断是否为管理员
|
||||
userService.isAdmin(request);
|
||||
ThrowUtils.throwIf(id < 0, ErrorCode.NULL_ERROR);
|
||||
|
||||
//获取商家视图
|
||||
Business business = businessService.getById(id);
|
||||
ThrowUtils.throwIf(business == null , ErrorCode.PARAMS_ERROR, "id不符合规范");
|
||||
BusinessAdminVO businessAdminVO = businessAuthService.getBusinessAdminVO(business);
|
||||
|
||||
return ResultUtils.success(businessAdminVO);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询所有商家
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/list")
|
||||
public BaseResponse<List<Business>> listBusinessAll(){
|
||||
List<Business> businessList = businessService.list();
|
||||
return new BaseResponse<>(0,businessList,"查询成功");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 分页查询
|
||||
* @param businessQueryRequest
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/list/page")
|
||||
//@AuthCheck(mustRole = 1)
|
||||
public BaseResponse<Page<Business>> listBusinessByPage (@RequestBody BusinessQueryRequest businessQueryRequest) {
|
||||
Page<Business> businessPage = businessService.page(new Page<>(businessQueryRequest.getCurrent(), businessQueryRequest.getPageSize()),
|
||||
businessService.getQueryWrapper(businessQueryRequest));
|
||||
return ResultUtils.success(businessPage);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页获取商家列表(用户视图)
|
||||
*/
|
||||
@PostMapping("/list/page/vo")
|
||||
public BaseResponse<Page<BusinessVO>> listBusinessVOByPage(@RequestBody BusinessQueryRequest businessQueryRequest) {
|
||||
long current = businessQueryRequest.getCurrent();
|
||||
long size = businessQueryRequest.getPageSize();
|
||||
|
||||
ThrowUtils.throwIf(size > 20, ErrorCode.PARAMS_ERROR);
|
||||
QueryWrapper<Business> queryWrapper = businessService.getQueryWrapper(businessQueryRequest);
|
||||
// 只显示正常营业商家
|
||||
queryWrapper.eq("state", 1);
|
||||
Page<Business> businessPage = businessService.page(new Page<>(current, size), queryWrapper);
|
||||
Page<BusinessVO> businessVOPage = new Page<>(current, size, businessPage.getTotal());
|
||||
List<BusinessVO> businessVOList = businessService.getBusinessVO(businessPage.getRecords());
|
||||
businessVOPage.setRecords(businessVOList);
|
||||
return ResultUtils.success(businessVOPage);
|
||||
}
|
||||
|
||||
|
||||
@GetMapping("/current")
|
||||
public BaseResponse<BusinessVO> getLoginBusiness(HttpServletRequest request){
|
||||
//获取登录态
|
||||
Business business = businessService.getLoginBusiness(request);
|
||||
return ResultUtils.success(businessService.getBusinessVO(business));
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,197 @@
|
|||
package com.cj.jiaqingjiayi.controller;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
|
||||
import com.cj.jiaqingjiayi.common.BaseResponse;
|
||||
import com.cj.jiaqingjiayi.common.ErrorCode;
|
||||
import com.cj.jiaqingjiayi.common.ResultUtils;
|
||||
import com.cj.jiaqingjiayi.exception.BusinessException;
|
||||
import com.cj.jiaqingjiayi.exception.ThrowUtils;
|
||||
import com.cj.jiaqingjiayi.model.domain.Cart;
|
||||
import com.cj.jiaqingjiayi.model.domain.User;
|
||||
import com.cj.jiaqingjiayi.model.request.cart.CartAddRequest;
|
||||
import com.cj.jiaqingjiayi.model.request.cart.CartDeleteRequest;
|
||||
import com.cj.jiaqingjiayi.model.request.cart.CartQueryRequest;
|
||||
import com.cj.jiaqingjiayi.model.request.cart.CartUpdateRequest;
|
||||
import com.cj.jiaqingjiayi.model.vo.CartVO;
|
||||
import com.cj.jiaqingjiayi.service.CartService;
|
||||
import com.cj.jiaqingjiayi.service.UserService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
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 javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@RestController
|
||||
@Slf4j
|
||||
@RequestMapping("/cart")
|
||||
public class CartController {
|
||||
|
||||
@Resource
|
||||
private CartService cartService;
|
||||
|
||||
@Resource
|
||||
private UserService userService;
|
||||
|
||||
/**
|
||||
* 添加进购物车
|
||||
* @param cartAddRequest 添加请求
|
||||
* @param request 网络请求
|
||||
* @return 购物车id
|
||||
*/
|
||||
@PostMapping("/add")
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public BaseResponse<Long> addCart (@RequestBody CartAddRequest cartAddRequest, HttpServletRequest request) {
|
||||
if (cartAddRequest == null) {
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR);
|
||||
}
|
||||
|
||||
//校验
|
||||
cartService.validCart(cartAddRequest);
|
||||
//添加菜品到购物车
|
||||
Long cart = cartService.addCart(cartAddRequest, request);
|
||||
return ResultUtils.success(cart);
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新购物车
|
||||
* @param cartUpdateRequest 更新请求
|
||||
* @param request 网络请求
|
||||
* @return 是否成功
|
||||
*/
|
||||
@PostMapping("/update")
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public BaseResponse<Boolean> updateCart (@RequestBody CartUpdateRequest cartUpdateRequest, HttpServletRequest request){
|
||||
if (cartUpdateRequest == null) {
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR);
|
||||
}
|
||||
//校验
|
||||
CartAddRequest cartAddRequest = new CartAddRequest();
|
||||
BeanUtils.copyProperties(cartUpdateRequest,cartAddRequest);
|
||||
cartService.validCart(cartAddRequest);
|
||||
|
||||
Boolean cart = cartService.updateCart(cartUpdateRequest, request);
|
||||
return ResultUtils.success(cart);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除购物车
|
||||
* @param cartDeleteRequest 删除请求
|
||||
* @param request 网络请求
|
||||
* @return 是否成功
|
||||
*/
|
||||
@PostMapping("/delete")
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public BaseResponse<Boolean> deleteCart (@RequestBody CartDeleteRequest cartDeleteRequest, HttpServletRequest request) {
|
||||
if (cartDeleteRequest == null) {
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR);
|
||||
}
|
||||
|
||||
Long id = cartDeleteRequest.getId();
|
||||
Boolean cart = cartService.deleteCart(id, request);
|
||||
ThrowUtils.throwIf(!cart, ErrorCode.OPERATION_ERROR);
|
||||
return ResultUtils.success(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据商户id获取购物车脱敏列表
|
||||
* @param cartQueryRequest 商户id
|
||||
* @param request 网络请求
|
||||
* @return 脱敏列表
|
||||
*/
|
||||
@PostMapping("/selectByBusinessId")
|
||||
public BaseResponse<List<CartVO>> selectByBusinessId (@RequestBody CartQueryRequest cartQueryRequest, HttpServletRequest request) {
|
||||
if (cartQueryRequest == null) {
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR);
|
||||
}
|
||||
|
||||
Long businessId = cartQueryRequest.getId();
|
||||
User loginUser = userService.getLogingUser(request);
|
||||
Long userId = loginUser.getId();
|
||||
LambdaQueryWrapper<Cart> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(Cart::getBusinessId, businessId);
|
||||
queryWrapper.eq(Cart::getUserId, userId);
|
||||
List<Cart> cartList = cartService.list(queryWrapper);
|
||||
List<CartVO> cartVOList = this.getCartVOList(cartList);
|
||||
return ResultUtils.success(cartVOList);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据用户查找购物车列表
|
||||
* @param request 网络请求
|
||||
* @return 脱敏列表
|
||||
*/
|
||||
@PostMapping("/selectByUserId")
|
||||
public BaseResponse<List<CartVO>> selectByUserId (HttpServletRequest request) {
|
||||
User loginUser = userService.getLogingUser(request);
|
||||
Long userId = loginUser.getId();
|
||||
LambdaQueryWrapper<Cart> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(Cart::getUserId, userId);
|
||||
|
||||
List<Cart> cartList = cartService.list(wrapper);
|
||||
List<CartVO> cartVOList = this.getCartVOList(cartList);
|
||||
return ResultUtils.success(cartVOList);
|
||||
}
|
||||
|
||||
/**
|
||||
* 清空商家内的购物车
|
||||
* @param cartQueryRequest 商家id
|
||||
* @param request 网络请求
|
||||
* @return 是否成功
|
||||
*/
|
||||
@PostMapping("/empty/business")
|
||||
public BaseResponse<Boolean> emptyBusinessCart(@RequestBody CartQueryRequest cartQueryRequest, HttpServletRequest request) {
|
||||
if (cartQueryRequest == null) {
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR);
|
||||
}
|
||||
|
||||
Long businessId = cartQueryRequest.getId();
|
||||
User loginUser = userService.getLogingUser(request);
|
||||
Long userId = loginUser.getId();
|
||||
LambdaQueryWrapper<Cart> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(Cart::getBusinessId, businessId);
|
||||
queryWrapper.eq(Cart::getUserId, userId);
|
||||
boolean remove = cartService.remove(queryWrapper);
|
||||
ThrowUtils.throwIf(!remove, ErrorCode.OPERATION_ERROR);
|
||||
|
||||
return ResultUtils.success(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* 清空用户购物车
|
||||
* @param request 网络请求
|
||||
* @return 是否成功
|
||||
*/
|
||||
@PostMapping("/empty/user")
|
||||
public BaseResponse<Boolean> emptyUserCart(HttpServletRequest request) {
|
||||
User loginUser = userService.getLogingUser(request);
|
||||
Long userId = loginUser.getId();
|
||||
LambdaQueryWrapper<Cart> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(Cart::getUserId, userId);
|
||||
boolean remove = cartService.remove(queryWrapper);
|
||||
ThrowUtils.throwIf(!remove, ErrorCode.OPERATION_ERROR);
|
||||
|
||||
return ResultUtils.success(true);
|
||||
}
|
||||
|
||||
private List<CartVO> getCartVOList(List<Cart> cartList) {
|
||||
if (CollectionUtils.isEmpty(cartList)) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
return cartList.stream().map(item ->{
|
||||
CartVO cartVO = new CartVO();
|
||||
BeanUtils.copyProperties(item, cartVO);
|
||||
return cartVO;
|
||||
}).collect(Collectors.toList());
|
||||
}
|
||||
}
|
|
@ -0,0 +1,185 @@
|
|||
package com.cj.jiaqingjiayi.controller;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.cj.jiaqingjiayi.common.BaseResponse;
|
||||
import com.cj.jiaqingjiayi.common.ErrorCode;
|
||||
import com.cj.jiaqingjiayi.common.ResultUtils;
|
||||
import com.cj.jiaqingjiayi.exception.BusinessException;
|
||||
import com.cj.jiaqingjiayi.exception.ThrowUtils;
|
||||
import com.cj.jiaqingjiayi.model.domain.Business;
|
||||
import com.cj.jiaqingjiayi.model.domain.Commodities;
|
||||
import com.cj.jiaqingjiayi.model.domain.User;
|
||||
import com.cj.jiaqingjiayi.model.request.Commodities.CommoditiesAddRequest;
|
||||
import com.cj.jiaqingjiayi.model.request.Commodities.CommoditiesDeleteRequest;
|
||||
import com.cj.jiaqingjiayi.model.request.Commodities.CommoditiesQueryRequest;
|
||||
import com.cj.jiaqingjiayi.model.request.Commodities.CommoditiesUpdateRequest;
|
||||
import com.cj.jiaqingjiayi.model.vo.BusinessVO;
|
||||
import com.cj.jiaqingjiayi.model.vo.CommoditiesVO;
|
||||
import com.cj.jiaqingjiayi.model.vo.LoginUserVO;
|
||||
import com.cj.jiaqingjiayi.service.BusinessService;
|
||||
import com.cj.jiaqingjiayi.service.CommoditiesService;
|
||||
import com.cj.jiaqingjiayi.service.SpecificationsCommoditiesService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.util.List;
|
||||
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequestMapping("/commodities")
|
||||
public class CommoditiesController {
|
||||
|
||||
@Resource
|
||||
private CommoditiesService commoditiesService;
|
||||
|
||||
@Resource
|
||||
private BusinessService businessService;
|
||||
|
||||
@Resource
|
||||
private SpecificationsCommoditiesService specificationsCommoditiesService;
|
||||
|
||||
|
||||
/**
|
||||
*添加商品
|
||||
* @param commoditiesAddRequest 添加商品请求体
|
||||
* @return 是否成功
|
||||
*/
|
||||
@PostMapping("/add")
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public BaseResponse<Boolean> addCommodities (@RequestBody CommoditiesAddRequest commoditiesAddRequest, HttpServletRequest request) {
|
||||
if (commoditiesAddRequest == null) {
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR);
|
||||
}
|
||||
Commodities commodities = new Commodities();
|
||||
BeanUtils.copyProperties(commoditiesAddRequest,commodities);
|
||||
//校验
|
||||
commoditiesService.validCommodities(commodities,false);
|
||||
//添加商家id
|
||||
Business loginBusiness = businessService.getLoginBusiness(request);
|
||||
Long businessId = loginBusiness.getId();
|
||||
commodities.setBusinessId(businessId);
|
||||
//保存商品信息
|
||||
Long commoditiesId = commoditiesService.addCommodities(commodities);
|
||||
//中间表中添加数据
|
||||
List<Long> specificationsIds = commoditiesAddRequest.getSpecificationsIds();
|
||||
specificationsCommoditiesService.add(commoditiesId,specificationsIds);
|
||||
return ResultUtils.success(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除商品
|
||||
* @param commoditiesDeleteRequest 删除请求
|
||||
* @param request 网络请求
|
||||
* @return 是否成功
|
||||
*/
|
||||
@PostMapping("/delete")
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public BaseResponse<Boolean> deleteCommodities(@RequestBody CommoditiesDeleteRequest commoditiesDeleteRequest, HttpServletRequest request) {
|
||||
if (commoditiesDeleteRequest == null) {
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR);
|
||||
}
|
||||
Long commoditiesId = commoditiesDeleteRequest.getId();
|
||||
//获取商家id
|
||||
Business business = businessService.getLoginBusiness(request);
|
||||
Long businessId = business.getId();
|
||||
//校验商品是不是当前登录商家的
|
||||
LambdaQueryWrapper<Commodities> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(Commodities::getId, commoditiesId);
|
||||
wrapper.eq(Commodities::getBusinessId, businessId);
|
||||
Commodities commodities = commoditiesService.getOne(wrapper);
|
||||
ThrowUtils.throwIf(commodities == null, ErrorCode.OPERATION_ERROR, "当前商家无权限删除该商品");
|
||||
//删除商品
|
||||
boolean commoditiesRemove = commoditiesService.removeById(commoditiesId);
|
||||
ThrowUtils.throwIf(!commoditiesRemove, ErrorCode.OPERATION_ERROR);
|
||||
//删除中间表信息
|
||||
specificationsCommoditiesService.deleteByCommoditiesId(commoditiesId);
|
||||
return ResultUtils.success(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新商品
|
||||
* @param commoditiesUpdateRequest 更新请求
|
||||
* @param request 网络请求
|
||||
* @return 是否成功
|
||||
*/
|
||||
@PostMapping("/update")
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public BaseResponse<Boolean> updateCommodities (@RequestBody CommoditiesUpdateRequest commoditiesUpdateRequest, HttpServletRequest request) {
|
||||
if (commoditiesUpdateRequest == null) {
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR);
|
||||
}
|
||||
Commodities commodities = new Commodities();
|
||||
BeanUtils.copyProperties(commoditiesUpdateRequest, commodities);
|
||||
//校验
|
||||
commoditiesService.validCommodities(commodities, true);
|
||||
//添加商家id
|
||||
Business loginBusiness = businessService.getLoginBusiness(request);
|
||||
Long businessId = loginBusiness.getId();
|
||||
commodities.setBusinessId(businessId);
|
||||
//更新商品
|
||||
Boolean updateDishes = commoditiesService.updateCommodities(commodities);
|
||||
ThrowUtils.throwIf(!updateDishes, ErrorCode.OPERATION_ERROR);
|
||||
//更新中间表的信息
|
||||
Long commoditiesId = commodities.getId();
|
||||
List<Long> specificationsIds = commoditiesUpdateRequest.getSpecificationsIds();
|
||||
return ResultUtils.success(specificationsCommoditiesService.updateByCommoditiesId(commoditiesId, specificationsIds));
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新商品状态
|
||||
* @param commoditiesUpdateRequest 商品请求体
|
||||
* @param request 前端请求
|
||||
* @return 是否成功
|
||||
*/
|
||||
@PostMapping("/update/status")
|
||||
public BaseResponse<Boolean> updateCommoditiesStatus (@RequestBody CommoditiesUpdateRequest commoditiesUpdateRequest, HttpServletRequest request) {
|
||||
Long id = commoditiesUpdateRequest.getId();
|
||||
String status = commoditiesUpdateRequest.getStatus();
|
||||
if (id == null || StringUtils.isBlank(status)) {
|
||||
throw new BusinessException(ErrorCode.NOT_FOUND_ERROR);
|
||||
}
|
||||
|
||||
//获取商家id
|
||||
Business loginBusiness = businessService.getLoginBusiness(request);
|
||||
Long businessId = loginBusiness.getId();
|
||||
//更新状态
|
||||
UpdateWrapper<Commodities> updateWrapper = new UpdateWrapper<>();
|
||||
updateWrapper.eq("id",id);
|
||||
updateWrapper.eq("businessId",businessId);
|
||||
updateWrapper.set("status",status);
|
||||
return ResultUtils.success(commoditiesService.update(updateWrapper));
|
||||
}
|
||||
|
||||
/**
|
||||
*获取商品脱敏列表
|
||||
* @param commoditiesQueryRequest 查询请求体
|
||||
* @return 分页列表
|
||||
*/
|
||||
@PostMapping("/list/page/commoditiesVO")
|
||||
public BaseResponse<Page<CommoditiesVO>> commoditiesVOPage(@RequestBody CommoditiesQueryRequest commoditiesQueryRequest) {
|
||||
long current = commoditiesQueryRequest.getCurrent();
|
||||
long pageSize = commoditiesQueryRequest.getPageSize();
|
||||
//获取查询条件
|
||||
QueryWrapper<Commodities> wrapper = commoditiesService.getWrapper(commoditiesQueryRequest);
|
||||
//获取商家多有商品
|
||||
Page<Commodities> commoditiesPage = commoditiesService.page(new Page<>(current, pageSize), wrapper);
|
||||
//获取脱敏信息列表
|
||||
List<Commodities> commoditiesList = commoditiesPage.getRecords();
|
||||
long total = commoditiesPage.getTotal();
|
||||
List<CommoditiesVO> commoditiesVOList = commoditiesService.getCommoditiesVOList(commoditiesList);
|
||||
Page<CommoditiesVO> commoditiesVOPage = new Page<>(current, pageSize, total);
|
||||
commoditiesVOPage.setRecords(commoditiesVOList);
|
||||
return ResultUtils.success(commoditiesVOPage);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,168 @@
|
|||
package com.cj.jiaqingjiayi.controller;
|
||||
|
||||
import com.cj.jiaqingjiayi.common.BaseResponse;
|
||||
import com.cj.jiaqingjiayi.common.ErrorCode;
|
||||
import com.cj.jiaqingjiayi.common.ResultUtils;
|
||||
import com.cj.jiaqingjiayi.exception.BusinessException;
|
||||
import com.cj.jiaqingjiayi.exception.ThrowUtils;
|
||||
import com.cj.jiaqingjiayi.model.domain.*;
|
||||
import com.cj.jiaqingjiayi.model.request.manicurist.ManicuristAddRequest;
|
||||
import com.cj.jiaqingjiayi.model.request.manicurist.ManicuristUpdateRequest;
|
||||
import com.cj.jiaqingjiayi.model.request.manicurist.MyManicuristUpdateRequest;
|
||||
import com.cj.jiaqingjiayi.service.ManicuristService;
|
||||
import com.cj.jiaqingjiayi.service.UserService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.util.DigestUtils;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static com.cj.jiaqingjiayi.contant.UserConstant.USER_SALT;
|
||||
|
||||
@RestController
|
||||
@Slf4j
|
||||
@RequestMapping("/manicurist")
|
||||
public class ManicuristController {
|
||||
|
||||
@Resource
|
||||
private ManicuristService manicuristService;
|
||||
|
||||
@Resource
|
||||
private UserService userService;
|
||||
|
||||
|
||||
/**
|
||||
* 添加美甲师
|
||||
* @param manicuristAddRequest
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/add")
|
||||
public BaseResponse<Long> addManicurist(@RequestBody ManicuristAddRequest manicuristAddRequest,HttpServletRequest request) {
|
||||
//判断是否为管理员
|
||||
userService.isAdmin(request);
|
||||
|
||||
ThrowUtils.throwIf(manicuristAddRequest == null, ErrorCode.PARAMS_ERROR);
|
||||
|
||||
User user = new User();
|
||||
BeanUtils.copyProperties(manicuristAddRequest, user);
|
||||
Manicurist manicurist = new Manicurist();
|
||||
BeanUtils.copyProperties(manicuristAddRequest, manicurist);
|
||||
ManicuristAuth manicuristAuth = new ManicuristAuth();
|
||||
BeanUtils.copyProperties(manicuristAddRequest, manicuristAuth);
|
||||
|
||||
//对每个应该校验的业务进行校验
|
||||
manicuristService.validUser(user, true);
|
||||
manicuristService.validManicurist(manicurist, true);
|
||||
manicuristService.validManicuristAuth(manicuristAuth, true);
|
||||
|
||||
//加密
|
||||
String encryptPassword = DigestUtils.md5DigestAsHex((USER_SALT + user.getUserPassword()).getBytes());
|
||||
user.setUserPassword(encryptPassword);
|
||||
|
||||
//更改用户权限为美甲师
|
||||
user.setUserRole(3);
|
||||
|
||||
//往user表中补充美甲师信息
|
||||
user.setUsername(manicurist.getName());
|
||||
user.setAvatarUrl(manicurist.getManicuristAvatar());
|
||||
user.setPhone(manicurist.getPhone());
|
||||
|
||||
//插入到表中
|
||||
manicuristService.addManicurist(user, manicurist, manicuristAuth);
|
||||
|
||||
return ResultUtils.success(manicurist.getId(),"添加美甲师成功");
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除美甲师
|
||||
*/
|
||||
@PostMapping("/deleteMan")
|
||||
public BaseResponse<Boolean> DeleteManicurist(long id, HttpServletRequest request){
|
||||
//判断是否为管理员
|
||||
userService.isAdmin(request);
|
||||
|
||||
manicuristService.deleteMan(id);
|
||||
return ResultUtils.success(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* 管理员修改美甲师信息
|
||||
* 确认一定会传入美甲师的id?
|
||||
*/
|
||||
@PostMapping("/update")
|
||||
public BaseResponse<Boolean> UpdateManicurist(@RequestBody ManicuristUpdateRequest manicuristUpdateRequest, HttpServletRequest request){
|
||||
//判断是否为管理员
|
||||
userService.isAdmin(request);
|
||||
|
||||
if (manicuristUpdateRequest == null || manicuristUpdateRequest.getId() == null) {
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR, "传入参数为空");
|
||||
}
|
||||
|
||||
Manicurist manicurist = new Manicurist();
|
||||
|
||||
if(manicuristUpdateRequest.getBusinessId() != null){
|
||||
//检验美甲师绑定的商家是否存在
|
||||
manicuristService.validManBus(manicuristUpdateRequest.getBusinessId());
|
||||
}
|
||||
|
||||
//校验一下
|
||||
manicuristService.validManicurist(manicurist, false);
|
||||
|
||||
BeanUtils.copyProperties(manicuristUpdateRequest, manicurist);
|
||||
|
||||
boolean result = manicuristService.updateById(manicurist);
|
||||
ThrowUtils.throwIf(!result, ErrorCode.OPERATION_ERROR);
|
||||
return ResultUtils.success(true, "修改成功");
|
||||
}
|
||||
|
||||
/**
|
||||
*美甲师修改个人信息
|
||||
*/
|
||||
@PostMapping("/myUpdate")
|
||||
public BaseResponse<Boolean> MyUpdateManicurist(@RequestBody MyManicuristUpdateRequest myUpdateRequest, HttpServletRequest request){
|
||||
ThrowUtils.throwIf(myUpdateRequest == null, ErrorCode.NULL_ERROR);
|
||||
|
||||
User logingUser = userService.getLogingUser(request);
|
||||
|
||||
Manicurist manicuristLog = manicuristService.getById(logingUser);
|
||||
Long manId = manicuristLog.getId();
|
||||
|
||||
Manicurist manicurist = new Manicurist();
|
||||
BeanUtils.copyProperties(myUpdateRequest, manicurist);
|
||||
manicuristService.validManicurist(manicurist, false);
|
||||
manicurist.setId(manId);
|
||||
|
||||
boolean result = manicuristService.updateById(manicurist);
|
||||
ThrowUtils.throwIf(!result, ErrorCode.OPERATION_ERROR, "修改失败");
|
||||
return ResultUtils.success(true, "修改成功");
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据id查询美甲师(管理员)
|
||||
*/
|
||||
@GetMapping("/queryById")
|
||||
public BaseResponse<Manicurist> QueryByIdManicurist(long manicuristId, HttpServletRequest request){
|
||||
userService.isAdmin(request);
|
||||
|
||||
ThrowUtils.throwIf(manicuristId < 0, ErrorCode.NULL_ERROR, "id不符合规范");
|
||||
Manicurist manicurist = manicuristService.getById(manicuristId);
|
||||
ThrowUtils.throwIf(manicurist == null, ErrorCode.PARAMS_ERROR, "美甲师不存在");
|
||||
|
||||
return ResultUtils.success(manicurist);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询全部美甲师(管理员)
|
||||
*/
|
||||
@PostMapping("/queryAll")
|
||||
public BaseResponse<List<Manicurist>> QueryAllManicurist(HttpServletRequest request){
|
||||
userService.isAdmin(request);
|
||||
|
||||
List<Manicurist> manicuristList = manicuristService.list();
|
||||
return ResultUtils.success(manicuristList);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,352 @@
|
|||
package com.cj.jiaqingjiayi.controller;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.cj.jiaqingjiayi.common.BaseResponse;
|
||||
import com.cj.jiaqingjiayi.common.ErrorCode;
|
||||
import com.cj.jiaqingjiayi.common.ResultUtils;
|
||||
import com.cj.jiaqingjiayi.exception.BusinessException;
|
||||
import com.cj.jiaqingjiayi.mapper.UserMapper;
|
||||
import com.cj.jiaqingjiayi.model.domain.User;
|
||||
import com.cj.jiaqingjiayi.model.request.user.*;
|
||||
import com.cj.jiaqingjiayi.model.vo.LoginUserVO;
|
||||
import com.cj.jiaqingjiayi.service.UserService;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.util.DigestUtils;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static com.cj.jiaqingjiayi.contant.UserConstant.*;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/user")
|
||||
public class UserController {
|
||||
|
||||
@Resource
|
||||
private UserService userService;
|
||||
|
||||
@Resource
|
||||
private UserMapper userMapper;
|
||||
|
||||
/**
|
||||
* 用户注册请求接口
|
||||
*
|
||||
* @param userRegisterRequest
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/register")
|
||||
public BaseResponse<Long> userRegister(@RequestBody UserRegisterRequest userRegisterRequest) {
|
||||
if (userRegisterRequest == null){
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR, "请求参数为空");
|
||||
}
|
||||
|
||||
String userAccount = userRegisterRequest.getUserAccount();
|
||||
String userPassword = userRegisterRequest.getUserPassword();
|
||||
String checkPassword = userRegisterRequest.getCheckPassword();
|
||||
|
||||
if (StringUtils.isAllBlank(userAccount, userPassword, checkPassword)) {
|
||||
return ResultUtils.error(ErrorCode.PARAMS_ERROR);
|
||||
}
|
||||
|
||||
long result = userService.userRegister(userAccount, userPassword, checkPassword);
|
||||
return ResultUtils.success(result);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 用户登录请求接口
|
||||
*
|
||||
* @param userLoginRequest
|
||||
* @param request 前端请求对象
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/login")
|
||||
public BaseResponse<LoginUserVO> userLogin(@RequestBody UserLoginRequest userLoginRequest, HttpServletRequest request) {
|
||||
if (userLoginRequest == null) {
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR, "请求参数为空");
|
||||
}
|
||||
|
||||
String userAccount = userLoginRequest.getUserAccount();
|
||||
String userPassword = userLoginRequest.getUserPassword();
|
||||
|
||||
if (StringUtils.isAllBlank(userAccount, userPassword)){
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR, "请求参数为空");
|
||||
}
|
||||
|
||||
LoginUserVO loginUserVO = userService.userLogin(userAccount, userPassword, request);
|
||||
return ResultUtils.success(loginUserVO);
|
||||
}
|
||||
|
||||
/**
|
||||
* 用户注销接口
|
||||
* @param request
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/logout")
|
||||
public BaseResponse<Integer> userLogout(HttpServletRequest request) {
|
||||
if (request == null) {
|
||||
throw new BusinessException(ErrorCode.NULL_ERROR, "传入参数为空");
|
||||
}
|
||||
int result = userService.userLogout(request);
|
||||
return ResultUtils.success(result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询用户(管理员)
|
||||
* @param searchRequest
|
||||
* @param request
|
||||
* @return
|
||||
*/
|
||||
@GetMapping("/search")
|
||||
public BaseResponse<List<User>> searchUsers(UserSearchRequest searchRequest, HttpServletRequest request){
|
||||
//判断是否为管理员
|
||||
userService.isAdmin(request);
|
||||
|
||||
String username = searchRequest.getUsername();
|
||||
String userAccount = searchRequest.getUserAccount();
|
||||
Integer gender = searchRequest.getGender();
|
||||
String phone = searchRequest.getPhone();
|
||||
String email = searchRequest.getEmail();
|
||||
Integer userStatus = searchRequest.getUserStatus();
|
||||
Integer userRole = searchRequest.getUserRole();
|
||||
Date updateTime = searchRequest.getUpdateTime();
|
||||
Date createTime = searchRequest.getCreateTime();
|
||||
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
|
||||
|
||||
//校验
|
||||
// username
|
||||
if (StringUtils.isNotBlank(username)) {
|
||||
queryWrapper.like("username", username);
|
||||
}
|
||||
// userAccount
|
||||
if (StringUtils.isNotBlank(userAccount)) {
|
||||
queryWrapper.like("userAccount", userAccount);
|
||||
}
|
||||
// gender
|
||||
if (gender != null) {
|
||||
queryWrapper.eq("gender", gender);
|
||||
}
|
||||
// phone
|
||||
if (StringUtils.isNotBlank(phone)) {
|
||||
queryWrapper.like("phone", phone);
|
||||
}
|
||||
// email
|
||||
if (StringUtils.isNotBlank(email)) {
|
||||
queryWrapper.like("email", email);
|
||||
}
|
||||
// userStatus
|
||||
if (userStatus != null) {
|
||||
queryWrapper.eq("userStates", userStatus);
|
||||
}
|
||||
|
||||
//userRole
|
||||
if (userRole != null) {
|
||||
queryWrapper.eq("userRole", userRole);
|
||||
}
|
||||
|
||||
|
||||
if (updateTime != null) {
|
||||
queryWrapper.like("updateTime", updateTime);
|
||||
}
|
||||
if (createTime != null) {
|
||||
queryWrapper.like("createTime", createTime);
|
||||
}
|
||||
|
||||
if(StringUtils.isNotBlank(username)){
|
||||
queryWrapper.like("username", username);
|
||||
}
|
||||
List<User> userList = userService.list(queryWrapper);
|
||||
List<User> users = userList.stream().map(userService::getSafetyUser).collect(Collectors.toList());
|
||||
|
||||
//用户脱敏
|
||||
return ResultUtils.success(users);
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页获取用户列表(仅管理员)
|
||||
*
|
||||
* @return 用户列表
|
||||
*/
|
||||
@PostMapping("/list/page")
|
||||
public BaseResponse<Page<User>> listUserByPage(@RequestBody UserSearchRequest userSearchRequest, HttpServletRequest request) {
|
||||
//判断是否为管理员
|
||||
userService.isAdmin(request);
|
||||
long current = userSearchRequest.getCurrent();
|
||||
long size = userSearchRequest.getPageSize();
|
||||
Page<User> userPage = userService.page(new Page<>(current, size),
|
||||
userService.getQueryWrapper(userSearchRequest));
|
||||
return ResultUtils.success(userPage);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除用户(管理员)
|
||||
* @param deleteRequest
|
||||
* @param request
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/delete")
|
||||
public BaseResponse<Boolean> deleteUser(@RequestBody UserDeleteRequest deleteRequest, HttpServletRequest request){
|
||||
//判断是否为管理员
|
||||
userService.isAdmin(request);
|
||||
if(deleteRequest == null || deleteRequest.getId() <= 0){
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR, "id不合法");
|
||||
}
|
||||
boolean removeUser = userService.removeById(deleteRequest.getId());
|
||||
return ResultUtils.success(removeUser);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前登录的用户信息
|
||||
* @param request
|
||||
* @return
|
||||
*/
|
||||
@GetMapping("/current")
|
||||
public BaseResponse<LoginUserVO> getLoginUser(HttpServletRequest request){
|
||||
//获取登录态
|
||||
User user = userService.getLogingUser(request);
|
||||
return ResultUtils.success(userService.getLoginUserVO(user));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据id获取用户(管理员)
|
||||
* @param id
|
||||
* @param request
|
||||
* @return
|
||||
*/
|
||||
@GetMapping("/getById")
|
||||
public BaseResponse<User> getUserById(long id, HttpServletRequest request){
|
||||
//判断是否为管理员
|
||||
userService.isAdmin(request);
|
||||
if(id < 0){
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR, "id不符合规范");
|
||||
}
|
||||
User user = userService.getById(id);
|
||||
if(user == null){
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR, "用户不存在");
|
||||
}
|
||||
return ResultUtils.success(user);
|
||||
}
|
||||
|
||||
/**
|
||||
* 用户修改密码
|
||||
* @param updatePasswordRequest
|
||||
* @param request
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/password/update")
|
||||
public BaseResponse<Boolean> updateUserPassword(@RequestBody UserUpdatePasswordRequest updatePasswordRequest,
|
||||
HttpServletRequest request){
|
||||
boolean update = userService.updateUserPassword(updatePasswordRequest, request);
|
||||
if(update){
|
||||
return ResultUtils.success(true);
|
||||
} else {
|
||||
return ResultUtils.error(ErrorCode.OPERATION_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加用户(管理员)
|
||||
* @param userAddRequest
|
||||
* @param request
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/add")
|
||||
public BaseResponse<Long> addUser(@RequestBody UserAddRequest userAddRequest, HttpServletRequest request){
|
||||
//判断是否为管理员
|
||||
userService.isAdmin(request);
|
||||
if(userAddRequest == null){
|
||||
throw new BusinessException(ErrorCode.NULL_ERROR,"传入数据为空");
|
||||
}
|
||||
User user = new User();
|
||||
String userAccount = userAddRequest.getUserAccount();
|
||||
String userPassword = userAddRequest.getUserPassword();
|
||||
if(StringUtils.isAnyBlank(userAccount, userPassword)){
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR, "未输入账号密码");
|
||||
}
|
||||
|
||||
if(userAccount.length() < 4){
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR, "用户账号过短");
|
||||
}
|
||||
|
||||
//判断密码是否小于6
|
||||
if(userPassword.length() < 6){
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR, "密码过短");
|
||||
}
|
||||
//判断是否有特殊字符
|
||||
String validPattern = "[`~!@#$%^&*()+=|{}':;',\\\\[\\\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]";
|
||||
|
||||
Matcher matcher = Pattern.compile(validPattern).matcher(userAccount);
|
||||
|
||||
if (matcher.find()) {
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR, "包含特殊字符");
|
||||
}
|
||||
|
||||
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("userAccount", userAccount);
|
||||
long count = userService.count(queryWrapper);
|
||||
if(count > 0){
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR, "用户已存在");
|
||||
}
|
||||
BeanUtils.copyProperties(userAddRequest, user);
|
||||
String password = DigestUtils.md5DigestAsHex((USER_SALT + userPassword).getBytes());
|
||||
user.setUserPassword(password);
|
||||
boolean save = userService.save(user);
|
||||
if(!save){
|
||||
throw new BusinessException(ErrorCode.OPERATION_ERROR);
|
||||
}
|
||||
return ResultUtils.success(user.getId());
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新用户信息(管理员)
|
||||
* @param userUpdateRequest
|
||||
* @param request
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/update")
|
||||
public BaseResponse<Boolean> updateUser(@RequestBody UserUpdateRequest userUpdateRequest, HttpServletRequest request){
|
||||
//判断是否为管理员
|
||||
userService.isAdmin(request);
|
||||
User user = new User();
|
||||
BeanUtils.copyProperties(userUpdateRequest, user);
|
||||
boolean res = userService.updateById(user);
|
||||
if(!res){
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR, "该用户不存在");
|
||||
}
|
||||
return ResultUtils.success(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新个人信息
|
||||
* @param userUpdateMyRequest
|
||||
* @param request
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/user/update")
|
||||
public BaseResponse<Boolean> updateMyUser(@RequestBody UserUpdateMyRequest userUpdateMyRequest, HttpServletRequest request){
|
||||
|
||||
if(userUpdateMyRequest == null){
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR);
|
||||
}
|
||||
User logingUser = userService.getLogingUser(request);
|
||||
User user = new User();
|
||||
BeanUtils.copyProperties(userUpdateMyRequest, user);
|
||||
user.setId(logingUser.getId());
|
||||
boolean result = userService.updateById(user);
|
||||
if(!result){
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR, "操作失败");
|
||||
}
|
||||
return ResultUtils.success(true);
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,49 @@
|
|||
package com.cj.jiaqingjiayi.exception;
|
||||
|
||||
|
||||
import com.cj.jiaqingjiayi.common.ErrorCode;
|
||||
|
||||
/**
|
||||
* 自定义异常类
|
||||
*
|
||||
*/
|
||||
public class BusinessException extends RuntimeException {
|
||||
|
||||
/**
|
||||
* 异常码
|
||||
*/
|
||||
private final int code;
|
||||
|
||||
/**
|
||||
* 描述
|
||||
*/
|
||||
private final String description;
|
||||
|
||||
public BusinessException(String message, int code, String description) {
|
||||
super(message);
|
||||
this.code = code;
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
public BusinessException(ErrorCode errorCode) {
|
||||
super(errorCode.getMessage());
|
||||
this.code = errorCode.getCode();
|
||||
this.description = errorCode.getDescription();
|
||||
}
|
||||
|
||||
public BusinessException(ErrorCode errorCode, String description) {
|
||||
super(errorCode.getMessage());
|
||||
this.code = errorCode.getCode();
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
public int getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
package com.cj.jiaqingjiayi.exception;
|
||||
|
||||
|
||||
|
||||
import com.cj.jiaqingjiayi.common.BaseResponse;
|
||||
import com.cj.jiaqingjiayi.common.ErrorCode;
|
||||
import com.cj.jiaqingjiayi.common.ResultUtils;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||
import org.springframework.web.bind.annotation.RestControllerAdvice;
|
||||
|
||||
/**
|
||||
* 全局异常处理器
|
||||
*
|
||||
*/
|
||||
@RestControllerAdvice
|
||||
@Slf4j
|
||||
public class GlobalExceptionHandler {
|
||||
|
||||
@ExceptionHandler(BusinessException.class)
|
||||
public BaseResponse<?> businessExceptionHandler(BusinessException e) {
|
||||
log.error("businessException: " + e.getMessage(), e);
|
||||
return ResultUtils.error(e.getCode(), e.getMessage(), e.getDescription());
|
||||
}
|
||||
|
||||
@ExceptionHandler(RuntimeException.class)
|
||||
public BaseResponse<?> runtimeExceptionHandler(RuntimeException e) {
|
||||
log.error("runtimeException", e);
|
||||
return ResultUtils.error(ErrorCode.SYSTEM_ERROR, e.getMessage(), "");
|
||||
}
|
||||
}
|
|
@ -0,0 +1,44 @@
|
|||
package com.cj.jiaqingjiayi.exception;
|
||||
|
||||
|
||||
import com.cj.jiaqingjiayi.common.ErrorCode;
|
||||
|
||||
/**
|
||||
* 抛异常工具类
|
||||
*/
|
||||
@SuppressWarnings("all")
|
||||
public class ThrowUtils {
|
||||
|
||||
/**
|
||||
* 条件成立则抛异常
|
||||
*
|
||||
* @param condition 条件
|
||||
* @param runtimeException 运行时异常
|
||||
*/
|
||||
public static void throwIf(boolean condition, RuntimeException runtimeException) {
|
||||
if (condition) {
|
||||
throw runtimeException;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 条件成立则抛异常
|
||||
*
|
||||
* @param condition 条件
|
||||
* @param errorCode 自定义异常
|
||||
*/
|
||||
public static void throwIf(boolean condition, ErrorCode errorCode) {
|
||||
throwIf(condition, new BusinessException(errorCode));
|
||||
}
|
||||
|
||||
/**
|
||||
* 条件成立则抛异常
|
||||
*
|
||||
* @param condition 条件
|
||||
* @param errorCode 自定义异常
|
||||
* @param message 报错信息
|
||||
*/
|
||||
public static void throwIf(boolean condition, ErrorCode errorCode, String message) {
|
||||
throwIf(condition, new BusinessException(errorCode, message));
|
||||
}
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
package com.cj.jiaqingjiayi.mapper;
|
||||
|
||||
import com.cj.jiaqingjiayi.model.domain.Attribute;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
||||
/**
|
||||
* @author 高木
|
||||
* @description 针对表【attribute(属性表)】的数据库操作Mapper
|
||||
* @createDate 2024-08-21 16:29:45
|
||||
* @Entity com.cj.jiaqingjiayi.model.domain.Attribute
|
||||
*/
|
||||
public interface AttributeMapper extends BaseMapper<Attribute> {
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
package com.cj.jiaqingjiayi.mapper;
|
||||
|
||||
import com.cj.jiaqingjiayi.model.domain.BusinessAuth;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
||||
/**
|
||||
* @author 高木
|
||||
* @description 针对表【business_auth(商家认证)】的数据库操作Mapper
|
||||
* @createDate 2024-07-28 17:18:28
|
||||
* @Entity com.cj.jiaqingjiayi.model.domain.BusinessAuth
|
||||
*/
|
||||
public interface BusinessAuthMapper extends BaseMapper<BusinessAuth> {
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
package com.cj.jiaqingjiayi.mapper;
|
||||
|
||||
import com.cj.jiaqingjiayi.model.domain.Business;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
||||
/**
|
||||
* @author 高木
|
||||
* @description 针对表【business(商家)】的数据库操作Mapper
|
||||
* @createDate 2024-07-28 17:16:33
|
||||
* @Entity com.cj.jiaqingjiayi.model.domain.Business
|
||||
*/
|
||||
public interface BusinessMapper extends BaseMapper<Business> {
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
package com.cj.jiaqingjiayi.mapper;
|
||||
|
||||
import com.cj.jiaqingjiayi.model.domain.Cart;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
||||
/**
|
||||
* @author 高木
|
||||
* @description 针对表【cart(购物车表)】的数据库操作Mapper
|
||||
* @createDate 2024-09-05 15:15:56
|
||||
* @Entity com.cj.jiaqingjiayi.model.domain.Cart
|
||||
*/
|
||||
public interface CartMapper extends BaseMapper<Cart> {
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
package com.cj.jiaqingjiayi.mapper;
|
||||
|
||||
import com.cj.jiaqingjiayi.model.domain.Commodities;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
||||
/**
|
||||
* @author 高木
|
||||
* @description 针对表【commodities(商品表)】的数据库操作Mapper
|
||||
* @createDate 2024-08-20 19:55:49
|
||||
* @Entity com.cj.jiaqingjiayi.model.domain.Commodities
|
||||
*/
|
||||
public interface CommoditiesMapper extends BaseMapper<Commodities> {
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
package com.cj.jiaqingjiayi.mapper;
|
||||
|
||||
import com.cj.jiaqingjiayi.model.domain.ManicuristAuth;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
||||
/**
|
||||
* @author 高木
|
||||
* @description 针对表【manicurist_auth(美甲师认证表)】的数据库操作Mapper
|
||||
* @createDate 2024-09-23 18:46:06
|
||||
* @Entity com.cj.jiaqingjiayi.model.domain.ManicuristAuth
|
||||
*/
|
||||
public interface ManicuristAuthMapper extends BaseMapper<ManicuristAuth> {
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
package com.cj.jiaqingjiayi.mapper;
|
||||
|
||||
import com.cj.jiaqingjiayi.model.domain.Manicurist;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
||||
/**
|
||||
* @author 高木
|
||||
* @description 针对表【manicurist(美甲师表)】的数据库操作Mapper
|
||||
* @createDate 2024-09-23 19:23:08
|
||||
* @Entity com.cj.jiaqingjiayi.model.domain.Manicurist
|
||||
*/
|
||||
public interface ManicuristMapper extends BaseMapper<Manicurist> {
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
package com.cj.jiaqingjiayi.mapper;
|
||||
|
||||
import com.cj.jiaqingjiayi.model.domain.SpecificationsCommodities;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
||||
/**
|
||||
* @author 高木
|
||||
* @description 针对表【specifications_commodities(商品和规格的中间表)】的数据库操作Mapper
|
||||
* @createDate 2024-08-21 16:21:41
|
||||
* @Entity com.cj.jiaqingjiayi.model.domain.SpecificationsCommodities
|
||||
*/
|
||||
public interface SpecificationsCommoditiesMapper extends BaseMapper<SpecificationsCommodities> {
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
package com.cj.jiaqingjiayi.mapper;
|
||||
|
||||
import com.cj.jiaqingjiayi.model.domain.Specifications;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
||||
/**
|
||||
* @author 高木
|
||||
* @description 针对表【specifications(规格表)】的数据库操作Mapper
|
||||
* @createDate 2024-08-21 16:20:48
|
||||
* @Entity com.cj.jiaqingjiayi.model.domain.Specifications
|
||||
*/
|
||||
public interface SpecificationsMapper extends BaseMapper<Specifications> {
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
package com.cj.jiaqingjiayi.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.cj.jiaqingjiayi.model.domain.User;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
* @author ly
|
||||
*
|
||||
*/
|
||||
@Mapper
|
||||
public interface UserMapper extends BaseMapper<User> {
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,56 @@
|
|||
package com.cj.jiaqingjiayi.model.domain;
|
||||
|
||||
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 java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 属性表
|
||||
* @TableName attribute
|
||||
*/
|
||||
@TableName(value ="attribute")
|
||||
@Data
|
||||
public class Attribute implements Serializable {
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 商家id
|
||||
*/
|
||||
private Long businessId;
|
||||
|
||||
/**
|
||||
* 规格id
|
||||
*/
|
||||
private Long specificationsId;
|
||||
|
||||
/**
|
||||
* 属性名称
|
||||
*/
|
||||
private String attributeName;
|
||||
|
||||
/**
|
||||
* 属性状态:0在售,1停售
|
||||
*/
|
||||
private Integer attributeStatus;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
private Date createTime;
|
||||
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
private Date updateTime;
|
||||
|
||||
@TableField(exist = false)
|
||||
private static final long serialVersionUID = 1L;
|
||||
}
|
|
@ -0,0 +1,101 @@
|
|||
package com.cj.jiaqingjiayi.model.domain;
|
||||
|
||||
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 java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 商家
|
||||
* @TableName business
|
||||
*/
|
||||
@TableName(value ="business")
|
||||
@Data
|
||||
public class Business implements Serializable {
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 用户id
|
||||
*/
|
||||
private Long userId;
|
||||
|
||||
/**
|
||||
* 门店名称
|
||||
*/
|
||||
private String businessName;
|
||||
|
||||
/**
|
||||
* 门店头像
|
||||
*/
|
||||
private String businessAvatar;
|
||||
|
||||
/**
|
||||
* 门店手机号
|
||||
*/
|
||||
private String businessPhone;
|
||||
|
||||
/**
|
||||
* 店铺详细地址
|
||||
*/
|
||||
private String address;
|
||||
|
||||
/**
|
||||
* 门店简介
|
||||
*/
|
||||
private String businessProfile;
|
||||
|
||||
/**
|
||||
* 商家相册
|
||||
*/
|
||||
private String businessImages;
|
||||
|
||||
/**
|
||||
* 分类id
|
||||
*/
|
||||
private Long categoryId;
|
||||
|
||||
/**
|
||||
* 开始营业时间
|
||||
*/
|
||||
private String startBusiness;
|
||||
|
||||
/**
|
||||
* 结束营业时间
|
||||
*/
|
||||
private String endBusiness;
|
||||
|
||||
/**
|
||||
* 状态:0审核中,1启用,2禁用
|
||||
*/
|
||||
private Integer state;
|
||||
|
||||
/**
|
||||
* 店铺状态:0休业,1营业
|
||||
*/
|
||||
private Integer storeStatus;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
private Date createTime;
|
||||
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
private Date updateTime;
|
||||
|
||||
/**
|
||||
* 是否删除
|
||||
*/
|
||||
private Integer isDelete;
|
||||
|
||||
@TableField(exist = false)
|
||||
private static final long serialVersionUID = 1L;
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
package com.cj.jiaqingjiayi.model.domain;
|
||||
|
||||
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 java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 商家认证
|
||||
* @TableName business_auth
|
||||
*/
|
||||
@TableName(value ="business_auth")
|
||||
@Data
|
||||
public class BusinessAuth implements Serializable {
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 店铺id
|
||||
*/
|
||||
private Long businessId;
|
||||
|
||||
/**
|
||||
* 店主名
|
||||
*/
|
||||
private String shopkeeper;
|
||||
|
||||
/**
|
||||
* 营业执照
|
||||
*/
|
||||
private String license;
|
||||
|
||||
/**
|
||||
* 身份证正面
|
||||
*/
|
||||
private String frontIdCard;
|
||||
|
||||
/**
|
||||
* 身份证反面
|
||||
*/
|
||||
private String backIdCard;
|
||||
|
||||
/**
|
||||
* 银行卡号
|
||||
*/
|
||||
private String bankCard;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
private Date createTime;
|
||||
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
private Date updateTime;
|
||||
|
||||
/**
|
||||
* 是否删除
|
||||
*/
|
||||
private Integer isDelete;
|
||||
|
||||
@TableField(exist = false)
|
||||
private static final long serialVersionUID = 1L;
|
||||
}
|
|
@ -0,0 +1,77 @@
|
|||
package com.cj.jiaqingjiayi.model.domain;
|
||||
|
||||
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 java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 购物车表
|
||||
* @TableName cart
|
||||
*/
|
||||
@TableName(value ="cart")
|
||||
@Data
|
||||
public class Cart implements Serializable {
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 用户id
|
||||
*/
|
||||
private Long userId;
|
||||
|
||||
/**
|
||||
* 商家id
|
||||
*/
|
||||
private Long businessId;
|
||||
|
||||
/**
|
||||
* 加入购物车时间
|
||||
*/
|
||||
private Date createTime;
|
||||
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
private Date updateTime;
|
||||
|
||||
/**
|
||||
* 商品id
|
||||
*/
|
||||
private Long commoditiesId;
|
||||
|
||||
/**
|
||||
* 商品数量
|
||||
*/
|
||||
private Integer quantity;
|
||||
|
||||
/**
|
||||
* 当前选择规格的价格
|
||||
*/
|
||||
private BigDecimal price;
|
||||
|
||||
/**
|
||||
* 小计(单价 * 数量)
|
||||
*/
|
||||
private BigDecimal subtotal;
|
||||
|
||||
/**
|
||||
* 已选规格属性列表
|
||||
*/
|
||||
private String selectedOptions;
|
||||
|
||||
/**
|
||||
* 是否删除
|
||||
*/
|
||||
private Integer isDelete;
|
||||
|
||||
@TableField(exist = false)
|
||||
private static final long serialVersionUID = 1L;
|
||||
}
|
|
@ -0,0 +1,76 @@
|
|||
package com.cj.jiaqingjiayi.model.domain;
|
||||
|
||||
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 java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 商品表
|
||||
* @TableName commodities
|
||||
*/
|
||||
@TableName(value ="commodities")
|
||||
@Data
|
||||
public class Commodities implements Serializable {
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 商家id
|
||||
*/
|
||||
private Long businessId;
|
||||
|
||||
/**
|
||||
* 商品分组id
|
||||
*/
|
||||
private Long commoditiesGroupId;
|
||||
|
||||
/**
|
||||
* 商品名称
|
||||
*/
|
||||
private String commoditiesName;
|
||||
|
||||
/**
|
||||
* 商品图片
|
||||
*/
|
||||
private String commoditiesImage;
|
||||
|
||||
/**
|
||||
* 商品价格
|
||||
*/
|
||||
private Double commoditiesPrice;
|
||||
|
||||
/**
|
||||
* 库存数量
|
||||
*/
|
||||
private Integer inventoryStatus;
|
||||
|
||||
/**
|
||||
* 商品状态:上架,下架
|
||||
*/
|
||||
private String status;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
private Date createTime;
|
||||
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
private Date updateTime;
|
||||
|
||||
/**
|
||||
* 是否删除
|
||||
*/
|
||||
private Integer isDelete;
|
||||
|
||||
@TableField(exist = false)
|
||||
private static final long serialVersionUID = 1L;
|
||||
}
|
|
@ -0,0 +1,96 @@
|
|||
package com.cj.jiaqingjiayi.model.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 美甲师表
|
||||
* @TableName manicurist
|
||||
*/
|
||||
@TableName(value ="manicurist")
|
||||
@Data
|
||||
public class Manicurist implements Serializable {
|
||||
/**
|
||||
* 美甲师唯一标识(主键,自增)
|
||||
*/
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 用户ID(关联用户表)
|
||||
*/
|
||||
private Long userId;
|
||||
|
||||
/**
|
||||
* 商家ID(关联商家表)
|
||||
*/
|
||||
private Long businessId;
|
||||
|
||||
/**
|
||||
* 美甲师姓名
|
||||
*/
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 性别
|
||||
*/
|
||||
private Integer gender;
|
||||
|
||||
/**
|
||||
* 美甲师联系电话
|
||||
*/
|
||||
private String phone;
|
||||
|
||||
/**
|
||||
* 美甲师电子邮件
|
||||
*/
|
||||
private String email;
|
||||
|
||||
/**
|
||||
* 美甲师入职日期
|
||||
*/
|
||||
private Date employment_date;
|
||||
|
||||
/**
|
||||
* 美甲师的专长(如法式美甲、彩绘等)
|
||||
*/
|
||||
private String specialties;
|
||||
|
||||
/**
|
||||
* 美甲师的服务评分
|
||||
*/
|
||||
private BigDecimal rating;
|
||||
|
||||
/**
|
||||
* 美甲师的基本薪资
|
||||
*/
|
||||
private BigDecimal salary;
|
||||
|
||||
/**
|
||||
* 逻辑删除标志,0 表示未删除,1 表示已删除
|
||||
*/
|
||||
@TableLogic
|
||||
private Integer isDelete;
|
||||
|
||||
/**
|
||||
* 记录创建时间
|
||||
*/
|
||||
private Date createTime;
|
||||
|
||||
/**
|
||||
* 记录更新时间
|
||||
*/
|
||||
private Date updateTime;
|
||||
|
||||
/**
|
||||
* 美甲师头像的存储路径或链接
|
||||
*/
|
||||
private String manicuristAvatar;
|
||||
|
||||
@TableField(exist = false)
|
||||
private static final long serialVersionUID = 1L;
|
||||
}
|
|
@ -0,0 +1,60 @@
|
|||
package com.cj.jiaqingjiayi.model.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 美甲师认证表
|
||||
* @TableName manicurist_auth
|
||||
*/
|
||||
@TableName(value ="manicurist_auth")
|
||||
@Data
|
||||
public class ManicuristAuth implements Serializable {
|
||||
/**
|
||||
* 认证唯一标识(主键,自增)
|
||||
*/
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 美甲师ID(关联美甲师表)
|
||||
*/
|
||||
private Long artistId;
|
||||
|
||||
/**
|
||||
* 认证编号
|
||||
*/
|
||||
private String certification_number;
|
||||
|
||||
/**
|
||||
* 发证机构
|
||||
*/
|
||||
private String issuing_authority;
|
||||
|
||||
/**
|
||||
* 证书文件的存储路径或链接
|
||||
*/
|
||||
private String certificate_path;
|
||||
|
||||
/**
|
||||
* 记录创建时间
|
||||
*/
|
||||
private Date createTime;
|
||||
|
||||
/**
|
||||
* 记录更新时间
|
||||
*/
|
||||
private Date updateTime;
|
||||
|
||||
/**
|
||||
* 逻辑删除标志,0 表示未删除,1 表示已删除
|
||||
*/
|
||||
@TableLogic
|
||||
private Integer isDelete;
|
||||
|
||||
@TableField(exist = false)
|
||||
private static final long serialVersionUID = 1L;
|
||||
}
|
|
@ -0,0 +1,51 @@
|
|||
package com.cj.jiaqingjiayi.model.domain;
|
||||
|
||||
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 java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 规格表
|
||||
* @TableName specifications
|
||||
*/
|
||||
@TableName(value ="specifications")
|
||||
@Data
|
||||
public class Specifications implements Serializable {
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 商家id
|
||||
*/
|
||||
private Long businessId;
|
||||
|
||||
/**
|
||||
* 规格名称
|
||||
*/
|
||||
private String specificationsName;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
private Date createTime;
|
||||
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
private Date updateTime;
|
||||
|
||||
/**
|
||||
* 是否删除
|
||||
*/
|
||||
private Integer isDelete;
|
||||
|
||||
@TableField(exist = false)
|
||||
private static final long serialVersionUID = 1L;
|
||||
}
|
|
@ -0,0 +1,51 @@
|
|||
package com.cj.jiaqingjiayi.model.domain;
|
||||
|
||||
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 java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 商品和规格的中间表
|
||||
* @TableName specifications_commodities
|
||||
*/
|
||||
@TableName(value ="specifications_commodities")
|
||||
@Data
|
||||
public class SpecificationsCommodities implements Serializable {
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 商品id
|
||||
*/
|
||||
private Long commoditiesId;
|
||||
|
||||
/**
|
||||
* 规格id
|
||||
*/
|
||||
private Long specificationsId;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
private Date createTime;
|
||||
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
private Date updateTime;
|
||||
|
||||
/**
|
||||
* 是否删除
|
||||
*/
|
||||
private Integer isDelete;
|
||||
|
||||
@TableField(exist = false)
|
||||
private static final long serialVersionUID = 1L;
|
||||
}
|
|
@ -0,0 +1,97 @@
|
|||
package com.cj.jiaqingjiayi.model.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 用户
|
||||
* @TableName user
|
||||
*/
|
||||
@TableName(value ="user")
|
||||
@Data
|
||||
public class User implements Serializable {
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Long id;
|
||||
|
||||
|
||||
/**
|
||||
* 支付宝开放平台id
|
||||
*/
|
||||
private String unionId;
|
||||
|
||||
/**
|
||||
* openId
|
||||
*/
|
||||
private String openId;
|
||||
|
||||
/**
|
||||
* 用户昵称
|
||||
*/
|
||||
private String username;
|
||||
|
||||
/**
|
||||
* 账号
|
||||
*/
|
||||
private String userAccount;
|
||||
|
||||
/**
|
||||
* 用户头像
|
||||
*/
|
||||
private String avatarUrl;
|
||||
|
||||
/**
|
||||
* 性别
|
||||
*/
|
||||
private Integer gender;
|
||||
|
||||
/**
|
||||
* 密码
|
||||
*/
|
||||
private String userPassword;
|
||||
|
||||
/**
|
||||
* 电话
|
||||
*/
|
||||
private String phone;
|
||||
|
||||
/**
|
||||
* 邮箱
|
||||
*/
|
||||
private String email;
|
||||
|
||||
/**
|
||||
* 状态 0 -正常
|
||||
*/
|
||||
private Integer userStatus;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
private Date createTime;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private Date updateTime;
|
||||
|
||||
/**
|
||||
* 是否删除
|
||||
*/
|
||||
@TableLogic
|
||||
private Integer isDelete;
|
||||
|
||||
/**
|
||||
* 用户角色 0 - 普通用户 1 - 管理员
|
||||
*/
|
||||
private Integer userRole;
|
||||
|
||||
|
||||
@TableField(exist = false)
|
||||
private static final long serialVersionUID = 1L;
|
||||
}
|
|
@ -0,0 +1,54 @@
|
|||
package com.cj.jiaqingjiayi.model.request.Commodities;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class CommoditiesAddRequest implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = -8094188745265544921L;
|
||||
/**
|
||||
* 该商品的规格id列表
|
||||
*/
|
||||
private List<Long> specificationsIds;
|
||||
|
||||
/**
|
||||
* 商家id
|
||||
*/
|
||||
private Long businessId;
|
||||
|
||||
/**
|
||||
* 商品分组id
|
||||
*/
|
||||
private Long commoditiesGroupId;
|
||||
|
||||
/**
|
||||
* 商品名称
|
||||
*/
|
||||
private String commoditiesName;
|
||||
|
||||
/**
|
||||
* 商品图片
|
||||
*/
|
||||
private String commoditiesImage;
|
||||
|
||||
/**
|
||||
* 商品价格
|
||||
*/
|
||||
private Double commoditiesPrice;
|
||||
|
||||
/**
|
||||
* 库存数量
|
||||
*/
|
||||
private Integer inventoryStatus;
|
||||
|
||||
/**
|
||||
* 商品状态:上架,下架
|
||||
*/
|
||||
private String status;
|
||||
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
package com.cj.jiaqingjiayi.model.request.Commodities;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
public class CommoditiesDeleteRequest implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 8880136450188924209L;
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
private Long id;
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
package com.cj.jiaqingjiayi.model.request.Commodities;
|
||||
|
||||
|
||||
import com.cj.jiaqingjiayi.model.request.PageRequest;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
public class CommoditiesQueryRequest extends PageRequest implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = -483140126402634506L;
|
||||
/**
|
||||
* 商家id
|
||||
*/
|
||||
private Long businessId;
|
||||
|
||||
/**
|
||||
* 商品分组id
|
||||
*/
|
||||
private Long commoditiesGroupId;
|
||||
|
||||
/**
|
||||
* 商品名称
|
||||
*/
|
||||
private String commoditiesName;
|
||||
|
||||
/**
|
||||
* 商品状态:上架,下架
|
||||
*/
|
||||
private String status;
|
||||
|
||||
}
|
|
@ -0,0 +1,61 @@
|
|||
package com.cj.jiaqingjiayi.model.request.Commodities;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class CommoditiesUpdateRequest implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 7891617409382838083L;
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 该商品的规格id列表
|
||||
*/
|
||||
private List<Long> specificationsIds;
|
||||
|
||||
/**
|
||||
* 商家id
|
||||
*/
|
||||
private Long businessId;
|
||||
|
||||
/**
|
||||
* 商品分组id
|
||||
*/
|
||||
private Long commoditiesGroupId;
|
||||
|
||||
/**
|
||||
* 商品名称
|
||||
*/
|
||||
private String commoditiesName;
|
||||
|
||||
/**
|
||||
* 商品图片
|
||||
*/
|
||||
private String commoditiesImage;
|
||||
|
||||
/**
|
||||
* 商品价格
|
||||
*/
|
||||
private Double commoditiesPrice;
|
||||
|
||||
|
||||
/**
|
||||
* 库存数量
|
||||
*/
|
||||
private Integer inventoryStatus;
|
||||
|
||||
/**
|
||||
* 商品状态:上架,下架
|
||||
*/
|
||||
private String status;
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
package com.cj.jiaqingjiayi.model.request;
|
||||
|
||||
|
||||
import com.cj.jiaqingjiayi.contant.CommonConstant;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 分页请求
|
||||
*/
|
||||
@Data
|
||||
public class PageRequest {
|
||||
|
||||
/**
|
||||
* 当前页号
|
||||
*/
|
||||
private long current = 1;
|
||||
|
||||
/**
|
||||
* 页面大小
|
||||
*/
|
||||
private long pageSize = 10;
|
||||
|
||||
/**
|
||||
* 排序字段
|
||||
*/
|
||||
private String sortField;
|
||||
|
||||
|
||||
/**
|
||||
* 排序顺序(默认升序)
|
||||
*/
|
||||
private String sortOrder = CommonConstant.SORT_ORDER_ASC;
|
||||
|
||||
}
|
|
@ -0,0 +1,99 @@
|
|||
package com.cj.jiaqingjiayi.model.request.business;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 商家添加请求
|
||||
*
|
||||
* @TableName business
|
||||
*/
|
||||
@Data
|
||||
public class BusinessAddRequest implements Serializable {
|
||||
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 7762081065466040395L;
|
||||
|
||||
/**
|
||||
* 账号
|
||||
*/
|
||||
private String userAccount;
|
||||
|
||||
/**
|
||||
* 密码
|
||||
*/
|
||||
private String userPassword;
|
||||
|
||||
/**
|
||||
* 门店名
|
||||
*/
|
||||
private String businessName;
|
||||
|
||||
/**
|
||||
* 门店头像
|
||||
*/
|
||||
private String businessAvatar;
|
||||
|
||||
/**
|
||||
* 门店手机号
|
||||
*/
|
||||
private String businessPhone;
|
||||
|
||||
/**
|
||||
* 店铺详细地址
|
||||
*/
|
||||
private String address;
|
||||
|
||||
/**
|
||||
* 门店简介
|
||||
*/
|
||||
private String businessProfile;
|
||||
|
||||
/**
|
||||
* 商家相册
|
||||
*/
|
||||
private String businessImages;
|
||||
|
||||
/**
|
||||
* 分类id
|
||||
*/
|
||||
private Long categoryId;
|
||||
|
||||
/**
|
||||
* 店主名
|
||||
*/
|
||||
private String shopkeeper;
|
||||
|
||||
/**
|
||||
* 营业执照
|
||||
*/
|
||||
private String license;
|
||||
|
||||
/**
|
||||
* 身份证正面
|
||||
*/
|
||||
private String frontIdCard;
|
||||
|
||||
/**
|
||||
* 身份证反面
|
||||
*/
|
||||
private String backIdCard;
|
||||
|
||||
/**
|
||||
* 银行卡号
|
||||
*/
|
||||
private String bankCard;
|
||||
|
||||
/**
|
||||
* 开始营业时间
|
||||
*/
|
||||
private String startBusiness;
|
||||
|
||||
/**
|
||||
* 结束营业时间
|
||||
*/
|
||||
private String endBusiness;
|
||||
}
|
|
@ -0,0 +1,62 @@
|
|||
package com.cj.jiaqingjiayi.model.request.business;
|
||||
|
||||
|
||||
import com.cj.jiaqingjiayi.model.request.PageRequest;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 商家查询请求体
|
||||
*
|
||||
* @TableName business
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class BusinessQueryRequest extends PageRequest implements Serializable {
|
||||
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 用户id
|
||||
*/
|
||||
private Long userId;
|
||||
|
||||
/**
|
||||
* 门店名称
|
||||
*/
|
||||
private String businessName;
|
||||
|
||||
/**
|
||||
* 门店地址
|
||||
*/
|
||||
private String address;
|
||||
|
||||
/**
|
||||
* 门店简介
|
||||
*/
|
||||
private String businessProfile;
|
||||
|
||||
/**
|
||||
* 分类id
|
||||
*/
|
||||
private Long categoryId;
|
||||
|
||||
/**
|
||||
* 状态:0禁用,1启用
|
||||
*/
|
||||
private Integer state;
|
||||
|
||||
/**
|
||||
* 店铺状态:0休业,1营业
|
||||
*/
|
||||
private Integer storeStatus;
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
}
|
|
@ -0,0 +1,83 @@
|
|||
package com.cj.jiaqingjiayi.model.request.business;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 商家更新请求
|
||||
*
|
||||
*/
|
||||
@Data
|
||||
public class BusinessUpdateRequest implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 2615860827104965045L;
|
||||
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 用户id
|
||||
*/
|
||||
private Long userId;
|
||||
|
||||
/**
|
||||
* 门店昵称
|
||||
*/
|
||||
private String businessName;
|
||||
|
||||
/**
|
||||
* 门店头像
|
||||
*/
|
||||
private String businessAvatar;
|
||||
|
||||
/**
|
||||
* 门店手机号
|
||||
*/
|
||||
private String businessPhone;
|
||||
|
||||
/**
|
||||
* 店铺详细地址
|
||||
*/
|
||||
private String address;
|
||||
|
||||
/**
|
||||
* 门店简介
|
||||
*/
|
||||
private String businessProfile;
|
||||
|
||||
/**
|
||||
* 商家相册
|
||||
*/
|
||||
private String businessImages;
|
||||
|
||||
/**
|
||||
* 分类id
|
||||
*/
|
||||
private Long categoryId;
|
||||
|
||||
/**
|
||||
* 开始营业时间
|
||||
*/
|
||||
private String startBusiness;
|
||||
|
||||
/**
|
||||
* 结束营业时间
|
||||
*/
|
||||
private String endBusiness;
|
||||
|
||||
/**
|
||||
* 状态:0禁用,1启用
|
||||
*/
|
||||
private Integer state;
|
||||
|
||||
/**
|
||||
* 店铺状态:0休业,1营业
|
||||
*/
|
||||
private Integer storeStatus;
|
||||
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
package com.cj.jiaqingjiayi.model.request.cart;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* @author xy
|
||||
*/
|
||||
@Data
|
||||
public class CartAddRequest implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 2466273435949197859L;
|
||||
/**
|
||||
* 商家id
|
||||
*/
|
||||
private Long businessId;
|
||||
|
||||
/**
|
||||
* 关联的商品id
|
||||
*/
|
||||
private Long commoditiesId;
|
||||
|
||||
/**
|
||||
* 商品数量
|
||||
*/
|
||||
private Integer quantity;
|
||||
|
||||
/**
|
||||
* 已选规格属性列表
|
||||
*/
|
||||
private String selectedOptions = "";
|
||||
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
package com.cj.jiaqingjiayi.model.request.cart;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* @author xy
|
||||
*/
|
||||
@Data
|
||||
public class CartDeleteRequest implements Serializable {
|
||||
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = -8695320813786782366L;
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
private Long id;
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
package com.cj.jiaqingjiayi.model.request.cart;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* @author xy
|
||||
*/
|
||||
@Data
|
||||
public class CartQueryRequest implements Serializable {
|
||||
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = -3655808874226929017L;
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
private Long id;
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
package com.cj.jiaqingjiayi.model.request.cart;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* @author xy
|
||||
*/
|
||||
@Data
|
||||
public class CartUpdateRequest implements Serializable {
|
||||
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = -8867758794571915534L;
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 关联的商品id
|
||||
*/
|
||||
private Long commoditiesId;
|
||||
|
||||
/**
|
||||
* 商品数量
|
||||
*/
|
||||
private Integer quantity;
|
||||
|
||||
/**
|
||||
* 是否加入有规格的商品
|
||||
*/
|
||||
private Boolean isSelectedOptions = false;
|
||||
|
||||
/**
|
||||
* 已选规格属性列表
|
||||
*/
|
||||
private String selectedOptions = "";
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,76 @@
|
|||
package com.cj.jiaqingjiayi.model.request.manicurist;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
@Data
|
||||
public class ManicuristAddRequest implements Serializable {
|
||||
@Serial
|
||||
private static final long serialVersionUID = -1651547088747557889L;
|
||||
/**
|
||||
* 账号
|
||||
*/
|
||||
private String userAccount;
|
||||
|
||||
/**
|
||||
* 密码
|
||||
*/
|
||||
private String userPassword;
|
||||
|
||||
/**
|
||||
* 美甲师姓名
|
||||
*/
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 性别
|
||||
*/
|
||||
private Integer gender;
|
||||
|
||||
/**
|
||||
* 美甲师联系电话
|
||||
*/
|
||||
private String phone;
|
||||
|
||||
/**
|
||||
* 美甲师电子邮件
|
||||
*/
|
||||
private String email;
|
||||
|
||||
/**
|
||||
* 美甲师的专长(如法式美甲、彩绘等)
|
||||
*/
|
||||
private String specialties;
|
||||
|
||||
/**
|
||||
* 美甲师的服务评分
|
||||
*/
|
||||
private BigDecimal rating;
|
||||
|
||||
/**
|
||||
* 美甲师的基本薪资
|
||||
*/
|
||||
private BigDecimal salary;
|
||||
|
||||
/**
|
||||
* 认证编号
|
||||
*/
|
||||
private String certification_number;
|
||||
|
||||
/**
|
||||
* 发证机构
|
||||
*/
|
||||
private String issuing_authority;
|
||||
|
||||
/**
|
||||
* 证书文件的存储路径或链接
|
||||
*/
|
||||
private String certificate_path;
|
||||
|
||||
}
|
|
@ -0,0 +1,78 @@
|
|||
package com.cj.jiaqingjiayi.model.request.manicurist;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.cj.jiaqingjiayi.model.request.PageRequest;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
@Data
|
||||
public class ManicuristQueryRequest extends PageRequest implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = -5433330530903928177L;
|
||||
/**
|
||||
* 美甲师唯一标识(主键,自增)
|
||||
*/
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 用户ID(关联用户表)
|
||||
*/
|
||||
private Long userId;
|
||||
|
||||
/**
|
||||
* 商家ID(关联商家表)
|
||||
*/
|
||||
private Long businessId;
|
||||
|
||||
/**
|
||||
* 美甲师姓名
|
||||
*/
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 性别
|
||||
*/
|
||||
private Integer gender;
|
||||
|
||||
/**
|
||||
* 美甲师联系电话
|
||||
*/
|
||||
private String phone;
|
||||
|
||||
/**
|
||||
* 美甲师电子邮件
|
||||
*/
|
||||
private String email;
|
||||
|
||||
/**
|
||||
* 美甲师入职日期
|
||||
*/
|
||||
private Date employment_date;
|
||||
|
||||
/**
|
||||
* 美甲师的专长(如法式美甲、彩绘等)
|
||||
*/
|
||||
private String specialties;
|
||||
|
||||
/**
|
||||
* 美甲师的服务评分
|
||||
*/
|
||||
private BigDecimal rating;
|
||||
|
||||
/**
|
||||
* 美甲师的基本薪资
|
||||
*/
|
||||
private BigDecimal salary;
|
||||
|
||||
/**
|
||||
* 美甲师头像的存储路径或链接
|
||||
*/
|
||||
private String manicuristAvatar;
|
||||
}
|
|
@ -0,0 +1,72 @@
|
|||
package com.cj.jiaqingjiayi.model.request.manicurist;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
@Data
|
||||
public class ManicuristUpdateRequest implements Serializable {
|
||||
@Serial
|
||||
private static final long serialVersionUID = -5199566725120312494L;
|
||||
/**
|
||||
* 美甲师唯一标识(主键,自增)
|
||||
*/
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 商家ID(关联商家表)
|
||||
*/
|
||||
private Long businessId;
|
||||
|
||||
/**
|
||||
* 美甲师姓名
|
||||
*/
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 性别
|
||||
*/
|
||||
private Integer gender;
|
||||
|
||||
/**
|
||||
* 美甲师联系电话
|
||||
*/
|
||||
private String phone;
|
||||
|
||||
/**
|
||||
* 美甲师电子邮件
|
||||
*/
|
||||
private String email;
|
||||
|
||||
/**
|
||||
* 美甲师入职日期
|
||||
*/
|
||||
private Date employment_date;
|
||||
|
||||
/**
|
||||
* 美甲师的专长(如法式美甲、彩绘等)
|
||||
*/
|
||||
private String specialties;
|
||||
|
||||
/**
|
||||
* 美甲师的服务评分
|
||||
*/
|
||||
private BigDecimal rating;
|
||||
|
||||
/**
|
||||
* 美甲师的基本薪资
|
||||
*/
|
||||
private BigDecimal salary;
|
||||
|
||||
/**
|
||||
* 美甲师头像的存储路径或链接
|
||||
*/
|
||||
private String manicuristAvatar;
|
||||
|
||||
}
|
|
@ -0,0 +1,47 @@
|
|||
package com.cj.jiaqingjiayi.model.request.manicurist;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
@Data
|
||||
public class MyManicuristUpdateRequest implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = -3025700511375845200L;
|
||||
/**
|
||||
* 美甲师姓名
|
||||
*/
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 性别
|
||||
*/
|
||||
private Integer gender;
|
||||
|
||||
/**
|
||||
* 美甲师联系电话
|
||||
*/
|
||||
private String phone;
|
||||
|
||||
/**
|
||||
* 美甲师电子邮件
|
||||
*/
|
||||
private String email;
|
||||
|
||||
|
||||
/**
|
||||
* 美甲师的专长(如法式美甲、彩绘等)
|
||||
*/
|
||||
private String specialties;
|
||||
|
||||
/**
|
||||
* 美甲师头像的存储路径或链接
|
||||
*/
|
||||
private String manicuristAvatar;
|
||||
}
|
|
@ -0,0 +1,41 @@
|
|||
package com.cj.jiaqingjiayi.model.request.user;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* 用户创建请求
|
||||
*
|
||||
* @author gm
|
||||
*/
|
||||
@Data
|
||||
public class UserAddRequest implements Serializable {
|
||||
|
||||
|
||||
private static final long serialVersionUID = 3646996345132590650L;
|
||||
/**
|
||||
* 用户昵称
|
||||
*/
|
||||
private String username;
|
||||
|
||||
/**
|
||||
* 用户账号
|
||||
*/
|
||||
private String userAccount;
|
||||
|
||||
/**
|
||||
* 用户密码
|
||||
*/
|
||||
private String userPassword;
|
||||
|
||||
/**
|
||||
* 用户头像
|
||||
*/
|
||||
private String avatarUrl;
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
package com.cj.jiaqingjiayi.model.request.user;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
|
||||
//用户删除请求
|
||||
@Data
|
||||
public class UserDeleteRequest implements Serializable {
|
||||
|
||||
|
||||
private Long id;
|
||||
|
||||
private static final long serialVersionUID = -8544256059657791194L;
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
package com.cj.jiaqingjiayi.model.request.user;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 用户登录请求体
|
||||
*/
|
||||
@Data
|
||||
public class UserLoginRequest implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 3191241716373120793L;
|
||||
|
||||
/**
|
||||
* 用户账号
|
||||
*/
|
||||
private String userAccount;
|
||||
|
||||
/**
|
||||
* 用户密码
|
||||
*/
|
||||
private String userPassword;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
package com.cj.jiaqingjiayi.model.request.user;
|
||||
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 用户注册请求体参数
|
||||
*
|
||||
*/
|
||||
@Data
|
||||
public class UserRegisterRequest implements Serializable {
|
||||
/**
|
||||
* 防止序列化出现冲突
|
||||
*/
|
||||
private static final long serialVersionUID = 3553317334228624372L;
|
||||
/**
|
||||
* 用户账号
|
||||
*/
|
||||
private String userAccount;
|
||||
/**
|
||||
* 用户密码
|
||||
*/
|
||||
private String userPassword;
|
||||
/**
|
||||
* 校验密码
|
||||
*/
|
||||
private String checkPassword;
|
||||
}
|
|
@ -0,0 +1,67 @@
|
|||
package com.cj.jiaqingjiayi.model.request.user;
|
||||
|
||||
|
||||
|
||||
import com.cj.jiaqingjiayi.model.request.PageRequest;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
*用户查询请求
|
||||
*/
|
||||
@Data
|
||||
public class UserSearchRequest extends PageRequest implements Serializable {
|
||||
/**
|
||||
* 用户昵称
|
||||
*/
|
||||
private String username;
|
||||
|
||||
/**
|
||||
* 账号
|
||||
*/
|
||||
private String userAccount;
|
||||
|
||||
/**
|
||||
* 用户头像
|
||||
*/
|
||||
private String avatarUrl;
|
||||
|
||||
/**
|
||||
* 性别 男 女
|
||||
*/
|
||||
private Integer gender;
|
||||
|
||||
|
||||
/**
|
||||
* 电话
|
||||
*/
|
||||
private String phone;
|
||||
|
||||
/**
|
||||
* 邮箱
|
||||
*/
|
||||
private String email;
|
||||
|
||||
/**
|
||||
* 状态 0-正常 1-注销 2-封号
|
||||
*/
|
||||
private Integer userStatus;
|
||||
|
||||
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
private Date updateTime;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
private Date createTime;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private Integer userRole;
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
package com.cj.jiaqingjiayi.model.request.user;
|
||||
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
public class UserUpdateMyRequest implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1864770371473794809L;
|
||||
/**
|
||||
* 用户名
|
||||
*/
|
||||
private String userName;
|
||||
|
||||
|
||||
/**
|
||||
* 用户头像
|
||||
*/
|
||||
private String avatarUrl;
|
||||
|
||||
/**
|
||||
* 性别 男 女
|
||||
*/
|
||||
private String gender;
|
||||
|
||||
/**
|
||||
* 电话
|
||||
*/
|
||||
private String phone;
|
||||
|
||||
/**
|
||||
* 邮箱
|
||||
*/
|
||||
private String email;
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
package com.cj.jiaqingjiayi.model.request.user;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* @author Shier
|
||||
* CreateTime 2023/5/11 12:24
|
||||
*/
|
||||
@Data
|
||||
public class UserUpdatePasswordRequest implements Serializable {
|
||||
|
||||
|
||||
private static final long serialVersionUID = 5430586373534242807L;
|
||||
/**
|
||||
* 原密码
|
||||
*/
|
||||
private String userPassword;
|
||||
|
||||
/**
|
||||
* 新密码
|
||||
*/
|
||||
private String newPassword;
|
||||
/**
|
||||
* 确认新密码
|
||||
*/
|
||||
private String checkNewPassword;
|
||||
}
|
|
@ -0,0 +1,58 @@
|
|||
package com.cj.jiaqingjiayi.model.request.user;
|
||||
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 用户更新请求
|
||||
*
|
||||
* @author gm
|
||||
*/
|
||||
@Data
|
||||
public class UserUpdateRequest implements Serializable {
|
||||
|
||||
private Long id;
|
||||
/**
|
||||
* 用户昵称
|
||||
*/
|
||||
private String userName;
|
||||
|
||||
/**
|
||||
* 用户头像
|
||||
*/
|
||||
private String avatarUrl;
|
||||
|
||||
/**
|
||||
* 性别
|
||||
*/
|
||||
private Integer gender;
|
||||
|
||||
/**
|
||||
* 电话
|
||||
*/
|
||||
private String phone;
|
||||
|
||||
/**
|
||||
* 邮箱
|
||||
*/
|
||||
private String email;
|
||||
|
||||
/**
|
||||
* 状态 0 - 正常 1 - 封禁
|
||||
*/
|
||||
private Integer userStates;
|
||||
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
private Date updateTime;
|
||||
|
||||
|
||||
/**
|
||||
* 用户 or 管理员
|
||||
*/
|
||||
private Integer userRole;
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
package com.cj.jiaqingjiayi.model.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
public class AttributeVO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 7506939017812523180L;
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 属性名称
|
||||
*/
|
||||
private String attributeName;
|
||||
|
||||
/**
|
||||
* 属性状态:0在售,1停售
|
||||
*/
|
||||
private Integer attributeStatus;
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,119 @@
|
|||
package com.cj.jiaqingjiayi.model.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 商家视图(管理员视角)
|
||||
*/
|
||||
@Data
|
||||
public class BusinessAdminVO implements Serializable {
|
||||
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1250238798844609277L;
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 商家id
|
||||
*/
|
||||
private Long businessId;
|
||||
|
||||
/**
|
||||
* 用户id
|
||||
*/
|
||||
private Long userId;
|
||||
|
||||
/**
|
||||
* 门店名称
|
||||
*/
|
||||
private String businessName;
|
||||
|
||||
/**
|
||||
* 门店头像
|
||||
*/
|
||||
private String businessAvatar;
|
||||
|
||||
/**
|
||||
* 门店手机号
|
||||
*/
|
||||
private String businessPhone;
|
||||
|
||||
/**
|
||||
* 店铺详细地址
|
||||
*/
|
||||
private String address;
|
||||
|
||||
/**
|
||||
* 门店简介
|
||||
*/
|
||||
private String businessProfile;
|
||||
|
||||
/**
|
||||
* 商家相册
|
||||
*/
|
||||
private String businessImages;
|
||||
|
||||
/**
|
||||
* 分类id
|
||||
*/
|
||||
private Long categoryId;
|
||||
|
||||
/**
|
||||
* 店主名
|
||||
*/
|
||||
private String shopkeeper;
|
||||
|
||||
/**
|
||||
* 营业执照
|
||||
*/
|
||||
private String license;
|
||||
|
||||
/**
|
||||
* 身份证正面
|
||||
*/
|
||||
private String frontIdCard;
|
||||
|
||||
/**
|
||||
* 身份证反面
|
||||
*/
|
||||
private String backIdCard;
|
||||
|
||||
/**
|
||||
* 银行卡号
|
||||
*/
|
||||
private String bankCard;
|
||||
|
||||
/**
|
||||
* 开始营业时间
|
||||
*/
|
||||
private String startBusiness;
|
||||
|
||||
/**
|
||||
* 结束营业时间
|
||||
*/
|
||||
private String endBusiness;
|
||||
|
||||
/**
|
||||
* 状态:0禁用,1启用
|
||||
*/
|
||||
private Integer state;
|
||||
|
||||
/**
|
||||
* 店铺状态:0休业,1营业
|
||||
*/
|
||||
private Integer storeStatus;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
private Date createTime;
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,89 @@
|
|||
package com.cj.jiaqingjiayi.model.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 商家视图 (用户视角)
|
||||
*
|
||||
*
|
||||
*/
|
||||
@Data
|
||||
public class BusinessVO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1672328670137974814L;
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 用户id
|
||||
*/
|
||||
private Long userId;
|
||||
|
||||
/**
|
||||
* 门店名称
|
||||
*/
|
||||
private String businessName;
|
||||
|
||||
/**
|
||||
* 门店头像
|
||||
*/
|
||||
private String businessAvatar;
|
||||
|
||||
/**
|
||||
* 门店手机号
|
||||
*/
|
||||
private String businessPhone;
|
||||
|
||||
/**
|
||||
* 店铺详细地址
|
||||
*/
|
||||
private String address;
|
||||
|
||||
/**
|
||||
* 门店简介
|
||||
*/
|
||||
private String businessProfile;
|
||||
|
||||
/**
|
||||
* 商家相册
|
||||
*/
|
||||
private String businessImages;
|
||||
|
||||
/**
|
||||
* 开始营业时间
|
||||
*/
|
||||
private String startBusiness;
|
||||
|
||||
/**
|
||||
* 结束营业时间
|
||||
*/
|
||||
private String endBusiness;
|
||||
|
||||
/**
|
||||
* 月售
|
||||
*/
|
||||
private Long monthlySales;
|
||||
|
||||
/**
|
||||
* 分类id
|
||||
*/
|
||||
private Long categoryId;
|
||||
|
||||
/**
|
||||
* 店铺状态:0休业,1营业
|
||||
*/
|
||||
private Integer storeStatus;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
private Date createTime;
|
||||
|
||||
}
|
|
@ -0,0 +1,54 @@
|
|||
package com.cj.jiaqingjiayi.model.vo;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 购物车表
|
||||
* @TableName cart
|
||||
*/
|
||||
@TableName(value ="cart")
|
||||
@Data
|
||||
public class CartVO implements Serializable {
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 商家id
|
||||
*/
|
||||
private Long businessId;
|
||||
|
||||
/**
|
||||
* 商品id
|
||||
*/
|
||||
private Long commoditiesId;
|
||||
|
||||
/**
|
||||
* 商品数量
|
||||
*/
|
||||
private Integer quantity;
|
||||
|
||||
/**
|
||||
* 当前选择规格的价格
|
||||
*/
|
||||
private BigDecimal price;
|
||||
|
||||
/**
|
||||
* 小计(单价 * 数量)
|
||||
*/
|
||||
private BigDecimal subtotal;
|
||||
|
||||
/**
|
||||
* 已选规格属性列表
|
||||
*/
|
||||
private String selectedOptions;
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
package com.cj.jiaqingjiayi.model.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class CommoditiesVO {
|
||||
/**
|
||||
* 商品名称
|
||||
*/
|
||||
private String CommoditiesName;
|
||||
|
||||
/**
|
||||
* 商品图片
|
||||
*/
|
||||
private String CommoditiesImage;
|
||||
|
||||
/**
|
||||
* 商品价格
|
||||
*/
|
||||
private Double CommoditiesPrice;
|
||||
|
||||
|
||||
/**
|
||||
* 库存数量
|
||||
*/
|
||||
private Integer inventoryStatus;
|
||||
|
||||
/**
|
||||
* 商品状态:上架,下架
|
||||
*/
|
||||
private String status;
|
||||
/**
|
||||
* 是否有规格(0:没有,1:有)
|
||||
*/
|
||||
private Integer isSpecification = 0;
|
||||
}
|
|
@ -0,0 +1,59 @@
|
|||
package com.cj.jiaqingjiayi.model.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 已登录用户视图(脱敏)
|
||||
* @author bsz
|
||||
*/
|
||||
@Data
|
||||
public class LoginUserVO implements Serializable {
|
||||
|
||||
|
||||
/**
|
||||
* 用户 id
|
||||
*/
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 用户昵称
|
||||
*/
|
||||
private String username;
|
||||
|
||||
/**
|
||||
* 用户头像
|
||||
*/
|
||||
private String avatarUrl;
|
||||
|
||||
/**
|
||||
* 性别
|
||||
*/
|
||||
private Integer gender;
|
||||
|
||||
/**
|
||||
* 手机号
|
||||
*/
|
||||
private String phone;
|
||||
|
||||
/**
|
||||
* 用户角色:user/admin
|
||||
*/
|
||||
private Integer userRole;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
private Date createTime;
|
||||
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
private Date updateTime;
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 6304492672093490894L;
|
||||
}
|
|
@ -0,0 +1,68 @@
|
|||
package com.cj.jiaqingjiayi.model.vo;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
public class ManicuristVO {
|
||||
/**
|
||||
* 美甲师唯一标识(主键,自增)
|
||||
*/
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 用户ID(关联用户表)
|
||||
*/
|
||||
private Long userId;
|
||||
|
||||
/**
|
||||
* 商家ID(关联商家表)
|
||||
*/
|
||||
private Long businessId;
|
||||
|
||||
/**
|
||||
* 美甲师姓名
|
||||
*/
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 性别
|
||||
*/
|
||||
private Integer gender;
|
||||
|
||||
/**
|
||||
* 美甲师联系电话
|
||||
*/
|
||||
private String phone;
|
||||
|
||||
/**
|
||||
* 美甲师电子邮件
|
||||
*/
|
||||
private String email;
|
||||
|
||||
/**
|
||||
* 美甲师入职日期
|
||||
*/
|
||||
private Date employment_date;
|
||||
|
||||
/**
|
||||
* 美甲师的专长(如法式美甲、彩绘等)
|
||||
*/
|
||||
private String specialties;
|
||||
|
||||
/**
|
||||
* 美甲师的服务评分
|
||||
*/
|
||||
private BigDecimal rating;
|
||||
|
||||
/**
|
||||
* 美甲师头像的存储路径或链接
|
||||
*/
|
||||
private String manicuristAvatar;
|
||||
|
||||
@TableField(exist = false)
|
||||
private static final long serialVersionUID = 1L;
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
package com.cj.jiaqingjiayi.model.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class SpecificationsVO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 7672330198150498714L;
|
||||
/**
|
||||
* 规格id
|
||||
*/
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 规格名称
|
||||
*/
|
||||
private String specificationsName;
|
||||
|
||||
/**
|
||||
* 该规格的所有属性
|
||||
*/
|
||||
private List<AttributeVO> attributeVOList;
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
package com.cj.jiaqingjiayi.service;
|
||||
|
||||
import com.cj.jiaqingjiayi.model.domain.Attribute;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.cj.jiaqingjiayi.model.vo.SpecificationsVO;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author 高木
|
||||
* @description 针对表【attribute(属性表)】的数据库操作Service
|
||||
* @createDate 2024-08-21 16:29:45
|
||||
*/
|
||||
public interface AttributeService extends IService<Attribute> {
|
||||
|
||||
/**
|
||||
* 根据规格id获取属性脱敏列表
|
||||
*/
|
||||
List<SpecificationsVO> getBySpecificationsVoId(List<SpecificationsVO> specificationsVOList);
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
package com.cj.jiaqingjiayi.service;
|
||||
|
||||
import com.cj.jiaqingjiayi.model.domain.Business;
|
||||
import com.cj.jiaqingjiayi.model.domain.BusinessAuth;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.cj.jiaqingjiayi.model.vo.BusinessAdminVO;
|
||||
|
||||
/**
|
||||
* @author 高木
|
||||
* @description 针对表【business_auth(商家认证)】的数据库操作Service
|
||||
* @createDate 2024-07-28 17:18:28
|
||||
*/
|
||||
public interface BusinessAuthService extends IService<BusinessAuth> {
|
||||
|
||||
/**
|
||||
* 获取脱敏的商家信息
|
||||
*/
|
||||
BusinessAdminVO getBusinessAdminVO(Business business);
|
||||
}
|
|
@ -0,0 +1,54 @@
|
|||
package com.cj.jiaqingjiayi.service;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.cj.jiaqingjiayi.model.domain.Business;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.cj.jiaqingjiayi.model.domain.BusinessAuth;
|
||||
import com.cj.jiaqingjiayi.model.domain.User;
|
||||
import com.cj.jiaqingjiayi.model.request.business.BusinessQueryRequest;
|
||||
import com.cj.jiaqingjiayi.model.vo.BusinessVO;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author 高木
|
||||
* @description 针对表【business(商家)】的数据库操作Service
|
||||
* @createDate 2024-07-28 17:16:33
|
||||
*/
|
||||
public interface BusinessService extends IService<Business> {
|
||||
|
||||
/**
|
||||
* 添加商户和商家的账户以及填充认证信息
|
||||
* @param user
|
||||
* @param business
|
||||
* @param businessAuth
|
||||
*/
|
||||
void addBusiness(User user, Business business, BusinessAuth businessAuth);
|
||||
|
||||
/**
|
||||
*校验
|
||||
*/
|
||||
void validUser(User user, boolean add);
|
||||
|
||||
void validBusiness(Business business, boolean add);
|
||||
|
||||
void validBusinessAuth(BusinessAuth businessAuth, boolean add);
|
||||
|
||||
/**
|
||||
* 获取查询条件
|
||||
*/
|
||||
QueryWrapper<Business> getQueryWrapper(BusinessQueryRequest businessQueryRequest);
|
||||
|
||||
public BusinessVO getBusinessVO(Business business);
|
||||
/**
|
||||
* 获取脱敏的商家信息
|
||||
*/
|
||||
List<BusinessVO> getBusinessVO(List<Business> businessList);
|
||||
|
||||
|
||||
/**
|
||||
* 获取当前登录商家
|
||||
*/
|
||||
Business getLoginBusiness(HttpServletRequest request);
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
package com.cj.jiaqingjiayi.service;
|
||||
|
||||
import com.cj.jiaqingjiayi.model.domain.Cart;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.cj.jiaqingjiayi.model.request.cart.CartAddRequest;
|
||||
import com.cj.jiaqingjiayi.model.request.cart.CartUpdateRequest;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
/**
|
||||
* @author 高木
|
||||
* @description 针对表【cart(购物车表)】的数据库操作Service
|
||||
* @createDate 2024-09-05 15:15:56
|
||||
*/
|
||||
public interface CartService extends IService<Cart> {
|
||||
|
||||
/**
|
||||
* 校验
|
||||
*/
|
||||
void validCart(CartAddRequest cartAddRequest);
|
||||
|
||||
/**
|
||||
* 添加菜品
|
||||
*/
|
||||
Long addCart (CartAddRequest cartAddRequest, HttpServletRequest request);
|
||||
|
||||
/**
|
||||
* 更新购物车菜品
|
||||
*/
|
||||
Boolean updateCart(CartUpdateRequest cartUpdateRequest, HttpServletRequest request);
|
||||
|
||||
/**
|
||||
* 删除购物车菜品
|
||||
*/
|
||||
Boolean deleteCart(Long cartId, HttpServletRequest request);
|
||||
|
||||
}
|
|
@ -0,0 +1,54 @@
|
|||
package com.cj.jiaqingjiayi.service;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.cj.jiaqingjiayi.model.domain.Commodities;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.cj.jiaqingjiayi.model.request.Commodities.CommoditiesQueryRequest;
|
||||
import com.cj.jiaqingjiayi.model.vo.CommoditiesVO;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author 高木
|
||||
* @description 针对表【commodities(商品表)】的数据库操作Service
|
||||
* @createDate 2024-08-20 19:55:49
|
||||
*/
|
||||
public interface CommoditiesService extends IService<Commodities> {
|
||||
|
||||
/**
|
||||
* 校验
|
||||
*/
|
||||
void validCommodities(Commodities commodities, Boolean update);
|
||||
|
||||
/**
|
||||
* 添加商品
|
||||
*/
|
||||
Long addCommodities(Commodities commodities);
|
||||
|
||||
/**
|
||||
* 根据分组id删除商品
|
||||
*/
|
||||
void removeByCommoditiesGroupId(Long commoditiesId);
|
||||
|
||||
/**
|
||||
* 更新菜品
|
||||
*/
|
||||
Boolean updateCommodities(Commodities commodities);
|
||||
|
||||
/**
|
||||
* 获取商品脱敏信息
|
||||
*/
|
||||
CommoditiesVO getCommoditiesVO(Commodities commodities);
|
||||
|
||||
/**
|
||||
* 获取商品查询条件
|
||||
*/
|
||||
QueryWrapper<Commodities> getWrapper(CommoditiesQueryRequest commoditiesQueryRequest);
|
||||
|
||||
/**
|
||||
* 获取商品脱敏信信息
|
||||
*/
|
||||
List<CommoditiesVO> getCommoditiesVOList(List<Commodities> commoditiesVOList);
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
package com.cj.jiaqingjiayi.service;
|
||||
|
||||
import com.cj.jiaqingjiayi.model.domain.ManicuristAuth;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
/**
|
||||
* @author 高木
|
||||
* @description 针对表【manicurist_auth(美甲师认证表)】的数据库操作Service
|
||||
* @createDate 2024-09-23 18:46:06
|
||||
*/
|
||||
public interface ManicuristAuthService extends IService<ManicuristAuth> {
|
||||
|
||||
}
|
|
@ -0,0 +1,42 @@
|
|||
package com.cj.jiaqingjiayi.service;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.cj.jiaqingjiayi.model.domain.*;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.cj.jiaqingjiayi.model.request.business.BusinessQueryRequest;
|
||||
import com.cj.jiaqingjiayi.model.request.manicurist.ManicuristQueryRequest;
|
||||
|
||||
/**
|
||||
* @author 高木
|
||||
* @description 针对表【manicurist(美甲师表)】的数据库操作Service
|
||||
* @createDate 2024-09-23 19:23:08
|
||||
*/
|
||||
public interface ManicuristService extends IService<Manicurist> {
|
||||
|
||||
/**
|
||||
* 添加美甲师和商家的账户以及填充认证信息
|
||||
* @param user
|
||||
* @param manicurist
|
||||
* @param manicuristAuth
|
||||
*/
|
||||
void addManicurist(User user, Manicurist manicurist, ManicuristAuth manicuristAuth);
|
||||
|
||||
/**
|
||||
*校验
|
||||
*/
|
||||
void validUser(User user, boolean add);
|
||||
|
||||
void validManicurist(Manicurist manicurist, boolean add);
|
||||
|
||||
void validManicuristAuth(ManicuristAuth manicuristAuth, boolean add);
|
||||
|
||||
//检验商家是否存在
|
||||
void validManBus(Long businessId);
|
||||
|
||||
void deleteMan(long id);
|
||||
|
||||
/**
|
||||
* 获取查询条件
|
||||
*/
|
||||
QueryWrapper<Manicurist> getQueryWrapper(ManicuristQueryRequest manicuristQueryRequest);
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
package com.cj.jiaqingjiayi.service;
|
||||
|
||||
import com.cj.jiaqingjiayi.model.domain.SpecificationsCommodities;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.cj.jiaqingjiayi.model.vo.SpecificationsVO;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author 高木
|
||||
* @description 针对表【specifications_commodities(商品和规格的中间表)】的数据库操作Service
|
||||
* @createDate 2024-08-21 16:21:41
|
||||
*/
|
||||
public interface SpecificationsCommoditiesService extends IService<SpecificationsCommodities> {
|
||||
|
||||
/**
|
||||
* 添加中间表信息
|
||||
*/
|
||||
Boolean add(Long commoditiesId, List<Long> specificationsIds);
|
||||
|
||||
/**
|
||||
* 删除中间表信息
|
||||
*/
|
||||
void deleteByCommoditiesId(Long commoditiesId);
|
||||
|
||||
/**
|
||||
* 更新中间表信息
|
||||
*/
|
||||
Boolean updateByCommoditiesId(Long commoditiesId, List<Long> specificationsIds);
|
||||
|
||||
/**
|
||||
* 根据中间表数据中的规格id获取规格信息和属性
|
||||
*/
|
||||
List<SpecificationsVO> getSpecificationsAddAttribute(List<SpecificationsCommodities> specificationsCommoditiesList);
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
package com.cj.jiaqingjiayi.service;
|
||||
|
||||
import com.cj.jiaqingjiayi.model.domain.Specifications;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
/**
|
||||
* @author 高木
|
||||
* @description 针对表【specifications(规格表)】的数据库操作Service
|
||||
* @createDate 2024-08-21 16:20:48
|
||||
*/
|
||||
public interface SpecificationsService extends IService<Specifications> {
|
||||
|
||||
}
|
|
@ -0,0 +1,80 @@
|
|||
package com.cj.jiaqingjiayi.service;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.cj.jiaqingjiayi.model.domain.User;
|
||||
import com.cj.jiaqingjiayi.model.request.user.UserSearchRequest;
|
||||
import com.cj.jiaqingjiayi.model.request.user.UserUpdatePasswordRequest;
|
||||
import com.cj.jiaqingjiayi.model.vo.LoginUserVO;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
import static com.cj.jiaqingjiayi.contant.UserConstant.ADMIN_ROLE;
|
||||
import static com.cj.jiaqingjiayi.contant.UserConstant.USER_LOGIN_STATE;
|
||||
|
||||
|
||||
public interface UserService extends IService<User> {
|
||||
/**
|
||||
* 用户注册
|
||||
*
|
||||
* @param userAccount 登陆账号
|
||||
* @param userPassword 登录密码
|
||||
* @param checkPassword 校验密码
|
||||
* @return 新用户id
|
||||
*/
|
||||
long userRegister(String userAccount, String userPassword, String checkPassword);
|
||||
|
||||
/**
|
||||
*
|
||||
* @param userAccount 登陆账号
|
||||
* @param userPassword 登陆密码
|
||||
* @param request 返回请求
|
||||
* @return 脱敏后的用户信息
|
||||
*/
|
||||
LoginUserVO userLogin(String userAccount, String userPassword, HttpServletRequest request);
|
||||
|
||||
/**
|
||||
* 用户注销
|
||||
* @param request
|
||||
* @return
|
||||
*/
|
||||
int userLogout(HttpServletRequest request);
|
||||
|
||||
/**
|
||||
* 用户脱敏
|
||||
* @param user
|
||||
* @return
|
||||
*/
|
||||
User getSafetyUser(User user);
|
||||
|
||||
/**
|
||||
* 获取当前用户登录信息
|
||||
*
|
||||
* @param request
|
||||
* @return
|
||||
*/
|
||||
User getLogingUser(HttpServletRequest request);
|
||||
|
||||
/**
|
||||
* 用户修改密码
|
||||
* @param userUpdatePasswordRequest
|
||||
* @param request
|
||||
* @return
|
||||
*/
|
||||
boolean updateUserPassword(UserUpdatePasswordRequest userUpdatePasswordRequest, HttpServletRequest request);
|
||||
|
||||
/**
|
||||
* 分页条件
|
||||
* @param searchRequest
|
||||
* @return
|
||||
*/
|
||||
QueryWrapper<User> getQueryWrapper(UserSearchRequest searchRequest);
|
||||
|
||||
LoginUserVO getLoginUserVO(User user);
|
||||
|
||||
/**
|
||||
* 判断是否为管理员
|
||||
* @return
|
||||
*/
|
||||
void isAdmin(HttpServletRequest request);
|
||||
}
|
|
@ -0,0 +1,63 @@
|
|||
package com.cj.jiaqingjiayi.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.cj.jiaqingjiayi.model.domain.Attribute;
|
||||
import com.cj.jiaqingjiayi.model.vo.AttributeVO;
|
||||
import com.cj.jiaqingjiayi.model.vo.SpecificationsVO;
|
||||
import com.cj.jiaqingjiayi.service.AttributeService;
|
||||
import com.cj.jiaqingjiayi.mapper.AttributeMapper;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author 高木
|
||||
* @description 针对表【attribute(属性表)】的数据库操作Service实现
|
||||
* @createDate 2024-08-21 16:29:45
|
||||
*/
|
||||
@Service
|
||||
public class AttributeServiceImpl extends ServiceImpl<AttributeMapper, Attribute>
|
||||
implements AttributeService{
|
||||
|
||||
@Override
|
||||
public List<SpecificationsVO> getBySpecificationsVoId(List<SpecificationsVO> specificationsVOList) {
|
||||
if (CollectionUtils.isEmpty(specificationsVOList)) {
|
||||
return specificationsVOList;
|
||||
}
|
||||
return specificationsVOList.stream().peek(item ->{
|
||||
Long specificationsId = item.getId();
|
||||
//根据规格id获取属性
|
||||
QueryWrapper<Attribute> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("specificationsId",specificationsId);
|
||||
List<Attribute> attributeList = this.list(queryWrapper);
|
||||
//获取属性脱敏信息
|
||||
List<AttributeVO> attributeVOList = getAttributeVOList(attributeList);
|
||||
item.setAttributeVOList(attributeVOList);
|
||||
}).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取脱敏属性列表
|
||||
* @param attributes 为脱敏列表
|
||||
* @return 脱敏列表
|
||||
*/
|
||||
private List<AttributeVO> getAttributeVOList (List<Attribute> attributes) {
|
||||
if (CollectionUtils.isEmpty(attributes)) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
return attributes.stream().map(item -> {
|
||||
AttributeVO attributeVO = new AttributeVO();
|
||||
BeanUtils.copyProperties(item,attributeVO);
|
||||
return attributeVO;
|
||||
}).collect(Collectors.toList());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,55 @@
|
|||
package com.cj.jiaqingjiayi.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.cj.jiaqingjiayi.common.ErrorCode;
|
||||
import com.cj.jiaqingjiayi.exception.BusinessException;
|
||||
import com.cj.jiaqingjiayi.model.domain.Business;
|
||||
import com.cj.jiaqingjiayi.model.domain.BusinessAuth;
|
||||
import com.cj.jiaqingjiayi.model.vo.BusinessAdminVO;
|
||||
import com.cj.jiaqingjiayi.service.BusinessAuthService;
|
||||
import com.cj.jiaqingjiayi.mapper.BusinessAuthMapper;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* @author 高木
|
||||
* @description 针对表【business_auth(商家认证)】的数据库操作Service实现
|
||||
* @createDate 2024-07-28 17:18:28
|
||||
*/
|
||||
@Service
|
||||
public class BusinessAuthServiceImpl extends ServiceImpl<BusinessAuthMapper, BusinessAuth>
|
||||
implements BusinessAuthService{
|
||||
|
||||
@Override
|
||||
public BusinessAdminVO getBusinessAdminVO(Business business) {
|
||||
if (business == null) {
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR);
|
||||
}
|
||||
BusinessAdminVO businessAdminVO = new BusinessAdminVO();
|
||||
|
||||
//关联认证信息 传入到视图中
|
||||
BusinessAuth businessAuth = new BusinessAuth();
|
||||
Long id = business.getId();
|
||||
if (id != null && id > 0) {
|
||||
QueryWrapper<BusinessAuth> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("businessId", id);
|
||||
businessAuth = this.getOne(queryWrapper);
|
||||
}
|
||||
|
||||
BeanUtils.copyProperties(business, businessAdminVO);
|
||||
|
||||
if (businessAuth == null) {
|
||||
throw new BusinessException(ErrorCode.NULL_ERROR);
|
||||
}
|
||||
|
||||
BeanUtils.copyProperties(businessAuth, businessAdminVO);
|
||||
|
||||
return businessAdminVO;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,212 @@
|
|||
package com.cj.jiaqingjiayi.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.cj.jiaqingjiayi.common.ErrorCode;
|
||||
import com.cj.jiaqingjiayi.contant.CommonConstant;
|
||||
import com.cj.jiaqingjiayi.exception.BusinessException;
|
||||
import com.cj.jiaqingjiayi.exception.ThrowUtils;
|
||||
import com.cj.jiaqingjiayi.model.domain.Business;
|
||||
import com.cj.jiaqingjiayi.model.domain.BusinessAuth;
|
||||
import com.cj.jiaqingjiayi.model.domain.User;
|
||||
import com.cj.jiaqingjiayi.model.request.business.BusinessQueryRequest;
|
||||
import com.cj.jiaqingjiayi.model.vo.BusinessVO;
|
||||
import com.cj.jiaqingjiayi.service.BusinessAuthService;
|
||||
import com.cj.jiaqingjiayi.service.BusinessService;
|
||||
import com.cj.jiaqingjiayi.mapper.BusinessMapper;
|
||||
import com.cj.jiaqingjiayi.service.ManicuristService;
|
||||
import com.cj.jiaqingjiayi.service.UserService;
|
||||
import com.cj.jiaqingjiayi.utils.RegexUtils;
|
||||
import com.cj.jiaqingjiayi.utils.SqlUtils;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author 高木
|
||||
* @description 针对表【business(商家)】的数据库操作Service实现
|
||||
* @createDate 2024-07-28 17:16:33
|
||||
*/
|
||||
@Service
|
||||
public class BusinessServiceImpl extends ServiceImpl<BusinessMapper, Business>
|
||||
implements BusinessService{
|
||||
|
||||
@Resource
|
||||
private UserService userService;
|
||||
|
||||
|
||||
@Resource
|
||||
private BusinessAuthService businessAuthService;
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public synchronized void addBusiness(User user, Business business, BusinessAuth businessAuth) {
|
||||
boolean save = userService.save(user);
|
||||
ThrowUtils.throwIf(!save, ErrorCode.OPERATION_ERROR, "创建商家失败");
|
||||
|
||||
//商家绑定user
|
||||
business.setUserId(user.getId());
|
||||
boolean save1 = this.save(business);
|
||||
ThrowUtils.throwIf(!save1, ErrorCode.OPERATION_ERROR, "绑定id失败");
|
||||
//添加认证信息
|
||||
businessAuth.setBusinessId(business.getId());
|
||||
boolean save2 = businessAuthService.save(businessAuth);
|
||||
ThrowUtils.throwIf(!save2, ErrorCode.OPERATION_ERROR, "商家认证信息失败");
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void validUser(User user, boolean add) {
|
||||
ThrowUtils.throwIf(user == null , ErrorCode.NULL_ERROR);
|
||||
|
||||
String userAccount = user.getUserAccount();
|
||||
String userPassword = user.getUserPassword();
|
||||
|
||||
if (add) {
|
||||
ThrowUtils.throwIf(StringUtils.isAllBlank(userAccount, userPassword), ErrorCode.PARAMS_ERROR);
|
||||
|
||||
if (userAccount.length() < 4) {
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR, "用户账号不符合要求");
|
||||
}
|
||||
|
||||
if(userPassword.length() < 8) {
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR, "用户密码不符合要求");
|
||||
}
|
||||
|
||||
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("userAccount", userAccount);
|
||||
long count = userService.count(queryWrapper);
|
||||
if (count > 0) {
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR, "账号重复");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void validBusiness(Business business, boolean add) {
|
||||
Long id = business.getId();
|
||||
String businessName = business.getBusinessName();
|
||||
String businessAvatar = business.getBusinessAvatar();
|
||||
String businessPhone = business.getBusinessPhone();
|
||||
String address = business.getAddress();
|
||||
String startBusiness = business.getStartBusiness();
|
||||
String endBusiness = business.getEndBusiness();
|
||||
|
||||
//只在添加时严格校验 保证商家信息是全的
|
||||
if (add) {
|
||||
if (StringUtils.isAnyBlank(businessName, businessAvatar, businessPhone, address, startBusiness, endBusiness)) {
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR, "商家信息不全");
|
||||
}
|
||||
}
|
||||
|
||||
Business byId = getById(id);
|
||||
ThrowUtils.throwIf(byId == null, ErrorCode.NULL_ERROR, "商家不存在");
|
||||
|
||||
// 有参数可以校验参数 保证商家名字唯一
|
||||
if (StringUtils.isNotBlank(businessName)) {
|
||||
QueryWrapper<Business> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("businessName", businessName);
|
||||
long count = this.count(queryWrapper);
|
||||
ThrowUtils.throwIf(count > 0, ErrorCode.OPERATION_ERROR, "门店名称重复");
|
||||
}
|
||||
|
||||
//校验手机号格式
|
||||
if (StringUtils.isNotBlank(businessPhone)) {
|
||||
boolean phoneInvalid = RegexUtils.isPhoneInvalid(businessPhone);
|
||||
ThrowUtils.throwIf(phoneInvalid, ErrorCode.PARAMS_ERROR, "手机号格式错误");
|
||||
|
||||
QueryWrapper<Business> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("businessPhone", businessPhone);
|
||||
long count = this.count(queryWrapper);
|
||||
ThrowUtils.throwIf(count > 0 , ErrorCode.OPERATION_ERROR, "手机号重复");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void validBusinessAuth(BusinessAuth businessAuth, boolean add) {
|
||||
//只在添加时严格校验 保证商家认证信息是全的
|
||||
if (add) {
|
||||
String shopkeeper = businessAuth.getShopkeeper();
|
||||
String license = businessAuth.getLicense();
|
||||
String frontIdCard = businessAuth.getFrontIdCard();
|
||||
String backIdCard = businessAuth.getBackIdCard();
|
||||
String bankCard = businessAuth.getBankCard();
|
||||
if (StringUtils.isAnyBlank(shopkeeper, license, frontIdCard, bankCard, backIdCard)) {
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR, "商家认证信息不全");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public QueryWrapper<Business> getQueryWrapper(BusinessQueryRequest businessQueryRequest) {
|
||||
|
||||
if (businessQueryRequest == null) {
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR, "请求参数为空");
|
||||
}
|
||||
|
||||
Long id = businessQueryRequest.getId();
|
||||
Long userId = businessQueryRequest.getUserId();
|
||||
Long categoryId = businessQueryRequest.getCategoryId();
|
||||
Integer state = businessQueryRequest.getState();
|
||||
Integer storeStatus = businessQueryRequest.getStoreStatus();
|
||||
String businessName = businessQueryRequest.getBusinessName();
|
||||
String address = businessQueryRequest.getAddress();
|
||||
String businessProfile = businessQueryRequest.getBusinessProfile();
|
||||
String sortField = businessQueryRequest.getSortField();
|
||||
String sortOrder = businessQueryRequest.getSortOrder();
|
||||
QueryWrapper<Business> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq(ObjectUtils.isNotEmpty(id), "id", id);
|
||||
queryWrapper.eq(ObjectUtils.isNotEmpty(userId), "userId", userId);
|
||||
queryWrapper.eq(ObjectUtils.isNotEmpty(categoryId), "categoryId", categoryId);
|
||||
queryWrapper.eq(ObjectUtils.isNotEmpty(state), "state", state);
|
||||
queryWrapper.eq(ObjectUtils.isNotEmpty(storeStatus), "storeStatus", storeStatus);
|
||||
queryWrapper.like(StringUtils.isNotBlank(businessName), "businessName", businessName);
|
||||
queryWrapper.like(StringUtils.isNotBlank(address), "address", address);
|
||||
queryWrapper.like(StringUtils.isNotBlank(businessProfile), "businessProfile", businessProfile);
|
||||
queryWrapper.orderBy(SqlUtils.validSortField(sortField), sortOrder.equals(CommonConstant.SORT_ORDER_ASC),
|
||||
sortField);
|
||||
return queryWrapper;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BusinessVO getBusinessVO(Business business) {
|
||||
BusinessVO businessVO = new BusinessVO();
|
||||
if (business == null) {
|
||||
return null;
|
||||
}
|
||||
BeanUtils.copyProperties(business,businessVO);
|
||||
return businessVO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<BusinessVO> getBusinessVO(List<Business> businessList) {
|
||||
if (CollectionUtils.isEmpty(businessList)) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
return businessList.stream().map(this::getBusinessVO).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Business getLoginBusiness(HttpServletRequest request) {
|
||||
User loginUser = userService.getLogingUser(request);
|
||||
QueryWrapper<Business> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("userId",loginUser.getId());
|
||||
Business business = this.getOne(queryWrapper);
|
||||
ThrowUtils.throwIf(business == null,ErrorCode.NOT_FOUND_ERROR,"当前用户没有关联商家");
|
||||
return business;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,143 @@
|
|||
package com.cj.jiaqingjiayi.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.cj.jiaqingjiayi.common.ErrorCode;
|
||||
import com.cj.jiaqingjiayi.exception.BusinessException;
|
||||
import com.cj.jiaqingjiayi.exception.ThrowUtils;
|
||||
import com.cj.jiaqingjiayi.model.domain.Business;
|
||||
import com.cj.jiaqingjiayi.model.domain.Cart;
|
||||
import com.cj.jiaqingjiayi.model.domain.Commodities;
|
||||
import com.cj.jiaqingjiayi.model.domain.User;
|
||||
import com.cj.jiaqingjiayi.model.request.cart.CartAddRequest;
|
||||
import com.cj.jiaqingjiayi.model.request.cart.CartUpdateRequest;
|
||||
import com.cj.jiaqingjiayi.service.BusinessService;
|
||||
import com.cj.jiaqingjiayi.service.CartService;
|
||||
import com.cj.jiaqingjiayi.mapper.CartMapper;
|
||||
import com.cj.jiaqingjiayi.service.CommoditiesService;
|
||||
import com.cj.jiaqingjiayi.service.UserService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* @author 高木
|
||||
* @description 针对表【cart(购物车表)】的数据库操作Service实现
|
||||
* @createDate 2024-09-05 15:15:56
|
||||
*/
|
||||
@Service
|
||||
public class CartServiceImpl extends ServiceImpl<CartMapper, Cart>
|
||||
implements CartService{
|
||||
|
||||
@Resource
|
||||
private UserService userService;
|
||||
|
||||
@Resource
|
||||
private BusinessService businessService;
|
||||
|
||||
@Resource
|
||||
private CommoditiesService commoditiesService;
|
||||
|
||||
@Override
|
||||
public void validCart(CartAddRequest cartAddRequest) {
|
||||
|
||||
if (cartAddRequest == null) {
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR);
|
||||
}
|
||||
|
||||
Long businessId = cartAddRequest.getBusinessId();
|
||||
Long commoditiesId = cartAddRequest.getCommoditiesId();
|
||||
Integer quantity = cartAddRequest.getQuantity();
|
||||
|
||||
if (quantity == null || quantity < 1) {
|
||||
throw new BusinessException(ErrorCode.NOT_FOUND_ERROR,"商品数量错误");
|
||||
}
|
||||
|
||||
Business business = businessService.getById(businessId);
|
||||
if (business == null) {
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR,"不存在该商家");
|
||||
}
|
||||
|
||||
Commodities commodities = commoditiesService.getById(commoditiesId);
|
||||
if (commodities == null || commodities.getStatus().equals("下架")){
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR,"不存在该商品");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long addCart(CartAddRequest cartAddRequest, HttpServletRequest request) {
|
||||
User loginUser = userService.getLogingUser(request);
|
||||
Long userId = loginUser.getId();
|
||||
Long businessId = cartAddRequest.getBusinessId();
|
||||
Long commoditiesId = cartAddRequest.getCommoditiesId();
|
||||
//计算商品价格
|
||||
Commodities commodities = commoditiesService.getById(commoditiesId);
|
||||
BigDecimal price = new BigDecimal(String.valueOf(commodities.getCommoditiesPrice()));
|
||||
//保存购物车商品
|
||||
Cart cart = new Cart();
|
||||
cart.setBusinessId(businessId);
|
||||
cart.setUserId(userId);
|
||||
cart.setPrice(price);
|
||||
cart.setCommoditiesId(commoditiesId);
|
||||
boolean save = this.save(cart);
|
||||
ThrowUtils.throwIf(!save, ErrorCode.OPERATION_ERROR);
|
||||
|
||||
return cart.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean updateCart(CartUpdateRequest cartUpdateRequest, HttpServletRequest request) {
|
||||
User loginUser = userService.getLogingUser(request);
|
||||
Long userId = loginUser.getId();
|
||||
Long commoditiesId = cartUpdateRequest.getCommoditiesId();
|
||||
String selectedOptions = cartUpdateRequest.getSelectedOptions();
|
||||
Long id = cartUpdateRequest.getId();
|
||||
ThrowUtils.throwIf(id == null,ErrorCode.OPERATION_ERROR,"购物车id不存在");
|
||||
//检验该购物车是否为登录用户的
|
||||
Cart cartId =this.getById(id);
|
||||
Long cartUserId = cartId.getUserId();
|
||||
if (userId.equals(cartUserId)) {
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR,"无法操作该购物车");
|
||||
}
|
||||
Commodities commodities = commoditiesService.getById(commoditiesId);
|
||||
BigDecimal price = new BigDecimal(String.valueOf(commodities.getCommoditiesPrice()));
|
||||
LambdaQueryWrapper<Cart> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(Cart::getId, id);
|
||||
Cart cart = this.getOne(wrapper);
|
||||
Integer quantity = cartUpdateRequest.getQuantity();
|
||||
if (cartUpdateRequest.getIsSelectedOptions()) {
|
||||
cart.setQuantity(cart.getQuantity() + quantity);
|
||||
} else {
|
||||
cart.setQuantity(quantity);
|
||||
}
|
||||
cart.setPrice(price);
|
||||
cart.setSubtotal(null);
|
||||
cart.setSelectedOptions(selectedOptions);
|
||||
|
||||
return this.updateById(cart);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean deleteCart(Long cartId, HttpServletRequest request) {
|
||||
User loginUser = userService.getLogingUser(request);
|
||||
Long userId = loginUser.getId();
|
||||
Cart cart = this.getById(cartId);
|
||||
Long cartUserId = cart.getUserId();
|
||||
|
||||
if (!userId.equals(cartUserId)) {
|
||||
throw new BusinessException(ErrorCode.OPERATION_ERROR, "该用户无权删除该购物车");
|
||||
}
|
||||
boolean remove = this.removeById(cartId);
|
||||
ThrowUtils.throwIf(!remove, ErrorCode.OPERATION_ERROR);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,176 @@
|
|||
package com.cj.jiaqingjiayi.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.cj.jiaqingjiayi.common.ErrorCode;
|
||||
|
||||
import com.cj.jiaqingjiayi.contant.CommonConstant;
|
||||
import com.cj.jiaqingjiayi.exception.BusinessException;
|
||||
import com.cj.jiaqingjiayi.exception.ThrowUtils;
|
||||
import com.cj.jiaqingjiayi.model.domain.Commodities;
|
||||
|
||||
import com.cj.jiaqingjiayi.model.domain.SpecificationsCommodities;
|
||||
import com.cj.jiaqingjiayi.model.request.Commodities.CommoditiesQueryRequest;
|
||||
import com.cj.jiaqingjiayi.model.vo.CommoditiesVO;
|
||||
import com.cj.jiaqingjiayi.service.CommoditiesService;
|
||||
import com.cj.jiaqingjiayi.mapper.CommoditiesMapper;
|
||||
import com.cj.jiaqingjiayi.service.SpecificationsCommoditiesService;
|
||||
|
||||
import com.cj.jiaqingjiayi.utils.SqlUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
|
||||
/**
|
||||
* @author 高木
|
||||
* @description 针对表【commodities(商品表)】的数据库操作Service实现
|
||||
* @createDate 2024-08-20 19:55:49
|
||||
*/
|
||||
@Service
|
||||
public class CommoditiesServiceImpl extends ServiceImpl<CommoditiesMapper, Commodities>
|
||||
implements CommoditiesService{
|
||||
|
||||
@Resource
|
||||
private SpecificationsCommoditiesService specificationsCommoditiesService;
|
||||
|
||||
@Override
|
||||
public void validCommodities(Commodities commodities, Boolean update) {
|
||||
Long id = commodities.getId();
|
||||
Long commoditiesGroupId = commodities.getCommoditiesGroupId();
|
||||
String commoditiesName = commodities.getCommoditiesName();
|
||||
Double commoditiesPrice = commodities.getCommoditiesPrice();
|
||||
String status = commodities.getStatus();
|
||||
Integer inventoryStatus = commodities.getInventoryStatus();
|
||||
|
||||
if (update) {
|
||||
if (id == null) {
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
if (StringUtils.isAnyBlank(commoditiesName,status)) {
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR);
|
||||
}
|
||||
|
||||
if (commoditiesGroupId == null || commoditiesPrice == null || inventoryStatus == null) {
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long addCommodities(Commodities commodities) {
|
||||
//判断商品是否存在
|
||||
validCommoditiesName(commodities);
|
||||
//保存代码
|
||||
boolean save = this.save(commodities);
|
||||
ThrowUtils.throwIf(!save,ErrorCode.OPERATION_ERROR);
|
||||
return commodities.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeByCommoditiesGroupId(Long commoditiesGroupId) {
|
||||
QueryWrapper<Commodities> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("commoditiesGroupId",commoditiesGroupId);
|
||||
List<Commodities> list = this.list(queryWrapper);
|
||||
//判断该分组是否有商品
|
||||
if (list.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
boolean remove = this.remove(queryWrapper);
|
||||
ThrowUtils.throwIf(!remove, ErrorCode.OPERATION_ERROR);
|
||||
//删除中间表数据
|
||||
for (Commodities commodities : list) {
|
||||
Long commoditiesId = commodities.getId();
|
||||
specificationsCommoditiesService.deleteByCommoditiesId(commoditiesId);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean updateCommodities(Commodities commodities) {
|
||||
//判断商品是否存在
|
||||
validCommoditiesName(commodities);
|
||||
//更新商品
|
||||
return this.updateById(commodities);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommoditiesVO getCommoditiesVO(Commodities commodities) {
|
||||
if (commodities == null) {
|
||||
return null;
|
||||
}
|
||||
long count = getCount(commodities);
|
||||
CommoditiesVO commoditiesVO = new CommoditiesVO();
|
||||
|
||||
if (count > 0) {
|
||||
commoditiesVO.setIsSpecification(1);
|
||||
}
|
||||
return commoditiesVO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public QueryWrapper<Commodities> getWrapper(CommoditiesQueryRequest commoditiesQueryRequest) {
|
||||
Long businessId = commoditiesQueryRequest.getBusinessId();
|
||||
Long commoditiesGroupId = commoditiesQueryRequest.getCommoditiesGroupId();
|
||||
String status = commoditiesQueryRequest.getStatus();
|
||||
String commoditiesName = commoditiesQueryRequest.getCommoditiesName();
|
||||
String sortField = commoditiesQueryRequest.getSortField();
|
||||
String sortOrder = commoditiesQueryRequest.getSortOrder();
|
||||
QueryWrapper<Commodities> wrapper = new QueryWrapper<>();
|
||||
wrapper.eq(businessId != null, "businessId", businessId);
|
||||
wrapper.eq(commoditiesGroupId != null, "commoditiesGroupId", commoditiesGroupId);
|
||||
wrapper.eq(StringUtils.isNotBlank(status), "status", status);
|
||||
wrapper.like(StringUtils.isNotBlank(commoditiesName), "commoditiesName", commoditiesName);
|
||||
wrapper.orderBy(SqlUtils.validSortField(sortField), sortOrder.equals(CommonConstant.SORT_ORDER_ASC), sortField);
|
||||
return wrapper;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<CommoditiesVO> getCommoditiesVOList(List<Commodities> commoditiesVOList) {
|
||||
if (CollectionUtils.isEmpty(commoditiesVOList)) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
return commoditiesVOList.stream().map(item->{
|
||||
long count = getCount(item);
|
||||
CommoditiesVO commoditiesVO = new CommoditiesVO();
|
||||
BeanUtils.copyProperties(item,commoditiesVO);
|
||||
if (count > 0) {
|
||||
commoditiesVO.setIsSpecification(1);
|
||||
}
|
||||
return commoditiesVO;
|
||||
}).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
private void validCommoditiesName(Commodities commodities) {
|
||||
QueryWrapper<Commodities> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("commoditiesName",commodities.getCommoditiesName());
|
||||
queryWrapper.eq("businessId",commodities.getBusinessId());
|
||||
long count = this.count(queryWrapper);
|
||||
if (commodities.getId() == null) {
|
||||
ThrowUtils.throwIf(count > 0,ErrorCode.PARAMS_ERROR,"已存在该商品");
|
||||
}
|
||||
else {
|
||||
ThrowUtils.throwIf(count > 0,ErrorCode.PARAMS_ERROR,"已存在该商品");
|
||||
}
|
||||
}
|
||||
|
||||
private long getCount(Commodities commodities) {
|
||||
Long commoditiesId = commodities.getId();
|
||||
QueryWrapper<SpecificationsCommodities> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("commoditiesId",commoditiesId);
|
||||
return specificationsCommoditiesService.count(queryWrapper);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
package com.cj.jiaqingjiayi.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.cj.jiaqingjiayi.model.domain.ManicuristAuth;
|
||||
import com.cj.jiaqingjiayi.service.ManicuristAuthService;
|
||||
import com.cj.jiaqingjiayi.mapper.ManicuristAuthMapper;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* @author 高木
|
||||
* @description 针对表【manicurist_auth(美甲师认证表)】的数据库操作Service实现
|
||||
* @createDate 2024-09-23 18:46:06
|
||||
*/
|
||||
@Service
|
||||
public class ManicuristAuthServiceImpl extends ServiceImpl<ManicuristAuthMapper, ManicuristAuth>
|
||||
implements ManicuristAuthService{
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,198 @@
|
|||
package com.cj.jiaqingjiayi.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.cj.jiaqingjiayi.common.ErrorCode;
|
||||
import com.cj.jiaqingjiayi.contant.CommonConstant;
|
||||
import com.cj.jiaqingjiayi.exception.BusinessException;
|
||||
import com.cj.jiaqingjiayi.exception.ThrowUtils;
|
||||
import com.cj.jiaqingjiayi.model.domain.*;
|
||||
import com.cj.jiaqingjiayi.model.request.business.BusinessQueryRequest;
|
||||
import com.cj.jiaqingjiayi.model.request.manicurist.ManicuristQueryRequest;
|
||||
import com.cj.jiaqingjiayi.service.*;
|
||||
import com.cj.jiaqingjiayi.mapper.ManicuristMapper;
|
||||
import com.cj.jiaqingjiayi.utils.RegexUtils;
|
||||
import com.cj.jiaqingjiayi.utils.SqlUtils;
|
||||
import lombok.Data;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @author 高木
|
||||
* @description 针对表【manicurist(美甲师表)】的数据库操作Service实现
|
||||
* @createDate 2024-09-23 19:23:08
|
||||
*/
|
||||
@Service
|
||||
public class ManicuristServiceImpl extends ServiceImpl<ManicuristMapper, Manicurist>
|
||||
implements ManicuristService{
|
||||
|
||||
@Resource
|
||||
private UserService userService;
|
||||
|
||||
@Resource
|
||||
private BusinessService businessService;
|
||||
|
||||
@Resource
|
||||
private ManicuristAuthService manicuristAuthService;
|
||||
|
||||
@Override
|
||||
public void addManicurist(User user, Manicurist manicurist, ManicuristAuth manicuristAuth) {
|
||||
boolean save = userService.save(user);
|
||||
ThrowUtils.throwIf(!save, ErrorCode.OPERATION_ERROR, "添加美甲师失败");
|
||||
|
||||
//美甲师绑定user
|
||||
manicurist.setUserId(user.getId());
|
||||
boolean save1 = this.save(manicurist);
|
||||
ThrowUtils.throwIf(!save1, ErrorCode.OPERATION_ERROR, "绑定id失败");
|
||||
//添加认证信息
|
||||
manicuristAuth.setArtistId(manicurist.getId());
|
||||
boolean save2 = manicuristAuthService.save(manicuristAuth);
|
||||
ThrowUtils.throwIf(!save2, ErrorCode.OPERATION_ERROR, "添加美甲师认证信息失败");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void validUser(User user, boolean add) {
|
||||
ThrowUtils.throwIf(user == null , ErrorCode.NULL_ERROR);
|
||||
|
||||
String userAccount = user.getUserAccount();
|
||||
String userPassword = user.getUserPassword();
|
||||
|
||||
if (add) {
|
||||
ThrowUtils.throwIf(StringUtils.isAllBlank(userAccount, userPassword), ErrorCode.PARAMS_ERROR);
|
||||
|
||||
if (userAccount.length() < 4) {
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR, "用户账号不符合要求");
|
||||
}
|
||||
|
||||
if(userPassword.length() < 8) {
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR, "用户密码不符合要求");
|
||||
}
|
||||
|
||||
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("userAccount", userAccount);
|
||||
long count = userService.count(queryWrapper);
|
||||
if (count > 0) {
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR, "账号重复");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void validManicurist(Manicurist manicurist, boolean add) {
|
||||
Long id = manicurist.getId();
|
||||
String manicuristName = manicurist.getName();
|
||||
String manicuristPhone = manicurist.getPhone();
|
||||
String gender = Integer.toString(manicurist.getGender());
|
||||
|
||||
//只在添加时严格校验 保证商家信息是全的
|
||||
if (add) {
|
||||
if (StringUtils.isAnyBlank(manicuristName, manicuristPhone, gender)) {
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR, "信息不全");
|
||||
}
|
||||
}
|
||||
|
||||
if(!add){
|
||||
Manicurist byId = this.getById(id);
|
||||
ThrowUtils.throwIf(byId == null, ErrorCode.NULL_ERROR, "美甲师不存在");
|
||||
}
|
||||
|
||||
if(StringUtils.isNotBlank(manicuristName)){
|
||||
QueryWrapper<Manicurist> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("name", manicuristName);
|
||||
long count = this.count(queryWrapper);
|
||||
ThrowUtils.throwIf(count > 0, ErrorCode.OPERATION_ERROR, "美甲师名称重复");
|
||||
}
|
||||
|
||||
//校验手机号格式
|
||||
if (StringUtils.isNotBlank(manicuristPhone)) {
|
||||
boolean phoneInvalid = RegexUtils.isPhoneInvalid(manicuristPhone);
|
||||
ThrowUtils.throwIf(phoneInvalid, ErrorCode.PARAMS_ERROR, "手机号格式错误");
|
||||
|
||||
QueryWrapper<Manicurist> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("Phone", manicuristPhone);
|
||||
long count = this.count(queryWrapper);
|
||||
ThrowUtils.throwIf(count > 0 , ErrorCode.OPERATION_ERROR, "手机号重复");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void validManicuristAuth(ManicuristAuth manicuristAuth, boolean add) {
|
||||
//只在添加时严格校验 保证认证信息是全的
|
||||
if (add) {
|
||||
String certification_number = manicuristAuth.getCertification_number();
|
||||
String certificate_path = manicuristAuth.getCertificate_path();
|
||||
String issuing_authority = manicuristAuth.getIssuing_authority();
|
||||
if (StringUtils.isAnyBlank(certification_number, certificate_path, issuing_authority)) {
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR, "美甲师认证信息不全");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void validManBus(Long businessId) {
|
||||
Business byId = businessService.getById(businessId);
|
||||
ThrowUtils.throwIf(byId == null, ErrorCode.NULL_ERROR, "商家不存在");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteMan(long id) {
|
||||
Manicurist manicurist = this.getById(id);
|
||||
ThrowUtils.throwIf(manicurist == null, ErrorCode.OPERATION_ERROR, "删除的美甲师不存在");
|
||||
Long userId = manicurist.getUserId();
|
||||
User user = userService.getById(userId);
|
||||
user.setUserRole(0);
|
||||
boolean update = userService.updateById(user);
|
||||
ThrowUtils.throwIf(!update, ErrorCode.PARAMS_ERROR, "操作失败");
|
||||
|
||||
boolean result = this.removeById(id);
|
||||
ThrowUtils.throwIf(!result, ErrorCode.PARAMS_ERROR, "操作失败");
|
||||
}
|
||||
|
||||
@Override
|
||||
public QueryWrapper<Manicurist> getQueryWrapper(ManicuristQueryRequest manicuristQueryRequest) {
|
||||
if (manicuristQueryRequest == null) {
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR, "请求参数为空");
|
||||
}
|
||||
|
||||
Long id = manicuristQueryRequest.getId();
|
||||
Long userId = manicuristQueryRequest.getUserId();
|
||||
Long businessId = manicuristQueryRequest.getBusinessId();
|
||||
String name = manicuristQueryRequest.getName();
|
||||
Integer gender = manicuristQueryRequest.getGender();
|
||||
String Phone = manicuristQueryRequest.getPhone();
|
||||
String email = manicuristQueryRequest.getEmail();
|
||||
Date employment_date = manicuristQueryRequest.getEmployment_date();
|
||||
String specialties = manicuristQueryRequest.getSpecialties();
|
||||
BigDecimal rating = manicuristQueryRequest.getRating();
|
||||
BigDecimal salary = manicuristQueryRequest.getSalary();
|
||||
|
||||
|
||||
QueryWrapper<Manicurist> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq(ObjectUtils.isNotEmpty(id), "id", id);
|
||||
queryWrapper.eq(ObjectUtils.isNotEmpty(userId), "userId", userId);
|
||||
queryWrapper.eq(ObjectUtils.isNotEmpty(businessId), "businessId", businessId);
|
||||
queryWrapper.eq(ObjectUtils.isNotEmpty(name), "name", name);
|
||||
queryWrapper.like(ObjectUtils.isNotEmpty(gender), "gender", gender);
|
||||
queryWrapper.eq(ObjectUtils.isNotEmpty(Phone), "Phone", Phone);
|
||||
queryWrapper.eq(ObjectUtils.isNotEmpty(email), "email", email);
|
||||
queryWrapper.like(ObjectUtils.isNotEmpty(employment_date), "employment_date", employment_date);
|
||||
queryWrapper.like(ObjectUtils.isNotEmpty(specialties), "specialties", specialties);
|
||||
queryWrapper.like(ObjectUtils.isNotEmpty(rating), "rating", rating);
|
||||
queryWrapper.like(ObjectUtils.isNotEmpty(salary), "salary", salary);
|
||||
String sortField = manicuristQueryRequest.getSortField();
|
||||
String sortOrder = manicuristQueryRequest.getSortOrder();
|
||||
queryWrapper.orderBy(SqlUtils.validSortField(sortField), sortOrder.equals(CommonConstant.SORT_ORDER_ASC),
|
||||
sortField);
|
||||
|
||||
return queryWrapper;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,91 @@
|
|||
package com.cj.jiaqingjiayi.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.cj.jiaqingjiayi.common.ErrorCode;
|
||||
import com.cj.jiaqingjiayi.exception.ThrowUtils;
|
||||
import com.cj.jiaqingjiayi.model.domain.Specifications;
|
||||
import com.cj.jiaqingjiayi.model.domain.SpecificationsCommodities;
|
||||
import com.cj.jiaqingjiayi.model.vo.SpecificationsVO;
|
||||
import com.cj.jiaqingjiayi.service.AttributeService;
|
||||
import com.cj.jiaqingjiayi.service.SpecificationsCommoditiesService;
|
||||
import com.cj.jiaqingjiayi.mapper.SpecificationsCommoditiesMapper;
|
||||
import com.cj.jiaqingjiayi.service.SpecificationsService;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author 高木
|
||||
* @description 针对表【specifications_commodities(商品和规格的中间表)】的数据库操作Service实现
|
||||
* @createDate 2024-08-21 16:21:41
|
||||
*/
|
||||
@Service
|
||||
public class SpecificationsCommoditiesServiceImpl extends ServiceImpl<SpecificationsCommoditiesMapper, SpecificationsCommodities>
|
||||
implements SpecificationsCommoditiesService{
|
||||
|
||||
@Resource
|
||||
private SpecificationsService specificationsService;
|
||||
|
||||
@Resource
|
||||
private AttributeService attributeService;
|
||||
|
||||
@Override
|
||||
public Boolean add(Long commoditiesId, List<Long> specificationsIds) {
|
||||
if (CollectionUtils.isEmpty(specificationsIds)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
for (Long specificationsId: specificationsIds) {
|
||||
SpecificationsCommodities specificationsDishes = new SpecificationsCommodities();
|
||||
specificationsDishes.setSpecificationsId(specificationsId);
|
||||
specificationsDishes.setCommoditiesId(commoditiesId);
|
||||
boolean save = this.save(specificationsDishes);
|
||||
ThrowUtils.throwIf(!save, ErrorCode.OPERATION_ERROR);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteByCommoditiesId(Long commoditiesId) {
|
||||
|
||||
QueryWrapper<SpecificationsCommodities> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("commoditiesId",commoditiesId);
|
||||
long count = this.count(queryWrapper);
|
||||
if (count < 1) {
|
||||
return;
|
||||
}
|
||||
boolean remove = this.remove(queryWrapper);
|
||||
ThrowUtils.throwIf(!remove, ErrorCode.OPERATION_ERROR);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean updateByCommoditiesId(Long commoditiesId, List<Long> specificationsIds) {
|
||||
//删除之前的中间表信息
|
||||
deleteByCommoditiesId(commoditiesId);
|
||||
//保存更新的中间表信息
|
||||
return add(commoditiesId,specificationsIds);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SpecificationsVO> getSpecificationsAddAttribute(List<SpecificationsCommodities> specificationsCommoditiesList) {
|
||||
List<SpecificationsVO> specificationsVOList = specificationsCommoditiesList.stream().map(item -> {
|
||||
Long specificationsId = item.getSpecificationsId();
|
||||
Specifications specifications = specificationsService.getById(specificationsId);
|
||||
SpecificationsVO specificationsVO = new SpecificationsVO();
|
||||
BeanUtils.copyProperties(specifications, specificationsVO);
|
||||
return specificationsVO;
|
||||
}).collect(Collectors.toList());
|
||||
return attributeService.getBySpecificationsVoId(specificationsVOList);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
package com.cj.jiaqingjiayi.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.cj.jiaqingjiayi.model.domain.Specifications;
|
||||
import com.cj.jiaqingjiayi.service.SpecificationsService;
|
||||
import com.cj.jiaqingjiayi.mapper.SpecificationsMapper;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* @author 高木
|
||||
* @description 针对表【specifications(规格表)】的数据库操作Service实现
|
||||
* @createDate 2024-08-21 16:20:48
|
||||
*/
|
||||
@Service
|
||||
public class SpecificationsServiceImpl extends ServiceImpl<SpecificationsMapper, Specifications>
|
||||
implements SpecificationsService{
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,334 @@
|
|||
package com.cj.jiaqingjiayi.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.cj.jiaqingjiayi.common.ErrorCode;
|
||||
import com.cj.jiaqingjiayi.exception.BusinessException;
|
||||
import com.cj.jiaqingjiayi.exception.ThrowUtils;
|
||||
import com.cj.jiaqingjiayi.mapper.UserMapper;
|
||||
import com.cj.jiaqingjiayi.model.domain.User;
|
||||
import com.cj.jiaqingjiayi.model.request.user.UserSearchRequest;
|
||||
import com.cj.jiaqingjiayi.model.request.user.UserUpdatePasswordRequest;
|
||||
import com.cj.jiaqingjiayi.model.vo.LoginUserVO;
|
||||
import com.cj.jiaqingjiayi.service.UserService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.DigestUtils;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Date;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import static com.cj.jiaqingjiayi.contant.UserConstant.*;
|
||||
|
||||
|
||||
@Service
|
||||
@Slf4j
|
||||
public class UserServiceImpl extends ServiceImpl<UserMapper, User>
|
||||
implements UserService {
|
||||
|
||||
@Resource
|
||||
private UserMapper userMapper;
|
||||
|
||||
/**
|
||||
* 盐值 对密码进行混淆加密
|
||||
*/
|
||||
private static final String SALT = "yctf";
|
||||
|
||||
/**
|
||||
* 用户注册
|
||||
*
|
||||
* @param userAccount 登陆账号
|
||||
* @param userPassword 登录密码
|
||||
* @param checkPassword 校验密码
|
||||
* @return 新id
|
||||
*/
|
||||
|
||||
@Override
|
||||
public long userRegister(String userAccount, String userPassword, String checkPassword) {
|
||||
|
||||
//1.非空
|
||||
if (StringUtils.isAllBlank(userAccount, userPassword, checkPassword)) {
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR, "参数为空");
|
||||
}
|
||||
//2.账号长度不小于4位
|
||||
if (userAccount.length() < 4) {
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR, "用户账号过短");
|
||||
}
|
||||
//3.密码长度不小于8位
|
||||
if (userPassword.length() < 8 || checkPassword.length() < 8) {
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR, "用户密码过短");
|
||||
}
|
||||
//正则表达式看账户包不包含特殊字符
|
||||
String validPattern = "[`~!@#$%^&*()+=|{}':;',\\\\[\\\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]";
|
||||
|
||||
Matcher matcher = Pattern.compile(validPattern).matcher(userAccount);
|
||||
|
||||
if (matcher.find()) {
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR, "不符合规范");
|
||||
}
|
||||
|
||||
//检验密码和校验密码是否相同
|
||||
if (!userPassword.equals(checkPassword)) {
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR, "两次输入密码不同");
|
||||
}
|
||||
|
||||
//账户不能重复,进行查询数据库看当中是否存在相同名称用户
|
||||
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("userAccount", userAccount);
|
||||
Long count = userMapper.selectCount(queryWrapper);
|
||||
if (count > 0) {
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR, "存在相同用户");
|
||||
}
|
||||
|
||||
//对密码加密
|
||||
String encryptPassword = DigestUtils.md5DigestAsHex((SALT + userPassword).getBytes());
|
||||
|
||||
User user = new User();
|
||||
user.setUserAccount(userAccount);
|
||||
user.setUserPassword(encryptPassword);
|
||||
boolean saveResult = this.save(user);
|
||||
if (!saveResult) {
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR, "插入失败!");
|
||||
}
|
||||
return user.getId();
|
||||
}
|
||||
|
||||
/**
|
||||
* 登录
|
||||
*
|
||||
* @param userAccount 登陆账号
|
||||
* @param userPassword 登陆密码
|
||||
* @param request 返回请求
|
||||
* @return 用户信息
|
||||
*/
|
||||
|
||||
@Override
|
||||
public LoginUserVO userLogin(String userAccount, String userPassword, HttpServletRequest request) {
|
||||
//非空
|
||||
if (StringUtils.isAllBlank(userAccount, userPassword)) {
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR, "参数为空");
|
||||
}
|
||||
//账号长度不小于四位
|
||||
if (userAccount.length() < 4) {
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR, "用户账号过短");
|
||||
}
|
||||
if (userPassword.length() < 8) {
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR, "用户密码过短");
|
||||
}
|
||||
|
||||
//正则表达式看账户包不包含特殊字符
|
||||
String validPattern = "[`~!@#$%^&*()+=|{}':;',\\\\[\\\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]";
|
||||
|
||||
Matcher matcher = Pattern.compile(validPattern).matcher(userAccount);
|
||||
|
||||
if (matcher.find()) {
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR, "不符合规范");
|
||||
}
|
||||
|
||||
//校验账号密码是否相同
|
||||
String encodePassword = DigestUtils.md5DigestAsHex((SALT + userPassword).getBytes(StandardCharsets.UTF_8));
|
||||
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("userAccount", userAccount);
|
||||
queryWrapper.eq("userPassword", encodePassword);
|
||||
User user = userMapper.selectOne(queryWrapper);
|
||||
//用户不存在
|
||||
if (user == null) {
|
||||
log.info("user login failed, userAccount Cannot match userPassword");
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR, "用户账号或密码有误!");
|
||||
}
|
||||
|
||||
//用户登陆成功
|
||||
request.getSession().setAttribute(USER_LOGIN_STATE, user);
|
||||
return this.getLoginUserVO(user);
|
||||
}
|
||||
|
||||
/**
|
||||
* 实现用户注销
|
||||
* @param request
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public int userLogout(HttpServletRequest request) {
|
||||
request.getSession().removeAttribute(USER_LOGIN_STATE);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* 用户脱敏
|
||||
* @param user
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public User getSafetyUser(User user) {
|
||||
User safeUser = new User();
|
||||
safeUser.setId(user.getId());
|
||||
safeUser.setUsername(user.getUsername());
|
||||
safeUser.setUserAccount(user.getUserAccount());
|
||||
safeUser.setAvatarUrl(user.getAvatarUrl());
|
||||
safeUser.setGender(user.getGender());
|
||||
safeUser.setPhone(user.getPhone());
|
||||
safeUser.setEmail(user.getEmail());
|
||||
safeUser.setUserStatus(user.getUserStatus());
|
||||
safeUser.setCreateTime(user.getCreateTime());
|
||||
return safeUser;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前登录用户的信息
|
||||
* @param request
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public User getLogingUser(HttpServletRequest request) {
|
||||
Object userObj = request.getSession().getAttribute(USER_LOGIN_STATE);
|
||||
User currentUser = (User) userObj;
|
||||
|
||||
if(currentUser == null){
|
||||
throw new BusinessException(ErrorCode.NOT_LOGIN, "未登录");
|
||||
}
|
||||
|
||||
Long userId = currentUser.getId();
|
||||
currentUser = this.getById(userId);
|
||||
return currentUser;
|
||||
}
|
||||
|
||||
/**
|
||||
* 用户修改密码
|
||||
* @param updatePasswordRequest
|
||||
* @param request
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public boolean updateUserPassword(UserUpdatePasswordRequest updatePasswordRequest, HttpServletRequest request) {
|
||||
if (updatePasswordRequest == null){
|
||||
throw new BusinessException(ErrorCode.NULL_ERROR);
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断用户是否存在
|
||||
*/
|
||||
User logingUser = getLogingUser(request);
|
||||
Long userId = logingUser.getId();
|
||||
if(userId < 0 || userId == null){
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR, "用户不存在");
|
||||
}
|
||||
String newPassword = updatePasswordRequest.getNewPassword();
|
||||
|
||||
/**
|
||||
* 确认密码
|
||||
*/
|
||||
if(!newPassword.equals(updatePasswordRequest.getCheckNewPassword())){
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR, "两次输入密码不相同");
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断修改后的密码是否与原密码相同
|
||||
*/
|
||||
User user = new User();
|
||||
BeanUtils.copyProperties(updatePasswordRequest, user);
|
||||
user.setId(logingUser.getId());
|
||||
if (newPassword.equals(updatePasswordRequest.getUserPassword())){
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR, "修改后的密码与原密码不能相同");
|
||||
}
|
||||
|
||||
|
||||
//使用MD5加密新密码
|
||||
String mdedPassword = DigestUtils.md5DigestAsHex((USER_SALT + updatePasswordRequest.getNewPassword()).getBytes());
|
||||
String odlPassword = DigestUtils.md5DigestAsHex((USER_SALT + updatePasswordRequest.getUserPassword()).getBytes());
|
||||
if(!logingUser.getUserPassword().equals(odlPassword)){
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR, "旧密码错误");
|
||||
}
|
||||
user.setUserPassword(mdedPassword);
|
||||
boolean result = updateById(user);
|
||||
if(!result){
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR, "修改失败");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
/**
|
||||
* 分页查询
|
||||
*
|
||||
* @param searchRequest
|
||||
* @return
|
||||
*/
|
||||
public QueryWrapper<User> getQueryWrapper(UserSearchRequest searchRequest) {
|
||||
|
||||
if (searchRequest == null) {
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR, "请求参数为空");
|
||||
}
|
||||
String username = searchRequest.getUsername();
|
||||
String userAccount = searchRequest.getUserAccount();
|
||||
Integer gender = searchRequest.getGender();
|
||||
String phone = searchRequest.getPhone();
|
||||
String email = searchRequest.getEmail();
|
||||
Integer userStatus = searchRequest.getUserStatus();
|
||||
Integer userRole = searchRequest.getUserRole();
|
||||
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
|
||||
Date updateTime = searchRequest.getUpdateTime();
|
||||
Date createTime = searchRequest.getCreateTime();
|
||||
// username
|
||||
if (StringUtils.isNotBlank(username)) {
|
||||
queryWrapper.like("username", username);
|
||||
}
|
||||
// userAccount
|
||||
if (StringUtils.isNotBlank(userAccount)) {
|
||||
queryWrapper.like("userAccount", userAccount);
|
||||
}
|
||||
// gender
|
||||
if (StringUtils.isNotBlank(username)) {
|
||||
queryWrapper.eq("gender", gender);
|
||||
}
|
||||
// phone
|
||||
if (StringUtils.isNotBlank(phone)) {
|
||||
queryWrapper.like("phone", phone);
|
||||
}
|
||||
// email
|
||||
if (StringUtils.isNotBlank(email)) {
|
||||
queryWrapper.like("email", email);
|
||||
}
|
||||
// userStatus
|
||||
if (userStatus != null) {
|
||||
queryWrapper.eq("userStatus", userStatus);
|
||||
}
|
||||
if (userRole != null) {
|
||||
queryWrapper.eq("userRole", userRole);
|
||||
}
|
||||
if (updateTime != null) {
|
||||
queryWrapper.like("updateTime", updateTime);
|
||||
}
|
||||
if (createTime != null) {
|
||||
queryWrapper.like("createTime", createTime);
|
||||
}
|
||||
return queryWrapper;
|
||||
}
|
||||
|
||||
@Override
|
||||
public LoginUserVO getLoginUserVO(User user) {
|
||||
if (user == null) {
|
||||
return null;
|
||||
}
|
||||
LoginUserVO loginUserVO = new LoginUserVO();
|
||||
BeanUtils.copyProperties(user, loginUserVO);
|
||||
return loginUserVO;
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断是否为管理员
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public void isAdmin(HttpServletRequest request){
|
||||
Object userObj = request.getSession().getAttribute(USER_LOGIN_STATE);
|
||||
User user = (User) userObj;
|
||||
ThrowUtils.throwIf(!(user != null && user.getUserRole() == ADMIN_ROLE) ,ErrorCode.NO_AUTH, "无管理员权限");
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
package com.cj.jiaqingjiayi.utils;
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
@Component
|
||||
public class RandomNumberGenerator {
|
||||
// 生成指定范围内的随机整数
|
||||
public int generateRandomNumber() {
|
||||
Random random = new Random();
|
||||
return random.nextInt(9000 - 1000 + 1) + 1000;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,61 @@
|
|||
package com.cj.jiaqingjiayi.utils;
|
||||
|
||||
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
||||
|
||||
import static com.cj.jiaqingjiayi.contant.RegexConstant.*;
|
||||
|
||||
|
||||
/**
|
||||
* @author 玄德
|
||||
*/
|
||||
@SuppressWarnings("all")
|
||||
public class RegexUtils {
|
||||
|
||||
/**
|
||||
* 是否是无效手机格式
|
||||
*
|
||||
* @param phone 要校验的手机号
|
||||
* @return true:符合,false:不符合
|
||||
*/
|
||||
public static boolean isPhoneInvalid(String phone) {
|
||||
return mismatch(phone, PHONE_REGEX);
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否是无效邮箱格式
|
||||
*
|
||||
* @param email 要校验的邮箱
|
||||
* @return true:符合,false:不符合
|
||||
*/
|
||||
public static boolean isEmailInvalid(String email) {
|
||||
return mismatch(email, EMAIL_REGEX);
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否是无效18位身份证格式
|
||||
*
|
||||
* @param idCard 要校验的身份证号码
|
||||
* @return true:符合,false:不符合
|
||||
*/
|
||||
public static boolean isIdCardInvalid(String idCard) {
|
||||
return mismatch(idCard, ID_CARD_REGEX);
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否是无效验证码格式
|
||||
*
|
||||
* @param code 要校验的验证码
|
||||
* @return true:符合,false:不符合
|
||||
*/
|
||||
public static boolean isCodeInvalid(String code) {
|
||||
return mismatch(code, VERIFY_CODE_REGEX);
|
||||
}
|
||||
|
||||
// 校验是否不符合正则格式
|
||||
private static boolean mismatch(String str, String regex) {
|
||||
if (StringUtils.isBlank(str)) {
|
||||
return true;
|
||||
}
|
||||
return !str.matches(regex);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
package com.cj.jiaqingjiayi.utils;
|
||||
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
/**
|
||||
* SQL 工具
|
||||
*
|
||||
* @author <a href="https://github.com/liyupi">程序员鱼皮</a>
|
||||
* @from <a href="https://yupi.icu">编程导航知识星球</a>
|
||||
*/
|
||||
@SuppressWarnings("all")
|
||||
public class SqlUtils {
|
||||
|
||||
/**
|
||||
* 校验排序字段是否合法(防止 SQL 注入)
|
||||
*
|
||||
* @param sortField
|
||||
* @return
|
||||
*/
|
||||
public static boolean validSortField(String sortField) {
|
||||
if (StringUtils.isBlank(sortField)) {
|
||||
return false;
|
||||
}
|
||||
return !StringUtils.containsAny(sortField, "=", "(", ")", " ");
|
||||
}
|
||||
}
|
49
project/jiaqingjiayi/src/main/resources/application.yml
Normal file
49
project/jiaqingjiayi/src/main/resources/application.yml
Normal file
|
@ -0,0 +1,49 @@
|
|||
spring:
|
||||
application:
|
||||
name: jiaqingjiayi
|
||||
datasource:
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
# url: jdbc:mysql://154.8.193.216/jiaqingjiayi
|
||||
# username: jiaqingjiayi
|
||||
# password: 123456
|
||||
url: jdbc:mysql://localhost:3306/jqjy
|
||||
username: root
|
||||
password: 123456
|
||||
|
||||
mvc:
|
||||
pathmatch:
|
||||
matching-strategy: ant_path_matcher
|
||||
profiles:
|
||||
active: dev
|
||||
knife4j:
|
||||
enable: true
|
||||
server:
|
||||
port: 8080
|
||||
servlet:
|
||||
context-path: /api
|
||||
mybatis-plus:
|
||||
configuration:
|
||||
map-underscore-to-camel-case: false
|
||||
global-config:
|
||||
db-config:
|
||||
logic-delete-field: isDelete
|
||||
logic-delete-value: 1
|
||||
logic-not-delete-value: 0
|
||||
|
||||
|
||||
session:
|
||||
timeout: 86400
|
||||
|
||||
aliyun:
|
||||
oss:
|
||||
file:
|
||||
endpoint: xxxx
|
||||
keyid: xxxx
|
||||
keysecret: xxxx
|
||||
bucketname: xxxx
|
||||
|
||||
alipay:
|
||||
#支付宝开放平台
|
||||
appId: 2021004151684053
|
||||
alipayPublicKey: "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoSEl6J0GoBCiuUmlaGOftoKftzBZL9/HwmcclIjHxDwM2Nmk7Q+p8nNSO4CtQU5nWZZBzSQ7/p0YBfdH5CGBpz9/vvB1va9CGYLLbog//n3kr4VPtC6cA0TNLiFgT86SzieL8wgRvfyba4q2lrGW1QN6Wnc5r3Ew3BepSvANDaETkLS2djwnOAN/i5RHSZWN948oiHEU8/c5SMjBwPi7g95LblZ3PfGa8h7MLXw+qD1CY1lumkT5Wt/Jv57akT2O/GryF90uEDZVR1bCuxK/1UDCT0MYj5Adl8D2cxVi57UgAPAD/BbGHF6tfnz3leC0S5zFxnb8i4uVGgsul89M9wIDAQAB"
|
||||
appPrivateKey: "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQChISXonQagEKK5SaVoY5+2gp+3MFkv38fCZxyUiMfEPAzY2aTtD6nyc1I7gK1BTmdZlkHNJDv+nRgF90fkIYGnP3++8HW9r0IZgstuiD/+feSvhU+0LpwDRM0uIWBPzpLOJ4vzCBG9/JtriraWsZbVA3padzmvcTDcF6lK8A0NoROQtLZ2PCc4A3+LlEdJlY33jyiIcRTz9zlIyMHA+LuD3ktuVnc98ZryHswtfD6oPUJjWW6aRPla38m/ntqRPY78avIX3S4QNlVHVsK7Er/VQMJPQxiPkB2XwPZzFWLntSAA8AP8FsYcXq1+fPeV4LRLnMXGdvyLi5UaCy6Xz0z3AgMBAAECggEAaGWvyB0lU8QzilWbJB2YN4o+rVRYFNqq9NwV+m7877nwoPezEh2aAQqS9xaSKsP/1l2yWJXngTqLfCIRpE/JT3Gm9TGbN8E71IeYAw+oVt1+s/JuB9JDJyMGxaK+Yjb3iza4SEisJiprEKyZTN3XWkCcn8yrxW5TN+bkuzb5XiA8j3VxT5S9dybFtXS8vxTaqF47XkbvSqj4ohmEiyiFWtQbLBON1Uoje+RNXZL6QNaKzck7QePFd5S9Qz97kHUWHC51qz+lXYlMUME5ORXQbckfreRKll0AzGr8r5rSz1FkOafywr6kAeIhiOa+r8AveNXg+U+0SpYN9ti9QZ8NcQKBgQDhW5M21Bgrfp/wsrumqlkePORNkh8/98Wgsz4uEVb2sNkLQyAdS4HNFzc1KldIoi3Vc+E7NBFPuVQ/d+o72iJ0eT+ThsoCiTAWJGkWouFSDWAFppqEY6Z3Le4gb6/xIZlAYdN1KQiJZORhBpfBTUGtmsxpXFRNdtQd6O88DDqW+wKBgQC3Cd4HwpytDCPynLw0tJfJyCSIVrt5Ksic2J5AXMCATbNB4UHX0FAvDZvxh/7fERBz3eB+q2hY4jKuTASL58eKEFnp32ggONyKGYasn4k8qNf8dnlVUnbN3r/vSG4r+3OY2QY5aiHELvIrUKtlrhg/j7T9qCtCafaoTEiGT9gxNQKBgQCVOfOIufdrTcUROPmDiofKux2etCTXUfXezPJexQKmBkMi7wcj/uzr5vSa0vfLVAEvuDUr4/WWqi08feZwTajFIcjUosu/1CIwd1nTMHYtxEeSVlk5U1dW0eY+OlbyQIJfnKfOjCZn/JQyH5B74vGbyMaU+huk1Avv5mAMjjh54wKBgElenS+DJQaAnVA833xI/6cUoQA9s/xH2A53DkhCZa+IddhskNYPXHTgAah5mQKVdoDbaYec8cDfOu1+7zuddvCyyTfkI3r3EAATZ1Z+xKYaECnU26IF4jV3mnwyDmd27clRBRuynUJkhxIxzeJ+PJ4N3sDmziBbFVI08cVU8BYZAoGAbDZONt1PFEFyIINZuTWbwK/BoHTzvDEmu2v6GXcslOurrgjMKArVT4TZyXoe56QJe9gJfmOYuTw6kwEzSDZtQvdi2jPNj4s14P8oWAro6x7tLo/18FQn/6DLpq9eaiI4TYN0P8NUI8sym9Ns8WFXFRb78vyx90j2apvV6+S8pek="
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user