Compare commits

...

54 Commits

Author SHA1 Message Date
tiger_zhou deb02d753e 1 2023-03-13 14:33:54 +08:00
tiger_zhou 9080f7331c 1 2023-03-13 14:03:10 +08:00
tiger_zhou 55a5b31dee 调整ncc 数据发布 2023-03-13 13:42:09 +08:00
tiger_zhou 6838e18531 修改 2023-03-07 16:03:13 +08:00
weizhihong 0396b88c2b 【修改NCC更新逻辑】 2023-03-02 17:55:51 +08:00
weizhihong b8cae4edfa 【NCC world事件操作】 2023-03-02 17:16:40 +08:00
weizhihong 01cd3adc46 【NCC world管理器】 2023-03-02 15:23:43 +08:00
weizhihong 0d1d726d69 【列车状态运行系统】 2023-03-01 10:18:47 +08:00
weizhihong 5eeb1997b9 Merge branch 'test-module' of https://git.code.tencent.com/lian-cbtc/rtss-server into test-module 2023-02-28 15:10:46 +08:00
weizhihong 3490b1e7dc 【列车行驶位置系统更新功能】 2023-02-28 15:10:19 +08:00
weizhihong 3371b87a43 Merge branch 'master' of https://git.code.tencent.com/lian-cbtc/rtss-server into test-module 2023-02-28 14:41:16 +08:00
tiger_zhou 5ab8b74e9b 更改uri 2023-02-28 14:21:40 +08:00
tiger_zhou 46ceb6599d Merge branch 'test-module' of https://git.code.tencent.com/lian-cbtc/rtss-server into test-module-zhouyin 2023-02-28 14:15:59 +08:00
weizhihong f1aeee553c 【ncc消息实体】 2023-02-28 13:53:11 +08:00
tiger_zhou ecbcd20f0d init 2023-02-28 13:19:41 +08:00
tiger_zhou 1c745a4af3 init 2023-02-28 13:07:37 +08:00
tiger_zhou 4e4307d587 Merge branch 'test-module-zhouyin' into test-module 2023-02-28 09:18:01 +08:00
tiger_zhou ba90df0c21 1 2023-02-28 09:17:21 +08:00
tiger_zhou 135eef69e4 Merge branch 'test-module-zhouyin' into test-module
# Conflicts:
#	jl-rtss-simulation/NCC/pom.xml
#	jl-rtss-simulation/ncc/pom.xml
#	jl-rtss-simulation/pom.xml
2023-02-28 09:07:17 +08:00
tiger_zhou 45bdd630d9 Merge branch 'test-module' of https://git.code.tencent.com/lian-cbtc/rtss-server into test-module-zhouyin
 Conflicts:
	jl-rtss-simulation/NCC/pom.xml
	jl-rtss-simulation/ncc/pom.xml
	jl-rtss-simulation/pom.xml
2023-02-28 08:56:42 +08:00
tiger_zhou 04db1a64f3 Merge remote-tracking branch 'origin/test-module' into test-module 2023-02-28 08:51:27 +08:00
tiger_zhou 8e1e468b6b init 2023-02-28 08:51:15 +08:00
tiger_zhou 8704a5cbb8 init 2023-02-28 08:48:55 +08:00
tiger_zhou 853a2d80f2 init 2023-02-28 08:42:37 +08:00
weizhihong c7e5abcf57 【修改pom】 2023-02-27 18:46:09 +08:00
weizhihong c5b31292a2 【小写ncc文件夹】 2023-02-27 18:28:32 +08:00
weizhihong 12c898cdd8 【尝试删除大写NCC文件夹】 2023-02-27 18:27:03 +08:00
tiger_zhou 254bed7451 Merge branch 'test-module' of https://git.code.tencent.com/lian-cbtc/rtss-server into test-module-zhouyin
 Conflicts:
	jl-rtss-simulation/ncc/src/main/java/club/joylink/rtss/simulation/ncc/controller/RtsNccMapDataController.java
	jl-rtss-simulation/pom.xml
2023-02-27 18:02:55 +08:00
tiger_zhou 9b0af3f764 init 2023-02-27 18:01:29 +08:00
tiger_zhou e85106ec08 init 2023-02-27 18:00:37 +08:00
tiger_zhou dcaeea1b3d init 2023-02-27 17:50:06 +08:00
tiger_zhou a51274f20f init 2023-02-27 17:45:26 +08:00
tiger_zhou 566378c4f8 init 2023-02-27 17:42:29 +08:00
weizhihong b555ca2ac3 【删除message对象】 2023-02-27 17:28:29 +08:00
weizhihong 7e3bff68ff Merge branch 'test-module' of https://git.code.tencent.com/lian-cbtc/rtss-server into test-module
# Conflicts:
#	jl-rtss-simulation/pom.xml
2023-02-27 16:32:35 +08:00
weizhihong e8438adcb7 【仿真NCC模块】 2023-02-27 16:28:59 +08:00
tiger_zhou c095ab84c2 ncc 2023-02-27 16:19:01 +08:00
tiger_zhou eda2131f26 修改添加ncc模块,添加ncc-message作为子模块 2023-02-27 14:18:48 +08:00
tiger_zhou 5b2a704468 修改添加ncc模块,添加ncc-message作为子模块 2023-02-27 13:50:38 +08:00
tiger_zhou 1ce9312497 添加对 ncc,message 的依赖 2023-02-27 11:21:53 +08:00
tiger_zhou 05fa2609b7 添加对应权限"白名单"功能 2023-02-24 18:02:50 +08:00
weizhihong bbb8c7588b Merge remote-tracking branch 'remotes/origin/test-training2' into test-module
# Conflicts:
#	jl-rtss-manage/src/main/java/club/joylink/rtss/manage/controller/publish/MapFunctionController.java
#	jl-rtss-manage/src/main/java/club/joylink/rtss/manage/controller/training2/TrainingV2PublishController.java
#	jl-rtss-manage/src/main/java/club/joylink/rtss/manage/dao/MapFunctionTemplateDAO.java
#	jl-rtss-manage/src/main/java/club/joylink/rtss/manage/entity/MapFunctionTemplate.java
#	jl-rtss-manage/src/main/java/club/joylink/rtss/manage/entity/MapFunctionTemplateExample.java
#	jl-rtss-manage/src/main/java/club/joylink/rtss/manage/services/mapFunction/RtsMapFunctionServiceImpl.java
#	jl-rtss-manage/src/main/java/club/joylink/rtss/manage/services/org/OrgProjectService.java
#	jl-rtss-manage/src/main/java/club/joylink/rtss/manage/services/paper/PaperUserSubmitAnswerService.java
#	jl-rtss-manage/src/main/java/club/joylink/rtss/manage/services/permission/OldPermissionDataSyncService.java
#	jl-rtss-manage/src/main/java/club/joylink/rtss/manage/services/permission/SystemAbilityService.java
#	jl-rtss-manage/src/main/java/club/joylink/rtss/manage/services/training2/Training2DraftService.java
#	jl-rtss-manage/src/main/java/club/joylink/rtss/manage/simulation/cbtc/ATS/operation/handler/StationOperateHandler.java
#	jl-rtss-manage/src/main/java/club/joylink/rtss/manage/simulation/cbtc/ATS/operation/vo/OperationModeParam.java
#	jl-rtss-manage/src/main/java/club/joylink/rtss/manage/simulation/cbtc/ATS/operation/vo/RouteModelParam.java
#	jl-rtss-manage/src/main/java/club/joylink/rtss/manage/simulation/cbtc/ATS/service/AtsStationService.java
#	jl-rtss-manage/src/main/java/club/joylink/rtss/manage/simulation/cbtc/CI/CiLogic.java
#	jl-rtss-manage/src/main/java/club/joylink/rtss/manage/simulation/cbtc/CI/device/CiRouteService.java
#	jl-rtss-manage/src/main/java/club/joylink/rtss/manage/simulation/cbtc/SimulationServiceImpl.java
#	jl-rtss-manage/src/main/java/club/joylink/rtss/manage/simulation/cbtc/data/storage/device/StorageStation.java
#	jl-rtss-manage/src/main/java/club/joylink/rtss/manage/simulation/cbtc/data/vr/VirtualRealityPsl.java
#	jl-rtss-manage/src/main/java/club/joylink/rtss/manage/simulation/cbtc/onboard/ATP/ATPService.java
#	jl-rtss-manage/src/main/java/club/joylink/rtss/manage/vo/client/mapFunction/MapFunctionBatchModifyVO.java
#	jl-rtss-manage/src/main/java/club/joylink/rtss/manage/vo/client/mapFunction/MapFunctionCreateVO.java
#	jl-rtss-manage/src/main/java/club/joylink/rtss/manage/vo/client/mapFunction/MapFunctionGenerateParamVO.java
#	jl-rtss-manage/src/main/java/club/joylink/rtss/manage/vo/client/mapFunction/MapFunctionGenerateVO.java
#	jl-rtss-manage/src/main/java/club/joylink/rtss/manage/vo/client/mapFunction/MapFunctionQueryVO.java
#	jl-rtss-manage/src/main/java/club/joylink/rtss/manage/vo/client/mapFunction/MapFunctionUpdateVO.java
#	jl-rtss-manage/src/main/java/club/joylink/rtss/manage/vo/client/mapFunction/MapFunctionVO.java
#	jl-rtss-manage/src/main/java/club/joylink/rtss/manage/vo/client/mapFunction/RtsMapFunctionCreateVO.java
#	jl-rtss-manage/src/main/java/club/joylink/rtss/manage/vo/client/mapFunction/RtsMapFunctionGenerateParamVO.java
#	jl-rtss-manage/src/main/java/club/joylink/rtss/manage/vo/client/mapFunction/RtsMapFunctionQueryVO.java
#	jl-rtss-manage/src/main/java/club/joylink/rtss/manage/vo/client/mapFunction/RtsMapFunctionUpdateVO.java
#	jl-rtss-manage/src/main/java/club/joylink/rtss/manage/vo/client/mapFunction/RtsMapFunctionVO.java
#	jl-rtss-manage/src/main/java/club/joylink/rtss/manage/vo/permission/convertor/SystemAbilityConvertor.java
#	jl-rtss-manage/src/main/java/club/joylink/rtss/manage/vo/training2/draft/UpdateStepReqVo.java
#	jl-rtss-manage/src/main/java/club/joylink/rtss/manage/websocket/WebsocketConfig.java
#	jl-rtss-manage/src/main/java/club/joylink/rtss/manage/websocket/interceptor/VSimpleInterceptor.java
#	jl-rtss-manage/src/main/resources/mybatis/mapper/MapFunctionTemplateDAO.xml
#	jl-rtss-manage/src/test/java/club/joylink/rtss/manage/services/mapSystem/RtsMapFunctionServiceImplTest.java
#	src/main/java/club/joylink/rtss/vo/client/mapFunction/RtsMapFunctionCreateVO.java
#	src/main/java/club/joylink/rtss/vo/client/mapFunction/RtsMapFunctionGenerateParamVO.java
#	src/main/java/club/joylink/rtss/vo/client/mapFunction/RtsMapFunctionQueryVO.java
#	src/main/java/club/joylink/rtss/vo/client/mapFunction/RtsMapFunctionUpdateVO.java
#	src/main/java/club/joylink/rtss/vo/client/mapFunction/RtsMapFunctionVO.java
#	src/main/resources/application.yml
2023-02-23 17:55:24 +08:00
walker e21af8c413 添加开发路线功能描述 2023-02-23 15:29:02 +08:00
walker 8ff3e3218c 代码结构调整,模块化,分为auth、simulation、manage三个模块 2023-02-23 14:10:11 +08:00
tiger_zhou 8728d9ffa0 Merge branch 'test-training2' 2023-02-20 09:27:44 +08:00
tiger_zhou 94c07b26dc Merge branch 'test-training2' 2023-02-17 18:42:55 +08:00
tiger_zhou 9b12e5adcb Merge remote-tracking branch 'origin/test-training2' 2023-02-17 18:19:03 +08:00
joylink_zhangsai 2a9d51d629 Merge remote-tracking branch 'origin/master' 2023-01-29 15:39:03 +08:00
thesai daec9c8aaf Merge remote-tracking branch 'origin/test' 2022-05-29 20:20:25 +08:00
joylink_zhangsai d703a3e128 Merge remote-tracking branch 'origin/test' 2021-04-12 19:07:23 +08:00
joylink_zhangsai 9656fdb80e Merge remote-tracking branch 'origin/test' 2021-04-12 18:50:08 +08:00
joylink_zhangsai 7fad4fd3ae Merge remote-tracking branch 'origin/master'
# Conflicts:
#	src/main/java/club/joylink/rtss/wechat/MiniProgramAccessTokenManager.java
#	src/main/java/club/joylink/rtss/wechat/MiniProgramServiceImpl.java
2020-12-31 18:21:41 +08:00
walker-sheng 9426e4ddeb 修改微信服务获取token接口调用 2020-12-30 14:38:51 +08:00
walker-sheng 4628dc3fcb 修改小程序access_token获取 2020-12-29 18:37:29 +08:00
3033 changed files with 65136 additions and 45094 deletions

6
.gitmodules vendored Normal file
View File

@ -0,0 +1,6 @@
[submodule "ecs"]
path = ecs
url = https://git.code.tencent.com/joylink-common/ecs.git
[submodule "jl-rtss-simulation/NCC/ncc-message"]
path = jl-rtss-simulation/NCC/ncc-message
url = https://git.code.tencent.com/lian-cbtc/NCC/ncc-message.git

View File

@ -1,117 +0,0 @@
/*
* Copyright 2007-present the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import java.net.*;
import java.io.*;
import java.nio.channels.*;
import java.util.Properties;
public class MavenWrapperDownloader {
private static final String WRAPPER_VERSION = "0.5.6";
/**
* Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided.
*/
private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/"
+ WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar";
/**
* Path to the maven-wrapper.properties file, which might contain a downloadUrl property to
* use instead of the default one.
*/
private static final String MAVEN_WRAPPER_PROPERTIES_PATH =
".mvn/wrapper/maven-wrapper.properties";
/**
* Path where the maven-wrapper.jar will be saved to.
*/
private static final String MAVEN_WRAPPER_JAR_PATH =
".mvn/wrapper/maven-wrapper.jar";
/**
* Name of the property which should be used to override the default download url for the wrapper.
*/
private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl";
public static void main(String args[]) {
System.out.println("- Downloader started");
File baseDirectory = new File(args[0]);
System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath());
// If the maven-wrapper.properties exists, read it and check if it contains a custom
// wrapperUrl parameter.
File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH);
String url = DEFAULT_DOWNLOAD_URL;
if(mavenWrapperPropertyFile.exists()) {
FileInputStream mavenWrapperPropertyFileInputStream = null;
try {
mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile);
Properties mavenWrapperProperties = new Properties();
mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream);
url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url);
} catch (IOException e) {
System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'");
} finally {
try {
if(mavenWrapperPropertyFileInputStream != null) {
mavenWrapperPropertyFileInputStream.close();
}
} catch (IOException e) {
// Ignore ...
}
}
}
System.out.println("- Downloading from: " + url);
File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH);
if(!outputFile.getParentFile().exists()) {
if(!outputFile.getParentFile().mkdirs()) {
System.out.println(
"- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'");
}
}
System.out.println("- Downloading to: " + outputFile.getAbsolutePath());
try {
downloadFileFromURL(url, outputFile);
System.out.println("Done");
System.exit(0);
} catch (Throwable e) {
System.out.println("- Error downloading");
e.printStackTrace();
System.exit(1);
}
}
private static void downloadFileFromURL(String urlString, File destination) throws Exception {
if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) {
String username = System.getenv("MVNW_USERNAME");
char[] password = System.getenv("MVNW_PASSWORD").toCharArray();
Authenticator.setDefault(new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
}
URL website = new URL(urlString);
ReadableByteChannel rbc;
rbc = Channels.newChannel(website.openStream());
FileOutputStream fos = new FileOutputStream(destination);
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
fos.close();
rbc.close();
}
}

Binary file not shown.

View File

@ -1,2 +0,0 @@
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip
wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar

12
README.md Normal file
View File

@ -0,0 +1,12 @@
# 项目说明
轨道交通服务
此项目有git子模块拉取代码后需执行git submodule init && git submodule update来拉取更新ecs代码
# 开发运行说明
代码修改可以直接使用IDEA的build工具(未测试)子模块的yml配置文件修改需要重新运行顶级的package进行重新打包否则不生效
# 路线图
- jenkins打包发布需要调整
- 登录相关代码重新在auth模块实现
- 白名单数据库管理
- 使用jwt实现免登录

1
ecs Submodule

@ -0,0 +1 @@
Subproject commit 26e482c846b3bdc21061c55036a446d21db00dbb

33
jl-rtss-auth/.gitignore vendored Normal file
View File

@ -0,0 +1,33 @@
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/

2
jl-rtss-auth/README.md Normal file
View File

@ -0,0 +1,2 @@
# 项目说明
轨道交通认证

73
jl-rtss-auth/pom.xml Normal file
View File

@ -0,0 +1,73 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>club.joylink.rtss</groupId>
<artifactId>rtss-server</artifactId>
<version>0.1</version>
</parent>
<groupId>club.joylink.rtss</groupId>
<artifactId>auth</artifactId>
<version>0.1</version>
<name>auth</name>
<description>轨道交通认证模块</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Swagger UI -->
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>1.6.13</version>
</dependency>
<!-- mybatis plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.yml</include>
<include>app.key</include>
<include>app.pub</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
</project>

View File

@ -0,0 +1,27 @@
package club.joylink.rtss.auth.configuration;
import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.core.io.ClassPathResource;
/**
* 此模块配置文件加载
*/
@Configuration
public class AuthConfig {
@Bean
public static PropertySourcesPlaceholderConfigurer properties() {
PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
yaml.setResources(new ClassPathResource("application-auth.yml"));
configurer.setProperties(yaml.getObject());
// yaml.getObject().forEach((k, v) -> {
// System.out.println(String.format("%s->%s", k, v));
// });
return configurer;
}
}

View File

@ -0,0 +1,41 @@
package club.joylink.rtss.auth.configuration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfigurationSource;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
import java.util.Arrays;
@Configuration
public class CorsConfiguration {
private org.springframework.web.cors.CorsConfiguration buildConfig() {
org.springframework.web.cors.CorsConfiguration corsConfiguration = new org.springframework.web.cors.CorsConfiguration();
corsConfiguration.addAllowedOriginPattern("*");
corsConfiguration.addAllowedHeader("*"); // 2
corsConfiguration.addAllowedMethod("*"); // 3
corsConfiguration.setAllowCredentials(true);
// 暴露 header 中的其他属性给客户端应用程序
corsConfiguration.setExposedHeaders(Arrays.asList(
"Authorization",
"Access-Control-Allow-Origin",
"Access-Control-Allow-Credentials"
));
return corsConfiguration;
}
@Bean
public CorsConfigurationSource corsConfigurationSource() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", buildConfig()); // 4
return source;
}
@Bean
public CorsFilter corsFilter() {
return new CorsFilter(corsConfigurationSource());
}
}

View File

@ -0,0 +1,20 @@
package club.joylink.rtss.auth.configuration;
import club.joylink.rtss.auth.util.EncryptUtil;
import org.springframework.security.crypto.password.PasswordEncoder;
import java.util.List;
import java.util.Objects;
public class EnctryptPassCode implements PasswordEncoder {
@Override
public String encode(CharSequence rawPassword) {
return EncryptUtil.md5(rawPassword.toString());
}
@Override
public boolean matches(CharSequence rawPassword, String encodedPassword) {
return Objects.equals(EncryptUtil.md5(rawPassword.toString()),encodedPassword);
}
}

View File

@ -0,0 +1,22 @@
package club.joylink.rtss.auth.configuration;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.web.AuthenticationEntryPoint;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Slf4j
public class MyBasicAuthenticationEntryPoint implements AuthenticationEntryPoint {
@Override
public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException {
log.error("登录认证异常", authException);
response.addHeader("WWW-Authenticate", "Basic ");
response.sendError(HttpStatus.UNAUTHORIZED.value(), authException.getMessage());
}
}

View File

@ -0,0 +1,155 @@
package club.joylink.rtss.auth.configuration;
import club.joylink.rtss.auth.repository.IRtsAuthWhiteRepository;
import club.joylink.rtss.auth.service.DbUserDetailsService;
import com.google.common.collect.Lists;
import com.nimbusds.jose.jwk.JWK;
import com.nimbusds.jose.jwk.JWKSet;
import com.nimbusds.jose.jwk.RSAKey;
import com.nimbusds.jose.jwk.source.ImmutableJWKSet;
import com.nimbusds.jose.jwk.source.JWKSource;
import com.nimbusds.jose.proc.SecurityContext;
import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
import org.springframework.security.config.Customizer;
import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configurers.AuthorizeHttpRequestsConfigurer;
import org.springframework.security.config.annotation.web.configurers.oauth2.server.resource.OAuth2ResourceServerConfigurer;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.core.Authentication;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.oauth2.jwt.JwtDecoder;
import org.springframework.security.oauth2.jwt.JwtEncoder;
import org.springframework.security.oauth2.jwt.NimbusJwtDecoder;
import org.springframework.security.oauth2.jwt.NimbusJwtEncoder;
import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationConverter;
import org.springframework.security.oauth2.server.resource.authentication.JwtGrantedAuthoritiesConverter;
import org.springframework.security.oauth2.server.resource.web.BearerTokenAuthenticationEntryPoint;
import org.springframework.security.oauth2.server.resource.web.access.BearerTokenAccessDeniedHandler;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
import org.springframework.web.cors.CorsConfigurationSource;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
/**
* 安全权限相关配置
*/
@Configuration
@EnableMethodSecurity
@EnableWebSecurity
public class SpringSecurityConfiguration {
/**
* JWT编解码器的PublicKey
*/
@Value("${jwt.public.key}")
RSAPublicKey key;
/**
* JWT编解码器的PrivateKey
*/
@Value("${jwt.private.key}")
RSAPrivateKey priv;
@Autowired
CorsConfigurationSource corsConfigurationSource;
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http, DbUserDetailsService userDetailsService, IRtsAuthWhiteRepository whiteRepository) throws Exception {
// @formatter:off
List<String> NoAuthList = whiteRepository.queryList().stream().map(d->d.getUri()).toList();
http.authorizeHttpRequests((authorize) -> authorize
.antMatchers(HttpMethod.OPTIONS).permitAll()
.antMatchers(NoAuthList.toArray(String[]::new)).permitAll()
.anyRequest().authenticated()
)
.formLogin(d->d.loginProcessingUrl("/testLogin").passwordParameter("password").usernameParameter("username")
.successHandler(new AuthenticationSuccessHandler() {
@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
System.out.println(request.getParameter("project"));
System.out.println("aaaaaaaaaaaaaaaaaaaaa");
}
})
).userDetailsService(userDetailsService)
.cors(corsConfig -> corsConfig.configurationSource(corsConfigurationSource))
.csrf((csrf) -> csrf.disable())
// .httpBasic(configure -> configure.authenticationEntryPoint(new MyBasicAuthenticationEntryPoint()))
.oauth2ResourceServer(OAuth2ResourceServerConfigurer::jwt)
.sessionManagement((session) -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
.exceptionHandling((exceptions) -> exceptions
.authenticationEntryPoint(new BearerTokenAuthenticationEntryPoint())
// .defaultAuthenticationEntryPointFor(new MyBasicAuthenticationEntryPoint(),
// new AntPathRequestMatcher("/api/auth/token", null))
.defaultAuthenticationEntryPointFor(new BearerTokenAuthenticationEntryPoint(),
new AntPathRequestMatcher("/api/**", null))
.accessDeniedHandler(new BearerTokenAccessDeniedHandler())
);
// @formatter:on
SecurityFilterChain filterChain = http.build();
return filterChain;
}
@Bean
public JwtAuthenticationConverter jwtAuthenticationConverter() {
JwtGrantedAuthoritiesConverter grantedAuthoritiesConverter = new JwtGrantedAuthoritiesConverter();
grantedAuthoritiesConverter.setAuthorityPrefix("");//取消jwt的默认前缀SCOPE_
JwtAuthenticationConverter jwtAuthenticationConverter = new JwtAuthenticationConverter();
jwtAuthenticationConverter.setJwtGrantedAuthoritiesConverter(grantedAuthoritiesConverter);
return jwtAuthenticationConverter;
}
/**
* Spring Security用户username/password认证使用的password编码器
*
* @return
*/
@Bean
public PasswordEncoder passwordEncoder() {
// return new BCryptPasswordEncoder(13);
return new EnctryptPassCode();
}
/**
* JWT解码器
*
* @return
*/
@Bean
public JwtDecoder jwtDecoder() {
return NimbusJwtDecoder.withPublicKey(this.key).build();
}
/**
* JWT编码器
*
* @return
*/
@Bean
public JwtEncoder jwtEncoder() {
JWK jwk = new RSAKey.Builder(this.key).privateKey(this.priv).build();
JWKSource<SecurityContext> jwks = new ImmutableJWKSet<>(new JWKSet(jwk));
return new NimbusJwtEncoder(jwks);
}
}

View File

@ -0,0 +1,61 @@
package club.joylink.rtss.auth.controller;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.oauth2.jwt.JwtClaimsSet;
import org.springframework.security.oauth2.jwt.JwtEncoder;
import org.springframework.security.oauth2.jwt.JwtEncoderParameters;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.time.Instant;
import java.util.stream.Collectors;
/**
* 权限接口
*/
@Slf4j
@RestController
@RequestMapping("/api/auth")
@SecurityRequirement(name = "basic")
public class AuthController {
final JwtEncoder jwtEncoder;
public AuthController(JwtEncoder jwtEncoder) {
this.jwtEncoder = jwtEncoder;
}
/**
* 登录
*
* @return
*/
@PostMapping("/token")
public String getToken(Authentication authentication) {
Instant now = Instant.now();
long expiry = 3 * 24 * 60 * 60L;
// @formatter:off
String scope = authentication.getAuthorities().stream()
.map(GrantedAuthority::getAuthority)
.collect(Collectors.joining(" "));
JwtClaimsSet claims = JwtClaimsSet.builder()
.issuer("self")
.issuedAt(now)
.expiresAt(now.plusSeconds(expiry))
.subject(authentication.getName())//此处实际为用户id(数据库记录id)
.claim("scope", scope)
.build();
// @formatter:on
try {
final String token = this.jwtEncoder.encode(JwtEncoderParameters.from(claims)).getTokenValue();
return token;
} catch (Exception ex) {
throw ex;
}
}
}

View File

@ -0,0 +1,48 @@
package club.joylink.rtss.auth.controller;
import club.joylink.rtss.auth.configuration.SpringSecurityConfiguration;
import club.joylink.rtss.auth.dto.AutoWhiteDto;
import club.joylink.rtss.auth.repository.IRtsAuthWhiteRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authorization.AuthorizationManager;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configurers.AuthorizeHttpRequestsConfigurer;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.access.intercept.AuthorizationFilter;
import org.springframework.security.web.access.intercept.RequestMatcherDelegatingAuthorizationManager;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.Filter;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.stream.Collectors;
/**
* <p>
* 前端控制器
* </p>
*
* @author walker
* @since 2023-02-24
*/
@RestController
@RequestMapping("/api/white")
public class RtsAuthWhiteController {
@Resource
private IRtsAuthWhiteRepository whiteRepository;
@PostMapping("/saveOrUpdate")
public void saveOrUpdate(@RequestBody AutoWhiteDto dto){
this.whiteRepository.saveOrUpdate(dto);
}
@DeleteMapping("/{id}")
public void delete(@PathVariable Long id){
this.whiteRepository.delete(id);
}
@GetMapping("/list")
public List<AutoWhiteDto> list(){
return this.whiteRepository.queryList();
}
}

View File

@ -0,0 +1,78 @@
package club.joylink.rtss.auth.dto;
import club.joylink.rtss.auth.entity.RtsAuthWhite;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.google.common.collect.Lists;
import lombok.Data;
import org.springframework.cglib.beans.BeanCopier;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;
@Data
public class AutoWhiteDto implements Serializable {
@Serial
private static final long serialVersionUID = 8893978464402061683L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 过滤uri
*/
private String uri;
/**
* uri类型
*/
private AuthUriType uriType;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新时间
*/
private LocalDateTime updateTime;
private Integer status;
/**
* 描述
*/
private String depict;
public static AutoWhiteDto convertDto(RtsAuthWhite white){
AutoWhiteDto dto = new AutoWhiteDto();
BeanCopier bc = BeanCopier.create(white.getClass(),dto.getClass(),false);
bc.copy(white,dto,null);
return dto;
}
public static List<AutoWhiteDto> convertDtoList(List<RtsAuthWhite> whiteList){
List<AutoWhiteDto> dtoList = Lists.newArrayList();
for (RtsAuthWhite white : whiteList) {
dtoList.add(convertDto(white));
}
return dtoList;
}
public RtsAuthWhite convertBean(){
RtsAuthWhite b = new RtsAuthWhite();
BeanCopier bc = BeanCopier.create(this.getClass(),b.getClass(),false);
bc.copy(this,b,null);
return b;
}
public enum AuthUriType{
HTTP,WS
}
public enum AuthStatus{
VALID,INVALID
}
}

View File

@ -0,0 +1,74 @@
package club.joylink.rtss.auth.entity;
import club.joylink.rtss.auth.dto.AutoWhiteDto;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
*
* </p>
*
* @author walker
* @since 2023-02-24
*/
@TableName("rts_auth_white")
@Data
public class RtsAuthWhite implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 过滤uri
*/
private String uri;
/**
* uri类型
*/
private AutoWhiteDto.AuthUriType uriType;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新时间
*/
private LocalDateTime updateTime;
/**
* 0=可用1=不可用
*/
@TableLogic(value = "0",delval = "1")
private Integer status;
/**
* 描述
*/
private String depict;
@Override
public String toString() {
return "RtsAuthWhite{" +
"id = " + id +
", uri = " + uri +
", uriType = " + uriType +
", createTime = " + createTime +
", updateTime = " + updateTime +
", status = " + status +
", depict = " + depict +
"}";
}
}

View File

@ -0,0 +1,271 @@
package club.joylink.rtss.auth.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
* 用户
* </p>
*
* @author walker
* @since 2023-02-21
*/
@TableName("sys_account")
public class SysAccount implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
private String account;
private String parentAccount;
private String type;
/**
* 所属组织id
*/
private Long orgId;
private String name;
private String nickname;
private String avatarPath;
private String password;
private String mobile;
private String nationcode;
private String email;
private String wxId;
private String wxUnionId;
private String wmOpenId;
private String status;
private String roles;
private String source;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新用户id
*/
private Long updateUserId;
/**
* 更新时间
*/
private LocalDateTime updateTime;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getParentAccount() {
return parentAccount;
}
public void setParentAccount(String parentAccount) {
this.parentAccount = parentAccount;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Long getOrgId() {
return orgId;
}
public void setOrgId(Long orgId) {
this.orgId = orgId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public String getAvatarPath() {
return avatarPath;
}
public void setAvatarPath(String avatarPath) {
this.avatarPath = avatarPath;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String getNationcode() {
return nationcode;
}
public void setNationcode(String nationcode) {
this.nationcode = nationcode;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getWxId() {
return wxId;
}
public void setWxId(String wxId) {
this.wxId = wxId;
}
public String getWxUnionId() {
return wxUnionId;
}
public void setWxUnionId(String wxUnionId) {
this.wxUnionId = wxUnionId;
}
public String getWmOpenId() {
return wmOpenId;
}
public void setWmOpenId(String wmOpenId) {
this.wmOpenId = wmOpenId;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getRoles() {
return roles;
}
public void setRoles(String roles) {
this.roles = roles;
}
public String getSource() {
return source;
}
public void setSource(String source) {
this.source = source;
}
public LocalDateTime getCreateTime() {
return createTime;
}
public void setCreateTime(LocalDateTime createTime) {
this.createTime = createTime;
}
public Long getUpdateUserId() {
return updateUserId;
}
public void setUpdateUserId(Long updateUserId) {
this.updateUserId = updateUserId;
}
public LocalDateTime getUpdateTime() {
return updateTime;
}
public void setUpdateTime(LocalDateTime updateTime) {
this.updateTime = updateTime;
}
@Override
public String toString() {
return "SysAccount{" +
"id = " + id +
", account = " + account +
", parentAccount = " + parentAccount +
", type = " + type +
", orgId = " + orgId +
", name = " + name +
", nickname = " + nickname +
", avatarPath = " + avatarPath +
", password = " + password +
", mobile = " + mobile +
", nationcode = " + nationcode +
", email = " + email +
", wxId = " + wxId +
", wxUnionId = " + wxUnionId +
", wmOpenId = " + wmOpenId +
", status = " + status +
", roles = " + roles +
", source = " + source +
", createTime = " + createTime +
", updateUserId = " + updateUserId +
", updateTime = " + updateTime +
"}";
}
}

View File

@ -0,0 +1,100 @@
package club.joylink.rtss.auth.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
* 用户登陆信息表
* </p>
*
* @author walker
* @since 2023-02-21
*/
@TableName("sys_account_login")
public class SysAccountLogin implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 用户ID
*/
private Long userId;
private String client;
private String project;
private String device;
/**
* 登陆时间
*/
private LocalDateTime loginTime;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getUserId() {
return userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
public String getClient() {
return client;
}
public void setClient(String client) {
this.client = client;
}
public String getProject() {
return project;
}
public void setProject(String project) {
this.project = project;
}
public String getDevice() {
return device;
}
public void setDevice(String device) {
this.device = device;
}
public LocalDateTime getLoginTime() {
return loginTime;
}
public void setLoginTime(LocalDateTime loginTime) {
this.loginTime = loginTime;
}
@Override
public String toString() {
return "SysAccountLogin{" +
"id = " + id +
", userId = " + userId +
", client = " + client +
", project = " + project +
", device = " + device +
", loginTime = " + loginTime +
"}";
}
}

View File

@ -0,0 +1,39 @@
package club.joylink.rtss.auth.exception;
import org.springframework.util.StringUtils;
public class BaseException extends RuntimeException {
private IExceptionMessage exceptionMessage;
public BaseException(IExceptionMessage exceptionMessage) {
super(exceptionMessage.getMessage());
this.exceptionMessage = exceptionMessage;
}
public BaseException(IExceptionMessage exceptionMessage, String message) {
super(message);
this.exceptionMessage = exceptionMessage;
}
public BaseException(IExceptionMessage exceptionMessage, Throwable cause) {
super(exceptionMessage.getMessage(), cause);
this.exceptionMessage = exceptionMessage;
}
public BaseException(IExceptionMessage exceptionMessage, String message, Throwable cause) {
super(message, cause);
this.exceptionMessage = exceptionMessage;
}
public int getCode() {
return this.exceptionMessage.getCode();
}
public String getVoMessage() {
if (StringUtils.hasText(super.getMessage())) {
return super.getMessage();
}
return this.exceptionMessage.getMessage();
}
}

View File

@ -0,0 +1,228 @@
package club.joylink.rtss.auth.exception;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.Collection;
import java.util.Map;
import java.util.Objects;
public interface ExceptionAssert {
BaseException exception();
BaseException exception(Throwable t);
BaseException exception(String message);
BaseException exception(String message, Throwable t);
default void fail() {
throw exception();
}
default void fail(String message) {
throw exception(message);
}
default void assertNotNull(Object object) {
if (object == null) {
throw exception();
}
}
default void assertNotNull(Object object, String message) {
if (object == null) {
throw exception(message);
}
}
default void assertNotNull(Object object, TextValue message) {
if (object == null) {
throw exception(message.text());
}
}
default void assertNull(Object object) {
if (object != null) {
throw exception();
}
}
default void assertNull(Object object, String message) {
if (object != null) {
throw exception(message);
}
}
default void assertNull(Object object, TextValue message) {
if (object != null) {
throw exception(message.text());
}
}
default void assertTrue(boolean expression) {
if (!expression) {
throw exception();
}
}
default void assertTrue(boolean expression, String message) {
if (!expression) {
throw exception(message);
}
}
default void assertTrue(boolean expression, TextValue message) {
if (!expression) {
throw exception(message.text());
}
}
default void assertNotTrue(boolean expression) {
if (expression) {
throw exception();
}
}
default void assertNotTrue(boolean expression, String message) {
if (expression) {
throw exception(message);
}
}
default void assertNotTrue(boolean expression, TextValue message) {
if (expression) {
throw exception(message.text());
}
}
default void assertCollectionEmpty(Collection<?> collection) {
if (!CollectionUtils.isEmpty(collection)) {
throw exception();
}
}
default void assertCollectionEmpty(Collection<?> collection, String message) {
if (!CollectionUtils.isEmpty(collection)) {
throw exception(message);
}
}
default void assertCollectionEmpty(Collection<?> collection, TextValue message) {
if (!CollectionUtils.isEmpty(collection)) {
throw exception(message.text());
}
}
default void assertCollectionNotEmpty(Collection<?> collection) {
if (CollectionUtils.isEmpty(collection)) {
throw exception();
}
}
default void assertCollectionNotEmpty(Collection<?> collection, String message) {
if (CollectionUtils.isEmpty(collection)) {
throw exception(message);
}
}
default void assertCollectionNotEmpty(Collection<?> collection, TextValue message) {
if (CollectionUtils.isEmpty(collection)) {
throw exception(message.text());
}
}
default void assertMapEmpty(Map<?, ?> map) {
if (!CollectionUtils.isEmpty(map)) {
throw exception();
}
}
default void assertMapEmpty(Map<?, ?> map, String message) {
if (!CollectionUtils.isEmpty(map)) {
throw exception(message);
}
}
default void assertMapEmpty(Map<?, ?> map, TextValue message) {
if (!CollectionUtils.isEmpty(map)) {
throw exception(message.text());
}
}
default void assertMapNotEmpty(Map<?, ?> map) {
if (CollectionUtils.isEmpty(map)) {
throw exception();
}
}
default void assertMapNotEmpty(Map<?, ?> map, String message) {
if (CollectionUtils.isEmpty(map)) {
throw exception(message);
}
}
default void assertMapNotEmpty(Map<?, ?> map, TextValue message) {
if (CollectionUtils.isEmpty(map)) {
throw exception(message.text());
}
}
default void assertEquals(Object o1, Object o2) {
if (!Objects.equals(o1, o2)) {
throw exception();
}
}
default void assertEquals(Object o1, Object o2, String message) {
if (!Objects.equals(o1, o2)) {
throw exception(message);
}
}
default void assertEquals(Object o1, Object o2, TextValue message) {
if (!Objects.equals(o1, o2)) {
throw exception(message.text());
}
}
default void assertNotEquals(Object o1, Object o2) {
if (Objects.equals(o1, o2)) {
throw exception();
}
}
default void assertNotEquals(Object o1, Object o2, String message) {
if (Objects.equals(o1, o2)) {
throw exception(message);
}
}
default void assertNotEquals(Object o1, Object o2, TextValue message) {
if (Objects.equals(o1, o2)) {
throw exception(message.text());
}
}
default void assertHasText(String str) {
if (!StringUtils.hasText(str)) {
throw exception();
}
}
default void assertHasText(String str, String message) {
if (!StringUtils.hasText(str)) {
throw exception(message);
}
}
default void assertHasText(String str, TextValue message) {
if (!StringUtils.hasText(str)) {
throw exception(message.text());
}
}
default void assertNotHasText(String str) {
if (StringUtils.hasText(str)) {
throw exception();
}
}
default void assertNotHasText(String str, String message) {
if (StringUtils.hasText(str)) {
throw exception(message);
}
}
default void assertNotHasText(String str, TextValue message) {
if (StringUtils.hasText(str)) {
throw exception(message.text());
}
}
@FunctionalInterface
public static interface TextValue{
String text();
}
}

View File

@ -1,4 +1,4 @@
package club.joylink.rtss.exception;
package club.joylink.rtss.auth.exception;
public interface IExceptionMessage {

View File

@ -0,0 +1,19 @@
package club.joylink.rtss.auth.exception;
public class ServerException extends BaseException {
public ServerException(IExceptionMessage exceptionMessage) {
super(exceptionMessage);
}
public ServerException(IExceptionMessage exceptionMessage, String message) {
super(exceptionMessage, message);
}
public ServerException(IExceptionMessage exceptionMessage, Throwable cause) {
super(exceptionMessage, cause);
}
public ServerException(IExceptionMessage exceptionMessage, String message, Throwable cause) {
super(exceptionMessage, message, cause);
}
}

View File

@ -0,0 +1,21 @@
package club.joylink.rtss.auth.exception;
public interface ServerExceptionAssert extends IExceptionMessage, ExceptionAssert {
default BaseException exception() {
return new ServerException(this);
}
default BaseException exception(Throwable t) {
return new ServerException(this, t);
}
default BaseException exception(String message) {
return new ServerException(this, message);
}
default BaseException exception(String message, Throwable t) {
return new ServerException(this, message, t);
}
}

View File

@ -0,0 +1,20 @@
package club.joylink.rtss.auth.exception;
import lombok.Getter;
@Getter
public enum ServerExceptionAssertEnum implements ServerExceptionAssert {
DataNotExist(4000, "data not exist"),
FieldMustUnique(4001, "the unique filed repeat"),
RuntimeException(4002,"system runtime exception")
;
int code;
String message;
ServerExceptionAssertEnum(int code, String message) {
this.code = code;
this.message = message;
}
}

View File

@ -0,0 +1,18 @@
package club.joylink.rtss.auth.mapper;
import club.joylink.rtss.auth.entity.RtsAuthWhite;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* Mapper 接口
* </p>
*
* @author walker
* @since 2023-02-24
*/
@Mapper
public interface RtsAuthWhiteMapper extends BaseMapper<RtsAuthWhite> {
}

View File

@ -0,0 +1,18 @@
package club.joylink.rtss.auth.mapper;
import club.joylink.rtss.auth.entity.SysAccountLogin;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* 用户登陆信息表 Mapper 接口
* </p>
*
* @author walker
* @since 2023-02-21
*/
@Mapper
public interface SysAccountLoginMapper extends BaseMapper<SysAccountLogin> {
}

View File

@ -0,0 +1,18 @@
package club.joylink.rtss.auth.mapper;
import club.joylink.rtss.auth.entity.SysAccount;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* 用户 Mapper 接口
* </p>
*
* @author walker
* @since 2023-02-21
*/
@Mapper
public interface SysAccountMapper extends BaseMapper<SysAccount> {
}

View File

@ -0,0 +1,23 @@
package club.joylink.rtss.auth.repository;
import club.joylink.rtss.auth.dto.AutoWhiteDto;
import club.joylink.rtss.auth.entity.RtsAuthWhite;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* <p>
* 服务类
* </p>
*
* @author walker
* @since 2023-02-24
*/
public interface IRtsAuthWhiteRepository extends IService<RtsAuthWhite> {
void saveOrUpdate(AutoWhiteDto dto);
void delete(Long id);
AutoWhiteDto findById(Long id);
List<AutoWhiteDto> queryList();
}

View File

@ -0,0 +1,16 @@
package club.joylink.rtss.auth.repository;
import club.joylink.rtss.auth.entity.SysAccountLogin;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 用户登陆信息表 服务类
* </p>
*
* @author walker
* @since 2023-02-21
*/
public interface ISysAccountLoginRepository extends IService<SysAccountLogin> {
}

View File

@ -0,0 +1,17 @@
package club.joylink.rtss.auth.repository;
import club.joylink.rtss.auth.entity.SysAccount;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 用户 服务类
* </p>
*
* @author walker
* @since 2023-02-21
*/
public interface ISysAccountRepository extends IService<SysAccount> {
SysAccount queryBy(String login);
}

View File

@ -0,0 +1,66 @@
package club.joylink.rtss.auth.repository.impl;
import club.joylink.rtss.auth.dto.AutoWhiteDto;
import club.joylink.rtss.auth.entity.RtsAuthWhite;
import club.joylink.rtss.auth.exception.ServerExceptionAssertEnum;
import club.joylink.rtss.auth.mapper.RtsAuthWhiteMapper;
import club.joylink.rtss.auth.repository.IRtsAuthWhiteRepository;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
/**
* <p>
* 服务实现类
* </p>
*
* @author walker
* @since 2023-02-24
*/
@Service
public class RtsAuthWhiteRepository extends ServiceImpl<RtsAuthWhiteMapper, RtsAuthWhite> implements IRtsAuthWhiteRepository {
@Override
public void saveOrUpdate(AutoWhiteDto dto) {
RtsAuthWhite bean = dto.convertBean();
LocalDateTime now = LocalDateTime.now();
bean.setCreateTime(now);
bean.setUpdateTime(now);
bean.setStatus(AutoWhiteDto.AuthStatus.INVALID.ordinal());
if(Objects.nonNull(bean.getId())){
RtsAuthWhite tmp = this.find(bean.getId());
tmp.setUpdateTime(now);
this.updateById(tmp);
}else{
this.save(bean);
}
}
@Override
public void delete(Long id) {
this.find(id);
this.removeById(id);
}
private RtsAuthWhite find(Long id){
RtsAuthWhite white = this.getById(id);
ServerExceptionAssertEnum.DataNotExist.assertTrue(Objects.nonNull(white),"未找到对应的数据");
return white;
}
@Override
public AutoWhiteDto findById(Long id) {
RtsAuthWhite white = this.find(id);
return AutoWhiteDto.convertDto(white);
}
@Override
public List<AutoWhiteDto> queryList() {
QueryWrapper<RtsAuthWhite> queryWrapper = new QueryWrapper<>();
List<RtsAuthWhite> list = this.baseMapper.selectList(queryWrapper);
return AutoWhiteDto.convertDtoList(list);
}
}

View File

@ -0,0 +1,20 @@
package club.joylink.rtss.auth.repository.impl;
import club.joylink.rtss.auth.entity.SysAccountLogin;
import club.joylink.rtss.auth.mapper.SysAccountLoginMapper;
import club.joylink.rtss.auth.repository.ISysAccountLoginRepository;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 用户登陆信息表 服务实现类
* </p>
*
* @author walker
* @since 2023-02-21
*/
@Service
public class SysAccountLoginRepository extends ServiceImpl<SysAccountLoginMapper, SysAccountLogin> implements ISysAccountLoginRepository {
}

View File

@ -0,0 +1,33 @@
package club.joylink.rtss.auth.repository.impl;
import club.joylink.rtss.auth.entity.SysAccount;
import club.joylink.rtss.auth.exception.ServerExceptionAssertEnum;
import club.joylink.rtss.auth.mapper.SysAccountMapper;
import club.joylink.rtss.auth.repository.ISysAccountRepository;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 用户 服务实现类
* </p>
*
* @author walker
* @since 2023-02-21
*/
@Service
public class SysAccountRepository extends ServiceImpl<SysAccountMapper, SysAccount> implements ISysAccountRepository {
SysAccountMapper sysAccountMapper;
public SysAccountRepository(SysAccountMapper sysAccountMapper) {
this.sysAccountMapper = sysAccountMapper;
}
@Override
public SysAccount queryBy(String login) {
SysAccount account = this.getOne(Wrappers.<SysAccount>lambdaQuery().eq(SysAccount::getMobile, login));
return account;
}
}

View File

@ -0,0 +1,50 @@
package club.joylink.rtss.auth.service;
import club.joylink.rtss.auth.entity.SysAccount;
import club.joylink.rtss.auth.repository.ISysAccountRepository;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.config.core.GrantedAuthorityDefaults;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* Spring Security的UserDetailsService实现
*/
@Slf4j
@Service
public class DbUserDetailsService implements UserDetailsService {
private ISysAccountRepository userRepository;
public DbUserDetailsService(ISysAccountRepository userRepository) {
this.userRepository = userRepository;
}
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
try {
SysAccount userInfo = this.userRepository.queryBy(username);
if (userInfo == null) {
throw new UsernameNotFoundException(String.format("未找到mobile=%s的用户", username));
}
return org.springframework.security.core.userdetails.User
.withUsername(userInfo.getId().toString())
.password(userInfo.getPassword())
// .password(this.passwordEncoder.encode(userInfo.getPassword()))
.authorities(AuthorityUtils.createAuthorityList("MOBILE"))
.build();
} catch (UsernameNotFoundException e) {
throw e;
} catch (Exception e) {
log.error("根据username加载用户异常", e);
throw new UsernameNotFoundException("加载用户未知异常", e);
}
}
}

View File

@ -0,0 +1,63 @@
package club.joylink.rtss.auth.service;
import lombok.Data;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.oauth2.jwt.JwtClaimsSet;
import org.springframework.security.oauth2.jwt.JwtEncoder;
import org.springframework.security.oauth2.jwt.JwtEncoderParameters;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.PostMapping;
import java.time.Instant;
import java.util.List;
import java.util.stream.Collectors;
@Component
public class JwtService {
final JwtEncoder jwtEncoder;
public JwtService(JwtEncoder jwtEncoder) {
this.jwtEncoder = jwtEncoder;
}
@Data
public static class UserInfo {
String id;
List<String> roles;
public UserInfo(String id, List<String> roles) {
this.id = id;
this.roles = roles;
}
}
/**
* 构建jwt
*
* @return
*/
public String buildToken(UserInfo userInfo) {
Instant now = Instant.now();
long expiry = 3 * 24 * 60 * 60L;
// @formatter:off
String scope = userInfo.getRoles().stream()
.collect(Collectors.joining(" "));
JwtClaimsSet claims = JwtClaimsSet.builder()
.issuer("self")
.issuedAt(now)
.expiresAt(now.plusSeconds(expiry))
.subject(userInfo.getId())//此处实际为用户id(数据库记录id)
.claim("scope", scope)
.claim("userinfo", userInfo)
.build();
// @formatter:on
try {
final String token = this.jwtEncoder.encode(JwtEncoderParameters.from(claims)).getTokenValue();
return token;
} catch (Exception ex) {
throw ex;
}
}
}

View File

@ -1,4 +1,4 @@
package club.joylink.rtss.util;
package club.joylink.rtss.auth.util;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;

View File

@ -0,0 +1,3 @@
-----BEGIN PRIVATE KEY-----
MIIEugIBADANBgkqhkiG9w0BAQEFAASCBKQwggSgAgEAAoIBAQCk16Ov5gy35qzQzVUkv44FQSJp+xD73eMh0NeETTboZ4SJyQ3AIfvNQAiTSvNA6lKY4gpPxSveddmRPIbp1gVM6CKzZF7EWs6ZR9UxM7RECLrloGiVRUv3q5vbtIxMNTyMLsLtc5+PE6ZsvoeOEAUzXtoPZXbg0enWfs/qfxVaEr3c7riSXF5S0Df0gUsquRF7+CNAdr2GEDMJjtEKl7pDRk8IsiMVpuupmfhOhSveiK316Uc1D8jLIugKHZ62jAPGXbkLML30gIILWKFFEZLabvw04fZUCJq01ijRbRwLJG9Z/AnIWTk1gMfH8oIZc5R0sI389IEAYyiL9r04joCFAgMBAAECgf8/fKzUifMJdakyLV7TL6ksZSeVwowOMyD46UjNp5SbDr9Tzbx55DmvY9Tx7efKXtgu6I1adg29vQj5wbT6g8nyK4YpmZM4uiOmSGtsatQn9G6bpv6xE4/gIhLIJDkN94N/cc1nnk3iEzeegOxhxmat+w/HKJMYLLharoTY8OeGQIb9XwDppt2y1+gFXJvEG9jGb/lIZ4xLMqQfOi0T9PHooLRgjqUQ07JZHPELlLLKohDwsRXMHkDmXiCYQ7P58+hjgBLzxNr3WmpuRISLewjjCa0XWbfxrFhY8HOYIQZNBjeNmVwANsAlMlqnjjv4sfCBlHg7LA6qMfEyONy2zlECgYEAziDvMEd3EHeUJMf+Macicdgfh29zWlyPYI7u5lzCjUqy6po7Q1uFYP7SPetO8mnX0j9pbZC3Zr05TCdXc4jdccKze58j1u+zPAYxX5I2LY0T5BsQOCT4/Oa11QBE0cJSA/wy+XLMpJ8+UIs7dirMFUMjWAMwvu4De7wfsu0IIf0CgYEAzLmKNS6EjeY1GhnZs8uuvtjr5XPQ3G22WAj5g/SjaDNZ5JC1+Ag5G5Iwd262Pa6LCPXRvVGnG3FvVqIk60aHoatqY5zJA+6cCdD1OHhGJTzrPfVmcWkiNpstHqD0w8l4QGhwd8O/0IDJm4NN7bW3WTttHIBz/ElqiWoG4YEG+ykCgYBSTrJTy+WOLMF54mXs+7j0ToFgei9MgLM7sjdQwu9ordA9f3J0lgHvVjErSl+OypbEPE/j0Sp6mspbT0ZLOvZ5q24xybzs4W/nYu2qJN7/V1r+9ZOHZ7QIgDNRJzdTrs1DDBxqoN14SqH+VWpb6ADv6IwfY76+LpozeU4LCzz5HQKBgHuuR/HzJX+4qTIYle5KSkrgMDuR6YeR/IxY960hmar1AwTT7CtphF7ExeURjKXdEgAayliOwN8Se8oh8R32oTApp/+AE+z9NWW0yMER4IbUs+XdoMM5WcMVon+Ti+vQhoaa0f940iQ7+hCqleTbWGZfQX7rl6a+D8/urzODSN1pAoGAdui4nehVY7HyH9JH/Td3ZhW4SAB9U4cfNUFt+MaEDdrtxgJ5tP5NEDjIa1q0f3tdfL/WssBT0ti9thjGn2cHROE/ZlaTQR0riwgbFgLpvtQh0t4nth8RPF17+XsMDL1VGSyartYc+g+dUVubyH2PMIxPfoZCWvQSYX13YfF2Zbk=
-----END PRIVATE KEY-----

View File

@ -0,0 +1,3 @@
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApNejr+YMt+as0M1VJL+OBUEiafsQ+93jIdDXhE026GeEickNwCH7zUAIk0rzQOpSmOIKT8Ur3nXZkTyG6dYFTOgis2RexFrOmUfVMTO0RAi65aBolUVL96ub27SMTDU8jC7C7XOfjxOmbL6HjhAFM17aD2V24NHp1n7P6n8VWhK93O64klxeUtA39IFLKrkRe/gjQHa9hhAzCY7RCpe6Q0ZPCLIjFabrqZn4ToUr3oit9elHNQ/IyyLoCh2etowDxl25CzC99ICCC1ihRRGS2m78NOH2VAiatNYo0W0cCyRvWfwJyFk5NYDHx/KCGXOUdLCN/PSBAGMoi/a9OI6AhQIDAQAB
-----END PUBLIC KEY-----

View File

@ -0,0 +1,9 @@
jwt:
private.key: classpath:app.key
public.key: classpath:app.pub
mybatis-plus:
type-aliases-package: club.joylink.rtss.auth.mapper
mapper-locations: classpath:mapper/auth/*.xml
configuration:
map-underscore-to-camel-case: true

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="club.joylink.rtss.auth.mapper.SysAccountLoginMapper">
</mapper>

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="club.joylink.rtss.auth.mapper.SysAccountMapper">
</mapper>

View File

@ -0,0 +1,96 @@
package club.joylink.rtss.auth;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.google.common.collect.Lists;
import lombok.Builder;
import lombok.NonNull;
import lombok.Setter;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.util.CollectionUtils;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class MybatisPlusAutoGenerator {
public static final DataSourceConfig.Builder DATA_SOURCE_CONFIG = new DataSourceConfig
.Builder("jdbc:mysql://192.168.3.233:3306/joylink?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai",
"root", "joylink0503")
;
public static void main(String[] args) {
GeneratorModule generatorModule = GeneratorModule.SimulationNcc;
String[] tableNames = new String[]{"rts_ncc_map_data"};
// String baseDir = String.join(File.separator, Arrays.asList(System.getProperty("user.dir"), "jl-rtss-auth", "src", "main"));
String baseDir = generatorModule.projectPath;
String outBaseDir = baseDir + File.separator + "java";
String xmlDir = baseDir + File.separator + "resources" + File.separator + "mapper";
System.out.println(outBaseDir);
FastAutoGenerator.create(DATA_SOURCE_CONFIG)
.globalConfig(builder -> {
builder.author("walker")
.disableOpenDir() // 生成完毕不打开目录
.dateType(DateType.TIME_PACK) // 使用java8的日期时间对象
.outputDir(outBaseDir);
})
.packageConfig(builder -> {
builder.parent(generatorModule.rootPackAges)
.service("repository")
.serviceImpl("repository.impl")
.pathInfo(Collections.singletonMap(OutputFile.xml, xmlDir));
})
.strategyConfig(builder -> {
builder.addInclude(tableNames);
// entity生成策略
builder.entityBuilder()
.enableLombok()
.enableFileOverride(); // 覆盖旧文件
// mapper生成策略
builder.mapperBuilder()
.mapperAnnotation(Mapper.class); // 生成Mapper注解
//.enableFileOverride(); // 覆盖旧文件
// service生成策略
builder.serviceBuilder()
// .enableFileOverride() // 覆盖旧文件
.formatServiceFileName("I%sRepository")
.formatServiceImplFileName("%sRepository")
;
// controller生成策略
builder.controllerBuilder()
.enableRestStyle(); // 改为使用RestController注解支持Rest接口
})
// 可自定义模板
// .templateConfig(builder -> {
//
// })
.execute();
}
enum GeneratorModule{
Auth("club.joylink.rtss.auth",new String[]{"jl-rtss-auth"})
,SimulationNcc("club.joylink.rtss.simulation.ncc",new String[]{"jl-rtss-simulation","ncc"});
GeneratorModule(String d,String[] p){
this.rootPackAges = d;
List<String> projectDir = new ArrayList<>();
for (String s : p) {
projectDir.add(s);
}
projectDir.add(0,System.getProperty("user.dir"));
projectDir.add("src");
projectDir.add("main");
this.projectPath = String.join(File.separator, projectDir);
}
private String rootPackAges;
private String projectPath;
}
}

View File

@ -0,0 +1,18 @@
package club.joylink.rtss.auth;
import org.junit.jupiter.api.Test;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class Tests {
@Test
public void basicAuth() {
String name = "17791995809";
String password = "123456";
String ba = Base64.getEncoder().encodeToString(String.format("%s:%s", name, password).getBytes(StandardCharsets.UTF_8));
System.out.println(ba);
}
}

228
jl-rtss-manage/pom.xml Normal file
View File

@ -0,0 +1,228 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>club.joylink.rtss</groupId>
<artifactId>rtss-server</artifactId>
<version>0.1</version>
</parent>
<artifactId>manage</artifactId>
<version>0.1</version>
<name>manage</name>
<description> Rail transit simulation system</description>
<packaging>jar</packaging>
<properties>
<java.version>17</java.version>
<pagehelper.version>4.1.1</pagehelper.version>
</properties>
<dependencies>
<dependency>
<groupId>club.joylink.rtss</groupId>
<artifactId>auth</artifactId>
</dependency>
<dependency>
<groupId>club.joylink.rtss</groupId>
<artifactId>NCC</artifactId>
<version>0.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
</dependency>
<!-- javax.validation -->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
</dependency>
<!--spring切面aop依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
</dependency>
<dependency>
<groupId>com.digitalpetri.modbus</groupId>
<artifactId>modbus-codec</artifactId>
<version>1.1.1</version>
</dependency>
<!-- 硬件检测依赖 -->
<dependency>
<groupId>com.github.oshi</groupId>
<artifactId>oshi-core-java11</artifactId>
<version>5.7.5</version>
</dependency>
<dependency>
<groupId>com.github.wechatpay-apiv3</groupId>
<artifactId>wechatpay-apache-httpclient</artifactId>
<version>0.2.1</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>31.1-jre</version>
</dependency>
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.4.4</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.9.0</version>
</dependency>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.10.3</version>
</dependency>
<dependency>
<groupId>com.belerweb</groupId>
<artifactId>pinyin4j</artifactId>
<version>2.5.0</version>
</dependency>
<!-- iscs -->
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>3.19.3</version>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<filtering>true</filtering>
<directory>src/main/resources</directory>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>${maven.resources.plugin.version}</version>
<configuration>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
<executions>
<execution>
<id>copy-resources</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target/classes</outputDirectory>
<resources>
<resource>
<directory>${basedir}/../jl-rtss-auth/src/main/resources</directory>
<filtering>true</filtering>
</resource>
<resource>
<directory>${basedir}/../jl-rtss-simulation/ISCS/src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>club.joylink.rtss.manage.RtssApplication</mainClass>
<layout>ZIP</layout>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.github.shalousun</groupId>
<artifactId>smart-doc-maven-plugin</artifactId>
<version>2.1.9</version>
<configuration>
<!--指定生成文档的使用的配置文件,配置文件放在自己的项目中-->
<configFile>./src/main/resources/smart-doc.json</configFile>
<!--smart-doc实现自动分析依赖树加载第三方依赖的源码如果一些框架依赖库加载不到导致报错这时请使用excludes排除掉-->
<!-- <excludes>-->
<!-- &lt;!&ndash;格式为groupId:artifactId;参考如下&ndash;&gt;-->
<!-- <exclude>com.alibaba:fastjson</exclude>-->
<!-- </excludes>-->
<!-- &lt;!&ndash;自1.0.8版本开始插件提供includes支持,配置了includes后插件会按照用户配置加载而不是自动加载因此使用时需要注意&ndash;&gt;-->
<!-- &lt;!&ndash;smart-doc能自动分析依赖树加载所有依赖源码原则上会影响文档构建效率因此你可以使用includes来让插件加载你配置的组件&ndash;&gt;-->
<!-- <includes>-->
<!-- &lt;!&ndash;格式为groupId:artifactId;参考如下&ndash;&gt;-->
<!-- <include>com.alibaba:fastjson</include>-->
<!-- </includes>-->
</configuration>
<executions>
<execution>
<!--如果不需要在执行编译时启动smart-doc则将phase注释掉-->
<!-- <phase>compile</phase>-->
<goals>
<!--smart-doc提供了html、openapi、markdown等goal可按需配置-->
<goal>html</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@ -1,4 +1,4 @@
package club.joylink.rtss;
package club.joylink.rtss.manage;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
@ -6,10 +6,11 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@SpringBootApplication(scanBasePackages = {"club.joylink.rtss"})
@EnableScheduling
@EnableCaching
@MapperScan(basePackages = {"club.joylink.rtss.dao","club.joylink.rtss.iscs.dao"})
@MapperScan(basePackages = {"club.joylink.rtss.manage.dao",
"club.joylink.rtss.*.mapper","club.joylink.rtss.simulation.*.mapper"})
//@EnableRetry
public class RtssApplication {

View File

@ -1,6 +1,6 @@
package club.joylink.rtss.configuration;
package club.joylink.rtss.manage.configuration;
import club.joylink.rtss.entity.project.Project;
import club.joylink.rtss.manage.entity.project.Project;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

View File

@ -1,4 +1,4 @@
package club.joylink.rtss.configuration;
package club.joylink.rtss.manage.configuration;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.convert.converter.Converter;

View File

@ -1,4 +1,4 @@
package club.joylink.rtss.configuration;
package club.joylink.rtss.manage.configuration;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;

View File

@ -1,4 +1,4 @@
package club.joylink.rtss.configuration;
package club.joylink.rtss.manage.configuration;
import io.minio.MinioClient;
import lombok.Getter;

View File

@ -1,6 +1,6 @@
package club.joylink.rtss.configuration;
package club.joylink.rtss.manage.configuration;
import club.joylink.rtss.wechat.converter.WxMappingJackson2HttpMessageConverter;
import club.joylink.rtss.manage.wechat.converter.WxMappingJackson2HttpMessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;

View File

@ -1,4 +1,4 @@
package club.joylink.rtss.configuration;
package club.joylink.rtss.manage.configuration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

View File

@ -1,7 +1,7 @@
package club.joylink.rtss.configuration;
package club.joylink.rtss.manage.configuration;
import club.joylink.rtss.controller.advice.AuthenticateInterceptor;
import club.joylink.rtss.controller.advice.LicenseInterceptor;
import club.joylink.rtss.manage.controller.advice.AuthenticateInterceptor;
import club.joylink.rtss.manage.controller.advice.LicenseInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.format.FormatterRegistry;

View File

@ -1,4 +1,4 @@
package club.joylink.rtss.configuration.configProp;
package club.joylink.rtss.manage.configuration.configProp;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

View File

@ -1,4 +1,4 @@
package club.joylink.rtss.configuration.configProp;
package club.joylink.rtss.manage.configuration.configProp;
import lombok.Getter;
import lombok.Setter;

View File

@ -1,4 +1,4 @@
package club.joylink.rtss.configuration.configProp;
package club.joylink.rtss.manage.configuration.configProp;
import com.google.common.collect.Lists;
import lombok.Getter;

View File

@ -1,4 +1,4 @@
package club.joylink.rtss.configuration.configProp;
package club.joylink.rtss.manage.configuration.configProp;
import lombok.Getter;
import lombok.Setter;

View File

@ -1,4 +1,4 @@
package club.joylink.rtss.configuration.configProp;
package club.joylink.rtss.manage.configuration.configProp;
import lombok.Getter;
import lombok.Setter;

View File

@ -1,4 +1,4 @@
package club.joylink.rtss.configuration.configProp;
package club.joylink.rtss.manage.configuration.configProp;
import lombok.Getter;
import lombok.Setter;

View File

@ -1,4 +1,4 @@
package club.joylink.rtss.configuration.configProp;
package club.joylink.rtss.manage.configuration.configProp;
import lombok.Getter;
import lombok.Setter;

View File

@ -1,4 +1,4 @@
package club.joylink.rtss.constants;
package club.joylink.rtss.manage.constants;
public interface BusinessConsts {

View File

@ -1,6 +1,6 @@
package club.joylink.rtss.constants;
package club.joylink.rtss.manage.constants;
import club.joylink.rtss.exception.BusinessExceptionAssertEnum;
import club.joylink.rtss.manage.exception.BusinessExceptionAssertEnum;
import lombok.Getter;
import org.springframework.util.StringUtils;

View File

@ -1,4 +1,4 @@
package club.joylink.rtss.constants;
package club.joylink.rtss.manage.constants;
import lombok.Getter;

View File

@ -1,4 +1,4 @@
package club.joylink.rtss.constants;
package club.joylink.rtss.manage.constants;
/**
* 方向标签枚举

View File

@ -1,4 +1,4 @@
package club.joylink.rtss.constants;
package club.joylink.rtss.manage.constants;
import lombok.Getter;

View File

@ -1,4 +1,4 @@
package club.joylink.rtss.constants;
package club.joylink.rtss.manage.constants;
public enum IscsSystem {
PA,

View File

@ -1,4 +1,4 @@
package club.joylink.rtss.constants;
package club.joylink.rtss.manage.constants;
import lombok.Getter;

View File

@ -1,4 +1,4 @@
package club.joylink.rtss.constants;
package club.joylink.rtss.manage.constants;
import lombok.Getter;

View File

@ -1,4 +1,4 @@
package club.joylink.rtss.constants;
package club.joylink.rtss.manage.constants;
import lombok.Getter;

View File

@ -1,4 +1,4 @@
package club.joylink.rtss.constants;
package club.joylink.rtss.manage.constants;
import lombok.Getter;

View File

@ -1,4 +1,4 @@
package club.joylink.rtss.constants;
package club.joylink.rtss.manage.constants;
import lombok.Getter;

View File

@ -1,4 +1,4 @@
package club.joylink.rtss.constants;
package club.joylink.rtss.manage.constants;
/**
* 项目

View File

@ -1,4 +1,4 @@
package club.joylink.rtss.constants;
package club.joylink.rtss.manage.constants;
import lombok.Getter;

View File

@ -1,4 +1,4 @@
package club.joylink.rtss.constants;
package club.joylink.rtss.manage.constants;
/**
* 项目

View File

@ -1,4 +1,4 @@
package club.joylink.rtss.constants;
package club.joylink.rtss.manage.constants;
import lombok.AllArgsConstructor;
import lombok.Getter;

View File

@ -1,4 +1,4 @@
package club.joylink.rtss.constants;
package club.joylink.rtss.manage.constants;
import lombok.AllArgsConstructor;
import lombok.Getter;

View File

@ -1,4 +1,4 @@
package club.joylink.rtss.constants;
package club.joylink.rtss.manage.constants;
import lombok.Getter;

View File

@ -1,4 +1,4 @@
package club.joylink.rtss.constants;
package club.joylink.rtss.manage.constants;
import lombok.Getter;

View File

@ -1,4 +1,4 @@
package club.joylink.rtss.constants;
package club.joylink.rtss.manage.constants;
import lombok.Getter;

View File

@ -1,4 +1,4 @@
package club.joylink.rtss.constants;
package club.joylink.rtss.manage.constants;
import lombok.Getter;

View File

@ -1,4 +1,4 @@
package club.joylink.rtss.constants;
package club.joylink.rtss.manage.constants;
import lombok.Getter;

View File

@ -1,4 +1,4 @@
package club.joylink.rtss.constants;
package club.joylink.rtss.manage.constants;
import lombok.Getter;

View File

@ -1,4 +1,4 @@
package club.joylink.rtss.constants;
package club.joylink.rtss.manage.constants;
public interface ServicePath {
String MAIN = "https://joylink.club/jlcloud";

View File

@ -1,4 +1,4 @@
package club.joylink.rtss.constants;
package club.joylink.rtss.manage.constants;
public enum SortDirection {
/**

View File

@ -1,6 +1,6 @@
package club.joylink.rtss.constants;
package club.joylink.rtss.manage.constants;
import club.joylink.rtss.exception.BusinessExceptionAssertEnum;
import club.joylink.rtss.manage.exception.BusinessExceptionAssertEnum;
import lombok.Getter;
@Getter

View File

@ -1,6 +1,6 @@
package club.joylink.rtss.constants;
package club.joylink.rtss.manage.constants;
import club.joylink.rtss.exception.BusinessExceptionAssertEnum;
import club.joylink.rtss.manage.exception.BusinessExceptionAssertEnum;
import lombok.Getter;
import java.util.Objects;

View File

@ -1,4 +1,4 @@
package club.joylink.rtss.constants;
package club.joylink.rtss.manage.constants;
import lombok.Getter;

View File

@ -1,4 +1,4 @@
package club.joylink.rtss.constants;
package club.joylink.rtss.manage.constants;
import lombok.Getter;

View File

@ -1,4 +1,4 @@
package club.joylink.rtss.constants;
package club.joylink.rtss.manage.constants;
import lombok.Getter;

View File

@ -1,4 +1,4 @@
package club.joylink.rtss.constants;
package club.joylink.rtss.manage.constants;
public interface WxConstants {

View File

@ -1,7 +1,7 @@
package club.joylink.rtss.controller;
package club.joylink.rtss.manage.controller;
import club.joylink.rtss.services.CgyRecordService;
import club.joylink.rtss.vo.client.CgyRecordVO;
import club.joylink.rtss.manage.services.CgyRecordService;
import club.joylink.rtss.manage.vo.client.CgyRecordVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PutMapping;

View File

@ -1,15 +1,15 @@
package club.joylink.rtss.controller;
package club.joylink.rtss.manage.controller;
import club.joylink.rtss.constants.RoleEnum;
import club.joylink.rtss.controller.advice.AuthenticateInterceptor;
import club.joylink.rtss.controller.advice.Role;
import club.joylink.rtss.services.org.*;
import club.joylink.rtss.vo.AccountVO;
import club.joylink.rtss.vo.LoginUserInfoVO;
import club.joylink.rtss.vo.client.LessonVO;
import club.joylink.rtss.vo.client.Node;
import club.joylink.rtss.vo.client.PageVO;
import club.joylink.rtss.vo.client.org.*;
import club.joylink.rtss.manage.constants.RoleEnum;
import club.joylink.rtss.manage.controller.advice.AuthenticateInterceptor;
import club.joylink.rtss.manage.controller.advice.Role;
import club.joylink.rtss.manage.services.org.*;
import club.joylink.rtss.manage.vo.AccountVO;
import club.joylink.rtss.manage.vo.LoginUserInfoVO;
import club.joylink.rtss.manage.vo.client.LessonVO;
import club.joylink.rtss.manage.vo.client.Node;
import club.joylink.rtss.manage.vo.client.PageVO;
import club.joylink.rtss.manage.vo.client.org.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@ -18,7 +18,7 @@ import java.util.List;
/**
* 组织成员管理接口
* 这些接口逐渐废弃新接口加在这里{@link club.joylink.rtss.controller.org.OrgController}
* 这些接口逐渐废弃新接口加在这里{@link club.joylink.rtss.manage.controller.org.OrgController}
*/
@RestController
@RequestMapping("/api/company")

View File

@ -1,14 +1,14 @@
package club.joylink.rtss.controller;
package club.joylink.rtss.manage.controller;
import club.joylink.rtss.constants.Project;
import club.joylink.rtss.controller.org.OrgProjectController;
import club.joylink.rtss.controller.paper.PaperCompositionController;
import club.joylink.rtss.controller.publish.MapFunctionController;
import club.joylink.rtss.controller.user.UserController;
import club.joylink.rtss.dao.MapDataDAO;
import club.joylink.rtss.dao.MapInfoDAO;
import club.joylink.rtss.dao.OrgDAO;
import club.joylink.rtss.entity.*;
import club.joylink.rtss.manage.constants.Project;
import club.joylink.rtss.manage.controller.org.OrgProjectController;
import club.joylink.rtss.manage.controller.paper.PaperCompositionController;
import club.joylink.rtss.manage.controller.publish.MapFunctionController;
import club.joylink.rtss.manage.controller.user.UserController;
import club.joylink.rtss.manage.dao.MapDataDAO;
import club.joylink.rtss.manage.dao.MapInfoDAO;
import club.joylink.rtss.manage.dao.OrgDAO;
import club.joylink.rtss.manage.entity.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.PostMapping;

View File

@ -1,10 +1,10 @@
package club.joylink.rtss.controller;
package club.joylink.rtss.manage.controller;
import club.joylink.rtss.services.file.IFileManagerService;
import club.joylink.rtss.vo.AccountVO;
import club.joylink.rtss.vo.client.file.FileBindingVO;
import club.joylink.rtss.vo.client.file.FileQueryVO;
import club.joylink.rtss.vo.client.file.FileVO;
import club.joylink.rtss.manage.services.file.IFileManagerService;
import club.joylink.rtss.manage.vo.AccountVO;
import club.joylink.rtss.manage.vo.client.file.FileBindingVO;
import club.joylink.rtss.manage.vo.client.file.FileQueryVO;
import club.joylink.rtss.manage.vo.client.file.FileVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

View File

@ -1,15 +1,15 @@
package club.joylink.rtss.controller;
package club.joylink.rtss.manage.controller;
import club.joylink.rtss.services.ILearnService;
import club.joylink.rtss.vo.AccountVO;
import club.joylink.rtss.vo.client.PageQueryVO;
import club.joylink.rtss.vo.client.PageVO;
import club.joylink.rtss.vo.client.learn.*;
import club.joylink.rtss.vo.client.post.LearnMessageCreateVO;
import club.joylink.rtss.vo.client.post.LearnMessagePagedQueryVO;
import club.joylink.rtss.vo.client.post.LearnMessageVO;
import club.joylink.rtss.vo.client.post.LearnPostPagedQueryVO;
import club.joylink.rtss.vo.client.validGroup.LearnCommentCreateCheck;
import club.joylink.rtss.manage.services.ILearnService;
import club.joylink.rtss.manage.vo.AccountVO;
import club.joylink.rtss.manage.vo.client.PageQueryVO;
import club.joylink.rtss.manage.vo.client.PageVO;
import club.joylink.rtss.manage.vo.client.learn.*;
import club.joylink.rtss.manage.vo.client.post.LearnMessageCreateVO;
import club.joylink.rtss.manage.vo.client.post.LearnMessagePagedQueryVO;
import club.joylink.rtss.manage.vo.client.post.LearnMessageVO;
import club.joylink.rtss.manage.vo.client.post.LearnPostPagedQueryVO;
import club.joylink.rtss.manage.vo.client.validGroup.LearnCommentCreateCheck;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

View File

@ -1,14 +1,14 @@
package club.joylink.rtss.controller;
package club.joylink.rtss.manage.controller;
import club.joylink.rtss.exception.BaseException;
import club.joylink.rtss.exception.BusinessExceptionAssertEnum;
import club.joylink.rtss.services.auth.IAuthenticateService;
import club.joylink.rtss.vo.AccountVO;
import club.joylink.rtss.vo.LoginUserInfoVO;
import club.joylink.rtss.vo.client.LoginStatusVO;
import club.joylink.rtss.vo.client.LoginUserVO;
import club.joylink.rtss.vo.client.validGroup.LoginInfoCheck;
import club.joylink.rtss.vo.client.validGroup.ThirdLoginInfoCheck;
import club.joylink.rtss.manage.exception.BaseException;
import club.joylink.rtss.manage.exception.BusinessExceptionAssertEnum;
import club.joylink.rtss.manage.services.auth.IAuthenticateService;
import club.joylink.rtss.manage.vo.AccountVO;
import club.joylink.rtss.manage.vo.LoginUserInfoVO;
import club.joylink.rtss.manage.vo.client.LoginStatusVO;
import club.joylink.rtss.manage.vo.client.LoginUserVO;
import club.joylink.rtss.manage.vo.client.validGroup.LoginInfoCheck;
import club.joylink.rtss.manage.vo.client.validGroup.ThirdLoginInfoCheck;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

View File

@ -1,10 +1,10 @@
package club.joylink.rtss.controller;
package club.joylink.rtss.manage.controller;
import club.joylink.rtss.services.IMap3dModelService;
import club.joylink.rtss.vo.AccountVO;
import club.joylink.rtss.vo.client.map.Map3dModelCreateVO;
import club.joylink.rtss.vo.client.map.Map3dModelUpdateVO;
import club.joylink.rtss.vo.client.map.Map3dModelVO;
import club.joylink.rtss.manage.services.IMap3dModelService;
import club.joylink.rtss.manage.vo.AccountVO;
import club.joylink.rtss.manage.vo.client.map.Map3dModelCreateVO;
import club.joylink.rtss.manage.vo.client.map.Map3dModelUpdateVO;
import club.joylink.rtss.manage.vo.client.map.Map3dModelVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;

View File

@ -1,7 +1,7 @@
package club.joylink.rtss.controller;
package club.joylink.rtss.manage.controller;
import club.joylink.rtss.services.draftData.DraftMapDataHandleService;
import club.joylink.rtss.services.publishData.PublishMapDataHandler;
import club.joylink.rtss.manage.services.draftData.DraftMapDataHandleService;
import club.joylink.rtss.manage.services.publishData.PublishMapDataHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

View File

@ -1,10 +1,10 @@
package club.joylink.rtss.controller;
package club.joylink.rtss.manage.controller;
import club.joylink.rtss.entity.minio.MinioFileInfo;
import club.joylink.rtss.services.MinioService;
import club.joylink.rtss.vo.AccountVO;
import club.joylink.rtss.vo.client.PageVO;
import club.joylink.rtss.vo.minio.MinioFilePageVO;
import club.joylink.rtss.manage.entity.minio.MinioFileInfo;
import club.joylink.rtss.manage.services.MinioService;
import club.joylink.rtss.manage.vo.AccountVO;
import club.joylink.rtss.manage.vo.client.PageVO;
import club.joylink.rtss.manage.vo.minio.MinioFilePageVO;
import io.minio.http.Method;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

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