package com.gkhy.system.service.impl; import cn.hutool.core.util.ObjectUtil; import com.gkhy.common.core.domain.entity.SysDept; import org.springframework.stereotype.Service; import com.gkhy.common.core.domain.model.LoginUser; import com.gkhy.common.utils.StringUtils; import com.gkhy.system.domain.SysUserOnline; import com.gkhy.system.service.ISysUserOnlineService; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; /** * 在线用户 服务层处理 * * @author gkhy */ @Service public class SysUserOnlineServiceImpl implements ISysUserOnlineService { /** * 通过登录地址查询信息 * * @param ipaddr 登录地址 * @param user 用户信息 * @return 在线用户信息 */ @Override public SysUserOnline selectOnlineByIpaddr(String ipaddr, LoginUser user) { if (StringUtils.equals(ipaddr, user.getIpaddr())) { return loginUserToUserOnline(user); } return null; } /** * 通过用户名称查询信息 * * @param userName 用户名称 * @param user 用户信息 * @return 在线用户信息 */ @Override public SysUserOnline selectOnlineByUserName(String userName, LoginUser user) { if (StringUtils.equals(userName, user.getUsername())) { return loginUserToUserOnline(user); } return null; } /** * 通过登录地址/用户名称查询信息 * * @param ipaddr 登录地址 * @param userName 用户名称 * @param user 用户信息 * @return 在线用户信息 */ @Override public SysUserOnline selectOnlineByInfo(String ipaddr, String userName, LoginUser user) { if (StringUtils.equals(ipaddr, user.getIpaddr()) && StringUtils.equals(userName, user.getUsername())) { return loginUserToUserOnline(user); } return null; } /** * 设置在线用户信息 * * @param user 用户信息 * @return 在线用户 */ @Override public SysUserOnline loginUserToUserOnline(LoginUser user) { if (StringUtils.isNull(user) || StringUtils.isNull(user.getUser())) { return null; } SysUserOnline sysUserOnline = new SysUserOnline(); sysUserOnline.setTokenId(user.getToken()); sysUserOnline.setUserName(user.getUsername()); sysUserOnline.setIpaddr(user.getIpaddr()); sysUserOnline.setLoginLocation(user.getLoginLocation()); sysUserOnline.setBrowser(user.getBrowser()); sysUserOnline.setOs(user.getOs()); sysUserOnline.setLoginTime(user.getLoginTime()); if (ObjectUtil.isNotEmpty(user.getUser().getDepts())) { List depts = user.getUser().getDepts(); String deptNames = depts == null ? "" : depts.stream() .map(SysDept::getDeptName) .filter(Objects::nonNull) .collect(Collectors.joining(",")); sysUserOnline.setDepts(user.getUser().getDepts()); sysUserOnline.setDeptName(deptNames); } return sysUserOnline; } }