// 声明该类所在的包为 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 implements TokenService { // 重写 TokenService 接口中的 queryPage 方法,用于分页查询 Token 数据 @Override public PageUtils queryPage(Map params) { // 根据传入的参数创建一个 TokenEntity 类型的分页对象 Page page = this.selectPage( // 通过 Query 工具类根据参数获取分页信息 new Query(params).getPage(), // 创建一个空的查询条件包装器 new EntityWrapper() ); // 根据分页对象创建 PageUtils 对象并返回 return new PageUtils(page); } // 重写 TokenService 接口中的 selectListView 方法,用于查询 Token 列表数据 @Override public List selectListView(Wrapper wrapper) { // 调用数据访问对象的 selectListView 方法,根据查询条件包装器查询列表数据并返回 return baseMapper.selectListView(wrapper); } // 重写 TokenService 接口中的 queryPage 方法,支持带查询条件的分页查询 Token 数据 @Override public PageUtils queryPage(Map params, Wrapper wrapper) { // 根据传入的参数创建一个 TokenEntity 类型的分页对象 Page page = new Query(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().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().eq("token", token)); // 如果未查询到 Token 实体对象或者 Token 已过期 if (tokenEntity == null || tokenEntity.getExpiratedtime().getTime() < new Date().getTime()) { // 返回 null return null; } // 返回查询到的 Token 实体对象 return tokenEntity; } }