|  |  |  | 
|---|
|  |  |  | package com.doumee.service.system.impl; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import com.baomidou.mybatisplus.core.conditions.Wrapper; | 
|---|
|  |  |  | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | 
|---|
|  |  |  | import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; | 
|---|
|  |  |  | import com.doumee.core.model.PageData; | 
|---|
|  |  |  | import com.doumee.core.model.PageWrap; | 
|---|
|  |  |  | import com.doumee.core.utils.Constants; | 
|---|
|  |  |  | import com.doumee.dao.business.dao.CompanyMapper; | 
|---|
|  |  |  | import com.doumee.dao.business.model.Company; | 
|---|
|  |  |  | import com.doumee.dao.system.SystemDataPermissionMapper; | 
|---|
|  |  |  | import com.doumee.dao.system.SystemRoleMapper; | 
|---|
|  |  |  | import com.doumee.dao.system.model.SystemDataPermission; | 
|---|
|  |  |  | import com.doumee.dao.system.model.SystemRole; | 
|---|
|  |  |  | import com.doumee.dao.system.model.SystemUser; | 
|---|
|  |  |  | import com.doumee.dao.system.vo.SystemDataPermissionListVO; | 
|---|
|  |  |  | import com.doumee.service.system.SystemDataPermissionService; | 
|---|
|  |  |  | import com.baomidou.mybatisplus.core.conditions.Wrapper; | 
|---|
|  |  |  | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | 
|---|
|  |  |  | import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; | 
|---|
|  |  |  | import com.github.pagehelper.PageHelper; | 
|---|
|  |  |  | import com.github.pagehelper.PageInfo; | 
|---|
|  |  |  | import org.apache.commons.lang3.StringUtils; | 
|---|
|  |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
|---|
|  |  |  | import org.springframework.stereotype.Service; | 
|---|
|  |  |  | import org.springframework.util.CollectionUtils; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import java.util.ArrayList; | 
|---|
|  |  |  | import java.util.Arrays; | 
|---|
|  |  |  | import java.util.Collections; | 
|---|
|  |  |  | import java.util.List; | 
|---|
|  |  |  | import java.util.stream.Collectors; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 数据权限配置Service实现 | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private SystemRoleMapper systemRoleMapper; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private CompanyMapper companyMapper; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public Integer create(SystemDataPermission systemDataPermission) { | 
|---|
|  |  |  | 
|---|
|  |  |  | Wrapper<SystemDataPermission> wrapper = new QueryWrapper<>(systemDataPermission); | 
|---|
|  |  |  | return systemDataPermissionMapper.selectCount(wrapper); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public SystemDataPermission findByRoleId(SystemDataPermission pageWrap){ | 
|---|
|  |  |  | if ( pageWrap.getRoleId() == null) { | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 查询数据权限 | 
|---|
|  |  |  | QueryWrapper<SystemDataPermission> queryWrapper = new QueryWrapper<>(); | 
|---|
|  |  |  | queryWrapper.lambda() | 
|---|
|  |  |  | .eq(SystemDataPermission::getBusinessCode, "DEPARTMENT") | 
|---|
|  |  |  | .eq(SystemDataPermission::getRoleId, pageWrap.getRoleId()) | 
|---|
|  |  |  | .eq(SystemDataPermission::getDeleted, Boolean.FALSE) | 
|---|
|  |  |  | .eq(SystemDataPermission::getDisabled, Boolean.FALSE); | 
|---|
|  |  |  | List<SystemDataPermission> result = systemDataPermissionMapper.selectList(queryWrapper); | 
|---|
|  |  |  | if(result!=null && result.size()>0){ | 
|---|
|  |  |  | return result.get(0); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return  null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public List<Integer> selectHighRole(SystemDataPermission model, SystemRole role, SystemUser user) { | 
|---|
|  |  |  | List<SystemDataPermissionListVO>list =   systemDataPermissionMapper.selectUserList(model,role,user.getId()) ; | 
|---|
|  |  |  | if(list !=null){ | 
|---|
|  |  |  | boolean all = false; | 
|---|
|  |  |  | boolean departAndChild=false; | 
|---|
|  |  |  | boolean depart=false; | 
|---|
|  |  |  | boolean departAndLeaf=false; | 
|---|
|  |  |  | boolean custom=false; | 
|---|
|  |  |  | String c = ""; | 
|---|
|  |  |  | for(SystemDataPermissionListVO d : list){ | 
|---|
|  |  |  | if(!all && Constants.equalsInteger(d.getType(),Constants.DATAPERMISSION_TYPE.all)){ | 
|---|
|  |  |  | all =true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(!depart && Constants.equalsInteger(d.getType(),Constants.DATAPERMISSION_TYPE.depart)){ | 
|---|
|  |  |  | depart =true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(!departAndChild && Constants.equalsInteger(d.getType(),Constants.DATAPERMISSION_TYPE.departAndChild)){ | 
|---|
|  |  |  | departAndChild =true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(!departAndLeaf && Constants.equalsInteger(d.getType(),Constants.DATAPERMISSION_TYPE.departAndLeaf)){ | 
|---|
|  |  |  | departAndLeaf =true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(  Constants.equalsInteger(d.getType(),Constants.DATAPERMISSION_TYPE.custom)){ | 
|---|
|  |  |  | custom =true; | 
|---|
|  |  |  | c += StringUtils.defaultString(d.getCustomData(),""); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Company department = new Company(); | 
|---|
|  |  |  | department.setId(user.getCompanyId()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if(all){ | 
|---|
|  |  |  | return  null; | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | List<Integer> dList = new ArrayList<>(); | 
|---|
|  |  |  | dList.add(-1);//虚拟部门,排查空集合 | 
|---|
|  |  |  | if(custom) { | 
|---|
|  |  |  | //如果有自定义部门 | 
|---|
|  |  |  | String[] idStrs = c.split(","); | 
|---|
|  |  |  | for(String s :idStrs){ | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | Integer si = Integer.parseInt(s); | 
|---|
|  |  |  | if(!isExists(si,dList)){ | 
|---|
|  |  |  | dList.add(si); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(departAndLeaf){ | 
|---|
|  |  |  | if(department!= null){ | 
|---|
|  |  |  | dList.addAll(userDataPermissonList(department,true)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }else if(departAndChild){ | 
|---|
|  |  |  | if(department!= null) { | 
|---|
|  |  |  | dList.addAll(userDataPermissonList(department, false)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }else if(depart){ | 
|---|
|  |  |  | if(department!= null && !isExists(department.getId(), dList)){ | 
|---|
|  |  |  | dList.add(department.getId()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return  dList; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return new ArrayList<>(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public List<Integer> userDataPermissonList(Company depart ,boolean isleaf) { | 
|---|
|  |  |  | List<Integer> pool = new ArrayList<>(); | 
|---|
|  |  |  | List<Company> departList = companyMapper.selectList(new QueryWrapper<Company>().lambda() | 
|---|
|  |  |  | .eq(Company::getIsdeleted,Constants.ZERO ) ); | 
|---|
|  |  |  | pool.add(depart.getId()); | 
|---|
|  |  |  | this.fillDepartChildren(pool, Arrays.asList(depart.getId()),isleaf,departList); | 
|---|
|  |  |  | return pool; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private void fillDepartChildren(List<Integer> pool, List<Integer> asList, boolean isleaf, List<Company> departList) { | 
|---|
|  |  |  | List<Company> departments = getDepartListByParentIds(asList,departList); | 
|---|
|  |  |  | List<Integer> ids = departments.stream().map(Company::getId).collect(Collectors.toList()); | 
|---|
|  |  |  | if(isleaf){ | 
|---|
|  |  |  | if (ids.size() > 0) { | 
|---|
|  |  |  | pool.addAll(ids); | 
|---|
|  |  |  | this.fillDepartChildren(pool, ids,isleaf,departList); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | pool.addAll(ids); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private List<Company> getDepartListByParentIds(List<Integer> asList, List<Company> departList) { | 
|---|
|  |  |  | List<Company> list = new ArrayList<>(); | 
|---|
|  |  |  | if(asList.size()>0){ | 
|---|
|  |  |  | for(Integer id : asList){ | 
|---|
|  |  |  | list.addAll(getDepartListByParentId(id,departList)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return list; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private List<Company> getDepartListByParentId(Integer pId, List<Company> departList) { | 
|---|
|  |  |  | List<Company> list = new ArrayList<>(); | 
|---|
|  |  |  | if(departList!= null){ | 
|---|
|  |  |  | for(Company d :departList){ | 
|---|
|  |  |  | if(Constants.equalsInteger(d.getParentId(),pId)){ | 
|---|
|  |  |  | list.add(d); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return  list; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | private boolean isExists(Integer s, List<Integer> dList) { | 
|---|
|  |  |  | if(dList!=null){ | 
|---|
|  |  |  | for(Integer t : dList){ | 
|---|
|  |  |  | if(Constants.equalsInteger(s,t)){ | 
|---|
|  |  |  | return true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|