xf 1 ano atrás
pai
commit
debe04fdbf

+ 1 - 1
src/Hotline.Application/FlowEngine/IWorkflowApplication.cs

@@ -78,7 +78,7 @@ namespace Hotline.Application.FlowEngine
         /// <summary>
         /// 查询办理流程的下一步待选节点
         /// </summary>
-        Task<NextStepsDto<NextStepOption>> GetNextStepsAsync(string workflowId, CancellationToken cancellationToken);
+        Task<NextStepsWithOpinionDto<NextStepOption>> GetNextStepsAsync(string workflowId, CancellationToken cancellationToken);
 
         /// <summary>
         /// 查询撤回可选节点

+ 24 - 6
src/Hotline.Application/FlowEngine/WorkflowApplication.cs

@@ -28,6 +28,7 @@ using XF.Domain.Repository;
 using XF.Utility.EnumExtensions;
 using Hotline.Share.Dtos.File;
 using Microsoft.Extensions.Logging;
+using System.Text;
 
 namespace Hotline.Application.FlowEngine;
 
@@ -540,7 +541,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
     /// <summary>
     /// 查询办理流程的下一步待选节点
     /// </summary>
-    public async Task<NextStepsDto<NextStepOption>> GetNextStepsAsync(string workflowId, CancellationToken cancellationToken)
+    public async Task<NextStepsWithOpinionDto<NextStepOption>> GetNextStepsAsync(string workflowId, CancellationToken cancellationToken)
     {
         var workflow = await _workflowDomainService.GetWorkflowAsync(workflowId, withDefine: true, withSteps: true,
             cancellationToken: cancellationToken);
@@ -550,7 +551,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         if (currentStep.StepType is EStepType.End)
             throw new UserFriendlyException("结束节点无需办理");
 
-        var dto = new NextStepsDto<NextStepOption>
+        var dto = new NextStepsWithOpinionDto<NextStepOption>
         {
             CanReject = workflow.IsReviewType() && currentStep.CanReject,
             //ExpiredTime = workflow.ExpiredTime,
@@ -577,6 +578,17 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         {
             if (currentStep.IsCountersignEndStep)
             {
+                // 会签汇总节点展示会签办理节点办理意见
+                var countersignHandleSteps = workflow.Steps.Where(d =>
+                        d.CountersignId == currentStep.CountersignId &&
+                        d.CountersignPosition == ECountersignPosition.Inner).ToList();
+                var sb = new StringBuilder();
+                foreach (var countersignHandleStep in countersignHandleSteps)
+                {
+                    sb.AppendLine($"{countersignHandleStep.GetActualHandler()?.GetHandler().Value} : {countersignHandleStep.Opinion}");
+                }
+                dto.Opinion = sb.ToString();
+
                 //当前待办节点为会签汇总节点时:检查是否为顶级会签汇总节点,t:按配置往下走,f:继续往上汇总,不需要重复往下指派
                 if (!currentStep.IsTopCountersignEndStep(workflow.TopCountersignStepId))
                 {
@@ -590,10 +602,8 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
                     var countersignEndOption = GetCsEndStepByPrev(workflow.Steps, startCountersignStep);
 
                     //按会签策略
-                    var nextStepOption =
-                        await GetDynamicStepAsync(currentStep.CountersignPolicy.Value, currentStep.StepType,
-                            currentStep.BusinessType,
-                            cancellationToken);
+                    var nextStepOption = await GetDynamicStepAsync(currentStep.CountersignPolicy.Value,
+                        currentStep.StepType, currentStep.BusinessType, cancellationToken);
 
                     dto.Steps = new List<NextStepOption> { nextStepOption, countersignEndOption };
                     return dto;
@@ -618,6 +628,14 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
 
         dto.Steps = await GetConfigStepsAsync(workflow, currentStep, nextDefines, cancellationToken);
 
+        if (currentStep.StepType is EStepType.Summary &&
+            !currentStep.IsCountersignEndStep &&
+            string.IsNullOrEmpty(dto.Opinion))
+        {
+            var prevStep = workflow.Steps.FirstOrDefault(d => d.Id == currentStep.PrevStepId);
+            dto.Opinion = $"{prevStep?.GetActualHandler()?.GetHandler().Value}";
+        }
+
         return dto;
     }
 

+ 7 - 5
src/Hotline.Share/Dtos/FlowEngine/NextStepsDto.cs

@@ -36,10 +36,12 @@ public class NextStepsDto<TSteps> : NextStepsDto
     public List<TSteps> Steps { get; set; }
 }
 
-public class GetNextStepItemsDto
+public class NextStepsWithOpinionDto<TSteps> : NextStepsDto<TSteps>
 {
-    public string DefinitionId { get; set; }
-    public EInstanceMode InstanceMode { get; set; }
-    public EDynamicPolicy DynamicPolicy { get; set; }
-    public NextStepOption Step { get; set; }
+    /// <summary>
+    /// 宜宾需求:汇总节点办理前展示前一节点办理意见
+    /// </summary>
+    public string? Opinion { get; set; }
 }
+
+

+ 8 - 29
src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

@@ -463,8 +463,8 @@ namespace Hotline.FlowEngine.Workflows
 
             //赋值当前节点的下级办理节点
             if (dto.IsStartCountersign
-                //|| (currentStep.IsInCountersign() &&
-                //    !currentStep.IsTopCountersignEndStep(workflow.TopCountersignStepId))
+               //|| (currentStep.IsInCountersign() &&
+               //    !currentStep.IsTopCountersignEndStep(workflow.TopCountersignStepId))
                )
             {
                 currentStep.CreateCountersignSteps(nextSteps);
@@ -1422,18 +1422,9 @@ namespace Hotline.FlowEngine.Workflows
             //会签未全部办理则不创建汇总节点
             if (prevStep.StartedCountersignHasAllHandled())
             {
-                // 会签汇总节点赋值会签办理节点办理意见
-                var countersignHandleSteps = workflow.Steps.Where(d =>
-                    d.CountersignId == prevStep.StartCountersignId && d.CountersignPosition == ECountersignPosition.Inner).ToList();
-                var sb = new StringBuilder();
-                foreach (var countersignHandleStep in countersignHandleSteps)
-                {
-                    sb.AppendLine($"{countersignHandleStep.GetActualHandler()?.GetHandler().Value} : {countersignHandleStep.Opinion}");
-                }
-
                 // 创建会签汇总节点
                 var countersignEndStep =
-                    await CreateCountersignEndStepAsync(prevStep, dto, expiredTime, sb.ToString(), cancellationToken);
+                    await CreateCountersignEndStepAsync(prevStep, dto, expiredTime, cancellationToken);
                 nextSteps = new List<WorkflowStep> { countersignEndStep };
 
                 //create trace
@@ -1446,7 +1437,7 @@ namespace Hotline.FlowEngine.Workflows
         }
 
         private async Task<WorkflowStep> CreateCountersignEndStepAsync(WorkflowStep countersignStartStep,
-            BasicWorkflowDto dto, DateTime? expiredTime, string? opinion = null, CancellationToken cancellationToken = default)
+            BasicWorkflowDto dto, DateTime? expiredTime, CancellationToken cancellationToken = default)
         {
             var csEndStep = _mapper.Map<WorkflowStep>(countersignStartStep);
             csEndStep.Status = EWorkflowStepStatus.WaitForAccept;
@@ -1468,9 +1459,6 @@ namespace Hotline.FlowEngine.Workflows
             csEndStep.Reset();
             csEndStep.ResetParameters();
 
-            if (!string.IsNullOrEmpty(opinion))
-                csEndStep.Opinion = opinion;
-
             await _workflowStepRepository.AddAsync(csEndStep, cancellationToken);
             return csEndStep;
         }
@@ -1917,13 +1905,9 @@ namespace Hotline.FlowEngine.Workflows
                 }
             }
 
-            var opinion = stepDefine.StepType is EStepType.Summary
-                ? $"{prevStep.GetActualHandler()?.GetHandler().Value} : {prevStep.Opinion}"
-                : null;
-
             return await CreateStepsAsync(workflow, stepDefine, prevStep, dto, flowAssignInfo.FlowAssignType, handlers,
                 stepHandlers, null, EWorkflowStepStatus.WaitForAccept, ECountersignPosition.None,
-                true, traceStatus, null, expiredTime, opinion, cancellationToken);
+                true, traceStatus, null, expiredTime, cancellationToken);
         }
 
         private async Task<List<WorkflowStep>> CreateStepsAsync(
@@ -1941,7 +1925,6 @@ namespace Hotline.FlowEngine.Workflows
             EWorkflowTraceStatus traceStatus,
             EHandlerType? handlerType = null,
             DateTime? expiredTime = null,
-            string? opinion = null,
             CancellationToken cancellationToken = default
         )
         {
@@ -1952,7 +1935,7 @@ namespace Hotline.FlowEngine.Workflows
                 {
                     var step = CreateStep(workflow, stepDefine, prevStep, flowAssignType, new List<Kv> { handler },
                         stepHandlers, dto.NextStepCode, dto.NextMainHandler, countersignId,
-                        stepStatus, csPosition, expiredTime, dto.NextStepName, isOrigin, handlerType, opinion);
+                        stepStatus, csPosition, expiredTime, dto.NextStepName, isOrigin, handlerType);
 
                     steps.Add(step);
                 }
@@ -1961,7 +1944,7 @@ namespace Hotline.FlowEngine.Workflows
             {
                 var step = CreateStep(workflow, stepDefine, prevStep, flowAssignType, handlers, stepHandlers,
                     dto.NextStepCode, dto.NextMainHandler, countersignId,
-                    stepStatus, csPosition, expiredTime, dto.NextStepName, isOrigin, handlerType, opinion);
+                    stepStatus, csPosition, expiredTime, dto.NextStepName, isOrigin, handlerType);
 
                 steps.Add(step);
             }
@@ -2231,8 +2214,7 @@ namespace Hotline.FlowEngine.Workflows
             DateTime? expiredTime,
             string stepName,
             bool isOrigin,
-            EHandlerType? handlerType = null, //动态节点依据动态策略判断
-            string? opinion = null //汇总以及会签汇总节点需要提前为option赋值之前办理节点内容
+            EHandlerType? handlerType = null //动态节点依据动态策略判断
         )
         {
             if (!handlers.Any())
@@ -2260,9 +2242,6 @@ namespace Hotline.FlowEngine.Workflows
             if (handlerType.HasValue)
                 step.HandlerType = handlerType.Value;
 
-            if (!string.IsNullOrEmpty(opinion))
-                step.Opinion = opinion;
-
             return step;
         }