From 4a4ae22e18fce445134045d4bcc9d93eccc59a31 Mon Sep 17 00:00:00 2001 From: liu Date: Mon, 1 Jul 2024 14:06:02 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96,=E5=88=86=E9=A1=B5=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E7=8A=B6=E6=80=81=E7=94=B1=E5=90=8E=E7=AB=AF=E6=8F=90?= =?UTF-8?q?=E4=BE=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/KnowledgeManageServiceImpl.java | 63 ++++++++++++++++++- .../dto/base/UserBaseOperateAuthDTO.java | 11 ++++ .../knowsub/mapper/SystemBaseMapper.java | 5 ++ .../knowsub/service/SystemBaseService.java | 9 +++ .../service/impl/SystemBaseServiceImpl.java | 6 ++ .../vo/knowledge/KnowledgePageResVO.java | 9 +++ .../main/resources/mapper/KnowledgeMapper.xml | 2 +- .../resources/mapper/SystemBaseMapper.xml | 9 +++ 8 files changed, 111 insertions(+), 3 deletions(-) create mode 100644 know_sub_model/src/main/java/com/supervision/knowsub/dto/base/UserBaseOperateAuthDTO.java diff --git a/know_sub_business/src/main/java/com/supervision/knowsub/service/impl/KnowledgeManageServiceImpl.java b/know_sub_business/src/main/java/com/supervision/knowsub/service/impl/KnowledgeManageServiceImpl.java index 948a538..51f2054 100644 --- a/know_sub_business/src/main/java/com/supervision/knowsub/service/impl/KnowledgeManageServiceImpl.java +++ b/know_sub_business/src/main/java/com/supervision/knowsub/service/impl/KnowledgeManageServiceImpl.java @@ -5,6 +5,7 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.core.metadata.IPage; import com.supervision.knowsub.domain.UserInfo; +import com.supervision.knowsub.dto.base.UserBaseOperateAuthDTO; import com.supervision.knowsub.entity.vo.knowledge.*; import com.supervision.knowsub.enums.FlowTypeEnum; import com.supervision.knowsub.enums.StatusEnum; @@ -15,6 +16,7 @@ import com.supervision.knowsub.util.UserUtil; import com.supervision.knowsub.vo.knowledge.KnowledgePageResVO; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.ObjectUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -78,10 +80,62 @@ public class KnowledgeManageServiceImpl implements KnowledgeManageService { node.setPublishDeptName(deptMap.getOrDefault(knowledge.getPublishDeptId(), "未知部门")); return node; }).toList(); + // 进行只是的标记操作 + markKnowledgeOperationFlag(list, status); knowledgeIPage.setRecords(list); return knowledgeIPage; } + /** + * 标记知识的操作状态 + */ + private void markKnowledgeOperationFlag(List list, Integer status) { + // 获取用户所有子库的操作权限 + UserInfo user = UserUtil.getUser(); + List baseOperateAuthDTOList = systemBaseService.queryUserBaseOperateAuth(user.getId()); + Map> baseOperateAuthMap = baseOperateAuthDTOList.stream() + .collect(Collectors.groupingBy(UserBaseOperateAuthDTO::getBaseId, Collectors.mapping(UserBaseOperateAuthDTO::getFlowType, Collectors.toSet()))); + // 首先需要看用户对这个子库的权限是什么,如果用户有该子库的对应的操作权限,则允许进行对应操作 + for (KnowledgePageResVO knowledgePageResVO : list) { + String baseId = knowledgePageResVO.getBaseId(); + if (ObjectUtils.isEmpty(status)) { + // 如果为空,查询是否具有撤回权限 + if (baseOperateAuthMap.containsKey(baseId) && baseOperateAuthMap.get(baseId).contains(FlowTypeEnum.RECALL.getFlowType())) { + knowledgePageResVO.setRecallFlag(1); + } + } else if (StatusEnum.DRAFT.getStatus().equals(status)) { + // 如果是草稿,就只允许编辑和删除 + knowledgePageResVO.setModifyFlag(1); + knowledgePageResVO.setDeleteFlag(1); + } else if (StatusEnum.PASS.getStatus().equals(status)) { + // 如果是已发布,就只允许撤回.需要有该子库权限 + if (baseOperateAuthMap.containsKey(baseId) && baseOperateAuthMap.get(baseId).contains(FlowTypeEnum.RECALL.getFlowType())) { + knowledgePageResVO.setRecallFlag(1); + } + } else if (StatusEnum.REJECT.getStatus().equals(status)) { + // 如果是驳回,就可以支持编辑和删除,但是需要校验是否需要有权限 + if (baseOperateAuthMap.containsKey(baseId) && baseOperateAuthMap.get(baseId).contains(FlowTypeEnum.SUBMIT.getFlowType())) { + knowledgePageResVO.setModifyFlag(1); + } + if (baseOperateAuthMap.containsKey(baseId) && baseOperateAuthMap.get(baseId).contains(FlowTypeEnum.DELETE.getFlowType())) { + knowledgePageResVO.setDeleteFlag(1); + } + } else if (StatusEnum.INVALID.getStatus().equals(status)) { + // 如果是已失效,支持编辑撤回删除,但是需要校验是否有对应的权限 + if (baseOperateAuthMap.containsKey(baseId) && baseOperateAuthMap.get(baseId).contains(FlowTypeEnum.SUBMIT.getFlowType())) { + knowledgePageResVO.setModifyFlag(1); + } + if (baseOperateAuthMap.containsKey(baseId) && baseOperateAuthMap.get(baseId).contains(FlowTypeEnum.RECALL.getFlowType())) { + knowledgePageResVO.setRecallFlag(1); + } + if (baseOperateAuthMap.containsKey(baseId) && baseOperateAuthMap.get(baseId).contains(FlowTypeEnum.DELETE.getFlowType())) { + knowledgePageResVO.setDeleteFlag(1); + } + } + // 其他状态就全部置灰 + } + } + @Override @Transactional(rollbackFor = Exception.class) public void saveKnowledge(SaveKnowledgeReqVO reqVO) { @@ -138,6 +192,8 @@ public class KnowledgeManageServiceImpl implements KnowledgeManageService { // 这里需要走流程 UserInfo user = UserUtil.getUser(); knowledgeFlowService.submitFlowProcess(knowledge, FlowTypeEnum.SUBMIT, user.getId(), user.getDeptId(), reqVO.getRemark()); + // 如果提交了审批,就把草稿所属人置为空 + knowledgeService.lambdaUpdate().set(Knowledge::getDraftBelongUserId, null).eq(Knowledge::getId, knowledge.getId()).update(); } @@ -202,6 +258,8 @@ public class KnowledgeManageServiceImpl implements KnowledgeManageService { if (1 != reqVO.getOperate()) { UserInfo user = UserUtil.getUser(); knowledgeFlowService.submitFlowProcess(knowledge, FlowTypeEnum.SUBMIT, user.getId(), user.getDeptId(), reqVO.getRemark()); + // 如果提交了审批,就把草稿所属人置为空 + knowledgeService.lambdaUpdate().set(Knowledge::getDraftBelongUserId, null).eq(Knowledge::getId, knowledge.getId()).update(); } } @@ -305,8 +363,9 @@ public class KnowledgeManageServiceImpl implements KnowledgeManageService { knowledgeAttachmentService.lambdaUpdate().eq(KnowledgeAttachment::getKnowledgeId, knowledgeId).remove(); } else { // 如果有过审批记录,则直接修改状态为逻辑删除 - knowledge.setStatus(StatusEnum.DELETE.getStatus()); - knowledgeService.updateById(knowledge); + knowledgeService.lambdaUpdate().set(Knowledge::getStatus, StatusEnum.DELETE.getStatus()) + .set(Knowledge::getDraftBelongUserId, null) + .eq(Knowledge::getId, knowledge.getId()).update(); } } else if (canDeleteStatusSet.contains(knowledge.getStatus())) { // 这时需要走审批流程进行删除 diff --git a/know_sub_model/src/main/java/com/supervision/knowsub/dto/base/UserBaseOperateAuthDTO.java b/know_sub_model/src/main/java/com/supervision/knowsub/dto/base/UserBaseOperateAuthDTO.java new file mode 100644 index 0000000..45cbad5 --- /dev/null +++ b/know_sub_model/src/main/java/com/supervision/knowsub/dto/base/UserBaseOperateAuthDTO.java @@ -0,0 +1,11 @@ +package com.supervision.knowsub.dto.base; + +import lombok.Data; + +@Data +public class UserBaseOperateAuthDTO { + + private String baseId; + + private Integer flowType; +} diff --git a/know_sub_model/src/main/java/com/supervision/knowsub/mapper/SystemBaseMapper.java b/know_sub_model/src/main/java/com/supervision/knowsub/mapper/SystemBaseMapper.java index fe68dfb..896dc99 100644 --- a/know_sub_model/src/main/java/com/supervision/knowsub/mapper/SystemBaseMapper.java +++ b/know_sub_model/src/main/java/com/supervision/knowsub/mapper/SystemBaseMapper.java @@ -2,12 +2,15 @@ package com.supervision.knowsub.mapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.supervision.knowsub.dto.base.UserBaseOperateAuthDTO; import com.supervision.knowsub.model.SystemBase; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.supervision.knowsub.vo.sublibrary.SubLibraryReqVo; import com.supervision.knowsub.vo.sublibrary.SubLibraryResVo; import org.apache.ibatis.annotations.Param; +import java.util.List; + /** * @author Administrator * @description 针对表【ks_system_base(应用子库)】的数据库操作Mapper @@ -24,6 +27,8 @@ public interface SystemBaseMapper extends BaseMapper { * @return */ IPage listSubLibrary(@Param("subLibrary") SubLibraryReqVo subLibraryReqVo, @Param("page") Page page); + + List queryUserBaseOperateAuth(@Param("userId") String userId); } diff --git a/know_sub_model/src/main/java/com/supervision/knowsub/service/SystemBaseService.java b/know_sub_model/src/main/java/com/supervision/knowsub/service/SystemBaseService.java index 99ec9ab..faa2a85 100644 --- a/know_sub_model/src/main/java/com/supervision/knowsub/service/SystemBaseService.java +++ b/know_sub_model/src/main/java/com/supervision/knowsub/service/SystemBaseService.java @@ -1,11 +1,14 @@ package com.supervision.knowsub.service; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.supervision.knowsub.dto.base.UserBaseOperateAuthDTO; import com.supervision.knowsub.model.SystemBase; import com.baomidou.mybatisplus.extension.service.IService; import com.supervision.knowsub.vo.sublibrary.SubLibraryReqVo; import com.supervision.knowsub.vo.sublibrary.SubLibraryResVo; +import java.util.List; + /** * @author Administrator * @description 针对表【ks_system_base(应用子库)】的数据库操作Service @@ -14,4 +17,10 @@ import com.supervision.knowsub.vo.sublibrary.SubLibraryResVo; public interface SystemBaseService extends IService { IPage listSubLibrary(SubLibraryReqVo subLibraryReqVo, Integer pageNum, Integer pageSize); + + /** + * 查询用户拥有的子库权限 + * @param userId 用户ID + */ + List queryUserBaseOperateAuth(String userId); } diff --git a/know_sub_model/src/main/java/com/supervision/knowsub/service/impl/SystemBaseServiceImpl.java b/know_sub_model/src/main/java/com/supervision/knowsub/service/impl/SystemBaseServiceImpl.java index 6caee20..5745899 100644 --- a/know_sub_model/src/main/java/com/supervision/knowsub/service/impl/SystemBaseServiceImpl.java +++ b/know_sub_model/src/main/java/com/supervision/knowsub/service/impl/SystemBaseServiceImpl.java @@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.supervision.knowsub.dto.base.UserBaseOperateAuthDTO; import com.supervision.knowsub.dto.dept.BaseDeptRelationDTO; import com.supervision.knowsub.model.SystemBase; import com.supervision.knowsub.service.SystemBaseDeptRelationService; @@ -64,6 +65,11 @@ public class SystemBaseServiceImpl extends ServiceImpl queryUserBaseOperateAuth(String userId) { + return this.baseMapper.queryUserBaseOperateAuth(userId); + } } diff --git a/know_sub_model/src/main/java/com/supervision/knowsub/vo/knowledge/KnowledgePageResVO.java b/know_sub_model/src/main/java/com/supervision/knowsub/vo/knowledge/KnowledgePageResVO.java index b424b97..5b4a014 100644 --- a/know_sub_model/src/main/java/com/supervision/knowsub/vo/knowledge/KnowledgePageResVO.java +++ b/know_sub_model/src/main/java/com/supervision/knowsub/vo/knowledge/KnowledgePageResVO.java @@ -15,4 +15,13 @@ public class KnowledgePageResVO extends Knowledge { private String submitDeptName; @Schema(description = "发文部门名称") private String publishDeptName; + + @Schema(description = "是否支持删除 0不支持 1支持") + private Integer deleteFlag = 0; + + @Schema(description = "是否支持修改 0不支持 1支持") + private Integer modifyFlag = 0; + + @Schema(description = "是否支持撤回 0不支持 1支持") + private Integer recallFlag = 0; } diff --git a/know_sub_model/src/main/resources/mapper/KnowledgeMapper.xml b/know_sub_model/src/main/resources/mapper/KnowledgeMapper.xml index 4101241..353d1f5 100644 --- a/know_sub_model/src/main/resources/mapper/KnowledgeMapper.xml +++ b/know_sub_model/src/main/resources/mapper/KnowledgeMapper.xml @@ -42,7 +42,7 @@ where 1 = 1 - -- 如果为空,是查全部通过的 + -- 如果为空,是查全部通过的,不分人 and ( status = 2) diff --git a/know_sub_model/src/main/resources/mapper/SystemBaseMapper.xml b/know_sub_model/src/main/resources/mapper/SystemBaseMapper.xml index 914a19e..76c38b1 100644 --- a/know_sub_model/src/main/resources/mapper/SystemBaseMapper.xml +++ b/know_sub_model/src/main/resources/mapper/SystemBaseMapper.xml @@ -46,4 +46,13 @@ + +