Просмотр исходного кода

简化SessionContext的使用并改为异步创建

这些代码变更的主要目的是简化 `WorkflowApplication` 和 `OrderApplication` 类中 `SessionContext` 的使用方式,并改为异步创建 `SessionContext`。具体来说:

1. 在 `WorkflowApplication` 和 `OrderApplication` 类的构造函数中,新增了 `ISessionContext` 类型的依赖注入,并将其赋值给 `_sessionContext` 字段。
2. 将原本通过 `_sessionContextProvider.SessionContext` 获取 `SessionContext` 的地方,替换为直接使用 `_sessionContext`。
3. 修改了 `SessionContextCreator.cs` 文件,将 `CreateSessionContext` 方法注释掉,替换为异步方法 `CreateSessionContextAsync`。
4. 在 `SessionContextProvider.cs` 文件中,注释掉了 `SessionContext` 属性和 `SetContext` 方法,并修改了构造函数,去掉了 `sessionContext` 参数。
5. 在 `WorkflowDomainService.cs` 文件中,移除了 `ISessionContextProvider` 的依赖,并将所有使用 `SessionContextProvider.SessionContext` 的地方替换为直接使用 `_sessionContext`。
6. 在 `ISessionContextProvider.cs` 接口中,注释掉了 `SessionContext` 属性和 `SetContext` 方法。

这些变更使得代码更加简洁,减少了通过 `SessionContextProvider` 获取 `SessionContext` 的步骤,并提高了代码的可读性。
xf 1 месяц назад
Родитель
Сommit
c1d3856d9e

+ 100 - 97
src/Hotline.Application/FlowEngine/WorkflowApplication.cs

@@ -43,6 +43,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
     private readonly IRepository<Role> _roleRepository;
     private readonly IWfModuleCacheManager _wfModuleCacheManager;
     private readonly ISessionContextProvider _sessionContextProvider;
+    private readonly ISessionContext _sessionContext;
     private readonly IMapper _mapper;
     private readonly IFileRepository _fileRepository;
     private readonly ILogger<WorkflowApplication> _logger;
@@ -58,6 +59,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         IRepository<Role> roleRepository,
         IWfModuleCacheManager wfModuleCacheManager,
         ISessionContextProvider sessionContextProvider,
+        ISessionContext sessionContext,
         IMapper mapper,
         IFileRepository fileRepository,
         ISystemSettingCacheManager systemSettingCacheManager,
@@ -72,6 +74,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         _roleRepository = roleRepository;
         _wfModuleCacheManager = wfModuleCacheManager;
         _sessionContextProvider = sessionContextProvider;
+        _sessionContext = sessionContext;
         _mapper = mapper;
         _fileRepository = fileRepository;
         _logger = logger;
@@ -99,7 +102,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
     //
     //     //下一节点是否为动态节点
     //     var isNextDynamic = startStepDefine.InstanceMode is EInstanceMode.Dynamic &&
-    //                         !_workflowDomainService.DynamicShouldTerminal(startStepDefine, _sessionContextProvider.SessionContext.OrgLevel);
+    //                         !_workflowDomainService.DynamicShouldTerminal(startStepDefine, _sessionContext.OrgLevel);
     //     var firstStepDefine = isNextDynamic
     //         ? startStepDefine
     //         : definition.FindStepDefine(dto.NextStepCode);
@@ -125,7 +128,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
     //     }
     //
     //     var workflow = await _workflowDomainService.CreateWorkflowAsync(wfModule, dto.Title,
-    //         _sessionContextProvider.SessionContext.RequiredUserId, _sessionContextProvider.SessionContext.RequiredOrgId,
+    //         _sessionContext.RequiredUserId, _sessionContext.RequiredOrgId,
     //         externalId, cancellationToken);
     //
     //     //var startStepHandles = new List<WorkflowStepHandler>{WorkflowStepHandler.Create(workflow.Id, workflow.ExternalId,
@@ -135,22 +138,22 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
     //     var defineHandler = startStepDefine.HandlerTypeItems.First();
     //
     //     var assigner = new UserInfo(
-    //         _sessionContextProvider.SessionContext.UserId,
-    //         _sessionContextProvider.SessionContext.UserName,
-    //         _sessionContextProvider.SessionContext.OrgId,
-    //         _sessionContextProvider.SessionContext.OrgName,
-    //         _sessionContextProvider.SessionContext.OrgIsCenter
+    //         _sessionContext.UserId,
+    //         _sessionContext.UserName,
+    //         _sessionContext.OrgId,
+    //         _sessionContext.OrgName,
+    //         _sessionContext.OrgIsCenter
     //     );
     //
     //     var startStep = _workflowDomainService.CreateStartStep(workflow, startStepDefine, dto, assigner,
     //         new FlowStepHandler
     //         {
-    //             Key = _sessionContextProvider.SessionContext.RequiredUserId,
-    //             Value = _sessionContextProvider.SessionContext.UserName,
-    //             UserId = _sessionContextProvider.SessionContext.UserId,
-    //             Username = _sessionContextProvider.SessionContext.UserName,
-    //             OrgId = _sessionContextProvider.SessionContext.RequiredOrgId,
-    //             OrgName = _sessionContextProvider.SessionContext.OrgName,
+    //             Key = _sessionContext.RequiredUserId,
+    //             Value = _sessionContext.UserName,
+    //             UserId = _sessionContext.UserId,
+    //             Username = _sessionContext.UserName,
+    //             OrgId = _sessionContext.RequiredOrgId,
+    //             OrgName = _sessionContext.OrgName,
     //             RoleId = defineHandler.Key,
     //             RoleName = defineHandler.Value,
     //         }, expiredTime);
@@ -181,11 +184,11 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
     //
     //     //更新受理人信息
     //     workflow.UpdateAcceptor(
-    //         _sessionContextProvider.SessionContext.RequiredUserId,
-    //         _sessionContextProvider.SessionContext.UserName,
-    //         _sessionContextProvider.SessionContext.StaffNo,
-    //         _sessionContextProvider.SessionContext.RequiredOrgId,
-    //         _sessionContextProvider.SessionContext.OrgName);
+    //         _sessionContext.RequiredUserId,
+    //         _sessionContext.UserName,
+    //         _sessionContext.StaffNo,
+    //         _sessionContext.RequiredOrgId,
+    //         _sessionContext.OrgName);
     //
     //     await _workflowDomainService.StartAsync(workflow, startStep, dto, firstStepDefine, isNextDynamic,
     //         flowAssignInfo, counterSignType, expiredTime, cancellationToken);
@@ -216,29 +219,29 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         var startStepDefine = definition.FindStartStepDefine();
 
         var workflow = await _workflowDomainService.CreateWorkflowAsync(wfModule, dto.Title,
-            _sessionContextProvider.SessionContext.RequiredUserId, _sessionContextProvider.SessionContext.RequiredOrgId,
+            _sessionContext.RequiredUserId, _sessionContext.RequiredOrgId,
             externalId, cancellationToken);
 
         var defineHandler = startStepDefine.HandlerTypeItems.First();
 
         var assigner = new UserInfo(
-            _sessionContextProvider.SessionContext.UserId,
-            _sessionContextProvider.SessionContext.UserName,
-            _sessionContextProvider.SessionContext.OrgId,
-            _sessionContextProvider.SessionContext.OrgName,
-            _sessionContextProvider.SessionContext.OrgIsCenter
+            _sessionContext.UserId,
+            _sessionContext.UserName,
+            _sessionContext.OrgId,
+            _sessionContext.OrgName,
+            _sessionContext.OrgIsCenter
         );
 
         //todo 需求:所有坐席都可以办,临时方案,后期重构:依据策略决定指派对象
         var startStep = _workflowDomainService.CreateStartStep(workflow, startStepDefine, dto, assigner,
             new StepAssignInfo
             {
-                Key = _sessionContextProvider.SessionContext.RequiredUserId,
-                Value = _sessionContextProvider.SessionContext.UserName,
-                UserId = _sessionContextProvider.SessionContext.UserId,
-                Username = _sessionContextProvider.SessionContext.UserName,
-                OrgId = _sessionContextProvider.SessionContext.RequiredOrgId,
-                OrgName = _sessionContextProvider.SessionContext.OrgName,
+                Key = _sessionContext.RequiredUserId,
+                Value = _sessionContext.UserName,
+                UserId = _sessionContext.UserId,
+                Username = _sessionContext.UserName,
+                OrgId = _sessionContext.RequiredOrgId,
+                OrgName = _sessionContext.OrgName,
                 RoleId = defineHandler.Key,
                 RoleName = defineHandler.Value,
                 FlowAssignType = EFlowAssignType.Role,
@@ -261,11 +264,11 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
 
         //更新受理人信息
         workflow.UpdateAcceptor(
-            _sessionContextProvider.SessionContext.RequiredUserId,
-            _sessionContextProvider.SessionContext.UserName,
-            _sessionContextProvider.SessionContext.StaffNo,
-            _sessionContextProvider.SessionContext.RequiredOrgId,
-            _sessionContextProvider.SessionContext.OrgName);
+            _sessionContext.RequiredUserId,
+            _sessionContext.UserName,
+            _sessionContext.StaffNo,
+            _sessionContext.RequiredOrgId,
+            _sessionContext.OrgName);
 
         return workflow.Id;
     }
@@ -296,7 +299,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
 
     //    //下一节点是否为动态节点
     //    var isNextDynamic = currentStepDefine.InstanceMode is EInstanceMode.Dynamic &&
-    //                        !_workflowDomainService.DynamicShouldTerminal(currentStepDefine, _sessionContextProvider.SessionContext.OrgLevel);
+    //                        !_workflowDomainService.DynamicShouldTerminal(currentStepDefine, _sessionContext.OrgLevel);
 
     //    StepDefine nextStepDefine;
     //    if (isNextDynamic
@@ -355,11 +358,11 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
             withTraces: true, withCountersigns: true, cancellationToken: cancellationToken);
 
         return await _workflowDomainService.PreviousAsync(workflow, dto, new OperatorInfo(
-            _sessionContextProvider.SessionContext.RequiredUserId, _sessionContextProvider.SessionContext.UserName,
-            _sessionContextProvider.SessionContext.RequiredOrgId, _sessionContextProvider.SessionContext.OrgName,
-            _sessionContextProvider.SessionContext.OrgAreaCode, _sessionContextProvider.SessionContext.OrgAreaName,
-            _sessionContextProvider.SessionContext.OrgIsCenter, _sessionContextProvider.SessionContext.Roles,
-            _sessionContextProvider.SessionContext.OrgLevel), handleMode, newStepConfig, cancellationToken);
+            _sessionContext.RequiredUserId, _sessionContext.UserName,
+            _sessionContext.RequiredOrgId, _sessionContext.OrgName,
+            _sessionContext.OrgAreaCode, _sessionContext.OrgAreaName,
+            _sessionContext.OrgIsCenter, _sessionContext.Roles,
+            _sessionContext.OrgLevel), handleMode, newStepConfig, cancellationToken);
     }
 
     /// <summary>
@@ -480,7 +483,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
 
         var startStepDefine = definition.FindStartStepDefine();
         if (startStepDefine.InstanceMode is EInstanceMode.Dynamic &&
-            !_workflowDomainService.DynamicShouldTerminal(startStepDefine, _sessionContextProvider.SessionContext.OrgLevel))
+            !_workflowDomainService.DynamicShouldTerminal(startStepDefine, _sessionContext.OrgLevel))
         {
             var settingHandle = _systemSettingCacheManager.GetSetting(SettingConstants.RoleJingBanRen);
             var settingLead = _systemSettingCacheManager.GetSetting(SettingConstants.RoleLingDao);
@@ -525,8 +528,8 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         var workflow = await _workflowDomainService.GetWorkflowAsync(workflowId, withDefine: true, withSteps: true,
             cancellationToken: cancellationToken);
         var currentStep = _workflowDomainService.FindCurrentStepWaitForHandle(workflow,
-            _sessionContextProvider.SessionContext.RequiredUserId, _sessionContextProvider.SessionContext.RequiredOrgId,
-            _sessionContextProvider.SessionContext.Roles);
+            _sessionContext.RequiredUserId, _sessionContext.RequiredOrgId,
+            _sessionContext.Roles);
         if (currentStep.StepType is EStepType.End)
             throw new UserFriendlyException("结束节点无需办理");
 
@@ -638,7 +641,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         var currentStepDefine = _workflowDomainService.GetStepDefine(workflow.WorkflowDefinition, currentStep.Code);
 
         if (currentStep.InstanceMode is EInstanceMode.Dynamic &&
-            !_workflowDomainService.DynamicShouldTerminal(currentStepDefine, _sessionContextProvider.SessionContext.OrgLevel))
+            !_workflowDomainService.DynamicShouldTerminal(currentStepDefine, _sessionContext.OrgLevel))
         {
             var settingHandle = _systemSettingCacheManager.GetSetting(SettingConstants.RoleJingBanRen);
             var settingLead = _systemSettingCacheManager.GetSetting(SettingConstants.RoleLingDao);
@@ -827,7 +830,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         nextDto.ReviewResult = EReviewResult.Failed;
         nextDto.NextStepCode = endStepDefine.Code;
         nextDto.NextStepName = endStepDefine.Name;
-        nextDto.FlowDirection = _sessionContextProvider.SessionContext.OrgIsCenter
+        nextDto.FlowDirection = _sessionContext.OrgIsCenter
             ? EFlowDirection.CenterToFile
             : EFlowDirection.OrgToFile;
 
@@ -969,7 +972,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
             };
         }
 
-        var orgId = _sessionContextProvider.SessionContext.RequiredOrgId;
+        var orgId = _sessionContext.RequiredOrgId;
         var levelOneOrgId = orgId.GetHigherOrgId();
         var isCenter = levelOneOrgId.IsCenter();
         switch (stepDefine.HandlerType)
@@ -1065,8 +1068,8 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
                 }
                 else
                 {
-                    var upLevels = levels.Where(d => d <= _sessionContextProvider.SessionContext.OrgLevel).ToList();
-                    var lowLevels = levels.Where(d => d > _sessionContextProvider.SessionContext.OrgLevel).ToList();
+                    var upLevels = levels.Where(d => d <= _sessionContext.OrgLevel).ToList();
+                    var lowLevels = levels.Where(d => d > _sessionContext.OrgLevel).ToList();
                     orgs1 = await query
                         .Where(d => (upLevels.Contains(d.Level) && d.Id.StartsWith(levelOneOrgId)) ||
                                     (lowLevels.Contains(d.Level) && d.Id.StartsWith(orgId)))
@@ -1183,7 +1186,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         switch (policy)
         {
             case EDynamicPolicy.OrgUpCenterTop:
-                orgLevel = _sessionContextProvider.SessionContext.OrgLevel - 1;
+                orgLevel = _sessionContext.OrgLevel - 1;
                 if (orgLevel < 0) orgLevel = 0;
 
                 if (orgLevel == 0)
@@ -1209,7 +1212,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
                     businessType = EBusinessType.Department;
 
                     //上级部门Id
-                    upperOrgId = _sessionContextProvider.SessionContext.RequiredOrgId.GetHigherOrgId(orgLevel);
+                    upperOrgId = _sessionContext.RequiredOrgId.GetHigherOrgId(orgLevel);
                     items = await _organizeRepository.Queryable()
                         .Where(d => d.Id == upperOrgId)
                         .Select(d => new StepAssignInfo
@@ -1225,15 +1228,15 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
 
                 break;
             case EDynamicPolicy.OrgUp:
-                businessType = _sessionContextProvider.SessionContext.OrgIsCenter
+                businessType = _sessionContext.OrgIsCenter
                     ? EBusinessType.Send
-                    : _sessionContextProvider.SessionContext.RequiredOrgId.CalcOrgLevel() == 1
+                    : _sessionContext.RequiredOrgId.CalcOrgLevel() == 1
                         ? EBusinessType.Send
                         : EBusinessType.Department;
-                orgLevel = _sessionContextProvider.SessionContext.OrgLevel - 1;
+                orgLevel = _sessionContext.OrgLevel - 1;
                 if (orgLevel <= 0) orgLevel = 1;
                 //上级部门Id
-                upperOrgId = _sessionContextProvider.SessionContext.RequiredOrgId.GetHigherOrgId(orgLevel);
+                upperOrgId = _sessionContext.RequiredOrgId.GetHigherOrgId(orgLevel);
                 items = await _organizeRepository.Queryable()
                     .Where(d => d.Id == upperOrgId)
                     .Select(d => new StepAssignInfo
@@ -1247,7 +1250,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
                     .ToListAsync(cancellationToken);
                 break;
             case EDynamicPolicy.OrgUpHandleCenterTop:
-                orgLevel = _sessionContextProvider.SessionContext.OrgLevel - 1;
+                orgLevel = _sessionContext.OrgLevel - 1;
                 if (orgLevel < 0) orgLevel = 0;
 
                 if (orgLevel == 0)
@@ -1273,7 +1276,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
                     businessType = EBusinessType.Department;
                     roleName = handleRoleName;
                     //上级部门Id
-                    upperOrgId = _sessionContextProvider.SessionContext.RequiredOrgId.GetHigherOrgId(orgLevel);
+                    upperOrgId = _sessionContext.RequiredOrgId.GetHigherOrgId(orgLevel);
                     items = await _organizeRepository.Queryable()
                         .Where(d => d.Id == upperOrgId)
                         .Select(d => new StepAssignInfo
@@ -1291,16 +1294,16 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
 
                 break;
             case EDynamicPolicy.OrgUpHandle:
-                businessType = _sessionContextProvider.SessionContext.OrgIsCenter
+                businessType = _sessionContext.OrgIsCenter
                     ? EBusinessType.Send
-                    : _sessionContextProvider.SessionContext.RequiredOrgId.CalcOrgLevel() == 1
+                    : _sessionContext.RequiredOrgId.CalcOrgLevel() == 1
                         ? EBusinessType.Send
                         : EBusinessType.Department;
-                orgLevel = _sessionContextProvider.SessionContext.OrgLevel - 1;
+                orgLevel = _sessionContext.OrgLevel - 1;
                 if (orgLevel <= 0) orgLevel = 1;
                 roleName = handleRoleName;
                 //上级部门Id
-                upperOrgId = _sessionContextProvider.SessionContext.RequiredOrgId.GetHigherOrgId(orgLevel);
+                upperOrgId = _sessionContext.RequiredOrgId.GetHigherOrgId(orgLevel);
                 items = await _organizeRepository.Queryable()
                     .Where(d => d.Id == upperOrgId)
                     .Select(d => new StepAssignInfo
@@ -1316,11 +1319,11 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
                     .ToListAsync(cancellationToken);
                 break;
             case EDynamicPolicy.OrgUpLeadCenterTop:
-                orgLevel = _sessionContextProvider.SessionContext.OrgLevel - 1;
+                orgLevel = _sessionContext.OrgLevel - 1;
                 if (orgLevel < 0) orgLevel = 0;
-                isLead = _sessionContextProvider.SessionContext.Roles.Any(x => x == leadRoleCode);
+                isLead = _sessionContext.Roles.Any(x => x == leadRoleCode);
                 isSkip = await _userRepository.Queryable()
-                    .AnyAsync(x => x.OrgId == _sessionContextProvider.SessionContext.RequiredOrgId && x.Roles.Any(r => r.Name == leadRoleCode),
+                    .AnyAsync(x => x.OrgId == _sessionContext.RequiredOrgId && x.Roles.Any(r => r.Name == leadRoleCode),
                         cancellationToken);
                 if (orgLevel == 0 && (isLead || !isSkip))
                 {
@@ -1343,7 +1346,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
                 else
                 {
                     businessType = EBusinessType.Department;
-                    upperOrgId = _sessionContextProvider.SessionContext.RequiredOrgId.GetHigherOrgId(_sessionContextProvider.SessionContext.OrgLevel);
+                    upperOrgId = _sessionContext.RequiredOrgId.GetHigherOrgId(_sessionContext.OrgLevel);
                     if (!isLead)
                     {
                         if (isSkip)
@@ -1356,7 +1359,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
                     if (isLead || !isSkip)
                     {
                         //上级部门Id
-                        upperOrgId = _sessionContextProvider.SessionContext.RequiredOrgId.GetHigherOrgId(orgLevel);
+                        upperOrgId = _sessionContext.RequiredOrgId.GetHigherOrgId(orgLevel);
                         roleId = handleRoleCode;
                         roleName = handleRoleName;
                     }
@@ -1382,19 +1385,19 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
 
                 break;
             case EDynamicPolicy.OrgUpLead:
-                businessType = _sessionContextProvider.SessionContext.OrgIsCenter
+                businessType = _sessionContext.OrgIsCenter
                     ? EBusinessType.Send
-                    : _sessionContextProvider.SessionContext.RequiredOrgId.CalcOrgLevel() == 1
+                    : _sessionContext.RequiredOrgId.CalcOrgLevel() == 1
                         ? EBusinessType.Send
                         : EBusinessType.Department;
-                orgLevel = _sessionContextProvider.SessionContext.OrgLevel - 1;
+                orgLevel = _sessionContext.OrgLevel - 1;
                 if (orgLevel <= 0) orgLevel = 1;
-                upperOrgId = _sessionContextProvider.SessionContext.RequiredOrgId.GetHigherOrgId(_sessionContextProvider.SessionContext.OrgLevel);
-                isLead = _sessionContextProvider.SessionContext.Roles.Any(x => x == leadRoleCode);
+                upperOrgId = _sessionContext.RequiredOrgId.GetHigherOrgId(_sessionContext.OrgLevel);
+                isLead = _sessionContext.Roles.Any(x => x == leadRoleCode);
                 if (!isLead)
                 {
                     isSkip = await _userRepository.Queryable()
-                        .AnyAsync(x => x.OrgId == _sessionContextProvider.SessionContext.RequiredOrgId && x.Roles.Any(r => r.Name == leadRoleCode),
+                        .AnyAsync(x => x.OrgId == _sessionContext.RequiredOrgId && x.Roles.Any(r => r.Name == leadRoleCode),
                             cancellationToken);
                     if (isSkip)
                     {
@@ -1406,7 +1409,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
                 if (isLead || !isSkip)
                 {
                     //上级部门Id
-                    upperOrgId = _sessionContextProvider.SessionContext.RequiredOrgId.GetHigherOrgId(orgLevel);
+                    upperOrgId = _sessionContext.RequiredOrgId.GetHigherOrgId(orgLevel);
                     roleId = handleRoleCode;
                     roleName = handleRoleName;
                 }
@@ -1430,12 +1433,12 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
                     .ToListAsync(cancellationToken);
                 break;
             case EDynamicPolicy.ArriveCenter:
-                businessType = _sessionContextProvider.SessionContext.OrgIsCenter
+                businessType = _sessionContext.OrgIsCenter
                     ? EBusinessType.Send
-                    : _sessionContextProvider.SessionContext.RequiredOrgId.CalcOrgLevel() == 1
+                    : _sessionContext.RequiredOrgId.CalcOrgLevel() == 1
                         ? EBusinessType.Send
                         : EBusinessType.Department;
-                orgLevel = _sessionContextProvider.SessionContext.OrgLevel - 1;
+                orgLevel = _sessionContext.OrgLevel - 1;
                 if (orgLevel <= 0) orgLevel = 1;
                 items = await _organizeRepository.Queryable()
                     .Where(d => d.IsCenter)
@@ -1450,12 +1453,12 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
                     .ToListAsync(cancellationToken);
                 break;
             case EDynamicPolicy.ArriveOneOrg:
-                businessType = _sessionContextProvider.SessionContext.OrgIsCenter ? EBusinessType.Send : EBusinessType.Department;
-                orgLevel = _sessionContextProvider.SessionContext.OrgIsCenter ? 0 : 1;
+                businessType = _sessionContext.OrgIsCenter ? EBusinessType.Send : EBusinessType.Department;
+                orgLevel = _sessionContext.OrgIsCenter ? 0 : 1;
                 //上级部门Id
-                upperOrgId = _sessionContextProvider.SessionContext.OrgIsCenter
-                    ? _sessionContextProvider.SessionContext.RequiredOrgId.Substring(0, 3)
-                    : _sessionContextProvider.SessionContext.RequiredOrgId.Substring(0, 6);
+                upperOrgId = _sessionContext.OrgIsCenter
+                    ? _sessionContext.RequiredOrgId.Substring(0, 3)
+                    : _sessionContext.RequiredOrgId.Substring(0, 6);
                 items = await _organizeRepository.Queryable()
                     .Where(d => d.Id == upperOrgId)
                     .Select(d => new StepAssignInfo
@@ -1470,7 +1473,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
                 break;
             case EDynamicPolicy.OrgDownCenterTop:
                 businessType = EBusinessType.Department;
-                if (_sessionContextProvider.SessionContext.OrgIsCenter)
+                if (_sessionContext.OrgIsCenter)
                 {
                     orgLevel = 1;
                     items = await _organizeRepository.Queryable()
@@ -1487,10 +1490,10 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
                 }
                 else
                 {
-                    orgLevel = _sessionContextProvider.SessionContext.OrgLevel + 1;
+                    orgLevel = _sessionContext.OrgLevel + 1;
                     items = await _organizeRepository.Queryable()
                         .Where(d => !d.IsCenter && d.Level == orgLevel &&
-                                    d.Id.StartsWith(_sessionContextProvider.SessionContext.RequiredOrgId))
+                                    d.Id.StartsWith(_sessionContext.RequiredOrgId))
                         .Select(d => new StepAssignInfo
                         {
                             Key = d.Id,
@@ -1505,9 +1508,9 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
                 break;
             case EDynamicPolicy.OrgDown:
                 businessType = EBusinessType.Department;
-                orgLevel = _sessionContextProvider.SessionContext.OrgLevel + 1;
+                orgLevel = _sessionContext.OrgLevel + 1;
                 items = await _organizeRepository.Queryable()
-                    .Where(d => d.Level == orgLevel && d.Id.StartsWith(_sessionContextProvider.SessionContext.RequiredOrgId))
+                    .Where(d => d.Level == orgLevel && d.Id.StartsWith(_sessionContext.RequiredOrgId))
                     .Select(d => new StepAssignInfo
                     {
                         Key = d.Id,
@@ -1552,7 +1555,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         switch (policy)
         {
             case ECountersignPolicy.OrgUpCenterTop:
-                orgLevel = _sessionContextProvider.SessionContext.OrgLevel - 1;
+                orgLevel = _sessionContext.OrgLevel - 1;
                 if (orgLevel < 0) orgLevel = 0;
 
                 if (orgLevel == 0)
@@ -1578,7 +1581,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
                     businessType = EBusinessType.Department;
 
                     //上级部门Id
-                    upperOrgId = _sessionContextProvider.SessionContext.RequiredOrgId.GetHigherOrgId(orgLevel);
+                    upperOrgId = _sessionContext.RequiredOrgId.GetHigherOrgId(orgLevel);
                     items = await _organizeRepository.Queryable()
                         .Where(d => d.Id == upperOrgId)
                         .Select(d => new StepAssignInfo
@@ -1594,15 +1597,15 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
 
                 break;
             case ECountersignPolicy.OrgUp:
-                businessType = _sessionContextProvider.SessionContext.OrgIsCenter
+                businessType = _sessionContext.OrgIsCenter
                     ? EBusinessType.Send
-                    : _sessionContextProvider.SessionContext.RequiredOrgId.CalcOrgLevel() == 1
+                    : _sessionContext.RequiredOrgId.CalcOrgLevel() == 1
                         ? EBusinessType.Send
                         : EBusinessType.Department;
-                orgLevel = _sessionContextProvider.SessionContext.OrgLevel - 1;
+                orgLevel = _sessionContext.OrgLevel - 1;
                 if (orgLevel <= 0) orgLevel = 1;
                 //上级部门Id
-                upperOrgId = _sessionContextProvider.SessionContext.RequiredOrgId.GetHigherOrgId(orgLevel);
+                upperOrgId = _sessionContext.RequiredOrgId.GetHigherOrgId(orgLevel);
                 items = await _organizeRepository.Queryable()
                     .Where(d => d.Id == upperOrgId)
                     .Select(d => new StepAssignInfo
@@ -1617,7 +1620,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
                 break;
             case ECountersignPolicy.OrgDownCenterTop:
                 businessType = EBusinessType.Department;
-                if (_sessionContextProvider.SessionContext.OrgIsCenter)
+                if (_sessionContext.OrgIsCenter)
                 {
                     orgLevel = 1;
                     items = await _organizeRepository.Queryable()
@@ -1634,10 +1637,10 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
                 }
                 else
                 {
-                    orgLevel = _sessionContextProvider.SessionContext.OrgLevel + 1;
+                    orgLevel = _sessionContext.OrgLevel + 1;
                     items = await _organizeRepository.Queryable()
                         .Where(d => !d.IsCenter && d.Level == orgLevel &&
-                                    d.Id.StartsWith(_sessionContextProvider.SessionContext.RequiredOrgId))
+                                    d.Id.StartsWith(_sessionContext.RequiredOrgId))
                         .Select(d => new StepAssignInfo
                         {
                             Key = d.Id,
@@ -1652,9 +1655,9 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
                 break;
             case ECountersignPolicy.OrgDown:
                 businessType = EBusinessType.Department;
-                orgLevel = _sessionContextProvider.SessionContext.OrgLevel + 1;
+                orgLevel = _sessionContext.OrgLevel + 1;
                 items = await _organizeRepository.Queryable()
-                    .Where(d => d.Level == orgLevel && d.Id.StartsWith(_sessionContextProvider.SessionContext.RequiredOrgId))
+                    .Where(d => d.Level == orgLevel && d.Id.StartsWith(_sessionContext.RequiredOrgId))
                     .Select(d => new StepAssignInfo
                     {
                         Key = d.Id,

+ 57 - 57
src/Hotline.Application/Orders/OrderApplication.cs

@@ -352,9 +352,9 @@ public class OrderApplication : IOrderApplication, IScopeDependency
     public ISugarQueryable<Order> GetAboutToExpireAsync(AboutToExpireListDto dto)
     {
         DateTime? dateTime = DateTime.Now;
-        var IsCenter = _sessionContextProvider.SessionContext.OrgIsCenter;
-        int orgLevel = _sessionContextProvider.SessionContext.OrgLevel;
-        var orgCode = _sessionContextProvider.SessionContext.OrgId;
+        var IsCenter = _sessionContext.OrgIsCenter;
+        int orgLevel = _sessionContext.OrgLevel;
+        var orgCode = _sessionContext.OrgId;
         var query = _orderRepository.Queryable();
         if (IsCenter == true)
             query = _orderRepository.Queryable(canView: !IsCenter);
@@ -363,11 +363,11 @@ public class OrderApplication : IOrderApplication, IScopeDependency
             .WhereIF(orgLevel == 3, d => SqlFunc.Subqueryable<WorkflowStep>()
                 .Where(step => step.ExternalId == d.Id && step.Status != EWorkflowStepStatus.Handled &&
                                ((step.FlowAssignType == EFlowAssignType.User && !string.IsNullOrEmpty(step.HandlerId) &&
-                                 step.HandlerId == _sessionContextProvider.SessionContext.RequiredUserId) ||
+                                 step.HandlerId == _sessionContext.RequiredUserId) ||
                                 (step.FlowAssignType == EFlowAssignType.Org && !string.IsNullOrEmpty(step.HandlerOrgId) &&
-                                 step.HandlerOrgId == _sessionContextProvider.SessionContext.RequiredOrgId) ||
+                                 step.HandlerOrgId == _sessionContext.RequiredOrgId) ||
                                 (step.FlowAssignType == EFlowAssignType.Role && !string.IsNullOrEmpty(step.RoleId) &&
-                                 _sessionContextProvider.SessionContext.Roles.Contains(step.RoleId))))
+                                 _sessionContext.Roles.Contains(step.RoleId))))
                 .Any())
             .WhereIF(orgLevel == 2 || orgLevel == 1, d => SqlFunc.Subqueryable<WorkflowStep>()
                 .Where(step => step.ExternalId == d.Id &&
@@ -437,9 +437,9 @@ public class OrderApplication : IOrderApplication, IScopeDependency
     //    //stTime = _timeLimitDomainService.WorkDay(stTime);
     //    //DateTime stTime2 = _timeLimitDomainService.WorkDay(DateTime.Now);
     //    DateTime? dateTime = DateTime.Now;
-    //    var IsCenter = _sessionContextProvider.SessionContext.OrgIsCenter;
-    //    int orgLevel = _sessionContextProvider.SessionContext.OrgLevel;
-    //    var orgCode = _sessionContextProvider.SessionContext.OrgId;
+    //    var IsCenter = _sessionContext.OrgIsCenter;
+    //    int orgLevel = _sessionContext.OrgLevel;
+    //    var orgCode = _sessionContext.OrgId;
     //    //var query = _orderRepository.Queryable();
     //    //if (IsCenter == true)
     //    //    query = _orderRepository.Queryable(canView: !IsCenter);
@@ -449,11 +449,11 @@ public class OrderApplication : IOrderApplication, IScopeDependency
     //        .WhereIF(orgLevel == 3, d => SqlFunc.Subqueryable<WorkflowStep>()
     //            .Where(step => step.ExternalId == d.Id && step.Status != EWorkflowStepStatus.Handled &&
     //                           ((step.FlowAssignType == EFlowAssignType.User && !string.IsNullOrEmpty(step.HandlerId) &&
-    //                             step.HandlerId == _sessionContextProvider.SessionContext.RequiredUserId) ||
+    //                             step.HandlerId == _sessionContext.RequiredUserId) ||
     //                            (step.FlowAssignType == EFlowAssignType.Org && !string.IsNullOrEmpty(step.HandlerOrgId) &&
-    //                             step.HandlerOrgId == _sessionContextProvider.SessionContext.RequiredOrgId) ||
+    //                             step.HandlerOrgId == _sessionContext.RequiredOrgId) ||
     //                            (step.FlowAssignType == EFlowAssignType.Role && !string.IsNullOrEmpty(step.RoleId) &&
-    //                             _sessionContextProvider.SessionContext.Roles.Contains(step.RoleId))))
+    //                             _sessionContext.Roles.Contains(step.RoleId))))
     //            .Any())
     //         .WhereIF(orgLevel == 2 || orgLevel == 1, d => SqlFunc.Subqueryable<WorkflowStep>()
     //            .Where(step => step.ExternalId == d.Id &&
@@ -542,18 +542,18 @@ public class OrderApplication : IOrderApplication, IScopeDependency
     {
         // DateTime stTime = _timeLimitDomainService.WorkDay(DateTime.Now);
         DateTime stTime = _expireTime.WorkDay(DateTime.Now).GetAwaiter().GetResult();
-        var IsCenter = _sessionContextProvider.SessionContext.OrgIsCenter;
-        int orgLevel = _sessionContextProvider.SessionContext.OrgLevel;
-        var orgCode = _sessionContextProvider.SessionContext.OrgId;
+        var IsCenter = _sessionContext.OrgIsCenter;
+        int orgLevel = _sessionContext.OrgLevel;
+        var orgCode = _sessionContext.OrgId;
         return _orderRepository.Queryable(canView: false).Includes(d => d.OrderDelays)
             .WhereIF(orgLevel == 3, d => SqlFunc.Subqueryable<WorkflowStep>()
                 .Where(step => step.ExternalId == d.Id && step.Status != EWorkflowStepStatus.Handled &&
                                ((step.FlowAssignType == EFlowAssignType.User && !string.IsNullOrEmpty(step.HandlerId) &&
-                                 step.HandlerId == _sessionContextProvider.SessionContext.RequiredUserId) ||
+                                 step.HandlerId == _sessionContext.RequiredUserId) ||
                                 (step.FlowAssignType == EFlowAssignType.Org && !string.IsNullOrEmpty(step.HandlerOrgId) &&
-                                 step.HandlerOrgId == _sessionContextProvider.SessionContext.RequiredOrgId) ||
+                                 step.HandlerOrgId == _sessionContext.RequiredOrgId) ||
                                 (step.FlowAssignType == EFlowAssignType.Role && !string.IsNullOrEmpty(step.RoleId) &&
-                                 _sessionContextProvider.SessionContext.Roles.Contains(step.RoleId))))
+                                 _sessionContext.Roles.Contains(step.RoleId))))
                 .Any())
             // .WhereIF(orgLevel == 2 || orgLevel == 1, d =>  d.ActualHandleOrgCode.StartsWith(orgCode))
             .WhereIF(orgLevel == 2 || orgLevel == 1, d => SqlFunc.Subqueryable<WorkflowStep>()
@@ -1170,7 +1170,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
                 expiredTimeConfig.TimeText, expiredTimeConfig.Count,
                 expiredTimeConfig.TimeType, expiredTimeConfig.ExpiredTime,
                 expiredTimeConfig.NearlyExpiredTime, expiredTimeConfig.NearlyExpiredTimeOne, dto.Workflow.Opinion,
-                _sessionContextProvider.SessionContext.RequiredUserId, _sessionContextProvider.SessionContext.UserName,
+                _sessionContext.RequiredUserId, _sessionContext.UserName,
                 canUpdateOrderSender);
             //TODO发送短信即将超期
             //_capPublisher.PublishDelay(expiredTimeConfig.NearlyExpiredTime - DateTime.Now, EventNames.HotlineOrderNearlyExpiredTimeSms, new PublishNearlyExpiredTimeSmsDto() { OrderId = order.Id });
@@ -1203,7 +1203,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
                 expiredTimeConfig.TimeText, expiredTimeConfig.Count,
                 expiredTimeConfig.TimeType, expiredTimeConfig.ExpiredTime,
                 expiredTimeConfig.NearlyExpiredTime, expiredTimeConfig.NearlyExpiredTimeOne, dto.Workflow.Opinion,
-                _sessionContextProvider.SessionContext.RequiredUserId, _sessionContextProvider.SessionContext.UserName,
+                _sessionContext.RequiredUserId, _sessionContext.UserName,
                 canUpdateOrderSender);
             //TODO发送短信即将超期
             //_capPublisher.PublishDelay(expiredTimeConfig.NearlyExpiredTime - DateTime.Now, EventNames.HotlineOrderNearlyExpiredTimeSms, new PublishNearlyExpiredTimeSmsDto() { OrderId = order.Id });
@@ -1285,11 +1285,11 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         if (_appOptions.Value.IsZiGong == true)
         {
             if (string.IsNullOrEmpty(visit.EmployeeId))
-                visit.EmployeeId = _sessionContextProvider.SessionContext.UserId;
+                visit.EmployeeId = _sessionContext.UserId;
         }
         else
         {
-            visit.EmployeeId = _sessionContextProvider.SessionContext.UserId;
+            visit.EmployeeId = _sessionContext.UserId;
         }
 
         visit.CallId = dto.CallId;
@@ -1347,10 +1347,10 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         //handle visit trace
         //上面取得当前操作人,需求变动前暂时可以这样写
         var visitor = new UserInfo(
-            _sessionContextProvider.SessionContext.UserId,
-            _sessionContextProvider.SessionContext.UserName,
-            _sessionContextProvider.SessionContext.OrgId,
-            _sessionContextProvider.SessionContext.OrgName);
+            _sessionContext.UserId,
+            _sessionContext.UserName,
+            _sessionContext.OrgId,
+            _sessionContext.OrgName);
         await _workflowDomainService.HandleVisitTraceAsync(visit.Id, visitor, visit.VisitTime ?? DateTime.Now, cancellationToken);
 
         var orderDto = _mapper.Map<OrderDto>(visit.Order);
@@ -1378,7 +1378,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
                 Id = visit.Id,
                 Order = orderDto,
                 OrderVisitDetails = _mapper.Map<List<VisitDetailDto>>(visit.OrderVisitDetails),
-                VisitName = _sessionContextProvider.SessionContext.UserName,
+                VisitName = _sessionContext.UserName,
                 VisitTime = visit.VisitTime,
                 VisitType = visit.VisitType,
                 VisitState = visit.VisitState,
@@ -1429,7 +1429,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
                 .Where(m => m.Id == item.Id)
                 .SetColumns(m => m.VisitState == EVisitState.SMSVisiting)
                 // .SetColumns(m => m.VisitType == EVisitType.SmsVisit)
-                .SetColumns(m => m.EmployeeId == _sessionContextProvider.SessionContext.RequiredUserId)
+                .SetColumns(m => m.EmployeeId == _sessionContext.RequiredUserId)
                 .ExecuteCommandAsync(cancellationToken);
 
             // 发送短信后推送一个 48小时的延迟消息队列. 当消息队列收到消息时, 判断用户是否回复了, 如果未回复短信就 默认满意
@@ -1474,7 +1474,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
 
     public ISugarQueryable<Order> QueryOrders(QueryOrderDto dto)
     {
-        var isCenter = _sessionContextProvider.SessionContext.OrgIsCenter;
+        var isCenter = _sessionContext.OrgIsCenter;
 
         var query = _orderRepository.Queryable(canView: false);
         if (!isCenter)
@@ -1482,7 +1482,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
             query.Where(d => SqlFunc.Subqueryable<WorkflowStep>()
                 .Where(step => step.ExternalId == d.Id &&
                                !string.IsNullOrEmpty(step.HandlerOrgId) &&
-                               step.HandlerOrgId.StartsWith(_sessionContextProvider.SessionContext.RequiredOrgId)).Any());
+                               step.HandlerOrgId.StartsWith(_sessionContext.RequiredOrgId)).Any());
         }
 
         query = query.Includes(d => d.OrderScreens).Includes(d => d.OrderTags);
@@ -1626,14 +1626,14 @@ public class OrderApplication : IOrderApplication, IScopeDependency
     /// <returns></returns>
     public ISugarQueryable<Order, WorkflowStep> QueryUnsignedOrders(QueryUnsignedOrdersRequest dto)
     {
-        var IsCenter = _sessionContextProvider.SessionContext.OrgIsCenter;
+        var IsCenter = _sessionContext.OrgIsCenter;
         return _orderRepository.Queryable()
             .LeftJoin<WorkflowStep>((x, ws) => x.Id == ws.ExternalId)
             .WhereIF(dto.StartTime.HasValue, (x, ws) => ws.CreationTime >= dto.StartTime)
             .WhereIF(dto.EndTime.HasValue, (x, ws) => ws.CreationTime <= dto.EndTime)
-            .WhereIF(dto.Level == 0 && IsCenter == false, (x, ws) => ws.AcceptorOrgId.StartsWith(_sessionContextProvider.SessionContext.OrgId))
-            .WhereIF(dto.Level == 1, (x, ws) => ws.AcceptorOrgId == _sessionContextProvider.SessionContext.OrgId)
-            .WhereIF(dto.Level == 2, (x, ws) => ws.AcceptorOrgId.StartsWith(_sessionContextProvider.SessionContext.OrgId))
+            .WhereIF(dto.Level == 0 && IsCenter == false, (x, ws) => ws.AcceptorOrgId.StartsWith(_sessionContext.OrgId))
+            .WhereIF(dto.Level == 1, (x, ws) => ws.AcceptorOrgId == _sessionContext.OrgId)
+            .WhereIF(dto.Level == 2, (x, ws) => ws.AcceptorOrgId.StartsWith(_sessionContext.OrgId))
             .WhereIF(dto.Signed == 0, (x, ws) => ws.Status == Share.Enums.FlowEngine.EWorkflowStepStatus.WaitForAccept)
             .WhereIF(dto.Signed == 1, (x, ws) => ws.Status == Share.Enums.FlowEngine.EWorkflowStepStatus.WaitForHandle)
             .Where((x, ws) => ws.CountersignPosition == Share.Enums.FlowEngine.ECountersignPosition.None && x.Status > EOrderStatus.WaitForAccept)
@@ -1681,7 +1681,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
 
         //dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
 
-        var IsCenter = _sessionContextProvider.SessionContext.OrgIsCenter;
+        var IsCenter = _sessionContext.OrgIsCenter;
 
 
         var queryOrder = _systemOrganizeRepository.Queryable()
@@ -1690,7 +1690,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
             .WhereIF(dto.EndTime.HasValue, (x, o) => o.CreationTime <= dto.EndTime)
             .WhereIF(dto.TypeId != null && dto.TypeId == 1, (x, o) => o.IdentityType == EIdentityType.Citizen)
             .WhereIF(dto.TypeId != null && dto.TypeId == 2, (x, o) => o.IdentityType == EIdentityType.Enterprise)
-            .WhereIF(IsCenter == false, (x, o) => o.ActualHandleOrgCode == _sessionContextProvider.SessionContext.RequiredOrgId)
+            .WhereIF(IsCenter == false, (x, o) => o.ActualHandleOrgCode == _sessionContext.RequiredOrgId)
             .GroupBy((x, o) => new { x.Id, x.Name })
             .Select((x, o) => new OrderBiOrgDataListVo
             {
@@ -1810,7 +1810,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
     /// <returns></returns>
     public ISugarQueryable<Order> QueryOrgDataListDetail(OrgDataListAllDetailRequest dto)
     {
-        bool IsCenter = _sessionContextProvider.SessionContext.OrgIsCenter;
+        bool IsCenter = _sessionContext.OrgIsCenter;
 
         var quer = _orderRepository.Queryable()
             .InnerJoin<SystemOrganize>((x, so) => x.ActualHandleOrgCode == so.Id && so.Level == 1)
@@ -1820,7 +1820,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
             .Where((x, so) =>
                 (x.Status >= EOrderStatus.Filed && x.ExpiredTime < x.FiledTime) ||
                 (x.Status < EOrderStatus.Filed && x.ExpiredTime < SqlFunc.GetDate()))
-            .WhereIF(IsCenter == false, (x, so) => x.ActualHandleOrgCode == _sessionContextProvider.SessionContext.RequiredOrgId)
+            .WhereIF(IsCenter == false, (x, so) => x.ActualHandleOrgCode == _sessionContext.RequiredOrgId)
             .WhereIF(!string.IsNullOrEmpty(dto.OrgName), (x, so) => x.AcceptorOrgName == dto.OrgName)
             .Select(x => new Order { DaysOverdueOrgName = x.ActualHandleOrgName, Id = x.Id.SelectAll() });
 
@@ -1832,7 +1832,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
             .Where((x, so) => x.CreationTime >= dto.StartTime && x.CreationTime <= dto.EndTime)
             .Where((x, so) => (x.Status == Share.Enums.FlowEngine.EWorkflowStepStatus.Handled && x.StepExpiredTime < x.HandleTime) ||
                               (x.Status != Share.Enums.FlowEngine.EWorkflowStepStatus.Handled && x.StepExpiredTime < SqlFunc.GetDate()))
-            .WhereIF(IsCenter == false, (x, so) => x.HandlerOrgId == _sessionContextProvider.SessionContext.RequiredOrgId)
+            .WhereIF(IsCenter == false, (x, so) => x.HandlerOrgId == _sessionContext.RequiredOrgId)
             .WhereIF(dto.ExpiredType is 2, (x, so, o) => o.OrderDelays.Any(x => x.DelayState == EDelayState.Pass))
             .GroupBy(x => new { x.ExternalId, x.HandlerOrgName })
             .Select(x => new { Id = x.ExternalId, WorkflowId = x.ExternalId, HandlerOrgName = x.HandlerOrgName });
@@ -1942,9 +1942,9 @@ public class OrderApplication : IOrderApplication, IScopeDependency
     /// <returns></returns>
     public async Task<List<VisitAndOrgSatisfactionStatisticsDto>> VisitAndOrgSatisfactionStatistics(PagedKeywordSonRequest dto)
     {
-        bool IsCenter = _sessionContextProvider.SessionContext.OrgIsCenter;
-        var orgLevel = _sessionContextProvider.SessionContext.OrgLevel;
-        string orgLevelStr = (_sessionContextProvider.SessionContext.RequiredOrgId.Length + 3).ToString();
+        bool IsCenter = _sessionContext.OrgIsCenter;
+        var orgLevel = _sessionContext.OrgLevel;
+        string orgLevelStr = (_sessionContext.RequiredOrgId.Length + 3).ToString();
 
         var list = _orderVisitDetailRepository.Queryable()
             .Where(x => x.OrderVisit.VisitTime >= dto.StartTime.Value && x.OrderVisit.VisitTime <= dto.EndTime.Value &&
@@ -1953,7 +1953,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
             .WhereIF(string.IsNullOrEmpty(dto.LineNum) == false, x => x.OrderVisit.Order.CallRecord.Gateway.Contains(dto.LineNum))
             .WhereIF(dto.TypeCode != null && dto.TypeCode == 1, x => x.OrderVisit.Order.IdentityType == EIdentityType.Citizen)
             .WhereIF(dto.TypeCode != null && dto.TypeCode == 2, x => x.OrderVisit.Order.IdentityType == EIdentityType.Enterprise)
-            .WhereIF(IsCenter == false, x => x.VisitOrgCode.StartsWith(_sessionContextProvider.SessionContext.OrgId))
+            .WhereIF(IsCenter == false, x => x.VisitOrgCode.StartsWith(_sessionContext.OrgId))
             .WhereIF(dto.VisitType != null, x => x.OrderVisit.VisitType == dto.VisitType)
             .WhereIF(!string.IsNullOrEmpty(dto.Title), x => x.OrderVisit.Order.Title.Contains(dto.Title)) // 工单标题
             .WhereIF(!string.IsNullOrEmpty(dto.No), x => x.OrderVisit.Order.No == dto.No) // 工单编号
@@ -2107,7 +2107,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         {
             var query = _statisticsDepartSatisfiedRepository.Queryable()
                 .LeftJoin<SystemOrganize>((x, so) => x.DepartmentId == so.oldBmid)
-                .WhereIF(IsCenter == false, (x, so) => so.Id.StartsWith(_sessionContextProvider.SessionContext.OrgId))
+                .WhereIF(IsCenter == false, (x, so) => so.Id.StartsWith(_sessionContext.OrgId))
                 .Where((x, so) => x.Time >= dto.StartTime.Value && x.Time <= dto.EndTime.Value);
             if (IsCenter)
             {
@@ -2210,7 +2210,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
     /// <returns></returns>
     public async Task<List<VisitAndOrgSatisfactionStatisticsDto>> VisitAndOrgStatisfactionOrgDetail(PagedKeywordSonRequest dto)
     {
-        bool IsCenter = _sessionContextProvider.SessionContext.OrgIsCenter;
+        bool IsCenter = _sessionContext.OrgIsCenter;
         var org = await _systemOrganizeRepository.Queryable().FirstAsync(x => x.Id == dto.OrgCode);
 
         string orgLevelStr = (dto.OrgCode.Length + 3).ToString();
@@ -2230,7 +2230,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
             .WhereIF(dto.TypeCode != null && dto.TypeCode == 2,
                 (x, it) => it.OrderVisit.Order.IdentityType == EIdentityType.Enterprise)
             .WhereIF(IsCenter == false,
-                (x, it) => it.VisitOrgCode.StartsWith(_sessionContextProvider.SessionContext.OrgId))
+                (x, it) => it.VisitOrgCode.StartsWith(_sessionContext.OrgId))
             .WhereIF(dto.VisitType != null, (x, it) => it.OrderVisit.VisitType == dto.VisitType)
             .GroupBy((x, it) => new
             {
@@ -2662,7 +2662,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
     /// <returns></returns>
     public async Task<List<VisitAndHotspotSatisfactionStatisticsDto>> VisitAndHotspotSatisfactionStatistics(VisitAndHotspotPagedKeywordRequest dto)
     {
-        bool IsCenter = _sessionContextProvider.SessionContext.OrgIsCenter;
+        bool IsCenter = _sessionContext.OrgIsCenter;
 
         var list = _orderVisitDetailRepository.Queryable()
             .Includes(x => x.OrderVisit, v => v.Order)
@@ -2672,7 +2672,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
             .Where(x => x.OrderVisit.VisitTime >= dto.StartTime.Value && x.OrderVisit.VisitTime <= dto.EndTime.Value &&
                         x.VisitTarget == EVisitTarget.Org && x.OrderVisit.VisitState == EVisitState.Visited && !string.IsNullOrEmpty(x.VisitOrgCode))
             .WhereIF(string.IsNullOrEmpty(dto.HotspotName) == false, (x, h) => h.HotSpotName == dto.HotspotName)
-            .WhereIF(IsCenter == false, x => x.VisitOrgCode.StartsWith(_sessionContextProvider.SessionContext.OrgId))
+            .WhereIF(IsCenter == false, x => x.VisitOrgCode.StartsWith(_sessionContext.OrgId))
             .WhereIF(dto.TypeId == 1, x => x.OrgProcessingResults != null)
             .WhereIF(dto.TypeId == 2, x => x.OrgHandledAttitude != null);
 
@@ -2811,7 +2811,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
     /// <returns></returns>
     public ISugarQueryable<OrderVisitDetail> VisitAndHotspotSatisfactionDetail(VisitAndHotspotPagedKeywordRequest dto)
     {
-        bool IsCenter = _sessionContextProvider.SessionContext.OrgIsCenter;
+        bool IsCenter = _sessionContext.OrgIsCenter;
         var key = string.Empty;
         if (!string.IsNullOrEmpty(dto.TitleCode))
         {
@@ -2846,7 +2846,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
             .Where(x => x.OrderVisit.VisitTime >= dto.StartTime && x.OrderVisit.VisitTime <= dto.EndTime && x.VisitTarget == EVisitTarget.Org &&
                         x.OrderVisit.VisitState == EVisitState.Visited)
             .WhereIF(!string.IsNullOrEmpty(dto.HotspotName), x => x.OrderVisit.Order.Hotspot.HotSpotFullName.StartsWith(dto.HotspotName))
-            .WhereIF(IsCenter == false, x => x.VisitOrgCode.StartsWith(_sessionContextProvider.SessionContext.OrgId))
+            .WhereIF(IsCenter == false, x => x.VisitOrgCode.StartsWith(_sessionContext.OrgId))
             .WhereIF(dto.TypeId is 1, x => SqlFunc.JsonField(x.OrgProcessingResults, "Key") == key)
             .WhereIF(dto.TypeId is 2, x => SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == key);
     }
@@ -4560,7 +4560,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
                 d => d.CreationTime >= dto.ApplyStartTime && d.CreationTime <= dto.ApplyEndTime)
             //.WhereIF(dto.AuditStatus is 1 , d=>d.Status == ETerminateStatus.Approval || d.Status == ETerminateStatus.SendBack )
             //.WhereIF(dto.AuditStatus is 2, d => d.Status == ETerminateStatus.End || dto.Status == ETerminateStatus.Refuse)
-            .WhereIF(dto.QueryType is 1, d => d.CreatorId == _sessionContextProvider.SessionContext.UserId)
+            .WhereIF(dto.QueryType is 1, d => d.CreatorId == _sessionContext.UserId)
             .WhereIF(dto.Status.HasValue, d => d.Status == dto.Status)
             .WhereIF(dto.StartTime.HasValue && dto.EndTime.HasValue, d => d.Order.StartTime >= dto.StartTime && d.Order.StartTime <= dto.EndTime)
             .OrderByDescending(d => d.CreationTime);
@@ -4645,7 +4645,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
             case 2: //办结: 当前登录坐席作为最初受理人已办结的工单
                 query.Where(d =>
                     d.Status >= EOrderStatus.Filed
-                    && d.AcceptorId == _sessionContextProvider.SessionContext.RequiredUserId);
+                    && d.AcceptorId == _sessionContext.RequiredUserId);
                 break;
         }
 
@@ -4655,10 +4655,10 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         //    (hasHandled || step.Status != EWorkflowStepStatus.Handled) &&
         //    (!hasHandled || step.Status == EWorkflowStepStatus.Handled &&
         //    step.TraceState != EWorkflowTraceState.StepRemoveByPrevious) &&
-        //    ((step.FlowAssignType == EFlowAssignType.User && !string.IsNullOrEmpty(step.HandlerId) && step.HandlerId == _sessionContextProvider.SessionContext.RequiredUserId) ||
-        //    (step.FlowAssignType == EFlowAssignType.Org && !string.IsNullOrEmpty(step.HandlerOrgId) && step.HandlerOrgId == _sessionContextProvider.SessionContext.RequiredOrgId) ||
-        //    (step.FlowAssignType == EFlowAssignType.Role && !string.IsNullOrEmpty(step.RoleId) && _sessionContextProvider.SessionContext.Roles.Contains(step.RoleId)))).Any() ||
-        //    (string.IsNullOrEmpty(d.WorkflowId) && (string.IsNullOrEmpty(d.SignerId) || d.SignerId == _sessionContextProvider.SessionContext.RequiredUserId))
+        //    ((step.FlowAssignType == EFlowAssignType.User && !string.IsNullOrEmpty(step.HandlerId) && step.HandlerId == _sessionContext.RequiredUserId) ||
+        //    (step.FlowAssignType == EFlowAssignType.Org && !string.IsNullOrEmpty(step.HandlerOrgId) && step.HandlerOrgId == _sessionContext.RequiredOrgId) ||
+        //    (step.FlowAssignType == EFlowAssignType.Role && !string.IsNullOrEmpty(step.RoleId) && _sessionContext.Roles.Contains(step.RoleId)))).Any() ||
+        //    (string.IsNullOrEmpty(d.WorkflowId) && (string.IsNullOrEmpty(d.SignerId) || d.SignerId == _sessionContext.RequiredUserId))
         //);
 
         //随手拍
@@ -4674,7 +4674,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
                 //// 交办件:已派单其他节点的工单,该选项卡下工单若办结就不显示
                 //.WhereIF(dto.TypeCode.HasValue == true && dto.TypeCode == 1, d => /*d.ProcessType == EProcessType.Jiaoban &&*/ d.Status < EOrderStatus.Filed)
                 //// 办结件:当前登录坐席作为最初受理人已办结的工单
-                //.WhereIF(dto.TypeCode.HasValue == true && dto.TypeCode == 2, d => d.Status >= EOrderStatus.Filed && d.AcceptorId == _sessionContextProvider.SessionContext.RequiredUserId)
+                //.WhereIF(dto.TypeCode.HasValue == true && dto.TypeCode == 2, d => d.Status >= EOrderStatus.Filed && d.AcceptorId == _sessionContext.RequiredUserId)
                 .WhereIF(dto.IsProvince.HasValue, d => d.IsProvince == dto.IsProvince)
                 //.WhereIF(dto.IsHandled.HasValue, d => handleStatuses.Contains(d.Status))
                 .WhereIF(!string.IsNullOrEmpty(dto.Keyword), d => d.Title.StartsWith(dto.Keyword!))

+ 20 - 20
src/Hotline/Authentications/SessionContextCreator.cs

@@ -29,26 +29,26 @@ namespace Hotline.Authentications
             _sessionContext = sessionContext;
         }
 
-        public static void CreateSessionContext(ISessionContextProvider sessionContextProvider, string source)
-        {
-            switch (source)
-            {
-                case "province":
-                    sessionContextProvider.SetContext(ProvinceSessionContext.Key);
-                    break;
-                case "110":
-                    sessionContextProvider.SetContext(Police110SessionContext.Key);
-                    break;
-                case "yb-enterprise":
-                    sessionContextProvider.SetContext(YbEnterpriseSessionContext.Key);
-                    break;
-                case "zzpt":
-                    sessionContextProvider.SetContext(ZzptSessionContext.Key);
-                    break;
-                default:
-                    throw new ArgumentOutOfRangeException(nameof(source), source, null);
-            }
-        }
+        //public static void CreateSessionContext(ISessionContextProvider sessionContextProvider, string source)
+        //{
+        //    switch (source)
+        //    {
+        //        case "province":
+        //            sessionContextProvider.SetContext(ProvinceSessionContext.Key);
+        //            break;
+        //        case "110":
+        //            sessionContextProvider.SetContext(Police110SessionContext.Key);
+        //            break;
+        //        case "yb-enterprise":
+        //            sessionContextProvider.SetContext(YbEnterpriseSessionContext.Key);
+        //            break;
+        //        case "zzpt":
+        //            sessionContextProvider.SetContext(ZzptSessionContext.Key);
+        //            break;
+        //        default:
+        //            throw new ArgumentOutOfRangeException(nameof(source), source, null);
+        //    }
+        //}
 
         public async Task CreateSessionContextAsync(string source, CancellationToken cancellation)
         {

+ 6 - 7
src/Hotline/Authentications/SessionContextProvider.cs

@@ -15,18 +15,17 @@ namespace Hotline.Authentications;
 public class SessionContextProvider : ISessionContextProvider, IScopeDependency
 {
     private readonly IServiceProvider _serviceProvider;
-    public ISessionContext SessionContext { get; set; }
+    //public ISessionContext SessionContext { get; set; }
 
-    public SessionContextProvider(IServiceProvider serviceProvider, ISessionContext sessionContext)
+    public SessionContextProvider(IServiceProvider serviceProvider)
     {
         _serviceProvider = serviceProvider;
-        SessionContext = sessionContext;
     }
 
-    public void SetContext(string key)
-    {
-        SessionContext = _serviceProvider.GetRequiredKeyedService<ISessionContext>(key);
-    }
+    //public void SetContext(string key)
+    //{
+    //    SessionContext = _serviceProvider.GetRequiredKeyedService<ISessionContext>(key);
+    //}
 
     public HttpContext ChangeSessionByUserId(string id, HttpContext httpContext)
     {

+ 100 - 103
src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

@@ -43,7 +43,6 @@ namespace Hotline.FlowEngine.Workflows
         private readonly IRepository<User> _userRepository;
         private readonly ISystemSettingCacheManager _systemSettingCacheManager;
         private readonly IWfModuleCacheManager _wfModuleCacheManager;
-        private readonly ISessionContextProvider _sessionContextProvider;
         private readonly ISessionContext _sessionContext;
         private readonly IOptionsSnapshot<AppConfiguration> _appOptions;
 
@@ -54,7 +53,6 @@ namespace Hotline.FlowEngine.Workflows
             IRepository<WorkflowCountersign> workflowCountersignRepository,
             ISystemSettingCacheManager systemSettingCacheManager,
             IWfModuleCacheManager wfModuleCacheManager,
-            ISessionContextProvider sessionContextProvider,
             ISessionContext sessionContext,
             IMapper mapper,
             Publisher publisher,
@@ -72,7 +70,6 @@ namespace Hotline.FlowEngine.Workflows
             _fileRepository = fileRepository;
             _systemSettingCacheManager = systemSettingCacheManager;
             _wfModuleCacheManager = wfModuleCacheManager;
-            _sessionContextProvider = sessionContextProvider;
             _sessionContext = sessionContext;
             _appOptions = appOptions;
         }
@@ -120,23 +117,23 @@ namespace Hotline.FlowEngine.Workflows
         //             PublishStrategy.ParallelWhenAll, cancellationToken);
         //
         //         //firstStep是否为end,t: 实际办理节点为startStep, 并且handlerId赋值 f: 实际办理节点为firstStep, handlerId未赋值
-        //         workflow.UpdateActualStepWhenHandle(startStep, _sessionContextProvider.SessionContext.OrgAreaCode,
-        //             _sessionContextProvider.SessionContext.OrgAreaName, _sessionContextProvider.SessionContext.OrgLevel);
+        //         workflow.UpdateActualStepWhenHandle(startStep, _sessionContext.OrgAreaCode,
+        //             _sessionContext.OrgAreaName, _sessionContext.OrgLevel);
         //
-        //         workflow.UpdateCurrentStepWhenHandle(startStep, _sessionContextProvider.SessionContext.OrgAreaCode,
-        //             _sessionContextProvider.SessionContext.OrgAreaName, _sessionContextProvider.SessionContext.OrgLevel);
+        //         workflow.UpdateCurrentStepWhenHandle(startStep, _sessionContext.OrgAreaCode,
+        //             _sessionContext.OrgAreaName, _sessionContext.OrgLevel);
         //
-        //         var endTrace = await EndAsync(_sessionContextProvider.SessionContext, workflow, dto, firstStepDefine, startStep, expiredTime,
+        //         var endTrace = await EndAsync(_sessionContext, workflow, dto, firstStepDefine, startStep, expiredTime,
         //             cancellationToken);
         //         return;
         //     }
         //
         //     var assigner = new UserInfo(
-        //         _sessionContextProvider.SessionContext.UserId,
-        //         _sessionContextProvider.SessionContext.UserName,
-        //         _sessionContextProvider.SessionContext.OrgId,
-        //         _sessionContextProvider.SessionContext.OrgName,
-        //         _sessionContextProvider.SessionContext.OrgIsCenter
+        //         _sessionContext.UserId,
+        //         _sessionContext.UserName,
+        //         _sessionContext.OrgId,
+        //         _sessionContext.OrgName,
+        //         _sessionContext.OrgIsCenter
         //     );
         //
         //     //firststeps
@@ -191,7 +188,7 @@ namespace Hotline.FlowEngine.Workflows
 
             //下一节点是否为动态节点
             var isNextDynamic = startStepDefine.InstanceMode is EInstanceMode.Dynamic &&
-                                !DynamicShouldTerminal(startStepDefine, _sessionContextProvider.SessionContext.OrgLevel);
+                                !DynamicShouldTerminal(startStepDefine, _sessionContext.OrgLevel);
             var firstStepDefine = isNextDynamic
                 ? startStepDefine
                 : definition.FindStepDefine(dto.NextStepCode);
@@ -220,21 +217,21 @@ namespace Hotline.FlowEngine.Workflows
 
             var defineHandler = startStepDefine.HandlerTypeItems.First();
             var assigner = new UserInfo(
-                _sessionContextProvider.SessionContext.UserId,
-                _sessionContextProvider.SessionContext.UserName,
-                _sessionContextProvider.SessionContext.OrgId,
-                _sessionContextProvider.SessionContext.OrgName,
-                _sessionContextProvider.SessionContext.OrgIsCenter
+                _sessionContext.UserId,
+                _sessionContext.UserName,
+                _sessionContext.OrgId,
+                _sessionContext.OrgName,
+                _sessionContext.OrgIsCenter
             );
 
             var handler = new StepAssignInfo
             {
-                Key = _sessionContextProvider.SessionContext.RequiredUserId,
-                Value = _sessionContextProvider.SessionContext.UserName,
-                UserId = _sessionContextProvider.SessionContext.UserId,
-                Username = _sessionContextProvider.SessionContext.UserName,
-                OrgId = _sessionContextProvider.SessionContext.RequiredOrgId,
-                OrgName = _sessionContextProvider.SessionContext.OrgName,
+                Key = _sessionContext.RequiredUserId,
+                Value = _sessionContext.UserName,
+                UserId = _sessionContext.UserId,
+                Username = _sessionContext.UserName,
+                OrgId = _sessionContext.RequiredOrgId,
+                OrgName = _sessionContext.OrgName,
                 RoleId = defineHandler.Key,
                 RoleName = defineHandler.Value,
                 FlowAssignType = EFlowAssignType.User
@@ -261,11 +258,11 @@ namespace Hotline.FlowEngine.Workflows
 
             //更新受理人信息
             workflow.UpdateAcceptor(
-                _sessionContextProvider.SessionContext.RequiredUserId,
-                _sessionContextProvider.SessionContext.UserName,
-                _sessionContextProvider.SessionContext.StaffNo,
-                _sessionContextProvider.SessionContext.RequiredOrgId,
-                _sessionContextProvider.SessionContext.OrgName);
+                _sessionContext.RequiredUserId,
+                _sessionContext.UserName,
+                _sessionContext.StaffNo,
+                _sessionContext.RequiredOrgId,
+                _sessionContext.OrgName);
 
             workflow.UpdateActualStepWhenAssign(startStep, handler);
             workflow.UpdateCurrentStepWhenAssign(startStep, handler);
@@ -373,8 +370,8 @@ namespace Hotline.FlowEngine.Workflows
                             Value = handler.Value,
                             RoleId = handler.Key,
                             RoleName = handler.Value,
-                            OrgId = _sessionContextProvider.SessionContext.RequiredOrgId,
-                            OrgName = _sessionContextProvider.SessionContext.OrgName,
+                            OrgId = _sessionContext.RequiredOrgId,
+                            OrgName = _sessionContext.OrgName,
                             FlowAssignType = EFlowAssignType.OrgAndRole
                         });
                     }
@@ -483,14 +480,14 @@ namespace Hotline.FlowEngine.Workflows
             if (workflow.ActualHandleStepId == currentStep.Id)
             {
                 //更新实际办理节点信息
-                workflow.UpdateActualStepWhenHandle(currentStep, _sessionContextProvider.SessionContext.OrgAreaCode,
-                    _sessionContextProvider.SessionContext.OrgAreaName, _sessionContextProvider.SessionContext.OrgLevel);
+                workflow.UpdateActualStepWhenHandle(currentStep, _sessionContext.OrgAreaCode,
+                    _sessionContext.OrgAreaName, _sessionContext.OrgLevel);
             }
 
             if (workflow.CurrentStepId == currentStep.Id)
             {
-                workflow.UpdateCurrentStepWhenHandle(currentStep, _sessionContextProvider.SessionContext.OrgAreaCode,
-                    _sessionContextProvider.SessionContext.OrgAreaName, _sessionContextProvider.SessionContext.OrgLevel);
+                workflow.UpdateCurrentStepWhenHandle(currentStep, _sessionContext.OrgAreaCode,
+                    _sessionContext.OrgAreaName, _sessionContext.OrgLevel);
             }
 
             //var trace = await NextTraceAsync(workflow, dto, currentStep, cancellationToken);
@@ -515,8 +512,8 @@ namespace Hotline.FlowEngine.Workflows
                     || string.IsNullOrEmpty(workflow.ActualHandleOrgCode)) //开始流程直接归档
                 {
                     //更新实际办理节点信息
-                    workflow.UpdateActualStepWhenHandle(currentStep, _sessionContextProvider.SessionContext.OrgAreaCode,
-                        _sessionContextProvider.SessionContext.OrgAreaName, _sessionContextProvider.SessionContext.OrgLevel);
+                    workflow.UpdateActualStepWhenHandle(currentStep, _sessionContext.OrgAreaCode,
+                        _sessionContext.OrgAreaName, _sessionContext.OrgLevel);
                     workflow.ActualHandleStepAcceptTime = currentStep.AcceptTime;
                     workflow.ActualHandleTime = currentStep.HandleTime;
                 }
@@ -555,11 +552,11 @@ namespace Hotline.FlowEngine.Workflows
                 workflow.StartCountersign(currentStep.Id, counterSignType);
 
             var assigner = new UserInfo(
-                _sessionContextProvider.SessionContext.UserId,
-                _sessionContextProvider.SessionContext.UserName,
-                _sessionContextProvider.SessionContext.OrgId,
-                _sessionContextProvider.SessionContext.OrgName,
-                _sessionContextProvider.SessionContext.OrgIsCenter
+                _sessionContext.UserId,
+                _sessionContext.UserName,
+                _sessionContext.OrgId,
+                _sessionContext.OrgName,
+                _sessionContext.OrgIsCenter
             );
 
             //创建下一/N个节点(会签汇总节点:会签未全部办理时不创建,最后一个会签办理节点创建会签汇总节点)
@@ -705,13 +702,13 @@ namespace Hotline.FlowEngine.Workflows
             string? orgAreaCode, string? orgAreaName,
             CancellationToken cancellationToken)
         {
-            if (!workflow.IsCanHandle(_sessionContextProvider.SessionContext.RequiredUserId, _sessionContextProvider.SessionContext.RequiredOrgId,
-                    _sessionContextProvider.SessionContext.Roles)) return null;
+            if (!workflow.IsCanHandle(_sessionContext.RequiredUserId, _sessionContext.RequiredOrgId,
+                    _sessionContext.Roles)) return null;
             //工单完成以后查看的场景
             if (workflow.Status != EWorkflowStatus.Runnable) return null;
 
-            var currentStep = GetUnHandleStep(workflow.Steps, _sessionContextProvider.SessionContext.RequiredOrgId,
-                _sessionContextProvider.SessionContext.RequiredUserId, _sessionContextProvider.SessionContext.Roles);
+            var currentStep = GetUnHandleStep(workflow.Steps, _sessionContext.RequiredOrgId,
+                _sessionContext.RequiredUserId, _sessionContext.Roles);
             if (currentStep.Status is not EWorkflowStepStatus.WaitForAccept) return null;
 
             //if (currentStep.Handlers.All(d => d.Key != orgId && d.Key != userId)) return null;
@@ -1620,10 +1617,10 @@ namespace Hotline.FlowEngine.Workflows
                 foreach (var trace in uncompleteTraces)
                 {
                     trace.Handle(
-                        _sessionContextProvider.SessionContext.RequiredUserId, _sessionContextProvider.SessionContext.UserName,
-                        _sessionContextProvider.SessionContext.RequiredOrgId, _sessionContextProvider.SessionContext.OrgName,
-                        _sessionContextProvider.SessionContext.OrgAreaCode, _sessionContextProvider.SessionContext.OrgAreaName,
-                        _sessionContextProvider.SessionContext.OrgIsCenter, handleMode, dto.Opinion);
+                        _sessionContext.RequiredUserId, _sessionContext.UserName,
+                        _sessionContext.RequiredOrgId, _sessionContext.OrgName,
+                        _sessionContext.OrgAreaCode, _sessionContext.OrgAreaName,
+                        _sessionContext.OrgIsCenter, handleMode, dto.Opinion);
                 }
 
                 //await _workflowTraceRepository.UpdateRangeAsync(uncompleteTraces, cancellationToken);
@@ -1678,9 +1675,9 @@ namespace Hotline.FlowEngine.Workflows
                 foreach (var unCompleteCountersign in unCompleteCountersigns)
                 {
                     unCompleteCountersign.End(null, null, EBusinessType.File,
-                        _sessionContextProvider.SessionContext.RequiredUserId, _sessionContextProvider.SessionContext.UserName,
-                        _sessionContextProvider.SessionContext.RequiredOrgId, _sessionContextProvider.SessionContext.OrgName,
-                        _sessionContextProvider.SessionContext.OrgAreaCode, _sessionContextProvider.SessionContext.OrgAreaName);
+                        _sessionContext.RequiredUserId, _sessionContext.UserName,
+                        _sessionContext.RequiredOrgId, _sessionContext.OrgName,
+                        _sessionContext.OrgAreaCode, _sessionContext.OrgAreaName);
                 }
 
                 await _workflowCountersignRepository.UpdateRangeAsync(unCompleteCountersigns, cancellationToken);
@@ -1692,11 +1689,11 @@ namespace Hotline.FlowEngine.Workflows
                 workflow.SetStatusRunnable();
 
             var assigner = new UserInfo(
-                _sessionContextProvider.SessionContext.UserId,
-                _sessionContextProvider.SessionContext.UserName,
-                _sessionContextProvider.SessionContext.OrgId,
-                _sessionContextProvider.SessionContext.OrgName,
-                _sessionContextProvider.SessionContext.OrgIsCenter
+                _sessionContext.UserId,
+                _sessionContext.UserName,
+                _sessionContext.OrgId,
+                _sessionContext.OrgName,
+                _sessionContext.OrgIsCenter
             );
 
             //var targetStepNew = targetIsStartStep
@@ -2126,7 +2123,7 @@ namespace Hotline.FlowEngine.Workflows
                 _ => throw new ArgumentOutOfRangeException(nameof(currentStepBusinessType), currentStepBusinessType, null)
             };
 
-            // return _sessionContextProvider.SessionContext.OrgIsCenter ? ECounterSignType.Center : ECounterSignType.Department;
+            // return _sessionContext.OrgIsCenter ? ECounterSignType.Center : ECounterSignType.Department;
         }
 
         /// <summary>
@@ -2760,10 +2757,10 @@ namespace Hotline.FlowEngine.Workflows
         private void HandleStep(WorkflowStep step, EHandleMode handleMode, string opinion, string nextStepCode)
         {
             //todo 重构:ISessionContext传入
-            step.Handle(_sessionContextProvider.SessionContext.RequiredUserId, _sessionContextProvider.SessionContext.UserName,
-                _sessionContextProvider.SessionContext.RequiredOrgId, _sessionContextProvider.SessionContext.OrgName,
-                _sessionContextProvider.SessionContext.OrgAreaCode, _sessionContextProvider.SessionContext.OrgAreaName,
-                _sessionContextProvider.SessionContext.OrgIsCenter, handleMode, opinion, nextStepCode);
+            step.Handle(_sessionContext.RequiredUserId, _sessionContext.UserName,
+                _sessionContext.RequiredOrgId, _sessionContext.OrgName,
+                _sessionContext.OrgAreaCode, _sessionContext.OrgAreaName,
+                _sessionContext.OrgIsCenter, handleMode, opinion, nextStepCode);
 
             //var handler = step.FindActualHandler(current.Roles, current.RequiredUserId, current.RequiredOrgId);
             //if (handler is not null)
@@ -3151,10 +3148,10 @@ namespace Hotline.FlowEngine.Workflows
         //         foreach (var trace in uncompleteTraces)
         //         {
         //             trace.Handle(
-        //                 _sessionContextProvider.SessionContext.RequiredUserId, _sessionContextProvider.SessionContext.UserName,
-        //                 _sessionContextProvider.SessionContext.RequiredOrgId, _sessionContextProvider.SessionContext.OrgName,
-        //                 _sessionContextProvider.SessionContext.OrgAreaCode, _sessionContextProvider.SessionContext.OrgAreaName,
-        //                 _sessionContextProvider.SessionContext.OrgIsCenter, handleMode, dto.Opinion);
+        //                 _sessionContext.RequiredUserId, _sessionContext.UserName,
+        //                 _sessionContext.RequiredOrgId, _sessionContext.OrgName,
+        //                 _sessionContext.OrgAreaCode, _sessionContext.OrgAreaName,
+        //                 _sessionContext.OrgIsCenter, handleMode, dto.Opinion);
         //         }
         //
         //         //await _workflowTraceRepository.UpdateRangeAsync(uncompleteTraces, cancellationToken);
@@ -3209,9 +3206,9 @@ namespace Hotline.FlowEngine.Workflows
         //         foreach (var unCompleteCountersign in unCompleteCountersigns)
         //         {
         //             unCompleteCountersign.End(null, null, EBusinessType.File,
-        //                 _sessionContextProvider.SessionContext.RequiredUserId, _sessionContextProvider.SessionContext.UserName,
-        //                 _sessionContextProvider.SessionContext.RequiredOrgId, _sessionContextProvider.SessionContext.OrgName,
-        //                 _sessionContextProvider.SessionContext.OrgAreaCode, _sessionContextProvider.SessionContext.OrgAreaName);
+        //                 _sessionContext.RequiredUserId, _sessionContext.UserName,
+        //                 _sessionContext.RequiredOrgId, _sessionContext.OrgName,
+        //                 _sessionContext.OrgAreaCode, _sessionContext.OrgAreaName);
         //         }
         //
         //         await _workflowCountersignRepository.UpdateRangeAsync(unCompleteCountersigns, cancellationToken);
@@ -3223,11 +3220,11 @@ namespace Hotline.FlowEngine.Workflows
         //         workflow.SetStatusRunnable();
         //
         //     var assigner = new UserInfo(
-        //         _sessionContextProvider.SessionContext.UserId,
-        //         _sessionContextProvider.SessionContext.UserName,
-        //         _sessionContextProvider.SessionContext.OrgId,
-        //         _sessionContextProvider.SessionContext.OrgName,
-        //         _sessionContextProvider.SessionContext.OrgIsCenter
+        //         _sessionContext.UserId,
+        //         _sessionContext.UserName,
+        //         _sessionContext.OrgId,
+        //         _sessionContext.OrgName,
+        //         _sessionContext.OrgIsCenter
         //     );
         //
         //     var targetStepNew = targetIsStartStep
@@ -3310,29 +3307,29 @@ namespace Hotline.FlowEngine.Workflows
 
             var handler = new StepAssignInfo
             {
-                Key = _sessionContextProvider.SessionContext.UserId,
-                Value = _sessionContextProvider.SessionContext.UserName,
-                UserId = _sessionContextProvider.SessionContext.RequiredUserId,
-                Username = _sessionContextProvider.SessionContext.UserName,
-                OrgId = _sessionContextProvider.SessionContext.OrgId,
-                OrgName = _sessionContextProvider.SessionContext.OrgName,
+                Key = _sessionContext.UserId,
+                Value = _sessionContext.UserName,
+                UserId = _sessionContext.RequiredUserId,
+                Username = _sessionContext.UserName,
+                OrgId = _sessionContext.OrgId,
+                OrgName = _sessionContext.OrgName,
                 FlowAssignType = EFlowAssignType.User,
             };
 
             var assigner = new UserInfo(
-                _sessionContextProvider.SessionContext.UserId,
-                _sessionContextProvider.SessionContext.UserName,
-                _sessionContextProvider.SessionContext.OrgId,
-                _sessionContextProvider.SessionContext.OrgName,
-                _sessionContextProvider.SessionContext.OrgIsCenter
+                _sessionContext.UserId,
+                _sessionContext.UserName,
+                _sessionContext.OrgId,
+                _sessionContext.OrgName,
+                _sessionContext.OrgIsCenter
             );
             var step = CreateStep(workflow, endStepDefine, prevStep, handler, assigner,
                 null, null, EWorkflowStepStatus.WaitForAccept,
                 ECountersignPosition.None, expiredTime, endStepDefine.Name, true, businessType: EBusinessType.File, flowDirection: dto.FlowDirection);
 
-            //step.Accept(_sessionContextProvider.SessionContext.RequiredUserId, _sessionContextProvider.SessionContext.UserName,
-            //    _sessionContextProvider.SessionContext.RequiredOrgId, _sessionContextProvider.SessionContext.OrgName,
-            //    _sessionContextProvider.SessionContext.OrgAreaCode, _sessionContextProvider.SessionContext.OrgAreaName);
+            //step.Accept(_sessionContext.RequiredUserId, _sessionContext.UserName,
+            //    _sessionContext.RequiredOrgId, _sessionContext.OrgName,
+            //    _sessionContext.OrgAreaCode, _sessionContext.OrgAreaName);
 
             HandleStep(step, EHandleMode.Normal, "流程归档", string.Empty);
 
@@ -3589,8 +3586,8 @@ namespace Hotline.FlowEngine.Workflows
                         throw new UserFriendlyException(
                             $"TerminalDynamicMark parse to int failed, tMark: {currentStepDefine.TerminalDynamicMark}");
                     var leadRoleCode = _systemSettingCacheManager.GetSetting(SettingConstants.RoleLingDao)?.SettingValue[0];
-                    var isLead = _sessionContextProvider.SessionContext.Roles.Any(x => x == leadRoleCode);
-                    return (currentOrgLevel <= tMark2) && (isLead || _sessionContextProvider.SessionContext.OrgIsCenter);
+                    var isLead = _sessionContext.Roles.Any(x => x == leadRoleCode);
+                    return (currentOrgLevel <= tMark2) && (isLead || _sessionContext.OrgIsCenter);
                 case EDynamicPolicy.OrgDownCenterTop:
                 case EDynamicPolicy.OrgDown:
                     if (!int.TryParse(currentStepDefine.TerminalDynamicMark, out var tMark1))
@@ -3744,16 +3741,16 @@ namespace Hotline.FlowEngine.Workflows
             ref List<WorkflowStep> updateSteps, ref List<WorkflowTrace> updateTraces)
         {
             var isHandled = step.Status is EWorkflowStepStatus.Handled;
-            var opinion = $"会签未办理完成,由 {_sessionContextProvider.SessionContext.OrgName} 的 {_sessionContextProvider.SessionContext.UserName} 终止办理";
+            var opinion = $"会签未办理完成,由 {_sessionContext.OrgName} 的 {_sessionContext.UserName} 终止办理";
             if (step.IsStartCountersign)
                 step.CountersignEnd();
 
             if (step.Status is not EWorkflowStepStatus.Handled)
             {
-                step.Handle(_sessionContextProvider.SessionContext.RequiredUserId, _sessionContextProvider.SessionContext.UserName,
-                    _sessionContextProvider.SessionContext.RequiredOrgId, _sessionContextProvider.SessionContext.OrgName,
-                    _sessionContextProvider.SessionContext.OrgAreaCode, _sessionContextProvider.SessionContext.OrgAreaName,
-                    _sessionContextProvider.SessionContext.OrgIsCenter, EHandleMode.Normal, opinion);
+                step.Handle(_sessionContext.RequiredUserId, _sessionContext.UserName,
+                    _sessionContext.RequiredOrgId, _sessionContext.OrgName,
+                    _sessionContext.OrgAreaCode, _sessionContext.OrgAreaName,
+                    _sessionContext.OrgIsCenter, EHandleMode.Normal, opinion);
             }
 
             updateSteps.Add(step);
@@ -3796,9 +3793,9 @@ namespace Hotline.FlowEngine.Workflows
             //todo 1. trace? 先确定展现形式 2. end cs
 
             countersign.End(null, null, businessType,
-                _sessionContextProvider.SessionContext.RequiredUserId, _sessionContextProvider.SessionContext.UserName,
-                _sessionContextProvider.SessionContext.RequiredOrgId, _sessionContextProvider.SessionContext.OrgName,
-                _sessionContextProvider.SessionContext.OrgAreaCode, _sessionContextProvider.SessionContext.OrgAreaName);
+                _sessionContext.RequiredUserId, _sessionContext.UserName,
+                _sessionContext.RequiredOrgId, _sessionContext.OrgName,
+                _sessionContext.OrgAreaCode, _sessionContext.OrgAreaName);
 
             /*
             * //结束step会签信息
@@ -3807,9 +3804,9 @@ namespace Hotline.FlowEngine.Workflows
 
                    //结束会签
                    currentCountersign.End(currentStep.Id, currentStep.Code, currentStep.BusinessType,
-                       _sessionContextProvider.SessionContext.RequiredUserId, _sessionContextProvider.SessionContext.UserName,
-                       _sessionContextProvider.SessionContext.RequiredOrgId, _sessionContextProvider.SessionContext.OrgName,
-                       _sessionContextProvider.SessionContext.OrgAreaCode, _sessionContextProvider.SessionContext.OrgAreaName);
+                       _sessionContext.RequiredUserId, _sessionContext.UserName,
+                       _sessionContext.RequiredOrgId, _sessionContext.OrgName,
+                       _sessionContext.OrgAreaCode, _sessionContext.OrgAreaName);
                    await _workflowCountersignRepository.UpdateAsync(currentCountersign, cancellationToken);
             */
 

+ 2 - 2
src/XF.Domain/Authentications/ISessionContextProvider.cs

@@ -9,9 +9,9 @@ namespace XF.Domain.Authentications
 {
     public interface ISessionContextProvider
     {
-        public ISessionContext SessionContext { get; set; }
+        //public ISessionContext SessionContext { get; set; }
 
-        public void SetContext(string key);
+        //public void SetContext(string key);
 
         HttpContext ChangeSessionByUserId(string id, HttpContext httpContext);