parent
							
								
									43f0c9a5c4
								
							
						
					
					
						commit
						be03878e94
					
				@ -0,0 +1,49 @@ | 
				
			||||
# Wusthelper-backend | 
				
			||||
 | 
				
			||||
武科大助手后端项目 | 
				
			||||
 | 
				
			||||
应该是第三代后端了吧。 | 
				
			||||
 | 
				
			||||
新的重写过的后端,其实在这版正式出来之前已经有很多个实验性的原型版本了,但是都因为效果不如意胎死腹中给砍了,没有继续写下去(其实这个readme也是曾经最早的一个原型版本改来的) | 
				
			||||
 | 
				
			||||
这代后端结构与前面的有很大不同,使用了真·多模块的方式运行部署,部分独立模块以不同的程序运行,子模块部署在内网时,可以自动注册frpc进行服务远程转发,主服务和子服务通过http进行通信调用,各模块可以部署在不同的服务器或容器中,当然,也可以挤在一起跑。 | 
				
			||||
 | 
				
			||||
因为基于http的json通信,因此可以跨语言语言进行调用这些子服务,若某个模块使用某种语言有比较大的优势(如网关服务可用go或node等进行开发),可以尝试直接用其他语言进行替换,只需要开发时遵循文档即可 | 
				
			||||
~~(虽然现在并没有什么文档之类的(但是以后会补上来的啦))~~。 | 
				
			||||
 | 
				
			||||
当某模块更新或下线时,可以在不重启整个项目的情况下进行更新,同时如果有多个实例部署,可及时切换到可用节点上,从而避免整个项目的完全重启而导致服务完全中断,只要对外api网关模块仍在运行,就可使用仍在运行的模块继续提供一定的服务,提高可用性,同时由于各个模块被拆分,因此相较于以前更为轻量,在模块更新或重启时也能更快的恢复服务 | 
				
			||||
 | 
				
			||||
该项目意在探索新技术,同时提高后端服务的可用性 | 
				
			||||
 | 
				
			||||
@lensferno | 
				
			||||
 | 
				
			||||
--- | 
				
			||||
 | 
				
			||||
## 环境要求 | 
				
			||||
 | 
				
			||||
包管理和构建: | 
				
			||||
Maven 3.8.2+ | 
				
			||||
- 后续可能会看情况转用Gradle | 
				
			||||
 | 
				
			||||
Java版本: | 
				
			||||
Java 17+ | 
				
			||||
 | 
				
			||||
--- | 
				
			||||
 | 
				
			||||
## 项目模块结构 | 
				
			||||
 | 
				
			||||
### agent-service | 
				
			||||
 | 
				
			||||
--- | 
				
			||||
 | 
				
			||||
## 关于Mywust库的导入问题 | 
				
			||||
 | 
				
			||||
--- | 
				
			||||
 | 
				
			||||
## 文档 | 
				
			||||
 | 
				
			||||
详见[doc](/doc) | 
				
			||||
 | 
				
			||||
--- | 
				
			||||
 | 
				
			||||
就先这样吧,手累了 | 
				
			||||
@ -1,4 +1,4 @@ | 
				
			||||
package cn.wustlinghang; | 
				
			||||
package cn.wustlinghang.data; | 
				
			||||
 | 
				
			||||
public class Main { | 
				
			||||
    public static void main(String[] args) { | 
				
			||||
@ -1,41 +1,41 @@ | 
				
			||||
<?xml version="1.0" encoding="UTF-8"?> | 
				
			||||
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" | 
				
			||||
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> | 
				
			||||
  <modelVersion>4.0.0</modelVersion> | 
				
			||||
  <groupId>cn.wustlinghang.wusthelper</groupId> | 
				
			||||
  <artifactId>web</artifactId> | 
				
			||||
  <version>0.0.1-SNAPSHOT</version> | 
				
			||||
  <dependencies> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>jakarta.annotation</groupId> | 
				
			||||
      <artifactId>jakarta.annotation-api</artifactId> | 
				
			||||
      <version>2.1.1</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>javax.annotation</groupId> | 
				
			||||
      <artifactId>javax.annotation-api</artifactId> | 
				
			||||
      <version>1.3.2</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>org.projectlombok</groupId> | 
				
			||||
      <artifactId>lombok</artifactId> | 
				
			||||
      <version>1.18.26</version> | 
				
			||||
      <scope>provided</scope> | 
				
			||||
    </dependency> | 
				
			||||
  </dependencies> | 
				
			||||
  <repositories> | 
				
			||||
    <repository> | 
				
			||||
      <id>central</id> | 
				
			||||
      <url>https://repo1.maven.org/maven2</url> | 
				
			||||
    </repository> | 
				
			||||
    <repository> | 
				
			||||
      <snapshots> | 
				
			||||
        <enabled>true</enabled> | 
				
			||||
      </snapshots> | 
				
			||||
      <id>github</id> | 
				
			||||
      <url>https://maven.pkg.github.com/LingHangStudio/mywust</url> | 
				
			||||
    </repository> | 
				
			||||
  </repositories> | 
				
			||||
</project> | 
				
			||||
<?xml version="1.0" encoding="UTF-8"?> | 
				
			||||
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" | 
				
			||||
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> | 
				
			||||
  <modelVersion>4.0.0</modelVersion> | 
				
			||||
  <groupId>cn.wustlinghang.wusthelper</groupId> | 
				
			||||
  <artifactId>web</artifactId> | 
				
			||||
  <version>0.0.1-SNAPSHOT</version> | 
				
			||||
  <dependencies> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>jakarta.annotation</groupId> | 
				
			||||
      <artifactId>jakarta.annotation-api</artifactId> | 
				
			||||
      <version>2.1.1</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>javax.annotation</groupId> | 
				
			||||
      <artifactId>javax.annotation-api</artifactId> | 
				
			||||
      <version>1.3.2</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>org.projectlombok</groupId> | 
				
			||||
      <artifactId>lombok</artifactId> | 
				
			||||
      <version>1.18.26</version> | 
				
			||||
      <scope>provided</scope> | 
				
			||||
    </dependency> | 
				
			||||
  </dependencies> | 
				
			||||
  <repositories> | 
				
			||||
    <repository> | 
				
			||||
      <id>central</id> | 
				
			||||
      <url>https://repo1.maven.org/maven2</url> | 
				
			||||
    </repository> | 
				
			||||
    <repository> | 
				
			||||
      <snapshots> | 
				
			||||
        <enabled>true</enabled> | 
				
			||||
      </snapshots> | 
				
			||||
      <id>github</id> | 
				
			||||
      <url>https://maven.pkg.github.com/LingHangStudio/mywust</url> | 
				
			||||
    </repository> | 
				
			||||
  </repositories> | 
				
			||||
</project> | 
				
			||||
@ -0,0 +1,38 @@ | 
				
			||||
target/ | 
				
			||||
!.mvn/wrapper/maven-wrapper.jar | 
				
			||||
!**/src/main/**/target/ | 
				
			||||
!**/src/test/**/target/ | 
				
			||||
 | 
				
			||||
### IntelliJ IDEA ### | 
				
			||||
.idea/modules.xml | 
				
			||||
.idea/jarRepositories.xml | 
				
			||||
.idea/compiler.xml | 
				
			||||
.idea/libraries/ | 
				
			||||
*.iws | 
				
			||||
*.iml | 
				
			||||
*.ipr | 
				
			||||
 | 
				
			||||
### Eclipse ### | 
				
			||||
.apt_generated | 
				
			||||
.classpath | 
				
			||||
.factorypath | 
				
			||||
.project | 
				
			||||
.settings | 
				
			||||
.springBeans | 
				
			||||
.sts4-cache | 
				
			||||
 | 
				
			||||
### NetBeans ### | 
				
			||||
/nbproject/private/ | 
				
			||||
/nbbuild/ | 
				
			||||
/dist/ | 
				
			||||
/nbdist/ | 
				
			||||
/.nb-gradle/ | 
				
			||||
build/ | 
				
			||||
!**/src/main/**/build/ | 
				
			||||
!**/src/test/**/build/ | 
				
			||||
 | 
				
			||||
### VS Code ### | 
				
			||||
.vscode/ | 
				
			||||
 | 
				
			||||
### Mac OS ### | 
				
			||||
.DS_Store | 
				
			||||
@ -0,0 +1,98 @@ | 
				
			||||
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | 
				
			||||
    <modelVersion>4.0.0</modelVersion> | 
				
			||||
    <parent> | 
				
			||||
        <groupId>cn.wustlinghang.wusthelper</groupId> | 
				
			||||
        <artifactId>backend-main</artifactId> | 
				
			||||
        <version>${revision}</version> | 
				
			||||
    </parent> | 
				
			||||
 | 
				
			||||
    <artifactId>backend-web</artifactId> | 
				
			||||
 | 
				
			||||
    <properties> | 
				
			||||
        <maven.compiler.source>17</maven.compiler.source> | 
				
			||||
        <maven.compiler.target>17</maven.compiler.target> | 
				
			||||
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> | 
				
			||||
 | 
				
			||||
        <springboot.version>3.1.1</springboot.version> | 
				
			||||
        <snakeyaml.version>2.0</snakeyaml.version> | 
				
			||||
        <feign.version>4.0.3</feign.version> | 
				
			||||
    </properties> | 
				
			||||
 | 
				
			||||
    <dependencyManagement> | 
				
			||||
        <dependencies> | 
				
			||||
            <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-dependencies --> | 
				
			||||
            <dependency> | 
				
			||||
                <groupId>org.springframework.boot</groupId> | 
				
			||||
                <artifactId>spring-boot-dependencies</artifactId> | 
				
			||||
                <version>${springboot.version}</version> | 
				
			||||
                <type>pom</type> | 
				
			||||
                <scope>import</scope> | 
				
			||||
            </dependency> | 
				
			||||
        </dependencies> | 
				
			||||
    </dependencyManagement> | 
				
			||||
 | 
				
			||||
    <dependencies> | 
				
			||||
        <!-- 清除springboot的依赖引入的漏洞警告,直接提升版本消除 --> | 
				
			||||
        <dependency> | 
				
			||||
            <groupId>org.yaml</groupId> | 
				
			||||
            <artifactId>snakeyaml</artifactId> | 
				
			||||
            <version>${snakeyaml.version}</version> | 
				
			||||
        </dependency> | 
				
			||||
 | 
				
			||||
        <dependency> | 
				
			||||
            <groupId>org.springframework.boot</groupId> | 
				
			||||
            <artifactId>spring-boot-starter-validation</artifactId> | 
				
			||||
        </dependency> | 
				
			||||
        <dependency> | 
				
			||||
            <groupId>org.springframework.boot</groupId> | 
				
			||||
            <artifactId>spring-boot-starter-web</artifactId> | 
				
			||||
        </dependency> | 
				
			||||
 | 
				
			||||
        <dependency> | 
				
			||||
            <groupId>org.springframework.cloud</groupId> | 
				
			||||
            <artifactId>spring-cloud-starter-openfeign</artifactId> | 
				
			||||
            <version>${feign.version}</version> | 
				
			||||
        </dependency> | 
				
			||||
 | 
				
			||||
        <dependency> | 
				
			||||
            <groupId>com.mysql</groupId> | 
				
			||||
            <artifactId>mysql-connector-j</artifactId> | 
				
			||||
            <scope>runtime</scope> | 
				
			||||
        </dependency> | 
				
			||||
        <dependency> | 
				
			||||
            <groupId>org.projectlombok</groupId> | 
				
			||||
            <artifactId>lombok</artifactId> | 
				
			||||
            <optional>true</optional> | 
				
			||||
            <scope>provided</scope> | 
				
			||||
        </dependency> | 
				
			||||
        <dependency> | 
				
			||||
            <groupId>org.springframework.boot</groupId> | 
				
			||||
            <artifactId>spring-boot-starter-test</artifactId> | 
				
			||||
            <scope>test</scope> | 
				
			||||
        </dependency> | 
				
			||||
    </dependencies> | 
				
			||||
 | 
				
			||||
    <build> | 
				
			||||
        <plugins> | 
				
			||||
            <plugin> | 
				
			||||
                <groupId>org.graalvm.buildtools</groupId> | 
				
			||||
                <artifactId>native-maven-plugin</artifactId> | 
				
			||||
            </plugin> | 
				
			||||
            <plugin> | 
				
			||||
                <groupId>org.springframework.boot</groupId> | 
				
			||||
                <artifactId>spring-boot-maven-plugin</artifactId> | 
				
			||||
                <configuration> | 
				
			||||
                    <excludes> | 
				
			||||
                        <exclude> | 
				
			||||
                            <groupId>org.projectlombok</groupId> | 
				
			||||
                            <artifactId>lombok</artifactId> | 
				
			||||
                        </exclude> | 
				
			||||
                    </excludes> | 
				
			||||
                </configuration> | 
				
			||||
            </plugin> | 
				
			||||
        </plugins> | 
				
			||||
    </build> | 
				
			||||
</project> | 
				
			||||
@ -1,7 +0,0 @@ | 
				
			||||
package cn.wustlinghang; | 
				
			||||
 | 
				
			||||
public class Main { | 
				
			||||
    public static void main(String[] args) { | 
				
			||||
        System.out.println("Hello world!"); | 
				
			||||
    } | 
				
			||||
} | 
				
			||||
@ -1,6 +1,4 @@ | 
				
			||||
package cn.wustlinghang.wusthelper.internal.graduate.exception; | 
				
			||||
 | 
				
			||||
import cn.wustlinghang.wusthelper.rpc.exception.RpcException; | 
				
			||||
package cn.wustlinghang.wusthelper.internal.rpc.exception; | 
				
			||||
 | 
				
			||||
import java.util.StringJoiner; | 
				
			||||
 | 
				
			||||
@ -1,6 +1,4 @@ | 
				
			||||
package cn.wustlinghang.wusthelper.internal.physics.exception; | 
				
			||||
 | 
				
			||||
import cn.wustlinghang.wusthelper.rpc.exception.RpcException; | 
				
			||||
package cn.wustlinghang.wusthelper.internal.rpc.exception; | 
				
			||||
 | 
				
			||||
import java.util.StringJoiner; | 
				
			||||
 | 
				
			||||
@ -1,4 +1,4 @@ | 
				
			||||
package cn.wustlinghang.wusthelper.rpc.exception; | 
				
			||||
package cn.wustlinghang.wusthelper.internal.rpc.exception; | 
				
			||||
 | 
				
			||||
public class RpcException extends RuntimeException { | 
				
			||||
    protected final int code; | 
				
			||||
@ -1,63 +1,43 @@ | 
				
			||||
/* | 
				
			||||
 * Class created by lensfrex. | 
				
			||||
 */ | 
				
			||||
 | 
				
			||||
package cn.wustlinghang.wusthelper.rpc.response; | 
				
			||||
 | 
				
			||||
public enum ResponseCode { | 
				
			||||
    SUCCESS(20000, "成功"), | 
				
			||||
    REQUEST_TOO_FAST(20001, "技能冷却中..."), | 
				
			||||
    INVALID_REQUEST(30000, "非法请求"), | 
				
			||||
    PARAM_WRONG(30001, "参数错误"), | 
				
			||||
    PERMISSION_DENIED(40000, "权限不足"), | 
				
			||||
    TOKEN_EXPIRED(40001, "token过期"), | 
				
			||||
    TOKEN_INVALID(40002, "token无效"), | 
				
			||||
    SERVER_INTERNAL_ERROR(50000, "服务器内部错误"), | 
				
			||||
    API_NOT_IMPLEMENT(0, "接口未实现"), | 
				
			||||
 | 
				
			||||
    STUDENT_ID_DOES_NOT_EXISTS(60001,"学生学号不存在"), | 
				
			||||
    USER_WAS_BANNED_PUBLISH(60201, "用户被禁止发布告示信息"), | 
				
			||||
    IMAGE_FORMAT_WORN(60202, "上传的图片格式有误"), | 
				
			||||
    NOTICE_WAS_INTERCEPT(60203, "消息被系统拦截发布"), | 
				
			||||
 | 
				
			||||
    USER_DOES_NOT_MATCH_PUBLISHER(60301, "请求用户与告示发表者不匹配"), | 
				
			||||
 | 
				
			||||
    REQUEST_FILE_DOES_NOT_EXIST(60701, "请求的文件不存在"); | 
				
			||||
 | 
				
			||||
    private final int code; | 
				
			||||
 | 
				
			||||
    private final String message; | 
				
			||||
 | 
				
			||||
    ResponseCode(int code, String message) { | 
				
			||||
        this.code = code; | 
				
			||||
        this.message = message; | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    public int getCode() { | 
				
			||||
        return code; | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    public String getMessage() { | 
				
			||||
        return message; | 
				
			||||
    } | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
enum Code { | 
				
			||||
    Success, Fail, Wron | 
				
			||||
} | 
				
			||||
 | 
				
			||||
class Singleton { | 
				
			||||
    private static Singleton instance; | 
				
			||||
 | 
				
			||||
    private Singleton() { | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    public static Singleton getInstance() { | 
				
			||||
        if (instance == null) { | 
				
			||||
            instance = new Singleton(); | 
				
			||||
        } | 
				
			||||
 | 
				
			||||
        return instance; | 
				
			||||
    } | 
				
			||||
/* | 
				
			||||
 * Class created by lensfrex. | 
				
			||||
 */ | 
				
			||||
 | 
				
			||||
package cn.wustlinghang.wusthelper.internal.rpc.response; | 
				
			||||
 | 
				
			||||
public enum ResponseCode { | 
				
			||||
    SUCCESS(20000, "成功"), | 
				
			||||
    REQUEST_TOO_FAST(20001, "技能冷却中..."), | 
				
			||||
    INVALID_REQUEST(30000, "非法请求"), | 
				
			||||
    PARAM_WRONG(30001, "参数错误"), | 
				
			||||
    PERMISSION_DENIED(40000, "权限不足"), | 
				
			||||
    TOKEN_EXPIRED(40001, "token过期"), | 
				
			||||
    TOKEN_INVALID(40002, "token无效"), | 
				
			||||
    SERVER_INTERNAL_ERROR(50000, "服务器内部错误"), | 
				
			||||
    API_NOT_IMPLEMENT(0, "接口未实现"), | 
				
			||||
 | 
				
			||||
    STUDENT_ID_DOES_NOT_EXISTS(60001,"学生学号不存在"), | 
				
			||||
    USER_WAS_BANNED_PUBLISH(60201, "用户被禁止发布告示信息"), | 
				
			||||
    IMAGE_FORMAT_WORN(60202, "上传的图片格式有误"), | 
				
			||||
    NOTICE_WAS_INTERCEPT(60203, "消息被系统拦截发布"), | 
				
			||||
 | 
				
			||||
    USER_DOES_NOT_MATCH_PUBLISHER(60301, "请求用户与告示发表者不匹配"), | 
				
			||||
 | 
				
			||||
    REQUEST_FILE_DOES_NOT_EXIST(60701, "请求的文件不存在"); | 
				
			||||
 | 
				
			||||
    private final int code; | 
				
			||||
 | 
				
			||||
    private final String message; | 
				
			||||
 | 
				
			||||
    ResponseCode(int code, String message) { | 
				
			||||
        this.code = code; | 
				
			||||
        this.message = message; | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    public int getCode() { | 
				
			||||
        return code; | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    public String getMessage() { | 
				
			||||
        return message; | 
				
			||||
    } | 
				
			||||
} | 
				
			||||
@ -1,4 +1,4 @@ | 
				
			||||
package cn.wustlinghang.wusthelper.rpc.response; | 
				
			||||
package cn.wustlinghang.wusthelper.internal.rpc.response; | 
				
			||||
 | 
				
			||||
public record RpcResponse<T>(int code, String msg, T data) { | 
				
			||||
    public static <T> RpcResponse<T> success(T data) { | 
				
			||||
@ -1,4 +1,4 @@ | 
				
			||||
package cn.wustlinghang.wusthelper.rpc.util; | 
				
			||||
package cn.wustlinghang.wusthelper.internal.rpc.util; | 
				
			||||
 | 
				
			||||
public class EnumUtil { | 
				
			||||
    public static <E extends Enum<E>> boolean equal(int value, Enum<E> e) { | 
				
			||||
@ -1,20 +0,0 @@ | 
				
			||||
package cn.wustlinghang.wusthelper.rpc.request; | 
				
			||||
 | 
				
			||||
import lombok.Data; | 
				
			||||
 | 
				
			||||
import java.util.HashMap; | 
				
			||||
import java.util.Map; | 
				
			||||
 | 
				
			||||
@Data | 
				
			||||
public class RpcRequest { | 
				
			||||
    private final Map<String, String> arg; | 
				
			||||
 | 
				
			||||
    public RpcRequest() { | 
				
			||||
        this.arg = new HashMap<>(); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    public RpcRequest addArg(String key, String value) { | 
				
			||||
        this.arg.put(key, value); | 
				
			||||
        return this; | 
				
			||||
    } | 
				
			||||
} | 
				
			||||
@ -1 +1 @@ | 
				
			||||
Subproject commit a18aa81d71123f54e959866e93c7ceb56b03ade4 | 
				
			||||
Subproject commit 965562b69e35d445fb5c58b2e2afd9cdf27d3146 | 
				
			||||
@ -1,8 +0,0 @@ | 
				
			||||
package cn.wustlinghang.wusthelper.internal.library.services; | 
				
			||||
 | 
				
			||||
import jakarta.enterprise.context.ApplicationScoped; | 
				
			||||
 | 
				
			||||
@ApplicationScoped | 
				
			||||
public class ParseService { | 
				
			||||
 | 
				
			||||
} | 
				
			||||
Some files were not shown because too many files have changed in this diff Show More
					Loading…
					
					
				
		Reference in new issue