全量推送
This commit is contained in:
parent
3ebbe620af
commit
e85e3244bf
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -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,
|
||||||
|
|||||||
@ -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);
|
||||||
}
|
}
|
||||||
@ -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; }
|
||||||
|
|||||||
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue
Block a user