Merge branch 'S07' into test
This commit is contained in:
commit
6a2af2d2cb
@ -129,6 +129,10 @@ public class TrackChangeAfterUpdateOrderEventHandler : ITransientDependency, ICa
|
||||
var handler = scope.ServiceProvider.GetRequiredService<IOrderWarningHandler>();
|
||||
await handler.HandleOrderDeletedOrCompletedAsync(order);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogHelper.Error(ex);
|
||||
}
|
||||
finally
|
||||
{
|
||||
scope.Dispose();
|
||||
|
||||
@ -383,6 +383,10 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
|
||||
await handler2.TrackDeletedHandleAsync(signals);
|
||||
await handler3.TrackUpdatedOrDeletedHandleAsync(signals);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogHelper.Error(ex);
|
||||
}
|
||||
finally
|
||||
{
|
||||
await scope.DisposeAsync();
|
||||
|
||||
@ -525,6 +525,10 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
|
||||
await handler.TrackAddedHandleAsync(signals);
|
||||
await handler2.TrackAddedOrUpdatedHandleAsync(signals);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogHelper.Error(ex);
|
||||
}
|
||||
finally
|
||||
{
|
||||
await scope.DisposeAsync();
|
||||
@ -549,6 +553,10 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
|
||||
await handler.TrackAddedOrUpdatedHandleAsync(signals);
|
||||
await handler2.TrackUpdatedOrDeletedHandleAsync(signals);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogHelper.Error(ex);
|
||||
}
|
||||
finally
|
||||
{
|
||||
await scope.DisposeAsync();
|
||||
|
||||
@ -90,7 +90,7 @@ public class BroadcastingService : IBroadcastingService
|
||||
OperationMan = log.OperationMan,
|
||||
PushTime = log.PushTime,
|
||||
OptionType = log.OptionType,
|
||||
IsManualPush = log.IsManualPush, //操作人不为系统用户,则认为是仍推送
|
||||
IsManualPush = log.IsManualPush, //操作人不为系统用户,则认为是人推送
|
||||
PushContent = log.PushContent,
|
||||
OrderNo = log.OrderNo,
|
||||
TrackStatus = log.TrackStatus,
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
using DotNetCore.CAP;
|
||||
using SJZY.Expand.ABP.Core.Logger;
|
||||
using SJZY.Expand.ABP.Core.PublicMethords;
|
||||
using SJZY.Track.Application.Contract.Dtos.ProvideServices;
|
||||
using SJZY.Track.Application.Contract.Services.ProvideServices;
|
||||
@ -206,6 +207,10 @@ public partial class OrderService : ApplicationService, IOrderService
|
||||
var handler = scope.ServiceProvider.GetRequiredService<IOrderWarningHandler>();
|
||||
await handler.HandleOrderDeletedOrCompletedAsync(order);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogHelper.Error(ex);
|
||||
}
|
||||
finally
|
||||
{
|
||||
await scope.DisposeAsync();
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
using System.Linq.Expressions;
|
||||
using SJZY.Expand.ABP.Core.Logger;
|
||||
using SJZY.Expand.AliyunOSS;
|
||||
using SJZY.Track.Application.Contract.Dtos.ProvideServices;
|
||||
using SJZY.Track.Application.Contract.Dtos.TrackOrder;
|
||||
@ -365,6 +366,10 @@ public class TrackOrderService : ApplicationService
|
||||
var handler = scope.ServiceProvider.GetRequiredService<IOrderWarningHandler>();
|
||||
await handler.HandleOrderDeletedOrCompletedAsync(order);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogHelper.Error(ex);
|
||||
}
|
||||
finally
|
||||
{
|
||||
await scope.DisposeAsync();
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
using System.Linq.Expressions;
|
||||
using Microsoft.Extensions.Localization;
|
||||
using SJZY.Expand.ABP.Core.Localization;
|
||||
using SJZY.Expand.ABP.Core.Logger;
|
||||
using SJZY.Expand.ABP.Core.PublicMethords;
|
||||
using SJZY.Track.Application.Contract.Dtos.TrackPush;
|
||||
using SJZY.Track.Application.Contract.Services;
|
||||
@ -8,7 +9,6 @@ using SJZY.Track.Application.Localization;
|
||||
using SJZY.Track.Application.Services.Warning.Handlers;
|
||||
using SJZY.Track.Domain.Aggregates.OrderAggregate;
|
||||
using SJZY.Track.Domain.Aggregates.TrackPushAggregate;
|
||||
using SJZY.Track.Domain.Aggregates.WarningAggregate.Signals;
|
||||
using SJZY.Track.Domain.Dtos.Common;
|
||||
using SJZY.Track.Domain.Dtos.TrackPush;
|
||||
using Volo.Abp.DependencyInjection;
|
||||
@ -270,10 +270,11 @@ public class TrackPushService : ApplicationService, ISingletonDependency
|
||||
await _trackPushCacheService.SetPushContentConfigsAsync(pushConfig.SubSystemId, pushConfig.CustomId);
|
||||
}
|
||||
|
||||
// 引发预警计算
|
||||
await WarningCalc_PushContentConfigChanged(pushConfig, oldContentConfig, postContentConfig);
|
||||
ts.Complete();
|
||||
|
||||
// 引发预警计算
|
||||
WarningCalc_PushContentConfigChanged(pushConfig, oldContentConfig, postContentConfig);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -285,7 +286,7 @@ public class TrackPushService : ApplicationService, ISingletonDependency
|
||||
[HttpPost("SortContent")]
|
||||
public async Task<bool> SortContentAsync([FromBody] SortTrackPushContentInput input)
|
||||
{
|
||||
List<int> ids = input.SortInfo.Select(x => int.Parse(x.Key)).ToList();
|
||||
var ids = input.SortInfo.Select(x => int.Parse(x.Key)).ToList();
|
||||
|
||||
var trackPushContentEntities = await _trackPushConfigRepository.GetContentListAsync(x => ids.Contains(x.Id));
|
||||
|
||||
@ -297,9 +298,13 @@ public class TrackPushService : ApplicationService, ISingletonDependency
|
||||
|
||||
await _trackPushConfigRepository.UpdateContentRangeAsync(trackPushContentEntities);
|
||||
|
||||
var pushConfig =
|
||||
await _trackPushConfigRepository.GetFirstAsync(x =>
|
||||
x.Id == trackPushContentEntities[0].TrackPushConfigId);
|
||||
var pushConfig = await _trackPushConfigRepository.GetFirstAsync(
|
||||
x => x.Id == trackPushContentEntities[0].TrackPushConfigId,
|
||||
y => new
|
||||
{
|
||||
y.SubSystemId,
|
||||
y.CustomId
|
||||
});
|
||||
if (pushConfig != null)
|
||||
{
|
||||
await _trackPushCacheService.SetPushContentConfigsAsync(pushConfig.SubSystemId, pushConfig.CustomId);
|
||||
@ -312,7 +317,7 @@ public class TrackPushService : ApplicationService, ISingletonDependency
|
||||
}
|
||||
|
||||
|
||||
private async Task WarningCalc_PushContentConfigChanged(TrackPushConfigEntity? pushConfig, TrackPushContentConfigEntity? oldContentConfig, TrackPushContentConfigEntity? postContentConfig)
|
||||
private void WarningCalc_PushContentConfigChanged(TrackPushConfigEntity? pushConfig, TrackPushContentConfigEntity? oldContentConfig, TrackPushContentConfigEntity? postContentConfig)
|
||||
{
|
||||
// 推送配置主体不存在?
|
||||
if (pushConfig == null) return;
|
||||
@ -331,6 +336,10 @@ public class TrackPushService : ApplicationService, ISingletonDependency
|
||||
var handler = scope.ServiceProvider.GetRequiredService<IReturnWarningHandler>();
|
||||
await handler.PushConfigChangedHandleAsync(pushConfig, contentConfigEntity);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogHelper.Error(ex);
|
||||
}
|
||||
finally
|
||||
{
|
||||
scope.Dispose();
|
||||
|
||||
@ -652,159 +652,4 @@ public sealed class ReturnWarningHandler : IReturnWarningHandler, ITransientDepe
|
||||
&& x.WarningType == WarningRuleType.回传时效预警.GetHashCode()
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
#region 弃用,收到轨迹推送记录(接口通回调,只考虑了单条)
|
||||
|
||||
// public async Task ReceiveTrackPushRecordHandleAsync(TrackPushRecordIndex record)
|
||||
// {
|
||||
// if (!record.IsSuccess)
|
||||
// {
|
||||
// await HandleReceivedFailed(record);
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// // 1.获取预警机明细
|
||||
// var warningDetails = await _warningDetailsEsRepository.GetReturnWarningDetailsAsync(new GetReturnWarningDetailsVO
|
||||
// {
|
||||
// OrderIdTrackContentIdsDict = new Dictionary<int, HashSet<int>>(1)
|
||||
// {
|
||||
// {
|
||||
// record.OrderId, new HashSet<int>(1)
|
||||
// {
|
||||
// record.TrackContentId
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// });
|
||||
//
|
||||
// // 匹配预警明细,如果有比较字段则使用比较字段,否则使用时间
|
||||
// warningDetails = string.IsNullOrWhiteSpace(record.CompareFields)
|
||||
// ? warningDetails.Where(x => x.MatchTrackTime(record.TrackTime, record.TrackTimeZone)).ToList()
|
||||
// : warningDetails.Where(x => x.MatchExtra(record.CompareFields, record.Extra)).ToList();
|
||||
//
|
||||
// if (warningDetails.Count == 0)
|
||||
// return;
|
||||
//
|
||||
// var detail = warningDetails.First();
|
||||
// // 2.移除(关闭)预警通知任务
|
||||
// await _warningTaskRepository.CloseWarningNotifyTaskAsync(x =>
|
||||
// !x.IsClosed
|
||||
// && x.WarningDetailsId == detail.Id
|
||||
// && x.WarningType == WarningRuleType.回传时效预警.GetHashCode());
|
||||
//
|
||||
// // 3.修改预警明细状态为【推送完成】,补充回传时间
|
||||
// detail.Status = ReturnWarningStatus.推送完成.GetHashCode();
|
||||
// detail.TrackReturnTime = DateTime.Now;
|
||||
// await _warningDetailsEsRepository.UpdateReturnWarningDetailsAsync(detail);
|
||||
// }
|
||||
//
|
||||
// private async Task HandleReceivedFailed(TrackPushRecordIndex record)
|
||||
// {
|
||||
// // 1.查找订单(完结订单也得考虑)
|
||||
// var order = await _orderRepository.GetFirstAsync(x =>
|
||||
// x.Id == record.OrderId
|
||||
// );
|
||||
//
|
||||
// if (order == null) return;
|
||||
//
|
||||
// // 2.匹配规则项目(至多只有一个)
|
||||
// ReturnWarningRuleItemEntity? ruleItem = null;
|
||||
// var rule = await _warningRuleRepository.GetWarningRuleForEnabledAsync(order.SubSystemId, order.CustomId, WarningRuleType.回传时效预警);
|
||||
// if (rule != null)
|
||||
// {
|
||||
// var ruleItemEntities = await _warningRuleRepository.GetReturnRuleItemsAsync(rule.Id);
|
||||
// if (ruleItemEntities.Count != 0)
|
||||
// ruleItem = ruleItemEntities.FirstOrDefault(x => x.CanHitRule(record.TrackStatusId));
|
||||
// }
|
||||
//
|
||||
// // 3.查询订单+轨迹 关联的推送映射配置(tips:一定存在,如果不存在则推送都进行不了)
|
||||
// var pushConfigs = await _trackPushCacheService.GetPushContentConfigsAsync(order.SubSystemId, order.CustomId);
|
||||
// var pushContentConfig = pushConfigs?.FirstOrDefault(x => x.TrackContentId == record.TrackContentId);
|
||||
// if (pushContentConfig == null) return;
|
||||
//
|
||||
// // 4.获取/创建回传预警明细
|
||||
// var warningDetails = await _warningDetailsEsRepository.GetReturnWarningDetailsAsync(new GetReturnWarningDetailsVO
|
||||
// {
|
||||
// OrderIdTrackContentIdsDict = new Dictionary<int, HashSet<int>>(1)
|
||||
// {
|
||||
// {
|
||||
// record.OrderId, new HashSet<int>(1)
|
||||
// {
|
||||
// record.TrackContentId
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// });
|
||||
//
|
||||
// // 匹配预警明细,如果有比较字段则使用比较字段,否则使用时间
|
||||
// warningDetails = string.IsNullOrWhiteSpace(record.CompareFields)
|
||||
// ? warningDetails.Where(x => x.MatchTrackTime(record.TrackTime, record.TrackTimeZone)).ToList()
|
||||
// : warningDetails.Where(x => x.MatchExtra(record.CompareFields, record.Extra)).ToList();
|
||||
//
|
||||
// // 一个预警明细都没有?则需要创建
|
||||
// var isCreate = warningDetails.Count == 0;
|
||||
// var detail = warningDetails.FirstOrDefault(BuildReturnWarningDetails(rule?.Version, ruleItem, order, record, pushContentConfig));
|
||||
//
|
||||
// // 5.第一次回传失败,创建【预警明细】和添加【回传报文记录】,添加一次性【回传重试任务】
|
||||
// if (isCreate)
|
||||
// {
|
||||
// await _warningDetailsEsRepository.InsertReturnWarningDetailsAsync(detail);
|
||||
// await _warningDetailsEsRepository.InsertReturnMessageRecordAsync(BuildReturnMessageRecord(detail.Id, record));
|
||||
// await _warningTaskRepository.AddReturnWarningRetryPushTaskAsync(BuildRetryPushTask(record, detail));
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// // 6.重试次数小于X次,添加【回传报文记录】,添加一次性【回传重试任务】继续重试 (todo:重试次数动态配置)
|
||||
// if (detail.RetryCount < 3)
|
||||
// {
|
||||
// await _warningDetailsEsRepository.InsertReturnMessageRecordAsync(BuildReturnMessageRecord(detail.Id, record));
|
||||
// await _warningTaskRepository.AddReturnWarningRetryPushTaskAsync(BuildRetryPushTask(record, detail));
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// // 7.重试大于等于X次,并且仍处于重试状态的预警和明细
|
||||
// if (detail.Status == ReturnWarningStatus.重试中.GetHashCode())
|
||||
// {
|
||||
// detail.Status = detail.IsExistsKpi
|
||||
// ? ReturnWarningStatus.人工介入.GetHashCode()
|
||||
// : ReturnWarningStatus.已关闭.GetHashCode();
|
||||
// }
|
||||
//
|
||||
// // 8.更新预警明细,添加回传报文记录
|
||||
// await _warningDetailsEsRepository.UpdateReturnWarningDetailsAsync(detail);
|
||||
// await _warningDetailsEsRepository.InsertReturnMessageRecordAsync(BuildReturnMessageRecord(detail.Id, record));
|
||||
//
|
||||
// // 9.存在kpi考核则添加预警通知任务
|
||||
// if (detail.IsExistsKpi)
|
||||
// await _warningTaskRepository.AddWarningNotifyTaskAsync(BuildWarningNotifyTask(detail));
|
||||
// }
|
||||
//
|
||||
// private static ReturnWarningRetryPushTaskEntity BuildRetryPushTask(TrackPushRecordIndex record, ReturnWarningDetailsIndex detail)
|
||||
// {
|
||||
// return new ReturnWarningRetryPushTaskEntity
|
||||
// {
|
||||
// Id = 0,
|
||||
// OrderIds = detail.OrderId.ToString(),
|
||||
// WarningDetailIds = detail.Id,
|
||||
// OptionType = record.OptionType,
|
||||
// SubSystemCode = record.SubSystemCode,
|
||||
// ServiceProviderCode = record.ServiceProviderCode,
|
||||
// RequestParams = record.PushContent, //这次推送的请求体json,根据OptionType来确定是TrackPushInput/TrackUpdateInput
|
||||
//
|
||||
// CreateTime = DateTime.Now,
|
||||
// };
|
||||
// }
|
||||
// private static ReturnMessageRecordIndex BuildReturnMessageRecord(string detailId, TrackPushRecordIndex record)
|
||||
// {
|
||||
// return new ReturnMessageRecordIndex
|
||||
// {
|
||||
// WarningDetailsIds = detailId,
|
||||
// IsSuccess = record.IsSuccess,
|
||||
// Message = record.Message,
|
||||
// CreateTime = DateTime.Now
|
||||
// };
|
||||
// }
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
@ -80,34 +80,11 @@ public class ReturnWarningDetailsIndex : IdBaseIndex
|
||||
SystemReturnTimeSpan = (long?) (TrackReturnTime.Value - TrackCreateTime).TotalMilliseconds;
|
||||
}
|
||||
|
||||
// 是否超时
|
||||
public bool HasTimeout()
|
||||
{
|
||||
if (ActualReturnTimeSpan.HasValue && ReturnTimeSpan.HasValue)
|
||||
return TimeSpan.FromMilliseconds(ActualReturnTimeSpan.Value) > TimeSpan.FromHours(ReturnTimeSpan.Value);
|
||||
return false;
|
||||
}
|
||||
|
||||
// 匹配比较字段,todo:考虑直接使用TrackEsId来匹配
|
||||
public bool MatchExtra(string? compareFields, string? extra)
|
||||
{
|
||||
// 匹配字段为空,明细明细字段为空
|
||||
if (string.IsNullOrWhiteSpace(compareFields))
|
||||
return string.IsNullOrWhiteSpace(CompareFields);
|
||||
|
||||
if (string.IsNullOrWhiteSpace(CompareFields))
|
||||
return false;
|
||||
|
||||
if (!string.Equals(CompareFields, compareFields)) //todo:当比较字段存放到轨迹明细中,后面修改了比较字段后会发生什么?
|
||||
return false;
|
||||
|
||||
if (string.IsNullOrEmpty(extra) || string.IsNullOrEmpty(Extra))
|
||||
return false;
|
||||
|
||||
return TextJsonHelper.EqJsonStringField(extra, Extra, compareFields);
|
||||
}
|
||||
|
||||
public bool MatchTrackTime(DateTime trackTime, float trackTimeZone)
|
||||
{
|
||||
return TrackTime == trackTime && Math.Abs(TrackTimeZone - trackTimeZone) < 0.01f;
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user