渲染题目列表
This commit is contained in:
parent
a5bbd4b77d
commit
82c6ea2d32
|
@ -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<>();
|
||||
|
|
|
@ -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("退出成功!");
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
|
||||
}
|
|
@ -32,4 +32,6 @@ public class User extends BaseEntity{
|
|||
private String avatar;
|
||||
@ApiModelProperty("电子邮箱")
|
||||
private String email;
|
||||
@ApiModelProperty("所在公司的编号")
|
||||
private String companyEncoding;
|
||||
}
|
||||
|
|
|
@ -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> {
|
||||
|
||||
|
||||
}
|
|
@ -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);
|
||||
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue