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 login(@RequestParam("wlsyPwd") String password, + @RequestHeader("Token") String token) { + String username = TokenTool.getStudentNumber(token); + userLoginService.login(username, password, UserLoginService.LoginType.Graduate); + + return Response.success(); + } +} \ No newline at end of file diff --git a/backend-main/backend-web/src/main/java/wusthelper/web/api/v2/module/undergrade/UndergradController.java b/backend-main/backend-web/src/main/java/wusthelper/web/api/v2/module/undergrade/UndergradController.java index d47f870..8b75549 100644 --- a/backend-main/backend-web/src/main/java/wusthelper/web/api/v2/module/undergrade/UndergradController.java +++ b/backend-main/backend-web/src/main/java/wusthelper/web/api/v2/module/undergrade/UndergradController.java @@ -52,19 +52,19 @@ public class UndergradController { @RequestParam(value = "schoolTerm") String term) { var user = TokenTool.getStudentNumber(token); var courses = courseTableService.getCourseTable(user, term); - var courseResponsesList = new ArrayList(courses.size()); + var resultList = new ArrayList(courses.size()); for (var course : courses) { - courseResponsesList.add(CourseResponse.from(course)); + resultList.add(CourseResponse.from(course)); } - return Response.success(courseResponsesList); + 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 scoreResponseList = new ArrayList(scores.size()); + var resultList = new ArrayList(scores.size()); // 课程 Set courseSet = new HashSet<>(scores.size()); @@ -89,11 +89,11 @@ public class UndergradController { // 缓考不显示 if (scoreResponse.getMissExamTag() != 2) { - scoreResponseList.add(scoreResponse); + resultList.add(scoreResponse); } } - return Response.success(scoreResponseList); + return Response.success(resultList); } @RequestMapping("/get-credit") diff --git a/backend-main/backend-web/src/main/java/wusthelper/web/api/v2/module/undergrade/UndergradLoginController.java b/backend-main/backend-web/src/main/java/wusthelper/web/api/v2/module/undergrade/UndergradLoginController.java index d4c9419..d0a4b79 100644 --- a/backend-main/backend-web/src/main/java/wusthelper/web/api/v2/module/undergrade/UndergradLoginController.java +++ b/backend-main/backend-web/src/main/java/wusthelper/web/api/v2/module/undergrade/UndergradLoginController.java @@ -6,7 +6,7 @@ import wusthelper.web.api.v2.dto.response.CombineLoginResponse; import wusthelper.web.api.v2.dto.response.CourseResponse; import wusthelper.web.api.v2.dto.response.StudentInfoResponse; import wusthelper.web.response.Response; -import wusthelper.web.service.campus.GeneralUserLoginService; +import wusthelper.web.service.campus.UserLoginService; import wusthelper.web.service.campus.undergrad.UndergradCourseTableService; import wusthelper.web.service.campus.undergrad.UndergradStudentInfoService; @@ -15,16 +15,16 @@ import java.util.ArrayList; @RestController @RequestMapping("/v2/jwc") public class UndergradLoginController { - private final GeneralUserLoginService generalUserLoginService; + private final UserLoginService userLoginService; private final UndergradStudentInfoService studentInfoService; private final UndergradCourseTableService courseTableService; - public UndergradLoginController(GeneralUserLoginService generalUserLoginService, + public UndergradLoginController(UserLoginService userLoginService, UndergradStudentInfoService studentInfoService, UndergradCourseTableService courseTableService) { - this.generalUserLoginService = generalUserLoginService; + this.userLoginService = userLoginService; this.studentInfoService = studentInfoService; this.courseTableService = courseTableService; } @@ -34,7 +34,7 @@ public class UndergradLoginController { @RequestParam(value = "jwcPwd") String password, @RequestHeader(name = "Platform", required = false) String platform) { - var user = generalUserLoginService.login(username, password, GeneralUserLoginService.UserType.Undergrad); + var user = userLoginService.login(username, password, UserLoginService.LoginType.Undergrad); String token = TokenTool.signToken(user.getUid(), user.getStuNum()); @@ -58,7 +58,7 @@ public class UndergradLoginController { @RequestParam(value = "term") String term, @RequestHeader(name = "Platform", required = false) String platform) { - var user = generalUserLoginService.login(username, password, GeneralUserLoginService.UserType.Undergrad); + var user = userLoginService.login(username, password, UserLoginService.LoginType.Undergrad); var studentInfo = studentInfoService.getStudentInfo(username); var courses = courseTableService.getCourseTable(username, term); diff --git a/backend-main/backend-web/src/main/java/wusthelper/web/rpc/graduate/GraduateCookieRemote.java b/backend-main/backend-web/src/main/java/wusthelper/web/rpc/http/graduate/GraduateCookieRemote.java similarity index 94% rename from backend-main/backend-web/src/main/java/wusthelper/web/rpc/graduate/GraduateCookieRemote.java rename to backend-main/backend-web/src/main/java/wusthelper/web/rpc/http/graduate/GraduateCookieRemote.java index 3cb76dd..ae63776 100644 --- a/backend-main/backend-web/src/main/java/wusthelper/web/rpc/graduate/GraduateCookieRemote.java +++ b/backend-main/backend-web/src/main/java/wusthelper/web/rpc/http/graduate/GraduateCookieRemote.java @@ -1,4 +1,4 @@ -package wusthelper.web.rpc.graduate; +package wusthelper.web.rpc.http.graduate; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; diff --git a/backend-main/backend-web/src/main/java/wusthelper/web/rpc/http/graduate/GraduateCourseTableRemote.java b/backend-main/backend-web/src/main/java/wusthelper/web/rpc/http/graduate/GraduateCourseTableRemote.java new file mode 100644 index 0000000..3b456d3 --- /dev/null +++ b/backend-main/backend-web/src/main/java/wusthelper/web/rpc/http/graduate/GraduateCourseTableRemote.java @@ -0,0 +1,27 @@ +package wusthelper.web.rpc.http.graduate; + +import cn.wustlinghang.mywust.data.global.Course; +import jakarta.validation.constraints.NotNull; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; +import wusthelper.internal.rpc.response.RpcResponseDto; + +import java.util.List; + +@Component +@FeignClient(name = "wusthelper.graduate", contextId = "graduate-courseTable") +public interface GraduateCourseTableRemote { + String ROOT_PATH = "/course_table"; + + @GetMapping(ROOT_PATH) + RpcResponseDto> get(@RequestParam("cookie") String cookie); + + @GetMapping(ROOT_PATH + "/agent") + RpcResponseDto agent(@RequestParam("cookie") @NotNull String cookie); + + @PostMapping(ROOT_PATH + "/parse") + RpcResponseDto> parse(String html); +} diff --git a/backend-main/backend-web/src/main/java/wusthelper/web/rpc/http/graduate/GraduateScoreRemote.java b/backend-main/backend-web/src/main/java/wusthelper/web/rpc/http/graduate/GraduateScoreRemote.java new file mode 100644 index 0000000..ecca7aa --- /dev/null +++ b/backend-main/backend-web/src/main/java/wusthelper/web/rpc/http/graduate/GraduateScoreRemote.java @@ -0,0 +1,27 @@ +package wusthelper.web.rpc.http.graduate; + +import cn.wustlinghang.mywust.data.global.Score; +import jakarta.validation.constraints.NotNull; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; +import wusthelper.internal.rpc.response.RpcResponseDto; + +import java.util.List; + +@Component +@FeignClient(name = "wusthelper.graduate", contextId = "graduate-score") +public interface GraduateScoreRemote { + String ROOT_PATH = "/score"; + + @GetMapping(ROOT_PATH) + RpcResponseDto> get(@RequestParam("cookie") String cookie); + + @GetMapping(ROOT_PATH + "/agent") + RpcResponseDto agent(@RequestParam("cookie") @NotNull String cookie); + + @PostMapping(ROOT_PATH + "/parse") + RpcResponseDto> parse(String html); +} diff --git a/backend-main/backend-web/src/main/java/wusthelper/web/rpc/graduate/GraduateStudentInfoRemote.java b/backend-main/backend-web/src/main/java/wusthelper/web/rpc/http/graduate/GraduateStudentInfoRemote.java similarity index 95% rename from backend-main/backend-web/src/main/java/wusthelper/web/rpc/graduate/GraduateStudentInfoRemote.java rename to backend-main/backend-web/src/main/java/wusthelper/web/rpc/http/graduate/GraduateStudentInfoRemote.java index f10b602..d6f5882 100644 --- a/backend-main/backend-web/src/main/java/wusthelper/web/rpc/graduate/GraduateStudentInfoRemote.java +++ b/backend-main/backend-web/src/main/java/wusthelper/web/rpc/http/graduate/GraduateStudentInfoRemote.java @@ -1,4 +1,4 @@ -package wusthelper.web.rpc.graduate; +package wusthelper.web.rpc.http.graduate; import cn.wustlinghang.mywust.data.global.StudentInfo; import jakarta.validation.constraints.NotNull; diff --git a/backend-main/backend-web/src/main/java/wusthelper/web/rpc/http/graduate/GraduateTrainingPlanRemote.java b/backend-main/backend-web/src/main/java/wusthelper/web/rpc/http/graduate/GraduateTrainingPlanRemote.java new file mode 100644 index 0000000..5cb6544 --- /dev/null +++ b/backend-main/backend-web/src/main/java/wusthelper/web/rpc/http/graduate/GraduateTrainingPlanRemote.java @@ -0,0 +1,24 @@ +package wusthelper.web.rpc.http.graduate; + +import jakarta.validation.constraints.NotNull; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; +import wusthelper.internal.rpc.response.RpcResponseDto; + +@Component +@FeignClient(name = "wusthelper.graduate", contextId = "graduate-trainingPlan") +public interface GraduateTrainingPlanRemote { + String ROOT_PATH = "/training_plan"; + + @GetMapping(ROOT_PATH) + RpcResponseDto get(@RequestParam("cookie") String cookie); + + @GetMapping(ROOT_PATH + "/agent") + RpcResponseDto agent(@RequestParam("cookie") @NotNull String cookie); + + @PostMapping(ROOT_PATH + "/parse") + RpcResponseDto parse(String html); +} diff --git a/backend-main/backend-web/src/main/java/wusthelper/web/rpc/http/physics/PhysicsCookieRemote.java b/backend-main/backend-web/src/main/java/wusthelper/web/rpc/http/physics/PhysicsCookieRemote.java new file mode 100644 index 0000000..9fc4b8b --- /dev/null +++ b/backend-main/backend-web/src/main/java/wusthelper/web/rpc/http/physics/PhysicsCookieRemote.java @@ -0,0 +1,18 @@ +package wusthelper.web.rpc.http.physics; + +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; +import wusthelper.internal.rpc.response.RpcResponseDto; + +@FeignClient(name = "wusthelper.physics", contextId = "physics-cookie") +public interface PhysicsCookieRemote { + String COOKIE_ROOT_PATH = "/cookie"; + + @GetMapping(COOKIE_ROOT_PATH) + RpcResponseDto login(@RequestParam("username") String username, + @RequestParam("password") String password); + + @GetMapping(COOKIE_ROOT_PATH + "/verify") + RpcResponseDto verify(@RequestParam("cookie") String cookie); +} diff --git a/backend-main/backend-web/src/main/java/wusthelper/web/rpc/http/physics/PhysicsCourseTableRemote.java b/backend-main/backend-web/src/main/java/wusthelper/web/rpc/http/physics/PhysicsCourseTableRemote.java new file mode 100644 index 0000000..29881f7 --- /dev/null +++ b/backend-main/backend-web/src/main/java/wusthelper/web/rpc/http/physics/PhysicsCourseTableRemote.java @@ -0,0 +1,28 @@ +package wusthelper.web.rpc.http.physics; + +import cn.wustlinghang.mywust.data.global.Course; +import cn.wustlinghang.mywust.data.physics.PhysicsCourse; +import jakarta.validation.constraints.NotNull; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; +import wusthelper.internal.rpc.response.RpcResponseDto; + +import java.util.List; + +@Component +@FeignClient(name = "wusthelper.physics", contextId = "physics-courseTable") +public interface PhysicsCourseTableRemote { + String ROOT_PATH = "/course_table"; + + @GetMapping(ROOT_PATH) + RpcResponseDto> get(@RequestParam("cookie") String cookie); + + @GetMapping(ROOT_PATH + "/agent") + RpcResponseDto agent(@RequestParam("cookie") @NotNull String cookie); + + @PostMapping(ROOT_PATH + "/parse") + RpcResponseDto> parse(String html); +} diff --git a/backend-main/backend-web/src/main/java/wusthelper/web/rpc/http/physics/PhysicsScoreRemote.java b/backend-main/backend-web/src/main/java/wusthelper/web/rpc/http/physics/PhysicsScoreRemote.java new file mode 100644 index 0000000..0b0c808 --- /dev/null +++ b/backend-main/backend-web/src/main/java/wusthelper/web/rpc/http/physics/PhysicsScoreRemote.java @@ -0,0 +1,27 @@ +package wusthelper.web.rpc.http.physics; + +import cn.wustlinghang.mywust.data.global.Score; +import jakarta.validation.constraints.NotNull; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; +import wusthelper.internal.rpc.response.RpcResponseDto; + +import java.util.List; + +@Component +@FeignClient(name = "wusthelper.physics", contextId = "physics-score") +public interface PhysicsScoreRemote { + String ROOT_PATH = "/score"; + + @GetMapping(ROOT_PATH) + RpcResponseDto> get(@RequestParam("cookie") String cookie); + + @GetMapping(ROOT_PATH + "/agent") + RpcResponseDto agent(@RequestParam("cookie") @NotNull String cookie); + + @PostMapping(ROOT_PATH + "/parse") + RpcResponseDto> parse(String html); +} diff --git a/backend-main/backend-web/src/main/java/wusthelper/web/rpc/undergrad/UndergradCookieRemote.java b/backend-main/backend-web/src/main/java/wusthelper/web/rpc/http/undergrad/UndergradCookieRemote.java similarity index 94% rename from backend-main/backend-web/src/main/java/wusthelper/web/rpc/undergrad/UndergradCookieRemote.java rename to backend-main/backend-web/src/main/java/wusthelper/web/rpc/http/undergrad/UndergradCookieRemote.java index 2668b39..4e5ce73 100644 --- a/backend-main/backend-web/src/main/java/wusthelper/web/rpc/undergrad/UndergradCookieRemote.java +++ b/backend-main/backend-web/src/main/java/wusthelper/web/rpc/http/undergrad/UndergradCookieRemote.java @@ -1,4 +1,4 @@ -package wusthelper.web.rpc.undergrad; +package wusthelper.web.rpc.http.undergrad; import org.springframework.stereotype.Component; import wusthelper.internal.rpc.response.RpcResponseDto; diff --git a/backend-main/backend-web/src/main/java/wusthelper/web/rpc/undergrad/CourseTableRemote.java b/backend-main/backend-web/src/main/java/wusthelper/web/rpc/http/undergrad/UndergradCourseTableRemote.java similarity index 92% rename from backend-main/backend-web/src/main/java/wusthelper/web/rpc/undergrad/CourseTableRemote.java rename to backend-main/backend-web/src/main/java/wusthelper/web/rpc/http/undergrad/UndergradCourseTableRemote.java index 0eb7ce2..f647afb 100644 --- a/backend-main/backend-web/src/main/java/wusthelper/web/rpc/undergrad/CourseTableRemote.java +++ b/backend-main/backend-web/src/main/java/wusthelper/web/rpc/http/undergrad/UndergradCourseTableRemote.java @@ -1,4 +1,4 @@ -package wusthelper.web.rpc.undergrad; +package wusthelper.web.rpc.http.undergrad; import cn.wustlinghang.mywust.data.global.Course; import org.springframework.stereotype.Component; @@ -13,7 +13,7 @@ import java.util.List; @Component @FeignClient(name = "wusthelper.undergrad", contextId = "undergrad-courseTable") -public interface CourseTableRemote { +public interface UndergradCourseTableRemote { String ROOT_PATH = "/course_table"; @GetMapping(ROOT_PATH) diff --git a/backend-main/backend-web/src/main/java/wusthelper/web/rpc/undergrad/CreditStatusRemote.java b/backend-main/backend-web/src/main/java/wusthelper/web/rpc/http/undergrad/UndergradCreditStatusRemote.java similarity index 90% rename from backend-main/backend-web/src/main/java/wusthelper/web/rpc/undergrad/CreditStatusRemote.java rename to backend-main/backend-web/src/main/java/wusthelper/web/rpc/http/undergrad/UndergradCreditStatusRemote.java index 974fb4e..8fb996e 100644 --- a/backend-main/backend-web/src/main/java/wusthelper/web/rpc/undergrad/CreditStatusRemote.java +++ b/backend-main/backend-web/src/main/java/wusthelper/web/rpc/http/undergrad/UndergradCreditStatusRemote.java @@ -1,4 +1,4 @@ -package wusthelper.web.rpc.undergrad; +package wusthelper.web.rpc.http.undergrad; import org.springframework.stereotype.Component; import wusthelper.internal.rpc.response.RpcResponseDto; @@ -10,7 +10,7 @@ import org.springframework.web.bind.annotation.RequestParam; @Component @FeignClient(name = "wusthelper.undergrad", contextId = "undergrad-creditStatus") -public interface CreditStatusRemote { +public interface UndergradCreditStatusRemote { String ROOT_PATH = "/credit_status"; @GetMapping(ROOT_PATH) diff --git a/backend-main/backend-web/src/main/java/wusthelper/web/rpc/undergrad/ExamDelayApplicationRemote.java b/backend-main/backend-web/src/main/java/wusthelper/web/rpc/http/undergrad/UndergradExamDelayApplicationRemote.java similarity index 92% rename from backend-main/backend-web/src/main/java/wusthelper/web/rpc/undergrad/ExamDelayApplicationRemote.java rename to backend-main/backend-web/src/main/java/wusthelper/web/rpc/http/undergrad/UndergradExamDelayApplicationRemote.java index 120f96a..27dd7d8 100644 --- a/backend-main/backend-web/src/main/java/wusthelper/web/rpc/undergrad/ExamDelayApplicationRemote.java +++ b/backend-main/backend-web/src/main/java/wusthelper/web/rpc/http/undergrad/UndergradExamDelayApplicationRemote.java @@ -1,4 +1,4 @@ -package wusthelper.web.rpc.undergrad; +package wusthelper.web.rpc.http.undergrad; import cn.wustlinghang.mywust.data.undergrad.ExamDelayApplication; import org.springframework.stereotype.Component; @@ -11,7 +11,7 @@ import org.springframework.web.bind.annotation.RequestParam; @Component @FeignClient(name = "wusthelper.undergrad", contextId = "undergrad-examDelayApplication") -public interface ExamDelayApplicationRemote { +public interface UndergradExamDelayApplicationRemote { String ROOT_PATH = "/exam_delay_application"; @GetMapping(ROOT_PATH) diff --git a/backend-main/backend-web/src/main/java/wusthelper/web/rpc/undergrad/ScoreRemote.java b/backend-main/backend-web/src/main/java/wusthelper/web/rpc/http/undergrad/UndergradScoreRemote.java similarity index 91% rename from backend-main/backend-web/src/main/java/wusthelper/web/rpc/undergrad/ScoreRemote.java rename to backend-main/backend-web/src/main/java/wusthelper/web/rpc/http/undergrad/UndergradScoreRemote.java index 7bbb3e3..1357773 100644 --- a/backend-main/backend-web/src/main/java/wusthelper/web/rpc/undergrad/ScoreRemote.java +++ b/backend-main/backend-web/src/main/java/wusthelper/web/rpc/http/undergrad/UndergradScoreRemote.java @@ -1,4 +1,4 @@ -package wusthelper.web.rpc.undergrad; +package wusthelper.web.rpc.http.undergrad; import cn.wustlinghang.mywust.data.global.Score; import org.springframework.stereotype.Component; @@ -13,7 +13,7 @@ import java.util.List; @Component @FeignClient(name = "wusthelper.undergrad", contextId = "undergrad-score") -public interface ScoreRemote { +public interface UndergradScoreRemote { String ROOT_PATH = "/score"; @GetMapping(ROOT_PATH) diff --git a/backend-main/backend-web/src/main/java/wusthelper/web/rpc/undergrad/UndergradStudentInfoRemote.java b/backend-main/backend-web/src/main/java/wusthelper/web/rpc/http/undergrad/UndergradStudentInfoRemote.java similarity index 95% rename from backend-main/backend-web/src/main/java/wusthelper/web/rpc/undergrad/UndergradStudentInfoRemote.java rename to backend-main/backend-web/src/main/java/wusthelper/web/rpc/http/undergrad/UndergradStudentInfoRemote.java index 64875d5..2643def 100644 --- a/backend-main/backend-web/src/main/java/wusthelper/web/rpc/undergrad/UndergradStudentInfoRemote.java +++ b/backend-main/backend-web/src/main/java/wusthelper/web/rpc/http/undergrad/UndergradStudentInfoRemote.java @@ -1,4 +1,4 @@ -package wusthelper.web.rpc.undergrad; +package wusthelper.web.rpc.http.undergrad; import cn.wustlinghang.mywust.data.global.StudentInfo; import org.springframework.stereotype.Component; diff --git a/backend-main/backend-web/src/main/java/wusthelper/web/rpc/undergrad/TrainingPlanRemote.java b/backend-main/backend-web/src/main/java/wusthelper/web/rpc/http/undergrad/UndergradTrainingPlanRemote.java similarity index 90% rename from backend-main/backend-web/src/main/java/wusthelper/web/rpc/undergrad/TrainingPlanRemote.java rename to backend-main/backend-web/src/main/java/wusthelper/web/rpc/http/undergrad/UndergradTrainingPlanRemote.java index f64d582..aca3fee 100644 --- a/backend-main/backend-web/src/main/java/wusthelper/web/rpc/undergrad/TrainingPlanRemote.java +++ b/backend-main/backend-web/src/main/java/wusthelper/web/rpc/http/undergrad/UndergradTrainingPlanRemote.java @@ -1,4 +1,4 @@ -package wusthelper.web.rpc.undergrad; +package wusthelper.web.rpc.http.undergrad; import org.springframework.stereotype.Component; import wusthelper.internal.rpc.response.RpcResponseDto; @@ -10,7 +10,7 @@ import org.springframework.web.bind.annotation.RequestParam; @Component @FeignClient(name = "wusthelper.undergrad", contextId = "undergrad-trainingPlan") -public interface TrainingPlanRemote { +public interface UndergradTrainingPlanRemote { String ROOT_PATH = "/training_plan"; @GetMapping(ROOT_PATH) diff --git a/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/GeneralUserLoginService.java b/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/GeneralUserLoginService.java deleted file mode 100644 index 2e92325..0000000 --- a/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/GeneralUserLoginService.java +++ /dev/null @@ -1,99 +0,0 @@ -package wusthelper.web.service.campus; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.github.yitter.idgen.YitIdHelper; -import org.springframework.stereotype.Service; -import wusthelper.data.dao.mapper.StudentMapper; -import wusthelper.data.dao.mapper.UserBasicMapper; -import wusthelper.data.entity.Student; -import wusthelper.data.entity.UserBasic; -import wusthelper.web.data.entity.CookieType; -import wusthelper.web.service.campus.graduate.GraduateCookieService; -import wusthelper.web.service.campus.undergrad.UndergradCookieService; -import wusthelper.web.service.cookie.CookieManager; -import wusthelper.web.util.PasswordCodec; - -/** - * 通用的用户登录信息服务,包括登录和(已存储的)用户信息获取等,同时自动存入新用户基本()信息 - */ -@Service -public class GeneralUserLoginService { - private final UserBasicMapper studentMapper; - private final PasswordCodec passwordCodec; - - private final UndergradCookieService undergradCookieService; - private final GraduateCookieService graduateCookieService; - - - public GeneralUserLoginService(UserBasicMapper studentMapper, - PasswordCodec passwordCodec, - - UndergradCookieService undergradCookieService, - GraduateCookieService graduateCookieService) { - - this.studentMapper = studentMapper; - this.passwordCodec = passwordCodec; - - this.undergradCookieService = undergradCookieService; - this.graduateCookieService = graduateCookieService; - } - - public enum UserType {Undergrad, Graduate} - - /** - * 登录验证,同时自动存库(基本信息) - * - * @param username 用户名(即学号) - * @param password 密码(明文原文) - * @param userType 用户类型,现在有本科生和研究生 - * @return 用户信息 - */ - public UserBasic login(String username, String password, UserType userType) { - var cookie = switch (userType) { - case Undergrad -> undergradCookieService.getLoginCookie(username, password); - case Graduate -> graduateCookieService.getLoginCookie(username, password); - }; - - var cookieType = switch (userType) { - case Undergrad -> CookieType.Undergrad; - case Graduate -> CookieType.Graduate; - }; - - // 保存cookie,并将用户基本信息存库 - CookieManager.store(username, cookie, cookieType); - return this.saveOrUpdateUser(username, password, userType); - } - - private UserBasic saveOrUpdateUser(String username, String password, UserType userType) { - var query = new QueryWrapper() - .eq("stu_num", username) - .eq("deleted", 0) - .last("limit 1"); - - var user = studentMapper.selectOne(query); - if (user != null) { - var encrypted = passwordCodec.encode(password); - user.setOfficialPwd(encrypted); - if (userType == UserType.Undergrad) { - user.setLibPwd(encrypted); - } - studentMapper.update(user, query); - } else { - var uid = YitIdHelper.nextId(); - user = UserBasic.builder() - .uid(uid) - .stuNum(username) - .build(); - - var encrypted = passwordCodec.encode(password); - user.setOfficialPwd(encrypted); - if (userType == UserType.Undergrad) { - user.setLibPwd(encrypted); - } - - studentMapper.insert(user); - } - - return user; - } -} diff --git a/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/UserLoginService.java b/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/UserLoginService.java new file mode 100644 index 0000000..208dcc0 --- /dev/null +++ b/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/UserLoginService.java @@ -0,0 +1,126 @@ +package wusthelper.web.service.campus; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.github.yitter.idgen.YitIdHelper; +import org.springframework.stereotype.Service; +import wusthelper.data.dao.mapper.UserBasicMapper; +import wusthelper.data.entity.UserBasic; +import wusthelper.web.data.entity.CookieType; +import wusthelper.web.service.campus.graduate.GraduateCookieService; +import wusthelper.web.service.campus.library.LibraryCookieService; +import wusthelper.web.service.campus.physics.PhysicsCookieService; +import wusthelper.web.service.campus.undergrad.UndergradCookieService; +import wusthelper.web.service.cookie.CookieManager; +import wusthelper.web.util.PasswordCodec; + +/** + * 通用的用户登录信息服务,包括登录和(已存储的)用户信息获取等,同时自动存入新用户密码信息 + */ +@Service +public class UserLoginService { + private final UserBasicMapper studentMapper; + private final PasswordCodec passwordCodec; + + private final UndergradCookieService undergradCookieService; + private final GraduateCookieService graduateCookieService; + private final LibraryCookieService libraryCookieService; + private final PhysicsCookieService physicsCookieService; + + public UserLoginService(UserBasicMapper studentMapper, + PasswordCodec passwordCodec, + + UndergradCookieService undergradCookieService, + GraduateCookieService graduateCookieService, + LibraryCookieService libraryCookieService, + PhysicsCookieService physicsCookieService) { + + this.studentMapper = studentMapper; + this.passwordCodec = passwordCodec; + + this.undergradCookieService = undergradCookieService; + this.graduateCookieService = graduateCookieService; + this.libraryCookieService = libraryCookieService; + this.physicsCookieService = physicsCookieService; + } + + public enum LoginType {Undergrad, Graduate, Library, Physics} + + /** + * 登录验证,同时自动存库(基本信息) + * + * @param username 用户名(即学号) + * @param password 密码(明文原文) + * @param loginType 用户类型,现在有本科生和研究生 + * @return 用户信息 + */ + public UserBasic login(String username, String password, LoginType loginType) { + var cookie = switch (loginType) { + case Undergrad -> undergradCookieService.getLoginCookie(username, password); + case Graduate -> graduateCookieService.getLoginCookie(username, password); + case Library -> libraryCookieService.getLoginCookie(username, password); + case Physics -> physicsCookieService.getLoginCookie(username, password); + }; + + var cookieType = switch (loginType) { + case Undergrad -> CookieType.Undergrad; + case Graduate -> CookieType.Graduate; + case Library -> CookieType.Library; + case Physics -> CookieType.Physics; + }; + + // 保存cookie,并将用户基本信息存库 + CookieManager.store(username, cookie, cookieType); + return this.saveOrUpdateUser(username, password, loginType); + } + + private UserBasic saveOrUpdateUser(String username, String password, LoginType loginType) { + var user = studentMapper.selectOne(new QueryWrapper() + .eq("stu_num", username) + .eq("deleted", 0) + .last("limit 1") + ); + + if (user != null) { + this.fillPassword(password, user, loginType); + this.updateUser(username, user); + } else { + user = this.newUser(username, password, loginType); + } + + return user; + } + + private void updateUser(String username, UserBasic user) { + studentMapper.update(user, new QueryWrapper() + .eq("stu_num", username) + .eq("deleted", 0) + .last("limit 1") + ); + } + + private UserBasic newUser(String username, String password, LoginType loginType) { + var uid = YitIdHelper.nextId(); + UserBasic user = UserBasic.builder() + .uid(uid) + .stuNum(username) + .build(); + + this.fillPassword(password, user, loginType); + + studentMapper.insert(user); + return user; + } + + private void fillPassword(String password, UserBasic user, LoginType loginType) { + var encrypted = passwordCodec.encode(password); + switch (loginType) { + case Undergrad -> { + user.setOfficialPwd(encrypted); + user.setLibPwd(encrypted); + } + case Graduate -> user.setOfficialPwd(encrypted); + case Library -> user.setLibPwd(encrypted); + case Physics -> user.setPhysicsPwd(encrypted); + } + } +} diff --git a/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/graduate/GraduateCookieService.java b/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/graduate/GraduateCookieService.java index 025549f..cb7ec82 100644 --- a/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/graduate/GraduateCookieService.java +++ b/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/graduate/GraduateCookieService.java @@ -3,7 +3,7 @@ package wusthelper.web.service.campus.graduate; import org.springframework.stereotype.Service; import wusthelper.code.ServiceCode; import wusthelper.web.exception.ServiceException; -import wusthelper.web.rpc.graduate.GraduateCookieRemote; +import wusthelper.web.rpc.http.graduate.GraduateCookieRemote; @Service public class GraduateCookieService { diff --git a/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/graduate/GraduateCourseTableService.java b/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/graduate/GraduateCourseTableService.java new file mode 100644 index 0000000..43670fc --- /dev/null +++ b/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/graduate/GraduateCourseTableService.java @@ -0,0 +1,34 @@ +package wusthelper.web.service.campus.graduate; + +import cn.wustlinghang.mywust.data.global.Course; +import org.springframework.stereotype.Service; +import wusthelper.code.ServiceCode; +import wusthelper.web.data.entity.CookieType; +import wusthelper.web.exception.ServiceException; +import wusthelper.web.rpc.http.graduate.GraduateCourseTableRemote; +import wusthelper.web.service.cookie.CookieManager; + +import java.util.List; + +@Service +public class GraduateCourseTableService { + private final GraduateCourseTableRemote courseTableRemote; + + private final CookieManager cookieManager; + + public GraduateCourseTableService(GraduateCourseTableRemote courseTableRemote, CookieManager cookieManager) { + this.courseTableRemote = courseTableRemote; + this.cookieManager = cookieManager; + } + + public List getCourseTable(String user) { + String cookie = cookieManager.getCookie(user, CookieType.Graduate); + var rpcResp = courseTableRemote.get(cookie); + if (rpcResp.code() != ServiceCode.Ok) { + ServiceException.error(rpcResp.code()); + } + + // todo 异步存用户课表,异常判断等等 + return rpcResp.data(); + } +} diff --git a/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/graduate/GraduateScoreService.java b/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/graduate/GraduateScoreService.java new file mode 100644 index 0000000..4d072b6 --- /dev/null +++ b/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/graduate/GraduateScoreService.java @@ -0,0 +1,33 @@ +package wusthelper.web.service.campus.graduate; + +import cn.wustlinghang.mywust.data.global.Score; +import org.springframework.stereotype.Service; +import wusthelper.code.ServiceCode; +import wusthelper.web.data.entity.CookieType; +import wusthelper.web.exception.ServiceException; +import wusthelper.web.rpc.http.graduate.GraduateScoreRemote; +import wusthelper.web.service.cookie.CookieManager; + +import java.util.List; + +@Service +public class GraduateScoreService { + private final GraduateScoreRemote scoreRemote; + private final CookieManager cookieManager; + + public GraduateScoreService(GraduateScoreRemote scoreRemote, CookieManager cookieManager) { + this.scoreRemote = scoreRemote; + this.cookieManager = cookieManager; + } + + public List getScore(String user) { + String cookie = cookieManager.getCookie(user, CookieType.Graduate); + var rpcResp = scoreRemote.get(cookie); + if (rpcResp.code() != ServiceCode.Ok) { + ServiceException.error(rpcResp.code()); + } + + // todo 异步存用户课表,异常判断等等 + return rpcResp.data(); + } +} diff --git a/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/graduate/GraduateStudentInfoService.java b/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/graduate/GraduateStudentInfoService.java index 8dfc3d3..0f7d55f 100644 --- a/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/graduate/GraduateStudentInfoService.java +++ b/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/graduate/GraduateStudentInfoService.java @@ -5,7 +5,7 @@ import org.springframework.stereotype.Service; import wusthelper.code.ServiceCode; import wusthelper.web.data.entity.CookieType; import wusthelper.web.exception.ServiceException; -import wusthelper.web.rpc.graduate.GraduateStudentInfoRemote; +import wusthelper.web.rpc.http.graduate.GraduateStudentInfoRemote; import wusthelper.web.service.cookie.CookieManager; import wusthelper.web.service.student.StudentService; diff --git a/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/graduate/GraduateTrainingPlanService.java b/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/graduate/GraduateTrainingPlanService.java new file mode 100644 index 0000000..d23ce96 --- /dev/null +++ b/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/graduate/GraduateTrainingPlanService.java @@ -0,0 +1,30 @@ +package wusthelper.web.service.campus.graduate; + +import org.springframework.stereotype.Service; +import wusthelper.code.ServiceCode; +import wusthelper.web.data.entity.CookieType; +import wusthelper.web.exception.ServiceException; +import wusthelper.web.rpc.http.graduate.GraduateTrainingPlanRemote; +import wusthelper.web.service.cookie.CookieManager; + +@Service +public class GraduateTrainingPlanService { + private final GraduateTrainingPlanRemote trainingPlanRemote; + private final CookieManager cookieManager; + + public GraduateTrainingPlanService(GraduateTrainingPlanRemote trainingPlanRemote, CookieManager cookieManager) { + this.trainingPlanRemote = trainingPlanRemote; + this.cookieManager = cookieManager; + } + + public String getTrainingPlan(String user) { + String cookie = cookieManager.getCookie(user, CookieType.Graduate); + var rpcResp = trainingPlanRemote.get(cookie); + if (rpcResp.code() != ServiceCode.Ok) { + ServiceException.error(rpcResp.code()); + } + + // todo 异步存用户课表,异常判断等等 + return rpcResp.data(); + } +} diff --git a/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/library/LibraryCookieService.java b/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/library/LibraryCookieService.java new file mode 100644 index 0000000..3de9800 --- /dev/null +++ b/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/library/LibraryCookieService.java @@ -0,0 +1,28 @@ +package wusthelper.web.service.campus.library; + +import org.springframework.stereotype.Service; +import wusthelper.code.ServiceCode; +import wusthelper.web.exception.ServiceException; +import wusthelper.web.rpc.http.graduate.GraduateCookieRemote; + +@Service +public class LibraryCookieService { + private final GraduateCookieRemote graduateCookieRemote; + + public LibraryCookieService(GraduateCookieRemote graduateCookieRemote) { + this.graduateCookieRemote = graduateCookieRemote; + } + + public String getLoginCookie(String username, String password) throws ServiceException { + var rpcResp = graduateCookieRemote.login(username, password); + if (rpcResp.code() != ServiceCode.Ok) { + ServiceException.error(rpcResp.code()); + } + + return rpcResp.data(); + } + + public Boolean checkCookie(String cookie) { + return graduateCookieRemote.verify(cookie).data(); + } +} diff --git a/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/physics/PhysicsCookieService.java b/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/physics/PhysicsCookieService.java new file mode 100644 index 0000000..78c2b5e --- /dev/null +++ b/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/physics/PhysicsCookieService.java @@ -0,0 +1,30 @@ +package wusthelper.web.service.campus.physics; + +import org.springframework.stereotype.Service; +import wusthelper.code.ServiceCode; +import wusthelper.web.data.entity.CookieType; +import wusthelper.web.exception.ServiceException; +import wusthelper.web.rpc.http.physics.PhysicsCookieRemote; +import wusthelper.web.service.cookie.CookieManager; + +@Service +public class PhysicsCookieService { + private final PhysicsCookieRemote physicsCookieRemote; + + public PhysicsCookieService(PhysicsCookieRemote physicsCookieRemote) { + this.physicsCookieRemote = physicsCookieRemote; + } + + public String getLoginCookie(String username, String password) throws ServiceException { + var rpcResp = physicsCookieRemote.login(username, password); + if (rpcResp.code() != ServiceCode.Ok) { + ServiceException.error(rpcResp.code()); + } + + return rpcResp.data(); + } + + public Boolean checkCookie(String cookie) { + return physicsCookieRemote.verify(cookie).data(); + } +} diff --git a/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/physics/PhysicsCourseTableService.java b/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/physics/PhysicsCourseTableService.java new file mode 100644 index 0000000..b58c06f --- /dev/null +++ b/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/physics/PhysicsCourseTableService.java @@ -0,0 +1,35 @@ +package wusthelper.web.service.campus.physics; + +import cn.wustlinghang.mywust.data.global.Course; +import cn.wustlinghang.mywust.data.physics.PhysicsCourse; +import org.springframework.stereotype.Service; +import wusthelper.code.ServiceCode; +import wusthelper.web.data.entity.CookieType; +import wusthelper.web.exception.ServiceException; +import wusthelper.web.rpc.http.physics.PhysicsCourseTableRemote; +import wusthelper.web.service.cookie.CookieManager; + +import java.util.List; + +@Service +public class PhysicsCourseTableService { + private final PhysicsCourseTableRemote courseTableRemote; + + private final CookieManager cookieManager; + + public PhysicsCourseTableService(PhysicsCourseTableRemote courseTableRemote, CookieManager cookieManager) { + this.courseTableRemote = courseTableRemote; + this.cookieManager = cookieManager; + } + + public List getCourseTable(String user) { + String cookie = cookieManager.getCookie(user, CookieType.Physics); + var rpcResp = courseTableRemote.get(cookie); + if (rpcResp.code() != ServiceCode.Ok) { + ServiceException.error(rpcResp.code()); + } + + // todo 异步存用户课表,异常判断等等 + return rpcResp.data(); + } +} diff --git a/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/physics/PhysicsScoreService.java b/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/physics/PhysicsScoreService.java new file mode 100644 index 0000000..1967005 --- /dev/null +++ b/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/physics/PhysicsScoreService.java @@ -0,0 +1,33 @@ +package wusthelper.web.service.campus.physics; + +import cn.wustlinghang.mywust.data.global.Score; +import org.springframework.stereotype.Service; +import wusthelper.code.ServiceCode; +import wusthelper.web.data.entity.CookieType; +import wusthelper.web.exception.ServiceException; +import wusthelper.web.rpc.http.physics.PhysicsScoreRemote; +import wusthelper.web.service.cookie.CookieManager; + +import java.util.List; + +@Service +public class PhysicsScoreService { + private final PhysicsScoreRemote scoreRemote; + private final CookieManager cookieManager; + + public PhysicsScoreService(PhysicsScoreRemote scoreRemote, CookieManager cookieManager) { + this.scoreRemote = scoreRemote; + this.cookieManager = cookieManager; + } + + public List getScore(String user) { + String cookie = cookieManager.getCookie(user, CookieType.Physics); + var rpcResp = scoreRemote.get(cookie); + if (rpcResp.code() != ServiceCode.Ok) { + ServiceException.error(rpcResp.code()); + } + + // todo 异步存用户课表,异常判断等等 + return rpcResp.data(); + } +} diff --git a/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/undergrad/UndergradCookieService.java b/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/undergrad/UndergradCookieService.java index 8749559..d8c0772 100644 --- a/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/undergrad/UndergradCookieService.java +++ b/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/undergrad/UndergradCookieService.java @@ -3,7 +3,7 @@ package wusthelper.web.service.campus.undergrad; import org.springframework.stereotype.Service; import wusthelper.code.ServiceCode; import wusthelper.web.exception.ServiceException; -import wusthelper.web.rpc.undergrad.UndergradCookieRemote; +import wusthelper.web.rpc.http.undergrad.UndergradCookieRemote; @Service public class UndergradCookieService { diff --git a/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/undergrad/UndergradCourseTableService.java b/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/undergrad/UndergradCourseTableService.java index 4256bb2..cab3937 100644 --- a/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/undergrad/UndergradCourseTableService.java +++ b/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/undergrad/UndergradCourseTableService.java @@ -3,7 +3,7 @@ package wusthelper.web.service.campus.undergrad; import wusthelper.code.ServiceCode; import wusthelper.web.data.entity.CookieType; import wusthelper.web.exception.ServiceException; -import wusthelper.web.rpc.undergrad.CourseTableRemote; +import wusthelper.web.rpc.http.undergrad.UndergradCourseTableRemote; import wusthelper.web.service.cookie.CookieManager; import cn.wustlinghang.mywust.data.global.Course; import org.springframework.stereotype.Service; @@ -12,11 +12,11 @@ import java.util.List; @Service public class UndergradCourseTableService { - private final CourseTableRemote courseTableRemote; + private final UndergradCourseTableRemote courseTableRemote; private final CookieManager cookieManager; - public UndergradCourseTableService(CourseTableRemote courseTableRemote, CookieManager cookieManager) { + public UndergradCourseTableService(UndergradCourseTableRemote courseTableRemote, CookieManager cookieManager) { this.courseTableRemote = courseTableRemote; this.cookieManager = cookieManager; } diff --git a/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/undergrad/UndergradCreditStatusService.java b/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/undergrad/UndergradCreditStatusService.java index f738d16..d1658ba 100644 --- a/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/undergrad/UndergradCreditStatusService.java +++ b/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/undergrad/UndergradCreditStatusService.java @@ -3,16 +3,16 @@ package wusthelper.web.service.campus.undergrad; import wusthelper.code.ServiceCode; import wusthelper.web.data.entity.CookieType; import wusthelper.web.exception.ServiceException; -import wusthelper.web.rpc.undergrad.CreditStatusRemote; +import wusthelper.web.rpc.http.undergrad.UndergradCreditStatusRemote; import wusthelper.web.service.cookie.CookieManager; import org.springframework.stereotype.Service; @Service public class UndergradCreditStatusService { - private final CreditStatusRemote creditStatusRemote; + private final UndergradCreditStatusRemote creditStatusRemote; private final CookieManager cookieManager; - public UndergradCreditStatusService(CreditStatusRemote creditStatusRemote, CookieManager cookieManager) { + public UndergradCreditStatusService(UndergradCreditStatusRemote creditStatusRemote, CookieManager cookieManager) { this.creditStatusRemote = creditStatusRemote; this.cookieManager = cookieManager; } diff --git a/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/undergrad/ExamDelayApplicationService.java b/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/undergrad/UndergradExamDelayApplicationService.java similarity index 71% rename from backend-main/backend-web/src/main/java/wusthelper/web/service/campus/undergrad/ExamDelayApplicationService.java rename to backend-main/backend-web/src/main/java/wusthelper/web/service/campus/undergrad/UndergradExamDelayApplicationService.java index efbd3ff..8b7d273 100644 --- a/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/undergrad/ExamDelayApplicationService.java +++ b/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/undergrad/UndergradExamDelayApplicationService.java @@ -2,19 +2,19 @@ package wusthelper.web.service.campus.undergrad; import wusthelper.code.ServiceCode; import wusthelper.web.exception.ServiceException; -import wusthelper.web.rpc.undergrad.ExamDelayApplicationRemote; +import wusthelper.web.rpc.http.undergrad.UndergradExamDelayApplicationRemote; import wusthelper.web.data.entity.CookieType; import wusthelper.web.service.cookie.CookieManager; import cn.wustlinghang.mywust.data.undergrad.ExamDelayApplication; import org.springframework.stereotype.Service; @Service -public class ExamDelayApplicationService { - private final ExamDelayApplicationRemote examDelayApplicationRemote; +public class UndergradExamDelayApplicationService { + private final UndergradExamDelayApplicationRemote examDelayApplicationRemote; private final CookieManager cookieManager; - public ExamDelayApplicationService(ExamDelayApplicationRemote examDelayApplicationRemote, - CookieManager cookieManager) { + public UndergradExamDelayApplicationService(UndergradExamDelayApplicationRemote examDelayApplicationRemote, + CookieManager cookieManager) { this.examDelayApplicationRemote = examDelayApplicationRemote; this.cookieManager = cookieManager; } diff --git a/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/undergrad/UndergradScoreService.java b/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/undergrad/UndergradScoreService.java index 1e47c51..a2e7022 100644 --- a/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/undergrad/UndergradScoreService.java +++ b/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/undergrad/UndergradScoreService.java @@ -3,7 +3,7 @@ package wusthelper.web.service.campus.undergrad; import wusthelper.code.ServiceCode; import wusthelper.web.data.entity.CookieType; import wusthelper.web.exception.ServiceException; -import wusthelper.web.rpc.undergrad.ScoreRemote; +import wusthelper.web.rpc.http.undergrad.UndergradScoreRemote; import wusthelper.web.service.cookie.CookieManager; import cn.wustlinghang.mywust.data.global.Score; import org.springframework.stereotype.Service; @@ -12,10 +12,10 @@ import java.util.List; @Service public class UndergradScoreService { - private final ScoreRemote scoreRemote; + private final UndergradScoreRemote scoreRemote; private final CookieManager cookieManager; - public UndergradScoreService(ScoreRemote scoreRemote, CookieManager cookieManager) { + public UndergradScoreService(UndergradScoreRemote scoreRemote, CookieManager cookieManager) { this.scoreRemote = scoreRemote; this.cookieManager = cookieManager; } diff --git a/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/undergrad/UndergradStudentInfoService.java b/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/undergrad/UndergradStudentInfoService.java index 43cba70..e85c745 100644 --- a/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/undergrad/UndergradStudentInfoService.java +++ b/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/undergrad/UndergradStudentInfoService.java @@ -5,7 +5,7 @@ import org.springframework.stereotype.Service; import wusthelper.code.ServiceCode; import wusthelper.web.data.entity.CookieType; import wusthelper.web.exception.ServiceException; -import wusthelper.web.rpc.undergrad.UndergradStudentInfoRemote; +import wusthelper.web.rpc.http.undergrad.UndergradStudentInfoRemote; import wusthelper.web.service.cookie.CookieManager; import wusthelper.web.service.student.StudentService; diff --git a/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/undergrad/UndergradTrainingPlanService.java b/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/undergrad/UndergradTrainingPlanService.java index 032aa93..ab83c76 100644 --- a/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/undergrad/UndergradTrainingPlanService.java +++ b/backend-main/backend-web/src/main/java/wusthelper/web/service/campus/undergrad/UndergradTrainingPlanService.java @@ -2,17 +2,17 @@ package wusthelper.web.service.campus.undergrad; import wusthelper.code.ServiceCode; import wusthelper.web.exception.ServiceException; -import wusthelper.web.rpc.undergrad.TrainingPlanRemote; +import wusthelper.web.rpc.http.undergrad.UndergradTrainingPlanRemote; import wusthelper.web.data.entity.CookieType; import wusthelper.web.service.cookie.CookieManager; import org.springframework.stereotype.Service; @Service public class UndergradTrainingPlanService { - private final TrainingPlanRemote trainingPlanRemote; + private final UndergradTrainingPlanRemote trainingPlanRemote; private final CookieManager cookieManager; - public UndergradTrainingPlanService(TrainingPlanRemote trainingPlanRemote, CookieManager cookieManager) { + public UndergradTrainingPlanService(UndergradTrainingPlanRemote trainingPlanRemote, CookieManager cookieManager) { this.trainingPlanRemote = trainingPlanRemote; this.cookieManager = cookieManager; } diff --git a/backend-main/backend-web/src/main/java/wusthelper/web/service/cookie/CookieManager.java b/backend-main/backend-web/src/main/java/wusthelper/web/service/cookie/CookieManager.java index 507bfdf..8f3f50a 100644 --- a/backend-main/backend-web/src/main/java/wusthelper/web/service/cookie/CookieManager.java +++ b/backend-main/backend-web/src/main/java/wusthelper/web/service/cookie/CookieManager.java @@ -7,6 +7,7 @@ import wusthelper.data.entity.Student; import wusthelper.web.data.entity.CookieType; import wusthelper.web.exception.ServiceException; import wusthelper.web.service.campus.graduate.GraduateCookieService; +import wusthelper.web.service.campus.physics.PhysicsCookieService; import wusthelper.web.service.campus.undergrad.UndergradCookieService; import com.github.benmanes.caffeine.cache.Cache; import com.github.benmanes.caffeine.cache.Caffeine; @@ -21,20 +22,23 @@ public class CookieManager { private static final Cache cookiePool = Caffeine.newBuilder() .expireAfterWrite(2, TimeUnit.HOURS) .initialCapacity(256) - .maximumSize(2048) + .maximumSize(1024) .build(); private final UndergradCookieService undergradCookieService; private final GraduateCookieService graduateCookieService; + private final PhysicsCookieService physicsCookieService; private final StudentMapper studentMapper; public CookieManager(UndergradCookieService undergradCookieService, GraduateCookieService graduateCookieService, + PhysicsCookieService physicsCookieService, StudentMapper studentMapper) { this.undergradCookieService = undergradCookieService; this.graduateCookieService = graduateCookieService; + this.physicsCookieService = physicsCookieService; this.studentMapper = studentMapper; } @@ -67,6 +71,7 @@ public class CookieManager { return switch (cookieType) { case Undergrad -> undergradCookieService.checkCookie(cookie); case Graduate -> graduateCookieService.checkCookie(cookie); + case Physics -> physicsCookieService.checkCookie(cookie); default -> false; }; } @@ -94,6 +99,7 @@ public class CookieManager { return switch (cookieType) { case Undergrad -> undergradCookieService.getLoginCookie(username, password); case Graduate -> graduateCookieService.getLoginCookie(username, password); + case Physics -> physicsCookieService.getLoginCookie(username, password); default -> null; }; } diff --git a/backend-main/backend-web/src/main/java/wusthelper/web/util/GlobalLogger.java b/backend-main/backend-web/src/main/java/wusthelper/web/util/GlobalLogger.java new file mode 100644 index 0000000..014b79e --- /dev/null +++ b/backend-main/backend-web/src/main/java/wusthelper/web/util/GlobalLogger.java @@ -0,0 +1,10 @@ +package wusthelper.web.util; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class GlobalLogger { + public static final Logger log = LoggerFactory.getLogger("wusthelper"); + + +} diff --git a/backend-main/backend-web/src/main/java/wusthelper/web/util/StringUtil.java b/backend-main/backend-web/src/main/java/wusthelper/web/util/StringUtil.java index 2904558..9c68371 100644 --- a/backend-main/backend-web/src/main/java/wusthelper/web/util/StringUtil.java +++ b/backend-main/backend-web/src/main/java/wusthelper/web/util/StringUtil.java @@ -1,5 +1,7 @@ package wusthelper.web.util; +import java.time.LocalDateTime; + public class StringUtil { public static boolean isPositiveNumber(final String str) { @@ -83,4 +85,21 @@ public class StringUtil { return 0.0F; } } + + /** + * 从学号获取年级(入学年份) + * + * @param studentNumber 学号 + * @return 年级(入学年份) + */ + public static int getGradeFromStudentNumber(String studentNumber) { + if (studentNumber.length() > 4) { + String gradeStr = studentNumber.substring(0, 4); + if (StringUtil.isPositiveNumber(gradeStr)) { + return Integer.parseInt(gradeStr); + } + } + + return LocalDateTime.now().getYear(); + } } diff --git a/backend-main/backend-web/src/main/resources/application.yml b/backend-main/backend-web/src/main/resources/application.yml index 3ea2993..95ad058 100644 --- a/backend-main/backend-web/src/main/resources/application.yml +++ b/backend-main/backend-web/src/main/resources/application.yml @@ -22,7 +22,19 @@ spring: url: jdbc:mysql://localhost:3306/wust_helper?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=Asia/Shanghai username: root password: Test2333! - + devtools: + restart: + enabled: true + data: + redis: + host: localhost + port: 6379 + password: Test2333! + jedis: + pool: + max-idle: 16 + max-active: 32 + min-idle: 8 server: port: ${RUN_PORT} diff --git a/backend-main/backend-web/src/test/java/wusthelper/TestMain.java b/backend-main/backend-web/src/test/java/wusthelper/TestMain.java index 55d3d12..2f04243 100644 --- a/backend-main/backend-web/src/test/java/wusthelper/TestMain.java +++ b/backend-main/backend-web/src/test/java/wusthelper/TestMain.java @@ -37,7 +37,7 @@ public class TestMain { public static void main(String[] args) { String token = TokenTool.signToken(1233487L, "202118194039"); - boolean valid = TokenTool.verifyToken(token); + boolean valid = TokenTool.verify(token); var uid = TokenTool.getUid(token); var studentNumber = TokenTool.getStudentNumber(token); log.info(token); diff --git a/external-library/mywust b/external-library/mywust index 0ca9d1a..5da31b2 160000 --- a/external-library/mywust +++ b/external-library/mywust @@ -1 +1 @@ -Subproject commit 0ca9d1a48da91b30933a3dd35e3428bb5207078f +Subproject commit 5da31b26d1a8b7560f068d8bf507d01e34c1cdaf