Browse Source

Merge branch 'feature/refactor_workflow' of http://110.188.24.182:10023/Fengwo/hotline into feature/refactor_workflow

xf 6 months ago
parent
commit
b3a90ef489

+ 1 - 1
src/Hotline.Api/Controllers/KnowledgeController.cs

@@ -856,7 +856,7 @@ namespace Hotline.Api.Controllers
 
 
             dto.DefinitionModuleCode = moduleCode;
             dto.DefinitionModuleCode = moduleCode;
             dto.Title = knowledge.Title;
             dto.Title = knowledge.Title;
-            return await _workflowApplication.StartWorkflowAsync(dto, _sessionContext, id, cancellationToken: HttpContext.RequestAborted);
+            return await _workflowApplication.StartWorkflowAsync(dto, id, cancellationToken: HttpContext.RequestAborted);
 		}
 		}
         #endregion
         #endregion
 
 

+ 2 - 2
src/Hotline.Api/Controllers/PbxController.cs

@@ -300,7 +300,7 @@ namespace Hotline.Api.Controllers
                 startWorkflowDto.DefinitionModuleCode = WorkflowModuleConsts.TelRestApply;
                 startWorkflowDto.DefinitionModuleCode = WorkflowModuleConsts.TelRestApply;
                 startWorkflowDto.Opinion = dto.Reason;
                 startWorkflowDto.Opinion = dto.Reason;
                 startWorkflowDto.Title = "分机休息申请流程";
                 startWorkflowDto.Title = "分机休息申请流程";
-				await _workflowApplication.StartWorkflowAsync(startWorkflowDto, _sessionContext, telRest.Id, cancellationToken: HttpContext.RequestAborted);
+				await _workflowApplication.StartWorkflowAsync(startWorkflowDto, telRest.Id, cancellationToken: HttpContext.RequestAborted);
             }
             }
         }
         }
 
 
@@ -336,7 +336,7 @@ namespace Hotline.Api.Controllers
             startWorkflowDto.DefinitionModuleCode = WorkflowModuleConsts.TelRestApply;
             startWorkflowDto.DefinitionModuleCode = WorkflowModuleConsts.TelRestApply;
             startWorkflowDto.Opinion = dto.Reason;
             startWorkflowDto.Opinion = dto.Reason;
             startWorkflowDto.Title = "分机休息申请流程";
             startWorkflowDto.Title = "分机休息申请流程";
-			await _workflowApplication.StartWorkflowAsync(startWorkflowDto, _sessionContext, telRest.Id, cancellationToken: HttpContext.RequestAborted);
+			await _workflowApplication.StartWorkflowAsync(startWorkflowDto, telRest.Id, cancellationToken: HttpContext.RequestAborted);
         }
         }
 
 
 
 

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

@@ -19,7 +19,7 @@ namespace Hotline.Application.FlowEngine
         /// <summary>
         /// <summary>
         /// 开始流程
         /// 开始流程
         /// </summary>
         /// </summary>
-        Task<string> StartWorkflowAsync(StartWorkflowDto dto, ISessionContext current, string externalId, DateTime? expiredTime = null,
+        Task<string> StartWorkflowAsync(StartWorkflowDto dto, string externalId, DateTime? expiredTime = null,
             CancellationToken cancellationToken = default);
             CancellationToken cancellationToken = default);
 
 
         /// <summary>
         /// <summary>

+ 21 - 21
src/Hotline.Application/FlowEngine/WorkflowApplication.cs

@@ -76,7 +76,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         IWfModuleCacheManager wfModuleCacheManager,
         IWfModuleCacheManager wfModuleCacheManager,
         ISystemDomainService systemDomainService,
         ISystemDomainService systemDomainService,
         ITimeLimitDomainService timeLimitDomainService,
         ITimeLimitDomainService timeLimitDomainService,
-        ISessionContext sessionContext,
+        ISessionContextProvider sessionContextProvider,
         IMapper mapper,
         IMapper mapper,
         IFileRepository fileRepository,
         IFileRepository fileRepository,
         ISystemSettingCacheManager systemSettingCacheManager,
         ISystemSettingCacheManager systemSettingCacheManager,
@@ -97,15 +97,15 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         _wfModuleCacheManager = wfModuleCacheManager;
         _wfModuleCacheManager = wfModuleCacheManager;
         _systemDomainService = systemDomainService;
         _systemDomainService = systemDomainService;
         _timeLimitDomainService = timeLimitDomainService;
         _timeLimitDomainService = timeLimitDomainService;
-        _sessionContext = sessionContext;
         _mapper = mapper;
         _mapper = mapper;
         _fileRepository = fileRepository;
         _fileRepository = fileRepository;
         _logger = logger;
         _logger = logger;
         _systemSettingCacheManager = systemSettingCacheManager;
         _systemSettingCacheManager = systemSettingCacheManager;
         _cityBaseConfiguration = cityBaseConfiguration;
         _cityBaseConfiguration = cityBaseConfiguration;
+        _sessionContext = sessionContextProvider.SessionContext;
     }
     }
 
 
-    public async Task<string> StartWorkflowAsync(StartWorkflowDto dto, ISessionContext current, string externalId,
+    public async Task<string> StartWorkflowAsync(StartWorkflowDto dto, string externalId,
         DateTime? expiredTime, CancellationToken cancellationToken = default)
         DateTime? expiredTime, CancellationToken cancellationToken = default)
     {
     {
         var validator = new StartWorkflowDtoValidator();
         var validator = new StartWorkflowDtoValidator();
@@ -126,7 +126,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
 
 
         //下一节点是否为动态节点
         //下一节点是否为动态节点
         var isNextDynamic = startStepDefine.InstanceMode is EInstanceMode.Dynamic &&
         var isNextDynamic = startStepDefine.InstanceMode is EInstanceMode.Dynamic &&
-                            !_workflowDomainService.DynamicShouldTerminal(startStepDefine, current.OrgLevel);
+                            !_workflowDomainService.DynamicShouldTerminal(startStepDefine, _sessionContext.OrgLevel);
         var firstStepDefine = isNextDynamic
         var firstStepDefine = isNextDynamic
             ? startStepDefine
             ? startStepDefine
             : definition.FindStepDefine(dto.NextStepCode);
             : definition.FindStepDefine(dto.NextStepCode);
@@ -152,7 +152,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         }
         }
 
 
         var workflow = await _workflowDomainService.CreateWorkflowAsync(wfModule, dto.Title,
         var workflow = await _workflowDomainService.CreateWorkflowAsync(wfModule, dto.Title,
-            current.RequiredUserId, current.RequiredOrgId,
+            _sessionContext.RequiredUserId, _sessionContext.RequiredOrgId,
             externalId, cancellationToken);
             externalId, cancellationToken);
 
 
         //var startStepHandles = new List<WorkflowStepHandler>{WorkflowStepHandler.Create(workflow.Id, workflow.ExternalId,
         //var startStepHandles = new List<WorkflowStepHandler>{WorkflowStepHandler.Create(workflow.Id, workflow.ExternalId,
@@ -163,12 +163,12 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         var startStep = _workflowDomainService.CreateStartStep(workflow, startStepDefine, dto,
         var startStep = _workflowDomainService.CreateStartStep(workflow, startStepDefine, dto,
             new FlowStepHandler
             new FlowStepHandler
             {
             {
-                Key = current.RequiredUserId,
-                Value = current.UserName,
-                UserId = current.UserId,
-                Username = current.UserName,
-                OrgId = current.RequiredOrgId,
-                OrgName = current.OrgName,
+                Key = _sessionContext.RequiredUserId,
+                Value = _sessionContext.UserName,
+                UserId = _sessionContext.UserId,
+                Username = _sessionContext.UserName,
+                OrgId = _sessionContext.RequiredOrgId,
+                OrgName = _sessionContext.OrgName,
                 RoleId = defineHandler.Key,
                 RoleId = defineHandler.Key,
                 RoleName = defineHandler.Value,
                 RoleName = defineHandler.Value,
             }, expiredTime);
             }, expiredTime);
@@ -179,7 +179,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         var counterSignType = _workflowDomainService.GetCounterSignType(dto.IsStartCountersign);
         var counterSignType = _workflowDomainService.GetCounterSignType(dto.IsStartCountersign);
 
 
         //办理开始节点
         //办理开始节点
-        await _workflowDomainService.HandleStepAsync(current, startStep, workflow, dto, flowAssignInfo.FlowAssignType,
+        await _workflowDomainService.HandleStepAsync(startStep, workflow, dto, flowAssignInfo.FlowAssignType,
             counterSignType, expiredTime, cancellationToken);
             counterSignType, expiredTime, cancellationToken);
 
 
         if (dto.Files.Any())
         if (dto.Files.Any())
@@ -200,14 +200,14 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
 
 
         //更新受理人信息
         //更新受理人信息
         workflow.UpdateAcceptor(
         workflow.UpdateAcceptor(
-            current.RequiredUserId,
-            current.UserName,
-            current.StaffNo,
-            current.RequiredOrgId,
-            current.OrgName);
+            _sessionContext.RequiredUserId,
+            _sessionContext.UserName,
+            _sessionContext.StaffNo,
+            _sessionContext.RequiredOrgId,
+            _sessionContext.OrgName);
 
 
         await _workflowDomainService.StartAsync(workflow, startStep, dto, firstStepDefine, isNextDynamic,
         await _workflowDomainService.StartAsync(workflow, startStep, dto, firstStepDefine, isNextDynamic,
-            flowAssignInfo, counterSignType, expiredTime, current, cancellationToken);
+            flowAssignInfo, counterSignType, expiredTime, cancellationToken);
 
 
         return workflow.Id;
         return workflow.Id;
     }
     }
@@ -492,7 +492,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
 
 
         foreach (var step in unhandleSteps)
         foreach (var step in unhandleSteps)
         {
         {
-            await _workflowDomainService.HandleStepAsync(current, step, workflow, dto, null,
+            await _workflowDomainService.HandleStepAsync(step, workflow, dto, null,
                 null, null, cancellationToken);
                 null, null, cancellationToken);
 
 
             var trace = unhandleTraces.First(d => d.StepId == step.Id);
             var trace = unhandleTraces.First(d => d.StepId == step.Id);
@@ -508,7 +508,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
                               ?? workflow.Steps.OrderBy(d => d.CreationTime).Last();
                               ?? workflow.Steps.OrderBy(d => d.CreationTime).Last();
 
 
             await _workflowDomainService.EndAsync(workflow, dto,
             await _workflowDomainService.EndAsync(workflow, dto,
-                endStepDefine, currentStep, current, expiredTime, cancellationToken);
+                endStepDefine, currentStep, expiredTime, cancellationToken);
         }
         }
     }
     }
 
 
@@ -1775,7 +1775,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         dto.NextStepName = endStepDefine.Name;
         dto.NextStepName = endStepDefine.Name;
         dto.FlowDirection = EFlowDirection.CenterToFile;
         dto.FlowDirection = EFlowDirection.CenterToFile;
 
 
-        await StartWorkflowAsync(dto, current, externalId, expiredTime, cancellationToken);
+        await StartWorkflowAsync(dto, externalId, expiredTime, cancellationToken);
     }
     }
 
 
     /// <summary>
     /// <summary>

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

@@ -24,7 +24,7 @@ namespace Hotline.FlowEngine.Workflows
         /// </summary>
         /// </summary>
         Task StartAsync(Workflow workflow, WorkflowStep startStep, BasicWorkflowDto dto, StepDefine firstStepDefine,
         Task StartAsync(Workflow workflow, WorkflowStep startStep, BasicWorkflowDto dto, StepDefine firstStepDefine,
             bool isNextDynamic, FlowAssignInfo flowAssignInfo, ECounterSignType? counterSignType, DateTime? expiredTime,
             bool isNextDynamic, FlowAssignInfo flowAssignInfo, ECounterSignType? counterSignType, DateTime? expiredTime,
-            ISessionContext current, CancellationToken cancellationToken);
+            CancellationToken cancellationToken);
 
 
         /// <summary>
         /// <summary>
         /// 查询工作流
         /// 查询工作流
@@ -121,7 +121,7 @@ namespace Hotline.FlowEngine.Workflows
         /// 结束流程(流程直接流转至结束节点)
         /// 结束流程(流程直接流转至结束节点)
         /// </summary>
         /// </summary>
         Task<WorkflowTrace> EndAsync(Workflow workflow, BasicWorkflowDto dto, StepDefine endStepDefine,
         Task<WorkflowTrace> EndAsync(Workflow workflow, BasicWorkflowDto dto, StepDefine endStepDefine,
-            WorkflowStep currentStep, ISessionContext current, DateTime? expiredTime, CancellationToken cancellationToken);
+            WorkflowStep currentStep, DateTime? expiredTime, CancellationToken cancellationToken);
 
 
         StepDefine GetStepDefine(WorkflowDefinition workflowDefinition, string stepCode);
         StepDefine GetStepDefine(WorkflowDefinition workflowDefinition, string stepCode);
 
 
@@ -203,7 +203,7 @@ namespace Hotline.FlowEngine.Workflows
         /// <summary>
         /// <summary>
         /// 办理节点
         /// 办理节点
         /// </summary>
         /// </summary>
-        Task HandleStepAsync(ISessionContext current, WorkflowStep step, Workflow workflow, BasicWorkflowDto dto,
+        Task HandleStepAsync(WorkflowStep step, Workflow workflow, BasicWorkflowDto dto,
             EFlowAssignType? flowAssignType, ECounterSignType? counterSignType, DateTime? expiredTime,
             EFlowAssignType? flowAssignType, ECounterSignType? counterSignType, DateTime? expiredTime,
             CancellationToken cancellationToken);
             CancellationToken cancellationToken);
 
 

+ 50 - 53
src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

@@ -40,15 +40,15 @@ namespace Hotline.FlowEngine.Workflows
         private readonly IRepository<User> _userRepository;
         private readonly IRepository<User> _userRepository;
         private readonly ISystemSettingCacheManager _systemSettingCacheManager;
         private readonly ISystemSettingCacheManager _systemSettingCacheManager;
 
 
-		public WorkflowDomainService(
+        public WorkflowDomainService(
             IWorkflowRepository workflowRepository,
             IWorkflowRepository workflowRepository,
             IRepository<WorkflowStep> workflowStepRepository,
             IRepository<WorkflowStep> workflowStepRepository,
             IRepository<WorkflowTrace> workflowTraceRepository,
             IRepository<WorkflowTrace> workflowTraceRepository,
             IRepository<WorkflowSupplement> workflowSupplementRepository,
             IRepository<WorkflowSupplement> workflowSupplementRepository,
             IRepository<WorkflowCountersign> workflowCountersignRepository,
             IRepository<WorkflowCountersign> workflowCountersignRepository,
-			//IRepository<WorkflowStepHandler> workflowStepHandlerRepository,
-			ISystemSettingCacheManager systemSettingCacheManager,
-			ISessionContext sessionContext,
+            //IRepository<WorkflowStepHandler> workflowStepHandlerRepository,
+            ISystemSettingCacheManager systemSettingCacheManager,
+            ISessionContextProvider sessionContextProvider,
             IMapper mapper,
             IMapper mapper,
             Publisher publisher,
             Publisher publisher,
             ILogger<WorkflowDomainService> logger,
             ILogger<WorkflowDomainService> logger,
@@ -60,13 +60,13 @@ namespace Hotline.FlowEngine.Workflows
             _workflowSupplementRepository = workflowSupplementRepository;
             _workflowSupplementRepository = workflowSupplementRepository;
             _workflowCountersignRepository = workflowCountersignRepository;
             _workflowCountersignRepository = workflowCountersignRepository;
             //_workflowStepHandlerRepository = workflowStepHandlerRepository;
             //_workflowStepHandlerRepository = workflowStepHandlerRepository;
-            _sessionContext = sessionContext;
+            _sessionContext = sessionContextProvider.SessionContext;
             _mapper = mapper;
             _mapper = mapper;
             _publisher = publisher;
             _publisher = publisher;
             _logger = logger;
             _logger = logger;
             _fileRepository = fileRepository;
             _fileRepository = fileRepository;
             _systemSettingCacheManager = systemSettingCacheManager;
             _systemSettingCacheManager = systemSettingCacheManager;
-		}
+        }
 
 
         public async Task<Workflow> CreateWorkflowAsync(WorkflowModule wfModule, string title, string userId,
         public async Task<Workflow> CreateWorkflowAsync(WorkflowModule wfModule, string title, string userId,
             string orgId, string? externalId = null, CancellationToken cancellationToken = default)
             string orgId, string? externalId = null, CancellationToken cancellationToken = default)
@@ -102,7 +102,7 @@ namespace Hotline.FlowEngine.Workflows
         public async Task StartAsync(Workflow workflow, WorkflowStep startStep, BasicWorkflowDto dto,
         public async Task StartAsync(Workflow workflow, WorkflowStep startStep, BasicWorkflowDto dto,
             StepDefine firstStepDefine, bool isNextDynamic, FlowAssignInfo flowAssignInfo,
             StepDefine firstStepDefine, bool isNextDynamic, FlowAssignInfo flowAssignInfo,
             ECounterSignType? counterSignType, DateTime? expiredTime,
             ECounterSignType? counterSignType, DateTime? expiredTime,
-            ISessionContext current, CancellationToken cancellationToken)
+            CancellationToken cancellationToken)
         {
         {
             if (firstStepDefine.StepType is EStepType.End)
             if (firstStepDefine.StepType is EStepType.End)
             {
             {
@@ -111,11 +111,11 @@ namespace Hotline.FlowEngine.Workflows
                     PublishStrategy.ParallelWhenAll, cancellationToken);
                     PublishStrategy.ParallelWhenAll, cancellationToken);
 
 
                 //firstStep是否为end,t: 实际办理节点为startStep, 并且handlerId赋值 f: 实际办理节点为firstStep, handlerId未赋值
                 //firstStep是否为end,t: 实际办理节点为startStep, 并且handlerId赋值 f: 实际办理节点为firstStep, handlerId未赋值
-                workflow.UpdateActualStepWhenHandle(startStep, current.OrgAreaCode, current.OrgAreaName, current.OrgLevel);
+                workflow.UpdateActualStepWhenHandle(startStep, _sessionContext.OrgAreaCode, _sessionContext.OrgAreaName, _sessionContext.OrgLevel);
 
 
-                workflow.UpdateCurrentStepWhenHandle(startStep, current.OrgAreaCode, current.OrgAreaName, current.OrgLevel);
+                workflow.UpdateCurrentStepWhenHandle(startStep, _sessionContext.OrgAreaCode, _sessionContext.OrgAreaName, _sessionContext.OrgLevel);
 
 
-                var endTrace = await EndAsync(workflow, dto, firstStepDefine, startStep, current, expiredTime, cancellationToken);
+                var endTrace = await EndAsync(workflow, dto, firstStepDefine, startStep, expiredTime, cancellationToken);
                 return;
                 return;
             }
             }
 
 
@@ -259,7 +259,7 @@ namespace Hotline.FlowEngine.Workflows
 
 
             var unhandlePreviousTrace = workflow.Traces.FirstOrDefault(d =>
             var unhandlePreviousTrace = workflow.Traces.FirstOrDefault(d =>
                     d.Status is not EWorkflowStepStatus.Handled
                     d.Status is not EWorkflowStepStatus.Handled
-            //&& d.TraceType is EWorkflowTraceType.Previous
+                //&& d.TraceType is EWorkflowTraceType.Previous
             );
             );
             //var previousOpinion = unhandlePreviousTrace?.Opinion ?? null;
             //var previousOpinion = unhandlePreviousTrace?.Opinion ?? null;
 
 
@@ -379,7 +379,7 @@ namespace Hotline.FlowEngine.Workflows
                 }
                 }
             }
             }
 
 
-            await HandleStepAsync(current, currentStep, workflow, dto, flowAssignInfo.FlowAssignType,
+            await HandleStepAsync(currentStep, workflow, dto, flowAssignInfo.FlowAssignType,
                 counterSignType, expiredTime, cancellationToken);
                 counterSignType, expiredTime, cancellationToken);
 
 
             //创建会签数据
             //创建会签数据
@@ -486,8 +486,7 @@ namespace Hotline.FlowEngine.Workflows
             //检查是否流转到流程终点
             //检查是否流转到流程终点
             if (nextStepDefine.StepType is EStepType.End)
             if (nextStepDefine.StepType is EStepType.End)
             {
             {
-                var endTrace = await EndAsync(workflow, dto, nextStepDefine, currentStep, current, expiredTime,
-                    cancellationToken);
+                var endTrace = await EndAsync(workflow, dto, nextStepDefine, currentStep, expiredTime, cancellationToken);
                 return;
                 return;
             }
             }
 
 
@@ -633,7 +632,7 @@ namespace Hotline.FlowEngine.Workflows
                 await DuplicateStepWithTraceAsync(workflow, prevStep, EWorkflowTraceType.Previous, cancellationToken);
                 await DuplicateStepWithTraceAsync(workflow, prevStep, EWorkflowTraceType.Previous, cancellationToken);
 
 
             //退给派单组节点,需按照平均分配原则派给一个派单员 禅道299 TODO
             //退给派单组节点,需按照平均分配原则派给一个派单员 禅道299 TODO
-            if (dto.Handler != null)//todo 改为按策略判断
+            if (dto.Handler != null) //todo 改为按策略判断
             {
             {
                 var handle = dto.Handler;
                 var handle = dto.Handler;
                 newPrevStep.Assign(handle.UserId, handle.Username, handle.OrgId, handle.OrgName, handle.RoleId, handle.RoleName);
                 newPrevStep.Assign(handle.UserId, handle.Username, handle.OrgId, handle.OrgName, handle.RoleId, handle.RoleName);
@@ -641,7 +640,7 @@ namespace Hotline.FlowEngine.Workflows
 
 
             //remove workflow.steps
             //remove workflow.steps
             await _workflowStepRepository.RemoveRangeAsync(removeSteps, cancellationToken);
             await _workflowStepRepository.RemoveRangeAsync(removeSteps, cancellationToken);
-            
+
             var stepIds = removeSteps.Select(d => d.Id).ToList();
             var stepIds = removeSteps.Select(d => d.Id).ToList();
             var updateTraces = workflow.Traces.Where(d => stepIds.Contains(d.StepId)).ToList();
             var updateTraces = workflow.Traces.Where(d => stepIds.Contains(d.StepId)).ToList();
             await UpdateTracesStateAsync(updateTraces, EWorkflowTraceState.StepRemoveByPrevious, cancellationToken);
             await UpdateTracesStateAsync(updateTraces, EWorkflowTraceState.StepRemoveByPrevious, cancellationToken);
@@ -1114,7 +1113,7 @@ namespace Hotline.FlowEngine.Workflows
                 {
                 {
                     new FlowStepHandler
                     new FlowStepHandler
                     {
                     {
-                        Key= startStep.RoleId,
+                        Key = startStep.RoleId,
                         Value = startStep.RoleName,
                         Value = startStep.RoleName,
                         RoleId = startStep.RoleId,
                         RoleId = startStep.RoleId,
                         RoleName = startStep.RoleName,
                         RoleName = startStep.RoleName,
@@ -1163,7 +1162,7 @@ namespace Hotline.FlowEngine.Workflows
                 {
                 {
                     new FlowStepHandler
                     new FlowStepHandler
                     {
                     {
-                        Key= sendStep.RoleId,
+                        Key = sendStep.RoleId,
                         Value = sendStep.RoleName,
                         Value = sendStep.RoleName,
                         RoleId = sendStep.RoleId,
                         RoleId = sendStep.RoleId,
                         RoleName = sendStep.RoleName,
                         RoleName = sendStep.RoleName,
@@ -1210,8 +1209,8 @@ namespace Hotline.FlowEngine.Workflows
                     {
                     {
                         new FlowStepHandler
                         new FlowStepHandler
                         {
                         {
-                            Key= sendStep.RoleId,
-                            Value= sendStep.RoleName,
+                            Key = sendStep.RoleId,
+                            Value = sendStep.RoleName,
                             RoleId = sendStep.RoleId,
                             RoleId = sendStep.RoleId,
                             RoleName = sendStep.RoleName,
                             RoleName = sendStep.RoleName,
                             UserId = sendStep.HandlerId,
                             UserId = sendStep.HandlerId,
@@ -1246,7 +1245,7 @@ namespace Hotline.FlowEngine.Workflows
                     {
                     {
                         new FlowStepHandler
                         new FlowStepHandler
                         {
                         {
-                            Key= startStep.RoleId,
+                            Key = startStep.RoleId,
                             Value = startStep.RoleName,
                             Value = startStep.RoleName,
                             RoleId = startStep.RoleId,
                             RoleId = startStep.RoleId,
                             RoleName = startStep.RoleName,
                             RoleName = startStep.RoleName,
@@ -1435,7 +1434,7 @@ namespace Hotline.FlowEngine.Workflows
             var endStepDefine = workflow.WorkflowDefinition.FindEndStepDefine();
             var endStepDefine = workflow.WorkflowDefinition.FindEndStepDefine();
 
 
             var basicDto = _mapper.Map<BasicWorkflowDto>(dto);
             var basicDto = _mapper.Map<BasicWorkflowDto>(dto);
-            var endTrace = await EndAsync(workflow, basicDto, endStepDefine, currentStep, current,
+            var endTrace = await EndAsync(workflow, basicDto, endStepDefine, currentStep,
                 expiredTime, cancellationToken: cancellationToken);
                 expiredTime, cancellationToken: cancellationToken);
 
 
             await _publisher.PublishAsync(new CancelWorkflowNotify(workflow), PublishStrategy.ParallelWhenAll,
             await _publisher.PublishAsync(new CancelWorkflowNotify(workflow), PublishStrategy.ParallelWhenAll,
@@ -1495,7 +1494,7 @@ namespace Hotline.FlowEngine.Workflows
         /// 流程结束
         /// 流程结束
         /// </summary>
         /// </summary>
         public async Task<WorkflowTrace> EndAsync(Workflow workflow, BasicWorkflowDto dto,
         public async Task<WorkflowTrace> EndAsync(Workflow workflow, BasicWorkflowDto dto,
-            StepDefine endStepDefine, WorkflowStep currentStep, ISessionContext current,
+            StepDefine endStepDefine, WorkflowStep currentStep,
             DateTime? expiredTime, CancellationToken cancellationToken)
             DateTime? expiredTime, CancellationToken cancellationToken)
         {
         {
             //var endStepHandles = new List<WorkflowStepHandler>
             //var endStepHandles = new List<WorkflowStepHandler>
@@ -1505,7 +1504,7 @@ namespace Hotline.FlowEngine.Workflows
             //};
             //};
 
 
             //create endStep
             //create endStep
-            var endStep = await CreateEndStepAsync(current, workflow, endStepDefine, currentStep, expiredTime,
+            var endStep = await CreateEndStepAsync(workflow, endStepDefine, currentStep, expiredTime,
                 cancellationToken);
                 cancellationToken);
             //workflow.Steps.Add(endStep);
             //workflow.Steps.Add(endStep);
 
 
@@ -1515,8 +1514,7 @@ namespace Hotline.FlowEngine.Workflows
             workflow.Complete(endStep, dto.ReviewResult);
             workflow.Complete(endStep, dto.ReviewResult);
 
 
             //需求调整:归档时当前节点显示为归档节点
             //需求调整:归档时当前节点显示为归档节点
-            workflow.UpdateCurrentStepWhenHandle(endStep,
-                current.OrgAreaCode, current.OrgAreaName, current.OrgLevel);
+            workflow.UpdateCurrentStepWhenHandle(endStep, _sessionContext.OrgAreaCode, _sessionContext.OrgAreaName, _sessionContext.OrgLevel);
             workflow.UpdateCurrentStepAcceptTime(endStep.AcceptTime.Value);
             workflow.UpdateCurrentStepAcceptTime(endStep.AcceptTime.Value);
 
 
             //workflow.UpdateActualStepWhenHandle(endStep, current.OrgAreaCode, current.OrgAreaName, current.OrgLevel);
             //workflow.UpdateActualStepWhenHandle(endStep, current.OrgAreaCode, current.OrgAreaName, current.OrgLevel);
@@ -1558,7 +1556,7 @@ namespace Hotline.FlowEngine.Workflows
         /// <summary>
         /// <summary>
         /// 办理节点
         /// 办理节点
         /// </summary>
         /// </summary>
-        public async Task HandleStepAsync(ISessionContext current, WorkflowStep step, Workflow workflow,
+        public async Task HandleStepAsync(WorkflowStep step, Workflow workflow,
             BasicWorkflowDto dto, EFlowAssignType? flowAssignType, ECounterSignType? counterSignType,
             BasicWorkflowDto dto, EFlowAssignType? flowAssignType, ECounterSignType? counterSignType,
             DateTime? expiredTime, CancellationToken cancellationToken)
             DateTime? expiredTime, CancellationToken cancellationToken)
         {
         {
@@ -1581,7 +1579,7 @@ namespace Hotline.FlowEngine.Workflows
             step.Remark = dto.Remark;
             step.Remark = dto.Remark;
 
 
             //step办理状态
             //step办理状态
-            HandleStep(current, step, dto.Opinion, dto.NextStepCode);
+            HandleStep(step, dto.Opinion, dto.NextStepCode);
         }
         }
 
 
 
 
@@ -1799,7 +1797,7 @@ namespace Hotline.FlowEngine.Workflows
                 EDynamicPolicy.OrgUpLead => EHandlerType.OrgLevel,
                 EDynamicPolicy.OrgUpLead => EHandlerType.OrgLevel,
                 EDynamicPolicy.ArriveCenter => EHandlerType.OrgLevel,
                 EDynamicPolicy.ArriveCenter => EHandlerType.OrgLevel,
                 EDynamicPolicy.ArriveOneOrg => EHandlerType.OrgLevel,
                 EDynamicPolicy.ArriveOneOrg => EHandlerType.OrgLevel,
-				EDynamicPolicy.OrgDownCenterTop => EHandlerType.OrgLevel,
+                EDynamicPolicy.OrgDownCenterTop => EHandlerType.OrgLevel,
                 EDynamicPolicy.OrgDown => EHandlerType.OrgLevel,
                 EDynamicPolicy.OrgDown => EHandlerType.OrgLevel,
                 null => throw new ArgumentOutOfRangeException(),
                 null => throw new ArgumentOutOfRangeException(),
                 _ => throw new ArgumentOutOfRangeException()
                 _ => throw new ArgumentOutOfRangeException()
@@ -1835,7 +1833,7 @@ namespace Hotline.FlowEngine.Workflows
                 EDynamicPolicyCountersign.OrgUpLead => EHandlerType.OrgLevel,
                 EDynamicPolicyCountersign.OrgUpLead => EHandlerType.OrgLevel,
                 EDynamicPolicyCountersign.ArriveCenter => EHandlerType.OrgLevel,
                 EDynamicPolicyCountersign.ArriveCenter => EHandlerType.OrgLevel,
                 EDynamicPolicyCountersign.ArriveOneOrg => EHandlerType.OrgLevel,
                 EDynamicPolicyCountersign.ArriveOneOrg => EHandlerType.OrgLevel,
-				EDynamicPolicyCountersign.OrgDownCenterTop => EHandlerType.OrgLevel,
+                EDynamicPolicyCountersign.OrgDownCenterTop => EHandlerType.OrgLevel,
                 EDynamicPolicyCountersign.OrgDown => EHandlerType.OrgLevel,
                 EDynamicPolicyCountersign.OrgDown => EHandlerType.OrgLevel,
                 null => throw new ArgumentOutOfRangeException(),
                 null => throw new ArgumentOutOfRangeException(),
                 _ => throw new ArgumentOutOfRangeException()
                 _ => throw new ArgumentOutOfRangeException()
@@ -1941,12 +1939,12 @@ namespace Hotline.FlowEngine.Workflows
         /// <summary>
         /// <summary>
         /// 办理节点(赋值节点的办理对象信息)
         /// 办理节点(赋值节点的办理对象信息)
         /// </summary>
         /// </summary>
-        private void HandleStep(ISessionContext current, WorkflowStep step, string opinion, string nextStepCode)
+        private void HandleStep(WorkflowStep step, string opinion, string nextStepCode)
         {
         {
-            step.Handle(current.RequiredUserId, current.UserName,
-                current.RequiredOrgId, current.OrgName,
-                current.OrgAreaCode, current.OrgAreaName,
-                current.OrgIsCenter, opinion, nextStepCode);
+            step.Handle(_sessionContext.RequiredUserId, _sessionContext.UserName,
+                _sessionContext.RequiredOrgId, _sessionContext.OrgName,
+                _sessionContext.OrgAreaCode, _sessionContext.OrgAreaName,
+                _sessionContext.OrgIsCenter, opinion, nextStepCode);
 
 
             //var handler = step.FindActualHandler(current.Roles, current.RequiredUserId, current.RequiredOrgId);
             //var handler = step.FindActualHandler(current.Roles, current.RequiredUserId, current.RequiredOrgId);
             //if (handler is not null)
             //if (handler is not null)
@@ -2413,7 +2411,6 @@ namespace Hotline.FlowEngine.Workflows
         }
         }
 
 
         private async Task<WorkflowStep> CreateEndStepAsync(
         private async Task<WorkflowStep> CreateEndStepAsync(
-            ISessionContext current,
             Workflow workflow,
             Workflow workflow,
             StepDefine endStepDefine,
             StepDefine endStepDefine,
             WorkflowStep prevStep,
             WorkflowStep prevStep,
@@ -2425,12 +2422,12 @@ namespace Hotline.FlowEngine.Workflows
 
 
             var handler = new FlowStepHandler
             var handler = new FlowStepHandler
             {
             {
-                Key = current.UserId,
-                Value = current.UserName,
-                UserId = current.RequiredUserId,
-                Username = current.UserName,
-                OrgId = current.OrgId,
-                OrgName = current.OrgName,
+                Key = _sessionContext.UserId,
+                Value = _sessionContext.UserName,
+                UserId = _sessionContext.RequiredUserId,
+                Username = _sessionContext.UserName,
+                OrgId = _sessionContext.OrgId,
+                OrgName = _sessionContext.OrgName,
             };
             };
 
 
             var step = CreateStep(workflow, endStepDefine, prevStep, EFlowAssignType.User, handler,
             var step = CreateStep(workflow, endStepDefine, prevStep, EFlowAssignType.User, handler,
@@ -2441,7 +2438,7 @@ namespace Hotline.FlowEngine.Workflows
             //    _sessionContext.RequiredOrgId, _sessionContext.OrgName,
             //    _sessionContext.RequiredOrgId, _sessionContext.OrgName,
             //    _sessionContext.OrgAreaCode, _sessionContext.OrgAreaName);
             //    _sessionContext.OrgAreaCode, _sessionContext.OrgAreaName);
 
 
-            HandleStep(current, step, "流程归档", string.Empty);
+            HandleStep(step, "流程归档", string.Empty);
 
 
             await _workflowStepRepository.AddAsync(step, cancellationToken);
             await _workflowStepRepository.AddAsync(step, cancellationToken);
             workflow.Steps.Add(step);
             workflow.Steps.Add(step);
@@ -2567,8 +2564,7 @@ namespace Hotline.FlowEngine.Workflows
         /// </summary>
         /// </summary>
         public bool DynamicShouldTerminal(StepDefine currentStepDefine, int currentOrgLevel)
         public bool DynamicShouldTerminal(StepDefine currentStepDefine, int currentOrgLevel)
         {
         {
-	       
-			if (currentStepDefine.InstanceMode is not EInstanceMode.Dynamic)
+            if (currentStepDefine.InstanceMode is not EInstanceMode.Dynamic)
                 throw new UserFriendlyException("非动态节点");
                 throw new UserFriendlyException("非动态节点");
             switch (currentStepDefine.InstancePolicy)
             switch (currentStepDefine.InstancePolicy)
             {
             {
@@ -2578,19 +2574,19 @@ namespace Hotline.FlowEngine.Workflows
                 case EDynamicPolicy.ArriveOneOrg:
                 case EDynamicPolicy.ArriveOneOrg:
                 case EDynamicPolicy.OrgUpHandleCenterTop:
                 case EDynamicPolicy.OrgUpHandleCenterTop:
                 case EDynamicPolicy.OrgUpHandle:
                 case EDynamicPolicy.OrgUpHandle:
-					if (!int.TryParse(currentStepDefine.TerminalDynamicMark, out var tMark))
+                    if (!int.TryParse(currentStepDefine.TerminalDynamicMark, out var tMark))
                         throw new UserFriendlyException(
                         throw new UserFriendlyException(
                             $"TerminalDynamicMark parse to int failed, tMark: {currentStepDefine.TerminalDynamicMark}");
                             $"TerminalDynamicMark parse to int failed, tMark: {currentStepDefine.TerminalDynamicMark}");
                     return currentOrgLevel <= tMark;
                     return currentOrgLevel <= tMark;
                 case EDynamicPolicy.OrgUpLeadCenterTop:
                 case EDynamicPolicy.OrgUpLeadCenterTop:
                 case EDynamicPolicy.OrgUpLead:
                 case EDynamicPolicy.OrgUpLead:
-	                if (!int.TryParse(currentStepDefine.TerminalDynamicMark, out var tMark2))
-		                throw new UserFriendlyException(
-			                $"TerminalDynamicMark parse to int failed, tMark: {currentStepDefine.TerminalDynamicMark}");
-	                var leadRoleCode = _systemSettingCacheManager.GetSetting(SettingConstants.RoleLingDao)?.SettingValue[0];
-					var isLead = _sessionContext.Roles.Any(x => x == leadRoleCode);
-					return (currentOrgLevel <= tMark2) && isLead;
-				case EDynamicPolicy.OrgDownCenterTop:
+                    if (!int.TryParse(currentStepDefine.TerminalDynamicMark, out var tMark2))
+                        throw new UserFriendlyException(
+                            $"TerminalDynamicMark parse to int failed, tMark: {currentStepDefine.TerminalDynamicMark}");
+                    var leadRoleCode = _systemSettingCacheManager.GetSetting(SettingConstants.RoleLingDao)?.SettingValue[0];
+                    var isLead = _sessionContext.Roles.Any(x => x == leadRoleCode);
+                    return (currentOrgLevel <= tMark2) && isLead;
+                case EDynamicPolicy.OrgDownCenterTop:
                 case EDynamicPolicy.OrgDown:
                 case EDynamicPolicy.OrgDown:
                     if (!int.TryParse(currentStepDefine.TerminalDynamicMark, out var tMark1))
                     if (!int.TryParse(currentStepDefine.TerminalDynamicMark, out var tMark1))
                         throw new UserFriendlyException(
                         throw new UserFriendlyException(
@@ -2889,6 +2885,7 @@ namespace Hotline.FlowEngine.Workflows
                     throw new ArgumentOutOfRangeException();
                     throw new ArgumentOutOfRangeException();
             }
             }
         }
         }
+
         #endregion
         #endregion
     }
     }
 }
 }