瀏覽代碼

修改流程发起

TANG JIANG 2 年之前
父節點
當前提交
d323c9cae5

+ 158 - 62
src/Hotline.Api/Controllers/KnowledgeController.cs

@@ -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
+
     }
 }

+ 2 - 0
src/Hotline/KnowledgeBase/Knowledge.cs

@@ -77,6 +77,7 @@ public class Knowledge : WorkflowEntity//   WorkflowEntity  FullStateEntity
     /// <summary>
     /// 关键词
     /// </summary>
+    [SugarColumn(IsNullable = true)]
     public string Keywords { get; set; }
 
     /// <summary>
@@ -95,6 +96,7 @@ public class Knowledge : WorkflowEntity//   WorkflowEntity  FullStateEntity
     /// </summary>
     //[SugarColumn(ColumnDataType = "varchar(1000)", IsJson = true)]
     //public List<string> Applies { get; set; }
+    [SugarColumn(IsNullable = true)]
     public string Applies { get; set; }
 
     /// <summary>

+ 1 - 0
src/Hotline/KnowledgeBase/KnowledgeApply.cs

@@ -14,6 +14,7 @@ public class KnowledgeApply : FullStateEntity
     /// <summary>
     /// 知识ID
     /// </summary>
+    [SugarColumn(IsNullable = true)]
     public string KnowledgeId { get; set; }
 
     /// <summary>