From bcd62be27acf68adb54415f75b37f5e26d65c11b Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期三, 07 五月 2025 10:34:44 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
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