全量推送

This commit is contained in:
李鹏军 2024-04-01 16:07:35 +08:00
parent 3ebbe620af
commit e85e3244bf
6 changed files with 86 additions and 99 deletions

View File

@ -1,4 +1,6 @@
using DotNetCore.CAP; using DotNetCore.CAP;
using Newtonsoft.Json.Linq;
using SJZY.Expand.ABP.Core.PublicMethords;
using SJZY.InterfaceRelay.Application.Contracts; using SJZY.InterfaceRelay.Application.Contracts;
using SJZY.Track.Application.Contract.Dtos.TrackPush; using SJZY.Track.Application.Contract.Dtos.TrackPush;
using SJZY.Track.Application.Contract.Events; using SJZY.Track.Application.Contract.Events;
@ -37,17 +39,36 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
var order = await _orderRepository.GetFirstAsync(x => var order = await _orderRepository.GetFirstAsync(x =>
x.Id == @event.OrderId, x => new x.Id == @event.OrderId, x => new
{ {
x.SubSystemId, x.LatestPushTrackCode, x.CustomId, x.OrderType x.SubSystemId, x.LatestPushTrackCode, x.CustomId
}); });
if (order == null) return; if (order == null) return;
TrackPushContentConfigDto? config = null; TrackPushContentConfigDto? config = null;
var log = new TrackPushRecordIndex
{
IndexName = $"{GlobalConst.TrackPushRecordsIndex}-{DateTime.Now:yyyy.MM.dd}",
RequestId = res.RequestId,
Message = res.Msg,
OptionType = @event.OptionType.ToString(),
OrderId = @event.OrderId,
TrackStatus = @event.TrackStatus,
TrackCode = @event.TrackCode,
TrackContent = @event.TrackContent,
TrackPlace = @event.TrackPlace,
TrackTime = @event.TrackTime,
TrackTimeZone = @event.TrackTimeZone,
CreateUser = @event.OperationMan ?? GlobalConst.SystemUser,
CreateTime = DateTime.Now
};
var allPush = false;
switch (@event.OptionType) switch (@event.OptionType)
{ {
case OptionType.无: case OptionType.无:
return; return;
case OptionType.新增: case OptionType.新增:
if (@event.OperationMan == null) // 系统推送需要推断 if (@event.OperationMan == null)
{ {
// 推送新增,需要根据上一次的推送 推断 本次推送 是否可行 // 推送新增,需要根据上一次的推送 推断 本次推送 是否可行
config = await _trackPushCacheService.IsValidPushAsync(order.SubSystemId, order.CustomId, config = await _trackPushCacheService.IsValidPushAsync(order.SubSystemId, order.CustomId,
@ -55,16 +76,16 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
} }
else else
{ {
// 手工推送不推断,直接无脑推 // 手工推送单条不推断,直接无脑推
config = await _trackPushCacheService.GetPushContentConfigAsync(order.SubSystemId, order.CustomId, config = await _trackPushCacheService.GetPushContentConfigAsync(order.SubSystemId, order.CustomId,
@event.TrackCode); @event.TrackCode);
if (config is { IsAllPush: true })
{
}
} }
if (config == null) return; if (config == null) return;
await DoAddAsync(@event, config, log, allPush);
// 当前发生的轨迹不是要推送的,直接结束
if (config.TrackCode != @event.TrackCode) return;
res = await DoAddAsync(@event, config);
break; break;
case OptionType.删除: case OptionType.删除:
break; break;
@ -72,41 +93,16 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
config = await _trackPushCacheService.GetPushContentConfigAsync(order.SubSystemId, order.CustomId, config = await _trackPushCacheService.GetPushContentConfigAsync(order.SubSystemId, order.CustomId,
@event.TrackCode); @event.TrackCode);
if (config == null || !config.IsCanUpdate) return; if (config == null || !config.IsCanUpdate) return;
res = await DoUpdateAsync(@event, config); await DoUpdateAsync(@event, config, log);
break; break;
default: default:
throw new ArgumentOutOfRangeException(); throw new ArgumentOutOfRangeException();
} }
var isSuccess = res.Code == InterfaceRelayConst.SuccessCode;
if (config == null) return; if (config == null) return;
// 往es 写推送日志 // 往es 写推送日志
await _trackPushRecordsRepository.AddAsync(new TrackPushRecordIndex await _trackPushRecordsRepository.AddAsync(log);
{
IndexName = $"{GlobalConst.TrackPushRecordsIndex}-{DateTime.Now:yyyy.MM.dd}",
RequestId = res.RequestId,
Message = res.Msg,
OptionType = @event.OptionType.ToString(),
OrderId = @event.OrderId,
OrderType = order.OrderType,
OrderNo = @event.OrderNo,
TrackStatus = @event.TrackStatus,
TrackCode = @event.TrackCode,
TrackContent = @event.TrackContent,
TrackPlace = @event.TrackPlace,
TrackTime = @event.TrackTime,
TrackTimeZone = @event.TrackTimeZone,
TrackContentCodeValue = config.TrackContentCodeValue,
TrackContentValue = config.TrackContentValue,
TrackEnContentValue = config.TrackEnContentValue,
TrackStatusValue = config.TrackStatusValue,
ExpandFieldsValue = config.ExpandFieldsValue,
IsSuccess = isSuccess,
CreateUser = @event.OperationMan ?? GlobalConst.SystemUser,
CreateTime = DateTime.Now
});
// 同步去更新订单主表 // 同步去更新订单主表
await TrackPushAfterUpdateOrderAsync(new TrackPushAfterUpdateOrderDto await TrackPushAfterUpdateOrderAsync(new TrackPushAfterUpdateOrderDto
@ -114,7 +110,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
OptionType = @event.OptionType, OptionType = @event.OptionType,
OrderId = @event.OrderId, OrderId = @event.OrderId,
TrackCode = @event.TrackCode, TrackCode = @event.TrackCode,
IsSuccess = isSuccess, IsSuccess = log.IsSuccess,
Message = res.Msg Message = res.Msg
}); });
} }
@ -149,15 +145,10 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
}); });
} }
private async Task<InterfaceRelayUnifyResultDto> DoAddAsync(TrackPushEvent @event, private async Task DoAddAsync(TrackPushEvent @event,
TrackPushContentConfigDto config) TrackPushContentConfigDto config, TrackPushRecordIndex log, bool allPush)
{ {
var data = new var track = new
{
orderNo = @event.OrderNo,
data = new[]
{
new
{ {
// 推真实的发生地和发生时间(时间是计算后的) // 推真实的发生地和发生时间(时间是计算后的)
location = @event.TrackPlace, location = @event.TrackPlace,
@ -169,19 +160,33 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
code = config.TrackContentCodeValue, code = config.TrackContentCodeValue,
status = config.TrackStatusValue, status = config.TrackStatusValue,
extra = config.ExpandFieldsValue extra = config.ExpandFieldsValue
}
}
}; };
JObject body = JObject.FromObject(new
{
orderNo = @event.OrderNo,
data = new[] { track }
});
var res = await _httpClientProxy.Service.ForwardWithSubscribeAsync(InterfaceRelayConst.PushTrackInterfaceCode, if (allPush)
config.ServiceProviderCode, data); {
var history = await _trackPushRecordsRepository.GetLatestTrackPushRecordAsync(@event.OrderId);
return res; if (history != default)
{
body = JObject.Parse(history.PushContent);
((JArray)body["data"]!).Add(track);
}
} }
private async Task<InterfaceRelayUnifyResultDto> DoUpdateAsync(TrackPushEvent @event, var res = await _httpClientProxy.Service.ForwardWithSubscribeAsync(InterfaceRelayConst.PushTrackInterfaceCode,
TrackPushContentConfigDto config) config.ServiceProviderCode, body);
log.PushContent = body.ToJson();
log.IsSuccess = res.Code == InterfaceRelayConst.SuccessCode;
}
private async Task DoUpdateAsync(TrackPushEvent @event,
TrackPushContentConfigDto config, TrackPushRecordIndex log)
{ {
var data = new var data = new
{ {
@ -208,6 +213,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
var res = await _httpClientProxy.Service.ForwardWithSubscribeAsync(InterfaceRelayConst.TrackUpdateInterfaceCode, var res = await _httpClientProxy.Service.ForwardWithSubscribeAsync(InterfaceRelayConst.TrackUpdateInterfaceCode,
config.ServiceProviderCode, data); config.ServiceProviderCode, data);
return res; log.PushContent = data.ToJson();
log.IsSuccess = res.Code == InterfaceRelayConst.SuccessCode;
} }
} }

View File

@ -109,6 +109,13 @@ public class TrackPushService : ApplicationService
[HttpGet("Track/GetTrackPushRecords")] [HttpGet("Track/GetTrackPushRecords")]
public async Task<List<TrackPushRecordIndex>> GetTrackPushRecordsAsync(OrderNoInfo input) public async Task<List<TrackPushRecordIndex>> GetTrackPushRecordsAsync(OrderNoInfo input)
{ {
return await _trackPushRecordsRepository.GetTrackPushRecordsAsync(input.OrderNo, input.OrderType); var orderId = await _orderRepository.GetFirstAsync(x =>
x.OrderType == input.OrderType && input.OrderNo == x.OrderNo, x => x.Id);
if (orderId == default)
{
throw new BusinessException(message: "订单不存在");
}
return await _trackPushRecordsRepository.GetTrackPushRecordsAsync(orderId);
} }
} }

View File

@ -66,7 +66,7 @@ public class TrackPushCacheService : ITrackPushCacheService
} }
} }
return matched != null && matched.TrackCode == trackCode ? matched : default; return matched != null && matched.TrackCode == trackCode && matched.IsAutoPush ? matched : default;
} }
public async Task<List<TrackPushContentConfigDto>?> SetPushContentConfigsAsync(int? id = null, public async Task<List<TrackPushContentConfigDto>?> SetPushContentConfigsAsync(int? id = null,

View File

@ -16,5 +16,10 @@ public interface ITrackPushRecordsRepository
/// <returns></returns> /// <returns></returns>
Task<List<TrackPushRecordIndex>> GetTrackPushRecordsAsync(int orderId); Task<List<TrackPushRecordIndex>> GetTrackPushRecordsAsync(int orderId);
Task<List<TrackPushRecordIndex>> GetTrackPushRecordsAsync(string inputOrderNo, int inputOrderType); /// <summary>
/// 获取最新轨迹推送记录
/// </summary>
/// <param name="orderId"></param>
/// <returns></returns>
Task<TrackPushRecordIndex?> GetLatestTrackPushRecordAsync(int orderId);
} }

View File

@ -17,16 +17,6 @@ public class TrackPushRecordIndex : IdBaseIndex
/// </summary> /// </summary>
public int OrderId { get; set; } public int OrderId { get; set; }
/// <summary>
/// 订单号
/// </summary>
public string OrderNo { get; set; } = null!;
/// <summary>
/// 订单类型(主数据枚举TrackOrderType)
/// </summary>
public int OrderType { get; set; }
/// <summary> /// <summary>
/// 接口通请求Id /// 接口通请求Id
/// </summary> /// </summary>
@ -78,29 +68,9 @@ public class TrackPushRecordIndex : IdBaseIndex
public bool IsSuccess { get; set; } public bool IsSuccess { get; set; }
/// <summary> /// <summary>
/// 轨迹代码参数值 /// 推送内容(json)
/// </summary> /// </summary>
public string? TrackContentCodeValue { get; set; } public string PushContent { get; set; } = null!;
/// <summary>
/// 轨迹内容参数值
/// </summary>
public string? TrackContentValue { get; set; }
/// <summary>
/// 轨迹内容英文参数值
/// </summary>
public string? TrackEnContentValue { get; set; }
/// <summary>
/// 轨迹状态参数值
/// </summary>
public string? TrackStatusValue { get; set; }
/// <summary>
/// 扩展字段参数值
/// </summary>
public string? ExpandFieldsValue { get; set; }
/// <summary>创建人</summary> /// <summary>创建人</summary>
public string? CreateUser { get; set; } public string? CreateUser { get; set; }

View File

@ -41,17 +41,16 @@ public class TrackPushRecordsRepository : ElasticSearchContextAbstract<TrackDeta
return data.Documents.ToList(); return data.Documents.ToList();
} }
public async Task<List<TrackPushRecordIndex>> GetTrackPushRecordsAsync(string orderNo, int orderType) public async Task<TrackPushRecordIndex?> GetLatestTrackPushRecordAsync(int orderId)
{ {
var data = await Context.SearchAsync<TrackPushRecordIndex>(x => x var data = await Context.SearchAsync<TrackPushRecordIndex>(x => x
.Index(GlobalConst.TrackPushRecordsIndex) .Index(GlobalConst.TrackPushRecordsIndex)
.Query(q => .Query(q =>
q.Term(t => t.OrderNo.Suffix("keyword"), orderNo) q.Term(t => t.OrderId, orderId)
&& q.Term(f => f.OrderType, orderType)
) )
.Size(1000) .Size(1000)
.Sort(s => s.Field(f => f.CreateTime, SortOrder.Descending))); .Sort(s => s.Field(f => f.CreateTime, SortOrder.Descending)));
return data.Documents.ToList(); return data.Documents.FirstOrDefault();
} }
} }