diff --git a/src/SJZY.Track.Application.Contract/Dtos/TrackPull/TrackPullParamConfigDto.cs b/src/SJZY.Track.Application.Contract/Dtos/TrackPull/TrackPullParamConfigDto.cs
index 79af5185..c4f65d0b 100644
--- a/src/SJZY.Track.Application.Contract/Dtos/TrackPull/TrackPullParamConfigDto.cs
+++ b/src/SJZY.Track.Application.Contract/Dtos/TrackPull/TrackPullParamConfigDto.cs
@@ -46,4 +46,9 @@ public class TrackPullParamConfigDto
/// 轨迹明细数组路径
///
public string TrackDetailsPath { get; set; } = null!;
+
+ ///
+ /// 轨迹内容代码
+ ///
+ public string? TrackContentCode { get; set; }
}
\ No newline at end of file
diff --git a/src/SJZY.Track.Application.Contract/Events/OrderIdentifier.cs b/src/SJZY.Track.Application.Contract/Events/OrderIdentifier.cs
index 158e64b1..48186952 100644
--- a/src/SJZY.Track.Application.Contract/Events/OrderIdentifier.cs
+++ b/src/SJZY.Track.Application.Contract/Events/OrderIdentifier.cs
@@ -7,4 +7,6 @@ public struct OrderIdentifier
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 b52a95a3..526febd8 100644
--- a/src/SJZY.Track.Application.Contract/Events/TrackChangeAfterUpdateOrderEvent.cs
+++ b/src/SJZY.Track.Application.Contract/Events/TrackChangeAfterUpdateOrderEvent.cs
@@ -41,4 +41,9 @@ public class TrackChangeAfterUpdateOrderEvent
/// 轨迹时区
///
public float TrackTimeZone { get; set; }
+
+ ///
+ /// 根据配置规则,标记拉取时需要的订单Id
+ ///
+ public int[] TriggerPullOrderIds { get; set; } = Array.Empty();
}
\ No newline at end of file
diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/PullChangeBottomLineUpdateOrderEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/PullChangeBottomLineUpdateOrderEventHandler.cs
index 0365727d..cccaf7eb 100644
--- a/src/SJZY.Track.Application/CAP/EventHandlers/PullChangeBottomLineUpdateOrderEventHandler.cs
+++ b/src/SJZY.Track.Application/CAP/EventHandlers/PullChangeBottomLineUpdateOrderEventHandler.cs
@@ -6,6 +6,9 @@ using Volo.Abp.DependencyInjection;
namespace SJZY.Track.Application.CAP.EventHandlers;
+///
+/// 拉去轨迹后,执行了兜底操作还是失败的标记操作
+///
public class PullChangeBottomLineUpdateOrderEventHandler :ITransientDependency, ICapSubscribe
{
private readonly IOrderRepository _orderRepository;
@@ -18,6 +21,6 @@ public class PullChangeBottomLineUpdateOrderEventHandler :ITransientDependency,
[CapSubscribe(GlobalConst.PullChangeBottomLineUpdateOrderSubscribe)]
public async Task ConsumerAsync(PullChangeBottomLineUpdateOrderEvent @event)
{
- await _orderRepository.UpdateBatchIdsAsync(@event.OrderIds, @event.DeficiencyTagValue);
+ var rows =await _orderRepository.UpdateBatchIdsAsync(@event.OrderIds, @event.DeficiencyTagValue);
}
}
\ 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 859fb666..f5766880 100644
--- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackChangeAfterUpdateOrderEventHandler.cs
+++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackChangeAfterUpdateOrderEventHandler.cs
@@ -28,6 +28,7 @@ public class TrackChangeAfterUpdateOrderEventHandler : ITransientDependency, ICa
if (orders.Count == 0) return;
var updateOrders = new List();
+
foreach (var order in orders)
{
if (order.LatestTrackContent != @event.TrackContent)
@@ -45,6 +46,12 @@ public class TrackChangeAfterUpdateOrderEventHandler : ITransientDependency, ICa
order.IsCompleted = @event.IsCompleted;
}
+ // 触发拉取节点
+ if (@event.TriggerPullOrderIds.Contains(order.Id))
+ {
+ order.IsTriggerPull = 1;
+ }
+
order.LatestTrackContent = @event.TrackContent;
order.LatestTrackEnContent = @event.TrackEnContent;
order.LatestTrackPlace = @event.TrackPlace;
diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
index baa3d8b3..cee1dc82 100644
--- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
+++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
@@ -2,11 +2,14 @@
using SJZY.Expand.ABP.Core.Logger;
using SJZY.Expand.ABP.Core.PublicMethords;
using SJZY.Track.Application.Contract.Events;
+using SJZY.Track.Application.Contract.Services;
using SJZY.Track.Domain.Aggregates.OrderAggregate;
using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
using SJZY.Track.Domain.Consts;
+using SJZY.Track.Domain.Dtos.Order;
using SJZY.Track.Domain.Queries;
using Volo.Abp.DependencyInjection;
+using OrderIdentifier = SJZY.Track.Application.Contract.Events.OrderIdentifier;
namespace SJZY.Track.Application.CAP.EventHandlers;
@@ -16,14 +19,16 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
private readonly IProvideQueries _provideQueries;
private readonly ITrackDetailsRepository _trackDetailsRepository;
private readonly ICapPublisher _capPublisher;
+ private readonly ITrackPullCacheService _trackPullCacheService;
public TrackUpsertEventHandler(IOrderRepository orderRepository, ICapPublisher capPublisher,
- IProvideQueries provideQueries, ITrackDetailsRepository trackDetailsRepository)
+ IProvideQueries provideQueries, ITrackDetailsRepository trackDetailsRepository, ITrackPullCacheService trackPullCacheService)
{
_orderRepository = orderRepository;
_capPublisher = capPublisher;
_provideQueries = provideQueries;
_trackDetailsRepository = trackDetailsRepository;
+ _trackPullCacheService = trackPullCacheService;
}
[CapSubscribe(GlobalConst.TrackUpsertSubscribe, Group = GlobalConst.TrackUpsertSubscribe)]
@@ -100,7 +105,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
}
}
}
-
+
private async Task HandleTrackAsync(TrackUpsertEvent @event, List canNextOrderIds)
{
var content = await _provideQueries.GetTrackContentAsync(@event.SubSystemId, @event.TrackCode);
@@ -114,7 +119,9 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
var trackContents = await _provideQueries.MatchTrackContentAsync(newOrderIds, @event.TrackCode);
var insertTracks = new List();
+ var triggerPullOrder = new List();
+ var providerDic=await GetProviderDic(orderIds);
foreach (var order in @event.OrderIdentifiers)
{
var track = tracks.FirstOrDefault(x => x.OrderId == order.OrderId);
@@ -170,13 +177,24 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
}
canNextOrderIds.Add(order.OrderId);
+
+ if(!providerDic.TryGetValue(order.OrderId,out var provider))
+ continue;
+
+ var config =
+ await _trackPullCacheService.GetPullParamWithContentConfigAsync(provider.SubSystemId,
+ provider.ServiceProviderId);
+ if (config!=null && config.ParamConfig!=null && config.ParamConfig.TrackContentCode == @event.TrackCode)
+ {
+ triggerPullOrder.Add(order.OrderId);
+ }
}
if (canNextOrderIds.Count == 0) return;
// 批量add to es
await _trackDetailsRepository.AddManyAsync(insertTracks);
-
+
// 触发订单主表更新事件(异步)
await _capPublisher.PublishAsync(GlobalConst.TrackChangeAfterUpdateOrderSubscribe,
new TrackChangeAfterUpdateOrderEvent
@@ -188,7 +206,8 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
TrackStatusId = content.TrackStatusId,
TrackPlace = @event.TrackPlace,
TrackTime = @event.TrackTime,
- TrackTimeZone = @event.TrackTimeZone
+ TrackTimeZone = @event.TrackTimeZone,
+ TriggerPullOrderIds = triggerPullOrder.ToArray()
});
// 触发轨迹推送事件(异步)
@@ -215,4 +234,17 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
await _capPublisher.PublishAsync(GlobalConst.TrackPushSubscribe, trackPushEvent);
}
}
+
+ ///
+ /// 获取服务商字典
+ ///
+ ///
+ ///
+ private async Task> GetProviderDic(int[] orderIds)
+ {
+ var providerList = await _provideQueries.FindOrderWithServiceProviderAsync(orderIds);
+ return providerList.GroupBy(val => val.OrderId)
+ .ToDictionary(val => val.Key, val => val.First());
+ }
+
}
\ No newline at end of file
diff --git a/src/SJZY.Track.Domain/Aggregates/OrderAggregate/OrderEntity.cs b/src/SJZY.Track.Domain/Aggregates/OrderAggregate/OrderEntity.cs
index 4aefeac6..51e8d0e6 100644
--- a/src/SJZY.Track.Domain/Aggregates/OrderAggregate/OrderEntity.cs
+++ b/src/SJZY.Track.Domain/Aggregates/OrderAggregate/OrderEntity.cs
@@ -167,7 +167,13 @@ public class OrderEntity : IFullAuditedBasicEntitys, IAggregateRoot
///
[SugarColumn(ColumnName = "ArrivalProvince")]
public string? ArrivalProvince { get; set; }
-
+
+ ///
+ /// 是否触发拉取,1表示触发
+ ///
+ [SugarColumn(ColumnName = "IsTriggerPull")]
+ public short? IsTriggerPull { get; set; }
+
[SugarColumn(IsIgnore = true)] public List OrderFlights { get; set; }
[SugarColumn(IsIgnore = true)] public List OrderTemplates { get; set; }
diff --git a/src/SJZY.Track.Domain/Aggregates/TrackPullAggregate/TrackPushPullParamsConfigEntity.cs b/src/SJZY.Track.Domain/Aggregates/TrackPullAggregate/TrackPushPullParamsConfigEntity.cs
index 59ea07e1..9687307f 100644
--- a/src/SJZY.Track.Domain/Aggregates/TrackPullAggregate/TrackPushPullParamsConfigEntity.cs
+++ b/src/SJZY.Track.Domain/Aggregates/TrackPullAggregate/TrackPushPullParamsConfigEntity.cs
@@ -89,4 +89,10 @@ public class TrackPushPullParamsConfigEntity : IFullAuditedBasicEntitys, IEntity
///
[SugarColumn(ColumnName = "ExpandFieldsName")]
public string? ExpandFieldsName { get; set; }
+
+ ///
+ /// 轨迹内容代码
+ ///
+ [SugarColumn(ColumnName = "TrackContentCode")]
+ public string? TrackContentCode { get; set; }
}
\ No newline at end of file
diff --git a/src/SJZY.Track.Domain/Dtos/Order/OrderTransportDto.cs b/src/SJZY.Track.Domain/Dtos/Order/OrderTransportDto.cs
new file mode 100644
index 00000000..d7d03691
--- /dev/null
+++ b/src/SJZY.Track.Domain/Dtos/Order/OrderTransportDto.cs
@@ -0,0 +1,10 @@
+namespace SJZY.Track.Domain.Dtos.Order;
+
+public class OrderTransportDto
+{
+ public int OrderId { get; set; }
+
+ public int ServiceProviderId { get; set; }
+
+ public int SubSystemId { get; set; }
+}
\ No newline at end of file
diff --git a/src/SJZY.Track.Domain/Dtos/TrackPull/GetTrackPullConfigDetailOutputVO.cs b/src/SJZY.Track.Domain/Dtos/TrackPull/GetTrackPullConfigDetailOutputVO.cs
index c52c081b..dbe0b308 100644
--- a/src/SJZY.Track.Domain/Dtos/TrackPull/GetTrackPullConfigDetailOutputVO.cs
+++ b/src/SJZY.Track.Domain/Dtos/TrackPull/GetTrackPullConfigDetailOutputVO.cs
@@ -78,4 +78,9 @@ public class GetTrackPullConfigDetailOutputVO
/// 轨迹明细路径
///
public string TrackDetailsPath { get; set; }
+
+ ///
+ /// 轨迹内容代码
+ ///
+ public string? TrackContentCode { get; set; }
}
\ No newline at end of file
diff --git a/src/SJZY.Track.Domain/Queries/IProvideQueries.cs b/src/SJZY.Track.Domain/Queries/IProvideQueries.cs
index e01e5a50..6392d05e 100644
--- a/src/SJZY.Track.Domain/Queries/IProvideQueries.cs
+++ b/src/SJZY.Track.Domain/Queries/IProvideQueries.cs
@@ -68,4 +68,11 @@ public interface IProvideQueries
int pageSize = 1000);
Task GetTrackContentAsync(int subSystemId, string trackCode);
+
+ ///
+ /// 查找订单和服务商信息
+ ///
+ /// 订单id
+ /// 订单和服务商信息
+ Task> FindOrderWithServiceProviderAsync(int[] orderIds);
}
\ No newline at end of file
diff --git a/src/SJZY.Track.Repository/Queries/ProvideQueries.cs b/src/SJZY.Track.Repository/Queries/ProvideQueries.cs
index 5ffffe7a..60043689 100644
--- a/src/SJZY.Track.Repository/Queries/ProvideQueries.cs
+++ b/src/SJZY.Track.Repository/Queries/ProvideQueries.cs
@@ -122,7 +122,7 @@ public class ProvideQueries : ISugarRepository, IProvideQueries,
return await Context.Queryable()
.RightJoin((a, b) => a.Id == b.OrderId)
.LeftJoin((a, b, c) => b.ServiceProviderId == c.Id)
- .Where((a, b) => b.ServiceProviderId == serviceProvider && !a.IsCompleted)
+ .Where((a, b) => b.ServiceProviderId == serviceProvider && !a.IsCompleted && a.IsTriggerPull==1)
.Select((a, b, c) => new OrderWithServiceProviderVO
{
OrderNo = a.OrderNo,
@@ -136,6 +136,20 @@ public class ProvideQueries : ISugarRepository, IProvideQueries,
.Take(pageSize)
.ToListAsync();
}
+
+ public async Task> FindOrderWithServiceProviderAsync(int[] orderIds)
+ {
+ return await Context.Queryable()
+ .InnerJoin((a, b) => a.Id == b.OrderId)
+ .Where((a, b) => orderIds.Contains( a.Id) && !a.IsCompleted)
+ .Select((a, b) => new OrderTransportDto
+ {
+ OrderId = a.Id,
+ ServiceProviderId = b.ServiceProviderId,
+ SubSystemId = a.SubSystemId
+ })
+ .ToListAsync();
+ }
public async Task GetTrackContentAsync(int subSystemId, string trackCode)
{
diff --git a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs
index aa825973..6f2130ae 100644
--- a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs
+++ b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs
@@ -1,5 +1,6 @@
using SJZY.Track.Domain;
using SJZY.Track.Domain.Aggregates.OrderAggregate;
+using SJZY.Track.Domain.Consts;
using SJZY.Track.Domain.Dtos.Order;
namespace SJZY.Track.Repository.Repositories;
@@ -21,7 +22,9 @@ public class OrderRepository : BasicRepository, IOrderRepository, I
public Task UpdateBatchIdsAsync(List ids, int newValue)
{
- return Context.Ado.ExecuteCommandAsync("UPDATE `t_order` SET `DeficiencyTag` = @newValue WHERE `Id` IN @ids", new { ids, newValue });
+ var idsString = string.Join(",", ids);
+ return Context.Ado.ExecuteCommandAsync(
+ $"UPDATE `t_order` SET `DeficiencyTag` = @newValue ,UpdateTime= current_timestamp WHERE `Id` IN ({idsString})", new { newValue });
}
public async Task UpdateOrderAsync(OrderEntity order)
diff --git a/src/SJZY.Track.Repository/Repositories/TrackPullConfigRepository.cs b/src/SJZY.Track.Repository/Repositories/TrackPullConfigRepository.cs
index b3267e8a..41d9053b 100644
--- a/src/SJZY.Track.Repository/Repositories/TrackPullConfigRepository.cs
+++ b/src/SJZY.Track.Repository/Repositories/TrackPullConfigRepository.cs
@@ -72,7 +72,8 @@ public class TrackPullConfigRepository : BasicRepository,
{
Id = trackPull.Id,
SubSystem = system.CnName,
- ServiceProvider = service.Name
+ ServiceProvider = service.Name,
+ TrackContentCode = paramsConfig.TrackContentCode
}, true)
.SingleAsync();
}