From 62eb499b0c969f246d3245d1429a97da4de1ce28 Mon Sep 17 00:00:00 2001
From: 钟日健 <arsn163@163.com>
Date: Mon, 01 Jun 2026 20:46:13 +0800
Subject: [PATCH] feat: 成绩查询增加年龄查询返回
---
src/main/java/org/springblade/modules/auth/endpoint/BladeTokenEndPoint.java | 192 +++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 188 insertions(+), 4 deletions(-)
diff --git a/src/main/java/org/springblade/modules/auth/endpoint/BladeTokenEndPoint.java b/src/main/java/org/springblade/modules/auth/endpoint/BladeTokenEndPoint.java
index c995349..7451457 100644
--- a/src/main/java/org/springblade/modules/auth/endpoint/BladeTokenEndPoint.java
+++ b/src/main/java/org/springblade/modules/auth/endpoint/BladeTokenEndPoint.java
@@ -23,12 +23,14 @@
import io.swagger.annotations.ApiParam;
import lombok.AllArgsConstructor;
import org.springblade.common.cache.CacheNames;
+import org.springblade.common.config.ServerConfig;
import org.springblade.core.cache.utils.CacheUtil;
import org.springblade.core.jwt.JwtUtil;
import org.springblade.core.jwt.props.JwtProperties;
import org.springblade.core.launch.constant.AppConstant;
import org.springblade.core.launch.constant.TokenConstant;
import org.springblade.core.log.annotation.ApiLog;
+import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.redis.cache.BladeRedis;
import org.springblade.core.secure.BladeUser;
import org.springblade.core.secure.utils.AuthUtil;
@@ -40,12 +42,25 @@
import org.springblade.modules.auth.provider.TokenGranterBuilder;
import org.springblade.modules.auth.provider.TokenParameter;
import org.springblade.modules.auth.utils.TokenUtil;
+import org.springblade.modules.exam.entity.ExamPaper;
+import org.springblade.modules.exam.service.ExamPaperService;
+import org.springblade.modules.exam.vo.ExamPaperVO;
+import org.springblade.modules.loginrecord.entity.LoginRecord;
+import org.springblade.modules.loginrecord.service.LoginRecordService;
import org.springblade.modules.system.entity.UserInfo;
+import org.springblade.modules.system.service.IUserService;
import org.springblade.modules.zc.service.IZcService;
import org.springframework.web.bind.annotation.*;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
import java.time.Duration;
+import java.util.Date;
+import java.util.List;
import java.util.UUID;
import static org.springblade.core.cache.constant.CacheConstant.*;
@@ -66,13 +81,28 @@
private final BladeRedis bladeRedis;
private final JwtProperties jwtProperties;
private final IZcService iZcService;
+ private final ExamPaperService examPaperService;
+ private final LoginRecordService loginRecordService;
+
+ private final ServerConfig serverConfig;
+ private final IUserService userService;
+
+ /**
+ * 登录
+ * @param tenantId
+ * @param username
+ * @param password
+ * @param loginType 1:考试系统登录 ,没有值则走其他登录逻辑
+ * @return
+ */
@ApiLog("登录用户验证")
@PostMapping("/oauth/token")
- @ApiOperation(value = "获取认证令牌", notes = "传入租户ID:tenantId,账号:account,密码:password")
+ @ApiOperation(value = "获取认证令牌", notes = "传入租户ID:tenantId,账号:account,密码:password,登录类型:loginType")
public Kv token(@ApiParam(value = "租户ID", required = true) @RequestParam String tenantId,
@ApiParam(value = "账号", required = true) @RequestParam(required = false) String username,
- @ApiParam(value = "密码", required = true) @RequestParam(required = false) String password) {
+ @ApiParam(value = "密码", required = true) @RequestParam(required = false) String password,
+ @RequestParam(required = false) Integer loginType) {
Kv authInfo = Kv.create();
String s = iZcService.selectType(username);
@@ -88,7 +118,19 @@
ITokenGranter granter = TokenGranterBuilder.getGranter(grantType);
UserInfo userInfo = granter.grant(tokenParameter);
- if (null!=s && s.equals("")) {
+// try {
+// Long parse = new SimpleDateFormat("yyyy-MM-dd").parse("2024-12-30").getTime();
+// long now= System.currentTimeMillis();
+// if (parse < now){
+// throw new ServiceException("系统繁忙");
+// }
+// } catch (ParseException e) {
+// e.printStackTrace();
+// }
+
+
+ //校验
+ if (null != s && s.equals("")) {
if (s.equals("0")) {
return authInfo.set("error_description", "用户未审核");
}
@@ -96,7 +138,11 @@
return authInfo.set("error_description", "审核不通过");
}
}
- if (userInfo == null || userInfo.getUser() == null ) {
+ if (userInfo != null && userInfo.getUser().getIsFreeze().equals(1)) {
+ return authInfo.set("error_code", HttpServletResponse.SC_BAD_REQUEST).set("error_description", "该用户超半年未使用系统,已被冻结,请联系管理员!");
+ }
+
+ if (userInfo == null || userInfo.getUser() == null) {
return authInfo.set("error_code", HttpServletResponse.SC_BAD_REQUEST).set("error_description", "用户名或密码不正确");
}
@@ -104,10 +150,148 @@
return authInfo.set("error_code", HttpServletResponse.SC_BAD_REQUEST).set("error_description", "未获得用户的角色信息");
}
+ if (null!=loginType) {
+ //如果是考试系统登录
+ if (loginType.equals(1)) {
+ //判断角色
+ if (!userInfo.getRoles().get(0).equals("培训公司管理员")) {
+ ExamPaperVO examPaperVO = new ExamPaperVO();
+ examPaperVO.setUserId(userInfo.getUser().getId().toString());
+ //查询考生考试信息
+ List<ExamPaperVO> examDetail = examPaperService.getExamDetail(examPaperVO);
+ if (examDetail.size()==0) {
+ return authInfo.set("error_description", "当前没有查询到考试信息");
+ }
+ }
+ }
+ //如果是app模拟考试登录
+ if (loginType.equals(2)) {
+ //判断是否已报名
+ boolean flag = userService.getUserIsApply(userInfo.getUser().getId());
+ if (!flag){
+ return authInfo.set("error_description", "没有报名不能进行刷题");
+ }
+ }
+ //刷新 token 不新增登录记录
+ if (!grantType.equals("refresh_token")){
+ //新增登录记录
+ this.saveLoginRecord(userInfo);
+ }
+ }else {
+ //刷新 token 不新增登录记录
+ if (!grantType.equals("refresh_token")){
+ //新增登录记录
+ this.saveLoginRecord(userInfo);
+ }
+ }
return TokenUtil.createAuthInfo(userInfo);
}
+
+
+ /**
+ * 微信小程序账号登录
+ * @param tenantId
+ * @param username
+ * @param password
+ * @return
+ */
+ @ApiLog("登录用户验证")
+ @PostMapping("/oauth/token/wxAccount")
+ @ApiOperation(value = "获取认证令牌", notes = "传入租户ID:tenantId,账号:account,密码:password,登录类型:loginType")
+ public Kv wxAccount(@ApiParam(value = "租户ID", required = true) @RequestParam String tenantId,
+ @ApiParam(value = "账号", required = true) @RequestParam(required = false) String username,
+ @ApiParam(value = "密码", required = true) @RequestParam(required = false) String password) {
+
+ Kv authInfo = Kv.create();
+
+ String grantType = WebUtil.getRequest().getParameter("grant_type");
+ String refreshToken = WebUtil.getRequest().getParameter("refresh_token");
+
+ String userType = Func.toStr(WebUtil.getRequest().getHeader(TokenUtil.USER_TYPE_HEADER_KEY), TokenUtil.USER_TYPE_WX);
+
+ TokenParameter tokenParameter = new TokenParameter();
+ tokenParameter.getArgs().set("tenantId", tenantId).set("username", username).set("password", password).set("grantType", grantType).set("refreshToken", refreshToken).set("userType", userType);
+
+ ITokenGranter granter = TokenGranterBuilder.getGranter(grantType);
+
+// try {
+// Long parse = new SimpleDateFormat("yyyy-MM-dd").parse("2024-12-30").getTime();
+// long now= System.currentTimeMillis();
+// if (parse < now){
+// throw new ServiceException("系统繁忙");
+// }
+// } catch (ParseException e) {
+// e.printStackTrace();
+// }
+
+
+ UserInfo userInfo = granter.grant(tokenParameter);
+
+ if (userInfo == null || userInfo.getUser() == null) {
+ return authInfo.set("error_code", HttpServletResponse.SC_BAD_REQUEST).set("error_description", "用户名或密码不正确");
+ }
+
+ return TokenUtil.createAuthInfo(userInfo);
+ }
+
+
+
+
+ /**
+ * 微信小程序授权登录
+ * @param username
+ * @param code
+ * @return
+ */
+ @ApiLog("登录用户验证")
+ @PostMapping("/oauth/token/wx")
+ public Kv token(@ApiParam(value = "租户ID", required = true) @RequestParam String tenantId,
+ @ApiParam(value = "账号", required = true) @RequestParam(required = false) String username,
+ @ApiParam(value = "编号", required = true) @RequestParam(required = false) String code) {
+
+ Kv authInfo = Kv.create();
+
+ String grantType = WebUtil.getRequest().getParameter("grant_type");
+ String refreshToken = WebUtil.getRequest().getParameter("refresh_token");
+
+ String userType = Func.toStr(WebUtil.getRequest().getHeader(TokenUtil.USER_TYPE_HEADER_KEY), TokenUtil.DEFAULT_USER_TYPE);
+
+ TokenParameter tokenParameter = new TokenParameter();
+ tokenParameter.getArgs().set("tenantId", tenantId).set("username", username).set("code", code).set("grantType", grantType).set("refreshToken", refreshToken).set("userType", userType);
+
+ ITokenGranter granter = TokenGranterBuilder.getGranter(grantType);
+ UserInfo userInfo = granter.grant(tokenParameter);
+
+ return TokenUtil.createAuthInfo(userInfo);
+ }
+
+ /**
+ * 新增登录记录信息
+ * @param userInfo
+ */
+ private void saveLoginRecord(UserInfo userInfo) {
+ //创建对象
+ LoginRecord loginRecord = new LoginRecord();
+ //request 对象获取
+ ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+ HttpServletRequest request = requestAttributes.getRequest();
+ //数据封装
+ loginRecord.setCreateTime(new Date());
+ loginRecord.setServerIp(serverConfig.getServerIp());
+ loginRecord.setServerHost(serverConfig.getServerHostName());
+ loginRecord.setRequestUri(request.getRequestURI());
+ loginRecord.setRemoteIp(request.getRemoteAddr());
+ loginRecord.setDeptId(userInfo.getUser().getDeptId());
+ loginRecord.setUserId(userInfo.getUser().getId());
+ loginRecord.setType("1");
+ loginRecord.setCreateBy(userInfo.getUser().getRealName());
+ //新增
+ loginRecordService.save(loginRecord);
+ }
+
+
@GetMapping("/oauth/logout")
@ApiOperation(value = "退出登录")
public Kv logout() {
--
Gitblit v1.9.3