|
|
|
@ -3,6 +3,7 @@ package com.supervision.knowsub.service.impl;
|
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
|
|
import cn.hutool.core.lang.Assert;
|
|
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
|
|
import com.supervision.knowsub.entity.vo.knowledge.KnowledgeDetailResVO;
|
|
|
|
|
import com.supervision.knowsub.entity.vo.knowledge.KnowledgeLinkVO;
|
|
|
|
|
import com.supervision.knowsub.entity.vo.knowledge.ModifyKnowledgeReqVO;
|
|
|
|
|
import com.supervision.knowsub.entity.vo.knowledge.SaveKnowledgeReqVO;
|
|
|
|
@ -17,6 +18,7 @@ import org.springframework.stereotype.Service;
|
|
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Objects;
|
|
|
|
|
import java.util.Set;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
@ -35,6 +37,8 @@ public class KnowledgeManageServiceImpl implements KnowledgeManageService {
|
|
|
|
|
|
|
|
|
|
private final KnowledgeLinkService knowledgeLinkService;
|
|
|
|
|
|
|
|
|
|
private final KnowledgeFlowRecordService flowRecordService;
|
|
|
|
|
|
|
|
|
|
private final FileService fileService;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -60,7 +64,7 @@ public class KnowledgeManageServiceImpl implements KnowledgeManageService {
|
|
|
|
|
knowledge.setPublishDept(reqVO.getPublishDept());
|
|
|
|
|
// 目前只有人工添加
|
|
|
|
|
knowledge.setKnowledgeFrom(1);
|
|
|
|
|
knowledge.setStatus(reqVO.getOperate() == 1 ? StatusEnum.DRAFT.getStatus() : StatusEnum.WAIT_APPROVAL.getStatus());
|
|
|
|
|
knowledge.setStatus(reqVO.getOperate() == 1 ? StatusEnum.DRAFT.getStatus() : StatusEnum.WAIT_APPROVAL.getStatus());
|
|
|
|
|
knowledge.setSubmittedDeptId(reqVO.getSubmittedDeptId());
|
|
|
|
|
if (1 == reqVO.getOperate()) {
|
|
|
|
|
knowledge.setDraftBelongUserId(reqVO.getUserId());
|
|
|
|
@ -92,14 +96,13 @@ public class KnowledgeManageServiceImpl implements KnowledgeManageService {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
*
|
|
|
|
|
* @param reqVO
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public void updateKnowledge(ModifyKnowledgeReqVO reqVO) {
|
|
|
|
|
Knowledge knowledge = knowledgeService.getOptById(reqVO.getKnowledgeId()).orElseThrow(() -> new BusinessException("未找到知识"));
|
|
|
|
|
// 首先校验状态,草稿/已撤回/已失效/驳回,才能修改
|
|
|
|
|
Set<Integer> canModifyStatusSet = Set.of(StatusEnum.DRAFT.getStatus(), StatusEnum.RECALL.getStatus(), StatusEnum.INVALID.getStatus(),StatusEnum.REJECT.getStatus());
|
|
|
|
|
// 首先校验状态,草稿/已撤回/已失效/驳回,才能修改(通过的,要先撤回才能修改)
|
|
|
|
|
Set<Integer> canModifyStatusSet = Set.of(StatusEnum.DRAFT.getStatus(), StatusEnum.RECALL.getStatus(), StatusEnum.INVALID.getStatus(), StatusEnum.REJECT.getStatus());
|
|
|
|
|
if (!canModifyStatusSet.contains(knowledge.getStatus())) {
|
|
|
|
|
throw new BusinessException("当前状态不支持修改");
|
|
|
|
|
}
|
|
|
|
@ -112,7 +115,7 @@ public class KnowledgeManageServiceImpl implements KnowledgeManageService {
|
|
|
|
|
// TODO 这里目前子库设置为空
|
|
|
|
|
knowledge.setPublishDept(reqVO.getPublishDept());
|
|
|
|
|
knowledge.setSubmittedDeptId(reqVO.getSubmittedDeptId());
|
|
|
|
|
knowledge.setStatus(reqVO.getOperate() == 1 ? StatusEnum.DRAFT.getStatus() : StatusEnum.WAIT_APPROVAL.getStatus());
|
|
|
|
|
knowledge.setStatus(reqVO.getOperate() == 1 ? StatusEnum.DRAFT.getStatus() : StatusEnum.WAIT_APPROVAL.getStatus());
|
|
|
|
|
|
|
|
|
|
// 如果保存为草稿
|
|
|
|
|
if (1 == reqVO.getOperate()) {
|
|
|
|
@ -121,19 +124,19 @@ public class KnowledgeManageServiceImpl implements KnowledgeManageService {
|
|
|
|
|
knowledgeService.updateById(knowledge);
|
|
|
|
|
// 更新基础信息
|
|
|
|
|
KnowledgeBaseInfo knowledgeBaseInfo = reqVO.getKnowledgeBaseInfo();
|
|
|
|
|
Assert.notBlank(knowledgeBaseInfo.getKnowledgeId(),"知识ID不能为空");
|
|
|
|
|
Assert.notBlank(knowledgeBaseInfo.getKnowledgeId(), "知识ID不能为空");
|
|
|
|
|
// 这里需要用SQL进行更新,不能用封装的updateById,因为前端某些字段可能变为空,用updateById不能让那个想为空的变成空
|
|
|
|
|
knowledgeBaseInfoService.lambdaUpdate()
|
|
|
|
|
.set(KnowledgeBaseInfo::getPolicyType,knowledgeBaseInfo.getPolicyType())
|
|
|
|
|
.set(KnowledgeBaseInfo::getTerritory,knowledgeBaseInfo.getTerritory())
|
|
|
|
|
.set(KnowledgeBaseInfo::getPublishScope,knowledgeBaseInfo.getPublishScope())
|
|
|
|
|
.set(KnowledgeBaseInfo::getKnowledgeTag,knowledgeBaseInfo.getKnowledgeTag())
|
|
|
|
|
.set(KnowledgeBaseInfo::getAutoLoseEffect,knowledgeBaseInfo.getAutoLoseEffect())
|
|
|
|
|
.set(KnowledgeBaseInfo::getExecTimeBegin,knowledgeBaseInfo.getExecTimeBegin())
|
|
|
|
|
.set(KnowledgeBaseInfo::getExecTimeEnd,knowledgeBaseInfo.getExecTimeEnd())
|
|
|
|
|
.set(KnowledgeBaseInfo::getTimeliness,knowledgeBaseInfo.getTimeliness())
|
|
|
|
|
.set(KnowledgeBaseInfo::getPublishDate,knowledgeBaseInfo.getPublishDate())
|
|
|
|
|
.eq(KnowledgeBaseInfo::getKnowledgeId,knowledgeBaseInfo.getKnowledgeId()).update();
|
|
|
|
|
.set(KnowledgeBaseInfo::getPolicyType, knowledgeBaseInfo.getPolicyType())
|
|
|
|
|
.set(KnowledgeBaseInfo::getTerritory, knowledgeBaseInfo.getTerritory())
|
|
|
|
|
.set(KnowledgeBaseInfo::getPublishScope, knowledgeBaseInfo.getPublishScope())
|
|
|
|
|
.set(KnowledgeBaseInfo::getKnowledgeTag, knowledgeBaseInfo.getKnowledgeTag())
|
|
|
|
|
.set(KnowledgeBaseInfo::getAutoLoseEffect, knowledgeBaseInfo.getAutoLoseEffect())
|
|
|
|
|
.set(KnowledgeBaseInfo::getExecTimeBegin, knowledgeBaseInfo.getExecTimeBegin())
|
|
|
|
|
.set(KnowledgeBaseInfo::getExecTimeEnd, knowledgeBaseInfo.getExecTimeEnd())
|
|
|
|
|
.set(KnowledgeBaseInfo::getTimeliness, knowledgeBaseInfo.getTimeliness())
|
|
|
|
|
.set(KnowledgeBaseInfo::getPublishDate, knowledgeBaseInfo.getPublishDate())
|
|
|
|
|
.eq(KnowledgeBaseInfo::getKnowledgeId, knowledgeBaseInfo.getKnowledgeId()).update();
|
|
|
|
|
// 有可能更新附件
|
|
|
|
|
updateKnowledgeFile(reqVO, knowledge);
|
|
|
|
|
// 有可能更新URL
|
|
|
|
@ -147,7 +150,7 @@ public class KnowledgeManageServiceImpl implements KnowledgeManageService {
|
|
|
|
|
|
|
|
|
|
private void updateKnowledgeLink(ModifyKnowledgeReqVO reqVO, Knowledge knowledge) {
|
|
|
|
|
// 直接删除原来的
|
|
|
|
|
knowledgeLinkService.lambdaUpdate().eq(KnowledgeLink::getKnowledgeId,knowledge.getId()).remove();
|
|
|
|
|
knowledgeLinkService.lambdaUpdate().eq(KnowledgeLink::getKnowledgeId, knowledge.getId()).remove();
|
|
|
|
|
for (KnowledgeLinkVO knowLedgeLinkVO : reqVO.getLinkList()) {
|
|
|
|
|
KnowledgeLink knowledgeLink = new KnowledgeLink();
|
|
|
|
|
knowledgeLink.setLinkName(knowLedgeLinkVO.getLinkName());
|
|
|
|
@ -160,28 +163,28 @@ public class KnowledgeManageServiceImpl implements KnowledgeManageService {
|
|
|
|
|
private void updateKnowledgeFile(ModifyKnowledgeReqVO reqVO, Knowledge knowledge) {
|
|
|
|
|
// 获取数据库中的附件ID
|
|
|
|
|
List<KnowledgeAttachment> oldFileList = knowledgeAttachmentService.lambdaQuery().eq(KnowledgeAttachment::getKnowledgeId, knowledge.getId()).list();
|
|
|
|
|
if (CollUtil.isEmpty(reqVO.getFileIdList())){
|
|
|
|
|
if (CollUtil.isNotEmpty(oldFileList)){
|
|
|
|
|
knowledgeAttachmentService.lambdaUpdate().eq(KnowledgeAttachment::getKnowledgeId,knowledge.getId()).remove();
|
|
|
|
|
if (CollUtil.isEmpty(reqVO.getFileIdList())) {
|
|
|
|
|
if (CollUtil.isNotEmpty(oldFileList)) {
|
|
|
|
|
knowledgeAttachmentService.lambdaUpdate().eq(KnowledgeAttachment::getKnowledgeId, knowledge.getId()).remove();
|
|
|
|
|
// 删除文件
|
|
|
|
|
for (KnowledgeAttachment knowledgeAttachment : oldFileList) {
|
|
|
|
|
fileService.deleteFileById(knowledgeAttachment.getFileId());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}else {
|
|
|
|
|
} else {
|
|
|
|
|
List<String> newFileIdList = reqVO.getFileIdList();
|
|
|
|
|
// 遍历旧的附件,如果新的附件列表中不包含,则删除
|
|
|
|
|
for (KnowledgeAttachment oldFile : oldFileList) {
|
|
|
|
|
if (!newFileIdList.contains(oldFile.getId())){
|
|
|
|
|
knowledgeAttachmentService.lambdaUpdate().eq(KnowledgeAttachment::getFileId,oldFile.getId()).remove();
|
|
|
|
|
if (!newFileIdList.contains(oldFile.getId())) {
|
|
|
|
|
knowledgeAttachmentService.lambdaUpdate().eq(KnowledgeAttachment::getFileId, oldFile.getId()).remove();
|
|
|
|
|
fileService.deleteFileById(oldFile.getFileId());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
List<String> oldFileIdList = oldFileList.stream().map(KnowledgeAttachment::getFileId).toList();
|
|
|
|
|
// 再添加新的附件
|
|
|
|
|
for (String fileId : reqVO.getFileIdList()) {
|
|
|
|
|
if (!oldFileIdList.contains(fileId)){
|
|
|
|
|
if (!oldFileIdList.contains(fileId)) {
|
|
|
|
|
KnowledgeAttachment attachment = new KnowledgeAttachment();
|
|
|
|
|
attachment.setKnowledgeId(knowledge.getId());
|
|
|
|
|
attachment.setFileId(fileId);
|
|
|
|
@ -193,5 +196,62 @@ public class KnowledgeManageServiceImpl implements KnowledgeManageService {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void recallKnowledge(String knowledgeId) {
|
|
|
|
|
Knowledge knowledge = knowledgeService.getOptById(knowledgeId).orElseThrow(() -> new BusinessException("未找到知识"));
|
|
|
|
|
// 只有通过状态或已失效状态才支持撤回
|
|
|
|
|
Set<Integer> canRecallStatusSet = Set.of(StatusEnum.PASS.getStatus(), StatusEnum.INVALID.getStatus());
|
|
|
|
|
if (!canRecallStatusSet.contains(knowledge.getStatus())) {
|
|
|
|
|
throw new BusinessException("该知识状态不能撤回");
|
|
|
|
|
}
|
|
|
|
|
// TODO 走撤回流程
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public KnowledgeDetailResVO queryKnowledgeDetail(String knowledgeId) {
|
|
|
|
|
Knowledge knowledge = knowledgeService.getOptById(knowledgeId).orElseThrow(() -> new BusinessException("未找到知识"));
|
|
|
|
|
KnowledgeBaseInfo knowledgeBaseInfo = knowledgeBaseInfoService.lambdaQuery().eq(KnowledgeBaseInfo::getKnowledgeId, knowledgeId).oneOpt().orElse(new KnowledgeBaseInfo());
|
|
|
|
|
KnowledgeContext knowledgeContext = knowledgeContextService.getOptById(knowledge.getContentId()).orElse(new KnowledgeContext());
|
|
|
|
|
List<KnowledgeLink> knowledgeLinkList = knowledgeLinkService.lambdaQuery().eq(KnowledgeLink::getKnowledgeId, knowledgeId).list();
|
|
|
|
|
List<KnowledgeAttachment> knowledgeAttachmentList = knowledgeAttachmentService.lambdaQuery().eq(KnowledgeAttachment::getKnowledgeId, knowledgeId).list();
|
|
|
|
|
List<String> fileIdList = knowledgeAttachmentList.stream().map(KnowledgeAttachment::getFileId).toList();
|
|
|
|
|
List<FileInfo> fileInfos = fileService.listByFileId(fileIdList);
|
|
|
|
|
return new KnowledgeDetailResVO(knowledge, knowledgeBaseInfo, knowledgeContext, knowledgeLinkList, fileInfos);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
|
|
public void deleteKnowledge(String knowledgeId) {
|
|
|
|
|
// 删除是逻辑删除,如果当前状态是草稿,且没有走过审批流程,则可以直接删除
|
|
|
|
|
Knowledge knowledge = knowledgeService.getOptById(knowledgeId).orElseThrow(() -> new BusinessException("未找到知识"));
|
|
|
|
|
if (Objects.equals(StatusEnum.DRAFT.getStatus(), knowledge.getStatus())) {
|
|
|
|
|
// 需要判断之前是否走过审批流程
|
|
|
|
|
if (flowRecordService.lambdaQuery().eq(KnowledgeFlowRecord::getKnowledgeId, knowledgeId).count() == 0) {
|
|
|
|
|
// 如果没有走过审批的记录,则可以直接删除
|
|
|
|
|
knowledgeService.removeById(knowledgeId);
|
|
|
|
|
knowledgeBaseInfoService.lambdaUpdate().eq(KnowledgeBaseInfo::getKnowledgeId, knowledgeId).remove();
|
|
|
|
|
knowledgeContextService.lambdaUpdate().eq(KnowledgeContext::getId, knowledge.getContentId()).remove();
|
|
|
|
|
// 删除文件
|
|
|
|
|
List<KnowledgeAttachment> list = knowledgeAttachmentService.lambdaQuery().eq(KnowledgeAttachment::getKnowledgeId, knowledgeId).list();
|
|
|
|
|
List<String> fileIdList = list.stream().map(KnowledgeAttachment::getFileId).toList();
|
|
|
|
|
fileService.listByFileId(fileIdList);
|
|
|
|
|
knowledgeAttachmentService.lambdaUpdate().eq(KnowledgeAttachment::getKnowledgeId, knowledgeId).remove();
|
|
|
|
|
} else {
|
|
|
|
|
// 如果有过审批记录,则直接修改状态为删除
|
|
|
|
|
knowledge.setStatus(StatusEnum.DELETE.getStatus());
|
|
|
|
|
knowledgeService.updateById(knowledge);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 如果非草稿,则校验是否是通过/驳回/已失效状态,如果是,则需要走审批流程进行删除
|
|
|
|
|
Set<Integer> canDeleteStatusSet = Set.of(StatusEnum.PASS.getStatus(), StatusEnum.REJECT.getStatus(), StatusEnum.INVALID.getStatus());
|
|
|
|
|
if (canDeleteStatusSet.contains(knowledge.getStatus())) {
|
|
|
|
|
// TODO 这时需要走审批流程进行删除
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
throw new BusinessException("审批中的知识不支持删除");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|