Merge branch 'S07' into test
This commit is contained in:
commit
42dc20ec33
@ -10,6 +10,7 @@ using SJZY.Track.Domain.Dtos.Forewarning;
|
|||||||
using SJZY.Track.Domain.Dtos.TrackDetails;
|
using SJZY.Track.Domain.Dtos.TrackDetails;
|
||||||
using SJZY.Track.Domain.Dtos.Warning;
|
using SJZY.Track.Domain.Dtos.Warning;
|
||||||
using SJZY.Track.Domain.Enums;
|
using SJZY.Track.Domain.Enums;
|
||||||
|
using SJZY.Track.Domain.Extensions;
|
||||||
using Volo.Abp.DependencyInjection;
|
using Volo.Abp.DependencyInjection;
|
||||||
|
|
||||||
namespace SJZY.Track.Application.Services.Warning.Handlers;
|
namespace SJZY.Track.Application.Services.Warning.Handlers;
|
||||||
@ -56,12 +57,8 @@ public class TransportWarningHandler : ITransportWarningHandler, ITransientDepen
|
|||||||
.ToDictionary(x => x.Key, y => y.Select(z => z.DeletedTrack.TrackStatusId).ToHashSet());
|
.ToDictionary(x => x.Key, y => y.Select(z => z.DeletedTrack.TrackStatusId).ToHashSet());
|
||||||
if (orderIdTrackStatusIdsDict.Count == 0) return;
|
if (orderIdTrackStatusIdsDict.Count == 0) return;
|
||||||
|
|
||||||
// 2.查询订单包含的轨迹,并筛选和删除的轨迹状态一致(tips:由于已经是删除,查询出的轨迹不会包含当前已经删除的轨迹)
|
// 2.查询订单每个状态最早轨迹的字点(tips:由于已经是删除,查询出的轨迹不会包含当前已经删除的轨迹)
|
||||||
var orderTracksDict = await _trackDetailsEsRepository.GetOrderTracksDictAsync(new GetOrderTracksDictVO
|
var trackStatusEarliestDict = await _trackDetailsEsRepository.GetTrackStatusEarliestDictAsync(orderIds);
|
||||||
{
|
|
||||||
// tips:要求订单id+轨迹状态id同时满足的轨迹
|
|
||||||
OrderIdTracksStatusIdsDict = orderIdTrackStatusIdsDict
|
|
||||||
});
|
|
||||||
|
|
||||||
// 3.查订单的运输时效预警明细,命中起始轨迹状态的(即将超时/已超时)
|
// 3.查订单的运输时效预警明细,命中起始轨迹状态的(即将超时/已超时)
|
||||||
var warningDetails = await _warningDetailsEsRepository.GetTransportWarningDetailsAsync(new GetTransportWarningDetailsVO
|
var warningDetails = await _warningDetailsEsRepository.GetTransportWarningDetailsAsync(new GetTransportWarningDetailsVO
|
||||||
@ -98,16 +95,16 @@ public class TransportWarningHandler : ITransportWarningHandler, ITransientDepen
|
|||||||
// 以订单的维度处理预警明细
|
// 以订单的维度处理预警明细
|
||||||
foreach (var orderId in orderIds)
|
foreach (var orderId in orderIds)
|
||||||
{
|
{
|
||||||
var orderDetails = orderDetailsDict.GetValueOrDefault(orderId, new List<TransportWarningDetailsIndex>(0));
|
var orderDetails = orderDetailsDict.GetValueOrDefault(orderId, Empty<TransportWarningDetailsIndex>.List);
|
||||||
var orderTracks = orderTracksDict.GetValueOrDefault(orderId, new List<TrackDetailsIndex>(0));
|
var orderTrackStatusEarliestDict = trackStatusEarliestDict.GetValueOrDefault(orderId, new Dictionary<int, TrackDetailsIndex>(0));
|
||||||
var orderTasks = oderGenerateTaskDict.GetValueOrDefault(orderId, new List<TransportWarningDetailsGenerateTaskEntity>(0));
|
var orderTasks = oderGenerateTaskDict.GetValueOrDefault(orderId, Empty<TransportWarningDetailsGenerateTaskEntity>.List);
|
||||||
|
|
||||||
// 明细和生成任务都不存在跳过
|
// 明细和生成任务都不存在跳过
|
||||||
if (orderDetails.Count == 0 && orderTasks.Count == 0)
|
if (orderDetails.Count == 0 && orderTasks.Count == 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// 起始轨迹状态全部被删除
|
// 轨迹全部被删除直接关闭即可
|
||||||
if (orderTracks.Count == 0)
|
if (orderTrackStatusEarliestDict.Count == 0)
|
||||||
{
|
{
|
||||||
orderDetails.ForEach(x =>
|
orderDetails.ForEach(x =>
|
||||||
{
|
{
|
||||||
@ -120,18 +117,13 @@ public class TransportWarningHandler : ITransportWarningHandler, ITransientDepen
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 构建轨迹状态id+最早轨迹字典
|
|
||||||
var earliestTrackStatusTrackDict = orderTracks
|
|
||||||
.GroupBy(x => x.TrackStatusId)
|
|
||||||
.ToDictionary(x => x.Key, y => y.OrderBy(x => x.TrackTime).First());
|
|
||||||
|
|
||||||
// 以起始轨迹状态id分组处理预警生成任务
|
// 以起始轨迹状态id分组处理预警生成任务
|
||||||
foreach (var group in orderTasks.GroupBy(x => x.StartTrackStatusId))
|
foreach (var group in orderTasks.GroupBy(x => x.StartTrackStatusId))
|
||||||
{
|
{
|
||||||
var tasks = group.ToList();
|
var tasks = group.ToList();
|
||||||
|
|
||||||
// 尝试寻找该轨迹状态的最早轨迹
|
// 尝试寻找该轨迹状态的最早轨迹
|
||||||
var earliestTrack = earliestTrackStatusTrackDict.GetValueOrDefault(group.Key);
|
var earliestTrack = orderTrackStatusEarliestDict.GetValueOrDefault(group.Key);
|
||||||
|
|
||||||
// 不存在起始轨迹状态轨迹?
|
// 不存在起始轨迹状态轨迹?
|
||||||
// 关闭预警生成任务
|
// 关闭预警生成任务
|
||||||
@ -160,7 +152,7 @@ public class TransportWarningHandler : ITransportWarningHandler, ITransientDepen
|
|||||||
var details = group.ToList();
|
var details = group.ToList();
|
||||||
|
|
||||||
// 尝试寻找该轨迹状态的最早轨迹
|
// 尝试寻找该轨迹状态的最早轨迹
|
||||||
var earliestTrack = earliestTrackStatusTrackDict.GetValueOrDefault(group.Key);
|
var earliestTrack = orderTrackStatusEarliestDict.GetValueOrDefault(group.Key);
|
||||||
|
|
||||||
// 不存在起始轨迹状态轨迹?
|
// 不存在起始轨迹状态轨迹?
|
||||||
// 1.关闭预警通知任务
|
// 1.关闭预警通知任务
|
||||||
|
|||||||
@ -98,7 +98,10 @@ public sealed class TransportWarningDetailsIndex : IdBaseIndex
|
|||||||
|
|
||||||
public int CalcStatus(TrackDetailsIndex? startStatusTrack, TrackDetailsIndex? endStatusTrack)
|
public int CalcStatus(TrackDetailsIndex? startStatusTrack, TrackDetailsIndex? endStatusTrack)
|
||||||
{
|
{
|
||||||
if (Status == (int) TransportWarningStatus.已关闭) return Status;
|
// 已关闭/起始轨迹为空,直接返回已关闭
|
||||||
|
if (Status == (int) TransportWarningStatus.已关闭 || startStatusTrack == null)
|
||||||
|
return Status = (int) TransportWarningStatus.已关闭;
|
||||||
|
|
||||||
var isEnd = endStatusTrack != null;
|
var isEnd = endStatusTrack != null;
|
||||||
//时效
|
//时效
|
||||||
var transportTimeSpan = TimeSpan.FromHours(TransportTimeSpan); //小时
|
var transportTimeSpan = TimeSpan.FromHours(TransportTimeSpan); //小时
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user