diff --git a/backend/src/main/java/io/dataease/controller/panel/api/ShareApi.java b/backend/src/main/java/io/dataease/controller/panel/api/ShareApi.java index 879fea6ee4..39e7f8a441 100644 --- a/backend/src/main/java/io/dataease/controller/panel/api/ShareApi.java +++ b/backend/src/main/java/io/dataease/controller/panel/api/ShareApi.java @@ -54,4 +54,8 @@ public interface ShareApi { @PostMapping("/removeShares") void removeShares(PanelShareRemoveRequest request); + @ApiOperation("删除仪表板所有分享") + @PostMapping("/removePanelShares/{panelId}") + void removePanelShares(@PathVariable("panelId") String panelId); + } diff --git a/backend/src/main/java/io/dataease/controller/panel/server/ShareServer.java b/backend/src/main/java/io/dataease/controller/panel/server/ShareServer.java index 0b4c0d7e9f..b4016c7cd4 100644 --- a/backend/src/main/java/io/dataease/controller/panel/server/ShareServer.java +++ b/backend/src/main/java/io/dataease/controller/panel/server/ShareServer.java @@ -52,4 +52,9 @@ public class ShareServer implements ShareApi { public void removeShares(@RequestBody PanelShareRemoveRequest request) { shareService.removeShares(request); } + + @Override + public void removePanelShares(String panelId) { + shareService.removeSharesyPanel(panelId); + } } diff --git a/backend/src/main/java/io/dataease/service/panel/ShareService.java b/backend/src/main/java/io/dataease/service/panel/ShareService.java index 398eb619d1..66935e481a 100644 --- a/backend/src/main/java/io/dataease/service/panel/ShareService.java +++ b/backend/src/main/java/io/dataease/service/panel/ShareService.java @@ -26,6 +26,7 @@ import io.dataease.plugins.common.base.mapper.PanelShareMapper; import io.dataease.service.message.DeMsgutil; import lombok.Data; import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -386,6 +387,54 @@ public class ShareService { .collect(Collectors.toList()); } + public void removeSharesyPanel(String panelId) { + PanelGroup panelGroup = panelGroupMapper.selectByPrimaryKey(panelId); + PanelShareRemoveRequest request = new PanelShareRemoveRequest(); + request.setPanelId(panelId); + List panelShareOutDTOS = queryTargets(panelId); + extPanelShareMapper.removeShares(request); + if (CollectionUtils.isEmpty(panelShareOutDTOS) || ObjectUtils.isEmpty(panelGroup) || StringUtils.isBlank(panelGroup.getName())) { + return; + } + panelShareOutDTOS.forEach(shareOut -> { + SysLogConstants.SOURCE_TYPE buiType = buiType(shareOut.getType()); + DeLogUtils.save(SysLogConstants.OPERATE_TYPE.UNSHARE, SysLogConstants.SOURCE_TYPE.PANEL, panelId, panelGroup.getPid(), shareOut.getTargetId(), buiType); + }); + + Map> listMap = panelShareOutDTOS.stream().collect(Collectors.groupingBy(dto -> dto.getType())); + AuthURD urd = new AuthURD(); + for (Map.Entry> entry : listMap.entrySet()) { + List dtoList = entry.getValue(); + if(CollectionUtils.isNotEmpty(dtoList)) { + List curTargetIds = dtoList.stream().map(dto -> Long.parseLong(dto.getTargetId())).collect(Collectors.toList()); + buildRedAuthURD(entry.getKey(), curTargetIds, urd); + } + } + Set userIds = AuthUtils.userIdsByURD(urd); + if (CollectionUtils.isNotEmpty(userIds)) { + CurrentUserDto user = AuthUtils.getUser(); + Gson gson = new Gson(); + userIds.forEach(userId -> { + if (!user.getUserId().equals(userId)) { + String msg = panelGroup.getName(); + List msgParam = new ArrayList<>(); + msgParam.add(panelId); + DeMsgutil.sendMsg(userId, 3L, user.getNickName() + " 取消分享了仪表板【" + msg + "】,请查收!", gson.toJson(msgParam)); + } + }); + } + } + + private SysLogConstants.SOURCE_TYPE buiType(Integer type) { + SysLogConstants.SOURCE_TYPE targetType = SysLogConstants.SOURCE_TYPE.USER; + if (type == 1) { + targetType = SysLogConstants.SOURCE_TYPE.ROLE; + }else if (type == 2) { + targetType = SysLogConstants.SOURCE_TYPE.DEPT; + } + return targetType; + } + @Transactional public void removeShares(PanelShareRemoveRequest removeRequest) { String panelId = removeRequest.getPanelId(); @@ -393,12 +442,7 @@ public class ShareService { extPanelShareMapper.removeShares(removeRequest); - SysLogConstants.SOURCE_TYPE targetType = SysLogConstants.SOURCE_TYPE.USER; - if (removeRequest.getType() == 1) { - targetType = SysLogConstants.SOURCE_TYPE.ROLE; - }else if (removeRequest.getType() == 2) { - targetType = SysLogConstants.SOURCE_TYPE.DEPT; - } + SysLogConstants.SOURCE_TYPE targetType = buiType(removeRequest.getType()); DeLogUtils.save(SysLogConstants.OPERATE_TYPE.UNSHARE, SysLogConstants.SOURCE_TYPE.PANEL, panelId, panelGroup.getPid(), removeRequest.getTargetId(), targetType); @@ -407,9 +451,8 @@ public class ShareService { buildRedAuthURD(removeRequest.getType(), removeIds, sharedAuthURD); CurrentUserDto user = AuthUtils.getUser(); Gson gson = new Gson(); - PanelGroup panel = panelGroupMapper.selectByPrimaryKey(panelId); - String msg = panel.getName(); + String msg = panelGroup.getName(); List msgParam = new ArrayList<>(); msgParam.add(panelId); diff --git a/frontend/src/api/panel/share.js b/frontend/src/api/panel/share.js index 4382805c70..e711dc0a44 100644 --- a/frontend/src/api/panel/share.js +++ b/frontend/src/api/panel/share.js @@ -26,6 +26,14 @@ export function removeShares(data) { }) } +export function removePanelShares(panelId) { + return request({ + url: '/api/share/removePanelShares/' + panelId, + method: 'post', + loading: true + }) +} + export function loadShares(data) { return request({ url: '/api/share/queryWithResourceId', diff --git a/frontend/src/views/panel/GrantAuth/shareTree.vue b/frontend/src/views/panel/GrantAuth/shareTree.vue index dbfa223781..f1e8073b3d 100644 --- a/frontend/src/views/panel/GrantAuth/shareTree.vue +++ b/frontend/src/views/panel/GrantAuth/shareTree.vue @@ -69,7 +69,7 @@