diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
index 38ff681..58a14b2 100644
--- a/.idea/inspectionProfiles/Project_Default.xml
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -36,6 +36,7 @@
diff --git a/README.md b/README.md
index f6ec5cf..c968aba 100644
--- a/README.md
+++ b/README.md
@@ -15,7 +15,7 @@
当某模块更新或下线时,可以在不重启整个项目的情况下进行更新,同时如果有多个实例部署,可及时切换到可用节点上,从而避免整个项目的完全重启而导致服务完全中断,只要对外api网关模块仍在运行,就可使用仍在运行的模块继续提供一定的服务,提高可用性,同时由于各个模块被拆分,因此相较于以前更为轻量,在模块更新或重启时也能更快的恢复服务
-该项目意在探索新技术,同时提高后端服务的可用性
+- 随时有可能脑抽大改结构
@lensferno
@@ -41,6 +41,8 @@ Java 17+
## 关于Mywust库的导入问题
+待补充
+
---
## API文档
@@ -51,10 +53,14 @@ Java 17+
## 构建
+待补充
+
---
## 运行
+待补充
+
---
就先这样吧,手累了
\ No newline at end of file
diff --git a/backend-main/backend-web/pom.xml b/backend-main/backend-web/pom.xml
index 54e75bb..8e47448 100644
--- a/backend-main/backend-web/pom.xml
+++ b/backend-main/backend-web/pom.xml
@@ -22,6 +22,7 @@
1.0.6
4.4.0
+ 6.2.5.RELEASE
@@ -29,6 +30,11 @@
org.springframework.boot
spring-boot-starter-web
+
+ org.springframework.boot
+ spring-boot-devtools
+ true
+
org.springframework.cloud
@@ -65,6 +71,20 @@
${java-jwt.version}
+
+
+ org.springframework.boot
+ spring-boot-starter-data-redis
+
+
+ org.apache.commons
+ commons-pool2
+
+
+ io.lettuce
+ lettuce-core
+ ${lettuce.bersion}
+
diff --git a/backend-main/backend-web/src/main/java/wusthelper/WebBackendMain.java b/backend-main/backend-web/src/main/java/wusthelper/WebBackendMain.java
index cccba7b..19a637d 100644
--- a/backend-main/backend-web/src/main/java/wusthelper/WebBackendMain.java
+++ b/backend-main/backend-web/src/main/java/wusthelper/WebBackendMain.java
@@ -1,6 +1,8 @@
package wusthelper;
import org.mybatis.spring.annotation.MapperScan;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;
diff --git a/backend-main/backend-web/src/main/java/wusthelper/web/api/v2/TokenTool.java b/backend-main/backend-web/src/main/java/wusthelper/web/api/v2/TokenTool.java
index ba9a7f1..1ffbc73 100644
--- a/backend-main/backend-web/src/main/java/wusthelper/web/api/v2/TokenTool.java
+++ b/backend-main/backend-web/src/main/java/wusthelper/web/api/v2/TokenTool.java
@@ -20,7 +20,7 @@ public class TokenTool {
/**
* 签发Token
*
- * @return
+ * @return token
*/
public static String signToken(Long uid, String studentNumber) {
try {
@@ -34,7 +34,7 @@ public class TokenTool {
.withExpiresAt(expireAt)
.sign(jwtAlgorithm);
} catch (Exception e) {
- log.error("[{}]:Token签发工具类>签发Token异常, 空指针异常: uid={},studentNumber={}",
+ log.error("[{}]:Token签发工具类>签发Token异常: uid={},studentNumber={}",
Thread.currentThread().getStackTrace()[1].getMethodName(),
uid, studentNumber);
throw new RuntimeException("[JwtUtil.signToken()]");
@@ -44,10 +44,10 @@ public class TokenTool {
/**
* 校验Token
*
- * @param token
- * @return
+ * @param token token
+ * @return 是否有效
*/
- public static boolean verifyToken(String token) {
+ public static boolean verify(String token) {
try {
JWT.require(jwtAlgorithm)
.build()
@@ -60,20 +60,20 @@ public class TokenTool {
}
/**
- * Token 负载StuId
+ * 从token获取uid
*
- * @param token
- * @return
+ * @param token token
+ * @return uid
*/
public static String getUid(String token) {
return JWT.decode(token).getClaim("StuId").asString();
}
/**
- * Token 负载StuNum
+ * 从token获取学号
*
- * @param token
- * @return
+ * @param token token
+ * @return 学号
*/
public static String getStudentNumber(String token) {
return JWT.decode(token).getClaim("StuNum").asString();
diff --git a/backend-main/backend-web/src/main/java/wusthelper/web/api/v2/dto/response/CourseResponse.java b/backend-main/backend-web/src/main/java/wusthelper/web/api/v2/dto/response/CourseResponse.java
index b90f844..1526933 100644
--- a/backend-main/backend-web/src/main/java/wusthelper/web/api/v2/dto/response/CourseResponse.java
+++ b/backend-main/backend-web/src/main/java/wusthelper/web/api/v2/dto/response/CourseResponse.java
@@ -9,30 +9,37 @@ public class CourseResponse {
* 课程名称
*/
private String className;
+
/**
* 教学班
*/
private String teachClass;
+
/**
* 教师
*/
private String teacher;
+
/**
* 开始周次
*/
private Integer startWeek;
+
/**
* 结束周
*/
private Integer endWeek;
+
/**
* 节数
*/
private Integer section;
+
/**
* 星期
*/
private Integer weekDay;
+
/**
* 教室
*/
diff --git a/backend-main/backend-web/src/main/java/wusthelper/web/api/v2/dto/response/GraduateScoreResponse.java b/backend-main/backend-web/src/main/java/wusthelper/web/api/v2/dto/response/GraduateScoreResponse.java
new file mode 100644
index 0000000..397043e
--- /dev/null
+++ b/backend-main/backend-web/src/main/java/wusthelper/web/api/v2/dto/response/GraduateScoreResponse.java
@@ -0,0 +1,32 @@
+package wusthelper.web.api.v2.dto.response;
+
+import cn.wustlinghang.mywust.data.global.Score;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+@Data
+@Accessors(chain = true)
+public class GraduateScoreResponse {
+
+ //课程名
+ private String name;
+
+ //课程学分
+ private Double credit;
+
+ //选修学期
+ private Integer term;
+
+ //得分
+ private String point;
+
+ public static GraduateScoreResponse from(Score score) {
+ GraduateScoreResponse graduateScoreResponse = new GraduateScoreResponse();
+ graduateScoreResponse.setName(score.getCourseName());
+ graduateScoreResponse.setCredit(Double.parseDouble(score.getCredit()));
+ graduateScoreResponse.setTerm(Integer.parseInt(score.getTerm()));
+ graduateScoreResponse.setPoint(score.getGradePoint());
+
+ return graduateScoreResponse;
+ }
+}
diff --git a/backend-main/backend-web/src/main/java/wusthelper/web/api/v2/dto/response/GraduateStudentInfoResponse.java b/backend-main/backend-web/src/main/java/wusthelper/web/api/v2/dto/response/GraduateStudentInfoResponse.java
new file mode 100644
index 0000000..f171837
--- /dev/null
+++ b/backend-main/backend-web/src/main/java/wusthelper/web/api/v2/dto/response/GraduateStudentInfoResponse.java
@@ -0,0 +1,56 @@
+package wusthelper.web.api.v2.dto.response;
+
+import cn.wustlinghang.mywust.data.global.StudentInfo;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import lombok.Data;
+import wusthelper.web.util.StringUtil;
+
+@Data
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class GraduateStudentInfoResponse {
+ private Long id;
+
+ //学号
+ private String studentNum;
+
+ //密码
+ private String password;
+
+ //姓名
+ private String name;
+
+ //学位
+ private String degree;
+
+ //导师姓名
+ private String tutorName;
+
+ //学院
+ private String academy;
+
+ //专业
+ private String specialty;
+
+ //年级
+ private Integer grade;
+
+ //头像
+ private String avatar;
+
+ public static GraduateStudentInfoResponse from(StudentInfo studentInfo) {
+ GraduateStudentInfoResponse graduateStudentInfoResponse = new GraduateStudentInfoResponse();
+// graduateStudentInfo.setId();
+ graduateStudentInfoResponse.setStudentNum(studentInfo.getStudentNumber());
+// graduateStudentInfo.setPassword();
+ graduateStudentInfoResponse.setName(studentInfo.getName());
+ graduateStudentInfoResponse.setDegree("");
+ graduateStudentInfoResponse.setTutorName("");
+ graduateStudentInfoResponse.setAcademy(studentInfo.getCollege());
+ graduateStudentInfoResponse.setSpecialty(studentInfo.getMajor());
+ int grade = StringUtil.getGradeFromStudentNumber(studentInfo.getStudentNumber());
+ graduateStudentInfoResponse.setGrade(grade);
+ graduateStudentInfoResponse.setAvatar("");
+
+ return graduateStudentInfoResponse;
+ }
+}
diff --git a/backend-main/backend-web/src/main/java/wusthelper/web/api/v2/dto/response/PhysicsCourseResponse.java b/backend-main/backend-web/src/main/java/wusthelper/web/api/v2/dto/response/PhysicsCourseResponse.java
new file mode 100644
index 0000000..00b9720
--- /dev/null
+++ b/backend-main/backend-web/src/main/java/wusthelper/web/api/v2/dto/response/PhysicsCourseResponse.java
@@ -0,0 +1,61 @@
+package wusthelper.web.api.v2.dto.response;
+
+import cn.wustlinghang.mywust.data.physics.PhysicsCourse;
+import lombok.Data;
+import wusthelper.WebBackendMain;
+import wusthelper.web.util.GlobalLogger;
+
+import java.sql.Date;
+import java.text.SimpleDateFormat;
+
+@Data
+public class PhysicsCourseResponse {
+ private String courseName;
+
+ private String teacherName;
+
+ private Integer week;
+
+ private Integer weekDay;
+
+ private Date courseDate;
+
+ private Integer startSection;
+
+ private Integer endSection;
+
+ private String buildingName;
+
+ private String areaNum;
+
+ private String roomNum;
+
+ private String campusName;
+
+ public static PhysicsCourseResponse from(PhysicsCourse course) {
+ PhysicsCourseResponse physicsCourseResponse = new PhysicsCourseResponse();
+ physicsCourseResponse.setCourseName(course.getName());
+ physicsCourseResponse.setTeacherName(course.getTeacher());
+ physicsCourseResponse.setWeek(course.getStartWeek());
+ physicsCourseResponse.setWeekDay(course.getWeekDay());
+ physicsCourseResponse.setStartSection(course.getStartSection());
+ physicsCourseResponse.setEndSection(course.getEndSection());
+
+ try {
+ SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
+ java.util.Date parseDate = formatter.parse(course.getDate());
+ physicsCourseResponse.setCourseDate(new java.sql.Date(parseDate.getTime()));
+ } catch (Exception e) {
+ GlobalLogger.log.error("物理实验课程解析错误,{}", e.getMessage());
+ GlobalLogger.log.debug("", e);
+ }
+
+ var place = course.getClassroom();
+ physicsCourseResponse.setBuildingName(place.getBuilding());
+ physicsCourseResponse.setAreaNum(place.getArea());
+ physicsCourseResponse.setRoomNum(place.getRoom());
+ physicsCourseResponse.setCampusName(place.getCampus());
+
+ return physicsCourseResponse;
+ }
+}
diff --git a/backend-main/backend-web/src/main/java/wusthelper/web/api/v2/module/graduate/GraduateController.java b/backend-main/backend-web/src/main/java/wusthelper/web/api/v2/module/graduate/GraduateController.java
new file mode 100644
index 0000000..f56a5e4
--- /dev/null
+++ b/backend-main/backend-web/src/main/java/wusthelper/web/api/v2/module/graduate/GraduateController.java
@@ -0,0 +1,81 @@
+package wusthelper.web.api.v2.module.graduate;
+
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import wusthelper.web.api.v2.TokenTool;
+import wusthelper.web.api.v2.dto.response.CourseResponse;
+import wusthelper.web.api.v2.dto.response.GraduateScoreResponse;
+import wusthelper.web.api.v2.dto.response.GraduateStudentInfoResponse;
+import wusthelper.web.api.v2.dto.response.StudentInfoResponse;
+import wusthelper.web.response.Response;
+import wusthelper.web.service.campus.graduate.GraduateCourseTableService;
+import wusthelper.web.service.campus.graduate.GraduateScoreService;
+import wusthelper.web.service.campus.graduate.GraduateStudentInfoService;
+import wusthelper.web.service.campus.graduate.GraduateTrainingPlanService;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@RestController
+@RequestMapping("/v2/yjs")
+public class GraduateController {
+
+ private final GraduateStudentInfoService studentInfoService;
+ private final GraduateCourseTableService courseTableService;
+ private final GraduateScoreService scoreService;
+ private final GraduateTrainingPlanService trainingPlanService;
+
+ public GraduateController(GraduateStudentInfoService studentInfoService,
+ GraduateCourseTableService courseTableService,
+ GraduateScoreService scoreService,
+ GraduateTrainingPlanService trainingPlanService) {
+
+ this.studentInfoService = studentInfoService;
+ this.courseTableService = courseTableService;
+ this.scoreService = scoreService;
+ this.trainingPlanService = trainingPlanService;
+ }
+
+ @RequestMapping("/get-student-info")
+ public Response getStudentInfo(@RequestHeader("Token") String token) {
+ var user = TokenTool.getStudentNumber(token);
+ var studentInfo = studentInfoService.getStudentInfo(user);
+ var response = GraduateStudentInfoResponse.from(studentInfo);
+
+ return Response.success(response);
+ }
+
+ @RequestMapping("/get-course")
+ public Response> getCourses(@RequestHeader("Token") String token) {
+ var user = TokenTool.getStudentNumber(token);
+ var courses = courseTableService.getCourseTable(user);
+ var resultList = new ArrayList(courses.size());
+ for (var course : courses) {
+ resultList.add(CourseResponse.from(course));
+ }
+
+ return Response.success(resultList);
+ }
+
+ @RequestMapping("/get-grade")
+ public Response> getScore(@RequestHeader("Token") String token) {
+ var user = TokenTool.getStudentNumber(token);
+ var scores = scoreService.getScore(user);
+ var resultList = new ArrayList(scores.size());
+ for (var score : scores) {
+ resultList.add(GraduateScoreResponse.from(score));
+ }
+
+ return Response.success(resultList);
+ }
+
+ @RequestMapping("/get-scheme")
+ public Response getTrainingPlan(@RequestHeader("Token") String token) {
+ var user = TokenTool.getStudentNumber(token);
+ var page = trainingPlanService.getTrainingPlan(user);
+
+ return Response.success(page);
+ }
+}
diff --git a/backend-main/backend-web/src/main/java/wusthelper/web/api/v2/module/graduate/GraduateLoginController.java b/backend-main/backend-web/src/main/java/wusthelper/web/api/v2/module/graduate/GraduateLoginController.java
new file mode 100644
index 0000000..2f66493
--- /dev/null
+++ b/backend-main/backend-web/src/main/java/wusthelper/web/api/v2/module/graduate/GraduateLoginController.java
@@ -0,0 +1,28 @@
+package wusthelper.web.api.v2.module.graduate;
+
+import org.springframework.web.bind.annotation.*;
+import wusthelper.web.api.v2.TokenTool;
+import wusthelper.web.response.Response;
+import wusthelper.web.service.campus.UserLoginService;
+
+@RestController
+@RequestMapping("/v2/yjs")
+public class GraduateLoginController {
+ private final UserLoginService userLoginService;
+
+ public GraduateLoginController(UserLoginService userLoginService) {
+ this.userLoginService = userLoginService;
+ }
+
+ @PostMapping("/login")
+ public Response login(@RequestParam("stuNum") String username,
+ @RequestParam("jwcPwd") String password,
+ @RequestHeader(name = "Platform", required = false) String platform) {
+
+ var user = userLoginService.login(username, password, UserLoginService.LoginType.Graduate);
+
+ String token = TokenTool.signToken(user.getUid(), user.getStuNum());
+
+ return Response.success(token);
+ }
+}
\ No newline at end of file
diff --git a/backend-main/backend-web/src/main/java/wusthelper/web/api/v2/module/physics/PhysicsController.java b/backend-main/backend-web/src/main/java/wusthelper/web/api/v2/module/physics/PhysicsController.java
new file mode 100644
index 0000000..15e9ee8
--- /dev/null
+++ b/backend-main/backend-web/src/main/java/wusthelper/web/api/v2/module/physics/PhysicsController.java
@@ -0,0 +1,54 @@
+package wusthelper.web.api.v2.module.physics;
+
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import wusthelper.web.api.v2.TokenTool;
+import wusthelper.web.api.v2.dto.response.CourseResponse;
+import wusthelper.web.api.v2.dto.response.PhysicsCourseResponse;
+import wusthelper.web.api.v2.dto.response.ScoreResponse;
+import wusthelper.web.response.Response;
+import wusthelper.web.service.campus.physics.PhysicsCourseTableService;
+import wusthelper.web.service.campus.physics.PhysicsScoreService;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@RestController
+@RequestMapping("/v2/wlsy")
+public class PhysicsController {
+
+ private final PhysicsCourseTableService courseTableService;
+ private final PhysicsScoreService scoreService;
+
+ public PhysicsController(PhysicsCourseTableService courseTableService,
+ PhysicsScoreService scoreService) {
+
+ this.courseTableService = courseTableService;
+ this.scoreService = scoreService;
+ }
+
+ @RequestMapping("/get-course")
+ public Response> getCourses(@RequestHeader("Token") String token) {
+ var user = TokenTool.getStudentNumber(token);
+ var courses = courseTableService.getCourseTable(user);
+ var resultList = new ArrayList(courses.size());
+ for (var course : courses) {
+ resultList.add(PhysicsCourseResponse.from(course));
+ }
+
+ return Response.success(resultList);
+ }
+
+ @RequestMapping("/get-grade")
+ public Response> getScore(@RequestHeader("Token") String token) {
+ var user = TokenTool.getStudentNumber(token);
+ var scores = scoreService.getScore(user);
+ var resultList = new ArrayList(scores.size());
+ for (var score : scores) {
+ resultList.add(ScoreResponse.from(score));
+ }
+
+ return Response.success(resultList);
+ }
+}
diff --git a/backend-main/backend-web/src/main/java/wusthelper/web/api/v2/module/physics/PhysicsLoginController.java b/backend-main/backend-web/src/main/java/wusthelper/web/api/v2/module/physics/PhysicsLoginController.java
new file mode 100644
index 0000000..7a5d82b
--- /dev/null
+++ b/backend-main/backend-web/src/main/java/wusthelper/web/api/v2/module/physics/PhysicsLoginController.java
@@ -0,0 +1,25 @@
+package wusthelper.web.api.v2.module.physics;
+
+import org.springframework.web.bind.annotation.*;
+import wusthelper.web.api.v2.TokenTool;
+import wusthelper.web.response.Response;
+import wusthelper.web.service.campus.UserLoginService;
+
+@RestController
+@RequestMapping("/v2/wlsy")
+public class PhysicsLoginController {
+ private final UserLoginService userLoginService;
+
+ public PhysicsLoginController(UserLoginService userLoginService) {
+ this.userLoginService = userLoginService;
+ }
+
+ @PostMapping("/login")
+ public Response