Browse Source

MOD: 查询工单办理中的一级部门由查询节点调整为查询快照

xf 1 year ago
parent
commit
a8cda57b84
1 changed files with 21 additions and 8 deletions
  1. 21 8
      src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

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

@@ -28,6 +28,7 @@ namespace Hotline.FlowEngine.Workflows
         private readonly IRepository<WorkflowTrace> _workflowTraceRepository;
         private readonly IRepository<WorkflowSupplement> _workflowSupplementRepository;
         private readonly IRepository<WorkflowCountersign> _workflowCountersignRepository;
+        private readonly IRepository<WorkflowStepHandler> _workflowStepHandlerRepository;
         private readonly ISessionContext _sessionContext;
         private readonly IMapper _mapper;
         private readonly IMediator _mediator;
@@ -41,6 +42,7 @@ namespace Hotline.FlowEngine.Workflows
             IRepository<WorkflowTrace> workflowTraceRepository,
             IRepository<WorkflowSupplement> workflowSupplementRepository,
             IRepository<WorkflowCountersign> workflowCountersignRepository,
+            IRepository<WorkflowStepHandler> workflowStepHandlerRepository,
             ISessionContext sessionContext,
             IMapper mapper,
             IMediator mediator,
@@ -52,6 +54,7 @@ namespace Hotline.FlowEngine.Workflows
             _workflowTraceRepository = workflowTraceRepository;
             _workflowSupplementRepository = workflowSupplementRepository;
             _workflowCountersignRepository = workflowCountersignRepository;
+            _workflowStepHandlerRepository = workflowStepHandlerRepository;
             _sessionContext = sessionContext;
             _mapper = mapper;
             _mediator = mediator;
@@ -705,14 +708,24 @@ namespace Hotline.FlowEngine.Workflows
         /// </summary>
         public async Task<ICollection<Kv>> GetLevelOneOrgsAsync(string workflowId, CancellationToken cancellation)
         {
-            var workflow = await GetWorkflowAsync(workflowId, withSteps: true, cancellationToken: cancellation);
-            var list = workflow.Steps.Distinct().Where(d => d.BusinessType == EBusinessType.Department &&
-                                             d.HandlerType == EHandlerType.OrgLevel &&
-                                             d.StepHandlers.Any(d =>
-                                                 !string.IsNullOrEmpty(d.OrgId) && d.OrgId.CheckIfOrgLevelIs(1)))
-                .Select(d => new Kv(d.StepHandlers.First().OrgId, d.StepHandlers.First().OrgName))
-                .ToList();
-            return list.Where((x, i) => list.FindIndex(z => z.Key == x.Key) == i).ToList();
+            return await _workflowStepHandlerRepository.Queryable()
+                .LeftJoin<WorkflowTrace>((wsh, wt) => wsh.WorkflowStepId == wt.StepId)
+                .Where((wsh, wt) => wsh.WorkflowId == workflowId &&
+                                    wt.BusinessType == EBusinessType.Department &&
+                                    wt.HandlerType == EHandlerType.OrgLevel &&
+                                    !string.IsNullOrEmpty(wsh.OrgId) && wsh.OrgId.CheckIfOrgLevelIs(1))
+                .Select((wsh, wt) => new Kv(wsh.OrgId, wsh.OrgName))
+                .Distinct()
+                .ToListAsync(cancellation);
+
+            //var workflow = await GetWorkflowAsync(workflowId, withSteps: true, cancellationToken: cancellation);
+            //var list = workflow.Steps.Distinct().Where(d => d.BusinessType == EBusinessType.Department &&
+            //                                 d.HandlerType == EHandlerType.OrgLevel &&
+            //                                 d.StepHandlers.Any(d =>
+            //                                     !string.IsNullOrEmpty(d.OrgId) && d.OrgId.CheckIfOrgLevelIs(1)))
+            //    .Select(d => new Kv(d.StepHandlers.First().OrgId, d.StepHandlers.First().OrgName))
+            //    .ToList();
+            //return list.Where((x, i) => list.FindIndex(z => z.Key == x.Key) == i).ToList();
         }
 
         /// <summary>