package doumeemes.service.system.impl; 
 | 
  
 | 
import com.alibaba.fastjson.JSONArray; 
 | 
import doumeemes.core.model.LoginUserInfo; 
 | 
import doumeemes.core.model.PageData; 
 | 
import doumeemes.core.model.PageWrap; 
 | 
import doumeemes.core.utils.Constants; 
 | 
import doumeemes.dao.ext.vo.DepartmentExtListVO; 
 | 
import doumeemes.dao.system.SystemDataPermissionMapper; 
 | 
import doumeemes.dao.system.SystemRoleMapper; 
 | 
import doumeemes.dao.system.model.SystemDataPermission; 
 | 
import doumeemes.dao.system.model.SystemRole; 
 | 
import doumeemes.dao.system.model.SystemUser; 
 | 
import doumeemes.dao.system.vo.SystemDataPermissionListVO; 
 | 
import doumeemes.service.ext.DepartmentExtService; 
 | 
import doumeemes.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.Collections; 
 | 
import java.util.List; 
 | 
  
 | 
/** 
 | 
 * 数据权限配置Service实现 
 | 
 * @author Eva.Caesar Liu 
 | 
 * @date 2022/04/18 18:12 
 | 
 */ 
 | 
@Service 
 | 
public class SystemDataPermissionServiceImpl implements SystemDataPermissionService { 
 | 
  
 | 
    @Autowired 
 | 
    private DepartmentExtService departmentExtService; 
 | 
    @Autowired 
 | 
    private SystemDataPermissionMapper systemDataPermissionMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private SystemRoleMapper systemRoleMapper; 
 | 
  
 | 
    @Override 
 | 
    public Integer create(SystemDataPermission systemDataPermission) { 
 | 
        systemDataPermissionMapper.insert(systemDataPermission); 
 | 
        return systemDataPermission.getId(); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void deleteById(Integer id) { 
 | 
        SystemDataPermission dataPermission = new SystemDataPermission(); 
 | 
        dataPermission.setId(id); 
 | 
        dataPermission.setDeleted(Boolean.TRUE); 
 | 
        this.updateById(dataPermission); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void delete(SystemDataPermission systemDataPermission) { 
 | 
        UpdateWrapper<SystemDataPermission> deleteWrapper = new UpdateWrapper<>(systemDataPermission); 
 | 
      /*  if(systemDataPermission.getCompanyId()!=null){ 
 | 
            deleteWrapper.exists("select system_role.id from system_role where system_role.id=system_data_permission.`ROLE_ID` and system_role`COMPANY_ID`="+systemDataPermission.getCompanyId()); 
 | 
        }*/ 
 | 
        systemDataPermissionMapper.delete(deleteWrapper); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void deleteByIdInBatch(List<Integer> ids) { 
 | 
        if (CollectionUtils.isEmpty(ids)) { 
 | 
            return; 
 | 
        } 
 | 
        systemDataPermissionMapper.deleteBatchIds(ids); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void updateById(SystemDataPermission systemDataPermission) { 
 | 
        systemDataPermissionMapper.updateById(systemDataPermission); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void updateByIdInBatch(List<SystemDataPermission> systemDataPermissions) { 
 | 
        if (CollectionUtils.isEmpty(systemDataPermissions)) { 
 | 
            return; 
 | 
        } 
 | 
        for (SystemDataPermission systemDataPermission: systemDataPermissions) { 
 | 
            this.updateById(systemDataPermission); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public SystemDataPermission findById(Integer id) { 
 | 
        return systemDataPermissionMapper.selectById(id); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public SystemDataPermission findOne(SystemDataPermission systemDataPermission) { 
 | 
        Wrapper<SystemDataPermission> wrapper = new QueryWrapper<>(systemDataPermission); 
 | 
        return systemDataPermissionMapper.selectOne(wrapper); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public List<SystemDataPermission> findList(SystemDataPermission systemDataPermission) { 
 | 
        Wrapper<SystemDataPermission> wrapper = new QueryWrapper<>(systemDataPermission); 
 | 
        return systemDataPermissionMapper.selectList(wrapper); 
 | 
    } 
 | 
   
 | 
    @Override 
 | 
    public PageData<SystemDataPermissionListVO> findPage(PageWrap<SystemDataPermission> pageWrap) { 
 | 
        PageHelper.startPage(pageWrap.getPage(), pageWrap.getCapacity()); 
 | 
        return PageData.from(new PageInfo<>(systemDataPermissionMapper.selectManageList(pageWrap.getModel(), pageWrap.getOrderByClause()))); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public List<Integer> selectHighRole(SystemDataPermission model, SystemRole role, SystemUser user, DepartmentExtListVO department) { 
 | 
        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(),""); 
 | 
                } 
 | 
            } 
 | 
            if(all){ 
 | 
                return  null; 
 | 
            }else{ 
 | 
                List<Integer> dList = new ArrayList<>(); 
 | 
               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(departmentExtService.userDataPermissonList(department,true)); 
 | 
                   } 
 | 
               }else if(departAndChild){ 
 | 
                   if(department!= null) { 
 | 
                       dList.addAll(departmentExtService.userDataPermissonList(department, false)); 
 | 
                   } 
 | 
               }else if(depart){ 
 | 
                   if(department!= null && !isExists(department.getId(), dList)){ 
 | 
                       dList.add(department.getId()); 
 | 
                   } 
 | 
               } 
 | 
               return  dList; 
 | 
            } 
 | 
  
 | 
        } 
 | 
        return new ArrayList<>(); 
 | 
    } 
 | 
  
 | 
    private boolean isExists(Integer s, List<Integer> dList) { 
 | 
        if(dList!=null){ 
 | 
            for(Integer t : dList){ 
 | 
                if(Constants.equalsInteger(s,t)){ 
 | 
                    return true; 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        return false; 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public List<SystemDataPermissionListVO> selectUserList( SystemDataPermission model,SystemRole role,Integer userId) { 
 | 
        return  systemDataPermissionMapper.selectUserList(model,role,userId) ; 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public List<SystemDataPermission> findDataPermission(String businessCode, List<String> roles) { 
 | 
        if (CollectionUtils.isEmpty(roles)) { 
 | 
            return Collections.emptyList(); 
 | 
        } 
 | 
        // 查询角色 
 | 
        QueryWrapper<SystemRole> queryRoleWrapper = new QueryWrapper<>(); 
 | 
        queryRoleWrapper.lambda().in(SystemRole::getCode, roles).eq(SystemRole::getDeleted, Boolean.FALSE); 
 | 
        List<SystemRole> systemRoles = systemRoleMapper.selectList(queryRoleWrapper); 
 | 
        if (CollectionUtils.isEmpty(systemRoles)) { 
 | 
            return Collections.emptyList(); 
 | 
        } 
 | 
        List<Integer> roleIds = new ArrayList<>(); 
 | 
        for (SystemRole role : systemRoles) { 
 | 
            roleIds.add(role.getId()); 
 | 
        } 
 | 
        // 查询数据权限 
 | 
        QueryWrapper<SystemDataPermission> queryWrapper = new QueryWrapper<>(); 
 | 
        queryWrapper.lambda() 
 | 
                .eq(SystemDataPermission::getBusinessCode, businessCode) 
 | 
                .in(SystemDataPermission::getRoleId, roleIds) 
 | 
                .eq(SystemDataPermission::getDeleted, Boolean.FALSE) 
 | 
                .eq(SystemDataPermission::getDisabled, Boolean.FALSE); 
 | 
        return systemDataPermissionMapper.selectList(queryWrapper); 
 | 
    } 
 | 
    @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 long count(SystemDataPermission systemDataPermission) { 
 | 
        Wrapper<SystemDataPermission> wrapper = new QueryWrapper<>(systemDataPermission); 
 | 
        return systemDataPermissionMapper.selectCount(wrapper); 
 | 
    } 
 | 
} 
 |