|
@@ -35,6 +35,7 @@ namespace Hotline.Repository.SqlSugar.Orders
|
|
|
private readonly IRepository<OrderVisitDetail> _orderVisitDetailRepository;
|
|
|
private readonly ISessionContext _sessionContext;
|
|
|
private readonly ISystemSettingCacheManager _systemSettingCacheManager;
|
|
|
+ private readonly IRepository<AiOrderVisitDetail> _aiOrderVisitDetailRepository;
|
|
|
|
|
|
public OrderRepository(ISugarUnitOfWork<HotlineDbContext> uow,
|
|
|
IDataPermissionFilterBuilder dataPermissionFilterBuilder,
|
|
@@ -42,7 +43,8 @@ namespace Hotline.Repository.SqlSugar.Orders
|
|
|
IRepository<OrderVisit> orderVisitRepository,
|
|
|
ISessionContext sessionContext,
|
|
|
IRepository<OrderVisitDetail> orderVisitDetailRepository,
|
|
|
- ISystemSettingCacheManager systemSettingCacheManager
|
|
|
+ ISystemSettingCacheManager systemSettingCacheManager,
|
|
|
+ IRepository<AiOrderVisitDetail> aiOrderVisitDetailRepository
|
|
|
) : base(uow, dataPermissionFilterBuilder)
|
|
|
{
|
|
|
_dataPermissionFilterBuilder = dataPermissionFilterBuilder;
|
|
@@ -51,7 +53,7 @@ namespace Hotline.Repository.SqlSugar.Orders
|
|
|
_sessionContext = sessionContext;
|
|
|
_orderVisitDetailRepository = orderVisitDetailRepository;
|
|
|
_systemSettingCacheManager = systemSettingCacheManager;
|
|
|
-
|
|
|
+ _aiOrderVisitDetailRepository = aiOrderVisitDetailRepository;
|
|
|
}
|
|
|
|
|
|
public async Task<string> AddOrderNavAsync(Order order, CancellationToken cancellationToken)
|
|
@@ -1432,7 +1434,51 @@ namespace Hotline.Repository.SqlSugar.Orders
|
|
|
;
|
|
|
|
|
|
}
|
|
|
- }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 智能回访数据统计
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public async Task<QueryAiVisitStatisticsResp> QueryAiVisitStatistics(QueryAiVisitStatisticsRequest dto)
|
|
|
+ {
|
|
|
+ var list = await _aiOrderVisitDetailRepository.Queryable().Includes(x=>x.OrderVisit).Where(x => x.CreationTime >= dto.StartTime && x.CreationTime <= dto.EndTime && x.OrderVisit.VisitState == EVisitState.Visited).ToListAsync();
|
|
|
+ return new QueryAiVisitStatisticsResp()
|
|
|
+ {
|
|
|
+ AiVisitCount = list.Count,
|
|
|
+ AiVisitSuccessCount = list.Where(x=>x.OrderVisit.IsEffectiveAiVisit==true).Count(), // SqlFunc.AggregateSum(SqlFunc.IIF(x.OrderVisit.IsEffectiveAiVisit == true, 1, 0)),
|
|
|
+ AiVisitArtificialReviewCount = list.Where(x => x.OrderVisit.IsEffectiveAiVisit == false).Count(),
|
|
|
+ AiVisitCallReviewCount = list.Where(x=> x.OrderVisit.IsEffectiveAiVisit == false && !string.IsNullOrEmpty(x.OrderVisit.CallId)).Count(),
|
|
|
+ AiVisitHandReviewCount = list.Where(x=>x.OrderVisit.IsEffectiveAiVisit == false && string.IsNullOrEmpty(x.OrderVisit.CallId)).Count()
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 智能回访有效性分析
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public async Task<QueryAiVisitEffectiveAnalysisResp> QueryAiVisitEffectiveAnalysis(QueryAiVisitStatisticsRequest dto)
|
|
|
+ {
|
|
|
+ var list = await _aiOrderVisitDetailRepository.Queryable().Includes(x => x.OrderVisit).Where(x => x.CreationTime >= dto.StartTime && x.CreationTime <= dto.EndTime && x.OrderVisit.VisitState == EVisitState.Visited).ToListAsync();
|
|
|
+ return new QueryAiVisitEffectiveAnalysisResp()
|
|
|
+ {
|
|
|
+ AiVisitCount = list.Count,
|
|
|
+ AiVisitSuccessCount =list.Where(x=> x.OrderVisit.IsEffectiveAiVisit == true).Count(),
|
|
|
+ AiVisitCallTwoFailCount = list.Where(x=> x.CallTimes>=1 && x.AiIsContact ==null && x.AiVolved ==null && (x.AiOrgProcessingResults == null || x.AiOrgProcessingResults.Key == null)).Count(),
|
|
|
+ AiVisitHaveOneAnswerCount = list.Where(x=>x.OrderVisit.IsEffectiveAiVisit == false &&
|
|
|
+ (x.AiIsContact!= null && x.AiVolved==null && (x.AiOrgProcessingResults == null || x.AiOrgProcessingResults.Key == null)) ||
|
|
|
+ (x.AiIsContact == null && x.AiVolved != null && (x.AiOrgProcessingResults == null || x.AiOrgProcessingResults.Key == null)) ||
|
|
|
+ (x.AiIsContact == null && x.AiVolved == null && (x.AiOrgProcessingResults != null || x.AiOrgProcessingResults.Key != null))).Count(), //只有一个答案
|
|
|
+ AiVisitHaveTwoAnswerCount = list.Where(x=> x.OrderVisit.IsEffectiveAiVisit == false &&
|
|
|
+ (x.AiIsContact != null && x.AiVolved != null && (x.AiOrgProcessingResults == null || x.AiOrgProcessingResults.Key == null)) ||
|
|
|
+ (x.AiIsContact != null && x.AiVolved == null && (x.AiOrgProcessingResults != null || x.AiOrgProcessingResults.Key != null)) ||
|
|
|
+ (x.AiIsContact == null && x.AiVolved != null && (x.AiOrgProcessingResults != null || x.AiOrgProcessingResults.Key != null))).Count(),//只有两个答案
|
|
|
+ AiVisitHaveThreeAnswerCount = list.Where(x=> x.OrderVisit.IsEffectiveAiVisit == false && x.AiIsContact != null && x.AiVolved != null && (x.AiOrgProcessingResults != null || x.AiOrgProcessingResults.Key != null)).Count()//有三个答案
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
public class OrderScreenRepository : BaseRepositoryWorkflow<OrderScreen>, IOrderScreenRepository, IScopeDependency
|
|
|
{
|