Jelajahi Sumber

add definition.SummaryTargetCode

xf 1 tahun lalu
induk
melakukan
903b960360

+ 8 - 4
src/Hotline.Application/FlowEngine/WorkflowApplication.cs

@@ -744,11 +744,15 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
             //汇总节点只能选择对应节点办理对象
             if (workflow.FlowType is EFlowType.Handle && stepDefine.StepType is EStepType.Summary)
             {
-                var prevStep = workflow.Steps.FirstOrDefault(d => d.Id == currentStep.PrevStepId);
-                if (prevStep is null)
+                //根据汇总对象id找到被汇总节点
+                var summaryTargetStep = workflow.Steps.FirstOrDefault(d =>
+                    d.Status == EWorkflowStepStatus.Handled &&
+                    d.StepType == EStepType.Normal && d.Code == stepDefine.SummaryTargetCode);
+                if(summaryTargetStep is null)
                     throw UserFriendlyException.SameMessage("未查询到汇总对象节点");
-                var handlers = prevStep.Handlers
-                    .Where(d => d.Key == prevStep.HandlerId || d.Key == prevStep.HandlerOrgId).ToList();
+                
+                var handlers = summaryTargetStep.Handlers
+                    .Where(d => d.Key == summaryTargetStep.HandlerId || d.Key == summaryTargetStep.HandlerOrgId).ToList();
 
                 nextStepOption = new NextStepOption
                 {

+ 5 - 0
src/Hotline.Share/Dtos/FlowEngine/Definition/StepDefineBasic.cs

@@ -94,6 +94,11 @@ namespace Hotline.Share.Dtos.FlowEngine.Definition
         /// </summary>
         public string? Tag { get; set; }
 
+        /// <summary>
+        /// 汇总目标节点code
+        /// </summary>
+        public string? SummaryTargetCode { get; set; }
+
         /// <summary>
         /// 可跳转节点
         /// </summary>

+ 4 - 2
src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

@@ -419,7 +419,7 @@ namespace Hotline.FlowEngine.Workflows
                 await _workflowStepRepository.UpdateAsync(currentStep, cancellationToken);
             }
 
-            //更新办理(nextSteps无元素表示当前节点为会签办理节点且当前会签没有全部办理完成)
+            //更新办理对象(nextSteps无元素表示当前节点为会签办理节点且当前会签没有全部办理完成)
             workflow.UpdateHandlers(_sessionContext.RequiredUserId, _sessionContext.RequiredOrgId,
                 flowAssignInfo.FlowAssignType, flowAssignInfo.HandlerObjects, nextSteps.Any());
 
@@ -1695,6 +1695,9 @@ namespace Hotline.FlowEngine.Workflows
                 if (workflow.CheckIfCountersignOver())
                     workflow.EndCountersign();
 
+                
+                await _workflowRepository.UpdateAsync(workflow, cancellationToken);
+
                 await _workflowCountersignRepository.UpdateRangeAsync(updateCountersigns, cancellationToken);
             }
 
@@ -1702,7 +1705,6 @@ namespace Hotline.FlowEngine.Workflows
             //1. create terminal trace 2. 撤回至startStep
             await DuplicateStepWithTraceAsync(workflow, startCountersignStep, EWorkflowTraceStatus.Normal, cancellationToken);
 
-            await _workflowRepository.UpdateAsync(workflow, cancellationToken);
 
             return workflow;
         }