| | |
| | | package com.sandu.ximon.admin.service; |
| | | |
| | | import cn.hutool.core.collection.CollectionUtil; |
| | | import cn.hutool.core.lang.Snowflake; |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import com.github.pagehelper.PageHelper; |
| | | import com.sandu.common.enums.RoleLevelStatus; |
| | |
| | | import com.sandu.ximon.admin.param.PwdParam; |
| | | import com.sandu.ximon.admin.param.UserPwsParm; |
| | | import com.sandu.ximon.admin.security.SecurityUtils; |
| | | import com.sandu.ximon.admin.security.authcode.MD5Util; |
| | | import com.sandu.ximon.admin.utils.StoreOperationRecordsUtils; |
| | | import com.sandu.ximon.dao.bo.AdminBo; |
| | | import com.sandu.ximon.dao.bo.MenuNode; |
| | | import com.sandu.ximon.dao.domain.Admin; |
| | | import com.sandu.ximon.dao.domain.AdminRoleRelation; |
| | | import com.sandu.ximon.dao.domain.Role; |
| | | import com.sandu.ximon.dao.domain.RoleMenuRelation; |
| | | import com.sandu.ximon.dao.domain.*; |
| | | import com.sandu.ximon.dao.enums.AdministratorEnums; |
| | | import com.sandu.ximon.dao.enums.OrderByEnums; |
| | | import com.sandu.ximon.dao.mapper.AdminMapper; |
| | |
| | | private final AdminRoleRelationService adminRoleRelationService; |
| | | private final RoleService roleService; |
| | | private AdminMapper adminMapper; |
| | | private Snowflake snowflake; |
| | | |
| | | public Admin findByUserName(String username) { |
| | | return getOne(Wrappers.lambdaQuery(Admin.class).eq(Admin::getUsername, username).last("limit 1")); |
| | |
| | | throw new BusinessException("当前账号" + param.getUsername() + "已经存在"); |
| | | } |
| | | Admin save = new Admin(); |
| | | save.setId(snowflake.nextId()); |
| | | save.setUsername(param.getUsername()); |
| | | save.setPassword(passwordEncoder.encode(param.getPassword())); |
| | | save.setNickName(param.getNickName()); |
| | |
| | | return updateById(admin); |
| | | } |
| | | |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public boolean deleteAdmin(Long adminId) { |
| | | boolean flag = false; |
| | | Admin admin = getById(adminId); |
| | | if (admin == null) { |
| | | throw new BusinessException("找不到管理员"); |
| | | } |
| | | List<Role> roles = roleService.listByAdminId(admin.getId()); |
| | | if (CollectionUtil.isEmpty(roles)) { |
| | | throw new BusinessException("当前用户没有角色"); |
| | | } |
| | | List<Integer> levels = roles.stream().map(Role::getLevel).collect(Collectors.toList()); |
| | | int min = Collections.min(levels); |
| | | int maxLevel = roleService.assertLevels(min); |
| | | if (!RoleLevelStatus.SUPER.getCode().equals(maxLevel)) { |
| | | if (!AdministratorEnums.ADMIN.getCode().equals(SecurityUtils.getUserDetails().getAdministratorType())) { |
| | | throw new BusinessException("只有超级管理员才能删除用户"); |
| | | } |
| | | |
| | | return removeById(adminId); |
| | | //管理员角色关系表 |
| | | AdminRoleRelationService adminRoleRelationService = SpringContextHolder.getBean(AdminRoleRelationService.class); |
| | | //有用户必定有用户与角色的关系数据 |
| | | AdminRoleRelation one = adminRoleRelationService.getOne(Wrappers.lambdaQuery(AdminRoleRelation.class).eq(AdminRoleRelation::getAdminId, admin.getId())); |
| | | Role role = SpringContextHolder.getBean(RoleService.class).getOne(Wrappers.lambdaQuery(Role.class).eq(Role::getId, one.getRoleId())); |
| | | if (role == null) { |
| | | throw new BusinessException("数据异常!"); |
| | | } |
| | | |
| | | if (role.getLevel().equals(RoleLevelStatus.SUPER.getCode())) { |
| | | throw new BusinessException("超级管理员无法删除"); |
| | | } else { |
| | | //删用户 |
| | | if (removeById(adminId)) { |
| | | //删角色关系表信息 |
| | | flag = adminRoleRelationService.removeById(one); |
| | | //删除失败回滚数据 |
| | | if (!flag) { |
| | | throw new BusinessException("删除管理员用户失败!"); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 删除管理员 日志记录开始 |
| | | */ |
| | | String content = "删除管理员:" + admin.getUsername() + "用户id:" + admin; |
| | | StoreOperationRecordsUtils.storeOperationData(null, null, "删除管理员", content); |
| | | /** |
| | | * 删除管理员 日志记录结束 |
| | | */ |
| | | |
| | | return flag; |
| | | } |
| | | |
| | | /** |
| | |
| | | */ |
| | | public List<MenuNode> getUserPermissionList() { |
| | | List<MenuNode> resultList; |
| | | //判断超管与普通管理员 |
| | | if (SecurityUtils.getAdministratorIdentity().equals(AdministratorEnums.ADMIN.getCode())) { |
| | | //参数为null时,获取所有的菜单权限 |
| | | resultList = SpringContextHolder.getBean(MenuService.class).getUserPermissionListById(null); |
| | | } else { |
| | | //通过用户UserID获取用户角色 |
| | | AdminRoleRelation one = SpringContextHolder.getBean(AdminRoleRelationService.class). |
| | | getOne(Wrappers.lambdaQuery(AdminRoleRelation.class).eq(AdminRoleRelation::getAdminId, SecurityUtils.getUserId())); |
| | | //判空 |
| | | if (one == null) { |
| | | throw new BusinessException("该用户未绑定角色"); |
| | | } |
| | | |
| | | //通过RoleID获取MeunId列表 |
| | | List<RoleMenuRelation> menuIdList = SpringContextHolder.getBean(RoleMenuRelationService.class) |
| | | .list(Wrappers.lambdaQuery(RoleMenuRelation.class).eq(RoleMenuRelation::getRoleId, one.getRoleId())); |
| | | |
| | | //判空 |
| | | if (menuIdList.isEmpty()) { |
| | | return new ArrayList<>(); |
| | | } |
| | | List<Long> menuIds = new ArrayList<>(menuIdList.size()); |
| | | for (RoleMenuRelation bean : menuIdList) { |
| | | menuIds.add(bean.getMenuId()); |
| | | } |
| | | |
| | | resultList = SpringContextHolder.getBean(MenuService.class).getUserPermissionListById(menuIds); |
| | | |
| | | //通过用户UserID获取用户角色 |
| | | AdminRoleRelation one = SpringContextHolder.getBean(AdminRoleRelationService.class). |
| | | getOne(Wrappers.lambdaQuery(AdminRoleRelation.class).eq(AdminRoleRelation::getAdminId, SecurityUtils.getUserId())); |
| | | //判空 |
| | | if (one == null) { |
| | | throw new BusinessException("该用户未绑定角色"); |
| | | } |
| | | |
| | | //通过RoleID获取MeunId列表 |
| | | List<RoleMenuRelation> menuIdList = SpringContextHolder.getBean(RoleMenuRelationService.class) |
| | | .list(Wrappers.lambdaQuery(RoleMenuRelation.class).eq(RoleMenuRelation::getRoleId, one.getRoleId())); |
| | | |
| | | //判空 |
| | | if (menuIdList.isEmpty()) { |
| | | return new ArrayList<>(); |
| | | } |
| | | List<Long> menuIds = new ArrayList<>(menuIdList.size()); |
| | | for (RoleMenuRelation bean : menuIdList) { |
| | | menuIds.add(bean.getMenuId()); |
| | | } |
| | | |
| | | resultList = SpringContextHolder.getBean(MenuService.class).getUserPermissionListById(menuIds); |
| | | |
| | | return resultList; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 生成key |
| | | * |
| | | * @param userId |
| | | * @return |
| | | */ |
| | | public String creatUserKey(Long userId, Integer type) { |
| | | if (userId == null) { |
| | | throw new BusinessException("用户ID不能为空!"); |
| | | } |
| | | //0:充重置key,1:获取key |
| | | if (type == null || (type != 0 && type != 1)) { |
| | | type = 1; |
| | | } |
| | | |
| | | ClientService clientService = SpringContextHolder.getBean(ClientService.class); |
| | | Client client = clientService.getOne(Wrappers.lambdaQuery(Client.class).eq(Client::getId, userId)); |
| | | if (client == null) { |
| | | throw new BusinessException("用户不存在,请重新确认!"); |
| | | } |
| | | |
| | | /** |
| | | * key操作日志 |
| | | */ |
| | | String content = "操作用户key:" + SecurityUtils.getUsername() + " 被操作用户id:" + userId; |
| | | |
| | | |
| | | //获取 |
| | | if (type == 1) { |
| | | content += "操作类型:获取key"; |
| | | StoreOperationRecordsUtils.storeOperationData(null, null, "操作用户key", content); |
| | | return "用户的便捷登录key为:" + client.getUserKey(); |
| | | } else { |
| | | //更新 |
| | | String md5 = MD5Util.md5("uesrId:" + userId + "_AdministratorType:" + 2 + "time:" + System.currentTimeMillis()); |
| | | client.setUserKey(md5); |
| | | boolean flag = clientService.updateById(client); |
| | | if (flag) { |
| | | content += "操作类型:生成key,新的key为:" + md5; |
| | | StoreOperationRecordsUtils.storeOperationData(null, null, "操作用户key", content); |
| | | return "生成便捷登录key成功,该用户key为:" + md5 + ",请妥善保管!"; |
| | | } else { |
| | | throw new BusinessException("生成便捷登录key失败!"); |
| | | } |
| | | } |
| | | } |
| | | } |