Browse Source

feat: 大屏页面扩展接口新增方法:根据权限过滤、新增后拓展、删除后拓展

大屏页面扩展接口新增方法:根据权限过滤、新增后拓展、删除后拓展
hong.yang 1 year ago
parent
commit
bab3807009

+ 35 - 0
DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/manage/extend/DataRoomExtendClient.java

@@ -3,6 +3,8 @@ package com.gccloud.dataroom.core.module.manage.extend;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.util.List;
+
 /**
  * @author hongyang
  * @version 1.0
@@ -25,4 +27,37 @@ public class DataRoomExtendClient {
         }
     }
 
+    /**
+     * 根据权限过滤
+     * @param allCode 全部的大屏id
+     * @return 当前用户有权限的大屏id
+     */
+    public List<String> filterByPermission(List<String> allCode) {
+        if (extendService != null) {
+            return extendService.filterByPermission(allCode);
+        }
+        return allCode;
+    }
+
+    /**
+     * 大屏新增后的权限处理
+     * @param code 新增的大屏id
+     */
+    public void afterAdd(String code) {
+        if (extendService != null) {
+            extendService.afterAdd(code);
+        }
+    }
+
+    /**
+     * 大屏删除后的权限处理
+     * @param code 删除的大屏id
+     */
+    public void afterDelete(String code) {
+        if (extendService != null) {
+            extendService.afterDelete(code);
+        }
+    }
+
+
 }

+ 25 - 0
DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/manage/extend/IDataRoomExtendService.java

@@ -1,5 +1,7 @@
 package com.gccloud.dataroom.core.module.manage.extend;
 
+import java.util.List;
+
 /**
  * 大屏扩展接口
  * @author hongyang
@@ -11,8 +13,31 @@ public interface IDataRoomExtendService {
     /**
      * 大屏删除拓展
      * 会在大屏删除后调用
+     * 已废弃,请使用afterDelete方法
      * @param code
      */
+    @Deprecated
     void deleteByCode(String code);
 
+    /**
+     * 根据权限过滤
+     * @param allCode 全部的大屏code
+     * @return 当前用户有权限的大屏code
+     */
+    default List<String> filterByPermission(List<String> allCode) {
+        return allCode;
+    }
+
+    /**
+     * 大屏新增后的处理, 可在此处处理权限等
+     * @param code 新增的大屏code
+     */
+    default void afterAdd(String code) {}
+
+    /**
+     * 大屏删除后的处理, 可在此处处理权限等
+     * @param code 删除的大屏code
+     */
+    default void afterDelete(String code) {}
+
 }

+ 26 - 6
DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/manage/service/impl/DataRoomPageServiceImpl.java

@@ -18,7 +18,6 @@ import com.gccloud.dataroom.core.utils.CodeGenerateUtils;
 import com.gccloud.common.exception.GlobalException;
 import com.gccloud.common.utils.AssertUtils;
 import com.gccloud.common.utils.BeanConvertUtils;
-import com.gccloud.common.utils.QueryWrapperUtils;
 import com.gccloud.common.vo.PageVO;
 import com.google.common.collect.Lists;
 import lombok.extern.slf4j.Slf4j;
@@ -34,6 +33,7 @@ import java.io.IOException;
 import java.util.Base64;
 import java.util.List;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * @author hongyang
@@ -80,6 +80,7 @@ public class DataRoomPageServiceImpl extends ServiceImpl<DataRoomPageDao, PageEn
         AssertUtils.isTrue(!checkNameRepeat(bigScreenEntity), "名称重复");
         AssertUtils.isTrue(!checkCodeRepeat(bigScreenEntity), "编码重复");
         this.save(bigScreenEntity);
+        dataRoomExtendClient.afterAdd(bigScreenEntity.getCode());
         return bigScreenEntity.getCode();
     }
 
@@ -171,16 +172,32 @@ public class DataRoomPageServiceImpl extends ServiceImpl<DataRoomPageDao, PageEn
         if (StringUtils.isBlank(searchDTO.getType())) {
             throw new GlobalException("类型不能为空");
         }
-        LambdaQueryWrapper<PageEntity> queryWrapper = QueryWrapperUtils.wrapperLike(new LambdaQueryWrapper<>(), searchDTO.getSearchKey(), PageEntity::getName);
+        LambdaQueryWrapper<PageEntity> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.like(StringUtils.isNotBlank(searchDTO.getSearchKey()), PageEntity::getName, searchDTO.getSearchKey());
         if (StringUtils.isNotBlank(searchDTO.getParentCode())) {
             queryWrapper.eq(PageEntity::getParentCode, searchDTO.getParentCode());
         }
         queryWrapper.eq(PageEntity::getType, searchDTO.getType());
-        queryWrapper.select(PageEntity::getId, PageEntity::getAppCode, PageEntity::getCode, PageEntity::getName, PageEntity::getParentCode, PageEntity::getOrderNum, PageEntity::getCoverPicture, PageEntity::getUpdateDate);
+        queryWrapper.select(PageEntity::getCode);
+        List<PageEntity> idEntityList = this.list(queryWrapper);
+        if (idEntityList == null || idEntityList.isEmpty()) {
+            return new PageVO<>();
+        }
+        List<String> codeList = idEntityList.stream().map(PageEntity::getId).collect(Collectors.toList());
+        List<String> filterByPermission = dataRoomExtendClient.filterByPermission(codeList);
+        LambdaQueryWrapper<PageEntity> reQueryWrapper =  new LambdaQueryWrapper<>();
+        if (codeList.size() == filterByPermission.size()) {
+            // 说明没有过滤掉任何一个, 按照原来的条件查询
+            reQueryWrapper = queryWrapper;
+        } else {
+            // 说明过滤掉了一些, 按照过滤后的编码查询
+            reQueryWrapper.in(PageEntity::getCode, filterByPermission);
+        }
+        reQueryWrapper.select(PageEntity::getId, PageEntity::getAppCode, PageEntity::getCode, PageEntity::getName, PageEntity::getParentCode, PageEntity::getOrderNum, PageEntity::getCoverPicture, PageEntity::getUpdateDate);
         // 优先序号升序,其次创建时间降序
-        queryWrapper.orderByAsc(PageEntity::getOrderNum);
-        queryWrapper.orderByDesc(PageEntity::getCreateDate);
-        PageVO<PageEntity> page = page(searchDTO, queryWrapper);
+        reQueryWrapper.orderByAsc(PageEntity::getOrderNum);
+        reQueryWrapper.orderByDesc(PageEntity::getCreateDate);
+        PageVO<PageEntity> page = this.page(searchDTO, reQueryWrapper);
         List<PageEntity> list = page.getList();
         if (list == null || list.isEmpty()) {
             return page;
@@ -242,6 +259,7 @@ public class DataRoomPageServiceImpl extends ServiceImpl<DataRoomPageDao, PageEn
             chart.setCode(CodeGenerateUtils.generate(chart.getType() == null ? "chart" : chart.getType()));
         }
         this.save(screenEntity);
+        dataRoomExtendClient.afterAdd(screenEntity.getCode());
         return screenEntity.getCode();
     }
 
@@ -253,5 +271,7 @@ public class DataRoomPageServiceImpl extends ServiceImpl<DataRoomPageDao, PageEn
         PAGE_ENTITY_CACHE.invalidate(code);
         // 调用拓展接口
         dataRoomExtendClient.deleteByCode(code);
+        // 移除权限拓展
+        dataRoomExtendClient.afterDelete(code);
     }
 }