package com.cloudroam.service.impl; import com.cloudroam.bo.GroupPermissionBO; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import io.github.talelin.autoconfigure.exception.ForbiddenException; import com.cloudroam.common.enumeration.GroupLevelEnum; import com.cloudroam.common.mybatis.LinPage; import com.cloudroam.mapper.GroupMapper; import com.cloudroam.mapper.UserGroupMapper; import com.cloudroam.model.GroupDO; import com.cloudroam.model.PermissionDO; import com.cloudroam.model.UserGroupDO; import com.cloudroam.service.GroupService; import com.cloudroam.service.PermissionService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; import java.util.stream.Collectors; /** * @author * @author * @author * 分组服务实现类 */ @Service public class GroupServiceImpl extends ServiceImpl implements GroupService { @Autowired private PermissionService permissionService; @Autowired private UserGroupMapper userGroupMapper; @Override public List getUserGroupsByUserId(Integer userId) { return this.baseMapper.selectGroupsByUserId(userId); } @Override public List getUserGroupIdsByUserId(Integer userId) { return this.baseMapper.selectUserGroupIds(userId); } @Override public IPage getGroupPage(int page, int count) { LinPage pager = new LinPage<>(page, count); return this.baseMapper.selectPage(pager, null); } @Override public boolean checkGroupExistById(Integer id) { return this.baseMapper.selectCountById(id) > 0; } @Override public GroupPermissionBO getGroupAndPermissions(Integer id) { GroupDO group = this.baseMapper.selectById(id); List permissions = permissionService.getPermissionByGroupId(id); return new GroupPermissionBO(group, permissions); } @Override public boolean checkGroupExistByName(String name) { QueryWrapper wrapper = new QueryWrapper<>(); wrapper.lambda().eq(GroupDO::getName, name); return this.baseMapper.selectCount(wrapper) > 0; } @Override public boolean checkIsRootByUserId(Integer userId) { QueryWrapper wrapper = new QueryWrapper<>(); Integer rootGroupId = this.getParticularGroupIdByLevel(GroupLevelEnum.ROOT); wrapper.lambda().eq(UserGroupDO::getUserId, userId) .eq(UserGroupDO::getGroupId, rootGroupId); UserGroupDO relation = userGroupMapper.selectOne(wrapper); return relation != null; } @Override public boolean deleteUserGroupRelations(Integer userId, List deleteIds) { if (deleteIds == null || deleteIds.isEmpty()) { return true; } if (checkIsRootByUserId(userId)) { throw new ForbiddenException(10078); } QueryWrapper wrapper = new QueryWrapper<>(); wrapper.lambda() .eq(UserGroupDO::getUserId, userId) .in(UserGroupDO::getGroupId, deleteIds); return userGroupMapper.delete(wrapper) > 0; } @Override public boolean addUserGroupRelations(Integer userId, List addIds) { if (addIds == null || addIds.isEmpty()) { return true; } boolean ok = checkGroupExistByIds(addIds); if (!ok) { throw new ForbiddenException(10077); } List relations = addIds.stream().map(it -> new UserGroupDO(userId, it)).collect(Collectors.toList()); return userGroupMapper.insertBatch(relations) > 0; } @Override public List getGroupUserIds(Integer id) { QueryWrapper wrapper = new QueryWrapper<>(); wrapper.lambda().eq(UserGroupDO::getGroupId, id); List list = userGroupMapper.selectList(wrapper); return list.stream().map(UserGroupDO::getUserId).collect(Collectors.toList()); } @Override public GroupDO getParticularGroupByLevel(GroupLevelEnum level) { if (GroupLevelEnum.USER == level) { return null; } else { QueryWrapper wrapper = new QueryWrapper<>(); wrapper.lambda().eq(GroupDO::getLevel, level.getValue()); return this.baseMapper.selectOne(wrapper); } } @Override public Integer getParticularGroupIdByLevel(GroupLevelEnum level) { GroupDO group = this.getParticularGroupByLevel(level); return group == null ? 0 : Integer.valueOf(group.getId()); } private boolean checkGroupExistByIds(List ids) { return ids.stream().allMatch(this::checkGroupExistById); } }