|
@@ -1,21 +1,19 @@
|
|
|
-using DataSharing.HotlineWeb;
|
|
|
-using DataSharing.Province;
|
|
|
+using DataSharing.Common;
|
|
|
+using DataSharing.HotlineWeb;
|
|
|
using DataSharing.RawData;
|
|
|
using DataSharing.SendTask;
|
|
|
using DataSharing.Share.Consts;
|
|
|
+using DataSharing.Share.Dtos.Common;
|
|
|
using DataSharing.Share.Dtos.HotlineWeb;
|
|
|
-using DataSharing.Share.Dtos.Province;
|
|
|
-using DataSharing.Share.Dtos.Province.HuiJu;
|
|
|
+using DataSharing.Share.Dtos.WebPortal;
|
|
|
+using DataSharing.Share.Requests;
|
|
|
using DotNetCore.CAP;
|
|
|
using Hotline.Share.Dtos;
|
|
|
-using Hotline.Share.Dtos.Knowledge;
|
|
|
using MapsterMapper;
|
|
|
using MediatR;
|
|
|
using Microsoft.AspNetCore.Authorization;
|
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
-using Newtonsoft.Json;
|
|
|
using SqlSugar;
|
|
|
-using System.Security.Permissions;
|
|
|
using XF.Domain.Cache;
|
|
|
using XF.Domain.Repository;
|
|
|
|
|
@@ -30,10 +28,27 @@ namespace DataSharing.Host.Controllers
|
|
|
private readonly IRepository<DsTelCall> _dsTelCallRepository;
|
|
|
private readonly IRepository<DsSendTask> _taskRepository;
|
|
|
private readonly IRepository<DsSendTaskInfo> _taskInfoRepository;
|
|
|
- private readonly IPusherProviderService _pusherProviderService;
|
|
|
private readonly IRepository<ConfigurationInformation> _configurationInformationRepository;
|
|
|
private readonly ITypedCache<ConfigurationInformationDto> _configurationInformationCache;
|
|
|
+ private readonly IRepository<DsOrderVisitSend> _dsOrderVisitSendRepository;
|
|
|
+ private readonly IRepository<DsKnowledgeRawData> _knowledgeRawDataRepository;
|
|
|
+ private readonly IRepository<DsUserTokenInfo> _dsUserTokenInfoRepository;
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ ///
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="mapper"></param>
|
|
|
+ /// <param name="mediator"></param>
|
|
|
+ /// <param name="capPublisher"></param>
|
|
|
+ /// <param name="dsOrderRepository"></param>
|
|
|
+ /// <param name="dsTelCallRepository"></param>
|
|
|
+ /// <param name="taskRepository"></param>
|
|
|
+ /// <param name="taskInfoRepository"></param>
|
|
|
+ /// <param name="configurationInformationRepository"></param>
|
|
|
+ /// <param name="configurationInformationCache"></param>
|
|
|
+ /// <param name="dsOrderVisitSendRepository"></param>
|
|
|
+ /// <param name="knowledgeRawDataRepository"></param>
|
|
|
+ /// <param name="dsUserTokenInfoRepository"></param>
|
|
|
public HotlineWebController(IMapper mapper,
|
|
|
IMediator mediator,
|
|
|
ICapPublisher capPublisher,
|
|
@@ -41,9 +56,11 @@ namespace DataSharing.Host.Controllers
|
|
|
IRepository<DsTelCall> dsTelCallRepository,
|
|
|
IRepository<DsSendTask> taskRepository,
|
|
|
IRepository<DsSendTaskInfo> taskInfoRepository,
|
|
|
- IPusherProviderService pusherProviderService,
|
|
|
- IRepository<ConfigurationInformation> configurationInformationRepository,
|
|
|
- ITypedCache<ConfigurationInformationDto> configurationInformationCache
|
|
|
+ IRepository<ConfigurationInformation> configurationInformationRepository,
|
|
|
+ ITypedCache<ConfigurationInformationDto> configurationInformationCache,
|
|
|
+ IRepository<DsOrderVisitSend> dsOrderVisitSendRepository,
|
|
|
+ IRepository<DsKnowledgeRawData> knowledgeRawDataRepository,
|
|
|
+ IRepository<DsUserTokenInfo> dsUserTokenInfoRepository
|
|
|
)
|
|
|
{
|
|
|
_mapper = mapper;
|
|
@@ -53,11 +70,14 @@ namespace DataSharing.Host.Controllers
|
|
|
_dsTelCallRepository = dsTelCallRepository;
|
|
|
_taskRepository = taskRepository;
|
|
|
_taskInfoRepository = taskInfoRepository;
|
|
|
- _pusherProviderService = pusherProviderService;
|
|
|
_configurationInformationRepository = configurationInformationRepository;
|
|
|
_configurationInformationCache = configurationInformationCache;
|
|
|
+ _dsOrderVisitSendRepository = dsOrderVisitSendRepository;
|
|
|
+ _knowledgeRawDataRepository = knowledgeRawDataRepository;
|
|
|
+ _dsUserTokenInfoRepository = dsUserTokenInfoRepository;
|
|
|
}
|
|
|
|
|
|
+ #region 数据推送查询统计
|
|
|
/// <summary>
|
|
|
/// 查询推送任务
|
|
|
/// </summary>
|
|
@@ -65,20 +85,19 @@ namespace DataSharing.Host.Controllers
|
|
|
/// <returns></returns>
|
|
|
[HttpGet("getdssendtask")]
|
|
|
[AllowAnonymous]
|
|
|
- public async Task<PagedDto<DsSendTask>> GetDsSendTask([FromQuery] QuerySendTaskDto dto)
|
|
|
+ public async Task<PagedDto<DsSendTaskDto>> GetDsSendTask([FromQuery] QuerySendTaskDto dto)
|
|
|
{
|
|
|
//数据查询
|
|
|
RefAsync<int> total = 0;
|
|
|
var items = await _taskRepository.Queryable()
|
|
|
.WhereIF(dto.StartTime.HasValue, p => p.CreationTime >= dto.StartTime)
|
|
|
.WhereIF(dto.EndTime.HasValue, p => p.CreationTime <= dto.EndTime)
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.id), p => p.Id == dto.id)
|
|
|
- .WhereIF(dto.type == "1", p => p.IsSuccess == true)
|
|
|
- .WhereIF(dto.type == "2", p => p.IsSuccess == false)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.Id), p => p.Id == dto.Id)
|
|
|
+ .WhereIF(dto.IsSuccess.HasValue, p => p.IsSuccess == dto.IsSuccess)
|
|
|
.OrderByDescending(p => p.CreationTime)
|
|
|
.ToPageListAsync(dto.PageIndex, dto.PageSize, total, HttpContext.RequestAborted);
|
|
|
|
|
|
- return new PagedDto<DsSendTask>(total, items);
|
|
|
+ return new PagedDto<DsSendTaskDto>(total, _mapper.Map<List<DsSendTaskDto>>(items));
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -95,9 +114,9 @@ namespace DataSharing.Host.Controllers
|
|
|
var items = await _taskInfoRepository.Queryable()
|
|
|
.WhereIF(dto.StartTime.HasValue, p => p.CreationTime >= dto.StartTime)
|
|
|
.WhereIF(dto.EndTime.HasValue, p => p.CreationTime <= dto.EndTime)
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.id), p => p.TaskId == dto.id)
|
|
|
- .WhereIF(dto.type == "1", p => p.IsSuccess == true)
|
|
|
- .WhereIF(dto.type == "2", p => p.IsSuccess == false)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.Id), p => p.TaskId == dto.Id)
|
|
|
+ .WhereIF(dto.IsSuccess.HasValue, p => p.IsSuccess == dto.IsSuccess)
|
|
|
+ .OrderByDescending(p => p.CreationTime)
|
|
|
.ToPageListAsync(dto.PageIndex, dto.PageSize, total, HttpContext.RequestAborted);
|
|
|
return new PagedDto<DsSendTaskInfo>(total, items);
|
|
|
}
|
|
@@ -112,32 +131,13 @@ namespace DataSharing.Host.Controllers
|
|
|
public async Task FromNewTaskSend(string id)
|
|
|
{
|
|
|
var dto = await _taskRepository.GetAsync(p => p.Id == id, HttpContext.RequestAborted);
|
|
|
- await _pusherProviderService.SendProvinceDataPusher(dto, HttpContext.RequestAborted);
|
|
|
- }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 根据ID从新推送
|
|
|
- /// </summary>
|
|
|
- /// <param name="id">推送任务Id</param>
|
|
|
- /// <returns></returns>
|
|
|
- [HttpGet("updatetasksend")]
|
|
|
- [AllowAnonymous]
|
|
|
- public async Task UpdateTaskSend(string id)
|
|
|
- {
|
|
|
- var dto = await _taskRepository.GetAsync(p => p.Id == id, HttpContext.RequestAborted);
|
|
|
- var dataOrder = System.Text.Json.JsonSerializer.Deserialize<SendRequestSubmitCaseInfo>(dto.Request, ProvinceJsonSerializerOptions.UnStandardDatetimeJsonOptions);
|
|
|
- if (dataOrder != null)
|
|
|
+ if (dto != null)
|
|
|
{
|
|
|
- if (dataOrder.Data != null && dataOrder.Data.Items != null && dataOrder.Data.Items.Count > 0)
|
|
|
- {
|
|
|
- var data = dataOrder.Data.Items[0].ToString();
|
|
|
- ///ProvinceJsonSerializerOptions.UnStandardDatetimeJsonOptions
|
|
|
- var temp = JsonConvert.DeserializeObject<SubmitCaseInfo>(data);
|
|
|
-
|
|
|
- var ttt = System.Text.Json.JsonSerializer.Deserialize<SubmitCaseInfo>(data, ProvinceJsonSerializerOptions.UnStandardDatetimeJsonOptions);
|
|
|
- }
|
|
|
+ dto.IsSuccess = false;
|
|
|
+ dto.SendTimes = 1;
|
|
|
+ await _taskRepository.UpdateAsync(dto, HttpContext.RequestAborted);
|
|
|
}
|
|
|
- //await _pusherProviderService.SendProvinceDataPusher(dto, HttpContext.RequestAborted);
|
|
|
+ // await _pusherProviderService.SendProvinceDataPusher(dto, HttpContext.RequestAborted);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -152,7 +152,7 @@ namespace DataSharing.Host.Controllers
|
|
|
var dto = await _taskRepository.GetAsync(p => p.Id == id, HttpContext.RequestAborted);
|
|
|
if (dto != null)
|
|
|
{
|
|
|
- dto.IsSuccess = true;
|
|
|
+ dto.SendTimes = 7;
|
|
|
await _taskRepository.UpdateAsync(dto, HttpContext.RequestAborted);
|
|
|
}
|
|
|
}
|
|
@@ -160,14 +160,19 @@ namespace DataSharing.Host.Controllers
|
|
|
/// <summary>
|
|
|
/// 查询工单及时上传列表
|
|
|
/// </summary>
|
|
|
- /// <param name="StartDate"></param>
|
|
|
- /// <param name="EndDate"></param>
|
|
|
- /// <param name="Type">查询类型:1查及时上传,其他查未及时</param>
|
|
|
+ /// <param name="dto"></param>
|
|
|
/// <returns></returns>
|
|
|
[HttpGet("getorderlist")]
|
|
|
[AllowAnonymous]
|
|
|
public async Task<PagedDto<DsOrder>> GetOrderlist([FromQuery] QuerySendTaskDto dto)
|
|
|
{
|
|
|
+ if (!dto.StartTime.HasValue)
|
|
|
+ dto.StartTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 00:00:00"));
|
|
|
+ if (!dto.EndTime.HasValue)
|
|
|
+ dto.EndTime = dto.StartTime.Value.AddDays(1).AddSeconds(-1);
|
|
|
+ else
|
|
|
+ dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
|
|
|
+
|
|
|
//数据查询
|
|
|
RefAsync<int> total = 0;
|
|
|
var items = await _dsOrderRepository.Queryable()
|
|
@@ -198,7 +203,8 @@ namespace DataSharing.Host.Controllers
|
|
|
p.HotspotSpliceName,
|
|
|
p.ExpiredTime,
|
|
|
p.CaseType,
|
|
|
- p.CaseTypeCode
|
|
|
+ p.CaseTypeCode,
|
|
|
+ p.CreationTime
|
|
|
})
|
|
|
.MergeTable()
|
|
|
.Select(p => new
|
|
@@ -225,10 +231,12 @@ namespace DataSharing.Host.Controllers
|
|
|
p.HotspotSpliceName,
|
|
|
p.ExpiredTime,
|
|
|
p.CaseType,
|
|
|
- p.CaseTypeCode
|
|
|
+ p.CaseTypeCode,
|
|
|
+ p.CreationTime
|
|
|
})
|
|
|
- .WhereIF(dto.type == "1", p => SqlFunc.DateDiff(DateType.Second, p.StartTime.Value, p.FirstSendProvinceTime.Value) <= 180)
|
|
|
- .WhereIF(dto.type != "1", p => SqlFunc.DateDiff(DateType.Second, p.StartTime.Value, p.FirstSendProvinceTime.Value) > 180)
|
|
|
+ .WhereIF(dto.IsSuccess.HasValue && dto.IsSuccess == true, p => SqlFunc.DateDiff(DateType.Second, p.StartTime.Value, p.FirstSendProvinceTime.Value) <= 180)//及时上传
|
|
|
+ .WhereIF(dto.IsSuccess.HasValue && dto.IsSuccess == false, p => SqlFunc.DateDiff(DateType.Second, p.StartTime.Value, p.FirstSendProvinceTime.Value) > 180)//不及时上传
|
|
|
+ .OrderByDescending(p => p.CreationTime)
|
|
|
.ToPageListAsync(dto.PageIndex, dto.PageSize, total, HttpContext.RequestAborted);
|
|
|
return new PagedDto<DsOrder>(total, _mapper.Map<IReadOnlyList<DsOrder>>(items));
|
|
|
}
|
|
@@ -236,14 +244,19 @@ namespace DataSharing.Host.Controllers
|
|
|
/// <summary>
|
|
|
/// 查询通话记录及时上传列表
|
|
|
/// </summary>
|
|
|
- /// <param name="StartDate"></param>
|
|
|
- /// <param name="EndDate"></param>
|
|
|
- /// <param name="Type">查询类型:1查及时上传,其他查未及时</param>
|
|
|
+ /// <param name="dto"></param>
|
|
|
/// <returns></returns>
|
|
|
[HttpGet("getcalllist")]
|
|
|
[AllowAnonymous]
|
|
|
public async Task<PagedDto<DsTelCall>> GetCalllist([FromQuery] QuerySendTaskDto dto)
|
|
|
{
|
|
|
+ if (!dto.StartTime.HasValue)
|
|
|
+ dto.StartTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 00:00:00"));
|
|
|
+ if (!dto.EndTime.HasValue)
|
|
|
+ dto.EndTime = dto.StartTime.Value.AddDays(1).AddSeconds(-1);
|
|
|
+ else
|
|
|
+ dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
|
|
|
+
|
|
|
RefAsync<int> total = 0;
|
|
|
var items = await _dsTelCallRepository.Queryable()
|
|
|
.Where(p => p.CreationTime >= dto.StartTime && p.CreationTime <= dto.EndTime)
|
|
@@ -273,8 +286,8 @@ namespace DataSharing.Host.Controllers
|
|
|
p.ProvinceNo,
|
|
|
p.FirstSendProvinceTime,
|
|
|
p.LastSendProvinceTime,
|
|
|
- p.TaskId
|
|
|
-
|
|
|
+ p.TaskId,
|
|
|
+ p.CreationTime
|
|
|
})
|
|
|
.MergeTable()
|
|
|
.Select(p => new
|
|
@@ -301,11 +314,13 @@ namespace DataSharing.Host.Controllers
|
|
|
p.ProvinceNo,
|
|
|
p.FirstSendProvinceTime,
|
|
|
p.LastSendProvinceTime,
|
|
|
- p.TaskId
|
|
|
+ p.TaskId,
|
|
|
+ p.CreationTime
|
|
|
|
|
|
})
|
|
|
- .WhereIF(dto.type == "1", p => SqlFunc.DateDiff(DateType.Second, p.OverTime.Value, p.FirstSendProvinceTime.Value) <= 180)
|
|
|
- .WhereIF(dto.type != "1", p => SqlFunc.DateDiff(DateType.Second, p.OverTime.Value, p.FirstSendProvinceTime.Value) > 180)
|
|
|
+ .WhereIF(dto.IsSuccess.HasValue && dto.IsSuccess == true, p => SqlFunc.DateDiff(DateType.Second, p.OverTime.Value, p.FirstSendProvinceTime.Value) <= 180)//及时
|
|
|
+ .WhereIF(dto.IsSuccess.HasValue && dto.IsSuccess == false, p => SqlFunc.DateDiff(DateType.Second, p.OverTime.Value, p.FirstSendProvinceTime.Value) > 180)//不及时
|
|
|
+ .OrderByDescending(p => p.CreationTime)
|
|
|
.ToPageListAsync(dto.PageIndex, dto.PageSize, total, HttpContext.RequestAborted);
|
|
|
return new PagedDto<DsTelCall>(total, _mapper.Map<IReadOnlyList<DsTelCall>>(items));
|
|
|
|
|
@@ -314,24 +329,30 @@ namespace DataSharing.Host.Controllers
|
|
|
/// <summary>
|
|
|
/// 查询没匹配到通话记录的电话来源工单
|
|
|
/// </summary>
|
|
|
- /// <param name="StartDate"></param>
|
|
|
- /// <param name="EndDate"></param>
|
|
|
+ /// <param name="dto"></param>
|
|
|
/// <returns></returns>
|
|
|
[HttpGet("getordermatchingcall")]
|
|
|
[AllowAnonymous]
|
|
|
- public async Task<List<DsOrder>> GetOrderMatchingCall(DateTime StartDate, DateTime EndDate)
|
|
|
+ public async Task<PagedDto<DsOrder>> GetOrderMatchingCall([FromQuery] QuerySendTaskDto dto)
|
|
|
{
|
|
|
- EndDate = EndDate.AddDays(1).AddSeconds(-1);
|
|
|
+ if (!dto.StartTime.HasValue)
|
|
|
+ dto.StartTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 00:00:00"));
|
|
|
+ if (!dto.EndTime.HasValue)
|
|
|
+ dto.EndTime = dto.StartTime.Value.AddDays(1).AddSeconds(-1);
|
|
|
+ else
|
|
|
+ dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
|
|
|
+
|
|
|
+ RefAsync<int> total = 0;
|
|
|
|
|
|
var items = await _dsOrderRepository.Queryable()
|
|
|
- .LeftJoin<DsTelCall>((p, o) => p.ProvinceNo == o.ProvinceNo)
|
|
|
- .Where((p, o) => p.CreationTime >= StartDate && p.CreationTime <= EndDate)
|
|
|
- .Where((p, o) => p.CaseSourceCode == "RGDH")
|
|
|
+ .LeftJoin<DsTelCall>((p, o) => p.CallId == o.CallId)
|
|
|
+ .Where((p, o) => p.FirstSendProvinceTime >= dto.StartTime && p.FirstSendProvinceTime <= dto.EndTime && p.CaseSourceCode == "RGDH")
|
|
|
.Where((p, o) => p.FirstSendProvinceTime.HasValue)
|
|
|
- .Where((p, o) => o.ProvinceNo == null)
|
|
|
- .ToListAsync();
|
|
|
+ .Where((p, o) => o.CallId == null)
|
|
|
+ .OrderByDescending((p, o) => p.CreationTime)
|
|
|
+ .ToPageListAsync(dto.PageIndex, dto.PageSize, total, HttpContext.RequestAborted);
|
|
|
|
|
|
- return items;
|
|
|
+ return new PagedDto<DsOrder>(total, _mapper.Map<IReadOnlyList<DsOrder>>(items));
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -344,10 +365,14 @@ namespace DataSharing.Host.Controllers
|
|
|
[AllowAnonymous]
|
|
|
public async Task<CalculateUploadRateDto> CalculateUploadRate(DateTime StartDate, DateTime EndDate)
|
|
|
{
|
|
|
+ EndDate = EndDate.AddDays(1).AddSeconds(-1);
|
|
|
+
|
|
|
+ CalculateUploadRateDto calculateUploadRateDto = new();
|
|
|
+
|
|
|
//工单
|
|
|
var orderRate = await _dsOrderRepository.Queryable()
|
|
|
- .LeftJoin<DsTelCall>((p, o) => p.ProvinceNo == o.ProvinceNo)
|
|
|
- .Where((p, o) => p.CreationTime >= StartDate && p.CreationTime <= EndDate)
|
|
|
+ .LeftJoin<DsTelCall>((p, o) => p.CallId == o.CallId)
|
|
|
+ .Where((p, o) => p.CreationTime >= StartDate && p.CreationTime <= EndDate && p.FirstSendProvinceTime >= StartDate && p.FirstSendProvinceTime <= EndDate)
|
|
|
.Where((p, o) => p.FirstSendProvinceTime.HasValue)
|
|
|
.Where((p, o) => p.StartTime.HasValue)
|
|
|
.Select((p, o) => new
|
|
@@ -356,7 +381,10 @@ namespace DataSharing.Host.Controllers
|
|
|
p.StartTime,
|
|
|
p.FirstSendProvinceTime,
|
|
|
p.CaseSourceCode,
|
|
|
- o.ProvinceNo
|
|
|
+ o.CallId,
|
|
|
+ p.HandleState,
|
|
|
+ p.ExpiredTime,
|
|
|
+ p.ActualHandleTime
|
|
|
}).MergeTable()
|
|
|
.Select(p => new CalculateUploadRateDto
|
|
|
{
|
|
@@ -365,33 +393,76 @@ namespace DataSharing.Host.Controllers
|
|
|
OrderNotTimely = SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.DateDiff(DateType.Second, p.StartTime.Value, p.FirstSendProvinceTime.Value) > 180, 1, 0)),//为及时
|
|
|
|
|
|
RGDHOrderCount = SqlFunc.AggregateSum(SqlFunc.IIF(p.CaseSourceCode == "RGDH", 1, 0)),
|
|
|
- ContainTel = SqlFunc.AggregateSum(SqlFunc.IIF(p.CaseSourceCode == "RGDH" && p.ProvinceNo != null, 1, 0)),//匹配数
|
|
|
- NotContainTel = SqlFunc.AggregateSum(SqlFunc.IIF(p.CaseSourceCode == "RGDH" && p.ProvinceNo == null, 1, 0)),//未匹配数
|
|
|
+ ContainTel = SqlFunc.AggregateSum(SqlFunc.IIF(p.CaseSourceCode == "RGDH" && p.CallId != null, 1, 0)),//匹配数
|
|
|
+ NotContainTel = SqlFunc.AggregateSum(SqlFunc.IIF(p.CaseSourceCode == "RGDH" && p.CallId == null, 1, 0)),//未匹配数
|
|
|
+
|
|
|
+ HandleEndOrderNum = SqlFunc.AggregateSum(SqlFunc.IIF(p.HandleState == "办理完成", 1, 0)),//办结件数
|
|
|
+ HandleEndOrderOnTime = SqlFunc.AggregateSum(SqlFunc.IIF(p.HandleState == "办理完成" && p.ExpiredTime < p.ActualHandleTime, 1, 0)),//按时办结件数
|
|
|
})
|
|
|
.ToListAsync();
|
|
|
|
|
|
///电话
|
|
|
var callRate = await _dsTelCallRepository.Queryable()
|
|
|
- .Where(p => p.CreationTime >= StartDate && p.CreationTime <= EndDate)
|
|
|
+ .Where(p => p.OverTime >= StartDate && p.OverTime <= EndDate && p.FirstSendProvinceTime >= StartDate && p.FirstSendProvinceTime <= EndDate)
|
|
|
.Where(p => p.FirstSendProvinceTime.HasValue)
|
|
|
.Where(p => p.OverTime.HasValue)
|
|
|
.Select(p => new
|
|
|
{
|
|
|
p.CallId,
|
|
|
p.OverTime,
|
|
|
- p.FirstSendProvinceTime
|
|
|
+ p.FirstSendProvinceTime,
|
|
|
+ p.OnState
|
|
|
})
|
|
|
.MergeTable()
|
|
|
.Select(p => new CalculateUploadRateDto
|
|
|
{
|
|
|
- TelCountNum = SqlFunc.AggregateSum(SqlFunc.IIF(p.CallId != null, 1, 0)),//总工单数
|
|
|
+ TelCountNum = SqlFunc.AggregateSum(SqlFunc.IIF(p.CallId != null, 1, 0)),//总电话数
|
|
|
TelTimely = SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.DateDiff(DateType.Second, p.OverTime.Value, p.FirstSendProvinceTime.Value) <= 180, 1, 0)),//及时
|
|
|
TelNotTimely = SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.DateDiff(DateType.Second, p.OverTime.Value, p.FirstSendProvinceTime.Value) > 180, 1, 0)),//为及时
|
|
|
+ TelConnectCountNum = SqlFunc.AggregateSum(SqlFunc.IIF(p.OnState == "1", 1, 0)),//接通数量
|
|
|
+ TelNotConnectCountNum = SqlFunc.AggregateSum(SqlFunc.IIF(p.OnState != "1", 1, 0)),//未接通数量
|
|
|
+
|
|
|
})
|
|
|
.ToListAsync();
|
|
|
|
|
|
- CalculateUploadRateDto calculateUploadRateDto = new CalculateUploadRateDto();
|
|
|
+ //回访
|
|
|
+ var visitList = await _dsOrderVisitSendRepository.Queryable()
|
|
|
+ .Where(p => p.VisitTime >= StartDate && p.VisitTime <= EndDate && p.IsProvince == false && p.FirstSendProvinceTime >= StartDate && p.FirstSendProvinceTime <= EndDate)
|
|
|
+ .Select(p => new
|
|
|
+ {
|
|
|
+ p.SubjectResultSatifyCode,
|
|
|
+ p.VisitTime,
|
|
|
+ p.IsProvince,
|
|
|
+ p.Source,
|
|
|
+ p.ProvinceNo
|
|
|
+ })
|
|
|
+ .MergeTable()
|
|
|
+ .Select(p => new CalculateUploadRateDto
|
|
|
+ {
|
|
|
+ VisitCountNum = SqlFunc.AggregateSum(SqlFunc.IIF(p.SubjectResultSatifyCode != null, 1, 0)),//回访总量
|
|
|
+ SatisfactionCountNum = SqlFunc.AggregateSum(SqlFunc.IIF(p.SubjectResultSatifyCode != null && p.SubjectResultSatifyCode != "2", 1, 0)),//满意数量
|
|
|
+ NotSatisfiedCountNum = SqlFunc.AggregateSum(SqlFunc.IIF(p.SubjectResultSatifyCode != null && p.SubjectResultSatifyCode == "2", 1, 0)),//不满意数量
|
|
|
+ })
|
|
|
+ .ToListAsync();
|
|
|
+
|
|
|
+ //查询知识总量
|
|
|
+ calculateUploadRateDto.KnowledgeCount = await _knowledgeRawDataRepository.Queryable()
|
|
|
+ .Where(p => p.CreationTime >= StartDate && p.CreationTime <= EndDate)
|
|
|
+ .CountAsync();
|
|
|
+
|
|
|
+ //修改知识库量-以第一次上传成功的记录为准
|
|
|
+ calculateUploadRateDto.UpdateKnowledgeCount = await _taskRepository.Queryable()
|
|
|
+ .Where(p => p.FirstTime >= StartDate && p.FirstTime <= EndDate && p.TaskType == "GetKnowledgeInfoUpdate")
|
|
|
+ .Select(p => new
|
|
|
+ {
|
|
|
+ p.Id,
|
|
|
+ RowID = SqlFunc.RowNumber($"{p.CreationTime} asc ")
|
|
|
+ })
|
|
|
+ .MergeTable()
|
|
|
+ .Where(p => p.RowID == 1)
|
|
|
+ .CountAsync();
|
|
|
|
|
|
+ //工单
|
|
|
if (orderRate != null && orderRate.Count > 0)
|
|
|
{
|
|
|
var orderRateData = orderRate[0];
|
|
@@ -401,19 +472,34 @@ namespace DataSharing.Host.Controllers
|
|
|
calculateUploadRateDto.RGDHOrderCount = orderRateData.RGDHOrderCount;
|
|
|
calculateUploadRateDto.ContainTel = orderRateData.ContainTel;
|
|
|
calculateUploadRateDto.NotContainTel = orderRateData.NotContainTel;
|
|
|
+ calculateUploadRateDto.HandleEndOrderNum = orderRateData.HandleEndOrderNum;
|
|
|
+ calculateUploadRateDto.HandleEndOrderOnTime = orderRateData.HandleEndOrderOnTime;
|
|
|
}
|
|
|
|
|
|
+ //电话
|
|
|
if (callRate != null && callRate.Count > 0)
|
|
|
{
|
|
|
var callRateData = callRate[0];
|
|
|
calculateUploadRateDto.TelCountNum = callRateData.TelCountNum;
|
|
|
calculateUploadRateDto.TelTimely = callRateData.TelTimely;
|
|
|
calculateUploadRateDto.TelNotTimely = callRateData.TelNotTimely;
|
|
|
+ calculateUploadRateDto.TelConnectCountNum = callRateData.TelConnectCountNum;
|
|
|
+ calculateUploadRateDto.TelNotConnectCountNum = callRateData.TelNotConnectCountNum;
|
|
|
}
|
|
|
|
|
|
+ //回访
|
|
|
+ if (visitList != null && visitList.Count > 0)
|
|
|
+ {
|
|
|
+ var visitRateData = visitList[0];
|
|
|
+ calculateUploadRateDto.VisitCountNum = visitRateData.VisitCountNum;
|
|
|
+ calculateUploadRateDto.SatisfactionCountNum = visitRateData.SatisfactionCountNum;
|
|
|
+ calculateUploadRateDto.NotSatisfiedCountNum = visitRateData.NotSatisfiedCountNum;
|
|
|
+ }
|
|
|
return calculateUploadRateDto;
|
|
|
}
|
|
|
|
|
|
+ #endregion
|
|
|
+
|
|
|
#region 系统配置
|
|
|
|
|
|
/// <summary>
|
|
@@ -459,5 +545,39 @@ namespace DataSharing.Host.Controllers
|
|
|
}
|
|
|
}
|
|
|
#endregion
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 对接平台用户管理
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost("adduserinfo")]
|
|
|
+ [AllowAnonymous]
|
|
|
+ public async Task AddUserInfo([FromBody] AddUserInfoDto dto)
|
|
|
+ {
|
|
|
+ var tokenInfo = _mapper.Map<DsUserTokenInfo>(dto);
|
|
|
+ if (string.IsNullOrEmpty(tokenInfo.AuthIP))
|
|
|
+ tokenInfo.AuthIP = "*";
|
|
|
+ await _dsUserTokenInfoRepository.AddAsync(tokenInfo, HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 查询对接平台用户信息
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("get-user-info-list")]
|
|
|
+ [AllowAnonymous]
|
|
|
+ public async Task<PagedDto<DsUserTokenInfo>> GetUserInfoList([FromQuery] PagedKeywordRequest dto)
|
|
|
+ {
|
|
|
+ RefAsync<int> total = 0;
|
|
|
+ var items = await _dsUserTokenInfoRepository.Queryable()
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.Keyword), p => p.PlatformSourceName.Contains(dto.Keyword))
|
|
|
+ .ToPageListAsync(dto.PageIndex, dto.PageSize, total, HttpContext.RequestAborted);
|
|
|
+
|
|
|
+ return new PagedDto<DsUserTokenInfo>(total, items);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
}
|