From 7298d5354963a88643a543b51b90192dc9fc934c Mon Sep 17 00:00:00 2001 From: doum <doum> Date: 星期四, 11 九月 2025 18:43:14 +0800 Subject: [PATCH] 最新版本541200007 --- server/system_service/src/main/java/com/doumee/service/system/impl/SystemDataPermissionServiceImpl.java | 167 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 162 insertions(+), 5 deletions(-) diff --git a/server/system_service/src/main/java/com/doumee/service/system/impl/SystemDataPermissionServiceImpl.java b/server/system_service/src/main/java/com/doumee/service/system/impl/SystemDataPermissionServiceImpl.java index 6c62016..7310f72 100644 --- a/server/system_service/src/main/java/com/doumee/service/system/impl/SystemDataPermissionServiceImpl.java +++ b/server/system_service/src/main/java/com/doumee/service/system/impl/SystemDataPermissionServiceImpl.java @@ -1,25 +1,32 @@ package com.doumee.service.system.impl; -import com.doumee.core.model.PageData; -import com.doumee.core.model.PageWrap; +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.service.business.third.model.PageData; +import com.doumee.service.business.third.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瀹炵幇 @@ -34,6 +41,8 @@ @Autowired private SystemRoleMapper systemRoleMapper; + @Autowired + private CompanyMapper companyMapper; @Override public Integer create(SystemDataPermission systemDataPermission) { @@ -132,4 +141,152 @@ 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(),""); + } + + } + if(!all &&!departAndChild&& !depart && !departAndLeaf && !custom ){ + return new ArrayList<>(); + } + 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; + } } -- Gitblit v1.9.3