diff --git a/src/SJZY.Track.Application.Contract/Dtos/Forewarning/WarningOrderDto.cs b/src/SJZY.Track.Application.Contract/Dtos/Forewarning/WarningOrderDto.cs index 198686e0..0fa46590 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/Forewarning/WarningOrderDto.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/Forewarning/WarningOrderDto.cs @@ -7,6 +7,11 @@ public class WarningOrderDto /// public int Id { get; set; } + /// + /// 订单号 + /// + public string OrderNo { get; set; } = null!; + /// /// 轨迹发生时间 /// diff --git a/src/SJZY.Track.Application.Contract/Events/TrackWarningCalcEvent.cs b/src/SJZY.Track.Application.Contract/Events/TrackWarningCalcEvent.cs index 3808ab2e..f2031f12 100644 --- a/src/SJZY.Track.Application.Contract/Events/TrackWarningCalcEvent.cs +++ b/src/SJZY.Track.Application.Contract/Events/TrackWarningCalcEvent.cs @@ -20,7 +20,7 @@ public class TrackWarningCalcEvent /// /// 订单id /// - public int[] OrderIds { get; set; } = null!; + public int[] OrderIds { get; set; } /// /// 轨迹发生时间 diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs index 25af80ba..f30f51fc 100644 --- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs +++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs @@ -154,7 +154,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe { SubSystemId = @event.SubSystemId, CustomId = @event.CustomId, - OrderIds = canNextOrderIds.ToArray(), + OrderIds = insertTracks.Select(x => x.OrderId).ToArray(), TrackStatusId = trackContent.TrackStatusId, TrackTime = @event.TrackTime, }); diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackWarningCalcEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackWarningCalcEventHandler.cs index acefee10..0acde53b 100644 --- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackWarningCalcEventHandler.cs +++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackWarningCalcEventHandler.cs @@ -59,6 +59,7 @@ public class TrackWarningCalcEventHandler : ITransientDependency, ICapSubscribe Orders = orders.Select(order => new WarningOrderDto { Id = order.Id, + OrderNo = order.OrderNo, TrackTime = @event.TrackTime, CargoType = order.CargoType, Month = order.CreateTime.Month, diff --git a/src/SJZY.Track.Application/Services/ForewarningServices/ForewarningNotifyService.cs b/src/SJZY.Track.Application/Services/ForewarningServices/ForewarningNotifyService.cs index c6019cfd..2bccdb60 100644 --- a/src/SJZY.Track.Application/Services/ForewarningServices/ForewarningNotifyService.cs +++ b/src/SJZY.Track.Application/Services/ForewarningServices/ForewarningNotifyService.cs @@ -148,7 +148,9 @@ public class ForewarningNotifyService : IForewarningNotifyService, ITransientDep private async Task> WriteWarningRecordAsync(List entries, List notifyRules) { - // todo:重复校验 + var orders = await _warningQueries.GetOrderNoByIdsAsync(entries.Select(x => x.OrderId).ToArray()); + var orderNoDict = orders.ToDictionary(x => x.Id, x => x.Name); + var warningRecords = new List(); foreach (var entry in entries) { @@ -169,6 +171,7 @@ public class ForewarningNotifyService : IForewarningNotifyService, ITransientDep Counter = entry.Counter, IsLast = rule.WarnCount == entry.Counter, OrderId = entry.OrderId, + OrderNo = orderNoDict[entry.OrderId], WarningStatus = WarningStatus.UnProcessed, NotifyUserId = notifyUser.UserId, NotifyUserName = notifyUser.UserName, @@ -177,6 +180,7 @@ public class ForewarningNotifyService : IForewarningNotifyService, ITransientDep } } + // 批量写入es await _warningRecordEsRepository.BulkInsertAsync(warningRecords); return warningRecords; } diff --git a/src/SJZY.Track.Application/Services/TrackOrders/OrderWarningService.cs b/src/SJZY.Track.Application/Services/TrackOrders/OrderWarningService.cs index 3afedec2..f4ed6560 100644 --- a/src/SJZY.Track.Application/Services/TrackOrders/OrderWarningService.cs +++ b/src/SJZY.Track.Application/Services/TrackOrders/OrderWarningService.cs @@ -39,8 +39,7 @@ public class OrderWarningService : ApplicationService x.Id, x.LatestTrackContent, x.LatestTrackTime, - x.LatestTrackPlace, - x.OrderNo + x.LatestTrackPlace }); var list = new List(); @@ -61,7 +60,6 @@ public class OrderWarningService : ApplicationService }; var order = orders.FirstOrDefault(o => o.Id == x.OrderId); if (order == default) return; - item.OrderNo = order.OrderNo; item.LatestTrackTime = order.LatestTrackTime; item.LatestTrackPlace = order.LatestTrackPlace; item.LatestTrackContent = order.LatestTrackContent; diff --git a/src/SJZY.Track.Domain/Aggregates/ForewarningAggregate/WarningRecordIndex.cs b/src/SJZY.Track.Domain/Aggregates/ForewarningAggregate/WarningRecordIndex.cs index c7305d1c..4b700010 100644 --- a/src/SJZY.Track.Domain/Aggregates/ForewarningAggregate/WarningRecordIndex.cs +++ b/src/SJZY.Track.Domain/Aggregates/ForewarningAggregate/WarningRecordIndex.cs @@ -47,6 +47,11 @@ public class WarningRecordIndex : IdBaseIndex /// public int OrderId { get; set; } + /// + /// 订单号 + /// + public string OrderNo { get; set; } = null!; + /// /// 预警规则 /// diff --git a/src/SJZY.Track.Domain/Queries/IWarningQueries.cs b/src/SJZY.Track.Domain/Queries/IWarningQueries.cs index e6a7ce00..ce4ecb0e 100644 --- a/src/SJZY.Track.Domain/Queries/IWarningQueries.cs +++ b/src/SJZY.Track.Domain/Queries/IWarningQueries.cs @@ -1,3 +1,4 @@ +using SJZY.Track.Domain.Dtos.Common; using SJZY.Track.Domain.Dtos.Forewarning; namespace SJZY.Track.Domain.Queries; @@ -24,4 +25,11 @@ public interface IWarningQueries /// /// Task> GetWarningRuleByAreaId(int areaId); + + /// + /// 订单id换name + /// + /// + /// + Task> GetOrderNoByIdsAsync(int[] orderIds); } diff --git a/src/SJZY.Track.Repository/Queries/WarningQueries.cs b/src/SJZY.Track.Repository/Queries/WarningQueries.cs index 7554e5f7..6171244d 100644 --- a/src/SJZY.Track.Repository/Queries/WarningQueries.cs +++ b/src/SJZY.Track.Repository/Queries/WarningQueries.cs @@ -1,6 +1,8 @@ using Newtonsoft.Json; using SJZY.Track.Domain.Aggregates.ForewarningAggregate; using SJZY.Track.Domain.Aggregates.KPIAreaAggregate; +using SJZY.Track.Domain.Aggregates.OrderAggregate; +using SJZY.Track.Domain.Dtos.Common; using SJZY.Track.Domain.Dtos.Forewarning; using SJZY.Track.Domain.Queries; using SJZY.Track.Domain.VEntities; @@ -93,4 +95,16 @@ public class WarningQueries : ISugarRepository, IWarningQueries, }) .ToListAsync(); } + + public async Task> GetOrderNoByIdsAsync(int[] orderIds) + { + return await Context.Queryable() + .Where(x => orderIds.Contains(x.Id)) + .Select(x => new IdWithNameDto + { + Id = x.Id, + Name = x.OrderNo + }) + .ToListAsync(); + } } diff --git a/src/SJZY.Track.Repository/Repositories/WarningRecordEsRepository.cs b/src/SJZY.Track.Repository/Repositories/WarningRecordEsRepository.cs index 04db2769..5911da19 100644 --- a/src/SJZY.Track.Repository/Repositories/WarningRecordEsRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/WarningRecordEsRepository.cs @@ -74,7 +74,7 @@ public class WarningRecordEsRepository : ElasticSearchContextAbstract f.SubSystemId, input.SubSystemId) : null) && (!input.OrderNos.IsNullOrEmpty() ? q.Terms(t => t - .Field(f => f.OrderId.Suffix("keyword")) + .Field(f => f.OrderNo.Suffix("keyword")) .Terms(input.OrderNos)) : null) && (input.WarningStatus.HasValue ? q.Term(f => f.WarningStatus, input.WarningStatus) : null)