|
@@ -1,5 +1,6 @@
|
|
|
using Hotline.Application.FlowEngine;
|
|
|
using Hotline.Application.Knowledge;
|
|
|
+using Hotline.FlowEngine.Definitions;
|
|
|
using Hotline.FlowEngine.Workflows;
|
|
|
using Hotline.KnowledgeBase;
|
|
|
using Hotline.KnowledgeBase.Notifies;
|
|
@@ -10,6 +11,7 @@ using Hotline.Share.Dtos;
|
|
|
using Hotline.Share.Dtos.FlowEngine;
|
|
|
using Hotline.Share.Dtos.Knowledge;
|
|
|
using Hotline.Share.Enums.KnowledgeBase;
|
|
|
+using Hotline.Share.Enums.Order;
|
|
|
using Hotline.Share.Requests;
|
|
|
using MapsterMapper;
|
|
|
using MediatR;
|
|
@@ -35,6 +37,7 @@ namespace Hotline.Api.Controllers
|
|
|
private readonly IWorkflowApplication _workflowApplication;
|
|
|
private readonly IKnowledgeWorkFlowRepository _knowledgeWorkFlowRepository;
|
|
|
private readonly IWorkflowDomainService _workflowDomainService;
|
|
|
+ private readonly IDefinitionDomainService _definitionDomainService;
|
|
|
|
|
|
/// <summary>
|
|
|
///
|
|
@@ -49,9 +52,11 @@ namespace Hotline.Api.Controllers
|
|
|
/// <param name="workflowApplication"></param>
|
|
|
/// <param name="knowledgeWorkFlowRepository"></param>
|
|
|
/// <param name="workflowDomainService"></param>
|
|
|
+ /// <param name="definitionDomainService"></param>
|
|
|
public KnowledgeController(IKnowledgeRepository knowledgeRepository, IKnowledgeTempRepository knowledgeTempRepository,
|
|
|
ISessionContext sessionContext, IKnowledgeDomainService knowledgeDomainService, IMapper mapper, IKnowApplication knowApplication,
|
|
|
- IMediator mediator, IWorkflowApplication workflowApplication, IKnowledgeWorkFlowRepository knowledgeWorkFlowRepository, IWorkflowDomainService workflowDomainService)
|
|
|
+ IMediator mediator, IWorkflowApplication workflowApplication, IKnowledgeWorkFlowRepository knowledgeWorkFlowRepository, IWorkflowDomainService workflowDomainService
|
|
|
+ , IDefinitionDomainService definitionDomainService)
|
|
|
{
|
|
|
_knowledgeRepository = knowledgeRepository;
|
|
|
_knowledgeTempRepository = knowledgeTempRepository;
|
|
@@ -63,6 +68,7 @@ namespace Hotline.Api.Controllers
|
|
|
_workflowApplication = workflowApplication;
|
|
|
_knowledgeWorkFlowRepository = knowledgeWorkFlowRepository;
|
|
|
_workflowDomainService = workflowDomainService;
|
|
|
+ _definitionDomainService = definitionDomainService;
|
|
|
}
|
|
|
#region 草稿箱
|
|
|
/// <summary>
|
|
@@ -185,21 +191,7 @@ namespace Hotline.Api.Controllers
|
|
|
public async Task<string> AddKnowledge([FromBody] AddKnowledgeDto dto)
|
|
|
{
|
|
|
//知识处理逻辑
|
|
|
- var knowledgeId = await _knowledgeDomainService.KnowledgeAdd(dto, HttpContext.RequestAborted);
|
|
|
- //处理流程
|
|
|
- if (!string.IsNullOrEmpty(knowledgeId))
|
|
|
- {
|
|
|
- //调用流程创建
|
|
|
- var workFlowId = await _workflowApplication.StartWorkflowAsync(dto.StartWorkflowDto, HttpContext.RequestAborted);
|
|
|
-
|
|
|
- //知识审批主表
|
|
|
- await _knowledgeDomainService.AddWorkFlow(knowledgeId, workFlowId, EKnowledgeApplyType.Add, HttpContext.RequestAborted);
|
|
|
-
|
|
|
- //修改流程ID
|
|
|
- await _knowledgeDomainService.UpdateWorkFlowId(knowledgeId, workFlowId, HttpContext.RequestAborted);
|
|
|
-
|
|
|
- }
|
|
|
- return knowledgeId;
|
|
|
+ return await _knowledgeDomainService.KnowledgeAdd(dto, HttpContext.RequestAborted);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -209,56 +201,44 @@ namespace Hotline.Api.Controllers
|
|
|
/// <returns></returns>
|
|
|
[Permission(EPermission.KnowledgeUpdate)]
|
|
|
[HttpPut("update")]
|
|
|
- public async Task UpdateKnowledge([FromBody] UpdateKnowledgeDto dto)
|
|
|
+ public async Task<string> UpdateKnowledge([FromBody] UpdateKnowledgeDto dto)
|
|
|
{
|
|
|
//知识更新流程业务
|
|
|
- var knowId = await _knowledgeDomainService.KnowledgeUpdate(dto, HttpContext.RequestAborted);
|
|
|
- if (!string.IsNullOrEmpty(knowId))
|
|
|
- {
|
|
|
- //调用流程创建
|
|
|
- var workFlowId = await _workflowApplication.StartWorkflowAsync(dto.StartWorkflowDto, HttpContext.RequestAborted);
|
|
|
-
|
|
|
- //知识审批主表
|
|
|
- await _knowledgeDomainService.AddWorkFlow(knowId, workFlowId, EKnowledgeApplyType.Update, HttpContext.RequestAborted);
|
|
|
-
|
|
|
- //修改流程ID
|
|
|
- await _knowledgeDomainService.UpdateWorkFlowId(knowId, workFlowId, HttpContext.RequestAborted);
|
|
|
-
|
|
|
- }
|
|
|
+ return await _knowledgeDomainService.KnowledgeUpdate(dto, HttpContext.RequestAborted);
|
|
|
+
|
|
|
}
|
|
|
|
|
|
- /// <summary>
|
|
|
- /// 知识库-删除
|
|
|
- /// </summary>
|
|
|
- /// <param name="Id"></param>
|
|
|
- /// <param name="workDto"></param>
|
|
|
- /// <returns></returns>
|
|
|
- [Permission(EPermission.KnowledgeDelete)]
|
|
|
- [HttpPost("remove")]
|
|
|
- public async Task RemoveKnowledge(string Id, [FromBody] StartWorkflowDto workDto)
|
|
|
- {
|
|
|
- var know = await _knowledgeRepository.GetAsync(Id, HttpContext.RequestAborted);
|
|
|
- if (know != null && know.IsDeleted == false)
|
|
|
- {
|
|
|
- //验证是否已经发起过知识删除流程
|
|
|
- var exists = _knowledgeWorkFlowRepository.GetAsync(p => p.KnowledgeId == know.Id && p.WorkflowModuleStatus == EKnowledgeApplyType.Delete
|
|
|
- && (p.WorkFlowApplyStatus != EKnowledgeWorkFlowStatus.Success || p.WorkFlowApplyStatus != EKnowledgeWorkFlowStatus.Failed));
|
|
|
- if (exists != null)
|
|
|
- throw UserFriendlyException.SameMessage($"该知识已发起过{WorkflowModule.Modules[WorkflowModuleConsts.KnowledgeDelete]}流程");
|
|
|
-
|
|
|
- //调用流程创建
|
|
|
- var workFlowId = await _workflowApplication.StartWorkflowAsync(workDto, HttpContext.RequestAborted);
|
|
|
-
|
|
|
- //知识审批主表
|
|
|
- await _knowledgeDomainService.AddWorkFlow(know.Id, workFlowId, EKnowledgeApplyType.Delete, HttpContext.RequestAborted);
|
|
|
-
|
|
|
- ////修改知识对应流程
|
|
|
- //know.WorkflowId = workFlowId;
|
|
|
- //await _knowledgeRepository.UpdateAsync(know, HttpContext.RequestAborted);
|
|
|
- }
|
|
|
- else
|
|
|
- throw UserFriendlyException.SameMessage("知识删除失败");
|
|
|
- }
|
|
|
+ ///// <summary>
|
|
|
+ ///// 知识库-删除
|
|
|
+ ///// </summary>
|
|
|
+ ///// <param name="Id"></param>
|
|
|
+ ///// <param name="workDto"></param>
|
|
|
+ ///// <returns></returns>
|
|
|
+ //[Permission(EPermission.KnowledgeDelete)]
|
|
|
+ //[HttpPost("remove")]
|
|
|
+ //public async Task RemoveKnowledge(string Id, [FromBody] StartWorkflowDto workDto)
|
|
|
+ //{
|
|
|
+ // var know = await _knowledgeRepository.GetAsync(Id, HttpContext.RequestAborted);
|
|
|
+ // if (know != null && know.IsDeleted == false)
|
|
|
+ // {
|
|
|
+ // //验证是否已经发起过知识删除流程
|
|
|
+ // var exists = _knowledgeWorkFlowRepository.GetAsync(p => p.KnowledgeId == know.Id && p.WorkflowModuleStatus == EKnowledgeApplyType.Delete
|
|
|
+ // && (p.WorkFlowApplyStatus != EKnowledgeWorkFlowStatus.Success || p.WorkFlowApplyStatus != EKnowledgeWorkFlowStatus.Failed));
|
|
|
+ // if (exists != null)
|
|
|
+ // throw UserFriendlyException.SameMessage($"该知识已发起过{WorkflowModule.Modules[WorkflowModuleConsts.KnowledgeDelete]}流程");
|
|
|
+
|
|
|
+ // //调用流程创建
|
|
|
+ // var workFlowId = await _workflowApplication.StartWorkflowAsync(workDto, HttpContext.RequestAborted);
|
|
|
+
|
|
|
+ // //知识审批主表
|
|
|
+ // await _knowledgeDomainService.AddWorkFlow(know.Id, workFlowId, EKnowledgeApplyType.Delete, HttpContext.RequestAborted);
|
|
|
+
|
|
|
+ // }
|
|
|
+ // else
|
|
|
+ // throw UserFriendlyException.SameMessage("知识删除失败");
|
|
|
+ //}
|
|
|
+
|
|
|
+
|
|
|
|
|
|
/// <summary>
|
|
|
/// 知识库-知识下架
|
|
@@ -535,5 +515,121 @@ namespace Hotline.Api.Controllers
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
+ #region 流程相关
|
|
|
+ /// <summary>
|
|
|
+ /// 新增-开始流程
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="id">知识id</param>
|
|
|
+ /// <param name="dto">流程开启参数</param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost("{id}/add-startflow")]
|
|
|
+ public async Task AddStartFlow(string id, [FromBody] StartWorkflowDto dto)
|
|
|
+ {
|
|
|
+ await StartFlow(id, WorkflowModuleConsts.KnowledgeAdd, EKnowledgeApplyType.Add, dto);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 修改-开始流程
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="id">知识id</param>
|
|
|
+ /// <param name="dto">流程开启参数</param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost("{id}/update-startflow")]
|
|
|
+ public async Task UpdateStartFlow(string id, [FromBody] StartWorkflowDto dto)
|
|
|
+ {
|
|
|
+ await StartFlow(id, WorkflowModuleConsts.KnowledgeUpdate, EKnowledgeApplyType.Update, dto);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 删除-开始流程
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="id">知识id</param>
|
|
|
+ /// <param name="dto">流程开启参数</param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost("{id}/remove-startflow")]
|
|
|
+ public async Task RemoveStartFlow(string id, [FromBody] StartWorkflowDto dto)
|
|
|
+ {
|
|
|
+ await StartFlow(id, WorkflowModuleConsts.KnowledgeDelete, EKnowledgeApplyType.Delete, dto);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 查询知识库办理流程开启参数-新增
|
|
|
+ /// </summary>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("add-flow-start")]
|
|
|
+ public async Task<IReadOnlyList<NextStepOptions>> GetAddFlowStartOptionsAsync()
|
|
|
+ {
|
|
|
+ return await _workflowApplication.GetStartOptionsAsync(WorkflowModuleConsts.KnowledgeAdd, HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 查询知识库办理流程开启参数-修改
|
|
|
+ /// </summary>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("update-flow-start")]
|
|
|
+ public async Task<IReadOnlyList<NextStepOptions>> GetUpdateFlowStartOptionsAsync()
|
|
|
+ {
|
|
|
+ return await _workflowApplication.GetStartOptionsAsync(WorkflowModuleConsts.KnowledgeUpdate, HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 查询知识库办理流程开启参数-删除
|
|
|
+ /// </summary>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("remove-flow-start")]
|
|
|
+ public async Task<IReadOnlyList<NextStepOptions>> GetRemoveFlowStartOptionsAsync()
|
|
|
+ {
|
|
|
+ return await _workflowApplication.GetStartOptionsAsync(WorkflowModuleConsts.KnowledgeDelete, HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ #region 私有方法-开始流程
|
|
|
+ /// <summary>
|
|
|
+ /// 开始流程
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="id">知识ID</param>
|
|
|
+ /// <param name="moduleCode">知识模板编号</param>
|
|
|
+ /// <param name="eKnowledgeApplyType">申请类型</param>
|
|
|
+ /// <param name="dto">流程开启参数</param>
|
|
|
+ /// <returns></returns>
|
|
|
+ private async Task StartFlow(string id, string moduleCode, EKnowledgeApplyType eKnowledgeApplyType, StartWorkflowDto dto)
|
|
|
+ {
|
|
|
+ var knowledge = await _knowledgeRepository.GetAsync(id, HttpContext.RequestAborted);
|
|
|
+ if (knowledge == null)
|
|
|
+ throw UserFriendlyException.SameMessage("无效知识编号");
|
|
|
+
|
|
|
+ if (eKnowledgeApplyType == EKnowledgeApplyType.Delete)
|
|
|
+ {
|
|
|
+ if (knowledge.IsDeleted==true)
|
|
|
+ throw UserFriendlyException.SameMessage("知识删除失败");
|
|
|
+
|
|
|
+ //验证是否已经发起过知识删除流程
|
|
|
+ var exists = _knowledgeWorkFlowRepository.GetAsync(p => p.KnowledgeId == knowledge.Id && p.WorkflowModuleStatus == EKnowledgeApplyType.Delete
|
|
|
+ && (p.WorkFlowApplyStatus == EKnowledgeWorkFlowStatus.Success || p.WorkFlowApplyStatus == EKnowledgeWorkFlowStatus.Auditing));
|
|
|
+ if (exists != null)
|
|
|
+ throw UserFriendlyException.SameMessage($"该知识已发起过{WorkflowModule.Modules[WorkflowModuleConsts.KnowledgeDelete]}流程");
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!string.IsNullOrEmpty(knowledge.WorkflowId) && eKnowledgeApplyType != EKnowledgeApplyType.Delete)
|
|
|
+ throw UserFriendlyException.SameMessage("知识已发起流程");
|
|
|
+
|
|
|
+ var definition = await _definitionDomainService.GetLastEnableByModuleCodeAsync(
|
|
|
+ moduleCode, HttpContext.RequestAborted);
|
|
|
+ if (definition is null)
|
|
|
+ throw UserFriendlyException.SameMessage("未配置流程模板");
|
|
|
+
|
|
|
+ dto.DefinitionCode = definition.Code;
|
|
|
+ dto.Title = knowledge.Title;
|
|
|
+ var workflowId = await _workflowApplication.StartWorkflowAsync(dto, HttpContext.RequestAborted);
|
|
|
+
|
|
|
+ //知识审批主表
|
|
|
+ await _knowledgeDomainService.AddWorkFlow(id, workflowId, eKnowledgeApplyType, HttpContext.RequestAborted);
|
|
|
+
|
|
|
+ if (eKnowledgeApplyType != EKnowledgeApplyType.Delete)
|
|
|
+ //修改流程ID
|
|
|
+ await _knowledgeDomainService.UpdateWorkFlowId(id, workflowId, HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+ #endregion
|
|
|
+
|
|
|
}
|
|
|
}
|