diff --git a/src/SJZY.Track.Application.Contract/Events/TrackPushAfterUpdateOrderEvent.cs b/src/SJZY.Track.Application.Contract/Events/TrackPushAfterUpdateOrderEvent.cs
index b81b52cc..f57fad41 100644
--- a/src/SJZY.Track.Application.Contract/Events/TrackPushAfterUpdateOrderEvent.cs
+++ b/src/SJZY.Track.Application.Contract/Events/TrackPushAfterUpdateOrderEvent.cs
@@ -2,6 +2,11 @@
public class TrackPushAfterUpdateOrderEvent
{
+ ///
+ /// 操作类型
+ ///
+ public OptionType OptionType { get; set; } = OptionType.新增;
+
///
/// 订单Id
///
@@ -13,12 +18,12 @@ public class TrackPushAfterUpdateOrderEvent
public int TrackContentId { get; set; }
///
- /// 是否成功
+ /// 问题类型
///
public bool IsSuccess { get; set; }
///
- /// 最新描述
+ /// 问题描述
///
public string? Message { get; set; }
}
\ No newline at end of file
diff --git a/src/SJZY.Track.Application.Contract/Events/TrackPushEvent.cs b/src/SJZY.Track.Application.Contract/Events/TrackPushEvent.cs
index c7277eb2..b74281a9 100644
--- a/src/SJZY.Track.Application.Contract/Events/TrackPushEvent.cs
+++ b/src/SJZY.Track.Application.Contract/Events/TrackPushEvent.cs
@@ -68,7 +68,7 @@ public class TrackPushEvent
public string? ExpandFieldsValue { get; set; }
///
- /// 推送人
+ /// 操作人
///
- public string? PushMan { get; set; }
+ public string? OperationMan { get; set; }
}
\ No newline at end of file
diff --git a/src/SJZY.Track.Application/EventHandlers/TrackPushAfterUpdateOrderEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackPushAfterUpdateOrderEventHandler.cs
index a1953f49..a514639e 100644
--- a/src/SJZY.Track.Application/EventHandlers/TrackPushAfterUpdateOrderEventHandler.cs
+++ b/src/SJZY.Track.Application/EventHandlers/TrackPushAfterUpdateOrderEventHandler.cs
@@ -2,6 +2,7 @@
using SJZY.Track.Application.Contract.Events;
using SJZY.Track.Domain.Aggregates.OrderAggregate;
using SJZY.Track.Domain.Consts;
+using SJZY.Track.Domain.Enums;
using Volo.Abp.DependencyInjection;
namespace SJZY.Track.Application.EventHandlers;
@@ -21,16 +22,29 @@ public class TrackPushAfterUpdateOrderEventHandler : ITransientDependency, ICapS
var order = await _orderRepository.GetFirstAsync(x => x.Id == @event.OrderId);
if (order == default) return;
- // 异常:最近一条推送是失败
- // 预警:添加一条推送距离现在超过12h
- // if (!@event.IsSuccess)
- // {
- // order.QuestionType = TrackPushProblemType.Error;
- // }
+ /*
+ * 异常:最近一条推送是失败
+ */
+ if (!@event.IsSuccess)
+ {
+ order.QuestionType = (int)TrackPushProblemType.Error;
+ order.ProblemDescription = @event.Message;
+ }
+ else
+ {
+ order.QuestionType = (int)TrackPushProblemType.None;
+ if (@event.OptionType == OptionType.新增)
+ {
+ // tips:只有新增会影响推送进度?
+ order.LatestPushTrackContentId = @event.TrackContentId;
+ order.LatestPushTime = DateTime.Now;
+ }
+ }
+
await _orderRepository.UpdateColumnAsync(order, x => new
{
- x.LatestPushTrackContentId, x.QuestionType
+ x.LatestPushTrackContentId, x.QuestionType, x.ProblemDescription, x.LatestPushTime
});
}
}
\ No newline at end of file
diff --git a/src/SJZY.Track.Application/EventHandlers/TrackPushEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackPushEventHandler.cs
index b2b977a8..5aa94802 100644
--- a/src/SJZY.Track.Application/EventHandlers/TrackPushEventHandler.cs
+++ b/src/SJZY.Track.Application/EventHandlers/TrackPushEventHandler.cs
@@ -25,24 +25,54 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
[CapSubscribe(GlobalConst.TrackPushSubscribe)]
public async Task ConsumerAsync(TrackPushEvent @event)
{
+ InterfaceRelayUnifyResultDto res = null!;
switch (@event.OptionType)
{
case OptionType.无:
- break;
+ return;
case OptionType.新增:
- await PushAddAsync(@event);
+ res = await PushAddAsync(@event);
break;
case OptionType.删除:
break;
case OptionType.修改:
- await PushUpdateAsync(@event);
+ res = await PushUpdateAsync(@event);
break;
default:
throw new ArgumentOutOfRangeException();
}
+
+ var isSuccess = res.Code == InterfaceRelayConst.SuccessCode;
+
+ // 写推送日志
+ await _trackPushRecordsRepository.AddAsync(new TrackPushRecordIndex
+ {
+ IndexName = $"{GlobalConst.TrackPushRecordsIndex}-{DateTime.Now:yyyy.MM.dd}",
+ RequestId = res.RequestId,
+ Message = res.Msg,
+ OptionType = @event.OptionType.ToString(),
+ TrackPlace = @event.TrackPlace,
+ TrackTime = @event.TrackTime,
+ TrackTimeZone = @event.TrackTimeZone,
+ IsSuccess = isSuccess,
+ IsAuto = @event.OperationMan == null,
+ CreateUser = @event.OperationMan ?? "系统",
+ CreateTime = DateTime.Now
+ });
+
+ // 更新订单主表(异步)
+ await _capPublisher.PublishAsync(GlobalConst.TrackPushAfterUpdateOrderSubscribe,
+ new TrackPushAfterUpdateOrderEvent
+ {
+ OptionType = @event.OptionType,
+ OrderId = @event.OrderId,
+ TrackContentId = @event.TrackContentId,
+ IsSuccess = isSuccess,
+ Message = res.Msg
+ });
}
- private async Task PushAddAsync(TrackPushEvent @event)
+ private async Task PushAddAsync(TrackPushEvent @event)
{
var data = new
{
@@ -68,33 +98,10 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
var res = await _httpClientProxy.Service.ForwardWithSubscribeAsync(InterfaceRelayConst.PushTrackInterfaceCode,
@event.ServiceProviderCode, data);
- var isSuccess = res.Code == InterfaceRelayConst.SuccessCode;
- // 写推送日志
- await _trackPushRecordsRepository.AddAsync(new TrackPushRecordIndex
- {
- IndexName = $"{GlobalConst.TrackPushRecordsIndex}-{DateTime.Now:yyyy.MM.dd}",
- RequestId = res.RequestId,
- OptionType = OptionType.新增,
- TrackPlace = @event.TrackPlace,
- TrackTime = @event.TrackTime,
- TrackTimeZone = @event.TrackTimeZone,
- IsSuccess = isSuccess,
- CreateUser = @event.PushMan ?? "系统",
- CreateTime = DateTime.Now
- });
-
- // 更新订单主表
- await _capPublisher.PublishAsync(GlobalConst.TrackPushAfterUpdateOrderSubscribe,
- new TrackPushAfterUpdateOrderEvent
- {
- OrderId = @event.OrderId,
- TrackContentId = @event.TrackContentId,
- IsSuccess = isSuccess,
- Message = res.Msg
- });
+ return res;
}
- private async Task PushUpdateAsync(TrackPushEvent @event)
+ private async Task PushUpdateAsync(TrackPushEvent @event)
{
var data = new
{
@@ -117,7 +124,9 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
};
- await _httpClientProxy.Service.ForwardWithSubscribeAsync(InterfaceRelayConst.TrackUpdateInterfaceCode,
+ var res = await _httpClientProxy.Service.ForwardWithSubscribeAsync(InterfaceRelayConst.TrackUpdateInterfaceCode,
@event.ServiceProviderCode, data);
+
+ return res;
}
}
\ No newline at end of file
diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackPullService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackPullService.cs
index f1f72e52..de894ef4 100644
--- a/src/SJZY.Track.Application/Services/ProvideServices/TrackPullService.cs
+++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackPullService.cs
@@ -74,7 +74,7 @@ public class TrackPullService : ApplicationService
///
[AllowAnonymous]
[HttpPost("Track/RefreshForTask")]
- public async Task RefreshTrackAsync()
+ public async Task RefreshForTaskAsync()
{
var configs = await _trackPullCacheService.GetAllPullConfigsAsync();
foreach (var config in configs)
diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs
index 1ad3a61c..9c24046b 100644
--- a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs
+++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs
@@ -5,6 +5,7 @@ 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.Enums;
using SJZY.UserCenter.HttpApi.Services;
namespace SJZY.Track.Application.Services.ProvideServices;
@@ -86,7 +87,7 @@ public class TrackPushService : ApplicationService
TrackEnContentValue = config.TrackEnContentValue,
TrackStatusValue = config.TrackStatusValue,
ExpandFieldsValue = config.ExpandFieldsValue,
- PushMan = CurrentUserRequest.CurrentUser.Name,
+ OperationMan = CurrentUserRequest.CurrentUser.Name,
};
await _capPublisher.PublishAsync(GlobalConst.TrackPushSubscribe, trackPushEvent);
@@ -96,4 +97,23 @@ public class TrackPushService : ApplicationService
return $"即将推送轨迹代码{input.TrackCode}给{res}个订单";
}
+
+
+ ///
+ /// 定时任务推送预警(》12小时没有推送的)
+ ///
+ ///
+ [HttpPost("Track/PushWarnForTask")]
+ public async Task PushWarnForTaskAsync()
+ {
+ var time = DateTime.Now.Subtract(TimeSpan.FromHours(12));
+ var orders = await _orderRepository.GetListAsync(x =>
+ !x.IsCompleted && x.QuestionType == 0 && x.LatestPushTime < time);
+
+ orders.ForEach(x => { x.QuestionType = (int)TrackPushProblemType.Warn; });
+
+ await _orderRepository.UpdateRangeAsync(orders, x => new { x.QuestionType });
+
+ return $"成功将{orders.Select(x => x.OrderNo).JoinAsString(",")}置为预警单";
+ }
}
\ 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 3defe94f..2553cb31 100644
--- a/src/SJZY.Track.Domain/Aggregates/OrderAggregate/OrderEntity.cs
+++ b/src/SJZY.Track.Domain/Aggregates/OrderAggregate/OrderEntity.cs
@@ -48,6 +48,12 @@ public class OrderEntity : IFullAuditedBasicEntitys, IAggregateRoot
[SugarColumn(ColumnName = "LatestPushTrackContentId")]
public int? LatestPushTrackContentId { get; set; }
+ ///
+ /// 最新推送时间(异步维护)
+ ///
+ [SugarColumn(ColumnName = "LatestPushTime")]
+ public DateTime? LatestPushTime { get; set; }
+
///
/// 最新轨迹内容(异步维护)
///
@@ -115,10 +121,10 @@ public class OrderEntity : IFullAuditedBasicEntitys, IAggregateRoot
public int QuestionType { get; set; }
///
- /// 问题描述(主数据枚举TrackProblemDescription)
+ /// 问题描述
///
[SugarColumn(ColumnName = "ProblemDescription")]
- public int ProblemDescription { get; set; }
+ public string? ProblemDescription { get; set; }
///
/// 起运港口
diff --git a/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/TrackPushRecordIndex.cs b/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/TrackPushRecordIndex.cs
index 66800c8a..ef9dfb74 100644
--- a/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/TrackPushRecordIndex.cs
+++ b/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/TrackPushRecordIndex.cs
@@ -1,5 +1,4 @@
using Nest;
-using SJZY.Expand.ABP.Common.Enums;
using SJZY.Expand.ElasticSearch;
using SJZY.Track.Domain.Consts;
@@ -18,10 +17,20 @@ public class TrackPushRecordIndex : IdBaseIndex
///
public Guid RequestId { get; set; }
+ ///
+ /// 信息
+ ///
+ public string Message { get; set; } = null!;
+
///
/// 操作类型
///
- public OptionType OptionType { get; set; }
+ public string OptionType { get; set; } = null!;
+
+ ///
+ /// 是否自动推送
+ ///
+ public bool IsAuto { get; set; }
///
/// 轨迹发生地
diff --git a/src/SJZY.Track.Domain/Dtos/Order/GetPageTrackOrderInputVO.cs b/src/SJZY.Track.Domain/Dtos/Order/GetPageTrackOrderInputVO.cs
index c6b966e6..3dd85154 100644
--- a/src/SJZY.Track.Domain/Dtos/Order/GetPageTrackOrderInputVO.cs
+++ b/src/SJZY.Track.Domain/Dtos/Order/GetPageTrackOrderInputVO.cs
@@ -1,10 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace SJZY.Track.Domain.Dtos.Order
+namespace SJZY.Track.Domain.Dtos.Order
{
public class GetPageTrackOrderInputVO : PageInfoInput
{
@@ -97,7 +91,7 @@ namespace SJZY.Track.Domain.Dtos.Order
///
/// 客户id
///
- public int CustomerId { get; set; }
+ public int CustomerId { get; set; }
/////
///// 订单明细(json)
@@ -162,11 +156,11 @@ namespace SJZY.Track.Domain.Dtos.Order
///
/// 问题描述(主数据枚举TrackProblemDescription)
///
- public int ProblemDescription { get; set; }
+ public string? ProblemDescription { get; set; }
///
/// 问题描述名称
///
public string? ProblemDescriptionName { get; set; }
}
-}
+}
\ No newline at end of file
diff --git a/src/SJZY.Track.Repository/Queries/TrackOrderQueries.cs b/src/SJZY.Track.Repository/Queries/TrackOrderQueries.cs
index 73a566d0..108026b9 100644
--- a/src/SJZY.Track.Repository/Queries/TrackOrderQueries.cs
+++ b/src/SJZY.Track.Repository/Queries/TrackOrderQueries.cs
@@ -73,15 +73,6 @@ public class TrackOrderQueries : ISugarRepository, ITrackOrderQueries,
QuestionTypeName = SqlFunc.IF(a.QuestionType == 1).Return("异常").ElseIF(a.QuestionType == 2).Return("预警")
.End(""),
ProblemDescription = a.ProblemDescription,
- ProblemDescriptionName = SqlFunc.IF(a.ProblemDescription == 1).Return("推送异常")
- .ElseIF(a.ProblemDescription == 2).Return("推送预警").End(""),
- //TrackTemplateNames = SqlFunc.Subqueryable()
- // .LeftJoin((aa, bb) => aa.TrackTemplateId == bb.Id)
- // .Where((aa, bb) => a.Id == aa.OrderId).SelectStringJoin((aa, bb) => bb.Name, ","),
-
- //TrackTemplateIds = SqlFunc.Subqueryable()
- // .LeftJoin((aa, bb) => aa.TrackTemplateId == bb.Id)
- // .Where((aa, bb) => a.Id == aa.OrderId).SelectStringJoin((aa, bb) => bb.Id, ","),
NewestTrackContent = a.LatestTrackContent,
NewestTrackEnContent = a.LatestTrackEnContent,
NewestTrackPlace = a.LatestTrackPlace,