package com.thhy.usercore.modules.sys.login.service.impl; import com.thhy.general.utils.DeepCopyUtils; import com.thhy.general.utils.password.PasswdUtils; import com.thhy.general.utils.UUIDUtils; import com.thhy.general.common.BasicStatus; import com.thhy.general.config.BasicContext; import com.thhy.general.config.GlobalConfig; import com.thhy.general.exception.BasicException; import com.thhy.usercore.modules.sys.login.entity.LoginVO; import com.thhy.general.common.entity.SysUserDto; import com.thhy.usercore.modules.sys.login.entity.MpLoginVo; import com.thhy.usercore.modules.sys.login.entity.MpMenuListVo; import com.thhy.usercore.modules.sys.login.entity.MpMenuVo; import com.thhy.usercore.modules.sys.login.service.LoginService; import com.thhy.usercore.modules.sys.mpmenu.mapper.MpMenuMapper; import com.thhy.usercore.modules.sys.sysmenu.entity.MenuDto; import com.thhy.usercore.modules.sys.sysmenu.entity.MenuTreeVo; import com.thhy.usercore.modules.sys.sysmenu.service.ISysMenusService; import com.thhy.general.config.SysUserInfo; import com.thhy.usercore.modules.sys.sysusers.entity.SysUsers; import com.thhy.usercore.modules.sys.sysusers.mapper.SysUsersMapper; import org.redisson.api.RBucket; import org.redisson.api.RedissonClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.concurrent.TimeUnit; /** * @Author: zhang_xiao_bo * @Date: 2022/3/22 14:31 * @description: */ @Service public class LoginServiceImpl implements LoginService { @Autowired private SysUsersMapper sysUsersMapper; @Autowired private MpMenuMapper menuMapper; @Autowired private ISysMenusService sysMenusService; @Autowired private RedissonClient redissonClient; @Autowired private GlobalConfig globalConfig; /** * 登陆 * @param sysUserDto * @return */ @Override public LoginVO login(SysUserDto sysUserDto) { //根据用户名获取用户信息 SysUsers sysUser = sysUsersMapper.queryByUsername(sysUserDto.getUsername()); if(sysUser==null){ throw new BasicException(BasicStatus.LOGIN_FAILD); //用户名不存在导致登录失败 } //判断登陆状态,强制下线 /*RKeys keys = redissonClient.getKeys(); Iterable iterable = keys.getKeysByPattern(globalConfig.getKeyPrefix()+":usertoken:"+"*"+sysUser.getUserId()); iterable.forEach(s -> { RBucket rBucket = redissonClient.getBucket(s); SysUserInfo userInfo = rBucket.get(); if(sysUser.getUserId().equals(userInfo.getUserId())){ rBucket.delete(); } });*/ //解析并校验密码 boolean result = PasswdUtils.validatePassword(sysUserDto.getPassword(),sysUser.getPassword()); if(!result){ throw new BasicException(BasicStatus.USER_NOT_EXIST); } if(sysUser.getSubAdmin()==1){ HashMap map = sysUsersMapper.queryCompanyByComAdmin(sysUser.getUserId()); sysUser.setCompanyId(map.get("companyId").toString()); sysUser.setCompanyName(map.get("companyName").toString()); } if(sysUser.getIsPlat()==1){ HashMap map = sysUsersMapper.queryCompanyByUser(sysUser.getUserId()); sysUser.setCompanyId(map.get("companyId").toString()); sysUser.setCompanyName(map.get("companyName").toString()); } SysUserInfo sysUserInfo = new SysUserInfo(); DeepCopyUtils.copy(sysUser,sysUserInfo); //这里不需要密码 //用户可访问url //List enableUrls = sysUsersMapper.queryUserUrls(sysUserInfo.getUserId()); //用户可用按钮 String enableButtons = sysUsersMapper.queryUserButtons(sysUserInfo.getUserId()); //sysUserInfo.setEnableUrls(enableUrls); sysUserInfo.setEnableButtons(StringUtils.isEmpty(enableButtons)?"":enableButtons); String token = UUIDUtils.create()+sysUserInfo.getUserId(); redissonClient.getBucket(globalConfig.getKeyPrefix()+":usertoken:"+ token).trySet(sysUserInfo,365, TimeUnit.DAYS); //用户菜单权限 List menuTreeVoList = sysMenusService.findTree(new MenuDto(sysUserInfo.getUserId(),"0")); if(menuTreeVoList.size()<1){ throw new BasicException(BasicStatus.NO_ENABLE_MENU); } BasicContext.setToken(token); return new LoginVO(token,sysUserInfo,menuTreeVoList); } @Override public MpLoginVo mpLogin(SysUserDto sysUserDto) { SysUsers sysUser = sysUsersMapper.queryByUsernameIsPlat(sysUserDto.getUsername()); if(sysUser==null){ throw new BasicException(BasicStatus.LOGIN_FAILD); //用户名不存在导致登录失败 } //解析并校验密码 boolean result = PasswdUtils.validatePassword(sysUserDto.getPassword(),sysUser.getPassword()); if(!result){ throw new BasicException(BasicStatus.USER_NOT_EXIST); } List mpMenuVoList = new ArrayList<>(); if(sysUser.getUserType()==1){ mpMenuVoList = menuMapper.queryMenuTagByUserId(sysUser.getUserId()); mpMenuVoList.forEach(mm->{ List menuList = menuMapper.queryMenuByTagAndUser(sysUser.getUserId(),mm.getTagId()); mm.setMenuList(menuList); }); }else{ mpMenuVoList = menuMapper.queryMPMenuLW(sysUser.getUserId()); } /*if(mpMenuVoList.size()<1){ throw new BasicException(BasicStatus.NO_ENABLE_MENU); }*/ HashMap map = sysUsersMapper.queryCompanyByPosition(sysUser.getUserId()); sysUser.setCompanyId(map.get("companyId").toString()); sysUser.setCompanyName(map.get("companyName").toString()); SysUserInfo sysUserInfo = new SysUserInfo(); DeepCopyUtils.copy(sysUser,sysUserInfo); //这里不需要密码 String token = UUIDUtils.create()+sysUserInfo.getUserId(); redissonClient.getBucket(globalConfig.getKeyPrefix()+":usertoken:"+ token).trySet(sysUserInfo,1000, TimeUnit.MINUTES); BasicContext.setToken(token); return new MpLoginVo(token,sysUserInfo,mpMenuVoList); } @Override public void logout(String token) { try { RBucket rBucket = redissonClient.getBucket(globalConfig.getKeyPrefix()+":usertoken:"+token); if(rBucket.get()!=null){ rBucket.getAndDelete(); } } catch (Exception e) { e.printStackTrace(); throw new BasicException(BasicStatus.OPERATOR_FAILD); } } }