package com.kidgrow.usercenter.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.kidgrow.common.annotation.LoginUser; import com.kidgrow.common.model.*; import com.kidgrow.usercenter.dto.SysRoleOrganizationDto; import com.kidgrow.usercenter.mapper.SysRoleMapper; import com.kidgrow.usercenter.service.ISysOrganizationService; import com.kidgrow.usercenter.service.ISysRoleService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.kidgrow.common.service.impl.SuperServiceImpl; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import org.apache.commons.collections4.MapUtils; import lombok.extern.slf4j.Slf4j; import com.kidgrow.usercenter.model.SysRoleOrganization; import com.kidgrow.usercenter.mapper.SysRoleOrganizationMapper; import com.kidgrow.usercenter.service.ISysRoleOrganizationService; /** * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020
* * @version 1.0 * @Description: 角色对应的 部门
* @Project: 用户中心
* @CreateDate: Created in 2020-04-21 14:24:41
* @Author: liuke */ @Slf4j @Service public class SysRoleOrganizationServiceImpl extends SuperServiceImpl implements ISysRoleOrganizationService { private final Integer TYPE_QUAN_BU = 1;//全部数据权限 private final Integer TYPE_ZI_DING_YI = 2;//自定义数据权限 private final Integer TYPE_BEN_BU_MEN = 3;//本部门数据权限 private final Integer TYPE_BEN_BU_MEN_YI_XIA = 4;//本部门及以下数据权限 private final Integer TYPE_BEN_REN = 5;//仅本人数据权限不能为空 @Autowired private ISysOrganizationService iSysOrganizationService; @Autowired private ISysRoleService iSysRoleService; @Autowired private SysOrganizationServiceImpl sysOrganizationService; @Autowired private SysRoleMapper sysRoleMapper; /** * 列表 * * @param params * @return */ @Override public PageResult findList(Map params) { Page page = new Page<>(MapUtils.getInteger(params, "page"), MapUtils.getInteger(params, "limit")); List list = baseMapper.findList(page, params); return PageResult.builder().data(list).code(0).count(page.getTotal()).build(); } /** * 根据SysRoleOrganization对象当做查询条件进行查询 * * @param sysRoleOrganization * @return SysRoleOrganization */ @Override public SysRoleOrganization findByObject(SysRoleOrganization sysRoleOrganization) { return baseMapper.findByObject(sysRoleOrganization); } @Override public boolean saveOrUpdateSer(SysRoleOrganizationDto sysRoleOrganizationDto, SysUser user) { if (sysRoleOrganizationDto.getRoleId() != null) { SysRole sysRole = iSysRoleService.getById(sysRoleOrganizationDto.getRoleId()); sysRole.setType(sysRoleOrganizationDto.getType()); boolean b = iSysRoleService.updateById(sysRole); } SysRoleOrganization sysRoleOrganization = new SysRoleOrganization(); sysRoleOrganization.setRoleId(sysRoleOrganizationDto.getRoleId()); List organizations = user.getOrganizations(); // 1代表全部数据权限,2自定义数据权限,3本部门数据权限,4本部门及以下数据权限,5仅本人数据权限不能为空") //先清除数据 if(sysRoleOrganizationDto.getRoleId()!=null){ Map map=new HashMap<>(); map.put("role_id",sysRoleOrganizationDto.getRoleId()); map.put("is_del",0); List sysRoleOrganizations = baseMapper.selectByMap(map); List collect = sysRoleOrganizations.stream().map(e -> e.getId()).collect(Collectors.toList()); if(collect.size()>0){ int i = baseMapper.deleteBatchIds(collect); } } //全部数据 if (sysRoleOrganizationDto.getType() == TYPE_QUAN_BU) { // sysRoleOrganization.setOrgCode("10"); // if (organizations != null && organizations.size() > 0) { // sysRoleOrganization.setOrgId(organizations.get(organizations.size()-1).getId()); // } // baseMapper.insert(sysRoleOrganization); } //2自定义数据权限 if (sysRoleOrganizationDto.getType() == TYPE_ZI_DING_YI) { List orgIds = sysRoleOrganizationDto.getOrgIds(); orgIds.forEach(e -> { sysRoleOrganization.setId(null); sysRoleOrganization.setOrgId(e); SysOrganization byId = iSysOrganizationService.getById(e); if (byId != null) { sysRoleOrganization.setOrgCode(byId.getOrgCode()); } baseMapper.insert(sysRoleOrganization); }); }else { } //3本部门数据权限 if (sysRoleOrganizationDto.getType() == TYPE_BEN_BU_MEN) { if (organizations != null && organizations.size() > 0) { sysRoleOrganization.setOrgCode(organizations.get(organizations.size()-1).getOrgCode()); sysRoleOrganization.setOrgId(organizations.get(organizations.size()-1).getId()); baseMapper.insert(sysRoleOrganization); } else { return false; } } //4本部门及以下数据权限 if (sysRoleOrganizationDto.getType() == TYPE_BEN_BU_MEN_YI_XIA) { if (organizations != null && organizations.size() > 0) { sysRoleOrganization.setOrgCode(organizations.get(organizations.size()-1).getOrgCode()); sysRoleOrganization.setOrgId(organizations.get(organizations.size()-1).getId()); baseMapper.insert(sysRoleOrganization); } else { return false; } } //5仅本人数据权限不能为空 if (sysRoleOrganizationDto.getType() == TYPE_BEN_REN) { sysRoleOrganization.setOrgCode(organizations.get(organizations.size()-1).getOrgCode()); sysRoleOrganization.setOrgId(organizations.get(organizations.size()-1).getId()); baseMapper.insert(sysRoleOrganization); } return true; } @Override public ResultBody getTree(Map params, SysUser user) { List sysOrganizations = sysOrganizationService.listByMap(params); QueryWrapper queryWrapper = new QueryWrapper(); List roleIdList = user.getRoles().stream().map(e -> e.getId()).collect(Collectors.toList()); queryWrapper.in("role_id", roleIdList); List list = baseMapper.selectList(queryWrapper); List collect = list.stream().map(e -> e.getOrgId()).collect(Collectors.toList()); List> treeData = getTreeData(Long.valueOf("-1"), sysOrganizations, collect); return ResultBody.ok().data(treeData); } /** * 将数据 封装成 tree (递归方式) * * @param MyId * @param sysOrganizations * @return */ public List> getTreeData(Long MyId, List sysOrganizations, List col) { List> listMap = new ArrayList<>(); Map collect = sysOrganizations.stream().collect(Collectors.toMap(SysOrganization::getId, SysOrganization -> SysOrganization)); List idList = sysOrganizations.stream().filter(e -> e.getOrgParentId() == MyId).map(e -> e.getId()).collect(Collectors.toList()); for (Long id : idList ) { Map map = new HashMap<>(); map.put("id", "" + id); map.put("name", collect.get(id).getOrgName()); map.put("level", collect.get(id).getOrgLevel()); map.put("checked", col.contains(id)); List childs = sysOrganizations.stream().filter(e -> e.getOrgParentId() == id).map(e -> e.getId()).collect(Collectors.toList()); if (childs.size() > 0) { List> treeData = getTreeData(id, sysOrganizations, col); map.put("children", treeData); } listMap.add(map); } return listMap; } /** * 将权限 分装到map对像 * @param params * @param user */ public void getRoleOrg(Map params, SysUser user){ List roles = user.getRoles(); List>> listroleOrg=new ArrayList<>(); if (!roles.isEmpty()) { roles.forEach(e->{ Map> rolemap=new HashMap<>(); Map map=new HashMap<>(); map.put("role_id",e.getId()); List sysRoleOrganizations = baseMapper.selectByMap(map); if(sysRoleOrganizations.size()>0){ SysRole sysRole = sysRoleMapper.selectById(e.getId()); rolemap.put(sysRole.getType(),sysRoleOrganizations); listroleOrg.add(rolemap); } }); } //添加权限控制 params.put("roleOrg",listroleOrg); } @Override public Map getRoleOrgMap(SysUser user) { Map map=new HashMap<>(); getRoleOrg(map,user); return map; } }