فهرست منبع

add: 增加接口,依据trace.Handlers增加stepHandlers数据

xf 11 ماه پیش
والد
کامیت
dadd083cb9
1فایلهای تغییر یافته به همراه64 افزوده شده و 1 حذف شده
  1. 64 1
      src/Hotline.Api/Controllers/TestController.cs

+ 64 - 1
src/Hotline.Api/Controllers/TestController.cs

@@ -460,7 +460,70 @@ public class TestController : BaseController
     [HttpPost("t3")]
     public async Task TestExportExcel()
     {
-      
+        var items = await _workflowTraceRepository.Queryable()
+            .Where(d => !SqlFunc.Subqueryable<WorkflowStepHandler>().Where(x => x.WorkflowStepId == d.StepId).Any())
+            .ToListAsync(HttpContext.RequestAborted);
+
+        var a = items.Select(d => d.StepId).ToList();
+
+        //var items = await _workflowTraceRepository.Queryable()
+        //    .LeftJoin<WorkflowStepHandler>((t, h) => t.StepId == h.WorkflowStepId)
+        //    .Where((t, h) => h == null)
+        //    .Select((t, h) => new { t, h })
+        //    .ToListAsync(HttpContext.RequestAborted);
+
+        var handlerIds = items.Select(d => d)
+            .SelectMany(d => d.Handlers)
+            .Select(d => d.Key)
+            .Distinct()
+            .ToList();
+        var users = await _userRepository.Queryable()
+            .Includes(d => d.Organization)
+            .Where(d => handlerIds.Contains(d.Id))
+            .ToListAsync(HttpContext.RequestAborted);
+        var orgs = await _systemOrganizeRepository.Queryable()
+            .Where(d => handlerIds.Contains(d.Id))
+            .ToListAsync(HttpContext.RequestAborted);
+
+        var handlers = new List<WorkflowStepHandler>();
+        var updateTraces = new List<WorkflowTrace>();
+        foreach (var item in items)
+        {
+            var trace = item;
+            foreach (var traceHandler in trace.Handlers)
+            {
+                if (!trace.FlowAssignType.HasValue)
+                {
+                    trace.FlowAssignType = traceHandler.Key.Length == 36 ? EFlowAssignType.User : EFlowAssignType.Org;
+                    updateTraces.Add(trace);
+                }
+
+                if (trace.FlowAssignType == EFlowAssignType.User)
+                {
+                    var user = users.FirstOrDefault(d => d.Id == traceHandler.Key);
+                    if (user != null)
+                    {
+                        handlers.Add(WorkflowStepHandler.Create(trace.WorkflowId, trace.ExternalId, trace.FlowAssignType.Value,
+                            user.Id, user.Name, user.OrgId, user.Organization.Name));
+                    }
+                }
+                else
+                {
+                    var org = orgs.FirstOrDefault(d => d.Id == traceHandler.Key);
+                    if (org != null)
+                    {
+                        handlers.Add(WorkflowStepHandler.Create(trace.WorkflowId, trace.ExternalId, trace.FlowAssignType.Value,
+                            orgId: org.Id, orgName: org.Name));
+                    }
+                }
+            }
+        }
+
+        if (updateTraces.Any())
+            await _workflowTraceRepository.UpdateRangeAsync(updateTraces, HttpContext.RequestAborted);
+
+        if (handlers.Any())
+            await _workflowStepHandleRepository.AddRangeAsync(handlers, HttpContext.RequestAborted);
     }
 
     [HttpGet("rsa")]