Browse Source

fixed: 会签场景取汇总节点办理意见

xf 5 months ago
parent
commit
2636817e79
1 changed files with 39 additions and 4 deletions
  1. 39 4
      src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

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

@@ -2277,12 +2277,15 @@ namespace Hotline.FlowEngine.Workflows
             string? opinion = null;
             string? opinion = null;
             if (isAutoFillSummaryOpinion)
             if (isAutoFillSummaryOpinion)
             {
             {
+                //依据某节点作为根节点,查找最底层办理节点无论普通还是汇总节点
+                var preSteps = GetLastStepsFromRootStep(workflow.Steps, countersignStartStep);
+
                 var sb = new StringBuilder();
                 var sb = new StringBuilder();
-                foreach (var innerStep in csInnerSteps.OrderBy(d => d.HandleTime).ToList())
+                foreach (var prevStep in preSteps.OrderBy(d => d.HandleTime).ToList())
                 {
                 {
-                    sb.AppendLine($"【会签时间】:{innerStep.HandleTime?.ToString("yyyy-MM-dd HH:mm:ss")}");
-                    sb.AppendLine($"【会签人】:{innerStep.HandlerName}");
-                    sb.AppendLine($"【会签结果】:{innerStep.Opinion}");
+                    sb.AppendLine($"【会签时间】:{prevStep.HandleTime?.ToString("yyyy-MM-dd HH:mm:ss")}");
+                    sb.AppendLine($"【会签人】:{prevStep.HandlerName}");
+                    sb.AppendLine($"【会签结果】:{prevStep.Opinion}");
                     sb.AppendLine("");
                     sb.AppendLine("");
                 }
                 }
 
 
@@ -2304,6 +2307,38 @@ namespace Hotline.FlowEngine.Workflows
             return nextSteps;
             return nextSteps;
         }
         }
 
 
+        /// <summary>
+        /// 以某一节点作为根节点开始查找最底层办理节点(需求:自动填充汇总节点意见)
+        /// </summary>
+        private List<WorkflowStep> GetLastStepsFromRootStep(List<WorkflowStep> steps, WorkflowStep rootStep)
+        {
+            var lastSteps = new List<WorkflowStep>();
+            var nextSteps = steps.Where(d => d.PrevStepId == rootStep.Id).ToList();
+            foreach (var nextStep in nextSteps)
+            {
+                if (nextStep.IsStartCountersign)
+                {
+                    //find last csend
+                    var lastCsEndStep = GetLastCountersignEndStep(steps, nextStep);
+                    if (lastCsEndStep != null)
+                        lastSteps.Add(lastCsEndStep);
+                }
+                else
+                {
+                    lastSteps.Add(nextStep);
+                }
+            }
+
+            return lastSteps;
+        }
+
+        private WorkflowStep? GetLastCountersignEndStep(List<WorkflowStep> steps, WorkflowStep nextStep)
+        {
+            var csEndStep = steps.FirstOrDefault(d => d.CountersignStartStepId == nextStep.Id);
+            if (csEndStep == null) return null;
+            return !csEndStep.IsStartCountersign ? csEndStep : GetLastCountersignEndStep(steps, csEndStep);
+        }
+
         private async Task<WorkflowStep> CreateCountersignEndStepAsync(
         private async Task<WorkflowStep> CreateCountersignEndStepAsync(
             Workflow workflow, WorkflowStep countersignStartStep,
             Workflow workflow, WorkflowStep countersignStartStep,
             BasicWorkflowDto dto, DateTime? expiredTime, string? opinion = null,
             BasicWorkflowDto dto, DateTime? expiredTime, string? opinion = null,