Bläddra i källkod

后台:角色与元素表所属方显示控制相关
客户端:合同段wbs树通过类型获取表单相关

liuyc 3 år sedan
förälder
incheckning
db1dbc5f6e
15 ändrade filer med 396 tillägg och 156 borttagningar
  1. 20 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/WbsTableOwnerRole.java
  2. 15 1
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/TreeNodeVO2.java
  3. 11 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsTableOwnerRoleVO.java
  4. 1 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsFormElementController.java
  5. 4 4
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreeContractController.java
  6. 2 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeMapper.xml
  7. 8 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeContractMapper.java
  8. 33 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeContractMapper.xml
  9. 1 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsTreeContractService.java
  10. 30 29
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java
  11. 36 2
      blade-service/blade-system/src/main/java/org/springblade/system/controller/RoleController.java
  12. 41 31
      blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleMapper.java
  13. 21 0
      blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleMapper.xml
  14. 87 81
      blade-service/blade-system/src/main/java/org/springblade/system/service/IRoleService.java
  15. 86 5
      blade-service/blade-system/src/main/java/org/springblade/system/service/impl/RoleServiceImpl.java

+ 20 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/WbsTableOwnerRole.java

@@ -0,0 +1,20 @@
+package org.springblade.manager.entity;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class WbsTableOwnerRole implements Serializable {
+
+    @ApiModelProperty(value = "主键id")
+    private Long id;
+    
+    @ApiModelProperty(value = "角色id")
+    private Long roleId;
+
+    @ApiModelProperty(value = "所属方value值")
+    private String tableOwnerNumber;
+
+}

+ 15 - 1
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/TreeNodeVO2.java

@@ -50,6 +50,8 @@ public class TreeNodeVO2 extends BaseNode<TreeNode> {
      */
     private Integer isBuiltDrawing;
 
+    private String postType;
+
     public TreeNodeVO2() {
     }
 
@@ -61,6 +63,14 @@ public class TreeNodeVO2 extends BaseNode<TreeNode> {
         this.majorDataType = majorDataType;
     }
 
+    public String getPostType() {
+        return postType;
+    }
+
+    public void setPostType(String postType) {
+        this.postType = postType;
+    }
+
     public Integer getIsStorageNode() {
         return isStorageNode;
     }
@@ -142,7 +152,11 @@ public class TreeNodeVO2 extends BaseNode<TreeNode> {
                 + ",displayHierarchy" + this.getDisplayHierarchy()
                 + ",isStorageNode" + this.getIsStorageNode()
                 + ",isDisplayTree" + this.getIsDisplayTree()
-                + ", title=" + this.getTitle() + ", key=" + this.getKey() + ", value=" + this.getValue() + ")";
+                + ",postType" + this.getPostType()
+                + ", title=" + this.getTitle()
+                + ", key=" + this.getKey()
+                + ", value=" + this.getValue()
+                + ")";
     }
 
     public boolean equals(final Object o) {

+ 11 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsTableOwnerRoleVO.java

@@ -0,0 +1,11 @@
+package org.springblade.manager.vo;
+
+import lombok.Data;
+import org.springblade.manager.entity.WbsTableOwnerRole;
+
+
+@Data
+public class WbsTableOwnerRoleVO extends WbsTableOwnerRole {
+
+
+}

+ 1 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsFormElementController.java

@@ -205,7 +205,7 @@ public class WbsFormElementController extends BladeController {
     /**
      * 提交清表关联公有Wbs树并创建元素
      */
-    @ApiOperationSupport(order = 10)
+    @ApiOperationSupport(order = 9)
     @ApiOperation(value = "提交清表关联公有Wbs树并创建元素", notes = "节点id、表名、元素DTO")
     @RequestMapping(value = "/submitExcelRelationWbsTreeAndElement", method = RequestMethod.POST)
     public R submitExcelRelationWbsTreeAndElement(@RequestBody FormElementDTO formElementDTO) {

+ 4 - 4
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreeContractController.java

@@ -34,8 +34,8 @@ public class WbsTreeContractController extends BladeController {
     @GetMapping("/searchNodeAllTable")
     @ApiOperationSupport(order = 1)
     @ApiOperation(value = "查询当前节点下所有元素表信息", notes = "传入节点primaryKeyId、type")
-    public R searchNodeAllTable(String primaryKeyId,String typeOwner) {
-        List<WbsTreeContract> list = iWbsTreeContractService.searchNodeAllTable(primaryKeyId,typeOwner);
+    public R searchNodeAllTable(String primaryKeyId, String type) {
+        List<WbsTreeContract> list = iWbsTreeContractService.searchNodeAllTable(primaryKeyId, type);
         if (list.size() > 0) {
             return R.data(list);
         }
@@ -49,8 +49,8 @@ public class WbsTreeContractController extends BladeController {
     @ApiImplicitParams(value = {
             @ApiImplicitParam(name = "primaryKeyId", value = "当前节点id", required = true),
             @ApiImplicitParam(name = "contractId", value = "合同段Id", required = true)})
-    public R searchParentAllNode(long primaryKeyId,long contractId ) {
-        List<WbsTreeContract> list = iWbsTreeContractService.searchParentAllNode(primaryKeyId,contractId);
+    public R searchParentAllNode(long primaryKeyId, long contractId) {
+        List<WbsTreeContract> list = iWbsTreeContractService.searchParentAllNode(primaryKeyId, contractId);
         if (list.size() > 0) {
             return R.data(list);
         }

+ 2 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeMapper.xml

@@ -42,6 +42,7 @@
         <result column="isDisplayTree" property="isDisplayTree"/>
         <result column="isStorageNode" property="isStorageNode"/>
         <result column="isBuiltDrawing" property="isBuiltDrawing"/>
+        <result column="postType" property="postType"/>
     </resultMap>
 
     <update id="updateBatch">
@@ -84,6 +85,7 @@
         d.major_data_type AS "majorDataType",
         d.display_hierarchy AS "displayHierarchy",
         d.is_storage_node AS "isStorageNode",
+        d.post_type AS postType,
         (SELECT CASE WHEN count(1) > 0 THEN 1 ELSE 0 END FROM m_archive_tree WHERE parent_id = d.id and is_deleted = 0)
         AS "has_children"
         FROM

+ 8 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeContractMapper.java

@@ -2,6 +2,7 @@ package org.springblade.manager.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Param;
+import org.springblade.manager.entity.WbsTableOwnerRole;
 import org.springblade.manager.entity.WbsTree;
 import org.springblade.manager.entity.WbsTreeContract;
 import org.springblade.manager.entity.WbsTreePrivate;
@@ -72,4 +73,11 @@ public interface WbsTreeContractMapper extends BaseMapper<WbsTreeContract> {
     List<WbsTreeContract> searchParentAllNode(long primaryKeyId, Long contractId);
 
     List<WbsTreeContract> updateAllNodeTabById(@Param("aPrivate") WbsTreePrivate aPrivate);
+
+    List<WbsTableOwnerRole> selectWbsTableOwnerRoleList(String roleId);
+
+    List<WbsTreeContract> selectWbsTreeContractList(List<String> tableOwnerNumbers, String projectId,
+                                                    String wbsId, String contractId,
+                                                    Long parentId, String contractIdRelation,
+                                                    List<String> tableOwnerList);
 }

+ 33 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeContractMapper.xml

@@ -432,4 +432,37 @@
         update m_wbs_tree_contract set excel_id=#{aPrivate.excelId} ,is_link_table=2 , html_url=#{aPrivate.htmlUrl} where type =2 and project_id = #{aPrivate.projectId} and id =#{aPrivate.id};
     </select>
 
+    <select id="selectWbsTableOwnerRoleList" resultType="org.springblade.manager.entity.WbsTableOwnerRole">
+        select id,role_id as "roleId",table_owner_number as "tableOwnerNumber"
+        from m_wbs_table_owner_role
+        where role_id = #{roleId}
+    </select>
+
+    <select id="selectWbsTreeContractList" resultType="org.springblade.manager.entity.WbsTreeContract">
+        SELECT * FROM
+        m_wbs_tree_contract
+        WHERE project_id = #{projectId}
+        AND wbs_id = #{wbsId}
+        AND contract_id = #{contractId}
+        AND parent_id = #{parentId}
+        AND table_owner in
+        <foreach item="tableOwnerNumbers" collection="tableOwnerNumbers" open="(" close=")" separator=",">
+            #{tableOwnerNumbers}
+        </foreach>
+        AND type = 2
+        AND status = 1
+        AND is_deleted = 0
+        <if test="contractIdRelation != null and contractIdRelation!= ''">
+            AND contract_id_relation = #{contractIdRelation}
+        </if>
+        <if test="tableOwnerList != null and tableOwnerList!= ''">
+            AND table_owner in
+            <foreach item="tableOwnerList" collection="tableOwnerList" open="(" close=")" separator=",">
+                #{tableOwnerList}
+            </foreach>
+        </if>
+        ORDER BY sort
+    </select>
+
+
 </mapper>

+ 1 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsTreeContractService.java

@@ -23,10 +23,9 @@ public interface IWbsTreeContractService extends BaseService<WbsTreeContract> {
 
     List<WbsTreeContractTreeVO> lazyTreeTwo(String contractIdRelation, Long parentId, Integer contractType, String contractId);
 
-    List<WbsTreeContract> searchNodeAllTable(String primaryKeyId,String typeOwner);
+    List<WbsTreeContract> searchNodeAllTable(String primaryKeyId,String tableOwner);
 
     List<WbsTreeContract> searchParentAllNode(long primaryKeyId,Long contractId);
 
-
     List<WbsTreeContract> updateAllNodeTabById(WbsTreePrivate aPrivate);
 }

+ 30 - 29
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java

@@ -9,8 +9,11 @@ import org.springblade.business.feign.ConstructionLedgerFeign;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.node.ForestNodeMerger;
+import org.springblade.core.tool.utils.Func;
 import org.springblade.manager.dto.WbsTreeContractDTO;
+import org.springblade.manager.entity.WbsTableOwnerRole;
 import org.springblade.manager.entity.WbsTreeContract;
 import org.springblade.manager.entity.WbsTreePrivate;
 import org.springblade.manager.mapper.WbsInfoMapper;
@@ -279,42 +282,40 @@ public class WbsTreeContractServiceImpl
     }
 
     @Override
-    public List<WbsTreeContract> searchNodeAllTable(String primaryKeyId, String typeOwner) {
+    public List<WbsTreeContract> searchNodeAllTable(String primaryKeyId, String tableOwner) {
+        //获取当前根节点
         WbsTreeContract wbsTreeContract = baseMapper.selectOne(Wrappers.<WbsTreeContract>query().lambda()
                 .eq(WbsTreeContract::getPKeyId, primaryKeyId));
-        //获取当前节点下表单
         if (wbsTreeContract == null) {
             throw new ServiceException("未查询到数据");
         }
-        if (StringUtils.isNotEmpty(wbsTreeContract.getContractIdRelation())) {
-            //监理 业主
-            if (typeOwner != null) {
-                List<WbsTreeContract> wbsTreeContracts = baseMapper.selectList(Wrappers.<WbsTreeContract>query().lambda()
-                        .eq(WbsTreeContract::getProjectId, wbsTreeContract.getProjectId())
-                        .eq(WbsTreeContract::getWbsId, wbsTreeContract.getWbsId())
-                        .eq(WbsTreeContract::getContractId, wbsTreeContract.getContractId())
-                        .eq(WbsTreeContract::getType, 2)
-                        .eq(WbsTreeContract::getParentId, wbsTreeContract.getId())
-                        .eq(WbsTreeContract::getContractIdRelation, wbsTreeContract.getContractIdRelation())
-                        .eq(WbsTreeContract::getTableOwner, typeOwner)
-                );
-                return wbsTreeContracts;
-            }
-        } else {
-            //施工
-            if (typeOwner != null) {
-                List<WbsTreeContract> wbsTreeContracts = baseMapper.selectList(Wrappers.<WbsTreeContract>query().lambda()
-                        .eq(WbsTreeContract::getProjectId, wbsTreeContract.getProjectId())
-                        .eq(WbsTreeContract::getWbsId, wbsTreeContract.getWbsId())
-                        .eq(WbsTreeContract::getContractId, wbsTreeContract.getContractId())
-                        .eq(WbsTreeContract::getType, 2)
-                        .eq(WbsTreeContract::getParentId, wbsTreeContract.getId())
-                        .eq(WbsTreeContract::getTableOwner, typeOwner)
-                );
-                return wbsTreeContracts;
+
+        //获取当前用户角色与表单所属方关系信息
+        List<WbsTableOwnerRole> wbsTableOwnerRoleList = baseMapper.selectWbsTableOwnerRoleList(AuthUtil.getUser().getRoleId());
+        if (wbsTableOwnerRoleList.size() == 0) {
+            throw new ServiceException("当前用户未授权,请先分配角色查看元素表相对应的权限");
+        }
+
+        //获取tableOwnerNumber
+        List<String> tableOwnerNumbers = wbsTableOwnerRoleList.stream().map(WbsTableOwnerRole::getTableOwnerNumber).collect(Collectors.toList());
+
+        List<String> tableOwnerList = null;
+        if (StringUtils.isNotEmpty(tableOwner)) {
+            String tableOwners = "";
+            if (tableOwner.equals("1")) { //此处加载字典owner_type 固定写死 施工质检=1 2 3
+                tableOwners = "1,2,3";
+            } else if (tableOwner.equals("2")) { //监理抽检=4 5 6
+                tableOwners = "4,5,6";
             }
+            tableOwnerList = Func.toStrList(tableOwners);
         }
-        throw new ServiceException("未查询到数据");
+
+        //获取当前节点下表单
+        List<WbsTreeContract> wbsTreeContractList = baseMapper.selectWbsTreeContractList(tableOwnerNumbers, wbsTreeContract.getProjectId(),
+                wbsTreeContract.getWbsId(), wbsTreeContract.getContractId(), wbsTreeContract.getId()
+                , wbsTreeContract.getContractIdRelation(), tableOwnerList);
+
+        return wbsTreeContractList;
     }
 
 

+ 36 - 2
blade-service/blade-system/src/main/java/org/springblade/system/controller/RoleController.java

@@ -22,6 +22,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.annotations.*;
 import lombok.AllArgsConstructor;
+import oracle.jdbc.proxy.annotation.Post;
 import org.springblade.core.boot.ctrl.BladeController;
 import org.springblade.core.cache.utils.CacheUtil;
 import org.springblade.core.mp.support.Condition;
@@ -33,6 +34,8 @@ import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.constant.BladeConstant;
 import org.springblade.core.tool.constant.RoleConstant;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.manager.entity.WbsTableOwnerRole;
+import org.springblade.manager.vo.WbsTableOwnerRoleVO;
 import org.springblade.system.cache.SysCache;
 import org.springblade.system.dto.RoleDTO;
 import org.springblade.system.entity.Role;
@@ -114,7 +117,7 @@ public class RoleController extends BladeController {
     @ApiOperation(value = "树形结构2", notes = "树形结构2")
     public R<List<RoleVO2>> treeTow() {
         //父级节点
-        List<Role> parentRole = roleService.seleteParentRole();
+        List<Role> parentRole = roleService.selectParentRole();
         List<RoleVO2> list = new ArrayList<>();
         parentRole.forEach(role -> {
             //admin
@@ -166,7 +169,6 @@ public class RoleController extends BladeController {
 
     /**
      * 删除
-     *
      */
     @PostMapping("/remove")
     @ApiOperationSupport(order = 6)
@@ -204,4 +206,36 @@ public class RoleController extends BladeController {
         return R.data(list);
     }
 
+
+    /**
+     * 保存角色绑定表单所属方关系
+     */
+    @PostMapping("/submitRoleAndTableOwner")
+    @ApiOperationSupport(order = 9)
+    @ApiOperation(value = "保存角色绑定表单所属方关系", notes = "传入角色id,tableOwners")
+    @PreAuth(AuthConstant.PERMIT_ALL)
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(value = "roleId", name = "角色id"),
+            @ApiImplicitParam(value = "tableOwners", name = "表单所属方value值=字符串拼接以 ',' 分割 "),
+            @ApiImplicitParam(value = "ids", name = "表单所属方value值的ids ',' 分割,用于删除时")
+    })
+    public R submitRoleAndTableOwner(String roleId, String tableOwners, String ids) {
+        return R.status(roleService.submitRoleAndTableOwner(roleId, tableOwners, ids));
+    }
+
+    /**
+     * 获取角色绑定的表单所属方关系List
+     */
+    @GetMapping("/searchRoleAndTableOwnerList")
+    @ApiOperationSupport(order = 10)
+    @ApiOperation(value = "获取角色绑定的表单所属方关系List", notes = "传入角色id")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(value = "roleId", name = "角色id")
+    })
+    @PreAuth(AuthConstant.PERMIT_ALL)
+    public R<List<WbsTableOwnerRole>> searchRoleAndTableOwnerList(String roleId) {
+        return R.data(roleService.searchRoleAndTableOwnerList(roleId));
+    }
+
+
 }

+ 41 - 31
blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleMapper.java

@@ -19,6 +19,8 @@ package org.springblade.system.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.apache.ibatis.annotations.Param;
+import org.springblade.manager.entity.WbsTableOwnerRole;
+import org.springblade.manager.vo.WbsTableOwnerRoleVO;
 import org.springblade.system.entity.Role;
 import org.springblade.system.vo.RoleVO;
 
@@ -31,42 +33,50 @@ import java.util.List;
  */
 public interface RoleMapper extends BaseMapper<Role> {
 
-	/**
-	 * 自定义分页
-	 *
-	 * @param page
-	 * @param role
-	 * @return
-	 */
-	List<RoleVO> selectRolePage(IPage page, RoleVO role);
+    /**
+     * 自定义分页
+     *
+     * @param page
+     * @param role
+     * @return
+     */
+    List<RoleVO> selectRolePage(IPage page, RoleVO role);
 
-	/**
-	 * 获取树形节点
-	 *
-	 * @param tenantId
-	 * @param excludeRole
-	 * @return
-	 */
-	List<RoleVO> tree(String tenantId, String excludeRole);
+    /**
+     * 获取树形节点
+     *
+     * @param tenantId
+     * @param excludeRole
+     * @return
+     */
+    List<RoleVO> tree(String tenantId, String excludeRole);
 
-	/**
-	 * 获取角色名
-	 *
-	 * @param ids
-	 * @return
-	 */
-	List<String> getRoleNames(Long[] ids);
+    /**
+     * 获取角色名
+     *
+     * @param ids
+     * @return
+     */
+    List<String> getRoleNames(Long[] ids);
 
-	/**
-	 * 获取角色名
-	 *
-	 * @param ids
-	 * @return
-	 */
-	List<String> getRoleAliases(Long[] ids);
+    /**
+     * 获取角色名
+     *
+     * @param ids
+     * @return
+     */
+    List<String> getRoleAliases(Long[] ids);
 
-    Integer bindRoleAndPost(@Param("rId") Long rId,@Param("pId") Long pId);
+    Integer bindRoleAndPost(@Param("rId") Long rId, @Param("pId") Long pId);
 
     Integer deleteRoleAndPostByRid(@Param("rId") String ids);
 
+    Integer insertRoleAndTableOwner(Long id, String roleId, String tableOwner);
+
+    Integer deleteRoleAndTableOwner(List<String> ids);
+
+    List<WbsTableOwnerRole> selectRoleAndTableOwnerListByRoleId(String roleId);
+
+    List<WbsTableOwnerRole> selectRoleAndTableOwnerList(String roleId);
+
 }

+ 21 - 0
blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleMapper.xml

@@ -23,10 +23,21 @@
         insert into m_role_post (r_id,p_id) values (#{rId},#{pId})
     </insert>
 
+    <insert id="insertRoleAndTableOwner">
+        insert into m_wbs_table_owner_role (id,role_id,table_owner_number) values ( #{id} , #{roleId} , #{tableOwner} )
+    </insert>
+
     <delete id="deleteRoleAndPostByRid">
         delete from m_role_post where r_id = #{rId}
     </delete>
 
+    <delete id="deleteRoleAndTableOwner">
+        delete from m_wbs_table_owner_role where id in
+        <foreach collection="ids" item="ids" index="ids" open="(" close=")" separator=",">
+            #{ids}
+        </foreach>
+    </delete>
+
     <select id="selectRolePage" resultMap="roleResultMap">
         select * from blade_role where is_deleted = 0
     </select>
@@ -67,4 +78,14 @@
         and is_deleted = 0
     </select>
 
+    <select id="selectRoleAndTableOwnerListByRoleId" resultType="org.springblade.manager.entity.WbsTableOwnerRole">
+        select * from m_wbs_table_owner_role where role_id = #{roleId}
+    </select>
+
+    <select id="selectRoleAndTableOwnerList" resultType="org.springblade.manager.entity.WbsTableOwnerRole">
+        select id,role_id as "roleId",table_owner_number as "tableOwnerNumber"
+        from m_wbs_table_owner_role
+        where role_id = #{roleId}
+    </select>
+
 </mapper>

+ 87 - 81
blade-service/blade-system/src/main/java/org/springblade/system/service/IRoleService.java

@@ -18,6 +18,8 @@ package org.springblade.system.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import org.springblade.manager.entity.WbsTableOwnerRole;
+import org.springblade.manager.vo.WbsTableOwnerRoleVO;
 import org.springblade.system.dto.RoleDTO;
 import org.springblade.system.entity.Role;
 import org.springblade.system.vo.RoleVO;
@@ -32,86 +34,90 @@ import java.util.List;
  */
 public interface IRoleService extends IService<Role> {
 
-	/**
-	 * 自定义分页
-	 *
-	 * @param page
-	 * @param role
-	 * @return
-	 */
-	IPage<RoleVO> selectRolePage(IPage<RoleVO> page, RoleVO role);
-
-	/**
-	 * 树形结构
-	 *
-	 * @param tenantId
-	 * @return
-	 */
-	List<RoleVO> tree(String tenantId);
-
-	/**
-	 * 权限配置
-	 *
-	 * @param roleIds      角色id集合
-	 * @param menuIds      菜单id集合
-	 * @param dataScopeIds 数据权限id集合
-	 * @param apiScopeIds  接口权限id集合
-	 * @return 是否成功
-	 */
-	boolean grant(@NotEmpty List<Long> roleIds, List<Long> menuIds, List<Long> dataScopeIds, List<Long> apiScopeIds);
-
-	/**
-	 * 获取角色ID
-	 *
-	 * @param tenantId
-	 * @param roleNames
-	 * @return
-	 */
-	String getRoleIds(String tenantId, String roleNames);
-
-	/**
-	 * 获取角色名
-	 *
-	 * @param roleIds
-	 * @return
-	 */
-	List<String> getRoleNames(String roleIds);
-
-	/**
-	 * 获取角色名
-	 *
-	 * @param roleIds
-	 * @return
-	 */
-	List<String> getRoleAliases(String roleIds);
-
-	/**
-	 * 提交
-	 *
-	 * @param role
-	 * @return
-	 */
-	boolean submit(RoleDTO role);
-
-	/**
-	 * 角色信息查询
-	 *
-	 * @param roleName
-	 * @param parentId
-	 * @return
-	 */
-	List<RoleVO> search(String roleName, Long parentId);
-
-	/**
-	 * 删除角色
-	 *
-	 * @param ids
-	 * @return
-	 */
-	boolean removeRole(String ids);
-
-	List<Role> getByParentId(Long id);
-
-	List<Role> seleteParentRole();
+    /**
+     * 自定义分页
+     *
+     * @param page
+     * @param role
+     * @return
+     */
+    IPage<RoleVO> selectRolePage(IPage<RoleVO> page, RoleVO role);
+
+    /**
+     * 树形结构
+     *
+     * @param tenantId
+     * @return
+     */
+    List<RoleVO> tree(String tenantId);
+
+    /**
+     * 权限配置
+     *
+     * @param roleIds      角色id集合
+     * @param menuIds      菜单id集合
+     * @param dataScopeIds 数据权限id集合
+     * @param apiScopeIds  接口权限id集合
+     * @return 是否成功
+     */
+    boolean grant(@NotEmpty List<Long> roleIds, List<Long> menuIds, List<Long> dataScopeIds, List<Long> apiScopeIds);
+
+    /**
+     * 获取角色ID
+     *
+     * @param tenantId
+     * @param roleNames
+     * @return
+     */
+    String getRoleIds(String tenantId, String roleNames);
+
+    /**
+     * 获取角色名
+     *
+     * @param roleIds
+     * @return
+     */
+    List<String> getRoleNames(String roleIds);
+
+    /**
+     * 获取角色名
+     *
+     * @param roleIds
+     * @return
+     */
+    List<String> getRoleAliases(String roleIds);
+
+    /**
+     * 提交
+     *
+     * @param role
+     * @return
+     */
+    boolean submit(RoleDTO role);
+
+    /**
+     * 角色信息查询
+     *
+     * @param roleName
+     * @param parentId
+     * @return
+     */
+    List<RoleVO> search(String roleName, Long parentId);
+
+    /**
+     * 删除角色
+     *
+     * @param ids
+     * @return
+     */
+    boolean removeRole(String ids);
+
+    List<Role> getByParentId(Long id);
+
+    List<Role> selectParentRole();
+
+    Boolean submitRoleAndTableOwner(String roleId, String tableOwners,String tableOwnerIds);
+
+    List<WbsTableOwnerRole> searchRoleAndTableOwnerList(String roleId);
 
 }

+ 86 - 5
blade-service/blade-system/src/main/java/org/springblade/system/service/impl/RoleServiceImpl.java

@@ -23,14 +23,16 @@ import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.AllArgsConstructor;
+import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.secure.utils.AuthUtil;
-import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.constant.BladeConstant;
 import org.springblade.core.tool.constant.RoleConstant;
 import org.springblade.core.tool.node.ForestNodeMerger;
 import org.springblade.core.tool.utils.CollectionUtil;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.manager.entity.WbsTableOwnerRole;
+import org.springblade.manager.vo.WbsTableOwnerRoleVO;
 import org.springblade.system.dto.RoleDTO;
 import org.springblade.system.entity.Role;
 import org.springblade.system.entity.RoleMenu;
@@ -46,9 +48,7 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 
 import javax.validation.constraints.NotEmpty;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 
 import static org.springblade.common.constant.CommonConstant.API_SCOPE_CATEGORY;
@@ -248,7 +248,7 @@ public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements IR
     }
 
     @Override
-    public List<Role> seleteParentRole() {
+    public List<Role> selectParentRole() {
         return baseMapper.selectList(Wrappers.<Role>query().lambda().eq(Role::getParentId, 0));
     }
 
@@ -260,5 +260,86 @@ public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements IR
         return false;
     }
 
+    @Override
+    public Boolean submitRoleAndTableOwner(String roleId, String tableOwners, String tableOwnerIds) {
+        List<WbsTableOwnerRole> list = baseMapper.selectRoleAndTableOwnerListByRoleId(roleId);
+
+        List<String> tableOwnerValuesIn = list.stream().map(WbsTableOwnerRole::getTableOwnerNumber).collect(Collectors.toList());
+
+        List<String> tableOwnerValuesOut = Func.toStrList(tableOwners);
+
+        List<String> diffRent = getDiffRent(tableOwnerValuesOut, tableOwnerValuesIn);
+
+        System.out.println("list: " + list);
+        System.out.println("tableOwnerValuesIn: " + tableOwnerValuesIn);
+        System.out.println("tableOwnerValuesOut: " + tableOwnerValuesOut);
+        System.out.println("diffRent: " + diffRent);
+
+        List<String> ids = new ArrayList<>();
+
+        //获取ids
+        for (WbsTableOwnerRole wbsTableOwnerRole : list) {
+            for (String diff : diffRent) {
+                if (wbsTableOwnerRole.getTableOwnerNumber().equals(diff)) {
+                    ids.add(String.valueOf(wbsTableOwnerRole.getId()));
+                }
+            }
+        }
+
+        System.out.println("ids: " + ids);
+
+        if (diffRent.size() == 0) {
+            throw new ServiceException("未进行任何操作");
+        } else {
+            if (tableOwnerValuesOut.size() > tableOwnerValuesIn.size()) {
+                //新增
+                for (String tableOwner : diffRent) {
+                    Long id = SnowFlakeUtil.getId();
+                    baseMapper.insertRoleAndTableOwner(id, roleId, tableOwner);
+                }
+                return true;
+
+            } else if (tableOwnerValuesOut.size() < tableOwnerValuesIn.size()) {
+                //删除
+                Integer row = baseMapper.deleteRoleAndTableOwner(ids);
+                return row > 0;
+            }
+        }
+        return false;
+
+    }
+
+    @Override
+    public List<WbsTableOwnerRole> searchRoleAndTableOwnerList(String roleId) {
+        return baseMapper.selectRoleAndTableOwnerList(roleId);
+    }
+
+
+    private static List<String> getDiffRent(List<String> list1, List<String> list2) {
+        List<String> diff = new ArrayList<String>();
+        List<String> maxList = list1;
+        List<String> minList = list2;
+        if (list2.size() > list1.size()) {
+            maxList = list2;
+            minList = list1;
+        }
+        Map<String, Integer> map = new HashMap<String, Integer>(maxList.size());
+        for (String string : maxList) {
+            map.put(string, 1);
+        }
+        for (String string : minList) {
+            if (map.get(string) != null) {
+                map.put(string, 2);
+                continue;
+            }
+            diff.add(string);
+        }
+        for (Map.Entry<String, Integer> entry : map.entrySet()) {
+            if (entry.getValue() == 1) {
+                diff.add(entry.getKey());
+            }
+        }
+        return diff;
+    }
 
 }