package com.service.impl; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.Map; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.mapper.Wrapper; import com.baomidou.mybatisplus.plugins.Page; import com.baomidou.mybatisplus.service.impl.ServiceImpl; import com.dao.TokenDao; import com.entity.TokenEntity; import com.service.TokenService; import com.utils.CommonUtil; import com.utils.PageUtils; import com.utils.Query; /** * 处理token相关业务逻辑的服务实现类 */ @Service("tokenService") // 继承ServiceImpl类,指定数据访问对象为TokenDao和实体类为TokenEntity,实现TokenService接口 public class TokenServiceImpl extends ServiceImpl implements TokenService { // 根据传入的参数进行分页查询Token实体数据的方法 // @param params 包含查询条件、分页参数等信息的Map集合 // @return PageUtils对象,包含了分页查询结果的相关信息,如总记录数、当前页码等 @Override public PageUtils queryPage(Map params) { // 创建分页对象,使用Query工具类从参数中构建分页参数并获取Page对象 Page page = this.selectPage( new Query(params).getPage(), // 创建一个空的实体查询条件包装器,即查询所有符合条件的记录(这里未添加具体条件) new EntityWrapper() ); // 使用PageUtils工具类将MyBatis-Plus的Page对象转换为自定义的分页工具对象并返回 return new PageUtils(page); } // 根据传入的查询条件包装器查询Token实体视图列表的方法 // @param wrapper 用于构建查询条件的包装器,类型为TokenEntity的包装器 // @return 包含Token实体视图的List集合 @Override public List selectListView(Wrapper wrapper) { // 调用数据访问对象的selectListView方法,传入查询条件包装器,获取Token实体视图列表 return baseMapper.selectListView(wrapper); } // 根据传入的参数和查询条件进行分页查询Token实体数据的方法 // @param params 包含查询条件、分页参数等信息的Map集合 // @param wrapper 用于构建查询条件的包装器,类型为TokenEntity的包装器 // @return PageUtils对象,包含了分页查询结果的相关信息 @Override public PageUtils queryPage(Map params, Wrapper wrapper) { // 创建分页对象,使用Query工具类从参数中构建分页参数并获取Page对象 Page page = new Query(params).getPage(); // 设置分页对象的记录,通过调用数据访问对象的selectListView方法,传入分页对象和查询条件包装器获取结果 page.setRecords(baseMapper.selectListView(page, wrapper)); // 使用PageUtils工具类将MyBatis-Plus的Page对象转换为自定义的分页工具对象并返回 PageUtils pageUtil = new PageUtils(page); return pageUtil; } // 生成Token的方法,根据用户ID、用户名、表名和角色生成并处理Token相关信息 // @param userid 用户ID // @param username 用户名 // @param tableName 表名 // @param role 角色 // @return 生成的Token字符串 @Override public String generateToken(Long userid, String username, String tableName, String role) { // 根据用户ID和角色查询Token实体,判断是否已存在对应的Token记录 TokenEntity tokenEntity = this.selectOne(new EntityWrapper().eq("userid", userid).eq("role", role)); // 生成32位的随机字符串作为Token String token = CommonUtil.getRandomString(32); // 获取当前时间的日历对象 Calendar cal = Calendar.getInstance(); // 设置日历的时间为当前时间 cal.setTime(new Date()); // 将时间增加1小时,设置Token的过期时间 cal.add(Calendar.HOUR_OF_DAY, 1); // 如果Token实体已存在,则更新其Token和过期时间 if (tokenEntity != null) { tokenEntity.setToken(token); tokenEntity.setExpiratedtime(cal.getTime()); this.updateById(tokenEntity); } else { // 如果Token实体不存在,则插入一条新的Token记录 this.insert(new TokenEntity(userid, username, tableName, role, token, cal.getTime())); } // 返回生成的Token return token; } // 根据Token获取Token实体的方法,并检查Token是否过期 // @param token Token字符串 // @return TokenEntity对象,如果Token无效或已过期则返回null @Override public TokenEntity getTokenEntity(String token) { // 根据Token查询Token实体 TokenEntity tokenEntity = this.selectOne(new EntityWrapper().eq("token", token)); // 如果Token实体不存在或者Token已过期(过期时间早于当前时间),则返回null if (tokenEntity == null || tokenEntity.getExpiratedtime().getTime() < new Date().getTime()) { return null; } // 返回有效的Token实体 return tokenEntity; } }