|
@@ -1,4 +1,5 @@
|
|
|
using Hotline.FlowEngine.Workflows;
|
|
|
+using Hotline.Settings;
|
|
|
using Hotline.Share.Dtos.Knowledge;
|
|
|
using Hotline.Share.Enums.KnowledgeBase;
|
|
|
using MapsterMapper;
|
|
@@ -85,10 +86,6 @@ namespace Hotline.KnowledgeBase
|
|
|
kn.Status = EKnowledgeStatus.Auditing;
|
|
|
|
|
|
return await _knowledgeRepository.AddAsync(kn, cancellationToken);
|
|
|
- //调用流程创建
|
|
|
-
|
|
|
- //如果流程创建失败需要删除此条数据
|
|
|
- //await _knowledgeRepository.RemoveAsync(knowledge);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -96,7 +93,7 @@ namespace Hotline.KnowledgeBase
|
|
|
/// </summary>
|
|
|
/// <param name="dto"></param>
|
|
|
/// <returns></returns>
|
|
|
- public async Task KnowledgeUpdate(UpdateKnowledgeDto dto, CancellationToken cancellationToken)
|
|
|
+ public async Task<string> KnowledgeUpdate(UpdateKnowledgeDto dto, CancellationToken cancellationToken)
|
|
|
{
|
|
|
//知识修改逻辑
|
|
|
//如果可以修改,此条数据不动,重新写入一条新数据,知识编号不变,版本号+1
|
|
@@ -110,72 +107,114 @@ namespace Hotline.KnowledgeBase
|
|
|
|
|
|
var knowledge = _mapper.Map<Knowledge>(dto);
|
|
|
knowledge.Code = know.Code;
|
|
|
- knowledge.PageView = 0;
|
|
|
+ knowledge.PageView = know.PageView;
|
|
|
knowledge.Status = EKnowledgeStatus.Auditing;
|
|
|
knowledge.Id = "";
|
|
|
- knowledge.Version = know.Version + 1;
|
|
|
+ knowledge.Version = 0;
|
|
|
//新增一条数据
|
|
|
- await _knowledgeRepository.AddAsync(knowledge, cancellationToken);
|
|
|
-
|
|
|
- //调用流程创建
|
|
|
+ return await _knowledgeRepository.AddAsync(knowledge, cancellationToken);
|
|
|
|
|
|
- //如果流程创建失败需要删除此条数据
|
|
|
- //await _knowledgeRepository.RemoveAsync(knowledge);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
- /// 知识库-删除
|
|
|
+ /// 流程审批完成,处理知识状态
|
|
|
/// </summary>
|
|
|
- /// <param name="Id"></param>
|
|
|
+ /// <param name="workflow"></param>
|
|
|
+ /// <param name="cancellationToken"></param>
|
|
|
/// <returns></returns>
|
|
|
- public async Task KnowledgeDelete(string Id, CancellationToken cancellationToken)
|
|
|
+ /// <exception cref="UserFriendlyException"></exception>
|
|
|
+ public async Task EndWorkKnowledge(Workflow workflow, CancellationToken cancellationToken)
|
|
|
{
|
|
|
- var know = await _knowledgeRepository.GetAsync(Id, cancellationToken);
|
|
|
- if (know != null && know.IsDeleted == false)
|
|
|
+ var knowledge = await _knowledgeRepository.GetAsync(workflow.ExternalId, cancellationToken);
|
|
|
+ if (knowledge == null)
|
|
|
+ throw new UserFriendlyException($"知识查询失败, workflowId: {workflow.Id}", "无效流程编号");
|
|
|
+ switch (workflow.ModuleCode)
|
|
|
{
|
|
|
- //调用流程创建
|
|
|
+ case WorkflowModuleConsts.KnowledgeAdd://新增
|
|
|
+ //修改知识状态为已上架
|
|
|
+ knowledge.Status = EKnowledgeStatus.OnShelf;
|
|
|
+ knowledge.OnShelfTime = System.DateTime.Now;
|
|
|
+ await _knowledgeRepository.UpdateAsync(knowledge);
|
|
|
+ break;
|
|
|
+ case WorkflowModuleConsts.KnowledgeUpdate://修改
|
|
|
+ ////处理知识版本号
|
|
|
+ ////根据Code查询目前使用的版本号,版本号+1
|
|
|
+ //var oldKnowledge = await _knowledgeRepository
|
|
|
+ // .Queryable()
|
|
|
+ // .Where(p => p.Code == knowledge.Code && p.Status != EKnowledgeStatus.Auditing && p.Status != EKnowledgeStatus.Failed && p.IsDeleted == false)
|
|
|
+ // .OrderByDescending(p => p.Version)
|
|
|
+ // .Take(1)
|
|
|
+ // .FirstAsync();
|
|
|
+ //if (oldKnowledge == null)
|
|
|
+ // knowledge.Version = 1;
|
|
|
+ //else
|
|
|
+ // knowledge.Version = oldKnowledge.Version + 1;
|
|
|
+ ////修改知识状态为已上架
|
|
|
+ //knowledge.Status = EKnowledgeStatus.OnShelf;
|
|
|
+ //knowledge.OnShelfTime = System.DateTime.Now;
|
|
|
+ //await _knowledgeRepository.UpdateAsync(knowledge);
|
|
|
+ await KnowledgeUpdate(knowledge);
|
|
|
+ break;
|
|
|
+
|
|
|
+ case WorkflowModuleConsts.KnowledgeDelete://删除
|
|
|
+ ////知识先下架,在删除
|
|
|
+ //knowledge.Status = EKnowledgeStatus.OffShelf;
|
|
|
+ //knowledge.OffShelfTime = System.DateTime.Now;
|
|
|
+ //await _knowledgeRepository.UpdateAsync(knowledge);
|
|
|
+ //删除知识
|
|
|
+ await _knowledgeRepository.RemoveAsync(p => p.Code == knowledge.Code, true, cancellationToken);
|
|
|
+ break;
|
|
|
}
|
|
|
- else
|
|
|
- throw UserFriendlyException.SameMessage("知识删除失败");
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
- /// 审批操作
|
|
|
+ /// 交换数据、为了保持浏览记录等数据的存在
|
|
|
/// </summary>
|
|
|
- /// <param name="Ids">需要审批的数据ID</param>
|
|
|
- /// <param name="ApprovalStatus">审核状态:0:通过;1:不通过</param>
|
|
|
- /// <param name="HandleOpinions">办理意见</param>
|
|
|
+ /// <param name="knowledge"></param>
|
|
|
/// <returns></returns>
|
|
|
- public async Task ApprovalHandle(List<string> Ids, string ApprovalStatus, string HandleOpinions, CancellationToken cancellationToken)
|
|
|
+ private async Task KnowledgeUpdate(Knowledge knowledge)
|
|
|
{
|
|
|
- //审批操作
|
|
|
- foreach (var item in Ids)
|
|
|
+ var Version = 1;
|
|
|
+ //处理知识版本号
|
|
|
+ //根据Code查询目前使用的版本号,版本号+1
|
|
|
+ var oldKnowledge = await _knowledgeRepository
|
|
|
+ .Queryable()
|
|
|
+ .Where(p => p.Code == knowledge.Code && p.Status != EKnowledgeStatus.Auditing && p.Status != EKnowledgeStatus.Failed && p.IsDeleted == false)
|
|
|
+ .OrderByDescending(p => p.Version)
|
|
|
+ .Take(1)
|
|
|
+ .FirstAsync();
|
|
|
+ //如果没查到历史版本,直接改当前的数据
|
|
|
+ if (oldKnowledge != null)
|
|
|
{
|
|
|
- var know = await _knowledgeRepository.GetAsync(item, cancellationToken);
|
|
|
- if (know != null)
|
|
|
- {
|
|
|
- var strWorkflowId = "";
|
|
|
- //调用流程审批接口
|
|
|
- //流程调用成功以后在处理以下业务
|
|
|
- //需要区分新增、修改、删除业务
|
|
|
- //处理数据
|
|
|
- if (ApprovalStatus == "0")
|
|
|
- {
|
|
|
- know.Status = EKnowledgeStatus.OnShelf;
|
|
|
- know.OnShelfTime = DateTime.Now;
|
|
|
- know.OffShelfTime = null;
|
|
|
- }
|
|
|
- else
|
|
|
- know.Status = EKnowledgeStatus.Failed;
|
|
|
-
|
|
|
- if (!string.IsNullOrEmpty(strWorkflowId))
|
|
|
- {
|
|
|
- know.WorkflowId = strWorkflowId;
|
|
|
- await _knowledgeRepository.UpdateAsync(know, cancellationToken);
|
|
|
- }
|
|
|
- }
|
|
|
+ Version = oldKnowledge.Version + 1; //已经查询到版本
|
|
|
+
|
|
|
+ //交换数据、为了保持浏览记录等数据的存在
|
|
|
+ var tempId = knowledge.Id;//最新审批通过的ID
|
|
|
+ var tempOldId = oldKnowledge.Id;//原始数据ID
|
|
|
+ var temp = oldKnowledge;//保存原始数据
|
|
|
+
|
|
|
+ _mapper.Map(knowledge, oldKnowledge);//最新数据赋值给原始数据
|
|
|
+ oldKnowledge.Id = tempOldId;//ID不变
|
|
|
+ oldKnowledge.Status = EKnowledgeStatus.OnShelf;//改变知识状态
|
|
|
+ oldKnowledge.OnShelfTime = System.DateTime.Now;//自动上架时间
|
|
|
+ oldKnowledge.OffShelfTime = null;
|
|
|
+ oldKnowledge.Version = Version;
|
|
|
+
|
|
|
+ _mapper.Map(temp, knowledge);
|
|
|
+ knowledge.Id = tempId;
|
|
|
+ await _knowledgeRepository.UpdateAsync(knowledge);
|
|
|
+ await _knowledgeRepository.UpdateAsync(oldKnowledge);
|
|
|
}
|
|
|
+ else
|
|
|
+ {
|
|
|
+ knowledge.Status = EKnowledgeStatus.OnShelf;
|
|
|
+ knowledge.OnShelfTime = System.DateTime.Now;
|
|
|
+ knowledge.OffShelfTime = null;
|
|
|
+ knowledge.Version = Version;
|
|
|
+ await _knowledgeRepository.UpdateAsync(knowledge);
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
- }
|
|
|
-}
|
|
|
|
|
|
+ }
|
|
|
+}
|