Browse Source

处理流程终止

TANG JIANG 2 năm trước cách đây
mục cha
commit
e0837f1ee9

+ 23 - 2
src/Hotline.Application/Handlers/FlowEngine/TerminalWorkflowHandler.cs

@@ -1,15 +1,36 @@
-using Hotline.FlowEngine.Notifications;
+using Hotline.CallCenter.Tels;
+using Hotline.FlowEngine.Notifications;
+using Hotline.KnowledgeBase;
+using Hotline.Orders;
+using Hotline.Settings;
 using MediatR;
 
 namespace Hotline.Application.Handlers.FlowEngine;
 
 public class TerminalWorkflowHandler : INotificationHandler<TerminalWorkflowNotify>
 {
+
+    private readonly IKnowledgeDomainService _knowledgeDomainService;
+    public TerminalWorkflowHandler(IKnowledgeDomainService knowledgeDomainService)
+    {
+        _knowledgeDomainService = knowledgeDomainService;
+    }
+
     /// <summary>Handles a notification</summary>
     /// <param name="notification">The notification</param>
     /// <param name="cancellationToken">Cancellation token</param>
     public async Task Handle(TerminalWorkflowNotify notification, CancellationToken cancellationToken)
     {
-        
+        var workflow = notification.Workflow;
+
+        switch (workflow.ModuleCode)
+        {
+            case WorkflowModuleConsts.KnowledgeAdd://新增知识库
+            case WorkflowModuleConsts.KnowledgeDelete://删除知识库
+                await _knowledgeDomainService.TerminateWorkKnowledge(workflow, cancellationToken);
+                break;
+
+
+        }
     }
 }

+ 9 - 0
src/Hotline/KnowledgeBase/IKnowledgeDomainService.cs

@@ -64,6 +64,15 @@ namespace Hotline.KnowledgeBase
         /// <returns></returns>
         Task<List<string>> GetKeyWord();
 
+        /// <summary>
+        /// 流程终止,处理知识状态
+        /// </summary>
+        /// <param name="workflow"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        /// <exception cref="UserFriendlyException"></exception>
+        Task TerminateWorkKnowledge(Workflow workflow, CancellationToken cancellationToken);
+
         /// <summary>
         /// 流程审批完成,处理知识状态
         /// </summary>

+ 64 - 24
src/Hotline/KnowledgeBase/KnowledgeDomainService.cs

@@ -17,7 +17,6 @@ namespace Hotline.KnowledgeBase
         private readonly IKnowledgePVRepository _knowledgePVRepository;
         private readonly IKnowledgeWorkFlowRepository _knowledgeWorkFlowRepository;
         private readonly IWorkflowDomainService _workflowDomainService;
-        private readonly IKnowledgeApplyRepository _knowledgeApplyRepository;
 
         /// <summary>
         /// 
@@ -28,14 +27,13 @@ namespace Hotline.KnowledgeBase
         /// <param name="knowledgeWorkFlowRepository"></param>
         /// <param name="workflowDomainService"></param>
         public KnowledgeDomainService(IKnowledgeRepository knowledgeRepository, IMapper mapper, IKnowledgePVRepository knowledgePVRepository, IKnowledgeWorkFlowRepository knowledgeWorkFlowRepository
-           , IWorkflowDomainService workflowDomainService, IKnowledgeApplyRepository knowledgeApplyRepository)
+           , IWorkflowDomainService workflowDomainService)
         {
             _knowledgeRepository = knowledgeRepository;
             _mapper = mapper;
             _knowledgePVRepository = knowledgePVRepository;
             _knowledgeWorkFlowRepository = knowledgeWorkFlowRepository;
             _workflowDomainService = workflowDomainService;
-            _knowledgeApplyRepository = knowledgeApplyRepository;
         }
 
         /// <summary>
@@ -184,29 +182,32 @@ namespace Hotline.KnowledgeBase
             if (knowWorkFlow.WorkFlowApplyStatus != EKnowledgeWorkFlowStatus.Auditing)
                 throw UserFriendlyException.SameMessage("只有审批中的知识才能撤回!");
 
-            knowWorkFlow.WorkFlowApplyStatus = EKnowledgeWorkFlowStatus.Revoke;
-            await _knowledgeWorkFlowRepository.UpdateAsync(knowWorkFlow);
-
-            switch (knowWorkFlow.WorkflowModuleStatus)
-            {
-                case EKnowledgeApplyType.Add:
-                    //查询知识
-                    var knowledge = await _knowledgeRepository.GetAsync(p => p.WorkflowId == workFlowId, cancellationToken);
-                    if (knowledge != null)
-                    {
-                        //将知识保存到草稿箱
-                        var tempKnow = _mapper.Map<Knowledge>(knowledge);
-                        tempKnow.Id = null;
-                        await _knowledgeRepository.AddAsync(tempKnow, cancellationToken);
-
-                        knowledge.Status = EKnowledgeStatus.Revert;
-                        //删除现有知识
-                        await _knowledgeRepository.UpdateAsync(knowledge, cancellationToken);
-                    }
-                    break;
-            }
             //调用终止流程
             await _workflowDomainService.TerminateAsync(workFlowId, cancellationToken);
+            //业务放到消息通知里面处理
+            ////修改业务数据状态
+            //knowWorkFlow.WorkFlowApplyStatus = EKnowledgeWorkFlowStatus.Revoke;
+            //await _knowledgeWorkFlowRepository.UpdateAsync(knowWorkFlow);
+
+            //switch (knowWorkFlow.WorkflowModuleStatus)
+            //{
+            //    case EKnowledgeApplyType.Add:
+            //        //查询知识
+            //        var knowledge = await _knowledgeRepository.GetAsync(p => p.WorkflowId == workFlowId, cancellationToken);
+            //        if (knowledge != null)
+            //        {
+            //            //将知识保存为草稿
+            //            var dto = _mapper.Map<AddKnowledgeDto>(knowledge);
+            //            dto.Status = EKnowledgeStatus.Drafts;
+            //            var tempKnow = _mapper.Map<Knowledge>(dto);
+            //            await _knowledgeRepository.AddAsync(tempKnow, cancellationToken);
+
+            //            knowledge.Status = EKnowledgeStatus.Revert;
+            //            //删除现有知识
+            //            await _knowledgeRepository.UpdateAsync(knowledge, cancellationToken);
+            //        }
+            //        break;
+            //}
         }
 
         /// <summary>
@@ -246,6 +247,45 @@ namespace Hotline.KnowledgeBase
             return strList.Distinct().Take(10).ToList();
         }
 
+        /// <summary>
+        /// 流程终止,处理知识状态
+        /// </summary>
+        /// <param name="workflow"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        /// <exception cref="UserFriendlyException"></exception>
+        public async Task TerminateWorkKnowledge(Workflow workflow, CancellationToken cancellationToken)
+        {
+            //修改主表审批状态  根据流程ID查询审批主表
+            var workFlow = await _knowledgeWorkFlowRepository.GetAsync(p => p.WorkflowId == workflow.Id, cancellationToken);
+            if (workFlow == null)
+                throw new UserFriendlyException($"知识查询失败, workflowId: {workflow.Id}", "无效流程编号");
+
+            //根据审批主表知识ID查询当前知识
+            var knowledge = await _knowledgeRepository.GetAsync(p => p.Id == workFlow.KnowledgeId, cancellationToken);
+            if (knowledge == null)
+                throw new UserFriendlyException($"知识查询失败");
+
+            //修改业务数据状态
+            workFlow.WorkFlowApplyStatus = EKnowledgeWorkFlowStatus.Revoke;
+            await _knowledgeWorkFlowRepository.UpdateAsync(workFlow);
+
+            switch (workFlow.WorkflowModuleStatus)
+            {
+                case EKnowledgeApplyType.Add:
+                    //将知识保存为草稿
+                    var dto = _mapper.Map<AddKnowledgeDto>(knowledge);
+                    dto.Status = EKnowledgeStatus.Drafts;
+                    var tempKnow = _mapper.Map<Knowledge>(dto);
+                    await _knowledgeRepository.AddAsync(tempKnow, cancellationToken);
+
+                    //现有知识状态更改为已撤回
+                    knowledge.Status = EKnowledgeStatus.Revert;
+                    await _knowledgeRepository.UpdateAsync(knowledge, cancellationToken);
+                    break;
+            }
+        }
+
         /// <summary>
         /// 流程审批完成,处理知识状态
         /// </summary>