xf 10 ヶ月 前
コミット
e9e0d695b4

+ 30 - 2
src/Hotline.Application/Jobs/GetCallsJob.cs

@@ -5,8 +5,11 @@ using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using Hotline.CallCenter.Calls;
 using Hotline.Repository.SqlSugar;
+using MapsterMapper;
 using XF.Domain.Cache;
+using XF.Domain.Repository;
 using XingTang.Sdk;
 
 namespace Hotline.Application.Jobs
@@ -16,17 +19,42 @@ namespace Hotline.Application.Jobs
     /// </summary>
     public class GetCallsJob : IJob, IDisposable
     {
+        private readonly IRepository<TrCallRecord> _trcallRepository;
+        private readonly IMapper _mapper;
         private readonly ISqlSugarClient _db;
 
-        public GetCallsJob(ISugarUnitOfWork<XingTangDbContext> uow)
+        public GetCallsJob(
+            ISugarUnitOfWork<XingTangDbContext> uow,
+            IRepository<TrCallRecord> trcallRepository,
+            IMapper mapper
+            )
         {
+            _trcallRepository = trcallRepository;
+            _mapper = mapper;
             _db = uow.Db;
         }
 
         public async Task Execute(IJobExecutionContext context)
         {
             var calls = await _db.Queryable<XingtangCall>()
-                  .ToListAsync(context.CancellationToken);
+                .Where(d => !d.IsSync)
+                .Take(100)
+                .ToListAsync(context.CancellationToken);
+
+            var unsyncCalls = new List<XingtangCall>();
+            foreach (var call in calls)
+            {
+                var rows = _db.Updateable(new XingtangCall
+                {
+                    Id = call.Id,
+                    IsSync = true
+                }).ExecuteCommandWithOptLock();
+                if (rows > 0)
+                    unsyncCalls.Add(call);
+            }
+
+            var trCalls = _mapper.Map<ICollection<TrCallRecord>>(unsyncCalls);
+            //填充user信息
         }
 
         /// <summary>Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.</summary>

+ 27 - 0
src/Hotline.Application/Mappers/CallMapperConfigs.cs

@@ -7,6 +7,7 @@ using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using XingTang.Sdk;
 
 namespace Hotline.Application.Mappers
 {
@@ -57,6 +58,32 @@ namespace Hotline.Application.Mappers
                 .Map(d => d.Dtmf, x => x.dtmf)
                 .Map(d => d.CallAccept, x => x.call_accept)
                 .Map(d => d.Type, x => x.type);
+
+            config.ForType<XingtangCall, TrCallRecord>()
+                .Map(d => d.OtherAccept, s => s.CallGuid)
+                .Map(d => d.CallDirection, s => s.CallType)
+                .Map(d => d.CPN, s => s.Caller)
+                .Map(d => d.CDPN, s => s.Called)
+                .Map(d => d.TelNo, s => s.Ext)
+                .Map(d => d.StaffNo, s => s.UserCode)
+                .Map(d => d.AnsweredTime, s => s.ReceiveEndTime)
+                .Map(d => d.OverTime, s => s.CallEndTime)
+                //.Map(d=>d.BeginIvrTime,s=>s.EnqueueTime)
+                //.Map(d=>d.EndIvrTime,s=>s.)
+                //.Map(d=>d.BeginRingTime, s=>s.RingStartTime)
+                //.Map(d=>d.EndRingTimg,s=>)
+                .Map(d => d.OlaQueue, s => s.SkillId.ToString())
+                .Map(d => d.Duration, s => s.Duration)
+                .Map(d => d.RingTimes, s => s.RingTime)
+                .Map(d => d.QueueTims, s => s.WaitTime)
+
+                .AfterMapping((s, d) =>
+                {
+                    d.CreatedTime = DateTime.Now;
+                    d.OnState = s.ReceiveEndTime.HasValue ? EOnState.On : EOnState.NoOn;
+
+
+                });
         }
 
         private DateTime? FormatDateTime(string? time)

+ 3 - 1
src/Hotline/CallCenter/Calls/TrCallRecord.cs

@@ -6,6 +6,7 @@ using XF.Domain.Repository;
 
 namespace Hotline.CallCenter.Calls
 {
+    [SugarIndex("index_call_callid", nameof(TrCallRecord.OtherAccept), OrderByType.Asc)]
     public class TrCallRecord : CreationEntity
     {
         /// <summary>
@@ -89,7 +90,7 @@ namespace Hotline.CallCenter.Calls
         /// <summary>
         /// 状态码,语音信箱:999/其他:16
         /// </summary>
-        public string Status { get; set; }
+        public string? Status { get; set; }
         /// <summary>
         /// IVR开始时间
         /// </summary>
@@ -189,5 +190,6 @@ namespace Hotline.CallCenter.Calls
         public string? OperatorName { get; set; }
 
         #endregion
+        
     }
 }

+ 38 - 23
src/XingTang.Sdk/XingtangCall.cs

@@ -46,12 +46,12 @@ public class XingtangCall
     /// <summary>
     /// 振铃时间
     /// </summary>
-    public DateTime ReceiveStartTime { get; set; }
+    public DateTime? ReceiveStartTime { get; set; }
 
     /// <summary>
     /// 接听时间
     /// </summary>
-    public DateTime ReceiveEndTime { get; set; }
+    public DateTime? ReceiveEndTime { get; set; }
 
     /// <summary>
     /// 挂机时间
@@ -67,6 +67,34 @@ public class XingtangCall
     /// </summary>
     public int CallState { get; set; }
 
+    [SugarColumn(ColumnName = "CallOut_Channel")]
+    public int CallOutChannel { get; set; }
+    [SugarColumn(ColumnName = "CallIn_Channel")]
+    public int CallInChannel { get; set; }
+    public DateTime? EnqueueTime { get; set; }
+    public DateTime? DequeueTime { get; set; }
+    public string? CompanyId { get; set; }
+    
+    public int? SkillId { get; set; }
+    public int? MeetingId { get; set; }
+
+    /// <summary>
+    /// 挂机原因
+    /// </summary>
+    public string? Cause { get; set; }
+
+    /// <summary>
+    /// 挂机方
+    /// </summary>
+    public string? Disposition { get; set; }
+
+    /// <summary>
+    /// 原主叫
+    /// </summary>
+    public string? OrgCaller { get; set; }
+
+    #region 未启用
+
     public int MutiCall { get; set; }
     public int CallForword { get; set; }
     public DateTime RingStartTime { get; set; }
@@ -76,13 +104,7 @@ public class XingtangCall
 
     [SugarColumn(ColumnName = "UserListID")]
     public int UserListId { get; set; }
-    [SugarColumn(ColumnName = "CallOut_Channel")]
-    public int CallOutChannel { get; set; }
-    [SugarColumn(ColumnName = "CallIn_Channel")]
-    public int CallInChannel { get; set; }
-    public DateTime EnqueueTime { get; set; }
-    public DateTime DequeueTime { get; set; }
-    public string CompanyId { get; set; }
+
     public int Score { get; set; }
     public string MarkRemark { get; set; }
     public string MarkUserId { get; set; }
@@ -91,21 +113,14 @@ public class XingtangCall
     public int IsAssign { get; set; }
     public int ResultKey { get; set; }
     public int Direction { get; set; }
-    public int SkillId { get; set; }
-    public int MeetingId { get; set; }
+    #endregion
 
-    /// <summary>
-    /// 挂机原因
-    /// </summary>
-    public string Cause { get; set; }
+    #region 自建
 
-    /// <summary>
-    /// 挂机方
-    /// </summary>
-    public string Disposition { get; set; }
+    public bool IsSync { get; set; }
 
-    /// <summary>
-    /// 原主叫
-    /// </summary>
-    public string OrgCaller { get; set; }
+    [SugarColumn(IsEnableUpdateVersionValidation = true)]
+    public string Ver { get; set; }
+
+    #endregion
 }