diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserOnlineController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserOnlineController.java index 1496f27..b99587e 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserOnlineController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserOnlineController.java @@ -37,23 +37,7 @@ public class SysUserOnlineController extends BaseController { @RequiresPermissions("monitor:online:list") @GetMapping("/list") public Result> list (String ipaddr, String userName) { - Collection keys = redisService.keys(CacheConstants.LOGIN_TOKEN_KEY + "*"); - List userOnlineList = new ArrayList(); - for (String key : keys) { - LoginUser user = redisService.getCacheObject(key); - if (StringUtils.isNotEmpty(ipaddr) && StringUtils.isNotEmpty(userName)) { - userOnlineList.add(userOnlineService.selectOnlineByInfo(ipaddr, userName, user)); - } else if (StringUtils.isNotEmpty(ipaddr)) { - userOnlineList.add(userOnlineService.selectOnlineByIpaddr(ipaddr, user)); - } else if (StringUtils.isNotEmpty(userName)) { - userOnlineList.add(userOnlineService.selectOnlineByUserName(userName, user)); - } else { - userOnlineList.add(userOnlineService.loginUserToUserOnline(user)); - } - } - Collections.reverse(userOnlineList); - userOnlineList.removeAll(Collections.singleton(null)); - return getDataTable(userOnlineList); + return getDataTable(userOnlineService.getUserOneList(ipaddr,userName)); } /** diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysUserOnlineService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysUserOnlineService.java index 41445d2..b5a1889 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysUserOnlineService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysUserOnlineService.java @@ -3,6 +3,8 @@ package com.ruoyi.system.service; import com.ruoyi.common.system.domain.LoginUser; import com.ruoyi.system.domain.SysUserOnline; +import java.util.List; + /** * 在线用户 服务层 * @@ -48,4 +50,12 @@ public interface SysUserOnlineService { * @return 在线用户 */ public SysUserOnline loginUserToUserOnline (LoginUser user); + + /** + * 从缓存中获取在线用户信息集合 + * @param ipaddr 登录地址 + * @param userName 用户名称 + * @return 在线用户信息集合 + */ + List getUserOneList(String ipaddr, String userName); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserOnlineServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserOnlineServiceImpl.java index 540f002..aac20b5 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserOnlineServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserOnlineServiceImpl.java @@ -1,11 +1,19 @@ package com.ruoyi.system.service.impl; +import com.ruoyi.common.core.constant.CacheConstants; import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.redis.service.RedisService; import com.ruoyi.common.system.domain.LoginUser; import com.ruoyi.system.domain.SysUserOnline; import com.ruoyi.system.service.SysUserOnlineService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + /** * 在线用户 服务层处理 * @@ -13,6 +21,10 @@ import org.springframework.stereotype.Service; */ @Service public class SysUserOnlineServiceImpl implements SysUserOnlineService { + + @Autowired + private RedisService redisService; + /** * 通过登录地址查询信息 * @@ -81,4 +93,31 @@ public class SysUserOnlineServiceImpl implements SysUserOnlineService { sysUserOnline.setLoginTime(user.getLoginTime()); return sysUserOnline; } + + /** + * 从缓存中获取在线用户信息集合 + * @param ipaddr 登录地址 + * @param userName 用户名称 + * @return 在线用户信息集合 + */ + @Override + public List getUserOneList(String ipaddr, String userName) { + Collection keys = redisService.keys(CacheConstants.LOGIN_TOKEN_KEY + "*"); + List userOnlineList = new ArrayList(); + for (String key : keys) { + LoginUser user = redisService.getCacheObject(key); + if (StringUtils.isNotEmpty(ipaddr) && StringUtils.isNotEmpty(userName)) { + userOnlineList.add(this.selectOnlineByInfo(ipaddr, userName, user)); + } else if (StringUtils.isNotEmpty(ipaddr)) { + userOnlineList.add(this.selectOnlineByIpaddr(ipaddr, user)); + } else if (StringUtils.isNotEmpty(userName)) { + userOnlineList.add(this.selectOnlineByUserName(userName, user)); + } else { + userOnlineList.add(this.loginUserToUserOnline(user)); + } + } + Collections.reverse(userOnlineList); + userOnlineList.removeAll(Collections.singleton(null)); + return userOnlineList; + } } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java index bd56348..3afc870 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java @@ -1,19 +1,23 @@ package com.ruoyi.system.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.core.constant.CacheConstants; import com.ruoyi.common.core.constant.UserConstants; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.SpringUtils; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.bean.BeanValidators; import com.ruoyi.common.datascope.annotation.DataScope; +import com.ruoyi.common.redis.service.RedisService; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.common.system.domain.SysRole; import com.ruoyi.common.system.domain.SysUser; import com.ruoyi.system.domain.SysPost; +import com.ruoyi.system.domain.SysUserOnline; import com.ruoyi.system.domain.SysUserPost; import com.ruoyi.system.domain.SysUserRole; import com.ruoyi.system.mapper.*; +import com.ruoyi.system.service.SysUserOnlineService; import com.ruoyi.system.service.SysUserService; import com.ruoyi.system.service.SysConfigService; import org.slf4j.Logger; @@ -26,6 +30,7 @@ import org.springframework.util.CollectionUtils; import javax.validation.Validator; import java.util.ArrayList; import java.util.List; +import java.util.Optional; import java.util.stream.Collectors; /** @@ -50,6 +55,10 @@ public class SysUserServiceImpl extends ServiceImpl impl private SysUserPostMapper userPostMapper; @Autowired private SysConfigService configService; + @Autowired + private RedisService redisService; + @Autowired + private SysUserOnlineService sysUserOnlineService; /** * 根据条件分页查询用户列表 @@ -330,7 +339,7 @@ public class SysUserServiceImpl extends ServiceImpl impl } /** - * 重置用户密码 + * 用户管理界面重置用户密码 * * @param user 用户信息 * @@ -338,11 +347,21 @@ public class SysUserServiceImpl extends ServiceImpl impl */ @Override public int resetPwd (SysUser user) { + SysUser sysUser = userMapper.selectUserById(user.getUserId()); + Long userId = SecurityUtils.getUserId(); + //管理员操作后强退 + if(!user.getUserId().equals(userId)&&SecurityUtils.isAdmin(userId)){ + List userOneList = sysUserOnlineService.getUserOneList(null, null); + userOneList.stream().filter(sysUserOnline -> sysUserOnline.getUserName().equals(sysUser.getUserName())) + .findFirst().ifPresent(sysUserOnline-> + redisService.deleteObject(CacheConstants.LOGIN_TOKEN_KEY + sysUserOnline.getTokenId()) + ); + } return userMapper.updateUser(user); } /** - * 重置用户密码 + * 个人信息界面重置用户密码 * * @param userName 用户名 * @param password 密码