Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c6ea9d565b |
No files matched your search
@@ -1,12 +0,0 @@
|
||||
* text=auto
|
||||
*.sh text eol=lf
|
||||
*.md text eol=lf
|
||||
*.yaml text eol=lf
|
||||
*.yml text eol=lf
|
||||
*.sql text eol=lf
|
||||
*.txt text eol=lf
|
||||
*.conf text eol=lf
|
||||
*.xml text eol=lf
|
||||
*.bat text eol=crlf
|
||||
*.png binary
|
||||
*.jpg binary
|
||||
@@ -1,92 +0,0 @@
|
||||
######################################################################
|
||||
# Build Tools
|
||||
|
||||
.gradle
|
||||
!gradle/wrapper/gradle-wrapper.jar
|
||||
|
||||
target/
|
||||
!.mvn/wrapper/maven-wrapper.jar
|
||||
|
||||
######################################################################
|
||||
# IDE
|
||||
|
||||
### STS ###
|
||||
.apt_generated
|
||||
.classpath
|
||||
.factorypath
|
||||
.project
|
||||
.settings
|
||||
.springBeans
|
||||
|
||||
### IntelliJ IDEA ###
|
||||
.idea
|
||||
*.iws
|
||||
*.iml
|
||||
*.ipr
|
||||
*.class
|
||||
|
||||
### JRebel ###
|
||||
rebel.xml
|
||||
### NetBeans ###
|
||||
nbproject/private/
|
||||
nbbuild/
|
||||
dist/
|
||||
nbdist/
|
||||
.nb-gradle/
|
||||
|
||||
######################################################################
|
||||
# Others
|
||||
*.log
|
||||
*.xml.versionsBackup
|
||||
*.swp
|
||||
tmp
|
||||
~$*
|
||||
|
||||
# docker
|
||||
build/docker/mysql/data
|
||||
build/docker/redis/data
|
||||
build/docker/mysql/log
|
||||
build/docker/nacos/logs
|
||||
build/docker/mysql/db/*.sql
|
||||
build/docker/mysql/db/upgrade/*/*.sql
|
||||
build/docker/wfc/*/jar/*.jar
|
||||
build/docker/wfc/*/*/jar/*.jar
|
||||
build/docker/conf/default/i18n/*.properties
|
||||
|
||||
# Logs
|
||||
logs
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
pnpm-debug.log*
|
||||
lerna-debug.log*
|
||||
|
||||
node_modules
|
||||
.DS_Store
|
||||
dist
|
||||
dist-ssr
|
||||
coverage
|
||||
*.local
|
||||
|
||||
# Editor directories and files
|
||||
.vscode/*
|
||||
!.vscode/extensions.json
|
||||
!.vscode/settings.json
|
||||
!.vscode/launch.json
|
||||
*.suo
|
||||
*.ntvs*
|
||||
*.njsproj
|
||||
*.sln
|
||||
*.sw?
|
||||
|
||||
package-lock.json
|
||||
yarn.lock
|
||||
|
||||
.VSCodeCounter
|
||||
|
||||
# release
|
||||
release/debs/*.deb
|
||||
release/tars/*.tar.gz
|
||||
release/src-tars/*.tar.gz
|
||||
debbuild/etc
|
||||
debbuild/opt
|
||||
@@ -1,82 +1,3 @@
|
||||
# WANFi Control & Billing System
|
||||
# build.wfc
|
||||
|
||||
## 构建目录
|
||||
|
||||
```text
|
||||
build.wfc/
|
||||
├── bin # build binary file
|
||||
├── build # build directory
|
||||
│ ├── bin
|
||||
│ ├── docker # docker compose root directory
|
||||
│ │ ├── env
|
||||
│ │ ├── mysql
|
||||
│ │ │ ├── conf
|
||||
│ │ │ ├── data
|
||||
│ │ │ ├── db
|
||||
│ │ │ └── logs
|
||||
│ │ ├── nacos
|
||||
│ │ │ ├── conf
|
||||
│ │ │ └── logs
|
||||
│ │ ├── nginx
|
||||
│ │ │ ├── conf
|
||||
│ │ │ ├── conf.d
|
||||
│ │ │ ├── html
|
||||
│ │ │ └── logs
|
||||
│ │ ├── redis
|
||||
│ │ │ ├── conf
|
||||
│ │ │ └── data
|
||||
│ │ └── wfc
|
||||
│ │ ├── auth
|
||||
│ │ │ └── jar
|
||||
│ │ ├── gateway
|
||||
│ │ │ └── jar
|
||||
│ │ ├── modules
|
||||
│ │ │ ├── file
|
||||
│ │ │ │ └── jar
|
||||
│ │ │ ├── gen
|
||||
│ │ │ │ └── jar
|
||||
│ │ │ ├── job
|
||||
│ │ │ │ └── jar
|
||||
│ │ │ ├── payment
|
||||
│ │ │ │ └── jar
|
||||
│ │ │ ├── system
|
||||
│ │ │ │ └── jar
|
||||
│ │ │ └── user
|
||||
│ │ │ └── jar
|
||||
│ │ ├── upload
|
||||
│ │ └── visual
|
||||
│ │ └── monitor
|
||||
│ │ └── jar
|
||||
│ └── systemd # system service daemon file saved here
|
||||
│ └── system
|
||||
├── debbuild # deb build directory, not ready
|
||||
│ ├── DEBIAN
|
||||
│ ├── etc
|
||||
│ └── opt
|
||||
│ └── wfc
|
||||
├── docs
|
||||
│ ├── 01-requirement
|
||||
│ ├── 02-design
|
||||
│ └── 03-configuration
|
||||
└── release
|
||||
├── debs # deb package release, n/a
|
||||
└── tars # tar package release
|
||||
```
|
||||
|
||||
## 准备工作
|
||||
|
||||
```text
|
||||
JDK >= 1.8 (推荐1.8版本)
|
||||
Maven >= 3.0
|
||||
Mysql >= 5.7.0 (推荐5.7版本) # docker内部构建
|
||||
Redis >= 7.4.2 # docker内部构建
|
||||
nacos >= v2.5.0 # docker内部构建
|
||||
sentinel >= 1.6.0 (optional)
|
||||
```
|
||||
|
||||
## 构建发布包
|
||||
|
||||
```sh
|
||||
cd wfc.git/build.wfc/bin
|
||||
./build.sh -g tar
|
||||
```
|
||||
打包脚本
|
||||
@@ -1,322 +0,0 @@
|
||||
#!/bin/bash
|
||||
ProjectL=wfc
|
||||
ProjectU=WFC
|
||||
RelDate=`date +%Y%m%d`
|
||||
#GitRootDir=${HOME}/wfc.git
|
||||
GitRootDir=$(dirname $(dirname $(dirname $(realpath $0))))
|
||||
BERootDir=${GitRootDir}/be.wfc
|
||||
FERootDir=${GitRootDir}/fe.wfc
|
||||
FEUserRootDir=${GitRootDir}/fe.wfc.user
|
||||
BuildRootDir=${GitRootDir}/build.wfc
|
||||
LicenseBuildDir=${GitRootDir}/license.build.wfc
|
||||
LicenseRootDir=${GitRootDir}/license.wfc
|
||||
|
||||
WFCWorkDir=/opt/wfc
|
||||
BuildDockerDir=${BuildRootDir}/build/docker
|
||||
ReleseDir=${BuildRootDir}/release
|
||||
SystemdDir=${BuildRootDir}/build/systemd/system
|
||||
|
||||
DebBuildDir=${BuildRootDir}/debbuild
|
||||
DebReleseDir=${ReleseDir}/debs
|
||||
DebSystemdDir=${DebBuildDir}/etc/systemd/system
|
||||
|
||||
TmpDir=${BuildRootDir}/tmp
|
||||
TmpEnvFile=${TmpDir}/.env.tmp
|
||||
|
||||
usage() {
|
||||
echo "Usage: sh build.sh [extras|jar|dist|copy|tar|srctar|deb|all] [-g]"
|
||||
exit 1
|
||||
}
|
||||
|
||||
SKIP_PRE_GIT_PULL=false
|
||||
|
||||
# Reorder arguments so that options come first
|
||||
ARGS=()
|
||||
for arg in "$@"; do
|
||||
case $arg in
|
||||
-g)
|
||||
SKIP_PRE_GIT_PULL=true
|
||||
;;
|
||||
*)
|
||||
ARGS+=("$arg")
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if SKIP_PRE_GIT_PULL=true; then
|
||||
ARGS+=("-g")
|
||||
fi
|
||||
|
||||
# Restore positional parameters
|
||||
set -- "${ARGS[@]}"
|
||||
|
||||
# Process options
|
||||
while getopts "g" opt; do
|
||||
case ${opt} in
|
||||
g )
|
||||
SKIP_PRE_GIT_PULL=true
|
||||
;;
|
||||
\? )
|
||||
usage
|
||||
;;
|
||||
esac
|
||||
done
|
||||
shift $((OPTIND -1))
|
||||
|
||||
pre-build-tar(){
|
||||
if [ ! -d ${ReleseDir}/tars ]; then
|
||||
mkdir -p ${ReleseDir}/tars
|
||||
fi
|
||||
source ${BuildRootDir}/bin/control.sh
|
||||
cd ${BuildRootDir}
|
||||
sed -i "s/YYYYMMDD/${RelDate}/" ${BuildDockerDir}/env/wfc-release
|
||||
# git update-index --assume-unchanged ${BuildDockerDir}/env/wfc-release
|
||||
}
|
||||
|
||||
pre-git-pull(){
|
||||
cd ${BERootDir}
|
||||
git pull
|
||||
cd ${FERootDir}
|
||||
git checkout src/typings/
|
||||
git pull
|
||||
cd ${FEUserRootDir}
|
||||
git checkout src/typings/
|
||||
git pull
|
||||
cd ${BuildRootDir}
|
||||
git pull
|
||||
if [ -d ${LicenseRootDir} ]; then
|
||||
cd ${LicenseRootDir}
|
||||
git pull
|
||||
fi
|
||||
if [ -d ${LicenseBuildDir} ]; then
|
||||
cd ${LicenseBuildDir}
|
||||
git pull
|
||||
fi
|
||||
}
|
||||
|
||||
pre-build-deb(){
|
||||
if [ ! -d ${ReleseDir}/debs ]; then
|
||||
mkdir -p ${ReleseDir}/debs
|
||||
fi
|
||||
if [ ! -d ${DebBuildDir}/opt/wfc ]; then
|
||||
mkdir -p ${DebBuildDir}/opt/wfc
|
||||
fi
|
||||
if [ ! -d ${DebSystemdDir} ]; then
|
||||
mkdir -p ${DebSystemdDir}
|
||||
fi
|
||||
cd ${BuildRootDir}
|
||||
sed -i "s/YYYYMMDD/${RelDate}/" ${BuildDockerDir}/env/wfc-release
|
||||
# git update-index --assume-unchanged ${BuildDockerDir}/env/wfc-release
|
||||
}
|
||||
|
||||
build-extras(){
|
||||
cd ${BuildRootDir}
|
||||
echo -n "Begin build extras file ... "
|
||||
cd ${BuildRootDir}/bin
|
||||
javac -source 8 -target 8 -bootclasspath /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar -extdirs "" -Xlint:-options printJarVer.java
|
||||
echo "done"
|
||||
}
|
||||
|
||||
build-jar(){
|
||||
cd ${BERootDir}
|
||||
# git pull
|
||||
mvn clean package -Dmaven.test.skip=true -P prod
|
||||
}
|
||||
|
||||
pre-build-src-tar(){
|
||||
if [ ! -d ${ReleseDir}/src-tars ]; then
|
||||
mkdir -p ${ReleseDir}/src-tars
|
||||
fi
|
||||
source ${BuildRootDir}/bin/control.sh
|
||||
}
|
||||
|
||||
clean-jar(){
|
||||
cd ${BERootDir}
|
||||
mvn clean
|
||||
cd ${LicenseRootDir}
|
||||
mvn clean
|
||||
}
|
||||
|
||||
build-dist(){
|
||||
cd ${FERootDir}
|
||||
# git checkout src/typings/
|
||||
# git pull
|
||||
pnpm i
|
||||
pnpm build
|
||||
|
||||
cd ${FEUserRootDir}
|
||||
# git checkout src/typings/
|
||||
# git pull
|
||||
if ! pnpm list terser --depth 0 &> /dev/null; then
|
||||
pnpm add terser --save-dev
|
||||
fi
|
||||
pnpm i
|
||||
pnpm build
|
||||
}
|
||||
|
||||
copy-file(){
|
||||
${BuildRootDir}/bin/copy.sh ${GitRootDir}
|
||||
cp -f ${BuildRootDir}/bin/printJarVer.class ${BuildRootDir}/build/bin/
|
||||
}
|
||||
|
||||
copy-file-debbuild(){
|
||||
rm -rf ${DebBuildDir}/opt/wfc/*
|
||||
cp -rf ${BuildRootDir}/build/bin/ ${DebBuildDir}/opt/wfc
|
||||
cp -rf ${BuildRootDir}/build/docker/ ${DebBuildDir}/opt/wfc
|
||||
cp -rf ${BuildRootDir}/build/systemd/ ${DebBuildDir}/opt/wfc
|
||||
if [ -f ${DebBuildDir}/opt/wfc/docker/.env ]; then
|
||||
rm ${DebBuildDir}/opt/wfc/docker/.env
|
||||
fi
|
||||
cp -rf ${SystemdDir}/* ${DebSystemdDir}/
|
||||
chmod 755 ${DebBuildDir}/DEBIAN/preinst
|
||||
chmod 755 ${DebBuildDir}/DEBIAN/postinst
|
||||
chmod 755 ${DebBuildDir}/DEBIAN/postrm
|
||||
}
|
||||
|
||||
# create tar package
|
||||
create-tar(){
|
||||
TarFileName=${ProjectL}-${RelVersion}-${RelDate}.tar.gz
|
||||
echo -n "Begin build tar package(${TarFileName}) ... "
|
||||
cd ${BuildRootDir}/build
|
||||
tar cvfz ${ReleseDir}/tars/${TarFileName} \
|
||||
--exclude='./docker/mysql/logs' \
|
||||
--exclude='./docker/mysql/data' \
|
||||
--exclude='./docker/mysql/tmp' \
|
||||
--exclude='./docker/nacos/logs' \
|
||||
--exclude='./docker/nginx/logs' \
|
||||
--exclude='./docker/.env' \
|
||||
. 1>/dev/null
|
||||
echo "done"
|
||||
}
|
||||
|
||||
# create source tar package
|
||||
create-src-tar(){
|
||||
SrcTarFileName=${ProjectL}-${RelVersion}-${RelDate}.src.tar.gz
|
||||
echo -n "Begin build source tar package(${SrcTarFileName}) ... "
|
||||
WFCRelativeDir=./wfc.git
|
||||
BeRelativeDir=${WFCRelativeDir}/be.wfc
|
||||
FeRelativeDir=${WFCRelativeDir}/fe.wfc
|
||||
FeUserRelativeDir=${WFCRelativeDir}/fe.wfc.user
|
||||
BuildRelativeDir=${WFCRelativeDir}/build.wfc
|
||||
LicenseSrcDir=${WFCRelativeDir}/license.wfc
|
||||
LicenseBuildDir=${WFCRelativeDir}/license.build.wfc
|
||||
cd ${HOME}
|
||||
tar cvfz ${ReleseDir}/src-tars/${SrcTarFileName} \
|
||||
--exclude=${WFCRelativeDir}/.vscode \
|
||||
--exclude=${BeRelativeDir}/.vscode \
|
||||
--exclude=${BeRelativeDir}/.git \
|
||||
--exclude=${BeRelativeDir}/bin \
|
||||
--exclude=${BeRelativeDir}/docker \
|
||||
--exclude=${BeRelativeDir}/.github \
|
||||
--exclude=${BeRelativeDir}/tmp \
|
||||
--exclude=${FeRelativeDir}/.vscode \
|
||||
--exclude=${FeRelativeDir}/.git \
|
||||
--exclude=${FeRelativeDir}/dist \
|
||||
--exclude=${FeRelativeDir}/node_modules \
|
||||
--exclude=${FeUserRelativeDir}/.vscode \
|
||||
--exclude=${FeUserRelativeDir}/.git \
|
||||
--exclude=${FeUserRelativeDir}/dist \
|
||||
--exclude=${FeUserRelativeDir}/node_modules \
|
||||
--exclude=${BuildRelativeDir}/.vscode \
|
||||
--exclude=${BuildRelativeDir}/.git \
|
||||
--exclude=${BuildRelativeDir}/tmp \
|
||||
--exclude=${BuildRelativeDir}/release \
|
||||
--exclude=${BuildRelativeDir}/build/docker/nginx/html \
|
||||
--exclude=${BuildRelativeDir}/build/docker/wfc/auth/jar/*.jar \
|
||||
--exclude=${BuildRelativeDir}/build/docker/wfc/gateway/jar/*.jar \
|
||||
--exclude=${BuildRelativeDir}/build/docker/wfc/modules/*/jar/*.jar \
|
||||
--exclude=${BuildRelativeDir}/build/docker/wfc/visual/jar/*.jar \
|
||||
--exclude=${BuildRelativeDir}/debbuild/etc \
|
||||
--exclude=${BuildRelativeDir}/debbuild/opt \
|
||||
--exclude=${BuildRelativeDir}/bin/cpto205.sh \
|
||||
--exclude=${BuildRelativeDir}/docs/98-acceptance \
|
||||
--exclude=${BuildRelativeDir}/docs/99-reference \
|
||||
--exclude=${BuildRelativeDir}/docs/100-images \
|
||||
--exclude=${LicenseSrcDir}/.git \
|
||||
--exclude=${LicenseSrcDir}/.vscode \
|
||||
--exclude=${LicenseSrcDir}/target \
|
||||
--exclude=${LicenseBuildDir}/.git \
|
||||
--exclude=${LicenseBuildDir}/.vscode \
|
||||
--exclude=${LicenseBuildDir}/debbuild/opt/lic/docker/jar/*.jar \
|
||||
--exclude=${LicenseBuildDir}/debbuild/opt/lic/docs \
|
||||
--exclude=${LicenseBuildDir}/release \
|
||||
${WFCRelativeDir} 1>/dev/null
|
||||
echo "done"
|
||||
}
|
||||
|
||||
# create deb package
|
||||
create-deb(){
|
||||
Version=$(grep '^Version:' ${DebBuildDir}/DEBIAN/control | awk '{print $2}')
|
||||
DebPkgFile=${ProjectL}-${Version}-${RelDate}-ub22.deb
|
||||
echo -n "Begin build deb package(${DebPkgFile}) ... "
|
||||
dpkg -b ${DebBuildDir} ${DebReleseDir}/${DebPkgFile} 1>/dev/null
|
||||
echo "done"
|
||||
}
|
||||
|
||||
post-build(){
|
||||
# if [ -f ${TmpEnvFile} ] && [ ! -f ${BuildDockerDir}/.env ]; then
|
||||
# mv -f ${TmpEnvFile} ${BuildDockerDir}/.env
|
||||
# fi
|
||||
cd ${BuildRootDir}
|
||||
sed -i "s/${RelDate}/YYYYMMDD/" ${BuildDockerDir}/env/wfc-release
|
||||
# git checkout ${BuildDockerDir}/env/wfc-release
|
||||
# git update-index --no-assume-unchanged ${BuildDockerDir}/env/wfc-release
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
"extras")
|
||||
build-extras
|
||||
;;
|
||||
"jar")
|
||||
build-jar
|
||||
;;
|
||||
"dist")
|
||||
build-dist
|
||||
;;
|
||||
"copy")
|
||||
copy-file
|
||||
;;
|
||||
"tar")
|
||||
if [ "$SKIP_PRE_GIT_PULL" = false ]; then
|
||||
pre-git-pull
|
||||
fi
|
||||
pre-build-tar
|
||||
build-extras
|
||||
build-jar
|
||||
build-dist
|
||||
copy-file
|
||||
create-tar
|
||||
post-build
|
||||
;;
|
||||
"deb")
|
||||
if [ "$SKIP_PRE_GIT_PULL" = false ]; then
|
||||
pre-git-pull
|
||||
fi
|
||||
pre-build-deb
|
||||
build-extras
|
||||
build-jar
|
||||
build-dist
|
||||
copy-file
|
||||
copy-file-debbuild
|
||||
create-deb
|
||||
post-build
|
||||
;;
|
||||
"srctar")
|
||||
if [ "$SKIP_PRE_GIT_PULL" = false ]; then
|
||||
pre-git-pull
|
||||
fi
|
||||
pre-build-src-tar
|
||||
clean-jar
|
||||
create-src-tar
|
||||
# post-build
|
||||
;;
|
||||
"all")
|
||||
# Recursively call the script with the 'deb' argument and pass necessary parameters
|
||||
$0 deb "${ARGS[@]:2}"
|
||||
# Recursively call the script with the 'tar' argument and pass necessary parameters
|
||||
$0 tar "${ARGS[@]:2}"
|
||||
;;
|
||||
*)
|
||||
usage
|
||||
;;
|
||||
esac
|
||||
@@ -1,4 +0,0 @@
|
||||
Package=WFC
|
||||
RelVersion=1.0.19
|
||||
Architecture=amd64
|
||||
Description='MacroHub Control and Billing System'
|
||||
@@ -1,90 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
GitRootDir=$(dirname $(dirname $(dirname $(realpath $0))))
|
||||
BERootDir=${GitRootDir}/be.wfc
|
||||
FERootDir=${GitRootDir}/fe.wfc
|
||||
FEUserRootDir=${GitRootDir}/fe.wfc.user
|
||||
BuildRootDir=${GitRootDir}/build.wfc
|
||||
I18nResourcesDir=${BERootDir}/wfc-common/wfc-common-core/src/main/resources
|
||||
|
||||
WFCWorkDir=/opt/wfc
|
||||
BuildDockerDir=${BuildRootDir}/build/docker
|
||||
|
||||
# 复制项目的文件到对应docker路径,便于一键生成镜像。
|
||||
usage() {
|
||||
echo "Usage: sh copy.sh"
|
||||
exit 1
|
||||
}
|
||||
|
||||
if [ $# -ne 1 ]; then
|
||||
GitRootDir=$1
|
||||
fi
|
||||
|
||||
# copy sql
|
||||
echo -n "Begin copy sql ... "
|
||||
cp ${BERootDir}/sql/wfc_config_db/wfc_config_db.sql ${BuildDockerDir}/mysql/db
|
||||
cp ${BERootDir}/sql/wfc_system_db/wfc_system_db.sql ${BuildDockerDir}/mysql/db
|
||||
cp ${BERootDir}/sql/wfc_user_db/wfc_user_db.sql ${BuildDockerDir}/mysql/db
|
||||
rm -rf ${BuildDockerDir}/mysql/db/upgrade/*
|
||||
cp -rf ${BERootDir}/sql/upgrade ${BuildDockerDir}/mysql/db/
|
||||
#ln -sf /tmp ${BuildDockerDir}/mysql/
|
||||
echo "done"
|
||||
|
||||
# copy html
|
||||
echo -n "Begin copy system html ... "
|
||||
mkdir -p ${BuildDockerDir}/nginx/html/dist/sys
|
||||
rm -rf ${BuildDockerDir}/nginx/html/dist/sys/*
|
||||
cp -rf ${FERootDir}/dist/* ${BuildDockerDir}/nginx/html/dist/sys/
|
||||
echo "done"
|
||||
|
||||
echo -n "Begin copy user html ... "
|
||||
mkdir -p ${BuildDockerDir}/nginx/html/dist/u
|
||||
rm -rf ${BuildDockerDir}/nginx/html/dist/u/*
|
||||
cp -rf ${FEUserRootDir}/dist/* ${BuildDockerDir}/nginx/html/dist/u/
|
||||
echo "done"
|
||||
|
||||
# copy i18n message resuorces
|
||||
echo -n "Begin copy i18n message resources ... "
|
||||
if [ ! -d ${BuildDockerDir}/conf/default/i18n ]; then
|
||||
mkdir -p ${BuildDockerDir}/conf/default/i18n
|
||||
fi
|
||||
cp -rf ${I18nResourcesDir}/i18n/* ${BuildDockerDir}/conf/default/i18n/
|
||||
echo "done"
|
||||
|
||||
# copy jar
|
||||
echo -n "Begin copy wfc-gateway ... "
|
||||
cp ${BERootDir}/wfc-gateway/target/wfc-gateway.jar ${BuildDockerDir}/wfc/gateway/jar
|
||||
echo "done"
|
||||
|
||||
echo -n "Begin copy wfc-auth ... "
|
||||
cp ${BERootDir}/wfc-auth/target/wfc-auth.jar ${BuildDockerDir}/wfc/auth/jar
|
||||
echo "done"
|
||||
|
||||
# echo -n "Begin copy wfc-visual ... "
|
||||
# cp ${BERootDir}/wfc-visual/wfc-visual-monitor/target/wfc-visual-monitor.jar ${BuildDockerDir}/wfc/visual/monitor/jar
|
||||
# echo "done"
|
||||
|
||||
echo -n "Begin copy wfc-modules-system ... "
|
||||
cp ${BERootDir}/wfc-modules/wfc-system/target/wfc-modules-system.jar ${BuildDockerDir}/wfc/modules/system/jar
|
||||
echo "done"
|
||||
|
||||
echo -n "Begin copy wfc-modules-user ... "
|
||||
cp ${BERootDir}/wfc-modules/wfc-user/target/wfc-modules-user.jar ${BuildDockerDir}/wfc/modules/user/jar
|
||||
echo "done"
|
||||
|
||||
echo -n "Begin copy wfc-modules-file ... "
|
||||
cp ${BERootDir}/wfc-modules/wfc-file/target/wfc-modules-file.jar ${BuildDockerDir}/wfc/modules/file/jar
|
||||
echo "done"
|
||||
|
||||
echo -n "Begin copy wfc-modules-job ... "
|
||||
cp ${BERootDir}/wfc-modules/wfc-job/target/wfc-modules-job.jar ${BuildDockerDir}/wfc/modules/job/jar
|
||||
echo "done"
|
||||
|
||||
# echo -n "Begin copy wfc-modules-gen ... "
|
||||
# cp ${BERootDir}/wfc-modules/wfc-gen/target/wfc-modules-gen.jar ${BuildDockerDir}/wfc/modules/gen/jar
|
||||
# echo "done"
|
||||
|
||||
echo -n "Begin copy wfc-modules-payment ... "
|
||||
cp -rf ${BERootDir}/wfc-modules/wfc-payment/target/wfc-modules-payment.jar ${BuildDockerDir}/wfc/modules/payment/jar
|
||||
echo "done"
|
||||
|
||||
@@ -1,75 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
git_root_dir=$(dirname $(dirname $(dirname $(realpath $0))))
|
||||
build_root_dir=${git_root_dir}/build.wfc
|
||||
build_doc_dir=${build_root_dir}/docs/03-configuration
|
||||
local_tars_rel_dir=${build_root_dir}/release/tars
|
||||
local_debs_rel_dir=${build_root_dir}/release/debs
|
||||
wfc_rel_dir_205=/mnt/public/release/omc/wfc
|
||||
tars_rel_dir_205=${wfc_rel_dir_205}/tars/
|
||||
debs_rel_dir_205=${wfc_rel_dir_205}/debs/
|
||||
server_ip_205=192.168.1.205
|
||||
passwd=admin123
|
||||
|
||||
usage() {
|
||||
echo "Usage: sh cpto205.sh {rel_date}"
|
||||
echo " {rel_date} should be in the format YYYYMMDD"
|
||||
}
|
||||
|
||||
if [ ! -z "$1" ]; then
|
||||
rel_date=$1
|
||||
else
|
||||
rel_date=$(date +%Y%m%d)
|
||||
fi
|
||||
|
||||
quickstart_file=${build_doc_dir}/03-WANFi软件快速安装.pdf
|
||||
latest_tar_file=$(ls -t ${local_tars_rel_dir}/*${rel_date}* 2>/dev/null | head -n 1)
|
||||
latest_deb_file=$(ls -t ${local_debs_rel_dir}/*${rel_date}* 2>/dev/null | head -n 1)
|
||||
|
||||
# Use expect to automatically answer yes and input password for rsync commands
|
||||
|
||||
if [ -n "${latest_deb_file}" ]; then
|
||||
expect <<EOF
|
||||
set timeout -1
|
||||
spawn rsync -avz ${latest_deb_file} agtuser@${server_ip_205}:${debs_rel_dir_205}
|
||||
expect {
|
||||
"yes/no" {
|
||||
send "yes\n"
|
||||
exp_continue
|
||||
}
|
||||
"password:" { send "$passwd\n" }
|
||||
}
|
||||
expect eof
|
||||
EOF
|
||||
fi
|
||||
|
||||
if [ -n "${latest_tar_file}" ]; then
|
||||
expect <<EOF
|
||||
set timeout -1
|
||||
spawn rsync -avz ${latest_tar_file} agtuser@${server_ip_205}:${tars_rel_dir_205}
|
||||
expect {
|
||||
"yes/no" {
|
||||
send "yes\n"
|
||||
exp_continue
|
||||
}
|
||||
"password:" { send "$passwd\n" }
|
||||
}
|
||||
expect eof
|
||||
EOF
|
||||
fi
|
||||
|
||||
if [ -f "${quickstart_file}" ]; then
|
||||
expect <<EOF
|
||||
set timeout -1
|
||||
spawn rsync -avz ${quickstart_file} agtuser@${server_ip_205}:${wfc_rel_dir_205}
|
||||
expect {
|
||||
"yes/no" {
|
||||
send "yes\n"
|
||||
exp_continue
|
||||
}
|
||||
"password:" { send "$passwd\n" }
|
||||
}
|
||||
expect eof
|
||||
EOF
|
||||
fi
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.jar.Attributes;
|
||||
import java.util.jar.JarFile;
|
||||
import java.util.jar.Manifest;
|
||||
|
||||
public class printJarVer {
|
||||
public static void main(String[] args) {
|
||||
if (args.length == 0) {
|
||||
System.out.println("Please input jars path and file name.");
|
||||
return;
|
||||
}
|
||||
|
||||
for (String jarPath : args) {
|
||||
File jarFile = new File(jarPath);
|
||||
String jarName = jarFile.getName();
|
||||
try (JarFile jar = new JarFile(jarFile)) {
|
||||
Manifest manifest = jar.getManifest();
|
||||
Attributes attributes = manifest.getMainAttributes();
|
||||
String version = attributes.getValue("Implementation-Version");
|
||||
System.out.println(jarName + " version: " + (version != null ? version : "not found version info"));
|
||||
} catch (IOException e) {
|
||||
System.out.println("Can't read " + jarName + " version.");
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,66 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
WFCWorkDir=/opt/wfc
|
||||
WFCBinDir=${WFCWorkDir}/bin
|
||||
DockerDir=${WFCWorkDir}/docker
|
||||
DockerCompose=docker-compose
|
||||
PIDFile=/run/wfccontrol.pid
|
||||
|
||||
Jars="/opt/wfc/docker/wfc/auth/jar/wfc-auth.jar
|
||||
/opt/wfc/docker/wfc/gateway/jar/wfc-gateway.jar
|
||||
/opt/wfc/docker/wfc/modules/system/jar/wfc-modules-system.jar
|
||||
/opt/wfc/docker/wfc/modules/user/jar/wfc-modules-user.jar
|
||||
/opt/wfc/docker/wfc/modules/file/jar/wfc-modules-file.jar
|
||||
/opt/wfc/docker/wfc/modules/job/jar/wfc-modules-job.jar
|
||||
/opt/wfc/docker/wfc/modules/payment/jar/wfc-modules-payment.jar
|
||||
"
|
||||
|
||||
case "$1" in
|
||||
start)
|
||||
cd ${DockerDir}
|
||||
if [ -z "$2" ]; then
|
||||
${DockerCompose} up -d
|
||||
echo $! > ${PIDFile}
|
||||
else
|
||||
${DockerCompose} up -d $2
|
||||
fi
|
||||
;;
|
||||
stop)
|
||||
cd ${DockerDir}
|
||||
if [ -z "$2" ]; then
|
||||
${DockerCompose} stop
|
||||
if [ -f ${PIDFile} ]; then
|
||||
rm ${PIDFile}
|
||||
fi
|
||||
else
|
||||
${DockerCompose} stop $2
|
||||
fi
|
||||
;;
|
||||
restart)
|
||||
$0 stop $2
|
||||
sleep 1
|
||||
$0 start $2
|
||||
;;
|
||||
status)
|
||||
cd ${DockerDir}
|
||||
if [ -z "$2" ]; then
|
||||
${DockerCompose} ps
|
||||
else
|
||||
${DockerCompose} ps $2
|
||||
fi
|
||||
;;
|
||||
version)
|
||||
cd ${WFCBinDir}
|
||||
# java printJarVer ${Jars}
|
||||
for jar in ${Jars}; do
|
||||
jar_name=$(basename "$jar" .jar)
|
||||
version=$(unzip -p "$jar" META-INF/MANIFEST.MF | grep 'Implementation-Version' | awk '{print $2}')
|
||||
echo "$jar_name version: $version"
|
||||
done
|
||||
;;
|
||||
*)
|
||||
echo "WANFi Control and Billing System Service ... "
|
||||
echo "Usage: $0 start|stop|restart|status|version"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
@@ -1,328 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
wfc_work_dir=/opt/wfc
|
||||
docker_work_dir=${wfc_work_dir}/docker
|
||||
redis_work_dir=${docker_work_dir}/redis
|
||||
src_service_dir=${wfc_work_dir}/systemd/system
|
||||
dst_service_dir=/etc/systemd/system
|
||||
java_work_dir=${docker_work_dir}/java
|
||||
ssl_work_dir=${docker_work_dir}/nginx/ssl
|
||||
|
||||
base_dockers="wfc-nacos wfc-mysql wfc-redis"
|
||||
jar_dockers="wfc-auth wfc-gateway wfc-modules-system wfc-modules-user wfc-modules-job wfc-modules-file wfc-modules-payment"
|
||||
modules_dockers="wfc-modules-system wfc-modules-user wfc-modules-job wfc-modules-file wfc-modules-payment"
|
||||
fe_docker=wfc-nginx
|
||||
|
||||
docker_mysql_conf_d=/etc/mysql/conf.d
|
||||
docker_my_conf_file=${docker_mysql_conf_d}/my.cnf
|
||||
|
||||
wfc_jar_images=$(docker images --format "{{.Repository}}"|grep -E "docker-wfc-|docker_wfc-")
|
||||
wfc_modules_images=$(docker images --format "{{.Repository}}"|grep -E "docker-wfc-modules-|docker_wfc-modules-")
|
||||
|
||||
conf_dirs=" ${docker_work_dir}/conf
|
||||
${docker_work_dir}/redis/conf
|
||||
${docker_work_dir}/mysql/conf.d
|
||||
${docker_work_dir}/nacos/conf
|
||||
${docker_work_dir}/nginx/conf
|
||||
${docker_work_dir}/wfc/gateway/conf
|
||||
${docker_work_dir}/wfc/auth/conf
|
||||
${docker_work_dir}/wfc/modules/system/conf
|
||||
${docker_work_dir}/wfc/modules/user/conf
|
||||
${docker_work_dir}/wfc/modules/job/conf
|
||||
${docker_work_dir}/wfc/modules/file/conf
|
||||
${docker_work_dir}/wfc/modules/payment/conf
|
||||
"
|
||||
case "$1" in
|
||||
env)
|
||||
# prepare directory
|
||||
mkdir -p ${docker_work_dir}/mysql/tmp
|
||||
chown -R root:root ${docker_work_dir}
|
||||
if [ ! -d ${redis_work_dir}/data ]; then
|
||||
mkdir -p ${redis_work_dir}/data
|
||||
fi
|
||||
|
||||
# setup system serivce
|
||||
if [ -f ${src_service_dir}/wfccontrol.service ]; then
|
||||
cp -rf ${src_service_dir}/wfccontrol.service ${dst_service_dir}/
|
||||
systemctl daemon-reload
|
||||
systemctl enable wfccontrol.service
|
||||
fi
|
||||
|
||||
if [ ! -f ${docker_work_dir}/docker-compose.yml ]; then
|
||||
cp ${docker_work_dir}/compose/docker-compose.yml ${docker_work_dir}/docker-compose.yml
|
||||
fi
|
||||
|
||||
# 获取传入的IP地址
|
||||
new_ip=$2
|
||||
|
||||
# env定义原始文件和临时文件
|
||||
def_env_file=${docker_work_dir}/env/default.env
|
||||
org_env_file=${docker_work_dir}/.env
|
||||
tmp_env_file=${docker_work_dir}/temp.env
|
||||
|
||||
if [ ! -f ${org_env_file} ]; then
|
||||
cp ${def_env_file} ${org_env_file}
|
||||
fi
|
||||
|
||||
# copy default config files to conf directory
|
||||
for conf_dir in $conf_dirs; do
|
||||
if [ ! -d $conf_dir ]; then
|
||||
continue
|
||||
fi
|
||||
if [ ! -d $conf_dir/default ]; then
|
||||
continue
|
||||
fi
|
||||
# 遍历config default配置文件
|
||||
for file in "$conf_dir/default"/*; do
|
||||
filename=$(basename "$file")
|
||||
|
||||
# 如果conf目录下不存在相应的文件,则拷贝
|
||||
if [ ! -f "$conf_dir/$filename" ]; then
|
||||
cp -rf "$file" "$conf_dir/"
|
||||
fi
|
||||
done
|
||||
done
|
||||
|
||||
|
||||
if [ ! -z "${new_ip}" ]; then
|
||||
# 使用sed命令替换IP地址
|
||||
# 替换.env文件
|
||||
sed "s/WFC_SERVER_IP=.*/WFC_SERVER_IP=${new_ip}/" ${org_env_file} > $tmp_env_file
|
||||
mv $tmp_env_file $org_env_file
|
||||
fi
|
||||
|
||||
# Check system timezone
|
||||
if [ -f /etc/timezone ]; then
|
||||
TIMEZONE=$(cat /etc/timezone)
|
||||
elif [ -f /etc/localtime ]; then
|
||||
TIMEZONE=$(readlink /etc/localtime | sed 's|.*/zoneinfo/||')
|
||||
else
|
||||
TIMEZONE="UTC"
|
||||
fi
|
||||
if grep -q "TZ=" ${org_env_file}; then
|
||||
sed "s|TZ=.*|TZ=${TIMEZONE}|" ${org_env_file} > $tmp_env_file
|
||||
mv $tmp_env_file $org_env_file
|
||||
else
|
||||
echo "TZ=${TIMEZONE}" >> ${org_env_file}
|
||||
fi
|
||||
|
||||
# replace nginx.conf gateway server ip and port
|
||||
|
||||
while IFS= read -r line; do
|
||||
if [[ ! $line =~ ^# && $line =~ .*=.* ]]; then
|
||||
eval "export $line"
|
||||
fi
|
||||
done < $org_env_file
|
||||
|
||||
# 生成ssl证书
|
||||
# openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout ${ssl_work_dir}/server.key -out ${ssl_work_dir}/server.crt -config ${ssl_work_dir}/req.cnf -sha256
|
||||
|
||||
# nginx定义原始文件和临时文件
|
||||
org_nginx_conf=${docker_work_dir}/nginx/conf/nginx.conf
|
||||
tmp_intermediate_conf=${docker_work_dir}/nginx/conf/tmp_intermediate.conf
|
||||
tmp_nginx_conf=${docker_work_dir}/nginx/conf/tmp_nginx.conf
|
||||
|
||||
# 使用sed命令替换proxy_pass行中的IP地址
|
||||
# Define intermediate temporary nginx configuration file
|
||||
# Replace the proxy_pass line with the correct GATEWAY_SERVER_IP and GATEWAY_SERVER_PORT
|
||||
sed "s|proxy_pass http://.*:8080/;|proxy_pass http://${GATEWAY_SERVER_IP}:${GATEWAY_SERVER_PORT}/;|" $org_nginx_conf > $tmp_intermediate_conf
|
||||
|
||||
# Replace the IP address and port for the file server in the nginx configuration
|
||||
sed "s|proxy_pass http://.*:9201/;|proxy_pass http://${GATEWAY_SERVER_IP}:${WFC_FILE_PORT}/;|" $tmp_intermediate_conf > $tmp_nginx_conf
|
||||
|
||||
# Remove the intermediate temporary file and move the final configuration
|
||||
rm $tmp_intermediate_conf
|
||||
mv $tmp_nginx_conf $org_nginx_conf
|
||||
|
||||
# 统一替换系统名
|
||||
nginx_html_u_zh=${docker_work_dir}/nginx/html/dist/u/langs/zh-cn.js
|
||||
nginx_html_u_en=${docker_work_dir}/nginx/html/dist/u/langs/en-us.js
|
||||
nginx_html_sys_zh=${docker_work_dir}/nginx/html/dist/sys/langs/zh-cn.js
|
||||
nginx_html_sys_en=${docker_work_dir}/nginx/html/dist/sys/langs/en-us.js
|
||||
sed -i "3s|title: '.*'|title: '${SYSTEM_TITLE}'|" $nginx_html_u_zh
|
||||
sed -i "3s|title: '.*'|title: '${SYSTEM_TITLE}'|" $nginx_html_u_en
|
||||
sed -i "3s|title: '.*'|title: '${SYSTEM_TITLE}'|" $nginx_html_sys_zh
|
||||
sed -i "3s|title: '.*'|title: '${SYSTEM_TITLE}'|" $nginx_html_sys_en
|
||||
|
||||
# chown and chmod for all docker work directory
|
||||
if [ -d ${docker_work_dir}/mysql/data ]; then
|
||||
chown -R 999:999 ${docker_work_dir}/mysql/data
|
||||
fi
|
||||
find ${docker_work_dir} -type d -exec chmod 775 {} \;
|
||||
find ${docker_work_dir} -type f -exec chmod 664 {} \;
|
||||
chown root:root ${docker_work_dir}/mysql/conf.d/my.cnf
|
||||
chmod 600 ${docker_work_dir}/mysql/conf.d/my.cnf
|
||||
chmod 1777 ${docker_work_dir}/mysql/tmp
|
||||
;;
|
||||
initdb)
|
||||
# init database
|
||||
cd ${docker_work_dir}
|
||||
docker-compose up -d wfc-mysql
|
||||
sleep 10
|
||||
for sql in ${docker_work_dir}/mysql/db/*.sql; do
|
||||
if [ -f "$sql" ]; then
|
||||
echo -n "Execute SQL script: ${sql} ... "
|
||||
docker exec -i wfc-mysql mysql --defaults-extra-file=${docker_my_conf_file} < ${sql}
|
||||
if [ $? = 0 ]; then
|
||||
echo "done"
|
||||
fi
|
||||
else
|
||||
echo "No SQL files found in ${docker_work_dir}/mysql/db/"
|
||||
fi
|
||||
done
|
||||
;;
|
||||
upgdb)
|
||||
mysql_container_name=wfc-mysql
|
||||
# upgrade database
|
||||
cd ${docker_work_dir}
|
||||
docker-compose up -d ${mysql_container_name}
|
||||
sleep 10
|
||||
# 获取 MySQL 容器的 IP 地址和端口
|
||||
mysql_container_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' ${mysql_container_name})
|
||||
mysql_container_port=$(docker inspect -f '{{(index (index .NetworkSettings.Ports "3306/tcp") 0).HostPort}}' ${mysql_container_name})
|
||||
|
||||
# 在容器内生成 my.cnf 文件
|
||||
docker exec ${mysql_container_name} bash -c "cat <<EOF > ${docker_my_conf_file}
|
||||
[client]
|
||||
user=root
|
||||
password=\${MYSQL_ROOT_PASSWORD}
|
||||
host=wfc-mysql
|
||||
port=${mysql_container_port}
|
||||
EOF"
|
||||
|
||||
# 检查容器健康状态
|
||||
timeout=60
|
||||
interval=2
|
||||
elapsed=0
|
||||
while [ $elapsed -lt $timeout ]; do
|
||||
health_status=$(docker inspect --format='{{.State.Health.Status}}' $mysql_container_name)
|
||||
if [ "$health_status" == "healthy" ]; then
|
||||
echo "Container $mysql_container_name is healthy"
|
||||
echo "Executing database upgrade scripts ..."
|
||||
${wfc_work_dir}/bin/wfcupgrade.sh
|
||||
exit 0
|
||||
fi
|
||||
sleep $interval
|
||||
elapsed=$((elapsed + interval))
|
||||
done
|
||||
|
||||
echo "Container $mysql_container_name is not healthy after $timeout seconds, please check the container status."
|
||||
;;
|
||||
base)
|
||||
# build docker compose
|
||||
cd ${docker_work_dir}
|
||||
docker-compose stop ${base_dockers}
|
||||
docker-compose build ${base_dockers}
|
||||
cd ${java_work_dir}
|
||||
if [[ "$(docker images -q wfc-java:jre8 2> /dev/null)" == "" ]]; then
|
||||
echo "Building wfc-java:jre8"
|
||||
docker build -t wfc-java:jre8 -f dockerfile .
|
||||
fi
|
||||
;;
|
||||
jar)
|
||||
# build docker compose
|
||||
cd ${docker_work_dir}
|
||||
docker-compose stop ${jar_dockers}
|
||||
docker-compose build ${jar_dockers}
|
||||
;;
|
||||
modules)
|
||||
# build docker compose
|
||||
cd ${docker_work_dir}
|
||||
docker-compose stop ${modules_dockers}
|
||||
docker-compose build ${modules_dockers}
|
||||
;;
|
||||
fe)
|
||||
# build docker compose
|
||||
cd ${docker_work_dir}
|
||||
docker-compose stop ${fe_docker}
|
||||
docker-compose build ${fe_docker}
|
||||
;;
|
||||
all)
|
||||
$0 env $2
|
||||
$0 base
|
||||
$0 jar
|
||||
$0 fe
|
||||
$0 upgdb
|
||||
;;
|
||||
rm)
|
||||
case "$2" in
|
||||
base)
|
||||
cd ${docker_work_dir}
|
||||
docker-compose stop ${base_dockers}
|
||||
for base_docker in ${base_dockers}; do
|
||||
docker rm ${base_docker}
|
||||
done
|
||||
;;
|
||||
jar)
|
||||
cd ${docker_work_dir}
|
||||
docker-compose stop ${jar_dockers}
|
||||
docker rm ${jar_dockers}
|
||||
if [ ! -z "${wfc_jar_images}" ]; then
|
||||
docker rmi ${wfc_jar_images}
|
||||
fi
|
||||
|
||||
# for jar_docker in ${jar_dockers}; do
|
||||
# docker rm ${jar_docker}
|
||||
# docker rmi docker_${jar_docker}
|
||||
# done
|
||||
;;
|
||||
modules)
|
||||
cd ${docker_work_dir}
|
||||
docker-compose stop ${modules_dockers}
|
||||
docker rm ${modules_dockers}
|
||||
if [ ! -z "${wfc_modules_images}" ]; then
|
||||
docker rmi ${wfc_modules_images}
|
||||
fi
|
||||
|
||||
# for modules_docker in ${modules_dockers}; do
|
||||
# docker rm ${modules_docker}
|
||||
# docker rmi docker_${modules_docker}
|
||||
# docker rmi docker-${modules_docker}
|
||||
# done
|
||||
;;
|
||||
fe)
|
||||
cd ${docker_work_dir}
|
||||
docker-compose stop ${fe_docker}
|
||||
docker rm ${fe_docker}
|
||||
# docker rmi nginx
|
||||
;;
|
||||
network)
|
||||
cd ${docker_work_dir}
|
||||
docker-compose stop
|
||||
docker network rm wfc-fe-network
|
||||
docker network rm wfc-be-network
|
||||
;;
|
||||
all)
|
||||
$0 rm base
|
||||
$0 rm jar
|
||||
$0 rm fe
|
||||
$0 rm network
|
||||
;;
|
||||
*)
|
||||
echo "WANFi Control and Billing System Setup ... "
|
||||
echo "Usage: $0 rm [base|jar|modules|fe|network|all]"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
prune)
|
||||
cd ${docker_work_dir}
|
||||
docker-compose down
|
||||
docker system prune -a
|
||||
;;
|
||||
*)
|
||||
echo "WANFi Control and Billing System Setup ... "
|
||||
echo "Usage: $0 env|initdb|upgdb|base|jar|modules|fe|all|rm [base|jar|modules|fe|network|all]|prune"
|
||||
echo " $0 env [IP]"
|
||||
echo " $0 initdb"
|
||||
echo " $0 upgdb"
|
||||
echo " $0 base|jar|modules|fe"
|
||||
echo " $0 all [IP]"
|
||||
echo " $0 rm [base|jar|modules|fe|network|all]"
|
||||
echo " $0 prune"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
|
||||
|
||||
@@ -1,43 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
wfc_work_dir=/opt/wfc
|
||||
docker_work_dir=${wfc_work_dir}/docker
|
||||
mysql_sql_dir=${docker_work_dir}/mysql/db
|
||||
docker_mysql_conf_d=/etc/mysql/conf.d
|
||||
docker_my_conf_file=${docker_mysql_conf_d}/my.cnf
|
||||
mysql_container_name=wfc-mysql
|
||||
|
||||
execute_sql_scripts() {
|
||||
version=$1
|
||||
cd ${mysql_sql_dir}
|
||||
for sql in ./upgrade/${version}/*.sql; do
|
||||
if [ -f "$sql" ]; then
|
||||
echo -n "Execute SQL script: ${sql} ... "
|
||||
docker exec -i ${mysql_container_name} mysql --defaults-extra-file=${docker_my_conf_file} < ${sql}
|
||||
if [ $? = 0 ]; then
|
||||
echo "done"
|
||||
fi
|
||||
else
|
||||
echo "No SQL files found in ./upgrade/${version}/"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
if [ -z "$1" ]; then
|
||||
# No parameter, traverse all subdirectories in upgrade directory
|
||||
for dir in ${mysql_sql_dir}/upgrade/*; do
|
||||
if [ -d "$dir" ]; then
|
||||
version=$(basename $dir)
|
||||
echo "Executing upgrade for version $version"
|
||||
execute_sql_scripts $version
|
||||
fi
|
||||
done
|
||||
else
|
||||
# Parameter provided, execute for the specific version or database name
|
||||
ver_or_dbname=$1
|
||||
if [ ! -d ${mysql_sql_dir}/upgrade/${ver_or_dbname} ]; then
|
||||
echo "No upgrade scripts found for ${ver_or_dbname}"
|
||||
exit 1
|
||||
fi
|
||||
execute_sql_scripts $ver_or_dbname
|
||||
fi
|
||||
@@ -1,36 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
wfc_work_dir=/opt/wfc
|
||||
docker_work_dir=${wfc_work_dir}/docker
|
||||
|
||||
# Get the new version number
|
||||
new_version=$(grep '^VERSION_ID=' ${docker_work_dir}/env/wfc-release | cut -d'=' -f2 | tr -d '"')
|
||||
|
||||
# Get the original version number
|
||||
if [ -f ${docker_work_dir}/.wfc-release ]; then
|
||||
old_version=$(grep '^VERSION_ID=' ${docker_work_dir}/.wfc-release | cut -d'=' -f2 | tr -d '"')
|
||||
else
|
||||
old_version=$new_version
|
||||
fi
|
||||
|
||||
# Convert the version number to a comparable format
|
||||
version_to_number() {
|
||||
echo "$1" | awk -F. '{ printf("%d%03d%03d\n", $1,$2,$3); }'
|
||||
}
|
||||
|
||||
new_version_num=$(version_to_number $new_version)
|
||||
old_version_num=$(version_to_number $old_version)
|
||||
|
||||
# Find and execute all version directories higher than the original version number
|
||||
for dir in ${docker_work_dir}/mysql/db/upgrade/*; do
|
||||
version=$(basename $dir)
|
||||
version_num=$(version_to_number $version)
|
||||
if [ $version_num -gt $old_version_num ] && [ $version_num -le $new_version_num ]; then
|
||||
echo "Executing upgrade for version $version"
|
||||
${wfc_work_dir}/bin/wfcupgdb.sh $version
|
||||
fi
|
||||
done
|
||||
|
||||
# Update the version number
|
||||
cp -f ${docker_work_dir}/env/wfc-release ${docker_work_dir}/.wfc-release
|
||||
echo "Upgrade complete"
|
||||
@@ -1,27 +0,0 @@
|
||||
WFC_CONFIG_DATABASE=wfc_config_db
|
||||
WFC_SYSTEM_DATABASE=wfc_system_db
|
||||
WFC_USER_DATABASE=wfc_user_db
|
||||
MYSQL_SERVICE_NAME=wfc-mysql
|
||||
MYSQL_SERVICE_PORT=3306
|
||||
MYSQL_ROOT_PASSWORD=123456
|
||||
MYSQL_SERVICE_USER=root
|
||||
MYSQL_SERVICE_PASSWORD=123456
|
||||
REDIS_PORT=6379
|
||||
NACOS_PROFILE_NAME=prod
|
||||
NACOS_NAME_SPACE=wfc-prod
|
||||
NACOS_SERVER_NAME=wfc-nacos
|
||||
WFC_SERVER_PORT=80
|
||||
WFC_SERVER_HTTPS_PORT=443
|
||||
NACOS_SERVER_PORT=8848
|
||||
GATEWAY_SERVER_PORT=8080
|
||||
AUTH_SERVER_PORT=8081
|
||||
WFC_FILE_PORT=9201
|
||||
WFC_JOB_PORT=9203
|
||||
WFC_PAYMENT_PORT=9204
|
||||
WFC_SYSTEM_PORT=9205
|
||||
WFC_USER_PORT=9206
|
||||
WFC_SERVER_IP=192.168.2.116
|
||||
NACOS_SERVER_IP=${WFC_SERVER_IP}
|
||||
GATEWAY_SERVER_IP=${WFC_SERVER_IP}
|
||||
RESTART_OPTION=on-failure:5
|
||||
SYSTEM_TITLE=MacroHub
|
||||
@@ -1,393 +0,0 @@
|
||||
services:
|
||||
wfc-mysql:
|
||||
image: mysql:5.7
|
||||
container_name: ${MYSQL_SERVICE_NAME}
|
||||
build:
|
||||
context: ./mysql
|
||||
environment:
|
||||
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
|
||||
- TZ=${TZ}
|
||||
ports:
|
||||
- "${MYSQL_SERVICE_PORT}:${MYSQL_SERVICE_PORT}"
|
||||
networks:
|
||||
- wfc-be-network
|
||||
volumes:
|
||||
- ./mysql/db:/docker-entrypoint-initdb.d
|
||||
- ./mysql/conf.d:/etc/mysql/conf.d
|
||||
- ./mysql/logs:/opt/wfc/mysql/logs
|
||||
- ./mysql/data:/var/lib/mysql
|
||||
- ./mysql/tmp:/tmp
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "mysqladmin ping -u root -p'${MYSQL_ROOT_PASSWORD}'"]
|
||||
interval: 10s
|
||||
timeout: 10s
|
||||
retries: 5
|
||||
restart: ${RESTART_OPTION}
|
||||
|
||||
wfc-redis:
|
||||
image: redis:7.4.2
|
||||
container_name: wfc-redis
|
||||
build:
|
||||
context: ./redis
|
||||
environment:
|
||||
- TZ=${TZ}
|
||||
ports:
|
||||
- "${REDIS_PORT}:${REDIS_PORT}"
|
||||
networks:
|
||||
- wfc-be-network
|
||||
volumes:
|
||||
- ./redis/conf/redis.conf:/opt/wfc/redis/redis.conf
|
||||
- ./redis/data:/opt/wfc/redis/data
|
||||
command: redis-server /opt/wfc/redis/redis.conf
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "redis-cli ping"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
restart: ${RESTART_OPTION}
|
||||
|
||||
wfc-nacos:
|
||||
image: nacos/nacos-server:v2.5.0
|
||||
container_name: ${NACOS_SERVER_NAME}
|
||||
build:
|
||||
context: ./nacos
|
||||
environment:
|
||||
- MODE=standalone
|
||||
- SPRING_DATASOURCE_PLATFORM=mysql
|
||||
- MYSQL_SERVICE_HOST=${MYSQL_SERVICE_NAME}
|
||||
- MYSQL_SERVICE_DB_NAME=${WFC_CONFIG_DATABASE}
|
||||
- MYSQL_SERVICE_PORT=${MYSQL_SERVICE_PORT}
|
||||
- MYSQL_SERVICE_USER=${MYSQL_SERVICE_USER}
|
||||
- MYSQL_SERVICE_PASSWORD=${MYSQL_SERVICE_PASSWORD}
|
||||
- NACOS_PROFILE_NAME=${NACOS_PROFILE_NAME}
|
||||
- NACOS_NAME_SPACE=${NACOS_NAME_SPACE}
|
||||
- NACOS_SERVER_NAME=${NACOS_SERVER_NAME}
|
||||
- NACOS_SERVER_IP=${NACOS_SERVER_IP}
|
||||
- NACOS_SERVER_PORT=${NACOS_SERVER_PORT}
|
||||
- SPRING_CONFIG_ADDITIONAL_LOCATION=optional:classpath:/,optional:file:/home/nacos/conf/
|
||||
- TZ=${TZ}
|
||||
volumes:
|
||||
- ./nacos/logs/:/home/nacos/logs
|
||||
- ./nacos/conf/application.properties:/home/nacos/conf/application.properties
|
||||
ports:
|
||||
- "${NACOS_SERVER_PORT}:${NACOS_SERVER_PORT}"
|
||||
networks:
|
||||
- wfc-be-network
|
||||
depends_on:
|
||||
wfc-redis:
|
||||
condition: service_healthy
|
||||
wfc-mysql:
|
||||
condition: service_healthy
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "curl -f http://${NACOS_SERVER_IP}:${NACOS_SERVER_PORT}/nacos/v1/console/health/liveness || exit 1"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 5
|
||||
restart: ${RESTART_OPTION}
|
||||
|
||||
wfc-gateway:
|
||||
image: wfc-java:jre8
|
||||
container_name: wfc-gateway
|
||||
ports:
|
||||
- "${GATEWAY_SERVER_PORT}:${GATEWAY_SERVER_PORT}"
|
||||
networks:
|
||||
- wfc-be-network
|
||||
volumes:
|
||||
- ./wfc/gateway/jar/wfc-gateway.jar:/opt/wfc/app.jar
|
||||
- ./conf/application-common.yml:/opt/wfc/conf/application-common.yml
|
||||
- ./conf/i18n/:/opt/wfc/conf/i18n
|
||||
- ./wfc/gateway/conf/application.yml:/opt/wfc/conf/application.yml
|
||||
depends_on:
|
||||
wfc-redis:
|
||||
condition: service_healthy
|
||||
wfc-mysql:
|
||||
condition: service_healthy
|
||||
wfc-nacos:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
- NACOS_PROFILE_NAME=${NACOS_PROFILE_NAME}
|
||||
- NACOS_NAME_SPACE=${NACOS_NAME_SPACE}
|
||||
- NACOS_SERVER_NAME=${NACOS_SERVER_NAME}
|
||||
- NACOS_SERVER_IP=${NACOS_SERVER_IP}
|
||||
- NACOS_SERVER_PORT=${NACOS_SERVER_PORT}
|
||||
- GATEWAY_SERVER_PORT=${GATEWAY_SERVER_PORT}
|
||||
- SPRING_CONFIG_ADDITIONAL_LOCATION=optional:classpath:/,optional:file:/opt/wfc/conf/
|
||||
- TZ=${TZ}
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "curl -f http://localhost:${GATEWAY_SERVER_PORT}/actuator/health || exit 1"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 10
|
||||
restart: ${RESTART_OPTION}
|
||||
|
||||
wfc-auth:
|
||||
image: wfc-java:jre8
|
||||
container_name: wfc-auth
|
||||
ports:
|
||||
- "${AUTH_SERVER_PORT}:${AUTH_SERVER_PORT}"
|
||||
networks:
|
||||
- wfc-be-network
|
||||
volumes:
|
||||
- ./wfc/auth/jar/wfc-auth.jar:/opt/wfc/app.jar
|
||||
- ./conf/application-common.yml:/opt/wfc/conf/application-common.yml
|
||||
- ./conf/i18n/:/opt/wfc/conf/i18n
|
||||
- ./wfc/auth/conf/application.yml:/opt/wfc/conf/application.yml
|
||||
depends_on:
|
||||
wfc-redis:
|
||||
condition: service_healthy
|
||||
wfc-mysql:
|
||||
condition: service_healthy
|
||||
wfc-nacos:
|
||||
condition: service_healthy
|
||||
wfc-gateway:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
- NACOS_PROFILE_NAME=${NACOS_PROFILE_NAME}
|
||||
- NACOS_NAME_SPACE=${NACOS_NAME_SPACE}
|
||||
- NACOS_SERVER_NAME=${NACOS_SERVER_NAME}
|
||||
- NACOS_SERVER_IP=${NACOS_SERVER_IP}
|
||||
- NACOS_SERVER_PORT=${NACOS_SERVER_PORT}
|
||||
- AUTH_SERVER_PORT=${AUTH_SERVER_PORT}
|
||||
- SPRING_CONFIG_ADDITIONAL_LOCATION=optional:classpath:/,optional:file:/opt/wfc/conf/
|
||||
- TZ=${TZ}
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "curl -f http://localhost:${AUTH_SERVER_PORT}/actuator/health || exit 1"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 10
|
||||
restart: ${RESTART_OPTION}
|
||||
|
||||
wfc-modules-system:
|
||||
image: wfc-java:jre8
|
||||
container_name: wfc-modules-system
|
||||
ports:
|
||||
- "${WFC_SYSTEM_PORT}:${WFC_SYSTEM_PORT}"
|
||||
- "5005:5005" # 调试端口映射
|
||||
networks:
|
||||
- wfc-be-network
|
||||
volumes:
|
||||
- ./wfc/modules/system/jar/wfc-modules-system.jar:/opt/wfc/app.jar
|
||||
- ./conf/application-common.yml:/opt/wfc/conf/application-common.yml
|
||||
- ./conf/i18n/:/opt/wfc/conf/i18n
|
||||
- ./wfc/modules/system/conf/application.yml:/opt/wfc/conf/application.yml
|
||||
depends_on:
|
||||
wfc-redis:
|
||||
condition: service_healthy
|
||||
wfc-mysql:
|
||||
condition: service_healthy
|
||||
wfc-auth:
|
||||
condition: service_healthy
|
||||
wfc-gateway:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
- NACOS_PROFILE_NAME=${NACOS_PROFILE_NAME}
|
||||
- NACOS_NAME_SPACE=${NACOS_NAME_SPACE}
|
||||
- NACOS_SERVER_NAME=${NACOS_SERVER_NAME}
|
||||
- NACOS_SERVER_IP=${NACOS_SERVER_IP}
|
||||
- NACOS_SERVER_PORT=${NACOS_SERVER_PORT}
|
||||
- WFC_SYSTEM_PORT=${WFC_SYSTEM_PORT}
|
||||
- SPRING_CONFIG_ADDITIONAL_LOCATION=optional:classpath:/,optional:file:/opt/wfc/conf/
|
||||
- JAVA_TOOL_OPTIONS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:5005 # 调试参数
|
||||
- TZ=${TZ}
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "curl -f http://localhost:${WFC_SYSTEM_PORT}/actuator/health || exit 1"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 6
|
||||
restart: ${RESTART_OPTION}
|
||||
|
||||
wfc-modules-user:
|
||||
image: wfc-java:jre8
|
||||
container_name: wfc-modules-user
|
||||
ports:
|
||||
- "${WFC_USER_PORT}:${WFC_USER_PORT}"
|
||||
- "5006:5006" # 调试端口映射
|
||||
networks:
|
||||
- wfc-be-network
|
||||
volumes:
|
||||
- ./wfc/modules/user/jar/wfc-modules-user.jar:/opt/wfc/app.jar
|
||||
- ./conf/application-common.yml:/opt/wfc/conf/application-common.yml
|
||||
- ./conf/i18n/:/opt/wfc/conf/i18n
|
||||
- ./wfc/modules/user/conf/application.yml:/opt/wfc/conf/application.yml
|
||||
depends_on:
|
||||
wfc-redis:
|
||||
condition: service_healthy
|
||||
wfc-mysql:
|
||||
condition: service_healthy
|
||||
wfc-auth:
|
||||
condition: service_healthy
|
||||
wfc-gateway:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
- NACOS_PROFILE_NAME=${NACOS_PROFILE_NAME}
|
||||
- NACOS_NAME_SPACE=${NACOS_NAME_SPACE}
|
||||
- NACOS_SERVER_NAME=${NACOS_SERVER_NAME}
|
||||
- NACOS_SERVER_IP=${NACOS_SERVER_IP}
|
||||
- NACOS_SERVER_PORT=${NACOS_SERVER_PORT}
|
||||
- WFC_USER_PORT=${WFC_USER_PORT}
|
||||
- SPRING_CONFIG_ADDITIONAL_LOCATION=optional:classpath:/,optional:file:/opt/wfc/conf/
|
||||
- JAVA_TOOL_OPTIONS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:5006 # 调试参数
|
||||
- TZ=${TZ}
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "curl -f http://localhost:${WFC_USER_PORT}/actuator/health || exit 1"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 6
|
||||
restart: ${RESTART_OPTION}
|
||||
|
||||
wfc-modules-file:
|
||||
image: wfc-java:jre8
|
||||
container_name: wfc-modules-file
|
||||
ports:
|
||||
- "${WFC_FILE_PORT}:${WFC_FILE_PORT}"
|
||||
networks:
|
||||
- wfc-be-network
|
||||
volumes:
|
||||
- ./wfc/modules/file/jar/wfc-modules-file.jar:/opt/wfc/app.jar
|
||||
- ./wfc/modules/file/upload:/opt/wfc/upload
|
||||
- ./wfc/modules/file/logs/:/opt/wfc/logs/
|
||||
- ./conf/application-common.yml:/opt/wfc/conf/application-common.yml
|
||||
- ./conf/i18n/:/opt/wfc/conf/i18n
|
||||
- ./wfc/modules/file/conf/application.yml:/opt/wfc/conf/application.yml
|
||||
depends_on:
|
||||
wfc-auth:
|
||||
condition: service_healthy
|
||||
wfc-gateway:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
- NACOS_PROFILE_NAME=${NACOS_PROFILE_NAME}
|
||||
- NACOS_NAME_SPACE=${NACOS_NAME_SPACE}
|
||||
- NACOS_SERVER_NAME=${NACOS_SERVER_NAME}
|
||||
- NACOS_SERVER_IP=${NACOS_SERVER_IP}
|
||||
- NACOS_SERVER_PORT=${NACOS_SERVER_PORT}
|
||||
- WFC_FILE_PORT=${WFC_FILE_PORT}
|
||||
- SPRING_CONFIG_ADDITIONAL_LOCATION=optional:classpath:/,optional:file:/opt/wfc/conf/
|
||||
- TZ=${TZ}
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "curl -f http://localhost:${WFC_FILE_PORT}/actuator/health || exit 1"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 6
|
||||
restart: ${RESTART_OPTION}
|
||||
|
||||
wfc-modules-job:
|
||||
image: wfc-java:jre8
|
||||
container_name: wfc-modules-job
|
||||
ports:
|
||||
- "${WFC_JOB_PORT}:${WFC_JOB_PORT}"
|
||||
networks:
|
||||
- wfc-be-network
|
||||
volumes:
|
||||
- ./wfc/modules/job/jar/wfc-modules-job.jar:/opt/wfc/app.jar
|
||||
- ./conf/application-common.yml:/opt/wfc/conf/application-common.yml
|
||||
- ./conf/i18n/:/opt/wfc/conf/i18n
|
||||
- ./wfc/modules/job/conf/application.yml:/opt/wfc/conf/application.yml
|
||||
depends_on:
|
||||
wfc-mysql:
|
||||
condition: service_healthy
|
||||
wfc-auth:
|
||||
condition: service_healthy
|
||||
wfc-gateway:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
- NACOS_PROFILE_NAME=${NACOS_PROFILE_NAME}
|
||||
- NACOS_NAME_SPACE=${NACOS_NAME_SPACE}
|
||||
- NACOS_SERVER_NAME=${NACOS_SERVER_NAME}
|
||||
- NACOS_SERVER_IP=${NACOS_SERVER_IP}
|
||||
- NACOS_SERVER_PORT=${NACOS_SERVER_PORT}
|
||||
- WFC_JOB_PORT=${WFC_JOB_PORT}
|
||||
- SPRING_CONFIG_ADDITIONAL_LOCATION=optional:classpath:/,optional:file:/opt/wfc/conf/
|
||||
- TZ=${TZ}
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "curl -f http://localhost:${WFC_JOB_PORT}/actuator/health || exit 1"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 6
|
||||
restart: ${RESTART_OPTION}
|
||||
|
||||
wfc-modules-payment:
|
||||
image: wfc-java:jre8
|
||||
container_name: wfc-modules-payment
|
||||
ports:
|
||||
- "${WFC_PAYMENT_PORT}:${WFC_PAYMENT_PORT}"
|
||||
networks:
|
||||
- wfc-be-network
|
||||
volumes:
|
||||
- ./wfc/modules/payment/jar/wfc-modules-payment.jar:/opt/wfc/app.jar
|
||||
- ./wfc/modules/payment/logs/:/opt/wfc/logs/
|
||||
- ./conf/application-common.yml:/opt/wfc/conf/application-common.yml
|
||||
- ./conf/i18n/:/opt/wfc/conf/i18n
|
||||
- ./wfc/modules/payment/conf/application.yml:/opt/wfc/conf/application.yml
|
||||
depends_on:
|
||||
wfc-redis:
|
||||
condition: service_healthy
|
||||
wfc-mysql:
|
||||
condition: service_healthy
|
||||
wfc-auth:
|
||||
condition: service_healthy
|
||||
wfc-gateway:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
- NACOS_PROFILE_NAME=${NACOS_PROFILE_NAME}
|
||||
- NACOS_NAME_SPACE=${NACOS_NAME_SPACE}
|
||||
- NACOS_SERVER_NAME=${NACOS_SERVER_NAME}
|
||||
- NACOS_SERVER_IP=${NACOS_SERVER_IP}
|
||||
- NACOS_SERVER_PORT=${NACOS_SERVER_PORT}
|
||||
- WFC_PAYMENT_PORT=${WFC_PAYMENT_PORT}
|
||||
- SPRING_CONFIG_ADDITIONAL_LOCATION=optional:classpath:/,optional:file:/opt/wfc/conf/
|
||||
- TZ=${TZ}
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "curl -f http://localhost:${WFC_PAYMENT_PORT}/actuator/health || exit 1"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 6
|
||||
restart: ${RESTART_OPTION}
|
||||
|
||||
wfc-nginx:
|
||||
image: nginx:1.27.4
|
||||
container_name: wfc-nginx
|
||||
build:
|
||||
context: ./nginx
|
||||
ports:
|
||||
- "${WFC_SERVER_PORT}:${WFC_SERVER_PORT}"
|
||||
networks:
|
||||
- wfc-fe-network
|
||||
- wfc-be-network
|
||||
volumes:
|
||||
- ./wfc/modules/file/upload:/opt/wfc/file/upload
|
||||
- ./nginx/html/dist:/opt/wfc/portal
|
||||
- ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf
|
||||
- ./nginx/logs:/var/log/nginx
|
||||
- ./nginx/conf.d:/etc/nginx/conf.d
|
||||
depends_on:
|
||||
wfc-modules-system:
|
||||
condition: service_healthy
|
||||
wfc-modules-user:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
- GATEWAY_SERVER_IP=${GATEWAY_SERVER_IP}
|
||||
- GATEWAY_SERVER_PORT=${GATEWAY_SERVER_PORT}
|
||||
- WFC_SERVER_IP=${WFC_SERVER_IP}
|
||||
- WFC_SERVER_PORT=${WFC_SERVER_PORT}
|
||||
- TZ=${TZ}
|
||||
healthcheck:
|
||||
test:
|
||||
- "CMD-SHELL"
|
||||
- >
|
||||
curl -f http://localhost:${WFC_SERVER_PORT}/sys &&
|
||||
curl -f http://localhost:${WFC_SERVER_PORT}/u ||
|
||||
exit 1
|
||||
interval: 30s
|
||||
timeout: 5s
|
||||
retries: 6
|
||||
restart: ${RESTART_OPTION}
|
||||
|
||||
networks:
|
||||
wfc-fe-network:
|
||||
name: wfc-fe-network
|
||||
driver: bridge
|
||||
wfc-be-network:
|
||||
name: wfc-be-network
|
||||
driver: bridge
|
||||
ipam:
|
||||
driver: default
|
||||
@@ -1,67 +0,0 @@
|
||||
services:
|
||||
omada-controller:
|
||||
container_name: omada-controller
|
||||
image: mbentley/omada-controller:5.15
|
||||
restart: unless-stopped
|
||||
ulimits:
|
||||
nofile:
|
||||
soft: 4096
|
||||
hard: 8192
|
||||
stop_grace_period: 60s
|
||||
network_mode: bridge
|
||||
environment:
|
||||
- PUID=508
|
||||
- PGID=508
|
||||
- MANAGE_HTTP_PORT=8088
|
||||
- MANAGE_HTTPS_PORT=8043
|
||||
- PORTAL_HTTP_PORT=8088
|
||||
- PORTAL_HTTPS_PORT=8843
|
||||
- PORT_APP_DISCOVERY=27001
|
||||
- PORT_ADOPT_V1=29812
|
||||
- PORT_UPGRADE_V1=29813
|
||||
- PORT_MANAGER_V1=29811
|
||||
- PORT_MANAGER_V2=29814
|
||||
- PORT_DISCOVERY=29810
|
||||
- PORT_TRANSFER_V2=29815
|
||||
- PORT_RTTY=29816
|
||||
- SHOW_SERVER_LOGS=true
|
||||
- SHOW_MONGODB_LOGS=false
|
||||
- SSL_CERT_NAME=tls.crt
|
||||
- SSL_KEY_NAME=tls.key
|
||||
- TZ=Etc/UTC
|
||||
volumes:
|
||||
- omada-data:/opt/tplink/EAPController/data
|
||||
- omada-logs:/opt/tplink/EAPController/logs
|
||||
ports:
|
||||
- 8088:8088
|
||||
- 8043:8043
|
||||
- 8843:8843
|
||||
- 19810:19810/udp
|
||||
- 29810:29810/udp
|
||||
- 29811:29811
|
||||
- 29812:29812
|
||||
- 29813:29813
|
||||
- 29814:29814
|
||||
- 29815:29815
|
||||
- 29816:29816
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "wget --quiet --tries=1 --no-check-certificate -O /dev/null --server-response --timeout=5 'https://127.0.0.1:${MANAGE_HTTPS_PORT:-8043}/login' || exit 1"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 5
|
||||
|
||||
volumes:
|
||||
omada-data:
|
||||
name: omada-data
|
||||
driver: local
|
||||
driver_opts:
|
||||
type: none
|
||||
device: /opt/tplink/EAPController/data
|
||||
o: bind
|
||||
omada-logs:
|
||||
name: omada-logs
|
||||
driver: local
|
||||
driver_opts:
|
||||
type: none
|
||||
device: /opt/tplink/EAPController/logs
|
||||
o: bind
|
||||
@@ -1,404 +0,0 @@
|
||||
services:
|
||||
wfc-mysql:
|
||||
image: mysql:5.7
|
||||
container_name: ${MYSQL_SERVICE_NAME}
|
||||
build:
|
||||
context: ./mysql
|
||||
environment:
|
||||
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
|
||||
- TZ=${TZ}
|
||||
ports:
|
||||
- "${MYSQL_SERVICE_PORT}:${MYSQL_SERVICE_PORT}"
|
||||
networks:
|
||||
- wfc-be-network
|
||||
volumes:
|
||||
- ./mysql/db:/docker-entrypoint-initdb.d
|
||||
- ./mysql/conf.d:/etc/mysql/conf.d
|
||||
- ./mysql/logs:/opt/wfc/mysql/logs
|
||||
- ./mysql/data:/var/lib/mysql
|
||||
- ./mysql/tmp:/tmp
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "mysqladmin ping -u root -p'${MYSQL_ROOT_PASSWORD}'"]
|
||||
interval: 10s
|
||||
timeout: 10s
|
||||
retries: 5
|
||||
restart: ${RESTART_OPTION}
|
||||
|
||||
wfc-redis:
|
||||
image: redis:7.4.2
|
||||
container_name: wfc-redis
|
||||
build:
|
||||
context: ./redis
|
||||
environment:
|
||||
- TZ=${TZ}
|
||||
ports:
|
||||
- "${REDIS_PORT}:${REDIS_PORT}"
|
||||
networks:
|
||||
- wfc-be-network
|
||||
volumes:
|
||||
- ./redis/conf/redis.conf:/opt/wfc/redis/redis.conf
|
||||
- ./redis/data:/opt/wfc/redis/data
|
||||
command: redis-server /opt/wfc/redis/redis.conf
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "redis-cli ping"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
restart: ${RESTART_OPTION}
|
||||
|
||||
wfc-nacos:
|
||||
image: nacos/nacos-server:v2.5.0
|
||||
container_name: ${NACOS_SERVER_NAME}
|
||||
build:
|
||||
context: ./nacos
|
||||
environment:
|
||||
- MODE=standalone
|
||||
- SPRING_DATASOURCE_PLATFORM=mysql
|
||||
- MYSQL_SERVICE_HOST=${MYSQL_SERVICE_NAME}
|
||||
- MYSQL_SERVICE_DB_NAME=${WFC_CONFIG_DATABASE}
|
||||
- MYSQL_SERVICE_PORT=${MYSQL_SERVICE_PORT}
|
||||
- MYSQL_SERVICE_USER=${MYSQL_SERVICE_USER}
|
||||
- MYSQL_SERVICE_PASSWORD=${MYSQL_SERVICE_PASSWORD}
|
||||
- NACOS_PROFILE_NAME=${NACOS_PROFILE_NAME}
|
||||
- NACOS_NAME_SPACE=${NACOS_NAME_SPACE}
|
||||
- NACOS_SERVER_NAME=${NACOS_SERVER_NAME}
|
||||
- NACOS_SERVER_IP=${NACOS_SERVER_IP}
|
||||
- NACOS_SERVER_PORT=${NACOS_SERVER_PORT}
|
||||
- SPRING_CONFIG_ADDITIONAL_LOCATION=optional:classpath:/,optional:file:/home/nacos/conf/
|
||||
- TZ=${TZ}
|
||||
volumes:
|
||||
- ./nacos/logs/:/home/nacos/logs
|
||||
- ./nacos/conf/application.properties:/home/nacos/conf/application.properties
|
||||
ports:
|
||||
- "${NACOS_SERVER_PORT}:${NACOS_SERVER_PORT}"
|
||||
networks:
|
||||
- wfc-be-network
|
||||
depends_on:
|
||||
wfc-redis:
|
||||
condition: service_healthy
|
||||
wfc-mysql:
|
||||
condition: service_healthy
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "curl -f http://${NACOS_SERVER_IP}:${NACOS_SERVER_PORT}/nacos/v1/console/health/liveness || exit 1"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 5
|
||||
restart: ${RESTART_OPTION}
|
||||
|
||||
wfc-gateway:
|
||||
build:
|
||||
context: ./wfc/gateway
|
||||
container_name: wfc-gateway
|
||||
ports:
|
||||
- "${GATEWAY_SERVER_PORT}:${GATEWAY_SERVER_PORT}"
|
||||
networks:
|
||||
- wfc-be-network
|
||||
privileged: true
|
||||
volumes:
|
||||
- ./wfc/gateway/jar/wfc-gateway.jar:/opt/wfc/app.jar
|
||||
- ./conf/application-common.yml:/opt/wfc/conf/application-common.yml
|
||||
- ./wfc/gateway/logs/:/opt/wfc/logs/
|
||||
- ./conf/i18n/:/opt/wfc/conf/i18n
|
||||
- /var/lib/pro/etc/server:/var/lib/pro/etc/server
|
||||
- ./wfc/gateway/conf/application.yml:/opt/wfc/conf/application.yml
|
||||
- ./conf/license:/opt/wfc/license
|
||||
- /sbin/dmidecode:/sbin/dmidecode
|
||||
- /dev/mem:/dev/mem
|
||||
depends_on:
|
||||
wfc-redis:
|
||||
condition: service_healthy
|
||||
wfc-mysql:
|
||||
condition: service_healthy
|
||||
wfc-nacos:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
- NACOS_PROFILE_NAME=${NACOS_PROFILE_NAME}
|
||||
- NACOS_NAME_SPACE=${NACOS_NAME_SPACE}
|
||||
- NACOS_SERVER_NAME=${NACOS_SERVER_NAME}
|
||||
- NACOS_SERVER_IP=${NACOS_SERVER_IP}
|
||||
- NACOS_SERVER_PORT=${NACOS_SERVER_PORT}
|
||||
- GATEWAY_SERVER_PORT=${GATEWAY_SERVER_PORT}
|
||||
- SPRING_CONFIG_ADDITIONAL_LOCATION=optional:classpath:/,optional:file:/opt/wfc/conf/
|
||||
- TZ=${TZ}
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "curl -f http://localhost:${GATEWAY_SERVER_PORT}/actuator/health || exit 1"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 10
|
||||
restart: ${RESTART_OPTION}
|
||||
|
||||
wfc-auth:
|
||||
image: wfc-java:jre8
|
||||
container_name: wfc-auth
|
||||
ports:
|
||||
- "${AUTH_SERVER_PORT}:${AUTH_SERVER_PORT}"
|
||||
networks:
|
||||
- wfc-be-network
|
||||
volumes:
|
||||
- ./wfc/auth/jar/wfc-auth.jar:/opt/wfc/app.jar
|
||||
- ./conf/application-common.yml:/opt/wfc/conf/application-common.yml
|
||||
- ./wfc/auth/logs/:/opt/wfc/logs/
|
||||
- ./conf/i18n/:/opt/wfc/conf/i18n
|
||||
- ./wfc/auth/conf/application.yml:/opt/wfc/conf/application.yml
|
||||
depends_on:
|
||||
wfc-redis:
|
||||
condition: service_healthy
|
||||
wfc-mysql:
|
||||
condition: service_healthy
|
||||
wfc-nacos:
|
||||
condition: service_healthy
|
||||
wfc-gateway:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
- NACOS_PROFILE_NAME=${NACOS_PROFILE_NAME}
|
||||
- NACOS_NAME_SPACE=${NACOS_NAME_SPACE}
|
||||
- NACOS_SERVER_NAME=${NACOS_SERVER_NAME}
|
||||
- NACOS_SERVER_IP=${NACOS_SERVER_IP}
|
||||
- NACOS_SERVER_PORT=${NACOS_SERVER_PORT}
|
||||
- AUTH_SERVER_PORT=${AUTH_SERVER_PORT}
|
||||
- SPRING_CONFIG_ADDITIONAL_LOCATION=optional:classpath:/,optional:file:/opt/wfc/conf/
|
||||
- TZ=${TZ}
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "curl -f http://localhost:${AUTH_SERVER_PORT}/actuator/health || exit 1"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 10
|
||||
restart: ${RESTART_OPTION}
|
||||
|
||||
wfc-modules-system:
|
||||
image: wfc-java:jre8
|
||||
container_name: wfc-modules-system
|
||||
ports:
|
||||
- "${WFC_SYSTEM_PORT}:${WFC_SYSTEM_PORT}"
|
||||
networks:
|
||||
- wfc-be-network
|
||||
volumes:
|
||||
- ./wfc/modules/system/jar/wfc-modules-system.jar:/opt/wfc/app.jar
|
||||
- ./conf/application-common.yml:/opt/wfc/conf/application-common.yml
|
||||
- ./wfc/modules/system/logs/:/opt/wfc/logs/
|
||||
- ./conf/i18n/:/opt/wfc/conf/i18n
|
||||
- ./wfc/modules/system/conf/application.yml:/opt/wfc/conf/application.yml
|
||||
- ./conf/templates/system:/opt/wfc/templates
|
||||
depends_on:
|
||||
wfc-redis:
|
||||
condition: service_healthy
|
||||
wfc-mysql:
|
||||
condition: service_healthy
|
||||
wfc-auth:
|
||||
condition: service_healthy
|
||||
wfc-gateway:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
- NACOS_PROFILE_NAME=${NACOS_PROFILE_NAME}
|
||||
- NACOS_NAME_SPACE=${NACOS_NAME_SPACE}
|
||||
- NACOS_SERVER_NAME=${NACOS_SERVER_NAME}
|
||||
- NACOS_SERVER_IP=${NACOS_SERVER_IP}
|
||||
- NACOS_SERVER_PORT=${NACOS_SERVER_PORT}
|
||||
- WFC_SYSTEM_PORT=${WFC_SYSTEM_PORT}
|
||||
- SPRING_CONFIG_ADDITIONAL_LOCATION=optional:classpath:/,optional:file:/opt/wfc/conf/
|
||||
- TZ=${TZ}
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "curl -f http://localhost:${WFC_SYSTEM_PORT}/actuator/health || exit 1"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 6
|
||||
restart: ${RESTART_OPTION}
|
||||
|
||||
wfc-modules-user:
|
||||
image: wfc-java:jre8
|
||||
container_name: wfc-modules-user
|
||||
ports:
|
||||
- "${WFC_USER_PORT}:${WFC_USER_PORT}"
|
||||
networks:
|
||||
- wfc-be-network
|
||||
volumes:
|
||||
- ./wfc/modules/user/jar/wfc-modules-user.jar:/opt/wfc/app.jar
|
||||
- ./conf/application-common.yml:/opt/wfc/conf/application-common.yml
|
||||
- ./wfc/modules/user/logs/:/opt/wfc/logs/
|
||||
- ./conf/i18n/:/opt/wfc/conf/i18n
|
||||
- ./wfc/modules/user/conf/application.yml:/opt/wfc/conf/application.yml
|
||||
- ./conf/templates/user:/opt/wfc/templates
|
||||
depends_on:
|
||||
wfc-redis:
|
||||
condition: service_healthy
|
||||
wfc-mysql:
|
||||
condition: service_healthy
|
||||
wfc-auth:
|
||||
condition: service_healthy
|
||||
wfc-gateway:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
- NACOS_PROFILE_NAME=${NACOS_PROFILE_NAME}
|
||||
- NACOS_NAME_SPACE=${NACOS_NAME_SPACE}
|
||||
- NACOS_SERVER_NAME=${NACOS_SERVER_NAME}
|
||||
- NACOS_SERVER_IP=${NACOS_SERVER_IP}
|
||||
- NACOS_SERVER_PORT=${NACOS_SERVER_PORT}
|
||||
- WFC_USER_PORT=${WFC_USER_PORT}
|
||||
- SPRING_CONFIG_ADDITIONAL_LOCATION=optional:classpath:/,optional:file:/opt/wfc/conf/
|
||||
- TZ=${TZ}
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "curl -f http://localhost:${WFC_USER_PORT}/actuator/health || exit 1"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 6
|
||||
restart: ${RESTART_OPTION}
|
||||
|
||||
wfc-modules-file:
|
||||
image: wfc-java:jre8
|
||||
container_name: wfc-modules-file
|
||||
ports:
|
||||
- "${WFC_FILE_PORT}:${WFC_FILE_PORT}"
|
||||
networks:
|
||||
- wfc-be-network
|
||||
volumes:
|
||||
- ./wfc/modules/file/jar/wfc-modules-file.jar:/opt/wfc/app.jar
|
||||
- ./wfc/modules/file/upload:/opt/wfc/upload
|
||||
- ./wfc/modules/file/logs/:/opt/wfc/logs/
|
||||
- ./conf/application-common.yml:/opt/wfc/conf/application-common.yml
|
||||
- ./conf/i18n/:/opt/wfc/conf/i18n
|
||||
- ./wfc/modules/file/conf/application.yml:/opt/wfc/conf/application.yml
|
||||
depends_on:
|
||||
wfc-auth:
|
||||
condition: service_healthy
|
||||
wfc-gateway:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
- NACOS_PROFILE_NAME=${NACOS_PROFILE_NAME}
|
||||
- NACOS_NAME_SPACE=${NACOS_NAME_SPACE}
|
||||
- NACOS_SERVER_NAME=${NACOS_SERVER_NAME}
|
||||
- NACOS_SERVER_IP=${NACOS_SERVER_IP}
|
||||
- NACOS_SERVER_PORT=${NACOS_SERVER_PORT}
|
||||
- WFC_FILE_PORT=${WFC_FILE_PORT}
|
||||
- SPRING_CONFIG_ADDITIONAL_LOCATION=optional:classpath:/,optional:file:/opt/wfc/conf/
|
||||
- TZ=${TZ}
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "curl -f http://localhost:${WFC_FILE_PORT}/actuator/health || exit 1"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 6
|
||||
restart: ${RESTART_OPTION}
|
||||
|
||||
wfc-modules-job:
|
||||
image: wfc-java:jre8
|
||||
container_name: wfc-modules-job
|
||||
ports:
|
||||
- "${WFC_JOB_PORT}:${WFC_JOB_PORT}"
|
||||
networks:
|
||||
- wfc-be-network
|
||||
volumes:
|
||||
- ./wfc/modules/job/jar/wfc-modules-job.jar:/opt/wfc/app.jar
|
||||
- ./conf/application-common.yml:/opt/wfc/conf/application-common.yml
|
||||
- ./wfc/modules/job/logs/:/opt/wfc/logs/
|
||||
- ./conf/i18n/:/opt/wfc/conf/i18n
|
||||
- ./wfc/modules/job/conf/application.yml:/opt/wfc/conf/application.yml
|
||||
depends_on:
|
||||
wfc-mysql:
|
||||
condition: service_healthy
|
||||
wfc-auth:
|
||||
condition: service_healthy
|
||||
wfc-gateway:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
- NACOS_PROFILE_NAME=${NACOS_PROFILE_NAME}
|
||||
- NACOS_NAME_SPACE=${NACOS_NAME_SPACE}
|
||||
- NACOS_SERVER_NAME=${NACOS_SERVER_NAME}
|
||||
- NACOS_SERVER_IP=${NACOS_SERVER_IP}
|
||||
- NACOS_SERVER_PORT=${NACOS_SERVER_PORT}
|
||||
- WFC_JOB_PORT=${WFC_JOB_PORT}
|
||||
- SPRING_CONFIG_ADDITIONAL_LOCATION=optional:classpath:/,optional:file:/opt/wfc/conf/
|
||||
- TZ=${TZ}
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "curl -f http://localhost:${WFC_JOB_PORT}/actuator/health || exit 1"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 6
|
||||
restart: ${RESTART_OPTION}
|
||||
|
||||
wfc-modules-payment:
|
||||
image: wfc-java:jre8
|
||||
container_name: wfc-modules-payment
|
||||
ports:
|
||||
- "${WFC_PAYMENT_PORT}:${WFC_PAYMENT_PORT}"
|
||||
networks:
|
||||
- wfc-be-network
|
||||
volumes:
|
||||
- ./wfc/modules/payment/jar/wfc-modules-payment.jar:/opt/wfc/app.jar
|
||||
- ./wfc/modules/payment/logs/:/opt/wfc/logs/
|
||||
- ./conf/application-common.yml:/opt/wfc/conf/application-common.yml
|
||||
- ./conf/i18n/:/opt/wfc/conf/i18n
|
||||
- ./wfc/modules/payment/conf/application.yml:/opt/wfc/conf/application.yml
|
||||
depends_on:
|
||||
wfc-redis:
|
||||
condition: service_healthy
|
||||
wfc-mysql:
|
||||
condition: service_healthy
|
||||
wfc-auth:
|
||||
condition: service_healthy
|
||||
wfc-gateway:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
- NACOS_PROFILE_NAME=${NACOS_PROFILE_NAME}
|
||||
- NACOS_NAME_SPACE=${NACOS_NAME_SPACE}
|
||||
- NACOS_SERVER_NAME=${NACOS_SERVER_NAME}
|
||||
- NACOS_SERVER_IP=${NACOS_SERVER_IP}
|
||||
- NACOS_SERVER_PORT=${NACOS_SERVER_PORT}
|
||||
- WFC_PAYMENT_PORT=${WFC_PAYMENT_PORT}
|
||||
- SPRING_CONFIG_ADDITIONAL_LOCATION=optional:classpath:/,optional:file:/opt/wfc/conf/
|
||||
- TZ=${TZ}
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "curl -f http://localhost:${WFC_PAYMENT_PORT}/actuator/health || exit 1"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 6
|
||||
restart: ${RESTART_OPTION}
|
||||
|
||||
wfc-nginx:
|
||||
image: nginx:1.27.4
|
||||
container_name: wfc-nginx
|
||||
build:
|
||||
context: ./nginx
|
||||
ports:
|
||||
- "${WFC_SERVER_PORT}:${WFC_SERVER_PORT}"
|
||||
- "${WFC_SERVER_HTTPS_PORT}:${WFC_SERVER_HTTPS_PORT}"
|
||||
networks:
|
||||
- wfc-fe-network
|
||||
- wfc-be-network
|
||||
volumes:
|
||||
- ./wfc/modules/file/upload:/opt/wfc/file/upload
|
||||
- ./nginx/html/dist:/opt/wfc/portal
|
||||
- ./nginx/ssl:/opt/wfc/ssl
|
||||
- ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf
|
||||
- ./nginx/logs:/var/log/nginx
|
||||
- ./nginx/conf.d:/etc/nginx/conf.d
|
||||
depends_on:
|
||||
wfc-modules-system:
|
||||
condition: service_healthy
|
||||
wfc-modules-user:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
- GATEWAY_SERVER_IP=${GATEWAY_SERVER_IP}
|
||||
- GATEWAY_SERVER_PORT=${GATEWAY_SERVER_PORT}
|
||||
- WFC_SERVER_IP=${WFC_SERVER_IP}
|
||||
- WFC_SERVER_PORT=${WFC_SERVER_PORT}
|
||||
- TZ=${TZ}
|
||||
healthcheck:
|
||||
test:
|
||||
- "CMD-SHELL"
|
||||
- >
|
||||
curl -f http://localhost:${WFC_SERVER_PORT}/sys &&
|
||||
curl -f http://localhost:${WFC_SERVER_PORT}/u ||
|
||||
exit 1
|
||||
interval: 30s
|
||||
timeout: 5s
|
||||
retries: 6
|
||||
restart: ${RESTART_OPTION}
|
||||
|
||||
networks:
|
||||
wfc-fe-network:
|
||||
name: wfc-fe-network
|
||||
driver: bridge
|
||||
wfc-be-network:
|
||||
name: wfc-be-network
|
||||
driver: bridge
|
||||
ipam:
|
||||
driver: default
|
||||
@@ -1,71 +0,0 @@
|
||||
spring:
|
||||
autoconfigure:
|
||||
exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
|
||||
mvc:
|
||||
pathmatch:
|
||||
matching-strategy: ant_path_matcher
|
||||
# i18n resource file path
|
||||
messages:
|
||||
# i18n resource file path
|
||||
basename: file:/opt/wfc/conf/i18n/messages,i18n/messages
|
||||
# Enable remote debugging
|
||||
devtools:
|
||||
remote:
|
||||
secret: 123456
|
||||
|
||||
# feign config
|
||||
feign:
|
||||
sentinel:
|
||||
enabled: true
|
||||
okhttp:
|
||||
enabled: false
|
||||
httpclient:
|
||||
enabled: true
|
||||
disable-ssl-validation: true
|
||||
client:
|
||||
config:
|
||||
default:
|
||||
connectTimeout: 60000
|
||||
readTimeout: 60000
|
||||
compression:
|
||||
request:
|
||||
enabled: true
|
||||
min-request-size: 8192
|
||||
response:
|
||||
enabled: true
|
||||
|
||||
# eureka config
|
||||
management:
|
||||
endpoints:
|
||||
web:
|
||||
exposure:
|
||||
include: '*'
|
||||
|
||||
mail:
|
||||
enabled: true
|
||||
host: mail.agrandtech.com
|
||||
port: 25
|
||||
# Enable authentication
|
||||
auth: true
|
||||
# Sender, follows RFC-822 standard
|
||||
from: smtpext <smtpex@agrandtech.com>
|
||||
# User name
|
||||
user: smtpext
|
||||
# Password
|
||||
pass: Smtp123@agt
|
||||
# Use TLS security connection
|
||||
starttlsEnable: false
|
||||
# Use SSL security connection
|
||||
sslEnable: false
|
||||
# Timeout value for sending mail, in milliseconds
|
||||
timeout: 0
|
||||
# Connection timeout value, in milliseconds
|
||||
connectionTimeout: 0
|
||||
|
||||
# Omada config
|
||||
omada:
|
||||
# web url or host exp: 'https://192.168.2.249:8043'
|
||||
omada-url: 'https://aps1-omada-northbound.tplinkcloud.com'
|
||||
omadac-id: 'c4decbf73f80094019d664506ec9b4d4'
|
||||
client-id: '6110a77822234243a033e652d1e8a3ae'
|
||||
client-secret: '651957da95f14f45b719876bb68bd6f5'
|
||||
@@ -1,72 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Verification Code</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
line-height: 1.6;
|
||||
color: #333333;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.container {
|
||||
max-width: 600px;
|
||||
margin: 0 auto;
|
||||
padding: 20px;
|
||||
}
|
||||
.header {
|
||||
text-align: center;
|
||||
padding: 20px 0;
|
||||
}
|
||||
.code-box {
|
||||
background-color: #f8f8f8;
|
||||
padding: 20px;
|
||||
text-align: center;
|
||||
margin: 20px 0;
|
||||
border-radius: 5px;
|
||||
}
|
||||
.verification-code {
|
||||
font-size: 32px;
|
||||
font-weight: bold;
|
||||
letter-spacing: 5px;
|
||||
color: #2b2b2b;
|
||||
}
|
||||
.footer {
|
||||
font-size: 12px;
|
||||
color: #666666;
|
||||
text-align: center;
|
||||
margin-top: 30px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="header">
|
||||
<h2>WANFI Verification Code</h2>
|
||||
</div>
|
||||
|
||||
<p>Dear User,</p>
|
||||
|
||||
<p>Thank you for using our service. Your verification code is:</p>
|
||||
|
||||
<div class="code-box">
|
||||
<div class="verification-code"> <span th:text="${verificationCode}"></span> </div>
|
||||
</div>
|
||||
|
||||
<p>This code will expire in <span th:text="${expirationTime}">10</span> minutes. Please do not share this code with anyone.</p>
|
||||
|
||||
<p>If you didn't request this code, please ignore this email.</p>
|
||||
|
||||
<p>Best regards,<br>
|
||||
Your Company Name</p>
|
||||
|
||||
<div class="footer">
|
||||
<p>This is an automated message, please do not reply to this email.</p>
|
||||
<p>© 2024 Your Company Name. All rights reserved.</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,72 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Verification Code</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
line-height: 1.6;
|
||||
color: #333333;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.container {
|
||||
max-width: 600px;
|
||||
margin: 0 auto;
|
||||
padding: 20px;
|
||||
}
|
||||
.header {
|
||||
text-align: center;
|
||||
padding: 20px 0;
|
||||
}
|
||||
.code-box {
|
||||
background-color: #f8f8f8;
|
||||
padding: 20px;
|
||||
text-align: center;
|
||||
margin: 20px 0;
|
||||
border-radius: 5px;
|
||||
}
|
||||
.verification-code {
|
||||
font-size: 32px;
|
||||
font-weight: bold;
|
||||
letter-spacing: 5px;
|
||||
color: #2b2b2b;
|
||||
}
|
||||
.footer {
|
||||
font-size: 12px;
|
||||
color: #666666;
|
||||
text-align: center;
|
||||
margin-top: 30px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="header">
|
||||
<h2>Verification Code</h2>
|
||||
</div>
|
||||
|
||||
<p>Dear User,</p>
|
||||
|
||||
<p>Thank you for using our service. Your verification code is:</p>
|
||||
|
||||
<div class="code-box">
|
||||
<div class="verification-code"> <span th:text="${verificationCode}"></span> </div>
|
||||
</div>
|
||||
|
||||
<p>This code will expire in <span th:text="${expirationTime}">10</span> minutes. Please do not share this code with anyone.</p>
|
||||
|
||||
<p>If you didn't request this code, please ignore this email.</p>
|
||||
|
||||
<p>Best regards,<br>
|
||||
Your Company Name</p>
|
||||
|
||||
<div class="footer">
|
||||
<p>This is an automated message, please do not reply to this email.</p>
|
||||
<p>© 2024 Your Company Name. All rights reserved.</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,70 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Verification Code</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
line-height: 1.6;
|
||||
color: #333333;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.container {
|
||||
max-width: 600px;
|
||||
margin: 0 auto;
|
||||
padding: 20px;
|
||||
}
|
||||
.header {
|
||||
text-align: center;
|
||||
padding: 20px 0;
|
||||
}
|
||||
.code-box {
|
||||
background-color: #f8f8f8;
|
||||
padding: 20px;
|
||||
text-align: center;
|
||||
margin: 20px 0;
|
||||
border-radius: 5px;
|
||||
}
|
||||
.verification-code {
|
||||
font-size: 32px;
|
||||
font-weight: bold;
|
||||
letter-spacing: 5px;
|
||||
color: #2b2b2b;
|
||||
}
|
||||
.footer {
|
||||
font-size: 12px;
|
||||
color: #666666;
|
||||
text-align: center;
|
||||
margin-top: 30px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="header">
|
||||
<h2>Balance Reminder</h2>
|
||||
</div>
|
||||
|
||||
<p>Dear User,</p>
|
||||
|
||||
<p>Thank you for using our service. We want to inform you that from now on, your balance is less than <span th:text="${currencySymbol}">$</span><span th:text="${threshold}">10</span>.</p>
|
||||
|
||||
<div class="code-box">
|
||||
<div> <strong>Balance:</strong> <span th:text="${currencySymbol}">$</span><span th:text="${balance}">100</span></div>
|
||||
</div>
|
||||
|
||||
<p>To avoid service interruption, please recharge in time.</p>
|
||||
|
||||
<p>Best regards,<br>
|
||||
Your Company Name</p>
|
||||
|
||||
<div class="footer">
|
||||
<p>This is an automated message, please do not reply to this email</p>
|
||||
<p>© 2024 Your Company Name. All rights reserved.</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,296 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Invoice: Wanfi Technology - INV-2025-05-001</title>
|
||||
<style>
|
||||
/* 整体样式 */
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
font-family: 'Helvetica Neue', Arial, sans-serif;
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 15px;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
.container {
|
||||
max-width: 800px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.invoice-container {
|
||||
background: white;
|
||||
border: 1px solid #e0e0e0;
|
||||
border-radius: 8px;
|
||||
padding: 40px;
|
||||
box-shadow: 0 5px 15px rgba(0,0,0,0.05);
|
||||
}
|
||||
|
||||
/* 头部样式 */
|
||||
.header {
|
||||
display: flex;
|
||||
margin-bottom: 15px;
|
||||
padding-bottom: 10px;
|
||||
border-bottom: 1px solid #e9ecef;
|
||||
}
|
||||
|
||||
.company-info {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.company-logo {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.company-logo img {
|
||||
max-width: 150px;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 25px;
|
||||
color: #2c3e50;
|
||||
margin-bottom: 5px;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 1px;
|
||||
}
|
||||
|
||||
/* 发票信息 */
|
||||
.invoice-info {
|
||||
display: flex;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.bill-to {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.invoice-details {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.invoice-details div {
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.invoice-number {
|
||||
font-size: 20px;
|
||||
font-weight: bold;
|
||||
color: #2c3e50;
|
||||
}
|
||||
|
||||
/* 表格样式 */
|
||||
table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
margin: 10px 0 20px;
|
||||
}
|
||||
|
||||
th {
|
||||
background-color: #f0f7ff;
|
||||
|
||||
text-align: left;
|
||||
padding: 12px 15px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
td {
|
||||
padding: 12px 15px;
|
||||
border-bottom: 1px solid #e9ecef;
|
||||
}
|
||||
|
||||
tr:last-child td {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
/* 服务详情 */
|
||||
.service-details {
|
||||
margin: 10px 0;
|
||||
padding: 5px;
|
||||
background-color: #f8f9fa;
|
||||
border-left: 3px solid #3498db;
|
||||
font-size: 15px;
|
||||
}
|
||||
|
||||
.service-details li {
|
||||
margin-left: 20px;
|
||||
}
|
||||
|
||||
/* 金额部分 */
|
||||
.amount-summary {
|
||||
margin-top: 20px;
|
||||
width: 100%;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.amount-row {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
padding: 8px 0;
|
||||
}
|
||||
|
||||
.amount-label {
|
||||
width: 250px;
|
||||
text-align: right;
|
||||
padding-right: 15px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.amount-value {
|
||||
width: 150px;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.total-due {
|
||||
font-size: 20px;
|
||||
font-weight: bold;
|
||||
border-top: 2px solid #2c3e50;
|
||||
padding-top: 12px;
|
||||
margin-top: 5px;
|
||||
color: #2c3e50;
|
||||
}
|
||||
|
||||
/* 付款信息 */
|
||||
.payment-info {
|
||||
margin-top: 10px;
|
||||
padding: 5px;
|
||||
background-color: #e8f4ff;
|
||||
border-radius: 6px;
|
||||
}
|
||||
|
||||
.payment-info h3 {
|
||||
margin-bottom: 5px;
|
||||
color: #2c3e50;
|
||||
}
|
||||
|
||||
.bank-details {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 15px;
|
||||
}
|
||||
|
||||
.bank-details div {
|
||||
min-width: 200px;
|
||||
}
|
||||
|
||||
/* 页脚 */
|
||||
.thank-you {
|
||||
margin-top: 20px;
|
||||
text-align: center;
|
||||
font-size: 15px;
|
||||
color: #2c3e50;
|
||||
padding-top: 5px;
|
||||
border-top: 1px solid #e9ecef;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/* 分隔线 */
|
||||
hr {
|
||||
border: 0;
|
||||
height: 1px;
|
||||
/* background: linear-gradient(to right, rgba(0,0,0,0), rgba(0,0,0,0.1), rgba(0,0,0,0)); */
|
||||
background: #e9ecef;
|
||||
margin: 15px 0;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="header">
|
||||
<div class="company-info">
|
||||
<h1>INVOICE</h1>
|
||||
<p><strong>From:</strong></p>
|
||||
<p><strong>MacroHub Technology</strong></p>
|
||||
<p>ABN: 12 345 678 900</p>
|
||||
<p>contact@exampel.com</p>
|
||||
<p>+61 400 000 001</p>
|
||||
</div>
|
||||
<div class="company-logo">
|
||||
<img src="https://img.icons8.com/?size=100&id=13047&format=png&color=000000" alt="Wanfi Technology Logo">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="invoice-info">
|
||||
<div class="bill-to">
|
||||
<p><strong>To:</strong></p>
|
||||
<p><span th:text="${username}">Mr. Exampele</span></p>
|
||||
<p><span th:text="${email}">Example@example.com</span></p>
|
||||
</div>
|
||||
<div class="invoice-details">
|
||||
<div><strong>Invoice Number:</strong> <span th:text="${invoiceNumber}">INV-2025-05-001</span></div>
|
||||
<div><strong>Invoice Date:</strong> <span th:text="${#dates.format(new java.util.Date(now), 'yyyy-MM-dd')}">2025-05-28</span></div>
|
||||
<div><strong>Due Date:</strong> <span th:text="${#dates.format(new java.util.Date(now + 7*1000*60*60*24L), 'yyyy-MM-dd')}">2025-06-04</span></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<h2>Description of Services</h2>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Item Name</th>
|
||||
<th>Qty</th>
|
||||
<th>Unit Price (<span th:text="${currency}">AUD</span>)</th>
|
||||
<th>Total (<span th:text="${currency}">AUD</span>)</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><span th:text="${itemName}">Network Traffic Fee</span></td>
|
||||
<td><span th:text="${qty}">1</span></td>
|
||||
<td><span th:text="${unitPrice}">$50</span></td>
|
||||
<td><span th:text="${total}">$50</span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<div class="service-details" th:if="${hasDetails}">
|
||||
<p><strong>Details:</strong></p>
|
||||
<ul>
|
||||
<li>Total data: <strong><span th:text="${traffic}">200GB</span></strong></li>
|
||||
<li>Speed cap: <strong><span th:text="${speedCap}">Upload 30 Mbps / Download 100 Mbps</span></strong></li>
|
||||
<li>Number of devices supported: <strong><span th:text="${clientsNumber}">5</span></strong></li>
|
||||
<li>Billing cycle: <strong><span th:text="${billingCycle}">Monthly</span></strong></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="amount-summary">
|
||||
<div class="amount-row">
|
||||
<div class="amount-label">Subtotal:</div>
|
||||
<div class="amount-value"><span th:text="${total}">$50.00</span></div>
|
||||
</div>
|
||||
<div class="amount-row">
|
||||
<div class="amount-label">GST (0%):</div>
|
||||
<div class="amount-value"><span th:text="${currencySymbol}">$</span>0.00</div>
|
||||
</div>
|
||||
<div class="amount-row total-due">
|
||||
<div class="amount-label">Total Due (<span th:text="${currency}">AUD</span>):</div>
|
||||
<div class="amount-value"><span th:text="${total}">$50.00</span></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- <hr>
|
||||
|
||||
<div class="payment-info">
|
||||
<h3>Payment Details</h3>
|
||||
<div class="bank-details">
|
||||
<div><strong>Bank:</strong> ANZ</div>
|
||||
<div><strong>BSB:</strong> 123-456</div>
|
||||
<div><strong>Account:</strong> 98765432</div>
|
||||
<div><strong>Reference:</strong> INV-2025-05-001</div>
|
||||
</div>
|
||||
</div> -->
|
||||
|
||||
<div class="thank-you">
|
||||
<p>Thank you for your business!</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,72 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Verification Code</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
line-height: 1.6;
|
||||
color: #333333;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.container {
|
||||
max-width: 600px;
|
||||
margin: 0 auto;
|
||||
padding: 20px;
|
||||
}
|
||||
.header {
|
||||
text-align: center;
|
||||
padding: 20px 0;
|
||||
}
|
||||
.code-box {
|
||||
background-color: #f8f8f8;
|
||||
padding: 20px;
|
||||
text-align: center;
|
||||
margin: 20px 0;
|
||||
border-radius: 5px;
|
||||
}
|
||||
.verification-code {
|
||||
font-size: 32px;
|
||||
font-weight: bold;
|
||||
letter-spacing: 5px;
|
||||
color: #2b2b2b;
|
||||
}
|
||||
.footer {
|
||||
font-size: 12px;
|
||||
color: #666666;
|
||||
text-align: center;
|
||||
margin-top: 30px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="header">
|
||||
<h2>Verification Code</h2>
|
||||
</div>
|
||||
|
||||
<p>Dear User,</p>
|
||||
|
||||
<p>Thank you for using our service. Your verification code is:</p>
|
||||
|
||||
<div class="code-box">
|
||||
<div class="verification-code"> <span th:text="${verificationCode}"></span> </div>
|
||||
</div>
|
||||
|
||||
<p>This code will expire in <span th:text="${expirationTime}">10</span> minutes. Please do not share this code with anyone.</p>
|
||||
|
||||
<p>If you didn't request this code, please ignore this email.</p>
|
||||
|
||||
<p>Best regards,<br>
|
||||
Your Company Name</p>
|
||||
|
||||
<div class="footer">
|
||||
<p>This is an automated message, please do not reply to this email.</p>
|
||||
<p>© 2024 Your Company Name. All rights reserved.</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,71 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Verification Code</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
line-height: 1.6;
|
||||
color: #333333;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.container {
|
||||
max-width: 600px;
|
||||
margin: 0 auto;
|
||||
padding: 20px;
|
||||
}
|
||||
.header {
|
||||
text-align: center;
|
||||
padding: 20px 0;
|
||||
}
|
||||
.code-box {
|
||||
background-color: #f8f8f8;
|
||||
padding: 20px;
|
||||
text-align: center;
|
||||
margin: 20px 0;
|
||||
border-radius: 5px;
|
||||
}
|
||||
.verification-code {
|
||||
font-size: 32px;
|
||||
font-weight: bold;
|
||||
letter-spacing: 5px;
|
||||
color: #2b2b2b;
|
||||
}
|
||||
.footer {
|
||||
font-size: 12px;
|
||||
color: #666666;
|
||||
text-align: center;
|
||||
margin-top: 30px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="header">
|
||||
<h2>Traffic Reminder</h2>
|
||||
</div>
|
||||
|
||||
<p>Dear User,</p>
|
||||
|
||||
<p>Thank you for using our service. We want to inform you that from now on, your package traffic is less than <span th:text="${threshold}">10</span>%.</p>
|
||||
|
||||
<div class="code-box">
|
||||
<div> <strong>Total Traffic:</strong> <span th:text="${totalTraffic}">10 GB</span></div>
|
||||
<div> <strong>Used Traffic:</strong> <span th:text="${usedTraffic}">1 GB</span></div>
|
||||
</div>
|
||||
|
||||
<p>To avoid service interruption, please purchase the package in time.</p>
|
||||
|
||||
<p>Best regards,<br>
|
||||
Your Company Name</p>
|
||||
|
||||
<div class="footer">
|
||||
<p>This is an automated message, please do not reply to this email</p>
|
||||
<p>© 2024 Your Company Name. All rights reserved.</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,28 +0,0 @@
|
||||
WFC_CONFIG_DATABASE=wfc_config_db
|
||||
WFC_SYSTEM_DATABASE=wfc_system_db
|
||||
WFC_USER_DATABASE=wfc_user_db
|
||||
MYSQL_SERVICE_NAME=wfc-mysql
|
||||
MYSQL_SERVICE_PORT=3306
|
||||
MYSQL_ROOT_PASSWORD=123456
|
||||
MYSQL_SERVICE_USER=root
|
||||
MYSQL_SERVICE_PASSWORD=123456
|
||||
REDIS_PORT=6379
|
||||
NACOS_PROFILE_NAME=prod
|
||||
NACOS_NAME_SPACE=wfc-prod
|
||||
NACOS_SERVER_NAME=wfc-nacos
|
||||
WFC_SERVER_PORT=80
|
||||
WFC_SERVER_HTTPS_PORT=443
|
||||
NACOS_SERVER_PORT=8848
|
||||
GATEWAY_SERVER_PORT=8080
|
||||
AUTH_SERVER_PORT=8081
|
||||
WFC_FILE_PORT=9201
|
||||
WFC_JOB_PORT=9203
|
||||
WFC_PAYMENT_PORT=9204
|
||||
WFC_SYSTEM_PORT=9205
|
||||
WFC_USER_PORT=9206
|
||||
WFC_SERVER_IP=192.168.13.128
|
||||
NACOS_SERVER_IP=${WFC_SERVER_IP}
|
||||
GATEWAY_SERVER_IP=${WFC_SERVER_IP}
|
||||
RESTART_OPTION=unless-stopped
|
||||
TZ=Asia/Shanghai
|
||||
SYSTEM_TITLE=MacroHub
|
||||
@@ -1,5 +0,0 @@
|
||||
NAME="wfc"
|
||||
VERSION="1.0.19-YYYYMMDD"
|
||||
ID="wfc"
|
||||
VERSION_ID="1.0.19"
|
||||
DESCRIPTION="WANFi Control and Billing System"
|
||||
@@ -1,15 +0,0 @@
|
||||
FROM openjdk:8-jre
|
||||
|
||||
# 通过挂载-v 来挂载宿主机的文件到容器中 /opt/wfc/app.jar
|
||||
WORKDIR /opt/wfc
|
||||
|
||||
# 设置环境变量
|
||||
ENV JVM_OPTS="-Xms128m -Xmx512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m"
|
||||
ENV JAVA_OPTS="--spring.config.additional_location=optional:classpath:/,optional:file:/opt/wfc/conf/application.yml"
|
||||
ENV JAR_FILE="app.jar"
|
||||
|
||||
# 使用 sh -c 解析环境变量
|
||||
ENTRYPOINT ["sh", "-c", "java -Dfile.encoding=utf-8 ${JVM_OPTS} -jar ${JAR_FILE} ${JAVA_OPTS}"]
|
||||
|
||||
# docker build -t java:jre8 .
|
||||
# docker run -v /home/manager/probject/wfc/wfc-gateway.jar:/app.jar java:jre8
|
||||
@@ -1,3 +0,0 @@
|
||||
[client]
|
||||
user=root
|
||||
password=123456
|
||||
@@ -1 +0,0 @@
|
||||
存放sql目录下的所有脚本,用于docker自动执行。
|
||||
@@ -1,9 +0,0 @@
|
||||
# 基础镜像
|
||||
FROM mysql:5.7
|
||||
|
||||
# 执行sql脚本
|
||||
# ENV MYSQL_ROOT_PASSWORD=123456
|
||||
# COPY ./db/*.sql /docker-entrypoint-initdb.d/
|
||||
# COPY ./db/initdb.sh /docker-entrypoint-initdb.d/
|
||||
# RUN chmod 755 /docker-entrypoint-initdb.d/initdb.sh
|
||||
# ENTRYPOINT ["bash", "/docker-entrypoint-initdb.d/initdb.sh"]
|
||||
@@ -1,53 +0,0 @@
|
||||
# spring
|
||||
server.servlet.contextPath=${SERVER_SERVLET_CONTEXTPATH:/nacos}
|
||||
server.contextPath=/nacos
|
||||
server.port=${NACOS_SERVER_PORT:8848}
|
||||
server.tomcat.accesslog.max-days=30
|
||||
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}i
|
||||
server.tomcat.accesslog.enabled=${TOMCAT_ACCESSLOG_ENABLED:false}
|
||||
server.error.include-message=ALWAYS
|
||||
# default current work dir
|
||||
server.tomcat.basedir=file:.
|
||||
#*************** Config Module Related Configurations ***************#
|
||||
### Deprecated configuration property, it is recommended to use `spring.sql.init.platform` replaced.
|
||||
#spring.datasource.platform=${SPRING_DATASOURCE_PLATFORM:}
|
||||
spring.sql.init.platform=${SPRING_DATASOURCE_PLATFORM:}
|
||||
nacos.cmdb.dumpTaskInterval=3600
|
||||
nacos.cmdb.eventTaskInterval=10
|
||||
nacos.cmdb.labelTaskInterval=300
|
||||
nacos.cmdb.loadDataAtStart=false
|
||||
db.num=${MYSQL_DATABASE_NUM:1}
|
||||
db.url.0=jdbc:mysql://${MYSQL_SERVICE_HOST}:${MYSQL_SERVICE_PORT:3306}/${MYSQL_SERVICE_DB_NAME}?${MYSQL_SERVICE_DB_PARAM:characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false}
|
||||
db.user.0=${MYSQL_SERVICE_USER}
|
||||
db.password.0=${MYSQL_SERVICE_PASSWORD}
|
||||
## DB connection pool settings
|
||||
db.pool.config.connectionTimeout=${DB_POOL_CONNECTION_TIMEOUT:30000}
|
||||
db.pool.config.validationTimeout=10000
|
||||
db.pool.config.maximumPoolSize=20
|
||||
db.pool.config.minimumIdle=2
|
||||
### The auth system to use, currently only 'nacos' and 'ldap' is supported:
|
||||
nacos.core.auth.system.type=${NACOS_AUTH_SYSTEM_TYPE:nacos}
|
||||
### worked when nacos.core.auth.system.type=nacos
|
||||
### The token expiration in seconds:
|
||||
nacos.core.auth.plugin.nacos.token.expire.seconds=${NACOS_AUTH_TOKEN_EXPIRE_SECONDS:18000}
|
||||
### The default token:
|
||||
nacos.core.auth.plugin.nacos.token.secret.key=${NACOS_AUTH_TOKEN:}
|
||||
### Turn on/off caching of auth information. By turning on this switch, the update of auth information would have a 15 seconds delay.
|
||||
nacos.core.auth.caching.enabled=${NACOS_AUTH_CACHE_ENABLE:false}
|
||||
nacos.core.auth.enable.userAgentAuthWhite=${NACOS_AUTH_USER_AGENT_AUTH_WHITE_ENABLE:false}
|
||||
nacos.core.auth.server.identity.key=${NACOS_AUTH_IDENTITY_KEY:}
|
||||
nacos.core.auth.server.identity.value=${NACOS_AUTH_IDENTITY_VALUE:}
|
||||
## spring security config
|
||||
### turn off security
|
||||
nacos.security.ignore.urls=${NACOS_SECURITY_IGNORE_URLS:/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**}
|
||||
# metrics for elastic search
|
||||
management.metrics.export.elastic.enabled=false
|
||||
management.metrics.export.influx.enabled=false
|
||||
nacos.naming.distro.taskDispatchThreadCount=10
|
||||
nacos.naming.distro.taskDispatchPeriod=200
|
||||
nacos.naming.distro.batchSyncKeyCount=1000
|
||||
nacos.naming.distro.initDataRatio=0.9
|
||||
nacos.naming.distro.syncRetryDelay=5000
|
||||
nacos.naming.data.warmup=true
|
||||
nacos.console.ui.enabled=true
|
||||
nacos.core.param.check.enabled=true
|
||||
@@ -1,66 +0,0 @@
|
||||
spring:
|
||||
datasource:
|
||||
platform: mysql
|
||||
|
||||
db:
|
||||
num: 1
|
||||
url:
|
||||
0: jdbc:mysql://wfc-mysql:3306/wfc_config_db?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
|
||||
user: root
|
||||
password: 123456
|
||||
|
||||
nacos:
|
||||
naming:
|
||||
empty-service:
|
||||
auto-clean: true
|
||||
clean:
|
||||
initial-delay-ms: 50000
|
||||
period-time-ms: 30000
|
||||
# server:
|
||||
# ip: ${NACOS_SERVER_IP}
|
||||
# port: ${NACOS_SERVER_PORT}
|
||||
security:
|
||||
ignore:
|
||||
urls: /,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-ui/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**
|
||||
core:
|
||||
auth:
|
||||
system:
|
||||
type: nacos
|
||||
enabled: false
|
||||
default:
|
||||
token:
|
||||
expire:
|
||||
seconds: 18000
|
||||
secret:
|
||||
key: SecretKey012345678901234567890123456789012345678901234567890123456789
|
||||
caching:
|
||||
enabled: true
|
||||
enable:
|
||||
userAgentAuthWhite: false
|
||||
server:
|
||||
identity:
|
||||
key: serverIdentity
|
||||
value: security
|
||||
istio:
|
||||
mcp:
|
||||
server:
|
||||
enabled: false
|
||||
|
||||
management:
|
||||
endpoints:
|
||||
web:
|
||||
exposure:
|
||||
include: "*"
|
||||
metrics:
|
||||
export:
|
||||
elastic:
|
||||
enabled: false
|
||||
influx:
|
||||
enabled: false
|
||||
|
||||
server:
|
||||
tomcat:
|
||||
accesslog:
|
||||
enabled: true
|
||||
pattern: '%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}i'
|
||||
basedir: /home/wfc/nacos/tomcat/logs
|
||||
@@ -1,6 +0,0 @@
|
||||
# 基础镜像
|
||||
FROM nacos/nacos-server:v2.5.0
|
||||
|
||||
# 复制conf文件到路径
|
||||
# COPY ./conf/application.properties /home/nacos/conf/application.properties
|
||||
# COPY ./conf/application.yml /home/nacos/conf/application.yml
|
||||
@@ -1,98 +0,0 @@
|
||||
worker_processes 1;
|
||||
|
||||
events {
|
||||
worker_connections 1024;
|
||||
}
|
||||
|
||||
http {
|
||||
include mime.types;
|
||||
default_type application/octet-stream;
|
||||
|
||||
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
|
||||
'$status $body_bytes_sent "$http_referer" '
|
||||
'"$http_user_agent" "$http_x_forwarded_for"';
|
||||
|
||||
access_log /var/log/nginx/access.log main;
|
||||
|
||||
sendfile on;
|
||||
keepalive_timeout 65;
|
||||
client_max_body_size 5m;
|
||||
|
||||
# server {
|
||||
# listen 80;
|
||||
# server_name localhost;
|
||||
# return 301 https://$host$request_uri; # 将HTTP请求重定向到HTTPS
|
||||
# }
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
server_name localhost;
|
||||
# ssl_certificate /opt/wfc/ssl/server.crt;
|
||||
# ssl_certificate_key /opt/wfc/ssl/server.key;
|
||||
# ssl_session_cache shared:SSL:10m;
|
||||
# ssl_session_timeout 120m;
|
||||
# ssl_prefer_server_ciphers on;
|
||||
# ssl_session_tickets off;
|
||||
# ssl_stapling_verify on;
|
||||
|
||||
location /kyc {
|
||||
alias /opt/wfc/file/upload;
|
||||
|
||||
autoindex on;
|
||||
autoindex_exact_size off;
|
||||
autoindex_localtime on;
|
||||
}
|
||||
|
||||
location /sys {
|
||||
root /opt/wfc/portal;
|
||||
try_files $uri $uri/ /index.html;
|
||||
index index.html index.htm;
|
||||
}
|
||||
|
||||
location /sys-api/{
|
||||
proxy_set_header Host $http_host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header REMOTE-HOST $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_pass http://192.168.13.128:8080/;
|
||||
}
|
||||
|
||||
location /u {
|
||||
root /opt/wfc/portal;
|
||||
try_files $uri $uri/ /index.html;
|
||||
index index.html index.htm;
|
||||
}
|
||||
|
||||
location /u-api/{
|
||||
proxy_set_header Host $http_host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header REMOTE-HOST $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_pass http://192.168.13.128:8080/;
|
||||
}
|
||||
|
||||
location /file {
|
||||
proxy_pass http://192.168.13.128:9201/;
|
||||
proxy_cache_bypass $http_upgrade;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header Connection "upgrade";
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_set_header X-Forwarded-Host $host;
|
||||
proxy_set_header X-Forwarded-Port $server_port;
|
||||
proxy_set_header Content-Type $content_type;
|
||||
proxy_set_header Content-Length $http_content_length;
|
||||
}
|
||||
|
||||
# Avoid actuator access
|
||||
if ($request_uri ~ "/actuator") {
|
||||
return 403;
|
||||
}
|
||||
|
||||
error_page 500 502 503 504 /50x.html;
|
||||
location = /50x.html {
|
||||
root html;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
# 基础镜像
|
||||
FROM nginx:1.27.4
|
||||
|
||||
# 工作目录
|
||||
WORKDIR /opt/wfc/portal
|
||||
# 复制conf文件到路径
|
||||
COPY ./conf/nginx.conf /etc/nginx/nginx.conf
|
||||
# 复制html文件到路径
|
||||
COPY ./html /opt/wfc/portal
|
||||
@@ -1,3 +0,0 @@
|
||||
1. 目录./sys存放客户平台(sys portal)前端文件
|
||||
2. 目录./u存放用户平台(user portal)前端文件
|
||||
用于nginx自动执行
|
||||
@@ -1,33 +0,0 @@
|
||||
|
||||
# 定义输入用户信息选项的"特征名称"字段名,该扩展字段定义了多项用户信息。
|
||||
distinguished_name = req_distinguished_name
|
||||
|
||||
# 生成自签名证书时要使用的证书扩展项字段名,该扩展字段定义了要加入到证书中的一系列扩展项。
|
||||
x509_extensions = v3_req
|
||||
|
||||
# 如果设为no,那么 req 指令将直接从配置文件中读取证书字段的信息,而不提示用户输入。
|
||||
prompt = no
|
||||
|
||||
[req_distinguished_name]
|
||||
#国家代码,一般都是CN(大写)
|
||||
C = CN
|
||||
#省份
|
||||
ST = gd
|
||||
#城市
|
||||
L = gz
|
||||
#企业/单位名称
|
||||
O = wanfi
|
||||
#企业部门
|
||||
OU = wanfi
|
||||
#证书的主域名
|
||||
CN = localhost
|
||||
|
||||
##### 要加入到证书请求中的一系列扩展项 #####
|
||||
[v3_req]
|
||||
keyUsage = critical, digitalSignature, keyAgreement
|
||||
extendedKeyUsage = serverAuth
|
||||
subjectAltName = @alt_names
|
||||
|
||||
[ alt_names ]
|
||||
IP.1 = 192.168.11.111
|
||||
# IP.2 = 192.168.11.222
|
||||
@@ -1,3 +0,0 @@
|
||||
# requirepass 123456
|
||||
dbfilename dump.rdb
|
||||
dir /opt/wfc/redis/data
|
||||
@@ -1,11 +0,0 @@
|
||||
# 基础镜像
|
||||
FROM redis:7.4.2
|
||||
|
||||
# 挂载目录
|
||||
VOLUME /opt/wfc/redis
|
||||
# 创建目录
|
||||
RUN mkdir -p /opt/wfc/redis
|
||||
# 指定路径
|
||||
WORKDIR /opt/wfc/redis
|
||||
# 复制conf文件到路径
|
||||
COPY ./conf/redis.conf /opt/wfc/redis/redis.conf
|
||||
@@ -1,7 +0,0 @@
|
||||
spring:
|
||||
redis:
|
||||
host: wfc-redis
|
||||
port: 6379
|
||||
password:
|
||||
config:
|
||||
import: optional:file:/opt/wfc/conf/application-common.yml
|
||||
@@ -1,15 +0,0 @@
|
||||
# 基础镜像
|
||||
FROM openjdk:8-jre
|
||||
# author
|
||||
LABEL org.wfc.image.authors="wfc@wfc.org"
|
||||
|
||||
# 挂载目录
|
||||
VOLUME /opt/wfc
|
||||
# 创建目录
|
||||
RUN mkdir -p /opt/wfc
|
||||
# 指定路径
|
||||
WORKDIR /opt/wfc
|
||||
# 复制jar文件到路径
|
||||
COPY ./jar/wfc-auth.jar /opt/wfc/wfc-auth.jar
|
||||
# 启动认证服务
|
||||
ENTRYPOINT ["java","-jar","wfc-auth.jar"]
|
||||
@@ -1 +0,0 @@
|
||||
存放认证中心打包好的jar文件,用于docker启动应用。
|
||||
@@ -1,87 +0,0 @@
|
||||
spring:
|
||||
redis:
|
||||
host: wfc-redis
|
||||
port: 6379
|
||||
password:
|
||||
cloud:
|
||||
gateway:
|
||||
discovery:
|
||||
locator:
|
||||
lowerCaseServiceId: true
|
||||
enabled: true
|
||||
routes:
|
||||
# 认证中心
|
||||
- id: wfc-auth
|
||||
uri: lb://wfc-auth
|
||||
predicates:
|
||||
- Path=/auth/**
|
||||
filters:
|
||||
# 验证码处理
|
||||
- CacheRequestFilter
|
||||
- ValidateCodeFilter
|
||||
- StripPrefix=1
|
||||
# 代码生成
|
||||
- id: wfc-gen
|
||||
uri: lb://wfc-gen
|
||||
predicates:
|
||||
- Path=/code/**
|
||||
filters:
|
||||
- StripPrefix=1
|
||||
# 定时任务
|
||||
- id: wfc-job
|
||||
uri: lb://wfc-job
|
||||
predicates:
|
||||
- Path=/schedule/**
|
||||
filters:
|
||||
- StripPrefix=1
|
||||
# 系统模块
|
||||
- id: wfc-system
|
||||
uri: lb://wfc-system
|
||||
predicates:
|
||||
- Path=/system/**
|
||||
filters:
|
||||
- StripPrefix=1
|
||||
# 用户模块
|
||||
- id: wfc-user
|
||||
uri: lb://wfc-user
|
||||
predicates:
|
||||
- Path=/u/**
|
||||
filters:
|
||||
- StripPrefix=1
|
||||
# 文件服务
|
||||
- id: wfc-file
|
||||
uri: lb://wfc-file
|
||||
predicates:
|
||||
- Path=/file/**
|
||||
filters:
|
||||
- StripPrefix=1
|
||||
# payment
|
||||
- id: wfc-payment
|
||||
uri: lb://wfc-payment
|
||||
predicates:
|
||||
- Path=/payment/**
|
||||
filters:
|
||||
- StripPrefix=1
|
||||
config:
|
||||
import: optional:file:/opt/wfc/conf/application-common.yml
|
||||
|
||||
# 安全配置
|
||||
security:
|
||||
# 验证码
|
||||
captcha:
|
||||
enabled: true
|
||||
type: math
|
||||
# 防止XSS攻击
|
||||
xss:
|
||||
enabled: true
|
||||
excludeUrls:
|
||||
- /system/notice
|
||||
# 不校验白名单
|
||||
ignore:
|
||||
whites:
|
||||
- /auth/logout
|
||||
- /auth/login
|
||||
- /auth/register
|
||||
- /auth/checkRepeat
|
||||
- /*/v2/api-docs
|
||||
- /csrf
|
||||
@@ -1,42 +0,0 @@
|
||||
# 使用Ubuntu 22.04 LTS作为基础镜像
|
||||
FROM ubuntu:22.04
|
||||
|
||||
# 设置时区(可选)
|
||||
ENV TZ=Asia/Shanghai
|
||||
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
|
||||
|
||||
# 编码格式
|
||||
ENV LANG en_US.UTF-8
|
||||
ENV LANGUAGE en_US:en
|
||||
ENV LC_ALL en_US.UTF-8
|
||||
|
||||
# 设置华为云源
|
||||
RUN sed -i 's/http:\/\/archive.ubuntu.com\/ubuntu\//http:\/\/repo.huaweicloud.com\/ubuntu\//g' /etc/apt/sources.list && \
|
||||
sed -i 's#http://security.ubuntu.com/ubuntu#http://repo.huaweicloud.com/ubuntu#' /etc/apt/sources.list
|
||||
|
||||
# 安装OpenJDK 8
|
||||
RUN apt-get update && \
|
||||
apt-get install -y openjdk-8-jre && \
|
||||
apt-get install -y locales && \
|
||||
apt-get install -y curl && \
|
||||
locale-gen en_US.UTF-8 && \
|
||||
update-locale LANG=en_US.UTF-8 && \
|
||||
apt-get clean;
|
||||
|
||||
# 设置JAVA_HOME环境变量
|
||||
ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64
|
||||
ENV PATH $JAVA_HOME/bin:$PATH
|
||||
|
||||
# author
|
||||
LABEL org.wfc.image.authors="wfc@wfc.org"
|
||||
|
||||
# 挂载目录
|
||||
VOLUME /opt/wfc
|
||||
# 创建目录
|
||||
RUN mkdir -p /opt/wfc
|
||||
# 指定路径
|
||||
WORKDIR /opt/wfc
|
||||
# 复制jar文件到路径
|
||||
COPY ./jar/wfc-gateway.jar /opt/wfc/wfc-gateway.jar
|
||||
# 启动网关服务
|
||||
ENTRYPOINT ["java","-jar","wfc-gateway.jar"]
|
||||
@@ -1 +0,0 @@
|
||||
存放网关模块打包好的jar文件,用于docker启动应用。
|
||||
@@ -1,25 +0,0 @@
|
||||
# spring配置
|
||||
spring:
|
||||
config:
|
||||
import: optional:file:/opt/wfc/conf/application-common.yml
|
||||
|
||||
# 本地文件上传
|
||||
file:
|
||||
domain: wfc-file:9201
|
||||
path: /opt/wfc/upload
|
||||
prefix: /kyc
|
||||
gateway: http://192.168.2.116:8080
|
||||
|
||||
# FastDFS配置
|
||||
fdfs:
|
||||
domain: http://wfc-file
|
||||
soTimeout: 3000
|
||||
connectTimeout: 2000
|
||||
trackerList: wfc-file:22122
|
||||
|
||||
# Minio配置
|
||||
minio:
|
||||
url: http://wfc-file:9000
|
||||
accessKey: minioadmin
|
||||
secretKey: minioadmin
|
||||
bucketName: test
|
||||
@@ -1,15 +0,0 @@
|
||||
# 基础镜像
|
||||
FROM openjdk:8-jre
|
||||
# author
|
||||
LABEL org.wfc.image.authors="wfc@wfc.org"
|
||||
|
||||
# 挂载目录
|
||||
VOLUME /opt/wfc
|
||||
# 创建目录
|
||||
RUN mkdir -p /opt/wfc
|
||||
# 指定路径
|
||||
WORKDIR /opt/wfc
|
||||
# 复制jar文件到路径
|
||||
COPY ./jar/wfc-modules-file.jar /opt/wfc/wfc-modules-file.jar
|
||||
# 启动文件服务
|
||||
ENTRYPOINT ["java","-jar","wfc-modules-file.jar"]
|
||||
@@ -1 +0,0 @@
|
||||
存放文件服务打包好的jar文件,用于docker启动应用。
|
||||
@@ -1,37 +0,0 @@
|
||||
# spring配置
|
||||
spring:
|
||||
redis:
|
||||
host: wfc-redis
|
||||
port: 6379
|
||||
password:
|
||||
datasource:
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
url: jdbc:mysql://wfc-mysql:3306/wfc_system_db?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
|
||||
username: root
|
||||
password: 123456
|
||||
config:
|
||||
import: optional:file:/opt/wfc/conf/application-common.yml
|
||||
|
||||
# mybatis配置
|
||||
mybatis:
|
||||
# 搜索指定包别名
|
||||
typeAliasesPackage: org.wfc.gen.domain
|
||||
# 配置mapper的扫描,找到所有的mapper.xml映射文件
|
||||
mapperLocations: classpath:mapper/**/*.xml
|
||||
|
||||
# swagger配置
|
||||
swagger:
|
||||
title: 代码生成接口文档
|
||||
license: Powered By wfc
|
||||
licenseUrl: https://wfc.vip
|
||||
|
||||
# 代码生成
|
||||
gen:
|
||||
# 作者
|
||||
author: wfc
|
||||
# 默认生成包路径 system 需改成自己的模块名称 如 system monitor tool
|
||||
packageName: org.wfc.system
|
||||
# 自动去除表前缀,默认是false
|
||||
autoRemovePre: false
|
||||
# 表前缀(生成类名不会包含表前缀,多个用逗号分隔)
|
||||
tablePrefix: sys_
|
||||
@@ -1,15 +0,0 @@
|
||||
# 基础镜像
|
||||
FROM openjdk:8-jre
|
||||
# author
|
||||
LABEL org.wfc.image.authors="wfc@wfc.org"
|
||||
|
||||
# 挂载目录
|
||||
VOLUME /opt/wfc
|
||||
# 创建目录
|
||||
RUN mkdir -p /opt/wfc
|
||||
# 指定路径
|
||||
WORKDIR /opt/wfc
|
||||
# 复制jar文件到路径
|
||||
COPY ./jar/wfc-modules-gen.jar /opt/wfc/wfc-modules-gen.jar
|
||||
# 启动代码生成服务
|
||||
ENTRYPOINT ["java","-jar","wfc-modules-gen.jar"]
|
||||
@@ -1 +0,0 @@
|
||||
存放代码生成打包好的jar文件,用于docker启动应用。
|
||||
@@ -1,26 +0,0 @@
|
||||
# spring配置
|
||||
spring:
|
||||
redis:
|
||||
host: wfc-redis
|
||||
port: 6379
|
||||
password:
|
||||
datasource:
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
url: jdbc:mysql://wfc-mysql:3306/wfc_system_db?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
|
||||
username: root
|
||||
password: 123456
|
||||
config:
|
||||
import: optional:file:/opt/wfc/conf/application-common.yml
|
||||
|
||||
# mybatis配置
|
||||
mybatis:
|
||||
# 搜索指定包别名
|
||||
typeAliasesPackage: org.wfc.job.domain
|
||||
# 配置mapper的扫描,找到所有的mapper.xml映射文件
|
||||
mapperLocations: classpath:mapper/**/*.xml
|
||||
|
||||
# swagger配置
|
||||
swagger:
|
||||
title: 定时任务接口文档
|
||||
license: Powered By wfc
|
||||
licenseUrl: https://wfc.vip
|
||||
@@ -1,15 +0,0 @@
|
||||
# 基础镜像
|
||||
FROM openjdk:8-jre
|
||||
# author
|
||||
LABEL org.wfc.image.authors="wfc@wfc.org"
|
||||
|
||||
# 挂载目录
|
||||
VOLUME /opt/wfc
|
||||
# 创建目录
|
||||
RUN mkdir -p /opt/wfc
|
||||
# 指定路径
|
||||
WORKDIR /opt/wfc
|
||||
# 复制jar文件到路径
|
||||
COPY ./jar/wfc-modules-job.jar /opt/wfc/wfc-modules-job.jar
|
||||
# 启动定时任务服务
|
||||
ENTRYPOINT ["java","-jar","wfc-modules-job.jar"]
|
||||
@@ -1 +0,0 @@
|
||||
存放定时任务打包好的jar文件,用于docker启动应用。
|
||||
@@ -1 +0,0 @@
|
||||
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt/+bR1+YqImwll81GFVSIHdMHsYqOQm0SEzUNrGjzm9e44qHtEOULv8Y3HYxLvCUNez0M4wx3Ih1fBP33CdaoFo2HKby6baf40Sewu+ZHJI+2d5mmo4M8MY5NspZoYE5HeciYl/u8sDV/+PA/wcfdOk11JRFDCDfgDtfTGc33OTcAy+QwALFDiFWxj/zkwCSH69cj5rPTaBbTmnfy9wW/DhKNsVYtmnNO8slPG37VTxLWIB+jsfrm7WEO+HUbM5OIekKHrqnKqOGHlgPVzuO9SfMurXPqDLH96xfM46OvVvh7H8XwTb1M4XigspuF8kt2yNCh8Hu8hQu7/6ke2oTMQIDAQAB
|
||||
@@ -1 +0,0 @@
|
||||
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC3/5tHX5ioibCWXzUYVVIgd0wexio5CbRITNQ2saPOb17jioe0Q5Qu/xjcdjEu8JQ17PQzjDHciHV8E/fcJ1qgWjYcpvLptp/jRJ7C75kckj7Z3maajgzwxjk2ylmhgTkd5yJiX+7ywNX/48D/Bx906TXUlEUMIN+AO19MZzfc5NwDL5DAAsUOIVbGP/OTAJIfr1yPms9NoFtOad/L3Bb8OEo2xVi2ac07yyU8bftVPEtYgH6Ox+ubtYQ74dRszk4h6Qoeuqcqo4YeWA9XO471J8y6tc+oMsf3rF8zjo69W+HsfxfBNvUzheKCym4XyS3bI0KHwe7yFC7v/qR7ahMxAgMBAAECggEBAJ7cEi3KTJxe3NbHdqj+qTyco10CjNvYFA5EPwjF0H7gSxW7ujSaECuPVeCqLwau8depMKH8zePw8TZiayJp2+YMXSHZxmqgoWTwDv6RLSms3pTuXrncITIUgrtac45samr17wrudviiI2GeOzg05yTiYPab2Q2CqFUnbb0idOnCOEWK37z2ojA9XgNDukoA+1Wpm1HqoTNNRNHZOq8ZfbxyZY3iq4nuoEDQf741kzNe4skmw21N6rC21QJ8nrCfc70C47iz5XW8lfuVNkUeJc+E595HrLBp7he5cEBWKsZ4xi+X0tlyNgg9OlLuP+8twOxl9rwP/0d4pjKnnfEa0a0CgYEA+EM7FqCFhExZHoO6/c9igbtqlIc93UNT5YVrujgmgfq0ACq6X8tWV1j+1WPcYwLqOKlgprNCoW+aT0rUTI3Nq/wFr5AkAdNClje707Ec8n5NTNUSX3i2zpdgTIKFHFEgl13BsKgb5ABosexlXU/gxpJCZctQ33tfYtZfnA5Zr3MCgYEAvbukhHBv1UcSH54UULoY1tNkFKwiiAbJIcSRV+ZLqxW9adREFLxSJOqk90B9t8CXdRVgT+7Oap0GztACQ63psqxbeKeXdHnJNL4CEl4RWcge6isI3V7kU0/yx+/miWhyYGByZ816D/QUdbbF1kU14dD79TVD171uS9IJxKTRgcsCgYAopYlFGR8DHCTzNAoniA7Owsqeas4cLevMhl2u7YaQfWV/KX++M2J9hpqigWkR5OZIRKMIaA0etVEEbnH33rev0uFzbxwWGGqsgY+FB1h/82HglHofm3oCtRIVNMFqc3XsknMl40A9wjth9hxafLuGh2fLltA05tQlMIgS2t6gNQKBgQCzRHJDeIESAR7MpO4JAGyrvfwX1DSkVdUAhNvXM49XTSk0rwzMkssCenn37AVc8ymnxNTFcZuy/D8MdVlOXSosWdHrhF4D/XXw0X7fn+XA8ObU1mh/0ULmvOllo/Qs7HT1PuuZzHmCTVpvhowS0j4A6RbHLta1JxTpqsDz/c6+VQKBgQDubC69oYbaBjxOKsQGvYUhpS9RsqZCxmg1GzLcPiUOvjWzi8fNx3JrrJ8PFOcpxs+OhRT0rlzlePfHGu/lzrSuL0sCol9enFk80rKLFAw4oXAdnTbtEjaoxA1dFTrrUIxFQkHpeH0NAkqU6BVaxbCPH22zH6/BZt2J9225lBuelQ==
|
||||
@@ -1,21 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDizCCAnMCFCM5aRkNMigZAPlRtttmHcb/EQuOMA0GCSqGSIb3DQEBCwUAMIGB
|
||||
MQswCQYDVQQGEwJDTjESMBAGA1UECAwJR3Vhbmdkb25nMREwDwYDVQQHDAhTaGVu
|
||||
emhlbjEMMAoGA1UECgwDV0ZDMQswCQYDVQQLDAJJVDEQMA4GA1UEAwwHd2ZjLmNv
|
||||
bTEeMBwGCSqGSIb3DQEJARYPc3VwcG9ydEB3ZmMuY29tMB4XDTI1MDEwNDAzMjYw
|
||||
NloXDTI2MDEwNDAzMjYwNlowgYExCzAJBgNVBAYTAkNOMRIwEAYDVQQIDAlHdWFu
|
||||
Z2RvbmcxETAPBgNVBAcMCFNoZW56aGVuMQwwCgYDVQQKDANXRkMxCzAJBgNVBAsM
|
||||
AklUMRAwDgYDVQQDDAd3ZmMuY29tMR4wHAYJKoZIhvcNAQkBFg9zdXBwb3J0QHdm
|
||||
Yy5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC/qAi6vyAqmM+o
|
||||
G7o3tGVBltV3pMMfDHIW0QR6JTy+sb8k+pVWG+zTKPzDnkC6gYsRYXd1cqb2aS9F
|
||||
yfe7gLeug2fxllZbbujDoicwgMzdQXoQrk36qbsUhBMADDtpS5ay+xJAS/RKWfhr
|
||||
ivbcVPdB/ukV+ZH30mFBw/6NYYHyPk8XKlAW7HtOA+xItOTwrW0DhBoQRntM4SAx
|
||||
/rNG1cmMq+9jr98AvwKzK0/6zRh50b+u3sD8Pak0A8azdPLVd9rwi2jBHMBeOWSa
|
||||
4Kb4m4hY5D2OsV7dqrsGxFmAyQ/CCmV992Iwf0UtTMrSc8IvWD2j0wtpP3w7p9sD
|
||||
xafGtv+zAgMBAAEwDQYJKoZIhvcNAQELBQADggEBAAiNjhkCOE/BF5qUTub2EUfv
|
||||
Rn3zUstTY7grgtKF4qqzX6Sg5khq78QeD/vIOwEyhcEAtOoKxoSjAA7vH+wzaBwa
|
||||
VxwM1/bpG25W13G3J4YezKM844dXU73iaIQHcSJpbDCpvqMmYKp7k9i1e+P5RS3q
|
||||
sUZaRAGzGuepvFBvf9tQoJSB6MkJMSjHGf+jCBB3/BMocue5B/QMURrHU+fShy+f
|
||||
uSqbj0Y3b9iQxph+LXD4hYBVrRY5MnxbbUXfrv+SZjjoc5tfMdULDyIcA6cq/hi3
|
||||
36u0ckGeGQ4b9OuInQquQ/bP6EqXneYIWUssXS1gZ06vFlFcXPLdT5p4Mt0hY5k=
|
||||
-----END CERTIFICATE-----
|
||||
@@ -1,18 +0,0 @@
|
||||
-----BEGIN CERTIFICATE REQUEST-----
|
||||
MIIC8jCCAdoCAQAwgYExCzAJBgNVBAYTAkNOMRIwEAYDVQQIDAlHdWFuZ2Rvbmcx
|
||||
ETAPBgNVBAcMCFNoZW56aGVuMQwwCgYDVQQKDANXRkMxCzAJBgNVBAsMAklUMRAw
|
||||
DgYDVQQDDAd3ZmMuY29tMR4wHAYJKoZIhvcNAQkBFg9zdXBwb3J0QHdmYy5jb20w
|
||||
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC/qAi6vyAqmM+oG7o3tGVB
|
||||
ltV3pMMfDHIW0QR6JTy+sb8k+pVWG+zTKPzDnkC6gYsRYXd1cqb2aS9Fyfe7gLeu
|
||||
g2fxllZbbujDoicwgMzdQXoQrk36qbsUhBMADDtpS5ay+xJAS/RKWfhrivbcVPdB
|
||||
/ukV+ZH30mFBw/6NYYHyPk8XKlAW7HtOA+xItOTwrW0DhBoQRntM4SAx/rNG1cmM
|
||||
q+9jr98AvwKzK0/6zRh50b+u3sD8Pak0A8azdPLVd9rwi2jBHMBeOWSa4Kb4m4hY
|
||||
5D2OsV7dqrsGxFmAyQ/CCmV992Iwf0UtTMrSc8IvWD2j0wtpP3w7p9sDxafGtv+z
|
||||
AgMBAAGgKzASBgkqhkiG9w0BCQIxBQwDd2ZjMBUGCSqGSIb3DQEJBzEIDAYxMjM0
|
||||
NTYwDQYJKoZIhvcNAQELBQADggEBABJkN0yyJJWHFbQLNILL+x6/hFHg6JmxvXnK
|
||||
b+9DFH0IID6n8jtLkRE1QTjVj6LNr7g9kvei1tyDs4a7UFwSokGOJJP4jqlfPihk
|
||||
2Vo8VR7IDbgmNG6pAgya+bTKiS0ImNeNB11Cc4ofCvYLY34qraRtyqBVxstEAlAm
|
||||
t5GziFXbxFnZgDvn/pSmd8rorz8rNa9XUTAGhgoQJxPzoV0I+BHctH56FTOUJkPH
|
||||
Gchs5jmyIAWWeCF+kXmG1trB5znIurpzRUoOK/XeGh06JIX1ofj83uLyxNCSEDQi
|
||||
IetdBsMzu82P9TclZwiFXgsWylW2oin3Wuus4TDqm5Xlh0DzqjA=
|
||||
-----END CERTIFICATE REQUEST-----
|
||||
@@ -1,28 +0,0 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC/qAi6vyAqmM+o
|
||||
G7o3tGVBltV3pMMfDHIW0QR6JTy+sb8k+pVWG+zTKPzDnkC6gYsRYXd1cqb2aS9F
|
||||
yfe7gLeug2fxllZbbujDoicwgMzdQXoQrk36qbsUhBMADDtpS5ay+xJAS/RKWfhr
|
||||
ivbcVPdB/ukV+ZH30mFBw/6NYYHyPk8XKlAW7HtOA+xItOTwrW0DhBoQRntM4SAx
|
||||
/rNG1cmMq+9jr98AvwKzK0/6zRh50b+u3sD8Pak0A8azdPLVd9rwi2jBHMBeOWSa
|
||||
4Kb4m4hY5D2OsV7dqrsGxFmAyQ/CCmV992Iwf0UtTMrSc8IvWD2j0wtpP3w7p9sD
|
||||
xafGtv+zAgMBAAECggEAPFuvkByEBVZFw6Qj08pAv1TA2qKtfpg9T/k4pz0V8dpp
|
||||
n7w5DrrRrTixzeuHaBVHFkyzQe4/Lcg3houSNN9XOaMRt7BIdxgpPv9Qx0IxApdN
|
||||
2XYDgec1T0M+9ptjlIglKC3Q9CXXhBjslvXXQ9GQYxzkDDMiaME9NuiCQMVOFttC
|
||||
8VlyTXq/jHRie772Csu609DEE61ta4WFPgU10v6D33MiWzH66EjUMbXanhhetyGN
|
||||
7gh9yEmKHhBwXjDAs1t6MIt9VfGHyscxt0Uns0DvFFQT5Tm8yY7Rj6HUmeDfChjK
|
||||
0nysv64yZd2x9V7p85BYOw7xKbhBeW89oDyQ4NW1IQKBgQDCFlHhzGf9JPqD6qVb
|
||||
761qG1EkK8HUDNZW6miCLxxrX1fNsMURBSfbfHGhI3+GVMGBt2/y8abjsxx6GKYf
|
||||
qAp1cJgf+RY7+kash9/ew3cYCgMKKvlClaBXJkxbYeIOUpLDiSY5Qi3wrBbi65qk
|
||||
PUdvmzlSHKw5JiAAXFUfStgWEwKBgQD8yzVS/5HCBeLm77InED8kpMqny5sbxLJ+
|
||||
3Wuc4cPc4NSgiDCERB3MbstXYqFtKf2OOlTguT/pYqHfPgkBIXSx/1yvBf6YO2bN
|
||||
c7IDvrtKew8EIPmOjnWnPYU3zmxZcbO3OYT+brZRT2D10uFWIIZtxzhSyHLy4zav
|
||||
fZHMMf0j4QKBgF+MrXMENo2hjtMyyYWhUTZTjHbKM/o496yCakDtAIi7v3Y7+EiQ
|
||||
yTZ85VP3LejsAPfjXvGzlf2zR+m0CNS83alDbSEQd6m/ZNu7aLM6d38WLrjqvxvQ
|
||||
ncdJy32RisCSVj59XpwBwKwjjIDajJ8eq/R97pJGG2NnKYoD6sQlDIyRAoGBANzh
|
||||
8kYDaajO2+RNrKzVVVb/ZtQW5ADvbcfMUStTWYC2MxPR7BKmMiNe6+3/EG4CMrsD
|
||||
3QY+18lllWsrGVMTmJOvPZzw7/S0cq8yWGlNTvlVbVl+NpCJieQHrU+F3saIwy9l
|
||||
4v8uXb/OTDp/eMV4xf1GBcDPxSDVyAKvBaYWR8oBAoGABXrZ8YaWkcTgVAmPfy7J
|
||||
gYfOqH98qP1Jeo83dgY3Aon60NlpwVoAOfSIuNw+6CLQYmRUs2HqZI7J6BGMenHj
|
||||
oWwnL0KNSjyE1O9AOLgXUlPiv53JLUTrVD1oGG0FvYewRpaIt9/337gJc9IVCa/C
|
||||
y/whpOxKAivgmcSQQLdBfrs=
|
||||
-----END PRIVATE KEY-----
|
||||
@@ -1,23 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIID5TCCAs2gAwIBAgIUHTAul79DQ7u2F0isDV8VUcEV64IwDQYJKoZIhvcNAQEL
|
||||
BQAwgYExCzAJBgNVBAYTAkNOMRIwEAYDVQQIDAlHdWFuZ2RvbmcxETAPBgNVBAcM
|
||||
CFNoZW56aGVuMQwwCgYDVQQKDANXRkMxCzAJBgNVBAsMAklUMRAwDgYDVQQDDAd3
|
||||
ZmMuY29tMR4wHAYJKoZIhvcNAQkBFg9zdXBwb3J0QHdmYy5jb20wHhcNMjUwMTAz
|
||||
MTAyODI0WhcNMjcxMDI0MTAyODI0WjCBgTELMAkGA1UEBhMCQ04xEjAQBgNVBAgM
|
||||
CUd1YW5nZG9uZzERMA8GA1UEBwwIU2hlbnpoZW4xDDAKBgNVBAoMA1dGQzELMAkG
|
||||
A1UECwwCSVQxEDAOBgNVBAMMB3dmYy5jb20xHjAcBgkqhkiG9w0BCQEWD3N1cHBv
|
||||
cnRAd2ZjLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMO7Rupe
|
||||
LlfCceBlT/cLitpFFw3YUcE44FEA+xfDwMwfZY65Ahg/RA/AuHTeMI2397uFO4aP
|
||||
lkKWowa3iNrIVEKhlxstfEvkXFDg8j+6686oXIRiSS/tLgVtUNhuQuy9h9y3OIRc
|
||||
HaYccVedG5S8J93q2qklNpdU82/v+8hueHlYtC8I951kjzvW1Ks+f8rn7uoikR1+
|
||||
nzRQBElQ3Lk1VB2f2JK589hfcem3o3DmOVqA4oadC97GbiFKPPqIDA/O5G4yxlLO
|
||||
Va0c1NOMmjyT2S8snC7oT/FGi//LmQakfcNIPGJGPCL9QAj/Z3AbAPeUzsKofK1Y
|
||||
boaiy9FZT+tAhrkCAwEAAaNTMFEwHQYDVR0OBBYEFL/5FQ2HpqZIYfQp0UCpcHcv
|
||||
qPp4MB8GA1UdIwQYMBaAFL/5FQ2HpqZIYfQp0UCpcHcvqPp4MA8GA1UdEwEB/wQF
|
||||
MAMBAf8wDQYJKoZIhvcNAQELBQADggEBAC1+WYCwJg8rgQnoaFQ9haL8/2be/kbC
|
||||
Wqmuow9nZWFiIloetKE/y6ME/oxggBWGTdZMNbbCZHZiwTXgmlJm2XrWPYXPrtBa
|
||||
ua1NjssfePSZDbHYCfT9ySrFqQFpduccMmT3nJZRR00up93Mk1ccvUxEPE5Wr+qI
|
||||
Y6J5ZVRAVEGmpWljFpodFowt3paeoq2e7ogeZt53LxLdTh8Jb1p4pbDyQdVVrVH/
|
||||
Ee4JF+IwkkeLksdcW31D7/JNlg8Q+MBC4TG7EVMwKnxQGZmIcouy22JGyRbWObCX
|
||||
xlVkf0H1hR2hwUZHDFTLQ6n/FjQYwWVjYnf4G5yU3xMDOH2p03wunXA=
|
||||
-----END CERTIFICATE-----
|
||||
@@ -1,28 +0,0 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDDu0bqXi5XwnHg
|
||||
ZU/3C4raRRcN2FHBOOBRAPsXw8DMH2WOuQIYP0QPwLh03jCNt/e7hTuGj5ZClqMG
|
||||
t4jayFRCoZcbLXxL5FxQ4PI/uuvOqFyEYkkv7S4FbVDYbkLsvYfctziEXB2mHHFX
|
||||
nRuUvCfd6tqpJTaXVPNv7/vIbnh5WLQvCPedZI871tSrPn/K5+7qIpEdfp80UARJ
|
||||
UNy5NVQdn9iSufPYX3Hpt6Nw5jlagOKGnQvexm4hSjz6iAwPzuRuMsZSzlWtHNTT
|
||||
jJo8k9kvLJwu6E/xRov/y5kGpH3DSDxiRjwi/UAI/2dwGwD3lM7CqHytWG6GosvR
|
||||
WU/rQIa5AgMBAAECggEAEx5D8CDEp00OfTf8InHxzT3eIXuxiZ1t+K+PNxwnZPDE
|
||||
pVcQG7DzS5QcGEs7JB6V7660+KDmEQlAcYekEhWq+EqrFSwhVdLfiwVb2CqAfbIv
|
||||
fj1Q74Hb4ssRkGBdwFzHbGFHn5MVUMw6rG+DugiSXtBhrQ+d2FSDhjmjRum2cgiy
|
||||
cSQYAxL84bpLbNdCUOgEM73nT+7salPwSntrDK99xYxhjmItwgYc9sUCjsUhou5v
|
||||
oT4rbNckY0otDaD841IYdmqfU4LC04lhDdI0B8A1kvgls1JfG0TBcoXCn1280um/
|
||||
VzRO94w7IEekNloVegS+3EAPwDL56vCbkZbxo2wAcQKBgQDJfxDsSeL/4YeX+7k3
|
||||
uq539XucVCd/FZlh+DRyeuOy3V0XoOhTBiJQB2emynoWIZbVGDkJDuCEuUfJR0wn
|
||||
ssrJCHJOqJEFiKM9EicojQwpX1R/3UQv1x0Tvrjp56OL3wTHZCljPXqs6D4yfPbi
|
||||
edkrwgihHTdFXcx6HSkAjluXKQKBgQD4rQSj8loa7yU+tbOx++fRYDwd8vypNJl8
|
||||
TZ0Gr4hswXY+UnQly2kRgyJJ5G0w6/913drQUUrn6hGvWaGt8+OoXJhr3LmkkosJ
|
||||
EW8MR39vf6HvetMLDl1zLyS+kA9b8+1ipgQBd/Nfn6MCNf/3/s0kj01KVXK0Hjak
|
||||
o13n9eA1EQKBgDqIfQQHGrg2bctKxq1Xv6L9XuE02Rxjy+DX13SCGm81OvvINHUZ
|
||||
zRHudL/RBdI0A7r3hGoLNlGX+TCRU6AcoifwGjSbZzVyUelFwrZW8vd5x/Q09L/o
|
||||
/3ti5hicv7e8G4lIoXVAwMhF1vuXrahwuROrFBKpiArQirvWiLiuohCxAoGBANrV
|
||||
Jug/NRvOpy/wJhnSW8XcsgqI8d7U8tx4UF65yYwrEyr01FEOF3/ZriroYU5T35KR
|
||||
kSUQ5KIBUV7FuYmivgxCr777lkJE0yU/ukFMCdDMuGxN4boxAfuC2Qr5Kwr4NUZC
|
||||
YfQI4pqbmI8xhfduuogZsyJe33mxvNRVDyY5MPyBAoGARECPnpqCn0tx93L3lZe2
|
||||
JpHUtouJNj2BroLM7P90I5epYPD/epvCqOmjTsHJWytLQ8oZqHnoBA6307PHhIsk
|
||||
dZZJ5JjyLW8OqHxZBJAtmbwzYwicklMMFCq7kmJeIXFDbgDZTX0eX7zeBmuqhw71
|
||||
R/PQtWoiMPAY6ReaW1dAruI=
|
||||
-----END PRIVATE KEY-----
|
||||
@@ -1,23 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIID5TCCAs2gAwIBAgIUDpe1aXJOe6VwcbF528vIPiRlFaEwDQYJKoZIhvcNAQEL
|
||||
BQAwgYExCzAJBgNVBAYTAkNOMRIwEAYDVQQIDAlHdWFuZ2RvbmcxETAPBgNVBAcM
|
||||
CFNoZW56aGVuMQwwCgYDVQQKDANXRkMxCzAJBgNVBAsMAklUMRAwDgYDVQQDDAd3
|
||||
ZmMuY29tMR4wHAYJKoZIhvcNAQkBFg9zdXBwb3J0QHdmYy5jb20wHhcNMjUwMTAz
|
||||
MTA1MjA5WhcNMjYwMTAzMTA1MjA5WjCBgTELMAkGA1UEBhMCQ04xEjAQBgNVBAgM
|
||||
CUd1YW5nZG9uZzERMA8GA1UEBwwIU2hlbnpoZW4xDDAKBgNVBAoMA1dGQzELMAkG
|
||||
A1UECwwCSVQxEDAOBgNVBAMMB3dmYy5jb20xHjAcBgkqhkiG9w0BCQEWD3N1cHBv
|
||||
cnRAd2ZjLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK18xpnm
|
||||
t1O42Fjj6mG/Z8CSwFcdG3vd5m1MmUlRh35/SR7xmOy1NIguEPuLOS1BTl02eePH
|
||||
/H4KLfo12HbWtsHVDuwX1YFoXKxFKI7WCDSMdxPOIYxNQwL0sc74X3F+nNxKA4kW
|
||||
Oi84jJA/C/kzrUkt1h+UqNhcx4oBfkvnjScjZO+4igHMrZ6FD8OmFP0JAV5msOSm
|
||||
ojK1lzgEefbLwknX8gdk60iBzYKsGHLFrr3C2VOSQoeTjzxBXEeqIFmKLT4djmNi
|
||||
ano1Bz5kicyzxdh21ITdzTMmeVwze6CTsxaKj6tC1f5kViQvrSWVmuHIpJnu/hXA
|
||||
fCDBdVj/qiDeHG8CAwEAAaNTMFEwHQYDVR0OBBYEFKgXPMw5bfDUpNhqjzAP5qte
|
||||
caofMB8GA1UdIwQYMBaAFKgXPMw5bfDUpNhqjzAP5qtecaofMA8GA1UdEwEB/wQF
|
||||
MAMBAf8wDQYJKoZIhvcNAQELBQADggEBAJh2eTmJUHl+/WgIdaLZcCnFxcMAXpv0
|
||||
iTVltQeF6iKQH2FSJdR1NM2+46wUQYmjPx9YCbyyQYFWHaVfD050Nwg2Qg/Pna+2
|
||||
S/nQjunxTr+VbJHkGAKA3lbqC5jrdpYuOB8eykteIzzaGuzkaRQyPyZm3FsrpCvZ
|
||||
vKazjAkvKnvqa0j48k03zV+l+EaHQgxtozRvhGi4TAPQL9Gr7DRlnJm7IuAzv4Bu
|
||||
8pXlyHH2ko5INvPn1nlJhbM8M50RkxuPmrKCgcSFf4ngGDlPDj9m2vScxt5GTthc
|
||||
pUv+yyfgCnUTiNK2U7Duq/pCJia4Ih7SIZQLLaoUY7B3vUgxQDF2KEY=
|
||||
-----END CERTIFICATE-----
|
||||
@@ -1,28 +0,0 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCtfMaZ5rdTuNhY
|
||||
4+phv2fAksBXHRt73eZtTJlJUYd+f0ke8ZjstTSILhD7izktQU5dNnnjx/x+Ci36
|
||||
Ndh21rbB1Q7sF9WBaFysRSiO1gg0jHcTziGMTUMC9LHO+F9xfpzcSgOJFjovOIyQ
|
||||
Pwv5M61JLdYflKjYXMeKAX5L540nI2TvuIoBzK2ehQ/DphT9CQFeZrDkpqIytZc4
|
||||
BHn2y8JJ1/IHZOtIgc2CrBhyxa69wtlTkkKHk488QVxHqiBZii0+HY5jYmp6NQc+
|
||||
ZInMs8XYdtSE3c0zJnlcM3ugk7MWio+rQtX+ZFYkL60llZrhyKSZ7v4VwHwgwXVY
|
||||
/6og3hxvAgMBAAECggEAI7IbOPpYOTE8zplilecopV5sleAG0ic3rMCIf6X3T4dI
|
||||
F8ZVFUs5elWkJ+WfB5k60wIM9VmmMZbNnABtQBJwuxQoBFrpEr3S5505OZ5/RLSs
|
||||
IZaVn4UcJyUK2s+O787B3q+Z56B7q1Ci12EpiQZhfr+gIZJYZWA9rD8faeXETMts
|
||||
VLsEK82aDW1KxQJpcHeJnwvy91/3Wt5gdMN5zwjlpIFkJQWrRRAdUgkjQQbuV+Z5
|
||||
RkVqRt9U6ggsXwQqSL+OE/KIfMrnjRMJ8oUBhqeo0YW0MSMrfMnxqD4u4JKoB8/3
|
||||
8kmm5js+YGY75PRobMTMj0XEQ2SlF0/UJP65RLCW6QKBgQDRCizwJng70Ml+k91l
|
||||
KwWOYs8LaneYhYZ68CtP75Bq0vx23/OlFh2QgvFH/kDxMbK/Dwx+9VZ32TXUNlOh
|
||||
YWS71SugwytKIQ85t1ZZhb9A4fM1eMg2RM4Ht5JNC+ysb+7aDLu2/i65CcBndUWx
|
||||
RWp+8eGpQq7FoUtOg0Jj7jksOQKBgQDUdf5nWepBizj3nPsXoZ8rg1dwj4OvvUTq
|
||||
9KFAr7VJciYDLApS5KuOhrF1ctW47XLeFNHYLuiHHWNngVjmvd24zVWXB7jovgV/
|
||||
9tatIJymIDkmROiJT2zkO0bXN6oZe/pc0CvNBHC4ftyoJkv03Yw1FvbfJ2a3qpFl
|
||||
SeP/hOrd5wKBgEje4Td+UZ+YcwVbCmzACJnQPBjgrnxO38hvfMnK229ByZyvCUJd
|
||||
aUT9QJs2OPFbv9H2rwZ7A/+XirpFjfXN+822zBSotKiMyb/293URuNAndB8J0dGJ
|
||||
PsFV7vxI0eJyyrLciXuLNEJw8c+fBAJ+DlfefioBAugGCDiAbV5kpy2RAoGAbpN+
|
||||
tdGhTz2jh5QHRxRSIDZ6gtXexs9uGA78AguxAanMSOhZ8yyacVJ+986tl1LV7unN
|
||||
EYPQd8n+23cBiw4UYMNVoYZeYZvMhv40WuTXQssQk29Xy2cwGFUVmJubByp0cmvR
|
||||
8CE4fX1hYI6WB7pq55KtKBV8q2i1xY7AgFNwXc8CgYA5SuT9+Lrj+1CVBeM8FD1x
|
||||
8ZeH4CrPrqczTPg6E7x1jTNzRY8Nd/2AYdDZ3KQRfT9tJS2Cdk9W4xc8QokzAxU7
|
||||
XcmMSELa03xaxw2b5RWQ9jmu6Yj3zfX9BR7zB95fbjiRGDkCEj+VUMBx2a8xABFW
|
||||
+SQiX9Zey0DDSYmn4brw5w==
|
||||
-----END PRIVATE KEY-----
|
||||
@@ -1,109 +0,0 @@
|
||||
# spring配置
|
||||
spring:
|
||||
application:
|
||||
name: wfc-payment
|
||||
cloud:
|
||||
nacos:
|
||||
discovery:
|
||||
server-addr: ${NACOS_SERVER_ADDR:wfc-nacos}:${NACOS_SERVER_PORT:8848}
|
||||
namespace: ${NACOS_NAME_SPACE:wfc-prod}
|
||||
main:
|
||||
allow-bean-definition-overriding: true
|
||||
|
||||
redis:
|
||||
host: wfc-redis
|
||||
port: 6379
|
||||
password:
|
||||
datasource:
|
||||
druid:
|
||||
stat-view-servlet:
|
||||
enabled: true
|
||||
loginUsername: admin
|
||||
loginPassword: 123456
|
||||
dynamic:
|
||||
druid:
|
||||
initial-size: 5
|
||||
min-idle: 5
|
||||
maxActive: 20
|
||||
maxWait: 60000
|
||||
connectTimeout: 30000
|
||||
socketTimeout: 60000
|
||||
timeBetweenEvictionRunsMillis: 60000
|
||||
minEvictableIdleTimeMillis: 300000
|
||||
validationQuery: SELECT 1 FROM DUAL
|
||||
testWhileIdle: true
|
||||
testOnBorrow: false
|
||||
testOnReturn: false
|
||||
poolPreparedStatements: true
|
||||
maxPoolPreparedStatementPerConnectionSize: 20
|
||||
filters: stat,slf4j
|
||||
connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
|
||||
datasource:
|
||||
# 主库数据源
|
||||
master:
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
url: jdbc:mysql://wfc-mysql:3306/wfc_user_db?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
|
||||
username: root
|
||||
password: 123456
|
||||
# 从库数据源
|
||||
# slave:
|
||||
# username:
|
||||
# password:
|
||||
# url:
|
||||
# driver-class-name:
|
||||
config:
|
||||
import: optional:file:/opt/wfc/conf/application-common.yml
|
||||
|
||||
# mybatis-plus配置
|
||||
mybatis-plus:
|
||||
# 搜索指定包别名
|
||||
type-aliases-package: org.wfc.system
|
||||
# 配置mapper的扫描,找到所有的mapper.xml映射文件
|
||||
mapper-locations: classpath:mapper/**/*.xml
|
||||
global-config:
|
||||
db-config:
|
||||
logic-delete-field: del_flag
|
||||
logic-delete-value: 1
|
||||
logic-not-delete-value: 0
|
||||
|
||||
# swagger configuration
|
||||
swagger:
|
||||
title: payment modules api
|
||||
license: Powered By wfc
|
||||
licenseUrl: https://wfc.vip
|
||||
|
||||
# payment configuration,
|
||||
# alipay configuration
|
||||
alipay:
|
||||
appId: 9021000122699258
|
||||
privateKey: MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC7YAcIXV5GJlTWBOoBcrVG1zKxHunznSjYXwTS2DM3YgloxzKye4apfcmBDVnoL93m4QrJTtbiHYvu4yJjJfJsQEY+Wo44IczhDypyu+Il6JpQOwylTs94/+3aaQ1wThsDaGs8edaFGteuw+1pUVl4nxF00fS1VoIR30riqAGFAXrPhcSA6Y9c8HK1htxCelICnPzjpqC4s8ZjrjS7FoyHP2ZAay5fx1VEtah30E4RvycFfV/i2+k3JGFOSeevdCx6Ufu+9Y/RaG4Sh84QuYRQUhAHUswlFDHpRrAnxHzt0zDkOkg3BrCT7vMtBbSOP9BdIhpVTaZm4diQdNbLSl4hAgMBAAECggEAKb1Xc7aQ1KGfTlmj4xSxawlvImOXjAwbWC+6fFlq91BgdjXBhl7b/Y+mvpfBymY3UUIaTAPC/HXGgT2ZoGqImTKsMyGrArgM0qm1M//EfdtV3L96rqxirTqduoSiWL0daWHuWXduoRH8r9K3ZTmY67TLh7FpiKevq9mI7fqs8/qgq5QAN4UPFb3Cq9hDNTU4l6+Bywdg1KkwJ2Jc98SlrIdVl+1eCMAgueLR0aNHTobyPBZ/KfwGRV0OQ3QqjLVgL3zlbzuylYhaZqPgxxd46vgWwkyMiiv7u2OyCetq4LFd+tcNDz0Yqk6rK9/S0oxbN8NM5DLkpwFh/433BoPS3QKBgQD/dsxNr2PYdPLp6pOvw7H2AFMH8CkwTlRg+2f/0fgQF14rJwZgEU6fL5A2JvQeRRC5mCff2m5tDqrS321JNyH/JIKJ+4J8I34GEo/kSCHL3RmyvJGQOQ/EpEyxvP8BV3ob6UO3LR58DOGlJr8eTsr3Y8o9cAMuknCNxvsd2LvybwKBgQC7xKkx4KIPBny6sCOtChOkgIrY3hOCi+ZsHQVESXKzeku0NkH/qrAG+S9pb1XCzXdM2HrzkMeuz6tqi+2TY8nORyY2DZHNW7FqzkAiZ/NO2AgGIlALq1ZfJZke2MxgtBnxSsQ03gfXP9opu/FsLH9a+s6edfHPvKD4kHxlLBfAbwKBgQDYvr6QmuKn4HHJLZGoau0uvw+ziHwp1AubTTLrxgYmAO2Qx0eNcqG2RfChQWOV2xtZnFMYhodyWCNvTsm2eOSLSTrIP3ByStq95DnZganLAgivsXX/W6qZOJ0poCTryoB79enSHKHktjksmjdFS6zBQRVyEvtgJDcC03Rz2lN8WQKBgQCCoJE4otb7bv7s/ccEBeOeaNKvhue5xUwbYKEeXZ6PYAA0sh5+GCf34flq90qJiFl7u4rl0Y4pfk35hLlV9XEasYLSzePmIuktrakOhpTNABus8MgRJjSjYsvAmwCsMf9uTx5qzSBVThWfPSH6qIY9LAj8Un9UjxzJb/Mqi19GvwKBgQC0/KB+3robTqy9KOV4iEKJ4kmnXDRu7ecpMyc8k5HzpolIHcXLZHkBK9pMCXBQ9Kwy6BjRGNnUZOahS+tvnMcjHpwdhu90r7D51GXW/+PeFtphYTscFhHv1yuWbbojzhKf69pZnsVmyllIBqRgtbkS2WNHxWo/peCg47TcLaQNMA==
|
||||
publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhBZoE6p1TKpd/WsAJRTA2D6yUTzqLmZ73scxbPxxKwPIg2ys2Ap21u/lVmqBWO9Wf2Z7wUwr/6BP1PQqVpg0GAqU3yjjZ0LGfBitzMBMbGrlOLqJQ3PKgnUNmnOdLR4FlHCAjKtuyxjHkxBTHg/L4punk4lkFJQD8YvzFrYalS6WYw5j1/oq080NbcjPirPCRlsU7MRraQuUqSTdPwm2iHkroKwCEbGv+RtNJCfOkKNQVtRFFgPGMhU4nQ620gdfzsGJsNFKVJnD5SjeDWniBAbaGaVF4rEfKJPe6+XrcMg3h+9Fz+A2IU1KCCoth2neEZEaU1t0KBGxXIuo4efi/QIDAQAB
|
||||
appCertPath: \u5E94\u7528\u516C\u94A5\u8BC1\u4E66
|
||||
aliPayCertPath: \u652F\u4ED8\u5B9D\u516C\u94A5\u8BC1\u4E66
|
||||
aliPayRootCertPath: \u652F\u4ED8\u5B9D\u6839\u8BC1\u4E66
|
||||
serverUrl: https://openapi-sandbox.dl.alipaydev.com/gateway.do
|
||||
domain: http://192.168.2.249
|
||||
testDomain: http://129.204.171.210:8085
|
||||
|
||||
# wxpay configuration
|
||||
wxpay:
|
||||
appId:
|
||||
appSecret:
|
||||
mchId:
|
||||
partnerKey:
|
||||
certPath:
|
||||
domain: http://192.168.2.249/u
|
||||
|
||||
# paypal configuration
|
||||
paypal:
|
||||
client-id: AfPgwFAmo9K7KCqiiGpNRCyQMSxI6V33eH-nEMnVndJNVEYOEOEn5wSPkHUybfzcjDLnBejt-RKnIfqX
|
||||
client_secret: EOYQzSGuMaTMWodcppZUTz9v3H9j38yYiv8bmj4kLZl5NiSUJ0AJJuGlA1CU4oDtEX6jNdGNhsMCiAcN
|
||||
sandBox: true
|
||||
|
||||
# stripe configuration
|
||||
# 需要在https://dashboard.stripe.com/workbench/webhooks配置webhook,添加接收端-选择事件checkout.session.completed-端点URL填http(s)//ip/u-api/payment/stripe/callback
|
||||
# endpoint-secret在创建webhook后生成
|
||||
stripe:
|
||||
secret-key: sk_test_51RHGN8FwutpVO5TqqmAkJNYMlWDPgwj4NVKPxcPKEXMGSPpEZ4yKwpGancV1vyPP74Pk3ETPUdAws0CfiH1jTN9v00kQ64suj5
|
||||
domain: http://192.168.6.222/u
|
||||
endpoint-secret: whsec_zBaAhDlSc6AdNBlbLzmbT0mfGCikA8IT
|
||||
@@ -1,15 +0,0 @@
|
||||
# 基础镜像
|
||||
FROM openjdk:8-jre
|
||||
# author
|
||||
LABEL org.wfc.image.authors="wfc@wfc.org"
|
||||
|
||||
# 挂载目录
|
||||
VOLUME /opt/wfc
|
||||
# 创建目录
|
||||
RUN mkdir -p /opt/wfc
|
||||
# 指定路径
|
||||
WORKDIR /opt/wfc
|
||||
# 复制jar文件到路径
|
||||
COPY ./jar/wfc-modules-payment.jar /opt/wfc/wfc-modules-payment.jar
|
||||
# 启动系统服务
|
||||
ENTRYPOINT ["java","-jar","wfc-modules-payment.jar"]
|
||||
@@ -1 +0,0 @@
|
||||
存放系统模块打包好的jar文件,用于docker启动应用。
|
||||
@@ -1,58 +0,0 @@
|
||||
# spring配置
|
||||
spring:
|
||||
redis:
|
||||
host: wfc-redis
|
||||
port: 6379
|
||||
password:
|
||||
datasource:
|
||||
druid:
|
||||
stat-view-servlet:
|
||||
enabled: true
|
||||
loginUsername: admin
|
||||
loginPassword: 123456
|
||||
dynamic:
|
||||
druid:
|
||||
initial-size: 5
|
||||
min-idle: 5
|
||||
maxActive: 20
|
||||
maxWait: 60000
|
||||
connectTimeout: 30000
|
||||
socketTimeout: 60000
|
||||
timeBetweenEvictionRunsMillis: 60000
|
||||
minEvictableIdleTimeMillis: 300000
|
||||
validationQuery: SELECT 1 FROM DUAL
|
||||
testWhileIdle: true
|
||||
testOnBorrow: false
|
||||
testOnReturn: false
|
||||
poolPreparedStatements: true
|
||||
maxPoolPreparedStatementPerConnectionSize: 20
|
||||
filters: stat,slf4j
|
||||
connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
|
||||
datasource:
|
||||
# 主库数据源
|
||||
master:
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
url: jdbc:mysql://wfc-mysql:3306/wfc_system_db?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
|
||||
username: root
|
||||
password: 123456
|
||||
# 从库数据源
|
||||
# slave:
|
||||
# username:
|
||||
# password:
|
||||
# url:
|
||||
# driver-class-name:
|
||||
config:
|
||||
import: optional:file:/opt/wfc/conf/application-common.yml
|
||||
|
||||
# mybatis配置
|
||||
mybatis:
|
||||
# 搜索指定包别名
|
||||
typeAliasesPackage: org.wfc.system
|
||||
# 配置mapper的扫描,找到所有的mapper.xml映射文件
|
||||
mapperLocations: classpath:mapper/**/*.xml
|
||||
|
||||
# swagger配置
|
||||
swagger:
|
||||
title: 系统模块接口文档
|
||||
license: Powered By wfc
|
||||
licenseUrl: https://wfc.vip
|
||||
@@ -1,15 +0,0 @@
|
||||
# 基础镜像
|
||||
FROM openjdk:8-jre
|
||||
# author
|
||||
LABEL org.wfc.image.authors="wfc@wfc.org"
|
||||
|
||||
# 挂载目录
|
||||
VOLUME /opt/wfc
|
||||
# 创建目录
|
||||
RUN mkdir -p /opt/wfc
|
||||
# 指定路径
|
||||
WORKDIR /opt/wfc
|
||||
# 复制jar文件到路径
|
||||
COPY ./jar/wfc-modules-system.jar /opt/wfc/wfc-modules-system.jar
|
||||
# 启动系统服务
|
||||
ENTRYPOINT ["java","-jar","wfc-modules-system.jar"]
|
||||
@@ -1 +0,0 @@
|
||||
存放系统模块打包好的jar文件,用于docker启动应用。
|
||||
@@ -1,74 +0,0 @@
|
||||
# spring配置
|
||||
spring:
|
||||
redis:
|
||||
host: wfc-redis
|
||||
port: 6379
|
||||
password:
|
||||
datasource:
|
||||
druid:
|
||||
stat-view-servlet:
|
||||
enabled: true
|
||||
loginUsername: admin
|
||||
loginPassword: 123456
|
||||
dynamic:
|
||||
druid:
|
||||
initial-size: 5
|
||||
min-idle: 5
|
||||
maxActive: 20
|
||||
maxWait: 60000
|
||||
connectTimeout: 30000
|
||||
socketTimeout: 60000
|
||||
timeBetweenEvictionRunsMillis: 60000
|
||||
minEvictableIdleTimeMillis: 300000
|
||||
validationQuery: SELECT 1 FROM DUAL
|
||||
testWhileIdle: true
|
||||
testOnBorrow: false
|
||||
testOnReturn: false
|
||||
poolPreparedStatements: true
|
||||
maxPoolPreparedStatementPerConnectionSize: 20
|
||||
filters: stat,slf4j
|
||||
connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
|
||||
datasource:
|
||||
# 主库数据源
|
||||
master:
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
url: jdbc:mysql://wfc-mysql:3306/wfc_user_db?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
|
||||
username: root
|
||||
password: 123456
|
||||
# 从库数据源
|
||||
# slave:
|
||||
# username:
|
||||
# password:
|
||||
# url:
|
||||
# driver-class-name:
|
||||
config:
|
||||
import: optional:file:/opt/wfc/conf/application-common.yml
|
||||
|
||||
# mybatis配置
|
||||
mybatis:
|
||||
# 搜索指定包别名
|
||||
typeAliasesPackage: org.wfc.user
|
||||
config-location: classpath:mybatis-config.xml
|
||||
# 配置mapper的扫描,找到所有的mapper.xml映射文件
|
||||
mapperLocations: classpath:mapper/**/*.xml
|
||||
|
||||
# swagger配置
|
||||
swagger:
|
||||
title: 系统模块接口文档
|
||||
license: Powered By wfc
|
||||
licenseUrl: https://wfc.vip
|
||||
|
||||
# 提醒配置
|
||||
reminder:
|
||||
# 是否开启流量提醒
|
||||
trafficEnable: true
|
||||
# 流量提醒阈值,单位:百分比, 如剩余小于10%会触发邮件提醒
|
||||
trafficThreshold: 10
|
||||
# 是否开启余额提醒
|
||||
balanceEnable: true
|
||||
# 余额提醒阈值,单位:跟随系统, 如余额小于5元会触发邮件提醒
|
||||
balanceThreshold: 5
|
||||
# 流量提醒邮件标题
|
||||
trafficTitle: 'Traffic Reminder'
|
||||
# 余额提醒邮件标题
|
||||
balanceTitle: 'Balance Reminder'
|
||||
@@ -1,15 +0,0 @@
|
||||
# 基础镜像
|
||||
FROM openjdk:8-jre
|
||||
# author
|
||||
LABEL org.wfc.image.authors="wfc@wfc.org"
|
||||
|
||||
# 挂载目录
|
||||
VOLUME /opt/wfc
|
||||
# 创建目录
|
||||
RUN mkdir -p /opt/wfc
|
||||
# 指定路径
|
||||
WORKDIR /opt/wfc
|
||||
# 复制jar文件到路径
|
||||
COPY ./jar/wfc-modules-user.jar /opt/wfc/wfc-modules-user.jar
|
||||
# 启动系统服务
|
||||
ENTRYPOINT ["java","-jar","wfc-modules-user.jar"]
|
||||
@@ -1 +0,0 @@
|
||||
存放系统模块打包好的jar文件,用于docker启动应用。
|
||||
@@ -1,15 +0,0 @@
|
||||
# 基础镜像
|
||||
FROM openjdk:8-jre
|
||||
# author
|
||||
LABEL org.wfc.image.authors="wfc@wfc.org"
|
||||
|
||||
# 挂载目录
|
||||
VOLUME /opt/wfc
|
||||
# 创建目录
|
||||
RUN mkdir -p /opt/wfc
|
||||
# 指定路径
|
||||
WORKDIR /opt/wfc
|
||||
# 复制jar文件到路径
|
||||
COPY ./jar/wfc-visual-monitor.jar /opt/wfc/wfc-visual-monitor.jar
|
||||
# 启动系统服务
|
||||
ENTRYPOINT ["java","-jar","wfc-visual-monitor.jar"]
|
||||
@@ -1 +0,0 @@
|
||||
存放监控中心打包好的jar文件,用于docker启动应用。
|
||||
@@ -1,15 +0,0 @@
|
||||
[Unit]
|
||||
Description=WANFi Control and Billing System
|
||||
After=network.target
|
||||
Requires=network.target
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
RemainAfterExit=yes
|
||||
WorkingDirectory=/opt/wfc/docker
|
||||
ExecStart=docker-compose start
|
||||
ExecStop=docker-compose stop
|
||||
ExecReload=docker-compose restart
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
@@ -1,9 +0,0 @@
|
||||
Package: WFC
|
||||
Version: 1.0.19
|
||||
Section: WFC
|
||||
Prioritt: optional
|
||||
Architecture: amd64
|
||||
Maintainer: wfc
|
||||
Depends:
|
||||
Description: WANFi Control and Billing System
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
# !/bin/bash
|
||||
|
||||
wfc_root_dir=/opt/wfc
|
||||
systemd_dir=/etc/systemd/system
|
||||
fe_dist_dir=${wfc_root_dir}/opt/wfc/docker/nginx/html/dist
|
||||
wfc_bin_dir=${wfc_root_dir}/bin
|
||||
|
||||
chmod +rx ${wfc_root_dir}/bin/*
|
||||
|
||||
systemctl daemon-reload
|
||||
systemctl enable wfccontrol.service
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
# !/bin/bash
|
||||
|
||||
systemctl daemon-reload
|
||||
# systemctl stop wfccontrol.service
|
||||
systemctl disable wfccontrol.service
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
# !/bin/bash
|
||||
|
||||
fe_dist_dir=/opt/wfc/docker/nginx/html/dist
|
||||
|
||||
# clear front-end old hash js files
|
||||
rm -rf ${fe_dist_dir}/sys
|
||||
rm -rf ${fe_dist_dir}/u
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
# !/bin/bash
|
||||
|
||||
wfc_bin_dir=/opt/wfc/bin
|
||||
|
||||
${wfc_bin_dir}/wfccontrol.sh stop
|
||||
${wfc_bin_dir}/wfcsetup.sh rm all
|
||||
exit 0
|
||||
@@ -1,997 +0,0 @@
|
||||
**修订记录**
|
||||
|
||||
| 修订日期 | 版本号 | 修订内容 | 修订人 | 备注 |
|
||||
| ---------- | ------ | --------------------------- | ------------------ | ---- |
|
||||
| 2024/11/13 | V1.0 | 初稿 | 张树忠/李昌/蔡育超 | |
|
||||
| 2024/11/13 | V1.1 | 完善架构设计和描述 | 张树忠 | |
|
||||
| 2024/11/30 | V1.2 | 增加计费和套餐设计 | 张树忠 | |
|
||||
| 2025/02/17 | V1.3 | 架构修改,去掉多余微服务 | 张树忠 | |
|
||||
| 2025/02/24 | V1.4 | 增加数据库表设计,业务流程图 | 张树忠 | |
|
||||
| 2025/06/24 | V1.5 | 修改名称WANFi为MacroHub | 张树忠 | |
|
||||
|
||||
|
||||
---
|
||||
|
||||
# **MacroHub软件系统设计文档**
|
||||
|
||||
# 1. 需求分析
|
||||
|
||||
MacroHub控制平台用于提供给运营商用于AP设备的管理监控,并对终端用户进行管理和计费管理。具体的业务需求概括如下:
|
||||
|
||||
## 1.1. 使用对象定义
|
||||
|
||||
> a) "客户"指购买AP设备的B端公司或组织,包含有多个管理和运维人员
|
||||
>
|
||||
> b) "用户"指使用改B端提供的的WiFi服务的C端用户,一个用户只有一个账号,一个账号可以使用多个终端设备
|
||||
|
||||
## 1.2. 平台需求定义
|
||||
|
||||
> a) 客户平台:为B端客户提供的控制和费用管理界面,用于AP的远程管理,配置,运行检测(根据API 文档逐一实现 Omada平台上的功能),管理用户数据、设备信息和计费信息
|
||||
|
||||
> b) 用户平台:为C端客户提供的个人信息管理:用于C端用户缴费以及个人信息管理,终端设备管理
|
||||
|
||||
> c) 客户平台包含用户平台的信息,但用户平台无法获取客户平台信息
|
||||
|
||||
## 1.3. 商业模式定义
|
||||
|
||||
> a. 客户服务用户(比如运营商):包含完整的客户平台和用户平台功能
|
||||
|
||||
> b. 客户服务设备(比如农场采购,直接用于农场智能设备,没有用户参与):只需要开发客户平台,以及客户平台中的设备信息管理,无需用户信息管理以及缴费系统
|
||||
|
||||
> c. 二者在开发系统上和数据库结构上尽可能兼容,保证一套系统可以为二者服务
|
||||
|
||||
> d. 费用以设备为维度进行管理,即通过数据库管理每一个设备的流量,使用时长等该需求是指一个用户/账号下的多个设备可以单独计费??)
|
||||
|
||||
> e. 费用以用户为维度进行收费,每个用户会收到一个账单,包含账户下设备数量,使用流量,使用时长等
|
||||
|
||||

|
||||
|
||||
# 2. 系统架构设计
|
||||
|
||||

|
||||
|
||||
## 2.1. 架构说明
|
||||
|
||||
> a) 微服务架构
|
||||
|
||||
> b) B/S模式
|
||||
|
||||
> c) 支持本地和云部署
|
||||
|
||||
## 2.2. 开发运行环境和技术栈
|
||||
|
||||
> a) 操作系统:
|
||||
|
||||
Ubuntu 22.04
|
||||
|
||||
> b) 数据库:
|
||||
|
||||
MySQL 5.7
|
||||
Redis 7.4.2
|
||||
MongoDB 7.0.15 (用于Omada SDN Controller)
|
||||
ElasticsSearch 7.1 用于大数据文本的查询 (暂未使用)
|
||||
|
||||
> c) 后端开发语言:
|
||||
|
||||
Java 1.8
|
||||
SprintgBoot 2.7
|
||||
SpringCloud 2021.0.8
|
||||
SpringCloudAlibaba 2021.0.5.0
|
||||
|
||||
> d) 前端开发语言:
|
||||
|
||||
HTML+CSS,
|
||||
Vue.js 3.4.27
|
||||
AntD 4.2.2
|
||||
|
||||
# 3. 业务流程
|
||||
|
||||
## 3.1. 用户登录注册
|
||||
|
||||
* 用户注册,需填写个人信息,邮箱,手机号,实名认证等
|
||||
* 用户连接MacroHub时,通过网页进行登录
|
||||
* 登陆后,后端API获取当前连接设备的MAC地址,如果该设备未被绑定到数据库中,则由后端API将当前设备绑定到数据库中
|
||||
|
||||

|
||||
|
||||
## 3.2. 终端设备访问控制
|
||||
|
||||
* 终端设备连接AP热点,门户拦截
|
||||
* 用户登录,判断是否充值有效套餐或者余额是否为0
|
||||
* 如果存在套餐流量不为0或者余额部位0,则授权终端设备Internet连接准入
|
||||
* 用户平台定时监测终端设备上网流量并实时计算套餐流量或余额
|
||||
* 如果套餐流量为0且余额为0,则去授权终端设备Internet接入权限
|
||||
|
||||

|
||||
|
||||
# 4. 数据库设计
|
||||
|
||||
## 4.1. 客户数据库表设计
|
||||
|
||||
系统采用 MySQL 数据库,字符集为 utf8mb4,主要涉及系统配置、部门、设备、数据字典、定时任务、日志、菜单、角色以及用户管理等模块。
|
||||
|
||||
### 4.1.1. 数据库架构
|
||||
|
||||
- **数据库名称**:`wfc_system_db`
|
||||
- **字符集**:utf8mb4
|
||||
- **校对规则**:utf8mb4_general_ci
|
||||
|
||||
### 4.1.2. 客户平台表总览
|
||||
|
||||
| 表名 | 主键 | 备注说明 | 说明 |
|
||||
| -------------- | ---------------- | ------------------ | ------------------------ |
|
||||
| sys_config | config_id | 参数配置表 | 存储系统参数配置信息 |
|
||||
| sys_dept | dept_id | 部门表 | 存储部门信息 |
|
||||
| sys_device | id | 客户平台-设备表 | 存储设备信息 |
|
||||
| sys_dict_data | dict_code | 字典数据表 | 存储字典数据 |
|
||||
| sys_dict_type | dict_id | 字典类型表 | 存储字典类型 |
|
||||
| sys_job | job_id | 定时任务调度表 | 存储定时任务调度信息 |
|
||||
| sys_job_log | job_log_id | 定时任务调度日志表 | 存储定时任务调度日志信息 |
|
||||
| sys_logininfor | info_id | 系统访问记录 | 存储系统访问记录 |
|
||||
| sys_menu | menu_id | 菜单权限表 | 存储菜单权限信息 |
|
||||
| sys_oper_log | oper_id | 操作日志记录 | 存储操作日志记录 |
|
||||
| sys_post | post_id | 岗位信息表 | 存储岗位信息 |
|
||||
| sys_role | role_id | 角色信息表 | 存储角色信息 |
|
||||
| sys_role_dept | role_id, dept_id | 角色和部门关联表 | 存储角色和部门的关联信息 |
|
||||
| sys_role_menu | role_id, menu_id | 角色和菜单关联表 | 存储角色和菜单的关联信息 |
|
||||
| sys_user | user_id | 用户信息表 | 存储用户信息 |
|
||||
| sys_user_post | user_id, post_id | 用户与岗位关联表 | 存储用户与岗位的关联信息 |
|
||||
| sys_user_role | user_id, role_id | 用户和角色关联表 | 存储用户和角色的关联信息 |
|
||||
|
||||
---
|
||||
|
||||
### 4.1.3 表结构设计
|
||||
|
||||
#### 参数配置表 - sys_config
|
||||
|
||||
用于存储全局系统配置参数。
|
||||
|
||||
| 列名 | 数据类型 | 约束 | 说明 |
|
||||
| ------------ | ------------ | --------------------------- | -------------------------------------- |
|
||||
| config_id | int(11) | PRIMARY KEY``AUTO_INCREMENT | 参数主键 |
|
||||
| config_name | varchar(100) | DEFAULT '' | 参数名称 |
|
||||
| config_key | varchar(100) | DEFAULT '' | 参数键名 |
|
||||
| config_value | varchar(500) | DEFAULT '' | 参数键值 |
|
||||
| config_type | char(1) | DEFAULT 'N' | 系统内置标识(Y表示内置, N表示非内置) |
|
||||
| create_by | varchar(64) | DEFAULT '' | 创建者 |
|
||||
| create_time | datetime | NULLABLE | 创建时间 |
|
||||
| update_by | varchar(64) | DEFAULT '' | 更新者 |
|
||||
| update_time | datetime | NULLABLE | 更新时间 |
|
||||
| remark | varchar(500) | NULLABLE | 备注 |
|
||||
|
||||
---
|
||||
|
||||
#### 部门表 - sys_dept
|
||||
|
||||
存储各部门信息,支持层级结构。
|
||||
|
||||
| 列名 | 数据类型 | 约束 | 说明 |
|
||||
| ----------- | ------------ | --------------------------- | ------------------------ |
|
||||
| dept_id | bigint(20) | PRIMARY KEY``AUTO_INCREMENT | 部门 ID |
|
||||
| parent_id | bigint(20) | DEFAULT 0 | 父部门 ID |
|
||||
| ancestors | varchar(50) | DEFAULT '' | 祖级列表 |
|
||||
| dept_name | varchar(30) | DEFAULT '' | 部门名称 |
|
||||
| order_num | int(11) | DEFAULT 0 | 显示顺序 |
|
||||
| leader | varchar(20) | NULLABLE | 负责人 |
|
||||
| phone | varchar(11) | NULLABLE | 联系电话 |
|
||||
| email | varchar(50) | NULLABLE | 邮箱 |
|
||||
| status | char(1) | DEFAULT '0' | 部门状态(0正常、1停用) |
|
||||
| del_flag | char(1) | DEFAULT '0' | 删除标志(0存在,2删除) |
|
||||
| create_by | varchar(64) | DEFAULT '' | 创建者 |
|
||||
| create_time | datetime | NULLABLE | 创建时间 |
|
||||
| update_by | varchar(64) | DEFAULT '' | 更新者 |
|
||||
| update_time | datetime | NULLABLE | 更新时间 |
|
||||
| remark | varchar(500) | NULLABLE | 备注 |
|
||||
|
||||
---
|
||||
|
||||
#### 系统设备表 - sys_device
|
||||
|
||||
存储客户平台中设备的各项信息。
|
||||
|
||||
| 列名 | 数据类型 | 约束 & 默认值 | 说明 |
|
||||
| ------------------ | ------------ | --------------------------- | ----------------------- |
|
||||
| id | bigint(20) | PRIMARY KEY``AUTO_INCREMENT | 主键 |
|
||||
| site_id | varchar(64) | NULLABLE | 站点 ID |
|
||||
| mac | varchar(64) | NULLABLE | MAC 地址 |
|
||||
| name | varchar(64) | NULLABLE | 设备名称 |
|
||||
| type | varchar(32) | NULLABLE | 类型 |
|
||||
| subtype | varchar(32) | NULLABLE | 子类型 |
|
||||
| device_series_type | varchar(32) | NULLABLE | 产品系列类型 |
|
||||
| model | varchar(64) | NULLABLE | 设备型号 |
|
||||
| ip | varchar(64) | NULLABLE | IP 地址 |
|
||||
| ipv6s | varchar(255) | NULLABLE | IPv6 地址(可能多个) |
|
||||
| uptime | varchar(64) | NULLABLE | 在线时长 |
|
||||
| status | int(11) | NULLABLE | 状态 |
|
||||
| last_seen | bigint(20) | NULLABLE | 最后在线时间 |
|
||||
| cpu_util | int(11) | NULLABLE | CPU 利用率 |
|
||||
| mem_util | int(11) | NULLABLE | 内存利用率 |
|
||||
| sn | varchar(64) | NULLABLE | 序列号 |
|
||||
| license_status | int(11) | NULLABLE | 授权状态 |
|
||||
| tag_name | varchar(64) | NULLABLE | Tag Name |
|
||||
| uplink_device_mac | varchar(64) | NULLABLE | Uplink Device Mac |
|
||||
| uplink_device_name | varchar(64) | NULLABLE | Uplink Device Name |
|
||||
| uplink_device_port | varchar(64) | NULLABLE | Uplink Device Port |
|
||||
| link_speed | int(11) | NULLABLE | Link Speed |
|
||||
| duplex | int(11) | NULLABLE | Duplex |
|
||||
| switch_consistent | tinyint(1) | NULLABLE | Switch Consistent |
|
||||
| public_ip | varchar(64) | NULLABLE | Public IP |
|
||||
| firmware_version | varchar(64) | NULLABLE | Firmware Version |
|
||||
| del_flag | tinyint(1) | NULLABLE | 删除标志(0存在 1删除) |
|
||||
| create_by | bigint(20) | NULLABLE | 创建人 |
|
||||
| create_time | datetime | NULLABLE | 创建时间 |
|
||||
| update_by | bigint(20) | NULLABLE | 更新人 |
|
||||
| update_time | datetime | NULLABLE | 更新时间 |
|
||||
|
||||
#### 字典相关
|
||||
|
||||
##### 字典数据表 - sys_dict_data
|
||||
|
||||
存储系统使用的字典数据,包含常用的选项列表。
|
||||
|
||||
| 列名 | 数据类型 | 约束 | 说明 |
|
||||
| ----------- | ------------ | --------------------------- | ------------------- |
|
||||
| dict_code | bigint(20) | PRIMARY KEY``AUTO_INCREMENT | 字典编码 |
|
||||
| dict_sort | int(11) | DEFAULT 0 | 字典排序 |
|
||||
| dict_label | varchar(100) | DEFAULT '' | 字典标签 |
|
||||
| dict_value | varchar(100) | DEFAULT '' | 字典键值 |
|
||||
| dict_type | varchar(100) | DEFAULT '' | 字典类型 |
|
||||
| css_class | varchar(100) | NULLABLE | 样式属性(扩展) |
|
||||
| list_class | varchar(100) | NULLABLE | 列表显示样式 |
|
||||
| is_default | char(1) | DEFAULT 'Y' | 是否默认(Y/N) |
|
||||
| status | char(1) | DEFAULT '0' | 状态(0正常 1停用) |
|
||||
| create_by | varchar(64) | DEFAULT '' | 创建者 |
|
||||
| create_time | datetime | NULLABLE | 创建时间 |
|
||||
| update_by | varchar(64) | DEFAULT '' | 更新者 |
|
||||
| update_time | datetime | NULLABLE | 更新时间 |
|
||||
| remark | varchar(500) | NULLABLE | 备注 |
|
||||
|
||||
---
|
||||
|
||||
##### 字典类型表 - sys_dict_type
|
||||
|
||||
存放字典分组及类型定义。
|
||||
|
||||
| 列名 | 数据类型 | 约束 | 说明 |
|
||||
| ----------- | ------------ | --------------------------- | ------------------- |
|
||||
| dict_id | bigint(20) | PRIMARY KEY``AUTO_INCREMENT | 字典主键 |
|
||||
| dict_name | varchar(100) | DEFAULT '' | 字典名称 |
|
||||
| dict_type | varchar(100) | DEFAULT ''``UNIQUE | 字典类型标识 |
|
||||
| status | char(1) | DEFAULT '0' | 状态(0正常 1停用) |
|
||||
| create_by | varchar(64) | DEFAULT '' | 创建者 |
|
||||
| create_time | datetime | NULLABLE | 创建时间 |
|
||||
| update_by | varchar(64) | DEFAULT '' | 更新者 |
|
||||
| update_time | datetime | NULLABLE | 更新时间 |
|
||||
| remark | varchar(500) | NULLABLE | 备注 |
|
||||
|
||||
---
|
||||
|
||||
#### 定时任务相关
|
||||
|
||||
##### 定时任务表 - sys_job
|
||||
|
||||
存储各定时任务的配置信息。
|
||||
|
||||
| 列名 | 数据类型 | 约束 | 说明 |
|
||||
| --------------- | ------------ | --------------------------- | --------------------------------------------- |
|
||||
| job_id | bigint(20) | PRIMARY KEY``AUTO_INCREMENT | 任务ID |
|
||||
| job_name | varchar(64) | NOT NULL, DEFAULT '' | 任务名称 |
|
||||
| job_group | varchar(64) | NOT NULL, DEFAULT 'DEFAULT' | 任务组名称 |
|
||||
| invoke_target | varchar(500) | NOT NULL | 调用目标字符串 |
|
||||
| cron_expression | varchar(255) | DEFAULT '' | CRON 表达式 |
|
||||
| misfire_policy | varchar(20) | DEFAULT '3' | 错误处理策略(1立即执行 2执行一次 3放弃执行) |
|
||||
| concurrent | char(1) | DEFAULT '1' | 是否并发执行(0允许、1禁止) |
|
||||
| status | char(1) | DEFAULT '0' | 任务状态(0正常 1暂停) |
|
||||
| create_by | varchar(64) | NULLABLE | 创建者 |
|
||||
| create_time | datetime | NULLABLE | 创建时间 |
|
||||
| update_by | varchar(64) | NULLABLE | 更新者 |
|
||||
| update_time | datetime | NULLABLE | 更新时间 |
|
||||
| remark | varchar(500) | NULLABLE | 备注信息 |
|
||||
|
||||
记录示例包括 Omada 同步任务及初始化任务。
|
||||
|
||||
##### 定时任务日志表 - sys_job_log
|
||||
|
||||
记录任务执行的日志信息。
|
||||
|
||||
| 列名 | 数据类型 | 约束 | 说明 |
|
||||
| -------------- | ------------- | --------------------------- | ------------------------ |
|
||||
| job_log_id | bigint(20) | PRIMARY KEY``AUTO_INCREMENT | 任务日志ID |
|
||||
| job_name | varchar(64) | NOT NULL | 任务名称 |
|
||||
| job_group | varchar(64) | NOT NULL | 任务组名称 |
|
||||
| invoke_target | varchar(500) | NOT NULL | 调用目标字符串 |
|
||||
| job_message | varchar(500) | 可空 | 日志信息 |
|
||||
| status | char(1) | DEFAULT '0' | 执行状态(0成功、1失败) |
|
||||
| exception_info | varchar(2000) | DEFAULT '' | 异常信息 |
|
||||
| create_time | datetime | NULLABLE | 执行时间 |
|
||||
|
||||
---
|
||||
|
||||
#### 系统访问记录 - sys_logininfor
|
||||
|
||||
记录系统用户的登录访问情况。
|
||||
|
||||
| 列名 | 数据类型 | 约束 | 说明 |
|
||||
| ----------- | ------------ | --------------------------- | ------------------------ |
|
||||
| info_id | bigint(20) | PRIMARY KEY``AUTO_INCREMENT | 访问记录主键 |
|
||||
| user_name | varchar(50) | DEFAULT '' | 用户账号 |
|
||||
| ipaddr | varchar(128) | DEFAULT '' | 登录 IP 地址 |
|
||||
| status | char(1) | DEFAULT '0' | 登录状态(0成功,1失败) |
|
||||
| msg | varchar(255) | DEFAULT '' | 提示信息 |
|
||||
| access_time | datetime | NULLABLE | 访问时间 |
|
||||
|
||||
辅助索引包括 status 及 access_time。
|
||||
|
||||
---
|
||||
|
||||
#### 菜单权限表 - sys_menu
|
||||
|
||||
存储系统菜单信息以及相应的访问权限标识。
|
||||
|
||||
| 列名 | 数据类型 | 约束 | 说明 |
|
||||
| ----------- | ------------ | --------------------------- | ------------------------------------- |
|
||||
| menu_id | bigint(20) | PRIMARY KEY``AUTO_INCREMENT | 菜单 ID |
|
||||
| menu_name | varchar(50) | NOT NULL | 菜单名称,如 'menu.system.management' |
|
||||
| parent_id | bigint(20) | DEFAULT 0 | 父级菜单 ID |
|
||||
| order_num | int(11) | DEFAULT 0 | 显示顺序 |
|
||||
| path | varchar(200) | DEFAULT '' | 路由地址 |
|
||||
| component | varchar(255) | DEFAULT NULL | 组件路径 |
|
||||
| menu_type | char(1) | | 类型(M:目录, C:菜单, F:按钮) |
|
||||
| visible | char(1) | DEFAULT '0' | 菜单显示状态(0显示,1隐藏) |
|
||||
| status | char(1) | DEFAULT '0' | 菜单状态(0正常,1停用) |
|
||||
| perms | varchar(100) | DEFAULT NULL | 权限标识 |
|
||||
| icon | varchar(100) | DEFAULT '#' | 菜单图标 |
|
||||
| create_by | varchar(64) | DEFAULT '' | 创建者 |
|
||||
| create_time | datetime | NULLABLE | 创建时间 |
|
||||
| update_by | varchar(64) | DEFAULT '' | 更新者 |
|
||||
| update_time | datetime | NULLABLE | 更新时间 |
|
||||
| remark | varchar(500) | DEFAULT '' | 备注 |
|
||||
| name | varchar(30) | DEFAULT NULL | 菜单 key,作为前端标识使用 |
|
||||
|
||||
记录插入部分展示了系统管理、工具、账户管理、角色管理、菜单管理、部门管理、岗位管理、字典管理以及多项操作权限的菜单。
|
||||
|
||||
---
|
||||
|
||||
#### 操作日志记录 - sys_oper_log
|
||||
|
||||
记录用户在系统中的各项操作,用于安全审计。
|
||||
|
||||
| 列名 | 数据类型 | 约束 | 说明 |
|
||||
| -------------- | ------------- | --------------------------- | -------------------------------------- |
|
||||
| oper_id | bigint(20) | PRIMARY KEY``AUTO_INCREMENT | 日志主键 |
|
||||
| title | varchar(50) | DEFAULT '' | 模块标题 |
|
||||
| business_type | int(11) | DEFAULT 0 | 业务类型(0其它、1新增、2修改、3删除) |
|
||||
| method | varchar(100) | DEFAULT '' | 方法名称 |
|
||||
| request_method | varchar(10) | DEFAULT '' | 请求方式 |
|
||||
| oper_name | varchar(50) | DEFAULT '' | 操作人员 |
|
||||
| dept_name | varchar(50) | DEFAULT '' | 部门名称 |
|
||||
| oper_url | varchar(255) | DEFAULT '' | 请求 URL |
|
||||
| oper_ip | varchar(128) | DEFAULT '' | IP 地址 |
|
||||
| oper_location | varchar(255) | DEFAULT '' | 操作地点 |
|
||||
| oper_param | varchar(2000) | DEFAULT '' | 请求参数 |
|
||||
| json_result | varchar(2000) | DEFAULT '' | 返回结果 |
|
||||
| status | int(11) | DEFAULT 0 | 操作状态(0正常、1异常) |
|
||||
| error_msg | varchar(2000) | DEFAULT '' | 错误消息 |
|
||||
| oper_time | datetime | NULLABLE | 操作时间 |
|
||||
| cost_time | bigint(20) | DEFAULT 0 | 消耗时间(毫秒) |
|
||||
|
||||
附带建立了 business_type、status 及 oper_time 的索引。
|
||||
|
||||
---
|
||||
|
||||
#### 岗位信息表 - sys_post
|
||||
|
||||
记录系统中定义的岗位信息。
|
||||
|
||||
| 列名 | 数据类型 | 约束 | 说明 |
|
||||
| ----------- | ------------ | --------------------------- | -------------------- |
|
||||
| post_id | bigint(20) | PRIMARY KEY``AUTO_INCREMENT | 岗位 ID |
|
||||
| post_code | varchar(64) | NOT NULL | 岗位编码 |
|
||||
| post_name | varchar(50) | NOT NULL | 岗位名称 |
|
||||
| post_sort | int(11) | NOT NULL | 显示顺序 |
|
||||
| status | char(1) | NOT NULL | 状态(0正常、1停用) |
|
||||
| create_by | varchar(64) | DEFAULT '' | 创建者 |
|
||||
| create_time | datetime | NULLABLE | 创建时间 |
|
||||
| update_by | varchar(64) | DEFAULT '' | 更新者 |
|
||||
| update_time | datetime | NULLABLE | 更新时间 |
|
||||
| remark | varchar(500) | DEFAULT NULL | 备注 |
|
||||
|
||||
示例记录定义了 administrator、manager、hr 及 user 岗位。
|
||||
|
||||
---
|
||||
|
||||
#### 用户信息表 - sys_user
|
||||
|
||||
存储用户账号及相关信息,实现系统登录和管理。
|
||||
|
||||
| 列名 | 数据类型 | 约束 | 说明 |
|
||||
| ----------- | ------------ | --------------------------- | ------------------------------------ |
|
||||
| user_id | bigint(20) | PRIMARY KEY``AUTO_INCREMENT | 用户 ID |
|
||||
| dept_id | bigint(20) | NULLABLE | 所属部门 ID |
|
||||
| user_name | varchar(30) | NOT NULL | 用户账号 |
|
||||
| nick_name | varchar(30) | NOT NULL | 用户昵称 |
|
||||
| user_type | varchar(2) | DEFAULT '00' | 用户类型(例如:00系统用户) |
|
||||
| email | varchar(50) | DEFAULT '' | 用户邮箱 |
|
||||
| phonenumber | varchar(11) | DEFAULT '' | 手机号码 |
|
||||
| sex | char(1) | DEFAULT '0' | 性别(0男、1女、2未知) |
|
||||
| avatar | varchar(100) | DEFAULT '' | 头像地址 |
|
||||
| password | varchar(100) | DEFAULT '' | 密码(通常加密存储,如 bcrypt 结果) |
|
||||
| status | char(1) | DEFAULT '0' | 帐号状态(0正常、1停用) |
|
||||
| del_flag | char(1) | DEFAULT '0' | 删除标志(0存在、2删除) |
|
||||
| login_ip | varchar(128) | DEFAULT '' | 最后登录IP |
|
||||
| login_date | datetime | NULLABLE | 最后登录时间 |
|
||||
| create_by | varchar(64) | DEFAULT '' | 创建者 |
|
||||
| create_time | datetime | NULLABLE | 创建时间 |
|
||||
| update_by | varchar(64) | DEFAULT '' | 更新者 |
|
||||
| update_time | datetime | NULLABLE | 更新时间 |
|
||||
| remark | varchar(500) | DEFAULT NULL | 备注 |
|
||||
|
||||
系统默认记录了超级管理员(super)、管理员(admin)等用户信息。
|
||||
|
||||
---
|
||||
|
||||
#### 用户与岗位关联表 - sys_user_post
|
||||
|
||||
用于关联用户与其所属岗位。
|
||||
|
||||
| 列名 | 数据类型 | 约束 | 说明 |
|
||||
| ------- | ---------- | ---------------------- | ------- |
|
||||
| user_id | bigint(20) | PRIMARY KEY (联合主键) | 用户 ID |
|
||||
| post_id | bigint(20) | PRIMARY KEY (联合主键) | 岗位 ID |
|
||||
|
||||
---
|
||||
|
||||
#### 用户与角色关联表 - sys_user_role
|
||||
|
||||
用于关联用户与分配的角色,实现权限管理。
|
||||
|
||||
| 列名 | 数据类型 | 约束 | 说明 |
|
||||
| ------- | ---------- | ---------------------- | ------- |
|
||||
| user_id | bigint(20) | PRIMARY KEY (联合主键) | 用户 ID |
|
||||
| role_id | bigint(20) | PRIMARY KEY (联合主键) | 角色 ID |
|
||||
|
||||
插入示例中,用户 1 分配了角色 1(Supervisor),用户 2 分配了角色 2(Administrator)。
|
||||
|
||||
---
|
||||
|
||||
#### 角色信息表 - sys_role
|
||||
|
||||
定义系统内各角色及其基本属性。
|
||||
|
||||
| 列名 | 数据类型 | 约束 | 说明 |
|
||||
| ------------------- | ------------ | --------------------------- | -------------------------------------- |
|
||||
| role_id | bigint(20) | PRIMARY KEY``AUTO_INCREMENT | 角色 ID |
|
||||
| role_name | varchar(30) | NOT NULL | 角色名称 |
|
||||
| role_key | varchar(100) | NOT NULL | 角色权限字符串(作为 RBAC 标识) |
|
||||
| role_sort | int(11) | 可空 | 显示顺序 |
|
||||
| data_scope | char(1) | DEFAULT '1' | 数据权限范围(例如全部、自定、部门等) |
|
||||
| menu_check_strictly | tinyint(1) | DEFAULT 1 | 菜单树选择时是否关联显示 |
|
||||
| dept_check_strictly | tinyint(1) | DEFAULT 1 | 部门树选择时是否关联显示 |
|
||||
| status | char(1) | NOT NULL | 角色状态(0正常、1停用) |
|
||||
| del_flag | char(1) | DEFAULT '0' | 删除标志(0存在、2删除) |
|
||||
| create_by | varchar(64) | DEFAULT '' | 创建者 |
|
||||
| create_time | datetime | NULLABLE | 创建时间 |
|
||||
| update_by | varchar(64) | DEFAULT '' | 更新者 |
|
||||
| update_time | datetime | NULLABLE | 更新时间 |
|
||||
| remark | varchar(500) | NULLABLE | 备注 |
|
||||
|
||||
示例中定义了 Supervisor、Administrator 及 User 角色。
|
||||
|
||||
---
|
||||
|
||||
#### 角色与部门关联表 - sys_role_dept
|
||||
|
||||
用于关联角色和部门,控制数据权限。
|
||||
|
||||
| 列名 | 数据类型 | 约束 | 说明 |
|
||||
| ------- | ---------- | ---------------------- | ------- |
|
||||
| role_id | bigint(20) | PRIMARY KEY (联合主键) | 角色 ID |
|
||||
| dept_id | bigint(20) | PRIMARY KEY (联合主键) | 部门 ID |
|
||||
|
||||
---
|
||||
|
||||
#### 角色与菜单关联表 - `sys_role_menu`
|
||||
|
||||
用于关联角色与菜单,实现系统权限的控制。
|
||||
|
||||
| 列名 | 数据类型 | 约束 | 说明 |
|
||||
| ------- | ---------- | ---------------------- | ------- |
|
||||
| role_id | bigint(20) | PRIMARY KEY (联合主键) | 角色 ID |
|
||||
| menu_id | bigint(20) | PRIMARY KEY (联合主键) | 菜单 ID |
|
||||
|
||||
### 4.1.4. 关系与数据流
|
||||
|
||||
- **用户-角色**:通过 `sys_user_role` 表实现,一个用户可以拥有多个角色。
|
||||
- **角色-菜单**:通过 `sys_role_menu` 表关联角色与菜单,实现权限分配。
|
||||
- **用户-岗位**:通过 `sys_user_post` 实现,方便对岗位信息管理。
|
||||
- **角色-部门**:通过 `sys_role_dept` 表实现角色对部门数据的访问控制。
|
||||
- **数据字典**:`sys_dict_type` 定义字典类型,`sys_dict_data` 存储各字典项,系统中各模块均可引用以保证数据一致性。
|
||||
|
||||
## 4.2. 用户平台数据库表设计
|
||||
|
||||
### 4.2.1. 数据库架构
|
||||
|
||||
- **数据库名称**:`wfc_user_db`
|
||||
- **字符集**:utf8mb4
|
||||
- **校对规则**:utf8mb4_general_ci
|
||||
|
||||
### 4.2.2. 用户平台表总览
|
||||
|
||||
---
|
||||
|
||||
| 表名 | 主键 | 备注说明 | 说明 |
|
||||
| ----------------- | ----------- | ------------------- | ------------------------------------------------------- |
|
||||
| u_account | id | 用户平台-账户表 | 存储用户账户信息(余额、套餐、流量、时长等) |
|
||||
| u_account_package | id | 用户平台-账户套餐表 | 存储账户对应的套餐信息,如套餐流量、时长、有效期等 |
|
||||
| u_bill | id | 用户平台-账单表 | 存储账单记录,包括金额、状态、支付信息等 |
|
||||
| u_bill_rule | id | 用户平台-计费规则表 | 存储计费规则,包括价格、流量、单位及状态等 |
|
||||
| u_cdr | id | 用户平台_用户话单表 | 存储用户话单数据,如流量、速率、数据包信息等 |
|
||||
| u_cdr_history | id | 用户平台_话单历史表 | 存储详细话单历史记录,包括时长、流量等 |
|
||||
| u_client | id | 用户平台_用户设备表 | 存储用户设备信息,如设备名称、mac 地址、设备类型等 |
|
||||
| u_device | id | 用户平台_AP设备表 | 存储 AP(无线接入点)设备信息 |
|
||||
| u_order | id | 用户平台-订单表 | 存储订单信息,包括订单编号、订单金额及状态等 |
|
||||
| u_package | id | 用户平台-套餐表 | 存储套餐信息,如套餐价格、流量、时长、设备数等 |
|
||||
| u_payment | id | 用户平台-支付表 | 存储支付相关信息,包括支付名称、类型、网关、证书等 |
|
||||
| u_rate_limit | id | 用户平台-带宽限速表 | 存储限速设置,如下行/上行限速及启用状态 |
|
||||
| u_recharge | recharge_id | 用户平台_用户信息表 | 存储充值信息,关联 u_user 表;外键约束确保用户存在 |
|
||||
| u_user | user_id | 用户平台_用户信息表 | 存储用户基本信息,包括用户名、昵称、邮件、密码等 |
|
||||
| u_kyc | kyc_id | 用户平台_用户信息表 | 存储实名认证信息(KYC),包括真实姓名、证件类型、状态等 |
|
||||
|
||||
### 4.2.2. 表结构设计
|
||||
|
||||
---
|
||||
|
||||
#### 用户账号信息 - u_account
|
||||
|
||||
| 字段名称 | 数据类型 | 是否允许 NULL | 默认值 | 额外属性 | 注释 |
|
||||
| ----------------- | ------------- | ------------- | ------ | -------------- | ----------------------- |
|
||||
| id | bigint(20) | NO | – | AUTO_INCREMENT | 主键 |
|
||||
| user_id | bigint(20) | YES | NULL | – | 用户ID |
|
||||
| balance | decimal(18,4) | YES | NULL | – | 余额 |
|
||||
| balance_used | decimal(18,4) | YES | NULL | – | 余额已使用 |
|
||||
| package_id | bigint(20) | YES | NULL | – | 套餐ID |
|
||||
| start_time | datetime | YES | NULL | – | 开始时间 |
|
||||
| end_time | datetime | YES | NULL | – | 结束时间 |
|
||||
| traffic | bigint(20) | YES | NULL | – | 流量 |
|
||||
| traffic_used | bigint(20) | YES | NULL | – | 流量已使用 |
|
||||
| duration | bigint(20) | YES | NULL | – | 时长 |
|
||||
| duration_used | bigint(20) | YES | NULL | – | 时长已使用 |
|
||||
| client_num | int(11) | YES | NULL | – | 在线设备数 |
|
||||
| client_num_used | int(11) | YES | NULL | – | 在线设备数已使用 |
|
||||
| expired_time | datetime | YES | NULL | – | 失效时间 |
|
||||
| package_name | varchar(64) | YES | NULL | – | 套餐名称 |
|
||||
| period_num | int(11) | YES | NULL | – | 有效期数 |
|
||||
| period_type | tinyint(4) | YES | NULL | – | 有效期类型 |
|
||||
| price | decimal(18,4) | YES | NULL | – | 价格 |
|
||||
| remark | varchar(500) | YES | NULL | – | 备注 |
|
||||
| rate_limit_enable | tinyint(1) | YES | 0 | – | 带宽是否限制 |
|
||||
| traffic_enable | tinyint(1) | YES | 0 | – | 流量是否限制 |
|
||||
| duration_enable | tinyint(1) | YES | 0 | – | 时长是否限制 |
|
||||
| client_num_enable | tinyint(1) | YES | 0 | – | 在线设备数是否限制 |
|
||||
| rate_limit_name | varchar(32) | YES | NULL | – | 限速名称 |
|
||||
| down_limit | bigint(20) | YES | NULL | – | 下行限速 |
|
||||
| down_limit_enable | tinyint(1) | YES | 0 | – | 下行限速启用 |
|
||||
| up_limit | bigint(20) | YES | NULL | – | 上行限速 |
|
||||
| up_limit_enable | tinyint(1) | YES | 0 | – | 上行限速启用 |
|
||||
| del_flag | tinyint(1) | YES | 0 | – | 删除标志(0存在 1删除) |
|
||||
| create_by | bigint(20) | YES | NULL | – | 创建人 |
|
||||
| create_time | datetime | YES | NULL | – | 创建时间 |
|
||||
| update_by | bigint(20) | YES | NULL | – | 更新人 |
|
||||
| update_time | datetime | YES | NULL | – | 更新时间 |
|
||||
|
||||
---
|
||||
|
||||
#### 账号与套餐关系表 - u_account_package
|
||||
|
||||
| 字段名称 | 数据类型 | 是否允许 NULL | 默认值 | 额外属性 | 注释 |
|
||||
| ----------------- | ------------- | ------------- | ------ | -------------- | ----------------------- |
|
||||
| id | bigint(20) | NO | – | AUTO_INCREMENT | 主键 |
|
||||
| account_id | bigint(20) | YES | NULL | – | 账户ID |
|
||||
| package_id | bigint(20) | YES | NULL | – | 套餐ID |
|
||||
| traffic | bigint(20) | YES | NULL | – | 流量 |
|
||||
| duration | bigint(20) | YES | NULL | – | 时长 |
|
||||
| client_num | int(11) | YES | NULL | – | 在线设备数 |
|
||||
| expired_time | datetime | YES | NULL | – | 失效时间 |
|
||||
| package_name | varchar(64) | YES | NULL | – | 套餐名称 |
|
||||
| period_num | int(11) | YES | NULL | – | 有效期数 |
|
||||
| period_type | tinyint(4) | YES | NULL | – | 有效期类型 |
|
||||
| price | decimal(18,4) | YES | NULL | – | 价格 |
|
||||
| remark | varchar(500) | YES | NULL | – | 备注 |
|
||||
| rate_limit_enable | tinyint(1) | YES | 0 | – | 带宽是否限制 |
|
||||
| traffic_enable | tinyint(1) | YES | 0 | – | 流量是否限制 |
|
||||
| duration_enable | tinyint(1) | YES | 0 | – | 时长是否限制 |
|
||||
| client_num_enable | tinyint(1) | YES | 0 | – | 在线设备数是否限制 |
|
||||
| rate_limit_name | varchar(32) | YES | NULL | – | 限速名称 |
|
||||
| down_limit | bigint(20) | YES | NULL | – | 下行限速 |
|
||||
| down_limit_enable | tinyint(1) | YES | 0 | – | 下行限速启用 |
|
||||
| up_limit | bigint(20) | YES | NULL | – | 上行限速 |
|
||||
| up_limit_enable | tinyint(1) | YES | 0 | – | 上行限速启用 |
|
||||
| del_flag | tinyint(1) | YES | 0 | – | 删除标志(0存在 1删除) |
|
||||
| create_by | bigint(20) | YES | NULL | – | 创建人 |
|
||||
| create_time | datetime | YES | NULL | – | 创建时间 |
|
||||
| update_by | bigint(20) | YES | NULL | – | 更新人 |
|
||||
| update_time | datetime | YES | NULL | – | 更新时间 |
|
||||
|
||||
---
|
||||
|
||||
#### 账单表 - u_bill
|
||||
|
||||
| 字段名称 | 数据类型 | 是否允许 NULL | 默认值 | 额外属性 | 注释 |
|
||||
| -------------- | ------------- | ------------- | ------ | -------------- | ----------------------- |
|
||||
| id | bigint(20) | NO | – | AUTO_INCREMENT | 主键 |
|
||||
| user_id | bigint(20) | YES | NULL | – | 用户ID |
|
||||
| cdr_history_id | bigint(20) | YES | NULL | – | 话单记录ID |
|
||||
| type | tinyint(4) | YES | NULL | – | 类型 |
|
||||
| amount | decimal(18,4) | YES | NULL | – | 金额 |
|
||||
| status | tinyint(4) | YES | NULL | – | 状态 |
|
||||
| del_flag | tinyint(1) | YES | 0 | – | 删除标志(0存在 1删除) |
|
||||
| create_by | bigint(20) | YES | NULL | – | 创建人 |
|
||||
| create_time | datetime | YES | NULL | – | 创建时间 |
|
||||
| update_by | bigint(20) | YES | NULL | – | 更新人 |
|
||||
| update_time | datetime | YES | NULL | – | 更新时间 |
|
||||
|
||||
---
|
||||
|
||||
#### 计费规则表 - u_bill_rule
|
||||
|
||||
| 字段名称 | 数据类型 | 是否允许 NULL | 默认值 | 额外属性 | 注释 |
|
||||
| ----------- | ------------- | ------------- | ------ | -------------- | ----------------------- |
|
||||
| id | bigint(20) | NO | – | AUTO_INCREMENT | 主键 |
|
||||
| price | decimal(18,4) | YES | NULL | – | 价格 |
|
||||
| traffic | bigint(20) | YES | NULL | – | 流量 |
|
||||
| unit | tinyint(4) | YES | NULL | – | 单位 |
|
||||
| enable | tinyint(1) | YES | NULL | – | 是否启用 |
|
||||
| del_flag | tinyint(1) | YES | 0 | – | 删除标志(0存在 1删除) |
|
||||
| create_by | bigint(20) | YES | NULL | – | 创建人 |
|
||||
| create_time | datetime | YES | NULL | – | 创建时间 |
|
||||
| update_by | bigint(20) | YES | NULL | – | 更新人 |
|
||||
| update_time | datetime | YES | NULL | – | 更新时间 |
|
||||
|
||||
---
|
||||
|
||||
#### 话单表 - u_cdr
|
||||
|
||||
| 字段名称 | 数据类型 | 是否允许 NULL | 默认值 | 额外属性 | 注释 |
|
||||
| --------------------- | ----------- | ------------- | ------ | -------------- | --------------------------------- |
|
||||
| id | bigint(20) | NO | – | AUTO_INCREMENT | CDR ID |
|
||||
| user_id | bigint(20) | YES | NULL | – | User ID link to u_user |
|
||||
| client_id | bigint(20) | YES | NULL | – | Client ID |
|
||||
| device_id | bigint(20) | YES | NULL | – | Device ID |
|
||||
| ssid | varchar(64) | YES | NULL | – | Wireless SSID name |
|
||||
| rx_rate | bigint(20) | YES | NULL | – | rx rate |
|
||||
| tx_rate | bigint(20) | YES | NULL | – | tx rate |
|
||||
| down_packet | bigint(20) | YES | NULL | – | Number of downstream packets |
|
||||
| up_packet | bigint(20) | YES | NULL | – | Number of upstream packets |
|
||||
| traffic_down | bigint(20) | YES | NULL | – | Downstream traffic (Byte) |
|
||||
| traffic_up | bigint(20) | YES | NULL | – | Upstream traffic (Byte) |
|
||||
| rate_limit_profile_id | varchar(16) | YES | NULL | – | Rate limit profile ID |
|
||||
| up_time | bigint(20) | YES | NULL | – | Up time (unit: s) |
|
||||
| last_seen_time | bigint(20) | YES | NULL | – | Last found time, timestamp (ms) |
|
||||
| activity | bigint(20) | YES | NULL | – | Activity download speed (Bytes/s) |
|
||||
| del_flag | char(1) | YES | '0' | – | delete flag |
|
||||
| create_by | bigint(20) | YES | NULL | – | creater |
|
||||
| create_time | datetime | YES | NULL | – | create time |
|
||||
| update_by | bigint(20) | YES | NULL | – | updater |
|
||||
| update_time | datetime | YES | NULL | – | update time |
|
||||
|
||||
---
|
||||
|
||||
#### 历史话单表 - u_cdr_history
|
||||
|
||||
| 字段名称 | 数据类型 | 是否允许 NULL | 默认值 | 额外属性 | 注释 |
|
||||
| ------------ | ---------- | ------------- | ------ | -------------- | ------------------------- |
|
||||
| id | bigint(20) | NO | – | AUTO_INCREMENT | CDR Detail ID |
|
||||
| cdr_id | bigint(20) | YES | NULL | – | CDR ID |
|
||||
| traffic_down | bigint(20) | YES | NULL | – | Downstream traffic (Byte) |
|
||||
| traffic_up | bigint(20) | YES | NULL | – | Upstream traffic (Byte) |
|
||||
| start_time | bigint(20) | YES | NULL | – | Start time |
|
||||
| end_time | bigint(20) | YES | NULL | – | End time |
|
||||
| duration | bigint(20) | YES | NULL | – | Duration(s) |
|
||||
| del_flag | char(1) | YES | '0' | – | delete flag |
|
||||
| create_by | bigint(20) | YES | NULL | – | creater |
|
||||
| create_time | datetime | YES | NULL | – | create time |
|
||||
| update_by | bigint(20) | YES | NULL | – | updater |
|
||||
| update_time | datetime | YES | NULL | – | update time |
|
||||
|
||||
---
|
||||
|
||||
#### 终端信息表 - u_client
|
||||
|
||||
| 字段名称 | 数据类型 | 是否允许 NULL | 默认值 | 额外属性 | 注释 |
|
||||
| ------------------ | ----------- | ------------- | ------ | -------------- | ---------------------- |
|
||||
| id | bigint(20) | NO | – | AUTO_INCREMENT | Client ID |
|
||||
| user_id | bigint(20) | YES | NULL | – | User ID link to u_user |
|
||||
| site_id | varchar(64) | YES | NULL | – | Site ID |
|
||||
| client_name | varchar(64) | YES | NULL | – | Client Name |
|
||||
| client_device_type | varchar(16) | YES | NULL | – | Client device type |
|
||||
| client_mac | varchar(32) | YES | NULL | – | Client mac address |
|
||||
| del_flag | char(1) | YES | '0' | – | delete flag |
|
||||
| create_by | bigint(20) | YES | NULL | – | creater |
|
||||
| create_time | datetime | YES | NULL | – | create time |
|
||||
| update_by | bigint(20) | YES | NULL | – | updater |
|
||||
| update_time | datetime | YES | NULL | – | update time |
|
||||
|
||||
---
|
||||
|
||||
#### 设备表 - u_device
|
||||
|
||||
| 字段名称 | 数据类型 | 是否允许 NULL | 默认值 | 额外属性 | 注释 |
|
||||
| ------------ | ----------- | ------------- | ------ | -------------- | ---------------------- |
|
||||
| id | bigint(20) | NO | – | AUTO_INCREMENT | Device ID |
|
||||
| user_id | bigint(20) | YES | NULL | – | User ID link to u_user |
|
||||
| device_name | varchar(64) | YES | NULL | – | Device Name |
|
||||
| device_ip | varchar(16) | YES | NULL | – | Device ip |
|
||||
| device_mac | varchar(32) | YES | NULL | – | Device mac |
|
||||
| device_model | varchar(32) | YES | NULL | – | Device model |
|
||||
| del_flag | char(1) | YES | '0' | – | delete flag |
|
||||
| create_by | bigint(20) | YES | NULL | – | creater |
|
||||
| create_time | datetime | YES | NULL | – | create time |
|
||||
| update_by | bigint(20) | YES | NULL | – | updater |
|
||||
| update_time | datetime | YES | NULL | – | update time |
|
||||
|
||||
---
|
||||
|
||||
#### 订单表 - u_order
|
||||
|
||||
| 字段名称 | 数据类型 | 是否允许 NULL | 默认值 | 额外属性 | 注释 |
|
||||
| ------------ | ------------- | ------------- | ------ | -------------- | --------------------------------- |
|
||||
| id | bigint(20) | NO | – | AUTO_INCREMENT | 主键 |
|
||||
| user_id | bigint(20) | YES | NULL | – | 用户ID |
|
||||
| package_id | bigint(20) | YES | NULL | – | 套餐ID |
|
||||
| payment_id | bigint(20) | YES | NULL | – | 支付ID |
|
||||
| order_no | varchar(64) | YES | NULL | – | 订单编号 |
|
||||
| type | tinyint(4) | YES | NULL | – | 订单类型(0套餐 1充值) |
|
||||
| order_amount | decimal(18,4) | YES | NULL | – | 订单金额 |
|
||||
| status | tinyint(4) | YES | NULL | – | 订单状态(0待支付 1已支付 2已取消) |
|
||||
| del_flag | tinyint(1) | YES | 0 | – | 删除标志(0存在 1删除) |
|
||||
| create_by | bigint(20) | YES | NULL | – | 创建人 |
|
||||
| create_time | datetime | YES | NULL | – | 创建时间 |
|
||||
| update_by | bigint(20) | YES | NULL | – | 更新人 |
|
||||
| update_time | datetime | YES | NULL | – | 更新时间 |
|
||||
|
||||
---
|
||||
|
||||
#### 套餐表 - u_package
|
||||
|
||||
| 字段名称 | 数据类型 | 是否允许 NULL | 默认值 | 额外属性 | 注释 |
|
||||
| ----------------- | ------------- | ------------- | ------ | -------------- | ----------------------- |
|
||||
| id | bigint(20) | NO | – | AUTO_INCREMENT | 主键 |
|
||||
| rate_limit_id | bigint(20) | YES | NULL | – | 带宽限速ID |
|
||||
| package_name | varchar(64) | YES | NULL | – | 套餐名称 |
|
||||
| period_num | int(11) | YES | NULL | – | 有效期数 |
|
||||
| period_type | tinyint(4) | YES | NULL | – | 有效期类型 |
|
||||
| price | decimal(18,4) | YES | NULL | – | 价格 |
|
||||
| traffic | bigint(20) | YES | NULL | – | 流量 |
|
||||
| duration | bigint(20) | YES | NULL | – | 时长 |
|
||||
| client_num | int(11) | YES | NULL | – | 在线设备数 |
|
||||
| remark | varchar(500) | YES | NULL | – | 备注 |
|
||||
| rate_limit_enable | tinyint(1) | YES | 0 | – | 带宽是否限制 |
|
||||
| traffic_enable | tinyint(1) | YES | 0 | – | 流量是否限制 |
|
||||
| duration_enable | tinyint(1) | YES | 0 | – | 时长是否限制 |
|
||||
| client_num_enable | tinyint(1) | YES | 0 | – | 在线设备数是否限制 |
|
||||
| package_enable | tinyint(1) | YES | 0 | – | 套餐是否启用 |
|
||||
| del_flag | tinyint(1) | YES | 0 | – | 删除标志(0存在 1删除) |
|
||||
| create_by | bigint(20) | YES | NULL | – | 创建人 |
|
||||
| create_time | datetime | YES | NULL | – | 创建时间 |
|
||||
| update_by | bigint(20) | YES | NULL | – | 更新人 |
|
||||
| update_time | datetime | YES | NULL | – | 更新时间 |
|
||||
|
||||
---
|
||||
|
||||
#### 支付表 - u_payment
|
||||
|
||||
| 字段名称 | 数据类型 | 是否允许 NULL | 默认值 | 额外属性 | 注释 |
|
||||
| -------------- | ------------ | ------------- | ------ | -------------- | ----------------------------- |
|
||||
| id | bigint(20) | NO | – | AUTO_INCREMENT | 主键 |
|
||||
| name | varchar(32) | YES | NULL | – | 支付名称 |
|
||||
| type | tinyint(4) | YES | NULL | – | 类型(0支付宝 1微信 2信用卡) |
|
||||
| appId | varchar(32) | YES | NULL | – | 应用编号 |
|
||||
| server_url | varchar(32) | YES | NULL | – | 支付网关 |
|
||||
| domain | varchar(32) | YES | NULL | – | 外网访问项目的域名 |
|
||||
| private_key | varchar(128) | YES | NULL | – | 应用私钥 |
|
||||
| public_key | varchar(128) | YES | NULL | – | 应用公钥 |
|
||||
| app_cert_path | varchar(64) | YES | NULL | – | 应用公钥证书 |
|
||||
| cert_path | varchar(64) | YES | NULL | – | 公钥证书 |
|
||||
| root_cert_path | varchar(64) | YES | NULL | – | 根证书 |
|
||||
| enable | tinyint(1) | YES | NULL | – | 是否启用 |
|
||||
| del_flag | tinyint(1) | YES | 0 | – | 删除标志(0存在 1删除) |
|
||||
| create_by | bigint(20) | YES | NULL | – | 创建人 |
|
||||
| create_time | datetime | YES | NULL | – | 创建时间 |
|
||||
| update_by | bigint(20) | YES | NULL | – | 更新人 |
|
||||
| update_time | datetime | YES | NULL | – | 更新时间 |
|
||||
|
||||
---
|
||||
|
||||
#### 限速表 - u_rate_limit
|
||||
|
||||
| 字段名称 | 数据类型 | 是否允许 NULL | 默认值 | 额外属性 | 注释 |
|
||||
| ----------------- | ----------- | ------------- | ------ | -------------- | ----------------------- |
|
||||
| id | bigint(20) | NO | – | AUTO_INCREMENT | 主键 |
|
||||
| rate_limit_name | varchar(32) | YES | NULL | – | 限速名称 |
|
||||
| down_limit | bigint(20) | YES | NULL | – | 下行限速 |
|
||||
| down_limit_enable | tinyint(1) | YES | 0 | – | 下行限速启用 |
|
||||
| up_limit | bigint(20) | YES | NULL | – | 上行限速 |
|
||||
| up_limit_enable | tinyint(1) | YES | 0 | – | 上行限速启用 |
|
||||
| del_flag | tinyint(1) | YES | 0 | – | 删除标志(0存在 1删除) |
|
||||
| create_by | bigint(20) | YES | | | |
|
||||
|
||||
---
|
||||
|
||||
#### 充值表 - u_recharge
|
||||
|
||||
| 字段名称 | 数据类型 | 允许 NULL | 默认值 | 自增 | 注释 |
|
||||
| ----------- | --------------------- | --------- | -------- | -------------- | ---------------------- |
|
||||
| recharge_id | bigint(20) | NO | — | AUTO_INCREMENT | Recharge ID |
|
||||
| user_id | bigint(20) | YES | NULL | | User ID link to u_user |
|
||||
| fee | double | YES | NULL | | — |
|
||||
| status | enum('unpaid','paid') | YES | 'unpaid' | | — |
|
||||
| create_by | varchar(32) | YES | '' | | create name |
|
||||
| create_time | datetime | YES | NULL | | create time |
|
||||
|
||||
---
|
||||
|
||||
#### 用户信息表 - u_user
|
||||
|
||||
| 字段名称 | 数据类型 | 允许 NULL | 默认值 | 自增 | 注释 |
|
||||
| ----------- | ------------ | --------- | ------ | -------------- | ------------------------------- |
|
||||
| user_id | bigint(20) | NO | — | AUTO_INCREMENT | 用户ID |
|
||||
| dept_id | bigint(20) | YES | NULL | | 部门ID |
|
||||
| user_name | varchar(30) | NO | — | | 用户账号 |
|
||||
| nick_name | varchar(30) | NO | — | | 用户昵称 |
|
||||
| full_name | varchar(64) | YES | NULL | | 用户姓名 |
|
||||
| user_type | varchar(2) | YES | '00' | | 用户类型(00系统用户) |
|
||||
| email | varchar(50) | YES | '' | | 用户邮箱 |
|
||||
| phonenumber | varchar(15) | YES | '' | | 手机号码 |
|
||||
| sex | char(1) | YES | '0' | | 用户性别(0男 1女 2未知) |
|
||||
| avatar | varchar(100) | YES | '' | | 头像地址 |
|
||||
| password | varchar(100) | YES | '' | | 密码 |
|
||||
| age | int(11) | YES | NULL | | 年龄 |
|
||||
| birth_date | date | YES | NULL | | 出生日期 |
|
||||
| address | varchar(255) | YES | NULL | | 地址 |
|
||||
| status | char(1) | YES | '0' | | 帐号状态(0正常 1停用) |
|
||||
| del_flag | char(1) | YES | '0' | | 删除标志(0代表存在 2代表删除) |
|
||||
| login_ip | varchar(128) | YES | '' | | 最后登录IP |
|
||||
| login_date | datetime | YES | NULL | | 最后登录时间 |
|
||||
| create_by | varchar(64) | YES | '' | | 创建者 |
|
||||
| create_time | datetime | YES | NULL | | 创建时间 |
|
||||
| update_by | varchar(64) | YES | '' | | 更新者 |
|
||||
| update_time | datetime | YES | NULL | | 更新时间 |
|
||||
| remark | varchar(500) | YES | NULL | | 备注 |
|
||||
|
||||
---
|
||||
|
||||
#### KYC表 - u_kyc
|
||||
|
||||
| 字段名称 | 数据类型 | 允许 NULL | 默认值 | 自增 | 注释 |
|
||||
| ---------------- | ------------ | --------- | --------- | -------------- | --------------------------------------------------------------------------------------------------------------- |
|
||||
| kyc_id | bigint(20) | NO | — | AUTO_INCREMENT | ID |
|
||||
| user_id | bigint(20) | YES | NULL | | link to user_id of u_user |
|
||||
| real_name | varchar(64) | YES | NULL | | — |
|
||||
| birth_date | date | YES | NULL | | — |
|
||||
| id_type | enum | YES | NULL | | identify type('DRIVERS_LICENSE','PASSPORT','RESIDENCE_PERMIT','STUDENT_ID','MEDICARE_CARD','BIRTH_CERTIFICATE') |
|
||||
| id_file | varchar(128) | YES | '' | | ID file |
|
||||
| identify_picture | varchar(128) | YES | NULL | | identify picture |
|
||||
| status | enum | YES | 'PENDING' | | KYC Status: 1-VERIFIED/2-UNVERIFIED/3-PENDING/4-REJECTED |
|
||||
| description | varchar(255) | YES | NULL | | — |
|
||||
| del_flag | char(1) | YES | '0' | | 删除标志(0代表存在 2代表删除) |
|
||||
| create_by | varchar(64) | YES | '' | | 创建者 |
|
||||
| create_time | datetime | YES | NULL | | 创建时间 |
|
||||
| update_by | varchar(64) | YES | '' | | 更新者 |
|
||||
| update_time | datetime | YES | NULL | | 更新时间 |
|
||||
|
||||
---
|
||||
|
||||
# 5. 功能模块设计
|
||||
|
||||
## 5.1. 客户平台
|
||||
|
||||
1. **Dashboard**:主控制面板,提供系统概览。
|
||||
2. **设备管理**:
|
||||
|
||||
- **AP设备管理**:管理接入点设备。
|
||||
- **无线网络**:配置和管理无线网络。
|
||||
- **门户**:管理门户设置。
|
||||
- **终端设备管理**:管理连接的终端设备。
|
||||
- **监控/配置/启停/移除/纳管**:对设备进行监控、配置、启动、停止、移除和纳管操作。
|
||||
3. **用户管理**:
|
||||
|
||||
- **用户信息**:查看和管理用户信息。
|
||||
- **KYC状态**:管理用户的KYC(了解你的客户)状态,包括未KYC和已KYC。
|
||||
- **MAC**:管理设备的MAC地址。
|
||||
- **话单管理**:查询通话记录,包括时长和流量。
|
||||
4. **账单管理**:
|
||||
|
||||
- **查询**:查询账单信息。
|
||||
- **KYC审核**:审核用户的KYC信息,包括批准和拒绝操作。
|
||||
5. **计费管理**:
|
||||
|
||||
- **计费规则**:设置计费规则。
|
||||
- **限速设置**:配置网络限速。
|
||||
- **套餐管理**:管理计费套餐,包括查询、增加、修改和删除操作。
|
||||
6. **系统管理**:
|
||||
|
||||
- **账号管理**:管理系统账号。
|
||||
- **角色管理**:管理用户角色。
|
||||
- **菜单管理**:管理系统菜单。
|
||||
- **字典管理**:管理系统字典。
|
||||
- **日志管理**:管理系统日志。
|
||||
- **任务管理**:管理系统任务。
|
||||
|
||||
这些功能模块共同构成了一个全面的管理门户,支持设备、用户、账单和系统的综合管理。
|
||||
|
||||

|
||||
|
||||
## 5.2 用户平台
|
||||
|
||||
1. **账号注册**:
|
||||
|
||||
- **个人信息填写**:包括账户名、姓名、年龄、性别、电话、邮箱、地址等信息。
|
||||
- **协议声明和签署**:用户需同意相关协议。
|
||||
- **获取验证码**:通过邮箱获取验证码进行验证。
|
||||
2. **登录**:
|
||||
|
||||
- **忘记密码**:提供找回密码功能,通过邮箱重置密码。
|
||||
3. **用户平台**:
|
||||
|
||||
- **主页/仪表盘**:用户主界面,提供系统概览。
|
||||
- **套餐购买**:提供套餐购买功能,支持多种支付方式,包括支付宝和微信支付。
|
||||
- **余额充值**:提供余额充值功能,支持多种支付方式,包括支付宝和微信支付。
|
||||
4. **终端设备**:
|
||||
|
||||
- **当前设备**:查询当前连接的设备。
|
||||
- **历史设备**:查询历史连接的设备。
|
||||
5. **充值服务**:
|
||||
|
||||
- **余额充值**:提供余额充值功能。
|
||||
- **套餐办理**:办理新的套餐。
|
||||
6. **账单**:
|
||||
|
||||
- **充值记录**:查询充值记录。
|
||||
- **上网记录**:查询上网记录。
|
||||
- **套餐记录**:查询套餐记录。
|
||||
7. **个人信息**:
|
||||
|
||||
- **修改信息**:修改个人信息。
|
||||
- **修改密码**:修改账户密码。
|
||||
- **KYC认证**:进行KYC认证,需人工审核。
|
||||
|
||||
这些功能模块共同构成了一个全面的用户平台,支持用户注册、登录、套餐购买、设备管理、充值服务、账单查询和个人信息管理等功能。
|
||||

|
||||
|
||||
# 6. 计费和套餐设计
|
||||
|
||||
1. **计算周期**:
|
||||
|
||||
- 支持小时、天、月、年等不同的计算周期。
|
||||
2. **时间限制**:
|
||||
|
||||
- 时段限制:支持小时、天或不限。
|
||||
- 计算差值:根据时间限制计算差值。
|
||||
3. **流量限制**:
|
||||
|
||||
- 支持设置不同的流量限制(流量1、流量2等)或不限。
|
||||
4. **设备数据限制**:
|
||||
|
||||
- 支持设置不同的设备数量限制(数量1、数量2等)或不限。
|
||||
5. **带宽限制**:
|
||||
|
||||
- 支持设置不同的带宽限制(带宽1、带宽2等)或不限。
|
||||
6. **计算规则**:
|
||||
|
||||
- **计时**:支持按秒、分钟、小时、天或不限进行计时。
|
||||
- **计算类型**:当前仅支持预付费,单位可以是KB、MB等。
|
||||
- **等头流量处理**:支持向上取整或四舍五入。
|
||||
- **价格**:支持按天或月设置价格周期。
|
||||
7. **封闭设置**:
|
||||
|
||||
- 支持设置封闭金额和期初限制。
|
||||
8. **规则设置**:
|
||||
|
||||
- 当前仅支持单一规则(规则1),不支持多种规则选择。
|
||||
9. **备注**:
|
||||
|
||||
- 当前仅支持预付费模式。
|
||||
- 标注“NA”的选项当前不支持。
|
||||
|
||||
计费套餐和计费规则共同构成了一个灵活的计费套餐和规则配置系统,支持根据时间、流量、设备和带宽等不同维度进行计费规则的定制。
|
||||

|
||||
@@ -1,996 +0,0 @@
|
||||
**修订记录**
|
||||
|
||||
| 修订日期 | 版本号 | 修订内容 | 修订人 | 备注 |
|
||||
| ---------- | ------ | --------------------------- | ------------------ | ---- |
|
||||
| 2024/11/13 | V1.0 | 初稿 | 张树忠/李昌/蔡育超 | |
|
||||
| 2024/11/13 | V1.1 | 完善架构设计和描述 | 张树忠 | |
|
||||
| 2024/11/30 | V1.2 | 增加计费和套餐设计 | 张树忠 | |
|
||||
| 2025/02/17 | V1.3 | 架构修改,去掉多余微服务 | 张树忠 | |
|
||||
| 2025/02/24 | V1.4 | 增加数据库表设计,业务流程图 | 张树忠 | |
|
||||
|
||||
|
||||
---
|
||||
|
||||
# **WANFi软件系统设计文档**
|
||||
|
||||
# 1. 需求分析
|
||||
|
||||
WANFi控制平台用于提供给运营商用于AP设备的管理监控,并对终端用户进行管理和计费管理。具体的业务需求概括如下:
|
||||
|
||||
## 1.1. 使用对象定义
|
||||
|
||||
> a) "客户"指购买AP设备的B端公司或组织,包含有多个管理和运维人员
|
||||
>
|
||||
> b) "用户"指使用改B端提供的的WiFi服务的C端用户,一个用户只有一个账号,一个账号可以使用多个终端设备
|
||||
|
||||
## 1.2. 平台需求定义
|
||||
|
||||
> a) 客户平台:为B端客户提供的控制和费用管理界面,用于AP的远程管理,配置,运行检测(根据API 文档逐一实现 Omada平台上的功能),管理用户数据、设备信息和计费信息
|
||||
|
||||
> b) 用户平台:为C端客户提供的个人信息管理:用于C端用户缴费以及个人信息管理,终端设备管理
|
||||
|
||||
> c) 客户平台包含用户平台的信息,但用户平台无法获取客户平台信息
|
||||
|
||||
## 1.3. 商业模式定义
|
||||
|
||||
> a. 客户服务用户(比如运营商):包含完整的客户平台和用户平台功能
|
||||
|
||||
> b. 客户服务设备(比如农场采购,直接用于农场智能设备,没有用户参与):只需要开发客户平台,以及客户平台中的设备信息管理,无需用户信息管理以及缴费系统
|
||||
|
||||
> c. 二者在开发系统上和数据库结构上尽可能兼容,保证一套系统可以为二者服务
|
||||
|
||||
> d. 费用以设备为维度进行管理,即通过数据库管理每一个设备的流量,使用时长等该需求是指一个用户/账号下的多个设备可以单独计费??)
|
||||
|
||||
> e. 费用以用户为维度进行收费,每个用户会收到一个账单,包含账户下设备数量,使用流量,使用时长等
|
||||
|
||||

|
||||
|
||||
# 2. 系统架构设计
|
||||
|
||||

|
||||
|
||||
## 2.1. 架构说明
|
||||
|
||||
> a) 微服务架构
|
||||
|
||||
> b) B/S模式
|
||||
|
||||
> c) 支持本地和云部署
|
||||
|
||||
## 2.2. 开发运行环境和技术栈
|
||||
|
||||
> a) 操作系统:
|
||||
|
||||
Ubuntu 22.04
|
||||
|
||||
> b) 数据库:
|
||||
|
||||
MySQL 5.7
|
||||
Redis 7.4.2
|
||||
MongoDB 7.0.15 (用于Omada SDN Controller)
|
||||
ElasticsSearch 7.1 用于大数据文本的查询 (暂未使用)
|
||||
|
||||
> c) 后端开发语言:
|
||||
|
||||
Java 1.8
|
||||
SprintgBoot 2.7
|
||||
SpringCloud 2021.0.8
|
||||
SpringCloudAlibaba 2021.0.5.0
|
||||
|
||||
> d) 前端开发语言:
|
||||
|
||||
HTML+CSS,
|
||||
Vue.js 3.4.27
|
||||
AntD 4.2.2
|
||||
|
||||
# 3. 业务流程
|
||||
|
||||
## 3.1. 用户登录注册
|
||||
|
||||
* 用户注册,需填写个人信息,邮箱,手机号,实名认证等
|
||||
* 用户连接WANFi时,通过网页进行登录
|
||||
* 登陆后,后端API获取当前连接设备的MAC地址,如果该设备未被绑定到数据库中,则由后端API将当前设备绑定到数据库中
|
||||
|
||||

|
||||
|
||||
## 3.2. 终端设备访问控制
|
||||
|
||||
* 终端设备连接AP热点,门户拦截
|
||||
* 用户登录,判断是否充值有效套餐或者余额是否为0
|
||||
* 如果存在套餐流量不为0或者余额部位0,则授权终端设备Internet连接准入
|
||||
* 用户平台定时监测终端设备上网流量并实时计算套餐流量或余额
|
||||
* 如果套餐流量为0且余额为0,则去授权终端设备Internet接入权限
|
||||
|
||||

|
||||
|
||||
# 4. 数据库设计
|
||||
|
||||
## 4.1. 客户数据库表设计
|
||||
|
||||
系统采用 MySQL 数据库,字符集为 utf8mb4,主要涉及系统配置、部门、设备、数据字典、定时任务、日志、菜单、角色以及用户管理等模块。
|
||||
|
||||
### 4.1.1. 数据库架构
|
||||
|
||||
- **数据库名称**:`wfc_system_db`
|
||||
- **字符集**:utf8mb4
|
||||
- **校对规则**:utf8mb4_general_ci
|
||||
|
||||
### 4.1.2. 客户平台表总览
|
||||
|
||||
| 表名 | 主键 | 备注说明 | 说明 |
|
||||
| -------------- | ---------------- | ------------------ | ------------------------ |
|
||||
| sys_config | config_id | 参数配置表 | 存储系统参数配置信息 |
|
||||
| sys_dept | dept_id | 部门表 | 存储部门信息 |
|
||||
| sys_device | id | 客户平台-设备表 | 存储设备信息 |
|
||||
| sys_dict_data | dict_code | 字典数据表 | 存储字典数据 |
|
||||
| sys_dict_type | dict_id | 字典类型表 | 存储字典类型 |
|
||||
| sys_job | job_id | 定时任务调度表 | 存储定时任务调度信息 |
|
||||
| sys_job_log | job_log_id | 定时任务调度日志表 | 存储定时任务调度日志信息 |
|
||||
| sys_logininfor | info_id | 系统访问记录 | 存储系统访问记录 |
|
||||
| sys_menu | menu_id | 菜单权限表 | 存储菜单权限信息 |
|
||||
| sys_oper_log | oper_id | 操作日志记录 | 存储操作日志记录 |
|
||||
| sys_post | post_id | 岗位信息表 | 存储岗位信息 |
|
||||
| sys_role | role_id | 角色信息表 | 存储角色信息 |
|
||||
| sys_role_dept | role_id, dept_id | 角色和部门关联表 | 存储角色和部门的关联信息 |
|
||||
| sys_role_menu | role_id, menu_id | 角色和菜单关联表 | 存储角色和菜单的关联信息 |
|
||||
| sys_user | user_id | 用户信息表 | 存储用户信息 |
|
||||
| sys_user_post | user_id, post_id | 用户与岗位关联表 | 存储用户与岗位的关联信息 |
|
||||
| sys_user_role | user_id, role_id | 用户和角色关联表 | 存储用户和角色的关联信息 |
|
||||
|
||||
---
|
||||
|
||||
### 4.1.3 表结构设计
|
||||
|
||||
#### 参数配置表 - sys_config
|
||||
|
||||
用于存储全局系统配置参数。
|
||||
|
||||
| 列名 | 数据类型 | 约束 | 说明 |
|
||||
| ------------ | ------------ | --------------------------- | -------------------------------------- |
|
||||
| config_id | int(11) | PRIMARY KEY``AUTO_INCREMENT | 参数主键 |
|
||||
| config_name | varchar(100) | DEFAULT '' | 参数名称 |
|
||||
| config_key | varchar(100) | DEFAULT '' | 参数键名 |
|
||||
| config_value | varchar(500) | DEFAULT '' | 参数键值 |
|
||||
| config_type | char(1) | DEFAULT 'N' | 系统内置标识(Y表示内置, N表示非内置) |
|
||||
| create_by | varchar(64) | DEFAULT '' | 创建者 |
|
||||
| create_time | datetime | NULLABLE | 创建时间 |
|
||||
| update_by | varchar(64) | DEFAULT '' | 更新者 |
|
||||
| update_time | datetime | NULLABLE | 更新时间 |
|
||||
| remark | varchar(500) | NULLABLE | 备注 |
|
||||
|
||||
---
|
||||
|
||||
#### 部门表 - sys_dept
|
||||
|
||||
存储各部门信息,支持层级结构。
|
||||
|
||||
| 列名 | 数据类型 | 约束 | 说明 |
|
||||
| ----------- | ------------ | --------------------------- | ------------------------ |
|
||||
| dept_id | bigint(20) | PRIMARY KEY``AUTO_INCREMENT | 部门 ID |
|
||||
| parent_id | bigint(20) | DEFAULT 0 | 父部门 ID |
|
||||
| ancestors | varchar(50) | DEFAULT '' | 祖级列表 |
|
||||
| dept_name | varchar(30) | DEFAULT '' | 部门名称 |
|
||||
| order_num | int(11) | DEFAULT 0 | 显示顺序 |
|
||||
| leader | varchar(20) | NULLABLE | 负责人 |
|
||||
| phone | varchar(11) | NULLABLE | 联系电话 |
|
||||
| email | varchar(50) | NULLABLE | 邮箱 |
|
||||
| status | char(1) | DEFAULT '0' | 部门状态(0正常、1停用) |
|
||||
| del_flag | char(1) | DEFAULT '0' | 删除标志(0存在,2删除) |
|
||||
| create_by | varchar(64) | DEFAULT '' | 创建者 |
|
||||
| create_time | datetime | NULLABLE | 创建时间 |
|
||||
| update_by | varchar(64) | DEFAULT '' | 更新者 |
|
||||
| update_time | datetime | NULLABLE | 更新时间 |
|
||||
| remark | varchar(500) | NULLABLE | 备注 |
|
||||
|
||||
---
|
||||
|
||||
#### 系统设备表 - sys_device
|
||||
|
||||
存储客户平台中设备的各项信息。
|
||||
|
||||
| 列名 | 数据类型 | 约束 & 默认值 | 说明 |
|
||||
| ------------------ | ------------ | --------------------------- | ----------------------- |
|
||||
| id | bigint(20) | PRIMARY KEY``AUTO_INCREMENT | 主键 |
|
||||
| site_id | varchar(64) | NULLABLE | 站点 ID |
|
||||
| mac | varchar(64) | NULLABLE | MAC 地址 |
|
||||
| name | varchar(64) | NULLABLE | 设备名称 |
|
||||
| type | varchar(32) | NULLABLE | 类型 |
|
||||
| subtype | varchar(32) | NULLABLE | 子类型 |
|
||||
| device_series_type | varchar(32) | NULLABLE | 产品系列类型 |
|
||||
| model | varchar(64) | NULLABLE | 设备型号 |
|
||||
| ip | varchar(64) | NULLABLE | IP 地址 |
|
||||
| ipv6s | varchar(255) | NULLABLE | IPv6 地址(可能多个) |
|
||||
| uptime | varchar(64) | NULLABLE | 在线时长 |
|
||||
| status | int(11) | NULLABLE | 状态 |
|
||||
| last_seen | bigint(20) | NULLABLE | 最后在线时间 |
|
||||
| cpu_util | int(11) | NULLABLE | CPU 利用率 |
|
||||
| mem_util | int(11) | NULLABLE | 内存利用率 |
|
||||
| sn | varchar(64) | NULLABLE | 序列号 |
|
||||
| license_status | int(11) | NULLABLE | 授权状态 |
|
||||
| tag_name | varchar(64) | NULLABLE | Tag Name |
|
||||
| uplink_device_mac | varchar(64) | NULLABLE | Uplink Device Mac |
|
||||
| uplink_device_name | varchar(64) | NULLABLE | Uplink Device Name |
|
||||
| uplink_device_port | varchar(64) | NULLABLE | Uplink Device Port |
|
||||
| link_speed | int(11) | NULLABLE | Link Speed |
|
||||
| duplex | int(11) | NULLABLE | Duplex |
|
||||
| switch_consistent | tinyint(1) | NULLABLE | Switch Consistent |
|
||||
| public_ip | varchar(64) | NULLABLE | Public IP |
|
||||
| firmware_version | varchar(64) | NULLABLE | Firmware Version |
|
||||
| del_flag | tinyint(1) | NULLABLE | 删除标志(0存在 1删除) |
|
||||
| create_by | bigint(20) | NULLABLE | 创建人 |
|
||||
| create_time | datetime | NULLABLE | 创建时间 |
|
||||
| update_by | bigint(20) | NULLABLE | 更新人 |
|
||||
| update_time | datetime | NULLABLE | 更新时间 |
|
||||
|
||||
#### 字典相关
|
||||
|
||||
##### 字典数据表 - sys_dict_data
|
||||
|
||||
存储系统使用的字典数据,包含常用的选项列表。
|
||||
|
||||
| 列名 | 数据类型 | 约束 | 说明 |
|
||||
| ----------- | ------------ | --------------------------- | ------------------- |
|
||||
| dict_code | bigint(20) | PRIMARY KEY``AUTO_INCREMENT | 字典编码 |
|
||||
| dict_sort | int(11) | DEFAULT 0 | 字典排序 |
|
||||
| dict_label | varchar(100) | DEFAULT '' | 字典标签 |
|
||||
| dict_value | varchar(100) | DEFAULT '' | 字典键值 |
|
||||
| dict_type | varchar(100) | DEFAULT '' | 字典类型 |
|
||||
| css_class | varchar(100) | NULLABLE | 样式属性(扩展) |
|
||||
| list_class | varchar(100) | NULLABLE | 列表显示样式 |
|
||||
| is_default | char(1) | DEFAULT 'Y' | 是否默认(Y/N) |
|
||||
| status | char(1) | DEFAULT '0' | 状态(0正常 1停用) |
|
||||
| create_by | varchar(64) | DEFAULT '' | 创建者 |
|
||||
| create_time | datetime | NULLABLE | 创建时间 |
|
||||
| update_by | varchar(64) | DEFAULT '' | 更新者 |
|
||||
| update_time | datetime | NULLABLE | 更新时间 |
|
||||
| remark | varchar(500) | NULLABLE | 备注 |
|
||||
|
||||
---
|
||||
|
||||
##### 字典类型表 - sys_dict_type
|
||||
|
||||
存放字典分组及类型定义。
|
||||
|
||||
| 列名 | 数据类型 | 约束 | 说明 |
|
||||
| ----------- | ------------ | --------------------------- | ------------------- |
|
||||
| dict_id | bigint(20) | PRIMARY KEY``AUTO_INCREMENT | 字典主键 |
|
||||
| dict_name | varchar(100) | DEFAULT '' | 字典名称 |
|
||||
| dict_type | varchar(100) | DEFAULT ''``UNIQUE | 字典类型标识 |
|
||||
| status | char(1) | DEFAULT '0' | 状态(0正常 1停用) |
|
||||
| create_by | varchar(64) | DEFAULT '' | 创建者 |
|
||||
| create_time | datetime | NULLABLE | 创建时间 |
|
||||
| update_by | varchar(64) | DEFAULT '' | 更新者 |
|
||||
| update_time | datetime | NULLABLE | 更新时间 |
|
||||
| remark | varchar(500) | NULLABLE | 备注 |
|
||||
|
||||
---
|
||||
|
||||
#### 定时任务相关
|
||||
|
||||
##### 定时任务表 - sys_job
|
||||
|
||||
存储各定时任务的配置信息。
|
||||
|
||||
| 列名 | 数据类型 | 约束 | 说明 |
|
||||
| --------------- | ------------ | --------------------------- | --------------------------------------------- |
|
||||
| job_id | bigint(20) | PRIMARY KEY``AUTO_INCREMENT | 任务ID |
|
||||
| job_name | varchar(64) | NOT NULL, DEFAULT '' | 任务名称 |
|
||||
| job_group | varchar(64) | NOT NULL, DEFAULT 'DEFAULT' | 任务组名称 |
|
||||
| invoke_target | varchar(500) | NOT NULL | 调用目标字符串 |
|
||||
| cron_expression | varchar(255) | DEFAULT '' | CRON 表达式 |
|
||||
| misfire_policy | varchar(20) | DEFAULT '3' | 错误处理策略(1立即执行 2执行一次 3放弃执行) |
|
||||
| concurrent | char(1) | DEFAULT '1' | 是否并发执行(0允许、1禁止) |
|
||||
| status | char(1) | DEFAULT '0' | 任务状态(0正常 1暂停) |
|
||||
| create_by | varchar(64) | NULLABLE | 创建者 |
|
||||
| create_time | datetime | NULLABLE | 创建时间 |
|
||||
| update_by | varchar(64) | NULLABLE | 更新者 |
|
||||
| update_time | datetime | NULLABLE | 更新时间 |
|
||||
| remark | varchar(500) | NULLABLE | 备注信息 |
|
||||
|
||||
记录示例包括 Omada 同步任务及初始化任务。
|
||||
|
||||
##### 定时任务日志表 - sys_job_log
|
||||
|
||||
记录任务执行的日志信息。
|
||||
|
||||
| 列名 | 数据类型 | 约束 | 说明 |
|
||||
| -------------- | ------------- | --------------------------- | ------------------------ |
|
||||
| job_log_id | bigint(20) | PRIMARY KEY``AUTO_INCREMENT | 任务日志ID |
|
||||
| job_name | varchar(64) | NOT NULL | 任务名称 |
|
||||
| job_group | varchar(64) | NOT NULL | 任务组名称 |
|
||||
| invoke_target | varchar(500) | NOT NULL | 调用目标字符串 |
|
||||
| job_message | varchar(500) | 可空 | 日志信息 |
|
||||
| status | char(1) | DEFAULT '0' | 执行状态(0成功、1失败) |
|
||||
| exception_info | varchar(2000) | DEFAULT '' | 异常信息 |
|
||||
| create_time | datetime | NULLABLE | 执行时间 |
|
||||
|
||||
---
|
||||
|
||||
#### 系统访问记录 - sys_logininfor
|
||||
|
||||
记录系统用户的登录访问情况。
|
||||
|
||||
| 列名 | 数据类型 | 约束 | 说明 |
|
||||
| ----------- | ------------ | --------------------------- | ------------------------ |
|
||||
| info_id | bigint(20) | PRIMARY KEY``AUTO_INCREMENT | 访问记录主键 |
|
||||
| user_name | varchar(50) | DEFAULT '' | 用户账号 |
|
||||
| ipaddr | varchar(128) | DEFAULT '' | 登录 IP 地址 |
|
||||
| status | char(1) | DEFAULT '0' | 登录状态(0成功,1失败) |
|
||||
| msg | varchar(255) | DEFAULT '' | 提示信息 |
|
||||
| access_time | datetime | NULLABLE | 访问时间 |
|
||||
|
||||
辅助索引包括 status 及 access_time。
|
||||
|
||||
---
|
||||
|
||||
#### 菜单权限表 - sys_menu
|
||||
|
||||
存储系统菜单信息以及相应的访问权限标识。
|
||||
|
||||
| 列名 | 数据类型 | 约束 | 说明 |
|
||||
| ----------- | ------------ | --------------------------- | ------------------------------------- |
|
||||
| menu_id | bigint(20) | PRIMARY KEY``AUTO_INCREMENT | 菜单 ID |
|
||||
| menu_name | varchar(50) | NOT NULL | 菜单名称,如 'menu.system.management' |
|
||||
| parent_id | bigint(20) | DEFAULT 0 | 父级菜单 ID |
|
||||
| order_num | int(11) | DEFAULT 0 | 显示顺序 |
|
||||
| path | varchar(200) | DEFAULT '' | 路由地址 |
|
||||
| component | varchar(255) | DEFAULT NULL | 组件路径 |
|
||||
| menu_type | char(1) | | 类型(M:目录, C:菜单, F:按钮) |
|
||||
| visible | char(1) | DEFAULT '0' | 菜单显示状态(0显示,1隐藏) |
|
||||
| status | char(1) | DEFAULT '0' | 菜单状态(0正常,1停用) |
|
||||
| perms | varchar(100) | DEFAULT NULL | 权限标识 |
|
||||
| icon | varchar(100) | DEFAULT '#' | 菜单图标 |
|
||||
| create_by | varchar(64) | DEFAULT '' | 创建者 |
|
||||
| create_time | datetime | NULLABLE | 创建时间 |
|
||||
| update_by | varchar(64) | DEFAULT '' | 更新者 |
|
||||
| update_time | datetime | NULLABLE | 更新时间 |
|
||||
| remark | varchar(500) | DEFAULT '' | 备注 |
|
||||
| name | varchar(30) | DEFAULT NULL | 菜单 key,作为前端标识使用 |
|
||||
|
||||
记录插入部分展示了系统管理、工具、账户管理、角色管理、菜单管理、部门管理、岗位管理、字典管理以及多项操作权限的菜单。
|
||||
|
||||
---
|
||||
|
||||
#### 操作日志记录 - sys_oper_log
|
||||
|
||||
记录用户在系统中的各项操作,用于安全审计。
|
||||
|
||||
| 列名 | 数据类型 | 约束 | 说明 |
|
||||
| -------------- | ------------- | --------------------------- | -------------------------------------- |
|
||||
| oper_id | bigint(20) | PRIMARY KEY``AUTO_INCREMENT | 日志主键 |
|
||||
| title | varchar(50) | DEFAULT '' | 模块标题 |
|
||||
| business_type | int(11) | DEFAULT 0 | 业务类型(0其它、1新增、2修改、3删除) |
|
||||
| method | varchar(100) | DEFAULT '' | 方法名称 |
|
||||
| request_method | varchar(10) | DEFAULT '' | 请求方式 |
|
||||
| oper_name | varchar(50) | DEFAULT '' | 操作人员 |
|
||||
| dept_name | varchar(50) | DEFAULT '' | 部门名称 |
|
||||
| oper_url | varchar(255) | DEFAULT '' | 请求 URL |
|
||||
| oper_ip | varchar(128) | DEFAULT '' | IP 地址 |
|
||||
| oper_location | varchar(255) | DEFAULT '' | 操作地点 |
|
||||
| oper_param | varchar(2000) | DEFAULT '' | 请求参数 |
|
||||
| json_result | varchar(2000) | DEFAULT '' | 返回结果 |
|
||||
| status | int(11) | DEFAULT 0 | 操作状态(0正常、1异常) |
|
||||
| error_msg | varchar(2000) | DEFAULT '' | 错误消息 |
|
||||
| oper_time | datetime | NULLABLE | 操作时间 |
|
||||
| cost_time | bigint(20) | DEFAULT 0 | 消耗时间(毫秒) |
|
||||
|
||||
附带建立了 business_type、status 及 oper_time 的索引。
|
||||
|
||||
---
|
||||
|
||||
#### 岗位信息表 - sys_post
|
||||
|
||||
记录系统中定义的岗位信息。
|
||||
|
||||
| 列名 | 数据类型 | 约束 | 说明 |
|
||||
| ----------- | ------------ | --------------------------- | -------------------- |
|
||||
| post_id | bigint(20) | PRIMARY KEY``AUTO_INCREMENT | 岗位 ID |
|
||||
| post_code | varchar(64) | NOT NULL | 岗位编码 |
|
||||
| post_name | varchar(50) | NOT NULL | 岗位名称 |
|
||||
| post_sort | int(11) | NOT NULL | 显示顺序 |
|
||||
| status | char(1) | NOT NULL | 状态(0正常、1停用) |
|
||||
| create_by | varchar(64) | DEFAULT '' | 创建者 |
|
||||
| create_time | datetime | NULLABLE | 创建时间 |
|
||||
| update_by | varchar(64) | DEFAULT '' | 更新者 |
|
||||
| update_time | datetime | NULLABLE | 更新时间 |
|
||||
| remark | varchar(500) | DEFAULT NULL | 备注 |
|
||||
|
||||
示例记录定义了 administrator、manager、hr 及 user 岗位。
|
||||
|
||||
---
|
||||
|
||||
#### 用户信息表 - sys_user
|
||||
|
||||
存储用户账号及相关信息,实现系统登录和管理。
|
||||
|
||||
| 列名 | 数据类型 | 约束 | 说明 |
|
||||
| ----------- | ------------ | --------------------------- | ------------------------------------ |
|
||||
| user_id | bigint(20) | PRIMARY KEY``AUTO_INCREMENT | 用户 ID |
|
||||
| dept_id | bigint(20) | NULLABLE | 所属部门 ID |
|
||||
| user_name | varchar(30) | NOT NULL | 用户账号 |
|
||||
| nick_name | varchar(30) | NOT NULL | 用户昵称 |
|
||||
| user_type | varchar(2) | DEFAULT '00' | 用户类型(例如:00系统用户) |
|
||||
| email | varchar(50) | DEFAULT '' | 用户邮箱 |
|
||||
| phonenumber | varchar(11) | DEFAULT '' | 手机号码 |
|
||||
| sex | char(1) | DEFAULT '0' | 性别(0男、1女、2未知) |
|
||||
| avatar | varchar(100) | DEFAULT '' | 头像地址 |
|
||||
| password | varchar(100) | DEFAULT '' | 密码(通常加密存储,如 bcrypt 结果) |
|
||||
| status | char(1) | DEFAULT '0' | 帐号状态(0正常、1停用) |
|
||||
| del_flag | char(1) | DEFAULT '0' | 删除标志(0存在、2删除) |
|
||||
| login_ip | varchar(128) | DEFAULT '' | 最后登录IP |
|
||||
| login_date | datetime | NULLABLE | 最后登录时间 |
|
||||
| create_by | varchar(64) | DEFAULT '' | 创建者 |
|
||||
| create_time | datetime | NULLABLE | 创建时间 |
|
||||
| update_by | varchar(64) | DEFAULT '' | 更新者 |
|
||||
| update_time | datetime | NULLABLE | 更新时间 |
|
||||
| remark | varchar(500) | DEFAULT NULL | 备注 |
|
||||
|
||||
系统默认记录了超级管理员(super)、管理员(admin)等用户信息。
|
||||
|
||||
---
|
||||
|
||||
#### 用户与岗位关联表 - sys_user_post
|
||||
|
||||
用于关联用户与其所属岗位。
|
||||
|
||||
| 列名 | 数据类型 | 约束 | 说明 |
|
||||
| ------- | ---------- | ---------------------- | ------- |
|
||||
| user_id | bigint(20) | PRIMARY KEY (联合主键) | 用户 ID |
|
||||
| post_id | bigint(20) | PRIMARY KEY (联合主键) | 岗位 ID |
|
||||
|
||||
---
|
||||
|
||||
#### 用户与角色关联表 - sys_user_role
|
||||
|
||||
用于关联用户与分配的角色,实现权限管理。
|
||||
|
||||
| 列名 | 数据类型 | 约束 | 说明 |
|
||||
| ------- | ---------- | ---------------------- | ------- |
|
||||
| user_id | bigint(20) | PRIMARY KEY (联合主键) | 用户 ID |
|
||||
| role_id | bigint(20) | PRIMARY KEY (联合主键) | 角色 ID |
|
||||
|
||||
插入示例中,用户 1 分配了角色 1(Supervisor),用户 2 分配了角色 2(Administrator)。
|
||||
|
||||
---
|
||||
|
||||
#### 角色信息表 - sys_role
|
||||
|
||||
定义系统内各角色及其基本属性。
|
||||
|
||||
| 列名 | 数据类型 | 约束 | 说明 |
|
||||
| ------------------- | ------------ | --------------------------- | -------------------------------------- |
|
||||
| role_id | bigint(20) | PRIMARY KEY``AUTO_INCREMENT | 角色 ID |
|
||||
| role_name | varchar(30) | NOT NULL | 角色名称 |
|
||||
| role_key | varchar(100) | NOT NULL | 角色权限字符串(作为 RBAC 标识) |
|
||||
| role_sort | int(11) | 可空 | 显示顺序 |
|
||||
| data_scope | char(1) | DEFAULT '1' | 数据权限范围(例如全部、自定、部门等) |
|
||||
| menu_check_strictly | tinyint(1) | DEFAULT 1 | 菜单树选择时是否关联显示 |
|
||||
| dept_check_strictly | tinyint(1) | DEFAULT 1 | 部门树选择时是否关联显示 |
|
||||
| status | char(1) | NOT NULL | 角色状态(0正常、1停用) |
|
||||
| del_flag | char(1) | DEFAULT '0' | 删除标志(0存在、2删除) |
|
||||
| create_by | varchar(64) | DEFAULT '' | 创建者 |
|
||||
| create_time | datetime | NULLABLE | 创建时间 |
|
||||
| update_by | varchar(64) | DEFAULT '' | 更新者 |
|
||||
| update_time | datetime | NULLABLE | 更新时间 |
|
||||
| remark | varchar(500) | NULLABLE | 备注 |
|
||||
|
||||
示例中定义了 Supervisor、Administrator 及 User 角色。
|
||||
|
||||
---
|
||||
|
||||
#### 角色与部门关联表 - sys_role_dept
|
||||
|
||||
用于关联角色和部门,控制数据权限。
|
||||
|
||||
| 列名 | 数据类型 | 约束 | 说明 |
|
||||
| ------- | ---------- | ---------------------- | ------- |
|
||||
| role_id | bigint(20) | PRIMARY KEY (联合主键) | 角色 ID |
|
||||
| dept_id | bigint(20) | PRIMARY KEY (联合主键) | 部门 ID |
|
||||
|
||||
---
|
||||
|
||||
#### 角色与菜单关联表 - `sys_role_menu`
|
||||
|
||||
用于关联角色与菜单,实现系统权限的控制。
|
||||
|
||||
| 列名 | 数据类型 | 约束 | 说明 |
|
||||
| ------- | ---------- | ---------------------- | ------- |
|
||||
| role_id | bigint(20) | PRIMARY KEY (联合主键) | 角色 ID |
|
||||
| menu_id | bigint(20) | PRIMARY KEY (联合主键) | 菜单 ID |
|
||||
|
||||
### 4.1.4. 关系与数据流
|
||||
|
||||
- **用户-角色**:通过 `sys_user_role` 表实现,一个用户可以拥有多个角色。
|
||||
- **角色-菜单**:通过 `sys_role_menu` 表关联角色与菜单,实现权限分配。
|
||||
- **用户-岗位**:通过 `sys_user_post` 实现,方便对岗位信息管理。
|
||||
- **角色-部门**:通过 `sys_role_dept` 表实现角色对部门数据的访问控制。
|
||||
- **数据字典**:`sys_dict_type` 定义字典类型,`sys_dict_data` 存储各字典项,系统中各模块均可引用以保证数据一致性。
|
||||
|
||||
## 4.2. 用户平台数据库表设计
|
||||
|
||||
### 4.2.1. 数据库架构
|
||||
|
||||
- **数据库名称**:`wfc_user_db`
|
||||
- **字符集**:utf8mb4
|
||||
- **校对规则**:utf8mb4_general_ci
|
||||
|
||||
### 4.2.2. 用户平台表总览
|
||||
|
||||
---
|
||||
|
||||
| 表名 | 主键 | 备注说明 | 说明 |
|
||||
| ----------------- | ----------- | ------------------- | ------------------------------------------------------- |
|
||||
| u_account | id | 用户平台-账户表 | 存储用户账户信息(余额、套餐、流量、时长等) |
|
||||
| u_account_package | id | 用户平台-账户套餐表 | 存储账户对应的套餐信息,如套餐流量、时长、有效期等 |
|
||||
| u_bill | id | 用户平台-账单表 | 存储账单记录,包括金额、状态、支付信息等 |
|
||||
| u_bill_rule | id | 用户平台-计费规则表 | 存储计费规则,包括价格、流量、单位及状态等 |
|
||||
| u_cdr | id | 用户平台_用户话单表 | 存储用户话单数据,如流量、速率、数据包信息等 |
|
||||
| u_cdr_history | id | 用户平台_话单历史表 | 存储详细话单历史记录,包括时长、流量等 |
|
||||
| u_client | id | 用户平台_用户设备表 | 存储用户设备信息,如设备名称、mac 地址、设备类型等 |
|
||||
| u_device | id | 用户平台_AP设备表 | 存储 AP(无线接入点)设备信息 |
|
||||
| u_order | id | 用户平台-订单表 | 存储订单信息,包括订单编号、订单金额及状态等 |
|
||||
| u_package | id | 用户平台-套餐表 | 存储套餐信息,如套餐价格、流量、时长、设备数等 |
|
||||
| u_payment | id | 用户平台-支付表 | 存储支付相关信息,包括支付名称、类型、网关、证书等 |
|
||||
| u_rate_limit | id | 用户平台-带宽限速表 | 存储限速设置,如下行/上行限速及启用状态 |
|
||||
| u_recharge | recharge_id | 用户平台_用户信息表 | 存储充值信息,关联 u_user 表;外键约束确保用户存在 |
|
||||
| u_user | user_id | 用户平台_用户信息表 | 存储用户基本信息,包括用户名、昵称、邮件、密码等 |
|
||||
| u_kyc | kyc_id | 用户平台_用户信息表 | 存储实名认证信息(KYC),包括真实姓名、证件类型、状态等 |
|
||||
|
||||
### 4.2.2. 表结构设计
|
||||
|
||||
---
|
||||
|
||||
#### 用户账号信息 - u_account
|
||||
|
||||
| 字段名称 | 数据类型 | 是否允许 NULL | 默认值 | 额外属性 | 注释 |
|
||||
| ----------------- | ------------- | ------------- | ------ | -------------- | ----------------------- |
|
||||
| id | bigint(20) | NO | – | AUTO_INCREMENT | 主键 |
|
||||
| user_id | bigint(20) | YES | NULL | – | 用户ID |
|
||||
| balance | decimal(18,4) | YES | NULL | – | 余额 |
|
||||
| balance_used | decimal(18,4) | YES | NULL | – | 余额已使用 |
|
||||
| package_id | bigint(20) | YES | NULL | – | 套餐ID |
|
||||
| start_time | datetime | YES | NULL | – | 开始时间 |
|
||||
| end_time | datetime | YES | NULL | – | 结束时间 |
|
||||
| traffic | bigint(20) | YES | NULL | – | 流量 |
|
||||
| traffic_used | bigint(20) | YES | NULL | – | 流量已使用 |
|
||||
| duration | bigint(20) | YES | NULL | – | 时长 |
|
||||
| duration_used | bigint(20) | YES | NULL | – | 时长已使用 |
|
||||
| client_num | int(11) | YES | NULL | – | 在线设备数 |
|
||||
| client_num_used | int(11) | YES | NULL | – | 在线设备数已使用 |
|
||||
| expired_time | datetime | YES | NULL | – | 失效时间 |
|
||||
| package_name | varchar(64) | YES | NULL | – | 套餐名称 |
|
||||
| period_num | int(11) | YES | NULL | – | 有效期数 |
|
||||
| period_type | tinyint(4) | YES | NULL | – | 有效期类型 |
|
||||
| price | decimal(18,4) | YES | NULL | – | 价格 |
|
||||
| remark | varchar(500) | YES | NULL | – | 备注 |
|
||||
| rate_limit_enable | tinyint(1) | YES | 0 | – | 带宽是否限制 |
|
||||
| traffic_enable | tinyint(1) | YES | 0 | – | 流量是否限制 |
|
||||
| duration_enable | tinyint(1) | YES | 0 | – | 时长是否限制 |
|
||||
| client_num_enable | tinyint(1) | YES | 0 | – | 在线设备数是否限制 |
|
||||
| rate_limit_name | varchar(32) | YES | NULL | – | 限速名称 |
|
||||
| down_limit | bigint(20) | YES | NULL | – | 下行限速 |
|
||||
| down_limit_enable | tinyint(1) | YES | 0 | – | 下行限速启用 |
|
||||
| up_limit | bigint(20) | YES | NULL | – | 上行限速 |
|
||||
| up_limit_enable | tinyint(1) | YES | 0 | – | 上行限速启用 |
|
||||
| del_flag | tinyint(1) | YES | 0 | – | 删除标志(0存在 1删除) |
|
||||
| create_by | bigint(20) | YES | NULL | – | 创建人 |
|
||||
| create_time | datetime | YES | NULL | – | 创建时间 |
|
||||
| update_by | bigint(20) | YES | NULL | – | 更新人 |
|
||||
| update_time | datetime | YES | NULL | – | 更新时间 |
|
||||
|
||||
---
|
||||
|
||||
#### 账号与套餐关系表 - u_account_package
|
||||
|
||||
| 字段名称 | 数据类型 | 是否允许 NULL | 默认值 | 额外属性 | 注释 |
|
||||
| ----------------- | ------------- | ------------- | ------ | -------------- | ----------------------- |
|
||||
| id | bigint(20) | NO | – | AUTO_INCREMENT | 主键 |
|
||||
| account_id | bigint(20) | YES | NULL | – | 账户ID |
|
||||
| package_id | bigint(20) | YES | NULL | – | 套餐ID |
|
||||
| traffic | bigint(20) | YES | NULL | – | 流量 |
|
||||
| duration | bigint(20) | YES | NULL | – | 时长 |
|
||||
| client_num | int(11) | YES | NULL | – | 在线设备数 |
|
||||
| expired_time | datetime | YES | NULL | – | 失效时间 |
|
||||
| package_name | varchar(64) | YES | NULL | – | 套餐名称 |
|
||||
| period_num | int(11) | YES | NULL | – | 有效期数 |
|
||||
| period_type | tinyint(4) | YES | NULL | – | 有效期类型 |
|
||||
| price | decimal(18,4) | YES | NULL | – | 价格 |
|
||||
| remark | varchar(500) | YES | NULL | – | 备注 |
|
||||
| rate_limit_enable | tinyint(1) | YES | 0 | – | 带宽是否限制 |
|
||||
| traffic_enable | tinyint(1) | YES | 0 | – | 流量是否限制 |
|
||||
| duration_enable | tinyint(1) | YES | 0 | – | 时长是否限制 |
|
||||
| client_num_enable | tinyint(1) | YES | 0 | – | 在线设备数是否限制 |
|
||||
| rate_limit_name | varchar(32) | YES | NULL | – | 限速名称 |
|
||||
| down_limit | bigint(20) | YES | NULL | – | 下行限速 |
|
||||
| down_limit_enable | tinyint(1) | YES | 0 | – | 下行限速启用 |
|
||||
| up_limit | bigint(20) | YES | NULL | – | 上行限速 |
|
||||
| up_limit_enable | tinyint(1) | YES | 0 | – | 上行限速启用 |
|
||||
| del_flag | tinyint(1) | YES | 0 | – | 删除标志(0存在 1删除) |
|
||||
| create_by | bigint(20) | YES | NULL | – | 创建人 |
|
||||
| create_time | datetime | YES | NULL | – | 创建时间 |
|
||||
| update_by | bigint(20) | YES | NULL | – | 更新人 |
|
||||
| update_time | datetime | YES | NULL | – | 更新时间 |
|
||||
|
||||
---
|
||||
|
||||
#### 账单表 - u_bill
|
||||
|
||||
| 字段名称 | 数据类型 | 是否允许 NULL | 默认值 | 额外属性 | 注释 |
|
||||
| -------------- | ------------- | ------------- | ------ | -------------- | ----------------------- |
|
||||
| id | bigint(20) | NO | – | AUTO_INCREMENT | 主键 |
|
||||
| user_id | bigint(20) | YES | NULL | – | 用户ID |
|
||||
| cdr_history_id | bigint(20) | YES | NULL | – | 话单记录ID |
|
||||
| type | tinyint(4) | YES | NULL | – | 类型 |
|
||||
| amount | decimal(18,4) | YES | NULL | – | 金额 |
|
||||
| status | tinyint(4) | YES | NULL | – | 状态 |
|
||||
| del_flag | tinyint(1) | YES | 0 | – | 删除标志(0存在 1删除) |
|
||||
| create_by | bigint(20) | YES | NULL | – | 创建人 |
|
||||
| create_time | datetime | YES | NULL | – | 创建时间 |
|
||||
| update_by | bigint(20) | YES | NULL | – | 更新人 |
|
||||
| update_time | datetime | YES | NULL | – | 更新时间 |
|
||||
|
||||
---
|
||||
|
||||
#### 计费规则表 - u_bill_rule
|
||||
|
||||
| 字段名称 | 数据类型 | 是否允许 NULL | 默认值 | 额外属性 | 注释 |
|
||||
| ----------- | ------------- | ------------- | ------ | -------------- | ----------------------- |
|
||||
| id | bigint(20) | NO | – | AUTO_INCREMENT | 主键 |
|
||||
| price | decimal(18,4) | YES | NULL | – | 价格 |
|
||||
| traffic | bigint(20) | YES | NULL | – | 流量 |
|
||||
| unit | tinyint(4) | YES | NULL | – | 单位 |
|
||||
| enable | tinyint(1) | YES | NULL | – | 是否启用 |
|
||||
| del_flag | tinyint(1) | YES | 0 | – | 删除标志(0存在 1删除) |
|
||||
| create_by | bigint(20) | YES | NULL | – | 创建人 |
|
||||
| create_time | datetime | YES | NULL | – | 创建时间 |
|
||||
| update_by | bigint(20) | YES | NULL | – | 更新人 |
|
||||
| update_time | datetime | YES | NULL | – | 更新时间 |
|
||||
|
||||
---
|
||||
|
||||
#### 话单表 - u_cdr
|
||||
|
||||
| 字段名称 | 数据类型 | 是否允许 NULL | 默认值 | 额外属性 | 注释 |
|
||||
| --------------------- | ----------- | ------------- | ------ | -------------- | --------------------------------- |
|
||||
| id | bigint(20) | NO | – | AUTO_INCREMENT | CDR ID |
|
||||
| user_id | bigint(20) | YES | NULL | – | User ID link to u_user |
|
||||
| client_id | bigint(20) | YES | NULL | – | Client ID |
|
||||
| device_id | bigint(20) | YES | NULL | – | Device ID |
|
||||
| ssid | varchar(64) | YES | NULL | – | Wireless SSID name |
|
||||
| rx_rate | bigint(20) | YES | NULL | – | rx rate |
|
||||
| tx_rate | bigint(20) | YES | NULL | – | tx rate |
|
||||
| down_packet | bigint(20) | YES | NULL | – | Number of downstream packets |
|
||||
| up_packet | bigint(20) | YES | NULL | – | Number of upstream packets |
|
||||
| traffic_down | bigint(20) | YES | NULL | – | Downstream traffic (Byte) |
|
||||
| traffic_up | bigint(20) | YES | NULL | – | Upstream traffic (Byte) |
|
||||
| rate_limit_profile_id | varchar(16) | YES | NULL | – | Rate limit profile ID |
|
||||
| up_time | bigint(20) | YES | NULL | – | Up time (unit: s) |
|
||||
| last_seen_time | bigint(20) | YES | NULL | – | Last found time, timestamp (ms) |
|
||||
| activity | bigint(20) | YES | NULL | – | Activity download speed (Bytes/s) |
|
||||
| del_flag | char(1) | YES | '0' | – | delete flag |
|
||||
| create_by | bigint(20) | YES | NULL | – | creater |
|
||||
| create_time | datetime | YES | NULL | – | create time |
|
||||
| update_by | bigint(20) | YES | NULL | – | updater |
|
||||
| update_time | datetime | YES | NULL | – | update time |
|
||||
|
||||
---
|
||||
|
||||
#### 历史话单表 - u_cdr_history
|
||||
|
||||
| 字段名称 | 数据类型 | 是否允许 NULL | 默认值 | 额外属性 | 注释 |
|
||||
| ------------ | ---------- | ------------- | ------ | -------------- | ------------------------- |
|
||||
| id | bigint(20) | NO | – | AUTO_INCREMENT | CDR Detail ID |
|
||||
| cdr_id | bigint(20) | YES | NULL | – | CDR ID |
|
||||
| traffic_down | bigint(20) | YES | NULL | – | Downstream traffic (Byte) |
|
||||
| traffic_up | bigint(20) | YES | NULL | – | Upstream traffic (Byte) |
|
||||
| start_time | bigint(20) | YES | NULL | – | Start time |
|
||||
| end_time | bigint(20) | YES | NULL | – | End time |
|
||||
| duration | bigint(20) | YES | NULL | – | Duration(s) |
|
||||
| del_flag | char(1) | YES | '0' | – | delete flag |
|
||||
| create_by | bigint(20) | YES | NULL | – | creater |
|
||||
| create_time | datetime | YES | NULL | – | create time |
|
||||
| update_by | bigint(20) | YES | NULL | – | updater |
|
||||
| update_time | datetime | YES | NULL | – | update time |
|
||||
|
||||
---
|
||||
|
||||
#### 终端信息表 - u_client
|
||||
|
||||
| 字段名称 | 数据类型 | 是否允许 NULL | 默认值 | 额外属性 | 注释 |
|
||||
| ------------------ | ----------- | ------------- | ------ | -------------- | ---------------------- |
|
||||
| id | bigint(20) | NO | – | AUTO_INCREMENT | Client ID |
|
||||
| user_id | bigint(20) | YES | NULL | – | User ID link to u_user |
|
||||
| site_id | varchar(64) | YES | NULL | – | Site ID |
|
||||
| client_name | varchar(64) | YES | NULL | – | Client Name |
|
||||
| client_device_type | varchar(16) | YES | NULL | – | Client device type |
|
||||
| client_mac | varchar(32) | YES | NULL | – | Client mac address |
|
||||
| del_flag | char(1) | YES | '0' | – | delete flag |
|
||||
| create_by | bigint(20) | YES | NULL | – | creater |
|
||||
| create_time | datetime | YES | NULL | – | create time |
|
||||
| update_by | bigint(20) | YES | NULL | – | updater |
|
||||
| update_time | datetime | YES | NULL | – | update time |
|
||||
|
||||
---
|
||||
|
||||
#### 设备表 - u_device
|
||||
|
||||
| 字段名称 | 数据类型 | 是否允许 NULL | 默认值 | 额外属性 | 注释 |
|
||||
| ------------ | ----------- | ------------- | ------ | -------------- | ---------------------- |
|
||||
| id | bigint(20) | NO | – | AUTO_INCREMENT | Device ID |
|
||||
| user_id | bigint(20) | YES | NULL | – | User ID link to u_user |
|
||||
| device_name | varchar(64) | YES | NULL | – | Device Name |
|
||||
| device_ip | varchar(16) | YES | NULL | – | Device ip |
|
||||
| device_mac | varchar(32) | YES | NULL | – | Device mac |
|
||||
| device_model | varchar(32) | YES | NULL | – | Device model |
|
||||
| del_flag | char(1) | YES | '0' | – | delete flag |
|
||||
| create_by | bigint(20) | YES | NULL | – | creater |
|
||||
| create_time | datetime | YES | NULL | – | create time |
|
||||
| update_by | bigint(20) | YES | NULL | – | updater |
|
||||
| update_time | datetime | YES | NULL | – | update time |
|
||||
|
||||
---
|
||||
|
||||
#### 订单表 - u_order
|
||||
|
||||
| 字段名称 | 数据类型 | 是否允许 NULL | 默认值 | 额外属性 | 注释 |
|
||||
| ------------ | ------------- | ------------- | ------ | -------------- | --------------------------------- |
|
||||
| id | bigint(20) | NO | – | AUTO_INCREMENT | 主键 |
|
||||
| user_id | bigint(20) | YES | NULL | – | 用户ID |
|
||||
| package_id | bigint(20) | YES | NULL | – | 套餐ID |
|
||||
| payment_id | bigint(20) | YES | NULL | – | 支付ID |
|
||||
| order_no | varchar(64) | YES | NULL | – | 订单编号 |
|
||||
| type | tinyint(4) | YES | NULL | – | 订单类型(0套餐 1充值) |
|
||||
| order_amount | decimal(18,4) | YES | NULL | – | 订单金额 |
|
||||
| status | tinyint(4) | YES | NULL | – | 订单状态(0待支付 1已支付 2已取消) |
|
||||
| del_flag | tinyint(1) | YES | 0 | – | 删除标志(0存在 1删除) |
|
||||
| create_by | bigint(20) | YES | NULL | – | 创建人 |
|
||||
| create_time | datetime | YES | NULL | – | 创建时间 |
|
||||
| update_by | bigint(20) | YES | NULL | – | 更新人 |
|
||||
| update_time | datetime | YES | NULL | – | 更新时间 |
|
||||
|
||||
---
|
||||
|
||||
#### 套餐表 - u_package
|
||||
|
||||
| 字段名称 | 数据类型 | 是否允许 NULL | 默认值 | 额外属性 | 注释 |
|
||||
| ----------------- | ------------- | ------------- | ------ | -------------- | ----------------------- |
|
||||
| id | bigint(20) | NO | – | AUTO_INCREMENT | 主键 |
|
||||
| rate_limit_id | bigint(20) | YES | NULL | – | 带宽限速ID |
|
||||
| package_name | varchar(64) | YES | NULL | – | 套餐名称 |
|
||||
| period_num | int(11) | YES | NULL | – | 有效期数 |
|
||||
| period_type | tinyint(4) | YES | NULL | – | 有效期类型 |
|
||||
| price | decimal(18,4) | YES | NULL | – | 价格 |
|
||||
| traffic | bigint(20) | YES | NULL | – | 流量 |
|
||||
| duration | bigint(20) | YES | NULL | – | 时长 |
|
||||
| client_num | int(11) | YES | NULL | – | 在线设备数 |
|
||||
| remark | varchar(500) | YES | NULL | – | 备注 |
|
||||
| rate_limit_enable | tinyint(1) | YES | 0 | – | 带宽是否限制 |
|
||||
| traffic_enable | tinyint(1) | YES | 0 | – | 流量是否限制 |
|
||||
| duration_enable | tinyint(1) | YES | 0 | – | 时长是否限制 |
|
||||
| client_num_enable | tinyint(1) | YES | 0 | – | 在线设备数是否限制 |
|
||||
| package_enable | tinyint(1) | YES | 0 | – | 套餐是否启用 |
|
||||
| del_flag | tinyint(1) | YES | 0 | – | 删除标志(0存在 1删除) |
|
||||
| create_by | bigint(20) | YES | NULL | – | 创建人 |
|
||||
| create_time | datetime | YES | NULL | – | 创建时间 |
|
||||
| update_by | bigint(20) | YES | NULL | – | 更新人 |
|
||||
| update_time | datetime | YES | NULL | – | 更新时间 |
|
||||
|
||||
---
|
||||
|
||||
#### 支付表 - u_payment
|
||||
|
||||
| 字段名称 | 数据类型 | 是否允许 NULL | 默认值 | 额外属性 | 注释 |
|
||||
| -------------- | ------------ | ------------- | ------ | -------------- | ----------------------------- |
|
||||
| id | bigint(20) | NO | – | AUTO_INCREMENT | 主键 |
|
||||
| name | varchar(32) | YES | NULL | – | 支付名称 |
|
||||
| type | tinyint(4) | YES | NULL | – | 类型(0支付宝 1微信 2信用卡) |
|
||||
| appId | varchar(32) | YES | NULL | – | 应用编号 |
|
||||
| server_url | varchar(32) | YES | NULL | – | 支付网关 |
|
||||
| domain | varchar(32) | YES | NULL | – | 外网访问项目的域名 |
|
||||
| private_key | varchar(128) | YES | NULL | – | 应用私钥 |
|
||||
| public_key | varchar(128) | YES | NULL | – | 应用公钥 |
|
||||
| app_cert_path | varchar(64) | YES | NULL | – | 应用公钥证书 |
|
||||
| cert_path | varchar(64) | YES | NULL | – | 公钥证书 |
|
||||
| root_cert_path | varchar(64) | YES | NULL | – | 根证书 |
|
||||
| enable | tinyint(1) | YES | NULL | – | 是否启用 |
|
||||
| del_flag | tinyint(1) | YES | 0 | – | 删除标志(0存在 1删除) |
|
||||
| create_by | bigint(20) | YES | NULL | – | 创建人 |
|
||||
| create_time | datetime | YES | NULL | – | 创建时间 |
|
||||
| update_by | bigint(20) | YES | NULL | – | 更新人 |
|
||||
| update_time | datetime | YES | NULL | – | 更新时间 |
|
||||
|
||||
---
|
||||
|
||||
#### 限速表 - u_rate_limit
|
||||
|
||||
| 字段名称 | 数据类型 | 是否允许 NULL | 默认值 | 额外属性 | 注释 |
|
||||
| ----------------- | ----------- | ------------- | ------ | -------------- | ----------------------- |
|
||||
| id | bigint(20) | NO | – | AUTO_INCREMENT | 主键 |
|
||||
| rate_limit_name | varchar(32) | YES | NULL | – | 限速名称 |
|
||||
| down_limit | bigint(20) | YES | NULL | – | 下行限速 |
|
||||
| down_limit_enable | tinyint(1) | YES | 0 | – | 下行限速启用 |
|
||||
| up_limit | bigint(20) | YES | NULL | – | 上行限速 |
|
||||
| up_limit_enable | tinyint(1) | YES | 0 | – | 上行限速启用 |
|
||||
| del_flag | tinyint(1) | YES | 0 | – | 删除标志(0存在 1删除) |
|
||||
| create_by | bigint(20) | YES | | | |
|
||||
|
||||
---
|
||||
|
||||
#### 充值表 - u_recharge
|
||||
|
||||
| 字段名称 | 数据类型 | 允许 NULL | 默认值 | 自增 | 注释 |
|
||||
| ----------- | --------------------- | --------- | -------- | -------------- | ---------------------- |
|
||||
| recharge_id | bigint(20) | NO | — | AUTO_INCREMENT | Recharge ID |
|
||||
| user_id | bigint(20) | YES | NULL | | User ID link to u_user |
|
||||
| fee | double | YES | NULL | | — |
|
||||
| status | enum('unpaid','paid') | YES | 'unpaid' | | — |
|
||||
| create_by | varchar(32) | YES | '' | | create name |
|
||||
| create_time | datetime | YES | NULL | | create time |
|
||||
|
||||
---
|
||||
|
||||
#### 用户信息表 - u_user
|
||||
|
||||
| 字段名称 | 数据类型 | 允许 NULL | 默认值 | 自增 | 注释 |
|
||||
| ----------- | ------------ | --------- | ------ | -------------- | ------------------------------- |
|
||||
| user_id | bigint(20) | NO | — | AUTO_INCREMENT | 用户ID |
|
||||
| dept_id | bigint(20) | YES | NULL | | 部门ID |
|
||||
| user_name | varchar(30) | NO | — | | 用户账号 |
|
||||
| nick_name | varchar(30) | NO | — | | 用户昵称 |
|
||||
| full_name | varchar(64) | YES | NULL | | 用户姓名 |
|
||||
| user_type | varchar(2) | YES | '00' | | 用户类型(00系统用户) |
|
||||
| email | varchar(50) | YES | '' | | 用户邮箱 |
|
||||
| phonenumber | varchar(15) | YES | '' | | 手机号码 |
|
||||
| sex | char(1) | YES | '0' | | 用户性别(0男 1女 2未知) |
|
||||
| avatar | varchar(100) | YES | '' | | 头像地址 |
|
||||
| password | varchar(100) | YES | '' | | 密码 |
|
||||
| age | int(11) | YES | NULL | | 年龄 |
|
||||
| birth_date | date | YES | NULL | | 出生日期 |
|
||||
| address | varchar(255) | YES | NULL | | 地址 |
|
||||
| status | char(1) | YES | '0' | | 帐号状态(0正常 1停用) |
|
||||
| del_flag | char(1) | YES | '0' | | 删除标志(0代表存在 2代表删除) |
|
||||
| login_ip | varchar(128) | YES | '' | | 最后登录IP |
|
||||
| login_date | datetime | YES | NULL | | 最后登录时间 |
|
||||
| create_by | varchar(64) | YES | '' | | 创建者 |
|
||||
| create_time | datetime | YES | NULL | | 创建时间 |
|
||||
| update_by | varchar(64) | YES | '' | | 更新者 |
|
||||
| update_time | datetime | YES | NULL | | 更新时间 |
|
||||
| remark | varchar(500) | YES | NULL | | 备注 |
|
||||
|
||||
---
|
||||
|
||||
#### KYC表 - u_kyc
|
||||
|
||||
| 字段名称 | 数据类型 | 允许 NULL | 默认值 | 自增 | 注释 |
|
||||
| ---------------- | ------------ | --------- | --------- | -------------- | --------------------------------------------------------------------------------------------------------------- |
|
||||
| kyc_id | bigint(20) | NO | — | AUTO_INCREMENT | ID |
|
||||
| user_id | bigint(20) | YES | NULL | | link to user_id of u_user |
|
||||
| real_name | varchar(64) | YES | NULL | | — |
|
||||
| birth_date | date | YES | NULL | | — |
|
||||
| id_type | enum | YES | NULL | | identify type('DRIVERS_LICENSE','PASSPORT','RESIDENCE_PERMIT','STUDENT_ID','MEDICARE_CARD','BIRTH_CERTIFICATE') |
|
||||
| id_file | varchar(128) | YES | '' | | ID file |
|
||||
| identify_picture | varchar(128) | YES | NULL | | identify picture |
|
||||
| status | enum | YES | 'PENDING' | | KYC Status: 1-VERIFIED/2-UNVERIFIED/3-PENDING/4-REJECTED |
|
||||
| description | varchar(255) | YES | NULL | | — |
|
||||
| del_flag | char(1) | YES | '0' | | 删除标志(0代表存在 2代表删除) |
|
||||
| create_by | varchar(64) | YES | '' | | 创建者 |
|
||||
| create_time | datetime | YES | NULL | | 创建时间 |
|
||||
| update_by | varchar(64) | YES | '' | | 更新者 |
|
||||
| update_time | datetime | YES | NULL | | 更新时间 |
|
||||
|
||||
---
|
||||
|
||||
# 5. 功能模块设计
|
||||
|
||||
## 5.1. 客户平台
|
||||
|
||||
1. **Dashboard**:主控制面板,提供系统概览。
|
||||
2. **设备管理**:
|
||||
|
||||
- **AP设备管理**:管理接入点设备。
|
||||
- **无线网络**:配置和管理无线网络。
|
||||
- **门户**:管理门户设置。
|
||||
- **终端设备管理**:管理连接的终端设备。
|
||||
- **监控/配置/启停/移除/纳管**:对设备进行监控、配置、启动、停止、移除和纳管操作。
|
||||
3. **用户管理**:
|
||||
|
||||
- **用户信息**:查看和管理用户信息。
|
||||
- **KYC状态**:管理用户的KYC(了解你的客户)状态,包括未KYC和已KYC。
|
||||
- **MAC**:管理设备的MAC地址。
|
||||
- **话单管理**:查询通话记录,包括时长和流量。
|
||||
4. **账单管理**:
|
||||
|
||||
- **查询**:查询账单信息。
|
||||
- **KYC审核**:审核用户的KYC信息,包括批准和拒绝操作。
|
||||
5. **计费管理**:
|
||||
|
||||
- **计费规则**:设置计费规则。
|
||||
- **限速设置**:配置网络限速。
|
||||
- **套餐管理**:管理计费套餐,包括查询、增加、修改和删除操作。
|
||||
6. **系统管理**:
|
||||
|
||||
- **账号管理**:管理系统账号。
|
||||
- **角色管理**:管理用户角色。
|
||||
- **菜单管理**:管理系统菜单。
|
||||
- **字典管理**:管理系统字典。
|
||||
- **日志管理**:管理系统日志。
|
||||
- **任务管理**:管理系统任务。
|
||||
|
||||
这些功能模块共同构成了一个全面的管理门户,支持设备、用户、账单和系统的综合管理。
|
||||
|
||||

|
||||
|
||||
## 5.2 用户平台
|
||||
|
||||
1. **账号注册**:
|
||||
|
||||
- **个人信息填写**:包括账户名、姓名、年龄、性别、电话、邮箱、地址等信息。
|
||||
- **协议声明和签署**:用户需同意相关协议。
|
||||
- **获取验证码**:通过邮箱获取验证码进行验证。
|
||||
2. **登录**:
|
||||
|
||||
- **忘记密码**:提供找回密码功能,通过邮箱重置密码。
|
||||
3. **用户平台**:
|
||||
|
||||
- **主页/仪表盘**:用户主界面,提供系统概览。
|
||||
- **套餐购买**:提供套餐购买功能,支持多种支付方式,包括支付宝和微信支付。
|
||||
- **余额充值**:提供余额充值功能,支持多种支付方式,包括支付宝和微信支付。
|
||||
4. **终端设备**:
|
||||
|
||||
- **当前设备**:查询当前连接的设备。
|
||||
- **历史设备**:查询历史连接的设备。
|
||||
5. **充值服务**:
|
||||
|
||||
- **余额充值**:提供余额充值功能。
|
||||
- **套餐办理**:办理新的套餐。
|
||||
6. **账单**:
|
||||
|
||||
- **充值记录**:查询充值记录。
|
||||
- **上网记录**:查询上网记录。
|
||||
- **套餐记录**:查询套餐记录。
|
||||
7. **个人信息**:
|
||||
|
||||
- **修改信息**:修改个人信息。
|
||||
- **修改密码**:修改账户密码。
|
||||
- **KYC认证**:进行KYC认证,需人工审核。
|
||||
|
||||
这些功能模块共同构成了一个全面的用户平台,支持用户注册、登录、套餐购买、设备管理、充值服务、账单查询和个人信息管理等功能。
|
||||

|
||||
|
||||
# 6. 计费和套餐设计
|
||||
|
||||
1. **计算周期**:
|
||||
|
||||
- 支持小时、天、月、年等不同的计算周期。
|
||||
2. **时间限制**:
|
||||
|
||||
- 时段限制:支持小时、天或不限。
|
||||
- 计算差值:根据时间限制计算差值。
|
||||
3. **流量限制**:
|
||||
|
||||
- 支持设置不同的流量限制(流量1、流量2等)或不限。
|
||||
4. **设备数据限制**:
|
||||
|
||||
- 支持设置不同的设备数量限制(数量1、数量2等)或不限。
|
||||
5. **带宽限制**:
|
||||
|
||||
- 支持设置不同的带宽限制(带宽1、带宽2等)或不限。
|
||||
6. **计算规则**:
|
||||
|
||||
- **计时**:支持按秒、分钟、小时、天或不限进行计时。
|
||||
- **计算类型**:当前仅支持预付费,单位可以是KB、MB等。
|
||||
- **等头流量处理**:支持向上取整或四舍五入。
|
||||
- **价格**:支持按天或月设置价格周期。
|
||||
7. **封闭设置**:
|
||||
|
||||
- 支持设置封闭金额和期初限制。
|
||||
8. **规则设置**:
|
||||
|
||||
- 当前仅支持单一规则(规则1),不支持多种规则选择。
|
||||
9. **备注**:
|
||||
|
||||
- 当前仅支持预付费模式。
|
||||
- 标注“NA”的选项当前不支持。
|
||||
|
||||
计费套餐和计费规则共同构成了一个灵活的计费套餐和规则配置系统,支持根据时间、流量、设备和带宽等不同维度进行计费规则的定制。
|
||||

|
||||
|
Before Width: | Height: | Size: 265 KiB |
|
Before Width: | Height: | Size: 172 KiB |
|
Before Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 259 KiB |
|
Before Width: | Height: | Size: 177 KiB |
|
Before Width: | Height: | Size: 152 KiB |
|
Before Width: | Height: | Size: 186 KiB |
@@ -1,339 +0,0 @@
|
||||
# WANFi Software Quick Installation Guide
|
||||
|
||||
## Preparation
|
||||
|
||||
* Hardware Requirements
|
||||
|
||||
```text
|
||||
CPU: >= 4 core
|
||||
Memory: >= 16GiB
|
||||
Storage:
|
||||
OS: >= 50GiB
|
||||
/opt/wfc: >= 50GiB # work and database storage
|
||||
/var/lib/docker: >= 50GiB
|
||||
```
|
||||
|
||||
* System Environment
|
||||
|
||||
```text
|
||||
Linux >= Ubuntu 22.04
|
||||
JDK >= 1.8 (Recommended version 1.8) (for Omada SDN Controller)
|
||||
Omada SDN Controller > 5.15.6.7
|
||||
docker >= 24.0.7, build 24.0.7-0ubuntu2~22.04.1
|
||||
docker-compose >= v2.10.0
|
||||
docker-buildx >= 0.14.1
|
||||
```
|
||||
|
||||
* Install docker, docker-compose and buildx plugin
|
||||
|
||||
```sh
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y docker.io
|
||||
|
||||
# Install the docker-compose-v2 plugin
|
||||
sudo apt-get install -y docker-compose-v2
|
||||
sudo ln -s /usr/libexec/docker/cli-plugins/docker-compose /usr/bin/docker-compose
|
||||
|
||||
# Install the docker-buildx plugin
|
||||
sudo apt-get install -y docker-buildx
|
||||
sudo ln -s /usr/libexec/docker/cli-plugins/docker-buildx /usr/bin/docker-buildx
|
||||
```
|
||||
|
||||
* Please confirm that the versions of docker, docker-compose and docker-buildx plugin meet the requirements
|
||||
|
||||
```sh
|
||||
docker -v
|
||||
docker compose version
|
||||
docker buildx version
|
||||
```
|
||||
|
||||
## Obtaining the Installation Package
|
||||
|
||||
- TAR Installation Package
|
||||
|
||||
File name: wfc-1.0.7-20250221.tar.gz
|
||||
|
||||
- DEB Installation Package
|
||||
|
||||
File name:wfc-1.0.7-20250221.deb
|
||||
|
||||
Notes:
|
||||
|
||||
* Version: 1.0.7
|
||||
* Build date:20250221
|
||||
|
||||
Obtain the latest version of the software installation package as needed
|
||||
|
||||
|
||||
## Installing and Configuring the Software
|
||||
|
||||
**TAR Package Installation Method**
|
||||
|
||||
- Create Installation Directory
|
||||
|
||||
This step is required for fresh installations. If upgrading, retain the existing directory
|
||||
|
||||
```sh
|
||||
sudo mkdir /opt/wfc
|
||||
```
|
||||
|
||||
- Extract the Software Package to the Installation Directory
|
||||
|
||||
```sh
|
||||
sudo tar xvfz wfc-1.0.7-20250221.tar.gz -C /opt/wfc
|
||||
```
|
||||
|
||||
**DEB Package Installation Method**
|
||||
|
||||
- Install the Software Package
|
||||
|
||||
```sh
|
||||
sudo dpkg -i wfc-1.0.7-20250221.deb
|
||||
```
|
||||
|
||||
* Directory Tree After Installation
|
||||
|
||||
```text
|
||||
/opt/wfc # work root directory
|
||||
├── bin # shell script and binary file
|
||||
├── docker # docker compose work directory
|
||||
│ ├── env # default docker environment file, will be copy to docker compose work directory
|
||||
│ ├── java # java image directory
|
||||
│ ├── mysql # mysql database container directory
|
||||
│ │ ├── conf
|
||||
│ │ ├── conf.d
|
||||
│ │ ├── data
|
||||
│ │ ├── db
|
||||
│ │ ├── logs
|
||||
│ │ └── tmp
|
||||
│ ├── nacos # nacos container directory
|
||||
│ │ ├── conf
|
||||
│ │ └── logs
|
||||
│ ├── nginx # nginx container directory
|
||||
│ │ ├── conf
|
||||
│ │ ├── conf.d
|
||||
│ │ ├── html
|
||||
│ │ │ └── dist
|
||||
│ │ │ ├── sys # system portal
|
||||
│ │ │ └── u # user portal
|
||||
│ │ └── logs
|
||||
│ ├── redis # redis container directroy
|
||||
│ │ ├── conf
|
||||
│ │ └── data
|
||||
│ └── wfc # wfc container root directory
|
||||
│ ├── auth # auth root directory
|
||||
│ │ └── jar
|
||||
│ ├── gateway # gateway root directory
|
||||
│ │ └── jar
|
||||
│ ├── modules # modules root directory
|
||||
│ │ ├── file
|
||||
│ │ │ └── jar
|
||||
│ │ ├── gen
|
||||
│ │ │ └── jar
|
||||
│ │ ├── job
|
||||
│ │ │ └── jar
|
||||
│ │ ├── payment
|
||||
│ │ │ └── jar
|
||||
│ │ ├── system
|
||||
│ │ │ └── jar
|
||||
│ │ └── user
|
||||
│ │ └── jar
|
||||
│ ├── upload # file upload directory
|
||||
│ └── visual
|
||||
│ └── monitor
|
||||
│ └── jar
|
||||
└── systemd # service daemon file,will be copy to /etc/systemd/system
|
||||
└── system
|
||||
```
|
||||
|
||||
* Configure the Software Environment
|
||||
|
||||
```sh
|
||||
cd /opt/wfc/bin
|
||||
sudo ./wfcsetup.sh env 192.168.13.128 # Parameter 2 is the host machine IP address
|
||||
```
|
||||
|
||||
* Modify Docker Environment Parameters
|
||||
|
||||
Modify the following environment parameter configurations according to actual conditions:
|
||||
** WFC_SERVER_IP address has already been replaced in the above configuration process
|
||||
** Replace TZ with the host machine system time zone
|
||||
|
||||
```sh
|
||||
cd /opt/wfc/docker
|
||||
cat .env
|
||||
WFC_CONFIG_DATABASE=wfc_config_db
|
||||
WFC_SYSTEM_DATABASE=wfc_system_db
|
||||
WFC_USER_DATABASE=wfc_user_db
|
||||
MYSQL_SERVICE_NAME=wfc-mysql
|
||||
MYSQL_SERVICE_PORT=3306
|
||||
MYSQL_ROOT_PASSWORD=123456
|
||||
MYSQL_SERVICE_USER=root
|
||||
MYSQL_SERVICE_PASSWORD=123456
|
||||
REDIS_PORT=6379
|
||||
NACOS_PROFILE_NAME=prod
|
||||
NACOS_NAME_SPACE=wfc-prod
|
||||
NACOS_SERVER_NAME=wfc-nacos
|
||||
WFC_SERVER_PORT=80
|
||||
NACOS_SERVER_PORT=8848
|
||||
GATEWAY_SERVER_PORT=8080
|
||||
AUTH_SERVER_PORT=8081
|
||||
WFC_FILE_PORT=9201
|
||||
WFC_JOB_PORT=9203
|
||||
WFC_PAYMENT_PORT=9204
|
||||
WFC_SYSTEM_PORT=9205
|
||||
WFC_USER_PORT=9206
|
||||
WFC_SERVER_IP=192.168.13.128
|
||||
NACOS_SERVER_IP=${WFC_SERVER_IP}
|
||||
GATEWAY_SERVER_IP=${WFC_SERVER_IP}
|
||||
RESTART_OPTION=on-failure:5
|
||||
TZ=Asia/Shanghai #docker container time zone
|
||||
```
|
||||
|
||||
If these container environment parameters have not been changed, you can directly run the following command to set the environment and create containers:
|
||||
|
||||
```sh
|
||||
cd /opt/wfc/bin
|
||||
sudo ./wfcsetup.sh all 192.168.13.128 # Parameter 2 is the host machine IP address
|
||||
```
|
||||
|
||||
* Create Docker Containers
|
||||
|
||||
If you have already run 'sudo ./wfcsetup.sh all 192.168.13.128', the following command can be omitted
|
||||
|
||||
```sh
|
||||
cd /opt/wfc/bin
|
||||
sudo ./wfcsetup.sh all
|
||||
```
|
||||
|
||||
## Configure Omada Platform Integration Connection Parameters
|
||||
|
||||
* Obtain portal platform integration connection parameters from the Omada service, as shown below:
|
||||
|
||||

|
||||
|
||||
Note: The connection MODE uses Client. For specific configuration methods, refer to the relevant Omada documentation
|
||||
|
||||
* Modify Configuration Files
|
||||
|
||||
* Modify the following Omada configuration items for platform integration with Omada
|
||||
|
||||
```sh
|
||||
cd /opt/wfc/docker/conf
|
||||
cat application-common.yml
|
||||
|
||||
...
|
||||
|
||||
# Omada config
|
||||
omada:
|
||||
# web url or host exp: 'https://192.168.2.249:8043'
|
||||
omada-url: 'https://aps1-omada-northbound.tplinkcloud.com'
|
||||
omadac-id: 'c4decbf73f80094019d664506ec9b4d4'
|
||||
client-id: '6110a77822234243a033e652d1e8a3ae'
|
||||
client-secret: '651957da95f14f45b719876bb68bd6f5'
|
||||
|
||||
...
|
||||
```
|
||||
|
||||
* Modify the following email configuration items for sending email verification codes
|
||||
|
||||
```sh
|
||||
cd /opt/wfc/docker/conf
|
||||
cat application-common.yml
|
||||
|
||||
...
|
||||
|
||||
mail:
|
||||
enabled: true
|
||||
host: mail.agrandtech.com
|
||||
port: 25
|
||||
# Enable authentication
|
||||
auth: true
|
||||
# Sender, follows RFC-822 standard
|
||||
from: smtpext <smtpext@agrandtech.com>
|
||||
# User name
|
||||
user: smtpext
|
||||
# Password
|
||||
pass: Smtp123@agt
|
||||
# Use TLS security connection
|
||||
starttlsEnable: false
|
||||
# Use SSL security connection
|
||||
sslEnable: false
|
||||
# Timeout value for sending mail, in milliseconds
|
||||
timeout: 0
|
||||
# Connection timeout value, in milliseconds
|
||||
connectionTimeout: 0
|
||||
|
||||
...
|
||||
```
|
||||
* Allow email-related domains in Omada
|
||||
|
||||
To support users in obtaining email verification codes without network permissions when logging into AP for the first time, you can allow email-related domains in Omada. The specific steps are as follows:
|
||||
|
||||
After entering Omada, select the site you need to configure, select Settings->Authentication->Portal->Access Control->Pre-Authentication Access->check Enable, then add the email-related domains to the Pre-Authentication Access List. Note that all domains involved in accessing email need to be allowed, as shown in the following figures (the allowed domains may not be complete):
|
||||
|
||||

|
||||

|
||||
|
||||
* Modify payment configuration items
|
||||
|
||||
```sh
|
||||
cd /opt/wfc/docker/wfc/modules/payment/conf/
|
||||
cat application.yml
|
||||
|
||||
...
|
||||
|
||||
# payment configuration,
|
||||
# alipay configuration
|
||||
alipay:
|
||||
appId: 9021000122699258
|
||||
privateKey: MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC7YAcIXV5GJlTWBOoBcrVG1zKxHunznSjYXwTS2DM3YgloxzKye4apfcmBDVnoL93m4QrJTtbiHYvu4yJjJfJsQEY+Wo44IczhDypyu+Il6JpQOwylTs94/+3aaQ1wThsDaGs8edaFGteuw+1pUVl4nxF00fS1VoIR30riqAGFAXrPhcSA6Y9c8HK1htxCelICnPzjpqC4s8ZjrjS7FoyHP2ZAay5fx1VEtah30E4RvycFfV/i2+k3JGFOSeevdCx6Ufu+9Y/RaG4Sh84QuYRQUhAHUswlFDHpRrAnxHzt0zDkOkg3BrCT7vMtBbSOP9BdIhpVTaZm4diQdNbLSl4hAgMBAAECggEAKb1Xc7aQ1KGfTlmj4xSxawlvImOXjAwbWC+6fFlq91BgdjXBhl7b/Y+mvpfBymY3UUIaTAPC/HXGgT2ZoGqImTKsMyGrArgM0qm1M//EfdtV3L96rqxirTqduoSiWL0daWHuWXduoRH8r9K3ZTmY67TLh7FpiKevq9mI7fqs8/qgq5QAN4UPFb3Cq9hDNTU4l6+Bywdg1KkwJ2Jc98SlrIdVl+1eCMAgueLR0aNHTobyPBZ/KfwGRV0OQ3QqjLVgL3zlbzuylYhaZqPgxxd46vgWwkyMiiv7u2OyCetq4LFd+tcNDz0Yqk6rK9/S0oxbN8NM5DLkpwFh/433BoPS3QKBgQD/dsxNr2PYdPLp6pOvw7H2AFMH8CkwTlRg+2f/0fgQF14rJwZgEU6fL5A2JvQeRRC5mCff2m5tDqrS321JNyH/JIKJ+4J8I34GEo/kSCHL3RmyvJGQOQ/EpEyxvP8BV3ob6UO3LR58DOGlJr8eTsr3Y8o9cAMuknCNxvsd2LvybwKBgQC7xKkx4KIPBny6sCOtChOkgIrY3hOCi+ZsHQVESXKzeku0NkH/qrAG+S9pb1XCzXdM2HrzkMeuz6tqi+2TY8nORyY2DZHNW7FqzkAiZ/NO2AgGIlALq1ZfJZke2MxgtBnxSsQ03gfXP9opu/FsLH9a+s6edfHPvKD4kHxlLBfAbwKBgQDYvr6QmuKn4HHJLZGoau0uvw+ziHwp1AubTTLrxgYmAO2Qx0eNcqG2RfChQWOV2xtZnFMYhodyWCNvTsm2eOSLSTrIP3ByStq95DnZganLAgivsXX/W6qZOJ0poCTryoB79enSHKHktjksmjdFS6zBQRVyEvtgJDcC03Rz2lN8WQKBgQCCoJE4otb7bv7s/ccEBeOeaNKvhue5xUwbYKEeXZ6PYAA0sh5+GCf34flq90qJiFl7u4rl0Y4pfk35hLlV9XEasYLSzePmIuktrakOhpTNABus8MgRJjSjYsvAmwCsMf9uTx5qzSBVThWfPSH6qIY9LAj8Un9UjxzJb/Mqi19GvwKBgQC0/KB+3robTqy9KOV4iEKJ4kmnXDRu7ecpMyc8k5HzpolIHcXLZHkBK9pMCXBQ9Kwy6BjRGNnUZOahS+tvnMcjHpwdhu90r7D51GXW/+PeFtphYTscFhHv1yuWbbojzhKf69pZnsVmyllIBqRgtbkS2WNHxWo/peCg47TcLaQNMA==
|
||||
publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhBZoE6p1TKpd/WsAJRTA2D6yUTzqLmZ73scxbPxxKwPIg2ys2Ap21u/lVmqBWO9Wf2Z7wUwr/6BP1PQqVpg0GAqU3yjjZ0LGfBitzMBMbGrlOLqJQ3PKgnUNmnOdLR4FlHCAjKtuyxjHkxBTHg/L4punk4lkFJQD8YvzFrYalS6WYw5j1/oq080NbcjPirPCRlsU7MRraQuUqSTdPwm2iHkroKwCEbGv+RtNJCfOkKNQVtRFFgPGMhU4nQ620gdfzsGJsNFKVJnD5SjeDWniBAbaGaVF4rEfKJPe6+XrcMg3h+9Fz+A2IU1KCCoth2neEZEaU1t0KBGxXIuo4efi/QIDAQAB
|
||||
appCertPath: \u5E94\u7528\u516C\u94A5\u8BC1\u4E66
|
||||
aliPayCertPath: \u652F\u4ED8\u5B9D\u516C\u94A5\u8BC1\u4E66
|
||||
aliPayRootCertPath: \u652F\u4ED8\u5B9D\u6839\u8BC1\u4E66
|
||||
serverUrl: https://openapi-sandbox.dl.alipaydev.com/gateway.do
|
||||
domain: http://192.168.2.249
|
||||
testDomain: http://129.204.171.210:8085
|
||||
|
||||
# wxpay configuration
|
||||
wxpay:
|
||||
appId:
|
||||
appSecret:
|
||||
mchId:
|
||||
partnerKey:
|
||||
certPath:
|
||||
domain: http://192.168.2.249/u
|
||||
|
||||
...
|
||||
```
|
||||
|
||||
* Allow payment-related domains in Omada
|
||||
|
||||
To support users in normally completing package purchases or balance recharges without network permissions when logging into AP for the first time, you need to allow payment-related domains in Omada. The specific steps are as follows:
|
||||
|
||||
After entering Omada, select the site you need to configure, select Settings->Authentication->Portal->Access Control->Pre-Authentication Access->check Enable, then add the payment method-related domains to the Pre-Authentication Access List. Note that all domains involved in payment need to be allowed, as shown in the following figures (the allowed domains may not be complete):
|
||||
|
||||

|
||||

|
||||
|
||||
* Start/View/Stop/Version Software
|
||||
|
||||
```sh
|
||||
cd /opt/wfc/bin
|
||||
sudo ./wfccontrol.sh start/restart/status/stop/version
|
||||
```
|
||||
|
||||
## Access System Platform and User Platform via Browser
|
||||
|
||||
* System Platform Portal Address:
|
||||
|
||||
```url
|
||||
http://192.168.13.128/sys
|
||||
```
|
||||
|
||||
* User Platform Portal Address:
|
||||
|
||||
```url
|
||||
http://192.168.13.128/u
|
||||
```
|
||||