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/config/shiro/ShiroRealm.java                             |    7 
 server/service/src/main/java/com/doumee/service/business/impl/CompanyDepartmentServiceImpl.java  |  216 ++++++++++++++++++
 server/service/src/main/resources/mappers/SystemDataPermissionMapper.xml                         |   27 ++
 server/service/src/main/java/com/doumee/core/model/LoginUserInfo.java                            |    1 
 server/service/src/main/java/com/doumee/dao/system/vo/DepartmentTree.java                        |  103 +++++++++
 server/service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java            |   37 +++
 server/service/src/main/java/com/doumee/service/business/third/EmailService.java                 |    1 
 server/service/src/main/java/com/doumee/dao/system/SystemDataPermissionMapper.java               |    4 
 server/service/src/main/java/com/doumee/dao/business/CompanyDepartmentMapper.java                |    3 
 server/service/src/main/java/com/doumee/service/business/CompanyDepartmentService.java           |    2 
 server/service/src/main/java/com/doumee/service/system/SystemDataPermissionService.java          |    4 
 server/service/src/main/java/com/doumee/dao/system/model/SystemDataPermission.java               |    2 
 server/service/src/main/java/com/doumee/core/utils/Constants.java                                |    8 
 server/service/src/main/java/com/doumee/dao/business/model/CompanyDepartment.java                |   32 ++
 server/service/src/main/java/com/doumee/dao/system/model/SystemUser.java                         |   11 
 server/service/src/main/java/com/doumee/service/system/impl/SystemDataPermissionServiceImpl.java |  145 +++++++++++++
 16 files changed, 580 insertions(+), 23 deletions(-)

diff --git a/server/service/src/main/java/com/doumee/config/shiro/ShiroRealm.java b/server/service/src/main/java/com/doumee/config/shiro/ShiroRealm.java
index bab1c58..111f58a 100644
--- a/server/service/src/main/java/com/doumee/config/shiro/ShiroRealm.java
+++ b/server/service/src/main/java/com/doumee/config/shiro/ShiroRealm.java
@@ -6,6 +6,7 @@
 import com.doumee.core.utils.Constants;
 import com.doumee.dao.business.model.Company;
 import com.doumee.dao.business.model.CompanyPermission;
+import com.doumee.dao.system.model.SystemDataPermission;
 import com.doumee.dao.system.model.SystemPermission;
 import com.doumee.dao.system.model.SystemRole;
 import com.doumee.dao.system.model.SystemUser;
@@ -140,6 +141,12 @@
                 permissions =  systemPermissionService.findByUserId(user.getId());
             }
         }
+
+        SystemRole rt = new SystemRole();
+        rt.setDeleted(Boolean.FALSE);
+        //鏁版嵁閮ㄩ棬鏉冮檺闆嗗悎
+        user.setDepartIdList(systemDataPermissionService.selectHighRole(new SystemDataPermission(),rt,user));
+
         LoginUserInfo userInfo = LoginUserInfo.from(user, roles, permissions);
         // 楠岃瘉鐢ㄦ埛
         return new SimpleAuthenticationInfo(userInfo, user.getPassword(), this.getName());
diff --git a/server/service/src/main/java/com/doumee/core/model/LoginUserInfo.java b/server/service/src/main/java/com/doumee/core/model/LoginUserInfo.java
index 54bd7f9..c79f12d 100644
--- a/server/service/src/main/java/com/doumee/core/model/LoginUserInfo.java
+++ b/server/service/src/main/java/com/doumee/core/model/LoginUserInfo.java
@@ -46,6 +46,7 @@
 
     private List<String> permissions;
     private List<Integer> companyIdList;
+    private List<Integer> departIdList;
 
     public static LoginUserInfo from(SystemUser user, List<SystemRole> roles, List<SystemPermission> permissions ) {
         if (user == null) {
diff --git a/server/service/src/main/java/com/doumee/core/utils/Constants.java b/server/service/src/main/java/com/doumee/core/utils/Constants.java
index 43beff2..ddec2d9 100644
--- a/server/service/src/main/java/com/doumee/core/utils/Constants.java
+++ b/server/service/src/main/java/com/doumee/core/utils/Constants.java
@@ -122,6 +122,14 @@
         }
 
     }
+    public interface DATAPERMISSION_TYPE{
+        public static final  int all = 0;
+        public static final  int departAndChild = 1;
+        public static final  int departAndLeaf = 2;
+        public static final  int depart = 3;
+        public static final  int custom = 4;
+        public static final  int self = -1;
+    }
 
     /**
      * 鑾峰彇鎵规敼鍗曟椂闂存爣棰樺垪
diff --git a/server/service/src/main/java/com/doumee/dao/business/CompanyDepartmentMapper.java b/server/service/src/main/java/com/doumee/dao/business/CompanyDepartmentMapper.java
index c4ac657..1636d14 100644
--- a/server/service/src/main/java/com/doumee/dao/business/CompanyDepartmentMapper.java
+++ b/server/service/src/main/java/com/doumee/dao/business/CompanyDepartmentMapper.java
@@ -2,11 +2,12 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.doumee.dao.business.model.CompanyDepartment;
+import com.github.yulichang.base.MPJBaseMapper;
 
 /**
  * @author 姹熻箘韫�
  * @date 2024/10/28 19:16
  */
-public interface CompanyDepartmentMapper extends BaseMapper<CompanyDepartment> {
+public interface CompanyDepartmentMapper extends MPJBaseMapper<CompanyDepartment> {
 
 }
diff --git a/server/service/src/main/java/com/doumee/dao/business/model/CompanyDepartment.java b/server/service/src/main/java/com/doumee/dao/business/model/CompanyDepartment.java
index 833c2ab..cba61b8 100644
--- a/server/service/src/main/java/com/doumee/dao/business/model/CompanyDepartment.java
+++ b/server/service/src/main/java/com/doumee/dao/business/model/CompanyDepartment.java
@@ -1,5 +1,6 @@
 package com.doumee.dao.business.model;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.doumee.core.annotation.excel.ExcelColumn;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -9,6 +10,7 @@
 import lombok.Data;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 浼佷笟淇℃伅琛�
@@ -16,7 +18,7 @@
  * @date 2024/10/28 19:16
  */
 @Data
-@ApiModel("浼佷笟淇℃伅琛�")
+@ApiModel("缁勭粐淇℃伅琛�")
 @TableName("`company_department`")
 public class CompanyDepartment {
 
@@ -67,8 +69,8 @@
     @ExcelColumn(name="鍥炬爣")
     private String imgurl;
 
-    @ApiModelProperty(value = "绫诲瀷 0鍔冲姟鍏徃 1鍐呴儴缁勭粐", example = "1")
-    @ExcelColumn(name="绫诲瀷 0鍔冲姟鍏徃 1鍐呴儴缁勭粐")
+    @ApiModelProperty(value = "绫诲瀷 0骞冲彴缁勭粐 1浼佷笟缁勭粐 2鍟嗘埛缁勭粐", example = "1")
+    @ExcelColumn(name="绫诲瀷 0骞冲彴缁勭粐 1浼佷笟缁勭粐 2鍟嗘埛缁勭粐")
     private Integer type;
 
     @ApiModelProperty(value = "浼佷笟浠g爜", example = "1")
@@ -77,7 +79,7 @@
 
     @ApiModelProperty(value = "涓婄骇缁勭粐缂栫爜锛堣嚜鍏宠仈锛�")
     @ExcelColumn(name="涓婄骇缁勭粐缂栫爜锛堣嚜鍏宠仈锛�")
-    private String parentId;
+    private Integer parentId;
 
     @ApiModelProperty(value = "鑱旂郴浜哄鍚�")
     @ExcelColumn(name="鑱旂郴浜哄鍚�")
@@ -101,6 +103,26 @@
 
     @ApiModelProperty(value = "鎵�灞炰紒涓氱紪鐮�")
     @ExcelColumn(name="鎵�灞炰紒涓氱紪鐮�")
-    private String companyId;
+    private Integer companyId;
 
+    @TableField(exist = false)
+    private List<CompanyDepartment> childList;
+    @ApiModelProperty(value = "璐熻矗浜哄悕瀛�")
+    @TableField(exist = false)
+    private String headName;
+    @ApiModelProperty(value = "鎿嶄綔浜哄悕瀛�")
+    @TableField(exist = false)
+    private String editorName;
+    @ApiModelProperty(value = "璐熻矗浜烘墜鏈哄彿")
+    @TableField(exist = false)
+    private String headPhone;
+    @ApiModelProperty(value = "鐖剁骇閮ㄩ棬绾у埆璺緞", example = "1")
+    @TableField(exist = false)
+    private String parentCompanyPath;
+    @ApiModelProperty(value = "鐖剁骇閮ㄩ棬鍚嶇О", example = "1")
+    @TableField(exist = false)
+    private String parentName;
+    @ApiModelProperty(value = "鐖剁骇閮ㄩ棬绾у埆绫诲瀷 0鐩稿叧鏂� 1鍐呴儴缁勭粐", example = "1")
+    @TableField(exist = false)
+    private String parentType;
 }
diff --git a/server/service/src/main/java/com/doumee/dao/system/SystemDataPermissionMapper.java b/server/service/src/main/java/com/doumee/dao/system/SystemDataPermissionMapper.java
index b3e7bfb..955e4b1 100644
--- a/server/service/src/main/java/com/doumee/dao/system/SystemDataPermissionMapper.java
+++ b/server/service/src/main/java/com/doumee/dao/system/SystemDataPermissionMapper.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.doumee.dao.system.model.SystemDataPermission;
+import com.doumee.dao.system.model.SystemRole;
 import com.doumee.dao.system.vo.SystemDataPermissionListVO;
 import org.apache.ibatis.annotations.Param;
 
@@ -21,4 +22,7 @@
      * @return List<SystemDataPermissionListVO>
      */
     List<SystemDataPermissionListVO> selectManageList(@Param("dto") SystemDataPermission dto, @Param("orderByClause") String orderByClause);
+
+    List<SystemDataPermissionListVO> selectUserList(@Param("dto") SystemDataPermission dto, @Param("role") SystemRole role, @Param("userId") Integer userId);
+
 }
diff --git a/server/service/src/main/java/com/doumee/dao/system/model/SystemDataPermission.java b/server/service/src/main/java/com/doumee/dao/system/model/SystemDataPermission.java
index a476f5d..70aad3b 100644
--- a/server/service/src/main/java/com/doumee/dao/system/model/SystemDataPermission.java
+++ b/server/service/src/main/java/com/doumee/dao/system/model/SystemDataPermission.java
@@ -38,7 +38,7 @@
 
     @ApiModelProperty(value = "鏉冮檺绫诲瀷锛�0鍏ㄩ儴锛�1鑷畾涔夛紝2浠呯敤鎴锋墍灞烇紝3鐢ㄦ埛鎵�灞炲強鍏跺瓙鏁版嵁锛�", example = "1")
     @NotNull(message = "鏉冮檺绫诲瀷涓嶈兘涓虹┖", groups = {OperaType.Create.class, OperaType.Update.class})
-    private Short type;
+    private Integer type;
 
     @ApiModelProperty(value = "鑷畾涔夋暟鎹�")
     private String customData;
diff --git a/server/service/src/main/java/com/doumee/dao/system/model/SystemUser.java b/server/service/src/main/java/com/doumee/dao/system/model/SystemUser.java
index 74ae18e..c1528c6 100644
--- a/server/service/src/main/java/com/doumee/dao/system/model/SystemUser.java
+++ b/server/service/src/main/java/com/doumee/dao/system/model/SystemUser.java
@@ -4,6 +4,7 @@
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.doumee.core.constants.OperaType;
 import com.doumee.dao.business.model.Company;
+import com.doumee.dao.business.model.CompanyDepartment;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import com.baomidou.mybatisplus.annotation.IdType;
@@ -67,6 +68,8 @@
 
     @ApiModelProperty(value = "浼佷笟缂栫爜")
     private Integer companyId;
+    @ApiModelProperty(value = "缁勭粐缂栫爜")
+    private Integer departmentId;
     @ApiModelProperty(value = "绫诲瀷 0骞冲彴鐢ㄦ埛 1浼佷笟鐢ㄦ埛 2鍟嗘埛鐢ㄦ埛")
     private Integer type;
 
@@ -105,9 +108,15 @@
     @ApiModelProperty(value = "鎵�灞炰紒涓氫俊鎭")
     @TableField(exist = false)
     private Company company;
+    @ApiModelProperty(value = "鎵�灞炵粍缁囧璞�")
+    @TableField(exist = false)
+    private CompanyDepartment department;
 
-    @ApiModelProperty(value = "鏉冮檺鍐呬紒涓氱紪鐮侀泦鍚�")
+    @ApiModelProperty(value = "骞冲彴绠$悊鍛樻潈闄愬唴浼佷笟缂栫爜闆嗗悎")
     @TableField(exist = false)
     private List<Integer> companyIdList;
+    @ApiModelProperty(value = "鏁版嵁鏉冮檺鍐呯粍缁囩紪鐮侀泦鍚�")
+    @TableField(exist = false)
+    private List<Integer> departIdList;
 
 }
diff --git a/server/service/src/main/java/com/doumee/dao/system/vo/DepartmentTree.java b/server/service/src/main/java/com/doumee/dao/system/vo/DepartmentTree.java
new file mode 100644
index 0000000..e8446bc
--- /dev/null
+++ b/server/service/src/main/java/com/doumee/dao/system/vo/DepartmentTree.java
@@ -0,0 +1,103 @@
+package com.doumee.dao.system.vo;
+
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.Company;
+import com.doumee.dao.business.model.CompanyDepartment;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2023/7/13 10:40
+ */
+public class DepartmentTree {
+
+    // 淇濆瓨鍙備笌鏋勫缓鏍戝舰鐨勬墍鏈夋暟鎹紙閫氬父鏁版嵁搴撴煡璇㈢粨鏋滐級
+    public List<CompanyDepartment> nodeList = new ArrayList<>();
+
+    public Integer origin = 0;
+
+
+    /**
+     *  鏋勯�犳柟娉�
+     *  @param nodeList 灏嗘暟鎹泦鍚堣祴鍊肩粰nodeList锛屽嵆鎵�鏈夋暟鎹綔涓烘墍鏈夎妭鐐广��
+     */
+    public DepartmentTree(List<CompanyDepartment> nodeList ){
+        this.nodeList = nodeList;
+    }
+
+
+    /**
+     *   鑾峰彇闇�鏋勫缓鐨勬墍鏈夋牴鑺傜偣锛堥《绾ц妭鐐癸級 "0"
+     *   @return 鎵�鏈夋牴鑺傜偣List闆嗗悎
+     */
+    public List<CompanyDepartment> getRootNode(){
+        // 淇濆瓨鎵�鏈夋牴鑺傜偣锛堟墍鏈夋牴鑺傜偣鐨勬暟鎹級
+        List<CompanyDepartment> rootNodeList = new ArrayList<>();
+        // treeNode锛氭煡璇㈠嚭鐨勬瘡涓�鏉℃暟鎹紙鑺傜偣锛�
+        for (CompanyDepartment treeNode : nodeList){
+            // 鍒ゆ柇褰撳墠鑺傜偣鏄惁涓烘牴鑺傜偣锛屾澶勬敞鎰忥細鑻arentId绫诲瀷鏄疭tring锛屽垯瑕侀噰鐢╡quals()鏂规硶鍒ゆ柇銆�
+            if (Objects.isNull(treeNode.getParentId()) || !notExistParentId(treeNode.getParentId())) {
+                // 鏄紝娣诲姞
+                rootNodeList.add(treeNode);
+            }
+        }
+        return rootNodeList;
+    }
+
+    private boolean notExistParentId(Integer parentId) {
+        for (CompanyDepartment treeNode : nodeList){
+            if (Constants.equalsInteger(parentId,treeNode.getId())) {
+                // 鏄�
+                return true;
+            }
+        }
+        return false;
+    }
+
+
+    /**
+     *  鏍规嵁姣忎竴涓《绾ц妭鐐癸紙鏍硅妭鐐癸級杩涜鏋勫缓鏍戝舰缁撴瀯
+     *  @return  鏋勫缓鏁存5鏍�
+     */
+    public List<CompanyDepartment> buildTree(){
+        // treeNodes锛氫繚瀛樹竴涓《绾ц妭鐐规墍鏋勫缓鍑烘潵鐨勫畬鏁存爲褰�
+        List<CompanyDepartment> treeNodes = new ArrayList<CompanyDepartment>();
+        // getRootNode()锛氳幏鍙栨墍鏈夌殑鏍硅妭鐐�
+        for (CompanyDepartment treeRootNode : getRootNode()) {
+            // 灏嗛《绾ц妭鐐硅繘琛屾瀯寤哄瓙鏍�
+            treeRootNode = buildChildTree(treeRootNode);
+            // 瀹屾垚涓�涓《绾ц妭鐐规墍鏋勫缓鐨勬爲褰紝澧炲姞杩涙潵
+            treeNodes.add(treeRootNode);
+        }
+        return treeNodes;
+    }
+
+    /**
+     *  閫掑綊-----鏋勫缓瀛愭爲褰㈢粨鏋�
+     *  @param  pNode 鏍硅妭鐐癸紙椤剁骇鑺傜偣锛�
+     *  @return 鏁存5鏍�
+     */
+    public CompanyDepartment buildChildTree(CompanyDepartment pNode){
+        List<CompanyDepartment> childTree = new ArrayList<CompanyDepartment>();
+        // nodeList锛氭墍鏈夎妭鐐归泦鍚堬紙鎵�鏈夋暟鎹級
+        for (CompanyDepartment treeNode : nodeList) {
+            // 鍒ゆ柇褰撳墠鑺傜偣鐨勭埗鑺傜偣ID鏄惁绛変簬鏍硅妭鐐圭殑ID锛屽嵆褰撳墠鑺傜偣涓哄叾涓嬬殑瀛愯妭鐐�
+                if (!Objects.isNull(treeNode.getParentId())&&treeNode.getParentId().equals(pNode.getId())) {
+                    // 鍐嶉�掑綊杩涜鍒ゆ柇褰撳墠鑺傜偣鐨勬儏鍐碉紝璋冪敤鑷韩鏂规硶
+                    childTree.add(buildChildTree(treeNode));
+                }
+        }
+        // for寰幆缁撴潫锛屽嵆鑺傜偣涓嬫病鏈変换浣曡妭鐐癸紝鏍戝舰鏋勫缓缁撴潫锛岃缃爲缁撴灉
+        pNode.setChildList(childTree);
+        return pNode;
+    }
+
+
+
+}
diff --git a/server/service/src/main/java/com/doumee/service/business/CompanyDepartmentService.java b/server/service/src/main/java/com/doumee/service/business/CompanyDepartmentService.java
index 9dc83fe..9ce3c77 100644
--- a/server/service/src/main/java/com/doumee/service/business/CompanyDepartmentService.java
+++ b/server/service/src/main/java/com/doumee/service/business/CompanyDepartmentService.java
@@ -19,7 +19,7 @@
      * @return Integer
      */
     Integer create(CompanyDepartment companyDepartment);
-
+    List<CompanyDepartment> departTree(Integer type);
     /**
      * 涓婚敭鍒犻櫎
      *
diff --git a/server/service/src/main/java/com/doumee/service/business/impl/CompanyDepartmentServiceImpl.java b/server/service/src/main/java/com/doumee/service/business/impl/CompanyDepartmentServiceImpl.java
index 86abd9d..ecff560 100644
--- a/server/service/src/main/java/com/doumee/service/business/impl/CompanyDepartmentServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/business/impl/CompanyDepartmentServiceImpl.java
@@ -1,20 +1,35 @@
 package com.doumee.service.business.impl;
 
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
+import com.doumee.core.model.LoginUserInfo;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.Utils;
 import com.doumee.dao.business.CompanyDepartmentMapper;
+import com.doumee.dao.business.model.Company;
 import com.doumee.dao.business.model.CompanyDepartment;
+import com.doumee.dao.business.model.Member;
+import com.doumee.dao.system.SystemUserMapper;
+import com.doumee.dao.system.model.SystemUser;
+import com.doumee.dao.system.vo.DepartmentTree;
 import com.doumee.service.business.CompanyDepartmentService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.shiro.SecurityUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
+import java.util.Date;
 import java.util.List;
+import java.util.UUID;
 
 /**
  * 浼佷笟淇℃伅琛⊿ervice瀹炵幇
@@ -26,22 +41,161 @@
 
     @Autowired
     private CompanyDepartmentMapper companyDepartmentMapper;
-
+    @Autowired
+    private SystemUserMapper systemUserMapper;
     @Override
-    public Integer create(CompanyDepartment companyDepartment) {
-        companyDepartmentMapper.insert(companyDepartment);
-        return companyDepartment.getId();
+    public  List<CompanyDepartment> departTree(Integer type){
+        MPJLambdaWrapper<CompanyDepartment> queryWrapper = new MPJLambdaWrapper<>();
+        queryWrapper.selectAll(Company.class);
+        queryWrapper.select("t2.realname",CompanyDepartment::getEditorName);
+        queryWrapper.select("t2.realname",CompanyDepartment::getHeadName);
+        queryWrapper.select("t2.mobile",CompanyDepartment::getHeadPhone);
+        queryWrapper.select("t1.name",CompanyDepartment::getParentName);
+        queryWrapper.select("t1.name_path",CompanyDepartment::getParentCompanyPath);
+        queryWrapper.select("t1.type",CompanyDepartment::getParentType);
+        queryWrapper.leftJoin(CompanyDepartment.class,CompanyDepartment::getId,CompanyDepartment::getParentId);
+        queryWrapper.leftJoin(SystemUser.class,SystemUser::getId,CompanyDepartment::getHeadId);
+        queryWrapper.leftJoin(SystemUser.class,SystemUser::getId,CompanyDepartment::getEditor);
+        queryWrapper.eq(CompanyDepartment::getIsdeleted,Constants.ZERO);
+        queryWrapper.eq(type!=null,CompanyDepartment::getType,type);
+        queryWrapper.orderByAsc(true,"t.sortnum");
+        List<CompanyDepartment> companyList = companyDepartmentMapper.selectJoinList(CompanyDepartment.class,queryWrapper);
+        DepartmentTree treeBuild = new DepartmentTree(companyList);
+        companyList = treeBuild.buildTree();
+        return companyList;
+    }
+    @Override
+    public Integer create(CompanyDepartment company) {
+
+        LoginUserInfo user = (LoginUserInfo)SecurityUtils.getSubject().getPrincipal();
+        if(StringUtils.isBlank(company.getName())){
+            throw  new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        if(company.getType()==null || !(company.getType() ==0 || company.getType() ==1)){
+            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "瀵逛笉璧凤紝缁勭粐绫诲瀷涓嶆纭紝璇锋寜瑕佹眰濉啓~");
+        }
+        int type = Constants.ZERO;//榛樿骞冲彴缁勭粐
+        if(Constants.equalsInteger(user.getType(),Constants.UserType.COMPANY.getKey())){
+            //濡傛灉浼佷笟鐢ㄦ埛
+            type  = Constants.ONE;
+        }else if(Constants.equalsInteger(user.getType(),Constants.UserType.ZHUBO.getKey())){
+            //濡傛灉鏄晢鎴�
+            type  = Constants.TWO;
+        }
+        //鏌ヨ鍚嶇О涓嶈兘閲嶅
+        if(companyDepartmentMapper.selectCount(new QueryWrapper<CompanyDepartment>().lambda()
+                .eq(CompanyDepartment::getName,company.getName())
+                .eq(CompanyDepartment::getType,type)
+                .eq(CompanyDepartment::getIsdeleted, Constants.ZERO)) >0){
+            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "瀵逛笉璧凤紝缁勭粐鍚嶇О涓嶈兘閲嶅~");
+        }
+        company.setCompanyId(user.getCompanyId());//鎵�灞炰紒涓氱紪鐮�
+        company.setIdPath(company.getId()+"/");//鍚嶇О璺緞
+        company.setNamePath(company.getName());//鍚嶇О璺緞
+        String idPath = "";
+        if(company.getParentId() !=null){
+            CompanyDepartment parent = findById(company.getParentId());
+            if(parent == null || Constants.equalsInteger(parent.getIsdeleted(),Constants.ONE)
+                    || !Constants.equalsInteger(parent.getType(),type)){
+                throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "瀵逛笉璧凤紝鐖剁骇缁勭粐淇℃伅涓嶅瓨鍦▇");
+            }
+            idPath = parent.getIdPath();
+            company.setIdPath(parent.getIdPath()+company.getId()+"/");
+            company.setNamePath(parent.getNamePath()+"/"+company.getName());
+        }
+        company.setCreateDate(new Date());
+        company.setCreator(user.getId());
+        company.setIsdeleted(Constants.ZERO);
+        company.setStatus(Constants.ZERO);
+        company.setSortnum(0);//榛樿鏈�涓婇潰
+        company.setEditDate(company.getCreateDate());
+        company.setEditor(company.getCreator());
+        companyDepartmentMapper.insert(company);
+        //涓嬪彂娴峰悍瀹夐槻骞冲彴
+
+        CompanyDepartment com = new CompanyDepartment();
+        com.setId(company.getId());
+        com.setIdPath(idPath+company.getId()+"/");
+        companyDepartmentMapper.updateById(com);
+        return company.getId();
     }
 
     @Override
     public void deleteById(Integer id) {
-        companyDepartmentMapper.deleteById(id);
+        LoginUserInfo user = (LoginUserInfo)SecurityUtils.getSubject().getPrincipal();
+
+        int type = Constants.ZERO;//榛樿骞冲彴缁勭粐
+        if(Constants.equalsInteger(user.getType(),Constants.UserType.COMPANY.getKey())){
+            //濡傛灉浼佷笟鐢ㄦ埛
+            type  = Constants.ONE;
+        }else if(Constants.equalsInteger(user.getType(),Constants.UserType.ZHUBO.getKey())){
+            //濡傛灉鏄晢鎴�
+            type  = Constants.TWO;
+        }
+        CompanyDepartment model = findById(id);
+        if(model == null || Constants.equalsInteger(model.getIsdeleted(),Constants.ONE)
+                || !Constants.equalsInteger(model.getType(),type)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "瀵逛笉璧凤紝璇ョ粍缁囦俊鎭笉瀛樺湪锛�");
+        }
+
+        if(companyDepartmentMapper.selectCount(new QueryWrapper<CompanyDepartment>().lambda()
+                .eq(CompanyDepartment::getParentId,id)
+                .eq(CompanyDepartment::getType,type)
+                .eq(CompanyDepartment::getIsdeleted, Constants.ZERO)) >0){
+            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "瀵逛笉璧凤紝璇ョ粍缁囧瓨鍦ㄤ笅绾х粍缁囷紝鏃犳硶杩涜璇ユ搷浣滐紒");
+        }
+        if(systemUserMapper.selectCount(new QueryWrapper<SystemUser>().lambda()
+                .eq(SystemUser::getDepartmentId,id)
+                .eq(SystemUser::getType,type)
+                .eq(SystemUser::getDeleted, Boolean.FALSE)) >0){
+            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "瀵逛笉璧凤紝璇ョ粍缁囦笅瀛樺湪鐢ㄦ埛淇℃伅锛屾棤娉曡繘琛岃鎿嶄綔锛�");
+        }
+
+        companyDepartmentMapper.update(null, new UpdateWrapper<CompanyDepartment>().lambda()
+                .eq(CompanyDepartment::getId,id)
+                .set(CompanyDepartment::getIsdeleted,Constants.ONE)
+                .set(CompanyDepartment::getEditor,user.getId())
+                .set(CompanyDepartment::getEditDate,new Date())
+        );
     }
 
     @Override
     public void delete(CompanyDepartment companyDepartment) {
-        UpdateWrapper<CompanyDepartment> deleteWrapper = new UpdateWrapper<>(companyDepartment);
-        companyDepartmentMapper.delete(deleteWrapper);
+        LoginUserInfo user = (LoginUserInfo)SecurityUtils.getSubject().getPrincipal();
+
+        int type = Constants.ZERO;//榛樿骞冲彴缁勭粐
+        if(Constants.equalsInteger(user.getType(),Constants.UserType.COMPANY.getKey())){
+            //濡傛灉浼佷笟鐢ㄦ埛
+            type  = Constants.ONE;
+        }else if(Constants.equalsInteger(user.getType(),Constants.UserType.ZHUBO.getKey())){
+            //濡傛灉鏄晢鎴�
+            type  = Constants.TWO;
+        }
+        CompanyDepartment model = findById(companyDepartment.getId());
+        if(model == null || Constants.equalsInteger(model.getIsdeleted(),Constants.ONE)
+                || !Constants.equalsInteger(model.getType(),type)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "瀵逛笉璧凤紝璇ョ粍缁囦俊鎭笉瀛樺湪锛�");
+        }
+
+        if(companyDepartmentMapper.selectCount(new QueryWrapper<CompanyDepartment>().lambda()
+                .eq(CompanyDepartment::getParentId,companyDepartment.getId())
+                .eq(CompanyDepartment::getType,type)
+                .eq(CompanyDepartment::getIsdeleted, Constants.ZERO)) >0){
+            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "瀵逛笉璧凤紝璇ョ粍缁囧瓨鍦ㄤ笅绾х粍缁囷紝鏃犳硶杩涜璇ユ搷浣滐紒");
+        }
+        if(systemUserMapper.selectCount(new QueryWrapper<SystemUser>().lambda()
+                .eq(SystemUser::getDepartmentId,companyDepartment.getId())
+                .eq(SystemUser::getType,type)
+                .eq(SystemUser::getDeleted, Boolean.FALSE)) >0){
+            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "瀵逛笉璧凤紝璇ョ粍缁囦笅瀛樺湪鐢ㄦ埛淇℃伅锛屾棤娉曡繘琛岃鎿嶄綔锛�");
+        }
+
+        companyDepartmentMapper.update(null, new UpdateWrapper<CompanyDepartment>().lambda()
+                .eq(CompanyDepartment::getId,companyDepartment.getId())
+                .set(CompanyDepartment::getIsdeleted,Constants.ONE)
+                .set(CompanyDepartment::getEditor,user.getId())
+                .set(CompanyDepartment::getEditDate,new Date())
+        );
     }
 
     @Override
@@ -49,12 +203,54 @@
         if (CollectionUtils.isEmpty(ids)) {
             return;
         }
-        companyDepartmentMapper.deleteBatchIds(ids);
+        for(Integer id :ids){
+            deleteById(id);
+        }
     }
 
     @Override
-    public void updateById(CompanyDepartment companyDepartment) {
-        companyDepartmentMapper.updateById(companyDepartment);
+    public void updateById(CompanyDepartment company) {
+
+        if(company.getId() == null|| StringUtils.isBlank(company.getName())){
+            throw  new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        if(company.getType()!=null && !(company.getType() ==0 || company.getType() ==1)){
+            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "瀵逛笉璧凤紝缁勭粐绫诲瀷涓嶆纭紝璇锋寜瑕佹眰濉啓~");
+        }
+        LoginUserInfo user = (LoginUserInfo)SecurityUtils.getSubject().getPrincipal();
+
+        int type = Constants.ZERO;//榛樿骞冲彴缁勭粐
+        if(Constants.equalsInteger(user.getType(),Constants.UserType.COMPANY.getKey())){
+            //濡傛灉浼佷笟鐢ㄦ埛
+            type  = Constants.ONE;
+        }else if(Constants.equalsInteger(user.getType(),Constants.UserType.ZHUBO.getKey())){
+            //濡傛灉鏄晢鎴�
+            type  = Constants.TWO;
+        }
+        CompanyDepartment  model = findById(company.getId());
+        if(model == null || Constants.equalsInteger(model.getIsdeleted(),Constants.ONE)
+                || !Constants.equalsInteger(model.getType(),type)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "瀵逛笉璧凤紝璇ョ粍缁囦俊鎭笉瀛樺湪锛�");
+        }
+        //鏌ヨ鍚嶇О涓嶈兘閲嶅
+        if(companyDepartmentMapper.selectCount(new QueryWrapper<CompanyDepartment>().lambda()
+                .eq(CompanyDepartment::getName,company.getName())
+                .eq(CompanyDepartment::getType,type)
+                .ne(CompanyDepartment::getId,company.getId())
+                .eq(CompanyDepartment::getIsdeleted,Constants.ZERO)) >0){
+            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "瀵逛笉璧凤紝缁勭粐鍚嶇О涓嶈兘閲嶅~");
+        }
+        company.setEditDate(new Date());
+        company.setEditor(user.getId());
+        company.setParentId(null);//涓嶆敮鎸佷慨鏀圭埗绾�
+        companyDepartmentMapper.updateById(company);
+        //鏇存柊鐨刢ompanyPath
+        String newName = model.getNamePath().replace(model.getName(),company.getName());
+        companyDepartmentMapper.update(null,new UpdateWrapper<CompanyDepartment>().lambda()
+                .setSql("company_name_path=REPLACE(name_path,'"+ model.getNamePath()+"','"+newName+"')")
+                .likeRight(CompanyDepartment::getIdPath,model.getIdPath()));
+
+
     }
 
     @Override
diff --git a/server/service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java b/server/service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java
index 549104a..92e1944 100644
--- a/server/service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java
@@ -28,6 +28,7 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Indexed;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
@@ -53,6 +54,8 @@
     private boolean debugModel;
     @Autowired
     private CompanyMapper companyMapper;
+    @Autowired
+    private CompanyDepartmentMapper companyDepartmentMapper;
     @Autowired
     private SystemUserMapper systemUserMapper;
     @Autowired
@@ -93,14 +96,37 @@
         companyMapper.insert(company);
         company.setEditDate(company.getCreateDate());
         company.setEditor(user.getId());
+        //鏂板缓榛樿缁勭粐
+        CompanyDepartment department = createDefaultDepart(company);
         //澶勭悊鐧婚檰璐﹀彿淇℃伅
-        dealSystemUserData(company);
+        SystemUser sysuser = dealSystemUserData(company,department.getId());
         //澶勭悊闄勪欢淇℃伅
         dealFileData(company);
         //澶勭悊鍏宠仈鏂规
         dealSolutionsData(company);
         return company;
     }
+
+    private CompanyDepartment createDefaultDepart(Company company) {
+        CompanyDepartment depart = new CompanyDepartment();
+        depart.setCompanyId(company.getId());
+        depart.setCreator(company.getCreator());
+        depart.setCreateDate(company.getCreateDate());
+        depart.setType(Constants.equalsInteger(company.getType(),Constants.ZERO)?Constants.ONE:Constants.TWO);
+        depart.setName(company.getName());
+        depart.setIsdeleted(Constants.ZERO);
+        depart.setNamePath(company.getName());
+        depart.setStatus(Constants.ZERO);
+        depart.setRemark("榛樿鏍圭粍缁�");
+        companyDepartmentMapper.insert(depart);
+
+        depart.setIdPath(company.getId()+"/");
+        companyDepartmentMapper.updateById(depart);//鏇存柊璺緞
+
+        return depart;
+
+    }
+
     @Override
     @Transactional
     public Company createShop(Company company) {
@@ -122,14 +148,17 @@
         company.setSignStatus(Constants.ZERO);
         company.setSignIdStatus(Constants.ZERO);
         companyMapper.insert(company);
+
         company.setEditDate(company.getCreateDate());
         company.setEditor(user.getId());
         //澶勭悊鐧婚檰璐﹀彿淇℃伅
-        dealSystemUserData(company);
+        dealSystemUserData(company,createDefaultDepart(company).getId());
         //澶勭悊闄勪欢淇℃伅
         dealFileData(company);
         return company;
     }
+
+
     @Override
     @Transactional
     public void  updateSolutions(Company company) {
@@ -190,7 +219,7 @@
         }
     }
 
-    private void dealSystemUserData(Company company) {
+    private SystemUser dealSystemUserData(Company company, Integer departId) {
         if(systemUserMapper.selectCount(new QueryWrapper<SystemUser>().lambda()
                 .eq(SystemUser::getDeleted,Boolean.TRUE)
                 .eq(SystemUser::getUsername,company.getUsername()))>0){
@@ -216,9 +245,11 @@
         user.setRealname(company.getLegalName());
         user.setMobile(company.getPhone());
         user.setCreateUser(company.getCreator());
+        user.setDepartmentId(departId);
         user.setCreateTime(company.getCreateDate());
         user.setStatus(Constants.ZERO);
         systemUserMapper.insert(user);
+        return user;
     }
     private void dealSystemUserDataForUpdate (Company company,String oldUserName) {
         if(systemUserMapper.selectCount(new QueryWrapper<SystemUser>().lambda()
diff --git a/server/service/src/main/java/com/doumee/service/business/third/EmailService.java b/server/service/src/main/java/com/doumee/service/business/third/EmailService.java
index 25ba032..e1f742a 100644
--- a/server/service/src/main/java/com/doumee/service/business/third/EmailService.java
+++ b/server/service/src/main/java/com/doumee/service/business/third/EmailService.java
@@ -30,6 +30,7 @@
 
                 helper.setTo(toEmail);
                 helper.setFrom(fromEmail);
+
                 helper.setSubject(title);
                 helper.setText(content);
                 if(fileList!=null){
diff --git a/server/service/src/main/java/com/doumee/service/system/SystemDataPermissionService.java b/server/service/src/main/java/com/doumee/service/system/SystemDataPermissionService.java
index d05ec2a..821faa7 100644
--- a/server/service/src/main/java/com/doumee/service/system/SystemDataPermissionService.java
+++ b/server/service/src/main/java/com/doumee/service/system/SystemDataPermissionService.java
@@ -3,6 +3,8 @@
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 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 java.util.List;
@@ -105,4 +107,6 @@
      * @return long
      */
     long count(SystemDataPermission systemDataPermission);
+
+    List<Integer> selectHighRole(SystemDataPermission systemDataPermission, SystemRole rt, SystemUser user);
 }
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;
+    }
 }
diff --git a/server/service/src/main/resources/mappers/SystemDataPermissionMapper.xml b/server/service/src/main/resources/mappers/SystemDataPermissionMapper.xml
index 13f821f..3e84dba 100644
--- a/server/service/src/main/resources/mappers/SystemDataPermissionMapper.xml
+++ b/server/service/src/main/resources/mappers/SystemDataPermissionMapper.xml
@@ -43,5 +43,30 @@
     </where>
     ${orderByClause}
   </select>
-
+  <select id="selectUserList" resultMap="SystemDataPermissionListVO">
+    SELECT
+    sdp.`ID`, sdp.`BUSINESS_CODE`, sdp.`ROLE_ID`, sdp.`TYPE`, sdp.`CUSTOM_DATA`, sdp.`DISABLED`, sdp.`REMARK`, sdp.DISABLED, sdp.`CREATE_TIME`, sdp.`UPDATE_TIME`,
+    role.`ID` AS ROLE_ID, role.`CODE` AS ROLE_CODE, role.`NAME` AS ROLE_NAME,
+    create_user.ID CREATE_USER_ID, create_user.`USERNAME` CREATE_USER_NAME,
+    update_user.ID UPDETE_USER_ID, update_user.`USERNAME` UPDATE_USER_NAME
+    FROM SYSTEM_DATA_PERMISSION sdp
+    INNER JOIN `SYSTEM_ROLE` role ON role.ID = sdp.ROLE_ID
+    LEFT JOIN `SYSTEM_USER` create_user ON create_user.ID = sdp.CREATE_USER
+    LEFT JOIN `SYSTEM_USER` update_user ON update_user.ID = sdp.UPDATE_USER
+    <where>
+      sdp.DELETED = 0
+      <if test="dto.businessCode != null and dto.businessCode != ''">
+        AND sdp.`BUSINESS_CODE` = #{dto.businessCode}
+      </if>
+      <if test="dto.roleId != null">
+        AND role.`ID` =  #{dto.roleId}
+      </if>
+      <if test="dto.type != null">
+        AND sdp.`TYPE` =  #{dto.type}
+      </if>
+      <if test="userId != null">
+        AND exists (select sr.id from system_user_role sr where sr.role_id=sdp.role_id and sr.user_id=#{userId} and sr.deleted=0)
+      </if>
+    </where>
+  </select>
 </mapper>

--
Gitblit v1.9.3