Browse Source

fixed: 指派给派单员时不选办理对象异常

xf 2 months ago
parent
commit
199e726fd0

+ 78 - 67
src/Hotline.Api/Controllers/OrderController.cs

@@ -393,10 +393,10 @@ public class OrderController : BaseController
             .WhereIF(!string.IsNullOrEmpty(dto.AcceptType), d => d.AcceptTypeCode == dto.AcceptType) //受理类型
             .WhereIF(!string.IsNullOrEmpty(dto.Hotspot), d => d.HotspotSpliceName != null && d.HotspotSpliceName.Contains(dto.Hotspot))
             .WhereIF(!string.IsNullOrEmpty(dto.FromPhone), d => d.FromPhone == dto.FromPhone) //来电号码
-                                                                                              //.WhereIF(!string.IsNullOrEmpty(dto.PubMan),
-                                                                                              //    d => d.AcceptorName.Contains(dto.PubMan!) || d.AcceptorStaffNo.Contains(dto.PubMan!))
-                                                                                              //.WhereIF(dto.PubRange == EPublicState.Pub, d => d.OrderPublish.PublishState)
-                                                                                              //.WhereIF(dto.PubRange == EPublicState.NoPub, d => !d.OrderPublish.PublishState)
+            //.WhereIF(!string.IsNullOrEmpty(dto.PubMan),
+            //    d => d.AcceptorName.Contains(dto.PubMan!) || d.AcceptorStaffNo.Contains(dto.PubMan!))
+            //.WhereIF(dto.PubRange == EPublicState.Pub, d => d.OrderPublish.PublishState)
+            //.WhereIF(dto.PubRange == EPublicState.NoPub, d => !d.OrderPublish.PublishState)
             .WhereIF(dto.IsProvinceOrder.HasValue && dto.IsProvinceOrder == true, d => d.Source == ESource.ProvinceStraight)
             .WhereIF(dto.IsProvinceOrder.HasValue && dto.IsProvinceOrder == false, d => d.Source != ESource.ProvinceStraight)
             .WhereIF(dto.FiledType != null && dto.FiledType == FiledType.CenterFiled, d => d.ProcessType == EProcessType.Zhiban)
@@ -3678,7 +3678,7 @@ public class OrderController : BaseController
                 cancellationToken: HttpContext.RequestAborted);
 
             List<OrderRemarksDto> remarks = workflow.Steps.Where(x => !string.IsNullOrEmpty(x.Remark)).Select(x => new OrderRemarksDto
-            { Remark = x.Remark, RemarkTime = x.HandleTime, RemarkUser = x.HandlerName }).ToList();
+                { Remark = x.Remark, RemarkTime = x.HandleTime, RemarkUser = x.HandlerName }).ToList();
             dto.OrderRemarks = remarks;
             if (order.Status == EOrderStatus.SendBack || order.Status == EOrderStatus.BackToUnAccept)
             {
@@ -3805,9 +3805,10 @@ public class OrderController : BaseController
                 throw UserFriendlyException.SameMessage("保存失败,投诉类型受理内容字数需要至少25个字!");
 
             if (dto.Title.Contains("咨询") || dto.Title.Contains("建议") || dto.Title.Contains("求助") || dto.Title.Contains("举报")
-                        || dto.Content.Contains("咨询") || dto.Content.Contains("建议") || dto.Content.Contains("求助") || dto.Title.Contains("举报"))
+                || dto.Content.Contains("咨询") || dto.Content.Contains("建议") || dto.Content.Contains("求助") || dto.Title.Contains("举报"))
                 throw UserFriendlyException.SameMessage("保存失败!投诉类型标题和受理内容不能出现'咨询、建议、求助、举报'");
         }
+
         //todo dto validation
         //交通工单校验
         var valid = await _orderDomainService.OrderValidation(dto, HttpContext.RequestAborted);
@@ -4034,7 +4035,7 @@ public class OrderController : BaseController
                 throw UserFriendlyException.SameMessage("保存失败,投诉类型受理内容字数需要至少25个字!");
 
             if (dto.Title.Contains("咨询") || dto.Title.Contains("建议") || dto.Title.Contains("求助") || dto.Title.Contains("举报")
-                        || dto.Content.Contains("咨询") || dto.Content.Contains("建议") || dto.Content.Contains("求助") || dto.Title.Contains("举报"))
+                || dto.Content.Contains("咨询") || dto.Content.Contains("建议") || dto.Content.Contains("求助") || dto.Title.Contains("举报"))
                 throw UserFriendlyException.SameMessage("保存失败!投诉类型标题和受理内容不能出现'咨询、建议、求助、举报'");
         }
 
@@ -4461,16 +4462,24 @@ public class OrderController : BaseController
                         await AverageSendOrderAsync(nextDto, HttpContext.RequestAborted);
                     }
 
-                    var flowStepHandler = nextDto.NextHandlers.FirstOrDefault();
+                    // var flowStepHandler = nextDto.NextHandlers.FirstOrDefault();
+                    // await _orderRepository.Updateable().SetColumns(o => new Order()
+                    // {
+                    //     CenterToOrgHandlerId = flowStepHandler.UserId,
+                    //     CenterToOrgHandlerName = flowStepHandler.Username
+                    // }).Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
+                }
+
+                var (_, currentStep, _, _) = await _workflowDomainService.NextAsync(_sessionContext, nextDto, order.ExpiredTime,
+                    isAutoFillSummaryOpinion, cancellationToken: cancellationToken);
+                if (currentStep.BusinessType is EBusinessType.Send)
+                {
                     await _orderRepository.Updateable().SetColumns(o => new Order()
                     {
-                        CenterToOrgHandlerId = flowStepHandler.UserId,
-                        CenterToOrgHandlerName = flowStepHandler.Username
+                        CenterToOrgHandlerId = currentStep.HandlerId,
+                        CenterToOrgHandlerName = currentStep.HandlerName
                     }).Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
                 }
-
-                await _workflowDomainService.NextAsync(_sessionContext, nextDto, order.ExpiredTime, isAutoFillSummaryOpinion,
-                    cancellationToken: cancellationToken);
                 break;
             case EOrderAssignMode.CrossLevel: // 跨级
                 if (!orderHandleFlowDto.CrossSteps.Any())
@@ -4500,7 +4509,7 @@ public class OrderController : BaseController
                             OrgId = unhandleStep.HandlerOrgId,
                             OrgName = unhandleStep.HandlerOrgName,
                         };
-                        var nextSteps = await _workflowDomainService.NextAsync(operater, nextflowDto, order.ExpiredTime,
+                        var (_, _, _, nextSteps) = await _workflowDomainService.NextAsync(operater, nextflowDto, order.ExpiredTime,
                             isAutoFillSummaryOpinion, cancellationToken: cancellationToken);
                         tempSteps.AddRange(nextSteps);
                     }
@@ -4556,7 +4565,7 @@ public class OrderController : BaseController
         NextWorkflowDto? flowDto, DateTime? expiredTime, bool isAutoFillSummaryOpinion, CancellationToken cancellation)
     {
         if (flowDto is null || !flowDto.NextHandlers.Any()) return;
-        var currentSteps = await _workflowDomainService.NextAsync(current, flowDto, expiredTime,
+        var (_, _, _, currentSteps) = await _workflowDomainService.NextAsync(current, flowDto, expiredTime,
             isAutoFillSummaryOpinion, cancellationToken: cancellation);
 
         foreach (var currentStep in currentSteps)
@@ -5102,7 +5111,8 @@ public class OrderController : BaseController
             .WhereIF(!string.IsNullOrEmpty(dto.StepName), d => d.ActualHandleStepName == dto.StepName)
             .WhereIF(!string.IsNullOrEmpty(dto.ActualHandleOrgName), d => d.ActualHandleOrgName.Contains(dto.ActualHandleOrgName))
             .WhereIF(dto.Status.HasValue, d => d.Status == dto.Status)
-            .WhereIF(!string.IsNullOrEmpty(dto.SourceChannelCode), d => d.SourceChannelCode == dto.SourceChannelCode)//任务:308  市州通用-【中心待办件】新增“来源渠道”查询条件
+            .WhereIF(!string.IsNullOrEmpty(dto.SourceChannelCode),
+                d => d.SourceChannelCode == dto.SourceChannelCode) //任务:308  市州通用-【中心待办件】新增“来源渠道”查询条件
             .WhereIF(!string.IsNullOrEmpty(dto.AcceptorName), d => d.AcceptorName!.Contains(dto.AcceptorName!))
             .WhereIF(dto.ExpiredStatus is EExpiredStatus.Normal, d => DateTime.Now < d.NearlyExpiredTime)
             .WhereIF(dto.ExpiredStatus is EExpiredStatus.GoingToExpired, d => DateTime.Now > d.NearlyExpiredTime && DateTime.Now < d.ExpiredTime)
@@ -5131,7 +5141,7 @@ public class OrderController : BaseController
             { "orderStatus", EnumExts.GetDescriptions<EOrderStatus>() },
             { "expiredStatus", EnumExts.GetDescriptions<EExpiredStatus>() },
             { "stepNames", new string[] { "话务部", "派单组", "班长审批" } },
-            { "channelOptions", _sysDicDataCacheManager.GetSysDicDataCache(TimeLimitBaseDataConsts.SourceChannel)}//任务:308  市州通用-【中心待办件】新增“来源渠道”查询条件
+            { "channelOptions", _sysDicDataCacheManager.GetSysDicDataCache(TimeLimitBaseDataConsts.SourceChannel) } //任务:308  市州通用-【中心待办件】新增“来源渠道”查询条件
         };
         if (_systemSettingCacheManager.Snapshot)
         {
@@ -5338,7 +5348,7 @@ public class OrderController : BaseController
                         if (prevStep1.BusinessType == EBusinessType.Send)
                         {
                             await _orderRepository.Updateable().SetColumns(o => new Order()
-                            { CenterToOrgHandlerId = stepAssignInfo.UserId, CenterToOrgHandlerName = stepAssignInfo.Username })
+                                    { CenterToOrgHandlerId = stepAssignInfo.UserId, CenterToOrgHandlerName = stepAssignInfo.Username })
                                 .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
                         }
 
@@ -5378,7 +5388,7 @@ public class OrderController : BaseController
                     if (prevStep1.BusinessType == EBusinessType.Send)
                     {
                         await _orderRepository.Updateable().SetColumns(o => new Order()
-                        { CenterToOrgHandlerId = stepAssignInfo.UserId, CenterToOrgHandlerName = stepAssignInfo.Username })
+                                { CenterToOrgHandlerId = stepAssignInfo.UserId, CenterToOrgHandlerName = stepAssignInfo.Username })
                             .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
                     }
 
@@ -5442,10 +5452,10 @@ public class OrderController : BaseController
                     }
 
                     await _orderRepository.Updateable().SetColumns(o => new Orders.Order()
-                    {
-                        CenterToOrgHandlerId = sendBack.SendBackData.Handler.UserId,
-                        CenterToOrgHandlerName = sendBack.SendBackData.Handler.Username
-                    })
+                        {
+                            CenterToOrgHandlerId = sendBack.SendBackData.Handler.UserId,
+                            CenterToOrgHandlerName = sendBack.SendBackData.Handler.Username
+                        })
                         .Where(o => o.Id == sendBack.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
                 }
             }
@@ -5519,10 +5529,10 @@ public class OrderController : BaseController
                         }
 
                         await _orderRepository.Updateable().SetColumns(o => new Orders.Order()
-                        {
-                            CenterToOrgHandlerId = sendBack.SendBackData.Handler.UserId,
-                            CenterToOrgHandlerName = sendBack.SendBackData.Handler.Username
-                        })
+                            {
+                                CenterToOrgHandlerId = sendBack.SendBackData.Handler.UserId,
+                                CenterToOrgHandlerName = sendBack.SendBackData.Handler.Username
+                            })
                             .Where(o => o.Id == sendBack.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
                     }
                 }
@@ -5975,13 +5985,13 @@ public class OrderController : BaseController
             }
 
             await _orderRepository.Updateable().SetColumns(o => new Orders.Order()
-            {
-                ExpiredTime = expiredTime.ExpiredTime,
-                NearlyExpiredTime = expiredTime.NearlyExpiredTime,
-                NearlyExpiredTimeOne = expiredTime.NearlyExpiredTimeOne,
-                ProcessType = processType,
-                Status = EOrderStatus.Special
-            })
+                {
+                    ExpiredTime = expiredTime.ExpiredTime,
+                    NearlyExpiredTime = expiredTime.NearlyExpiredTime,
+                    NearlyExpiredTimeOne = expiredTime.NearlyExpiredTimeOne,
+                    ProcessType = processType,
+                    Status = EOrderStatus.Special
+                })
                 .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
             var orderDto = _mapper.Map<OrderDto>(order);
             await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderExpiredTimeUpdate, orderDto,
@@ -5994,7 +6004,8 @@ public class OrderController : BaseController
             //         .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
             // }
 
-            var (workflow, targetStepDefine, currentStep, targetStep, newStep, isOrgToCenter) = await _workflowDomainService.RecallAsync(recall, dto.NextHandlers.FirstOrDefault(), EWorkflowTraceType.Recall,
+            var (workflow, targetStepDefine, currentStep, targetStep, newStep, isOrgToCenter) = await _workflowDomainService.RecallAsync(recall,
+                dto.NextHandlers.FirstOrDefault(), EWorkflowTraceType.Recall,
                 expiredTime.ExpiredTime, order.Status >= EOrderStatus.Filed, EHandleMode.Recall,
                 async (workflow1, prevStepDefine, prevStep, newStep) =>
                 {
@@ -6008,7 +6019,7 @@ public class OrderController : BaseController
                     newStep.Assign(stepAssignInfo);
                 },
                 HttpContext.RequestAborted);
-            
+
             if (string.IsNullOrEmpty(currentStep?.HandlerOrgId))
             {
                 model.OrgId = currentStep.HandlerOrgId;
@@ -6087,7 +6098,7 @@ public class OrderController : BaseController
             await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { Status = EOrderStatus.SpecialAudit })
                 .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
         }
-        
+
         await _orderSpecialRepository.AddAsync(model, HttpContext.RequestAborted);
     }
 
@@ -6219,11 +6230,11 @@ public class OrderController : BaseController
 
                 endTime = expiredTime.EndTime;
                 await _orderRepository.Updateable().SetColumns(o => new Orders.Order()
-                {
-                    ExpiredTime = expiredTime.EndTime,
-                    NearlyExpiredTime = expiredTime.NearlyExpiredTime,
-                    NearlyExpiredTimeOne = expiredTime.NearlyExpiredTimeOne
-                })
+                    {
+                        ExpiredTime = expiredTime.EndTime,
+                        NearlyExpiredTime = expiredTime.NearlyExpiredTime,
+                        NearlyExpiredTimeOne = expiredTime.NearlyExpiredTimeOne
+                    })
                     .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
                 var orderDto = _mapper.Map<OrderDto>(order);
                 await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderExpiredTimeUpdate, orderDto,
@@ -6423,13 +6434,13 @@ public class OrderController : BaseController
                 ? EProcessType.Zhiban
                 : EProcessType.Jiaoban;
             await _orderRepository.Updateable().SetColumns(o => new Orders.Order()
-            {
-                ExpiredTime = expiredTime.ExpiredTime,
-                NearlyExpiredTime = expiredTime.NearlyExpiredTime,
-                NearlyExpiredTimeOne = expiredTime.NearlyExpiredTimeOne,
-                ProcessType = processType,
-                Status = EOrderStatus.Special
-            })
+                {
+                    ExpiredTime = expiredTime.ExpiredTime,
+                    NearlyExpiredTime = expiredTime.NearlyExpiredTime,
+                    NearlyExpiredTimeOne = expiredTime.NearlyExpiredTimeOne,
+                    ProcessType = processType,
+                    Status = EOrderStatus.Special
+                })
                 .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
             var orderDto = _mapper.Map<OrderDto>(order);
             await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderExpiredTimeUpdate, orderDto,
@@ -6444,7 +6455,7 @@ public class OrderController : BaseController
             // }
 
             //todo 特提重办,按审批通过时间依据中心派至部门的规则计算期满时间,更新order
-            
+
             var (workflow, targetStepDefine, currentStep, targetStep, newStep, isOrgToCenter) = await _workflowDomainService.RecallAsync(
                 recall, recall.NextHandlers.FirstOrDefault(), EWorkflowTraceType.Recall,
                 expiredTime.ExpiredTime, order.Status >= EOrderStatus.Filed, EHandleMode.Recall,
@@ -6458,7 +6469,7 @@ public class OrderController : BaseController
                     await validator.ValidateAndThrowAsync(stepAssignInfo, HttpContext.RequestAborted);
                     newStep.Assign(stepAssignInfo);
                 }, HttpContext.RequestAborted);
-            
+
             if (_appOptions.Value.IsZiGong && dto.BusinessType == EBusinessType.Send)
             {
                 special.NextHandlers = new List<StepAssignInfo> { newStep.GetWorkflowStepHandler() };
@@ -6472,7 +6483,7 @@ public class OrderController : BaseController
                     .UpdateColumns(d => new { d.CenterToOrgHandlerId, d.CenterToOrgHandlerName })
                     .ExecuteCommandAsync(HttpContext.RequestAborted);
             }
-            
+
             if (order.Status >= EOrderStatus.Filed)
             {
                 var publish = await _orderPublishRepository.GetAsync(x => x.OrderId == special.OrderId);
@@ -6517,7 +6528,7 @@ public class OrderController : BaseController
             await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { Status = special.Status.Value })
                 .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
         }
-        
+
         await _orderSpecialRepository.UpdateAsync(special, HttpContext.RequestAborted);
     }
 
@@ -6612,13 +6623,13 @@ public class OrderController : BaseController
                     ? EProcessType.Zhiban
                     : EProcessType.Jiaoban;
                 await _orderRepository.Updateable().SetColumns(o => new Orders.Order()
-                {
-                    ExpiredTime = expiredTime.ExpiredTime,
-                    NearlyExpiredTime = expiredTime.NearlyExpiredTime,
-                    NearlyExpiredTimeOne = expiredTime.NearlyExpiredTimeOne,
-                    ProcessType = processType,
-                    Status = EOrderStatus.Special
-                })
+                    {
+                        ExpiredTime = expiredTime.ExpiredTime,
+                        NearlyExpiredTime = expiredTime.NearlyExpiredTime,
+                        NearlyExpiredTimeOne = expiredTime.NearlyExpiredTimeOne,
+                        ProcessType = processType,
+                        Status = EOrderStatus.Special
+                    })
                     .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
                 var orderDto = _mapper.Map<OrderDto>(order);
                 await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderExpiredTimeUpdate, orderDto,
@@ -6632,7 +6643,7 @@ public class OrderController : BaseController
                 //         .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
                 // }
                 //todo 特提重办,按审批通过时间依据中心派至部门的规则计算期满时间,更新order
-                
+
                 var (workflow, targetStepDefine, currentStep, targetStep, newStep, isOrgToCenter) = await _workflowDomainService.RecallAsync(
                     recall, recall.NextHandlers.FirstOrDefault(), EWorkflowTraceType.Recall,
                     expiredTime.ExpiredTime, order.Status >= EOrderStatus.Filed, EHandleMode.Recall,
@@ -6646,7 +6657,7 @@ public class OrderController : BaseController
                         await validator.ValidateAndThrowAsync(stepAssignInfo, HttpContext.RequestAborted);
                         newStep.Assign(stepAssignInfo);
                     }, HttpContext.RequestAborted);
-               
+
                 if (_appOptions.Value.IsZiGong && dto.BusinessType == EBusinessType.Send)
                 {
                     special.NextHandlers = new List<StepAssignInfo> { newStep.GetWorkflowStepHandler() };
@@ -6660,7 +6671,7 @@ public class OrderController : BaseController
                         .UpdateColumns(d => new { d.CenterToOrgHandlerId, d.CenterToOrgHandlerName })
                         .ExecuteCommandAsync(HttpContext.RequestAborted);
                 }
-                
+
                 if (order.Status >= EOrderStatus.Filed)
                 {
                     var publish = await _orderPublishRepository.GetAsync(x => x.OrderId == special.OrderId);
@@ -6706,7 +6717,7 @@ public class OrderController : BaseController
                 await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { Status = special.Status.Value })
                     .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
             }
-            
+
             await _orderSpecialRepository.UpdateAsync(special, HttpContext.RequestAborted);
         }
     }
@@ -6796,7 +6807,7 @@ public class OrderController : BaseController
                 d => d.Title.Contains(dto.Keyword!) || d.No.Contains(dto.Keyword!))
             //.WhereIF(!string.IsNullOrEmpty(dto.Content), d => d.Content.Contains(dto.Content!))
             .WhereIF(!string.IsNullOrEmpty(dto.AcceptType), d => d.AcceptTypeCode == dto.AcceptType) //受理类型
-                                                                                                     //.WhereIF(dto.AcceptTypes.Any(), d => dto.AcceptTypes.Contains(d.AcceptTypeCode)) //受理类型
+            //.WhereIF(dto.AcceptTypes.Any(), d => dto.AcceptTypes.Contains(d.AcceptTypeCode)) //受理类型
             .WhereIF(!string.IsNullOrEmpty(dto.Channel), d => d.SourceChannelCode == dto.Channel) //来源渠道
             .WhereIF(!string.IsNullOrEmpty(dto.Hotspot), d => d.HotspotSpliceName != null && d.HotspotSpliceName.Contains(dto.Hotspot))
             .WhereIF(!string.IsNullOrEmpty(dto.TransferPhone), d => d.TransferPhone.Contains(dto.TransferPhone!))
@@ -8712,7 +8723,7 @@ public class OrderController : BaseController
         {
             await _orderRepository.Updateable()
                 .SetColumns(o => new Orders.Order()
-                { SignerId = dto.Handler.UserId, SignerName = dto.Handler.Username, Status = EOrderStatus.HandOverToUnAccept })
+                    { SignerId = dto.Handler.UserId, SignerName = dto.Handler.Username, Status = EOrderStatus.HandOverToUnAccept })
                 .Where(o => o.Id == dto.OrderId).ExecuteCommandAsync(HttpContext.RequestAborted);
         }
         else
@@ -8741,7 +8752,7 @@ public class OrderController : BaseController
             {
                 await _orderRepository.Updateable()
                     .SetColumns(o => new Orders.Order()
-                    { Status = status, CenterToOrgHandlerId = dto.Handler.UserId, CenterToOrgHandlerName = dto.Handler.Username })
+                        { Status = status, CenterToOrgHandlerId = dto.Handler.UserId, CenterToOrgHandlerName = dto.Handler.Username })
                     .Where(o => o.Id == dto.OrderId).ExecuteCommandAsync(HttpContext.RequestAborted);
             }
             else

+ 2 - 2
src/Hotline/FlowEngine/Workflows/IWorkflowDomainService.cs

@@ -38,7 +38,7 @@ namespace Hotline.FlowEngine.Workflows
         /// <summary>
         /// new
         /// </summary>
-        Task<List<WorkflowStep>> NextAsync(ISessionContext current, NextWorkflowDto dto,
+        Task<(Workflow, WorkflowStep, StepDefine, List<WorkflowStep>)> NextAsync(ISessionContext current, NextWorkflowDto dto,
             DateTime? expiredTime = null, bool isAutoFillSummaryOpinion = false,
             Action<Workflow, StepDefine, WorkflowStep, WorkflowStep>? stepConfig = null,
             CancellationToken cancellationToken = default);
@@ -176,7 +176,7 @@ namespace Hotline.FlowEngine.Workflows
         /// <summary>
         /// 结束流程(流程直接流转至结束节点)
         /// </summary>
-        Task<WorkflowTrace> EndAsync(ISessionContext current, Workflow workflow, BasicWorkflowDto dto, StepDefine endStepDefine,
+        Task<(WorkflowStep, WorkflowTrace)> EndAsync(ISessionContext current, Workflow workflow, BasicWorkflowDto dto, StepDefine endStepDefine,
             WorkflowStep currentStep, DateTime? expiredTime, CancellationToken cancellationToken);
 
         StepDefine GetStepDefine(WorkflowDefinition workflowDefinition, string stepCode);

+ 11 - 7
src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

@@ -280,8 +280,10 @@ namespace Hotline.FlowEngine.Workflows
 
         /// <summary>
         /// new
+        /// workflow, currentStep, nextStepDefine, nextSteps
         /// </summary>
-        public async Task<List<WorkflowStep>> NextAsync(ISessionContext current, NextWorkflowDto dto,
+        public async Task<(Workflow, WorkflowStep, StepDefine, List<WorkflowStep>)> NextAsync(
+            ISessionContext current, NextWorkflowDto dto,
             DateTime? expiredTime = null, bool isAutoFillSummaryOpinion = false,
             Action<Workflow, StepDefine, WorkflowStep, WorkflowStep>? stepConfig = null,
             CancellationToken cancellationToken = default)
@@ -522,8 +524,8 @@ namespace Hotline.FlowEngine.Workflows
                     workflow.ActualHandleTime = currentStep.HandleTime;
                 }
 
-                var endTrace = await EndAsync(current, workflow, dto, nextStepDefine, currentStep, expiredTime, cancellationToken);
-                return new List<WorkflowStep>();
+                var (endStep, _) = await EndAsync(current, workflow, dto, nextStepDefine, currentStep, expiredTime, cancellationToken);
+                return (workflow, currentStep, nextStepDefine, new List<WorkflowStep> { endStep });
             }
 
             var isStartCountersign = currentStep.CountersignPosition switch
@@ -597,7 +599,7 @@ namespace Hotline.FlowEngine.Workflows
                     current.OrgId, expiredTime.HasValue), PublishStrategy.ParallelWhenAll,
                 cancellationToken);
 
-            return nextSteps;
+            return (workflow, currentStep, nextStepDefine, nextSteps);
         }
 
         /// <summary>
@@ -612,7 +614,9 @@ namespace Hotline.FlowEngine.Workflows
             var nextDto = _mapper.Map<NextWorkflowDto>(dto);
             nextDto.WorkflowId = workflow.Id;
             nextDto.StepId = startStep.Id;
-            return await NextAsync(_sessionContextProvider.SessionContext, nextDto, expiredTime, true, stepConfig, cancellationToken);
+            var (_, _, _, nextSteps) =
+                await NextAsync(_sessionContextProvider.SessionContext, nextDto, expiredTime, true, stepConfig, cancellationToken);
+            return nextSteps;
         }
 
         public async Task<Workflow> GetWorkflowAsync(string workflowId,
@@ -2004,7 +2008,7 @@ namespace Hotline.FlowEngine.Workflows
         /// <summary>
         /// 流程结束
         /// </summary>
-        public async Task<WorkflowTrace> EndAsync(ISessionContext current, Workflow workflow, BasicWorkflowDto dto,
+        public async Task<(WorkflowStep, WorkflowTrace)> EndAsync(ISessionContext current, Workflow workflow, BasicWorkflowDto dto,
             StepDefine endStepDefine, WorkflowStep currentStep,
             DateTime? expiredTime, CancellationToken cancellationToken)
         {
@@ -2037,7 +2041,7 @@ namespace Hotline.FlowEngine.Workflows
             await _publisher.PublishAsync(new EndWorkflowNotify(workflow, endTrace, dto),
                 PublishStrategy.ParallelWhenAll, cancellationToken);
 
-            return endTrace;
+            return (endStep, endTrace);
         }
 
         ///// <summary>