Преглед изворни кода

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

libin пре 3 месеци
родитељ
комит
cd1e128300

+ 81 - 40
src/Hotline.Application/Jobs/XingTangCallsSyncJob.cs

@@ -82,64 +82,105 @@ namespace Hotline.Application.Jobs
             if (!occupyCalls.Any()) return;
             try
             {
-                var calls = _mapper.Map<List<CallNative>>(occupyCalls);
-                //填充user信息
-                var staffNos = calls.Select(d => d.StaffNo).ToList();
-                var users = await _userRepository.Queryable()
-                    .Where(d => staffNos.Contains(d.StaffNo) && d.StaffNo != "0")
-                    .ToListAsync(context.CancellationToken);
-
-                foreach (var call in calls)
+                if (occupyCalls.Any(m => m.UserData.IsNullOrEmpty() == true))
                 {
-                    call.Id = await GetCallIdAsync(call.CallNo, context.CancellationToken);
-                    var user = users.FirstOrDefault(d => d.StaffNo == call.StaffNo && d.StaffNo != "0");
-                    if (user is not null)
+                    var calls = _mapper.Map<List<CallNative>>(occupyCalls);
+                    //填充user信息
+                    var staffNos = calls.Select(d => d.StaffNo).ToList();
+                    var users = await _userRepository.Queryable()
+                        .Where(d => staffNos.Contains(d.StaffNo) && d.StaffNo != "0")
+                        .ToListAsync(context.CancellationToken);
+
+                    foreach (var call in calls)
                     {
-                        call.UserId = user.Id;
-                        call.UserName = user.Name;
-                    }
+                        call.Id = await GetCallIdAsync(call.CallNo, context.CancellationToken);
+                        var user = users.FirstOrDefault(d => d.StaffNo == call.StaffNo && d.StaffNo != "0");
+                        if (user is not null)
+                        {
+                            call.UserId = user.Id;
+                            call.UserName = user.Name;
+                        }
 
-                    if (call.RingDuration == 0)
-                    {
-                        if (call.BeginRingTime != null)
+                        if (call.RingDuration == 0)
                         {
-                            if (call.EndRingTime != null)
+                            if (call.BeginRingTime != null)
                             {
-                                call.RingDuration = call.EndRingTime.Value.GetDifferenceSeconds(call.BeginRingTime.Value);
-                            }
-                            else
-                            {
-                                call.RingDuration = call.EndTime.GetDifferenceSeconds(call.BeginRingTime.Value);
+                                if (call.EndRingTime != null)
+                                {
+                                    call.RingDuration = call.EndRingTime.Value.GetDifferenceSeconds(call.BeginRingTime.Value);
+                                }
+                                else
+                                {
+                                    call.RingDuration = call.EndTime.GetDifferenceSeconds(call.BeginRingTime.Value);
+                                }
                             }
                         }
+
+                        if (call.GroupId == "0" && call.CallState != ECallState.IVRNoAccept)
+                        {
+                            call.CallState = ECallState.Invalid;
+                        }
                     }
 
-                    if (call.GroupId == "0" && call.CallState != ECallState.IVRNoAccept)
+                    await _callRepository.AddRangeAsync(calls, context.CancellationToken);
+
+                    // 开关
+                    var unPushTime = _systemSettingCacheManager.CallSyncUnPushDateTime;
+                    calls = calls.Where(m => m.BeginIvrTime >= unPushTime).ToList();
+                    if (calls.Any())
                     {
-                        call.CallState = ECallState.Invalid;
+                        //推省上
+                        await _capPublisher.PublishAsync(EventNames.HotlineCallAdd, calls.Adapt<List<CallNativeDto>>());
                     }
                 }
+                else
+                {
+                    var calls = new List<CallNative>();
 
-                await _callRepository.AddRangeAsync(calls, context.CancellationToken);
+                    foreach (var occupyCall in occupyCalls)
+                    {
+                        var call = occupyCall.Adapt<CallNative>();
+                        call.Id = await GetCallIdAsync(call.CallNo, context.CancellationToken);
+                        var userSplit = occupyCall.UserData.Split(':');
+                        call.UserId = userSplit[0];
+                        call.UserName = userSplit[1];
 
-                // 开关
-                var unPushTime = _systemSettingCacheManager.CallSyncUnPushDateTime;
-                calls = calls.Where(m => m.BeginIvrTime >= unPushTime).ToList();
-                if (calls.Any())
-                {
-                    //推省上
-                    await _capPublisher.PublishAsync(EventNames.HotlineCallAdd, calls.Adapt<List<CallNativeDto>>());
+                        if (call.RingDuration == 0)
+                        {
+                            if (call.BeginRingTime != null)
+                            {
+                                if (call.EndRingTime != null)
+                                {
+                                    call.RingDuration = call.EndRingTime.Value.GetDifferenceSeconds(call.BeginRingTime.Value);
+                                }
+                                else
+                                {
+                                    call.RingDuration = call.EndTime.GetDifferenceSeconds(call.BeginRingTime.Value);
+                                }
+                            }
+                        }
+
+                        if (call.GroupId == "0" && call.CallState != ECallState.IVRNoAccept)
+                        {
+                            call.CallState = ECallState.Invalid;
+                        }
+                        calls.Add(call);
+                    }
+
+                    await _callRepository.AddRangeAsync(calls, context.CancellationToken);
+
+                    // 开关
+                    var unPushTime = _systemSettingCacheManager.CallSyncUnPushDateTime;
+                    calls = calls.Where(m => m.BeginIvrTime >= unPushTime).ToList();
+                    if (calls.Any())
+                    {
+                        //推省上
+                        await _capPublisher.PublishAsync(EventNames.HotlineCallAdd, calls.Adapt<List<CallNativeDto>>());
+                    }
                 }
-                ////todo
-                //var callIns = calls.Where(d => d.Direction == ECallDirection.In).ToList();
-                //if (callIns.Any())
-                //{
-                //    await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineCallAdd, callIns);
-                //}
             }
             catch (Exception e)
             {
-                //Console.WriteLine(e);
                 _logger.LogError($"获取通话记录异常:{e.Message} \n {e.StackTrace}");
                 foreach (var occupyCall in occupyCalls)
                 {

+ 42 - 21
src/Hotline.Application/Jobs/XingTangTelOperationSyncJob.cs

@@ -14,6 +14,8 @@ using Hotline.CallCenter.Tels;
 using MapsterMapper;
 using Hotline.Users;
 using XF.Domain.Repository;
+using Hotline.Share.Tools;
+using Mapster;
 
 namespace Hotline.Application.Jobs
 {
@@ -44,10 +46,10 @@ namespace Hotline.Application.Jobs
 
         public async Task Execute(IJobExecutionContext context)
         {
-           var xingtangOperations = await _db.Queryable<XingtangSeatOperation>()
-                .Where(d => (d.IsSync == null || !d.IsSync) && (d.Tries == null || d.Tries <= 20))
-                .Take(50)
-                .ToListAsync(context.CancellationToken);
+            var xingtangOperations = await _db.Queryable<XingtangSeatOperation>()
+                 .Where(d => (d.IsSync == null || !d.IsSync) && (d.Tries == null || d.Tries <= 20))
+                 .Take(50)
+                 .ToListAsync(context.CancellationToken);
 
             var occupyOperations = new List<XingtangSeatOperation>();
             foreach (var operation in xingtangOperations)
@@ -63,30 +65,49 @@ namespace Hotline.Application.Jobs
 
             try
             {
-                var operations = _mapper.Map<List<TelOperation>>(occupyOperations);
-                //填充user信息
-                var staffNos = operations
-                    .Where(d=>!string.IsNullOrEmpty(d.StaffNo) && d.StaffNo != "0")
-                    .Select(d => d.StaffNo).ToList();
-                var users = await _userRepository.Queryable()
-                    .Where(d => staffNos.Contains(d.StaffNo))
-                    .ToListAsync(context.CancellationToken);
+                if (occupyOperations.Any(m => m.UserData.IsNullOrEmpty() == true))
+                {
+                    var operations = _mapper.Map<List<TelOperation>>(occupyOperations);
+                    //填充user信息
+                    var staffNos = operations
+                        .Where(d => !string.IsNullOrEmpty(d.StaffNo) && d.StaffNo != "0")
+                        .Select(d => d.StaffNo).ToList();
+                    var users = await _userRepository.Queryable()
+                        .Where(d => staffNos.Contains(d.StaffNo))
+                        .ToListAsync(context.CancellationToken);
+
+                    foreach (var operation in operations)
+                    {
+                        var user = users.FirstOrDefault(d => d.StaffNo == operation.StaffNo);
+                        if (user is not null)
+                        {
+                            operation.UserId = user.Id;
+                            operation.UserName = user.Name;
+                            var work = _userCacheManager.GetWorkByUserNoExp(user.Id);
+                            if (work is not null)
+                                operation.GroupId = work.QueueId;
+                        }
 
-                foreach (var operation in operations)
+                    }
+                    await _telOperationRepository.AddRangeAsync(operations, context.CancellationToken);
+                }
+                else
                 {
-                    var user = users.FirstOrDefault(d => d.StaffNo == operation.StaffNo);
-                    if (user is not null)
+                    var operations = new List<TelOperation>();
+                    foreach (var occupyOperation in occupyOperations)
                     {
-                        operation.UserId = user.Id;
-                        operation.UserName = user.Name;
-                        var work = _userCacheManager.GetWorkByUserNoExp(user.Id);
+                        var operation = occupyOperation.Adapt<TelOperation>();
+                        var userSplit = occupyOperation.UserData.Split(':');
+                        operation.UserId = userSplit[0];
+                        operation.UserName = userSplit[1];
+                        var work = _userCacheManager.GetWorkByUserNoExp(operation.UserId);
                         if (work is not null)
                             operation.GroupId = work.QueueId;
+
+                        operations.Add(operation);
                     }
-                    
+                    await _telOperationRepository.AddRangeAsync(operations, context.CancellationToken);
                 }
-
-                await _telOperationRepository.AddRangeAsync(operations, context.CancellationToken);
             }
             catch (Exception e)
             {

+ 1 - 4
src/Hotline.Repository.SqlSugar/Orders/OrderRepository.cs

@@ -1802,10 +1802,7 @@ namespace Hotline.Repository.SqlSugar.Orders
                 //      x => dto.OrgProcessingResults.Contains(SqlFunc.JsonField(x.OrgProcessingResults, "Key")))
                 //.WhereIF(dto.OrgHandledAttitude != null && dto.OrgHandledAttitude.Any(),
                 //     x => dto.OrgHandledAttitude.Contains(SqlFunc.JsonField(x.OrgHandledAttitude, "Key")))
-                .WhereIF(dto.OrgProcessingResults != null && dto.OrgProcessingResults.Count > 0,
-                    dto.AttitudeType == EAttitudeType.ProcessingResult ?
-                    x => dto.OrgProcessingResults.Contains(SqlFunc.JsonField(x.OrgProcessingResults, "Key")) :
-                    x => dto.OrgProcessingResults.Contains(SqlFunc.JsonField(x.OrgHandledAttitude, "Key")))
+                .WhereIF(!string.IsNullOrEmpty(dto.OrgProcessingResults),dto.AttitudeType == EAttitudeType.ProcessingResult ?x => SqlFunc.JsonField(x.OrgProcessingResults, "Key") == dto.OrgProcessingResults  :x => SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == dto.OrgProcessingResults)
                 .WhereIF(!string.IsNullOrEmpty(dto.VisitUser), x => x.OrderVisit.Employee.Name.Contains(dto.VisitUser))
                 .WhereIF(!string.IsNullOrEmpty(dto.No), x => x.OrderVisit.Order.No == dto.No)
                 .WhereIF(!string.IsNullOrEmpty(dto.Title), x => x.OrderVisit.Order.Title.Contains(dto.Title))

+ 1 - 1
src/Hotline.Share/Requests/PagedKeywordRequest.cs

@@ -564,7 +564,7 @@ public record OrgVisitDetailListReq : PagedKeywordRequest
     /// <summary>
     /// 部门办件结果
     /// </summary>
-    public List<string>? OrgProcessingResults { get; set; }
+    public string? OrgProcessingResults { get; set; } 
 
     /// <summary>
     /// 回访人

+ 2 - 0
src/XingTang.Sdk/XingtangCall.cs

@@ -127,6 +127,8 @@ public class XingtangCall
     /// </summary>
     public string? OrgCaller { get; set; }
 
+    public string? UserData { get; set; }
+
     #region 未启用
 
     public int? MutiCall { get; set; }

+ 2 - 0
src/XingTang.Sdk/XingtangSeatOperation.cs

@@ -64,6 +64,8 @@ namespace XingTang.Sdk
         //弃用
         public DateTime? EndTime { get; set; }
 
+        public string? UserData { get; set; }
+
         #region 自建
 
         public bool IsSync { get; set; }