全量推送
This commit is contained in:
parent
3ebbe620af
commit
e85e3244bf
@ -1,4 +1,6 @@
|
||||
using DotNetCore.CAP;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using SJZY.Expand.ABP.Core.PublicMethords;
|
||||
using SJZY.InterfaceRelay.Application.Contracts;
|
||||
using SJZY.Track.Application.Contract.Dtos.TrackPush;
|
||||
using SJZY.Track.Application.Contract.Events;
|
||||
@ -37,17 +39,36 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
|
||||
var order = await _orderRepository.GetFirstAsync(x =>
|
||||
x.Id == @event.OrderId, x => new
|
||||
{
|
||||
x.SubSystemId, x.LatestPushTrackCode, x.CustomId, x.OrderType
|
||||
x.SubSystemId, x.LatestPushTrackCode, x.CustomId
|
||||
});
|
||||
if (order == null) return;
|
||||
|
||||
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)
|
||||
{
|
||||
case OptionType.无:
|
||||
return;
|
||||
case OptionType.新增:
|
||||
if (@event.OperationMan == null) // 系统推送需要推断
|
||||
if (@event.OperationMan == null)
|
||||
{
|
||||
// 推送新增,需要根据上一次的推送 推断 本次推送 是否可行
|
||||
config = await _trackPushCacheService.IsValidPushAsync(order.SubSystemId, order.CustomId,
|
||||
@ -55,16 +76,16 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
|
||||
}
|
||||
else
|
||||
{
|
||||
// 手工推送不推断,直接无脑推
|
||||
// 手工推送单条不推断,直接无脑推
|
||||
config = await _trackPushCacheService.GetPushContentConfigAsync(order.SubSystemId, order.CustomId,
|
||||
@event.TrackCode);
|
||||
if (config is { IsAllPush: true })
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
if (config == null) return;
|
||||
|
||||
// 当前发生的轨迹不是要推送的,直接结束
|
||||
if (config.TrackCode != @event.TrackCode) return;
|
||||
res = await DoAddAsync(@event, config);
|
||||
await DoAddAsync(@event, config, log, allPush);
|
||||
break;
|
||||
case OptionType.删除:
|
||||
break;
|
||||
@ -72,41 +93,16 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
|
||||
config = await _trackPushCacheService.GetPushContentConfigAsync(order.SubSystemId, order.CustomId,
|
||||
@event.TrackCode);
|
||||
if (config == null || !config.IsCanUpdate) return;
|
||||
res = await DoUpdateAsync(@event, config);
|
||||
await DoUpdateAsync(@event, config, log);
|
||||
break;
|
||||
default:
|
||||
throw new ArgumentOutOfRangeException();
|
||||
}
|
||||
|
||||
var isSuccess = res.Code == InterfaceRelayConst.SuccessCode;
|
||||
|
||||
if (config == null) return;
|
||||
|
||||
// 往es 写推送日志
|
||||
await _trackPushRecordsRepository.AddAsync(new TrackPushRecordIndex
|
||||
{
|
||||
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 _trackPushRecordsRepository.AddAsync(log);
|
||||
|
||||
// 同步去更新订单主表
|
||||
await TrackPushAfterUpdateOrderAsync(new TrackPushAfterUpdateOrderDto
|
||||
@ -114,7 +110,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
|
||||
OptionType = @event.OptionType,
|
||||
OrderId = @event.OrderId,
|
||||
TrackCode = @event.TrackCode,
|
||||
IsSuccess = isSuccess,
|
||||
IsSuccess = log.IsSuccess,
|
||||
Message = res.Msg
|
||||
});
|
||||
}
|
||||
@ -149,39 +145,48 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
|
||||
});
|
||||
}
|
||||
|
||||
private async Task<InterfaceRelayUnifyResultDto> DoAddAsync(TrackPushEvent @event,
|
||||
TrackPushContentConfigDto config)
|
||||
private async Task DoAddAsync(TrackPushEvent @event,
|
||||
TrackPushContentConfigDto config, TrackPushRecordIndex log, bool allPush)
|
||||
{
|
||||
var data = new
|
||||
var track = new
|
||||
{
|
||||
orderNo = @event.OrderNo,
|
||||
data = new[]
|
||||
{
|
||||
new
|
||||
{
|
||||
// 推真实的发生地和发生时间(时间是计算后的)
|
||||
location = @event.TrackPlace,
|
||||
date = @event.TrackTime.AddHours(
|
||||
config.TrackTimeZone ?? @event.TrackTimeZone - @event.TrackTimeZone),
|
||||
timeZone = config.TrackTimeZone ?? @event.TrackTimeZone,
|
||||
description = config.TrackEnContentValue,
|
||||
description_cn = config.TrackContentValue,
|
||||
code = config.TrackContentCodeValue,
|
||||
status = config.TrackStatusValue,
|
||||
extra = config.ExpandFieldsValue
|
||||
}
|
||||
}
|
||||
// 推真实的发生地和发生时间(时间是计算后的)
|
||||
location = @event.TrackPlace,
|
||||
date = @event.TrackTime.AddHours(
|
||||
config.TrackTimeZone ?? @event.TrackTimeZone - @event.TrackTimeZone),
|
||||
timeZone = config.TrackTimeZone ?? @event.TrackTimeZone,
|
||||
description = config.TrackEnContentValue,
|
||||
description_cn = config.TrackContentValue,
|
||||
code = config.TrackContentCodeValue,
|
||||
status = config.TrackStatusValue,
|
||||
extra = config.ExpandFieldsValue
|
||||
};
|
||||
|
||||
JObject body = JObject.FromObject(new
|
||||
{
|
||||
orderNo = @event.OrderNo,
|
||||
data = new[] { track }
|
||||
});
|
||||
|
||||
if (allPush)
|
||||
{
|
||||
var history = await _trackPushRecordsRepository.GetLatestTrackPushRecordAsync(@event.OrderId);
|
||||
if (history != default)
|
||||
{
|
||||
body = JObject.Parse(history.PushContent);
|
||||
((JArray)body["data"]!).Add(track);
|
||||
}
|
||||
}
|
||||
|
||||
var res = await _httpClientProxy.Service.ForwardWithSubscribeAsync(InterfaceRelayConst.PushTrackInterfaceCode,
|
||||
config.ServiceProviderCode, data);
|
||||
config.ServiceProviderCode, body);
|
||||
|
||||
return res;
|
||||
log.PushContent = body.ToJson();
|
||||
log.IsSuccess = res.Code == InterfaceRelayConst.SuccessCode;
|
||||
}
|
||||
|
||||
private async Task<InterfaceRelayUnifyResultDto> DoUpdateAsync(TrackPushEvent @event,
|
||||
TrackPushContentConfigDto config)
|
||||
private async Task DoUpdateAsync(TrackPushEvent @event,
|
||||
TrackPushContentConfigDto config, TrackPushRecordIndex log)
|
||||
{
|
||||
var data = new
|
||||
{
|
||||
@ -208,6 +213,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
|
||||
var res = await _httpClientProxy.Service.ForwardWithSubscribeAsync(InterfaceRelayConst.TrackUpdateInterfaceCode,
|
||||
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")]
|
||||
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,
|
||||
|
||||
@ -16,5 +16,10 @@ public interface ITrackPushRecordsRepository
|
||||
/// <returns></returns>
|
||||
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>
|
||||
public int OrderId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 订单号
|
||||
/// </summary>
|
||||
public string OrderNo { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// 订单类型(主数据枚举TrackOrderType)
|
||||
/// </summary>
|
||||
public int OrderType { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 接口通请求Id
|
||||
/// </summary>
|
||||
@ -78,29 +68,9 @@ public class TrackPushRecordIndex : IdBaseIndex
|
||||
public bool IsSuccess { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 轨迹代码参数值
|
||||
/// 推送内容(json)
|
||||
/// </summary>
|
||||
public string? TrackContentCodeValue { get; set; }
|
||||
|
||||
/// <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; }
|
||||
public string PushContent { get; set; } = null!;
|
||||
|
||||
/// <summary>创建人</summary>
|
||||
public string? CreateUser { get; set; }
|
||||
|
||||
@ -41,17 +41,16 @@ public class TrackPushRecordsRepository : ElasticSearchContextAbstract<TrackDeta
|
||||
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
|
||||
.Index(GlobalConst.TrackPushRecordsIndex)
|
||||
.Query(q =>
|
||||
q.Term(t => t.OrderNo.Suffix("keyword"), orderNo)
|
||||
&& q.Term(f => f.OrderType, orderType)
|
||||
q.Term(t => t.OrderId, orderId)
|
||||
)
|
||||
.Size(1000)
|
||||
.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