|
@@ -53,7 +53,7 @@ namespace Hotline.Api.Controllers
|
|
|
private readonly IRepository<QualityTemplate> _qualityTemplate;
|
|
|
|
|
|
|
|
|
- public IPPbxController(ITrClient trClient, IMapper mapper, IUserDomainService userDomainService,
|
|
|
+ public IPPbxController(ITrClient trClient, IMapper mapper, IUserDomainService userDomainService,
|
|
|
ISessionContext sessionContext, IRepository<TrCallRecord> trCallRecordRepository,
|
|
|
ITrApplication trApplication, IRepository<TrCallEvaluate> trCallRecord,
|
|
|
ISystemDicDataCacheManager systemDicDataCacheManager, ILogger<IPPbxController> logger,
|
|
@@ -81,8 +81,8 @@ namespace Hotline.Api.Controllers
|
|
|
_telApplication = telApplication;
|
|
|
_qualiteyRepository = qualiteyRepository;
|
|
|
_aiQualityService = aiQualityService;
|
|
|
- _qualityTemplate = qualityTemplate;
|
|
|
- }
|
|
|
+ _qualityTemplate = qualityTemplate;
|
|
|
+ }
|
|
|
|
|
|
#region 添添呼
|
|
|
|
|
@@ -310,16 +310,16 @@ namespace Hotline.Api.Controllers
|
|
|
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)
|
|
|
+ .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();
|
|
|
- await _aiQualityService.CreateAiOrderQualityTask(quality, model, order, HttpContext.RequestAborted);
|
|
|
- }
|
|
|
- }
|
|
|
+ var quality = await _qualiteyRepository.Queryable().Where(x => x.OrderId == order.Id && x.Source == Share.Enums.Quality.EQualitySource.Accepted).FirstAsync();
|
|
|
+ await _aiQualityService.CreateAiOrderQualityTask(quality, model, order, HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+ }
|
|
|
else
|
|
|
{
|
|
|
var orderVisit = await _orderVisitRepository.GetAsync(x => x.CallId == model.CallAccept, HttpContext.RequestAborted);
|
|
@@ -390,14 +390,25 @@ namespace Hotline.Api.Controllers
|
|
|
public async Task<PagedDto<TrCallDto>> GetCallList([FromQuery] GetCallListDto dto)
|
|
|
{
|
|
|
var (total, items) = await _trCallRecordRepository.Queryable()
|
|
|
- .Includes(x=>x.Order)
|
|
|
+ .Includes(x => x.Order)
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.CPN), x => x.CPN.Contains(dto.CPN))
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.CDPN), x => x.CDPN.Contains(dto.CDPN))
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.TelNo), x => x.TelNo.Contains(dto.TelNo))
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.UserName), x => x.UserName.Contains(dto.UserName))
|
|
|
.WhereIF(dto.CallDirection != null, x => x.CallDirection == dto.CallDirection)
|
|
|
.WhereIF(dto.OnState != null, x => x.OnState == dto.OnState)
|
|
|
+ .WhereIF(dto.EndBy != null, x => x.EndBy == dto.EndBy)
|
|
|
+ .WhereIF(dto.BeginIvrTime.HasValue, x => x.BeginIvrTime >= dto.BeginIvrTime)
|
|
|
+ .WhereIF(dto.EndIvrTime.HasValue, x => x.EndIvrTime <= dto.EndIvrTime)
|
|
|
+ .WhereIF(dto.BeginQueueTime.HasValue, x => x.BeginQueueTime >= dto.BeginQueueTime)
|
|
|
+ .WhereIF(dto.EndQueueTime.HasValue, x => x.EndQueueTime <= dto.EndQueueTime)
|
|
|
+ .WhereIF(dto.AnsweredTime.HasValue, x => x.AnsweredTime >= dto.AnsweredTime)
|
|
|
+ .WhereIF(dto.OverTime.HasValue, x => x.OverTime <= dto.OverTime)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.OrderNo), x => x.Order.No.Contains(dto.UserName))
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.Title), x => x.Order.Title.Contains(dto.UserName))
|
|
|
.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)
|
|
|
+ // .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));
|
|
@@ -414,6 +425,7 @@ namespace Hotline.Api.Controllers
|
|
|
{
|
|
|
OnState = EnumExts.GetDescriptions<EOnState>(),
|
|
|
CallDirection = EnumExts.GetDescriptions<ECallDirection>(),
|
|
|
+ EndBy = EnumExts.GetDescriptions<EEndBy>(),
|
|
|
};
|
|
|
}
|
|
|
|
|
@@ -467,8 +479,14 @@ namespace Hotline.Api.Controllers
|
|
|
var trRecord = await _trCallRecordRepository.GetAsync(x => x.CallAccept == dto.CallId, HttpContext.RequestAborted);
|
|
|
if (dto.IsOrder)
|
|
|
{
|
|
|
+ if (trRecord.CallOrderType == ECallOrderType.Order && !string.IsNullOrEmpty(trRecord.ExternalId))
|
|
|
+ throw UserFriendlyException.SameMessage("通话记录已经关联工单");
|
|
|
+
|
|
|
//工单
|
|
|
var order = await _orderRepository.GetAsync(x => x.Id == dto.Id, HttpContext.RequestAborted);
|
|
|
+ if (!string.IsNullOrEmpty(order.CallId))
|
|
|
+ throw UserFriendlyException.SameMessage("通话记录已经关联工单");
|
|
|
+
|
|
|
order.CallId = dto.CallId;
|
|
|
await _orderRepository.UpdateAsync(order, HttpContext.RequestAborted);
|
|
|
trRecord.CallOrderType = ECallOrderType.Order;
|