|
|
|
@ -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<KnowledgePageResVO> list, Integer status) {
|
|
|
|
|
// 获取用户所有子库的操作权限
|
|
|
|
|
UserInfo user = UserUtil.getUser();
|
|
|
|
|
List<UserBaseOperateAuthDTO> baseOperateAuthDTOList = systemBaseService.queryUserBaseOperateAuth(user.getId());
|
|
|
|
|
Map<String, Set<Integer>> 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())) {
|
|
|
|
|
// 这时需要走审批流程进行删除
|
|
|
|
|