|
@@ -22,6 +22,7 @@ using Microsoft.AspNetCore.Authorization;
|
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
using Microsoft.IdentityModel.Tokens;
|
|
|
using Newtonsoft.Json;
|
|
|
+using SqlSugar;
|
|
|
using Tr.Sdk;
|
|
|
using Tr.Sdk.Blacklist;
|
|
|
using Tr.Sdk.Tels;
|
|
@@ -124,10 +125,41 @@ namespace Hotline.Api.Controllers
|
|
|
public async Task<IReadOnlyList<TrTelStateDto>> TrQueryTelState([FromQuery] string? state)
|
|
|
{
|
|
|
var tels = await _trClient.QueryTelStateAsync(new QueryTelStateRequest() { State = state }, HttpContext.RequestAborted);
|
|
|
- return _mapper.Map<IReadOnlyList<TrTelStateDto>>(tels.AgentList);
|
|
|
+ var workList = _userCacheManager.GetWorks();
|
|
|
+ var query = from tel in tels.AgentList
|
|
|
+ join works in workList on tel.TelNo equals works.TelNo into workD
|
|
|
+ from work in workD.DefaultIfEmpty()
|
|
|
+ select new TrTelStateDto
|
|
|
+ {
|
|
|
+ Id = tel.Id,
|
|
|
+ TelNo =tel.TelNo,
|
|
|
+ ChannelUUid =tel.ChannelUUid,
|
|
|
+ TelName =tel.TelName,
|
|
|
+ Type = tel.Type,
|
|
|
+ Weight =tel.Weight,
|
|
|
+ Queue = tel.Queue,
|
|
|
+ State = tel.State,
|
|
|
+ OldState = tel.OldState,
|
|
|
+ Device = tel.Device,
|
|
|
+ SipIp = tel.SipIp,
|
|
|
+ PrivateData = tel.PrivateData,
|
|
|
+ SipState = tel.SipState,
|
|
|
+ CreatedAt = tel.CreatedAt,
|
|
|
+ UpdatedAt = tel.UpdatedAt,
|
|
|
+ CallDirection = tel.CallDirection,
|
|
|
+ OtherNumber = tel.OtherNumber,
|
|
|
+ GateWay = tel.GateWay,
|
|
|
+ AnsweredAt = tel.AnsweredAt,
|
|
|
+ WorkUserId = (work != null) ? work.UserId: "",
|
|
|
+ WorkUserName = (work != null) ? work.UserName: "",
|
|
|
+ };
|
|
|
+ var list = query.OrderBy(x=>x.TelNo).OrderByDescending(x=>x.CreatedAt).ToList();
|
|
|
+ return list;// _mapper.Map<IReadOnlyList<TrTelStateDto>>(tels.AgentList);
|
|
|
}
|
|
|
|
|
|
|
|
|
+
|
|
|
+
|
|
|
#endregion
|
|
|
|
|
|
#region 黑白名单
|
|
@@ -426,18 +458,25 @@ namespace Hotline.Api.Controllers
|
|
|
{
|
|
|
model.CallOrderType = ECallOrderType.Order;
|
|
|
model.ExternalId = order.Id;
|
|
|
- // 写入智能质检
|
|
|
- var teAny = await _qualityTemplate.Queryable()
|
|
|
- .LeftJoin<QualityTemplateDetail>((x, d) => x.Id == d.TemplateId)
|
|
|
- .LeftJoin<QualityItem>((x, d, i) => d.ItemId == i.Id)
|
|
|
- .Where((x, d, i) => i.IsIntelligent == 1)
|
|
|
- .Where((x, d, i) => x.Grouping == ETemplateGrouping.Accepted).AnyAsync();
|
|
|
- if (teAny)
|
|
|
+ try
|
|
|
{
|
|
|
- var quality = await _qualiteyRepository.Queryable().Where(x => x.OrderId == order.Id && x.Source == Share.Enums.Quality.EQualitySource.Accepted).FirstAsync();
|
|
|
- var setting = _systemSettingCacheManager.GetSetting(SettingConstants.ViteRecordPrefix);
|
|
|
- await _aiQualityService.CreateAiOrderQualityTask(quality, model, order, setting?.SettingValue[0], HttpContext.RequestAborted);
|
|
|
+ // 写入智能质检
|
|
|
+ var teAny = await _qualityTemplate.Queryable()
|
|
|
+ .LeftJoin<QualityTemplateDetail>((x, d) => x.Id == d.TemplateId)
|
|
|
+ .LeftJoin<QualityItem>((x, d, i) => d.ItemId == i.Id)
|
|
|
+ .Where((x, d, i) => i.IsIntelligent == 1)
|
|
|
+ .Where((x, d, i) => x.Grouping == ETemplateGrouping.Accepted).AnyAsync();
|
|
|
+ if (teAny)
|
|
|
+ {
|
|
|
+ var quality = await _qualiteyRepository.Queryable().Where(x => x.OrderId == order.Id && x.Source == Share.Enums.Quality.EQualitySource.Accepted).FirstAsync();
|
|
|
+ if (quality !=null)
|
|
|
+ {
|
|
|
+ var setting = _systemSettingCacheManager.GetSetting(SettingConstants.ViteRecordPrefix);
|
|
|
+ await _aiQualityService.CreateAiOrderQualityTask(quality, model, order, setting?.SettingValue[0], HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
+ catch{}
|
|
|
}
|
|
|
else
|
|
|
{
|