diff --git a/src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushContentConfigDto.cs b/src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushContentConfigDto.cs
index d67b7454..3dbfe41a 100644
--- a/src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushContentConfigDto.cs
+++ b/src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushContentConfigDto.cs
@@ -37,15 +37,26 @@ public class TrackPushContentConfigDto
///
public int OrderType { get; set; }
+ ///
+ /// 推送顺序
+ ///
+ public int Sort { get; set; }
+
+ ///
+ /// 轨迹内容id
+ /// 我们系统的轨迹内容id
+ ///
+ public int TrackContentId { get; set; }
+
///
/// 我们系统的轨迹code
///
public string TrackCode { get; set; } = null!;
///
- /// 推送顺序
+ /// 可交换顺序的轨迹内容id
///
- public int Sort { get; set; }
+ public int? SwapTrackContentId { get; set; }
///
/// 可交换顺序的轨迹code
diff --git a/src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushInput.cs b/src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushInput.cs
index eae08b81..b9d5dfd2 100644
--- a/src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushInput.cs
+++ b/src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushInput.cs
@@ -4,7 +4,6 @@ public class TrackPushInput
{
public string OrderNo { get; set; } = null!;
- //原TrackItem,为了扩展字段入参变更为字典
public List> Data { get; set; } = new();
public string Log { get; set; }
@@ -14,7 +13,6 @@ public class TrackUpdateInput
{
public string OrderNo { get; set; } = null!;
- //原TrackItem,为了扩展字段入参变更为字典
public List> Data { get; set; } = new();
public string Log { get; set; }
diff --git a/src/SJZY.Track.Application.Contract/Events/TrackPushEvent.cs b/src/SJZY.Track.Application.Contract/Events/TrackPushEvent.cs
index 9be77fbc..f3dcfdb9 100644
--- a/src/SJZY.Track.Application.Contract/Events/TrackPushEvent.cs
+++ b/src/SJZY.Track.Application.Contract/Events/TrackPushEvent.cs
@@ -1,5 +1,9 @@
namespace SJZY.Track.Application.Contract.Events;
+///
+/// 轨迹推送事件
+/// 每次可传递多个订单,但仅能传递同一个轨迹内容
+///
public class TrackPushEvent
{
///
@@ -55,11 +59,21 @@ public class TrackPushEvent
public struct SystemPushStruct
{
+ ///
+ /// 轨迹状态id
+ ///
+ public int TrackStatusId { get; set; }
+
///
/// 轨迹状态
///
public string TrackStatus { get; set; }
+ ///
+ /// 轨迹内容id
+ ///
+ public int TrackContentId { get; set; }
+
///
/// 轨迹内容
///
diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs
index ca773013..a6ddebe9 100644
--- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs
+++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs
@@ -1,12 +1,10 @@
using System.Collections.Immutable;
-using System.Text.Json;
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.Events;
using SJZY.Track.Application.Contract.Services;
-using SJZY.Track.Application.Helpers;
using SJZY.Track.Domain.Aggregates.OrderAggregate;
using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
using SJZY.Track.Domain.Enums;
diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs
index 72b5a080..8c95464b 100644
--- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs
+++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs
@@ -179,20 +179,15 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
return;
}
- // //配置的类型如何和订单类型不一致则不允许推送
- // if (config.OrderType != order.OrderType)
- // {
- // TrackPushFailedPublicTopic($"订单类型{order.OrderType}和配置中的订单类型[{config.OrderType}]不一致,不能推送", @event,
- // order);
- // continue;
- // }
-
var log = new TrackPushRecordIndex
{
OptionType = @event.OptionType.ToString(),
OrderId = order.Id,
OrderNo = order.OrderNo,
+ CompareFields = @event.SystemPushInfo.CompareFields,
+ TrackStatusId = @event.SystemPushInfo.TrackStatusId,
TrackStatus = @event.SystemPushInfo.TrackStatus,
+ TrackContentId = @event.SystemPushInfo.TrackContentId,
TrackCode = @event.TrackCode,
TrackContent = @event.SystemPushInfo.TrackContent,
TrackPlace = @event.SystemPushInfo.TrackPlace,
@@ -255,21 +250,16 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
continue;
}
- // // 配置的类型如何和订单类型不一致则不允许推送
- // if (config.OrderType != order.OrderType)
- // {
- // TrackPushFailedPublicTopic($"订单类型{order.OrderType}和配置中的订单类型[{config.OrderType}]不一致,不能推送", @event,
- // order);
- // continue;
- // }
-
var log = new TrackPushRecordIndex
{
OptionType = @event.OptionType.ToString(),
OrderId = order.Id,
OrderNo = order.OrderNo,
+ CompareFields = @event.SystemPushInfo.CompareFields,
+ TrackStatusId = @event.SystemPushInfo.TrackStatusId,
TrackStatus = @event.SystemPushInfo.TrackStatus,
TrackCode = @event.TrackCode,
+ TrackContentId = @event.SystemPushInfo.TrackContentId,
TrackContent = @event.SystemPushInfo.TrackContent,
TrackPlace = @event.SystemPushInfo.TrackPlace,
TrackTime = @event.SystemPushInfo.TrackTime,
@@ -308,21 +298,16 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
continue;
}
- // //配置的类型如何和订单类型不一致则不允许推送
- // if (config.OrderType != order.OrderType)
- // {
- // TrackPushFailedPublicTopic($"订单类型{order.OrderType}和配置中的订单类型[{config.OrderType}]不一致,不能推送", @event,
- // order);
- // continue;
- // }
-
var log = new TrackPushRecordIndex
{
OptionType = @event.OptionType.ToString(),
OrderId = order.Id,
OrderNo = order.OrderNo,
+ CompareFields = @event.SystemPushInfo.CompareFields,
+ TrackStatusId = @event.SystemPushInfo.TrackStatusId,
TrackStatus = @event.SystemPushInfo.TrackStatus,
TrackCode = @event.TrackCode,
+ TrackContentId = @event.SystemPushInfo.TrackContentId,
TrackContent = @event.SystemPushInfo.TrackContent,
TrackPlace = @event.SystemPushInfo.TrackPlace,
TrackTime = @event.SystemPushInfo.TrackTime,
diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
index 2bd5112c..1a88b8bf 100644
--- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
+++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
@@ -178,12 +178,11 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
await _trackDetailsEsRepository.AddManyAsync(insertTracks);
//批量写入订单操作日志
- _ = _orderOperationRecordEsRepository
- .AddManyAsync(insertTracks.Select(t => BuildOrderOperationRecord(@event, t, new OrderIdentifier
- {
- OrderNo = t.OrderNo,
- OrderId = t.OrderId
- })).ToList());
+ _ = _orderOperationRecordEsRepository.AddManyAsync(insertTracks.Select(t => BuildOrderOperationRecord(@event, t, new OrderIdentifier
+ {
+ OrderNo = t.OrderNo,
+ OrderId = t.OrderId
+ })).ToList());
// 添加轨迹触发订单拉取状态更新
await _orderRepository.UpdatePullStatusToSilenceAsync(insertTracks.Select(x => x.OrderId).ToList(),
@@ -217,6 +216,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
});
// 触发轨迹推送事件(异步)
+ // tips:同一个轨迹内容,多个订单多条轨迹
var trackPushEvent = new TrackPushEvent
{
OptionType = @event.IsAdd ? OptionType.新增 : OptionType.修改,
@@ -227,7 +227,9 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
TrackCode = @event.TrackCode,
SystemPushInfo = new SystemPushStruct
{
+ TrackStatusId = trackContent.TrackStatusId,
TrackStatus = trackContent.TrackStatus,
+ TrackContentId = trackContent.TrackContentId,
TrackContent = trackContent.TrackContent,
TrackPlace = @event.TrackPlace,
TrackTime = @event.NewTrackTime ?? @event.TrackTime,
diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs
index 119e8c25..bf958315 100644
--- a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs
+++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs
@@ -61,13 +61,13 @@ public class TrackPushService : ApplicationService, ITrackPushService
var subSystemCode = await _provideQueries.SubSystemId2CodeAsync(input.SubSystemId);
var orders = await _orderRepository.GetArrayAsync(x =>
- x.SubSystemId == input.SubSystemId && x.OrderType == input.OrderType &&
- input.OrderNos.Contains(x.OrderNo),
- x => new
- {
- x.Id,
- x.CustomId
- });
+ x.SubSystemId == input.SubSystemId
+ && x.OrderType == input.OrderType
+ && input.OrderNos.Contains(x.OrderNo), x => new
+ {
+ x.Id,
+ x.CustomId
+ });
if (!orders.Any())
{
@@ -82,13 +82,11 @@ public class TrackPushService : ApplicationService, ITrackPushService
var name = userInfo.Data.UserName;
- //查出需要推送的轨迹
- var tracks = await _trackDetailsEsRepository
- .GetListAsync(input.SubSystemId, input.OrderType, input.OrderNos,
- new List
- {
- input.TrackCode
- });
+ //查出可能需要推送的轨迹
+ var tracks = await _trackDetailsEsRepository.GetListAsync(input.SubSystemId, input.OrderType, input.OrderNos, new List
+ {
+ input.TrackCode
+ });
if (tracks.Count == 0)
{
throw new BusinessException(message: "没有需要推送的轨迹");
@@ -116,13 +114,20 @@ public class TrackPushService : ApplicationService, ITrackPushService
}).ToList();
}
- //不同单可能会有不同的轨迹内容,先推送只推送最新的一条
+ // 经过过滤后不存在需要推送的轨迹
+ if (tracks.Count == 0)
+ {
+ throw new BusinessException(message: "没有需要推送的轨迹");
+ }
+
+ // 构建每个单最早的轨迹(已经指定了code)
+ var orderIdTrackDict = tracks.GroupBy(x => x.OrderId)
+ .ToDictionary(x => x.Key, y => y.OrderByDescending(a => a.CreateTime).First());
+
+ //不同单可能会有不同的轨迹内容,手动推送只推送最新的一条
foreach (var order in orders)
{
- //找出每个单的某个code的最新轨迹内容
- var track = tracks.Where(x => x.OrderId == order.Id)
- .OrderByDescending(x => x.CreateTime)
- .FirstOrDefault();
+ var track = orderIdTrackDict.GetValueOrDefault(order.Id);
if (track == null) continue;
var trackPushEvent = new TrackPushEvent
@@ -134,9 +139,11 @@ public class TrackPushService : ApplicationService, ITrackPushService
OrderIds = new[] { order.Id },
TrackCode = input.TrackCode,
OperationMan = name,
- SystemPushInfo = new SystemPushStruct()
+ SystemPushInfo = new SystemPushStruct
{
+ TrackStatusId = track.TrackStatusId,
TrackStatus = track.TrackStatus,
+ TrackContentId = track.TrackContentId,
TrackContent = track.TrackContent,
TrackPlace = track.TrackPlace,
TrackTime = track.TrackTime,
@@ -149,7 +156,7 @@ public class TrackPushService : ApplicationService, ITrackPushService
await _capPublisher.PublishAsync(GlobalConst.TrackManualPushSubscribe, trackPushEvent);
}
- return new UnifyResultDto(true, $"即将推送轨迹代码{input.TrackCode}给{orders.Length}个订单");
+ return new UnifyResultDto(true, $"即将推送轨迹代码{input.TrackCode}给{orderIdTrackDict.Count}个订单");
}
@@ -180,8 +187,11 @@ public class TrackPushService : ApplicationService, ITrackPushService
public async Task>> GetTrackPushRecordsAsync([FromQuery] OrderNoInfo input)
{
var orderId = await _orderRepository.GetFirstAsync(x =>
- x.SubSystemId == input.SubSystemId && x.OrderType == input.OrderType && input.OrderNo == x.OrderNo,
- x => x.Id);
+ x.SubSystemId == input.SubSystemId
+ && x.OrderType == input.OrderType
+ && input.OrderNo == x.OrderNo,
+ x => x.Id
+ );
if (orderId == default)
{
throw new BusinessException(message: "订单不存在");
@@ -192,6 +202,4 @@ public class TrackPushService : ApplicationService, ITrackPushService
var res = ObjectMapper.Map, List>(records);
return new UnifyResultDto>(true, res, "操作成功");
}
-
-
}
diff --git a/src/SJZY.Track.Application/Services/TrackPush/TrackPushCacheService.cs b/src/SJZY.Track.Application/Services/TrackPush/TrackPushCacheService.cs
index 83c393ed..eba99bbf 100644
--- a/src/SJZY.Track.Application/Services/TrackPush/TrackPushCacheService.cs
+++ b/src/SJZY.Track.Application/Services/TrackPush/TrackPushCacheService.cs
@@ -84,8 +84,10 @@ public class TrackPushCacheService : ITrackPushCacheService, ITransientDependenc
TimezoneFormat = trackPushConfig.TimezoneFormat,
ServiceProviderCode = item.ServiceProviderCode,
OrderType = item.OrderType,
- TrackCode = item.TrackCode,
Sort = item.Sort,
+ TrackContentId = item.TrackContentId,
+ TrackCode = item.TrackCode,
+ SwapTrackContentId = item.SwapTrackContentId,
SwapTrackCode = item.SwapTrackCode,
TrackStatusValue = item.TrackStatusValue,
TrackContentCodeValue = item.TrackContentCodeValue,
diff --git a/src/SJZY.Track.Application/Services/Warning/CompleteWarningService.cs b/src/SJZY.Track.Application/Services/Warning/CompleteWarningService.cs
index 06b4c97f..bc4ff130 100644
--- a/src/SJZY.Track.Application/Services/Warning/CompleteWarningService.cs
+++ b/src/SJZY.Track.Application/Services/Warning/CompleteWarningService.cs
@@ -3,8 +3,8 @@ using SJZY.Track.Application.Contract.Dtos.Warning;
using SJZY.Track.Application.Contract.Dtos.Warning.Complete;
using SJZY.Track.Application.Contract.Dtos.Warning.Return;
using SJZY.Track.Application.Helpers;
-using SJZY.Track.Application.Services.Warning.Handlers.Model;
-using SJZY.Track.Application.Services.Warning.Handlers.Warning;
+using SJZY.Track.Application.Services.Warning.Handlers;
+using SJZY.Track.Application.Services.Warning.Model;
using SJZY.Track.Domain.Aggregates.OrderAggregate;
using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
using SJZY.Track.Domain.Aggregates.TrackStatusAggregate;
@@ -138,8 +138,7 @@ public class CompleteWarningService : ApplicationService
// 查最新轨迹
var orderIds = result.List.Select(x => x.OrderId).ToHashSet();
- var orderTracks = await _trackDetailsEsRepository.GetLatestListAsync(orderIds);
- var orderIdTrackDict = orderTracks.ToDictionary(x => x.OrderId);
+ var orderIdTrackDict = await _trackDetailsEsRepository.GetLatestDictAsync(orderIds);
// :填充子系统名称(冗余?)
// :填充客户简称(冗余?)
@@ -207,14 +206,12 @@ public class CompleteWarningService : ApplicationService
TrackStatusId = id,
TrackStatus = trackStatusName
};
-
}).Where(x => x != null);
return trackStatus.ToList()!;
}
}
-
///
/// 编辑完整预警规则列表
///
diff --git a/src/SJZY.Track.Application/Services/Warning/TransportWarningService.cs b/src/SJZY.Track.Application/Services/Warning/TransportWarningService.cs
index 5e89f731..5a5a637d 100644
--- a/src/SJZY.Track.Application/Services/Warning/TransportWarningService.cs
+++ b/src/SJZY.Track.Application/Services/Warning/TransportWarningService.cs
@@ -70,7 +70,7 @@ public class TransportWarningService : ApplicationService
sb.Append($"{entity.CargoType}");
// 月份
if (!string.IsNullOrWhiteSpace(entity.Months))
- sb.Append($"/{entity.Months.Replace("/", "|")}月份");
+ sb.Append($"/{entity.Months.Replace("/", ",")}月份");
// 中转
if (entity.IsTransit != null)
sb.Append($"/中转为{(entity.IsTransit.Value ? "是" : "否")}");
diff --git a/src/SJZY.Track.Domain/Aggregates/KPIAreaAggregate/IKpiAreaRepository.cs b/src/SJZY.Track.Domain/Aggregates/KPIAreaAggregate/IKpiAreaRepository.cs
index e84baad6..01c0e0ff 100644
--- a/src/SJZY.Track.Domain/Aggregates/KPIAreaAggregate/IKpiAreaRepository.cs
+++ b/src/SJZY.Track.Domain/Aggregates/KPIAreaAggregate/IKpiAreaRepository.cs
@@ -65,4 +65,10 @@ public interface IKpiAreaRepository : IBasicRepository
///
///
List? GetAreaInfosByAreaId(int areaId);
+
+ ///
+ /// 获取所有区域信息
+ ///
+ ///
+ Task>> GetAreaInfosDictByAreaId(HashSet areaIds);
}
diff --git a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsEsRepository.cs b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsEsRepository.cs
index 916f6ded..b4d9adab 100644
--- a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsEsRepository.cs
+++ b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsEsRepository.cs
@@ -1,5 +1,5 @@
using SJZY.Expand.ElasticSearch.Services;
-using SJZY.Track.Domain.Dtos.TrackContents;
+using SJZY.Track.Domain.Dtos.TrackDetails;
using SJZY.Track.Domain.Enums;
namespace SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
@@ -8,7 +8,14 @@ public interface ITrackDetailsEsRepository : IElasticsearchClientService> GetListAsync(int[] orderIds, string trackCode, bool forUpsert = false);
- Task> GetLatestListAsync(HashSet eventOrderIds);
+ // 复杂查询,返回 k:订单id v:轨迹列表
+ Task>> GetOrderTracksDictAsync(GetOrderTracksDictVO input);
+
+ // 查询订单的每个轨迹状态的最旧/早轨迹,返回 k:订单id v:[k:轨迹状态id,v:最早轨迹]
+ Task>> GetTrackStatusEarliestDictAsync(HashSet orderIds);
+
+ // 查询订单的最新/晚轨迹,返回 k:订单id v:最早轨迹
+ Task> GetLatestDictAsync(HashSet orderIds);
Task> GetLatestListAsync(int[] eventOrderIds, List trackCodes);
diff --git a/src/SJZY.Track.Domain/Aggregates/TrackStatusAggregate/ITrackStatusRepository.cs b/src/SJZY.Track.Domain/Aggregates/TrackStatusAggregate/ITrackStatusRepository.cs
index 809ceea2..5719fcd8 100644
--- a/src/SJZY.Track.Domain/Aggregates/TrackStatusAggregate/ITrackStatusRepository.cs
+++ b/src/SJZY.Track.Domain/Aggregates/TrackStatusAggregate/ITrackStatusRepository.cs
@@ -5,5 +5,9 @@ namespace SJZY.Track.Domain.Aggregates.TrackStatusAggregate;
public interface ITrackStatusRepository : IBasicRepository
{
Task GetDetailAsync(int id);
+
Task> GetPageTrackStatus(GetPagedTrackStatusVO input);
+
+ // 获取轨迹状态Id与名称字典
+ Task> GetTrackStatusIdNameDictAsync(HashSet trackStatusIds);
}
diff --git a/src/SJZY.Track.Domain/Aggregates/WarningAggregate/IWarningDetailsEsRepository.cs b/src/SJZY.Track.Domain/Aggregates/WarningAggregate/IWarningDetailsEsRepository.cs
index 335e2337..b38c62da 100644
--- a/src/SJZY.Track.Domain/Aggregates/WarningAggregate/IWarningDetailsEsRepository.cs
+++ b/src/SJZY.Track.Domain/Aggregates/WarningAggregate/IWarningDetailsEsRepository.cs
@@ -12,8 +12,8 @@ public interface IWarningDetailsEsRepository
// 分页获取运输预警明细
Task> GetPageTransportWarningDetailsAsync(GetPageTransportWarningDetailsInputVO input);
- // 获取运输预警明细(预警规则id+状态)
- Task> GetTransportWarningDetailsAsync(HashSet ruleItemIds, HashSet status);
+ // 复杂查询,只关注默认只关注(即将超时/已超时)
+ Task> GetTransportWarningDetailsAsync(GetTransportWarningDetailsVO input);
// 更新运输预警明细
Task UpdateTransportWarningDetailsAsync(TransportWarningDetailsIndex detail);
@@ -22,9 +22,7 @@ public interface IWarningDetailsEsRepository
Task BulkUpdateTransportWarningDetailsAsync(List details, int maxRetries = 3);
// 批量关闭运输预警明细
- Task BulkCloseTransportWarningDetailsAsync(HashSet detailIds, int maxRetries = 3);
- // 批量关闭运输预警明细
- Task BulkCloseTransportWarningDetailsAsync(HashSet ruleItemIds, int maxRetries = 3);
+ Task BulkCloseTransportWarningDetailsAsync(BulkCloseTransportWarningDetailsVO input, int maxRetries = 3);
// 新增运输预警明细
Task InsertTransportWarningDetailsAsync(TransportWarningDetailsIndex detail);
@@ -39,6 +37,9 @@ public interface IWarningDetailsEsRepository
// 分页获取回传预警明细
Task> GetPageReturnWarningDetailsAsync(GetPageReturnWarningDetailsInputVO input);
+ // 复杂查询,只关注默认只关注(重试中/人工介入)
+ Task> GetReturnWarningDetailsAsync(GetReturnWarningDetailsVO input);
+
// 获取回传日志列表
Task> GetReturnMessageRecordListByIdAsync(string esId);
@@ -48,6 +49,9 @@ public interface IWarningDetailsEsRepository
// 批量更新回传预警明细
Task BulkUpdateReturnWarningDetailsAsync(List details, int maxRetries = 3);
+ // 批量关闭回传预警明细
+ Task BulkCloseReturnWarningDetailsAsync(BulkCloseReturnWarningDetailsVO input, int maxRetries = 3);
+
// 新增回传预警明细
Task InsertReturnWarningDetailsAsync(ReturnWarningDetailsIndex detail);
@@ -67,6 +71,12 @@ public interface IWarningDetailsEsRepository
// 分页获取完整预警明细
Task> GetPageCompleteWarningDetailsAsync(GetPageCompleteWarningDetailsInputVO input);
+ // 复杂查询,只关注默认只关注(待处理)
+ Task> GetCompleteWarningDetailsAsync(GetCompleteWarningDetailsVO input);
+
+ // 批量关闭完整预警明细
+ Task BulkCloseCompleteWarningDetailsAsync(BulkCloseCompleteWarningDetailsVO input, int maxRetries = 3);
+
// 更新完整预警明细
Task UpdateCompleteWarningDetailsAsync(CompleteWarningDetailsIndex detail);
diff --git a/src/SJZY.Track.Domain/Aggregates/WarningAggregate/IWarningTaskRepository.cs b/src/SJZY.Track.Domain/Aggregates/WarningAggregate/IWarningTaskRepository.cs
index 367e8998..64be5fd3 100644
--- a/src/SJZY.Track.Domain/Aggregates/WarningAggregate/IWarningTaskRepository.cs
+++ b/src/SJZY.Track.Domain/Aggregates/WarningAggregate/IWarningTaskRepository.cs
@@ -19,7 +19,7 @@ public interface IWarningTaskRepository
// 批量添加预警通知任务
Task BulkInsertWarningNotifyTaskAsync(List entities);
- // 关闭预警通知任务
+ // 关闭预警通知任务,预警类型+detailsId 可以唯一确定
Task CloseWarningNotifyTaskAsync(Expression> expression);
// 关闭预警通知任务
diff --git a/src/SJZY.Track.Domain/Aggregates/WarningAggregate/Return/ReturnWarningDetailsIndex.cs b/src/SJZY.Track.Domain/Aggregates/WarningAggregate/Return/ReturnWarningDetailsIndex.cs
index 2549fd7d..6906509a 100644
--- a/src/SJZY.Track.Domain/Aggregates/WarningAggregate/Return/ReturnWarningDetailsIndex.cs
+++ b/src/SJZY.Track.Domain/Aggregates/WarningAggregate/Return/ReturnWarningDetailsIndex.cs
@@ -86,4 +86,9 @@ public class ReturnWarningDetailsIndex : IdBaseIndex
return TextJsonHelper.EqJsonStringField(extra, Extra, compareFields);
}
+
+ public bool MatchTrackTime(DateTime trackTime, float trackTimeZone)
+ {
+ return TrackTime == trackTime && Math.Abs(TrackTimeZone - trackTimeZone) < 0.1f;
+ }
}
diff --git a/src/SJZY.Track.Domain/Dtos/TrackPush/TrackPushContentConfigVO.cs b/src/SJZY.Track.Domain/Dtos/TrackPush/TrackPushContentConfigVO.cs
index b8b53dc0..3e383e42 100644
--- a/src/SJZY.Track.Domain/Dtos/TrackPush/TrackPushContentConfigVO.cs
+++ b/src/SJZY.Track.Domain/Dtos/TrackPush/TrackPushContentConfigVO.cs
@@ -22,15 +22,25 @@ public class TrackPushContentConfigVO
///
public string ServiceProviderCode { get; set; } = null!;
+ ///
+ /// 推送顺序
+ ///
+ public int Sort { get; set; }
+
+ ///
+ /// 轨迹内容id
+ ///
+ public int TrackContentId { get; set; }
+
///
/// 轨迹code
///
public string TrackCode { get; set; } = null!;
///
- /// 推送顺序
+ /// 可交换顺序的轨迹内容id
///
- public int Sort { get; set; }
+ public int? SwapTrackContentId { get; set; }
///
/// 可交换顺序的轨迹code
diff --git a/src/SJZY.Track.Domain/Dtos/Warning/GetReturnWarningDetailsVO.cs b/src/SJZY.Track.Domain/Dtos/Warning/GetReturnWarningDetailsVO.cs
index 2e466084..79d06d01 100644
--- a/src/SJZY.Track.Domain/Dtos/Warning/GetReturnWarningDetailsVO.cs
+++ b/src/SJZY.Track.Domain/Dtos/Warning/GetReturnWarningDetailsVO.cs
@@ -17,7 +17,6 @@ public class GetReturnWarningDetailsVO
public HashSet Status { get; set; } = DefaultFollowStatus;
public Dictionary>? OrderIdTrackContentIdsDict { get; set; }
public Dictionary>? OrderIdTrackEsIdsDict { get; set; }
-
public HashSet<(int SubSystemId, int CustomId, int TrackContentId)>? PushConfigLinks { get; set; }
public bool HasDetailsIds => DetailsIds?.Count > 0;
diff --git a/src/SJZY.Track.Repository/Repositories/TrackPushConfigRepository.cs b/src/SJZY.Track.Repository/Repositories/TrackPushConfigRepository.cs
index a23d744e..5b6810d6 100644
--- a/src/SJZY.Track.Repository/Repositories/TrackPushConfigRepository.cs
+++ b/src/SJZY.Track.Repository/Repositories/TrackPushConfigRepository.cs
@@ -137,9 +137,11 @@ public class TrackPushConfigRepository : BasicRepository,
IsAllPush = a.IsAllPush,
ServiceProviderCode = a.ServiceProviderCode,
OrderType = b.OrderNoType,
- TrackCode = d.Code,
- SwapTrackCode = e.Code,
Sort = b.Sort,
+ TrackContentId = d.Id,
+ TrackCode = d.Code,
+ SwapTrackContentId = e.Id,
+ SwapTrackCode = e.Code,
TrackContentCodeValue = b.TrackContentCodeValue,
TrackContentValue = b.TrackContentValue,
TrackEnContentValue = b.TrackEnContentValue,
diff --git a/src/SJZY.Track.Repository/Repositories/TrackStatusRepository.cs b/src/SJZY.Track.Repository/Repositories/TrackStatusRepository.cs
index eaf191fc..223ba914 100644
--- a/src/SJZY.Track.Repository/Repositories/TrackStatusRepository.cs
+++ b/src/SJZY.Track.Repository/Repositories/TrackStatusRepository.cs
@@ -75,4 +75,20 @@ public class TrackStatusRepository : BasicRepository, ITrackS
return pagedList;
}
+
+ public async Task> GetTrackStatusIdNameDictAsync(HashSet trackStatusIds)
+ {
+ if (trackStatusIds.Count == 0) return new Dictionary(0);
+
+ var result = await Context.Queryable()
+ .Where(x => trackStatusIds.Contains(x.Id))
+ .Select(x => new
+ {
+ x.Id,
+ x.Status
+ })
+ .ToListAsync();
+
+ return result.ToDictionary(x => x.Id, x => x.Status);
+ }
}
diff --git a/src/SJZY.Track.Repository/Repositories/WarningTaskRepository.cs b/src/SJZY.Track.Repository/Repositories/WarningTaskRepository.cs
index c6fb23ac..dee0d095 100644
--- a/src/SJZY.Track.Repository/Repositories/WarningTaskRepository.cs
+++ b/src/SJZY.Track.Repository/Repositories/WarningTaskRepository.cs
@@ -5,7 +5,7 @@ using SJZY.Track.Domain.Aggregates.WarningAggregate.Transport;
namespace SJZY.Track.Repository.Repositories;
-public sealed class WarningTaskRepository : BasicRepository, IWarningTaskRepository
+public sealed class WarningTaskRepository : BasicRepository, IWarningTaskRepository, ITransientDependency
{
#region 预警通知任务