渲染题目列表

This commit is contained in:
Unique-Jerry 2023-10-23 20:55:51 +08:00
parent a5bbd4b77d
commit 82c6ea2d32
11 changed files with 163 additions and 100 deletions

View File

@ -19,6 +19,8 @@ import java.util.Map;
* @CreateTime: 2022/3/24
*/
public class UserInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
Map<String, Object> map = new HashMap<>();

View File

@ -57,5 +57,17 @@ public class UserController {
return R.success(user);
}
@GetMapping("/logout")
public R adminLogout(@ApiParam("token值") String token){
Integer row = userService.adminLogout(token);
if(row==0){
return R.error("登出失败,请联系管理员!");
}
return R.success("退出成功!");
}
}

View File

@ -0,0 +1,21 @@
package com.yzdx.AiInterviewer.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@TableName("black_token")
public class BlackToken {
@ApiModelProperty("token黑名单id")
@TableId(type = IdType.AUTO)
private Integer id;
@ApiModelProperty("用户ID")
private Integer userId;
@ApiModelProperty("token的值")
private String value;
@ApiModelProperty("创建时间")
private String createTime;
}

View File

@ -1,50 +0,0 @@
package com.yzdx.AiInterviewer.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
@Data
public class Employee {
@ApiModelProperty("用户id")
@TableId(type = IdType.AUTO)
private Integer id;
@ApiModelProperty("姓名")
private String name;
@ApiModelProperty("手机号码")
private String phone;
@ApiModelProperty("电子邮箱")
private String email;
@ApiModelProperty("住址")
private String address;
@ApiModelProperty("入职日期")
private Date onboardDate;
@ApiModelProperty("部门id")
private Integer departmentId;
@ApiModelProperty("公司编码")
private Integer companyEncoding;
@ApiModelProperty("职位")
private String position;
@ApiModelProperty("上级id")
private Integer superior;
@ApiModelProperty("工资")
private Double salary;
@ApiModelProperty("绩效评分")
private Double performanceScore;
@ApiModelProperty("教育背景")
private String educationalBackground;
@ApiModelProperty("工作经历")
private String workExperience;
@ApiModelProperty("性别")
private String sex;
@ApiModelProperty("年龄")
private String age;
@ApiModelProperty("员工证件照")
private String avatar;
@ApiModelProperty("员工状态,0离职,1在任")
private Integer status;
}

View File

@ -32,4 +32,6 @@ public class User extends BaseEntity{
private String avatar;
@ApiModelProperty("电子邮箱")
private String email;
@ApiModelProperty("所在公司的编号")
private String companyEncoding;
}

View File

@ -1,9 +1,12 @@
package com.yzdx.AiInterviewer.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yzdx.AiInterviewer.entity.Employee;
import com.yzdx.AiInterviewer.entity.BlackToken;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface EmployeeMapper extends BaseMapper<Employee> {
public interface BlackTokenMapper extends BaseMapper<BlackToken> {
}

View File

@ -0,0 +1,15 @@
package com.yzdx.AiInterviewer.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yzdx.AiInterviewer.entity.BlackToken;
public interface BlackTokenService extends IService<BlackToken> {
/**
* 判断token是否在黑名单里面
* @param token 输入的token
* @return true:为黑名单token
* */
boolean isBlackToken(String token);
}

View File

@ -8,13 +8,27 @@ import com.yzdx.AiInterviewer.entity.User;
public interface UserService extends IService<User> {
/** 管理员登录业务
* @param phone,encoding,password
* @param phone 输入的账号
* @param encoding 输入的公司编码
* @param password 输入的密码
* @return boolean,ture登陆成功,false登陆失败
*
*/
R adminLogin(String phone, String encoding, String password);
/**
* 根据用户id查询用户信息
* @param userid 前端穿过来的用户id
* @return 根据id查询到的user对象
* */
User getUserById(Integer userid);
/**
* 管理员登出
* @param token 用户登录时返回的token
* @return 1成功0失败
*
* */
Integer adminLogout(String token);
}

View File

@ -0,0 +1,30 @@
package com.yzdx.AiInterviewer.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yzdx.AiInterviewer.entity.BlackToken;
import com.yzdx.AiInterviewer.mapper.BlackTokenMapper;
import com.yzdx.AiInterviewer.service.BlackTokenService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class BlackTokenServiceImpl extends ServiceImpl<BlackTokenMapper, BlackToken> implements BlackTokenService {
@Autowired
private BlackTokenMapper blackTokenMapper;
@Override
public boolean isBlackToken(String token) {
LambdaQueryWrapper<BlackToken> queryWrapper=new LambdaQueryWrapper<>();
queryWrapper.eq(BlackToken::getValue,token);
BlackToken selectOne = blackTokenMapper.selectOne(queryWrapper);
if(selectOne!=null){
return true;
}
return false;
}
}

View File

@ -3,15 +3,14 @@ package com.yzdx.AiInterviewer.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yzdx.AiInterviewer.comment.R;
import com.yzdx.AiInterviewer.entity.Company;
import com.yzdx.AiInterviewer.entity.Employee;
import com.yzdx.AiInterviewer.entity.BlackToken;
import com.yzdx.AiInterviewer.entity.User;
import com.yzdx.AiInterviewer.mapper.CompanyMapper;
import com.yzdx.AiInterviewer.mapper.EmployeeMapper;
import com.yzdx.AiInterviewer.mapper.BlackTokenMapper;
import com.yzdx.AiInterviewer.mapper.UserMapper;
import com.yzdx.AiInterviewer.service.UserService;
import com.yzdx.AiInterviewer.utiles.JWT;
import com.yzdx.AiInterviewer.utiles.MD5Util;
import com.yzdx.AiInterviewer.utiles.TimeUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -23,71 +22,45 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
@Autowired
private UserMapper userMapper;
@Autowired
private CompanyMapper companyMapper;
private BlackTokenMapper blackTokenMapper;
@Autowired
private EmployeeMapper employeeMapper;
@Override
public R adminLogin(String phone, String encoding, String password) {
//判断账号和密码是否正确
LambdaQueryWrapper<User> userLambdaQueryWrapper=new LambdaQueryWrapper<>();
//判断员工是否在该公司
LambdaQueryWrapper<Employee> queryWrapper2=new LambdaQueryWrapper<>();
queryWrapper2.eq(Employee::getPhone,phone).eq(Employee::getCompanyEncoding,encoding);
Employee findEmployee=employeeMapper.selectOne(queryWrapper2);
userLambdaQueryWrapper.eq(User::getPhone,phone).eq(User::getCompanyEncoding,encoding);
if(findEmployee==null ||findEmployee.getStatus()==0){
User selectUser = userMapper.selectOne(userLambdaQueryWrapper);
return R.error("输入的账号或密码错误");
if(selectUser==null){
return R.error("账号或密码有误,请检查输入!");
}
String salt=selectUser.getSalt();
String selectPassword=selectUser.getPassword();
LambdaQueryWrapper<User> queryWrapper=new LambdaQueryWrapper();
password = MD5Util.GetMD5Password(password, salt);
queryWrapper.eq(User::getPhone,phone);
if(!password.equals(selectPassword)){
User user = userMapper.selectOne(queryWrapper);
return R.error("账号或密码有误,请检查输入!");
}
//若查询用户为空
if(user==null){
return R.error("账号不存在,请检查输入");
if(selectUser.getRole().equals("3")||selectUser.getRole().equals("4")){
return R.error("账号权限不足,请联系管理员");
}
if (user.getRole().equals("3") || user.getRole().equals("4")) {
return R.error("输入的账号或密码错误");
}
//查询的用户存在检查密码是否正确
String salt=user.getSalt();
String findPassword=user.getPassword();
password= MD5Util.GetMD5Password(password,salt);
if(!findPassword.equals(password)){
return R.error("输入的账号或密码错误");
}
//密码和账户都输入正确检查公司编码是否正确
LambdaQueryWrapper<Company> queryWrapper1=new LambdaQueryWrapper();
queryWrapper1.eq(Company::getEncoding,encoding);
Company findCompany= companyMapper.selectOne(queryWrapper1);
if(findCompany==null){
return R.error("输入的公司编码有误,请检查输入");
}
//均正确返回token密钥
String token=JWT.getJWToken(user.getId());
String token=JWT.getJWToken(selectUser.getId());
Map<String,Object> data=new HashMap<>();
data.put("token",token);
data.put("encoding",encoding);
data.put("userInfo",selectUser);
return R.success(data);
}
@ -99,5 +72,33 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
return userMapper.selectOne(queryWrapper);
}
@Override
public Integer adminLogout(String token) {
//判断token的正确性
boolean verify = JWT.verify(token);
if(!verify){
//若不正确返回0
return 0;
}
//正确的话,将token存入黑名单里面
Integer userId = JWT.getTokenId(token);
BlackToken blackToken=new BlackToken();
blackToken.setUserId(userId);
blackToken.setValue(token);
blackToken.setCreateTime(TimeUtil.getPreciseTime());
Integer rows=blackTokenMapper.insert(blackToken);
if(rows==0){
return 0;
}
return 1;
}
}

View File

@ -14,5 +14,18 @@ public class TimeUtil {
return time;
}
/**
* 获取精确时间
* */
public static String getPreciseTime(){
Date now =new Date();
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time = simpleDateFormat.format(now);
return time;
}
}