فهرست منبع

fix: 查询流程可见出现多条数据

xf 10 ماه پیش
والد
کامیت
b1f9c2acab

+ 15 - 85
src/Hotline.Api/Controllers/TestController.cs

@@ -90,6 +90,8 @@ public class TestController : BaseController
     private readonly IExportApplication _exportApplication;
     private readonly IAiVisitService _aiVisitService;
     private readonly IRepository<WorkflowTrace> _workflowTraceRepository;
+
+    private readonly IRepository<WorkflowStep> _workflowStepRepository;
     //private readonly IRepository<WorkflowStepHandler> _workflowStepHandleRepository;
 
     private readonly IRepository<SystemOrganize> _systemOrganizeRepository;
@@ -129,6 +131,7 @@ public class TestController : BaseController
         IExportApplication exportApplication,
         IAiVisitService aiVisitService,
         IRepository<WorkflowTrace> workflowTraceRepository,
+        IRepository<WorkflowStep> workflowStepRepository,
         //IRepository<WorkflowStepHandler> workflowStepHandleRepository,
         IRepository<SystemOrganize> systemOrganizeRepository,
         IOrderRepository orderRepository,
@@ -159,6 +162,7 @@ public class TestController : BaseController
         _exportApplication = exportApplication;
         _aiVisitService = aiVisitService;
         _workflowTraceRepository = workflowTraceRepository;
+        _workflowStepRepository = workflowStepRepository;
         //_workflowStepHandleRepository = workflowStepHandleRepository;
         _systemOrganizeRepository = systemOrganizeRepository;
         _orderRepository = orderRepository;
@@ -467,96 +471,22 @@ public class TestController : BaseController
         //await _workflowStepHandleRepository.AddRangeAsync(stepHandlers, HttpContext.RequestAborted);
     }
 
+    /// <summary>
+    /// 处理FlowAssignType
+    /// </summary>
+    /// <returns></returns>
     [AllowAnonymous]
     [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 handlerStepIds = await _workflowStepHandleRepository
-        //    .Queryable()
-        //    .Select(d=>d.WorkflowStepId)
-        //    .ToListAsync(HttpContext.RequestAborted);
-        //_logger.LogInformation($"handler stepids: {handlerStepIds.Count}");
-
-        //var items = await _workflowTraceRepository
-        //    .Queryable()
-        //    .Where(d => !handlerStepIds.Distinct().Contains(d.StepId))
-        //    .ToListAsync(HttpContext.RequestAborted);
-        //_logger.LogInformation($"traces.count: {items.Count}");
-
-        ////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)
-        //            {
-        //                var stepHandler = WorkflowStepHandler.Create(trace.WorkflowId, trace.ExternalId,
-        //                    trace.FlowAssignType.Value, user.Id, user.Name, user.OrgId, user.Organization.Name);
-        //                stepHandler.WorkflowStepId = trace.StepId;
-        //                handlers.Add(stepHandler);
-        //            }
-        //        }
-        //        else
-        //        {
-        //            var org = orgs.FirstOrDefault(d => d.Id == traceHandler.Key);
-        //            if (org != null)
-        //            {
-        //                var stepHandler = WorkflowStepHandler.Create(trace.WorkflowId, trace.ExternalId,
-        //                    trace.FlowAssignType.Value, orgId: org.Id, orgName: org.Name);
-        //                stepHandler.WorkflowStepId = trace.StepId;
-        //                handlers.Add(stepHandler);
-        //            }
-        //        }
-        //    }
-        //}
-
-        //_logger.LogInformation($"待更新traces: {updateTraces.Count}");
-        //if (updateTraces.Any())
-        //    await _workflowTraceRepository.UpdateRangeAsync(updateTraces, HttpContext.RequestAborted);
-
-        //_logger.LogInformation($"待更新traces: {handlers.Count}");
-        //if (handlers.Any())
-        //    await _workflowStepHandleRepository.AddRangeAsync(handlers, HttpContext.RequestAborted);
-
-        ///////
-
-        var orders = await _orderRepository.Queryable(hasHandled: true)
-            //.Where(entity=>entity.CreationTime>= DateTime.Now.AddMonths(-1))
+        var steps = await _workflowStepRepository.Queryable()
+            .Includes(d => d.WorkflowTrace)
+            .Where(d => d.FlowAssignType == null)
             .ToListAsync(HttpContext.RequestAborted);
+        foreach (var step in steps)
+        {
+            
+        }
     }
 
     [HttpGet("rsa")]

+ 14 - 6
src/Hotline.Repository.SqlSugar/Extensions/DataPermissionExtensions.cs

@@ -20,12 +20,20 @@ namespace Hotline.Repository.SqlSugar.Extensions
             where TEntity : class, IEntity<string>, IDataPermission, IWorkflow, new()
         {
             var session = dataPermissionFilterBuilder.SessionContext;
-            return queryable.LeftJoin<WorkflowTrace>((d, step) => d.Id == step.ExternalId)
-                .Where((d, step) => (step.FlowAssignType == EFlowAssignType.User && !string.IsNullOrEmpty(step.HandlerId) && step.HandlerId == session.RequiredUserId) ||
-                                       (step.FlowAssignType == EFlowAssignType.Org && !string.IsNullOrEmpty(step.HandlerOrgId) && step.HandlerOrgId == session.RequiredOrgId) ||
-                                       (step.FlowAssignType == EFlowAssignType.Role && !string.IsNullOrEmpty(step.RoleId) && session.Roles.Contains(step.RoleId)))
-                .Select((d, step) => d)
-                ;
+
+            return queryable.Where(d => SqlFunc.Subqueryable<WorkflowTrace>()
+                    .Where(step => step.ExternalId == d.Id &&
+                            ((step.FlowAssignType == EFlowAssignType.User && !string.IsNullOrEmpty(step.HandlerId) && step.HandlerId == session.RequiredUserId) ||
+                               (step.FlowAssignType == EFlowAssignType.Org && !string.IsNullOrEmpty(step.HandlerOrgId) && step.HandlerOrgId == session.RequiredOrgId) ||
+                               (step.FlowAssignType == EFlowAssignType.Role && !string.IsNullOrEmpty(step.RoleId) && session.Roles.Contains(step.RoleId))
+                               )).Any());
+
+            //return queryable.LeftJoin<WorkflowTrace>((d, step) => d.Id == step.ExternalId)
+            //    .Where((d, step) => (step.FlowAssignType == EFlowAssignType.User && !string.IsNullOrEmpty(step.HandlerId) && step.HandlerId == session.RequiredUserId) ||
+            //                           (step.FlowAssignType == EFlowAssignType.Org && !string.IsNullOrEmpty(step.HandlerOrgId) && step.HandlerOrgId == session.RequiredOrgId) ||
+            //                           (step.FlowAssignType == EFlowAssignType.Role && !string.IsNullOrEmpty(step.RoleId) && session.Roles.Contains(step.RoleId)))
+            //    .Select((d, step) => d)
+            //    ;
 
             //return queryable.Where(dataPermissionFilterBuilder.BuildWithFlowViewFilter<TEntity>());
         }