From deb4575b72443cf906946a9fb28a557c16556fb9 Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期五, 01 十一月 2024 09:30:50 +0800
Subject: [PATCH] Merge branch '2.0.1' of http://139.186.142.91:10010/r/productDev/yunyibao into 2.0.1

---
 server/service/src/main/java/com/doumee/service/system/impl/SystemDataPermissionServiceImpl.java |  145 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 145 insertions(+), 0 deletions(-)

diff --git a/server/service/src/main/java/com/doumee/service/system/impl/SystemDataPermissionServiceImpl.java b/server/service/src/main/java/com/doumee/service/system/impl/SystemDataPermissionServiceImpl.java
index 89f0101..5dc73fd 100644
--- a/server/service/src/main/java/com/doumee/service/system/impl/SystemDataPermissionServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/system/impl/SystemDataPermissionServiceImpl.java
@@ -5,21 +5,29 @@
 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.CompanyDepartmentMapper;
+import com.doumee.dao.business.model.Company;
+import com.doumee.dao.business.model.CompanyDepartment;
 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.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瀹炵幇
@@ -31,6 +39,8 @@
 
     @Autowired
     private SystemDataPermissionMapper systemDataPermissionMapper;
+    @Autowired
+    private CompanyDepartmentMapper companyDepartmentMapper;
 
     @Autowired
     private SystemRoleMapper systemRoleMapper;
@@ -132,4 +142,139 @@
         Wrapper<SystemDataPermission> wrapper = new QueryWrapper<>(systemDataPermission);
         return systemDataPermissionMapper.selectCount(wrapper);
     }
+
+
+    @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(),"");
+                }
+            }
+            CompanyDepartment department = new CompanyDepartment();
+            department.setId(user.getDepartmentId());
+            department.setType(Constants.THREE);
+            if(Constants.equalsInteger(user.getType(),Constants.UserType.COMPANY.getKey())){
+                department.setType(Constants.ONE);
+            }else if(Constants.equalsInteger(user.getType(),Constants.UserType.ZHUBO.getKey())){
+                department.setType(Constants.TWO);
+            }else if(Constants.equalsInteger(user.getType(),Constants.UserType.SYSTEM.getKey())){
+                department.setType(Constants.THREE);
+            }
+
+            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(CompanyDepartment depart ,boolean isleaf) {
+        List<Integer> pool = new ArrayList<>();
+        List<CompanyDepartment> departList = companyDepartmentMapper.selectList(new QueryWrapper<CompanyDepartment>().lambda()
+                .eq(CompanyDepartment::getIsdeleted,Constants.ZERO )
+                .eq(CompanyDepartment::getType,depart.getType())
+        );
+        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<CompanyDepartment> departList) {
+        List<CompanyDepartment> departments = getDepartListByParentIds(asList,departList);
+        List<Integer> ids = departments.stream().map(CompanyDepartment::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<CompanyDepartment> getDepartListByParentIds(List<Integer> asList, List<CompanyDepartment> departList) {
+        List<CompanyDepartment> list = new ArrayList<>();
+        if(asList.size()>0){
+            for(Integer id : asList){
+                list.addAll(getDepartListByParentId(id,departList));
+            }
+        }
+        return list;
+    }
+
+
+    private List<CompanyDepartment> getDepartListByParentId(Integer pId, List<CompanyDepartment> departList) {
+        List<CompanyDepartment> list = new ArrayList<>();
+        if(departList!= null){
+            for(CompanyDepartment 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