diff --git a/src/SJZY.Track.Application.Contract/SJZY.Track.Application.Contract.csproj b/src/SJZY.Track.Application.Contract/SJZY.Track.Application.Contract.csproj index fe8765ac..1b129506 100644 --- a/src/SJZY.Track.Application.Contract/SJZY.Track.Application.Contract.csproj +++ b/src/SJZY.Track.Application.Contract/SJZY.Track.Application.Contract.csproj @@ -5,7 +5,7 @@ net7.0 True - 1.0.3 + 7.0.0 True diff --git a/src/SJZY.Track.Application.Contract/Services/IOrderService.cs b/src/SJZY.Track.Application.Contract/Services/IOrderService.cs index 0dd34413..adff3b24 100644 --- a/src/SJZY.Track.Application.Contract/Services/IOrderService.cs +++ b/src/SJZY.Track.Application.Contract/Services/IOrderService.cs @@ -10,19 +10,19 @@ public interface IOrderService : IRemoteService /// /// /// - Task UpsertAsync(UpsertOrderInput input); + Task UpsertAsync(UpsertOrderInput input); /// /// 删除订单 /// /// /// - Task DeleteOrderAsync(DeleteOrderInput input); + Task DeleteOrderAsync(DeleteOrderInput input); /// /// 关联订单 /// /// /// - Task LinkOrderAsync(LinkOrderInput input); + Task LinkOrderAsync(LinkOrderInput input); } \ No newline at end of file diff --git a/src/SJZY.Track.Application.Contract/Services/ITrackService.cs b/src/SJZY.Track.Application.Contract/Services/ITrackService.cs index 1b0ec5b5..31dae617 100644 --- a/src/SJZY.Track.Application.Contract/Services/ITrackService.cs +++ b/src/SJZY.Track.Application.Contract/Services/ITrackService.cs @@ -10,21 +10,21 @@ public interface ITrackService : IRemoteService /// /// /// - Task UpsertTrackAsync(UpsertTrackInput input); + Task UpsertTrackAsync(UpsertTrackInput input); /// /// 删除轨迹 /// /// /// - Task DeleteTrackAsync(DeleteTrackInput input); + Task DeleteTrackAsync(DeleteTrackInput input); /// /// 批量删除轨迹 /// /// /// - Task BatchDeleteTrackAsync(BatchDeleteTrackInput input); + Task BatchDeleteTrackAsync(BatchDeleteTrackInput input); /// /// 根据订单号获取轨迹 diff --git a/src/SJZY.Track.Application/Services/ProvideServices/OrderService.Link.cs b/src/SJZY.Track.Application/Services/ProvideServices/OrderService.Link.cs index 88eb9530..1f5e0446 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/OrderService.Link.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/OrderService.Link.cs @@ -22,13 +22,14 @@ public partial class OrderService /// /// [HttpPost("Order/Link")] - public async Task LinkOrderAsync(LinkOrderInput input) + public async Task LinkOrderAsync(LinkOrderInput input) { var order = await _orderRepository.GetFirstAsync(x => x.OrderType == input.OrderType && x.OrderNo == input.OrderNo, x => new - { - x.Id, x.SubSystemId - }); + { + x.Id, + x.SubSystemId + }); if (order == default) { throw new BusinessException(message: $"订单:{input.OrderNo}不存在"); @@ -40,7 +41,7 @@ public partial class OrderService throw new BusinessException(message: "不能同级关联"); } - if (input.LinkOrderNos.Count < 1 || input.LinkOrderType == 0) return true; + if (input.LinkOrderNos.Count < 1 || input.LinkOrderType == 0) return new UnifyResultDto(true); // 单号去重,去空,去自己 input.LinkOrderNos = input.LinkOrderNos @@ -64,7 +65,7 @@ public partial class OrderService }); } - return true; + return new UnifyResultDto(true, true); } private async Task> DoLinkOrderAsync(LinkOrderInput input, int orderId) @@ -97,7 +98,7 @@ public partial class OrderService return canLinkOrders.Select(x => x.Id).ToList(); } - private async Task UnLinkOrderAsync(LinkOrderInput input) + private async Task UnLinkOrderAsync(LinkOrderInput input) { var unLinkIds = await _orderLinkQuery.GetListAsync(x => x.OrderType == input.OrderType && x.OrderNo == input.OrderNo && @@ -107,6 +108,6 @@ public partial class OrderService // real del await _orderRepository.UnLinkByIdsAsync(unLinkIds); - return true; + return new UnifyResultDto(true, true); } } \ No newline at end of file diff --git a/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs b/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs index 712b775c..d1086bf7 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs @@ -30,7 +30,7 @@ public partial class OrderService : ApplicationService, IOrderService /// /// [HttpPost("Order/Upsert")] - public async Task UpsertAsync(UpsertOrderInput input) + public async Task UpsertAsync(UpsertOrderInput input) { if (input.Templates.Count == 0) throw new BusinessException(message: "至少有一个模板"); var order = await _orderRepository.GetFirstAsync(x => @@ -39,7 +39,8 @@ public partial class OrderService : ApplicationService, IOrderService { // 订单已存在则视为更新 await UpdateOrderAsync(input, order); - return "更新成功"; + + return new UnifyResultDto() { Code = "200", Msg = "操作成功", Data = "创建成功" }; } order = ObjectMapper.Map(input); @@ -48,7 +49,7 @@ public partial class OrderService : ApplicationService, IOrderService order.OrderFlights = ObjectMapper.Map, List>(input.FlightInfos); await _orderRepository.CreateOrderAsync(order); - return "创建成功"; + return new UnifyResultDto() { Code = "200", Msg = "操作成功", Data = "新增成功" }; } /// @@ -58,7 +59,7 @@ public partial class OrderService : ApplicationService, IOrderService /// /// [HttpPost("Order/Delete")] - public async Task DeleteOrderAsync(DeleteOrderInput input) + public async Task DeleteOrderAsync(DeleteOrderInput input) { var orderId = await _orderRepository.GetFirstAsync(x => x.OrderType == input.OrderType && x.OrderNo == input.OrderNo, x => x.Id); @@ -69,7 +70,7 @@ public partial class OrderService : ApplicationService, IOrderService await _orderRepository.DeleteOrderAsync(orderId); - return true; + return new UnifyResultDto(true, true); } private async Task UpdateOrderAsync(UpdateOrderInput input, OrderEntity order) diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs index 78611294..ab655a04 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs @@ -7,7 +7,6 @@ using SJZY.Track.Domain.Aggregates.OrderAggregate; using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate; using SJZY.Track.Domain.Aggregates.TrackPushAggregate; using SJZY.Track.Domain.Consts; -using SJZY.Track.Domain.Enums; using SJZY.UserCenter.HttpApi.Services; namespace SJZY.Track.Application.Services.ProvideServices; @@ -120,20 +119,9 @@ public class TrackPushService : ApplicationService [HttpPost("Track/PushWarnForTask")] public async Task PushWarnForTaskAsync() { - var orders = await _orderRepository.GetPushWarnOrdersAsync(); - - var time = DateTime.Now.Subtract(TimeSpan.FromHours(12)); - - orders.ForEach(x => - { - x.QuestionType = x.LatestPushTime == null || x.LatestPushTime < time - ? (int)TrackProblemType.Warn - : (int)TrackProblemType.None; - }); - - await _orderRepository.UpdateRangeAsync(orders, x => new { x.QuestionType }); - - return $"成功将:{orders.Count(x => x.QuestionType == (int)TrackProblemType.Warn)}个订单置为预警"; + // todo:订单数据上来后一次性update是否会引发长时间X独占? + var count = await _orderRepository.PushWarnOrdersAsync(); + return $"本次预警扫描了:{count}个订单"; } /// diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs index 72fe2f20..ab387b25 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs @@ -38,13 +38,17 @@ public partial class TrackService : ApplicationService, ITrackService /// /// [HttpPost("Track/Upsert")] - public async Task UpsertTrackAsync(UpsertTrackInput input) + public async Task UpsertTrackAsync(UpsertTrackInput input) { var order = await _orderRepository.GetFirstAsync(x => x.OrderType == input.OrderType && x.OrderNo == input.OrderNo, x => new - { - x.Id, x.SubSystemId, x.LatestPushTrackContentId, x.CustomId, x.IsCompleted - }); + { + x.Id, + x.SubSystemId, + x.LatestPushTrackContentId, + x.CustomId, + x.IsCompleted + }); if (order == default) { throw new BusinessException(message: $"订单:{input.OrderNo}不存在"); @@ -59,7 +63,7 @@ public partial class TrackService : ApplicationService, ITrackService @event.IsCompleted = order.IsCompleted; @event.OperationMan = CurrentUserRequest.CurrentUser.Name; await _capPublisher.PublishAsync(GlobalConst.TrackUpsertSubscribe, @event); - return true; + return new UnifyResultDto(true, true); } /// @@ -69,7 +73,7 @@ public partial class TrackService : ApplicationService, ITrackService /// /// [HttpPost("Track/BatchUpsert")] - public async Task BatchUpsertTrackAsync(BatchUpsertTrackInput input) + public async Task BatchUpsertTrackAsync(BatchUpsertTrackInput input) { input.OrderNos = input.OrderNos.Where(x => !x.IsNullOrWhiteSpace()).Distinct().ToList(); // 单号去重、去空 if (input.OrderNos.Count == 0) @@ -79,9 +83,14 @@ public partial class TrackService : ApplicationService, ITrackService var orders = await _orderRepository.GetListAsync(x => x.OrderType == input.OrderType && input.OrderNos.Contains(x.OrderNo), x => new - { - x.Id, x.OrderNo, x.SubSystemId, x.LatestPushTrackContentId, x.CustomId, x.IsCompleted - }); + { + x.Id, + x.OrderNo, + x.SubSystemId, + x.LatestPushTrackContentId, + x.CustomId, + x.IsCompleted + }); foreach (var order in orders) { @@ -105,7 +114,7 @@ public partial class TrackService : ApplicationService, ITrackService await _capPublisher.PublishAsync(GlobalConst.TrackUpsertSubscribe, @event); } - return true; + return new UnifyResultDto(true, true); } /// @@ -115,13 +124,14 @@ public partial class TrackService : ApplicationService, ITrackService /// /// [HttpPost("Track/Delete")] - public async Task DeleteTrackAsync(DeleteTrackInput input) + public async Task DeleteTrackAsync(DeleteTrackInput input) { var order = await _orderRepository.GetFirstAsync(x => x.OrderType == input.OrderType && x.OrderNo == input.OrderNo, x => new - { - x.Id, x.SubSystemId - }); + { + x.Id, + x.SubSystemId + }); if (order == default) { throw new BusinessException(message: $"订单:{input.OrderNo}不存在"); @@ -144,7 +154,7 @@ public partial class TrackService : ApplicationService, ITrackService }; await _capPublisher.PublishAsync(GlobalConst.TrackDeleteSubscribe, @event); - return true; + return new UnifyResultDto(true, true); } /// @@ -154,13 +164,14 @@ public partial class TrackService : ApplicationService, ITrackService /// /// [HttpPost("Track/BatchDelete")] - public async Task BatchDeleteTrackAsync(BatchDeleteTrackInput input) + public async Task BatchDeleteTrackAsync(BatchDeleteTrackInput input) { var orders = await _orderRepository.GetListAsync(x => x.OrderType == input.OrderType && input.OrderNos.Contains(x.OrderNo) , x => new { - x.Id, x.SubSystemId + x.Id, + x.SubSystemId }); var codes = await _provideQueries.GetCanDeleteTrackCodesAsync( @@ -185,6 +196,6 @@ public partial class TrackService : ApplicationService, ITrackService await _capPublisher.PublishAsync(GlobalConst.TrackDeleteSubscribe, @event); } - return true; + return new UnifyResultDto(true, true); } } \ No newline at end of file diff --git a/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderRepository.cs b/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderRepository.cs index 10832b40..7eaf030f 100644 --- a/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderRepository.cs +++ b/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderRepository.cs @@ -26,10 +26,10 @@ public interface IOrderRepository : IBasicRepository Task DeleteOrderAsync(int orderId); /// - /// 获取推送预警单 + /// 更新推送预警单 /// /// - Task> GetPushWarnOrdersAsync(); + Task PushWarnOrdersAsync(); #region 订单关联 diff --git a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs index bbbdca05..b6b49e77 100644 --- a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs @@ -1,8 +1,6 @@ using SJZY.Track.Domain; using SJZY.Track.Domain.Aggregates.OrderAggregate; -using SJZY.Track.Domain.Aggregates.TrackPushAggregate; using SJZY.Track.Domain.Dtos.Order; -using SJZY.Track.Domain.Enums; namespace SJZY.Track.Repository.Repositories; @@ -55,21 +53,16 @@ public class OrderRepository : BasicRepository, IOrderRepository, I tran.Complete(); } - public async Task> GetPushWarnOrdersAsync() + public async Task PushWarnOrdersAsync() { - var errorType = (int)TrackProblemType.Error; - - return await Context.Queryable() - .LeftJoin((a, b) => a.SubSystemId == b.SubSystemId && a.CustomId == b.CustomId) - .Where((a, b) => !b.IsCompleted && b.QuestionType != errorType) - .Where("a.CreateTime < DATE_SUB(now(),INTERVAL 12 hour)") // 过滤掉创建时间不足12小时的 - .Select((a, b) => new OrderEntity - { - Id = b.Id, - QuestionType = b.QuestionType, - LatestPushTime = b.LatestPushTime - }) - .ToListAsync(); + return await Context.Ado.ExecuteCommandAsync(@"UPDATE `t_track_push_config` `a` +LEFT JOIN `t_order` `b` ON `a`.`SubSystemId` = `b`.`SubSystemId` AND `a`.`CustomId` = `b`.`CustomId` +SET `b`.`QuestionType` = CASE + WHEN `b`.`LatestPushTime` IS NULL THEN 2 + WHEN `b`.`LatestPushTime` < DATE_SUB(NOW(), INTERVAL 12 HOUR) THEN 2 + ELSE 0 END +WHERE `b`.`IsCompleted` = 0 AND `b`.`QuestionType` != 1 AND `b`.`CreateTime` < DATE_SUB(NOW(), INTERVAL 12 HOUR) +AND `a`.`IsDeleted` = 0 AND `b`.`IsDeleted` = 0;"); } #region 订单关联