diff --git a/src/SJZY.Track.Application.Contract/Events/OrderIdentifier.cs b/src/SJZY.Track.Application.Contract/Events/OrderIdentifier.cs
index 48186952..49e79b04 100644
--- a/src/SJZY.Track.Application.Contract/Events/OrderIdentifier.cs
+++ b/src/SJZY.Track.Application.Contract/Events/OrderIdentifier.cs
@@ -5,8 +5,4 @@ public struct OrderIdentifier
public int OrderId { get; set; }
public string OrderNo { get; set; }
public int OrderType { get; set; }
-
- public int CustomId { get; set; }
-
- public bool IsTrigger { get; set; }
}
\ No newline at end of file
diff --git a/src/SJZY.Track.Application.Contract/Events/TrackChangeAfterUpdateOrderEvent.cs b/src/SJZY.Track.Application.Contract/Events/TrackChangeAfterUpdateOrderEvent.cs
index 526febd8..8ef46e77 100644
--- a/src/SJZY.Track.Application.Contract/Events/TrackChangeAfterUpdateOrderEvent.cs
+++ b/src/SJZY.Track.Application.Contract/Events/TrackChangeAfterUpdateOrderEvent.cs
@@ -2,6 +2,16 @@
public class TrackChangeAfterUpdateOrderEvent
{
+ ///
+ /// 子系统id
+ ///
+ public int SubSystemId { get; set; }
+
+ ///
+ /// 客户id
+ ///
+ public int CustomId { get; set; }
+
///
/// 订单Id
///
diff --git a/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs b/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs
index 905060ea..621a441c 100644
--- a/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs
+++ b/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs
@@ -3,9 +3,14 @@
public class TrackUpsertEvent
{
///
- /// 子系统id(操作的订单都是相同子系统下的)
+ /// 子系统id
///
public int SubSystemId { get; set; }
+
+ ///
+ /// 客户id
+ ///
+ public int CustomId { get; set; }
///
/// 订单id
diff --git a/src/SJZY.Track.Application.Contract/Services/IForewarningCacheService.cs b/src/SJZY.Track.Application.Contract/Services/IForewarningCacheService.cs
index ce6550f1..8ee8c321 100644
--- a/src/SJZY.Track.Application.Contract/Services/IForewarningCacheService.cs
+++ b/src/SJZY.Track.Application.Contract/Services/IForewarningCacheService.cs
@@ -4,5 +4,19 @@ namespace SJZY.Track.Application.Contract.Services;
public interface IForewarningCacheService
{
- Task> GetRulesAsync(int subSystemId);
+ ///
+ /// 获取预警规则,如果没有则返回null
+ ///
+ /// 子系统id
+ /// 客户id
+ ///
+ Task?> GetRulesAsync(int subSystemId, int customerId);
+
+ ///
+ /// 删除规则
+ ///
+ ///
+ ///
+ ///
+ Task DeleteRulesAsync(int subSystemId, int customerId);
}
\ No newline at end of file
diff --git a/src/SJZY.Track.Application.Contract/Services/INotifyService.cs b/src/SJZY.Track.Application.Contract/Services/INotifyService.cs
deleted file mode 100644
index 54b8a368..00000000
--- a/src/SJZY.Track.Application.Contract/Services/INotifyService.cs
+++ /dev/null
@@ -1,6 +0,0 @@
-namespace SJZY.Track.Application.Contract.Services;
-
-public interface INotifyService
-{
- void SendNotification(string body);
-}
\ No newline at end of file
diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackChangeAfterUpdateOrderEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackChangeAfterUpdateOrderEventHandler.cs
index 0b657f6c..52f1d535 100644
--- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackChangeAfterUpdateOrderEventHandler.cs
+++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackChangeAfterUpdateOrderEventHandler.cs
@@ -67,7 +67,7 @@ public class TrackChangeAfterUpdateOrderEventHandler : ITransientDependency, ICa
});
// 预警计算
- var warningOrders = orders.Select(order => MapWarningOrderDto(order, @event.TrackStatusId)).ToList();
+ var warningOrders = orders.Select(order => MapWarningOrderDto(order, @event)).ToList();
_forewarningNotifyService.WarningCalculateAsync(warningOrders);
}
@@ -77,8 +77,6 @@ public class TrackChangeAfterUpdateOrderEventHandler : ITransientDependency, ICa
return new OrderEntity
{
Id = order.Id,
- SubSystemId = order.SubSystemId,
- CustomId = order.CustomId,
// 轨迹
IsCompleted = order.IsCompleted,
@@ -101,14 +99,14 @@ public class TrackChangeAfterUpdateOrderEventHandler : ITransientDependency, ICa
};
}
- private WarningOrderDto MapWarningOrderDto(OrderEntity order, int trackStatusId)
+ private WarningOrderDto MapWarningOrderDto(OrderEntity order, TrackChangeAfterUpdateOrderEvent @event)
{
return new WarningOrderDto
{
Id = order.Id,
- TrackStatusId = trackStatusId,
- SubSystemId = order.SubSystemId,
- CustomerId = order.CustomId,
+ TrackStatusId = @event.TrackStatusId,
+ SubSystemId = @event.SubSystemId,
+ CustomerId = @event.CustomId,
CargoType = order.CargoType,
Month = order.CreateTime.Month,
diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackRefreshEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackRefreshEventHandler.cs
index 26380b66..8afe8e0c 100644
--- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackRefreshEventHandler.cs
+++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackRefreshEventHandler.cs
@@ -235,7 +235,6 @@ public class TrackRefreshEventHandler : ITransientDependency, ICapSubscribe
OrderId = context.OrderId,
OrderNo = context.OrderNo,
OrderType = context.OrderType,
- CustomId = context.CustomId
}
},
TrackRefreshData = new TrackRefreshStruct
diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
index cee1dc82..41808e11 100644
--- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
+++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
@@ -58,6 +58,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
var nextEvent = @event.DeepCopy();
nextEvent.Visited.AddRange(orderIds);
nextEvent.SubSystemId = group.Key.SubSystemId;
+ nextEvent.CustomId = group.Key.CustomId;
nextEvent.TrackRefreshData = new TrackRefreshStruct
{
ServiceProviderName = @event.TrackRefreshData.ServiceProviderName,
@@ -88,7 +89,6 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
OrderId = x.OrderId,
OrderNo = x.OrderNo,
OrderType = x.OrderType,
- CustomId = x.CustomId
}).ToList();
var idx = 0;
while (idx < identifiers.Count)
@@ -181,6 +181,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
if(!providerDic.TryGetValue(order.OrderId,out var provider))
continue;
+ // todo:不要在upsert事件计算order的状态
var config =
await _trackPullCacheService.GetPullParamWithContentConfigAsync(provider.SubSystemId,
provider.ServiceProviderId);
@@ -199,6 +200,8 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
await _capPublisher.PublishAsync(GlobalConst.TrackChangeAfterUpdateOrderSubscribe,
new TrackChangeAfterUpdateOrderEvent
{
+ SubSystemId = @event.SubSystemId,
+ CustomId = @event.CustomId,
OrderIds = canNextOrderIds.ToArray(),
IsCompleted = @event.TrackRefreshData.IsCompleted,
TrackContent = content.TrackContent,
@@ -211,28 +214,23 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
});
// 触发轨迹推送事件(异步)
- foreach (var group in @event.OrderIdentifiers
- .Where(x => x.OrderId.IsIn(canNextOrderIds))
- .GroupBy(x => x.CustomId))
+ var trackPushEvent = new TrackPushEvent
{
- var trackPushEvent = new TrackPushEvent
+ OptionType = @event.IsAdd ? OptionType.新增 : OptionType.修改,
+ SubSystemId = @event.SubSystemId,
+ CustomId = @event.CustomId,
+ OrderIds = canNextOrderIds.ToArray(),
+ TrackCode = @event.TrackCode,
+ SystemPushInfo = new SystemPushStruct
{
- OptionType = @event.IsAdd ? OptionType.新增 : OptionType.修改,
- SubSystemId = @event.SubSystemId,
- CustomId = group.Key,
- OrderIds = group.Select(x => x.OrderId).ToArray(),
- TrackCode = @event.TrackCode,
- SystemPushInfo = new SystemPushStruct
- {
- TrackStatus = content.TrackStatus,
- TrackContent = content.TrackContent,
- TrackPlace = @event.TrackPlace,
- TrackTime = @event.TrackTime,
- TrackTimeZone = @event.TrackTimeZone
- }
- };
- await _capPublisher.PublishAsync(GlobalConst.TrackPushSubscribe, trackPushEvent);
- }
+ TrackStatus = content.TrackStatus,
+ TrackContent = content.TrackContent,
+ TrackPlace = @event.TrackPlace,
+ TrackTime = @event.TrackTime,
+ TrackTimeZone = @event.TrackTimeZone
+ }
+ };
+ await _capPublisher.PublishAsync(GlobalConst.TrackPushSubscribe, trackPushEvent);
}
///
diff --git a/src/SJZY.Track.Application/Services/ForewarningServices/ForewarningCacheService.cs b/src/SJZY.Track.Application/Services/ForewarningServices/ForewarningCacheService.cs
index 289f3bbf..fdd4463c 100644
--- a/src/SJZY.Track.Application/Services/ForewarningServices/ForewarningCacheService.cs
+++ b/src/SJZY.Track.Application/Services/ForewarningServices/ForewarningCacheService.cs
@@ -6,8 +6,29 @@ namespace SJZY.Track.Application.Services.ForewarningServices;
public class ForewarningCacheService: IForewarningCacheService, ISingletonDependency
{
- public Task> GetRulesAsync(int subSystemId)
+ private Dictionary> _rules = new();
+ string AreaKey(int subSystemId) => $"TrackArea:{subSystemId}";
+ string WarningKey(int subSystemId, int customerId) => $"TrackWarning:{subSystemId}:{customerId}";
+
+ // 30w => 1w => local
+ public async Task?> GetRulesAsync(int subSystemId, int customerId)
{
- throw new NotImplementedException();
+ var rules = _rules.GetValueOrDefault(WarningKey(subSystemId, customerId));
+
+ if (rules == null)
+ {
+ // todo: 写入缓存 set str
+ await Task.Delay(1);
+ }
+
+ return rules;
+ }
+
+ // a b c del local cusomer 3 del redis cache pub del redis cache
+ public Task DeleteRulesAsync(int subSystemId, int customerId)
+ {
+ _rules.Remove(WarningKey(subSystemId, customerId));
+
+ return Task.CompletedTask;
}
}
\ No newline at end of file
diff --git a/src/SJZY.Track.Application/Services/ForewarningServices/ForewarningNotifyService.cs b/src/SJZY.Track.Application/Services/ForewarningServices/ForewarningNotifyService.cs
index f4b2c418..f438a9cd 100644
--- a/src/SJZY.Track.Application/Services/ForewarningServices/ForewarningNotifyService.cs
+++ b/src/SJZY.Track.Application/Services/ForewarningServices/ForewarningNotifyService.cs
@@ -1,10 +1,8 @@
using FreeRedis;
using SJZY.Expand.ABP.Core;
using SJZY.Track.Application.Contract.Services;
-using SJZY.Track.Domain.Aggregates.ForewarningAggregate;
using SJZY.Track.Domain.Consts;
using SJZY.Track.Domain.Dtos.Forewarning;
-using SJZY.Track.Domain.Enums;
using Volo.Abp.DependencyInjection;
namespace SJZY.Track.Application.Services.ForewarningServices;
@@ -14,16 +12,12 @@ namespace SJZY.Track.Application.Services.ForewarningServices;
///
public class ForewarningNotifyService : IForewarningNotifyService, ITransientDependency
{
- IReadOnlyDictionary> _ruleGroupDict;
- IReadOnlyDictionary> _factorDict;
- private IReadOnlyDictionary _rules;
- readonly INotifyService _notifyService;
+ private readonly ForewarningCacheService _cacheService;
- public ForewarningNotifyService(INotifyService notifyService)
+ public ForewarningNotifyService(ForewarningCacheService cacheService)
{
- _notifyService = notifyService;
+ _cacheService = cacheService;
}
-
///
/// 创建预警通知
///
@@ -31,7 +25,7 @@ public class ForewarningNotifyService : IForewarningNotifyService, ITransientDep
/// 创建的通知总量,0表示没有规则
public async Task WarningCalculateAsync(List order)
{
- throw new NotImplementedException();
+ var rules = await _cacheService.GetRulesAsync(order[0].SubSystemId, order[0].CustomerId);
}
public Task DeleteForewarningNotify(WarningOrderDto order)
@@ -50,21 +44,9 @@ public class ForewarningNotifyService : IForewarningNotifyService, ITransientDep
var notifyValues = notifyMembers.Select(val => new RuleNotifyValue(val));
foreach (var notifyValue in notifyValues)
{
- if (!_rules.TryGetValue(notifyValue.RuleId, out var rule))
- continue;
-
- //todo 发送通知
- _notifyService.SendNotification("");
}
}
- public void ClearCache()
- {
- _ruleGroupDict = null;
- _factorDict = null;
- _rules = null;
- }
-
private List DeleteNotifyValue(ForewarningRuleItem ruleItem, int orderId)
{
var members = new List();
diff --git a/src/SJZY.Track.Application/Services/Notifies/NotifyService.cs b/src/SJZY.Track.Application/Services/Notifies/NotifyService.cs
deleted file mode 100644
index 9365fbc9..00000000
--- a/src/SJZY.Track.Application/Services/Notifies/NotifyService.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-using SJZY.Track.Application.Contract.Services;
-using Volo.Abp.DependencyInjection;
-
-namespace SJZY.Track.Application.Services.Notifies;
-
-public class NotifyService:INotifyService, ITransientDependency
-{
- public void SendNotification(string body)
- {
- throw new NotImplementedException();
- }
-}
\ No newline at end of file
diff --git a/src/SJZY.Track.Application/Services/ProvideServices/OrderService.Link.cs b/src/SJZY.Track.Application/Services/ProvideServices/OrderService.Link.cs
index e9554da2..1e6cb204 100644
--- a/src/SJZY.Track.Application/Services/ProvideServices/OrderService.Link.cs
+++ b/src/SJZY.Track.Application/Services/ProvideServices/OrderService.Link.cs
@@ -101,7 +101,6 @@ public partial class OrderService
OrderId = x.Id,
OrderNo = x.OrderNo,
OrderType = x.OrderType,
- CustomId = x.CustomId
}).ToArray(),
TrackCode = track.TrackCode,
TrackPlace = track.TrackPlace,
diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs
index f3d63ca2..3d76bd98 100644
--- a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs
+++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs
@@ -73,7 +73,6 @@ public partial class TrackService : ApplicationService, ITrackService
OrderId = order.Id,
OrderNo = order.OrderNo,
OrderType = order.OrderType,
- CustomId = order.CustomId
}
};
@event.OperationMan = name;
@@ -111,18 +110,19 @@ public partial class TrackService : ApplicationService, ITrackService
var name = userInfo.Data.UserName;
- foreach (var group in orders.GroupBy(x => x.SubSystemId))
+ foreach (var group in orders.GroupBy(x => new { x.SubSystemId, x.CustomId }))
{
// 新增/更新轨迹
var @event = new TrackUpsertEvent
{
- SubSystemId = group.Key,
+ SubSystemId = group.Key.SubSystemId,
+ CustomId = group.Key.CustomId,
+
OrderIdentifiers = group.Select(order => new OrderIdentifier
{
OrderId = order.Id,
OrderNo = order.OrderNo,
OrderType = input.OrderType,
- CustomId = order.CustomId
}).ToArray(),
IsAdd = input.IsAdd,
TrackCode = input.TrackCode,
diff --git a/src/SJZY.Track.Domain/Consts/GlobalConst.Redis.cs b/src/SJZY.Track.Domain/Consts/GlobalConst.Redis.cs
index 6f49c80d..376af72f 100644
--- a/src/SJZY.Track.Domain/Consts/GlobalConst.Redis.cs
+++ b/src/SJZY.Track.Domain/Consts/GlobalConst.Redis.cs
@@ -22,10 +22,6 @@ public partial class GlobalConst
///
public const string TrackPullContentKeyPrefix = "TrackPullContent";
- ///
- /// 规则因素缓存redis key前缀
- ///
- public const string RuleFactorKeyPrefix = "RuleFactor";
///
/// 预警通知redis key前缀