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<String> iterable = keys.getKeysByPattern(globalConfig.getKeyPrefix()+":usertoken:"+"*"+sysUser.getUserId());
|
iterable.forEach(s -> {
|
RBucket<SysUserInfo> 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<String,Object> map = sysUsersMapper.queryCompanyByComAdmin(sysUser.getUserId());
|
sysUser.setCompanyId(map.get("companyId").toString());
|
sysUser.setCompanyName(map.get("companyName").toString());
|
}
|
if(sysUser.getIsPlat()==1){
|
HashMap<String,Object> 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<String> 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<MenuTreeVo> 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<MpMenuVo> mpMenuVoList = new ArrayList<>();
|
if(sysUser.getUserType()==1){
|
mpMenuVoList = menuMapper.queryMenuTagByUserId(sysUser.getUserId());
|
mpMenuVoList.forEach(mm->{
|
List<MpMenuListVo> 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<String,Object> 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);
|
}
|
}
|
}
|