master
ZhangXushuo 2023-11-30 13:32:42 +08:00
commit d90f17dad4
540 changed files with 44093 additions and 0 deletions

47
.gitignore vendored 100644
View File

@ -0,0 +1,47 @@
######################################################################
# Build Tools
.gradle
/build/
!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
### JRebel ###
rebel.xml
### NetBeans ###
nbproject/private/
build/*
nbbuild/
dist/
nbdist/
.nb-gradle/
######################################################################
# Others
*.log
*.xml.versionsBackup
*.swp
!*/build/*.java
!*/build/*.html
!*/build/*.xml
/.idea

21
LICENSE 100644
View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2020 若依
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

26
README.md 100644
View File

@ -0,0 +1,26 @@
## 系统模块
~~~
com.fivegroup
├── fivegroup-ui // 前端框架 [80]
├── fivegroup-gateway // 网关模块 [8080]
├── fivegroup-auth // 认证中心 [9200]
├── fivegroup-common // 通用模块
│ └── fivegroup-common-core // 核心模块
│ └── fivegroup-common-datascope // 权限范围
│ └── fivegroup-common-datasource // 多数据源
│ └── fivegroup-common-log // 日志记录
│ └── fivegroup-common-redis // 缓存服务
│ └── fivegroup-common-seata // 分布式事务
│ └── fivegroup-common-security // 安全模块
│ └── fivegroup-common-swagger // 系统接口
│ └── fivegroup-common-system // 系统基础
├── fivegroup-modules // 业务模块
│ └── fivegroup-system // 系统模块 [9201]
│ └── fivegroup-gen // 代码生成 [9202]
│ └── fivegroup-job // 定时任务 [9203]
│ └── fivegroup-file // 文件服务 [9300]
├── fivegroup-visual // 图形化管理模块
│ └── fivegroup-visual-monitor // 监控中心 [9100]
├──pom.xml // 公共依赖
~~~

12
bin/clean.bat 100644
View File

@ -0,0 +1,12 @@
@echo off
echo.
echo [信息] 清理工程target生成路径。
echo.
%~d0
cd %~dp0
cd ..
call mvn clean
pause

12
bin/package.bat 100644
View File

@ -0,0 +1,12 @@
@echo off
echo.
echo [信息] 打包Web工程生成war/jar包文件。
echo.
%~d0
cd %~dp0
cd ..
call mvn clean package -Dmaven.test.skip=true
pause

14
bin/run-auth.bat 100644
View File

@ -0,0 +1,14 @@
@echo off
echo.
echo [<5B><>Ϣ] ʹ<><CAB9>Jar<61><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Auth<74><68><EFBFBD>̡<EFBFBD>
echo.
cd %~dp0
cd ../fivegroup-auth/target
set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar fivegroup-auth.jar
cd bin
pause

View File

@ -0,0 +1,14 @@
@echo off
echo.
echo [<5B><>Ϣ] ʹ<><CAB9>Jar<61><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Gateway<61><79><EFBFBD>̡<EFBFBD>
echo.
cd %~dp0
cd ../fivegroup-gateway/target
set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar fivegroup-gateway.jar
cd bin
pause

View File

@ -0,0 +1,14 @@
@echo off
echo.
echo [<5B><>Ϣ] ʹ<><CAB9>Jar<61><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Modules-File<6C><65><EFBFBD>̡<EFBFBD>
echo.
cd %~dp0
cd ../fivegroup-modules/fivegroup-file/target
set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar fivegroup-modules-file.jar
cd bin
pause

View File

@ -0,0 +1,14 @@
@echo off
echo.
echo [<5B><>Ϣ] ʹ<><CAB9>Jar<61><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Modules-Gen<65><6E><EFBFBD>̡<EFBFBD>
echo.
cd %~dp0
cd ../fivegroup-modules/fivegroup-gen/target
set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar fivegroup-modules-gen.jar
cd bin
pause

View File

@ -0,0 +1,14 @@
@echo off
echo.
echo [<5B><>Ϣ] ʹ<><CAB9>Jar<61><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Modules-Job<6F><62><EFBFBD>̡<EFBFBD>
echo.
cd %~dp0
cd ../fivegroup-modules/fivegroup-job/target
set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar fivegroup-modules-job.jar
cd bin
pause

View File

@ -0,0 +1,14 @@
@echo off
echo.
echo [<5B><>Ϣ] ʹ<><CAB9>Jar<61><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Modules-System<65><6D><EFBFBD>̡<EFBFBD>
echo.
cd %~dp0
cd ../fivegroup-modules/fivegroup-system/target
set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar fivegroup-modules-system.jar
cd bin
pause

View File

@ -0,0 +1,14 @@
@echo off
echo.
echo [<5B><>Ϣ] ʹ<><CAB9>Jar<61><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Monitor<6F><72><EFBFBD>̡<EFBFBD>
echo.
cd %~dp0
cd ../fivegroup-visual/fivegroup-monitor/target
set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar fivegroup-visual-monitor.jar
cd bin
pause

41
docker/copy.sh 100644
View File

@ -0,0 +1,41 @@
#!/bin/sh
# 复制项目的文件到对应docker路径便于一键生成镜像。
usage() {
echo "Usage: sh copy.sh"
exit 1
}
# copy sql
echo "begin copy sql "
cp ../sql/ry_20230706.sql ./mysql/db
cp ../sql/ry_config_20220929.sql ./mysql/db
# copy html
echo "begin copy html "
cp -r ../fivegroup-ui/dist/** ./nginx/html/dist
# copy jar
echo "begin copy fivegroup-gateway "
cp ../fivegroup-gateway/target/fivegroup-gateway.jar ./fivegroup/gateway/jar
echo "begin copy fivegroup-auth "
cp ../fivegroup-auth/target/fivegroup-auth.jar ./fivegroup/auth/jar
echo "begin copy fivegroup-visual "
cp ../fivegroup-visual/fivegroup-monitor/target/fivegroup-visual-monitor.jar ./fivegroup/visual/monitor/jar
echo "begin copy fivegroup-modules-system "
cp ../fivegroup-modules/fivegroup-system/target/fivegroup-modules-system.jar ./fivegroup/modules/system/jar
echo "begin copy fivegroup-modules-file "
cp ../fivegroup-modules/fivegroup-file/target/fivegroup-modules-file.jar ./fivegroup/modules/file/jar
echo "begin copy fivegroup-modules-job "
cp ../fivegroup-modules/fivegroup-job/target/fivegroup-modules-job.jar ./fivegroup/modules/job/jar
echo "begin copy fivegroup-modules-gen "
cp ../fivegroup-modules/fivegroup-gen/target/fivegroup-modules-gen.jar ./fivegroup/modules/gen/jar

67
docker/deploy.sh 100644
View File

@ -0,0 +1,67 @@
#!/bin/sh
# 使用说明,用来提示输入参数
usage() {
echo "Usage: sh 执行脚本.sh [port|base|modules|stop|rm]"
exit 1
}
# 开启所需端口
port(){
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --add-port=8848/tcp --permanent
firewall-cmd --add-port=9848/tcp --permanent
firewall-cmd --add-port=9849/tcp --permanent
firewall-cmd --add-port=6379/tcp --permanent
firewall-cmd --add-port=3306/tcp --permanent
firewall-cmd --add-port=9100/tcp --permanent
firewall-cmd --add-port=9200/tcp --permanent
firewall-cmd --add-port=9201/tcp --permanent
firewall-cmd --add-port=9202/tcp --permanent
firewall-cmd --add-port=9203/tcp --permanent
firewall-cmd --add-port=9300/tcp --permanent
service firewalld restart
}
# 启动基础环境(必须)
base(){
docker-compose up -d fivegroup-mysql fivegroup-redis fivegroup-nacos
}
# 启动程序模块(必须)
modules(){
docker-compose up -d fivegroup-nginx fivegroup-gateway fivegroup-auth fivegroup-modules-system
}
# 关闭所有环境/模块
stop(){
docker-compose stop
}
# 删除所有环境/模块
rm(){
docker-compose rm
}
# 根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
"port")
port
;;
"base")
base
;;
"modules")
modules
;;
"stop")
stop
;;
"rm")
rm
;;
*)
usage
;;
esac

View File

@ -0,0 +1,140 @@
version : '3.8'
services:
fivegroup-nacos:
container_name: fivegroup-nacos
image: nacos/nacos-server
build:
context: ./nacos
environment:
- MODE=standalone
volumes:
- ./nacos/logs/:/home/nacos/logs
- ./nacos/conf/application.properties:/home/nacos/conf/application.properties
ports:
- "8848:8848"
- "9848:9848"
- "9849:9849"
depends_on:
- fivegroup-mysql
fivegroup-mysql:
container_name: fivegroup-mysql
image: mysql:5.7
build:
context: ./mysql
ports:
- "3306:3306"
volumes:
- ./mysql/conf:/etc/mysql/conf.d
- ./mysql/logs:/logs
- ./mysql/data:/var/lib/mysql
command: [
'mysqld',
'--innodb-buffer-pool-size=80M',
'--character-set-server=utf8mb4',
'--collation-server=utf8mb4_unicode_ci',
'--default-time-zone=+8:00',
'--lower-case-table-names=1'
]
environment:
MYSQL_DATABASE: 'ry-cloud'
MYSQL_ROOT_PASSWORD: password
fivegroup-redis:
container_name: fivegroup-redis
image: redis
build:
context: ./redis
ports:
- "6379:6379"
volumes:
- ./redis/conf/redis.conf:/home/fivegroup/redis/redis.conf
- ./redis/data:/data
command: redis-server /home/fivegroup/redis/redis.conf
fivegroup-nginx:
container_name: fivegroup-nginx
image: nginx
build:
context: ./nginx
ports:
- "80:80"
volumes:
- ./nginx/html/dist:/home/fivegroup/projects/fivegroup-ui
- ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/logs:/var/log/nginx
- ./nginx/conf.d:/etc/nginx/conf.d
depends_on:
- fivegroup-gateway
links:
- fivegroup-gateway
fivegroup-gateway:
container_name: fivegroup-gateway
build:
context: ./fivegroup/gateway
dockerfile: dockerfile
ports:
- "8080:8080"
depends_on:
- fivegroup-redis
links:
- fivegroup-redis
fivegroup-auth:
container_name: fivegroup-auth
build:
context: ./fivegroup/auth
dockerfile: dockerfile
ports:
- "9200:9200"
depends_on:
- fivegroup-redis
links:
- fivegroup-redis
fivegroup-modules-system:
container_name: fivegroup-modules-system
build:
context: ./fivegroup/modules/system
dockerfile: dockerfile
ports:
- "9201:9201"
depends_on:
- fivegroup-redis
- fivegroup-mysql
links:
- fivegroup-redis
- fivegroup-mysql
fivegroup-modules-gen:
container_name: fivegroup-modules-gen
build:
context: ./fivegroup/modules/gen
dockerfile: dockerfile
ports:
- "9202:9202"
depends_on:
- fivegroup-mysql
links:
- fivegroup-mysql
fivegroup-modules-job:
container_name: fivegroup-modules-job
build:
context: ./fivegroup/modules/job
dockerfile: dockerfile
ports:
- "9203:9203"
depends_on:
- fivegroup-mysql
links:
- fivegroup-mysql
fivegroup-modules-file:
container_name: fivegroup-modules-file
build:
context: ./fivegroup/modules/file
dockerfile: dockerfile
ports:
- "9300:9300"
volumes:
- ./fivegroup/uploadPath:/home/fivegroup/uploadPath
fivegroup-visual-monitor:
container_name: fivegroup-visual-monitor
build:
context: ./fivegroup/visual/monitor
dockerfile: dockerfile
ports:
- "9100:9100"

View File

@ -0,0 +1,15 @@
# 基础镜像
FROM openjdk:8-jre
# author
MAINTAINER fivegroup
# 挂载目录
VOLUME /home/fivegroup
# 创建目录
RUN mkdir -p /home/fivegroup
# 指定路径
WORKDIR /home/fivegroup
# 复制jar文件到路径
COPY ./jar/fivegroup-auth.jar /home/fivegroup/fivegroup-auth.jar
# 启动认证服务
ENTRYPOINT ["java","-jar","fivegroup-auth.jar"]

View File

@ -0,0 +1 @@
存放认证中心打包好的jar文件用于docker启动应用。

View File

@ -0,0 +1,15 @@
# 基础镜像
FROM openjdk:8-jre
# author
MAINTAINER fivegroup
# 挂载目录
VOLUME /home/fivegroup
# 创建目录
RUN mkdir -p /home/fivegroup
# 指定路径
WORKDIR /home/fivegroup
# 复制jar文件到路径
COPY ./jar/fivegroup-gateway.jar /home/fivegroup/fivegroup-gateway.jar
# 启动网关服务
ENTRYPOINT ["java","-jar","fivegroup-gateway.jar"]

View File

@ -0,0 +1 @@
存放网关模块打包好的jar文件用于docker启动应用。

View File

@ -0,0 +1,15 @@
# 基础镜像
FROM openjdk:8-jre
# author
MAINTAINER fivegroup
# 挂载目录
VOLUME /home/fivegroup
# 创建目录
RUN mkdir -p /home/fivegroup
# 指定路径
WORKDIR /home/fivegroup
# 复制jar文件到路径
COPY ./jar/fivegroup-modules-file.jar /home/fivegroup/fivegroup-modules-file.jar
# 启动文件服务
ENTRYPOINT ["java","-jar","fivegroup-modules-file.jar"]

View File

@ -0,0 +1 @@
存放文件服务打包好的jar文件用于docker启动应用。

View File

@ -0,0 +1,15 @@
# 基础镜像
FROM openjdk:8-jre
# author
MAINTAINER fivegroup
# 挂载目录
VOLUME /home/fivegroup
# 创建目录
RUN mkdir -p /home/fivegroup
# 指定路径
WORKDIR /home/fivegroup
# 复制jar文件到路径
COPY ./jar/fivegroup-modules-gen.jar /home/fivegroup/fivegroup-modules-gen.jar
# 启动代码生成服务
ENTRYPOINT ["java","-jar","fivegroup-modules-gen.jar"]

View File

@ -0,0 +1 @@
存放代码生成打包好的jar文件用于docker启动应用。

View File

@ -0,0 +1,15 @@
# 基础镜像
FROM openjdk:8-jre
# author
MAINTAINER fivegroup
# 挂载目录
VOLUME /home/fivegroup
# 创建目录
RUN mkdir -p /home/fivegroup
# 指定路径
WORKDIR /home/fivegroup
# 复制jar文件到路径
COPY ./jar/fivegroup-modules-job.jar /home/fivegroup/fivegroup-modules-job.jar
# 启动定时任务服务
ENTRYPOINT ["java","-jar","fivegroup-modules-job.jar"]

View File

@ -0,0 +1 @@
存放定时任务打包好的jar文件用于docker启动应用。

View File

@ -0,0 +1,15 @@
# 基础镜像
FROM openjdk:8-jre
# author
MAINTAINER fivegroup
# 挂载目录
VOLUME /home/fivegroup
# 创建目录
RUN mkdir -p /home/fivegroup
# 指定路径
WORKDIR /home/fivegroup
# 复制jar文件到路径
COPY ./jar/fivegroup-modules-system.jar /home/fivegroup/fivegroup-modules-system.jar
# 启动系统服务
ENTRYPOINT ["java","-jar","fivegroup-modules-system.jar"]

View File

@ -0,0 +1 @@
存放系统模块打包好的jar文件用于docker启动应用。

View File

@ -0,0 +1,15 @@
# 基础镜像
FROM openjdk:8-jre
# author
MAINTAINER fivegroup
# 挂载目录
VOLUME /home/fivegroup
# 创建目录
RUN mkdir -p /home/fivegroup
# 指定路径
WORKDIR /home/fivegroup
# 复制jar文件到路径
COPY ./jar/fivegroup-visual-monitor.jar /home/fivegroup/fivegroup-visual-monitor.jar
# 启动系统服务
ENTRYPOINT ["java","-jar","fivegroup-visual-monitor.jar"]

View File

@ -0,0 +1 @@
存放监控中心打包好的jar文件用于docker启动应用。

View File

@ -0,0 +1 @@
存放sql目录下的所有脚本用于docker自动执行。

View File

@ -0,0 +1,7 @@
# 基础镜像
FROM mysql:5.7
# author
MAINTAINER fivegroup
# 执行sql脚本
ADD ./db/*.sql /docker-entrypoint-initdb.d/

View File

@ -0,0 +1,32 @@
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://fivegroup-mysql:3306/ry-config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=root
db.password=password
nacos.naming.empty-service.auto-clean=true
nacos.naming.empty-service.clean.initial-delay-ms=50000
nacos.naming.empty-service.clean.period-time-ms=30000
management.endpoints.web.exposure.include=*
management.metrics.export.elastic.enabled=false
management.metrics.export.influx.enabled=false
server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}i
server.tomcat.basedir=/home/fivegroup/nacos/tomcat/logs
nacos.security.ignore.urls=/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-ui/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**
nacos.core.auth.system.type=nacos
nacos.core.auth.enabled=false
nacos.core.auth.default.token.expire.seconds=18000
nacos.core.auth.default.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789
nacos.core.auth.caching.enabled=true
nacos.core.auth.enable.userAgentAuthWhite=false
nacos.core.auth.server.identity.key=serverIdentity
nacos.core.auth.server.identity.value=security
nacos.istio.mcp.server.enabled=false

View File

@ -0,0 +1,7 @@
# 基础镜像
FROM nacos/nacos-server
# author
MAINTAINER fivegroup
# 复制conf文件到路径
COPY ./conf/application.properties /home/nacos/conf/application.properties

View File

@ -0,0 +1,41 @@
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root /home/fivegroup/projects/fivegroup-ui;
try_files $uri $uri/ /index.html;
index index.html index.htm;
}
location /prod-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://fivegroup-gateway:8080/;
}
# 避免actuator暴露
if ($request_uri ~ "/actuator") {
return 403;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}

View File

@ -0,0 +1,15 @@
# 基础镜像
FROM nginx
# author
MAINTAINER fivegroup
# 挂载目录
VOLUME /home/fivegroup/projects/fivegroup-ui
# 创建目录
RUN mkdir -p /home/fivegroup/projects/fivegroup-ui
# 指定路径
WORKDIR /home/fivegroup/projects/fivegroup-ui
# 复制conf文件到路径
COPY ./conf/nginx.conf /etc/nginx/nginx.conf
# 复制html文件到路径
COPY ./html/dist /home/fivegroup/projects/fivegroup-ui

View File

@ -0,0 +1 @@
# requirepass 123456

View File

@ -0,0 +1,13 @@
# 基础镜像
FROM redis
# author
MAINTAINER fivegroup
# 挂载目录
VOLUME /home/fivegroup/redis
# 创建目录
RUN mkdir -p /home/fivegroup/redis
# 指定路径
WORKDIR /home/fivegroup/redis
# 复制conf文件到路径
COPY ./conf/redis.conf /home/fivegroup/redis/redis.conf

View File

@ -0,0 +1,82 @@
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>com.fivegroup</groupId>
<artifactId>fivegroup</artifactId>
<version>3.6.3</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>fivegroup-auth</artifactId>
<description>
fivegroup-auth认证授权中心
</description>
<dependencies>
<!-- SpringCloud Alibaba Nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- SpringCloud Alibaba Nacos Config -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- SpringCloud Alibaba Sentinel -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<!-- SpringBoot Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- SpringBoot Actuator -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- FiveGroup Common Security-->
<dependency>
<groupId>com.fivegroup</groupId>
<artifactId>fivegroup-common-security</artifactId>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- 加入maven deploy插件当在deploy时忽略些model-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
</project>

View File

@ -0,0 +1,19 @@
package com.fivegroup.auth;
import com.fivegroup.common.security.annotation.EnableMyFeignClients;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
/**
*
*
* @author fivegroup
*/
@EnableMyFeignClients
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class FiveGroupAuthApplication {
public static void main (String[] args) {
SpringApplication.run(FiveGroupAuthApplication.class, args);
}
}

View File

@ -0,0 +1,72 @@
package com.fivegroup.auth.controller;
import com.fivegroup.auth.form.LoginBody;
import com.fivegroup.auth.form.RegisterBody;
import com.fivegroup.auth.service.SysLoginService;
import com.fivegroup.common.core.domain.Result;
import com.fivegroup.common.core.utils.JwtUtils;
import com.fivegroup.common.core.utils.StringUtils;
import com.fivegroup.common.security.auth.AuthUtil;
import com.fivegroup.common.security.service.TokenService;
import com.fivegroup.common.security.utils.SecurityUtils;
import com.fivegroup.common.system.domain.LoginUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
/**
* token
*
* @author fivegroup
*/
@RestController
public class TokenController {
@Autowired
private TokenService tokenService;
@Autowired
private SysLoginService sysLoginService;
@PostMapping("login")
public Result<?> login (@RequestBody LoginBody form) {
// 用户登录
LoginUser userInfo = sysLoginService.login(form.getUsername(), form.getPassword());
// 获取登录token
return Result.success(tokenService.createToken(userInfo));
}
@DeleteMapping("logout")
public Result<?> logout (HttpServletRequest request) {
String token = SecurityUtils.getToken(request);
if (StringUtils.isNotEmpty(token)) {
String username = JwtUtils.getUserName(token);
// 删除用户缓存记录
AuthUtil.logoutByToken(token);
// 记录用户退出日志
sysLoginService.logout(username);
}
return Result.success();
}
@PostMapping("refresh")
public Result<?> refresh (HttpServletRequest request) {
LoginUser loginUser = tokenService.getLoginUser(request);
if (StringUtils.isNotNull(loginUser)) {
// 刷新令牌有效期
tokenService.refreshToken(loginUser);
return Result.success();
}
return Result.success();
}
@PostMapping("register")
public Result<?> register (@RequestBody RegisterBody registerBody) {
// 用户注册
sysLoginService.register(registerBody.getUsername(), registerBody.getPassword());
return Result.success();
}
}

View File

@ -0,0 +1,34 @@
package com.fivegroup.auth.form;
/**
*
*
* @author fivegroup
*/
public class LoginBody {
/**
*
*/
private String username;
/**
*
*/
private String password;
public String getUsername () {
return username;
}
public void setUsername (String username) {
this.username = username;
}
public String getPassword () {
return password;
}
public void setPassword (String password) {
this.password = password;
}
}

View File

@ -0,0 +1,10 @@
package com.fivegroup.auth.form;
/**
*
*
* @author fivegroup
*/
public class RegisterBody extends LoginBody {
}

View File

@ -0,0 +1,127 @@
package com.fivegroup.auth.service;
import com.fivegroup.common.core.constant.CacheConstants;
import com.fivegroup.common.core.constant.Constants;
import com.fivegroup.common.core.constant.SecurityConstants;
import com.fivegroup.common.core.constant.UserConstants;
import com.fivegroup.common.core.domain.Result;
import com.fivegroup.common.core.enums.UserStatus;
import com.fivegroup.common.core.exception.ServiceException;
import com.fivegroup.common.core.text.Convert;
import com.fivegroup.common.core.utils.StringUtils;
import com.fivegroup.common.core.utils.ip.IpUtils;
import com.fivegroup.common.redis.service.RedisService;
import com.fivegroup.common.security.utils.SecurityUtils;
import com.fivegroup.common.system.remote.RemoteUserService;
import com.fivegroup.common.system.domain.SysUser;
import com.fivegroup.common.system.domain.LoginUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
*
*
* @author fivegroup
*/
@Component
public class SysLoginService {
@Autowired
private RemoteUserService remoteUserService;
@Autowired
private SysPasswordService passwordService;
@Autowired
private SysRecordLogService recordLogService;
@Autowired
private RedisService redisService;
/**
*
*/
public LoginUser login (String username, String password) {
// 用户名或密码为空 错误
if (StringUtils.isAnyBlank(username, password)) {
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "用户/密码必须填写");
throw new ServiceException("用户/密码必须填写");
}
// 密码如果不在指定范围内 错误
if (password.length() < UserConstants.PASSWORD_MIN_LENGTH
|| password.length() > UserConstants.PASSWORD_MAX_LENGTH) {
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "用户密码不在指定范围");
throw new ServiceException("用户密码不在指定范围");
}
// 用户名不在指定范围内 错误
if (username.length() < UserConstants.USERNAME_MIN_LENGTH
|| username.length() > UserConstants.USERNAME_MAX_LENGTH) {
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "用户名不在指定范围");
throw new ServiceException("用户名不在指定范围");
}
// IP黑名单校验
String blackStr = Convert.toStr(redisService.getCacheObject(CacheConstants.SYS_LOGIN_BLACKIPLIST));
if (IpUtils.isMatchedIp(blackStr, IpUtils.getIpAddr())) {
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "很遗憾访问IP已被列入系统黑名单");
throw new ServiceException("很遗憾访问IP已被列入系统黑名单");
}
// 查询用户信息
Result<LoginUser> userResult = remoteUserService.getUserInfo(username, SecurityConstants.INNER);
if (StringUtils.isNull(userResult) || StringUtils.isNull(userResult.getData())) {
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "登录用户不存在");
throw new ServiceException("登录用户:" + username + " 不存在");
}
if (Result.FAIL == userResult.getCode()) {
throw new ServiceException(userResult.getMsg());
}
LoginUser userInfo = userResult.getData();
SysUser user = userResult.getData().getSysUser();
if (UserStatus.DELETED.getCode().equals(user.getDelFlag())) {
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "对不起,您的账号已被删除");
throw new ServiceException("对不起,您的账号:" + username + " 已被删除");
}
if (UserStatus.DISABLE.getCode().equals(user.getStatus())) {
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "用户已停用,请联系管理员");
throw new ServiceException("对不起,您的账号:" + username + " 已停用");
}
passwordService.validate(user, password);
recordLogService.recordLogininfor(username, Constants.LOGIN_SUCCESS, "登录成功");
return userInfo;
}
public void logout (String loginName) {
recordLogService.recordLogininfor(loginName, Constants.LOGOUT, "退出成功");
}
/**
*
*/
public void register (String username, String password) {
// 用户名或密码为空 错误
if (StringUtils.isAnyBlank(username, password)) {
throw new ServiceException("用户/密码必须填写");
}
if (username.length() < UserConstants.USERNAME_MIN_LENGTH
|| username.length() > UserConstants.USERNAME_MAX_LENGTH) {
throw new ServiceException("账户长度必须在2到20个字符之间");
}
if (password.length() < UserConstants.PASSWORD_MIN_LENGTH
|| password.length() > UserConstants.PASSWORD_MAX_LENGTH) {
throw new ServiceException("密码长度必须在5到20个字符之间");
}
// 注册用户信息
SysUser sysUser = new SysUser();
sysUser.setUserName(username);
sysUser.setNickName(username);
sysUser.setPassword(SecurityUtils.encryptPassword(password));
Result<?> registerResult = remoteUserService.registerUserInfo(sysUser, SecurityConstants.INNER);
if (Result.FAIL == registerResult.getCode()) {
throw new ServiceException(registerResult.getMsg());
}
recordLogService.recordLogininfor(username, Constants.REGISTER, "注册成功");
}
}

View File

@ -0,0 +1,76 @@
package com.fivegroup.auth.service;
import com.fivegroup.common.core.constant.CacheConstants;
import com.fivegroup.common.core.constant.Constants;
import com.fivegroup.common.core.exception.ServiceException;
import com.fivegroup.common.redis.service.RedisService;
import com.fivegroup.common.security.utils.SecurityUtils;
import com.fivegroup.common.system.domain.SysUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.concurrent.TimeUnit;
/**
*
*
* @author fivegroup
*/
@Component
public class SysPasswordService {
@Autowired
private RedisService redisService;
private int maxRetryCount = CacheConstants.PASSWORD_MAX_RETRY_COUNT;
private Long lockTime = CacheConstants.PASSWORD_LOCK_TIME;
@Autowired
private SysRecordLogService recordLogService;
/**
*
*
* @param username
*
* @return key
*/
private String getCacheKey (String username) {
return CacheConstants.PWD_ERR_CNT_KEY + username;
}
public void validate (SysUser user, String password) {
String username = user.getUserName();
Integer retryCount = redisService.getCacheObject(getCacheKey(username));
if (retryCount == null) {
retryCount = 0;
}
if (retryCount >= Integer.valueOf(maxRetryCount).intValue()) {
String errMsg = String.format("密码输入错误%s次帐户锁定%s分钟", maxRetryCount, lockTime);
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, errMsg);
throw new ServiceException(errMsg);
}
if (!matches(user, password)) {
retryCount = retryCount + 1;
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, String.format("密码输入错误%s次", retryCount));
redisService.setCacheObject(getCacheKey(username), retryCount, lockTime, TimeUnit.MINUTES);
throw new ServiceException("用户不存在/密码错误");
} else {
clearLoginRecordCache(username);
}
}
public boolean matches (SysUser user, String rawPassword) {
return SecurityUtils.matchesPassword(rawPassword, user.getPassword());
}
public void clearLoginRecordCache (String loginName) {
if (redisService.hasKey(getCacheKey(loginName))) {
redisService.deleteObject(getCacheKey(loginName));
}
}
}

View File

@ -0,0 +1,44 @@
package com.fivegroup.auth.service;
import com.fivegroup.common.core.constant.Constants;
import com.fivegroup.common.core.constant.SecurityConstants;
import com.fivegroup.common.core.utils.StringUtils;
import com.fivegroup.common.core.utils.ip.IpUtils;
import com.fivegroup.common.system.remote.RemoteLogService;
import com.fivegroup.common.system.domain.SysLogininfor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
*
*
* @author fivegroup
*/
@Component
public class SysRecordLogService {
@Autowired
private RemoteLogService remoteLogService;
/**
*
*
* @param username
* @param status
* @param message
*
* @return
*/
public void recordLogininfor (String username, String status, String message) {
SysLogininfor logininfor = new SysLogininfor();
logininfor.setUserName(username);
logininfor.setIpaddr(IpUtils.getIpAddr());
logininfor.setMsg(message);
// 日志状态
if (StringUtils.equalsAny(status, Constants.LOGIN_SUCCESS, Constants.LOGOUT, Constants.REGISTER)) {
logininfor.setStatus(Constants.LOGIN_SUCCESS_STATUS);
} else if (Constants.LOGIN_FAIL.equals(status)) {
logininfor.setStatus(Constants.LOGIN_FAIL_STATUS);
}
remoteLogService.saveLogininfor(logininfor, SecurityConstants.INNER);
}
}

View File

@ -0,0 +1,2 @@
Spring Boot Version: ${spring-boot.version}
Spring Application Name: ${spring.application.name}

View File

@ -0,0 +1,25 @@
# Tomcat
server:
port: 9200
# Spring
spring:
application:
# 应用名称
name: fivegroup-auth
profiles:
# 环境配置
active: dev
cloud:
nacos:
discovery:
# 服务注册地址
server-addr: 101.34.69.116:8848
config:
# 配置中心地址
server-addr: 101.34.69.116:8848
# 配置文件格式
file-extension: yml
# 共享配置
shared-configs:
- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}

View File

@ -0,0 +1,74 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 日志存放路径 -->
<property name="log.path" value="logs/fivegroup-auth"/>
<!-- 日志输出格式 -->
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
<!-- 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
<!-- 系统日志输出 -->
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/info.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>INFO</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/error.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>ERROR</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 系统模块日志级别控制 -->
<logger name="com.fivegroup" level="info"/>
<!-- Spring日志级别控制 -->
<logger name="org.springframework" level="warn"/>
<root level="info">
<appender-ref ref="console"/>
</root>
<!--系统操作日志-->
<root level="info">
<appender-ref ref="file_info"/>
<appender-ref ref="file_error"/>
</root>
</configuration>

View File

@ -0,0 +1,141 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>com.fivegroup</groupId>
<artifactId>fivegroup-common</artifactId>
<version>3.6.3</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>fivegroup-common-core</artifactId>
<description>
fivegroup-common-core核心模块
</description>
<dependencies>
<!-- SpringCloud Openfeign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- SpringCloud Loadbalancer -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<!-- Spring Context Support -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</dependency>
<!-- Spring Web -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</dependency>
<!-- Transmittable ThreadLocal -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>transmittable-thread-local</artifactId>
</dependency>
<!-- Pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
</dependency>
<!-- mybatis - plus 依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3.1</version>
<exclusions>
<exclusion>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
</exclusion>
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Hibernate Validator -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<!-- Jackson -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<!-- Alibaba Fastjson -->
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
</dependency>
<!-- Jwt -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
</dependency>
<!-- Jaxb -->
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
</dependency>
<!-- Apache Lang3 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<!-- Commons Io -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
</dependency>
<!-- excel工具 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
</dependency>
<!-- Java Servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
</dependency>
<!-- Swagger -->
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,24 @@
package com.fivegroup.common.core.admin;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
*
*
* @author LiuJiaXin
* @version 2023/11/25 - 14:49
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Admin {
private Integer adminId;
private String adminName;
private String adminPhone;
private String adminPassword;
private Integer adminRole;
}

View File

@ -0,0 +1,28 @@
package com.fivegroup.common.core.admin;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
*
*
* @author LiuJiaXin
* @version 2023/11/28 - 0:07
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@TableName("t_audit")
public class Audit {
@TableId(value = "audit_id",type = IdType.AUTO)
private Integer auditId;
@TableField("audit_name")
private String auditName;
}

View File

@ -0,0 +1,50 @@
package com.fivegroup.common.core.admin;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
*
*
* @author LiuJiaXin
* @version 2023/11/28 - 18:51
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@TableName("t_car")
public class Car {
@TableId(value = "car_id",type = IdType.AUTO)
private Integer carId;//主键id
@TableField("car_code")
private String carCode;//车牌号
@TableField("car_vin")
private String carVin;//vin
@TableField("car_type_id")
private Integer carTypeId;//车型id
@TableField("fence_id")
private Integer fenceId;//电子围栏
@TableField("car_status")
private Integer carStatus;//车辆状态
@TableField("battery_maker_id")
private Integer batteryMakerId;//电机厂商
@TableField("motor_manufacturer_id")
private Integer motorManufacturerId;//电池产商
@TableField("motor_id")
private Integer motorId;//电池编号
@TableField("battery_id")
private Integer batteryId;//电机编号
@TableField("operating_area")
private String operatingArea;//运营区域
@TableField("audit_id")
private Integer auditId;
@TableField("firm_id")
private Integer firmId;//公司id
}

View File

@ -0,0 +1,35 @@
package com.fivegroup.common.core.admin;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.List;
/**
*
*
* @author LiuJiaXin
* @version 2023/11/29 - 15:56
*/
@Data
@Accessors(chain = true)
public class Chinas implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id",type = IdType.AUTO)
private Long id;
private Long code;
private String name;
private Long pid;
private String level;
@TableField(exist = false)
private List<Chinas> areaList;
@TableField(exist = false)
private List<Chinas> children;
}

View File

@ -0,0 +1,22 @@
package com.fivegroup.common.core.admin;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
*
*
* @author LiuJiaXin
* @version 2023/11/26 - 14:59
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class City {
private Integer cityId;
private Integer provinceId;
private String cityName;
}

View File

@ -0,0 +1,22 @@
package com.fivegroup.common.core.admin;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
*
*
* @author LiuJiaXin
* @version 2023/11/26 - 15:02
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class County {
private Integer countyId;
private Integer cityId;
private String countyName;
}

View File

@ -0,0 +1,42 @@
package com.fivegroup.common.core.admin;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
/**
*
*
* @author LiuJiaXin
* @version 2023/11/28 - 16:33
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@TableName("t_firm")
public class Firm {
@TableId(value = "firm_id",type = IdType.AUTO)
private Integer firmId;
@TableField("firm_name")
private String firmName;
@TableField("firm_admin")
private String firmAdmin;
@TableField("firm_time")
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
private Date firmTime;
@TableField("firm_home")
private String firmHome;
@TableField("firm_vip")
private Integer firmVip;
}

View File

@ -0,0 +1,21 @@
package com.fivegroup.common.core.admin;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
*
*
* @author LiuJiaXin
* @version 2023/11/26 - 15:01
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Province {
private Integer provinceId;
private String provinceName;
}

View File

@ -0,0 +1,176 @@
package com.fivegroup.common.core.annotation;
import com.fivegroup.common.core.utils.poi.ExcelHandlerAdapter;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.IndexedColors;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.math.BigDecimal;
/**
* Excel
*
* @author fivegroup
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Excel {
/**
* excel
*/
public int sort () default Integer.MAX_VALUE;
/**
* Excel.
*/
public String name () default "";
/**
* , : yyyy-MM-dd
*/
public String dateFormat () default "";
/**
* (: 0=,1=,2=)
*/
public String readConverterExp () default "";
/**
*
*/
public String separator () default ",";
/**
* BigDecimal :-1(BigDecimal)
*/
public int scale () default -1;
/**
* BigDecimal :BigDecimal.ROUND_HALF_EVEN
*/
public int roundingMode () default BigDecimal.ROUND_HALF_EVEN;
/**
* excel
*/
public double height () default 14;
/**
* excel
*/
public double width () default 16;
/**
* ,% 90 90%
*/
public String suffix () default "";
/**
* ,
*/
public String defaultValue () default "";
/**
*
*/
public String prompt () default "";
/**
* .
*/
public String[] combo () default {};
/**
* ,:list)
*/
public boolean needMerge () default false;
/**
* ,:,.
*/
public boolean isExport () default true;
/**
* ,,
*/
public String targetAttr () default "";
/**
* ,
*/
public boolean isStatistics () default false;
/**
* 0 1
*/
public ColumnType cellType () default ColumnType.STRING;
/**
*
*/
public IndexedColors headerBackgroundColor () default IndexedColors.GREY_50_PERCENT;
/**
*
*/
public IndexedColors headerColor () default IndexedColors.WHITE;
/**
*
*/
public IndexedColors backgroundColor () default IndexedColors.WHITE;
/**
*
*/
public IndexedColors color () default IndexedColors.BLACK;
/**
*
*/
public HorizontalAlignment align () default HorizontalAlignment.CENTER;
/**
*
*/
public Class<?> handler () default ExcelHandlerAdapter.class;
/**
*
*/
public String[] args () default {};
/**
* 012
*/
Type type () default Type.ALL;
public enum Type {
ALL(0), EXPORT(1), IMPORT(2);
private final int value;
Type (int value) {
this.value = value;
}
public int value () {
return this.value;
}
}
public enum ColumnType {
NUMERIC(0), STRING(1), IMAGE(2);
private final int value;
ColumnType (int value) {
this.value = value;
}
public int value () {
return this.value;
}
}
}

View File

@ -0,0 +1,17 @@
package com.fivegroup.common.core.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Excel
*
* @author fivegroup
*/
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Excels {
Excel[] value ();
}

View File

@ -0,0 +1,58 @@
package com.fivegroup.common.core.constant;
/**
*
*
* @author fivegroup
*/
public class CacheConstants {
/**
* 720
*/
public final static long EXPIRATION = 720;
/**
* 120
*/
public final static long REFRESH_TIME = 120;
/**
*
*/
public final static int PASSWORD_MAX_RETRY_COUNT = 5;
/**
* 10
*/
public final static long PASSWORD_LOCK_TIME = 10;
/**
*
*/
public final static String LOGIN_TOKEN_KEY = "login_tokens:";
/**
* redis key
*/
public static final String CAPTCHA_CODE_KEY = "captcha_codes:";
/**
* cache key
*/
public static final String SYS_CONFIG_KEY = "sys_config:";
/**
* cache key
*/
public static final String SYS_DICT_KEY = "sys_dict:";
/**
* redis key
*/
public static final String PWD_ERR_CNT_KEY = "pwd_err_cnt:";
/**
* IP cache key
*/
public static final String SYS_LOGIN_BLACKIPLIST = SYS_CONFIG_KEY + "sys.login.blackIPList";
}

View File

@ -0,0 +1,134 @@
package com.fivegroup.common.core.constant;
/**
*
*
* @author fivegroup
*/
public class Constants {
/**
* UTF-8
*/
public static final String UTF8 = "UTF-8";
/**
* GBK
*/
public static final String GBK = "GBK";
/**
* www
*/
public static final String WWW = "www.";
/**
* RMI
*/
public static final String LOOKUP_RMI = "rmi:";
/**
* LDAP
*/
public static final String LOOKUP_LDAP = "ldap:";
/**
* LDAPS
*/
public static final String LOOKUP_LDAPS = "ldaps:";
/**
* http
*/
public static final String HTTP = "http://";
/**
* https
*/
public static final String HTTPS = "https://";
/**
*
*/
public static final Integer SUCCESS = 200;
/**
*
*/
public static final Integer FAIL = 500;
/**
*
*/
public static final String LOGIN_SUCCESS_STATUS = "0";
/**
*
*/
public static final String LOGIN_FAIL_STATUS = "1";
/**
*
*/
public static final String LOGIN_SUCCESS = "Success";
/**
*
*/
public static final String LOGOUT = "Logout";
/**
*
*/
public static final String REGISTER = "Register";
/**
*
*/
public static final String LOGIN_FAIL = "Error";
/**
*
*/
public static final String PAGE_NUM = "pageNum";
/**
*
*/
public static final String PAGE_SIZE = "pageSize";
/**
*
*/
public static final String ORDER_BY_COLUMN = "orderByColumn";
/**
* "desc" "asc".
*/
public static final String IS_ASC = "isAsc";
/**
*
*/
public static final long CAPTCHA_EXPIRATION = 2;
/**
*
*/
public static final String RESOURCE_PREFIX = "/profile";
/**
* json
*/
public static final String[] JSON_WHITELIST_STR = {"org.springframework", "com.fivegroup"};
/**
* 访
*/
public static final String[] JOB_WHITELIST_STR = {"com.fivegroup"};
/**
*
*/
public static final String[] JOB_ERROR_STR = {"java.net.URL", "javax.naming.InitialContext", "org.yaml.snakeyaml",
"org.springframework", "org.apache", "com.fivegroup.common.core.utils.file"};
}

View File

@ -0,0 +1,186 @@
package com.fivegroup.common.core.constant;
/**
*
*
* @author fivegroup
*/
public class GenConstants {
/**
*
*/
public static final String TPL_CRUD = "crud";
/**
*
*/
public static final String TPL_TREE = "tree";
/**
*
*/
public static final String TPL_SUB = "sub";
/**
*
*/
public static final String TREE_CODE = "treeCode";
/**
*
*/
public static final String TREE_PARENT_CODE = "treeParentCode";
/**
*
*/
public static final String TREE_NAME = "treeName";
/**
* ID
*/
public static final String PARENT_MENU_ID = "parentMenuId";
/**
*
*/
public static final String PARENT_MENU_NAME = "parentMenuName";
/**
*
*/
public static final String[] COLUMNTYPE_STR = {"char", "varchar", "nvarchar", "varchar2"};
/**
*
*/
public static final String[] COLUMNTYPE_TEXT = {"tinytext", "text", "mediumtext", "longtext"};
/**
*
*/
public static final String[] COLUMNTYPE_TIME = {"datetime", "time", "date", "timestamp"};
/**
*
*/
public static final String[] COLUMNTYPE_NUMBER = {"tinyint", "smallint", "mediumint", "int", "number", "integer",
"bigint", "float", "double", "decimal"};
/**
*
*/
public static final String[] COLUMNNAME_NOT_EDIT = {"id", "create_by", "create_time", "del_flag"};
/**
*
*/
public static final String[] COLUMNNAME_NOT_LIST = {"id", "create_by", "create_time", "del_flag", "update_by",
"update_time"};
/**
*
*/
public static final String[] COLUMNNAME_NOT_QUERY = {"id", "create_by", "create_time", "del_flag", "update_by",
"update_time", "remark"};
/**
* Entity
*/
public static final String[] BASE_ENTITY = {"createBy", "createTime", "updateBy", "updateTime", "remark"};
/**
* Tree
*/
public static final String[] TREE_ENTITY = {"parentName", "parentId", "orderNum", "ancestors"};
/**
*
*/
public static final String HTML_INPUT = "input";
/**
*
*/
public static final String HTML_TEXTAREA = "textarea";
/**
*
*/
public static final String HTML_SELECT = "select";
/**
*
*/
public static final String HTML_RADIO = "radio";
/**
*
*/
public static final String HTML_CHECKBOX = "checkbox";
/**
*
*/
public static final String HTML_DATETIME = "datetime";
/**
*
*/
public static final String HTML_IMAGE_UPLOAD = "imageUpload";
/**
*
*/
public static final String HTML_FILE_UPLOAD = "fileUpload";
/**
*
*/
public static final String HTML_EDITOR = "editor";
/**
*
*/
public static final String TYPE_STRING = "String";
/**
*
*/
public static final String TYPE_INTEGER = "Integer";
/**
*
*/
public static final String TYPE_LONG = "Long";
/**
*
*/
public static final String TYPE_DOUBLE = "Double";
/**
*
*/
public static final String TYPE_BIGDECIMAL = "BigDecimal";
/**
*
*/
public static final String TYPE_DATE = "Date";
/**
*
*/
public static final String QUERY_LIKE = "LIKE";
/**
*
*/
public static final String QUERY_EQ = "EQ";
/**
*
*/
public static final String REQUIRE = "1";
}

View File

@ -0,0 +1,93 @@
package com.fivegroup.common.core.constant;
/**
*
*
* @author fivegroup
*/
public class HttpStatus {
/**
*
*/
public static final int SUCCESS = 200;
/**
*
*/
public static final int CREATED = 201;
/**
*
*/
public static final int ACCEPTED = 202;
/**
*
*/
public static final int NO_CONTENT = 204;
/**
*
*/
public static final int MOVED_PERM = 301;
/**
*
*/
public static final int SEE_OTHER = 303;
/**
*
*/
public static final int NOT_MODIFIED = 304;
/**
*
*/
public static final int BAD_REQUEST = 400;
/**
*
*/
public static final int UNAUTHORIZED = 401;
/**
* 访
*/
public static final int FORBIDDEN = 403;
/**
*
*/
public static final int NOT_FOUND = 404;
/**
* http
*/
public static final int BAD_METHOD = 405;
/**
*
*/
public static final int CONFLICT = 409;
/**
*
*/
public static final int UNSUPPORTED_TYPE = 415;
/**
*
*/
public static final int ERROR = 500;
/**
*
*/
public static final int NOT_IMPLEMENTED = 501;
/**
*
*/
public static final int WARN = 601;
}

View File

@ -0,0 +1,56 @@
package com.fivegroup.common.core.constant;
/**
*
*
* @author fivegroup
*/
public class ScheduleConstants {
public static final String TASK_CLASS_NAME = "TASK_CLASS_NAME";
/**
* key
*/
public static final String TASK_PROPERTIES = "TASK_PROPERTIES";
/**
*
*/
public static final String MISFIRE_DEFAULT = "0";
/**
*
*/
public static final String MISFIRE_IGNORE_MISFIRES = "1";
/**
*
*/
public static final String MISFIRE_FIRE_AND_PROCEED = "2";
/**
*
*/
public static final String MISFIRE_DO_NOTHING = "3";
public enum Status {
/**
*
*/
NORMAL("0"),
/**
*
*/
PAUSE("1");
private String value;
private Status (String value) {
this.value = value;
}
public String getValue () {
return value;
}
}
}

View File

@ -0,0 +1,48 @@
package com.fivegroup.common.core.constant;
/**
*
*
* @author fivegroup
*/
public class SecurityConstants {
/**
* ID
*/
public static final String DETAILS_USER_ID = "user_id";
/**
*
*/
public static final String DETAILS_USERNAME = "username";
/**
*
*/
public static final String AUTHORIZATION_HEADER = "authorization";
/**
*
*/
public static final String FROM_SOURCE = "from-source";
/**
*
*/
public static final String INNER = "inner";
/**
*
*/
public static final String USER_KEY = "user_key";
/**
*
*/
public static final String LOGIN_USER = "login_user";
/**
*
*/
public static final String ROLE_PERMISSION = "role_permission";
}

View File

@ -0,0 +1,23 @@
package com.fivegroup.common.core.constant;
/**
*
*
* @author fivegroup
*/
public class ServiceNameConstants {
/**
* serviceid
*/
public static final String AUTH_SERVICE = "fivegroup-auth";
/**
* serviceid
*/
public static final String SYSTEM_SERVICE = "fivegroup-system";
/**
* serviceid
*/
public static final String FILE_SERVICE = "fivegroup-file";
}

View File

@ -0,0 +1,24 @@
package com.fivegroup.common.core.constant;
/**
* TokenKey
*
* @author fivegroup
*/
public class TokenConstants {
/**
*
*/
public static final String AUTHENTICATION = "Authorization";
/**
*
*/
public static final String PREFIX = "Bearer ";
/**
*
*/
public final static String SECRET = "abcdefghijklmnopqrstuvwxyz";
}

View File

@ -0,0 +1,113 @@
package com.fivegroup.common.core.constant;
/**
*
*
* @author fivegroup
*/
public class UserConstants {
/**
*
*/
public static final String SYS_USER = "SYS_USER";
/**
*
*/
public static final String NORMAL = "0";
/**
*
*/
public static final String EXCEPTION = "1";
/**
*
*/
public static final String USER_DISABLE = "1";
/**
*
*/
public static final String ROLE_DISABLE = "1";
/**
*
*/
public static final String DEPT_NORMAL = "0";
/**
*
*/
public static final String DEPT_DISABLE = "1";
/**
*
*/
public static final String DICT_NORMAL = "0";
/**
*
*/
public static final String YES = "Y";
/**
*
*/
public static final String YES_FRAME = "0";
/**
*
*/
public static final String NO_FRAME = "1";
/**
*
*/
public static final String TYPE_DIR = "M";
/**
*
*/
public static final String TYPE_MENU = "C";
/**
*
*/
public static final String TYPE_BUTTON = "F";
/**
* Layout
*/
public final static String LAYOUT = "Layout";
/**
* ParentView
*/
public final static String PARENT_VIEW = "ParentView";
/**
* InnerLink
*/
public final static String INNER_LINK = "InnerLink";
/**
*
*/
public final static boolean UNIQUE = true;
public final static boolean NOT_UNIQUE = false;
/**
*
*/
public static final int USERNAME_MIN_LENGTH = 2;
public static final int USERNAME_MAX_LENGTH = 20;
/**
*
*/
public static final int PASSWORD_MIN_LENGTH = 5;
public static final int PASSWORD_MAX_LENGTH = 20;
}

View File

@ -0,0 +1,83 @@
package com.fivegroup.common.core.context;
import com.alibaba.ttl.TransmittableThreadLocal;
import com.fivegroup.common.core.constant.SecurityConstants;
import com.fivegroup.common.core.text.Convert;
import com.fivegroup.common.core.utils.StringUtils;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* 线 idToken
* HeaderInterceptor
*
* @author fivegroup
*/
public class SecurityContextHolder {
private static final TransmittableThreadLocal<Map<String, Object>> THREAD_LOCAL = new TransmittableThreadLocal<>();
public static void set (String key, Object value) {
Map<String, Object> map = getLocalMap();
map.put(key, value == null ? StringUtils.EMPTY : value);
}
public static String get (String key) {
Map<String, Object> map = getLocalMap();
return Convert.toStr(map.getOrDefault(key, StringUtils.EMPTY));
}
public static <T> T get (String key, Class<T> clazz) {
Map<String, Object> map = getLocalMap();
return StringUtils.cast(map.getOrDefault(key, null));
}
public static Map<String, Object> getLocalMap () {
Map<String, Object> map = THREAD_LOCAL.get();
if (map == null) {
map = new ConcurrentHashMap<String, Object>();
THREAD_LOCAL.set(map);
}
return map;
}
public static void setLocalMap (Map<String, Object> threadLocalMap) {
THREAD_LOCAL.set(threadLocalMap);
}
public static Long getUserId () {
return Convert.toLong(get(SecurityConstants.DETAILS_USER_ID), 0L);
}
public static void setUserId (String account) {
set(SecurityConstants.DETAILS_USER_ID, account);
}
public static String getUserName () {
return get(SecurityConstants.DETAILS_USERNAME);
}
public static void setUserName (String username) {
set(SecurityConstants.DETAILS_USERNAME, username);
}
public static String getUserKey () {
return get(SecurityConstants.USER_KEY);
}
public static void setUserKey (String userKey) {
set(SecurityConstants.USER_KEY, userKey);
}
public static String getPermission () {
return get(SecurityConstants.ROLE_PERMISSION);
}
public static void setPermission (String permissions) {
set(SecurityConstants.ROLE_PERMISSION, permissions);
}
public static void remove () {
THREAD_LOCAL.remove();
}
}

View File

@ -0,0 +1,113 @@
package com.fivegroup.common.core.domain;
import com.fivegroup.common.core.constant.Constants;
import com.fivegroup.common.core.constant.HttpStatus;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
*
*
* @author fivegroup
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Result<T> implements Serializable {
/**
*
*/
public static final int SUCCESS = Constants.SUCCESS;
/**
*
*/
public static final int FAIL = Constants.FAIL;
/**
*
*/
public static final int WARN = HttpStatus.WARN;
private static final long serialVersionUID = 1L;
private int code;
private String msg;
private T data;
public static <T> Result<T> success () {
return restResult(null, SUCCESS, null);
}
public static <T> Result<T> success (T data) {
return restResult(data, SUCCESS, null);
}
public static <T> Result<T> success (T data, String msg) {
return restResult(data, SUCCESS, msg);
}
public static <T> Result<T> error () {
return restResult(null, FAIL, null);
}
public static <T> Result<T> error (String msg) {
return restResult(null, FAIL, msg);
}
public static <T> Result<T> error (T data) {
return restResult(data, FAIL, null);
}
public static <T> Result<T> error (T data, String msg) {
return restResult(data, FAIL, msg);
}
public static <T> Result<T> error (int code, String msg) {
return restResult(null, code, msg);
}
public static <T> Result<T> warn () {
return restResult(null, WARN, null);
}
public static <T> Result<T> warn (String msg) {
return restResult(null, WARN, msg);
}
public static <T> Result<T> warn (T data) {
return restResult(data, WARN, null);
}
public static <T> Result<T> warn (T data, String msg) {
return restResult(data, WARN, msg);
}
public static <T> Result<T> warn (int code, String msg) {
return restResult(null, code, msg);
}
private static <T> Result<T> restResult (T data, int code, String msg) {
return Result.<T>builder()
.code(code)
.data(data)
.msg(msg)
.build();
}
public static <T> Boolean isError (Result<T> ret) {
return !isSuccess(ret);
}
public static <T> Boolean isSuccess (Result<T> ret) {
return Result.SUCCESS == ret.getCode();
}
}

View File

@ -0,0 +1,26 @@
package com.fivegroup.common.core.enums;
/**
*
*
* @author fivegroup
*/
public enum UserStatus {
OK("0", "正常"), DISABLE("1", "停用"), DELETED("2", "删除");
private final String code;
private final String info;
UserStatus (String code, String info) {
this.code = code;
this.info = info;
}
public String getCode () {
return code;
}
public String getInfo () {
return info;
}
}

View File

@ -0,0 +1,14 @@
package com.fivegroup.common.core.exception;
/**
*
*
* @author fivegroup
*/
public class CaptchaException extends RuntimeException {
private static final long serialVersionUID = 1L;
public CaptchaException (String msg) {
super(msg);
}
}

View File

@ -0,0 +1,26 @@
package com.fivegroup.common.core.exception;
/**
*
*
* @author fivegroup
*/
public class CheckedException extends RuntimeException {
private static final long serialVersionUID = 1L;
public CheckedException (String message) {
super(message);
}
public CheckedException (Throwable cause) {
super(cause);
}
public CheckedException (String message, Throwable cause) {
super(message, cause);
}
public CheckedException (String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
}

View File

@ -0,0 +1,13 @@
package com.fivegroup.common.core.exception;
/**
*
*
* @author fivegroup
*/
public class DemoModeException extends RuntimeException {
private static final long serialVersionUID = 1L;
public DemoModeException () {
}
}

View File

@ -0,0 +1,51 @@
package com.fivegroup.common.core.exception;
/**
*
*
* @author fivegroup
*/
public class GlobalException extends RuntimeException {
private static final long serialVersionUID = 1L;
/**
*
*/
private String message;
/**
*
* <p>
* {@link CommonResult#getDetailMessage()}
*/
private String detailMessage;
/**
*
*/
public GlobalException () {
}
public GlobalException (String message) {
this.message = message;
}
public String getDetailMessage () {
return detailMessage;
}
public GlobalException setDetailMessage (String detailMessage) {
this.detailMessage = detailMessage;
return this;
}
@Override
public String getMessage () {
return message;
}
public GlobalException setMessage (String message) {
this.message = message;
return this;
}
}

View File

@ -0,0 +1,14 @@
package com.fivegroup.common.core.exception;
/**
*
*
* @author fivegroup
*/
public class InnerAuthException extends RuntimeException {
private static final long serialVersionUID = 1L;
public InnerAuthException (String message) {
super(message);
}
}

View File

@ -0,0 +1,13 @@
package com.fivegroup.common.core.exception;
/**
*
*
* @author fivegroup
*/
public class PreAuthorizeException extends RuntimeException {
private static final long serialVersionUID = 1L;
public PreAuthorizeException () {
}
}

View File

@ -0,0 +1,65 @@
package com.fivegroup.common.core.exception;
/**
*
*
* @author fivegroup
*/
public final class ServiceException extends RuntimeException {
private static final long serialVersionUID = 1L;
/**
*
*/
private Integer code;
/**
*
*/
private String message;
/**
*
* <p>
* {@link CommonResult#getDetailMessage()}
*/
private String detailMessage;
/**
*
*/
public ServiceException () {
}
public ServiceException (String message) {
this.message = message;
}
public ServiceException (String message, Integer code) {
this.message = message;
this.code = code;
}
public String getDetailMessage () {
return detailMessage;
}
public ServiceException setDetailMessage (String detailMessage) {
this.detailMessage = detailMessage;
return this;
}
@Override
public String getMessage () {
return message;
}
public ServiceException setMessage (String message) {
this.message = message;
return this;
}
public Integer getCode () {
return code;
}
}

View File

@ -0,0 +1,22 @@
package com.fivegroup.common.core.exception;
/**
*
*
* @author fivegroup
*/
public class UtilException extends RuntimeException {
private static final long serialVersionUID = 8247610319171014183L;
public UtilException (Throwable e) {
super(e.getMessage(), e);
}
public UtilException (String message) {
super(message);
}
public UtilException (String message, Throwable throwable) {
super(message, throwable);
}
}

View File

@ -0,0 +1,14 @@
package com.fivegroup.common.core.exception.auth;
/**
*
*
* @author fivegroup
*/
public class NotLoginException extends RuntimeException {
private static final long serialVersionUID = 1L;
public NotLoginException (String message) {
super(message);
}
}

View File

@ -0,0 +1,20 @@
package com.fivegroup.common.core.exception.auth;
import org.apache.commons.lang3.StringUtils;
/**
*
*
* @author fivegroup
*/
public class NotPermissionException extends RuntimeException {
private static final long serialVersionUID = 1L;
public NotPermissionException (String permission) {
super(permission);
}
public NotPermissionException (String[] permissions) {
super(StringUtils.join(permissions, ","));
}
}

View File

@ -0,0 +1,20 @@
package com.fivegroup.common.core.exception.auth;
import org.apache.commons.lang3.StringUtils;
/**
*
*
* @author fivegroup
*/
public class NotRoleException extends RuntimeException {
private static final long serialVersionUID = 1L;
public NotRoleException (String role) {
super(role);
}
public NotRoleException (String[] roles) {
super(StringUtils.join(roles, ","));
}
}

View File

@ -0,0 +1,69 @@
package com.fivegroup.common.core.exception.base;
/**
*
*
* @author fivegroup
*/
public class BaseException extends RuntimeException {
private static final long serialVersionUID = 1L;
/**
*
*/
private String module;
/**
*
*/
private String code;
/**
*
*/
private Object[] args;
/**
*
*/
private String defaultMessage;
public BaseException (String module, String code, Object[] args, String defaultMessage) {
this.module = module;
this.code = code;
this.args = args;
this.defaultMessage = defaultMessage;
}
public BaseException (String module, String code, Object[] args) {
this(module, code, args, null);
}
public BaseException (String module, String defaultMessage) {
this(module, null, null, defaultMessage);
}
public BaseException (String code, Object[] args) {
this(null, code, args, null);
}
public BaseException (String defaultMessage) {
this(null, null, null, defaultMessage);
}
public String getModule () {
return module;
}
public String getCode () {
return code;
}
public Object[] getArgs () {
return args;
}
public String getDefaultMessage () {
return defaultMessage;
}
}

View File

@ -0,0 +1,17 @@
package com.fivegroup.common.core.exception.file;
import com.fivegroup.common.core.exception.base.BaseException;
/**
*
*
* @author fivegroup
*/
public class FileException extends BaseException {
private static final long serialVersionUID = 1L;
public FileException (String code, Object[] args, String msg) {
super("file", code, args, msg);
}
}

View File

@ -0,0 +1,14 @@
package com.fivegroup.common.core.exception.file;
/**
*
*
* @author fivegroup
*/
public class FileNameLengthLimitExceededException extends FileException {
private static final long serialVersionUID = 1L;
public FileNameLengthLimitExceededException (int defaultFileNameLength) {
super("upload.filename.exceed.length", new Object[]{defaultFileNameLength}, "the filename is too long");
}
}

View File

@ -0,0 +1,14 @@
package com.fivegroup.common.core.exception.file;
/**
*
*
* @author fivegroup
*/
public class FileSizeLimitExceededException extends FileException {
private static final long serialVersionUID = 1L;
public FileSizeLimitExceededException (long defaultMaxSize) {
super("upload.exceed.maxSize", new Object[]{defaultMaxSize}, "the filesize is too large");
}
}

View File

@ -0,0 +1,52 @@
package com.fivegroup.common.core.exception.file;
import java.io.PrintStream;
import java.io.PrintWriter;
/**
*
*
* @author fivegroup
*/
public class FileUploadException extends Exception {
private static final long serialVersionUID = 1L;
private final Throwable cause;
public FileUploadException () {
this(null, null);
}
public FileUploadException (final String msg) {
this(msg, null);
}
public FileUploadException (String msg, Throwable cause) {
super(msg);
this.cause = cause;
}
@Override
public void printStackTrace (PrintStream stream) {
super.printStackTrace(stream);
if (cause != null) {
stream.println("Caused by:");
cause.printStackTrace(stream);
}
}
@Override
public void printStackTrace (PrintWriter writer) {
super.printStackTrace(writer);
if (cause != null) {
writer.println("Caused by:");
cause.printStackTrace(writer);
}
}
@Override
public Throwable getCause () {
return cause;
}
}

View File

@ -0,0 +1,67 @@
package com.fivegroup.common.core.exception.file;
import java.util.Arrays;
/**
*
*
* @author fivegroup
*/
public class InvalidExtensionException extends FileUploadException {
private static final long serialVersionUID = 1L;
private String[] allowedExtension;
private String extension;
private String filename;
public InvalidExtensionException (String[] allowedExtension, String extension, String filename) {
super("filename : [" + filename + "], extension : [" + extension + "], allowed extension : [" + Arrays.toString(allowedExtension) + "]");
this.allowedExtension = allowedExtension;
this.extension = extension;
this.filename = filename;
}
public String[] getAllowedExtension () {
return allowedExtension;
}
public String getExtension () {
return extension;
}
public String getFilename () {
return filename;
}
public static class InvalidImageExtensionException extends InvalidExtensionException {
private static final long serialVersionUID = 1L;
public InvalidImageExtensionException (String[] allowedExtension, String extension, String filename) {
super(allowedExtension, extension, filename);
}
}
public static class InvalidFlashExtensionException extends InvalidExtensionException {
private static final long serialVersionUID = 1L;
public InvalidFlashExtensionException (String[] allowedExtension, String extension, String filename) {
super(allowedExtension, extension, filename);
}
}
public static class InvalidMediaExtensionException extends InvalidExtensionException {
private static final long serialVersionUID = 1L;
public InvalidMediaExtensionException (String[] allowedExtension, String extension, String filename) {
super(allowedExtension, extension, filename);
}
}
public static class InvalidVideoExtensionException extends InvalidExtensionException {
private static final long serialVersionUID = 1L;
public InvalidVideoExtensionException (String[] allowedExtension, String extension, String filename) {
super(allowedExtension, extension, filename);
}
}
}

View File

@ -0,0 +1,29 @@
package com.fivegroup.common.core.exception.job;
/**
*
*
* @author fivegroup
*/
public class TaskException extends Exception {
private static final long serialVersionUID = 1L;
private Code code;
public TaskException (String msg, Code code) {
this(msg, code, null);
}
public TaskException (String msg, Code code, Exception nestedEx) {
super(msg, nestedEx);
this.code = code;
}
public Code getCode () {
return code;
}
public enum Code {
TASK_EXISTS, NO_TASK_EXISTS, TASK_ALREADY_STARTED, UNKNOWN, CONFIG_ERROR, TASK_NODE_NOT_AVAILABLE
}
}

View File

@ -0,0 +1,14 @@
package com.fivegroup.common.core.exception.user;
/**
*
*
* @author fivegroup
*/
public class CaptchaExpireException extends UserException {
private static final long serialVersionUID = 1L;
public CaptchaExpireException () {
super("user.jcaptcha.expire", null);
}
}

View File

@ -0,0 +1,16 @@
package com.fivegroup.common.core.exception.user;
import com.fivegroup.common.core.exception.base.BaseException;
/**
*
*
* @author fivegroup
*/
public class UserException extends BaseException {
private static final long serialVersionUID = 1L;
public UserException (String code, Object[] args) {
super("user", code, args, null);
}
}

View File

@ -0,0 +1,14 @@
package com.fivegroup.common.core.exception.user;
/**
*
*
* @author fivegroup
*/
public class UserPasswordNotMatchException extends UserException {
private static final long serialVersionUID = 1L;
public UserPasswordNotMatchException () {
super("user.password.not.match", null);
}
}

View File

@ -0,0 +1,52 @@
package com.fivegroup.common.core.real;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
*
*
* @author ZhangXushuo
* @version 2023/11/21
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Battery {
/**
* id
*/
private Integer batteryId;
/**
*
*/
private String batteryBh;
/**
*
*/
private String batteryName;
/**
*
*/
private Integer batterymakerId;
/**
* id
*/
private Integer batteryCapacity;
/**
*
*/
private Integer batteryVoltage;
/**
*id
*/
private String batteryQuality;
/**
*
*/
private Integer batteryDate;
}

View File

@ -0,0 +1,28 @@
package com.fivegroup.common.core.real;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
*
*
* @author ZhangXushuo
* @version 2023/11/21
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class BatteryMaker {
/**
* id
*/
private Integer batterymakerId;
/**
*
*/
private String batterymakerName;
}

View File

@ -0,0 +1,40 @@
package com.fivegroup.common.core.real;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
*
*
* @author ZhangXushuo
* @version 2023/11/21
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Batterys {
/**
* id
*/
private Integer batterysId;
/**
*
*/
private String batterysName;
/**
*
*/
private String batterysCode;
/**
*
*/
private String batterysArgument;
/**
*
*/
private Integer batteryNum;
}

View File

@ -0,0 +1,73 @@
package com.fivegroup.common.core.real;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
*
*
* @author ZhangXushuo
* @version 2023/11/21
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Car {
/*
*
*/
private Integer carId;
/**
*
*
*/
private String carCode;
/**
* vin
*/
private String carVin;
/**
* id
*/
private Integer cartypeId;
/**
* id
*/
private Integer fenceId;
/**
*
*/
private Integer carStatus;
/**
*
*/
private Integer batterymakerId;
/**
*
*/
private Integer motormanufacturerId;
/**
*
*/
private Integer motorId;
/**
*
*/
private Integer batteryId;
/**
*
*/
private Integer actuateId;
/**
*
*/
private String operatingArea;
/**
* id
*/
private Integer firmId;
}

View File

@ -0,0 +1,52 @@
package com.fivegroup.common.core.real;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
*
*
* @author ZhangXushuo
* @version 2023/11/21
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class CarStatus {
/**
* id
*/
private Integer carstatusId;
/**
* GPS
*/
private Integer isGps;
/**
*
*/
private String isExercise;
/**
* CAN
*/
private Integer ispresenceData ;
/**
* GPS
*/
private String intensity;
/**
* 线
*/
private Integer isOnline;
/**
*
*/
private Integer restartNum;
/**
*
*/
private Integer voltage;
}

View File

@ -0,0 +1,28 @@
package com.fivegroup.common.core.real;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
*
*
* @author ZhangXushuo
* @version 2023/11/21
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class CarType {
/**
* id
*/
private Integer cartypeId;
/**
*
*/
private Integer cartypeName;
}

View File

@ -0,0 +1,44 @@
package com.fivegroup.common.core.real;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
*
*
* @author ZhangXushuo
* @version 2023/11/21
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Frence {
/**
* ID
*/
private Integer fenceId;
/**
*
*/
private String fenceName;
/**
*
*/
private String longitude;
/**
*
*/
private String dimensionality;
/**
*
*/
private Integer frencetypeId;
/**
*
*/
private Integer frence_status;
}

View File

@ -0,0 +1,76 @@
package com.fivegroup.common.core.real;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
*
*
* @author ZhangXushuo
* @version 2023/11/21
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class HistoryData {
/**
* id
*/
private Integer historydataId;
/**
*
*/
private Integer carTrajectory;
/**
*
*/
private Integer carSpeed;
/**
*
*/
private Integer batteryTemperature;
/**
*
*/
private Integer batteryVoltage;
/**
*
*/
private Integer actuateSpeed;
/**
* BMS
*/
private Integer selfCheckcounter;
/**
* id
*/
private Integer batteryId;
/**
*
*/
private Integer gearPosition;
/**
*
*/
private String singlemaximumVoltage;
/**
*
*/
private String specificfuelConsumption;
/**
*
*/
private String insulationResistance;
/**
*
*/
private String maximumfeedbackPower;
/**
*
*/
private String maximumTemperature;
}

Some files were not shown because too many files have changed in this diff Show More