|
@@ -13,6 +13,7 @@ using DataSharing.Share.Enums;
|
|
|
using DataSharing.Validators.HuiJu;
|
|
|
using DataSharing.Validators.XieTong;
|
|
|
using DotNetCore.CAP;
|
|
|
+using Hotline.Share.Dtos.CallCenter;
|
|
|
using Hotline.Share.Dtos.File;
|
|
|
using Hotline.Share.Dtos.Knowledge;
|
|
|
using Hotline.Share.Dtos.Order;
|
|
@@ -699,6 +700,54 @@ namespace DataSharing.Province
|
|
|
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 挂电话推送----电话记录--丰窝最新
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <param name="cancellationToken"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ /// <exception cref="UserFriendlyException"></exception>
|
|
|
+ public async Task SubmitCaseRecordFwAsync(CallNativeDto dto, CancellationToken cancellationToken)
|
|
|
+ {
|
|
|
+ //验证是否需要推送未接数据
|
|
|
+ if (dto != null && dto.AnsweredTime == null)
|
|
|
+ {
|
|
|
+ if (await IsPublishMissedCall(dto.EndTime, cancellationToken) == false)
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ var data = _mapper.Map<SubmitCaseRecordInfo>(dto);
|
|
|
+
|
|
|
+ data.AreaCode = _sharingConfigurationManager.GetCityCode();
|
|
|
+
|
|
|
+ if (string.IsNullOrEmpty(data.CaseSerial))
|
|
|
+ data.CaseSerial = "";
|
|
|
+
|
|
|
+ if (string.IsNullOrEmpty(data.AccordUrl))
|
|
|
+ data.AccordUrl = "";
|
|
|
+
|
|
|
+ //处理通话记录时间
|
|
|
+ SetCallTime(data);
|
|
|
+ var validator = new SubmitCaseRecordInfoValidator();
|
|
|
+ var validResult = await validator.ValidateAsync(data, cancellationToken);
|
|
|
+ if (!validResult.IsValid)
|
|
|
+ throw new UserFriendlyException(string.Join(',', validResult.Errors.Select(d => d.ErrorMessage)));
|
|
|
+ #region 处理请求参数
|
|
|
+ var configProvince = _channelConfigurationManager.GetConfigurationProvince();
|
|
|
+ var request = new ProvinceListRequest<SubmitCaseRecordInfo>(configProvince.ClientId, configProvince.ClientSecret);
|
|
|
+ request.SetData(new List<SubmitCaseRecordInfo>() { data });
|
|
|
+ var jsonData = request.ToString();
|
|
|
+ jsonData = jsonData.Replace("0001-01-01 00:00:00", "");
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ var startTime = dto.BeginIvrTime;
|
|
|
+ //将待推送数据写入待推送表
|
|
|
+ var taskId = await _initPushDataService.InitDsSendTaskSubmitCaseRecord(data.CaseSerial, jsonData, data, startTime, cancellationToken);
|
|
|
+
|
|
|
+ //本地保存通话记录数据
|
|
|
+ await InitTelFwCallData(dto, data.CaseSerial, taskId, cancellationToken);
|
|
|
+ }
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 挂电话推送----电话记录
|
|
|
/// </summary>
|
|
@@ -711,7 +760,7 @@ namespace DataSharing.Province
|
|
|
//验证是否需要推送未接数据
|
|
|
if (dto != null && dto.TrCallRecordDto != null && dto.TrCallRecordDto.OnState == EOnState.NoOn && dto.Order == null)
|
|
|
{
|
|
|
- if (await IsPublishMissedCall(dto.TrCallRecordDto, cancellationToken) == false)
|
|
|
+ if (await IsPublishMissedCall(dto.TrCallRecordDto.OverTime, cancellationToken) == false)
|
|
|
return;
|
|
|
}
|
|
|
|
|
@@ -1862,10 +1911,10 @@ namespace DataSharing.Province
|
|
|
/// <summary>
|
|
|
/// 检查是否需要推送未接通话记录
|
|
|
/// </summary>
|
|
|
- /// <param name="dto"></param>
|
|
|
+ /// <param name="endTime"></param>
|
|
|
/// <param name="cancellationToken"></param>
|
|
|
/// <returns></returns>
|
|
|
- private async Task<bool> IsPublishMissedCall(TrCallDto dto, CancellationToken cancellationToken)
|
|
|
+ private async Task<bool> IsPublishMissedCall(DateTime endTime, CancellationToken cancellationToken)
|
|
|
{
|
|
|
var key = MissedCallKey + DateTime.Now.ToString("yyyyMMdd");
|
|
|
int missedCallCount = 0;
|
|
@@ -1884,12 +1933,12 @@ namespace DataSharing.Province
|
|
|
if (dataCache != null)
|
|
|
{
|
|
|
//如果存在值,检查是否已经达到推送最大值
|
|
|
- if (dataCache.IsMax==false && dataCache.DateTimeList.Count > 0)
|
|
|
+ if (dataCache.IsMax == false && dataCache.DateTimeList.Count > 0)
|
|
|
{
|
|
|
//没有达到最大值
|
|
|
//检查第一条数据是否匹配当前推送时间
|
|
|
var list = dataCache.DateTimeList;
|
|
|
- if (list[0] < dto.OverTime)
|
|
|
+ if (list[0] < endTime)
|
|
|
{
|
|
|
_logger.LogWarning("匹配到需要上传的,原始数据:------------------------" + JsonSerializer.Serialize(list));
|
|
|
//处理数据
|
|
@@ -1926,7 +1975,7 @@ namespace DataSharing.Province
|
|
|
timeLists.Sort();
|
|
|
#endregion
|
|
|
|
|
|
- if (timeLists[0] < dto.OverTime)
|
|
|
+ if (timeLists[0] < endTime)
|
|
|
//处理数据
|
|
|
timeLists.RemoveAt(0);
|
|
|
|
|
@@ -1991,6 +2040,52 @@ namespace DataSharing.Province
|
|
|
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 初始化上传通话记录----丰窝
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <param name="ProvinceNo"></param>
|
|
|
+ /// <param name="cancellationToken"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ private async Task InitTelFwCallData(CallNativeDto dto, string ProvinceNo, string taskId, CancellationToken cancellationToken)
|
|
|
+ {
|
|
|
+ var tellCall = await _dsTelCallRepository.GetAsync(p => p.CallId == dto.Id, cancellationToken);
|
|
|
+ if (tellCall != null)
|
|
|
+ {
|
|
|
+ //修改
|
|
|
+ _mapper.Map(dto, tellCall);
|
|
|
+ tellCall.ProvinceNo = ProvinceNo;
|
|
|
+ tellCall.TaskId = taskId;
|
|
|
+ await _dsTelCallRepository.UpdateAsync(tellCall, cancellationToken);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //新增
|
|
|
+ tellCall = new DsTelCall();
|
|
|
+ tellCall = _mapper.Map<DsTelCall>(dto);
|
|
|
+ tellCall.ProvinceNo = ProvinceNo;
|
|
|
+ tellCall.TaskId = taskId;
|
|
|
+ tellCall.Id = dto.Id;
|
|
|
+ try
|
|
|
+ {
|
|
|
+ await _dsTelCallRepository.AddAsync(tellCall, cancellationToken);
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ var tellCallNew = await _dsTelCallRepository.GetAsync(p => p.CallId == dto.Id, cancellationToken);
|
|
|
+ if (tellCallNew != null)
|
|
|
+ {
|
|
|
+ //修改
|
|
|
+ _mapper.Map(dto, tellCallNew);
|
|
|
+ tellCallNew.ProvinceNo = ProvinceNo;
|
|
|
+ tellCallNew.TaskId = taskId;
|
|
|
+ await _dsTelCallRepository.UpdateAsync(tellCallNew, cancellationToken);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
#endregion
|
|
|
|
|
|
#endregion
|