Merge branch 'S07' into test

This commit is contained in:
hardstylewyl 2025-05-07 10:05:38 +08:00
commit 6a2af2d2cb
9 changed files with 45 additions and 188 deletions

View File

@ -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();

View File

@ -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();

View File

@ -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();

View File

@ -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,

View File

@ -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();

View File

@ -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();

View File

@ -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();

View File

@ -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
}

View File

@ -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;
}
}