瀏覽代碼

Merge branch 'release/yibin' of http://110.188.24.182:10023/Fengwo/hotline into release/yibin

田爽 10 月之前
父節點
當前提交
345b80f733

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

@@ -420,7 +420,7 @@ namespace Hotline.Api.Controllers
 
             //获取关联 工单或是回访
             //var order = await _orderRepository.GetAsync(x => x.CallId == model.CallAccept, HttpContext.RequestAborted);//由CallAccept改为OtherAccept
-            var order = await _orderRepository.GetAsync(x => x.CallId == model.OtherAccept, HttpContext.RequestAborted);
+            var order = await _orderRepository.GetAsync(x => x.CallId == model.OtherAccept && string.IsNullOrEmpty(x.CallId) == false, HttpContext.RequestAborted);
             if (order != null)
             {
                 model.CallOrderType = ECallOrderType.Order;
@@ -441,7 +441,7 @@ namespace Hotline.Api.Controllers
             else
             {
                 //var orderVisit = await _orderVisitRepository.GetAsync(x => x.CallId == model.CallAccept, HttpContext.RequestAborted);//由CallAccept改为OtherAccept
-                var orderVisit = await _orderVisitRepository.GetAsync(x => x.CallId == model.OtherAccept, HttpContext.RequestAborted);
+                var orderVisit = await _orderVisitRepository.GetAsync(x => x.CallId == model.OtherAccept && string.IsNullOrEmpty(x.CallId) == false, HttpContext.RequestAborted);
                 if (orderVisit != null)
                 {
                     model.CallOrderType = ECallOrderType.Visit;

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

@@ -668,7 +668,7 @@ public class OrderController : BaseController
         var dissatisfiedReason = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.DissatisfiedReason);
         var visitManner = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.VisitManner).Where(x => x.DicDataValue != "-1");
         //var callRecord = await _trCallRecordRepository.GetAsync(x => x.CallAccept == orderVisit.CallId); //由CallAccept改为OtherAccept
-        var callRecord = await _trCallRecordRepository.GetAsync(x => x.OtherAccept == orderVisit.CallId);
+        var callRecord = await _trCallRecordRepository.GetAsync(x => x.OtherAccept == orderVisit.CallId && string.IsNullOrEmpty(x.OtherAccept)==false,HttpContext.RequestAborted);
         var recordingFileUrl = "";
         var recordingBaseAddress = "";
         var recordingAbsolutePath = "";
@@ -2390,7 +2390,7 @@ public class OrderController : BaseController
 
         //工单ID跟通话记录相关联
         //var callRecord = await _trCallRecordRepository.GetAsync(p => p.CallAccept == order.CallId, HttpContext.RequestAborted);//由CallAccept改为OtherAccept
-        var callRecord = await _trCallRecordRepository.GetAsync(p => p.OtherAccept== order.CallId, HttpContext.RequestAborted);
+        var callRecord = await _trCallRecordRepository.GetAsync(p => p.OtherAccept== order.CallId && string.IsNullOrEmpty(p.OtherAccept) ==false, HttpContext.RequestAborted);
         if (callRecord != null && string.IsNullOrEmpty(callRecord.ExternalId))
         {
             callRecord.ExternalId = order.Id;

+ 86 - 77
src/Hotline.Api/Controllers/TestController.cs

@@ -26,6 +26,7 @@ using Hotline.Share.Dtos;
 using Hotline.Share.Dtos.FlowEngine;
 using Hotline.Share.Dtos.Order;
 using Hotline.Share.Dtos.Realtime;
+using Hotline.Share.Enums.FlowEngine;
 using Hotline.Share.Enums.Settings;
 using Hotline.Share.Mq;
 using Hotline.Tools;
@@ -90,6 +91,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 +132,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 +163,7 @@ public class TestController : BaseController
         _exportApplication = exportApplication;
         _aiVisitService = aiVisitService;
         _workflowTraceRepository = workflowTraceRepository;
+        _workflowStepRepository = workflowStepRepository;
         //_workflowStepHandleRepository = workflowStepHandleRepository;
         _systemOrganizeRepository = systemOrganizeRepository;
         _orderRepository = orderRepository;
@@ -467,96 +472,100 @@ 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 steps = await _workflowStepRepository.Queryable()
+            .Includes(d => d.WorkflowTrace)
+            .Where(d => SqlFunc.Exists(d.WorkflowTrace.Id) &&
+                        d.FlowAssignType == null &&
+                        SqlFunc.JsonArrayLength(d.Handlers) == 1)
+            .ToListAsync(HttpContext.RequestAborted);
+        //foreach (var step in steps)
         //{
-        //    var trace = item;
-        //    foreach (var traceHandler in trace.Handlers)
+        //    var handlerCount = step.Handlers.Count;
+        //    if (handlerCount == 1)
+        //    {
+        //        step.FlowAssignType =
+        //            step.Handlers.First().Key.Length == 36 ? EFlowAssignType.User : EFlowAssignType.Org;
+        //        step.WorkflowTrace.FlowAssignType = step.FlowAssignType;
+        //    }
+        //    else if (handlerCount > 1)
         //    {
-        //        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);
-        //            }
-        //        }
+        //    }
+        //    else
+        //    {
+        //        _logger.LogError($"无办理对象, {handlerCount}");
         //    }
         //}
 
-        //_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 list = new List<WorkflowStep>();
+        foreach (var step in steps)
+        {
+            var handler = step.Handlers.First();
+            if (string.IsNullOrEmpty(handler.Key)) continue;
+            step.FlowAssignType =
+                        handler.Key.Length == 36 ? EFlowAssignType.User : EFlowAssignType.Org;
+            step.WorkflowTrace.FlowAssignType = step.FlowAssignType;
+            list.Add(step);
+        }
 
-        ///////
+        await _workflowStepRepository
+            .UpdateNav(list)
+            .Include(d => d.WorkflowTrace)
+            .ExecuteCommandAsync();
+        //.UpdateRangeAsync(steps, HttpContext.RequestAborted);
+    }
 
-        var orders = await _orderRepository.Queryable(hasHandled: true)
-            //.Where(entity=>entity.CreationTime>= DateTime.Now.AddMonths(-1))
+    /// <summary>
+    /// 赋值handlerId
+    /// </summary>
+    /// <returns></returns>
+    [AllowAnonymous]
+    [HttpPost("t4")]
+    public async Task TestExportExcel1()
+    {
+        var steps = await _workflowStepRepository.Queryable()
+            .Includes(d => d.WorkflowTrace)
+            .Where(d => SqlFunc.Exists(d.WorkflowTrace.Id) &&
+                        d.Status != EWorkflowStepStatus.Handled &&
+                        d.HandlerId == null &&
+                        d.FlowAssignType != null &&
+                        SqlFunc.JsonArrayLength(d.Handlers) == 1)
             .ToListAsync(HttpContext.RequestAborted);
+
+        var list = new List<WorkflowStep>();
+        foreach (var step in steps)
+        {
+            var handler = step.Handlers.First();
+            if (string.IsNullOrEmpty(handler.Key)) continue;
+            if (step.FlowAssignType == EFlowAssignType.User)
+            {
+                step.HandlerId = handler.Key;
+                step.HandlerName = handler.Value;
+                step.WorkflowTrace.HandlerId = step.HandlerId;
+                step.WorkflowTrace.HandlerName = step.HandlerName;
+            }
+            else
+            {
+                step.HandlerOrgId = handler.Key;
+                step.HandlerOrgName = handler.Value;
+                step.WorkflowTrace.HandlerOrgId = step.HandlerOrgId;
+                step.WorkflowTrace.HandlerOrgName = step.HandlerOrgName;
+            }
+            list.Add(step);
+        }
+
+        await _workflowStepRepository
+            .UpdateNav(list)
+            .Include(d => d.WorkflowTrace)
+            .ExecuteCommandAsync();
     }
 
     [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>());
         }