screen-manage/src/main/java/com/moral/api/service/impl/ManageAccountServiceImpl.java
@@ -7,6 +7,8 @@
import com.moral.api.mapper.ManageAccountMapper;
import com.moral.api.mapper.ManageMenuMapper;
import com.moral.api.mapper.ManageRoleMapper;
import com.moral.api.pojo.dto.AccountInfoDTO;
import com.moral.api.pojo.dto.LoginDTO;
import com.moral.api.service.ManageAccountService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.moral.util.AESUtils;
@@ -39,72 +41,101 @@
    @Resource
    ManageMenuMapper manageMenuMapper;
    public Map<String, Object> login(Map<String, Object> paramters) {
        Map<String,Object> result = new HashMap<>();
        //接收参数
        String cyrpAccount = (String) paramters.get("account");
        String cyrpPassword = (String) paramters.get("password");
    /**
     * @Description: 登陆
     * @Param: [parameters]
     * @return: java.util.Map<java.lang.String   ,   java.lang.Object>
     * @Author: 陈凯裕
     * @Date: 2021/3/11
     */
    @Override
    public LoginDTO login(String AESAccount,String AESPassword) {
        LoginDTO loginDTO = new LoginDTO();
        //解密
        String account = AESUtils.decrypt(cyrpAccount, AESKey);
        String password = AESUtils.decrypt(cyrpPassword, AESKey);
        String account = AESUtils.decrypt(AESAccount, AESKey);
        String password = AESUtils.decrypt(AESPassword, AESKey);
        //查询是否存在
        QueryWrapper<ManageAccount> wrapper = new QueryWrapper<>();
        wrapper.eq("account", account);
        ManageAccount manageAccount = accountMapper.selectOne(wrapper);
        if(ObjectUtils.isEmpty(manageAccount)){
            result.put("accountId",-1);
            result.put("msg","用户不存在!");
            return result;
        if (ObjectUtils.isEmpty(manageAccount)) {
            loginDTO.setCode(LoginDTO.NOT_EXIST);
            return loginDTO;
        }
        //查询是否逻辑删除
        if(manageAccount.getIsDelete().equals("1")){
            result.put("accountId",-1);
            result.put("msg","用户已被封禁");
            return result;
        if (manageAccount.getIsDelete().equals("1")) {
            loginDTO.setCode(LoginDTO.IS_DELETE);
            return loginDTO;
        }
        //校验密码
        if(!MD5Utils.saltMD5Verify(password,manageAccount.getPassword())){
            result.put("accountId",-1);
            result.put("msg","用户名密码错误");
            return result;
        if (!MD5Utils.saltMD5Verify(password, manageAccount.getPassword())) {
            loginDTO.setCode(LoginDTO.PASSWORD_ERROR);
            return loginDTO;
        }
        //查询角色
        List<ManageRole> roles = roleMapper.getManageRoleByAccountId(manageAccount.getId());
        if(ObjectUtils.isEmpty(roles)){
            result.put("accountId",-1);
            result.put("msg","用户尚未分配角色");
            return result;
        if (ObjectUtils.isEmpty(roles)) {//判断账号是否存在角色
            loginDTO.setCode(LoginDTO.ROLE_EMPTY);
            return loginDTO;
        }
        //查询菜单
        List<ManageMenu> menus = manageMenuMapper.getParentChildrenMenusByRoles(roles);
        if(ObjectUtils.isEmpty(menus)){
            result.put("accountId",-1);
            result.put("msg","用户尚未分配菜单");
            return result;
        if (ObjectUtils.isEmpty(menus)) {//判断账号是否存在菜单
            loginDTO.setCode(LoginDTO.MENU_EMPTY);
            return loginDTO;
        }
        //获取用户token,并且将基本信息存入缓存
        Map<String,Object> userInfo = new HashMap<>();//需要保存在缓存中用户的数据
        userInfo.put("accountId",manageAccount.getId());//用户Id
        userInfo.put("userName",manageAccount.getUserName());//用户名称
        userInfo.put("roles",roles);//用户角色
        userInfo.put("menus",menus);//用户菜单
        Map<String, Object> tokenResult = TokenUtils.getToken(String.valueOf(manageAccount.getId()), userInfo);
        if(tokenResult.get("code").equals(TokenUtils.error)){
            result.put("accountId",-1);
            result.put("msg","生成token错误");
            return result;
        }
        //打包返回信息
        result.put("accountId",manageAccount.getId());//用户Id
        result.put("userName",manageAccount.getUserName());//用户名称
        result.put("roles",roles);//用户角色
        result.put("menus",menus);//用户菜单
        result.put("token",tokenResult.get("token"));
        return result;
        //封装用户信息
        AccountInfoDTO accountInfoDTO = new AccountInfoDTO();
        /*获取角色名称集合*/
        ArrayList<String> roleNames = new ArrayList<>();
        roles.forEach(role->roleNames.add(role.getName()));
        /*过滤menu无用属性*/
        for (ManageMenu menu : menus) {
            menu.setCreateTime(null);
            menu.setIsDelete(null);
            menu.setUpdateTime(null);
            menu.setParentId(null);
            List<ManageMenu> children = menu.getChildren();
            for (ManageMenu child : children) {
                child.setCreateTime(null);
                child.setIsDelete(null);
                child.setUpdateTime(null);
                child.setParentId(null);
            }
        }
        accountInfoDTO.setAccountId(String.valueOf(manageAccount.getId()));
        accountInfoDTO.setAccountName(manageAccount.getUserName());
        accountInfoDTO.setMenus(menus);
        accountInfoDTO.setRoles(roleNames);
        //获取token 并且存入缓存
        String token = TokenUtils.getToken(String.valueOf(manageAccount.getId()), accountInfoDTO);
        //封装返回结果
        loginDTO.setCode(LoginDTO.SUCCESS);
        loginDTO.setAccountInfo(accountInfoDTO);
        loginDTO.setToken(token);
        return loginDTO;
    }
    /**
     * @Description: 注销
     * @Param: [parameters]
     * @return: java.util.Map<java.lang.String   ,   java.lang.Object>
     * @Author: 陈凯裕
     * @Date: 2021/3/11
     */
    @Override
    public boolean logout(String accountId,String token) {
        TokenUtils.destoryToken(accountId,token);
        return true;
    }
}