瀏覽代碼

Merge branch 'master' of http://110.188.24.182:10023/Fengwo/hotline

田爽 1 年之前
父節點
當前提交
a1bdc0d3a6

+ 21 - 16
src/Hotline.Ai.Jths/AiVisitService.cs

@@ -3,6 +3,7 @@ using Hotline.Ai.Jths.OrderVisits;
 using Hotline.Ai.Visit;
 using Hotline.Orders;
 using Hotline.Share.Enums.Order;
+using Microsoft.Extensions.Logging;
 using Newtonsoft.Json;
 using RestSharp;
 using System;
@@ -21,6 +22,8 @@ namespace Hotline.Ai.Jths
         private readonly string _serviceversion;
         private readonly string _sceneuid;
         private readonly string _ruleuid;
+        private ILogger<AiVisitService> _logger;
+
         public AiVisitService(string baseUrl, string appkey, string serviceversion, string sceneuid, string ruleuid)
         {
          
@@ -45,13 +48,13 @@ namespace Hotline.Ai.Jths
                 EndDate = aiOrderVisit.EndTime,
                 FestivalBan = aiOrderVisit.FestivalBan,
                 RuleType = aiOrderVisit.RuleType,
-                RuleUid = aiOrderVisit.RuleUid,
+                RuleUid = _ruleuid,
             };
             var taskDataList = new List<TaskData>();
             foreach (var item in aiOrderVisit.AiOrderVisitDetails)
             {
                 var taskData = new TaskData();
-                taskData.CalledNumber = item.Order.FromPhone;
+                taskData.CalledNumber = item.OuterNo;
                 taskData.VariableList = new List<Variable>();
                
                 if (item.Order.FromGender!= EGender.Unknown)
@@ -65,26 +68,29 @@ namespace Hotline.Ai.Jths
                
                 taskData.VariableList.Add(new Variable() { Code = "反馈时间", Value = item.Order.CreationTime.ToString("yyyy年MM月dd日hh点mm分") });
                 taskData.VariableList.Add(new Variable() { Code = "反馈问题", Value = item.Order.Title });
+                taskDataList.Add(taskData);
             }
             requestData.TaskDataList = taskDataList;
-            var response = await ExecuteAsync<AiVisitServiceRequest, AiVisitServiceResponse>(_baseUrl + "edas/batchTask",Method.Post, requestData,cancellationToken);
+            var response = await ExecuteAsync<AiVisitServiceRequest, AiVisitServiceResponse>(_baseUrl + "/edas/batchTask",Method.Post, requestData,cancellationToken);
 
-            //拼对象 TODO
-            aiOrderVisit.BatchUid = response.BatchUid;
-            for (int i = 0; i < aiOrderVisit.AiOrderVisitDetails.Count; i++)
+            if (response.TaskInfoList!=null && !string.IsNullOrEmpty(response.BatchUid))
             {
-                var taskInfo = response.TaskInfoList.FirstOrDefault(x => x.CalledNumber == aiOrderVisit.AiOrderVisitDetails[i].OuterNo);
-                if (taskInfo!=null)
-                {
-                    aiOrderVisit.AiOrderVisitDetails[i].AiOrderVisitState = Share.Enums.Ai.EAiOrderVisitState.InProgress;
-                    aiOrderVisit.AiOrderVisitDetails[i].TaskUid = taskInfo.TaskUid;
-                }
-                else
+                //拼对象
+                aiOrderVisit.BatchUid = response.BatchUid;
+                for (int i = 0; i < aiOrderVisit.AiOrderVisitDetails.Count; i++)
                 {
-                    aiOrderVisit.AiOrderVisitDetails[i].AiOrderVisitState = Share.Enums.Ai.EAiOrderVisitState.Cancel;
+                    var taskInfo = response.TaskInfoList.FirstOrDefault(x => x.CalledNumber == aiOrderVisit.AiOrderVisitDetails[i].OuterNo);
+                    if (taskInfo != null)
+                    {
+                        aiOrderVisit.AiOrderVisitDetails[i].AiOrderVisitState = Share.Enums.Ai.EAiOrderVisitState.InProgress;
+                        aiOrderVisit.AiOrderVisitDetails[i].TaskUid = taskInfo.TaskUid;
+                    }
+                    else
+                    {
+                        aiOrderVisit.AiOrderVisitDetails[i].AiOrderVisitState = Share.Enums.Ai.EAiOrderVisitState.Cancel;
+                    }
                 }
             }
-
             return aiOrderVisit;
         }
 
@@ -106,7 +112,6 @@ namespace Hotline.Ai.Jths
             {
                 req.AddJsonBody(request);
             }
-
             try
             {
                 var response = await _client.ExecuteAsync<TResponse>(req, cancellationToken);

+ 5 - 2
src/Hotline.Api/Controllers/AiController.cs

@@ -209,7 +209,9 @@ namespace Hotline.Api.Controllers
         {
             var (total, items) = await _aiOrderVisitDetailRepository.Queryable()
                 .Includes(x=>x.OrderVisit,x=>x.OrderVisitDetails)
+                .Includes(x=>x.Order)
                 .Where(x => x.AiOrderVisitId == dto.Id)
+                .WhereIF(!string.IsNullOrEmpty(dto.Keyword),x=>x.Order.No.Contains(dto.Keyword) || x.Order.Title.Contains(dto.Keyword))
                 .OrderByDescending(x => x.CreationTime)
                 .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
 
@@ -239,15 +241,16 @@ namespace Hotline.Api.Controllers
         {
             var model = _mapper.Map<AiOrderVisit>(dto);
 
+            var detaillist = _mapper.Map<List<AiOrderVisitDetail>>(dto.AiOrderVisitDetails);
+
             model.TaskState = Share.Enums.Ai.EAiOrderVisitTaskState.InProgress;
             model.RuleType = 2;
-            model.RuleUid = _options.Value.RuleUid;
             model.HasVisitCount = dto.AiOrderVisitDetails.Count;
             model.VisitedCount = 0;
             model.VisitedFailCount = 0;
             var id = await _aiOrderVisitRepository.AddAsync(model, HttpContext.RequestAborted);
 
-            var detaillist = _mapper.Map<List<AiOrderVisitDetail>>(dto.AiOrderVisitDetails);
+            
             detaillist.ForEach(x =>
             {
                 x.AiOrderVisitId = id;

+ 4 - 0
src/Hotline.Api/Controllers/IPPbxController.cs

@@ -222,6 +222,7 @@ namespace Hotline.Api.Controllers
             {
                 model.UserId = work.UserId;
                 model.UserName = work.UserName;
+                model.StaffNo = work.StaffNo;
             }
             await _trCallRecordRepository.AddAsync(model, HttpContext.RequestAborted);
             return OpenResponse.Ok("success");
@@ -257,6 +258,9 @@ namespace Hotline.Api.Controllers
                 .WhereIF(!string.IsNullOrEmpty(dto.CDPN), x => x.CDPN.Contains(dto.CDPN))
                 .WhereIF(dto.CallDirection != null, x => x.CallDirection == dto.CallDirection)
                 .WhereIF(dto.OnState != null, x => x.OnState == dto.OnState)
+                .WhereIF(!string.IsNullOrEmpty(dto.Gateway),x=>x.Gateway.Contains(dto.Gateway))
+                .WhereIF(dto.StartTime.HasValue, x => x.CreatedTime >= dto.StartTime)
+                .WhereIF(dto.EndTime.HasValue, x => x.CreatedTime <= dto.EndTime)
                 .OrderByDescending(x => x.CreatedTime)
                 .ToPagedListAsync(dto.PageIndex, dto.PageSize);
             return new PagedDto<TrCallDto>(total, _mapper.Map<IReadOnlyList<TrCallDto>>(items));

+ 1 - 0
src/Hotline.Api/Controllers/OrderController.cs

@@ -1796,6 +1796,7 @@ public class OrderController : BaseController
             .Includes(d => d.OrderDelays)
             .Includes(d => d.OrderScreens)
             .Includes(d => d.OrderVisits, x => x.OrderVisitDetails)
+            .Includes(d=> d.OrderVisits,x=>x.Employee)
             .FirstAsync(d => d.Id == id);
         if (order == null)
             return new();

+ 4 - 4
src/Hotline.Application/CallCenter/Calls/TrApplication.cs

@@ -39,7 +39,7 @@ namespace Hotline.Application.CallCenter.Calls
             {
                 if (work.TelNo == telNo)
                 {
-                    return new TrOnDutyResponseDto() { TelNo = work.TelNo, TelPwd = work.TelPwd, Description = work.Description, QueueId = work.QueueId };
+                    return new TrOnDutyResponseDto() { TelNo = work.TelNo, TelPwd = work.TelPwd, Description = work.Description, QueueId = work.QueueId,StartTime = work.StartTime };
                 }
                 else
                 {
@@ -56,16 +56,16 @@ namespace Hotline.Application.CallCenter.Calls
             var telModel = await _trClient.QueryTelsAsync(new Tr.Sdk.Tels.QueryTelRequest() { TelNo = telNo }, cancellationToken);
             if (telModel !=null && telModel.Count>0)
             {
-                work = new Work(_sessionContext.UserId, _sessionContext.UserName, telModel[0].Id, telNo, telModel[0].Password, telModel[0].Description, telModel[0].QueueId);
+                work = new Work(_sessionContext.UserId, _sessionContext.UserName, telModel[0].Id, telNo, telModel[0].Password, telModel[0].Description, telModel[0].QueueId,_sessionContext.StaffNo);
                 await _workRepository.AddAsync(work, cancellationToken);
                 bool IsTelNeedVerify = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.IsTelNeedVerify).SettingValue[0]);
                 if (IsTelNeedVerify)
                 {
-                    return new TrOnDutyResponseDto() { TelNo = telNo, TelPwd = "", Description = telModel[0].Description, QueueId = telModel[0].QueueId };
+                    return new TrOnDutyResponseDto() { TelNo = telNo, TelPwd = "", Description = telModel[0].Description, QueueId = telModel[0].QueueId,StartTime = work.StartTime };
                 }
                 else
                 {
-                    return new TrOnDutyResponseDto() { TelNo = telNo, TelPwd = telModel[0].Password, Description = telModel[0].Description, QueueId = telModel[0].QueueId };
+                    return new TrOnDutyResponseDto() { TelNo = telNo, TelPwd = telModel[0].Password, Description = telModel[0].Description, QueueId = telModel[0].QueueId,StartTime = work.StartTime };
                 }
             }
             throw UserFriendlyException.SameMessage("签入异常,未查询到对应分机信息");

+ 17 - 0
src/Hotline.Share/Dtos/TrCallCenter/TrTelDao.cs

@@ -78,6 +78,8 @@ namespace Hotline.Share.Dtos.TrCallCenter
 
         public string? Description { get; set; }
         public string? QueueId { get; set; }
+
+        public DateTime StartTime { get; set; }
     }
 
 
@@ -234,6 +236,21 @@ namespace Hotline.Share.Dtos.TrCallCenter
 
     public record class GetCallListDto: PagedRequest
     {
+        /// <summary>
+        /// 开始时间
+        /// </summary>
+        public DateTime? StartTime { get; set; }
+
+        /// <summary>
+        /// 结束时间
+        /// </summary>
+        public DateTime? EndTime { get; set; }
+
+        /// <summary>
+        /// 中继号
+        /// </summary>
+        public string? Gateway { get; set; }
+
         /// <summary>
         /// 主叫
         /// </summary>

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

@@ -27,4 +27,5 @@ public record ReportPagedRequest : PagedKeywordRequest
 	/// 排序规则  0 升序  1 降序
 	/// </summary>
 	public int SortRule { get; set; }
+
 }

+ 6 - 4
src/Hotline/CallCenter/Calls/TrCallRecord.cs

@@ -119,6 +119,11 @@ namespace Hotline.CallCenter.Calls
         /// </summary>
         public string? DtmfType { get; set; }
 
+        /// <summary>
+        /// 通话状态
+        /// </summary>
+        public EOnState OnState { get; set; }
+
         #region 自定义字段
         /// <summary>
         /// 通话时长(挂机时间-接通时间)
@@ -138,10 +143,7 @@ namespace Hotline.CallCenter.Calls
         [SugarColumn(DefaultValue = "0")]
         public int QueueTims { get; set; }
 
-        /// <summary>
-        /// 通话状态
-        /// </summary>
-        public EOnState OnState { get; set; }
+        
         #endregion
     }
 }

+ 1 - 1
src/Hotline/Orders/AiOrderVisit.cs

@@ -34,7 +34,7 @@ namespace Hotline.Orders
         /// <summary>
         /// 现有外呼规则ID
         /// </summary>
-        public string RuleUid { get; set; }
+        public string? RuleUid { get; set; }
 
         /// <summary>
         /// 子表

+ 5 - 1
src/Hotline/Users/Work.cs

@@ -46,6 +46,9 @@ public class Work : CreationModificationEntity
     public string? Description { get; set; }
 
     public string? QueueId { get; set; }
+
+    public string? StaffNo { get; set; }
+
     ///// <summary>
     ///// SignalR.ConnectionId
     ///// </summary>
@@ -57,7 +60,7 @@ public class Work : CreationModificationEntity
 
     }
 
-    public Work(string userId, string name, string telId, string telNo, string? telPwd, string? description, string? queueId)
+    public Work(string userId, string name, string telId, string telNo, string? telPwd, string? description, string? queueId,string? staffNo)
     {
         StartTime = DateTime.Now;
         UserId = userId;
@@ -67,6 +70,7 @@ public class Work : CreationModificationEntity
         TelPwd = telPwd;
         Description = description;
         QueueId = queueId;
+        StaffNo = staffNo;
     }
 
     public Work(string userId, string name, string telId, string telNo)