parent
0c7e3c8635
commit
beac827c04
@ -0,0 +1,121 @@
|
||||
// 声明该类所在的包为 com.service.impl
|
||||
package com.service.impl;
|
||||
|
||||
// 导入 Java 中的 Calendar 类,用于处理日期和时间
|
||||
import java.util.Calendar;
|
||||
// 导入 Java 中的 Date 类,用于表示日期和时间
|
||||
import java.util.Date;
|
||||
// 导入 Java 中的 List 接口,用于存储一组对象
|
||||
import java.util.List;
|
||||
// 导入 Java 中的 Map 接口,用于存储键值对
|
||||
import java.util.Map;
|
||||
|
||||
// 导入 Spring 框架的 Service 注解,用于将该类标记为服务层组件
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
// 导入 MyBatis-Plus 的 EntityWrapper 类,用于构建 SQL 查询条件
|
||||
import com.baomidou.mybatisplus.mapper.EntityWrapper;
|
||||
// 导入 MyBatis-Plus 的 Wrapper 接口,是 EntityWrapper 的父接口
|
||||
import com.baomidou.mybatisplus.mapper.Wrapper;
|
||||
// 导入 MyBatis-Plus 的 Page 类,用于分页查询
|
||||
import com.baomidou.mybatisplus.plugins.Page;
|
||||
// 导入 MyBatis-Plus 的 ServiceImpl 类,作为服务实现类的基类
|
||||
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
|
||||
// 导入 Token 数据访问对象接口
|
||||
import com.dao.TokenDao;
|
||||
// 导入 Token 实体类
|
||||
import com.entity.TokenEntity;
|
||||
// 重复导入 Token 实体类,此处可删除该重复导入
|
||||
import com.entity.TokenEntity;
|
||||
// 导入 Token 服务接口
|
||||
import com.service.TokenService;
|
||||
// 导入自定义的通用工具类
|
||||
import com.utils.CommonUtil;
|
||||
// 导入自定义的分页工具类
|
||||
import com.utils.PageUtils;
|
||||
// 导入自定义的查询工具类
|
||||
import com.utils.Query;
|
||||
|
||||
// 使用 Service 注解将该类标记为 Spring 服务组件,名称为 tokenService
|
||||
@Service("tokenService")
|
||||
// 定义 Token 服务实现类,继承自 MyBatis-Plus 的 ServiceImpl 类,并实现 TokenService 接口
|
||||
public class TokenServiceImpl extends ServiceImpl<TokenDao, TokenEntity> implements TokenService {
|
||||
|
||||
// 重写 TokenService 接口中的 queryPage 方法,用于分页查询 Token 数据
|
||||
@Override
|
||||
public PageUtils queryPage(Map<String, Object> params) {
|
||||
// 根据传入的参数创建一个 TokenEntity 类型的分页对象
|
||||
Page<TokenEntity> page = this.selectPage(
|
||||
// 通过 Query 工具类根据参数获取分页信息
|
||||
new Query<TokenEntity>(params).getPage(),
|
||||
// 创建一个空的查询条件包装器
|
||||
new EntityWrapper<TokenEntity>()
|
||||
);
|
||||
// 根据分页对象创建 PageUtils 对象并返回
|
||||
return new PageUtils(page);
|
||||
}
|
||||
|
||||
// 重写 TokenService 接口中的 selectListView 方法,用于查询 Token 列表数据
|
||||
@Override
|
||||
public List<TokenEntity> selectListView(Wrapper<TokenEntity> wrapper) {
|
||||
// 调用数据访问对象的 selectListView 方法,根据查询条件包装器查询列表数据并返回
|
||||
return baseMapper.selectListView(wrapper);
|
||||
}
|
||||
|
||||
// 重写 TokenService 接口中的 queryPage 方法,支持带查询条件的分页查询 Token 数据
|
||||
@Override
|
||||
public PageUtils queryPage(Map<String, Object> params,
|
||||
Wrapper<TokenEntity> wrapper) {
|
||||
// 根据传入的参数创建一个 TokenEntity 类型的分页对象
|
||||
Page<TokenEntity> page = new Query<TokenEntity>(params).getPage();
|
||||
// 调用数据访问对象的 selectListView 方法,根据分页对象和查询条件包装器查询列表数据并设置到分页对象中
|
||||
page.setRecords(baseMapper.selectListView(page, wrapper));
|
||||
// 根据分页对象创建 PageUtils 对象
|
||||
PageUtils pageUtil = new PageUtils(page);
|
||||
// 返回 PageUtils 对象
|
||||
return pageUtil;
|
||||
}
|
||||
|
||||
// 重写 TokenService 接口中的 generateToken 方法,用于生成 Token
|
||||
@Override
|
||||
public String generateToken(Integer userid, String username, String tableName, String role) {
|
||||
// 根据用户 ID 和角色查询 Token 实体对象
|
||||
TokenEntity tokenEntity = this.selectOne(new EntityWrapper<TokenEntity>().eq("userid", userid).eq("role", role));
|
||||
// 调用通用工具类的方法生成一个 32 位的随机字符串作为 Token
|
||||
String token = CommonUtil.getRandomString(32);
|
||||
// 获取当前时间的 Calendar 实例
|
||||
Calendar cal = Calendar.getInstance();
|
||||
// 设置 Calendar 的时间为当前日期和时间
|
||||
cal.setTime(new Date());
|
||||
// 将 Calendar 的时间增加 1 小时,作为 Token 的过期时间
|
||||
cal.add(Calendar.HOUR_OF_DAY, 1);
|
||||
// 如果查询到了 Token 实体对象
|
||||
if (tokenEntity != null) {
|
||||
// 更新 Token 实体对象的 Token 字段
|
||||
tokenEntity.setToken(token);
|
||||
// 更新 Token 实体对象的过期时间字段
|
||||
tokenEntity.setExpiratedtime(cal.getTime());
|
||||
// 调用更新方法更新 Token 实体对象
|
||||
this.updateById(tokenEntity);
|
||||
} else {
|
||||
// 如果未查询到 Token 实体对象,创建一个新的 Token 实体对象并插入数据库
|
||||
this.insert(new TokenEntity(userid, username, tableName, role, token, cal.getTime()));
|
||||
}
|
||||
// 返回生成的 Token
|
||||
return token;
|
||||
}
|
||||
|
||||
// 重写 TokenService 接口中的 getTokenEntity 方法,用于根据 Token 获取 Token 实体对象
|
||||
@Override
|
||||
public TokenEntity getTokenEntity(String token) {
|
||||
// 根据 Token 查询 Token 实体对象
|
||||
TokenEntity tokenEntity = this.selectOne(new EntityWrapper<TokenEntity>().eq("token", token));
|
||||
// 如果未查询到 Token 实体对象或者 Token 已过期
|
||||
if (tokenEntity == null || tokenEntity.getExpiratedtime().getTime() < new Date().getTime()) {
|
||||
// 返回 null
|
||||
return null;
|
||||
}
|
||||
// 返回查询到的 Token 实体对象
|
||||
return tokenEntity;
|
||||
}
|
||||
}
|
Loading…
Reference in new issue